jhove/0000755000707400001440000000000011510702071011051 5ustar garyusersjhove/bin/0000755000707400001440000000000011510701764011631 5ustar garyusersjhove/bin/JhoveApp.jar0000644000707400001440000266057111510702111014047 0ustar garyusersPK I|$> META-INF/PK H|$>qZ\3META-INF/MANIFEST.MFUOj0 :nxMsȭ ]!kiKj&fl#?lӓ^Μ)&uw,b ہ1\:&rb~):hL|bKwfR,Ʀ0krլt)EƩb#) q_u'CG)v~½Wy8p`?lvƶݑ7EgVn:>d-)PK H|$>`$& ADump.classWkXW~efY]v6bYm]%O%6IܤZ'0&.ew)zj6Kb5UkR]hZny6hpwngsylf|L֤>qcT6R_lƂWoӅUC%ќHdD zRH82KNn##keլȐIE1JG 7-SG ظ9fj`[A_-UԭȬ;.vٟ]NΦ nT$Rޜ̬(T4SCa*khC;VsZ@V9_v̪GUՃ^law3tbLݺuD{i1u"x\QSƾcBz?=IU8Cp}#$EQ,1p7d>CTĎK*.C,s3: w5%kesP3pGEWtIBm}Y/Bn94k7) NF^AfEW%P? K/;GBf/DYc_cw3IAW7QC,-ޭyl;R10 GUWϊ(W9"nݽU,m.7s$^pY%z7 ڂK#!WCyhJTsDH3m;-$-iIZ,z tAtdx(;y73sn8=4~xKKȯ;rŕa/ڈ! A!\HDKWrQ]5e AYc}:q{ǃՃz;+XurheI,y4P+gp[@Plza"A .h hjo6 ZE 9He>"* _ Aghꅘ(cVEjh\,#"7kKmWFPNN8G5z}֨Z;gI:辥=}i_Fȥ,v1]GV2Lvc-w6ehI1n_Sp> /&;ݛz-Fc;'82EȻ$#- $5vk% WP5x57,ЋPRM yl&+j!)4/l_@-"MC0 p@zГgU}G@\Fd ИX=@o%N,v'ZZ{,.jXܩZWITo PK H|$> GDump.classW[tWWO&$kd;$mAv8MCIA8-4G BiyJR@jU24#ɑҺ̹ϾΕ~ǚc8ۆ*>$ T #%T qc9 ᬌ4e\9`YdXEy,*(ᢌg|v.?|YWd<'cyk2e|Ñ%W#/&[ox"; 2KWƫ~(GlxPR7nLtV {zqٹb>eSE#yᄑ6f3׈OXc-$>I[CGJEf  >4sŴ-Hx]PX M'TGBU!.93~Hi!K3Ÿxo)t>Nku9[=X93o6,EIp];s#uct&e~.?/ IJ_xVVp\I#3̛fYHӹ= H{[T;^TMR#I#XFfݝiui36O,(0J6ġp̉Ўisxthf |:9ney+Ӱqka;s Qu.z셬lV7 }Wz_=O j<+uW^be)3q}ڼ o7!3U7|jh҅Esb 7(zS.FK@`i5&ԅS H9~P@-tXj`RIq*g8߬nU$#3)f`SUEˡ+kqJ2Q7W8C 45SSVP.v:*XyRѴ_#քZiRʢDsB5]"[4WN:n.:hrrȉ ;bXiȟXLl{vt)L TߩJTxp v҅w̾||G8AO!UA>r`~&bR*&' yq[;}ԇKэGG 9BN%>nz =zߠt%o#p^ ^?UI $i! C.F8눴NyYw/qmy GG̬J2Dump$Box.classT[sD6HV(ni/;:8PlmGIy0c_x)CСg$IL=v=< fsX+ "fdVzOlVjz_>u u2>ѐ"#2>Oe &pCš!8ش-o9]]`H z l!Ӽp;ܳ}Zg~0d,cXu #jAst<nyb;vPackmmSI" Fj}by7f6k;-(:E_+)%l=>h; %UbNEE _8KE+]@QjZ*8.3d,mO%=:AO"hEMt%9W;EZw>-;jsd؍jEz9iYJkt#! :@!VJߐHߑ"CzD!2ħFB,N, "5Ç/.&]CH~ V'_I3o$NKw0)I9[)a~._U< o8sÛxk'U„rNfJ;eiyÔӆ)kMkgh)emƌv1<ŕ ?!ǔ{(P6=42|FB8<PK H|$>k\L+ J2Dump.classVWTU]f{r(阨#CdPOF@ipaνc`oZ{+֪[k_>wxՊs>o}W#^t`*:qJ=*2W*<(!V.xi] =H1=*rH. 2(@X*02*Ȑ؋0U)}bR` NRW`#Bc2WQ'd<"6 Ox<+؇Wm|Xkx.[$ȖW;bs {$d67մHHȮ,[ٻh(J$1þ7஋an$z(BvˆU v[ܩzWx& _# IB%D w  9J7.4AHPvGF GIKUq*\^2EpeBbV#jI9ׇVl&{{yyuzgmhi u*T3!\[45lrE&1Դ"%8pebx ?c8 3466 ws61381,kFL3 @& hcSQj >|>?f_QE,4%c8/q.i %=Pد'zBh(nX~EL67bٜpwDR=\6u)VQÆMCI 7ʹ#ѬgWZ,{]F]Cm'IlX C=p&烔 o6y"VIΘqsNiI>n;MQ0ISQ0Tl:L=n~r7Jk@ys"]Hi*] 鲣v#&[̦bݐP =iDfҢ`b8֠aYSrtPkv$n>fe /!klQWM.OT'J3B54[ w:ܻ9ݑDkFFO sEK?X|=qd\)33H|rxJdޝP#&2 @v[qWȮ %O(6›GN qhRN:)ԯ\J;\ғWyO7*˯cX+˿E1.=vZ`e; V1?K1dUe+c8KX-="t6eɽIȇ5MSXIȷ.%\b$ 4Ӌ$FK->%~UJ:P'H :Sc)A )lv@?'O'Kh|EMa32!IF^lya$_ȖWS-2ONyhlބ邋 D * p(ʊ S(䴔LW ti :eP.IpaȸUƽB_b(Ccߨ5⦟~k@kDZ#Z *;TѲz5iȢE]DU  PK H|$>? N JDump.classXitS%'k1OBh 4$ x 6TXF[dnISҽMnZuIB[JhilM=$MEw$/HNu̝;߽;w,?w K# CӁ.p b^E=*zp>VWqp`, p~ '$>%in Ea[>'y/|QK_W&p |Ӂo{9=)}/p~ C~, -p 槄{hUVqDAXo,qKeFA]O$֫WygdW;UNc]YND:oGw*~AĤ_QljO$~]=FoB&d!zlDzo )p4uX_ڰ^Ř_>rhp e_0ḆM6W0;jӈ)*O@⢆߱/32j05<,Nvuvjx)a^\'rESrnmRP$e5ye3o +|F?5uYbdH\k?BK|[~VLf1ξfFdF%BդFGQ@+ VR@, Н   9?#QyYMeG0ZSBT>ћ~n#[/ZjpuNFf l6 wB39s~ y77L5@4ySe*6V& f*aEY粽\I!_GŖ@Â3N8):̷h0mP֬]6(gU E'3Q qiϻp"E9~[EI/Μv )t6hK k YL=] qF+y[ u(m+gs_a9TeٷP)}gݴ,ӊ6R4PK H|$> ~m  Jhove.classW{|uvsy]ɶBE4mS !iI{PB&wC> E*-zm /Q[QDETDC>:k{Uj>f;fyƿƤJ +`Q0%aG=6aZN W[*&W5LV~^'m.bW &E#;.Wp& ދIxH$|H‡%(#>*c|qOJE|m'-"n`&3Lv3,1]%y _Mq'?/3W|&{-k\0)6 NjSZ&MklG9[4zFz]YOOFXesxۗm!^3Y-0}tV kH8Zr NO*Ս*$3i]pw hb]Sٮ)ݲ3fNĽ2ު5]+e<e| 8Bª$VMKMg&Һflү(d,=%2o8CNSfMiV;]0͌=6|_kJvUWL.p'ru3&xfbjL i5Rn1z.im8^ef^O644fQ=Oe\ؘ:V3W 0' }J7npC4΂QGmpeiQuʕk:W\J۩:i]t;sJa;lW7 O]f5[O\7^Mz=[ƌLR$w}GxDƣLd|ߧ&Lx?4ToKf겈<'ctXs0c;ZOl  2e?$o~B]%㩲,<4a&: L &&ɘ؞ 17M'C-L,&6 uC{Z'3Χxg9+nŐ]RjtqCxA@rSKe h>1 d7?␌?2LW5=U7MI*^x!0f2~ Ԍ\r,f);J^-EArM>j2։jougМL7)%l*qʑ& @ r[b5|[FAћt"3%s4{2=7O:&{zr]٥\FR$ڎ%29)XzY$2v^sԫ3#zͯ}zr-N8Znn 5sF,-Iik9m":y$>ah=[_|H%MҚĈ$DOw샰W˰ "9ɰg?þnF^b Igh7yh?B#ycuޘ?7݄Q"1Qї*ym%̻ lKy7շ~>+"oŧ/VG넸_$x@mqY7xcX7<e>̏(!"E18j#qnEhq%<di%ZoY]p  .v\8(Ȃ*E9Wټ#n£#y(<^S h) %Հ+@Q,p hEa XV XR|Q "W|PS.XepЕ6S1ta]1(?\W}bELUISIss;tފ2 Τ#^+a9ФXV N?7r5W bQ^D:r?)!+zm\J7bԗpNEi9JA,K[sXzJw%>Ula`M[SUU`oUBp>ڢm`y>[1oۍJkTQBQ.A&v)t_%уFPJ%Gc T=KPPZߦu⦻P/PK H|$> W0 PDump.classVwUMM)m-YBIHٴ, M-jA!yM$0}AEQ\K]pS/~Ge%N{{?z @;.)؁>71 cP^SH0$Qƣ FpP 1<} 㰐'd<)FMaȈ2p 1c g8*#ΐd0dpL` 2,B#q BRІ2"I!=#gxA%tWNIpmדSBeXӈr;&`\KƂ-SOƶ X~KRCڑ8gxu7Nz0IQ.;[*m"̤ R`(HyGuApZ;8]'aI.niɨtp$S0/G31͜hp,z:8>fL`ˆf<EАq'<UC|"+ Z\:=؏OqN>U|eTW2*A*eN#I YltBzҍf)7OBX*>u0) y+ 78BA:K|E=?#p`;a gKEZ% $GT|-+vg*wB^"JZ%$@\?8L? %,OW3~P;V>S5 o? K`Yi֕qi*mqBUq5PP,%8hޜ|Rtz |r_vWWbDk WTt0Z47F_oOK]qi3Pnr .-[Fqfέ+!iZrZJch@)۲KWF0b%0o^ oHX;%_fc@T}T[׃Ө imlN:NGI}s 0K% =_{zW&=c皅 n PK H|$>!lI: f TDump.classX |e;I&KҲ-vIIڛ_b$ruLm7awSbh "XPiBTT7YwW O{d|Zlbϰ*W!`2>*qX_-BFRE^8.nPp} R4FdDO"lg, Jdad:.ٳ5ohVytxX'P5*IGFD=jb PL%il8G1glk{{f&2mC{?TC Hk^rɊK)ZYAj F6#GttK_r $VI 3edusoJC`G:c4`3nmytB=FxRC;uF<=|-fwqeĔ<㥍:37i:oٳtGLr4ҕ/fKH]O-fjOa Pz *gSraowLd|éD/2>=u;d߸;:MYJKn(BJO8\ch*cBTLX2#em*wg||*ɸmyTD"%FJ:LIS5`66*J~i ¦:u ">e"G+9/ʣckA] -M|[Gв>{Y| V$>F,\jj›B Q 5"M /f6%0ͺ Us>`]yv\r& +X =Ke]>TcI:r\Y%$@ = iĺief\K TvKOiPy:Xr~ :._K)J; bIԃE륐5dyȠ )>A+tMqսR vUb-fP->P4ldrk”Catr`>3ys^= Q*,KO¶3trWcw2G A`ֱug%~=-֜ZwWg̻siwL0sL9n[/Sr~moZˊˊMi:x !l?`XhDz$l +u<*/:,:\MWHDktםxXQзAJֵQ\F0G.TK˪*5 {~TyӚBZyT)Jҫy( {,=}o?;_ްGk+ P 4T%T(J)Oe_UserHome.classQNP=ëTE[E…$DK%bg&~e Ѩ,9wΜɼ?GI a$T*4Ux5+P&,ےQNC0tL&,Wg-,MYIײB],dtd#~KV!\[ߖ~O{wNG^:c[#mq@AAQv +NY@~79n zRtx υxh)WyC S]nW Bɘj#M!rMOHS)i@k{1<#1#ç dlR.r/GĂCbTІPK H|$>_ WDump.classW[wWFFc[Qq;J QJ[I6NpXc[,r+@MҖbn&YK<`-^Xkx41{x#a;{]08i&fT ̩hBV 9* *4<1̈(,9W<%_9_aW5NHţo8Q|˙SO|GS <0qxX D);;xlJLJh:2> [>,;%A*dX^0y zdqƈll3ylLϏcƩ):R'ݖ\4̸Y*J~$afJ{&[ e#/Vʴ` zdi,i̬w z;|9+j AJ9  R2fD"LJ+ LxQÏvgZsmd/Jt+33梙a|eTh;}HDF&E(zsQ~_j8>pBdsкe /W5%IxF c*Y E eZZAM5 cKlsN /ɚarRTr4Nh(Hl)̍\ZH"E3r(!i1  z4NRn3SQΜ13J.VȖb g̘ )79~ nYx:NH'd$5M\Q *ŪQs)˪F<ڱ7z=+!of[oBo-X!SəFLZ,<ںN;(|f6o঩L%Eﶬ E7#_-M6,}I󡊑+myisܿm' /rv)erʅ%p[{HՈaCTޱEΊKлz/?5{$!W:C ǭ~ח;N܋ufG>mJW ]ޱ~c^I Wh O[t DjJgU}+BK9!>o qU)a2Z`hS! ipj:ѷvTѡ*v:G]SOܲ m꾠R.խv-[q#Tq3gӴg;&ڲT!4&MM=nD~&,jq Vv0N[ ѪF4邚6߂.x &k6}3Auez+_RY|![!Aq?Uz 8*0)pLA&k9%IwBߌ*I:D6Yx#}-E2P}KuXnS"~J=^qUArdP1ܣ+貮آg,d}sxA/8Bhc4}ͭ1/_UN|(=Ew>ܳ*P~S+ur k'bW:j<:ɉ/82nǫhoJPK |$>edu/PK |$> edu/harvard/PK |$>edu/harvard/hul/PK |$>edu/harvard/hul/ois/PK G|$>edu/harvard/hul/ois/jhove/PK E|$>455edu/harvard/hul/ois/jhove/AESAudioMetadata$Face.classMO@QlTTxDcLDDD nJ 2N a}vٯO8qP }0\4YM(wHۑ4Fµi>*?RbD1c%ZwVҗVT7%}޽5{t5|W.VOmkۉvij՟5Xѵ:)Q9!dLfT=8p6$J;'\<a I< dܜr Ռɸ;e u66ؒ6J2NPK E|$>D!9edu/harvard/hul/ois/jhove/AESAudioMetadata$FaceImpl.classUmOP~^u+c* "":p/f+i;&. ?-۔D>s9yϽwx-!q`^Ba"!Wg%Ux,b=Og"6DlbHZFѬV 0 کUh<1D`Uΰ|bXeͶ a`5YZYz\jvs/[hh> e9TϦq*n5eRTˬ[pJ=90 [3+Π*A n0t gK;24F++J>V,֥z;XXieʷϞaI m ]ZC'K,#6/)aw H@})c S }-ve-K)&"˟|,S!*ϵ-cC21$⥌vW:+Ź%;7xm2^aWn0,vQce5tDtRL\\IAl˷m=[=,cJUrؓt2@*ʼnKDtjE!ә:XP"uDi)H u2Ka0sd+#gϞLy~ ~Hΐ ᝏ; mq(|f7g0s7gܭ!dmү?]/FbsF!YvͿ9X5ABm%$L5Q\~PK E|$>4;edu/harvard/hul/ois/jhove/AESAudioMetadata$FaceRegion.classJ@њ4m>˂"<Vz4&Knp|J܆U<{fy}{~p]{^,LsGic^FBxHfq.<6Z]sCS_h;m6? pɡqӥTp ,"lWhFWq,s[c*.PK E|$>D?edu/harvard/hul/ois/jhove/AESAudioMetadata$FaceRegionImpl.classSmkA~6/wڦo5ݥzUD*)!%ܕK~Gi6%}ٙyyfwa3t#jRVQHc|]1k&Jxc {!VCkEeb CE_(s[4b}30^. 16] KO9;4bXTINu%N*U2sΐr~ b!3@ah_>9Z$go~oMLkI6V'$;QJ!ad,%jJnL1Vˑ"'jPK E|$>-59=edu/harvard/hul/ois/jhove/AESAudioMetadata$FormatRegion.classP;O0=8ĞM;՘ b4gdx4jg}{>bSFS4Rd1AݼٸH|pݙu.P<7.SozA}e)gr>|1jSV1mVW]K?6cԦ S&#LR EGI> ;H\i1)k?,4eJqEluy7CMpxfK(9WPuXC V6pMV76R PK E|$>Aedu/harvard/hul/ois/jhove/AESAudioMetadata$FormatRegionImpl.classS]OA=HK-"l"~b Ť Ą5MX7Ob&6&&껿_`l}@l9ssܻ~0$zA/fŸL̉嚊y7T,XdHn8AnUVd^foLATzjc Q8}ܞ{E>3VK6y!ߩ ~ Y/ CͽFH،+H[0! ØЇ3ҐdRDžUaX:'z{<ز+4"y!͓)XZή] J>8Ļ$ !гĈBLG1 H$)8K9Q0n4/ 1 EU5>y,FiBF7>#>Gq pMKmZc]Ֆ8&"zrHO*dRwC_ e!zy+( :x4ᲑR!I5،%@· A!xbJɪVK9}si -~sߊ\MkPK E|$>#sK9edu/harvard/hul/ois/jhove/AESAudioMetadata$TimeDesc.classMN0F?CIB ڍ%8AEB\`GMFXpUШlGo_qbZ`gluw@Qv\dQ,M/ӓA3VAd;Jr.Mr-̖=)tVbWĕlrԑlH{ͅX?"8C_(ny10̐Wϸ4~PK E|$>=edu/harvard/hul/ois/jhove/AESAudioMetadata$TimeDescImpl.classTR@ I[B XcAQTPhQRPgYHmMʵ7 /xggsx6Ma3}{ٳ ` Xh$n <{ DZtlGKB⾂)3 2e^CjE-jvE푹  {u7AF٥Y^+z*{;9:W/9޲M;0 & i+b:V^|̷FkoVɡa*6Cr\pV,F%D\tǁ*T\%x:ͥb U↊,t #D/tE9U`%Zz]r]6_/mnVi>زԒim0edu/harvard/hul/ois/jhove/AESAudioMetadata.classX X 1v]7nMHZ ,G Ib!ڕ'6iSMLK$$*>?3o޼yOz`/+>f}>x3L^&1|ЋЌf>#"e1f?1?}A\O14 b "ϱLK>|ǯUF_g 67}=}؃,~Ћ^|/@~?Qŏ}?gls/~/)#OJ!_*|^. $UU>%9*CePZ{9̽9&tl<  yUڴ+.H0O1SW$vEbQ:*|R+)A8GbB >L hHMRS`Lޜ>cDt4<4ti(-\a>+I󔫴T,&rFS2QItrV)0g YҐ=\Z,ȟT&U#Zʚg SJh'䉹9U&=ozNOdD;SپXRұxVk'^:Vtڂ6̂$M%U#x1ܝ.2'S. 9[_JGR/(jB%#1Yզ %`Ϻܐ {]L;M1}^";Tx!^庋Mo#~E+Il9clwGOcI7ɓdI/J鐐P3 %$]D!+2G R)4~6m ~L*& %ƾf'QH-R"b2Ԯ:nUGO}>yT_pd,c՚vY)Iô)i6gBCiD墶@;)Qds~֎K{Wm;?P:bMqXS4lxݔ]T i{\XcB`ttxu܎-} ynӕɡyk;~&ºV{eopv[m־UtWT$]}=.T^m&(dy۫:ś#Y8ݩL|V•}v穂~3.Z;l|+.K~v*ѽs+YyT~ ?qT^;;UQk^ ̸3]Ijg-=|L7Uq{g5r2nHz#l_q1FOzhxKhLxPK E|$>%edu/harvard/hul/ois/jhove/Agent.classn@:&i_R4q 'B\$Ro<q +Q_793?~SVu,X|,X6XZxd@-H})Odaʶa840Js OeToaMd 8A.`&}5~0c>{E4'l8){řZvWiD9o*nO7M5n97*0R֟_,d=J] 3Xe'Ʋc?Ƹ'.\̹8y XZ,&KsK@13vo$ӫJe0e7,b<7*BeA/^"PCxkG0#T˸R6) 5_J5j5-6ŖKZl+|VvW-.qdP4y9U=)~GMWP==~PK G|$>tv)edu/harvard/hul/ois/jhove/AgentType.class]O0[ںmG@1`||(b ͶJmPi mP렐Vg] kr;i󼯏p\"6 ±YBE&ʱC˱Gq@ZhpPjݮ4FaS}3/tG~;fn w5-l۶-Zh֥cos e8-4y(䂡Zz3O{b8óFaz>lװģ#EIBoa +-HeM:0dZQ&+'wqtJS:~:4R7g' ְFE߉L1) /kˣF$(ҕT4#_y~0|UErã'G +dU̯J sSW\Pk?(WPK E|$>l9&5edu/harvard/hul/ois/jhove/AnalogDigitalFlagType.classPMK@}$MӪU̓a!ABOؐn$?J] <8ޛy G,4 LT-Ьo&D]@w]fLEN,-X< eRԍYEǠG`^'woM]_ȑ1.Zm F#t<{A2Yf>ڝmc FM:l8R$848E0G)+,k`WҀ~zy St6]$yC[-u M+?PK E|$> ndA#edu/harvard/hul/ois/jhove/App.classn@I$ MSJIY8,lj%T&!.[#D^kDZC!$"swOau ke&uQ)BCkMTUta`N?i@!H:C=eGԋ1q^?^s~'//랤A:HMfcQϧk9[F /reQdhz6ZvGc9v? ۃpڇi2Jg6`9b%ǛKKKq9[9Q\jZ߰RL<PK G|$>=o2edu/harvard/hul/ois/jhove/ByteArrayXMPSource.classRmOA~V^gKK[*PmGIF *9;DI$(C5/ٹyyv晹'|40c`ޘ`ZLmLü ڱv g0]&Ω E ?+%.J^%Es!zn͐-L]=`~kv~,[{mK  pIT-})jR1D 6;+}aZׅ UNnݝJZR S,Ŋxf`aEm^ ㎻:GǍ|0sG}jwaáun qԐ!%PS3 %n?ˣnO/ YڲiZOF%!=紥/o qҀ=0Uu#f;W;NFO.4( A^݂H? >D4J>'=!֩+$PK E|$>=3j(edu/harvard/hul/ois/jhove/Callback.class;o>#vvVv6FĜlF1 OIJDļt}kMOFԔRĢĢbT}gnt@@PK E|$>1~(edu/harvard/hul/ois/jhove/Checksum.classQNA}=,.$zI +i afH8 /4x(c5I;Wޫ'SNAʐSb!TF}m>iXi;Caڢu*U1C']!7zno`-[]2\hUE5`1IDm :kMF6%FUwN\Xyx+.KF%iv-UGFG+ovox=G qD# ' _FG4=~6D߭&ɉ)Hibn{~2FrEl S N Vp !q)`DfL(ؚ>K?B=!K1m %vE5?PK E|$>*3edu/harvard/hul/ois/jhove/ChecksumInputStream.classTMOQ=o: ml*NQTTDİ C;m)@pgdFM&Ƹd/rAC"]{8=/}QdT@WpinQq{(G8z# /jGy|LcOjien2-ӰFT;3e%AVah׍Y2yP/ef[1WN K^)e;V3x'L1L'/rI8W[/I ݋xiVޘEJ嬊cK5OrYچ]!O\\\BYΫ)B_HUR%o5EA㪌 ?#"cҏ)L GqfAOX%_EǪ^aX K}=i_MKr6WKHWDH{r=vOvN `z>|@>xwK|!`H߇Ѐ4vjRE=.Ҁ7mqbEpimh-R6݀<Ab>wLtωe?1G\he*r\!~:-5*Mq-. ]ڇ1),{ocrX .ayhdݓ^{\18#ɸ pn<׳)E)Vg T^+QR5T;i_PK E|$>.ef,edu/harvard/hul/ois/jhove/ChecksumType.classPJ@M$MUkFJȒA^<&4iD$gGkoagfyo@G&Ltu 4M(6g%p@K!A{.( Jyʄeͣ Ū\><撠6v aAgظt6p&<˂NMj;-l)E}]i sTXO6侮g0ؖŧWl ?ܻIF u5u PK E|$>4}SM8+edu/harvard/hul/ois/jhove/Checksummer.classTS[Unx ɃJ6@1hT! -VȻ$7.v]VΔ L҅ Gf &xuWd>"3ڸ {~_`E#:1~CI )ZM>6i!f8HCGf&:SDCcʦ1,Q$b|S,\)⻕euEBGUreI SOn{jV)i.ٲ \0t'-`3l*HK@K/RYR$ESרo*RD@ +F\%?ż, tjpk l[bieIHk`]Ct'D60yg;) f&0w5 clnАŦIDZ.v&rȫ(p(i01FPƖ@y\&k"I?%4ʑ^ҋF$]FRd=ߒhZ&7JMNWe]^-edu/harvard/hul/ois/jhove/ConfigHandler.classVyt,{W*818!Hm8'6XKk{5ڕ@[^КzW=h&zR}w__{3j%Gy7|<4[[=apwq/1y;w0;dr?ɻ{e/d2>F!)Gya#()O($> > >Dz+/*8t#/xO]c2PpO⬂0W3xV7¸ߔ-Nȷe|Gw%4YͲ$Dǎi Z"gI`g%(-<|83H+I2̼&Gh^mf:cƘM6t A3oZޞвEiLV/vatݯZ2ϳm=7?dEJHy5g=+15-"Oki/pl\GL-فn1`X#^d uH*wcVRE+ wI靐43n{E{zOcSY;$#թ "gS&nڏudɠ]e2x?ٴTԏJ: 0ʨ`g=$fa6&,m1&t.$m-}+rHo1mXsOQҶ^'aptz>S3 jm [fvAۆ}Bu/ު[v,z?MSg݅vE4TI^&STq Lnbr3[a1Tufٜ<ňRqVOjm6מ1*l*qll16ݲ\w,i,P<T܈Ij>%#DF o}*~HAgBՋ%G*~^PO@OU ?pszaYivEDb_Wt VFůU;{eIş m'Ӊ(ʞU op)&B&1W&LJ {9[+}y{bvYR)hE 31BڠVԲh-o=q/M`m~PBӐt$4´ $?b>Bk5z`jљm ;j_B':bs*3njhl:U\FLڃ4x2=krDyN>8ƳrOd#6-9U{OMwh~]@?iY@ȃO)<7f\~5~ڍ/-x Nc C;cbg\E2_6K9FDabfDea!XFSLZF3ٵ]tyIk%eluiY̹qX}qOQnc5aكo {p&ׄ[=| xc.|[MfϺPӺɳ`׀7zŚ{BM̓cPޫe\v`cA~pz.QU\Y]£V_-xjfїKK8^ KG/j Wƣ= Rxl(% ‚'6"f'$A,H\ ]׹eێ8YF:I_Yx4.\\ Mwǣ/6^"g %y7ҳOad Nf-;n̒t$_o,m_'B%$%txWp%O:QHxZAgHǥO4:J'ǤW#6=Y"ad-.&U inX V5|7}SIvǣMɨ2edu/harvard/hul/ois/jhove/CountedInputStream.classmn@E㺱HBSAĢB WE,*UzP܆8J&|ĂE7eĢ7Y7&͝yo?~~?pM X+DUUJ))pM\g(b+^H2,m&Dv[$ 4ܓCv 2Jbզ➌NDga6@&id`os&yNYk XV젂 D<p ;i2 D/E<7$ gGIO^ZO/Fd}4 I45U6"(mϟyoоy݄6աtD#ox_}yS5#e|/L_`/G7K[==N <oi<#(edu/harvard/hul/ois/jhove/Document.classNAƿmnrtr h$Yص]Rd/$&&>e'R|VpGb>8'9YAq s"`|2PMٯ?9OQ]̗_Ɣ"ŚW8/5ioUt.pI{.K7 <-]x%8- 1wIQٵMv7B\ >'Jt@t,edu/harvard/hul/ois/jhove/DocumentType.classN@BG7\WܪjLj4kJxYa"UlM-$>D2Ό5M}trΙO{I#E42Ŋ*EAr"+Y(ISlHnRlIn0Vj&A[]=7ln'Q G#';3m^XCZwղ]yD<ߋ &;׿5Q+Q(p+ba%F^0. { )?a0qLz-QaJZ0&Cino{F^ +N5#.Herdl̩ӊ M`ND7ȇb ]~ qr]9Uޯ<|@9S>|H壿PK E|$>g $edu/harvard/hul/ois/jhove/Dump.classuRRQ=7aLx$&IPQ R%j  TPqV7@)VM"qEt>0"n sG]РSe } 9ccA*%A23k Wpxٱ %w!n]ʶcUOBp*f,\XKve,;#0` 4RmUmhWe%Ϛ};Vj>{/PcATs<Enąxi=չSOt<ńM$ǔg; SY]-XZJn;p^R殳36r /pK^C!f.M-;_<Jq ƬTc?+NɽMG 09.: +cOuiO3 !QgDGNx#d"oE3MKs)c4dB>/G4~u'# *d##~QHSdSh$yB(/q9&نrd(YI%]hoB Q/%i:e)bl_=)ct77)"S PK E|$>#/edu/harvard/hul/ois/jhove/EnumerationType.classPMO@}SJP@71&ă kmҋM4&(,x||~8B6Z6v\&3+h"iDA']w,\pMQ CLNUė,qikyew:QiGÇyׄ U 5Qy4^ !]ost 6*5Q"xEh%]fz}^,/F;W{ܷ+PXkMF U:>O祤nH{,edu/harvard/hul/ois/jhove/ErrorMessage.classMk@511Z?ڞ߰Ы"T}!!HGؠ݁gXއe?7Xh1ڌGFFFOzx!ܟ1edu/harvard/hul/ois/jhove/ExternalSignature.class;o>#a.6^"A; ;#Mf^f#COVbY~Nb^~pIQf^OjJ~FbQYbQ~Fi~~f~VF~Y~pfz^bIiQjHeA*Q C!j5XSR4=ifG  Bedu/harvard/hul/ois/jhove/HandlerBase$SynchronizedDateFormat.classOK1_moZ^[ǝQ 9+edu/harvard/hul/ois/jhove/HandlerBase.classW xT>732y&L$@Y2$b"$A$#h|̼$yqfVtZkHKk5CJZݵڽvz}M2K~9,;Ϟ=q jN;ߵ9C;d⏈bsv(vHKk~Cb8MU~gc. L_+-F4/m$wF7DxK-Ίp DDE/"2+ʲll4"ECSrE&,OdBD Z,YD"+!zfTdsD6Wded4*'<;*ll-Yؙ͖-Eۙ|h"[LxjDVKB]$[! J:F15ާZ䄲N R Ub9W !1hlSB96"B_ ;ſ^"JlWk]%=]A%jPy<4` $7H m<"ሟ +WP8#rߙ1!O$:<OWWޝhQFQD7D;D0p@"NFCJ0ʉ%ֈ 1 fJ%BX8SVG/sOs&5y(f'dʶ@&RKbE# E8oInkrtIЁ;I43!wC]"U {E0.rsPkd$J?ep-Z8S;`9l]l`! }%Ta5t*]os(JX]30ڔh0R2EnIʑRL6+ChʷHpL &^4R;bjPǧI镘w&MÉ~qq;i_!SUzv0R 9[!d耙؆f  Bmnnps:hD/yY&V92Lh`E F0#a +xMdLekh6Dh By1~#]b׶.l4]50!uoq-1M-F54##{Hp+ƅuՈQWsԸO$Kޅtp8W^HxVH5J %p .AuUc8KcJ f9Hl-kX %\+uFY~/hZAqcڶ@sE%ʊJ O;-wtvrV%tV?f+4<'p*%x8Cz?FIbrmfȪXۂW<8Zb[Y7Ϋ" _zhO}VuJg}%Jl^Vل癬WOJbcߏ8۝ƜP/Yq(gp78q2a&Wr z)(,ЌO1A2rStG."d=*>cTv){)[2؟4e; l}/g^xD٧Mf)_tTϘ%Y ?>gƯ2yO|f<= |Qg#]Yee|IN~NE-%bİhIX鑚Yx.%g \GRtH'aiqnFSgCua~b$X6.5G\c6rNX'԰Up\i2OXoqEp 1X1yI}mrwԢ^7A4{NVOy)XԊu$c`:"-^ki-p Xs/beԽ*ѧZauZ Vr\u4!`5> O̧|:4+BK 'Z&'->6}tN 2j(q#ݎ?l PK E|$>7_L*edu/harvard/hul/ois/jhove/Identifier.classQKK@MhVVC,x Xz-ѬmJI$n+K?%~C7_Np4֣O6*6zy JzCs؍<D?~/dG_F-6 ixwcW ܠ+Tݦ BEd|up^]Wk3$.BoeTIj/%h=DKT5; ;pe8Z%!~sߗ8MڙN3A LѭBMo`AZ $K:#G3UuFo6RښPK E|$>2eDP.edu/harvard/hul/ois/jhove/IdentifierType.classn@g(N:=.nR7PvUpPH*XJ b"aḴ1c?g?~,9اا/_b>~*57ob~.='ؓ)ٓOPK E|$>D$+edu/harvard/hul/ois/jhove/InfoMessage.classj@՘hLU۳9HS-,xUzI4HI{Їh7,̲SMx`<2:'=}Fa!*W"_n$N@[Į'R8'9w4Ԃ&ds2PIWǃT827^*^jJ6|4^Flѭ',>uc<]P: W*mnPo`.PK E|$>dGS}%1edu/harvard/hul/ois/jhove/InternalSignature.class]KA3J?nn@ Yp5[c]Q7A"tGEgt 8üp 2~x]h_D)a>]bGYp¶a]w(r;ed?PK E|$>E$+edu/harvard/hul/ois/jhove/JhoveBase$1.classA 0DW%u  Ӵs<a <_ )a}vqMz+%a'ՠ w#w6վ 5~}x Şt'!H --Z=aYW ~J0G*&M-OPK E|$>HhX?edu/harvard/hul/ois/jhove/JhoveBase$NaiveHostnameVerifier.classRMK@}M[jЏê7xbvmiŃ<QTDDfvf vȠ\RDl0b_C'S(ѐ c?L$4Lh! T|hR4 n8$Mdx7G*u:<1z=IUt6Pu'Bk&HCҠ%P,Aܶl3_ PǁcRɈO1߿ۘaz* v,|?{WlXf ]JEjj`?z ,9KmV@.H<ʤ6X՞}k9 4Ek>PK E|$>mO;Aedu/harvard/hul/ois/jhove/JhoveBase$RelaxedX509TrustManager.classn@8i܄5P~J)4i J!,LN,UbP; /~ܙsmh7Pŵ:Í7C .Ps}JF2UfL"Q&A:|g. \'N)kjoLS^ujxd,c2Ny Aq!13qOi'Y;"cvJdyR?/ĦK=Tޗ? s2LYKl\$Mh"ļ_ ![F2uD7 >$:~~@X#fof)#Fl?ǝADw?EoG/ o'?6P,sꗂ--!b3`*؂4*hyjy*>jsJA.cSXCPK E|$>\;@EOT$> ST>OSt~g(ܭS>YN>|.; t^ċ(qR9y/B/%;~͵ K~/sr Ug''SJӨWtԹ:|v5::jP:j֫|=Nw7&z6P1|ެ-íT3\~-q6F|ou6'iv*:ޙӀi|~ ]KWrvp%9@ >j!*´zAR;U D9_K1(| TKÿNŅN~/2*2_+Tv+U~ZP~5I5[T|ɯUwuN~ 5ot&Tܢ|Qu+{~߮D^~wRr j|ާK>깟  a'G,yxǨi4rZɐW> *TS  Ϫ[՞S*|gR *|h*?*%K?/GᯨX`'8TϨUש4s&A~AԾE}_QmcNu'kK S[*~}]*>+ ʲ0Ug3;X*JA'rOS'?sϝY_#>ӣd<- u<&vr>PBB(%RQ8BQSiP:C~o8Ljޝz,k #ހC1ȯvkHۥoCvy#:s;=|%TP 7Q ̨ o A$gKH0V+7bV3PZBbCUժ W5453P+몪Wn@و3WZȀ|V窺uVWӪ r,mk72oil]Y՛76z"Ajw[0A*0Hoޮ}~ZZ;.*_B@k 9F}gD}7\Zo72Tkz$ʃz*h Z DID-]nU͖Ko D{"EaN.$pgK#¾7]+}!_op@uэD4i SOk%g~6ovkNoh7V/r&T:d 7٘8G74ԠQ2[Z{B!=i ޶D5*tC+Q^#aD"v;t?~/@߈z\lÍd4F4ew_'#Vlջ#44#-Ȟ1P&1c(EIHe_810tHk'-\+ufiDPXi5Q!NQd͆0p5q8Ui&l獓mSq& gD@ "TtSq@kط4N h3wk"BG M ]čS3ųǍGM;!nZg\(AgN8q9%XۘPO%3*xEv7REo@Pm4q@_j",L%nCjAr ((y)2b E\՚Y7Isޙt\x̒631iR6Xq-< 7i٦Kr4q&GZ FM|W\`tbЏ>-b705ȾUdsv4F#`<NME{79{p>!{å9H$&@r-7ozaٍ1|CD;Qq:z T}4}T`z@%N4gl]]u13޶&PxP< 5v@gUU6 N&F51 i_Cx\ k $ObxjOSq#fq7z#z-V?Kϓb xQu&H`%&^PcMx=:R5-bPY%oݘPR]H^ 3n]ް;^c0]4 hEx7|4ϲyC9ReSS$.n8:n^37Y(e)iv1@$)@bBa6=xCћ=ꉃݭo+r!킮 Fq٦pnXFx]cu ?A/귝Ae\یJ˷s]CViйRd>Wb|@ :IF]fLlh=Ubù)?0-9lݎ'luѱu]Yn\תQ6OHQrkN<J޾X,8ʆ鐷^Vc*G.23os~Gr5`۪/5*`sU qhnNqv@囹bq2RۤI{eRqLwu$hG6H^…0l]e=h\@10DTyA;Jׇ8J7'&4npGy2ao z뽑Nd-Vrtzjah mqr- n5pЇëTl+='5O#X,-VY`@aL9  $e.6.TX(2` }Ehfx^:''E<IqS3B9 } +/c#pd@~够qwBJF0(L)Wo*(&}} B* !HHW7z8\οɠȕ׸C-4G|[~kIµCz %Cp=꾁\ (؅Q}0O,QƟ#+5_Aiy4F4 5)LadiNװot D>:s70R% izȡðWo󨮴Å9Y C߂;<}0ӣ̝  J]ȥ.Yg7<'{b=}p'˕\p?(Е<.Ǖe- -ɁsVr̰(2Ό\Z-`(JYVD`cE~ WLcAɋts?Q@dR~C9OEiy3.ʢ탿R х'C~T14(ݸdRƿ ǘ+jԅƑI ,'?%lukI+Rj>O%΢fz #O饃5A ͎HCJ3áoS Dc4e62 CYF^'Z.f}uV΂xƯigC*I/uȞ*xg#BQC: id/0TL1^l D,FqaX{ƴWFo¸O"FvVTC[3A&Q[|T#8 f@sg}p/PF?3!%kP"g)T 1?wHbNl9K#lXӤ 2#Ęe80m(1xL> l ,!4d"X( i8(}#J\ Ղj.,9&zokj9h7*Jb>I]OatC~p4/(xow$$I\,<&I5}0ż؂ 5Q*. aLLPæ`#%'|G ,~h}&18;$ M:x`IC&xk9H\ q6l-6-H'PJtkKrJjFl?5$餛lϰgǤnsQw-KJtkRc 1bcS-IiH6x= 륤SZ%o/'JfYTgY<4)xYRϲ~vlj?X'Nn,ϓ÷X7cM}FmRo0K[0T`o%#u/g[_%ϱowlgMa ugNX~s| [܃i]A8-ͤcܒ e#YXmqY)'U-[>Mf ѐojCZ+)g^̏], VcV;5º4h4j'+JҢ(+ȦyDv3E aF1VKreuElHX-Wul!lQ-)ύ7ngt\_޼-ub |X~W=Y{#0g*O2ݙpa,ǭ9NQ'sL LL}Bm9[g}sJZ(Ld%X[{2v J& _PK E|$>}UO.edu/harvard/hul/ois/jhove/JhoveException.class;o>#^.NfYb✟ ᓕX\Rn"84RSJ3R3Js32R@kErjAIf~#0(("3 2Hy@Hjmg`VJ 3i6- LyPK E|$> o`(edu/harvard/hul/ois/jhove/MacStuff.classSKSP.I{K*J}ly4O(0LmJ[#/nظA+G9$͙;|߹  dp!.rc`JS1m*&f8f98 3hK}EU%Cآx qjʖ-bӍjj+`}Mh2)rJR\խr;^}2Td;tFZ~ؕ~@Gфk jEʢtT1ҵ'7q &+3b C7U]Q2 e6Nf6q c٬pUuc0:(9Njj+踖rP]izaV;Wm yb5寉{?-1l6TaWzNDFwx]E-I.>U8N|.] " c~,(f>} zq#8 d{}Cva8\e,FI7jyGHi;Y})[ڼ2%=k3l.R*b9}}`ҳ.w칯6y Ϻ?`-#SPK E|$>'edu/harvard/hul/ois/jhove/Message.classNP -e(u4qqÎ,lI2ۄD RO j&ܓ;%r08 Q8vB  } ъiXfMm4GݲmS6ԑfԆ=+H˚oW2]Kc`0dm&ͬdY,P9C3Ţ4^/"8(b"NH 靉SmQj,u7KlFCa$zˆAGs,i HCU<@L)%oXt$˸qe+[Қ9ȥhC% R!H3KK%e^yyO9%ֲ PK E|$>ʫbB&edu/harvard/hul/ois/jhove/Module.classTiS@큅US Q]<8X,k-*~ &dGYLwaK^7=ݓ<0O`)}(}Tg!пRNL"J+V rsvs)T'y\ ̶FʩB:kdq)1Ԙey{xMGOU( F]:8$>9^dJ20NV[QpNyq.jd2\x&5Nix ߄[-6x,xl9xxGy<-̳&9PK E|$>M|&`7*edu/harvard/hul/ois/jhove/ModuleBase.class: x\Uy7˞I3MRL6Ҕ&4$%)-jI2d&L?b+ƥE\@qA 7TTDw97[^9s=s{K1҆ Z_+Ao`W3Rpx8`eO\x%313`p (I<!'^o\4a'ހof G- &ocvp@ {bn=_|/1߁[|?::Ʋ>h3vt9|[:2L1?dܧ`/yQ eg[Pob1_d/2\?6{-M!Fꃾh},up#d4B(ep$ O &oYBiBh8B5~/H/H*Y$Y;=*|NI> '肓فh*&&(#.>s/C>=Rot#)^v秚~I5=Q]*CyMq[g4/95OQifrxtrFc8LCHQ:X71rk-e{Z: k7[)i96hR{ b?MJ+e]g @4Y:5nio7@W&.:BRE8;Tƫd^1x,{4wTņx'}F2/ϼh'?_=1#UճfA<9 ѳS$`]ʓح-fKͺ9^ky syN֛K|1r~Wu2}b F3Hź}wy{f6p 2$'r2G=6ڵ=.f5r|>Sd]h-X.-Z{R@kiYўY'9/< Z hCh鲣toZ+h-1~EѽHk.7QG'۴4X!Oxf=L9BV2j 8g`~[ אhۡ%6ZK=SLʒh,֗ < Ky٘5V,zCN[9x%ם >|=@= WLJzƇDT8ه|4CBX$s9G'ؤ̆Zf65D۩ kbcz `s29-luwekPem䌿t)P4Ӱ֥}B @,d|i:OJ5$ߪcSp9P֔P( Z/=$ElMĞ(w|[ݴ:\n<Dϔe-iE bb myvUvsY| 1EIkJۈ pRKܥ6ȩaGXfyLwMx`U(bS n͂r0m4R&"%cStSFdH>v%fr5u`2MXZǢ41B%^`"2lf K&)凷$VѮ)g^bʃ,XenI8ۯx^ݡ#o-EpSp/&(zcg3P=/ J$sQqO9J si쵷};ҲXLnveˆ#EpnY]-[EDTז ݴUlOQ5qcIʹXIXW7}2Go&Wo0Cy&yVd5o`7ԡ=jK!n"l T1edu/harvard/hul/ois/jhove/NisoImageMetadata.classZXj(,$pqc8S@`,A`[qEd IJKqz/q^{ٝ!.|9w;w>ko\#BKUF}rtP:x*^x&-SP C>(c>$SO>,s"K/*k&[o.{~!G~)g~%W_~-w#O?+o'_/0~  er@ Uj@ fz4ssG8,&8ڵ_,[)vuD bMR,ARTX*ʼnR,b+XfVIZ5RE$)Iq2Kq8Ӥ8]3hMRtHQN)6Ib[Bxp/tP&zK+řRI_)JMRD8KR-9R+ELK1(EB!)L)rŀKx p<MJb'wIbL8R/E /EARbR=R\ ŅR\$R/2). )*)):KqQ[Uۤ;S[{W_xP0)1<>.R<)SR<-3R<+sRP)^ցpp b;vwǗe|.9"Z[BwYM-XwGp}`Nb˽#d|pwo_G$ "F7ϝԕHoWk4 uSvvuPZ# Ƕ> uQMj7 oG_3nLi^ {6:{*Tq@GO0C$՟PΛ`Gk;C٥.OO҈G{ъHGO$L i>l zÑ2SO[:;te=]]ˠA fV>o |ibc1H˩GY2ffβ[ 3btuӅx"_ȡf;3du+ "q7bTOfZ{p~O+i.={%GFiڒl[2nk0Li`w#nfof RdNX h^J/p*n٫~(ԛ}BzZ(=d/33 ɷZY)0YI8merHz(!3i {2G>sb:f6 t"31dRpN,LgP֫-v}42ђغ`2odHșb ^]gsq'rN|xOxv%iL/ R>3gilΑ\|EYfmYԝރ7C aĻ'}QOGln<8ˌќ$sbZÑQõ'.l?3A'|58!hII\~߹ ė%Ƨsi/q;4EaB[ڧZqtZӤNȫEjLg itOugQ랸P2;pDÑCgbz'l9<#S.vtM;Ya-f3Wm'S\v;zN'(:,18ۦԩhGzkl\޶3 \~tO=,)?A.QFkrG*R2)bxEcMxeM!?x5M7#k}I4EkFf͚AYzxf7kzXfԛū7kzަJY37kz7kz7X5mdU[Ŋ*pV֤ڳJ7o4fMo'ߦ;U*߬*o4f7k|J囥5UY|7k&f,߬˷MF+`L~;l@orb&F?~paM 8TYSU"\SӻoTgk>Qws JY3)8Up^*8[,FUYE*lf6lW 6lW 6lܬDYbvAY%5MY%*l#٬fJ6kdXfq f 8Ɇed+8fb5vxf Nn1"􄆳UX|n4!?㮲<>l|0eVnoHzy+ z0nys p1xxhq<q`/c\R/<<{3n\y@w1.y"Uc@1=(p/nv ݀>Eql:@ @O<x( ̀1Rx@p>``>q&=#퀇Ànu?~#oz[m:J\[!G|P|pK~G|(m 3~[ e8કKtRdSxP/_I+$(,6f)3Oq/&ɞqȈXڅwGP1, u̓TEnl^M]K&v/&gUW#1c36KÀQ`?\3)dJʫ]gm7vtRP$p+Tls[s:{Ln(@H?Z4T1V.L4&!{-';h}ƇP2@w/ I<е)XTh#5%9EjriC%N Xagz޽w 9ZP.dA2,tќ(cV>lL7rׂL4Km!+Ϛ,͚B(ռq$dGq*;he!ǣԖv3D|.j5O39j2Áx`k]iJ܍t*XbtH{Ȣ2# LZK;]LJ1DcT>cګH:G"{]R􍧆F3>x2y{V[N3њwaML:R::'pG`&ό 鐢ʁtf>+|4 HT8+1V=?a\a7 sidl1~wbXfL >h+#SzY2 QXL1 VSPN2tj$\/Gh38~S"ZxP 9!_|mpڳukX[81bRa;Еt"/3LS5gMf,)WL?JW锭T780U.%58^{yd8L@ C1bac KefUړ2M||};l{1syǍA\ n XZf{j+qUr-4Buk>4o.V>pmVU>A*{˔] eW*JʮQv'שʮWe7({q0Ngq[6]vu(KZݶnR6npCږTm*?iCے*oUmnWg;Vc*ǕTq eT찲#ʎ*TvM);lZٌYeW.%+[Pne(^eǕݧ,j^u+~(|*_*_W+{_NecIޢڻUߦʷjܩw}ާ>샪C*}DG}LǕ}B'}Jz3>s> PEe_R/+{HWiu8pA$_uC.7@47*\ Հf˃Zs,xr3@:t/00tUO@S*o~~Vo?d|xvO/(#GwWwQZ?қ4)i,YӟaSۢϲccGJպXF_dSҩ}=2Kwk+,ݣ鯲tX_c3ՙ:=,`Y&K{5-vB{uj6?ﲙ7̿ǾQlٺst\Mؙc?f=O'?eKG4s/1?B/ t_>R7l[uemQ߳`騦GkOrg6:7ޡ鿳ٚKK4o>O1h~/;,})f6XxMYzP] M` v94d%,ݬ*6!Z5KaaM{XzDӵ,=:Njz۱1/Kz^i,S ,KӍ_{6r ]{.[{==S:#XzL G2tZG^Yz,}:MdEl2\ql}<[{=׵X:%|给km|n6SuKكҵOd4=XY׵3_ghz%۱V*cmckA]{$ElEtU2:?ٽ~rծS&xA_Lwh͟>ߡ;5o|+χ45ۢv~|;Wi~#_Z<_MͦW77*ru1g|x>nǩNa^jL~{5L!_|s4?||ߙ?owקy~~?B4/ #5ߪ!ߦyo(k~磚5G@;j~YO8~<3<<s<-w|"c5^k~>{p|Bc/_M͚Hx~XQ_I_EWR_÷wiz~/ |~5^ ͿR7oKif-[9>5$ϟjim,W_ˍTT[n]Z=n^؞VoO-:O-zOF_uk=Kü2<]r<]'zɾW\h9msuץ5ܸVq]Z>N.pGeYośQ$-].D+|G+"Q2ru A Z^WxrWvyo9[;;#Qo.J݄wa^j}5 =k}Ryި hEE8ZYJTVz,UU0{8 GhA޹NO 'SHi$ |N9;$_<`'Kv$_&"{{~B~k }oI8um\t:WF+TP*C[r߆.>hwCb}ǏGcad0D|2l>F6#τgs4>Ws )/U:/W1^_#*Io:Ww.jF#oe1~"g='_zZb {{`sq:A忒oE޿4OUL@e7\0(F2~C QtF9XP~2rАnc%Ko|"˼^XF3~R5Ԣ[|vv>'A``#50[9Ǯ?\Fo̷[< t6qEPK E|$>~Z0edu/harvard/hul/ois/jhove/ObjectIdentifier.classUSUnXr7*kk-66@ ,lv3 S|-ϝQϾ?>Ƞxnm02r~|ݟ'oRG:7V|h]r1qM{Q.M#bR4HsS[rCܑfJ}WRG!\uGZp:jz`;i2'mn0 o.0(`Pp{{8KOَE.库Zz쭋/pL|-e$y|`ZkfYp4B3Tv%5YøU9Sxc.k.:>-Fڃ"HIY`:v E,2gEr˲D&5b` _+Z EtsfEƭHtI$ ] =ƪ58 㫛- +ȵo> &F7?H;<ރT s\|4iԛlfEm9KjudMpma5fP |׮uåmr]5}Y򑴴D WVxNzOYea%6siGI>jT"%Uߡ^;Lktn4GGILy~E[-B^$Ez/S B4&?uF-H˴C Q5Ő & 1ggtqgP3GB/DT=Bo&bM !l jJiѽ~CM7ѧ^Cm`D61@)[uځ]MQ0Ŵ \g;%"A *"=oMS>&g4d5 ~5sJ]EW8$8Fmp$vö1 gIO0F QPK E|$>v2#v-edu/harvard/hul/ois/jhove/OutputHandler.classR1Ot۵-"PBxNqЩ)pvedѼ|(Ǔ4H:i k^@E24A넀Os~0AeR922 W CX>=%#̐0c! 3'᱖"uҨ& |?am SxjE<1J9ǗY f0G0])B _?SꊨS _tJz`z"I"MIv[V0UyKCM}`6:P/SC{8 Oye>5vJ]qMCFcӅ5 a[D0-*Mqg~\kt|k`>@Vj;, X `o:.;*ֹU<]={sX>7G3,ቍ~ 0|[۰Xu =q|_8|PK E|$>TM> (edu/harvard/hul/ois/jhove/Property.classUmSU~na$BHJk$BU\–,]aA/|Vpq`z&@Q09=s6?>>|F.Џc@NᆀK"E)-CN %Nqb1'6DEq×q\v &Dt*u2x5偈"3P^yv·?)gF%:RQ A6|dgYjARu0E|6X;x6w8'Ol$lE {<Vy_nV}(aƱB|>{kֹU\Dg'߆7O`y2aUy:tp н@pu&;VbJUhN&:M^f mnk*178BM]и9!8Aha{_s-4{H'lSγ<;ha賟B-Zmx%9ccE ױ)/q(jc yU4 lOi/[$SYk9˿1X?zGe{?8)?-"^aw<_Y` =6Af8Envvp\ H>/PK E|$> T-edu/harvard/hul/ois/jhove/PropertyArity.classj@1Mm~մnk A\ĈrР41 >VBhЇ*:2sΜ/dC9# Y$PDé3 B/4\ p-&[}skLق5VϬ8ZxVESK 4.Ҳ[MjXu&tA#ˍ\VLjtOPgoRvEC,ֱ'XiѩCh@ )4.T9ũ$H56hAjopː6ݯ@ C7H'}CY!dUrZ&9#9+yK.y{,~PK E|$>Uh8edu/harvard/hul/ois/jhove/PropertyPath$PropertyKey.classPJP=MpHM+t%\!6rQ~%\003gǙ`v ZL6Rxz0焮i=:#*Y -FV\i-2]6J,YUfFۙH'woV&*z!O[;7/^fkUXpX,M ,q[>!wd _ħk/wC8_PK E|$>2,edu/harvard/hul/ois/jhove/PropertyPath.classVGFHq_7S%mbY+jh&qݢq\$8u+UZ;-7P4 i}/_ixZ6gkfv7oן`PprKG} ͏[1#c :q>*D'pҋyr'͑v"'gSy x$nQJAQCrx%^|Ї^Vh{(>>*WdV|Rnr ǣRgɝs|"Ǘ؍Xcҩ'2"r| l:g{E3 =;r9=h\8fX?vB["y3%s428}\#|dN.hDd.ȉ)+ CiCHIpJ3f#q34f-BKԎܯenY D,c\'u -fNL 3)$D4S/brmRH 5>fdnJ drJYuӤ #kydz+d.`S)(. ?O.g<9ZaвIXb_`ŌNn ]FDtx:g*QW)%^x bv$i"#o$x]} Tq@$gCWev4Wbu5PFTkBKlJ%:7TA=#TH _&Q4n<Ήu{?9S'B:OA,'$5i]Mb3+e7#i~o2nkcG^3]>@Bln_[vk5%ԭy:giߵ7ڵ6#'R鄚X[A-UZuOLfhm;Eϫ|2l 6r=RJMVеd 4U9udu_*1ij[r)+AszQ3zF K+tx}uI+`}h,t8`q݉md4 C ӯ|o&IsϹ;|)li;{,1JOi'=WE1췥wM*a) )06*ꐨӡ goBо+Pv;,<v_l x `o^ o dp| U-bYUB鳂Izm 8XK0:7[rڀ:83qxdc\Y"c#Gm7}m/P1b[UV"uS:J&_N{%>{ tv1lEN-pPK E|$>sϓ,edu/harvard/hul/ois/jhove/PropertyType.classOPaE@Q~ō[z^bή l#c%#g?hbW%y_|2K<Ӿ__XAA.'H ψtb^@, UqM$ ZebE&V^ n "n ԉߦNA*oۖWd,Z^x hA |~~NA ҅5 TQTho-)r%JIvu +úQ7]6\]T̚mqr-\l).edu/harvard/hul/ois/jhove/RAFInputStream.classT[oW]g8Ζ@혤B4N[Bk D(R,۲7MS"R_)"AB'TRz8@%̙3?. &0&UM!3,LLc>b=˞s,3pA@~QwJ.qVLTջ nq/έ߸"/`FN +8FpwTjTJy⺀>UXj:$,q󞳰SZv}܈Z'htN?s敫%niْrT$m׻2K&/lR'kް0!N([,^nLX8"4_E̢8m!SHŕ̢S_urZnd,VW !Wj+޼G[;"^Dϭ8E[E>o}Ip_IK|}u:?D}@$xe]ixPK E|$>2Fr+edu/harvard/hul/ois/jhove/RFC1766Lang.classmQkA&+ٶ6[h[즕"O)Aɐl Ylc{?!䠠UDzD3`e77חSqӀU\梁K K{ j2Z'.z=u'Iv=yFεXRS+ǽQFB 9>B=cze WMdkfb &ֱẉ(Ykx@>zQ:hG/XBtҮ'Az/t&D%gi.iWpWYٰ_cINcV⾁&V 0*@*y X)J29-^ i*H'w˒H;ŭxUT[g(#j p&t[dM['(p\:e)yi:TX7nH۳ͫ@ ܮAPahX!yb)*PK E|$>i[(edu/harvard/hul/ois/jhove/Rational.classmQOAk{\ڂE3b|H41,ަ%]_}?^Jdgfp0 pqޖog7i/v!s[f>E-X(y`9 9G fm`Sŏ7u )'#[ȳw֕ވ'^'edu/harvard/hul/ois/jhove/RepInfo.classV{W${miJH"IQ@K!AZNڅ+'NhJ9J8Zpq %\}ǟѯaij%̛7Y=Oxƍx0mT+O3yǻ0yg|U|! &_drQŗWWU<15%+L.1o2yIV-&k*`dw"x er%}^xCVQOL~*Q:^4grNAi}I+Yo4k "sBޢ( t3͈ԐR=e#HyS4  hScCC㩑 gNA\d趑>[re esr`+Bl N?[) YSX )N/򚎋F^V<.Ri1J\e;9l i[a.%+[|kͷfY6[z`l2wGL GUaJְWCur pRWĭYYӾ$:Qs!C 8#}ŭR\ƒE#R|7^ڲx}&wIɽV kN-5\w5ƫJ5ˈϤzE9tSUAfvgi mUBh5'![mx:9 RwcRN=R.'hCKߋH^/ ^>:Z=j8i&5îU?հԕ:DEh,@%ħ"r-6GT{)Ozd)edu/harvard/hul/ois/jhove/Signature.classTMsE}e6#!q,^$6IGN 96ZQI.i UK|ɅC69 ( tKr~o=y  \ƌA\9E<þw U^^a=I0M x!Iܒ(]heAR+} ޮVZ-U|C`nh[^ckl[[4+mjRHfjkZ%Ξ$3ɝ[! JW /o{;KcO$ֲ /,eOutKa_9,▹z ;$Ev\Ýa1Wi%[jcHmc6ø! 8">eg&^ƈQ儉 Mfkso{~>7QĒIJ w o?\э&zD]VXH)Fzr:Êy׽!p6;RvH#P 2.ԻpB(֐`i`CKdm&@UZy^!=-(0b'd&^2Qq*)3[ZDOw,=3Gǘ0q49NssV~ b0u \}.w`N <&c`5FO|>|ӽ-5D:{f.A ! s{l3Ssc '=}Ug{tdq@ʟ0% #~C?7PK E|$>r;MA-edu/harvard/hul/ois/jhove/SignatureType.classPJ@=gcU]mRCH)1I%. ~%Ό s}~}<vuP)gOþĚyۑ3pcĞhI=K|; {> v85 Nnl&ȵxKj7Kj4l7x51ANmMugn lDpOmbd1 < l (,Ƣ}$,2P9o-G4bTCC\JGM&uɽ S@- 4Yb2o*S(I0edu/harvard/hul/ois/jhove/SignatureUseType.classP]KP~εL3o`ح,34+9N6& ЏY]{<'2dRKؗC.ͿE R8&Hjko uf 4Uך`jϚ84}v?gQfuz]-FG ˱K|YUmL^[Τ^$xJcl#@6vHBT E c(Y%y56S%ܒP[AF蕿T^qE+Ίfc@˵l B$n[k7Ć lD<TĥPK E|$>v.edu/harvard/hul/ois/jhove/TextMDMetadata.class X[w B\ccl8`Is!۲ (d%q9}߽3mӦG:NnJnz_&M4m4쓄(Wߝٙ}RPz,EV.^$Ζ88W l.k;$vJ$vY`7J %0lk`^*`?/q.D!\!"":1q(A $B!0p!BH#L# "!#FK.C +BkCnB[nC;B-oExށp;ޅn }"DCF#E@'>pA!

=3~u}ι_9٭Z4n9=1exk%$hUG} ôLTߋeklo_m3oN6;qN/`+N]Nc ՓzSx툱nSqT׼&>;nQ-݋W=&Ki@Ԑ5"[/p)wV{߭QQ>Ήa뙺hZ}FSHnk0q|  @4D.{i _8EPLPpB'(YIŕ$t9G\9' ~NEeid2/1AMUϷ1, Yw?D@Ԑ[ ƖB S Z9t^βe%Ů%\мͩp%z(U)*kXZݨڼ5X,kYֱge,Wldrfv-,[Y\r KvN.@H7iA "/;7Is@<_vHvr/bd+*wAC,7rͱp1hL󞲤)t75q{kFnD@<:Ai+XR%UFeYr,yAcyB")g> wL^D3b0p(rڦųM(~qM{Nw!P.d[%y*nq:_).iUzz9Po[cp5Yn% @bM[}PK F|$>&@edu/harvard/hul/ois/jhove/module/html/Html4_01TransDocDesc.classPMK@mbcc~<b/k x=)'YM&_*ZQķ9(= {w{زQCBFn XԝfK6 M]If28H3PBV^%?edu/harvard/hul/ois/jhove/module/html/Html4_0FrameDocDesc.classPMK@mcbcQ)(^ł,BR&d/(Qf{wض@¢f_Z-+V-1TqUfY28e"Džbh^D%xYD1y℡ٻa0N@:p0hυ I?l9XdžMͶP%E^D̄ @edu/harvard/hul/ois/jhove/module/html/Html4_0StrictDocDesc.classw|VieKkm1M%A6gnGwkwdt05HX,@z#=^Io'ޝϷ~ !ys3޼{p'^ o"<@9o!M6x0.;%K»%G{%0Js%OKxRg$|V$|^$|Q—$|YSvIoHoIxZ·%|Gw%|O%@%HC秄! / "o { G J_ #?,")EgJg¸X$`ZJŢʺQ冁a3Y m',аvpX^R q+i9(/Tb)UY9!i8 M]: ^ .<1ݾoAsĒXb.uBYlh{.VsQ*0Y͆#E<ܠ)hJs}Κͪbؕ͛>bXoQ:O/pL7LS]t UJaӷ ; dJJÂ\0s}*Ȓٽqѧ uy_k]#1bz:Kt},\啝X^ 8P T,` Źv[­tRXVv}h^Gl^e2>盖*UEږ\2`h1J~6qX (5+\g~X09ehflRhK#2x˖0<7r!w1.S?H*Xέ3G  [[EJFNA-YkCi4KfYZ.\Kx/.#\.ЅI9!1K0H0DphWs HC !$ c0~ xOq.g`|w)A ]!{&%#О WWq._'@?H8@p3­dFJ &6m+^x/,ٰ˖s}x`bըae]*iTư`Mp^kSymQjoP c[9'f EGUﮀ_Ar?+& vDUq"mJ*=tPEqnTN$^}0*ZqStoGofjtUҶIT/6Ü$]KykJd>fmLip ~SW>bEG($ёAϋt St?* tE_zQow4Vh˃;n| :Af4G[7^SHލe.?8 { zkQ uh8cXǣKЧIey8Qh8 qQ^qN`GNCg6302[ Zy\Zeauaz:fHqG1CӺ: +cFvb㨕VLke=X(*8H-&HƎ]QU* L'<1g N42Oc%T'm͕fm\Uiװk1ؠKn+Tڛx[2oc| |zeꍗ{X~^16* =0oHPK F|$> z8<edu/harvard/hul/ois/jhove/module/html/Html4_0TFDocDesc.class xI^" $1ls@ I`%5+]9qzmhiz_i6W=M>nYk |(1'O> |,9/_ |IoHoE1Ii0~?~s/_~{IGIgw% I )J"ED )E1)PhbshB\)R̓b~D, 7%"(r@PjbC^Y+h^s߰:&+n$rG/f65sj"b!WCD\e'hVq#(>يkg:ATt"bZ,ֈje4u;9\0GdV -YpFrcPwkvFE\ĠbvKKT,R2X X"Z6HҝܡNDZt]P˜&7 Z'S<[ZV)i dZ1JE\ŞЋZjR =_t2[),ӦE6gh96|Q:Y 5FuZ: t6x"ہ@/^3aWlGq gGFi ̛(NRGt.7El &\Nxp8,nPč 8 4⢩Yv-gE8UDœ;Q DŽxjM5`V8( iJY:}[|[qt蚑5CVVX9~znYx@Ђis!) \A˛?'Kgb^L_Rx j(!: \2r0 ,7?2Cp1ŏzOYz͓ȍpW'H(3iqZW) ]ƒcczSIC#?edu/harvard/hul/ois/jhove/module/html/Html4_0TransDocDesc.classPJ@=hQ_ )(nbAWJd )yI_*ZQ(N rgΝ9r|}m 4-,ڨm`KٲMbaCKWUgE)X&2-Cb$ƂWeK2ԏ4* o<<=*$h;1`65T<Xg0KdAK " A{hzCB!qǩU0sPj hcSt T`: j.kO`<|i`KgX/PK F|$>oxC=edu/harvard/hul/ois/jhove/module/html/HtmlAttributeDesc.classmRnP=7v$uJEhy&iP@,@( jDXE&W[.~`tHH,s#\p9w|r ` c!"XD^ n)zfI/0Cmװ-p:1ʆXZыO,+ jQ J`6adme{ں2<0:!o5MuohaeXAi2C6?RQn1NCJqydÆ BlSp^}ưIFlnHm-NK2mӸbULbJ q視YFkZciNkMޱpJKw;._m>̭sD,-lֿyGp55o6hqqL!$*TCxhџv=&Lk#4f(^"4Gec`cDrcH1?Nԑj&J@}z2w; >=GG~OK I3D^ iNwҒ(}+8?A,-1)rz)GFbGI=ou)3bl;r74Z2 S#ȁ("cPK F|$>v :edu/harvard/hul/ois/jhove/module/html/HtmlCharStream.classWGv])kq"ŲNŶJIDعQE@vm+%U(W((g$-р( 4\PJl9y׼y׌w?aS/Њ1 ^a_0W ^gph/⚊7|iW*~Vxɳߪxˇw>@/~m 75xWŜ_`)cRtBBp&Mtḑ*Z2ySʼn|E,1 ^cHS)Z 3VzȚL%x-d讓,@D&UfDlΚ2r~R,sKL.(\Lg#eLKh9M6Fa0\mۄc%4Oق)mJp'C clH4}bq3&Yt`$Ό٣|t*P*H'S)[Bv\xeV$Bx(K0-DzQF$td{VB%1oEnJ$Yyv%!^ڴfZm*e/p6eblg N%3ƯY[1R(FբJm|HOFLO;zVi$!!ܘ1shEs֘ʤEXش1I]۽mW8BY#s^*{3 a.k؄ܓɴ@G?t`T TxC aS3T.s֮j}\&}1e-Os:*n踋+j: 3:Y~q^^Yq}5b5i6&(Dmj,%tܓ|xfρl(;5@2 9xig ⇊ɔ8Bt$,vXf1BG1rfdďΘŔ*L" pWXmV*瑏i+'?Lƾt"cUW\`Msg&2sZdMJd'7Q+n\u1v}rPs'RUp1Yuo#PNlԴBFa];Fħ柡;΅|%".$19㰃댔b3ƜHTb=%c N$ R[_3HE=\8\K(.rD(z*J)xi|}lE';46ؽF=v-c}>zkB-h☷nƻPmS )$4Jl\}vL#X 9= 8'SzN y 襛o }KH$$!x"J/ˎ ES'BBW;].D{!zؗ&#SL4L VE^a3];m:V8o%NZiQm=:ȧtSڪ.?G7!-QQUjrwk8}%cQO.R]=ЯgF5{Z{-ik>]b6711;]EQA؞q[p,P+͠hRcQzVkt㰓u\;]7ك7̳GyƳOݔjQ@{^PK F|$>܏0#7edu/harvard/hul/ois/jhove/module/html/HtmlDocDesc.classX |?I֌cvJ+1$vsR H[Qt8 J)^`˴MKBa˲Gm۽Wwv{3#Y`[xo\xUyƛ ~,CC#/ꇲcY?+g /oe;?a!ه_dW9-SojK+Y_Ќ7UTlVqA6!0 ">\̗|y+2yY*RdTO 4*URhT-$5 Yma;~)y>,+T 4_C TZҕ*]%\Bd^,R]#h-Q5*$6nZTZ!+*õ>ԋahJe3&ø@0 :Am!@eu|]*,Dhoa nnMY-+ΚqS*ݨRJ*mSi;v(S]5nd kwl뀞SցlՌ[ Fk܌dcF@&kaC6q3GOjwl&xzz`dt64S#3F"Øs0m 9A 4̻H3 =R89^9F az2z0a,XZ$PфJ1=ړI1hzqnF &cQ6 /,#l7AsCcҒmG?3:54^W="5q[ k!>|լ{Q9&OҠ5:H %.fΖl41RewঠF3%#1 4%nƲ7Y#XJK@f( -4:F sY`43X0;BxX(G7q8aM3ҡ8F<7)EBzo"bd"A=<(q`ܲ=t/aaw<2ldm}N@k 1NuF5z>уbOC =ѧhiQvXHffBg wFi>(ryH^qH9FJ<&q j[h43`f9]Lx@c--j4LwkFӗ4zBOЗ5zRVOIةZ"~4zYA4 NhU~MV'%~SaO5e9bVɰZ52a mǗf\I$>pP)=cr.zǾ5o/N7s-1S.RR]7gu㓶 :F t ]V?ԓ6uy")z +W}CK/-wz/}A`}`R9EwbJʪ0:syHiF{WOr.<+J): }TY˦\}/^v `+dL3ay ^ɦob[T`yh3psrec)[U!^3Ѵf.ֱ8wL9c[1#џaNm.}o X7~FMꩴ-P29,%F(1JrgS'=ѴKhz%2$Hz*f)K=\+RwP__Qտ*&鱘y4AW:f_5<`&نƱp,1?/Jk2$0-,R4m YyǓf20a) k1=IWSc !J.yIz~Xs 94ryx* >3hfOWR<0ڵ9kxQsToͲ~Lu0gP_{6cRQN6&+|:87B@<\kƑ]zk91%5M ^}M W ^5|+'~9a!\r=ͣ&\0<LI|qdܳܥP-܀y}e4*M͢. RO4Q{&^K$}==ez*O{^'PK F|$>i+J 8edu/harvard/hul/ois/jhove/module/html/HtmlMetadata.classW xW׮2 `K2jQj1X&Z2H+'K說mH.AM%nH4ڙ"W|3o7Of_xy‡vn|qfy1J8<$⤄10>!Sl,J(H8-s>/ _E _e _ᨾ*kl7ooI0'"~A/܋2Gc?SВod\RBI%52z:j(%H"D ) 2f4@UW%$c  '4EKSY>(⑌2b)$&,++CCڸcjN|Ql2HL'2a%υȷ)%咡t"KO>RQ34{Fm~1n%_ͰMTB(ҺS3$Jυ-'ui/%?5_Sɨ24fr('խauK-$GZFֶjdN%#j2R!YTG +hAu3v*!O1hYҦ_/OSc?K Bh-]̀K%*Je+R^Y9 *` WsVd%mLX[t4NΎU~;q]L[]>& !<&YLF@ZCBsM`)گy u&C[tzR1gSA/+od1 JH3ͷE"xTdE_e<;!x]V2')!2-bJƿ38 hLzDG@}6f,X5{_bQes:#DlYKH񨚙y|թDQ,uYi qh\`䇀Gɻ" 6K .Yp REO ^pseP_MDzXDA7ʸk|"%И6 m%RtC0qQO(ݐoQ.tTyd(F1Ow67ե846MCu]%M՗Gudt[e]ǜ~aUT\s1ەMr^uyی8;=Pˋ kkT1[h*Q;l ԷkGtD$pVj.EƦ--%@VѮ]QwE;6wD;e&&YDkQL,j WvƥLN8'9gZ`a%4/&lh+Q_3W\u\檚+=.6$};9~8lLLLL\LD&7:&2yL'08x '`)(/`1Ey^OZ *W0ni&:wA@ o=N2u)֗ E$NPbrmi2u2/`++Xzcvf,ۗ<$ Bȃk|<Ǫjjɣu[y?@3s o|ZXUmf]WQW-ܔasEqxӕ,+ÜjŸ5e0TlWsxnE2"sx^Ee̩f ԕcN5/ \kXJpJ̹J/ċLFZy8 xԬqVY/3Ķtۄ͠O"4},P.s;P CF,3O#,1<,<0eL W-70U ,@])@#RdaYJn ppX5l( z75z;l$9sX51s5-4mjw CYtx9͗VlU,6iJB[ո?HpIKak;Ono%hI'6zuØ1~9I$z|.yl!=d ȅsإZ'$w[^3 7Q7=xo0(~WqPK F|$>y;<edu/harvard/hul/ois/jhove/module/html/HtmlSpecialToken.classPMK@mTh+zX E(ࡠ"x5YM"1?%mE\7v|}p] m.=wt߳g0o3JZp%E-NZW|p2a#QԢyT)Ǐmy5edu/harvard/hul/ois/jhove/module/html/HtmlStack.classUWU^f )PV!PǖJX)Ť&P şCI& ?ѭɢң k)R,}ywL~_\cowyW'3W8vMci}6)\:r)q͇+h(jXHUeߨʚi7͊mXmVUu|snHͪ4+Aj,Yks/_&Ugդ/v$%)b6qũ;AV@IPùNYiS\SnW.fn!DR(VNj,YUa \LnƗW&9ºaUfϩ_^-@/=gwMwfwզ-}" 񢁗|%|b6 °6$`<a0%. %3_c7B)3%L l@X_3pfߑv=MP~gG#Ɡ\b~^\]ZX} Q.ZDŽNy35ՠ2Q}a][pܦO/ojVPH:mt'TF0 .KëQ]14ZxB?yЏހ${v' >y#MѱDf1b{3畽kM'2[Pgq.iXf| e2Dbʨm$yd7v! !!!GIbÈs8z$^?}EQT4);;Zm!PѫY o_*LQNJ3 W/"6wܯKGl]B-#<7edu/harvard/hul/ois/jhove/module/html/HtmlTagDesc.classViw~Fhl2J@Hr&18v[u,Mmь KЦ{% 6jS=}RZBO@R{gc9X}ysי="N̆z04 a"yE0y ~ޔaтjap)˸ë2>-3!|5|^e|)vTy/8_e<|C7HV\fT^+NFQzFLG+UZ2|WorVohiFQV-#0L02YJEB`l藳jN:w P$z1K&#}gfOZ4ӦZ)< ҍC<qg{xl6""eUK'sE:&Hl=񵆬]8O{K9"4biًZyT<; '뼴\a) [}k5L(ڤp @ yayb˥\@Wl@USZeFR|d ӥ=U(y=5m~HI,fem^( XqHKrҏd)(-rUTjtkT{R,fʹݓ('( >iR8tIhɥ y?&/>j0MY.˿Խf^LN^m # Sc/9FVD'8כW+Ufkw8?z|ר?{ ~k ~Q>)xg\ _kLޢ˖Qc?OeLqSG#zO; ]- +x K jPkF;lo*K'/YsӖ^ѬR.V%VitIj&ͱzK7״G [=# hxsoi5sHLŢ-V3ru=jזY-KK2Yv~٭ S:Fx EjN+!ɇm^mv=#e=khEH13#Gh+dSrMUNz_ sI!Y |E– WRC%[RT$W}vO׭?J3~n}~lV;4HN AAA`lx0P i]8H-#*E+= hCsnM~ggL ;edu/harvard/hul/ois/jhove/module/html/HtmlTempTagDesc.classPMK@}~!x<(/` !dif6|?EP?JT"=7̼7`cE9V*Oۭp,kEtk_iKO9!حvD]1#B@2x"cTg$J>JKLgþ,v&bfzт WJPew]]Xd]52a5ɮ2ٷmgPO:la!,V4 A8+s PK F|$>{7edu/harvard/hul/ois/jhove/module/html/JHAttribute.classRMo@}qn#-Phivku)Br!( VFĊJpH$H8rGG5$μ7wvq/yܗ'a_I, 840Pa((rp%t#W dJ ɲ QoFA ~ ; zT*%VZT{<7gB4O}H^\SrLk`^H%ϑ{9-SJvִHxαsacK±*ۜ rp\? ܨ3p~4^J^zyFS_ɯ]L"e1thRSJ̊U9Ic&kpNEGFGPbjiXeẂV:yQcdFڇ#hvIAK91 L';\q=ZhS?_ .oԐ3pǘoa3LVt EߞIkSL0=?ݙtnBPK F|$>= 26edu/harvard/hul/ois/jhove/module/html/JHCloseTag.classPJ@=6McS b7ER(n`$edRK((q]ٍspzp[hPE;N]="b!'hϗlŨ`GoUDބzD 8S:5Y_tquSwG]vLac5{ǀ)YbKTP$ttSBAB&yKC)KͿԕGOYsDHfŃi@;jju;Eg%YkuukCǾs✼ 3T^% M4~)B 01PK F|$>^A)ҭ5edu/harvard/hul/ois/jhove/module/html/JHComment.class;o>#n.fvvvNF6̼;FU IJDҒ}k?'1/]?(3/Z39?%A?5T?#,(E?4G??X?+#,U?7?4'U?$7G9?7759 cPd`zHyBPq6- *PK F|$>D~5edu/harvard/hul/ois/jhove/module/html/JHDoctype.classPJ@}mY4QxтHϽJpeӕfGC)={3p!!z؏p0yPѿ<ՅRRuVg\ycyiJI\ׄyɊ8 'og+a8϶uUW)yZsTe5羰|݁psD‰|%/l"(aOPرqz J?`q4m@?}GڔPK F|$>105edu/harvard/hul/ois/jhove/module/html/JHElement.classmRMo@}|iƁRZ(ʥDT=RxI:N?{/@BGH@;PY73oۯ t,eqid+fb) z kᦆ[ ^g5=%CAa[뉖;1t(kn7;cB]bD$47f=dor̰6l+vwta*,Ct:ߗNNk5qlXg EM#z'X{ÉzR'mzr }lݗrNGd$la0N2L7$\ߑv^2!s6YzlU^.^!EdQ YBPY_(x..Y 9vB#vqaV0j=o8|09qi>FzgHn'VQ[>B>7k$n<ƞ_! Y[LN5ɗ?c"C_`ߩ/~PK F|$>4 6:edu/harvard/hul/ois/jhove/module/html/JHErrorElement.classRnP=vbq^%Zn@ @QQ|I\D?+H*QN*B~8sϯ=.͠Hjat$ܔpKm F;Yubx<  *f;gI SqG!oY^&vOFGeϨv&)ú~wt>C?&_^#~%Nz 8gaN<tjptblk'IZĖ;3<89J~(x7ByAH9?sIԲV-j YĒ3L䭓[ٟS5ޠ>tݰ E*CoO2yk/]uc0gsBuV!#ȇal$}&D}P:DCqG"ێ`GT\uO05 \U~PK G|$>& 5edu/harvard/hul/ois/jhove/module/html/JHOpenTag.classW |fv Q) Q`lBIB+a;lOzZja[$b/^BMߛ&A/<X*UkTb#^xx#o| >"Q1r*>O$>ý<|>#Y(8(9/aDE,G^|_`|Cly|Y+_8.pB:|M|] 0ywYͣ |_?ݏ P ޔ4%;!)abMV&5,Z ZfVBueЊ':YD0fʒÌ6!#mL4٦!)&̦~+hjLj5Pkf2Lf#ECa RȫhMϪx*nn=0#ZIܚy "k>WVpQsyȖ'eyݒrBB:mg)Ю$qxȤ#VќiQ2WUv[FdW1JDzw>KAt$■俈ZoZt^_QG3"N@:e&͈JEŖ*F?+; 9 OR8,C2t26:ζ;X$[/ѯi؄~Wh5/zWV\'aV L17^-' S$F^Kx5/*ɘt`4Oֱ6л;d4pqdC!3{>Ր4O>ϗ.߲CNlȤ̌DpF($;蔆)vZZ)m/= p4ȩs&IK*$Ylef"t*$XII)ezp9}wM Zc d׀w75D/Ek23&s'f^i(kzRYn3jdxfQb0IXuvPL섊շӌXv .(+q)70Tʞ+#dQd$h3Jn|= gAJwQcj\ˤd5ՋϞ=xB:vQv{ $7qF]6PѼZ2qt{$<_.A?OWU衜/8ܾI]W'Bw88MZ";]Lu$:{ַmU<ۖ` `׫^Z"j5PH+#.nq>wqy6qRq;ӹ%Ð p"89P#qƒ8ʶpD' zFq7@-9uI!0/ zu-ahnEuntoyBenbC . c>L}t rE)r,c1R-|@GQ>VuQ}f}VV5gP_X~6'ٺx&l.tI7< QOHx;GiU{zG07I=~Oë Jcy\UϫA(^7 #.S51Q\Zr8/t8}-"o/"SI1)4>d MS"tCN;7kpѯ_/m,5(g o8QOY\ BSܺ%Hm" /w&: scw1\ )p9\n[dINBW)V7#LH٩_U͉[\vmŴ5i{e)m9in}'im/͍=\2P-$k35PK F|$>} 4edu/harvard/hul/ois/jhove/module/html/JHPCData.classVwU6ɛZ4 &!-X!E0m j$dd&/uAq ]p5~r~?rAoRZǜͻ{g_GbA9la;! :}X.񰂝rޥ . ap*MDBj+Wa。 wI KBGƓrHYG䐑C>ɑ8 a Ϩ6ELDmXV260HQs\0`Sz٥ !ӥHV4;ɖH(FF1=˧KɊEàR:nA`.49{BBK:Gq(*"*cT<1qxnxQ\!L]8qK^eXK&m!ٶ6!$°n RLp5lo7񖊷qPUqɃNH0FTcI8S*> gP_8U|o9S=~ (KOu0ÆҶ{UjD6n[+VB0̟^A\&+F60W!]&{NEHMâȳ8NRΪ\"_`l\.zh&ZU.if%x䨞"/0z1(E]LnI2:MZ:iJikn^# &;nS!j@WFn#fC җ, Bi^Ph)-*dֲZčAlfpݻOWI~FC2~f6_u8S'.a<F%,bxҀdpE<q;W\~ol*jz ^:NN+Sr!5edu/harvard/hul/ois/jhove/module/html/JHXmlDecl.class;o>#..fvvvNF6̼;Fa IJDҒ}k0FTVFԔRĢĢbTҜT}/t0(20@HyB@q& ͦq#XPK F|$>PJ :edu/harvard/hul/ois/jhove/module/html/ParseException.classU{sUfݤRR!IX< HE@V`ܦnE|(⃂(?f`d ~)l蔝=9sv6|`oe~9(!AyU䈌 K5& )8@`)A҂ )ȈaaUpB()U`0X#8)GAA+PpJ 4RpF-,䨌weǠyNӰrLaPSsCk7Oú5[p!4vİ9Ɠfag4t71qvxnb:B5g8òF&XY#C>n(rY#ley(tP1Hf2EK(R(Nm7uRuH?渌2gcNyQrbv2O<[wMA؊UYlR[k]Ͱ; \[*cB DU$Lg2 -7aT|*|*>A_KTEН@<2sQ_<!>{AItPM1H^pCCܢT|o*Eob2$%H - Щ#8ꤐT\Ƥ°aqʹOlk=C~ Gԁ,3-gac>ZTg<74׋bN#| .dg Ln`ht^k6 Fv*ST"t2^pꇺHW|8`VF:>!#sw;wɣ]SZ2DwiP|tTF h|h Ƹ迆飀PtU>^0Y4o" 뢱³Qr$#: 22ƺ}[|[IuFlUkBҿMTCMlKH!)F,v=]UJ'&[ӊ#V ղ{8>P|*2!\kI4.cUN$k++U xěœSRzGd1gRk(4DZ8P5~@sOM-5 1)NJk@4ju20oTho>7edu/harvard/hul/ois/jhove/module/html/ParseHtml$1.classLQ 0K9w?lWA?DPǺѵn;CO`BBB F!GX;^x4^K*f4ɒ"Lדe2`BSJJsVQլ*s3 П.f!"2IEķPK F|$>ܳ=edu/harvard/hul/ois/jhove/module/html/ParseHtml$JJCalls.classKJAJ2G/.T7A nfc q:<@\ .<@%V@mE/?\ B!-p&rڨ\VTQUUW-y6U^ύz^^ A0&,xB<]b,/yhEᤰE}-V'bT)V}`¨ԭVFL=,?p|'0"r vK& Yt[Npz6$G=9pPK F|$>!OhFedu/harvard/hul/ois/jhove/module/html/ParseHtml$LookaheadSuccess.classPJ1}6emyzE)B)( &'GSP̼73̼O8A!E.p*PzweUd& BXU&,Ddet- ZI_F1ru팴O*DvEO`Lo۾UYs٘;V5J:Ue>f$Ȗ=b)S^'`{Vw$o'GtG/@>\ qPK F|$>6/5edu/harvard/hul/ois/jhove/module/html/ParseHtml.classY `Tՙ̝M2L`@0I$$%Ja\d&LľwZヶ$jڇjkvmEsu{CݫYc jsr:@~˽i슅) `5m'К4ev[oق1Շ C 1׶&Kokwt0 ו4Aece-)!+XZ݂j2A5qM` W}05%%S sc)`vSï񂯇̵H8"h! rІ'(/D4*Y A_E.M!􇺫6 Cl,f23Ѡ JG^݉宕5,hǖkՉJM$Q95QY,KT[~e/[n-;OK֖%XNMv-OR}KlIKD:QI\,=zcuN-Р`L"7 |rT %nƾ]VXu `L?%c'фɩk.4U@*tAvHf3%dJ؏ 7b\3Ĺ3w! zcz{B@Կ uzWPzҠ fx;zǠ[V&tmnn oA?59A?02=Ccn>IO!c} "}7O'z[0vM9 C|V| m+K&ls+J.C|*!@_HLG7WG0- Ӌ=^P4-Ig,2Ŗ)7S:nnio7Dt(ݴ翕mSQ8r>nП鏂Nm1yʌmg[!7Ћ3,E+L2}ŠۘAd{2m_3WɛL^gyk?g+&dr;髂}£A_{ CP>A3h^:'1> 3CtǑ9T>mһ ?x͵J3/A7fqn_Cb6Ľ0#3^uCyxyN<(xHPN2朶 qṪdKVk?X8a/yـR,qP Mq44L` Zd8OsێS̤ǚiφ[~`woǥӎv]8Vx6#f'*fp<1ou0E{@(g*ǾkqwL:! x1#4n]$FA6>X,M:ey,m|m}*72TnS(J7vKߣS|صd,6ްdj?,K0#(>($ɮoMu F>Dm}#䈓Gx gzov<`rA8xarmG(kcbrAߔٹfdӷ@xp`r◄! SvS~nV3G5sf7TjLEiЧcq;5 Lx!|csނZfa1Q8@{]V=SABm% r67NTa㝫'1Lj5obH,fǩ+kjLV8>"aXتA/lx1+yAZ6bg҂QIf6Y(L#GTq^J&Zl< Z9]gboMKB'ӕ!aMݤkq+}ZWI%;Y+Ԟ/|je5&dYsPu&dXӿ O!RH$!sRH)$$q#qHSH)$$q#IHRH=D?n$?Is +ĕD:n$?K"F!Y5!O{<)x8LYeT.%T` +97 L<)y*T 1m>o>ϗU`zr5s?H${b?3jgr_|bo{R1&Cc UrhZ6k. |39T<'bE 7Lքܭp=!prAp '(U6v=3Z4)mis2ѽ[\L|3iCAOa^^lke틞݋A(Rn ߾:"(m#NaC=LBADpVTuq7!0(F]]q (aA+}A85ӭjx|]n qH{{$Sap6*.6O~:Sz^WVsYR]jӉ|u/ejb_ŏ5^9*x"v0]:0¹-ɣ8DYGrKn/CY^߀xz k, _r\A4zu +73$\C5Z}){Q\ ^]N}$=r_n`ax~fP:ZR>zab!7G>DCd=$JsZ&X\)zZk,[eyowQ^9ZL*U-S M W^^Js+ePI/+/b&ً[T̯qV!_ۭUzv6Y~^U!%te r·S8]3Bצbq!\>d+qt\ԁs4 oI=>edu/harvard/hul/ois/jhove/module/html/ParseHtmlConstants.classmrF ׉MK-iu\URdF‰[#l,2~L}NZV/s꯿6]zN.>=N8=q N/9Nr9i)tӐӈcNݠ,Y0J#dTOәYĨFmu뚑1ʵ=2qb0\C.\)FQQ2:rfݾv"0[Flݾ*.hiZ wn"Dmۊp{jEFy:-{f{e$ 隝ȵ;/|e,U;Ӓ26-vqUz'<1vmp]9OOF@lr0`}5g6q}< Gz^ \ ;֥*WuhQWY΋ÌPaX/Wv+-/뉶EaU4֠ 2 S6C*(؄&66$K#tYr< ͻqޫCLs:Іgcm2:Վ@; Ɓ6?= v0ۣ`o}eM݌^ U*s-mQk߀5&{P~~Q? 7f>[l'곓O3Qi%Nݗ=N6uawA( }yb^J\rH9ނH;^F,8^Vd3C""͉Eh^-(%Q.ehYX q"@/Uq*A55q&Ϲ.֝2TPK G|$>1~72Aedu/harvard/hul/ois/jhove/module/html/ParseHtmlTokenManager.class: `TՕμL^d& &$A"Iȯ$"L!Ll ~jJ;ƭ!쯵Zڭu~Y=^fﹿss=?{9`]uA@'j*&urx ȣ|D"A & hOP[M3{kh" $gsGA`&YfC`.yIh%(ljK P"I\7HX?ASReegO Rql-bbKhRNpTv.qC+[*XK^27[Ū]jXVS.g+P ]Kuƚ4h!)bPZ 6U*d l"p% "p5-jm6!D&:I,63E4֭.j,>5[c14`?K|s憃rP4*qʮU^cnjCC{BhyK7f/gn6;2p\ދXx73tw7DbPOP\e v#Ho kB+] 9X-3@vH ˛}HGL4F_ ĶjT4;w;w G#˻wDwE;z;bzkGz;Q7ic  "5۷s|@z_oWlGPccl-]tzb##nNm/J "Ζm.BYñ_<@vVݭh8C[k2(IP_['̅XaRqpQ=-A0 D@ vw7♌fDwlDzk爣$ԶktvҰ5a /L S]8^ 2"&ORA(rt8 'It,I#si[fniJL҉dimXa0`.N(sQ4P9WLxE)BbOYV2XZV~ &qNx>4!|`$?7e6ƙbQUTHPO<"~yU xeE?z;v pg>3h:}Vg#Óa>/VnESjIq} )h<guvOWiC~g#_x;^"#S7c{h}vc.a2b+\Ktquu0oRmkϰQֶaC4[\l3DœmnlkBRYuMX:|,?so _-BIhHq$ ֢B1ŒI Ɇ4tv:#Xm #3:Z(0kcsd1,'ʹ0oXD!曖d2SZ\U LXKȨc ߗ.eARyHL3uB{ 8 8B|Iu-HD\ħ _P?a>YmC|&H޾biѶ^~˚+<9/ 9(T>h8pA⤌D+;q Jm+Fi2i..RO5 ;>Փ}dh2m!CYJY $ܑ`W8jg_ Ѿ1/g }WBvrAS?& D9 TNW*PqT_A3O'?sYyi]3q+?/CyNL`j-.)mmNLy&Y97u9ӆa _[4ȱ3Ur܂*|9J} I1ck\w 1J*9 &$+;0K1ccr)":IlwI+[p'H-IRHI!s)d)&KAB(F.Fq^#"4M>NIfF"$wa;@IMGIO66K; 2rc;\,`8faX[W_(Y&ǟD5SȣB/r~U_&fm4H5Y5iӬwmۼ)iV0zm+^cvٯq^_)0rߚ'B{/|f2='(3lGcjjG}6e$ti^A\8 _L ̻]5#>G$y a7IScƴ&H222s33T=#7ca %xvBϸ #`dQp: b~B&"7[v04 O@ͩX|. MdɼbR$l4! !x={Z㉿| G'; .# Ttkt a)X<ahl8'`Jl< 8n9p!<gGCaoU % uXmy5C5Y4o-)1 7}:N>qpdEcɂ}v04hN:MpBy*$sva-X|dȁCXD[1+hnDk(cr)fnLf%N@OS)J-4ڋ(Xʰ܀.,cyk܉$Qw> Qp,zfz UZI K xI'0WJq>]ցC$0CICjvzKv6RLۋ|`ZG8?diOz3{4:N.qR+wW.# 4_)A,}88>a3s8qt!/eA)فFbv$azfY2bzM{'Lܙ$W%.Y)Y*YȔ)(ߪ8rIOs =PvcyC2sVRO;$(:̔$7=OFiv'a=3zjs 4,J JE7ǵ5>FհƜH$SK@(I"̽ b=΃Ù0Ee+o'+ $\Ȧ N Yʤh()K}&#t%,nn *A栬5Ci~S%p(\ Xeh<<<_Dy<@;P"ϝ$K$.\eO9P35C 9: k8jh\4A@'Fn1l9|r "g /#7H^:Ѿ7/ڇ}ePK G|$>2fjz<edu/harvard/hul/ois/jhove/module/html/SimpleCharStream.classV[wW3H8|sETMcvbN rJfbˑ%H @i>4 ,pI/AJ ;C4K.V¿+]-.ފY?Ct0,!ޙq!`]|ao'BUx\,l[(U_1i'۰^&^b(FM{*Pfx\.pSD08cx'TJMZIf? |ť\UUc\&7X2ѩGgUVǻc/xSBbt/ u<ó<{gY xEB OQCT;vGɔ0pqbYR93TLE3|ty)jEW2f1eE +Lr%+j|jaJj㸚/X+Wr9j"*!ة38KT_I+5ז/ EhKd' f-#{rRFe+dl>KMt:Ї~jj@(U W.1>)FKFPO;)3RQqHE-391vь*%'oK#߇ƿUS<戊5! CL״>}9S@P}>!}:I*>d8 8/J[S`g䣁 G ^BKVSL;PARkN>6GcD%pw1vZ4 Ilu~~5j 6ݬQBc1𬅓lQVI*bSNcL8Sݪz3dxqwvɮ:3W./㜷{mr[F"I# 5t/:qihә==_"H{b5v R];U =fuH2_;!?f݋Dɐєw%CKM\E5JDYgw.jKe p=nP>pQg='1xm# ޮ[CU `P8~sw`T=@S@$oQ>9RuFN 5iT-⨷2Wm r@Fp$޻wȬ*Ȫjhf q 6e,:Uj\e8'Me~BO@o)")Y߀.!Po~Bg nS9'D=L[TL$δ2lS:|!t97%"qQJ\Ҷs)T<\Z{%S|YeCL!)r#ǼrLc>9xr9x;2ԁud^ {ԁy1z̘ϞuS_#|ѻ!ISa|na6A=b;нң'Az曡3/Q.PK F|$>TQ1edu/harvard/hul/ois/jhove/module/html/Token.classN@c)PƌqqÊbr:N `bBCC ݰ=sL?>_\(,j6Ҩ[8k2#=b{rt[iP0u3 ffV}nVb@J{(Bx'(=$_-cfxܟa8 x7IMǜX̞aJi_36#sqa6sZ>$獖N,1^ QqpCwPcӻg@wE͚NOXHH2,hݦ]Ȉٓ%3`>b5b/]\?!}DfaWPK G|$> z9edu/harvard/hul/ois/jhove/module/html/TokenMgrError.classUSV=l,Vb4 iH~Ѩ5q.[!Q[iKc~\ɔC/P43 tdܙhf۷v?p _ "`=H>| "+bB-9E1)`*LcSwEޏ8"@ļ" n ""LPhrnѲK CGVgFdn$8v5lwڰfch^̓6[s c뷦G+nqeݞZ&qa!lVN5MQ,jj&Kƚ rte!or򄱚7,\ eGai5yO^2-.`M'xu.SEּC+bUMk?)Ǫ ChvۮY5 -7>B_HxoJkpaca u70$*q6p,efTrJ;Zz쬙Xt]ygٴ'Jf;soJ/Ehv-{壎Q`RCi^!QW{IsdWt}%^!uJz QoE#?(la?a?Q+\"i!܎P1D8O|K_>NN8oҼMc!y 6l`/@֙k xB! MA@"t<&'`[96 f6* >*>*}UԺ*)W%ZRz:{-p"7(%)G%mD4pl8'\4|a5@W@7!<DZ3o 7]@m5al)Xr^P'x 'D/'('6pqό4x6^)"=^VyH;o 'B L2~[ L`_sҸ糫W@|B4Ō cA@DA3/uJ .7"x g;XRƽc<TBb3 Δf7 Qh)p.΢ I"bÈ] ޽z+C #oPq9M3QKķ?_/ß ,~Pz0o3 %s(-ƾS=+["(^HaK{o%5o bnb/hC<IT>6qFeT3H #)w֮I1 PMc48/M/ߟ-vJqs撈#8*܀0Wو)U_UMu.B193 4SY ƛi\'v$7NS -]j}iJH%.+?*2MAe'-P *! HPlUva*yk{<x{09PDXmƱo]S15suB>=5fU+k@["rq#A8,rU}l!\^@Vr!,!Yp(ӧ}8 Ֆ/{aKްHث^g_}S4{AKH]Uz~=Lp#'X|=ԅR{=Eԕ Q;phOoؙ`4{w w ց q0wk)k->E^:`"wڻȡ(r]}rPCwUHi\0ꠣ:tHF鸃6}tF鸃6}tF鸃6}tFxAF;ycADX:)bY$bioX^-X!>@? m}n h9wkV)m}Fˡ[c:k=Z:Hltl;每Վ;L!G}SbBc{Hs B ~7CcEdF0th94fJu>6yاFq[9{ס(n+a:*i+kiROR+(ݛV!r1ѽ9m%ћ+ݛV!r21 J<ħ5%z C<bP?Tx_W4i+2'jمw^94樕J9rhi貕{J9rh貕J9rh[Jߖvhs+_|bOhV䋽y0rQ?PK w8B.A#7edu/harvard/hul/ois/jhove/module/html/xhtml-special.entWko6 6CmI_M .@.iQFRv_KRQ {ι^NߵZhb8D*%jNʹ3"\SE6oSB0kbMtj~1GR9ˋV;tPSH0ˀNgٴ7ݶqg~yX| 89(V# ykcNVLcaѰ{CdB2ZP[a5 zd2EІꕋ 7(+JDAtp2꜅"P(wk4FG(bM#Wƅ!1,lŒmvł[YV4]2ΈL! dLZ( Ivb&IȨ0;Q?H!jem0>93EH¶e"% Z`9gU9hY6ZcD fE%eKpTwAPI@ 63"f ! ]v\q2?X/C %X2ͬ~!n]C&X}~ 0:NRC |ԁ?70}0=+̑1w(q#J\!sO@͹Bb*Y 8B]@748M8yzhg[٨T>sΠӣbzb-uJA*}J%\ AD1 1F9q5`;H Ig L6g8֭XBYqY?6X3m}{;*u_9b>KخQGIU kf7&"iiR ~eA&\%KFCر^. ufMh[W6h0RI+D;AC NJ`sW``Y7J+Zp9&8"،GcxG"4Hopj~x25q|kKU<#KҢ%ia`$ 0 b j `p;CՖ0_\ԤT;{#El8x1M(|{3稑S-偗1iwnV,^ݳHdoW[9'gV9 Mz8:+w7E'޾߈7 ˂8d׵"4B1zAfIa|68 p)-2m[^9xŲ$p3ȟ KdRnl,̃~(frת~a➏PK w8¢ 66edu/harvard/hul/ois/jhove/module/html/xhtml-symbol.ent[[s6~@u;ۺRR[wƒnf;$$bL,Hq~@$adAB?{r~770aYWR<Hx,Bُ=|GPRw=9cTsm p]eBç/q&˛s-}^UoQwB~yu2,(w4_?:%ʨmZ;&S^k)H(Wpxd')G *ye׆"I<ۑkQPyZEZmy(BjN+~f4̷K̾\gTƔh)dP4B Gyudt\v;8`2>,FVa'lp}4}hsFC\v)2o|ȑjO/܀v1塬drHl<InԺu)ؑR0huÄR |[)?ԉ1} ԚZ鑔/p9v%he(ݾ7=R{>.G#Ač'H1qqvzW(G 5@f1e;YGK&dZ <~"n3Msv'rlrYg@Ʋe,v;$+ܺ{' uO~u4o O5랂d.[o@*]3oBk Y%w9μ6=W`O.әy_wKL\N4?XѺ.,7PukVҐѺ njֿXVpjnFF2kѦI+ⲭٖm@ˮ6TbO?/]nȆYmz:uv` WNl'8Xmyu6=:[Û6=:wSpސ=i,\f)AhӧQJ e݌ -[T瓽,srmdچdhM.eLBYos}WAD9+yLhX.2LiFRDuz$\g`ヺY,h׌t.D&q "fIZmıȐz)H|pD yG#&("9[k0qW$YU2eTfU=`FzLXYPdb,Y1[HxfE;G<3@lNCƟP!V"id:O^kf AV#Oy>_g΍F%hvE_^f (HUi!ZL4Ƴ3gQt^wf; *Yt'n$g @]ZM`z AEV>M,]+ pV%dg!ӹ- +fc7YА7#E]$U"|_XÒ<2v_'m_K)^ZٞP)WΓ ۖ/`<>2ըӻbOC i>m#=(sd N |GuHק^=08ewvhf@p UuZlWCo&vQҬ%F|ei eu) X,D 4/_-((P:ͻhv7p^z ИѢ^:tl:0({ dsXEP {8p>уWRjuOH9@6&ٹK7ExWGo647Ozg=o~gDFդPݮm[yVpN7޷01AEwqS^a٨J ;x5iI^<=e4"aqBjBmJߙRozJ::<8^)J%l鵓Qwgd9t'b8j鶃l &\gVt'RfLosӞ^2P=.Se'jԦ4;dU lAκm5o`JuYS¢Ip ¬;=}N֒sj-ns['Y.Yj2X  4B¡S0(u[myO)6`N$VT+?Y}C_2z}>]C.ĸZ8ʊ'jK$XEÝŠ'C62v Hjr 3,-`["ZjOyg{v0eo~AM.֪˦e_/Wf}75~W2$mU:@j;В絵P=MMP!ݒs}j$;/:M%> \̖| Gx } +w&mk:JG4(JsdEȒfL@x@Luń7S: ^_b;ǀtTװOH_>9o5Ȫ$&BhOu;nF>ͩ&W#'?P\oA+ZH!O]K-GG3 8ƙ Ԟ \؀dEtuiW%Jpgm>o /?d 7QXXN{O=3PgCjCw}QW*-^fD t_,.k~zA<_ȻU!K(zMD^һ:K|)Jz ֗׮.?4aI@2dyصg]q%5ߴYEVfU!!ˈ_oYO$QVrMqOnR A3G셄=M t=D4tQ1)PF!̮ b@#`'LȘ4XE"p֡*DWyrU&ݝ%/1{Rhʗ^AVU VuE+F5H_$:|NU˼tȫjM7{]~gxG>;C]OO5"?<ٻ<ӀUO*$54APkC^X`sP10L4^J5:KhLOuЌ0Zh,:~QUZvӠi '+Ae"SX%PhaPDO0|He  Hƚ~A&B384/DQ=?9U{SH;NGq48ab酟űpZy89vI/~v eIF(Yz6GmWd4 Q_H &KXS'{Mii_v>`њ]hne uUV0.p%s57\ CLXU2#W?,bgaP(UN\Ф[ FDC{A"Qǣ> D!z5D l2(]ijE |{ kiîm܂޼*'Rޢ7]@#ہ  dtLĝ]6 rdĝMPl"RB=mێ 'iT3%[\lғ1aM-d,0(@W I6JTuOo@ԐRQ|]RA9X.dps-Z+ .숛n=q޵>Q{.ͻzyPi&z̈́%641ٵۑE 9&*if$60z3^t:]^- +bÄL~Ci;0F Y{]Gy?k!ĈėlX. w._S~ò Jn,L YF'jz-:m@d2 'Nu1&& zGx;0vKhVq5Q֫O MLxhNQI ppG۲0~uyh'rqH4N%dLzֺ;7:\/r $>\Ǐu:~?m :> 45ZEXhCӄ12=T,QDv<؎, .]MvO" ?97J&QIZvD6w f݈Y_&A^ 3t[3IHgj7ϩ`L ÆA#@#< Ct;/aEi* QMFƖ`1g x xN}f+ :AO;C{gxy44DI2!<ҝ³`N=)"2!&>hI} jdU[ %%uG\TEV5hS$R0M,(oJ% +N;f(5&@֑uX|TU@(cyʛo*XcjۑՁw-6rSpe@9S$XL8vmHMX g7U8ީәV=)!t1zU8 -hfC4XiW#{>ihfJ)2JwWAAN?qaA3vQ2$KLe$\Xऒl XΥ0s x}qr~+}MaShiSa=shWga]$F:RCO޼+.y<<}gyt\oN8|'>copn6EQPFOaq!002͒L|$ą2V+EBco+T*^N3h+d:\_zRG\)y f 7EƔ3OvƢ Jb >z7md$smOlLga# )W$aj_῰Bkdk{hDZQ16ž;UK ɄTM,g_\`:XwSۚ~Y|oܡ Z@eߖvn❣1MI C>iYt=׏'"[UJ~KL#c #>w"zagXy}.Ft,ٵ!RTv"`.PyP26K8T ìGxIh#qU]@^p_J+T1T&Tu1*zCT3kf֚p̣Y[3󫑚 LJ Wh*kt΢MJ:ExG(J )"s{+ԍ6 j1ǺTҸ.9`(6tlxu܆ >u|,-#Rq }B PLI2=EG2Bg<)r~?,ށLJFn1<#x<?'|Gh|?S?'>g1-;arY'Cg*uӥMUqeGDL5x]tCqSg޹eTCR(Pﵹ{8\s]QXdT`g9aTZ_˹x*iY@5vaas? %` >kETaH=Z.MSV]a#>F1jUmn;#8q3-S&BF37;WdLx k<ӌɟ??yxc(pVGOHwD`lx$#h٨GU ]k;5I7o0tD^c%jX*t}2.DJ xĕs`ss%DG::Sa,'aDFFXK.M`-{]y/UhWF`ЍP@[3xz`^cq{]Zqv8X6G_iלw|OBladJ.Oq U體1OTzmr\^5զz Vk,OXƮ`ˮS6 ٚOZ+TrC@!K~X}t}ҦڗmB}T_Kܞvl;퐸~ dDXM8O*+􁏭F^ÜJ}p@F|Ui$4L&Q@c{k. UYk?pXVbaYSeNl2v-CE>+‹CB@K]m}]a:%UwW{uL|r\q\ K?dbsZ&xlB5|AOlѧ:b@uΰn,x+^c%&zcmЪ#7?vDc{PJzD`X;T,ᄉ l(4HgCOIo$~r2TeWszXd!_ak F=ރ@u K߶qD\jzpIy*q7BRQ6Rj6zdCE*mS=$-ڲ"`:4ÂOa>L|ăL1THذmT>RbR/zGL'ib%$~QJUa,lSXy1)m(}<|,\}i}$ʯU0Xc?&ƒ1G U Uqq!͋QF>NS f7bVc)=&Ϻmdglo(lrzgWz QHg _G;&)4Vȗ߈T6ӭ1OC#H.<=/*]MWaquqx,L@8{ƫ Q+GF$^2At;RK|>p*PlHŭU)+ayBFn+PyνmD2LyƟЏQѵz o.hE3.Iar*(˜n,OFdKd^qb8*]PD6B݌j,Κa܃Î|Uy_*m ,j#]t~|J!ė,@~%,>R\J`8]I^YnPx鈀;)aMPz5Mq y蕹!_M`N=HÓWK+ҺN =Ww* jhG(]iÖO(mM[u4b $h6AG>7)UldܗK>)^s*p~e.VyPo /G6Qd_SV\eԋ݀7y2 ƔI{+scKhԈYIT5"w"3 K*I[z P)9x2B6lX2q9_ݫ)}oft'Uɇ1Kiot& 3}3GIr*L}[ߛDvݞw2BאAۚ}R{̂91sq/GdQi;=[<'ͷJ\hzNTyzFvPog|:rIqi,oaև~SOV~G!u/f8rƜ\(|7f|NaU^B |!ָX[(nooܽHrna7yVTU,E\ 킕T>ԞNdٞ vv櫍Ȥ'1rW1(woOhqFJk5U;ћ \Mjq|~r]Swb7Y\VivG,oAU= ?.;}AD*HdֺV_k({gjFww/pQFdAF]Ԟ~N hԖhYCLr_˷dEDC,!?15*wJMq`qv&*Ll^:̼je3L4_UdHٷ&ϟ5\㖀VM]'&D_|m4ЄyhMnςi՚q\MBdI7سΉ&8Wa7;Mۮ)5t9ǛFPuN }&ܣTIewө.hZG;"NK<~ @'S SO"Nn&GL6wF\}Q-^Ozತ:!MMcYK`ЙeCb`A&M BM6r0 lEgNWNatnv U]i,6^l7jq2z8-Nc\vϼJ;U6T[nq}-DzP|A)gy cPD͗ 'N*F㞾H Cc+ct>3Ȕy@י٬2YCg 7 v+CK}v黽7{qvABLc)nukT$"YFAmc}:un#ckf=l(j Tgoبn2I[PW-IeW_N3r}#u= 0IϞOcL95"B״}!y]8aь2啞@@8F _`/B[m*6kiO|c|la+Q6}o^0|Ndo4.fYT*ͭ;fdo#jYkW,NÀ?,["Af6G"xS]y^*ZFh}lot[:E7>"πM,:[\*eS<0}u^fSi*M%ƥxXOMtu""-&>t! ӇZf6ʌR|5eAkjhM+_])o¢x(R*)_k|RºE?vS\K ̞T'}6NoӒ.FvHxєGMй`5HS QblG9J /i}ͣDD%Rٷ-y{ w @emDž}7 k? dk€n6ZZ!ۆj۶L= _SPJ 9b-mb* ^%ew.2 _}Bx [Xr{_L%`L,;H'Do#F ;>mjM,эVƦ1@yt2W!79qݸwCh=̨ ԥ3//5#ruDbcP1؎@Ѻ3;9CĨY@Wb+pՇM ~Wf6ފ%Nٸڰwox?JA4l#mE =yTϳ7b~~=3tM^繸&nez,ZD50ٕʲQ7JbqO,w7<]]_oa%1 qr(&Nrrr!B`$3RD`8m҈U8/==;0⻓'N>O|z{xptǃ?}ě,⤁(JYR%G(>t$Qyܜ. =4`AFQҘ31C-ƳA?}ޞ'V2Q1@?~tyU"H kT왕7=\߯ޜ~ ULU,x9C 7O<b:+Er4ntX&?FdNU0Dq,XY i4w6R)0207 gO^Sτ@]9jZ&K8.Aĺĸ* ϻڰ нG9uBǃKX +jt5rdRA{ܩtC<Ͼ̧J#V{ҌQEh٦ 籘_į(f~!Vɓ4msy-Z_˻Pu A &ɐMr<6Y.,к,JIP, Dn7j'b8{%[9@ Q2["[q˥ !Yft4jZXx1Qj("WYj}Rr&Jr]~ʛ7\WNX#0`qğe)7pQaKՎ7A =: $\(UO5><ڀ%֥THu ;:H x#?${~rlBˍ\*8 9z3?w/}ѥY B9js.ó.#p pCbYY48W/T$+cd'71  B2&wE651g -RU921\(>)庩j`<}vJOo|M| ykVIτ!+M\Ф ^˔@En^c(4 )-Hh#D ^"kwAݵRxoBCF&z݈`xߋJv={vsFv4LaɑȟCv y2>vn"R&VCь= 'iT;%@xL=kʚpgKp1PnIB媹w1jxTa+]+R5` 3XG%&=QKY|mj{fZG>݇?qϧ] [DKC3%&Cg!j^ ,waD6pipzQ-Z,R o$QC?U,EC6j;{-<7Ye(!J }d=O HǕ<8lwWU aztp"[t[hٓBɱ~k3@"D-Rd+΂ Մp6T/%ɮ83z3LZxDF:<7dL~8Yӯw/9nL&cX(;fOٳm|}^D+Yi'ͻ4E mt C5 j G(ᇆ$dEn uNq/?[T|!fDnD 06 8+zstkjUZ1 /E\ݩߛl2in&E)|anC [@? ㄻ$+f84Ֆ(&P3֟3Rc0d'0"5KbOw(4?pEٖrzקZB;8D]3rJxdóx=HZ|3]y:#-H87a9nsf 0ֳ>|0G-!>qe~}6=H`]L3Ww+~ cfO&}9 3sվ]Zv7~GEŠm喦n[&bu˾'zP:,h p6A'nT2/.)_q@,n/xqy^`zpĻclso>Dxx)DYR`|1U\Q:"4-u獨3S |{Όb&Xp`r޽BK;,*-m _֊vq1VtzXhA4={f GFmTdn]%TH{1/\ꝍ`"K%f(, zjuL3پ(=EFvBy]:fKv\CilZnBkIcLܲWٸL]+n)XGOGX'+^|W[K)@l5^Km` 5;Ec;p{= 7zp{}nF/^%GϹ?SIMB\M)[!q?4P$xe!:Q1aG=A$UQG Ȫa D6Mt]&8i@&i`Xi:vT#䠕?*uA䢃2F+*]%խjfh= n,}|A*kUJ GXv[n_E}b>Kv>ǵi ϭRN(Ww=o7'BVݽF {y :9uԜvM &вl GԃM 3 3+.*ժgκFՔþ ܌#M^16~x+8FegA~; ({`u2ۿ}y *p qmW &YJYT<2S2`|=.:Q9/xIEUK"ʥQT hI.M098kDۢcD;~AΕ} ,8lA)9V ;;(kz҄G?j0Bp<&1NYVu2DrUym@%lx>e, D"!b-pWp`!L_k]H4^KWbC"Hm' Ȃ2]xo 8p SyBA) "3/zx,x/C$._~dk4xdB=1AАWC+Y@FvjzI pP*b1DyBf V Q咒sC$*Umqi B=d[3h|cSgkuÕyMn*p7h+ev*!` tԺ5#p6x0X\'](pB&[RݞUS7h78 jd:H8~A`\Q'[A: 5IQc:Xtdw/g-=ƹأ WIGsG>5tn=C܀$,6. ~6x +CNn#K!o:\9`4(NLh\6s>֭cik .M7k:A1@o)2E|¨g2F/}<ܪyZķӭ﨨Q:>&8kbCP$O/R{nU!;BХÖqސ("WO[ q*fXJJVxt_( {¿!p11jUocHaSem=l*C!5t,/$<}[{^\r`=9&U6yj$is$' [n.[dL87,sfL\̮V: Œ}Z廹=쑩YZ9\ cYil=tT7(SFr\ pt,89 ?|qaWx^bp鎼ڗ&˗jUN<°X1oI"uJIbo;|hGXF*'KlWnM9e pF18Jf9BBUN7BB5/HTi>°V(L쏁QѓM$i Й~ݝ۪6Vf$TP - $u%VI?M151tr汊q'qC&<*6dg`h*@}?ϟ= %ubLw"&x-ad0LT2\Jm;#&fkOQƍ08`ąg6A`>w^DEn3n/+ܬ甏ܼ LwzuׁHw=da\9\?oZG9M-;n[rۦ"ŴkSc{YRxE /v aJU^v^*ق+]GyL%Kͳ*ra)oPODŽ\^W;LqTx(ߖW^8M0M<4wa!'4~SAx_gNYb0ǗZz)/~KEDVna6üRͳz[-3xu^q[6Pcb*޸[te@BܰPg]ȗsJЅ63-0xsU$]0 L\>ԍ&)_8ҖC)]NƢTz.^`\dW^ ~}˯ | EǑlpƈ<ۼsyl8Ym?!V7[3On#ߟs+F%տ_޺ݶ#4z- AR5bh9CBۃˌhi_u!z:CSxh DG067өo" nyNB77΀X\+'t&6i/PwU{~˻.zhs\ ߬j PA kk E=E4B0mfӨ<ɷ6ug,",*KZ_}`5ú(Q.%@۪|]QueUǎNyUvs}&:?oOg*Aa߬0Sx A:X3RkĐ n[cMKVՋ @]>9kuwq^!XRt ՄF Yu! (mzT)|>(=kY jW}V$Dqzf͇J:XJwxw.gM9le"oD|I6]3Nz8je)OPɧDo/({8cG2>q\%IKV4һ2ḥ0hEga 9hԻf ;DZTKL0in!aYdWs m ә]6S.c; <m\jxpB1&kН AH'̓PK w8n&o}=edu/harvard/hul/ois/jhove/module/html/xhtml1-transitional.dtd=kw۸_iF$$=Μ~HHDC ~} HIa="/..:8Bݕ2-<FRq|H\*c=lpBe,E n /B."˱UR"(3jB2 \R!u(A(K,_GwqJ<Ţ{.T ]f* )_x__rcj&[jbN~~ѣoOވT]^M_&Sl*I%6)ĥ,d~#CQO̙XeQɴT %#1) ׫볷5L^ <dtptt!_h+tttnM4і"A8hDR(ѱ==; JGG=~"?y{#֏xy(TTGY*X6]ϮcIPAzJ\z",Ih!t>޾x駸_ͳdkOWR8ܾ U; 4G'UuY^;&_-&KA~k)FoN_]ށ*]T Jx9E1ǏUfUpP5Ҝ b!KefSJYp>Ks!_|E0^ @DlE93?L| D",dB<>|;.wjERRuO}@a0tнE9ECǃsXs.;SJuCV 3+I'b?ѳ2su?tץeyVm+RJQbv_+#4 yeAFiyȫXzwg/EAoZU MP7 p,Nu/kϾ#%"6wYV2DZI[ k]n*)U/b8uL{.A..rw)% rL45VRV8UUn 36DnYr"MFm5Qp=Sh^Al׉ DJUItL2[oV*yVjE!#Q͚#K E(.zB|syO_q,MTZ.5H5 y>U&IvkiA$ֆwͽt?gKXP10?T9,4^K05* hLUP0h=$S),s5T͡!꾠n *\>,RE( +|x T}@$( 57@"620(XP$!hp0 ?S|3{bvvꒌnR ?z8iBY IfQi,@e04 *1Þ P>-hrJ^f&dE{lhc6ߵABVRY_Ӟnu*KRJC 5Nd qC<~M%c>jz(<0 tde%=Ȥ혭Tj,"OCkuҋZLC`a&+8sHSV 'NQ:uN#dƺ=w"Q|o'&a?k9>3.ZEX*oBzY~2f("$,f$֢Q3;#*q4uc xIT5z>Ü&1x}ע~s儽ܨ5%'$gcKĈ }=\;A@ͰV C;o~>Fi* QMOj@LYLY"33o,ꂎ(5~QҒ0Qҫ6E[8_nHw ς) '?APk=x(m6nu;8aqUUXV| 1HP%`6: ЯγJꩼ8{ )0(8YYt?Abv/[% I'엳S?[?l֗~rzyjyCKY2`Zikz(}-6Զ+pb@SӘE8j".@ a)Ђ2xNgZ֌DŽx1ŸU|62k-袙`^= rzxKB쮃œyRa3vV"Ϊ$s8$T( mR _cSΕ+s xCqv+{Mashi6S^9naSc{O,p󷸆p->W˅yܿ|%'Ix^H:7'ؚ8|%>|Pl? 5A]쒃a, ~dzJ0,Zzsv\Pr'G[. aZfY2Bƒ4ogHAwDF.6Ԍ307*f@PNLa2Yc3DkdwǹL^ =a\t|¨(݆3&XcUc)^"fIA)4#/}i5vIV H?]K# Z ԩsX-H8i!G\rD=X[;Hl|X{TGe0?u uڝa )iJbcjlCC n!ΕMa0dm]j/nBl۔:g<΢l`6P@~#9QdL9[wژAh=|FNd.k&&:lޏ7&5+D*U}.d7*TsI A%^4UA#<&۔1b[3k6?>̃uPeH_0K˨Y'=#ht$/b~()*m0zgk ܷmx؏`O Fԏ`?03?g_>/;.)0Sp6 խk8RE)>Wu..llqPq&߻ɨ+d7&}*KPJ TI;ysװ9~Sx*L!;hQ$sk@&j*^OśPYO*p鏪agiv633cXvz x%]Uң&=ݺҁ)ЈPN06AšNa|afY1!Lal ˼wYf4+1&qVXHȒj2ӳgo^]Np,Khiw|"bCn y2:Pw8t㡃9տL%<n/n+Q}MkVAļ9on>W To6|c _u LjiurCMQzٍjs &|rejͨ~ eg)=ѩ~š|d0JtsTpG ,gObdb 4l!a-S@fdՋ5L4,DtdN"9F1 ǣ!d[&4D5]›P; ą7ߖKe\VJ0r .U8O K c~LtPCCKҌsfGY=( S9rT[d / a!~ j;Z*9)kV)|kw>rR-A#I]K1?Ǔw&2F4KAAQop$ B^k9\w=L+B,`} i=ރ;@E-ak&"n"w6qV9V+rqKe=$H'֬wȂM%S$-[3D,T0Oa>L\sA_p]$lXD&_j(Z6mt&jEy?ew "Ve [Tk^L3 4P^.yD>)s,]jtZK>؏I઺x*n"x%xBeg2n'yyz *7Ӧh#jXf[7Z:[ ޶قP/=Ji0O@^xxAeBmr_yL~#N][miOׂS0r5Srtu*مmUyk0^%(Ԍn03eAI<`O5t3\TpQ =h:PI}e!)qX-˨ӭݢzS#;ajH z31*3@~ mPt*Ah < /TiA kV``k&2u1 MTm+ :ìlj=x8M3/`F< U BeEw8xO.O)"8û8û] ہrR )v׋7QelG{'LmUҎzrS$Bn.r%M`jK&R7aStxl V_;@QW&Q؅2 sYxy!Fȶs65՜ս*,_%(^ ƌ.)\~6p]>n?x0?ڰX7SdD*wdfnNڴ~cӉZ;,Y }2xVf{vk~pԞ`Π~gL]b񸫎X}dA|(؇6+脕Y>l6O{;_/1,of5ܘ?LPoJݫ$Rs'nv`5)W-Ucy;C6}4a؛uVB| V 2 q۲lGTW U52n+U2WsUv( fQOP&=iREs Yҙu!Z_\ ޿;t] VLmMY^{԰˭ڵUVW+Z=*i([xyI,ON΃HetOFjK:"5%;}}㏺q02?ڶcs{7[!tl#QnD-w;hvR1Hh@|EV!2:P¨N-03Ԓ{fg˜}[ʪA6k3e$uIԆok|oYe<=n00k.-E61:l2w ^f$Z/-YB*Vu6+$H 6txW%p4?ƙ !ntM|56f41H'nS5Y>l٭q :,̕ kʺ-a sH1k >bD.ev:vigRoL7qM 8܉+j[\eIuB4 4͡ &+ܭ5Ȅa[ [nrX ]th"ZqJWtm.kuvC_߼5˖ج"605=Mtdq 1aqCV.yƑElq}5M|P"Mvlem^5 ʟ\5tsvv}ΩhVAp :>p(bt6+oP> ?xD>Lgyn**BN "&I.M){¾Z\ZOSTU4TVr(A(YhӅPkLnja}fذ+3B ]ǯAڛ]6-|5mtL| 6=nR`ؓہOYJFeI׽ 4fHx'Mк`1H)u1]!Wa5NX"L)[m薬<|L7PiqaZg{w,ښ0ti0̐mCLUC&|/)|,hT1Wt~1DVW`{Qus \Df|DjƢAֺйD A&zD o'HOhKt㩕)< 3mF)m{mc7\Z>@uAPx%fX޼7( *F4ôų9mB1~hЭX!Zajc_6U>Z^{fRiW>{96I^VkfId'I>3YS}kZ^PK w8C+AgBV6edu/harvard/hul/ois/jhove/module/html/xhtml11-flat.dtdܺ Gv"m[IVD;~7MH͘MId=UW,ڻ'&BPP(ln&[w/? WNr4Yx(:iVf(ك 8ɛ?m$iR΋ͫ2.j6P42^'YҖ%(|T/73Q_uZϒWiy9O/E:{,[T:γgO7wVu%3UJTuϧ {:mt<7mlڼ(Ɠ*˛ S!T"ɄQBU8T2-~:ȫS_ۛ[qQ$q lD}%2MwMlH0 $f~qedyo9MXP *,-o2ɪ|*VN`oټUy;`B@FӲL`fÈ6Y]]3@#m tT] XQYX—ZYZr6A!7@\4[5,IUd@d~QAŬ!AsCȥqz&y5#YK 5W쥁hOFh8s_߯P|ނiTDy-?U3yf*\W ן^w?L2m'f|,mTY|HAL TCF +"F^FV9@FUn,Q͟?qgogo>{PniZ&Z>}Ҙ}z A#Lc5i?___o]mU ML_S?m8 bM12*e\I3 K\_q^j)Ölx7oߟX;45K-D'WN꫼iS:-F m-JKJ|MaE/j5ōUY^q[$%4-ޞ|31h "MOIZ%`? uڟ̒H!C$>xu~˓kLY8ԜK?hqTeM(nglG5-@#QY15gy;CE( $4Ui™E.WJR"E 3ԧV4&[yRfLλГZ0*##l΂xc@ɫOg? _/c-~r?OzGw/30l$8V*g84ǍJ[$J(iA}Yzh:JZM". fU›(7k–hx)|.(@{?Z "!E^C{ůeTdyY4.ԩ%W H H)eO:{ >(~u2MZ.Zb{)6JbgD߻ՄlEow[q܊7ϏKx#l{@;@\֊qp˒ԒP~gqXa=A<(1BVU0ikV{mU4H\'Pm%9ˑ@݂9(p:=*SO9qI3y&}'U-m|K FI#e'kYqwN@].؇Ԭ+]>Qjj#T3 8Dai(7z-ɦضG溌O$naɫ3T/PQ-:(_-:ݩ#ͽ /1WHɇsm4χE5uȩeG@Je%7I)V+)*1!! xlw nqC~Rx_6 }RYwE/42nAәC;|^9/˪7W3kc5HS6eSM DTS%xV !/pZ-ڸ]У:na~W ̩ޛ?}F7|/zⴂӳ3{1Ù6g\T q*w{ ǔՕ:NNJn8(.ΚҾL׼ia%eu]n9-U }aGV[ҙ%Ї?#^á0 xj \diክoO܅d:2NOAh8> W$$j_~GτE|@qa4GO!x V`,{ \W+۹]X~=;ngQ̍)k_qرk;t;i_;a{̞k-[μtLbO{a'/z!ꦖn`m *C\` gq3ak 5Qw5(H\:Ary ^m&٭`W%:03*yr^9rù4*sEy4k#U[ ` ~Wư3kr{&y$.6o?e[4E 0ֹ%yRgU=3=;p AҘWRyy&БxD& Y`L @>GZX7]6a\XDc7TD ڌl2,ћώFoHXo_}]$u 7f6eQ\,i/]R}hK;UQh<0ݲ?G  K- !Cb72_#0 R]Hm* y) I:VLدؔ H"\|8w+44OXhjvY."ʰ0#)-)ʀ/]$ڹ#M\ +ĪS99GjQꃍeVFp\Ntz>|Hf;VxƮ*)FcnP31eT:n-wX as q?<٩YR魫ɍ2^]b~;vv ^gd׷Wce`.Wzu*;ޮ^q~L<'Kvohf>; d2U0,F! Z81.dMG^(|mͭqWD:5Gz'wm1pǏ)Ud ۜvi}A$fU^VYp.+>&uDexv:Ö%1*/!RRP՝찪NɎ_u7ZuׯWݏVDUU{'QuD0a2DA?{wR p=JBfKQDF"7W*xv+SW;/g6XJ --YUfe]gw ī' P]51]dMX2̽PY yۆ K0bvDF:̧eDGO/ˢO^FuSģS:fī?ۈ2+C`/؂YNLcbMeP/"LȰį%/+JWiJzy"FсuJ|%pTמ"8@I,ZןqM(@\ L-#<%qD3hdзt"m[(P &=iv+<S`73s g>ɲhU_,TQ*yܯZ䱪ExEiJX&;DHEEK%Q"\dYд(P*˂J<—U.# Bx ,,RJ|ɅIƂSҏ2n"N% ͕IXI'aTDmRǒH6C^zU6įש@Ee&=6Z_hՉ_5*,:â0Gby=G%~6ZUVE# ,Zp۪GrCjwkq$IUҳ zE DBI~M??^ S%gf+ 44)גAg@3>f(MÀ)3<@&,޵LKs}"/%_omoȆz~ktm<-KpVsc.z]E v36ɾU\ڛ%m7ff0;:-x&$J(nWJ;"@μaAZQ5/$C}EK s=XJĄ1/k :,)Gq ru*9-*_x g2GJP0}cjt:B,D֚.c>^dF4?:=e#c2Nj:BWQTvʞDTVR sLlٕmЁ"HbgP=(#'5impB7Q\3`UAdbw=ꌉJ^Ue6*t፦.n|Oϴt)>tO >iYeI-Hn@#{T$#xx^'ԋpʤx{nǪObuO/ey.#?OOq)٨(U-==sPcÆlȱ-HkV f۴5mtw&ܔeSr"Mg?vEɮbͶ˃e_3,3e7 )GARycoO87>YỆy溅4 <{Pg'Ng PH9nI|1N|VGE{! 'b>vy;13|oZ!k>|T|mm<2_;OKv3n6*9b/9ę0\5 ޾V xx)npug$,Է,B|s`3 '#ЙEe7$4jvBz^&l]D]of^^ϸ}e#d_`wlcl_hc xdc }bWĆ4/4`Rb?AFY1=^:IpDEîIj!Ys]W5M&efPƯˈM<&1U7 7_š,k 6 *O2=FkwcޕFI }{({$tdߥzaeQb=yEy̦r y=1<ГQ*;SBFX^Ghl&H3(~pҩ5)V|>(z,H̶󯋼nm.'ۖH0͇$CN0зPM$y3V_[h UN_.Z׽ WAK_DI{I6DN#qt*c0Ǐ~[{$o%#ojW'ݖ%YLdP@ՊgA$VeYFY-!(7.CBd3vtAl!E։ T JYe?J@,~hRmGKux,)E+A8 y;!H[T_E>E}`;Pf⡹n !Q(1L>H}&Chh/8C&ΉZ/J'}{~ً/l;#T\L_҇lonٰ^qnЗ/=#ܗGo}Ę_i`v*ӡ6Gmg.VIq/DQ8+_@eǦ4V~L'iDW~({ Li/ם6*K l %J#Փ9pgW|6<Ÿ8/μ;o櫥hm +%Q4Ʋd}WdlzRpBuR9퍡#q41n]0AQhNT~cWC!|HaM4fElG /#X.FV@"68&KFoА>QklkiI_{!v;Xdf 5du2 1We$B )C M"F;{ध@gq 4{3.0Fx9׾銒մR]uR`l;\4yQ|YnI vA[ڐCEOn&Zy[)ejHEgZM)fEmWP#g?BMbƺMˈ'֨;Bs^v4V \L@Hdg#p3U$RqUWp`Өušq𮪥1T[LKb'0i#C'S $|>-ПY':%/o~=?dQ=>e:CY.'v\)&KŇ@XV|6!.Y糲jSzF ]<h@3UxⅧzL%3kA"I&7(I&7O oiZ\nꅯ7P1>\&h$ E,4t670!Z/WWDepYd VxWkEX{:uǡ{|Ѷ+_/~DGD1RC;~ϘHFvn v9,ҭ Dʲ8ҷYĻ ٪Es6 D*|Miy$Fe@ZwKP;p?7j U_D6j~w^t[ALzِh_E6爎M*sXj Etyʘ·B8/gMP/2Of]YDlb.+,S.Jιh,b,=_HݭvS!uY${w\-ťӭXAER`WfU@D +zťXY D a^.Ȉ |ɍMnW܈ʼ|ɍMnW܈Lu+=/#JZjW+h\Y< 2+˛Z7_FqeysWTˈB jh.^S ^F4hcL ڸ˰;]YwzWTܙuv_Ft霭^3_eEtܮ^3_eEܮ^15_yEܲA]z+nVsDkm]F #pY 7x.CۛŁz:m'cio(Fb,-UPHm?r[n/?l2~[pYۆWǗ$x/ q0;t~%d^8|C&Y.n(eVqɷEBI8**SZj !Lݢ;ۇ>(ё A$H 357d꠯[UZP2`uPDlB~-E㍡٧2Ǽ(z$H,a"|ՅisH+%Ӆ$㤪>cϼrΥYV,~RPl*KqX= Ѧg]̟Ԣs+ډL(ZaV^pg&/RO!++_O!j !H0 d<'’Xy R> b`>ʠ -`>ce؅*TY  ^iz]sw4YJ Y YxXo)Zė.wZ VL%kuz?kT PS>E=_NӋ MVW&e4j1[ Vc11Q-X mx;Coo+70&9}M%z< x`1'|)+mtI5NHLDQ31 &Tu+-L!ofU ,fbeS: C3v. ~虣_ !n;֗qYnjWe0r<Ne8]WtWw,F]:O͸.K_iz|?N=%w" &bTk낋 m|7`R/'eq3$c:}`1 ;G뺺xHH,.k<@3Igs>Yγ2 I] Y\(L ^] ȡCuCWlCB0l#EE@Tu&PiY(%j%J/8f:<8 ̳Nn`&y1]V7OFD]:9p]v@w6zJeF|Izv[ɇ*TWVژ4KѴJza}vs_ف6\@|Jd.J9Dfi] >eӴO`$׊u -t8Ytwy7R$yMo@P!3O{H((鶿Ҵ41Lؘ(PCM:,*n'Ƃ% 2KtY.'A (S9L¥,,dCauO#Λ.\Յ"0 1)-qݥeγpnSQT`+)  rd 86.eA -2_TC~I6'뿆fTsRMbL}VM0fu9m\O$l).zrSFxv.G +7s;x{غ>ḋfa٘%J8Eu6`G)oG n-+ʒE2su5sNF@Agmp?Ȃ-evIy{gUs+)l~x~m~5Ԑ"P% x^ &"րK9F :TzN4Pg PD Ky 5e!eү51;3S` g𽓮P5<%`':Mte 8뤥3)Xt kR7nWAdB}$XE=eͶڔ>X]p`!{e0Ӛ%2ȸԩvskl[4j:)çU5vZqv>Ï4#'U{3O 8J1`F /YAQ;]83Ӳꭇf,IY!vA=ux8vf:6N 'ᶀ=ދy)O4xwi|ˣiܧlSQ\53 Ͳc`-1ی@k͏{U~3x|bý(!jvZ-mE uUV}vK]|R4֬M:J[4ZF> ]} @WZ,a(Jtme7~ N-s9R).7k}*:z]ckh_@_j^K_ ?nJ>n.:c(:ϓq 74E(l j1^ Ir &!m[#k{`RL+WHK^iQ}k Q-tH| 5t yG,2E^Mx/ jU&'y˞'ԝ*Yu&?hoˑ+EK]b3 Q'2RX2!3lʉ̬9J=2[ 4Lʬ%2JclI {6H`֍O_wdXQBAp=ZD$X]H +/"*E,=bXD$XJ^ &P%(JQlI {45HT֍OUwdXQBAp'0YL/_<~#>R~K_(2.OϷMۛjtݫ>=tGkgWz*X 66*U1崫ºpcË練RoWb0lWƒܥB;eĖ OpVHt!;pw=s\-xqڳBX*ձ&9۔"Y7>9ޑaEi ]Qwһ_v7z G!z~ІSgЎዢzg˦a% Û~~]Ålu}C ơ?BuW˅yʯzH[yP#_u̇Ƈ̯|Ri;  qz>|: cFle CZI1k p)0d:[JrW+";S }ȑ}qvqv?[yc@-@5R{ ZMv]oۇo?It{v َ*\UlGvx-:qxc *w 4l0c'¨SǝVCbX5l!O~0D1!FŃ9<{1:ʯG7㾋A#bF_ s4%冇Ί:(5CVب;Z[e69˼¬|s[6ˊܔ Gɩǁp!MJaƃI1vÌg&RXH܀xH68LâD*ZE=]mۥc3 [F6JmۥF9?N{ YC{!)e.)d; YB-u?! ]O :7jHsFy^{<x$y+8Q2}5ag 7Fm\r~uGwYgYz"(djE]7Y?yd]G# 8?Q>6 ;@n@ T 5: ԼwQrP= WXZXml}Q۳L)j4։8Q ]f;8F27ʇz8^\xQlpwE^sE |8q Pτzq~zu "EE_*c<$հ5ʳw ^n[8CЧdwg.s=^MĊVϷfNe>W2rLzMGc=ޮ/\$j}Ø:u$d5-.:o'S$1@ӻnuz)|9 cx"gޜ99?pV< ~,JBX FOly0qM%vƱGIug(wlwi Vmm͍*R`\N`xn%@q:-!έeS7 _GI@-pޟۧ|c!szz ]( 0 6< :s u-^ 9W!ݭ)o"ļvb[ks RJ4#zDO~pG1_ٷW]q ԣ1O3?o;%M&zHBN2y/ x FgGcemtĚvZ~{_az=K.ҢXK&.yv޷!mx]ikU}_؟#4a '9>s~[i*ZE ˲·,#UuKcY2̒ 䌘RUM 'g|2VASѠ 3֢-@QLMPqHd?YGW1AX郜W'bIItɨNc 7!-<~YUzRh&ռʴZ$Gy?nK 6XI0Tg8 'Ŧ"|W evR5PN2Χn%ynNU Һ +//G5EfHrѷ$n/5FM5'f7?&Y31\dÖZn,H= )fjDաj\'W˛wsWlvU8 bHXˁJU퍤-XIz i Ew"L bӱ{_›mi+xpZ42MaMh"R2irߏBlm`Jx+"_S?&SNM `'#nxx+,@'%G 9~d zYЩbGxBc ld~yOZӿ-1XY/!A.ɱWVBWON1`+ 20(ܯt>7|wcbqY[@"yk_ml1myݱEȘeb6'F !j0#DߘAgG*+7FGo+asʽ:Yߪqu9yͱ:9ϹdxSEq\o{c'C¤d}~:X0k3KB6^^4Y~; ïؾAs3gaĦŠyy{/PѴ?xHRRsM]"-Yuk_Lc[KgL}nӘzˀJUJ+H|8j\~32)cRMʿQ:W9C6-2/^c4l tRJF>RAكh[1rBl]o6B8Mg灚=W;X5̵۔i&7.txszW nr˯7)< 3Zzf~*/q= wWl'v^<ܨ;nZi"XlbJْlJ7yݯJ!j ܥW݋մlŴ3/F],(EtmH8 c8%ڤN!uTUf\08tcRSMHIB|v<פu˛vو-H#~;y1= חS_an~SJh~AړzwR?O|<۞9j`5Y:C mȱ3Fmv mșܑ qsɝ@ߣ|iيAp}06ՙ'N, :>2?ί6JKWFs_pb^6ߙZͅT=w~/n/.Z^'G%o; n)ޒS7YԿ(h~yNnw\\ub=h .3sz=iŭM6jÖ%)n:~SKfc Q}ֺERچNjfw%"o5[1CI%n.z:%n}]-%]l&k2IEaVr*NGEsTz~W+I0R.+ހIئlH:y dVq+5 {[|$#;Ԍ n+wUYOEu-[N2p`Oϼp;b`xC XFp]#tt>T-<2?=_OՂۯzv]_F+eCLáz< Q\ G7QρGpkaǕg}L꼊vltwUBf)d1ܝGߋGh?LobEX6gb1YH)^o EUFUv~ kl@0}|*domo/DM(2%c`Q^S鸫"iIo#G+/PGcȢYc9(:W(o/N8_qQSiQx|@[wᗱf=nfXX+h#[UKPL(m6%ni35(Tߜ@(t *!a]-1eE*Z=JԿߒtT]pH9.!S.+&:VpmT}Y O6hl z2 2,K1W^RLƢ(>Pn@%} Z_hl}/kk7^w))WFVVlH H = QzR\%EB,KB{Nj>¿cSwr⢍ :2t4E7o"0'i FYZGۨP1 K+Q`;<'#X0Ay1Qm5Izw^;kՌl,B2`ra[i^x$(%`3:&`-Dh3*]8@BHzf5Yxu28?QZ6d\=0Z!ok'<=a~Ynʡ8❷zw xCwtK#%j.*`FUIYo6t tp81z9?'YUpW.\BJ/YWWhOq N-}=Axs{`s/ 5ZZ麏uq]5 Â_W r6v(Q'X8g`R(YZb,]\bO RޣL&gL98U?^?F{رߜwKB f̅\ 8f.掘fx\T4vNs98*ę{v2Nf8u X\y+Yg)!2}]LGY#ns/8s3N! qG04G82rQi,a|5&C»2tLZlw}fR6[q)p .H:^ ѥXOq< a_bcu&Wóq\ w@m(o~߂_;YeLž W"F:(iU ͝욵"Uh5R+|Q_EiT3[S-L}%2<,t(QKϳn( v,2r8Uڻ@k3t֢ {V׻KjX ^g%Bc.<֞I׳*F_Un{_Un{^Un#* ^Uۉ"b%ܧ^rx(+vS;^xUﴂS oL0k=Ncc0s,BG~ayC>vkn@h=g΍ Des#ʜbX}{lUݎ}&Ǡl{lqbXb+' aR 0Ń. ;[Q~+]f\Mv2q%Fd#HGؐ7Ե獤*qg6 u,F@B\3`=`̙M/+ =0؁5="Sv&ֶ~P1H: Ϣ#O9jscQ''LӫocՇn=VԄ.ӎ_}i@m@?[sӆ=|Q|~S$鏖>P FRf1-ɼ6o[ܟB24̷HN _AoGci <}(߽"ҹol$6Du`C%VڢTx…O4,ӏQB+TဥJQ[*à^%ڝvR4@KRu[ỶE9WuLdﱘ$hH@732NH3-JQqKd~I_|p'օQ=/S͙U=)<L/"^vsQ.YK(d ,B {ʝc׭Ӣ[Q9_|]N9 oq9:VNY?jyw$Ƴb/_:o;;2Sxnt^zE$͊]WuFbyT}ŀCf>Yj<6B ñ C.M*كuúO*5D MK/];B/vX2BdR !^ z"+'9}'F FHW j@x2DX3ˋlr+)H |QCKyc2~uX%v:ju^ v pVg%vV21eshJU\i">%s71stcuT䭐L 1 <9bv8{^ o?U- W% 7X&UdmF o%MD}XʍPt:ޖ,[;wlE4U&kʜro`6_.lMݼ$/KMMܝMUp7vαvmpo6;`g^ήrb~Gˣ\T({.{vP+sl={|zo >Nۨװtlȁ4$y\h@ڀ?yދr"lA1A(.6Ha:?<H1Klzq4#,5b:G1LA  ? Ky G7z w e6KBٝ_<{JZ8MJP-go5LH;P@$QdNt܉W(UOW8 ̒ڲK˒2,Oc}_CZ}z$Ao< E%h0Lxđ{A0Ǡ9s) US.Z-ːȬHop|,,/7R_O]k0E|N 3X*}@4#Xg ܥ%&^m6QQN[D//֠( `ڂҏlEx6nO{yAMf0QkK{IxB ogmCІK XԲlyzf݌ } kOk;iU]IM$J$gtI껛0I}T ;#J~H 17;#~}C.w}<:o O:YE!;/;?~9ao&Gv ԓ XL2pKwjk$%)' zH}H`y\R-6E;FH YC-ը{YL9/ED^HH = ɬDg\9t;A_Q~d9kXQZ4 9{w,Yzr`̠cn=PK G|$>%edu/harvard/hul/ois/jhove/module/iff/PK F|$>_!0edu/harvard/hul/ois/jhove/module/iff/Chunk.classn@K8 i)B)磸JTT Pmu4Ď3O#^V)cH|:U׻3oGְidH`!K,W\Q@W&Ͳ*tu{5`X 30ڼ7=h]õFQ }J/ s_}ض{2W;| 5pW/Eoێo025ٰ-(g=A)& 3 *Ow5ۮWeHJ"yi1OKq.wZxN}ܩqo7Ar4$U5 jHatJPKd V5ChRE7Ѥk>UCDV; QKu%h""c2\Fb{qF Eer Vd~ [x4[ =X.?ĩ\a! #ҘPy)EQ}@q~tGoϬRkD0YH+{2,EM! gYPK F|$>Pb6edu/harvard/hul/ois/jhove/module/iff/ChunkHeader.classUkSe~6,-m@JVLuҪТ&PI$EK[dlfà3~/'_HȌ?/z]V 5sse_ lqc!Ȼޓ2f1'&nɘ>уq|$xN8-?я%DDY$/▄AVO%|&. 3L,sV5wOsuڰTǬUg%&C|嵂]q.n`Dͺ-e`E\6Cby[TK usM M6ytwtQAC$TrM_ A.hVk \fo;%vO۲8E*EX/g:v]=W@L#G@>W"ߝp:ST+ǫ ^Ca.F]a@šϱ.aCS22-2VhF#?w%^k6^4SewSʋI|[~+5` 3Ʋ]GEHm*+ ®KxaJTJE76/{ε&\Xi؉tA+s߮7rg/Pw˛)0 =/`{z=g0$Ύbq> j5n W;)NV8\CӒA>M+zk[mن =N":D'2CBcD֥#DKqMfF)b7"`f&gr E&f>Fzb|A/b61tDi'SM$e>Hv20%d"ODy^ 昄?1p[>GD/FZmxq&HF~T_x5edu/harvard/hul/ois/jhove/module/iff/Superchunk.classS]kA=7tt[kWj[՚lSo"VDPlff6T  INJ/ )s3gνso?JBcm\6~& &3cژq]lBIyhȰ+CO4j]% ~׫rEMu_vTaj~.Qk -ٕeՎtEJ ='Xk~v1jlc-ke~&7+ǵ%T[Acc8;p0 +Md M΁%y,;ACqU k;a_⓿9b~7ZuJ NG,JxG%^9Q:{i3ٓ|IqwVT<[a>/@(8ΰ4qw)|r3>b_ޙddԇH!Fy$?RW >0;|N#Nu9l^x"PK G|$>&edu/harvard/hul/ois/jhove/module/jpeg/PK G|$>Dׯ^=edu/harvard/hul/ois/jhove/module/jpeg/ArithConditioning.classTNAnnY(hQ+rikqE"RKR ?-elHH|$cԙ A MM93sw3}`I/qS%r2&b܃ ADq &%܆"S|ڃ⌄zD<1Gбik[e/kQ |:٪NM6E>o@j%@vhڪTeL_TSYR++}Rtfm-Usܷ<^+4edu/harvard/hul/ois/jhove/module/jpeg/JpegExif.classWkt\UΝǹss3I&7R fawHN45Ŵj{3a23LDEMGRaB  V>p~( G24coO< QA;p= G #arDdD81(M f7 YR(1sLȘTP)?&V  C SA>Aw!ܭ` ,>ۅ Q-> mqqо߅OSCv?*؉#2|BA+ZDI9>lNYDĊ}{A5V\`5`JM*+=hE"3cBWdz䠐RfԔip1¾Qc[ @0c3<1RF*V?:0b0f0ԼLD09D%xIr|*0W(dJ,e?_.Dbh%mm䶍ܶܶ%1Md7Q5|6l̈G]Sf2c% 1ǒ E7qaS1}b[*0\TuG"f /xgT|x ]Wѿ,fKpb}xL3:=)qg9tQ%T<=STOcg,Îug{Bhw9-+Qf*sfNƌkf0;!U?fj D/'&/4r*>9^d?&Kt#,~y_~-MQiB}%GoꞺRDGbhX:tlxc܊/k2&(:!B&/eT^ + m:4n=%&}GGL°uMR%buP3VcI} 1SF&*ԃ#dV-IwŌtG}=JlYd^w \}=IW.Q3-bh\BvꪢNM}:B!vL(!#O0xdXDhuYh\8"W]cD54^ n_b(#XBXv͘)BPcel-W*>#e>bStT+U R0}kV(׼&6x,iF 5>Nq g\ 7edu/harvard/hul/ois/jhove/module/jpeg/JpegStrings.classVkWW# h> bm1t6-'8P˾_gtCZ깓0Hs>g{o͸--"%˄m«otr&&daJX#uEr'%8% 7  o&Cx}‡>!|*m>'|A4<$|M|=9g9%_Cx 9iSsK  =jը:fndb>qyjzj!8RSW*-es)u%KNI=MRr:i ̜^RP78>ig 4<{sz+KSpxsjΰaX 2䂂J=fZ0kVSɜwU(̍rJƴ](XP )SqsepzU:UVpQ'e LoE. =#gU;)"UL7͖OA_@r M[,l1'˼}q-o]k3x"T+E& JW2JUjIՋym;O‡ؖm+Ƥi8^35HYL=edu/harvard/hul/ois/jhove/module/jpeg/QuantizationTable.classTkO`~^mT@.VPD&6i| e}[_?"Y"O2F=а69<_Lbɇ. yщ61c "䃀;]}xσ &m0e;=1-od^֋S/[ Kҹ<5(J50_8Y,q:` .s"ojjv .q1ВΊZʨ.S +*"#= Cd&O[1+ Ɋa7Om oDD%<tĎ8W=[Xl$Sy%$/VEΤ"'J$cFM=w4w qhtoteD/d{m5I#E?#q{x&n@X{ZckOhS7}_+m2~Pn}‚ѮcWVE{TAn)H$ݠ A-FHf;oPK G|$> Op=/edu/harvard/hul/ois/jhove/module/jpeg/SRS.classSnA=ҵ~JE]_Uj+1DI]҄_ ,]](PƙBb48?3sg=b%\ n榀["nKcWD""+G5 C{ xD0wҡVϨG@ѓ7$6sJ r`8XJ1ASa|ji1Z $r1݊Vo75:uC񹔌u<ܬrt:1Vlu x") fԚ]ӲGk婞q`Z퍉L8ҰɉF̠MZmvuZlZ1ʦ-#}2^G?"H[Si7hњfS2љ`  &d33:2ÍsN=]^MkٵԬAr*ObA2zD;=Pڵ+ӺfYZƧ >YFl>f޸lՑ_y:bMuuunP7[}ԕP/` FOK(|G$ ^ RZz/ ԯ `H|D 1K$4F">2?A#߿B>PK G|$><բa1edu/harvard/hul/ois/jhove/module/jpeg/Spiff.classuKo@gclj'uP 8RWR5$qG%ā#W@H3 m-Uh~yzX9HSdX!,3ĝ2f3(Xq?;m?V1S;kܭ[kZ'lˣX]1yqm^*$xSy]5Mdq&') 7ܳHQPv=aVHaۺ]HbrS8.-jٶ(Ll\{}C`h!UcY: 79RxY=W&(._#3;~lQcz,4ÃW[Ny~al Tj"b FUw#̜Y/[qGgWhYX!i0s hC0Ȉ[}݌C n hw}p'm7"o80,4~$̀gKpYKp d=R/#O%xJ"_K _Gȷ|Ng&?8EK4H:p1ci4$tr /b2J_ _NSZ>xT0['Il;P烮$ɩɺ)!E22YJ^.&OES ;!;ǐj*6%3:3E/PK F|$>cǂ 4edu/harvard/hul/ois/jhove/module/jpeg/SpiffDir.classUVUN2p@ چ`:VPpBIZUq @23L(x_?e 2]>"-9/>g\w2z䆌LҨqH!XyW{HE0!V&#x/>RZH3BPB&lÜw;y;b 1HKUKUtdFjJYuUGSʵbZuz)c K^V]6U2teVuUyFEG ᛆix W]Ф&6e8Ӧl2 Q KR=5m5/Nu,-:Z\˪vA])E t%,2Zacلt xߙRGuḄ of0済W%| >帊>r,0|8kjIꞪQt +%)!Cl*DUZY6JIPM5rTP@ 6p8\!yp.Zp; 5u<opl Sq|o[q*05eE5KJnyU/zTbsB2 >k DQ2u-mRԁÛlh!ĦSLяG|#R:|tpTMKU* sҪT`lUi?|rN.Ubg)Og{Y6mrk+N ;NZ"htbjxժ-J>Y9*ZjQ/X钉 1l,XѪڎĸg뫷Ų^%KFݳ|.MݚNRSB r5ݪvR33v;P]|nnz@äC\!L:_`:0߂?y49ѵKtydh%ÏH"#=x(e$HI&7 0\Gi~׃ם؆z}&:" }azG|kMLI_uGam{h 8iaaIkB&~Di/\$ 6/pKZR8YǩdOWob0&艅wpz$h27AlD\ [96Ύ7y1^|- n~G;Dt "7,u ט7OqPK F|$>=>2edu/harvard/hul/ois/jhove/module/jpeg/Tiling.class[sTǖ-_HNRBJ(NJR mFYkY6-ߤ/3! ᑏ`%;3 Nfήv>aio@:q'qwX"ލ 6EbH C EPA)9݊bpTn?#.>'"T; ǬY0ekj[UZQf!^0JtaUںw:)e{#[[MmM7*c _mjN!|lm ܱ42UM+܉(ӏYwwY6_2V<>N+}÷i>6@~7]PK G|$>*edu/harvard/hul/ois/jhove/module/jpeg2000/PK G|$>ڭ>edu/harvard/hul/ois/jhove/module/jpeg2000/AssociationBox.classTmSU~na EZRpj%XB-@L"$€`_`; S;:_5NM SG̹9=<>BÀqg0CeLI\ӑ2Ѝ27tWf/>NٔcՃq1c`cUs pG>1pj>Ցa螲;ŐgbKkcRI&imm 2+5ӵ}ZqYw͚4 YN%Isݾ,ǖۮ%tO < ؗ ' (mdE(jґl:|Y[~) ; cQ΋4CYONe"hcM8exSNs[Kq|n-XQ U m1eT8lT96PQpEj<{jÆоva腲^0@)of'~j$v>#j5RpB a$FfE 2)2շ(+ êZZR@9¢ HÔ^z#Tr(4H߱\~)7/0;# D9٪-3_(2trBmuZZieLC9+Ji0ܕљZDŽ0 .UprvD^d߀i`#6?'=Cz .$_M m]?Lct@_$_Ghy #;wqa|ݣ Fg##F}pg'c`eC >ĐrT30t 7uR#kЯ]pV* m/<ӈ=ゎñȥpQǥ.B}42#Y \m[M'PK G|$>l77edu/harvard/hul/ois/jhove/module/jpeg2000/BPCCBox.classTKSP.-bx#OQPԖ)E@-y Ugsi.mM:Iڅ7,tAqqO'@MW(5{s9;v (U4 R\WT\]⺊*1bCRF5t UezS kmu׸etZEa,wvcbNMW;BF1'D#w!X1C0aAq7 C ~Px/<9 ʠE3mU0P^JV%.!q+<Ǵ21 Mhp cgG'HAMPzN^5ܒ6( P0aZA\C3 f5ᾂy I,hxqָ=Im a QD·Uߤb=ɕFPS6 !<^ |Ǩ:a[|1j%{pר2&/)h|(b 2^@saP 'c!V|P@ezo DZ-YnR҉s\7ydf,CZPK G|$>O}( ?edu/harvard/hul/ois/jhove/module/jpeg2000/BinaryFilterBox.classV[wUNt鴝r \&R ՆhmHmk1i2MRҙLj E+/^|@e]⳿/gJq9ks;{ІoE@ qr#"zǿoG؁80'E1a.~Ji 8\-xֆ# xNEl" c"cĹ8' nS'\$Js2)@Cp88C͉^ǘ>=ddUeaC2Sz[1^-7QH(YU3x>TSJ6LA= N$)58i58Qm>MSZdx6T>ܡTZ7`=Ul;P?d(a%3UYg:fhN7kAiEK#cj01H  ӦyeHCjz| g*hKB֎H]9 #@PBS^0 <|lnj֘!cC)MP0 5+ഄ3xQK^+|W&u!,dQWt2J*{ G3գI19Lt͠Dy4d:?^5.-&wpa}24J [VȄ{qPϓ5E܆ |(a7 {Wu25_%|O/pI—JFe\aX3^od!Kʰ cm 0$UY;Y:aȰgeXRl/Rr]g ޲5z"T>j;W.aj%p֮5)^Ҷ(oB.9m,؃U1Ն/Ne h54w)Ûö kJ4=gv>u7Hx9Xh;+]2G ÃU\q+0oִ• ^*yX"v6g m\DJ^曆p|>khV޴|ZL3+gUK@ۦjt !^ a/v5̂nGJɋh׺//`ނ-a߽:jݻf9p®+A?͗&QFT< gM5]-sXC|c,6b,6߄iz mcako>K(9|=s<6ӸEq^_vwswB܄CIxi{'qFQEqcIlqB;$̛gĨʼn"QHVDوDNʵh*1#*:qXIN|O^&brCjPK F|$>e9edu/harvard/hul/ois/jhove/module/jpeg2000/BoxHeader.classTnQ]tZZQUa:ⵍT_ȁ9 ?MD~dbg`ESٗokswT&G^E)-X=)VIIJ*XcP*MX^2D+ޛ`,57ܱ׶kCB]$JI]GmnpѨGcݖV žRtbv k<qZ]6^ nviUlvl)^EGɿdl&K2s3^xoV}~\-vu%= ڒdqȪ~SϒaY \0 kxRH+x1hĔ iAa|4|E81uZ|5a*ig8*}~C$%/m9q(Vn$ӤSr}b: ˣ8 \(yz-Iz(QH Iߴ)1/W#ma0}C} W%V!OG}ECwK\C%I#įpo),ܠl 9edu/harvard/hul/ois/jhove/module/jpeg2000/BoxHolder.classWW[U,|ִ6 j ThUp}wBתJU's<#ܗ !ޙߝ;3w@~шd96#D2я5 2?ұ &C, 6fܡc&9&.|:ĈsWwkGJ>&Ldx0G<1 I OhxRGbN:YyC8+^!;HKd*0aI򙘝adbYP__WMzot6# ,Z6!zO`e۠9lvӴR5ɤv.e ifͻ]#!eJ#͔t`JsI@B̶X}y :=!R(OteMG&s5`ZPT&ҖQjZUflK[i*#v] v[q3LdJQJf[twGjdzq3CM*cZĠLM+3נQ39340NDhEQڎ+S]>iN째/|:]d 'm5ӖLU.l+|mD7Hh7p= wǤ9d./fd., ]<TZ\MrOuyA`M[.o,x[KTnmw4x,U&țFfWw AZ/. U3g QኛIwGflhyNb߼\P!'R[?FV5kJ*-"A:':gp9Z8#٬RNR,*N.ݰ](tZٜ57Rudvΐ"=7` 6R :u55-ت8Jũ)~5+Nu]qꎊ*r}]up[q6zO@8:8T#X@peG'jjh4F5|SЮB^ތJtz mIe7(\j n rZXހǔ<ovzf)iX0b_ 8gK3*GTMVĢn ,iVEIr\s7tۢX/%`2SL`m{Nq1Vx=X97sɮAbR3C[׍m*:\<\2_\:º61F+@n_G \so,_0(*7M<a>)N'/jY\9YQ̡^!ſHSE M<{ŧ=!8:kSJiWSL$.Tަnf)Xv3{w'!ڪhM^ .@z\r\p^h _u_PK G|$>ލzt @edu/harvard/hul/ois/jhove/module/jpeg2000/COCMarkerSegment.classUmSU~.$Y^kXZCii@R65LbZ.%YHvH~O~~Ppt.b'ԝɽ99s_⑂vZF$\1\;pL,W\û %PЁ x0 0,>qS-1e|(#ގ9 !8I*H!-ᎄ m p'Z#CDgʶC=grZ_.rOxAkX#cqAET' S*t,"'XA^BAUk(2ZuEmҶjp\ph'lmf>VE eOkQ7ZtyBhw2+enUH*ZٵE#nq#_pYgJwHu71#oH$THxt\Aӝ$Ul*}Ѯ#yJn ;m"Cgj{nSjY̹|zlYeHATN2ʳJIL&z.BOi_<ؤmL&'3  owR3 /$ 4yRi+hҍ3pG"8G^^Lh!8 @edu/harvard/hul/ois/jhove/module/jpeg2000/CODMarkerSegment.classUSU.fsCJZZj5(lS$-Ҫt^d7no՗"《>;ܐ ?:Lvsw{sٳo Jx[t xG#w5(Wp]ōCRq ܌&US*ŲU1C##IO˕y (XT1Ce[$Cgb>Ch1RuF=myd2\fM/zVKΦ]*\%]uad6v-vQOپ( WF*9(1E#.CB*Zڨ 2}Z3Na{k[1d {YQ%WbS- 8]v KS3 wU,A|Zx6_tE ~ҳ8ֱ!S)32k@pؠ#pPeH]ŊcB_Q}&3;o͉be~z3̎)kC V =!ۡ$2-Ơ Bny5?׀&Wb1Osgaє=iã{(y-OKӉ#E`ӉaJr%ǥ -Eɕjsr{S_|*Kj!?w{.ː8&dCA2t7Aoq%=03OHi2mPyC'=ZruMeS y9mi\6OCTFx'|u4BLo:dғѳkd쇆Cܑn5#:B'SJPF$hh,}-áGjh8si|h3_s#'.5"ܧm! <ƙ,5&v 6`_ jm6 -Pi[|Fڀ/@McKo(ola` vnBSМet>7)b5߸S0`o6:-?PK G|$>@edu/harvard/hul/ois/jhove/module/jpeg2000/CRGMarkerSegment.classUsD."GU&SS\ JCHkR8tʒGC3323CG x`ž!tvɏАW5Q6"ø^R8M1LU9Lkx 3*ގavp} as1܈ޒwUb-Hz|!,6}A@t~S君 YkP>{dfh{n"E\q9XyeV˨sQo9gFF=@nx|dK Sq/\g+ea2d7U,(`IG*>QBaLlp!Qk7Ly@Lº X*>ѱ Y/^SϷܐ;@:> I3 6{j hz.Q*MpHkxÄŐ9AóZ066=55ePNn N~ador|T U$S0d{5pYTo5f[~vX㧠!1i㔖ҺvVT.d$G]j֗_r% B;^s޷ePKU)Y?exRn'vsEqmcc˥rT!稠N t5% }`1I!(^%R@ 4N6""No](;PۈEd fR_#=3]O=hdV+o+ssD ߕ1QJd1J#Е%R(Itm<' Ix>3LD{3*Rgb2#CPK G|$>1 aLDedu/harvard/hul/ois/jhove/module/jpeg2000/CaptureResolutionBox.classUrFv,[(H06@Z1hB&4M/:lYB_o<ftؓCb&o}=c8@'ROJ,iidTLaZI?gqN%K}Vy$ E q)\a]5m3X`7&MGpp7j5%斅䞡7Zp6t% WslV;[\CA7HIg`ݻEzVMؾ_" +IL'B\>uhpp 4q$i/ $ڈF^퓲,_i#>ߵ^ZD7"ouoP?d[?z~|hl\jPtTɾm]BocpVMxCm TPG/Ëw20㴈?bb;ę494U PK G|$>.c} =edu/harvard/hul/ois/jhove/module/jpeg2000/ChannelDefBox.classVSg}IXm)jATlE E jVd?d7]0؛my?ǾCtLvING{MtIdrٯ7y?NW $H8-V$>ǻHJ d05\dLp|=9 L )q3♖ 3MnI-kUttbIYUO+j,kZ'&+bJ!nhV|)oxPW ozy6ԲW 8nM"؇Bai8\A_u48lTukx}gG3ncbQc[ݵ@PDHzc'19ɘ.<㊄satX"GO$Az2QЉrPK G|$>*NKe:edu/harvard/hul/ois/jhove/module/jpeg2000/Codestream.classWy|֖-Y^ p -NRZ Hb]FkI&}I4- n,2-;M>_tfi% _Ǽyo޼VsYߋ=ЛE=rxO7c7;f&Og &d,&fV~&܊ۚ|x!_~ O^x|`*F^^^x^ nFYMǷxVƱɝL.&d.&'{|ɇbr 3ۍY/Cw<|ƍ{ܘws9~LSL0ɉ158BV#S*q2!5<SS4 5$oPȆ\ڜ`rX|Ai W]d9jO泅R([vrixAɨVjy JVYHE78ΨV?F9ޤLe+J7N8x`jOǵܿyJ%HtLXda Wy;A;&'x`5ctWX&?-81gq H|94]Í2>Oen/}LL>L>d?Fd,༄[Bs"|/c6FHgak .Ȉd%IݪRuG+%W&#~ߐM|\Ʒq^w] W?TF N@!D7U2y4jΤ ^>|kR SW^?}2~O)~&_W2~ Mo-s'ܟg_e3$tTL&5 (t0ϥ93&'TtNµKOyeQ\TJXQ|TuxAWq) qy멥%t^𤚤uSdմOnە7^ƆGcKc6{nӥ5uqC񄄥9?^k֥ejNrE GGvqPdppd8184"˰DTjzj%=#q7g %%n^Ro8WqFu#@ZFVgL~YD˪v16V^H3Ǖl[Wo)Ywi顤T*_KYszNr7ӎ#m?jZ>ONY è wRSWN%?|F|(JlQE${Np\ _YJE%HdY&e*Vi[@g.t|c3X9tm_e@=a: ,` pWmwZV Ӻ-ɇW`m4@)L4 7fn+6N}cm$vF}N4`-uf=˹14ve+Igh<%roI-o.ɳrI-o)ݥlpT4>p];:@yTiל'U^V*b9ܷ8.]PK G|$>rb^ Cedu/harvard/hul/ois/jhove/module/jpeg2000/CodestreamHeaderBox.classVWGٰaEKj@ *ZAP^ T } f7nla/~pN=~iUzgkAɝٝߝZZtT42Dž9!_椆Nt sJnG8"!zË'LxHK!$1 uxYC=j8WT 옊WCxMohya *R** *Lpv9i.7r m}<]e wpӱl9:qox WV ]o]ဎCzZ"`ص:R(]!(A*>> ^WU|3|N Z0 {VwӖ$cpf"d^#%H Fy^"ٲ_kT.)c >Jo.Hl"9 vH{6\>tKvegy:v]_*)aQ:g}%)PhuHI}޲~HNcBHV*+Ɠ&h}^&*کyJO,f *)72^ me &%|^XUل*ep@fXesa)?fmX*Q#yIH21pa@WBU{"EE .ڧQ'gQ{.S%"^_hB @edu/harvard/hul/ois/jhove/module/jpeg2000/CodestreamRegBox.classUSUn.۵P`i V%- B0L(VK, B}p|/}Pǎ`=wGAn|s? >Uq: ^JO]Ɛ2^0Mo- Vèx}Km)xG*1`RS  #\f"92r -˱1|2fy1x}etubxgꕺUuW]ns}#CCC1&ҩ%krIH2B`Eca* Fu|3tyP*IIچS g9崆~\АG!~nYc{3GiX=)D" 6f\z:aO{Y)4| )fa4<ć2>1"Ob0ė*54$Jv!zu{$D3~](kFiVW}08 kX}4بTlӞe~\ù?,qjs J<ԾHr!vik_@Śq'F:"IҜo姞rtV55ũnsn$Fc8k;އYKM>i?f@&ZKxȹB>0_\fz%_l<'T]HSv{imY)rƞO iM=k;`߆Wq '} 2=/|mD#OF!%mA~e0nBFCun#lKXюF#7c='M[)!5nIUG>""BD!9Dm4¼HH;xy}|X(3'9kyѧiM "$Wd\eL,I2G u%'&,PK G|$>ET=edu/harvard/hul/ois/jhove/module/jpeg2000/ColorGroupBox.classT[OA]X[B⽀)R/-0&Bnlv/|A&FL|"*n97Ia3`;Z8"UbHYSƈjqB(,-V)(qVϥ`|7.X5^20-"w</ %6y:H/v5(tpꡨs3!&0t,JW0X.0١ 鹄Wyx/ *CRE'(](}ͅp,ND2Q VE2'8ö:@Ug.Z;m0PEe\"t#fm\V ژ@t{c5\q7Uo64n1?v0ƬdTՒSVLH6A|uɵGN?Hvɷuq$*}eD3V,XND2s<edu/harvard/hul/ois/jhove/module/jpeg2000/ColorSpecBox.classW{G%{W&v;QiS9q qhkN" M0ki,-UbHYGBshL+5Br_hy3+ۑ7~=y@+GG}8A R\ʏ!Z *>pDʏe0ۨXH# KEև`CnUr'BtB|>5byyXn* ߨM~lHߛgTܥnoަ*ޡ*ޥVgU>؇s~r!?b‡#Gc*>>`os#C4=Cfʴ<;`y[7OC)>ۉP*YF.4NPJ<4֖P5~J'tA/ `11G}8ͥ+Plqu )dMr'#3!亚d(؆lЅi>Ͱrw[oܖ\0l-m$3b> %UϼcCOt9Gx:p¶SL0XSl,GOQBcUU8R_,խl$ q55T"WjCQS.4/f (`^@(,peNIG3Sk^+`7;/Y\v[q>gzr^9`M%:uVɝ~6k}m簗fI.zֻM~GY)ɏ*)$u!jD.YSŗYH6O((7MsX!nH͓XSD{Yt¯wVn´R ދ}BюjLиgl?^1oY/RaDVZHjig/K PK G|$>HX DDedu/harvard/hul/ois/jhove/module/jpeg2000/CommentMarkerSegment.classURA=I& D@IP#*.1,dC/ZXblQj&(Z&nt==O1a'k؁#-$8! x NhANjWS5ҜU^8·qAC4 ⢆K1h;7a`%ELh"v5I5gwS (y9FuBDu\Uאฮ&8:n"pPXc֔ Jp17.tKBzŨ;?/㖎Hsdtd1(踋49s4S02ZDN}L1tקҕI,PґIG[pW;ŒPp8xi\c C]R\IZ&IS>2# jpnyOIɬ] -]#Q9pAxkMGcB2Hu.3\z "O;I5n yB/z"^y0Vs*`C~" ٤+e :]rD GC ?Rn4 ӬH̉7W(M'n^SqHO,OKQJ8O\C U#ڎ?uZKڟUf#kez#EoN L5qiF#1س 7`ZLL=KhJC3%ၠFl~}6T Xϵߢ-Hp/jz2Bܺ\{2-a{v^H" qg3|~(9|5QYPK G|$>@}c>edu/harvard/hul/ois/jhove/module/jpeg2000/CompOptionsBox.classT[SP-⩀wQBi-C„ۜLrE/8uG_Q{Ralv7w~A ` \4yIl vuMkqD&bHi1qq X ]3Ydq޲-WZk\,pɭlQ8 j[vXF͒nhmV喰iԄJ&N[r{YdG_0s F l0Ē%e߬3{F+I4$ёsU68hqqGcF{`!GcKZ<2G'jѰ飧f=;v <d`U66^VDPB?DFi "T0L{F`FTZ]^EU |NVÛ+AYLjk UPg?1 URtHdYs/t+p-\zPeVO4z:zJUR0Ok좔._]s?EH5@=OQi SA4}DOxld'0C7Oq+rnD̾&)D|7>C p6h|7PK G|$>! ?edu/harvard/hul/ois/jhove/module/jpeg2000/ComponentMapBox.classVSUv)*hqrJKKLh=dwY(KTh}KqcGG_M8%(3v~zc (J8'LbX^d\D~1KBzYH b.h ȸbAU6DBs*8^j2q ׅ"H!a?12%Dd|I[Ԍ&4C7sTW2Y?euQW4[WɫK Ws=]]]ꐹ:jfun_g:gliPt ͚MM o j[N4fOs'ɳ q۴&y;i/Ռt쌑Wp'RnvP\,нre{Ģ E݊[qYS )0`*pLN[AC1in Ų"ᶂUQ&, wZ;/{fewHPGX8 od>q_b e֒j Z݊vTM. 9ڑZQbhdDlܕԡsfSnQL߶M#MI[u\^]OPSHD'B׌f hH;ncD乢 CٌN[DфeV8kȽN'FI&n3e'R(f3iE&[" c '%"s鑫# H'l(!o$&J?yzUdO9=^ٺ"za2E\M(8O5vD٧ai^w0^lzhXS é vF&Q&kBVOѫ sw~o1\ؕ`k gќߪj^`?5–]Bв;<=F_: <`֓kR3`?* ,J_N2=;~ľy}`G>#Zt&?pX$zz};𵟎LJuRyL:aY@BI!4BSo 9t9`s<$Xr\|:8op=|r=o)wqtoop}<N/u[\im/1 %a/tK EJkKӓzھwQ?PK G|$>Ĩ) Aedu/harvard/hul/ois/jhove/module/jpeg2000/ComposLayerHdrBox.classVWW Vո(а4P-tCLI& jE[kwotR zNko)oIs}n_~P *ntۈxJ> l8B $<.aP C¢O ^P kVx KX 1Xx\g\2ڈ$|-c VMLd|ί𣌟DRlcK/㒄+2fн*cz QO' 7I!cm Q|:LJ [b&>YD GT1SGlIMnV:׍QHX^ TF9؀x.Þ<wyF#Eor5حs{hĽDgEDm:ʐl2n%v._t;WBPwPݣRY$"M˺N\NʥJ2Re%1%5;f N-mv%ݺ EN.⭑owO ٤WPC {tN,b+0&6,oB뀞 Ą44ߟ-A\"D0џ5@@ 7HV_EMU'a2M5WgQX}9HBQsTo6ڊI'&@qWLLX@-*J`#'PJlu6behMQ?X >edu/harvard/hul/ois/jhove/module/jpeg2000/CompositionBox.classVWTU\x3C\J%@,[A%@ [\{{ol,[},IfR/uN@xͰx"9{_P~h ͠ :!>f0RpTLO^G@4 wУN@^w4 rnn5#jJn:"Pf׬h/3РMe?!cUZsьGU]vXSgF%ÒZ(;Ь%:t~W&4l/YFDe& 6}tn{MHw{O0\vXSxEū85g4dp+x*M%P 5Uسx:s0њ xlwz2fJk- C.YYL೶*xW{xU|U|OU||dPZ{il5opZ`L6j,KJF jͿ12W_\3biTTc/;;GGT܆T3\:*YC񌆰ȘT*~`狮uVqLH!6~(p^rEdbZvmO9:YU ͒T-3EKSE}I~9nWS$vNN]קqJM^c gؽp1+ep^_nK&1S`<7m0/sk {֔=th"̘txBNMur'^!77֠d;h7{#BZ8]1ɮ F7-"O]='/ԝtCIYIcrV3s8!;[[,`ud-VAϥGK48{ Yv]]@EVE¦k,l);>edu/harvard/hul/ois/jhove/module/jpeg2000/ContCodestream.classWICi )TP0%-vhyhҴi:7ͽ+feG`/nsO~>i>tܼR$Ӝ{{=~ɇ{f[CxėY<+*U~X|7X|bO÷my 񂆣8E Xeg1?`C^U1Bϡ8^S7f ~Ӱ0 RyL[9Әh6S1#7mᱩT8̇2fx2JTu#)3FEg>>R )g$^^{ܘ6Lxatv/OXɔk䬼@]qɼEv+nűGrI^Z[274e9,EH ,dyH[Ԕ餍9jT#:~R{TX}}9T將H۽Շٷl^TegꨜX:jReRz`qot}TtҺO`o]]r(%ZGlto$(_4x$4͗7^mN8'hu{::~uu\ot{|xZ16Rx󤑛0srm7^9Tu +A+5?/*o@`Su{_:{9Fi~ SF:7G)߭7s(}Vm)+t[Qd4V)%Q}QS'?O&f1:K\9/vy"d:Q9n.yQhԠJh^t4ղ8}ɋ[/c]NOV>XlWڥ\ Ϯ[AG/3[8D ӊ+](M"MW42=itd霣7NPO\q O>NKq.^}u hj;ѷ}+?BbȖ]jK~tɖ jЁ rɾoß"i$ᝄlx6 !&c{ l>#oƒ6 !&Y>H!~ "la£6F#$'gE8t"ԲGuк(sp {%r.{RCR P#D M yPlw7*gY }vrpqO,V򡆺Ө/Y Ŏí}3X{C4$VQ-]{} TTf醦`aAedu/harvard/hul/ois/jhove/module/jpeg2000/ContCodestreamBox.classUmSW~ Y^D@ԗ.bj 0Q[m\d1ٛ0_303vz./N f&syϹ?>C/MȰsH݈t7F?#ou|SE+2/踈K\\ч\Sݘp] Ą:mJek2i,ז͛ժi!nu[<۬t|s.Wٔv!喨g23'Wgd^vC|RڂAe C,5rXEuz~`ЧV85[AY4<ٚHj$ʰa5x[r KqL▆)i 3 ;=y+RV|upe`jM2$=aƍBxyTܟ5r11(qq.iWÕwpRjPךwQAaP)9lƖ8Bޭ%04sOᗨ!`GZ%pX,G+lܧ w|nBPROd8KRDuB%ނmɟ/Mva]+>5Cs[-Rɓ<+2xeZPi&>_Ќ\ 3$1+ZPJeؔ"6ܩjv([xLJqg!v}۷Vy*6' CԫIqhңck`oC8Kh>Kwp 'b_$#دE5$;c#`ڝ耯=E7+8}JCk55tpr=xu(GH3 _Ma$N'CDzU2Uk7aEPK G|$>JgJ ;edu/harvard/hul/ois/jhove/module/jpeg2000/CrossRefBox.classV[SF66QĤ6$P0" M$-(vͥB/b,L _C <3tL'ysNӳM6j;{Yo*nF^Wp] oܿ%mITFj 䎂qR: bJimFE 9+=xOe,碴 >dP ./%sUuprůR ofKIqpJ# 0* w׸k+KwLO_]qք^r%ղ( cMc9`PșAPgeS|/[rAE7SC(19Qhฐ9IҘVauӼDn: v1I #p$/p5IXIETv,QӾ~xs&!U kX$C@AC +LjKC l8 w qx Axe|еqu).^c9N-\aEl GxqyiNK f8O Q<|+N5t#p cvw@kj\q?:BZ6ױTu?Rj9F7|Ap!=&Vr5 /{ >N|XNcC' i~e (+ e@ИY^y"9Wvs5!RPi9xAB#L 2]bKeM8nIKr[ʧ!ր]MK{A!Qnb1#$CQ\r@}1o>A]D Wsz y:-6(*G;ݢQ=֦5]D{!do/@OD /_p BX[7Z[5m9YQ%FUXH.>ֆ eIO8A#}&:IumSR;8SY\h TM*.ˋ}?A^F mxU n 1H^'#Jo&2s7Z}^1PK G|$>6-?edu/harvard/hul/ois/jhove/module/jpeg2000/DDResolutionBox.classUkSU~&Y@.UŪ%B &)-BCt A %8-s>y/?<0FøehW< 2qD1`Rŧ1||!!e70GqN&RqKq|)3Cy⎊9y.Hyi[ ,1Dob(j|릣m8l"9!*Cx1 nP*E( ;M,3V_4xt=U仦]hX] EwgQxՔ&/ ee,Хg]./mcrfp]R.\;U 񀡯uEUPw^~ĺHװ C"'lnRi8}Mgq'4T@51C*Ԇ0 &oZ~=)mI:hH.!mpӜhL+˺,, Րۙ]_xE* Ym4U:8U_݆R9'_dHI2G3Bg =D!k(/7KcPc{"F89@}] Dx'Zڠn j:`.=3~ppl݌ɛHOSd4 p2Rܻ$15W[ mt5ѣlғIH_L_PK G|$>j\?edu/harvard/hul/ois/jhove/module/jpeg2000/DataEntryURLBox.classUKSU.3LM@^6A!Q&%0D@eht=\ Zeeō 7<@!S5so7*U\EG txoɫ x[E7nPУ"^in+ (xWEJ]i( ޓ|T0*j1,(UQ1x(P05,û0^\7l}[{/;h">,2y};KyS W_^WbgЗs"ѡ'{Ny!xCEVx\w(_lc&V6^!f4bNGX'pry6NYHYp\BɳUnE԰s֣(է !!,*jXa|y0>ÆI?ĺG),rLb#CWxG;ւ?p5M6GP,YXr ~²H{q94󄐮<4DF ]~įQF ZrrFnP@g:-I:%N$9#1[Ƞ{ާhXDֆ8j W$09S^*Ъ컐ш"JO6v&:e&OQuq`Jel=\*ʇO-ԴbToۺ-U G]]\fDM{fxmLmڙK;)WD&CBuhB^D6}X#CU>Lj()hfhTЂVRTvq`Ly'=PK G|$>}!:edu/harvard/hul/ois/jhove/module/jpeg2000/DefaultBox.classPN07iCCy5>U@H<Y.iQp>Blw؟_zuQz6\tP;֡NOZ PhJ=dύT h}%3>LĒO"} m'VBRjHE6ak'Op=QdAZhˏ|ݟ%<먴;>grWDu ׂ_#Et4#(r7XK7h]PK G|$>RQPDedu/harvard/hul/ois/jhove/module/jpeg2000/DefaultMarkerSegment.classKO@ B1ހ"M ]<ڦ%M<PmQ&6ٙ2 ]i,erdV 䰪#c }与l$Ksٜ@υP%|I`_/:MȘ-tl(bY0cMz7tӑjJyʂ1|0$8;Ke~f:>{U:OѧqX'l!Φ$\?8dd;~Fríҷh뇞&^F tͪ(Uy ,(YSQB| Bf\@PK G|$>^?edu/harvard/hul/ois/jhove/module/jpeg2000/DesiredReproBox.classSNQ]ǖM/׶PXDE@h!-1r)ә̔_/ƒ&M>'>K:޳{}^sW#xG+.ю2q4a@\\.nHsSCRCJVCh+d(&j|kcg-rslUq4 pU5a]a H65m ?z}⚂A7i!Lfh+"_N-2ğZh0^ +oN(Tr::Щ#aqc 'k;%}91 .bijtt'MbgZ/|)+rP<47D0| rM!N%*Y~ qܼ 3d_'+qFHNI䉑&Ъ<(($kҹZjyV1[!0^]uR!v>&ES*!@Ʃ'D}7M(_Ashe)roh-d~ w3h{;E/7~QV"N:G6.z1b6/K&3y3TPK G|$> 7S?edu/harvard/hul/ois/jhove/module/jpeg2000/DigSignatureBox.classWwWhJFu$TN8vHxr:D3b4JBYSHNCKCHY i]Reߗ_81 }^yCxנGCRq !G NM2ތa-Sb9%iFĐ0ꃎ1vڏ,%L! [9, yl8،21!aR8W8x> jx2v=8'~>ޏPJ#>*>cK Bq.p|aAC 1hjX*G֥ Q:Zh!5|tll5nijV\Ɠ I[MVsꩬ'9-mAHi9[7<úf'Hezqi,EUL4i[i#+=3լf"ΡxI ^).)4.s\QgXl=Y:٥m'g|Sᰂ _T0/)2°rn:,˴)jb|8mgm5ې3j,i 33 g| Er*<9ʖur^3gꆭY64p<]@7V^d[Iޑfs|K"CRL##K]G|W%?8QcQ7ͬ z+Ph۝ռ*X=1h,1i:: M.ֶґ\ȆE?>~_CްPjNGc({ fk|-q4ݶocRԵaUc\ST =4T- >ik~:yc,cMbl?Q@tU[-P'HBŇK {nTgۙR@ћ4!L);֐sR#k<ۯ=U3tByg/`lb2M'+)Q+!NecG*®h[csr cĤZŪ$v)>:orrC(B"Yb.i9DVewGN ɝ7uJQRuE\Ir".N'S3D]+l=jݳF>\i9h1-ektR}nh6Un qVBp.wWo dASVN~EA /0WP|]TBCac5:2GxooWGڲ` FiN$"E5$xnV-Ԣy ;kirQ7txՖ<~bU#%} +_ev>#CDB[ȥUAeM?wq(->伞t#1iYg8J(3{g*}<,$EH=i& U[C`` nūfP)mYX-_;^@a)'G ze{{|mEܾ3>MAO|a,"h\ĝܪLӪLd v*Rf*4~e&Tv*݌_OLh(GIc˽dW`N_Tl/$RUHdET]ŝw~6ro ~wHA2Fs߅rփRʴ\6u0`׮v~АY. ;edu/harvard/hul/ois/jhove/module/jpeg2000/FileTypeBox.classV wUd&WA#"AShMuk HjR@4S&3q2}]\P1U{?9xtR'o{޽o߿PUǦ Y [T܅2R Zm*h*aP%bة`푱[Eh'#^}s+GZ ȩXPa`PLSAl AQr~1 x@ƃ [ pogXoj NЬoJbqaջ;3t֦gsPs2!3a}PO̐' z.Ѻ.yk0{*\-}]+tk.!ÔGͥ^p *x%#;:cX3Ԭ\bXoCUNwt3ͱ ZR[őxO8f Hq$gqX`=<^ 9 1JE2^lǫx5Nҝ"3,f[9&[x[;Gp]GB\fDZv:5-GiWoX47LfQtc.1:!|=>!G 4fq6~0,PlVw8>g2>8/8W_ ۪mjIbib]^0p|GUqBy'Z[|'x{q-0aYD@/r!tL*${[&KuN6P0K7aޔZ!З)N!:ۛ4WKY!ZK*{C jŞ=(߉zsd>=q|Evi׻*Lf/.7O$> 0݆UEݥ"lEe ȱ;LJXCVBjIVۥ;Tq7O70 msQS6ê9sUM&1r^+/ EH$fztb;y=#DMyuڢ[QE/"GǤU/M~g늀V(57vRBviA>TKgcZR]GE{[|T[Rŵ,XI?C 4 cF ?PINmq5/.4'%k5Bs%ɪk#ҪԚP]=5°DIF7'XAs-ӾhgQEO" _8qҫIPK G|$>\Cedu/harvard/hul/ois/jhove/module/jpeg2000/FragmentInputStream.classSOQ޴0].RLwZdQ1&efڠw^.$1Ɠ( -A?~³1Gt xCM $ܖpG] 1q_* eeEαf73Ϛ3]4Cǡύ\*H&mOA>\H82~"KBdњcPg/’jɿZL/Ӷ xT.o85s3099ٍG_x'Rݢc$7 c5C鼖0R HT?lm8q Sxю ⸈NKЁG]*s$0*8)ØHu*VJ_/fiгT1#Xbz\,:n:څAhF/!sj"ѳBuݰŖVYm\,c CQ-Ħ<Ҍl&&hMoPS!\Jw)mCGpeK]=.Q^%)LzmL+Ch>;nV{{w瑷"_H{$hB9@ CPBeZ軯 )/!VzZGId!xO |AHw>Q]#.iB=OoAYS6el ηFG{EY5I6/yI>^6ʖPK G|$>)=3I?edu/harvard/hul/ois/jhove/module/jpeg2000/FragmentListBox.classUSU]ɲ|t) PJP@ i`.ٛdf7agݗ/}hEs7`:~;/EIƛx;n\aDJ⚸#c2c\&λ}CMLӤ%SQ'ޗ0-#-سb02a H cQ|(!-aq3" -m}Gʾii24mӟbXMVYy'(k]C+-1=mpek%f2;1x!|18r C(9Aqe|=hI/շ,sY^M$ahsD r+SPy-㻦PЃ "#W]Ӛs]]<^ U]E}O_u2xq2.PUp5 +XdžO@L¦cKA©0[5@D-j;e_PCi߂ĶGf?=sj:r9rw}ں$X 8xZ WWx9^@wu @YS˵F۬3\}y.\ Ok0(G-nsrtyI{ժyE+E(RK =$ψ@*xb[!I^i%xQ@ˬiHmj3JSvD\/V1dٞ)8.DTCh$ָe;nF0)5 tڱg[*6&eS(M'xy֟#5g3?絺+羚 P';tFk/ _O $L;uANg_G4i bCDj@rRXAӭ*9c\Ҕ(?}5;-'rV >~B{h;vv.cG;qq^ɹ.r;_nƺbJW,Yxk_ؓ. zhdϱ?}/uChcPGE @edu/harvard/hul/ois/jhove/module/jpeg2000/FragmentTableBox.classV[WUI8drm HJ[Z 6P[*04 R^G_o}AҰ/ß}& J8{ٳ>۷3Ot✟ys +ƈ$䗋 .acLr.+P11/W$H/*Ĕ$3 0+/| Jٗ㚂xEb ^P=bsa.4aisҗb1N)1<)9mEt;RedkMhi+K m5#ڨ~JŅ=s;f/ P"CݼnM陫rJAp:'K zLd27™Ĭme4YnNfRwlL³*t,!B _>P*L ә48$VTX帥"4SabP鈙9Qi!a m]2]Ȫp`aMś nc-o㎊wp|Y#39]}C-۶eOQ=IZk\SF<(B :Tܕ^u#U|OU|U|eRn +*׻9FJicɡ- 8u >Qx2@U/Ā#K7edu/harvard/hul/ois/jhove/module/jpeg2000/GTSOBox.classTR@JӆBፋ mS@ʥShtt&4K&$eOG)32Pg"f2˞|idpOF?ix !% 0Ix,#'20*, MDFB2!fbT 1ajjXj^3uX*qY5j0+{%p t$L) e8f%vytns I*{,jhDM䓀 WF*swYs"x ׯjP2ٍ$Ç/)g+kffgS*/^J[GiR/f0}Lź$X\>[ 5]caÃ׮3 `QIMLpNȂG RL9Ap&4#)j'~҈%tSM-ZI/ E'z& q A..ףmtD !}HrM)un6edu/harvard/hul/ois/jhove/module/jpeg2000/IPRBox.classTRA=M}VHj~T`7ݻi >edu/harvard/hul/ois/jhove/module/jpeg2000/ImageHeaderBox.classWwEMv6-iS%4hJP EZaA-dnmi"' zxRx<z8;Wxryߝ߽s7~@=~Pۂa; MS.4(nbJs-rUsh+ԧJA\TB- )W؏yA{C*^Kr!prVч$GJ*/ia@ G8L⭆exm7xn̎dRnm"5НaI̸m{X3vjHś=N vJ0pG)Za(9Pv=W3GgcqY jHRd=ö\aiZx aw9vCϐ)¦n 1t'CIv!!0P3?ql|NJ =G +bHf$i[4ac+jx 5I75،HF&mI/cB[8Ͱmsp=:Lg6;{ޗPGD'Tg9Vj>Mff%,q0 W92j~H2MqzR쳎X1EZ;&6nIG% Ⲇ+)Յ <;}h=0\ߡ]xzJtC- :K?$+o v{GLoC=dݍ J#-VM{J73mκwRYvP,ZtH+̮.hZʯr6zZ{,> \0 MXioȑIi rA3*SN  }[ЖKKC洊%ճ.mC^bRy \#mTEwIJ2gT:3H|ʼn۹jJH虬).t#”[U &ݕ ?7](gʈZI^S |fL֡觊Hyζ L~C.k=MV/+7,ݤ{5/C3G@%/F倬ZG='Q~up7I: *EuTz uZ$l¶җcf5w,Q) -6bt -'qPK G|$>=:` Aedu/harvard/hul/ois/jhove/module/jpeg2000/InstructionSetBox.classUmSU~. f@Z ֦o@i P .%Yv͆BRj}/TcǁQfG$!uxdy=@n)hE؃K8I!NBt(DgIJ[YO="2z *C1  ACǰ cDVbc2^7y#M&h崇y:1!#.#!˘n$\d8}a0fn5#aNw<=y8PJf4+J!SφR M\2<4g{t[ .3$k :apCاekifPgZ(LH{Ņڔj_py35鳦5ͩ1g|#oXG2\X9*'!oD361KKP:chwG?nhi /6vUAQ&B$Ѫ.RK`?;qp@(mxZv!YN{!ot_]N4O6 J+V#=(F, с hm/z EԈm"j]wQ7\¶c] +lP} KxW4a#wRu?;ס޹eg֣p1mxvsǮؽQ?q)rKmRU, R~\+-۲fc2=K&cPK G|$>- 6edu/harvard/hul/ois/jhove/module/jpeg2000/JP2Box.classX x>'Yr7ax#b"/ lMxD8ٝl6,'jVR>jj}ڗ}ڷm;24ߗsss<8T- ?T^bz?S3~* %Kǯ~VL4 ~/ L׃GR` oY*0ſ T`o sY(P[VwWHD ,f@`KX r VX*cXâ*p5,Dd:=ѓ ҅L8 -55j;ѫ&⭉xZsRČ.壧i#Yktq+Lze\531FڦRI˗' #Oe|9QM 91jfl Nv–FgP{z.CE2(2(X*q= OPby毳,jZB##\")뛩tԤ]C4v(Kyo˴B*KU.|O^zH9.we*^WPNN=:ٱԣyِ̔O/cVJ8O&aWx ^+:F*~Rӵ)!qMx-7@'Q 7݆ʊKJ M;dF9 D5/rVn%2N2Xt~nj*dj8ҍ|-:rN3*:Rnżw,/0'U+;ڸS) by`tqa+GQx#uMcVڴ:,c߅N=E+B?qϵV 4[Fs 5 az64_㕆U 7GhLal(;` HRo%3Sp #>M?3ga*|{lY`Ca :-::0SiPJʟC2wY!S6E Aa9Ò@ |>riUEe几8oA8rǚJYAPa!P]a`$q/##Sbǜ­d~3Mڄ~AؾVmR㾂7:ES }U%:S=tDgگCOhл:GzvΕ_AFgq/(kEFE+ hO̥ <edu/harvard/hul/ois/jhove/module/jpeg2000/JP2HeaderBox.classVWW&0!PָA@l(h([Ūm\d& }v_|=5S/}C) DIݹ~_~_h-G7=>POcb7$v X2"'QWBI|x O?j0<+5>D`B]irby[Pڡ Mi3ZHB͌YC(w}< 5{FcxY[3j~-9d#]=?2IWL:r*';̍!Jh &ؘаkdJ٭"1bg<x/1݅#m6I WO<;8Fs;@s'`Zn@3 4x*xMxCś8-Sww|#1>Q؝}Z /%Z8OTEÖ#E1T _""NW*.kNP|s2=qk6`M`sN1p"XQ]$*%pLeXpG%pO!%@1IKHbkɍ|Xd;Ǵ e ~J㒫ל@ޙy-ƭXP@/tRoۯvQ_ ^|&zjל˝ʮGGF *c9T c;CH;=9y2lNX [W1F?b1 ,Gz˰.xg/n@p7u+ذ%'PST?FϥaoJȹPF!A:s\;P5W ɔKZԔ@.ʜi=) ;xW`xH4& it@LaGʥ*s|fҬU<,$)uWcd.I9-2ۥap*TНvJYbF\C!fIqn=Tx̚4z [ .(mr%K5yI4 &e+jhv,27gQA8 '~7Qx0MW뼗F2iTtH͹y9wxdk{l`'` j3XM1?4Ԝ$ wmLa7-ypcF\>YZ/ÇJFh'V/A:h} ERIҩjAPK G|$>TP{P :edu/harvard/hul/ois/jhove/module/jpeg2000/JP2Strings.classuUWF"('MҨGҐHH$msTM H2 }~QMg$AQxof79v1NSY43"<|7L@"5PGh (%e"x>%!eU6 z%^Ax^GxMFxwCx>D͏>A>GK5A;~`G?e,AwSF V \[+"'DĐnYČl3jVQlۗ10@ T]j"TT}z+G:ܯ܂WaHьS8fjl8C ؕڱ3sL*zLC55c: nW`4"ɚY/W޾)B,ޢr7c&y^5/HSTp\"yܬ:^ҭB`" /B*-nh&ELafzNTi.ГloLz"9DrDF'1P*c3LjY!5Agde.rtl<ddh26>a{R#\HTBIHC#a9{DvC.եB3Pk73@6[N|GQQwlQ \:@v[ӜDȐyƙ퍱*JMG럏)݈R0ũq.դKP951<蝪L"j4] צ皼}T{n&wy@ eӝ CQfFbUb< ϑfr){&4tC]0 <Gha$"7uEES̩7ĥ:8G %߆jr5 KɑXQHЗZ$\3pJOv?YIH'Ey'Wڼ)WmR8楖p݆H=ĪTy{o=%ep:eV!򍖓T_jx+2j-G|Yϖǒ7(]*Uh0J A~Go-ֳ>TS=R˩>j`Ϧsz#Iᓴ M#t o֚[:Ү⟰0:*VY12+kd+Ws =L`f& y26zIfn5r$7g$-$ c+-6[$;Hn7va iAuJe!Le:"l轌\q}C;Ⱦab=3icS`#<|GxGyߣ:(Y%Dx,x# BANbwe("KSɁPK G|$>j-8edu/harvard/hul/ois/jhove/module/jpeg2000/LabelBox.classTmOA~-@AEDl xERjy T ,w1|P`es<>3s?~~ yZp ?}dnKLJ;H/(Mȇ^)^hcX/qχ yp_ u:_:?Y\ӹՖl+ody{a1P Mm8Nry2hRd*Z[hVșB+.BId#pXӦV473APdhXy,/NqfZi\ PK F|$>ĎY5:edu/harvard/hul/ois/jhove/module/jpeg2000/MainOrTile.classT[S`=_[mCU.ULE^ N8  MMiڦfdeQfQnHiGq$߷gi?ËH6slJ,|O}xG|Z% %<QU,НYΦVn_s՚_7?m vj[UCo(Et(+YWJE{Pjvը9dBͻeQm(9WkTx%mOSYVT7W򻆣V)rPsɴL|i6*e.Ríe3{!+ZuC)_cI)ٗ!`LkL+t=sC6UxWM. dbD0F%v 5qnF$< e1,,kVAQms7zl(QKʊfZچj)y- iagb]`>(}I]Sz!G7`M\O~1ϓs}zd'薂Nx")cgHcipH]2 ]kLb+~}G?'Y?po%CDpq:IiE}ߎEHz>Og2EԛdR`3?{2R_m6jx) "Ғ0̑c[GnϷ7PK G|$>"ĚW6edu/harvard/hul/ois/jhove/module/jpeg2000/Marker.classN@ NPl-E]X  ĀvYͅ6]baBbx(]}/KFq"08% MiB<_<[0vr/w\(#VkcZ *g\~h-'H0 [+)en5,r۱YnYoiʰБGl4Vf0D GGs=edu/harvard/hul/ois/jhove/module/jpeg2000/MarkerSegment.classWIpG}cɌ=cCqcdLd6Alkhq %+!>JU*Tsr1I~K$7?=t₁8YtOJtOKg 89|@fdAe#h|@ 2Hłg 5DMp[x;x{8}hp> _C/igm,1Da}wQϋ{8 ^;}A"ygJTL-+bTMjՀSJ4ŭD<WPĝܑh4a}yysd<NYD2#)k˸d}ɘɦ-3"buI.z$ְ]l/(JH,ICS߈9fzIo5v* '>rYBA4M]݌,YCCNܿO\+7+_(DL EaAVl ڄ]zyx&`YiANP4l %,;0տ.Y3z,`#:.:&,[Oz$}Djˉs]?Đq;-hAG:{r:> |aMwJ5!oȈ-^5,!VxXZegC 'ٛ']dI\Bn8*^[nf7_:KJ *)O k<\dUXEw9| Z_G7w;FM~f|{|+KA>p y$9x|wv=pKLT!BT6̺cd DXvא G Yt]E! OwqLw0:OJ?O"UO/,5t\w=edu/harvard/hul/ois/jhove/module/jpeg2000/NumberListBox.classUSU.J `4MӖ*j( IRTd/anfaH}}/> 0N3ݤ3tvsz@vgQB q W >MzͦP"c:̊u7BIH10ߔ1/ !m#6LX񹄴%PձI ^W4g[stunQS[6W3d15,ýڶ,ݮ$E^2L>W[\-Wy)9{mܙ\eߴu 9\ifՊj^+^)kVM2Co9nn8y0.ZԬs*(8 d%q(øU|+I`_+RFKP4PUͬRWO<)%xJBlQI땂PؔPVpX(axCcxE FZjaCƻG.fiR+"R.e^ى azBRy0*󚫥Ur-åYl]u6T:#HYպK4ZfkՌuH_7Y)d0&!ʉJ10ETW!z/!}4u&8JDIN-n/d]x[W['/!W e^tɮd5;J:8@2M mαoӰ4x;ݏqm#4Ә$ߧY?|RCn0L@q}!HdO16O2?1xh;I1\h@FpN{GZ\ﱽC0/6yDžPK G|$>$ :edu/harvard/hul/ois/jhove/module/jpeg2000/OpacityBox.classV[se~v J嘶hJѴHIIMKE-dKw7PQ| o8^O3)3!5}?n ^|)c%De!qqOOA_mN26ऌ$pJ\d  F pFF+ `\L2֮ѝrk쫸$,zM .-o WK WW(-LaYfA=cj))xW%|C|$|L\Ԯ\U +Bqm Oâ+Sp+nDVLj gwK|O8G,7w ̯P^L#K~p㲞ITZ_vʁNciİ [RYU<q"xf;Vu;U5aKUW h(U}ME8mzC_xUu&3Q_DJ:QtH|8{o[ahQ5-Ayrn$>M ^+wHt0fxƉnx1aL ;j५N =l.6``_} RW+HjL/ q"ONׁH)QqȹCjB"Flw"xAՙ85:p| P2d[ /N!+Bs+^VENө(YM&FF)DM~#hôn7.~g _sôH{RW'1tA<`iHh~+*z )I C4btE6 8;&6T6.`S!q`3A բސk8`g?j!_>*yP 仆'Dak([&w.,oom~ノ<VS8+<6noaB^ ۈ (-c"Bal_؂>{ 43߹iPK G|$>|Ib@edu/harvard/hul/ois/jhove/module/jpeg2000/PLMMarkerSegment.classS[OA^ʥ /[A)P塤(J/dBn( & n̹~9ǯ}Øф4Ⓕtet]J#*C5s2p]BLB(K04CpB7tg3`ʖMX:qṕ,/?Er_DMÖ0 nং[-AUf"}a@hUnijRTMV P-˴yj) #"d#%n+b|IN$g-욼hV []*#*Ř{/a\A s(Z(' 0\a߃l[\M5jTv,K ]ci\q.14sMykswfҸ6ќӹC::pFR .6Ϗv5")H wg @ #R'ԣ$CzZȾhHZ B߿I-X&Bt˻D:u\N9E7PK G|$>}<_@edu/harvard/hul/ois/jhove/module/jpeg2000/PLTMarkerSegment.classT]OA=K Xȇ-VCI E}i]hw-ʋ?a`&#Fm!F ܽsܙĊ6ъ >tuID}hC/>wa^\!!<3;27UF -3lBcCk)Z\+y&"B{eEG7 [u ~K"bD($ SKJZR\)uYi8 8BrI.PkYʹ30Sʺ!g8۱-9FUf7ELHbR-LIƌfq`vfgaZm3^1KJ-"iLgjic### gHUxӃ@y;W:UtSI<L67s*ypqpzOL/Ɯxɪ* AތŊ IWXu@(YDv,Ц=̩`߁W%7L}ЄQ,92j'a ʒhĨC9аu`jlXXQ'ڨVOTra>V~O{𱃯ܙihSA@'r7j3vИ|G _ó qmni ̾&X'<tFeTxڱ-<["]Z? \o>!#VRG(cۀsPK G|$>RvU @edu/harvard/hul/ois/jhove/module/jpeg2000/POCMarkerSegment.classU]WUݷ$05Jh+ 1+Th@cM &iV!sIxg@/,oQg&$fQܙ;s̽=W 1^ 7d M]L`Ru#c*iܐpSA3 ¸%]2d˸xw<}/LZ] #aA= 2mp&"wLzHz>r7@g|lP@0V+#8:vAMu'a JEg Puβ?1hKf0JJ1pEDLզPK G|$>ǥ*@edu/harvard/hul/ois/jhove/module/jpeg2000/PPMMarkerSegment.classT[OAEnbQ؂MmA*/:vvnv> ?g^}ń?d8rd/w|gן? "%ф\_W a). 7-7eD%0}nKj'Lk`6vywD%7n[]F FO˅r1%2/.m-'HOSSJJrReGwU`b㩛x1Y>w"UI_N1AA&:hBen-{QS+Dz 踿g#5*g hij| -.!{K#;Wc q'V{z@z6q&XBkD.eĭ~!A~|C 0)Báh㞺"ol J`{%ÇW oBa6eg3k\F#Fo7?/ =PK G|$>)@edu/harvard/hul/ois/jhove/module/jpeg2000/PPTMarkerSegment.classT[OIJzh+2^( xA]F )˙]?M6/1q}ؗM'$& :TթsssӇ.n6p:813pJs"Rf2`$ T aVˆ3:2t{''2{ Z>taE$ ]dCme+EGqzZ qtM!gb0 nxc׮};{. {*øHaxbJ3\T*ZA(-Z^`%|AXXlB%IWU+2qt\7`Z N;"=EP5q[PcWN!$M2Qm3]ݺ/HTGmZˢ 0y7SGP: ]s|^h;V[HTcͻˇ̯8pg ^B- 4GF.5  6 ugوwg |TS3]0 s"$g6blT岎d?P;ɩ$VZ}%w.˭xǘ^Ql $ON w򙤫̺6*Ѫ\a1ÎL5'f07Uh~њVLH%Bs_߁TKjo zhMvF{;?b)$u[li7tIvw@Ͳ8F{lx>FI꺁sz^zLk l٧=/Қx9翴7ďf=h?C:,a;[G̉|PK G|$> u, :edu/harvard/hul/ois/jhove/module/jpeg2000/PaletteBox.classWwU]n6[hD@жH-&XP˶MRݸւ (~?'9xԣ_Cu&}x՞{ܙowUlD]'űYE ZUxKE UzGMWPHHѥ"*qP3 z8 7WЫ8 dFJǀ0KF*qTF=kf H1lDV4a)+ϋoj穡hư ; VXJ&<~ f8 [G CxIxE p xMi!>^dqP ga ;V~K3/j87VόW1*B#- o j޻byO>TV+_LXdPZ.MFG>'Dn#7$|& qseS Ie rT ;^"C$O8/ゆ/񕆯 N2&rn=\yqUY{xV(EÂqP+,hx$)æF~% Ay!nXDYK l1_[>Tp鴊XhcXYu^;}.2K [ӯË b [ƘK5~dP#@]cs3dzSJOCa㦫`?Wh ąc! ?c\ :I $A T c+m 綗eb߅cX t]VO!3*7!:=W:]W@Rz`Y {14qW~UZFAUw [B~z©!K+W'OHG:Ψlt.# !B"=%, y}`eaaCOģzz@ < zNZWLCq"pٟ& 4?HuL]RW,Q-U25??PK G|$>J)Y^ @edu/harvard/hul/ois/jhove/module/jpeg2000/QCCMarkerSegment.classU]SU~$fR>6B%XVhQiMHV%{nq^728AGl̜srs/? `ePC4!Mo)m%1 +x# E\eapE{ 0*aLa\ 0b2B8!PP$m ) -WMc ) Rɱu p*iӗ\%(Ki[(T`VEY~neYC[.5te{k DZirkxvj*;܉-/{*DKk iE9\_`9 s*qWGXPq%||*aQgF,e>FaY<;6J\x'%Vu]+{fQp}#e6mƱK6:fkކx|E*hIL+Xee=^׋e2*X%lp){d[~%T<%\Ff"VJ0<44>  Oned;֒*)ʋ/%T}LEi򏥎ziDkL.ˮ?@,/cy]==i^Q`bK w뀼iKL.n'0cr͂ A$dnPkv{;\/n PK G|$>uC.@edu/harvard/hul/ois/jhove/module/jpeg2000/QCDMarkerSegment.classUmSU~.$ٰ,-P 6.VhQ^bH5%lHvfÐ~/qE-?Pg%Sޝ{syι}oV1.Dːa >APpU%G ƨ nt&>V0*z0э[d>dJ%3AH< wU`2-ӝd -1flC0(΋jb =x%WJB=5״5p)VѐŢ%<`,Ɲ ZfU/B;̑O^ -Ge>F\1΢n"].hUr%/4<#3Ek)Y _2\lcޱ+q } Mn3n]L2v[=a i\ ]WTxFJU (hXIԚMϊU^+"5cUAICxkeۨ^µ1e#HÍ+(q>Ûf.UN fVf<r4Ә}J3ͫdV,X˜t4kI #C/S943ɬ%1Қt\vD%a ﶡn()}{^ё!*LȖp2jUu9. gYRۦ=h,$]z~6~'fhYJ&j7iV"zOlym0^FΦST:=c:?O?SK禕r,қv94)|:5Og)x_2Ҁ/niR uɏ Qћ?"HF?bgt |#翛Qb7}Yz|qX ~@8'qBK-RgC|PrtmC|x L\-Eo.3x/{d[I͆`xo+aΆ$9S F \b"{8ݴ{>{^PK G|$>ƗG@edu/harvard/hul/ois/jhove/module/jpeg2000/RGNMarkerSegment.classUmSU~.6,KTT,hZ|YVhQ&$&)5/eYHv3w7X~逖@@L dr7{yssϞ}1 cGKBdS:"@LJHm~S4Dy_j>|9 :b1[(> e\厎$԰+[ ݉5ȲW ZMz%&0 ^IZoTAO>,Zx261p_H!0!us].VbzonoyLJ46řɭƫ\]nAgv;nDyV5d d a}|h3=~`wY(%K9~"p}YՄ *BúÐڦRP2Pe&%@H̦Bok lQm ;*2̵Oanׄ=3==mtP|C8lx99Y:ew٫֖ bR,wcx7՞.pgINqyi/VHt; #GˍNaM5nzMЄZǺ=->KܧCDV튲a)6NW`ˌk[3oyN}}*d&fdQ!n&&VÚY8\aZH$s NC$Wy-ƶ(a+]8jpCzNS2e\plE IYC'i_@POy"K0 ғf`M$sBLqOza2L:D )3D <:@_02Gc==hl_#C~}@_ :@Bi6zCa# )܅9mT;`16#Ċ#C\Q4c6edu/harvard/hul/ois/jhove/module/jpeg2000/ROIBox.classV[U~,;ð&jtAi 4EXZ.-2lnvhW2 IAz~o*; <=9w=y{&a+]y!tJpKB7z$< 'bPo8x=ZA<&BqE. !"`XJx94qDJX]!"&q>jc"y GxsTcj'4OϊxN^`LC1 +b}cQ}#Ƹմ&;4]cz#ʸ _Phs({ڔըGۍhX5ʣR00z0ZJpSEU;^dZԘz\K UC<.e\-V'*zkiG60dlǽ2^ Uuo87*,-k6Me"-n񖀷ew)ja-}V4NbTP~}\j᪰b)U^q1>)>c:1n>8/79![e3/>50]7Lajop, ~R#CVwPNcn)рR۹SvCpkakخjab#.q S)2Me\a؞6q#ؔ4;IY5^4f\q egs-i# u/Ml0詷M)r2-J\S=yC E˄ƃD};(C|C1&N0a¥#E%MDKx٧ǵy -ެA#崩OyENYSMJ1g-gru:6l *GF8h1>dLȃDx1u0,dv,Uklm- HVq𑭋o"JʠTK}4J<(WdJ@)MZЈ&˫d`!ǒH]}mA\ԦP :C;采xdXpM9]m|sm!=`i}8M]{!߶ď]&3C`L1Uݲ k"Ř/2\9BiQ)}E7JNRdc>/&ʆ4N1u>/٭q 0ۙNW6RMg.6 ;Ȁpi\F!WQs΁U34FG%=\ E NsYv#i D8ԕfQ\8%Q^P>kXZ~\-~<,p[F?R0SX1iHGOc$)Tb͈,7$4\7,͆,K"!ґܝS0ĺ71~0kl-M^A ;6F]VP;NѮÝzuhd' pfK:/i`[ݍ=I9ғQX^?iKсVMNPDVHR;)''"&|X`ˁPK G|$> |c Eedu/harvard/hul/ois/jhove/module/jpeg2000/ReaderRequirementsBox.classUSU&e4\J`Z4TM.fRJ\ؓdav7tof>㤎3~g:? a\¸ %!!u!~]܈`7 Aތ-$#!A-oK !%Z18&y'Ia)]a&Y sn3dkꦪ薒QM*rǙ ZY)jkJl((kk+EK+\Y+|b``@IY[q;w!8jiA![bhʺZo[#=hYnm4tZy%ںO22ʸ we,Cgf|d,5w/VRmn933ˆ!ᾌ%/,P,c*VdBQ.aM: E2,AJ`ݿ'm3<5O_Jk1Mu՘n2 nӲQm^؊%z(cSPϢ{xN-CS|.Z!.Sp" =|siXz6prmJ c@6I z`[f-׃هmERXeRנ>O@r N\-&}Ąޒ *=_D'sF)]JmMGNzcq[QQBWh7ͼ[:2E}Ys\Y0Jr r5.õK=.UPf$,7&ZƐ[uԃ& 1+$[lH$QK<ā~J8d=i*Ch楴.pLՈyxrμS=HwkSoV<7"7 .rv0$ħWgtڰ<I}-9ݤ7!ej2,e齣W_L-H\ZWH*N Bhu'~Dd V ,DpCiOMx1A]Yqw>װ# Fr7B}˯h&4~ qqޗg зyM2vsOh70-?rgsĞv,kYO=c]]p5|(cH$8>N5Jhx{oPK G|$>+-=edu/harvard/hul/ois/jhove/module/jpeg2000/ResolutionBox.classT[OQ,ԅ E^[@@hp }!.lw-AMxA-$Fb8gLIg2sf33Gx"VG7B⦂["&=2*.Ene E>`J7u7ͰY\-m98 Ǚ VsZlhhkkChE+W6VD"Y,#'d -xN|g K.Ϯcb:BBYQrute煻$*"A5:4ז\[7I8*qOU$b;]TU >HQchU1 Cz^t)m(()2 U0!2?'m^qÞeeje%ƞYQzM4-pC+Gf?%$Dp3i9 =ǝ>ĝL ..2DwA^1e.QM"NO493'6]S')>&.ݫ8z}nrC!vi@%C.BԙOPW |FT4PAë KȡUpv{;^1QG .0\~EH:pU6&dMMoPK G|$>Q1 @edu/harvard/hul/ois/jhove/module/jpeg2000/SIZMarkerSegment.classVTI4VAqf(ǎ Pl;3tFKMj"^zy7r|µt<'$ jj>gϿ".c4K^c"^5zy71cBDcUB Ox%.a M]fC-8=o]puMw6uP: 6I%n -}lI, ݪ:qXO%8Yŗgz&P J rg|53~[f-:6` /iMN Q1uI؂-a<ƏϺiQ[>6::{ A27r~v<{kf&r :AX1ڮC&|eQ3_F[L=V۬[(b w4Lf0GJi.+= kŏ6q;ٲ-;%eZoS֝KO쎂zwYn-Vfo͖8NCWOѻtnU?in!.:l O08(sZ̆N R3sm:L:KlBg2qTGβQ4.OeZ?m9G}0jFqGۇ#?zwq$ǿViƇ4!%C5t>E~ǥ|ZI+oJJY1!Ls>óJeE>J+rJ>{%s`%+UY#YKAd3HUI;HC!߃>;vgJ,>xTOOPO0#3LEg)@V`§M@edu/harvard/hul/ois/jhove/module/jpeg2000/SOTMarkerSegment.classT]OA=-n"b?P-ˇ҂F_ۅn>b4;1P7ٙ{g93RXSŅ0qQ\ƨH1\Sp7Cc\A7miMx#1г`ٖO$xHԐ0E؁0Dr(S(:% Lw%,bfU:%a /_URd˫T_ҟ3 tgȋh}j0&w a3n xh346/׿ 4<Ȉi (y=PB BDsj?C3@ߋ.]a!_x9q8p}oPK G|$>0ݨ\ @edu/harvard/hul/ois/jhove/module/jpeg2000/TLMMarkerSegment.classV]SU~dU$.Ś"Gc &$m/\aC^q?pz 37e2"a4%v @ݙsy "a8f%1o3xy3H;" c2\H:zz5Rry9[E +O R'ᾂD"C?7Jڊn붡rZ,jٕ:עNPL#LS! Кnr;T5n9"g>WT$ fhVr̜6if,!2 NNgl2b7$(0ehut+,g- rXS`!OƹqS M)3u۩J(*pPu (=9Qq-[ᡡ!Ht$+l0<;d[*}f^=/0C`(:6:U;ǬBISc$J8SSyR}%!)H[(q*S MOLNGNbb6/ĬTuP #W}3̘G}isp,+VgR:Mrtr{:o9b_5yY,%tf# (W[J&v\uQ:Nu6 ͦw PSksYvztxATY:Bk Y,- D% E/k6řǒ)zlxo 59: 9Wt,Or/&Do2j}e'qh}M ={?2Hڊx{Z&">/W?.ntm?A׶a*&Gг3T."_쒙?D UO,ʸ0T1z),#ZD_)"wмֲ-ret %t_D뀬^u;:etg;vzw]2ޠϖ_B?0|CtC45 W}QaP$w_PK G|$>RTY4edu/harvard/hul/ois/jhove/module/jpeg2000/Tile.classTQWEBvJ(@h bDVIlMkKvMf>/}m9*rNO_݄pÝ{;wo?} (.`N;Qa.xX/($ e!t*># Qtc\>ŵc9ܐؤbEU!քH\32b񅌛nI!ZpVГPUeTJʨ vSYrBl{=>q!hi:CiR+ *]Q]ˡb8O^. - IMN{^9o5`!iLM-z1 'B(6ܪ P1_@=Ә #dCʏB>E_f#wRs0㯣 +S{dx3 ѵ>WُvлA]ekc^l'tr8edu/harvard/hul/ois/jhove/module/jpeg2000/TilePart.classTNQN/l[EDE¶lx-+..FS4{l-Y6F>q%9{f}39~ q7˘bFEB(Cx$x CZ ΐֹRkk8Zk5Ԧk]n5Vm^ͤiDYe|i R[ ,r敋KM pW? PVE2>fV$8ee+*&dL:ClO"HMJx.r ucP]U5U/XʕJ`zӮ LaӶw58F[v\ y, Ǖ9 :Cbd0 CU>GR4I[+ o7ʂpˮfDzam\F 5e&Ør&Z\/2s%еyv9ܢa?|b';i= ="ynMt}G&}}q=#}H=ʉow"{> W{] 19t0Tc_PK G|$>uGAedu/harvard/hul/ois/jhove/module/jpeg2000/TopLevelBoxHolder.classRn@=u:Jy(MhA 5 64$Dz  a!(N 6eg\{6RኆYoMf+nㆍUC.{0wߏûjSzCH$j$ya ^,{z}Ĺ +~("O:|.u(ݨLF0kea|Ӕ 7edu/harvard/hul/ois/jhove/module/jpeg2000/UUIDBox.classUrEƒKv $!?g6l INp v,YiUy \ xPCUp=ǿ! .hx(4&(uRwI CCULEqDq4 ]IQ\GVjn)54|e Sm 7b$k|kTxr[z]t3#Ea&ֹg͞cvXkhVZG42aw\^6u!|۵ n!Lg8^y9ީG(+aumUHCUᬖ=3[D2'vènduQ :f񱂢9(IQOPQEMG >ձ t|e/6}cY" u:YuX&t*mB\2cfSszW,В07~+Yr@M_t+ŠYmy:M 1\} `! Yh7f@h!J= /[]k1$G\ Nϧ!E\~Jjѧݥ5l }pH] },TK0<ϒ)Gw١asgH0@ǺpgγMHR-2@(F<(#EieMaRR3:Gfr*Ujhe+rR/8{tnYn a|ns.i0$ !0VsR ;edu/harvard/hul/ois/jhove/module/jpeg2000/UUIDInfoBox.classWWe~>vavABVD]n-%oY hm;,6;`ҲkE*!YRS9!wvA4\o ߉Mhpidr??61@~heIJ8zd`=a&A&HPt !V@ua&=".ˢG!>itbN< É8L!n;?<ΌO8𤄧m5@IJx{_1BޞDԫG_2j;rD$)]-b{z~ѽ~E }5]]j<^;3C퍩ꪪ*o>_TcgA= H荀SA LO+QaiW@3# 4m–Epa/;DÇk8/mj}lVRO5ȸdi1H&Y]}C8#|(#|,|*3}:om0tG) ޶qխwtT"rwjܝ(jFBw֭ e|/% _ XL0AvFdl*'{[ExnblZ2cT˜qՎHbBO찍$"Fͥd $ T74%2/jԆ~ CR^@˦ʌfC1C´CQL]ryDjOM(ZN`ÝSuON.pVXb&X¤ *},X-q$ NK4=hnԒvOVO/6%L߾,lGȄksܜ5F筽]t- R>0K mff jPP2y9XrK#{oik74h? ^hȮkXCߑ8~Vv[5~n+& F?x D" ȺgY6Q{}ttj$zpҟk|x!%W,n9U3XZ\6I:b$y-Hb)˒XΫ3+̵m [9fĊ@Ӫ %mIi;=5;ZXC+:*>rNb] 6Sh@ieE}Ċ.p^Z! -)$ܛ赝jbO:ΫC,c,](N܎K; 2v_> K;1l,/&p)'lbڟe3S>KQ2: ZF? %dh[p/PK G|$> H#;edu/harvard/hul/ois/jhove/module/jpeg2000/UUIDListBox.classTMSA}"PA@AQ@7QD  J*9b zA=zAhYWgxBIwMwG14☊ =9.='$NUOaDi q:gGFTŀCըiB87n ;7*\ẘ0 z;1L!ۦg lz^chTۛ3vHC`6n aKy|+Yb!8*i[ iDvmޱy@ÑRYnVzDC5 \\LL&5jp.Hs8K*4\ ㈫0) fX"U 3Hh5 I鮓I:F,F&yJ3]Z34;Jr;*a>BDwl+M ĦsHIx] rݾf-Uˆ99]Nr'|#Q^&.CޢiKP=$VH”&bLiTHI󲤤^,C@|H-u ]:] _9'^Xcܻ_zϦގZ0 OJqʹxەo&Q;J hS a8è"@_}PE|USmhhT}Lۚ"OqVhsXG L{ۏmg8 WiYD}`˯l ~JE+f!ȶczz2f ~PK G|$>lzz6edu/harvard/hul/ois/jhove/module/jpeg2000/XMLBox.classTkS@=+Ŕy'"b[ДQl[qYJ0M:iʀuqIǻ)" 8f9{˷$0 ]*ZqLsUT*8" .M\EԯbpWT4j\WdP9CKz/qNAxX C6R=\=-\c"fE_L}bU%]b }$ x<=6>brMAcO *ޢf>3%=:TzW *4 "'[.F'pr)Ķji4a d54 Љ35--C|PK G|$>%edu/harvard/hul/ois/jhove/module/pdf/PK G|$>/P N/3edu/harvard/hul/ois/jhove/module/pdf/AProfile.class xcݝ\C)@ 5Hb6*danڻmmm%H =bkOU+Vm@{.Hm(w_C'q?T.CW1 PX"T`ru3V )p*!%p  <["#ps.7# 0&nC`R!cY9*awqV ߤu,-ʛ3ٷ (od=<׏ Y~HޢGp#~kcG[y6 I5?%o#Yw1g_ ~EW%kuw 'p\~< ~xP!m]<<C?f?}SHx?_K?|%lߨ[G(ݚ3xW&ݗHp퀑12ځdm:>1kY;)ՀnM#f l9ҽn-ߚ7u>6bF)JF*23jnI#_e~B[Jz]ƢeXr8ncD:UҚH x/NKjoy}rְJwS:Nz(ϚUz^Y5rl_ $yHY%ќa ے&E3 ?nk$1N9mXOJJ9#O 2B_:*>IJ <)ibe[($`yCcDߑr9^iIq"A$A2γ@̦31S|JÄ.N3!#f؀!-3S9rp.H%gҖ3!I֑"so׆m͘\?KFY1Er;W"[?h8i/?} OSRRDj %Iv*1rBvz5couF'ML}IJ'wStgIywY Ioc*nfuAݴ$wW)pp`oWStiջ)eo4F@qKadړ1:͜<vc8`T`Gz$u`dRkP:k& "bLMJ7S?c-Mr9SBe[tÂƚ d,X3 ~?Gc Ϫ*I?v'<9GiܢڏN٥WONs:f?22Yz*`6(չ4DP:dhub+V,qv&OAcZ㓃'0ѧWOy$ձn S{g71=\.hcziSrzXyBw&*X贽==TՔdd %9b&m!_ߔ(6ݑ%VtDK,DWq/i= Rh` Eٖ"5SWO =1;A3=_Nv/cWGIzm^E$DN[i,S=D`cc8!;6az'y;VK&=NaN:זNꑜLEUC8TMC4S/OlS>lGQ ls apd?}W~^uwף{^Uu5+t->UO4tF^Bc@/Qh,i,+h,u4V4z>./HILZ0iKet$]!I IRJҌ*\.,!F;ўh0ڹvD;_]@W֍cQX_ι ¯7@'%oq{}pnnX:?O^ZX2:q!yPCuaIx?Ԏ|GIb*%1S^RU4{ wfV'UpVG x{4 Zdo_M_.KGkoDB1vH KCHB2LB ~<',RIQ=UŽf?\Y3GBDCAXME[VK;䞀pȽZXI~#S^7 n$Vz aPUBKE ,&l*<3 i#~ɈmyNzQ}F&<5`B`1sy&O{!~Bzrl>6Ilmq/l|>qf*<{MEq~d猃d"ii9ZegNȭ8[ W73dM!78{kG-ZC0 TBF~UHЙ=P=_mJkl*RA*蓰$L> Q r -\ eSp1xU3 /X4, q\i`&&\ku[08'ɚd͏G} s(mZw5o[ȖQh&fHGz_ i˅>=z_aG_bxZHzRG>LtPɌC1( C]:렇z AIUzD-( Yn\vҜ2b| PY}y\:^P ['Ykw]J0~\,aX'jJ؃7IY-J@$Q\*@=E/W<ǟұ,z` PrM)e)W?- LZN@h Y9JSsMGtjcH\6ֹn=]7kB^K^ǖE `&U0 6Jhiܓ088#݇t3/$:]1ҩ4op}fS֧y%cˡG. -ƪ{tK8xBa<mSV+ts#nG ?UeER<%Sy,5t?U{A g Rbx-IH#~ -=GJ2V|C{dHS7qxep!͊km< s-'qӥ`'j!D1pW#1Lnp(pI9EQ5<ʡԠlymiNNڥaw\uZP#1 j+9US:cAc$U}YFNHT\EH3 +νGeQVk3B }fJ}V}TAckƎ@je.y%E«`) CJ8/$^<$9 W*ly@h49 uΑ9Lwœ0겦˔O:(OQfg\Oi6: =2"<;Cߖ[NŞ) 7q=Mc{$:( qx;t;:k(2;U [SYwf 7/W˺A{YFAE5:9AP= ۽cUvCzVae_Z9E֕;\B(@ƝU>ހ,D8cRN7fe'[l j/dPIE B;G#G_NJՂxu"qG~̓_È;N -=_$_TGV}9>,j$-tUv kn6--ZT'!^n'jJl*:$tMrPXr f8;׷knn-vB 'dC+ y[Q(pY̡Rk$%8 -0:u)v8Ziך9D}!e9+mdAPTވC)eQyq*k~;qpHut!>1Ə7i?p N 7pun,Gcܻ(G;ŁgZ -#E;!$!;"tVKDU5sέZ~^hyg]?clc6Qh##T'`﬩WjwgS(b\D+VD«~Sp#򳲠}V;;~g_ ~q4O;?WTˑ)Sތn{'hnEں}w HqBKִ$LEcfh'w.p*XL~p5Ih WQ({SyfF8|i5o߼[^tB{}TG_stӰG+u `$`%,pFK0tzWPIv`K֖=7OgM5~nWA^p-v]JaK*_c׎j{Iq}/7{pC Xo ߦ wl .r8|oЃa;&蓰&%Q^=xS9edu/harvard/hul/ois/jhove/module/pdf/AProfileLevelA.classRMO@} HAl#Ƥј`$pBtKK*%miQ^LDq'v2oޛI3PHcg~rŞ} e@xi;1gpkprC\c>1LECQs;y@Z!uYM[=c+j!@s4e'Css˵Y-BT48AV‘c.X4hX4~<<,aO< J{:wwi0M.}[OOI(IBL2e*BTU(f7ޱUU(QZ!_PK G|$>+3edu/harvard/hul/ois/jhove/module/pdf/ArrayEnd.class;o>#..fvvvNF6̼;Ff 0FTVFԔRĢĢbTҜT4}ǢJ׼F-ԇg1(20]@Hy`>vƍ` PK G|$>0\5edu/harvard/hul/ois/jhove/module/pdf/ArrayStart.class;o>#..fvvvNF6̼;Ff 0FTVFԔRĢĢbTҜT4}ǢĢF-tg1(20@Hy`>vƍ` PK G|$>zѨ>edu/harvard/hul/ois/jhove/module/pdf/Ascii85FilterStream.class;o>#..fvvvNF6̼;F IJD|}ϼҒ\k0FTVFԔRĢĢbTҜT4}L S̜"I 0!H0(20@HyB@q& ͦq#XPK G|$> ?edu/harvard/hul/ois/jhove/module/pdf/AsciiHexFilterStream.class;o>#..fvvvNF6̼;F IJD|}ϼҒ\k0FTVFԔRĢĢbTҜT4}L ̜"Q 0 H0(20]@ HyB@q& ͦq#XPK G|$>1 ݫ2edu/harvard/hul/ois/jhove/module/pdf/Comment.class;o>#..fvvvNF6̼;Ff 0FTVFԔRĢĢbTҜT4}ԼF3e楇%攦g1(20@Hy`>vƍ` PK G|$>!&wFov 9edu/harvard/hul/ois/jhove/module/pdf/CrossRefStream.classVSg}.₠DM $[@ Ң oma!X f jֶjxt}LNsL ]w:f|GN'xOi&> a`Hð>D}0aćQ[,4) q?0ILpyOl3a3|)Lq2yg%^&j8@N l6𨑚4Rh&NZvxl49iǓL ODct4ԁ5^j[Ʉu]솕S[6x0]X4#Ll*6Stx0R f"L4Ci>h@Dʜ<2c>;2=A>j<goh5o)v+aw l]j.H2ʖ,߈[䟷@1|ǘ8b M ix] ;6xvFJD49gxشm $$N \[[ަ,Twhj TM8ǶM2L睢ЖۅlV:L)NYetq0oDSB.#z xhq4|C|DXpc|BPWǧ܀:>!lJrtK6Rƴ/p^V4Q ^Gu|ɸ͠6R8::.+JY͸ ʦk|Cq utau` öj'6v|[AGRIކ۔ew6Gcg0Jd2i+'dJ ج_+m՛K@SP/!i}-uo5/]󼤶Sm7<]4#N:oׅ +vQwpd^n,zCtfںb'2Yp}8>rTsdylՔt.e7KД(ٜ7*fQ,6edu/harvard/hul/ois/jhove/module/pdf/Destination.classU[OAnvY^e" MAxх`qm0|M$9ҖIliҝs3(}~4}1$9®rć2dr<ᡌ*q0!c*1ʰt PGDdSBO]Hm ;%-[OBkꜾ6olL1Ia8cA"j°-&2 Ed=Ng ҄ J>b ڊ)2$ q<&"ɷ"xB{#s v{"=P V\N(!֊p2G9 Z*t\EMhf.`qm01` =U `KgDA .QGcf 2$Gm3%rK}{"a,"OCÉ>1z+s,RmerZ?Z?vP ul.$ 򐘤4ʇPWI*vmA \QI.dz7I|Vjz5PTW/wxO$v ( Uk4{a8  ot 3笺]g+rnd d>WF? PK G|$> R8edu/harvard/hul/ois/jhove/module/pdf/DictionaryEnd.class;o>#..fvvvNF6̼;Ff 0FTVFԔRĢĢbTҜT4}ĢJ׼F-4g1(20@Hy`>vƍ` PK G|$>1 :edu/harvard/hul/ois/jhove/module/pdf/DictionaryStart.class;o>#..fvvvNF6̼;Ff 0FTVFԔRĢĢbTҜT4}ĢĢF-g1(20@Hy`>vƍ` PK F|$>2a 2edu/harvard/hul/ois/jhove/module/pdf/DocNode.classVmST~zwC(Zʶh7*V}EY@P+MXBGo:#0cg,茿{]so}sx*zU bR<oRц<ǴD1ms*TG;Y2mcaـi<Ժm%)g;ő*a5kH>"=qSFêtL#Ť^5|7l%Lwo7a; -lm| %U۰Zԉ"o>0kמp>T4lCIJ~PgѩvJͶOj Cԗ7$whq)aUc\Wj鉬N07T|\lM-:A#_"FZZġ i]š[Cj.fe:'%宴m5q%wmAKъ(ԓ\}+'C+E)iHIBʤ-`ԬizfhwW`"{P@7!;+LpoT. ܔrvaMO1tʱR=$Cű&cSK>o9BZJi|>{r9:38Y.ҘEC$ۤM9}T'9FpG [qŒLz]S#eN&2)2b7p@}oc>—J/)xyٲp+SxI@ غyz#!{F,r@3QUH^͐/-w+YYl2=\/˄ UǗ, PK G|$>hCY<edu/harvard/hul/ois/jhove/module/pdf/FileSpecification.classS[OA=.e{V^Y((E#jȰm.m6Sj%DE/귭n3oϙ9/x =2 qe$d$e0s2 XXx߶ksf,P-Q)]m5cklhܦ7Ԓ7E]WK KZ.U[J/·jVL)BtPp, eADreEر%MrIlO3jYh8.qcX/y#ni*e /v\6x sn:,{ Y"0y.;c 9,~wA'-ML˘rdLMIwKVjA\7atG`0/K7ZK`Xr-B '40]ltpp^0+J!x7x"qJgH:eNx1N|ũ~Fm$t2vkDe qLp\8n*EeO;]-aCC?$3ƝiO;PK G|$>~@*8edu/harvard/hul/ois/jhove/module/pdf/FileTokenizer.classS[OA]h]ET@-[e_j$BP)]n?7/O Dsf&sΜ9o3/0c+cѶa1gqBIbq:3: rYt#@R"RI.pܲWv+=1&o f(_eo' wrT4T]Ϯzv&@cOɖFsjٻ ЛhVٱnբxivVn2O hNQ l| pTtuDܣYr# eiGm?aOzu{iʞPi͕rTzLU!gmOйGXȱb/ZrʮpY֢SUT,Y~ aQ\6Љmc=| zA΀<t6M3pacl\~ȄM9 Z~LSRKD@@)7s2YRrSǒUxfƞX hC]'݃.tQg;i0ԾW(",a}YGDxmf2u# 4 oYtܤ($x h !bAZm ҊEU`T(Un%[3~'7髂^69ď~_~D5t P^Dwٝ E/^!i*[>لH0ڼl!d%~ypc֊Mb5@l[0XƬcK?h`5q?:1BoQdK:~PK F|$>sW1edu/harvard/hul/ois/jhove/module/pdf/Filter.classRMO@MBZ>Z I+=ShrEIq8ERKzGMAC+{3o[(б*6edu/harvard/hul/ois/jhove/module/pdf/Hexadecimal.classN; @g~m<]aZl_OqÚe%Xx%n8oxXb"@? AJW5!ȦB +ǹY"",X5N18eQZ:_\Uf' &]7n@4n@PK G|$>u"2edu/harvard/hul/ois/jhove/module/pdf/Keyword.class;o>#..fvvvNF6̼;Ff 0FTVFԔRĢĢbTҜT4}F3e楇%攦g1(20@Hy`>vƍ` PK G|$>a 8<edu/harvard/hul/ois/jhove/module/pdf/LinearizedProfile.classVsEudpAs4A "& xno2f7n">P Kb.Vx***A-$~3 gݚ=ogt4`܋tcN4lѡc vrQأxJ䬋c r'#!٣WOCHp 4)HiQ}:fAÐf OhxRSOszBB4ЊfYV8a%{GŠYNJD }F.; |#4i10,ϥNpMkљIPNw)tMutJ#У#b'{0lgۭd,5ttIb&]. `=-sy-Pkn$i%(L-dF$)22v5X4K%B]Qꫛ4"!M39*X}ӉݸɈ#ҩİؘO]ݹ_n[(^QYfMKw/s:j:]߱<9]%KޣDZR7GnӲq].Ӓ[N I7p,w|zw[@= VSPr ~W*z5_—MYן?XxjYΣf:Xl'h,0 ΡpY0,VtTZ9s@FJgqEr^,_k4>gIʳƀ Q7u5(E|{u؅`КCi,+$ ,Vi6v]E]9ju@;3TzsTzA7%p91z nr/.d\P yRA3x0 OTXՄb 1G,@+*jA(G8q_ll [jzSIu+e=>V4^14p8.b=Jp%0f>pKObZ9oRi\BO]OI`]#5}jy#:DwB鞸+R{+]X;,QͥUe>ul'?3u}`5vHkЬZlSt;; eIp1EK_+^ }b,v]gQ.|cdXLƔ}Hr=aZIԖֻ=Vl,wRNkڱ<`̙1w&Kfb31^k#Tm1~'TJ0[9tJڀm☢1^7E]+ Y$Og՗PK G|$>LW;2edu/harvard/hul/ois/jhove/module/pdf/Literal.classX xT>w73yIK@6$C a @0$̐ d3Dpm+vZʦhabZZMEkk[ZH7 CG;z}{1\m \lYg\}]y%v|5`[<]_mzWJ2RiUi Ugz^=牵PW[S Z ժiJt%*7ޢ*ZJo;*K>O_P]zO*}nS֫SGLb}Ss[hJUv*(ooGw) lcwӍ=ϊ3*o/4Ha34swpJ prP .¢ h&b6/4¥ٗ>g6>+¡ SJgJD6(W'3MPKb"OvVRLH>ElX{/2x7]\*c$۶%v6_^6}c4~Oؽqijbn-]ȡs BUeE]YMQ%%6Bμ3ZX^P&IcRvDhfk]: %kWX]C3xL<˲8>0:{YRHN;&E1*fGNGhSsV,}.]rPdFR̉V'E8F"GOvD()0YC[-#aE/ 9Rjb^(pš .5$`*!sUq٫xhxҥ>O( q+7{?O{ ߏv [fƹ`"l;MF5hvx˫cz|۸|3-{ɑ)F#%kA +*$ۥ%g&B^ť)TȬƨB2j\h7.{k:k+ƵIs])t*NACc:F:B^xf`xhQqХZE%Τ T{(8C"O ajp)*+‚Dk u^,5e%BGs֥6u8d?FETgzş鲸.TgJb&']>V,t}df5YL^o*:L٤"B_V+8p8C.ĉ>)5u#>=dOK1+Ur-ΔRM*eb 6A&WM^Dr~)uYvXO qC}nWJk+U:KxE$^IH瀌ir@LqSÅ {i&4E?1w/J(i#oU9'rmȹƵ:VN~/;w$,qN*q=nm0,foPA$rRKt q`UxN DI $2p_#ovZu:z FM>~ZsY?ެ/eݡͬhng5q4w)5/h/jӒXoܳY'~Ysg~Esg~UsObNeNcMIYTr&XD 띚hb& 4z&YD-5cG7Xhֽ>u?z/zz` XXXևևGCaXOOOO?X> XO?XX `)3/_X `-2 z `}`} `:{?oXX`6w]c}/XX?X ~~ `7c4z`= C0P(PK G|$>Y)|/edu/harvard/hul/ois/jhove/module/pdf/Name.class=OA8Ch6V B ,wۻcaccb4{*+;Lk 58Qa &|"O V'~,$k1>Njex >a~ɗC~JeZh=B Eʦ|`4dJlg-b-Ř]r/vW*xJ122Ke$.f<,d9Be"uQ\ n{80p[ a|Ũdڦ-p}Gzk^ t+Eyf_PK F|$>S&N 7edu/harvard/hul/ois/jhove/module/pdf/NameTreeNode.classVS[UroNr5ZZ|h*mAQU@i(A/D뻾߯qfgApD-ZG?uH@C?dw9{vgo~) 1 09=WýO70_ChxIk؀|2 )1M$F%icD#I]$%üfp%XxDxLC rYz<''% 'M31#dceb#ΘĺCĆ)#m&]0u p48۫qko*͚K41+5ƌXֵX9:i:'2:-﷝q3a%,WTjyJZnɚd~^HJY lqcF1`S<,W>gQ} )V&PͿ="6 kQ2i~sB`׸)M6ñ7m% MxFAxp3ӫkFG;%ts&ӒN:`F&uKKuc%RGF+xʸ:UGvQrcb7/rkLȸe]1öE/nU;vWvc%]3]dyIAhP: {I'B0::ѥNܥ5.c}%sGu?SFK+1/ Niou7u%.`nZvIQC<#PQP^#Rw^Ód靯xG}4LfƱdJRD%LЕ.r&VC7gSMZb@дٴ< k;VJf1:E#sСw#XװLd\3A:NX79qɕi$m )^g_Zeq(4 %4,+$ 1#%IIqx^y|"߳=B{>DgQ/R? %Z_A. ШճYhSFA_F 6JدEdvE´.E춂..(ɰTD|{:M}9\zzOE]/1CqLi <旸Mv% %JK}ëI%}3pm[BU#QpGɟ@M+ӤJ/F :Ӧ~Dsr !38kb)IT5etZi(G=LHMZq^+(JnChpSL ] +l@}Q|/ǿ!ʜlǜ혳scvna9j{qJ;am%: [žUEV5iPB$dԐҠ!HĮhvM6ȺU $CIe,| rOL>|qQs\9hxA$*(P"g7(TҨWZژGMj\"9D+II+oÎ//PK F|$>CHJ2edu/harvard/hul/ois/jhove/module/pdf/Numeric.classQO`~]W蘃) *NԖƤgc0#ARѵKDƃ^8`3!$.&k<| <}?חnb~:40ׄ_ΚEW뿤@dP# H9~)Ƞ{AYR9KA: 0Mz@'OȽF 钕^uSTڕɝLedBupZ4 Ph^^ĥLT&"E'I!ZF%ӢGCR/, ƀteب 9%-Ӎ~ 9 kTA!K*PwҝvjÕPjOL/:PK F|$>:hV' 7edu/harvard/hul/ois/jhove/module/pdf/ObjectStream.classV[WWN8qQQ0Ն$8ZжT@P,6ILmE{{wV ˲Vk_|h{O%v%,89|{ooK Ys $F0<Ũ#8*zK "81Vza4If\ &% 6 )4(؄d#˃0%qBbڋ 8%qZeHeM#)=khlmb<=ejɴOZƈiP.kNaEs;*>MV:gOH*09[@ smdmfZ*'c')]!=e]Ѩi۽VȭaN ,+jsVB mab7me p,I=%LW$^uXBF_S8#LG SiKFJq3WdR\CTAT*:УTcxoа] XE &*.64S)3,αoxH>!RQ.ޫ3b%3 %VC$ѫC|DU7cWъ6*^.?=93ePitrSqmwSʅ/;u_)W*vҗʙqk"U;=~P#~*r7-Q)a=KgJS> {~I"KEX~'rMn X+NT8Y\L^HvN JA;MUPܜ+lv9V}߻K/HsgխKH!x.y<'>7.[6\G@t5K(lIRљ3tpheQ^p_qO!z6Oׅ:? _.;jY =.wnW&O_w-"I`b-Hئ9`|۪:Ѝ6ӿC!L\x9:#KGKHj$=Nwj!If!<3 ̡vtr4X2 eu?(AE&44, ,ܰ9xtཅOIt)MI,M;BiҼ=vPkH%]z"j(Wb {69l%2}<`xЍg]9{*\P:їZrf?>(9vfzx=4tpZnR;X]#+` / zU\?<Jpt8؛e.gKqh?PK F|$>@r8edu/harvard/hul/ois/jhove/module/pdf/PageLabelNode.classW tW&3LI@`6I@ &ZIf,lvXV"jM"-VЪZ=Hwf6lj`ϙw{g *я8U 7f".?V?$-m~0;y. =x{%Ox$|P>$a>>x8#<<'*I|=(O? 8IM 1&㘄GXC212&dL2qB2e<))'eLe|E3,U?N4c_uk0cR0Bl@ 9#6PH2|l@fȌ9<F_ȂY=g-`̈́cZ3+(2!nm!d&xU~=o[2P 3k =m+XT,[$([fN)geWo!n$qRTvgl5mU,n- i< f)%V>gd얣'Pbgmx r1d_J|$M)cgʙ4FxjkѳIZ³n=kfYUAEsV;@u<`oɈHålZR_2mBʧGryoZ%C qsdWbռ()#?Q,$ŝ ɴ+skfPO ,;IN+LJոͻYϛ(AWcZfWM|Ki~n &9L)6 l; nNHHŋ/y &=U`O 홢,FNI u|5Cz*i.rI,NO?S Q(<]nt(dl:$\/K\id 91hCkITNa@aa3eRiiǏta̅+x-w;ٔd[d~]v 2s¹U^ж x[hfMHз'xtlq=q:>Oژksv+=^Cx D ~۬gq9r:["Kl͙eu |/Zq , Rb>H":+|&5d͖̑|1=yfo_=@ 7v:ЋQ().B(Y ̎4[mJW|~ɒ}D)׳Yvpk(Y2~3L@}jrz]_ְ!]6VC݆lH=džvl.an[Jn44 G.: m'm'ks?2[$M| R' DOCPal$vlUS@|'`zto꺲%ʒ}+FF!G)EE;r:œXry偅X`;/O E IOl6KK>?Rv^NaiSXex!qGX:*v> cx,包[؊cvmCmv(Q&Yvwԏxl&pL4UJX،c * r9'b1;MϓePMj"#FIVNS$^{&mG(j;eBbv%v`#g0E35paؤ]*Ml5")*N@˺ɸhdXckٖ]k$OؐST4<)E(W:cϿ$tfU A2{d(_.((}+ ;szEVvL"4ZM]=ڟ,Ggwo#BS0-9^γa<4:g;߽ڢl(`aK(9*M!= AXSmſ0 "zB(:b;,w`5}軉[ P pn`ءlk+lnrnv44u5u+cTZ65MsGJ,9Y kjjEԨ+_%|c1o䯗:)uR n@0&gFQgfÞi }tɶsTo A?PK F|$> 5edu/harvard/hul/ois/jhove/module/pdf/PageObject.classVsUXqYep8C=ms/M̨){wKB7S'wV A |H3e')A_D4H?骪ЛvJ#"e"U |I}]xS[9uV> 8৾#] }Κ |H #|,|ZbdV+0e]SJ,J)lI Q u1`VׇM|jU(Tfr&3vvqK UPuV+7W\ 9Uؿ%O~t'$|6f86)jcRűB) b11y̱CD5$oR7?̕`e qS MeU. X*].wXG%0ufN-ϜgNϡաL~GCxr9l)TX`lce$߸nJ7.8qd1_nv@d;K7edu/harvard/hul/ois/jhove/module/pdf/PageTreeNode.classWsUn&M@+ EiK<BA+-TXmeMVT|G}[fl:Ȍ3x&mhJss9=~@-$@%a)p?qPK*P%͑C葰`p ^!)!A1`pBڏ!bv18OHXÓSbxZ ψCia-02Fp⌌s'c|"SLv'BƗ%Ո| E-PcF{I!4V1)B _؄2w#.9~d^Aь=2E>R,45iV2 gTI≸,4_-o.7H}rիq0W\c\~$TR[]( iK`nFmH%]tPy$SmHM}Z ‘KS搞W8wwRbTmfzAR̻0y`4>B_~}Mqj膜rI/s)VӍ+F7FD"Q!ܙ;S&&ЬDk&(N38 ~LEr!Lk((*U]6W> RՊsNw\bqo'H ONaŽV]^Fk$⡐3XLtʣBq7!W_"Ť@sWCX*/qZe Vx@8VTLaU\Rf(qYC!G ET-]idqkDxb(hܚoqFX&v)Ě R܆))) ^AcG/+c'J 9v1e )p4r<\Zw;nzk*zj#9jU"* EDQeF)UjƓ3;CfE4'x=D/ʋa8 I8/YZ)Ą_`]vZTufF(>sZ5" (c3CPg̡͡R 1edu/harvard/hul/ois/jhove/module/pdf/Parser.classW |SNz{K!mHPp%DR- ,Ks[iRosScMs:ĭLI',6~S~*I헎_9s;'< `X@Á lyB=<|҉5# G%>%i/Tg$q9 !*㐂'p 3x<O0Qc^|Y×$S _xxO. oz-oK|GAlx!??gX_H< l#|_/I`x8–?߽?lſ|U?ʶlzJ\g\tfьxtg.M'2];{ho:KѾxwtSc%]ٵz_vhܦQwһZ@u.me(mzחĽU`6`uS/RYT"{Y*d)Ԍ]WR !^)-ѳ^:\Z2 5]E"H& NSBƬֵܤH'.OjhSRdVؘ5ӼF%ז\I(X5< melt8'WzFZZ$efQU4Qd^<>H ][n]w ,+9]̸F\XKWHQ!cTg"cXA ^ 9 CLY*5G)ĂؓsAVLCZoY_ #뺻 Ja  ]dR%j|Yfy3]Z@ERT\Tv^Ige@I{]6MEy\ڵdwXgt#/36xQ|0'ndz!ucۤ9LkOV,t"'CN8\[R{dd=&Uqm^;p_;f\/07.důUq U}W IT ¥ /Sq'n-7l&@,&+@1]Shiw[8*T R p>7B,8Af?TmRt6ا#|>ܠ,T+UD Ur訢9UlAz&r^^=eM(k<.YU1 ̙%qP)" p^,het*%RA-`*׻C7nLCpG.ܩe,TUI:U& ,)/7^}b⣸*x $U%zU,U K%lBznPGec%z1Zi%L"mY7.a9PT)-z٪'d'2-LV# &ٽ76Չ=^Z2GL$Qf+^f21/*)1V8ITV [90cKTa* txS5S:]!N-/GD{3[^&qп=G'1Oqx9i.+_G8co6]S!WI,qƷy PK?fø82EON=ű~-kk;]3iO%!+D=Q9`)'6jt0Bܚa4Ѽ]t\(| S%{tdެT S\4!ZVHt# $_kO1ё:uG+~_>7˭;bC6\ͭ1%)*XxS;Bm.p|gPT(!ls y4|3edu/harvard/hul/ois/jhove/module/pdf/PdfArray.classS[OAv`Y&zAl[* --ja YݦlWhP->o$"a[%Bfsf|ߜ9LJz0*q2|HԢNBj8!蓡<%iasV981:k.C蜾kE״ #:96!D'3C:jڬ^X 9mhi:6䊖sڍ9< ᦪjt's@ɔ3L]$]qW>)ȮsiY=ӞÞl C" F9! v!ߡ :q^$Z.NO<ñC߿Mjѭ`IqI 2b 2480k]ӱJ,GՆl9)^EH coD2 e']DCv(x'tHРe3,-|ްi:[:No/5S=N;E 5NX==:vZqZtm4:#`Y=&&LF>[F`N2[G^/#8YC^N9JxW1* M"\x .-ALXD.@GԐQ`R*RkU(ѕXRF}йxh v&*¥_m!sd8qkDpjE3HTKXBiѶki46֒l /,AzM"'u8;TRFrPK F|$>s_k-8edu/harvard/hul/ois/jhove/module/pdf/PdfDictionary.classRMo@};q8MR$iBNHA"HET傶lpȱ#H( !(`1Us43~;:Q4p9J30qEeJY\ņ2 \W27-e+ |i=1< D/]<`H[ Y6VV&,qyBs$v·x7t'6?бy:ϬG=4"0LQ\TZ 5#D%d{.j$-3,+o<z"]RP?L0kb-/V6q]kXgĎlsz;zq?h<T>o'[Ѣ 'TrfMqX",Mc6MhitJљOv4zqV蟀G/cd#$ #Wc\3) a,ǰ5**A~6a$1Vb\P1Cw0еxlŇzb' YPK F|$>d7edu/harvard/hul/ois/jhove/module/pdf/PdfException.classJAƿ]Wm+eYujPFEPt+K;RAAtPՙ\LH"g`|sΜyx}pbϰ%Ê V51hMϲz"``5X3n˰[f蚼pv~i񆤫tqaTow WAqjA9L"פ~"/4 >edu/harvard/hul/ois/jhove/module/pdf/PdfFlateInputStream.classV]pUnv϶M K)mmR Qh hJi -EBɖl ㌎Nfx`RG'|^gߵc=gwMg{=svßЍ؀#~lĄ~HY1gH0 I0 ?Vpҏ&RbƋ,[M yo]d(1f8g"s/gvN ^'zTLg/sxv*|<+GyC.HI3eZeHzOEK.DON茙*eh.5IMN'i3R_.oHaD\@ILJd3OEXO<3hdm4%:GKm$$UC}O7-뙒!AT;zvbXi3Z[q#0xoS/Z7Zԓ1}2cX#ENљ;:=/$/-(xMq x9p*#19 f(*+y 7` U\0 U(*UgxR`ݿt&3D63Q8e1]ئQlKBxZ~+/ wfP~1~8M{nZjaWFz6ŝCŢD}ءQnv#v(ݚE:4詿,#?n`;;,Nzz._%5=aI+%"#b‘9B:B< wàYxf7ai*CC=CCmj Dht6 U<դmQl˪-^Gab|xJ"̢U k6'f9ϖ*fz2IX)ëD}|@ rQWS@%8\ Iiv]r76Zy$9T>B ni+׬{Dܐ|j3+jqF:__8"Enk /ur߁Bsyzp-4͐lL}Nw]{ɡ+hirb1.ȢKh(uW%~r#NMt5kחDžTn#ɇ]Cq_íqy:'l_aVl]FviU7 m2Fy'^5P/[G\l=;/nN7d3=c6z.HTӟBumYt]zZ/^ѻrًK3?d Re˖Ņ1='S4ES_c]K|y,ίy5U4__c24gKn5pR**CQcP06Yc=\, 9G, 5c&D&gUm>g޷Rz<e4Q9 hYQliK9gf*hBo(5"/#&.>aq]h^k,jkOͽvV$~l[ZQPK G|$>qf9edu/harvard/hul/ois/jhove/module/pdf/PdfIndirectObj.classRKK#A*w&>~:=*)K'dd8#ٙ<Y[=*zn;s01aXÈWcyd1^&3` j-U7ڒ);Vŝ7=&ʉDS;f-Z͠~Dή>DpBɪT^(o끣 ,Y)nYdS&zD]&cfL| +'~C3g33aLXx_a[*9 )Cw-گ6*P#i}դ ֊0kU;yڅi@7X7ϷqHGA68Ĥ?f2j¸AVcQ҇rs_E>k8c̏s~`4@&PK F|$>ƙB*->edu/harvard/hul/ois/jhove/module/pdf/PdfInvalidException.classQN1=_tcx,\h\h\`X5pű r$.?"FcқsNOo/U k=lbx,LNfRFC:LsAX@_Xt|JG,NYhR-'t<ҩOCA#>7^YHIb64I?W"ꩁ6*\,x*.*"8\*z*ew"JVe?<{4I`s6o[(1X6S 9S@@f {snn!-ٸ`zv /I+3:g8<>PK G|$>ZW/4@edu/harvard/hul/ois/jhove/module/pdf/PdfMalformedException.classQN@B? 7B=DQ-mJi|-/6P]h QK˗ٟW{شPIJ P3Q7NP>(eHq c܉ 8W=PPrb@ [3fΐgڸzI /IN'PK F|$>̚A4edu/harvard/hul/ois/jhove/module/pdf/PdfObject.classmN0KJea ČXP`bE)qVi$O i| gLv`Hc'6Nl8y(C30_ L[t}Bɠ#Y_K 5edu/harvard/hul/ois/jhove/module/pdf/PdfProfile.classVSUd-B! (/* ҢO*.Ɇ,d >9c_|)><чJgq@Z<9ss7=>A82v z1.;B\bB&qEVd Y=SRs5W2Up͜yO ZѶ.MmKSM.QEvta虓fkY>հ%8Sevf3 ;Πƚ%J& qj8ǘXP5;~ cWS 3ˮ=WuU3c O#[i"Wd7;zIM[{ uup㡮iװ aRCZQ2'ܥDj {&IHx)aC3۽X[/z_+B+L#RE|pHJНJUe]ykBChW=\ꕢ*c$qxp .pH N0COQ]IOx %7:8YB@"]0VOhw PK F|$>*oJ*:edu/harvard/hul/ois/jhove/module/pdf/PdfSimpleObject.class[oAå mKK[RkŮZ/4>ƄxbK]~?(M|02eb2sfw\f~vep#9[R2BH{KF† Yo-a3U9 :o1dsUl]jQ\mZkrWՒk 1C.5 X( =K DFj)nғeO׸-FN\ʗa)u:уcx!+Jv.%\=l|F#0$Xe˙S$(|B/"YNxG=BC%Z` t""/cM ANjiHO$v:s& * QN~2-D@`7 PK F|$> 4edu/harvard/hul/ois/jhove/module/pdf/PdfStream.classWSWvY6+`,QV$6Ro (5%Y`1̅؋_u/3%LOPk P}Δaso76pJ,/e@ `PEpUQW96u]0G\E *p^E)U4"1,r(pL*xCdS*㒠[x[; .srZD!4©L4pbJ<Þ#ofzvĕ379g+Sc :]D;Pi8{{[L`P^B |w[<^kHE)}R%%i*0ׅb&ENQmGEby=~>O҇A@PgWQP%U[]U,\OQj_IfqQQWJ?o,}fb)dXxrozS|;5KC;hxKpR*ue64| +-qvA6~=(CpnqO1 j7y  rr "Skf) 3(ї"_T%&]H&9 j14.\ Hzr$Mep=%S:DE(k8U ?*e1VOMP ]pWii@/3TڕAX'a##\@m|g=ɂaL:ovEi9g^2aA.le sejBAO#S^mr\}jۥ uN Jdži([k]8O[riȕ"|'uH5pZ*:u]ØO*El"5jrfc>~|h>ՊxOnϓ>7i3 me"6_Q̃j u|'mPZ"ڂlE [=[ݓς0vϡ>v0Jto5?R8^wG*v1(F=P%nBD9qܽ 2NiBL{{ ? y5edu/harvard/hul/ois/jhove/module/pdf/PdfStrings.classRksD=u$R*GR@!MKKCM4] _dio n~ 3Q]WOH3gW=jwxq+*K6&apOq.k=.}·*aP# BCkxD8$MxN ^ ]rpit~8<'婊O ,[ÚW?{^Ӯu7mjVVsVSU ]x"0Rv>78LHƹ vʝ9H;'s:Џ-l܏T6Uu\mC'S5p|O"pw^\\LoI53]6gr=I 8)i)%p<.U8\q;HQr]ER/Wh(,|4A LUrΠjQ?M3T'C籯u faSWnŅzi@yL&Ɉ}IG% DgumnhWcw? 8rd"#鞅ǗH[S̷ _l]7fla Vy~%/S?b^S] zsכ^.x]^TYjJ^zh ,\0h2dp¸jWm{35ʹt3tE|dZ|dk2M{p_ReGhrH;9q~2iPK G|$>wM7edu/harvard/hul/ois/jhove/module/pdf/PdfXMPSource.classTkOA=V] (HѲmI4&bИ >SSnvg&e}XL5n2w{3s2ֱۧ`IM*HDZ-VQ1KҬ)0x %aCq4Mñ|q 0\nJC:|a9.MVj IT]sL>`H >0bT0вC9 =qLn 7gFv/]M1D32mS3 `n;lϦW. җmcasoCVuiHsWC 3.\pW4l>Cz@]an55Cq܋& H?|X&Sq{#Tlvt Fq9b:"=izQz$y1AaR`@edu/harvard/hul/ois/jhove/module/pdf/RunLengthFilterStream.class;o>#..fvvvNF6̼;F IJD|}ϼҒ\k0FTVFԔRĢĢbTҜT4<Լ ̜"Y 0 H0(20@ HyB@q& ͦq#XPK F|$>~00edu/harvard/hul/ois/jhove/module/pdf/State.classYwZU $lmlqnTIkk cfr %&gKsgK_H_/I$ė%2W$fJdI䈯KoHoJoIoKߑ'+@|Ob2eGď%l'Ug5 5%:DxEIҋѴeS {kު^4Fg16:^16kkFkwSp) f̬ڿ/j%e#|"$b̖z(nEh¢Ar,_ if*F|\O_ǎ_WP S͘tV=/ir'o2~T#jB^`n߮&<zS&R\Me"Q5>Pnprޱݮ3j'f?CEuh:{vk[S-SZ=gٛyR[n`ߚՖn h: iFq$8K1C(Ri ,E"G(P)Js K+eU BQQ8kuE BT8~`h#F)3IMK3hjf5sy͂fQ99Y\մ5+U͚Ylh6.(z@[UGTRB~GM=gT }[x*QF¶TOp}It+hh_\dKv}=~0ofaVogN؏~d؏? 8qdQg?>i'ϰG؟bOOPK G|$>-59edu/harvard/hul/ois/jhove/module/pdf/StdStructTypes.classmSU7$'i(@'kjc"h մ>m ,,qf{o}㛾Qgt3G=wXw&sw=s6?9epo , [zU-mۄww:apNxA$Gx #l ;]Eh> < |H"<$<"|L)asMhQw-=Q}8i"/ؿ0Qi^^BzaQWǎN(/[hճ;Gnnr蝬-. (qE {ESX ;;iXnG߬y}BqؓWv煁l6)Tlc+ D<֧s;׷!# Uek5nHFC K7&X OͦZKRE.c+ ]wύܠH4I׽8.8m+׉;ۑcľz'AwЉ}:{6g`)C?GGۇI˲8^o9*z: y&c#w#OPA_y\$$Υkz &$T~Dkd'_)H aߐR_P2JU"Wɪ.tgȴҜZVje9or\ZgV)Eagy$<#"pGgyL8eaDž#~ 1edu/harvard/hul/ois/jhove/module/pdf/Stream.classU[S[Uvn'94P(M"PԆ@R"Z.ŦɁȅ$/EVQC_x)8@;mq dfZ[[{u~mG,Ј쏯0>y/E> !AaA!(VL @ Պi3"**bET@EǬHDT#ѓ"RK|i xxՊDx:׼!Mo1c%6 33|Ԕ$86TAE`T#I%1 (/,'DNE|qUMs/"o643P2QiyNq?6Jf2`US FO9Sw<Δ d%%l6wL3ܖgYpun.؛y0Sɳcx3T4ݴt()gay"x.w\92ODPB27k:R %Qj)|- {rue=Q(]ߍȱ)ƦrBm1/Tl} |k) uNz~07g({}O#z J0y1y]"sD0QbANNN,P0_ޕ;P7A*Jz)5ɛV7g(JnV* S9g}r-0G3orK`wKc$%0icƥhʔƮV3k8vWQ47(ugؽHV8 $)Ǿ*/_F¹8yF:9HM%#[6^^Qz.`RO8,3%e%ea3^ȟltьz49Ewq*F>H& 8Y Wq4]g\ȵ r+,P%k&YɁxKY6s ]\(vcݛ#;?e8Lm.vۏt.PIʃTuxFkGAv(Y'܁ݰx6"tR0o:*Vh1ەkh An6PK G|$>ރb<edu/harvard/hul/ois/jhove/module/pdf/StreamInputStream.classRnQ]gqжx[0Pj!&BmcM`Z`3?7?&>~πM_/{u.k_  &%x`!)̪ieLrq9Q{-ɰP9r|~U&  tz02jKva!^:^a7]n_4鹢o QH~K[n I]8?tA]J0y:]ؒQ996$zEJ.C,)1?d7N`:Xk& [xfa3fyh 3$hRs*흊Y [*o\[c0w^H-j7ѐtbÛLn{^d'R联rKIZYyALMnI MBˎ{kawCCL!ƶ4V:Ln @:edu/harvard/hul/ois/jhove/module/pdf/StreamTokenizer.classTNA-)E 岀 x biwZMwۨO+3Bg1fΙ97m"чDbZf <χE)J$Ž09@vfwVSyΫzX3TKգC.Բ VqWzsy^8U ^b`oB9N ML6=u,I,D$eM5_My̰o떚f a[!VJ3qKY%vU|kۂ8:VԚz 8q'{yBH>[/iO!\E\*\F(V.KǍU- +͵+w1rby4t3fD5i`)PhL(<edu/harvard/hul/ois/jhove/module/pdf/StringValuedToken.classN@E:~&摐-m(h@Rrb;W (> 1v%l1wWΙ|}|8~v,7eb`>ERILԂ'" uix`Ms1?*e2N/o,~qys\Ab,vJ\u.nfR\F: &,cT<y-GU³(%Ȃ*1[&)64ZBJ6[e͏2R{{As6bBy^[^c~!FK{DR;|PK G|$>8t&> :;edu/harvard/hul/ois/jhove/module/pdf/StructureElement.classWy`a bQ S6!D jq;$C&qw6V+Z[mmjmK*xއ=PLfw]c{~1oOcI^[7x+nQq+g wx'Pp Rp {ߣ⽸[ޯ *t?>|T~ |+ ç|ZŅϪ*s|/_2ܧbgx1_=𐂇3<µ>10exIS 3<%  _c:7UMo1zVe}1pbjI,9~I~)4#dBt"K dT]M¢W0  K_Y !(vxr%ߐyMPO I 7 o6mJ;S!Ɲr=4$L+m<)J7jI)[NKXPBQ I$&'%x5I :6hJ%1oB2vg?i؅ԞK\JE'mdCm]rDg^$U;1d\([Ml5n~@&8Tr;¸O2Xӕc5,pYj=2Xα:tXBSw2.P1i,%{gϼs@<}eQV;vaȇitvSU,xɵ i@Aywc&ǬT%j"K[:wUp1iH&8U D>R$9kqe-p-5g msv3do^3쬸dވ&q ̣? [~h !#$}ꅤk2)s @_gZvx'5< )=O8rpt!!ѕ!!j@BE@y> 0=>:9 ٛMf; xGiGhTRM} QV~^} ubwS1q*r$LØ1E1##V;7+|;a̡!\AU}8OX- n U12cs!\r2G r<$ x9ӉO ĥ52XX "71 s  '?zuo.Z͏V.r &\A'ȟLX6|f._}SKύ17*4M G $Y.,4Ak-X[)zOYY T@0p ``իzsP& ļD[X$b4 y+I Eꡌ`6EtŨ+xi,ƈW4L, Z[I~ #YxH(Y0!,S`0Lυq4WV0_#8edu/harvard/hul/ois/jhove/module/pdf/StructureTree.classWSW=x0D1*xºj<ʢageg#1/sinsR PU|*UoOb~ouQ,jg~~o NAc-QA<M<W@ccPȇ1"9"HBȆ9[) p4[AG&px'8N*X9PPS<)S%xp<`Sp Nj/Jr:L`hh3LtHG4[eQLGY#F=_ 0,n;hQӊvhInǍtz)f !߇4lrvqacoZI>AG舄R2m$f3m3ӎܘ$SoDK:=l5a$8hnȜ0u-N)tKO2sopqƭ+e >3} 7v*4tCsznqӱ3qD a'`Э"mT eb76C ֒UE0ts8ޖ|nUlGuXżKFl"TwU4nyچ=c0bfux[U6A:CA)#,Xp*a?l)D`U>f\QI+ 5ӢZ݊gzjma}fd6۶vBdT)æz3ag*>0_@/B=~_QM*t3 =MCS 1-1`F>krkVk&o٦VI +.PCQP…Ekw sw3q]ڙ?G U扖A%Aw\4f^:aǬln %_+1b&u&Qf̳q: ebApfL84/IC ``G &tf4gh2tfYe!#~!3AQx5]wBt[0c5#>^ICΝVMpkV(>̢GLzA#9iHyS˗f$QӺCq+< '0o82_M0GQ8#<վ >@!(-i*慽P)IM,Ld8ʅt '7e~#JPV {KLmspɱ c7+|O N>"r⌸pV⏡mr ,{ƦIBG+_?ݶd 0p #r%2Q6:'#r@=A]V:L+`2V5It&&;\ @6'^D68edu/harvard/hul/ois/jhove/module/pdf/TaggedProfile.classTmOA~n[ U-œ(PPLDƤYzvk ~ Bᛉ _v[1pxw;/3<3{_ QR#%0EAB 0F)Qt`⺲ӕE'ƕ(qb$AhFX›%9n*s1jmU-ۨ\_1fo:F\ N2OeBU+]$/ :W=V̳Z\2$&8G-JC+% qG]LQLk=p9V0` s,ךQV| bk ޫbfiG/K^s jXĒGkXVѺ7X&*vW.7ZG!# 2M@-gIk L6`2<K؀DM~`wm-C8r@?C-8uY`aex+%aϘe[sw%Ѭ6-֘r`'R\z6NtD˂ܒ]c00.o^ D]RQIFAR6ev,=@>@$N:Sx2Z.NT_9Jǚfv;HB7%i3xB0HqA~Q\<0Nt<ŐL'PK F|$>Z̫&0edu/harvard/hul/ois/jhove/module/pdf/Token.classP=K@}=TNZ"X(8]sWsi itqWx ѹp@{5P(m].AB*$O#593%ܝh'Q^LCmI$`R,ǂyˀi`SZ,"1e8&0NNw܄l-rCi+zkʝ>O9 x&tU3}~l|s̫c@^ %}^GOX  M yc g#upۚ12rVE~PK F|$>!'4edu/harvard/hul/ois/jhove/module/pdf/Tokenizer.classY @췻,0 7 '*(C#de?t ^9&M6=lF&-iM0wsM+1G6\M5vqA__~y3o޼ys|ɓOD3.9S:tA'?b MX]PbcH`C8 ' &RE"5.J)KM.ʢc0.ʦcHsXHx M2+35)2]hMqt:hbf5Ƴ.M 'ibSSj"E.SYLc.Q fpLMr']Y.0B-ؾLJI Q [΁+1a͏YXX[Ӭ-i6JcZkbVyc]%DQ):2Vk 5iVPrmr_W^YDeuN\PRYG(u-uNIhZ%J@KNAž^o9nAVo}G rkʛ+pxAZoo诛(Hj5͵uW!reUz)lU'(T {O2MU(Ty*Jըsɒ:oin>T$J˖yV"hpTXqVk;?(@Ae@ (B!̅0 .DPBF+VUVW".^,kE2/flˬ`G~?h/mi1"h7l@涎M ?DzJ10XL5cjjo;:66#3К_pl CQC:$7ü-mā.#l_ou L<l˯7 6BUfNjC0Fs`ɚ3e9vA]5V4=g&бa(wkĖ9@s~I'IHM˦jg]Y&plB0D#5U#pTl9x8>a>`cc \2[06Zu}ʐ 5v3V1 7:LӴJs}uqa7ݢ:9 .n [c_UG>Mlsbf[0iA~'2DԆtSɗB_My+S{ܷn#Na*}qGvP{\9 zC57 ܪ> _;;63}3NB)fW]'$J5x!Z[C ߚj*~wq۴WW.h])H׎-X]YZ-fwf#Ual͜*G'no X?F9/v<(u'ed&a)53^cL^ٹ}SGu7`wRM(A/Ҡ],gd}FqÎ>Gc0Vr\ s(<{U[Ǣu:q7euo'` Kl'+2\:`J y=@S/=ڦ鈴0σ9r 8k͙NInUmSMf;|6ZrvS IN"3L*=:MI ޓf ͪfN3rTqs1P@yKeеi9m6D9T^vGGK6T}'92-:%C룹QOhci@Т+vEFbGKuT{A.iZWCsbC!{=4/ac>Zky>*=>QC!o7/E>*IZ2fi=fxp)LMKckZ:9(N̿=t怽4 );6ڌ4ѻ*yeޣ7"bNEW?>OwvѬU/%)%߱X3*#W t\A?"g{haw |4͊B۲IΫwњ4}B=-T /whEءi+L=5kғ\#5P2[ɁY=zIéI7+c|2?;|2dGLs3μ6ύw~6?|(|24æy@gn(y f]8 |i>f77*8M|i1fn+1q!e6{[p&D7kZ /fZOV`7: ;VKG=7c'%iC}Q2S4O!Ed+X^`b>a٦^VJBsȄ.vlo+~ǩ9v>EwPg:E?4F/j؈fY,n۬ѣ' EҤ #YFe-2'gfN, EKR3 e-IFҝcP3|1JwtvR,KFp oCb}|!:n>_Esh+hs*z[k|~ ^Wݽ'3wwǺ^;C5M?uTFo:G 7&~kd |n:{ފ:o;џ``|1oKpy?JNw EE#ˈNOWb s.g蠭YʂIϒ7SbUdRn+qoֵ\~at94TNt1l?g1Q4gouuި۩hDx><;/ވsHHH;]oQg[K$$Xd-]>7G<̻)i[>;2t4VT.ބ&fklJHhl4hlv MjtHqJ'%]DtK70I&e20EK*S0p9&Ӏ28BfA1Pn9[^-/FAct!Pny X98ND98INN928EN\`NS4t9/8CΔ3,l9x< X( Ex<X,%8GΕs<|9@.. H.2`,zX..KX)+KR2 X%ղX#k>Z9`z`l6FrB+ \%WW5r p\ 0,d[v7-r p &  EK%M:]{1Ex{2MLbLX/=bJ}\*tOut(===Y;*na:u+5(e.Յjߩwbu:]3_ ? Fnݳ' 7C a a9_Bo00 a ̷C000A0a|^}!@0?a~#G!!̏A0?a~io!̿0 Ys?@a@0a>a~e+Ba~w? ̯A a~M[!@߅0 N3 B?01?O ̇!G G! ̟BCO@OB?4Aۤ^WUN5d)AN5eIs}M9ǟ> g/AΝ}]}6PK G|$>tQ h4edu/harvard/hul/ois/jhove/module/pdf/X1Profile.classWy|uj>9ʑ8cqa-m%dUp 'WR\JBBOh wuμ]OzfGxJ ثQsa7s oT]Ix?S,T.Wi»UGxi|U\ZnzAn>ďG4|>T)7$Oܬq+>g9n>`\CnSq;xxل0N|/Kl=*Uq*ݯTD*-萕keѡ\2Nd{p:Kў@]Mߒ󲖓$֡D'H$iWW:VlO5O%B#Px1ጝM21;۽YH<%W4EX@L7 Q#65s锕ٷvyK( Fw1uv*7‹Q#7;?Uҙ:~{Zۢ;uб;u`R/D>\@>#uwC@E]t.vZ#4܋`J:C#vGMzWQISQ7yT7̀Qǜ1?Gc~湝<cA&vH朅c3EYZ^߄щdIBHOYf2Q) )R^C,o=R "PNQpk ٠_TUSCs$cxWK;]4]E.COh'v5L4o,$ESf&3ǩ%Kg&Z&'vL Dm9ߏ~ F DCSw֤q?I5I\j*fK"Vj$͖X႕t 5#>mdS'q ;)[WoŵfpjLcGՐqIGUqiMr"ܤ$el7ITF'5Zo@7Io:OyqY*_Zhh*/F2)G鋀yADR"Y\r:SS+8S%O/bj_#X`P46CSPa}-ۖƂWPqG#$0MS@mnTw,D] ٝxuNW!pG'*dܪ8|Th1ԙɫTcU{voaE-&Uз~F9 y{2gB N/=DjPpNc]o#t(1Hlm.K3۹T̘wN0(GM!Ta'wm3ҭE@,2!Ac3W${XwW0:EQDr:/uY^ۤt@ P-)H euX Bk}{h E9yFW}uF;.M4o\TiKZ5X/kbP諤%IitehDyϸUőC8һou?8NPp= W Q!o& U>'PK G|$>Y5edu/harvard/hul/ois/jhove/module/pdf/X1aProfile.classS[OAe(XP z o bHۘK3vtqmv ~/D}Gϴc0gs篯iXY(⸡ 2:Xm6 <0dUrEϭێŰkѐ^WzhtJ6ܮ%q,6rd<[ '^Lam&%+jA"֜궥 [ ł;/kd,;G i2P_*lNr 1KgX5-<ˑ:rܚ 4edu/harvard/hul/ois/jhove/module/pdf/X2Profile.classVk{~ǒ=Հ@[QbH(2 㘺47YݕQ-_蝆%@A!@y~F' 3>Μ9\v߾ʫF9F؉15ϛǴI;_P!5ܥ5m =*/p  E! 7vGp4  jp9<7l ZhD"TC㘁86籕c7ǞD0warBm8Բȡ5lH+#W.cRM]\<&ґzL]7{^ʞ\Ö\<_Ɠ\GԶ[`+ 8H4edu/harvard/hul/ois/jhove/module/pdf/X3Profile.classVk{G~ǒ5դI՘nJ `vI r։b[cD*+c r+PH \̥UHB1_ Zsf%[$ ׏ IS6`K̰ڬ98@ R8gb7<5KXc&L,Xy^OH|LŧM|59肁K|A1}N dZRf,o:3Wg\Ϝs̼;]ۙ!j=)=N;}+psg<GZZskU&&E4$uR~ĉ\ϐ5kW~MIS ~KSxC{[/yuX'5AuSx eѯpW0?* lU+MKE`(b00Ya3V%^U J~f@':7Zg}TZ~p=֝^3T~R3OD$7(WVz;6O]|H0IY$2mi Qa"{*b:Hb_ ]610kǬʻM[ZP K-7RX=Pvafт;:Y̡ۘуrtz 40B[AlQfNw·&4v n4LFI+_occ>W =Qa_r>v'"h =e4}^ dUQ')FH/ ˶,(# sh23z^ƶpw2meǚGʸ4y#]A^Y܆]h2N->-ѧe?Nifz6aD3nHxhCR!me48زp)ۇ; ɷWHeT;6BH޹y٘Neh(vTt ϦW(oL5^=^;V;KxgVd]d-)c Q #Nkam 328OD S D¸P Za$RrIjm?.١Ɠ. 3k5d@D*'{ OP U@xy9-O5-ioGEh|T\a<W$z"!q~w]C1u)GZX?ԥIu$Y5v*6"FD6}X}Q~}A4~lnn.S'-ypb,nPK G|$>Xu3 7edu/harvard/hul/ois/jhove/module/pdf/XProfileBase.classW x\Ưyw&/K_ئjZf@& ͘bYK%y,aMIq׺/P!mKU Jx}of"%|_rϹ۹g9oT[p]=x5axC F ox5 =wbn c/n`)7jx>(p˾Y`B`-~ d8m |Jg>+9;tNL[Ô=|_E|{øpx2W&0-pLxUoi@oV*P oWy<O -+Ց[+z6v[b먙eStk.Z3T1m[oWvR$9lgs];]fk̎9y;;ީs̡ s,i(V مgo[3VtY ,,K )ɛvʗƝMcle;57(oab9bUp.Lqf| 24j $ GL;[pJN}bN;V]0{=Gn^ɽ:.:M+qG ?#X̛ccVJOS>;3lnJ 0|F[&N\.g9y&/J 6 W(_EC kxTcs$C2[2BE¶3M|&"öыK [w2}^Up;ښd/ECr+E8ʀs6'fze-:Gg:2 X@_,8& Hl{f3vŸ2)}AG_/9%LБ Ht396iRq -qOI*n)t/x/LֵDLcRRIHl))Dm]֐Uw7rg:•22/fĴe=ږn'\եB[V4i g]fV֜m]VUͳ?M(PՍM/?(Is- jH{LIֳSZh>#{b w lg5ʕ#{oY D`_gA!+met/ěS3ϥwYq*y}Nܿ^nO)J !yFFH%[ twj\nl#wj1#H63MU&K3S漹-ƦTJ9&rѤ=HEWJ{K"eՃq'#.]C>&%UBR Z 7^Ev-~u{4y; Q:|)1#8(DO\3NcIDF$fTY]%Ce m&B>uG{7`t $u 3 3!oiIiii[8:p$,QW6PА7u$G$u]49'aDèx5iE`.4b\K˞]M8]T/j,#%C@ &;s-4#+g].q6At`^ˁH,@4Px8/]-ꅺUBw5Jhߴ.|{FԻ.j1ZFKE4'ۄqNDxn8y\0|yg兡ڛ&UϻO(y(%BF,Hz+0eIZRS,אv(S ?%q)>ReJ9\ i\H Sc"Olu3ttf~l$H*kԵI4 5(-WnJ1(6Gfu/2OaD9.&jypʸQgl$;7QuhJ.+WRm @eIhM~ ǒѹ5D9}jo\ G7P*'i%vVw:3*כ1NO3?隆hV}L>\.*FAvtK #ƭ`t P;3e:WgS2=^7㈺]1x/c56Q苩QcSD_(!U6x4.]$x] G'LJ؃z$]N19M;"fFi deHsdxOsnq8pMHPK G|$>&edu/harvard/hul/ois/jhove/module/tiff/PK F|$>NZE3edu/harvard/hul/ois/jhove/module/tiff/ExifIFD.classZ `[C[϶,#( eQ-#IFmY2r h4 jCB3'G ofvvvv']%4)Q64$MGބdHf!-s0$du$G 9QH"Yh$ 9VaǕIx.5';^anZY[)[,W%hw ̇]DF-Crl`+Q`'#?zu`!C/|@AC&jG!tL$F[|`됯t-336v;|`|l^B.B=$ v K|e] 6"`W"! c?*OLk\kۄیzn@ $,%؍`F~`7# [`[vk vJol+mmG~`w" v v76w!G{'w/nĴ!=G('d#CcHG8Ihmz ZWP$  -}[R$(r{xs  r84}M}l"e%Êr$Hl(S84Ø67Ft%0M 8 E88b8F U{0j$hw6Kx9H@r>>/"y 1/c$*57JgxDSB>e /!_1$ yG1w ``OYW`B{`_[B`0_ `_  'S\pVW ^"xe ^!MJW ^-xൂONz' AI dO@`|o|M|- ~ >O/H|?Zc?V?^p͂o#xm/+O]; %Tx—Rzw~Oᡄz))sǢd(\j(?%i.ꠤ*q3 zz=` @iζ%JIgu:)r\tSR$]idtn_gݢZ=]tX 8RW{7L ofuqZ>cy ̺: Q;<0̴|~TZ[] m]ζ "ÉqQR:ww㇉u))ձgA6eUY)irTHG&%n_2 *d@N]KzLliclҫoegA9 alWӳn}L.+ϊ;lB7.Kų|}Op^_pC.!Zrww {SyUT-=ͮv\c<8X̰}:b47F'&up×~-W@.+Ł.nKHKg xxnK7 6W2+IeW7BkBs"@2.XMFFNJ8 [n.QTn& *(S+P [FK3@2SV%6=}r\36X4 +5,f@3 QENDTod̛M zC#Z<9׌SvtP(&34 '6[X4]%Z"a,uI-(#>Eh2@xp4.+Uq7.-^E`&Iqoh"k~-CzCI-Zƒd )̷*3>9 -ۯ i--=z EV`@ ֨W[Xp$5Cg^rl#֯aҸ+&m 8w J jH‘LDwstxƱP]&oz#EdK[ȨǬ7)h8Q7X,5Н> a 'bMǔF%{(=ےj-KjáuܽY;z>1o]Y)K27E`3Ø~HLy"lDܡ8~D&e:(M7AK|pc$F35MP5A6}!y4$@W :vy$n5zLMbtipŵNŀ-a,0[5E~ɴJS)ZŪMTDMhqwlRX;Nj͡H(::dqg7H ű œ#xqY{'(3, !xC@-w,%͍Ku\i#@l~&cp~Ecî>X*\E+CijqT:%ָb>\ aU C"WqQ8=T v{͏9:_BuPB7 -s ÇͺqhzdN;,"x?Xl(Lz]dRޢeg]&Sg>}MƕK4HgMpe"i-UYSTzJA(=vaUq>瑼%]\пP&$яU ?# "#7b0UfaV GWkq9:ٝ+7?I'SB1JܙY7ћUz{*}ނoB/kJRy1 WĒ?tV_ OIhE_8m=UTܑTD&T'8?;UU+[ *%/Qbu$? }mTyJ_ 5WP/ƍ]ɭ Tz, i*LnKB`fKZU釐202RPQst7 +sK:>#xƗ:*}q7J%UjVs;1l;Q~ʭrӪt+J|^EϥJF{RԭJ?ޯ5_7)sJJcp5^*}Vf3 +KoƷLQRHW*xǐ/ܝS VdzǤlV)z-{5 &A-j|W+tZږ-Uzf Sdn}IaXO4Z Ձ<JǾ{)!2m+ 2@bDe q(H,xx<‡U吂CV߭_{'QS?]qPy| _u|R|-p|aʿfgU~?W!WuÿWPx})WxPF9 S ci Gk~ :U~!T~1+Ǹ/e=9bMY=RX"WxM)D,#eP:֦7M/+Œ5Þ>kh,׊PܫԨf7fQ4ׂ5,0#†|&&4ӉoD,)_PؗzƝ_:<ςQMȵklƨ&ь}=јlZ}A'cGʈ}MlڽA}И/9g_}xKCQ87Li>+ KdFbk9:t²?oZ(Qrdp9AA'ߺEr Bx:¡0sy_$6ڿ>+&BC>aA{t681wsx:a:%S)s ;/ b|˜󎒖-gVIyGV65[ԼȍGHHzM0hӔ%F;(9DZ3$FbT +/hSJ:&|N N0hT_MG?lddsd({d`j\Uf G3$T%$Z$& ֐ ZQ69Fiu8 ?Q)ڿ*ok e+H`~s+ [:)Qa(|{ަ>Y.G<VӘG^!Akw|AxdG`AOx:]zqau.(gYI?U/T cki4.:s{bM'EcjqY CA- {gH#p,ַx^Rc܃tpd%K2ټ>zŨ dzZ(~Zi86tc"=KiKaBKBѨ|]'r:keg?g]o1yr<B##'pm`PdLa,ѝx1+gOt}6)4JcKD:BO'1{ ~p҄xԄƄք_΄ބ| [&|;3Mx+o[c7>˄ l9&YIY1p꽏pq8֕6ZYh[t۬dcֶeumYhZY{vl椾CWtb3G!`@?3X@o,I~w&Asf e Q.ωjXIdl(NQ+BQ}QT@?Lj6Fr#}? cd8H&_1sN{Ʊ3M=zQl\+b3GQnlu#s6 xgn`{P1rNP1r^rC&f`b>c䂜ފce9Ky^͜yA/>D\l;M0|_11wȕ9ZCCl('c{$GyU&UWgRu9UO=F~̑sHA^1syו=%Y0Ylkt?'Osߺg]CC [h ~XqW  ŸR+-zrZ]VYU5PWCb 3ԽFcYjK"ג ]Z@XG\C(YߴLr4;͎);oZ[)M[IRʽM 0hjj[ )}Lv.2 nb(MzRZC?4LuطvSa^*zaCX:;ĝ[+U~WaREy*Utþ`7uLQ@wkRi](bho&[5ų7vo(=AwOONJ3UTWx)OIY?s/Й)s󥤬;+l R8/8 )ka߽LLAS?$e?TpSV[VՔ#HY69,g;PY?^A2e9a~M2a)Taaڼ˧rot؟Dt龻`_?[ع-a@RaNM+S |-Mq᰿$W)rabNKYNZI_86686b}녞K1Fa)t,l01E8o>kyW(;l"d'Ow>:\U):찿_8dG;}F' wNp?ʣiKh<)I{Q<訤F7B/zeSS\"ׂݟݵ)Ȍi^ k/M5`Y 7gNH6YI3m{PA>A> Ϸ/j kA?rbq;oӉk2Ua H u ''Oq%<9LĞs :1m샜 s` )+zC'm. _ z&e2c4l@Qj6f(;s+7n#{mP8޺*JgmjRVE9"]XFH] f8u \gtBkHQE- ')uenRYoMԢ1)Rlzc [El@a=uւЋPtI9 ,ʂNMp%!N(l2US7VK" bV}EJv ]CZV%C;B v`V%`*ZTQ5pnY->eHM1lʥMEZEm*ZQ= @T=je G(90i[5HIVlh0i&qr)rqpЕ{?U*O9ZC(ӥIgH3Yٺ9Ja`VÁn.VQEfGG>B`Ut*z4ĶVa`!SdS|=#le>VTـ [b[=$@UhZakjyV:m>Uնza#wLαza%2wn0VcXH+jVmj̰W='n3ܡgSϰOp   w^gxԐƜZ+2`bebKdbKebU2r JXLlLlLlLlLX\Jr#BcI2'8EDcG(W*N}7ZsVDeA]/hˀ xP<#̱% ;#6edu/harvard/hul/ois/jhove/module/tiff/GPSInfoIFD.classX x~ϲC!.`pb+e4Q"K,BKhzpWznJ!I  h{_/oo̼saC)x*3s+xgcg+x*LSpW+x(xR Fܬ Fܢ[)M8q N(8Ta`db6y.iV .%<a7 0K8l=CPǦ;dlr"61Ƒ|nwKVx$Km&[؋ ]5욜[~\7j협uvL.-Nd*b_$_2R$;ؙ[zx4ܞ'xA?yG'H vɩhtT"(q$\$4M,fX|l4h6EK͞aw3l 1Fijǐv!: oG*)w h$5TI{זRѼN8tRrvw)M%&G$EGS['YXD42G&="~lr"}bkvQ6s<]fߗ>Φssb!DN5n. M {ps,4K͕7D*{֯++n*3o$Ztf3Ec!h9Ң5n F<C-O.ƬN *g( {l~n4S0f8+V1Qd^Fb"h^6U6-+ܴo6W8G3|jTtxESHʸQܛHHr{=>k!hpB2{#W̤te"lTk,pMvAfܹ|dؒv@i(6q gJ\i͂o`wHiC(޶>{ܥn_l\WWʭT6޲,^8yˈ޾iE UOKîVᓊ#*m'lkq,ZHZeâAm$![AĦGdh<6(f`y}w>U: УgSKt3K˒/*00m6.0tE/1xU<|AAVϱ0F7T8KJ*6bs,Y~{>p a~{al>ʾ0ocp G^n|ߎp`͖x&ߘAcaώ9s}*G5wR&;kTǜyS ׸ҬXEqArXlT;nU~A1A _/VJ|/ŗrJū*QZNހRVU/h/)ef{n.Y.,: Ƕ_rcoRf|@c!pf>KYcHNT Tf^p)oIMyX>;r朣 upfOtнa`g+K|Uy@O/,99 W*aCILRN^& _zv`wX q<}7BкH"ZEfv3v=D*:M=ƎJUkz%W^YVkE_Zà/劖wU0ueTU^ NaE}}H;P^7RHƫ:Z$ 4F' '`eW'J;bȞmfdVw mV6}Xg",uE[[!lYFlQhˢvWE2[lm̶ͶȬVw5y[]y̖+Cp ʺ&7=YۢY&lQ6MtN[9n)A?aoH9Y{_Y݇R'wX_'-7G8CgA=kCУw+`_{w.juݵmt0}׵A@k(ع kkvdRueۨk]UͦM:̚Z]ˠ5ZkU}YsuTՇ̚[uլZ_1ϣKYԵl3kԵ|YӪkZM^W5kטך_Uie:kltx*u/5tZ3v2tدkGXuzMU{WL0utMVךoœ5U0RkM{:KKkAY֝8{6sm'_,|_} qvlp_OK/t靶w|@?PK G|$>O{4o:edu/harvard/hul/ois/jhove/module/tiff/GeoTiffStrings.class}|E%%uL %VzXI[6qD@{G=QpЎkpyGmWo3yfy]k>tCCCdn遁Z.E2.G d*NF^܀܄܂܆܁܅܃ǿxxGxx'8INBiAYCy^@K+kx7x xw!> !?F'!?G_!1 k~o"#_"{B?!g|_G!o5@AC (hiMf@3Y@ ZA5Am<͡5C Am h-жm- m[hMmGh;A.vݡm2)ZEEŠšAkm*=moh@~6 th3̈́6 fC;Z' mк%̓6hIh -h@v(àm)#-v$zBKZm%UZhyh A[m= 6B(hGC+@v cxh'@;INv Sthg@;YΆv\N΃v> ]"hCڥ.v9+] *hWCڵЮv=&h7Cڭnv;; .hwCڽv?Tr=QhA{О9N硽^UhA!סMhoA{;ޅ#hA{>ch?Sh?C_B}~~ShAо{h_A?B?C }о?0  A`0 4Ah́f LZ-m0-0ll  L@1 @0 Lf3Yl@880,B`XtK#e@ X@XV~`5r`-A`X6MQ@NNNNNNNN........nnnnnnnn^~  xxxx xxx>!c'O?~1 k7o__g/7_o?o7@AC (裡k݀nB>z# tnCo>xCo>[o }+[Cz'B};Cw3] }7CdSB@BACoT{B /}g@ }φ~ NA?swAO@}>ГB_}1% PA?RG@_H)ˡ@z tJ諠C_ = =} Bzo QЏ^> B?O~" B? π~& B?/~!_ B Я~%_ Bo~# B ~' B ? B П$? B_/B _*נ߀& BB1@)Aϡ/ ?k迁[迃)Ϡ _B= пWwOo_BF  ?`1FƁa0L10hA0lM0cs0B0&F -alckD`lc{;N0v ]acw{ c VQ1qm0at cO{>0aL1 3âq0 Øc.. `̇FB`,!0a 0X ` #c900V胑X c~ada`FAC0Xc068 0 0aX8 0NqaT80΄qa\80.qa\R0qa\Z 0nqaV0qa^0a<Qx0a<Yx 0~E/x+0^x0ބa]?a|C??39_%_'0~ 70~ w0>a|K?#?370 o00 _0 ?0 [l釹Q0G X:L ӂ9X00 8anf[l%̭`n saœs`ns; 0w+`saN 33 33 f;Sa s/{0?i0Üs&Y090;a`s`΅3s0L\s0<f7CapKas#a`.f }030+as5,509s:an&G<f0c` 8<0Oy2S` 4<0ςy6s` < m^Ʌ0/y1K`^ 2ü0y5k`^ :ü0oy3[` 6ü0y7{` >|00G`> 1|04g`> 9|`%/|0_C|0߂6w` G0߃>`~00#? +aoa0?9/`~ 0'__a a?a aa~ ;X |65 hXX~Ke2aY Va5k23\.dSƁj_Ct/ZqzAgp7{.'U*3g*Ew5-~ؓΊ3w:dݹ׈֥)$+~n-Hw/ lΘyΆt񚜓Q\t`:/z\nPtNၡFqPZuV8iTVd)fOWǝ^G揚dW MxlvT~@I9YWP.`u1Y39q9C0(V?M lffXL-ij';4(tO.+.0Ή͜+X3L:\1\kӬ~g@7[;SԠsk=40OOYDpjq=E uxRkWוZ,wROTPmmbl+\'qWn(1%\f;gw`vrļTG&=-:5tuj ʋ{h{8ջRtj1`[{X0/l{ n.8vI-WbM9\6=~Rq󁊟 Kbߛ󩁁U“ƦdSZ2g`uLyDihm8CZU|8bӓldGsٳNEmBS[]U8} 4{{ٝGO=-ݘ&B@Ӗr}FRMs9|jpHL4QZƧTl:/OޡT>%b5=:=ߗ.U#zS|(:TYAe鹾` r kRQT(&''X1FfR} |1#ϧri9"|$ =7vvJJgh٩|O=1Mȧ=)gOsPxᦡp2Wdԁ3Ř9]Y~E'$X/:G4mf2v,YJ\NœTxF*yi3mdqgg'2pp6'h*W]*1RaڬE f!kMqd=+Î37AGԡ_O[#'=HT1X  KШ d9Ԛ5|@caL4HdDHڔY%5AB().|w[=:9$P/䙳BgrXN9mK#qan8^.dbA9_r1EY6*~*=%b8ʈAWS=)Q"up|`ZsgwB3)&dkV:E! "pQY%J D(\Ic1\s]$|@:qvs ҅[ `@: {LMb#WKrkknm,iWU[w͜]8q,jeSL[i<(׉fi2(jXJ欶b7VgRbAz *VU7v,cf skŰ={1nbX-FrѥusT+Ĭ,D+DM]?pٔE9ZNJ=,~" /&̫o_v{J1]\f1 Kz,pocnEՓDaM!o]CAP^qRc)֥2ޡPŒZYY3;|?805f7vD,Ȧ`-VZ;쀸To7+-3(ei'~Og1Q,gx"g=Z٪AMӳj[m]cYOSlکnXNj[SPmv6f3~+˻W3vb SPi[Ě$!W'wMbzV"Ck\dK@yAazdi'DΧR.MBҨ68[j9ftiDu+8k?kWZ-3w)\Ȅ͝]yaS1uX()kS` ģ#V̓M!+#DF̉1'>bNۈ9]0WVť\8 42r{de2)385wjNTJ˔t oV5C5bUQHo,ejqQX+ݺZE(VQ`QS`q֦rX3?Ղ1fTcm#o$J)v֡c) UE}IEXZ)} , L:kWVfG;<;V|wk\Sq^w֬q┽e.V#_[c+[eζMd4W5з+(OE% aYYPZmy砦 HrbJ򂫝\US:-oK^ʵ9bAFʝRt@O6T]XLXkW` LJ5Xت#*0c*0T` P*FQhZjeEjR(ш*ј+6%ڮD;X"SRae`MerrMnyN6 ˖N^j5->g.Gtd\ܤJ7˵ʕ\{͙zszVm \*]srC΀T*^ʗ;7w=偊]2 7J'344|fTS;=o_TVA]R5N˜sE8#7Whŋl~b]۪3y%Qv |<^N+6֮:Xyuc9[U`DFU`LU` lW*P(bQ1E\5 _5hDFhLƕhmWJ1jYL0vM*0*0*u:zt  7pÞHp yuu 8BGT#jЈ*ј^z:B:ytD0U7ZmK!P_^ݰkZr9_s~rkʜ9 zjΗp͜\WWjs\ӾU~MYӾLr|p=X\T%,w徼Apסהnrn.s@wFO56?O}R|%1NvʕQ[aqOW03*Ag S}f&eK6|2+_*zlUU|*pϮ#*0c*0η3o-A [UPsnףsR˅H{J*@ܑMtjKDR$gqy_pwK\Y5r̍Njy&~CSٍUg=.U1%ZwKh^ vֆwW{otץ*qr:oQV$?`j|q!XEJ+7I\gԅם;_]T(݅A}eFJoByUR Dɹe{S~{*w>Dek6Kylv`c,udXYb).ʽ3ڋu"_MH+01cר\"YfWR4ᕫh0J `cb1nsPYRUޭ%)1N}[ =Gd_ Nֽ?k;%s!8k,YΩ`wk\xߕ:|Plȕ^H,CXe߱.xU1Ož E*U<+Tn(W _nvGܨ'~ UY '+PʐwSPܰw>~UAoU '+UxW7Lu R R R^*xS(tym*CʵAJ@ NJ 冽 n*TuASWRgyF58Ij)Y50.߾걈*+6֮:\\ֶy lUU1Wm*]v@QD(bQ1ET"*FQD(bU1EU*FQQT(bU1Tb*F1QL(bS1T*FqQ\(bW1U*Fq)"qYU`1W`m ]u(0UT` lS*CET"*FQD(bQ1ET"*FQQT(bU1EU*FQQL(bS1Tb*F1QL(bW1U*FqQ\(bW1e NqhDFhLƕhmWJT׳[pD GpL pnWjX2fQYF,#j5ˈeD2fQYF,jQ5˨eT2fUYF,cj15˘eL2fSY,cj15˸e\2fWY,jq5˸e\RGEhU܈*ј+6%ڮD;ӧjU GpT p\ v5ܡ,#j5ˈeD2fQYF,#j5˨eT2fUYF,jQ5˨eT2fSY,cj15˘eL2fSY,jq5˸e\2fWY,jo ޣ()kS` CwCk *kpg(z@WnIVTy4h!*ʿ MvFr=B/J?4!o}y4@nacR1/eƹ_2i]_SwV͵xg^]O{b `QbPr^PY{}&cܥ>Gߛ=qOSڜjP䔧g"5e\u)➑Ee]ӫ-O磊=2Օs7V#~7~){Jb*I7)}X'&~î>̮&Ů>K<~gMBʪga6U'thwN9 }_Vb5si]|VRLUy3hw\kyѲjpQSK9!Qd+EWdESPMո"D=D6s)^OdYݙ`lBꢢ)[k#5њXq渭渽渣?iw^8Rs9kjk;j= pK҃Hq8Vsw#5њXq\9K3Ũ|Gx L.-߳2l2^GwFʚ:b ZGΊ9+6rV|䬶GS]˥b#fL!H:RFdH2#e>R_ } M  Aƺ/Oo-~- *Xa0e)JS(^X/qYOΥ?syþ (Y +p:8C~{!n/gֹa~aDLI,wctv/3k祯o)\~_ GD/w| [KL+JE'.OE):գiDM ȿC֟ʇ2ķ{ᄓ,œst>ܳQzK}e%KUE6Nvmg$LSbgjz0QEN&V ɮut7 ;Äu_+tg֕tw}ЍO(OлBޏzs}PyZ[ CO+jf8bނRw֪o 0aWW%DwmDt_Gtڝޫe'7[0rjgy>iq}^э~hs%žӕ)Vc-4u ؿQˉ5_sc}WiF]S:-ϭ'өҧd~k2-gő89uV܀tL*.Ƛs&֥' OOtV<;[(7Z22.5Yɉ+Ek60lhhآaB`(NkB`}`KǛJG.JåcJǖ+_:>t|bɥSJǧO+^:>t|f٥sJc?p^_qD >C]i!pa9oe(Ff%GJt]?jج{3{T{=:=$l$hеghߙ;?ohW4iݤ]vKt& ha6YNFI4)"IX4)&f,Mj& ,6hl\-jELd7즤8=N=^7n7԰C"5 "-D:nX{K6[4(m4ΒΖΑΕ+;" %;man؉IdcA6vGXnNpK q64mhxlCͲ 64*xe7!{NÍwn[p=>alj_&j|@q0!a6ƇiG QLDŽقfKj|R)aƧن&L -5>'Dj|^I0Qf{ f fG W 3B0Rp0Qp0S0/f2B!aZ)N ab(LiQ´Sha:(Xf*ٓfo '><^})x0QDaILL)̠̤i̢@3M39ႝ<SP\pRt ͣȨ,%$)x0 )x0(x0)x0K(x0P*a)x0RaNAx<((|/x$Rd[NAv R/MAvd ;_|VRo)η|Y (η|k)Η ;)7DAvud[OAv dHAvMd;|GS@Ava C$X 8 x  D $ d )||i||||Y|s(s)>()! (cR'l/O^L^Jl/#-y]Au%ْUdK^W-y]Cu-ْudK^ד-y@u#5m&jځŨ35 {pەnv簷 {e؛"^ {2Fd&ct2FO){ԶiHtH7iHC4Nt {H["Ҟ%ҭD=[4lwt[ N${Ht{K; hN|l/.vR EHۋEDCD:i}H#a"ڇ4f/i>Bm2GNt\{="vZ+D'HNWtJ3~δWtvN5"=^+N;/҃lt=$ҹ:vE7tQM"]`%Ҥ}H.E>FKcEz}HEz}HOI"]j,#SD>UGڧ4e."i}H"]a#>\fDt}HW߾HE/iξTkD־\y WtоJC"]g_#"`_'ҍ"d ңEz}H "o1Imlogs};ٜh$n6'9žͩ}lNgs3ٜi?,a6gۏ9~͹clγgs '\h?"i6ϰ~ͥsl.gs+~UKl_fs kW\gzln_gs7lm6ﰹM w9XPZ8y8,qY4i^'%Nz)q7HӼQJMR4%%NR4i)q8)q)qO$)qO)qO4)qO )qϔ,)qϖ)qϕ<)qϗ)qBS )%Nh/)qB{KGJоR'8iRΩK!%Nh8YR'4[JЁR: $%N`)qBs ͕'%%N(!%Nh8RHJJZ(%Nh8R№H:DJP8C &%Np)qBK !%Nh8# -'#%NWJPZJ )qB}R2R)qB+ '/%Nh8885RJK'4(%NhHJ:)qB m'QJ&)qBGI:ZJPAJа8c +%N8)qBK:AJЉRN't8S *%N4)qBK:CJЙRΒ't8s +%N<)qBK@JЅR.*JE(qB%N貢 ]^8+'teQ℮*JE(qB%N躢 ]_8'tcQn*JE(qB%N趢 ^8;'tQ,JE_g%"?VR{ȇRx)RRLJRk)/@|,'#H_ E~"_H?IO]R:)K|!ȗuRR|%/ȟRc)V|S"-JyߋRE)ϢWQ(EX/'}e?Bˡ,Zcr8R,!B2)Zb%%Br)ZzXhb%-B )ZXhHHвRUR,KвZ -9)ZHвV -R, J2$B:)ZKвAR,lb()dc[o &XnMFoM Ƿ&qk|㍷Pw&4xm&オ4xm&mBF95x.mm|7ɷ5G&62 c*0E/L|=`+_05(=`&!=`&%={ַmpLg|kk'Tq=}gw(Şݩس;{vY]i*mu;96'&p[6'Zd[6'mNl-ۜF9mNl+61Qzmh鵉İ1kJM'6q k'JM$6qkHM|(v^y{JyIXz%k"vWk1w,q`;_LB{%&Xw%&X.w/w=ZZC%,q`tKܥ$X.5wn KfFZ+MW*GR^MKyRRR9.,Jܥw]zFQ.=(q(q(qخ(q8(qEwY(qŊwY(q%}w~El]`Q.uQ.MQynQy^Q===Eڽ(qS{%njrq/5ګڻڧ.^.^ϔ.^Okq'ROCپ@2}2KپD#ؾLel_̑l_LkYqؾNlߠ*oR[YmdپCw)({ɳ}2l? )3ǔY'Yg#lbs9/)#˯(3cה9o(s /a}QQ%o4ex P>22%Ϡ /a}&ex (KX72<|%/H^2ٔmeb;2wOnN^)9<|qۂGr`%9-l"gK[mٚmmnKNDre;l#gہHv"gG;]ٙv7rve;9G|{q7#)p!/JN;9lLeFΞlx o*9|{qַ9g}{ķ9Ktqķ?9N#əv9IN'Yrf;{ə˶.qw09|sK%_9| r8.q7Kp\%[H%"r8.qɷKC&Pr8.#pr8.qw9=lw$9i)rV]NNr2l{8Kq̷c>r82p9p$o9|p&/K1_c5p%/Oo6HoC[G+\O+x@+xH_nU]GѪMf[UϰU|7w YciG'PI'RVsee='SVs ee{*en44i3(w|gR΢,MMY}Pm߹-)y;)Pl/^Da{ eR~2~r5r>WR*mjʍb{ FrQNc{=x@9퍔3D9͔B1loXQ r|wRN('ݔrrG99隆PN)'Caqrr?F99OPNɓ)q4f}rr?K99SN('ErrBGپJky_?_^_ޠ_ޤ_ޢ_ަ:Cku~#Z+{V^iZy?????<Ϗh@i@/hP^_ҠϿA?A9?A9/仺Ґ:Oig^/z9|AYG#||_O ҟH?6H3mk$7I^&yFu;%tO:J(? K9wT*py \3*p{ׯQ*u* *M*[ 61Thb; 6Ra< 6gKTyoSqxT~oNg3xxoA-Tۿ%xoET`oCa*ߖ <'Ro$*{*v*:ÿ#x߉ ^L]ݿ+xwwT߃ 5~}kל99^sܯ/z͹__s5~}kל59^s7ܯoz͹_s5~}kq~5~}kלC\87>:΍OsS87>:΍/sK87:΍os[87:΍漯?zy_:Α5Wyykk_^Z׼ֿ5_yyk15-ym^~^s_g3x} |l9לm&`Nf_b5+ly_a-^sN4s5Dללm69^s9}6k@y_cksz{5k6y~^aCa zÆzZaüaý6/{|<칳Tb~W~wSOn>՟|Hͧ5/|?Tjͧ=ͧK6/|O[i.26/|?Xc} @OZZBmi(R+0ͥKmK# FBh/P_jPP` 4Bi,8%ZL Ԙ:!&B(2uAh2uChUOeZBiamՋ@V/ дF*MS tB(5-`a$^RMKCh6-e,nrM д^BiE] 4VPqZBiU% VPsZBiME 4ֆк^Bi]e ևPwBiC 46PyBzS 7P{BiK 4B {[ B{G] 4vPB{W% vPBjOE 4PB-{_c?ӣ\9= $d!aC 3@HPAB:F!Pu$!aE CHHxQGAB:f1Pu$!!j SDH'AB:)O}$|!!l cLH(gA>9υ}$!!n_ sBHAݾ%/N7䥐!/ yy%UUטWC^g^yy-MuCfyy#]M7Cgy+CmC>fy'S]ϘwC>gy/K}Cf> [CCg> ]QHpAB{v۞$̶!= YHmAn{7?!2_|Z1_ U2_uhb7 [oC{1߁f t&>}Bgf~1 ԙBge~sh?٘_Bgg~5?ЁCd:'̟0:7ߡ 0a ]t(oh+0mS*@G2:ivfv03t4Ü: ::9#ts&h't"/939 tӡ 3gNftQlŘCg]9]9't)`̹0.˜s^4|CW`.]9sA̡UUà1CWgA` ]9 6.s4t=̱ 2C7bNnnœݔ݌ ݜ9 s!̅[1'Cf.݆(t[b혋CgN ݑt'ftg]KAwe. ݍ tw=AdN\7s>2W\Z3WA`= ЃkAa =0ÙA`=(УAan = 8㙛AO`n=$Г[AOan = 4әA`n=,г;Aa = )`|# /_ F0_-`|#/? F0_~+`#/ F0_/`V0_F5 Fkڀ:^0_{FL0_ #ufm0_g `#uvs#uׁ0_F`sF<0_煑:a.#ua #u0_`俎:F(0_;`俎:FX`俎:Fk'׉0_`v#u!  #u] F0_ #u =0_ץa.#uY#uy+]FJ0_W Ua修#uuk]FZ0_׆ua修#u}FF0_7 Man#us[FV0_ man#u{;FN0_w ]a#uw{F^0_}a#Z`#=F0_z(`#G= F0_z,`#'= F0_Oz*`俞# g= F0_ρz.`俞#F0_/z)`^# W F0_z-`^#7 F0_oz+`#w F0_z/`#}F0_(`># O} F0_,`>#/} FH俾DH俾DH俾DH俾DH俾DH俾DH~DH~DH~DH~DH~DH~DH~DH~DHDHDHDHDHDHDHDHD[D Ho D[D[o$fD"m&$ $Yo ّH @"m oHͅDH̓DۼH͇DH-D$D"m(oH C"m8omH俍@"m$okG"H俍A"m,oD$:D[oHMB"m!$F"m2o (o!8oSDH $oK!4o ,o!6 [[ [U[ Ց[5[ [u[ M ͑- m ] ݑ= }DHDہHDHDۡHDHDۑHDHD۱HDH保DۉH保DH保D۩H保DH保DۙH保DH保D۹H保DH]DۅH]DH]DۥH]DH]DەH]DH]D۵H]DH݀DۍH݄DH݂DۭH݆DH݁D۝H݅DH݃D۽H݇DH=DۃH=DH=DۣH=DH=DۓH=DH=D۳H=DH俽DۋH俽qeY z COfxQ f⡿ExQ G[q(u@zA[/qEQ n8 ĭD(^@z[qQ n}( ĭGxXFaGxQ 6$ öC@<(2 OS@<() o[@<(3 msD֋qQ n mDm(@`ދqQ 1$ #)Q 15 ##@<(< #o@' ģύ@<(; ģ* c(~U(c(ycxx=!>Iu`Rc(T(c{Q>6 GX1>6Xq>iu >"cuBI>6usV(U(z>.g8EY>bQu9>.xmy>b[uB>>(^zw\>/ }B|?W~ Q'P Nk|BZG;;|wFFMכ3 xg^o(Q;zwƻx]I;)UxgN}I;)BVQ~';G|bfQY|̻(8V{ X=]+ O{W(>]Q}λ{WC]QXɻwQD^(QHͻ)\W{7 鷼; o{w9szϻw;>xӇ|ȻO{ww>}ΧϼlwSn ՗Maʻ)V_{7o;~/n oM:RBjOZ(V$o>"gOYOY哢OB?>)d >9SO)9)Q2ſS}J>%3()<'O9!3(\S(IBN(S`;OWOSDT'2OB>5 ys((l(l(l(l=Q=Q؜{9Dl"ؼϽ=ϗ,=Q(=Q([{ϕ(ZiQ\7#e\6 p9Q9.\\\1 G D! F E1 G  D) F E9 G _D% _F _E5 _G  D- F E= G ?D# ?F ?E3 ?G  D+ F E; G D' F E7 G D/ F E? *4B04B0P4B004B0Hh`F3A/4B0F3Lh` h`0 !h`4B0Fh`0!G#h`0 h`0 B#`4B0 C#`4B0F P4B0hE#ah`0 ڸi aVXW/nmZ+^-JشȅM }Z[x 7?edu/harvard/hul/ois/jhove/module/tiff/GlobalParametersIFD.classWW-" mbl?:!@TI䴥VծJI[ڦWhI N[?Mtf%LOwf~3ޙ}׌>Lfdh"0Ǽ!2 0$X`r[`E%XͰQE /2$bك#/2KL+LkL.")[Q_L^fr̓n";+U IKnH)ᖄ~(G~,u ?S? OfV7rA ΪKe鴙1͞33[,jEK7)M- FE5h`.]̌6^h7 GCdH!3ojޞRxFXraX(961`M4'@E261 9dY3tTMQȠGv w "Q-S ΩE Ε[9sQ ƵB85cf03fn ,kBw?%5Dj6ewqOjz!AEsZxh)lJ%0ͅigp8OQFe>2>e|3L0(c9䬢dF0LTl64V+E&eo\d)L:)q~-lW Modo\V9%wxSjy[eE5՘TjNbxdX𖌷GŸe;2p*f+ sj/Zֳ`Hգ`I72-55hŢYTYE:6ܓ>>%l hJ*hi=kFf\P(3f)yV&f1ئ*d2ΘȈɪiK9;ɩ2cP)gt[S Ӳ d%! Z|= <"L"U"ѝU`D). m'e.[iը +rgL_9U @&mW1JSOr+ɯs=噣O%қTZ<{QƔ^aԼ_Sf5 K{}lwdzqmENP|2ܩ8UK2b ep0۱mY*˽:ؖc̲P3ʱP=_b/pbt# "p׉y-m09Z} c g*_D2N 93ٽZ׉ ݊bx< ~YRCrޘ;۷4BetG:zYێ4H" 5eYmmKFOf $oKí tF 譳-*vPLvQKu^uE/~zG?}қi(rd#ďcćkQc58qu^(D8N:{7m@4EF&pMsL9?zM H{hhxGzfӾ}Cns$h(s -;.R%#i =ml›\!lM]euđK7pYG;'*8-"qi\Ħ~/ӕHp}=twx ִ(`F+8zI\E7wqZAnс8n^AG&eqݩM^ cQC ޢ" x[91(3'j!᳘"3WRޏ%R.oO]xZŲ%g&o0r{ODDJOZ m^d}g%>`/\n/PK F|$>U_,/edu/harvard/hul/ois/jhove/module/tiff/IFD.class: xTܙ{grC$dH0 &$f8$#LjUI}Ԋ"PQKVmյuu辷T̝diyg_s'܆egpKoTp 0Q1V;*X,[8xHC9vY>M<ܬE[ي)Ka^nJأ ܣ ܧ>WTxK2~YƯ tkz7ۢChO\2E4rWD#D(XҬlSD~zmhDv6v7v- -A+-[VkiuV7҆%"պz{} [`U[G'[ZW"(N[wx3`Gpimhl660BFn^4pڀfZ|bimlh[S"VI -7jCޚ@".CpnmtCR}EcqZ_;״ Zi%74) hl D}KB۞iy-$fhmc8E8E Ŷb5}C5pƾVC":B4|Θ ic,ԃ0Ct"_W75کlܪ(b, '#W4O٩v9zDa!W6iAZ1Yf(CK@W~$r% 5nquIy&AL1wn bqRV~=˙H6ѺMH IkYD2*aL yQS cb uwׇ派+&z_sU(5?zV=2|mT7zi}XhGZ,6*PP?,l&l9yFvr?p?SQB>;mXJ uk1Uٌ1.#F-(HJ.ɐZ'CB,,)xu㘨&qYLlxt i#lCtݘ 2i0kFz̚ fˤE.<&Fn ~"ɳCƘ)g8|v/P/MF*TLM+UvwE}%߸_WN* wU8U8*<p;B9"n)wdܣx O* xUMx]hPVtҐsϾj*dg7Ux^"~_U|)bbӨi6j9]EC(GdD-4PIŦixo3C] юz$~(/қDWK7Mv*!+S>EߚHt[M{QeW^r*/S2>yFEuLFɜռX;J_,W褤4b]2D2,F[:eY)lecqYiO~qW4do ŇΠ_USz.tDb$r-қ裂ԟgL}%)3S&L_Ε8s~9Bܒt$f-R5h"сpDWW/LC,nr`1p{%ebJL I]&GqGq3{ gI&[?` ~&aG~ ~`jM._%1tE#t1%HtBqy+yu`eQTVkG: Rvl֣`AtR>  AQP+AQV]f<ߺ_DLK#RjڒV/gi !/~kY9~?2mONuZ>d[8vo| J+?]W s[ҫ=Vpk^(%6P7ƠxJOb&c&~ q,YXs&['Z˺HQ~c0-Ґ/_ujnsJI궏u^}8L9@~]^:yfOA4s`nZ+[k;ocpAp+I?95[ ?+ןFH M2weyY+܁uvmDT;GzJne8|!hqY`[/F:sq \4x3מOCǠ%z XA3!22laZȧP_+fyw)!PN? XgsK$LڳI[;.ǖ,bƲ)P)z@; KG~)N.ޯ '޻ {oԚ,)c.|"RG! ["nYhb9~=aXL/w!J,MUozyh-W{n-/\Iӎ汳cI ]e`R/a])>N2\|M=Ɛ뤙4ɑK.I> WI(uӍɎ*,@91s4BaV~ncs+}-Nڬu$5Hj!DHa)(7>6K 66SπyXZmeF| TKbD[ `< k)zY@jB1 Q%]f ,*廩DR걍5 '.s?,'SK8w[ryRo>.*ne 6µF@%St7zCEg̡D*o)aSwr STzOKe? BtY.Eހʲ#KQH#*GW/MG!ĝ&uSWAr؋|wPqs<&5+H3HI+ | 4( ehrY"; 6>Ѥ1p3y^2U! P8̹OY%J2xN<*H.23Euu:LO[ M)!+NcĬѹuuSP333R~y;<^4%6c6_A|zgZHb i >Aϰ18s x5GױǠ{7@6e$)*|NHHF/nK廟h_\hja3[[٭YE9$K@7=rdJr.YDdtOR;Sv̰âv6-C%I?KR lA@vc1f5 ?>a.i)W60.l$2'&yn6rdt:F1$Y(wLzWх15|Zv#u3*^fK?w18T"ӅGBtoKPPjJ(}gF1e*-۟)J,JYRR7.'M!5ƙҙ1Y m+3cIS*:zpđF")XzPG-H xü+"Ip}̖]lL% p9*ktMζ*4?6\1Zk%$= Zۖ|.Xl6߯ M~wi%hvK`]4jVW"\C͵5k{ vvNeghT\NM4nQu}\׺3p$PK F|$>UR?edu/harvard/hul/ois/jhove/module/tiff/InteroperabilityIFD.classUmWG~FuM*F/5h]vۘ$$עX ؗteXr`?I-zz`hwvg޹ dL  K2qW'|g\qȤPe!6_JH"aU0&ƤBn :hy؍qߨďD4L#{_;1|Y^"o?B |h7H?ÓXH^hb p3$h4&}`lrXl&obw=J~p5za#idMÄz1{_ja"3?/a,#qzރߢUGr&PK F|$>XƩ[9edu/harvard/hul/ois/jhove/module/tiff/TiffException.classmON@uebPhDE>r?EDࣀM-vvwfgo1Śن6ޭNө4*9%l.&q".3qe*Uf}IIsvF(n+#"&ׅj*&nI]HaTkNw(]~8\`-pͧ8bsP kXZl޷lV4`'btOK_PK G|$>+]Rl6edu/harvard/hul/ois/jhove/module/tiff/TiffFXBase.classToGƻIb %)Gd!PI` 9Mquw zhsiąK.H% PUUUfJP+}o?z `#x?>D0GF%0-ᰄ#>pTI8.ҋv=,ND3 [͹l-g e,e`@u;e `3 ZQ*WrŊElDg诵 ֬%eqıc3Ԝ[y` [}t^Իz{׹Wכݖھuӽ.[ﶄ؍^!f2_QcVk CD'pGxB' Fа{"'q0ӤpY si8+y,h8 pQC^BA娉,wowiч]R܆"km, "up eμe7^B!r wVE,WLORmri2snk<;}uZSipWo©d{t]fzo(0,?auTnvD-m/ Arbv^ >zvR?d1%K>'TDUI̪:L0V%~$&K#"DqB3"⛒Pr˴CTçߦn4u눦'<sd5l`Q^~sD5[Ea9"Iufe0/Tc)f?қ]H%+FF.N*S#OSkFݗJk)j_)a;DPK G|$>dbXI3edu/harvard/hul/ois/jhove/module/tiff/TiffIFD.class} |Վm9; $mVb[e'vŖc2wmci \@]PPh@ 7;;W!/vy3z3;o~!d4g_E_qȟxET H@%d'|CM-AJ čD(4$HT$H2d!F$I|$^$H Ib$%HJ!IHf dH D2IyH#Yd!EH#Yd)eH#9 $+($Fr4cAr,T#ARďI=$$kC҈ I3 $둴" !iCҎdH:t"لd3㑜D$]HNBFI7$$H"CEr2mHlG2$d)Hđ #AN$Fr*Ӑ $g"9 HAr.Q科ʟɅH.Br1K\;}>/WWPUȭk׺"z꾁oD7}4rf%(oRPOQϩEݿH1|q|4r}?u!~Qu?15My޽;~ѓ{~F ?`?Rs<^o/S+3uר/+u7M~ߦw]~ߧQ!|D'uP uϨs|~A_RW5o UUpQTqREꬸϊBJUҨU{J^LdQ%:ߠJUrG|xR@)O)E)JURBRDLJ9U*2*322*2*27MZ PMG\@TY$Blae1݃oK1e,ST9"M (+ңdUVh$Pe URM|EJ>4P%.Y(Ҥ.*MoFJ Uk+UڨҎlJU:*r{DKTJ*'SeU*TQe*Pe*q Se*;* 4N3L$gQlCyTCrU.EȻ*PG\F˩rUUT5ʵT*8rUnMTUOPfBQJۨC*?OQv*?ϩrU]TU=T/r/4N hݳgUҤsQ#r~dP !$|{ɣHCkT~MT@[^~-JA6|q<.Ƿ?eH@<$/] W9PoW:WG1*7!|ͿoF5Tyi:e+˛3dB[C]B 1} o"B\xǜ>F8 dTr>@OA ɿ /Ŋ9謫3@%J1S>A)    Ȕ0 (dTB-|æ:÷)s׍PFFLX\J!6Ŧf)Ws(~GD3:{?EAB{ԋ$SLERI1$Hʐ` ퟆ&$T Hf![h%lUH+#Yd!L H0ȣ BTJ Т4ZLYɖ#9Rd)t02tBB9F LsFgtJ$shiO"T]PX&K)]ZPJJ(JWQң)ŰXJGi55R꧴zJ( Pu6RD)4Hi )m4Di* nNJ7Q"=(vQzaJ1,ݔPB>JL6J)N1J)=!JSAANJwQS)=)=3)=ҳ)=s)==O^HE^L%^Jw()+)ҫ)k)Rz=7Pz#7Q=JOzBoHfc.olKD H$&6 oD7IԐuP"i&_c83N^gI`:j|M-Rr^M rJ!ljmVڸ 5@`cmD<5Fʄ PR7[kHZio75X2$ ^մZL3%jc:YF`$m Յm!@0k:W"Yz-=R72*6MY7:Z)Ьklge\_G  6(Vg"X"y-f_kM.PjD"`|  2`ti`PeCVb=*>,KK9oo!DrD~M{ Ȫmy50+,ȪazC{Ss!V_sZ\c}6kke9.\k/16m壡HIk5mA82h#gD-зZ;kZMXȱ&]q|umfC{·agjVV@ d% owy(!jak3iTQw[׌N SZpZmPfJ#GuX?aؓs;fgm5XS1+KM9`)sT*БڰQJ" P R!~'d-L3LU(ZֽဉJEVmţx0[tTAW-% `f~g@G7F%AZ9sWKll 75f.yO/l]l 4;]@שAQH2MHıĕ @Ai;22f%Mv 2^jno{\ڏ+"Ӑ};:=vd^t|\|3T/xzGOq?V1ˬ *8@j[a&lH$?IjԚvN%! ( 5!,JU&t1TWXK2ŶL-~_[  YX5{if)l_aSSՂ3 G8L ޝθfk=i*c[VV} >$oe1@ LSOM\ h(Q(PYPZ2iU1h(db=Ő"PWoAZk9Kwm Zϼ`U?^^,[&[ yo|ՁFV?ΝmzYl9)Ę9jB\Pue,BPF?czƺ<ō"\ЦDaD̄Ň91 %z'`m J0j`@7YbcDa ԰{Q Ӥ׊YB$a`P( P'0Y" L؉֍Ƥn ݼ%ly4qBv ]tZ{E`e{Ot dvNvbG!ڥF Ÿ"wsC"m6BL}CNjB NM6j_mG"aZ L4zڰ ?P88;pOx`5,Ja7Ǖ+#FsXdK5:qW-0+AtRAAc4Jm;cM\Yx*Ⱦ`;DLCg#g[1ꑫZ\=Q_dkku6@QĈM<;$¥PzXjh4afqV2k)Fٍz(1tf;&f*B]1#rs mJ Ʒb;n"1A3`D5 k4"Dⷺ dT7j`:׌+ n~τ qg02!_ `5]Jַ0 ;tNR&ȓD4FzFvz/EN,jHSd8>?k 347i=ؼvEVQ`_l8=2< Gp46>b=сQ#=}Pr#[uPOdZ'==20csFCA=ǬсPx`V3NxW5ti]Zbx!ʪ_iv[iԮޡH$ ,c-fÑӺYuzaFozt ⽑n==]&^dpO{86 " Qڵ%Sё0jQ%v6t GwDEm+:- ]\-,37J lrņ[U"C[#-t!a!tm[cCn:o,H @S >1d* k`ȅHS͉ BSF"6W y }c\l >!f x++ҏm;Cyهq(HKG.F-fK{VNcJכ1[5ߘ(i?'X/<2&iJk Vvs4gذ[o7]īk=[7 P5̓;B׬Ca8㐌Ig9* 6 clYύ][`0nc>bKd urTp oZ$[7AX8f&FHe)?]x`xIJRw-IKq5V%ܥXvXGX(fڛ[MŠR`Enc16pWn äm3<*f}f5!hAآi=D~yg0U,~ct K7':&kpd: 3w; lӷEcÑP7(>k$R]P],2h @OlWMs[jTq ʨBoU)4jAg2rbH\2qV @Ocl.$am*,Q%vH*|u>3pU:&@og#J2 I JXY`mך;Jm͝B sqKm;#2ݤsvܺiB((JX $.lX] %`&nZ degu1Dzm0O = =C6*{7#&^CF1>߽̘Z^P01dj3zX6~&ǛIRwN1I!Ǥc9؝P4v pX"@C@oM+$b̈́ 6449Ƣ`(e]67z5b\$Fmi y M]9l݆8̗Pd;R9lQ,m;kmHV@[a%mptQ#TC8PiAlO<7g#l 2|!+,| 6^+Ϳ;bt8s~>ӿ=Aզh[T^4[*6KoI \XP +, kJ,̩̽qy,)q.zgEAI}zl,]W¢mdӮR] v]+rBiA4sPU(#8V}{v|?pMS5kn mah\u[ZpzB:S?VO:_KT6.C?VILu'vPRޮҟҟH@r'K?-ѭ ؎s#nHwEr?א_7-$c_"={G$o"#" HFr,#q#Q!*|[ |i$ϸEty*t=ʳB$,vS%H"\y,Ƿ#WHB Ʒ]1ɱ8$>Hj"#CRIZI#&4ЌoA,P G؊$jCPB'@\ xO>WH^DŴ$eҏ?<S4LBޗie(FTEhPً 7UG{SΖrqCίؖo{_TXf^rso'~S]7op=d79}3yA/kҞɲ'MM}AJ>oO:KC'(*}>WT&x#}[FҶ _a@fYKΤ%t9pLM}\ oC;oU}pVJQM<˚tw6Xa8sJ[#;䣶h?.FY>'i! GXLEvlnolT H!-fS"o VLў0[oOַep+Eퟰ]6}4EW4YV5m轃}n]ϨnDfB_Od8 3vleRX$C 3uz'IYAe0r&7&jdR؄ҷ [hreld)%'I'@x,ڣP}BhSؐoW4. }f*g)x%y;Ba 0Ư0 @g&~-OllSd6sC_o$ csU&_\`(HyQ0O&|H>> p΀h=:`}L>M^#;Mcslh=#(e_U]XF/yv,JæIԓYNE]M]={zNY_ jR|L,p3S`铙b,v18#zFnFҙlv/Չs'?ϪN|h$9m4gLt]?g5%~7W]`y* R_ѯU =zGR=zq:KU#ǭzU=OtգT=YlՓis雪'ϓz3SQZI14_eHarTПHf`&YHfCq=sPP陫z< gr<0 cqhs!Z9.Fޥz"YYz@+<+Uϑw·v4#?zxU=ǡyHO ESz4 YdFLۄɚ=Aӂ{ZUOIv,|ۈoNL f$ߓW='xNLS`ӥzN@ߘo`m.I#=8b4WpOl'C+XrQs1- U=ݞv@l瀞,PWIWVĈ.7C+MugWMS:PG_}DUVV/h\Q@?%1~?ƶ,0 m ;HΓT軩-"(nO}S/XѦI;Įjad4|BY˺c7b)Fq;`Okf4Jzg8Vnjn< DaH()M,Y60,G.lU?de,e6bTfcPb 8apWnPZEő7|Kv8ʅXjx $csMxh mbL`H6O%ʦb -PTY^\g9bM[x)&ƚ 1acȀͼ7s8PG<4^46_`EVU< le;/bx7jOTQe|``ВPE"lr ,T]`KؾP["sSٱ)ʬo5Jsbs Gc3ߕegæB3ux=H%  1nCݰ%=35 PॷFAD|[:o}vj;fFSY/O7ٕyu+2TWϝuon/\rlLԻX9\|.Cua~cӎVd<2M_QVN։;^ B1q{zΐnAᎿ* javOM6Ykspo'C?^v}ɾV_' Ȃ%|v_ZpoZsgX<@evlu0?c+v-9pYL:ۛ[kkG@Y{ ؃ؓ|pdl@ eWvs$d#[xAeüԓapixƯDY&0/&w2HoYJ.6/Ja7n.. #*L3"4ty%mLIg"t#v-[=woWA7c}aܵePc5jd* pJ -kMTh-A ̤0]v.=[0qA:Ma,0~2n,\X[쪙ad%\taHW bC(f9V0{J 8Hϸ#HZͻ!^>p~h8q7PS 95Zp4^[FJ`"C[!y2/?L AdduO)0lbOAwzuZЕU32 >i`}s5`8MM2IӍ9g嵟pwCw 뛍SMho8BhH/z7Eu_RT-(g]'Κ-5Fqs׽fî<1b:ðqT-Ftb m7a(-~%Qցr>!Rٸ6PJGxǷ;oY}@ 0m _̪ow2<. zw6@fBduE 3C&f"3`9$.*X4Vv C5-n0kvLBt~ ~mC#aSK5m֗L+0fgbS|&8PkTv{V&ؚ@UBEvAf>jl|>cXD!ެsB0g{KSKk%f(fUYp$hb_Nomw_mZ;]ˎob=t$e^vT8ńHBgH2> p+O 3< l\)เ<|/P/K rxW>RG^%Հ1X Z5k\'z ^+uYA-^U!mnAw&o|O|$0-#^o'( pp O<$8a!w x7S||3||s|=>E%w||+|| k| z7F7 {/YoH?koOL?||n K_"S"x/y/uǞs+ǟ>̟UG_ Rp3{g'/  𓂼_?%?-A^~ջ=~x?_`-?&a%޿IN~ME_ u/~S%-z {B}??7?[nWe #1'8g\-t_ x_ 7J/r_CW( \[ +B  x`UGBW] 8G+S<p ƳTe p!g x69^x^"ी x9#J (Zc>OՀk\ /:nZÌn^Cn. 7 p7, w $ao-B*>Q xo"!qa<`!sSs qn!Oـ C |:X'!>tl|O,ċeG0+~IW x'`!t|wMi0Q?g^G!uF_q ,ī@WDžoExq1[| `!u\ `!u\: JB< O|`!>v>/;)Sݥko=\d{A9{>?ǞluÜQ|?z=ßy<\OyOq\Y|ӿ3*{?;./{>C?̟r/߿?_ ~}|/W\k$=%/2=]\.s}7*Ißi<]:]aL_K!p˟y<}>Oz\>˧r\qz2Οq9Vty{gsسR˞U(w}ʄWz&Y=Iۈ[lŕ[o5GlS5Rڊ V[q!|(6[qۊO6mئ71&nmSl1C۶IFϱ0ږXC|mɗ%cz|[.C|x!PF|!-[.4ėVHb߱-iFޗ/5^hB&l>_m۠gklVlZێ|:6 s .5}|Mj{>߶beF~`<#Ͷ^coM}!_`o-Bh}0Rȶ.2Rņ'%k/5ķ5}!mon;l3 ]6/7BF|!G_i)k#۶L&lzz[1_d- ʶ\kg+?`[ 6٦5ˏ؈; M1װAqqG [뛪%70z#71=F*dٔq"g Oڙ{!NR{ɏ'?v8/J:` 'EzŸ fB L4&JK=DIܟ"cd\Hc}NKMT8nhVԹg$(j)HR,p\c/c䯐림0$CE oZEI%߲P䆷3/c]({}3= B9tDL   0>i*,?E¿M.S?.Qa_Sap?SdQaVB|bɬ68;Iq5~fiN[W%\xtI_ul/ź~m*|c*|m*XAGee٥S*/U^^Z>kVEiˍ++aa0:<KwB݌)LQ X)bIIl~t $ 8s$GxDwNkT1I#BIJIj\8$~R̵X$Xm8]6Qf?ɜ<~Ep$UUT̮]+* K疕U._ߛїalg3 xGYmعfY'+:ILHkc"G >;sٷ?>+/\_\'-\2R 犴̣U^&HӈϫI5$ &ZgQY<(1#y==3!կH}RJva;EFI)vFoژ4&5[^sE kQeLZ/jTcFV^aYmͭ52 1]0!ebC qTppDǘ) 5\cjl5FQ2gr˜t>sj^$!sqKaeL-@ ٲԓR&깹Z \bY곷bR-<&m-{,K),zizn ЫB=,fWG qʘ4$h8E I *?&FƤ;Qcט[85f=զY]!4iUvD=wz , {={G-3S`U&>+'4)b'49)QOM7 v)eZz{R=zYt|Yп- RDKzA˵.J7-AZz{ ,KSXzIw!e2IW=DPCW& @R M\=&]#0PkK>wyˈJffyMHp~2͐*Gg * thAF9J( NnҋRD\+5d9kr%%A"܉?o&jEE9W1GoeM/?H-!_Yÿ{HyTl~~'}ar~A~ڼ m}8as ,C nc]< qȄVWId!IN5TDeVi/@Ӂ'[tj4*lYAfyXq5zXZ-Ƶ5GFZlگ'$-!A(ڣVj]t+]$Kk}H$V72@%ޯEq%>u@(oIĒvO>ZH|E=1l+5]a+++{㲲R<Aw8(@N(r>]wC59ה`_־҅+d ]|{ G J]qKI=䕃{z &aЯWxYRe>rQ\(?`mqY\OUU8զQ#%sKdP@W&?C\*mڦ*:.Mk[`eѦ-֨ԦeBvudZq[Oz=QqJ+9J"C^/}v1/*P޺Oz{lUy1H=)w\Jx/FV6~Rk0w'ieA0(d"ڛiB&9:*vIPq.-T\K>6ܐgLXeJ?iOCd.Aqҧb%Nj8jWz>zt;ldt=dQ2G+]LmtQs^^UJ*?<#MݿBjߊ LoW,/,x3 o`aUOA=0VdާًgB{I>a/ҧz/ ~gvJZ@yѴ]+Yu- e.2A'Ux/ *n6YIfo#l73_S t=㰋W;CЊEi8H;Z+>(h<`l(YkWd[516% K"ųtwB_Ĕ4Vϰ=Zk j% 9ܬI^֢{yY~9~͆2CWhE76jECbP88AR'2АFIcsz 9Z ;9‹QRe3/9\pi˕^Gɱ)4]2p3o$ Ď.C ky’CVͣM}tm ;Ц~v@a%Sf)=Y[kN8 ]NaH )ڔAUGG8Rd_kS/f&uڔٷ&H2GTM9%C *kXA+kriz/ i W{7Gd6~ocJc*܆߬W=jSTȕ*a71%+L=i uQh f -w'Z% ROaUX%5O+hhQO>1@5fѼ|FIiIkޟFEjBИn cn$Xä6=qiƄcfr+lsNҷLdh-g[ݭ!.\-ڔzRjFSz'{B~=h6 ]'V` >oU9.J-%XڗGjyJ`V_c ǢWØHQL8Ut ({qz&GX׍B뱛e6Eͅ趘ݷ(ؒI+6ZԦ38a)i{8A{Aک~d^m^ k=[o FHHHH0Ȭ0ISۆUsU\5CYP%{]FQHCLCuTm 06j9sIr]8B4w6XrNS?lxb/e$:H զ$CPOJD-zO'hʧ`ܰH=)os;r ^y(^{>^{7ylO5i ?,N6NFf-3fkJИin>M~ \`눎c4vVv&-OFWQm%>mcmVP/VzD<{AUN0^18Nj4y&9V)Ȇp5G |u k{A62J:ps4ha͇4tV~7x)FsXE {74WޡGi>Nh\ Ƽ^k_ -t@5盠pj^Ԥ9Fɉzڤ7k[SV9)*NOCPs2`b98ʪ7Ch?ƙ5kA,&h?v" ;7Eγm @NQs|6䨵'Gvh' z/TGO7X)wjgS;-.?NnlwjM`”m&&qYNIew&U K'E!o\4NN$~&]Fl&4B-Z5+ln FԭAjpWs\ә6q^w'k vXFǍvXD#s sMO8@X$*0$Ӿ7fOҽ󊪊Uesʋ+$N$\ce@_E~UC ~ET8K˧ 񽢢ieCsϨVצ ]_R}%`4~h~ߦi +]ŷ.r=Bks.W^{y*ƻU:Ǽ @JJx]NKaSaQae)i4xrL;N ,9ly| @v^^ċ=n~!^{EŹ99^#k㋴`& l^x_~~WJT^56vbyYibQ#YL+ ySa%QrV9%磳 kl'\Ķ?b/lUȹ[њgؐ+ӎ8@ހ;=Kwy@In/;mokr]%Ck9gArWO |1`q!0!}x-qTd&X;{>E?P C4L$O)Y2scH~ :{HIkԐ]=H@>" f |s, "-H,J[ŀ/dzDWڬ ? V˫gy"C$E*   T$ x$ DH1mX0dla":W;#FCC2tH@ҚZC7PkjZKo6RۊAjNlAYCyZe#4#?R67@j#62T\#}PK F|$>\97edu/harvard/hul/ois/jhove/module/tiff/TiffProfile.classVWWM%HBI)ֶ(DQJP%$l Ӷ﯇/ S=cf)&pߝ;̽/9 a .\.9w\&+^%EBR\1BqZ) %% VB4!PU26XN:a1eUbb2*AMI'QPӉAŔ!M1M,BE3_:2]4i)i뢢eN&"4FcBg }B'"pNOI6Ns ŗ$ p2yn.Ҋa6\<*c3Onv$X ^==r݆y좈ƒ"Y5bhF~?;*lYՋGt o3)U mK ;#@R؋Š.T<4dYq=l6U=7jKSǻ{) }al/ 7߬F4'8Mb4FA72?{}?R8 e ?K?A-]zFW hH^&i lدQ;PZg4۶/9?=/Kyu R4  ǥnȩ9]#y0!qC1}oÞ>/߸ٝJA܌5b8a=׼>5= ; xw;\U뮋w\ yøkoOivH^Q{;oHV]T~\W}FkSOoK]{ cx[--y;w6HwI W ŷ=ox*0]H**NV<9;=e+WLl[t&5nwR{p8t'  Slt(.pa:5qĽ\8OU PK G|$>[ӎ7=edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassB.classSISAL2& A1 (A [.jH'"g\&ȯ L a+ݚ;P{  WgF{oOP6mu}2ս t6 P_ #1:L Q_d W~XiUvPݪzd;!Sf̢?|tfͲ/5>(D<@Oly-$lA0*N8͂Vq6PK G|$>Ҝ' =edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassF.classT]se~vl7m&-Z44 E`Ԧ|m6B M w\8#\8֋ 83NeCDMKg@;>9=臟ƪx͏C pT1$}؛`:8֤Jl'm>:sS,βxSzŻYSٚQ0 # 4@i[wL`BɴV,Sx|d7%RL;qdoc te`ї}lH)x_(SeݶR8|HP~ 8O4\E pE>> Cװe yC ,|P*[XYT[eBMua+p44Y-0ݶ6%p腙cΙ5m+]ыƌy:ڕ^0n8W=Q֫D֩$spO>㡟 PnJƦj)tN\)láI#yk՞39 =s1FA QFeɨ{lZcjn Ϊ^祥vǭ]*aۦU8޷4oFSf!fQ1"-:qa1y? C%ϐ7vLϾ@R26&̎}?N9L nJ$$+*9FPMyxBxOҽdt!8_a(SHO xx(}#299erJX?}* pb!2smۅ|P&Įv\sq눻݆Ɔ\/ ,eS#"Z{<{Nȃqi}[/I"vM˷ NzŵQk 't!ҟ<@)\Et&Є k{&-8E69NAIӥ{I`/L*8`\DO<ѱOH, ">%#z^ PK G|$>ok->=edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassG.classSISAL2& (*Kw nD 6$83A#ȅG.*˲UIr)ׯNa2N0:pDE_ Fp ǃ?/a@ <8URq!4bXw!OePvA0D]n\ps]4LⓢPYNA/L6\q^z.L{Fgng=2ūs) gTЅC(wiXe7MOu{<PR prh qEU)]ujHK02&$Fs6/za=3mvKbJx=д@ju91O>\7Ug=ǰJ)%_'s@C;)[ɫbKO,L337'_On.{"m,iAY^@&2SJ>edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassIT.classRMo@}8%YZ' U j "8-:^p`o*p "q@p Y7=+}<>p8k✅,Džҧ.iኆEWM,1+c1)J|PɸY E e8M <Kdm  O k rW7>WM,ۘ CxJ=Rq XqSFUC u _uWgYpSjِY}8u/_hqh롄&rU!.⾦gTA&TFuܗts pGV2ul. #Rv$#{B%yx~HXMS=i:͒edKO` ȹI8Ah׾n+ =޽G\s]$ dƘ%ca9]gQy*PK G|$> U@edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITBL.classSMOQ=@;H)U ~@[tA $6iC,̓NiƟ6.,ʅ` RIn}}>X#?05aq;3n!b֏9{/,vѻ(QLB\Bt7!fU#횮ٕn,ly!ZЪACjUFPLV桦4jGuq.`[] TBRBJFSusSQ+lT-gӋ+Kl:YX"*۴ X}>2%x c28 +#ub ;~*mQ X_2Am6&k[Cԡ=@~ھhGAp@bV]);ު57|%B`BA&;vIʴ Dc7mKml, ʩIbMbqs'ZJfcչMôv)`MY jSǴ&[fU>'ﳑf7y@0fބH֭?Bedu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITBLP1.classTsUni`mZm+4DmjbD%M7qT|s3x^x08oBs6(:d{s=gOkgp.ƛxd )(fTd?ľY Ca]ekgEfK̖V>z  X\$SJޭIq ,ϒ~a%ݳlr&  7mݵ|^ݗzӭkoO7זSwʁYvlU̻Q k8UuݨdW z)74ܵťBJ*cZ {}+5|a~6`h46(i75Ub`að%W-rM7*RN`U3.ݲ|hu)f!}%@p7utz9,,0џТϟt_%d DVW6-~duf˓o+kpJ 7pS5@z95N}cѳs{r%뾴];d-2wu&]M;ݯqQԬS;.mzkn5lұ&4ʗHcX#MM^p%*gq xn!X *+yw7/BTɥ+ ҬI9΀|#kktbDw_" AC g@yh3D7әm vLl)9SJdVy+L=i#~@6#:t@;hqG,a၇VxI).E )ŝh|TC CXYdy`F1فJ,QutFqUU^`H 5/PK G|$>S\@edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITBP.classS[OAv U ze"}dMڐ fvqmv c|_0ęnr9f9}*"1A cR87LqK4fT<+ma] t_$Ahl`]Ih`NC2mZoAy,hXĒXHd5䄛h/`Q5*k%%L2]h:dRv y\=}z@uzsV=μx/ EК%i-:@'1.`7s]n,O7DJ ۳g 9v{c ɑ_iD EMN!A>BLwt䤘 E88:{u',HR^\! 1,,_!d2_KcrwP+>A:4 +5~Eh$ |PK G|$>g)TZBedu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITBPP1.classTMsE}k}`؁8IQ` DLDKVb?L+\8rɅJEQႪ?܀{.޾33OcO.M)M6.!4 e"]ef0ƬQf7&; *T+HoڮR$+^[*"[ͮXw`;侚ە Pm9gîw(׎ianL#ϫIkQbS9`inofeVy)g6K7Wkky▎x]At6 hn}`KGd~Ȱvtcf̪jSq:,u|pdqkGܲ+Xwi<':*CP0qT%iG݇Pp;F#mA'ݑsF.G%LM~و~էY9mnx/HfrKdV L7>eiS/w(VH:'wW7o=fix 'S;?8tvKOr.U"}R~q, 4o{'ݰ&z|餟sh ו~g!EE,N!PD{@e x"n\:#E[(C&{@Y d Of'G8L`\F1$F*xgF)RZ85; G41ԱW;DLNʢO|$%oM3OPXJPU0lX_Bedu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITBPP2.classTKsEzĊ- y8! ,ec;`M*5҆ծ؇  G.p@(*'T_Qtro{f{f~_`_<.M)2;WT\ՐE 9<CGl]c`:[ uغ>Úu [cIJ}ے 2,В~c5=l _Vhtw$ mõ|Q=Fm40wno>WpekTco)80wv QܮŬY..\]X^__t9œ u|t|m% vt|ʰˮ;:V 85Tu|p`cT-|llj+ ^`鿩wͮh˲ DKBSEo(Ґ3{đ0lᴍzYN{:ݖKF6?G"yѩY=uoGv{}uxU&]:nv%i:H:1~FclAz5뱴];iu^P٣ \ RΎI/Le5EzImTm q1ľ6îtUN\Rb)Gzezar5Zc]A!R,+4YuU(&tscmWL<E>?4_aG1SĿE"dBJ0ՇA,^=ՃDzh$Ȍ'(?I(Hw6#( r9 > p.7;@edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITCT.classTYOQ.vaPl+օ:BdP&-vpfJID/>XcO>x.q :޳}goGYA8CG3"㘂0F AN rJ!!#qK ( Ɛ YeBm8ÐgWg4,ouM3n5Ѷ5ՆεSk\z]fw|\3%S22U !peM7r%c$W+#t1?==V1I!  GyLFQŌ ".,+*[dTy^GpΔltd0L3CϮMsq߬0jmVZZ>C&3+ Jiq AjwfsMJ).i"\6UQ2e?h[4 FnNSzKQ}i1Lt{0)>%IhM+-F5UwPrlǭvkCM#d`C2ʗ`Uvi7[Bedu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITCTP1.classT]Se~^BXP(PkUkJAd+!l[)~̒mݸz3x/LgU3_$ >{w_)9|ޏ70LTIDF2ftk 9g-K,-̰°mDVmHw[c~Ŗy`ϭUR7eXޡFUwm_JUvk+{C*=YuګJڕwUe\da^LǍb~:30YZZLhx75\e[C`i &Ca!`ⶆ;{ 2|ۿl}̚Yfu]f˜ X}EĔ֡W-g_/L|K~UlͿO;nWnezx?Á @7/Hh|x;YVۮsz I5I)N =e{tՓ'N\k~({aߖu𺞽oK߭6X{Hwm P AQ4̃hЊ/;It t|-5jԌ-w KH/GwLc&JBedu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITCTP2.classT[SV-cD1ʥiB4 F`RJbJQ/JRB/#cĖ\I_K@^Pg&szٵ ~h!ь>^=@0Q3Y\c])HŰEV K :2 CVKk>K,`iaaK*>lَJ$(Y"&}+-}[d^JJK?˫ǭھ~=zíRjU7v7FKU~uTTT| \d;;a^'Ra~%zc# njk ;ϰ- cOC!P`(Pb0q[%=C]g_nafbF`U;4oѰj2'bС!}쑘a 0w:RNmS`ly}uuIc_=߼ų+M;+Y&D%46}ul'|匭xnCRgʆHZcEzhsJ6sf%퇲.pq Sk-9־zGn΃ 4uijIP_`,z WhѭɷrAU4 X*[#1Y4d4[w@NA֭^I~גNLjJ"=7~ !|B&~BǮ૥$@%P!z+¹p؆OPf[fRǨwtPK G|$>FQ2@edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITFP.classT[sF=K qB DhBS`0<0xm+ؖGS?ѧ 83[Ʉ>Йv;~қptp*OBedu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITFPP1.classUSU]ɆBRjI6P)j@"IkSԺ$Xd3O>ڗ>Hg79uys{ٛ?)Tc8(Bg`dc KSah|1|0paanG,dc>Q[Vn J֮JkziIm޴j=\Ֆm:Sշ[5ݶ\}gޕzݮjRM-. )zf,5IgTUaKF.\A/dFF1?ͦ4|$0q%ʭs,i0p[ XVPPPbbKeX57VɰPӗnbfQ ٷu{Fܒ+3g tڃf$y};殩Ɩ^ pvKzt+,AL^vuXojdYkO⤾f?ˁP[S4MX%r }I/l۞]tt(rP}{ A9\Xz$k%Go"?q5ڵǺC_L'k76NwRE֮y]>C5)6J)a7UߐN~h5Hu=|.cO~qX9ʗ%_H4w#dTAAGO[ 3{O}'Y_gT*&گRmQ*;=_8]!.y%Kڻ~;`Կ˄I^"} *>PqbZD24bpYA PK G|$>(ASBedu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITFPP2.classTMSG}VZ^‡A1'A 6/(^d'R4ŒV")"'b~/9WR.b$ݻrpuxyw^E|LJxT5Da0ifq,Ca*| ^c:`k%U|زݴ}2"]%T@³|۫+^ujvgR6v-wrnn8g:h8v]]f~e)}O[kVlm%Lŧ*>1Ff>o|(fRf06]O7u\˜ @t+XcXGAG`(]|[αpa;,]Luyf9_,fm۞c6&}j@ז) _``uڷ1Jk7wH?]^ŵ[4iRבD~M1oQ[-0%f\BXjoj`>o fq$UKRPճig\LܡVkq7-:I!=\w#9=rsNfNS9A`s[jYS^a-Bl'+Aw*ߢUfpNT źՐ*V)5zB9Z-ҭGr<շT}9z.[ >p."3;"4BH"nf&@yhsDCkSG>}T^`/@edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITHC.classSr@}˖#+L kX$`:HH 8P{l+Ȓ7>K8U(pK@#*~_|- ,jñ8wc?ℊ849v6<{*4IJ3LjQɅ!9*&bsc"%C˯X/,s+M(76W6jMp-X¨-T sa~6se(5[ЮUL8# ‚aGi28>踀~ 0h qSTG4ftbN%\qE\.߽h7t,H&fv_Ӟ},.&3 =fWŲxwopN(TdQ<KRfz"~K ^n ސ33MKH;$U뱰#Z[kx$X0Q):~(vGEjSMSj: "h(ڮW)@mCcDϐJR^f}Mx+'f?EwH锭\^ .0:p $`dkDBOC鿕ކȫw.=ڂ Ż^J(;oEMj-$:҂דSRDJnvb{fI\JJ\(rjJڄRSoy\<x rt-*8´l}*qF|PK G|$>KRYBedu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITHCP1.classTsUn`Yll ZX!YIj/Z}pn.d>OKf|/>8NG_ʌϾ8z.Ptqsϯ{=?4b/Mb/KrQ+ Y,H _|.E K i򪄼RZpI&U).5 *6Tl2D, .3ҙk [ 3>,a ڲ6,K=Q-rnZq ֻ00̝ Snyoڂ.bK:s ΎaVw F9?6+F~}}-2<1,,orx o븂ӱwtHͻv%xOQ>I ['cԵ}߬yugXw}w6oxaɠ;Cb?͝Q >kw*-åۍvL-LvEOu7WjЉ'vxt z;N3ө[50[붅ri2ԸH_{h#m&4d2خ]j<*@ Wpm׫OT@>J)}³feen` "PIkv>_C ] PJ1S{ xuF8~-~~#BJR!1 'T~oE{gs HDzH)]GJ=L=N >S8ǣ[W#W%#cD}'6dqbgo 4SfABedu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITHCP2.classTKsEZi:ېc^X[&M8^,a BDIHݑ N7% (UEK\ݒ{ާ@fp9QYyĻxH[dĀ`)˰Ȱ. +:,2qXu  $=bF>)Hj/{*4uEu dXsݖxs)Ժ-h^wݝ7e- SwZ0q5XqwwwJ[.ί6֯mVW366e-X>oml#qڸgg6vqm|> 6 %/Q>=-Ene/_ \}p=mˆ*(-kRKۮmgH:-7=Em(x'#MPJ*,vHg '#Tj:h+⮺Va'xij-t6e~/Z5kPEA֯h[_cjw{eC5g侮XH`t'ЇtnnWBG*׼A8 ݶlS'_sXJWa5p#k:8^i~.K(O+we&|eAdS# sMD&?.>q?/,8X4'Dg=$hP6z߬[x(`q|#>7 30]lpFb:Ʀ'ǸDIcsǘ$miOxدeqEL k̚zq1: )@7PK G|$>\@edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITLW.classSKOQn_3Lb Q)VG#i#Qfhoہig%C6,ݰqaI\hiC!y{?S a\1ԁ\°k #)1[\[HJ]oq͸ Y;sh9/c(A..Tu{2˺c-5fmiVI6 mejnQfU\VL%AgъfA[3(ZmwdDp`fZHVj~yh|"59ɸ)}'H Ö12<02pydd,oy3,x *2c'14V U &H=tIMU"uhW*A)V(yf+on;.3y*ɘiFlaO,Ѽ+kMwY- FmZelcj`I  ]7^tx]//6%K&Ĵ6>kcŊMHm6lBmuo߿֝K_4}aO %#grDɷ?xNG($CpY8aPK G|$>;Bedu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITLWP1.classT[oA\Z eU,ފAٖ]vR뛿/|ALidR3[j7o|g3ۻ-'" )8-‡3Ί8"[qsHpϟsk0Ap%L "j\% YB "hvUvEˬj:'byZiuZW\o鲩j\rìt*;Z*+cͫͲSvx\pCe%x~Q.&cJ0LMgt\B %Q-3`%L#-aO,w઄k.$d{-$p.r{V($~ F٦Pkt:jEuT%@z슔Cί몬FM.9f25dMݴ:`͎yhctbBscURM uV6N0arQD ާ4 &zK.ЧrϚtFvu1UE1j5-V*~+k6o: k%t#%2Ԩ9uc?[5*kuXVl6 HCa v|7$y6o [x7_XOc0F`{^p61m#5}G__hCt`hCrp_@y_^(]yH Q!Sh@x )`9ء:ouab`}ET CbD{G"U;PK G|$>\Bedu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITLWP2.classS[OA^, ""j/I6)U /3Sh\/֦OǾ/Sq4:Z!ͺݮ1QwGMFty2noEhΣXW[^w\R sH!Ԡ'g8IS pU "gboPK G|$>C1ɒ@edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITMP.classS]OA=ClY *(_!Bci6[ y)? $}2ƙhps;wן?GA.01aLಌ+ R0Kf&"{C7wKA=m ":Tt-Fi`uզ=n;K9fT&X_2AUwm EJ>E@=ڢphaTn7 ,8j$?\h =̼ muKyr.n1߷6Y cr v<.](V5Yj19L-hVu\l[vG0&2d@rx2"fh7I KFhiv}_~P6"چ1spT3v jNҥט%aTzPO"2p9v1}.ƹSb?ɸ sw PK G|$>eHΣBedu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITMPP1.classT[SV-0rmB6E1[oRbpCJeJeɕdL:3N&y3M+hiwvί $"]H*+HIE6Q:03\c1Luw9=fXeiaaA*>-XIg6E"|3K=/xey"*+u}Mmݵ|ޞ/[RX^Hmެ̻SPG^kJnI\nvv&cp VD@5,,S= bE>cXe3a]Ck@QC;oⶆ/0l3|n ,QF)_(f.0kUsWe`V6oj$%y?H3M6]x;/0t25}~7tPOu%|t?#RVW45J::nI߷\| {$Ya ܪƔ 'ehSV\,O-̵`ݗ_ۺ!}׮s-_!ϾKnA#He.Pgn/N*녏7MӮVLx4n[6Xr*eͬ+B~E'bt鵱[ݜj4NϵN#P9 d>tdҘiifE!GOEO :Н} MvȓM#r+AUˎ>rh D[sDٱb>ր6@眒RDoCʎ) tHk/Ht}K78 r\g::݃Q%@#$hQۥo."=ȶT,2qD*LPmdĺ 4q&ID-CMi>qأ,GQoVqEś"N@Is>k?PK G|$>KQBedu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITMPP2.classTSe}de#V$\BE x+l%$eldqw"/Lg/dƿ /lX}}|~η?~z /5NՅ$2󶊔FLZC cgva`bfȲ 5wf]昺<âT/[kv@D$P܊wll;Cד5Y{w`yciTJݑF`B@Xs~ɺHJ*>*. \*++YBv4eٙ٩pC%\8_ֱBt|U&nk:r y+3((1bMqa.6 _3joɱ|, ˚ fڕ9X+:M|ݷ,ñjF1P>}co&~`WHۿ (9a~AzEQIgV=[nSo=7p:S6ku@2½]%lY;q6|z*K,ilHulpTSɲlKTli]Ά^r3kl.jo?ěS-0GLͷzHUoݪQ?bljѶqZb8vϵNPd=7uY+ӕΙVUi%^57@w)DGD~/T:/fƞB9D4dWD[/2] B~u}y%AO*D#ec?k[%$V4љo%4I3RoQm'VWN"Fߡ{0|8 *dZ2,=%cCē1e=j51AU7q&.70qc #6Q=%̠_rgC@edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITSD.classSRAA0AAܒ 7(tIg&`Y@Qv'(E 7/ߎ>|0SCۈrME5Mo - " * &B 1aF#*FU(V"R2v.Xު,#K,[6 ݡn(mñwTNBedu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITSDP2.classTnU=7^{͆iB(m(88%I(P![BЭ}mo ~/-&6*w~Q#Nѡ1݅1Sɉ49GvaE_KN'4g2=edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassP.classTwEd۰-XZA-M34dqw'#x^|x%ro|nRN="w|s7wf̳yHb gqnxtM"lǣY9<y 1xdgᢉM|$x"do RNXwTXm:a9K|fU:vS2͎kNhnnlvq|kM-w]*ڔK& x*ݖZv|ҙ+0]Zr[J@ [O%eẅ" ʰưPb(cBx,ڙ~%jMiYZ loڽ쪺Vo]ik؛:pFjCۙ+~Hh"KQ쳫k0}^]CCjLv{7QeDT~= ~q"ڔ6Hc9PusO`Wu}OK&/pd{7Q4Zr{-PrQI=%{U[@!*x{ovoיj妯)zZ$cڑ }Z7=So1IMDc! 8A 8٧xx0_!y6&JHY$"Gfi2#]&sI2]#s$yr_2.RSFl|xvf.sr+fTi{lboVU ^u=edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassR.classSISAdL-IXF6Q(d rZI'313A#ŃXeY^$XV__=!Lц]8B+4thУ}rw\BTBLB\B> & NHkPÐaY6 hrL.LwLV/r(T,1]c d+0<33 _7K % #Fu-]aL$;)ng&$wj8Ӥ :J8:.H뢴.!#%2DŽH5S`yO0 w$CcfLIy^L g R5zA<V*7,nyl]^^x7mnj !if?" [씰ML^\4Ed iz~~y*S,N6t_jss:\N۞(0ھesCa@=ʚcUd1H /0Bv߀ś^#wc؇5/BSG(kPLm@@ړ%3T5d7MK} SZ6"c%lXDy|C%0д9Z#zDQx&}b@]Tf7gny7J\E5H-w7k8> Yk8PK G|$>| =edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassY.classTYSAlȑxx%XE &<"J&f7N/XeY*9^=HY^uOO= F۱R/ 8oOIKHHHJ0"a4LcRӥvX¸#*80mScS =!LdrobzsS2-2ųX+bERtgUX.RIL_J%n1t-c^Ψ-w,NPq\ 2ĦV=ӱ ;iw0 ,$4)e[$N %А„ἆ R(I5\0i qEC3"!'2|Vs 0Ys2Us\EC mKvWCwbav9E?x"""v,Uff]dkR£O,47w}CNݖ޽d`Tk?un/?d8ς:a?]ZIn䍊)񇨾QG7,s*nv(Z4&Mglv+쥝jcf36WqS-K? C<.Y8=}_Z5Й|n{ ߍav" O!x>Jnduz>z R;8$:R$FbKa[?HHhl(11mĔX)zc+ZL &\(Ҟ/#:ך;"ݾWS<Ϻ0/ȩحb ƈPK G|$>K:Y:edu/harvard/hul/ois/jhove/module/tiff/TiffProfileDLF.class[kAd5vֶKEZP4QL}&du{)%|C?@^| "g*3KZ圙s3g| .,pHa@ *qM&qcc!C-_xƠ?val:-!B~E6C#5NX[/;n3tحUY./6F6xU5H*Wݰ.} 1;-FB& 4!04n!,n$< i(a.bc:=sؤ2Ý31ybn+ڲ*`9>z] Z ܮ IUrW<edu/harvard/hul/ois/jhove/module/tiff/TiffProfileDLFBW.classRMo@}[;IZP>j HM X ā TQF:Fu̟@7"!ʕ߄k7Bav̼Op \l,qX>";dzG(f<%R{M`n#p$U\^v"|j&^@1M^; Ęy!}j6j{At^6.b`rY"H*m!W4tw(!Xw;"ÄxvYi(ȡwWm,<.Ӟ:[.X]#x6=7OH`i=^T7z!^W%<6ʆF RF3N;Iv6ѶD4M+Њ<P"L(ū+8-Z[u`^snFp ՉQ _ xfk[漵uB5A & fs<).g0KXPK G|$>XcWliAܾ9̗Ln 8ŅA$pQǥ<SD .ˆAÕ&q52"8G?5u <.BmA4AʧMUO4ktLz;kV6-K0LɛMXn W%oWhFLqq3$<.--̭[EʥFڞZ\!FEѶmUqjGY(֔P4!G!@Lq+ۘf}ebj>edu/harvard/hul/ois/jhove/module/tiff/TiffProfileDLFGray.classS]OA=CRJ ~_d11b ӄ @viv|?1_|7!&&39s__ǣ.JWG5#hB-f Vl;F0bKo@p[w bO3H6@[MF~3nq-n+z.ƚ]Ӣ^zMڦྐྵo3̔2+xMAv͔WHc`j,3a9;0Z3V)Vkex*kCrhU኶G;oPiԘǩ?1oP+KD9 (IQH@)9:'I<'M]GpP Ar3Pi6ufMzm/j+xUԱg}aw+͞f۴S4*dJ- sOjJ˼M~l:EšmVUM*)_ZԱ\FTSgsA 3۝|awS.vTC7 H 3j5g|z"CE\#'+|QZ5_}MlGm-MG7b4؉M>!QczJT@X}L*(t3p ftLgR'qLPK F|$>\xHGq>28VIXyhI=~1KKK׼!^1,#|,+KZFi!'v)?qI#d&G$[R . 5a ^q,s  bHNLPK F|$>J3?edu/harvard/hul/ois/jhove/module/tiff/TiffProfileDNGThumb.classRKo@654϶X !A+Pq [  pKMb*+};+[l8faN8iX8k+}zk $ Lh PeOd"Rp H" xGehۧ=CّZB *Pj&L%1U6 uRw^7-YXpۧ{Z Dt/ u*"% S|/gVc:b$Sѡq!%)ƂG"NUg6z 9edu/harvard/hul/ois/jhove/module/tiff/TiffProfileEP.classUsU?nv햦mCy)$-%bQ(M Ml%mr7YHv3~??3eƿ sv7#253s~w=9{揿~K`2 c)D8 ?=Mp!YiYd{  x``` G'݋ ְHP pu7y' Nd4%3g ^"x exEa1:Sipk8bpu'x1{ٕTUOYPVxaUZur ]Oe33S3t\V8ϚE\8 !%b6Iw$܎Ə8p02YE,ek(>'8cK-nк%e0A /ir{-ݖaAVc>5f/XlTȦmTk@0a./ 9z!<=4+3PvlE3w'Ek.gV$5QĹUwѦ07$A_- [kbCw/EXu$^NSgtsl. cݲ MVeG1av2uڲCyzMDzQ:s|7y6gF3s<Jy=x[J4u(SM؋];=}y1HT"׹ɧx / UF掃BvЧ`4]#?0#t F_Աtut }7!0v tc{]Ń%TtyH ۃi4AVeZ݅7PK G|$>k;edu/harvard/hul/ois/jhove/module/tiff/TiffProfileExif.classV[oE&ދl˱i Kǹ8vI)$n7@])w J/}Aĥ @j3N[h:ҙo囙3g~ /ĈQ?cp\* 7ĔO tJi!m!2BB 1/ɢ@ $i?Є~#/p^ŲZjY4*<75}COTj)u,Z`h7bf0> DY6t(+ Ӱkes'BQ,&r$A< SU9uaf(övvlVs)u5諗ZN_pʴU|݉2{H_GP&;b32''{zcc]M)הH/ %4@gM8z]NӰU !8J(k0X% Pe @@@uᲁ+6qUÇHC5 T_ç~w'aΐ|87l3w M˙}qT%u= Zѹ^PM[rWW2{"=W=>^mS~K&2Eܝ5 N}3 vZ6RR[(mTϰd^BSW6U*Q\46y].(H)q\;-mVL+[WI.^I[n^.!jvKí2w>mZ:umR1-1 >m =mX㞨\?(o|*n@p˻0Ѡ* B1/Umڅ$HW`MGEԓܑIf ;`qg4}!_6/l^P?B߁61L<50w5Ⱦ[ݿ 0׳mh;{m7i #: #m>edu/harvard/hul/ois/jhove/module/tiff/TiffProfileExifIFD.classSKo@6$uJpm^іWM*EjRTdlp`;QząK/Z$&:Q!-}Y?_b5,np $ܖpGB*XJ.%q?zDN|8;PP$;]s H-b;aϸ\~@Y hȃgAÃmkqG+Mߴ;}x`w;ހ^0;䭖]xC iDut2 s0J~9-!FYt[VˑdȭrYǣQFE x\rO ]:Cݶm{QΆ!oldBf.{קN@`¯FB :=>e9hESaQ8r1D%rZo!@N+N||8V}_j)Jvd |BdY%bKFzGPB3.Bc/XrR#I*QOeRa޲HLPK F|$> ,[@edu/harvard/hul/ois/jhove/module/tiff/TiffProfileExifThumb.classRMo@};vc\J(8A\ HZ)p@zoGdo.zAAB߄'H$vvwۙ7/±Pé46M~ւe +8g⼉  Zs^"K G`< 4@_NXp;(E(xG̳P*嶳΃X>dy@AL3Q(rd T0ޓG d;;혫mؘqlX8Fpk6B_Ej2ظk&۸gg6xO~4H 9~՟}'lh\aެNm26z\>E%;\IF@IPe<{N^"OaN}JjW%T&1#KPyԧEpWPI9 [ߠAUo}qW-M2~C}ucS;v%ɲH& PK G|$>`P58H:edu/harvard/hul/ois/jhove/module/tiff/TiffProfileFXC.classToUx7$iv>\ڐ)bp;P%~ƻ{襀J8  !NTwW>coޛٙ~pSxƏgɈ($bF 0! ./WyxAL boF.xEƫ FphDU lѰ֖az" xQBX3aǯ/Y㎱O%/D0te}E39}ȳ* l*O" C1" '%*@RśxKEJ%̫X(K6bYXSq9U\wpUݰ!tpa4?(K0=dnN֣~eɰTI 3DOuH-w7vtt@0-X<1o\.Óx>INgzG]shk鼤IH罚t4I7OSH=H_ʀ=KBтB٩Cn 9P#pWP{ {]rA:" e }4I[QyK.WI޽4^cu>moF:+'ݬ#0z&|a_пdoNڭ/$ZZP+H~D/2UyY GǞ}RHeExmU a>,:m㍻.:B2 רMt*}\OB!4 [oX2NK!!&Yhͳ?,1Bdag y?k PK G|$>ߡ :edu/harvard/hul/ois/jhove/module/tiff/TiffProfileFXF.classTAsD֖%[(&MlRqR iRJ qhi؊T\I G9@.¡f0epoemI}O?g'8$)7*"TTp//sȗUX⨦brt.st57Z!F}~@ )E@&4BD`D 8\SpA>kC<_ ݖŐ7m˯wls7mEwLoZzg]׷:wֶc遽W  #+ټY5usñ  V5z0fd>0i41PA `]ç0 45`i䦍[nQ >݂[/h 'f4L9!KVf۪Z2!VaÚu변alq1u{yukwc>qFɃ2m8L -=_xF'hhe[1}eI??]=mG] =f؎SZ7<ž+͎յϟwZ? D6R{ Ϻm3̃_1yӡ*rO)OW|W.5kvx;+8#6 :Txc` ᚞`ű]ċ]H? ;C%28`ӿ D}$r$, <#ǥ9Y,%q*)R{HjHRsm)S#ds$0*D1'=/b.9D76 wd)eL01ӌs1KdSS95WB)Kf\T 1/>xDTE]dxCdxSdx;ʐBH+x/dW^&3'$=t~/J1neoPK G|$>7PҚ:edu/harvard/hul/ois/jhove/module/tiff/TiffProfileFXJ.classTAoU덝q]-UҪ*diSJIim{mon\8pz?5BH=TQWQo{3? ` c()DQ*7w%ܬq ֹ[au6^!c<# (D` ~!4f M|'k .2s Ҫ1Үn4ft7kZD/֍ξםh}KMW6;yfU+7 Ooߪ飦kTP1mV+Jk6T]˫haKMl3X T>V vOE[E.z*0쩸  ap-WZk VtZ9!kWzϨ=!]ePwFM3!蚥{Zsao!30ƪ.ijIag՟cgx/ٖ˿" $%Z1=wp`?*)%V1\״vgIgUw:C'ٮTY<h"[Ǹo ۟3y ='¥ũc QEX!|=F˲RF')Og4RwBFHS+ 81Ӥy9 b2)pftoKf Tpi?-g>'苢⌨ 2, "Òp6Ȑt\m2'H( Qp\N>"'8&D6 PK G|$>0LC:edu/harvard/hul/ois/jhove/module/tiff/TiffProfileFXL.classTsD6-[Q'GPlJZʏR։C&69%*e$9nܸrBO8CLa q2PJ÷{{o߮?` [1^Ĭs*^h|]y oHJIKǼ,jpAޔ% tyK.x[; +N 2IJMقa2:"`vlY==VZXw[ޞڞs:Vx}9)X5;_n چwudp!]+ Lv ?Sx:}eP6WkP : E I(MRQֱ5ұ.͟H@UG ulpU Q. /h #+<|^&ȓ}=i`[s"~LjHD5bfJC1TqSy\i$j&I+ #aj34& #iI2e_A3 IiTPH &NI+OK,#dЎA%Jaˊ񻬘ˊٷG>>x? *m;FTq"'"ұʔb?4'a7I(vJxc8ۣ2sȨ839y_PK G|$>q Q:edu/harvard/hul/ois/jhove/module/tiff/TiffProfileFXM.classTKsTn(d4)ҔTqY+x!תV*B0]+Wt|e㉵HPG3\QŊnU@M:R:c]@-ױ6uqՓ+5sl.!uCЯvm^ؑ0rʠhnĐ]oؖgf%vg!TrLZ4ͣ)*%_ܰrut*:5L4wȇd '0Bh(J&%}䔉r I0O(OϐS wrh< ǩNI[D~.Q<g1>x}ę> *`9PK G|$>{WA:edu/harvard/hul/ois/jhove/module/tiff/TiffProfileFXS.classTMsT=/,[Q8)`- D%R i|Q@Kl"KFR2eş`S6ٰE Na')}MK~{߻OO!88 [s5{X4}籤J|XV袎}dc|Ч='_}njU/K R:XFM)z[F[aДKkݷ<Agz$gH{=с*T~MbA)d`? =s#dS=Ȓۘ;B6eCe$|҃q]?>w[^޷q{=g G[(*1Na J'rELR5x#ʥ)ٛKYԏԤO/H*(5p<SLk1 /PK G|$>[4>edu/harvard/hul/ois/jhove/module/tiff/TiffProfileGeoTIFF.classQOAn(*?Rn-(c= !Tibƃ@ge6?5`䢉1-3{{oOÝ u1A)̻Xp0L%n1䪵 ݑ s*LÞJ׫;3=atxosR~CɏtgKnUVY{0kb?ESHeYy)uj6+pJT&}׸Kʏs("]kTd(u"qCy`9E]o1̒McC%Z%`Xv6GPYٙJq`jjq rGatZ;s|l'ï:pr[Dd)BD|t%vFo..0bf }V.PK G|$>B&Aedu/harvard/hul/ois/jhove/module/tiff/TiffProfilePagemaker6.classSMoU={q>ДIBq)MJ!!MbZ,Ф~N== eEl$ɦ 6Eb Uޱ"ZP}ίx`t5 Gp)i u a8coabcg`xbbNoF5'zmv/1LexT2@OFɑݒShjA m׋VrugݖV-n95wT@lųoo.ڵVԣi8Wrޔ蘁+*0rst̒kxu9y9Ȱı,r>²<Ǹa&>1PhwSn2-0%Ugm Z켼 ۶U֊WwS{JI#P Y]6>t$eK4Z|ZǙ3{rݪrg{d֏*EM[eU'tML'̺eRoKo]\^R+K;ܕe. 8߉׺ F[%"X/z8ʚgK8}}_?$s} :=`<i8J FB e,"4rTz좃~9C`&L^]hރ18:L/m~lRKj-xRwB4%luiJh%2[tR]BPPҲp;[PlA'9h!SS0PL-DiM$LH)tL2:;}b(:2-TDQ|Om+8})KTf >cQA}4:}"/ q <~_g$!r 9\<+*_U~EQ#UADO &T Q1p}P&/PK G|$>u@edu/harvard/hul/ois/jhove/module/tiff/TiffProfilePhotoshop.classRn1=nL2h }* Ib!!U"T2e fd¦|@6,( |T3Dlxxqs>x.J(q"̻Xp覃[nDjU HݑBԇ^?p"yh3%5;P `Fv:om^\i~n;:H#կCEX Fcl^0ƒzXF%㸇VJ& H0<x?85>,IL*+Z&vU JZHDom1 mVk|lOTLֳbAS{Yqutd?}|nT8G`'tZW|<ْmF٬kg@KXr0!EPK G|$>]"$ >edu/harvard/hul/ois/jhove/module/tiff/TiffProfileRFC1314.classTRP]& ԠUm ^*Z Nm4mj/uqg? 2x>k9[GQ{; [ဆ8a'9dbfa0DH"paaL1 g7SQ,lIwjSlGS2fslj65WEiԜR˖gFvR:qG{3Ƭyϖ4Na@8ٓM8:8#0EY#QqAEq %\1pWud&qMr:(踎7^A>Hwk-̊I,)16Y蛺o.m+ƌ״ꕴ@nͪɌmhEz4r7 -U3)';%{|4Ӻ;]jЬ+:܂ly'Ǘ`ߚZxNMx ٺ'$>bk/`= -nsn;R?| jz }/J/ lw02wPsCmТ| F6aXçMa bڸ^zmZA^=Yʀ JhDydr(&2RsJ8?j6ʉ%"7J__T$+kإa> {D,JPK G|$>7WJI4edu/harvard/hul/ois/jhove/module/tiff/TiffTags.classux王5w ` XئwieI#k"4VblF@hB R $DIH!Fzr?~g_{f85)rl&rNrTB***ʐʰʈJJ| T**ʘʅ*9JA2MeʄE*oTyʛUޢVUަrʥ*;T.S\ +Uޮr*PFZTWAeʍ*7ܬN[TnUMv;TޥrʻUR[=*W^_>|PC*V_<*<*O<*Ϩ<*T^PyQ*SK*PTʧT>gT>9ϫ/|I*_QT o|K*QTH*?QT^U/T~+_F*ST'?E*S?T/G5uu]u;UiNWJ]UZukխS^ugۨ;SYVws՝|uPEbuVuU0uWuTe.WHuRwǹ1πK!%#n%n'.}hv\L\B!#/Kw;^%~N%+o}"E+&%# Kerl\) .Sm;ӈDD5QCuC19h$<I"fsӁ9`=&c=&c=&cr.1O, 2yL28$#4M2BQb8XI"V-UnS{85}u6Lofę3-dG#|f#SrFH6=:Oj#fQP Kc<(?K:+LBCC\ #Q4ߓ?ޛφe% _Еʔzmň }j7FlXDmw~Pj+C{0҄7dRsuڶ\EUc{.Ʋ|/wSs Ur=c-&Yqt+c%ln߯4L~(ʵ3$Cmaְ8͹B*uksXK{r`juƑT!ɦ2* s\v4@"P1 1azDkSq u%jy'v;v-`[3(Cř\hPmޑ aĊ "RY0&5[Eq pT2l/r2]㫶ln4,0O7o%(AXOș7l\s8:2h!;gM{"pѓn:[tO0 F0\j{?ڗ`ij2p}\"CAt6 cs xYO8X[Ko1SY&TM맚BqX S܂ O mAyCfptd w\s| {uV31Rjmb}>d٥HU1=WC< r17;Κ,9_].RbtGٳT.bOodckŜ=46RfT/"^ xکqL#jIvd^2#XL 3N $ڸ*>w4 .y1/QzSKC)ݣy&X[p*~ 󤼭{ɑ"S?c7Ǣ\8kK\ p|ūġ%VawGxZqRu)ij;d8<,h&ɠٹ12Lc eFuVܝh^=i/*<;.N`Dst^[Y"L3[yxSA:ښ st8*B;ފJXRi-yKQiidzմv7d8nX8} n0I1+O39thpz%#--"Hƍ?pfb/%J} ۴r)wkb,&PM \GjKbզ~N9GJrS9}v9+~F L[+eCgj$Qtaz/Scْ.4*r'oRiT6JӃm7 pN͔qug Q2耳]G:]e +VCs;+&yY4RL7!Mdǣ`15RCCM}9oA\͞&p|Y+Isgڲ'yj#<>zę.gtN9m[q̇.ZqNϩ1E{ՅN^>G?L\"!לiUQd?iSM΍?ywOVfn*I&[XeZXm3kkz ΰY`=}δ,[ζ[εyv 8bp .CP@; <<Ė20[nGGQ[.&p . ~{>={탔{Cه))G()()#QG1ʃ8!{=IyĞg_|޾Byž|ԙ|Z?s^y=7WOMOCVAB=xRRIޓO!3< d< =\,OAf{22Ǔ,dd'@xr d'Ayr'CA Ya=Y9ēC=9r'GAd%OVAxr2d'@yr*d'AtQYI3ɓў$ +=id d'mc n`>+~`ȾL^4> a>a> K-_;}V&gi›}&gq}V'gyŸ}2zzE,XxϊI,YϚM,ZϪQ,[8ϺU,\xʅY,]څ],^a,_8er8~_>ೠ>+2C,>>k c4Qh>߾>1g|9/Qx@ˉ|9O8OtxO OtO8O#txO+/W|ʣ[:;PK G|$>&edu/harvard/hul/ois/jhove/module/wave/PK G|$>O(i!5edu/harvard/hul/ois/jhove/module/wave/AXMLChunk.classSn@=q55-%@ B"-*AIڊRPMIڑc| / DEg> 1v ,ݖdYY].--y"X=cA?tn`87 ߈3; Ŕqw'L6}r;䟱 ce,d>aBwߢK2DK|Gl}R3('ҧPK G|$>?.H >edu/harvard/hul/ois/jhove/module/wave/AssocDataListChunk.classVRG=c]Fl"ǎc@BADc0r!v ˮ]qq.c /*%B+o7%vzV1%Rt3=׳?\AGr #H)`79>QV<$a(O1*Bc >CVLpL*h>縧|Vpw%}f#BAs %W_3Ln2 -uhh%KsLW[Yvօ6%K ?Fk̥%-\WGnbvE_5цuO؅7v=QKN C0l 8gm<=:EKp|ñOΠlD3XTс 䉑B %y,Y +0#ŢS)@j;v2]/mDܴ]ə'/* >n5ԴC%"e$c0š GA CI:6TlbQP@,"Aհ1ƾ˜^u#Õev쳮F;.uFzENQ2GA*dQ>X djd-M X9xρd߄Jchxfr(*hTȂ́!vdߠ7M.COHA8,t /'WDF !NX/m"ʫғ1xNl&r=lP^xC[ȥ1!2&W\Fu) =QHjIK]"0%SCoTj$ S(SsTKѕ;&;!JW'b.Yp~ǩ?驪`h ג{E⍨ZF#I8-mxsgx+(#*)"',TXN?X8B"9 -wv*[$^#q-{]+rM4g)\6=!z.#q:Jq1BOU=Fq\Wvs rr# }//PK G|$>{b9L =edu/harvard/hul/ois/jhove/module/wave/BroadcastExtChunk.classV{SU]ͲW6l-b6Lb@ { c7n6|#J~MB dd޽wܳ?+8'} O(b =*EXbyZ,d\:a g4⬂$% H0g4!] 28/cHƳIV #2%`7ʸ /aTȏepAļpaB,ILI0=ns %^Lhf둉t2 kG-4cZl5rEHDɜ:5=ImVVOsY(9LO<9+p`+OҼ0ǭ0ÎMk6:݈L*KBAK J|n2l<жa if%\T1y/5㒊7pYśx*; n%ǘDm[OEGؾLnx1m3mK}\z>T|(m Ss,q@k5fCli>mnQd*Cf#I 0H]$A StxEϹDpU*5!%f4EnΘmiVt%ݰs7˺1}-*~PEHE&꨾Kln 5#1Z )Թe^)>u{"| e]3^t Cp+İuK+368pЇgx 0Z? wZay(qGM >4V/<]nkn NuezN;I_!^ P\@;mQ$ilmXD]FWef"n?v@ͰN2W&P1fh[H:2rM h zj0Cw Ի֡Է֯C_C{p2v%o_؝kmXž[`uUNxpZD%PwSM]D''5 ~ K8"ᨄ'$[Y~BHBw{{(xHq?PK G|$>[Yr5edu/harvard/hul/ois/jhove/module/wave/CartChunk.classwGǿKzm˶X?8-؈]ڲ*ȏrl+7.giˣ}(B@Mp? 8-doTűA{g{pS11`TJ&,)8Bb;_Tu[_ReDh!q;k r*b0%ֹ`8߂ (6+$K_p$\ O,)%-G$. G%)-mQq;w%ǑOp'@ljv&<( Rɢz1 ee4mٖwOrbp6 '(EM(nb\0 לɨHn Ft&M#aӆgR[Ӹ81|F ,Lr$c7S1K){81%kfR8W0D R:si,y%'äll5<)xN ^]~fe*$&J[A^2^!.W~hx Nd:ޖ@x54WkdwMpE\0|"]<䏴 EZMG븢 o-gE鸴 S|Ry֝I dʍBAKߐ%mLi:C{TqVxEvgv1Iٕ͝)$n>^/͜?w\*OP'}O%b.s %iI#*У#?4/}呱4/lf\oRM7zUIJZA[ThA{3֏Y7umɞk+Qxoɾ|N;h׫~]AĕA}V:۷]t,!ҹkgw_E,?'^)?B``#Z>_t_Ut;<Ǟ[dDxxY3Cp]u|HXE\C2mRCoaT[ʀFjmL#Uk'mǘTǙjmqmaрv'>22 h1~iw@+6>u t^ŧ=VgB{5[5.t7~s|s7 }oC t+8)B ?("Nhu>D2fPK G|$>P4edu/harvard/hul/ois/jhove/module/wave/CueChunk.classT]sD=k˖,+ NK8UpjcM]>b%м^t Jv& j{{oqL'p32fwNEe*xO,ޗqE \Ň2p]E)XgP $XR,,ddܖa0o؎,0홞okUj7 ^n7z~Žla3u՗4V;7wSkq0aJʼe8 7;aUU57~z61=}7C.xgi\%ʘ`2&O!\")_PK G|$>d)K5edu/harvard/hul/ois/jhove/module/wave/DataChunk.classT[S@"iC*EKVL) 3l6$i??ȌI(IoϞo&Q0a bXƈ[!FehD 1&.DwP=a z 㡌G]Ӧe3~DgFU+RF]C+V˚mznѮ1-c2KR%Z*J3y-UZ%F &]Ziksԧi˩h%}M ly6d9i+o'oz}+eAwʬI2>ߴ-OƔ1Z&f#'W]a_燉tf*!A4\VAmbE3¼P*¤DsHǂE,HcY+کee2kFǓc@ޮ0ڞ.8t6(ٕEVc>},e!,ēGTsQV>Kzlgvg@2<4RlJeRaӊSfAhu-:EBGG"k uK |c~P_ m^ps.x8Y^t0TD`F!D'n/ros$ _ /9R 3{:Ń}>\\ĸ~4{/`7)}μm7/Lɸ*nPK F|$>|rSr4edu/harvard/hul/ois/jhove/module/wave/ExifInfo.classSWƟv."JkU@u}V mjxi5.6 Pfaԙ~C:[3=Ͻ9{6oa0+I!+I·q5k>~`2c㜎9񖎟8u̲IEN/X "YU;mڍ@mc7ͫ#UW9|T7mGγkjUzk\Zr.6<VgYj*wQG+uۻ.Зϑ[kَ6v= j[gr4{讣ZK`5Gi-MGMϾ>F o9ey9u ss&+}:NdWgsVؖ8_F˳`wU>'pWWTx{d\b%NfmI@ĘdԚY%|s@2' %xǚ+7"%ָu<nk45-GeFֶ:mIU~KT.o d0Q,Z11GUZiY&KQf+y1<bq"pėcv/e8^ȗ4?Ɵ~xrx':l'4qNBGE=PS/)LX^ VG_aO_b|L'?C2#!R&'%TdH*4ҡt8#LXڱ6F8ι}X(qIogt9 8]Ef?ܡ:ǥy%>edu/harvard/hul/ois/jhove/module/wave/ExifMakerNoteChunk.classSn@=u-*Rl'a."J%ER+E51qvdC> *!ĚB̸]3g=ί~XFӁ50ccK&\vpWLb5\qMԓ8Sr;2,xOdW4n/HMb_"SP%QWzELPfή|U(NP-o`$DX:N"8kod_i۸0 0ۄ"@wŰ; wh3l u4Fd|0bOf멒[0Oac{u -J)='Tw¼T0wq ƪ@a=q;`IJe4]o E/vX.0BM= 5}32#5 K//O%p4 U?c'&:[Wu4_182y8_K3]PK G|$>l7 ;edu/harvard/hul/ois/jhove/module/wave/ExifStringChunk.classTRA= 1\4(" (T!;Lv?/4Zg?J *%k{{6OC BWGc@ɓ04 ǐFV ^ pVp|Q2E%/0e+W,\Ȋ1cRᢕQ;c,Ҫ(Ʋ5 VXY.J#U0s +1N,Ee1&lK<)`A };u2-| ghEqJgbVwtqcA_Kˢmeqp㚎б `NbUVAqI)LrL鸅 [Uų2Cה%1yK]S6_Ӆ3҇w)ufYj õOgWA 1wSj5$B %i'hпXU<̖ 8{d]Z2e,Co-cT!dƂf\p(A bе&7CGm|l#S+2m+V [X,_CPqE0!CJ䝌HNI ҧ,Ym[jI#6.z낇5xTP7)By~F=H+) ?&I{?%*hP"}oDsTg1VuDֶut7ZڡR<& q(1^@G}!OPK G|$>ͻ=4@edu/harvard/hul/ois/jhove/module/wave/ExifUserCommentChunk.classUkoU=7z7un 'ԏKXBu$@Mmo]HD (B| TU̮J{=s=3ϿAKyx/˸3/E+ ^U!5W񺷼ᅼ@V5x[+xQpCANA^AAAxWE7U0'= wjYCd~pͻMfe筮=2?Zu͚UfvM:z-ѷZ֎V9Q?J7 =uo.8 vϥd ѰO|c4Pd|!0Wu9B)WJB\ե̕^r3 aKCNP={@./ury0 WD(-WDo ‰4+ypÙ“"8ݿ#gөnZvGI܉5ϭl_ Cs #^j`($͸;sIRXH4QDi#%$>[9AiNHSbPox(]b&yx q0N;J,}7AhH(JOgv=("0$(+~CL{0 o1~y5b5c$pLEY-3+0JO1fSG!Ec>"@6Dgŀ3<edu/harvard/hul/ois/jhove/module/wave/ExifVersionChunk.classT]OA=c, ""~E~***EB%&b vamv/^LL1b&cVLu7Ξ;s_A\nPܔs G *qG2BG"ITLa Kp~r` ܬՙgmoV:7 Yy<}j?DVd,VjKL 5XrNg蚜[,aYLj)&Aj{V}vl.4!PE^ ,)i°&Ol{yP P9=$yWʂd)NjAN9JX|&&R<O4!aO)4NT?'-TsZ綽z7rtC#QN$ΈR3~[ΔSgS=x <.A7s<1q 9yxI| A/M$SSG B . D⿼Vq"1+C#cЍPz"[hS/]?F߆œjTirfYA~a {P^PK G|$>h "s5edu/harvard/hul/ois/jhove/module/wave/FactChunk.classT[S@Ic7B[ jZPP>,dۦII 1hgـ-nvw~;g?Ŝ\U\QqUõq] {S F5D%qi 9waS Sm)۱i V,jW-X+훥[kb"U Qϛbz%%L׹i,xjJPaPR%"aN #, /d->aSx:;q 1Kr~V KU``'L̝qI< 1_@4xf$(YX)Cho_}§bP+yWq/GLv%CuБ@^>PK G|$>43k7edu/harvard/hul/ois/jhove/module/wave/FormatChunk.classX_[gp9 rCIGW;k%SP4mH0P,9a鴺9Z/8]ʺP׮yw?kg'!y9+\‡Q [ZTpƘ%/|໓(|+T RS|Irr_KH[p2|r_frJů˻%{_{9> XцKϊY a-rD|܊; ,4>%II/HE p_e2؆ўp;0 U]z*k)cPM4*}h_Vh3T'l6e]z\eFT8p_cP 8(߱ 7 P٩DKl=;抛˗xLܑ͚\q@8Tquʸ 5mkHid@mǷbF=XQ=+ָj&?TtHtqf9"9M2Iڱf#O0r$C_ Z`&)LΤyá^"WkEUSZ(@hn7<@ό67$8*wa+5U(M[uv|㪧5ڱi]G\B7DUahv'SуF!j[jnq.]2_d4OZ$QP6|eϡH@XE"!+ΒDWdJU+tueȵҞ:lė-]_:l!lJ=BcYPSN8jx]J*ҤRuĒҳN1KỵI9ԼJs[kZ,ۅg\24[Mh^L 1gm3~yϒXE`lj@ k2X+ZAB;VA;#RV$_z@.U@@[VV:*\O|uV)2꫻}R/"} y/mPK G|$>rL 6edu/harvard/hul/ois/jhove/module/wave/LabelChunk.classKK@Ԥ1oDP[+# `>PFF3y&QA\k8эa$/s+5̪PW~ UqRðcR!m2?bAE]M[M7t5Bo63TvfA+й^kQӥ,`U ֋u > DNՋg%u24jIUE niĔi&\c,~ovzS|n--ZlaCxLHd1犊Ε^DXFbVXǜC&]m؀RZ.<<$Q2Vٍ̋Gt!W*HOW)'@8zOPK G|$>~<edu/harvard/hul/ois/jhove/module/wave/LabeledTextChunk.classUmWE~BwY-P/JH]J*!Hd7nv)_9B9fOf޹/';AADq J#)b@|N7.>f0+គ8Kx (>+F6|*cQC$|0d,X@^]~$Rx,aU َ?`jz;giՠvSۮ;\[v3fϞcU4{kKӇܴ7kl;fZMi~YM=f̻g &ˤΦ0( ۮӔPV¤'Xc0UsUK|k lJTpl1 LQֶSahf kڜ{p G<ڎg%nYi S]>Lw|^-jI)!*#%Ke07x[B"@]ŽgYQ=FNMwړp=U~dIT IȐ8T#iWnQ'ϦCzz{>o|LMqb"R\34{vLoM $2$SkF)ESW"I]M\L^Cȭ,2O;D\{gnc87+6+CiY c.tHJiaq@dTEr/Je[2bG XbH|A-?&QONmT*#WŖ o>0q8%8Dɩϡ Cɒ,؏Lп&!rL[;Бct#))֑TQ?AM zX91؂z!a!W.!F-0a{:| J]>^9ĵX/A Zu_oj}'m:TǛjLD6#(/PK G|$>>vJt3B%ETʆ]lXKPv}2oAð ^Q$q CU7uKV8TZkW۔,eԘ:d 2y\`Y%^FLUR{[-Q_RXabr̓Muf.{4jaOn tB [%Ibg;&2b\!A[Hx.3_\L"} Z&sښ.09¡HCCm r>2JU$DȘrT8 Rb[1/ʰBgo%ԮLKԺ_%ZEPdկ8; L|fЪ8p765+h0܀I4X>e:'TNuw|9(9x>GRyހr!\yc}aCܳTE p9̢ۖѻ[ x}9l. cTa'߼ZvEa /i5'MyN:T\ŸBQtH2~qp丕69-8LtTOpYȩPK G|$>vs!<edu/harvard/hul/ois/jhove/module/wave/LinkChunkHandler.classSRA=6Y (,zEDC P /ԐeYW|*R?ʲ' ,vz=|F ᖎp09pn#:a415򟼒 q@'N2<Nj[R)t83jILQsx20YaaU]ԬRyCXew^']iٮ27 YnT2b<u5R/D.i(UQW p.O"*}h2MWjBW%+AD=8MYͳFݒuK=gz?'TsiHAOhAʹv5b^.o'G̏~K_Ftl?IDTzllo\E;F l ڄP{+w C]w[Ś`w.ZƍkTr/U1{%5Us>xD *[Q$_l#hPK G|$>U9edu/harvard/hul/ois/jhove/module/wave/ListInfoChunk.classWi{~/Zx<I-CZibj6&Ӆ=`YR4#cm$m[Btu۸iDm6<_@ϹZ,l/>]sϽ絷p5ы3M88b"s,dN(Q;fl WZVx``oQM$hr&{NeطǦi{4$^0fTwOzY@떸D!qYV8fu>ip }~ t Y{FѴjgS䢅_WqpZm2i^P_>*ϳ'HnfhMSVy#Lb&v=?T¯17Jk ~Y? ğZ煉nfJ9,k $0-E.]$,Y9fpo ܻEoir\{S ʑ܉L6_[NPX jmM`oc>sb 8и0kUߝa,aڡ\N~Ix;f_-n䖯k?FAyw8X~XP}iր5ySnBӻz7aGY7t$mǩC=}eH,L^Բf7q;A۫!~8К_f+ .B߫ؠy^EX< _w!XD(\ARp)J%4;Ѽ- K"6-tyF^D+[#m)b [*b"("(װO6?(`oAwKF&>/C`4LT/%F70II@:9(pв 5tQNk+I kPHFK["<_mWD_^&K9PȃE1}W]Euۖ6:V[mDOAr(aHb(A GC(!aHQ8 0U=LAjr[ ՓTxuB7E*TKvG]&> drozt8PK G|$> S =edu/harvard/hul/ois/jhove/module/wave/ListInfoTextChunk.class{Eǿ[4,Qix4I)I[ ԺMB7B/OESwSxQ;;w B;zW`r乑*M*60En,m@Y l*0,p^nY[n];[{_` <$# <&O <%3*sx> tTbxU5w!*Qd8rJ`8C*Ũm JQF2nㅊYrRY1MƐfћLsDog' ۢa DcZvi vG`Eڳ"fem5kNsuYӎ& HZKKcy v^*#y*Xrdd47lP0#imw8QxbOAukN\Ӷ*>АRHHNh%:Щac uiUj؅`\^ cC5?Ѱ#dK&S|F[\2);gt-K>qetvJix+Uu%iR$U-ѕT0=a.$\akG-j `Ou{kMh[l'Iu)Ȓe[ɪڴ̛AwcSѕ"]FQRC8E,Wr沱Mrfd~wQ5'],XJ#^|xI4e %s'Lb)Xݷ|pI/W0oiis*ճsGv?R2h ?+8%gNb+GZ5c f*΃)Vt*i8T]V{Tɦ#վaWSZY˥?_LT> ME=3+HDqclj7PF6ƼN&3kH6'I^^rT($$)"?b҇05iF5Z4\qu)WkW$?%ݡtV#^H 髫>Ӧo8z{ K+Tv(j׸l1(jbx .:&A!HN^ܹWtP_b.֏cz)Ԛ(f4>h֓4w(/h>ۇcMC32>tuz؇NdOyV'|F' |QH_C>obZW}E|[2Z }6=C+9>t^L:QJ?ۇat~h~517D)~㸠'ch7.hX6qzhꫩE֌"xۋԞ]2=*6بr~,$ WPK G|$>Ifi5edu/harvard/hul/ois/jhove/module/wave/MpegChunk.classUmWE~fѶZ_ @ꖪU$͋I(ZBs>PŽ>D1QL ⁊O%xET|.AVXX'`;vBMnugNSwm_m\ϹVWϓZ!Jwvt=^eL]=f8NP?J×05P@`: 즞<5m?ο"Vv;% x-&S4QѰ!#lR| A$^yⱆo`2$dN]7׹''MMK9vɼɝzf%#(r]װ',pK@[KhZ^7 '"#hp#Pk 6PSzRJon\!n}`1Sq4.Ž<\eE۩F>S3kR.U1 ڲ}l<{`fc7U;h1Tisܞ3pAӃ#ό,s [|;N+ݶP5zDpAF T>mfTek9-PB1[T /l 4SpHn0 z+{*a#x݄[[[ Rv#.R-T/?0Kr=d4v2G4qCj}S=\9 /`3F1QõCLVg>>8s8vv11;>5=r/xXhS;⫈PK G|$>5edu/harvard/hul/ois/jhove/module/wave/NoteChunk.classKK@hlDjkˀ*X nd06fB:B\ęZ&|;oֱh!LM"m혅^01I|OnF ]ZTxMz]-N6kr'FhWНZs9f-F=AwdE?dI5l.'Hn"99Aѯ'{A`]@zoec3kٵ,, =edu/harvard/hul/ois/jhove/module/wave/PeakEnvelopeChunk.classVWU=B:0,&0@+ԶFk J(mSm$L(][VV .U+*'??7aTcr̽ϯ؉n~=xA7èߔMƃzxQc~p]x!({|̰!nlA7by88 $xn0y$3< 6Q5K`h7*듲⾄jF+Ml(mHMXR>5uU<)Ԅol-2{M]'r;QED-%Eң$Z,V הǻdD+VFOpxS g ܝSJT9wE8Iиa>.SxA8%/5 o-MbmлÐGhmRXBjʤjU+xu6Iڪ wALio]ֵ TX7 afÇ|'>Asc{a9XNj׮tP5Lק큀/d%_00vL~*T6"M:1xbxW=Ai1*k7\t&ؓ<P]@(33x:,eqET`IX|=~ ؽYQ/NwC燠fÃ@3X*%=\6B}pcdwVXMcHm 9:1n[Ǣu 57A![5Cєh@Tխ8l?A6*Fom2JKoneI]ھٻv1FP ZqtaUo$칛Jfκ;vQG2u,u=T$u#:{\vcv]T{OOA}-j}jd )æUǢ&@d?v{G'P'2F&`;ĸҪ;hQWsH0;ҫ6Q.QC?v?@۞^wS M ?Z2w*I%B5?jD~P\re 3 ZXgloJZ"E{VrRϜ'㋤rh)s{3g-e3:K!P^8{"6:PиyxPe-L5ʨFJFJϢ̊ph*jŖ{V?%UrTbEu^qVJXq;YKz1o*"ͼ"$UfTRhL '+̍ ŪYlf%jUAX,hN{)a!,3]-[yꕼ^=lǭ ۱y6ȭ٠kVl0 Wlг,CyHB'.ȗf,ۭ!yi3u~Zu%7WC=]q>B'㩸b:8*W!^OYY `m[5Rȡ\C'/PK G|$>qq 7edu/harvard/hul/ois/jhove/module/wave/SampleChunk.classUmSU~.$MX iKyUZ%@"Kv a7R}_"#giw7@f\f.g99Ϲܛߟ+[:1(p wx򖀷)ƌ bbb"Ew,Fb"Cx"Gp!瑫QQRS|D!|) (MwUM5Kl%$cO2ĖUNj5).[eeZ*x^ TJlY΂"Ɋ1-I UOJ*7 EڝOe&#>vEJrJ%ɑ-yS*JA(+vE%6 R1U] 1"Tl]Z8AY.4 0 ~>I+atPa"h,if*e1kDZ,w$uMfƜ!*UVˌduU3S"9U)Ւmr pPa~-IИ,>MΖ[a Dħ|N %*P #[E!JY*3 eKnɪfq4Qs>-$tcW2ݷLTU؛'fE&MC#1}`*~O/K[*֦g$t=`fO1Oecdec]b[!{vYѪꦦ)"zp޼;C0}>m}%Bg:Co3BjO.ư SjəƶR4k)<2dFpr)C*b#u(CX=zwI3ƊNTuG#w0~@~% cl^f̣qA\aaИgi׸,Y- Mm5KyVv 'kCOмi;x~ba @6d!HnFoN{NSsPN=8Ax+vN[]ܩ'qeǝz\z]9b.0ݑpC%=\x4ubШE<=pt]W\B՚0;:Dj_k_!%Rc?_9GuE?Ȫ{Ld0t%쇰GkO<?PK G|$>e ;edu/harvard/hul/ois/jhove/module/wave/SimpleTextChunk.classTkS@= )iCxF"FQ|P,V@4XNV7v:nʨuLfv7ss뷏_aM(.zp$\8p`RU nLv~ } a֍kܨ707E1Oг`H`{T\ʺZU˨;F5KiDP ]K5y5Z/Vr(4հԘfkqT3vj!3!j@f=KT*VѬk5눡* m!_ blpQt!:7Ž?go9ܝ] |٪n`fy3O ޣ;@lOT\)<gHAQ!zїo" }SJLCu +b#otƜ.PK G|$>Kl !7edu/harvard/hul/ois/jhove/module/wave/WaveStrings.classuxYǻl6 0Cpe %mm diI6fr9sis|wv_1_U㿽aoWDLLLS2McbbL3jf2bd2)&4i.2}LO7~C_4  *)i*7%/3}L_ Mo1};R]1}L?1'L?cE~EG;cmv ɘsZngĩK;:;2Ǒ?jmEFi2jX_,=8ǎjEP-]4LZ[OPW8=]Pgʤr'QzMS^҅H5_%Ü 2x|&;&R)7i{#cq,i9dʳRϹ_nߙJ^YNΥF\ /"mmmVsrsn]:bVNH3IzY+f5H*!ktZYF uvb?Ttjfidԏ+R9'musY8XIc9 Ma^]71X\O0S,4N7rB6TGaRiaO*zio lʖjNW*kc󹔗Z-;:i}{Ƶ<+1QZdOqӨ;pa&Jcg.r-nMlhW;\[q?wՖJ{jaBBҮjoj&Xx'#[8fb]XKYxJ8~rVxzCFo;qffwl5N ÇL`enճ#1O84X:iri7yeBK\އ-&V4]%3I5>dߛH^bϨ.[*WP6.ٙORC']*,{ƆRUF=F5CXۖl)uד1XɒGh…햰,le@e#1c,;iKz--n2'59#m#e\i!f[|lZ ʭB;:Z׎0Sþg+LMҷ 7覞C-Ijamnz$ dh>-7`*sqa\tؼк 9N: Yb ڭNmn7yΓ׉qR` sGĠ qىuրVfӰ6$E؞n캂ȤpbJlmV!&9{iٽz67ׁpHCi&o݆ 7&X#wAxoE"\)a1EL1#'k-ƏV$s¸|_^v'[N1e9;u7 cD ڎTfk5/Ivo{>2JNc^2@%nXJ,mvxׁ@3̚ L"E]+un{~w*[V_}]M k.7N(7M(P0SfnouYI UOg| qٹh˥,5RUW)w}[S#)oUp,g`!&]-uEh*7henMH"ex&Գ=8'\㥓džt{2[ډ+܌dL XUJU׮"G̫)*|/j !NTG.Y~~۾T6q{/w5tᾕ?FX^7q;CF"dmnɪUVv27<LudApY; yCJ vIʒTrңn r}wo!jl\WA>oׯ_`mۺ_LV>b?mՎoØZ`2fbdeQ9}..)N1?5>I1RT|0ے.BgAgdnG[7OylA\uC)nOub2 e;Qo7\XfalԊAWT/P,XSQ\ԿZ5()(ؘzd+5W7Sz2Q[+)z;UO{ivo{YkN*=d] N5 =ֳ=MpVlAS j=sp^׵\0p^.K$\堥#zx^ W+jp^G} x^ ׁ:pN7 lFlzܠ7z3Q nǁ8}"x> AC"Eҏ<yD?&~\1I'S"OEψ<yF?'~^9EK"/E^ү_yE&~]5M7["oEyG'~_=CG"O|?) )OO|JF"џ"_X~3z++SD{NN2GM*eMnNg3j1MpYgs@Ӝ *ss8\3k"pi e`\d.63WK̕Rsxzp.7#&Hs=4UFp \cn261ך'̓:3֛-`Vlכ1p 66n2{౦gǛ 3 hIxC0bæÝfb[Q0bO1m~<cCؐ(cCñ!pl džѐhH< GCNBNBNB΀B΄B΂BΆB8!NI !I8!ąB7EdPARĈv++ڣH"HbHDFXHX^Er"9"1""1Erh)S$G_v9U$'x"9^-VHѰŊ^TQV2E9EP4"zQѫZх(QZUa^**DW7 SFUaޤ*EoV'ޢ*bEoWPK G|$>%edu/harvard/hul/ois/jhove/module/xml/PK G|$>)+l:edu/harvard/hul/ois/jhove/module/xml/XhtmlProcessing.classW_wa0V64]C$Tv@:N%.Hjzի6Z֠j$a ѱixX`6c:x <&'DħiVϲO9|^ _S:i |Y+ *+7%P6#]޿~~ -I9;+fUSlq&+2ȰKe+Pdd:NFz"M;v{NLGƭ܌KDƧӑl*ؑlb:mGzX ˱ٛaNJZS#XܪbA{yM34D= t?$8}WΚ$kpB9i;v&)O”lJd党;PV"1@iJyW~DB;742ɥd (h Y9Pzo$M Q N= rl 9C~$+ GRK&8wTTvұ8إ}wrq$LM OknSCmYrF aǾ*h_4Z{ mg/S  8ajQQ3XA gVWv5Ul1k+ul4+fj p-"9t ]~O 8edu/harvard/hul/ois/jhove/module/xml/XmlDeclStream.classuVwW]i]XRђRiCZqj'iHk[, ie\- MIBc9_HKY$':G3o̕?1yq3|L22漐p7Y&LrLL l)/*11YQfӬ]xe9~_PE̒/ M|UטU_go(x7T-6~݋o;2E/nu{>e&y#?VWpRƒeG⢀H t&򹒩q=[6TNҎ + TlyZ{dN_cY=73 bhL[6azD ( F[3iR4m:&9 ֤(Ec"e3dJ&9z'1K3fdX@mix,N2 A #fdP6)C4/ - rL=u^_ϒ;2 &*+Y'9c|2 a AP6`zQ +A6CZunlSB1O)dݞc\t-Fxe,v^PxɶY#uc^l$JL.=:mT<Pq fF'U aXpZ3LLS*ǨqWcL.8*L11p*޾9 7U|p)eSY*ܥ)85g6VsBE Xi. TV%~%*~ܒ9Ә15o-~**܃V35т^LfX>S|>]16vy>˗\oaݍd6fӏ6;. hmʭ _v0 kfY*oDm_JMdj%cqtTR8cg!рm5g&̿@h NtóIӏ0z}HVp}Lib6c]ǰ|dɖ[~z׏=)O}}ii,N`ٜfcegl9mt *냓%]pڅ6ꮆJ[VP>\H@$HWA%9ftۯvCkMvNo+Pvկ>-MݖwwXN0aT?{Mt'}}tQ-dAz^ݡ}~'F: kD=5|h j4}ʳh` BLu<'?,`Cٔ[)bQnS܄2(W |R9-%L&"aM"w󝹃 fYyGwMiInJԨoWqՊ} ӻܫ Q&ZcP%CBuj p>![ wOj7G.KθwHSqY5^kQMH\єw["7b^AY/#ܚ,MptUS|*86z(7M<edu/harvard/hul/ois/jhove/module/xml/XmlLexicalHandler.class]OAmn"j/Q~(bLHF.Jݱݺ%mS&D?xvBK{&3syg^iб@Cq$0Nr' <*gxDA4\SLMTRߊ$bHmڦFA4WC*I(hnUyc k$TqH -G.hXk%z&\vWi6}*N3@T_%,\^ܕLvؗ BJΤ(Ӹ`_k_A&ItnT:bx3x  ֥uꈖm;u#y1ږݦVYvͪmXEzqO Y%V-]˚t?P:8ÁreW9:V[~&mx֒k>ңqj=nf?(H%z:(Lo<HO?EFq34[AFlJ"O=J1}$d0nPS)pZ*Э@1ۃ)R}D,m$p'Fdw u4=KSgg=faPK G|$>GzS ;edu/harvard/hul/ois/jhove/module/xml/XmlModuleHandler.classWy|w7y7oi(%faJ4Îѭ-(-{I^ڰ4ɒ7xNT9SA,|̏n`I␌^|ڋ0= &(`ҋ#^^L8`(,c~0|_be~q'd|Ej|Ջ)1di\H%K\+ Hq]@R& Ɔ/h^yfάѝG(W7:Igc>;_ֲC@iYە:,2~IN;J- -A:'ܼs]O̷ncdNV=,^_|&:֥ǒܬK'Gu33 \vzy't>U􀲬gwՙ#͘{l2"bLu:2\u3+M!ƈSɁ2%-'x54rVO._s %H,*ET|tېi;`&?a}%'r[Eź~U*U\vKݠ*B/`A T_FT4eL:ktL^<.|L}a@̈^O$:ULɪ7]Ҥ ETmMH)b7R-O֓j.}OE ignR7ͱ__+7ڣnj\6zԐ1lt 8E,SxS'Mb.LPhИ{VV4]"d-ZLuYs:Wt#*MYF|ohM:a,%Ef~k;W"-?7 Ycys!ymsz-e#\Ly"paĨ*' O4ZI7l륣) d"ӵ9> UbUٗ3,>r\O` @XsG~d?Vx3@f@qo\qȷV$;VT^VQߎwT mY<"yPK H|$>(META-INF/INDEX.LIST? w>;՘3B@&Ԗݻ_]sEhScvmșjhuRb(qAM 5dNPq;܊j  'qb. @̋bzrc**GeR:j7jSd'uZp tbWP57KI{-PK I|$> AMETA-INF/PK H|$>qZ\3+META-INF/MANIFEST.MFPK H|$>`$& AADump.classPK H|$> GDump.classPK H|$>G̬CJ2Dump$Box.classPK H|$>k\L+ J2Dump.classPK H|$>? N DJDump.classPK H|$> ~m  $Jhove.classPK H|$> W0 .PDump.classPK H|$>!lI: f 3TDump.classPK H|$>Oe_??UserHome.classPK H|$>_ @WDump.classPK |$>AHedu/PK |$> A4Hedu/harvard/PK |$>A^Hedu/harvard/hul/PK |$>AHedu/harvard/hul/ois/PK G|$>AHedu/harvard/hul/ois/jhove/PK E|$>455Hedu/harvard/hul/ois/jhove/AESAudioMetadata$Face.classPK E|$>D!9~Jedu/harvard/hul/ois/jhove/AESAudioMetadata$FaceImpl.classPK E|$>4;Medu/harvard/hul/ois/jhove/AESAudioMetadata$FaceRegion.classPK E|$>D?Oedu/harvard/hul/ois/jhove/AESAudioMetadata$FaceRegionImpl.classPK E|$>-59=Qedu/harvard/hul/ois/jhove/AESAudioMetadata$FormatRegion.classPK E|$>ASedu/harvard/hul/ois/jhove/AESAudioMetadata$FormatRegionImpl.classPK E|$>#sK9Vedu/harvard/hul/ois/jhove/AESAudioMetadata$TimeDesc.classPK E|$>=m0nZedu/harvard/hul/ois/jhove/AESAudioMetadata.classPK E|$>%cedu/harvard/hul/ois/jhove/Agent.classPK G|$>tv)eedu/harvard/hul/ois/jhove/AgentType.classPK E|$>l9&5gedu/harvard/hul/ois/jhove/AnalogDigitalFlagType.classPK E|$> ndA#iedu/harvard/hul/ois/jhove/App.classPK G|$>=o2Zkedu/harvard/hul/ois/jhove/ByteArrayXMPSource.classPK E|$>=3j(omedu/harvard/hul/ois/jhove/Callback.classPK E|$>1~(nedu/harvard/hul/ois/jhove/Checksum.classPK E|$>*3oedu/harvard/hul/ois/jhove/ChecksumInputStream.classPK E|$>.ef,sedu/harvard/hul/ois/jhove/ChecksumType.classPK E|$>4}SM8+jtedu/harvard/hul/ois/jhove/Checksummer.classPK E|$>]^-yedu/harvard/hul/ois/jhove/ConfigHandler.classPK E|$>Mɨ26edu/harvard/hul/ois/jhove/CountedInputStream.classPK E|$><#(kedu/harvard/hul/ois/jhove/Document.classPK E|$>Jt@t,Redu/harvard/hul/ois/jhove/DocumentType.classPK E|$>g $(edu/harvard/hul/ois/jhove/Dump.classPK E|$>#/edu/harvard/hul/ois/jhove/EnumerationType.classPK E|$>H{,Zedu/harvard/hul/ois/jhove/ErrorMessage.classPK G|$>ܟ1edu/harvard/hul/ois/jhove/ExternalSignature.classPK E|$> B͎edu/harvard/hul/ois/jhove/HandlerBase$SynchronizedDateFormat.classPK E|$>ǝQ 9+Gedu/harvard/hul/ois/jhove/HandlerBase.classPK E|$>7_L*Qedu/harvard/hul/ois/jhove/Identifier.classPK E|$>2eDP.edu/harvard/hul/ois/jhove/IdentifierType.classPK E|$>D$+uedu/harvard/hul/ois/jhove/InfoMessage.classPK E|$>dGS}%1edu/harvard/hul/ois/jhove/InternalSignature.classPK E|$>E$+edu/harvard/hul/ois/jhove/JhoveBase$1.classPK E|$>HhX?hedu/harvard/hul/ois/jhove/JhoveBase$NaiveHostnameVerifier.classPK E|$>mO;Aedu/harvard/hul/ois/jhove/JhoveBase$RelaxedX509TrustManager.classPK E|$>\}UO.Yedu/harvard/hul/ois/jhove/JhoveException.classPK E|$> o`(Vedu/harvard/hul/ois/jhove/MacStuff.classPK E|$>'edu/harvard/hul/ois/jhove/Message.classPK E|$>ʫbB&edu/harvard/hul/ois/jhove/Module.classPK E|$>M|&`7*edu/harvard/hul/ois/jhove/ModuleBase.classPK E|$>"l T1medu/harvard/hul/ois/jhove/NisoImageMetadata.classPK E|$>~Z0edu/harvard/hul/ois/jhove/ObjectIdentifier.classPK E|$>v2#v- edu/harvard/hul/ois/jhove/OutputHandler.classPK E|$>TM> (Nedu/harvard/hul/ois/jhove/Property.classPK E|$> T-zedu/harvard/hul/ois/jhove/PropertyArity.classPK E|$>Uh8edu/harvard/hul/ois/jhove/PropertyPath$PropertyKey.classPK E|$>2,ledu/harvard/hul/ois/jhove/PropertyPath.classPK E|$>sϓ,Aedu/harvard/hul/ois/jhove/PropertyType.classPK E|$>l).!edu/harvard/hul/ois/jhove/RAFInputStream.classPK E|$>2Fr+T%edu/harvard/hul/ois/jhove/RFC1766Lang.classPK E|$>i[('edu/harvard/hul/ois/jhove/Rational.classPK E|$>ވ'^')edu/harvard/hul/ois/jhove/RepInfo.classPK E|$>)Ozd)2edu/harvard/hul/ois/jhove/Signature.classPK E|$>r;MA-5edu/harvard/hul/ois/jhove/SignatureType.classPK E|$>(I0O7edu/harvard/hul/ois/jhove/SignatureUseType.classPK E|$>v.8edu/harvard/hul/ois/jhove/TextMDMetadata.classPK E|$>, 4/Iedu/harvard/hul/ois/jhove/Utf8BlockMarker.classPK F|$>6"+ƒ0 Medu/harvard/hul/ois/jhove/XMLWrapperStream.classPK F|$>Qo *Pedu/harvard/hul/ois/jhove/XMPHandler.classPK E|$>n+)Uedu/harvard/hul/ois/jhove/XMPSource.classPK H|$>"A(Yedu/harvard/hul/ois/jhove/handler/PK G|$>=Ȣ 4hYedu/harvard/hul/ois/jhove/handler/AuditHandler.classPK F|$>Ð9<3\gedu/harvard/hul/ois/jhove/handler/TextHandler.classPK F|$>)1Z 2edu/harvard/hul/ois/jhove/handler/XmlHandler.classPK G|$>(Aedu/harvard/hul/ois/jhove/handler/audit/PK F|$>>ĽSh8Tedu/harvard/hul/ois/jhove/handler/audit/AuditCount.classPK G|$>LF'8edu/harvard/hul/ois/jhove/handler/audit/AuditState.classPK :9 +)edu/harvard/hul/ois/jhove/jhoveConfig.xsdPK F|$>!Aedu/harvard/hul/ois/jhove/module/PK F|$>qdo=1#edu/harvard/hul/ois/jhove/module/AiffModule.classPK F|$>D_)2!edu/harvard/hul/ois/jhove/module/AsciiModule.classPK F|$>#PH76edu/harvard/hul/ois/jhove/module/BytestreamModule.classPK F|$>T9 $F0Y?edu/harvard/hul/ois/jhove/module/GifModule.classPK F|$>|>1T`edu/harvard/hul/ois/jhove/module/HtmlModule.classPK F|$>"[C85}edu/harvard/hul/ois/jhove/module/Jpeg2000Module.classPK F|$>*D:4r14edu/harvard/hul/ois/jhove/module/JpegModule.classPK F|$>V"fHY0edu/harvard/hul/ois/jhove/module/PdfModule.classPK F|$>(rj-j1$edu/harvard/hul/ois/jhove/module/TiffModule.classPK F|$>fGr 0bRedu/harvard/hul/ois/jhove/module/Utf8Block.classPK F|$>LC@*]21`edu/harvard/hul/ois/jhove/module/Utf8Module.classPK F|$>)>=B1Jzedu/harvard/hul/ois/jhove/module/WaveModule.classPK F|$>O,{#M0֖edu/harvard/hul/ois/jhove/module/XmlModule.classPK G|$>&Aedu/harvard/hul/ois/jhove/module/aiff/PK F|$>Y_nm7edu/harvard/hul/ois/jhove/module/aiff/AiffStrings.classPK G|$>l!;Fedu/harvard/hul/ois/jhove/module/aiff/AnnotationChunk.classPK F|$>D\ <redu/harvard/hul/ois/jhove/module/aiff/ApplicationChunk.classPK F|$>E`9edu/harvard/hul/ois/jhove/module/aiff/AudioRecChunk.classPK G|$>bOz7edu/harvard/hul/ois/jhove/module/aiff/AuthorChunk.classPK F|$>g\.T 9<edu/harvard/hul/ois/jhove/module/aiff/CommentsChunk.classPK F|$>77edu/harvard/hul/ois/jhove/module/aiff/CommonChunk.classPK G|$>X~:Medu/harvard/hul/ois/jhove/module/aiff/CopyrightChunk.classPK F|$>$5edu/harvard/hul/ois/jhove/module/aiff/ExtDouble.classPK F|$>4>~edu/harvard/hul/ois/jhove/module/aiff/FormatVersionChunk.classPK F|$>']Rڳ@edu/harvard/hul/ois/jhove/module/aiff/InstrumentChunk$Loop.classPK F|$> ;edu/harvard/hul/ois/jhove/module/aiff/InstrumentChunk.classPK F|$>|^7gedu/harvard/hul/ois/jhove/module/aiff/MarkerChunk.classPK F|$>nHP5Eedu/harvard/hul/ois/jhove/module/aiff/MidiChunk.classPK G|$>mv5edu/harvard/hul/ois/jhove/module/aiff/NameChunk.classPK F|$>Ze6#edu/harvard/hul/ois/jhove/module/aiff/SaxelChunk.classPK F|$>/ :kedu/harvard/hul/ois/jhove/module/aiff/SoundDataChunk.classPK G|$>P5edu/harvard/hul/ois/jhove/module/aiff/TextChunk.classPK F|$>%Aedu/harvard/hul/ois/jhove/module/gif/PK F|$>GX5edu/harvard/hul/ois/jhove/module/gif/GifStrings.classPK G|$>&A edu/harvard/hul/ois/jhove/module/html/PK F|$>n,66Oedu/harvard/hul/ois/jhove/module/html/CharStream.classPK F|$>l85edu/harvard/hul/ois/jhove/module/html/DTDMapper.classPK G|$> $:edu/harvard/hul/ois/jhove/module/html/Html3_2DocDesc.classPK F|$>_ <8# edu/harvard/hul/ois/jhove/module/html/Html4DocDesc.classPK F|$>j \>edu/harvard/hul/ois/jhove/module/html/Html4StrictDocDesc.classPK F|$>K&:F#edu/harvard/hul/ois/jhove/module/html/Html4TFDocDesc.classPK G|$>";'@4edu/harvard/hul/ois/jhove/module/html/Html4_01FrameDocDesc.classPK F|$>ڄ +A6edu/harvard/hul/ois/jhove/module/html/Html4_01StrictDocDesc.classPK F|$>c l=@edu/harvard/hul/ois/jhove/module/html/Html4_01TFDocDesc.classPK F|$>&@Iedu/harvard/hul/ois/jhove/module/html/Html4_01TransDocDesc.classPK G|$>V^%?Kedu/harvard/hul/ois/jhove/module/html/Html4_0FrameDocDesc.classPK F|$>D̄ @Ledu/harvard/hul/ois/jhove/module/html/Html4_0StrictDocDesc.classPK F|$> z8<hVedu/harvard/hul/ois/jhove/module/html/Html4_0TFDocDesc.classPK F|$>C#?_edu/harvard/hul/ois/jhove/module/html/Html4_0TransDocDesc.classPK F|$>oxC==aedu/harvard/hul/ois/jhove/module/html/HtmlAttributeDesc.classPK F|$>v :dedu/harvard/hul/ois/jhove/module/html/HtmlCharStream.classPK F|$>܏0#7medu/harvard/hul/ois/jhove/module/html/HtmlDocDesc.classPK F|$>i+J 8M}edu/harvard/hul/ois/jhove/module/html/HtmlMetadata.classPK F|$>y;<edu/harvard/hul/ois/jhove/module/html/HtmlSpecialToken.classPK F|$>my5^edu/harvard/hul/ois/jhove/module/html/HtmlStack.classPK F|$>-#<7\edu/harvard/hul/ois/jhove/module/html/HtmlTagDesc.classPK F|$>gL ;edu/harvard/hul/ois/jhove/module/html/HtmlTempTagDesc.classPK F|$>{7edu/harvard/hul/ois/jhove/module/html/JHAttribute.classPK F|$>= 26Wedu/harvard/hul/ois/jhove/module/html/JHCloseTag.classPK F|$>^A)ҭ5ݙedu/harvard/hul/ois/jhove/module/html/JHComment.classPK F|$>D~5ݚedu/harvard/hul/ois/jhove/module/html/JHDoctype.classPK F|$>105edu/harvard/hul/ois/jhove/module/html/JHElement.classPK F|$>4 6:medu/harvard/hul/ois/jhove/module/html/JHErrorElement.classPK G|$>& 5edu/harvard/hul/ois/jhove/module/html/JHOpenTag.classPK F|$>} 4edu/harvard/hul/ois/jhove/module/html/JHPCData.classPK F|$>5edu/harvard/hul/ois/jhove/module/html/JHXmlDecl.classPK F|$>PJ :edu/harvard/hul/ois/jhove/module/html/ParseException.classPK F|$>>7ٶedu/harvard/hul/ois/jhove/module/html/ParseHtml$1.classPK F|$>ܳ=ķedu/harvard/hul/ois/jhove/module/html/ParseHtml$JJCalls.classPK F|$>!OhFedu/harvard/hul/ois/jhove/module/html/ParseHtml$LookaheadSuccess.classPK F|$>6/5ledu/harvard/hul/ois/jhove/module/html/ParseHtml.classPK F|$>oI=>]edu/harvard/hul/ois/jhove/module/html/ParseHtmlConstants.classPK G|$>1~72Aedu/harvard/hul/ois/jhove/module/html/ParseHtmlTokenManager.classPK G|$>2fjz<edu/harvard/hul/ois/jhove/module/html/SimpleCharStream.classPK F|$>TQ1\edu/harvard/hul/ois/jhove/module/html/Token.classPK G|$> z9edu/harvard/hul/ois/jhove/module/html/TokenMgrError.classPK w8P-4edu/harvard/hul/ois/jhove/module/html/xhtml-lat1.entPK w8B.A#7redu/harvard/hul/ois/jhove/module/html/xhtml-special.entPK w8¢ 66edu/harvard/hul/ois/jhove/module/html/xhtml-symbol.entPK w8 wa 9edu/harvard/hul/ois/jhove/module/html/xhtml1-frameset.dtdPK w8:7ic71edu/harvard/hul/ois/jhove/module/html/xhtml1-strict.dtdPK w8n&o}=tLedu/harvard/hul/ois/jhove/module/html/xhtml1-transitional.dtdPK w8C+AgBV6ledu/harvard/hul/ois/jhove/module/html/xhtml11-flat.dtdPK G|$>%A}edu/harvard/hul/ois/jhove/module/iff/PK F|$>_!0edu/harvard/hul/ois/jhove/module/iff/Chunk.classPK F|$>Pb6/edu/harvard/hul/ois/jhove/module/iff/ChunkHeader.classPK G|$>T_x5Eedu/harvard/hul/ois/jhove/module/iff/Superchunk.classPK G|$>&Aedu/harvard/hul/ois/jhove/module/jpeg/PK G|$>Dׯ^=edu/harvard/hul/ois/jhove/module/jpeg/ArithConditioning.classPK G|$><^+4edu/harvard/hul/ois/jhove/module/jpeg/JpegExif.classPK G|$>\ 7]edu/harvard/hul/ois/jhove/module/jpeg/JpegStrings.classPK G|$>HYL=wedu/harvard/hul/ois/jhove/module/jpeg/QuantizationTable.classPK G|$> Op=/ledu/harvard/hul/ois/jhove/module/jpeg/SRS.classPK G|$><բa1edu/harvard/hul/ois/jhove/module/jpeg/Spiff.classPK F|$>cǂ 4edu/harvard/hul/ois/jhove/module/jpeg/SpiffDir.classPK F|$>=>2edu/harvard/hul/ois/jhove/module/jpeg/Tiling.classPK G|$>*Aedu/harvard/hul/ois/jhove/module/jpeg2000/PK G|$>ڭ>Hedu/harvard/hul/ois/jhove/module/jpeg2000/AssociationBox.classPK G|$>l77Vedu/harvard/hul/ois/jhove/module/jpeg2000/BPCCBox.classPK G|$>O}( ?edu/harvard/hul/ois/jhove/module/jpeg2000/BinaryFilterBox.classPK F|$>e9 edu/harvard/hul/ois/jhove/module/jpeg2000/BoxHeader.classPK G|$>l 9fedu/harvard/hul/ois/jhove/module/jpeg2000/BoxHolder.classPK G|$>ލzt @Fedu/harvard/hul/ois/jhove/module/jpeg2000/COCMarkerSegment.classPK G|$>h!8 @edu/harvard/hul/ois/jhove/module/jpeg2000/CODMarkerSegment.classPK G|$>@ edu/harvard/hul/ois/jhove/module/jpeg2000/CRGMarkerSegment.classPK G|$>1 aLD$edu/harvard/hul/ois/jhove/module/jpeg2000/CaptureResolutionBox.classPK G|$>.c} =U(edu/harvard/hul/ois/jhove/module/jpeg2000/ChannelDefBox.classPK G|$>*NKe:A-edu/harvard/hul/ois/jhove/module/jpeg2000/Codestream.classPK G|$>rb^ CI5edu/harvard/hul/ois/jhove/module/jpeg2000/CodestreamHeaderBox.classPK G|$>hB @:edu/harvard/hul/ois/jhove/module/jpeg2000/CodestreamRegBox.classPK G|$>ET=$?edu/harvard/hul/ois/jhove/module/jpeg2000/ColorGroupBox.classPK G|$>2s<Bedu/harvard/hul/ois/jhove/module/jpeg2000/ColorSpecBox.classPK G|$>HX DD{Jedu/harvard/hul/ois/jhove/module/jpeg2000/CommentMarkerSegment.classPK G|$>@}c>!Nedu/harvard/hul/ois/jhove/module/jpeg2000/CompOptionsBox.classPK G|$>! ?Qedu/harvard/hul/ois/jhove/module/jpeg2000/ComponentMapBox.classPK G|$>Ĩ) AVedu/harvard/hul/ois/jhove/module/jpeg2000/ComposLayerHdrBox.classPK G|$>Q?X >\edu/harvard/hul/ois/jhove/module/jpeg2000/CompositionBox.classPK G|$>);>bedu/harvard/hul/ois/jhove/module/jpeg2000/ContCodestream.classPK G|$>醦`aAMjedu/harvard/hul/ois/jhove/module/jpeg2000/ContCodestreamBox.classPK G|$>JgJ ; nedu/harvard/hul/ois/jhove/module/jpeg2000/CrossRefBox.classPK G|$>6-?redu/harvard/hul/ois/jhove/module/jpeg2000/DDResolutionBox.classPK G|$>j\?wedu/harvard/hul/ois/jhove/module/jpeg2000/DataEntryURLBox.classPK G|$>}!:{edu/harvard/hul/ois/jhove/module/jpeg2000/DefaultBox.classPK G|$>RQPDK}edu/harvard/hul/ois/jhove/module/jpeg2000/DefaultMarkerSegment.classPK G|$>^?~edu/harvard/hul/ois/jhove/module/jpeg2000/DesiredReproBox.classPK G|$> 7S?edu/harvard/hul/ois/jhove/module/jpeg2000/DigSignatureBox.classPK G|$>АY. ;Ӊedu/harvard/hul/ois/jhove/module/jpeg2000/FileTypeBox.classPK G|$>\CZedu/harvard/hul/ois/jhove/module/jpeg2000/FragmentInputStream.classPK G|$>)=3I?edu/harvard/hul/ois/jhove/module/jpeg2000/FragmentListBox.classPK G|$>GE @Eedu/harvard/hul/ois/jhove/module/jpeg2000/FragmentTableBox.classPK G|$>Ā#K78edu/harvard/hul/ois/jhove/module/jpeg2000/GTSOBox.classPK G|$>rM)un6.edu/harvard/hul/ois/jhove/module/jpeg2000/IPRBox.classPK G|$>`7ݻi >uedu/harvard/hul/ois/jhove/module/jpeg2000/ImageHeaderBox.classPK G|$>=:` Aedu/harvard/hul/ois/jhove/module/jpeg2000/InstructionSetBox.classPK G|$>- 6%edu/harvard/hul/ois/jhove/module/jpeg2000/JP2Box.classPK G|$>hO̥ <edu/harvard/hul/ois/jhove/module/jpeg2000/JP2HeaderBox.classPK G|$>TP{P :edu/harvard/hul/ois/jhove/module/jpeg2000/JP2Strings.classPK G|$>j-8,edu/harvard/hul/ois/jhove/module/jpeg2000/LabelBox.classPK F|$>ĎY5:ledu/harvard/hul/ois/jhove/module/jpeg2000/MainOrTile.classPK G|$>"ĚW6sedu/harvard/hul/ois/jhove/module/jpeg2000/Marker.classPK G|$>Gs=edu/harvard/hul/ois/jhove/module/jpeg2000/MarkerSegment.classPK G|$>\w=edu/harvard/hul/ois/jhove/module/jpeg2000/NumberListBox.classPK G|$>$ :edu/harvard/hul/ois/jhove/module/jpeg2000/OpacityBox.classPK G|$>|Ib@Aedu/harvard/hul/ois/jhove/module/jpeg2000/PLMMarkerSegment.classPK G|$>}<_@>edu/harvard/hul/ois/jhove/module/jpeg2000/PLTMarkerSegment.classPK G|$>RvU @oedu/harvard/hul/ois/jhove/module/jpeg2000/POCMarkerSegment.classPK G|$>ǥ*@"edu/harvard/hul/ois/jhove/module/jpeg2000/PPMMarkerSegment.classPK G|$>)@Nedu/harvard/hul/ois/jhove/module/jpeg2000/PPTMarkerSegment.classPK G|$> u, :edu/harvard/hul/ois/jhove/module/jpeg2000/PaletteBox.classPK G|$>J)Y^ @+edu/harvard/hul/ois/jhove/module/jpeg2000/QCCMarkerSegment.classPK G|$>uC.@edu/harvard/hul/ois/jhove/module/jpeg2000/QCDMarkerSegment.classPK G|$>ƗG@:edu/harvard/hul/ois/jhove/module/jpeg2000/RGNMarkerSegment.classPK G|$>Q4c6Wedu/harvard/hul/ois/jhove/module/jpeg2000/ROIBox.classPK G|$> |c E edu/harvard/hul/ois/jhove/module/jpeg2000/ReaderRequirementsBox.classPK G|$>+-=edu/harvard/hul/ois/jhove/module/jpeg2000/ResolutionBox.classPK G|$>Q1 @edu/harvard/hul/ois/jhove/module/jpeg2000/SIZMarkerSegment.classPK G|$>§M@iedu/harvard/hul/ois/jhove/module/jpeg2000/SOTMarkerSegment.classPK G|$>0ݨ\ @nedu/harvard/hul/ois/jhove/module/jpeg2000/TLMMarkerSegment.classPK G|$>RTY4(edu/harvard/hul/ois/jhove/module/jpeg2000/Tile.classPK G|$>l'tr8i"edu/harvard/hul/ois/jhove/module/jpeg2000/TilePart.classPK G|$>uGA1%edu/harvard/hul/ois/jhove/module/jpeg2000/TopLevelBoxHolder.classPK G|$>Ӕ 7n'edu/harvard/hul/ois/jhove/module/jpeg2000/UUIDBox.classPK G|$>VsR ;c+edu/harvard/hul/ois/jhove/module/jpeg2000/UUIDInfoBox.classPK G|$> H#;1edu/harvard/hul/ois/jhove/module/jpeg2000/UUIDListBox.classPK G|$>lzz65edu/harvard/hul/ois/jhove/module/jpeg2000/XMLBox.classPK G|$>%A[8edu/harvard/hul/ois/jhove/module/pdf/PK G|$>/P N/38edu/harvard/hul/ois/jhove/module/pdf/AProfile.classPK G|$>xS9Pedu/harvard/hul/ois/jhove/module/pdf/AProfileLevelA.classPK G|$>+3]Redu/harvard/hul/ois/jhove/module/pdf/ArrayEnd.classPK G|$>0\59Sedu/harvard/hul/ois/jhove/module/pdf/ArrayStart.classPK G|$>zѨ>Tedu/harvard/hul/ois/jhove/module/pdf/Ascii85FilterStream.classPK G|$> ?Uedu/harvard/hul/ois/jhove/module/pdf/AsciiHexFilterStream.classPK G|$>1 ݫ2#Vedu/harvard/hul/ois/jhove/module/pdf/Comment.classPK G|$>!&wFov 9 Wedu/harvard/hul/ois/jhove/module/pdf/CrossRefStream.classPK G|$>fQ,6]edu/harvard/hul/ois/jhove/module/pdf/Destination.classPK G|$> R8Oaedu/harvard/hul/ois/jhove/module/pdf/DictionaryEnd.classPK G|$>1 :5bedu/harvard/hul/ois/jhove/module/pdf/DictionaryStart.classPK F|$>2a 2cedu/harvard/hul/ois/jhove/module/pdf/DocNode.classPK G|$>hCY<gedu/harvard/hul/ois/jhove/module/pdf/FileSpecification.classPK G|$>~@*8jedu/harvard/hul/ois/jhove/module/pdf/FileTokenizer.classPK F|$>sW1medu/harvard/hul/ois/jhove/module/pdf/Filter.classPK G|$>*6pedu/harvard/hul/ois/jhove/module/pdf/Hexadecimal.classPK G|$>u"2qedu/harvard/hul/ois/jhove/module/pdf/Keyword.classPK G|$>a 8<qedu/harvard/hul/ois/jhove/module/pdf/LinearizedProfile.classPK G|$>LW;2xedu/harvard/hul/ois/jhove/module/pdf/Literal.classPK G|$>Y)|/}edu/harvard/hul/ois/jhove/module/pdf/Name.classPK F|$>S&N 7edu/harvard/hul/ois/jhove/module/pdf/NameTreeNode.classPK F|$>CHJ2_edu/harvard/hul/ois/jhove/module/pdf/Numeric.classPK F|$>:hV' 7edu/harvard/hul/ois/jhove/module/pdf/ObjectStream.classPK F|$>@r8_edu/harvard/hul/ois/jhove/module/pdf/PageLabelNode.classPK F|$> 5fedu/harvard/hul/ois/jhove/module/pdf/PageObject.classPK G|$>@d;K7bedu/harvard/hul/ois/jhove/module/pdf/PageTreeNode.classPK F|$>R 1edu/harvard/hul/ois/jhove/module/pdf/Parser.classPK F|$>4|32edu/harvard/hul/ois/jhove/module/pdf/PdfArray.classPK F|$>s_k-8edu/harvard/hul/ois/jhove/module/pdf/PdfDictionary.classPK F|$>d7edu/harvard/hul/ois/jhove/module/pdf/PdfException.classPK G|$>"/4 >edu/harvard/hul/ois/jhove/module/pdf/PdfFlateInputStream.classPK G|$>qf9edu/harvard/hul/ois/jhove/module/pdf/PdfIndirectObj.classPK F|$>ƙB*->edu/harvard/hul/ois/jhove/module/pdf/PdfInvalidException.classPK G|$>ZW/4@Cedu/harvard/hul/ois/jhove/module/pdf/PdfMalformedException.classPK F|$>̚A4edu/harvard/hul/ois/jhove/module/pdf/PdfObject.classPK G|$>_K 5@edu/harvard/hul/ois/jhove/module/pdf/PdfProfile.classPK F|$>*oJ*:edu/harvard/hul/ois/jhove/module/pdf/PdfSimpleObject.classPK F|$> 4edu/harvard/hul/ois/jhove/module/pdf/PdfStream.classPK G|$>y5edu/harvard/hul/ois/jhove/module/pdf/PdfStrings.classPK G|$>wM7%edu/harvard/hul/ois/jhove/module/pdf/PdfXMPSource.classPK G|$>`@edu/harvard/hul/ois/jhove/module/pdf/RunLengthFilterStream.classPK F|$>~00edu/harvard/hul/ois/jhove/module/pdf/State.classPK G|$>-59edu/harvard/hul/ois/jhove/module/pdf/StdStructTypes.classPK F|$>~ 1cedu/harvard/hul/ois/jhove/module/pdf/Stream.classPK G|$>ރb<|edu/harvard/hul/ois/jhove/module/pdf/StreamInputStream.classPK G|$> @:edu/harvard/hul/ois/jhove/module/pdf/StreamTokenizer.classPK G|$>hL(< edu/harvard/hul/ois/jhove/module/pdf/StringValuedToken.classPK G|$>8t&> :;~edu/harvard/hul/ois/jhove/module/pdf/StructureElement.classPK G|$>0_#8edu/harvard/hul/ois/jhove/module/pdf/StructureTree.classPK G|$>^D68 edu/harvard/hul/ois/jhove/module/pdf/TaggedProfile.classPK F|$>Z̫&0 edu/harvard/hul/ois/jhove/module/pdf/Token.classPK F|$>!'4Fedu/harvard/hul/ois/jhove/module/pdf/Tokenizer.classPK G|$>tQ h4!edu/harvard/hul/ois/jhove/module/pdf/X1Profile.classPK G|$>Y5,edu/harvard/hul/ois/jhove/module/pdf/X1aProfile.classPK G|$>ܚ 4.edu/harvard/hul/ois/jhove/module/pdf/X2Profile.classPK G|$>8H45edu/harvard/hul/ois/jhove/module/pdf/X3Profile.classPK G|$>Xu3 7<edu/harvard/hul/ois/jhove/module/pdf/XProfileBase.classPK G|$>&A{Gedu/harvard/hul/ois/jhove/module/tiff/PK F|$>NZE3Gedu/harvard/hul/ois/jhove/module/tiff/ExifIFD.classPK F|$>#̱% ;#6fedu/harvard/hul/ois/jhove/module/tiff/GPSInfoIFD.classPK G|$>O{4o:vtedu/harvard/hul/ois/jhove/module/tiff/GeoTiffStrings.classPK F|$> 7?edu/harvard/hul/ois/jhove/module/tiff/GlobalParametersIFD.classPK F|$>U_,/hedu/harvard/hul/ois/jhove/module/tiff/IFD.classPK F|$>UR?edu/harvard/hul/ois/jhove/module/tiff/InteroperabilityIFD.classPK F|$>XƩ[9 edu/harvard/hul/ois/jhove/module/tiff/TiffException.classPK G|$>+]Rl6  edu/harvard/hul/ois/jhove/module/tiff/TiffFXBase.classPK G|$>dbXI3 edu/harvard/hul/ois/jhove/module/tiff/TiffIFD.classPK F|$>\97ea edu/harvard/hul/ois/jhove/module/tiff/TiffProfile.classPK G|$>[ӎ7=Qg edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassB.classPK G|$>Ҝ' =j edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassF.classPK G|$>ok->=o edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassG.classPK G|$>SJ>s edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassIT.classPK G|$> U@Du edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITBL.classPK G|$>֭?BHx edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITBLP1.classPK G|$>S\@7| edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITBP.classPK G|$>g)TZB2 edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITBPP1.classPK G|$>U0lX_B edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITBPP2.classPK G|$>@ edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITCT.classPK G|$>Bԉ edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITCTP1.classPK G|$>&JBԍ edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITCTP2.classPK G|$>FQ2@‘ edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITFP.classPK G|$>*OBR edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITFPP1.classPK G|$>(ASB edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITFPP2.classPK G|$>@ѝ edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITHC.classPK G|$>KRYB# edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITHCP1.classPK G|$>SfAB edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITHCP2.classPK G|$>\@ edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITLW.classPK G|$>;B edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITLWP1.classPK G|$>\BS edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITLWP2.classPK G|$>C1ɒ@ edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITMP.classPK G|$>eHΣBx edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITMPP1.classPK G|$>KQB{ edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITMPP2.classPK G|$>rgC@ edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITSD.classPK G|$>wTNB edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITSDP2.classPK G|$>4g2=y edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassP.classPK G|$>U ^u= edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassR.classPK G|$>| =a edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassY.classPK G|$>K:Y: edu/harvard/hul/ois/jhove/module/tiff/TiffProfileDLF.classPK G|$>IUrW<k edu/harvard/hul/ois/jhove/module/tiff/TiffProfileDLFBW.classPK G|$>}ebj> edu/harvard/hul/ois/jhove/module/tiff/TiffProfileDLFGray.classPK F|$>J3? edu/harvard/hul/ois/jhove/module/tiff/TiffProfileDNGThumb.classPK G|$>g6z 9I edu/harvard/hul/ois/jhove/module/tiff/TiffProfileEP.classPK G|$>k; edu/harvard/hul/ois/jhove/module/tiff/TiffProfileExif.classPK F|$>#m> edu/harvard/hul/ois/jhove/module/tiff/TiffProfileExifIFD.classPK F|$> ,[@* edu/harvard/hul/ois/jhove/module/tiff/TiffProfileExifThumb.classPK G|$>`P58H:\ edu/harvard/hul/ois/jhove/module/tiff/TiffProfileFXC.classPK G|$>ߡ : edu/harvard/hul/ois/jhove/module/tiff/TiffProfileFXF.classPK G|$>7PҚ: edu/harvard/hul/ois/jhove/module/tiff/TiffProfileFXJ.classPK G|$>0LC: edu/harvard/hul/ois/jhove/module/tiff/TiffProfileFXL.classPK G|$>q Q: edu/harvard/hul/ois/jhove/module/tiff/TiffProfileFXM.classPK G|$>{WA: edu/harvard/hul/ois/jhove/module/tiff/TiffProfileFXS.classPK G|$>[4>] edu/harvard/hul/ois/jhove/module/tiff/TiffProfileGeoTIFF.classPK G|$>B&Al edu/harvard/hul/ois/jhove/module/tiff/TiffProfilePagemaker6.classPK G|$>u@ edu/harvard/hul/ois/jhove/module/tiff/TiffProfilePhotoshop.classPK G|$>]"$ > edu/harvard/hul/ois/jhove/module/tiff/TiffProfileRFC1314.classPK G|$>7WJI4@ edu/harvard/hul/ois/jhove/module/tiff/TiffTags.classPK G|$>&A$ edu/harvard/hul/ois/jhove/module/wave/PK G|$>O(i!5 % edu/harvard/hul/ois/jhove/module/wave/AXMLChunk.classPK G|$>?.H >' edu/harvard/hul/ois/jhove/module/wave/AssocDataListChunk.classPK G|$>{b9L =8, edu/harvard/hul/ois/jhove/module/wave/BroadcastExtChunk.classPK G|$>[Yr51 edu/harvard/hul/ois/jhove/module/wave/CartChunk.classPK G|$>P48 edu/harvard/hul/ois/jhove/module/wave/CueChunk.classPK G|$>d)K5m< edu/harvard/hul/ois/jhove/module/wave/DataChunk.classPK F|$>|rSr4t? edu/harvard/hul/ois/jhove/module/wave/ExifInfo.classPK G|$>y%>C edu/harvard/hul/ois/jhove/module/wave/ExifMakerNoteChunk.classPK G|$>l7 ;GE edu/harvard/hul/ois/jhove/module/wave/ExifStringChunk.classPK G|$>ͻ=4@H edu/harvard/hul/ois/jhove/module/wave/ExifUserCommentChunk.classPK G|$>ŀ3<L edu/harvard/hul/ois/jhove/module/wave/ExifVersionChunk.classPK G|$>h "s5O edu/harvard/hul/ois/jhove/module/wave/FactChunk.classPK G|$>43k7eR edu/harvard/hul/ois/jhove/module/wave/FormatChunk.classPK G|$>;Z edu/harvard/hul/ois/jhove/module/wave/InstrumentChunk.classPK G|$>rL 6 ^ edu/harvard/hul/ois/jhove/module/wave/LabelChunk.classPK G|$>~<_ edu/harvard/hul/ois/jhove/module/wave/LabeledTextChunk.classPK G|$>>vvs!<i edu/harvard/hul/ois/jhove/module/wave/LinkChunkHandler.classPK G|$>U9Km edu/harvard/hul/ois/jhove/module/wave/ListInfoChunk.classPK G|$> S =Mt edu/harvard/hul/ois/jhove/module/wave/ListInfoTextChunk.classPK G|$>Ifi5z edu/harvard/hul/ois/jhove/module/wave/MpegChunk.classPK G|$>5}~ edu/harvard/hul/ois/jhove/module/wave/NoteChunk.classPK G|$>ٵ,, =V edu/harvard/hul/ois/jhove/module/wave/PeakEnvelopeChunk.classPK G|$>qq 7݆ edu/harvard/hul/ois/jhove/module/wave/SampleChunk.classPK G|$>e ; edu/harvard/hul/ois/jhove/module/wave/SimpleTextChunk.classPK G|$>Kl !7 edu/harvard/hul/ois/jhove/module/wave/WaveStrings.classPK G|$>%Ag edu/harvard/hul/ois/jhove/module/xml/PK G|$>)+l: edu/harvard/hul/ois/jhove/module/xml/XhtmlProcessing.classPK G|$>6PD R9- edu/harvard/hul/ois/jhove/module/xml/XmlDeclHandler.classPK G|$>~O 8 edu/harvard/hul/ois/jhove/module/xml/XmlDeclStream.classPK G|$>z(7M<2 edu/harvard/hul/ois/jhove/module/xml/XmlLexicalHandler.classPK G|$>GzS ;ٷ edu/harvard/hul/ois/jhove/module/xml/XmlModuleHandler.classPK H|$>( META-INF/INDEX.LISTPKw jhove/bin/JhoveView.jar0000644000707400001440000302141111510702112014223 0ustar garyusersPK I|$> META-INF/PK H|$>-:META-INF/MANIFEST.MFUOj0 :nxMsȭ ]!KiJn&f]l!?e0@IRV_1DѢdr]u#a4̓5gGۙyTKPλ0K^9>?AI-RYUVȜJi+JB(0''8T7$h_;{TݗhLl줇1L_jfR͹>=DwtrA7pW ?IpPK H|$>؄2 JhoveView.classVkpW6keJ)i)i'l`Y[^HS'nu׻vx-#PJKxb_$+)&q99G_` CǢ OʼnGBoD,KXp$c?\r^‡.g."1?|OOq?cAg8}^Ǘ+"*uI 1.8f̍h3UFHdwI h,Dx*)Ю#OD&Sřx&%3c. cłh6H\<_5٩L,uL?'@.Dsټ!A?R$k\MgҜ|]@g"I0-Μ'qƫd1Igc ¿&4G2T<+ щx P&T$ ɦ صŦ}#\E-rxR34a)Y深j=3wk+8j鉴Z):MߢB:t32,G@Wp+5TP%8C9炡l4Dh ӚΑ]3u^i@EK-[rvunV`2ej}4aQлbl(f・ϩyɃj&+I'e'6 #w^ΝPe~z'k>B;FF:^E wqᓄ~ąA8£m8 w$ ~pʅӄ3.%swλppх' O)4?7QEN mYp׊w= p"$vÓ:u!Zu<y:uW\C ݙu3 x|]kTWE 5$M-װ*[þˏy˗H@*:M&ػ\sSwX7o`uz)7mXkݾ5( h^5—.SWwzw?Wze E<~=E1[_(GvT}'_D [9׳4~.jV~{S z(p`Gtdk8ZCO-5XO׳܆pLedu/PK |$> edu/harvard/PK |$>edu/harvard/hul/PK |$>edu/harvard/hul/ois/PK G|$>edu/harvard/hul/ois/jhove/PK E|$>455edu/harvard/hul/ois/jhove/AESAudioMetadata$Face.classMO@QlTTxDcLDDD nJ 2N a}vٯO8qP }0\4YM(wHۑ4Fµi>*?RbD1c%ZwVҗVT7%}޽5{t5|W.VOmkۉvij՟5Xѵ:)Q9!dLfT=8p6$J;'\<a I< dܜr Ռɸ;e u66ؒ6J2NPK E|$>D!9edu/harvard/hul/ois/jhove/AESAudioMetadata$FaceImpl.classUmOP~^u+c* "":p/f+i;&. ?-۔D>s9yϽwx-!q`^Ba"!Wg%Ux,b=Og"6DlbHZFѬV 0 کUh<1D`Uΰ|bXeͶ a`5YZYz\jvs/[hh> e9TϦq*n5eRTˬ[pJ=90 [3+Π*A n0t gK;24F++J>V,֥z;XXieʷϞaI m ]ZC'K,#6/)aw H@})c S }-ve-K)&"˟|,S!*ϵ-cC21$⥌vW:+Ź%;7xm2^aWn0,vQce5tDtRL\\IAl˷m=[=,cJUrؓt2@*ʼnKDtjE!ә:XP"uDi)H u2Ka0sd+#gϞLy~ ~Hΐ ᝏ; mq(|f7g0s7gܭ!dmү?]/FbsF!YvͿ9X5ABm%$L5Q\~PK E|$>4;edu/harvard/hul/ois/jhove/AESAudioMetadata$FaceRegion.classJ@њ4m>˂"<Vz4&Knp|J܆U<{fy}{~p]{^,LsGic^FBxHfq.<6Z]sCS_h;m6? pɡqӥTp ,"lWhFWq,s[c*.PK E|$>D?edu/harvard/hul/ois/jhove/AESAudioMetadata$FaceRegionImpl.classSmkA~6/wڦo5ݥzUD*)!%ܕK~Gi6%}ٙyyfwa3t#jRVQHc|]1k&Jxc {!VCkEeb CE_(s[4b}30^. 16] KO9;4bXTINu%N*U2sΐr~ b!3@ah_>9Z$go~oMLkI6V'$;QJ!ad,%jJnL1Vˑ"'jPK E|$>-59=edu/harvard/hul/ois/jhove/AESAudioMetadata$FormatRegion.classP;O0=8ĞM;՘ b4gdx4jg}{>bSFS4Rd1AݼٸH|pݙu.P<7.SozA}e)gr>|1jSV1mVW]K?6cԦ S&#LR EGI> ;H\i1)k?,4eJqEluy7CMpxfK(9WPuXC V6pMV76R PK E|$>Aedu/harvard/hul/ois/jhove/AESAudioMetadata$FormatRegionImpl.classS]OA=HK-"l"~b Ť Ą5MX7Ob&6&&껿_`l}@l9ssܻ~0$zA/fŸL̉嚊y7T,XdHn8AnUVd^foLATzjc Q8}ܞ{E>3VK6y!ߩ ~ Y/ CͽFH،+H[0! ØЇ3ҐdRDžUaX:'z{<ز+4"y!͓)XZή] J>8Ļ$ !гĈBLG1 H$)8K9Q0n4/ 1 EU5>y,FiBF7>#>Gq pMKmZc]Ֆ8&"zrHO*dRwC_ e!zy+( :x4ᲑR!I5،%@· A!xbJɪVK9}si -~sߊ\MkPK E|$>#sK9edu/harvard/hul/ois/jhove/AESAudioMetadata$TimeDesc.classMN0F?CIB ڍ%8AEB\`GMFXpUШlGo_qbZ`gluw@Qv\dQ,M/ӓA3VAd;Jr.Mr-̖=)tVbWĕlrԑlH{ͅX?"8C_(ny10̐Wϸ4~PK E|$>=edu/harvard/hul/ois/jhove/AESAudioMetadata$TimeDescImpl.classTR@ I[B XcAQTPhQRPgYHmMʵ7 /xggsx6Ma3}{ٳ ` Xh$n <{ DZtlGKB⾂)3 2e^CjE-jvE푹  {u7AF٥Y^+z*{;9:W/9޲M;0 & i+b:V^|̷FkoVɡa*6Cr\pV,F%D\tǁ*T\%x:ͥb U↊,t #D/tE9U`%Zz]r]6_/mnVi>زԒim0edu/harvard/hul/ois/jhove/AESAudioMetadata.classX X 1v]7nMHZ ,G Ib!ڕ'6iSMLK$$*>?3o޼yOz`/+>f}>x3L^&1|ЋЌf>#"e1f?1?}A\O14 b "ϱLK>|ǯUF_g 67}=}؃,~Ћ^|/@~?Qŏ}?gls/~/)#OJ!_*|^. $UU>%9*CePZ{9̽9&tl<  yUڴ+.H0O1SW$vEbQ:*|R+)A8GbB >L hHMRS`Lޜ>cDt4<4ti(-\a>+I󔫴T,&rFS2QItrV)0g YҐ=\Z,ȟT&U#Zʚg SJh'䉹9U&=ozNOdD;SپXRұxVk'^:Vtڂ6̂$M%U#x1ܝ.2'S. 9[_JGR/(jB%#1Yզ %`Ϻܐ {]L;M1}^";Tx!^庋Mo#~E+Il9clwGOcI7ɓdI/J鐐P3 %$]D!+2G R)4~6m ~L*& %ƾf'QH-R"b2Ԯ:nUGO}>yT_pd,c՚vY)Iô)i6gBCiD墶@;)Qds~֎K{Wm;?P:bMqXS4lxݔ]T i{\XcB`ttxu܎-} ynӕɡyk;~&ºV{eopv[m־UtWT$]}=.T^m&(dy۫:ś#Y8ݩL|V•}v穂~3.Z;l|+.K~v*ѽs+YyT~ ?qT^;;UQk^ ̸3]Ijg-=|L7Uq{g5r2nHz#l_q1FOzhxKhLxPK E|$>%edu/harvard/hul/ois/jhove/Agent.classn@:&i_R4q 'B\$Ro<q +Q_793?~SVu,X|,X6XZxd@-H})Odaʶa840Js OeToaMd 8A.`&}5~0c>{E4'l8){řZvWiD9o*nO7M5n97*0R֟_,d=J] 3Xe'Ʋc?Ƹ'.\̹8y XZ,&KsK@13vo$ӫJe0e7,b<7*BeA/^"PCxkG0#T˸R6) 5_J5j5-6ŖKZl+|VvW-.qdP4y9U=)~GMWP==~PK G|$>tv)edu/harvard/hul/ois/jhove/AgentType.class]O0[ںmG@1`||(b ͶJmPi mP렐Vg] kr;i󼯏p\"6 ±YBE&ʱC˱Gq@ZhpPjݮ4FaS}3/tG~;fn w5-l۶-Zh֥cos e8-4y(䂡Zz3O{b8óFaz>lװģ#EIBoa +-HeM:0dZQ&+'wqtJS:~:4R7g' ְFE߉L1) /kˣF$(ҕT4#_y~0|UErã'G +dU̯J sSW\Pk?(WPK E|$>l9&5edu/harvard/hul/ois/jhove/AnalogDigitalFlagType.classPMK@}$MӪU̓a!ABOؐn$?J] <8ޛy G,4 LT-Ьo&D]@w]fLEN,-X< eRԍYEǠG`^'woM]_ȑ1.Zm F#t<{A2Yf>ڝmc FM:l8R$848E0G)+,k`WҀ~zy St6]$yC[-u M+?PK E|$> ndA#edu/harvard/hul/ois/jhove/App.classn@I$ MSJIY8,lj%T&!.[#D^kDZC!$"swOau ke&uQ)BCkMTUta`N?i@!H:C=eGԋ1q^?^s~'//랤A:HMfcQϧk9[F /reQdhz6ZvGc9v? ۃpڇi2Jg6`9b%ǛKKKq9[9Q\jZ߰RL<PK G|$>=o2edu/harvard/hul/ois/jhove/ByteArrayXMPSource.classRmOA~V^gKK[*PmGIF *9;DI$(C5/ٹyyv晹'|40c`ޘ`ZLmLü ڱv g0]&Ω E ?+%.J^%Es!zn͐-L]=`~kv~,[{mK  pIT-})jR1D 6;+}aZׅ UNnݝJZR S,Ŋxf`aEm^ ㎻:GǍ|0sG}jwaáun qԐ!%PS3 %n?ˣnO/ YڲiZOF%!=紥/o qҀ=0Uu#f;W;NFO.4( A^݂H? >D4J>'=!֩+$PK E|$>=3j(edu/harvard/hul/ois/jhove/Callback.class;o>#vvVv6FĜlF1 OIJDļt}kMOFԔRĢĢbT}gnt@@PK E|$>1~(edu/harvard/hul/ois/jhove/Checksum.classQNA}=,.$zI +i afH8 /4x(c5I;Wޫ'SNAʐSb!TF}m>iXi;Caڢu*U1C']!7zno`-[]2\hUE5`1IDm :kMF6%FUwN\Xyx+.KF%iv-UGFG+ovox=G qD# ' _FG4=~6D߭&ɉ)Hibn{~2FrEl S N Vp !q)`DfL(ؚ>K?B=!K1m %vE5?PK E|$>*3edu/harvard/hul/ois/jhove/ChecksumInputStream.classTMOQ=o: ml*NQTTDİ C;m)@pgdFM&Ƹd/rAC"]{8=/}QdT@WpinQq{(G8z# /jGy|LcOjien2-ӰFT;3e%AVah׍Y2yP/ef[1WN K^)e;V3x'L1L'/rI8W[/I ݋xiVޘEJ嬊cK5OrYچ]!O\\\BYΫ)B_HUR%o5EA㪌 ?#"cҏ)L GqfAOX%_EǪ^aX K}=i_MKr6WKHWDH{r=vOvN `z>|@>xwK|!`H߇Ѐ4vjRE=.Ҁ7mqbEpimh-R6݀<Ab>wLtωe?1G\he*r\!~:-5*Mq-. ]ڇ1),{ocrX .ayhdݓ^{\18#ɸ pn<׳)E)Vg T^+QR5T;i_PK E|$>.ef,edu/harvard/hul/ois/jhove/ChecksumType.classPJ@M$MUkFJȒA^<&4iD$gGkoagfyo@G&Ltu 4M(6g%p@K!A{.( Jyʄeͣ Ū\><撠6v aAgظt6p&<˂NMj;-l)E}]i sTXO6侮g0ؖŧWl ?ܻIF u5u PK E|$>4}SM8+edu/harvard/hul/ois/jhove/Checksummer.classTS[Unx ɃJ6@1hT! -VȻ$7.v]VΔ L҅ Gf &xuWd>"3ڸ {~_`E#:1~CI )ZM>6i!f8HCGf&:SDCcʦ1,Q$b|S,\)⻕euEBGUreI SOn{jV)i.ٲ \0t'-`3l*HK@K/RYR$ESרo*RD@ +F\%?ż, tjpk l[bieIHk`]Ct'D60yg;) f&0w5 clnАŦIDZ.v&rȫ(p(i01FPƖ@y\&k"I?%4ʑ^ҋF$]FRd=ߒhZ&7JMNWe]^-edu/harvard/hul/ois/jhove/ConfigHandler.classVyt,{W*818!Hm8'6XKk{5ڕ@[^КzW=h&zR}w__{3j%Gy7|<4[[=apwq/1y;w0;dr?ɻ{e/d2>F!)Gya#()O($> > >Dz+/*8t#/xO]c2PpO⬂0W3xV7¸ߔ-Nȷe|Gw%4YͲ$Dǎi Z"gI`g%(-<|83H+I2̼&Gh^mf:cƘM6t A3oZޞвEiLV/vatݯZ2ϳm=7?dEJHy5g=+15-"Oki/pl\GL-فn1`X#^d uH*wcVRE+ wI靐43n{E{zOcSY;$#թ "gS&nڏudɠ]e2x?ٴTԏJ: 0ʨ`g=$fa6&,m1&t.$m-}+rHo1mXsOQҶ^'aptz>S3 jm [fvAۆ}Bu/ު[v,z?MSg݅vE4TI^&STq Lnbr3[a1Tufٜ<ňRqVOjm6מ1*l*qll16ݲ\w,i,P<T܈Ij>%#DF o}*~HAgBՋ%G*~^PO@OU ?pszaYivEDb_Wt VFůU;{eIş m'Ӊ(ʞU op)&B&1W&LJ {9[+}y{bvYR)hE 31BڠVԲh-o=q/M`m~PBӐt$4´ $?b>Bk5z`jљm ;j_B':bs*3njhl:U\FLڃ4x2=krDyN>8ƳrOd#6-9U{OMwh~]@?iY@ȃO)<7f\~5~ڍ/-x Nc C;cbg\E2_6K9FDabfDea!XFSLZF3ٵ]tyIk%eluiY̹qX}qOQnc5aكo {p&ׄ[=| xc.|[MfϺPӺɳ`׀7zŚ{BM̓cPޫe\v`cA~pz.QU\Y]£V_-xjfїKK8^ KG/j Wƣ= Rxl(% ‚'6"f'$A,H\ ]׹eێ8YF:I_Yx4.\\ Mwǣ/6^"g %y7ҳOad Nf-;n̒t$_o,m_'B%$%txWp%O:QHxZAgHǥO4:J'ǤW#6=Y"ad-.&U inX V5|7}SIvǣMɨ2edu/harvard/hul/ois/jhove/CountedInputStream.classmn@E㺱HBSAĢB WE,*UzP܆8J&|ĂE7eĢ7Y7&͝yo?~~?pM X+DUUJ))pM\g(b+^H2,m&Dv[$ 4ܓCv 2Jbզ➌NDga6@&id`os&yNYk XV젂 D<p ;i2 D/E<7$ gGIO^ZO/Fd}4 I45U6"(mϟyoоy݄6աtD#ox_}yS5#e|/L_`/G7K[==N <oi<#(edu/harvard/hul/ois/jhove/Document.classNAƿmnrtr h$Yص]Rd/$&&>e'R|VpGb>8'9YAq s"`|2PMٯ?9OQ]̗_Ɣ"ŚW8/5ioUt.pI{.K7 <-]x%8- 1wIQٵMv7B\ >'Jt@t,edu/harvard/hul/ois/jhove/DocumentType.classN@BG7\WܪjLj4kJxYa"UlM-$>D2Ό5M}trΙO{I#E42Ŋ*EAr"+Y(ISlHnRlIn0Vj&A[]=7ln'Q G#';3m^XCZwղ]yD<ߋ &;׿5Q+Q(p+ba%F^0. { )?a0qLz-QaJZ0&Cino{F^ +N5#.Herdl̩ӊ M`ND7ȇb ]~ qr]9Uޯ<|@9S>|H壿PK E|$>g $edu/harvard/hul/ois/jhove/Dump.classuRRQ=7aLx$&IPQ R%j  TPqV7@)VM"qEt>0"n sG]РSe } 9ccA*%A23k Wpxٱ %w!n]ʶcUOBp*f,\XKve,;#0` 4RmUmhWe%Ϛ};Vj>{/PcATs<Enąxi=չSOt<ńM$ǔg; SY]-XZJn;p^R殳36r /pK^C!f.M-;_<Jq ƬTc?+NɽMG 09.: +cOuiO3 !QgDGNx#d"oE3MKs)c4dB>/G4~u'# *d##~QHSdSh$yB(/q9&نrd(YI%]hoB Q/%i:e)bl_=)ct77)"S PK E|$>#/edu/harvard/hul/ois/jhove/EnumerationType.classPMO@}SJP@71&ă kmҋM4&(,x||~8B6Z6v\&3+h"iDA']w,\pMQ CLNUė,qikyew:QiGÇyׄ U 5Qy4^ !]ost 6*5Q"xEh%]fz}^,/F;W{ܷ+PXkMF U:>O祤nH{,edu/harvard/hul/ois/jhove/ErrorMessage.classMk@511Z?ڞ߰Ы"T}!!HGؠ݁gXއe?7Xh1ڌGFFFOzx!ܟ1edu/harvard/hul/ois/jhove/ExternalSignature.class;o>#a.6^"A; ;#Mf^f#COVbY~Nb^~pIQf^OjJ~FbQYbQ~Fi~~f~VF~Y~pfz^bIiQjHeA*Q C!j5XSR4=ifG  Bedu/harvard/hul/ois/jhove/HandlerBase$SynchronizedDateFormat.classOK1_moZ^[ǝQ 9+edu/harvard/hul/ois/jhove/HandlerBase.classW xT>732y&L$@Y2$b"$A$#h|̼$yqfVtZkHKk5CJZݵڽvz}M2K~9,;Ϟ=q jN;ߵ9C;d⏈bsv(vHKk~Cb8MU~gc. L_+-F4/m$wF7DxK-Ίp DDE/"2+ʲll4"ECSrE&,OdBD Z,YD"+!zfTdsD6Wded4*'<;*ll-Yؙ͖-Eۙ|h"[LxjDVKB]$[! J:F15ާZ䄲N R Ub9W !1hlSB96"B_ ;ſ^"JlWk]%=]A%jPy<4` $7H m<"ሟ +WP8#rߙ1!O$:<OWWޝhQFQD7D;D0p@"NFCJ0ʉ%ֈ 1 fJ%BX8SVG/sOs&5y(f'dʶ@&RKbE# E8oInkrtIЁ;I43!wC]"U {E0.rsPkd$J?ep-Z8S;`9l]l`! }%Ta5t*]os(JX]30ڔh0R2EnIʑRL6+ChʷHpL &^4R;bjPǧI镘w&MÉ~qq;i_!SUzv0R 9[!d耙؆f  Bmnnps:hD/yY&V92Lh`E F0#a +xMdLekh6Dh By1~#]b׶.l4]50!uoq-1M-F54##{Hp+ƅuՈQWsԸO$Kޅtp8W^HxVH5J %p .AuUc8KcJ f9Hl-kX %\+uFY~/hZAqcڶ@sE%ʊJ O;-wtvrV%tV?f+4<'p*%x8Cz?FIbrmfȪXۂW<8Zb[Y7Ϋ" _zhO}VuJg}%Jl^Vل癬WOJbcߏ8۝ƜP/Yq(gp78q2a&Wr z)(,ЌO1A2rStG."d=*>cTv){)[2؟4e; l}/g^xD٧Mf)_tTϘ%Y ?>gƯ2yO|f<= |Qg#]Yee|IN~NE-%bİhIX鑚Yx.%g \GRtH'aiqnFSgCua~b$X6.5G\c6rNX'԰Up\i2OXoqEp 1X1yI}mrwԢ^7A4{NVOy)XԊu$c`:"-^ki-p Xs/beԽ*ѧZauZ Vr\u4!`5> O̧|:4+BK 'Z&'->6}tN 2j(q#ݎ?l PK E|$>7_L*edu/harvard/hul/ois/jhove/Identifier.classQKK@MhVVC,x Xz-ѬmJI$n+K?%~C7_Np4֣O6*6zy JzCs؍<D?~/dG_F-6 ixwcW ܠ+Tݦ BEd|up^]Wk3$.BoeTIj/%h=DKT5; ;pe8Z%!~sߗ8MڙN3A LѭBMo`AZ $K:#G3UuFo6RښPK E|$>2eDP.edu/harvard/hul/ois/jhove/IdentifierType.classn@g(N:=.nR7PvUpPH*XJ b"aḴ1c?g?~,9اا/_b>~*57ob~.='ؓ)ٓOPK E|$>D$+edu/harvard/hul/ois/jhove/InfoMessage.classj@՘hLU۳9HS-,xUzI4HI{Їh7,̲SMx`<2:'=}Fa!*W"_n$N@[Į'R8'9w4Ԃ&ds2PIWǃT827^*^jJ6|4^Flѭ',>uc<]P: W*mnPo`.PK E|$>dGS}%1edu/harvard/hul/ois/jhove/InternalSignature.class]KA3J?nn@ Yp5[c]Q7A"tGEgt 8üp 2~x]h_D)a>]bGYp¶a]w(r;ed?PK E|$>E$+edu/harvard/hul/ois/jhove/JhoveBase$1.classA 0DW%u  Ӵs<a <_ )a}vqMz+%a'ՠ w#w6վ 5~}x Şt'!H --Z=aYW ~J0G*&M-OPK E|$>HhX?edu/harvard/hul/ois/jhove/JhoveBase$NaiveHostnameVerifier.classRMK@}M[jЏê7xbvmiŃ<QTDDfvf vȠ\RDl0b_C'S(ѐ c?L$4Lh! T|hR4 n8$Mdx7G*u:<1z=IUt6Pu'Bk&HCҠ%P,Aܶl3_ PǁcRɈO1߿ۘaz* v,|?{WlXf ]JEjj`?z ,9KmV@.H<ʤ6X՞}k9 4Ek>PK E|$>mO;Aedu/harvard/hul/ois/jhove/JhoveBase$RelaxedX509TrustManager.classn@8i܄5P~J)4i J!,LN,UbP; /~ܙsmh7Pŵ:Í7C .Ps}JF2UfL"Q&A:|g. \'N)kjoLS^ujxd,c2Ny Aq!13qOi'Y;"cvJdyR?/ĦK=Tޗ? s2LYKl\$Mh"ļ_ ![F2uD7 >$:~~@X#fof)#Fl?ǝADw?EoG/ o'?6P,sꗂ--!b3`*؂4*hyjy*>jsJA.cSXCPK E|$>\;@EOT$> ST>OSt~g(ܭS>YN>|.; t^ċ(qR9y/B/%;~͵ K~/sr Ug''SJӨWtԹ:|v5::jP:j֫|=Nw7&z6P1|ެ-íT3\~-q6F|ou6'iv*:ޙӀi|~ ]KWrvp%9@ >j!*´zAR;U D9_K1(| TKÿNŅN~/2*2_+Tv+U~ZP~5I5[T|ɯUwuN~ 5ot&Tܢ|Qu+{~߮D^~wRr j|ާK>깟  a'G,yxǨi4rZɐW> *TS  Ϫ[՞S*|gR *|h*?*%K?/GᯨX`'8TϨUש4s&A~AԾE}_QmcNu'kK S[*~}]*>+ ʲ0Ug3;X*JA'rOS'?sϝY_#>ӣd<- u<&vr>PBB(%RQ8BQSiP:C~o8Ljޝz,k #ހC1ȯvkHۥoCvy#:s;=|%TP 7Q ̨ o A$gKH0V+7bV3PZBbCUժ W5453P+몪Wn@و3WZȀ|V窺uVWӪ r,mk72oil]Y՛76z"Ajw[0A*0Hoޮ}~ZZ;.*_B@k 9F}gD}7\Zo72Tkz$ʃz*h Z DID-]nU͖Ko D{"EaN.$pgK#¾7]+}!_op@uэD4i SOk%g~6ovkNoh7V/r&T:d 7٘8G74ԠQ2[Z{B!=i ޶D5*tC+Q^#aD"v;t?~/@߈z\lÍd4F4ew_'#Vlջ#44#-Ȟ1P&1c(EIHe_810tHk'-\+ufiDPXi5Q!NQd͆0p5q8Ui&l獓mSq& gD@ "TtSq@kط4N h3wk"BG M ]čS3ųǍGM;!nZg\(AgN8q9%XۘPO%3*xEv7REo@Pm4q@_j",L%nCjAr ((y)2b E\՚Y7Isޙt\x̒631iR6Xq-< 7i٦Kr4q&GZ FM|W\`tbЏ>-b705ȾUdsv4F#`<NME{79{p>!{å9H$&@r-7ozaٍ1|CD;Qq:z T}4}T`z@%N4gl]]u13޶&PxP< 5v@gUU6 N&F51 i_Cx\ k $ObxjOSq#fq7z#z-V?Kϓb xQu&H`%&^PcMx=:R5-bPY%oݘPR]H^ 3n]ް;^c0]4 hEx7|4ϲyC9ReSS$.n8:n^37Y(e)iv1@$)@bBa6=xCћ=ꉃݭo+r!킮 Fq٦pnXFx]cu ?A/귝Ae\یJ˷s]CViйRd>Wb|@ :IF]fLlh=Ubù)?0-9lݎ'luѱu]Yn\תQ6OHQrkN<J޾X,8ʆ鐷^Vc*G.23os~Gr5`۪/5*`sU qhnNqv@囹bq2RۤI{eRqLwu$hG6H^…0l]e=h\@10DTyA;Jׇ8J7'&4npGy2ao z뽑Nd-Vrtzjah mqr- n5pЇëTl+='5O#X,-VY`@aL9  $e.6.TX(2` }Ehfx^:''E<IqS3B9 } +/c#pd@~够qwBJF0(L)Wo*(&}} B* !HHW7z8\οɠȕ׸C-4G|[~kIµCz %Cp=꾁\ (؅Q}0O,QƟ#+5_Aiy4F4 5)LadiNװot D>:s70R% izȡðWo󨮴Å9Y C߂;<}0ӣ̝  J]ȥ.Yg7<'{b=}p'˕\p?(Е<.Ǖe- -ɁsVr̰(2Ό\Z-`(JYVD`cE~ WLcAɋts?Q@dR~C9OEiy3.ʢ탿R х'C~T14(ݸdRƿ ǘ+jԅƑI ,'?%lukI+Rj>O%΢fz #O饃5A ͎HCJ3áoS Dc4e62 CYF^'Z.f}uV΂xƯigC*I/uȞ*xg#BQC: id/0TL1^l D,FqaX{ƴWFo¸O"FvVTC[3A&Q[|T#8 f@sg}p/PF?3!%kP"g)T 1?wHbNl9K#lXӤ 2#Ęe80m(1xL> l ,!4d"X( i8(}#J\ Ղj.,9&zokj9h7*Jb>I]OatC~p4/(xow$$I\,<&I5}0ż؂ 5Q*. aLLPæ`#%'|G ,~h}&18;$ M:x`IC&xk9H\ q6l-6-H'PJtkKrJjFl?5$餛lϰgǤnsQw-KJtkRc 1bcS-IiH6x= 륤SZ%o/'JfYTgY<4)xYRϲ~vlj?X'Nn,ϓ÷X7cM}FmRo0K[0T`o%#u/g[_%ϱowlgMa ugNX~s| [܃i]A8-ͤcܒ e#YXmqY)'U-[>Mf ѐojCZ+)g^̏], VcV;5º4h4j'+JҢ(+ȦyDv3E aF1VKreuElHX-Wul!lQ-)ύ7ngt\_޼-ub |X~W=Y{#0g*O2ݙpa,ǭ9NQ'sL LL}Bm9[g}sJZ(Ld%X[{2v J& _PK E|$>}UO.edu/harvard/hul/ois/jhove/JhoveException.class;o>#^.NfYb✟ ᓕX\Rn"84RSJ3R3Js32R@kErjAIf~#0(("3 2Hy@Hjmg`VJ 3i6- LyPK E|$> o`(edu/harvard/hul/ois/jhove/MacStuff.classSKSP.I{K*J}ly4O(0LmJ[#/nظA+G9$͙;|߹  dp!.rc`JS1m*&f8f98 3hK}EU%Cآx qjʖ-bӍjj+`}Mh2)rJR\խr;^}2Td;tFZ~ؕ~@Gфk jEʢtT1ҵ'7q &+3b C7U]Q2 e6Nf6q c٬pUuc0:(9Njj+踖rP]izaV;Wm yb5寉{?-1l6TaWzNDFwx]E-I.>U8N|.] " c~,(f>} zq#8 d{}Cva8\e,FI7jyGHi;Y})[ڼ2%=k3l.R*b9}}`ҳ.w칯6y Ϻ?`-#SPK E|$>'edu/harvard/hul/ois/jhove/Message.classNP -e(u4qqÎ,lI2ۄD RO j&ܓ;%r08 Q8vB  } ъiXfMm4GݲmS6ԑfԆ=+H˚oW2]Kc`0dm&ͬdY,P9C3Ţ4^/"8(b"NH 靉SmQj,u7KlFCa$zˆAGs,i HCU<@L)%oXt$˸qe+[Қ9ȥhC% R!H3KK%e^yyO9%ֲ PK E|$>ʫbB&edu/harvard/hul/ois/jhove/Module.classTiS@큅US Q]<8X,k-*~ &dGYLwaK^7=ݓ<0O`)}(}Tg!пRNL"J+V rsvs)T'y\ ̶FʩB:kdq)1Ԙey{xMGOU( F]:8$>9^dJ20NV[QpNyq.jd2\x&5Nix ߄[-6x,xl9xxGy<-̳&9PK E|$>M|&`7*edu/harvard/hul/ois/jhove/ModuleBase.class: x\Uy7˞I3MRL6Ҕ&4$%)-jI2d&L?b+ƥE\@qA 7TTDw97[^9s=s{K1҆ Z_+Ao`W3Rpx8`eO\x%313`p (I<!'^o\4a'ހof G- &ocvp@ {bn=_|/1߁[|?::Ʋ>h3vt9|[:2L1?dܧ`/yQ eg[Pob1_d/2\?6{-M!Fꃾh},up#d4B(ep$ O &oYBiBh8B5~/H/H*Y$Y;=*|NI> '肓فh*&&(#.>s/C>=Rot#)^v秚~I5=Q]*CyMq[g4/95OQifrxtrFc8LCHQ:X71rk-e{Z: k7[)i96hR{ b?MJ+e]g @4Y:5nio7@W&.:BRE8;Tƫd^1x,{4wTņx'}F2/ϼh'?_=1#UճfA<9 ѳS$`]ʓح-fKͺ9^ky syN֛K|1r~Wu2}b F3Hź}wy{f6p 2$'r2G=6ڵ=.f5r|>Sd]h-X.-Z{R@kiYўY'9/< Z hCh鲣toZ+h-1~EѽHk.7QG'۴4X!Oxf=L9BV2j 8g`~[ אhۡ%6ZK=SLʒh,֗ < Ky٘5V,zCN[9x%ם >|=@= WLJzƇDT8ه|4CBX$s9G'ؤ̆Zf65D۩ kbcz `s29-luwekPem䌿t)P4Ӱ֥}B @,d|i:OJ5$ߪcSp9P֔P( Z/=$ElMĞ(w|[ݴ:\n<Dϔe-iE bb myvUvsY| 1EIkJۈ pRKܥ6ȩaGXfyLwMx`U(bS n͂r0m4R&"%cStSFdH>v%fr5u`2MXZǢ41B%^`"2lf K&)凷$VѮ)g^bʃ,XenI8ۯx^ݡ#o-EpSp/&(zcg3P=/ J$sQqO9J si쵷};ҲXLnveˆ#EpnY]-[EDTז ݴUlOQ5qcIʹXIXW7}2Go&Wo0Cy&yVd5o`7ԡ=jK!n"l T1edu/harvard/hul/ois/jhove/NisoImageMetadata.classZXj(,$pqc8S@`,A`[qEd IJKqz/q^{ٝ!.|9w;w>ko\#BKUF}rtP:x*^x&-SP C>(c>$SO>,s"K/*k&[o.{~!G~)g~%W_~-w#O?+o'_/0~  er@ Uj@ fz4ssG8,&8ڵ_,[)vuD bMR,ARTX*ʼnR,b+XfVIZ5RE$)Iq2Kq8Ӥ8]3hMRtHQN)6Ib[Bxp/tP&zK+řRI_)JMRD8KR-9R+ELK1(EB!)L)rŀKx p<MJb'wIbL8R/E /EARbR=R\ ŅR\$R/2). )*)):KqQ[Uۤ;S[{W_xP0)1<>.R<)SR<-3R<+sRP)^ցpp b;vwǗe|.9"Z[BwYM-XwGp}`Nb˽#d|pwo_G$ "F7ϝԕHoWk4 uSvvuPZ# Ƕ> uQMj7 oG_3nLi^ {6:{*Tq@GO0C$՟PΛ`Gk;C٥.OO҈G{ъHGO$L i>l zÑ2SO[:;te=]]ˠA fV>o |ibc1H˩GY2ffβ[ 3btuӅx"_ȡf;3du+ "q7bTOfZ{p~O+i.={%GFiڒl[2nk0Li`w#nfof RdNX h^J/p*n٫~(ԛ}BzZ(=d/33 ɷZY)0YI8merHz(!3i {2G>sb:f6 t"31dRpN,LgP֫-v}42ђغ`2odHșb ^]gsq'rN|xOxv%iL/ R>3gilΑ\|EYfmYԝރ7C aĻ'}QOGln<8ˌќ$sbZÑQõ'.l?3A'|58!hII\~߹ ė%Ƨsi/q;4EaB[ڧZqtZӤNȫEjLg itOugQ랸P2;pDÑCgbz'l9<#S.vtM;Ya-f3Wm'S\v;zN'(:,18ۦԩhGzkl\޶3 \~tO=,)?A.QFkrG*R2)bxEcMxeM!?x5M7#k}I4EkFf͚AYzxf7kzXfԛū7kzަJY37kz7kz7X5mdU[Ŋ*pV֤ڳJ7o4fMo'ߦ;U*߬*o4f7k|J囥5UY|7k&f,߬˷MF+`L~;l@orb&F?~paM 8TYSU"\SӻoTgk>Qws JY3)8Up^*8[,FUYE*lf6lW 6lW 6lܬDYbvAY%5MY%*l#٬fJ6kdXfq f 8Ɇed+8fb5vxf Nn1"􄆳UX|n4!?㮲<>l|0eVnoHzy+ z0nys p1xxhq<q`/c\R/<<{3n\y@w1.y"Uc@1=(p/nv ݀>Eql:@ @O<x( ̀1Rx@p>``>q&=#퀇Ànu?~#oz[m:J\[!G|P|pK~G|(m 3~[ e8કKtRdSxP/_I+$(,6f)3Oq/&ɞqȈXڅwGP1, u̓TEnl^M]K&v/&gUW#1c36KÀQ`?\3)dJʫ]gm7vtRP$p+Tls[s:{Ln(@H?Z4T1V.L4&!{-';h}ƇP2@w/ I<е)XTh#5%9EjriC%N Xagz޽w 9ZP.dA2,tќ(cV>lL7rׂL4Km!+Ϛ,͚B(ռq$dGq*;he!ǣԖv3D|.j5O39j2Áx`k]iJ܍t*XbtH{Ȣ2# LZK;]LJ1DcT>cګH:G"{]R􍧆F3>x2y{V[N3њwaML:R::'pG`&ό 鐢ʁtf>+|4 HT8+1V=?a\a7 sidl1~wbXfL >h+#SzY2 QXL1 VSPN2tj$\/Gh38~S"ZxP 9!_|mpڳukX[81bRa;Еt"/3LS5gMf,)WL?JW锭T780U.%58^{yd8L@ C1bac KefUړ2M||};l{1syǍA\ n XZf{j+qUr-4Buk>4o.V>pmVU>A*{˔] eW*JʮQv'שʮWe7({q0Ngq[6]vu(KZݶnR6npCږTm*?iCے*oUmnWg;Vc*ǕTq eT찲#ʎ*TvM);lZٌYeW.%+[Pne(^eǕݧ,j^u+~(|*_*_W+{_NecIޢڻUߦʷjܩw}ާ>샪C*}DG}LǕ}B'}Jz3>s> PEe_R/+{HWiu8pA$_uC.7@47*\ Հf˃Zs,xr3@:t/00tUO@S*o~~Vo?d|xvO/(#GwWwQZ?қ4)i,YӟaSۢϲccGJպXF_dSҩ}=2Kwk+,ݣ鯲tX_c3ՙ:=,`Y&K{5-vB{uj6?ﲙ7̿ǾQlٺst\Mؙc?f=O'?eKG4s/1?B/ t_>R7l[uemQ߳`騦GkOrg6:7ޡ鿳ٚKK4o>O1h~/;,})f6XxMYzP] M` v94d%,ݬ*6!Z5KaaM{XzDӵ,=:Njz۱1/Kz^i,S ,KӍ_{6r ]{.[{==S:#XzL G2tZG^Yz,}:MdEl2\ql}<[{=׵X:%|给km|n6SuKكҵOd4=XY׵3_ghz%۱V*cmckA]{$ElEtU2:?ٽ~rծS&xA_Lwh͟>ߡ;5o|+χ45ۢv~|;Wi~#_Z<_MͦW77*ru1g|x>nǩNa^jL~{5L!_|s4?||ߙ?owקy~~?B4/ #5ߪ!ߦyo(k~磚5G@;j~YO8~<3<<s<-w|"c5^k~>{p|Bc/_M͚Hx~XQ_I_EWR_÷wiz~/ |~5^ ͿR7oKif-[9>5$ϟjim,W_ˍTT[n]Z=n^؞VoO-:O-zOF_uk=Kü2<]r<]'zɾW\h9msuץ5ܸVq]Z>N.pGeYośQ$-].D+|G+"Q2ru A Z^WxrWvyo9[;;#Qo.J݄wa^j}5 =k}Ryި hEE8ZYJTVz,UU0{8 GhA޹NO 'SHi$ |N9;$_<`'Kv$_&"{{~B~k }oI8um\t:WF+TP*C[r߆.>hwCb}ǏGcad0D|2l>F6#τgs4>Ws )/U:/W1^_#*Io:Ww.jF#oe1~"g='_zZb {{`sq:A忒oE޿4OUL@e7\0(F2~C QtF9XP~2rАnc%Ko|"˼^XF3~R5Ԣ[|vv>'A``#50[9Ǯ?\Fo̷[< t6qEPK E|$>~Z0edu/harvard/hul/ois/jhove/ObjectIdentifier.classUSUnXr7*kk-66@ ,lv3 S|-ϝQϾ?>Ƞxnm02r~|ݟ'oRG:7V|h]r1qM{Q.M#bR4HsS[rCܑfJ}WRG!\uGZp:jz`;i2'mn0 o.0(`Pp{{8KOَE.库Zz쭋/pL|-e$y|`ZkfYp4B3Tv%5YøU9Sxc.k.:>-Fڃ"HIY`:v E,2gEr˲D&5b` _+Z EtsfEƭHtI$ ] =ƪ58 㫛- +ȵo> &F7?H;<ރT s\|4iԛlfEm9KjudMpma5fP |׮uåmr]5}Y򑴴D WVxNzOYea%6siGI>jT"%Uߡ^;Lktn4GGILy~E[-B^$Ez/S B4&?uF-H˴C Q5Ő & 1ggtqgP3GB/DT=Bo&bM !l jJiѽ~CM7ѧ^Cm`D61@)[uځ]MQ0Ŵ \g;%"A *"=oMS>&g4d5 ~5sJ]EW8$8Fmp$vö1 gIO0F QPK E|$>v2#v-edu/harvard/hul/ois/jhove/OutputHandler.classR1Ot۵-"PBxNqЩ)pvedѼ|(Ǔ4H:i k^@E24A넀Os~0AeR922 W CX>=%#̐0c! 3'᱖"uҨ& |?am SxjE<1J9ǗY f0G0])B _?SꊨS _tJz`z"I"MIv[V0UyKCM}`6:P/SC{8 Oye>5vJ]qMCFcӅ5 a[D0-*Mqg~\kt|k`>@Vj;, X `o:.;*ֹU<]={sX>7G3,ቍ~ 0|[۰Xu =q|_8|PK E|$>TM> (edu/harvard/hul/ois/jhove/Property.classUmSU~na$BHJk$BU\–,]aA/|Vpq`z&@Q09=s6?>>|F.Џc@NᆀK"E)-CN %Nqb1'6DEq×q\v &Dt*u2x5偈"3P^yv·?)gF%:RQ A6|dgYjARu0E|6X;x6w8'Ol$lE {<Vy_nV}(aƱB|>{kֹU\Dg'߆7O`y2aUy:tp н@pu&;VbJUhN&:M^f mnk*178BM]и9!8Aha{_s-4{H'lSγ<;ha賟B-Zmx%9ccE ױ)/q(jc yU4 lOi/[$SYk9˿1X?zGe{?8)?-"^aw<_Y` =6Af8Envvp\ H>/PK E|$> T-edu/harvard/hul/ois/jhove/PropertyArity.classj@1Mm~մnk A\ĈrР41 >VBhЇ*:2sΜ/dC9# Y$PDé3 B/4\ p-&[}skLق5VϬ8ZxVESK 4.Ҳ[MjXu&tA#ˍ\VLjtOPgoRvEC,ֱ'XiѩCh@ )4.T9ũ$H56hAjopː6ݯ@ C7H'}CY!dUrZ&9#9+yK.y{,~PK E|$>Uh8edu/harvard/hul/ois/jhove/PropertyPath$PropertyKey.classPJP=MpHM+t%\!6rQ~%\003gǙ`v ZL6Rxz0焮i=:#*Y -FV\i-2]6J,YUfFۙH'woV&*z!O[;7/^fkUXpX,M ,q[>!wd _ħk/wC8_PK E|$>2,edu/harvard/hul/ois/jhove/PropertyPath.classVGFHq_7S%mbY+jh&qݢq\$8u+UZ;-7P4 i}/_ixZ6gkfv7oן`PprKG} ͏[1#c :q>*D'pҋyr'͑v"'gSy x$nQJAQCrx%^|Ї^Vh{(>>*WdV|Rnr ǣRgɝs|"Ǘ؍Xcҩ'2"r| l:g{E3 =;r9=h\8fX?vB["y3%s428}\#|dN.hDd.ȉ)+ CiCHIpJ3f#q34f-BKԎܯenY D,c\'u -fNL 3)$D4S/brmRH 5>fdnJ drJYuӤ #kydz+d.`S)(. ?O.g<9ZaвIXb_`ŌNn ]FDtx:g*QW)%^x bv$i"#o$x]} Tq@$gCWev4Wbu5PFTkBKlJ%:7TA=#TH _&Q4n<Ήu{?9S'B:OA,'$5i]Mb3+e7#i~o2nkcG^3]>@Bln_[vk5%ԭy:giߵ7ڵ6#'R鄚X[A-UZuOLfhm;Eϫ|2l 6r=RJMVеd 4U9udu_*1ij[r)+AszQ3zF K+tx}uI+`}h,t8`q݉md4 C ӯ|o&IsϹ;|)li;{,1JOi'=WE1췥wM*a) )06*ꐨӡ goBо+Pv;,<v_l x `o^ o dp| U-bYUB鳂Izm 8XK0:7[rڀ:83qxdc\Y"c#Gm7}m/P1b[UV"uS:J&_N{%>{ tv1lEN-pPK E|$>sϓ,edu/harvard/hul/ois/jhove/PropertyType.classOPaE@Q~ō[z^bή l#c%#g?hbW%y_|2K<Ӿ__XAA.'H ψtb^@, UqM$ ZebE&V^ n "n ԉߦNA*oۖWd,Z^x hA |~~NA ҅5 TQTho-)r%JIvu +úQ7]6\]T̚mqr-\l).edu/harvard/hul/ois/jhove/RAFInputStream.classT[oW]g8Ζ@혤B4N[Bk D(R,۲7MS"R_)"AB'TRz8@%̙3?. &0&UM!3,LLc>b=˞s,3pA@~QwJ.qVLTջ nq/έ߸"/`FN +8FpwTjTJy⺀>UXj:$,q󞳰SZv}܈Z'htN?s敫%niْrT$m׻2K&/lR'kް0!N([,^nLX8"4_E̢8m!SHŕ̢S_urZnd,VW !Wj+޼G[;"^Dϭ8E[E>o}Ip_IK|}u:?D}@$xe]ixPK E|$>2Fr+edu/harvard/hul/ois/jhove/RFC1766Lang.classmQkA&+ٶ6[h[즕"O)Aɐl Ylc{?!䠠UDzD3`e77חSqӀU\梁K K{ j2Z'.z=u'Iv=yFεXRS+ǽQFB 9>B=cze WMdkfb &ֱẉ(Ykx@>zQ:hG/XBtҮ'Az/t&D%gi.iWpWYٰ_cINcV⾁&V 0*@*y X)J29-^ i*H'w˒H;ŭxUT[g(#j p&t[dM['(p\:e)yi:TX7nH۳ͫ@ ܮAPahX!yb)*PK E|$>i[(edu/harvard/hul/ois/jhove/Rational.classmQOAk{\ڂE3b|H41,ަ%]_}?^Jdgfp0 pqޖog7i/v!s[f>E-X(y`9 9G fm`Sŏ7u )'#[ȳw֕ވ'^'edu/harvard/hul/ois/jhove/RepInfo.classV{W${miJH"IQ@K!AZNڅ+'NhJ9J8Zpq %\}ǟѯaij%̛7Y=Oxƍx0mT+O3yǻ0yg|U|! &_drQŗWWU<15%+L.1o2yIV-&k*`dw"x er%}^xCVQOL~*Q:^4grNAi}I+Yo4k "sBޢ( t3͈ԐR=e#HyS4  hScCC㩑 gNA\d趑>[re esr`+Bl N?[) YSX )N/򚎋F^V<.Ri1J\e;9l i[a.%+[|kͷfY6[z`l2wGL GUaJְWCur pRWĭYYӾ$:Qs!C 8#}ŭR\ƒE#R|7^ڲx}&wIɽV kN-5\w5ƫJ5ˈϤzE9tSUAfvgi mUBh5'![mx:9 RwcRN=R.'hCKߋH^/ ^>:Z=j8i&5îU?հԕ:DEh,@%ħ"r-6GT{)Ozd)edu/harvard/hul/ois/jhove/Signature.classTMsE}e6#!q,^$6IGN 96ZQI.i UK|ɅC69 ( tKr~o=y  \ƌA\9E<þw U^^a=I0M x!Iܒ(]heAR+} ޮVZ-U|C`nh[^ckl[[4+mjRHfjkZ%Ξ$3ɝ[! JW /o{;KcO$ֲ /,eOutKa_9,▹z ;$Ev\Ýa1Wi%[jcHmc6ø! 8">eg&^ƈQ儉 Mfkso{~>7QĒIJ w o?\э&zD]VXH)Fzr:Êy׽!p6;RvH#P 2.ԻpB(֐`i`CKdm&@UZy^!=-(0b'd&^2Qq*)3[ZDOw,=3Gǘ0q49NssV~ b0u \}.w`N <&c`5FO|>|ӽ-5D:{f.A ! s{l3Ssc '=}Ug{tdq@ʟ0% #~C?7PK E|$>r;MA-edu/harvard/hul/ois/jhove/SignatureType.classPJ@=gcU]mRCH)1I%. ~%Ό s}~}<vuP)gOþĚyۑ3pcĞhI=K|; {> v85 Nnl&ȵxKj7Kj4l7x51ANmMugn lDpOmbd1 < l (,Ƣ}$,2P9o-G4bTCC\JGM&uɽ S@- 4Yb2o*S(I0edu/harvard/hul/ois/jhove/SignatureUseType.classP]KP~εL3o`ح,34+9N6& ЏY]{<'2dRKؗC.ͿE R8&Hjko uf 4Uך`jϚ84}v?gQfuz]-FG ˱K|YUmL^[Τ^$xJcl#@6vHBT E c(Y%y56S%ܒP[AF蕿T^qE+Ίfc@˵l B$n[k7Ć lD<TĥPK E|$>v.edu/harvard/hul/ois/jhove/TextMDMetadata.class X[w B\ccl8`Is!۲ (d%q9}߽3mӦG:NnJnz_&M4m4쓄(Wߝٙ}RPz,EV.^$Ζ88W l.k;$vJ$vY`7J %0lk`^*`?/q.D!\!"":1q(A $B!0p!BH#L# "!#FK.C +BkCnB[nC;B-oExށp;ޅn }"DCF#E@'>pA!

/"< —,W5#|B6sA."?A)G9/~+_#C= /"%?" A+2?^A|2ÿ-*"NkfE< ^Gx"PTTLRJ*fTrT,TbE*TQABe*+QCe*Fe * Ee*'Qـ)il4+gFw{ 6ƴXk0Ƕ$⩴OkiM jzC>{@ y;4fAoo;bbWMBݾ g=)@{7}==g x g`ػG-lC݁=.;zAԧt߁D<1{Ƶ$@Tg&3ZzgR{ Bζ#4^lצr=>*9jhp i;+dQ\J$#zoag(MpZOfh\M`ZcuRKNLOFT4P(fd*<_M޶l[4M Ըi$"lo qS\ l*I(>NEڌ9Zx~Pqž%>٥5Y)kjXp1kSuS Hv]`S!m"U(UsѳN-/?ԛP'4)UDٰ2MrtI'gin,4gVZ ~eUPoJj$%+CU]l*)V3kRn+%K;7b wUR`Ūl>۔r> i=eŢܲh$"+<ydzZeY-#ۜNl>j |k`fA5{r{zrm=@_M3m֠7ru6[{Ɇ9'z򈵻|pT{K=8\L|lKxHDE8bZ:W G NF}!CmF{Wg* 媠\vG'>WKd'?쓗G} ȓub>qĔ=!~DZmm,HE'Aw.#z$Ď{CFcyO4H$C)-bqt˗x4]2m%^)M;NgqjΗ{Hb62 LkI#]$Fu/񈖌8g-z<=Ԍ_|q]5y -R{x45Y},eBQ*T󓣉cٯcz Og~-=ΫZ p) Mz`O k.$đd"8VGc1;--De,1Ӛ&`0obk-s)!9Oʜ5!=Mf?B[.f>$V˛_x_I\Q9]h<{03ﭛdN۰--UMe/֫}_>y'ޭٱ3&rբw2To4ŝѸM{|7@IblGl *8E ^BkKo(O,@ -2dq}xeAOU W ZK^_"u$f$|\PƲ@F cْ*?6u4ʪ\-kڬLrE\-댲A.efi-ɁG4)DŽ"azPmhֲ4,mzX6u:GκQQzLz8 Ay |f^Q~TGR8bo`)pj֓c5sV4ts.Bϻ7E1羱;,:mSnڍEmLTN\*O{Si/Gx%Stdbؿ0Uɘ.`m[sL*ʞFLtJpN iDYV{Ԟ!Y[^+ϔF)#H#5e2Djei!;L+1+YEjr2kYK.&Qsma:\Eg1lj:e6{~$a'/d@;NcFnH~`6Rs3*c>.kY\GIY@ōtD7уzHòv:.;YI.z'ĉGŧO<$VO<">8 z>I yt^xL慯Wyͼ-v^xK ߧҏ'y<, 4/edu/harvard/hul/ois/jhove/Utf8BlockMarker.classTRQ=730IP! QP@JU5 Y y9P'X @bn ~o@)H*UvO?N>^)p'2ȨCBZ;?:$\U5~^Nt/! #n!( \:\*Lck̚L3 gtkim=4\\ {퉕-˺ֳZܶ|$3REmAu+-Z,h eCpiVрF *¸UAch(m3 [3 fG0*#b g0JV1Q!pv8ɰ-O-IJ^ ClL.ULePY3IT=*"Q cY"]"eBL", кHfa,<.;ob%O\ijcC=-#ƢQVv)_VqS8vznzj&NOg݃k@|%}\kQ"%څU| BaXmz SQAQZ?P'(BVԙd09z*#o p(PK F|$>6"+ƒ0edu/harvard/hul/ois/jhove/XMLWrapperStream.classT[SVlYˆKMLB(!mmBzMcv[[pI*GȔ'KЙfڙ>3J;mwe8zݳ߮~{n"ׇq̫X`8dX,:#%L2/WT.5)ƥcʌxQo *edu/harvard/hul/ois/jhove/XMPHandler.classT[sV˖8$ -(ƘKJ16@cV%Kj~ \b~F+2\'G!u ,:[ 6D;& \xʿ.a;kRW./?¹ȲMg9pAM DUV%L4Лu'gupzy8FA^*ΦL' o2Vo4M?t9E7q?:pĿU 9"ߞaMC [ AKdܻ0 1V럢 nWŕQ,䭻}}IO~OGE8S}y/Fr0}D/vpx:R^yG?Õ(q\d"$^&ζ!?N%fiMNF& 6T-|# pp:U-5w/q@SF%rb]%\-dq|-|*/d;Hm9'Rmdf11(63+Lmn+)edu/harvard/hul/ois/jhove/XMPSource.classTRA=C6dY0\"\4nq "/ll( }}W4TIPMvk3=0 -TJ ~nV{KEe뎰*h+=p(CGțx_VLVJ9xrPQU+r(!v|g>{C0>wC[G+}M4R|xR0&JB6ʦ*.}7')Bŧ.ióGu+ʘz]x.arC"\X0$~BPK H|$>"edu/harvard/hul/ois/jhove/handler/PK G|$>=Ȣ 4edu/harvard/hul/ois/jhove/handler/AuditHandler.class xSerI^- M1@Rz j(BMѼpxxzuUk/Y=[^cOW{IҀ?x;dxFgݰ+2|W:ߐya /"÷yxxI{ʦ2# ^@~셟O=D/x~2)aohd_7X5ɴ7xxѷxxѷxx};K%?d Lށy w~CHَH DBN]L*Qb,/B2eqT7chU {'y 0DG҆qSei&Z+k2)SU=!Hۚts.JַKW.oDp 1vĢ1k[ [}ڌa5q2fS#kÝڷ "ǜ+ȇt$jFKFQs11^M4&xdi4Fr„B5״it㠚ܬ&#iш75#lTNe;MxM]ʤѧRq"g9NR7U@vr :SY*-7hTw2Kά;ɏ4+J%%\,)J|tlԈ̮ڈR,;mI ])m"HU2E^اgЕMMq >p_`4i36 Qh+ZDO1.yhXݬ  ՠ(&F&e4ɚAS)Ք$&j*I jNI͒Kj)6әj@l2ےсAS7w 4lf[I$~eMbYi2t]UI\KZTږlShOi>Klk-ImHFxkb%\* \- ~Y+GŻ7-n["n;aGOR3N]g!gjkp-%n\'p=SµO L:0NKGu+g.V_GuM&EQc$Iy]$^*W *5{k"sv2 H9q}j4 BnLqYx.G|@E7&| ;b!bD p?d:ӱun 7+&]s!^WRsx5g[}|LRCNlκ SC ٤,=k6!rh2GZ;)@&LڇmZ4W p&Dj v dhUSmҍnDHZyk0F\mx;NwZO;+Zl<}[4E͸hFVj*hFJsM2jpze}pW9䞤.xk} )vŤ2W3uԾ\=-QI˭j ^\U9=6R C7XgᘷL jkO)j֙4zUuʳ W:&I5m.2m,&EXzdV$HTM$4f/8H{gA2{f2J'o%%X ʎ>YEY4x2ʃeD]CyY5l2uL+.>T\CEZIi9\{0/:.(%tZ_0{ݽ b) p?(I%eM{uli*u; \Q|eJP'^/O} L^եOyN5qp?PK F|$>Ð9<3edu/harvard/hul/ois/jhove/handler/TextHandler.class} x[},_eC$Nl! %1xKQl-#Y(--@ZPvi)'ֲC}e)P(sftOOofΜ9sfHy$D*Y␸JJGF5I%)!Q"͢i6t9OHyR>[!>0X쁇J4iQii4JGKSirTxҁ6JӑΠR)ҙTJHgSi<,x>-PiA+UdK HJdKJQpcҒlJ: NGj2*QH*SQ-R>5J1Jh@;#V`SJ(c cqH@NkRXz|taUTRkԃt-HO:-h2+QiJT:JQTalJ^ TڈtI(b~:J?Ot*Nf JSz~A_4LlY89Hyv>]Iot!1!8߶R"H/ҥH/HҕTC.<l1·kgQz7PF7cJ7#J"Ѥmv c@݆x#x&!HcG#݅#kTG_7@*=!0>ǣ1i|B@;>HH|#=%=/| ^ƷWU|{ ^Ƿ7MVc]Mza&}#'|Iac |I3i&}&}sK9XTFvb]M^M&@eAE&HMVjx=RYH=T4_ 4P4j(6>|Az*O@F|m!7kTnr[#c9+ᑏWaX*GPCkr0[1w}JPk'K>*S9B*H(cTSy멼'e?HD#=?AS*tOf|Oϩ|O%W8CvKgS,5z.>PcT RBL>`V*_T%TeTAW`WbUTAG* abTTT 0oFz oE:BmHSyۨ|;rB;E廑C{C} }axʏb1 ʏ#}O"}O#}"}#}/"}/#}ʯ"}ʯ#}o"}o#}"}#@O*#* VH?HM/~I _#;n{-ҽT!@*"L0 SEARECJClȡJ.UB*i!",FzUEzUGzU*UTFZCZK iUDzU6PiU1hJ+6|Se9TY* ]EcG HTY%ua*!k҃t-UHO:TCO4J8U IT!ғ#r U~BRTFT"NϩrU~A_RWT9*gBWS~)hʹ+jRXBp}pvogvk<Y,H,/T\l"]m[Pk"Ѿ`\ cyաh-K;cPK0 Րp8~(3RtC[ C݃k{gG±'ͮXYrZu Xr@fe4/ wPF/6D{C3ZBuk"p0_ YجʞP?H"c9XT u dZrLX2cuk1(SFX`iH<5Bn brׄ1bF@d6fnb("6P|`pO0>3eLbiFB&) scu{d-,2ñ TS.H_p ӈl œ7%m0iB`w0L;p{ ʷUZ9$K^qs[S~j04e iв p<}f{B"P ? b@NЗY&E`8'%TIB68>gluK;L? Ee`UNu8-!3PHר,0.CzEEnYkxx=(>!whMp7?rY |YȹUMpڸޜ9ȿzֶ?XP,:Ԇz{#b2λ* b,zCX?zeXiKC0Dս.}+ EoC CX8 Y F7iub,R6Yaゅ 5ߺ)f7/ {B 9?XW.S.7sz܅3-ZP6ἃt L؟WDG}poшrh\\+W)WkteHFouʟtZϺrrܠܨ+7)0x~`$ -Gtf`%tVe4lC^Tes]+ەrܮQ3 bPԕ5]W ׄ{L8>+Q2M] at /-7P覀05kBI,C؊GtQ1]<< 据<<+(BARЕsS%DW^J(E,%ed!B0{b]ye[pĐXD" ,ƀq+oʛ؂@Kn @.>">+(B-wGgԕJP]y_&F6QUFYtCDgjXG9`L]|F|VW>F|=ztm;c8_ 'Xk,~Pxn)MD@L ,{32>JWEbI0`T2+7? ]B;* }?m457+ߠA;N9*.ilVy1Q2Q@Џ I@#ue=LG9z5(~bt[Bg񮵡X5G"u)i#J04{dM+UI ω몄 C4u! ǘ*\VЇ(U fH?RSנİfѬkj@ȽZ94b Ml-(OsVŻ01F"ɚP d(Ҧ싵OOXՇn\l'q;p&Dۈ\ke550s,!̗xǁODY~XIc!:$~_S']Q(&iiXDХtub΂M`(|o\|{[&a+ p ]AZk.Ťń؊ <ξQ)CQWuގQG۫hpUWe`ta~tY%m&Ll:#n6b|RfX83Aհ&èVA΃\mL#6:Wca1۹> 1H|i ֜+]YEWAhQ%^:{k{hZ __0 ND걌C+^1f60f^'NNj'[QM\ %uK;k*a׵a]=eQm8@Sojj,uf28U |Z`5ը[cpmk2hfT Q2;k]x&ɉ578D5jQ&9}0C1l [d iĕb+c1X0{q]]]xf=ꁞ:A]õfTԑvf8^E-6i;(Y B;d !vYxc.3d>LHF`1:1fɞ GMgڃb|B;w8 06 TEQ@&,a{s@DrGjá^kj;UɲpmUM-M͝-][2p"p`JQwFP 9I,Ʀ%Ox˂H8|i&~˷ 9.*҇XF9OW7W7z" -3e)z왢lɘGY1NHWOa*ވloǸ? :VWE[W3ZTV5KiĘik{_fg\$ *wm =ZZbmmx՟))k l/_y:OB5k-?&b왈-`AԨl1Ynw\ճ1JǨP58KU`d>Fy.m&M?PCg[SM rPJd 22o|s!V;pӶ06E.#b0: nJ#+ۂўlj de .aii"'cPweɗQ +dy& `H,#f=im{9&\lVr|5+:>Ub0څD!?(ؾLkΗk08%iL# ,ih8?%D#kQV浘2>=hge'uz={W6-XwД ,9FVaTq;.X[S!*LƲj#rk6Db { KoE5$d#6Dڎc4Fz(X$tu0+ L\L!F݁Q*w{/Xv_B@~3%n6XdKDx(zl$䙭Ӈr0Viz?@xJ01lsZEX'EwadD-{eރ["KlOqiu}ߪ{}x Ca&$ދ%ò׷`RZe2aguh&]y57$\Ì!ͱaq)ʂϞ0$jdLP;t^L w*;YfV3}A&Oh1E }d,<~DfɷPv ofK xLk VC~dt13oyvMu{Ue[]Sce=th0b DVdÉCI(?ӯs ̉3"lGb4_?`M~.*_ s1twEy\ǑГ̀!jg/"ԁ˪fS/;݄:7C[0@0Dg25͈3bYh73#bpO*U 仔N Bgj5n• Ymxc۔S,h[ ⌗'|̂L`S[*+[2'=\_׊wm*ZJeKKehsʺ{BӠ %y#WAc]kStkMCM[eue[%bk#Z:mU{u]7^)Ϳq'V`hKk#./dU-ljAM77U贺ƶ$75.DӒ#kP˚ZڰZ0$\z@Mk U... {E2qÜԺ͔#G5/|l7#ke!1i1 ^\ إ#9&|U Vj0=qB߻0n ΋% K IIe7a^sbPa2݈ SqgoW HEXM fr,̼Ի~ˁW`zĴ\1lBy;xt*+_/ԼC5c!Xf#J #y/ ޘbfyigkղ0YX]s&7}o|676WVՠg50KMځMMlW,ӆD_=QS@&5g>^A+aFͭnhK~k64uu41bus V:wi~u5}\>I:K*ՏΙwX++[:k떶s-IsseM7fI7ՋGjjmo脅lYS5I)t-u K//NQ?Z%6ݹuS88 ]psS;tX1>sy8Ns>rC;-XsM 6aMn r%ջz;NsVk6eiGE oB*= ,K9Ym(t3=5`lh1rĹp>-p{O L n.pΖFc5TVU_l1 ?8+ۚj[* ib ]h46p!y,oUFxeCs=ƪNE5|::InXfu[.43ΔC9L7o6(qc.:VLS{ ,uHu YNc9is! 3fܜI94 -L5A8U;9ͥ?a%hwph G9l`*675X$,O0b'$ K[Iv2!̳oh@j{;ul#f1B&I)#d N09L!S!ƲLGYrz@iRL',p<NI2Z P|R!-1P wGȢ^fTwX0x<yC{oonZjIUv@j86 Hx<'Y{șx;|vY5knRw"-޿++e.ź9Cd #s@vVRU0˼ dXش4oVh-RRزB$wa>ַ Z MvQswj]Lw !;ݤXMJ! ^.` pвQKo>t&𝗐陎A!3 +y9Ђdj+'ae2Bq?Htx/0\xQ,(9I*4U >*^O{2t;go` @du7Ik D}skƞTq }$*0T'`:7h A#ilQs o? Z8:R-0EIfLY[R&N2a7)2iB hd.R]Zʧf)R>feЂY 5ژfxQXmwdbaYC|n`rceVnJJh'B22jc) Kp*7!(x 1DcY6{@=՜o&Q(d 0{Ko I;ƛntԒU'M>B<>dc1IJ}ن #dO\4Uyd{6xds6It.9Mfk}w2y7q3v%*M͞J[2PC vF3vÀUx?GS4< >h`-PMDV%F5\]#rb\i2_Gllk 3׈iv%Cz(1>l>ڤz|J>#>k,(coTݴ}y  }5҅Ffʬ6L!of2ͩ<ĉ d}e[S!m,vD$&j>19yc<͛e,7<>0]3H)dM^55Ǩ $0·<'Gan{Lb,X)a[\KH[_eZeAp)$;w7$v% GN8:!hupy,_*hO*_6^qg(%gMIh!r!܌R,}AGʔJu4 kY$$}{d1غ6!o>=dt|oȡ"tϛсf[^rEV L{# sg..Cѥ{7k Ķ &P}aNPW ]`P depkiiN2)V6F! EB@Td B O /_<_ӎ^.|4YQ8$  FX\rYBQjr1|pea\Yr0&5y,|YrŰKM,y̰0>5y|pb2zX< >g/ &',aaɜÒ/HM@/%<,LMM>><_K>~j4@`:&OO ߗϒIb$  Y({ -W-]( xɎ)⃶ 0~k}xވP&.ۅr?!g>-]-eyˍz^yų s0~r{}٬^=~xr#_MvC/2K x8 1cIdpc X (@ (XԮJ2hhfkِ5כ5=ޫI!]W;d^҂٦5P5Dj8M 4 4a&Lф5a&52lAq8+S2dj4n?;Ʃ40_CrɌUL'E|/Xa -H l]h]dܠmCܠڠ١۠GA+m%n* ZcֺABCr |KN2Cn/5`м+6v^Bà55VV.+-F׻blFWl =چmqŶڰmvv9RKa`YE! ֌,x"uo]±,x? ?p2d Ӊc ?I[\O"kxjɞ-vAL1 ¼j&D9Ah&/$RSbaf^rqJ>, Bb0gL *+H4{&qd鳋ȮS?Mf {ś{q/NFIocI !Hp֌B ݗdc3cXɯ hO_fZʐvf2! =vMqܹwh9pߎ0߁FjyJoiv[~h>C'޵%r>r>r>rw﹗˾^NSWP#R$P<»f"O~Anrp) ؁Μ5qp9jd"#/Rƞ[B}%8XWJ<g 諆yJpͰGhƟlusX*7aX1Z1lkn[l[b5d} v)f ?_м4 L{>Wxgn6x6+_s{=Gy/f`v> Jgd$wv]q){WCҔ85<35}em]9lrt@:GS2U1VŁUL3^ 挏];mi'wT6#7mSܠ?A== tn3l_Ai z zlnslsݠ٠?GrbS^-;*|o=dqf7Y(̬(-Cha'Ch>GM0:Oblݟ^^nt~iiK,aT9r4i)dۍ~rN96˜\$9|+) @D O>ᝢ=$á .T3C XSߌB )¨߱(Z$nFwrP/䠮NAN8lxv74&8<4E.pЈAou=g["ɿŖH;?>Nd{[jP۾9KlX`eg`em烱,*mh*Z\Mw92v;/A:E9x(olʱy9c.б9CDv*}!}8F|~&x ^ ~ ^ ~ ^߈p?v-H9v- hrZh;vu>sَPw3c;/SOjp|ӽ2[U6p:tbUba.xhC;Z9phY+phYh?tP㜡7ȥ"E"W[bY`믋aha]Vú,:e:vXW?>vD.#ADn#n>g|>pß茏c~ ѵ6U6w8 (sIB?qR*IT|w>)gEq3~/G:__Uc?LB@H$gLgHB|cYDMAV7FYg ѓ!~HJ,scǗyie̮Gī>˫sU)~՜W [dS+/yw%w'.L'l%ЋE0LEX4`vPqw⇁`E2F!h/6u%?f"$))1Z 2edu/harvard/hul/ois/jhove/handler/XmlHandler.class |]E8>eܬ//Rڤ{iJ[tKIҤa+kHB.* *BЂ EEqGQ܀.3s}wOOzޙsΜ9s朹g{#B28,4Sg iDĔb>A) .e2L3e+/p9*M R4e5S`Oe:hI(zF LوEmx9=PRf&|83x)ЁYlt+Saɔs1=)]L۞Szr>>HG+R2P * v2eWrrS."b\}X~L/b!L`ʕL0H2*L?F#L$>\2:LC/agSL)7LٍML)[r+UnC"GrVt'St)w3 S`z/S>yL?krEBOS闐xy){1Ly‡!<>uǔ Q ^c]_Ň'$SƔLS0i|&S3L6U:y%2 })R>CW)?D1/?JŻ3')?u_0 Lɔ_%=ʛ Lo;>A)ʟ:L Sۿ2oL;)mÔw1=ȔCf *k*1uUl/*S5R2ƙ`j(`Iy]ifjSypQKj)r^%ԅE(.TPNA"SNɘ.j=KKAerpفe+l%UApUL=%A&MXk0]*%NdlU[0mzLOL7R өz0gaz6tU4C͘S,^Pu+UQR^ҟP;zS/LHT豋1bzS߇^ˇzWLULS?ULE^)^0FMx-Ltz{BR;NxPbݘރ0uSeg9eꗱ!a0Sa~|xb=_ac8SL}O1~0}[L}o3YLcw0}/Q%~ӗ ˫L>S_cL?fO0)^~יso`/+Ld1 SL?ag-|+SԿ3O;xy/zzL#ILa*3Ma?i41- 0MgZ!ӊV%L+ŴiImiV2 Sic0˴qgsm">T3mG1m2Sv4Sv Ә6b:i31Ŵ٘a\L1m>e꘶i"1=i'`z"NbL[OL[iӖbia*i+a%1]ŴS0mbZ3ikv*S ^Zi1m6bFNǶg2,Lf&mƴif/[iL;i1 ôzv>>ᥟiLdv|Lۅ0BL/bŘ^´K1iL.2CLodڇ1>ULg՘~i]uLӮg t#vcznLimLY4]Li03G{r/^>Li_`%ϴe=ȴ6ĴieWgWӞdטӾδo0Ӟf7-},Nf=Ǵ0yӾ˴ ӾǴW}ƴ0L~̴0L^gϙ $~ɴ_1Miao;i`'ia[L+ƴ3L'f;L{d!f 3J1*3021JeM0Zh!E3Zh)e&-g4hV1j0:ѱct<h5I'(LTFatadtfts|Fetu.d8F1fxFO`DFObdF3ZF]2F3ѕ62SmbՌat-2F[]in`t#mYMs0vF;2ѭXNFeKzy1}3}a*|40} /?`'OO)KDY]߼L"eMfgfweznzD r=2]Yu˚շHa kWlmlMDZV.ktڲu-kVK`S+.3qBgOI1mi@!%sh 'ۿ-C"GMkv ޖ۞똽mkvr۳{{9la@LokfsWwIE`@LOGWHQK(\`W#R"S@e{{8S["ql\lπD"[0!=#m%rL ,4>DI \n g>f:;sK'fL, rs?5;BPgaskOf`pEpBlh͉>;zs ;pm_77k_蛔P[p$RoA,EjkGEm0}X-a \2|/]MWZ;6g2DfFtH 5vàI͉",U3O"%v^6ӗ΂#V[P lf3׃Lulߖ\_w=[Rl΀/oDd(٩o7}H<<]{ T:[Ztʻ0`"4=i!oUunF:mkUz5us[w&6~;u C3 v}8#RދkK,Z:p |Hq3d{`:ZZs܋Xi@rh|Q]~KEH:˂Ng[ol+Va$wwk;v옵c\ٰϝ kXgvv F}XPGiY{(GoT7,tAÊZ485{)It:{8Rv*Ͷll媣 ǬgQXחɨY|zȆW: W!s| Yjr+|@LA]"QU_^ŲXcsvbêtSm Q'Eb]].~|]70s28&GNW ץ+.ћ2E%|h|]a X-btIUS:]Iot]}A ͙^\?y^vGuvdcȖ,8)TgWc8]gwKtIq6:ޕ-Tg׊:Sqή;fZFٍG1b8{F"s+At=7: d/l e|34\pJn˭x /+=otOz78]y^%RRP]Y[sg&X`yYsfU(L"pvh~&R(if)5s7n gA?4-Nܞ]_f7tF}u"[߃\}`Y,7ػisǽXY,p[$`z͙5OgC stB'c>+^wNΆ9.$hx0ϙ'F=ו"XWKJ)HmA]}Xg0`/qf}|u#T_D.ƒ\w/L|NyrJXoK"1{m؎ξ]ەkʹðޏƋ |Z95l/O[憾-ut6ufF\=NXAGt(BT"ĺ,t7%]6l[[cv_y¿y}$gC?`r;ׂ׉0:{ 6[CnWuD }c,o`fٔيJk4fYN&V@8lq[|:q;y=p,2c3@83OsvÁ2E;]K;{2\ϳe:{ݚ Ӫ_gn +h ((mm|E[[r}g^wbIDw t}2&\Z8c_|M/ z-#}ϞkZNǫث:Mliv{g{V"՞ɘ;/[ +͎ !J"לP!^~dl:P[{ evoƞ1-`rgV9mm(wAe?Aef9g; O._۹΃!s3!*nՏtes]b2.VTR%4hȠch7݃KHvͷWؖ>ŸMlgoq[g|>m3e4 74aqwRggqsf\v [fb=ƮΞ nܴfA3ŚٞT[H&γ2<f,ǽgB;f&l$JMmȂO~p |&(* JX:{qaϦٻ| HC=pV(5XTevU&jKC357,09uic W#aB[2% "k!Wb+[lWPԛ6k=v@)c^bmnbm!\p`hpZ9mN< g#WL:_@_,b" 56yxiC/bI&aa j#oҊl3n"/CI{ƯכϚjn|1qSqka\'nʝiv7Ml+aN-v5lKNΔȄвMz)DC*]Ԍ171{ȍXe^rh)zfm۱z> x*gkIO=>6'Zxd /ނlahm7M*i\;z=?ħp6,ej:_1-*ۗGƷ@,e[%c/]2 K eŧkRG]hu;+^-\ܹsĕ*VEwX%#̩l;6c72;;|g|.Pg*rs#;*c@ph>Ͷsî:3Cl1t<̩%X9yoXGbp錘01fZs3FT٫':M"c"\9 .5aSveRg) _Y Ě1{n6]yqv(]v+Lf=oۂSܶ~#XZmN­Ca[Mf=mf6$Av Z#vd`^Gh3 @n`٪"\H1uG%&"joKjlt-B"\05+LCcؙ7"4-|gPИ cJyѰeXa9o rwY p? v{i9 Q̪b#EyAX%P ΁^t58$/ߑ0f/] mVGٞqbQѕHHr#CӸOFZo7/iZu|ajsV m+q"> -]Pڸfu}H {K;kcƮ^9TiEe)5kMt l<&d=,\?~o~7DȶyLl1%5jػ}JМ ۡ@z-8mr\hOUaN)' $o;;]w!s8V 5A>` 3Q8ݎO1#˘#_Jou8h|h.ofDVa1ea9!4o[;K躬c#Ky-ϸ^Yanq}mmQo-]+)kkxki:OٔA{D5Wp|o 28f-"ry`^Nt?)3qEҭ~ٺ6cnlYyYkzЎ蝬_ڸ&UԺlck|P߄=JScK+Evmc| L׎ {EN'Vx؝ܲ P׭~K֬iZ;ʒ6JWaee0m|/D]޴he+HiZz@YjYkYf]+vJF,alL2_Sɷf 2yz4$yz*QwV}zʒ|JM 2\{Q^_#MUfD*=9[KnY$&j?3Q흝=c Iu9|SIwyH @2c E2C@ '`ׁw$?#56WR @(=Zo1_4mT,VpC$y"FA%!P#J ̋wq`gyN/unImĒ`qVIL)%瓰Fq$8J֝uܨđX8c[RNCtz mX ga:CZDWڧ}Bi_1sR\3ғb:hR׶ؒ&`A[P8>v!a_à&_n5{q+ԋ(ؑ^n2'7 FtgU*Õ+ux}guһ!Fr>VdZbv8b|X]f.|+r/@Nv<"X$ڜ"3#$*L55Ұsnm gؒJt5Yl{Ҟʀ\r-cV \%Sfu3LH3ܒ%wYҕmt亏~%#Np#w_@;׊gǭpbD +٢03-\!l$J '.0E&TOLYb+\|N>86H@7ÕgXfonVZЉ-& ^r"zoL9=!&o0^ ʰZ *͗ex]ˎ B?W(jYjUf 4K/Lsu>tbHsg#(@836IQ6`dį'B\<0mXO٤G+sᅵ=HblrV_Yq#%<jI&$?O1ms 1w ہO'ֈR,lL)gM͙el<=Clxf|7ȇq8W"7K89@0p #a>N,$-S=_:x ;Dj)r2WBuȃ8x:HV"sA}KO-^}_է`&L. fX05B0a4o(]Rɨ>H5M6mecP@z{b"ǚf.T/¥0+e" ~  VN.VrClƒp;ܜm$<RX8W}^_ wĿ([\{HQ1eW Cс7cͳ UpUZZsyq`OȸmMyViQL&?6_91X`ZI7g"sCd:Li wGW%*̧ Gȉrr37uZkXwB]JHC5'x}q,0#hs峆\R|}a!M/z!~!{}_|PPIّ(oRs?NUC@cPx~xki9gB#]2>?Oa꿰EhⱨCy||3Ox~/ޓ#cn?-إܡ{#\LVŮAtYSb4ا;aTU Ri>Pi!Qx*HTOTj '-J*5Riu׿l4vMbD_SJp%_ r] %>♩}Rsbtn~K uq.1T}ORyCZ?*?%MND~HK J'|V~,Kx*5KK~#J'`WZc'cga*$E凩(DZ1#?>N ʏ dpxcY.c0xxStc~èp4LI{A2ewrĤ_Ueye;D ..A-Ôpq3ܑLJ68$MJdRy5`movz΀qf| @q$ dmDlG:bj74@uoM C,uH6bs^rVݾ<;Cp.׃?҃8Xg h\W OFP8%piŒV/O< 借  ( ׼h7:tf^V;7D΍h*Զ('vs[:XyX{}2*M fI ȭv.ھY=t3u{x 锑:GH E{!Onl ;23m DWx lt} |4}~!/c})+k_8ʅp$MယCS yzhR`!i4ݯ Ur,=h)*7KhqrʒB}upݟNnT}#A_[{ 7=_ Vt?=(XjxO.}+ƈ^T@YC뵯 Eއ1|u^̖GW 1nXޠL&on͖R*޳;L*% Y7klhA/'?LAx!V,Z`&gaAL]$N=2,d`N$DOoڃ܁Ӹ=u&I7 f ۡϺa@; #-1CBp^y)a8y@ ~qN`,s|Hzjy%7RGr77nfc 4Ҩ.1Ӥ(6W~dOê4f@@hȺ9[ߠym|0?R_ R73o2Wa8y@+D+JC[fET,UP[p*XӪ*^J 'y`1"KUe0Fk|3,L@(Ml?na[Ccucgj o!‚8Ga7c # hX6;FF=z8Hp$jb1~_,&MHMVOIM*O Ӣhx c,D4jAz4UEWYVeItaxexVˣYMUY]e%jXUP2"XI x1Ɔja?Zx\)~U4REc*3{9;Mbp:v6^pB H;gS988!88-M{ 4[&+:F o1n:X>7qrx /6у|HjvvgpX*$EpZx,J"|fMïum҉ GD2v4"$L\,X]2} UTm2uf8~")DpAo*EKYN2Bbo_r`O'$pB >4d( V.$pz}({"\@uĹ<a8y@d*E8! [+M%tK+T鼀Z//Ox%+]־ R0,QyE3?rW%u1>*`ȯ r`؇G ~_׏kHd@/C:D/x7bWG?ƼQs85\ O&cE҃+3 m/f6'%q]W'."2f#}j(vnRݐ!I̺gdlw:'{S@+Mlt><=n Ücx Qt({Az/{QePXzr]d~(glx@?g)#5A|ӇhL]b}/câhAatS\t܊Lnw9Bb_ AK G0J[~xWsc-?H^5sr||Ye/A{E=Q< { SCғ%7{֞q{is _MQnۀWzȋ`HB?C|݂=T(pJD.E^ڰѶa_>E> Xn ؍Kl!xax/D#bt #P_F- &#|9TXDWYɍEՖWU }g6pHƮEއjF~柣0|+ FJs4,k4<&G#LA{-P{?g&\x?`A93wst&cd u1/`!z2{C"[brJ0O'wX;]̖dQѬ{VErmrUqU,zUu5_ub`[~a)f>$ߪSaq Nƶ[I Z/I0] jRI#EG!r!P,(kd)ESb8>h"EV8scbYp0h`C9y8X`p`D#x#Au0+#cJxb'e=],LʅNE1K0Lʥ'2L مX?x#UUXHJ8>\Ş ަ)$?r>Q)5dXY+IT[Wp_`i H/OZ_ǯůԤ_n`Xor|\а0)i*c%>@pđ}+0GS=t)AydsrOD,N_bZ3ǤS{HSRҤ<Lyܣ3#lIR),ө.k⌼op"+xS%w2*0ީ*V`LD}2822kFehUS  w2xX+骱qf]ReeaR^I'O@B 7NF+S=_'}r8a/O+JWO`CHp1vxC!IHjLN'A2.) I*)/()C=TN ^-O=1E9ۀy\vC z {5CrCꌮqdy>2)Y+vf4rUESMǬf56[zz>3}>سRE7xR>{pƧP3ύŏY:(9Ǵ).e-N[-]fzc[Vg Fb^O`x{%@rkmz0{ rLON'QNwHڝU".+Z_|kKP ĸP"B/vHx ~!Ro$|(cT)RU/QI!)Rc_ ;I}X?Wc#W&YÇq18K\&V$Fg']>Ҁщ \wz8\̔ī@,H] o>.Exs5T'@T*v;)%`b|u~)J|ɗo5gCepm* *wl}'fq@Z>Ũ`<'?ȍ0@n2 mӆF0Jk;%k5BɐRs \.CfYGV+LwȤa2$r UQe0X@Pl >D*FU~XZN*F_OTJ-G12ae@FKaTש2S%!>(1tV|TVf)󄱪l q uηrrS γp;y]nu(&V{YXs^,??c|D<(ps/-$Ũk.JqV!Rx~qW:lpo0ԳoQ`aK9,N 8r3G9r3G9r3G9r3FnhfgYD(p+ڦU+R(ʱBH paImO디w;jSʐ:5A~7 IF<]p7 nO,ɏL gW7R봔F/)Z/ 7ΙQr4Hk0Mi%ŗԱPC93R+']w݄_ fXBoc A?ˬmb```d1e1\g``6 l 96lC~|H \n6bؕY1H \ f}b|IXHfA,\|eݑG73C^23Jq21JO=@z9'l %8+'PK G|$>(edu/harvard/hul/ois/jhove/handler/audit/PK F|$>>ĽSh8edu/harvard/hul/ois/jhove/handler/audit/AuditCount.classmJ@I4MS{;fZ)ݨ M͗r#( ϴVI`sfs3ϯб]C;RvU_Cc:Sc`#}O$OOɘA 34gLF'8edu/harvard/hul/ois/jhove/handler/audit/AuditState.classR]oQ=-RJъV‚6&%i5ieo`qKMlhb|Gn m)3{;s ŪW42$ELKʔ:, 74PaЛV ]>˽|k?bH6=Cb1b$J[S0F[o뼷ɷ]A-WzXHvهn1m<=-OzP$FT($V(nXm9d fuUs\.` 5 #c2p0T=:r߶:גNvPPԳ][|`;DY,J]hUJvՉ(uz=fDLrUIiq5:4搻j[;A&1!Vhfp Ĕ~1%y-E:!`fi DƘQwDߔ=wd,яŌ2Iez F65q gJ'QO"P2ȇ,w#.U \r=yt2d}I%\eʌtKy@3PK F|$>!edu/harvard/hul/ois/jhove/module/PK F|$>qdo=1edu/harvard/hul/ois/jhove/module/AiffModule.class; x\UܙL^tt/}-f_6l,L%^g^ig tasQDU JaqAqEŅEqEf2Y:g{gM`x? p6^%*^ULUP.RJ?]Wg\0 ?績Zkr}#P_(/\0WƼQ/x73-<:exogbwxw8=<~UL0W.~PŇT|gQ*~U~u'>OqOs O3Ν_ ׿d_qk>a2S.؆) ya/qOQ.0oLe.^Www_\*[*xGw=? >҈psY D  obU\*>Tq">+ z;CXb5Fl 'C5`fWtYow%`='bF72LtJH#ke1jњF#a+ #@'X=0ce:-x"LC53CuȬPo YNz4d&-N(`12RzZy:to}I[2U#H^q0r@R<,g a텃ĩ 20 RI6Ҵe{cpցjpq8Cn),rdK,& XIB!UubhFNޘ,%7#qZ9MAc~z-R@JΘۯjsju B39JᔊlDOau/QMJ3D5) H|vEʵQE^2}պU+OZJ^U<90@tbPjڐ&k5qP|a7K;Ej*I3F&#ú,Zd4K7i9d6i'#EM|I\agPT\Z7)c5ht$ZRӣ[]["Fڵeukjj)V'kj[m0jDk4eMfu֮%<"{|a{@[tkL(x[}ζ-5L}ꕵ})+*+dܪk6\C]܁pfz:'(坈= @?`ۡ]IH kVY^^7vxtjiNL%Ӵ8!/ɎBwin1{4q8;JibX TU^M'(3嶟LKtƼ?'Rx@Đ&F(M!M<H ]?o|5-n}[|Gåx&+c<=}tx58 wM.Og.ExFSRs(L>RYz JnlF, &-Yumҿįį5&~kw,^{ cp!%9mS[s@Ƽ%b0)tsVv“V]k4`̕R-T'ȶED<{AHihraUK7?M&$Uğ5WfoxYWYNcz[J۹x'MIz:[QGQW#}So)ߚx[YxGeL.^N5< E8\wHb;1[U,'D@MwӢxE%Q]#4~njSh)^Kނfjd8L5&/%m>R|˙ MPl;aVMf⤋_ys#:N!%W>tAұ.uSoiMSFlM2NlT*̵g]9e^;ʔϵac&sI1c%x~de2۴zֶ)h s0|ds&`(ڣYF(,) l@WQח %|=Mg&(EKaQĘ֒o;* Bck -~f˂IYQ٘mYر!gx,5qdwIOǿEzl,ljzz,L##L4SAe\q3 >E9 %&J@]fFMV1#FKoz:#A>׃g6 ?0[JCfSGeO[f\X{dB XҥSo[:h Š vl/?:oe68 (qrC}bO%#Sm;wхHZ,G_3srm}K>>ɀnhkO`oi]vciCe63j?8KDUg$ G)`3)sOĒ?{Os.坺 hV"f+&Yu4\3iIey6B.fc{2OO`r qմoY*k\۲bM~!ӝS;ڛ:SA-yA 2#/ `}&1MyI2F6;{"F( &*f'X#@V?j]K!ӈm&bzv~+-Lv {SA`̴)-6_Sb#I_d҅WYWQ#4 S'Wc E" F-ݾM~[P01Z^_<e d F䯐VڿU`PC~+H]jln|ê4/asFbg RJSV@֓j m]ty,𴑋_yџ.9I\ [wKp6eoi{Y%노HbYDKxY`vKe]岮JjZvҮWj\C|aNέ,Rݞa0az5`cf˝n3r6l'ECr\CǝOHy + ɱ"ȭM4|`[S6lr< |JA~ >a8F:aaQN4 t< g¢M:8KMf.z䕐S⬾OAґqb'ywٛ>^l'a`9 9ha:>xAp#띒E7L@Da8h"w#,:> aI *B z'qH'2u3R  \d?9(Ky!pG׏hf2Jw] >63m *5k8 L%Խ~8NFn'!$ çl ـWML )yxh^A7XLޛOMx+%?X\p*ء` (a5~0! 5o^_Bn;p߆EZ1݁ ?Hˣd9hsy*,vN u8(PW L u('@Ɔz RB0\Mv ^9`g:;@`K}B (_Splܘ/s#7[Rj 3t|G붞eXtyh*6.\"\ŝ\\ Eԋ}bpH).Ϸsh讣;t7l28 \>+rEr[)wa6/H$ax8u۹:+Kd#.vS32`s@ FmJcdAc`wU\gWI.:/:H 퇺# Ps,øMVu7Zf*A^g—q..q^B͠yٚrlߩ*Vu {} L$gJR籃lYlѻ3;U'ɖy,#}1_y7Y="dp1͘{_XG} 2 k~0*0%@,#״$KNٕ',%8Ox)zbj$ %%"KW}z}$92#rIe~_гF/},BQЯ%g3BkCo;@Cw=/3IiYȿ ɿcov1 v % %탘t%C3le^ʨ^7edѺӢ5}^!i9oBB'#oF_$]YC'DϻBBxO"?GA03Cp[ѹ\>UU=j0+ŨQiRq:'U,Rf3LJFCJ΋,"*X.S|/xV^2N9%\Ο_b]lZ1Bh?.;6~?lOۦ^#m4"L̬mmVQ# kJ ЭD_)2edu/harvard/hul/ois/jhove/module/AsciiModule.class9 X[368>Aqb!-G!)D$aM]GҤ-ېZ%[6}?^%SFl2VHtϰj k$:.Xm&۸Hp Jz7.&'̵G۽(1tA9vq>{S!vcPbH<(ĐH|,{YY$KH$H8|QG=ƚcy`0-.`Rb۴xF]xO0Ic nepĝ傐M<,ƞ==υ0BEC×`_ヵt2܁PMSp<} n_ C8G(h ,?:&v: XF<'lbúxn==Aۍ<EDs!OD;NvĭD<ڟ"t #h- '#CD4U{t(qܪYRh:ȌpS4QN糹zcѸGis:(ޑuDXڛktxziFX-uPu2A!zYbol+h<!ԛ:揄)j+u.ױE&F9-|Q0?Fb&PD%L8.ApІCqFQJ/M `<MZ|9ڣ1k(ЄF;VDMWQc(9=A_M(b~7ã:ChMh&Zi32OXX@"9lEi̾c}Veͺuuf8!d[G=HI2$ea0q7F#V2x6ҕM$O[ɔdx#cPڬk&L2{hz2ьͩzɋĉ0a5Xjn+fShZI*Q+f}٬snwNWCh6bGM%vMCHKm'j/jXXCZx9?Q*g1VyͦƦ:oWWb0uq@F׊-mw6A+R=V2֤J!ri,˪PN.z:T*̀ɅJW̃t"^ey&mb}]}YPۨr. SQ+9魥p7oon =KPCMc5w_\E'mqTjJb/&MAvnNQ{(TטMd暦K8UcJ 9qgJxvmQSjUTOvΘTLk}5ՌDtKltQ&EE&k/F5K{83MPub.Q'ap/s=tR^C'aJO~.[y51C];u)WaO*ś ]z]xD+tt1|yd2&{EدgLtqHj"[ ],^2TqLT,#C&g1 nժ颟=B)&,6`;$@43;"VK&Fdz.ً-ꢺ8*i"ag31Rӑ1+bwE[杻۷ZHcH8A('gܳ93aPޤ {'Ř.n影2/v6Jq.ۡlLG;X(Ԏ5;g֊2sʨ::;\=p+"eEt(Q7)b+hbNֺmD8[ =VE4@]z[o{89ƸO~Ҷ rV&Qo hFE(G:=vr$TD͎{=q:ެD\%*vEVqJ+W8RuTNDFct}MG _"ce?%\8H>36IJsUu"**k/y/CG.}_sĿ+a9ETr׶wuzT>yZ e\(梽O?zQ+Y@3COaQ]'Ǐ$pށ6<Ք;=eg'v dn"zsHΧyf>i#>qL qq1cl'YFRTE/Ks >%Ooxz^$6o\cTKzS#V?͕.;, G"%TPu>҈57Ϣ%ieYyREhCT'fub?w^^D qJzUE4e4=fIMEf~3xptnw:K\:hg.k0= sz YvQ譖.{V%!ut`JޒYڊ5ep/<|Ϛ1B:#A9"vwkeryT9 Kzn]waJ=I7L Kn{g qhsnV,֮=K/au rwҤT~2e6/z$)+Oyl&ʹ}JfOrm+FdpMۍKUmHwJ8n/7_3]eգ ,飌?h_7i4.]4fljKb= zr~{)Sxx8{\G8?Og Q@Qe-5jqnïrD1B Jr5?_o>Ul{!}T(\PyVa!& o?6pN(̛" Mt'aY02XJceVUTSP2LIXסmJTd`Cq-U32-(Q1PCMYpPi^7(JViNY'ya-YUƎ \We$53ݠfڥfZLٙm }ɜ-@IyמsY#Q8 tܜ݈ g@)ZWd`_x0_1Bp "4D3p$QE=#"y3cd[ 9M§; e "")UO ![#a8zUk*pXIixÞ)Ф JWg m*a8Nq@NteMX**/彏tC55Efj\zb>4JIc,]yppy,Ƴ-w%PDw>&uSǧwh&{|4eRy!^O &xS/nJsZ b_= T^> sW-Bkk3:>o7hOh}Q< .jzNA xX)X^*xAV@t;3Λސqm/@T+u#~Ιv-2UR+8 .Z0.Ԗp:Aa,uf]q7g8<ݹ׬%E`ywTTKJ5/ ' |qiC!I{{<,T%e:1  ]j#jXB%.BP=r_^/0֭]9MIG z fA Kh夨A԰dIXJi‹DH/]Or-OMW/UlC\M.0b.jǪgWlVU0q5iSp&T5 YZPP?l.8)'g5e?nq:os],gtdBnY;NZ= !x>͕㏃Ѱe@b}&_\trqRnj[U('χUZH4gU4 < -Ӿr;B!ZB g|$r `x$;]@~vX, d0 ` A,Ai#4>Ge|`EEƗ.1LpW .3F0Np +o,1Epm\m|`=k\k:2~Dj?!O^_PK F|$>#PH7edu/harvard/hul/ois/jhove/module/BytestreamModule.classWW%9u@5MR/Yٖ)r%%E `ҳ|i l`C(Ì24re(#J>@N [{OGm-0y%+y)*(),cJ&܎i7qWj ^Y nZƛp'w1t7C0f[6F߾ ;eˍMx{،{Y>>FY)x([X>'I}ifhϰ2s2>!_E_JVQY H}zqJ/}eӗ7J#)r6+5}Jy߰n闊9# 2> 򹒥笃YX I9Op8$1E k/fD #$DB@"9J@8̊aCáD>b4?eǢ|Dc,47'`3$8{(&\X}O[=ƅ-(rݡv9n驣Ma2f{mtM5"D2(;2NH*n$!tѝas'e·L&D,PzUËUQ#* 5~Ƨ-QmvLw"_̊[Y6 FI_kRhi1MKc1ݒpP0]42e'јҶ(lEβ)A:''شibzIr.-ZXJ(6Z76R"W* jl3t8R;@ΘŒaM^qREsl딄`tbs癣jj%.mW5y\$ݥ Έ.-zzoP(NKX٫ٮm۵ۿo3̸v[* u 9 {>n HYVWSU|M׹`7CmQ]<{!KزpȊ"O佢IJ?R1!?y?OU #g_I W; ֿ įS[bk\ƚ&)_76쳊)S4~ϺPGIş񔊿0 =߸5jyȢ#a^(P7˧,aykޥeS"6Au": z9$m{|~.ph1(x^HL(sPt?Lͷ̌+%5Xj.GsOi _%RI(A0ϑ tM\:_t$yWhk"#ҶrUC w౬du1vD,}r^Fu1/3ª}ASw!:y$mT-R J6@W X04 QvqSS]P2OƱ >iFɺ%XX;LlWkݺlT/Cl&{>궮j,wB }}hܿ9k#۩U&4Kn>ѭ$ze; '_o@#7 o npG˄:Ϗ|7*Cۈ#hvx$O,p5F< eMgc4'=gqZ5x:=k+ӳutK$d_:{:*XEKkW# Ҁ(o\s?]hZ 1ps`s9-'V8hƎΥXӂ@:ql"ƎS!@ V\xf@vp\x%5w-]gНSAo"DK:+Ŷ9l`c;VVٔ.v%.a TY>=$:DY p.eT$/G1@8IZZ7Va|_藑'5[Ye0Y-3 *[^]/쩶E+ z3m@YwұF~2tѤ=1ܘtxnS:<~3ፄ+TPK F|$>T9 $F0edu/harvard/hul/ois/jhove/module/GifModule.class; x[ѳ$'ٖ(r\N$|F`[R'-l=JdIHr. z%-B[H -^.O}4fX!vvvvfv'~`U 泛yn- {ޠ7*V2{jfoco@9{n Tػn"WaG{+Nݥv{Az~HfVؤ}}+q"v}}RaRا x¦dv0,efA 4a"# {)3 {\fU46/Coߠo۷}'[J,@f?T؏'fS3 i5̞UY{o wD?τUfy7Z`/_ ؿ "3 {y:3 3ssF$Mߣ35\yn[IUU> hWz.T";d*Hg—b7/Sy ?_Nbh/ W {«SZ]A o"Vp55kV, ›Sv7fjPs 5*2-0Ml%nNo).jRr_nzW^bOWҳ_>Medbw*|E ߭UU T>D*VxPG>1WV# *掝noȽ]Πis=AD 6oOOG?zwm y{ЋȋlAE_;%x y=E ( VvkƱ@| l7FCƽcZcۘ6/!I5c}hE%&O3ɸg8eT>2".LYݾv]H@B Tz8LwŐg<0bq є|El# Bv0@5і {2#F1҉CI-c gOS37g"v!ˣ-HV3j0)i<.¬jXe<Ϝ=pd@*wA[uZ8ǵ34 %c3CS8&''Ȱ挎8c!gzp4GQ]ծɨzg t&bp(v&hBӉ&63 /L? yL:ǣ3ќzD@F0$81} N-c%(6Y :Zb8% 8cd[$cp; q `JK Epx)8{=>sך ;C$Na ;;X$4Оtq -vJTJ2cN1C)@Fzj!zQl"kp2>52hP<4:tnjZfsr/Mi>=D]@:q"[uamTkpka 9A"&wnsvk d٥Eob(rv##X&4l+ LQ\z"(K<JB"C@?IԤFP"'={bh"dC-0>Gzgٴz՚ *(:p*gu5ε׹֬_V=Wb"C G[oH р??s 2f״8N*6ql͆Bq!5>Nv'1$C uj"5Y.Ϯe)Ga.$ 뚚8$.׆In\f& e޵u]x,468pa826RIDjfתu*-J)z<4D㣍743FC#7$&e.NcYT8%%6 df\ ԕ Z0U NO *?EQ_b8yCO0!h_& RJgah@Tʿ5-T٥2?ÿ!o[,o{XYP?bN'Sz["rhRU :0O R5,0:H %2W QP/dk?ǟ'Q~ESTG'abN9⫪iտl DelʆT7wS/0C\/T2Q%/CMMl3Z3V&TNiT14OdZ\e]WLȪHfgT&i6VDOD/(6Kfw~vfw+G=0&ҒU*T45Ʉa+?JdrT W5eXNo֜m׆1 :vNQḦEv1V1z8k d[0PPyPqA-즀ȭJU<$ylHȡK|.v gp>ᩒJY4Aڳ5*-"tn ٳ4w`¤$Bs<BɱVdaGiΟ_LCZQ1986ugPx;{{['BaaG[DZJ2U:-u>vT i9&U Sf_Y>W|P"tQQ#dkY0UrƚE ۈP2\Z(Q У HMPF}DH7( HVTBG*o| m<ٶJ4𬡌̞KX;](j5*6F,i,mV-%%c$O ]e~*]*]JnUe;6Uj:pkN=8nL6;s_rm*uI[U#]edI`s:MMZm)2=7DXk 􈷒r(R2d+^#+v톈eD^[f\CAb0yXjgOwnzlb]EEW-_ڲmm.d'6S\ct"IE$bc0` ܏Ivw+-dJa͟ķ:5_E<{CIK"^T]F"$L(F\NҶ~\3PK_giBM)sbn`/G ) eBޡXn٥YG0W{)\WiCJ0V0eSɈE /`q]sY$=_Y#̓e.(ftvc⡂Cv0aeb/tU F;rpV:^N-%M%t fTKջ^Y۳}-(t ^U×Ekg*&K r6S."Z8)U`S-ŷLHzI_uypt"#ٞq0OCqz᱒ Scӕ~o_G?}.`M%cLU13Wgy"_*bc%eL?Jx٠>.}m?3ZhtľPs[gfmzQrbB!֬ƃgFa0ŌDiKN)e3^}YR0'mʹ,Pv2v/q#/H/̃ؿ(`E^ߌad~]^~M__5y_o}iw}Mlxna2tيٖ~;Xxv xyC9Ykc6>l)0db3,2iSP>`iv٪R`K:= jNSh昂ӰGLX: ,K SpQ)X1`x VNCu jjA>MJAì'6 VM)Xűuf1d0 gdF7<`2LpYPt0u~v=c5=b]0Z;&l(րPNBkm=Rm{鑂I0HBHFQ>Hkl.0twM8ܺ.ccpMV{)ޮnzIA$:}(ESU<^xB<AC``Y̼2ٕ2OfD5&c (|vg`[4Ff2Ȍd [s˸_EIYkO|?`6ۧp[4f{3!x-cp R ) )3PhZ|'IXV[wZ\aM HP@ dGaAf##f"uki*PQc` ] >%"7Бh)7iOADG[Lӓ0O8LSz`0L< QRfxjM N8Lԓa28 >I)8DkZNa2қޟ8Svv7HŮYYvDL[Ys3 |p5ai@{5>zHjkH-F$\Ojn&j@ ~ &NiuRnCuYv o6`Rpwz{3Ĕ;,C!$E Y$%2h 3 SӒXHcălIX+\E8#8Q݁K?N߄ԃ.PM kc' D!O`S)ܗ)v/ Ut7|mnO}l wǞEG߁ғ$ la*_3IiI$I!iJӢ}0_^A欹Y|Xˌձ _lT"iNø̩^a׏L.tX >=Ϻ|eJ]<2bO zDτ"OfX$\SEMGv[R,@q|)ffeGLjmO-St<)Ye8{|5;duQ785!fm:w_D0"eG3B_s#!zyxS)Me6XoU*QtJU/"Jfp7+^+z(x ri+ aoAC0#gֲ`nqyN6>s7HbUU9 S6%4).{iř0L &13+>J哾+ c{3J,Yw  v,Yfy\Y*vL\J՗a)wҕIE2+_3|51|:@5 г$ #`ǟVqOK E%88 !F]TlriQ{8 OdT-}l92Vb\៉c&/.X ,:/J痥UYbE.HeŐ,:,R RYADE\aX<e*x^R)K3׃ 43ʳ5o@kxDFܲ 2H68mD+FɰgڞY9k(fX #?ڍSLr0c~َ罿d#2Bjoih.5RT(G)kuϳE2K*3Ѐƣ+Ph~|8Ώ (t%Ǡ2$ u7̯Kd 5t욜\1aqѩb9Nv}>RQUw0*A2> HUw? :1|77?PK F|$>|>1edu/harvard/hul/ois/jhove/module/HtmlModule.class; x[ѳ$'9qDKC-1DGáym%dt$1}))=\ZCZz^3$YJl}ε3+ Ik_aLfaUXڨvb +,` K)찝ݠWS)Ծ(vnqIao&η( {NP;}[a![i^ }M8!iۊG Ž*c CaW'I}Ja TgYMs }egwi\!A*۔̎;`;;AԻz3ԻzPAR}̾B_%S#Ek̾}1}oDm}zߥ2 v~Ȟ$S$G22{a)d/+دe72~~Op=K?s$O 3*9FwCaTؿo=OR_ً ކFO+%ZvF8S8Wzs̭ NmHe+epG^$sGqUwP b8`@Kp'Y /u𥼌>.pe|9]\+P~!_D KQJe~fU:;_B4Br= vWx -$zWGz5׈Qo7Λf<r]A+L2oQx+ۦvo#mGrw8*t8x'nz'ɻZ=4+>n< '} FP+*(Z yaǐ‡|_V# *|L)<& ,]͝m zMX &bph$#z8i0{:ښ{܇ Ǡ(-ݻz!l߉]ǞblkE_LMu}H4'b>ʠ&kFA=IkxAe'GdW0 T2i9d@b| תlcfW`5 [,ɂ{Иm!1("zz}BZdiV,p(ㆳ|Gڈ4Qkw K@X nOFJ WЇ2$­a&K`'4jrB !Gq2X#CIJ+ `3!`8gónjB# W@KLvuvb [@qCq-:m7 a-6trA24Loڥu8#p(uF$nT_FvKYèIqUucz TF~# A{9eبx m:Zsr0Cpڭ裃Pp|Ҭy7f~ U^{Yְizxrl,K\Jb N/7[TV_ &X1UƭߦwJ`(dHc jT_*odN=#IL66X~ɄA>3#h8:< ĤfqH}01!c}Q3(Dl0Y7a7YSlltw}#ĘСCՇꫣ z+/VACчqm*JgZNjIZ3޸L#Ơ"o€3 Hr C|pD淩#vYK2G>Xb\eZ"d*G ܓ \ҎcFO!zhp0*`JIM[#F#QTI[ 6<.\]Ah 2D&։`}AңNw˞v0;R]6l- &}xM^qqA4##i{v0GB%q\ufSfs4DB~XSܲq#'͂$2ATe~XP2vNg VVAC$\1.8Dv˦-?ĠH@@͸EUv1"ތhQ*1?&0"ñ6sycʉs?k3_to޿zT~3+J%J\PaɢJVɦJ2&)sH`ݸyUf'!X7 ¶ѦJ"UZLy%iUZ"9eTJetLc!oK3m>VHGjo fX b;K*]'rm箭lŞԴޭ]55m]x`>tv.jҭ.0jҸush܄3Ζ9^]-],]JʬYWX}5ھZؾڴ}ufժt A ja<2t+ҿ=w汘.9}oj=#M ^L:;g9x6cUt˾2[x2ZԻpٓev9EY0/~}ƺWs!fAEg>]ֺ` g4 a%Q֢ z:G"16wJ8l7'r ^nʦwLjӶf沠-gFiiWOG/9W='QӼwB%OA%g҃9M=ʾƱkÓ*5|'ɒ'Qwf6{!sq|-g*F,\R(Vƚ0o&iii`Q8=ewf//$|XLR' %y]!Iil1v} Z|AcHOX룘Pܓ7.,8PJD4K+ ]hGk'~h3KaN54/ ̄ўFQXDVȎ*St-hAdZvHda}e@*[~zZ/He漄^&X[A6d3+ r<62Znq3&lcYЗ/1J"j {x=taiW ;wU(hML Q~ҫČ*p$3LglaP.; 2cxbvq7u4B~όٺP"M%ف4wc?0Z7G̱uN6Q3]uJ"sa/+Bŋ$r[M/{ԙ?!]vaOі \: >PKցE"D;D`6L),e+'bӅK9 o dڄ[P?VFs&c`k_ MLٙ+ñ38.f~$%9x+ixi\Ҝ㲜8^3. }%~V](ڋb+:v *_598^3^q+sU8v=86gq]θՐZ&6ǚs32ؠ!^t2'i,N4؜SqڝgtJ~i(9K:V9yA UV3w Ea4\ ]%qjqJjq{RVPH鳸])t@U= P{}s 1&VfuXCfslb s'0Efl 4_gSe,[Y.ϲ\17˕i: -ǡ'#% A ~]1,vmqϲ$x. ؑD#ӕnʽ2;Pݫ=ǡ7}n)Jv p)DIgqYN^z }>++R P*-gL: եZt#")WE3`C |BSux)9 !G7R@e9 RdNE:cIXYY5gc>yb? &]q8NBO8RRjlS~^GZ&P_oy]Q)Sn#xc@jt2z(mn}K}n&ܘ|Λ]#yKtfћϕ9œ-ykp)x+M\;~ށxrO;' |W =C$|,"eUygrLxgDLo?rS$ς?|e);?!3݃Fܿ zC> s"GD)m f(b?673pb?>7b?y6Su&鹱kfN~fn DCsULWN̮Ul+p -)k>uRpoks:BUz{'@po T Ή򗥻OEh li9/!p v3A2 n=o~h1Ncq<9UL6 _+S0Q^ GE.)z6Tx/1R47]S]$Jt}{s&SOfq?塞4Q,f[+b`w[6;#NjyhωOZ, :.hZ-%>jع7S4\(+_KKO2k^"3VmYZl.vm;C##\άg`-(y8eCfW:*_vj/A/A̺dXp)v.]% \ikסJaI&CvOjt ٲ ,<7 Oo'>a^z4W/> /b *Otn,@sA:mSTHǽ.ٱ:B~IUYfYh/|2xMR&]Ƣ[O՛V_OX\VlZ]ֲE.KYqoqZ\(hEnAZQpϤ7wL꾩M}EF䙛< .nE<-Z @"a~2'kdܟ Jhȗdx y"ëk[jfn9]%q~~0˫D d,"[C85edu/harvard/hul/ois/jhove/module/Jpeg2000Module.class `Tqe B{9vssEBX$,lv= h[kV֢TVl!Fﻵj}j:&,țf͛7of{N<4ԈV_cWʨ1'_F[2:78$a@m܎A'Ⰼ!a# 10Ɲ&d8Kƫ52]wNfVwxW\p;xIƛrWm2_eC;yxw3e{dWd0 _ƏȸWƏ1a?}>#|GSNXf 8CL| xXƤc2>#2>ɬGT)n<3N؊~ W.sE}k/pe !*&er;N؎exK (㏜spS~lf~õ߲E_wN_bx^#2io8i|_,2ƍe2' 2chE>C;uR\8%Q@CEL%dQDspq3Xq.sL.KbW\,IE\$qK\Ih"&.b:]əf& VdyR )V Օˢtk읳Maib.h~?B$Rlk(/%Nja&9|B6=QݤHDٸdj5DZjct,V2c|9ɨFS2m,ڝIJXc"-QY9Đ_ E,mC8;u0qmxD'ZtnݙcK]DL[-@c%B<ɱA=LI~Ҝ]/ll^=$V~"%JosZS]oQt_SJ-!ti[%מܥԕ*G *D մU66S#*eǴC fB:-zHT}6'S=0 *ԁp"J㺚\A=⨭zh0>&`035):iisa┍cPX4mͷ_dАPpT(w6DﱌbvBRT"dMhw\ >-jqDX,*;j@4<< ^DaP'ILH8͐!d ޠȀߚdX%e;Om PLPLAs†ASxCX G)?KEzEic`ӂFU谑]>s+ԶxڐOD pp4$ikPjkW(bW%˪u+zj)-L8PKD"LאZ XaM&V*M#?¾İ1ǍK.㙲teGsbʲq^x"Uy(+Q6zjM*D:ܯ%bJet!{kWpFJz6rѢjF]^RV3PjmZ[n5k7DP<ܹsgJE6 .d^v@wι$6+xܫ-b+ NOrOm"a '谧>kJ187[6T-T/EXw/3Cw郔X1wG]-j򺥊R\F'*osO${6"46 N(brJߌbԏ _y9"$2RɸN0n$&}e^q {cԭiyv9:+;">F_|܋W|Y+ 3YOt /¼h4PMFrp)u`f4sL߶LM~ϔ^y-e8{TVoYf.8ŃDsƆoG{C+ ҝV!g3L{bzl_C׫P8Dl D28TWܿRsrwOC{SCWrD/9 OsӼZYXa+$C< sibΐ8_YzK&7홿hf\JsMh+Q_:AҳbCIOnѿRy*. 7ѳȟ/^m,a = ٭lc6v^Lz8%[3VtD{ ?h;/inAљNg޼mM=ѡ8"ms' \*gBL/;p52c,g]ϼ(ޒ -ෂtR\!d2cH|[:::s&删gC47['wMAGNω&6a$2[Q Bv'S.bpf)mHzKTW+X7`4/ [~CҦ{l&Sǯ8H5:d`\%S߄m1ga)׵UG"׀Nm3:P&I ;/h<@JXpͣ'NFFVX>BAl `nIT"v}||0M?頻۾2);7YI/U7A8hΟ4N}Y33 :E<:Ok.-3 [q0wD3x7x ko+)jel<7N̈́oׯJh7 |%7}!3#"_*^o%̃`rR3}= J{r 4|i31j;mNw΃_o`1,‹;j ᥌  Aϧ-2і6[lwm}̀5x݀|N т‚yh3`^lA,@ŀe, 5 S5 # hlb̅.1 y`s参%dc(G5kfAQkkN\305/ gGaAx6Yp6uhΡ׹Rpu>u.H…nO’^EP2I(sʓ.{<#P!`!Ғѥ*Ku.5PVTVls-塋mIXf ]l`VNgbܮU4ţp P.'E&:&Z*؋5d dk.0 @ͩZFat(lZǠ^"z{buue5Y=s7iOC,ރ`1.,Ū$l); [{˩A!$umWo K˫Ik:$ez1mGa{+8 ã"mcng--˧rHy.$bp2<;Yvb/8lc >턘i}bl3Æwmx'Z)L3ޝxd34L0~8x_&S?f?qƏf2>`1jjfV8("b]hYdEA<;`Wfק諲oJ/N1E$M_JktVJ;LftnQֿ`BKه!5ĥƢ/ Wy*L\wNZI\YՔk$\Mjʵw׺\OZ,\Lڀo"x=-D>AډJcx[곥aAlw&yLWrTt;n &5-^Bg{W|{_xk<}00 ymz\`;. 7ynzQ6GkxQ1" %חJz/T(|u7M$||H~c=ticC g8^ /?NP{ nv՞Ob~⸋SK$g3đgː!iːp7o^7H8yy_t\tn>|Kv<"Qwɧ{+m蕋:;zE*QET:T:  q;PK F|$>*D:4r1edu/harvard/hul/ois/jhove/module/JpegModule.class| |H7(q9|w!#QNE^JlHrsCQ$ "'5(PP#ͮVf߼y7ofWY-;Y=Cdp,# B,' nY2GYdAIx|"<"JdVIY\[1A TiȐIl vSLC`:@řx,>gK+ًυىl+yP̑\|pb|KX$X,U&JbJx$`%/\.KeB+*X#%[*`DE\.d%5HEZԀFYt#C>@JKUVUlF$kQBY\SnSdуx,zD*c6ㅸA;r`؍, X "IbX{6fTs,aC<pr)gYM<Ap.x/ċdWV:S4I@>D%񥨅$r|X ktx-RCkTx$n6$n77!YwXB~x [D mķ o~'Gy@p,e ލ6r6ٲx,+VZ]׉!VDdq@`q/?28䃲GQY| RU|Z xV,ϡE* w+ /K$bW%VYU*!) $o x{_![YIu|K_!|EqJ#8 C#@uCa@DHdVILD A*4&!!(SLE0 AF0L 8,A0A̲d-)<ˬ@f2+XJ(auUլlwzpo_DɄ?+==*%RcUMUYey asu}cmy%kGD_YXZWmUSsjjaU%W׸*]M|W]u= VC]K5)I^kk|j I uIL]aJhuj:AnKwK R2Fm7z=_(}G`_ѡz78#ζ UO%hwݼoml+=aO"K {ZNɬ1Iwp/4<*RnrsWV4}%1TK53E'GJlh^j J+ө7q~Gi9LɳS H-/%-`H'daJ˭w0pS$; `VANyTમ>,oZZ@0}FsnŢURLl34dMjiOh6GOw7Ah -*<&ǭ%x=ݞu"ނBXې}Io--+UkxJ̬Vt^/z( qE]TO1jn-{j=\x'RRȩaQ6{/aC qq]Y.H!Rb $@+@~XJJ22Y`MHn4Jn cY0@r}`򆆂6[)Wc !=-J*\FI/!+ŗww-CHts.5n5襪Re1A++eB1x~JVc ٺ_gkGqf|q;w@$K Vm[!ka:ko$i[,18~)=0F4J5;>)׭\<Bxgy0 euueAXv@F];g yE }RҏUL>UU(,XXYXVpaIVà0(pbd8%GQ^A.BG*Wed@5*xESY\2hr5S.u;d,Tcl |A!H0% 3#[gBy.,:@.my% ps[8vL(@7/Q<<9*:td F֩>V{(0}ئj+,:tZy:;-r{UGg8LOs[[}y:na$t4ΞV5Tw)^` CC7Ѥz;NG4,ptn :: Bߤ/R"wENqM6||8ZELP b]s4'î/[ᨁT~5"6Yj|^j" q)m[CQX6kK;QalBߧ( gƑgy;SB6A B+*U(2J@e**PX :8jyu=A ruA_k-w/PARZ8?Yt'y|%fZ`'` ~s;._oГh l : J!q1.-(,(r--)*r-4 "T yXψ*HJ+r5T1ɟWp:Zj lYX,iH7 Y9%Dn99g { d4ł"\Tvu(SB0nPX'vNT Mg뱣v-g$z=dq4Ɔ6JGi8Fa ‚,$zFmb)La4oָ|Pؙ,Msp;KaEmP"LU#.P؅"mdnHaTJ?frB?P2)~ѿAmū+l$z:>J]. ]#]P* Fx v5 F跊0u0g Z <`JqtfH*(G{ Pص:VmeP ݤtH0! 0!HDJJ 3~8qA$/=W`HBPK+BPG; K,CBGPʱAJuB%jH/&Eê d TaxRv"LCQv'kf)F 1]5Ҏ}NЎf͊0GI^(@K#q%O+t?XۉN& >(?w-~}R0q^'H~?pW( 5;F7xx[=GjNr؝.ݭ{ؽcFh|QX?Ab)~-Ga{S46DCqMܩ A+$ {= ? eK^3oR ^ A1LD5(B2R˻;A}[)7LW PĞT1צx'VÊ*)B:Z$41+ߠna >cShƅw}[B1BE gPnbn 'lhw={?g,gy/s yv^@wVK0X}^fCa*h&oe+j:ѧ8Kh-iogK_^a*q Gn 7SSNdI?i S ·rdo)m"V*]h@~dm=*\b}d@?>g>9oA0ހmQ/% ` ro-ZVrE4ۭJ;}xӰ#۶6tk ۏ/ vG:buav%^T/\a:~&P8D s ΁ט(%/ }g$O4k]řbq&ҘIPhUWZ&3Ysv PKD@xwA~/Jc*&i؆$T!@gh3bt @Fȉ IӼVk܁W6-VLVSbR M1M0MLɊ)Ŕ:5t :jPb+4Sbd)\dF6wu<嫍^~UG(&;{oVt+Z.b=Aow0MXar(%t ,ثL!`i.2lA\,9|,`υsҊVyH+E|-beXZ㰴KcʼnH+G,U`KUXR,-Ò K˱tjT:,cK'cKn,5h+pUi;pn , |4tv́s0r, zܕ1օ䈎SFU~my02vZF\ `.|p1p)Lt`c!r¹psIq1MYc =2A#C 4aXE8{^ k@~=l_Cs-wgwյ52G~45ʇLߦNc%JU81Z^XȩYG騐}]x'~3epcUN0bU劊&W}]y  h4Fx`VwpXQzB&L~z\?61O"UU`c燞4$jjp0jfmU }XisF@J~9W4c |O4mX1[\:̄׭"9RS*u~GܸԴe-_ǐ7 +{+BZv q2׎MX?kim L-UA@ P\F8}W7ezuH!n݋ƌx )<oPV'+koQS?JӾ[rƘ\,1MYͿ͉ܽ,gX!@c҂\KMbiiu.蓩?FjkdPZΕFzto[o,ĕO0bR4MҦ 747T5c))Ѣ1Z b5.w1-tZhfo!vAj*X GQG1{U|m-5A/Wp@#$s$"֯y3QF_M;1Թ0Zw~?ޣaikZZ%_L8L6: }nԠ/lF&A.5^5rN8-y#2Ҋ#6aq{\Ѵ2Bq+ ء4X O?eW[ g^C WuYy!L_CV I^?6Q()oď ˛`yqVgv75ꖎkƿ ,ײ|4 ?NB.57.hm`H1jLJyүUwM.~T2=;HYٻ9P<9~~ &d n#&N`x\Y/'2L_B,5X*L[=j,\w}<Ŀ#!G#C}##F>RiVيV [ŕssAdfę"0c` BFAԩiƭd:>h !c'pcL|[{|+&E9j;K_մU5헣+}-?ڴgf om<:#H*@x@#wB*%`.X5bf%櫌$+lt&BTOb)F,*Qg?r|IȦ!atӢIH~v Yl,?RsIș~t=09HB$8s'S>͆' Zfb @2rlIƒR9uҤ@(ԳtPXa]գEB񨬇'!p,-{dzlq7BnڏtJ!!=W7ⷱӱKك6Pa7cQ!0i>73WIc:5Gyq v|m RJ8ôΨzfwt8d }IJEx@06b2*-6Iv'"LW {11&&JA!b2 ϐ* TxP-;8L1nF{(ki*@lIG(k!I/svP)Lx~1):);:䡸Ȱd! , zTQ4Őb6$lLq,ɞdvVSIfOb`I4#BnЊ]1?$#7AZ: 2\\BL63._*p8x$KTtb/'fSo! [-sڭ9Z0G+11Ic hvI>Dj$a=D .D^ɔäC ȯ(Ek?2r8j)8Ÿ6{RLHG}X0')fU訛Q}mQepdFn`H)|T. eN'՝s^R&[$ޏ&X5F޴:9t&,1ܩ()> |6&K| H^m`s0GVEYSU,M섐 vf oI϶i [.zI(BsR:a#7M<s@&ǭ¤Ke{[C6K:ͳ@ҌVAR#]6X"vߓP Qa qnr4 I ZQ!w /T/b#S2>b9Xrr gHl۸)n}G-`vdLzD˅8R3|Ʀ1HB*\~%>.{,O0Ltb!I|)2MýΗa2JQtMɖ-+3ke* Vb"EWCcK6wy.ѶVӊi]dn>N0ٚRpZ FSGfզ*x<:c#kS pKaxmoݱ)V|)FSomdwb&Bn @bNbX ~lUTs~OKx:]Gq=Z8 "/OCfj[~&}͂(n<ǒr,f$N{96iev&O{|Rtfu⬎Y#ÙcJO&'LeL>W˳ &;cSc}CL6Dl @zG=jUD*'9a*ˍǧq>hQP'-OGWtR>aOS:ܚ^=?H^:iF}^ 4<]X=L V?,8|nI"s1t y,qmlv=)MHb.Nb1#Zqb1i ͋ʆgqG6Ma~Ɇ `q>ZHIhIzA|"G4rpua :RD0ԺdͼV䴙aVeg|3? AL(~h)Ϙ(& m54$D}HL̅mʍV[ -6/(^QayVaTuFԴ "Uƾ2֕I몌9ATxhꧫ'eYEnL7O+rk &f^XSK!"z5-HA~? B?~Z k4W$b~[i+j"\tm>2% ?w.ӈ-2)z\VI]5k~:HUmZIHEkey B&TxO}uЮhk]iF$M' kk)=n= ڐ~mpH42 [f2v~z 6Mb f]aErmvq7týRp`pBe `tcsTf0L[GPDag?#B,)L ~.D+ <(i@wDHݚN/ LBEeI`2ѼHe zR[H/\M/&0[r3jrǿ&7qMwzڱ Z%a$|§rDIJ۲ ?Du8E^@ e$cvr^ 8ez9+2.~A"BtU5 5z-b"׀QmMjkn==BotSЎ8wD-nM5BwǷ+BoDbEo.F]1z'z+Bz{c{#}1}z?1Q"t1#e0B``>}У1ʣ @OƘ}XrAbi&N4) RZ'-o0_߷giG$2 kzP+sY<gd?Lw&@K>h"žl9}LDT|RWꛙ &GĔ O6)w3KOMOfswNq7is:} HNhD%N HIsÙ=L#VM2WA,GVh/PK F|$>V"fHY0edu/harvard/hul/ois/jhove/module/PdfModule.class `T8>ݼCVIp$@4&Ը$ YI1phZѪjbUT-VѶZw}_^ 33$෿?$3o|s{o?COF.7|Qc4c17a< ܘȍZ1 Af@|d?0pc*Ӹtn`\ Ql1n&7kfƌ+qta۸ 1/ap7u̸O.6nč|od܌y_?9`ʌNlof܎OwӝŌZ̾{u?͌+70gxgƿo?q71xX_`G|`DA>4q~f?I1Рԡi``b`aߑL}cA:db( 1 0& s (b(dL2 &bp(h 'bp'c0)LE L+4f3sN4 Y$naª3pܜ99[\|c,f)7s0?C,Ky.0Of7brLWS%3rnk*f3YƳܬaf-7Jnz?6U\Kgqs-µ<2:377@f3<-̌yFs vm~3A'V."pw3Oc b L7y!7/`<cy .R . \ܼ;_Uܼ?pkeL_1}7oW-7qfn~pVn~;qv6ܼ lfܼrq`zCs|$(7󙏛}7n&O"0Oaٷ1؇`>pn>qyn 2s7_Cn1_揹77_6_񛯚,C^|O4mfbSnoW~ov[?;fOkܐf#XfOH1'7POi>GO@syG"i9A?DK]XL`0gϯ@Y~ P+[6V:V21FbPa`+[Òn8PX0{<&`<['pkNdI~mu2&c3­)ܚNZ~kUBnq+ĭV1f"vYܚíܚǭnn-V)[` pT4H[n1k)&~ǭrLW5˪?`eZjBXmkp c:jnp[:[jV#jfX ,bznv5nqV[|fnp+co`܊r|nmVjnŸՉp[qnus[[[۸[r"n}[3ܺį]f]ʭˀ/prb֕"՘w ĭken]ǭr#­u_*`p+vbbmܺ;Ҭ;-wqnXn˭cn 7˭ļ0n=ʭǸ8-n==Jpk/ }z[3z[w=n}[~rGz[`}dDf~*L,n-0?,IIs nɭ6ֻi3UX%䴇/X%gMXsO{h$s'w2@^*8<cY opqVJԥ [Т?tcG<wKaюp[lfJuг wpg:]w*C"'I*7Nd$̨p; !pW=UzgjT(Y*dzģ02/M_c': 4&A4Unc#ܦ`)Ɓ@ 2iOftqF*)7}0k2(z*a0rvފFlCp`LQ2ַnƘZV cr鎭@=u(3TAĺ.ֶ%ⱓ"HPFlh@5;ͯ:.Lh ӇsI2dFA!:*u),8;j c?-Y9<`k= `5b2fJ9XZ1#]XG\?T ! VLz#8(/ Raּ+ J&Y*gdc `dÒ^4w<+93[TiwKӁ[bg#94(% Q0ـj_¶*ZjON4jSa 0 xGHv@9t^2{ݮcLwbi=ߜIYp=i( oS۔g AEpfX`nں3J3Cf, BЬ`~UC]pּs t̙!?-sDlo<'L(-+eM"-8ޢ`5Py+zF Dଅ3g ͚n> ˃ƃ[#mmvhv#x5f;D p'dcE% аIjʯ>6N:Fg;5(ɞ4dW0`=$^霝FԨf@sQ5J2e>3FY.#lvA,aGEʬygz | P{{m̛ +P2uQ b H.]7ЅHZ"f6;k ^ >kb1F5٬-dʱ!-o4oYdY-f|Ђ !pe%̀o][/B,<.!km:ӄRNbm^o3f9\[Z'>QVח"cPA%0X Nϰj j0Šm`=gcpbPVkt lD 6aЊA\9yv#:W~QR4"DfKB F(emv.G߁$?qeCHx2!,ژf_dWjv %FI˾RZd|L*cJe2 5Ps&>ɝf8>;vEmv; DkM4.L?f9nl1'Vu`3 (f7F}e8MW+xf7FHtFɂ,<4ӵ=خ0{c|X/Hwhq0>UG6E l-#tneWR2Y0 LՍH7G 2 4%NL*LEYCVCUeJBk\XAn(nvp[zTThU9 ;RgNY ಽ((Wmvkٝl5`C^h渋MI8qmPEZf"T_G3a7A4FUs#f@Cad<&n ^ݏVkґb&&=W,i e>5׸F"|z`-#XAw8Up`WLPehC BNp1` j `k׹lm ͑)M6{BexZ Oe @Ym˜ {p Xq,WxFQƫG)5 JLu^ jf J7En sQpCP$ :١!ge l # OBx LHXq/tc)2-=YҶY>b@4Eh!e`j6{ i_YۦThmg6ۇU3 NňkW 5<㭄z=0~V ZnD֎Hs^頙n9#Ͱ䲆u͉+C ؽ9-=x+Hn0& 4^#!qV5س6Ϟcy}kWmADx-,R#4,=D g#'h2'=OlCU"1c/'0}ϪYj!2q Wʬ6{f~{foSpl[{[q<,@fGzFr\U`-^;< ǓGL0.LcsElE3sf/%ҀL8_bcQrPlooN)Տn Td dAvsmoVY_c<& jܩg?@&pF:*/hKw"63ַ,EXQ]xٕa0<(w6[ߎ.voX!ki;2҅۠й;$4lI[KcHi%ĶrgMr10~:zqЀ`LwGZᮁJ J6W]:6F7&bZHb%g]KAM lB_b}> H9[I jBWD`F Ū q{KMz6}N2i ;>\CIۄT\ٱ٬ ɑ2m&2Rø+}'Ďma%ۄbB:)r-gU;\U[7T z_2&E86;m_&S^ {RW \cM;7sAݼ#msq*b=hs@rY ftilm2M[;ګ YΣ VX\BgXH1О6g@cc !pwWܴd2<ڧ`2>S(IJNs&.ʤ,ϠzD; ~¬*x#e@Jb6vZm TM5^ <6U2. -)n 4lQ4L62, V!  c,$q<.8-AT#ғi,5”54^mr7UotmRF *Ec)dz;#rI4i,P |϶ fpXgc9hsa=mG3>?f5D4Ɨ>*\U!}?l{[w¿rj۝~TpcY?"0Г1(5YsY݌ĉe |3abHyo:8aW7q=$cAg2>qDA)o@TTMGlLۺJ[P%.G̬ow,`C3IOW!mճ, BS,,ovBxįx;lgKm=BcBr_Ab>lm#..Aw9/%7.3v5᠞ ' EDYbMMV5/o@l>dBp;QĆցU'(N%"fIV״9R|)+񖊛X.6xo !פUFjǫ0KȀcSo;nUrk$u!f԰Q'am哟7'3 ϪW-}eΞLvrbI8Fkj+RV[nT<},RߢѕU_ë'ʝ]I ijh2 F-!ISK+Hg?Keh,\?ERJp 7ٔbu55Ua &Q>lWL;eJ)ҹ? U KkA 3\j@ũLJᦛ(sq_ x ye:ee+ nӎ={ N"WyVcem; ) +ݪ nÄE#C5a?5Ix%0kʖW R׊7|JA2N R7w𝜔f4dn?GO ~ϵ9#m"UǶFʅ?[,UF1D:ı< 5n|3'o3F] P%#:F<ٌ))cp[r3̊\Ƌ&,V(9Km2q;(na5J:~GB~*1uu|]~VD߄һbH.=ng[H"j \e9u gc; ֥ۻǴj}חW,b`ubLZ-r6(:1p )qhG>oP3ȭG];]|W7yة|$Ql\@ :Ԥqy Gp^x^%t 1gķ8x:ܒgǰ5+|}j>@Җ]u{quU+j$&/fj#fYu3@:K,(D~g y2 K)!_9n϶<^3 G&RYNlpB~GKǻ e VtVd}A'),@wC#/tH5틳SĽ6)?eb$xm31PZ^-dIbo~$mũÊv:-(:MC m7ք@cһc?x>*Q:pYCꎝ_fo8R1P{I+0y5GSxGV5UՔ-l,(k,S;xSJ:ig?[#/"Oq%]Tqk*u=!Q<ɊrHإuuՕeB.lv5ftU I7VEݪՕ*i(0|a UP)3>{fLQrPyOb U}X{ChtD-]Q4 c䮉jǡ?w^cr%NJ|@K 6~ؑu1i[[{ǦH\M+*KS_Pj"?pfh\]'ԏl7-RyȉQD%ky~{ ~8B܄O= i|[r?3<4Hg&гQNZφt' [s"x@ U\/)*^%*>UŧLKU*PqxWJŧgZ5*UqRg^oqJWx~תx*_U|Uqy*xUܢ∊7x[UU ?6c"T Dbe>/۟f%v(O{H>6;d% $0;7A G'Ș=d>X=K&Ԉ $ ( 'f dJQV Ӌم}h/ % .#3e 2)2[#khshynG%l8?p۰ S-#K`~Sa~`~2_({)%] 1*p {eY6tU I1 I1Ԥ6u W#gͮ# }q/Y-X6{M9uQ=r;L7 }伵Y^C6@}ym^R s[KMk܀0$K-QhB+`&H>ҎL2vrU` r +]@N7}قV a!>.t?L!SBQ2f631~ {\\_& XYx}QuaV8A>w¬¬X203^!R}{k'y}ɽ$X3$$Y<0ho/`A/w_AL^b;m/~LL"Sr2}A8JBR('\ " r>]OArX\b}䆵PZ(^rr3u UAki@k@N-ko#_#; w!a=qAw%ݻ8>#rɽ{n>TPg" pO;KcC}.2x! ^yzyq{}z vC- a`zo 31J};T)Jvq3gV"?K||7`}|9ha/^C9G(q~o1_:@NP~"3a/'kx[dzk~dPfq xxp:x ooo[mowew[]oHD?3BsH~/ Krm_*&-&{ Gg~T X?!WrHSo2w` P?)OU(.E Iy=#rWq~h?!ӯf5L,DcL2z uYH-3%iLr'fB 390f34Gr Jr.D/]+!L߬u[,)uȱ?cgd1+pt9X@C{'ه1:\18W1x0xw1xC@   ~Lç  21`|4< Fc0;x 4Rt,BjK?7%:?ٴBꢤ̥ Mo5_KyIUn)zNI6P]d b z"` zRK*dQe\bYYiD=Q4o6|7N,|C76t:C!FW$t* pPK8d:{:E@!\G`=?AC$z+=Iɥ3_4KgG\ȅoh(+ʹʹ :,I;ʔdBсg zP.M1aM2L&h դ/o \Aѓfܣd\^ Mǝa(s&&-H0f NNY{{isf_ȡ } 5Ijt4.^LSHVnaӂL( k,x~zj);{в]X{Z/}0X`.{xkk!n u+50b~B;_r|KljU X-It CPK} sz':AkpH{FA!nOͪ3 ;i<,{s{}fbh=aVzzn^8Ruu$X5 3eK JX55??@&]Nk7.{?ƃ9tmi"bNrFt+M'٥=Ǽcg Hg[dSP'醆@,4 '}%` /^Y龗D  w:dl̡#&hT*SYBG"} ?9 BiU_ӷ|)"~G@&5BF3}7xka|B*O:L@f7\;jFC7D{ ·~RC2QO@LezbZeTY;4qK6 TݩG|YMH|ckꄦUw)X( i (A;죱E{i' `1~}vaV\:_ yd< n'F|{{¶Ds% t$0袝9gDB$2ձsukP5Պ}fg,+{@EL^R+ / {  "E:& r .D,a6I7"}à}CCdL4h4Irك)lwò 59FhtoGY K Ϥ^\b(?h:.)r4&.nёCb!iWU9Qg'79ZKBXq%ːKH 0C!X=w&6l$4CZ wU`킆RSHϡ$s08@ {@^uvd@RK&JuC#bG&zuPۃLO-dŧ&fdOEX.'3ɩd) fjsiڽ}>+g7!7jX8 Mȸ#9 PGTxL>&_hsl(p7T*n?kI#2~rԦ2yry SnLjF=ɎiI)B[ҟ"D;}Xɔ LvU䄢f}QS9(yxEC pdo[ Ge d`spTs&׆IGР.<8R*%jh%PL2]f .{\1>qSr_ǔ%3|c!$ YV~A{B9ӕe4O6M<&P1V Op8OOSYJt1Scr22̻IZviV/}t_iVA^f +A%MsK8egpT!u bFϢ*#_$s,+ͲR=Ͳ7ClUg&in5$#Ih1|^^s-$: Z0ȋ%W`ۀv}R9HA?0iy%=ݢ#]%y0+'A2 1LKn>k8d =ll\ItC$=9'5Rs~?9?ԜOj΋??9?hK>2IjW j:J5M^ ?%A Gd2 R^x@~Q>@-"TorZпo o}#%A%#*  n&q; N8AK\z <[Y wzLtT\ w&Ib&H;k @Khm[~-ֆȟAu :D/Y` s) DfY$z@EVV\K!Ɛc3"{TL"#+kp׀:ӟdSL6!y_ x, qGF[Hb=P޾ h$h A >DbEsɢ;{ɌRB0\Bbo"aTA$K>&z0ܜ!_NNm9ySliIg8%ǧa?K&dDwsc =ŐS`]PgLELQj- 0\rL59ˁ-3^OVP\݂hR(AQ<7FvGdk'6~9cJ<@Y;i K9orćGI.l>AyGI.<w(֦^pX \NMRûCr4#1w5I@U /U@JW=i` ا!2>`hLե>-OMhy%YyYh"GF iiv`U  hcفlܪF7'/vc%`I,$+qjBAa%@`z,p mkWo(Ka溝df-}@Oh@0/ipVyٷo&&̨$vD/95>U&a`UWA pCJo'IvRI>}y{))ͦfJs@.N4I' 'mZŊSI&660X| G@ <<Ѯ+Xyk:i:z UсtLGt<\V @I7<̾qJ`3y7WS8{xq/N H3r=N&'dKi}L m'$9C[x'?P<Ϗ2SFӃ"Cdfܣ809 FCB~"cwjG#hzVʹTBPU /5 P MAB ]dJuB뺋9 QY`졹_K@rbI8ճ,i5t yHo6>!"L\OJe`}65}YEY"C 0[ǹF )t5^-7hŖ B~F m§:YyQ klaɀdK#pyJ]&zɣ9d:Tks*PU9d}*rdc*'hdT1W)z>sM7M>iAy@dmjC&T">6 ~*2mZ9){ rb} ‚ rqB.1TE<MB\Ckvo4r~]@fa_Wvðxٹ6eXzv ڝHh0AP`8$Gt1@@o(a@.z9Z&N~ZL:!-}0ٙNh*&ܡv-rq98X^&5uʎ(h)KcFz*-]xY/i((ȳ&-GE3ُ4_a 8hT[`2]Uu0 ~MmQȱM|Q OV.9Te]V=b&+k 0͆Lee<|ʆ OʥS6=a:k0 Ed|4kX'dlx+\nX!~4"VBZ*UtDnlv ,??D7 k}V7/]$(6;ήv;"sQs "K1@3R=brq:5R8շw[Ob"(-ƣ΋D =ytGk*EYcκRVnsڀ^o*9_2ia#0~=Ud 'Y]?F;eICE h2JYbȇ J x?0ӑy.7uvnu#qU3LmI[8qU(`'-py%^Iws:YBz[@/-{?&h[zρ! m+sk}Rfc.^Rmnm.%rϩLFHXܘ׵v?/>KH9ңdXEha2Ahߚݒ}58 %d!0$c7 T/N2pA]61SjD^l"Uyǀ iCBl rt_)ʱI!=}ѭR5JjqjЮWxB+R*1 >9u zmof`7PtTdG+,đ`k_A݄8!AUI[;`JoP N0#E'`M.\&' )܄^2s[{+y}[<\oIKM  sJ v2: szr Y]7!M AĝvSĘG] M uyjr@llIw&9JZ+$ :Y@ ]} {]tIteWrCv%@+pA7:$ &yp^8xxMxƇ{`E BE'y7p\9<'#N˓F֩NSSZ YV?$c{7}Cz D_ɇ*n?GF q6NHʵ34bRW"=Gc7#܏ɔ~299(QBr)i6\fNΑ1#(^ 5:Sx촜|PO6[G~X8;@wO'(RպO^ t},w72EK٣ ﴀqi>M ~ׇrXl+>Q#lf s$V?Y| 5+$1‘>}ILaǷOH N~A;E^Ih?dPݒ̠_7+2,Y)-d7EK>,ٍE~WnA9A* "r9' $h|p|9C)xo1d-[ 2IqK"htISV< j=/ϥ^ö(i&DyWZE;be磌,J,xZCW9+9Y ?qOS'Uઈ.6׻BǞTt|/xx{T2ŵO՘g A=:0aHT_{I.n<>:7 xb&_P,骂<ȣ,0Q+p&*pů Rr9Ww]^FHa*E,x1C"}}/xA[q0"GGymM>\fzbˏ{DbcH;K+\UOkpi<\>Kõɧp_/Qou*i#RzkNWl14|}Ȇo~z7l֧7|kȆoz÷7 ]RGCAPOAiRB_#WD_?٤fkDRж@AT /lEV=x*RȭET4x,UVߛnv;̾0D~W{}% Q`V9Gdž&"2~Z6T (Hyq£ܸnBR5xm* Ӆ`2a|)갡)hri<oޅ؆TǠEsMȌ1&M?`8O~&qn7D`J%e07?&n+dqBcw:E#NSht<!.uӲD>HHk4śe(TLcrm 7u{`ťj5Py1{93rSXl/pJeF29kk#6 :PӋp3~jV 8iCסB&gPmɗMog2U50AR]4|TcgEF[LꝓG 4 D'@w/o9 xT/1 KJ*8rJERD"@s. vd9TB%H\RJ&~}8i'MQ7zWo:#3qbG1WN<e?;̨o ðz^w,(rj-j1edu/harvard/hul/ois/jhove/module/TiffModule.class} |;^Ƕl+α؎;v#QTֶY2zz=p -(.WK)҃hhfWv\'9;͛7ofwՇ !5a*9ʤb՘pVyg9kk8['Ga8[.d$]9ۈyg͘ R6q9yK8kCv:8 ^Y7=إol;;Lv\%-boe>9s9,\ws8,Yή,Y 9l/g8}gWs6;8{'gݜrv gr>8 gÜ}88(gC'94g g89[9I9;9 ~qv9l8 gG9K(X&{d_e}M%ײPcs1l:C%a[9ٷ9T@>~~O3~/0QPٯؓX5o[=g0yVaWTr/#g9L*/rLW7?Tr7{ aϗǰ+U,; Tcgc JlO"SM6%% )d@XȒ7$?U$ LUR,<.idcy@^H9*+5OU;ɉI&Vx.Po T"EZ%TU/-îaI: T:`Vc* VB.RdW:VaRV .URTJ5R-[V+RJ3A}R&k0Yu^.]H4Gr(*eT *ǼQoTiM*]yJaޢ%T|J|J/ܫoQi 旨 6cޮ ;TZyJk0Ri旪nG{U*m*݀vn|J1Si+;UTUچ[Tځ*|J1J{1t*݁_;1r ^0ǘaI6`7.2cǥFt%QLb1d/&Kx&Wsm\z;w¢ťws=\z/ҵEåjϥp\>̥^ǥ \(>ƥc܈'1>ͥp &.݌-\\ Υ;t'Bg1`~78\p^̿KX2SQAc\zK_Q4J:Ht\:H_UC̿Ǥ8|1yG1L70&&&;|7'ps\!~ĥ+O駔-U|ʞx4\GIvS$mШA^e^J2Z;{)ɻl&"s[Kw&۽-}]PT!bK35y}EDM{{Ӯhd 9rL>`-]@/Jjh3C^_4P94c"{H`4dTƃXH-@9ޡ/JQ\v! ;W <&bltם|İ[X5Hٰׅ BXoYwE},4g*F߈Z/ZƮF491#0`"Jm@)q:F|JNOUt#@dR{}#H? Ez\~)CHO`ʞV_ދ?9Hܲoa,1 `cj(@䒝.eJyϰ G5 !D0~Ld* <7" >>#hkmMt2G3(1S9!΀4HyY:GţaԸ`, ˋ!oF o8`K ,x bFhwY.&\_ ^_QNGxW/tV6{{ڵr=F0]:1\o^on*ۻfl2s2U-Zj,-])0s u::[eKxukk׮)5TԈF][6@Oo2"b8(zɞpd_'A>V`w KL&@=7H(M6tYuoژu,7F47hݣV_0>40қ/!E*=\#C1Lj}JwI[#iM'k t0$c5J5zg18F@ !P96/BxsF|lΊY L@P(FC@- h UO%jq~lӵN6#<*7+ۃ,8G Pё!  Šs\8ia1lk6,X1Xq$fEꁈt`Xf/B fk'Ch( bMT[ X:#F4t@.-lAW7`@vK~fv֮XӐZ=0F%vZ Yp#0QF4g%4EFDCqݫ-=)тԙZfsЛ(A|. 09"oتAMF@u~-"fTh,=n8!K/~G}M4zVpd^.{Uz{Bo8^.7  B5;YKWׯn(֮v6iab= qk5 &AzV(N?f!T"=IDZoc oLWhҋӔTƣwokGa$=FDb/E>}*wMCU55zw}UUU:A4/8^P<>⩬ܷo_G+58ƿIwUV8VtV.8 h`d8L WtAӅU쎍(?5_˨W4Uߚ"ܚtN n FaDa-15kUCIan2+GQ08z}\ UuZ-mE#zwQtB@w GYCR`a{RMP!&4K, 5(zQ}9؟tb>}$Gv5W^4?. n^UWW@zm#Ul a(Tz5TŔjl2%*p\" :1]mLXT=ze MԔp%&FĊUKMQkUkݸa/X  W&ĉ\_ݰza?4 4l@; P a.`b#rI)֮u5WI G +"(8Gx%gr(,P\DuyP|su," m'H܈h5NG5LǺICpܟ+GxvW@CPd:n0Ƴ8`j 1LR $]kWA5fpn?pKiQ3EH'iE@87L ]W ɥVx-aAE $AZK/ۤw|?M4AWKU.'eIнޖ^b5%Uz5j;Ú?Bg5Mq5TZ,+7 `=_K0[3 ҤѢ3%NDI-*BDRtOlMJhAm^\R 5}]ceME&.M^Hb8EȋXDΧf8MsM^"/d]^/Sদ /7=E߄uD̍м?||>&hrUBWW`yQ'4DƸpN @ڕi*v$̭͐)M75@ް YE&W׻=FJkRE:y5rm*Cra +Ǿk5#S_QR: cM^/_ih%FM(7ir3V[X!%+f1h4m"$ZM}WJ?+oK`60W MFQ&wȝ&wKQUHU$O/K%8Mِ{孚 .>M^f Zx$CD+NML\ߢW ]8ҷM,?XMltx'k_hlEh`+g%5?ٴ!MH?I29aѨi g<"x֘1az{7 쑻υw׹B^s7sEsziܴxon:'\Do~۶~.4f}bך3ƲBp9WhZ7n? 6YJ֞ j>M>p2o,uG١ږCk;;CkdYv6++Bܱ鬌zG Śl08-?p$|pr|EB!9ɻ1كqwa %,8b{ťaOS!0jE&D`0+;6I()MxvlgSZa#l|dOAp*\v&_Ϸ^xJ>,T(qN>NU`{֝P 3 [N'ǗzXn>+7ϷeSN Fnn= h؏l}SšK7PmP4c_h?7p$ǣplćۣqyΝx2QǺho5!H V|oR]Wƕ!9PMR&d?&p<+&Pj;Kc:jJqZ1p ^Kpu YV&^F0f}CFXyj4m8HۼOGb=6͗&nj?Mؠ#q$>߁J(ݲ, "Ku9[ vX&oV+/w x厦PpZjw•8Wҗ^n ]#E: g_ܜkk5}TqZo|7y$+j MvyդnkkI8*|m RVBwF졧yK /)}P0~ wSWޯ9B]kXF42"DC뿞j |7Vq|#>)J?5no[Vy-|0!dōwʙf=h zmm CvQM FIIŒ7nSiO3l4EYh.3מB7I4`Mǜ|uc!~&qfzy2 Qm. [_²Z65z;;!_>`(aao@AIf*Tt"$ k./vHlo6ɎwޮX/b[ ?hh!|̪̎ΎV/nJ0䝽[h|MoeK=!4hoj},C׭1Aa;ouWcWWqc[ >2;:\rwB iK\|[m֗f+vY듖-=b_) S/Gd ISKBqChψoɫos.M=170y ңa&okMꓗ&uE+xv `QK&mɏ)k-ءBES* QTӰoz֟ȳt A7E #ltb,MA. MkK^9'<66sWs= Si~ cX*2μ rahƣ,m}=gߧXKNsy6r`,C/3n`wتЫ3LI[f1AJwIe21cEsicpO:cۜ΀r- FieWIBH!YHM"VgP>okw@6?P3yMcd9;^-B՗Ulr'ށL2}:>Z|;3;Zo:$ڶѶO>grUY#oMQY3!Hƈa#&`3$i %ig{vZ{fU\J0 YSɍu*#`.Ep25:FbSg:Q$}3?;j\ ۧAaw }WRw=StΠkNKK'x;dL9e}Rk\|o_1AO&}ȕikGnQr :5pv2(5;!(%,>##U yh=AP,( rY&&+=}޾c䋹_J/;3> 9LcdQo#|08/+c($M!cȃ=s||x|5dx8A)SGc}#[(䛀-H/ANoCwN~B1SϜ/O+89Lua8 {4WKaDܗrCӼ#gz93{9rv/W}m.2SҼT/O:0YNP =<.r"e2]FTF))F#?B>zObr<,|O.(ж}`ꂥyMr)ɼ ACLMeX?II~ѼILKz,C` !lvL3LJ,G߁ ?±l""YtA\΢KŬUP+(V݈sM=28О^(vxvHR^#* ʵ+L xRZ~M!4QT@.P aipsF;-p ]9'H+k oٮbrJR.3VZ0:DZ0324__*|Y|]7 ',-9FKөJ@]",|E )g!mQ[yH]CmAޏ%NMt-X9Ns.$ubT8sIV:Ds.);D s aM0gPn{cS>Bz\o3]F/WPx$#>`ȅKaK -q*l)H`[[&DBPY6SBIG")N8etd:s4 N>Y~Ա:HCSN"eJҼ<-@\̛&!HD)>Ez4=@$ܳp s=yxp^q2އDƯƬ "iQ4&O.O%l'*2eKݒǰa':(DqW:VJu=}yR<dd²oYAN,c=[L>RVv:\ G4H &r@NL'XA{x=(m|%ˇ"OP┿ c:0B._8[N^AFqHQA4Z0N^L~oޡ';\wxw̛1ڕρ=l md6do.źSD,KPTw}Cĥ` b Kq\h'.rܣ J#&  YYa%ddlW+Q:~߿-cJGS=?n?NLXĥi,8I.S6Ne&Ҳ dbkdE%դ.*;Fl[e8ώLŤbR[d AvYqHDra,;G&W Q6ܛb[@2N VSd4uX"5KҒ(O|H-}Ru=}rED<ϑG kTPK F|$>fGr 0edu/harvard/hul/ois/jhove/module/Utf8Block.class |y:$O !c HFZI @B2l|awzvWBv}߆w$NLm.HMM'MZ]Ӻa-֨oy׼f3cl3Kuui_R7 TfEe/|+7o|_#xk_'z|7QMw %x"_(E_,%_*e_.VJ #xa|@|P|C GGJ𽂏 Oj ~ ~7 >.!M#G n ~X m>!#xRpWpOT@02b` RUsXQ8.Σ*gJqގavzbhy?ƄJ$N 'T|*<&>xCꂵ}OT΋QgyJCa'1r^>b%jJIOc|G]p!`|C弉&jUZ5f[lթ:>b*Q 8g5Y׎z1+x 6^7dŲ ӟ4Xg"tzvH›:^,X3//trc񝜕f fcαoq,W>Θ~oڮ;w[هq+3*o+0G7x}BM,0FQ >|^Kj8W/같Ɛ]U]Jl6Ʋc%-[h XRڝisӜ-KQ1öCV&c%#8ͨogæ?;|˚0L7fy)MƳhX{tqoMMoFScn%L5q c3*QoMbFmMĎN$q]4VRLڎr,>t]3YæcN$&6χL>;beT+M7izՃLba1I^f#aބmg njވqv5pf[7ZQ/47xi5UN* ]w)Νm,/iᡂ&aTSK5ZS\h,X2o:M>#¾2FM5/X4ZbfgS]?hl?j٪1ˋf*oZٟ{' =ӫhQAN[m {)/Ɲ\ٸSLvtac"YE-?o,;[ZP+3 ,!UFQ8begϑGt>6͠u܊i\q+W}p4-&xzc aW)LۼJx(.QҢeԷ'1mO[ECT/[shXދmV^ 39 14 ٘XQZNA9|KtnO 4%M)Cר4gzʎezIl: uM:7}#\ktj{:F\Agw/R}Wল| 7_.bbGgOII'MW}^etʷ^㱒H7/Z6Iu֘lmIsxf'1M?\9˪qcSS֢sg9=DڙlNl`h&;h %Ҵ)/70F4Η`Ӳ3D#Fzd \MtѬ DcD]\K잁p=Ӳ;ִHt-Ln `蠦 > 4|J`]iDIW10 F G`q Ip#8!7O`jHC 0G f V n'4 wp'w5}  !x!8Q8 &4 p4|>&Hj|>Fj8|>Ii|fRf3Y4|' i  Od4<_/d5< '_Lix; i ߄o n8 n]=}[5|? M n##c??4/#- gCˏ'SOEYAs EAKKܣ%x j[ܧ r)Z jxN!- a- -LC@*]21edu/harvard/hul/ois/jhove/module/Utf8Module.class: x[ѳ+I~r(!d[v$,ۉ/,;g[AĔr(h&$%C -"+m'[z}!gI8&wwfgfgfggvgjemF;l%7ˬVQ.KpuX̺l3Uf!l;e_NBfa;aptY? ,J21 Y!]%6Lȝ$yW>Fdv5~̮!wZ]'I 2{#=2D$odvnDpOhh=+9}Xf{@}Qv?5#jR 5!:`;{G$ \n>F'=Ξ Ğr{Xbfh&]&0dJ|J$(OK3=,R9j>/}Af_$K^" I̾F|]b W|-m}ľGJ~~ ُ؏p7 J4~)_њ&ߑ2#ٟQ&??_xdWfu'1ySfI2s B3s[%nsah4"sI2Qq!xE 〗y!͋P fw"H%2_ 2w||ϒR/&2?[\y2_)bȼTe2/G2y̽2yW|keFkeNu2_/%~/d`m42Pww+cxeHF8xǍذ@hlnĎo0kjhu2}&!msco-P;[}́@gH,hmj#hA$jo :m XГNh`077 l냉x7ݽ)#T6JNF*chr@b^{L CFP0ݑ,4/ldX47#Bm9&,d0;Wbeh(\ƣF41t''轲%RGee"FQݻ@hAKFfT:E7O aXK6NP8I?h:@/>P aRx3%~ԋ%Gcv@1`6)z<wCFCW~tg/k0I_`JhL_Ud$ވH,ln38@ ,y݆yXrWgZRWYW]|JayאųVK{ -v鱘/#ZOýZ/*5$&Ihz$FpJ k19z0~0R4^׌{}ްpd8ΠD iI> AlQv:-><؃:%DMm+9h=H2?`hUU5*6;:R5FPiB$vhhD,Z)4o8AyCk֬RnzmjE{hO ;7)l9[`w׏0X]mۉvFԓ 'G$Aynbև5[p$e胩rm]bTh$rIF#Y->[VfEe^ֻD[nfM*r'5<4H҃h"cDVެ6ؐ6.DevmV>uka9SamZDlxHI'hgjĢt0ujښU*jjUZMܳw9A8 &u(a1jYhkުU4C5r,"ibbӌd8r9BL  MZHOa<Qr5؉~^.їQFBecRhEk֑$\}GdnC;0RW1>QqP }tKIn|* aB;m} EGz7*|FWw*l)Ul,f1+(l Rc4ŠL ;à2QH`1,5̌tR5dû _Y7ߣ=F+8H.toR\6O7~ \l>3)l~+A᷑睞1L$[&1]ך0"Z_42̢k^DmG1XprGc2Z}v~5wbXkU~ݖ(."sV=  S&# 0FP"7&)R\U>L˯i*Qe/lmM=?Y Sv~c $[TC EÈ mz2~cӉ^&S9DŽ?FhORQ(e)N_2iYUnO&1L fW|LO*)~tJ+|?>h>n $O3Sz6' l̵˟c ' ,A+qoSS ?C>z$Nք6jCsn iYpg+KfXҳJkK%ʾbH_f+"Գ a`ͥ<Or-@dHLHWdH{ҹ)W2^؏w 2sy)XBm@4}]܍:] UU l(: P#N@XMj 7gA1^Kz&1x)M&Oc7+-8 M$0Pm51U^aH0*Zx q} Yboluˤ _)v0e9tcaJ9&SNp̬ -b8$SG2"l$ٌ3|fFS6y1/徧2szɛ5U}Ebf4ٙa~#sdol賕ΊY>L2gP7k΄s`FK-L$D'>(G߄vbYVKf}ַ]q (iKk[k{G[SSdFcރHrΰ1@;2Ÿv&,IbgN=3[g6qsIdU}f-m/Djh G"'[dXh0)9 sccB]ʹRD #ߩAxLcKOMo4NbY$q1k\4͉]z/tɯyU)u3蠞9o*WnH" /ȑ $7a;dfEF }??Ub'3hMEօ Sv_Es^Nf}}z2(&a=BlμRdGtQ#OK^ߞ)MbMK)nAX|LiT .)6!QmbfAHdIϨVnʦQgRMf\˭ŢB,H2g 03RLюnQ ~3Z¶_S=kɆylLxf7I~t<_Ұ`pϋ曝Cw|E i`;v% ((G,̾0MX5;,eB|kJ_2JXks 5 d m4x6S/Y6K&m_4Q!HS+GT[;c:m7~KJFdl…9pªWGѻ|/` E2b~ ;KK=V(9O؞'X7JU1UA*[A)9cP8Eee4iXPZvN;.㰤E05KMeiV^9cp9"?\] ( cP6i>GFx'רS*jTm֔kQ2u^7)}? I$}JkߤMSrrƠєkMcundŸ(06uY#t/K#|uu6- -jk\j-=4#륖4t(Hr*uʹ[JMm=48 rv+,r5Ra赯: EFB;uiBZwR&`YH5;Beni< RNqp!~pVi&QJ0$-Kǿlu^vX#Q4p;{e@vڱݵlC.^C JHa.uE`*Pt_p&fn+NH4,9ƒk:M܉ivԑ yzMEswZ 4\#ln2hS,w;Ӱܒ-Nӥ<cn9sJid󅖈>zFIF7cpiTZLW9s4Fhf S*q-.z26vXD`k v֊‹&BLιPN"nmƥH#k I:ed˰0=IW~/vpv;Oepkȕ?\Gv leHrX8DÜƹeHCZJk܉-6Gxm:V.E9jti !{po>DЇnQLbީ}iS1h"f~!Bݟ4ɂ'Κ4<(OC0Spe=R?1!}K'Sc<oqxᶻf#oO0"x§lEmB{!Ar4[N8Q_?M&Hm5!Li•=ZjadY䱩Կ'*<="[p勺'cݠ5L{QЩΘug.;c=REQֽ̺\j{v'hs+ӊOR]XYԋ52{LuNk4zUWP@Jx %0Ļ4l> ~Ebb^hy'"$.4Bb1'.ȝ \macXV>ǚ#VۼppztT,.t%Bȧ[ho)QL[*@rH?kȈ7"_! y6?oFg5^lndmTo`FZNvi=e?qZ}ꌃ<J-4X@{.Ya(`EV v L-kx!ހ-0X5Mc@o&`μg!Kö= sOb3q{e< <`Ȫ~??ٛ 5CBJCyꏃ!II0$? ԟa+?VV]%W櫿VQS-ﰝBVU\SK+տa@; `V"_.V?؞ۥk.S_G n3?PK F|$>)>=B1edu/harvard/hul/ois/jhove/module/WaveModule.class;xfOirl/`zs/`TNHҭ+N!@$bIR|TF ޝq??O{o޼y̞|S0ƚ] |@!*U`S*>J8ǝ>!'8^ <@ TO+ ѼO)0C+iQ3 SEpRNJqx΁'i)*&"× |E*57RD; |W)}~(Ïq~Z?;R *[B!ɚ 9j RyjS= :xe,8srq[8٥P沓])"'.ʋRZ dPዜR,V!.2j-/`Vr JjE5רu61tΕZWxtü VuT+F'o멵AMfomm%|;uG_d;i"kjR( N]M-{*TtRѥn=^j)|/O>*^MKd~}˨x-M ~N; ^p]D!6`aPT+I.HB 0*ƨ(1*2O83 TRW**&F_';ٷF_-795 V9f_d? 2~NͷN+6$Yj]p;.ɞ{^ɞ- ̏8?wT6';E~t] [8A(2~I# (կuR1$}NX;E#PxR P)S2&B!# l]Oԏуz_?GF}1t &Sb񨡇1K{1oO.د6=F+qݏX;3 1e ;X"t" ‘&A#-l>PX顱! 8A9Dll\jc@8{ #C0xaP`kȱB(Oqnkp(X n `p"koinG#dp$㭣^ .V2e@*2³BcHfHf?C~0C #x8tzx4p|PAâb3C8H!\%[6ܺcFܫG~ԔX`e/rt6{\nH=+0FIkez0wm}XwxPfv{w!x}nl:;:h ;l"Ϯ}؁*TQُ`S1 h )4c uTJz>֧ Y( 9w2(?JB4Z8S3M rTxhx$tSE噛 Iε2,bd uTvHPsm&巈Sv'Ba7mTر!},&4kJ+;ߋyUu^4 %i dq&H4nqȆV : x&,gLI)FV s\^eٜS!*s|JiPʭ!vvWD{ 6JL>Y"t,˩YQ?1&vG [a`IPK%iM KFd94CA˷)ݵX^ЭB?v *M[љgtmgܝwe:NX3@h^4OXk_kTT =*\JkQ#jhhc` 6j5 ~ܩX Pg봾QD55F%1 kC0`;BN1}ƢCH صh`d4554lb68|G m(.Fڍ`02"n}si[4llݴ~V- PӦڭ0Ƕ׏ׅl2ux*zYF /+$ԯa~}z Ҏp.-FB1x6'AưD4xA `k!McC!Q`IeuʿͿP@??Ą1x#3#7YQI=vZXɔ( u1]AWac aɞH"nhDv665nvEcC5®5Zx ~EIqiIܸYkjll3a۠ +CQ`L XRckOt-{Φƭ[6Wϛ_ P?24_ߴe@|(a uca`էWx ѰE'ux2&RǑBdX8BP~s1L-ioWg*pM忇*.W`&*#9?aQ/*tcϫo4w {{<*'GQ=@W <8_/_PKeUbyyy p9&sg$PaTC$I*J B'Eٌ9&۶nbm4j$Tmr ZUV%E*R%'S1dK*ZFI-TB.fm;EIfS9ysq0u κSW `KACq ZBYSE(~%ӉW*di*RYZ2RNqmBz*;DL&VڬV&KTiT…53b[a%<BZNRTUjU: nɿ ?/K*-CR) BETSݤ0 x  ]-̈HoUmvU!۝'l&ZXJC.#áF(B!U֘ߕ=E+a&ȴcDd'w޳6<'`09S3mofs,b|['<}hcS$=I`Bev'NOz[U[GR8(/Oas@bs~D[澴9>h1XMfٓҊ#Qi0nVzSX { )V*/~A?][TAɌ7cNÔ+52,vu!ef3;P A[Z(Yh,Iף,n],r3@؏m`}Cx}ZC敖2Wd'kRDC!ivN5f;ҢCVic.{R̮(G0- JY^Zz0XwURWcSEkKW'n,smgR{c"JWmn>Ν?ӛ,%t ~78Z93(6R$mlk;bcJc00z<а'H@(Θ;zS=²#yD[.1{UdTdK@HNdt) b5bv桛-F0Aa 8)4GOnY1W4{pM-軪: e s4f_SG%2?P[N@H>|.͢{@JQs~R|  zYT~B㊄Nb){!x["j9a9s(G,,_rz9 #|HЙyYd8klX+ -吽mxgD)cwws#&*n>#٣WXWgqJ#$#BP3ʊ;xľqR2G`csXFF#4};ec{2egm(p4pokfɎWBTg-X$ [6`W3:O_E=f[ynYLD<m7lw42ޣ {:ܻ轼0hGh{zQ:^}5~ S}Uƪ/wbbvr,uKi2| \|IS*bSLb+r9]4SgXϵ`-f:]U*M%ծ$[ZU}-8˧X9xk\+Ƶqj\l ;Z3Ŵivvg ;:wf%5IVQl@\frmdwR/v vҘdMծjSlS4t\[ض)}@ &еs]4sL)ֆvgEH;]27QTCJut9 z#O|Mh~p;2a ee!2őaweߟ?BPbJ[dVe+ ˰rbت%ZJJ/0'.cv aL2X2(+r`ZK_="2l^QkK< )|\oW` 8h´tq <>f'?l,rkqrWU`p8+eźzb]7 YFZޟV,#Wݞ& &:ۏ~\3OӠ~l>u欨ǎC4ziP?1Fxډg'}4;.\Qeu)诎2ǻ}J?~bxJqK"+᭰g*oˮw½ nː b>k0HoO!ED֜`w;-r Wv6wdiߛ}0}ՎlUN`J<$ռ&ݜH7N7#{oUʧJ(t*T]{tHTfahOO#$gEsI-|a}F٣F*NRSwQ$OQ4Rq;wPaxuE}a_ {WZ3QV MܰF˯L7nTۯff8k \_//H?oUF}s}W%Vfqq}']I |03 \?KfORz'᧮A?O~_Z+ 5>Ml[]S$z֟ĶK!Y$]~~>7$,s=q) 'ٳ22-O_wMKO/60@`?9n*nW )SUե |G @?5.+ -|Y+)"$o}ӠBItXP L"|>k:cG+s8^? #B̎c)'zpDX#b1([VfŊ+W,+ʒ╳p[y2 G)YRXKA뽟9 N)-BOEhPK F|$>O,{#M0edu/harvard/hul/ois/jhove/module/XmlModule.class{ |TN^&/ۄL%{ @f3 K$ Lf ֥֥Z*nj5Z[mնv*ιB~߻{==W>|9?QU4v.{1zYe I=eg D6i{lLeY=Gﯨyz@_TWU4;l7T^U7iTmzFS^Ww]7P"DG*1EwT4s4.*ٯhzMw==@?ڡ_WtwzSaRٿi?v~ogG:JcPasFnp Mp9(\VFs O& g,s\<;tL;e^>[c|.=|o v~_DXbKybaz2^N z,rW{W*|ʫp%.b3TZ.õ|3֩L:KgZU^ *UylT&vB%^(\bn$BM*oVxϳý%omv7Swʷa?;zO*F.TEv]/Vy/!i.zt<0֎v=x/=hη*q.~;4+HQ7LAT.c/#)?B]Ncʯ*0V_OƵ*N *?t: :*>U~o%׹M%oW*ګ}3߅nwޣ*W~Z?h۾`0)!-{0Ȩ Ca?4( m8ݶ_zuͭ r/ZӼz#NWk;ZiZ@~C}{\k%R[7njocٽm2X`x+oW*v5}FHwvAϠbHpDȞ(n Tlp:o( ۜ7*"ۃh MC 1ݤΡpoC;{ F!csk [& F;``Ȩ ۼ ;wy}PtV-NԵ^7|&QXQ 'Y!#-NmawF@ˇ҃ⶸڿv{ |p˜5=@'^1/ab s&Q])sM_&(tbRU1̋ P~Mn*Ã(8u^*G̣x3t 2Dlߨ|>Ǡd$xa|"L?X o2~EF k}(P +5vkXk7G˗il uo; ҃:rzC]W ; #r gw6^cx4l3rV/wz4"0=n,ܺjt0=V\8 T.[lYeٲE nN+I`{rrV;; t{amCg (鴡st1B1v;%b`|dsF)O|EݾAr9wxPN /GN|nX"NrЀa;`f7+A/'0!$K(`Hb㶸5 <GݐĒzw;%YRV[2$ Cwvr{j޾ip|N紵7ӂzz] CB\̍(G=A M (v7~#jB n25Lc;^袛^iMTG+Vׄ6" OݡяX.wVv ./uָ^OQlv.\ M2̫9%˝UO/r\l+5@d,480F^_%D9 5& X@LRƕCaT18l25(^8 sP(RD&4Ag25[nέFd;د,acpk#Mww fh` }/л5lОKFJ[/FʱwW ҹ@LF#l&Sj +W(Z"pF٪իWk"t \v*ߵ<D)!r18ǣ&f¢< N?n{kEkmMPOy)fgkBs41uc&D7& s-B!Py(06ppsCb8eN,/ 4X"bb&n&Zv)Ry5PiXh=2kM,5Q)Pp>ehb{Y@X;~MTOg8ZAt+)i EX#bN:Lq& OePvJ+)o.f f$JSu)7k" 7dT"EhbUD&6MP< Xubbf@3Wl5C}pHE7Uy*Xq`= Zř`ZbGC+Ѩ&ѬMGJ#mczfE[nq".ą"E\Nq UeQ,5X.=W}HSnbd Ჾ(bFDq+)ݐ2K#7 n-oO(F0ecz`bi% ͍S1`Q4+n,0B0Q  g\IˠR4< <0,Z:/]T t=xPǡ/"`eMbL"aF*d!%eĀAiYKE'^{Nh('!1O{ 㓑2,gy'a"dUU <4/R"mw $D ǧ:̚+Sts /ZxjVɜc=$xBU..;/1$ቬ.gd\rC#,XҢN14M) b";|SoPc#Qls³&&^Ŋإ!e ˉL@`D&>NyQ\e89 ATt7l.2{?IC<]CԽV\a&7P&>%nc&nf* QKYhVq&>KivzAD?G)3\kiQhN8H]<0w0!S)5 yЊN[ÁAI71G/<#}D״j~}hbgB5;7G--k`н,~ SdStCKLs/5'Ta I&emX!coK$, $?#QE#;Dڢub"68 Us9sz_n;(J^w DwAk䋅И "\EFēxJ<ctl]^D _<:XASz5mԚ3ZK'ݚ%IUȠɛYM$xV|xuR!A^G;IHi~92I@cr:kYSI,mhF6z>sB)-^'^$jš*g_K0y˚&^^E&% eεg W~[):J&/ۢZX bِ"~>>;^.~ wEf(doۦvzt`6O0!irvⓖs9en PFtJk[肉l5#T#KHL%.FF|=omsډW;9l"I>L2m:oAΧ)Sf,Kݰ=rw15 \f:Ę=d=0ki7|@_*vkNw r&ܓdJE4"I.]v.k05&`{0>ysw9a<[,m } 4쟟зc~:,ضJ.-fwѻz1|o;;>-v016G:Hsbbq2 Ñ5٣PpD 1#y%U\rf3sG!Q"&XX8-JK"Ա$KKǠQ4ţ⧠s*V2k[>NJX9F N/3KYL`6~N]}2r~,lQo\K_.f` g-=E ǯE -0#g6d"p>\ԆJl8a]>Ra>/ۻؐnjYcra8Sڇ`=MG{a60xj])z ƽo۪lDڬ8ZRM(An4uBT#; ֽ04m 8c %8e쟏C yQKpƅ>]̕\̥A710J>} }R0c&_#@ &aA4]C}t- R1؅ ]!@%؆&"[OѕCphhp|LW å^jFO8 sp]COpKqOGSh E 'h _w &LʆS?q3𼻡o/D8nq:ۢꩇo;E`(3ܵu D'I'h#@t|eGpXKU1>dU"<_V$dK8PI'\zaX%:BfG.mǓRȄĿOTּD1v"BQf5&A <rhR03l&<ӄL rxjbpː[ƞgClKYϚR-)e;BexЖ[+#<!R(`h4W‹.|U< Z)56 y=/2 fˮ,=e]Y%AKfYxxՕg;o{kF l|7o CI罉r 4^hja8KqXXƁ6 C$0·]݁IVOO) v{ Q+?42Cq~AiBjˢ,\䚩/pDmLJl&,W~-oMˑߚ_z$\ y= bdqAϕi-C1slԪ<4n+"GO̕\3ksf.0\ZϮ|=ژ'4T|j l{lu!BSc$R7 M} [ZH9Mfc~0C/Hس/9_*=?AJ/%„kq\B]j+ؒשwE"QZ/d){1}(2Z ӑJ2-їc,8XAp.SEyr t9044KTO S:)"Q.KEEQ}8@B*$R}iK ,M18xT/Mxqs|pjo?Esp䒊 Ib|qJ⸴ \\J4˜&9ɇgE]t1(g'wϢYBm gc(]HX-sr@l&0OjL+,%p94+\:1>oKMҀ,Ez~j9/֋ђ%z-CiP4%X$bbE +NXqJ⸴Xq,SL^HjM؜bN; YIdf0̊fYQ\ 0; m(@s9C\[Q6_a l}+N]f3`tAZEze$#:3,P>@ #4##l[JpbXJPZC[+SKQVaf<0)z+Op% .3i\ܪdx4=+({o{ײrS >/^k&|7m<p|?-2a+sk(RGbU:{ ]a)# 1}TaSv®TUGa®Nݬ=xצ3LV58~Z]Gd0gQp(zl8d끙̝.R'l}jrO6noiLqd&;UI|!%(pyqX'[I)쳤Eaȑ\=5tl꧌f5W3iؙ1#lr@0qS\$sU>qNS<A8E[+JvKt ܍@6o{LJp%:ڂ@ǁyG2Kqw (OcPijjo6;JfEv s4ȟgݏ.yN#,Gޒ7e̲X2-\V鲉[JS#le2Vu**RU=i,/%~̳dgu[^J{Rp\E^ʬ'ǟt.v@ڽfvlUv{]g 0=ck;JFٺҲ<{YeeYHjʷy= 8d۴& yQ*+`GcBQюg%hF ׺Ap`?˼;E.AQ!v6R;4zm*.'#bbA 9bCDfUoH]'TQ.ؙAvIya5[SPLJ_bcrvQXkG ?=Vnb2}rrY-z}Eo:Jczj<O}!r;l掔lIXv\Vae۞[$Am)H5 PK G|$>&edu/harvard/hul/ois/jhove/module/aiff/PK F|$>Y_nm7edu/harvard/hul/ois/jhove/module/aiff/AiffStrings.class]J@|mbmVo"BDdMbJCTC-P t(EτUk h4ga+R͘[q6;"qz*6`twXb+ "yC6pwʆ Jk2e"$UDP!tNYLb4IB|,AY_+O-reIeԕH?<ԆWl!;edu/harvard/hul/ois/jhove/module/aiff/AnnotationChunk.class]kAid~Dmid@jEU46 ;i6&f6Q%F-I\ؙ9睙o?}pUXp ᒍ6p1` Xa㦍[ #M'%⾈}J:< z wC?H4[ioͶ ТDXWz`md? ڕQM5C<=:BճqۅKXv; ha8d]Ū5M2* FfƔuB-LNx\CZW YQ1䋥3;Br2:P;03/$$QۢKߖ,6qkֶ1 -^/r\Yݖ:=h3o8ee 0sh@_yMrz}aYRELҼT>V#&f>"{.%赈~PK F|$>D\ <edu/harvard/hul/ois/jhove/module/aiff/ApplicationChunk.classVmWE~6M-HSm|km !t֪IEmjx1EJ$Ymv=Eߎ=ꝥX93w}33Ϣ832+}9AfWBiQx#7"һ[v #j1fy긮lnDPMe*9y5eS ' mltc{Zٔcuڵl0LtZ!%ۙ3~[-mڱ$CV`pW@%Z5'3~xYVjSOE(q9*0D[U8n8Eba_m6 | |;Vv\bYmU(;mjT! Ѡx XxS< IKr<{ wΉ *l '}plO-P`W,PgGY0zd;4En;Va`9pa*P6_v,ۙ@ 'Y ~/ '}]+"~ bզ2Md(OƑm_zEYMFLS>sdfw/h T].WJ Z߄O3~YίɪtD]D|xӈG[veծՙUnG4 {99z hpS~a0 mWuPYiJaBf۶:#CR)KrJ̈́ʴ_Zׯ'X_(/KxHX)cЏ`0JzsAГ`: /%.bڝ/w{qj1 8W8'|fwkl9J"Q/h_9^,s\Hps$9&8RT oi_PK F|$>E`9edu/harvard/hul/ois/jhove/module/aiff/AudioRecChunk.classU[Oa=-n[ +"Bj X @kt-x0b&c`˚&{33g|p9 [뭨xpF}!u [Q -Rq:qr'ྀ &ԊjN2 R%T%M5RQҦ\|~ &4UU6fp=.[jҴlʩJf.:7c )M ^2(hXh}є72r5'9^US*".⑈Lj1DHxB4vI꺦ga>)uMWJoWW Z!Mxj%L@\DS"1fEa1킮Un0tؔ'^H##`N<,W"Xd?rْ8 a:3K?l&d #%ֽH@g4~k;&7K$(B,?;\{#=}xG[ĵѵ3Ggt,Eѹݵ{&}wm7OD\UzsPK G|$>bOz7edu/harvard/hul/ois/jhove/module/aiff/AuthorChunk.classPMK@}iXGo޴*^#R Ջ} fk <:{||~~{#+нTZL ۜ _Qϴ,L#2/%M|~ێfpҴZr.m6[rä ]]{w*;~&)w)8(+5qc$5WR`6Z^Pp"axY!P{`trz1ncEPK F|$>g\.T 9edu/harvard/hul/ois/jhove/module/aiff/CommentsChunk.classUSU.d͆i][*RWR%MK0LB1E ِnL6_7; *gSx&XBhvr9u$1*U~M c|vՍگE|xõCW›oK@TD̋I0-xqxYEky/=Nf\3LÞ`J٪ʛZ92*Fբt5jrs4ؘl|ռ3kYIlhjXfkqTSvY׊ ¤|$: Jꥸ"C)[[3jAXt»)bI ֚^ ˬ-a_,C|$cehXer"FAv¨؜|MFdúsk.;" fG—ql!$ 0-?5 p<on>|=Hkt77edu/harvard/hul/ois/jhove/module/aiff/CommonChunk.classWwciA`'!qNƖAD]ˆ%kHZvʄI3MڦipKI(ED99wFrNO%ws{^׋o~l ㈆{~4]n1=ڌ /f9y14X GYq b8^|]Rm1r(~qsŭ5=1*kX`8тpR{؂، 1_P>A"bxQ3<2| `$ç> 1|^ _`x _bx ~YW4|U.˶= $Y wpX9V)v,,X1y2q913FrenJ3F HŲ\n)PG+h!B 62hv:5Ǎ1ұhw _S?0ϋ% O+XWHΰmO:$(hxzlZ8 Jtu <7<·u,;::3:uϑw]祒p1  [vx816 /m w EDѰwH˟9a)P:y,^(9'</₎ %"LSL C8^QONIz(|5 vW:~W7l,Ya+\qcZz{!&RqzƉ #]9 ; m4 m=#qy'-kǀdHTD( sV6m2l|y|Uw) }R²=室 + @e% b#믉_#nB54''YL!c{:?gR\kĔjS3SS3Q*xj:>E+$cӤl*=bzN%Z ` ݐ/V70la7TxmRכObbzo )j3JJQG͒T@u] ֊:ctq):#7&AtH¾As'=^J *k vmgyNyNxHec ˽1+Em+h+a}X#vPO5.V:1-p !rD*R60{FۯubqBkmcXi(zz9j<%z#gV@%>W;!FFTP;KUѲkT+E078 jr":h c'Vڛ^!dlaнr~3HY_zz*!U/ij{jߝjuϞ?M[jV4L"j--=z6F% T35ZH W$X/6ԴmڪLod nQ{P` hUpk(B[+xs7=:HtSl z[f;%l]DB%J:V=".ҤWNZC`m8MXl.']=LX2Sb6a;B2vul_( bzH@H`h-[~C*x[]={zFCh{ h0aR;U0E&`05U?A!x?(1C E{Qz%Muik>ҵtmѦPzQ_hsp8MȾtT >|G`<eĿMj ڢ*izDU_Gme7)y/W=XPK G|$>X~:edu/harvard/hul/ois/jhove/module/aiff/CopyrightChunk.classPMK@}iXGo޴*-"H<(T/l[lX7AWy?%  # G" )0<յvg/{3vlsRmIF?BNRet~LW=2siق;&m_Mn\Afr`P Llu\1NVjq/?ڝ|Z2ƚ+)0[r]"Ů!|zF~b:Y{kPK F|$>$5edu/harvard/hul/ois/jhove/module/aiff/ExtDouble.classEPJQ=w&s'G;j5 و+ (D8]Jn\4$"@u.KAt.UߢoQJ1fһ8s c00o o̟NX $u<ԑbj˞#}ɠ XkMmeξdlye|:{ Ja~mڑ%9&>㱉[lwe,jG^x; WZ"ĭJѐ|=1-*[^/8YjP6"T&*Irw`[(¿`xkTS@Q~Rq@"Rz?>+}BX״uqLQj?C琳w2CK_|^)<,+DSCO)cc,(/d~cYPK F|$>4>edu/harvard/hul/ois/jhove/module/aiff/FormatVersionChunk.classT[o0=Ҧ )u\ ]o0^&vCtTeLfq۔6b/BC/HĊ89>/.$a⢎Ky,jj I\u:n͛:r: l v6̷h;Rh9Vtn6weury3՝3jt VsP>gjq@p-NV"ȏ{5V w:n8& OPXBD%eTG}qHz=&:MUՉrϱ=&Vg,(Y$ " Ȏ&HyvV R%@=.%e !$vWTr7= 6[= c]洨f;qB@tM3R#ɟC }96M Q*W@>F11'#U*rg|Zh+c_%>!!b[\/PK F|$>']Rڳ@edu/harvard/hul/ois/jhove/module/aiff/InstrumentChunk$Loop.classUSQ=OBL~)"j&j!m20ᬲ*..8hrb}]w׷V8_&}2&bJB2xC *fDŜ yKx~(⩈eaI?Nm`ZrA4|kM'0ð0UGWՒZ6uX>2ԃrZ2TU5˩êĊUk?B%Mˬ2/YCӴw B ["di[ &#]-VAݬئULӄgv8`7bEu )0/NtCQkx )"qwV*F9ܼ!-$H*@ Kb.zDͲ ;Vp|g`R{N<_eu>ͼ51HWՏiI,%RV63W< n3|`Ht֡KWeWC#jz ;edu/harvard/hul/ois/jhove/module/aiff/InstrumentChunk.classVSU]f˫EEAm@ u V(/a5 ԂK/dAJ:/,Yr m^pЯ 5bX6KO/pyU8K vШ.~tbC\,mT}F[vY/Hnr[YI=Њ@tjq^(bˑV\ljԗ>EceЊ8{W`}`(:Hx*T{c:&19.SHSxR3D2ݑ2i_=C4ӫ:3et;zJB kĎ;5bFߨ7keb)hk<|'Wx~ >ՕB`atW8[Eޟ!S3͌ {yYY |T{AFP}Nh/PK F|$>|^7edu/harvard/hul/ois/jhove/module/aiff/MarkerChunk.classUnU]'dKҴz)%&&bv[3'qf8j+O/^jAT#_1[sk^{Ǐ?M0Ë昑㬊^UD\\+x#71qCŐ4xKrs#b7# ޕ{1pK"βyi;y"c-&zU]oKvVSF6&OV_ۖ0-/;B]}Ip-{NNc/ 3 1 `5 gMN2 }QʊFI-% jaj492.#a9<>P@a$Hu=yb7c7}鷤.i< w%U<`8 oU-O:AɻM[& ʭm sM"YmIgx!4"a&UD ޅ45TډR.s_?<,A)21qK4k]\4kf3p?7I+ӴekG_LAr& LjXQ+A).p8& 2 0 PK F|$>nHP5edu/harvard/hul/ois/jhove/module/aiff/MidiChunk.classTNQ]-S//xhH5 *@N;tLS^$Fd h8۬}Y?~}:p'cP)5VÙ✎\"t\#:Fuzl Ҫo 2+5snJsõUifrX;kTC),kbSkΊ@,S6ZaDiЂrNM'_⋁($U"bs[%t$ F8&@$0qU5Ajmw=̦inc.,Hc`vB( e𣏕 7![!A;A߯V_iZ񍆋ePd-/"+V02a8{B*,G˄ٱ_f%1uqt-4Ghw hgdƷUd2˄d Ͽ*Uj +a/RЬ aYęb9؆Y۝z@C( DRAB?Tb:]]YymG-_mv5edu/harvard/hul/ois/jhove/module/aiff/NameChunk.classPJ@}iZGo޴*^#ԃBxm5Ɇ5ʃ?JDuv,{'S p[1F1g@,2* Xt0]O.ͲP>^Ƨ7L%|]V"=|PfNr!xZkíO7"&!s.$lL/-%- LdړHj:xkPK F|$>Ze6edu/harvard/hul/ois/jhove/module/aiff/SaxelChunk.classTKSP=MU *]IQ*K0)")&'󬢯JnUjڊe֞RY2<6 .b cu+v  "ȉXzP)Ҹ ,VXl;Y+{UaZ}l&%{~]ˍ>T> =Ǐ|9Ǫ!sXV_rX\l4/CQWk G5l9]&Sd,5@{|Ye6T*uPX^1UrTTXԜ > [ϲVpxC]wF|a׳=_ w< nXhaV=<sa.uAZcO{[а.N/ :edu/harvard/hul/ois/jhove/module/aiff/SoundDataChunk.classTNA=R?@(jm BڢKfwKOH $}(L,Mvvιwι1QaLU0CA!?|C@XBD R<8|$ 79ŻQS.aZ}3;o)ՔjmkemehnSbj2Ubz>N $5HUZԖ*̩45'XTD/ Q3hI4f4?In2#*c&BXkt2r2fXXMq ˪QPRQD銗RNös)j,՜Y34nĜ%ϐ2Vᡞ#K0V3P"o*>-sRAWzQ'5 @026A/ % `$К#оCVUTHWNJqE,qκQ8)9آ>Fݡv<4Hl:3]]#h8fNfc#ׅ))ngͽ2VnNNT<%$Hndg=Lb]mŽ6v[ M# \ E\bH}Fwt/{BX ?>'B:omH؇rMi ;3^X gvѷ~Fm`!aCMξ>/W`PK G|$>P5edu/harvard/hul/ois/jhove/module/aiff/TextChunk.classTKOQn;taED+"`|PZ0 rLi4@\qИqƀC\3&> Djb;OĄF.s#ٺD$(ŀ:".-_|n,)7 ἑFVQsKT3_Vs暮ZclvF7&[5+wtns'bŢ$t 2qS}CQ ń5 zF/Zy(m'i}b+.e$/bA1$#K2. 48 C{D^6d4YUpwCF2F0*&nCg 5cx"ac66?T,>%1XGd/vQ4';(GO*=pTi!|:tpECN/.˩k=U{ `}^NYwvA+;1J+Cw5L2ڗ)Fb,xPzN0YFzA ܴt ^ (}[`Ǻ'r,q,"oddT6jHypM>%edu/harvard/hul/ois/jhove/module/gif/PK F|$>GX5edu/harvard/hul/ois/jhove/module/gif/GifStrings.class[S@O Db^/Q,Ći3:i-iM*/8?帛9}o?` #0 )XA0]ܗKcO3R}`T ؕRtQ7rz=oF^K=WT`~lu-͵f>Z d:F. y`"BCP}ߌJl*r)RZ| mQ; .Q gQmnU7?߿e[.kX.|X lek,S!'M,OĹsq.{*\ Y8 `'ޘ;,&*ɨhۡø;ĦM*DžMlBKbgt) !'NDɉg,}AsUxShx"EȢ‚_c>zLXlC~>YJmEP/ k,?T%'Ԏ,kv\;>b]DkѦVU]/q,E 5#Xd嶅|,q,b˥HW]PR2 O͟ 0PLD:a~d $H R=0,YKGPZK4]`< 2L`Zd{oPK G|$>&edu/harvard/hul/ois/jhove/module/html/PK F|$>n,66edu/harvard/hul/ois/jhove/module/html/CharStream.classePMO@B VD?%^ 4!iiv%eKm(l ^޾yo< 7.2r09^Ƞ9ޅ6R w 1NL#\ TXEo"T?*>X3pzAڋ^!yg4A&bu{RlORŏ4#9fb!w jF{8#mid`TpZr+'Eʵe3)d)@(2>CàS =C!^#fN<5X;!f[{l85edu/harvard/hul/ois/jhove/module/html/DTDMapper.classuTKsV=`$Xq?y|Swx]xGÆ"J>Cesæ2 *CpROh0zJjJ w.,vTiF_c,wr|T2Us QCut3W4`wuv,YMݹJ/6MU ZȦƷ([]cHz(niX^Ks#o8j뛊UC×T D1?l<*y4O4\vAMn&';+i^[uI74ɥZC3xBBcs+j:-7Hu]Nv5^%OndjUbUPm1R}W }'OV j ^$EDB^*0 *mбM\_qq M D!<#X |c ;IiN4K_>QlIiə7d1&6 'x*F#)C%. C#Cx511SĤ#ⴼKǘ,1fcn;o l?bf&sXIO_J=D{8d*D]E)V &z1's~RG C8ݧ $:edu/harvard/hul/ois/jhove/module/html/Html3_2DocDesc.classW |c,;:!p$9N#qH؎rmZXuEZ9q(ZZz@7%B(r~μ}Z*6?f}3̛t &Xχ ,B$|Z!@ BSH4A aAZtv!,E8 !Cp8a QG#p,RG8DeQBa9B NB8nSNCEX͞NG8La-B?:9oF6""lB8@C،pFG؂pk^: ^` L $R&VI4BaT#d!G( #BaaN]!bKv#\p𦐸 #-W moGx•W!],⽜Y|Y\C,>#,>1#|Gd)fq kY|gY|u,> ,K,+,z_cq=77!܌GUXb?om,[,ۃpG l%*bdf[e FWdFjL>cױ<Z!eh3R5T,2Yp)gjVhΚVYr;T+mR+]v2m´ٕ+*Y+m]$XV)3Quf9z.-d}XkMgBW[ Y y2[HNm,ӫ\H8a(9C(ZBPW Ĕa. y)Ս˳ޡ q {L Fca`_+ ps<+r&2wz0 g<3) T#fR7aYOz3˵ɃsQ2rJD"Y-5Nšɚ1c"1se+feu7Jir%&_l*l`_2Qs2S[IQ 0.ARԞfXS*3ݤ= ½ V<1c1pɒAF~+A'{uO-]2RG-Y)A-NB#x!$;A + ?G@BZ/[b[#K;2)+Mff2mKh$ c`Z\̵Gr(r %aZ̔Y  (5NQLK3. M8WQtML& B&,*wzP֧z34A%0Y*T) >0CݒSїȯc1&{M>O+_r^δ24IkHy'R. OӜQꏴ,w;IH fEҌ&_ erTr)gY`cJE2)˧ƮǢQ.E\i395Q @e"aT\< 3gk9c:md+&6L֘3vf$?Ԋ%^i Y -in0D/Q7JP n,; OSx,T|I^3 W,qJ%xی<UhlSfZ"m{9jJSpv6-PyGP!4mb(G8<*Ym0s}l8 .Aک5c{J ,N0 x xn#v_X*)eraiXP?oy{6 'Ó(_XX<96G ?$?,!)wdJF^'VM5,G3l,gq?_?q;6KeY'|;U I}i`Qӵ{tRM-k|"ѣcO<#⥨V/mҢщm@~8˖-s7{x:9<8E}8zHq~=Ƞae8*ĸ%0qX-48}Ľ>=*ד= NtGW,wG|]*grDkzGKcH:j-fcgىkI {q[h=*w1=*itrFpBFL մc m&b^:5ԡp,;54GU0 rx Yt^9EXRUsL\xH9>S36LD"JW:pJl✸<f؏JyHr{~-uz~tҵFLyLL﫹!sCڒo  !kZgY\y\04uw [Uu'u3+j정4:4?w#V:Lj*6Ngڙj+/ Z+VuޱEZ;T_:w+9Znnl"VyطJ9I* 0T_;*Lݮb'!-/ƗߨtlTRkS.nuzU\>{NkQŜBoo_s@)W@}f+X7}{ J-p֮\9X;c*k).eIVaN].u:xH7!c )/[ N2)1٭c)w4]k3.P P}woxҿ:U.NT.JP_t.SlӍlz;>M1F)ѭ%#$]`$(mHK*F0PoEۮU!N\$i?W\o.4ٹ{!cp慠wW{$ p uPZ>6<ͤ\WWŇU[Q1V8Ya2HKU|"ڟOOGyxMmo.,4$qE:6" ^6x-LU|`U\hI=5ϳ//2~*U 2=ÔQ mUq;Wi&ڹY>j[[Mvtze֫bRdv_URUqkUV߬ofBTi^|DB>_.Hum;#E^"A PGmz~=*A7PK F|$>_ <8edu/harvard/hul/ois/jhove/module/html/Html4DocDesc.classWxӍ-0Y:qظQ,$m8as6E{+iݞ BB('+rHo{=!yn{}v^g?杞|'`i[I ‡>"| O"|jç>Y!| $|y6M^·"|[C~S!D¯~ze<gC;?/^~ (@р"Fk""E2)6,ZPh(栘bViCbP,䵣Qb(4vq,(Cq<PbXd8EćDх"nH8E(@*gXb (֡X,g8Ź(6Eq>(6ľGq&EI1(y-zCFyZ0.cH;Fq,vql4^6*VMiNdmé \&] ജ'ȁUUv҃F-'Pch\s*5ݲy 5E5n&i_M0ga Ǭ)[hB(AQE3dyFwKɋ/n1(`V.d,{_xS /SK膭=l\8)հUu]/0U: B :U`*^Y-Re+F.fl"gҗ wlw\fI#OfS ^ HRc4I:+9Gڣܢ-)0 U ipA٦&6-d/˟d '4|"ǫHs<:N9}kR\KDF>󎝟K͜&-nV+!ΚԌ[Ym l+c8; /8x}@("G"ӵ~Pw,#rgbǎO}D^vr*YB%ȃy? qk_p/9?|u _L%S=ܣR~ ?24xJ#^I"%oSJ%N%R%Jޭ=Jޫ}JޯJ>$5X)Ra~~J$@< _4@nǡ!cl\g =6ꍙlROfc&ڨ7776Zf/Ax.cV6ncc? }p^X8 1,)X%$Y5!Uۧ]?Vn?K q pNll,M2$iL?YS`{ MƐWaZ# za _yuNr#T ĦaOPgW*jn7K/U1ۘay}[o%3A*vUP闩sװk>)}Ǒϓ |g |K*5pW.{[ 1:YW)}OLbC, <}ApU9Vm'dѷو:p-CPymTo]򕘒%5SQ>k|fFͮ3{K J2,}YzN(W-*?7nEk(_T'x8s{ztw]lԯ)?׫w8|{X{M0o }x7ü>aW&/ԞYcPK F|$>j \>edu/harvard/hul/ois/jhove/module/html/Html4StrictDocDesc.classW x~c-'&$r0 .cb A1J$'}=)-=1-In]z}7y{Xh>yof3yb5 `tX|ŇP|GP|kQ|'y O4Ϡ,ϡY͞twlv[F{G֚һsVlRHTdŔъo~/Vjrg*,Gx'136%iuʥp@+D@ͪnԵOW U*F~_Pia*lP)COlq͵f[ҏWOK=UŞxx]DAɌZ>3 J%IŜfYW6IX4Sh]!KFE/6͜eN+ж4*R\)i cԓ@ȣI@4(IDQ"epBI@"p*8e^% RḆ6\XͬN9MTMs9ti3@%@1(3/M- (*i:m ujLluMv+N9šS<*|:Ieu#et)K N''|hlJM0OU}J񗍔s9f#I*0a;MPKZ.HXԙf24-&ݜ@*Rc9*x4*dy(')dƥd9p-+μNȐ̎)=pr&,RJZ=L۸9eYi+n;"p'bݑm wTiJ9[T}/uV̈́/h$`RޤXSfzs}H~ׇ7RDJ?osi;ǬIRh`X?|+MgAlmFJeL6A_JĄl9 XIKcCD >so ͸o&r>;[κ̑@L^▛- FѹNč\ by0*2f|?O{'35c'd9X:{Eβa8)v.IZg.ϵGY#cFU R}Pj=/ +K?f &o$_Oz=<*7ȋAzf::|JU'5OP<RDXc>ointVxekgfh'PUzɰ$$գI6ǐcD}iQ?-OEXoж@.'M%rCx2en9[V2vC$DCbi-9 ɽ/tƼG8H]]5?*A3SgbQޚiF]zVr!IVeAѓR}bHgW8- ܤ=,rTWo;S y:H)ϕ<)7J9$R^ 尔#RJI$W +$pkS ed>cQeզ8[:)=QOa6Wv2E# %.'1<&#:8T]%̬Xc21q̍'Us‰ֆv?Bu˰GK9Ux7aUMÕF+jJ/7qEz$\h0xx|8yċK~!*ܧnu/>$Oj4F+!;lEye~CNrն8VTbj}xO傒r(S.pXmn;UWPQQ_oi\'ȩq?I(&18!Ӿ{nTaN 933qy(2jKo to0 2`W+Ġ<=r=c-.-UCxPFMv_$*ԫkkr~_tl8 ΎYqpV gSfj?~+|̪#DRZ RҖ(eIr`? F.|c Q[1\]ZutY͗v,fcgw|WiSﲊC.)*Aϫ⺫7óCA)wI[=r|G6'=߭0=nU^Wposk8 r4\ip$l7+<-=V6rFܭ"%RC'ڔ3D>Kg_-jn3 ^/^⼠K-}"XPW/i/ԩvO\2LUPmpQEDkiJ1Ӣq@z-M$5T$ PK F|$>K&:edu/harvard/hul/ois/jhove/module/html/Html4TFDocDesc.classX `ޞ/phQETHv(EDҀ$;dvg Djk*U{i+U{Wڻ^w]m{sdvDw'^zQq@&MIhFhAH!"LBІ0AkROTif  "# A8!0YG"p4ߘ9j&tGg342Li.8E= s8&#C8a>'",BXp O{Kʟ#*73V#&kyL>uB؀&~F8\G9<0ج΃B aB("lf_F؂ TPE5!F؊ a #\p1%"\fYoAx+@*Ax;;މp-|»CnB=EV|}!܎p>A!|N>Q!|nO ܃p/}G$ Ex!AxS!|3e/|_@"—Gx_A*“_C:7-o#|Ix {Gx##JU4`OUv)7Z۴?^'7H1|+--7l]nmEEyыJ(|otج*k:LtFNYdz, -6J:UL8ū5}U=7DeP"+9,׫Փluj[^ǨWϒmu9u})Ôz!^XAEtTAoBCѬIg╢nY)넮z B$_F-Y"qxI?i'[N2=h4 3d_-K^ ڼ@&8cɐnz`Zolʆup Y*q;+q+~ы4F҈Pp;EK#!hJ л^P+|9+\cvO,K_bx*>.6@q vo{.'ǢANn`ϐqMPNG$mgEmg{;&xf;5\/ԖMAՁ>;J]TIra|=5+H]&^$ڢ-^3^"Y 㽨d=?{٠ɵu9ژsG>rny{gP\&tЂPs5[aU} lIMDDuZOAr4|~|\W+SYt"[hUC/H%XˌuZᡂX pʎ!.|GWBtSF EHxgʶ&]fw}Yv]gw}A/ʣ%y.W1'ɍ&f2\=.,+cUv?j9U$5ps4KiLdgQwx{\{֣>qyx׽#1HpFqFq[FR6(|'wDvB{>";'@edu/harvard/hul/ois/jhove/module/html/Html4_01FrameDocDesc.classPMK@mbcc~<RTX=)'Y$M&_*ZQķ9(= {wزQCBFn XԝfK6 M]If?d,Ǚb_D!x#q8{`&t`ў ^ؘsumjsσڄ +Aedu/harvard/hul/ois/jhove/module/html/Html4_01StrictDocDesc.classy|ǟ7yHF'B $t dw23}==UT{_{߭/ۊeIԶ;><3y!fiۀ739EnFz Hz/~~K#iT> IOb^IcܧS=Lm}XG$}T%}B'%}Jҧ%}FҳP>%}A%}Iҗ%}Es*k.L-IߖIߕ=IKHIHifǰ/_~ ?KJCE/ة @(h)@ L-@+3,)MR)QR-)X)x)NDNNځy@0Sp*X,t)ΐb1R^35TaA.JZ**Zn޷6RvRFir۵b._陖iibu }L'j_b&OaM#rSӡbOFֱF/Io{b4HIqX8+9#ڞbKE+,x rsHR9ā]Ȳܠ-ڬ<׷+Dʨ+W0|V$j&oX:WԢr 7J +)֊-r*goJ=XBXtRkF rHc&_PyG"~.)6 ᠈MA,;_`]N (V(Ū8 ,~1uSZjxxڅKF|.Pi{(Sjm/ئih`!}k ZMy۴te댰͚.rHYFvMh5s˕u~e-ʅj"F-*P1B?b\,V$EFlN-/~ U6_~:2FF@-v80o~<&8P13:ڬg׏?i;әޕh)SLKB? R_lOK˽Rqxک/V\x/Ux:ej\,g+Skx zwr5aIԓiG쥕S*R\xQNO_qUZtttin k.T)nRX1YqKlQ䙇i>?f/Z|V $=w6 ŬbNTE[q␢XTt=ŒE_1P5g8qf' Aa.4-y$&'bwJ_ZMY[B;hKѵu*oTImֶ1jtKy2Mv;TKnWVkmjLHZ,֦mu>k WFo%J PK F|$>c l=edu/harvard/hul/ois/jhove/module/html/Html4_01TFDocDesc.class x硕$Q H # $ $Ʊm!ki%ҊnM}$iSzq"BC+}ݦ5q-[wJzwKz&0^}NJzP)IO>~w> | 8 O> |</_ | : %ے#黒Gi'~H?„K ?~KW~GQO%E_%M?O_c)H !)R(RIBHe *E#nJ1O&)Kb ѽHX,a E&(ܲ_ietAѴ˽5yV F&+aq3,F.b3C{ yنk`; t;nZK/N]n`Hp=UmuRv,G9<26ʺi9SaxQvkNU\/LX٬*b17777a t <`#Wkv-kksra+3QTIw"`%qD(s`Z1"Jw Ŵ3౴^"Xre`pO*ޣBfp3כ݆hyDXΪYt1(ۼ-"3dEiZ\ƭP^GUpu52N;*eq2_Uq z\KvʗKZM<#6<:F)ij ZE_G+

=3~u}ι_9٭Z4n9=1exk%$hUG} ôLTߋeklo_m3oN6;qN/`+N]Nc ՓzSx툱nSqT׼&>;nQ-݋W=&Ki@Ԑ5"[/p)wV{߭QQ>Ήa뙺hZ}FSHnk0q|  @4D.{i _8EPLPpB'(YIŕ$t9G\9' ~NEeid2/1AMUϷ1, Yw?D@Ԑ[ ƖB S Z9t^βe%Ů%\мͩp%z(U)*kXZݨڼ5X,kYֱge,Wldrfv-,[Y\r KvN.@H7iA "/;7Is@<_vHvr/bd+*wAC,7rͱp1hL󞲤)t75q{kFnD@<:Ai+XR%UFeYr,yAcyB")g> wL^D3b0p(rڦųM(~qM{Nw!P.d[%y*nq:_).iUzz9Po[cp5Yn% @bM[}PK F|$>&@edu/harvard/hul/ois/jhove/module/html/Html4_01TransDocDesc.classPMK@mbcc~<b/k x=)'YM&_*ZQķ9(= {w{زQCBFn XԝfK6 M]If28H3PBV^%?edu/harvard/hul/ois/jhove/module/html/Html4_0FrameDocDesc.classPMK@mcbcQ)(^ł,BR&d/(Qf{wض@¢f_Z-+V-1TqUfY28e"Džbh^D%xYD1y℡ٻa0N@:p0hυ I?l9XdžMͶP%E^D̄ @edu/harvard/hul/ois/jhove/module/html/Html4_0StrictDocDesc.classw|VieKkm1M%A6gnGwkwdt05HX,@z#=^Io'ޝϷ~ !ys3޼{p'^ o"<@9o!M6x0.;%K»%G{%0Js%OKxRg$|V$|^$|Q—$|YSvIoHoIxZ·%|Gw%|O%@%HC秄! / "o { G J_ #?,")EgJg¸X$`ZJŢʺQ冁a3Y m',аvpX^R q+i9(/Tb)UY9!i8 M]: ^ .<1ݾoAsĒXb.uBYlh{.VsQ*0Y͆#E<ܠ)hJs}Κͪbؕ͛>bXoQ:O/pL7LS]t UJaӷ ; dJJÂ\0s}*Ȓٽqѧ uy_k]#1bz:Kt},\啝X^ 8P T,` Źv[­tRXVv}h^Gl^e2>盖*UEږ\2`h1J~6qX (5+\g~X09ehflRhK#2x˖0<7r!w1.S?H*Xέ3G  [[EJFNA-YkCi4KfYZ.\Kx/.#\.ЅI9!1K0H0DphWs HC !$ c0~ xOq.g`|w)A ]!{&%#О WWq._'@?H8@p3­dFJ &6m+^x/,ٰ˖s}x`bըae]*iTư`Mp^kSymQjoP c[9'f EGUﮀ_Ar?+& vDUq"mJ*=tPEqnTN$^}0*ZqStoGofjtUҶIT/6Ü$]KykJd>fmLip ~SW>bEG($ёAϋt St?* tE_zQow4Vh˃;n| :Af4G[7^SHލe.?8 { zkQ uh8cXǣKЧIey8Qh8 qQ^qN`GNCg6302[ Zy\Zeauaz:fHqG1CӺ: +cFvb㨕VLke=X(*8H-&HƎ]QU* L'<1g N42Oc%T'm͕fm\Uiװk1ؠKn+Tڛx[2oc| |zeꍗ{X~^16* =0oHPK F|$> z8<edu/harvard/hul/ois/jhove/module/html/Html4_0TFDocDesc.class xI^" $1ls@ I`%5+]9qzmhiz_i6W=M>nYk |(1'O> |,9/_ |IoHoE1Ii0~?~s/_~{IGIgw% I )J"ED )E1)PhbshB\)R̓b~D, 7%"(r@PjbC^Y+h^s߰:&+n$rG/f65sj"b!WCD\e'hVq#(>يkg:ATt"bZ,ֈje4u;9\0GdV -YpFrcPwkvFE\ĠbvKKT,R2X X"Z6HҝܡNDZt]P˜&7 Z'S<[ZV)i dZ1JE\ŞЋZjR =_t2[),ӦE6gh96|Q:Y 5FuZ: t6x"ہ@/^3aWlGq gGFi ̛(NRGt.7El &\Nxp8,nPč 8 4⢩Yv-gE8UDœ;Q DŽxjM5`V8( iJY:}[|[qt蚑5CVVX9~znYx@Ђis!) \A˛?'Kgb^L_Rx j(!: \2r0 ,7?2Cp1ŏzOYz͓ȍpW'H(3iqZW) ]ƒcczSIC#?edu/harvard/hul/ois/jhove/module/html/Html4_0TransDocDesc.classPJ@=hQ_ )(nbAWJd )yI_*ZQ(N rgΝ9r|}m 4-,ڨm`KٲMbaCKWUgE)X&2-Cb$ƂWeK2ԏ4* o<<=*$h;1`65T<Xg0KdAK " A{hzCB!qǩU0sPj hcSt T`: j.kO`<|i`KgX/PK F|$>oxC=edu/harvard/hul/ois/jhove/module/html/HtmlAttributeDesc.classmRnP=7v$uJEhy&iP@,@( jDXE&W[.~`tHH,s#\p9w|r ` c!"XD^ n)zfI/0Cmװ-p:1ʆXZыO,+ jQ J`6adme{ں2<0:!o5MuohaeXAi2C6?RQn1NCJqydÆ BlSp^}ưIFlnHm-NK2mӸbULbJ q視YFkZciNkMޱpJKw;._m>̭sD,-lֿyGp55o6hqqL!$*TCxhџv=&Lk#4f(^"4Gec`cDrcH1?Nԑj&J@}z2w; >=GG~OK I3D^ iNwҒ(}+8?A,-1)rz)GFbGI=ou)3bl;r74Z2 S#ȁ("cPK F|$>v :edu/harvard/hul/ois/jhove/module/html/HtmlCharStream.classWGv])kq"ŲNŶJIDعQE@vm+%U(W((g$-р( 4\PJl9y׼y׌w?aS/Њ1 ^a_0W ^gph/⚊7|iW*~Vxɳߪxˇw>@/~m 75xWŜ_`)cRtBBp&Mtḑ*Z2ySʼn|E,1 ^cHS)Z 3VzȚL%x-d讓,@D&UfDlΚ2r~R,sKL.(\Lg#eLKh9M6Fa0\mۄc%4Oق)mJp'C clH4}bq3&Yt`$Ό٣|t*P*H'S)[Bv\xeV$Bx(K0-DzQF$td{VB%1oEnJ$Yyv%!^ڴfZm*e/p6eblg N%3ƯY[1R(FբJm|HOFLO;zVi$!!ܘ1shEs֘ʤEXش1I]۽mW8BY#s^*{3 a.k؄ܓɴ@G?t`T TxC aS3T.s֮j}\&}1e-Os:*n踋+j: 3:Y~q^^Yq}5b5i6&(Dmj,%tܓ|xfρl(;5@2 9xig ⇊ɔ8Bt$,vXf1BG1rfdďΘŔ*L" pWXmV*瑏i+'?Lƾt"cUW\`Msg&2sZdMJd'7Q+n\u1v}rPs'RUp1Yuo#PNlԴBFa];Fħ柡;΅|%".$19㰃댔b3ƜHTb=%c N$ R[_3HE=\8\K(.rD(z*J)xi|}lE';46ؽF=v-c}>zkB-h☷nƻPmS )$4Jl\}vL#X 9= 8'SzN y 襛o }KH$$!x"J/ˎ ES'BBW;].D{!zؗ&#SL4L VE^a3];m:V8o%NZiQm=:ȧtSڪ.?G7!-QQUjrwk8}%cQO.R]=ЯgF5{Z{-ik>]b6711;]EQA؞q[p,P+͠hRcQzVkt㰓u\;]7ك7̳GyƳOݔjQ@{^PK F|$>܏0#7edu/harvard/hul/ois/jhove/module/html/HtmlDocDesc.classX |?I֌cvJ+1$vsR H[Qt8 J)^`˴MKBa˲Gm۽Wwv{3#Y`[xo\xUyƛ ~,CC#/ꇲcY?+g /oe;?a!ه_dW9-SojK+Y_Ќ7UTlVqA6!0 ">\̗|y+2yY*RdTO 4*URhT-$5 Yma;~)y>,+T 4_C TZҕ*]%\Bd^,R]#h-Q5*$6nZTZ!+*õ>ԋahJe3&ø@0 :Am!@eu|]*,Dhoa nnMY-+ΚqS*ݨRJ*mSi;v(S]5nd kwl뀞SցlՌ[ Fk܌dcF@&kaC6q3GOjwl&xzz`dt64S#3F"Øs0m 9A 4̻H3 =R89^9F az2z0a,XZ$PфJ1=ړI1hzqnF &cQ6 /,#l7AsCcҒmG?3:54^W="5q[ k!>|լ{Q9&OҠ5:H %.fΖl41RewঠF3%#1 4%nƲ7Y#XJK@f( -4:F sY`43X0;BxX(G7q8aM3ҡ8F<7)EBzo"bd"A=<(q`ܲ=t/aaw<2ldm}N@k 1NuF5z>уbOC =ѧhiQvXHffBg wFi>(ryH^qH9FJ<&q j[h43`f9]Lx@c--j4LwkFӗ4zBOЗ5zRVOIةZ"~4zYA4 NhU~MV'%~SaO5e9bVɰZ52a mǗf\I$>pP)=cr.zǾ5o/N7s-1S.RR]7gu㓶 :F t ]V?ԓ6uy")z +W}CK/-wz/}A`}`R9EwbJʪ0:syHiF{WOr.<+J): }TY˦\}/^v `+dL3ay ^ɦob[T`yh3psrec)[U!^3Ѵf.ֱ8wL9c[1#џaNm.}o X7~FMꩴ-P29,%F(1JrgS'=ѴKhz%2$Hz*f)K=\+RwP__Qտ*&鱘y4AW:f_5<`&نƱp,1?/Jk2$0-,R4m YyǓf20a) k1=IWSc !J.yIz~Xs 94ryx* >3hfOWR<0ڵ9kxQsToͲ~Lu0gP_{6cRQN6&+|:87B@<\kƑ]zk91%5M ^}M W ^5|+'~9a!\r=ͣ&\0<LI|qdܳܥP-܀y}e4*M͢. RO4Q{&^K$}==ez*O{^'PK F|$>i+J 8edu/harvard/hul/ois/jhove/module/html/HtmlMetadata.classW xW׮2 `K2jQj1X&Z2H+'K說mH.AM%nH4ڙ"W|3o7Of_xy‡vn|qfy1J8<$⤄10>!Sl,J(H8-s>/ _E _e _ᨾ*kl7ooI0'"~A/܋2Gc?SВod\RBI%52z:j(%H"D ) 2f4@UW%$c  '4EKSY>(⑌2b)$&,++CCڸcjN|Ql2HL'2a%υȷ)%咡t"KO>RQ34{Fm~1n%_ͰMTB(ҺS3$Jυ-'ui/%?5_Sɨ24fr('խauK-$GZFֶjdN%#j2R!YTG +hAu3v*!O1hYҦ_/OSc?K Bh-]̀K%*Je+R^Y9 *` WsVd%mLX[t4NΎU~;q]L[]>& !<&YLF@ZCBsM`)گy u&C[tzR1gSA/+od1 JH3ͷE"xTdE_e<;!x]V2')!2-bJƿ38 hLzDG@}6f,X5{_bQes:#DlYKH񨚙y|թDQ,uYi qh\`䇀Gɻ" 6K .Yp REO ^pseP_MDzXDA7ʸk|"%И6 m%RtC0qQO(ݐoQ.tTyd(F1Ow67ե846MCu]%M՗Gudt[e]ǜ~aUT\s1ەMr^uyی8;=Pˋ kkT1[h*Q;l ԷkGtD$pVj.EƦ--%@VѮ]QwE;6wD;e&&YDkQL,j WvƥLN8'9gZ`a%4/&lh+Q_3W\u\檚+=.6$};9~8lLLLL\LD&7:&2yL'08x '`)(/`1Ey^OZ *W0ni&:wA@ o=N2u)֗ E$NPbrmi2u2/`++Xzcvf,ۗ<$ Bȃk|<Ǫjjɣu[y?@3s o|ZXUmf]WQW-ܔasEqxӕ,+ÜjŸ5e0TlWsxnE2"sx^Ee̩f ԕcN5/ \kXJpJ̹J/ċLFZy8 xԬqVY/3Ķtۄ͠O"4},P.s;P CF,3O#,1<,<0eL W-70U ,@])@#RdaYJn ppX5l( z75z;l$9sX51s5-4mjw CYtx9͗VlU,6iJB[ո?HpIKak;Ono%hI'6zuØ1~9I$z|.yl!=d ȅsإZ'$w[^3 7Q7=xo0(~WqPK F|$>y;<edu/harvard/hul/ois/jhove/module/html/HtmlSpecialToken.classPMK@mTh+zX E(ࡠ"x5YM"1?%mE\7v|}p] m.=wt߳g0o3JZp%E-NZW|p2a#QԢyT)Ǐmy5edu/harvard/hul/ois/jhove/module/html/HtmlStack.classUWU^f )PV!PǖJX)Ť&P şCI& ?ѭɢң k)R,}ywL~_\cowyW'3W8vMci}6)\:r)q͇+h(jXHUeߨʚi7͊mXmVUu|snHͪ4+Aj,Yks/_&Ugդ/v$%)b6qũ;AV@IPùNYiS\SnW.fn!DR(VNj,YUa \LnƗW&9ºaUfϩ_^-@/=gwMwfwզ-}" 񢁗|%|b6 °6$`<a0%. %3_c7B)3%L l@X_3pfߑv=MP~gG#Ɡ\b~^\]ZX} Q.ZDŽNy35ՠ2Q}a][pܦO/ojVPH:mt'TF0 .KëQ]14ZxB?yЏހ${v' >y#MѱDf1b{3畽kM'2[Pgq.iXf| e2Dbʨm$yd7v! !!!GIbÈs8z$^?}EQT4);;Zm!PѫY o_*LQNJ3 W/"6wܯKGl]B-#<7edu/harvard/hul/ois/jhove/module/html/HtmlTagDesc.classViw~Fhl2J@Hr&18v[u,Mmь KЦ{% 6jS=}RZBO@R{gc9X}ysי="N̆z04 a"yE0y ~ޔaтjap)˸ë2>-3!|5|^e|)vTy/8_e<|C7HV\fT^+NFQzFLG+UZ2|WorVohiFQV-#0L02YJEB`l藳jN:w P$z1K&#}gfOZ4ӦZ)< ҍC<qg{xl6""eUK'sE:&Hl=񵆬]8O{K9"4biًZyT<; '뼴\a) [}k5L(ڤp @ yayb˥\@Wl@USZeFR|d ӥ=U(y=5m~HI,fem^( XqHKrҏd)(-rUTjtkT{R,fʹݓ('( >iR8tIhɥ y?&/>j0MY.˿Խf^LN^m # Sc/9FVD'8כW+Ufkw8?z|ר?{ ~k ~Q>)xg\ _kLޢ˖Qc?OeLqSG#zO; ]- +x K jPkF;lo*K'/YsӖ^ѬR.V%VitIj&ͱzK7״G [=# hxsoi5sHLŢ-V3ru=jזY-KK2Yv~٭ S:Fx EjN+!ɇm^mv=#e=khEH13#Gh+dSrMUNz_ sI!Y |E– WRC%[RT$W}vO׭?J3~n}~lV;4HN AAA`lx0P i]8H-#*E+= hCsnM~ggL ;edu/harvard/hul/ois/jhove/module/html/HtmlTempTagDesc.classPMK@}~!x<(/` !dif6|?EP?JT"=7̼7`cE9V*Oۭp,kEtk_iKO9!حvD]1#B@2x"cTg$J>JKLgþ,v&bfzт WJPew]]Xd]52a5ɮ2ٷmgPO:la!,V4 A8+s PK F|$>{7edu/harvard/hul/ois/jhove/module/html/JHAttribute.classRMo@}qn#-Phivku)Br!( VFĊJpH$H8rGG5$μ7wvq/yܗ'a_I, 840Pa((rp%t#W dJ ɲ QoFA ~ ; zT*%VZT{<7gB4O}H^\SrLk`^H%ϑ{9-SJvִHxαsacK±*ۜ rp\? ܨ3p~4^J^zyFS_ɯ]L"e1thRSJ̊U9Ic&kpNEGFGPbjiXeẂV:yQcdFڇ#hvIAK91 L';\q=ZhS?_ .oԐ3pǘoa3LVt EߞIkSL0=?ݙtnBPK F|$>= 26edu/harvard/hul/ois/jhove/module/html/JHCloseTag.classPJ@=6McS b7ER(n`$edRK((q]ٍspzp[hPE;N]="b!'hϗlŨ`GoUDބzD 8S:5Y_tquSwG]vLac5{ǀ)YbKTP$ttSBAB&yKC)KͿԕGOYsDHfŃi@;jju;Eg%YkuukCǾs✼ 3T^% M4~)B 01PK F|$>^A)ҭ5edu/harvard/hul/ois/jhove/module/html/JHComment.class;o>#n.fvvvNF6̼;FU IJDҒ}k?'1/]?(3/Z39?%A?5T?#,(E?4G??X?+#,U?7?4'U?$7G9?7759 cPd`zHyBPq6- *PK F|$>D~5edu/harvard/hul/ois/jhove/module/html/JHDoctype.classPJ@}mY4QxтHϽJpeӕfGC)={3p!!z؏p0yPѿ<ՅRRuVg\ycyiJI\ׄyɊ8 'og+a8϶uUW)yZsTe5羰|݁psD‰|%/l"(aOPرqz J?`q4m@?}GڔPK F|$>105edu/harvard/hul/ois/jhove/module/html/JHElement.classmRMo@}|iƁRZ(ʥDT=RxI:N?{/@BGH@;PY73oۯ t,eqid+fb) z kᦆ[ ^g5=%CAa[뉖;1t(kn7;cB]bD$47f=dor̰6l+vwta*,Ct:ߗNNk5qlXg EM#z'X{ÉzR'mzr }lݗrNGd$la0N2L7$\ߑv^2!s6YzlU^.^!EdQ YBPY_(x..Y 9vB#vqaV0j=o8|09qi>FzgHn'VQ[>B>7k$n<ƞ_! Y[LN5ɗ?c"C_`ߩ/~PK F|$>4 6:edu/harvard/hul/ois/jhove/module/html/JHErrorElement.classRnP=vbq^%Zn@ @QQ|I\D?+H*QN*B~8sϯ=.͠Hjat$ܔpKm F;Yubx<  *f;gI SqG!oY^&vOFGeϨv&)ú~wt>C?&_^#~%Nz 8gaN<tjptblk'IZĖ;3<89J~(x7ByAH9?sIԲV-j YĒ3L䭓[ٟS5ޠ>tݰ E*CoO2yk/]uc0gsBuV!#ȇal$}&D}P:DCqG"ێ`GT\uO05 \U~PK G|$>& 5edu/harvard/hul/ois/jhove/module/html/JHOpenTag.classW |fv Q) Q`lBIB+a;lOzZja[$b/^BMߛ&A/<X*UkTb#^xx#o| >"Q1r*>O$>ý<|>#Y(8(9/aDE,G^|_`|Cly|Y+_8.pB:|M|] 0ywYͣ |_?ݏ P ޔ4%;!)abMV&5,Z ZfVBueЊ':YD0fʒÌ6!#mL4٦!)&̦~+hjLj5Pkf2Lf#ECa RȫhMϪx*nn=0#ZIܚy "k>WVpQsyȖ'eyݒrBB:mg)Ю$qxȤ#VќiQ2WUv[FdW1JDzw>KAt$■俈ZoZt^_QG3"N@:e&͈JEŖ*F?+; 9 OR8,C2t26:ζ;X$[/ѯi؄~Wh5/zWV\'aV L17^-' S$F^Kx5/*ɘt`4Oֱ6л;d4pqdC!3{>Ր4O>ϗ.߲CNlȤ̌DpF($;蔆)vZZ)m/= p4ȩs&IK*$Ylef"t*$XII)ezp9}wM Zc d׀w75D/Ek23&s'f^i(kzRYn3jdxfQb0IXuvPL섊շӌXv .(+q)70Tʞ+#dQd$h3Jn|= gAJwQcj\ˤd5ՋϞ=xB:vQv{ $7qF]6PѼZ2qt{$<_.A?OWU衜/8ܾI]W'Bw88MZ";]Lu$:{ַmU<ۖ` `׫^Z"j5PH+#.nq>wqy6qRq;ӹ%Ð p"89P#qƒ8ʶpD' zFq7@-9uI!0/ zu-ahnEuntoyBenbC . c>L}t rE)r,c1R-|@GQ>VuQ}f}VV5gP_X~6'ٺx&l.tI7< QOHx;GiU{zG07I=~Oë Jcy\UϫA(^7 #.S51Q\Zr8/t8}-"o/"SI1)4>d MS"tCN;7kpѯ_/m,5(g o8QOY\ BSܺ%Hm" /w&: scw1\ )p9\n[dINBW)V7#LH٩_U͉[\vmŴ5i{e)m9in}'im/͍=\2P-$k35PK F|$>} 4edu/harvard/hul/ois/jhove/module/html/JHPCData.classVwU6ɛZ4 &!-X!E0m j$dd&/uAq ]p5~r~?rAoRZǜͻ{g_GbA9la;! :}X.񰂝rޥ . ap*MDBj+Wa。 wI KBGƓrHYG䐑C>ɑ8 a Ϩ6ELDmXV260HQs\0`Sz٥ !ӥHV4;ɖH(FF1=˧KɊEàR:nA`.49{BBK:Gq(*"*cT<1qxnxQ\!L]8qK^eXK&m!ٶ6!$°n RLp5lo7񖊷qPUqɃNH0FTcI8S*> gP_8U|o9S=~ (KOu0ÆҶ{UjD6n[+VB0̟^A\&+F60W!]&{NEHMâȳ8NRΪ\"_`l\.zh&ZU.if%x䨞"/0z1(E]LnI2:MZ:iJikn^# &;nS!j@WFn#fC җ, Bi^Ph)-*dֲZčAlfpݻOWI~FC2~f6_u8S'.a<F%,bxҀdpE<q;W\~ol*jz ^:NN+Sr!5edu/harvard/hul/ois/jhove/module/html/JHXmlDecl.class;o>#..fvvvNF6̼;Fa IJDҒ}k0FTVFԔRĢĢbTҜT}/t0(20@HyB@q& ͦq#XPK F|$>PJ :edu/harvard/hul/ois/jhove/module/html/ParseException.classU{sUfݤRR!IX< HE@V`ܦnE|(⃂(?f`d ~)l蔝=9sv6|`oe~9(!AyU䈌 K5& )8@`)A҂ )ȈaaUpB()U`0X#8)GAA+PpJ 4RpF-,䨌weǠyNӰrLaPSsCk7Oú5[p!4vİ9Ɠfag4t71qvxnb:B5g8òF&XY#C>n(rY#ley(tP1Hf2EK(R(Nm7uRuH?渌2gcNyQrbv2O<[wMA؊UYlR[k]Ͱ; \[*cB DU$Lg2 -7aT|*|*>A_KTEН@<2sQ_<!>{AItPM1H^pCCܢT|o*Eob2$%H - Щ#8ꤐT\Ƥ°aqʹOlk=C~ Gԁ,3-gac>ZTg<74׋bN#| .dg Ln`ht^k6 Fv*ST"t2^pꇺHW|8`VF:>!#sw;wɣ]SZ2DwiP|tTF h|h Ƹ迆飀PtU>^0Y4o" 뢱³Qr$#: 22ƺ}[|[IuFlUkBҿMTCMlKH!)F,v=]UJ'&[ӊ#V ղ{8>P|*2!\kI4.cUN$k++U xěœSRzGd1gRk(4DZ8P5~@sOM-5 1)NJk@4ju20oTho>7edu/harvard/hul/ois/jhove/module/html/ParseHtml$1.classLQ 0K9w?lWA?DPǺѵn;CO`BBB F!GX;^x4^K*f4ɒ"Lדe2`BSJJsVQլ*s3 П.f!"2IEķPK F|$>ܳ=edu/harvard/hul/ois/jhove/module/html/ParseHtml$JJCalls.classKJAJ2G/.T7A nfc q:<@\ .<@%V@mE/?\ B!-p&rڨ\VTQUUW-y6U^ύz^^ A0&,xB<]b,/yhEᤰE}-V'bT)V}`¨ԭVFL=,?p|'0"r vK& Yt[Npz6$G=9pPK F|$>!OhFedu/harvard/hul/ois/jhove/module/html/ParseHtml$LookaheadSuccess.classPJ1}6emyzE)B)( &'GSP̼73̼O8A!E.p*PzweUd& BXU&,Ddet- ZI_F1ru팴O*DvEO`Lo۾UYs٘;V5J:Ue>f$Ȗ=b)S^'`{Vw$o'GtG/@>\ qPK F|$>6/5edu/harvard/hul/ois/jhove/module/html/ParseHtml.classY `Tՙ̝M2L`@0I$$%Ja\d&LľwZヶ$jڇjkvmEsu{CݫYc jsr:@~˽i슅) `5m'К4ev[oق1Շ C 1׶&Kokwt0 ו4Aece-)!+XZ݂j2A5qM` W}05%%S sc)`vSï񂯇̵H8"h! rІ'(/D4*Y A_E.M!􇺫6 Cl,f23Ѡ JG^݉宕5,hǖkՉJM$Q95QY,KT[~e/[n-;OK֖%XNMv-OR}KlIKD:QI\,=zcuN-Р`L"7 |rT %nƾ]VXu `L?%c'фɩk.4U@*tAvHf3%dJ؏ 7b\3Ĺ3w! zcz{B@Կ uzWPzҠ fx;zǠ[V&tmnn oA?59A?02=Ccn>IO!c} "}7O'z[0vM9 C|V| m+K&ls+J.C|*!@_HLG7WG0- Ӌ=^P4-Ig,2Ŗ)7S:nnio7Dt(ݴ翕mSQ8r>nП鏂Nm1yʌmg[!7Ћ3,E+L2}ŠۘAd{2m_3WɛL^gyk?g+&dr;髂}£A_{ CP>A3h^:'1> 3CtǑ9T>mһ ?x͵J3/A7fqn_Cb6Ľ0#3^uCyxyN<(xHPN2朶 qṪdKVk?X8a/yـR,qP Mq44L` Zd8OsێS̤ǚiφ[~`woǥӎv]8Vx6#f'*fp<1ou0E{@(g*ǾkqwL:! x1#4n]$FA6>X,M:ey,m|m}*72TnS(J7vKߣS|صd,6ްdj?,K0#(>($ɮoMu F>Dm}#䈓Gx gzov<`rA8xarmG(kcbrAߔٹfdӷ@xp`r◄! SvS~nV3G5sf7TjLEiЧcq;5 Lx!|csނZfa1Q8@{]V=SABm% r67NTa㝫'1Lj5obH,fǩ+kjLV8>"aXتA/lx1+yAZ6bg҂QIf6Y(L#GTq^J&Zl< Z9]gboMKB'ӕ!aMݤkq+}ZWI%;Y+Ԟ/|je5&dYsPu&dXӿ O!RH$!sRH)$$q#qHSH)$$q#IHRH=D?n$?Is +ĕD:n$?K"F!Y5!O{<)x8LYeT.%T` +97 L<)y*T 1m>o>ϗU`zr5s?H${b?3jgr_|bo{R1&Cc UrhZ6k. |39T<'bE 7Lքܭp=!prAp '(U6v=3Z4)mis2ѽ[\L|3iCAOa^^lke틞݋A(Rn ߾:"(m#NaC=LBADpVTuq7!0(F]]q (aA+}A85ӭjx|]n qH{{$Sap6*.6O~:Sz^WVsYR]jӉ|u/ejb_ŏ5^9*x"v0]:0¹-ɣ8DYGrKn/CY^߀xz k, _r\A4zu +73$\C5Z}){Q\ ^]N}$=r_n`ax~fP:ZR>zab!7G>DCd=$JsZ&X\)zZk,[eyowQ^9ZL*U-S M W^^Js+ePI/+/b&ً[T̯qV!_ۭUzv6Y~^U!%te r·S8]3Bצbq!\>d+qt\ԁs4 oI=>edu/harvard/hul/ois/jhove/module/html/ParseHtmlConstants.classmrF ׉MK-iu\URdF‰[#l,2~L}NZV/s꯿6]zN.>=N8=q N/9Nr9i)tӐӈcNݠ,Y0J#dTOәYĨFmu뚑1ʵ=2qb0\C.\)FQQ2:rfݾv"0[Flݾ*.hiZ wn"Dmۊp{jEFy:-{f{e$ 隝ȵ;/|e,U;Ӓ26-vqUz'<1vmp]9OOF@lr0`}5g6q}< Gz^ \ ;֥*WuhQWY΋ÌPaX/Wv+-/뉶EaU4֠ 2 S6C*(؄&66$K#tYr< ͻqޫCLs:Іgcm2:Վ@; Ɓ6?= v0ۣ`o}eM݌^ U*s-mQk߀5&{P~~Q? 7f>[l'곓O3Qi%Nݗ=N6uawA( }yb^J\rH9ނH;^F,8^Vd3C""͉Eh^-(%Q.ehYX q"@/Uq*A55q&Ϲ.֝2TPK G|$>1~72Aedu/harvard/hul/ois/jhove/module/html/ParseHtmlTokenManager.class: `TՕμL^d& &$A"Iȯ$"L!Ll ~jJ;ƭ!쯵Zڭu~Y=^fﹿss=?{9`]uA@'j*&urx ȣ|D"A & hOP[M3{kh" $gsGA`&YfC`.yIh%(ljK P"I\7HX?ASReegO Rql-bbKhRNpTv.qC+[*XK^27[Ū]jXVS.g+P ]Kuƚ4h!)bPZ 6U*d l"p% "p5-jm6!D&:I,63E4֭.j,>5[c14`?K|s憃rP4*qʮU^cnjCC{BhyK7f/gn6;2p\ދXx73tw7DbPOP\e v#Ho kB+] 9X-3@vH ˛}HGL4F_ ĶjT4;w;w G#˻wDwE;z;bzkGz;Q7ic  "5۷s|@z_oWlGPccl-]tzb##nNm/J "Ζm.BYñ_<@vVݭh8C[k2(IP_['̅XaRqpQ=-A0 D@ vw7♌fDwlDzk爣$ԶktvҰ5a /L S]8^ 2"&ORA(rt8 'It,I#si[fniJL҉dimXa0`.N(sQ4P9WLxE)BbOYV2XZV~ &qNx>4!|`$?7e6ƙbQUTHPO<"~yU xeE?z;v pg>3h:}Vg#Óa>/VnESjIq} )h<guvOWiC~g#_x;^"#S7c{h}vc.a2b+\Ktquu0oRmkϰQֶaC4[\l3DœmnlkBRYuMX:|,?so _-BIhHq$ ֢B1ŒI Ɇ4tv:#Xm #3:Z(0kcsd1,'ʹ0oXD!曖d2SZ\U LXKȨc ߗ.eARyHL3uB{ 8 8B|Iu-HD\ħ _P?a>YmC|&H޾biѶ^~˚+<9/ 9(T>h8pA⤌D+;q Jm+Fi2i..RO5 ;>Փ}dh2m!CYJY $ܑ`W8jg_ Ѿ1/g }WBvrAS?& D9 TNW*PqT_A3O'?sYyi]3q+?/CyNL`j-.)mmNLy&Y97u9ӆa _[4ȱ3Ur܂*|9J} I1ck\w 1J*9 &$+;0K1ccr)":IlwI+[p'H-IRHI!s)d)&KAB(F.Fq^#"4M>NIfF"$wa;@IMGIO66K; 2rc;\,`8faX[W_(Y&ǟD5SȣB/r~U_&fm4H5Y5iӬwmۼ)iV0zm+^cvٯq^_)0rߚ'B{/|f2='(3lGcjjG}6e$ti^A\8 _L ̻]5#>G$y a7IScƴ&H222s33T=#7ca %xvBϸ #`dQp: b~B&"7[v04 O@ͩX|. MdɼbR$l4! !x={Z㉿| G'; .# Ttkt a)X<ahl8'`Jl< 8n9p!<gGCaoU % uXmy5C5Y4o-)1 7}:N>qpdEcɂ}v04hN:MpBy*$sva-X|dȁCXD[1+hnDk(cr)fnLf%N@OS)J-4ڋ(Xʰ܀.,cyk܉$Qw> Qp,zfz UZI K xI'0WJq>]ցC$0CICjvzKv6RLۋ|`ZG8?diOz3{4:N.qR+wW.# 4_)A,}88>a3s8qt!/eA)فFbv$azfY2bzM{'Lܙ$W%.Y)Y*YȔ)(ߪ8rIOs =PvcyC2sVRO;$(:̔$7=OFiv'a=3zjs 4,J JE7ǵ5>FհƜH$SK@(I"̽ b=΃Ù0Ee+o'+ $\Ȧ N Yʤh()K}&#t%,nn *A栬5Ci~S%p(\ Xeh<<<_Dy<@;P"ϝ$K$.\eO9P35C 9: k8jh\4A@'Fn1l9|r "g /#7H^:Ѿ7/ڇ}ePK G|$>2fjz<edu/harvard/hul/ois/jhove/module/html/SimpleCharStream.classV[wW3H8|sETMcvbN rJfbˑ%H @i>4 ,pI/AJ ;C4K.V¿+]-.ފY?Ct0,!ޙq!`]|ao'BUx\,l[(U_1i'۰^&^b(FM{*Pfx\.pSD08cx'TJMZIf? |ť\UUc\&7X2ѩGgUVǻc/xSBbt/ u<ó<{gY xEB OQCT;vGɔ0pqbYR93TLE3|ty)jEW2f1eE +Lr%+j|jaJj㸚/X+Wr9j"*!ة38KT_I+5ז/ EhKd' f-#{rRFe+dl>KMt:Ї~jj@(U W.1>)FKFPO;)3RQqHE-391vь*%'oK#߇ƿUS<戊5! CL״>}9S@P}>!}:I*>d8 8/J[S`g䣁 G ^BKVSL;PARkN>6GcD%pw1vZ4 Ilu~~5j 6ݬQBc1𬅓lQVI*bSNcL8Sݪz3dxqwvɮ:3W./㜷{mr[F"I# 5t/:qihә==_"H{b5v R];U =fuH2_;!?f݋Dɐєw%CKM\E5JDYgw.jKe p=nP>pQg='1xm# ޮ[CU `P8~sw`T=@S@$oQ>9RuFN 5iT-⨷2Wm r@Fp$޻wȬ*Ȫjhf q 6e,:Uj\e8'Me~BO@o)")Y߀.!Po~Bg nS9'D=L[TL$δ2lS:|!t97%"qQJ\Ҷs)T<\Z{%S|YeCL!)r#ǼrLc>9xr9x;2ԁud^ {ԁy1z̘ϞuS_#|ѻ!ISa|na6A=b;нң'Az曡3/Q.PK F|$>TQ1edu/harvard/hul/ois/jhove/module/html/Token.classN@c)PƌqqÊbr:N `bBCC ݰ=sL?>_\(,j6Ҩ[8k2#=b{rt[iP0u3 ffV}nVb@J{(Bx'(=$_-cfxܟa8 x7IMǜX̞aJi_36#sqa6sZ>$獖N,1^ QqpCwPcӻg@wE͚NOXHH2,hݦ]Ȉٓ%3`>b5b/]\?!}DfaWPK G|$> z9edu/harvard/hul/ois/jhove/module/html/TokenMgrError.classUSV=l,Vb4 iH~Ѩ5q.[!Q[iKc~\ɔC/P43 tdܙhf۷v?p _ "`=H>| "+bB-9E1)`*LcSwEޏ8"@ļ" n ""LPhrnѲK CGVgFdn$8v5lwڰfch^̓6[s c뷦G+nqeݞZ&qa!lVN5MQ,jj&Kƚ rte!or򄱚7,\ eGai5yO^2-.`M'xu.SEּC+bUMk?)Ǫ ChvۮY5 -7>B_HxoJkpaca u70$*q6p,efTrJ;Zz쬙Xt]ygٴ'Jf;soJ/Ehv-{壎Q`RCi^!QW{IsdWt}%^!uJz QoE#?(la?a?Q+\"i!܎P1D8O|K_>NN8oҼMc!y 6l`/@֙k xB! MA@"t<&'`[96 f6* >*>*}UԺ*)W%ZRz:{-p"7(%)G%mD4pl8'\4|a5@W@7!<DZ3o 7]@m5al)Xr^P'x 'D/'('6pqό4x6^)"=^VyH;o 'B L2~[ L`_sҸ糫W@|B4Ō cA@DA3/uJ .7"x g;XRƽc<TBb3 Δf7 Qh)p.΢ I"bÈ] ޽z+C #oPq9M3QKķ?_/ß ,~Pz0o3 %s(-ƾS=+["(^HaK{o%5o bnb/hC<IT>6qFeT3H #)w֮I1 PMc48/M/ߟ-vJqs撈#8*܀0Wو)U_UMu.B193 4SY ƛi\'v$7NS -]j}iJH%.+?*2MAe'-P *! HPlUva*yk{<x{09PDXmƱo]S15suB>=5fU+k@["rq#A8,rU}l!\^@Vr!,!Yp(ӧ}8 Ֆ/{aKްHث^g_}S4{AKH]Uz~=Lp#'X|=ԅR{=Eԕ Q;phOoؙ`4{w w ց q0wk)k->E^:`"wڻȡ(r]}rPCwUHi\0ꠣ:tHF鸃6}tF鸃6}tF鸃6}tFxAF;ycADX:)bY$bioX^-X!>@? m}n h9wkV)m}Fˡ[c:k=Z:Hltl;每Վ;L!G}SbBc{Hs B ~7CcEdF0th94fJu>6yاFq[9{ס(n+a:*i+kiROR+(ݛV!r1ѽ9m%ћ+ݛV!r21 J<ħ5%z C<bP?Tx_W4i+2'jمw^94樕J9rhi貕{J9rh貕J9rh[Jߖvhs+_|bOhV䋽y0rQ?PK w8B.A#7edu/harvard/hul/ois/jhove/module/html/xhtml-special.entWko6 6CmI_M .@.iQFRv_KRQ {ι^NߵZhb8D*%jNʹ3"\SE6oSB0kbMtj~1GR9ˋV;tPSH0ˀNgٴ7ݶqg~yX| 89(V# ykcNVLcaѰ{CdB2ZP[a5 zd2EІꕋ 7(+JDAtp2꜅"P(wk4FG(bM#Wƅ!1,lŒmvł[YV4]2ΈL! dLZ( Ivb&IȨ0;Q?H!jem0>93EH¶e"% Z`9gU9hY6ZcD fE%eKpTwAPI@ 63"f ! ]v\q2?X/C %X2ͬ~!n]C&X}~ 0:NRC |ԁ?70}0=+̑1w(q#J\!sO@͹Bb*Y 8B]@748M8yzhg[٨T>sΠӣbzb-uJA*}J%\ AD1 1F9q5`;H Ig L6g8֭XBYqY?6X3m}{;*u_9b>KخQGIU kf7&"iiR ~eA&\%KFCر^. ufMh[W6h0RI+D;AC NJ`sW``Y7J+Zp9&8"،GcxG"4Hopj~x25q|kKU<#KҢ%ia`$ 0 b j `p;CՖ0_\ԤT;{#El8x1M(|{3稑S-偗1iwnV,^ݳHdoW[9'gV9 Mz8:+w7E'޾߈7 ˂8d׵"4B1zAfIa|68 p)-2m[^9xŲ$p3ȟ KdRnl,̃~(frת~a➏PK w8¢ 66edu/harvard/hul/ois/jhove/module/html/xhtml-symbol.ent[[s6~@u;ۺRR[wƒnf;$$bL,Hq~@$adAB?{r~770aYWR<Hx,Bُ=|GPRw=9cTsm p]eBç/q&˛s-}^UoQwB~yu2,(w4_?:%ʨmZ;&S^k)H(Wpxd')G *ye׆"I<ۑkQPyZEZmy(BjN+~f4̷K̾\gTƔh)dP4B Gyudt\v;8`2>,FVa'lp}4}hsFC\v)2o|ȑjO/܀v1塬drHl<InԺu)ؑR0huÄR |[)?ԉ1} ԚZ鑔/p9v%he(ݾ7=R{>.G#Ač'H1qqvzW(G 5@f1e;YGK&dZ <~"n3Msv'rlrYg@Ʋe,v;$+ܺ{' uO~u4o O5랂d.[o@*]3oBk Y%w9μ6=W`O.әy_wKL\N4?XѺ.,7PukVҐѺ njֿXVpjnFF2kѦI+ⲭٖm@ˮ6TbO?/]nȆYmz:uv` WNl'8Xmyu6=:[Û6=:wSpސ=i,\f)AhӧQJ e݌ -[T瓽,srmdچdhM.eLBYos}WAD9+yLhX.2LiFRDuz$\g`ヺY,h׌t.D&q "fIZmıȐz)H|pD yG#&("9[k0qW$YU2eTfU=`FzLXYPdb,Y1[HxfE;G<3@lNCƟP!V"id:O^kf AV#Oy>_g΍F%hvE_^f (HUi!ZL4Ƴ3gQt^wf; *Yt'n$g @]ZM`z AEV>M,]+ pV%dg!ӹ- +fc7YА7#E]$U"|_XÒ<2v_'m_K)^ZٞP)WΓ ۖ/`<>2ըӻbOC i>m#=(sd N |GuHק^=08ewvhf@p UuZlWCo&vQҬ%F|ei eu) X,D 4/_-((P:ͻhv7p^z ИѢ^:tl:0({ dsXEP {8p>уWRjuOH9@6&ٹK7ExWGo647Ozg=o~gDFդPݮm[yVpN7޷01AEwqS^a٨J ;x5iI^<=e4"aqBjBmJߙRozJ::<8^)J%l鵓Qwgd9t'b8j鶃l &\gVt'RfLosӞ^2P=.Se'jԦ4;dU lAκm5o`JuYS¢Ip ¬;=}N֒sj-ns['Y.Yj2X  4B¡S0(u[myO)6`N$VT+?Y}C_2z}>]C.ĸZ8ʊ'jK$XEÝŠ'C62v Hjr 3,-`["ZjOyg{v0eo~AM.֪˦e_/Wf}75~W2$mU:@j;В絵P=MMP!ݒs}j$;/:M%> \̖| Gx } +w&mk:JG4(JsdEȒfL@x@Luń7S: ^_b;ǀtTװOH_>9o5Ȫ$&BhOu;nF>ͩ&W#'?P\oA+ZH!O]K-GG3 8ƙ Ԟ \؀dEtuiW%Jpgm>o /?d 7QXXN{O=3PgCjCw}QW*-^fD t_,.k~zA<_ȻU!K(zMD^һ:K|)Jz ֗׮.?4aI@2dyصg]q%5ߴYEVfU!!ˈ_oYO$QVrMqOnR A3G셄=M t=D4tQ1)PF!̮ b@#`'LȘ4XE"p֡*DWyrU&ݝ%/1{Rhʗ^AVU VuE+F5H_$:|NU˼tȫjM7{]~gxG>;C]OO5"?<ٻ<ӀUO*$54APkC^X`sP10L4^J5:KhLOuЌ0Zh,:~QUZvӠi '+Ae"SX%PhaPDO0|He  Hƚ~A&B384/DQ=?9U{SH;NGq48ab酟űpZy89vI/~v eIF(Yz6GmWd4 Q_H &KXS'{Mii_v>`њ]hne uUV0.p%s57\ CLXU2#W?,bgaP(UN\Ф[ FDC{A"Qǣ> D!z5D l2(]ijE |{ kiîm܂޼*'Rޢ7]@#ہ  dtLĝ]6 rdĝMPl"RB=mێ 'iT3%[\lғ1aM-d,0(@W I6JTuOo@ԐRQ|]RA9X.dps-Z+ .숛n=q޵>Q{.ͻzyPi&z̈́%641ٵۑE 9&*if$60z3^t:]^- +bÄL~Ci;0F Y{]Gy?k!ĈėlX. w._S~ò Jn,L YF'jz-:m@d2 'Nu1&& zGx;0vKhVq5Q֫O MLxhNQI ppG۲0~uyh'rqH4N%dLzֺ;7:\/r $>\Ǐu:~?m :> 45ZEXhCӄ12=T,QDv<؎, .]MvO" ?97J&QIZvD6w f݈Y_&A^ 3t[3IHgj7ϩ`L ÆA#@#< Ct;/aEi* QMFƖ`1g x xN}f+ :AO;C{gxy44DI2!<ҝ³`N=)"2!&>hI} jdU[ %%uG\TEV5hS$R0M,(oJ% +N;f(5&@֑uX|TU@(cyʛo*XcjۑՁw-6rSpe@9S$XL8vmHMX g7U8ީәV=)!t1zU8 -hfC4XiW#{>ihfJ)2JwWAAN?qaA3vQ2$KLe$\Xऒl XΥ0s x}qr~+}MaShiSa=shWga]$F:RCO޼+.y<<}gyt\oN8|'>copn6EQPFOaq!002͒L|$ą2V+EBco+T*^N3h+d:\_zRG\)y f 7EƔ3OvƢ Jb >z7md$smOlLga# )W$aj_῰Bkdk{hDZQ16ž;UK ɄTM,g_\`:XwSۚ~Y|oܡ Z@eߖvn❣1MI C>iYt=׏'"[UJ~KL#c #>w"zagXy}.Ft,ٵ!RTv"`.PyP26K8T ìGxIh#qU]@^p_J+T1T&Tu1*zCT3kf֚p̣Y[3󫑚 LJ Wh*kt΢MJ:ExG(J )"s{+ԍ6 j1ǺTҸ.9`(6tlxu܆ >u|,-#Rq }B PLI2=EG2Bg<)r~?,ށLJFn1<#x<?'|Gh|?S?'>g1-;arY'Cg*uӥMUqeGDL5x]tCqSg޹eTCR(Pﵹ{8\s]QXdT`g9aTZ_˹x*iY@5vaas? %` >kETaH=Z.MSV]a#>F1jUmn;#8q3-S&BF37;WdLx k<ӌɟ??yxc(pVGOHwD`lx$#h٨GU ]k;5I7o0tD^c%jX*t}2.DJ xĕs`ss%DG::Sa,'aDFFXK.M`-{]y/UhWF`ЍP@[3xz`^cq{]Zqv8X6G_iלw|OBladJ.Oq U體1OTzmr\^5զz Vk,OXƮ`ˮS6 ٚOZ+TrC@!K~X}t}ҦڗmB}T_Kܞvl;퐸~ dDXM8O*+􁏭F^ÜJ}p@F|Ui$4L&Q@c{k. UYk?pXVbaYSeNl2v-CE>+‹CB@K]m}]a:%UwW{uL|r\q\ K?dbsZ&xlB5|AOlѧ:b@uΰn,x+^c%&zcmЪ#7?vDc{PJzD`X;T,ᄉ l(4HgCOIo$~r2TeWszXd!_ak F=ރ@u K߶qD\jzpIy*q7BRQ6Rj6zdCE*mS=$-ڲ"`:4ÂOa>L|ăL1THذmT>RbR/zGL'ib%$~QJUa,lSXy1)m(}<|,\}i}$ʯU0Xc?&ƒ1G U Uqq!͋QF>NS f7bVc)=&Ϻmdglo(lrzgWz QHg _G;&)4Vȗ߈T6ӭ1OC#H.<=/*]MWaquqx,L@8{ƫ Q+GF$^2At;RK|>p*PlHŭU)+ayBFn+PyνmD2LyƟЏQѵz o.hE3.Iar*(˜n,OFdKd^qb8*]PD6B݌j,Κa܃Î|Uy_*m ,j#]t~|J!ė,@~%,>R\J`8]I^YnPx鈀;)aMPz5Mq y蕹!_M`N=HÓWK+ҺN =Ww* jhG(]iÖO(mM[u4b $h6AG>7)UldܗK>)^s*p~e.VyPo /G6Qd_SV\eԋ݀7y2 ƔI{+scKhԈYIT5"w"3 K*I[z P)9x2B6lX2q9_ݫ)}oft'Uɇ1Kiot& 3}3GIr*L}[ߛDvݞw2BאAۚ}R{̂91sq/GdQi;=[<'ͷJ\hzNTyzFvPog|:rIqi,oaև~SOV~G!u/f8rƜ\(|7f|NaU^B |!ָX[(nooܽHrna7yVTU,E\ 킕T>ԞNdٞ vv櫍Ȥ'1rW1(woOhqFJk5U;ћ \Mjq|~r]Swb7Y\VivG,oAU= ?.;}AD*HdֺV_k({gjFww/pQFdAF]Ԟ~N hԖhYCLr_˷dEDC,!?15*wJMq`qv&*Ll^:̼je3L4_UdHٷ&ϟ5\㖀VM]'&D_|m4ЄyhMnςi՚q\MBdI7سΉ&8Wa7;Mۮ)5t9ǛFPuN }&ܣTIewө.hZG;"NK<~ @'S SO"Nn&GL6wF\}Q-^Ozತ:!MMcYK`ЙeCb`A&M BM6r0 lEgNWNatnv U]i,6^l7jq2z8-Nc\vϼJ;U6T[nq}-DzP|A)gy cPD͗ 'N*F㞾H Cc+ct>3Ȕy@י٬2YCg 7 v+CK}v黽7{qvABLc)nukT$"YFAmc}:un#ckf=l(j Tgoبn2I[PW-IeW_N3r}#u= 0IϞOcL95"B״}!y]8aь2啞@@8F _`/B[m*6kiO|c|la+Q6}o^0|Ndo4.fYT*ͭ;fdo#jYkW,NÀ?,["Af6G"xS]y^*ZFh}lot[:E7>"πM,:[\*eS<0}u^fSi*M%ƥxXOMtu""-&>t! ӇZf6ʌR|5eAkjhM+_])o¢x(R*)_k|RºE?vS\K ̞T'}6NoӒ.FvHxєGMй`5HS QblG9J /i}ͣDD%Rٷ-y{ w @emDž}7 k? dk€n6ZZ!ۆj۶L= _SPJ 9b-mb* ^%ew.2 _}Bx [Xr{_L%`L,;H'Do#F ;>mjM,эVƦ1@yt2W!79qݸwCh=̨ ԥ3//5#ruDbcP1؎@Ѻ3;9CĨY@Wb+pՇM ~Wf6ފ%Nٸڰwox?JA4l#mE =yTϳ7b~~=3tM^繸&nez,ZD50ٕʲQ7JbqO,w7<]]_oa%1 qr(&Nrrr!B`$3RD`8m҈U8/==;0⻓'N>O|z{xptǃ?}ě,⤁(JYR%G(>t$Qyܜ. =4`AFQҘ31C-ƳA?}ޞ'V2Q1@?~tyU"H kT왕7=\߯ޜ~ ULU,x9C 7O<b:+Er4ntX&?FdNU0Dq,XY i4w6R)0207 gO^Sτ@]9jZ&K8.Aĺĸ* ϻڰ нG9uBǃKX +jt5rdRA{ܩtC<Ͼ̧J#V{ҌQEh٦ 籘_į(f~!Vɓ4msy-Z_˻Pu A &ɐMr<6Y.,к,JIP, Dn7j'b8{%[9@ Q2["[q˥ !Yft4jZXx1Qj("WYj}Rr&Jr]~ʛ7\WNX#0`qğe)7pQaKՎ7A =: $\(UO5><ڀ%֥THu ;:H x#?${~rlBˍ\*8 9z3?w/}ѥY B9js.ó.#p pCbYY48W/T$+cd'71  B2&wE651g -RU921\(>)庩j`<}vJOo|M| ykVIτ!+M\Ф ^˔@En^c(4 )-Hh#D ^"kwAݵRxoBCF&z݈`xߋJv={vsFv4LaɑȟCv y2>vn"R&VCь= 'iT;%@xL=kʚpgKp1PnIB媹w1jxTa+]+R5` 3XG%&=QKY|mj{fZG>݇?qϧ] [DKC3%&Cg!j^ ,waD6pipzQ-Z,R o$QC?U,EC6j;{-<7Ye(!J }d=O HǕ<8lwWU aztp"[t[hٓBɱ~k3@"D-Rd+΂ Մp6T/%ɮ83z3LZxDF:<7dL~8Yӯw/9nL&cX(;fOٳm|}^D+Yi'ͻ4E mt C5 j G(ᇆ$dEn uNq/?[T|!fDnD 06 8+zstkjUZ1 /E\ݩߛl2in&E)|anC [@? ㄻ$+f84Ֆ(&P3֟3Rc0d'0"5KbOw(4?pEٖrzקZB;8D]3rJxdóx=HZ|3]y:#-H87a9nsf 0ֳ>|0G-!>qe~}6=H`]L3Ww+~ cfO&}9 3sվ]Zv7~GEŠm喦n[&bu˾'zP:,h p6A'nT2/.)_q@,n/xqy^`zpĻclso>Dxx)DYR`|1U\Q:"4-u獨3S |{Όb&Xp`r޽BK;,*-m _֊vq1VtzXhA4={f GFmTdn]%TH{1/\ꝍ`"K%f(, zjuL3پ(=EFvBy]:fKv\CilZnBkIcLܲWٸL]+n)XGOGX'+^|W[K)@l5^Km` 5;Ec;p{= 7zp{}nF/^%GϹ?SIMB\M)[!q?4P$xe!:Q1aG=A$UQG Ȫa D6Mt]&8i@&i`Xi:vT#䠕?*uA䢃2F+*]%խjfh= n,}|A*kUJ GXv[n_E}b>Kv>ǵi ϭRN(Ww=o7'BVݽF {y :9uԜvM &вl GԃM 3 3+.*ժgκFՔþ ܌#M^16~x+8FegA~; ({`u2ۿ}y *p qmW &YJYT<2S2`|=.:Q9/xIEUK"ʥQT hI.M098kDۢcD;~AΕ} ,8lA)9V ;;(kz҄G?j0Bp<&1NYVu2DrUym@%lx>e, D"!b-pWp`!L_k]H4^KWbC"Hm' Ȃ2]xo 8p SyBA) "3/zx,x/C$._~dk4xdB=1AАWC+Y@FvjzI pP*b1DyBf V Q咒sC$*Umqi B=d[3h|cSgkuÕyMn*p7h+ev*!` tԺ5#p6x0X\'](pB&[RݞUS7h78 jd:H8~A`\Q'[A: 5IQc:Xtdw/g-=ƹأ WIGsG>5tn=C܀$,6. ~6x +CNn#K!o:\9`4(NLh\6s>֭cik .M7k:A1@o)2E|¨g2F/}<ܪyZķӭ﨨Q:>&8kbCP$O/R{nU!;BХÖqސ("WO[ q*fXJJVxt_( {¿!p11jUocHaSem=l*C!5t,/$<}[{^\r`=9&U6yj$is$' [n.[dL87,sfL\̮V: Œ}Z廹=쑩YZ9\ cYil=tT7(SFr\ pt,89 ?|qaWx^bp鎼ڗ&˗jUN<°X1oI"uJIbo;|hGXF*'KlWnM9e pF18Jf9BBUN7BB5/HTi>°V(L쏁QѓM$i Й~ݝ۪6Vf$TP - $u%VI?M151tr汊q'qC&<*6dg`h*@}?ϟ= %ubLw"&x-ad0LT2\Jm;#&fkOQƍ08`ąg6A`>w^DEn3n/+ܬ甏ܼ LwzuׁHw=da\9\?oZG9M-;n[rۦ"ŴkSc{YRxE /v aJU^v^*ق+]GyL%Kͳ*ra)oPODŽ\^W;LqTx(ߖW^8M0M<4wa!'4~SAx_gNYb0ǗZz)/~KEDVna6üRͳz[-3xu^q[6Pcb*޸[te@BܰPg]ȗsJЅ63-0xsU$]0 L\>ԍ&)_8ҖC)]NƢTz.^`\dW^ ~}˯ | EǑlpƈ<ۼsyl8Ym?!V7[3On#ߟs+F%տ_޺ݶ#4z- AR5bh9CBۃˌhi_u!z:CSxh DG067өo" nyNB77΀X\+'t&6i/PwU{~˻.zhs\ ߬j PA kk E=E4B0mfӨ<ɷ6ug,",*KZ_}`5ú(Q.%@۪|]QueUǎNyUvs}&:?oOg*Aa߬0Sx A:X3RkĐ n[cMKVՋ @]>9kuwq^!XRt ՄF Yu! (mzT)|>(=kY jW}V$Dqzf͇J:XJwxw.gM9le"oD|I6]3Nz8je)OPɧDo/({8cG2>q\%IKV4һ2ḥ0hEga 9hԻf ;DZTKL0in!aYdWs m ә]6S.c; <m\jxpB1&kН AH'̓PK w8n&o}=edu/harvard/hul/ois/jhove/module/html/xhtml1-transitional.dtd=kw۸_iF$$=Μ~HHDC ~} HIa="/..:8Bݕ2-<FRq|H\*c=lpBe,E n /B."˱UR"(3jB2 \R!u(A(K,_GwqJ<Ţ{.T ]f* )_x__rcj&[jbN~~ѣoOވT]^M_&Sl*I%6)ĥ,d~#CQO̙XeQɴT %#1) ׫볷5L^ <dtptt!_h+tttnM4і"A8hDR(ѱ==; JGG=~"?y{#֏xy(TTGY*X6]ϮcIPAzJ\z",Ih!t>޾x駸_ͳdkOWR8ܾ U; 4G'UuY^;&_-&KA~k)FoN_]ށ*]T Jx9E1ǏUfUpP5Ҝ b!KefSJYp>Ks!_|E0^ @DlE93?L| D",dB<>|;.wjERRuO}@a0tнE9ECǃsXs.;SJuCV 3+I'b?ѳ2su?tץeyVm+RJQbv_+#4 yeAFiyȫXzwg/EAoZU MP7 p,Nu/kϾ#%"6wYV2DZI[ k]n*)U/b8uL{.A..rw)% rL45VRV8UUn 36DnYr"MFm5Qp=Sh^Al׉ DJUItL2[oV*yVjE!#Q͚#K E(.zB|syO_q,MTZ.5H5 y>U&IvkiA$ֆwͽt?gKXP10?T9,4^K05* hLUP0h=$S),s5T͡!꾠n *\>,RE( +|x T}@$( 57@"620(XP$!hp0 ?S|3{bvvꒌnR ?z8iBY IfQi,@e04 *1Þ P>-hrJ^f&dE{lhc6ߵABVRY_Ӟnu*KRJC 5Nd qC<~M%c>jz(<0 tde%=Ȥ혭Tj,"OCkuҋZLC`a&+8sHSV 'NQ:uN#dƺ=w"Q|o'&a?k9>3.ZEX*oBzY~2f("$,f$֢Q3;#*q4uc xIT5z>Ü&1x}ע~s儽ܨ5%'$gcKĈ }=\;A@ͰV C;o~>Fi* QMOj@LYLY"33o,ꂎ(5~QҒ0Qҫ6E[8_nHw ς) '?APk=x(m6nu;8aqUUXV| 1HP%`6: ЯγJꩼ8{ )0(8YYt?Abv/[% I'엳S?[?l֗~rzyjyCKY2`Zikz(}-6Զ+pb@SӘE8j".@ a)Ђ2xNgZ֌DŽx1ŸU|62k-袙`^= rzxKB쮃œyRa3vV"Ϊ$s8$T( mR _cSΕ+s xCqv+{Mashi6S^9naSc{O,p󷸆p->W˅yܿ|%'Ix^H:7'ؚ8|%>|Pl? 5A]쒃a, ~dzJ0,Zzsv\Pr'G[. aZfY2Bƒ4ogHAwDF.6Ԍ307*f@PNLa2Yc3DkdwǹL^ =a\t|¨(݆3&XcUc)^"fIA)4#/}i5vIV H?]K# Z ԩsX-H8i!G\rD=X[;Hl|X{TGe0?u uڝa )iJbcjlCC n!ΕMa0dm]j/nBl۔:g<΢l`6P@~#9QdL9[wژAh=|FNd.k&&:lޏ7&5+D*U}.d7*TsI A%^4UA#<&۔1b[3k6?>̃uPeH_0K˨Y'=#ht$/b~()*m0zgk ܷmx؏`O Fԏ`?03?g_>/;.)0Sp6 խk8RE)>Wu..llqPq&߻ɨ+d7&}*KPJ TI;ysװ9~Sx*L!;hQ$sk@&j*^OśPYO*p鏪agiv633cXvz x%]Uң&=ݺҁ)ЈPN06AšNa|afY1!Lal ˼wYf4+1&qVXHȒj2ӳgo^]Np,Khiw|"bCn y2:Pw8t㡃9տL%<n/n+Q}MkVAļ9on>W To6|c _u LjiurCMQzٍjs &|rejͨ~ eg)=ѩ~š|d0JtsTpG ,gObdb 4l!a-S@fdՋ5L4,DtdN"9F1 ǣ!d[&4D5]›P; ą7ߖKe\VJ0r .U8O K c~LtPCCKҌsfGY=( S9rT[d / a!~ j;Z*9)kV)|kw>rR-A#I]K1?Ǔw&2F4KAAQop$ B^k9\w=L+B,`} i=ރ;@E-ak&"n"w6qV9V+rqKe=$H'֬wȂM%S$-[3D,T0Oa>L\sA_p]$lXD&_j(Z6mt&jEy?ew "Ve [Tk^L3 4P^.yD>)s,]jtZK>؏I઺x*n"x%xBeg2n'yyz *7Ӧh#jXf[7Z:[ ޶قP/=Ji0O@^xxAeBmr_yL~#N][miOׂS0r5Srtu*مmUyk0^%(Ԍn03eAI<`O5t3\TpQ =h:PI}e!)qX-˨ӭݢzS#;ajH z31*3@~ mPt*Ah < /TiA kV``k&2u1 MTm+ :ìlj=x8M3/`F< U BeEw8xO.O)"8û8û] ہrR )v׋7QelG{'LmUҎzrS$Bn.r%M`jK&R7aStxl V_;@QW&Q؅2 sYxy!Fȶs65՜ս*,_%(^ ƌ.)\~6p]>n?x0?ڰX7SdD*wdfnNڴ~cӉZ;,Y }2xVf{vk~pԞ`Π~gL]b񸫎X}dA|(؇6+脕Y>l6O{;_/1,of5ܘ?LPoJݫ$Rs'nv`5)W-Ucy;C6}4a؛uVB| V 2 q۲lGTW U52n+U2WsUv( fQOP&=iREs Yҙu!Z_\ ޿;t] VLmMY^{԰˭ڵUVW+Z=*i([xyI,ON΃HetOFjK:"5%;}}㏺q02?ڶcs{7[!tl#QnD-w;hvR1Hh@|EV!2:P¨N-03Ԓ{fg˜}[ʪA6k3e$uIԆok|oYe<=n00k.-E61:l2w ^f$Z/-YB*Vu6+$H 6txW%p4?ƙ !ntM|56f41H'nS5Y>l٭q :,̕ kʺ-a sH1k >bD.ev:vigRoL7qM 8܉+j[\eIuB4 4͡ &+ܭ5Ȅa[ [nrX ]th"ZqJWtm.kuvC_߼5˖ج"605=Mtdq 1aqCV.yƑElq}5M|P"Mvlem^5 ʟ\5tsvv}ΩhVAp :>p(bt6+oP> ?xD>Lgyn**BN "&I.M){¾Z\ZOSTU4TVr(A(YhӅPkLnja}fذ+3B ]ǯAڛ]6-|5mtL| 6=nR`ؓہOYJFeI׽ 4fHx'Mк`1H)u1]!Wa5NX"L)[m薬<|L7PiqaZg{w,ښ0ti0̐mCLUC&|/)|,hT1Wt~1DVW`{Qus \Df|DjƢAֺйD A&zD o'HOhKt㩕)< 3mF)m{mc7\Z>@uAPx%fX޼7( *F4ôų9mB1~hЭX!Zajc_6U>Z^{fRiW>{96I^VkfId'I>3YS}kZ^PK w8C+AgBV6edu/harvard/hul/ois/jhove/module/html/xhtml11-flat.dtdܺ Gv"m[IVD;~7MH͘MId=UW,ڻ'&BPP(ln&[w/? WNr4Yx(:iVf(ك 8ɛ?m$iR΋ͫ2.j6P42^'YҖ%(|T/73Q_uZϒWiy9O/E:{,[T:γgO7wVu%3UJTuϧ {:mt<7mlڼ(Ɠ*˛ S!T"ɄQBU8T2-~:ȫS_ۛ[qQ$q lD}%2MwMlH0 $f~qedyo9MXP *,-o2ɪ|*VN`oټUy;`B@FӲL`fÈ6Y]]3@#m tT] XQYX—ZYZr6A!7@\4[5,IUd@d~QAŬ!AsCȥqz&y5#YK 5W쥁hOFh8s_߯P|ނiTDy-?U3yf*\W ן^w?L2m'f|,mTY|HAL TCF +"F^FV9@FUn,Q͟?qgogo>{PniZ&Z>}Ҙ}z A#Lc5i?___o]mU ML_S?m8 bM12*e\I3 K\_q^j)Ölx7oߟX;45K-D'WN꫼iS:-F m-JKJ|MaE/j5ōUY^q[$%4-ޞ|31h "MOIZ%`? uڟ̒H!C$>xu~˓kLY8ԜK?hqTeM(nglG5-@#QY15gy;CE( $4Ui™E.WJR"E 3ԧV4&[yRfLλГZ0*##l΂xc@ɫOg? _/c-~r?OzGw/30l$8V*g84ǍJ[$J(iA}Yzh:JZM". fU›(7k–hx)|.(@{?Z "!E^C{ůeTdyY4.ԩ%W H H)eO:{ >(~u2MZ.Zb{)6JbgD߻ՄlEow[q܊7ϏKx#l{@;@\֊qp˒ԒP~gqXa=A<(1BVU0ikV{mU4H\'Pm%9ˑ@݂9(p:=*SO9qI3y&}'U-m|K FI#e'kYqwN@].؇Ԭ+]>Qjj#T3 8Dai(7z-ɦضG溌O$naɫ3T/PQ-:(_-:ݩ#ͽ /1WHɇsm4χE5uȩeG@Je%7I)V+)*1!! xlw nqC~Rx_6 }RYwE/42nAәC;|^9/˪7W3kc5HS6eSM DTS%xV !/pZ-ڸ]У:na~W ̩ޛ?}F7|/zⴂӳ3{1Ù6g\T q*w{ ǔՕ:NNJn8(.ΚҾL׼ia%eu]n9-U }aGV[ҙ%Ї?#^á0 xj \diክoO܅d:2NOAh8> W$$j_~GτE|@qa4GO!x V`,{ \W+۹]X~=;ngQ̍)k_qرk;t;i_;a{̞k-[μtLbO{a'/z!ꦖn`m *C\` gq3ak 5Qw5(H\:Ary ^m&٭`W%:03*yr^9rù4*sEy4k#U[ ` ~Wư3kr{&y$.6o?e[4E 0ֹ%yRgU=3=;p AҘWRyy&БxD& Y`L @>GZX7]6a\XDc7TD ڌl2,ћώFoHXo_}]$u 7f6eQ\,i/]R}hK;UQh<0ݲ?G  K- !Cb72_#0 R]Hm* y) I:VLدؔ H"\|8w+44OXhjvY."ʰ0#)-)ʀ/]$ڹ#M\ +ĪS99GjQꃍeVFp\Ntz>|Hf;VxƮ*)FcnP31eT:n-wX as q?<٩YR魫ɍ2^]b~;vv ^gd׷Wce`.Wzu*;ޮ^q~L<'Kvohf>; d2U0,F! Z81.dMG^(|mͭqWD:5Gz'wm1pǏ)Ud ۜvi}A$fU^VYp.+>&uDexv:Ö%1*/!RRP՝찪NɎ_u7ZuׯWݏVDUU{'QuD0a2DA?{wR p=JBfKQDF"7W*xv+SW;/g6XJ --YUfe]gw ī' P]51]dMX2̽PY yۆ K0bvDF:̧eDGO/ˢO^FuSģS:fī?ۈ2+C`/؂YNLcbMeP/"LȰį%/+JWiJzy"FсuJ|%pTמ"8@I,ZןqM(@\ L-#<%qD3hdзt"m[(P &=iv+<S`73s g>ɲhU_,TQ*yܯZ䱪ExEiJX&;DHEEK%Q"\dYд(P*˂J<—U.# Bx ,,RJ|ɅIƂSҏ2n"N% ͕IXI'aTDmRǒH6C^zU6įש@Ee&=6Z_hՉ_5*,:â0Gby=G%~6ZUVE# ,Zp۪GrCjwkq$IUҳ zE DBI~M??^ S%gf+ 44)גAg@3>f(MÀ)3<@&,޵LKs}"/%_omoȆz~ktm<-KpVsc.z]E v36ɾU\ڛ%m7ff0;:-x&$J(nWJ;"@μaAZQ5/$C}EK s=XJĄ1/k :,)Gq ru*9-*_x g2GJP0}cjt:B,D֚.c>^dF4?:=e#c2Nj:BWQTvʞDTVR sLlٕmЁ"HbgP=(#'5impB7Q\3`UAdbw=ꌉJ^Ue6*t፦.n|Oϴt)>tO >iYeI-Hn@#{T$#xx^'ԋpʤx{nǪObuO/ey.#?OOq)٨(U-==sPcÆlȱ-HkV f۴5mtw&ܔeSr"Mg?vEɮbͶ˃e_3,3e7 )GARycoO87>YỆy溅4 <{Pg'Ng PH9nI|1N|VGE{! 'b>vy;13|oZ!k>|T|mm<2_;OKv3n6*9b/9ę0\5 ޾V xx)npug$,Է,B|s`3 '#ЙEe7$4jvBz^&l]D]of^^ϸ}e#d_`wlcl_hc xdc }bWĆ4/4`Rb?AFY1=^:IpDEîIj!Ys]W5M&efPƯˈM<&1U7 7_š,k 6 *O2=FkwcޕFI }{({$tdߥzaeQb=yEy̦r y=1<ГQ*;SBFX^Ghl&H3(~pҩ5)V|>(z,H̶󯋼nm.'ۖH0͇$CN0зPM$y3V_[h UN_.Z׽ WAK_DI{I6DN#qt*c0Ǐ~[{$o%#ojW'ݖ%YLdP@ՊgA$VeYFY-!(7.CBd3vtAl!E։ T JYe?J@,~hRmGKux,)E+A8 y;!H[T_E>E}`;Pf⡹n !Q(1L>H}&Chh/8C&ΉZ/J'}{~ً/l;#T\L_҇lonٰ^qnЗ/=#ܗGo}Ę_i`v*ӡ6Gmg.VIq/DQ8+_@eǦ4V~L'iDW~({ Li/ם6*K l %J#Փ9pgW|6<Ÿ8/μ;o櫥hm +%Q4Ʋd}WdlzRpBuR9퍡#q41n]0AQhNT~cWC!|HaM4fElG /#X.FV@"68&KFoА>QklkiI_{!v;Xdf 5du2 1We$B )C M"F;{ध@gq 4{3.0Fx9׾銒մR]uR`l;\4yQ|YnI vA[ڐCEOn&Zy[)ejHEgZM)fEmWP#g?BMbƺMˈ'֨;Bs^v4V \L@Hdg#p3U$RqUWp`Өušq𮪥1T[LKb'0i#C'S $|>-ПY':%/o~=?dQ=>e:CY.'v\)&KŇ@XV|6!.Y糲jSzF ]<h@3UxⅧzL%3kA"I&7(I&7O oiZ\nꅯ7P1>\&h$ E,4t670!Z/WWDepYd VxWkEX{:uǡ{|Ѷ+_/~DGD1RC;~ϘHFvn v9,ҭ Dʲ8ҷYĻ ٪Es6 D*|Miy$Fe@ZwKP;p?7j U_D6j~w^t[ALzِh_E6爎M*sXj Etyʘ·B8/gMP/2Of]YDlb.+,S.Jιh,b,=_HݭvS!uY${w\-ťӭXAER`WfU@D +zťXY D a^.Ȉ |ɍMnW܈ʼ|ɍMnW܈Lu+=/#JZjW+h\Y< 2+˛Z7_FqeysWTˈB jh.^S ^F4hcL ڸ˰;]YwzWTܙuv_Ft霭^3_eEtܮ^3_eEܮ^15_yEܲA]z+nVsDkm]F #pY 7x.CۛŁz:m'cio(Fb,-UPHm?r[n/?l2~[pYۆWǗ$x/ q0;t~%d^8|C&Y.n(eVqɷEBI8**SZj !Lݢ;ۇ>(ё A$H 357d꠯[UZP2`uPDlB~-E㍡٧2Ǽ(z$H,a"|ՅisH+%Ӆ$㤪>cϼrΥYV,~RPl*KqX= Ѧg]̟Ԣs+ډL(ZaV^pg&/RO!++_O!j !H0 d<'’Xy R> b`>ʠ -`>ce؅*TY  ^iz]sw4YJ Y YxXo)Zė.wZ VL%kuz?kT PS>E=_NӋ MVW&e4j1[ Vc11Q-X mx;Coo+70&9}M%z< x`1'|)+mtI5NHLDQ31 &Tu+-L!ofU ,fbeS: C3v. ~虣_ !n;֗qYnjWe0r<Ne8]WtWw,F]:O͸.K_iz|?N=%w" &bTk낋 m|7`R/'eq3$c:}`1 ;G뺺xHH,.k<@3Igs>Yγ2 I] Y\(L ^] ȡCuCWlCB0l#EE@Tu&PiY(%j%J/8f:<8 ̳Nn`&y1]V7OFD]:9p]v@w6zJeF|Izv[ɇ*TWVژ4KѴJza}vs_ف6\@|Jd.J9Dfi] >eӴO`$׊u -t8Ytwy7R$yMo@P!3O{H((鶿Ҵ41Lؘ(PCM:,*n'Ƃ% 2KtY.'A (S9L¥,,dCauO#Λ.\Յ"0 1)-qݥeγpnSQT`+)  rd 86.eA -2_TC~I6'뿆fTsRMbL}VM0fu9m\O$l).zrSFxv.G +7s;x{غ>ḋfa٘%J8Eu6`G)oG n-+ʒE2su5sNF@Agmp?Ȃ-evIy{gUs+)l~x~m~5Ԑ"P% x^ &"րK9F :TzN4Pg PD Ky 5e!eү51;3S` g𽓮P5<%`':Mte 8뤥3)Xt kR7nWAdB}$XE=eͶڔ>X]p`!{e0Ӛ%2ȸԩvskl[4j:)çU5vZqv>Ï4#'U{3O 8J1`F /YAQ;]83Ӳꭇf,IY!vA=ux8vf:6N 'ᶀ=ދy)O4xwi|ˣiܧlSQ\53 Ͳc`-1ی@k͏{U~3x|bý(!jvZ-mE uUV}vK]|R4֬M:J[4ZF> ]} @WZ,a(Jtme7~ N-s9R).7k}*:z]ckh_@_j^K_ ?nJ>n.:c(:ϓq 74E(l j1^ Ir &!m[#k{`RL+WHK^iQ}k Q-tH| 5t yG,2E^Mx/ jU&'y˞'ԝ*Yu&?hoˑ+EK]b3 Q'2RX2!3lʉ̬9J=2[ 4Lʬ%2JclI {6H`֍O_wdXQBAp=ZD$X]H +/"*E,=bXD$XJ^ &P%(JQlI {45HT֍OUwdXQBAp'0YL/_<~#>R~K_(2.OϷMۛjtݫ>=tGkgWz*X 66*U1崫ºpcË練RoWb0lWƒܥB;eĖ OpVHt!;pw=s\-xqڳBX*ձ&9۔"Y7>9ޑaEi ]Qwһ_v7z G!z~ІSgЎዢzg˦a% Û~~]Ålu}C ơ?BuW˅yʯzH[yP#_u̇Ƈ̯|Ri;  qz>|: cFle CZI1k p)0d:[JrW+";S }ȑ}qvqv?[yc@-@5R{ ZMv]oۇo?It{v َ*\UlGvx-:qxc *w 4l0c'¨SǝVCbX5l!O~0D1!FŃ9<{1:ʯG7㾋A#bF_ s4%冇Ί:(5CVب;Z[e69˼¬|s[6ˊܔ Gɩǁp!MJaƃI1vÌg&RXH܀xH68LâD*ZE=]mۥc3 [F6JmۥF9?N{ YC{!)e.)d; YB-u?! ]O :7jHsFy^{<x$y+8Q2}5ag 7Fm\r~uGwYgYz"(djE]7Y?yd]G# 8?Q>6 ;@n@ T 5: ԼwQrP= WXZXml}Q۳L)j4։8Q ]f;8F27ʇz8^\xQlpwE^sE |8q Pτzq~zu "EE_*c<$հ5ʳw ^n[8CЧdwg.s=^MĊVϷfNe>W2rLzMGc=ޮ/\$j}Ø:u$d5-.:o'S$1@ӻnuz)|9 cx"gޜ99?pV< ~,JBX FOly0qM%vƱGIug(wlwi Vmm͍*R`\N`xn%@q:-!έeS7 _GI@-pޟۧ|c!szz ]( 0 6< :s u-^ 9W!ݭ)o"ļvb[ks RJ4#zDO~pG1_ٷW]q ԣ1O3?o;%M&zHBN2y/ x FgGcemtĚvZ~{_az=K.ҢXK&.yv޷!mx]ikU}_؟#4a '9>s~[i*ZE ˲·,#UuKcY2̒ 䌘RUM 'g|2VASѠ 3֢-@QLMPqHd?YGW1AX郜W'bIItɨNc 7!-<~YUzRh&ռʴZ$Gy?nK 6XI0Tg8 'Ŧ"|W evR5PN2Χn%ynNU Һ +//G5EfHrѷ$n/5FM5'f7?&Y31\dÖZn,H= )fjDաj\'W˛wsWlvU8 bHXˁJU퍤-XIz i Ew"L bӱ{_›mi+xpZ42MaMh"R2irߏBlm`Jx+"_S?&SNM `'#nxx+,@'%G 9~d zYЩbGxBc ld~yOZӿ-1XY/!A.ɱWVBWON1`+ 20(ܯt>7|wcbqY[@"yk_ml1myݱEȘeb6'F !j0#DߘAgG*+7FGo+asʽ:Yߪqu9yͱ:9ϹdxSEq\o{c'C¤d}~:X0k3KB6^^4Y~; ïؾAs3gaĦŠyy{/PѴ?xHRRsM]"-Yuk_Lc[KgL}nӘzˀJUJ+H|8j\~32)cRMʿQ:W9C6-2/^c4l tRJF>RAكh[1rBl]o6B8Mg灚=W;X5̵۔i&7.txszW nr˯7)< 3Zzf~*/q= wWl'v^<ܨ;nZi"XlbJْlJ7yݯJ!j ܥW݋մlŴ3/F],(EtmH8 c8%ڤN!uTUf\08tcRSMHIB|v<פu˛vو-H#~;y1= חS_an~SJh~AړzwR?O|<۞9j`5Y:C mȱ3Fmv mșܑ qsɝ@ߣ|iيAp}06ՙ'N, :>2?ί6JKWFs_pb^6ߙZͅT=w~/n/.Z^'G%o; n)ޒS7YԿ(h~yNnw\\ub=h .3sz=iŭM6jÖ%)n:~SKfc Q}ֺERچNjfw%"o5[1CI%n.z:%n}]-%]l&k2IEaVr*NGEsTz~W+I0R.+ހIئlH:y dVq+5 {[|$#;Ԍ n+wUYOEu-[N2p`Oϼp;b`xC XFp]#tt>T-<2?=_OՂۯzv]_F+eCLáz< Q\ G7QρGpkaǕg}L꼊vltwUBf)d1ܝGߋGh?LobEX6gb1YH)^o EUFUv~ kl@0}|*domo/DM(2%c`Q^S鸫"iIo#G+/PGcȢYc9(:W(o/N8_qQSiQx|@[wᗱf=nfXX+h#[UKPL(m6%ni35(Tߜ@(t *!a]-1eE*Z=JԿߒtT]pH9.!S.+&:VpmT}Y O6hl z2 2,K1W^RLƢ(>Pn@%} Z_hl}/kk7^w))WFVVlH H = QzR\%EB,KB{Nj>¿cSwr⢍ :2t4E7o"0'i FYZGۨP1 K+Q`;<'#X0Ay1Qm5Izw^;kՌl,B2`ra[i^x$(%`3:&`-Dh3*]8@BHzf5Yxu28?QZ6d\=0Z!ok'<=a~Ynʡ8❷zw xCwtK#%j.*`FUIYo6t tp81z9?'YUpW.\BJ/YWWhOq N-}=Axs{`s/ 5ZZ麏uq]5 Â_W r6v(Q'X8g`R(YZb,]\bO RޣL&gL98U?^?F{رߜwKB f̅\ 8f.掘fx\T4vNs98*ę{v2Nf8u X\y+Yg)!2}]LGY#ns/8s3N! qG04G82rQi,a|5&C»2tLZlw}fR6[q)p .H:^ ѥXOq< a_bcu&Wóq\ w@m(o~߂_;YeLž W"F:(iU ͝욵"Uh5R+|Q_EiT3[S-L}%2<,t(QKϳn( v,2r8Uڻ@k3t֢ {V׻KjX ^g%Bc.<֞I׳*F_Un{_Un{^Un#* ^Uۉ"b%ܧ^rx(+vS;^xUﴂS oL0k=Ncc0s,BG~ayC>vkn@h=g΍ Des#ʜbX}{lUݎ}&Ǡl{lqbXb+' aR 0Ń. ;[Q~+]f\Mv2q%Fd#HGؐ7Ե獤*qg6 u,F@B\3`=`̙M/+ =0؁5="Sv&ֶ~P1H: Ϣ#O9jscQ''LӫocՇn=VԄ.ӎ_}i@m@?[sӆ=|Q|~S$鏖>P FRf1-ɼ6o[ܟB24̷HN _AoGci <}(߽"ҹol$6Du`C%VڢTx…O4,ӏQB+TဥJQ[*à^%ڝvR4@KRu[ỶE9WuLdﱘ$hH@732NH3-JQqKd~I_|p'օQ=/S͙U=)<L/"^vsQ.YK(d ,B {ʝc׭Ӣ[Q9_|]N9 oq9:VNY?jyw$Ƴb/_:o;;2Sxnt^zE$͊]WuFbyT}ŀCf>Yj<6B ñ C.M*كuúO*5D MK/];B/vX2BdR !^ z"+'9}'F FHW j@x2DX3ˋlr+)H |QCKyc2~uX%v:ju^ v pVg%vV21eshJU\i">%s71stcuT䭐L 1 <9bv8{^ o?U- W% 7X&UdmF o%MD}XʍPt:ޖ,[;wlE4U&kʜro`6_.lMݼ$/KMMܝMUp7vαvmpo6;`g^ήrb~Gˣ\T({.{vP+sl={|zo >Nۨװtlȁ4$y\h@ڀ?yދr"lA1A(.6Ha:?<H1Klzq4#,5b:G1LA  ? Ky G7z w e6KBٝ_<{JZ8MJP-go5LH;P@$QdNt܉W(UOW8 ̒ڲK˒2,Oc}_CZ}z$Ao< E%h0Lxđ{A0Ǡ9s) US.Z-ːȬHop|,,/7R_O]k0E|N 3X*}@4#Xg ܥ%&^m6QQN[D//֠( `ڂҏlEx6nO{yAMf0QkK{IxB ogmCІK XԲlyzf݌ } kOk;iU]IM$J$gtI껛0I}T ;#J~H 17;#~}C.w}<:o O:YE!;/;?~9ao&Gv ԓ XL2pKwjk$%)' zH}H`y\R-6E;FH YC-ը{YL9/ED^HH = ɬDg\9t;A_Q~d9kXQZ4 9{w,Yzr`̠cn=PK G|$>%edu/harvard/hul/ois/jhove/module/iff/PK F|$>_!0edu/harvard/hul/ois/jhove/module/iff/Chunk.classn@K8 i)B)磸JTT Pmu4Ď3O#^V)cH|:U׻3oGְidH`!K,W\Q@W&Ͳ*tu{5`X 30ڼ7=h]õFQ }J/ s_}ض{2W;| 5pW/Eoێo025ٰ-(g=A)& 3 *Ow5ۮWeHJ"yi1OKq.wZxN}ܩqo7Ar4$U5 jHatJPKd V5ChRE7Ѥk>UCDV; QKu%h""c2\Fb{qF Eer Vd~ [x4[ =X.?ĩ\a! #ҘPy)EQ}@q~tGoϬRkD0YH+{2,EM! gYPK F|$>Pb6edu/harvard/hul/ois/jhove/module/iff/ChunkHeader.classUkSe~6,-m@JVLuҪТ&PI$EK[dlfà3~/'_HȌ?/z]V 5sse_ lqc!Ȼޓ2f1'&nɘ>уq|$xN8-?я%DDY$/▄AVO%|&. 3L,sV5wOsuڰTǬUg%&C|嵂]q.n`Dͺ-e`E\6Cby[TK usM M6ytwtQAC$TrM_ A.hVk \fo;%vO۲8E*EX/g:v]=W@L#G@>W"ߝp:ST+ǫ ^Ca.F]a@šϱ.aCS22-2VhF#?w%^k6^4SewSʋI|[~+5` 3Ʋ]GEHm*+ ®KxaJTJE76/{ε&\Xi؉tA+s߮7rg/Pw˛)0 =/`{z=g0$Ύbq> j5n W;)NV8\CӒA>M+zk[mن =N":D'2CBcD֥#DKqMfF)b7"`f&gr E&f>Fzb|A/b61tDi'SM$e>Hv20%d"ODy^ 昄?1p[>GD/FZmxq&HF~T_x5edu/harvard/hul/ois/jhove/module/iff/Superchunk.classS]kA=7tt[kWj[՚lSo"VDPlff6T  INJ/ )s3gνso?JBcm\6~& &3cژq]lBIyhȰ+CO4j]% ~׫rEMu_vTaj~.Qk -ٕeՎtEJ ='Xk~v1jlc-ke~&7+ǵ%T[Acc8;p0 +Md M΁%y,;ACqU k;a_⓿9b~7ZuJ NG,JxG%^9Q:{i3ٓ|IqwVT<[a>/@(8ΰ4qw)|r3>b_ޙddԇH!Fy$?RW >0;|N#Nu9l^x"PK G|$>&edu/harvard/hul/ois/jhove/module/jpeg/PK G|$>Dׯ^=edu/harvard/hul/ois/jhove/module/jpeg/ArithConditioning.classTNAnnY(hQ+rikqE"RKR ?-elHH|$cԙ A MM93sw3}`I/qS%r2&b܃ ADq &%܆"S|ڃ⌄zD<1Gбik[e/kQ |:٪NM6E>o@j%@vhڪTeL_TSYR++}Rtfm-Usܷ<^+4edu/harvard/hul/ois/jhove/module/jpeg/JpegExif.classWkt\UΝǹss3I&7R fawHN45Ŵj{3a23LDEMGRaB  V>p~( G24coO< QA;p= G #arDdD81(M f7 YR(1sLȘTP)?&V  C SA>Aw!ܭ` ,>ۅ Q-> mqqо߅OSCv?*؉#2|BA+ZDI9>lNYDĊ}{A5V\`5`JM*+=hE"3cBWdz䠐RfԔip1¾Qc[ @0c3<1RF*V?:0b0f0ԼLD09D%xIr|*0W(dJ,e?_.Dbh%mm䶍ܶܶ%1Md7Q5|6l̈G]Sf2c% 1ǒ E7qaS1}b[*0\TuG"f /xgT|x ]Wѿ,fKpb}xL3:=)qg9tQ%T<=STOcg,Îug{Bhw9-+Qf*sfNƌkf0;!U?fj D/'&/4r*>9^d?&Kt#,~y_~-MQiB}%GoꞺRDGbhX:tlxc܊/k2&(:!B&/eT^ + m:4n=%&}GGL°uMR%buP3VcI} 1SF&*ԃ#dV-IwŌtG}=JlYd^w \}=IW.Q3-bh\BvꪢNM}:B!vL(!#O0xdXDhuYh\8"W]cD54^ n_b(#XBXv͘)BPcel-W*>#e>bStT+U R0}kV(׼&6x,iF 5>Nq g\ 7edu/harvard/hul/ois/jhove/module/jpeg/JpegStrings.classVkWW# h> bm1t6-'8P˾_gtCZ깓0Hs>g{o͸--"%˄m«otr&&daJX#uEr'%8% 7  o&Cx}‡>!|*m>'|A4<$|M|=9g9%_Cx 9iSsK  =jը:fndb>qyjzj!8RSW*-es)u%KNI=MRr:i ̜^RP78>ig 4<{sz+KSpxsjΰaX 2䂂J=fZ0kVSɜwU(̍rJƴ](XP )SqsepzU:UVpQ'e LoE. =#gU;)"UL7͖OA_@r M[,l1'˼}q-o]k3x"T+E& JW2JUjIՋym;O‡ؖm+Ƥi8^35HYL=edu/harvard/hul/ois/jhove/module/jpeg/QuantizationTable.classTkO`~^mT@.VPD&6i| e}[_?"Y"O2F=а69<_Lbɇ. yщ61c "䃀;]}xσ &m0e;=1-od^֋S/[ Kҹ<5(J50_8Y,q:` .s"ojjv .q1ВΊZʨ.S +*"#= Cd&O[1+ Ɋa7Om oDD%<tĎ8W=[Xl$Sy%$/VEΤ"'J$cFM=w4w qhtoteD/d{m5I#E?#q{x&n@X{ZckOhS7}_+m2~Pn}‚ѮcWVE{TAn)H$ݠ A-FHf;oPK G|$> Op=/edu/harvard/hul/ois/jhove/module/jpeg/SRS.classSnA=ҵ~JE]_Uj+1DI]҄_ ,]](PƙBb48?3sg=b%\ n榀["nKcWD""+G5 C{ xD0wҡVϨG@ѓ7$6sJ r`8XJ1ASa|ji1Z $r1݊Vo75:uC񹔌u<ܬrt:1Vlu x") fԚ]ӲGk婞q`Z퍉L8ҰɉF̠MZmvuZlZ1ʦ-#}2^G?"H[Si7hњfS2љ`  &d33:2ÍsN=]^MkٵԬAr*ObA2zD;=Pڵ+ӺfYZƧ >YFl>f޸lՑ_y:bMuuunP7[}ԕP/` FOK(|G$ ^ RZz/ ԯ `H|D 1K$4F">2?A#߿B>PK G|$><բa1edu/harvard/hul/ois/jhove/module/jpeg/Spiff.classuKo@gclj'uP 8RWR5$qG%ā#W@H3 m-Uh~yzX9HSdX!,3ĝ2f3(Xq?;m?V1S;kܭ[kZ'lˣX]1yqm^*$xSy]5Mdq&') 7ܳHQPv=aVHaۺ]HbrS8.-jٶ(Ll\{}C`h!UcY: 79RxY=W&(._#3;~lQcz,4ÃW[Ny~al Tj"b FUw#̜Y/[qGgWhYX!i0s hC0Ȉ[}݌C n hw}p'm7"o80,4~$̀gKpYKp d=R/#O%xJ"_K _Gȷ|Ng&?8EK4H:p1ci4$tr /b2J_ _NSZ>xT0['Il;P烮$ɩɺ)!E22YJ^.&OES ;!;ǐj*6%3:3E/PK F|$>cǂ 4edu/harvard/hul/ois/jhove/module/jpeg/SpiffDir.classUVUN2p@ چ`:VPpBIZUq @23L(x_?e 2]>"-9/>g\w2z䆌LҨqH!XyW{HE0!V&#x/>RZH3BPB&lÜw;y;b 1HKUKUtdFjJYuUGSʵbZuz)c K^V]6U2teVuUyFEG ᛆix W]Ф&6e8Ӧl2 Q KR=5m5/Nu,-:Z\˪vA])E t%,2Zacلt xߙRGuḄ of0済W%| >帊>r,0|8kjIꞪQt +%)!Cl*DUZY6JIPM5rTP@ 6p8\!yp.Zp; 5u<opl Sq|o[q*05eE5KJnyU/zTbsB2 >k DQ2u-mRԁÛlh!ĦSLяG|#R:|tpTMKU* sҪT`lUi?|rN.Ubg)Og{Y6mrk+N ;NZ"htbjxժ-J>Y9*ZjQ/X钉 1l,XѪڎĸg뫷Ų^%KFݳ|.MݚNRSB r5ݪvR33v;P]|nnz@äC\!L:_`:0߂?y49ѵKtydh%ÏH"#=x(e$HI&7 0\Gi~׃ם؆z}&:" }azG|kMLI_uGam{h 8iaaIkB&~Di/\$ 6/pKZR8YǩdOWob0&艅wpz$h27AlD\ [96Ύ7y1^|- n~G;Dt "7,u ט7OqPK F|$>=>2edu/harvard/hul/ois/jhove/module/jpeg/Tiling.class[sTǖ-_HNRBJ(NJR mFYkY6-ߤ/3! ᑏ`%;3 Nfήv>aio@:q'qwX"ލ 6EbH C EPA)9݊bpTn?#.>'"T; ǬY0ekj[UZQf!^0JtaUںw:)e{#[[MmM7*c _mjN!|lm ܱ42UM+܉(ӏYwwY6_2V<>N+}÷i>6@~7]PK G|$>*edu/harvard/hul/ois/jhove/module/jpeg2000/PK G|$>ڭ>edu/harvard/hul/ois/jhove/module/jpeg2000/AssociationBox.classTmSU~na EZRpj%XB-@L"$€`_`; S;:_5NM SG̹9=<>BÀqg0CeLI\ӑ2Ѝ27tWf/>NٔcՃq1c`cUs pG>1pj>Ցa螲;ŐgbKkcRI&imm 2+5ӵ}ZqYw͚4 YN%Isݾ,ǖۮ%tO < ؗ ' (mdE(jґl:|Y[~) ; cQ΋4CYONe"hcM8exSNs[Kq|n-XQ U m1eT8lT96PQpEj<{jÆоva腲^0@)of'~j$v>#j5RpB a$FfE 2)2շ(+ êZZR@9¢ HÔ^z#Tr(4H߱\~)7/0;# D9٪-3_(2trBmuZZieLC9+Ji0ܕљZDŽ0 .UprvD^d߀i`#6?'=Cz .$_M m]?Lct@_$_Ghy #;wqa|ݣ Fg##F}pg'c`eC >ĐrT30t 7uR#kЯ]pV* m/<ӈ=ゎñȥpQǥ.B}42#Y \m[M'PK G|$>l77edu/harvard/hul/ois/jhove/module/jpeg2000/BPCCBox.classTKSP.-bx#OQPԖ)E@-y Ugsi.mM:Iڅ7,tAqqO'@MW(5{s9;v (U4 R\WT\]⺊*1bCRF5t UezS kmu׸etZEa,wvcbNMW;BF1'D#w!X1C0aAq7 C ~Px/<9 ʠE3mU0P^JV%.!q+<Ǵ21 Mhp cgG'HAMPzN^5ܒ6( P0aZA\C3 f5ᾂy I,hxqָ=Im a QD·Uߤb=ɕFPS6 !<^ |Ǩ:a[|1j%{pר2&/)h|(b 2^@saP 'c!V|P@ezo DZ-YnR҉s\7ydf,CZPK G|$>O}( ?edu/harvard/hul/ois/jhove/module/jpeg2000/BinaryFilterBox.classV[wUNt鴝r \&R ՆhmHmk1i2MRҙLj E+/^|@e]⳿/gJq9ks;{ІoE@ qr#"zǿoG؁80'E1a.~Ji 8\-xֆ# xNEl" c"cĹ8' nS'\$Js2)@Cp88C͉^ǘ>=ddUeaC2Sz[1^-7QH(YU3x>TSJ6LA= N$)58i58Qm>MSZdx6T>ܡTZ7`=Ul;P?d(a%3UYg:fhN7kAiEK#cj01H  ӦyeHCjz| g*hKB֎H]9 #@PBS^0 <|lnj֘!cC)MP0 5+ഄ3xQK^+|W&u!,dQWt2J*{ G3գI19Lt͠Dy4d:?^5.-&wpa}24J [VȄ{qPϓ5E܆ |(a7 {Wu25_%|O/pI—JFe\aX3^od!Kʰ cm 0$UY;Y:aȰgeXRl/Rr]g ޲5z"T>j;W.aj%p֮5)^Ҷ(oB.9m,؃U1Ն/Ne h54w)Ûö kJ4=gv>u7Hx9Xh;+]2G ÃU\q+0oִ• ^*yX"v6g m\DJ^曆p|>khV޴|ZL3+gUK@ۦjt !^ a/v5̂nGJɋh׺//`ނ-a߽:jݻf9p®+A?͗&QFT< gM5]-sXC|c,6b,6߄iz mcako>K(9|=s<6ӸEq^_vwswB܄CIxi{'qFQEqcIlqB;$̛gĨʼn"QHVDوDNʵh*1#*:qXIN|O^&brCjPK F|$>e9edu/harvard/hul/ois/jhove/module/jpeg2000/BoxHeader.classTnQ]tZZQUa:ⵍT_ȁ9 ?MD~dbg`ESٗokswT&G^E)-X=)VIIJ*XcP*MX^2D+ޛ`,57ܱ׶kCB]$JI]GmnpѨGcݖV žRtbv k<qZ]6^ nviUlvl)^EGɿdl&K2s3^xoV}~\-vu%= ڒdqȪ~SϒaY \0 kxRH+x1hĔ iAa|4|E81uZ|5a*ig8*}~C$%/m9q(Vn$ӤSr}b: ˣ8 \(yz-Iz(QH Iߴ)1/W#ma0}C} W%V!OG}ECwK\C%I#įpo),ܠl 9edu/harvard/hul/ois/jhove/module/jpeg2000/BoxHolder.classWW[U,|ִ6 j ThUp}wBתJU's<#ܗ !ޙߝ;3w@~шd96#D2я5 2?ұ &C, 6fܡc&9&.|:ĈsWwkGJ>&Ldx0G<1 I OhxRGbN:YyC8+^!;HKd*0aI򙘝adbYP__WMzot6# ,Z6!zO`e۠9lvӴR5ɤv.e ifͻ]#!eJ#͔t`JsI@B̶X}y :=!R(OteMG&s5`ZPT&ҖQjZUflK[i*#v] v[q3LdJQJf[twGjdzq3CM*cZĠLM+3נQ39340NDhEQڎ+S]>iN째/|:]d 'm5ӖLU.l+|mD7Hh7p= wǤ9d./fd., ]<TZ\MrOuyA`M[.o,x[KTnmw4x,U&țFfWw AZ/. U3g QኛIwGflhyNb߼\P!'R[?FV5kJ*-"A:':gp9Z8#٬RNR,*N.ݰ](tZٜ57Rudvΐ"=7` 6R :u55-ت8Jũ)~5+Nu]qꎊ*r}]up[q6zO@8:8T#X@peG'jjh4F5|SЮB^ތJtz mIe7(\j n rZXހǔ<ovzf)iX0b_ 8gK3*GTMVĢn ,iVEIr\s7tۢX/%`2SL`m{Nq1Vx=X97sɮAbR3C[׍m*:\<\2_\:º61F+@n_G \so,_0(*7M<a>)N'/jY\9YQ̡^!ſHSE M<{ŧ=!8:kSJiWSL$.Tަnf)Xv3{w'!ڪhM^ .@z\r\p^h _u_PK G|$>ލzt @edu/harvard/hul/ois/jhove/module/jpeg2000/COCMarkerSegment.classUmSU~.$Y^kXZCii@R65LbZ.%YHvH~O~~Ppt.b'ԝɽ99s_⑂vZF$\1\;pL,W\û %PЁ x0 0,>qS-1e|(#ގ9 !8I*H!-ᎄ m p'Z#CDgʶC=grZ_.rOxAkX#cqAET' S*t,"'XA^BAUk(2ZuEmҶjp\ph'lmf>VE eOkQ7ZtyBhw2+enUH*ZٵE#nq#_pYgJwHu71#oH$THxt\Aӝ$Ul*}Ѯ#yJn ;m"Cgj{nSjY̹|zlYeHATN2ʳJIL&z.BOi_<ؤmL&'3  owR3 /$ 4yRi+hҍ3pG"8G^^Lh!8 @edu/harvard/hul/ois/jhove/module/jpeg2000/CODMarkerSegment.classUSU.fsCJZZj5(lS$-Ҫt^d7no՗"《>;ܐ ?:Lvsw{sٳo Jx[t xG#w5(Wp]ōCRq ܌&US*ŲU1C##IO˕y (XT1Ce[$Cgb>Ch1RuF=myd2\fM/zVKΦ]*\%]uad6v-vQOپ( WF*9(1E#.CB*Zڨ 2}Z3Na{k[1d {YQ%WbS- 8]v KS3 wU,A|Zx6_tE ~ҳ8ֱ!S)32k@pؠ#pPeH]ŊcB_Q}&3;o͉be~z3̎)kC V =!ۡ$2-Ơ Bny5?׀&Wb1Osgaє=iã{(y-OKӉ#E`ӉaJr%ǥ -Eɕjsr{S_|*Kj!?w{.ː8&dCA2t7Aoq%=03OHi2mPyC'=ZruMeS y9mi\6OCTFx'|u4BLo:dғѳkd쇆Cܑn5#:B'SJPF$hh,}-áGjh8si|h3_s#'.5"ܧm! <ƙ,5&v 6`_ jm6 -Pi[|Fڀ/@McKo(ola` vnBSМet>7)b5߸S0`o6:-?PK G|$>@edu/harvard/hul/ois/jhove/module/jpeg2000/CRGMarkerSegment.classUsD."GU&SS\ JCHkR8tʒGC3323CG x`ž!tvɏАW5Q6"ø^R8M1LU9Lkx 3*ގavp} as1܈ޒwUb-Hz|!,6}A@t~S君 YkP>{dfh{n"E\q9XyeV˨sQo9gFF=@nx|dK Sq/\g+ea2d7U,(`IG*>QBaLlp!Qk7Ly@Lº X*>ѱ Y/^SϷܐ;@:> I3 6{j hz.Q*MpHkxÄŐ9AóZ066=55ePNn N~ador|T U$S0d{5pYTo5f[~vX㧠!1i㔖ҺvVT.d$G]j֗_r% B;^s޷ePKU)Y?exRn'vsEqmcc˥rT!稠N t5% }`1I!(^%R@ 4N6""No](;PۈEd fR_#=3]O=hdV+o+ssD ߕ1QJd1J#Е%R(Itm<' Ix>3LD{3*Rgb2#CPK G|$>1 aLDedu/harvard/hul/ois/jhove/module/jpeg2000/CaptureResolutionBox.classUrFv,[(H06@Z1hB&4M/:lYB_o<ftؓCb&o}=c8@'ROJ,iidTLaZI?gqN%K}Vy$ E q)\a]5m3X`7&MGpp7j5%斅䞡7Zp6t% WslV;[\CA7HIg`ݻEzVMؾ_" +IL'B\>uhpp 4q$i/ $ڈF^퓲,_i#>ߵ^ZD7"ouoP?d[?z~|hl\jPtTɾm]BocpVMxCm TPG/Ëw20㴈?bb;ę494U PK G|$>.c} =edu/harvard/hul/ois/jhove/module/jpeg2000/ChannelDefBox.classVSg}IXm)jATlE E jVd?d7]0؛my?ǾCtLvING{MtIdrٯ7y?NW $H8-V$>ǻHJ d05\dLp|=9 L )q3♖ 3MnI-kUttbIYUO+j,kZ'&+bJ!nhV|)oxPW ozy6ԲW 8nM"؇Bai8\A_u48lTukx}gG3ncbQc[ݵ@PDHzc'19ɘ.<㊄satX"GO$Az2QЉrPK G|$>*NKe:edu/harvard/hul/ois/jhove/module/jpeg2000/Codestream.classWy|֖-Y^ p -NRZ Hb]FkI&}I4- n,2-;M>_tfi% _Ǽyo޼VsYߋ=ЛE=rxO7c7;f&Og &d,&fV~&܊ۚ|x!_~ O^x|`*F^^^x^ nFYMǷxVƱɝL.&d.&'{|ɇbr 3ۍY/Cw<|ƍ{ܘws9~LSL0ɉ158BV#S*q2!5<SS4 5$oPȆ\ڜ`rX|Ai W]d9jO泅R([vrixAɨVjy JVYHE78ΨV?F9ޤLe+J7N8x`jOǵܿyJ%HtLXda Wy;A;&'x`5ctWX&?-81gq H|94]Í2>Oen/}LL>L>d?Fd,༄[Bs"|/c6FHgak .Ȉd%IݪRuG+%W&#~ߐM|\Ʒq^w] W?TF N@!D7U2y4jΤ ^>|kR SW^?}2~O)~&_W2~ Mo-s'ܟg_e3$tTL&5 (t0ϥ93&'TtNµKOyeQ\TJXQ|TuxAWq) qy멥%t^𤚤uSdմOnە7^ƆGcKc6{nӥ5uqC񄄥9?^k֥ejNrE GGvqPdppd8184"˰DTjzj%=#q7g %%n^Ro8WqFu#@ZFVgL~YD˪v16V^H3Ǖl[Wo)Ywi顤T*_KYszNr7ӎ#m?jZ>ONY è wRSWN%?|F|(JlQE${Np\ _YJE%HdY&e*Vi[@g.t|c3X9tm_e@=a: ,` pWmwZV Ӻ-ɇW`m4@)L4 7fn+6N}cm$vF}N4`-uf=˹14ve+Igh<%roI-o.ɳrI-o)ݥlpT4>p];:@yTiל'U^V*b9ܷ8.]PK G|$>rb^ Cedu/harvard/hul/ois/jhove/module/jpeg2000/CodestreamHeaderBox.classVWGٰaEKj@ *ZAP^ T } f7nla/~pN=~iUzgkAɝٝߝZZtT42Dž9!_椆Nt sJnG8"!zË'LxHK!$1 uxYC=j8WT 옊WCxMohya *R** *Lpv9i.7r m}<]e wpӱl9:qox WV ]o]ဎCzZ"`ص:R(]!(A*>> ^WU|3|N Z0 {VwӖ$cpf"d^#%H Fy^"ٲ_kT.)c >Jo.Hl"9 vH{6\>tKvegy:v]_*)aQ:g}%)PhuHI}޲~HNcBHV*+Ɠ&h}^&*کyJO,f *)72^ me &%|^XUل*ep@fXesa)?fmX*Q#yIH21pa@WBU{"EE .ڧQ'gQ{.S%"^_hB @edu/harvard/hul/ois/jhove/module/jpeg2000/CodestreamRegBox.classUSUn.۵P`i V%- B0L(VK, B}p|/}Pǎ`=wGAn|s? >Uq: ^JO]Ɛ2^0Mo- Vèx}Km)xG*1`RS  #\f"92r -˱1|2fy1x}etubxgꕺUuW]ns}#CCC1&ҩ%krIH2B`Eca* Fu|3tyP*IIچS g9崆~\АG!~nYc{3GiX=)D" 6f\z:aO{Y)4| )fa4<ć2>1"Ob0ė*54$Jv!zu{$D3~](kFiVW}08 kX}4بTlӞe~\ù?,qjs J<ԾHr!vik_@Śq'F:"IҜo姞rtV55ũnsn$Fc8k;އYKM>i?f@&ZKxȹB>0_\fz%_l<'T]HSv{imY)rƞO iM=k;`߆Wq '} 2=/|mD#OF!%mA~e0nBFCun#lKXюF#7c='M[)!5nIUG>""BD!9Dm4¼HH;xy}|X(3'9kyѧiM "$Wd\eL,I2G u%'&,PK G|$>ET=edu/harvard/hul/ois/jhove/module/jpeg2000/ColorGroupBox.classT[OA]X[B⽀)R/-0&Bnlv/|A&FL|"*n97Ia3`;Z8"UbHYSƈjqB(,-V)(qVϥ`|7.X5^20-"w</ %6y:H/v5(tpꡨs3!&0t,JW0X.0١ 鹄Wyx/ *CRE'(](}ͅp,ND2Q VE2'8ö:@Ug.Z;m0PEe\"t#fm\V ژ@t{c5\q7Uo64n1?v0ƬdTՒSVLH6A|uɵGN?Hvɷuq$*}eD3V,XND2s<edu/harvard/hul/ois/jhove/module/jpeg2000/ColorSpecBox.classW{G%{W&v;QiS9q qhkN" M0ki,-UbHYGBshL+5Br_hy3+ۑ7~=y@+GG}8A R\ʏ!Z *>pDʏe0ۨXH# KEև`CnUr'BtB|>5byyXn* ߨM~lHߛgTܥnoަ*ޡ*ޥVgU>؇s~r!?b‡#Gc*>>`os#C4=Cfʴ<;`y[7OC)>ۉP*YF.4NPJ<4֖P5~J'tA/ `11G}8ͥ+Plqu )dMr'#3!亚d(؆lЅi>Ͱrw[oܖ\0l-m$3b> %UϼcCOt9Gx:p¶SL0XSl,GOQBcUU8R_,խl$ q55T"WjCQS.4/f (`^@(,peNIG3Sk^+`7;/Y\v[q>gzr^9`M%:uVɝ~6k}m簗fI.zֻM~GY)ɏ*)$u!jD.YSŗYH6O((7MsX!nH͓XSD{Yt¯wVn´R ދ}BюjLиgl?^1oY/RaDVZHjig/K PK G|$>HX DDedu/harvard/hul/ois/jhove/module/jpeg2000/CommentMarkerSegment.classURA=I& D@IP#*.1,dC/ZXblQj&(Z&nt==O1a'k؁#-$8! x NhANjWS5ҜU^8·qAC4 ⢆K1h;7a`%ELh"v5I5gwS (y9FuBDu\Uאฮ&8:n"pPXc֔ Jp17.tKBzŨ;?/㖎Hsdtd1(踋49s4S02ZDN}L1tקҕI,PґIG[pW;ŒPp8xi\c C]R\IZ&IS>2# jpnyOIɬ] -]#Q9pAxkMGcB2Hu.3\z "O;I5n yB/z"^y0Vs*`C~" ٤+e :]rD GC ?Rn4 ӬH̉7W(M'n^SqHO,OKQJ8O\C U#ڎ?uZKڟUf#kez#EoN L5qiF#1س 7`ZLL=KhJC3%ၠFl~}6T Xϵߢ-Hp/jz2Bܺ\{2-a{v^H" qg3|~(9|5QYPK G|$>@}c>edu/harvard/hul/ois/jhove/module/jpeg2000/CompOptionsBox.classT[SP-⩀wQBi-C„ۜLrE/8uG_Q{Ralv7w~A ` \4yIl vuMkqD&bHi1qq X ]3Ydq޲-WZk\,pɭlQ8 j[vXF͒nhmV喰iԄJ&N[r{YdG_0s F l0Ē%e߬3{F+I4$ёsU68hqqGcF{`!GcKZ<2G'jѰ飧f=;v <d`U66^VDPB?DFi "T0L{F`FTZ]^EU |NVÛ+AYLjk UPg?1 URtHdYs/t+p-\zPeVO4z:zJUR0Ok좔._]s?EH5@=OQi SA4}DOxld'0C7Oq+rnD̾&)D|7>C p6h|7PK G|$>! ?edu/harvard/hul/ois/jhove/module/jpeg2000/ComponentMapBox.classVSUv)*hqrJKKLh=dwY(KTh}KqcGG_M8%(3v~zc (J8'LbX^d\D~1KBzYH b.h ȸbAU6DBs*8^j2q ׅ"H!a?12%Dd|I[Ԍ&4C7sTW2Y?euQW4[WɫK Ws=]]]ꐹ:jfun_g:gliPt ͚MM o j[N4fOs'ɳ q۴&y;i/Ռt쌑Wp'RnvP\,нre{Ģ E݊[qYS )0`*pLN[AC1in Ų"ᶂUQ&, wZ;/{fewHPGX8 od>q_b e֒j Z݊vTM. 9ڑZQbhdDlܕԡsfSnQL߶M#MI[u\^]OPSHD'B׌f hH;ncD乢 CٌN[DфeV8kȽN'FI&n3e'R(f3iE&[" c '%"s鑫# H'l(!o$&J?yzUdO9=^ٺ"za2E\M(8O5vD٧ai^w0^lzhXS é vF&Q&kBVOѫ sw~o1\ؕ`k gќߪj^`?5–]Bв;<=F_: <`֓kR3`?* ,J_N2=;~ľy}`G>#Zt&?pX$zz};𵟎LJuRyL:aY@BI!4BSo 9t9`s<$Xr\|:8op=|r=o)wqtoop}<N/u[\im/1 %a/tK EJkKӓzھwQ?PK G|$>Ĩ) Aedu/harvard/hul/ois/jhove/module/jpeg2000/ComposLayerHdrBox.classVWW Vո(а4P-tCLI& jE[kwotR zNko)oIs}n_~P *ntۈxJ> l8B $<.aP C¢O ^P kVx KX 1Xx\g\2ڈ$|-c VMLd|ί𣌟DRlcK/㒄+2fн*cz QO' 7I!cm Q|:LJ [b&>YD GT1SGlIMnV:׍QHX^ TF9؀x.Þ<wyF#Eor5حs{hĽDgEDm:ʐl2n%v._t;WBPwPݣRY$"M˺N\NʥJ2Re%1%5;f N-mv%ݺ EN.⭑owO ٤WPC {tN,b+0&6,oB뀞 Ą44ߟ-A\"D0џ5@@ 7HV_EMU'a2M5WgQX}9HBQsTo6ڊI'&@qWLLX@-*J`#'PJlu6behMQ?X >edu/harvard/hul/ois/jhove/module/jpeg2000/CompositionBox.classVWTU\x3C\J%@,[A%@ [\{{ol,[},IfR/uN@xͰx"9{_P~h ͠ :!>f0RpTLO^G@4 wУN@^w4 rnn5#jJn:"Pf׬h/3РMe?!cUZsьGU]vXSgF%ÒZ(;Ь%:t~W&4l/YFDe& 6}tn{MHw{O0\vXSxEū85g4dp+x*M%P 5Uسx:s0њ xlwz2fJk- C.YYL೶*xW{xU|U|OU||dPZ{il5opZ`L6j,KJF jͿ12W_\3biTTc/;;GGT܆T3\:*YC񌆰ȘT*~`狮uVqLH!6~(p^rEdbZvmO9:YU ͒T-3EKSE}I~9nWS$vNN]קqJM^c gؽp1+ep^_nK&1S`<7m0/sk {֔=th"̘txBNMur'^!77֠d;h7{#BZ8]1ɮ F7-"O]='/ԝtCIYIcrV3s8!;[[,`ud-VAϥGK48{ Yv]]@EVE¦k,l);>edu/harvard/hul/ois/jhove/module/jpeg2000/ContCodestream.classWICi )TP0%-vhyhҴi:7ͽ+feG`/nsO~>i>tܼR$Ӝ{{=~ɇ{f[CxėY<+*U~X|7X|bO÷my 񂆣8E Xeg1?`C^U1Bϡ8^S7f ~Ӱ0 RyL[9Әh6S1#7mᱩT8̇2fx2JTu#)3FEg>>R )g$^^{ܘ6Lxatv/OXɔk䬼@]qɼEv+nűGrI^Z[274e9,EH ,dyH[Ԕ餍9jT#:~R{TX}}9T將H۽Շٷl^TegꨜX:jReRz`qot}TtҺO`o]]r(%ZGlto$(_4x$4͗7^mN8'hu{::~uu\ot{|xZ16Rx󤑛0srm7^9Tu +A+5?/*o@`Su{_:{9Fi~ SF:7G)߭7s(}Vm)+t[Qd4V)%Q}QS'?O&f1:K\9/vy"d:Q9n.yQhԠJh^t4ղ8}ɋ[/c]NOV>XlWڥ\ Ϯ[AG/3[8D ӊ+](M"MW42=itd霣7NPO\q O>NKq.^}u hj;ѷ}+?BbȖ]jK~tɖ jЁ rɾoß"i$ᝄlx6 !&c{ l>#oƒ6 !&Y>H!~ "la£6F#$'gE8t"ԲGuк(sp {%r.{RCR P#D M yPlw7*gY }vrpqO,V򡆺Ө/Y Ŏí}3X{C4$VQ-]{} TTf醦`aAedu/harvard/hul/ois/jhove/module/jpeg2000/ContCodestreamBox.classUmSW~ Y^D@ԗ.bj 0Q[m\d1ٛ0_303vz./N f&syϹ?>C/MȰsH݈t7F?#ou|SE+2/踈K\\ч\Sݘp] Ą:mJek2i,ז͛ժi!nu[<۬t|s.Wٔv!喨g23'Wgd^vC|RڂAe C,5rXEuz~`ЧV85[AY4<ٚHj$ʰa5x[r KqL▆)i 3 ;=y+RV|upe`jM2$=aƍBxyTܟ5r11(qq.iWÕwpRjPךwQAaP)9lƖ8Bޭ%04sOᗨ!`GZ%pX,G+lܧ w|nBPROd8KRDuB%ނmɟ/Mva]+>5Cs[-Rɓ<+2xeZPi&>_Ќ\ 3$1+ZPJeؔ"6ܩjv([xLJqg!v}۷Vy*6' CԫIqhңck`oC8Kh>Kwp 'b_$#دE5$;c#`ڝ耯=E7+8}JCk55tpr=xu(GH3 _Ma$N'CDzU2Uk7aEPK G|$>JgJ ;edu/harvard/hul/ois/jhove/module/jpeg2000/CrossRefBox.classV[SF66QĤ6$P0" M$-(vͥB/b,L _C <3tL'ysNӳM6j;{Yo*nF^Wp] oܿ%mITFj 䎂qR: bJimFE 9+=xOe,碴 >dP ./%sUuprůR ofKIqpJ# 0* w׸k+KwLO_]qք^r%ղ( cMc9`PșAPgeS|/[rAE7SC(19Qhฐ9IҘVauӼDn: v1I #p$/p5IXIETv,QӾ~xs&!U kX$C@AC +LjKC l8 w qx Axe|еqu).^c9N-\aEl GxqyiNK f8O Q<|+N5t#p cvw@kj\q?:BZ6ױTu?Rj9F7|Ap!=&Vr5 /{ >N|XNcC' i~e (+ e@ИY^y"9Wvs5!RPi9xAB#L 2]bKeM8nIKr[ʧ!ր]MK{A!Qnb1#$CQ\r@}1o>A]D Wsz y:-6(*G;ݢQ=֦5]D{!do/@OD /_p BX[7Z[5m9YQ%FUXH.>ֆ eIO8A#}&:IumSR;8SY\h TM*.ˋ}?A^F mxU n 1H^'#Jo&2s7Z}^1PK G|$>6-?edu/harvard/hul/ois/jhove/module/jpeg2000/DDResolutionBox.classUkSU~&Y@.UŪ%B &)-BCt A %8-s>y/?<0FøehW< 2qD1`Rŧ1||!!e70GqN&RqKq|)3Cy⎊9y.Hyi[ ,1Dob(j|릣m8l"9!*Cx1 nP*E( ;M,3V_4xt=U仦]hX] EwgQxՔ&/ ee,Хg]./mcrfp]R.\;U 񀡯uEUPw^~ĺHװ C"'lnRi8}Mgq'4T@51C*Ԇ0 &oZ~=)mI:hH.!mpӜhL+˺,, Րۙ]_xE* Ym4U:8U_݆R9'_dHI2G3Bg =D!k(/7KcPc{"F89@}] Dx'Zڠn j:`.=3~ppl݌ɛHOSd4 p2Rܻ$15W[ mt5ѣlғIH_L_PK G|$>j\?edu/harvard/hul/ois/jhove/module/jpeg2000/DataEntryURLBox.classUKSU.3LM@^6A!Q&%0D@eht=\ Zeeō 7<@!S5so7*U\EG txoɫ x[E7nPУ"^in+ (xWEJ]i( ޓ|T0*j1,(UQ1x(P05,û0^\7l}[{/;h">,2y};KyS W_^WbgЗs"ѡ'{Ny!xCEVx\w(_lc&V6^!f4bNGX'pry6NYHYp\BɳUnE԰s֣(է !!,*jXa|y0>ÆI?ĺG),rLb#CWxG;ւ?p5M6GP,YXr ~²H{q94󄐮<4DF ]~įQF ZrrFnP@g:-I:%N$9#1[Ƞ{ާhXDֆ8j W$09S^*Ъ컐ш"JO6v&:e&OQuq`Jel=\*ʇO-ԴbToۺ-U G]]\fDM{fxmLmڙK;)WD&CBuhB^D6}X#CU>Lj()hfhTЂVRTvq`Ly'=PK G|$>}!:edu/harvard/hul/ois/jhove/module/jpeg2000/DefaultBox.classPN07iCCy5>U@H<Y.iQp>Blw؟_zuQz6\tP;֡NOZ PhJ=dύT h}%3>LĒO"} m'VBRjHE6ak'Op=QdAZhˏ|ݟ%<먴;>grWDu ׂ_#Et4#(r7XK7h]PK G|$>RQPDedu/harvard/hul/ois/jhove/module/jpeg2000/DefaultMarkerSegment.classKO@ B1ހ"M ]<ڦ%M<PmQ&6ٙ2 ]i,erdV 䰪#c }与l$Ksٜ@υP%|I`_/:MȘ-tl(bY0cMz7tӑjJyʂ1|0$8;Ke~f:>{U:OѧqX'l!Φ$\?8dd;~Fríҷh뇞&^F tͪ(Uy ,(YSQB| Bf\@PK G|$>^?edu/harvard/hul/ois/jhove/module/jpeg2000/DesiredReproBox.classSNQ]ǖM/׶PXDE@h!-1r)ә̔_/ƒ&M>'>K:޳{}^sW#xG+.ю2q4a@\\.nHsSCRCJVCh+d(&j|kcg-rslUq4 pU5a]a H65m ?z}⚂A7i!Lfh+"_N-2ğZh0^ +oN(Tr::Щ#aqc 'k;%}91 .bijtt'MbgZ/|)+rP<47D0| rM!N%*Y~ qܼ 3d_'+qFHNI䉑&Ъ<(($kҹZjyV1[!0^]uR!v>&ES*!@Ʃ'D}7M(_Ashe)roh-d~ w3h{;E/7~QV"N:G6.z1b6/K&3y3TPK G|$> 7S?edu/harvard/hul/ois/jhove/module/jpeg2000/DigSignatureBox.classWwWhJFu$TN8vHxr:D3b4JBYSHNCKCHY i]Reߗ_81 }^yCxנGCRq !G NM2ތa-Sb9%iFĐ0ꃎ1vڏ,%L! [9, yl8،21!aR8W8x> jx2v=8'~>ޏPJ#>*>cK Bq.p|aAC 1hjX*G֥ Q:Zh!5|tll5nijV\Ɠ I[MVsꩬ'9-mAHi9[7<úf'Hezqi,EUL4i[i#+=3լf"ΡxI ^).)4.s\QgXl=Y:٥m'g|Sᰂ _T0/)2°rn:,˴)jb|8mgm5ې3j,i 33 g| Er*<9ʖur^3gꆭY64p<]@7V^d[Iޑfs|K"CRL##K]G|W%?8QcQ7ͬ z+Ph۝ռ*X=1h,1i:: M.ֶґ\ȆE?>~_CްPjNGc({ fk|-q4ݶocRԵaUc\ST =4T- >ik~:yc,cMbl?Q@tU[-P'HBŇK {nTgۙR@ћ4!L);֐sR#k<ۯ=U3tByg/`lb2M'+)Q+!NecG*®h[csr cĤZŪ$v)>:orrC(B"Yb.i9DVewGN ɝ7uJQRuE\Ir".N'S3D]+l=jݳF>\i9h1-ektR}nh6Un qVBp.wWo dASVN~EA /0WP|]TBCac5:2GxooWGڲ` FiN$"E5$xnV-Ԣy ;kirQ7txՖ<~bU#%} +_ev>#CDB[ȥUAeM?wq(->伞t#1iYg8J(3{g*}<,$EH=i& U[C`` nūfP)mYX-_;^@a)'G ze{{|mEܾ3>MAO|a,"h\ĝܪLӪLd v*Rf*4~e&Tv*݌_OLh(GIc˽dW`N_Tl/$RUHdET]ŝw~6ro ~wHA2Fs߅rփRʴ\6u0`׮v~АY. ;edu/harvard/hul/ois/jhove/module/jpeg2000/FileTypeBox.classV wUd&WA#"AShMuk HjR@4S&3q2}]\P1U{?9xtR'o{޽o߿PUǦ Y [T܅2R Zm*h*aP%bة`푱[Eh'#^}s+GZ ȩXPa`PLSAl AQr~1 x@ƃ [ pogXoj NЬoJbqaջ;3t֦gsPs2!3a}PO̐' z.Ѻ.yk0{*\-}]+tk.!ÔGͥ^p *x%#;:cX3Ԭ\bXoCUNwt3ͱ ZR[őxO8f Hq$gqX`=<^ 9 1JE2^lǫx5Nҝ"3,f[9&[x[;Gp]GB\fDZv:5-GiWoX47LfQtc.1:!|=>!G 4fq6~0,PlVw8>g2>8/8W_ ۪mjIbib]^0p|GUqBy'Z[|'x{q-0aYD@/r!tL*${[&KuN6P0K7aޔZ!З)N!:ۛ4WKY!ZK*{C jŞ=(߉zsd>=q|Evi׻*Lf/.7O$> 0݆UEݥ"lEe ȱ;LJXCVBjIVۥ;Tq7O70 msQS6ê9sUM&1r^+/ EH$fztb;y=#DMyuڢ[QE/"GǤU/M~g늀V(57vRBviA>TKgcZR]GE{[|T[Rŵ,XI?C 4 cF ?PINmq5/.4'%k5Bs%ɪk#ҪԚP]=5°DIF7'XAs-ӾhgQEO" _8qҫIPK G|$>\Cedu/harvard/hul/ois/jhove/module/jpeg2000/FragmentInputStream.classSOQ޴0].RLwZdQ1&efڠw^.$1Ɠ( -A?~³1Gt xCM $ܖpG] 1q_* eeEαf73Ϛ3]4Cǡύ\*H&mOA>\H82~"KBdњcPg/’jɿZL/Ӷ xT.o85s3099ٍG_x'Rݢc$7 c5C鼖0R HT?lm8q Sxю ⸈NKЁG]*s$0*8)ØHu*VJ_/fiгT1#Xbz\,:n:څAhF/!sj"ѳBuݰŖVYm\,c CQ-Ħ<Ҍl&&hMoPS!\Jw)mCGpeK]=.Q^%)LzmL+Ch>;nV{{w瑷"_H{$hB9@ CPBeZ軯 )/!VzZGId!xO |AHw>Q]#.iB=OoAYS6el ηFG{EY5I6/yI>^6ʖPK G|$>)=3I?edu/harvard/hul/ois/jhove/module/jpeg2000/FragmentListBox.classUSU]ɲ|t) PJP@ i`.ٛdf7agݗ/}hEs7`:~;/EIƛx;n\aDJ⚸#c2c\&λ}CMLӤ%SQ'ޗ0-#-سb02a H cQ|(!-aq3" -m}Gʾii24mӟbXMVYy'(k]C+-1=mpek%f2;1x!|18r C(9Aqe|=hI/շ,sY^M$ahsD r+SPy-㻦PЃ "#W]Ӛs]]<^ U]E}O_u2xq2.PUp5 +XdžO@L¦cKA©0[5@D-j;e_PCi߂ĶGf?=sj:r9rw}ں$X 8xZ WWx9^@wu @YS˵F۬3\}y.\ Ok0(G-nsrtyI{ժyE+E(RK =$ψ@*xb[!I^i%xQ@ˬiHmj3JSvD\/V1dٞ)8.DTCh$ָe;nF0)5 tڱg[*6&eS(M'xy֟#5g3?絺+羚 P';tFk/ _O $L;uANg_G4i bCDj@rRXAӭ*9c\Ҕ(?}5;-'rV >~B{h;vv.cG;qq^ɹ.r;_nƺbJW,Yxk_ؓ. zhdϱ?}/uChcPGE @edu/harvard/hul/ois/jhove/module/jpeg2000/FragmentTableBox.classV[WUI8drm HJ[Z 6P[*04 R^G_o}AҰ/ß}& J8{ٳ>۷3Ot✟ys +ƈ$䗋 .acLr.+P11/W$H/*Ĕ$3 0+/| Jٗ㚂xEb ^P=bsa.4aisҗb1N)1<)9mEt;RedkMhi+K m5#ڨ~JŅ=s;f/ P"CݼnM陫rJAp:'K zLd27™Ĭme4YnNfRwlL³*t,!B _>P*L ә48$VTX帥"4SabP鈙9Qi!a m]2]Ȫp`aMś nc-o㎊wp|Y#39]}C-۶eOQ=IZk\SF<(B :Tܕ^u#U|OU|U|eRn +*׻9FJicɡ- 8u >Qx2@U/Ā#K7edu/harvard/hul/ois/jhove/module/jpeg2000/GTSOBox.classTR@JӆBፋ mS@ʥShtt&4K&$eOG)32Pg"f2˞|idpOF?ix !% 0Ix,#'20*, MDFB2!fbT 1ajjXj^3uX*qY5j0+{%p t$L) e8f%vytns I*{,jhDM䓀 WF*swYs"x ׯjP2ٍ$Ç/)g+kffgS*/^J[GiR/f0}Lź$X\>[ 5]caÃ׮3 `QIMLpNȂG RL9Ap&4#)j'~҈%tSM-ZI/ E'z& q A..ףmtD !}HrM)un6edu/harvard/hul/ois/jhove/module/jpeg2000/IPRBox.classTRA=M}VHj~T`7ݻi >edu/harvard/hul/ois/jhove/module/jpeg2000/ImageHeaderBox.classWwEMv6-iS%4hJP EZaA-dnmi"' zxRx<z8;Wxryߝ߽s7~@=~Pۂa; MS.4(nbJs-rUsh+ԧJA\TB- )W؏yA{C*^Kr!prVч$GJ*/ia@ G8L⭆exm7xn̎dRnm"5НaI̸m{X3vjHś=N vJ0pG)Za(9Pv=W3GgcqY jHRd=ö\aiZx aw9vCϐ)¦n 1t'CIv!!0P3?ql|NJ =G +bHf$i[4ac+jx 5I75،HF&mI/cB[8Ͱmsp=:Lg6;{ޗPGD'Tg9Vj>Mff%,q0 W92j~H2MqzR쳎X1EZ;&6nIG% Ⲇ+)Յ <;}h=0\ߡ]xzJtC- :K?$+o v{GLoC=dݍ J#-VM{J73mκwRYvP,ZtH+̮.hZʯr6zZ{,> \0 MXioȑIi rA3*SN  }[ЖKKC洊%ճ.mC^bRy \#mTEwIJ2gT:3H|ʼn۹jJH虬).t#”[U &ݕ ?7](gʈZI^S |fL֡觊Hyζ L~C.k=MV/+7,ݤ{5/C3G@%/F倬ZG='Q~up7I: *EuTz uZ$l¶җcf5w,Q) -6bt -'qPK G|$>=:` Aedu/harvard/hul/ois/jhove/module/jpeg2000/InstructionSetBox.classUmSU~. f@Z ֦o@i P .%Yv͆BRj}/TcǁQfG$!uxdy=@n)hE؃K8I!NBt(DgIJ[YO="2z *C1  ACǰ cDVbc2^7y#M&h崇y:1!#.#!˘n$\d8}a0fn5#aNw<=y8PJf4+J!SφR M\2<4g{t[ .3$k :apCاekifPgZ(LH{Ņڔj_py35鳦5ͩ1g|#oXG2\X9*'!oD361KKP:chwG?nhi /6vUAQ&B$Ѫ.RK`?;qp@(mxZv!YN{!ot_]N4O6 J+V#=(F, с hm/z EԈm"j]wQ7\¶c] +lP} KxW4a#wRu?;ס޹eg֣p1mxvsǮؽQ?q)rKmRU, R~\+-۲fc2=K&cPK G|$>- 6edu/harvard/hul/ois/jhove/module/jpeg2000/JP2Box.classX x>'Yr7ax#b"/ lMxD8ٝl6,'jVR>jj}ڗ}ڷm;24ߗsss<8T- ?T^bz?S3~* %Kǯ~VL4 ~/ L׃GR` oY*0ſ T`o sY(P[VwWHD ,f@`KX r VX*cXâ*p5,Dd:=ѓ ҅L8 -55j;ѫ&⭉xZsRČ.壧i#Yktq+Lze\531FڦRI˗' #Oe|9QM 91jfl Nv–FgP{z.CE2(2(X*q= OPby毳,jZB##\")뛩tԤ]C4v(Kyo˴B*KU.|O^zH9.we*^WPNN=:ٱԣyِ̔O/cVJ8O&aWx ^+:F*~Rӵ)!qMx-7@'Q 7݆ʊKJ M;dF9 D5/rVn%2N2Xt~nj*dj8ҍ|-:rN3*:Rnżw,/0'U+;ڸS) by`tqa+GQx#uMcVڴ:,c߅N=E+B?qϵV 4[Fs 5 az64_㕆U 7GhLal(;` HRo%3Sp #>M?3ga*|{lY`Ca :-::0SiPJʟC2wY!S6E Aa9Ò@ |>riUEe几8oA8rǚJYAPa!P]a`$q/##Sbǜ­d~3Mڄ~AؾVmR㾂7:ES }U%:S=tDgگCOhл:GzvΕ_AFgq/(kEFE+ hO̥ <edu/harvard/hul/ois/jhove/module/jpeg2000/JP2HeaderBox.classVWW&0!PָA@l(h([Ūm\d& }v_|=5S/}C) DIݹ~_~_h-G7=>POcb7$v X2"'QWBI|x O?j0<+5>D`B]irby[Pڡ Mi3ZHB͌YC(w}< 5{FcxY[3j~-9d#]=?2IWL:r*';̍!Jh &ؘаkdJ٭"1bg<x/1݅#m6I WO<;8Fs;@s'`Zn@3 4x*xMxCś8-Sww|#1>Q؝}Z /%Z8OTEÖ#E1T _""NW*.kNP|s2=qk6`M`sN1p"XQ]$*%pLeXpG%pO!%@1IKHbkɍ|Xd;Ǵ e ~J㒫ל@ޙy-ƭXP@/tRoۯvQ_ ^|&zjל˝ʮGGF *c9T c;CH;=9y2lNX [W1F?b1 ,Gz˰.xg/n@p7u+ذ%'PST?FϥaoJȹPF!A:s\;P5W ɔKZԔ@.ʜi=) ;xW`xH4& it@LaGʥ*s|fҬU<,$)uWcd.I9-2ۥap*TНvJYbF\C!fIqn=Tx̚4z [ .(mr%K5yI4 &e+jhv,27gQA8 '~7Qx0MW뼗F2iTtH͹y9wxdk{l`'` j3XM1?4Ԝ$ wmLa7-ypcF\>YZ/ÇJFh'V/A:h} ERIҩjAPK G|$>TP{P :edu/harvard/hul/ois/jhove/module/jpeg2000/JP2Strings.classuUWF"('MҨGҐHH$msTM H2 }~QMg$AQxof79v1NSY43"<|7L@"5PGh (%e"x>%!eU6 z%^Ax^GxMFxwCx>D͏>A>GK5A;~`G?e,AwSF V \[+"'DĐnYČl3jVQlۗ10@ T]j"TT}z+G:ܯ܂WaHьS8fjl8C ؕڱ3sL*zLC55c: nW`4"ɚY/W޾)B,ޢr7c&y^5/HSTp\"yܬ:^ҭB`" /B*-nh&ELafzNTi.ГloLz"9DrDF'1P*c3LjY!5Agde.rtl<ddh26>a{R#\HTBIHC#a9{DvC.եB3Pk73@6[N|GQQwlQ \:@v[ӜDȐyƙ퍱*JMG럏)݈R0ũq.դKP951<蝪L"j4] צ皼}T{n&wy@ eӝ CQfFbUb< ϑfr){&4tC]0 <Gha$"7uEES̩7ĥ:8G %߆jr5 KɑXQHЗZ$\3pJOv?YIH'Ey'Wڼ)WmR8楖p݆H=ĪTy{o=%ep:eV!򍖓T_jx+2j-G|Yϖǒ7(]*Uh0J A~Go-ֳ>TS=R˩>j`Ϧsz#Iᓴ M#t o֚[:Ү⟰0:*VY12+kd+Ws =L`f& y26zIfn5r$7g$-$ c+-6[$;Hn7va iAuJe!Le:"l轌\q}C;Ⱦab=3icS`#<|GxGyߣ:(Y%Dx,x# BANbwe("KSɁPK G|$>j-8edu/harvard/hul/ois/jhove/module/jpeg2000/LabelBox.classTmOA~-@AEDl xERjy T ,w1|P`es<>3s?~~ yZp ?}dnKLJ;H/(Mȇ^)^hcX/qχ yp_ u:_:?Y\ӹՖl+ody{a1P Mm8Nry2hRd*Z[hVșB+.BId#pXӦV473APdhXy,/NqfZi\ PK F|$>ĎY5:edu/harvard/hul/ois/jhove/module/jpeg2000/MainOrTile.classT[S`=_[mCU.ULE^ N8  MMiڦfdeQfQnHiGq$߷gi?ËH6slJ,|O}xG|Z% %<QU,НYΦVn_s՚_7?m vj[UCo(Et(+YWJE{Pjvը9dBͻeQm(9WkTx%mOSYVT7W򻆣V)rPsɴL|i6*e.Ríe3{!+ZuC)_cI)ٗ!`LkL+t=sC6UxWM. dbD0F%v 5qnF$< e1,,kVAQms7zl(QKʊfZچj)y- iagb]`>(}I]Sz!G7`M\O~1ϓs}zd'薂Nx")cgHcipH]2 ]kLb+~}G?'Y?po%CDpq:IiE}ߎEHz>Og2EԛdR`3?{2R_m6jx) "Ғ0̑c[GnϷ7PK G|$>"ĚW6edu/harvard/hul/ois/jhove/module/jpeg2000/Marker.classN@ NPl-E]X  ĀvYͅ6]baBbx(]}/KFq"08% MiB<_<[0vr/w\(#VkcZ *g\~h-'H0 [+)en5,r۱YnYoiʰБGl4Vf0D GGs=edu/harvard/hul/ois/jhove/module/jpeg2000/MarkerSegment.classWIpG}cɌ=cCqcdLd6Alkhq %+!>JU*Tsr1I~K$7?=t₁8YtOJtOKg 89|@fdAe#h|@ 2Hłg 5DMp[x;x{8}hp> _C/igm,1Da}wQϋ{8 ^;}A"ygJTL-+bTMjՀSJ4ŭD<WPĝܑh4a}yysd<NYD2#)k˸d}ɘɦ-3"buI.z$ְ]l/(JH,ICS߈9fzIo5v* '>rYBA4M]݌,YCCNܿO\+7+_(DL EaAVl ڄ]zyx&`YiANP4l %,;0տ.Y3z,`#:.:&,[Oz$}Djˉs]?Đq;-hAG:{r:> |aMwJ5!oȈ-^5,!VxXZegC 'ٛ']dI\Bn8*^[nf7_:KJ *)O k<\dUXEw9| Z_G7w;FM~f|{|+KA>p y$9x|wv=pKLT!BT6̺cd DXvא G Yt]E! OwqLw0:OJ?O"UO/,5t\w=edu/harvard/hul/ois/jhove/module/jpeg2000/NumberListBox.classUSU.J `4MӖ*j( IRTd/anfaH}}/> 0N3ݤ3tvsz@vgQB q W >MzͦP"c:̊u7BIH10ߔ1/ !m#6LX񹄴%PձI ^W4g[stunQS[6W3d15,ýڶ,ݮ$E^2L>W[\-Wy)9{mܙ\eߴu 9\ifՊj^+^)kVM2Co9nn8y0.ZԬs*(8 d%q(øU|+I`_+RFKP4PUͬRWO<)%xJBlQI땂PؔPVpX(axCcxE FZjaCƻG.fiR+"R.e^ى azBRy0*󚫥Ur-åYl]u6T:#HYպK4ZfkՌuH_7Y)d0&!ʉJ10ETW!z/!}4u&8JDIN-n/d]x[W['/!W e^tɮd5;J:8@2M mαoӰ4x;ݏqm#4Ә$ߧY?|RCn0L@q}!HdO16O2?1xh;I1\h@FpN{GZ\ﱽC0/6yDžPK G|$>$ :edu/harvard/hul/ois/jhove/module/jpeg2000/OpacityBox.classV[se~v J嘶hJѴHIIMKE-dKw7PQ| o8^O3)3!5}?n ^|)c%De!qqOOA_mN26ऌ$pJ\d  F pFF+ `\L2֮ѝrk쫸$,zM .-o WK WW(-LaYfA=cj))xW%|C|$|L\Ԯ\U +Bqm Oâ+Sp+nDVLj gwK|O8G,7w ̯P^L#K~p㲞ITZ_vʁNciİ [RYU<q"xf;Vu;U5aKUW h(U}ME8mzC_xUu&3Q_DJ:QtH|8{o[ahQ5-Ayrn$>M ^+wHt0fxƉnx1aL ;j५N =l.6``_} RW+HjL/ q"ONׁH)QqȹCjB"Flw"xAՙ85:p| P2d[ /N!+Bs+^VENө(YM&FF)DM~#hôn7.~g _sôH{RW'1tA<`iHh~+*z )I C4btE6 8;&6T6.`S!q`3A բސk8`g?j!_>*yP 仆'Dak([&w.,oom~ノ<VS8+<6noaB^ ۈ (-c"Bal_؂>{ 43߹iPK G|$>|Ib@edu/harvard/hul/ois/jhove/module/jpeg2000/PLMMarkerSegment.classS[OA^ʥ /[A)P塤(J/dBn( & n̹~9ǯ}Øф4Ⓕtet]J#*C5s2p]BLB(K04CpB7tg3`ʖMX:qṕ,/?Er_DMÖ0 nং[-AUf"}a@hUnijRTMV P-˴yj) #"d#%n+b|IN$g-욼hV []*#*Ř{/a\A s(Z(' 0\a߃l[\M5jTv,K ]ci\q.14sMykswfҸ6ќӹC::pFR .6Ϗv5")H wg @ #R'ԣ$CzZȾhHZ B߿I-X&Bt˻D:u\N9E7PK G|$>}<_@edu/harvard/hul/ois/jhove/module/jpeg2000/PLTMarkerSegment.classT]OA=K Xȇ-VCI E}i]hw-ʋ?a`&#Fm!F ܽsܙĊ6ъ >tuID}hC/>wa^\!!<3;27UF -3lBcCk)Z\+y&"B{eEG7 [u ~K"bD($ SKJZR\)uYi8 8BrI.PkYʹ30Sʺ!g8۱-9FUf7ELHbR-LIƌfq`vfgaZm3^1KJ-"iLgjic### gHUxӃ@y;W:UtSI<L67s*ypqpzOL/Ɯxɪ* AތŊ IWXu@(YDv,Ц=̩`߁W%7L}ЄQ,92j'a ʒhĨC9аu`jlXXQ'ڨVOTra>V~O{𱃯ܙihSA@'r7j3vИ|G _ó qmni ̾&X'<tFeTxڱ-<["]Z? \o>!#VRG(cۀsPK G|$>RvU @edu/harvard/hul/ois/jhove/module/jpeg2000/POCMarkerSegment.classU]WUݷ$05Jh+ 1+Th@cM &iV!sIxg@/,oQg&$fQܙ;s̽=W 1^ 7d M]L`Ru#c*iܐpSA3 ¸%]2d˸xw<}/LZ] #aA= 2mp&"wLzHz>r7@g|lP@0V+#8:vAMu'a JEg Puβ?1hKf0JJ1pEDLզPK G|$>ǥ*@edu/harvard/hul/ois/jhove/module/jpeg2000/PPMMarkerSegment.classT[OAEnbQ؂MmA*/:vvnv> ?g^}ń?d8rd/w|gן? "%ф\_W a). 7-7eD%0}nKj'Lk`6vywD%7n[]F FO˅r1%2/.m-'HOSSJJrReGwU`b㩛x1Y>w"UI_N1AA&:hBen-{QS+Dz 踿g#5*g hij| -.!{K#;Wc q'V{z@z6q&XBkD.eĭ~!A~|C 0)Báh㞺"ol J`{%ÇW oBa6eg3k\F#Fo7?/ =PK G|$>)@edu/harvard/hul/ois/jhove/module/jpeg2000/PPTMarkerSegment.classT[OIJzh+2^( xA]F )˙]?M6/1q}ؗM'$& :TթsssӇ.n6p:813pJs"Rf2`$ T aVˆ3:2t{''2{ Z>taE$ ]dCme+EGqzZ qtM!gb0 nxc׮};{. {*øHaxbJ3\T*ZA(-Z^`%|AXXlB%IWU+2qt\7`Z N;"=EP5q[PcWN!$M2Qm3]ݺ/HTGmZˢ 0y7SGP: ]s|^h;V[HTcͻˇ̯8pg ^B- 4GF.5  6 ugوwg |TS3]0 s"$g6blT岎d?P;ɩ$VZ}%w.˭xǘ^Ql $ON w򙤫̺6*Ѫ\a1ÎL5'f07Uh~њVLH%Bs_߁TKjo zhMvF{;?b)$u[li7tIvw@Ͳ8F{lx>FI꺁sz^zLk l٧=/Қx9翴7ďf=h?C:,a;[G̉|PK G|$> u, :edu/harvard/hul/ois/jhove/module/jpeg2000/PaletteBox.classWwU]n6[hD@жH-&XP˶MRݸւ (~?'9xԣ_Cu&}x՞{ܙowUlD]'űYE ZUxKE UzGMWPHHѥ"*qP3 z8 7WЫ8 dFJǀ0KF*qTF=kf H1lDV4a)+ϋoj穡hư ; VXJ&<~ f8 [G CxIxE p xMi!>^dqP ga ;V~K3/j87VόW1*B#- o j޻byO>TV+_LXdPZ.MFG>'Dn#7$|& qseS Ie rT ;^"C$O8/ゆ/񕆯 N2&rn=\yqUY{xV(EÂqP+,hx$)æF~% Ay!nXDYK l1_[>Tp鴊XhcXYu^;}.2K [ӯË b [ƘK5~dP#@]cs3dzSJOCa㦫`?Wh ąc! ?c\ :I $A T c+m 綗eb߅cX t]VO!3*7!:=W:]W@Rz`Y {14qW~UZFAUw [B~z©!K+W'OHG:Ψlt.# !B"=%, y}`eaaCOģzz@ < zNZWLCq"pٟ& 4?HuL]RW,Q-U25??PK G|$>J)Y^ @edu/harvard/hul/ois/jhove/module/jpeg2000/QCCMarkerSegment.classU]SU~$fR>6B%XVhQiMHV%{nq^728AGl̜srs/? `ePC4!Mo)m%1 +x# E\eapE{ 0*aLa\ 0b2B8!PP$m ) -WMc ) Rɱu p*iӗ\%(Ki[(T`VEY~neYC[.5te{k DZirkxvj*;܉-/{*DKk iE9\_`9 s*qWGXPq%||*aQgF,e>FaY<;6J\x'%Vu]+{fQp}#e6mƱK6:fkކx|E*hIL+Xee=^׋e2*X%lp){d[~%T<%\Ff"VJ0<44>  Oned;֒*)ʋ/%T}LEi򏥎ziDkL.ˮ?@,/cy]==i^Q`bK w뀼iKL.n'0cr͂ A$dnPkv{;\/n PK G|$>uC.@edu/harvard/hul/ois/jhove/module/jpeg2000/QCDMarkerSegment.classUmSU~.$ٰ,-P 6.VhQ^bH5%lHvfÐ~/qE-?Pg%Sޝ{syι}oV1.Dːa >APpU%G ƨ nt&>V0*z0э[d>dJ%3AH< wU`2-ӝd -1flC0(΋jb =x%WJB=5״5p)VѐŢ%<`,Ɲ ZfU/B;̑O^ -Ge>F\1΢n"].hUr%/4<#3Ek)Y _2\lcޱ+q } Mn3n]L2v[=a i\ ]WTxFJU (hXIԚMϊU^+"5cUAICxkeۨ^µ1e#HÍ+(q>Ûf.UN fVf<r4Ә}J3ͫdV,X˜t4kI #C/S943ɬ%1Қt\vD%a ﶡn()}{^ё!*LȖp2jUu9. gYRۦ=h,$]z~6~'fhYJ&j7iV"zOlym0^FΦST:=c:?O?SK禕r,қv94)|:5Og)x_2Ҁ/niR uɏ Qћ?"HF?bgt |#翛Qb7}Yz|qX ~@8'qBK-RgC|PrtmC|x L\-Eo.3x/{d[I͆`xo+aΆ$9S F \b"{8ݴ{>{^PK G|$>ƗG@edu/harvard/hul/ois/jhove/module/jpeg2000/RGNMarkerSegment.classUmSU~.6,KTT,hZ|YVhQ&$&)5/eYHv3w7X~逖@@L dr7{yssϞ}1 cGKBdS:"@LJHm~S4Dy_j>|9 :b1[(> e\厎$԰+[ ݉5ȲW ZMz%&0 ^IZoTAO>,Zx261p_H!0!us].VbzonoyLJ46řɭƫ\]nAgv;nDyV5d d a}|h3=~`wY(%K9~"p}YՄ *BúÐڦRP2Pe&%@H̦Bok lQm ;*2̵Oanׄ=3==mtP|C8lx99Y:ew٫֖ bR,wcx7՞.pgINqyi/VHt; #GˍNaM5nzMЄZǺ=->KܧCDV튲a)6NW`ˌk[3oyN}}*d&fdQ!n&&VÚY8\aZH$s NC$Wy-ƶ(a+]8jpCzNS2e\plE IYC'i_@POy"K0 ғf`M$sBLqOza2L:D )3D <:@_02Gc==hl_#C~}@_ :@Bi6zCa# )܅9mT;`16#Ċ#C\Q4c6edu/harvard/hul/ois/jhove/module/jpeg2000/ROIBox.classV[U~,;ð&jtAi 4EXZ.-2lnvhW2 IAz~o*; <=9w=y{&a+]y!tJpKB7z$< 'bPo8x=ZA<&BqE. !"`XJx94qDJX]!"&q>jc"y GxsTcj'4OϊxN^`LC1 +b}cQ}#Ƹմ&;4]cz#ʸ _Phs({ڔըGۍhX5ʣR00z0ZJpSEU;^dZԘz\K UC<.e\-V'*zkiG60dlǽ2^ Uuo87*,-k6Me"-n񖀷ew)ja-}V4NbTP~}\j᪰b)U^q1>)>c:1n>8/79![e3/>50]7Lajop, ~R#CVwPNcn)рR۹SvCpkakخjab#.q S)2Me\a؞6q#ؔ4;IY5^4f\q egs-i# u/Ml0詷M)r2-J\S=yC E˄ƃD};(C|C1&N0a¥#E%MDKx٧ǵy -ެA#崩OyENYSMJ1g-gru:6l *GF8h1>dLȃDx1u0,dv,Uklm- HVq𑭋o"JʠTK}4J<(WdJ@)MZЈ&˫d`!ǒH]}mA\ԦP :C;采xdXpM9]m|sm!=`i}8M]{!߶ď]&3C`L1Uݲ k"Ř/2\9BiQ)}E7JNRdc>/&ʆ4N1u>/٭q 0ۙNW6RMg.6 ;Ȁpi\F!WQs΁U34FG%=\ E NsYv#i D8ԕfQ\8%Q^P>kXZ~\-~<,p[F?R0SX1iHGOc$)Tb͈,7$4\7,͆,K"!ґܝS0ĺ71~0kl-M^A ;6F]VP;NѮÝzuhd' pfK:/i`[ݍ=I9ғQX^?iKсVMNPDVHR;)''"&|X`ˁPK G|$> |c Eedu/harvard/hul/ois/jhove/module/jpeg2000/ReaderRequirementsBox.classUSU&e4\J`Z4TM.fRJ\ؓdav7tof>㤎3~g:? a\¸ %!!u!~]܈`7 Aތ-$#!A-oK !%Z18&y'Ia)]a&Y sn3dkꦪ薒QM*rǙ ZY)jkJl((kk+EK+\Y+|b``@IY[q;w!8jiA![bhʺZo[#=hYnm4tZy%ںO22ʸ we,Cgf|d,5w/VRmn933ˆ!ᾌ%/,P,c*VdBQ.aM: E2,AJ`ݿ'm3<5O_Jk1Mu՘n2 nӲQm^؊%z(cSPϢ{xN-CS|.Z!.Sp" =|siXz6prmJ c@6I z`[f-׃هmERXeRנ>O@r N\-&}Ąޒ *=_D'sF)]JmMGNzcq[QQBWh7ͼ[:2E}Ys\Y0Jr r5.õK=.UPf$,7&ZƐ[uԃ& 1+$[lH$QK<ā~J8d=i*Ch楴.pLՈyxrμS=HwkSoV<7"7 .rv0$ħWgtڰ<I}-9ݤ7!ej2,e齣W_L-H\ZWH*N Bhu'~Dd V ,DpCiOMx1A]Yqw>װ# Fr7B}˯h&4~ qqޗg зyM2vsOh70-?rgsĞv,kYO=c]]p5|(cH$8>N5Jhx{oPK G|$>+-=edu/harvard/hul/ois/jhove/module/jpeg2000/ResolutionBox.classT[OQ,ԅ E^[@@hp }!.lw-AMxA-$Fb8gLIg2sf33Gx"VG7B⦂["&=2*.Ene E>`J7u7ͰY\-m98 Ǚ VsZlhhkkChE+W6VD"Y,#'d -xN|g K.Ϯcb:BBYQrute煻$*"A5:4ז\[7I8*qOU$b;]TU >HQchU1 Cz^t)m(()2 U0!2?'m^qÞeeje%ƞYQzM4-pC+Gf?%$Dp3i9 =ǝ>ĝL ..2DwA^1e.QM"NO493'6]S')>&.ݫ8z}nrC!vi@%C.BԙOPW |FT4PAë KȡUpv{;^1QG .0\~EH:pU6&dMMoPK G|$>Q1 @edu/harvard/hul/ois/jhove/module/jpeg2000/SIZMarkerSegment.classVTI4VAqf(ǎ Pl;3tFKMj"^zy7r|µt<'$ jj>gϿ".c4K^c"^5zy71cBDcUB Ox%.a M]fC-8=o]puMw6uP: 6I%n -}lI, ݪ:qXO%8Yŗgz&P J rg|53~[f-:6` /iMN Q1uI؂-a<ƏϺiQ[>6::{ A27r~v<{kf&r :AX1ڮC&|eQ3_F[L=V۬[(b w4Lf0GJi.+= kŏ6q;ٲ-;%eZoS֝KO쎂zwYn-Vfo͖8NCWOѻtnU?in!.:l O08(sZ̆N R3sm:L:KlBg2qTGβQ4.OeZ?m9G}0jFqGۇ#?zwq$ǿViƇ4!%C5t>E~ǥ|ZI+oJJY1!Ls>óJeE>J+rJ>{%s`%+UY#YKAd3HUI;HC!߃>;vgJ,>xTOOPO0#3LEg)@V`§M@edu/harvard/hul/ois/jhove/module/jpeg2000/SOTMarkerSegment.classT]OA=-n"b?P-ˇ҂F_ۅn>b4;1P7ٙ{g93RXSŅ0qQ\ƨH1\Sp7Cc\A7miMx#1г`ٖO$xHԐ0E؁0Dr(S(:% Lw%,bfU:%a /_URd˫T_ҟ3 tgȋh}j0&w a3n xh346/׿ 4<Ȉi (y=PB BDsj?C3@ߋ.]a!_x9q8p}oPK G|$>0ݨ\ @edu/harvard/hul/ois/jhove/module/jpeg2000/TLMMarkerSegment.classV]SU~dU$.Ś"Gc &$m/\aC^q?pz 37e2"a4%v @ݙsy "a8f%1o3xy3H;" c2\H:zz5Rry9[E +O R'ᾂD"C?7Jڊn붡rZ,jٕ:עNPL#LS! Кnr;T5n9"g>WT$ fhVr̜6if,!2 NNgl2b7$(0ehut+,g- rXS`!OƹqS M)3u۩J(*pPu (=9Qq-[ᡡ!Ht$+l0<;d[*}f^=/0C`(:6:U;ǬBISc$J8SSyR}%!)H[(q*S MOLNGNbb6/ĬTuP #W}3̘G}isp,+VgR:Mrtr{:o9b_5yY,%tf# (W[J&v\uQ:Nu6 ͦw PSksYvztxATY:Bk Y,- D% E/k6řǒ)zlxo 59: 9Wt,Or/&Do2j}e'qh}M ={?2Hڊx{Z&">/W?.ntm?A׶a*&Gг3T."_쒙?D UO,ʸ0T1z),#ZD_)"wмֲ-ret %t_D뀬^u;:etg;vzw]2ޠϖ_B?0|CtC45 W}QaP$w_PK G|$>RTY4edu/harvard/hul/ois/jhove/module/jpeg2000/Tile.classTQWEBvJ(@h bDVIlMkKvMf>/}m9*rNO_݄pÝ{;wo?} (.`N;Qa.xX/($ e!t*># Qtc\>ŵc9ܐؤbEU!քH\32b񅌛nI!ZpVГPUeTJʨ vSYrBl{=>q!hi:CiR+ *]Q]ˡb8O^. - IMN{^9o5`!iLM-z1 'B(6ܪ P1_@=Ә #dCʏB>E_f#wRs0㯣 +S{dx3 ѵ>WُvлA]ekc^l'tr8edu/harvard/hul/ois/jhove/module/jpeg2000/TilePart.classTNQN/l[EDE¶lx-+..FS4{l-Y6F>q%9{f}39~ q7˘bFEB(Cx$x CZ ΐֹRkk8Zk5Ԧk]n5Vm^ͤiDYe|i R[ ,r敋KM pW? PVE2>fV$8ee+*&dL:ClO"HMJx.r ucP]U5U/XʕJ`zӮ LaӶw58F[v\ y, Ǖ9 :Cbd0 CU>GR4I[+ o7ʂpˮfDzam\F 5e&Ør&Z\/2s%еyv9ܢa?|b';i= ="ynMt}G&}}q=#}H=ʉow"{> W{] 19t0Tc_PK G|$>uGAedu/harvard/hul/ois/jhove/module/jpeg2000/TopLevelBoxHolder.classRn@=u:Jy(MhA 5 64$Dz  a!(N 6eg\{6RኆYoMf+nㆍUC.{0wߏûjSzCH$j$ya ^,{z}Ĺ +~("O:|.u(ݨLF0kea|Ӕ 7edu/harvard/hul/ois/jhove/module/jpeg2000/UUIDBox.classUrEƒKv $!?g6l INp v,YiUy \ xPCUp=ǿ! .hx(4&(uRwI CCULEqDq4 ]IQ\GVjn)54|e Sm 7b$k|kTxr[z]t3#Ea&ֹg͞cvXkhVZG42aw\^6u!|۵ n!Lg8^y9ީG(+aumUHCUᬖ=3[D2'vènduQ :f񱂢9(IQOPQEMG >ձ t|e/6}cY" u:YuX&t*mB\2cfSszW,В07~+Yr@M_t+ŠYmy:M 1\} `! Yh7f@h!J= /[]k1$G\ Nϧ!E\~Jjѧݥ5l }pH] },TK0<ϒ)Gw١asgH0@ǺpgγMHR-2@(F<(#EieMaRR3:Gfr*Ujhe+rR/8{tnYn a|ns.i0$ !0VsR ;edu/harvard/hul/ois/jhove/module/jpeg2000/UUIDInfoBox.classWWe~>vavABVD]n-%oY hm;,6;`ҲkE*!YRS9!wvA4\o ߉Mhpidr??61@~heIJ8zd`=a&A&HPt !V@ua&=".ˢG!>itbN< É8L!n;?<ΌO8𤄧m5@IJx{_1BޞDԫG_2j;rD$)]-b{z~ѽ~E }5]]j<^;3C퍩ꪪ*o>_TcgA= H荀SA LO+QaiW@3# 4m–Epa/;DÇk8/mj}lVRO5ȸdi1H&Y]}C8#|(#|,|*3}:om0tG) ޶qխwtT"rwjܝ(jFBw֭ e|/% _ XL0AvFdl*'{[ExnblZ2cT˜qՎHbBO찍$"Fͥd $ T74%2/jԆ~ CR^@˦ʌfC1C´CQL]ryDjOM(ZN`ÝSuON.pVXb&X¤ *},X-q$ NK4=hnԒvOVO/6%L߾,lGȄksܜ5F筽]t- R>0K mff jPP2y9XrK#{oik74h? ^hȮkXCߑ8~Vv[5~n+& F?x D" ȺgY6Q{}ttj$zpҟk|x!%W,n9U3XZ\6I:b$y-Hb)˒XΫ3+̵m [9fĊ@Ӫ %mIi;=5;ZXC+:*>rNb] 6Sh@ieE}Ċ.p^Z! -)$ܛ赝jbO:ΫC,c,](N܎K; 2v_> K;1l,/&p)'lbڟe3S>KQ2: ZF? %dh[p/PK G|$> H#;edu/harvard/hul/ois/jhove/module/jpeg2000/UUIDListBox.classTMSA}"PA@AQ@7QD  J*9b zA=zAhYWgxBIwMwG14☊ =9.='$NUOaDi q:gGFTŀCըiB87n ;7*\ẘ0 z;1L!ۦg lz^chTۛ3vHC`6n aKy|+Yb!8*i[ iDvmޱy@ÑRYnVzDC5 \\LL&5jp.Hs8K*4\ ㈫0) fX"U 3Hh5 I鮓I:F,F&yJ3]Z34;Jr;*a>BDwl+M ĦsHIx] rݾf-Uˆ99]Nr'|#Q^&.CޢiKP=$VH”&bLiTHI󲤤^,C@|H-u ]:] _9'^Xcܻ_zϦގZ0 OJqʹxەo&Q;J hS a8è"@_}PE|USmhhT}Lۚ"OqVhsXG L{ۏmg8 WiYD}`˯l ~JE+f!ȶczz2f ~PK G|$>lzz6edu/harvard/hul/ois/jhove/module/jpeg2000/XMLBox.classTkS@=+Ŕy'"b[ДQl[qYJ0M:iʀuqIǻ)" 8f9{˷$0 ]*ZqLsUT*8" .M\EԯbpWT4j\WdP9CKz/qNAxX C6R=\=-\c"fE_L}bU%]b }$ x<=6>brMAcO *ޢf>3%=:TzW *4 "'[.F'pr)Ķji4a d54 Љ35--C|PK G|$>%edu/harvard/hul/ois/jhove/module/pdf/PK G|$>/P N/3edu/harvard/hul/ois/jhove/module/pdf/AProfile.class xcݝ\C)@ 5Hb6*danڻmmm%H =bkOU+Vm@{.Hm(w_C'q?T.CW1 PX"T`ru3V )p*!%p  <["#ps.7# 0&nC`R!cY9*awqV ߤu,-ʛ3ٷ (od=<׏ Y~HޢGp#~kcG[y6 I5?%o#Yw1g_ ~EW%kuw 'p\~< ~xP!m]<<C?f?}SHx?_K?|%lߨ[G(ݚ3xW&ݗHp퀑12ځdm:>1kY;)ՀnM#f l9ҽn-ߚ7u>6bF)JF*23jnI#_e~B[Jz]ƢeXr8ncD:UҚH x/NKjoy}rְJwS:Nz(ϚUz^Y5rl_ $yHY%ќa ے&E3 ?nk$1N9mXOJJ9#O 2B_:*>IJ <)ibe[($`yCcDߑr9^iIq"A$A2γ@̦31S|JÄ.N3!#f؀!-3S9rp.H%gҖ3!I֑"so׆m͘\?KFY1Er;W"[?h8i/?} OSRRDj %Iv*1rBvz5couF'ML}IJ'wStgIywY Ioc*nfuAݴ$wW)pp`oWStiջ)eo4F@qKadړ1:͜<vc8`T`Gz$u`dRkP:k& "bLMJ7S?c-Mr9SBe[tÂƚ d,X3 ~?Gc Ϫ*I?v'<9GiܢڏN٥WONs:f?22Yz*`6(չ4DP:dhub+V,qv&OAcZ㓃'0ѧWOy$ձn S{g71=\.hcziSrzXyBw&*X贽==TՔdd %9b&m!_ߔ(6ݑ%VtDK,DWq/i= Rh` Eٖ"5SWO =1;A3=_Nv/cWGIzm^E$DN[i,S=D`cc8!;6az'y;VK&=NaN:זNꑜLEUC8TMC4S/OlS>lGQ ls apd?}W~^uwף{^Uu5+t->UO4tF^Bc@/Qh,i,+h,u4V4z>./HILZ0iKet$]!I IRJҌ*\.,!F;ўh0ڹvD;_]@W֍cQX_ι ¯7@'%oq{}pnnX:?O^ZX2:q!yPCuaIx?Ԏ|GIb*%1S^RU4{ wfV'UpVG x{4 Zdo_M_.KGkoDB1vH KCHB2LB ~<',RIQ=UŽf?\Y3GBDCAXME[VK;䞀pȽZXI~#S^7 n$Vz aPUBKE ,&l*<3 i#~ɈmyNzQ}F&<5`B`1sy&O{!~Bzrl>6Ilmq/l|>qf*<{MEq~d猃d"ii9ZegNȭ8[ W73dM!78{kG-ZC0 TBF~UHЙ=P=_mJkl*RA*蓰$L> Q r -\ eSp1xU3 /X4, q\i`&&\ku[08'ɚd͏G} s(mZw5o[ȖQh&fHGz_ i˅>=z_aG_bxZHzRG>LtPɌC1( C]:렇z AIUzD-( Yn\vҜ2b| PY}y\:^P ['Ykw]J0~\,aX'jJ؃7IY-J@$Q\*@=E/W<ǟұ,z` PrM)e)W?- LZN@h Y9JSsMGtjcH\6ֹn=]7kB^K^ǖE `&U0 6Jhiܓ088#݇t3/$:]1ҩ4op}fS֧y%cˡG. -ƪ{tK8xBa<mSV+ts#nG ?UeER<%Sy,5t?U{A g Rbx-IH#~ -=GJ2V|C{dHS7qxep!͊km< s-'qӥ`'j!D1pW#1Lnp(pI9EQ5<ʡԠlymiNNڥaw\uZP#1 j+9US:cAc$U}YFNHT\EH3 +νGeQVk3B }fJ}V}TAckƎ@je.y%E«`) CJ8/$^<$9 W*ly@h49 uΑ9Lwœ0겦˔O:(OQfg\Oi6: =2"<;Cߖ[NŞ) 7q=Mc{$:( qx;t;:k(2;U [SYwf 7/W˺A{YFAE5:9AP= ۽cUvCzVae_Z9E֕;\B(@ƝU>ހ,D8cRN7fe'[l j/dPIE B;G#G_NJՂxu"qG~̓_È;N -=_$_TGV}9>,j$-tUv kn6--ZT'!^n'jJl*:$tMrPXr f8;׷knn-vB 'dC+ y[Q(pY̡Rk$%8 -0:u)v8Ziך9D}!e9+mdAPTވC)eQyq*k~;qpHut!>1Ə7i?p N 7pun,Gcܻ(G;ŁgZ -#E;!$!;"tVKDU5sέZ~^hyg]?clc6Qh##T'`﬩WjwgS(b\D+VD«~Sp#򳲠}V;;~g_ ~q4O;?WTˑ)Sތn{'hnEں}w HqBKִ$LEcfh'w.p*XL~p5Ih WQ({SyfF8|i5o߼[^tB{}TG_stӰG+u `$`%,pFK0tzWPIv`K֖=7OgM5~nWA^p-v]JaK*_c׎j{Iq}/7{pC Xo ߦ wl .r8|oЃa;&蓰&%Q^=xS9edu/harvard/hul/ois/jhove/module/pdf/AProfileLevelA.classRMO@} HAl#Ƥј`$pBtKK*%miQ^LDq'v2oޛI3PHcg~rŞ} e@xi;1gpkprC\c>1LECQs;y@Z!uYM[=c+j!@s4e'Css˵Y-BT48AV‘c.X4hX4~<<,aO< J{:wwi0M.}[OOI(IBL2e*BTU(f7ޱUU(QZ!_PK G|$>+3edu/harvard/hul/ois/jhove/module/pdf/ArrayEnd.class;o>#..fvvvNF6̼;Ff 0FTVFԔRĢĢbTҜT4}ǢJ׼F-ԇg1(20]@Hy`>vƍ` PK G|$>0\5edu/harvard/hul/ois/jhove/module/pdf/ArrayStart.class;o>#..fvvvNF6̼;Ff 0FTVFԔRĢĢbTҜT4}ǢĢF-tg1(20@Hy`>vƍ` PK G|$>zѨ>edu/harvard/hul/ois/jhove/module/pdf/Ascii85FilterStream.class;o>#..fvvvNF6̼;F IJD|}ϼҒ\k0FTVFԔRĢĢbTҜT4}L S̜"I 0!H0(20@HyB@q& ͦq#XPK G|$> ?edu/harvard/hul/ois/jhove/module/pdf/AsciiHexFilterStream.class;o>#..fvvvNF6̼;F IJD|}ϼҒ\k0FTVFԔRĢĢbTҜT4}L ̜"Q 0 H0(20]@ HyB@q& ͦq#XPK G|$>1 ݫ2edu/harvard/hul/ois/jhove/module/pdf/Comment.class;o>#..fvvvNF6̼;Ff 0FTVFԔRĢĢbTҜT4}ԼF3e楇%攦g1(20@Hy`>vƍ` PK G|$>!&wFov 9edu/harvard/hul/ois/jhove/module/pdf/CrossRefStream.classVSg}.₠DM $[@ Ң oma!X f jֶjxt}LNsL ]w:f|GN'xOi&> a`Hð>D}0aćQ[,4) q?0ILpyOl3a3|)Lq2yg%^&j8@N l6𨑚4Rh&NZvxl49iǓL ODct4ԁ5^j[Ʉu]솕S[6x0]X4#Ll*6Stx0R f"L4Ci>h@Dʜ<2c>;2=A>j<goh5o)v+aw l]j.H2ʖ,߈[䟷@1|ǘ8b M ix] ;6xvFJD49gxشm $$N \[[ަ,Twhj TM8ǶM2L睢ЖۅlV:L)NYetq0oDSB.#z xhq4|C|DXpc|BPWǧ܀:>!lJrtK6Rƴ/p^V4Q ^Gu|ɸ͠6R8::.+JY͸ ʦk|Cq utau` öj'6v|[AGRIކ۔ew6Gcg0Jd2i+'dJ ج_+m՛K@SP/!i}-uo5/]󼤶Sm7<]4#N:oׅ +vQwpd^n,zCtfںb'2Yp}8>rTsdylՔt.e7KД(ٜ7*fQ,6edu/harvard/hul/ois/jhove/module/pdf/Destination.classU[OAnvY^e" MAxх`qm0|M$9ҖIliҝs3(}~4}1$9®rć2dr<ᡌ*q0!c*1ʰt PGDdSBO]Hm ;%-[OBkꜾ6olL1Ia8cA"j°-&2 Ed=Ng ҄ J>b ڊ)2$ q<&"ɷ"xB{#s v{"=P V\N(!֊p2G9 Z*t\EMhf.`qm01` =U `KgDA .QGcf 2$Gm3%rK}{"a,"OCÉ>1z+s,RmerZ?Z?vP ul.$ 򐘤4ʇPWI*vmA \QI.dz7I|Vjz5PTW/wxO$v ( Uk4{a8  ot 3笺]g+rnd d>WF? PK G|$> R8edu/harvard/hul/ois/jhove/module/pdf/DictionaryEnd.class;o>#..fvvvNF6̼;Ff 0FTVFԔRĢĢbTҜT4}ĢJ׼F-4g1(20@Hy`>vƍ` PK G|$>1 :edu/harvard/hul/ois/jhove/module/pdf/DictionaryStart.class;o>#..fvvvNF6̼;Ff 0FTVFԔRĢĢbTҜT4}ĢĢF-g1(20@Hy`>vƍ` PK F|$>2a 2edu/harvard/hul/ois/jhove/module/pdf/DocNode.classVmST~zwC(Zʶh7*V}EY@P+MXBGo:#0cg,茿{]so}sx*zU bR<oRц<ǴD1ms*TG;Y2mcaـi<Ժm%)g;ő*a5kH>"=qSFêtL#Ť^5|7l%Lwo7a; -lm| %U۰Zԉ"o>0kמp>T4lCIJ~PgѩvJͶOj Cԗ7$whq)aUc\Wj鉬N07T|\lM-:A#_"FZZġ i]š[Cj.fe:'%宴m5q%wmAKъ(ԓ\}+'C+E)iHIBʤ-`ԬizfhwW`"{P@7!;+LpoT. ܔrvaMO1tʱR=$Cű&cSK>o9BZJi|>{r9:38Y.ҘEC$ۤM9}T'9FpG [qŒLz]S#eN&2)2b7p@}oc>—J/)xyٲp+SxI@ غyz#!{F,r@3QUH^͐/-w+YYl2=\/˄ UǗ, PK G|$>hCY<edu/harvard/hul/ois/jhove/module/pdf/FileSpecification.classS[OA=.e{V^Y((E#jȰm.m6Sj%DE/귭n3oϙ9/x =2 qe$d$e0s2 XXx߶ksf,P-Q)]m5cklhܦ7Ԓ7E]WK KZ.U[J/·jVL)BtPp, eADreEر%MrIlO3jYh8.qcX/y#ni*e /v\6x sn:,{ Y"0y.;c 9,~wA'-ML˘rdLMIwKVjA\7atG`0/K7ZK`Xr-B '40]ltpp^0+J!x7x"qJgH:eNx1N|ũ~Fm$t2vkDe qLp\8n*EeO;]-aCC?$3ƝiO;PK G|$>~@*8edu/harvard/hul/ois/jhove/module/pdf/FileTokenizer.classS[OA]h]ET@-[e_j$BP)]n?7/O Dsf&sΜ9o3/0c+cѶa1gqBIbq:3: rYt#@R"RI.pܲWv+=1&o f(_eo' wrT4T]Ϯzv&@cOɖFsjٻ ЛhVٱnբxivVn2O hNQ l| pTtuDܣYr# eiGm?aOzu{iʞPi͕rTzLU!gmOйGXȱb/ZrʮpY֢SUT,Y~ aQ\6Љmc=| zA΀<t6M3pacl\~ȄM9 Z~LSRKD@@)7s2YRrSǒUxfƞX hC]'݃.tQg;i0ԾW(",a}YGDxmf2u# 4 oYtܤ($x h !bAZm ҊEU`T(Un%[3~'7髂^69ď~_~D5t P^Dwٝ E/^!i*[>لH0ڼl!d%~ypc֊Mb5@l[0XƬcK?h`5q?:1BoQdK:~PK F|$>sW1edu/harvard/hul/ois/jhove/module/pdf/Filter.classRMO@MBZ>Z I+=ShrEIq8ERKzGMAC+{3o[(б*6edu/harvard/hul/ois/jhove/module/pdf/Hexadecimal.classN; @g~m<]aZl_OqÚe%Xx%n8oxXb"@? AJW5!ȦB +ǹY"",X5N18eQZ:_\Uf' &]7n@4n@PK G|$>u"2edu/harvard/hul/ois/jhove/module/pdf/Keyword.class;o>#..fvvvNF6̼;Ff 0FTVFԔRĢĢbTҜT4}F3e楇%攦g1(20@Hy`>vƍ` PK G|$>a 8<edu/harvard/hul/ois/jhove/module/pdf/LinearizedProfile.classVsEudpAs4A "& xno2f7n">P Kb.Vx***A-$~3 gݚ=ogt4`܋tcN4lѡc vrQأxJ䬋c r'#!٣WOCHp 4)HiQ}:fAÐf OhxRSOszBB4ЊfYV8a%{GŠYNJD }F.; |#4i10,ϥNpMkљIPNw)tMutJ#У#b'{0lgۭd,5ttIb&]. `=-sy-Pkn$i%(L-dF$)22v5X4K%B]Qꫛ4"!M39*X}ӉݸɈ#ҩİؘO]ݹ_n[(^QYfMKw/s:j:]߱<9]%KޣDZR7GnӲq].Ӓ[N I7p,w|zw[@= VSPr ~W*z5_—MYן?XxjYΣf:Xl'h,0 ΡpY0,VtTZ9s@FJgqEr^,_k4>gIʳƀ Q7u5(E|{u؅`КCi,+$ ,Vi6v]E]9ju@;3TzsTzA7%p91z nr/.d\P yRA3x0 OTXՄb 1G,@+*jA(G8q_ll [jzSIu+e=>V4^14p8.b=Jp%0f>pKObZ9oRi\BO]OI`]#5}jy#:DwB鞸+R{+]X;,QͥUe>ul'?3u}`5vHkЬZlSt;; eIp1EK_+^ }b,v]gQ.|cdXLƔ}Hr=aZIԖֻ=Vl,wRNkڱ<`̙1w&Kfb31^k#Tm1~'TJ0[9tJڀm☢1^7E]+ Y$Og՗PK G|$>LW;2edu/harvard/hul/ois/jhove/module/pdf/Literal.classX xT>w73yIK@6$C a @0$̐ d3Dpm+vZʦhabZZMEkk[ZH7 CG;z}{1\m \lYg\}]y%v|5`[<]_mzWJ2RiUi Ugz^=牵PW[S Z ժiJt%*7ޢ*ZJo;*K>O_P]zO*}nS֫SGLb}Ss[hJUv*(ooGw) lcwӍ=ϊ3*o/4Ha34swpJ prP .¢ h&b6/4¥ٗ>g6>+¡ SJgJD6(W'3MPKb"OvVRLH>ElX{/2x7]\*c$۶%v6_^6}c4~Oؽqijbn-]ȡs BUeE]YMQ%%6Bμ3ZX^P&IcRvDhfk]: %kWX]C3xL<˲8>0:{YRHN;&E1*fGNGhSsV,}.]rPdFR̉V'E8F"GOvD()0YC[-#aE/ 9Rjb^(pš .5$`*!sUq٫xhxҥ>O( q+7{?O{ ߏv [fƹ`"l;MF5hvx˫cz|۸|3-{ɑ)F#%kA +*$ۥ%g&B^ť)TȬƨB2j\h7.{k:k+ƵIs])t*NACc:F:B^xf`xhQqХZE%Τ T{(8C"O ajp)*+‚Dk u^,5e%BGs֥6u8d?FETgzş鲸.TgJb&']>V,t}df5YL^o*:L٤"B_V+8p8C.ĉ>)5u#>=dOK1+Ur-ΔRM*eb 6A&WM^Dr~)uYvXO qC}nWJk+U:KxE$^IH瀌ir@LqSÅ {i&4E?1w/J(i#oU9'rmȹƵ:VN~/;w$,qN*q=nm0,foPA$rRKt q`UxN DI $2p_#ovZu:z FM>~ZsY?ެ/eݡͬhng5q4w)5/h/jӒXoܳY'~Ysg~Esg~UsObNeNcMIYTr&XD 띚hb& 4z&YD-5cG7Xhֽ>u?z/zz` XXXևևGCaXOOOO?X> XO?XX `)3/_X `-2 z `}`} `:{?oXX`6w]c}/XX?X ~~ `7c4z`= C0P(PK G|$>Y)|/edu/harvard/hul/ois/jhove/module/pdf/Name.class=OA8Ch6V B ,wۻcaccb4{*+;Lk 58Qa &|"O V'~,$k1>Njex >a~ɗC~JeZh=B Eʦ|`4dJlg-b-Ř]r/vW*xJ122Ke$.f<,d9Be"uQ\ n{80p[ a|Ũdڦ-p}Gzk^ t+Eyf_PK F|$>S&N 7edu/harvard/hul/ois/jhove/module/pdf/NameTreeNode.classVS[UroNr5ZZ|h*mAQU@i(A/D뻾߯qfgApD-ZG?uH@C?dw9{vgo~) 1 09=WýO70_ChxIk؀|2 )1M$F%icD#I]$%üfp%XxDxLC rYz<''% 'M31#dceb#ΘĺCĆ)#m&]0u p48۫qko*͚K41+5ƌXֵX9:i:'2:-﷝q3a%,WTjyJZnɚd~^HJY lqcF1`S<,W>gQ} )V&PͿ="6 kQ2i~sB`׸)M6ñ7m% MxFAxp3ӫkFG;%ts&ӒN:`F&uKKuc%RGF+xʸ:UGvQrcb7/rkLȸe]1öE/nU;vWvc%]3]dyIAhP: {I'B0::ѥNܥ5.c}%sGu?SFK+1/ Niou7u%.`nZvIQC<#PQP^#Rw^Ód靯xG}4LfƱdJRD%LЕ.r&VC7gSMZb@дٴ< k;VJf1:E#sСw#XװLd\3A:NX79qɕi$m )^g_Zeq(4 %4,+$ 1#%IIqx^y|"߳=B{>DgQ/R? %Z_A. ШճYhSFA_F 6JدEdvE´.E춂..(ɰTD|{:M}9\zzOE]/1CqLi <旸Mv% %JK}ëI%}3pm[BU#QpGɟ@M+ӤJ/F :Ӧ~Dsr !38kb)IT5etZi(G=LHMZq^+(JnChpSL ] +l@}Q|/ǿ!ʜlǜ혳scvna9j{qJ;am%: [žUEV5iPB$dԐҠ!HĮhvM6ȺU $CIe,| rOL>|qQs\9hxA$*(P"g7(TҨWZژGMj\"9D+II+oÎ//PK F|$>CHJ2edu/harvard/hul/ois/jhove/module/pdf/Numeric.classQO`~]W蘃) *NԖƤgc0#ARѵKDƃ^8`3!$.&k<| <}?חnb~:40ׄ_ΚEW뿤@dP# H9~)Ƞ{AYR9KA: 0Mz@'OȽF 钕^uSTڕɝLedBupZ4 Ph^^ĥLT&"E'I!ZF%ӢGCR/, ƀteب 9%-Ӎ~ 9 kTA!K*PwҝvjÕPjOL/:PK F|$>:hV' 7edu/harvard/hul/ois/jhove/module/pdf/ObjectStream.classV[WWN8qQQ0Ն$8ZжT@P,6ILmE{{wV ˲Vk_|h{O%v%,89|{ooK Ys $F0<Ũ#8*zK "81Vza4If\ &% 6 )4(؄d#˃0%qBbڋ 8%qZeHeM#)=khlmb<=ejɴOZƈiP.kNaEs;*>MV:gOH*09[@ smdmfZ*'c')]!=e]Ѩi۽VȭaN ,+jsVB mab7me p,I=%LW$^uXBF_S8#LG SiKFJq3WdR\CTAT*:УTcxoа] XE &*.64S)3,αoxH>!RQ.ޫ3b%3 %VC$ѫC|DU7cWъ6*^.?=93ePitrSqmwSʅ/;u_)W*vҗʙqk"U;=~P#~*r7-Q)a=KgJS> {~I"KEX~'rMn X+NT8Y\L^HvN JA;MUPܜ+lv9V}߻K/HsgխKH!x.y<'>7.[6\G@t5K(lIRљ3tpheQ^p_qO!z6Oׅ:? _.;jY =.wnW&O_w-"I`b-Hئ9`|۪:Ѝ6ӿC!L\x9:#KGKHj$=Nwj!If!<3 ̡vtr4X2 eu?(AE&44, ,ܰ9xtཅOIt)MI,M;BiҼ=vPkH%]z"j(Wb {69l%2}<`xЍg]9{*\P:їZrf?>(9vfzx=4tpZnR;X]#+` / zU\?<Jpt8؛e.gKqh?PK F|$>@r8edu/harvard/hul/ois/jhove/module/pdf/PageLabelNode.classW tW&3LI@`6I@ &ZIf,lvXV"jM"-VЪZ=Hwf6lj`ϙw{g *я8U 7f".?V?$-m~0;y. =x{%Ox$|P>$a>>x8#<<'*I|=(O? 8IM 1&㘄GXC212&dL2qB2e<))'eLe|E3,U?N4c_uk0cR0Bl@ 9#6PH2|l@fȌ9<F_ȂY=g-`̈́cZ3+(2!nm!d&xU~=o[2P 3k =m+XT,[$([fN)geWo!n$qRTvgl5mU,n- i< f)%V>gd얣'Pbgmx r1d_J|$M)cgʙ4FxjkѳIZ³n=kfYUAEsV;@u<`oɈHålZR_2mBʧGryoZ%C qsdWbռ()#?Q,$ŝ ɴ+skfPO ,;IN+LJոͻYϛ(AWcZfWM|Ki~n &9L)6 l; nNHHŋ/y &=U`O 홢,FNI u|5Cz*i.rI,NO?S Q(<]nt(dl:$\/K\id 91hCkITNa@aa3eRiiǏta̅+x-w;ٔd[d~]v 2s¹U^ж x[hfMHз'xtlq=q:>Oژksv+=^Cx D ~۬gq9r:["Kl͙eu |/Zq , Rb>H":+|&5d͖̑|1=yfo_=@ 7v:ЋQ().B(Y ̎4[mJW|~ɒ}D)׳Yvpk(Y2~3L@}jrz]_ְ!]6VC݆lH=džvl.an[Jn44 G.: m'm'ks?2[$M| R' DOCPal$vlUS@|'`zto꺲%ʒ}+FF!G)EE;r:œXry偅X`;/O E IOl6KK>?Rv^NaiSXex!qGX:*v> cx,包[؊cvmCmv(Q&Yvwԏxl&pL4UJX،c * r9'b1;MϓePMj"#FIVNS$^{&mG(j;eBbv%v`#g0E35paؤ]*Ml5")*N@˺ɸhdXckٖ]k$OؐST4<)E(W:cϿ$tfU A2{d(_.((}+ ;szEVvL"4ZM]=ڟ,Ggwo#BS0-9^γa<4:g;߽ڢl(`aK(9*M!= AXSmſ0 "zB(:b;,w`5}軉[ P pn`ءlk+lnrnv44u5u+cTZ65MsGJ,9Y kjjEԨ+_%|c1o䯗:)uR n@0&gFQgfÞi }tɶsTo A?PK F|$> 5edu/harvard/hul/ois/jhove/module/pdf/PageObject.classVsUXqYep8C=ms/M̨){wKB7S'wV A |H3e')A_D4H?骪ЛvJ#"e"U |I}]xS[9uV> 8৾#] }Κ |H #|,|ZbdV+0e]SJ,J)lI Q u1`VׇM|jU(Tfr&3vvqK UPuV+7W\ 9Uؿ%O~t'$|6f86)jcRűB) b11y̱CD5$oR7?̕`e qS MeU. X*].wXG%0ufN-ϜgNϡաL~GCxr9l)TX`lce$߸nJ7.8qd1_nv@d;K7edu/harvard/hul/ois/jhove/module/pdf/PageTreeNode.classWsUn&M@+ EiK<BA+-TXmeMVT|G}[fl:Ȍ3x&mhJss9=~@-$@%a)p?qPK*P%͑C葰`p ^!)!A1`pBڏ!bv18OHXÓSbxZ ψCia-02Fp⌌s'c|"SLv'BƗ%Ո| E-PcF{I!4V1)B _؄2w#.9~d^Aь=2E>R,45iV2 gTI≸,4_-o.7H}rիq0W\c\~$TR[]( iK`nFmH%]tPy$SmHM}Z ‘KS搞W8wwRbTmfzAR̻0y`4>B_~}Mqj膜rI/s)VӍ+F7FD"Q!ܙ;S&&ЬDk&(N38 ~LEr!Lk((*U]6W> RՊsNw\bqo'H ONaŽV]^Fk$⡐3XLtʣBq7!W_"Ť@sWCX*/qZe Vx@8VTLaU\Rf(qYC!G ET-]idqkDxb(hܚoqFX&v)Ě R܆))) ^AcG/+c'J 9v1e )p4r<\Zw;nzk*zj#9jU"* EDQeF)UjƓ3;CfE4'x=D/ʋa8 I8/YZ)Ą_`]vZTufF(>sZ5" (c3CPg̡͡R 1edu/harvard/hul/ois/jhove/module/pdf/Parser.classW |SNz{K!mHPp%DR- ,Ks[iRosScMs:ĭLI',6~S~*I헎_9s;'< `X@Á lyB=<|҉5# G%>%i/Tg$q9 !*㐂'p 3x<O0Qc^|Y×$S _xxO. oz-oK|GAlx!??gX_H< l#|_/I`x8–?߽?lſ|U?ʶlzJ\g\tfьxtg.M'2];{ho:KѾxwtSc%]ٵz_vhܦQwһZ@u.me(mzחĽU`6`uS/RYT"{Y*d)Ԍ]WR !^)-ѳ^:\Z2 5]E"H& NSBƬֵܤH'.OjhSRdVؘ5ӼF%ז\I(X5< melt8'WzFZZ$efQU4Qd^<>H ][n]w ,+9]̸F\XKWHQ!cTg"cXA ^ 9 CLY*5G)ĂؓsAVLCZoY_ #뺻 Ja  ]dR%j|Yfy3]Z@ERT\Tv^Ige@I{]6MEy\ڵdwXgt#/36xQ|0'ndz!ucۤ9LkOV,t"'CN8\[R{dd=&Uqm^;p_;f\/07.důUq U}W IT ¥ /Sq'n-7l&@,&+@1]Shiw[8*T R p>7B,8Af?TmRt6ا#|>ܠ,T+UD Ur訢9UlAz&r^^=eM(k<.YU1 ̙%qP)" p^,het*%RA-`*׻C7nLCpG.ܩe,TUI:U& ,)/7^}b⣸*x $U%zU,U K%lBznPGec%z1Zi%L"mY7.a9PT)-z٪'d'2-LV# &ٽ76Չ=^Z2GL$Qf+^f21/*)1V8ITV [90cKTa* txS5S:]!N-/GD{3[^&qп=G'1Oqx9i.+_G8co6]S!WI,qƷy PK?fø82EON=ű~-kk;]3iO%!+D=Q9`)'6jt0Bܚa4Ѽ]t\(| S%{tdެT S\4!ZVHt# $_kO1ё:uG+~_>7˭;bC6\ͭ1%)*XxS;Bm.p|gPT(!ls y4|3edu/harvard/hul/ois/jhove/module/pdf/PdfArray.classS[OAv`Y&zAl[* --ja YݦlWhP->o$"a[%Bfsf|ߜ9LJz0*q2|HԢNBj8!蓡<%iasV981:k.C蜾kE״ #:96!D'3C:jڬ^X 9mhi:6䊖sڍ9< ᦪjt's@ɔ3L]$]qW>)ȮsiY=ӞÞl C" F9! v!ߡ :q^$Z.NO<ñC߿Mjѭ`IqI 2b 2480k]ӱJ,GՆl9)^EH coD2 e']DCv(x'tHРe3,-|ްi:[:No/5S=N;E 5NX==:vZqZtm4:#`Y=&&LF>[F`N2[G^/#8YC^N9JxW1* M"\x .-ALXD.@GԐQ`R*RkU(ѕXRF}йxh v&*¥_m!sd8qkDpjE3HTKXBiѶki46֒l /,AzM"'u8;TRFrPK F|$>s_k-8edu/harvard/hul/ois/jhove/module/pdf/PdfDictionary.classRMo@};q8MR$iBNHA"HET傶lpȱ#H( !(`1Us43~;:Q4p9J30qEeJY\ņ2 \W27-e+ |i=1< D/]<`H[ Y6VV&,qyBs$v·x7t'6?бy:ϬG=4"0LQ\TZ 5#D%d{.j$-3,+o<z"]RP?L0kb-/V6q]kXgĎlsz;zq?h<T>o'[Ѣ 'TrfMqX",Mc6MhitJљOv4zqV蟀G/cd#$ #Wc\3) a,ǰ5**A~6a$1Vb\P1Cw0еxlŇzb' YPK F|$>d7edu/harvard/hul/ois/jhove/module/pdf/PdfException.classJAƿ]Wm+eYujPFEPt+K;RAAtPՙ\LH"g`|sΜyx}pbϰ%Ê V51hMϲz"``5X3n˰[f蚼pv~i񆤫tqaTow WAqjA9L"פ~"/4 >edu/harvard/hul/ois/jhove/module/pdf/PdfFlateInputStream.classV]pUnv϶M K)mmR Qh hJi -EBɖl ㌎Nfx`RG'|^gߵc=gwMg{=svßЍ؀#~lĄ~HY1gH0 I0 ?Vpҏ&RbƋ,[M yo]d(1f8g"s/gvN ^'zTLg/sxv*|<+GyC.HI3eZeHzOEK.DON茙*eh.5IMN'i3R_.oHaD\@ILJd3OEXO<3hdm4%:GKm$$UC}O7-뙒!AT;zvbXi3Z[q#0xoS/Z7Zԓ1}2cX#ENљ;:=/$/-(xMq x9p*#19 f(*+y 7` U\0 U(*UgxR`ݿt&3D63Q8e1]ئQlKBxZ~+/ wfP~1~8M{nZjaWFz6ŝCŢD}ءQnv#v(ݚE:4詿,#?n`;;,Nzz._%5=aI+%"#b‘9B:B< wàYxf7ai*CC=CCmj Dht6 U<դmQl˪-^Gab|xJ"̢U k6'f9ϖ*fz2IX)ëD}|@ rQWS@%8\ Iiv]r76Zy$9T>B ni+׬{Dܐ|j3+jqF:__8"Enk /ur߁Bsyzp-4͐lL}Nw]{ɡ+hirb1.ȢKh(uW%~r#NMt5kחDžTn#ɇ]Cq_íqy:'l_aVl]FviU7 m2Fy'^5P/[G\l=;/nN7d3=c6z.HTӟBumYt]zZ/^ѻrًK3?d Re˖Ņ1='S4ES_c]K|y,ίy5U4__c24gKn5pR**CQcP06Yc=\, 9G, 5c&D&gUm>g޷Rz<e4Q9 hYQliK9gf*hBo(5"/#&.>aq]h^k,jkOͽvV$~l[ZQPK G|$>qf9edu/harvard/hul/ois/jhove/module/pdf/PdfIndirectObj.classRKK#A*w&>~:=*)K'dd8#ٙ<Y[=*zn;s01aXÈWcyd1^&3` j-U7ڒ);Vŝ7=&ʉDS;f-Z͠~Dή>DpBɪT^(o끣 ,Y)nYdS&zD]&cfL| +'~C3g33aLXx_a[*9 )Cw-گ6*P#i}դ ֊0kU;yڅi@7X7ϷqHGA68Ĥ?f2j¸AVcQ҇rs_E>k8c̏s~`4@&PK F|$>ƙB*->edu/harvard/hul/ois/jhove/module/pdf/PdfInvalidException.classQN1=_tcx,\h\h\`X5pű r$.?"FcқsNOo/U k=lbx,LNfRFC:LsAX@_Xt|JG,NYhR-'t<ҩOCA#>7^YHIb64I?W"ꩁ6*\,x*.*"8\*z*ew"JVe?<{4I`s6o[(1X6S 9S@@f {snn!-ٸ`zv /I+3:g8<>PK G|$>ZW/4@edu/harvard/hul/ois/jhove/module/pdf/PdfMalformedException.classQN@B? 7B=DQ-mJi|-/6P]h QK˗ٟW{شPIJ P3Q7NP>(eHq c܉ 8W=PPrb@ [3fΐgڸzI /IN'PK F|$>̚A4edu/harvard/hul/ois/jhove/module/pdf/PdfObject.classmN0KJea ČXP`bE)qVi$O i| gLv`Hc'6Nl8y(C30_ L[t}Bɠ#Y_K 5edu/harvard/hul/ois/jhove/module/pdf/PdfProfile.classVSUd-B! (/* ҢO*.Ɇ,d >9c_|)><чJgq@Z<9ss7=>A82v z1.;B\bB&qEVd Y=SRs5W2Up͜yO ZѶ.MmKSM.QEvta虓fkY>հ%8Sevf3 ;Πƚ%J& qj8ǘXP5;~ cWS 3ˮ=WuU3c O#[i"Wd7;zIM[{ uup㡮iװ aRCZQ2'ܥDj {&IHx)aC3۽X[/z_+B+L#RE|pHJНJUe]ykBChW=\ꕢ*c$qxp .pH N0COQ]IOx %7:8YB@"]0VOhw PK F|$>*oJ*:edu/harvard/hul/ois/jhove/module/pdf/PdfSimpleObject.class[oAå mKK[RkŮZ/4>ƄxbK]~?(M|02eb2sfw\f~vep#9[R2BH{KF† Yo-a3U9 :o1dsUl]jQ\mZkrWՒk 1C.5 X( =K DFj)nғeO׸-FN\ʗa)u:уcx!+Jv.%\=l|F#0$Xe˙S$(|B/"YNxG=BC%Z` t""/cM ANjiHO$v:s& * QN~2-D@`7 PK F|$> 4edu/harvard/hul/ois/jhove/module/pdf/PdfStream.classWSWvY6+`,QV$6Ro (5%Y`1̅؋_u/3%LOPk P}Δaso76pJ,/e@ `PEpUQW96u]0G\E *p^E)U4"1,r(pL*xCdS*㒠[x[; .srZD!4©L4pbJ<Þ#ofzvĕ379g+Sc :]D;Pi8{{[L`P^B |w[<^kHE)}R%%i*0ׅb&ENQmGEby=~>O҇A@PgWQP%U[]U,\OQj_IfqQQWJ?o,}fb)dXxrozS|;5KC;hxKpR*ue64| +-qvA6~=(CpnqO1 j7y  rr "Skf) 3(ї"_T%&]H&9 j14.\ Hzr$Mep=%S:DE(k8U ?*e1VOMP ]pWii@/3TڕAX'a##\@m|g=ɂaL:ovEi9g^2aA.le sejBAO#S^mr\}jۥ uN Jdži([k]8O[riȕ"|'uH5pZ*:u]ØO*El"5jrfc>~|h>ՊxOnϓ>7i3 me"6_Q̃j u|'mPZ"ڂlE [=[ݓς0vϡ>v0Jto5?R8^wG*v1(F=P%nBD9qܽ 2NiBL{{ ? y5edu/harvard/hul/ois/jhove/module/pdf/PdfStrings.classRksD=u$R*GR@!MKKCM4] _dio n~ 3Q]WOH3gW=jwxq+*K6&apOq.k=.}·*aP# BCkxD8$MxN ^ ]rpit~8<'婊O ,[ÚW?{^Ӯu7mjVVsVSU ]x"0Rv>78LHƹ vʝ9H;'s:Џ-l܏T6Uu\mC'S5p|O"pw^\\LoI53]6gr=I 8)i)%p<.U8\q;HQr]ER/Wh(,|4A LUrΠjQ?M3T'C籯u faSWnŅzi@yL&Ɉ}IG% DgumnhWcw? 8rd"#鞅ǗH[S̷ _l]7fla Vy~%/S?b^S] zsכ^.x]^TYjJ^zh ,\0h2dp¸jWm{35ʹt3tE|dZ|dk2M{p_ReGhrH;9q~2iPK G|$>wM7edu/harvard/hul/ois/jhove/module/pdf/PdfXMPSource.classTkOA=V] (HѲmI4&bИ >SSnvg&e}XL5n2w{3s2ֱۧ`IM*HDZ-VQ1KҬ)0x %aCq4Mñ|q 0\nJC:|a9.MVj IT]sL>`H >0bT0вC9 =qLn 7gFv/]M1D32mS3 `n;lϦW. җmcasoCVuiHsWC 3.\pW4l>Cz@]an55Cq܋& H?|X&Sq{#Tlvt Fq9b:"=izQz$y1AaR`@edu/harvard/hul/ois/jhove/module/pdf/RunLengthFilterStream.class;o>#..fvvvNF6̼;F IJD|}ϼҒ\k0FTVFԔRĢĢbTҜT4<Լ ̜"Y 0 H0(20@ HyB@q& ͦq#XPK F|$>~00edu/harvard/hul/ois/jhove/module/pdf/State.classYwZU $lmlqnTIkk cfr %&gKsgK_H_/I$ė%2W$fJdI䈯KoHoJoIoKߑ'+@|Ob2eGď%l'Ug5 5%:DxEIҋѴeS {kު^4Fg16:^16kkFkwSp) f̬ڿ/j%e#|"$b̖z(nEh¢Ar,_ if*F|\O_ǎ_WP S͘tV=/ir'o2~T#jB^`n߮&<zS&R\Me"Q5>Pnprޱݮ3j'f?CEuh:{vk[S-SZ=gٛyR[n`ߚՖn h: iFq$8K1C(Ri ,E"G(P)Js K+eU BQQ8kuE BT8~`h#F)3IMK3hjf5sy͂fQ99Y\մ5+U͚Ylh6.(z@[UGTRB~GM=gT }[x*QF¶TOp}It+hh_\dKv}=~0ofaVogN؏~d؏? 8qdQg?>i'ϰG؟bOOPK G|$>-59edu/harvard/hul/ois/jhove/module/pdf/StdStructTypes.classmSU7$'i(@'kjc"h մ>m ,,qf{o}㛾Qgt3G=wXw&sw=s6?9epo , [zU-mۄww:apNxA$Gx #l ;]Eh> < |H"<$<"|L)asMhQw-=Q}8i"/ؿ0Qi^^BzaQWǎN(/[hճ;Gnnr蝬-. (qE {ESX ;;iXnG߬y}BqؓWv煁l6)Tlc+ D<֧s;׷!# Uek5nHFC K7&X OͦZKRE.c+ ]wύܠH4I׽8.8m+׉;ۑcľz'AwЉ}:{6g`)C?GGۇI˲8^o9*z: y&c#w#OPA_y\$$Υkz &$T~Dkd'_)H aߐR_P2JU"Wɪ.tgȴҜZVje9or\ZgV)Eagy$<#"pGgyL8eaDž#~ 1edu/harvard/hul/ois/jhove/module/pdf/Stream.classU[S[Uvn'94P(M"PԆ@R"Z.ŦɁȅ$/EVQC_x)8@;mq dfZ[[{u~mG,Ј쏯0>y/E> !AaA!(VL @ Պi3"**bET@EǬHDT#ѓ"RK|i xxՊDx:׼!Mo1c%6 33|Ԕ$86TAE`T#I%1 (/,'DNE|qUMs/"o643P2QiyNq?6Jf2`US FO9Sw<Δ d%%l6wL3ܖgYpun.؛y0Sɳcx3T4ݴt()gay"x.w\92ODPB27k:R %Qj)|- {rue=Q(]ߍȱ)ƦrBm1/Tl} |k) uNz~07g({}O#z J0y1y]"sD0QbANNN,P0_ޕ;P7A*Jz)5ɛV7g(JnV* S9g}r-0G3orK`wKc$%0icƥhʔƮV3k8vWQ47(ugؽHV8 $)Ǿ*/_F¹8yF:9HM%#[6^^Qz.`RO8,3%e%ea3^ȟltьz49Ewq*F>H& 8Y Wq4]g\ȵ r+,P%k&YɁxKY6s ]\(vcݛ#;?e8Lm.vۏt.PIʃTuxFkGAv(Y'܁ݰx6"tR0o:*Vh1ەkh An6PK G|$>ރb<edu/harvard/hul/ois/jhove/module/pdf/StreamInputStream.classRnQ]gqжx[0Pj!&BmcM`Z`3?7?&>~πM_/{u.k_  &%x`!)̪ieLrq9Q{-ɰP9r|~U&  tz02jKva!^:^a7]n_4鹢o QH~K[n I]8?tA]J0y:]ؒQ996$zEJ.C,)1?d7N`:Xk& [xfa3fyh 3$hRs*흊Y [*o\[c0w^H-j7ѐtbÛLn{^d'R联rKIZYyALMnI MBˎ{kawCCL!ƶ4V:Ln @:edu/harvard/hul/ois/jhove/module/pdf/StreamTokenizer.classTNA-)E 岀 x biwZMwۨO+3Bg1fΙ97m"чDbZf <χE)J$Ž09@vfwVSyΫzX3TKգC.Բ VqWzsy^8U ^b`oB9N ML6=u,I,D$eM5_My̰o떚f a[!VJ3qKY%vU|kۂ8:VԚz 8q'{yBH>[/iO!\E\*\F(V.KǍU- +͵+w1rby4t3fD5i`)PhL(<edu/harvard/hul/ois/jhove/module/pdf/StringValuedToken.classN@E:~&摐-m(h@Rrb;W (> 1v%l1wWΙ|}|8~v,7eb`>ERILԂ'" uix`Ms1?*e2N/o,~qys\Ab,vJ\u.nfR\F: &,cT<y-GU³(%Ȃ*1[&)64ZBJ6[e͏2R{{As6bBy^[^c~!FK{DR;|PK G|$>8t&> :;edu/harvard/hul/ois/jhove/module/pdf/StructureElement.classWy`a bQ S6!D jq;$C&qw6V+Z[mmjmK*xއ=PLfw]c{~1oOcI^[7x+nQq+g wx'Pp Rp {ߣ⽸[ޯ *t?>|T~ |+ ç|ZŅϪ*s|/_2ܧbgx1_=𐂇3<µ>10exIS 3<%  _c:7UMo1zVe}1pbjI,9~I~)4#dBt"K dT]M¢W0  K_Y !(vxr%ߐyMPO I 7 o6mJ;S!Ɲr=4$L+m<)J7jI)[NKXPBQ I$&'%x5I :6hJ%1oB2vg?i؅ԞK\JE'mdCm]rDg^$U;1d\([Ml5n~@&8Tr;¸O2Xӕc5,pYj=2Xα:tXBSw2.P1i,%{gϼs@<}eQV;vaȇitvSU,xɵ i@Aywc&ǬT%j"K[:wUp1iH&8U D>R$9kqe-p-5g msv3do^3쬸dވ&q ̣? [~h !#$}ꅤk2)s @_gZvx'5< )=O8rpt!!ѕ!!j@BE@y> 0=>:9 ٛMf; xGiGhTRM} QV~^} ubwS1q*r$LØ1E1##V;7+|;a̡!\AU}8OX- n U12cs!\r2G r<$ x9ӉO ĥ52XX "71 s  '?zuo.Z͏V.r &\A'ȟLX6|f._}SKύ17*4M G $Y.,4Ak-X[)zOYY T@0p ``իzsP& ļD[X$b4 y+I Eꡌ`6EtŨ+xi,ƈW4L, Z[I~ #YxH(Y0!,S`0Lυq4WV0_#8edu/harvard/hul/ois/jhove/module/pdf/StructureTree.classWSW=x0D1*xºj<ʢageg#1/sinsR PU|*UoOb~ouQ,jg~~o NAc-QA<M<W@ccPȇ1"9"HBȆ9[) p4[AG&px'8N*X9PPS<)S%xp<`Sp Nj/Jr:L`hh3LtHG4[eQLGY#F=_ 0,n;hQӊvhInǍtz)f !߇4lrvqacoZI>AG舄R2m$f3m3ӎܘ$SoDK:=l5a$8hnȜ0u-N)tKO2sopqƭ+e >3} 7v*4tCsznqӱ3qD a'`Э"mT eb76C ֒UE0ts8ޖ|nUlGuXżKFl"TwU4nyچ=c0bfux[U6A:CA)#,Xp*a?l)D`U>f\QI+ 5ӢZ݊gzjma}fd6۶vBdT)æz3ag*>0_@/B=~_QM*t3 =MCS 1-1`F>krkVk&o٦VI +.PCQP…Ekw sw3q]ڙ?G U扖A%Aw\4f^:aǬln %_+1b&u&Qf̳q: ebApfL84/IC ``G &tf4gh2tfYe!#~!3AQx5]wBt[0c5#>^ICΝVMpkV(>̢GLzA#9iHyS˗f$QӺCq+< '0o82_M0GQ8#<վ >@!(-i*慽P)IM,Ld8ʅt '7e~#JPV {KLmspɱ c7+|O N>"r⌸pV⏡mr ,{ƦIBG+_?ݶd 0p #r%2Q6:'#r@=A]V:L+`2V5It&&;\ @6'^D68edu/harvard/hul/ois/jhove/module/pdf/TaggedProfile.classTmOA~n[ U-œ(PPLDƤYzvk ~ Bᛉ _v[1pxw;/3<3{_ QR#%0EAB 0F)Qt`⺲ӕE'ƕ(qb$AhFX›%9n*s1jmU-ۨ\_1fo:F\ N2OeBU+]$/ :W=V̳Z\2$&8G-JC+% qG]LQLk=p9V0` s,ךQV| bk ޫbfiG/K^s jXĒGkXVѺ7X&*vW.7ZG!# 2M@-gIk L6`2<K؀DM~`wm-C8r@?C-8uY`aex+%aϘe[sw%Ѭ6-֘r`'R\z6NtD˂ܒ]c00.o^ D]RQIFAR6ev,=@>@$N:Sx2Z.NT_9Jǚfv;HB7%i3xB0HqA~Q\<0Nt<ŐL'PK F|$>Z̫&0edu/harvard/hul/ois/jhove/module/pdf/Token.classP=K@}=TNZ"X(8]sWsi itqWx ѹp@{5P(m].AB*$O#593%ܝh'Q^LCmI$`R,ǂyˀi`SZ,"1e8&0NNw܄l-rCi+zkʝ>O9 x&tU3}~l|s̫c@^ %}^GOX  M yc g#upۚ12rVE~PK F|$>!'4edu/harvard/hul/ois/jhove/module/pdf/Tokenizer.classY @췻,0 7 '*(C#de?t ^9&M6=lF&-iM0wsM+1G6\M5vqA__~y3o޼ys|ɓOD3.9S:tA'?b MX]PbcH`C8 ' &RE"5.J)KM.ʢc0.ʦcHsXHx M2+35)2]hMqt:hbf5Ƴ.M 'ibSSj"E.SYLc.Q fpLMr']Y.0B-ؾLJI Q [΁+1a͏YXX[Ӭ-i6JcZkbVyc]%DQ):2Vk 5iVPrmr_W^YDeuN\PRYG(u-uNIhZ%J@KNAž^o9nAVo}G rkʛ+pxAZoo诛(Hj5͵uW!reUz)lU'(T {O2MU(Ty*Jըsɒ:oin>T$J˖yV"hpTXqVk;?(@Ae@ (B!̅0 .DPBF+VUVW".^,kE2/flˬ`G~?h/mi1"h7l@涎M ?DzJ10XL5cjjo;:66#3К_pl CQC:$7ü-mā.#l_ou L<l˯7 6BUfNjC0Fs`ɚ3e9vA]5V4=g&бa(wkĖ9@s~I'IHM˦jg]Y&plB0D#5U#pTl9x8>a>`cc \2[06Zu}ʐ 5v3V1 7:LӴJs}uqa7ݢ:9 .n [c_UG>Mlsbf[0iA~'2DԆtSɗB_My+S{ܷn#Na*}qGvP{\9 zC57 ܪ> _;;63}3NB)fW]'$J5x!Z[C ߚj*~wq۴WW.h])H׎-X]YZ-fwf#Ual͜*G'no X?F9/v<(u'ed&a)53^cL^ٹ}SGu7`wRM(A/Ҡ],gd}FqÎ>Gc0Vr\ s(<{U[Ǣu:q7euo'` Kl'+2\:`J y=@S/=ڦ鈴0σ9r 8k͙NInUmSMf;|6ZrvS IN"3L*=:MI ޓf ͪfN3rTqs1P@yKeеi9m6D9T^vGGK6T}'92-:%C룹QOhci@Т+vEFbGKuT{A.iZWCsbC!{=4/ac>Zky>*=>QC!o7/E>*IZ2fi=fxp)LMKckZ:9(N̿=t怽4 );6ڌ4ѻ*yeޣ7"bNEW?>OwvѬU/%)%߱X3*#W t\A?"g{haw |4͊B۲IΫwњ4}B=-T /whEءi+L=5kғ\#5P2[ɁY=zIéI7+c|2?;|2dGLs3μ6ύw~6?|(|24æy@gn(y f]8 |i>f77*8M|i1fn+1q!e6{[p&D7kZ /fZOV`7: ;VKG=7c'%iC}Q2S4O!Ed+X^`b>a٦^VJBsȄ.vlo+~ǩ9v>EwPg:E?4F/j؈fY,n۬ѣ' EҤ #YFe-2'gfN, EKR3 e-IFҝcP3|1JwtvR,KFp oCb}|!:n>_Esh+hs*z[k|~ ^Wݽ'3wwǺ^;C5M?uTFo:G 7&~kd |n:{ފ:o;џ``|1oKpy?JNw EE#ˈNOWb s.g蠭YʂIϒ7SbUdRn+qoֵ\~at94TNt1l?g1Q4gouuި۩hDx><;/ވsHHH;]oQg[K$$Xd-]>7G<̻)i[>;2t4VT.ބ&fklJHhl4hlv MjtHqJ'%]DtK70I&e20EK*S0p9&Ӏ28BfA1Pn9[^-/FAct!Pny X98ND98INN928EN\`NS4t9/8CΔ3,l9x< X( Ex<X,%8GΕs<|9@.. H.2`,zX..KX)+KR2 X%ղX#k>Z9`z`l6FrB+ \%WW5r p\ 0,d[v7-r p &  EK%M:]{1Ex{2MLbLX/=bJ}\*tOut(===Y;*na:u+5(e.Յjߩwbu:]3_ ? Fnݳ' 7C a a9_Bo00 a ̷C000A0a|^}!@0?a~#G!!̏A0?a~io!̿0 Ys?@a@0a>a~e+Ba~w? ̯A a~M[!@߅0 N3 B?01?O ̇!G G! ̟BCO@OB?4Aۤ^WUN5d)AN5eIs}M9ǟ> g/AΝ}]}6PK G|$>tQ h4edu/harvard/hul/ois/jhove/module/pdf/X1Profile.classWy|uj>9ʑ8cqa-m%dUp 'WR\JBBOh wuμ]OzfGxJ ثQsa7s oT]Ix?S,T.Wi»UGxi|U\ZnzAn>ďG4|>T)7$Oܬq+>g9n>`\CnSq;xxل0N|/Kl=*Uq*ݯTD*-萕keѡ\2Nd{p:Kў@]Mߒ󲖓$֡D'H$iWW:VlO5O%B#Px1ጝM21;۽YH<%W4EX@L7 Q#65s锕ٷvyK( Fw1uv*7‹Q#7;?Uҙ:~{Zۢ;uб;u`R/D>\@>#uwC@E]t.vZ#4܋`J:C#vGMzWQISQ7yT7̀Qǜ1?Gc~湝<cA&vH朅c3EYZ^߄щdIBHOYf2Q) )R^C,o=R "PNQpk ٠_TUSCs$cxWK;]4]E.COh'v5L4o,$ESf&3ǩ%Kg&Z&'vL Dm9ߏ~ F DCSw֤q?I5I\j*fK"Vj$͖X႕t 5#>mdS'q ;)[WoŵfpjLcGՐqIGUqiMr"ܤ$el7ITF'5Zo@7Io:OyqY*_Zhh*/F2)G鋀yADR"Y\r:SS+8S%O/bj_#X`P46CSPa}-ۖƂWPqG#$0MS@mnTw,D] ٝxuNW!pG'*dܪ8|Th1ԙɫTcU{voaE-&Uз~F9 y{2gB N/=DjPpNc]o#t(1Hlm.K3۹T̘wN0(GM!Ta'wm3ҭE@,2!Ac3W${XwW0:EQDr:/uY^ۤt@ P-)H euX Bk}{h E9yFW}uF;.M4o\TiKZ5X/kbP諤%IitehDyϸUőC8һou?8NPp= W Q!o& U>'PK G|$>Y5edu/harvard/hul/ois/jhove/module/pdf/X1aProfile.classS[OAe(XP z o bHۘK3vtqmv ~/D}Gϴc0gs篯iXY(⸡ 2:Xm6 <0dUrEϭێŰkѐ^WzhtJ6ܮ%q,6rd<[ '^Lam&%+jA"֜궥 [ ł;/kd,;G i2P_*lNr 1KgX5-<ˑ:rܚ 4edu/harvard/hul/ois/jhove/module/pdf/X2Profile.classVk{~ǒ=Հ@[QbH(2 㘺47YݕQ-_蝆%@A!@y~F' 3>Μ9\v߾ʫF9F؉15ϛǴI;_P!5ܥ5m =*/p  E! 7vGp4  jp9<7l ZhD"TC㘁86籕c7ǞD0warBm8Բȡ5lH+#W.cRM]\<&ґzL]7{^ʞ\Ö\<_Ɠ\GԶ[`+ 8H4edu/harvard/hul/ois/jhove/module/pdf/X3Profile.classVk{G~ǒ5դI՘nJ `vI r։b[cD*+c r+PH \̥UHB1_ Zsf%[$ ׏ IS6`K̰ڬ98@ R8gb7<5KXc&L,Xy^OH|LŧM|59肁K|A1}N dZRf,o:3Wg\Ϝs̼;]ۙ!j=)=N;}+psg<GZZskU&&E4$uR~ĉ\ϐ5kW~MIS ~KSxC{[/yuX'5AuSx eѯpW0?* lU+MKE`(b00Ya3V%^U J~f@':7Zg}TZ~p=֝^3T~R3OD$7(WVz;6O]|H0IY$2mi Qa"{*b:Hb_ ]610kǬʻM[ZP K-7RX=Pvafт;:Y̡ۘуrtz 40B[AlQfNw·&4v n4LFI+_occ>W =Qa_r>v'"h =e4}^ dUQ')FH/ ˶,(# sh23z^ƶpw2meǚGʸ4y#]A^Y܆]h2N->-ѧe?Nifz6aD3nHxhCR!me48زp)ۇ; ɷWHeT;6BH޹y٘Neh(vTt ϦW(oL5^=^;V;KxgVd]d-)c Q #Nkam 328OD S D¸P Za$RrIjm?.١Ɠ. 3k5d@D*'{ OP U@xy9-O5-ioGEh|T\a<W$z"!q~w]C1u)GZX?ԥIu$Y5v*6"FD6}X}Q~}A4~lnn.S'-ypb,nPK G|$>Xu3 7edu/harvard/hul/ois/jhove/module/pdf/XProfileBase.classW x\Ưyw&/K_ئjZf@& ͘bYK%y,aMIq׺/P!mKU Jx}of"%|_rϹ۹g9oT[p]=x5axC F ox5 =wbn c/n`)7jx>(p˾Y`B`-~ d8m |Jg>+9;tNL[Ô=|_E|{øpx2W&0-pLxUoi@oV*P oWy<O -+Ց[+z6v[b먙eStk.Z3T1m[oWvR$9lgs];]fk̎9y;;ީs̡ s,i(V مgo[3VtY ,,K )ɛvʗƝMcle;57(oab9bUp.Lqf| 24j $ GL;[pJN}bN;V]0{=Gn^ɽ:.:M+qG ?#X̛ccVJOS>;3lnJ 0|F[&N\.g9y&/J 6 W(_EC kxTcs$C2[2BE¶3M|&"öыK [w2}^Up;ښd/ECr+E8ʀs6'fze-:Gg:2 X@_,8& Hl{f3vŸ2)}AG_/9%LБ Ht396iRq -qOI*n)t/x/LֵDLcRRIHl))Dm]֐Uw7rg:•22/fĴe=ږn'\եB[V4i g]fV֜m]VUͳ?M(PՍM/?(Is- jH{LIֳSZh>#{b w lg5ʕ#{oY D`_gA!+met/ěS3ϥwYq*y}Nܿ^nO)J !yFFH%[ twj\nl#wj1#H63MU&K3S漹-ƦTJ9&rѤ=HEWJ{K"eՃq'#.]C>&%UBR Z 7^Ev-~u{4y; Q:|)1#8(DO\3NcIDF$fTY]%Ce m&B>uG{7`t $u 3 3!oiIiii[8:p$,QW6PА7u$G$u]49'aDèx5iE`.4b\K˞]M8]T/j,#%C@ &;s-4#+g].q6At`^ˁH,@4Px8/]-ꅺUBw5Jhߴ.|{FԻ.j1ZFKE4'ۄqNDxn8y\0|yg兡ڛ&UϻO(y(%BF,Hz+0eIZRS,אv(S ?%q)>ReJ9\ i\H Sc"Olu3ttf~l$H*kԵI4 5(-WnJ1(6Gfu/2OaD9.&jypʸQgl$;7QuhJ.+WRm @eIhM~ ǒѹ5D9}jo\ G7P*'i%vVw:3*כ1NO3?隆hV}L>\.*FAvtK #ƭ`t P;3e:WgS2=^7㈺]1x/c56Q苩QcSD_(!U6x4.]$x] G'LJ؃z$]N19M;"fFi deHsdxOsnq8pMHPK G|$>&edu/harvard/hul/ois/jhove/module/tiff/PK F|$>NZE3edu/harvard/hul/ois/jhove/module/tiff/ExifIFD.classZ `[C[϶,#( eQ-#IFmY2r h4 jCB3'G ofvvvv']%4)Q64$MGބdHf!-s0$du$G 9QH"Yh$ 9VaǕIx.5';^anZY[)[,W%hw ̇]DF-Crl`+Q`'#?zu`!C/|@AC&jG!tL$F[|`됯t-336v;|`|l^B.B=$ v K|e] 6"`W"! c?*OLk\kۄیzn@ $,%؍`F~`7# [`[vk vJol+mmG~`w" v v76w!G{'w/nĴ!=G('d#CcHG8Ihmz ZWP$  -}[R$(r{xs  r84}M}l"e%Êr$Hl(S84Ø67Ft%0M 8 E88b8F U{0j$hw6Kx9H@r>>/"y 1/c$*57JgxDSB>e /!_1$ yG1w ``OYW`B{`_[B`0_ `_  'S\pVW ^"xe ^!MJW ^-xൂONz' AI dO@`|o|M|- ~ >O/H|?Zc?V?^p͂o#xm/+O]; %Tx—Rzw~Oᡄz))sǢd(\j(?%i.ꠤ*q3 zz=` @iζ%JIgu:)r\tSR$]idtn_gݢZ=]tX 8RW{7L ofuqZ>cy ̺: Q;<0̴|~TZ[] m]ζ "ÉqQR:ww㇉u))ձgA6eUY)irTHG&%n_2 *d@N]KzLliclҫoegA9 alWӳn}L.+ϊ;lB7.Kų|}Op^_pC.!Zrww {SyUT-=ͮv\c<8X̰}:b47F'&up×~-W@.+Ł.nKHKg xxnK7 6W2+IeW7BkBs"@2.XMFFNJ8 [n.QTn& *(S+P [FK3@2SV%6=}r\36X4 +5,f@3 QENDTod̛M zC#Z<9׌SvtP(&34 '6[X4]%Z"a,uI-(#>Eh2@xp4.+Uq7.-^E`&Iqoh"k~-CzCI-Zƒd )̷*3>9 -ۯ i--=z EV`@ ֨W[Xp$5Cg^rl#֯aҸ+&m 8w J jH‘LDwstxƱP]&oz#EdK[ȨǬ7)h8Q7X,5Н> a 'bMǔF%{(=ےj-KjáuܽY;z>1o]Y)K27E`3Ø~HLy"lDܡ8~D&e:(M7AK|pc$F35MP5A6}!y4$@W :vy$n5zLMbtipŵNŀ-a,0[5E~ɴJS)ZŪMTDMhqwlRX;Nj͡H(::dqg7H ű œ#xqY{'(3, !xC@-w,%͍Ku\i#@l~&cp~Ecî>X*\E+CijqT:%ָb>\ aU C"WqQ8=T v{͏9:_BuPB7 -s ÇͺqhzdN;,"x?Xl(Lz]dRޢeg]&Sg>}MƕK4HgMpe"i-UYSTzJA(=vaUq>瑼%]\пP&$яU ?# "#7b0UfaV GWkq9:ٝ+7?I'SB1JܙY7ћUz{*}ނoB/kJRy1 WĒ?tV_ OIhE_8m=UTܑTD&T'8?;UU+[ *%/Qbu$? }mTyJ_ 5WP/ƍ]ɭ Tz, i*LnKB`fKZU釐202RPQst7 +sK:>#xƗ:*}q7J%UjVs;1l;Q~ʭrӪt+J|^EϥJF{RԭJ?ޯ5_7)sJJcp5^*}Vf3 +KoƷLQRHW*xǐ/ܝS VdzǤlV)z-{5 &A-j|W+tZږ-Uzf Sdn}IaXO4Z Ձ<JǾ{)!2m+ 2@bDe q(H,xx<‡U吂CV߭_{'QS?]qPy| _u|R|-p|aʿfgU~?W!WuÿWPx})WxPF9 S ci Gk~ :U~!T~1+Ǹ/e=9bMY=RX"WxM)D,#eP:֦7M/+Œ5Þ>kh,׊PܫԨf7fQ4ׂ5,0#†|&&4ӉoD,)_PؗzƝ_:<ςQMȵklƨ&ь}=јlZ}A'cGʈ}MlڽA}И/9g_}xKCQ87Li>+ KdFbk9:t²?oZ(Qrdp9AA'ߺEr Bx:¡0sy_$6ڿ>+&BC>aA{t681wsx:a:%S)s ;/ b|˜󎒖-gVIyGV65[ԼȍGHHzM0hӔ%F;(9DZ3$FbT +/hSJ:&|N N0hT_MG?lddsd({d`j\Uf G3$T%$Z$& ֐ ZQ69Fiu8 ?Q)ڿ*ok e+H`~s+ [:)Qa(|{ަ>Y.G<VӘG^!Akw|AxdG`AOx:]zqau.(gYI?U/T cki4.:s{bM'EcjqY CA- {gH#p,ַx^Rc܃tpd%K2ټ>zŨ dzZ(~Zi86tc"=KiKaBKBѨ|]'r:keg?g]o1yr<B##'pm`PdLa,ѝx1+gOt}6)4JcKD:BO'1{ ~p҄xԄƄք_΄ބ| [&|;3Mx+o[c7>˄ l9&YIY1p꽏pq8֕6ZYh[t۬dcֶeumYhZY{vl椾CWtb3G!`@?3X@o,I~w&Asf e Q.ωjXIdl(NQ+BQ}QT@?Lj6Fr#}? cd8H&_1sN{Ʊ3M=zQl\+b3GQnlu#s6 xgn`{P1rNP1r^rC&f`b>c䂜ފce9Ky^͜yA/>D\l;M0|_11wȕ9ZCCl('c{$GyU&UWgRu9UO=F~̑sHA^1syו=%Y0Ylkt?'Osߺg]CC [h ~XqW  ŸR+-zrZ]VYU5PWCb 3ԽFcYjK"ג ]Z@XG\C(YߴLr4;͎);oZ[)M[IRʽM 0hjj[ )}Lv.2 nb(MzRZC?4LuطvSa^*zaCX:;ĝ[+U~WaREy*Utþ`7uLQ@wkRi](bho&[5ų7vo(=AwOONJ3UTWx)OIY?s/Й)s󥤬;+l R8/8 )ka߽LLAS?$e?TpSV[VՔ#HY69,g;PY?^A2e9a~M2a)Taaڼ˧rot؟Dt龻`_?[ع-a@RaNM+S |-Mq᰿$W)rabNKYNZI_86686b}녞K1Fa)t,l01E8o>kyW(;l"d'Ow>:\U):찿_8dG;}F' wNp?ʣiKh<)I{Q<訤F7B/zeSS\"ׂݟݵ)Ȍi^ k/M5`Y 7gNH6YI3m{PA>A> Ϸ/j kA?rbq;oӉk2Ua H u ''Oq%<9LĞs :1m샜 s` )+zC'm. _ z&e2c4l@Qj6f(;s+7n#{mP8޺*JgmjRVE9"]XFH] f8u \gtBkHQE- ')uenRYoMԢ1)Rlzc [El@a=uւЋPtI9 ,ʂNMp%!N(l2US7VK" bV}EJv ]CZV%C;B v`V%`*ZTQ5pnY->eHM1lʥMEZEm*ZQ= @T=je G(90i[5HIVlh0i&qr)rqpЕ{?U*O9ZC(ӥIgH3Yٺ9Ja`VÁn.VQEfGG>B`Ut*z4ĶVa`!SdS|=#le>VTـ [b[=$@UhZakjyV:m>Uնza#wLαza%2wn0VcXH+jVmj̰W='n3ܡgSϰOp   w^gxԐƜZ+2`bebKdbKebU2r JXLlLlLlLlLX\Jr#BcI2'8EDcG(W*N}7ZsVDeA]/hˀ xP<#̱% ;#6edu/harvard/hul/ois/jhove/module/tiff/GPSInfoIFD.classX x~ϲC!.`pb+e4Q"K,BKhzpWznJ!I  h{_/oo̼saC)x*3s+xgcg+x*LSpW+x(xR Fܬ Fܢ[)M8q N(8Ta`db6y.iV .%<a7 0K8l=CPǦ;dlr"61Ƒ|nwKVx$Km&[؋ ]5욜[~\7j협uvL.-Nd*b_$_2R$;ؙ[zx4ܞ'xA?yG'H vɩhtT"(q$\$4M,fX|l4h6EK͞aw3l 1Fijǐv!: oG*)w h$5TI{זRѼN8tRrvw)M%&G$EGS['YXD42G&="~lr"}bkvQ6s<]fߗ>Φssb!DN5n. M {ps,4K͕7D*{֯++n*3o$Ztf3Ec!h9Ң5n F<C-O.ƬN *g( {l~n4S0f8+V1Qd^Fb"h^6U6-+ܴo6W8G3|jTtxESHʸQܛHHr{=>k!hpB2{#W̤te"lTk,pMvAfܹ|dؒv@i(6q gJ\i͂o`wHiC(޶>{ܥn_l\WWʭT6޲,^8yˈ޾iE UOKîVᓊ#*m'lkq,ZHZeâAm$![AĦGdh<6(f`y}w>U: УgSKt3K˒/*00m6.0tE/1xU<|AAVϱ0F7T8KJ*6bs,Y~{>p a~{al>ʾ0ocp G^n|ߎp`͖x&ߘAcaώ9s}*G5wR&;kTǜyS ׸ҬXEqArXlT;nU~A1A _/VJ|/ŗrJū*QZNހRVU/h/)ef{n.Y.,: Ƕ_rcoRf|@c!pf>KYcHNT Tf^p)oIMyX>;r朣 upfOtнa`g+K|Uy@O/,99 W*aCILRN^& _zv`wX q<}7BкH"ZEfv3v=D*:M=ƎJUkz%W^YVkE_Zà/劖wU0ueTU^ NaE}}H;P^7RHƫ:Z$ 4F' '`eW'J;bȞmfdVw mV6}Xg",uE[[!lYFlQhˢvWE2[lm̶ͶȬVw5y[]y̖+Cp ʺ&7=YۢY&lQ6MtN[9n)A?aoH9Y{_Y݇R'wX_'-7G8CgA=kCУw+`_{w.juݵmt0}׵A@k(ع kkvdRueۨk]UͦM:̚Z]ˠ5ZkU}YsuTՇ̚[uլZ_1ϣKYԵl3kԵ|YӪkZM^W5kטך_Uie:kltx*u/5tZ3v2tدkGXuzMU{WL0utMVךoœ5U0RkM{:KKkAY֝8{6sm'_,|_} qvlp_OK/t靶w|@?PK G|$>O{4o:edu/harvard/hul/ois/jhove/module/tiff/GeoTiffStrings.class}|E%%uL %VzXI[6qD@{G=QpЎkpyGmWo3yfy]k>tCCCdn遁Z.E2.G d*NF^܀܄܂܆܁܅܃ǿxxGxx'8INBiAYCy^@K+kx7x xw!> !?F'!?G_!1 k~o"#_"{B?!g|_G!o5@AC (hiMf@3Y@ ZA5Am<͡5C Am h-жm- m[hMmGh;A.vݡm2)ZEEŠšAkm*=moh@~6 th3̈́6 fC;Z' mк%̓6hIh -h@v(àm)#-v$zBKZm%UZhyh A[m= 6B(hGC+@v cxh'@;INv Sthg@;YΆv\N΃v> ]"hCڥ.v9+] *hWCڵЮv=&h7Cڭnv;; .hwCڽv?Tr=QhA{О9N硽^UhA!סMhoA{;ޅ#hA{>ch?Sh?C_B}~~ShAо{h_A?B?C }о?0  A`0 4Ah́f LZ-m0-0ll  L@1 @0 Lf3Yl@880,B`XtK#e@ X@XV~`5r`-A`X6MQ@NNNNNNNN........nnnnnnnn^~  xxxx xxx>!c'O?~1 k7o__g/7_o?o7@AC (裡k݀nB>z# tnCo>xCo>[o }+[Cz'B};Cw3] }7CdSB@BACoT{B /}g@ }φ~ NA?swAO@}>ГB_}1% PA?RG@_H)ˡ@z tJ諠C_ = =} Bzo QЏ^> B?O~" B? π~& B?/~!_ B Я~%_ Bo~# B ~' B ? B П$? B_/B _*נ߀& BB1@)Aϡ/ ?k迁[迃)Ϡ _B= пWwOo_BF  ?`1FƁa0L10hA0lM0cs0B0&F -alckD`lc{;N0v ]acw{ c VQ1qm0at cO{>0aL1 3âq0 Øc.. `̇FB`,!0a 0X ` #c900V胑X c~ada`FAC0Xc068 0 0aX8 0NqaT80΄qa\80.qa\R0qa\Z 0nqaV0qa^0a<Qx0a<Yx 0~E/x+0^x0ބa]?a|C??39_%_'0~ 70~ w0>a|K?#?370 o00 _0 ?0 [l釹Q0G X:L ӂ9X00 8anf[l%̭`n saœs`ns; 0w+`saN 33 33 f;Sa s/{0?i0Üs&Y090;a`s`΅3s0L\s0<f7CapKas#a`.f }030+as5,509s:an&G<f0c` 8<0Oy2S` 4<0ςy6s` < m^Ʌ0/y1K`^ 2ü0y5k`^ :ü0oy3[` 6ü0y7{` >|00G`> 1|04g`> 9|`%/|0_C|0߂6w` G0߃>`~00#? +aoa0?9/`~ 0'__a a?a aa~ ;X |65 hXX~Ke2aY Va5k23\.dSƁj_Ct/ZqzAgp7{.'U*3g*Ew5-~ؓΊ3w:dݹ׈֥)$+~n-Hw/ lΘyΆt񚜓Q\t`:/z\nPtNၡFqPZuV8iTVd)fOWǝ^G揚dW MxlvT~@I9YWP.`u1Y39q9C0(V?M lffXL-ij';4(tO.+.0Ή͜+X3L:\1\kӬ~g@7[;SԠsk=40OOYDpjq=E uxRkWוZ,wROTPmmbl+\'qWn(1%\f;gw`vrļTG&=-:5tuj ʋ{h{8ջRtj1`[{X0/l{ n.8vI-WbM9\6=~Rq󁊟 Kbߛ󩁁U“ƦdSZ2g`uLyDihm8CZU|8bӓldGsٳNEmBS[]U8} 4{{ٝGO=-ݘ&B@Ӗr}FRMs9|jpHL4QZƧTl:/OޡT>%b5=:=ߗ.U#zS|(:TYAe鹾` r kRQT(&''X1FfR} |1#ϧri9"|$ =7vvJJgh٩|O=1Mȧ=)gOsPxᦡp2Wdԁ3Ř9]Y~E'$X/:G4mf2v,YJ\NœTxF*yi3mdqgg'2pp6'h*W]*1RaڬE f!kMqd=+Î37AGԡ_O[#'=HT1X  KШ d9Ԛ5|@caL4HdDHڔY%5AB().|w[=:9$P/䙳BgrXN9mK#qan8^.dbA9_r1EY6*~*=%b8ʈAWS=)Q"up|`ZsgwB3)&dkV:E! "pQY%J D(\Ic1\s]$|@:qvs ҅[ `@: {LMb#WKrkknm,iWU[w͜]8q,jeSL[i<(׉fi2(jXJ欶b7VgRbAz *VU7v,cf skŰ={1nbX-FrѥusT+Ĭ,D+DM]?pٔE9ZNJ=,~" /&̫o_v{J1]\f1 Kz,pocnEՓDaM!o]CAP^qRc)֥2ޡPŒZYY3;|?805f7vD,Ȧ`-VZ;쀸To7+-3(ei'~Og1Q,gx"g=Z٪AMӳj[m]cYOSlکnXNj[SPmv6f3~+˻W3vb SPi[Ě$!W'wMbzV"Ck\dK@yAazdi'DΧR.MBҨ68[j9ftiDu+8k?kWZ-3w)\Ȅ͝]yaS1uX()kS` ģ#V̓M!+#DF̉1'>bNۈ9]0WVť\8 42r{de2)385wjNTJ˔t oV5C5bUQHo,ejqQX+ݺZE(VQ`QS`q֦rX3?Ղ1fTcm#o$J)v֡c) UE}IEXZ)} , L:kWVfG;<;V|wk\Sq^w֬q┽e.V#_[c+[eζMd4W5з+(OE% aYYPZmy砦 HrbJ򂫝\US:-oK^ʵ9bAFʝRt@O6T]XLXkW` LJ5Xت#*0c*0T` P*FQhZjeEjR(ш*ј+6%ڮD;X"SRae`MerrMnyN6 ˖N^j5->g.Gtd\ܤJ7˵ʕ\{͙zszVm \*]srC΀T*^ʗ;7w=偊]2 7J'344|fTS;=o_TVA]R5N˜sE8#7Whŋl~b]۪3y%Qv |<^N+6֮:Xyuc9[U`DFU`LU` lW*P(bQ1E\5 _5hDFhLƕhmWJ1jYL0vM*0*0*u:zt  7pÞHp yuu 8BGT#jЈ*ј^z:B:ytD0U7ZmK!P_^ݰkZr9_s~rkʜ9 zjΗp͜\WWjs\ӾU~MYӾLr|p=X\T%,w徼Apסהnrn.s@wFO56?O}R|%1NvʕQ[aqOW03*Ag S}f&eK6|2+_*zlUU|*pϮ#*0c*0η3o-A [UPsnףsR˅H{J*@ܑMtjKDR$gqy_pwK\Y5r̍Njy&~CSٍUg=.U1%ZwKh^ vֆwW{otץ*qr:oQV$?`j|q!XEJ+7I\gԅם;_]T(݅A}eFJoByUR Dɹe{S~{*w>Dek6Kylv`c,udXYb).ʽ3ڋu"_MH+01cר\"YfWR4ᕫh0J `cb1nsPYRUޭ%)1N}[ =Gd_ Nֽ?k;%s!8k,YΩ`wk\xߕ:|Plȕ^H,CXe߱.xU1Ož E*U<+Tn(W _nvGܨ'~ UY '+PʐwSPܰw>~UAoU '+UxW7Lu R R R^*xS(tym*CʵAJ@ NJ 冽 n*TuASWRgyF58Ij)Y50.߾걈*+6֮:\\ֶy lUU1Wm*]v@QD(bQ1ET"*FQD(bU1EU*FQQT(bU1Tb*F1QL(bS1T*FqQ\(bW1U*Fq)"qYU`1W`m ]u(0UT` lS*CET"*FQD(bQ1ET"*FQQT(bU1EU*FQQL(bS1Tb*F1QL(bW1U*FqQ\(bW1e NqhDFhLƕhmWJT׳[pD GpL pnWjX2fQYF,#j5ˈeD2fQYF,jQ5˨eT2fUYF,cj15˘eL2fSY,cj15˸e\2fWY,jq5˸e\RGEhU܈*ј+6%ڮD;ӧjU GpT p\ v5ܡ,#j5ˈeD2fQYF,#j5˨eT2fUYF,jQ5˨eT2fSY,cj15˘eL2fSY,jq5˸e\2fWY,jo ޣ()kS` CwCk *kpg(z@WnIVTy4h!*ʿ MvFr=B/J?4!o}y4@nacR1/eƹ_2i]_SwV͵xg^]O{b `QbPr^PY{}&cܥ>Gߛ=qOSڜjP䔧g"5e\u)➑Ee]ӫ-O磊=2Օs7V#~7~){Jb*I7)}X'&~î>̮&Ů>K<~gMBʪga6U'thwN9 }_Vb5si]|VRLUy3hw\kyѲjpQSK9!Qd+EWdESPMո"D=D6s)^OdYݙ`lBꢢ)[k#5њXq渭渽渣?iw^8Rs9kjk;j= pK҃Hq8Vsw#5њXq\9K3Ũ|Gx L.-߳2l2^GwFʚ:b ZGΊ9+6rV|䬶GS]˥b#fL!H:RFdH2#e>R_ } M  Aƺ/Oo-~- *Xa0e)JS(^X/qYOΥ?syþ (Y +p:8C~{!n/gֹa~aDLI,wctv/3k祯o)\~_ GD/w| [KL+JE'.OE):գiDM ȿC֟ʇ2ķ{ᄓ,œst>ܳQzK}e%KUE6Nvmg$LSbgjz0QEN&V ɮut7 ;Äu_+tg֕tw}ЍO(OлBޏzs}PyZ[ CO+jf8bނRw֪o 0aWW%DwmDt_Gtڝޫe'7[0rjgy>iq}^э~hs%žӕ)Vc-4u ؿQˉ5_sc}WiF]S:-ϭ'өҧd~k2-gő89uV܀tL*.Ƛs&֥' OOtV<;[(7Z22.5Yɉ+Ek60lhhآaB`(NkB`}`KǛJG.JåcJǖ+_:>t|bɥSJǧO+^:>t|f٥sJc?p^_qD >C]i!pa9oe(Ff%GJt]?jج{3{T{=:=$l$hеghߙ;?ohW4iݤ]vKt& ha6YNFI4)"IX4)&f,Mj& ,6hl\-jELd7즤8=N=^7n7԰C"5 "-D:nX{K6[4(m4ΒΖΑΕ+;" %;man؉IdcA6vGXnNpK q64mhxlCͲ 64*xe7!{NÍwn[p=>alj_&j|@q0!a6ƇiG QLDŽقfKj|R)aƧن&L -5>'Dj|^I0Qf{ f fG W 3B0Rp0Qp0S0/f2B!aZ)N ab(LiQ´Sha:(Xf*ٓfo '><^})x0QDaILL)̠̤i̢@3M39ႝ<SP\pRt ͣȨ,%$)x0 )x0(x0)x0K(x0P*a)x0RaNAx<((|/x$Rd[NAv R/MAvd ;_|VRo)η|Y (η|k)Η ;)7DAvud[OAv dHAvMd;|GS@Ava C$X 8 x  D $ d )||i||||Y|s(s)>()! (cR'l/O^L^Jl/#-y]Au%ْUdK^W-y]Cu-ْudK^ד-y@u#5m&jځŨ35 {pەnv簷 {e؛"^ {2Fd&ct2FO){ԶiHtH7iHC4Nt {H["Ҟ%ҭD=[4lwt[ N${Ht{K; hN|l/.vR EHۋEDCD:i}H#a"ڇ4f/i>Bm2GNt\{="vZ+D'HNWtJ3~δWtvN5"=^+N;/҃lt=$ҹ:vE7tQM"]`%Ҥ}H.E>FKcEz}HEz}HOI"]j,#SD>UGڧ4e."i}H"]a#>\fDt}HW߾HE/iξTkD־\y WtоJC"]g_#"`_'ҍ"d ңEz}H "o1Imlogs};ٜh$n6'9žͩ}lNgs3ٜi?,a6gۏ9~͹clγgs '\h?"i6ϰ~ͥsl.gs+~UKl_fs kW\gzln_gs7lm6ﰹM w9XPZ8y8,qY4i^'%Nz)q7HӼQJMR4%%NR4i)q8)q)qO$)qO)qO4)qO )qϔ,)qϖ)qϕ<)qϗ)qBS )%Nh/)qB{KGJоR'8iRΩK!%Nh8YR'4[JЁR: $%N`)qBs ͕'%%N(!%Nh8RHJJZ(%Nh8R№H:DJP8C &%Np)qBK !%Nh8# -'#%NWJPZJ )qB}R2R)qB+ '/%Nh8885RJK'4(%NhHJ:)qB m'QJ&)qBGI:ZJPAJа8c +%N8)qBK:AJЉRN't8S *%N4)qBK:CJЙRΒ't8s +%N<)qBK@JЅR.*JE(qB%N貢 ]^8+'teQ℮*JE(qB%N躢 ]_8'tcQn*JE(qB%N趢 ^8;'tQ,JE_g%"?VR{ȇRx)RRLJRk)/@|,'#H_ E~"_H?IO]R:)K|!ȗuRR|%/ȟRc)V|S"-JyߋRE)ϢWQ(EX/'}e?Bˡ,Zcr8R,!B2)Zb%%Br)ZzXhb%-B )ZXhHHвRUR,KвZ -9)ZHвV -R, J2$B:)ZKвAR,lb()dc[o &XnMFoM Ƿ&qk|㍷Pw&4xm&オ4xm&mBF95x.mm|7ɷ5G&62 c*0E/L|=`+_05(=`&!=`&%={ַmpLg|kk'Tq=}gw(Şݩس;{vY]i*mu;96'&p[6'Zd[6'mNl-ۜF9mNl+61Qzmh鵉İ1kJM'6q k'JM$6qkHM|(v^y{JyIXz%k"vWk1w,q`;_LB{%&Xw%&X.w/w=ZZC%,q`tKܥ$X.5wn KfFZ+MW*GR^MKyRRR9.,Jܥw]zFQ.=(q(q(qخ(q8(qEwY(qŊwY(q%}w~El]`Q.uQ.MQynQy^Q===Eڽ(qS{%njrq/5ګڻڧ.^.^ϔ.^Okq'ROCپ@2}2KپD#ؾLel_̑l_LkYqؾNlߠ*oR[YmdپCw)({ɳ}2l? )3ǔY'Yg#lbs9/)#˯(3cה9o(s /a}QQ%o4ex P>22%Ϡ /a}&ex (KX72<|%/H^2ٔmeb;2wOnN^)9<|qۂGr`%9-l"gK[mٚmmnKNDre;l#gہHv"gG;]ٙv7rve;9G|{q7#)p!/JN;9lLeFΞlx o*9|{qַ9g}{ķ9Ktqķ?9N#əv9IN'Yrf;{ə˶.qw09|sK%_9| r8.q7Kp\%[H%"r8.qɷKC&Pr8.#pr8.qw9=lw$9i)rV]NNr2l{8Kq̷c>r82p9p$o9|p&/K1_c5p%/Oo6HoC[G+\O+x@+xH_nU]GѪMf[UϰU|7w YciG'PI'RVsee='SVs ee{*en44i3(w|gR΢,MMY}Pm߹-)y;)Pl/^Da{ eR~2~r5r>WR*mjʍb{ FrQNc{=x@9퍔3D9͔B1loXQ r|wRN('ݔrrG99隆PN)'Caqrr?F99OPNɓ)q4f}rr?K99SN('ErrBGپJky_?_^_ޠ_ޤ_ޢ_ަ:Cku~#Z+{V^iZy?????<Ϗh@i@/hP^_ҠϿA?A9?A9/仺Ґ:Oig^/z9|AYG#||_O ҟH?6H3mk$7I^&yFu;%tO:J(? K9wT*py \3*p{ׯQ*u* *M*[ 61Thb; 6Ra< 6gKTyoSqxT~oNg3xxoA-Tۿ%xoET`oCa*ߖ <'Ro$*{*v*:ÿ#x߉ ^L]ݿ+xwwT߃ 5~}kל99^sܯ/z͹__s5~}kל59^s7ܯoz͹_s5~}kq~5~}kלC\87>:΍OsS87>:΍/sK87:΍os[87:΍漯?zy_:Α5Wyykk_^Z׼ֿ5_yyk15-ym^~^s_g3x} |l9לm&`Nf_b5+ly_a-^sN4s5Dללm69^s9}6k@y_cksz{5k6y~^aCa zÆzZaüaý6/{|<칳Tb~W~wSOn>՟|Hͧ5/|?Tjͧ=ͧK6/|O[i.26/|?Xc} @OZZBmi(R+0ͥKmK# FBh/P_jPP` 4Bi,8%ZL Ԙ:!&B(2uAh2uChUOeZBiamՋ@V/ дF*MS tB(5-`a$^RMKCh6-e,nrM д^BiE] 4VPqZBiU% VPsZBiME 4ֆк^Bi]e ևPwBiC 46PyBzS 7P{BiK 4B {[ B{G] 4vPB{W% vPBjOE 4PB-{_c?ӣ\9= $d!aC 3@HPAB:F!Pu$!aE CHHxQGAB:f1Pu$!!j SDH'AB:)O}$|!!l cLH(gA>9υ}$!!n_ sBHAݾ%/N7䥐!/ yy%UUטWC^g^yy-MuCfyy#]M7Cgy+CmC>fy'S]ϘwC>gy/K}Cf> [CCg> ]QHpAB{v۞$̶!= YHmAn{7?!2_|Z1_ U2_uhb7 [oC{1߁f t&>}Bgf~1 ԙBge~sh?٘_Bgg~5?ЁCd:'̟0:7ߡ 0a ]t(oh+0mS*@G2:ivfv03t4Ü: ::9#ts&h't"/939 tӡ 3gNftQlŘCg]9]9't)`̹0.˜s^4|CW`.]9sA̡UUà1CWgA` ]9 6.s4t=̱ 2C7bNnnœݔ݌ ݜ9 s!̅[1'Cf.݆(t[b혋CgN ݑt'ftg]KAwe. ݍ tw=AdN\7s>2W\Z3WA`= ЃkAa =0ÙA`=(УAan = 8㙛AO`n=$Г[AOan = 4әA`n=,г;Aa = )`|# /_ F0_-`|#/? F0_~+`#/ F0_/`V0_F5 Fkڀ:^0_{FL0_ #ufm0_g `#uvs#uׁ0_F`sF<0_煑:a.#ua #u0_`俎:F(0_;`俎:FX`俎:Fk'׉0_`v#u!  #u] F0_ #u =0_ץa.#uY#uy+]FJ0_W Ua修#uuk]FZ0_׆ua修#u}FF0_7 Man#us[FV0_ man#u{;FN0_w ]a#uw{F^0_}a#Z`#=F0_z(`#G= F0_z,`#'= F0_Oz*`俞# g= F0_ρz.`俞#F0_/z)`^# W F0_z-`^#7 F0_oz+`#w F0_z/`#}F0_(`># O} F0_,`>#/} FH俾DH俾DH俾DH俾DH俾DH俾DH~DH~DH~DH~DH~DH~DH~DH~DHDHDHDHDHDHDHDHD[D Ho D[D[o$fD"m&$ $Yo ّH @"m oHͅDH̓DۼH͇DH-D$D"m(oH C"m8omH俍@"m$okG"H俍A"m,oD$:D[oHMB"m!$F"m2o (o!8oSDH $oK!4o ,o!6 [[ [U[ Ց[5[ [u[ M ͑- m ] ݑ= }DHDہHDHDۡHDHDۑHDHD۱HDH保DۉH保DH保D۩H保DH保DۙH保DH保D۹H保DH]DۅH]DH]DۥH]DH]DەH]DH]D۵H]DH݀DۍH݄DH݂DۭH݆DH݁D۝H݅DH݃D۽H݇DH=DۃH=DH=DۣH=DH=DۓH=DH=D۳H=DH俽DۋH俽qeY z COfxQ f⡿ExQ G[q(u@zA[/qEQ n8 ĭD(^@z[qQ n}( ĭGxXFaGxQ 6$ öC@<(2 OS@<() o[@<(3 msD֋qQ n mDm(@`ދqQ 1$ #)Q 15 ##@<(< #o@' ģύ@<(; ģ* c(~U(c(ycxx=!>Iu`Rc(T(c{Q>6 GX1>6Xq>iu >"cuBI>6usV(U(z>.g8EY>bQu9>.xmy>b[uB>>(^zw\>/ }B|?W~ Q'P Nk|BZG;;|wFFMכ3 xg^o(Q;zwƻx]I;)UxgN}I;)BVQ~';G|bfQY|̻(8V{ X=]+ O{W(>]Q}λ{WC]QXɻwQD^(QHͻ)\W{7 鷼; o{w9szϻw;>xӇ|ȻO{ww>}ΧϼlwSn ՗Maʻ)V_{7o;~/n oM:RBjOZ(V$o>"gOYOY哢OB?>)d >9SO)9)Q2ſS}J>%3()<'O9!3(\S(IBN(S`;OWOSDT'2OB>5 ys((l(l(l(l=Q=Q؜{9Dl"ؼϽ=ϗ,=Q(=Q([{ϕ(ZiQ\7#e\6 p9Q9.\\\1 G D! F E1 G  D) F E9 G _D% _F _E5 _G  D- F E= G ?D# ?F ?E3 ?G  D+ F E; G D' F E7 G D/ F E? *4B04B0P4B004B0Hh`F3A/4B0F3Lh` h`0 !h`4B0Fh`0!G#h`0 h`0 B#`4B0 C#`4B0F P4B0hE#ah`0 ڸi aVXW/nmZ+^-JشȅM }Z[x 7?edu/harvard/hul/ois/jhove/module/tiff/GlobalParametersIFD.classWW-" mbl?:!@TI䴥VծJI[ڦWhI N[?Mtf%LOwf~3ޙ}׌>Lfdh"0Ǽ!2 0$X`r[`E%XͰQE /2$bك#/2KL+LkL.")[Q_L^fr̓n";+U IKnH)ᖄ~(G~,u ?S? OfV7rA ΪKe鴙1͞33[,jEK7)M- FE5h`.]̌6^h7 GCdH!3ojޞRxFXraX(961`M4'@E261 9dY3tTMQȠGv w "Q-S ΩE Ε[9sQ ƵB85cf03fn ,kBw?%5Dj6ewqOjz!AEsZxh)lJ%0ͅigp8OQFe>2>e|3L0(c9䬢dF0LTl64V+E&eo\d)L:)q~-lW Modo\V9%wxSjy[eE5՘TjNbxdX𖌷GŸe;2p*f+ sj/Zֳ`Hգ`I72-55hŢYTYE:6ܓ>>%l hJ*hi=kFf\P(3f)yV&f1ئ*d2ΘȈɪiK9;ɩ2cP)gt[S Ӳ d%! Z|= <"L"U"ѝU`D). m'e.[iը +rgL_9U @&mW1JSOr+ɯs=噣O%қTZ<{QƔ^aԼ_Sf5 K{}lwdzqmENP|2ܩ8UK2b ep0۱mY*˽:ؖc̲P3ʱP=_b/pbt# "p׉y-m09Z} c g*_D2N 93ٽZ׉ ݊bx< ~YRCrޘ;۷4BetG:zYێ4H" 5eYmmKFOf $oKí tF 譳-*vPLvQKu^uE/~zG?}қi(rd#ďcćkQc58qu^(D8N:{7m@4EF&pMsL9?zM H{hhxGzfӾ}Cns$h(s -;.R%#i =ml›\!lM]euđK7pYG;'*8-"qi\Ħ~/ӕHp}=twx ִ(`F+8zI\E7wqZAnс8n^AG&eqݩM^ cQC ޢ" x[91(3'j!᳘"3WRޏ%R.oO]xZŲ%g&o0r{ODDJOZ m^d}g%>`/\n/PK F|$>U_,/edu/harvard/hul/ois/jhove/module/tiff/IFD.class: xTܙ{grC$dH0 &$f8$#LjUI}Ԋ"PQKVmյuu辷T̝diyg_s'܆egpKoTp 0Q1V;*X,[8xHC9vY>M<ܬE[ي)Ka^nJأ ܣ ܧ>WTxK2~YƯ tkz7ۢChO\2E4rWD#D(XҬlSD~zmhDv6v7v- -A+-[VkiuV7҆%"պz{} [`U[G'[ZW"(N[wx3`Gpimhl660BFn^4pڀfZ|bimlh[S"VI -7jCޚ@".CpnmtCR}EcqZ_;״ Zi%74) hl D}KB۞iy-$fhmc8E8E Ŷb5}C5pƾVC":B4|Θ ic,ԃ0Ct"_W75کlܪ(b, '#W4O٩v9zDa!W6iAZ1Yf(CK@W~$r% 5nquIy&AL1wn bqRV~=˙H6ѺMH IkYD2*aL yQS cb uwׇ派+&z_sU(5?zV=2|mT7zi}XhGZ,6*PP?,l&l9yFvr?p?SQB>;mXJ uk1Uٌ1.#F-(HJ.ɐZ'CB,,)xu㘨&qYLlxt i#lCtݘ 2i0kFz̚ fˤE.<&Fn ~"ɳCƘ)g8|v/P/MF*TLM+UvwE}%߸_WN* wU8U8*<p;B9"n)wdܣx O* xUMx]hPVtҐsϾj*dg7Ux^"~_U|)bbӨi6j9]EC(GdD-4PIŦixo3C] юz$~(/қDWK7Mv*!+S>EߚHt[M{QeW^r*/S2>yFEuLFɜռX;J_,W褤4b]2D2,F[:eY)lecqYiO~qW4do ŇΠ_USz.tDb$r-қ裂ԟgL}%)3S&L_Ε8s~9Bܒt$f-R5h"сpDWW/LC,nr`1p{%ebJL I]&GqGq3{ gI&[?` ~&aG~ ~`jM._%1tE#t1%HtBqy+yu`eQTVkG: Rvl֣`AtR>  AQP+AQV]f<ߺ_DLK#RjڒV/gi !/~kY9~?2mONuZ>d[8vo| J+?]W s[ҫ=Vpk^(%6P7ƠxJOb&c&~ q,YXs&['Z˺HQ~c0-Ґ/_ujnsJI궏u^}8L9@~]^:yfOA4s`nZ+[k;ocpAp+I?95[ ?+ןFH M2weyY+܁uvmDT;GzJne8|!hqY`[/F:sq \4x3מOCǠ%z XA3!22laZȧP_+fyw)!PN? XgsK$LڳI[;.ǖ,bƲ)P)z@; KG~)N.ޯ '޻ {oԚ,)c.|"RG! ["nYhb9~=aXL/w!J,MUozyh-W{n-/\Iӎ汳cI ]e`R/a])>N2\|M=Ɛ뤙4ɑK.I> WI(uӍɎ*,@91s4BaV~ncs+}-Nڬu$5Hj!DHa)(7>6K 66SπyXZmeF| TKbD[ `< k)zY@jB1 Q%]f ,*廩DR걍5 '.s?,'SK8w[ryRo>.*ne 6µF@%St7zCEg̡D*o)aSwr STzOKe? BtY.Eހʲ#KQH#*GW/MG!ĝ&uSWAr؋|wPqs<&5+H3HI+ | 4( ehrY"; 6>Ѥ1p3y^2U! P8̹OY%J2xN<*H.23Euu:LO[ M)!+NcĬѹuuSP333R~y;<^4%6c6_A|zgZHb i >Aϰ18s x5GױǠ{7@6e$)*|NHHF/nK廟h_\hja3[[٭YE9$K@7=rdJr.YDdtOR;Sv̰âv6-C%I?KR lA@vc1f5 ?>a.i)W60.l$2'&yn6rdt:F1$Y(wLzWх15|Zv#u3*^fK?w18T"ӅGBtoKPPjJ(}gF1e*-۟)J,JYRR7.'M!5ƙҙ1Y m+3cIS*:zpđF")XzPG-H xü+"Ip}̖]lL% p9*ktMζ*4?6\1Zk%$= Zۖ|.Xl6߯ M~wi%hvK`]4jVW"\C͵5k{ vvNeghT\NM4nQu}\׺3p$PK F|$>UR?edu/harvard/hul/ois/jhove/module/tiff/InteroperabilityIFD.classUmWG~FuM*F/5h]vۘ$$עX ؗteXr`?I-zz`hwvg޹ dL  K2qW'|g\qȤPe!6_JH"aU0&ƤBn :hy؍qߨďD4L#{_;1|Y^"o?B |h7H?ÓXH^hb p3$h4&}`lrXl&obw=J~p5za#idMÄz1{_ja"3?/a,#qzރߢUGr&PK F|$>XƩ[9edu/harvard/hul/ois/jhove/module/tiff/TiffException.classmON@uebPhDE>r?EDࣀM-vvwfgo1Śن6ޭNө4*9%l.&q".3qe*Uf}IIsvF(n+#"&ׅj*&nI]HaTkNw(]~8\`-pͧ8bsP kXZl޷lV4`'btOK_PK G|$>+]Rl6edu/harvard/hul/ois/jhove/module/tiff/TiffFXBase.classToGƻIb %)Gd!PI` 9Mquw zhsiąK.H% PUUUfJP+}o?z `#x?>D0GF%0-ᰄ#>pTI8.ҋv=,ND3 [͹l-g e,e`@u;e `3 ZQ*WrŊElDg诵 ֬%eqıc3Ԝ[y` [}t^Իz{׹Wכݖھuӽ.[ﶄ؍^!f2_QcVk CD'pGxB' Fа{"'q0ӤpY si8+y,h8 pQC^BA娉,wowiч]R܆"km, "up eμe7^B!r wVE,WLORmri2snk<;}uZSipWo©d{t]fzo(0,?auTnvD-m/ Arbv^ >zvR?d1%K>'TDUI̪:L0V%~$&K#"DqB3"⛒Pr˴CTçߦn4u눦'<sd5l`Q^~sD5[Ea9"Iufe0/Tc)f?қ]H%+FF.N*S#OSkFݗJk)j_)a;DPK G|$>dbXI3edu/harvard/hul/ois/jhove/module/tiff/TiffIFD.class} |Վm9; $mVb[e'vŖc2wmci \@]PPh@ 7;;W!/vy3z3;o~!d4g_E_qȟxET H@%d'|CM-AJ čD(4$HT$H2d!F$I|$^$H Ib$%HJ!IHf dH D2IyH#Yd!EH#Yd)eH#9 $+($Fr4cAr,T#ARďI=$$kC҈ I3 $둴" !iCҎdH:t"لd3㑜D$]HNBFI7$$H"CEr2mHlG2$d)Hđ #AN$Fr*Ӑ $g"9 HAr.Q科ʟɅH.Br1K\;}>/WWPUȭk׺"z꾁oD7}4rf%(oRPOQϩEݿH1|q|4r}?u!~Qu?15My޽;~ѓ{~F ?`?Rs<^o/S+3uר/+u7M~ߦw]~ߧQ!|D'uP uϨs|~A_RW5o UUpQTqREꬸϊBJUҨU{J^LdQ%:ߠJUrG|xR@)O)E)JURBRDLJ9U*2*322*2*27MZ PMG\@TY$Blae1݃oK1e,ST9"M (+ңdUVh$Pe URM|EJ>4P%.Y(Ҥ.*MoFJ Uk+UڨҎlJU:*r{DKTJ*'SeU*TQe*Pe*q Se*;* 4N3L$gQlCyTCrU.EȻ*PG\F˩rUUT5ʵT*8rUnMTUOPfBQJۨC*?OQv*?ϩrU]TU=T/r/4N hݳgUҤsQ#r~dP !$|{ɣHCkT~MT@[^~-JA6|q<.Ƿ?eH@<$/] W9PoW:WG1*7!|ͿoF5Tyi:e+˛3dB[C]B 1} o"B\xǜ>F8 dTr>@OA ɿ /Ŋ9謫3@%J1S>A)    Ȕ0 (dTB-|æ:÷)s׍PFFLX\J!6Ŧf)Ws(~GD3:{?EAB{ԋ$SLERI1$Hʐ` ퟆ&$T Hf![h%lUH+#Yd!L H0ȣ BTJ Т4ZLYɖ#9Rd)t02tBB9F LsFgtJ$shiO"T]PX&K)]ZPJJ(JWQң)ŰXJGi55R꧴zJ( Pu6RD)4Hi )m4Di* nNJ7Q"=(vQzaJ1,ݔPB>JL6J)N1J)=!JSAANJwQS)=)=3)=ҳ)=s)==O^HE^L%^Jw()+)ҫ)k)Rz=7Pz#7Q=JOzBoHfc.olKD H$&6 oD7IԐuP"i&_c83N^gI`:j|M-Rr^M rJ!ljmVڸ 5@`cmD<5Fʄ PR7[kHZio75X2$ ^մZL3%jc:YF`$m Յm!@0k:W"Yz-=R72*6MY7:Z)Ьklge\_G  6(Vg"X"y-f_kM.PjD"`|  2`ti`PeCVb=*>,KK9oo!DrD~M{ Ȫmy50+,ȪazC{Ss!V_sZ\c}6kke9.\k/16m壡HIk5mA82h#gD-зZ;kZMXȱ&]q|umfC{·agjVV@ d% owy(!jak3iTQw[׌N SZpZmPfJ#GuX?aؓs;fgm5XS1+KM9`)sT*БڰQJ" P R!~'d-L3LU(ZֽဉJEVmţx0[tTAW-% `f~g@G7F%AZ9sWKll 75f.yO/l]l 4;]@שAQH2MHıĕ @Ai;22f%Mv 2^jno{\ڏ+"Ӑ};:=vd^t|\|3T/xzGOq?V1ˬ *8@j[a&lH$?IjԚvN%! ( 5!,JU&t1TWXK2ŶL-~_[  YX5{if)l_aSSՂ3 G8L ޝθfk=i*c[VV} >$oe1@ LSOM\ h(Q(PYPZ2iU1h(db=Ő"PWoAZk9Kwm Zϼ`U?^^,[&[ yo|ՁFV?ΝmzYl9)Ę9jB\Pue,BPF?czƺ<ō"\ЦDaD̄Ň91 %z'`m J0j`@7YbcDa ԰{Q Ӥ׊YB$a`P( P'0Y" L؉֍Ƥn ݼ%ly4qBv ]tZ{E`e{Ot dvNvbG!ڥF Ÿ"wsC"m6BL}CNjB NM6j_mG"aZ L4zڰ ?P88;pOx`5,Ja7Ǖ+#FsXdK5:qW-0+AtRAAc4Jm;cM\Yx*Ⱦ`;DLCg#g[1ꑫZ\=Q_dkku6@QĈM<;$¥PzXjh4afqV2k)Fٍz(1tf;&f*B]1#rs mJ Ʒb;n"1A3`D5 k4"Dⷺ dT7j`:׌+ n~τ qg02!_ `5]Jַ0 ;tNR&ȓD4FzFvz/EN,jHSd8>?k 347i=ؼvEVQ`_l8=2< Gp46>b=сQ#=}Pr#[uPOdZ'==20csFCA=ǬсPx`V3NxW5ti]Zbx!ʪ_iv[iԮޡH$ ,c-fÑӺYuzaFozt ⽑n==]&^dpO{86 " Qڵ%Sё0jQ%v6t GwDEm+:- ]\-,37J lrņ[U"C[#-t!a!tm[cCn:o,H @S >1d* k`ȅHS͉ BSF"6W y }c\l >!f x++ҏm;Cyهq(HKG.F-fK{VNcJכ1[5ߘ(i?'X/<2&iJk Vvs4gذ[o7]īk=[7 P5̓;B׬Ca8㐌Ig9* 6 clYύ][`0nc>bKd urTp oZ$[7AX8f&FHe)?]x`xIJRw-IKq5V%ܥXvXGX(fڛ[MŠR`Enc16pWn äm3<*f}f5!hAآi=D~yg0U,~ct K7':&kpd: 3w; lӷEcÑP7(>k$R]P],2h @OlWMs[jTq ʨBoU)4jAg2rbH\2qV @Ocl.$am*,Q%vH*|u>3pU:&@og#J2 I JXY`mך;Jm͝B sqKm;#2ݤsvܺiB((JX $.lX] %`&nZ degu1Dzm0O = =C6*{7#&^CF1>߽̘Z^P01dj3zX6~&ǛIRwN1I!Ǥc9؝P4v pX"@C@oM+$b̈́ 6449Ƣ`(e]67z5b\$Fmi y M]9l݆8̗Pd;R9lQ,m;kmHV@[a%mptQ#TC8PiAlO<7g#l 2|!+,| 6^+Ϳ;bt8s~>ӿ=Aզh[T^4[*6KoI \XP +, kJ,̩̽qy,)q.zgEAI}zl,]W¢mdӮR] v]+rBiA4sPU(#8V}{v|?pMS5kn mah\u[ZpzB:S?VO:_KT6.C?VILu'vPRޮҟҟH@r'K?-ѭ ؎s#nHwEr?א_7-$c_"={G$o"#" HFr,#q#Q!*|[ |i$ϸEty*t=ʳB$,vS%H"\y,Ƿ#WHB Ʒ]1ɱ8$>Hj"#CRIZI#&4ЌoA,P G؊$jCPB'@\ xO>WH^DŴ$eҏ?<S4LBޗie(FTEhPً 7UG{SΖrqCίؖo{_TXf^rso'~S]7op=d79}3yA/kҞɲ'MM}AJ>oO:KC'(*}>WT&x#}[FҶ _a@fYKΤ%t9pLM}\ oC;oU}pVJQM<˚tw6Xa8sJ[#;䣶h?.FY>'i! GXLEvlnolT H!-fS"o VLў0[oOַep+Eퟰ]6}4EW4YV5m轃}n]ϨnDfB_Od8 3vleRX$C 3uz'IYAe0r&7&jdR؄ҷ [hreld)%'I'@x,ڣP}BhSؐoW4. }f*g)x%y;Ba 0Ư0 @g&~-OllSd6sC_o$ csU&_\`(HyQ0O&|H>> p΀h=:`}L>M^#;Mcslh=#(e_U]XF/yv,JæIԓYNE]M]={zNY_ jR|L,p3S`铙b,v18#zFnFҙlv/Չs'?ϪN|h$9m4gLt]?g5%~7W]`y* R_ѯU =zGR=zq:KU#ǭzU=OtգT=YlՓis雪'ϓz3SQZI14_eHarTПHf`&YHfCq=sPP陫z< gr<0 cqhs!Z9.Fޥz"YYz@+<+Uϑw·v4#?zxU=ǡyHO ESz4 YdFLۄɚ=Aӂ{ZUOIv,|ۈoNL f$ߓW='xNLS`ӥzN@ߘo`m.I#=8b4WpOl'C+XrQs1- U=ݞv@l瀞,PWIWVĈ.7C+MugWMS:PG_}DUVV/h\Q@?%1~?ƶ,0 m ;HΓT軩-"(nO}S/XѦI;Įjad4|BY˺c7b)Fq;`Okf4Jzg8Vnjn< DaH()M,Y60,G.lU?de,e6bTfcPb 8apWnPZEő7|Kv8ʅXjx $csMxh mbL`H6O%ʦb -PTY^\g9bM[x)&ƚ 1acȀͼ7s8PG<4^46_`EVU< le;/bx7jOTQe|``ВPE"lr ,T]`KؾP["sSٱ)ʬo5Jsbs Gc3ߕegæB3ux=H%  1nCݰ%=35 PॷFAD|[:o}vj;fFSY/O7ٕyu+2TWϝuon/\rlLԻX9\|.Cua~cӎVd<2M_QVN։;^ B1q{zΐnAᎿ* javOM6Ykspo'C?^v}ɾV_' Ȃ%|v_ZpoZsgX<@evlu0?c+v-9pYL:ۛ[kkG@Y{ ؃ؓ|pdl@ eWvs$d#[xAeüԓapixƯDY&0/&w2HoYJ.6/Ja7n.. #*L3"4ty%mLIg"t#v-[=woWA7c}aܵePc5jd* pJ -kMTh-A ̤0]v.=[0qA:Ma,0~2n,\X[쪙ad%\taHW bC(f9V0{J 8Hϸ#HZͻ!^>p~h8q7PS 95Zp4^[FJ`"C[!y2/?L AdduO)0lbOAwzuZЕU32 >i`}s5`8MM2IӍ9g嵟pwCw 뛍SMho8BhH/z7Eu_RT-(g]'Κ-5Fqs׽fî<1b:ðqT-Ftb m7a(-~%Qցr>!Rٸ6PJGxǷ;oY}@ 0m _̪ow2<. zw6@fBduE 3C&f"3`9$.*X4Vv C5-n0kvLBt~ ~mC#aSK5m֗L+0fgbS|&8PkTv{V&ؚ@UBEvAf>jl|>cXD!ެsB0g{KSKk%f(fUYp$hb_Nomw_mZ;]ˎob=t$e^vT8ńHBgH2> p+O 3< l\)เ<|/P/K rxW>RG^%Հ1X Z5k\'z ^+uYA-^U!mnAw&o|O|$0-#^o'( pp O<$8a!w x7S||3||s|=>E%w||+|| k| z7F7 {/YoH?koOL?||n K_"S"x/y/uǞs+ǟ>̟UG_ Rp3{g'/  𓂼_?%?-A^~ջ=~x?_`-?&a%޿IN~ME_ u/~S%-z {B}??7?[nWe #1'8g\-t_ x_ 7J/r_CW( \[ +B  x`UGBW] 8G+S<p ƳTe p!g x69^x^"ी x9#J (Zc>OՀk\ /:nZÌn^Cn. 7 p7, w $ao-B*>Q xo"!qa<`!sSs qn!Oـ C |:X'!>tl|O,ċeG0+~IW x'`!t|wMi0Q?g^G!uF_q ,ī@WDžoExq1[| `!u\ `!u\: JB< O|`!>v>/;)Sݥko=\d{A9{>?ǞluÜQ|?z=ßy<\OyOq\Y|ӿ3*{?;./{>C?̟r/߿?_ ~}|/W\k$=%/2=]\.s}7*Ißi<]:]aL_K!p˟y<}>Oz\>˧r\qz2Οq9Vty{gsسR˞U(w}ʄWz&Y=Iۈ[lŕ[o5GlS5Rڊ V[q!|(6[qۊO6mئ71&nmSl1C۶IFϱ0ږXC|mɗ%cz|[.C|x!PF|!-[.4ėVHb߱-iFޗ/5^hB&l>_m۠gklVlZێ|:6 s .5}|Mj{>߶beF~`<#Ͷ^coM}!_`o-Bh}0Rȶ.2Rņ'%k/5ķ5}!mon;l3 ]6/7BF|!G_i)k#۶L&lzz[1_d- ʶ\kg+?`[ 6٦5ˏ؈; M1װAqqG [뛪%70z#71=F*dٔq"g Oڙ{!NR{ɏ'?v8/J:` 'EzŸ fB L4&JK=DIܟ"cd\Hc}NKMT8nhVԹg$(j)HR,p\c/c䯐림0$CE oZEI%߲P䆷3/c]({}3= B9tDL   0>i*,?E¿M.S?.Qa_Sap?SdQaVB|bɬ68;Iq5~fiN[W%\xtI_ul/ź~m*|c*|m*XAGee٥S*/U^^Z>kVEiˍ++aa0:<KwB݌)LQ X)bIIl~t $ 8s$GxDwNkT1I#BIJIj\8$~R̵X$Xm8]6Qf?ɜ<~Ep$UUT̮]+* K疕U._ߛїalg3 xGYmعfY'+:ILHkc"G >;sٷ?>+/\_\'-\2R 犴̣U^&HӈϫI5$ &ZgQY<(1#y==3!կH}RJva;EFI)vFoژ4&5[^sE kQeLZ/jTcFV^aYmͭ52 1]0!ebC qTppDǘ) 5\cjl5FQ2gr˜t>sj^$!sqKaeL-@ ٲԓR&깹Z \bY곷bR-<&m-{,K),zizn ЫB=,fWG qʘ4$h8E I *?&FƤ;Qcט[85f=զY]!4iUvD=wz , {={G-3S`U&>+'4)b'49)QOM7 v)eZz{R=zYt|Yп- RDKzA˵.J7-AZz{ ,KSXzIw!e2IW=DPCW& @R M\=&]#0PkK>wyˈJffyMHp~2͐*Gg * thAF9J( NnҋRD\+5d9kr%%A"܉?o&jEE9W1GoeM/?H-!_Yÿ{HyTl~~'}ar~A~ڼ m}8as ,C nc]< qȄVWId!IN5TDeVi/@Ӂ'[tj4*lYAfyXq5zXZ-Ƶ5GFZlگ'$-!A(ڣVj]t+]$Kk}H$V72@%ޯEq%>u@(oIĒvO>ZH|E=1l+5]a+++{㲲R<Aw8(@N(r>]wC59ה`_־҅+d ]|{ G J]qKI=䕃{z &aЯWxYRe>rQ\(?`mqY\OUU8զQ#%sKdP@W&?C\*mڦ*:.Mk[`eѦ-֨ԦeBvudZq[Oz=QqJ+9J"C^/}v1/*P޺Oz{lUy1H=)w\Jx/FV6~Rk0w'ieA0(d"ڛiB&9:*vIPq.-T\K>6ܐgLXeJ?iOCd.Aqҧb%Nj8jWz>zt;ldt=dQ2G+]LmtQs^^UJ*?<#MݿBjߊ LoW,/,x3 o`aUOA=0VdާًgB{I>a/ҧz/ ~gvJZ@yѴ]+Yu- e.2A'Ux/ *n6YIfo#l73_S t=㰋W;CЊEi8H;Z+>(h<`l(YkWd[516% K"ųtwB_Ĕ4Vϰ=Zk j% 9ܬI^֢{yY~9~͆2CWhE76jECbP88AR'2АFIcsz 9Z ;9‹QRe3/9\pi˕^Gɱ)4]2p3o$ Ď.C ky’CVͣM}tm ;Ц~v@a%Sf)=Y[kN8 ]NaH )ڔAUGG8Rd_kS/f&uڔٷ&H2GTM9%C *kXA+kriz/ i W{7Gd6~ocJc*܆߬W=jSTȕ*a71%+L=i uQh f -w'Z% ROaUX%5O+hhQO>1@5fѼ|FIiIkޟFEjBИn cn$Xä6=qiƄcfr+lsNҷLdh-g[ݭ!.\-ڔzRjFSz'{B~=h6 ]'V` >oU9.J-%XڗGjyJ`V_c ǢWØHQL8Ut ({qz&GX׍B뱛e6Eͅ趘ݷ(ؒI+6ZԦ38a)i{8A{Aک~d^m^ k=[o FHHHH0Ȭ0ISۆUsU\5CYP%{]FQHCLCuTm 06j9sIr]8B4w6XrNS?lxb/e$:H զ$CPOJD-zO'hʧ`ܰH=)os;r ^y(^{>^{7ylO5i ?,N6NFf-3fkJИin>M~ \`눎c4vVv&-OFWQm%>mcmVP/VzD<{AUN0^18Nj4y&9V)Ȇp5G |u k{A62J:ps4ha͇4tV~7x)FsXE {74WޡGi>Nh\ Ƽ^k_ -t@5盠pj^Ԥ9Fɉzڤ7k[SV9)*NOCPs2`b98ʪ7Ch?ƙ5kA,&h?v" ;7Eγm @NQs|6䨵'Gvh' z/TGO7X)wjgS;-.?NnlwjM`”m&&qYNIew&U K'E!o\4NN$~&]Fl&4B-Z5+ln FԭAjpWs\ә6q^w'k vXFǍvXD#s sMO8@X$*0$Ӿ7fOҽ󊪊Uesʋ+$N$\ce@_E~UC ~ET8K˧ 񽢢ieCsϨVצ ]_R}%`4~h~ߦi +]ŷ.r=Bks.W^{y*ƻU:Ǽ @JJx]NKaSaQae)i4xrL;N ,9ly| @v^^ċ=n~!^{EŹ99^#k㋴`& l^x_~~WJT^56vbyYibQ#YL+ ySa%QrV9%磳 kl'\Ķ?b/lUȹ[њgؐ+ӎ8@ހ;=Kwy@In/;mokr]%Ck9gArWO |1`q!0!}x-qTd&X;{>E?P C4L$O)Y2scH~ :{HIkԐ]=H@>" f |s, "-H,J[ŀ/dzDWڬ ? V˫gy"C$E*   T$ x$ DH1mX0dla":W;#FCC2tH@ҚZC7PkjZKo6RۊAjNlAYCyZe#4#?R67@j#62T\#}PK F|$>\97edu/harvard/hul/ois/jhove/module/tiff/TiffProfile.classVWWM%HBI)ֶ(DQJP%$l Ӷ﯇/ S=cf)&pߝ;̽/9 a .\.9w\&+^%EBR\1BqZ) %% VB4!PU26XN:a1eUbb2*AMI'QPӉAŔ!M1M,BE3_:2]4i)i뢢eN&"4FcBg }B'"pNOI6Ns ŗ$ p2yn.Ҋa6\<*c3Onv$X ^==r݆y좈ƒ"Y5bhF~?;*lYՋGt o3)U mK ;#@R؋Š.T<4dYq=l6U=7jKSǻ{) }al/ 7߬F4'8Mb4FA72?{}?R8 e ?K?A-]zFW hH^&i lدQ;PZg4۶/9?=/Kyu R4  ǥnȩ9]#y0!qC1}oÞ>/߸ٝJA܌5b8a=׼>5= ; xw;\U뮋w\ yøkoOivH^Q{;oHV]T~\W}FkSOoK]{ cx[--y;w6HwI W ŷ=ox*0]H**NV<9;=e+WLl[t&5nwR{p8t'  Slt(.pa:5qĽ\8OU PK G|$>[ӎ7=edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassB.classSISAL2& A1 (A [.jH'"g\&ȯ L a+ݚ;P{  WgF{oOP6mu}2ս t6 P_ #1:L Q_d W~XiUvPݪzd;!Sf̢?|tfͲ/5>(D<@Oly-$lA0*N8͂Vq6PK G|$>Ҝ' =edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassF.classT]se~vl7m&-Z44 E`Ԧ|m6B M w\8#\8֋ 83NeCDMKg@;>9=臟ƪx͏C pT1$}؛`:8֤Jl'm>:sS,βxSzŻYSٚQ0 # 4@i[wL`BɴV,Sx|d7%RL;qdoc te`ї}lH)x_(SeݶR8|HP~ 8O4\E pE>> Cװe yC ,|P*[XYT[eBMua+p44Y-0ݶ6%p腙cΙ5m+]ыƌy:ڕ^0n8W=Q֫D֩$spO>㡟 PnJƦj)tN\)láI#yk՞39 =s1FA QFeɨ{lZcjn Ϊ^祥vǭ]*aۦU8޷4oFSf!fQ1"-:qa1y? C%ϐ7vLϾ@R26&̎}?N9L nJ$$+*9FPMyxBxOҽdt!8_a(SHO xx(}#299erJX?}* pb!2smۅ|P&Įv\sq눻݆Ɔ\/ ,eS#"Z{<{Nȃqi}[/I"vM˷ NzŵQk 't!ҟ<@)\Et&Є k{&-8E69NAIӥ{I`/L*8`\DO<ѱOH, ">%#z^ PK G|$>ok->=edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassG.classSISAL2& (*Kw nD 6$83A#ȅG.*˲UIr)ׯNa2N0:pDE_ Fp ǃ?/a@ <8URq!4bXw!OePvA0D]n\ps]4LⓢPYNA/L6\q^z.L{Fgng=2ūs) gTЅC(wiXe7MOu{<PR prh qEU)]ujHK02&$Fs6/za=3mvKbJx=д@ju91O>\7Ug=ǰJ)%_'s@C;)[ɫbKO,L337'_On.{"m,iAY^@&2SJ>edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassIT.classRMo@}8%YZ' U j "8-:^p`o*p "q@p Y7=+}<>p8k✅,Džҧ.iኆEWM,1+c1)J|PɸY E e8M <Kdm  O k rW7>WM,ۘ CxJ=Rq XqSFUC u _uWgYpSjِY}8u/_hqh롄&rU!.⾦gTA&TFuܗts pGV2ul. #Rv$#{B%yx~HXMS=i:͒edKO` ȹI8Ah׾n+ =޽G\s]$ dƘ%ca9]gQy*PK G|$> U@edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITBL.classSMOQ=@;H)U ~@[tA $6iC,̓NiƟ6.,ʅ` RIn}}>X#?05aq;3n!b֏9{/,vѻ(QLB\Bt7!fU#횮ٕn,ly!ZЪACjUFPLV桦4jGuq.`[] TBRBJFSusSQ+lT-gӋ+Kl:YX"*۴ X}>2%x c28 +#ub ;~*mQ X_2Am6&k[Cԡ=@~ھhGAp@bV]);ު57|%B`BA&;vIʴ Dc7mKml, ʩIbMbqs'ZJfcչMôv)`MY jSǴ&[fU>'ﳑf7y@0fބH֭?Bedu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITBLP1.classTsUni`mZm+4DmjbD%M7qT|s3x^x08oBs6(:d{s=gOkgp.ƛxd )(fTd?ľY Ca]ekgEfK̖V>z  X\$SJޭIq ,ϒ~a%ݳlr&  7mݵ|^ݗzӭkoO7זSwʁYvlU̻Q k8UuݨdW z)74ܵťBJ*cZ {}+5|a~6`h46(i75Ub`að%W-rM7*RN`U3.ݲ|hu)f!}%@p7utz9,,0џТϟt_%d DVW6-~duf˓o+kpJ 7pS5@z95N}cѳs{r%뾴];d-2wu&]M;ݯqQԬS;.mzkn5lұ&4ʗHcX#MM^p%*gq xn!X *+yw7/BTɥ+ ҬI9΀|#kktbDw_" AC g@yh3D7әm vLl)9SJdVy+L=i#~@6#:t@;hqG,a၇VxI).E )ŝh|TC CXYdy`F1فJ,QutFqUU^`H 5/PK G|$>S\@edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITBP.classS[OAv U ze"}dMڐ fvqmv c|_0ęnr9f9}*"1A cR87LqK4fT<+ma] t_$Ahl`]Ih`NC2mZoAy,hXĒXHd5䄛h/`Q5*k%%L2]h:dRv y\=}z@uzsV=μx/ EК%i-:@'1.`7s]n,O7DJ ۳g 9v{c ɑ_iD EMN!A>BLwt䤘 E88:{u',HR^\! 1,,_!d2_KcrwP+>A:4 +5~Eh$ |PK G|$>g)TZBedu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITBPP1.classTMsE}k}`؁8IQ` DLDKVb?L+\8rɅJEQႪ?܀{.޾33OcO.M)M6.!4 e"]ef0ƬQf7&; *T+HoڮR$+^[*"[ͮXw`;侚ە Pm9gîw(׎ianL#ϫIkQbS9`inofeVy)g6K7Wkky▎x]At6 hn}`KGd~Ȱvtcf̪jSq:,u|pdqkGܲ+Xwi<':*CP0qT%iG݇Pp;F#mA'ݑsF.G%LM~و~էY9mnx/HfrKdV L7>eiS/w(VH:'wW7o=fix 'S;?8tvKOr.U"}R~q, 4o{'ݰ&z|餟sh ו~g!EE,N!PD{@e x"n\:#E[(C&{@Y d Of'G8L`\F1$F*xgF)RZ85; G41ԱW;DLNʢO|$%oM3OPXJPU0lX_Bedu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITBPP2.classTKsEzĊ- y8! ,ec;`M*5҆ծ؇  G.p@(*'T_Qtro{f{f~_`_<.M)2;WT\ՐE 9<CGl]c`:[ uغ>Úu [cIJ}ے 2,В~c5=l _Vhtw$ mõ|Q=Fm40wno>WpekTco)80wv QܮŬY..\]X^__t9œ u|t|m% vt|ʰˮ;:V 85Tu|p`cT-|llj+ ^`鿩wͮh˲ DKBSEo(Ґ3{đ0lᴍzYN{:ݖKF6?G"yѩY=uoGv{}uxU&]:nv%i:H:1~FclAz5뱴];iu^P٣ \ RΎI/Le5EzImTm q1ľ6îtUN\Rb)Gzezar5Zc]A!R,+4YuU(&tscmWL<E>?4_aG1SĿE"dBJ0ՇA,^=ՃDzh$Ȍ'(?I(Hw6#( r9 > p.7;@edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITCT.classTYOQ.vaPl+օ:BdP&-vpfJID/>XcO>x.q :޳}goGYA8CG3"㘂0F AN rJ!!#qK ( Ɛ YeBm8ÐgWg4,ouM3n5Ѷ5ՆεSk\z]fw|\3%S22U !peM7r%c$W+#t1?==V1I!  GyLFQŌ ".,+*[dTy^GpΔltd0L3CϮMsq߬0jmVZZ>C&3+ Jiq AjwfsMJ).i"\6UQ2e?h[4 FnNSzKQ}i1Lt{0)>%IhM+-F5UwPrlǭvkCM#d`C2ʗ`Uvi7[Bedu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITCTP1.classT]Se~^BXP(PkUkJAd+!l[)~̒mݸz3x/LgU3_$ >{w_)9|ޏ70LTIDF2ftk 9g-K,-̰°mDVmHw[c~Ŗy`ϭUR7eXޡFUwm_JUvk+{C*=YuګJڕwUe\da^LǍb~:30YZZLhx75\e[C`i &Ca!`ⶆ;{ 2|ۿl}̚Yfu]f˜ X}EĔ֡W-g_/L|K~UlͿO;nWnezx?Á @7/Hh|x;YVۮsz I5I)N =e{tՓ'N\k~({aߖu𺞽oK߭6X{Hwm P AQ4̃hЊ/;It t|-5jԌ-w KH/GwLc&JBedu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITCTP2.classT[SV-cD1ʥiB4 F`RJbJQ/JRB/#cĖ\I_K@^Pg&szٵ ~h!ь>^=@0Q3Y\c])HŰEV K :2 CVKk>K,`iaaK*>lَJ$(Y"&}+-}[d^JJK?˫ǭھ~=zíRjU7v7FKU~uTTT| \d;;a^'Ra~%zc# njk ;ϰ- cOC!P`(Pb0q[%=C]g_nafbF`U;4oѰj2'bС!}쑘a 0w:RNmS`ly}uuIc_=߼ų+M;+Y&D%46}ul'|匭xnCRgʆHZcEzhsJ6sf%퇲.pq Sk-9־zGn΃ 4uijIP_`,z WhѭɷrAU4 X*[#1Y4d4[w@NA֭^I~גNLjJ"=7~ !|B&~BǮ૥$@%P!z+¹p؆OPf[fRǨwtPK G|$>FQ2@edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITFP.classT[sF=K qB DhBS`0<0xm+ؖGS?ѧ 83[Ʉ>Йv;~қptp*OBedu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITFPP1.classUSU]ɆBRjI6P)j@"IkSԺ$Xd3O>ڗ>Hg79uys{ٛ?)Tc8(Bg`dc KSah|1|0paanG,dc>Q[Vn J֮JkziIm޴j=\Ֆm:Sշ[5ݶ\}gޕzݮjRM-. )zf,5IgTUaKF.\A/dFF1?ͦ4|$0q%ʭs,i0p[ XVPPPbbKeX57VɰPӗnbfQ ٷu{Fܒ+3g tڃf$y};殩Ɩ^ pvKzt+,AL^vuXojdYkO⤾f?ˁP[S4MX%r }I/l۞]tt(rP}{ A9\Xz$k%Go"?q5ڵǺC_L'k76NwRE֮y]>C5)6J)a7UߐN~h5Hu=|.cO~qX9ʗ%_H4w#dTAAGO[ 3{O}'Y_gT*&گRmQ*;=_8]!.y%Kڻ~;`Կ˄I^"} *>PqbZD24bpYA PK G|$>(ASBedu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITFPP2.classTMSG}VZ^‡A1'A 6/(^d'R4ŒV")"'b~/9WR.b$ݻrpuxyw^E|LJxT5Da0ifq,Ca*| ^c:`k%U|زݴ}2"]%T@³|۫+^ujvgR6v-wrnn8g:h8v]]f~e)}O[kVlm%Lŧ*>1Ff>o|(fRf06]O7u\˜ @t+XcXGAG`(]|[αpa;,]Luyf9_,fm۞c6&}j@ז) _``uڷ1Jk7wH?]^ŵ[4iRבD~M1oQ[-0%f\BXjoj`>o fq$UKRPճig\LܡVkq7-:I!=\w#9=rsNfNS9A`s[jYS^a-Bl'+Aw*ߢUfpNT źՐ*V)5zB9Z-ҭGr<շT}9z.[ >p."3;"4BH"nf&@yhsDCkSG>}T^`/@edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITHC.classSr@}˖#+L kX$`:HH 8P{l+Ȓ7>K8U(pK@#*~_|- ,jñ8wc?ℊ849v6<{*4IJ3LjQɅ!9*&bsc"%C˯X/,s+M(76W6jMp-X¨-T sa~6se(5[ЮUL8# ‚aGi28>踀~ 0h qSTG4ftbN%\qE\.߽h7t,H&fv_Ӟ},.&3 =fWŲxwopN(TdQ<KRfz"~K ^n ސ33MKH;$U뱰#Z[kx$X0Q):~(vGEjSMSj: "h(ڮW)@mCcDϐJR^f}Mx+'f?EwH锭\^ .0:p $`dkDBOC鿕ކȫw.=ڂ Ż^J(;oEMj-$:҂דSRDJnvb{fI\JJ\(rjJڄRSoy\<x rt-*8´l}*qF|PK G|$>KRYBedu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITHCP1.classTsUn`Yll ZX!YIj/Z}pn.d>OKf|/>8NG_ʌϾ8z.Ptqsϯ{=?4b/Mb/KrQ+ Y,H _|.E K i򪄼RZpI&U).5 *6Tl2D, .3ҙk [ 3>,a ڲ6,K=Q-rnZq ֻ00̝ Snyoڂ.bK:s ΎaVw F9?6+F~}}-2<1,,orx o븂ӱwtHͻv%xOQ>I ['cԵ}߬yugXw}w6oxaɠ;Cb?͝Q >kw*-åۍvL-LvEOu7WjЉ'vxt z;N3ө[50[붅ri2ԸH_{h#m&4d2خ]j<*@ Wpm׫OT@>J)}³feen` "PIkv>_C ] PJ1S{ xuF8~-~~#BJR!1 'T~oE{gs HDzH)]GJ=L=N >S8ǣ[W#W%#cD}'6dqbgo 4SfABedu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITHCP2.classTKsEZi:ېc^X[&M8^,a BDIHݑ N7% (UEK\ݒ{ާ@fp9QYyĻxH[dĀ`)˰Ȱ. +:,2qXu  $=bF>)Hj/{*4uEu dXsݖxs)Ժ-h^wݝ7e- SwZ0q5XqwwwJ[.ί6֯mVW366e-X>oml#qڸgg6vqm|> 6 %/Q>=-Ene/_ \}p=mˆ*(-kRKۮmgH:-7=Em(x'#MPJ*,vHg '#Tj:h+⮺Va'xij-t6e~/Z5kPEA֯h[_cjw{eC5g侮XH`t'ЇtnnWBG*׼A8 ݶlS'_sXJWa5p#k:8^i~.K(O+we&|eAdS# sMD&?.>q?/,8X4'Dg=$hP6z߬[x(`q|#>7 30]lpFb:Ʀ'ǸDIcsǘ$miOxدeqEL k̚zq1: )@7PK G|$>\@edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITLW.classSKOQn_3Lb Q)VG#i#Qfhoہig%C6,ݰqaI\hiC!y{?S a\1ԁ\°k #)1[\[HJ]oq͸ Y;sh9/c(A..Tu{2˺c-5fmiVI6 mejnQfU\VL%AgъfA[3(ZmwdDp`fZHVj~yh|"59ɸ)}'H Ö12<02pydd,oy3,x *2c'14V U &H=tIMU"uhW*A)V(yf+on;.3y*ɘiFlaO,Ѽ+kMwY- FmZelcj`I  ]7^tx]//6%K&Ĵ6>kcŊMHm6lBmuo߿֝K_4}aO %#grDɷ?xNG($CpY8aPK G|$>;Bedu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITLWP1.classT[oA\Z eU,ފAٖ]vR뛿/|ALidR3[j7o|g3ۻ-'" )8-‡3Ί8"[qsHpϟsk0Ap%L "j\% YB "hvUvEˬj:'byZiuZW\o鲩j\rìt*;Z*+cͫͲSvx\pCe%x~Q.&cJ0LMgt\B %Q-3`%L#-aO,w઄k.$d{-$p.r{V($~ F٦Pkt:jEuT%@z슔Cί몬FM.9f25dMݴ:`͎yhctbBscURM uV6N0arQD ާ4 &zK.ЧrϚtFvu1UE1j5-V*~+k6o: k%t#%2Ԩ9uc?[5*kuXVl6 HCa v|7$y6o [x7_XOc0F`{^p61m#5}G__hCt`hCrp_@y_^(]yH Q!Sh@x )`9ء:ouab`}ET CbD{G"U;PK G|$>\Bedu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITLWP2.classS[OA^, ""j/I6)U /3Sh\/֦OǾ/Sq4:Z!ͺݮ1QwGMFty2noEhΣXW[^w\R sH!Ԡ'g8IS pU "gboPK G|$>C1ɒ@edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITMP.classS]OA=ClY *(_!Bci6[ y)? $}2ƙhps;wן?GA.01aLಌ+ R0Kf&"{C7wKA=m ":Tt-Fi`uզ=n;K9fT&X_2AUwm EJ>E@=ڢphaTn7 ,8j$?\h =̼ muKyr.n1߷6Y cr v<.](V5Yj19L-hVu\l[vG0&2d@rx2"fh7I KFhiv}_~P6"چ1spT3v jNҥט%aTzPO"2p9v1}.ƹSb?ɸ sw PK G|$>eHΣBedu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITMPP1.classT[SV-0rmB6E1[oRbpCJeJeɕdL:3N&y3M+hiwvί $"]H*+HIE6Q:03\c1Luw9=fXeiaaA*>-XIg6E"|3K=/xey"*+u}Mmݵ|ޞ/[RX^Hmެ̻SPG^kJnI\nvv&cp VD@5,,S= bE>cXe3a]Ck@QC;oⶆ/0l3|n ,QF)_(f.0kUsWe`V6oj$%y?H3M6]x;/0t25}~7tPOu%|t?#RVW45J::nI߷\| {$Ya ܪƔ 'ehSV\,O-̵`ݗ_ۺ!}׮s-_!ϾKnA#He.Pgn/N*녏7MӮVLx4n[6Xr*eͬ+B~E'bt鵱[ݜj4NϵN#P9 d>tdҘiifE!GOEO :Н} MvȓM#r+AUˎ>rh D[sDٱb>ր6@眒RDoCʎ) tHk/Ht}K78 r\g::݃Q%@#$hQۥo."=ȶT,2qD*LPmdĺ 4q&ID-CMi>qأ,GQoVqEś"N@Is>k?PK G|$>KQBedu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITMPP2.classTSe}de#V$\BE x+l%$eldqw"/Lg/dƿ /lX}}|~η?~z /5NՅ$2󶊔FLZC cgva`bfȲ 5wf]昺<âT/[kv@D$P܊wll;Cד5Y{w`yciTJݑF`B@Xs~ɺHJ*>*. \*++YBv4eٙ٩pC%\8_ֱBt|U&nk:r y+3((1bMqa.6 _3joɱ|, ˚ fڕ9X+:M|ݷ,ñjF1P>}co&~`WHۿ (9a~AzEQIgV=[nSo=7p:S6ku@2½]%lY;q6|z*K,ilHulpTSɲlKTli]Ά^r3kl.jo?ěS-0GLͷzHUoݪQ?bljѶqZb8vϵNPd=7uY+ӕΙVUi%^57@w)DGD~/T:/fƞB9D4dWD[/2] B~u}y%AO*D#ec?k[%$V4љo%4I3RoQm'VWN"Fߡ{0|8 *dZ2,=%cCē1e=j51AU7q&.70qc #6Q=%̠_rgC@edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITSD.classSRAA0AAܒ 7(tIg&`Y@Qv'(E 7/ߎ>|0SCۈrME5Mo - " * &B 1aF#*FU(V"R2v.Xު,#K,[6 ݡn(mñwTNBedu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITSDP2.classTnU=7^{͆iB(m(88%I(P![BЭ}mo ~/-&6*w~Q#Nѡ1݅1Sɉ49GvaE_KN'4g2=edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassP.classTwEd۰-XZA-M34dqw'#x^|x%ro|nRN="w|s7wf̳yHb gqnxtM"lǣY9<y 1xdgᢉM|$x"do RNXwTXm:a9K|fU:vS2͎kNhnnlvq|kM-w]*ڔK& x*ݖZv|ҙ+0]Zr[J@ [O%eẅ" ʰưPb(cBx,ڙ~%jMiYZ loڽ쪺Vo]ik؛:pFjCۙ+~Hh"KQ쳫k0}^]CCjLv{7QeDT~= ~q"ڔ6Hc9PusO`Wu}OK&/pd{7Q4Zr{-PrQI=%{U[@!*x{ovoיj妯)zZ$cڑ }Z7=So1IMDc! 8A 8٧xx0_!y6&JHY$"Gfi2#]&sI2]#s$yr_2.RSFl|xvf.sr+fTi{lboVU ^u=edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassR.classSISAdL-IXF6Q(d rZI'313A#ŃXeY^$XV__=!Lц]8B+4thУ}rw\BTBLB\B> & NHkPÐaY6 hrL.LwLV/r(T,1]c d+0<33 _7K % #Fu-]aL$;)ng&$wj8Ӥ :J8:.H뢴.!#%2DŽH5S`yO0 w$CcfLIy^L g R5zA<V*7,nyl]^^x7mnj !if?" [씰ML^\4Ed iz~~y*S,N6t_jss:\N۞(0ھesCa@=ʚcUd1H /0Bv߀ś^#wc؇5/BSG(kPLm@@ړ%3T5d7MK} SZ6"c%lXDy|C%0д9Z#zDQx&}b@]Tf7gny7J\E5H-w7k8> Yk8PK G|$>| =edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassY.classTYSAlȑxx%XE &<"J&f7N/XeY*9^=HY^uOO= F۱R/ 8oOIKHHHJ0"a4LcRӥvX¸#*80mScS =!LdrobzsS2-2ųX+bERtgUX.RIL_J%n1t-c^Ψ-w,NPq\ 2ĦV=ӱ ;iw0 ,$4)e[$N %А„ἆ R(I5\0i qEC3"!'2|Vs 0Ys2Us\EC mKvWCwbav9E?x"""v,Uff]dkR£O,47w}CNݖ޽d`Tk?un/?d8ς:a?]ZIn䍊)񇨾QG7,s*nv(Z4&Mglv+쥝jcf36WqS-K? C<.Y8=}_Z5Й|n{ ߍav" O!x>Jnduz>z R;8$:R$FbKa[?HHhl(11mĔX)zc+ZL &\(Ҟ/#:ך;"ݾWS<Ϻ0/ȩحb ƈPK G|$>K:Y:edu/harvard/hul/ois/jhove/module/tiff/TiffProfileDLF.class[kAd5vֶKEZP4QL}&du{)%|C?@^| "g*3KZ圙s3g| .,pHa@ *qM&qcc!C-_xƠ?val:-!B~E6C#5NX[/;n3tحUY./6F6xU5H*Wݰ.} 1;-FB& 4!04n!,n$< i(a.bc:=sؤ2Ý31ybn+ڲ*`9>z] Z ܮ IUrW<edu/harvard/hul/ois/jhove/module/tiff/TiffProfileDLFBW.classRMo@}[;IZP>j HM X ā TQF:Fu̟@7"!ʕ߄k7Bav̼Op \l,qX>";dzG(f<%R{M`n#p$U\^v"|j&^@1M^; Ęy!}j6j{At^6.b`rY"H*m!W4tw(!Xw;"ÄxvYi(ȡwWm,<.Ӟ:[.X]#x6=7OH`i=^T7z!^W%<6ʆF RF3N;Iv6ѶD4M+Њ<P"L(ū+8-Z[u`^snFp ՉQ _ xfk[漵uB5A & fs<).g0KXPK G|$>XcWliAܾ9̗Ln 8ŅA$pQǥ<SD .ˆAÕ&q52"8G?5u <.BmA4AʧMUO4ktLz;kV6-K0LɛMXn W%oWhFLqq3$<.--̭[EʥFڞZ\!FEѶmUqjGY(֔P4!G!@Lq+ۘf}ebj>edu/harvard/hul/ois/jhove/module/tiff/TiffProfileDLFGray.classS]OA=CRJ ~_d11b ӄ @viv|?1_|7!&&39s__ǣ.JWG5#hB-f Vl;F0bKo@p[w bO3H6@[MF~3nq-n+z.ƚ]Ӣ^zMڦྐྵo3̔2+xMAv͔WHc`j,3a9;0Z3V)Vkex*kCrhU኶G;oPiԘǩ?1oP+KD9 (IQH@)9:'I<'M]GpP Ar3Pi6ufMzm/j+xUԱg}aw+͞f۴S4*dJ- sOjJ˼M~l:EšmVUM*)_ZԱ\FTSgsA 3۝|awS.vTC7 H 3j5g|z"CE\#'+|QZ5_}MlGm-MG7b4؉M>!QczJT@X}L*(t3p ftLgR'qLPK F|$>\xHGq>28VIXyhI=~1KKK׼!^1,#|,+KZFi!'v)?qI#d&G$[R . 5a ^q,s  bHNLPK F|$>J3?edu/harvard/hul/ois/jhove/module/tiff/TiffProfileDNGThumb.classRKo@654϶X !A+Pq [  pKMb*+};+[l8faN8iX8k+}zk $ Lh PeOd"Rp H" xGehۧ=CّZB *Pj&L%1U6 uRw^7-YXpۧ{Z Dt/ u*"% S|/gVc:b$Sѡq!%)ƂG"NUg6z 9edu/harvard/hul/ois/jhove/module/tiff/TiffProfileEP.classUsU?nv햦mCy)$-%bQ(M Ml%mr7YHv3~??3eƿ sv7#253s~w=9{揿~K`2 c)D8 ?=Mp!YiYd{  x``` G'݋ ְHP pu7y' Nd4%3g ^"x exEa1:Sipk8bpu'x1{ٕTUOYPVxaUZur ]Oe33S3t\V8ϚE\8 !%b6Iw$܎Ə8p02YE,ek(>'8cK-nк%e0A /ir{-ݖaAVc>5f/XlTȦmTk@0a./ 9z!<=4+3PvlE3w'Ek.gV$5QĹUwѦ07$A_- [kbCw/EXu$^NSgtsl. cݲ MVeG1av2uڲCyzMDzQ:s|7y6gF3s<Jy=x[J4u(SM؋];=}y1HT"׹ɧx / UF掃BvЧ`4]#?0#t F_Աtut }7!0v tc{]Ń%TtyH ۃi4AVeZ݅7PK G|$>k;edu/harvard/hul/ois/jhove/module/tiff/TiffProfileExif.classV[oE&ދl˱i Kǹ8vI)$n7@])w J/}Aĥ @j3N[h:ҙo囙3g~ /ĈQ?cp\* 7ĔO tJi!m!2BB 1/ɢ@ $i?Є~#/p^ŲZjY4*<75}COTj)u,Z`h7bf0> DY6t(+ Ӱkes'BQ,&r$A< SU9uaf(övvlVs)u5諗ZN_pʴU|݉2{H_GP&;b32''{zcc]M)הH/ %4@gM8z]NӰU !8J(k0X% Pe @@@uᲁ+6qUÇHC5 T_ç~w'aΐ|87l3w M˙}qT%u= Zѹ^PM[rWW2{"=W=>^mS~K&2Eܝ5 N}3 vZ6RR[(mTϰd^BSW6U*Q\46y].(H)q\;-mVL+[WI.^I[n^.!jvKí2w>mZ:umR1-1 >m =mX㞨\?(o|*n@p˻0Ѡ* B1/Umڅ$HW`MGEԓܑIf ;`qg4}!_6/l^P?B߁61L<50w5Ⱦ[ݿ 0׳mh;{m7i #: #m>edu/harvard/hul/ois/jhove/module/tiff/TiffProfileExifIFD.classSKo@6$uJpm^іWM*EjRTdlp`;QząK/Z$&:Q!-}Y?_b5,np $ܖpGB*XJ.%q?zDN|8;PP$;]s H-b;aϸ\~@Y hȃgAÃmkqG+Mߴ;}x`w;ހ^0;䭖]xC iDut2 s0J~9-!FYt[VˑdȭrYǣQFE x\rO ]:Cݶm{QΆ!oldBf.{קN@`¯FB :=>e9hESaQ8r1D%rZo!@N+N||8V}_j)Jvd |BdY%bKFzGPB3.Bc/XrR#I*QOeRa޲HLPK F|$> ,[@edu/harvard/hul/ois/jhove/module/tiff/TiffProfileExifThumb.classRMo@};vc\J(8A\ HZ)p@zoGdo.zAAB߄'H$vvwۙ7/±Pé46M~ւe +8g⼉  Zs^"K G`< 4@_NXp;(E(xG̳P*嶳΃X>dy@AL3Q(rd T0ޓG d;;혫mؘqlX8Fpk6B_Ej2ظk&۸gg6xO~4H 9~՟}'lh\aެNm26z\>E%;\IF@IPe<{N^"OaN}JjW%T&1#KPyԧEpWPI9 [ߠAUo}qW-M2~C}ucS;v%ɲH& PK G|$>`P58H:edu/harvard/hul/ois/jhove/module/tiff/TiffProfileFXC.classToUx7$iv>\ڐ)bp;P%~ƻ{襀J8  !NTwW>coޛٙ~pSxƏgɈ($bF 0! ./WyxAL boF.xEƫ FphDU lѰ֖az" xQBX3aǯ/Y㎱O%/D0te}E39}ȳ* l*O" C1" '%*@RśxKEJ%̫X(K6bYXSq9U\wpUݰ!tpa4?(K0=dnN֣~eɰTI 3DOuH-w7vtt@0-X<1o\.Óx>INgzG]shk鼤IH罚t4I7OSH=H_ʀ=KBтB٩Cn 9P#pWP{ {]rA:" e }4I[QyK.WI޽4^cu>moF:+'ݬ#0z&|a_пdoNڭ/$ZZP+H~D/2UyY GǞ}RHeExmU a>,:m㍻.:B2 רMt*}\OB!4 [oX2NK!!&Yhͳ?,1Bdag y?k PK G|$>ߡ :edu/harvard/hul/ois/jhove/module/tiff/TiffProfileFXF.classTAsD֖%[(&MlRqR iRJ qhi؊T\I G9@.¡f0epoemI}O?g'8$)7*"TTp//sȗUX⨦brt.st57Z!F}~@ )E@&4BD`D 8\SpA>kC<_ ݖŐ7m˯wls7mEwLoZzg]׷:wֶc遽W  #+ټY5usñ  V5z0fd>0i41PA `]ç0 45`i䦍[nQ >݂[/h 'f4L9!KVf۪Z2!VaÚu변alq1u{yukwc>qFɃ2m8L -=_xF'hhe[1}eI??]=mG] =f؎SZ7<ž+͎յϟwZ? D6R{ Ϻm3̃_1yӡ*rO)OW|W.5kvx;+8#6 :Txc` ᚞`ű]ċ]H? ;C%28`ӿ D}$r$, <#ǥ9Y,%q*)R{HjHRsm)S#ds$0*D1'=/b.9D76 wd)eL01ӌs1KdSS95WB)Kf\T 1/>xDTE]dxCdxSdx;ʐBH+x/dW^&3'$=t~/J1neoPK G|$>7PҚ:edu/harvard/hul/ois/jhove/module/tiff/TiffProfileFXJ.classTAoU덝q]-UҪ*diSJIim{mon\8pz?5BH=TQWQo{3? ` c()DQ*7w%ܬq ֹ[au6^!c<# (D` ~!4f M|'k .2s Ҫ1Үn4ft7kZD/֍ξםh}KMW6;yfU+7 Ooߪ飦kTP1mV+Jk6T]˫haKMl3X T>V vOE[E.z*0쩸  ap-WZk VtZ9!kWzϨ=!]ePwFM3!蚥{Zsao!30ƪ.ijIag՟cgx/ٖ˿" $%Z1=wp`?*)%V1\״vgIgUw:C'ٮTY<h"[Ǹo ۟3y ='¥ũc QEX!|=F˲RF')Og4RwBFHS+ 81Ӥy9 b2)pftoKf Tpi?-g>'苢⌨ 2, "Òp6Ȑt\m2'H( Qp\N>"'8&D6 PK G|$>0LC:edu/harvard/hul/ois/jhove/module/tiff/TiffProfileFXL.classTsD6-[Q'GPlJZʏR։C&69%*e$9nܸrBO8CLa q2PJ÷{{o߮?` [1^Ĭs*^h|]y oHJIKǼ,jpAޔ% tyK.x[; +N 2IJMقa2:"`vlY==VZXw[ޞڞs:Vx}9)X5;_n چwudp!]+ Lv ?Sx:}eP6WkP : E I(MRQֱ5ұ.͟H@UG ulpU Q. /h #+<|^&ȓ}=i`[s"~LjHD5bfJC1TqSy\i$j&I+ #aj34& #iI2e_A3 IiTPH &NI+OK,#dЎA%Jaˊ񻬘ˊٷG>>x? *m;FTq"'"ұʔb?4'a7I(vJxc8ۣ2sȨ839y_PK G|$>q Q:edu/harvard/hul/ois/jhove/module/tiff/TiffProfileFXM.classTKsTn(d4)ҔTqY+x!תV*B0]+Wt|e㉵HPG3\QŊnU@M:R:c]@-ױ6uqՓ+5sl.!uCЯvm^ؑ0rʠhnĐ]oؖgf%vg!TrLZ4ͣ)*%_ܰrut*:5L4wȇd '0Bh(J&%}䔉r I0O(OϐS wrh< ǩNI[D~.Q<g1>x}ę> *`9PK G|$>{WA:edu/harvard/hul/ois/jhove/module/tiff/TiffProfileFXS.classTMsT=/,[Q8)`- D%R i|Q@Kl"KFR2eş`S6ٰE Na')}MK~{߻OO!88 [s5{X4}籤J|XV袎}dc|Ч='_}njU/K R:XFM)z[F[aДKkݷ<Agz$gH{=с*T~MbA)d`? =s#dS=Ȓۘ;B6eCe$|҃q]?>w[^޷q{=g G[(*1Na J'rELR5x#ʥ)ٛKYԏԤO/H*(5p<SLk1 /PK G|$>[4>edu/harvard/hul/ois/jhove/module/tiff/TiffProfileGeoTIFF.classQOAn(*?Rn-(c= !Tibƃ@ge6?5`䢉1-3{{oOÝ u1A)̻Xp0L%n1䪵 ݑ s*LÞJ׫;3=atxosR~CɏtgKnUVY{0kb?ESHeYy)uj6+pJT&}׸Kʏs("]kTd(u"qCy`9E]o1̒McC%Z%`Xv6GPYٙJq`jjq rGatZ;s|l'ï:pr[Dd)BD|t%vFo..0bf }V.PK G|$>B&Aedu/harvard/hul/ois/jhove/module/tiff/TiffProfilePagemaker6.classSMoU={q>ДIBq)MJ!!MbZ,Ф~N== eEl$ɦ 6Eb Uޱ"ZP}ίx`t5 Gp)i u a8coabcg`xbbNoF5'zmv/1LexT2@OFɑݒShjA m׋VrugݖV-n95wT@lųoo.ڵVԣi8Wrޔ蘁+*0rst̒kxu9y9Ȱı,r>²<Ǹa&>1PhwSn2-0%Ugm Z켼 ۶U֊WwS{JI#P Y]6>t$eK4Z|ZǙ3{rݪrg{d֏*EM[eU'tML'̺eRoKo]\^R+K;ܕe. 8߉׺ F[%"X/z8ʚgK8}}_?$s} :=`<i8J FB e,"4rTz좃~9C`&L^]hރ18:L/m~lRKj-xRwB4%luiJh%2[tR]BPPҲp;[PlA'9h!SS0PL-DiM$LH)tL2:;}b(:2-TDQ|Om+8})KTf >cQA}4:}"/ q <~_g$!r 9\<+*_U~EQ#UADO &T Q1p}P&/PK G|$>u@edu/harvard/hul/ois/jhove/module/tiff/TiffProfilePhotoshop.classRn1=nL2h }* Ib!!U"T2e fd¦|@6,( |T3Dlxxqs>x.J(q"̻Xp覃[nDjU HݑBԇ^?p"yh3%5;P `Fv:om^\i~n;:H#կCEX Fcl^0ƒzXF%㸇VJ& H0<x?85>,IL*+Z&vU JZHDom1 mVk|lOTLֳbAS{Yqutd?}|nT8G`'tZW|<ْmF٬kg@KXr0!EPK G|$>]"$ >edu/harvard/hul/ois/jhove/module/tiff/TiffProfileRFC1314.classTRP]& ԠUm ^*Z Nm4mj/uqg? 2x>k9[GQ{; [ဆ8a'9dbfa0DH"paaL1 g7SQ,lIwjSlGS2fslj65WEiԜR˖gFvR:qG{3Ƭyϖ4Na@8ٓM8:8#0EY#QqAEq %\1pWud&qMr:(踎7^A>Hwk-̊I,)16Y蛺o.m+ƌ״ꕴ@nͪɌmhEz4r7 -U3)';%{|4Ӻ;]jЬ+:܂ly'Ǘ`ߚZxNMx ٺ'$>bk/`= -nsn;R?| jz }/J/ lw02wPsCmТ| F6aXçMa bڸ^zmZA^=Yʀ JhDydr(&2RsJ8?j6ʉ%"7J__T$+kإa> {D,JPK G|$>7WJI4edu/harvard/hul/ois/jhove/module/tiff/TiffTags.classux王5w ` XئwieI#k"4VblF@hB R $DIH!Fzr?~g_{f85)rl&rNrTB***ʐʰʈJJ| T**ʘʅ*9JA2MeʄE*oTyʛUޢVUަrʥ*;T.S\ +Uޮr*PFZTWAeʍ*7ܬN[TnUMv;TޥrʻUR[=*W^_>|PC*V_<*<*O<*Ϩ<*T^PyQ*SK*PTʧT>gT>9ϫ/|I*_QT o|K*QTH*?QT^U/T~+_F*ST'?E*S?T/G5uu]u;UiNWJ]UZukխS^ugۨ;SYVws՝|uPEbuVuU0uWuTe.WHuRwǹ1πK!%#n%n'.}hv\L\B!#/Kw;^%~N%+o}"E+&%# Kerl\) .Sm;ӈDD5QCuC19h$<I"fsӁ9`=&c=&c=&cr.1O, 2yL28$#4M2BQb8XI"V-UnS{85}u6Lofę3-dG#|f#SrFH6=:Oj#fQP Kc<(?K:+LBCC\ #Q4ߓ?ޛφe% _Еʔzmň }j7FlXDmw~Pj+C{0҄7dRsuڶ\EUc{.Ʋ|/wSs Ur=c-&Yqt+c%ln߯4L~(ʵ3$Cmaְ8͹B*uksXK{r`juƑT!ɦ2* s\v4@"P1 1azDkSq u%jy'v;v-`[3(Cř\hPmޑ aĊ "RY0&5[Eq pT2l/r2]㫶ln4,0O7o%(AXOș7l\s8:2h!;gM{"pѓn:[tO0 F0\j{?ڗ`ij2p}\"CAt6 cs xYO8X[Ko1SY&TM맚BqX S܂ O mAyCfptd w\s| {uV31Rjmb}>d٥HU1=WC< r17;Κ,9_].RbtGٳT.bOodckŜ=46RfT/"^ xکqL#jIvd^2#XL 3N $ڸ*>w4 .y1/QzSKC)ݣy&X[p*~ 󤼭{ɑ"S?c7Ǣ\8kK\ p|ūġ%VawGxZqRu)ij;d8<,h&ɠٹ12Lc eFuVܝh^=i/*<;.N`Dst^[Y"L3[yxSA:ښ st8*B;ފJXRi-yKQiidzմv7d8nX8} n0I1+O39thpz%#--"Hƍ?pfb/%J} ۴r)wkb,&PM \GjKbզ~N9GJrS9}v9+~F L[+eCgj$Qtaz/Scْ.4*r'oRiT6JӃm7 pN͔qug Q2耳]G:]e +VCs;+&yY4RL7!Mdǣ`15RCCM}9oA\͞&p|Y+Isgڲ'yj#<>zę.gtN9m[q̇.ZqNϩ1E{ՅN^>G?L\"!לiUQd?iSM΍?ywOVfn*I&[XeZXm3kkz ΰY`=}δ,[ζ[εyv 8bp .CP@; <<Ė20[nGGQ[.&p . ~{>={탔{Cه))G()()#QG1ʃ8!{=IyĞg_|޾Byž|ԙ|Z?s^y=7WOMOCVAB=xRRIޓO!3< d< =\,OAf{22Ǔ,dd'@xr d'Ayr'CA Ya=Y9ēC=9r'GAd%OVAxr2d'@yr*d'AtQYI3ɓў$ +=id d'mc n`>+~`ȾL^4> a>a> K-_;}V&gi›}&gq}V'gyŸ}2zzE,XxϊI,YϚM,ZϪQ,[8ϺU,\xʅY,]څ],^a,_8er8~_>ೠ>+2C,>>k c4Qh>߾>1g|9/Qx@ˉ|9O8OtxO OtO8O#txO+/W|ʣ[:;PK G|$>&edu/harvard/hul/ois/jhove/module/wave/PK G|$>O(i!5edu/harvard/hul/ois/jhove/module/wave/AXMLChunk.classSn@=q55-%@ B"-*AIڊRPMIڑc| / DEg> 1v ,ݖdYY].--y"X=cA?tn`87 ߈3; Ŕqw'L6}r;䟱 ce,d>aBwߢK2DK|Gl}R3('ҧPK G|$>?.H >edu/harvard/hul/ois/jhove/module/wave/AssocDataListChunk.classVRG=c]Fl"ǎc@BADc0r!v ˮ]qq.c /*%B+o7%vzV1%Rt3=׳?\AGr #H)`79>QV<$a(O1*Bc >CVLpL*h>縧|Vpw%}f#BAs %W_3Ln2 -uhh%KsLW[Yvօ6%K ?Fk̥%-\WGnbvE_5цuO؅7v=QKN C0l 8gm<=:EKp|ñOΠlD3XTс 䉑B %y,Y +0#ŢS)@j;v2]/mDܴ]ə'/* >n5ԴC%"e$c0š GA CI:6TlbQP@,"Aհ1ƾ˜^u#Õev쳮F;.uFzENQ2GA*dQ>X djd-M X9xρd߄Jchxfr(*hTȂ́!vdߠ7M.COHA8,t /'WDF !NX/m"ʫғ1xNl&r=lP^xC[ȥ1!2&W\Fu) =QHjIK]"0%SCoTj$ S(SsTKѕ;&;!JW'b.Yp~ǩ?驪`h ג{E⍨ZF#I8-mxsgx+(#*)"',TXN?X8B"9 -wv*[$^#q-{]+rM4g)\6=!z.#q:Jq1BOU=Fq\Wvs rr# }//PK G|$>{b9L =edu/harvard/hul/ois/jhove/module/wave/BroadcastExtChunk.classV{SU]ͲW6l-b6Lb@ { c7n6|#J~MB dd޽wܳ?+8'} O(b =*EXbyZ,d\:a g4⬂$% H0g4!] 28/cHƳIV #2%`7ʸ /aTȏepAļpaB,ILI0=ns %^Lhf둉t2 kG-4cZl5rEHDɜ:5=ImVVOsY(9LO<9+p`+OҼ0ǭ0ÎMk6:݈L*KBAK J|n2l<жa if%\T1y/5㒊7pYśx*; n%ǘDm[OEGؾLnx1m3mK}\z>T|(m Ss,q@k5fCli>mnQd*Cf#I 0H]$A StxEϹDpU*5!%f4EnΘmiVt%ݰs7˺1}-*~PEHE&꨾Kln 5#1Z )Թe^)>u{"| e]3^t Cp+İuK+368pЇgx 0Z? wZay(qGM >4V/<]nkn NuezN;I_!^ P\@;mQ$ilmXD]FWef"n?v@ͰN2W&P1fh[H:2rM h zj0Cw Ի֡Է֯C_C{p2v%o_؝kmXž[`uUNxpZD%PwSM]D''5 ~ K8"ᨄ'$[Y~BHBw{{(xHq?PK G|$>[Yr5edu/harvard/hul/ois/jhove/module/wave/CartChunk.classwGǿKzm˶X?8-؈]ڲ*ȏrl+7.giˣ}(B@Mp? 8-doTűA{g{pS11`TJ&,)8Bb;_Tu[_ReDh!q;k r*b0%ֹ`8߂ (6+$K_p$\ O,)%-G$. G%)-mQq;w%ǑOp'@ljv&<( Rɢz1 ee4mٖwOrbp6 '(EM(nb\0 לɨHn Ft&M#aӆgR[Ӹ81|F ,Lr$c7S1K){81%kfR8W0D R:si,y%'äll5<)xN ^]~fe*$&J[A^2^!.W~hx Nd:ޖ@x54WkdwMpE\0|"]<䏴 EZMG븢 o-gE鸴 S|Ry֝I dʍBAKߐ%mLi:C{TqVxEvgv1Iٕ͝)$n>^/͜?w\*OP'}O%b.s %iI#*У#?4/}呱4/lf\oRM7zUIJZA[ThA{3֏Y7umɞk+Qxoɾ|N;h׫~]AĕA}V:۷]t,!ҹkgw_E,?'^)?B``#Z>_t_Ut;<Ǟ[dDxxY3Cp]u|HXE\C2mRCoaT[ʀFjmL#Uk'mǘTǙjmqmaрv'>22 h1~iw@+6>u t^ŧ=VgB{5[5.t7~s|s7 }oC t+8)B ?("Nhu>D2fPK G|$>P4edu/harvard/hul/ois/jhove/module/wave/CueChunk.classT]sD=k˖,+ NK8UpjcM]>b%м^t Jv& j{{oqL'p32fwNEe*xO,ޗqE \Ň2p]E)XgP $XR,,ddܖa0o؎,0홞okUj7 ^n7z~Žla3u՗4V;7wSkq0aJʼe8 7;aUU57~z61=}7C.xgi\%ʘ`2&O!\")_PK G|$>d)K5edu/harvard/hul/ois/jhove/module/wave/DataChunk.classT[S@"iC*EKVL) 3l6$i??ȌI(IoϞo&Q0a bXƈ[!FehD 1&.DwP=a z 㡌G]Ӧe3~DgFU+RF]C+V˚mznѮ1-c2KR%Z*J3y-UZ%F &]Ziksԧi˩h%}M ly6d9i+o'oz}+eAwʬI2>ߴ-OƔ1Z&f#'W]a_燉tf*!A4\VAmbE3¼P*¤DsHǂE,HcY+کee2kFǓc@ޮ0ڞ.8t6(ٕEVc>},e!,ēGTsQV>Kzlgvg@2<4RlJeRaӊSfAhu-:EBGG"k uK |c~P_ m^ps.x8Y^t0TD`F!D'n/ros$ _ /9R 3{:Ń}>\\ĸ~4{/`7)}μm7/Lɸ*nPK F|$>|rSr4edu/harvard/hul/ois/jhove/module/wave/ExifInfo.classSWƟv."JkU@u}V mjxi5.6 Pfaԙ~C:[3=Ͻ9{6oa0+I!+I·q5k>~`2c㜎9񖎟8u̲IEN/X "YU;mڍ@mc7ͫ#UW9|T7mGγkjUzk\Zr.6<VgYj*wQG+uۻ.Зϑ[kَ6v= j[gr4{讣ZK`5Gi-MGMϾ>F o9ey9u ss&+}:NdWgsVؖ8_F˳`wU>'pWWTx{d\b%NfmI@ĘdԚY%|s@2' %xǚ+7"%ָu<nk45-GeFֶ:mIU~KT.o d0Q,Z11GUZiY&KQf+y1<bq"pėcv/e8^ȗ4?Ɵ~xrx':l'4qNBGE=PS/)LX^ VG_aO_b|L'?C2#!R&'%TdH*4ҡt8#LXڱ6F8ι}X(qIogt9 8]Ef?ܡ:ǥy%>edu/harvard/hul/ois/jhove/module/wave/ExifMakerNoteChunk.classSn@=u-*Rl'a."J%ER+E51qvdC> *!ĚB̸]3g=ί~XFӁ50ccK&\vpWLb5\qMԓ8Sr;2,xOdW4n/HMb_"SP%QWzELPfή|U(NP-o`$DX:N"8kod_i۸0 0ۄ"@wŰ; wh3l u4Fd|0bOf멒[0Oac{u -J)='Tw¼T0wq ƪ@a=q;`IJe4]o E/vX.0BM= 5}32#5 K//O%p4 U?c'&:[Wu4_182y8_K3]PK G|$>l7 ;edu/harvard/hul/ois/jhove/module/wave/ExifStringChunk.classTRA= 1\4(" (T!;Lv?/4Zg?J *%k{{6OC BWGc@ɓ04 ǐFV ^ pVp|Q2E%/0e+W,\Ȋ1cRᢕQ;c,Ҫ(Ʋ5 VXY.J#U0s +1N,Ee1&lK<)`A };u2-| ghEqJgbVwtqcA_Kˢmeqp㚎б `NbUVAqI)LrL鸅 [Uų2Cה%1yK]S6_Ӆ3҇w)ufYj õOgWA 1wSj5$B %i'hпXU<̖ 8{d]Z2e,Co-cT!dƂf\p(A bе&7CGm|l#S+2m+V [X,_CPqE0!CJ䝌HNI ҧ,Ym[jI#6.z낇5xTP7)By~F=H+) ?&I{?%*hP"}oDsTg1VuDֶut7ZڡR<& q(1^@G}!OPK G|$>ͻ=4@edu/harvard/hul/ois/jhove/module/wave/ExifUserCommentChunk.classUkoU=7z7un 'ԏKXBu$@Mmo]HD (B| TU̮J{=s=3ϿAKyx/˸3/E+ ^U!5W񺷼ᅼ@V5x[+xQpCANA^AAAxWE7U0'= wjYCd~pͻMfe筮=2?Zu͚UfvM:z-ѷZ֎V9Q?J7 =uo.8 vϥd ѰO|c4Pd|!0Wu9B)WJB\ե̕^r3 aKCNP={@./ury0 WD(-WDo ‰4+ypÙ“"8ݿ#gөnZvGI܉5ϭl_ Cs #^j`($͸;sIRXH4QDi#%$>[9AiNHSbPox(]b&yx q0N;J,}7AhH(JOgv=("0$(+~CL{0 o1~y5b5c$pLEY-3+0JO1fSG!Ec>"@6Dgŀ3<edu/harvard/hul/ois/jhove/module/wave/ExifVersionChunk.classT]OA=c, ""~E~***EB%&b vamv/^LL1b&cVLu7Ξ;s_A\nPܔs G *qG2BG"ITLa Kp~r` ܬՙgmoV:7 Yy<}j?DVd,VjKL 5XrNg蚜[,aYLj)&Aj{V}vl.4!PE^ ,)i°&Ol{yP P9=$yWʂd)NjAN9JX|&&R<O4!aO)4NT?'-TsZ綽z7rtC#QN$ΈR3~[ΔSgS=x <.A7s<1q 9yxI| A/M$SSG B . D⿼Vq"1+C#cЍPz"[hS/]?F߆œjTirfYA~a {P^PK G|$>h "s5edu/harvard/hul/ois/jhove/module/wave/FactChunk.classT[S@Ic7B[ jZPP>,dۦII 1hgـ-nvw~;g?Ŝ\U\QqUõq] {S F5D%qi 9waS Sm)۱i V,jW-X+훥[kb"U Qϛbz%%L׹i,xjJPaPR%"aN #, /d->aSx:;q 1Kr~V KU``'L̝qI< 1_@4xf$(YX)Cho_}§bP+yWq/GLv%CuБ@^>PK G|$>43k7edu/harvard/hul/ois/jhove/module/wave/FormatChunk.classX_[gp9 rCIGW;k%SP4mH0P,9a鴺9Z/8]ʺP׮yw?kg'!y9+\‡Q [ZTpƘ%/|໓(|+T RS|Irr_KH[p2|r_frJů˻%{_{9> XцKϊY a-rD|܊; ,4>%II/HE p_e2؆ўp;0 U]z*k)cPM4*}h_Vh3T'l6e]z\eFT8p_cP 8(߱ 7 P٩DKl=;抛˗xLܑ͚\q@8Tquʸ 5mkHid@mǷbF=XQ=+ָj&?TtHtqf9"9M2Iڱf#O0r$C_ Z`&)LΤyá^"WkEUSZ(@hn7<@ό67$8*wa+5U(M[uv|㪧5ڱi]G\B7DUahv'SуF!j[jnq.]2_d4OZ$QP6|eϡH@XE"!+ΒDWdJU+tueȵҞ:lė-]_:l!lJ=BcYPSN8jx]J*ҤRuĒҳN1KỵI9ԼJs[kZ,ۅg\24[Mh^L 1gm3~yϒXE`lj@ k2X+ZAB;VA;#RV$_z@.U@@[VV:*\O|uV)2꫻}R/"} y/mPK G|$>rL 6edu/harvard/hul/ois/jhove/module/wave/LabelChunk.classKK@Ԥ1oDP[+# `>PFF3y&QA\k8эa$/s+5̪PW~ UqRðcR!m2?bAE]M[M7t5Bo63TvfA+й^kQӥ,`U ֋u > DNՋg%u24jIUE niĔi&\c,~ovzS|n--ZlaCxLHd1犊Ε^DXFbVXǜC&]m؀RZ.<<$Q2Vٍ̋Gt!W*HOW)'@8zOPK G|$>~<edu/harvard/hul/ois/jhove/module/wave/LabeledTextChunk.classUmWE~BwY-P/JH]J*!Hd7nv)_9B9fOf޹/';AADq J#)b@|N7.>f0+គ8Kx (>+F6|*cQC$|0d,X@^]~$Rx,aU َ?`jz;giՠvSۮ;\[v3fϞcU4{kKӇܴ7kl;fZMi~YM=f̻g &ˤΦ0( ۮӔPV¤'Xc0UsUK|k lJTpl1 LQֶSahf kڜ{p G<ڎg%nYi S]>Lw|^-jI)!*#%Ke07x[B"@]ŽgYQ=FNMwړp=U~dIT IȐ8T#iWnQ'ϦCzz{>o|LMqb"R\34{vLoM $2$SkF)ESW"I]M\L^Cȭ,2O;D\{gnc87+6+CiY c.tHJiaq@dTEr/Je[2bG XbH|A-?&QONmT*#WŖ o>0q8%8Dɩϡ Cɒ,؏Lп&!rL[;Бct#))֑TQ?AM zX91؂z!a!W.!F-0a{:| J]>^9ĵX/A Zu_oj}'m:TǛjLD6#(/PK G|$>>vJt3B%ETʆ]lXKPv}2oAð ^Q$q CU7uKV8TZkW۔,eԘ:d 2y\`Y%^FLUR{[-Q_RXabr̓Muf.{4jaOn tB [%Ibg;&2b\!A[Hx.3_\L"} Z&sښ.09¡HCCm r>2JU$DȘrT8 Rb[1/ʰBgo%ԮLKԺ_%ZEPdկ8; L|fЪ8p765+h0܀I4X>e:'TNuw|9(9x>GRyހr!\yc}aCܳTE p9̢ۖѻ[ x}9l. cTa'߼ZvEa /i5'MyN:T\ŸBQtH2~qp丕69-8LtTOpYȩPK G|$>vs!<edu/harvard/hul/ois/jhove/module/wave/LinkChunkHandler.classSRA=6Y (,zEDC P /ԐeYW|*R?ʲ' ,vz=|F ᖎp09pn#:a415򟼒 q@'N2<Nj[R)t83jILQsx20YaaU]ԬRyCXew^']iٮ27 YnT2b<u5R/D.i(UQW p.O"*}h2MWjBW%+AD=8MYͳFݒuK=gz?'TsiHAOhAʹv5b^.o'G̏~K_Ftl?IDTzllo\E;F l ڄP{+w C]w[Ś`w.ZƍkTr/U1{%5Us>xD *[Q$_l#hPK G|$>U9edu/harvard/hul/ois/jhove/module/wave/ListInfoChunk.classWi{~/Zx<I-CZibj6&Ӆ=`YR4#cm$m[Btu۸iDm6<_@ϹZ,l/>]sϽ絷p5ы3M88b"s,dN(Q;fl WZVx``oQM$hr&{NeطǦi{4$^0fTwOzY@떸D!qYV8fu>ip }~ t Y{FѴjgS䢅_WqpZm2i^P_>*ϳ'HnfhMSVy#Lb&v=?T¯17Jk ~Y? ğZ煉nfJ9,k $0-E.]$,Y9fpo ܻEoir\{S ʑ܉L6_[NPX jmM`oc>sb 8и0kUߝa,aڡ\N~Ix;f_-n䖯k?FAyw8X~XP}iր5ySnBӻz7aGY7t$mǩC=}eH,L^Բf7q;A۫!~8К_f+ .B߫ؠy^EX< _w!XD(\ARp)J%4;Ѽ- K"6-tyF^D+[#m)b [*b"("(װO6?(`oAwKF&>/C`4LT/%F70II@:9(pв 5tQNk+I kPHFK["<_mWD_^&K9PȃE1}W]Euۖ6:V[mDOAr(aHb(A GC(!aHQ8 0U=LAjr[ ՓTxuB7E*TKvG]&> drozt8PK G|$> S =edu/harvard/hul/ois/jhove/module/wave/ListInfoTextChunk.class{Eǿ[4,Qix4I)I[ ԺMB7B/OESwSxQ;;w B;zW`r乑*M*60En,m@Y l*0,p^nY[n];[{_` <$# <&O <%3*sx> tTbxU5w!*Qd8rJ`8C*Ũm JQF2nㅊYrRY1MƐfћLsDog' ۢa DcZvi vG`Eڳ"fem5kNsuYӎ& HZKKcy v^*#y*Xrdd47lP0#imw8QxbOAukN\Ӷ*>АRHHNh%:Щac uiUj؅`\^ cC5?Ѱ#dK&S|F[\2);gt-K>qetvJix+Uu%iR$U-ѕT0=a.$\akG-j `Ou{kMh[l'Iu)Ȓe[ɪڴ̛AwcSѕ"]FQRC8E,Wr沱Mrfd~wQ5'],XJ#^|xI4e %s'Lb)Xݷ|pI/W0oiis*ճsGv?R2h ?+8%gNb+GZ5c f*΃)Vt*i8T]V{Tɦ#վaWSZY˥?_LT> ME=3+HDqclj7PF6ƼN&3kH6'I^^rT($$)"?b҇05iF5Z4\qu)WkW$?%ݡtV#^H 髫>Ӧo8z{ K+Tv(j׸l1(jbx .:&A!HN^ܹWtP_b.֏cz)Ԛ(f4>h֓4w(/h>ۇcMC32>tuz؇NdOyV'|F' |QH_C>obZW}E|[2Z }6=C+9>t^L:QJ?ۇat~h~517D)~㸠'ch7.hX6qzhꫩE֌"xۋԞ]2=*6بr~,$ WPK G|$>Ifi5edu/harvard/hul/ois/jhove/module/wave/MpegChunk.classUmWE~fѶZ_ @ꖪU$͋I(ZBs>PŽ>D1QL ⁊O%xET|.AVXX'`;vBMnugNSwm_m\ϹVWϓZ!Jwvt=^eL]=f8NP?J×05P@`: 즞<5m?ο"Vv;% x-&S4QѰ!#lR| A$^yⱆo`2$dN]7׹''MMK9vɼɝzf%#(r]װ',pK@[KhZ^7 '"#hp#Pk 6PSzRJon\!n}`1Sq4.Ž<\eE۩F>S3kR.U1 ڲ}l<{`fc7U;h1Tisܞ3pAӃ#ό,s [|;N+ݶP5zDpAF T>mfTek9-PB1[T /l 4SpHn0 z+{*a#x݄[[[ Rv#.R-T/?0Kr=d4v2G4qCj}S=\9 /`3F1QõCLVg>>8s8vv11;>5=r/xXhS;⫈PK G|$>5edu/harvard/hul/ois/jhove/module/wave/NoteChunk.classKK@hlDjkˀ*X nd06fB:B\ęZ&|;oֱh!LM"m혅^01I|OnF ]ZTxMz]-N6kr'FhWНZs9f-F=AwdE?dI5l.'Hn"99Aѯ'{A`]@zoec3kٵ,, =edu/harvard/hul/ois/jhove/module/wave/PeakEnvelopeChunk.classVWU=B:0,&0@+ԶFk J(mSm$L(][VV .U+*'??7aTcr̽ϯ؉n~=xA7èߔMƃzxQc~p]x!({|̰!nlA7by88 $xn0y$3< 6Q5K`h7*듲⾄jF+Ml(mHMXR>5uU<)Ԅol-2{M]'r;QED-%Eң$Z,V הǻdD+VFOpxS g ܝSJT9wE8Iиa>.SxA8%/5 o-MbmлÐGhmRXBjʤjU+xu6Iڪ wALio]ֵ TX7 afÇ|'>Asc{a9XNj׮tP5Lק큀/d%_00vL~*T6"M:1xbxW=Ai1*k7\t&ؓ<P]@(33x:,eqET`IX|=~ ؽYQ/NwC燠fÃ@3X*%=\6B}pcdwVXMcHm 9:1n[Ǣu 57A![5Cєh@Tխ8l?A6*Fom2JKoneI]ھٻv1FP ZqtaUo$칛Jfκ;vQG2u,u=T$u#:{\vcv]T{OOA}-j}jd )æUǢ&@d?v{G'P'2F&`;ĸҪ;hQWsH0;ҫ6Q.QC?v?@۞^wS M ?Z2w*I%B5?jD~P\re 3 ZXgloJZ"E{VrRϜ'㋤rh)s{3g-e3:K!P^8{"6:PиyxPe-L5ʨFJFJϢ̊ph*jŖ{V?%UrTbEu^qVJXq;YKz1o*"ͼ"$UfTRhL '+̍ ŪYlf%jUAX,hN{)a!,3]-[yꕼ^=lǭ ۱y6ȭ٠kVl0 Wlг,CyHB'.ȗf,ۭ!yi3u~Zu%7WC=]q>B'㩸b:8*W!^OYY `m[5Rȡ\C'/PK G|$>qq 7edu/harvard/hul/ois/jhove/module/wave/SampleChunk.classUmSU~.$MX iKyUZ%@"Kv a7R}_"#giw7@f\f.g99Ϲܛߟ+[:1(p wx򖀷)ƌ bbb"Ew,Fb"Cx"Gp!瑫QQRS|D!|) (MwUM5Kl%$cO2ĖUNj5).[eeZ*x^ TJlY΂"Ɋ1-I UOJ*7 EڝOe&#>vEJrJ%ɑ-yS*JA(+vE%6 R1U] 1"Tl]Z8AY.4 0 ~>I+atPa"h,if*e1kDZ,w$uMfƜ!*UVˌduU3S"9U)Ւmr pPa~-IИ,>MΖ[a Dħ|N %*P #[E!JY*3 eKnɪfq4Qs>-$tcW2ݷLTU؛'fE&MC#1}`*~O/K[*֦g$t=`fO1Oecdec]b[!{vYѪꦦ)"zp޼;C0}>m}%Bg:Co3BjO.ư SjəƶR4k)<2dFpr)C*b#u(CX=zwI3ƊNTuG#w0~@~% cl^f̣qA\aaИgi׸,Y- Mm5KyVv 'kCOмi;x~ba @6d!HnFoN{NSsPN=8Ax+vN[]ܩ'qeǝz\z]9b.0ݑpC%=\x4ubШE<=pt]W\B՚0;:Dj_k_!%Rc?_9GuE?Ȫ{Ld0t%쇰GkO<?PK G|$>e ;edu/harvard/hul/ois/jhove/module/wave/SimpleTextChunk.classTkS@= )iCxF"FQ|P,V@4XNV7v:nʨuLfv7ss뷏_aM(.zp$\8p`RU nLv~ } a֍kܨ707E1Oг`H`{T\ʺZU˨;F5KiDP ]K5y5Z/Vr(4հԘfkqT3vj!3!j@f=KT*VѬk5눡* m!_ blpQt!:7Ž?go9ܝ] |٪n`fy3O ޣ;@lOT\)<gHAQ!zїo" }SJLCu +b#otƜ.PK G|$>Kl !7edu/harvard/hul/ois/jhove/module/wave/WaveStrings.classuxYǻl6 0Cpe %mm diI6fr9sis|wv_1_U㿽aoWDLLLS2McbbL3jf2bd2)&4i.2}LO7~C_4  *)i*7%/3}L_ Mo1};R]1}L?1'L?cE~EG;cmv ɘsZngĩK;:;2Ǒ?jmEFi2jX_,=8ǎjEP-]4LZ[OPW8=]Pgʤr'QzMS^҅H5_%Ü 2x|&;&R)7i{#cq,i9dʳRϹ_nߙJ^YNΥF\ /"mmmVsrsn]:bVNH3IzY+f5H*!ktZYF uvb?Ttjfidԏ+R9'musY8XIc9 Ma^]71X\O0S,4N7rB6TGaRiaO*zio lʖjNW*kc󹔗Z-;:i}{Ƶ<+1QZdOqӨ;pa&Jcg.r-nMlhW;\[q?wՖJ{jaBBҮjoj&Xx'#[8fb]XKYxJ8~rVxzCFo;qffwl5N ÇL`enճ#1O84X:iri7yeBK\އ-&V4]%3I5>dߛH^bϨ.[*WP6.ٙORC']*,{ƆRUF=F5CXۖl)uד1XɒGh…햰,le@e#1c,;iKz--n2'59#m#e\i!f[|lZ ʭB;:Z׎0Sþg+LMҷ 7覞C-Ijamnz$ dh>-7`*sqa\tؼк 9N: Yb ڭNmn7yΓ׉qR` sGĠ qىuրVfӰ6$E؞n캂ȤpbJlmV!&9{iٽz67ׁpHCi&o݆ 7&X#wAxoE"\)a1EL1#'k-ƏV$s¸|_^v'[N1e9;u7 cD ڎTfk5/Ivo{>2JNc^2@%nXJ,mvxׁ@3̚ L"E]+un{~w*[V_}]M k.7N(7M(P0SfnouYI UOg| qٹh˥,5RUW)w}[S#)oUp,g`!&]-uEh*7henMH"ex&Գ=8'\㥓džt{2[ډ+܌dL XUJU׮"G̫)*|/j !NTG.Y~~۾T6q{/w5tᾕ?FX^7q;CF"dmnɪUVv27<LudApY; yCJ vIʒTrңn r}wo!jl\WA>oׯ_`mۺ_LV>b?mՎoØZ`2fbdeQ9}..)N1?5>I1RT|0ے.BgAgdnG[7OylA\uC)nOub2 e;Qo7\XfalԊAWT/P,XSQ\ԿZ5()(ؘzd+5W7Sz2Q[+)z;UO{ivo{YkN*=d] N5 =ֳ=MpVlAS j=sp^׵\0p^.K$\堥#zx^ W+jp^G} x^ ׁ:pN7 lFlzܠ7z3Q nǁ8}"x> AC"Eҏ<yD?&~\1I'S"OEψ<yF?'~^9EK"/E^ү_yE&~]5M7["oEyG'~_=CG"O|?) )OO|JF"џ"_X~3z++SD{NN2GM*eMnNg3j1MpYgs@Ӝ *ss8\3k"pi e`\d.63WK̕Rsxzp.7#&Hs=4UFp \cn261ך'̓:3֛-`Vlכ1p 66n2{౦gǛ 3 hIxC0bæÝfb[Q0bO1m~<cCؐ(cCñ!pl džѐhH< GCNBNBNB΀B΄B΂BΆB8!NI !I8!ąB7EdPARĈv++ڣH"HbHDFXHX^Er"9"1""1Erh)S$G_v9U$'x"9^-VHѰŊ^TQV2E9EP4"zQѫZх(QZUa^**DW7 SFUaޤ*EoV'ޢ*bEoWPK G|$>%edu/harvard/hul/ois/jhove/module/xml/PK G|$>)+l:edu/harvard/hul/ois/jhove/module/xml/XhtmlProcessing.classW_wa0V64]C$Tv@:N%.Hjzի6Z֠j$a ѱixX`6c:x <&'DħiVϲO9|^ _S:i |Y+ *+7%P6#]޿~~ -I9;+fUSlq&+2ȰKe+Pdd:NFz"M;v{NLGƭ܌KDƧӑl*ؑlb:mGzX ˱ٛaNJZS#XܪbA{yM34D= t?$8}WΚ$kpB9i;v&)O”lJd党;PV"1@iJyW~DB;742ɥd (h Y9Pzo$M Q N= rl 9C~$+ GRK&8wTTvұ8إ}wrq$LM OknSCmYrF aǾ*h_4Z{ mg/S  8ajQQ3XA gVWv5Ul1k+ul4+fj p-"9t ]~O 8edu/harvard/hul/ois/jhove/module/xml/XmlDeclStream.classuVwW]i]XRђRiCZqj'iHk[, ie\- MIBc9_HKY$':G3o̕?1yq3|L22漐p7Y&LrLL l)/*11YQfӬ]xe9~_PE̒/ M|UטU_go(x7T-6~݋o;2E/nu{>e&y#?VWpRƒeG⢀H t&򹒩q=[6TNҎ + TlyZ{dN_cY=73 bhL[6azD ( F[3iR4m:&9 ֤(Ec"e3dJ&9z'1K3fdX@mix,N2 A #fdP6)C4/ - rL=u^_ϒ;2 &*+Y'9c|2 a AP6`zQ +A6CZunlSB1O)dݞc\t-Fxe,v^PxɶY#uc^l$JL.=:mT<Pq fF'U aXpZ3LLS*ǨqWcL.8*L11p*޾9 7U|p)eSY*ܥ)85g6VsBE Xi. TV%~%*~ܒ9Ә15o-~**܃V35т^LfX>S|>]16vy>˗\oaݍd6fӏ6;. hmʭ _v0 kfY*oDm_JMdj%cqtTR8cg!рm5g&̿@h NtóIӏ0z}HVp}Lib6c]ǰ|dɖ[~z׏=)O}}ii,N`ٜfcegl9mt *냓%]pڅ6ꮆJ[VP>\H@$HWA%9ftۯvCkMvNo+Pvկ>-MݖwwXN0aT?{Mt'}}tQ-dAz^ݡ}~'F: kD=5|h j4}ʳh` BLu<'?,`Cٔ[)bQnS܄2(W |R9-%L&"aM"w󝹃 fYyGwMiInJԨoWqՊ} ӻܫ Q&ZcP%CBuj p>![ wOj7G.KθwHSqY5^kQMH\єw["7b^AY/#ܚ,MptUS|*86z(7M<edu/harvard/hul/ois/jhove/module/xml/XmlLexicalHandler.class]OAmn"j/Q~(bLHF.Jݱݺ%mS&D?xvBK{&3syg^iб@Cq$0Nr' <*gxDA4\SLMTRߊ$bHmڦFA4WC*I(hnUyc k$TqH -G.hXk%z&\vWi6}*N3@T_%,\^ܕLvؗ BJΤ(Ӹ`_k_A&ItnT:bx3x  ֥uꈖm;u#y1ږݦVYvͪmXEzqO Y%V-]˚t?P:8ÁreW9:V[~&mx֒k>ңqj=nf?(H%z:(Lo<HO?EFq34[AFlJ"O=J1}$d0nPS)pZ*Э@1ۃ)R}D,m$p'Fdw u4=KSgg=faPK G|$>GzS ;edu/harvard/hul/ois/jhove/module/xml/XmlModuleHandler.classWy|w7y7oi(%faJ4Îѭ-(-{I^ڰ4ɒ7xNT9SA,|̏n`I␌^|ڋ0= &(`ҋ#^^L8`(,c~0|_be~q'd|Ej|Ջ)1di\H%K\+ Hq]@R& Ɔ/h^yfάѝG(W7:Igc>;_ֲC@iYە:,2~IN;J- -A:'ܼs]O̷ncdNV=,^_|&:֥ǒܬK'Gu33 \vzy't>U􀲬gwՙ#͘{l2"bLu:2\u3+M!ƈSɁ2%-'x54rVO._s %H,*ET|tېi;`&?a}%'r[Eź~U*U\vKݠ*B/`A T_FT4eL:ktL^<.|L}a@̈^O$:ULɪ7]Ҥ ETmMH)b7R-O֓j.}OE ignR7ͱ__+7ڣnj\6zԐ1lt 8E,SxS'Mb.LPhИ{VV4]"d-ZLuYs:Wt#*MYF|ohM:a,%Ef~k;W"-?7 Ycys!ymsz-e#\Ly"paĨ*' O4ZI7l륣) d"ӵ9> UbUٗ3,>r\O` @XsG~d?Vx3@f@qo\qȷV$;VT^VQߎwT mY<"yPK G|$>!edu/harvard/hul/ois/jhove/viewer/PK G|$>>[[6edu/harvard/hul/ois/jhove/viewer/AppInfoWindow$1.classRMO1}daEA%~=p@L,c FOz-lwh4(јФi|}~8B\aE+3@zՓ"E`2FY> L,yTl<}som(SƬ;\,H}+þ ϰ E,F\RG,t=ZFlPf  U6\j `(]j-HX+-C%f$< 1 l$p0ۿ W<V6 ϓ:ja?Gi*B4E:O*ݓ|E ɢR`S3`o 2X$sPK G|$>@4edu/harvard/hul/ois/jhove/viewer/AppInfoWindow.classW`~KN$bl81qj;!26N,#ݩw'ItInMAƸt6{/];Ȋczw:w*EFJ*b%Hȇhb2gI((l5pY^d2dR”8°LYl2x+8y&Ge_ElL^" 6e rCls~BP]" uLGJF mˎMچKqF A" UjXQ*^XE%vhx Is-{1xJ쥝s)P>ͧ.9՚utyK MyQ'W>A")+myӡeن n+_LR\LӑȎ#,ôg~6)HN ˸okqT_R\jS@^[m[,gI}tTh;Ryt; ֲTlȞC0C~;3 4mDYyuȍf2V&ԃOU.3 wm1ȥfFmW HBNgLe5z2-3j+̦Ӹo+rGi~e鑨s(0GR[ &r~|S49%~*Eӛ,r&v/P+C|^ۧd3\e]~4;'pώ»q5u.~zQӲzAw&6]-n˶+4֖!\H׀_j 񃸖@}{[#5m[fhCpu%/@[jU2Of85#@2Y,([5edu/harvard/hul/ois/jhove/viewer/ConfigWindow$1.classR]oA= [-XZ. Ƅl@B5MMiaG&;`M>h`2-[/{Νs߾Sv P3Pn{|uqS-wDzΜT|: fϤہZ_H 揈X2zеV6N4;pCq,b?bZ>Cbvo4\wzY~%ANjEP$8:3{?φS1hZBmYBG;t@I|(IkBÄ 35qDe6^-;BӒc$J0mQJ(zR-WsϵཡBg'^i)q]ƞ8^K> 3 EѡlB8HQ3BMd9a}اF.POr91fyzM<%U0`/|Dr(*'֛"{ } VJaE 6r$]b3iiS28CZCʨ`+e4VƽQ[b<Ԫn lWC\Tc<_PK G|$>Y\j6edu/harvard/hul/ois/jhove/viewer/ConfigWindow$10.classRJ1=֎o|V%V* I| ?M\9!&09#԰a!BXeJ5Td$x*R䒧O7~jJ⥢c*-}GV hȈjHbPF_Q~o n_A$]ӡ~X{TFX&b0Ml0[]s)dZ aK=~yק`Xˮ9'H2L )EI*-P*h,a=5"h4GnN"v)V]^qXo"w_Qy Ө zx bٱȩƆPK G|$>Q/ 6edu/harvard/hul/ois/jhove/viewer/ConfigWindow$11.classSOP6)) f:ᓁ1&ytg.5mov{!l{9_7edG6l,xs<Ǫ'X, T(D Ϩ/ȁRSI|tC+ SG} 4: Fmb6;{4P ݵځDBᶻʪp>!ŝ@% %<@q'CRIJLXξiKQgdR-PK G|$>WB5edu/harvard/hul/ois/jhove/viewer/ConfigWindow$2.classRN1Š*bL&==maK6.sh4|]=zIۯי~G J$##4dqbNED4tTT@=JR/A"h.,HVw"IphRF2"*9d91TATHB]հ\Tjf!j7Jx1c!s1S3z; !ho$M",lk HܳIdlz,1^Ƕ%+ M[ׂUxvwFvxW Ț5?L}yGQ@ݎ͂<PK G|$>f*xpWB5edu/harvard/hul/ois/jhove/viewer/ConfigWindow$3.classRN1Š*bL 5&p0l [vYDP M~mg'>ZU8P¦\4]%('4 !Ss."PR,ELZMQ*z)L'@sA`A"TOuFs2ʖ P !,Ω "mEjb}RC5YO+jv3F?15ֿF$2 V8k=DQ̦ǂ@z8,Yqelںl³k6ڶl랾tPxF֬!av0 ;vtm?PK G|$>,^ 5edu/harvard/hul/ois/jhove/viewer/ConfigWindow$4.classS]o0=neK|lc[aC W7RUMR'$4moncZW&E&@Ayk@&sn|??8Dk]`T{vصÞj HZd'"( :2*dzx}p=GACeq 8Pg `a(HP>p3%N$ľ_`*Dh#ZW Ҙ5p&Ҽut9B6ݎzİ_ߛ߽ ^:߬R]2=Ex6po`}Hgfj_~ ?CSF2Z%ng6 X) K9|x$qΫ@s%U3,q6&sDY9PK G|$>ЊYC5edu/harvard/hul/ois/jhove/viewer/ConfigWindow$5.classRMK1}ivvwC")EO Pу9ݤݔ5vEGգL&M@*z(aC..6]lPVѐ)9 giSAS)"}r(3K=J& Z݉x' )KeT^Af@6RMnDjbRC5ٜ:%AZ)#f0~.&bjBoGS$ Ie/lVί⑈(U)<=˜IUW,O؂Uxֻd {<^3a3a S鼀(`Ů<PK G|$>odYC5edu/harvard/hul/ois/jhove/viewer/ConfigWindow$6.classRMK1}ivvwC")(BEtvS6Ń?%fW^H27y3O=4pꡄ5uhtEPNBiZ]:|FC,4ETKCNMɣT\,\*\ r悠΂Dju'ⱎ'o,e*RzCSDH5Iv[J ڃgsZHVkD܏1 ME47&IpгY 8bG"gVXcZ'.lKV]KU>5edu/harvard/hul/ois/jhove/viewer/ConfigWindow$7.classRMO1Š*bL =hL hѓnaK6ٖwh4(cw&m__g^g fV=桎u .&%ChĒ%!f1UBIRNS<}%Gb(dgz.0BNPgJd) KesCyʥ9d9>A[n"خa5P͢=xBZ Hɓ~̴LӄІ[&Bx, Ք_ K.3 uŁm^ +~f`g.hÞ9z鼡lX3X4a*wձ·UWtPK G|$>-U>5edu/harvard/hul/ois/jhove/viewer/ConfigWindow$8.classRJ1=iюZ|]tQ+ҍ"HBBtgN4I:.AQ\~]i 97p F%(cE k6l,Hfx8KR4T MǑJ9MуZꙐœt[sr J=r P'CLxHY(S. !,Ω b]smxpPP͢]\' I/fZsMbb&GqCW@h-hg \w|t),,,Nye+l3;pmvFe+H gdÚn Si(`ٮ%)|[yR~PK G|$>}*VA5edu/harvard/hul/ois/jhove/viewer/ConfigWindow$9.classRJ1=i֎Z|]tQ+ҕR* m'eL`2~(.?J̌.4望sGV]梁uMPv(Pĩ"PSIs@}D)3edu/harvard/hul/ois/jhove/viewer/ConfigWindow.class tqf-{c˹ %;rrq@LhӵH҃\-4K\J}Aޥ( B=,J?ۯ`nJ~@I &3`*NV5ܝLFpSf3(x49 a\n+q*LyL 2AakUu*SE*\xi) 2OMW6Fx"O[4ZOOF*͌{zTG ~=pOS啿`ŧ4nF1ҷGGdO4x|aHVAyo9aiGTƿhWxZƿiw?eܯ "/c&o$I__&$3}]XO0x 5p sp˺s i%4RM =6,OG-D74xMo,鈦Deuh.= ŖD鴅i,< mXIDYФJ?-OTLl*Mġ9MX"GNSiy[[,Mbg$o544s웊sM5i4u-LT@4eK}YI4)vvSYa4C5awd,XύI>#G ,g+'m~fɫ7<4ԔA2b䉶J6{Fj" //dɣL +\ٟ,>U(HMF"ᑛ&Q'rvMمǘ3W;YwΝ54klgI&fM\grmS ̕ BC^Dq(ǙQ9'K#F$w6zy^㠣~c̊1^7@,\"ؗ?;18m4M' UYj; .q0-M~cq:Bt욛ҌS~-[(ŗtc0*+cdڌt}{qlṶ<2X!oW,+gAȤ]ON[,{!%/ht']Uf2#f=6V})T iĸQ|͹ٮS e$;xd_PVN;R8+0߭)|{<ܚnIa-N%)Y`xLYh?y]-A LK/u\D;`h w |{i=A~c?`z +0 O,KVgE2>$'J o&3Pu3T!(c\9 cTWUMK TO+@x]LDULEDCH\H vì!Q#30{[a .8v7y!Ȼ 5plIJA!g@ߘ\< ԎpHua*J"D 跐~w<o It'? Z(/2Uw0Pk߃2POh {']΂#EFN`Ve/ fjֶ1uE{ -XWm:2Gv[}6Oij_uttO,/.NuS>Z]\]Mb 8j9 |ȼ&\;\v>UUFqݼ[tbbBq Gq8#Gq8#_q6e8}dzU\Fq.^*PX{ˌHG >@Ð3Lg>zE2@EQ9$6툵lb-;XbbU Cj,H::h1 q|d&-6v2u%#Bh!N Yt[WjՎl B,\I 2>G$'-'* ',Qp JC׷qRp }i(u/=jQC9L%Ď Y,8B>Qs)䲬) ^] G.ׯ^4p}i_i 9pEט)_+ldϝH~o6¾Fb7vooq)A/.*РK`hu2߂ 2QF"|8GɵmG.> ݾ{5Tmw!RT$oy;]O#|~$Ӎ9ʅ*ʽIXd!CSml?*$#8ȑҕ=趽d}ۓL)˺ʾ~?A8qTuOW|;r·LY~^|Μ_d+߃Y2/wr[0_؍|;=p\;8Nr8qlw8./|[tn%큂UFJ]]d[B귲ɞ[+PTqğǡgn x'xT((9<* Cr' o0;åpIA\.ZvW+K҂Zp.r5 Wu͹&>b˕'8P2)+r3edu/harvard/hul/ois/jhove/viewer/ConfigWriter.classWW,iכKI8:k"IrkǦv:ҍ6]r -GQ U07-rRR}Gϧ0:,[*8{fof޼y3맞}qxZ8R22l^9Z>?<|\T)| |F (K ||_xD`de,I=3w%l9hYvkd$4rtiW1$Oea*mH浔ӳI-4igRΜ͙FjC͜2S =i~ w6<5u"?$|ȸcM_ W |7]F̜;x]Ym¥X ucTL-CEcŸgR7-c zW]ϢVq+*N`R-R(FB ʷ"Au7<x\&%lR d.74#)"҂LC9U·Ǫŵatn٬᎗[–eNzG5r} j9\J^ۭ6i.lwW[(gtAzޮVkU * 9%qcI.[XQwu+&re1o3\-6+j*RJ6T^2Y76,km gx a99ݝӒaQ.Z@;Ǽmlʥ¨!S/\JtƱ)O-YPicip+h0ǨO608HȺ+"NEJv ?>O|ܰ7;>HeV'%H=YDSo=@( yo ,e(KPceC뗰!Yp` zسw珄WWU%VdqsElElp3* lߘXsXcJh{9ȅP0%/ Bs* HXhX)bytw1^)_\{;XlYѪ{cCv5Bya=[米vO Yq;nc*F\-(_Bw-WW[KY54xY*QמCQMB/k'qh`@)w_Pe,MN`t Ʈisfõ^HV@B@DMYukY6@+=H ^nϓߴiѡ"Ln:Zı{|`pU7q 9U#o(2fviPK G|$>z5f3edu/harvard/hul/ois/jhove/viewer/InfoWindow$1.classRJ1=ŵ*Ї"*JEAP|ݩRnK>~>JL&3gnp2X#u ֿݵedF24(p7mRƄv \ ܗN5'+:S;v vrf#eoykڊ;Kx# w,9(a07)[UYd$PK G|$>Ln4. 1edu/harvard/hul/ois/jhove/viewer/InfoWindow.classW xTO7yy @AfH ABq@/G207{CK.V[-A&Tkm}W[[}omsI&ɀ}{{s3o>$t}xXv|Vṫtp1pDCJG4pTG00Яqt}A O||QS O2"X_pL|]>C!75|ˇo%}P>:jEóuOg%x?// ,¯% ѱ~'kqS? 0|MlwYC _>,ۇ _{MV87|xӇ:)G>*B.bniӨX%kTc긌4rUԯXJ!χ&P&t e†}4U*:ei>>YQ5͌ SYd}k&]hqwu{RBa[X\+ Fc6k5V7aº]^:6YKoNˌVb;nDFüKۢJo>j2Y=E#Hk<|ˎ>a\dZ]dZn}K;V Nt.c-"yPhFoaݷe[[ v}Pf=j)Wr֨-Ê;hTKt,=CE׊4{zksc-+#ffNE ۚNE4ͱ%fv1Zvrśn V,azf8ƴDT(VAaW4U]S.5[ IgPq6o2]\eFWer&;s6YaOK Wh+d4\ݪ0 Z{C6(I{ G&Z:L>Yfwc& ʈ`BrŒ hKIvY%;f \E(TFrʜȢypנ+%8s4֠znH7t3bЭ» 5ױfP6n; ܌9l^]nK8q,\edw,L;HA:av#8Y&3κ%L x9:tTo.$۝txnlQ5ƊXb:j+ûv&vUd9^f}I1|0/@O_ٶ#lN]i4QwpoP,LϨ¬#^dk2#znV` < )wtp9HpRIpŏ;^ERyS jes\NWaWP(T%1Ԥ9l[ ">NLk{M#gBuDywZI%<$lɱ,rC2WbEpĚSV5YZqw16ٹ6 jVػkw^U) [J!~iInfgoq:Fꐥ0́0+W<C*!(yک3SxMvE5}x/N56Zw NR^PyJ*O^SjGI|Vjv ƯhelAe1T0>=AmOT6GHaQdPMNOajMA xOÌ#(n+A'P p{4ߧt'^^ݥ jO>AdӔ} `kyڣff79_XZY_7P+0/Ta~Y)Y`Qg4UV~ [N98^ !xKq), )\zˏTJaE, D! $|rBCXSejb:pyOM.N(hdDlL("Em] kk&&`?N=>f6K,M£ؼȨ4C!Ȗ(oV;hS4pI(P҇KvX5m\ <4j0PR[0XJ0R:%ߤwsh{5?HϪ%z^N .y+ Mt ?qo`>tgCS,_>#>c̅oZ}}y45N>=(͉!3w4|8iOrp~kZqL"{ )HgUT>ϭ^ Fy0{aK~D$웆\vGwޏ*ͫ4JX3+B>|f<7ÿ(hO`{(ﶄ ɖPoKr+=jT ;PK G|$>]='4edu/harvard/hul/ois/jhove/viewer/JhoveWindow$1.classR]OA=VVA("؇R bL!FSFkwv eW|wDN2;3~s:ǭ X1Xp'Z{#8;S.J]d*?+gdUr^Vc37='ƚߝu=wZ: 7\|tń3Fw0ҥVzl:!Ǖ]m:v+"Oc=5,Vփ b3IgT'X{ϞЮkk;T?8 KX< gJx~GW|ׁi5?s\?ΐCM& +&߆Bce@f߀e: ݮ4mȎqBU//74>Z%ܸܽ,>vb;'Zr6eo L^PK G|$>,S95edu/harvard/hul/ois/jhove/viewer/JhoveWindow$10.classR=O0}nS҆@T|W0t( V0lӸ B(Yjw?>YzcEņM,%8hJc,h)ν湐" 8}q: 3-OU#prF,<2d`Z0QZg\lƎU5k#ji5APIӛ 3Bg0 )KPeQ4rj۶?!׺ub߼[ŨZ ۟yΒ5x&huۈ9|鼡 ;L'X4n1 ;ʿ,(2: ~PK G|$>V H%4edu/harvard/hul/ois/jhove/viewer/JhoveWindow$2.classRMo@}8&14@i  Ԡrx;r *T3?govfv̏ӯlQs4k(F7Ѫ[9rc(~t1<+o&|e  $b@X.Ӈ6y }Z̵`HLeLڊ՟ȹbDRo2,;(IUkm}U2C,T&cXFXL7T e94KPbecE1Ծz-3_2*"auyD[%C5t %C_5h.Iz=MfK^&I ~A3Ų|f]`Ħfe+#ZV">! BU\Ý,gPK G|$> 4edu/harvard/hul/ois/jhove/viewer/JhoveWindow$3.classRMO1}BlM(ԏ$䐦8RUJ#TJ^ڞ]: 6ZBK(wc%lxޛ=}V>JXQź a%.6gd> |UJ$ 7FB5i 1Ms(IY$*ˬ"gsGy}:0ƴ{{\9`e>҉ŖĒ+V^,I5/W 9^l;Ô[,]T@ŝE7xus PK G|$>!Z@4edu/harvard/hul/ois/jhove/viewer/JhoveWindow$4.classRMO1}ŅDUMcB&\׮]2#GG/4i;3}oM_P/‚*JXQlca&rUcsW$wUGM(s'GyNQ/$%~pOaXp18Ť#N!Nx~OKEV|ZGt4!gZSDRPNxB͈C_y=Fd ;Te )ǦXWyPm-':Uaӌ/g̀If pLtXKO"Nk3e:jo!`ޜeiF+}PK G|$>^V-\?4edu/harvard/hul/ois/jhove/viewer/JhoveWindow$5.classRMK@}ۦMMUzU\<)B)=()lIW7ѣ.{3oF P%ؓQs`|L=&,4yA"h"D4uP31^k: A,u. `X(T$BŴAzQ+=5Ha_^MXE݆rj;FUR",DDdZ|f$1A_ybT%(1Bu|+m w;Oņ^A+8NڥjN2,֢ӈzi#t0;Ŕ/ o"rӧ hd/PK G|$>W]L4edu/harvard/hul/ois/jhove/viewer/JhoveWindow$6.classQN@=B ,XG]ј#2MR\ ?2ޢ ndf=gTs0PUX7eba!rUX;b8Jg]"p;B>rXXɩ U)3B+ |FhdȋA|}#?KRD,F\RGrVN4d(0CD*$jbS0eDʐ0 =#920d8+CV8NO 5KZ>ѣc/Q443tPHTӐSs(HIj5_zFH~kt'5?4G JYPK G|$>.CR84edu/harvard/hul/ois/jhove/viewer/JhoveWindow$7.classR=O0}nS҆@T|W0t(҅V0lӸ B(Yjw:}|YzcEņM,%8hJc,h)ν湐" 8iG=#p*ufB[>G{匲YFyeF/ >ab.>jڅg:GU<'Lk BK C 4edu/harvard/hul/ois/jhove/viewer/JhoveWindow$8.classTkkP~N/˚fsn΢tsCd/YrƓGW%' ̀/QETd^[:cAmy,*aI;,+rWCU} 5B̽0rܐa' m:#:~,c/0p폟2(j3Wswt1Ywr-J܊\_n`>a|"22M׹[5TMiy~P7@@%( sK ^TbD*:ThҔӴ\}+6<UN7_1,F< ܶB(YfsaX]kӺߦr|aMG LO1QϷ C&|@稔<v1+6hsȔeőDh,Ry h#8Ea+rrV ogN1sm0QVpTN~#0|h1F0G?GH'e1IPK G|$>a@R84edu/harvard/hul/ois/jhove/viewer/JhoveWindow$9.classRMK1}invwCEAJJwc7e&.AQ<Qbz@{3o|}|8FK*XPNJ5s:%8hBc,h>WoJedu/harvard/hul/ois/jhove/viewer/JhoveWindow$InvisibleFilenameFilter.classR]/A=n*+^+"!R@HvҝZ;xăGHy3s{Ν׷k#B9, bDĘqvUTYa7e"EĒJ^ː%DAWza[1% fWĂ(O6>'?ԡ;S¡}qy$$BF>edu/harvard/hul/ois/jhove/viewer/JhoveWindow$ParseThread.classU[OGo K(M4,4)BlB4S<AT0s#F-|1/quWjY;]g{|ob0m?h_ҎEUUmJbW5վn*{S-s,Ng dO䦴kٰO;ZEה]{dR!P~` @llVypJ 'sLhG [K5UJ{ʭP| NEKYչӒ|,kL*XY5Н?\1`&QW~ѨPJMlJqK;.8+r8kbV`LJG3y&~ƢV8OVqG.Q\L+Tぉ3p:Ǩ$18ʛIW> rKs#4G+-1MBtrgtҩL:ZY,|4T3FET9ppS-et`lٓb9Y&d|4Uky ߷n24mvwY. A{]aꊢS$;J\eHiCJ RT =KI9D_(+$^?4ņY?aNE75`ĥv1¤`)2`kzE&:#t|'Į2,l9SlH.JPP|LFɵcTQxgf~"_PK G|$>S |@2edu/harvard/hul/ois/jhove/viewer/JhoveWindow.class; xT7ɛ@2!HXM&˰[,| dfEۺֺ.VbEqŪm{kkե9I&!烻s=ox#\5*ܽ[u7t='T:ϝxP!d_'5Oi4> Qw4Oq눆w/\@ _R.~ˌƟ03 t\_8 +o[DŽ^W58;^S4T+hЄomWA+>;N;pPNwxOG58NS@}Bq *4|PINP0O(`X%$y¥R v1b*4Dq[W[K@-1)&q=E*jp4^=[3IdൕNv|ǫqreafbu\.b> X"^S)TM&NW#d:62楪X5x@gL*Vj-VfUhpqVE\akX9Nob#^B!ڹIj1:i|q&6 0آ 3k0SlePE\ls]\UqSlWE)H8ER;4xUb^&u*. q roKŅQ_Ƥ^έ+ ŕbӚ,s*.>ݫk5qRq5 zqCQܤ/(n[Fs$b*;P`y0]\'1)CF<#6bX#86(”?4b;ۙ y#Ȏ!Gۼňfr%Kh/dM᭑ 0!vvbZ$6wEP cމawdY'J/2vpwe Ҳ͑h ̬kJWs4 6Bx!2oE,$ƺ,I&"Hj|wط6A"rUސAkhҴ9flK&nb#߶xl"|N9'fjZ nE[!4f:l!zLX2xY47zs< )QVDs0Y o`G 6H8 9B˜lq6<v0ΰo=GDWGȲo]zm`Oz# (Q^fnn xK|31ΣsFۭ,kJ/H uS7:/L6'ǘre9pS0cEO VT? )U'}hI& ߶# ĔبVUܦU5JJ($뤭ϺGQ**SB e#BR@[dԶ"",V'asMLumuvD OOEwSAedξD&V#tk'>XbY,!{;9 JgV9O]5:L]TFmW4u]qE}Qb o2=yc' @36fZ7j7#k[0\~JČp|+u49clr:X. 9g#3BCi=J#H>#9s>lkG!ȴgN; 읅1?x/es Ɉ eIKJws]:Vc9e+Ž\qf{u<rXk%V5>]|Kܯr\h,DkDTѱku`Ai?OұZqPF4/Э1xXtSoŌ u=8$]Guxij60U+Y6x˔ edGם{n8xOtQcD%ǒ2?LFGVZX[K .~.~_UJ7#|J/$xʿ$8a0НAFrʿ_މr6$&wxlf#ðy_CwY)T^ECx7Y٫H,5E7383"Rz X L#@X@ ["4)D BJ'V,:[?5-12=xCIfIO"ޤz5eDJu{_u7..δxD^t񦎗.~?]vj$6_3(-T#.S&%JvX WŇ.++af'nLD늢8N0]S򉿊+NZ!q+v3 HnnyAR;h׫*)HeK0uEGthX)IG-v._ @I^"ʣ2Q銋╸GWJa,c2]+z.F’d0_aS[Tt*L$fd%̞p$Q\WN¤Lᢜ2ɃkyK{^e8*ue2SUfJT24R*պRm^Wue2K8]ו 9YwuQv;P/,"MQsU|S׺Ieuo;!16*1mh5QdV~eִWeNǽ҄bv6Hѻ )RXc17[qF8f81UrxRWPԕօ%lTY*uer7M:^@4QP+pCu;-Jjlem2 N9GWֳrm`Xٶ|eӆ̓ŔAC[mѢ 1Ed$Xg]}ÔX ^lN|g=*#;M\zn r턣  Jy춰y  9}W{+qD:aR\㩅{ E(`Y\ۇz\$3v~ƪl(.Z9[d|'δe~jOZ46V eEe=ZrQ*i,B!~kiCCo&ef )#, sip̨,ҪF*DS?9ͺӈv% Θʁi5qUc*SHW!v'Y_Hul[9CfW \53֔- [⤖y@G-?QNgZG1_ g+)a:}ʲiᛝ\詰cWkR{b#*}b{w%㬋DBOqf-cJ N2_2*ňowQfdX Ċl2X|>)-;P1Z>QM$n% Ʃ '"N~{F?d|}iw)ф\OiJ?ۿ̔f)eEZf7?4&ctKd>cM;Kn9uG (˹ |NnL:i#)*5^^>M^X'j !kjY3[c[&7̕mÚ}4,󞴺eh o@};|b9kHW3Gi;( 5{n-b.A~ 0+lJo$Gg,?,c%q%d;߈hAM6]slƃS5DBD`!vRW}Fx4Xv@;v1vR*EⱾc#N#oaJ%fS@(ʗLܰyB"`ɫr>g_o%7Vܚ p9i̷ͬv՛_ٱ6 tn*!aCLvv,9IF8%AkCL6^8ZW+%fOZƲD03Ў3pANU/>[?d=dxsg]U*X~1}gڞ4BqS`XoOD#4[tQ40]ko:?{}>]>A[)9g֍Ⱥ=7chTbɳ:%+,{<;*u"NO ,8,r1]:+S 6L&/f`vu jXTbK%R#2+q8^n V=ɪ'I岞d=ݪgLY“e]`}5X+k/ΖKƏ`^ jErbү_gST[4nA3m/_MmzͭUT6sq9{Һ za5wC\nȧR e솱40w'xR0ՓI0T)ZU`j]~/Lkw=0Nuܛ)``[= '#9yTnA MܪBx ݅~uZ/Զ ]R0]yR0@-7?Ѿh_ Ja1#P 8NwRp:^8ݭ@C]Y.J =ZNf m F,̂hy/4z`e7 uV{h@s7$ P9p7تbU<[5*Uq{U_h; KUHnMX_<(1Os/ZzauXZ]usz`}7l`7XPv6lJ< !OrۅBkۅ`-E>ϋ\95ng1I[:T'd:G5/E4MuX K޵%G#%GC<2|)w;$0$|I3ݪM=U=Kgn'($xKi* rGN'f5y]<HFrq><OIm8WȮO9PZ %p'RIžx@ܜ8@VV%bys*loy.%-\NCc@!}l q]=5d ^(szҿ4{,9^ >rJ$&ײc! ;~f?huϸ8 z(n-O&'A1**n9 M>z|O ӮuyTq}u} nnu9[Zz1'8S+ӛ/R5ġG[1Dtf tsU;Mp wz{+I&?}GT@v^NW3d $$Ieؽͤ"pR֚#pªUno)s;X$֟"ϝ1f{}vVX.< UDi11GXAM˵_ >|iy64 ug ^fR<|T` y;QJchy>RkL\n RJiY) m"R+nj?J M%Cw/ޫS~P~|gd ?gA*S8G:#p *J;5x5uO4 )8F֚#P͖R2HfVEs҉:GB,hQ0֓=dpɳ|*~yP Ɓ 66d-xM;8MVNSN\EisSOJwBn-/C䟊EقSJRc TO&(HDR:{L@Akz~9nGzW9gܚ[i;Ϫ UoU2PK G|$>w641edu/harvard/hul/ois/jhove/viewer/MainScreen.class}Sn@=[1q](i4sCP!Z"! \;rg PQq e̜3oW L㚁Ȧ\"튁U%"on:0@5*cP7CW0bF=>&31w>6ygBpivN}.a/p V pb|Q51&H8&.(ln"qxG: p{ǣ>\v(v K1ݤHavfM)Pp$- { N]ly3q#tx,C"Ҭz=i)֫w!7lGzJ[bx\KN)l&nl=F7DJ.fW#4fGljh71(4K_s5Fk+jR˨H)˨CD, ~‚cNCnc9edu/harvard/hul/ois/jhove/viewer/ModuleInfoWindow$1.classRMO1}EteEA%~=p@<51Qѓ.2h<Qѐ`N3o>?>Z@.f⢄U6@ZK"JD`r- :!HQį? z^*_Z6T*1ǐokJ‹VtH>n;bsJH<\zZT^Tk;,"̧v;plSV;dCEPC5 7b=vF2N]ANSk*$иdÙz*]yd,MYtB9{ pujkZ+X g }S|3cDKV-6 ̃PK G|$>ț^x!7edu/harvard/hul/ois/jhove/viewer/ModuleInfoWindow.class xe&LCi+(AڔU[< *XEz}ZegimMm0 Rx^^̣$.YWU>yWK*)[2@o<]w2{<C>RcDO <|!×+k^b?$}:Ko-c!1e?0'?'v" Qt9WFg9P!_B1 .p/͠q4>q7&H%2!D>$<%d=2a>Sy3M}y.c) eB<7P#y^$c.f.oi\|y^!1<ʸcep: A./h0ztX&'J\B=3rLA]ǦHf&;ӛxl_2ūbuXsC5џYά8I2%h([5;woK!f bl~rj9K߈s/Zۣ9Q*]P2qTv/M{xjYAJ60bV;Np@*?t|7Cs }{i:?}Vl\>ȍDk}17}0ɋ~(huu0E rmJ0}PlH1EL{LI$Þ5cʅKܓ [ gKKg5GFy[Nڕ,{J u\ul0^o0yJMz1(s e[b@WW"VYգ"Τ`y?F? 4Wl VΦ1+,vVl&adbz'|QE|A5q0 %ΑBdj\Ů Brj. E> u̖܍P-qK[%"jLL&Tl fR4%D{y+,@yEvXO!.G-^׻s )fdIg̿$Qf"h@x%>XNKk&cLVD."q9/ ^~ ,ofn*''AG^?BA$}sՃ0^P 9<(VQ-~z`58F"iҚ{Ayusk9SCA{ :6ۡ3H$NO?AWMbICbWG>y{k& ;;ilV΢0.sޮ1`.N M2/ɀ~iz_e@,=V4 *Qvc+N7"]nQ Wઑ\\1մN|RK xa94WMKt^w NR5Gnr_ɽa{ڦg \!.O42$ss_|nL⍋tꦦޜ3o+ܒ魽0ܷ;z(uj,< vIٴC%x&Pg9["Yuo_Q%?PK G|$>VD4edu/harvard/hul/ois/jhove/viewer/NoConfAlert$1.classRN1=E`QQVcB&|W”2(cgp&=?_Q/ "rX)Uk66qp'"E)Z>tL<4_VNH=qS=ch7g1d'X-EC=ϰE,XN1);))SPFWd{,<'YmԜYT5 `(](EQ7ƐaZBF~LPW^_Kp0˭ թgn&<>I|i!'9yJ%^6fEW]pٺ'bk \a3z{Y5* ҎPK G|$>X2edu/harvard/hul/ois/jhove/viewer/NoConfAlert.classTmWE~FTZNk YcRFocv P#~ 9zzg7hnν}{g`"n[>p1.ÇEq*E,(bA4kM݁2>%k-'E|">w1gӾp1]4-=_9a^\P<07׵f'ª $0"V |P:#bٝVWelva fl nMISCɻ*+8^jaB3u;*41'(G'"eY0ѷ<J5奄Ae(}pRVM((AQ?y{xL\i'PK zD-+q ͫ"IPDlrexAh^medw$TI0؜:ei"˶i:pA-iKc(Iݵ-^g;S-yC㯅;71i7c4QҾ4iHW;/ W+S#B< / `VΦ4 9[/lz*Dj1 +rZGErWi5YȈ/.mZy…9*LVsYi kźu>"+nҝx{vK0'PZ8d4u NLw5 Boe .wf,0Ә,ʓǘZBQS[93edu/harvard/hul/ois/jhove/viewer/NumericField.classuQ]/+Q]G˴cp)+x%^nBz#xpviș3BRBQbϵyy}|"pbSVM;b3.~Ȭ9(Ǻa[u4teQکgvv(0{rRc7ID\ya,xXĒ?X)&i[5a+V&I~*[Jwe+ e$݊$]HB_`юeCO|V1U'cbOR`,!sGOȷlmG'J'?k&њ SXަFDLSϖ+Uk%{Xk y`!&C~ gs~`<-#%\y4edu/harvard/hul/ois/jhove/viewer/PrefsWindow$1.classRN0=.hx (RnYAHb f6#!.$^b(%߇u!1e,zdŲk.Y,NC=E4'RAsI#Jy7*JFGy,NZ N;"L&Ki/I(bتw"\2N93kʙ IYD.>61c 5S8+Ei{(& C;Rgd D_/u+=fN,#¶xTكflmZ1~{k{f1m1#+&z ,bcVi-PK G|$>L]y4edu/harvard/hul/ois/jhove/viewer/PrefsWindow$2.classRKO1 ʲ"*"8  \5&p`[&e]&2dΣ3u>>tQ/` 6ذbӨ- e ;v q TMp<,JX`6Pt saGVH?h䩐">#4z J̋E(<= j%yLyeLӔSh/i_8} 6,`}j(i%s!%zSWnД1p/&@k$"U ~1m<h3J5:6z u 'z2(ٴWqz:|i #+XɩhkrJGgdyE;19JkN&h*_PK G|$>p|WFFedu/harvard/hul/ois/jhove/viewer/PrefsWindow$PrefsWindowListener.classRMO@}- ~BP ^5FCT|⇉JC)j\@W |5;# f 3q{8qiE"fmaڰp`Ài y:hCb6jP ͵x,z;{\7O3 ; ZA?;#6hE44ZƴPulkV. ;Z BGOG",BPK G|$>V;2edu/harvard/hul/ois/jhove/viewer/PrefsWindow.classURV=!R0 biSR 4&mҋ}ED%&}A)L=h?$a܇5gww~ ~09^#Hi5|bIŲ 4t"͒jXŚ#x G7|"sxS Cxʛg|BhS[|",x95a⅊5[>w6 3gӆJS %h G: ";y$ ZZɼK%B2'O Yvr9Y](2bW0%tʆ\ דo{ vDI>բWt(RTA-4; c r"dsfn=oXq-QG^mkwk[&Y8SSSuC=uSS:naVmPzG-miD;skhS=IPXn`fR}ȥK T4]i((RviMmv#9 1xI~R-+Ge^nj:/E׶}IRF _eЪyK-Y qW\p{?@Ǐ8P0ъX,}TE[Y_Zwmnr=k-[o^˝“%jI--1jͶ"LlK7eQ.XaŠ&'t):XeƔnȬ9C*Mě164R\5,߲u Y RDS0xfӱ(.k̮ u\&:XP C .x7 0Op1Te6<9IGMJ!$s¸+.JC bC}n) *~oz"Z/QV {MJhh=v8&g'PK G|$>\ 5edu/harvard/hul/ois/jhove/viewer/ProgressWindow.classUSU-!ِ.JZ P*$-&R$KXvfm}jj?uFBGf_7;9 I 9;׽? `?xp"&ܘ"@x#zcLCB. wn 0K8{+l]_ՁIqRD_2"a/񕄯 l8/;V}O1(vJ]%e G$ 9XTh. j.4?/*EUYRP)IUKKt԰Fy}ȔEax1PRLFMkbIoτbYb vct R>jZ,=ʬbJ7lY+T9kRa94Y{df^InQk%c8SMz*r>c3zN*hiw2L$ E!InR[+eV.9U4HO,7M M40>{ Ɣ4MemTg-&S9FU$&~Xks7}ǗZ.rx~K6@p>B#pzLj@`4W np47>VH9h޶Wo}p hG __TZ4 hoseK/ɼEKom-Yz+->Y [{,;}[,Y۔o N]MAvN]V/fA2\#qěD*-W-TB#-cal';nd0 {CkyQ/Ip6wk cVv<PE|Tn%Vet4=5nŊxgù񼿆}&@GùK]tm-¼zcpc .bᅫzSPK G|$>k*p2edu/harvard/hul/ois/jhove/viewer/RepTreeRoot.class| |;wD$!w8v8! lˉ/$ `{(-#9Z  ZΆR =іJ m)Gy]+?vf͛73o޼U'"88imw)\S?~I;I.|Z焯N2_yKtF{ЋC}XF 9@A'C kt/@%":tïNAta?x!>]O%t)>}>BzF#<9,\GUj8[Xz~=HG1NjtLsOOp$q~]zӧd}gQ!9rshziNr1 /qS|ny_^\E_5{˿@5$7?bOFq_Wѿ9XF9==,[>>4!#ǜpRz!NcG 媊qՁ4R\:%H Z"cJ:.|,Չ:nG^P'XT|:Ӹ:=O-5f,s:\SES%~U<\] VsuN].I\]Z.\]UWWpӸz:WȣuZz,4pՇ+jPzz&V5s\mj;WIW;vrlkiW!]svs|A\5VTǯ\ ݄_юX=!ac(WcHGVnC"z1\Kgh,W/Cz9W@,|W"W#>I~wҧ g=0 ?@CGWGW_D#OҟrgH_ }D W_E+\ ׹rM[H?';X,boX;W\o!,|Տ~HaaX8գP` L"U9cH 8Hs9s"LG|,pVb%" ig< nN@:)Hrv"iMG:Hgq6"Y9U ]Y%*"lŜ ]IHrVtg'˱lS8;i μH8Gi#g+ jDY VڐsvR?guhS!P_X!ޑȖ`z@u8޴1ŨMZ1#aF$8XwpA{W"QC!sA: nm Cz1qe͛[1c[+Ñ` ՠSBCi T~ Qԇ{A0#* m)|1mѭX0@e$0`t@ b-l[)߈5 7z2\Zm 6l2zb+2k7A.xP0gG!j|bC|H$`D i/?aQIs(*C)qHnЈZ_3w7n1bAXeO1 ^9 y?6:Bav΁%#m2"hMoba̶;>&4bxV!씡P4luvNZ47gXB\oD`YG1 B!7OXęS*΂lN' ՙteFD:It6:`:ba:f>YY) UIg18ӓr [NNJmA&lq2݄NOtv!H!gn9@^.QLoKQϰ tZCt>]Or|ZJGbjp>:Hϱ+5vw:ʖp"po pyl P=,}ݨ g߄m>b ^gb]Asw7ƾ 2 KNݎpycX=|9 +dw!BZak86}+5Z!ݍpP-+oM!{ؽ: BCP1ZFTg}Ptv?(l5Mn`bcКq\~R3]!s"p$X\D3j 4ِ԰gE aQU} 8: ňa2t M|F`tܭkл[eXO7t}hlh`5&^( 6SbzǵJjkK Hstl_". 0> ð=1:{RRVJCx\"JD#,q !)=-@`c8"Y KK{:~0!,!d:!0gϱu'3 KO!"6`/ 6􏰺,0l_+Z ĆȎw c$\ڣ-ie {guS\H4w9xkɅoAx[lv/p7,iMT%/ϼR)²`($dsh٫W:{ tk~_5Iy:{ݥ7pX#z!J[paMh 1o^iTEO.w[{T)[ F餦pW`b@G`.x) G` ۦgiKb/Fm ,V'p14F@t"`9x"(=;kCMpXR`kG[|z1#:H­0zCXF5ina%R1XdnAAe>mzo]3(;`(IJPa$bFfQ-Y_E\N}WfroX'Aw 2UE iV?XOq51OaMAK0yds!1p[)i ?!óK(h Jp _)ߧUIc}Ȓ$d@آׇ‘0 ?fv7m5tvPXά7c!vU> p4e:ݣ (׬;C L}V71c {6ˡ肮я4XÑ>ΰa隣CC]oфpBQi; KNұuy-`nt*dy9c +ʅbŔ'i 8{1*aDģV+hcgG)v4AVBHȺbe2LĖ @p{`ܨHphmLlF56O&+tL c-mtg.q]v0i\Yۣ1cAtw1CHh0z %ZWHKphDB,l,1[&/msd0"@k[&d`DȜ-[Hr< = d+a>VֶoEV X] DfDV P) a[mL{!V Vc^ o gºE)ȺPP.vFZXF ݱD8XF$~鎓8c M#pbE8X*L$]1(<@-V7†HleT@4*'2_.X烹FT "JW8:?OC1DNpH, Dq(B8ul.:q@hX;m[/hU[w."Ո"&YN1b\0w;/aޕ(r&f:BbMY8=C͢˶EZE]b%rîm Y+Ko; '1w02;ˇR$"r(6Dو} 4[u~8qӅ<& W;։6k֯~e0̖s8. ̆sEHp;PԨlĩ`gDaX|ki-] L6o:#aጏ \3z"dø. d-D Vd h-#rE$6ڈ3>^645M⨱Z3c8b+.. M1(/˭CBaaB =1xa,W-=w3 ĵDĉd`zMŖILF'Hf{ҩ;$*MɗN[BV#/043MYHy(Jϯmئ\艜iJAz\r[0ݺ./ot7KOJ팄yۼՀh"2u oId =1܊9"vqefWrӐ `ZJe6@FzXk'dL`b+hShkjU*X!Z\gCS[÷!Qm>G;vP@4^̱ye CNpxcyfA²J!%YsShw<ߨeS60 N4iR+Vf $@d[j_=v4z!DZa HVʙ&^Vs,WJR .}.]hqQ6ʝjFw%W2Xm+kOiNAXh@LS|;&LJR@M {M,AR=yށ֨1fC04bݐV6Y dl6D)P'ۮcU x23pKF>Jkj&M+m+KZ][[s~o}֋)r{ˎ6oE1/!C`o߄09%!Cү`66dz!8K'Vټ2R_J_HР:2B25G-tW|77RL{̮ZN/.! dB] E}øQ!ưC!][";HٚYQqE0+dl~B:)qV,ʏ;%9pz K֛Le[ګ,d;Dv'.d]̔2ElR%|W#+nȉ8|+[|]>9ɉqjِsK*IeIpRRy\8w׷66aT$-.Ǔ_?3 Sr4IoL^.tgyq]7`$]$L[&9nSĸT=%).39!*& g06IIyo9=69oR\y乓$eCRxn[*iז 69m)?k>ۚ\t֘X9l9u*s6J[M`֤䵉NM\˱ǓrY&%9#r"VD:B:"NyVXj8vg67\!WJZj2զˬ> Zm~9T:)9uf$1cmiokF{6U)L֦sfpa89^ζomWӉXek>K;67MB_QukhO/G9.[9]irdtk15m-DF [֩ږ]ۥ;5--NOht̖.vJ"hL`ܥ5'@l.'׿g㭩j9ədIK&%C-}C<;-WPZf:~OYi9ocN2JLt Yhkbd+RZ̠:B_^HbZ"h) :NMOZ@:NPJЅ eЊ1*#Gc/yhɭ#G?e)G9 -1y-WU!ɃU{HnRfϐ"#CeYYjVNJYYfVNIɊ7=a/3$҅m0 :uLs;Ddz!,_n1Rsw|b7J@Eyb( **w`'N)yTjtFgjtք ӧ?DjtvQQ>`й-߃9Uv,1VA=L~"-!ηd! =9}QMdb#5-KdIXRNC\`9v(G&ݓx4Oqy{dx2|<[{6ot!˓<8Nv"xrݹm{R۩p7mZtW.N5^%fnY3*ߝk֔8\Ը8v0ԇL8Bjt)3 d5:U|LN49Y#jxB&O !2~Ita0`{i (.˒aQTuxa}W&:XZ0 sC\c r/Y)[l#VV'sRL] %ݚݶ dn eqaEJačc>&z탰&)&.6J J!J{4K:9J3S̮se(ʝpՐn7٨{>n8&>1Vs:]N})H%ϐ^Dsylfݯ8ܹBr❕n3waR=[lI%!܏eX܄XJ&UGp_T aB"ey$WR6&j,cRqOp UGI0+,69y|D.ä.j51/W` ms&K1F>vi ѮrL]8Fk~ }kހ79O&Y=FKD/'\2F99drLΛ1rs {>!1TQirL;s3s929O&=ȹtܛʹ9brO&}O$#B $ \5I,Ȳd'܄,/@Y\ *$D (A| 8 /ƿċTo]z{_Ml#Au%!̣pl$(Y6<sqz<8xv#Osq<>qxex, @L6WʻWˬj*޿Nb^DcbΉ_lG!`abErK51Q7z[MGH83Z~T| :.ͦ„tqY\A\K%t< E/3ŘGrk(Xj]\RiO(c,kQe-!1=9 0a$_όG^i88y@/Y$ fK L[L<yHX@1 McL%XIL#v=ߦL Ĥ bOfY2Q4#]c,n_-s1zL>0'G;a=0}w!ҧHӘO ?#+OV,&5M|O@XM@> ~I0xܹ(irR%/ N#,no?wֱ' #/-/*\STV3)nT%?R/B, 3hK>5\^+|*DjmU!yMtS"3o WqwC,yU7x5sX Ku#o]'~f&~w`BWL'n =ʘB"x.=p+NV8ּJ;$q0v|V,\]hz)fB/ȻƃM@A. 9A! x /)JX"ZJ(xV$d5%sC8kVVpe|4zQ;ۡ&Y7 $g%gYDA8O9 I'4z:^ nzr;&I EUDvxą6I;^G#-k=yJCߖe?AOZs?}Lc~4)$qA$ภCt8 $<"Fr&x<ka+S0rj6rbfLnS/L9_ ee2+mvW-rK#B=<=|N*Z3n6*;By{Y!ZIJqSk5v<(}nK[C"J r bʂ[CSz]"{]*VVI薻HaRkun8d,UcFSeېZuk[qqkjOYݞqyK[/3<^ޒI4{K5ebRکu{R104&+\,D3Imj]lvKaتai6ڬf.K:mYαXεa9/ۘlllc7^a7CvM6vp/FlQ;`8bbjfnxIN3i ^gzX.=g=gq|6e8. ;w?g2WelqM6kq\ 85 ܼ]-puE~ͭ  nח\7o9ۘn6[qܖ˶.vboqwdleV'tr-W,]6,elz=`;hez6m5o،6;̓ ՃVo[JK摼= 2edu/harvard/hul/ois/jhove/viewer/ViewHandler.classVSW-E!VЖEE!@'j"&j7 L0Y/nHV Aœ7|K;c0Ee-W 8U$FӍt!čKjN/r TO9JM()yayA[^*T)=a1[SḚ!- Ho:[d!y錎AsmL]v9c̶ilRty"ҵ̰YHe8Y7uaw ]8%! E^;xW@cY$[ mYiXy/ޓ>>}(`(@ Ӓ[ˊ<l:1'$GrEj'.+)KSY<;zKwԶu-gεʽt1hruعlִDzYPq!ZOpW§LBB^|.! JK"_HuWdi~yцC5;U4Zbi:;D2Wy ky>ݏ{lcKj>2mWapbfTm+Mԅ2si&s"#h|<+|ۉ_|ǵPQU*T<#7(Aw?1 )M Ԥikʾ=}?/츋TTX,y+Ys+sbfڭ;-Ѩˌҽ&rC@Ed-paz@.p.\AO5ÕTkIxpe+8Cr,sw /}]rT2PyT`*ek({Q{7 7P؀mAJp!]{5%a/mH޳ '*"Zi2+GK):|{ hriڵ2 dhr:`3edu/harvard/hul/ois/jhove/viewer/ViewWindow$1.classRKO1kaEA%8 bLp`[.ƃ?e]9x0$4̴ͣ_dn# %lZXضÐ =ej-tA${1#Ϗ$ɀH+6+ V}C뻒$PN~$]z$",2:ҋ$7Jod" +B>8MY)WZˠ;HPNZ =# +Jdh.Qad^ྎ0rh^3?]-GV G4Yb V.Lؤh` Y[toF3Eau1 ;ҿHfhʔILPK G|$>~Fa3edu/harvard/hul/ois/jhove/viewer/ViewWindow$2.classRKK1RW]W>]CmWEPQP*zݔ5}w >?%&Rh 3oϯ{h`$=ԱbŲ,isaKa#" y\˔"]/$ )=n p$H%CX=DPLjuMɝN(dlu\ 3NSkSՏu*%e]a͇}l`g{ `ϕ$iJ)CP uϯnNוiF&3FS|sG#VF~{?Otq1edu/harvard/hul/ois/jhove/viewer/ViewWindow.classW X$Xdbۉ7ic\\۸HX*L6iM4=ܻukDmԭӦMWz_Iܙ`|v?y;Y{p,Kup-Oi^9dBסcߟ)p*OŇt|'c!q|9MGM{P9bgZN3j4mӻRC&کn2>⎙ ;c*+j]>WiҘƕ=dIg k7Tc]FٞC`PTѠdJuqY v^k)TcDʰxZCiBicL"w |Z%m3DB[54/9OA ,I$0A#ы44]5@),#Viv3"ְjn6T$CöeiȌR |V=gφ]dhl,Rx-y|A|QCt)mʲzTr%{%+e } ױW%ӱh (*ߐ&!\dV~?&8M畝'm|jE%I|Q2K?؇']dvHtKG?i0jhJj &su?~!KJ o9%Oğ(%%R /x$Kt&$ɩg2 |]q7Gn4GxPbA<l9 wV%-˨ˉǜa݂,.ܞ%t]<(z2^*2ff5<&[ ]V^M.@x. хa̕iYx]!S3c} z?R^q..rϏ]'쎄c2kē╤ƗG2V̽R3rlbʷb\-ꤡ6+k{# g6KڊE/y0/R13S u7YK*oؠ3ycL0~*2E?mBۚiUŝyva\W P6=9{;eo7 b~)>~-Zp8Hs'"B6R~3߫$/MQQ bHwܶ՟K}e._NV M]7CjB4: ayYw.3*W: H!3{wD MT—?#u54Q[֋>C'r} .ihBilYѳBh3S-X$0TGSX$jRD8v@xbuKY.ނK"eP""Bb/22u=-"%M4 3H7"WCS؜_'J:1ZXvsM,.o:ͱ,M"Jy?I4(7dxܞ>6 8"TztgQ\ MD[:rW0 MSG'Q7:vƸ7[E;"sJ'D6++#:F==qn< m4i4B-N% Lcg 1-WNJnf]N8->] qp%>{IhCp96TC;a]Lkhd Yk\Hm?PK w8VV'͒>/edu/harvard/hul/ois/jhove/viewer/jhove-logo.gifU8U?ٮ=."DIꐽBޣcؕHJKfv߿999.>`,oJ^sh5@&@ F  @ !0ҙ @ 0 @#(`@PFPPaaddd:dd2(y%"0D JC2yA  (bz A $ 0 ءrB9! A@)M!QAAC @ D1Gv܎|"@0L`J8# BGQXB C0(c(5B0vJA`x(E$R"(y`03FQaQ$Y9m&rPR$(^@JG;@.Cv7AlBQ@HVC!P萑)A@(B%(bB$P'!H-YyXy(e9ʗ@&@F!&/Ki?]¤ܨz Ogne75v*4Vks͐Ծ+6īGW1}\ &w[.߈Zis[DnSȴt)50l Ņ$ fXłoZqV?tN) yK F@ZLho]t3yV ^anFQki> L;{^_x;YzmVR\7էXH0Az&q+etlJEu'cNy+r\k!)g?DHzWхA4iR%ipฤVm@Mp΄B{99J9rK) v63HV>_ 8'KG zt=`xAkV5VJTbP4Sy ?Թ׍}7l_Zt%"Ү<1 {LF)g*Mp5%VG3q_)ղCּLӨКy/~Mgd\qUxC05[Y+m~h:Y~#RNOoi9z+]+-i02{Dayd;Np$ZXlT]#CFS{ާ7|BL'ғ e[QV'XHke + >ye3hSŒTweg(>~q9h^lhMUIKr19m4 1N64Rښ{}m+EeЃgsW~į K_g ٝM&\nv V>~A ?9uFaW E~ڙ$eݾбF\%l]wo_F-yeBSoG9DY>*AR_")QYfR>bS-jk` JVhrU+ϙo m4UH%WXnN1f)g  mϸHл2dx)M.rFfURyd6 Z{S?.&cV>Ke+5q4;:19mCV;.9dQ-W޸;SR964MYY˞tKM~`F"~[' ߍ|q,?Zp މ013|d2 g ?)+iˠ\kJˊ_+ Y,nrbQ[3f%;.! \gP9[L.Р"Qoa3Nh~ ~/ft62>袮tJQzzaoǀ]8R޳z3Rff67ڧBqj]RUێ+7&wzgkߝflKp~Fx\L`gh) =VeyϦtV-CݷOi6˟O ٝqD+/6gtwx'Cs"lve_}DbT󆋩IF,Zl5up mҋ *ED9ՈIj;OA!`llzi =-`UHS< Dt7,L}NҰ9A*@S>f_\;E5?NGE{Me ]J ^>\LYIIw!C!7fkP\J[8۶ʫw*U+~tZӼ;ž~̮4@Pxi7ONVϓϥ] S++ HWzUIlÝa]mzz$M\ӵX9e&,+J^2-Hxdd يH˄%HX{JEV׋U=gᣦ"P׽ZZ]E ) k|1eS%XL#[6.+xUh]} Oܭ5mY?ngX;Cbk^ٯ(e]  j#ɑ[`׷>K3.hҐy}o!^}9dTqThіCCO؏;3%JVeޒ@FUbPcOɖuU)-8Zuc0S\u_tv3j+@)3.QV" ӍdR9;S-GLI,n"ktuqbC+=lJP< v~-U rӴ GTv&=yEKZ>zz/*B͛VR8e6:FzL}}&sF0E˧&"]2̘_|Tbmr;ٙHV30QQIeuo^v -zusBe*!oZ>=$y/jLA+l Y1qNEy`RBq%W;o6Q ze=v!ڃ*(K"x]q~:ܚvlդ>ۮW)7}rQ'!f5`q%c$]TnȚ/eĊQdBzgFGiWSaqxv4{(ƚ.h*8UgWf>.^OY1ȝ=? tKQ"VNUb"$Mٔ=w;,GZK<L\ެ"U&eNs u % -n߿a!X.5ޮIhl(Զ4Uu>qGmgIzRDXCufqwmNE3N8x y^sji,S̨QUMQ_ xƗ@)qõo5jSBQH*./Urz-JGrCRm8_. .=Tconq̱ CT)D;bN}uK2[$b7GŇ*ٰ3YIaJ+Q+ Rv.8rOW AMETA-INF/PK H|$>-:+META-INF/MANIFEST.MFPK H|$>؄2 HJhoveView.classPK |$>Aedu/PK |$> Aedu/harvard/PK |$>Aedu/harvard/hul/PK |$>A! edu/harvard/hul/ois/PK G|$>AS edu/harvard/hul/ois/jhove/PK E|$>455 edu/harvard/hul/ois/jhove/AESAudioMetadata$Face.classPK E|$>D!9 edu/harvard/hul/ois/jhove/AESAudioMetadata$FaceImpl.classPK E|$>4;<edu/harvard/hul/ois/jhove/AESAudioMetadata$FaceRegion.classPK E|$>D?edu/harvard/hul/ois/jhove/AESAudioMetadata$FaceRegionImpl.classPK E|$>-59=edu/harvard/hul/ois/jhove/AESAudioMetadata$FormatRegion.classPK E|$>Aedu/harvard/hul/ois/jhove/AESAudioMetadata$FormatRegionImpl.classPK E|$>#sK9edu/harvard/hul/ois/jhove/AESAudioMetadata$TimeDesc.classPK E|$>=edu/harvard/hul/ois/jhove/AESAudioMetadata$TimeDescImpl.classPK E|$>m0edu/harvard/hul/ois/jhove/AESAudioMetadata.classPK E|$>%$edu/harvard/hul/ois/jhove/Agent.classPK G|$>tv)F&edu/harvard/hul/ois/jhove/AgentType.classPK E|$>l9&5.(edu/harvard/hul/ois/jhove/AnalogDigitalFlagType.classPK E|$> ndA#)edu/harvard/hul/ois/jhove/App.classPK G|$>=o2+edu/harvard/hul/ois/jhove/ByteArrayXMPSource.classPK E|$>=3j(.edu/harvard/hul/ois/jhove/Callback.classPK E|$>1~(.edu/harvard/hul/ois/jhove/Checksum.classPK E|$>*3x0edu/harvard/hul/ois/jhove/ChecksumInputStream.classPK E|$>.ef,3edu/harvard/hul/ois/jhove/ChecksumType.classPK E|$>4}SM8+4edu/harvard/hul/ois/jhove/Checksummer.classPK E|$>]^-9edu/harvard/hul/ois/jhove/ConfigHandler.classPK E|$>Mɨ2Aedu/harvard/hul/ois/jhove/CountedInputStream.classPK E|$><#(Dedu/harvard/hul/ois/jhove/Document.classPK E|$>Jt@t,Fedu/harvard/hul/ois/jhove/DocumentType.classPK E|$>g $Hedu/harvard/hul/ois/jhove/Dump.classPK E|$>#/Kedu/harvard/hul/ois/jhove/EnumerationType.classPK E|$>H{,Ledu/harvard/hul/ois/jhove/ErrorMessage.classPK G|$>ܟ1 Nedu/harvard/hul/ois/jhove/ExternalSignature.classPK E|$> BbOedu/harvard/hul/ois/jhove/HandlerBase$SynchronizedDateFormat.classPK E|$>ǝQ 9+Pedu/harvard/hul/ois/jhove/HandlerBase.classPK E|$>7_L*]edu/harvard/hul/ois/jhove/Identifier.classPK E|$>2eDP.z_edu/harvard/hul/ois/jhove/IdentifierType.classPK E|$>D$+ bedu/harvard/hul/ois/jhove/InfoMessage.classPK E|$>dGS}%1:cedu/harvard/hul/ois/jhove/InternalSignature.classPK E|$>E$+%eedu/harvard/hul/ois/jhove/JhoveBase$1.classPK E|$>HhX?eedu/harvard/hul/ois/jhove/JhoveBase$NaiveHostnameVerifier.classPK E|$>mO;Agedu/harvard/hul/ois/jhove/JhoveBase$RelaxedX509TrustManager.classPK E|$>\}UO.edu/harvard/hul/ois/jhove/JhoveException.classPK E|$> o`(edu/harvard/hul/ois/jhove/MacStuff.classPK E|$>'edu/harvard/hul/ois/jhove/Message.classPK E|$>ʫbB&eedu/harvard/hul/ois/jhove/Module.classPK E|$>M|&`7*Zedu/harvard/hul/ois/jhove/ModuleBase.classPK E|$>"l T1edu/harvard/hul/ois/jhove/NisoImageMetadata.classPK E|$>~Z0kedu/harvard/hul/ois/jhove/ObjectIdentifier.classPK E|$>v2#v-~edu/harvard/hul/ois/jhove/OutputHandler.classPK E|$>TM> (edu/harvard/hul/ois/jhove/Property.classPK E|$> T-edu/harvard/hul/ois/jhove/PropertyArity.classPK E|$>Uh8edu/harvard/hul/ois/jhove/PropertyPath$PropertyKey.classPK E|$>2,edu/harvard/hul/ois/jhove/PropertyPath.classPK E|$>sϓ,edu/harvard/hul/ois/jhove/PropertyType.classPK E|$>l).edu/harvard/hul/ois/jhove/RAFInputStream.classPK E|$>2Fr+edu/harvard/hul/ois/jhove/RFC1766Lang.classPK E|$>i[(edu/harvard/hul/ois/jhove/Rational.classPK E|$>ވ'^'+edu/harvard/hul/ois/jhove/RepInfo.classPK E|$>)Ozd)edu/harvard/hul/ois/jhove/Signature.classPK E|$>r;MA-Xedu/harvard/hul/ois/jhove/SignatureType.classPK E|$>(I0edu/harvard/hul/ois/jhove/SignatureUseType.classPK E|$>v.{edu/harvard/hul/ois/jhove/TextMDMetadata.classPK E|$>, 4/ edu/harvard/hul/ois/jhove/Utf8BlockMarker.classPK F|$>6"+ƒ0 edu/harvard/hul/ois/jhove/XMLWrapperStream.classPK F|$>Qo *~edu/harvard/hul/ois/jhove/XMPHandler.classPK E|$>n+)edu/harvard/hul/ois/jhove/XMPSource.classPK H|$>"Aedu/harvard/hul/ois/jhove/handler/PK G|$>=Ȣ 4edu/harvard/hul/ois/jhove/handler/AuditHandler.classPK F|$>Ð9<3'edu/harvard/hul/ois/jhove/handler/TextHandler.classPK F|$>)1Z 2"bedu/harvard/hul/ois/jhove/handler/XmlHandler.classPK G|$>(Aedu/harvard/hul/ois/jhove/handler/audit/PK F|$>>ĽSh8edu/harvard/hul/ois/jhove/handler/audit/AuditCount.classPK G|$>LF'8edu/harvard/hul/ois/jhove/handler/audit/AuditState.classPK F|$>!A.edu/harvard/hul/ois/jhove/module/PK F|$>qdo=1medu/harvard/hul/ois/jhove/module/AiffModule.classPK F|$>D_)2+edu/harvard/hul/ois/jhove/module/AsciiModule.classPK F|$>#PH7Fedu/harvard/hul/ois/jhove/module/BytestreamModule.classPK F|$>T9 $F0edu/harvard/hul/ois/jhove/module/GifModule.classPK F|$>|>1edu/harvard/hul/ois/jhove/module/HtmlModule.classPK F|$>"[C858edu/harvard/hul/ois/jhove/module/Jpeg2000Module.classPK F|$>*D:4r1~Qedu/harvard/hul/ois/jhove/module/JpegModule.classPK F|$>V"fHY0]edu/harvard/hul/ois/jhove/module/PdfModule.classPK F|$>(rj-j1edu/harvard/hul/ois/jhove/module/TiffModule.classPK F|$>fGr 0 edu/harvard/hul/ois/jhove/module/Utf8Block.classPK F|$>LC@*]21edu/harvard/hul/ois/jhove/module/Utf8Module.classPK F|$>)>=B15edu/harvard/hul/ois/jhove/module/WaveModule.classPK F|$>O,{#M0 Redu/harvard/hul/ois/jhove/module/XmlModule.classPK G|$>&Auedu/harvard/hul/ois/jhove/module/aiff/PK F|$>Y_nm7-vedu/harvard/hul/ois/jhove/module/aiff/AiffStrings.classPK G|$>l!;wedu/harvard/hul/ois/jhove/module/aiff/AnnotationChunk.classPK F|$>D\ <yedu/harvard/hul/ois/jhove/module/aiff/ApplicationChunk.classPK F|$>E`9~edu/harvard/hul/ois/jhove/module/aiff/AudioRecChunk.classPK G|$>bOz7Dedu/harvard/hul/ois/jhove/module/aiff/AuthorChunk.classPK F|$>g\.T 9edu/harvard/hul/ois/jhove/module/aiff/CommentsChunk.classPK F|$>77 edu/harvard/hul/ois/jhove/module/aiff/CommonChunk.classPK G|$>X~:edu/harvard/hul/ois/jhove/module/aiff/CopyrightChunk.classPK F|$>$5ޏedu/harvard/hul/ois/jhove/module/aiff/ExtDouble.classPK F|$>4>ȑedu/harvard/hul/ois/jhove/module/aiff/FormatVersionChunk.classPK F|$>']Rڳ@3edu/harvard/hul/ois/jhove/module/aiff/InstrumentChunk$Loop.classPK F|$> ;Dedu/harvard/hul/ois/jhove/module/aiff/InstrumentChunk.classPK F|$>|^7edu/harvard/hul/ois/jhove/module/aiff/MarkerChunk.classPK F|$>nHP5edu/harvard/hul/ois/jhove/module/aiff/MidiChunk.classPK G|$>mv52edu/harvard/hul/ois/jhove/module/aiff/NameChunk.classPK F|$>Ze6medu/harvard/hul/ois/jhove/module/aiff/SaxelChunk.classPK F|$>/ :edu/harvard/hul/ois/jhove/module/aiff/SoundDataChunk.classPK G|$>P5edu/harvard/hul/ois/jhove/module/aiff/TextChunk.classPK F|$>%Aedu/harvard/hul/ois/jhove/module/gif/PK F|$>GX5Cedu/harvard/hul/ois/jhove/module/gif/GifStrings.classPK G|$>&AUedu/harvard/hul/ois/jhove/module/html/PK F|$>n,66edu/harvard/hul/ois/jhove/module/html/CharStream.classPK F|$>l85#edu/harvard/hul/ois/jhove/module/html/DTDMapper.classPK G|$> $:Redu/harvard/hul/ois/jhove/module/html/Html3_2DocDesc.classPK F|$>_ <8medu/harvard/hul/ois/jhove/module/html/Html4DocDesc.classPK F|$>j \>edu/harvard/hul/ois/jhove/module/html/Html4StrictDocDesc.classPK F|$>K&:edu/harvard/hul/ois/jhove/module/html/Html4TFDocDesc.classPK G|$>";'@edu/harvard/hul/ois/jhove/module/html/Html4_01FrameDocDesc.classPK F|$>ڄ +ANedu/harvard/hul/ois/jhove/module/html/Html4_01StrictDocDesc.classPK F|$>c l=eedu/harvard/hul/ois/jhove/module/html/Html4_01TFDocDesc.classPK F|$>&@edu/harvard/hul/ois/jhove/module/html/Html4_01TransDocDesc.classPK G|$>V^%?Nedu/harvard/hul/ois/jhove/module/html/Html4_0FrameDocDesc.classPK F|$>D̄ @edu/harvard/hul/ois/jhove/module/html/Html4_0StrictDocDesc.classPK F|$> z8<edu/harvard/hul/ois/jhove/module/html/Html4_0TFDocDesc.classPK F|$>C#?edu/harvard/hul/ois/jhove/module/html/Html4_0TransDocDesc.classPK F|$>oxC=edu/harvard/hul/ois/jhove/module/html/HtmlAttributeDesc.classPK F|$>v :Zedu/harvard/hul/ois/jhove/module/html/HtmlCharStream.classPK F|$>܏0#7>)edu/harvard/hul/ois/jhove/module/html/HtmlDocDesc.classPK F|$>i+J 88edu/harvard/hul/ois/jhove/module/html/HtmlMetadata.classPK F|$>y;<7Bedu/harvard/hul/ois/jhove/module/html/HtmlSpecialToken.classPK F|$>my5Cedu/harvard/hul/ois/jhove/module/html/HtmlStack.classPK F|$>-#<7Gedu/harvard/hul/ois/jhove/module/html/HtmlTagDesc.classPK F|$>gL ;Oedu/harvard/hul/ois/jhove/module/html/HtmlTempTagDesc.classPK F|$>{7GQedu/harvard/hul/ois/jhove/module/html/JHAttribute.classPK F|$>= 26Sedu/harvard/hul/ois/jhove/module/html/JHCloseTag.classPK F|$>^A)ҭ5'Uedu/harvard/hul/ois/jhove/module/html/JHComment.classPK F|$>D~5'Vedu/harvard/hul/ois/jhove/module/html/JHDoctype.classPK F|$>105aWedu/harvard/hul/ois/jhove/module/html/JHElement.classPK F|$>4 6:Yedu/harvard/hul/ois/jhove/module/html/JHErrorElement.classPK G|$>& 5[edu/harvard/hul/ois/jhove/module/html/JHOpenTag.classPK F|$>} 4eedu/harvard/hul/ois/jhove/module/html/JHPCData.classPK F|$>5Pkedu/harvard/hul/ois/jhove/module/html/JHXmlDecl.classPK F|$>PJ :Aledu/harvard/hul/ois/jhove/module/html/ParseException.classPK F|$>>7#redu/harvard/hul/ois/jhove/module/html/ParseHtml$1.classPK F|$>ܳ=sedu/harvard/hul/ois/jhove/module/html/ParseHtml$JJCalls.classPK F|$>!OhFatedu/harvard/hul/ois/jhove/module/html/ParseHtml$LookaheadSuccess.classPK F|$>6/5uedu/harvard/hul/ois/jhove/module/html/ParseHtml.classPK F|$>oI=>edu/harvard/hul/ois/jhove/module/html/ParseHtmlConstants.classPK G|$>1~72ALedu/harvard/hul/ois/jhove/module/html/ParseHtmlTokenManager.classPK G|$>2fjz<edu/harvard/hul/ois/jhove/module/html/SimpleCharStream.classPK F|$>TQ1edu/harvard/hul/ois/jhove/module/html/Token.classPK G|$> z9Iedu/harvard/hul/ois/jhove/module/html/TokenMgrError.classPK w8P-4edu/harvard/hul/ois/jhove/module/html/xhtml-lat1.entPK w8B.A#7edu/harvard/hul/ois/jhove/module/html/xhtml-special.entPK w8¢ 66Redu/harvard/hul/ois/jhove/module/html/xhtml-symbol.entPK w8 wa 9Hedu/harvard/hul/ois/jhove/module/html/xhtml1-frameset.dtdPK w8:7ic7edu/harvard/hul/ois/jhove/module/html/xhtml1-strict.dtdPK w8n&o}=edu/harvard/hul/ois/jhove/module/html/xhtml1-transitional.dtdPK w8C+AgBV6'edu/harvard/hul/ois/jhove/module/html/xhtml11-flat.dtdPK G|$>%AǏedu/harvard/hul/ois/jhove/module/iff/PK F|$>_!0 edu/harvard/hul/ois/jhove/module/iff/Chunk.classPK F|$>Pb6yedu/harvard/hul/ois/jhove/module/iff/ChunkHeader.classPK G|$>T_x5edu/harvard/hul/ois/jhove/module/iff/Superchunk.classPK G|$>&Aܘedu/harvard/hul/ois/jhove/module/jpeg/PK G|$>Dׯ^= edu/harvard/hul/ois/jhove/module/jpeg/ArithConditioning.classPK G|$><^+4*edu/harvard/hul/ois/jhove/module/jpeg/JpegExif.classPK G|$>\ 7edu/harvard/hul/ois/jhove/module/jpeg/JpegStrings.classPK G|$>HYL=edu/harvard/hul/ois/jhove/module/jpeg/QuantizationTable.classPK G|$> Op=/edu/harvard/hul/ois/jhove/module/jpeg/SRS.classPK G|$><բa1@edu/harvard/hul/ois/jhove/module/jpeg/Spiff.classPK F|$>cǂ 41edu/harvard/hul/ois/jhove/module/jpeg/SpiffDir.classPK F|$>=>2edu/harvard/hul/ois/jhove/module/jpeg/Tiling.classPK G|$>*AJedu/harvard/hul/ois/jhove/module/jpeg2000/PK G|$>ڭ>edu/harvard/hul/ois/jhove/module/jpeg2000/AssociationBox.classPK G|$>l77edu/harvard/hul/ois/jhove/module/jpeg2000/BPCCBox.classPK G|$>O}( ?edu/harvard/hul/ois/jhove/module/jpeg2000/BinaryFilterBox.classPK F|$>e9edu/harvard/hul/ois/jhove/module/jpeg2000/BoxHeader.classPK G|$>l 9edu/harvard/hul/ois/jhove/module/jpeg2000/BoxHolder.classPK G|$>ލzt @edu/harvard/hul/ois/jhove/module/jpeg2000/COCMarkerSegment.classPK G|$>h!8 @bedu/harvard/hul/ois/jhove/module/jpeg2000/CODMarkerSegment.classPK G|$>@edu/harvard/hul/ois/jhove/module/jpeg2000/CRGMarkerSegment.classPK G|$>1 aLDedu/harvard/hul/ois/jhove/module/jpeg2000/CaptureResolutionBox.classPK G|$>.c} =edu/harvard/hul/ois/jhove/module/jpeg2000/ChannelDefBox.classPK G|$>*NKe:edu/harvard/hul/ois/jhove/module/jpeg2000/Codestream.classPK G|$>rb^ Cedu/harvard/hul/ois/jhove/module/jpeg2000/CodestreamHeaderBox.classPK G|$>hB @edu/harvard/hul/ois/jhove/module/jpeg2000/CodestreamRegBox.classPK G|$>ET=nedu/harvard/hul/ois/jhove/module/jpeg2000/ColorGroupBox.classPK G|$>2s<edu/harvard/hul/ois/jhove/module/jpeg2000/ColorSpecBox.classPK G|$>HX DDedu/harvard/hul/ois/jhove/module/jpeg2000/CommentMarkerSegment.classPK G|$>@}c>k edu/harvard/hul/ois/jhove/module/jpeg2000/CompOptionsBox.classPK G|$>! ?M edu/harvard/hul/ois/jhove/module/jpeg2000/ComponentMapBox.classPK G|$>Ĩ) A]edu/harvard/hul/ois/jhove/module/jpeg2000/ComposLayerHdrBox.classPK G|$>Q?X >edu/harvard/hul/ois/jhove/module/jpeg2000/CompositionBox.classPK G|$>);>edu/harvard/hul/ois/jhove/module/jpeg2000/ContCodestream.classPK G|$>醦`aA%edu/harvard/hul/ois/jhove/module/jpeg2000/ContCodestreamBox.classPK G|$>JgJ ;V)edu/harvard/hul/ois/jhove/module/jpeg2000/CrossRefBox.classPK G|$>6-?.edu/harvard/hul/ois/jhove/module/jpeg2000/DDResolutionBox.classPK G|$>j\?c2edu/harvard/hul/ois/jhove/module/jpeg2000/DataEntryURLBox.classPK G|$>}!:7edu/harvard/hul/ois/jhove/module/jpeg2000/DefaultBox.classPK G|$>RQPD8edu/harvard/hul/ois/jhove/module/jpeg2000/DefaultMarkerSegment.classPK G|$>^?H:edu/harvard/hul/ois/jhove/module/jpeg2000/DesiredReproBox.classPK G|$> 7S?-=edu/harvard/hul/ois/jhove/module/jpeg2000/DigSignatureBox.classPK G|$>АY. ;Eedu/harvard/hul/ois/jhove/module/jpeg2000/FileTypeBox.classPK G|$>\CKedu/harvard/hul/ois/jhove/module/jpeg2000/FragmentInputStream.classPK G|$>)=3I?Nedu/harvard/hul/ois/jhove/module/jpeg2000/FragmentListBox.classPK G|$>GE @Sedu/harvard/hul/ois/jhove/module/jpeg2000/FragmentTableBox.classPK G|$>Ā#K7Xedu/harvard/hul/ois/jhove/module/jpeg2000/GTSOBox.classPK G|$>rM)un6x[edu/harvard/hul/ois/jhove/module/jpeg2000/IPRBox.classPK G|$>`7ݻi >^edu/harvard/hul/ois/jhove/module/jpeg2000/ImageHeaderBox.classPK G|$>=:` Adedu/harvard/hul/ois/jhove/module/jpeg2000/InstructionSetBox.classPK G|$>- 6ojedu/harvard/hul/ois/jhove/module/jpeg2000/JP2Box.classPK G|$>hO̥ <vedu/harvard/hul/ois/jhove/module/jpeg2000/JP2HeaderBox.classPK G|$>TP{P :|edu/harvard/hul/ois/jhove/module/jpeg2000/JP2Strings.classPK G|$>j-8vedu/harvard/hul/ois/jhove/module/jpeg2000/LabelBox.classPK F|$>ĎY5:edu/harvard/hul/ois/jhove/module/jpeg2000/MainOrTile.classPK G|$>"ĚW6edu/harvard/hul/ois/jhove/module/jpeg2000/Marker.classPK G|$>Gs=edu/harvard/hul/ois/jhove/module/jpeg2000/MarkerSegment.classPK G|$>\w=ʏedu/harvard/hul/ois/jhove/module/jpeg2000/NumberListBox.classPK G|$>$ :edu/harvard/hul/ois/jhove/module/jpeg2000/OpacityBox.classPK G|$>|Ib@edu/harvard/hul/ois/jhove/module/jpeg2000/PLMMarkerSegment.classPK G|$>}<_@edu/harvard/hul/ois/jhove/module/jpeg2000/PLTMarkerSegment.classPK G|$>RvU @edu/harvard/hul/ois/jhove/module/jpeg2000/POCMarkerSegment.classPK G|$>ǥ*@ledu/harvard/hul/ois/jhove/module/jpeg2000/PPMMarkerSegment.classPK G|$>)@edu/harvard/hul/ois/jhove/module/jpeg2000/PPTMarkerSegment.classPK G|$> u, :edu/harvard/hul/ois/jhove/module/jpeg2000/PaletteBox.classPK G|$>J)Y^ @uedu/harvard/hul/ois/jhove/module/jpeg2000/QCCMarkerSegment.classPK G|$>uC.@,edu/harvard/hul/ois/jhove/module/jpeg2000/QCDMarkerSegment.classPK G|$>ƗG@edu/harvard/hul/ois/jhove/module/jpeg2000/RGNMarkerSegment.classPK G|$>Q4c6edu/harvard/hul/ois/jhove/module/jpeg2000/ROIBox.classPK G|$> |c E)edu/harvard/hul/ois/jhove/module/jpeg2000/ReaderRequirementsBox.classPK G|$>+-=edu/harvard/hul/ois/jhove/module/jpeg2000/ResolutionBox.classPK G|$>Q1 @$edu/harvard/hul/ois/jhove/module/jpeg2000/SIZMarkerSegment.classPK G|$>§M@edu/harvard/hul/ois/jhove/module/jpeg2000/SOTMarkerSegment.classPK G|$>0ݨ\ @edu/harvard/hul/ois/jhove/module/jpeg2000/TLMMarkerSegment.classPK G|$>RTY4redu/harvard/hul/ois/jhove/module/jpeg2000/Tile.classPK G|$>l'tr8edu/harvard/hul/ois/jhove/module/jpeg2000/TilePart.classPK G|$>uGA{edu/harvard/hul/ois/jhove/module/jpeg2000/TopLevelBoxHolder.classPK G|$>Ӕ 7edu/harvard/hul/ois/jhove/module/jpeg2000/UUIDBox.classPK G|$>VsR ;edu/harvard/hul/ois/jhove/module/jpeg2000/UUIDInfoBox.classPK G|$> H#;edu/harvard/hul/ois/jhove/module/jpeg2000/UUIDListBox.classPK G|$>lzz6Medu/harvard/hul/ois/jhove/module/jpeg2000/XMLBox.classPK G|$>%Aedu/harvard/hul/ois/jhove/module/pdf/PK G|$>/P N/3edu/harvard/hul/ois/jhove/module/pdf/AProfile.classPK G|$>xS9 edu/harvard/hul/ois/jhove/module/pdf/AProfileLevelA.classPK G|$>+3 edu/harvard/hul/ois/jhove/module/pdf/ArrayEnd.classPK G|$>0\5edu/harvard/hul/ois/jhove/module/pdf/ArrayStart.classPK G|$>zѨ>cedu/harvard/hul/ois/jhove/module/pdf/Ascii85FilterStream.classPK G|$> ?gedu/harvard/hul/ois/jhove/module/pdf/AsciiHexFilterStream.classPK G|$>1 ݫ2medu/harvard/hul/ois/jhove/module/pdf/Comment.classPK G|$>!&wFov 9Sedu/harvard/hul/ois/jhove/module/pdf/CrossRefStream.classPK G|$>fQ,6edu/harvard/hul/ois/jhove/module/pdf/Destination.classPK G|$> R8edu/harvard/hul/ois/jhove/module/pdf/DictionaryEnd.classPK G|$>1 :edu/harvard/hul/ois/jhove/module/pdf/DictionaryStart.classPK F|$>2a 2iedu/harvard/hul/ois/jhove/module/pdf/DocNode.classPK G|$>hCY<#edu/harvard/hul/ois/jhove/module/pdf/FileSpecification.classPK G|$>~@*8%edu/harvard/hul/ois/jhove/module/pdf/FileTokenizer.classPK F|$>sW1<)edu/harvard/hul/ois/jhove/module/pdf/Filter.classPK G|$>*6_+edu/harvard/hul/ois/jhove/module/pdf/Hexadecimal.classPK G|$>u"2P,edu/harvard/hul/ois/jhove/module/pdf/Keyword.classPK G|$>a 8<6-edu/harvard/hul/ois/jhove/module/pdf/LinearizedProfile.classPK G|$>LW;2<4edu/harvard/hul/ois/jhove/module/pdf/Literal.classPK G|$>Y)|/Dedu/harvard/hul/ois/jhove/module/pdf/Name.classPK F|$>S&N 7.Fedu/harvard/hul/ois/jhove/module/pdf/NameTreeNode.classPK F|$>CHJ2Ledu/harvard/hul/ois/jhove/module/pdf/Numeric.classPK F|$>:hV' 7Nedu/harvard/hul/ois/jhove/module/pdf/ObjectStream.classPK F|$>@r8Tedu/harvard/hul/ois/jhove/module/pdf/PageLabelNode.classPK F|$> 5]edu/harvard/hul/ois/jhove/module/pdf/PageObject.classPK G|$>@d;K7cedu/harvard/hul/ois/jhove/module/pdf/PageTreeNode.classPK F|$>R 14|3|uedu/harvard/hul/ois/jhove/module/pdf/PdfArray.classPK F|$>s_k-8xedu/harvard/hul/ois/jhove/module/pdf/PdfDictionary.classPK F|$>d7R{edu/harvard/hul/ois/jhove/module/pdf/PdfException.classPK G|$>"/4 > }edu/harvard/hul/ois/jhove/module/pdf/PdfFlateInputStream.classPK G|$>qf9edu/harvard/hul/ois/jhove/module/pdf/PdfIndirectObj.classPK F|$>ƙB*->edu/harvard/hul/ois/jhove/module/pdf/PdfInvalidException.classPK G|$>ZW/4@edu/harvard/hul/ois/jhove/module/pdf/PdfMalformedException.classPK F|$>̚A4edu/harvard/hul/ois/jhove/module/pdf/PdfObject.classPK G|$>_K 5edu/harvard/hul/ois/jhove/module/pdf/PdfProfile.classPK F|$>*oJ*:\edu/harvard/hul/ois/jhove/module/pdf/PdfSimpleObject.classPK F|$> 4edu/harvard/hul/ois/jhove/module/pdf/PdfStream.classPK G|$>y5edu/harvard/hul/ois/jhove/module/pdf/PdfStrings.classPK G|$>wM7oedu/harvard/hul/ois/jhove/module/pdf/PdfXMPSource.classPK G|$>`@edu/harvard/hul/ois/jhove/module/pdf/RunLengthFilterStream.classPK F|$>~00edu/harvard/hul/ois/jhove/module/pdf/State.classPK G|$>-59!edu/harvard/hul/ois/jhove/module/pdf/StdStructTypes.classPK F|$>~ 1edu/harvard/hul/ois/jhove/module/pdf/Stream.classPK G|$>ރb<Ƭedu/harvard/hul/ois/jhove/module/pdf/StreamInputStream.classPK G|$> @:2edu/harvard/hul/ois/jhove/module/pdf/StreamTokenizer.classPK G|$>hL(<Tedu/harvard/hul/ois/jhove/module/pdf/StringValuedToken.classPK G|$>8t&> :;ȳedu/harvard/hul/ois/jhove/module/pdf/StructureElement.classPK G|$>0_#8_edu/harvard/hul/ois/jhove/module/pdf/StructureTree.classPK G|$>^D68edu/harvard/hul/ois/jhove/module/pdf/TaggedProfile.classPK F|$>Z̫&0edu/harvard/hul/ois/jhove/module/pdf/Token.classPK F|$>!'4edu/harvard/hul/ois/jhove/module/pdf/Tokenizer.classPK G|$>tQ h4edu/harvard/hul/ois/jhove/module/pdf/X1Profile.classPK G|$>Y5edu/harvard/hul/ois/jhove/module/pdf/X1aProfile.classPK G|$>ܚ 4Hedu/harvard/hul/ois/jhove/module/pdf/X2Profile.classPK G|$>8H4=edu/harvard/hul/ois/jhove/module/pdf/X3Profile.classPK G|$>Xu3 7=edu/harvard/hul/ois/jhove/module/pdf/XProfileBase.classPK G|$>&Aedu/harvard/hul/ois/jhove/module/tiff/PK F|$>NZE3 edu/harvard/hul/ois/jhove/module/tiff/ExifIFD.classPK F|$>#̱% ;#6G"edu/harvard/hul/ois/jhove/module/tiff/GPSInfoIFD.classPK G|$>O{4o:/edu/harvard/hul/ois/jhove/module/tiff/GeoTiffStrings.classPK F|$> 7?Ledu/harvard/hul/ois/jhove/module/tiff/GlobalParametersIFD.classPK F|$>U_,/edu/harvard/hul/ois/jhove/module/tiff/IFD.classPK F|$>UR?edu/harvard/hul/ois/jhove/module/tiff/InteroperabilityIFD.classPK F|$>XƩ[9edu/harvard/hul/ois/jhove/module/tiff/TiffException.classPK G|$>+]Rl6Vedu/harvard/hul/ois/jhove/module/tiff/TiffFXBase.classPK G|$>dbXI3edu/harvard/hul/ois/jhove/module/tiff/TiffIFD.classPK F|$>\97 edu/harvard/hul/ois/jhove/module/tiff/TiffProfile.classPK G|$>[ӎ7=" edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassB.classPK G|$>Ҝ' =% edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassF.classPK G|$>ok->=+ edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassG.classPK G|$>SJ>^. edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassIT.classPK G|$> U@0 edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITBL.classPK G|$>֭?B3 edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITBLP1.classPK G|$>S\@7 edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITBP.classPK G|$>g)TZB|: edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITBPP1.classPK G|$>U0lX_B0> edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITBPP2.classPK G|$>@A edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITCT.classPK G|$>BE edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITCTP1.classPK G|$>&JBI edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITCTP2.classPK G|$>FQ2@ M edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITFP.classPK G|$>*OBP edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITFPP1.classPK G|$>(ASBT edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITFPP2.classPK G|$>@Y edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITHC.classPK G|$>KRYBm\ edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITHCP1.classPK G|$>SfAB[` edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITHCP2.classPK G|$>\@c edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITLW.classPK G|$>;B;g edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITLWP1.classPK G|$>\Bj edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITLWP2.classPK G|$>C1ɒ@m edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITMP.classPK G|$>eHΣBp edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITMPP1.classPK G|$>KQBt edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITMPP2.classPK G|$>rgC@x edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITSD.classPK G|$>wTNB| edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITSDP2.classPK G|$>4g2= edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassP.classPK G|$>U ^u=P edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassR.classPK G|$>| = edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassY.classPK G|$>K:Y:# edu/harvard/hul/ois/jhove/module/tiff/TiffProfileDLF.classPK G|$>IUrW< edu/harvard/hul/ois/jhove/module/tiff/TiffProfileDLFBW.classPK G|$>}ebj> edu/harvard/hul/ois/jhove/module/tiff/TiffProfileDLFGray.classPK F|$>J3?d edu/harvard/hul/ois/jhove/module/tiff/TiffProfileDNGThumb.classPK G|$>g6z 9 edu/harvard/hul/ois/jhove/module/tiff/TiffProfileEP.classPK G|$>k; edu/harvard/hul/ois/jhove/module/tiff/TiffProfileExif.classPK F|$>#m> edu/harvard/hul/ois/jhove/module/tiff/TiffProfileExifIFD.classPK F|$> ,[@t edu/harvard/hul/ois/jhove/module/tiff/TiffProfileExifThumb.classPK G|$>`P58H: edu/harvard/hul/ois/jhove/module/tiff/TiffProfileFXC.classPK G|$>ߡ :F edu/harvard/hul/ois/jhove/module/tiff/TiffProfileFXF.classPK G|$>7PҚ:? edu/harvard/hul/ois/jhove/module/tiff/TiffProfileFXJ.classPK G|$>0LC:1 edu/harvard/hul/ois/jhove/module/tiff/TiffProfileFXL.classPK G|$>q Q: edu/harvard/hul/ois/jhove/module/tiff/TiffProfileFXM.classPK G|$>{WA: edu/harvard/hul/ois/jhove/module/tiff/TiffProfileFXS.classPK G|$>[4> edu/harvard/hul/ois/jhove/module/tiff/TiffProfileGeoTIFF.classPK G|$>B&A edu/harvard/hul/ois/jhove/module/tiff/TiffProfilePagemaker6.classPK G|$>u@ edu/harvard/hul/ois/jhove/module/tiff/TiffProfilePhotoshop.classPK G|$>]"$ >$ edu/harvard/hul/ois/jhove/module/tiff/TiffProfileRFC1314.classPK G|$>7WJI4 edu/harvard/hul/ois/jhove/module/tiff/TiffTags.classPK G|$>&A& edu/harvard/hul/ois/jhove/module/wave/PK G|$>O(i!5j edu/harvard/hul/ois/jhove/module/wave/AXMLChunk.classPK G|$>?.H > edu/harvard/hul/ois/jhove/module/wave/AssocDataListChunk.classPK G|$>{b9L = edu/harvard/hul/ois/jhove/module/wave/BroadcastExtChunk.classPK G|$>[Yr5 edu/harvard/hul/ois/jhove/module/wave/CartChunk.classPK G|$>P4 edu/harvard/hul/ois/jhove/module/wave/CueChunk.classPK G|$>d)K5 edu/harvard/hul/ois/jhove/module/wave/DataChunk.classPK F|$>|rSr4 edu/harvard/hul/ois/jhove/module/wave/ExifInfo.classPK G|$>y%>c edu/harvard/hul/ois/jhove/module/wave/ExifMakerNoteChunk.classPK G|$>l7 ; edu/harvard/hul/ois/jhove/module/wave/ExifStringChunk.classPK G|$>ͻ=4@ edu/harvard/hul/ois/jhove/module/wave/ExifUserCommentChunk.classPK G|$>ŀ3< edu/harvard/hul/ois/jhove/module/wave/ExifVersionChunk.classPK G|$>h "s5 edu/harvard/hul/ois/jhove/module/wave/FactChunk.classPK G|$>43k7 edu/harvard/hul/ois/jhove/module/wave/FormatChunk.classPK G|$>; edu/harvard/hul/ois/jhove/module/wave/InstrumentChunk.classPK G|$>rL 6W edu/harvard/hul/ois/jhove/module/wave/LabelChunk.classPK G|$>~<2 edu/harvard/hul/ois/jhove/module/wave/LabeledTextChunk.classPK G|$>>vvs!<"% edu/harvard/hul/ois/jhove/module/wave/LinkChunkHandler.classPK G|$>U9( edu/harvard/hul/ois/jhove/module/wave/ListInfoChunk.classPK G|$> S =/ edu/harvard/hul/ois/jhove/module/wave/ListInfoTextChunk.classPK G|$>Ifi55 edu/harvard/hul/ois/jhove/module/wave/MpegChunk.classPK G|$>59 edu/harvard/hul/ois/jhove/module/wave/NoteChunk.classPK G|$>ٵ,, =; edu/harvard/hul/ois/jhove/module/wave/PeakEnvelopeChunk.classPK G|$>qq 7'B edu/harvard/hul/ois/jhove/module/wave/SampleChunk.classPK G|$>e ;AG edu/harvard/hul/ois/jhove/module/wave/SimpleTextChunk.classPK G|$>Kl !7PJ edu/harvard/hul/ois/jhove/module/wave/WaveStrings.classPK G|$>%A] edu/harvard/hul/ois/jhove/module/xml/PK G|$>)+l:] edu/harvard/hul/ois/jhove/module/xml/XhtmlProcessing.classPK G|$>6PD R9wf edu/harvard/hul/ois/jhove/module/xml/XmlDeclHandler.classPK G|$>~O 8h edu/harvard/hul/ois/jhove/module/xml/XmlDeclStream.classPK G|$>z(7M<|p edu/harvard/hul/ois/jhove/module/xml/XmlLexicalHandler.classPK G|$>GzS ;#s edu/harvard/hul/ois/jhove/module/xml/XmlModuleHandler.classPK G|$>!A} edu/harvard/hul/ois/jhove/viewer/PK G|$>>[[6~ edu/harvard/hul/ois/jhove/viewer/AppInfoWindow$1.classPK G|$>@4 edu/harvard/hul/ois/jhove/viewer/AppInfoWindow.classPK G|$>([5 edu/harvard/hul/ois/jhove/viewer/ConfigWindow$1.classPK G|$>Y\j6k edu/harvard/hul/ois/jhove/viewer/ConfigWindow$10.classPK G|$>Q/ 6) edu/harvard/hul/ois/jhove/viewer/ConfigWindow$11.classPK G|$>WB5 edu/harvard/hul/ois/jhove/viewer/ConfigWindow$2.classPK G|$>f*xpWB50 edu/harvard/hul/ois/jhove/viewer/ConfigWindow$3.classPK G|$>,^ 5ڑ edu/harvard/hul/ois/jhove/viewer/ConfigWindow$4.classPK G|$>ЊYC5: edu/harvard/hul/ois/jhove/viewer/ConfigWindow$5.classPK G|$>odYC5 edu/harvard/hul/ois/jhove/viewer/ConfigWindow$6.classPK G|$>KU>5 edu/harvard/hul/ois/jhove/viewer/ConfigWindow$7.classPK G|$>-U>5: edu/harvard/hul/ois/jhove/viewer/ConfigWindow$8.classPK G|$>}*VA5 edu/harvard/hul/ois/jhove/viewer/ConfigWindow$9.classPK G|$>}D)3 edu/harvard/hul/ois/jhove/viewer/ConfigWindow.classPK G|$>r3 edu/harvard/hul/ois/jhove/viewer/ConfigWriter.classPK G|$>z5f3 edu/harvard/hul/ois/jhove/viewer/InfoWindow$1.classPK G|$>Ln4. 19 edu/harvard/hul/ois/jhove/viewer/InfoWindow.classPK G|$>]='4 edu/harvard/hul/ois/jhove/viewer/JhoveWindow$1.classPK G|$>,S95 edu/harvard/hul/ois/jhove/viewer/JhoveWindow$10.classPK G|$>V H%4A edu/harvard/hul/ois/jhove/viewer/JhoveWindow$2.classPK G|$> 4O edu/harvard/hul/ois/jhove/viewer/JhoveWindow$3.classPK G|$>!Z@4 edu/harvard/hul/ois/jhove/viewer/JhoveWindow$4.classPK G|$>^V-\?4 edu/harvard/hul/ois/jhove/viewer/JhoveWindow$5.classPK G|$>W]L4z edu/harvard/hul/ois/jhove/viewer/JhoveWindow$6.classPK G|$>.CR84) edu/harvard/hul/ois/jhove/viewer/JhoveWindow$7.classPK G|$> C 4 edu/harvard/hul/ois/jhove/viewer/JhoveWindow$8.classPK G|$>a@R84, edu/harvard/hul/ois/jhove/viewer/JhoveWindow$9.classPK G|$>>WoJ edu/harvard/hul/ois/jhove/viewer/JhoveWindow$InvisibleFilenameFilter.classPK G|$>$BF> edu/harvard/hul/ois/jhove/viewer/JhoveWindow$ParseThread.classPK G|$>S |@2I edu/harvard/hul/ois/jhove/viewer/JhoveWindow.classPK G|$>w641 edu/harvard/hul/ois/jhove/viewer/MainScreen.classPK G|$>Cnc99 edu/harvard/hul/ois/jhove/viewer/ModuleInfoWindow$1.classPK G|$>ț^x!7 edu/harvard/hul/ois/jhove/viewer/ModuleInfoWindow.classPK G|$>VD4 edu/harvard/hul/ois/jhove/viewer/NoConfAlert$1.classPK G|$>X2 edu/harvard/hul/ois/jhove/viewer/NoConfAlert.classPK G|$>[93q edu/harvard/hul/ois/jhove/viewer/NumericField.classPK G|$>#%\y4A edu/harvard/hul/ois/jhove/viewer/PrefsWindow$1.classPK G|$>L]y4 edu/harvard/hul/ois/jhove/viewer/PrefsWindow$2.classPK G|$>p|WFF edu/harvard/hul/ois/jhove/viewer/PrefsWindow$PrefsWindowListener.classPK G|$>V;2H edu/harvard/hul/ois/jhove/viewer/PrefsWindow.classPK G|$>\ 5 edu/harvard/hul/ois/jhove/viewer/ProgressWindow.classPK G|$>k*p2" edu/harvard/hul/ois/jhove/viewer/RepTreeRoot.classPK G|$>K摼= 2M edu/harvard/hul/ois/jhove/viewer/ViewHandler.classPK G|$>`3S edu/harvard/hul/ois/jhove/viewer/ViewWindow$1.classPK G|$>~Fa3mU edu/harvard/hul/ois/jhove/viewer/ViewWindow$2.classPK G|$>tq1W edu/harvard/hul/ois/jhove/viewer/ViewWindow.classPK w8VV'͒>/9_ edu/harvard/hul/ois/jhove/viewer/jhove-logo.gifPK I|$> META-INF/PK H|$>META-INF/MANIFEST.MFUA09Dk(VTvHwɿߩ f{|jg.Sqw d)8?+id唳E@+u9)Bt5m1DŽ-?8?MlC~ BBTG9UJɚ3ξlib;tOZΒ,#a'as86{ $ MŠZ_5g:bX=%~PK |$>edu/PK |$> edu/harvard/PK |$>edu/harvard/hul/PK |$>edu/harvard/hul/ois/PK G|$>edu/harvard/hul/ois/jhove/PK H|$>"edu/harvard/hul/ois/jhove/handler/PK G|$>=Ȣ 4edu/harvard/hul/ois/jhove/handler/AuditHandler.class xSerI^- M1@Rz j(BMѼpxxzuUk/Y=[^cOW{IҀ?x;dxFgݰ+2|W:ߐya /"÷yxxI{ʦ2# ^@~셟O=D/x~2)aohd_7X5ɴ7xxѷxxѷxx};K%?d Lށy w~CHَH DBN]L*Qb,/B2eqT7chU {'y 0DG҆qSei&Z+k2)SU=!Hۚts.JַKW.oDp 1vĢ1k[ [}ڌa5q2fS#kÝڷ "ǜ+ȇt$jFKFQs11^M4&xdi4Fr„B5״it㠚ܬ&#iш75#lTNe;MxM]ʤѧRq"g9NR7U@vr :SY*-7hTw2Kά;ɏ4+J%%\,)J|tlԈ̮ڈR,;mI ])m"HU2E^اgЕMMq >p_`4i36 Qh+ZDO1.yhXݬ  ՠ(&F&e4ɚAS)Ք$&j*I jNI͒Kj)6әj@l2ےсAS7w 4lf[I$~eMbYi2t]UI\KZTږlShOi>Klk-ImHFxkb%\* \- ~Y+GŻ7-n["n;aGOR3N]g!gjkp-%n\'p=SµO L:0NKGu+g.V_GuM&EQc$Iy]$^*W *5{k"sv2 H9q}j4 BnLqYx.G|@E7&| ;b!bD p?d:ӱun 7+&]s!^WRsx5g[}|LRCNlκ SC ٤,=k6!rh2GZ;)@&LڇmZ4W p&Dj v dhUSmҍnDHZyk0F\mx;NwZO;+Zl<}[4E͸hFVj*hFJsM2jpze}pW9䞤.xk} )vŤ2W3uԾ\=-QI˭j ^\U9=6R C7XgᘷL jkO)j֙4zUuʳ W:&I5m.2m,&EXzdV$HTM$4f/8H{gA2{f2J'o%%X ʎ>YEY4x2ʃeD]CyY5l2uL+.>T\CEZIi9\{0/:.(%tZ_0{ݽ b) p?(I%eM{uli*u; \Q|eJP'^/O} L^եOyN5qp?PK F|$>Ð9<3edu/harvard/hul/ois/jhove/handler/TextHandler.class} x[},_eC$Nl! %1xKQl-#Y(--@ZPvi)'ֲC}e)P(sftOOofΜ9sfHy$D*Y␸JJGF5I%)!Q"͢i6t9OHyR>[!>0X쁇J4iQii4JGKSirTxҁ6JӑΠR)ҙTJHgSi<,x>-PiA+UdK HJdKJQpcҒlJ: NGj2*QH*SQ-R>5J1Jh@;#V`SJ(c cqH@NkRXz|taUTRkԃt-HO:-h2+QiJT:JQTalJ^ TڈtI(b~:J?Ot*Nf JSz~A_4LlY89Hyv>]Iot!1!8߶R"H/ҥH/HҕTC.<l1·kgQz7PF7cJ7#J"Ѥmv c@݆x#x&!HcG#݅#kTG_7@*=!0>ǣ1i|B@;>HH|#=%=/| ^ƷWU|{ ^Ƿ7MVc]Mza&}#'|Iac |I3i&}&}sK9XTFvb]M^M&@eAE&HMVjx=RYH=T4_ 4P4j(6>|Az*O@F|m!7kTnr[#c9+ᑏWaX*GPCkr0[1w}JPk'K>*S9B*H(cTSy멼'e?HD#=?AS*tOf|Oϩ|O%W8CvKgS,5z.>PcT RBL>`V*_T%TeTAW`WbUTAG* abTTT 0oFz oE:BmHSyۨ|;rB;E廑C{C} }axʏb1 ʏ#}O"}O#}"}#}/"}/#}ʯ"}ʯ#}o"}o#}"}#@O*#* VH?HM/~I _#;n{-ҽT!@*"L0 SEARECJClȡJ.UB*i!",FzUEzUGzU*UTFZCZK iUDzU6PiU1hJ+6|Se9TY* ]EcG HTY%ua*!k҃t-UHO:TCO4J8U IT!ғ#r U~BRTFT"NϩrU~A_RWT9*gBWS~)hʹ+jRXBp}pvogvk<Y,H,/T\l"]m[Pk"Ѿ`\ cyաh-K;cPK0 Րp8~(3RtC[ C݃k{gG±'ͮXYrZu Xr@fe4/ wPF/6D{C3ZBuk"p0_ YجʞP?H"c9XT u dZrLX2cuk1(SFX`iH<5Bn brׄ1bF@d6fnb("6P|`pO0>3eLbiFB&) scu{d-,2ñ TS.H_p ӈl œ7%m0iB`w0L;p{ ʷUZ9$K^qs[S~j04e iв p<}f{B"P ? b@NЗY&E`8'%TIB68>gluK;L? Ee`UNu8-!3PHר,0.CzEEnYkxx=(>!whMp7?rY |YȹUMpڸޜ9ȿzֶ?XP,:Ԇz{#b2λ* b,zCX?zeXiKC0Dս.}+ EoC CX8 Y F7iub,R6Yaゅ 5ߺ)f7/ {B 9?XW.S.7sz܅3-ZP6ἃt L؟WDG}poшrh\\+W)WkteHFouʟtZϺrrܠܨ+7)0x~`$ -Gtf`%tVe4lC^Tes]+ەrܮQ3 bPԕ5]W ׄ{L8>+Q2M] at /-7P覀05kBI,C؊GtQ1]<< 据<<+(BARЕsS%DW^J(E,%ed!B0{b]ye[pĐXD" ,ƀq+oʛ؂@Kn @.>">+(B-wGgԕJP]y_&F6QUFYtCDgjXG9`L]|F|VW>F|=ztm;c8_ 'Xk,~Pxn)MD@L ,{32>JWEbI0`T2+7? ]B;* }?m457+ߠA;N9*.ilVy1Q2Q@Џ I@#ue=LG9z5(~bt[Bg񮵡X5G"u)i#J04{dM+UI ω몄 C4u! ǘ*\VЇ(U fH?RSנİfѬkj@ȽZ94b Ml-(OsVŻ01F"ɚP d(Ҧ싵OOXՇn\l'q;p&Dۈ\ke550s,!̗xǁODY~XIc!:$~_S']Q(&iiXDХtub΂M`(|o\|{[&a+ p ]AZk.Ťń؊ <ξQ)CQWuގQG۫hpUWe`ta~tY%m&Ll:#n6b|RfX83Aհ&èVA΃\mL#6:Wca1۹> 1H|i ֜+]YEWAhQ%^:{k{hZ __0 ND걌C+^1f60f^'NNj'[QM\ %uK;k*a׵a]=eQm8@Sojj,uf28U |Z`5ը[cpmk2hfT Q2;k]x&ɉ578D5jQ&9}0C1l [d iĕb+c1X0{q]]]xf=ꁞ:A]õfTԑvf8^E-6i;(Y B;d !vYxc.3d>LHF`1:1fɞ GMgڃb|B;w8 06 TEQ@&,a{s@DrGjá^kj;UɲpmUM-M͝-][2p"p`JQwFP 9I,Ʀ%Ox˂H8|i&~˷ 9.*҇XF9OW7W7z" -3e)z왢lɘGY1NHWOa*ވloǸ? :VWE[W3ZTV5KiĘik{_fg\$ *wm =ZZbmmx՟))k l/_y:OB5k-?&b왈-`AԨl1Ynw\ճ1JǨP58KU`d>Fy.m&M?PCg[SM rPJd 22o|s!V;pӶ06E.#b0: nJ#+ۂўlj de .aii"'cPweɗQ +dy& `H,#f=im{9&\lVr|5+:>Ub0څD!?(ؾLkΗk08%iL# ,ih8?%D#kQV浘2>=hge'uz={W6-XwД ,9FVaTq;.X[S!*LƲj#rk6Db { KoE5$d#6Dڎc4Fz(X$tu0+ L\L!F݁Q*w{/Xv_B@~3%n6XdKDx(zl$䙭Ӈr0Viz?@xJ01lsZEX'EwadD-{eރ["KlOqiu}ߪ{}x Ca&$ދ%ò׷`RZe2aguh&]y57$\Ì!ͱaq)ʂϞ0$jdLP;t^L w*;YfV3}A&Oh1E }d,<~DfɷPv ofK xLk VC~dt13oyvMu{Ue[]Sce=th0b DVdÉCI(?ӯs ̉3"lGb4_?`M~.*_ s1twEy\ǑГ̀!jg/"ԁ˪fS/;݄:7C[0@0Dg25͈3bYh73#bpO*U 仔N Bgj5n• Ymxc۔S,h[ ⌗'|̂L`S[*+[2'=\_׊wm*ZJeKKehsʺ{BӠ %y#WAc]kStkMCM[eue[%bk#Z:mU{u]7^)Ϳq'V`hKk#./dU-ljAM77U贺ƶ$75.DӒ#kP˚ZڰZ0$\z@Mk U... {E2qÜԺ͔#G5/|l7#ke!1i1 ^\ إ#9&|U Vj0=qB߻0n ΋% K IIe7a^sbPa2݈ SqgoW HEXM fr,̼Ի~ˁW`zĴ\1lBy;xt*+_/ԼC5c!Xf#J #y/ ޘbfyigkղ0YX]s&7}o|676WVՠg50KMځMMlW,ӆD_=QS@&5g>^A+aFͭnhK~k64uu41bus V:wi~u5}\>I:K*ՏΙwX++[:k떶s-IsseM7fI7ՋGjjmo脅lYS5I)t-u K//NQ?Z%6ݹuS88 ]psS;tX1>sy8Ns>rC;-XsM 6aMn r%ջz;NsVk6eiGE oB*= ,K9Ym(t3=5`lh1rĹp>-p{O L n.pΖFc5TVU_l1 ?8+ۚj[* ib ]h46p!y,oUFxeCs=ƪNE5|::InXfu[.43ΔC9L7o6(qc.:VLS{ ,uHu YNc9is! 3fܜI94 -L5A8U;9ͥ?a%hwph G9l`*675X$,O0b'$ K[Iv2!̳oh@j{;ul#f1B&I)#d N09L!S!ƲLGYrz@iRL',p<NI2Z P|R!-1P wGȢ^fTwX0x<yC{oonZjIUv@j86 Hx<'Y{șx;|vY5knRw"-޿++e.ź9Cd #s@vVRU0˼ dXش4oVh-RRزB$wa>ַ Z MvQswj]Lw !;ݤXMJ! ^.` pвQKo>t&𝗐陎A!3 +y9Ђdj+'ae2Bq?Htx/0\xQ,(9I*4U >*^O{2t;go` @du7Ik D}skƞTq }$*0T'`:7h A#ilQs o? Z8:R-0EIfLY[R&N2a7)2iB hd.R]Zʧf)R>feЂY 5ژfxQXmwdbaYC|n`rceVnJJh'B22jc) Kp*7!(x 1DcY6{@=՜o&Q(d 0{Ko I;ƛntԒU'M>B<>dc1IJ}ن #dO\4Uyd{6xds6It.9Mfk}w2y7q3v%*M͞J[2PC vF3vÀUx?GS4< >h`-PMDV%F5\]#rb\i2_Gllk 3׈iv%Cz(1>l>ڤz|J>#>k,(coTݴ}y  }5҅Ffʬ6L!of2ͩ<ĉ d}e[S!m,vD$&j>19yc<͛e,7<>0]3H)dM^55Ǩ $0·<'Gan{Lb,X)a[\KH[_eZeAp)$;w7$v% GN8:!hupy,_*hO*_6^qg(%gMIh!r!܌R,}AGʔJu4 kY$$}{d1غ6!o>=dt|oȡ"tϛсf[^rEV L{# sg..Cѥ{7k Ķ &P}aNPW ]`P depkiiN2)V6F! EB@Td B O /_<_ӎ^.|4YQ8$  FX\rYBQjr1|pea\Yr0&5y,|YrŰKM,y̰0>5y|pb2zX< >g/ &',aaɜÒ/HM@/%<,LMM>><_K>~j4@`:&OO ߗϒIb$  Y({ -W-]( xɎ)⃶ 0~k}xވP&.ۅr?!g>-]-eyˍz^yų s0~r{}٬^=~xr#_MvC/2K x8 1cIdpc X (@ (XԮJ2hhfkِ5כ5=ޫI!]W;d^҂٦5P5Dj8M 4 4a&Lф5a&52lAq8+S2dj4n?;Ʃ40_CrɌUL'E|/Xa -H l]h]dܠmCܠڠ١۠GA+m%n* ZcֺABCr |KN2Cn/5`м+6v^Bà55VV.+-F׻blFWl =چmqŶڰmvv9RKa`YE! ֌,x"uo]±,x? ?p2d Ӊc ?I[\O"kxjɞ-vAL1 ¼j&D9Ah&/$RSbaf^rqJ>, Bb0gL *+H4{&qd鳋ȮS?Mf {ś{q/NFIocI !Hp֌B ݗdc3cXɯ hO_fZʐvf2! =vMqܹwh9pߎ0߁FjyJoiv[~h>C'޵%r>r>r>rw﹗˾^NSWP#R$P<»f"O~Anrp) ؁Μ5qp9jd"#/Rƞ[B}%8XWJ<g 諆yJpͰGhƟlusX*7aX1Z1lkn[l[b5d} v)f ?_м4 L{>Wxgn6x6+_s{=Gy/f`v> Jgd$wv]q){WCҔ85<35}em]9lrt@:GS2U1VŁUL3^ 挏];mi'wT6#7mSܠ?A== tn3l_Ai z zlnslsݠ٠?GrbS^-;*|o=dqf7Y(̬(-Cha'Ch>GM0:Oblݟ^^nt~iiK,aT9r4i)dۍ~rN96˜\$9|+) @D O>ᝢ=$á .T3C XSߌB )¨߱(Z$nFwrP/䠮NAN8lxv74&8<4E.pЈAou=g["ɿŖH;?>Nd{[jP۾9KlX`eg`em烱,*mh*Z\Mw92v;/A:E9x(olʱy9c.б9CDv*}!}8F|~&x ^ ~ ^ ~ ^߈p?v-H9v- hrZh;vu>sَPw3c;/SOjp|ӽ2[U6p:tbUba.xhC;Z9phY+phYh?tP㜡7ȥ"E"W[bY`믋aha]Vú,:e:vXW?>vD.#ADn#n>g|>pß茏c~ ѵ6U6w8 (sIB?qR*IT|w>)gEq3~/G:__Uc?LB@H$gLgHB|cYDMAV7FYg ѓ!~HJ,scǗyie̮Gī>˫sU)~՜W [dS+/yw%w'.L'l%ЋE0LEX4`vPqw⇁`E2F!h/6u%?f"$))1Z 2edu/harvard/hul/ois/jhove/handler/XmlHandler.class |]E8>eܬ//Rڤ{iJ[tKIҤa+kHB.* *BЂ EEqGQ܀.3s}wOOzޙsΜ9s朹g{#B28,4Sg iDĔb>A) .e2L3e+/p9*M R4e5S`Oe:hI(zF LوEmx9=PRf&|83x)ЁYlt+Saɔs1=)]L۞Szr>>HG+R2P * v2eWrrS."b\}X~L/b!L`ʕL0H2*L?F#L$>\2:LC/agSL)7LٍML)[r+UnC"GrVt'St)w3 S`z/S>yL?krEBOS闐xy){1Ly‡!<>uǔ Q ^c]_Ň'$SƔLS0i|&S3L6U:y%2 })R>CW)?D1/?JŻ3')?u_0 Lɔ_%=ʛ Lo;>A)ʟ:L Sۿ2oL;)mÔw1=ȔCf *k*1uUl/*S5R2ƙ`j(`Iy]ifjSypQKj)r^%ԅE(.TPNA"SNɘ.j=KKAerpفe+l%UApUL=%A&MXk0]*%NdlU[0mzLOL7R өz0gaz6tU4C͘S,^Pu+UQR^ҟP;zS/LHT豋1bzS߇^ˇzWLULS?ULE^)^0FMx-Ltz{BR;NxPbݘރ0uSeg9eꗱ!a0Sa~|xb=_ac8SL}O1~0}[L}o3YLcw0}/Q%~ӗ ˫L>S_cL?fO0)^~יso`/+Ld1 SL?ag-|+SԿ3O;xy/zzL#ILa*3Ma?i41- 0MgZ!ӊV%L+ŴiImiV2 Sic0˴qgsm">T3mG1m2Sv4Sv Ә6b:i31Ŵ٘a\L1m>e꘶i"1=i'`z"NbL[OL[iӖbia*i+a%1]ŴS0mbZ3ikv*S ^Zi1m6bFNǶg2,Lf&mƴif/[iL;i1 ôzv>>ᥟiLdv|Lۅ0BL/bŘ^´K1iL.2CLodڇ1>ULg՘~i]uLӮg t#vcznLimLY4]Li03G{r/^>Li_`%ϴe=ȴ6ĴieWgWӞdטӾδo0Ӟf7-},Nf=Ǵ0yӾ˴ ӾǴW}ƴ0L~̴0L^gϙ $~ɴ_1Miao;i`'ia[L+ƴ3L'f;L{d!f 3J1*3021JeM0Zh!E3Zh)e&-g4hV1j0:ѱct<h5I'(LTFatadtfts|Fetu.d8F1fxFO`DFObdF3ZF]2F3ѕ62SmbՌat-2F[]in`t#mYMs0vF;2ѭXNFeKzy1}3}a*|40} /?`'OO)KDY]߼L"eMfgfweznzD r=2]Yu˚շHa kWlmlMDZV.ktڲu-kVK`S+.3qBgOI1mi@!%sh 'ۿ-C"GMkv ޖ۞똽mkvr۳{{9la@LokfsWwIE`@LOGWHQK(\`W#R"S@e{{8S["ql\lπD"[0!=#m%rL ,4>DI \n g>f:;sK'fL, rs?5;BPgaskOf`pEpBlh͉>;zs ;pm_77k_蛔P[p$RoA,EjkGEm0}X-a \2|/]MWZ;6g2DfFtH 5vàI͉",U3O"%v^6ӗ΂#V[P lf3׃Lulߖ\_w=[Rl΀/oDd(٩o7}H<<]{ T:[Ztʻ0`"4=i!oUunF:mkUz5us[w&6~;u C3 v}8#RދkK,Z:p |Hq3d{`:ZZs܋Xi@rh|Q]~KEH:˂Ng[ol+Va$wwk;v옵c\ٰϝ kXgvv F}XPGiY{(GoT7,tAÊZ485{)It:{8Rv*Ͷll媣 ǬgQXחɨY|zȆW: W!s| Yjr+|@LA]"QU_^ŲXcsvbêtSm Q'Eb]].~|]70s28&GNW ץ+.ћ2E%|h|]a X-btIUS:]Iot]}A ͙^\?y^vGuvdcȖ,8)TgWc8]gwKtIq6:ޕ-Tg׊:Sqή;fZFٍG1b8{F"s+At=7: d/l e|34\pJn˭x /+=otOz78]y^%RRP]Y[sg&X`yYsfU(L"pvh~&R(if)5s7n gA?4-Nܞ]_f7tF}u"[߃\}`Y,7ػisǽXY,p[$`z͙5OgC stB'c>+^wNΆ9.$hx0ϙ'F=ו"XWKJ)HmA]}Xg0`/qf}|u#T_D.ƒ\w/L|NyrJXoK"1{m؎ξ]ەkʹðޏƋ |Z95l/O[憾-ut6ufF\=NXAGt(BT"ĺ,t7%]6l[[cv_y¿y}$gC?`r;ׂ׉0:{ 6[CnWuD }c,o`fٔيJk4fYN&V@8lq[|:q;y=p,2c3@83OsvÁ2E;]K;{2\ϳe:{ݚ Ӫ_gn +h ((mm|E[[r}g^wbIDw t}2&\Z8c_|M/ z-#}ϞkZNǫث:Mliv{g{V"՞ɘ;/[ +͎ !J"לP!^~dl:P[{ evoƞ1-`rgV9mm(wAe?Aef9g; O._۹΃!s3!*nՏtes]b2.VTR%4hȠch7݃KHvͷWؖ>ŸMlgoq[g|>m3e4 74aqwRggqsf\v [fb=ƮΞ nܴfA3ŚٞT[H&γ2<f,ǽgB;f&l$JMmȂO~p |&(* JX:{qaϦٻ| HC=pV(5XTevU&jKC357,09uic W#aB[2% "k!Wb+[lWPԛ6k=v@)c^bmnbm!\p`hpZ9mN< g#WL:_@_,b" 56yxiC/bI&aa j#oҊl3n"/CI{ƯכϚjn|1qSqka\'nʝiv7Ml+aN-v5lKNΔȄвMz)DC*]Ԍ171{ȍXe^rh)zfm۱z> x*gkIO=>6'Zxd /ނlahm7M*i\;z=?ħp6,ej:_1-*ۗGƷ@,e[%c/]2 K eŧkRG]hu;+^-\ܹsĕ*VEwX%#̩l;6c72;;|g|.Pg*rs#;*c@ph>Ͷsî:3Cl1t<̩%X9yoXGbp錘01fZs3FT٫':M"c"\9 .5aSveRg) _Y Ě1{n6]yqv(]v+Lf=oۂSܶ~#XZmN­Ca[Mf=mf6$Av Z#vd`^Gh3 @n`٪"\H1uG%&"joKjlt-B"\05+LCcؙ7"4-|gPИ cJyѰeXa9o rwY p? v{i9 Q̪b#EyAX%P ΁^t58$/ߑ0f/] mVGٞqbQѕHHr#CӸOFZo7/iZu|ajsV m+q"> -]Pڸfu}H {K;kcƮ^9TiEe)5kMt l<&d=,\?~o~7DȶyLl1%5jػ}JМ ۡ@z-8mr\hOUaN)' $o;;]w!s8V 5A>` 3Q8ݎO1#˘#_Jou8h|h.ofDVa1ea9!4o[;K躬c#Ky-ϸ^Yanq}mmQo-]+)kkxki:OٔA{D5Wp|o 28f-"ry`^Nt?)3qEҭ~ٺ6cnlYyYkzЎ蝬_ڸ&UԺlck|P߄=JScK+Evmc| L׎ {EN'Vx؝ܲ P׭~K֬iZ;ʒ6JWaee0m|/D]޴he+HiZz@YjYkYf]+vJF,alL2_Sɷf 2yz4$yz*QwV}zʒ|JM 2\{Q^_#MUfD*=9[KnY$&j?3Q흝=c Iu9|SIwyH @2c E2C@ '`ׁw$?#56WR @(=Zo1_4mT,VpC$y"FA%!P#J ̋wq`gyN/unImĒ`qVIL)%瓰Fq$8J֝uܨđX8c[RNCtz mX ga:CZDWڧ}Bi_1sR\3ғb:hR׶ؒ&`A[P8>v!a_à&_n5{q+ԋ(ؑ^n2'7 FtgU*Õ+ux}guһ!Fr>VdZbv8b|X]f.|+r/@Nv<"X$ڜ"3#$*L55Ұsnm gؒJt5Yl{Ҟʀ\r-cV \%Sfu3LH3ܒ%wYҕmt亏~%#Np#w_@;׊gǭpbD +٢03-\!l$J '.0E&TOLYb+\|N>86H@7ÕgXfonVZЉ-& ^r"zoL9=!&o0^ ʰZ *͗ex]ˎ B?W(jYjUf 4K/Lsu>tbHsg#(@836IQ6`dį'B\<0mXO٤G+sᅵ=HblrV_Yq#%<jI&$?O1ms 1w ہO'ֈR,lL)gM͙el<=Clxf|7ȇq8W"7K89@0p #a>N,$-S=_:x ;Dj)r2WBuȃ8x:HV"sA}KO-^}_է`&L. fX05B0a4o(]Rɨ>H5M6mecP@z{b"ǚf.T/¥0+e" ~  VN.VrClƒp;ܜm$<RX8W}^_ wĿ([\{HQ1eW Cс7cͳ UpUZZsyq`OȸmMyViQL&?6_91X`ZI7g"sCd:Li wGW%*̧ Gȉrr37uZkXwB]JHC5'x}q,0#hs峆\R|}a!M/z!~!{}_|PPIّ(oRs?NUC@cPx~xki9gB#]2>?Oa꿰EhⱨCy||3Ox~/ޓ#cn?-إܡ{#\LVŮAtYSb4ا;aTU Ri>Pi!Qx*HTOTj '-J*5Riu׿l4vMbD_SJp%_ r] %>♩}Rsbtn~K uq.1T}ORyCZ?*?%MND~HK J'|V~,Kx*5KK~#J'`WZc'cga*$E凩(DZ1#?>N ʏ dpxcY.c0xxStc~èp4LI{A2ewrĤ_Ueye;D ..A-Ôpq3ܑLJ68$MJdRy5`movz΀qf| @q$ dmDlG:bj74@uoM C,uH6bs^rVݾ<;Cp.׃?҃8Xg h\W OFP8%piŒV/O< 借  ( ׼h7:tf^V;7D΍h*Զ('vs[:XyX{}2*M fI ȭv.ھY=t3u{x 锑:GH E{!Onl ;23m DWx lt} |4}~!/c})+k_8ʅp$MယCS yzhR`!i4ݯ Ur,=h)*7KhqrʒB}upݟNnT}#A_[{ 7=_ Vt?=(XjxO.}+ƈ^T@YC뵯 Eއ1|u^̖GW 1nXޠL&on͖R*޳;L*% Y7klhA/'?LAx!V,Z`&gaAL]$N=2,d`N$DOoڃ܁Ӹ=u&I7 f ۡϺa@; #-1CBp^y)a8y@ ~qN`,s|Hzjy%7RGr77nfc 4Ҩ.1Ӥ(6W~dOê4f@@hȺ9[ߠym|0?R_ R73o2Wa8y@+D+JC[fET,UP[p*XӪ*^J 'y`1"KUe0Fk|3,L@(Ml?na[Ccucgj o!‚8Ga7c # hX6;FF=z8Hp$jb1~_,&MHMVOIM*O Ӣhx c,D4jAz4UEWYVeItaxexVˣYMUY]e%jXUP2"XI x1Ɔja?Zx\)~U4REc*3{9;Mbp:v6^pB H;gS988!88-M{ 4[&+:F o1n:X>7qrx /6у|HjvvgpX*$EpZx,J"|fMïum҉ GD2v4"$L\,X]2} UTm2uf8~")DpAo*EKYN2Bbo_r`O'$pB >4d( V.$pz}({"\@uĹ<a8y@d*E8! [+M%tK+T鼀Z//Ox%+]־ R0,QyE3?rW%u1>*`ȯ r`؇G ~_׏kHd@/C:D/x7bWG?ƼQs85\ O&cE҃+3 m/f6'%q]W'."2f#}j(vnRݐ!I̺gdlw:'{S@+Mlt><=n Ücx Qt({Az/{QePXzr]d~(glx@?g)#5A|ӇhL]b}/câhAatS\t܊Lnw9Bb_ AK G0J[~xWsc-?H^5sr||Ye/A{E=Q< { SCғ%7{֞q{is _MQnۀWzȋ`HB?C|݂=T(pJD.E^ڰѶa_>E> Xn ؍Kl!xax/D#bt #P_F- &#|9TXDWYɍEՖWU }g6pHƮEއjF~柣0|+ FJs4,k4<&G#LA{-P{?g&\x?`A93wst&cd u1/`!z2{C"[brJ0O'wX;]̖dQѬ{VErmrUqU,zUu5_ub`[~a)f>$ߪSaq Nƶ[I Z/I0] jRI#EG!r!P,(kd)ESb8>h"EV8scbYp0h`C9y8X`p`D#x#Au0+#cJxb'e=],LʅNE1K0Lʥ'2L مX?x#UUXHJ8>\Ş ަ)$?r>Q)5dXY+IT[Wp_`i H/OZ_ǯůԤ_n`Xor|\а0)i*c%>@pđ}+0GS=t)AydsrOD,N_bZ3ǤS{HSRҤ<Lyܣ3#lIR),ө.k⌼op"+xS%w2*0ީ*V`LD}2822kFehUS  w2xX+骱qf]ReeaR^I'O@B 7NF+S=_'}r8a/O+JWO`CHp1vxC!IHjLN'A2.) I*)/()C=TN ^-O=1E9ۀy\vC z {5CrCꌮqdy>2)Y+vf4rUESMǬf56[zz>3}>سRE7xR>{pƧP3ύŏY:(9Ǵ).e-N[-]fzc[Vg Fb^O`x{%@rkmz0{ rLON'QNwHڝU".+Z_|kKP ĸP"B/vHx ~!Ro$|(cT)RU/QI!)Rc_ ;I}X?Wc#W&YÇq18K\&V$Fg']>Ҁщ \wz8\̔ī@,H] o>.Exs5T'@T*v;)%`b|u~)J|ɗo5gCepm* *wl}'fq@Z>Ũ`<'?ȍ0@n2 mӆF0Jk;%k5BɐRs \.CfYGV+LwȤa2$r UQe0X@Pl >D*FU~XZN*F_OTJ-G12ae@FKaTש2S%!>(1tV|TVf)󄱪l q uηrrS γp;y]nu(&V{YXs^,??c|D<(ps/-$Ũk.JqV!Rx~qW:lpo0ԳoQ`aK9,N 8r3G9r3G9r3G9r3FnhfgYD(p+ڦU+R(ʱBH paImO디w;jSʐ:5A~7 IF<]p7 nO,ɏL gW7R봔F/)Z/ 7ΙQr4Hk0Mi%ŗԱPC93R+']w݄_ fXBoc A?ˬmb```d1e1\g``6 l 96lC~|H \n6bؕY1H \ f}b|IXHfA,\|eݑG73C^23Jq21JO=@z9'l %8+'PK G|$>(edu/harvard/hul/ois/jhove/handler/audit/PK F|$>>ĽSh8edu/harvard/hul/ois/jhove/handler/audit/AuditCount.classmJ@I4MS{;fZ)ݨ M͗r#( ϴVI`sfs3ϯб]C;RvU_Cc:Sc`#}O$OOɘA 34gLF'8edu/harvard/hul/ois/jhove/handler/audit/AuditState.classR]oQ=-RJъV‚6&%i5ieo`qKMlhb|Gn m)3{;s ŪW42$ELKʔ:, 74PaЛV ]>˽|k?bH6=Cb1b$J[S0F[o뼷ɷ]A-WzXHvهn1m<=-OzP$FT($V(nXm9d fuUs\.` 5 #c2p0T=:r߶:גNvPPԳ][|`;DY,J]hUJvՉ(uz=fDLrUIiq5:4搻j[;A&1!Vhfp Ĕ~1%y-E:!`fi DƘQwDߔ=wd,яŌ2Iez F65q gJ'QO"P2ȇ,w#.U \r=yt2d}I%\eʌtKy@3PK H|$>E6 XMETA-INF/INDEX.LISTJ,KI K-*ϳR03/KHKI-J,JM)aĢĢd~Fi:_??>d2P; O,M,PK I|$> AMETA-INF/PK H|$>+META-INF/MANIFEST.MFPK |$>A3edu/PK |$> AUedu/harvard/PK |$>Aedu/harvard/hul/PK |$>Aedu/harvard/hul/ois/PK G|$>Aedu/harvard/hul/ois/jhove/PK H|$>"Aedu/harvard/hul/ois/jhove/handler/PK G|$>=Ȣ 4Wedu/harvard/hul/ois/jhove/handler/AuditHandler.classPK F|$>Ð9<3Kedu/harvard/hul/ois/jhove/handler/TextHandler.classPK F|$>)1Z 2|Jedu/harvard/hul/ois/jhove/handler/XmlHandler.classPK G|$>(Aedu/harvard/hul/ois/jhove/handler/audit/PK F|$>>ĽSh8Cedu/harvard/hul/ois/jhove/handler/audit/AuditCount.classPK G|$>LF'8edu/harvard/hul/ois/jhove/handler/audit/AuditState.classPK H|$>E6 XMETA-INF/INDEX.LISTPKjhove/bin/jhove-module.jar0000644000707400001440000205750611510702110014726 0ustar garyusersPK H|$> META-INF/PK G|$>R META-INF/MANIFEST.MFUAk19]zMb튊q31$ےlf{|iљ+T)DY Ζ|`#(Z1u LU.E=.BqtК>c{7ϜFcOvﮐ_(Ӝ\%8{;)mPR`[ ôhawedu/PK |$> edu/harvard/PK |$>edu/harvard/hul/PK |$>edu/harvard/hul/ois/PK G|$>edu/harvard/hul/ois/jhove/PK F|$>!edu/harvard/hul/ois/jhove/module/PK F|$>qdo=1edu/harvard/hul/ois/jhove/module/AiffModule.class; x\UܙL^tt/}-f_6l,L%^g^ig tasQDU JaqAqEŅEqEf2Y:g{gM`x? p6^%*^ULUP.RJ?]Wg\0 ?績Zkr}#P_(/\0WƼQ/x73-<:exogbwxw8=<~UL0W.~PŇT|gQ*~U~u'>OqOs O3Ν_ ׿d_qk>a2S.؆) ya/qOQ.0oLe.^Www_\*[*xGw=? >҈psY D  obU\*>Tq">+ z;CXb5Fl 'C5`fWtYow%`='bF72LtJH#ke1jњF#a+ #@'X=0ce:-x"LC53CuȬPo YNz4d&-N(`12RzZy:to}I[2U#H^q0r@R<,g a텃ĩ 20 RI6Ҵe{cpցjpq8Cn),rdK,& XIB!UubhFNޘ,%7#qZ9MAc~z-R@JΘۯjsju B39JᔊlDOau/QMJ3D5) H|vEʵQE^2}պU+OZJ^U<90@tbPjڐ&k5qP|a7K;Ej*I3F&#ú,Zd4K7i9d6i'#EM|I\agPT\Z7)c5ht$ZRӣ[]["Fڵeukjj)V'kj[m0jDk4eMfu֮%<"{|a{@[tkL(x[}ζ-5L}ꕵ})+*+dܪk6\C]܁pfz:'(坈= @?`ۡ]IH kVY^^7vxtjiNL%Ӵ8!/ɎBwin1{4q8;JibX TU^M'(3嶟LKtƼ?'Rx@Đ&F(M!M<H ]?o|5-n}[|Gåx&+c<=}tx58 wM.Og.ExFSRs(L>RYz JnlF, &-Yumҿįį5&~kw,^{ cp!%9mS[s@Ƽ%b0)tsVv“V]k4`̕R-T'ȶED<{AHihraUK7?M&$Uğ5WfoxYWYNcz[J۹x'MIz:[QGQW#}So)ߚx[YxGeL.^N5< E8\wHb;1[U,'D@MwӢxE%Q]#4~njSh)^Kނfjd8L5&/%m>R|˙ MPl;aVMf⤋_ys#:N!%W>tAұ.uSoiMSFlM2NlT*̵g]9e^;ʔϵac&sI1c%x~de2۴zֶ)h s0|ds&`(ڣYF(,) l@WQח %|=Mg&(EKaQĘ֒o;* Bck -~f˂IYQ٘mYر!gx,5qdwIOǿEzl,ljzz,L##L4SAe\q3 >E9 %&J@]fFMV1#FKoz:#A>׃g6 ?0[JCfSGeO[f\X{dB XҥSo[:h Š vl/?:oe68 (qrC}bO%#Sm;wхHZ,G_3srm}K>>ɀnhkO`oi]vciCe63j?8KDUg$ G)`3)sOĒ?{Os.坺 hV"f+&Yu4\3iIey6B.fc{2OO`r qմoY*k\۲bM~!ӝS;ڛ:SA-yA 2#/ `}&1MyI2F6;{"F( &*f'X#@V?j]K!ӈm&bzv~+-Lv {SA`̴)-6_Sb#I_d҅WYWQ#4 S'Wc E" F-ݾM~[P01Z^_<e d F䯐VڿU`PC~+H]jln|ê4/asFbg RJSV@֓j m]ty,𴑋_yџ.9I\ [wKp6eoi{Y%노HbYDKxY`vKe]岮JjZvҮWj\C|aNέ,Rݞa0az5`cf˝n3r6l'ECr\CǝOHy + ɱ"ȭM4|`[S6lr< |JA~ >a8F:aaQN4 t< g¢M:8KMf.z䕐S⬾OAґqb'ywٛ>^l'a`9 9ha:>xAp#띒E7L@Da8h"w#,:> aI *B z'qH'2u3R  \d?9(Ky!pG׏hf2Jw] >63m *5k8 L%Խ~8NFn'!$ çl ـWML )yxh^A7XLޛOMx+%?X\p*ء` (a5~0! 5o^_Bn;p߆EZ1݁ ?Hˣd9hsy*,vN u8(PW L u('@Ɔz RB0\Mv ^9`g:;@`K}B (_Splܘ/s#7[Rj 3t|G붞eXtyh*6.\"\ŝ\\ Eԋ}bpH).Ϸsh讣;t7l28 \>+rEr[)wa6/H$ax8u۹:+Kd#.vS32`s@ FmJcdAc`wU\gWI.:/:H 퇺# Ps,øMVu7Zf*A^g—q..q^B͠yٚrlߩ*Vu {} L$gJR籃lYlѻ3;U'ɖy,#}1_y7Y="dp1͘{_XG} 2 k~0*0%@,#״$KNٕ',%8Ox)zbj$ %%"KW}z}$92#rIe~_гF/},BQЯ%g3BkCo;@Cw=/3IiYȿ ɿcov1 v % %탘t%C3le^ʨ^7edѺӢ5}^!i9oBB'#oF_$]YC'DϻBBxO"?GA03Cp[ѹ\>UU=j0+ŨQiRq:'U,Rf3LJFCJ΋,"*X.S|/xV^2N9%\Ο_b]lZ1Bh?.;6~?lOۦ^#m4"L̬mmVQ# kJ ЭD_)2edu/harvard/hul/ois/jhove/module/AsciiModule.class9 X[368>Aqb!-G!)D$aM]GҤ-ېZ%[6}?^%SFl2VHtϰj k$:.Xm&۸Hp Jz7.&'̵G۽(1tA9vq>{S!vcPbH<(ĐH|,{YY$KH$H8|QG=ƚcy`0-.`Rb۴xF]xO0Ic nepĝ傐M<,ƞ==υ0BEC×`_ヵt2܁PMSp<} n_ C8G(h ,?:&v: XF<'lbúxn==Aۍ<EDs!OD;NvĭD<ڟ"t #h- '#CD4U{t(qܪYRh:ȌpS4QN糹zcѸGis:(ޑuDXڛktxziFX-uPu2A!zYbol+h<!ԛ:揄)j+u.ױE&F9-|Q0?Fb&PD%L8.ApІCqFQJ/M `<MZ|9ڣ1k(ЄF;VDMWQc(9=A_M(b~7ã:ChMh&Zi32OXX@"9lEi̾c}Veͺuuf8!d[G=HI2$ea0q7F#V2x6ҕM$O[ɔdx#cPڬk&L2{hz2ьͩzɋĉ0a5Xjn+fShZI*Q+f}٬snwNWCh6bGM%vMCHKm'j/jXXCZx9?Q*g1VyͦƦ:oWWb0uq@F׊-mw6A+R=V2֤J!ri,˪PN.z:T*̀ɅJW̃t"^ey&mb}]}YPۨr. SQ+9魥p7oon =KPCMc5w_\E'mqTjJb/&MAvnNQ{(TטMd暦K8UcJ 9qgJxvmQSjUTOvΘTLk}5ՌDtKltQ&EE&k/F5K{83MPub.Q'ap/s=tR^C'aJO~.[y51C];u)WaO*ś ]z]xD+tt1|yd2&{EدgLtqHj"[ ],^2TqLT,#C&g1 nժ颟=B)&,6`;$@43;"VK&Fdz.ً-ꢺ8*i"ag31Rӑ1+bwE[杻۷ZHcH8A('gܳ93aPޤ {'Ř.n影2/v6Jq.ۡlLG;X(Ԏ5;g֊2sʨ::;\=p+"eEt(Q7)b+hbNֺmD8[ =VE4@]z[o{89ƸO~Ҷ rV&Qo hFE(G:=vr$TD͎{=q:ެD\%*vEVqJ+W8RuTNDFct}MG _"ce?%\8H>36IJsUu"**k/y/CG.}_sĿ+a9ETr׶wuzT>yZ e\(梽O?zQ+Y@3COaQ]'Ǐ$pށ6<Ք;=eg'v dn"zsHΧyf>i#>qL qq1cl'YFRTE/Ks >%Ooxz^$6o\cTKzS#V?͕.;, G"%TPu>҈57Ϣ%ieYyREhCT'fub?w^^D qJzUE4e4=fIMEf~3xptnw:K\:hg.k0= sz YvQ譖.{V%!ut`JޒYڊ5ep/<|Ϛ1B:#A9"vwkeryT9 Kzn]waJ=I7L Kn{g qhsnV,֮=K/au rwҤT~2e6/z$)+Oyl&ʹ}JfOrm+FdpMۍKUmHwJ8n/7_3]eգ ,飌?h_7i4.]4fljKb= zr~{)Sxx8{\G8?Og Q@Qe-5jqnïrD1B Jr5?_o>Ul{!}T(\PyVa!& o?6pN(̛" Mt'aY02XJceVUTSP2LIXסmJTd`Cq-U32-(Q1PCMYpPi^7(JViNY'ya-YUƎ \We$53ݠfڥfZLٙm }ɜ-@IyמsY#Q8 tܜ݈ g@)ZWd`_x0_1Bp "4D3p$QE=#"y3cd[ 9M§; e "")UO ![#a8zUk*pXIixÞ)Ф JWg m*a8Nq@NteMX**/彏tC55Efj\zb>4JIc,]yppy,Ƴ-w%PDw>&uSǧwh&{|4eRy!^O &xS/nJsZ b_= T^> sW-Bkk3:>o7hOh}Q< .jzNA xX)X^*xAV@t;3Λސqm/@T+u#~Ιv-2UR+8 .Z0.Ԗp:Aa,uf]q7g8<ݹ׬%E`ywTTKJ5/ ' |qiC!I{{<,T%e:1  ]j#jXB%.BP=r_^/0֭]9MIG z fA Kh夨A԰dIXJi‹DH/]Or-OMW/UlC\M.0b.jǪgWlVU0q5iSp&T5 YZPP?l.8)'g5e?nq:os],gtdBnY;NZ= !x>͕㏃Ѱe@b}&_\trqRnj[U('χUZH4gU4 < -Ӿr;B!ZB g|$r `x$;]@~vX, d0 ` A,Ai#4>Ge|`EEƗ.1LpW .3F0Np +o,1Epm\m|`=k\k:2~Dj?!O^_PK F|$>#PH7edu/harvard/hul/ois/jhove/module/BytestreamModule.classWW%9u@5MR/Yٖ)r%%E `ҳ|i l`C(Ì24re(#J>@N [{OGm-0y%+y)*(),cJ&܎i7qWj ^Y nZƛp'w1t7C0f[6F߾ ;eˍMx{،{Y>>FY)x([X>'I}ifhϰ2s2>!_E_JVQY H}zqJ/}eӗ7J#)r6+5}Jy߰n闊9# 2> 򹒥笃YX I9Op8$1E k/fD #$DB@"9J@8̊aCáD>b4?eǢ|Dc,47'`3$8{(&\X}O[=ƅ-(rݡv9n驣Ma2f{mtM5"D2(;2NH*n$!tѝas'e·L&D,PzUËUQ#* 5~Ƨ-QmvLw"_̊[Y6 FI_kRhi1MKc1ݒpP0]42e'јҶ(lEβ)A:''شibzIr.-ZXJ(6Z76R"W* jl3t8R;@ΘŒaM^qREsl딄`tbs癣jj%.mW5y\$ݥ Έ.-zzoP(NKX٫ٮm۵ۿo3̸v[* u 9 {>n HYVWSU|M׹`7CmQ]<{!KزpȊ"O佢IJ?R1!?y?OU #g_I W; ֿ įS[bk\ƚ&)_76쳊)S4~ϺPGIş񔊿0 =߸5jyȢ#a^(P7˧,aykޥeS"6Au": z9$m{|~.ph1(x^HL(sPt?Lͷ̌+%5Xj.GsOi _%RI(A0ϑ tM\:_t$yWhk"#ҶrUC w౬du1vD,}r^Fu1/3ª}ASw!:y$mT-R J6@W X04 QvqSS]P2OƱ >iFɺ%XX;LlWkݺlT/Cl&{>궮j,wB }}hܿ9k#۩U&4Kn>ѭ$ze; '_o@#7 o npG˄:Ϗ|7*Cۈ#hvx$O,p5F< eMgc4'=gqZ5x:=k+ӳutK$d_:{:*XEKkW# Ҁ(o\s?]hZ 1ps`s9-'V8hƎΥXӂ@:ql"ƎS!@ V\xf@vp\x%5w-]gНSAo"DK:+Ŷ9l`c;VVٔ.v%.a TY>=$:DY p.eT$/G1@8IZZ7Va|_藑'5[Ye0Y-3 *[^]/쩶E+ z3m@YwұF~2tѤ=1ܘtxnS:<~3ፄ+TPK F|$>T9 $F0edu/harvard/hul/ois/jhove/module/GifModule.class; x[ѳ$'ٖ(r\N$|F`[R'-l=JdIHr. z%-B[H -^.O}4fX!vvvvfv'~`U 泛yn- {ޠ7*V2{jfoco@9{n Tػn"WaG{+Nݥv{Az~HfVؤ}}+q"v}}RaRا x¦dv0,efA 4a"# {)3 {\fU46/Coߠo۷}'[J,@f?T؏'fS3 i5̞UY{o wD?τUfy7Z`/_ ؿ "3 {y:3 3ssF$Mߣ35\yn[IUU> hWz.T";d*Hg—b7/Sy ?_Nbh/ W {«SZ]A o"Vp55kV, ›Sv7fjPs 5*2-0Ml%nNo).jRr_nzW^bOWҳ_>Medbw*|E ߭UU T>D*VxPG>1WV# *掝noȽ]Πis=AD 6oOOG?zwm y{ЋȋlAE_;%x y=E ( VvkƱ@| l7FCƽcZcۘ6/!I5c}hE%&O3ɸg8eT>2".LYݾv]H@B Tz8LwŐg<0bq є|El# Bv0@5і {2#F1҉CI-c gOS37g"v!ˣ-HV3j0)i<.¬jXe<Ϝ=pd@*wA[uZ8ǵ34 %c3CS8&''Ȱ挎8c!gzp4GQ]ծɨzg t&bp(v&hBӉ&63 /L? yL:ǣ3ќzD@F0$81} N-c%(6Y :Zb8% 8cd[$cp; q `JK Epx)8{=>sך ;C$Na ;;X$4Оtq -vJTJ2cN1C)@Fzj!zQl"kp2>52hP<4:tnjZfsr/Mi>=D]@:q"[uamTkpka 9A"&wnsvk d٥Eob(rv##X&4l+ LQ\z"(K<JB"C@?IԤFP"'={bh"dC-0>Gzgٴz՚ *(:p*gu5ε׹֬_V=Wb"C G[oH р??s 2f״8N*6ql͆Bq!5>Nv'1$C uj"5Y.Ϯe)Ga.$ 뚚8$.׆In\f& e޵u]x,468pa826RIDjfתu*-J)z<4D㣍743FC#7$&e.NcYT8%%6 df\ ԕ Z0U NO *?EQ_b8yCO0!h_& RJgah@Tʿ5-T٥2?ÿ!o[,o{XYP?bN'Sz["rhRU :0O R5,0:H %2W QP/dk?ǟ'Q~ESTG'abN9⫪iտl DelʆT7wS/0C\/T2Q%/CMMl3Z3V&TNiT14OdZ\e]WLȪHfgT&i6VDOD/(6Kfw~vfw+G=0&ҒU*T45Ʉa+?JdrT W5eXNo֜m׆1 :vNQḦEv1V1z8k d[0PPyPqA-즀ȭJU<$ylHȡK|.v gp>ᩒJY4Aڳ5*-"tn ٳ4w`¤$Bs<BɱVdaGiΟ_LCZQ1986ugPx;{{['BaaG[DZJ2U:-u>vT i9&U Sf_Y>W|P"tQQ#dkY0UrƚE ۈP2\Z(Q У HMPF}DH7( HVTBG*o| m<ٶJ4𬡌̞KX;](j5*6F,i,mV-%%c$O ]e~*]*]JnUe;6Uj:pkN=8nL6;s_rm*uI[U#]edI`s:MMZm)2=7DXk 􈷒r(R2d+^#+v톈eD^[f\CAb0yXjgOwnzlb]EEW-_ڲmm.d'6S\ct"IE$bc0` ܏Ivw+-dJa͟ķ:5_E<{CIK"^T]F"$L(F\NҶ~\3PK_giBM)sbn`/G ) eBޡXn٥YG0W{)\WiCJ0V0eSɈE /`q]sY$=_Y#̓e.(ftvc⡂Cv0aeb/tU F;rpV:^N-%M%t fTKջ^Y۳}-(t ^U×Ekg*&K r6S."Z8)U`S-ŷLHzI_uypt"#ٞq0OCqz᱒ Scӕ~o_G?}.`M%cLU13Wgy"_*bc%eL?Jx٠>.}m?3ZhtľPs[gfmzQrbB!֬ƃgFa0ŌDiKN)e3^}YR0'mʹ,Pv2v/q#/H/̃ؿ(`E^ߌad~]^~M__5y_o}iw}Mlxna2tيٖ~;Xxv xyC9Ykc6>l)0db3,2iSP>`iv٪R`K:= jNSh昂ӰGLX: ,K SpQ)X1`x VNCu jjA>MJAì'6 VM)Xűuf1d0 gdF7<`2LpYPt0u~v=c5=b]0Z;&l(րPNBkm=Rm{鑂I0HBHFQ>Hkl.0twM8ܺ.ccpMV{)ޮnzIA$:}(ESU<^xB<AC``Y̼2ٕ2OfD5&c (|vg`[4Ff2Ȍd [s˸_EIYkO|?`6ۧp[4f{3!x-cp R ) )3PhZ|'IXV[wZ\aM HP@ dGaAf##f"uki*PQc` ] >%"7Бh)7iOADG[Lӓ0O8LSz`0L< QRfxjM N8Lԓa28 >I)8DkZNa2қޟ8Svv7HŮYYvDL[Ys3 |p5ai@{5>zHjkH-F$\Ojn&j@ ~ &NiuRnCuYv o6`Rpwz{3Ĕ;,C!$E Y$%2h 3 SӒXHcălIX+\E8#8Q݁K?N߄ԃ.PM kc' D!O`S)ܗ)v/ Ut7|mnO}l wǞEG߁ғ$ la*_3IiI$I!iJӢ}0_^A欹Y|Xˌձ _lT"iNø̩^a׏L.tX >=Ϻ|eJ]<2bO zDτ"OfX$\SEMGv[R,@q|)ffeGLjmO-St<)Ye8{|5;duQ785!fm:w_D0"eG3B_s#!zyxS)Me6XoU*QtJU/"Jfp7+^+z(x ri+ aoAC0#gֲ`nqyN6>s7HbUU9 S6%4).{iř0L &13+>J哾+ c{3J,Yw  v,Yfy\Y*vL\J՗a)wҕIE2+_3|51|:@5 г$ #`ǟVqOK E%88 !F]TlriQ{8 OdT-}l92Vb\៉c&/.X ,:/J痥UYbE.HeŐ,:,R RYADE\aX<e*x^R)K3׃ 43ʳ5o@kxDFܲ 2H68mD+FɰgڞY9k(fX #?ڍSLr0c~َ罿d#2Bjoih.5RT(G)kuϳE2K*3Ѐƣ+Ph~|8Ώ (t%Ǡ2$ u7̯Kd 5t욜\1aqѩb9Nv}>RQUw0*A2> HUw? :1|77?PK F|$>|>1edu/harvard/hul/ois/jhove/module/HtmlModule.class; x[ѳ$'9qDKC-1DGáym%dt$1}))=\ZCZz^3$YJl}ε3+ Ik_aLfaUXڨvb +,` K)찝ݠWS)Ծ(vnqIao&η( {NP;}[a![i^ }M8!iۊG Ž*c CaW'I}Ja TgYMs }egwi\!A*۔̎;`;;AԻz3ԻzPAR}̾B_%S#Ek̾}1}oDm}zߥ2 v~Ȟ$S$G22{a)d/+دe72~~Op=K?s$O 3*9FwCaTؿo=OR_ً ކFO+%ZvF8S8Wzs̭ NmHe+epG^$sGqUwP b8`@Kp'Y /u𥼌>.pe|9]\+P~!_D KQJe~fU:;_B4Br= vWx -$zWGz5׈Qo7Λf<r]A+L2oQx+ۦvo#mGrw8*t8x'nz'ɻZ=4+>n< '} FP+*(Z yaǐ‡|_V# *|L)<& ,]͝m zMX &bph$#z8i0{:ښ{܇ Ǡ(-ݻz!l߉]ǞblkE_LMu}H4'b>ʠ&kFA=IkxAe'GdW0 T2i9d@b| תlcfW`5 [,ɂ{Иm!1("zz}BZdiV,p(ㆳ|Gڈ4Qkw K@X nOFJ WЇ2$­a&K`'4jrB !Gq2X#CIJ+ `3!`8gónjB# W@KLvuvb [@qCq-:m7 a-6trA24Loڥu8#p(uF$nT_FvKYèIqUucz TF~# A{9eبx m:Zsr0Cpڭ裃Pp|Ҭy7f~ U^{Yְizxrl,K\Jb N/7[TV_ &X1UƭߦwJ`(dHc jT_*odN=#IL66X~ɄA>3#h8:< ĤfqH}01!c}Q3(Dl0Y7a7YSlltw}#ĘСCՇꫣ z+/VACчqm*JgZNjIZ3޸L#Ơ"o€3 Hr C|pD淩#vYK2G>Xb\eZ"d*G ܓ \ҎcFO!zhp0*`JIM[#F#QTI[ 6<.\]Ah 2D&։`}AңNw˞v0;R]6l- &}xM^qqA4##i{v0GB%q\ufSfs4DB~XSܲq#'͂$2ATe~XP2vNg VVAC$\1.8Dv˦-?ĠH@@͸EUv1"ތhQ*1?&0"ñ6sycʉs?k3_to޿zT~3+J%J\PaɢJVɦJ2&)sH`ݸyUf'!X7 ¶ѦJ"UZLy%iUZ"9eTJetLc!oK3m>VHGjo fX b;K*]'rm箭lŞԴޭ]55m]x`>tv.jҭ.0jҸush܄3Ζ9^]-],]JʬYWX}5ھZؾڴ}ufժt A ja<2t+ҿ=w汘.9}oj=#M ^L:;g9x6cUt˾2[x2ZԻpٓev9EY0/~}ƺWs!fAEg>]ֺ` g4 a%Q֢ z:G"16wJ8l7'r ^nʦwLjӶf沠-gFiiWOG/9W='QӼwB%OA%g҃9M=ʾƱkÓ*5|'ɒ'Qwf6{!sq|-g*F,\R(Vƚ0o&iii`Q8=ewf//$|XLR' %y]!Iil1v} Z|AcHOX룘Pܓ7.,8PJD4K+ ]hGk'~h3KaN54/ ̄ўFQXDVȎ*St-hAdZvHda}e@*[~zZ/He漄^&X[A6d3+ r<62Znq3&lcYЗ/1J"j {x=taiW ;wU(hML Q~ҫČ*p$3LglaP.; 2cxbvq7u4B~όٺP"M%ف4wc?0Z7G̱uN6Q3]uJ"sa/+Bŋ$r[M/{ԙ?!]vaOі \: >PKցE"D;D`6L),e+'bӅK9 o dڄ[P?VFs&c`k_ MLٙ+ñ38.f~$%9x+ixi\Ҝ㲜8^3. }%~V](ڋb+:v *_598^3^q+sU8v=86gq]θՐZ&6ǚs32ؠ!^t2'i,N4؜SqڝgtJ~i(9K:V9yA UV3w Ea4\ ]%qjqJjq{RVPH鳸])t@U= P{}s 1&VfuXCfslb s'0Efl 4_gSe,[Y.ϲ\17˕i: -ǡ'#% A ~]1,vmqϲ$x. ؑD#ӕnʽ2;Pݫ=ǡ7}n)Jv p)DIgqYN^z }>++R P*-gL: եZt#")WE3`C |BSux)9 !G7R@e9 RdNE:cIXYY5gc>yb? &]q8NBO8RRjlS~^GZ&P_oy]Q)Sn#xc@jt2z(mn}K}n&ܘ|Λ]#yKtfћϕ9œ-ykp)x+M\;~ށxrO;' |W =C$|,"eUygrLxgDLo?rS$ς?|e);?!3݃Fܿ zC> s"GD)m f(b?673pb?>7b?y6Su&鹱kfN~fn DCsULWN̮Ul+p -)k>uRpoks:BUz{'@po T Ή򗥻OEh li9/!p v3A2 n=o~h1Ncq<9UL6 _+S0Q^ GE.)z6Tx/1R47]S]$Jt}{s&SOfq?塞4Q,f[+b`w[6;#NjyhωOZ, :.hZ-%>jع7S4\(+_KKO2k^"3VmYZl.vm;C##\άg`-(y8eCfW:*_vj/A/A̺dXp)v.]% \ikסJaI&CvOjt ٲ ,<7 Oo'>a^z4W/> /b *Otn,@sA:mSTHǽ.ٱ:B~IUYfYh/|2xMR&]Ƣ[O՛V_OX\VlZ]ֲE.KYqoqZ\(hEnAZQpϤ7wL꾩M}EF䙛< .nE<-Z @"a~2'kdܟ Jhȗdx y"ëk[jfn9]%q~~0˫D d,"[C85edu/harvard/hul/ois/jhove/module/Jpeg2000Module.class `Tqe B{9vssEBX$,lv= h[kV֢TVl!Fﻵj}j:&,țf͛7of{N<4ԈV_cWʨ1'_F[2:78$a@m܎A'Ⰼ!a# 10Ɲ&d8Kƫ52]wNfVwxW\p;xIƛrWm2_eC;yxw3e{dWd0 _ƏȸWƏ1a?}>#|GSNXf 8CL| xXƤc2>#2>ɬGT)n<3N؊~ W.sE}k/pe !*&er;N؎exK (㏜spS~lf~õ߲E_wN_bx^#2io8i|_,2ƍe2' 2chE>C;uR\8%Q@CEL%dQDspq3Xq.sL.KbW\,IE\$qK\Ih"&.b:]əf& VdyR )V Օˢtk읳Maib.h~?B$Rlk(/%Nja&9|B6=QݤHDٸdj5DZjct,V2c|9ɨFS2m,ڝIJXc"-QY9Đ_ E,mC8;u0qmxD'ZtnݙcK]DL[-@c%B<ɱA=LI~Ҝ]/ll^=$V~"%JosZS]oQt_SJ-!ti[%מܥԕ*G *D մU66S#*eǴC fB:-zHT}6'S=0 *ԁp"J㺚\A=⨭zh0>&`035):iisa┍cPX4mͷ_dАPpT(w6DﱌbvBRT"dMhw\ >-jqDX,*;j@4<< ^DaP'ILH8͐!d ޠȀߚdX%e;Om PLPLAs†ASxCX G)?KEzEic`ӂFU谑]>s+ԶxڐOD pp4$ikPjkW(bW%˪u+zj)-L8PKD"LאZ XaM&V*M#?¾İ1ǍK.㙲teGsbʲq^x"Uy(+Q6zjM*D:ܯ%bJet!{kWpFJz6rѢjF]^RV3PjmZ[n5k7DP<ܹsgJE6 .d^v@wι$6+xܫ-b+ NOrOm"a '谧>kJ187[6T-T/EXw/3Cw郔X1wG]-j򺥊R\F'*osO${6"46 N(brJߌbԏ _y9"$2RɸN0n$&}e^q {cԭiyv9:+;">F_|܋W|Y+ 3YOt /¼h4PMFrp)u`f4sL߶LM~ϔ^y-e8{TVoYf.8ŃDsƆoG{C+ ҝV!g3L{bzl_C׫P8Dl D28TWܿRsrwOC{SCWrD/9 OsӼZYXa+$C< sibΐ8_YzK&7홿hf\JsMh+Q_:AҳbCIOnѿRy*. 7ѳȟ/^m,a = ٭lc6v^Lz8%[3VtD{ ?h;/inAљNg޼mM=ѡ8"ms' \*gBL/;p52c,g]ϼ(ޒ -ෂtR\!d2cH|[:::s&删gC47['wMAGNω&6a$2[Q Bv'S.bpf)mHzKTW+X7`4/ [~CҦ{l&Sǯ8H5:d`\%S߄m1ga)׵UG"׀Nm3:P&I ;/h<@JXpͣ'NFFVX>BAl `nIT"v}||0M?頻۾2);7YI/U7A8hΟ4N}Y33 :E<:Ok.-3 [q0wD3x7x ko+)jel<7N̈́oׯJh7 |%7}!3#"_*^o%̃`rR3}= J{r 4|i31j;mNw΃_o`1,‹;j ᥌  Aϧ-2і6[lwm}̀5x݀|N т‚yh3`^lA,@ŀe, 5 S5 # hlb̅.1 y`s参%dc(G5kfAQkkN\305/ gGaAx6Yp6uhΡ׹Rpu>u.H…nO’^EP2I(sʓ.{<#P!`!Ғѥ*Ku.5PVTVls-塋mIXf ]l`VNgbܮU4ţp P.'E&:&Z*؋5d dk.0 @ͩZFat(lZǠ^"z{buue5Y=s7iOC,ރ`1.,Ū$l); [{˩A!$umWo K˫Ik:$ez1mGa{+8 ã"mcng--˧rHy.$bp2<;Yvb/8lc >턘i}bl3Æwmx'Z)L3ޝxd34L0~8x_&S?f?qƏf2>`1jjfV8("b]hYdEA<;`Wfק諲oJ/N1E$M_JktVJ;LftnQֿ`BKه!5ĥƢ/ Wy*L\wNZI\YՔk$\Mjʵw׺\OZ,\Lڀo"x=-D>AډJcx[곥aAlw&yLWrTt;n &5-^Bg{W|{_xk<}00 ymz\`;. 7ynzQ6GkxQ1" %חJz/T(|u7M$||H~c=ticC g8^ /?NP{ nv՞Ob~⸋SK$g3đgː!iːp7o^7H8yy_t\tn>|Kv<"Qwɧ{+m蕋:;zE*QET:T:  q;PK F|$>*D:4r1edu/harvard/hul/ois/jhove/module/JpegModule.class| |H7(q9|w!#QNE^JlHrsCQ$ "'5(PP#ͮVf߼y7ofWY-;Y=Cdp,# B,' nY2GYdAIx|"<"JdVIY\[1A TiȐIl vSLC`:@řx,>gK+ًυىl+yP̑\|pb|KX$X,U&JbJx$`%/\.KeB+*X#%[*`DE\.d%5HEZԀFYt#C>@JKUVUlF$kQBY\SnSdуx,zD*c6ㅸA;r`؍, X "IbX{6fTs,aC<pr)gYM<Ap.x/ċdWV:S4I@>D%񥨅$r|X ktx-RCkTx$n6$n77!YwXB~x [D mķ o~'Gy@p,e ލ6r6ٲx,+VZ]׉!VDdq@`q/?28䃲GQY| RU|Z xV,ϡE* w+ /K$bW%VYU*!) $o x{_![YIu|K_!|EqJ#8 C#@uCa@DHdVILD A*4&!!(SLE0 AF0L 8,A0A̲d-)<ˬ@f2+XJ(auUլlwzpo_DɄ?+==*%RcUMUYey asu}cmy%kGD_YXZWmUSsjjaU%W׸*]M|W]u= VC]K5)I^kk|j I uIL]aJhuj:AnKwK R2Fm7z=_(}G`_ѡz78#ζ UO%hwݼoml+=aO"K {ZNɬ1Iwp/4<*RnrsWV4}%1TK53E'GJlh^j J+ө7q~Gi9LɳS H-/%-`H'daJ˭w0pS$; `VANyTમ>,oZZ@0}FsnŢURLl34dMjiOh6GOw7Ah -*<&ǭ%x=ݞu"ނBXې}Io--+UkxJ̬Vt^/z( qE]TO1jn-{j=\x'RRȩaQ6{/aC qq]Y.H!Rb $@+@~XJJ22Y`MHn4Jn cY0@r}`򆆂6[)Wc !=-J*\FI/!+ŗww-CHts.5n5襪Re1A++eB1x~JVc ٺ_gkGqf|q;w@$K Vm[!ka:ko$i[,18~)=0F4J5;>)׭\<Bxgy0 euueAXv@F];g yE }RҏUL>UU(,XXYXVpaIVà0(pbd8%GQ^A.BG*Wed@5*xESY\2hr5S.u;d,Tcl |A!H0% 3#[gBy.,:@.my% ps[8vL(@7/Q<<9*:td F֩>V{(0}ئj+,:tZy:;-r{UGg8LOs[[}y:na$t4ΞV5Tw)^` CC7Ѥz;NG4,ptn :: Bߤ/R"wENqM6||8ZELP b]s4'î/[ᨁT~5"6Yj|^j" q)m[CQX6kK;QalBߧ( gƑgy;SB6A B+*U(2J@e**PX :8jyu=A ruA_k-w/PARZ8?Yt'y|%fZ`'` ~s;._oГh l : J!q1.-(,(r--)*r-4 "T yXψ*HJ+r5T1ɟWp:Zj lYX,iH7 Y9%Dn99g { d4ł"\Tvu(SB0nPX'vNT Mg뱣v-g$z=dq4Ɔ6JGi8Fa ‚,$zFmb)La4oָ|Pؙ,Msp;KaEmP"LU#.P؅"mdnHaTJ?frB?P2)~ѿAmū+l$z:>J]. ]#]P* Fx v5 F跊0u0g Z <`JqtfH*(G{ Pص:VmeP ݤtH0! 0!HDJJ 3~8qA$/=W`HBPK+BPG; K,CBGPʱAJuB%jH/&Eê d TaxRv"LCQv'kf)F 1]5Ҏ}NЎf͊0GI^(@K#q%O+t?XۉN& >(?w-~}R0q^'H~?pW( 5;F7xx[=GjNr؝.ݭ{ؽcFh|QX?Ab)~-Ga{S46DCqMܩ A+$ {= ? eK^3oR ^ A1LD5(B2R˻;A}[)7LW PĞT1צx'VÊ*)B:Z$41+ߠna >cShƅw}[B1BE gPnbn 'lhw={?g,gy/s yv^@wVK0X}^fCa*h&oe+j:ѧ8Kh-iogK_^a*q Gn 7SSNdI?i S ·rdo)m"V*]h@~dm=*\b}d@?>g>9oA0ހmQ/% ` ro-ZVrE4ۭJ;}xӰ#۶6tk ۏ/ vG:buav%^T/\a:~&P8D s ΁ט(%/ }g$O4k]řbq&ҘIPhUWZ&3Ysv PKD@xwA~/Jc*&i؆$T!@gh3bt @Fȉ IӼVk܁W6-VLVSbR M1M0MLɊ)Ŕ:5t :jPb+4Sbd)\dF6wu<嫍^~UG(&;{oVt+Z.b=Aow0MXar(%t ,ثL!`i.2lA\,9|,`υsҊVyH+E|-beXZ㰴KcʼnH+G,U`KUXR,-Ò K˱tjT:,cK'cKn,5h+pUi;pn , |4tv́s0r, zܕ1օ䈎SFU~my02vZF\ `.|p1p)Lt`c!r¹psIq1MYc =2A#C 4aXE8{^ k@~=l_Cs-wgwյ52G~45ʇLߦNc%JU81Z^XȩYG騐}]x'~3epcUN0bU劊&W}]y  h4Fx`VwpXQzB&L~z\?61O"UU`c燞4$jjp0jfmU }XisF@J~9W4c |O4mX1[\:̄׭"9RS*u~GܸԴe-_ǐ7 +{+BZv q2׎MX?kim L-UA@ P\F8}W7ezuH!n݋ƌx )<oPV'+koQS?JӾ[rƘ\,1MYͿ͉ܽ,gX!@c҂\KMbiiu.蓩?FjkdPZΕFzto[o,ĕO0bR4MҦ 747T5c))Ѣ1Z b5.w1-tZhfo!vAj*X GQG1{U|m-5A/Wp@#$s$"֯y3QF_M;1Թ0Zw~?ޣaikZZ%_L8L6: }nԠ/lF&A.5^5rN8-y#2Ҋ#6aq{\Ѵ2Bq+ ء4X O?eW[ g^C WuYy!L_CV I^?6Q()oď ˛`yqVgv75ꖎkƿ ,ײ|4 ?NB.57.hm`H1jLJyүUwM.~T2=;HYٻ9P<9~~ &d n#&N`x\Y/'2L_B,5X*L[=j,\w}<Ŀ#!G#C}##F>RiVيV [ŕssAdfę"0c` BFAԩiƭd:>h !c'pcL|[{|+&E9j;K_մU5헣+}-?ڴgf om<:#H*@x@#wB*%`.X5bf%櫌$+lt&BTOb)F,*Qg?r|IȦ!atӢIH~v Yl,?RsIș~t=09HB$8s'S>͆' Zfb @2rlIƒR9uҤ@(ԳtPXa]գEB񨬇'!p,-{dzlq7BnڏtJ!!=W7ⷱӱKك6Pa7cQ!0i>73WIc:5Gyq v|m RJ8ôΨzfwt8d }IJEx@06b2*-6Iv'"LW {11&&JA!b2 ϐ* TxP-;8L1nF{(ki*@lIG(k!I/svP)Lx~1):);:䡸Ȱd! , zTQ4Őb6$lLq,ɞdvVSIfOb`I4#BnЊ]1?$#7AZ: 2\\BL63._*p8x$KTtb/'fSo! [-sڭ9Z0G+11Ic hvI>Dj$a=D .D^ɔäC ȯ(Ek?2r8j)8Ÿ6{RLHG}X0')fU訛Q}mQepdFn`H)|T. eN'՝s^R&[$ޏ&X5F޴:9t&,1ܩ()> |6&K| H^m`s0GVEYSU,M섐 vf oI϶i [.zI(BsR:a#7M<s@&ǭ¤Ke{[C6K:ͳ@ҌVAR#]6X"vߓP Qa qnr4 I ZQ!w /T/b#S2>b9Xrr gHl۸)n}G-`vdLzD˅8R3|Ʀ1HB*\~%>.{,O0Ltb!I|)2MýΗa2JQtMɖ-+3ke* Vb"EWCcK6wy.ѶVӊi]dn>N0ٚRpZ FSGfզ*x<:c#kS pKaxmoݱ)V|)FSomdwb&Bn @bNbX ~lUTs~OKx:]Gq=Z8 "/OCfj[~&}͂(n<ǒr,f$N{96iev&O{|Rtfu⬎Y#ÙcJO&'LeL>W˳ &;cSc}CL6Dl @zG=jUD*'9a*ˍǧq>hQP'-OGWtR>aOS:ܚ^=?H^:iF}^ 4<]X=L V?,8|nI"s1t y,qmlv=)MHb.Nb1#Zqb1i ͋ʆgqG6Ma~Ɇ `q>ZHIhIzA|"G4rpua :RD0ԺdͼV䴙aVeg|3? AL(~h)Ϙ(& m54$D}HL̅mʍV[ -6/(^QayVaTuFԴ "Uƾ2֕I몌9ATxhꧫ'eYEnL7O+rk &f^XSK!"z5-HA~? B?~Z k4W$b~[i+j"\tm>2% ?w.ӈ-2)z\VI]5k~:HUmZIHEkey B&TxO}uЮhk]iF$M' kk)=n= ڐ~mpH42 [f2v~z 6Mb f]aErmvq7týRp`pBe `tcsTf0L[GPDag?#B,)L ~.D+ <(i@wDHݚN/ LBEeI`2ѼHe zR[H/\M/&0[r3jrǿ&7qMwzڱ Z%a$|§rDIJ۲ ?Du8E^@ e$cvr^ 8ez9+2.~A"BtU5 5z-b"׀QmMjkn==BotSЎ8wD-nM5BwǷ+BoDbEo.F]1z'z+Bz{c{#}1}z?1Q"t1#e0B``>}У1ʣ @OƘ}XrAbi&N4) RZ'-o0_߷giG$2 kzP+sY<gd?Lw&@K>h"žl9}LDT|RWꛙ &GĔ O6)w3KOMOfswNq7is:} HNhD%N HIsÙ=L#VM2WA,GVh/PK F|$>V"fHY0edu/harvard/hul/ois/jhove/module/PdfModule.class `T8>ݼCVIp$@4&Ը$ YI1phZѪjbUT-VѶZw}_^ 33$෿?$3o|s{o?COF.7|Qc4c17a< ܘȍZ1 Af@|d?0pc*Ӹtn`\ Ql1n&7kfƌ+qta۸ 1/ap7u̸O.6nč|od܌y_?9`ʌNlof܎OwӝŌZ̾{u?͌+70gxgƿo?q71xX_`G|`DA>4q~f?I1Рԡi``b`aߑL}cA:db( 1 0& s (b(dL2 &bp(h 'bp'c0)LE L+4f3sN4 Y$naª3pܜ99[\|c,f)7s0?C,Ky.0Of7brLWS%3rnk*f3YƳܬaf-7Jnz?6U\Kgqs-µ<2:377@f3<-̌yFs vm~3A'V."pw3Oc b L7y!7/`<cy .R . \ܼ;_Uܼ?pkeL_1}7oW-7qfn~pVn~;qv6ܼ lfܼrq`zCs|$(7󙏛}7n&O"0Oaٷ1؇`>pn>qyn 2s7_Cn1_揹77_6_񛯚,C^|O4mfbSnoW~ov[?;fOkܐf#XfOH1'7POi>GO@syG"i9A?DK]XL`0gϯ@Y~ P+[6V:V21FbPa`+[Òn8PX0{<&`<['pkNdI~mu2&c3­)ܚNZ~kUBnq+ĭV1f"vYܚíܚǭnn-V)[` pT4H[n1k)&~ǭrLW5˪?`eZjBXmkp c:jnp[:[jV#jfX ,bznv5nqV[|fnp+co`܊r|nmVjnŸՉp[qnus[[[۸[r"n}[3ܺį]f]ʭˀ/prb֕"՘w ĭken]ǭr#­u_*`p+vbbmܺ;Ҭ;-wqnXn˭cn 7˭ļ0n=ʭǸ8-n==Jpk/ }z[3z[w=n}[~rGz[`}dDf~*L,n-0?,IIs nɭ6ֻi3UX%䴇/X%gMXsO{h$s'w2@^*8<cY opqVJԥ [Т?tcG<wKaюp[lfJuг wpg:]w*C"'I*7Nd$̨p; !pW=UzgjT(Y*dzģ02/M_c': 4&A4Unc#ܦ`)Ɓ@ 2iOftqF*)7}0k2(z*a0rvފFlCp`LQ2ַnƘZV cr鎭@=u(3TAĺ.ֶ%ⱓ"HPFlh@5;ͯ:.Lh ӇsI2dFA!:*u),8;j c?-Y9<`k= `5b2fJ9XZ1#]XG\?T ! VLz#8(/ Raּ+ J&Y*gdc `dÒ^4w<+93[TiwKӁ[bg#94(% Q0ـj_¶*ZjON4jSa 0 xGHv@9t^2{ݮcLwbi=ߜIYp=i( oS۔g AEpfX`nں3J3Cf, BЬ`~UC]pּs t̙!?-sDlo<'L(-+eM"-8ޢ`5Py+zF Dଅ3g ͚n> ˃ƃ[#mmvhv#x5f;D p'dcE% аIjʯ>6N:Fg;5(ɞ4dW0`=$^霝FԨf@sQ5J2e>3FY.#lvA,aGEʬygz | P{{m̛ +P2uQ b H.]7ЅHZ"f6;k ^ >kb1F5٬-dʱ!-o4oYdY-f|Ђ !pe%̀o][/B,<.!km:ӄRNbm^o3f9\[Z'>QVח"cPA%0X Nϰj j0Šm`=gcpbPVkt lD 6aЊA\9yv#:W~QR4"DfKB F(emv.G߁$?qeCHx2!,ژf_dWjv %FI˾RZd|L*cJe2 5Ps&>ɝf8>;vEmv; DkM4.L?f9nl1'Vu`3 (f7F}e8MW+xf7FHtFɂ,<4ӵ=خ0{c|X/Hwhq0>UG6E l-#tneWR2Y0 LՍH7G 2 4%NL*LEYCVCUeJBk\XAn(nvp[zTThU9 ;RgNY ಽ((Wmvkٝl5`C^h渋MI8qmPEZf"T_G3a7A4FUs#f@Cad<&n ^ݏVkґb&&=W,i e>5׸F"|z`-#XAw8Up`WLPehC BNp1` j `k׹lm ͑)M6{BexZ Oe @Ym˜ {p Xq,WxFQƫG)5 JLu^ jf J7En sQpCP$ :١!ge l # OBx LHXq/tc)2-=YҶY>b@4Eh!e`j6{ i_YۦThmg6ۇU3 NňkW 5<㭄z=0~V ZnD֎Hs^頙n9#Ͱ䲆u͉+C ؽ9-=x+Hn0& 4^#!qV5س6Ϟcy}kWmADx-,R#4,=D g#'h2'=OlCU"1c/'0}ϪYj!2q Wʬ6{f~{foSpl[{[q<,@fGzFr\U`-^;< ǓGL0.LcsElE3sf/%ҀL8_bcQrPlooN)Տn Td dAvsmoVY_c<& jܩg?@&pF:*/hKw"63ַ,EXQ]xٕa0<(w6[ߎ.voX!ki;2҅۠й;$4lI[KcHi%ĶrgMr10~:zqЀ`LwGZᮁJ J6W]:6F7&bZHb%g]KAM lB_b}> H9[I jBWD`F Ū q{KMz6}N2i ;>\CIۄT\ٱ٬ ɑ2m&2Rø+}'Ďma%ۄbB:)r-gU;\U[7T z_2&E86;m_&S^ {RW \cM;7sAݼ#msq*b=hs@rY ftilm2M[;ګ YΣ VX\BgXH1О6g@cc !pwWܴd2<ڧ`2>S(IJNs&.ʤ,ϠzD; ~¬*x#e@Jb6vZm TM5^ <6U2. -)n 4lQ4L62, V!  c,$q<.8-AT#ғi,5”54^mr7UotmRF *Ec)dz;#rI4i,P |϶ fpXgc9hsa=mG3>?f5D4Ɨ>*\U!}?l{[w¿rj۝~TpcY?"0Г1(5YsY݌ĉe |3abHyo:8aW7q=$cAg2>qDA)o@TTMGlLۺJ[P%.G̬ow,`C3IOW!mճ, BS,,ovBxįx;lgKm=BcBr_Ab>lm#..Aw9/%7.3v5᠞ ' EDYbMMV5/o@l>dBp;QĆցU'(N%"fIV״9R|)+񖊛X.6xo !פUFjǫ0KȀcSo;nUrk$u!f԰Q'am哟7'3 ϪW-}eΞLvrbI8Fkj+RV[nT<},RߢѕU_ë'ʝ]I ijh2 F-!ISK+Hg?Keh,\?ERJp 7ٔbu55Ua &Q>lWL;eJ)ҹ? U KkA 3\j@ũLJᦛ(sq_ x ye:ee+ nӎ={ N"WyVcem; ) +ݪ nÄE#C5a?5Ix%0kʖW R׊7|JA2N R7w𝜔f4dn?GO ~ϵ9#m"UǶFʅ?[,UF1D:ı< 5n|3'o3F] P%#:F<ٌ))cp[r3̊\Ƌ&,V(9Km2q;(na5J:~GB~*1uu|]~VD߄һbH.=ng[H"j \e9u gc; ֥ۻǴj}חW,b`ubLZ-r6(:1p )qhG>oP3ȭG];]|W7yة|$Ql\@ :Ԥqy Gp^x^%t 1gķ8x:ܒgǰ5+|}j>@Җ]u{quU+j$&/fj#fYu3@:K,(D~g y2 K)!_9n϶<^3 G&RYNlpB~GKǻ e VtVd}A'),@wC#/tH5틳SĽ6)?eb$xm31PZ^-dIbo~$mũÊv:-(:MC m7ք@cһc?x>*Q:pYCꎝ_fo8R1P{I+0y5GSxGV5UՔ-l,(k,S;xSJ:ig?[#/"Oq%]Tqk*u=!Q<ɊrHإuuՕeB.lv5ftU I7VEݪՕ*i(0|a UP)3>{fLQrPyOb U}X{ChtD-]Q4 c䮉jǡ?w^cr%NJ|@K 6~ؑu1i[[{ǦH\M+*KS_Pj"?pfh\]'ԏl7-RyȉQD%ky~{ ~8B܄O= i|[r?3<4Hg&гQNZφt' [s"x@ U\/)*^%*>UŧLKU*PqxWJŧgZ5*UqRg^oqJWx~תx*_U|Uqy*xUܢ∊7x[UU ?6c"T Dbe>/۟f%v(O{H>6;d% $0;7A G'Ș=d>X=K&Ԉ $ ( 'f dJQV Ӌم}h/ % .#3e 2)2[#khshynG%l8?p۰ S-#K`~Sa~`~2_({)%] 1*p {eY6tU I1 I1Ԥ6u W#gͮ# }q/Y-X6{M9uQ=r;L7 }伵Y^C6@}ym^R s[KMk܀0$K-QhB+`&H>ҎL2vrU` r +]@N7}قV a!>.t?L!SBQ2f631~ {\\_& XYx}QuaV8A>w¬¬X203^!R}{k'y}ɽ$X3$$Y<0ho/`A/w_AL^b;m/~LL"Sr2}A8JBR('\ " r>]OArX\b}䆵PZ(^rr3u UAki@k@N-ko#_#; w!a=qAw%ݻ8>#rɽ{n>TPg" pO;KcC}.2x! ^yzyq{}z vC- a`zo 31J};T)Jvq3gV"?K||7`}|9ha/^C9G(q~o1_:@NP~"3a/'kx[dzk~dPfq xxp:x ooo[mowew[]oHD?3BsH~/ Krm_*&-&{ Gg~T X?!WrHSo2w` P?)OU(.E Iy=#rWq~h?!ӯf5L,DcL2z uYH-3%iLr'fB 390f34Gr Jr.D/]+!L߬u[,)uȱ?cgd1+pt9X@C{'ه1:\18W1x0xw1xC@   ~Lç  21`|4< Fc0;x 4Rt,BjK?7%:?ٴBꢤ̥ Mo5_KyIUn)zNI6P]d b z"` zRK*dQe\bYYiD=Q4o6|7N,|C76t:C!FW$t* pPK8d:{:E@!\G`=?AC$z+=Iɥ3_4KgG\ȅoh(+ʹʹ :,I;ʔdBсg zP.M1aM2L&h դ/o \Aѓfܣd\^ Mǝa(s&&-H0f NNY{{isf_ȡ } 5Ijt4.^LSHVnaӂL( k,x~zj);{в]X{Z/}0X`.{xkk!n u+50b~B;_r|KljU X-It CPK} sz':AkpH{FA!nOͪ3 ;i<,{s{}fbh=aVzzn^8Ruu$X5 3eK JX55??@&]Nk7.{?ƃ9tmi"bNrFt+M'٥=Ǽcg Hg[dSP'醆@,4 '}%` /^Y龗D  w:dl̡#&hT*SYBG"} ?9 BiU_ӷ|)"~G@&5BF3}7xka|B*O:L@f7\;jFC7D{ ·~RC2QO@LezbZeTY;4qK6 TݩG|YMH|ckꄦUw)X( i (A;죱E{i' `1~}vaV\:_ yd< n'F|{{¶Ds% t$0袝9gDB$2ձsukP5Պ}fg,+{@EL^R+ / {  "E:& r .D,a6I7"}à}CCdL4h4Irك)lwò 59FhtoGY K Ϥ^\b(?h:.)r4&.nёCb!iWU9Qg'79ZKBXq%ːKH 0C!X=w&6l$4CZ wU`킆RSHϡ$s08@ {@^uvd@RK&JuC#bG&zuPۃLO-dŧ&fdOEX.'3ɩd) fjsiڽ}>+g7!7jX8 Mȸ#9 PGTxL>&_hsl(p7T*n?kI#2~rԦ2yry SnLjF=ɎiI)B[ҟ"D;}Xɔ LvU䄢f}QS9(yxEC pdo[ Ge d`spTs&׆IGР.<8R*%jh%PL2]f .{\1>qSr_ǔ%3|c!$ YV~A{B9ӕe4O6M<&P1V Op8OOSYJt1Scr22̻IZviV/}t_iVA^f +A%MsK8egpT!u bFϢ*#_$s,+ͲR=Ͳ7ClUg&in5$#Ih1|^^s-$: Z0ȋ%W`ۀv}R9HA?0iy%=ݢ#]%y0+'A2 1LKn>k8d =ll\ItC$=9'5Rs~?9?ԜOj΋??9?hK>2IjW j:J5M^ ?%A Gd2 R^x@~Q>@-"TorZпo o}#%A%#*  n&q; N8AK\z <[Y wzLtT\ w&Ib&H;k @Khm[~-ֆȟAu :D/Y` s) DfY$z@EVV\K!Ɛc3"{TL"#+kp׀:ӟdSL6!y_ x, qGF[Hb=P޾ h$h A >DbEsɢ;{ɌRB0\Bbo"aTA$K>&z0ܜ!_NNm9ySliIg8%ǧa?K&dDwsc =ŐS`]PgLELQj- 0\rL59ˁ-3^OVP\݂hR(AQ<7FvGdk'6~9cJ<@Y;i K9orćGI.l>AyGI.<w(֦^pX \NMRûCr4#1w5I@U /U@JW=i` ا!2>`hLե>-OMhy%YyYh"GF iiv`U  hcفlܪF7'/vc%`I,$+qjBAa%@`z,p mkWo(Ka溝df-}@Oh@0/ipVyٷo&&̨$vD/95>U&a`UWA pCJo'IvRI>}y{))ͦfJs@.N4I' 'mZŊSI&660X| G@ <<Ѯ+Xyk:i:z UсtLGt<\V @I7<̾qJ`3y7WS8{xq/N H3r=N&'dKi}L m'$9C[x'?P<Ϗ2SFӃ"Cdfܣ809 FCB~"cwjG#hzVʹTBPU /5 P MAB ]dJuB뺋9 QY`졹_K@rbI8ճ,i5t yHo6>!"L\OJe`}65}YEY"C 0[ǹF )t5^-7hŖ B~F m§:YyQ klaɀdK#pyJ]&zɣ9d:Tks*PU9d}*rdc*'hdT1W)z>sM7M>iAy@dmjC&T">6 ~*2mZ9){ rb} ‚ rqB.1TE<MB\Ckvo4r~]@fa_Wvðxٹ6eXzv ڝHh0AP`8$Gt1@@o(a@.z9Z&N~ZL:!-}0ٙNh*&ܡv-rq98X^&5uʎ(h)KcFz*-]xY/i((ȳ&-GE3ُ4_a 8hT[`2]Uu0 ~MmQȱM|Q OV.9Te]V=b&+k 0͆Lee<|ʆ OʥS6=a:k0 Ed|4kX'dlx+\nX!~4"VBZ*UtDnlv ,??D7 k}V7/]$(6;ήv;"sQs "K1@3R=brq:5R8շw[Ob"(-ƣ΋D =ytGk*EYcκRVnsڀ^o*9_2ia#0~=Ud 'Y]?F;eICE h2JYbȇ J x?0ӑy.7uvnu#qU3LmI[8qU(`'-py%^Iws:YBz[@/-{?&h[zρ! m+sk}Rfc.^Rmnm.%rϩLFHXܘ׵v?/>KH9ңdXEha2Ahߚݒ}58 %d!0$c7 T/N2pA]61SjD^l"Uyǀ iCBl rt_)ʱI!=}ѭR5JjqjЮWxB+R*1 >9u zmof`7PtTdG+,đ`k_A݄8!AUI[;`JoP N0#E'`M.\&' )܄^2s[{+y}[<\oIKM  sJ v2: szr Y]7!M AĝvSĘG] M uyjr@llIw&9JZ+$ :Y@ ]} {]tIteWrCv%@+pA7:$ &yp^8xxMxƇ{`E BE'y7p\9<'#N˓F֩NSSZ YV?$c{7}Cz D_ɇ*n?GF q6NHʵ34bRW"=Gc7#܏ɔ~299(QBr)i6\fNΑ1#(^ 5:Sx촜|PO6[G~X8;@wO'(RպO^ t},w72EK٣ ﴀqi>M ~ׇrXl+>Q#lf s$V?Y| 5+$1‘>}ILaǷOH N~A;E^Ih?dPݒ̠_7+2,Y)-d7EK>,ٍE~WnA9A* "r9' $h|p|9C)xo1d-[ 2IqK"htISV< j=/ϥ^ö(i&DyWZE;be磌,J,xZCW9+9Y ?qOS'Uઈ.6׻BǞTt|/xx{T2ŵO՘g A=:0aHT_{I.n<>:7 xb&_P,骂<ȣ,0Q+p&*pů Rr9Ww]^FHa*E,x1C"}}/xA[q0"GGymM>\fzbˏ{DbcH;K+\UOkpi<\>Kõɧp_/Qou*i#RzkNWl14|}Ȇo~z7l֧7|kȆoz÷7 ]RGCAPOAiRB_#WD_?٤fkDRж@AT /lEV=x*RȭET4x,UVߛnv;̾0D~W{}% Q`V9Gdž&"2~Z6T (Hyq£ܸnBR5xm* Ӆ`2a|)갡)hri<oޅ؆TǠEsMȌ1&M?`8O~&qn7D`J%e07?&n+dqBcw:E#NSht<!.uӲD>HHk4śe(TLcrm 7u{`ťj5Py1{93rSXl/pJeF29kk#6 :PӋp3~jV 8iCסB&gPmɗMog2U50AR]4|TcgEF[LꝓG 4 D'@w/o9 xT/1 KJ*8rJERD"@s. vd9TB%H\RJ&~}8i'MQ7zWo:#3qbG1WN<e?;̨o ðz^w,(rj-j1edu/harvard/hul/ois/jhove/module/TiffModule.class} |;^Ƕl+α؎;v#QTֶY2zz=p -(.WK)҃hhfWv\'9;͛7ofwՇ !5a*9ʤb՘pVyg9kk8['Ga8[.d$]9ۈyg͘ R6q9yK8kCv:8 ^Y7=إol;;Lv\%-boe>9s9,\ws8,Yή,Y 9l/g8}gWs6;8{'gݜrv gr>8 gÜ}88(gC'94g g89[9I9;9 ~qv9l8 gG9K(X&{d_e}M%ײPcs1l:C%a[9ٷ9T@>~~O3~/0QPٯؓX5o[=g0yVaWTr/#g9L*/rLW7?Tr7{ aϗǰ+U,; Tcgc JlO"SM6%% )d@XȒ7$?U$ LUR,<.idcy@^H9*+5OU;ɉI&Vx.Po T"EZ%TU/-îaI: T:`Vc* VB.RdW:VaRV .URTJ5R-[V+RJ3A}R&k0Yu^.]H4Gr(*eT *ǼQoTiM*]yJaޢ%T|J|J/ܫoQi 旨 6cޮ ;TZyJk0Ri旪nG{U*m*݀vn|J1Si+;UTUچ[Tځ*|J1J{1t*݁_;1r ^0ǘaI6`7.2cǥFt%QLb1d/&Kx&Wsm\z;w¢ťws=\z/ҵEåjϥp\>̥^ǥ \(>ƥc܈'1>ͥp &.݌-\\ Υ;t'Bg1`~78\p^̿KX2SQAc\zK_Q4J:Ht\:H_UC̿Ǥ8|1yG1L70&&&;|7'ps\!~ĥ+O駔-U|ʞx4\GIvS$mШA^e^J2Z;{)ɻl&"s[Kw&۽-}]PT!bK35y}EDM{{Ӯhd 9rL>`-]@/Jjh3C^_4P94c"{H`4dTƃXH-@9ޡ/JQ\v! ;W <&bltם|İ[X5Hٰׅ BXoYwE},4g*F߈Z/ZƮF491#0`"Jm@)q:F|JNOUt#@dR{}#H? Ez\~)CHO`ʞV_ދ?9Hܲoa,1 `cj(@䒝.eJyϰ G5 !D0~Ld* <7" >>#hkmMt2G3(1S9!΀4HyY:GţaԸ`, ˋ!oF o8`K ,x bFhwY.&\_ ^_QNGxW/tV6{{ڵr=F0]:1\o^on*ۻfl2s2U-Zj,-])0s u::[eKxukk׮)5TԈF][6@Oo2"b8(zɞpd_'A>V`w KL&@=7H(M6tYuoژu,7F47hݣV_0>40қ/!E*=\#C1Lj}JwI[#iM'k t0$c5J5zg18F@ !P96/BxsF|lΊY L@P(FC@- h UO%jq~lӵN6#<*7+ۃ,8G Pё!  Šs\8ia1lk6,X1Xq$fEꁈt`Xf/B fk'Ch( bMT[ X:#F4t@.-lAW7`@vK~fv֮XӐZ=0F%vZ Yp#0QF4g%4EFDCqݫ-=)тԙZfsЛ(A|. 09"oتAMF@u~-"fTh,=n8!K/~G}M4zVpd^.{Uz{Bo8^.7  B5;YKWׯn(֮v6iab= qk5 &AzV(N?f!T"=IDZoc oLWhҋӔTƣwokGa$=FDb/E>}*wMCU55zw}UUU:A4/8^P<>⩬ܷo_G+58ƿIwUV8VtV.8 h`d8L WtAӅU쎍(?5_˨W4Uߚ"ܚtN n FaDa-15kUCIan2+GQ08z}\ UuZ-mE#zwQtB@w GYCR`a{RMP!&4K, 5(zQ}9؟tb>}$Gv5W^4?. n^UWW@zm#Ul a(Tz5TŔjl2%*p\" :1]mLXT=ze MԔp%&FĊUKMQkUkݸa/X  W&ĉ\_ݰza?4 4l@; P a.`b#rI)֮u5WI G +"(8Gx%gr(,P\DuyP|su," m'H܈h5NG5LǺICpܟ+GxvW@CPd:n0Ƴ8`j 1LR $]kWA5fpn?pKiQ3EH'iE@87L ]W ɥVx-aAE $AZK/ۤw|?M4AWKU.'eIнޖ^b5%Uz5j;Ú?Bg5Mq5TZ,+7 `=_K0[3 ҤѢ3%NDI-*BDRtOlMJhAm^\R 5}]ceME&.M^Hb8EȋXDΧf8MsM^"/d]^/Sদ /7=E߄uD̍м?||>&hrUBWW`yQ'4DƸpN @ڕi*v$̭͐)M75@ް YE&W׻=FJkRE:y5rm*Cra +Ǿk5#S_QR: cM^/_ih%FM(7ir3V[X!%+f1h4m"$ZM}WJ?+oK`60W MFQ&wȝ&wKQUHU$O/K%8Mِ{孚 .>M^f Zx$CD+NML\ߢW ]8ҷM,?XMltx'k_hlEh`+g%5?ٴ!MH?I29aѨi g<"x֘1az{7 쑻υw׹B^s7sEsziܴxon:'\Do~۶~.4f}bך3ƲBp9WhZ7n? 6YJ֞ j>M>p2o,uG١ږCk;;CkdYv6++Bܱ鬌zG Śl08-?p$|pr|EB!9ɻ1كqwa %,8b{ťaOS!0jE&D`0+;6I()MxvlgSZa#l|dOAp*\v&_Ϸ^xJ>,T(qN>NU`{֝P 3 [N'ǗzXn>+7ϷeSN Fnn= h؏l}SšK7PmP4c_h?7p$ǣplćۣqyΝx2QǺho5!H V|oR]Wƕ!9PMR&d?&p<+&Pj;Kc:jJqZ1p ^Kpu YV&^F0f}CFXyj4m8HۼOGb=6͗&nj?Mؠ#q$>߁J(ݲ, "Ku9[ vX&oV+/w x厦PpZjw•8Wҗ^n ]#E: g_ܜkk5}TqZo|7y$+j MvyդnkkI8*|m RVBwF졧yK /)}P0~ wSWޯ9B]kXF42"DC뿞j |7Vq|#>)J?5no[Vy-|0!dōwʙf=h zmm CvQM FIIŒ7nSiO3l4EYh.3מB7I4`Mǜ|uc!~&qfzy2 Qm. [_²Z65z;;!_>`(aao@AIf*Tt"$ k./vHlo6ɎwޮX/b[ ?hh!|̪̎ΎV/nJ0䝽[h|MoeK=!4hoj},C׭1Aa;ouWcWWqc[ >2;:\rwB iK\|[m֗f+vY듖-=b_) S/Gd ISKBqChψoɫos.M=170y ңa&okMꓗ&uE+xv `QK&mɏ)k-ءBES* QTӰoz֟ȳt A7E #ltb,MA. MkK^9'<66sWs= Si~ cX*2μ rahƣ,m}=gߧXKNsy6r`,C/3n`wتЫ3LI[f1AJwIe21cEsicpO:cۜ΀r- FieWIBH!YHM"VgP>okw@6?P3yMcd9;^-B՗Ulr'ށL2}:>Z|;3;Zo:$ڶѶO>grUY#oMQY3!Hƈa#&`3$i %ig{vZ{fU\J0 YSɍu*#`.Ep25:FbSg:Q$}3?;j\ ۧAaw }WRw=StΠkNKK'x;dL9e}Rk\|o_1AO&}ȕikGnQr :5pv2(5;!(%,>##U yh=AP,( rY&&+=}޾c䋹_J/;3> 9LcdQo#|08/+c($M!cȃ=s||x|5dx8A)SGc}#[(䛀-H/ANoCwN~B1SϜ/O+89Lua8 {4WKaDܗrCӼ#gz93{9rv/W}m.2SҼT/O:0YNP =<.r"e2]FTF))F#?B>zObr<,|O.(ж}`ꂥyMr)ɼ ACLMeX?II~ѼILKz,C` !lvL3LJ,G߁ ?±l""YtA\΢KŬUP+(V݈sM=28О^(vxvHR^#* ʵ+L xRZ~M!4QT@.P aipsF;-p ]9'H+k oٮbrJR.3VZ0:DZ0324__*|Y|]7 ',-9FKөJ@]",|E )g!mQ[yH]CmAޏ%NMt-X9Ns.$ubT8sIV:Ds.);D s aM0gPn{cS>Bz\o3]F/WPx$#>`ȅKaK -q*l)H`[[&DBPY6SBIG")N8etd:s4 N>Y~Ա:HCSN"eJҼ<-@\̛&!HD)>Ez4=@$ܳp s=yxp^q2އDƯƬ "iQ4&O.O%l'*2eKݒǰa':(DqW:VJu=}yR<dd²oYAN,c=[L>RVv:\ G4H &r@NL'XA{x=(m|%ˇ"OP┿ c:0B._8[N^AFqHQA4Z0N^L~oޡ';\wxw̛1ڕρ=l md6do.źSD,KPTw}Cĥ` b Kq\h'.rܣ J#&  YYa%ddlW+Q:~߿-cJGS=?n?NLXĥi,8I.S6Ne&Ҳ dbkdE%դ.*;Fl[e8ώLŤbR[d AvYqHDra,;G&W Q6ܛb[@2N VSd4uX"5KҒ(O|H-}Ru=}rED<ϑG kTPK F|$>fGr 0edu/harvard/hul/ois/jhove/module/Utf8Block.class |y:$O !c HFZI @B2l|awzvWBv}߆w$NLm.HMM'MZ]Ӻa-֨oy׼f3cl3Kuui_R7 TfEe/|+7o|_#xk_'z|7QMw %x"_(E_,%_*e_.VJ #xa|@|P|C GGJ𽂏 Oj ~ ~7 >.!M#G n ~X m>!#xRpWpOT@02b` RUsXQ8.Σ*gJqގavzbhy?ƄJ$N 'T|*<&>xCꂵ}OT΋QgyJCa'1r^>b%jJIOc|G]p!`|C弉&jUZ5f[lթ:>b*Q 8g5Y׎z1+x 6^7dŲ ӟ4Xg"tzvH›:^,X3//trc񝜕f fcαoq,W>Θ~oڮ;w[هq+3*o+0G7x}BM,0FQ >|^Kj8W/같Ɛ]U]Jl6Ʋc%-[h XRڝisӜ-KQ1öCV&c%#8ͨogæ?;|˚0L7fy)MƳhX{tqoMMoFScn%L5q c3*QoMbFmMĎN$q]4VRLڎr,>t]3YæcN$&6χL>;beT+M7izՃLba1I^f#aބmg njވqv5pf[7ZQ/47xi5UN* ]w)Νm,/iᡂ&aTSK5ZS\h,X2o:M>#¾2FM5/X4ZbfgS]?hl?j٪1ˋf*oZٟ{' =ӫhQAN[m {)/Ɲ\ٸSLvtac"YE-?o,;[ZP+3 ,!UFQ8begϑGt>6͠u܊i\q+W}p4-&xzc aW)LۼJx(.QҢeԷ'1mO[ECT/[shXދmV^ 39 14 ٘XQZNA9|KtnO 4%M)Cר4gzʎezIl: uM:7}#\ktj{:F\Agw/R}Wল| 7_.bbGgOII'MW}^etʷ^㱒H7/Z6Iu֘lmIsxf'1M?\9˪qcSS֢sg9=DڙlNl`h&;h %Ҵ)/70F4Η`Ӳ3D#Fzd \MtѬ DcD]\K잁p=Ӳ;ִHt-Ln `蠦 > 4|J`]iDIW10 F G`q Ip#8!7O`jHC 0G f V n'4 wp'w5}  !x!8Q8 &4 p4|>&Hj|>Fj8|>Ii|fRf3Y4|' i  Od4<_/d5< '_Lix; i ߄o n8 n]=}[5|? M n##c??4/#- gCˏ'SOEYAs EAKKܣ%x j[ܧ r)Z jxN!- a- -LC@*]21edu/harvard/hul/ois/jhove/module/Utf8Module.class: x[ѳ+I~r(!d[v$,ۉ/,;g[AĔr(h&$%C -"+m'[z}!gI8&wwfgfgfggvgjemF;l%7ˬVQ.KpuX̺l3Uf!l;e_NBfa;aptY? ,J21 Y!]%6Lȝ$yW>Fdv5~̮!wZ]'I 2{#=2D$odvnDpOhh=+9}Xf{@}Qv?5#jR 5!:`;{G$ \n>F'=Ξ Ğr{Xbfh&]&0dJ|J$(OK3=,R9j>/}Af_$K^" I̾F|]b W|-m}ľGJ~~ ُ؏p7 J4~)_њ&ߑ2#ٟQ&??_xdWfu'1ySfI2s B3s[%nsah4"sI2Qq!xE 〗y!͋P fw"H%2_ 2w||ϒR/&2?[\y2_)bȼTe2/G2y̽2yW|keFkeNu2_/%~/d`m42Pww+cxeHF8xǍذ@hlnĎo0kjhu2}&!msco-P;[}́@gH,hmj#hA$jo :m XГNh`077 l냉x7ݽ)#T6JNF*chr@b^{L CFP0ݑ,4/ldX47#Bm9&,d0;Wbeh(\ƣF41t''轲%RGee"FQݻ@hAKFfT:E7O aXK6NP8I?h:@/>P aRx3%~ԋ%Gcv@1`6)z<wCFCW~tg/k0I_`JhL_Ud$ވH,ln38@ ,y݆yXrWgZRWYW]|JayאųVK{ -v鱘/#ZOýZ/*5$&Ihz$FpJ k19z0~0R4^׌{}ްpd8ΠD iI> AlQv:-><؃:%DMm+9h=H2?`hUU5*6;:R5FPiB$vhhD,Z)4o8AyCk֬RnzmjE{hO ;7)l9[`w׏0X]mۉvFԓ 'G$Aynbև5[p$e胩rm]bTh$rIF#Y->[VfEe^ֻD[nfM*r'5<4H҃h"cDVެ6ؐ6.DevmV>uka9SamZDlxHI'hgjĢt0ujښU*jjUZMܳw9A8 &u(a1jYhkުU4C5r,"ibbӌd8r9BL  MZHOa<Qr5؉~^.їQFBecRhEk֑$\}GdnC;0RW1>QqP }tKIn|* aB;m} EGz7*|FWw*l)Ul,f1+(l Rc4ŠL ;à2QH`1,5̌tR5dû _Y7ߣ=F+8H.toR\6O7~ \l>3)l~+A᷑睞1L$[&1]ך0"Z_42̢k^DmG1XprGc2Z}v~5wbXkU~ݖ(."sV=  S&# 0FP"7&)R\U>L˯i*Qe/lmM=?Y Sv~c $[TC EÈ mz2~cӉ^&S9DŽ?FhORQ(e)N_2iYUnO&1L fW|LO*)~tJ+|?>h>n $O3Sz6' l̵˟c ' ,A+qoSS ?C>z$Nք6jCsn iYpg+KfXҳJkK%ʾbH_f+"Գ a`ͥ<Or-@dHLHWdH{ҹ)W2^؏w 2sy)XBm@4}]܍:] UU l(: P#N@XMj 7gA1^Kz&1x)M&Oc7+-8 M$0Pm51U^aH0*Zx q} Yboluˤ _)v0e9tcaJ9&SNp̬ -b8$SG2"l$ٌ3|fFS6y1/徧2szɛ5U}Ebf4ٙa~#sdol賕ΊY>L2gP7k΄s`FK-L$D'>(G߄vbYVKf}ַ]q (iKk[k{G[SSdFcރHrΰ1@;2Ÿv&,IbgN=3[g6qsIdU}f-m/Djh G"'[dXh0)9 sccB]ʹRD #ߩAxLcKOMo4NbY$q1k\4͉]z/tɯyU)u3蠞9o*WnH" /ȑ $7a;dfEF }??Ub'3hMEօ Sv_Es^Nf}}z2(&a=BlμRdGtQ#OK^ߞ)MbMK)nAX|LiT .)6!QmbfAHdIϨVnʦQgRMf\˭ŢB,H2g 03RLюnQ ~3Z¶_S=kɆylLxf7I~t<_Ұ`pϋ曝Cw|E i`;v% ((G,̾0MX5;,eB|kJ_2JXks 5 d m4x6S/Y6K&m_4Q!HS+GT[;c:m7~KJFdl…9pªWGѻ|/` E2b~ ;KK=V(9O؞'X7JU1UA*[A)9cP8Eee4iXPZvN;.㰤E05KMeiV^9cp9"?\] ( cP6i>GFx'רS*jTm֔kQ2u^7)}? I$}JkߤMSrrƠєkMcundŸ(06uY#t/K#|uu6- -jk\j-=4#륖4t(Hr*uʹ[JMm=48 rv+,r5Ra赯: EFB;uiBZwR&`YH5;Beni< RNqp!~pVi&QJ0$-Kǿlu^vX#Q4p;{e@vڱݵlC.^C JHa.uE`*Pt_p&fn+NH4,9ƒk:M܉ivԑ yzMEswZ 4\#ln2hS,w;Ӱܒ-Nӥ<cn9sJid󅖈>zFIF7cpiTZLW9s4Fhf S*q-.z26vXD`k v֊‹&BLιPN"nmƥH#k I:ed˰0=IW~/vpv;Oepkȕ?\Gv leHrX8DÜƹeHCZJk܉-6Gxm:V.E9jti !{po>DЇnQLbީ}iS1h"f~!Bݟ4ɂ'Κ4<(OC0Spe=R?1!}K'Sc<oqxᶻf#oO0"x§lEmB{!Ar4[N8Q_?M&Hm5!Li•=ZjadY䱩Կ'*<="[p勺'cݠ5L{QЩΘug.;c=REQֽ̺\j{v'hs+ӊOR]XYԋ52{LuNk4zUWP@Jx %0Ļ4l> ~Ebb^hy'"$.4Bb1'.ȝ \macXV>ǚ#VۼppztT,.t%Bȧ[ho)QL[*@rH?kȈ7"_! y6?oFg5^lndmTo`FZNvi=e?qZ}ꌃ<J-4X@{.Ya(`EV v L-kx!ހ-0X5Mc@o&`μg!Kö= sOb3q{e< <`Ȫ~??ٛ 5CBJCyꏃ!II0$? ԟa+?VV]%W櫿VQS-ﰝBVU\SK+տa@; `V"_.V?؞ۥk.S_G n3?PK F|$>)>=B1edu/harvard/hul/ois/jhove/module/WaveModule.class;xfOirl/`zs/`TNHҭ+N!@$bIR|TF ޝq??O{o޼y̞|S0ƚ] |@!*U`S*>J8ǝ>!'8^ <@ TO+ ѼO)0C+iQ3 SEpRNJqx΁'i)*&"× |E*57RD; |W)}~(Ïq~Z?;R *[B!ɚ 9j RyjS= :xe,8srq[8٥P沓])"'.ʋRZ dPዜR,V!.2j-/`Vr JjE5רu61tΕZWxtü VuT+F'o멵AMfomm%|;uG_d;i"kjR( N]M-{*TtRѥn=^j)|/O>*^MKd~}˨x-M ~N; ^p]D!6`aPT+I.HB 0*ƨ(1*2O83 TRW**&F_';ٷF_-795 V9f_d? 2~NͷN+6$Yj]p;.ɞ{^ɞ- ̏8?wT6';E~t] [8A(2~I# (կuR1$}NX;E#PxR P)S2&B!# l]Oԏуz_?GF}1t &Sb񨡇1K{1oO.د6=F+qݏX;3 1e ;X"t" ‘&A#-l>PX顱! 8A9Dll\jc@8{ #C0xaP`kȱB(Oqnkp(X n `p"koinG#dp$㭣^ .V2e@*2³BcHfHf?C~0C #x8tzx4p|PAâb3C8H!\%[6ܺcFܫG~ԔX`e/rt6{\nH=+0FIkez0wm}XwxPfv{w!x}nl:;:h ;l"Ϯ}؁*TQُ`S1 h )4c uTJz>֧ Y( 9w2(?JB4Z8S3M rTxhx$tSE噛 Iε2,bd uTvHPsm&巈Sv'Ba7mTر!},&4kJ+;ߋyUu^4 %i dq&H4nqȆV : x&,gLI)FV s\^eٜS!*s|JiPʭ!vvWD{ 6JL>Y"t,˩YQ?1&vG [a`IPK%iM KFd94CA˷)ݵX^ЭB?v *M[љgtmgܝwe:NX3@h^4OXk_kTT =*\JkQ#jhhc` 6j5 ~ܩX Pg봾QD55F%1 kC0`;BN1}ƢCH صh`d4554lb68|G m(.Fڍ`02"n}si[4llݴ~V- PӦڭ0Ƕ׏ׅl2ux*zYF /+$ԯa~}z Ҏp.-FB1x6'AưD4xA `k!McC!Q`IeuʿͿP@??Ą1x#3#7YQI=vZXɔ( u1]AWac aɞH"nhDv665nvEcC5®5Zx ~EIqiIܸYkjll3a۠ +CQ`L XRckOt-{Φƭ[6Wϛ_ P?24_ߴe@|(a uca`էWx ѰE'ux2&RǑBdX8BP~s1L-ioWg*pM忇*.W`&*#9?aQ/*tcϫo4w {{<*'GQ=@W <8_/_PKeUbyyy p9&sg$PaTC$I*J B'Eٌ9&۶nbm4j$Tmr ZUV%E*R%'S1dK*ZFI-TB.fm;EIfS9ysq0u κSW `KACq ZBYSE(~%ӉW*di*RYZ2RNqmBz*;DL&VڬV&KTiT…53b[a%<BZNRTUjU: nɿ ?/K*-CR) BETSݤ0 x  ]-̈HoUmvU!۝'l&ZXJC.#áF(B!U֘ߕ=E+a&ȴcDd'w޳6<'`09S3mofs,b|['<}hcS$=I`Bev'NOz[U[GR8(/Oas@bs~D[澴9>h1XMfٓҊ#Qi0nVzSX { )V*/~A?][TAɌ7cNÔ+52,vu!ef3;P A[Z(Yh,Iף,n],r3@؏m`}Cx}ZC敖2Wd'kRDC!ivN5f;ҢCVic.{R̮(G0- JY^Zz0XwURWcSEkKW'n,smgR{c"JWmn>Ν?ӛ,%t ~78Z93(6R$mlk;bcJc00z<а'H@(Θ;zS=²#yD[.1{UdTdK@HNdt) b5bv桛-F0Aa 8)4GOnY1W4{pM-軪: e s4f_SG%2?P[N@H>|.͢{@JQs~R|  zYT~B㊄Nb){!x["j9a9s(G,,_rz9 #|HЙyYd8klX+ -吽mxgD)cwws#&*n>#٣WXWgqJ#$#BP3ʊ;xľqR2G`csXFF#4};ec{2egm(p4pokfɎWBTg-X$ [6`W3:O_E=f[ynYLD<m7lw42ޣ {:ܻ轼0hGh{zQ:^}5~ S}Uƪ/wbbvr,uKi2| \|IS*bSLb+r9]4SgXϵ`-f:]U*M%ծ$[ZU}-8˧X9xk\+Ƶqj\l ;Z3Ŵivvg ;:wf%5IVQl@\frmdwR/v vҘdMծjSlS4t\[ض)}@ &еs]4sL)ֆvgEH;]27QTCJut9 z#O|Mh~p;2a ee!2őaweߟ?BPbJ[dVe+ ˰rbت%ZJJ/0'.cv aL2X2(+r`ZK_="2l^QkK< )|\oW` 8h´tq <>f'?l,rkqrWU`p8+eźzb]7 YFZޟV,#Wݞ& &:ۏ~\3OӠ~l>u欨ǎC4ziP?1Fxډg'}4;.\Qeu)诎2ǻ}J?~bxJqK"+᭰g*oˮw½ nː b>k0HoO!ED֜`w;-r Wv6wdiߛ}0}ՎlUN`J<$ռ&ݜH7N7#{oUʧJ(t*T]{tHTfahOO#$gEsI-|a}F٣F*NRSwQ$OQ4Rq;wPaxuE}a_ {WZ3QV MܰF˯L7nTۯff8k \_//H?oUF}s}W%Vfqq}']I |03 \?KfORz'᧮A?O~_Z+ 5>Ml[]S$z֟ĶK!Y$]~~>7$,s=q) 'ٳ22-O_wMKO/60@`?9n*nW )SUե |G @?5.+ -|Y+)"$o}ӠBItXP L"|>k:cG+s8^? #B̎c)'zpDX#b1([VfŊ+W,+ʒ╳p[y2 G)YRXKA뽟9 N)-BOEhPK F|$>O,{#M0edu/harvard/hul/ois/jhove/module/XmlModule.class{ |TN^&/ۄL%{ @f3 K$ Lf ֥֥Z*nj5Z[mնv*ιB~߻{==W>|9?QU4v.{1zYe I=eg D6i{lLeY=Gﯨyz@_TWU4;l7T^U7iTmzFS^Ww]7P"DG*1EwT4s4.*ٯhzMw==@?ڡ_WtwzSaRٿi?v~ogG:JcPasFnp Mp9(\VFs O& g,s\<;tL;e^>[c|.=|o v~_DXbKybaz2^N z,rW{W*|ʫp%.b3TZ.õ|3֩L:KgZU^ *UylT&vB%^(\bn$BM*oVxϳý%omv7Swʷa?;zO*F.TEv]/Vy/!i.zt<0֎v=x/=hη*q.~;4+HQ7LAT.c/#)?B]Ncʯ*0V_OƵ*N *?t: :*>U~o%׹M%oW*ګ}3߅nwޣ*W~Z?h۾`0)!-{0Ȩ Ca?4( m8ݶ_zuͭ r/ZӼz#NWk;ZiZ@~C}{\k%R[7njocٽm2X`x+oW*v5}FHwvAϠbHpDȞ(n Tlp:o( ۜ7*"ۃh MC 1ݤΡpoC;{ F!csk [& F;``Ȩ ۼ ;wy}PtV-NԵ^7|&QXQ 'Y!#-NmawF@ˇ҃ⶸڿv{ |p˜5=@'^1/ab s&Q])sM_&(tbRU1̋ P~Mn*Ã(8u^*G̣x3t 2Dlߨ|>Ǡd$xa|"L?X o2~EF k}(P +5vkXk7G˗il uo; ҃:rzC]W ; #r gw6^cx4l3rV/wz4"0=n,ܺjt0=V\8 T.[lYeٲE nN+I`{rrV;; t{amCg (鴡st1B1v;%b`|dsF)O|EݾAr9wxPN /GN|nX"NrЀa;`f7+A/'0!$K(`Hb㶸5 <GݐĒzw;%YRV[2$ Cwvr{j޾ip|N紵7ӂzz] CB\̍(G=A M (v7~#jB n25Lc;^袛^iMTG+Vׄ6" OݡяX.wVv ./uָ^OQlv.\ M2̫9%˝UO/r\l+5@d,480F^_%D9 5& X@LRƕCaT18l25(^8 sP(RD&4Ag25[nέFd;د,acpk#Mww fh` }/л5lОKFJ[/FʱwW ҹ@LF#l&Sj +W(Z"pF٪իWk"t \v*ߵ<D)!r18ǣ&f¢< N?n{kEkmMPOy)fgkBs41uc&D7& s-B!Py(06ppsCb8eN,/ 4X"bb&n&Zv)Ry5PiXh=2kM,5Q)Pp>ehb{Y@X;~MTOg8ZAt+)i EX#bN:Lq& OePvJ+)o.f f$JSu)7k" 7dT"EhbUD&6MP< Xubbf@3Wl5C}pHE7Uy*Xq`= Zř`ZbGC+Ѩ&ѬMGJ#mczfE[nq".ą"E\Nq UeQ,5X.=W}HSnbd Ჾ(bFDq+)ݐ2K#7 n-oO(F0ecz`bi% ͍S1`Q4+n,0B0Q  g\IˠR4< <0,Z:/]T t=xPǡ/"`eMbL"aF*d!%eĀAiYKE'^{Nh('!1O{ 㓑2,gy'a"dUU <4/R"mw $D ǧ:̚+Sts /ZxjVɜc=$xBU..;/1$ቬ.gd\rC#,XҢN14M) b";|SoPc#Qls³&&^Ŋإ!e ˉL@`D&>NyQ\e89 ATt7l.2{?IC<]CԽV\a&7P&>%nc&nf* QKYhVq&>KivzAD?G)3\kiQhN8H]<0w0!S)5 yЊN[ÁAI71G/<#}D״j~}hbgB5;7G--k`н,~ SdStCKLs/5'Ta I&emX!coK$, $?#QE#;Dڢub"68 Us9sz_n;(J^w DwAk䋅И "\EFēxJ<ctl]^D _<:XASz5mԚ3ZK'ݚ%IUȠɛYM$xV|xuR!A^G;IHi~92I@cr:kYSI,mhF6z>sB)-^'^$jš*g_K0y˚&^^E&% eεg W~[):J&/ۢZX bِ"~>>;^.~ wEf(doۦvzt`6O0!irvⓖs9en PFtJk[肉l5#T#KHL%.FF|=omsډW;9l"I>L2m:oAΧ)Sf,Kݰ=rw15 \f:Ę=d=0ki7|@_*vkNw r&ܓdJE4"I.]v.k05&`{0>ysw9a<[,m } 4쟟зc~:,ضJ.-fwѻz1|o;;>-v016G:Hsbbq2 Ñ5٣PpD 1#y%U\rf3sG!Q"&XX8-JK"Ա$KKǠQ4ţ⧠s*V2k[>NJX9F N/3KYL`6~N]}2r~,lQo\K_.f` g-=E ǯE -0#g6d"p>\ԆJl8a]>Ra>/ۻؐnjYcra8Sڇ`=MG{a60xj])z ƽo۪lDڬ8ZRM(An4uBT#; ֽ04m 8c %8e쟏C yQKpƅ>]̕\̥A710J>} }R0c&_#@ &aA4]C}t- R1؅ ]!@%؆&"[OѕCphhp|LW å^jFO8 sp]COpKqOGSh E 'h _w &LʆS?q3𼻡o/D8nq:ۢꩇo;E`(3ܵu D'I'h#@t|eGpXKU1>dU"<_V$dK8PI'\zaX%:BfG.mǓRȄĿOTּD1v"BQf5&A <rhR03l&<ӄL rxjbpː[ƞgClKYϚR-)e;BexЖ[+#<!R(`h4W‹.|U< Z)56 y=/2 fˮ,=e]Y%AKfYxxՕg;o{kF l|7o CI罉r 4^hja8KqXXƁ6 C$0·]݁IVOO) v{ Q+?42Cq~AiBjˢ,\䚩/pDmLJl&,W~-oMˑߚ_z$\ y= bdqAϕi-C1slԪ<4n+"GO̕\3ksf.0\ZϮ|=ژ'4T|j l{lu!BSc$R7 M} [ZH9Mfc~0C/Hس/9_*=?AJ/%„kq\B]j+ؒשwE"QZ/d){1}(2Z ӑJ2-їc,8XAp.SEyr t9044KTO S:)"Q.KEEQ}8@B*$R}iK ,M18xT/Mxqs|pjo?Esp䒊 Ib|qJ⸴ \\J4˜&9ɇgE]t1(g'wϢYBm gc(]HX-sr@l&0OjL+,%p94+\:1>oKMҀ,Ez~j9/֋ђ%z-CiP4%X$bbE +NXqJ⸴Xq,SL^HjM؜bN; YIdf0̊fYQ\ 0; m(@s9C\[Q6_a l}+N]f3`tAZEze$#:3,P>@ #4##l[JpbXJPZC[+SKQVaf<0)z+Op% .3i\ܪdx4=+({o{ײrS >/^k&|7m<p|?-2a+sk(RGbU:{ ]a)# 1}TaSv®TUGa®Nݬ=xצ3LV58~Z]Gd0gQp(zl8d끙̝.R'l}jrO6noiLqd&;UI|!%(pyqX'[I)쳤Eaȑ\=5tl꧌f5W3iؙ1#lr@0qS\$sU>qNS<A8E[+JvKt ܍@6o{LJp%:ڂ@ǁyG2Kqw (OcPijjo6;JfEv s4ȟgݏ.yN#,Gޒ7e̲X2-\V鲉[JS#le2Vu**RU=i,/%~̳dgu[^J{Rp\E^ʬ'ǟt.v@ڽfvlUv{]g 0=ck;JFٺҲ<{YeeYHjʷy= 8d۴& yQ*+`GcBQюg%hF ׺Ap`?˼;E.AQ!v6R;4zm*.'#bbA 9bCDfUoH]'TQ.ؙAvIya5[SPLJ_bcrvQXkG ?=Vnb2}rrY-z}Eo:Jczj<O}!r;l掔lIXv\Vae۞[$Am)H5 PK G|$>&edu/harvard/hul/ois/jhove/module/aiff/PK F|$>Y_nm7edu/harvard/hul/ois/jhove/module/aiff/AiffStrings.class]J@|mbmVo"BDdMbJCTC-P t(EτUk h4ga+R͘[q6;"qz*6`twXb+ "yC6pwʆ Jk2e"$UDP!tNYLb4IB|,AY_+O-reIeԕH?<ԆWl!;edu/harvard/hul/ois/jhove/module/aiff/AnnotationChunk.class]kAid~Dmid@jEU46 ;i6&f6Q%F-I\ؙ9睙o?}pUXp ᒍ6p1` Xa㦍[ #M'%⾈}J:< z wC?H4[ioͶ ТDXWz`md? ڕQM5C<=:BճqۅKXv; ha8d]Ū5M2* FfƔuB-LNx\CZW YQ1䋥3;Br2:P;03/$$QۢKߖ,6qkֶ1 -^/r\Yݖ:=h3o8ee 0sh@_yMrz}aYRELҼT>V#&f>"{.%赈~PK F|$>D\ <edu/harvard/hul/ois/jhove/module/aiff/ApplicationChunk.classVmWE~6M-HSm|km !t֪IEmjx1EJ$Ymv=Eߎ=ꝥX93w}33Ϣ832+}9AfWBiQx#7"һ[v #j1fy긮lnDPMe*9y5eS ' mltc{Zٔcuڵl0LtZ!%ۙ3~[-mڱ$CV`pW@%Z5'3~xYVjSOE(q9*0D[U8n8Eba_m6 | |;Vv\bYmU(;mjT! Ѡx XxS< IKr<{ wΉ *l '}plO-P`W,PgGY0zd;4En;Va`9pa*P6_v,ۙ@ 'Y ~/ '}]+"~ bզ2Md(OƑm_zEYMFLS>sdfw/h T].WJ Z߄O3~YίɪtD]D|xӈG[veծՙUnG4 {99z hpS~a0 mWuPYiJaBf۶:#CR)KrJ̈́ʴ_Zׯ'X_(/KxHX)cЏ`0JzsAГ`: /%.bڝ/w{qj1 8W8'|fwkl9J"Q/h_9^,s\Hps$9&8RT oi_PK F|$>E`9edu/harvard/hul/ois/jhove/module/aiff/AudioRecChunk.classU[Oa=-n[ +"Bj X @kt-x0b&c`˚&{33g|p9 [뭨xpF}!u [Q -Rq:qr'ྀ &ԊjN2 R%T%M5RQҦ\|~ &4UU6fp=.[jҴlʩJf.:7c )M ^2(hXh}є72r5'9^US*".⑈Lj1DHxB4vI꺦ga>)uMWJoWW Z!Mxj%L@\DS"1fEa1킮Un0tؔ'^H##`N<,W"Xd?rْ8 a:3K?l&d #%ֽH@g4~k;&7K$(B,?;\{#=}xG[ĵѵ3Ggt,Eѹݵ{&}wm7OD\UzsPK G|$>bOz7edu/harvard/hul/ois/jhove/module/aiff/AuthorChunk.classPMK@}iXGo޴*^#R Ջ} fk <:{||~~{#+нTZL ۜ _Qϴ,L#2/%M|~ێfpҴZr.m6[rä ]]{w*;~&)w)8(+5qc$5WR`6Z^Pp"axY!P{`trz1ncEPK F|$>g\.T 9edu/harvard/hul/ois/jhove/module/aiff/CommentsChunk.classUSU.d͆i][*RWR%MK0LB1E ِnL6_7; *gSx&XBhvr9u$1*U~M c|vՍگE|xõCW›oK@TD̋I0-xqxYEky/=Nf\3LÞ`J٪ʛZ92*Fբt5jrs4ؘl|ռ3kYIlhjXfkqTSvY׊ ¤|$: Jꥸ"C)[[3jAXt»)bI ֚^ ˬ-a_,C|$cehXer"FAv¨؜|MFdúsk.;" fG—ql!$ 0-?5 p<on>|=Hkt77edu/harvard/hul/ois/jhove/module/aiff/CommonChunk.classWwciA`'!qNƖAD]ˆ%kHZvʄI3MڦipKI(ED99wFrNO%ws{^׋o~l ㈆{~4]n1=ڌ /f9y14X GYq b8^|]Rm1r(~qsŭ5=1*kX`8тpR{؂، 1_P>A"bxQ3<2| `$ç> 1|^ _`x _bx ~YW4|U.˶= $Y wpX9V)v,,X1y2q913FrenJ3F HŲ\n)PG+h!B 62hv:5Ǎ1ұhw _S?0ϋ% O+XWHΰmO:$(hxzlZ8 Jtu <7<·u,;::3:uϑw]祒p1  [vx816 /m w EDѰwH˟9a)P:y,^(9'</₎ %"LSL C8^QONIz(|5 vW:~W7l,Ya+\qcZz{!&RqzƉ #]9 ; m4 m=#qy'-kǀdHTD( sV6m2l|y|Uw) }R²=室 + @e% b#믉_#nB54''YL!c{:?gR\kĔjS3SS3Q*xj:>E+$cӤl*=bzN%Z ` ݐ/V70la7TxmRכObbzo )j3JJQG͒T@u] ֊:ctq):#7&AtH¾As'=^J *k vmgyNyNxHec ˽1+Em+h+a}X#vPO5.V:1-p !rD*R60{FۯubqBkmcXi(zz9j<%z#gV@%>W;!FFTP;KUѲkT+E078 jr":h c'Vڛ^!dlaнr~3HY_zz*!U/ij{jߝjuϞ?M[jV4L"j--=z6F% T35ZH W$X/6ԴmڪLod nQ{P` hUpk(B[+xs7=:HtSl z[f;%l]DB%J:V=".ҤWNZC`m8MXl.']=LX2Sb6a;B2vul_( bzH@H`h-[~C*x[]={zFCh{ h0aR;U0E&`05U?A!x?(1C E{Qz%Muik>ҵtmѦPzQ_hsp8MȾtT >|G`<eĿMj ڢ*izDU_Gme7)y/W=XPK G|$>X~:edu/harvard/hul/ois/jhove/module/aiff/CopyrightChunk.classPMK@}iXGo޴*-"H<(T/l[lX7AWy?%  # G" )0<յvg/{3vlsRmIF?BNRet~LW=2siق;&m_Mn\Afr`P Llu\1NVjq/?ڝ|Z2ƚ+)0[r]"Ů!|zF~b:Y{kPK F|$>$5edu/harvard/hul/ois/jhove/module/aiff/ExtDouble.classEPJQ=w&s'G;j5 و+ (D8]Jn\4$"@u.KAt.UߢoQJ1fһ8s c00o o̟NX $u<ԑbj˞#}ɠ XkMmeξdlye|:{ Ja~mڑ%9&>㱉[lwe,jG^x; WZ"ĭJѐ|=1-*[^/8YjP6"T&*Irw`[(¿`xkTS@Q~Rq@"Rz?>+}BX״uqLQj?C琳w2CK_|^)<,+DSCO)cc,(/d~cYPK F|$>4>edu/harvard/hul/ois/jhove/module/aiff/FormatVersionChunk.classT[o0=Ҧ )u\ ]o0^&vCtTeLfq۔6b/BC/HĊ89>/.$a⢎Ky,jj I\u:n͛:r: l v6̷h;Rh9Vtn6weury3՝3jt VsP>gjq@p-NV"ȏ{5V w:n8& OPXBD%eTG}qHz=&:MUՉrϱ=&Vg,(Y$ " Ȏ&HyvV R%@=.%e !$vWTr7= 6[= c]洨f;qB@tM3R#ɟC }96M Q*W@>F11'#U*rg|Zh+c_%>!!b[\/PK F|$>']Rڳ@edu/harvard/hul/ois/jhove/module/aiff/InstrumentChunk$Loop.classUSQ=OBL~)"j&j!m20ᬲ*..8hrb}]w׷V8_&}2&bJB2xC *fDŜ yKx~(⩈eaI?Nm`ZrA4|kM'0ð0UGWՒZ6uX>2ԃrZ2TU5˩êĊUk?B%Mˬ2/YCӴw B ["di[ &#]-VAݬئULӄgv8`7bEu )0/NtCQkx )"qwV*F9ܼ!-$H*@ Kb.zDͲ ;Vp|g`R{N<_eu>ͼ51HWՏiI,%RV63W< n3|`Ht֡KWeWC#jz ;edu/harvard/hul/ois/jhove/module/aiff/InstrumentChunk.classVSU]f˫EEAm@ u V(/a5 ԂK/dAJ:/,Yr m^pЯ 5bX6KO/pyU8K vШ.~tbC\,mT}F[vY/Hnr[YI=Њ@tjq^(bˑV\ljԗ>EceЊ8{W`}`(:Hx*T{c:&19.SHSxR3D2ݑ2i_=C4ӫ:3et;zJB kĎ;5bFߨ7keb)hk<|'Wx~ >ՕB`atW8[Eޟ!S3͌ {yYY |T{AFP}Nh/PK F|$>|^7edu/harvard/hul/ois/jhove/module/aiff/MarkerChunk.classUnU]'dKҴz)%&&bv[3'qf8j+O/^jAT#_1[sk^{Ǐ?M0Ë昑㬊^UD\\+x#71qCŐ4xKrs#b7# ޕ{1pK"βyi;y"c-&zU]oKvVSF6&OV_ۖ0-/;B]}Ip-{NNc/ 3 1 `5 gMN2 }QʊFI-% jaj492.#a9<>P@a$Hu=yb7c7}鷤.i< w%U<`8 oU-O:AɻM[& ʭm sM"YmIgx!4"a&UD ޅ45TډR.s_?<,A)21qK4k]\4kf3p?7I+ӴekG_LAr& LjXQ+A).p8& 2 0 PK F|$>nHP5edu/harvard/hul/ois/jhove/module/aiff/MidiChunk.classTNQ]-S//xhH5 *@N;tLS^$Fd h8۬}Y?~}:p'cP)5VÙ✎\"t\#:Fuzl Ҫo 2+5snJsõUifrX;kTC),kbSkΊ@,S6ZaDiЂrNM'_⋁($U"bs[%t$ F8&@$0qU5Ajmw=̦inc.,Hc`vB( e𣏕 7![!A;A߯V_iZ񍆋ePd-/"+V02a8{B*,G˄ٱ_f%1uqt-4Ghw hgdƷUd2˄d Ͽ*Uj +a/RЬ aYęb9؆Y۝z@C( DRAB?Tb:]]YymG-_mv5edu/harvard/hul/ois/jhove/module/aiff/NameChunk.classPJ@}iZGo޴*^#ԃBxm5Ɇ5ʃ?JDuv,{'S p[1F1g@,2* Xt0]O.ͲP>^Ƨ7L%|]V"=|PfNr!xZkíO7"&!s.$lL/-%- LdړHj:xkPK F|$>Ze6edu/harvard/hul/ois/jhove/module/aiff/SaxelChunk.classTKSP=MU *]IQ*K0)")&'󬢯JnUjڊe֞RY2<6 .b cu+v  "ȉXzP)Ҹ ,VXl;Y+{UaZ}l&%{~]ˍ>T> =Ǐ|9Ǫ!sXV_rX\l4/CQWk G5l9]&Sd,5@{|Ye6T*uPX^1UrTTXԜ > [ϲVpxC]wF|a׳=_ w< nXhaV=<sa.uAZcO{[а.N/ :edu/harvard/hul/ois/jhove/module/aiff/SoundDataChunk.classTNA=R?@(jm BڢKfwKOH $}(L,Mvvιwι1QaLU0CA!?|C@XBD R<8|$ 79ŻQS.aZ}3;o)ՔjmkemehnSbj2Ubz>N $5HUZԖ*̩45'XTD/ Q3hI4f4?In2#*c&BXkt2r2fXXMq ˪QPRQD銗RNös)j,՜Y34nĜ%ϐ2Vᡞ#K0V3P"o*>-sRAWzQ'5 @026A/ % `$К#оCVUTHWNJqE,qκQ8)9آ>Fݡv<4Hl:3]]#h8fNfc#ׅ))ngͽ2VnNNT<%$Hndg=Lb]mŽ6v[ M# \ E\bH}Fwt/{BX ?>'B:omH؇rMi ;3^X gvѷ~Fm`!aCMξ>/W`PK G|$>P5edu/harvard/hul/ois/jhove/module/aiff/TextChunk.classTKOQn;taED+"`|PZ0 rLi4@\qИqƀC\3&> Djb;OĄF.s#ٺD$(ŀ:".-_|n,)7 ἑFVQsKT3_Vs暮ZclvF7&[5+wtns'bŢ$t 2qS}CQ ń5 zF/Zy(m'i}b+.e$/bA1$#K2. 48 C{D^6d4YUpwCF2F0*&nCg 5cx"ac66?T,>%1XGd/vQ4';(GO*=pTi!|:tpECN/.˩k=U{ `}^NYwvA+;1J+Cw5L2ڗ)Fb,xPzN0YFzA ܴt ^ (}[`Ǻ'r,q,"oddT6jHypM>%edu/harvard/hul/ois/jhove/module/gif/PK F|$>GX5edu/harvard/hul/ois/jhove/module/gif/GifStrings.class[S@O Db^/Q,Ći3:i-iM*/8?帛9}o?` #0 )XA0]ܗKcO3R}`T ؕRtQ7rz=oF^K=WT`~lu-͵f>Z d:F. y`"BCP}ߌJl*r)RZ| mQ; .Q gQmnU7?߿e[.kX.|X lek,S!'M,OĹsq.{*\ Y8 `'ޘ;,&*ɨhۡø;ĦM*DžMlBKbgt) !'NDɉg,}AsUxShx"EȢ‚_c>zLXlC~>YJmEP/ k,?T%'Ԏ,kv\;>b]DkѦVU]/q,E 5#Xd嶅|,q,b˥HW]PR2 O͟ 0PLD:a~d $H R=0,YKGPZK4]`< 2L`Zd{oPK G|$>&edu/harvard/hul/ois/jhove/module/html/PK F|$>n,66edu/harvard/hul/ois/jhove/module/html/CharStream.classePMO@B VD?%^ 4!iiv%eKm(l ^޾yo< 7.2r09^Ƞ9ޅ6R w 1NL#\ TXEo"T?*>X3pzAڋ^!yg4A&bu{RlORŏ4#9fb!w jF{8#mid`TpZr+'Eʵe3)d)@(2>CàS =C!^#fN<5X;!f[{l85edu/harvard/hul/ois/jhove/module/html/DTDMapper.classuTKsV=`$Xq?y|Swx]xGÆ"J>Cesæ2 *CpROh0zJjJ w.,vTiF_c,wr|T2Us QCut3W4`wuv,YMݹJ/6MU ZȦƷ([]cHz(niX^Ks#o8j뛊UC×T D1?l<*y4O4\vAMn&';+i^[uI74ɥZC3xBBcs+j:-7Hu]Nv5^%OndjUbUPm1R}W }'OV j ^$EDB^*0 *mбM\_qq M D!<#X |c ;IiN4K_>QlIiə7d1&6 'x*F#)C%. C#Cx511SĤ#ⴼKǘ,1fcn;o l?bf&sXIO_J=D{8d*D]E)V &z1's~RG C8ݧ $:edu/harvard/hul/ois/jhove/module/html/Html3_2DocDesc.classW |c,;:!p$9N#qH؎rmZXuEZ9q(ZZz@7%B(r~μ}Z*6?f}3̛t &Xχ ,B$|Z!@ BSH4A aAZtv!,E8 !Cp8a QG#p,RG8DeQBa9B NB8nSNCEX͞NG8La-B?:9oF6""lB8@C،pFG؂pk^: ^` L $R&VI4BaT#d!G( #BaaN]!bKv#\p𦐸 #-W moGx•W!],⽜Y|Y\C,>#,>1#|Gd)fq kY|gY|u,> ,K,+,z_cq=77!܌GUXb?om,[,ۃpG l%*bdf[e FWdFjL>cױ<Z!eh3R5T,2Yp)gjVhΚVYr;T+mR+]v2m´ٕ+*Y+m]$XV)3Quf9z.-d}XkMgBW[ Y y2[HNm,ӫ\H8a(9C(ZBPW Ĕa. y)Ս˳ޡ q {L Fca`_+ ps<+r&2wz0 g<3) T#fR7aYOz3˵ɃsQ2rJD"Y-5Nšɚ1c"1se+feu7Jir%&_l*l`_2Qs2S[IQ 0.ARԞfXS*3ݤ= ½ V<1c1pɒAF~+A'{uO-]2RG-Y)A-NB#x!$;A + ?G@BZ/[b[#K;2)+Mff2mKh$ c`Z\̵Gr(r %aZ̔Y  (5NQLK3. M8WQtML& B&,*wzP֧z34A%0Y*T) >0CݒSїȯc1&{M>O+_r^δ24IkHy'R. OӜQꏴ,w;IH fEҌ&_ erTr)gY`cJE2)˧ƮǢQ.E\i395Q @e"aT\< 3gk9c:md+&6L֘3vf$?Ԋ%^i Y -in0D/Q7JP n,; OSx,T|I^3 W,qJ%xی<UhlSfZ"m{9jJSpv6-PyGP!4mb(G8<*Ym0s}l8 .Aک5c{J ,N0 x xn#v_X*)eraiXP?oy{6 'Ó(_XX<96G ?$?,!)wdJF^'VM5,G3l,gq?_?q;6KeY'|;U I}i`Qӵ{tRM-k|"ѣcO<#⥨V/mҢщm@~8˖-s7{x:9<8E}8zHq~=Ƞae8*ĸ%0qX-48}Ľ>=*ד= NtGW,wG|]*grDkzGKcH:j-fcgىkI {q[h=*w1=*itrFpBFL մc m&b^:5ԡp,;54GU0 rx Yt^9EXRUsL\xH9>S36LD"JW:pJl✸<f؏JyHr{~-uz~tҵFLyLL﫹!sCڒo  !kZgY\y\04uw [Uu'u3+j정4:4?w#V:Lj*6Ngڙj+/ Z+VuޱEZ;T_:w+9Znnl"VyطJ9I* 0T_;*Lݮb'!-/ƗߨtlTRkS.nuzU\>{NkQŜBoo_s@)W@}f+X7}{ J-p֮\9X;c*k).eIVaN].u:xH7!c )/[ N2)1٭c)w4]k3.P P}woxҿ:U.NT.JP_t.SlӍlz;>M1F)ѭ%#$]`$(mHK*F0PoEۮU!N\$i?W\o.4ٹ{!cp慠wW{$ p uPZ>6<ͤ\WWŇU[Q1V8Ya2HKU|"ڟOOGyxMmo.,4$qE:6" ^6x-LU|`U\hI=5ϳ//2~*U 2=ÔQ mUq;Wi&ڹY>j[[Mvtze֫bRdv_URUqkUV߬ofBTi^|DB>_.Hum;#E^"A PGmz~=*A7PK F|$>_ <8edu/harvard/hul/ois/jhove/module/html/Html4DocDesc.classWxӍ-0Y:qظQ,$m8as6E{+iݞ BB('+rHo{=!yn{}v^g?杞|'`i[I ‡>"| O"|jç>Y!| $|y6M^·"|[C~S!D¯~ze<gC;?/^~ (@р"Fk""E2)6,ZPh(栘bViCbP,䵣Qb(4vq,(Cq<PbXd8EćDх"nH8E(@*gXb (֡X,g8Ź(6Eq>(6ľGq&EI1(y-zCFyZ0.cH;Fq,vql4^6*VMiNdmé \&] ജ'ȁUUv҃F-'Pch\s*5ݲy 5E5n&i_M0ga Ǭ)[hB(AQE3dyFwKɋ/n1(`V.d,{_xS /SK膭=l\8)հUu]/0U: B :U`*^Y-Re+F.fl"gҗ wlw\fI#OfS ^ HRc4I:+9Gڣܢ-)0 U ipA٦&6-d/˟d '4|"ǫHs<:N9}kR\KDF>󎝟K͜&-nV+!ΚԌ[Ym l+c8; /8x}@("G"ӵ~Pw,#rgbǎO}D^vr*YB%ȃy? qk_p/9?|u _L%S=ܣR~ ?24xJ#^I"%oSJ%N%R%Jޭ=Jޫ}JޯJ>$5X)Ra~~J$@< _4@nǡ!cl\g =6ꍙlROfc&ڨ7776Zf/Ax.cV6ncc? }p^X8 1,)X%$Y5!Uۧ]?Vn?K q pNll,M2$iL?YS`{ MƐWaZ# za _yuNr#T ĦaOPgW*jn7K/U1ۘay}[o%3A*vUP闩sװk>)}Ǒϓ |g |K*5pW.{[ 1:YW)}OLbC, <}ApU9Vm'dѷو:p-CPymTo]򕘒%5SQ>k|fFͮ3{K J2,}YzN(W-*?7nEk(_T'x8s{ztw]lԯ)?׫w8|{X{M0o }x7ü>aW&/ԞYcPK F|$>j \>edu/harvard/hul/ois/jhove/module/html/Html4StrictDocDesc.classW x~c-'&$r0 .cb A1J$'}=)-=1-In]z}7y{Xh>yof3yb5 `tX|ŇP|GP|kQ|'y O4Ϡ,ϡY͞twlv[F{G֚һsVlRHTdŔъo~/Vjrg*,Gx'136%iuʥp@+D@ͪnԵOW U*F~_Pia*lP)COlq͵f[ҏWOK=UŞxx]DAɌZ>3 J%IŜfYW6IX4Sh]!KFE/6͜eN+ж4*R\)i cԓ@ȣI@4(IDQ"epBI@"p*8e^% RḆ6\XͬN9MTMs9ti3@%@1(3/M- (*i:m ujLluMv+N9šS<*|:Ieu#et)K N''|hlJM0OU}J񗍔s9f#I*0a;MPKZ.HXԙf24-&ݜ@*Rc9*x4*dy(')dƥd9p-+μNȐ̎)=pr&,RJZ=L۸9eYi+n;"p'bݑm wTiJ9[T}/uV̈́/h$`RޤXSfzs}H~ׇ7RDJ?osi;ǬIRh`X?|+MgAlmFJeL6A_JĄl9 XIKcCD >so ͸o&r>;[κ̑@L^▛- FѹNč\ by0*2f|?O{'35c'd9X:{Eβa8)v.IZg.ϵGY#cFU R}Pj=/ +K?f &o$_Oz=<*7ȋAzf::|JU'5OP<RDXc>ointVxekgfh'PUzɰ$$գI6ǐcD}iQ?-OEXoж@.'M%rCx2en9[V2vC$DCbi-9 ɽ/tƼG8H]]5?*A3SgbQޚiF]zVr!IVeAѓR}bHgW8- ܤ=,rTWo;S y:H)ϕ<)7J9$R^ 尔#RJI$W +$pkS ed>cQeզ8[:)=QOa6Wv2E# %.'1<&#:8T]%̬Xc21q̍'Us‰ֆv?Bu˰GK9Ux7aUMÕF+jJ/7qEz$\h0xx|8yċK~!*ܧnu/>$Oj4F+!;lEye~CNrն8VTbj}xO傒r(S.pXmn;UWPQQ_oi\'ȩq?I(&18!Ӿ{nTaN 933qy(2jKo to0 2`W+Ġ<=r=c-.-UCxPFMv_$*ԫkkr~_tl8 ΎYqpV gSfj?~+|̪#DRZ RҖ(eIr`? F.|c Q[1\]ZutY͗v,fcgw|WiSﲊC.)*Aϫ⺫7óCA)wI[=r|G6'=߭0=nU^Wposk8 r4\ip$l7+<-=V6rFܭ"%RC'ڔ3D>Kg_-jn3 ^/^⼠K-}"XPW/i/ԩvO\2LUPmpQEDkiJ1Ӣq@z-M$5T$ PK F|$>K&:edu/harvard/hul/ois/jhove/module/html/Html4TFDocDesc.classX `ޞ/phQETHv(EDҀ$;dvg Djk*U{i+U{Wڻ^w]m{sdvDw'^zQq@&MIhFhAH!"LBІ0AkROTif  "# A8!0YG"p4ߘ9j&tGg342Li.8E= s8&#C8a>'",BXp O{Kʟ#*73V#&kyL>uB؀&~F8\G9<0ج΃B aB("lf_F؂ TPE5!F؊ a #\p1%"\fYoAx+@*Ax;;މp-|»CnB=EV|}!܎p>A!|N>Q!|nO ܃p/}G$ Ex!AxS!|3e/|_@"—Gx_A*“_C:7-o#|Ix {Gx##JU4`OUv)7Z۴?^'7H1|+--7l]nmEEyыJ(|otج*k:LtFNYdz, -6J:UL8ū5}U=7DeP"+9,׫Փluj[^ǨWϒmu9u})Ôz!^XAEtTAoBCѬIg╢nY)넮z B$_F-Y"qxI?i'[N2=h4 3d_-K^ ڼ@&8cɐnz`Zolʆup Y*q;+q+~ы4F҈Pp;EK#!hJ л^P+|9+\cvO,K_bx*>.6@q vo{.'ǢANn`ϐqMPNG$mgEmg{;&xf;5\/ԖMAՁ>;J]TIra|=5+H]&^$ڢ-^3^"Y 㽨d=?{٠ɵu9ژsG>rny{gP\&tЂPs5[aU} lIMDDuZOAr4|~|\W+SYt"[hUC/H%XˌuZᡂX pʎ!.|GWBtSF EHxgʶ&]fw}Yv]gw}A/ʣ%y.W1'ɍ&f2\=.,+cUv?j9U$5ps4KiLdgQwx{\{֣>qyx׽#1HpFqFq[FR6(|'wDvB{>";'@edu/harvard/hul/ois/jhove/module/html/Html4_01FrameDocDesc.classPMK@mbcc~<RTX=)'Y$M&_*ZQķ9(= {wزQCBFn XԝfK6 M]If?d,Ǚb_D!x#q8{`&t`ў ^ؘsumjsσڄ +Aedu/harvard/hul/ois/jhove/module/html/Html4_01StrictDocDesc.classy|ǟ7yHF'B $t dw23}==UT{_{߭/ۊeIԶ;><3y!fiۀ739EnFz Hz/~~K#iT> IOb^IcܧS=Lm}XG$}T%}B'%}Jҧ%}FҳP>%}A%}Iҗ%}Es*k.L-IߖIߕ=IKHIHifǰ/_~ ?KJCE/ة @(h)@ L-@+3,)MR)QR-)X)x)NDNNځy@0Sp*X,t)ΐb1R^35TaA.JZ**Zn޷6RvRFir۵b._陖iibu }L'j_b&OaM#rSӡbOFֱF/Io{b4HIqX8+9#ڞbKE+,x rsHR9ā]Ȳܠ-ڬ<׷+Dʨ+W0|V$j&oX:WԢr 7J +)֊-r*goJ=XBXtRkF rHc&_PyG"~.)6 ᠈MA,;_`]N (V(Ū8 ,~1uSZjxxڅKF|.Pi{(Sjm/ئih`!}k ZMy۴te댰͚.rHYFvMh5s˕u~e-ʅj"F-*P1B?b\,V$EFlN-/~ U6_~:2FF@-v80o~<&8P13:ڬg׏?i;әޕh)SLKB? R_lOK˽Rqxک/V\x/Ux:ej\,g+Skx zwr5aIԓiG쥕S*R\xQNO_qUZtttin k.T)nRX1YqKlQ䙇i>?f/Z|V $=w6 ŬbNTE[q␢XTt=ŒE_1P5g8qf' Aa.4-y$&'bwJ_ZMY[B;hKѵu*oTImֶ1jtKy2Mv;TKnWVkmjLHZ,֦mu>k WFo%J PK F|$>c l=edu/harvard/hul/ois/jhove/module/html/Html4_01TFDocDesc.class x硕$Q H # $ $Ʊm!ki%ҊnM}$iSzq"BC+}ݦ5q-[wJzwKz&0^}NJzP)IO>~w> | 8 O> |</_ | : %ے#黒Gi'~H?„K ?~KW~GQO%E_%M?O_c)H !)R(RIBHe *E#nJ1O&)Kb ѽHX,a E&(ܲ_ietAѴ˽5yV F&+aq3,F.b3C{ yنk`; t;nZK/N]n`Hp=UmuRv,G9<26ʺi9SaxQvkNU\/LX٬*b17777a t <`#Wkv-kksra+3QTIw"`%qD(s`Z1"Jw Ŵ3౴^"Xre`pO*ޣBfp3כ݆hyDXΪYt1(ۼ-"3dEiZ\ƭP^GUpu52N;*eq2_Uq z\KvʗKZM<#6<:F)ij ZE_G+

=3~u}ι_9٭Z4n9=1exk%$hUG} ôLTߋeklo_m3oN6;qN/`+N]Nc ՓzSx툱nSqT׼&>;nQ-݋W=&Ki@Ԑ5"[/p)wV{߭QQ>Ήa뙺hZ}FSHnk0q|  @4D.{i _8EPLPpB'(YIŕ$t9G\9' ~NEeid2/1AMUϷ1, Yw?D@Ԑ[ ƖB S Z9t^βe%Ů%\мͩp%z(U)*kXZݨڼ5X,kYֱge,Wldrfv-,[Y\r KvN.@H7iA "/;7Is@<_vHvr/bd+*wAC,7rͱp1hL󞲤)t75q{kFnD@<:Ai+XR%UFeYr,yAcyB")g> wL^D3b0p(rڦųM(~qM{Nw!P.d[%y*nq:_).iUzz9Po[cp5Yn% @bM[}PK F|$>&@edu/harvard/hul/ois/jhove/module/html/Html4_01TransDocDesc.classPMK@mbcc~<b/k x=)'YM&_*ZQķ9(= {w{زQCBFn XԝfK6 M]If28H3PBV^%?edu/harvard/hul/ois/jhove/module/html/Html4_0FrameDocDesc.classPMK@mcbcQ)(^ł,BR&d/(Qf{wض@¢f_Z-+V-1TqUfY28e"Džbh^D%xYD1y℡ٻa0N@:p0hυ I?l9XdžMͶP%E^D̄ @edu/harvard/hul/ois/jhove/module/html/Html4_0StrictDocDesc.classw|VieKkm1M%A6gnGwkwdt05HX,@z#=^Io'ޝϷ~ !ys3޼{p'^ o"<@9o!M6x0.;%K»%G{%0Js%OKxRg$|V$|^$|Q—$|YSvIoHoIxZ·%|Gw%|O%@%HC秄! / "o { G J_ #?,")EgJg¸X$`ZJŢʺQ冁a3Y m',аvpX^R q+i9(/Tb)UY9!i8 M]: ^ .<1ݾoAsĒXb.uBYlh{.VsQ*0Y͆#E<ܠ)hJs}Κͪbؕ͛>bXoQ:O/pL7LS]t UJaӷ ; dJJÂ\0s}*Ȓٽqѧ uy_k]#1bz:Kt},\啝X^ 8P T,` Źv[­tRXVv}h^Gl^e2>盖*UEږ\2`h1J~6qX (5+\g~X09ehflRhK#2x˖0<7r!w1.S?H*Xέ3G  [[EJFNA-YkCi4KfYZ.\Kx/.#\.ЅI9!1K0H0DphWs HC !$ c0~ xOq.g`|w)A ]!{&%#О WWq._'@?H8@p3­dFJ &6m+^x/,ٰ˖s}x`bըae]*iTư`Mp^kSymQjoP c[9'f EGUﮀ_Ar?+& vDUq"mJ*=tPEqnTN$^}0*ZqStoGofjtUҶIT/6Ü$]KykJd>fmLip ~SW>bEG($ёAϋt St?* tE_zQow4Vh˃;n| :Af4G[7^SHލe.?8 { zkQ uh8cXǣKЧIey8Qh8 qQ^qN`GNCg6302[ Zy\Zeauaz:fHqG1CӺ: +cFvb㨕VLke=X(*8H-&HƎ]QU* L'<1g N42Oc%T'm͕fm\Uiװk1ؠKn+Tڛx[2oc| |zeꍗ{X~^16* =0oHPK F|$> z8<edu/harvard/hul/ois/jhove/module/html/Html4_0TFDocDesc.class xI^" $1ls@ I`%5+]9qzmhiz_i6W=M>nYk |(1'O> |,9/_ |IoHoE1Ii0~?~s/_~{IGIgw% I )J"ED )E1)PhbshB\)R̓b~D, 7%"(r@PjbC^Y+h^s߰:&+n$rG/f65sj"b!WCD\e'hVq#(>يkg:ATt"bZ,ֈje4u;9\0GdV -YpFrcPwkvFE\ĠbvKKT,R2X X"Z6HҝܡNDZt]P˜&7 Z'S<[ZV)i dZ1JE\ŞЋZjR =_t2[),ӦE6gh96|Q:Y 5FuZ: t6x"ہ@/^3aWlGq gGFi ̛(NRGt.7El &\Nxp8,nPč 8 4⢩Yv-gE8UDœ;Q DŽxjM5`V8( iJY:}[|[qt蚑5CVVX9~znYx@Ђis!) \A˛?'Kgb^L_Rx j(!: \2r0 ,7?2Cp1ŏzOYz͓ȍpW'H(3iqZW) ]ƒcczSIC#?edu/harvard/hul/ois/jhove/module/html/Html4_0TransDocDesc.classPJ@=hQ_ )(nbAWJd )yI_*ZQ(N rgΝ9r|}m 4-,ڨm`KٲMbaCKWUgE)X&2-Cb$ƂWeK2ԏ4* o<<=*$h;1`65T<Xg0KdAK " A{hzCB!qǩU0sPj hcSt T`: j.kO`<|i`KgX/PK F|$>oxC=edu/harvard/hul/ois/jhove/module/html/HtmlAttributeDesc.classmRnP=7v$uJEhy&iP@,@( jDXE&W[.~`tHH,s#\p9w|r ` c!"XD^ n)zfI/0Cmװ-p:1ʆXZыO,+ jQ J`6adme{ں2<0:!o5MuohaeXAi2C6?RQn1NCJqydÆ BlSp^}ưIFlnHm-NK2mӸbULbJ q視YFkZciNkMޱpJKw;._m>̭sD,-lֿyGp55o6hqqL!$*TCxhџv=&Lk#4f(^"4Gec`cDrcH1?Nԑj&J@}z2w; >=GG~OK I3D^ iNwҒ(}+8?A,-1)rz)GFbGI=ou)3bl;r74Z2 S#ȁ("cPK F|$>v :edu/harvard/hul/ois/jhove/module/html/HtmlCharStream.classWGv])kq"ŲNŶJIDعQE@vm+%U(W((g$-р( 4\PJl9y׼y׌w?aS/Њ1 ^a_0W ^gph/⚊7|iW*~Vxɳߪxˇw>@/~m 75xWŜ_`)cRtBBp&Mtḑ*Z2ySʼn|E,1 ^cHS)Z 3VzȚL%x-d讓,@D&UfDlΚ2r~R,sKL.(\Lg#eLKh9M6Fa0\mۄc%4Oق)mJp'C clH4}bq3&Yt`$Ό٣|t*P*H'S)[Bv\xeV$Bx(K0-DzQF$td{VB%1oEnJ$Yyv%!^ڴfZm*e/p6eblg N%3ƯY[1R(FբJm|HOFLO;zVi$!!ܘ1shEs֘ʤEXش1I]۽mW8BY#s^*{3 a.k؄ܓɴ@G?t`T TxC aS3T.s֮j}\&}1e-Os:*n踋+j: 3:Y~q^^Yq}5b5i6&(Dmj,%tܓ|xfρl(;5@2 9xig ⇊ɔ8Bt$,vXf1BG1rfdďΘŔ*L" pWXmV*瑏i+'?Lƾt"cUW\`Msg&2sZdMJd'7Q+n\u1v}rPs'RUp1Yuo#PNlԴBFa];Fħ柡;΅|%".$19㰃댔b3ƜHTb=%c N$ R[_3HE=\8\K(.rD(z*J)xi|}lE';46ؽF=v-c}>zkB-h☷nƻPmS )$4Jl\}vL#X 9= 8'SzN y 襛o }KH$$!x"J/ˎ ES'BBW;].D{!zؗ&#SL4L VE^a3];m:V8o%NZiQm=:ȧtSڪ.?G7!-QQUjrwk8}%cQO.R]=ЯgF5{Z{-ik>]b6711;]EQA؞q[p,P+͠hRcQzVkt㰓u\;]7ك7̳GyƳOݔjQ@{^PK F|$>܏0#7edu/harvard/hul/ois/jhove/module/html/HtmlDocDesc.classX |?I֌cvJ+1$vsR H[Qt8 J)^`˴MKBa˲Gm۽Wwv{3#Y`[xo\xUyƛ ~,CC#/ꇲcY?+g /oe;?a!ه_dW9-SojK+Y_Ќ7UTlVqA6!0 ">\̗|y+2yY*RdTO 4*URhT-$5 Yma;~)y>,+T 4_C TZҕ*]%\Bd^,R]#h-Q5*$6nZTZ!+*õ>ԋahJe3&ø@0 :Am!@eu|]*,Dhoa nnMY-+ΚqS*ݨRJ*mSi;v(S]5nd kwl뀞SցlՌ[ Fk܌dcF@&kaC6q3GOjwl&xzz`dt64S#3F"Øs0m 9A 4̻H3 =R89^9F az2z0a,XZ$PфJ1=ړI1hzqnF &cQ6 /,#l7AsCcҒmG?3:54^W="5q[ k!>|լ{Q9&OҠ5:H %.fΖl41RewঠF3%#1 4%nƲ7Y#XJK@f( -4:F sY`43X0;BxX(G7q8aM3ҡ8F<7)EBzo"bd"A=<(q`ܲ=t/aaw<2ldm}N@k 1NuF5z>уbOC =ѧhiQvXHffBg wFi>(ryH^qH9FJ<&q j[h43`f9]Lx@c--j4LwkFӗ4zBOЗ5zRVOIةZ"~4zYA4 NhU~MV'%~SaO5e9bVɰZ52a mǗf\I$>pP)=cr.zǾ5o/N7s-1S.RR]7gu㓶 :F t ]V?ԓ6uy")z +W}CK/-wz/}A`}`R9EwbJʪ0:syHiF{WOr.<+J): }TY˦\}/^v `+dL3ay ^ɦob[T`yh3psrec)[U!^3Ѵf.ֱ8wL9c[1#џaNm.}o X7~FMꩴ-P29,%F(1JrgS'=ѴKhz%2$Hz*f)K=\+RwP__Qտ*&鱘y4AW:f_5<`&نƱp,1?/Jk2$0-,R4m YyǓf20a) k1=IWSc !J.yIz~Xs 94ryx* >3hfOWR<0ڵ9kxQsToͲ~Lu0gP_{6cRQN6&+|:87B@<\kƑ]zk91%5M ^}M W ^5|+'~9a!\r=ͣ&\0<LI|qdܳܥP-܀y}e4*M͢. RO4Q{&^K$}==ez*O{^'PK F|$>i+J 8edu/harvard/hul/ois/jhove/module/html/HtmlMetadata.classW xW׮2 `K2jQj1X&Z2H+'K說mH.AM%nH4ڙ"W|3o7Of_xy‡vn|qfy1J8<$⤄10>!Sl,J(H8-s>/ _E _e _ᨾ*kl7ooI0'"~A/܋2Gc?SВod\RBI%52z:j(%H"D ) 2f4@UW%$c  '4EKSY>(⑌2b)$&,++CCڸcjN|Ql2HL'2a%υȷ)%咡t"KO>RQ34{Fm~1n%_ͰMTB(ҺS3$Jυ-'ui/%?5_Sɨ24fr('խauK-$GZFֶjdN%#j2R!YTG +hAu3v*!O1hYҦ_/OSc?K Bh-]̀K%*Je+R^Y9 *` WsVd%mLX[t4NΎU~;q]L[]>& !<&YLF@ZCBsM`)گy u&C[tzR1gSA/+od1 JH3ͷE"xTdE_e<;!x]V2')!2-bJƿ38 hLzDG@}6f,X5{_bQes:#DlYKH񨚙y|թDQ,uYi qh\`䇀Gɻ" 6K .Yp REO ^pseP_MDzXDA7ʸk|"%И6 m%RtC0qQO(ݐoQ.tTyd(F1Ow67ե846MCu]%M՗Gudt[e]ǜ~aUT\s1ەMr^uyی8;=Pˋ kkT1[h*Q;l ԷkGtD$pVj.EƦ--%@VѮ]QwE;6wD;e&&YDkQL,j WvƥLN8'9gZ`a%4/&lh+Q_3W\u\檚+=.6$};9~8lLLLL\LD&7:&2yL'08x '`)(/`1Ey^OZ *W0ni&:wA@ o=N2u)֗ E$NPbrmi2u2/`++Xzcvf,ۗ<$ Bȃk|<Ǫjjɣu[y?@3s o|ZXUmf]WQW-ܔasEqxӕ,+ÜjŸ5e0TlWsxnE2"sx^Ee̩f ԕcN5/ \kXJpJ̹J/ċLFZy8 xԬqVY/3Ķtۄ͠O"4},P.s;P CF,3O#,1<,<0eL W-70U ,@])@#RdaYJn ppX5l( z75z;l$9sX51s5-4mjw CYtx9͗VlU,6iJB[ո?HpIKak;Ono%hI'6zuØ1~9I$z|.yl!=d ȅsإZ'$w[^3 7Q7=xo0(~WqPK F|$>y;<edu/harvard/hul/ois/jhove/module/html/HtmlSpecialToken.classPMK@mTh+zX E(ࡠ"x5YM"1?%mE\7v|}p] m.=wt߳g0o3JZp%E-NZW|p2a#QԢyT)Ǐmy5edu/harvard/hul/ois/jhove/module/html/HtmlStack.classUWU^f )PV!PǖJX)Ť&P şCI& ?ѭɢң k)R,}ywL~_\cowyW'3W8vMci}6)\:r)q͇+h(jXHUeߨʚi7͊mXmVUu|snHͪ4+Aj,Yks/_&Ugդ/v$%)b6qũ;AV@IPùNYiS\SnW.fn!DR(VNj,YUa \LnƗW&9ºaUfϩ_^-@/=gwMwfwզ-}" 񢁗|%|b6 °6$`<a0%. %3_c7B)3%L l@X_3pfߑv=MP~gG#Ɡ\b~^\]ZX} Q.ZDŽNy35ՠ2Q}a][pܦO/ojVPH:mt'TF0 .KëQ]14ZxB?yЏހ${v' >y#MѱDf1b{3畽kM'2[Pgq.iXf| e2Dbʨm$yd7v! !!!GIbÈs8z$^?}EQT4);;Zm!PѫY o_*LQNJ3 W/"6wܯKGl]B-#<7edu/harvard/hul/ois/jhove/module/html/HtmlTagDesc.classViw~Fhl2J@Hr&18v[u,Mmь KЦ{% 6jS=}RZBO@R{gc9X}ysי="N̆z04 a"yE0y ~ޔaтjap)˸ë2>-3!|5|^e|)vTy/8_e<|C7HV\fT^+NFQzFLG+UZ2|WorVohiFQV-#0L02YJEB`l藳jN:w P$z1K&#}gfOZ4ӦZ)< ҍC<qg{xl6""eUK'sE:&Hl=񵆬]8O{K9"4biًZyT<; '뼴\a) [}k5L(ڤp @ yayb˥\@Wl@USZeFR|d ӥ=U(y=5m~HI,fem^( XqHKrҏd)(-rUTjtkT{R,fʹݓ('( >iR8tIhɥ y?&/>j0MY.˿Խf^LN^m # Sc/9FVD'8כW+Ufkw8?z|ר?{ ~k ~Q>)xg\ _kLޢ˖Qc?OeLqSG#zO; ]- +x K jPkF;lo*K'/YsӖ^ѬR.V%VitIj&ͱzK7״G [=# hxsoi5sHLŢ-V3ru=jזY-KK2Yv~٭ S:Fx EjN+!ɇm^mv=#e=khEH13#Gh+dSrMUNz_ sI!Y |E– WRC%[RT$W}vO׭?J3~n}~lV;4HN AAA`lx0P i]8H-#*E+= hCsnM~ggL ;edu/harvard/hul/ois/jhove/module/html/HtmlTempTagDesc.classPMK@}~!x<(/` !dif6|?EP?JT"=7̼7`cE9V*Oۭp,kEtk_iKO9!حvD]1#B@2x"cTg$J>JKLgþ,v&bfzт WJPew]]Xd]52a5ɮ2ٷmgPO:la!,V4 A8+s PK F|$>{7edu/harvard/hul/ois/jhove/module/html/JHAttribute.classRMo@}qn#-Phivku)Br!( VFĊJpH$H8rGG5$μ7wvq/yܗ'a_I, 840Pa((rp%t#W dJ ɲ QoFA ~ ; zT*%VZT{<7gB4O}H^\SrLk`^H%ϑ{9-SJvִHxαsacK±*ۜ rp\? ܨ3p~4^J^zyFS_ɯ]L"e1thRSJ̊U9Ic&kpNEGFGPbjiXeẂV:yQcdFڇ#hvIAK91 L';\q=ZhS?_ .oԐ3pǘoa3LVt EߞIkSL0=?ݙtnBPK F|$>= 26edu/harvard/hul/ois/jhove/module/html/JHCloseTag.classPJ@=6McS b7ER(n`$edRK((q]ٍspzp[hPE;N]="b!'hϗlŨ`GoUDބzD 8S:5Y_tquSwG]vLac5{ǀ)YbKTP$ttSBAB&yKC)KͿԕGOYsDHfŃi@;jju;Eg%YkuukCǾs✼ 3T^% M4~)B 01PK F|$>^A)ҭ5edu/harvard/hul/ois/jhove/module/html/JHComment.class;o>#n.fvvvNF6̼;FU IJDҒ}k?'1/]?(3/Z39?%A?5T?#,(E?4G??X?+#,U?7?4'U?$7G9?7759 cPd`zHyBPq6- *PK F|$>D~5edu/harvard/hul/ois/jhove/module/html/JHDoctype.classPJ@}mY4QxтHϽJpeӕfGC)={3p!!z؏p0yPѿ<ՅRRuVg\ycyiJI\ׄyɊ8 'og+a8϶uUW)yZsTe5羰|݁psD‰|%/l"(aOPرqz J?`q4m@?}GڔPK F|$>105edu/harvard/hul/ois/jhove/module/html/JHElement.classmRMo@}|iƁRZ(ʥDT=RxI:N?{/@BGH@;PY73oۯ t,eqid+fb) z kᦆ[ ^g5=%CAa[뉖;1t(kn7;cB]bD$47f=dor̰6l+vwta*,Ct:ߗNNk5qlXg EM#z'X{ÉzR'mzr }lݗrNGd$la0N2L7$\ߑv^2!s6YzlU^.^!EdQ YBPY_(x..Y 9vB#vqaV0j=o8|09qi>FzgHn'VQ[>B>7k$n<ƞ_! Y[LN5ɗ?c"C_`ߩ/~PK F|$>4 6:edu/harvard/hul/ois/jhove/module/html/JHErrorElement.classRnP=vbq^%Zn@ @QQ|I\D?+H*QN*B~8sϯ=.͠Hjat$ܔpKm F;Yubx<  *f;gI SqG!oY^&vOFGeϨv&)ú~wt>C?&_^#~%Nz 8gaN<tjptblk'IZĖ;3<89J~(x7ByAH9?sIԲV-j YĒ3L䭓[ٟS5ޠ>tݰ E*CoO2yk/]uc0gsBuV!#ȇal$}&D}P:DCqG"ێ`GT\uO05 \U~PK G|$>& 5edu/harvard/hul/ois/jhove/module/html/JHOpenTag.classW |fv Q) Q`lBIB+a;lOzZja[$b/^BMߛ&A/<X*UkTb#^xx#o| >"Q1r*>O$>ý<|>#Y(8(9/aDE,G^|_`|Cly|Y+_8.pB:|M|] 0ywYͣ |_?ݏ P ޔ4%;!)abMV&5,Z ZfVBueЊ':YD0fʒÌ6!#mL4٦!)&̦~+hjLj5Pkf2Lf#ECa RȫhMϪx*nn=0#ZIܚy "k>WVpQsyȖ'eyݒrBB:mg)Ю$qxȤ#VќiQ2WUv[FdW1JDzw>KAt$■俈ZoZt^_QG3"N@:e&͈JEŖ*F?+; 9 OR8,C2t26:ζ;X$[/ѯi؄~Wh5/zWV\'aV L17^-' S$F^Kx5/*ɘt`4Oֱ6л;d4pqdC!3{>Ր4O>ϗ.߲CNlȤ̌DpF($;蔆)vZZ)m/= p4ȩs&IK*$Ylef"t*$XII)ezp9}wM Zc d׀w75D/Ek23&s'f^i(kzRYn3jdxfQb0IXuvPL섊շӌXv .(+q)70Tʞ+#dQd$h3Jn|= gAJwQcj\ˤd5ՋϞ=xB:vQv{ $7qF]6PѼZ2qt{$<_.A?OWU衜/8ܾI]W'Bw88MZ";]Lu$:{ַmU<ۖ` `׫^Z"j5PH+#.nq>wqy6qRq;ӹ%Ð p"89P#qƒ8ʶpD' zFq7@-9uI!0/ zu-ahnEuntoyBenbC . c>L}t rE)r,c1R-|@GQ>VuQ}f}VV5gP_X~6'ٺx&l.tI7< QOHx;GiU{zG07I=~Oë Jcy\UϫA(^7 #.S51Q\Zr8/t8}-"o/"SI1)4>d MS"tCN;7kpѯ_/m,5(g o8QOY\ BSܺ%Hm" /w&: scw1\ )p9\n[dINBW)V7#LH٩_U͉[\vmŴ5i{e)m9in}'im/͍=\2P-$k35PK F|$>} 4edu/harvard/hul/ois/jhove/module/html/JHPCData.classVwU6ɛZ4 &!-X!E0m j$dd&/uAq ]p5~r~?rAoRZǜͻ{g_GbA9la;! :}X.񰂝rޥ . ap*MDBj+Wa。 wI KBGƓrHYG䐑C>ɑ8 a Ϩ6ELDmXV260HQs\0`Sz٥ !ӥHV4;ɖH(FF1=˧KɊEàR:nA`.49{BBK:Gq(*"*cT<1qxnxQ\!L]8qK^eXK&m!ٶ6!$°n RLp5lo7񖊷qPUqɃNH0FTcI8S*> gP_8U|o9S=~ (KOu0ÆҶ{UjD6n[+VB0̟^A\&+F60W!]&{NEHMâȳ8NRΪ\"_`l\.zh&ZU.if%x䨞"/0z1(E]LnI2:MZ:iJikn^# &;nS!j@WFn#fC җ, Bi^Ph)-*dֲZčAlfpݻOWI~FC2~f6_u8S'.a<F%,bxҀdpE<q;W\~ol*jz ^:NN+Sr!5edu/harvard/hul/ois/jhove/module/html/JHXmlDecl.class;o>#..fvvvNF6̼;Fa IJDҒ}k0FTVFԔRĢĢbTҜT}/t0(20@HyB@q& ͦq#XPK F|$>PJ :edu/harvard/hul/ois/jhove/module/html/ParseException.classU{sUfݤRR!IX< HE@V`ܦnE|(⃂(?f`d ~)l蔝=9sv6|`oe~9(!AyU䈌 K5& )8@`)A҂ )ȈaaUpB()U`0X#8)GAA+PpJ 4RpF-,䨌weǠyNӰrLaPSsCk7Oú5[p!4vİ9Ɠfag4t71qvxnb:B5g8òF&XY#C>n(rY#ley(tP1Hf2EK(R(Nm7uRuH?渌2gcNyQrbv2O<[wMA؊UYlR[k]Ͱ; \[*cB DU$Lg2 -7aT|*|*>A_KTEН@<2sQ_<!>{AItPM1H^pCCܢT|o*Eob2$%H - Щ#8ꤐT\Ƥ°aqʹOlk=C~ Gԁ,3-gac>ZTg<74׋bN#| .dg Ln`ht^k6 Fv*ST"t2^pꇺHW|8`VF:>!#sw;wɣ]SZ2DwiP|tTF h|h Ƹ迆飀PtU>^0Y4o" 뢱³Qr$#: 22ƺ}[|[IuFlUkBҿMTCMlKH!)F,v=]UJ'&[ӊ#V ղ{8>P|*2!\kI4.cUN$k++U xěœSRzGd1gRk(4DZ8P5~@sOM-5 1)NJk@4ju20oTho>7edu/harvard/hul/ois/jhove/module/html/ParseHtml$1.classLQ 0K9w?lWA?DPǺѵn;CO`BBB F!GX;^x4^K*f4ɒ"Lדe2`BSJJsVQլ*s3 П.f!"2IEķPK F|$>ܳ=edu/harvard/hul/ois/jhove/module/html/ParseHtml$JJCalls.classKJAJ2G/.T7A nfc q:<@\ .<@%V@mE/?\ B!-p&rڨ\VTQUUW-y6U^ύz^^ A0&,xB<]b,/yhEᤰE}-V'bT)V}`¨ԭVFL=,?p|'0"r vK& Yt[Npz6$G=9pPK F|$>!OhFedu/harvard/hul/ois/jhove/module/html/ParseHtml$LookaheadSuccess.classPJ1}6emyzE)B)( &'GSP̼73̼O8A!E.p*PzweUd& BXU&,Ddet- ZI_F1ru팴O*DvEO`Lo۾UYs٘;V5J:Ue>f$Ȗ=b)S^'`{Vw$o'GtG/@>\ qPK F|$>6/5edu/harvard/hul/ois/jhove/module/html/ParseHtml.classY `Tՙ̝M2L`@0I$$%Ja\d&LľwZヶ$jڇjkvmEsu{CݫYc jsr:@~˽i슅) `5m'К4ev[oق1Շ C 1׶&Kokwt0 ו4Aece-)!+XZ݂j2A5qM` W}05%%S sc)`vSï񂯇̵H8"h! rІ'(/D4*Y A_E.M!􇺫6 Cl,f23Ѡ JG^݉宕5,hǖkՉJM$Q95QY,KT[~e/[n-;OK֖%XNMv-OR}KlIKD:QI\,=zcuN-Р`L"7 |rT %nƾ]VXu `L?%c'фɩk.4U@*tAvHf3%dJ؏ 7b\3Ĺ3w! zcz{B@Կ uzWPzҠ fx;zǠ[V&tmnn oA?59A?02=Ccn>IO!c} "}7O'z[0vM9 C|V| m+K&ls+J.C|*!@_HLG7WG0- Ӌ=^P4-Ig,2Ŗ)7S:nnio7Dt(ݴ翕mSQ8r>nП鏂Nm1yʌmg[!7Ћ3,E+L2}ŠۘAd{2m_3WɛL^gyk?g+&dr;髂}£A_{ CP>A3h^:'1> 3CtǑ9T>mһ ?x͵J3/A7fqn_Cb6Ľ0#3^uCyxyN<(xHPN2朶 qṪdKVk?X8a/yـR,qP Mq44L` Zd8OsێS̤ǚiφ[~`woǥӎv]8Vx6#f'*fp<1ou0E{@(g*ǾkqwL:! x1#4n]$FA6>X,M:ey,m|m}*72TnS(J7vKߣS|صd,6ްdj?,K0#(>($ɮoMu F>Dm}#䈓Gx gzov<`rA8xarmG(kcbrAߔٹfdӷ@xp`r◄! SvS~nV3G5sf7TjLEiЧcq;5 Lx!|csނZfa1Q8@{]V=SABm% r67NTa㝫'1Lj5obH,fǩ+kjLV8>"aXتA/lx1+yAZ6bg҂QIf6Y(L#GTq^J&Zl< Z9]gboMKB'ӕ!aMݤkq+}ZWI%;Y+Ԟ/|je5&dYsPu&dXӿ O!RH$!sRH)$$q#qHSH)$$q#IHRH=D?n$?Is +ĕD:n$?K"F!Y5!O{<)x8LYeT.%T` +97 L<)y*T 1m>o>ϗU`zr5s?H${b?3jgr_|bo{R1&Cc UrhZ6k. |39T<'bE 7Lքܭp=!prAp '(U6v=3Z4)mis2ѽ[\L|3iCAOa^^lke틞݋A(Rn ߾:"(m#NaC=LBADpVTuq7!0(F]]q (aA+}A85ӭjx|]n qH{{$Sap6*.6O~:Sz^WVsYR]jӉ|u/ejb_ŏ5^9*x"v0]:0¹-ɣ8DYGrKn/CY^߀xz k, _r\A4zu +73$\C5Z}){Q\ ^]N}$=r_n`ax~fP:ZR>zab!7G>DCd=$JsZ&X\)zZk,[eyowQ^9ZL*U-S M W^^Js+ePI/+/b&ً[T̯qV!_ۭUzv6Y~^U!%te r·S8]3Bצbq!\>d+qt\ԁs4 oI=>edu/harvard/hul/ois/jhove/module/html/ParseHtmlConstants.classmrF ׉MK-iu\URdF‰[#l,2~L}NZV/s꯿6]zN.>=N8=q N/9Nr9i)tӐӈcNݠ,Y0J#dTOәYĨFmu뚑1ʵ=2qb0\C.\)FQQ2:rfݾv"0[Flݾ*.hiZ wn"Dmۊp{jEFy:-{f{e$ 隝ȵ;/|e,U;Ӓ26-vqUz'<1vmp]9OOF@lr0`}5g6q}< Gz^ \ ;֥*WuhQWY΋ÌPaX/Wv+-/뉶EaU4֠ 2 S6C*(؄&66$K#tYr< ͻqޫCLs:Іgcm2:Վ@; Ɓ6?= v0ۣ`o}eM݌^ U*s-mQk߀5&{P~~Q? 7f>[l'곓O3Qi%Nݗ=N6uawA( }yb^J\rH9ނH;^F,8^Vd3C""͉Eh^-(%Q.ehYX q"@/Uq*A55q&Ϲ.֝2TPK G|$>1~72Aedu/harvard/hul/ois/jhove/module/html/ParseHtmlTokenManager.class: `TՕμL^d& &$A"Iȯ$"L!Ll ~jJ;ƭ!쯵Zڭu~Y=^fﹿss=?{9`]uA@'j*&urx ȣ|D"A & hOP[M3{kh" $gsGA`&YfC`.yIh%(ljK P"I\7HX?ASReegO Rql-bbKhRNpTv.qC+[*XK^27[Ū]jXVS.g+P ]Kuƚ4h!)bPZ 6U*d l"p% "p5-jm6!D&:I,63E4֭.j,>5[c14`?K|s憃rP4*qʮU^cnjCC{BhyK7f/gn6;2p\ދXx73tw7DbPOP\e v#Ho kB+] 9X-3@vH ˛}HGL4F_ ĶjT4;w;w G#˻wDwE;z;bzkGz;Q7ic  "5۷s|@z_oWlGPccl-]tzb##nNm/J "Ζm.BYñ_<@vVݭh8C[k2(IP_['̅XaRqpQ=-A0 D@ vw7♌fDwlDzk爣$ԶktvҰ5a /L S]8^ 2"&ORA(rt8 'It,I#si[fniJL҉dimXa0`.N(sQ4P9WLxE)BbOYV2XZV~ &qNx>4!|`$?7e6ƙbQUTHPO<"~yU xeE?z;v pg>3h:}Vg#Óa>/VnESjIq} )h<guvOWiC~g#_x;^"#S7c{h}vc.a2b+\Ktquu0oRmkϰQֶaC4[\l3DœmnlkBRYuMX:|,?so _-BIhHq$ ֢B1ŒI Ɇ4tv:#Xm #3:Z(0kcsd1,'ʹ0oXD!曖d2SZ\U LXKȨc ߗ.eARyHL3uB{ 8 8B|Iu-HD\ħ _P?a>YmC|&H޾biѶ^~˚+<9/ 9(T>h8pA⤌D+;q Jm+Fi2i..RO5 ;>Փ}dh2m!CYJY $ܑ`W8jg_ Ѿ1/g }WBvrAS?& D9 TNW*PqT_A3O'?sYyi]3q+?/CyNL`j-.)mmNLy&Y97u9ӆa _[4ȱ3Ur܂*|9J} I1ck\w 1J*9 &$+;0K1ccr)":IlwI+[p'H-IRHI!s)d)&KAB(F.Fq^#"4M>NIfF"$wa;@IMGIO66K; 2rc;\,`8faX[W_(Y&ǟD5SȣB/r~U_&fm4H5Y5iӬwmۼ)iV0zm+^cvٯq^_)0rߚ'B{/|f2='(3lGcjjG}6e$ti^A\8 _L ̻]5#>G$y a7IScƴ&H222s33T=#7ca %xvBϸ #`dQp: b~B&"7[v04 O@ͩX|. MdɼbR$l4! !x={Z㉿| G'; .# Ttkt a)X<ahl8'`Jl< 8n9p!<gGCaoU % uXmy5C5Y4o-)1 7}:N>qpdEcɂ}v04hN:MpBy*$sva-X|dȁCXD[1+hnDk(cr)fnLf%N@OS)J-4ڋ(Xʰ܀.,cyk܉$Qw> Qp,zfz UZI K xI'0WJq>]ցC$0CICjvzKv6RLۋ|`ZG8?diOz3{4:N.qR+wW.# 4_)A,}88>a3s8qt!/eA)فFbv$azfY2bzM{'Lܙ$W%.Y)Y*YȔ)(ߪ8rIOs =PvcyC2sVRO;$(:̔$7=OFiv'a=3zjs 4,J JE7ǵ5>FհƜH$SK@(I"̽ b=΃Ù0Ee+o'+ $\Ȧ N Yʤh()K}&#t%,nn *A栬5Ci~S%p(\ Xeh<<<_Dy<@;P"ϝ$K$.\eO9P35C 9: k8jh\4A@'Fn1l9|r "g /#7H^:Ѿ7/ڇ}ePK G|$>2fjz<edu/harvard/hul/ois/jhove/module/html/SimpleCharStream.classV[wW3H8|sETMcvbN rJfbˑ%H @i>4 ,pI/AJ ;C4K.V¿+]-.ފY?Ct0,!ޙq!`]|ao'BUx\,l[(U_1i'۰^&^b(FM{*Pfx\.pSD08cx'TJMZIf? |ť\UUc\&7X2ѩGgUVǻc/xSBbt/ u<ó<{gY xEB OQCT;vGɔ0pqbYR93TLE3|ty)jEW2f1eE +Lr%+j|jaJj㸚/X+Wr9j"*!ة38KT_I+5ז/ EhKd' f-#{rRFe+dl>KMt:Ї~jj@(U W.1>)FKFPO;)3RQqHE-391vь*%'oK#߇ƿUS<戊5! CL״>}9S@P}>!}:I*>d8 8/J[S`g䣁 G ^BKVSL;PARkN>6GcD%pw1vZ4 Ilu~~5j 6ݬQBc1𬅓lQVI*bSNcL8Sݪz3dxqwvɮ:3W./㜷{mr[F"I# 5t/:qihә==_"H{b5v R];U =fuH2_;!?f݋Dɐєw%CKM\E5JDYgw.jKe p=nP>pQg='1xm# ޮ[CU `P8~sw`T=@S@$oQ>9RuFN 5iT-⨷2Wm r@Fp$޻wȬ*Ȫjhf q 6e,:Uj\e8'Me~BO@o)")Y߀.!Po~Bg nS9'D=L[TL$δ2lS:|!t97%"qQJ\Ҷs)T<\Z{%S|YeCL!)r#ǼrLc>9xr9x;2ԁud^ {ԁy1z̘ϞuS_#|ѻ!ISa|na6A=b;нң'Az曡3/Q.PK F|$>TQ1edu/harvard/hul/ois/jhove/module/html/Token.classN@c)PƌqqÊbr:N `bBCC ݰ=sL?>_\(,j6Ҩ[8k2#=b{rt[iP0u3 ffV}nVb@J{(Bx'(=$_-cfxܟa8 x7IMǜX̞aJi_36#sqa6sZ>$獖N,1^ QqpCwPcӻg@wE͚NOXHH2,hݦ]Ȉٓ%3`>b5b/]\?!}DfaWPK G|$> z9edu/harvard/hul/ois/jhove/module/html/TokenMgrError.classUSV=l,Vb4 iH~Ѩ5q.[!Q[iKc~\ɔC/P43 tdܙhf۷v?p _ "`=H>| "+bB-9E1)`*LcSwEޏ8"@ļ" n ""LPhrnѲK CGVgFdn$8v5lwڰfch^̓6[s c뷦G+nqeݞZ&qa!lVN5MQ,jj&Kƚ rte!or򄱚7,\ eGai5yO^2-.`M'xu.SEּC+bUMk?)Ǫ ChvۮY5 -7>B_HxoJkpaca u70$*q6p,efTrJ;Zz쬙Xt]ygٴ'Jf;soJ/Ehv-{壎Q`RCi^!QW{IsdWt}%^!uJz QoE#?(la?a?Q+\"i!܎P1D8O|K_>NN8oҼMc!y 6l`/@֙k xB! MA@"t<&'`[96 f6* >*>*}UԺ*)W%ZRz:{-p"7(%)G%mD4pl8'\4|a5@W@7!<DZ3o 7]@m5al)Xr^P'x 'D/'('6pqό4x6^)"=^V%edu/harvard/hul/ois/jhove/module/iff/PK F|$>_!0edu/harvard/hul/ois/jhove/module/iff/Chunk.classn@K8 i)B)磸JTT Pmu4Ď3O#^V)cH|:U׻3oGְidH`!K,W\Q@W&Ͳ*tu{5`X 30ڼ7=h]õFQ }J/ s_}ض{2W;| 5pW/Eoێo025ٰ-(g=A)& 3 *Ow5ۮWeHJ"yi1OKq.wZxN}ܩqo7Ar4$U5 jHatJPKd V5ChRE7Ѥk>UCDV; QKu%h""c2\Fb{qF Eer Vd~ [x4[ =X.?ĩ\a! #ҘPy)EQ}@q~tGoϬRkD0YH+{2,EM! gYPK F|$>Pb6edu/harvard/hul/ois/jhove/module/iff/ChunkHeader.classUkSe~6,-m@JVLuҪТ&PI$EK[dlfà3~/'_HȌ?/z]V 5sse_ lqc!Ȼޓ2f1'&nɘ>уq|$xN8-?я%DDY$/▄AVO%|&. 3L,sV5wOsuڰTǬUg%&C|嵂]q.n`Dͺ-e`E\6Cby[TK usM M6ytwtQAC$TrM_ A.hVk \fo;%vO۲8E*EX/g:v]=W@L#G@>W"ߝp:ST+ǫ ^Ca.F]a@šϱ.aCS22-2VhF#?w%^k6^4SewSʋI|[~+5` 3Ʋ]GEHm*+ ®KxaJTJE76/{ε&\Xi؉tA+s߮7rg/Pw˛)0 =/`{z=g0$Ύbq> j5n W;)NV8\CӒA>M+zk[mن =N":D'2CBcD֥#DKqMfF)b7"`f&gr E&f>Fzb|A/b61tDi'SM$e>Hv20%d"ODy^ 昄?1p[>GD/FZmxq&HF~T_x5edu/harvard/hul/ois/jhove/module/iff/Superchunk.classS]kA=7tt[kWj[՚lSo"VDPlff6T  INJ/ )s3gνso?JBcm\6~& &3cژq]lBIyhȰ+CO4j]% ~׫rEMu_vTaj~.Qk -ٕeՎtEJ ='Xk~v1jlc-ke~&7+ǵ%T[Acc8;p0 +Md M΁%y,;ACqU k;a_⓿9b~7ZuJ NG,JxG%^9Q:{i3ٓ|IqwVT<[a>/@(8ΰ4qw)|r3>b_ޙddԇH!Fy$?RW >0;|N#Nu9l^x"PK G|$>&edu/harvard/hul/ois/jhove/module/jpeg/PK G|$>Dׯ^=edu/harvard/hul/ois/jhove/module/jpeg/ArithConditioning.classTNAnnY(hQ+rikqE"RKR ?-elHH|$cԙ A MM93sw3}`I/qS%r2&b܃ ADq &%܆"S|ڃ⌄zD<1Gбik[e/kQ |:٪NM6E>o@j%@vhڪTeL_TSYR++}Rtfm-Usܷ<^+4edu/harvard/hul/ois/jhove/module/jpeg/JpegExif.classWkt\UΝǹss3I&7R fawHN45Ŵj{3a23LDEMGRaB  V>p~( G24coO< QA;p= G #arDdD81(M f7 YR(1sLȘTP)?&V  C SA>Aw!ܭ` ,>ۅ Q-> mqqо߅OSCv?*؉#2|BA+ZDI9>lNYDĊ}{A5V\`5`JM*+=hE"3cBWdz䠐RfԔip1¾Qc[ @0c3<1RF*V?:0b0f0ԼLD09D%xIr|*0W(dJ,e?_.Dbh%mm䶍ܶܶ%1Md7Q5|6l̈G]Sf2c% 1ǒ E7qaS1}b[*0\TuG"f /xgT|x ]Wѿ,fKpb}xL3:=)qg9tQ%T<=STOcg,Îug{Bhw9-+Qf*sfNƌkf0;!U?fj D/'&/4r*>9^d?&Kt#,~y_~-MQiB}%GoꞺRDGbhX:tlxc܊/k2&(:!B&/eT^ + m:4n=%&}GGL°uMR%buP3VcI} 1SF&*ԃ#dV-IwŌtG}=JlYd^w \}=IW.Q3-bh\BvꪢNM}:B!vL(!#O0xdXDhuYh\8"W]cD54^ n_b(#XBXv͘)BPcel-W*>#e>bStT+U R0}kV(׼&6x,iF 5>Nq g\ 7edu/harvard/hul/ois/jhove/module/jpeg/JpegStrings.classVkWW# h> bm1t6-'8P˾_gtCZ깓0Hs>g{o͸--"%˄m«otr&&daJX#uEr'%8% 7  o&Cx}‡>!|*m>'|A4<$|M|=9g9%_Cx 9iSsK  =jը:fndb>qyjzj!8RSW*-es)u%KNI=MRr:i ̜^RP78>ig 4<{sz+KSpxsjΰaX 2䂂J=fZ0kVSɜwU(̍rJƴ](XP )SqsepzU:UVpQ'e LoE. =#gU;)"UL7͖OA_@r M[,l1'˼}q-o]k3x"T+E& JW2JUjIՋym;O‡ؖm+Ƥi8^35HYL=edu/harvard/hul/ois/jhove/module/jpeg/QuantizationTable.classTkO`~^mT@.VPD&6i| e}[_?"Y"O2F=а69<_Lbɇ. yщ61c "䃀;]}xσ &m0e;=1-od^֋S/[ Kҹ<5(J50_8Y,q:` .s"ojjv .q1ВΊZʨ.S +*"#= Cd&O[1+ Ɋa7Om oDD%<tĎ8W=[Xl$Sy%$/VEΤ"'J$cFM=w4w qhtoteD/d{m5I#E?#q{x&n@X{ZckOhS7}_+m2~Pn}‚ѮcWVE{TAn)H$ݠ A-FHf;oPK G|$> Op=/edu/harvard/hul/ois/jhove/module/jpeg/SRS.classSnA=ҵ~JE]_Uj+1DI]҄_ ,]](PƙBb48?3sg=b%\ n榀["nKcWD""+G5 C{ xD0wҡVϨG@ѓ7$6sJ r`8XJ1ASa|ji1Z $r1݊Vo75:uC񹔌u<ܬrt:1Vlu x") fԚ]ӲGk婞q`Z퍉L8ҰɉF̠MZmvuZlZ1ʦ-#}2^G?"H[Si7hњfS2љ`  &d33:2ÍsN=]^MkٵԬAr*ObA2zD;=Pڵ+ӺfYZƧ >YFl>f޸lՑ_y:bMuuunP7[}ԕP/` FOK(|G$ ^ RZz/ ԯ `H|D 1K$4F">2?A#߿B>PK G|$><բa1edu/harvard/hul/ois/jhove/module/jpeg/Spiff.classuKo@gclj'uP 8RWR5$qG%ā#W@H3 m-Uh~yzX9HSdX!,3ĝ2f3(Xq?;m?V1S;kܭ[kZ'lˣX]1yqm^*$xSy]5Mdq&') 7ܳHQPv=aVHaۺ]HbrS8.-jٶ(Ll\{}C`h!UcY: 79RxY=W&(._#3;~lQcz,4ÃW[Ny~al Tj"b FUw#̜Y/[qGgWhYX!i0s hC0Ȉ[}݌C n hw}p'm7"o80,4~$̀gKpYKp d=R/#O%xJ"_K _Gȷ|Ng&?8EK4H:p1ci4$tr /b2J_ _NSZ>xT0['Il;P烮$ɩɺ)!E22YJ^.&OES ;!;ǐj*6%3:3E/PK F|$>cǂ 4edu/harvard/hul/ois/jhove/module/jpeg/SpiffDir.classUVUN2p@ چ`:VPpBIZUq @23L(x_?e 2]>"-9/>g\w2z䆌LҨqH!XyW{HE0!V&#x/>RZH3BPB&lÜw;y;b 1HKUKUtdFjJYuUGSʵbZuz)c K^V]6U2teVuUyFEG ᛆix W]Ф&6e8Ӧl2 Q KR=5m5/Nu,-:Z\˪vA])E t%,2Zacلt xߙRGuḄ of0済W%| >帊>r,0|8kjIꞪQt +%)!Cl*DUZY6JIPM5rTP@ 6p8\!yp.Zp; 5u<opl Sq|o[q*05eE5KJnyU/zTbsB2 >k DQ2u-mRԁÛlh!ĦSLяG|#R:|tpTMKU* sҪT`lUi?|rN.Ubg)Og{Y6mrk+N ;NZ"htbjxժ-J>Y9*ZjQ/X钉 1l,XѪڎĸg뫷Ų^%KFݳ|.MݚNRSB r5ݪvR33v;P]|nnz@äC\!L:_`:0߂?y49ѵKtydh%ÏH"#=x(e$HI&7 0\Gi~׃ם؆z}&:" }azG|kMLI_uGam{h 8iaaIkB&~Di/\$ 6/pKZR8YǩdOWob0&艅wpz$h27AlD\ [96Ύ7y1^|- n~G;Dt "7,u ט7OqPK F|$>=>2edu/harvard/hul/ois/jhove/module/jpeg/Tiling.class[sTǖ-_HNRBJ(NJR mFYkY6-ߤ/3! ᑏ`%;3 Nfήv>aio@:q'qwX"ލ 6EbH C EPA)9݊bpTn?#.>'"T; ǬY0ekj[UZQf!^0JtaUںw:)e{#[[MmM7*c _mjN!|lm ܱ42UM+܉(ӏYwwY6_2V<>N+}÷i>6@~7]PK G|$>*edu/harvard/hul/ois/jhove/module/jpeg2000/PK G|$>ڭ>edu/harvard/hul/ois/jhove/module/jpeg2000/AssociationBox.classTmSU~na EZRpj%XB-@L"$€`_`; S;:_5NM SG̹9=<>BÀqg0CeLI\ӑ2Ѝ27tWf/>NٔcՃq1c`cUs pG>1pj>Ցa螲;ŐgbKkcRI&imm 2+5ӵ}ZqYw͚4 YN%Isݾ,ǖۮ%tO < ؗ ' (mdE(jґl:|Y[~) ; cQ΋4CYONe"hcM8exSNs[Kq|n-XQ U m1eT8lT96PQpEj<{jÆоva腲^0@)of'~j$v>#j5RpB a$FfE 2)2շ(+ êZZR@9¢ HÔ^z#Tr(4H߱\~)7/0;# D9٪-3_(2trBmuZZieLC9+Ji0ܕљZDŽ0 .UprvD^d߀i`#6?'=Cz .$_M m]?Lct@_$_Ghy #;wqa|ݣ Fg##F}pg'c`eC >ĐrT30t 7uR#kЯ]pV* m/<ӈ=ゎñȥpQǥ.B}42#Y \m[M'PK G|$>l77edu/harvard/hul/ois/jhove/module/jpeg2000/BPCCBox.classTKSP.-bx#OQPԖ)E@-y Ugsi.mM:Iڅ7,tAqqO'@MW(5{s9;v (U4 R\WT\]⺊*1bCRF5t UezS kmu׸etZEa,wvcbNMW;BF1'D#w!X1C0aAq7 C ~Px/<9 ʠE3mU0P^JV%.!q+<Ǵ21 Mhp cgG'HAMPzN^5ܒ6( P0aZA\C3 f5ᾂy I,hxqָ=Im a QD·Uߤb=ɕFPS6 !<^ |Ǩ:a[|1j%{pר2&/)h|(b 2^@saP 'c!V|P@ezo DZ-YnR҉s\7ydf,CZPK G|$>O}( ?edu/harvard/hul/ois/jhove/module/jpeg2000/BinaryFilterBox.classV[wUNt鴝r \&R ՆhmHmk1i2MRҙLj E+/^|@e]⳿/gJq9ks;{ІoE@ qr#"zǿoG؁80'E1a.~Ji 8\-xֆ# xNEl" c"cĹ8' nS'\$Js2)@Cp88C͉^ǘ>=ddUeaC2Sz[1^-7QH(YU3x>TSJ6LA= N$)58i58Qm>MSZdx6T>ܡTZ7`=Ul;P?d(a%3UYg:fhN7kAiEK#cj01H  ӦyeHCjz| g*hKB֎H]9 #@PBS^0 <|lnj֘!cC)MP0 5+ഄ3xQK^+|W&u!,dQWt2J*{ G3գI19Lt͠Dy4d:?^5.-&wpa}24J [VȄ{qPϓ5E܆ |(a7 {Wu25_%|O/pI—JFe\aX3^od!Kʰ cm 0$UY;Y:aȰgeXRl/Rr]g ޲5z"T>j;W.aj%p֮5)^Ҷ(oB.9m,؃U1Ն/Ne h54w)Ûö kJ4=gv>u7Hx9Xh;+]2G ÃU\q+0oִ• ^*yX"v6g m\DJ^曆p|>khV޴|ZL3+gUK@ۦjt !^ a/v5̂nGJɋh׺//`ނ-a߽:jݻf9p®+A?͗&QFT< gM5]-sXC|c,6b,6߄iz mcako>K(9|=s<6ӸEq^_vwswB܄CIxi{'qFQEqcIlqB;$̛gĨʼn"QHVDوDNʵh*1#*:qXIN|O^&brCjPK F|$>e9edu/harvard/hul/ois/jhove/module/jpeg2000/BoxHeader.classTnQ]tZZQUa:ⵍT_ȁ9 ?MD~dbg`ESٗokswT&G^E)-X=)VIIJ*XcP*MX^2D+ޛ`,57ܱ׶kCB]$JI]GmnpѨGcݖV žRtbv k<qZ]6^ nviUlvl)^EGɿdl&K2s3^xoV}~\-vu%= ڒdqȪ~SϒaY \0 kxRH+x1hĔ iAa|4|E81uZ|5a*ig8*}~C$%/m9q(Vn$ӤSr}b: ˣ8 \(yz-Iz(QH Iߴ)1/W#ma0}C} W%V!OG}ECwK\C%I#įpo),ܠl 9edu/harvard/hul/ois/jhove/module/jpeg2000/BoxHolder.classWW[U,|ִ6 j ThUp}wBתJU's<#ܗ !ޙߝ;3w@~шd96#D2я5 2?ұ &C, 6fܡc&9&.|:ĈsWwkGJ>&Ldx0G<1 I OhxRGbN:YyC8+^!;HKd*0aI򙘝adbYP__WMzot6# ,Z6!zO`e۠9lvӴR5ɤv.e ifͻ]#!eJ#͔t`JsI@B̶X}y :=!R(OteMG&s5`ZPT&ҖQjZUflK[i*#v] v[q3LdJQJf[twGjdzq3CM*cZĠLM+3נQ39340NDhEQڎ+S]>iN째/|:]d 'm5ӖLU.l+|mD7Hh7p= wǤ9d./fd., ]<TZ\MrOuyA`M[.o,x[KTnmw4x,U&țFfWw AZ/. U3g QኛIwGflhyNb߼\P!'R[?FV5kJ*-"A:':gp9Z8#٬RNR,*N.ݰ](tZٜ57Rudvΐ"=7` 6R :u55-ت8Jũ)~5+Nu]qꎊ*r}]up[q6zO@8:8T#X@peG'jjh4F5|SЮB^ތJtz mIe7(\j n rZXހǔ<ovzf)iX0b_ 8gK3*GTMVĢn ,iVEIr\s7tۢX/%`2SL`m{Nq1Vx=X97sɮAbR3C[׍m*:\<\2_\:º61F+@n_G \so,_0(*7M<a>)N'/jY\9YQ̡^!ſHSE M<{ŧ=!8:kSJiWSL$.Tަnf)Xv3{w'!ڪhM^ .@z\r\p^h _u_PK G|$>ލzt @edu/harvard/hul/ois/jhove/module/jpeg2000/COCMarkerSegment.classUmSU~.$Y^kXZCii@R65LbZ.%YHvH~O~~Ppt.b'ԝɽ99s_⑂vZF$\1\;pL,W\û %PЁ x0 0,>qS-1e|(#ގ9 !8I*H!-ᎄ m p'Z#CDgʶC=grZ_.rOxAkX#cqAET' S*t,"'XA^BAUk(2ZuEmҶjp\ph'lmf>VE eOkQ7ZtyBhw2+enUH*ZٵE#nq#_pYgJwHu71#oH$THxt\Aӝ$Ul*}Ѯ#yJn ;m"Cgj{nSjY̹|zlYeHATN2ʳJIL&z.BOi_<ؤmL&'3  owR3 /$ 4yRi+hҍ3pG"8G^^Lh!8 @edu/harvard/hul/ois/jhove/module/jpeg2000/CODMarkerSegment.classUSU.fsCJZZj5(lS$-Ҫt^d7no՗"《>;ܐ ?:Lvsw{sٳo Jx[t xG#w5(Wp]ōCRq ܌&US*ŲU1C##IO˕y (XT1Ce[$Cgb>Ch1RuF=myd2\fM/zVKΦ]*\%]uad6v-vQOپ( WF*9(1E#.CB*Zڨ 2}Z3Na{k[1d {YQ%WbS- 8]v KS3 wU,A|Zx6_tE ~ҳ8ֱ!S)32k@pؠ#pPeH]ŊcB_Q}&3;o͉be~z3̎)kC V =!ۡ$2-Ơ Bny5?׀&Wb1Osgaє=iã{(y-OKӉ#E`ӉaJr%ǥ -Eɕjsr{S_|*Kj!?w{.ː8&dCA2t7Aoq%=03OHi2mPyC'=ZruMeS y9mi\6OCTFx'|u4BLo:dғѳkd쇆Cܑn5#:B'SJPF$hh,}-áGjh8si|h3_s#'.5"ܧm! <ƙ,5&v 6`_ jm6 -Pi[|Fڀ/@McKo(ola` vnBSМet>7)b5߸S0`o6:-?PK G|$>@edu/harvard/hul/ois/jhove/module/jpeg2000/CRGMarkerSegment.classUsD."GU&SS\ JCHkR8tʒGC3323CG x`ž!tvɏАW5Q6"ø^R8M1LU9Lkx 3*ގavp} as1܈ޒwUb-Hz|!,6}A@t~S君 YkP>{dfh{n"E\q9XyeV˨sQo9gFF=@nx|dK Sq/\g+ea2d7U,(`IG*>QBaLlp!Qk7Ly@Lº X*>ѱ Y/^SϷܐ;@:> I3 6{j hz.Q*MpHkxÄŐ9AóZ066=55ePNn N~ador|T U$S0d{5pYTo5f[~vX㧠!1i㔖ҺvVT.d$G]j֗_r% B;^s޷ePKU)Y?exRn'vsEqmcc˥rT!稠N t5% }`1I!(^%R@ 4N6""No](;PۈEd fR_#=3]O=hdV+o+ssD ߕ1QJd1J#Е%R(Itm<' Ix>3LD{3*Rgb2#CPK G|$>1 aLDedu/harvard/hul/ois/jhove/module/jpeg2000/CaptureResolutionBox.classUrFv,[(H06@Z1hB&4M/:lYB_o<ftؓCb&o}=c8@'ROJ,iidTLaZI?gqN%K}Vy$ E q)\a]5m3X`7&MGpp7j5%斅䞡7Zp6t% WslV;[\CA7HIg`ݻEzVMؾ_" +IL'B\>uhpp 4q$i/ $ڈF^퓲,_i#>ߵ^ZD7"ouoP?d[?z~|hl\jPtTɾm]BocpVMxCm TPG/Ëw20㴈?bb;ę494U PK G|$>.c} =edu/harvard/hul/ois/jhove/module/jpeg2000/ChannelDefBox.classVSg}IXm)jATlE E jVd?d7]0؛my?ǾCtLvING{MtIdrٯ7y?NW $H8-V$>ǻHJ d05\dLp|=9 L )q3♖ 3MnI-kUttbIYUO+j,kZ'&+bJ!nhV|)oxPW ozy6ԲW 8nM"؇Bai8\A_u48lTukx}gG3ncbQc[ݵ@PDHzc'19ɘ.<㊄satX"GO$Az2QЉrPK G|$>*NKe:edu/harvard/hul/ois/jhove/module/jpeg2000/Codestream.classWy|֖-Y^ p -NRZ Hb]FkI&}I4- n,2-;M>_tfi% _Ǽyo޼VsYߋ=ЛE=rxO7c7;f&Og &d,&fV~&܊ۚ|x!_~ O^x|`*F^^^x^ nFYMǷxVƱɝL.&d.&'{|ɇbr 3ۍY/Cw<|ƍ{ܘws9~LSL0ɉ158BV#S*q2!5<SS4 5$oPȆ\ڜ`rX|Ai W]d9jO泅R([vrixAɨVjy JVYHE78ΨV?F9ޤLe+J7N8x`jOǵܿyJ%HtLXda Wy;A;&'x`5ctWX&?-81gq H|94]Í2>Oen/}LL>L>d?Fd,༄[Bs"|/c6FHgak .Ȉd%IݪRuG+%W&#~ߐM|\Ʒq^w] W?TF N@!D7U2y4jΤ ^>|kR SW^?}2~O)~&_W2~ Mo-s'ܟg_e3$tTL&5 (t0ϥ93&'TtNµKOyeQ\TJXQ|TuxAWq) qy멥%t^𤚤uSdմOnە7^ƆGcKc6{nӥ5uqC񄄥9?^k֥ejNrE GGvqPdppd8184"˰DTjzj%=#q7g %%n^Ro8WqFu#@ZFVgL~YD˪v16V^H3Ǖl[Wo)Ywi顤T*_KYszNr7ӎ#m?jZ>ONY è wRSWN%?|F|(JlQE${Np\ _YJE%HdY&e*Vi[@g.t|c3X9tm_e@=a: ,` pWmwZV Ӻ-ɇW`m4@)L4 7fn+6N}cm$vF}N4`-uf=˹14ve+Igh<%roI-o.ɳrI-o)ݥlpT4>p];:@yTiל'U^V*b9ܷ8.]PK G|$>rb^ Cedu/harvard/hul/ois/jhove/module/jpeg2000/CodestreamHeaderBox.classVWGٰaEKj@ *ZAP^ T } f7nla/~pN=~iUzgkAɝٝߝZZtT42Dž9!_椆Nt sJnG8"!zË'LxHK!$1 uxYC=j8WT 옊WCxMohya *R** *Lpv9i.7r m}<]e wpӱl9:qox WV ]o]ဎCzZ"`ص:R(]!(A*>> ^WU|3|N Z0 {VwӖ$cpf"d^#%H Fy^"ٲ_kT.)c >Jo.Hl"9 vH{6\>tKvegy:v]_*)aQ:g}%)PhuHI}޲~HNcBHV*+Ɠ&h}^&*کyJO,f *)72^ me &%|^XUل*ep@fXesa)?fmX*Q#yIH21pa@WBU{"EE .ڧQ'gQ{.S%"^_hB @edu/harvard/hul/ois/jhove/module/jpeg2000/CodestreamRegBox.classUSUn.۵P`i V%- B0L(VK, B}p|/}Pǎ`=wGAn|s? >Uq: ^JO]Ɛ2^0Mo- Vèx}Km)xG*1`RS  #\f"92r -˱1|2fy1x}etubxgꕺUuW]ns}#CCC1&ҩ%krIH2B`Eca* Fu|3tyP*IIچS g9崆~\АG!~nYc{3GiX=)D" 6f\z:aO{Y)4| )fa4<ć2>1"Ob0ė*54$Jv!zu{$D3~](kFiVW}08 kX}4بTlӞe~\ù?,qjs J<ԾHr!vik_@Śq'F:"IҜo姞rtV55ũnsn$Fc8k;އYKM>i?f@&ZKxȹB>0_\fz%_l<'T]HSv{imY)rƞO iM=k;`߆Wq '} 2=/|mD#OF!%mA~e0nBFCun#lKXюF#7c='M[)!5nIUG>""BD!9Dm4¼HH;xy}|X(3'9kyѧiM "$Wd\eL,I2G u%'&,PK G|$>ET=edu/harvard/hul/ois/jhove/module/jpeg2000/ColorGroupBox.classT[OA]X[B⽀)R/-0&Bnlv/|A&FL|"*n97Ia3`;Z8"UbHYSƈjqB(,-V)(qVϥ`|7.X5^20-"w</ %6y:H/v5(tpꡨs3!&0t,JW0X.0١ 鹄Wyx/ *CRE'(](}ͅp,ND2Q VE2'8ö:@Ug.Z;m0PEe\"t#fm\V ژ@t{c5\q7Uo64n1?v0ƬdTՒSVLH6A|uɵGN?Hvɷuq$*}eD3V,XND2s<edu/harvard/hul/ois/jhove/module/jpeg2000/ColorSpecBox.classW{G%{W&v;QiS9q qhkN" M0ki,-UbHYGBshL+5Br_hy3+ۑ7~=y@+GG}8A R\ʏ!Z *>pDʏe0ۨXH# KEև`CnUr'BtB|>5byyXn* ߨM~lHߛgTܥnoަ*ޡ*ޥVgU>؇s~r!?b‡#Gc*>>`os#C4=Cfʴ<;`y[7OC)>ۉP*YF.4NPJ<4֖P5~J'tA/ `11G}8ͥ+Plqu )dMr'#3!亚d(؆lЅi>Ͱrw[oܖ\0l-m$3b> %UϼcCOt9Gx:p¶SL0XSl,GOQBcUU8R_,խl$ q55T"WjCQS.4/f (`^@(,peNIG3Sk^+`7;/Y\v[q>gzr^9`M%:uVɝ~6k}m簗fI.zֻM~GY)ɏ*)$u!jD.YSŗYH6O((7MsX!nH͓XSD{Yt¯wVn´R ދ}BюjLиgl?^1oY/RaDVZHjig/K PK G|$>HX DDedu/harvard/hul/ois/jhove/module/jpeg2000/CommentMarkerSegment.classURA=I& D@IP#*.1,dC/ZXblQj&(Z&nt==O1a'k؁#-$8! x NhANjWS5ҜU^8·qAC4 ⢆K1h;7a`%ELh"v5I5gwS (y9FuBDu\Uאฮ&8:n"pPXc֔ Jp17.tKBzŨ;?/㖎Hsdtd1(踋49s4S02ZDN}L1tקҕI,PґIG[pW;ŒPp8xi\c C]R\IZ&IS>2# jpnyOIɬ] -]#Q9pAxkMGcB2Hu.3\z "O;I5n yB/z"^y0Vs*`C~" ٤+e :]rD GC ?Rn4 ӬH̉7W(M'n^SqHO,OKQJ8O\C U#ڎ?uZKڟUf#kez#EoN L5qiF#1س 7`ZLL=KhJC3%ၠFl~}6T Xϵߢ-Hp/jz2Bܺ\{2-a{v^H" qg3|~(9|5QYPK G|$>@}c>edu/harvard/hul/ois/jhove/module/jpeg2000/CompOptionsBox.classT[SP-⩀wQBi-C„ۜLrE/8uG_Q{Ralv7w~A ` \4yIl vuMkqD&bHi1qq X ]3Ydq޲-WZk\,pɭlQ8 j[vXF͒nhmV喰iԄJ&N[r{YdG_0s F l0Ē%e߬3{F+I4$ёsU68hqqGcF{`!GcKZ<2G'jѰ飧f=;v <d`U66^VDPB?DFi "T0L{F`FTZ]^EU |NVÛ+AYLjk UPg?1 URtHdYs/t+p-\zPeVO4z:zJUR0Ok좔._]s?EH5@=OQi SA4}DOxld'0C7Oq+rnD̾&)D|7>C p6h|7PK G|$>! ?edu/harvard/hul/ois/jhove/module/jpeg2000/ComponentMapBox.classVSUv)*hqrJKKLh=dwY(KTh}KqcGG_M8%(3v~zc (J8'LbX^d\D~1KBzYH b.h ȸbAU6DBs*8^j2q ׅ"H!a?12%Dd|I[Ԍ&4C7sTW2Y?euQW4[WɫK Ws=]]]ꐹ:jfun_g:gliPt ͚MM o j[N4fOs'ɳ q۴&y;i/Ռt쌑Wp'RnvP\,нre{Ģ E݊[qYS )0`*pLN[AC1in Ų"ᶂUQ&, wZ;/{fewHPGX8 od>q_b e֒j Z݊vTM. 9ڑZQbhdDlܕԡsfSnQL߶M#MI[u\^]OPSHD'B׌f hH;ncD乢 CٌN[DфeV8kȽN'FI&n3e'R(f3iE&[" c '%"s鑫# H'l(!o$&J?yzUdO9=^ٺ"za2E\M(8O5vD٧ai^w0^lzhXS é vF&Q&kBVOѫ sw~o1\ؕ`k gќߪj^`?5–]Bв;<=F_: <`֓kR3`?* ,J_N2=;~ľy}`G>#Zt&?pX$zz};𵟎LJuRyL:aY@BI!4BSo 9t9`s<$Xr\|:8op=|r=o)wqtoop}<N/u[\im/1 %a/tK EJkKӓzھwQ?PK G|$>Ĩ) Aedu/harvard/hul/ois/jhove/module/jpeg2000/ComposLayerHdrBox.classVWW Vո(а4P-tCLI& jE[kwotR zNko)oIs}n_~P *ntۈxJ> l8B $<.aP C¢O ^P kVx KX 1Xx\g\2ڈ$|-c VMLd|ί𣌟DRlcK/㒄+2fн*cz QO' 7I!cm Q|:LJ [b&>YD GT1SGlIMnV:׍QHX^ TF9؀x.Þ<wyF#Eor5حs{hĽDgEDm:ʐl2n%v._t;WBPwPݣRY$"M˺N\NʥJ2Re%1%5;f N-mv%ݺ EN.⭑owO ٤WPC {tN,b+0&6,oB뀞 Ą44ߟ-A\"D0џ5@@ 7HV_EMU'a2M5WgQX}9HBQsTo6ڊI'&@qWLLX@-*J`#'PJlu6behMQ?X >edu/harvard/hul/ois/jhove/module/jpeg2000/CompositionBox.classVWTU\x3C\J%@,[A%@ [\{{ol,[},IfR/uN@xͰx"9{_P~h ͠ :!>f0RpTLO^G@4 wУN@^w4 rnn5#jJn:"Pf׬h/3РMe?!cUZsьGU]vXSgF%ÒZ(;Ь%:t~W&4l/YFDe& 6}tn{MHw{O0\vXSxEū85g4dp+x*M%P 5Uسx:s0њ xlwz2fJk- C.YYL೶*xW{xU|U|OU||dPZ{il5opZ`L6j,KJF jͿ12W_\3biTTc/;;GGT܆T3\:*YC񌆰ȘT*~`狮uVqLH!6~(p^rEdbZvmO9:YU ͒T-3EKSE}I~9nWS$vNN]קqJM^c gؽp1+ep^_nK&1S`<7m0/sk {֔=th"̘txBNMur'^!77֠d;h7{#BZ8]1ɮ F7-"O]='/ԝtCIYIcrV3s8!;[[,`ud-VAϥGK48{ Yv]]@EVE¦k,l);>edu/harvard/hul/ois/jhove/module/jpeg2000/ContCodestream.classWICi )TP0%-vhyhҴi:7ͽ+feG`/nsO~>i>tܼR$Ӝ{{=~ɇ{f[CxėY<+*U~X|7X|bO÷my 񂆣8E Xeg1?`C^U1Bϡ8^S7f ~Ӱ0 RyL[9Әh6S1#7mᱩT8̇2fx2JTu#)3FEg>>R )g$^^{ܘ6Lxatv/OXɔk䬼@]qɼEv+nűGrI^Z[274e9,EH ,dyH[Ԕ餍9jT#:~R{TX}}9T將H۽Շٷl^TegꨜX:jReRz`qot}TtҺO`o]]r(%ZGlto$(_4x$4͗7^mN8'hu{::~uu\ot{|xZ16Rx󤑛0srm7^9Tu +A+5?/*o@`Su{_:{9Fi~ SF:7G)߭7s(}Vm)+t[Qd4V)%Q}QS'?O&f1:K\9/vy"d:Q9n.yQhԠJh^t4ղ8}ɋ[/c]NOV>XlWڥ\ Ϯ[AG/3[8D ӊ+](M"MW42=itd霣7NPO\q O>NKq.^}u hj;ѷ}+?BbȖ]jK~tɖ jЁ rɾoß"i$ᝄlx6 !&c{ l>#oƒ6 !&Y>H!~ "la£6F#$'gE8t"ԲGuк(sp {%r.{RCR P#D M yPlw7*gY }vrpqO,V򡆺Ө/Y Ŏí}3X{C4$VQ-]{} TTf醦`aAedu/harvard/hul/ois/jhove/module/jpeg2000/ContCodestreamBox.classUmSW~ Y^D@ԗ.bj 0Q[m\d1ٛ0_303vz./N f&syϹ?>C/MȰsH݈t7F?#ou|SE+2/踈K\\ч\Sݘp] Ą:mJek2i,ז͛ժi!nu[<۬t|s.Wٔv!喨g23'Wgd^vC|RڂAe C,5rXEuz~`ЧV85[AY4<ٚHj$ʰa5x[r KqL▆)i 3 ;=y+RV|upe`jM2$=aƍBxyTܟ5r11(qq.iWÕwpRjPךwQAaP)9lƖ8Bޭ%04sOᗨ!`GZ%pX,G+lܧ w|nBPROd8KRDuB%ނmɟ/Mva]+>5Cs[-Rɓ<+2xeZPi&>_Ќ\ 3$1+ZPJeؔ"6ܩjv([xLJqg!v}۷Vy*6' CԫIqhңck`oC8Kh>Kwp 'b_$#دE5$;c#`ڝ耯=E7+8}JCk55tpr=xu(GH3 _Ma$N'CDzU2Uk7aEPK G|$>JgJ ;edu/harvard/hul/ois/jhove/module/jpeg2000/CrossRefBox.classV[SF66QĤ6$P0" M$-(vͥB/b,L _C <3tL'ysNӳM6j;{Yo*nF^Wp] oܿ%mITFj 䎂qR: bJimFE 9+=xOe,碴 >dP ./%sUuprůR ofKIqpJ# 0* w׸k+KwLO_]qք^r%ղ( cMc9`PșAPgeS|/[rAE7SC(19Qhฐ9IҘVauӼDn: v1I #p$/p5IXIETv,QӾ~xs&!U kX$C@AC +LjKC l8 w qx Axe|еqu).^c9N-\aEl GxqyiNK f8O Q<|+N5t#p cvw@kj\q?:BZ6ױTu?Rj9F7|Ap!=&Vr5 /{ >N|XNcC' i~e (+ e@ИY^y"9Wvs5!RPi9xAB#L 2]bKeM8nIKr[ʧ!ր]MK{A!Qnb1#$CQ\r@}1o>A]D Wsz y:-6(*G;ݢQ=֦5]D{!do/@OD /_p BX[7Z[5m9YQ%FUXH.>ֆ eIO8A#}&:IumSR;8SY\h TM*.ˋ}?A^F mxU n 1H^'#Jo&2s7Z}^1PK G|$>6-?edu/harvard/hul/ois/jhove/module/jpeg2000/DDResolutionBox.classUkSU~&Y@.UŪ%B &)-BCt A %8-s>y/?<0FøehW< 2qD1`Rŧ1||!!e70GqN&RqKq|)3Cy⎊9y.Hyi[ ,1Dob(j|릣m8l"9!*Cx1 nP*E( ;M,3V_4xt=U仦]hX] EwgQxՔ&/ ee,Хg]./mcrfp]R.\;U 񀡯uEUPw^~ĺHװ C"'lnRi8}Mgq'4T@51C*Ԇ0 &oZ~=)mI:hH.!mpӜhL+˺,, Րۙ]_xE* Ym4U:8U_݆R9'_dHI2G3Bg =D!k(/7KcPc{"F89@}] Dx'Zڠn j:`.=3~ppl݌ɛHOSd4 p2Rܻ$15W[ mt5ѣlғIH_L_PK G|$>j\?edu/harvard/hul/ois/jhove/module/jpeg2000/DataEntryURLBox.classUKSU.3LM@^6A!Q&%0D@eht=\ Zeeō 7<@!S5so7*U\EG txoɫ x[E7nPУ"^in+ (xWEJ]i( ޓ|T0*j1,(UQ1x(P05,û0^\7l}[{/;h">,2y};KyS W_^WbgЗs"ѡ'{Ny!xCEVx\w(_lc&V6^!f4bNGX'pry6NYHYp\BɳUnE԰s֣(է !!,*jXa|y0>ÆI?ĺG),rLb#CWxG;ւ?p5M6GP,YXr ~²H{q94󄐮<4DF ]~įQF ZrrFnP@g:-I:%N$9#1[Ƞ{ާhXDֆ8j W$09S^*Ъ컐ш"JO6v&:e&OQuq`Jel=\*ʇO-ԴbToۺ-U G]]\fDM{fxmLmڙK;)WD&CBuhB^D6}X#CU>Lj()hfhTЂVRTvq`Ly'=PK G|$>}!:edu/harvard/hul/ois/jhove/module/jpeg2000/DefaultBox.classPN07iCCy5>U@H<Y.iQp>Blw؟_zuQz6\tP;֡NOZ PhJ=dύT h}%3>LĒO"} m'VBRjHE6ak'Op=QdAZhˏ|ݟ%<먴;>grWDu ׂ_#Et4#(r7XK7h]PK G|$>RQPDedu/harvard/hul/ois/jhove/module/jpeg2000/DefaultMarkerSegment.classKO@ B1ހ"M ]<ڦ%M<PmQ&6ٙ2 ]i,erdV 䰪#c }与l$Ksٜ@υP%|I`_/:MȘ-tl(bY0cMz7tӑjJyʂ1|0$8;Ke~f:>{U:OѧqX'l!Φ$\?8dd;~Fríҷh뇞&^F tͪ(Uy ,(YSQB| Bf\@PK G|$>^?edu/harvard/hul/ois/jhove/module/jpeg2000/DesiredReproBox.classSNQ]ǖM/׶PXDE@h!-1r)ә̔_/ƒ&M>'>K:޳{}^sW#xG+.ю2q4a@\\.nHsSCRCJVCh+d(&j|kcg-rslUq4 pU5a]a H65m ?z}⚂A7i!Lfh+"_N-2ğZh0^ +oN(Tr::Щ#aqc 'k;%}91 .bijtt'MbgZ/|)+rP<47D0| rM!N%*Y~ qܼ 3d_'+qFHNI䉑&Ъ<(($kҹZjyV1[!0^]uR!v>&ES*!@Ʃ'D}7M(_Ashe)roh-d~ w3h{;E/7~QV"N:G6.z1b6/K&3y3TPK G|$> 7S?edu/harvard/hul/ois/jhove/module/jpeg2000/DigSignatureBox.classWwWhJFu$TN8vHxr:D3b4JBYSHNCKCHY i]Reߗ_81 }^yCxנGCRq !G NM2ތa-Sb9%iFĐ0ꃎ1vڏ,%L! [9, yl8،21!aR8W8x> jx2v=8'~>ޏPJ#>*>cK Bq.p|aAC 1hjX*G֥ Q:Zh!5|tll5nijV\Ɠ I[MVsꩬ'9-mAHi9[7<úf'Hezqi,EUL4i[i#+=3լf"ΡxI ^).)4.s\QgXl=Y:٥m'g|Sᰂ _T0/)2°rn:,˴)jb|8mgm5ې3j,i 33 g| Er*<9ʖur^3gꆭY64p<]@7V^d[Iޑfs|K"CRL##K]G|W%?8QcQ7ͬ z+Ph۝ռ*X=1h,1i:: M.ֶґ\ȆE?>~_CްPjNGc({ fk|-q4ݶocRԵaUc\ST =4T- >ik~:yc,cMbl?Q@tU[-P'HBŇK {nTgۙR@ћ4!L);֐sR#k<ۯ=U3tByg/`lb2M'+)Q+!NecG*®h[csr cĤZŪ$v)>:orrC(B"Yb.i9DVewGN ɝ7uJQRuE\Ir".N'S3D]+l=jݳF>\i9h1-ektR}nh6Un qVBp.wWo dASVN~EA /0WP|]TBCac5:2GxooWGڲ` FiN$"E5$xnV-Ԣy ;kirQ7txՖ<~bU#%} +_ev>#CDB[ȥUAeM?wq(->伞t#1iYg8J(3{g*}<,$EH=i& U[C`` nūfP)mYX-_;^@a)'G ze{{|mEܾ3>MAO|a,"h\ĝܪLӪLd v*Rf*4~e&Tv*݌_OLh(GIc˽dW`N_Tl/$RUHdET]ŝw~6ro ~wHA2Fs߅rփRʴ\6u0`׮v~АY. ;edu/harvard/hul/ois/jhove/module/jpeg2000/FileTypeBox.classV wUd&WA#"AShMuk HjR@4S&3q2}]\P1U{?9xtR'o{޽o߿PUǦ Y [T܅2R Zm*h*aP%bة`푱[Eh'#^}s+GZ ȩXPa`PLSAl AQr~1 x@ƃ [ pogXoj NЬoJbqaջ;3t֦gsPs2!3a}PO̐' z.Ѻ.yk0{*\-}]+tk.!ÔGͥ^p *x%#;:cX3Ԭ\bXoCUNwt3ͱ ZR[őxO8f Hq$gqX`=<^ 9 1JE2^lǫx5Nҝ"3,f[9&[x[;Gp]GB\fDZv:5-GiWoX47LfQtc.1:!|=>!G 4fq6~0,PlVw8>g2>8/8W_ ۪mjIbib]^0p|GUqBy'Z[|'x{q-0aYD@/r!tL*${[&KuN6P0K7aޔZ!З)N!:ۛ4WKY!ZK*{C jŞ=(߉zsd>=q|Evi׻*Lf/.7O$> 0݆UEݥ"lEe ȱ;LJXCVBjIVۥ;Tq7O70 msQS6ê9sUM&1r^+/ EH$fztb;y=#DMyuڢ[QE/"GǤU/M~g늀V(57vRBviA>TKgcZR]GE{[|T[Rŵ,XI?C 4 cF ?PINmq5/.4'%k5Bs%ɪk#ҪԚP]=5°DIF7'XAs-ӾhgQEO" _8qҫIPK G|$>\Cedu/harvard/hul/ois/jhove/module/jpeg2000/FragmentInputStream.classSOQ޴0].RLwZdQ1&efڠw^.$1Ɠ( -A?~³1Gt xCM $ܖpG] 1q_* eeEαf73Ϛ3]4Cǡύ\*H&mOA>\H82~"KBdњcPg/’jɿZL/Ӷ xT.o85s3099ٍG_x'Rݢc$7 c5C鼖0R HT?lm8q Sxю ⸈NKЁG]*s$0*8)ØHu*VJ_/fiгT1#Xbz\,:n:څAhF/!sj"ѳBuݰŖVYm\,c CQ-Ħ<Ҍl&&hMoPS!\Jw)mCGpeK]=.Q^%)LzmL+Ch>;nV{{w瑷"_H{$hB9@ CPBeZ軯 )/!VzZGId!xO |AHw>Q]#.iB=OoAYS6el ηFG{EY5I6/yI>^6ʖPK G|$>)=3I?edu/harvard/hul/ois/jhove/module/jpeg2000/FragmentListBox.classUSU]ɲ|t) PJP@ i`.ٛdf7agݗ/}hEs7`:~;/EIƛx;n\aDJ⚸#c2c\&λ}CMLӤ%SQ'ޗ0-#-سb02a H cQ|(!-aq3" -m}Gʾii24mӟbXMVYy'(k]C+-1=mpek%f2;1x!|18r C(9Aqe|=hI/շ,sY^M$ahsD r+SPy-㻦PЃ "#W]Ӛs]]<^ U]E}O_u2xq2.PUp5 +XdžO@L¦cKA©0[5@D-j;e_PCi߂ĶGf?=sj:r9rw}ں$X 8xZ WWx9^@wu @YS˵F۬3\}y.\ Ok0(G-nsrtyI{ժyE+E(RK =$ψ@*xb[!I^i%xQ@ˬiHmj3JSvD\/V1dٞ)8.DTCh$ָe;nF0)5 tڱg[*6&eS(M'xy֟#5g3?絺+羚 P';tFk/ _O $L;uANg_G4i bCDj@rRXAӭ*9c\Ҕ(?}5;-'rV >~B{h;vv.cG;qq^ɹ.r;_nƺbJW,Yxk_ؓ. zhdϱ?}/uChcPGE @edu/harvard/hul/ois/jhove/module/jpeg2000/FragmentTableBox.classV[WUI8drm HJ[Z 6P[*04 R^G_o}AҰ/ß}& J8{ٳ>۷3Ot✟ys +ƈ$䗋 .acLr.+P11/W$H/*Ĕ$3 0+/| Jٗ㚂xEb ^P=bsa.4aisҗb1N)1<)9mEt;RedkMhi+K m5#ڨ~JŅ=s;f/ P"CݼnM陫rJAp:'K zLd27™Ĭme4YnNfRwlL³*t,!B _>P*L ә48$VTX帥"4SabP鈙9Qi!a m]2]Ȫp`aMś nc-o㎊wp|Y#39]}C-۶eOQ=IZk\SF<(B :Tܕ^u#U|OU|U|eRn +*׻9FJicɡ- 8u >Qx2@U/Ā#K7edu/harvard/hul/ois/jhove/module/jpeg2000/GTSOBox.classTR@JӆBፋ mS@ʥShtt&4K&$eOG)32Pg"f2˞|idpOF?ix !% 0Ix,#'20*, MDFB2!fbT 1ajjXj^3uX*qY5j0+{%p t$L) e8f%vytns I*{,jhDM䓀 WF*swYs"x ׯjP2ٍ$Ç/)g+kffgS*/^J[GiR/f0}Lź$X\>[ 5]caÃ׮3 `QIMLpNȂG RL9Ap&4#)j'~҈%tSM-ZI/ E'z& q A..ףmtD !}HrM)un6edu/harvard/hul/ois/jhove/module/jpeg2000/IPRBox.classTRA=M}VHj~T`7ݻi >edu/harvard/hul/ois/jhove/module/jpeg2000/ImageHeaderBox.classWwEMv6-iS%4hJP EZaA-dnmi"' zxRx<z8;Wxryߝ߽s7~@=~Pۂa; MS.4(nbJs-rUsh+ԧJA\TB- )W؏yA{C*^Kr!prVч$GJ*/ia@ G8L⭆exm7xn̎dRnm"5НaI̸m{X3vjHś=N vJ0pG)Za(9Pv=W3GgcqY jHRd=ö\aiZx aw9vCϐ)¦n 1t'CIv!!0P3?ql|NJ =G +bHf$i[4ac+jx 5I75،HF&mI/cB[8Ͱmsp=:Lg6;{ޗPGD'Tg9Vj>Mff%,q0 W92j~H2MqzR쳎X1EZ;&6nIG% Ⲇ+)Յ <;}h=0\ߡ]xzJtC- :K?$+o v{GLoC=dݍ J#-VM{J73mκwRYvP,ZtH+̮.hZʯr6zZ{,> \0 MXioȑIi rA3*SN  }[ЖKKC洊%ճ.mC^bRy \#mTEwIJ2gT:3H|ʼn۹jJH虬).t#”[U &ݕ ?7](gʈZI^S |fL֡觊Hyζ L~C.k=MV/+7,ݤ{5/C3G@%/F倬ZG='Q~up7I: *EuTz uZ$l¶җcf5w,Q) -6bt -'qPK G|$>=:` Aedu/harvard/hul/ois/jhove/module/jpeg2000/InstructionSetBox.classUmSU~. f@Z ֦o@i P .%Yv͆BRj}/TcǁQfG$!uxdy=@n)hE؃K8I!NBt(DgIJ[YO="2z *C1  ACǰ cDVbc2^7y#M&h崇y:1!#.#!˘n$\d8}a0fn5#aNw<=y8PJf4+J!SφR M\2<4g{t[ .3$k :apCاekifPgZ(LH{Ņڔj_py35鳦5ͩ1g|#oXG2\X9*'!oD361KKP:chwG?nhi /6vUAQ&B$Ѫ.RK`?;qp@(mxZv!YN{!ot_]N4O6 J+V#=(F, с hm/z EԈm"j]wQ7\¶c] +lP} KxW4a#wRu?;ס޹eg֣p1mxvsǮؽQ?q)rKmRU, R~\+-۲fc2=K&cPK G|$>- 6edu/harvard/hul/ois/jhove/module/jpeg2000/JP2Box.classX x>'Yr7ax#b"/ lMxD8ٝl6,'jVR>jj}ڗ}ڷm;24ߗsss<8T- ?T^bz?S3~* %Kǯ~VL4 ~/ L׃GR` oY*0ſ T`o sY(P[VwWHD ,f@`KX r VX*cXâ*p5,Dd:=ѓ ҅L8 -55j;ѫ&⭉xZsRČ.壧i#Yktq+Lze\531FڦRI˗' #Oe|9QM 91jfl Nv–FgP{z.CE2(2(X*q= OPby毳,jZB##\")뛩tԤ]C4v(Kyo˴B*KU.|O^zH9.we*^WPNN=:ٱԣyِ̔O/cVJ8O&aWx ^+:F*~Rӵ)!qMx-7@'Q 7݆ʊKJ M;dF9 D5/rVn%2N2Xt~nj*dj8ҍ|-:rN3*:Rnżw,/0'U+;ڸS) by`tqa+GQx#uMcVڴ:,c߅N=E+B?qϵV 4[Fs 5 az64_㕆U 7GhLal(;` HRo%3Sp #>M?3ga*|{lY`Ca :-::0SiPJʟC2wY!S6E Aa9Ò@ |>riUEe几8oA8rǚJYAPa!P]a`$q/##Sbǜ­d~3Mڄ~AؾVmR㾂7:ES }U%:S=tDgگCOhл:GzvΕ_AFgq/(kEFE+ hO̥ <edu/harvard/hul/ois/jhove/module/jpeg2000/JP2HeaderBox.classVWW&0!PָA@l(h([Ūm\d& }v_|=5S/}C) DIݹ~_~_h-G7=>POcb7$v X2"'QWBI|x O?j0<+5>D`B]irby[Pڡ Mi3ZHB͌YC(w}< 5{FcxY[3j~-9d#]=?2IWL:r*';̍!Jh &ؘаkdJ٭"1bg<x/1݅#m6I WO<;8Fs;@s'`Zn@3 4x*xMxCś8-Sww|#1>Q؝}Z /%Z8OTEÖ#E1T _""NW*.kNP|s2=qk6`M`sN1p"XQ]$*%pLeXpG%pO!%@1IKHbkɍ|Xd;Ǵ e ~J㒫ל@ޙy-ƭXP@/tRoۯvQ_ ^|&zjל˝ʮGGF *c9T c;CH;=9y2lNX [W1F?b1 ,Gz˰.xg/n@p7u+ذ%'PST?FϥaoJȹPF!A:s\;P5W ɔKZԔ@.ʜi=) ;xW`xH4& it@LaGʥ*s|fҬU<,$)uWcd.I9-2ۥap*TНvJYbF\C!fIqn=Tx̚4z [ .(mr%K5yI4 &e+jhv,27gQA8 '~7Qx0MW뼗F2iTtH͹y9wxdk{l`'` j3XM1?4Ԝ$ wmLa7-ypcF\>YZ/ÇJFh'V/A:h} ERIҩjAPK G|$>TP{P :edu/harvard/hul/ois/jhove/module/jpeg2000/JP2Strings.classuUWF"('MҨGҐHH$msTM H2 }~QMg$AQxof79v1NSY43"<|7L@"5PGh (%e"x>%!eU6 z%^Ax^GxMFxwCx>D͏>A>GK5A;~`G?e,AwSF V \[+"'DĐnYČl3jVQlۗ10@ T]j"TT}z+G:ܯ܂WaHьS8fjl8C ؕڱ3sL*zLC55c: nW`4"ɚY/W޾)B,ޢr7c&y^5/HSTp\"yܬ:^ҭB`" /B*-nh&ELafzNTi.ГloLz"9DrDF'1P*c3LjY!5Agde.rtl<ddh26>a{R#\HTBIHC#a9{DvC.եB3Pk73@6[N|GQQwlQ \:@v[ӜDȐyƙ퍱*JMG럏)݈R0ũq.դKP951<蝪L"j4] צ皼}T{n&wy@ eӝ CQfFbUb< ϑfr){&4tC]0 <Gha$"7uEES̩7ĥ:8G %߆jr5 KɑXQHЗZ$\3pJOv?YIH'Ey'Wڼ)WmR8楖p݆H=ĪTy{o=%ep:eV!򍖓T_jx+2j-G|Yϖǒ7(]*Uh0J A~Go-ֳ>TS=R˩>j`Ϧsz#Iᓴ M#t o֚[:Ү⟰0:*VY12+kd+Ws =L`f& y26zIfn5r$7g$-$ c+-6[$;Hn7va iAuJe!Le:"l轌\q}C;Ⱦab=3icS`#<|GxGyߣ:(Y%Dx,x# BANbwe("KSɁPK G|$>j-8edu/harvard/hul/ois/jhove/module/jpeg2000/LabelBox.classTmOA~-@AEDl xERjy T ,w1|P`es<>3s?~~ yZp ?}dnKLJ;H/(Mȇ^)^hcX/qχ yp_ u:_:?Y\ӹՖl+ody{a1P Mm8Nry2hRd*Z[hVșB+.BId#pXӦV473APdhXy,/NqfZi\ PK F|$>ĎY5:edu/harvard/hul/ois/jhove/module/jpeg2000/MainOrTile.classT[S`=_[mCU.ULE^ N8  MMiڦfdeQfQnHiGq$߷gi?ËH6slJ,|O}xG|Z% %<QU,НYΦVn_s՚_7?m vj[UCo(Et(+YWJE{Pjvը9dBͻeQm(9WkTx%mOSYVT7W򻆣V)rPsɴL|i6*e.Ríe3{!+ZuC)_cI)ٗ!`LkL+t=sC6UxWM. dbD0F%v 5qnF$< e1,,kVAQms7zl(QKʊfZچj)y- iagb]`>(}I]Sz!G7`M\O~1ϓs}zd'薂Nx")cgHcipH]2 ]kLb+~}G?'Y?po%CDpq:IiE}ߎEHz>Og2EԛdR`3?{2R_m6jx) "Ғ0̑c[GnϷ7PK G|$>"ĚW6edu/harvard/hul/ois/jhove/module/jpeg2000/Marker.classN@ NPl-E]X  ĀvYͅ6]baBbx(]}/KFq"08% MiB<_<[0vr/w\(#VkcZ *g\~h-'H0 [+)en5,r۱YnYoiʰБGl4Vf0D GGs=edu/harvard/hul/ois/jhove/module/jpeg2000/MarkerSegment.classWIpG}cɌ=cCqcdLd6Alkhq %+!>JU*Tsr1I~K$7?=t₁8YtOJtOKg 89|@fdAe#h|@ 2Hłg 5DMp[x;x{8}hp> _C/igm,1Da}wQϋ{8 ^;}A"ygJTL-+bTMjՀSJ4ŭD<WPĝܑh4a}yysd<NYD2#)k˸d}ɘɦ-3"buI.z$ְ]l/(JH,ICS߈9fzIo5v* '>rYBA4M]݌,YCCNܿO\+7+_(DL EaAVl ڄ]zyx&`YiANP4l %,;0տ.Y3z,`#:.:&,[Oz$}Djˉs]?Đq;-hAG:{r:> |aMwJ5!oȈ-^5,!VxXZegC 'ٛ']dI\Bn8*^[nf7_:KJ *)O k<\dUXEw9| Z_G7w;FM~f|{|+KA>p y$9x|wv=pKLT!BT6̺cd DXvא G Yt]E! OwqLw0:OJ?O"UO/,5t\w=edu/harvard/hul/ois/jhove/module/jpeg2000/NumberListBox.classUSU.J `4MӖ*j( IRTd/anfaH}}/> 0N3ݤ3tvsz@vgQB q W >MzͦP"c:̊u7BIH10ߔ1/ !m#6LX񹄴%PձI ^W4g[stunQS[6W3d15,ýڶ,ݮ$E^2L>W[\-Wy)9{mܙ\eߴu 9\ifՊj^+^)kVM2Co9nn8y0.ZԬs*(8 d%q(øU|+I`_+RFKP4PUͬRWO<)%xJBlQI땂PؔPVpX(axCcxE FZjaCƻG.fiR+"R.e^ى azBRy0*󚫥Ur-åYl]u6T:#HYպK4ZfkՌuH_7Y)d0&!ʉJ10ETW!z/!}4u&8JDIN-n/d]x[W['/!W e^tɮd5;J:8@2M mαoӰ4x;ݏqm#4Ә$ߧY?|RCn0L@q}!HdO16O2?1xh;I1\h@FpN{GZ\ﱽC0/6yDžPK G|$>$ :edu/harvard/hul/ois/jhove/module/jpeg2000/OpacityBox.classV[se~v J嘶hJѴHIIMKE-dKw7PQ| o8^O3)3!5}?n ^|)c%De!qqOOA_mN26ऌ$pJ\d  F pFF+ `\L2֮ѝrk쫸$,zM .-o WK WW(-LaYfA=cj))xW%|C|$|L\Ԯ\U +Bqm Oâ+Sp+nDVLj gwK|O8G,7w ̯P^L#K~p㲞ITZ_vʁNciİ [RYU<q"xf;Vu;U5aKUW h(U}ME8mzC_xUu&3Q_DJ:QtH|8{o[ahQ5-Ayrn$>M ^+wHt0fxƉnx1aL ;j५N =l.6``_} RW+HjL/ q"ONׁH)QqȹCjB"Flw"xAՙ85:p| P2d[ /N!+Bs+^VENө(YM&FF)DM~#hôn7.~g _sôH{RW'1tA<`iHh~+*z )I C4btE6 8;&6T6.`S!q`3A բސk8`g?j!_>*yP 仆'Dak([&w.,oom~ノ<VS8+<6noaB^ ۈ (-c"Bal_؂>{ 43߹iPK G|$>|Ib@edu/harvard/hul/ois/jhove/module/jpeg2000/PLMMarkerSegment.classS[OA^ʥ /[A)P塤(J/dBn( & n̹~9ǯ}Øф4Ⓕtet]J#*C5s2p]BLB(K04CpB7tg3`ʖMX:qṕ,/?Er_DMÖ0 nং[-AUf"}a@hUnijRTMV P-˴yj) #"d#%n+b|IN$g-욼hV []*#*Ř{/a\A s(Z(' 0\a߃l[\M5jTv,K ]ci\q.14sMykswfҸ6ќӹC::pFR .6Ϗv5")H wg @ #R'ԣ$CzZȾhHZ B߿I-X&Bt˻D:u\N9E7PK G|$>}<_@edu/harvard/hul/ois/jhove/module/jpeg2000/PLTMarkerSegment.classT]OA=K Xȇ-VCI E}i]hw-ʋ?a`&#Fm!F ܽsܙĊ6ъ >tuID}hC/>wa^\!!<3;27UF -3lBcCk)Z\+y&"B{eEG7 [u ~K"bD($ SKJZR\)uYi8 8BrI.PkYʹ30Sʺ!g8۱-9FUf7ELHbR-LIƌfq`vfgaZm3^1KJ-"iLgjic### gHUxӃ@y;W:UtSI<L67s*ypqpzOL/Ɯxɪ* AތŊ IWXu@(YDv,Ц=̩`߁W%7L}ЄQ,92j'a ʒhĨC9аu`jlXXQ'ڨVOTra>V~O{𱃯ܙihSA@'r7j3vИ|G _ó qmni ̾&X'<tFeTxڱ-<["]Z? \o>!#VRG(cۀsPK G|$>RvU @edu/harvard/hul/ois/jhove/module/jpeg2000/POCMarkerSegment.classU]WUݷ$05Jh+ 1+Th@cM &iV!sIxg@/,oQg&$fQܙ;s̽=W 1^ 7d M]L`Ru#c*iܐpSA3 ¸%]2d˸xw<}/LZ] #aA= 2mp&"wLzHz>r7@g|lP@0V+#8:vAMu'a JEg Puβ?1hKf0JJ1pEDLզPK G|$>ǥ*@edu/harvard/hul/ois/jhove/module/jpeg2000/PPMMarkerSegment.classT[OAEnbQ؂MmA*/:vvnv> ?g^}ń?d8rd/w|gן? "%ф\_W a). 7-7eD%0}nKj'Lk`6vywD%7n[]F FO˅r1%2/.m-'HOSSJJrReGwU`b㩛x1Y>w"UI_N1AA&:hBen-{QS+Dz 踿g#5*g hij| -.!{K#;Wc q'V{z@z6q&XBkD.eĭ~!A~|C 0)Báh㞺"ol J`{%ÇW oBa6eg3k\F#Fo7?/ =PK G|$>)@edu/harvard/hul/ois/jhove/module/jpeg2000/PPTMarkerSegment.classT[OIJzh+2^( xA]F )˙]?M6/1q}ؗM'$& :TթsssӇ.n6p:813pJs"Rf2`$ T aVˆ3:2t{''2{ Z>taE$ ]dCme+EGqzZ qtM!gb0 nxc׮};{. {*øHaxbJ3\T*ZA(-Z^`%|AXXlB%IWU+2qt\7`Z N;"=EP5q[PcWN!$M2Qm3]ݺ/HTGmZˢ 0y7SGP: ]s|^h;V[HTcͻˇ̯8pg ^B- 4GF.5  6 ugوwg |TS3]0 s"$g6blT岎d?P;ɩ$VZ}%w.˭xǘ^Ql $ON w򙤫̺6*Ѫ\a1ÎL5'f07Uh~њVLH%Bs_߁TKjo zhMvF{;?b)$u[li7tIvw@Ͳ8F{lx>FI꺁sz^zLk l٧=/Қx9翴7ďf=h?C:,a;[G̉|PK G|$> u, :edu/harvard/hul/ois/jhove/module/jpeg2000/PaletteBox.classWwU]n6[hD@жH-&XP˶MRݸւ (~?'9xԣ_Cu&}x՞{ܙowUlD]'űYE ZUxKE UzGMWPHHѥ"*qP3 z8 7WЫ8 dFJǀ0KF*qTF=kf H1lDV4a)+ϋoj穡hư ; VXJ&<~ f8 [G CxIxE p xMi!>^dqP ga ;V~K3/j87VόW1*B#- o j޻byO>TV+_LXdPZ.MFG>'Dn#7$|& qseS Ie rT ;^"C$O8/ゆ/񕆯 N2&rn=\yqUY{xV(EÂqP+,hx$)æF~% Ay!nXDYK l1_[>Tp鴊XhcXYu^;}.2K [ӯË b [ƘK5~dP#@]cs3dzSJOCa㦫`?Wh ąc! ?c\ :I $A T c+m 綗eb߅cX t]VO!3*7!:=W:]W@Rz`Y {14qW~UZFAUw [B~z©!K+W'OHG:Ψlt.# !B"=%, y}`eaaCOģzz@ < zNZWLCq"pٟ& 4?HuL]RW,Q-U25??PK G|$>J)Y^ @edu/harvard/hul/ois/jhove/module/jpeg2000/QCCMarkerSegment.classU]SU~$fR>6B%XVhQiMHV%{nq^728AGl̜srs/? `ePC4!Mo)m%1 +x# E\eapE{ 0*aLa\ 0b2B8!PP$m ) -WMc ) Rɱu p*iӗ\%(Ki[(T`VEY~neYC[.5te{k DZirkxvj*;܉-/{*DKk iE9\_`9 s*qWGXPq%||*aQgF,e>FaY<;6J\x'%Vu]+{fQp}#e6mƱK6:fkކx|E*hIL+Xee=^׋e2*X%lp){d[~%T<%\Ff"VJ0<44>  Oned;֒*)ʋ/%T}LEi򏥎ziDkL.ˮ?@,/cy]==i^Q`bK w뀼iKL.n'0cr͂ A$dnPkv{;\/n PK G|$>uC.@edu/harvard/hul/ois/jhove/module/jpeg2000/QCDMarkerSegment.classUmSU~.$ٰ,-P 6.VhQ^bH5%lHvfÐ~/qE-?Pg%Sޝ{syι}oV1.Dːa >APpU%G ƨ nt&>V0*z0э[d>dJ%3AH< wU`2-ӝd -1flC0(΋jb =x%WJB=5״5p)VѐŢ%<`,Ɲ ZfU/B;̑O^ -Ge>F\1΢n"].hUr%/4<#3Ek)Y _2\lcޱ+q } Mn3n]L2v[=a i\ ]WTxFJU (hXIԚMϊU^+"5cUAICxkeۨ^µ1e#HÍ+(q>Ûf.UN fVf<r4Ә}J3ͫdV,X˜t4kI #C/S943ɬ%1Қt\vD%a ﶡn()}{^ё!*LȖp2jUu9. gYRۦ=h,$]z~6~'fhYJ&j7iV"zOlym0^FΦST:=c:?O?SK禕r,қv94)|:5Og)x_2Ҁ/niR uɏ Qћ?"HF?bgt |#翛Qb7}Yz|qX ~@8'qBK-RgC|PrtmC|x L\-Eo.3x/{d[I͆`xo+aΆ$9S F \b"{8ݴ{>{^PK G|$>ƗG@edu/harvard/hul/ois/jhove/module/jpeg2000/RGNMarkerSegment.classUmSU~.6,KTT,hZ|YVhQ&$&)5/eYHv3w7X~逖@@L dr7{yssϞ}1 cGKBdS:"@LJHm~S4Dy_j>|9 :b1[(> e\厎$԰+[ ݉5ȲW ZMz%&0 ^IZoTAO>,Zx261p_H!0!us].VbzonoyLJ46řɭƫ\]nAgv;nDyV5d d a}|h3=~`wY(%K9~"p}YՄ *BúÐڦRP2Pe&%@H̦Bok lQm ;*2̵Oanׄ=3==mtP|C8lx99Y:ew٫֖ bR,wcx7՞.pgINqyi/VHt; #GˍNaM5nzMЄZǺ=->KܧCDV튲a)6NW`ˌk[3oyN}}*d&fdQ!n&&VÚY8\aZH$s NC$Wy-ƶ(a+]8jpCzNS2e\plE IYC'i_@POy"K0 ғf`M$sBLqOza2L:D )3D <:@_02Gc==hl_#C~}@_ :@Bi6zCa# )܅9mT;`16#Ċ#C\Q4c6edu/harvard/hul/ois/jhove/module/jpeg2000/ROIBox.classV[U~,;ð&jtAi 4EXZ.-2lnvhW2 IAz~o*; <=9w=y{&a+]y!tJpKB7z$< 'bPo8x=ZA<&BqE. !"`XJx94qDJX]!"&q>jc"y GxsTcj'4OϊxN^`LC1 +b}cQ}#Ƹմ&;4]cz#ʸ _Phs({ڔըGۍhX5ʣR00z0ZJpSEU;^dZԘz\K UC<.e\-V'*zkiG60dlǽ2^ Uuo87*,-k6Me"-n񖀷ew)ja-}V4NbTP~}\j᪰b)U^q1>)>c:1n>8/79![e3/>50]7Lajop, ~R#CVwPNcn)рR۹SvCpkakخjab#.q S)2Me\a؞6q#ؔ4;IY5^4f\q egs-i# u/Ml0詷M)r2-J\S=yC E˄ƃD};(C|C1&N0a¥#E%MDKx٧ǵy -ެA#崩OyENYSMJ1g-gru:6l *GF8h1>dLȃDx1u0,dv,Uklm- HVq𑭋o"JʠTK}4J<(WdJ@)MZЈ&˫d`!ǒH]}mA\ԦP :C;采xdXpM9]m|sm!=`i}8M]{!߶ď]&3C`L1Uݲ k"Ř/2\9BiQ)}E7JNRdc>/&ʆ4N1u>/٭q 0ۙNW6RMg.6 ;Ȁpi\F!WQs΁U34FG%=\ E NsYv#i D8ԕfQ\8%Q^P>kXZ~\-~<,p[F?R0SX1iHGOc$)Tb͈,7$4\7,͆,K"!ґܝS0ĺ71~0kl-M^A ;6F]VP;NѮÝzuhd' pfK:/i`[ݍ=I9ғQX^?iKсVMNPDVHR;)''"&|X`ˁPK G|$> |c Eedu/harvard/hul/ois/jhove/module/jpeg2000/ReaderRequirementsBox.classUSU&e4\J`Z4TM.fRJ\ؓdav7tof>㤎3~g:? a\¸ %!!u!~]܈`7 Aތ-$#!A-oK !%Z18&y'Ia)]a&Y sn3dkꦪ薒QM*rǙ ZY)jkJl((kk+EK+\Y+|b``@IY[q;w!8jiA![bhʺZo[#=hYnm4tZy%ںO22ʸ we,Cgf|d,5w/VRmn933ˆ!ᾌ%/,P,c*VdBQ.aM: E2,AJ`ݿ'm3<5O_Jk1Mu՘n2 nӲQm^؊%z(cSPϢ{xN-CS|.Z!.Sp" =|siXz6prmJ c@6I z`[f-׃هmERXeRנ>O@r N\-&}Ąޒ *=_D'sF)]JmMGNzcq[QQBWh7ͼ[:2E}Ys\Y0Jr r5.õK=.UPf$,7&ZƐ[uԃ& 1+$[lH$QK<ā~J8d=i*Ch楴.pLՈyxrμS=HwkSoV<7"7 .rv0$ħWgtڰ<I}-9ݤ7!ej2,e齣W_L-H\ZWH*N Bhu'~Dd V ,DpCiOMx1A]Yqw>װ# Fr7B}˯h&4~ qqޗg зyM2vsOh70-?rgsĞv,kYO=c]]p5|(cH$8>N5Jhx{oPK G|$>+-=edu/harvard/hul/ois/jhove/module/jpeg2000/ResolutionBox.classT[OQ,ԅ E^[@@hp }!.lw-AMxA-$Fb8gLIg2sf33Gx"VG7B⦂["&=2*.Ene E>`J7u7ͰY\-m98 Ǚ VsZlhhkkChE+W6VD"Y,#'d -xN|g K.Ϯcb:BBYQrute煻$*"A5:4ז\[7I8*qOU$b;]TU >HQchU1 Cz^t)m(()2 U0!2?'m^qÞeeje%ƞYQzM4-pC+Gf?%$Dp3i9 =ǝ>ĝL ..2DwA^1e.QM"NO493'6]S')>&.ݫ8z}nrC!vi@%C.BԙOPW |FT4PAë KȡUpv{;^1QG .0\~EH:pU6&dMMoPK G|$>Q1 @edu/harvard/hul/ois/jhove/module/jpeg2000/SIZMarkerSegment.classVTI4VAqf(ǎ Pl;3tFKMj"^zy7r|µt<'$ jj>gϿ".c4K^c"^5zy71cBDcUB Ox%.a M]fC-8=o]puMw6uP: 6I%n -}lI, ݪ:qXO%8Yŗgz&P J rg|53~[f-:6` /iMN Q1uI؂-a<ƏϺiQ[>6::{ A27r~v<{kf&r :AX1ڮC&|eQ3_F[L=V۬[(b w4Lf0GJi.+= kŏ6q;ٲ-;%eZoS֝KO쎂zwYn-Vfo͖8NCWOѻtnU?in!.:l O08(sZ̆N R3sm:L:KlBg2qTGβQ4.OeZ?m9G}0jFqGۇ#?zwq$ǿViƇ4!%C5t>E~ǥ|ZI+oJJY1!Ls>óJeE>J+rJ>{%s`%+UY#YKAd3HUI;HC!߃>;vgJ,>xTOOPO0#3LEg)@V`§M@edu/harvard/hul/ois/jhove/module/jpeg2000/SOTMarkerSegment.classT]OA=-n"b?P-ˇ҂F_ۅn>b4;1P7ٙ{g93RXSŅ0qQ\ƨH1\Sp7Cc\A7miMx#1г`ٖO$xHԐ0E؁0Dr(S(:% Lw%,bfU:%a /_URd˫T_ҟ3 tgȋh}j0&w a3n xh346/׿ 4<Ȉi (y=PB BDsj?C3@ߋ.]a!_x9q8p}oPK G|$>0ݨ\ @edu/harvard/hul/ois/jhove/module/jpeg2000/TLMMarkerSegment.classV]SU~dU$.Ś"Gc &$m/\aC^q?pz 37e2"a4%v @ݙsy "a8f%1o3xy3H;" c2\H:zz5Rry9[E +O R'ᾂD"C?7Jڊn붡rZ,jٕ:עNPL#LS! Кnr;T5n9"g>WT$ fhVr̜6if,!2 NNgl2b7$(0ehut+,g- rXS`!OƹqS M)3u۩J(*pPu (=9Qq-[ᡡ!Ht$+l0<;d[*}f^=/0C`(:6:U;ǬBISc$J8SSyR}%!)H[(q*S MOLNGNbb6/ĬTuP #W}3̘G}isp,+VgR:Mrtr{:o9b_5yY,%tf# (W[J&v\uQ:Nu6 ͦw PSksYvztxATY:Bk Y,- D% E/k6řǒ)zlxo 59: 9Wt,Or/&Do2j}e'qh}M ={?2Hڊx{Z&">/W?.ntm?A׶a*&Gг3T."_쒙?D UO,ʸ0T1z),#ZD_)"wмֲ-ret %t_D뀬^u;:etg;vzw]2ޠϖ_B?0|CtC45 W}QaP$w_PK G|$>RTY4edu/harvard/hul/ois/jhove/module/jpeg2000/Tile.classTQWEBvJ(@h bDVIlMkKvMf>/}m9*rNO_݄pÝ{;wo?} (.`N;Qa.xX/($ e!t*># Qtc\>ŵc9ܐؤbEU!քH\32b񅌛nI!ZpVГPUeTJʨ vSYrBl{=>q!hi:CiR+ *]Q]ˡb8O^. - IMN{^9o5`!iLM-z1 'B(6ܪ P1_@=Ә #dCʏB>E_f#wRs0㯣 +S{dx3 ѵ>WُvлA]ekc^l'tr8edu/harvard/hul/ois/jhove/module/jpeg2000/TilePart.classTNQN/l[EDE¶lx-+..FS4{l-Y6F>q%9{f}39~ q7˘bFEB(Cx$x CZ ΐֹRkk8Zk5Ԧk]n5Vm^ͤiDYe|i R[ ,r敋KM pW? PVE2>fV$8ee+*&dL:ClO"HMJx.r ucP]U5U/XʕJ`zӮ LaӶw58F[v\ y, Ǖ9 :Cbd0 CU>GR4I[+ o7ʂpˮfDzam\F 5e&Ør&Z\/2s%еyv9ܢa?|b';i= ="ynMt}G&}}q=#}H=ʉow"{> W{] 19t0Tc_PK G|$>uGAedu/harvard/hul/ois/jhove/module/jpeg2000/TopLevelBoxHolder.classRn@=u:Jy(MhA 5 64$Dz  a!(N 6eg\{6RኆYoMf+nㆍUC.{0wߏûjSzCH$j$ya ^,{z}Ĺ +~("O:|.u(ݨLF0kea|Ӕ 7edu/harvard/hul/ois/jhove/module/jpeg2000/UUIDBox.classUrEƒKv $!?g6l INp v,YiUy \ xPCUp=ǿ! .hx(4&(uRwI CCULEqDq4 ]IQ\GVjn)54|e Sm 7b$k|kTxr[z]t3#Ea&ֹg͞cvXkhVZG42aw\^6u!|۵ n!Lg8^y9ީG(+aumUHCUᬖ=3[D2'vènduQ :f񱂢9(IQOPQEMG >ձ t|e/6}cY" u:YuX&t*mB\2cfSszW,В07~+Yr@M_t+ŠYmy:M 1\} `! Yh7f@h!J= /[]k1$G\ Nϧ!E\~Jjѧݥ5l }pH] },TK0<ϒ)Gw١asgH0@ǺpgγMHR-2@(F<(#EieMaRR3:Gfr*Ujhe+rR/8{tnYn a|ns.i0$ !0VsR ;edu/harvard/hul/ois/jhove/module/jpeg2000/UUIDInfoBox.classWWe~>vavABVD]n-%oY hm;,6;`ҲkE*!YRS9!wvA4\o ߉Mhpidr??61@~heIJ8zd`=a&A&HPt !V@ua&=".ˢG!>itbN< É8L!n;?<ΌO8𤄧m5@IJx{_1BޞDԫG_2j;rD$)]-b{z~ѽ~E }5]]j<^;3C퍩ꪪ*o>_TcgA= H荀SA LO+QaiW@3# 4m–Epa/;DÇk8/mj}lVRO5ȸdi1H&Y]}C8#|(#|,|*3}:om0tG) ޶qխwtT"rwjܝ(jFBw֭ e|/% _ XL0AvFdl*'{[ExnblZ2cT˜qՎHbBO찍$"Fͥd $ T74%2/jԆ~ CR^@˦ʌfC1C´CQL]ryDjOM(ZN`ÝSuON.pVXb&X¤ *},X-q$ NK4=hnԒvOVO/6%L߾,lGȄksܜ5F筽]t- R>0K mff jPP2y9XrK#{oik74h? ^hȮkXCߑ8~Vv[5~n+& F?x D" ȺgY6Q{}ttj$zpҟk|x!%W,n9U3XZ\6I:b$y-Hb)˒XΫ3+̵m [9fĊ@Ӫ %mIi;=5;ZXC+:*>rNb] 6Sh@ieE}Ċ.p^Z! -)$ܛ赝jbO:ΫC,c,](N܎K; 2v_> K;1l,/&p)'lbڟe3S>KQ2: ZF? %dh[p/PK G|$> H#;edu/harvard/hul/ois/jhove/module/jpeg2000/UUIDListBox.classTMSA}"PA@AQ@7QD  J*9b zA=zAhYWgxBIwMwG14☊ =9.='$NUOaDi q:gGFTŀCըiB87n ;7*\ẘ0 z;1L!ۦg lz^chTۛ3vHC`6n aKy|+Yb!8*i[ iDvmޱy@ÑRYnVzDC5 \\LL&5jp.Hs8K*4\ ㈫0) fX"U 3Hh5 I鮓I:F,F&yJ3]Z34;Jr;*a>BDwl+M ĦsHIx] rݾf-Uˆ99]Nr'|#Q^&.CޢiKP=$VH”&bLiTHI󲤤^,C@|H-u ]:] _9'^Xcܻ_zϦގZ0 OJqʹxەo&Q;J hS a8è"@_}PE|USmhhT}Lۚ"OqVhsXG L{ۏmg8 WiYD}`˯l ~JE+f!ȶczz2f ~PK G|$>lzz6edu/harvard/hul/ois/jhove/module/jpeg2000/XMLBox.classTkS@=+Ŕy'"b[ДQl[qYJ0M:iʀuqIǻ)" 8f9{˷$0 ]*ZqLsUT*8" .M\EԯbpWT4j\WdP9CKz/qNAxX C6R=\=-\c"fE_L}bU%]b }$ x<=6>brMAcO *ޢf>3%=:TzW *4 "'[.F'pr)Ķji4a d54 Љ35--C|PK G|$>%edu/harvard/hul/ois/jhove/module/pdf/PK G|$>/P N/3edu/harvard/hul/ois/jhove/module/pdf/AProfile.class xcݝ\C)@ 5Hb6*danڻmmm%H =bkOU+Vm@{.Hm(w_C'q?T.CW1 PX"T`ru3V )p*!%p  <["#ps.7# 0&nC`R!cY9*awqV ߤu,-ʛ3ٷ (od=<׏ Y~HޢGp#~kcG[y6 I5?%o#Yw1g_ ~EW%kuw 'p\~< ~xP!m]<<C?f?}SHx?_K?|%lߨ[G(ݚ3xW&ݗHp퀑12ځdm:>1kY;)ՀnM#f l9ҽn-ߚ7u>6bF)JF*23jnI#_e~B[Jz]ƢeXr8ncD:UҚH x/NKjoy}rְJwS:Nz(ϚUz^Y5rl_ $yHY%ќa ے&E3 ?nk$1N9mXOJJ9#O 2B_:*>IJ <)ibe[($`yCcDߑr9^iIq"A$A2γ@̦31S|JÄ.N3!#f؀!-3S9rp.H%gҖ3!I֑"so׆m͘\?KFY1Er;W"[?h8i/?} OSRRDj %Iv*1rBvz5couF'ML}IJ'wStgIywY Ioc*nfuAݴ$wW)pp`oWStiջ)eo4F@qKadړ1:͜<vc8`T`Gz$u`dRkP:k& "bLMJ7S?c-Mr9SBe[tÂƚ d,X3 ~?Gc Ϫ*I?v'<9GiܢڏN٥WONs:f?22Yz*`6(չ4DP:dhub+V,qv&OAcZ㓃'0ѧWOy$ձn S{g71=\.hcziSrzXyBw&*X贽==TՔdd %9b&m!_ߔ(6ݑ%VtDK,DWq/i= Rh` Eٖ"5SWO =1;A3=_Nv/cWGIzm^E$DN[i,S=D`cc8!;6az'y;VK&=NaN:זNꑜLEUC8TMC4S/OlS>lGQ ls apd?}W~^uwף{^Uu5+t->UO4tF^Bc@/Qh,i,+h,u4V4z>./HILZ0iKet$]!I IRJҌ*\.,!F;ўh0ڹvD;_]@W֍cQX_ι ¯7@'%oq{}pnnX:?O^ZX2:q!yPCuaIx?Ԏ|GIb*%1S^RU4{ wfV'UpVG x{4 Zdo_M_.KGkoDB1vH KCHB2LB ~<',RIQ=UŽf?\Y3GBDCAXME[VK;䞀pȽZXI~#S^7 n$Vz aPUBKE ,&l*<3 i#~ɈmyNzQ}F&<5`B`1sy&O{!~Bzrl>6Ilmq/l|>qf*<{MEq~d猃d"ii9ZegNȭ8[ W73dM!78{kG-ZC0 TBF~UHЙ=P=_mJkl*RA*蓰$L> Q r -\ eSp1xU3 /X4, q\i`&&\ku[08'ɚd͏G} s(mZw5o[ȖQh&fHGz_ i˅>=z_aG_bxZHzRG>LtPɌC1( C]:렇z AIUzD-( Yn\vҜ2b| PY}y\:^P ['Ykw]J0~\,aX'jJ؃7IY-J@$Q\*@=E/W<ǟұ,z` PrM)e)W?- LZN@h Y9JSsMGtjcH\6ֹn=]7kB^K^ǖE `&U0 6Jhiܓ088#݇t3/$:]1ҩ4op}fS֧y%cˡG. -ƪ{tK8xBa<mSV+ts#nG ?UeER<%Sy,5t?U{A g Rbx-IH#~ -=GJ2V|C{dHS7qxep!͊km< s-'qӥ`'j!D1pW#1Lnp(pI9EQ5<ʡԠlymiNNڥaw\uZP#1 j+9US:cAc$U}YFNHT\EH3 +νGeQVk3B }fJ}V}TAckƎ@je.y%E«`) CJ8/$^<$9 W*ly@h49 uΑ9Lwœ0겦˔O:(OQfg\Oi6: =2"<;Cߖ[NŞ) 7q=Mc{$:( qx;t;:k(2;U [SYwf 7/W˺A{YFAE5:9AP= ۽cUvCzVae_Z9E֕;\B(@ƝU>ހ,D8cRN7fe'[l j/dPIE B;G#G_NJՂxu"qG~̓_È;N -=_$_TGV}9>,j$-tUv kn6--ZT'!^n'jJl*:$tMrPXr f8;׷knn-vB 'dC+ y[Q(pY̡Rk$%8 -0:u)v8Ziך9D}!e9+mdAPTވC)eQyq*k~;qpHut!>1Ə7i?p N 7pun,Gcܻ(G;ŁgZ -#E;!$!;"tVKDU5sέZ~^hyg]?clc6Qh##T'`﬩WjwgS(b\D+VD«~Sp#򳲠}V;;~g_ ~q4O;?WTˑ)Sތn{'hnEں}w HqBKִ$LEcfh'w.p*XL~p5Ih WQ({SyfF8|i5o߼[^tB{}TG_stӰG+u `$`%,pFK0tzWPIv`K֖=7OgM5~nWA^p-v]JaK*_c׎j{Iq}/7{pC Xo ߦ wl .r8|oЃa;&蓰&%Q^=xS9edu/harvard/hul/ois/jhove/module/pdf/AProfileLevelA.classRMO@} HAl#Ƥј`$pBtKK*%miQ^LDq'v2oޛI3PHcg~rŞ} e@xi;1gpkprC\c>1LECQs;y@Z!uYM[=c+j!@s4e'Css˵Y-BT48AV‘c.X4hX4~<<,aO< J{:wwi0M.}[OOI(IBL2e*BTU(f7ޱUU(QZ!_PK G|$>+3edu/harvard/hul/ois/jhove/module/pdf/ArrayEnd.class;o>#..fvvvNF6̼;Ff 0FTVFԔRĢĢbTҜT4}ǢJ׼F-ԇg1(20]@Hy`>vƍ` PK G|$>0\5edu/harvard/hul/ois/jhove/module/pdf/ArrayStart.class;o>#..fvvvNF6̼;Ff 0FTVFԔRĢĢbTҜT4}ǢĢF-tg1(20@Hy`>vƍ` PK G|$>zѨ>edu/harvard/hul/ois/jhove/module/pdf/Ascii85FilterStream.class;o>#..fvvvNF6̼;F IJD|}ϼҒ\k0FTVFԔRĢĢbTҜT4}L S̜"I 0!H0(20@HyB@q& ͦq#XPK G|$> ?edu/harvard/hul/ois/jhove/module/pdf/AsciiHexFilterStream.class;o>#..fvvvNF6̼;F IJD|}ϼҒ\k0FTVFԔRĢĢbTҜT4}L ̜"Q 0 H0(20]@ HyB@q& ͦq#XPK G|$>1 ݫ2edu/harvard/hul/ois/jhove/module/pdf/Comment.class;o>#..fvvvNF6̼;Ff 0FTVFԔRĢĢbTҜT4}ԼF3e楇%攦g1(20@Hy`>vƍ` PK G|$>!&wFov 9edu/harvard/hul/ois/jhove/module/pdf/CrossRefStream.classVSg}.₠DM $[@ Ң oma!X f jֶjxt}LNsL ]w:f|GN'xOi&> a`Hð>D}0aćQ[,4) q?0ILpyOl3a3|)Lq2yg%^&j8@N l6𨑚4Rh&NZvxl49iǓL ODct4ԁ5^j[Ʉu]솕S[6x0]X4#Ll*6Stx0R f"L4Ci>h@Dʜ<2c>;2=A>j<goh5o)v+aw l]j.H2ʖ,߈[䟷@1|ǘ8b M ix] ;6xvFJD49gxشm $$N \[[ަ,Twhj TM8ǶM2L睢ЖۅlV:L)NYetq0oDSB.#z xhq4|C|DXpc|BPWǧ܀:>!lJrtK6Rƴ/p^V4Q ^Gu|ɸ͠6R8::.+JY͸ ʦk|Cq utau` öj'6v|[AGRIކ۔ew6Gcg0Jd2i+'dJ ج_+m՛K@SP/!i}-uo5/]󼤶Sm7<]4#N:oׅ +vQwpd^n,zCtfںb'2Yp}8>rTsdylՔt.e7KД(ٜ7*fQ,6edu/harvard/hul/ois/jhove/module/pdf/Destination.classU[OAnvY^e" MAxх`qm0|M$9ҖIliҝs3(}~4}1$9®rć2dr<ᡌ*q0!c*1ʰt PGDdSBO]Hm ;%-[OBkꜾ6olL1Ia8cA"j°-&2 Ed=Ng ҄ J>b ڊ)2$ q<&"ɷ"xB{#s v{"=P V\N(!֊p2G9 Z*t\EMhf.`qm01` =U `KgDA .QGcf 2$Gm3%rK}{"a,"OCÉ>1z+s,RmerZ?Z?vP ul.$ 򐘤4ʇPWI*vmA \QI.dz7I|Vjz5PTW/wxO$v ( Uk4{a8  ot 3笺]g+rnd d>WF? PK G|$> R8edu/harvard/hul/ois/jhove/module/pdf/DictionaryEnd.class;o>#..fvvvNF6̼;Ff 0FTVFԔRĢĢbTҜT4}ĢJ׼F-4g1(20@Hy`>vƍ` PK G|$>1 :edu/harvard/hul/ois/jhove/module/pdf/DictionaryStart.class;o>#..fvvvNF6̼;Ff 0FTVFԔRĢĢbTҜT4}ĢĢF-g1(20@Hy`>vƍ` PK F|$>2a 2edu/harvard/hul/ois/jhove/module/pdf/DocNode.classVmST~zwC(Zʶh7*V}EY@P+MXBGo:#0cg,茿{]so}sx*zU bR<oRц<ǴD1ms*TG;Y2mcaـi<Ժm%)g;ő*a5kH>"=qSFêtL#Ť^5|7l%Lwo7a; -lm| %U۰Zԉ"o>0kמp>T4lCIJ~PgѩvJͶOj Cԗ7$whq)aUc\Wj鉬N07T|\lM-:A#_"FZZġ i]š[Cj.fe:'%宴m5q%wmAKъ(ԓ\}+'C+E)iHIBʤ-`ԬizfhwW`"{P@7!;+LpoT. ܔrvaMO1tʱR=$Cű&cSK>o9BZJi|>{r9:38Y.ҘEC$ۤM9}T'9FpG [qŒLz]S#eN&2)2b7p@}oc>—J/)xyٲp+SxI@ غyz#!{F,r@3QUH^͐/-w+YYl2=\/˄ UǗ, PK G|$>hCY<edu/harvard/hul/ois/jhove/module/pdf/FileSpecification.classS[OA=.e{V^Y((E#jȰm.m6Sj%DE/귭n3oϙ9/x =2 qe$d$e0s2 XXx߶ksf,P-Q)]m5cklhܦ7Ԓ7E]WK KZ.U[J/·jVL)BtPp, eADreEر%MrIlO3jYh8.qcX/y#ni*e /v\6x sn:,{ Y"0y.;c 9,~wA'-ML˘rdLMIwKVjA\7atG`0/K7ZK`Xr-B '40]ltpp^0+J!x7x"qJgH:eNx1N|ũ~Fm$t2vkDe qLp\8n*EeO;]-aCC?$3ƝiO;PK G|$>~@*8edu/harvard/hul/ois/jhove/module/pdf/FileTokenizer.classS[OA]h]ET@-[e_j$BP)]n?7/O Dsf&sΜ9o3/0c+cѶa1gqBIbq:3: rYt#@R"RI.pܲWv+=1&o f(_eo' wrT4T]Ϯzv&@cOɖFsjٻ ЛhVٱnբxivVn2O hNQ l| pTtuDܣYr# eiGm?aOzu{iʞPi͕rTzLU!gmOйGXȱb/ZrʮpY֢SUT,Y~ aQ\6Љmc=| zA΀<t6M3pacl\~ȄM9 Z~LSRKD@@)7s2YRrSǒUxfƞX hC]'݃.tQg;i0ԾW(",a}YGDxmf2u# 4 oYtܤ($x h !bAZm ҊEU`T(Un%[3~'7髂^69ď~_~D5t P^Dwٝ E/^!i*[>لH0ڼl!d%~ypc֊Mb5@l[0XƬcK?h`5q?:1BoQdK:~PK F|$>sW1edu/harvard/hul/ois/jhove/module/pdf/Filter.classRMO@MBZ>Z I+=ShrEIq8ERKzGMAC+{3o[(б*6edu/harvard/hul/ois/jhove/module/pdf/Hexadecimal.classN; @g~m<]aZl_OqÚe%Xx%n8oxXb"@? AJW5!ȦB +ǹY"",X5N18eQZ:_\Uf' &]7n@4n@PK G|$>u"2edu/harvard/hul/ois/jhove/module/pdf/Keyword.class;o>#..fvvvNF6̼;Ff 0FTVFԔRĢĢbTҜT4}F3e楇%攦g1(20@Hy`>vƍ` PK G|$>a 8<edu/harvard/hul/ois/jhove/module/pdf/LinearizedProfile.classVsEudpAs4A "& xno2f7n">P Kb.Vx***A-$~3 gݚ=ogt4`܋tcN4lѡc vrQأxJ䬋c r'#!٣WOCHp 4)HiQ}:fAÐf OhxRSOszBB4ЊfYV8a%{GŠYNJD }F.; |#4i10,ϥNpMkљIPNw)tMutJ#У#b'{0lgۭd,5ttIb&]. `=-sy-Pkn$i%(L-dF$)22v5X4K%B]Qꫛ4"!M39*X}ӉݸɈ#ҩİؘO]ݹ_n[(^QYfMKw/s:j:]߱<9]%KޣDZR7GnӲq].Ӓ[N I7p,w|zw[@= VSPr ~W*z5_—MYן?XxjYΣf:Xl'h,0 ΡpY0,VtTZ9s@FJgqEr^,_k4>gIʳƀ Q7u5(E|{u؅`КCi,+$ ,Vi6v]E]9ju@;3TzsTzA7%p91z nr/.d\P yRA3x0 OTXՄb 1G,@+*jA(G8q_ll [jzSIu+e=>V4^14p8.b=Jp%0f>pKObZ9oRi\BO]OI`]#5}jy#:DwB鞸+R{+]X;,QͥUe>ul'?3u}`5vHkЬZlSt;; eIp1EK_+^ }b,v]gQ.|cdXLƔ}Hr=aZIԖֻ=Vl,wRNkڱ<`̙1w&Kfb31^k#Tm1~'TJ0[9tJڀm☢1^7E]+ Y$Og՗PK G|$>LW;2edu/harvard/hul/ois/jhove/module/pdf/Literal.classX xT>w73yIK@6$C a @0$̐ d3Dpm+vZʦhabZZMEkk[ZH7 CG;z}{1\m \lYg\}]y%v|5`[<]_mzWJ2RiUi Ugz^=牵PW[S Z ժiJt%*7ޢ*ZJo;*K>O_P]zO*}nS֫SGLb}Ss[hJUv*(ooGw) lcwӍ=ϊ3*o/4Ha34swpJ prP .¢ h&b6/4¥ٗ>g6>+¡ SJgJD6(W'3MPKb"OvVRLH>ElX{/2x7]\*c$۶%v6_^6}c4~Oؽqijbn-]ȡs BUeE]YMQ%%6Bμ3ZX^P&IcRvDhfk]: %kWX]C3xL<˲8>0:{YRHN;&E1*fGNGhSsV,}.]rPdFR̉V'E8F"GOvD()0YC[-#aE/ 9Rjb^(pš .5$`*!sUq٫xhxҥ>O( q+7{?O{ ߏv [fƹ`"l;MF5hvx˫cz|۸|3-{ɑ)F#%kA +*$ۥ%g&B^ť)TȬƨB2j\h7.{k:k+ƵIs])t*NACc:F:B^xf`xhQqХZE%Τ T{(8C"O ajp)*+‚Dk u^,5e%BGs֥6u8d?FETgzş鲸.TgJb&']>V,t}df5YL^o*:L٤"B_V+8p8C.ĉ>)5u#>=dOK1+Ur-ΔRM*eb 6A&WM^Dr~)uYvXO qC}nWJk+U:KxE$^IH瀌ir@LqSÅ {i&4E?1w/J(i#oU9'rmȹƵ:VN~/;w$,qN*q=nm0,foPA$rRKt q`UxN DI $2p_#ovZu:z FM>~ZsY?ެ/eݡͬhng5q4w)5/h/jӒXoܳY'~Ysg~Esg~UsObNeNcMIYTr&XD 띚hb& 4z&YD-5cG7Xhֽ>u?z/zz` XXXևևGCaXOOOO?X> XO?XX `)3/_X `-2 z `}`} `:{?oXX`6w]c}/XX?X ~~ `7c4z`= C0P(PK G|$>Y)|/edu/harvard/hul/ois/jhove/module/pdf/Name.class=OA8Ch6V B ,wۻcaccb4{*+;Lk 58Qa &|"O V'~,$k1>Njex >a~ɗC~JeZh=B Eʦ|`4dJlg-b-Ř]r/vW*xJ122Ke$.f<,d9Be"uQ\ n{80p[ a|Ũdڦ-p}Gzk^ t+Eyf_PK F|$>S&N 7edu/harvard/hul/ois/jhove/module/pdf/NameTreeNode.classVS[UroNr5ZZ|h*mAQU@i(A/D뻾߯qfgApD-ZG?uH@C?dw9{vgo~) 1 09=WýO70_ChxIk؀|2 )1M$F%icD#I]$%üfp%XxDxLC rYz<''% 'M31#dceb#ΘĺCĆ)#m&]0u p48۫qko*͚K41+5ƌXֵX9:i:'2:-﷝q3a%,WTjyJZnɚd~^HJY lqcF1`S<,W>gQ} )V&PͿ="6 kQ2i~sB`׸)M6ñ7m% MxFAxp3ӫkFG;%ts&ӒN:`F&uKKuc%RGF+xʸ:UGvQrcb7/rkLȸe]1öE/nU;vWvc%]3]dyIAhP: {I'B0::ѥNܥ5.c}%sGu?SFK+1/ Niou7u%.`nZvIQC<#PQP^#Rw^Ód靯xG}4LfƱdJRD%LЕ.r&VC7gSMZb@дٴ< k;VJf1:E#sСw#XװLd\3A:NX79qɕi$m )^g_Zeq(4 %4,+$ 1#%IIqx^y|"߳=B{>DgQ/R? %Z_A. ШճYhSFA_F 6JدEdvE´.E춂..(ɰTD|{:M}9\zzOE]/1CqLi <旸Mv% %JK}ëI%}3pm[BU#QpGɟ@M+ӤJ/F :Ӧ~Dsr !38kb)IT5etZi(G=LHMZq^+(JnChpSL ] +l@}Q|/ǿ!ʜlǜ혳scvna9j{qJ;am%: [žUEV5iPB$dԐҠ!HĮhvM6ȺU $CIe,| rOL>|qQs\9hxA$*(P"g7(TҨWZژGMj\"9D+II+oÎ//PK F|$>CHJ2edu/harvard/hul/ois/jhove/module/pdf/Numeric.classQO`~]W蘃) *NԖƤgc0#ARѵKDƃ^8`3!$.&k<| <}?חnb~:40ׄ_ΚEW뿤@dP# H9~)Ƞ{AYR9KA: 0Mz@'OȽF 钕^uSTڕɝLedBupZ4 Ph^^ĥLT&"E'I!ZF%ӢGCR/, ƀteب 9%-Ӎ~ 9 kTA!K*PwҝvjÕPjOL/:PK F|$>:hV' 7edu/harvard/hul/ois/jhove/module/pdf/ObjectStream.classV[WWN8qQQ0Ն$8ZжT@P,6ILmE{{wV ˲Vk_|h{O%v%,89|{ooK Ys $F0<Ũ#8*zK "81Vza4If\ &% 6 )4(؄d#˃0%qBbڋ 8%qZeHeM#)=khlmb<=ejɴOZƈiP.kNaEs;*>MV:gOH*09[@ smdmfZ*'c')]!=e]Ѩi۽VȭaN ,+jsVB mab7me p,I=%LW$^uXBF_S8#LG SiKFJq3WdR\CTAT*:УTcxoа] XE &*.64S)3,αoxH>!RQ.ޫ3b%3 %VC$ѫC|DU7cWъ6*^.?=93ePitrSqmwSʅ/;u_)W*vҗʙqk"U;=~P#~*r7-Q)a=KgJS> {~I"KEX~'rMn X+NT8Y\L^HvN JA;MUPܜ+lv9V}߻K/HsgխKH!x.y<'>7.[6\G@t5K(lIRљ3tpheQ^p_qO!z6Oׅ:? _.;jY =.wnW&O_w-"I`b-Hئ9`|۪:Ѝ6ӿC!L\x9:#KGKHj$=Nwj!If!<3 ̡vtr4X2 eu?(AE&44, ,ܰ9xtཅOIt)MI,M;BiҼ=vPkH%]z"j(Wb {69l%2}<`xЍg]9{*\P:їZrf?>(9vfzx=4tpZnR;X]#+` / zU\?<Jpt8؛e.gKqh?PK F|$>@r8edu/harvard/hul/ois/jhove/module/pdf/PageLabelNode.classW tW&3LI@`6I@ &ZIf,lvXV"jM"-VЪZ=Hwf6lj`ϙw{g *я8U 7f".?V?$-m~0;y. =x{%Ox$|P>$a>>x8#<<'*I|=(O? 8IM 1&㘄GXC212&dL2qB2e<))'eLe|E3,U?N4c_uk0cR0Bl@ 9#6PH2|l@fȌ9<F_ȂY=g-`̈́cZ3+(2!nm!d&xU~=o[2P 3k =m+XT,[$([fN)geWo!n$qRTvgl5mU,n- i< f)%V>gd얣'Pbgmx r1d_J|$M)cgʙ4FxjkѳIZ³n=kfYUAEsV;@u<`oɈHålZR_2mBʧGryoZ%C qsdWbռ()#?Q,$ŝ ɴ+skfPO ,;IN+LJոͻYϛ(AWcZfWM|Ki~n &9L)6 l; nNHHŋ/y &=U`O 홢,FNI u|5Cz*i.rI,NO?S Q(<]nt(dl:$\/K\id 91hCkITNa@aa3eRiiǏta̅+x-w;ٔd[d~]v 2s¹U^ж x[hfMHз'xtlq=q:>Oژksv+=^Cx D ~۬gq9r:["Kl͙eu |/Zq , Rb>H":+|&5d͖̑|1=yfo_=@ 7v:ЋQ().B(Y ̎4[mJW|~ɒ}D)׳Yvpk(Y2~3L@}jrz]_ְ!]6VC݆lH=džvl.an[Jn44 G.: m'm'ks?2[$M| R' DOCPal$vlUS@|'`zto꺲%ʒ}+FF!G)EE;r:œXry偅X`;/O E IOl6KK>?Rv^NaiSXex!qGX:*v> cx,包[؊cvmCmv(Q&Yvwԏxl&pL4UJX،c * r9'b1;MϓePMj"#FIVNS$^{&mG(j;eBbv%v`#g0E35paؤ]*Ml5")*N@˺ɸhdXckٖ]k$OؐST4<)E(W:cϿ$tfU A2{d(_.((}+ ;szEVvL"4ZM]=ڟ,Ggwo#BS0-9^γa<4:g;߽ڢl(`aK(9*M!= AXSmſ0 "zB(:b;,w`5}軉[ P pn`ءlk+lnrnv44u5u+cTZ65MsGJ,9Y kjjEԨ+_%|c1o䯗:)uR n@0&gFQgfÞi }tɶsTo A?PK F|$> 5edu/harvard/hul/ois/jhove/module/pdf/PageObject.classVsUXqYep8C=ms/M̨){wKB7S'wV A |H3e')A_D4H?骪ЛvJ#"e"U |I}]xS[9uV> 8৾#] }Κ |H #|,|ZbdV+0e]SJ,J)lI Q u1`VׇM|jU(Tfr&3vvqK UPuV+7W\ 9Uؿ%O~t'$|6f86)jcRűB) b11y̱CD5$oR7?̕`e qS MeU. X*].wXG%0ufN-ϜgNϡաL~GCxr9l)TX`lce$߸nJ7.8qd1_nv@d;K7edu/harvard/hul/ois/jhove/module/pdf/PageTreeNode.classWsUn&M@+ EiK<BA+-TXmeMVT|G}[fl:Ȍ3x&mhJss9=~@-$@%a)p?qPK*P%͑C葰`p ^!)!A1`pBڏ!bv18OHXÓSbxZ ψCia-02Fp⌌s'c|"SLv'BƗ%Ո| E-PcF{I!4V1)B _؄2w#.9~d^Aь=2E>R,45iV2 gTI≸,4_-o.7H}rիq0W\c\~$TR[]( iK`nFmH%]tPy$SmHM}Z ‘KS搞W8wwRbTmfzAR̻0y`4>B_~}Mqj膜rI/s)VӍ+F7FD"Q!ܙ;S&&ЬDk&(N38 ~LEr!Lk((*U]6W> RՊsNw\bqo'H ONaŽV]^Fk$⡐3XLtʣBq7!W_"Ť@sWCX*/qZe Vx@8VTLaU\Rf(qYC!G ET-]idqkDxb(hܚoqFX&v)Ě R܆))) ^AcG/+c'J 9v1e )p4r<\Zw;nzk*zj#9jU"* EDQeF)UjƓ3;CfE4'x=D/ʋa8 I8/YZ)Ą_`]vZTufF(>sZ5" (c3CPg̡͡R 1edu/harvard/hul/ois/jhove/module/pdf/Parser.classW |SNz{K!mHPp%DR- ,Ks[iRosScMs:ĭLI',6~S~*I헎_9s;'< `X@Á lyB=<|҉5# G%>%i/Tg$q9 !*㐂'p 3x<O0Qc^|Y×$S _xxO. oz-oK|GAlx!??gX_H< l#|_/I`x8–?߽?lſ|U?ʶlzJ\g\tfьxtg.M'2];{ho:KѾxwtSc%]ٵz_vhܦQwһZ@u.me(mzחĽU`6`uS/RYT"{Y*d)Ԍ]WR !^)-ѳ^:\Z2 5]E"H& NSBƬֵܤH'.OjhSRdVؘ5ӼF%ז\I(X5< melt8'WzFZZ$efQU4Qd^<>H ][n]w ,+9]̸F\XKWHQ!cTg"cXA ^ 9 CLY*5G)ĂؓsAVLCZoY_ #뺻 Ja  ]dR%j|Yfy3]Z@ERT\Tv^Ige@I{]6MEy\ڵdwXgt#/36xQ|0'ndz!ucۤ9LkOV,t"'CN8\[R{dd=&Uqm^;p_;f\/07.důUq U}W IT ¥ /Sq'n-7l&@,&+@1]Shiw[8*T R p>7B,8Af?TmRt6ا#|>ܠ,T+UD Ur訢9UlAz&r^^=eM(k<.YU1 ̙%qP)" p^,het*%RA-`*׻C7nLCpG.ܩe,TUI:U& ,)/7^}b⣸*x $U%zU,U K%lBznPGec%z1Zi%L"mY7.a9PT)-z٪'d'2-LV# &ٽ76Չ=^Z2GL$Qf+^f21/*)1V8ITV [90cKTa* txS5S:]!N-/GD{3[^&qп=G'1Oqx9i.+_G8co6]S!WI,qƷy PK?fø82EON=ű~-kk;]3iO%!+D=Q9`)'6jt0Bܚa4Ѽ]t\(| S%{tdެT S\4!ZVHt# $_kO1ё:uG+~_>7˭;bC6\ͭ1%)*XxS;Bm.p|gPT(!ls y4|3edu/harvard/hul/ois/jhove/module/pdf/PdfArray.classS[OAv`Y&zAl[* --ja YݦlWhP->o$"a[%Bfsf|ߜ9LJz0*q2|HԢNBj8!蓡<%iasV981:k.C蜾kE״ #:96!D'3C:jڬ^X 9mhi:6䊖sڍ9< ᦪjt's@ɔ3L]$]qW>)ȮsiY=ӞÞl C" F9! v!ߡ :q^$Z.NO<ñC߿Mjѭ`IqI 2b 2480k]ӱJ,GՆl9)^EH coD2 e']DCv(x'tHРe3,-|ްi:[:No/5S=N;E 5NX==:vZqZtm4:#`Y=&&LF>[F`N2[G^/#8YC^N9JxW1* M"\x .-ALXD.@GԐQ`R*RkU(ѕXRF}йxh v&*¥_m!sd8qkDpjE3HTKXBiѶki46֒l /,AzM"'u8;TRFrPK F|$>s_k-8edu/harvard/hul/ois/jhove/module/pdf/PdfDictionary.classRMo@};q8MR$iBNHA"HET傶lpȱ#H( !(`1Us43~;:Q4p9J30qEeJY\ņ2 \W27-e+ |i=1< D/]<`H[ Y6VV&,qyBs$v·x7t'6?бy:ϬG=4"0LQ\TZ 5#D%d{.j$-3,+o<z"]RP?L0kb-/V6q]kXgĎlsz;zq?h<T>o'[Ѣ 'TrfMqX",Mc6MhitJљOv4zqV蟀G/cd#$ #Wc\3) a,ǰ5**A~6a$1Vb\P1Cw0еxlŇzb' YPK F|$>d7edu/harvard/hul/ois/jhove/module/pdf/PdfException.classJAƿ]Wm+eYujPFEPt+K;RAAtPՙ\LH"g`|sΜyx}pbϰ%Ê V51hMϲz"``5X3n˰[f蚼pv~i񆤫tqaTow WAqjA9L"פ~"/4 >edu/harvard/hul/ois/jhove/module/pdf/PdfFlateInputStream.classV]pUnv϶M K)mmR Qh hJi -EBɖl ㌎Nfx`RG'|^gߵc=gwMg{=svßЍ؀#~lĄ~HY1gH0 I0 ?Vpҏ&RbƋ,[M yo]d(1f8g"s/gvN ^'zTLg/sxv*|<+GyC.HI3eZeHzOEK.DON茙*eh.5IMN'i3R_.oHaD\@ILJd3OEXO<3hdm4%:GKm$$UC}O7-뙒!AT;zvbXi3Z[q#0xoS/Z7Zԓ1}2cX#ENљ;:=/$/-(xMq x9p*#19 f(*+y 7` U\0 U(*UgxR`ݿt&3D63Q8e1]ئQlKBxZ~+/ wfP~1~8M{nZjaWFz6ŝCŢD}ءQnv#v(ݚE:4詿,#?n`;;,Nzz._%5=aI+%"#b‘9B:B< wàYxf7ai*CC=CCmj Dht6 U<դmQl˪-^Gab|xJ"̢U k6'f9ϖ*fz2IX)ëD}|@ rQWS@%8\ Iiv]r76Zy$9T>B ni+׬{Dܐ|j3+jqF:__8"Enk /ur߁Bsyzp-4͐lL}Nw]{ɡ+hirb1.ȢKh(uW%~r#NMt5kחDžTn#ɇ]Cq_íqy:'l_aVl]FviU7 m2Fy'^5P/[G\l=;/nN7d3=c6z.HTӟBumYt]zZ/^ѻrًK3?d Re˖Ņ1='S4ES_c]K|y,ίy5U4__c24gKn5pR**CQcP06Yc=\, 9G, 5c&D&gUm>g޷Rz<e4Q9 hYQliK9gf*hBo(5"/#&.>aq]h^k,jkOͽvV$~l[ZQPK G|$>qf9edu/harvard/hul/ois/jhove/module/pdf/PdfIndirectObj.classRKK#A*w&>~:=*)K'dd8#ٙ<Y[=*zn;s01aXÈWcyd1^&3` j-U7ڒ);Vŝ7=&ʉDS;f-Z͠~Dή>DpBɪT^(o끣 ,Y)nYdS&zD]&cfL| +'~C3g33aLXx_a[*9 )Cw-گ6*P#i}դ ֊0kU;yڅi@7X7ϷqHGA68Ĥ?f2j¸AVcQ҇rs_E>k8c̏s~`4@&PK F|$>ƙB*->edu/harvard/hul/ois/jhove/module/pdf/PdfInvalidException.classQN1=_tcx,\h\h\`X5pű r$.?"FcқsNOo/U k=lbx,LNfRFC:LsAX@_Xt|JG,NYhR-'t<ҩOCA#>7^YHIb64I?W"ꩁ6*\,x*.*"8\*z*ew"JVe?<{4I`s6o[(1X6S 9S@@f {snn!-ٸ`zv /I+3:g8<>PK G|$>ZW/4@edu/harvard/hul/ois/jhove/module/pdf/PdfMalformedException.classQN@B? 7B=DQ-mJi|-/6P]h QK˗ٟW{شPIJ P3Q7NP>(eHq c܉ 8W=PPrb@ [3fΐgڸzI /IN'PK F|$>̚A4edu/harvard/hul/ois/jhove/module/pdf/PdfObject.classmN0KJea ČXP`bE)qVi$O i| gLv`Hc'6Nl8y(C30_ L[t}Bɠ#Y_K 5edu/harvard/hul/ois/jhove/module/pdf/PdfProfile.classVSUd-B! (/* ҢO*.Ɇ,d >9c_|)><чJgq@Z<9ss7=>A82v z1.;B\bB&qEVd Y=SRs5W2Up͜yO ZѶ.MmKSM.QEvta虓fkY>հ%8Sevf3 ;Πƚ%J& qj8ǘXP5;~ cWS 3ˮ=WuU3c O#[i"Wd7;zIM[{ uup㡮iװ aRCZQ2'ܥDj {&IHx)aC3۽X[/z_+B+L#RE|pHJНJUe]ykBChW=\ꕢ*c$qxp .pH N0COQ]IOx %7:8YB@"]0VOhw PK F|$>*oJ*:edu/harvard/hul/ois/jhove/module/pdf/PdfSimpleObject.class[oAå mKK[RkŮZ/4>ƄxbK]~?(M|02eb2sfw\f~vep#9[R2BH{KF† Yo-a3U9 :o1dsUl]jQ\mZkrWՒk 1C.5 X( =K DFj)nғeO׸-FN\ʗa)u:уcx!+Jv.%\=l|F#0$Xe˙S$(|B/"YNxG=BC%Z` t""/cM ANjiHO$v:s& * QN~2-D@`7 PK F|$> 4edu/harvard/hul/ois/jhove/module/pdf/PdfStream.classWSWvY6+`,QV$6Ro (5%Y`1̅؋_u/3%LOPk P}Δaso76pJ,/e@ `PEpUQW96u]0G\E *p^E)U4"1,r(pL*xCdS*㒠[x[; .srZD!4©L4pbJ<Þ#ofzvĕ379g+Sc :]D;Pi8{{[L`P^B |w[<^kHE)}R%%i*0ׅb&ENQmGEby=~>O҇A@PgWQP%U[]U,\OQj_IfqQQWJ?o,}fb)dXxrozS|;5KC;hxKpR*ue64| +-qvA6~=(CpnqO1 j7y  rr "Skf) 3(ї"_T%&]H&9 j14.\ Hzr$Mep=%S:DE(k8U ?*e1VOMP ]pWii@/3TڕAX'a##\@m|g=ɂaL:ovEi9g^2aA.le sejBAO#S^mr\}jۥ uN Jdži([k]8O[riȕ"|'uH5pZ*:u]ØO*El"5jrfc>~|h>ՊxOnϓ>7i3 me"6_Q̃j u|'mPZ"ڂlE [=[ݓς0vϡ>v0Jto5?R8^wG*v1(F=P%nBD9qܽ 2NiBL{{ ? y5edu/harvard/hul/ois/jhove/module/pdf/PdfStrings.classRksD=u$R*GR@!MKKCM4] _dio n~ 3Q]WOH3gW=jwxq+*K6&apOq.k=.}·*aP# BCkxD8$MxN ^ ]rpit~8<'婊O ,[ÚW?{^Ӯu7mjVVsVSU ]x"0Rv>78LHƹ vʝ9H;'s:Џ-l܏T6Uu\mC'S5p|O"pw^\\LoI53]6gr=I 8)i)%p<.U8\q;HQr]ER/Wh(,|4A LUrΠjQ?M3T'C籯u faSWnŅzi@yL&Ɉ}IG% DgumnhWcw? 8rd"#鞅ǗH[S̷ _l]7fla Vy~%/S?b^S] zsכ^.x]^TYjJ^zh ,\0h2dp¸jWm{35ʹt3tE|dZ|dk2M{p_ReGhrH;9q~2iPK G|$>wM7edu/harvard/hul/ois/jhove/module/pdf/PdfXMPSource.classTkOA=V] (HѲmI4&bИ >SSnvg&e}XL5n2w{3s2ֱۧ`IM*HDZ-VQ1KҬ)0x %aCq4Mñ|q 0\nJC:|a9.MVj IT]sL>`H >0bT0вC9 =qLn 7gFv/]M1D32mS3 `n;lϦW. җmcasoCVuiHsWC 3.\pW4l>Cz@]an55Cq܋& H?|X&Sq{#Tlvt Fq9b:"=izQz$y1AaR`@edu/harvard/hul/ois/jhove/module/pdf/RunLengthFilterStream.class;o>#..fvvvNF6̼;F IJD|}ϼҒ\k0FTVFԔRĢĢbTҜT4<Լ ̜"Y 0 H0(20@ HyB@q& ͦq#XPK F|$>~00edu/harvard/hul/ois/jhove/module/pdf/State.classYwZU $lmlqnTIkk cfr %&gKsgK_H_/I$ė%2W$fJdI䈯KoHoJoIoKߑ'+@|Ob2eGď%l'Ug5 5%:DxEIҋѴeS {kު^4Fg16:^16kkFkwSp) f̬ڿ/j%e#|"$b̖z(nEh¢Ar,_ if*F|\O_ǎ_WP S͘tV=/ir'o2~T#jB^`n߮&<zS&R\Me"Q5>Pnprޱݮ3j'f?CEuh:{vk[S-SZ=gٛyR[n`ߚՖn h: iFq$8K1C(Ri ,E"G(P)Js K+eU BQQ8kuE BT8~`h#F)3IMK3hjf5sy͂fQ99Y\մ5+U͚Ylh6.(z@[UGTRB~GM=gT }[x*QF¶TOp}It+hh_\dKv}=~0ofaVogN؏~d؏? 8qdQg?>i'ϰG؟bOOPK G|$>-59edu/harvard/hul/ois/jhove/module/pdf/StdStructTypes.classmSU7$'i(@'kjc"h մ>m ,,qf{o}㛾Qgt3G=wXw&sw=s6?9epo , [zU-mۄww:apNxA$Gx #l ;]Eh> < |H"<$<"|L)asMhQw-=Q}8i"/ؿ0Qi^^BzaQWǎN(/[hճ;Gnnr蝬-. (qE {ESX ;;iXnG߬y}BqؓWv煁l6)Tlc+ D<֧s;׷!# Uek5nHFC K7&X OͦZKRE.c+ ]wύܠH4I׽8.8m+׉;ۑcľz'AwЉ}:{6g`)C?GGۇI˲8^o9*z: y&c#w#OPA_y\$$Υkz &$T~Dkd'_)H aߐR_P2JU"Wɪ.tgȴҜZVje9or\ZgV)Eagy$<#"pGgyL8eaDž#~ 1edu/harvard/hul/ois/jhove/module/pdf/Stream.classU[S[Uvn'94P(M"PԆ@R"Z.ŦɁȅ$/EVQC_x)8@;mq dfZ[[{u~mG,Ј쏯0>y/E> !AaA!(VL @ Պi3"**bET@EǬHDT#ѓ"RK|i xxՊDx:׼!Mo1c%6 33|Ԕ$86TAE`T#I%1 (/,'DNE|qUMs/"o643P2QiyNq?6Jf2`US FO9Sw<Δ d%%l6wL3ܖgYpun.؛y0Sɳcx3T4ݴt()gay"x.w\92ODPB27k:R %Qj)|- {rue=Q(]ߍȱ)ƦrBm1/Tl} |k) uNz~07g({}O#z J0y1y]"sD0QbANNN,P0_ޕ;P7A*Jz)5ɛV7g(JnV* S9g}r-0G3orK`wKc$%0icƥhʔƮV3k8vWQ47(ugؽHV8 $)Ǿ*/_F¹8yF:9HM%#[6^^Qz.`RO8,3%e%ea3^ȟltьz49Ewq*F>H& 8Y Wq4]g\ȵ r+,P%k&YɁxKY6s ]\(vcݛ#;?e8Lm.vۏt.PIʃTuxFkGAv(Y'܁ݰx6"tR0o:*Vh1ەkh An6PK G|$>ރb<edu/harvard/hul/ois/jhove/module/pdf/StreamInputStream.classRnQ]gqжx[0Pj!&BmcM`Z`3?7?&>~πM_/{u.k_  &%x`!)̪ieLrq9Q{-ɰP9r|~U&  tz02jKva!^:^a7]n_4鹢o QH~K[n I]8?tA]J0y:]ؒQ996$zEJ.C,)1?d7N`:Xk& [xfa3fyh 3$hRs*흊Y [*o\[c0w^H-j7ѐtbÛLn{^d'R联rKIZYyALMnI MBˎ{kawCCL!ƶ4V:Ln @:edu/harvard/hul/ois/jhove/module/pdf/StreamTokenizer.classTNA-)E 岀 x biwZMwۨO+3Bg1fΙ97m"чDbZf <χE)J$Ž09@vfwVSyΫzX3TKգC.Բ VqWzsy^8U ^b`oB9N ML6=u,I,D$eM5_My̰o떚f a[!VJ3qKY%vU|kۂ8:VԚz 8q'{yBH>[/iO!\E\*\F(V.KǍU- +͵+w1rby4t3fD5i`)PhL(<edu/harvard/hul/ois/jhove/module/pdf/StringValuedToken.classN@E:~&摐-m(h@Rrb;W (> 1v%l1wWΙ|}|8~v,7eb`>ERILԂ'" uix`Ms1?*e2N/o,~qys\Ab,vJ\u.nfR\F: &,cT<y-GU³(%Ȃ*1[&)64ZBJ6[e͏2R{{As6bBy^[^c~!FK{DR;|PK G|$>8t&> :;edu/harvard/hul/ois/jhove/module/pdf/StructureElement.classWy`a bQ S6!D jq;$C&qw6V+Z[mmjmK*xއ=PLfw]c{~1oOcI^[7x+nQq+g wx'Pp Rp {ߣ⽸[ޯ *t?>|T~ |+ ç|ZŅϪ*s|/_2ܧbgx1_=𐂇3<µ>10exIS 3<%  _c:7UMo1zVe}1pbjI,9~I~)4#dBt"K dT]M¢W0  K_Y !(vxr%ߐyMPO I 7 o6mJ;S!Ɲr=4$L+m<)J7jI)[NKXPBQ I$&'%x5I :6hJ%1oB2vg?i؅ԞK\JE'mdCm]rDg^$U;1d\([Ml5n~@&8Tr;¸O2Xӕc5,pYj=2Xα:tXBSw2.P1i,%{gϼs@<}eQV;vaȇitvSU,xɵ i@Aywc&ǬT%j"K[:wUp1iH&8U D>R$9kqe-p-5g msv3do^3쬸dވ&q ̣? [~h !#$}ꅤk2)s @_gZvx'5< )=O8rpt!!ѕ!!j@BE@y> 0=>:9 ٛMf; xGiGhTRM} QV~^} ubwS1q*r$LØ1E1##V;7+|;a̡!\AU}8OX- n U12cs!\r2G r<$ x9ӉO ĥ52XX "71 s  '?zuo.Z͏V.r &\A'ȟLX6|f._}SKύ17*4M G $Y.,4Ak-X[)zOYY T@0p ``իzsP& ļD[X$b4 y+I Eꡌ`6EtŨ+xi,ƈW4L, Z[I~ #YxH(Y0!,S`0Lυq4WV0_#8edu/harvard/hul/ois/jhove/module/pdf/StructureTree.classWSW=x0D1*xºj<ʢageg#1/sinsR PU|*UoOb~ouQ,jg~~o NAc-QA<M<W@ccPȇ1"9"HBȆ9[) p4[AG&px'8N*X9PPS<)S%xp<`Sp Nj/Jr:L`hh3LtHG4[eQLGY#F=_ 0,n;hQӊvhInǍtz)f !߇4lrvqacoZI>AG舄R2m$f3m3ӎܘ$SoDK:=l5a$8hnȜ0u-N)tKO2sopqƭ+e >3} 7v*4tCsznqӱ3qD a'`Э"mT eb76C ֒UE0ts8ޖ|nUlGuXżKFl"TwU4nyچ=c0bfux[U6A:CA)#,Xp*a?l)D`U>f\QI+ 5ӢZ݊gzjma}fd6۶vBdT)æz3ag*>0_@/B=~_QM*t3 =MCS 1-1`F>krkVk&o٦VI +.PCQP…Ekw sw3q]ڙ?G U扖A%Aw\4f^:aǬln %_+1b&u&Qf̳q: ebApfL84/IC ``G &tf4gh2tfYe!#~!3AQx5]wBt[0c5#>^ICΝVMpkV(>̢GLzA#9iHyS˗f$QӺCq+< '0o82_M0GQ8#<վ >@!(-i*慽P)IM,Ld8ʅt '7e~#JPV {KLmspɱ c7+|O N>"r⌸pV⏡mr ,{ƦIBG+_?ݶd 0p #r%2Q6:'#r@=A]V:L+`2V5It&&;\ @6'^D68edu/harvard/hul/ois/jhove/module/pdf/TaggedProfile.classTmOA~n[ U-œ(PPLDƤYzvk ~ Bᛉ _v[1pxw;/3<3{_ QR#%0EAB 0F)Qt`⺲ӕE'ƕ(qb$AhFX›%9n*s1jmU-ۨ\_1fo:F\ N2OeBU+]$/ :W=V̳Z\2$&8G-JC+% qG]LQLk=p9V0` s,ךQV| bk ޫbfiG/K^s jXĒGkXVѺ7X&*vW.7ZG!# 2M@-gIk L6`2<K؀DM~`wm-C8r@?C-8uY`aex+%aϘe[sw%Ѭ6-֘r`'R\z6NtD˂ܒ]c00.o^ D]RQIFAR6ev,=@>@$N:Sx2Z.NT_9Jǚfv;HB7%i3xB0HqA~Q\<0Nt<ŐL'PK F|$>Z̫&0edu/harvard/hul/ois/jhove/module/pdf/Token.classP=K@}=TNZ"X(8]sWsi itqWx ѹp@{5P(m].AB*$O#593%ܝh'Q^LCmI$`R,ǂyˀi`SZ,"1e8&0NNw܄l-rCi+zkʝ>O9 x&tU3}~l|s̫c@^ %}^GOX  M yc g#upۚ12rVE~PK F|$>!'4edu/harvard/hul/ois/jhove/module/pdf/Tokenizer.classY @췻,0 7 '*(C#de?t ^9&M6=lF&-iM0wsM+1G6\M5vqA__~y3o޼ys|ɓOD3.9S:tA'?b MX]PbcH`C8 ' &RE"5.J)KM.ʢc0.ʦcHsXHx M2+35)2]hMqt:hbf5Ƴ.M 'ibSSj"E.SYLc.Q fpLMr']Y.0B-ؾLJI Q [΁+1a͏YXX[Ӭ-i6JcZkbVyc]%DQ):2Vk 5iVPrmr_W^YDeuN\PRYG(u-uNIhZ%J@KNAž^o9nAVo}G rkʛ+pxAZoo诛(Hj5͵uW!reUz)lU'(T {O2MU(Ty*Jըsɒ:oin>T$J˖yV"hpTXqVk;?(@Ae@ (B!̅0 .DPBF+VUVW".^,kE2/flˬ`G~?h/mi1"h7l@涎M ?DzJ10XL5cjjo;:66#3К_pl CQC:$7ü-mā.#l_ou L<l˯7 6BUfNjC0Fs`ɚ3e9vA]5V4=g&бa(wkĖ9@s~I'IHM˦jg]Y&plB0D#5U#pTl9x8>a>`cc \2[06Zu}ʐ 5v3V1 7:LӴJs}uqa7ݢ:9 .n [c_UG>Mlsbf[0iA~'2DԆtSɗB_My+S{ܷn#Na*}qGvP{\9 zC57 ܪ> _;;63}3NB)fW]'$J5x!Z[C ߚj*~wq۴WW.h])H׎-X]YZ-fwf#Ual͜*G'no X?F9/v<(u'ed&a)53^cL^ٹ}SGu7`wRM(A/Ҡ],gd}FqÎ>Gc0Vr\ s(<{U[Ǣu:q7euo'` Kl'+2\:`J y=@S/=ڦ鈴0σ9r 8k͙NInUmSMf;|6ZrvS IN"3L*=:MI ޓf ͪfN3rTqs1P@yKeеi9m6D9T^vGGK6T}'92-:%C룹QOhci@Т+vEFbGKuT{A.iZWCsbC!{=4/ac>Zky>*=>QC!o7/E>*IZ2fi=fxp)LMKckZ:9(N̿=t怽4 );6ڌ4ѻ*yeޣ7"bNEW?>OwvѬU/%)%߱X3*#W t\A?"g{haw |4͊B۲IΫwњ4}B=-T /whEءi+L=5kғ\#5P2[ɁY=zIéI7+c|2?;|2dGLs3μ6ύw~6?|(|24æy@gn(y f]8 |i>f77*8M|i1fn+1q!e6{[p&D7kZ /fZOV`7: ;VKG=7c'%iC}Q2S4O!Ed+X^`b>a٦^VJBsȄ.vlo+~ǩ9v>EwPg:E?4F/j؈fY,n۬ѣ' EҤ #YFe-2'gfN, EKR3 e-IFҝcP3|1JwtvR,KFp oCb}|!:n>_Esh+hs*z[k|~ ^Wݽ'3wwǺ^;C5M?uTFo:G 7&~kd |n:{ފ:o;џ``|1oKpy?JNw EE#ˈNOWb s.g蠭YʂIϒ7SbUdRn+qoֵ\~at94TNt1l?g1Q4gouuި۩hDx><;/ވsHHH;]oQg[K$$Xd-]>7G<̻)i[>;2t4VT.ބ&fklJHhl4hlv MjtHqJ'%]DtK70I&e20EK*S0p9&Ӏ28BfA1Pn9[^-/FAct!Pny X98ND98INN928EN\`NS4t9/8CΔ3,l9x< X( Ex<X,%8GΕs<|9@.. H.2`,zX..KX)+KR2 X%ղX#k>Z9`z`l6FrB+ \%WW5r p\ 0,d[v7-r p &  EK%M:]{1Ex{2MLbLX/=bJ}\*tOut(===Y;*na:u+5(e.Յjߩwbu:]3_ ? Fnݳ' 7C a a9_Bo00 a ̷C000A0a|^}!@0?a~#G!!̏A0?a~io!̿0 Ys?@a@0a>a~e+Ba~w? ̯A a~M[!@߅0 N3 B?01?O ̇!G G! ̟BCO@OB?4Aۤ^WUN5d)AN5eIs}M9ǟ> g/AΝ}]}6PK G|$>tQ h4edu/harvard/hul/ois/jhove/module/pdf/X1Profile.classWy|uj>9ʑ8cqa-m%dUp 'WR\JBBOh wuμ]OzfGxJ ثQsa7s oT]Ix?S,T.Wi»UGxi|U\ZnzAn>ďG4|>T)7$Oܬq+>g9n>`\CnSq;xxل0N|/Kl=*Uq*ݯTD*-萕keѡ\2Nd{p:Kў@]Mߒ󲖓$֡D'H$iWW:VlO5O%B#Px1ጝM21;۽YH<%W4EX@L7 Q#65s锕ٷvyK( Fw1uv*7‹Q#7;?Uҙ:~{Zۢ;uб;u`R/D>\@>#uwC@E]t.vZ#4܋`J:C#vGMzWQISQ7yT7̀Qǜ1?Gc~湝<cA&vH朅c3EYZ^߄щdIBHOYf2Q) )R^C,o=R "PNQpk ٠_TUSCs$cxWK;]4]E.COh'v5L4o,$ESf&3ǩ%Kg&Z&'vL Dm9ߏ~ F DCSw֤q?I5I\j*fK"Vj$͖X႕t 5#>mdS'q ;)[WoŵfpjLcGՐqIGUqiMr"ܤ$el7ITF'5Zo@7Io:OyqY*_Zhh*/F2)G鋀yADR"Y\r:SS+8S%O/bj_#X`P46CSPa}-ۖƂWPqG#$0MS@mnTw,D] ٝxuNW!pG'*dܪ8|Th1ԙɫTcU{voaE-&Uз~F9 y{2gB N/=DjPpNc]o#t(1Hlm.K3۹T̘wN0(GM!Ta'wm3ҭE@,2!Ac3W${XwW0:EQDr:/uY^ۤt@ P-)H euX Bk}{h E9yFW}uF;.M4o\TiKZ5X/kbP諤%IitehDyϸUőC8һou?8NPp= W Q!o& U>'PK G|$>Y5edu/harvard/hul/ois/jhove/module/pdf/X1aProfile.classS[OAe(XP z o bHۘK3vtqmv ~/D}Gϴc0gs篯iXY(⸡ 2:Xm6 <0dUrEϭێŰkѐ^WzhtJ6ܮ%q,6rd<[ '^Lam&%+jA"֜궥 [ ł;/kd,;G i2P_*lNr 1KgX5-<ˑ:rܚ 4edu/harvard/hul/ois/jhove/module/pdf/X2Profile.classVk{~ǒ=Հ@[QbH(2 㘺47YݕQ-_蝆%@A!@y~F' 3>Μ9\v߾ʫF9F؉15ϛǴI;_P!5ܥ5m =*/p  E! 7vGp4  jp9<7l ZhD"TC㘁86籕c7ǞD0warBm8Բȡ5lH+#W.cRM]\<&ґzL]7{^ʞ\Ö\<_Ɠ\GԶ[`+ 8H4edu/harvard/hul/ois/jhove/module/pdf/X3Profile.classVk{G~ǒ5դI՘nJ `vI r։b[cD*+c r+PH \̥UHB1_ Zsf%[$ ׏ IS6`K̰ڬ98@ R8gb7<5KXc&L,Xy^OH|LŧM|59肁K|A1}N dZRf,o:3Wg\Ϝs̼;]ۙ!j=)=N;}+psg<GZZskU&&E4$uR~ĉ\ϐ5kW~MIS ~KSxC{[/yuX'5AuSx eѯpW0?* lU+MKE`(b00Ya3V%^U J~f@':7Zg}TZ~p=֝^3T~R3OD$7(WVz;6O]|H0IY$2mi Qa"{*b:Hb_ ]610kǬʻM[ZP K-7RX=Pvafт;:Y̡ۘуrtz 40B[AlQfNw·&4v n4LFI+_occ>W =Qa_r>v'"h =e4}^ dUQ')FH/ ˶,(# sh23z^ƶpw2meǚGʸ4y#]A^Y܆]h2N->-ѧe?Nifz6aD3nHxhCR!me48زp)ۇ; ɷWHeT;6BH޹y٘Neh(vTt ϦW(oL5^=^;V;KxgVd]d-)c Q #Nkam 328OD S D¸P Za$RrIjm?.١Ɠ. 3k5d@D*'{ OP U@xy9-O5-ioGEh|T\a<W$z"!q~w]C1u)GZX?ԥIu$Y5v*6"FD6}X}Q~}A4~lnn.S'-ypb,nPK G|$>Xu3 7edu/harvard/hul/ois/jhove/module/pdf/XProfileBase.classW x\Ưyw&/K_ئjZf@& ͘bYK%y,aMIq׺/P!mKU Jx}of"%|_rϹ۹g9oT[p]=x5axC F ox5 =wbn c/n`)7jx>(p˾Y`B`-~ d8m |Jg>+9;tNL[Ô=|_E|{øpx2W&0-pLxUoi@oV*P oWy<O -+Ց[+z6v[b먙eStk.Z3T1m[oWvR$9lgs];]fk̎9y;;ީs̡ s,i(V مgo[3VtY ,,K )ɛvʗƝMcle;57(oab9bUp.Lqf| 24j $ GL;[pJN}bN;V]0{=Gn^ɽ:.:M+qG ?#X̛ccVJOS>;3lnJ 0|F[&N\.g9y&/J 6 W(_EC kxTcs$C2[2BE¶3M|&"öыK [w2}^Up;ښd/ECr+E8ʀs6'fze-:Gg:2 X@_,8& Hl{f3vŸ2)}AG_/9%LБ Ht396iRq -qOI*n)t/x/LֵDLcRRIHl))Dm]֐Uw7rg:•22/fĴe=ږn'\եB[V4i g]fV֜m]VUͳ?M(PՍM/?(Is- jH{LIֳSZh>#{b w lg5ʕ#{oY D`_gA!+met/ěS3ϥwYq*y}Nܿ^nO)J !yFFH%[ twj\nl#wj1#H63MU&K3S漹-ƦTJ9&rѤ=HEWJ{K"eՃq'#.]C>&%UBR Z 7^Ev-~u{4y; Q:|)1#8(DO\3NcIDF$fTY]%Ce m&B>uG{7`t $u 3 3!oiIiii[8:p$,QW6PА7u$G$u]49'aDèx5iE`.4b\K˞]M8]T/j,#%C@ &;s-4#+g].q6At`^ˁH,@4Px8/]-ꅺUBw5Jhߴ.|{FԻ.j1ZFKE4'ۄqNDxn8y\0|yg兡ڛ&UϻO(y(%BF,Hz+0eIZRS,אv(S ?%q)>ReJ9\ i\H Sc"Olu3ttf~l$H*kԵI4 5(-WnJ1(6Gfu/2OaD9.&jypʸQgl$;7QuhJ.+WRm @eIhM~ ǒѹ5D9}jo\ G7P*'i%vVw:3*כ1NO3?隆hV}L>\.*FAvtK #ƭ`t P;3e:WgS2=^7㈺]1x/c56Q苩QcSD_(!U6x4.]$x] G'LJ؃z$]N19M;"fFi deHsdxOsnq8pMHPK G|$>&edu/harvard/hul/ois/jhove/module/tiff/PK F|$>NZE3edu/harvard/hul/ois/jhove/module/tiff/ExifIFD.classZ `[C[϶,#( eQ-#IFmY2r h4 jCB3'G ofvvvv']%4)Q64$MGބdHf!-s0$du$G 9QH"Yh$ 9VaǕIx.5';^anZY[)[,W%hw ̇]DF-Crl`+Q`'#?zu`!C/|@AC&jG!tL$F[|`됯t-336v;|`|l^B.B=$ v K|e] 6"`W"! c?*OLk\kۄیzn@ $,%؍`F~`7# [`[vk vJol+mmG~`w" v v76w!G{'w/nĴ!=G('d#CcHG8Ihmz ZWP$  -}[R$(r{xs  r84}M}l"e%Êr$Hl(S84Ø67Ft%0M 8 E88b8F U{0j$hw6Kx9H@r>>/"y 1/c$*57JgxDSB>e /!_1$ yG1w ``OYW`B{`_[B`0_ `_  'S\pVW ^"xe ^!MJW ^-xൂONz' AI dO@`|o|M|- ~ >O/H|?Zc?V?^p͂o#xm/+O]; %Tx—Rzw~Oᡄz))sǢd(\j(?%i.ꠤ*q3 zz=` @iζ%JIgu:)r\tSR$]idtn_gݢZ=]tX 8RW{7L ofuqZ>cy ̺: Q;<0̴|~TZ[] m]ζ "ÉqQR:ww㇉u))ձgA6eUY)irTHG&%n_2 *d@N]KzLliclҫoegA9 alWӳn}L.+ϊ;lB7.Kų|}Op^_pC.!Zrww {SyUT-=ͮv\c<8X̰}:b47F'&up×~-W@.+Ł.nKHKg xxnK7 6W2+IeW7BkBs"@2.XMFFNJ8 [n.QTn& *(S+P [FK3@2SV%6=}r\36X4 +5,f@3 QENDTod̛M zC#Z<9׌SvtP(&34 '6[X4]%Z"a,uI-(#>Eh2@xp4.+Uq7.-^E`&Iqoh"k~-CzCI-Zƒd )̷*3>9 -ۯ i--=z EV`@ ֨W[Xp$5Cg^rl#֯aҸ+&m 8w J jH‘LDwstxƱP]&oz#EdK[ȨǬ7)h8Q7X,5Н> a 'bMǔF%{(=ےj-KjáuܽY;z>1o]Y)K27E`3Ø~HLy"lDܡ8~D&e:(M7AK|pc$F35MP5A6}!y4$@W :vy$n5zLMbtipŵNŀ-a,0[5E~ɴJS)ZŪMTDMhqwlRX;Nj͡H(::dqg7H ű œ#xqY{'(3, !xC@-w,%͍Ku\i#@l~&cp~Ecî>X*\E+CijqT:%ָb>\ aU C"WqQ8=T v{͏9:_BuPB7 -s ÇͺqhzdN;,"x?Xl(Lz]dRޢeg]&Sg>}MƕK4HgMpe"i-UYSTzJA(=vaUq>瑼%]\пP&$яU ?# "#7b0UfaV GWkq9:ٝ+7?I'SB1JܙY7ћUz{*}ނoB/kJRy1 WĒ?tV_ OIhE_8m=UTܑTD&T'8?;UU+[ *%/Qbu$? }mTyJ_ 5WP/ƍ]ɭ Tz, i*LnKB`fKZU釐202RPQst7 +sK:>#xƗ:*}q7J%UjVs;1l;Q~ʭrӪt+J|^EϥJF{RԭJ?ޯ5_7)sJJcp5^*}Vf3 +KoƷLQRHW*xǐ/ܝS VdzǤlV)z-{5 &A-j|W+tZږ-Uzf Sdn}IaXO4Z Ձ<JǾ{)!2m+ 2@bDe q(H,xx<‡U吂CV߭_{'QS?]qPy| _u|R|-p|aʿfgU~?W!WuÿWPx})WxPF9 S ci Gk~ :U~!T~1+Ǹ/e=9bMY=RX"WxM)D,#eP:֦7M/+Œ5Þ>kh,׊PܫԨf7fQ4ׂ5,0#†|&&4ӉoD,)_PؗzƝ_:<ςQMȵklƨ&ь}=јlZ}A'cGʈ}MlڽA}И/9g_}xKCQ87Li>+ KdFbk9:t²?oZ(Qrdp9AA'ߺEr Bx:¡0sy_$6ڿ>+&BC>aA{t681wsx:a:%S)s ;/ b|˜󎒖-gVIyGV65[ԼȍGHHzM0hӔ%F;(9DZ3$FbT +/hSJ:&|N N0hT_MG?lddsd({d`j\Uf G3$T%$Z$& ֐ ZQ69Fiu8 ?Q)ڿ*ok e+H`~s+ [:)Qa(|{ަ>Y.G<VӘG^!Akw|AxdG`AOx:]zqau.(gYI?U/T cki4.:s{bM'EcjqY CA- {gH#p,ַx^Rc܃tpd%K2ټ>zŨ dzZ(~Zi86tc"=KiKaBKBѨ|]'r:keg?g]o1yr<B##'pm`PdLa,ѝx1+gOt}6)4JcKD:BO'1{ ~p҄xԄƄք_΄ބ| [&|;3Mx+o[c7>˄ l9&YIY1p꽏pq8֕6ZYh[t۬dcֶeumYhZY{vl椾CWtb3G!`@?3X@o,I~w&Asf e Q.ωjXIdl(NQ+BQ}QT@?Lj6Fr#}? cd8H&_1sN{Ʊ3M=zQl\+b3GQnlu#s6 xgn`{P1rNP1r^rC&f`b>c䂜ފce9Ky^͜yA/>D\l;M0|_11wȕ9ZCCl('c{$GyU&UWgRu9UO=F~̑sHA^1syו=%Y0Ylkt?'Osߺg]CC [h ~XqW  ŸR+-zrZ]VYU5PWCb 3ԽFcYjK"ג ]Z@XG\C(YߴLr4;͎);oZ[)M[IRʽM 0hjj[ )}Lv.2 nb(MzRZC?4LuطvSa^*zaCX:;ĝ[+U~WaREy*Utþ`7uLQ@wkRi](bho&[5ų7vo(=AwOONJ3UTWx)OIY?s/Й)s󥤬;+l R8/8 )ka߽LLAS?$e?TpSV[VՔ#HY69,g;PY?^A2e9a~M2a)Taaڼ˧rot؟Dt龻`_?[ع-a@RaNM+S |-Mq᰿$W)rabNKYNZI_86686b}녞K1Fa)t,l01E8o>kyW(;l"d'Ow>:\U):찿_8dG;}F' wNp?ʣiKh<)I{Q<訤F7B/zeSS\"ׂݟݵ)Ȍi^ k/M5`Y 7gNH6YI3m{PA>A> Ϸ/j kA?rbq;oӉk2Ua H u ''Oq%<9LĞs :1m샜 s` )+zC'm. _ z&e2c4l@Qj6f(;s+7n#{mP8޺*JgmjRVE9"]XFH] f8u \gtBkHQE- ')uenRYoMԢ1)Rlzc [El@a=uւЋPtI9 ,ʂNMp%!N(l2US7VK" bV}EJv ]CZV%C;B v`V%`*ZTQ5pnY->eHM1lʥMEZEm*ZQ= @T=je G(90i[5HIVlh0i&qr)rqpЕ{?U*O9ZC(ӥIgH3Yٺ9Ja`VÁn.VQEfGG>B`Ut*z4ĶVa`!SdS|=#le>VTـ [b[=$@UhZakjyV:m>Uնza#wLαza%2wn0VcXH+jVmj̰W='n3ܡgSϰOp   w^gxԐƜZ+2`bebKdbKebU2r JXLlLlLlLlLX\Jr#BcI2'8EDcG(W*N}7ZsVDeA]/hˀ xP<#̱% ;#6edu/harvard/hul/ois/jhove/module/tiff/GPSInfoIFD.classX x~ϲC!.`pb+e4Q"K,BKhzpWznJ!I  h{_/oo̼saC)x*3s+xgcg+x*LSpW+x(xR Fܬ Fܢ[)M8q N(8Ta`db6y.iV .%<a7 0K8l=CPǦ;dlr"61Ƒ|nwKVx$Km&[؋ ]5욜[~\7j협uvL.-Nd*b_$_2R$;ؙ[zx4ܞ'xA?yG'H vɩhtT"(q$\$4M,fX|l4h6EK͞aw3l 1Fijǐv!: oG*)w h$5TI{זRѼN8tRrvw)M%&G$EGS['YXD42G&="~lr"}bkvQ6s<]fߗ>Φssb!DN5n. M {ps,4K͕7D*{֯++n*3o$Ztf3Ec!h9Ң5n F<C-O.ƬN *g( {l~n4S0f8+V1Qd^Fb"h^6U6-+ܴo6W8G3|jTtxESHʸQܛHHr{=>k!hpB2{#W̤te"lTk,pMvAfܹ|dؒv@i(6q gJ\i͂o`wHiC(޶>{ܥn_l\WWʭT6޲,^8yˈ޾iE UOKîVᓊ#*m'lkq,ZHZeâAm$![AĦGdh<6(f`y}w>U: УgSKt3K˒/*00m6.0tE/1xU<|AAVϱ0F7T8KJ*6bs,Y~{>p a~{al>ʾ0ocp G^n|ߎp`͖x&ߘAcaώ9s}*G5wR&;kTǜyS ׸ҬXEqArXlT;nU~A1A _/VJ|/ŗrJū*QZNހRVU/h/)ef{n.Y.,: Ƕ_rcoRf|@c!pf>KYcHNT Tf^p)oIMyX>;r朣 upfOtнa`g+K|Uy@O/,99 W*aCILRN^& _zv`wX q<}7BкH"ZEfv3v=D*:M=ƎJUkz%W^YVkE_Zà/劖wU0ueTU^ NaE}}H;P^7RHƫ:Z$ 4F' '`eW'J;bȞmfdVw mV6}Xg",uE[[!lYFlQhˢvWE2[lm̶ͶȬVw5y[]y̖+Cp ʺ&7=YۢY&lQ6MtN[9n)A?aoH9Y{_Y݇R'wX_'-7G8CgA=kCУw+`_{w.juݵmt0}׵A@k(ع kkvdRueۨk]UͦM:̚Z]ˠ5ZkU}YsuTՇ̚[uլZ_1ϣKYԵl3kԵ|YӪkZM^W5kטך_Uie:kltx*u/5tZ3v2tدkGXuzMU{WL0utMVךoœ5U0RkM{:KKkAY֝8{6sm'_,|_} qvlp_OK/t靶w|@?PK G|$>O{4o:edu/harvard/hul/ois/jhove/module/tiff/GeoTiffStrings.class}|E%%uL %VzXI[6qD@{G=QpЎkpyGmWo3yfy]k>tCCCdn遁Z.E2.G d*NF^܀܄܂܆܁܅܃ǿxxGxx'8INBiAYCy^@K+kx7x xw!> !?F'!?G_!1 k~o"#_"{B?!g|_G!o5@AC (hiMf@3Y@ ZA5Am<͡5C Am h-жm- m[hMmGh;A.vݡm2)ZEEŠšAkm*=moh@~6 th3̈́6 fC;Z' mк%̓6hIh -h@v(àm)#-v$zBKZm%UZhyh A[m= 6B(hGC+@v cxh'@;INv Sthg@;YΆv\N΃v> ]"hCڥ.v9+] *hWCڵЮv=&h7Cڭnv;; .hwCڽv?Tr=QhA{О9N硽^UhA!סMhoA{;ޅ#hA{>ch?Sh?C_B}~~ShAо{h_A?B?C }о?0  A`0 4Ah́f LZ-m0-0ll  L@1 @0 Lf3Yl@880,B`XtK#e@ X@XV~`5r`-A`X6MQ@NNNNNNNN........nnnnnnnn^~  xxxx xxx>!c'O?~1 k7o__g/7_o?o7@AC (裡k݀nB>z# tnCo>xCo>[o }+[Cz'B};Cw3] }7CdSB@BACoT{B /}g@ }φ~ NA?swAO@}>ГB_}1% PA?RG@_H)ˡ@z tJ諠C_ = =} Bzo QЏ^> B?O~" B? π~& B?/~!_ B Я~%_ Bo~# B ~' B ? B П$? B_/B _*נ߀& BB1@)Aϡ/ ?k迁[迃)Ϡ _B= пWwOo_BF  ?`1FƁa0L10hA0lM0cs0B0&F -alckD`lc{;N0v ]acw{ c VQ1qm0at cO{>0aL1 3âq0 Øc.. `̇FB`,!0a 0X ` #c900V胑X c~ada`FAC0Xc068 0 0aX8 0NqaT80΄qa\80.qa\R0qa\Z 0nqaV0qa^0a<Qx0a<Yx 0~E/x+0^x0ބa]?a|C??39_%_'0~ 70~ w0>a|K?#?370 o00 _0 ?0 [l釹Q0G X:L ӂ9X00 8anf[l%̭`n saœs`ns; 0w+`saN 33 33 f;Sa s/{0?i0Üs&Y090;a`s`΅3s0L\s0<f7CapKas#a`.f }030+as5,509s:an&G<f0c` 8<0Oy2S` 4<0ςy6s` < m^Ʌ0/y1K`^ 2ü0y5k`^ :ü0oy3[` 6ü0y7{` >|00G`> 1|04g`> 9|`%/|0_C|0߂6w` G0߃>`~00#? +aoa0?9/`~ 0'__a a?a aa~ ;X |65 hXX~Ke2aY Va5k23\.dSƁj_Ct/ZqzAgp7{.'U*3g*Ew5-~ؓΊ3w:dݹ׈֥)$+~n-Hw/ lΘyΆt񚜓Q\t`:/z\nPtNၡFqPZuV8iTVd)fOWǝ^G揚dW MxlvT~@I9YWP.`u1Y39q9C0(V?M lffXL-ij';4(tO.+.0Ή͜+X3L:\1\kӬ~g@7[;SԠsk=40OOYDpjq=E uxRkWוZ,wROTPmmbl+\'qWn(1%\f;gw`vrļTG&=-:5tuj ʋ{h{8ջRtj1`[{X0/l{ n.8vI-WbM9\6=~Rq󁊟 Kbߛ󩁁U“ƦdSZ2g`uLyDihm8CZU|8bӓldGsٳNEmBS[]U8} 4{{ٝGO=-ݘ&B@Ӗr}FRMs9|jpHL4QZƧTl:/OޡT>%b5=:=ߗ.U#zS|(:TYAe鹾` r kRQT(&''X1FfR} |1#ϧri9"|$ =7vvJJgh٩|O=1Mȧ=)gOsPxᦡp2Wdԁ3Ř9]Y~E'$X/:G4mf2v,YJ\NœTxF*yi3mdqgg'2pp6'h*W]*1RaڬE f!kMqd=+Î37AGԡ_O[#'=HT1X  KШ d9Ԛ5|@caL4HdDHڔY%5AB().|w[=:9$P/䙳BgrXN9mK#qan8^.dbA9_r1EY6*~*=%b8ʈAWS=)Q"up|`ZsgwB3)&dkV:E! "pQY%J D(\Ic1\s]$|@:qvs ҅[ `@: {LMb#WKrkknm,iWU[w͜]8q,jeSL[i<(׉fi2(jXJ欶b7VgRbAz *VU7v,cf skŰ={1nbX-FrѥusT+Ĭ,D+DM]?pٔE9ZNJ=,~" /&̫o_v{J1]\f1 Kz,pocnEՓDaM!o]CAP^qRc)֥2ޡPŒZYY3;|?805f7vD,Ȧ`-VZ;쀸To7+-3(ei'~Og1Q,gx"g=Z٪AMӳj[m]cYOSlکnXNj[SPmv6f3~+˻W3vb SPi[Ě$!W'wMbzV"Ck\dK@yAazdi'DΧR.MBҨ68[j9ftiDu+8k?kWZ-3w)\Ȅ͝]yaS1uX()kS` ģ#V̓M!+#DF̉1'>bNۈ9]0WVť\8 42r{de2)385wjNTJ˔t oV5C5bUQHo,ejqQX+ݺZE(VQ`QS`q֦rX3?Ղ1fTcm#o$J)v֡c) UE}IEXZ)} , L:kWVfG;<;V|wk\Sq^w֬q┽e.V#_[c+[eζMd4W5з+(OE% aYYPZmy砦 HrbJ򂫝\US:-oK^ʵ9bAFʝRt@O6T]XLXkW` LJ5Xت#*0c*0T` P*FQhZjeEjR(ш*ј+6%ڮD;X"SRae`MerrMnyN6 ˖N^j5->g.Gtd\ܤJ7˵ʕ\{͙zszVm \*]srC΀T*^ʗ;7w=偊]2 7J'344|fTS;=o_TVA]R5N˜sE8#7Whŋl~b]۪3y%Qv |<^N+6֮:Xyuc9[U`DFU`LU` lW*P(bQ1E\5 _5hDFhLƕhmWJ1jYL0vM*0*0*u:zt  7pÞHp yuu 8BGT#jЈ*ј^z:B:ytD0U7ZmK!P_^ݰkZr9_s~rkʜ9 zjΗp͜\WWjs\ӾU~MYӾLr|p=X\T%,w徼Apסהnrn.s@wFO56?O}R|%1NvʕQ[aqOW03*Ag S}f&eK6|2+_*zlUU|*pϮ#*0c*0η3o-A [UPsnףsR˅H{J*@ܑMtjKDR$gqy_pwK\Y5r̍Njy&~CSٍUg=.U1%ZwKh^ vֆwW{otץ*qr:oQV$?`j|q!XEJ+7I\gԅם;_]T(݅A}eFJoByUR Dɹe{S~{*w>Dek6Kylv`c,udXYb).ʽ3ڋu"_MH+01cר\"YfWR4ᕫh0J `cb1nsPYRUޭ%)1N}[ =Gd_ Nֽ?k;%s!8k,YΩ`wk\xߕ:|Plȕ^H,CXe߱.xU1Ož E*U<+Tn(W _nvGܨ'~ UY '+PʐwSPܰw>~UAoU '+UxW7Lu R R R^*xS(tym*CʵAJ@ NJ 冽 n*TuASWRgyF58Ij)Y50.߾걈*+6֮:\\ֶy lUU1Wm*]v@QD(bQ1ET"*FQD(bU1EU*FQQT(bU1Tb*F1QL(bS1T*FqQ\(bW1U*Fq)"qYU`1W`m ]u(0UT` lS*CET"*FQD(bQ1ET"*FQQT(bU1EU*FQQL(bS1Tb*F1QL(bW1U*FqQ\(bW1e NqhDFhLƕhmWJT׳[pD GpL pnWjX2fQYF,#j5ˈeD2fQYF,jQ5˨eT2fUYF,cj15˘eL2fSY,cj15˸e\2fWY,jq5˸e\RGEhU܈*ј+6%ڮD;ӧjU GpT p\ v5ܡ,#j5ˈeD2fQYF,#j5˨eT2fUYF,jQ5˨eT2fSY,cj15˘eL2fSY,jq5˸e\2fWY,jo ޣ()kS` CwCk *kpg(z@WnIVTy4h!*ʿ MvFr=B/J?4!o}y4@nacR1/eƹ_2i]_SwV͵xg^]O{b `QbPr^PY{}&cܥ>Gߛ=qOSڜjP䔧g"5e\u)➑Ee]ӫ-O磊=2Օs7V#~7~){Jb*I7)}X'&~î>̮&Ů>K<~gMBʪga6U'thwN9 }_Vb5si]|VRLUy3hw\kyѲjpQSK9!Qd+EWdESPMո"D=D6s)^OdYݙ`lBꢢ)[k#5њXq渭渽渣?iw^8Rs9kjk;j= pK҃Hq8Vsw#5њXq\9K3Ũ|Gx L.-߳2l2^GwFʚ:b ZGΊ9+6rV|䬶GS]˥b#fL!H:RFdH2#e>R_ } M  Aƺ/Oo-~- *Xa0e)JS(^X/qYOΥ?syþ (Y +p:8C~{!n/gֹa~aDLI,wctv/3k祯o)\~_ GD/w| [KL+JE'.OE):գiDM ȿC֟ʇ2ķ{ᄓ,œst>ܳQzK}e%KUE6Nvmg$LSbgjz0QEN&V ɮut7 ;Äu_+tg֕tw}ЍO(OлBޏzs}PyZ[ CO+jf8bނRw֪o 0aWW%DwmDt_Gtڝޫe'7[0rjgy>iq}^э~hs%žӕ)Vc-4u ؿQˉ5_sc}WiF]S:-ϭ'өҧd~k2-gő89uV܀tL*.Ƛs&֥' OOtV<;[(7Z22.5Yɉ+Ek60lhhآaB`(NkB`}`KǛJG.JåcJǖ+_:>t|bɥSJǧO+^:>t|f٥sJc?p^_qD >C]i!pa9oe(Ff%GJt]?jج{3{T{=:=$l$hеghߙ;?ohW4iݤ]vKt& ha6YNFI4)"IX4)&f,Mj& ,6hl\-jELd7즤8=N=^7n7԰C"5 "-D:nX{K6[4(m4ΒΖΑΕ+;" %;man؉IdcA6vGXnNpK q64mhxlCͲ 64*xe7!{NÍwn[p=>alj_&j|@q0!a6ƇiG QLDŽقfKj|R)aƧن&L -5>'Dj|^I0Qf{ f fG W 3B0Rp0Qp0S0/f2B!aZ)N ab(LiQ´Sha:(Xf*ٓfo '><^})x0QDaILL)̠̤i̢@3M39ႝ<SP\pRt ͣȨ,%$)x0 )x0(x0)x0K(x0P*a)x0RaNAx<((|/x$Rd[NAv R/MAvd ;_|VRo)η|Y (η|k)Η ;)7DAvud[OAv dHAvMd;|GS@Ava C$X 8 x  D $ d )||i||||Y|s(s)>()! (cR'l/O^L^Jl/#-y]Au%ْUdK^W-y]Cu-ْudK^ד-y@u#5m&jځŨ35 {pەnv簷 {e؛"^ {2Fd&ct2FO){ԶiHtH7iHC4Nt {H["Ҟ%ҭD=[4lwt[ N${Ht{K; hN|l/.vR EHۋEDCD:i}H#a"ڇ4f/i>Bm2GNt\{="vZ+D'HNWtJ3~δWtvN5"=^+N;/҃lt=$ҹ:vE7tQM"]`%Ҥ}H.E>FKcEz}HEz}HOI"]j,#SD>UGڧ4e."i}H"]a#>\fDt}HW߾HE/iξTkD־\y WtоJC"]g_#"`_'ҍ"d ңEz}H "o1Imlogs};ٜh$n6'9žͩ}lNgs3ٜi?,a6gۏ9~͹clγgs '\h?"i6ϰ~ͥsl.gs+~UKl_fs kW\gzln_gs7lm6ﰹM w9XPZ8y8,qY4i^'%Nz)q7HӼQJMR4%%NR4i)q8)q)qO$)qO)qO4)qO )qϔ,)qϖ)qϕ<)qϗ)qBS )%Nh/)qB{KGJоR'8iRΩK!%Nh8YR'4[JЁR: $%N`)qBs ͕'%%N(!%Nh8RHJJZ(%Nh8R№H:DJP8C &%Np)qBK !%Nh8# -'#%NWJPZJ )qB}R2R)qB+ '/%Nh8885RJK'4(%NhHJ:)qB m'QJ&)qBGI:ZJPAJа8c +%N8)qBK:AJЉRN't8S *%N4)qBK:CJЙRΒ't8s +%N<)qBK@JЅR.*JE(qB%N貢 ]^8+'teQ℮*JE(qB%N躢 ]_8'tcQn*JE(qB%N趢 ^8;'tQ,JE_g%"?VR{ȇRx)RRLJRk)/@|,'#H_ E~"_H?IO]R:)K|!ȗuRR|%/ȟRc)V|S"-JyߋRE)ϢWQ(EX/'}e?Bˡ,Zcr8R,!B2)Zb%%Br)ZzXhb%-B )ZXhHHвRUR,KвZ -9)ZHвV -R, J2$B:)ZKвAR,lb()dc[o &XnMFoM Ƿ&qk|㍷Pw&4xm&オ4xm&mBF95x.mm|7ɷ5G&62 c*0E/L|=`+_05(=`&!=`&%={ַmpLg|kk'Tq=}gw(Şݩس;{vY]i*mu;96'&p[6'Zd[6'mNl-ۜF9mNl+61Qzmh鵉İ1kJM'6q k'JM$6qkHM|(v^y{JyIXz%k"vWk1w,q`;_LB{%&Xw%&X.w/w=ZZC%,q`tKܥ$X.5wn KfFZ+MW*GR^MKyRRR9.,Jܥw]zFQ.=(q(q(qخ(q8(qEwY(qŊwY(q%}w~El]`Q.uQ.MQynQy^Q===Eڽ(qS{%njrq/5ګڻڧ.^.^ϔ.^Okq'ROCپ@2}2KپD#ؾLel_̑l_LkYqؾNlߠ*oR[YmdپCw)({ɳ}2l? )3ǔY'Yg#lbs9/)#˯(3cה9o(s /a}QQ%o4ex P>22%Ϡ /a}&ex (KX72<|%/H^2ٔmeb;2wOnN^)9<|qۂGr`%9-l"gK[mٚmmnKNDre;l#gہHv"gG;]ٙv7rve;9G|{q7#)p!/JN;9lLeFΞlx o*9|{qַ9g}{ķ9Ktqķ?9N#əv9IN'Yrf;{ə˶.qw09|sK%_9| r8.q7Kp\%[H%"r8.qɷKC&Pr8.#pr8.qw9=lw$9i)rV]NNr2l{8Kq̷c>r82p9p$o9|p&/K1_c5p%/Oo6HoC[G+\O+x@+xH_nU]GѪMf[UϰU|7w YciG'PI'RVsee='SVs ee{*en44i3(w|gR΢,MMY}Pm߹-)y;)Pl/^Da{ eR~2~r5r>WR*mjʍb{ FrQNc{=x@9퍔3D9͔B1loXQ r|wRN('ݔrrG99隆PN)'Caqrr?F99OPNɓ)q4f}rr?K99SN('ErrBGپJky_?_^_ޠ_ޤ_ޢ_ަ:Cku~#Z+{V^iZy?????<Ϗh@i@/hP^_ҠϿA?A9?A9/仺Ґ:Oig^/z9|AYG#||_O ҟH?6H3mk$7I^&yFu;%tO:J(? K9wT*py \3*p{ׯQ*u* *M*[ 61Thb; 6Ra< 6gKTyoSqxT~oNg3xxoA-Tۿ%xoET`oCa*ߖ <'Ro$*{*v*:ÿ#x߉ ^L]ݿ+xwwT߃ 5~}kל99^sܯ/z͹__s5~}kל59^s7ܯoz͹_s5~}kq~5~}kלC\87>:΍OsS87>:΍/sK87:΍os[87:΍漯?zy_:Α5Wyykk_^Z׼ֿ5_yyk15-ym^~^s_g3x} |l9לm&`Nf_b5+ly_a-^sN4s5Dללm69^s9}6k@y_cksz{5k6y~^aCa zÆzZaüaý6/{|<칳Tb~W~wSOn>՟|Hͧ5/|?Tjͧ=ͧK6/|O[i.26/|?Xc} @OZZBmi(R+0ͥKmK# FBh/P_jPP` 4Bi,8%ZL Ԙ:!&B(2uAh2uChUOeZBiamՋ@V/ дF*MS tB(5-`a$^RMKCh6-e,nrM д^BiE] 4VPqZBiU% VPsZBiME 4ֆк^Bi]e ևPwBiC 46PyBzS 7P{BiK 4B {[ B{G] 4vPB{W% vPBjOE 4PB-{_c?ӣ\9= $d!aC 3@HPAB:F!Pu$!aE CHHxQGAB:f1Pu$!!j SDH'AB:)O}$|!!l cLH(gA>9υ}$!!n_ sBHAݾ%/N7䥐!/ yy%UUטWC^g^yy-MuCfyy#]M7Cgy+CmC>fy'S]ϘwC>gy/K}Cf> [CCg> ]QHpAB{v۞$̶!= YHmAn{7?!2_|Z1_ U2_uhb7 [oC{1߁f t&>}Bgf~1 ԙBge~sh?٘_Bgg~5?ЁCd:'̟0:7ߡ 0a ]t(oh+0mS*@G2:ivfv03t4Ü: ::9#ts&h't"/939 tӡ 3gNftQlŘCg]9]9't)`̹0.˜s^4|CW`.]9sA̡UUà1CWgA` ]9 6.s4t=̱ 2C7bNnnœݔ݌ ݜ9 s!̅[1'Cf.݆(t[b혋CgN ݑt'ftg]KAwe. ݍ tw=AdN\7s>2W\Z3WA`= ЃkAa =0ÙA`=(УAan = 8㙛AO`n=$Г[AOan = 4әA`n=,г;Aa = )`|# /_ F0_-`|#/? F0_~+`#/ F0_/`V0_F5 Fkڀ:^0_{FL0_ #ufm0_g `#uvs#uׁ0_F`sF<0_煑:a.#ua #u0_`俎:F(0_;`俎:FX`俎:Fk'׉0_`v#u!  #u] F0_ #u =0_ץa.#uY#uy+]FJ0_W Ua修#uuk]FZ0_׆ua修#u}FF0_7 Man#us[FV0_ man#u{;FN0_w ]a#uw{F^0_}a#Z`#=F0_z(`#G= F0_z,`#'= F0_Oz*`俞# g= F0_ρz.`俞#F0_/z)`^# W F0_z-`^#7 F0_oz+`#w F0_z/`#}F0_(`># O} F0_,`>#/} FH俾DH俾DH俾DH俾DH俾DH俾DH~DH~DH~DH~DH~DH~DH~DH~DHDHDHDHDHDHDHDHD[D Ho D[D[o$fD"m&$ $Yo ّH @"m oHͅDH̓DۼH͇DH-D$D"m(oH C"m8omH俍@"m$okG"H俍A"m,oD$:D[oHMB"m!$F"m2o (o!8oSDH $oK!4o ,o!6 [[ [U[ Ց[5[ [u[ M ͑- m ] ݑ= }DHDہHDHDۡHDHDۑHDHD۱HDH保DۉH保DH保D۩H保DH保DۙH保DH保D۹H保DH]DۅH]DH]DۥH]DH]DەH]DH]D۵H]DH݀DۍH݄DH݂DۭH݆DH݁D۝H݅DH݃D۽H݇DH=DۃH=DH=DۣH=DH=DۓH=DH=D۳H=DH俽DۋH俽qeY z COfxQ f⡿ExQ G[q(u@zA[/qEQ n8 ĭD(^@z[qQ n}( ĭGxXFaGxQ 6$ öC@<(2 OS@<() o[@<(3 msD֋qQ n mDm(@`ދqQ 1$ #)Q 15 ##@<(< #o@' ģύ@<(; ģ* c(~U(c(ycxx=!>Iu`Rc(T(c{Q>6 GX1>6Xq>iu >"cuBI>6usV(U(z>.g8EY>bQu9>.xmy>b[uB>>(^zw\>/ }B|?W~ Q'P Nk|BZG;;|wFFMכ3 xg^o(Q;zwƻx]I;)UxgN}I;)BVQ~';G|bfQY|̻(8V{ X=]+ O{W(>]Q}λ{WC]QXɻwQD^(QHͻ)\W{7 鷼; o{w9szϻw;>xӇ|ȻO{ww>}ΧϼlwSn ՗Maʻ)V_{7o;~/n oM:RBjOZ(V$o>"gOYOY哢OB?>)d >9SO)9)Q2ſS}J>%3()<'O9!3(\S(IBN(S`;OWOSDT'2OB>5 ys((l(l(l(l=Q=Q؜{9Dl"ؼϽ=ϗ,=Q(=Q([{ϕ(ZiQ\7#e\6 p9Q9.\\\1 G D! F E1 G  D) F E9 G _D% _F _E5 _G  D- F E= G ?D# ?F ?E3 ?G  D+ F E; G D' F E7 G D/ F E? *4B04B0P4B004B0Hh`F3A/4B0F3Lh` h`0 !h`4B0Fh`0!G#h`0 h`0 B#`4B0 C#`4B0F P4B0hE#ah`0 ڸi aVXW/nmZ+^-JشȅM }Z[x 7?edu/harvard/hul/ois/jhove/module/tiff/GlobalParametersIFD.classWW-" mbl?:!@TI䴥VծJI[ڦWhI N[?Mtf%LOwf~3ޙ}׌>Lfdh"0Ǽ!2 0$X`r[`E%XͰQE /2$bك#/2KL+LkL.")[Q_L^fr̓n";+U IKnH)ᖄ~(G~,u ?S? OfV7rA ΪKe鴙1͞33[,jEK7)M- FE5h`.]̌6^h7 GCdH!3ojޞRxFXraX(961`M4'@E261 9dY3tTMQȠGv w "Q-S ΩE Ε[9sQ ƵB85cf03fn ,kBw?%5Dj6ewqOjz!AEsZxh)lJ%0ͅigp8OQFe>2>e|3L0(c9䬢dF0LTl64V+E&eo\d)L:)q~-lW Modo\V9%wxSjy[eE5՘TjNbxdX𖌷GŸe;2p*f+ sj/Zֳ`Hգ`I72-55hŢYTYE:6ܓ>>%l hJ*hi=kFf\P(3f)yV&f1ئ*d2ΘȈɪiK9;ɩ2cP)gt[S Ӳ d%! Z|= <"L"U"ѝU`D). m'e.[iը +rgL_9U @&mW1JSOr+ɯs=噣O%қTZ<{QƔ^aԼ_Sf5 K{}lwdzqmENP|2ܩ8UK2b ep0۱mY*˽:ؖc̲P3ʱP=_b/pbt# "p׉y-m09Z} c g*_D2N 93ٽZ׉ ݊bx< ~YRCrޘ;۷4BetG:zYێ4H" 5eYmmKFOf $oKí tF 譳-*vPLvQKu^uE/~zG?}қi(rd#ďcćkQc58qu^(D8N:{7m@4EF&pMsL9?zM H{hhxGzfӾ}Cns$h(s -;.R%#i =ml›\!lM]euđK7pYG;'*8-"qi\Ħ~/ӕHp}=twx ִ(`F+8zI\E7wqZAnс8n^AG&eqݩM^ cQC ޢ" x[91(3'j!᳘"3WRޏ%R.oO]xZŲ%g&o0r{ODDJOZ m^d}g%>`/\n/PK F|$>U_,/edu/harvard/hul/ois/jhove/module/tiff/IFD.class: xTܙ{grC$dH0 &$f8$#LjUI}Ԋ"PQKVmյuu辷T̝diyg_s'܆egpKoTp 0Q1V;*X,[8xHC9vY>M<ܬE[ي)Ka^nJأ ܣ ܧ>WTxK2~YƯ tkz7ۢChO\2E4rWD#D(XҬlSD~zmhDv6v7v- -A+-[VkiuV7҆%"պz{} [`U[G'[ZW"(N[wx3`Gpimhl660BFn^4pڀfZ|bimlh[S"VI -7jCޚ@".CpnmtCR}EcqZ_;״ Zi%74) hl D}KB۞iy-$fhmc8E8E Ŷb5}C5pƾVC":B4|Θ ic,ԃ0Ct"_W75کlܪ(b, '#W4O٩v9zDa!W6iAZ1Yf(CK@W~$r% 5nquIy&AL1wn bqRV~=˙H6ѺMH IkYD2*aL yQS cb uwׇ派+&z_sU(5?zV=2|mT7zi}XhGZ,6*PP?,l&l9yFvr?p?SQB>;mXJ uk1Uٌ1.#F-(HJ.ɐZ'CB,,)xu㘨&qYLlxt i#lCtݘ 2i0kFz̚ fˤE.<&Fn ~"ɳCƘ)g8|v/P/MF*TLM+UvwE}%߸_WN* wU8U8*<p;B9"n)wdܣx O* xUMx]hPVtҐsϾj*dg7Ux^"~_U|)bbӨi6j9]EC(GdD-4PIŦixo3C] юz$~(/қDWK7Mv*!+S>EߚHt[M{QeW^r*/S2>yFEuLFɜռX;J_,W褤4b]2D2,F[:eY)lecqYiO~qW4do ŇΠ_USz.tDb$r-қ裂ԟgL}%)3S&L_Ε8s~9Bܒt$f-R5h"сpDWW/LC,nr`1p{%ebJL I]&GqGq3{ gI&[?` ~&aG~ ~`jM._%1tE#t1%HtBqy+yu`eQTVkG: Rvl֣`AtR>  AQP+AQV]f<ߺ_DLK#RjڒV/gi !/~kY9~?2mONuZ>d[8vo| J+?]W s[ҫ=Vpk^(%6P7ƠxJOb&c&~ q,YXs&['Z˺HQ~c0-Ґ/_ujnsJI궏u^}8L9@~]^:yfOA4s`nZ+[k;ocpAp+I?95[ ?+ןFH M2weyY+܁uvmDT;GzJne8|!hqY`[/F:sq \4x3מOCǠ%z XA3!22laZȧP_+fyw)!PN? XgsK$LڳI[;.ǖ,bƲ)P)z@; KG~)N.ޯ '޻ {oԚ,)c.|"RG! ["nYhb9~=aXL/w!J,MUozyh-W{n-/\Iӎ汳cI ]e`R/a])>N2\|M=Ɛ뤙4ɑK.I> WI(uӍɎ*,@91s4BaV~ncs+}-Nڬu$5Hj!DHa)(7>6K 66SπyXZmeF| TKbD[ `< k)zY@jB1 Q%]f ,*廩DR걍5 '.s?,'SK8w[ryRo>.*ne 6µF@%St7zCEg̡D*o)aSwr STzOKe? BtY.Eހʲ#KQH#*GW/MG!ĝ&uSWAr؋|wPqs<&5+H3HI+ | 4( ehrY"; 6>Ѥ1p3y^2U! P8̹OY%J2xN<*H.23Euu:LO[ M)!+NcĬѹuuSP333R~y;<^4%6c6_A|zgZHb i >Aϰ18s x5GױǠ{7@6e$)*|NHHF/nK廟h_\hja3[[٭YE9$K@7=rdJr.YDdtOR;Sv̰âv6-C%I?KR lA@vc1f5 ?>a.i)W60.l$2'&yn6rdt:F1$Y(wLzWх15|Zv#u3*^fK?w18T"ӅGBtoKPPjJ(}gF1e*-۟)J,JYRR7.'M!5ƙҙ1Y m+3cIS*:zpđF")XzPG-H xü+"Ip}̖]lL% p9*ktMζ*4?6\1Zk%$= Zۖ|.Xl6߯ M~wi%hvK`]4jVW"\C͵5k{ vvNeghT\NM4nQu}\׺3p$PK F|$>UR?edu/harvard/hul/ois/jhove/module/tiff/InteroperabilityIFD.classUmWG~FuM*F/5h]vۘ$$עX ؗteXr`?I-zz`hwvg޹ dL  K2qW'|g\qȤPe!6_JH"aU0&ƤBn :hy؍qߨďD4L#{_;1|Y^"o?B |h7H?ÓXH^hb p3$h4&}`lrXl&obw=J~p5za#idMÄz1{_ja"3?/a,#qzރߢUGr&PK F|$>XƩ[9edu/harvard/hul/ois/jhove/module/tiff/TiffException.classmON@uebPhDE>r?EDࣀM-vvwfgo1Śن6ޭNө4*9%l.&q".3qe*Uf}IIsvF(n+#"&ׅj*&nI]HaTkNw(]~8\`-pͧ8bsP kXZl޷lV4`'btOK_PK G|$>+]Rl6edu/harvard/hul/ois/jhove/module/tiff/TiffFXBase.classToGƻIb %)Gd!PI` 9Mquw zhsiąK.H% PUUUfJP+}o?z `#x?>D0GF%0-ᰄ#>pTI8.ҋv=,ND3 [͹l-g e,e`@u;e `3 ZQ*WrŊElDg诵 ֬%eqıc3Ԝ[y` [}t^Իz{׹Wכݖھuӽ.[ﶄ؍^!f2_QcVk CD'pGxB' Fа{"'q0ӤpY si8+y,h8 pQC^BA娉,wowiч]R܆"km, "up eμe7^B!r wVE,WLORmri2snk<;}uZSipWo©d{t]fzo(0,?auTnvD-m/ Arbv^ >zvR?d1%K>'TDUI̪:L0V%~$&K#"DqB3"⛒Pr˴CTçߦn4u눦'<sd5l`Q^~sD5[Ea9"Iufe0/Tc)f?қ]H%+FF.N*S#OSkFݗJk)j_)a;DPK G|$>dbXI3edu/harvard/hul/ois/jhove/module/tiff/TiffIFD.class} |Վm9; $mVb[e'vŖc2wmci \@]PPh@ 7;;W!/vy3z3;o~!d4g_E_qȟxET H@%d'|CM-AJ čD(4$HT$H2d!F$I|$^$H Ib$%HJ!IHf dH D2IyH#Yd!EH#Yd)eH#9 $+($Fr4cAr,T#ARďI=$$kC҈ I3 $둴" !iCҎdH:t"لd3㑜D$]HNBFI7$$H"CEr2mHlG2$d)Hđ #AN$Fr*Ӑ $g"9 HAr.Q科ʟɅH.Br1K\;}>/WWPUȭk׺"z꾁oD7}4rf%(oRPOQϩEݿH1|q|4r}?u!~Qu?15My޽;~ѓ{~F ?`?Rs<^o/S+3uר/+u7M~ߦw]~ߧQ!|D'uP uϨs|~A_RW5o UUpQTqREꬸϊBJUҨU{J^LdQ%:ߠJUrG|xR@)O)E)JURBRDLJ9U*2*322*2*27MZ PMG\@TY$Blae1݃oK1e,ST9"M (+ңdUVh$Pe URM|EJ>4P%.Y(Ҥ.*MoFJ Uk+UڨҎlJU:*r{DKTJ*'SeU*TQe*Pe*q Se*;* 4N3L$gQlCyTCrU.EȻ*PG\F˩rUUT5ʵT*8rUnMTUOPfBQJۨC*?OQv*?ϩrU]TU=T/r/4N hݳgUҤsQ#r~dP !$|{ɣHCkT~MT@[^~-JA6|q<.Ƿ?eH@<$/] W9PoW:WG1*7!|ͿoF5Tyi:e+˛3dB[C]B 1} o"B\xǜ>F8 dTr>@OA ɿ /Ŋ9謫3@%J1S>A)    Ȕ0 (dTB-|æ:÷)s׍PFFLX\J!6Ŧf)Ws(~GD3:{?EAB{ԋ$SLERI1$Hʐ` ퟆ&$T Hf![h%lUH+#Yd!L H0ȣ BTJ Т4ZLYɖ#9Rd)t02tBB9F LsFgtJ$shiO"T]PX&K)]ZPJJ(JWQң)ŰXJGi55R꧴zJ( Pu6RD)4Hi )m4Di* nNJ7Q"=(vQzaJ1,ݔPB>JL6J)N1J)=!JSAANJwQS)=)=3)=ҳ)=s)==O^HE^L%^Jw()+)ҫ)k)Rz=7Pz#7Q=JOzBoHfc.olKD H$&6 oD7IԐuP"i&_c83N^gI`:j|M-Rr^M rJ!ljmVڸ 5@`cmD<5Fʄ PR7[kHZio75X2$ ^մZL3%jc:YF`$m Յm!@0k:W"Yz-=R72*6MY7:Z)Ьklge\_G  6(Vg"X"y-f_kM.PjD"`|  2`ti`PeCVb=*>,KK9oo!DrD~M{ Ȫmy50+,ȪazC{Ss!V_sZ\c}6kke9.\k/16m壡HIk5mA82h#gD-зZ;kZMXȱ&]q|umfC{·agjVV@ d% owy(!jak3iTQw[׌N SZpZmPfJ#GuX?aؓs;fgm5XS1+KM9`)sT*БڰQJ" P R!~'d-L3LU(ZֽဉJEVmţx0[tTAW-% `f~g@G7F%AZ9sWKll 75f.yO/l]l 4;]@שAQH2MHıĕ @Ai;22f%Mv 2^jno{\ڏ+"Ӑ};:=vd^t|\|3T/xzGOq?V1ˬ *8@j[a&lH$?IjԚvN%! ( 5!,JU&t1TWXK2ŶL-~_[  YX5{if)l_aSSՂ3 G8L ޝθfk=i*c[VV} >$oe1@ LSOM\ h(Q(PYPZ2iU1h(db=Ő"PWoAZk9Kwm Zϼ`U?^^,[&[ yo|ՁFV?ΝmzYl9)Ę9jB\Pue,BPF?czƺ<ō"\ЦDaD̄Ň91 %z'`m J0j`@7YbcDa ԰{Q Ӥ׊YB$a`P( P'0Y" L؉֍Ƥn ݼ%ly4qBv ]tZ{E`e{Ot dvNvbG!ڥF Ÿ"wsC"m6BL}CNjB NM6j_mG"aZ L4zڰ ?P88;pOx`5,Ja7Ǖ+#FsXdK5:qW-0+AtRAAc4Jm;cM\Yx*Ⱦ`;DLCg#g[1ꑫZ\=Q_dkku6@QĈM<;$¥PzXjh4afqV2k)Fٍz(1tf;&f*B]1#rs mJ Ʒb;n"1A3`D5 k4"Dⷺ dT7j`:׌+ n~τ qg02!_ `5]Jַ0 ;tNR&ȓD4FzFvz/EN,jHSd8>?k 347i=ؼvEVQ`_l8=2< Gp46>b=сQ#=}Pr#[uPOdZ'==20csFCA=ǬсPx`V3NxW5ti]Zbx!ʪ_iv[iԮޡH$ ,c-fÑӺYuzaFozt ⽑n==]&^dpO{86 " Qڵ%Sё0jQ%v6t GwDEm+:- ]\-,37J lrņ[U"C[#-t!a!tm[cCn:o,H @S >1d* k`ȅHS͉ BSF"6W y }c\l >!f x++ҏm;Cyهq(HKG.F-fK{VNcJכ1[5ߘ(i?'X/<2&iJk Vvs4gذ[o7]īk=[7 P5̓;B׬Ca8㐌Ig9* 6 clYύ][`0nc>bKd urTp oZ$[7AX8f&FHe)?]x`xIJRw-IKq5V%ܥXvXGX(fڛ[MŠR`Enc16pWn äm3<*f}f5!hAآi=D~yg0U,~ct K7':&kpd: 3w; lӷEcÑP7(>k$R]P],2h @OlWMs[jTq ʨBoU)4jAg2rbH\2qV @Ocl.$am*,Q%vH*|u>3pU:&@og#J2 I JXY`mך;Jm͝B sqKm;#2ݤsvܺiB((JX $.lX] %`&nZ degu1Dzm0O = =C6*{7#&^CF1>߽̘Z^P01dj3zX6~&ǛIRwN1I!Ǥc9؝P4v pX"@C@oM+$b̈́ 6449Ƣ`(e]67z5b\$Fmi y M]9l݆8̗Pd;R9lQ,m;kmHV@[a%mptQ#TC8PiAlO<7g#l 2|!+,| 6^+Ϳ;bt8s~>ӿ=Aզh[T^4[*6KoI \XP +, kJ,̩̽qy,)q.zgEAI}zl,]W¢mdӮR] v]+rBiA4sPU(#8V}{v|?pMS5kn mah\u[ZpzB:S?VO:_KT6.C?VILu'vPRޮҟҟH@r'K?-ѭ ؎s#nHwEr?א_7-$c_"={G$o"#" HFr,#q#Q!*|[ |i$ϸEty*t=ʳB$,vS%H"\y,Ƿ#WHB Ʒ]1ɱ8$>Hj"#CRIZI#&4ЌoA,P G؊$jCPB'@\ xO>WH^DŴ$eҏ?<S4LBޗie(FTEhPً 7UG{SΖrqCίؖo{_TXf^rso'~S]7op=d79}3yA/kҞɲ'MM}AJ>oO:KC'(*}>WT&x#}[FҶ _a@fYKΤ%t9pLM}\ oC;oU}pVJQM<˚tw6Xa8sJ[#;䣶h?.FY>'i! GXLEvlnolT H!-fS"o VLў0[oOַep+Eퟰ]6}4EW4YV5m轃}n]ϨnDfB_Od8 3vleRX$C 3uz'IYAe0r&7&jdR؄ҷ [hreld)%'I'@x,ڣP}BhSؐoW4. }f*g)x%y;Ba 0Ư0 @g&~-OllSd6sC_o$ csU&_\`(HyQ0O&|H>> p΀h=:`}L>M^#;Mcslh=#(e_U]XF/yv,JæIԓYNE]M]={zNY_ jR|L,p3S`铙b,v18#zFnFҙlv/Չs'?ϪN|h$9m4gLt]?g5%~7W]`y* R_ѯU =zGR=zq:KU#ǭzU=OtգT=YlՓis雪'ϓz3SQZI14_eHarTПHf`&YHfCq=sPP陫z< gr<0 cqhs!Z9.Fޥz"YYz@+<+Uϑw·v4#?zxU=ǡyHO ESz4 YdFLۄɚ=Aӂ{ZUOIv,|ۈoNL f$ߓW='xNLS`ӥzN@ߘo`m.I#=8b4WpOl'C+XrQs1- U=ݞv@l瀞,PWIWVĈ.7C+MugWMS:PG_}DUVV/h\Q@?%1~?ƶ,0 m ;HΓT軩-"(nO}S/XѦI;Įjad4|BY˺c7b)Fq;`Okf4Jzg8Vnjn< DaH()M,Y60,G.lU?de,e6bTfcPb 8apWnPZEő7|Kv8ʅXjx $csMxh mbL`H6O%ʦb -PTY^\g9bM[x)&ƚ 1acȀͼ7s8PG<4^46_`EVU< le;/bx7jOTQe|``ВPE"lr ,T]`KؾP["sSٱ)ʬo5Jsbs Gc3ߕegæB3ux=H%  1nCݰ%=35 PॷFAD|[:o}vj;fFSY/O7ٕyu+2TWϝuon/\rlLԻX9\|.Cua~cӎVd<2M_QVN։;^ B1q{zΐnAᎿ* javOM6Ykspo'C?^v}ɾV_' Ȃ%|v_ZpoZsgX<@evlu0?c+v-9pYL:ۛ[kkG@Y{ ؃ؓ|pdl@ eWvs$d#[xAeüԓapixƯDY&0/&w2HoYJ.6/Ja7n.. #*L3"4ty%mLIg"t#v-[=woWA7c}aܵePc5jd* pJ -kMTh-A ̤0]v.=[0qA:Ma,0~2n,\X[쪙ad%\taHW bC(f9V0{J 8Hϸ#HZͻ!^>p~h8q7PS 95Zp4^[FJ`"C[!y2/?L AdduO)0lbOAwzuZЕU32 >i`}s5`8MM2IӍ9g嵟pwCw 뛍SMho8BhH/z7Eu_RT-(g]'Κ-5Fqs׽fî<1b:ðqT-Ftb m7a(-~%Qցr>!Rٸ6PJGxǷ;oY}@ 0m _̪ow2<. zw6@fBduE 3C&f"3`9$.*X4Vv C5-n0kvLBt~ ~mC#aSK5m֗L+0fgbS|&8PkTv{V&ؚ@UBEvAf>jl|>cXD!ެsB0g{KSKk%f(fUYp$hb_Nomw_mZ;]ˎob=t$e^vT8ńHBgH2> p+O 3< l\)เ<|/P/K rxW>RG^%Հ1X Z5k\'z ^+uYA-^U!mnAw&o|O|$0-#^o'( pp O<$8a!w x7S||3||s|=>E%w||+|| k| z7F7 {/YoH?koOL?||n K_"S"x/y/uǞs+ǟ>̟UG_ Rp3{g'/  𓂼_?%?-A^~ջ=~x?_`-?&a%޿IN~ME_ u/~S%-z {B}??7?[nWe #1'8g\-t_ x_ 7J/r_CW( \[ +B  x`UGBW] 8G+S<p ƳTe p!g x69^x^"ी x9#J (Zc>OՀk\ /:nZÌn^Cn. 7 p7, w $ao-B*>Q xo"!qa<`!sSs qn!Oـ C |:X'!>tl|O,ċeG0+~IW x'`!t|wMi0Q?g^G!uF_q ,ī@WDžoExq1[| `!u\ `!u\: JB< O|`!>v>/;)Sݥko=\d{A9{>?ǞluÜQ|?z=ßy<\OyOq\Y|ӿ3*{?;./{>C?̟r/߿?_ ~}|/W\k$=%/2=]\.s}7*Ißi<]:]aL_K!p˟y<}>Oz\>˧r\qz2Οq9Vty{gsسR˞U(w}ʄWz&Y=Iۈ[lŕ[o5GlS5Rڊ V[q!|(6[qۊO6mئ71&nmSl1C۶IFϱ0ږXC|mɗ%cz|[.C|x!PF|!-[.4ėVHb߱-iFޗ/5^hB&l>_m۠gklVlZێ|:6 s .5}|Mj{>߶beF~`<#Ͷ^coM}!_`o-Bh}0Rȶ.2Rņ'%k/5ķ5}!mon;l3 ]6/7BF|!G_i)k#۶L&lzz[1_d- ʶ\kg+?`[ 6٦5ˏ؈; M1װAqqG [뛪%70z#71=F*dٔq"g Oڙ{!NR{ɏ'?v8/J:` 'EzŸ fB L4&JK=DIܟ"cd\Hc}NKMT8nhVԹg$(j)HR,p\c/c䯐림0$CE oZEI%߲P䆷3/c]({}3= B9tDL   0>i*,?E¿M.S?.Qa_Sap?SdQaVB|bɬ68;Iq5~fiN[W%\xtI_ul/ź~m*|c*|m*XAGee٥S*/U^^Z>kVEiˍ++aa0:<KwB݌)LQ X)bIIl~t $ 8s$GxDwNkT1I#BIJIj\8$~R̵X$Xm8]6Qf?ɜ<~Ep$UUT̮]+* K疕U._ߛїalg3 xGYmعfY'+:ILHkc"G >;sٷ?>+/\_\'-\2R 犴̣U^&HӈϫI5$ &ZgQY<(1#y==3!կH}RJva;EFI)vFoژ4&5[^sE kQeLZ/jTcFV^aYmͭ52 1]0!ebC qTppDǘ) 5\cjl5FQ2gr˜t>sj^$!sqKaeL-@ ٲԓR&깹Z \bY곷bR-<&m-{,K),zizn ЫB=,fWG qʘ4$h8E I *?&FƤ;Qcט[85f=զY]!4iUvD=wz , {={G-3S`U&>+'4)b'49)QOM7 v)eZz{R=zYt|Yп- RDKzA˵.J7-AZz{ ,KSXzIw!e2IW=DPCW& @R M\=&]#0PkK>wyˈJffyMHp~2͐*Gg * thAF9J( NnҋRD\+5d9kr%%A"܉?o&jEE9W1GoeM/?H-!_Yÿ{HyTl~~'}ar~A~ڼ m}8as ,C nc]< qȄVWId!IN5TDeVi/@Ӂ'[tj4*lYAfyXq5zXZ-Ƶ5GFZlگ'$-!A(ڣVj]t+]$Kk}H$V72@%ޯEq%>u@(oIĒvO>ZH|E=1l+5]a+++{㲲R<Aw8(@N(r>]wC59ה`_־҅+d ]|{ G J]qKI=䕃{z &aЯWxYRe>rQ\(?`mqY\OUU8զQ#%sKdP@W&?C\*mڦ*:.Mk[`eѦ-֨ԦeBvudZq[Oz=QqJ+9J"C^/}v1/*P޺Oz{lUy1H=)w\Jx/FV6~Rk0w'ieA0(d"ڛiB&9:*vIPq.-T\K>6ܐgLXeJ?iOCd.Aqҧb%Nj8jWz>zt;ldt=dQ2G+]LmtQs^^UJ*?<#MݿBjߊ LoW,/,x3 o`aUOA=0VdާًgB{I>a/ҧz/ ~gvJZ@yѴ]+Yu- e.2A'Ux/ *n6YIfo#l73_S t=㰋W;CЊEi8H;Z+>(h<`l(YkWd[516% K"ųtwB_Ĕ4Vϰ=Zk j% 9ܬI^֢{yY~9~͆2CWhE76jECbP88AR'2АFIcsz 9Z ;9‹QRe3/9\pi˕^Gɱ)4]2p3o$ Ď.C ky’CVͣM}tm ;Ц~v@a%Sf)=Y[kN8 ]NaH )ڔAUGG8Rd_kS/f&uڔٷ&H2GTM9%C *kXA+kriz/ i W{7Gd6~ocJc*܆߬W=jSTȕ*a71%+L=i uQh f -w'Z% ROaUX%5O+hhQO>1@5fѼ|FIiIkޟFEjBИn cn$Xä6=qiƄcfr+lsNҷLdh-g[ݭ!.\-ڔzRjFSz'{B~=h6 ]'V` >oU9.J-%XڗGjyJ`V_c ǢWØHQL8Ut ({qz&GX׍B뱛e6Eͅ趘ݷ(ؒI+6ZԦ38a)i{8A{Aک~d^m^ k=[o FHHHH0Ȭ0ISۆUsU\5CYP%{]FQHCLCuTm 06j9sIr]8B4w6XrNS?lxb/e$:H զ$CPOJD-zO'hʧ`ܰH=)os;r ^y(^{>^{7ylO5i ?,N6NFf-3fkJИin>M~ \`눎c4vVv&-OFWQm%>mcmVP/VzD<{AUN0^18Nj4y&9V)Ȇp5G |u k{A62J:ps4ha͇4tV~7x)FsXE {74WޡGi>Nh\ Ƽ^k_ -t@5盠pj^Ԥ9Fɉzڤ7k[SV9)*NOCPs2`b98ʪ7Ch?ƙ5kA,&h?v" ;7Eγm @NQs|6䨵'Gvh' z/TGO7X)wjgS;-.?NnlwjM`”m&&qYNIew&U K'E!o\4NN$~&]Fl&4B-Z5+ln FԭAjpWs\ә6q^w'k vXFǍvXD#s sMO8@X$*0$Ӿ7fOҽ󊪊Uesʋ+$N$\ce@_E~UC ~ET8K˧ 񽢢ieCsϨVצ ]_R}%`4~h~ߦi +]ŷ.r=Bks.W^{y*ƻU:Ǽ @JJx]NKaSaQae)i4xrL;N ,9ly| @v^^ċ=n~!^{EŹ99^#k㋴`& l^x_~~WJT^56vbyYibQ#YL+ ySa%QrV9%磳 kl'\Ķ?b/lUȹ[њgؐ+ӎ8@ހ;=Kwy@In/;mokr]%Ck9gArWO |1`q!0!}x-qTd&X;{>E?P C4L$O)Y2scH~ :{HIkԐ]=H@>" f |s, "-H,J[ŀ/dzDWڬ ? V˫gy"C$E*   T$ x$ DH1mX0dla":W;#FCC2tH@ҚZC7PkjZKo6RۊAjNlAYCyZe#4#?R67@j#62T\#}PK F|$>\97edu/harvard/hul/ois/jhove/module/tiff/TiffProfile.classVWWM%HBI)ֶ(DQJP%$l Ӷ﯇/ S=cf)&pߝ;̽/9 a .\.9w\&+^%EBR\1BqZ) %% VB4!PU26XN:a1eUbb2*AMI'QPӉAŔ!M1M,BE3_:2]4i)i뢢eN&"4FcBg }B'"pNOI6Ns ŗ$ p2yn.Ҋa6\<*c3Onv$X ^==r݆y좈ƒ"Y5bhF~?;*lYՋGt o3)U mK ;#@R؋Š.T<4dYq=l6U=7jKSǻ{) }al/ 7߬F4'8Mb4FA72?{}?R8 e ?K?A-]zFW hH^&i lدQ;PZg4۶/9?=/Kyu R4  ǥnȩ9]#y0!qC1}oÞ>/߸ٝJA܌5b8a=׼>5= ; xw;\U뮋w\ yøkoOivH^Q{;oHV]T~\W}FkSOoK]{ cx[--y;w6HwI W ŷ=ox*0]H**NV<9;=e+WLl[t&5nwR{p8t'  Slt(.pa:5qĽ\8OU PK G|$>[ӎ7=edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassB.classSISAL2& A1 (A [.jH'"g\&ȯ L a+ݚ;P{  WgF{oOP6mu}2ս t6 P_ #1:L Q_d W~XiUvPݪzd;!Sf̢?|tfͲ/5>(D<@Oly-$lA0*N8͂Vq6PK G|$>Ҝ' =edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassF.classT]se~vl7m&-Z44 E`Ԧ|m6B M w\8#\8֋ 83NeCDMKg@;>9=臟ƪx͏C pT1$}؛`:8֤Jl'm>:sS,βxSzŻYSٚQ0 # 4@i[wL`BɴV,Sx|d7%RL;qdoc te`ї}lH)x_(SeݶR8|HP~ 8O4\E pE>> Cװe yC ,|P*[XYT[eBMua+p44Y-0ݶ6%p腙cΙ5m+]ыƌy:ڕ^0n8W=Q֫D֩$spO>㡟 PnJƦj)tN\)láI#yk՞39 =s1FA QFeɨ{lZcjn Ϊ^祥vǭ]*aۦU8޷4oFSf!fQ1"-:qa1y? C%ϐ7vLϾ@R26&̎}?N9L nJ$$+*9FPMyxBxOҽdt!8_a(SHO xx(}#299erJX?}* pb!2smۅ|P&Įv\sq눻݆Ɔ\/ ,eS#"Z{<{Nȃqi}[/I"vM˷ NzŵQk 't!ҟ<@)\Et&Є k{&-8E69NAIӥ{I`/L*8`\DO<ѱOH, ">%#z^ PK G|$>ok->=edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassG.classSISAL2& (*Kw nD 6$83A#ȅG.*˲UIr)ׯNa2N0:pDE_ Fp ǃ?/a@ <8URq!4bXw!OePvA0D]n\ps]4LⓢPYNA/L6\q^z.L{Fgng=2ūs) gTЅC(wiXe7MOu{<PR prh qEU)]ujHK02&$Fs6/za=3mvKbJx=д@ju91O>\7Ug=ǰJ)%_'s@C;)[ɫbKO,L337'_On.{"m,iAY^@&2SJ>edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassIT.classRMo@}8%YZ' U j "8-:^p`o*p "q@p Y7=+}<>p8k✅,Džҧ.iኆEWM,1+c1)J|PɸY E e8M <Kdm  O k rW7>WM,ۘ CxJ=Rq XqSFUC u _uWgYpSjِY}8u/_hqh롄&rU!.⾦gTA&TFuܗts pGV2ul. #Rv$#{B%yx~HXMS=i:͒edKO` ȹI8Ah׾n+ =޽G\s]$ dƘ%ca9]gQy*PK G|$> U@edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITBL.classSMOQ=@;H)U ~@[tA $6iC,̓NiƟ6.,ʅ` RIn}}>X#?05aq;3n!b֏9{/,vѻ(QLB\Bt7!fU#횮ٕn,ly!ZЪACjUFPLV桦4jGuq.`[] TBRBJFSusSQ+lT-gӋ+Kl:YX"*۴ X}>2%x c28 +#ub ;~*mQ X_2Am6&k[Cԡ=@~ھhGAp@bV]);ު57|%B`BA&;vIʴ Dc7mKml, ʩIbMbqs'ZJfcչMôv)`MY jSǴ&[fU>'ﳑf7y@0fބH֭?Bedu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITBLP1.classTsUni`mZm+4DmjbD%M7qT|s3x^x08oBs6(:d{s=gOkgp.ƛxd )(fTd?ľY Ca]ekgEfK̖V>z  X\$SJޭIq ,ϒ~a%ݳlr&  7mݵ|^ݗzӭkoO7זSwʁYvlU̻Q k8UuݨdW z)74ܵťBJ*cZ {}+5|a~6`h46(i75Ub`að%W-rM7*RN`U3.ݲ|hu)f!}%@p7utz9,,0џТϟt_%d DVW6-~duf˓o+kpJ 7pS5@z95N}cѳs{r%뾴];d-2wu&]M;ݯqQԬS;.mzkn5lұ&4ʗHcX#MM^p%*gq xn!X *+yw7/BTɥ+ ҬI9΀|#kktbDw_" AC g@yh3D7әm vLl)9SJdVy+L=i#~@6#:t@;hqG,a၇VxI).E )ŝh|TC CXYdy`F1فJ,QutFqUU^`H 5/PK G|$>S\@edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITBP.classS[OAv U ze"}dMڐ fvqmv c|_0ęnr9f9}*"1A cR87LqK4fT<+ma] t_$Ahl`]Ih`NC2mZoAy,hXĒXHd5䄛h/`Q5*k%%L2]h:dRv y\=}z@uzsV=μx/ EК%i-:@'1.`7s]n,O7DJ ۳g 9v{c ɑ_iD EMN!A>BLwt䤘 E88:{u',HR^\! 1,,_!d2_KcrwP+>A:4 +5~Eh$ |PK G|$>g)TZBedu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITBPP1.classTMsE}k}`؁8IQ` DLDKVb?L+\8rɅJEQႪ?܀{.޾33OcO.M)M6.!4 e"]ef0ƬQf7&; *T+HoڮR$+^[*"[ͮXw`;侚ە Pm9gîw(׎ianL#ϫIkQbS9`inofeVy)g6K7Wkky▎x]At6 hn}`KGd~Ȱvtcf̪jSq:,u|pdqkGܲ+Xwi<':*CP0qT%iG݇Pp;F#mA'ݑsF.G%LM~و~էY9mnx/HfrKdV L7>eiS/w(VH:'wW7o=fix 'S;?8tvKOr.U"}R~q, 4o{'ݰ&z|餟sh ו~g!EE,N!PD{@e x"n\:#E[(C&{@Y d Of'G8L`\F1$F*xgF)RZ85; G41ԱW;DLNʢO|$%oM3OPXJPU0lX_Bedu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITBPP2.classTKsEzĊ- y8! ,ec;`M*5҆ծ؇  G.p@(*'T_Qtro{f{f~_`_<.M)2;WT\ՐE 9<CGl]c`:[ uغ>Úu [cIJ}ے 2,В~c5=l _Vhtw$ mõ|Q=Fm40wno>WpekTco)80wv QܮŬY..\]X^__t9œ u|t|m% vt|ʰˮ;:V 85Tu|p`cT-|llj+ ^`鿩wͮh˲ DKBSEo(Ґ3{đ0lᴍzYN{:ݖKF6?G"yѩY=uoGv{}uxU&]:nv%i:H:1~FclAz5뱴];iu^P٣ \ RΎI/Le5EzImTm q1ľ6îtUN\Rb)Gzezar5Zc]A!R,+4YuU(&tscmWL<E>?4_aG1SĿE"dBJ0ՇA,^=ՃDzh$Ȍ'(?I(Hw6#( r9 > p.7;@edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITCT.classTYOQ.vaPl+օ:BdP&-vpfJID/>XcO>x.q :޳}goGYA8CG3"㘂0F AN rJ!!#qK ( Ɛ YeBm8ÐgWg4,ouM3n5Ѷ5ՆεSk\z]fw|\3%S22U !peM7r%c$W+#t1?==V1I!  GyLFQŌ ".,+*[dTy^GpΔltd0L3CϮMsq߬0jmVZZ>C&3+ Jiq AjwfsMJ).i"\6UQ2e?h[4 FnNSzKQ}i1Lt{0)>%IhM+-F5UwPrlǭvkCM#d`C2ʗ`Uvi7[Bedu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITCTP1.classT]Se~^BXP(PkUkJAd+!l[)~̒mݸz3x/LgU3_$ >{w_)9|ޏ70LTIDF2ftk 9g-K,-̰°mDVmHw[c~Ŗy`ϭUR7eXޡFUwm_JUvk+{C*=YuګJڕwUe\da^LǍb~:30YZZLhx75\e[C`i &Ca!`ⶆ;{ 2|ۿl}̚Yfu]f˜ X}EĔ֡W-g_/L|K~UlͿO;nWnezx?Á @7/Hh|x;YVۮsz I5I)N =e{tՓ'N\k~({aߖu𺞽oK߭6X{Hwm P AQ4̃hЊ/;It t|-5jԌ-w KH/GwLc&JBedu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITCTP2.classT[SV-cD1ʥiB4 F`RJbJQ/JRB/#cĖ\I_K@^Pg&szٵ ~h!ь>^=@0Q3Y\c])HŰEV K :2 CVKk>K,`iaaK*>lَJ$(Y"&}+-}[d^JJK?˫ǭھ~=zíRjU7v7FKU~uTTT| \d;;a^'Ra~%zc# njk ;ϰ- cOC!P`(Pb0q[%=C]g_nafbF`U;4oѰj2'bС!}쑘a 0w:RNmS`ly}uuIc_=߼ų+M;+Y&D%46}ul'|匭xnCRgʆHZcEzhsJ6sf%퇲.pq Sk-9־zGn΃ 4uijIP_`,z WhѭɷrAU4 X*[#1Y4d4[w@NA֭^I~גNLjJ"=7~ !|B&~BǮ૥$@%P!z+¹p؆OPf[fRǨwtPK G|$>FQ2@edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITFP.classT[sF=K qB DhBS`0<0xm+ؖGS?ѧ 83[Ʉ>Йv;~қptp*OBedu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITFPP1.classUSU]ɆBRjI6P)j@"IkSԺ$Xd3O>ڗ>Hg79uys{ٛ?)Tc8(Bg`dc KSah|1|0paanG,dc>Q[Vn J֮JkziIm޴j=\Ֆm:Sշ[5ݶ\}gޕzݮjRM-. )zf,5IgTUaKF.\A/dFF1?ͦ4|$0q%ʭs,i0p[ XVPPPbbKeX57VɰPӗnbfQ ٷu{Fܒ+3g tڃf$y};殩Ɩ^ pvKzt+,AL^vuXojdYkO⤾f?ˁP[S4MX%r }I/l۞]tt(rP}{ A9\Xz$k%Go"?q5ڵǺC_L'k76NwRE֮y]>C5)6J)a7UߐN~h5Hu=|.cO~qX9ʗ%_H4w#dTAAGO[ 3{O}'Y_gT*&گRmQ*;=_8]!.y%Kڻ~;`Կ˄I^"} *>PqbZD24bpYA PK G|$>(ASBedu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITFPP2.classTMSG}VZ^‡A1'A 6/(^d'R4ŒV")"'b~/9WR.b$ݻrpuxyw^E|LJxT5Da0ifq,Ca*| ^c:`k%U|زݴ}2"]%T@³|۫+^ujvgR6v-wrnn8g:h8v]]f~e)}O[kVlm%Lŧ*>1Ff>o|(fRf06]O7u\˜ @t+XcXGAG`(]|[αpa;,]Luyf9_,fm۞c6&}j@ז) _``uڷ1Jk7wH?]^ŵ[4iRבD~M1oQ[-0%f\BXjoj`>o fq$UKRPճig\LܡVkq7-:I!=\w#9=rsNfNS9A`s[jYS^a-Bl'+Aw*ߢUfpNT źՐ*V)5zB9Z-ҭGr<շT}9z.[ >p."3;"4BH"nf&@yhsDCkSG>}T^`/@edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITHC.classSr@}˖#+L kX$`:HH 8P{l+Ȓ7>K8U(pK@#*~_|- ,jñ8wc?ℊ849v6<{*4IJ3LjQɅ!9*&bsc"%C˯X/,s+M(76W6jMp-X¨-T sa~6se(5[ЮUL8# ‚aGi28>踀~ 0h qSTG4ftbN%\qE\.߽h7t,H&fv_Ӟ},.&3 =fWŲxwopN(TdQ<KRfz"~K ^n ސ33MKH;$U뱰#Z[kx$X0Q):~(vGEjSMSj: "h(ڮW)@mCcDϐJR^f}Mx+'f?EwH锭\^ .0:p $`dkDBOC鿕ކȫw.=ڂ Ż^J(;oEMj-$:҂דSRDJnvb{fI\JJ\(rjJڄRSoy\<x rt-*8´l}*qF|PK G|$>KRYBedu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITHCP1.classTsUn`Yll ZX!YIj/Z}pn.d>OKf|/>8NG_ʌϾ8z.Ptqsϯ{=?4b/Mb/KrQ+ Y,H _|.E K i򪄼RZpI&U).5 *6Tl2D, .3ҙk [ 3>,a ڲ6,K=Q-rnZq ֻ00̝ Snyoڂ.bK:s ΎaVw F9?6+F~}}-2<1,,orx o븂ӱwtHͻv%xOQ>I ['cԵ}߬yugXw}w6oxaɠ;Cb?͝Q >kw*-åۍvL-LvEOu7WjЉ'vxt z;N3ө[50[붅ri2ԸH_{h#m&4d2خ]j<*@ Wpm׫OT@>J)}³feen` "PIkv>_C ] PJ1S{ xuF8~-~~#BJR!1 'T~oE{gs HDzH)]GJ=L=N >S8ǣ[W#W%#cD}'6dqbgo 4SfABedu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITHCP2.classTKsEZi:ېc^X[&M8^,a BDIHݑ N7% (UEK\ݒ{ާ@fp9QYyĻxH[dĀ`)˰Ȱ. +:,2qXu  $=bF>)Hj/{*4uEu dXsݖxs)Ժ-h^wݝ7e- SwZ0q5XqwwwJ[.ί6֯mVW366e-X>oml#qڸgg6vqm|> 6 %/Q>=-Ene/_ \}p=mˆ*(-kRKۮmgH:-7=Em(x'#MPJ*,vHg '#Tj:h+⮺Va'xij-t6e~/Z5kPEA֯h[_cjw{eC5g侮XH`t'ЇtnnWBG*׼A8 ݶlS'_sXJWa5p#k:8^i~.K(O+we&|eAdS# sMD&?.>q?/,8X4'Dg=$hP6z߬[x(`q|#>7 30]lpFb:Ʀ'ǸDIcsǘ$miOxدeqEL k̚zq1: )@7PK G|$>\@edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITLW.classSKOQn_3Lb Q)VG#i#Qfhoہig%C6,ݰqaI\hiC!y{?S a\1ԁ\°k #)1[\[HJ]oq͸ Y;sh9/c(A..Tu{2˺c-5fmiVI6 mejnQfU\VL%AgъfA[3(ZmwdDp`fZHVj~yh|"59ɸ)}'H Ö12<02pydd,oy3,x *2c'14V U &H=tIMU"uhW*A)V(yf+on;.3y*ɘiFlaO,Ѽ+kMwY- FmZelcj`I  ]7^tx]//6%K&Ĵ6>kcŊMHm6lBmuo߿֝K_4}aO %#grDɷ?xNG($CpY8aPK G|$>;Bedu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITLWP1.classT[oA\Z eU,ފAٖ]vR뛿/|ALidR3[j7o|g3ۻ-'" )8-‡3Ί8"[qsHpϟsk0Ap%L "j\% YB "hvUvEˬj:'byZiuZW\o鲩j\rìt*;Z*+cͫͲSvx\pCe%x~Q.&cJ0LMgt\B %Q-3`%L#-aO,w઄k.$d{-$p.r{V($~ F٦Pkt:jEuT%@z슔Cί몬FM.9f25dMݴ:`͎yhctbBscURM uV6N0arQD ާ4 &zK.ЧrϚtFvu1UE1j5-V*~+k6o: k%t#%2Ԩ9uc?[5*kuXVl6 HCa v|7$y6o [x7_XOc0F`{^p61m#5}G__hCt`hCrp_@y_^(]yH Q!Sh@x )`9ء:ouab`}ET CbD{G"U;PK G|$>\Bedu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITLWP2.classS[OA^, ""j/I6)U /3Sh\/֦OǾ/Sq4:Z!ͺݮ1QwGMFty2noEhΣXW[^w\R sH!Ԡ'g8IS pU "gboPK G|$>C1ɒ@edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITMP.classS]OA=ClY *(_!Bci6[ y)? $}2ƙhps;wן?GA.01aLಌ+ R0Kf&"{C7wKA=m ":Tt-Fi`uզ=n;K9fT&X_2AUwm EJ>E@=ڢphaTn7 ,8j$?\h =̼ muKyr.n1߷6Y cr v<.](V5Yj19L-hVu\l[vG0&2d@rx2"fh7I KFhiv}_~P6"چ1spT3v jNҥט%aTzPO"2p9v1}.ƹSb?ɸ sw PK G|$>eHΣBedu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITMPP1.classT[SV-0rmB6E1[oRbpCJeJeɕdL:3N&y3M+hiwvί $"]H*+HIE6Q:03\c1Luw9=fXeiaaA*>-XIg6E"|3K=/xey"*+u}Mmݵ|ޞ/[RX^Hmެ̻SPG^kJnI\nvv&cp VD@5,,S= bE>cXe3a]Ck@QC;oⶆ/0l3|n ,QF)_(f.0kUsWe`V6oj$%y?H3M6]x;/0t25}~7tPOu%|t?#RVW45J::nI߷\| {$Ya ܪƔ 'ehSV\,O-̵`ݗ_ۺ!}׮s-_!ϾKnA#He.Pgn/N*녏7MӮVLx4n[6Xr*eͬ+B~E'bt鵱[ݜj4NϵN#P9 d>tdҘiifE!GOEO :Н} MvȓM#r+AUˎ>rh D[sDٱb>ր6@眒RDoCʎ) tHk/Ht}K78 r\g::݃Q%@#$hQۥo."=ȶT,2qD*LPmdĺ 4q&ID-CMi>qأ,GQoVqEś"N@Is>k?PK G|$>KQBedu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITMPP2.classTSe}de#V$\BE x+l%$eldqw"/Lg/dƿ /lX}}|~η?~z /5NՅ$2󶊔FLZC cgva`bfȲ 5wf]昺<âT/[kv@D$P܊wll;Cד5Y{w`yciTJݑF`B@Xs~ɺHJ*>*. \*++YBv4eٙ٩pC%\8_ֱBt|U&nk:r y+3((1bMqa.6 _3joɱ|, ˚ fڕ9X+:M|ݷ,ñjF1P>}co&~`WHۿ (9a~AzEQIgV=[nSo=7p:S6ku@2½]%lY;q6|z*K,ilHulpTSɲlKTli]Ά^r3kl.jo?ěS-0GLͷzHUoݪQ?bljѶqZb8vϵNPd=7uY+ӕΙVUi%^57@w)DGD~/T:/fƞB9D4dWD[/2] B~u}y%AO*D#ec?k[%$V4љo%4I3RoQm'VWN"Fߡ{0|8 *dZ2,=%cCē1e=j51AU7q&.70qc #6Q=%̠_rgC@edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITSD.classSRAA0AAܒ 7(tIg&`Y@Qv'(E 7/ߎ>|0SCۈrME5Mo - " * &B 1aF#*FU(V"R2v.Xު,#K,[6 ݡn(mñwTNBedu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITSDP2.classTnU=7^{͆iB(m(88%I(P![BЭ}mo ~/-&6*w~Q#Nѡ1݅1Sɉ49GvaE_KN'4g2=edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassP.classTwEd۰-XZA-M34dqw'#x^|x%ro|nRN="w|s7wf̳yHb gqnxtM"lǣY9<y 1xdgᢉM|$x"do RNXwTXm:a9K|fU:vS2͎kNhnnlvq|kM-w]*ڔK& x*ݖZv|ҙ+0]Zr[J@ [O%eẅ" ʰưPb(cBx,ڙ~%jMiYZ loڽ쪺Vo]ik؛:pFjCۙ+~Hh"KQ쳫k0}^]CCjLv{7QeDT~= ~q"ڔ6Hc9PusO`Wu}OK&/pd{7Q4Zr{-PrQI=%{U[@!*x{ovoיj妯)zZ$cڑ }Z7=So1IMDc! 8A 8٧xx0_!y6&JHY$"Gfi2#]&sI2]#s$yr_2.RSFl|xvf.sr+fTi{lboVU ^u=edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassR.classSISAdL-IXF6Q(d rZI'313A#ŃXeY^$XV__=!Lц]8B+4thУ}rw\BTBLB\B> & NHkPÐaY6 hrL.LwLV/r(T,1]c d+0<33 _7K % #Fu-]aL$;)ng&$wj8Ӥ :J8:.H뢴.!#%2DŽH5S`yO0 w$CcfLIy^L g R5zA<V*7,nyl]^^x7mnj !if?" [씰ML^\4Ed iz~~y*S,N6t_jss:\N۞(0ھesCa@=ʚcUd1H /0Bv߀ś^#wc؇5/BSG(kPLm@@ړ%3T5d7MK} SZ6"c%lXDy|C%0д9Z#zDQx&}b@]Tf7gny7J\E5H-w7k8> Yk8PK G|$>| =edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassY.classTYSAlȑxx%XE &<"J&f7N/XeY*9^=HY^uOO= F۱R/ 8oOIKHHHJ0"a4LcRӥvX¸#*80mScS =!LdrobzsS2-2ųX+bERtgUX.RIL_J%n1t-c^Ψ-w,NPq\ 2ĦV=ӱ ;iw0 ,$4)e[$N %А„ἆ R(I5\0i qEC3"!'2|Vs 0Ys2Us\EC mKvWCwbav9E?x"""v,Uff]dkR£O,47w}CNݖ޽d`Tk?un/?d8ς:a?]ZIn䍊)񇨾QG7,s*nv(Z4&Mglv+쥝jcf36WqS-K? C<.Y8=}_Z5Й|n{ ߍav" O!x>Jnduz>z R;8$:R$FbKa[?HHhl(11mĔX)zc+ZL &\(Ҟ/#:ך;"ݾWS<Ϻ0/ȩحb ƈPK G|$>K:Y:edu/harvard/hul/ois/jhove/module/tiff/TiffProfileDLF.class[kAd5vֶKEZP4QL}&du{)%|C?@^| "g*3KZ圙s3g| .,pHa@ *qM&qcc!C-_xƠ?val:-!B~E6C#5NX[/;n3tحUY./6F6xU5H*Wݰ.} 1;-FB& 4!04n!,n$< i(a.bc:=sؤ2Ý31ybn+ڲ*`9>z] Z ܮ IUrW<edu/harvard/hul/ois/jhove/module/tiff/TiffProfileDLFBW.classRMo@}[;IZP>j HM X ā TQF:Fu̟@7"!ʕ߄k7Bav̼Op \l,qX>";dzG(f<%R{M`n#p$U\^v"|j&^@1M^; Ęy!}j6j{At^6.b`rY"H*m!W4tw(!Xw;"ÄxvYi(ȡwWm,<.Ӟ:[.X]#x6=7OH`i=^T7z!^W%<6ʆF RF3N;Iv6ѶD4M+Њ<P"L(ū+8-Z[u`^snFp ՉQ _ xfk[漵uB5A & fs<).g0KXPK G|$>XcWliAܾ9̗Ln 8ŅA$pQǥ<SD .ˆAÕ&q52"8G?5u <.BmA4AʧMUO4ktLz;kV6-K0LɛMXn W%oWhFLqq3$<.--̭[EʥFڞZ\!FEѶmUqjGY(֔P4!G!@Lq+ۘf}ebj>edu/harvard/hul/ois/jhove/module/tiff/TiffProfileDLFGray.classS]OA=CRJ ~_d11b ӄ @viv|?1_|7!&&39s__ǣ.JWG5#hB-f Vl;F0bKo@p[w bO3H6@[MF~3nq-n+z.ƚ]Ӣ^zMڦྐྵo3̔2+xMAv͔WHc`j,3a9;0Z3V)Vkex*kCrhU኶G;oPiԘǩ?1oP+KD9 (IQH@)9:'I<'M]GpP Ar3Pi6ufMzm/j+xUԱg}aw+͞f۴S4*dJ- sOjJ˼M~l:EšmVUM*)_ZԱ\FTSgsA 3۝|awS.vTC7 H 3j5g|z"CE\#'+|QZ5_}MlGm-MG7b4؉M>!QczJT@X}L*(t3p ftLgR'qLPK F|$>\xHGq>28VIXyhI=~1KKK׼!^1,#|,+KZFi!'v)?qI#d&G$[R . 5a ^q,s  bHNLPK F|$>J3?edu/harvard/hul/ois/jhove/module/tiff/TiffProfileDNGThumb.classRKo@654϶X !A+Pq [  pKMb*+};+[l8faN8iX8k+}zk $ Lh PeOd"Rp H" xGehۧ=CّZB *Pj&L%1U6 uRw^7-YXpۧ{Z Dt/ u*"% S|/gVc:b$Sѡq!%)ƂG"NUg6z 9edu/harvard/hul/ois/jhove/module/tiff/TiffProfileEP.classUsU?nv햦mCy)$-%bQ(M Ml%mr7YHv3~??3eƿ sv7#253s~w=9{揿~K`2 c)D8 ?=Mp!YiYd{  x``` G'݋ ְHP pu7y' Nd4%3g ^"x exEa1:Sipk8bpu'x1{ٕTUOYPVxaUZur ]Oe33S3t\V8ϚE\8 !%b6Iw$܎Ə8p02YE,ek(>'8cK-nк%e0A /ir{-ݖaAVc>5f/XlTȦmTk@0a./ 9z!<=4+3PvlE3w'Ek.gV$5QĹUwѦ07$A_- [kbCw/EXu$^NSgtsl. cݲ MVeG1av2uڲCyzMDzQ:s|7y6gF3s<Jy=x[J4u(SM؋];=}y1HT"׹ɧx / UF掃BvЧ`4]#?0#t F_Աtut }7!0v tc{]Ń%TtyH ۃi4AVeZ݅7PK G|$>k;edu/harvard/hul/ois/jhove/module/tiff/TiffProfileExif.classV[oE&ދl˱i Kǹ8vI)$n7@])w J/}Aĥ @j3N[h:ҙo囙3g~ /ĈQ?cp\* 7ĔO tJi!m!2BB 1/ɢ@ $i?Є~#/p^ŲZjY4*<75}COTj)u,Z`h7bf0> DY6t(+ Ӱkes'BQ,&r$A< SU9uaf(övvlVs)u5諗ZN_pʴU|݉2{H_GP&;b32''{zcc]M)הH/ %4@gM8z]NӰU !8J(k0X% Pe @@@uᲁ+6qUÇHC5 T_ç~w'aΐ|87l3w M˙}qT%u= Zѹ^PM[rWW2{"=W=>^mS~K&2Eܝ5 N}3 vZ6RR[(mTϰd^BSW6U*Q\46y].(H)q\;-mVL+[WI.^I[n^.!jvKí2w>mZ:umR1-1 >m =mX㞨\?(o|*n@p˻0Ѡ* B1/Umڅ$HW`MGEԓܑIf ;`qg4}!_6/l^P?B߁61L<50w5Ⱦ[ݿ 0׳mh;{m7i #: #m>edu/harvard/hul/ois/jhove/module/tiff/TiffProfileExifIFD.classSKo@6$uJpm^іWM*EjRTdlp`;QząK/Z$&:Q!-}Y?_b5,np $ܖpGB*XJ.%q?zDN|8;PP$;]s H-b;aϸ\~@Y hȃgAÃmkqG+Mߴ;}x`w;ހ^0;䭖]xC iDut2 s0J~9-!FYt[VˑdȭrYǣQFE x\rO ]:Cݶm{QΆ!oldBf.{קN@`¯FB :=>e9hESaQ8r1D%rZo!@N+N||8V}_j)Jvd |BdY%bKFzGPB3.Bc/XrR#I*QOeRa޲HLPK F|$> ,[@edu/harvard/hul/ois/jhove/module/tiff/TiffProfileExifThumb.classRMo@};vc\J(8A\ HZ)p@zoGdo.zAAB߄'H$vvwۙ7/±Pé46M~ւe +8g⼉  Zs^"K G`< 4@_NXp;(E(xG̳P*嶳΃X>dy@AL3Q(rd T0ޓG d;;혫mؘqlX8Fpk6B_Ej2ظk&۸gg6xO~4H 9~՟}'lh\aެNm26z\>E%;\IF@IPe<{N^"OaN}JjW%T&1#KPyԧEpWPI9 [ߠAUo}qW-M2~C}ucS;v%ɲH& PK G|$>`P58H:edu/harvard/hul/ois/jhove/module/tiff/TiffProfileFXC.classToUx7$iv>\ڐ)bp;P%~ƻ{襀J8  !NTwW>coޛٙ~pSxƏgɈ($bF 0! ./WyxAL boF.xEƫ FphDU lѰ֖az" xQBX3aǯ/Y㎱O%/D0te}E39}ȳ* l*O" C1" '%*@RśxKEJ%̫X(K6bYXSq9U\wpUݰ!tpa4?(K0=dnN֣~eɰTI 3DOuH-w7vtt@0-X<1o\.Óx>INgzG]shk鼤IH罚t4I7OSH=H_ʀ=KBтB٩Cn 9P#pWP{ {]rA:" e }4I[QyK.WI޽4^cu>moF:+'ݬ#0z&|a_пdoNڭ/$ZZP+H~D/2UyY GǞ}RHeExmU a>,:m㍻.:B2 רMt*}\OB!4 [oX2NK!!&Yhͳ?,1Bdag y?k PK G|$>ߡ :edu/harvard/hul/ois/jhove/module/tiff/TiffProfileFXF.classTAsD֖%[(&MlRqR iRJ qhi؊T\I G9@.¡f0epoemI}O?g'8$)7*"TTp//sȗUX⨦brt.st57Z!F}~@ )E@&4BD`D 8\SpA>kC<_ ݖŐ7m˯wls7mEwLoZzg]׷:wֶc遽W  #+ټY5usñ  V5z0fd>0i41PA `]ç0 45`i䦍[nQ >݂[/h 'f4L9!KVf۪Z2!VaÚu변alq1u{yukwc>qFɃ2m8L -=_xF'hhe[1}eI??]=mG] =f؎SZ7<ž+͎յϟwZ? D6R{ Ϻm3̃_1yӡ*rO)OW|W.5kvx;+8#6 :Txc` ᚞`ű]ċ]H? ;C%28`ӿ D}$r$, <#ǥ9Y,%q*)R{HjHRsm)S#ds$0*D1'=/b.9D76 wd)eL01ӌs1KdSS95WB)Kf\T 1/>xDTE]dxCdxSdx;ʐBH+x/dW^&3'$=t~/J1neoPK G|$>7PҚ:edu/harvard/hul/ois/jhove/module/tiff/TiffProfileFXJ.classTAoU덝q]-UҪ*diSJIim{mon\8pz?5BH=TQWQo{3? ` c()DQ*7w%ܬq ֹ[au6^!c<# (D` ~!4f M|'k .2s Ҫ1Үn4ft7kZD/֍ξםh}KMW6;yfU+7 Ooߪ飦kTP1mV+Jk6T]˫haKMl3X T>V vOE[E.z*0쩸  ap-WZk VtZ9!kWzϨ=!]ePwFM3!蚥{Zsao!30ƪ.ijIag՟cgx/ٖ˿" $%Z1=wp`?*)%V1\״vgIgUw:C'ٮTY<h"[Ǹo ۟3y ='¥ũc QEX!|=F˲RF')Og4RwBFHS+ 81Ӥy9 b2)pftoKf Tpi?-g>'苢⌨ 2, "Òp6Ȑt\m2'H( Qp\N>"'8&D6 PK G|$>0LC:edu/harvard/hul/ois/jhove/module/tiff/TiffProfileFXL.classTsD6-[Q'GPlJZʏR։C&69%*e$9nܸrBO8CLa q2PJ÷{{o߮?` [1^Ĭs*^h|]y oHJIKǼ,jpAޔ% tyK.x[; +N 2IJMقa2:"`vlY==VZXw[ޞڞs:Vx}9)X5;_n چwudp!]+ Lv ?Sx:}eP6WkP : E I(MRQֱ5ұ.͟H@UG ulpU Q. /h #+<|^&ȓ}=i`[s"~LjHD5bfJC1TqSy\i$j&I+ #aj34& #iI2e_A3 IiTPH &NI+OK,#dЎA%Jaˊ񻬘ˊٷG>>x? *m;FTq"'"ұʔb?4'a7I(vJxc8ۣ2sȨ839y_PK G|$>q Q:edu/harvard/hul/ois/jhove/module/tiff/TiffProfileFXM.classTKsTn(d4)ҔTqY+x!תV*B0]+Wt|e㉵HPG3\QŊnU@M:R:c]@-ױ6uqՓ+5sl.!uCЯvm^ؑ0rʠhnĐ]oؖgf%vg!TrLZ4ͣ)*%_ܰrut*:5L4wȇd '0Bh(J&%}䔉r I0O(OϐS wrh< ǩNI[D~.Q<g1>x}ę> *`9PK G|$>{WA:edu/harvard/hul/ois/jhove/module/tiff/TiffProfileFXS.classTMsT=/,[Q8)`- D%R i|Q@Kl"KFR2eş`S6ٰE Na')}MK~{߻OO!88 [s5{X4}籤J|XV袎}dc|Ч='_}njU/K R:XFM)z[F[aДKkݷ<Agz$gH{=с*T~MbA)d`? =s#dS=Ȓۘ;B6eCe$|҃q]?>w[^޷q{=g G[(*1Na J'rELR5x#ʥ)ٛKYԏԤO/H*(5p<SLk1 /PK G|$>[4>edu/harvard/hul/ois/jhove/module/tiff/TiffProfileGeoTIFF.classQOAn(*?Rn-(c= !Tibƃ@ge6?5`䢉1-3{{oOÝ u1A)̻Xp0L%n1䪵 ݑ s*LÞJ׫;3=atxosR~CɏtgKnUVY{0kb?ESHeYy)uj6+pJT&}׸Kʏs("]kTd(u"qCy`9E]o1̒McC%Z%`Xv6GPYٙJq`jjq rGatZ;s|l'ï:pr[Dd)BD|t%vFo..0bf }V.PK G|$>B&Aedu/harvard/hul/ois/jhove/module/tiff/TiffProfilePagemaker6.classSMoU={q>ДIBq)MJ!!MbZ,Ф~N== eEl$ɦ 6Eb Uޱ"ZP}ίx`t5 Gp)i u a8coabcg`xbbNoF5'zmv/1LexT2@OFɑݒShjA m׋VrugݖV-n95wT@lųoo.ڵVԣi8Wrޔ蘁+*0rst̒kxu9y9Ȱı,r>²<Ǹa&>1PhwSn2-0%Ugm Z켼 ۶U֊WwS{JI#P Y]6>t$eK4Z|ZǙ3{rݪrg{d֏*EM[eU'tML'̺eRoKo]\^R+K;ܕe. 8߉׺ F[%"X/z8ʚgK8}}_?$s} :=`<i8J FB e,"4rTz좃~9C`&L^]hރ18:L/m~lRKj-xRwB4%luiJh%2[tR]BPPҲp;[PlA'9h!SS0PL-DiM$LH)tL2:;}b(:2-TDQ|Om+8})KTf >cQA}4:}"/ q <~_g$!r 9\<+*_U~EQ#UADO &T Q1p}P&/PK G|$>u@edu/harvard/hul/ois/jhove/module/tiff/TiffProfilePhotoshop.classRn1=nL2h }* Ib!!U"T2e fd¦|@6,( |T3Dlxxqs>x.J(q"̻Xp覃[nDjU HݑBԇ^?p"yh3%5;P `Fv:om^\i~n;:H#կCEX Fcl^0ƒzXF%㸇VJ& H0<x?85>,IL*+Z&vU JZHDom1 mVk|lOTLֳbAS{Yqutd?}|nT8G`'tZW|<ْmF٬kg@KXr0!EPK G|$>]"$ >edu/harvard/hul/ois/jhove/module/tiff/TiffProfileRFC1314.classTRP]& ԠUm ^*Z Nm4mj/uqg? 2x>k9[GQ{; [ဆ8a'9dbfa0DH"paaL1 g7SQ,lIwjSlGS2fslj65WEiԜR˖gFvR:qG{3Ƭyϖ4Na@8ٓM8:8#0EY#QqAEq %\1pWud&qMr:(踎7^A>Hwk-̊I,)16Y蛺o.m+ƌ״ꕴ@nͪɌmhEz4r7 -U3)';%{|4Ӻ;]jЬ+:܂ly'Ǘ`ߚZxNMx ٺ'$>bk/`= -nsn;R?| jz }/J/ lw02wPsCmТ| F6aXçMa bڸ^zmZA^=Yʀ JhDydr(&2RsJ8?j6ʉ%"7J__T$+kإa> {D,JPK G|$>7WJI4edu/harvard/hul/ois/jhove/module/tiff/TiffTags.classux王5w ` XئwieI#k"4VblF@hB R $DIH!Fzr?~g_{f85)rl&rNrTB***ʐʰʈJJ| T**ʘʅ*9JA2MeʄE*oTyʛUޢVUަrʥ*;T.S\ +Uޮr*PFZTWAeʍ*7ܬN[TnUMv;TޥrʻUR[=*W^_>|PC*V_<*<*O<*Ϩ<*T^PyQ*SK*PTʧT>gT>9ϫ/|I*_QT o|K*QTH*?QT^U/T~+_F*ST'?E*S?T/G5uu]u;UiNWJ]UZukխS^ugۨ;SYVws՝|uPEbuVuU0uWuTe.WHuRwǹ1πK!%#n%n'.}hv\L\B!#/Kw;^%~N%+o}"E+&%# Kerl\) .Sm;ӈDD5QCuC19h$<I"fsӁ9`=&c=&c=&cr.1O, 2yL28$#4M2BQb8XI"V-UnS{85}u6Lofę3-dG#|f#SrFH6=:Oj#fQP Kc<(?K:+LBCC\ #Q4ߓ?ޛφe% _Еʔzmň }j7FlXDmw~Pj+C{0҄7dRsuڶ\EUc{.Ʋ|/wSs Ur=c-&Yqt+c%ln߯4L~(ʵ3$Cmaְ8͹B*uksXK{r`juƑT!ɦ2* s\v4@"P1 1azDkSq u%jy'v;v-`[3(Cř\hPmޑ aĊ "RY0&5[Eq pT2l/r2]㫶ln4,0O7o%(AXOș7l\s8:2h!;gM{"pѓn:[tO0 F0\j{?ڗ`ij2p}\"CAt6 cs xYO8X[Ko1SY&TM맚BqX S܂ O mAyCfptd w\s| {uV31Rjmb}>d٥HU1=WC< r17;Κ,9_].RbtGٳT.bOodckŜ=46RfT/"^ xکqL#jIvd^2#XL 3N $ڸ*>w4 .y1/QzSKC)ݣy&X[p*~ 󤼭{ɑ"S?c7Ǣ\8kK\ p|ūġ%VawGxZqRu)ij;d8<,h&ɠٹ12Lc eFuVܝh^=i/*<;.N`Dst^[Y"L3[yxSA:ښ st8*B;ފJXRi-yKQiidzմv7d8nX8} n0I1+O39thpz%#--"Hƍ?pfb/%J} ۴r)wkb,&PM \GjKbզ~N9GJrS9}v9+~F L[+eCgj$Qtaz/Scْ.4*r'oRiT6JӃm7 pN͔qug Q2耳]G:]e +VCs;+&yY4RL7!Mdǣ`15RCCM}9oA\͞&p|Y+Isgڲ'yj#<>zę.gtN9m[q̇.ZqNϩ1E{ՅN^>G?L\"!לiUQd?iSM΍?ywOVfn*I&[XeZXm3kkz ΰY`=}δ,[ζ[εyv 8bp .CP@; <<Ė20[nGGQ[.&p . ~{>={탔{Cه))G()()#QG1ʃ8!{=IyĞg_|޾Byž|ԙ|Z?s^y=7WOMOCVAB=xRRIޓO!3< d< =\,OAf{22Ǔ,dd'@xr d'Ayr'CA Ya=Y9ēC=9r'GAd%OVAxr2d'@yr*d'AtQYI3ɓў$ +=id d'mc n`>+~`ȾL^4> a>a> K-_;}V&gi›}&gq}V'gyŸ}2zzE,XxϊI,YϚM,ZϪQ,[8ϺU,\xʅY,]څ],^a,_8er8~_>ೠ>+2C,>>k c4Qh>߾>1g|9/Qx@ˉ|9O8OtxO OtO8O#txO+/W|ʣ[:;PK G|$>&edu/harvard/hul/ois/jhove/module/wave/PK G|$>O(i!5edu/harvard/hul/ois/jhove/module/wave/AXMLChunk.classSn@=q55-%@ B"-*AIڊRPMIڑc| / DEg> 1v ,ݖdYY].--y"X=cA?tn`87 ߈3; Ŕqw'L6}r;䟱 ce,d>aBwߢK2DK|Gl}R3('ҧPK G|$>?.H >edu/harvard/hul/ois/jhove/module/wave/AssocDataListChunk.classVRG=c]Fl"ǎc@BADc0r!v ˮ]qq.c /*%B+o7%vzV1%Rt3=׳?\AGr #H)`79>QV<$a(O1*Bc >CVLpL*h>縧|Vpw%}f#BAs %W_3Ln2 -uhh%KsLW[Yvօ6%K ?Fk̥%-\WGnbvE_5цuO؅7v=QKN C0l 8gm<=:EKp|ñOΠlD3XTс 䉑B %y,Y +0#ŢS)@j;v2]/mDܴ]ə'/* >n5ԴC%"e$c0š GA CI:6TlbQP@,"Aհ1ƾ˜^u#Õev쳮F;.uFzENQ2GA*dQ>X djd-M X9xρd߄Jchxfr(*hTȂ́!vdߠ7M.COHA8,t /'WDF !NX/m"ʫғ1xNl&r=lP^xC[ȥ1!2&W\Fu) =QHjIK]"0%SCoTj$ S(SsTKѕ;&;!JW'b.Yp~ǩ?驪`h ג{E⍨ZF#I8-mxsgx+(#*)"',TXN?X8B"9 -wv*[$^#q-{]+rM4g)\6=!z.#q:Jq1BOU=Fq\Wvs rr# }//PK G|$>{b9L =edu/harvard/hul/ois/jhove/module/wave/BroadcastExtChunk.classV{SU]ͲW6l-b6Lb@ { c7n6|#J~MB dd޽wܳ?+8'} O(b =*EXbyZ,d\:a g4⬂$% H0g4!] 28/cHƳIV #2%`7ʸ /aTȏepAļpaB,ILI0=ns %^Lhf둉t2 kG-4cZl5rEHDɜ:5=ImVVOsY(9LO<9+p`+OҼ0ǭ0ÎMk6:݈L*KBAK J|n2l<жa if%\T1y/5㒊7pYśx*; n%ǘDm[OEGؾLnx1m3mK}\z>T|(m Ss,q@k5fCli>mnQd*Cf#I 0H]$A StxEϹDpU*5!%f4EnΘmiVt%ݰs7˺1}-*~PEHE&꨾Kln 5#1Z )Թe^)>u{"| e]3^t Cp+İuK+368pЇgx 0Z? wZay(qGM >4V/<]nkn NuezN;I_!^ P\@;mQ$ilmXD]FWef"n?v@ͰN2W&P1fh[H:2rM h zj0Cw Ի֡Է֯C_C{p2v%o_؝kmXž[`uUNxpZD%PwSM]D''5 ~ K8"ᨄ'$[Y~BHBw{{(xHq?PK G|$>[Yr5edu/harvard/hul/ois/jhove/module/wave/CartChunk.classwGǿKzm˶X?8-؈]ڲ*ȏrl+7.giˣ}(B@Mp? 8-doTűA{g{pS11`TJ&,)8Bb;_Tu[_ReDh!q;k r*b0%ֹ`8߂ (6+$K_p$\ O,)%-G$. G%)-mQq;w%ǑOp'@ljv&<( Rɢz1 ee4mٖwOrbp6 '(EM(nb\0 לɨHn Ft&M#aӆgR[Ӹ81|F ,Lr$c7S1K){81%kfR8W0D R:si,y%'äll5<)xN ^]~fe*$&J[A^2^!.W~hx Nd:ޖ@x54WkdwMpE\0|"]<䏴 EZMG븢 o-gE鸴 S|Ry֝I dʍBAKߐ%mLi:C{TqVxEvgv1Iٕ͝)$n>^/͜?w\*OP'}O%b.s %iI#*У#?4/}呱4/lf\oRM7zUIJZA[ThA{3֏Y7umɞk+Qxoɾ|N;h׫~]AĕA}V:۷]t,!ҹkgw_E,?'^)?B``#Z>_t_Ut;<Ǟ[dDxxY3Cp]u|HXE\C2mRCoaT[ʀFjmL#Uk'mǘTǙjmqmaрv'>22 h1~iw@+6>u t^ŧ=VgB{5[5.t7~s|s7 }oC t+8)B ?("Nhu>D2fPK G|$>P4edu/harvard/hul/ois/jhove/module/wave/CueChunk.classT]sD=k˖,+ NK8UpjcM]>b%м^t Jv& j{{oqL'p32fwNEe*xO,ޗqE \Ň2p]E)XgP $XR,,ddܖa0o؎,0홞okUj7 ^n7z~Žla3u՗4V;7wSkq0aJʼe8 7;aUU57~z61=}7C.xgi\%ʘ`2&O!\")_PK G|$>d)K5edu/harvard/hul/ois/jhove/module/wave/DataChunk.classT[S@"iC*EKVL) 3l6$i??ȌI(IoϞo&Q0a bXƈ[!FehD 1&.DwP=a z 㡌G]Ӧe3~DgFU+RF]C+V˚mznѮ1-c2KR%Z*J3y-UZ%F &]Ziksԧi˩h%}M ly6d9i+o'oz}+eAwʬI2>ߴ-OƔ1Z&f#'W]a_燉tf*!A4\VAmbE3¼P*¤DsHǂE,HcY+کee2kFǓc@ޮ0ڞ.8t6(ٕEVc>},e!,ēGTsQV>Kzlgvg@2<4RlJeRaӊSfAhu-:EBGG"k uK |c~P_ m^ps.x8Y^t0TD`F!D'n/ros$ _ /9R 3{:Ń}>\\ĸ~4{/`7)}μm7/Lɸ*nPK F|$>|rSr4edu/harvard/hul/ois/jhove/module/wave/ExifInfo.classSWƟv."JkU@u}V mjxi5.6 Pfaԙ~C:[3=Ͻ9{6oa0+I!+I·q5k>~`2c㜎9񖎟8u̲IEN/X "YU;mڍ@mc7ͫ#UW9|T7mGγkjUzk\Zr.6<VgYj*wQG+uۻ.Зϑ[kَ6v= j[gr4{讣ZK`5Gi-MGMϾ>F o9ey9u ss&+}:NdWgsVؖ8_F˳`wU>'pWWTx{d\b%NfmI@ĘdԚY%|s@2' %xǚ+7"%ָu<nk45-GeFֶ:mIU~KT.o d0Q,Z11GUZiY&KQf+y1<bq"pėcv/e8^ȗ4?Ɵ~xrx':l'4qNBGE=PS/)LX^ VG_aO_b|L'?C2#!R&'%TdH*4ҡt8#LXڱ6F8ι}X(qIogt9 8]Ef?ܡ:ǥy%>edu/harvard/hul/ois/jhove/module/wave/ExifMakerNoteChunk.classSn@=u-*Rl'a."J%ER+E51qvdC> *!ĚB̸]3g=ί~XFӁ50ccK&\vpWLb5\qMԓ8Sr;2,xOdW4n/HMb_"SP%QWzELPfή|U(NP-o`$DX:N"8kod_i۸0 0ۄ"@wŰ; wh3l u4Fd|0bOf멒[0Oac{u -J)='Tw¼T0wq ƪ@a=q;`IJe4]o E/vX.0BM= 5}32#5 K//O%p4 U?c'&:[Wu4_182y8_K3]PK G|$>l7 ;edu/harvard/hul/ois/jhove/module/wave/ExifStringChunk.classTRA= 1\4(" (T!;Lv?/4Zg?J *%k{{6OC BWGc@ɓ04 ǐFV ^ pVp|Q2E%/0e+W,\Ȋ1cRᢕQ;c,Ҫ(Ʋ5 VXY.J#U0s +1N,Ee1&lK<)`A };u2-| ghEqJgbVwtqcA_Kˢmeqp㚎б `NbUVAqI)LrL鸅 [Uų2Cה%1yK]S6_Ӆ3҇w)ufYj õOgWA 1wSj5$B %i'hпXU<̖ 8{d]Z2e,Co-cT!dƂf\p(A bе&7CGm|l#S+2m+V [X,_CPqE0!CJ䝌HNI ҧ,Ym[jI#6.z낇5xTP7)By~F=H+) ?&I{?%*hP"}oDsTg1VuDֶut7ZڡR<& q(1^@G}!OPK G|$>ͻ=4@edu/harvard/hul/ois/jhove/module/wave/ExifUserCommentChunk.classUkoU=7z7un 'ԏKXBu$@Mmo]HD (B| TU̮J{=s=3ϿAKyx/˸3/E+ ^U!5W񺷼ᅼ@V5x[+xQpCANA^AAAxWE7U0'= wjYCd~pͻMfe筮=2?Zu͚UfvM:z-ѷZ֎V9Q?J7 =uo.8 vϥd ѰO|c4Pd|!0Wu9B)WJB\ե̕^r3 aKCNP={@./ury0 WD(-WDo ‰4+ypÙ“"8ݿ#gөnZvGI܉5ϭl_ Cs #^j`($͸;sIRXH4QDi#%$>[9AiNHSbPox(]b&yx q0N;J,}7AhH(JOgv=("0$(+~CL{0 o1~y5b5c$pLEY-3+0JO1fSG!Ec>"@6Dgŀ3<edu/harvard/hul/ois/jhove/module/wave/ExifVersionChunk.classT]OA=c, ""~E~***EB%&b vamv/^LL1b&cVLu7Ξ;s_A\nPܔs G *qG2BG"ITLa Kp~r` ܬՙgmoV:7 Yy<}j?DVd,VjKL 5XrNg蚜[,aYLj)&Aj{V}vl.4!PE^ ,)i°&Ol{yP P9=$yWʂd)NjAN9JX|&&R<O4!aO)4NT?'-TsZ綽z7rtC#QN$ΈR3~[ΔSgS=x <.A7s<1q 9yxI| A/M$SSG B . D⿼Vq"1+C#cЍPz"[hS/]?F߆œjTirfYA~a {P^PK G|$>h "s5edu/harvard/hul/ois/jhove/module/wave/FactChunk.classT[S@Ic7B[ jZPP>,dۦII 1hgـ-nvw~;g?Ŝ\U\QqUõq] {S F5D%qi 9waS Sm)۱i V,jW-X+훥[kb"U Qϛbz%%L׹i,xjJPaPR%"aN #, /d->aSx:;q 1Kr~V KU``'L̝qI< 1_@4xf$(YX)Cho_}§bP+yWq/GLv%CuБ@^>PK G|$>43k7edu/harvard/hul/ois/jhove/module/wave/FormatChunk.classX_[gp9 rCIGW;k%SP4mH0P,9a鴺9Z/8]ʺP׮yw?kg'!y9+\‡Q [ZTpƘ%/|໓(|+T RS|Irr_KH[p2|r_frJů˻%{_{9> XцKϊY a-rD|܊; ,4>%II/HE p_e2؆ўp;0 U]z*k)cPM4*}h_Vh3T'l6e]z\eFT8p_cP 8(߱ 7 P٩DKl=;抛˗xLܑ͚\q@8Tquʸ 5mkHid@mǷbF=XQ=+ָj&?TtHtqf9"9M2Iڱf#O0r$C_ Z`&)LΤyá^"WkEUSZ(@hn7<@ό67$8*wa+5U(M[uv|㪧5ڱi]G\B7DUahv'SуF!j[jnq.]2_d4OZ$QP6|eϡH@XE"!+ΒDWdJU+tueȵҞ:lė-]_:l!lJ=BcYPSN8jx]J*ҤRuĒҳN1KỵI9ԼJs[kZ,ۅg\24[Mh^L 1gm3~yϒXE`lj@ k2X+ZAB;VA;#RV$_z@.U@@[VV:*\O|uV)2꫻}R/"} y/mPK G|$>rL 6edu/harvard/hul/ois/jhove/module/wave/LabelChunk.classKK@Ԥ1oDP[+# `>PFF3y&QA\k8эa$/s+5̪PW~ UqRðcR!m2?bAE]M[M7t5Bo63TvfA+й^kQӥ,`U ֋u > DNՋg%u24jIUE niĔi&\c,~ovzS|n--ZlaCxLHd1犊Ε^DXFbVXǜC&]m؀RZ.<<$Q2Vٍ̋Gt!W*HOW)'@8zOPK G|$>~<edu/harvard/hul/ois/jhove/module/wave/LabeledTextChunk.classUmWE~BwY-P/JH]J*!Hd7nv)_9B9fOf޹/';AADq J#)b@|N7.>f0+គ8Kx (>+F6|*cQC$|0d,X@^]~$Rx,aU َ?`jz;giՠvSۮ;\[v3fϞcU4{kKӇܴ7kl;fZMi~YM=f̻g &ˤΦ0( ۮӔPV¤'Xc0UsUK|k lJTpl1 LQֶSahf kڜ{p G<ڎg%nYi S]>Lw|^-jI)!*#%Ke07x[B"@]ŽgYQ=FNMwړp=U~dIT IȐ8T#iWnQ'ϦCzz{>o|LMqb"R\34{vLoM $2$SkF)ESW"I]M\L^Cȭ,2O;D\{gnc87+6+CiY c.tHJiaq@dTEr/Je[2bG XbH|A-?&QONmT*#WŖ o>0q8%8Dɩϡ Cɒ,؏Lп&!rL[;Бct#))֑TQ?AM zX91؂z!a!W.!F-0a{:| J]>^9ĵX/A Zu_oj}'m:TǛjLD6#(/PK G|$>>vJt3B%ETʆ]lXKPv}2oAð ^Q$q CU7uKV8TZkW۔,eԘ:d 2y\`Y%^FLUR{[-Q_RXabr̓Muf.{4jaOn tB [%Ibg;&2b\!A[Hx.3_\L"} Z&sښ.09¡HCCm r>2JU$DȘrT8 Rb[1/ʰBgo%ԮLKԺ_%ZEPdկ8; L|fЪ8p765+h0܀I4X>e:'TNuw|9(9x>GRyހr!\yc}aCܳTE p9̢ۖѻ[ x}9l. cTa'߼ZvEa /i5'MyN:T\ŸBQtH2~qp丕69-8LtTOpYȩPK G|$>vs!<edu/harvard/hul/ois/jhove/module/wave/LinkChunkHandler.classSRA=6Y (,zEDC P /ԐeYW|*R?ʲ' ,vz=|F ᖎp09pn#:a415򟼒 q@'N2<Nj[R)t83jILQsx20YaaU]ԬRyCXew^']iٮ27 YnT2b<u5R/D.i(UQW p.O"*}h2MWjBW%+AD=8MYͳFݒuK=gz?'TsiHAOhAʹv5b^.o'G̏~K_Ftl?IDTzllo\E;F l ڄP{+w C]w[Ś`w.ZƍkTr/U1{%5Us>xD *[Q$_l#hPK G|$>U9edu/harvard/hul/ois/jhove/module/wave/ListInfoChunk.classWi{~/Zx<I-CZibj6&Ӆ=`YR4#cm$m[Btu۸iDm6<_@ϹZ,l/>]sϽ絷p5ы3M88b"s,dN(Q;fl WZVx``oQM$hr&{NeطǦi{4$^0fTwOzY@떸D!qYV8fu>ip }~ t Y{FѴjgS䢅_WqpZm2i^P_>*ϳ'HnfhMSVy#Lb&v=?T¯17Jk ~Y? ğZ煉nfJ9,k $0-E.]$,Y9fpo ܻEoir\{S ʑ܉L6_[NPX jmM`oc>sb 8и0kUߝa,aڡ\N~Ix;f_-n䖯k?FAyw8X~XP}iր5ySnBӻz7aGY7t$mǩC=}eH,L^Բf7q;A۫!~8К_f+ .B߫ؠy^EX< _w!XD(\ARp)J%4;Ѽ- K"6-tyF^D+[#m)b [*b"("(װO6?(`oAwKF&>/C`4LT/%F70II@:9(pв 5tQNk+I kPHFK["<_mWD_^&K9PȃE1}W]Euۖ6:V[mDOAr(aHb(A GC(!aHQ8 0U=LAjr[ ՓTxuB7E*TKvG]&> drozt8PK G|$> S =edu/harvard/hul/ois/jhove/module/wave/ListInfoTextChunk.class{Eǿ[4,Qix4I)I[ ԺMB7B/OESwSxQ;;w B;zW`r乑*M*60En,m@Y l*0,p^nY[n];[{_` <$# <&O <%3*sx> tTbxU5w!*Qd8rJ`8C*Ũm JQF2nㅊYrRY1MƐfћLsDog' ۢa DcZvi vG`Eڳ"fem5kNsuYӎ& HZKKcy v^*#y*Xrdd47lP0#imw8QxbOAukN\Ӷ*>АRHHNh%:Щac uiUj؅`\^ cC5?Ѱ#dK&S|F[\2);gt-K>qetvJix+Uu%iR$U-ѕT0=a.$\akG-j `Ou{kMh[l'Iu)Ȓe[ɪڴ̛AwcSѕ"]FQRC8E,Wr沱Mrfd~wQ5'],XJ#^|xI4e %s'Lb)Xݷ|pI/W0oiis*ճsGv?R2h ?+8%gNb+GZ5c f*΃)Vt*i8T]V{Tɦ#վaWSZY˥?_LT> ME=3+HDqclj7PF6ƼN&3kH6'I^^rT($$)"?b҇05iF5Z4\qu)WkW$?%ݡtV#^H 髫>Ӧo8z{ K+Tv(j׸l1(jbx .:&A!HN^ܹWtP_b.֏cz)Ԛ(f4>h֓4w(/h>ۇcMC32>tuz؇NdOyV'|F' |QH_C>obZW}E|[2Z }6=C+9>t^L:QJ?ۇat~h~517D)~㸠'ch7.hX6qzhꫩE֌"xۋԞ]2=*6بr~,$ WPK G|$>Ifi5edu/harvard/hul/ois/jhove/module/wave/MpegChunk.classUmWE~fѶZ_ @ꖪU$͋I(ZBs>PŽ>D1QL ⁊O%xET|.AVXX'`;vBMnugNSwm_m\ϹVWϓZ!Jwvt=^eL]=f8NP?J×05P@`: 즞<5m?ο"Vv;% x-&S4QѰ!#lR| A$^yⱆo`2$dN]7׹''MMK9vɼɝzf%#(r]װ',pK@[KhZ^7 '"#hp#Pk 6PSzRJon\!n}`1Sq4.Ž<\eE۩F>S3kR.U1 ڲ}l<{`fc7U;h1Tisܞ3pAӃ#ό,s [|;N+ݶP5zDpAF T>mfTek9-PB1[T /l 4SpHn0 z+{*a#x݄[[[ Rv#.R-T/?0Kr=d4v2G4qCj}S=\9 /`3F1QõCLVg>>8s8vv11;>5=r/xXhS;⫈PK G|$>5edu/harvard/hul/ois/jhove/module/wave/NoteChunk.classKK@hlDjkˀ*X nd06fB:B\ęZ&|;oֱh!LM"m혅^01I|OnF ]ZTxMz]-N6kr'FhWНZs9f-F=AwdE?dI5l.'Hn"99Aѯ'{A`]@zoec3kٵ,, =edu/harvard/hul/ois/jhove/module/wave/PeakEnvelopeChunk.classVWU=B:0,&0@+ԶFk J(mSm$L(][VV .U+*'??7aTcr̽ϯ؉n~=xA7èߔMƃzxQc~p]x!({|̰!nlA7by88 $xn0y$3< 6Q5K`h7*듲⾄jF+Ml(mHMXR>5uU<)Ԅol-2{M]'r;QED-%Eң$Z,V הǻdD+VFOpxS g ܝSJT9wE8Iиa>.SxA8%/5 o-MbmлÐGhmRXBjʤjU+xu6Iڪ wALio]ֵ TX7 afÇ|'>Asc{a9XNj׮tP5Lק큀/d%_00vL~*T6"M:1xbxW=Ai1*k7\t&ؓ<P]@(33x:,eqET`IX|=~ ؽYQ/NwC燠fÃ@3X*%=\6B}pcdwVXMcHm 9:1n[Ǣu 57A![5Cєh@Tխ8l?A6*Fom2JKoneI]ھٻv1FP ZqtaUo$칛Jfκ;vQG2u,u=T$u#:{\vcv]T{OOA}-j}jd )æUǢ&@d?v{G'P'2F&`;ĸҪ;hQWsH0;ҫ6Q.QC?v?@۞^wS M ?Z2w*I%B5?jD~P\re 3 ZXgloJZ"E{VrRϜ'㋤rh)s{3g-e3:K!P^8{"6:PиyxPe-L5ʨFJFJϢ̊ph*jŖ{V?%UrTbEu^qVJXq;YKz1o*"ͼ"$UfTRhL '+̍ ŪYlf%jUAX,hN{)a!,3]-[yꕼ^=lǭ ۱y6ȭ٠kVl0 Wlг,CyHB'.ȗf,ۭ!yi3u~Zu%7WC=]q>B'㩸b:8*W!^OYY `m[5Rȡ\C'/PK G|$>qq 7edu/harvard/hul/ois/jhove/module/wave/SampleChunk.classUmSU~.$MX iKyUZ%@"Kv a7R}_"#giw7@f\f.g99Ϲܛߟ+[:1(p wx򖀷)ƌ bbb"Ew,Fb"Cx"Gp!瑫QQRS|D!|) (MwUM5Kl%$cO2ĖUNj5).[eeZ*x^ TJlY΂"Ɋ1-I UOJ*7 EڝOe&#>vEJrJ%ɑ-yS*JA(+vE%6 R1U] 1"Tl]Z8AY.4 0 ~>I+atPa"h,if*e1kDZ,w$uMfƜ!*UVˌduU3S"9U)Ւmr pPa~-IИ,>MΖ[a Dħ|N %*P #[E!JY*3 eKnɪfq4Qs>-$tcW2ݷLTU؛'fE&MC#1}`*~O/K[*֦g$t=`fO1Oecdec]b[!{vYѪꦦ)"zp޼;C0}>m}%Bg:Co3BjO.ư SjəƶR4k)<2dFpr)C*b#u(CX=zwI3ƊNTuG#w0~@~% cl^f̣qA\aaИgi׸,Y- Mm5KyVv 'kCOмi;x~ba @6d!HnFoN{NSsPN=8Ax+vN[]ܩ'qeǝz\z]9b.0ݑpC%=\x4ubШE<=pt]W\B՚0;:Dj_k_!%Rc?_9GuE?Ȫ{Ld0t%쇰GkO<?PK G|$>e ;edu/harvard/hul/ois/jhove/module/wave/SimpleTextChunk.classTkS@= )iCxF"FQ|P,V@4XNV7v:nʨuLfv7ss뷏_aM(.zp$\8p`RU nLv~ } a֍kܨ707E1Oг`H`{T\ʺZU˨;F5KiDP ]K5y5Z/Vr(4հԘfkqT3vj!3!j@f=KT*VѬk5눡* m!_ blpQt!:7Ž?go9ܝ] |٪n`fy3O ޣ;@lOT\)<gHAQ!zїo" }SJLCu +b#otƜ.PK G|$>Kl !7edu/harvard/hul/ois/jhove/module/wave/WaveStrings.classuxYǻl6 0Cpe %mm diI6fr9sis|wv_1_U㿽aoWDLLLS2McbbL3jf2bd2)&4i.2}LO7~C_4  *)i*7%/3}L_ Mo1};R]1}L?1'L?cE~EG;cmv ɘsZngĩK;:;2Ǒ?jmEFi2jX_,=8ǎjEP-]4LZ[OPW8=]Pgʤr'QzMS^҅H5_%Ü 2x|&;&R)7i{#cq,i9dʳRϹ_nߙJ^YNΥF\ /"mmmVsrsn]:bVNH3IzY+f5H*!ktZYF uvb?Ttjfidԏ+R9'musY8XIc9 Ma^]71X\O0S,4N7rB6TGaRiaO*zio lʖjNW*kc󹔗Z-;:i}{Ƶ<+1QZdOqӨ;pa&Jcg.r-nMlhW;\[q?wՖJ{jaBBҮjoj&Xx'#[8fb]XKYxJ8~rVxzCFo;qffwl5N ÇL`enճ#1O84X:iri7yeBK\އ-&V4]%3I5>dߛH^bϨ.[*WP6.ٙORC']*,{ƆRUF=F5CXۖl)uד1XɒGh…햰,le@e#1c,;iKz--n2'59#m#e\i!f[|lZ ʭB;:Z׎0Sþg+LMҷ 7覞C-Ijamnz$ dh>-7`*sqa\tؼк 9N: Yb ڭNmn7yΓ׉qR` sGĠ qىuրVfӰ6$E؞n캂ȤpbJlmV!&9{iٽz67ׁpHCi&o݆ 7&X#wAxoE"\)a1EL1#'k-ƏV$s¸|_^v'[N1e9;u7 cD ڎTfk5/Ivo{>2JNc^2@%nXJ,mvxׁ@3̚ L"E]+un{~w*[V_}]M k.7N(7M(P0SfnouYI UOg| qٹh˥,5RUW)w}[S#)oUp,g`!&]-uEh*7henMH"ex&Գ=8'\㥓džt{2[ډ+܌dL XUJU׮"G̫)*|/j !NTG.Y~~۾T6q{/w5tᾕ?FX^7q;CF"dmnɪUVv27<LudApY; yCJ vIʒTrңn r}wo!jl\WA>oׯ_`mۺ_LV>b?mՎoØZ`2fbdeQ9}..)N1?5>I1RT|0ے.BgAgdnG[7OylA\uC)nOub2 e;Qo7\XfalԊAWT/P,XSQ\ԿZ5()(ؘzd+5W7Sz2Q[+)z;UO{ivo{YkN*=d] N5 =ֳ=MpVlAS j=sp^׵\0p^.K$\堥#zx^ W+jp^G} x^ ׁ:pN7 lFlzܠ7z3Q nǁ8}"x> AC"Eҏ<yD?&~\1I'S"OEψ<yF?'~^9EK"/E^ү_yE&~]5M7["oEyG'~_=CG"O|?) )OO|JF"џ"_X~3z++SD{NN2GM*eMnNg3j1MpYgs@Ӝ *ss8\3k"pi e`\d.63WK̕Rsxzp.7#&Hs=4UFp \cn261ך'̓:3֛-`Vlכ1p 66n2{౦gǛ 3 hIxC0bæÝfb[Q0bO1m~<cCؐ(cCñ!pl džѐhH< GCNBNBNB΀B΄B΂BΆB8!NI !I8!ąB7EdPARĈv++ڣH"HbHDFXHX^Er"9"1""1Erh)S$G_v9U$'x"9^-VHѰŊ^TQV2E9EP4"zQѫZх(QZUa^**DW7 SFUaޤ*EoV'ޢ*bEoWPK G|$>%edu/harvard/hul/ois/jhove/module/xml/PK G|$>)+l:edu/harvard/hul/ois/jhove/module/xml/XhtmlProcessing.classW_wa0V64]C$Tv@:N%.Hjzի6Z֠j$a ѱixX`6c:x <&'DħiVϲO9|^ _S:i |Y+ *+7%P6#]޿~~ -I9;+fUSlq&+2ȰKe+Pdd:NFz"M;v{NLGƭ܌KDƧӑl*ؑlb:mGzX ˱ٛaNJZS#XܪbA{yM34D= t?$8}WΚ$kpB9i;v&)O”lJd党;PV"1@iJyW~DB;742ɥd (h Y9Pzo$M Q N= rl 9C~$+ GRK&8wTTvұ8إ}wrq$LM OknSCmYrF aǾ*h_4Z{ mg/S  8ajQQ3XA gVWv5Ul1k+ul4+fj p-"9t ]~O 8edu/harvard/hul/ois/jhove/module/xml/XmlDeclStream.classuVwW]i]XRђRiCZqj'iHk[, ie\- MIBc9_HKY$':G3o̕?1yq3|L22漐p7Y&LrLL l)/*11YQfӬ]xe9~_PE̒/ M|UטU_go(x7T-6~݋o;2E/nu{>e&y#?VWpRƒeG⢀H t&򹒩q=[6TNҎ + TlyZ{dN_cY=73 bhL[6azD ( F[3iR4m:&9 ֤(Ec"e3dJ&9z'1K3fdX@mix,N2 A #fdP6)C4/ - rL=u^_ϒ;2 &*+Y'9c|2 a AP6`zQ +A6CZunlSB1O)dݞc\t-Fxe,v^PxɶY#uc^l$JL.=:mT<Pq fF'U aXpZ3LLS*ǨqWcL.8*L11p*޾9 7U|p)eSY*ܥ)85g6VsBE Xi. TV%~%*~ܒ9Ә15o-~**܃V35т^LfX>S|>]16vy>˗\oaݍd6fӏ6;. hmʭ _v0 kfY*oDm_JMdj%cqtTR8cg!рm5g&̿@h NtóIӏ0z}HVp}Lib6c]ǰ|dɖ[~z׏=)O}}ii,N`ٜfcegl9mt *냓%]pڅ6ꮆJ[VP>\H@$HWA%9ftۯvCkMvNo+Pvկ>-MݖwwXN0aT?{Mt'}}tQ-dAz^ݡ}~'F: kD=5|h j4}ʳh` BLu<'?,`Cٔ[)bQnS܄2(W |R9-%L&"aM"w󝹃 fYyGwMiInJԨoWqՊ} ӻܫ Q&ZcP%CBuj p>![ wOj7G.KθwHSqY5^kQMH\єw["7b^AY/#ܚ,MptUS|*86z(7M<edu/harvard/hul/ois/jhove/module/xml/XmlLexicalHandler.class]OAmn"j/Q~(bLHF.Jݱݺ%mS&D?xvBK{&3syg^iб@Cq$0Nr' <*gxDA4\SLMTRߊ$bHmڦFA4WC*I(hnUyc k$TqH -G.hXk%z&\vWi6}*N3@T_%,\^ܕLvؗ BJΤ(Ӹ`_k_A&ItnT:bx3x  ֥uꈖm;u#y1ږݦVYvͪmXEzqO Y%V-]˚t?P:8ÁreW9:V[~&mx֒k>ңqj=nf?(H%z:(Lo<HO?EFq34[AFlJ"O=J1}$d0nPS)pZ*Э@1ۃ)R}D,m$p'Fdw u4=KSgg=faPK G|$>GzS ;edu/harvard/hul/ois/jhove/module/xml/XmlModuleHandler.classWy|w7y7oi(%faJ4Îѭ-(-{I^ڰ4ɒ7xNT9SA,|̏n`I␌^|ڋ0= &(`ҋ#^^L8`(,c~0|_be~q'd|Ej|Ջ)1di\H%K\+ Hq]@R& Ɔ/h^yfάѝG(W7:Igc>;_ֲC@iYە:,2~IN;J- -A:'ܼs]O̷ncdNV=,^_|&:֥ǒܬK'Gu33 \vzy't>U􀲬gwՙ#͘{l2"bLu:2\u3+M!ƈSɁ2%-'x54rVO._s %H,*ET|tېi;`&?a}%'r[Eź~U*U\vKݠ*B/`A T_FT4eL:ktL^<.|L}a@̈^O$:ULɪ7]Ҥ ETmMH)b7R-O֓j.}OE ignR7ͱ__+7ڣnj\6zԐ1lt 8E,SxS'Mb.LPhИ{VV4]"d-ZLuYs:Wt#*MYF|ohM:a,%Ef~k;W"-?7 Ycys!ymsz-e#\Ly"paĨ*' O4ZI7l륣) d"ӵ9> UbUٗ3,>r\O` @XsG~d?Vx3@f@qo\qȷV$;VT^VQߎwT mY<"yPK H|$>۰ META-INF/INDEX.LISTJ,KI K-*ϳR03/KO)IJ,JM)aĢĢd~Fi:_??>`2+ *OLK#*=E%Xݏ( RӉSed``@XeA D"]\PK H|$> AMETA-INF/PK G|$>R +META-INF/MANIFEST.MFPK |$>A5edu/PK |$> AWedu/harvard/PK |$>Aedu/harvard/hul/PK |$>Aedu/harvard/hul/ois/PK G|$>Aedu/harvard/hul/ois/jhove/PK F|$>!Aedu/harvard/hul/ois/jhove/module/PK F|$>qdo=1Xedu/harvard/hul/ois/jhove/module/AiffModule.classPK F|$>D_)2edu/harvard/hul/ois/jhove/module/AsciiModule.classPK F|$>#PH713edu/harvard/hul/ois/jhove/module/BytestreamModule.classPK F|$>T9 $F0;edu/harvard/hul/ois/jhove/module/GifModule.classPK F|$>|>1\edu/harvard/hul/ois/jhove/module/HtmlModule.classPK F|$>"[C85yedu/harvard/hul/ois/jhove/module/Jpeg2000Module.classPK F|$>*D:4r1iedu/harvard/hul/ois/jhove/module/JpegModule.classPK F|$>V"fHY0Hedu/harvard/hul/ois/jhove/module/PdfModule.classPK F|$>(rj-j1 edu/harvard/hul/ois/jhove/module/TiffModule.classPK F|$>fGr 0Nedu/harvard/hul/ois/jhove/module/Utf8Block.classPK F|$>LC@*]21\edu/harvard/hul/ois/jhove/module/Utf8Module.classPK F|$>)>=B1vedu/harvard/hul/ois/jhove/module/WaveModule.classPK F|$>O,{#M0 edu/harvard/hul/ois/jhove/module/XmlModule.classPK G|$>&AԶedu/harvard/hul/ois/jhove/module/aiff/PK F|$>Y_nm7edu/harvard/hul/ois/jhove/module/aiff/AiffStrings.classPK G|$>l!;{edu/harvard/hul/ois/jhove/module/aiff/AnnotationChunk.classPK F|$>D\ <edu/harvard/hul/ois/jhove/module/aiff/ApplicationChunk.classPK F|$>E`9edu/harvard/hul/ois/jhove/module/aiff/AudioRecChunk.classPK G|$>bOz7/edu/harvard/hul/ois/jhove/module/aiff/AuthorChunk.classPK F|$>g\.T 9qedu/harvard/hul/ois/jhove/module/aiff/CommentsChunk.classPK F|$>77edu/harvard/hul/ois/jhove/module/aiff/CommonChunk.classPK G|$>X~:edu/harvard/hul/ois/jhove/module/aiff/CopyrightChunk.classPK F|$>$5edu/harvard/hul/ois/jhove/module/aiff/ExtDouble.classPK F|$>4>edu/harvard/hul/ois/jhove/module/aiff/FormatVersionChunk.classPK F|$>']Rڳ@edu/harvard/hul/ois/jhove/module/aiff/InstrumentChunk$Loop.classPK F|$> ;/edu/harvard/hul/ois/jhove/module/aiff/InstrumentChunk.classPK F|$>|^7edu/harvard/hul/ois/jhove/module/aiff/MarkerChunk.classPK F|$>nHP5zedu/harvard/hul/ois/jhove/module/aiff/MidiChunk.classPK G|$>mv5edu/harvard/hul/ois/jhove/module/aiff/NameChunk.classPK F|$>Ze6Xedu/harvard/hul/ois/jhove/module/aiff/SaxelChunk.classPK F|$>/ :edu/harvard/hul/ois/jhove/module/aiff/SoundDataChunk.classPK G|$>P5edu/harvard/hul/ois/jhove/module/aiff/TextChunk.classPK F|$>%Aedu/harvard/hul/ois/jhove/module/gif/PK F|$>GX5.edu/harvard/hul/ois/jhove/module/gif/GifStrings.classPK G|$>&A@edu/harvard/hul/ois/jhove/module/html/PK F|$>n,66edu/harvard/hul/ois/jhove/module/html/CharStream.classPK F|$>l85edu/harvard/hul/ois/jhove/module/html/DTDMapper.classPK G|$> $:=edu/harvard/hul/ois/jhove/module/html/Html3_2DocDesc.classPK F|$>_ <8Xedu/harvard/hul/ois/jhove/module/html/Html4DocDesc.classPK F|$>j \>edu/harvard/hul/ois/jhove/module/html/Html4StrictDocDesc.classPK F|$>K&:{edu/harvard/hul/ois/jhove/module/html/Html4TFDocDesc.classPK G|$>";'@0edu/harvard/hul/ois/jhove/module/html/Html4_01FrameDocDesc.classPK F|$>ڄ +A92edu/harvard/hul/ois/jhove/module/html/Html4_01StrictDocDesc.classPK F|$>c l=P<edu/harvard/hul/ois/jhove/module/html/Html4_01TFDocDesc.classPK F|$>&@Eedu/harvard/hul/ois/jhove/module/html/Html4_01TransDocDesc.classPK G|$>V^%?9Gedu/harvard/hul/ois/jhove/module/html/Html4_0FrameDocDesc.classPK F|$>D̄ @Hedu/harvard/hul/ois/jhove/module/html/Html4_0StrictDocDesc.classPK F|$> z8<Redu/harvard/hul/ois/jhove/module/html/Html4_0TFDocDesc.classPK F|$>C#?[edu/harvard/hul/ois/jhove/module/html/Html4_0TransDocDesc.classPK F|$>oxC=r]edu/harvard/hul/ois/jhove/module/html/HtmlAttributeDesc.classPK F|$>v :E`edu/harvard/hul/ois/jhove/module/html/HtmlCharStream.classPK F|$>܏0#7)jedu/harvard/hul/ois/jhove/module/html/HtmlDocDesc.classPK F|$>i+J 8yedu/harvard/hul/ois/jhove/module/html/HtmlMetadata.classPK F|$>y;<"edu/harvard/hul/ois/jhove/module/html/HtmlSpecialToken.classPK F|$>my5edu/harvard/hul/ois/jhove/module/html/HtmlStack.classPK F|$>-#<7edu/harvard/hul/ois/jhove/module/html/HtmlTagDesc.classPK F|$>gL ;edu/harvard/hul/ois/jhove/module/html/HtmlTempTagDesc.classPK F|$>{72edu/harvard/hul/ois/jhove/module/html/JHAttribute.classPK F|$>= 26edu/harvard/hul/ois/jhove/module/html/JHCloseTag.classPK F|$>^A)ҭ5edu/harvard/hul/ois/jhove/module/html/JHComment.classPK F|$>D~5edu/harvard/hul/ois/jhove/module/html/JHDoctype.classPK F|$>105Ledu/harvard/hul/ois/jhove/module/html/JHElement.classPK F|$>4 6:edu/harvard/hul/ois/jhove/module/html/JHErrorElement.classPK G|$>& 5edu/harvard/hul/ois/jhove/module/html/JHOpenTag.classPK F|$>} 4edu/harvard/hul/ois/jhove/module/html/JHPCData.classPK F|$>5;edu/harvard/hul/ois/jhove/module/html/JHXmlDecl.classPK F|$>PJ :,edu/harvard/hul/ois/jhove/module/html/ParseException.classPK F|$>>7edu/harvard/hul/ois/jhove/module/html/ParseHtml$1.classPK F|$>ܳ=edu/harvard/hul/ois/jhove/module/html/ParseHtml$JJCalls.classPK F|$>!OhFLedu/harvard/hul/ois/jhove/module/html/ParseHtml$LookaheadSuccess.classPK F|$>6/5edu/harvard/hul/ois/jhove/module/html/ParseHtml.classPK F|$>oI=>edu/harvard/hul/ois/jhove/module/html/ParseHtmlConstants.classPK G|$>1~72A7edu/harvard/hul/ois/jhove/module/html/ParseHtmlTokenManager.classPK G|$>2fjz<edu/harvard/hul/ois/jhove/module/html/SimpleCharStream.classPK F|$>TQ1edu/harvard/hul/ois/jhove/module/html/Token.classPK G|$> z94edu/harvard/hul/ois/jhove/module/html/TokenMgrError.classPK G|$>%Aedu/harvard/hul/ois/jhove/module/iff/PK F|$>_!0Hedu/harvard/hul/ois/jhove/module/iff/Chunk.classPK F|$>Pb6edu/harvard/hul/ois/jhove/module/iff/ChunkHeader.classPK G|$>T_x5edu/harvard/hul/ois/jhove/module/iff/Superchunk.classPK G|$>&Aedu/harvard/hul/ois/jhove/module/jpeg/PK G|$>Dׯ^=^edu/harvard/hul/ois/jhove/module/jpeg/ArithConditioning.classPK G|$><^+4hedu/harvard/hul/ois/jhove/module/jpeg/JpegExif.classPK G|$>\ 7edu/harvard/hul/ois/jhove/module/jpeg/JpegStrings.classPK G|$>HYL= edu/harvard/hul/ois/jhove/module/jpeg/QuantizationTable.classPK G|$> Op=/ edu/harvard/hul/ois/jhove/module/jpeg/SRS.classPK G|$><բa1~edu/harvard/hul/ois/jhove/module/jpeg/Spiff.classPK F|$>cǂ 4oedu/harvard/hul/ois/jhove/module/jpeg/SpiffDir.classPK F|$>=>2Cedu/harvard/hul/ois/jhove/module/jpeg/Tiling.classPK G|$>*Aedu/harvard/hul/ois/jhove/module/jpeg2000/PK G|$>ڭ>edu/harvard/hul/ois/jhove/module/jpeg2000/AssociationBox.classPK G|$>l77 edu/harvard/hul/ois/jhove/module/jpeg2000/BPCCBox.classPK G|$>O}( ?+$edu/harvard/hul/ois/jhove/module/jpeg2000/BinaryFilterBox.classPK F|$>e92*edu/harvard/hul/ois/jhove/module/jpeg2000/BoxHeader.classPK G|$>l 9,edu/harvard/hul/ois/jhove/module/jpeg2000/BoxHolder.classPK G|$>ލzt @3edu/harvard/hul/ois/jhove/module/jpeg2000/COCMarkerSegment.classPK G|$>h!8 @8edu/harvard/hul/ois/jhove/module/jpeg2000/CODMarkerSegment.classPK G|$>@=edu/harvard/hul/ois/jhove/module/jpeg2000/CRGMarkerSegment.classPK G|$>1 aLD/Aedu/harvard/hul/ois/jhove/module/jpeg2000/CaptureResolutionBox.classPK G|$>.c} =Dedu/harvard/hul/ois/jhove/module/jpeg2000/ChannelDefBox.classPK G|$>*NKe:Iedu/harvard/hul/ois/jhove/module/jpeg2000/Codestream.classPK G|$>rb^ CQedu/harvard/hul/ois/jhove/module/jpeg2000/CodestreamHeaderBox.classPK G|$>hB @/Wedu/harvard/hul/ois/jhove/module/jpeg2000/CodestreamRegBox.classPK G|$>ET=[edu/harvard/hul/ois/jhove/module/jpeg2000/ColorGroupBox.classPK G|$>2s< _edu/harvard/hul/ois/jhove/module/jpeg2000/ColorSpecBox.classPK G|$>HX DDgedu/harvard/hul/ois/jhove/module/jpeg2000/CommentMarkerSegment.classPK G|$>@}c>jedu/harvard/hul/ois/jhove/module/jpeg2000/CompOptionsBox.classPK G|$>! ?medu/harvard/hul/ois/jhove/module/jpeg2000/ComponentMapBox.classPK G|$>Ĩ) Aredu/harvard/hul/ois/jhove/module/jpeg2000/ComposLayerHdrBox.classPK G|$>Q?X >#yedu/harvard/hul/ois/jhove/module/jpeg2000/CompositionBox.classPK G|$>);>>edu/harvard/hul/ois/jhove/module/jpeg2000/ContCodestream.classPK G|$>醦`aAՆedu/harvard/hul/ois/jhove/module/jpeg2000/ContCodestreamBox.classPK G|$>JgJ ;edu/harvard/hul/ois/jhove/module/jpeg2000/CrossRefBox.classPK G|$>6-?Tedu/harvard/hul/ois/jhove/module/jpeg2000/DDResolutionBox.classPK G|$>j\?edu/harvard/hul/ois/jhove/module/jpeg2000/DataEntryURLBox.classPK G|$>}!:Zedu/harvard/hul/ois/jhove/module/jpeg2000/DefaultBox.classPK G|$>RQPDәedu/harvard/hul/ois/jhove/module/jpeg2000/DefaultMarkerSegment.classPK G|$>^?edu/harvard/hul/ois/jhove/module/jpeg2000/DesiredReproBox.classPK G|$> 7S?kedu/harvard/hul/ois/jhove/module/jpeg2000/DigSignatureBox.classPK G|$>АY. ;[edu/harvard/hul/ois/jhove/module/jpeg2000/FileTypeBox.classPK G|$>\Cedu/harvard/hul/ois/jhove/module/jpeg2000/FragmentInputStream.classPK G|$>)=3I?'edu/harvard/hul/ois/jhove/module/jpeg2000/FragmentListBox.classPK G|$>GE @ʹedu/harvard/hul/ois/jhove/module/jpeg2000/FragmentTableBox.classPK G|$>Ā#K7edu/harvard/hul/ois/jhove/module/jpeg2000/GTSOBox.classPK G|$>rM)un6edu/harvard/hul/ois/jhove/module/jpeg2000/IPRBox.classPK G|$>`7ݻi >edu/harvard/hul/ois/jhove/module/jpeg2000/ImageHeaderBox.classPK G|$>=:` Aedu/harvard/hul/ois/jhove/module/jpeg2000/InstructionSetBox.classPK G|$>- 6edu/harvard/hul/ois/jhove/module/jpeg2000/JP2Box.classPK G|$>hO̥ < edu/harvard/hul/ois/jhove/module/jpeg2000/JP2HeaderBox.classPK G|$>TP{P : edu/harvard/hul/ois/jhove/module/jpeg2000/JP2Strings.classPK G|$>j-8edu/harvard/hul/ois/jhove/module/jpeg2000/LabelBox.classPK F|$>ĎY5:edu/harvard/hul/ois/jhove/module/jpeg2000/MainOrTile.classPK G|$>"ĚW6edu/harvard/hul/ois/jhove/module/jpeg2000/Marker.classPK G|$>Gs=:edu/harvard/hul/ois/jhove/module/jpeg2000/MarkerSegment.classPK G|$>\w=edu/harvard/hul/ois/jhove/module/jpeg2000/NumberListBox.classPK G|$>$ :Medu/harvard/hul/ois/jhove/module/jpeg2000/OpacityBox.classPK G|$>|Ib@edu/harvard/hul/ois/jhove/module/jpeg2000/PLMMarkerSegment.classPK G|$>}<_@edu/harvard/hul/ois/jhove/module/jpeg2000/PLTMarkerSegment.classPK G|$>RvU @edu/harvard/hul/ois/jhove/module/jpeg2000/POCMarkerSegment.classPK G|$>ǥ*@edu/harvard/hul/ois/jhove/module/jpeg2000/PPMMarkerSegment.classPK G|$>)@edu/harvard/hul/ois/jhove/module/jpeg2000/PPTMarkerSegment.classPK G|$> u, :] edu/harvard/hul/ois/jhove/module/jpeg2000/PaletteBox.classPK G|$>J)Y^ @edu/harvard/hul/ois/jhove/module/jpeg2000/QCCMarkerSegment.classPK G|$>uC.@jedu/harvard/hul/ois/jhove/module/jpeg2000/QCDMarkerSegment.classPK G|$>ƗG@edu/harvard/hul/ois/jhove/module/jpeg2000/RGNMarkerSegment.classPK G|$>Q4c6edu/harvard/hul/ois/jhove/module/jpeg2000/ROIBox.classPK G|$> |c Eg&edu/harvard/hul/ois/jhove/module/jpeg2000/ReaderRequirementsBox.classPK G|$>+-=F+edu/harvard/hul/ois/jhove/module/jpeg2000/ResolutionBox.classPK G|$>Q1 @b.edu/harvard/hul/ois/jhove/module/jpeg2000/SIZMarkerSegment.classPK G|$>§M@2edu/harvard/hul/ois/jhove/module/jpeg2000/SOTMarkerSegment.classPK G|$>0ݨ\ @5edu/harvard/hul/ois/jhove/module/jpeg2000/TLMMarkerSegment.classPK G|$>RTY4:edu/harvard/hul/ois/jhove/module/jpeg2000/Tile.classPK G|$>l'tr8>edu/harvard/hul/ois/jhove/module/jpeg2000/TilePart.classPK G|$>uGAAedu/harvard/hul/ois/jhove/module/jpeg2000/TopLevelBoxHolder.classPK G|$>Ӕ 7Cedu/harvard/hul/ois/jhove/module/jpeg2000/UUIDBox.classPK G|$>VsR ;Gedu/harvard/hul/ois/jhove/module/jpeg2000/UUIDInfoBox.classPK G|$> H#;lzz6Qedu/harvard/hul/ois/jhove/module/jpeg2000/XMLBox.classPK G|$>%ATedu/harvard/hul/ois/jhove/module/pdf/PK G|$>/P N/3&Uedu/harvard/hul/ois/jhove/module/pdf/AProfile.classPK G|$>xS9;medu/harvard/hul/ois/jhove/module/pdf/AProfileLevelA.classPK G|$>+3nedu/harvard/hul/ois/jhove/module/pdf/ArrayEnd.classPK G|$>0\5oedu/harvard/hul/ois/jhove/module/pdf/ArrayStart.classPK G|$>zѨ>pedu/harvard/hul/ois/jhove/module/pdf/Ascii85FilterStream.classPK G|$> ?qedu/harvard/hul/ois/jhove/module/pdf/AsciiHexFilterStream.classPK G|$>1 ݫ2redu/harvard/hul/ois/jhove/module/pdf/Comment.classPK G|$>!&wFov 9sedu/harvard/hul/ois/jhove/module/pdf/CrossRefStream.classPK G|$>fQ,6Wzedu/harvard/hul/ois/jhove/module/pdf/Destination.classPK G|$> R8}edu/harvard/hul/ois/jhove/module/pdf/DictionaryEnd.classPK G|$>1 :~edu/harvard/hul/ois/jhove/module/pdf/DictionaryStart.classPK F|$>2a 2edu/harvard/hul/ois/jhove/module/pdf/DocNode.classPK G|$>hCY<Xedu/harvard/hul/ois/jhove/module/pdf/FileSpecification.classPK G|$>~@*8 edu/harvard/hul/ois/jhove/module/pdf/FileTokenizer.classPK F|$>sW1zedu/harvard/hul/ois/jhove/module/pdf/Filter.classPK G|$>*6edu/harvard/hul/ois/jhove/module/pdf/Hexadecimal.classPK G|$>u"2edu/harvard/hul/ois/jhove/module/pdf/Keyword.classPK G|$>a 8<tedu/harvard/hul/ois/jhove/module/pdf/LinearizedProfile.classPK G|$>LW;2zedu/harvard/hul/ois/jhove/module/pdf/Literal.classPK G|$>Y)|/edu/harvard/hul/ois/jhove/module/pdf/Name.classPK F|$>S&N 7ledu/harvard/hul/ois/jhove/module/pdf/NameTreeNode.classPK F|$>CHJ2edu/harvard/hul/ois/jhove/module/pdf/Numeric.classPK F|$>:hV' 7<edu/harvard/hul/ois/jhove/module/pdf/ObjectStream.classPK F|$>@r8edu/harvard/hul/ois/jhove/module/pdf/PageLabelNode.classPK F|$> 5edu/harvard/hul/ois/jhove/module/pdf/PageObject.classPK G|$>@d;K7edu/harvard/hul/ois/jhove/module/pdf/PageTreeNode.classPK F|$>R 1zedu/harvard/hul/ois/jhove/module/pdf/Parser.classPK F|$>4|3edu/harvard/hul/ois/jhove/module/pdf/PdfArray.classPK F|$>s_k-8(edu/harvard/hul/ois/jhove/module/pdf/PdfDictionary.classPK F|$>d7edu/harvard/hul/ois/jhove/module/pdf/PdfException.classPK G|$>"/4 >Iedu/harvard/hul/ois/jhove/module/pdf/PdfFlateInputStream.classPK G|$>qf9Ledu/harvard/hul/ois/jhove/module/pdf/PdfIndirectObj.classPK F|$>ƙB*->Eedu/harvard/hul/ois/jhove/module/pdf/PdfInvalidException.classPK G|$>ZW/4@edu/harvard/hul/ois/jhove/module/pdf/PdfMalformedException.classPK F|$>̚A4Xedu/harvard/hul/ois/jhove/module/pdf/PdfObject.classPK G|$>_K 5edu/harvard/hul/ois/jhove/module/pdf/PdfProfile.classPK F|$>*oJ*:edu/harvard/hul/ois/jhove/module/pdf/PdfSimpleObject.classPK F|$> 4<edu/harvard/hul/ois/jhove/module/pdf/PdfStream.classPK G|$>y5]edu/harvard/hul/ois/jhove/module/pdf/PdfStrings.classPK G|$>wM7edu/harvard/hul/ois/jhove/module/pdf/PdfXMPSource.classPK G|$>`@Oedu/harvard/hul/ois/jhove/module/pdf/RunLengthFilterStream.classPK F|$>~00Wedu/harvard/hul/ois/jhove/module/pdf/State.classPK G|$>-59_edu/harvard/hul/ois/jhove/module/pdf/StdStructTypes.classPK F|$>~ 1edu/harvard/hul/ois/jhove/module/pdf/Stream.classPK G|$>ރb<edu/harvard/hul/ois/jhove/module/pdf/StreamInputStream.classPK G|$> @:pedu/harvard/hul/ois/jhove/module/pdf/StreamTokenizer.classPK G|$>hL(<edu/harvard/hul/ois/jhove/module/pdf/StringValuedToken.classPK G|$>8t&> :;edu/harvard/hul/ois/jhove/module/pdf/StructureElement.classPK G|$>0_#8edu/harvard/hul/ois/jhove/module/pdf/StructureTree.classPK G|$>^D68R&edu/harvard/hul/ois/jhove/module/pdf/TaggedProfile.classPK F|$>Z̫&0Z)edu/harvard/hul/ois/jhove/module/pdf/Token.classPK F|$>!'4*edu/harvard/hul/ois/jhove/module/pdf/Tokenizer.classPK G|$>tQ h4<>edu/harvard/hul/ois/jhove/module/pdf/X1Profile.classPK G|$>Y5Iedu/harvard/hul/ois/jhove/module/pdf/X1aProfile.classPK G|$>ܚ 4Kedu/harvard/hul/ois/jhove/module/pdf/X2Profile.classPK G|$>8H4{Redu/harvard/hul/ois/jhove/module/pdf/X3Profile.classPK G|$>Xu3 7{Yedu/harvard/hul/ois/jhove/module/pdf/XProfileBase.classPK G|$>&Adedu/harvard/hul/ois/jhove/module/tiff/PK F|$>NZE3Gdedu/harvard/hul/ois/jhove/module/tiff/ExifIFD.classPK F|$>#̱% ;#6edu/harvard/hul/ois/jhove/module/tiff/GPSInfoIFD.classPK G|$>O{4o:edu/harvard/hul/ois/jhove/module/tiff/GeoTiffStrings.classPK F|$> 7?edu/harvard/hul/ois/jhove/module/tiff/GlobalParametersIFD.classPK F|$>U_,/edu/harvard/hul/ois/jhove/module/tiff/IFD.classPK F|$>UR?)edu/harvard/hul/ois/jhove/module/tiff/InteroperabilityIFD.classPK F|$>XƩ[9C edu/harvard/hul/ois/jhove/module/tiff/TiffException.classPK G|$>+]Rl6!edu/harvard/hul/ois/jhove/module/tiff/TiffFXBase.classPK G|$>dbXI3:%edu/harvard/hul/ois/jhove/module/tiff/TiffIFD.classPK F|$>\97}edu/harvard/hul/ois/jhove/module/tiff/TiffProfile.classPK G|$>[ӎ7=كedu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassB.classPK G|$>Ҝ' =edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassF.classPK G|$>ok->=Qedu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassG.classPK G|$>SJ>edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassIT.classPK G|$> U@̑edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITBL.classPK G|$>֭?BДedu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITBLP1.classPK G|$>S\@edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITBP.classPK G|$>g)TZBedu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITBPP1.classPK G|$>U0lX_Bnedu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITBPP2.classPK G|$>@&edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITCT.classPK G|$>B\edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITCTP1.classPK G|$>&JB\edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITCTP2.classPK G|$>FQ2@Jedu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITFP.classPK G|$>*OBڱedu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITFPP1.classPK G|$>(ASB.edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITFPP2.classPK G|$>@Yedu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITHC.classPK G|$>KRYBedu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITHCP1.classPK G|$>SfABedu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITHCP2.classPK G|$>\@:edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITLW.classPK G|$>;Byedu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITLWP1.classPK G|$>\Bedu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITLWP2.classPK G|$>C1ɒ@edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITMP.classPK G|$>eHΣBedu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITMPP1.classPK G|$>KQBedu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITMPP2.classPK G|$>rgC@edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITSD.classPK G|$>wTNBSedu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITSDP2.classPK G|$>4g2=edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassP.classPK G|$>U ^u=edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassR.classPK G|$>| =edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassY.classPK G|$>K:Y:aedu/harvard/hul/ois/jhove/module/tiff/TiffProfileDLF.classPK G|$>IUrW<edu/harvard/hul/ois/jhove/module/tiff/TiffProfileDLFBW.classPK G|$>}ebj>,edu/harvard/hul/ois/jhove/module/tiff/TiffProfileDLFGray.classPK F|$>J3?edu/harvard/hul/ois/jhove/module/tiff/TiffProfileDNGThumb.classPK G|$>g6z 9edu/harvard/hul/ois/jhove/module/tiff/TiffProfileEP.classPK G|$>k;^edu/harvard/hul/ois/jhove/module/tiff/TiffProfileExif.classPK F|$>#m>Dedu/harvard/hul/ois/jhove/module/tiff/TiffProfileExifIFD.classPK F|$> ,[@edu/harvard/hul/ois/jhove/module/tiff/TiffProfileExifThumb.classPK G|$>`P58H: edu/harvard/hul/ois/jhove/module/tiff/TiffProfileFXC.classPK G|$>ߡ :edu/harvard/hul/ois/jhove/module/tiff/TiffProfileFXF.classPK G|$>7PҚ:}edu/harvard/hul/ois/jhove/module/tiff/TiffProfileFXJ.classPK G|$>0LC:oedu/harvard/hul/ois/jhove/module/tiff/TiffProfileFXL.classPK G|$>q Q:Pedu/harvard/hul/ois/jhove/module/tiff/TiffProfileFXM.classPK G|$>{WA:Ledu/harvard/hul/ois/jhove/module/tiff/TiffProfileFXS.classPK G|$>[4>"edu/harvard/hul/ois/jhove/module/tiff/TiffProfileGeoTIFF.classPK G|$>B&A$edu/harvard/hul/ois/jhove/module/tiff/TiffProfilePagemaker6.classPK G|$>u@B)edu/harvard/hul/ois/jhove/module/tiff/TiffProfilePhotoshop.classPK G|$>]"$ >b+edu/harvard/hul/ois/jhove/module/tiff/TiffProfileRFC1314.classPK G|$>7WJI4.edu/harvard/hul/ois/jhove/module/tiff/TiffTags.classPK G|$>&AdAedu/harvard/hul/ois/jhove/module/wave/PK G|$>O(i!5Aedu/harvard/hul/ois/jhove/module/wave/AXMLChunk.classPK G|$>?.H >Dedu/harvard/hul/ois/jhove/module/wave/AssocDataListChunk.classPK G|$>{b9L =Hedu/harvard/hul/ois/jhove/module/wave/BroadcastExtChunk.classPK G|$>[Yr5TNedu/harvard/hul/ois/jhove/module/wave/CartChunk.classPK G|$>P4Uedu/harvard/hul/ois/jhove/module/wave/CueChunk.classPK G|$>d)K5Xedu/harvard/hul/ois/jhove/module/wave/DataChunk.classPK F|$>|rSr4[edu/harvard/hul/ois/jhove/module/wave/ExifInfo.classPK G|$>y%>_edu/harvard/hul/ois/jhove/module/wave/ExifMakerNoteChunk.classPK G|$>l7 ;aedu/harvard/hul/ois/jhove/module/wave/ExifStringChunk.classPK G|$>ͻ=4@$eedu/harvard/hul/ois/jhove/module/wave/ExifUserCommentChunk.classPK G|$>ŀ3<>iedu/harvard/hul/ois/jhove/module/wave/ExifVersionChunk.classPK G|$>h "s5'ledu/harvard/hul/ois/jhove/module/wave/FactChunk.classPK G|$>43k7nedu/harvard/hul/ois/jhove/module/wave/FormatChunk.classPK G|$>;Cwedu/harvard/hul/ois/jhove/module/wave/InstrumentChunk.classPK G|$>rL 6zedu/harvard/hul/ois/jhove/module/wave/LabelChunk.classPK G|$>~<p|edu/harvard/hul/ois/jhove/module/wave/LabeledTextChunk.classPK G|$>>vvs!<`edu/harvard/hul/ois/jhove/module/wave/LinkChunkHandler.classPK G|$>U9Ӊedu/harvard/hul/ois/jhove/module/wave/ListInfoChunk.classPK G|$> S =Րedu/harvard/hul/ois/jhove/module/wave/ListInfoTextChunk.classPK G|$>Ifi5)edu/harvard/hul/ois/jhove/module/wave/MpegChunk.classPK G|$>5edu/harvard/hul/ois/jhove/module/wave/NoteChunk.classPK G|$>ٵ,, =ޜedu/harvard/hul/ois/jhove/module/wave/PeakEnvelopeChunk.classPK G|$>qq 7eedu/harvard/hul/ois/jhove/module/wave/SampleChunk.classPK G|$>e ;edu/harvard/hul/ois/jhove/module/wave/SimpleTextChunk.classPK G|$>Kl !7edu/harvard/hul/ois/jhove/module/wave/WaveStrings.classPK G|$>%Aedu/harvard/hul/ois/jhove/module/xml/PK G|$>)+l:2edu/harvard/hul/ois/jhove/module/xml/XhtmlProcessing.classPK G|$>6PD R9edu/harvard/hul/ois/jhove/module/xml/XmlDeclHandler.classPK G|$>~O 8edu/harvard/hul/ois/jhove/module/xml/XmlDeclStream.classPK G|$>z(7M<edu/harvard/hul/ois/jhove/module/xml/XmlLexicalHandler.classPK G|$>GzS ;aedu/harvard/hul/ois/jhove/module/xml/XmlModuleHandler.classPK H|$>۰  META-INF/INDEX.LISTPK??ojhove/bin/jhove.jar0000644000707400001440000022552111510702110013433 0ustar garyusersPK I|$> META-INF/PK H|$> {META-INF/MANIFEST.MFUAk19]zmE;H+-Z{y;c*NN,g]H#sVN9[ b)?+'YHx;<L|1=u;g';BBTG9UJ s`nNK?rWB/nPf`9;E ñكv=$*G2*+ֿ" uҜAa-8~ PK |$>edu/PK |$> edu/harvard/PK |$>edu/harvard/hul/PK |$>edu/harvard/hul/ois/PK G|$>edu/harvard/hul/ois/jhove/PK E|$>455edu/harvard/hul/ois/jhove/AESAudioMetadata$Face.classMO@QlTTxDcLDDD nJ 2N a}vٯO8qP }0\4YM(wHۑ4Fµi>*?RbD1c%ZwVҗVT7%}޽5{t5|W.VOmkۉvij՟5Xѵ:)Q9!dLfT=8p6$J;'\<a I< dܜr Ռɸ;e u66ؒ6J2NPK E|$>D!9edu/harvard/hul/ois/jhove/AESAudioMetadata$FaceImpl.classUmOP~^u+c* "":p/f+i;&. ?-۔D>s9yϽwx-!q`^Ba"!Wg%Ux,b=Og"6DlbHZFѬV 0 کUh<1D`Uΰ|bXeͶ a`5YZYz\jvs/[hh> e9TϦq*n5eRTˬ[pJ=90 [3+Π*A n0t gK;24F++J>V,֥z;XXieʷϞaI m ]ZC'K,#6/)aw H@})c S }-ve-K)&"˟|,S!*ϵ-cC21$⥌vW:+Ź%;7xm2^aWn0,vQce5tDtRL\\IAl˷m=[=,cJUrؓt2@*ʼnKDtjE!ә:XP"uDi)H u2Ka0sd+#gϞLy~ ~Hΐ ᝏ; mq(|f7g0s7gܭ!dmү?]/FbsF!YvͿ9X5ABm%$L5Q\~PK E|$>4;edu/harvard/hul/ois/jhove/AESAudioMetadata$FaceRegion.classJ@њ4m>˂"<Vz4&Knp|J܆U<{fy}{~p]{^,LsGic^FBxHfq.<6Z]sCS_h;m6? pɡqӥTp ,"lWhFWq,s[c*.PK E|$>D?edu/harvard/hul/ois/jhove/AESAudioMetadata$FaceRegionImpl.classSmkA~6/wڦo5ݥzUD*)!%ܕK~Gi6%}ٙyyfwa3t#jRVQHc|]1k&Jxc {!VCkEeb CE_(s[4b}30^. 16] KO9;4bXTINu%N*U2sΐr~ b!3@ah_>9Z$go~oMLkI6V'$;QJ!ad,%jJnL1Vˑ"'jPK E|$>-59=edu/harvard/hul/ois/jhove/AESAudioMetadata$FormatRegion.classP;O0=8ĞM;՘ b4gdx4jg}{>bSFS4Rd1AݼٸH|pݙu.P<7.SozA}e)gr>|1jSV1mVW]K?6cԦ S&#LR EGI> ;H\i1)k?,4eJqEluy7CMpxfK(9WPuXC V6pMV76R PK E|$>Aedu/harvard/hul/ois/jhove/AESAudioMetadata$FormatRegionImpl.classS]OA=HK-"l"~b Ť Ą5MX7Ob&6&&껿_`l}@l9ssܻ~0$zA/fŸL̉嚊y7T,XdHn8AnUVd^foLATzjc Q8}ܞ{E>3VK6y!ߩ ~ Y/ CͽFH،+H[0! ØЇ3ҐdRDžUaX:'z{<ز+4"y!͓)XZή] J>8Ļ$ !гĈBLG1 H$)8K9Q0n4/ 1 EU5>y,FiBF7>#>Gq pMKmZc]Ֆ8&"zrHO*dRwC_ e!zy+( :x4ᲑR!I5،%@· A!xbJɪVK9}si -~sߊ\MkPK E|$>#sK9edu/harvard/hul/ois/jhove/AESAudioMetadata$TimeDesc.classMN0F?CIB ڍ%8AEB\`GMFXpUШlGo_qbZ`gluw@Qv\dQ,M/ӓA3VAd;Jr.Mr-̖=)tVbWĕlrԑlH{ͅX?"8C_(ny10̐Wϸ4~PK E|$>=edu/harvard/hul/ois/jhove/AESAudioMetadata$TimeDescImpl.classTR@ I[B XcAQTPhQRPgYHmMʵ7 /xggsx6Ma3}{ٳ ` Xh$n <{ DZtlGKB⾂)3 2e^CjE-jvE푹  {u7AF٥Y^+z*{;9:W/9޲M;0 & i+b:V^|̷FkoVɡa*6Cr\pV,F%D\tǁ*T\%x:ͥb U↊,t #D/tE9U`%Zz]r]6_/mnVi>زԒim0edu/harvard/hul/ois/jhove/AESAudioMetadata.classX X 1v]7nMHZ ,G Ib!ڕ'6iSMLK$$*>?3o޼yOz`/+>f}>x3L^&1|ЋЌf>#"e1f?1?}A\O14 b "ϱLK>|ǯUF_g 67}=}؃,~Ћ^|/@~?Qŏ}?gls/~/)#OJ!_*|^. $UU>%9*CePZ{9̽9&tl<  yUڴ+.H0O1SW$vEbQ:*|R+)A8GbB >L hHMRS`Lޜ>cDt4<4ti(-\a>+I󔫴T,&rFS2QItrV)0g YҐ=\Z,ȟT&U#Zʚg SJh'䉹9U&=ozNOdD;SپXRұxVk'^:Vtڂ6̂$M%U#x1ܝ.2'S. 9[_JGR/(jB%#1Yզ %`Ϻܐ {]L;M1}^";Tx!^庋Mo#~E+Il9clwGOcI7ɓdI/J鐐P3 %$]D!+2G R)4~6m ~L*& %ƾf'QH-R"b2Ԯ:nUGO}>yT_pd,c՚vY)Iô)i6gBCiD墶@;)Qds~֎K{Wm;?P:bMqXS4lxݔ]T i{\XcB`ttxu܎-} ynӕɡyk;~&ºV{eopv[m־UtWT$]}=.T^m&(dy۫:ś#Y8ݩL|V•}v穂~3.Z;l|+.K~v*ѽs+YyT~ ?qT^;;UQk^ ̸3]Ijg-=|L7Uq{g5r2nHz#l_q1FOzhxKhLxPK E|$>%edu/harvard/hul/ois/jhove/Agent.classn@:&i_R4q 'B\$Ro<q +Q_793?~SVu,X|,X6XZxd@-H})Odaʶa840Js OeToaMd 8A.`&}5~0c>{E4'l8){řZvWiD9o*nO7M5n97*0R֟_,d=J] 3Xe'Ʋc?Ƹ'.\̹8y XZ,&KsK@13vo$ӫJe0e7,b<7*BeA/^"PCxkG0#T˸R6) 5_J5j5-6ŖKZl+|VvW-.qdP4y9U=)~GMWP==~PK G|$>tv)edu/harvard/hul/ois/jhove/AgentType.class]O0[ںmG@1`||(b ͶJmPi mP렐Vg] kr;i󼯏p\"6 ±YBE&ʱC˱Gq@ZhpPjݮ4FaS}3/tG~;fn w5-l۶-Zh֥cos e8-4y(䂡Zz3O{b8óFaz>lװģ#EIBoa +-HeM:0dZQ&+'wqtJS:~:4R7g' ְFE߉L1) /kˣF$(ҕT4#_y~0|UErã'G +dU̯J sSW\Pk?(WPK E|$>l9&5edu/harvard/hul/ois/jhove/AnalogDigitalFlagType.classPMK@}$MӪU̓a!ABOؐn$?J] <8ޛy G,4 LT-Ьo&D]@w]fLEN,-X< eRԍYEǠG`^'woM]_ȑ1.Zm F#t<{A2Yf>ڝmc FM:l8R$848E0G)+,k`WҀ~zy St6]$yC[-u M+?PK E|$> ndA#edu/harvard/hul/ois/jhove/App.classn@I$ MSJIY8,lj%T&!.[#D^kDZC!$"swOau ke&uQ)BCkMTUta`N?i@!H:C=eGԋ1q^?^s~'//랤A:HMfcQϧk9[F /reQdhz6ZvGc9v? ۃpڇi2Jg6`9b%ǛKKKq9[9Q\jZ߰RL<PK G|$>=o2edu/harvard/hul/ois/jhove/ByteArrayXMPSource.classRmOA~V^gKK[*PmGIF *9;DI$(C5/ٹyyv晹'|40c`ޘ`ZLmLü ڱv g0]&Ω E ?+%.J^%Es!zn͐-L]=`~kv~,[{mK  pIT-})jR1D 6;+}aZׅ UNnݝJZR S,Ŋxf`aEm^ ㎻:GǍ|0sG}jwaáun qԐ!%PS3 %n?ˣnO/ YڲiZOF%!=紥/o qҀ=0Uu#f;W;NFO.4( A^݂H? >D4J>'=!֩+$PK E|$>=3j(edu/harvard/hul/ois/jhove/Callback.class;o>#vvVv6FĜlF1 OIJDļt}kMOFԔRĢĢbT}gnt@@PK E|$>1~(edu/harvard/hul/ois/jhove/Checksum.classQNA}=,.$zI +i afH8 /4x(c5I;Wޫ'SNAʐSb!TF}m>iXi;Caڢu*U1C']!7zno`-[]2\hUE5`1IDm :kMF6%FUwN\Xyx+.KF%iv-UGFG+ovox=G qD# ' _FG4=~6D߭&ɉ)Hibn{~2FrEl S N Vp !q)`DfL(ؚ>K?B=!K1m %vE5?PK E|$>*3edu/harvard/hul/ois/jhove/ChecksumInputStream.classTMOQ=o: ml*NQTTDİ C;m)@pgdFM&Ƹd/rAC"]{8=/}QdT@WpinQq{(G8z# /jGy|LcOjien2-ӰFT;3e%AVah׍Y2yP/ef[1WN K^)e;V3x'L1L'/rI8W[/I ݋xiVޘEJ嬊cK5OrYچ]!O\\\BYΫ)B_HUR%o5EA㪌 ?#"cҏ)L GqfAOX%_EǪ^aX K}=i_MKr6WKHWDH{r=vOvN `z>|@>xwK|!`H߇Ѐ4vjRE=.Ҁ7mqbEpimh-R6݀<Ab>wLtωe?1G\he*r\!~:-5*Mq-. ]ڇ1),{ocrX .ayhdݓ^{\18#ɸ pn<׳)E)Vg T^+QR5T;i_PK E|$>.ef,edu/harvard/hul/ois/jhove/ChecksumType.classPJ@M$MUkFJȒA^<&4iD$gGkoagfyo@G&Ltu 4M(6g%p@K!A{.( Jyʄeͣ Ū\><撠6v aAgظt6p&<˂NMj;-l)E}]i sTXO6侮g0ؖŧWl ?ܻIF u5u PK E|$>4}SM8+edu/harvard/hul/ois/jhove/Checksummer.classTS[Unx ɃJ6@1hT! -VȻ$7.v]VΔ L҅ Gf &xuWd>"3ڸ {~_`E#:1~CI )ZM>6i!f8HCGf&:SDCcʦ1,Q$b|S,\)⻕euEBGUreI SOn{jV)i.ٲ \0t'-`3l*HK@K/RYR$ESרo*RD@ +F\%?ż, tjpk l[bieIHk`]Ct'D60yg;) f&0w5 clnАŦIDZ.v&rȫ(p(i01FPƖ@y\&k"I?%4ʑ^ҋF$]FRd=ߒhZ&7JMNWe]^-edu/harvard/hul/ois/jhove/ConfigHandler.classVyt,{W*818!Hm8'6XKk{5ڕ@[^КzW=h&zR}w__{3j%Gy7|<4[[=apwq/1y;w0;dr?ɻ{e/d2>F!)Gya#()O($> > >Dz+/*8t#/xO]c2PpO⬂0W3xV7¸ߔ-Nȷe|Gw%4YͲ$Dǎi Z"gI`g%(-<|83H+I2̼&Gh^mf:cƘM6t A3oZޞвEiLV/vatݯZ2ϳm=7?dEJHy5g=+15-"Oki/pl\GL-فn1`X#^d uH*wcVRE+ wI靐43n{E{zOcSY;$#թ "gS&nڏudɠ]e2x?ٴTԏJ: 0ʨ`g=$fa6&,m1&t.$m-}+rHo1mXsOQҶ^'aptz>S3 jm [fvAۆ}Bu/ު[v,z?MSg݅vE4TI^&STq Lnbr3[a1Tufٜ<ňRqVOjm6מ1*l*qll16ݲ\w,i,P<T܈Ij>%#DF o}*~HAgBՋ%G*~^PO@OU ?pszaYivEDb_Wt VFůU;{eIş m'Ӊ(ʞU op)&B&1W&LJ {9[+}y{bvYR)hE 31BڠVԲh-o=q/M`m~PBӐt$4´ $?b>Bk5z`jљm ;j_B':bs*3njhl:U\FLڃ4x2=krDyN>8ƳrOd#6-9U{OMwh~]@?iY@ȃO)<7f\~5~ڍ/-x Nc C;cbg\E2_6K9FDabfDea!XFSLZF3ٵ]tyIk%eluiY̹qX}qOQnc5aكo {p&ׄ[=| xc.|[MfϺPӺɳ`׀7zŚ{BM̓cPޫe\v`cA~pz.QU\Y]£V_-xjfїKK8^ KG/j Wƣ= Rxl(% ‚'6"f'$A,H\ ]׹eێ8YF:I_Yx4.\\ Mwǣ/6^"g %y7ҳOad Nf-;n̒t$_o,m_'B%$%txWp%O:QHxZAgHǥO4:J'ǤW#6=Y"ad-.&U inX V5|7}SIvǣMɨ2edu/harvard/hul/ois/jhove/CountedInputStream.classmn@E㺱HBSAĢB WE,*UzP܆8J&|ĂE7eĢ7Y7&͝yo?~~?pM X+DUUJ))pM\g(b+^H2,m&Dv[$ 4ܓCv 2Jbզ➌NDga6@&id`os&yNYk XV젂 D<p ;i2 D/E<7$ gGIO^ZO/Fd}4 I45U6"(mϟyoоy݄6աtD#ox_}yS5#e|/L_`/G7K[==N <oi<#(edu/harvard/hul/ois/jhove/Document.classNAƿmnrtr h$Yص]Rd/$&&>e'R|VpGb>8'9YAq s"`|2PMٯ?9OQ]̗_Ɣ"ŚW8/5ioUt.pI{.K7 <-]x%8- 1wIQٵMv7B\ >'Jt@t,edu/harvard/hul/ois/jhove/DocumentType.classN@BG7\WܪjLj4kJxYa"UlM-$>D2Ό5M}trΙO{I#E42Ŋ*EAr"+Y(ISlHnRlIn0Vj&A[]=7ln'Q G#';3m^XCZwղ]yD<ߋ &;׿5Q+Q(p+ba%F^0. { )?a0qLz-QaJZ0&Cino{F^ +N5#.Herdl̩ӊ M`ND7ȇb ]~ qr]9Uޯ<|@9S>|H壿PK E|$>g $edu/harvard/hul/ois/jhove/Dump.classuRRQ=7aLx$&IPQ R%j  TPqV7@)VM"qEt>0"n sG]РSe } 9ccA*%A23k Wpxٱ %w!n]ʶcUOBp*f,\XKve,;#0` 4RmUmhWe%Ϛ};Vj>{/PcATs<Enąxi=չSOt<ńM$ǔg; SY]-XZJn;p^R殳36r /pK^C!f.M-;_<Jq ƬTc?+NɽMG 09.: +cOuiO3 !QgDGNx#d"oE3MKs)c4dB>/G4~u'# *d##~QHSdSh$yB(/q9&نrd(YI%]hoB Q/%i:e)bl_=)ct77)"S PK E|$>#/edu/harvard/hul/ois/jhove/EnumerationType.classPMO@}SJP@71&ă kmҋM4&(,x||~8B6Z6v\&3+h"iDA']w,\pMQ CLNUė,qikyew:QiGÇyׄ U 5Qy4^ !]ost 6*5Q"xEh%]fz}^,/F;W{ܷ+PXkMF U:>O祤nH{,edu/harvard/hul/ois/jhove/ErrorMessage.classMk@511Z?ڞ߰Ы"T}!!HGؠ݁gXއe?7Xh1ڌGFFFOzx!ܟ1edu/harvard/hul/ois/jhove/ExternalSignature.class;o>#a.6^"A; ;#Mf^f#COVbY~Nb^~pIQf^OjJ~FbQYbQ~Fi~~f~VF~Y~pfz^bIiQjHeA*Q C!j5XSR4=ifG  Bedu/harvard/hul/ois/jhove/HandlerBase$SynchronizedDateFormat.classOK1_moZ^[ǝQ 9+edu/harvard/hul/ois/jhove/HandlerBase.classW xT>732y&L$@Y2$b"$A$#h|̼$yqfVtZkHKk5CJZݵڽvz}M2K~9,;Ϟ=q jN;ߵ9C;d⏈bsv(vHKk~Cb8MU~gc. L_+-F4/m$wF7DxK-Ίp DDE/"2+ʲll4"ECSrE&,OdBD Z,YD"+!zfTdsD6Wded4*'<;*ll-Yؙ͖-Eۙ|h"[LxjDVKB]$[! J:F15ާZ䄲N R Ub9W !1hlSB96"B_ ;ſ^"JlWk]%=]A%jPy<4` $7H m<"ሟ +WP8#rߙ1!O$:<OWWޝhQFQD7D;D0p@"NFCJ0ʉ%ֈ 1 fJ%BX8SVG/sOs&5y(f'dʶ@&RKbE# E8oInkrtIЁ;I43!wC]"U {E0.rsPkd$J?ep-Z8S;`9l]l`! }%Ta5t*]os(JX]30ڔh0R2EnIʑRL6+ChʷHpL &^4R;bjPǧI镘w&MÉ~qq;i_!SUzv0R 9[!d耙؆f  Bmnnps:hD/yY&V92Lh`E F0#a +xMdLekh6Dh By1~#]b׶.l4]50!uoq-1M-F54##{Hp+ƅuՈQWsԸO$Kޅtp8W^HxVH5J %p .AuUc8KcJ f9Hl-kX %\+uFY~/hZAqcڶ@sE%ʊJ O;-wtvrV%tV?f+4<'p*%x8Cz?FIbrmfȪXۂW<8Zb[Y7Ϋ" _zhO}VuJg}%Jl^Vل癬WOJbcߏ8۝ƜP/Yq(gp78q2a&Wr z)(,ЌO1A2rStG."d=*>cTv){)[2؟4e; l}/g^xD٧Mf)_tTϘ%Y ?>gƯ2yO|f<= |Qg#]Yee|IN~NE-%bİhIX鑚Yx.%g \GRtH'aiqnFSgCua~b$X6.5G\c6rNX'԰Up\i2OXoqEp 1X1yI}mrwԢ^7A4{NVOy)XԊu$c`:"-^ki-p Xs/beԽ*ѧZauZ Vr\u4!`5> O̧|:4+BK 'Z&'->6}tN 2j(q#ݎ?l PK E|$>7_L*edu/harvard/hul/ois/jhove/Identifier.classQKK@MhVVC,x Xz-ѬmJI$n+K?%~C7_Np4֣O6*6zy JzCs؍<D?~/dG_F-6 ixwcW ܠ+Tݦ BEd|up^]Wk3$.BoeTIj/%h=DKT5; ;pe8Z%!~sߗ8MڙN3A LѭBMo`AZ $K:#G3UuFo6RښPK E|$>2eDP.edu/harvard/hul/ois/jhove/IdentifierType.classn@g(N:=.nR7PvUpPH*XJ b"aḴ1c?g?~,9اا/_b>~*57ob~.='ؓ)ٓOPK E|$>D$+edu/harvard/hul/ois/jhove/InfoMessage.classj@՘hLU۳9HS-,xUzI4HI{Їh7,̲SMx`<2:'=}Fa!*W"_n$N@[Į'R8'9w4Ԃ&ds2PIWǃT827^*^jJ6|4^Flѭ',>uc<]P: W*mnPo`.PK E|$>dGS}%1edu/harvard/hul/ois/jhove/InternalSignature.class]KA3J?nn@ Yp5[c]Q7A"tGEgt 8üp 2~x]h_D)a>]bGYp¶a]w(r;ed?PK E|$>E$+edu/harvard/hul/ois/jhove/JhoveBase$1.classA 0DW%u  Ӵs<a <_ )a}vqMz+%a'ՠ w#w6վ 5~}x Şt'!H --Z=aYW ~J0G*&M-OPK E|$>HhX?edu/harvard/hul/ois/jhove/JhoveBase$NaiveHostnameVerifier.classRMK@}M[jЏê7xbvmiŃ<QTDDfvf vȠ\RDl0b_C'S(ѐ c?L$4Lh! T|hR4 n8$Mdx7G*u:<1z=IUt6Pu'Bk&HCҠ%P,Aܶl3_ PǁcRɈO1߿ۘaz* v,|?{WlXf ]JEjj`?z ,9KmV@.H<ʤ6X՞}k9 4Ek>PK E|$>mO;Aedu/harvard/hul/ois/jhove/JhoveBase$RelaxedX509TrustManager.classn@8i܄5P~J)4i J!,LN,UbP; /~ܙsmh7Pŵ:Í7C .Ps}JF2UfL"Q&A:|g. \'N)kjoLS^ujxd,c2Ny Aq!13qOi'Y;"cvJdyR?/ĦK=Tޗ? s2LYKl\$Mh"ļ_ ![F2uD7 >$:~~@X#fof)#Fl?ǝADw?EoG/ o'?6P,sꗂ--!b3`*؂4*hyjy*>jsJA.cSXCPK E|$>\;@EOT$> ST>OSt~g(ܭS>YN>|.; t^ċ(qR9y/B/%;~͵ K~/sr Ug''SJӨWtԹ:|v5::jP:j֫|=Nw7&z6P1|ެ-íT3\~-q6F|ou6'iv*:ޙӀi|~ ]KWrvp%9@ >j!*´zAR;U D9_K1(| TKÿNŅN~/2*2_+Tv+U~ZP~5I5[T|ɯUwuN~ 5ot&Tܢ|Qu+{~߮D^~wRr j|ާK>깟  a'G,yxǨi4rZɐW> *TS  Ϫ[՞S*|gR *|h*?*%K?/GᯨX`'8TϨUש4s&A~AԾE}_QmcNu'kK S[*~}]*>+ ʲ0Ug3;X*JA'rOS'?sϝY_#>ӣd<- u<&vr>PBB(%RQ8BQSiP:C~o8Ljޝz,k #ހC1ȯvkHۥoCvy#:s;=|%TP 7Q ̨ o A$gKH0V+7bV3PZBbCUժ W5453P+몪Wn@و3WZȀ|V窺uVWӪ r,mk72oil]Y՛76z"Ajw[0A*0Hoޮ}~ZZ;.*_B@k 9F}gD}7\Zo72Tkz$ʃz*h Z DID-]nU͖Ko D{"EaN.$pgK#¾7]+}!_op@uэD4i SOk%g~6ovkNoh7V/r&T:d 7٘8G74ԠQ2[Z{B!=i ޶D5*tC+Q^#aD"v;t?~/@߈z\lÍd4F4ew_'#Vlջ#44#-Ȟ1P&1c(EIHe_810tHk'-\+ufiDPXi5Q!NQd͆0p5q8Ui&l獓mSq& gD@ "TtSq@kط4N h3wk"BG M ]čS3ųǍGM;!nZg\(AgN8q9%XۘPO%3*xEv7REo@Pm4q@_j",L%nCjAr ((y)2b E\՚Y7Isޙt\x̒631iR6Xq-< 7i٦Kr4q&GZ FM|W\`tbЏ>-b705ȾUdsv4F#`<NME{79{p>!{å9H$&@r-7ozaٍ1|CD;Qq:z T}4}T`z@%N4gl]]u13޶&PxP< 5v@gUU6 N&F51 i_Cx\ k $ObxjOSq#fq7z#z-V?Kϓb xQu&H`%&^PcMx=:R5-bPY%oݘPR]H^ 3n]ް;^c0]4 hEx7|4ϲyC9ReSS$.n8:n^37Y(e)iv1@$)@bBa6=xCћ=ꉃݭo+r!킮 Fq٦pnXFx]cu ?A/귝Ae\یJ˷s]CViйRd>Wb|@ :IF]fLlh=Ubù)?0-9lݎ'luѱu]Yn\תQ6OHQrkN<J޾X,8ʆ鐷^Vc*G.23os~Gr5`۪/5*`sU qhnNqv@囹bq2RۤI{eRqLwu$hG6H^…0l]e=h\@10DTyA;Jׇ8J7'&4npGy2ao z뽑Nd-Vrtzjah mqr- n5pЇëTl+='5O#X,-VY`@aL9  $e.6.TX(2` }Ehfx^:''E<IqS3B9 } +/c#pd@~够qwBJF0(L)Wo*(&}} B* !HHW7z8\οɠȕ׸C-4G|[~kIµCz %Cp=꾁\ (؅Q}0O,QƟ#+5_Aiy4F4 5)LadiNװot D>:s70R% izȡðWo󨮴Å9Y C߂;<}0ӣ̝  J]ȥ.Yg7<'{b=}p'˕\p?(Е<.Ǖe- -ɁsVr̰(2Ό\Z-`(JYVD`cE~ WLcAɋts?Q@dR~C9OEiy3.ʢ탿R х'C~T14(ݸdRƿ ǘ+jԅƑI ,'?%lukI+Rj>O%΢fz #O饃5A ͎HCJ3áoS Dc4e62 CYF^'Z.f}uV΂xƯigC*I/uȞ*xg#BQC: id/0TL1^l D,FqaX{ƴWFo¸O"FvVTC[3A&Q[|T#8 f@sg}p/PF?3!%kP"g)T 1?wHbNl9K#lXӤ 2#Ęe80m(1xL> l ,!4d"X( i8(}#J\ Ղj.,9&zokj9h7*Jb>I]OatC~p4/(xow$$I\,<&I5}0ż؂ 5Q*. aLLPæ`#%'|G ,~h}&18;$ M:x`IC&xk9H\ q6l-6-H'PJtkKrJjFl?5$餛lϰgǤnsQw-KJtkRc 1bcS-IiH6x= 륤SZ%o/'JfYTgY<4)xYRϲ~vlj?X'Nn,ϓ÷X7cM}FmRo0K[0T`o%#u/g[_%ϱowlgMa ugNX~s| [܃i]A8-ͤcܒ e#YXmqY)'U-[>Mf ѐojCZ+)g^̏], VcV;5º4h4j'+JҢ(+ȦyDv3E aF1VKreuElHX-Wul!lQ-)ύ7ngt\_޼-ub |X~W=Y{#0g*O2ݙpa,ǭ9NQ'sL LL}Bm9[g}sJZ(Ld%X[{2v J& _PK E|$>}UO.edu/harvard/hul/ois/jhove/JhoveException.class;o>#^.NfYb✟ ᓕX\Rn"84RSJ3R3Js32R@kErjAIf~#0(("3 2Hy@Hjmg`VJ 3i6- LyPK E|$> o`(edu/harvard/hul/ois/jhove/MacStuff.classSKSP.I{K*J}ly4O(0LmJ[#/nظA+G9$͙;|߹  dp!.rc`JS1m*&f8f98 3hK}EU%Cآx qjʖ-bӍjj+`}Mh2)rJR\խr;^}2Td;tFZ~ؕ~@Gфk jEʢtT1ҵ'7q &+3b C7U]Q2 e6Nf6q c٬pUuc0:(9Njj+踖rP]izaV;Wm yb5寉{?-1l6TaWzNDFwx]E-I.>U8N|.] " c~,(f>} zq#8 d{}Cva8\e,FI7jyGHi;Y})[ڼ2%=k3l.R*b9}}`ҳ.w칯6y Ϻ?`-#SPK E|$>'edu/harvard/hul/ois/jhove/Message.classNP -e(u4qqÎ,lI2ۄD RO j&ܓ;%r08 Q8vB  } ъiXfMm4GݲmS6ԑfԆ=+H˚oW2]Kc`0dm&ͬdY,P9C3Ţ4^/"8(b"NH 靉SmQj,u7KlFCa$zˆAGs,i HCU<@L)%oXt$˸qe+[Қ9ȥhC% R!H3KK%e^yyO9%ֲ PK E|$>ʫbB&edu/harvard/hul/ois/jhove/Module.classTiS@큅US Q]<8X,k-*~ &dGYLwaK^7=ݓ<0O`)}(}Tg!пRNL"J+V rsvs)T'y\ ̶FʩB:kdq)1Ԙey{xMGOU( F]:8$>9^dJ20NV[QpNyq.jd2\x&5Nix ߄[-6x,xl9xxGy<-̳&9PK E|$>M|&`7*edu/harvard/hul/ois/jhove/ModuleBase.class: x\Uy7˞I3MRL6Ҕ&4$%)-jI2d&L?b+ƥE\@qA 7TTDw97[^9s=s{K1҆ Z_+Ao`W3Rpx8`eO\x%313`p (I<!'^o\4a'ހof G- &ocvp@ {bn=_|/1߁[|?::Ʋ>h3vt9|[:2L1?dܧ`/yQ eg[Pob1_d/2\?6{-M!Fꃾh},up#d4B(ep$ O &oYBiBh8B5~/H/H*Y$Y;=*|NI> '肓فh*&&(#.>s/C>=Rot#)^v秚~I5=Q]*CyMq[g4/95OQifrxtrFc8LCHQ:X71rk-e{Z: k7[)i96hR{ b?MJ+e]g @4Y:5nio7@W&.:BRE8;Tƫd^1x,{4wTņx'}F2/ϼh'?_=1#UճfA<9 ѳS$`]ʓح-fKͺ9^ky syN֛K|1r~Wu2}b F3Hź}wy{f6p 2$'r2G=6ڵ=.f5r|>Sd]h-X.-Z{R@kiYўY'9/< Z hCh鲣toZ+h-1~EѽHk.7QG'۴4X!Oxf=L9BV2j 8g`~[ אhۡ%6ZK=SLʒh,֗ < Ky٘5V,zCN[9x%ם >|=@= WLJzƇDT8ه|4CBX$s9G'ؤ̆Zf65D۩ kbcz `s29-luwekPem䌿t)P4Ӱ֥}B @,d|i:OJ5$ߪcSp9P֔P( Z/=$ElMĞ(w|[ݴ:\n<Dϔe-iE bb myvUvsY| 1EIkJۈ pRKܥ6ȩaGXfyLwMx`U(bS n͂r0m4R&"%cStSFdH>v%fr5u`2MXZǢ41B%^`"2lf K&)凷$VѮ)g^bʃ,XenI8ۯx^ݡ#o-EpSp/&(zcg3P=/ J$sQqO9J si쵷};ҲXLnveˆ#EpnY]-[EDTז ݴUlOQ5qcIʹXIXW7}2Go&Wo0Cy&yVd5o`7ԡ=jK!n"l T1edu/harvard/hul/ois/jhove/NisoImageMetadata.classZXj(,$pqc8S@`,A`[qEd IJKqz/q^{ٝ!.|9w;w>ko\#BKUF}rtP:x*^x&-SP C>(c>$SO>,s"K/*k&[o.{~!G~)g~%W_~-w#O?+o'_/0~  er@ Uj@ fz4ssG8,&8ڵ_,[)vuD bMR,ARTX*ʼnR,b+XfVIZ5RE$)Iq2Kq8Ӥ8]3hMRtHQN)6Ib[Bxp/tP&zK+řRI_)JMRD8KR-9R+ELK1(EB!)L)rŀKx p<MJb'wIbL8R/E /EARbR=R\ ŅR\$R/2). )*)):KqQ[Uۤ;S[{W_xP0)1<>.R<)SR<-3R<+sRP)^ցpp b;vwǗe|.9"Z[BwYM-XwGp}`Nb˽#d|pwo_G$ "F7ϝԕHoWk4 uSvvuPZ# Ƕ> uQMj7 oG_3nLi^ {6:{*Tq@GO0C$՟PΛ`Gk;C٥.OO҈G{ъHGO$L i>l zÑ2SO[:;te=]]ˠA fV>o |ibc1H˩GY2ffβ[ 3btuӅx"_ȡf;3du+ "q7bTOfZ{p~O+i.={%GFiڒl[2nk0Li`w#nfof RdNX h^J/p*n٫~(ԛ}BzZ(=d/33 ɷZY)0YI8merHz(!3i {2G>sb:f6 t"31dRpN,LgP֫-v}42ђغ`2odHșb ^]gsq'rN|xOxv%iL/ R>3gilΑ\|EYfmYԝރ7C aĻ'}QOGln<8ˌќ$sbZÑQõ'.l?3A'|58!hII\~߹ ė%Ƨsi/q;4EaB[ڧZqtZӤNȫEjLg itOugQ랸P2;pDÑCgbz'l9<#S.vtM;Ya-f3Wm'S\v;zN'(:,18ۦԩhGzkl\޶3 \~tO=,)?A.QFkrG*R2)bxEcMxeM!?x5M7#k}I4EkFf͚AYzxf7kzXfԛū7kzަJY37kz7kz7X5mdU[Ŋ*pV֤ڳJ7o4fMo'ߦ;U*߬*o4f7k|J囥5UY|7k&f,߬˷MF+`L~;l@orb&F?~paM 8TYSU"\SӻoTgk>Qws JY3)8Up^*8[,FUYE*lf6lW 6lW 6lܬDYbvAY%5MY%*l#٬fJ6kdXfq f 8Ɇed+8fb5vxf Nn1"􄆳UX|n4!?㮲<>l|0eVnoHzy+ z0nys p1xxhq<q`/c\R/<<{3n\y@w1.y"Uc@1=(p/nv ݀>Eql:@ @O<x( ̀1Rx@p>``>q&=#퀇Ànu?~#oz[m:J\[!G|P|pK~G|(m 3~[ e8કKtRdSxP/_I+$(,6f)3Oq/&ɞqȈXڅwGP1, u̓TEnl^M]K&v/&gUW#1c36KÀQ`?\3)dJʫ]gm7vtRP$p+Tls[s:{Ln(@H?Z4T1V.L4&!{-';h}ƇP2@w/ I<е)XTh#5%9EjriC%N Xagz޽w 9ZP.dA2,tќ(cV>lL7rׂL4Km!+Ϛ,͚B(ռq$dGq*;he!ǣԖv3D|.j5O39j2Áx`k]iJ܍t*XbtH{Ȣ2# LZK;]LJ1DcT>cګH:G"{]R􍧆F3>x2y{V[N3њwaML:R::'pG`&ό 鐢ʁtf>+|4 HT8+1V=?a\a7 sidl1~wbXfL >h+#SzY2 QXL1 VSPN2tj$\/Gh38~S"ZxP 9!_|mpڳukX[81bRa;Еt"/3LS5gMf,)WL?JW锭T780U.%58^{yd8L@ C1bac KefUړ2M||};l{1syǍA\ n XZf{j+qUr-4Buk>4o.V>pmVU>A*{˔] eW*JʮQv'שʮWe7({q0Ngq[6]vu(KZݶnR6npCږTm*?iCے*oUmnWg;Vc*ǕTq eT찲#ʎ*TvM);lZٌYeW.%+[Pne(^eǕݧ,j^u+~(|*_*_W+{_NecIޢڻUߦʷjܩw}ާ>샪C*}DG}LǕ}B'}Jz3>s> PEe_R/+{HWiu8pA$_uC.7@47*\ Հf˃Zs,xr3@:t/00tUO@S*o~~Vo?d|xvO/(#GwWwQZ?қ4)i,YӟaSۢϲccGJպXF_dSҩ}=2Kwk+,ݣ鯲tX_c3ՙ:=,`Y&K{5-vB{uj6?ﲙ7̿ǾQlٺst\Mؙc?f=O'?eKG4s/1?B/ t_>R7l[uemQ߳`騦GkOrg6:7ޡ鿳ٚKK4o>O1h~/;,})f6XxMYzP] M` v94d%,ݬ*6!Z5KaaM{XzDӵ,=:Njz۱1/Kz^i,S ,KӍ_{6r ]{.[{==S:#XzL G2tZG^Yz,}:MdEl2\ql}<[{=׵X:%|给km|n6SuKكҵOd4=XY׵3_ghz%۱V*cmckA]{$ElEtU2:?ٽ~rծS&xA_Lwh͟>ߡ;5o|+χ45ۢv~|;Wi~#_Z<_MͦW77*ru1g|x>nǩNa^jL~{5L!_|s4?||ߙ?owקy~~?B4/ #5ߪ!ߦyo(k~磚5G@;j~YO8~<3<<s<-w|"c5^k~>{p|Bc/_M͚Hx~XQ_I_EWR_÷wiz~/ |~5^ ͿR7oKif-[9>5$ϟjim,W_ˍTT[n]Z=n^؞VoO-:O-zOF_uk=Kü2<]r<]'zɾW\h9msuץ5ܸVq]Z>N.pGeYośQ$-].D+|G+"Q2ru A Z^WxrWvyo9[;;#Qo.J݄wa^j}5 =k}Ryި hEE8ZYJTVz,UU0{8 GhA޹NO 'SHi$ |N9;$_<`'Kv$_&"{{~B~k }oI8um\t:WF+TP*C[r߆.>hwCb}ǏGcad0D|2l>F6#τgs4>Ws )/U:/W1^_#*Io:Ww.jF#oe1~"g='_zZb {{`sq:A忒oE޿4OUL@e7\0(F2~C QtF9XP~2rАnc%Ko|"˼^XF3~R5Ԣ[|vv>'A``#50[9Ǯ?\Fo̷[< t6qEPK E|$>~Z0edu/harvard/hul/ois/jhove/ObjectIdentifier.classUSUnXr7*kk-66@ ,lv3 S|-ϝQϾ?>Ƞxnm02r~|ݟ'oRG:7V|h]r1qM{Q.M#bR4HsS[rCܑfJ}WRG!\uGZp:jz`;i2'mn0 o.0(`Pp{{8KOَE.库Zz쭋/pL|-e$y|`ZkfYp4B3Tv%5YøU9Sxc.k.:>-Fڃ"HIY`:v E,2gEr˲D&5b` _+Z EtsfEƭHtI$ ] =ƪ58 㫛- +ȵo> &F7?H;<ރT s\|4iԛlfEm9KjudMpma5fP |׮uåmr]5}Y򑴴D WVxNzOYea%6siGI>jT"%Uߡ^;Lktn4GGILy~E[-B^$Ez/S B4&?uF-H˴C Q5Ő & 1ggtqgP3GB/DT=Bo&bM !l jJiѽ~CM7ѧ^Cm`D61@)[uځ]MQ0Ŵ \g;%"A *"=oMS>&g4d5 ~5sJ]EW8$8Fmp$vö1 gIO0F QPK E|$>v2#v-edu/harvard/hul/ois/jhove/OutputHandler.classR1Ot۵-"PBxNqЩ)pvedѼ|(Ǔ4H:i k^@E24A넀Os~0AeR922 W CX>=%#̐0c! 3'᱖"uҨ& |?am SxjE<1J9ǗY f0G0])B _?SꊨS _tJz`z"I"MIv[V0UyKCM}`6:P/SC{8 Oye>5vJ]qMCFcӅ5 a[D0-*Mqg~\kt|k`>@Vj;, X `o:.;*ֹU<]={sX>7G3,ቍ~ 0|[۰Xu =q|_8|PK E|$>TM> (edu/harvard/hul/ois/jhove/Property.classUmSU~na$BHJk$BU\–,]aA/|Vpq`z&@Q09=s6?>>|F.Џc@NᆀK"E)-CN %Nqb1'6DEq×q\v &Dt*u2x5偈"3P^yv·?)gF%:RQ A6|dgYjARu0E|6X;x6w8'Ol$lE {<Vy_nV}(aƱB|>{kֹU\Dg'߆7O`y2aUy:tp н@pu&;VbJUhN&:M^f mnk*178BM]и9!8Aha{_s-4{H'lSγ<;ha賟B-Zmx%9ccE ױ)/q(jc yU4 lOi/[$SYk9˿1X?zGe{?8)?-"^aw<_Y` =6Af8Envvp\ H>/PK E|$> T-edu/harvard/hul/ois/jhove/PropertyArity.classj@1Mm~մnk A\ĈrР41 >VBhЇ*:2sΜ/dC9# Y$PDé3 B/4\ p-&[}skLق5VϬ8ZxVESK 4.Ҳ[MjXu&tA#ˍ\VLjtOPgoRvEC,ֱ'XiѩCh@ )4.T9ũ$H56hAjopː6ݯ@ C7H'}CY!dUrZ&9#9+yK.y{,~PK E|$>Uh8edu/harvard/hul/ois/jhove/PropertyPath$PropertyKey.classPJP=MpHM+t%\!6rQ~%\003gǙ`v ZL6Rxz0焮i=:#*Y -FV\i-2]6J,YUfFۙH'woV&*z!O[;7/^fkUXpX,M ,q[>!wd _ħk/wC8_PK E|$>2,edu/harvard/hul/ois/jhove/PropertyPath.classVGFHq_7S%mbY+jh&qݢq\$8u+UZ;-7P4 i}/_ixZ6gkfv7oן`PprKG} ͏[1#c :q>*D'pҋyr'͑v"'gSy x$nQJAQCrx%^|Ї^Vh{(>>*WdV|Rnr ǣRgɝs|"Ǘ؍Xcҩ'2"r| l:g{E3 =;r9=h\8fX?vB["y3%s428}\#|dN.hDd.ȉ)+ CiCHIpJ3f#q34f-BKԎܯenY D,c\'u -fNL 3)$D4S/brmRH 5>fdnJ drJYuӤ #kydz+d.`S)(. ?O.g<9ZaвIXb_`ŌNn ]FDtx:g*QW)%^x bv$i"#o$x]} Tq@$gCWev4Wbu5PFTkBKlJ%:7TA=#TH _&Q4n<Ήu{?9S'B:OA,'$5i]Mb3+e7#i~o2nkcG^3]>@Bln_[vk5%ԭy:giߵ7ڵ6#'R鄚X[A-UZuOLfhm;Eϫ|2l 6r=RJMVеd 4U9udu_*1ij[r)+AszQ3zF K+tx}uI+`}h,t8`q݉md4 C ӯ|o&IsϹ;|)li;{,1JOi'=WE1췥wM*a) )06*ꐨӡ goBо+Pv;,<v_l x `o^ o dp| U-bYUB鳂Izm 8XK0:7[rڀ:83qxdc\Y"c#Gm7}m/P1b[UV"uS:J&_N{%>{ tv1lEN-pPK E|$>sϓ,edu/harvard/hul/ois/jhove/PropertyType.classOPaE@Q~ō[z^bή l#c%#g?hbW%y_|2K<Ӿ__XAA.'H ψtb^@, UqM$ ZebE&V^ n "n ԉߦNA*oۖWd,Z^x hA |~~NA ҅5 TQTho-)r%JIvu +úQ7]6\]T̚mqr-\l).edu/harvard/hul/ois/jhove/RAFInputStream.classT[oW]g8Ζ@혤B4N[Bk D(R,۲7MS"R_)"AB'TRz8@%̙3?. &0&UM!3,LLc>b=˞s,3pA@~QwJ.qVLTջ nq/έ߸"/`FN +8FpwTjTJy⺀>UXj:$,q󞳰SZv}܈Z'htN?s敫%niْrT$m׻2K&/lR'kް0!N([,^nLX8"4_E̢8m!SHŕ̢S_urZnd,VW !Wj+޼G[;"^Dϭ8E[E>o}Ip_IK|}u:?D}@$xe]ixPK E|$>2Fr+edu/harvard/hul/ois/jhove/RFC1766Lang.classmQkA&+ٶ6[h[즕"O)Aɐl Ylc{?!䠠UDzD3`e77חSqӀU\梁K K{ j2Z'.z=u'Iv=yFεXRS+ǽQFB 9>B=cze WMdkfb &ֱẉ(Ykx@>zQ:hG/XBtҮ'Az/t&D%gi.iWpWYٰ_cINcV⾁&V 0*@*y X)J29-^ i*H'w˒H;ŭxUT[g(#j p&t[dM['(p\:e)yi:TX7nH۳ͫ@ ܮAPahX!yb)*PK E|$>i[(edu/harvard/hul/ois/jhove/Rational.classmQOAk{\ڂE3b|H41,ަ%]_}?^Jdgfp0 pqޖog7i/v!s[f>E-X(y`9 9G fm`Sŏ7u )'#[ȳw֕ވ'^'edu/harvard/hul/ois/jhove/RepInfo.classV{W${miJH"IQ@K!AZNڅ+'NhJ9J8Zpq %\}ǟѯaij%̛7Y=Oxƍx0mT+O3yǻ0yg|U|! &_drQŗWWU<15%+L.1o2yIV-&k*`dw"x er%}^xCVQOL~*Q:^4grNAi}I+Yo4k "sBޢ( t3͈ԐR=e#HyS4  hScCC㩑 gNA\d趑>[re esr`+Bl N?[) YSX )N/򚎋F^V<.Ri1J\e;9l i[a.%+[|kͷfY6[z`l2wGL GUaJְWCur pRWĭYYӾ$:Qs!C 8#}ŭR\ƒE#R|7^ڲx}&wIɽV kN-5\w5ƫJ5ˈϤzE9tSUAfvgi mUBh5'![mx:9 RwcRN=R.'hCKߋH^/ ^>:Z=j8i&5îU?հԕ:DEh,@%ħ"r-6GT{)Ozd)edu/harvard/hul/ois/jhove/Signature.classTMsE}e6#!q,^$6IGN 96ZQI.i UK|ɅC69 ( tKr~o=y  \ƌA\9E<þw U^^a=I0M x!Iܒ(]heAR+} ޮVZ-U|C`nh[^ckl[[4+mjRHfjkZ%Ξ$3ɝ[! JW /o{;KcO$ֲ /,eOutKa_9,▹z ;$Ev\Ýa1Wi%[jcHmc6ø! 8">eg&^ƈQ儉 Mfkso{~>7QĒIJ w o?\э&zD]VXH)Fzr:Êy׽!p6;RvH#P 2.ԻpB(֐`i`CKdm&@UZy^!=-(0b'd&^2Qq*)3[ZDOw,=3Gǘ0q49NssV~ b0u \}.w`N <&c`5FO|>|ӽ-5D:{f.A ! s{l3Ssc '=}Ug{tdq@ʟ0% #~C?7PK E|$>r;MA-edu/harvard/hul/ois/jhove/SignatureType.classPJ@=gcU]mRCH)1I%. ~%Ό s}~}<vuP)gOþĚyۑ3pcĞhI=K|; {> v85 Nnl&ȵxKj7Kj4l7x51ANmMugn lDpOmbd1 < l (,Ƣ}$,2P9o-G4bTCC\JGM&uɽ S@- 4Yb2o*S(I0edu/harvard/hul/ois/jhove/SignatureUseType.classP]KP~εL3o`ح,34+9N6& ЏY]{<'2dRKؗC.ͿE R8&Hjko uf 4Uך`jϚ84}v?gQfuz]-FG ˱K|YUmL^[Τ^$xJcl#@6vHBT E c(Y%y56S%ܒP[AF蕿T^qE+Ίfc@˵l B$n[k7Ć lD<TĥPK E|$>v.edu/harvard/hul/ois/jhove/TextMDMetadata.class X[w B\ccl8`Is!۲ (d%q9}߽3mӦG:NnJnz_&M4m4쓄(Wߝٙ}RPz,EV.^$Ζ88W l.k;$vJ$vY`7J %0lk`^*`?/q.D!\!"":1q(A $B!0p!BH#L# "!#FK.C +BkCnB[nC;B-oExށp;ޅn }"DCF#E@'>pA!

/"< —,W5#|B6sA."?A)G9/~+_#C= /"%?" A+2?^A|2ÿ-*"NkfE< ^Gx"PTTLRJ*fTrT,TbE*TQABe*+QCe*Fe * Ee*'Qـ)il4+gFw{ 6ƴXk0Ƕ$⩴OkiM jzC>{@ y;4fAoo;bbWMBݾ g=)@{7}==g x g`ػG-lC݁=.;zAԧt߁D<1{Ƶ$@Tg&3ZzgR{ Bζ#4^lצr=>*9jhp i;+dQ\J$#zoag(MpZOfh\M`ZcuRKNLOFT4P(fd*<_M޶l[4M Ըi$"lo qS\ l*I(>NEڌ9Zx~Pqž%>٥5Y)kjXp1kSuS Hv]`S!m"U(UsѳN-/?ԛP'4)UDٰ2MrtI'gin,4gVZ ~eUPoJj$%+CU]l*)V3kRn+%K;7b wUR`Ūl>۔r> i=eŢܲh$"+<ydzZeY-#ۜNl>j |k`fA5{r{zrm=@_M3m֠7ru6[{Ɇ9'z򈵻|pT{K=8\L|lKxHDE8bZ:W G NF}!CmF{Wg* 媠\vG'>WKd'?쓗G} ȓub>qĔ=!~DZmm,HE'Aw.#z$Ď{CFcyO4H$C)-bqt˗x4]2m%^)M;NgqjΗ{Hb62 LkI#]$Fu/񈖌8g-z<=Ԍ_|q]5y -R{x45Y},eBQ*T󓣉cٯcz Og~-=ΫZ p) Mz`O k.$đd"8VGc1;--De,1Ӛ&`0obk-s)!9Oʜ5!=Mf?B[.f>$V˛_x_I\Q9]h<{03ﭛdN۰--UMe/֫}_>y'ޭٱ3&rբw2To4ŝѸM{|7@IblGl *8E ^BkKo(O,@ -2dq}xeAOU W ZK^_"u$f$|\PƲ@F cْ*?6u4ʪ\-kڬLrE\-댲A.efi-ɁG4)DŽ"azPmhֲ4,mzX6u:GκQQzLz8 Ay |f^Q~TGR8bo`)pj֓c5sV4ts.Bϻ7E1羱;,:mSnڍEmLTN\*O{Si/Gx%Stdbؿ0Uɘ.`m[sL*ʞFLtJpN iDYV{Ԟ!Y[^+ϔF)#H#5e2Djei!;L+1+YEjr2kYK.&Qsma:\Eg1lj:e6{~$a'/d@;NcFnH~`6Rs3*c>.kY\GIY@ōtD7уzHòv:.;YI.z'ĉGŧO<$VO<">8 z>I yt^xL慯Wyͼ-v^xK ߧҏ'y<, 4/edu/harvard/hul/ois/jhove/Utf8BlockMarker.classTRQ=730IP! QP@JU5 Y y9P'X @bn ~o@)H*UvO?N>^)p'2ȨCBZ;?:$\U5~^Nt/! #n!( \:\*Lck̚L3 gtkim=4\\ {퉕-˺ֳZܶ|$3REmAu+-Z,h eCpiVрF *¸UAch(m3 [3 fG0*#b g0JV1Q!pv8ɰ-O-IJ^ ClL.ULePY3IT=*"Q cY"]"eBL", кHfa,<.;ob%O\ijcC=-#ƢQVv)_VqS8vznzj&NOg݃k@|%}\kQ"%څU| BaXmz SQAQZ?P'(BVԙd09z*#o p(PK F|$>6"+ƒ0edu/harvard/hul/ois/jhove/XMLWrapperStream.classT[SVlYˆKMLB(!mmBzMcv[[pI*GȔ'KЙfڙ>3J;mwe8zݳ߮~{n"ׇq̫X`8dX,:#%L2/WT.5)ƥcʌxQo *edu/harvard/hul/ois/jhove/XMPHandler.classT[sV˖8$ -(ƘKJ16@cV%Kj~ \b~F+2\'G!u ,:[ 6D;& \xʿ.a;kRW./?¹ȲMg9pAM DUV%L4Лu'gupzy8FA^*ΦL' o2Vo4M?t9E7q?:pĿU 9"ߞaMC [ AKdܻ0 1V럢 nWŕQ,䭻}}IO~OGE8S}y/Fr0}D/vpx:R^yG?Õ(q\d"$^&ζ!?N%fiMNF& 6T-|# pp:U-5w/q@SF%rb]%\-dq|-|*/d;Hm9'Rmdf11(63+Lmn+)edu/harvard/hul/ois/jhove/XMPSource.classTRA=C6dY0\"\4nq "/ll( }}W4TIPMvk3=0 -TJ ~nV{KEe뎰*h+=p(CGțx_VLVJ9xrPQU+r(!v|g>{C0>wC[G+}M4R|xR0&JB6ʦ*.}7')Bŧ.ióGu+ʘz]x.arC"\X0$~BPK H|$>}BpMETA-INF/INDEX.LISTJ,KI K-*ϳR03/KJ,JM)aĢĢd~Fi:_??>D..PK I|$> AMETA-INF/PK H|$> {+META-INF/MANIFEST.MFPK |$>A8edu/PK |$> AZedu/harvard/PK |$>Aedu/harvard/hul/PK |$>Aedu/harvard/hul/ois/PK G|$>Aedu/harvard/hul/ois/jhove/PK E|$>455edu/harvard/hul/ois/jhove/AESAudioMetadata$Face.classPK E|$>D!9edu/harvard/hul/ois/jhove/AESAudioMetadata$FaceImpl.classPK E|$>4;edu/harvard/hul/ois/jhove/AESAudioMetadata$FaceRegion.classPK E|$>D?9edu/harvard/hul/ois/jhove/AESAudioMetadata$FaceRegionImpl.classPK E|$>-59= edu/harvard/hul/ois/jhove/AESAudioMetadata$FormatRegion.classPK E|$>A9 edu/harvard/hul/ois/jhove/AESAudioMetadata$FormatRegionImpl.classPK E|$>#sK94edu/harvard/hul/ois/jhove/AESAudioMetadata$TimeDesc.classPK E|$>=bedu/harvard/hul/ois/jhove/AESAudioMetadata$TimeDescImpl.classPK E|$>m0edu/harvard/hul/ois/jhove/AESAudioMetadata.classPK E|$>%edu/harvard/hul/ois/jhove/Agent.classPK G|$>tv)edu/harvard/hul/ois/jhove/AgentType.classPK E|$>l9&5 edu/harvard/hul/ois/jhove/AnalogDigitalFlagType.classPK E|$> ndA#8"edu/harvard/hul/ois/jhove/App.classPK G|$>=o2$edu/harvard/hul/ois/jhove/ByteArrayXMPSource.classPK E|$>=3j(&edu/harvard/hul/ois/jhove/Callback.classPK E|$>1~(E'edu/harvard/hul/ois/jhove/Checksum.classPK E|$>*3 )edu/harvard/hul/ois/jhove/ChecksumInputStream.classPK E|$>.ef,+,edu/harvard/hul/ois/jhove/ChecksumType.classPK E|$>4}SM8+-edu/harvard/hul/ois/jhove/Checksummer.classPK E|$>]^-&2edu/harvard/hul/ois/jhove/ConfigHandler.classPK E|$>Mɨ2\:edu/harvard/hul/ois/jhove/CountedInputStream.classPK E|$><#(<edu/harvard/hul/ois/jhove/Document.classPK E|$>Jt@t,x?edu/harvard/hul/ois/jhove/DocumentType.classPK E|$>g $NAedu/harvard/hul/ois/jhove/Dump.classPK E|$>#/Dedu/harvard/hul/ois/jhove/EnumerationType.classPK E|$>H{,Eedu/harvard/hul/ois/jhove/ErrorMessage.classPK G|$>ܟ1Fedu/harvard/hul/ois/jhove/ExternalSignature.classPK E|$> BGedu/harvard/hul/ois/jhove/HandlerBase$SynchronizedDateFormat.classPK E|$>ǝQ 9+mIedu/harvard/hul/ois/jhove/HandlerBase.classPK E|$>7_L*wVedu/harvard/hul/ois/jhove/Identifier.classPK E|$>2eDP. Xedu/harvard/hul/ois/jhove/IdentifierType.classPK E|$>D$+Zedu/harvard/hul/ois/jhove/InfoMessage.classPK E|$>dGS}%1[edu/harvard/hul/ois/jhove/InternalSignature.classPK E|$>E$+]edu/harvard/hul/ois/jhove/JhoveBase$1.classPK E|$>HhX?^edu/harvard/hul/ois/jhove/JhoveBase$NaiveHostnameVerifier.classPK E|$>mO;AC`edu/harvard/hul/ois/jhove/JhoveBase$RelaxedX509TrustManager.classPK E|$>\}UO.edu/harvard/hul/ois/jhove/JhoveException.classPK E|$> o`(|edu/harvard/hul/ois/jhove/MacStuff.classPK E|$>'"edu/harvard/hul/ois/jhove/Message.classPK E|$>ʫbB&edu/harvard/hul/ois/jhove/Module.classPK E|$>M|&`7*edu/harvard/hul/ois/jhove/ModuleBase.classPK E|$>"l T1edu/harvard/hul/ois/jhove/NisoImageMetadata.classPK E|$>~Z0edu/harvard/hul/ois/jhove/ObjectIdentifier.classPK E|$>v2#v-edu/harvard/hul/ois/jhove/OutputHandler.classPK E|$>TM> (tedu/harvard/hul/ois/jhove/Property.classPK E|$> T-edu/harvard/hul/ois/jhove/PropertyArity.classPK E|$>Uh8?edu/harvard/hul/ois/jhove/PropertyPath$PropertyKey.classPK E|$>2,edu/harvard/hul/ois/jhove/PropertyPath.classPK E|$>sϓ,gedu/harvard/hul/ois/jhove/PropertyType.classPK E|$>l).Dedu/harvard/hul/ois/jhove/RAFInputStream.classPK E|$>2Fr+zedu/harvard/hul/ois/jhove/RFC1766Lang.classPK E|$>i[(edu/harvard/hul/ois/jhove/Rational.classPK E|$>ވ'^'edu/harvard/hul/ois/jhove/RepInfo.classPK E|$>)Ozd)(edu/harvard/hul/ois/jhove/Signature.classPK E|$>r;MA-edu/harvard/hul/ois/jhove/SignatureType.classPK E|$>(I0uedu/harvard/hul/ois/jhove/SignatureUseType.classPK E|$>v. edu/harvard/hul/ois/jhove/TextMDMetadata.classPK E|$>, 4/!edu/harvard/hul/ois/jhove/Utf8BlockMarker.classPK F|$>6"+ƒ0/edu/harvard/hul/ois/jhove/XMLWrapperStream.classPK F|$>Qo * edu/harvard/hul/ois/jhove/XMPHandler.classPK E|$>n+)edu/harvard/hul/ois/jhove/XMPSource.classPK H|$>}BpNMETA-INF/INDEX.LISTPKFFzjhove/doc/0000755000707400001440000000000011510702366011625 5ustar garyusersjhove/doc/edu/0000755000707400001440000000000011510701777012407 5ustar garyusersjhove/doc/edu/harvard/0000755000707400001440000000000011510701777014036 5ustar garyusersjhove/doc/edu/harvard/hul/0000755000707400001440000000000011510701777014626 5ustar garyusersjhove/doc/edu/harvard/hul/ois/0000755000707400001440000000000011510701777015420 5ustar garyusersjhove/doc/edu/harvard/hul/ois/jhove/0000755000707400001440000000000011510702352016521 5ustar garyusersjhove/doc/edu/harvard/hul/ois/jhove/handler/0000755000707400001440000000000011510702001020125 5ustar garyusersjhove/doc/edu/harvard/hul/ois/jhove/handler/audit/0000755000707400001440000000000011510702001021233 5ustar garyusersjhove/doc/edu/harvard/hul/ois/jhove/handler/audit/AuditCount.html0000644000707400001440000003733111510702352024220 0ustar garyusers AuditCount (JHOVE Documentation)



edu.harvard.hul.ois.jhove.handler.audit
Class AuditCount

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.handler.audit.AuditCount
Direct Known Subclasses:
AuditState

public class AuditCount
extends java.lang.Object

Count object for the JHOVE Audit output handler.


Field Summary
protected  int _notProcessed
          Number of files not processed.
protected  int _valid
          Number of valid files.
protected  int _wellFormed
          Number of well-formed files.
 
Constructor Summary
AuditCount()
          Instantiate a AuditCount object.
 
Method Summary
 int getNotProcessed()
          Returns the total number of files not processed.
 int getTotal()
          Returns the total number of valid or well-formed files.
 int getValid()
          Returns the total number of valid files.
 int getWellFormed()
          Returns the total number of well-formed files.
 void setNotProcessed(int notProcessed)
          Sets the count of files that are not processed.
 void setValid(int valid)
          Sets the count of valid files.
 void setWellFormed(int wellFormed)
          Sets the count of well-formed files.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

_notProcessed

protected int _notProcessed
Number of files not processed.


_valid

protected int _valid
Number of valid files.


_wellFormed

protected int _wellFormed
Number of well-formed files.

Constructor Detail

AuditCount

public AuditCount()
Instantiate a AuditCount object.

Method Detail

getNotProcessed

public int getNotProcessed()
Returns the total number of files not processed.


getTotal

public int getTotal()
Returns the total number of valid or well-formed files.


getValid

public int getValid()
Returns the total number of valid files.


getWellFormed

public int getWellFormed()
Returns the total number of well-formed files.


setNotProcessed

public void setNotProcessed(int notProcessed)
Sets the count of files that are not processed.


setValid

public void setValid(int valid)
Sets the count of valid files.


setWellFormed

public void setWellFormed(int wellFormed)
Sets the count of well-formed files.



jhove/doc/edu/harvard/hul/ois/jhove/handler/audit/AuditState.html0000644000707400001440000004322211510702352024204 0ustar garyusers AuditState (JHOVE Documentation)

edu.harvard.hul.ois.jhove.handler.audit
Class AuditState

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.handler.audit.AuditCount
      extended by edu.harvard.hul.ois.jhove.handler.audit.AuditState
All Implemented Interfaces:
java.lang.Cloneable

public class AuditState
extends AuditCount
implements java.lang.Cloneable

State object for the JHOVE Audit output handler.


Field Summary
protected  java.lang.String _directory
          Directory pathname.
protected  int _notFound
          Number of files not found.
 
Fields inherited from class edu.harvard.hul.ois.jhove.handler.audit.AuditCount
_notProcessed, _valid, _wellFormed
 
Constructor Summary
AuditState(java.lang.String directory)
          Instantiate a AuditState object.
 
Method Summary
 java.lang.Object clone(java.lang.String directory)
          Creates and returns a copy of this object.
 java.lang.String getDirectory()
          Returns the directory path.
 int getNotFound()
          Returns the number of files not found.
protected  void init(java.lang.String directory)
          Initializes to a specified directory and clears counters.
 void setDirectory(java.lang.String directory)
          Sets the directory path.
 void setNotFound(int notFound)
          Sets the count of files not found.
 
Methods inherited from class edu.harvard.hul.ois.jhove.handler.audit.AuditCount
getNotProcessed, getTotal, getValid, getWellFormed, setNotProcessed, setValid, setWellFormed
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

_directory

protected java.lang.String _directory
Directory pathname.


_notFound

protected int _notFound
Number of files not found.

Constructor Detail

AuditState

public AuditState(java.lang.String directory)
Instantiate a AuditState object.

Method Detail

init

protected void init(java.lang.String directory)
Initializes to a specified directory and clears counters.


clone

public java.lang.Object clone(java.lang.String directory)
                       throws java.lang.CloneNotSupportedException
Creates and returns a copy of this object.

Throws:
java.lang.CloneNotSupportedException

getDirectory

public java.lang.String getDirectory()
Returns the directory path.


getNotFound

public int getNotFound()
Returns the number of files not found.


setDirectory

public void setDirectory(java.lang.String directory)
Sets the directory path.


setNotFound

public void setNotFound(int notFound)
Sets the count of files not found.



jhove/doc/edu/harvard/hul/ois/jhove/handler/audit/package-frame.html0000644000707400001440000000212511510702366024622 0ustar garyusers edu.harvard.hul.ois.jhove.handler.audit (JHOVE Documentation) edu.harvard.hul.ois.jhove.handler.audit
Classes 
AuditCount
AuditState
jhove/doc/edu/harvard/hul/ois/jhove/handler/audit/package-summary.html0000644000707400001440000001571211510702366025233 0ustar garyusers edu.harvard.hul.ois.jhove.handler.audit (JHOVE Documentation)

Package edu.harvard.hul.ois.jhove.handler.audit

Contains the supporting classes for the JHOVE audit output handler.

See:
          Description

Class Summary
AuditCount Count object for the JHOVE Audit output handler.
AuditState State object for the JHOVE Audit output handler.
 

Package edu.harvard.hul.ois.jhove.handler.audit Description

Contains the supporting classes for the JHOVE audit output handler.



jhove/doc/edu/harvard/hul/ois/jhove/handler/audit/package-tree.html0000644000707400001440000001460611510702366024476 0ustar garyusers edu.harvard.hul.ois.jhove.handler.audit Class Hierarchy (JHOVE Documentation)

Hierarchy For Package edu.harvard.hul.ois.jhove.handler.audit

Package Hierarchies:
All Packages

Class Hierarchy

  • java.lang.Object
    • edu.harvard.hul.ois.jhove.handler.audit.AuditCount
      • edu.harvard.hul.ois.jhove.handler.audit.AuditState (implements java.lang.Cloneable)


jhove/doc/edu/harvard/hul/ois/jhove/handler/AuditHandler.html0000644000707400001440000013157511510702352023404 0ustar garyusers AuditHandler (JHOVE Documentation)

edu.harvard.hul.ois.jhove.handler
Class AuditHandler

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.HandlerBase
      extended by edu.harvard.hul.ois.jhove.handler.XmlHandler
          extended by edu.harvard.hul.ois.jhove.handler.AuditHandler
All Implemented Interfaces:
OutputHandler

public class AuditHandler
extends XmlHandler

JHOVE audit output handler, derived from the standard JHOVE XML handler. It is expected that this class will be used as the parent for other, more interesting output handlers. Subclasses should override the implementations of the Impl methods, e.g., endDirectoryImpl ().

See Also:
JHOVE XML output handler

Nested Class Summary
 
Nested classes/interfaces inherited from class edu.harvard.hul.ois.jhove.HandlerBase
HandlerBase.SynchronizedDateFormat
 
Field Summary
protected  java.lang.String _home
          Home directory of the audit.
protected  java.util.Map _mimeType
          Number of files processed by MIME type.
protected  int _nAudit
          Number of files audited.
protected  java.util.Map _stateMap
          State map.
protected  java.util.Stack _stateStack
          State stack.
protected  long _t0
          Initial time.
 
Fields inherited from class edu.harvard.hul.ois.jhove.HandlerBase
_app, _base, _date, _defaultParams, _encoding, _init, _je, _level, _logger, _name, _note, _param, _release, _rights, _specification, _vendor, _writer, date, dateTime, iso8601
 
Constructor Summary
AuditHandler()
          Instantiate a AudiHandler object.
 
Method Summary
 void endDirectory()
          Callback indicating a directory is finished being processed.
 void endDirectoryImpl(AuditState state)
          Local extension to the standard callback indicating a directory is finished being processed.
 boolean okToProcess(java.lang.String filepath)
          Determine whether or not to process the file.
 boolean okToProcessImpl(java.lang.String filepath, AuditState state)
          Local extension to standard callback that determines whether or not to process the file.
 void show(RepInfo info)
          Outputs the information contained in a RepInfo object
 void showFooter()
          Do the final output.
 void showFooterImpl(AuditState state)
          Local extension to the standard callback that does the final output.
 void showHeader()
          Do the initial output.
 AuditState showHeaderImpl(java.lang.String directory)
          Local extension to the standard callback that does the initial output.
 void showImpl(RepInfo info, AuditState state)
          Local extension to the standard callback that outputs the information contained in a RepInfo object
 void startDirectory(java.lang.String directory)
          Callback indicating a new directory is being processed.
 void startDirectoryImpl(AuditState state)
          Local extension to the standard callback indicating a new directory is being processed.
 
Methods inherited from class edu.harvard.hul.ois.jhove.handler.XmlHandler
rationalToString, show, show, show, show, showAESAudioMetadata, showAgent, showArrayProperty, showChangeHistory10, showChangeHistory20, showChecksum, showDocument, showIdentifier, showMessage, showNisoBasicDigitalObjectInformation10, showNisoBasicDigitalObjectInformation20, showNisoBasicImageInformation10, showNisoBasicImageInformation20, showNisoBasicImageParameters02, showNisoChangeHistory02, showNisoImageAssessmentMetadata10, showNisoImageAssessmentMetadata20, showNisoImageCaptureMetadata10, showNisoImageCaptureMetadata20, showNisoImageCreation02, showNisoImageMetadata, showNisoImageMetadata02, showNisoImageMetadata10, showNisoImageMetadata20, showNisoImagingPerformanceAssessment02, showProperty, showSignature, showTextMDMetadata, valueToString
 
Methods inherited from class edu.harvard.hul.ois.jhove.HandlerBase
analyze, applyDefaultParams, close, doctype, doctype, doubleArray, element, element, element, element, elementEnd, elementStart, elementStart, getDate, getEncoding, getIndent, getName, getNote, getRelease, getRights, getSpecification, getVendor, init, integerArray, integerArray, longArray, param, rationalArray, rationalArray10, reset, resetParams, setApp, setBase, setDefaultParams, setEncoding, setWriter, toDateTime, xmlDecl, xmlDecl
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

_home

protected java.lang.String _home
Home directory of the audit.


_mimeType

protected java.util.Map _mimeType
Number of files processed by MIME type.


_stateMap

protected java.util.Map _stateMap
State map.


_stateStack

protected java.util.Stack _stateStack
State stack.


_t0

protected long _t0
Initial time.


_nAudit

protected int _nAudit
Number of files audited.

Constructor Detail

AuditHandler

public AuditHandler()
Instantiate a AudiHandler object.

Method Detail

endDirectory

public final void endDirectory()
Callback indicating a directory is finished being processed. Prop the state stack and place the current directory file count into the directory hash.

Specified by:
endDirectory in interface OutputHandler
Overrides:
endDirectory in class HandlerBase

endDirectoryImpl

public void endDirectoryImpl(AuditState state)
Local extension to the standard callback indicating a directory is finished being processed.

Parameters:
state - Audit handler state

okToProcess

public final boolean okToProcess(java.lang.String filepath)
Determine whether or not to process the file.

Specified by:
okToProcess in interface OutputHandler
Overrides:
okToProcess in class HandlerBase
Parameters:
filepath - File pathname

okToProcessImpl

public boolean okToProcessImpl(java.lang.String filepath,
                               AuditState state)
Local extension to standard callback that determines whether or not to process the file.

Parameters:
filepath - File pathname
state - Audit handler state

show

public void show(RepInfo info)
Outputs the information contained in a RepInfo object

Specified by:
show in interface OutputHandler
Overrides:
show in class XmlHandler
Parameters:
info - Object representation information

showImpl

public void showImpl(RepInfo info,
                     AuditState state)
Local extension to the standard callback that outputs the information contained in a RepInfo object

Parameters:
info - Object representation information
state - Audit handler state

showFooter

public void showFooter()
Do the final output. This should be in a suitable format for including multiple files between the header and the footer, and the XML of the header and footer must balance out.

Specified by:
showFooter in interface OutputHandler
Overrides:
showFooter in class XmlHandler

showFooterImpl

public void showFooterImpl(AuditState state)
Local extension to the standard callback that does the final output. This should be in a suitable format for including multiple files between the header and the footer, and the XML of the header and footer must balance out.

Parameters:
state - Audit handler state

showHeader

public void showHeader()
Do the initial output. This should be in a suitable format for including multiple files between the header and the footer, and the XML of the header and footer must balance out.

Specified by:
showHeader in interface OutputHandler
Overrides:
showHeader in class XmlHandler

showHeaderImpl

public AuditState showHeaderImpl(java.lang.String directory)
Local extension to the standard callback that does the initial output. This should be in a suitable format for including multiple files between the header and the footer, and the XML of the header and footer must balance out.

Parameters:
directory - Current directory filepath

startDirectory

public void startDirectory(java.lang.String directory)
Callback indicating a new directory is being processed. Additional state information can be added to the AuditState object in the showHeaderImpl() method before it is pushed onto the stack.

Specified by:
startDirectory in interface OutputHandler
Overrides:
startDirectory in class HandlerBase
Parameters:
directory - Directory path

startDirectoryImpl

public void startDirectoryImpl(AuditState state)
Local extension to the standard callback indicating a new directory is being processed.

Parameters:
state - Audit handler state


jhove/doc/edu/harvard/hul/ois/jhove/handler/TextHandler.html0000644000707400001440000007415611510702352023263 0ustar garyusers TextHandler (JHOVE Documentation)

edu.harvard.hul.ois.jhove.handler
Class TextHandler

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.HandlerBase
      extended by edu.harvard.hul.ois.jhove.handler.TextHandler
All Implemented Interfaces:
OutputHandler

public class TextHandler
extends HandlerBase

OutputHandler for plain text output.


Nested Class Summary
 
Nested classes/interfaces inherited from class edu.harvard.hul.ois.jhove.HandlerBase
HandlerBase.SynchronizedDateFormat
 
Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.HandlerBase
_app, _base, _date, _defaultParams, _encoding, _init, _je, _level, _logger, _name, _note, _param, _release, _rights, _specification, _vendor, _writer, date, dateTime, iso8601
 
Constructor Summary
TextHandler()
          Creates a TextHandler.
 
Method Summary
 void show()
          Outputs minimal information about the application
 void show(App app)
          Outputs detailed information about the application, including configuration, available modules and handlers, etc.
 void show(Module module)
          Outputs information about a Module
 void show(OutputHandler handler)
          Outputs information about the OutputHandler specified in the parameter
 void show(RepInfo info)
          Outputs the information contained in a RepInfo object
 void showFooter()
          Do the final output.
 void showHeader()
          Do the initial output.
protected  void showNisoImageMetadata(NisoImageMetadata niso, java.lang.String margin, boolean rawOutput)
          Display the NISO image metadata formatted according to the MIX schema.
 
Methods inherited from class edu.harvard.hul.ois.jhove.HandlerBase
analyze, applyDefaultParams, close, doctype, doctype, doubleArray, element, element, element, element, elementEnd, elementStart, elementStart, endDirectory, getDate, getEncoding, getIndent, getName, getNote, getRelease, getRights, getSpecification, getVendor, init, integerArray, integerArray, longArray, okToProcess, param, rationalArray, rationalArray10, reset, resetParams, setApp, setBase, setDefaultParams, setEncoding, setWriter, startDirectory, toDateTime, xmlDecl, xmlDecl
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

TextHandler

public TextHandler()
Creates a TextHandler.

Method Detail

show

public void show()
Outputs minimal information about the application

Specified by:
show in interface OutputHandler
Specified by:
show in class HandlerBase

show

public void show(App app)
Outputs detailed information about the application, including configuration, available modules and handlers, etc.

Specified by:
show in interface OutputHandler
Specified by:
show in class HandlerBase

show

public void show(OutputHandler handler)
Outputs information about the OutputHandler specified in the parameter

Specified by:
show in interface OutputHandler
Specified by:
show in class HandlerBase

show

public void show(Module module)
Outputs information about a Module

Specified by:
show in interface OutputHandler
Specified by:
show in class HandlerBase

show

public void show(RepInfo info)
Outputs the information contained in a RepInfo object

Specified by:
show in interface OutputHandler
Specified by:
show in class HandlerBase

showFooter

public void showFooter()
Do the final output. This should be in a suitable format for including multiple files between the header and the footer.

Specified by:
showFooter in interface OutputHandler
Specified by:
showFooter in class HandlerBase

showHeader

public void showHeader()
Do the initial output. This should be in a suitable format for including multiple files between the header and the footer.

Specified by:
showHeader in interface OutputHandler
Specified by:
showHeader in class HandlerBase

showNisoImageMetadata

protected void showNisoImageMetadata(NisoImageMetadata niso,
                                     java.lang.String margin,
                                     boolean rawOutput)
Display the NISO image metadata formatted according to the MIX schema. The schema which is used may be 0.2 or 1.0, depending on the module parameters.

Parameters:
niso - NISO image metadata


jhove/doc/edu/harvard/hul/ois/jhove/handler/XmlHandler.html0000644000707400001440000017261111510702352023072 0ustar garyusers XmlHandler (JHOVE Documentation)

edu.harvard.hul.ois.jhove.handler
Class XmlHandler

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.HandlerBase
      extended by edu.harvard.hul.ois.jhove.handler.XmlHandler
All Implemented Interfaces:
OutputHandler
Direct Known Subclasses:
AuditHandler

public class XmlHandler
extends HandlerBase

OutputHandler for XML output.

See Also:
Schema for JHOVE XML output

Nested Class Summary
 
Nested classes/interfaces inherited from class edu.harvard.hul.ois.jhove.HandlerBase
HandlerBase.SynchronizedDateFormat
 
Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.HandlerBase
_app, _base, _date, _defaultParams, _encoding, _init, _je, _level, _logger, _name, _note, _param, _release, _rights, _specification, _vendor, _writer, date, dateTime, iso8601
 
Constructor Summary
XmlHandler()
          Creates an XmlHandler.
XmlHandler(java.lang.String name, java.lang.String release, int[] date, java.lang.String note, java.lang.String rights)
          Constructor for use by subclasses.
 
Method Summary
 void rationalToString(java.lang.StringBuffer buf, java.lang.String tag, java.lang.String margin, Rational r)
          Appends a Rational value to a StringBuffer
 void show()
          Outputs minimal information about the application
 void show(App app)
          Outputs detailed information about the application, including configuration, available modules and handlers, etc.
 void show(Module module)
          Outputs information about a Module
 void show(OutputHandler handler)
          Outputs information about the OutputHandler specified in the parameter
 void show(RepInfo info)
          Outputs the information contained in a RepInfo object
protected  void showAESAudioMetadata(AESAudioMetadata aes)
          Display the audio metadata formatted according to the AES schema.
protected  void showAgent(Agent agent, java.lang.String label)
          PRIVATE INSTANCE METHODS.
protected  void showArrayProperty(Property property, java.lang.String margin)
           
protected  void showChangeHistory10(NisoImageMetadata niso, java.lang.String margin)
           
protected  void showChangeHistory20(NisoImageMetadata niso, java.lang.String margin)
           
protected  void showChecksum(Checksum checksum)
           
protected  void showDocument(Document document)
           
 void showFooter()
          Do the final output.
 void showHeader()
          Do the initial output.
protected  void showIdentifier(Identifier identifier)
           
protected  void showMessage(Message message)
           
protected  void showNisoBasicDigitalObjectInformation10(NisoImageMetadata niso, java.lang.String margin)
           
protected  void showNisoBasicDigitalObjectInformation20(NisoImageMetadata niso, java.lang.String margin)
           
protected  void showNisoBasicImageInformation10(NisoImageMetadata niso, java.lang.String margin)
           
protected  void showNisoBasicImageInformation20(NisoImageMetadata niso, java.lang.String margin)
           
protected  void showNisoBasicImageParameters02(NisoImageMetadata niso, java.lang.String margin)
           
protected  void showNisoChangeHistory02(NisoImageMetadata niso, java.lang.String margin)
           
protected  void showNisoImageAssessmentMetadata10(NisoImageMetadata niso, java.lang.String margin)
           
protected  void showNisoImageAssessmentMetadata20(NisoImageMetadata niso, java.lang.String margin)
           
protected  void showNisoImageCaptureMetadata10(NisoImageMetadata niso, java.lang.String margin)
           
protected  void showNisoImageCaptureMetadata20(NisoImageMetadata niso, java.lang.String margin)
           
protected  void showNisoImageCreation02(NisoImageMetadata niso, java.lang.String margin)
           
protected  void showNisoImageMetadata(NisoImageMetadata niso)
          Display the NISO image metadata formatted according to the MIX schema.
protected  void showNisoImageMetadata02(NisoImageMetadata niso)
          Display the NISO image metadata formatted according to the MIX 0.2 schema.
protected  void showNisoImageMetadata10(NisoImageMetadata niso)
          Display the NISO image metadata formatted according to the MIX 1.0 schema.
protected  void showNisoImageMetadata20(NisoImageMetadata niso)
          Display the NISO image metadata formatted according to the MIX 2.0 schema.
protected  void showNisoImagingPerformanceAssessment02(NisoImageMetadata niso, java.lang.String margin)
           
protected  void showProperty(Property property)
           
protected  void showSignature(Signature signature)
           
protected  void showTextMDMetadata(TextMDMetadata textMD)
          Display the text metadata formatted according to the textMD schema (see http://www.loc.gov/standards/textMD).
protected  java.lang.String valueToString(java.lang.Object obj)
           
 
Methods inherited from class edu.harvard.hul.ois.jhove.HandlerBase
analyze, applyDefaultParams, close, doctype, doctype, doubleArray, element, element, element, element, elementEnd, elementStart, elementStart, endDirectory, getDate, getEncoding, getIndent, getName, getNote, getRelease, getRights, getSpecification, getVendor, init, integerArray, integerArray, longArray, okToProcess, param, rationalArray, rationalArray10, reset, resetParams, setApp, setBase, setDefaultParams, setEncoding, setWriter, startDirectory, toDateTime, xmlDecl, xmlDecl
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

XmlHandler

public XmlHandler()
Creates an XmlHandler.


XmlHandler

public XmlHandler(java.lang.String name,
                  java.lang.String release,
                  int[] date,
                  java.lang.String note,
                  java.lang.String rights)
Constructor for use by subclasses.

Method Detail

show

public void show()
Outputs minimal information about the application

Specified by:
show in interface OutputHandler
Specified by:
show in class HandlerBase

show

public void show(App app)
Outputs detailed information about the application, including configuration, available modules and handlers, etc.

Specified by:
show in interface OutputHandler
Specified by:
show in class HandlerBase

show

public void show(OutputHandler handler)
Outputs information about the OutputHandler specified in the parameter

Specified by:
show in interface OutputHandler
Specified by:
show in class HandlerBase

show

public void show(Module module)
Outputs information about a Module

Specified by:
show in interface OutputHandler
Specified by:
show in class HandlerBase

show

public void show(RepInfo info)
Outputs the information contained in a RepInfo object

Specified by:
show in interface OutputHandler
Specified by:
show in class HandlerBase

showAgent

protected void showAgent(Agent agent,
                         java.lang.String label)
PRIVATE INSTANCE METHODS.


showChecksum

protected void showChecksum(Checksum checksum)

showDocument

protected void showDocument(Document document)

showFooter

public void showFooter()
Do the final output. This should be in a suitable format for including multiple files between the header and the footer, and the XML of the header and footer must balance out.

Specified by:
showFooter in interface OutputHandler
Specified by:
showFooter in class HandlerBase

showHeader

public void showHeader()
Do the initial output. This should be in a suitable format for including multiple files between the header and the footer, and the XML of the header and footer must balance out.

Specified by:
showHeader in interface OutputHandler
Specified by:
showHeader in class HandlerBase

showIdentifier

protected void showIdentifier(Identifier identifier)

showMessage

protected void showMessage(Message message)

showSignature

protected void showSignature(Signature signature)

valueToString

protected java.lang.String valueToString(java.lang.Object obj)

showProperty

protected void showProperty(Property property)

showArrayProperty

protected void showArrayProperty(Property property,
                                 java.lang.String margin)

showTextMDMetadata

protected void showTextMDMetadata(TextMDMetadata textMD)
Display the text metadata formatted according to the textMD schema (see http://www.loc.gov/standards/textMD).

Parameters:
textMD - textMD text metadata

showNisoImageMetadata

protected void showNisoImageMetadata(NisoImageMetadata niso)
Display the NISO image metadata formatted according to the MIX schema. The schema which is used may be 0.2 or 1.0 or 2.0, depending on the module parameters.

Parameters:
niso - NISO image metadata

showNisoImageMetadata02

protected void showNisoImageMetadata02(NisoImageMetadata niso)
Display the NISO image metadata formatted according to the MIX 0.2 schema.


showNisoBasicImageParameters02

protected void showNisoBasicImageParameters02(NisoImageMetadata niso,
                                              java.lang.String margin)

showNisoImageCreation02

protected void showNisoImageCreation02(NisoImageMetadata niso,
                                       java.lang.String margin)

showNisoImagingPerformanceAssessment02

protected void showNisoImagingPerformanceAssessment02(NisoImageMetadata niso,
                                                      java.lang.String margin)

showNisoChangeHistory02

protected void showNisoChangeHistory02(NisoImageMetadata niso,
                                       java.lang.String margin)

showNisoImageMetadata10

protected void showNisoImageMetadata10(NisoImageMetadata niso)
Display the NISO image metadata formatted according to the MIX 1.0 schema.


showNisoBasicDigitalObjectInformation10

protected void showNisoBasicDigitalObjectInformation10(NisoImageMetadata niso,
                                                       java.lang.String margin)

showNisoBasicImageInformation10

protected void showNisoBasicImageInformation10(NisoImageMetadata niso,
                                               java.lang.String margin)

showNisoImageCaptureMetadata10

protected void showNisoImageCaptureMetadata10(NisoImageMetadata niso,
                                              java.lang.String margin)

showNisoImageAssessmentMetadata10

protected void showNisoImageAssessmentMetadata10(NisoImageMetadata niso,
                                                 java.lang.String margin)

showChangeHistory10

protected void showChangeHistory10(NisoImageMetadata niso,
                                   java.lang.String margin)

showNisoImageMetadata20

protected void showNisoImageMetadata20(NisoImageMetadata niso)
Display the NISO image metadata formatted according to the MIX 2.0 schema.


showNisoBasicDigitalObjectInformation20

protected void showNisoBasicDigitalObjectInformation20(NisoImageMetadata niso,
                                                       java.lang.String margin)

showNisoBasicImageInformation20

protected void showNisoBasicImageInformation20(NisoImageMetadata niso,
                                               java.lang.String margin)

showNisoImageCaptureMetadata20

protected void showNisoImageCaptureMetadata20(NisoImageMetadata niso,
                                              java.lang.String margin)

showNisoImageAssessmentMetadata20

protected void showNisoImageAssessmentMetadata20(NisoImageMetadata niso,
                                                 java.lang.String margin)

showChangeHistory20

protected void showChangeHistory20(NisoImageMetadata niso,
                                   java.lang.String margin)

showAESAudioMetadata

protected void showAESAudioMetadata(AESAudioMetadata aes)
Display the audio metadata formatted according to the AES schema.

Parameters:
aes - AES audio metadata

rationalToString

public void rationalToString(java.lang.StringBuffer buf,
                             java.lang.String tag,
                             java.lang.String margin,
                             Rational r)
Appends a Rational value to a StringBuffer



jhove/doc/edu/harvard/hul/ois/jhove/handler/package-frame.html0000644000707400001440000000225411510702366023517 0ustar garyusers edu.harvard.hul.ois.jhove.handler (JHOVE Documentation) edu.harvard.hul.ois.jhove.handler
Classes 
AuditHandler
TextHandler
XmlHandler
jhove/doc/edu/harvard/hul/ois/jhove/handler/package-summary.html0000644000707400001440000001620511510702366024123 0ustar garyusers edu.harvard.hul.ois.jhove.handler (JHOVE Documentation)

Package edu.harvard.hul.ois.jhove.handler

Contains the main classes for JHOVE output handlers.

See:
          Description

Class Summary
AuditHandler JHOVE audit output handler, derived from the standard JHOVE XML handler.
TextHandler OutputHandler for plain text output.
XmlHandler OutputHandler for XML output.
 

Package edu.harvard.hul.ois.jhove.handler Description

Contains the main classes for JHOVE output handlers. All module classes are subclasses of HandlerBase.



jhove/doc/edu/harvard/hul/ois/jhove/handler/package-tree.html0000644000707400001440000001543711510702366023373 0ustar garyusers edu.harvard.hul.ois.jhove.handler Class Hierarchy (JHOVE Documentation)

Hierarchy For Package edu.harvard.hul.ois.jhove.handler

Package Hierarchies:
All Packages

Class Hierarchy



jhove/doc/edu/harvard/hul/ois/jhove/AESAudioMetadata.Face.html0000644000707400001440000003236511510702350023306 0ustar garyusers AESAudioMetadata.Face (JHOVE Documentation)

edu.harvard.hul.ois.jhove
Interface AESAudioMetadata.Face

Enclosing class:
AESAudioMetadata

public static interface AESAudioMetadata.Face

Public interface to the nested Face object. Instances of this should be created only by appropriate methods, but can be accessed through the public methods of this interface.


Method Summary
 void addFaceRegion()
          Adds a FaceRegion.
 java.lang.String getDirection()
          Returns the direction.
 AESAudioMetadata.TimeDesc getDuration()
          Returns the duration.
 AESAudioMetadata.FaceRegion getFaceRegion(int i)
          Returns an indexed FaceRegion.
 AESAudioMetadata.TimeDesc getStartTime()
          Returns the starting time.
 void setDirection(java.lang.String direction)
          Sets the direction.
 void setDuration(long samples)
          Sets the duration.
 void setStartTime(long samples)
          Sets the starting time.
 

Method Detail

getFaceRegion

AESAudioMetadata.FaceRegion getFaceRegion(int i)
Returns an indexed FaceRegion.


addFaceRegion

void addFaceRegion()
Adds a FaceRegion. This may be called repeatedly to add multiple FaceRegions.


getStartTime

AESAudioMetadata.TimeDesc getStartTime()
Returns the starting time.


getDuration

AESAudioMetadata.TimeDesc getDuration()
Returns the duration.


getDirection

java.lang.String getDirection()
Returns the direction.


setStartTime

void setStartTime(long samples)
Sets the starting time. This will be converted into a TimeDesc.


setDuration

void setDuration(long samples)
Sets the duration. This will be converted into a TimeDesc.


setDirection

void setDirection(java.lang.String direction)
Sets the direction. This must be one of the directionTypes. FORWARD is recommended for most or all cases.



jhove/doc/edu/harvard/hul/ois/jhove/AESAudioMetadata.FaceRegion.html0000644000707400001440000002763311510702350024454 0ustar garyusers AESAudioMetadata.FaceRegion (JHOVE Documentation)

edu.harvard.hul.ois.jhove
Interface AESAudioMetadata.FaceRegion

Enclosing class:
AESAudioMetadata

public static interface AESAudioMetadata.FaceRegion

Public interface to the nested FaceRegion object. Instances of this should be created only by appropriate methods, but can be accessed through the public methods of this interface.


Method Summary
 AESAudioMetadata.TimeDesc getDuration()
          Returns the duration.
 java.lang.String[] getMapLocations()
          Returns the channel map locations.
 AESAudioMetadata.TimeDesc getStartTime()
          Returns the starting time.
 void setDuration(long samples)
          Sets the duration.
 void setMapLocations(java.lang.String[] locations)
          Sets the channel map locations.
 void setStartTime(long samples)
          Sets the starting time.
 

Method Detail

getStartTime

AESAudioMetadata.TimeDesc getStartTime()
Returns the starting time.


getDuration

AESAudioMetadata.TimeDesc getDuration()
Returns the duration.


getMapLocations

java.lang.String[] getMapLocations()
Returns the channel map locations. The array length must equal the number of channels.


setStartTime

void setStartTime(long samples)
Sets the starting time.


setDuration

void setDuration(long samples)
Sets the duration.


setMapLocations

void setMapLocations(java.lang.String[] locations)
Sets the channel map locations. The array length must equal the number of channels.



jhove/doc/edu/harvard/hul/ois/jhove/AESAudioMetadata.FormatRegion.html0000644000707400001440000003571511510702350025046 0ustar garyusers AESAudioMetadata.FormatRegion (JHOVE Documentation)

edu.harvard.hul.ois.jhove
Interface AESAudioMetadata.FormatRegion

Enclosing class:
AESAudioMetadata

public static interface AESAudioMetadata.FormatRegion

Public interface to the nested FormatRegion object. Instances of this should be created only by addFormatRegion, but can be accessed through the public methods of this interface.


Method Summary
 void clearBitrateReduction()
          Sets the bitrate reduction information to null (no compression).
 int getBitDepth()
          Returns the bit depth.
 java.lang.String[] getBitrateReduction()
          Returns the bitrate reduction (compression information).
 double getSampleRate()
          Returns the sample rate.
 int getWordSize()
          Returns the word size.
 boolean isEmpty()
          Returns true if the region is empty.
 void setBitDepth(int bitDepth)
          Sets the bit depth value.
 void setBitrateReduction(java.lang.String codecName, java.lang.String codecNameVersion, java.lang.String codecCreatorApplication, java.lang.String codecCreatorApplicationVersion, java.lang.String codecQuality, java.lang.String dataRate, java.lang.String dataRateMode)
          Sets the bitrate reduction (aka compression type).
 void setSampleRate(double sampleRate)
          Sets the sample rate.
 void setWordSize(int wordSize)
          Sets the word size.
 

Method Detail

getBitDepth

int getBitDepth()
Returns the bit depth.


getBitrateReduction

java.lang.String[] getBitrateReduction()
Returns the bitrate reduction (compression information). This will be an array of seven strings (which may be empty, but should never be null) interpreted as follows:
  • 0: codecName
  • 1: codecNameVersion
  • 2: codecCreatorApplication
  • 3: codecCreatorApplicationVersion
  • 4: codecQuality
  • 5: dataRate
  • 6: dataRateMode


getSampleRate

double getSampleRate()
Returns the sample rate.


getWordSize

int getWordSize()
Returns the word size.


isEmpty

boolean isEmpty()
Returns true if the region is empty.


setBitDepth

void setBitDepth(int bitDepth)
Sets the bit depth value.


clearBitrateReduction

void clearBitrateReduction()
Sets the bitrate reduction information to null (no compression).


setBitrateReduction

void setBitrateReduction(java.lang.String codecName,
                         java.lang.String codecNameVersion,
                         java.lang.String codecCreatorApplication,
                         java.lang.String codecCreatorApplicationVersion,
                         java.lang.String codecQuality,
                         java.lang.String dataRate,
                         java.lang.String dataRateMode)
Sets the bitrate reduction (aka compression type).


setSampleRate

void setSampleRate(double sampleRate)
Sets the sample rate.


setWordSize

void setWordSize(int wordSize)
Sets the word size.



jhove/doc/edu/harvard/hul/ois/jhove/AESAudioMetadata.TimeDesc.html0000644000707400001440000002624011510702350024140 0ustar garyusers AESAudioMetadata.TimeDesc (JHOVE Documentation)

edu.harvard.hul.ois.jhove
Interface AESAudioMetadata.TimeDesc

Enclosing class:
AESAudioMetadata

public static interface AESAudioMetadata.TimeDesc

Public interface to the nested TimeDesc object. Instances of this should be created only by appropriate methods, but can be accessed through the public methods of this interface.


Method Summary
 int getFrames()
          Returns the frames component of the fraction of a second.
 int getHours()
          Returns the hours component.
 int getMinutes()
          Returns the minutes component.
 double getSampleRate()
          Returns the sample rate on which the samples remainder is based.
 int getSamples()
          Returns the samples remaining after the frames part of the fractional second.
 int getSeconds()
          Returns the seconds component.
 

Method Detail

getHours

int getHours()
Returns the hours component.


getMinutes

int getMinutes()
Returns the minutes component.


getSeconds

int getSeconds()
Returns the seconds component.


getFrames

int getFrames()
Returns the frames component of the fraction of a second. We always consider frames to be thirtieths of a second.


getSamples

int getSamples()
Returns the samples remaining after the frames part of the fractional second.


getSampleRate

double getSampleRate()
Returns the sample rate on which the samples remainder is based.



jhove/doc/edu/harvard/hul/ois/jhove/AESAudioMetadata.html0000644000707400001440000013534211510702350022450 0ustar garyusers AESAudioMetadata (JHOVE Documentation)

edu.harvard.hul.ois.jhove
Class AESAudioMetadata

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.AESAudioMetadata

public class AESAudioMetadata
extends java.lang.Object

Encapsulation of the AES Metadata for Audio documents

Author:
Gary McGath

Nested Class Summary
static interface AESAudioMetadata.Face
          Public interface to the nested Face object.
static interface AESAudioMetadata.FaceRegion
          Public interface to the nested FaceRegion object.
static interface AESAudioMetadata.FormatRegion
          Public interface to the nested FormatRegion object.
static interface AESAudioMetadata.TimeDesc
          Public interface to the nested TimeDesc object.
 
Field Summary
static java.lang.String[] A_D
          Analog / digital labels.
static int BIG_ENDIAN
          Big-endian constant.
static java.lang.String FILE_NAME
          Values for primary identifier type
static int LITTLE_ENDIAN
          Little-endian constant.
static double NILL
          Constant for an undefined floating-point value.
static int NULL
          Constant for an undefined integer value.
static java.lang.String OTHER
          Values for primary identifier type
static java.lang.String SCHEMA_VERSION
          Constant value for the SchemaVersion field
 
Constructor Summary
AESAudioMetadata()
          Instantiate a NisoImageMetadata object.
 
Method Summary
 void addFace()
          Adds a Face.
 void addFormatRegion()
          Adds a FormatRegion object to a FormatSize list.
 void clearBitrateReduction()
          Set the bitrate reduction information to null (no compression).
 java.lang.String getAnalogDigitalFlag()
          Returns analog/digital flag.
 java.lang.String getAppSpecificData()
          Returns application-specific data.
 java.lang.String getAudioDataEncoding()
          Returns audio data encoding.
 java.lang.String[] getBitrateReduction()
          Returns the bitrate reduction (compression information).
 int getByteOrder()
          Return the byte order: 0 = big-endian; 1 = little-endian.
 java.lang.String getDisposition()
          Returns disposition.
 java.util.List getFaceList()
          Gets the list of Faces.
 long getFirstSampleOffset()
          Return the offset of the first byte of sample data.
 java.lang.String getFormat()
          Returns format name.
 java.util.List getFormatList()
          Gets the list of Format Regions.
 java.lang.String[] getMapLocations()
          Returns the names of the map locations.
 int getNumChannels()
          Returns number of channels.
 java.lang.String getPrimaryIdentifier()
          Returns primary identifier.
 java.lang.String getPrimaryIdentifierType()
          Returns primary identifier type.
 double getSampleRate()
           
 java.lang.String getSchemaVersion()
          Returns schema version.
 java.lang.String getSpecificationVersion()
          Returns specification version of the document format.
 java.lang.String[] getUse()
          Returns the use (role of the document).
 void setAnalogDigitalFlag(java.lang.String flagType)
          Sets the analog/digital flag.
 void setAppSpecificData(java.lang.String data)
          Set the application-specific data.
 void setAudioDataEncoding(java.lang.String audioDataEncoding)
          Sets the audio data encoding.
 void setBitDepth(int bitDepth)
          Sets the bit depth.
 void setBitrateReduction(java.lang.String codecName, java.lang.String codecNameVersion, java.lang.String codecCreatorApplication, java.lang.String codecCreatorApplicationVersion, java.lang.String codecQuality, java.lang.String dataRate, java.lang.String dataRateMode)
          Sets the bitrate reduction (compression type).
 void setByteOrder(int order)
          Sets the byte order.
 void setByteOrder(java.lang.String order)
          Sets the byte order.
 void setDirection(java.lang.String direction)
          Sets the direction.
 void setDisposition(java.lang.String disposition)
          Sets the disposition.
 void setDuration(long duration)
          Sets the duration in samples.
 void setFirstSampleOffset(long offset)
          Sets the offset of the first byte of sample data.
 void setFormat(java.lang.String format)
          Sets the format name.
 void setMapLocations(java.lang.String[] locations)
          Sets the array of channel map locations.
 void setNumChannels(int numChannels)
          Sets the number of channels.
 void setOtherPrimaryIdentifierType(java.lang.String otherType)
          Sets the primary identifier type as "OTHER", and set the otherType.
 void setPrimaryIdentifier(java.lang.String primaryIdentifier)
          Sets the primary identifier.
 void setPrimaryIdentifierType(java.lang.String primaryIdentifierType)
          Sets the primary identifier type.
 void setSampleRate(double sampleRate)
          Sets the sample rate.
 void setSpecificationVersion(java.lang.String specificationVersion)
          Sets the specification version of the document format.
 void setStartTime(long samples)
          Sets the start time in samples.
 void setUse(java.lang.String useType, java.lang.String otherType)
          Sets the role of the document.
 void setWordSize(int wordSize)
          Sets the word size.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

BIG_ENDIAN

public static final int BIG_ENDIAN
Big-endian constant.

See Also:
Constant Field Values

LITTLE_ENDIAN

public static final int LITTLE_ENDIAN
Little-endian constant.

See Also:
Constant Field Values

A_D

public static final java.lang.String[] A_D
Analog / digital labels.


FILE_NAME

public static final java.lang.String FILE_NAME
Values for primary identifier type

See Also:
Constant Field Values

OTHER

public static final java.lang.String OTHER
Values for primary identifier type

See Also:
Constant Field Values

NULL

public static final int NULL
Constant for an undefined integer value.

See Also:
Constant Field Values

NILL

public static final double NILL
Constant for an undefined floating-point value.

See Also:
Constant Field Values

SCHEMA_VERSION

public static final java.lang.String SCHEMA_VERSION
Constant value for the SchemaVersion field

See Also:
Constant Field Values
Constructor Detail

AESAudioMetadata

public AESAudioMetadata()
Instantiate a NisoImageMetadata object.

Method Detail

getAnalogDigitalFlag

public java.lang.String getAnalogDigitalFlag()
Returns analog/digital flag. Value will always be "FILE_DIGITAL" in practice.


getAppSpecificData

public java.lang.String getAppSpecificData()
Returns application-specific data. We assume this is representable in String format.


getAudioDataEncoding

public java.lang.String getAudioDataEncoding()
Returns audio data encoding.


getBitrateReduction

public java.lang.String[] getBitrateReduction()
Returns the bitrate reduction (compression information). This will be an array of seven strings (which may be empty, but should never be null) interpreted as follows:
  • 0: codecName
  • 1: codecNameVersion
  • 2: codecCreatorApplication
  • 3: codecCreatorApplicationVersion
  • 4: codecQuality
  • 5: dataRate
  • 6: dataRateMode


getSampleRate

public double getSampleRate()

getByteOrder

public int getByteOrder()
Return the byte order: 0 = big-endian; 1 = little-endian.


getDisposition

public java.lang.String getDisposition()
Returns disposition.


getFaceList

public java.util.List getFaceList()
Gets the list of Faces. Normally there will be only one face in a digital file.


getFirstSampleOffset

public long getFirstSampleOffset()
Return the offset of the first byte of sample data.


getFormat

public java.lang.String getFormat()
Returns format name.


getFormatList

public java.util.List getFormatList()
Gets the list of Format Regions. Since one is created automatically on initialization, it's possible that the list will contain a Format Region with only default values. This should be checked with isEmpty ().


getMapLocations

public java.lang.String[] getMapLocations()
Returns the names of the map locations. The returned value is an array whose length equals the number of channels and whose elements correspond to channels 0, 1, etc.


getNumChannels

public int getNumChannels()
Returns number of channels.


getPrimaryIdentifier

public java.lang.String getPrimaryIdentifier()
Returns primary identifier.


getPrimaryIdentifierType

public java.lang.String getPrimaryIdentifierType()
Returns primary identifier type.


getSchemaVersion

public java.lang.String getSchemaVersion()
Returns schema version.


getSpecificationVersion

public java.lang.String getSpecificationVersion()
Returns specification version of the document format.


getUse

public java.lang.String[] getUse()
Returns the use (role of the document). The value returned is an array of two strings, the useType and the otherType.


setAnalogDigitalFlag

public void setAnalogDigitalFlag(java.lang.String flagType)
Sets the analog/digital flag. The value set should always be "FILE_DIGITAL".


setBitrateReduction

public void setBitrateReduction(java.lang.String codecName,
                                java.lang.String codecNameVersion,
                                java.lang.String codecCreatorApplication,
                                java.lang.String codecCreatorApplicationVersion,
                                java.lang.String codecQuality,
                                java.lang.String dataRate,
                                java.lang.String dataRateMode)
Sets the bitrate reduction (compression type).


clearBitrateReduction

public void clearBitrateReduction()
Set the bitrate reduction information to null (no compression).


setByteOrder

public void setByteOrder(int order)
Sets the byte order.

Parameters:
order - Byte order: 0 = big-endian, 1 = little-endian

setByteOrder

public void setByteOrder(java.lang.String order)
Sets the byte order.


setAudioDataEncoding

public void setAudioDataEncoding(java.lang.String audioDataEncoding)
Sets the audio data encoding.


setAppSpecificData

public void setAppSpecificData(java.lang.String data)
Set the application-specific data. For present purposes, we assume this is representable as a text string.


setBitDepth

public void setBitDepth(int bitDepth)
Sets the bit depth.


setDisposition

public void setDisposition(java.lang.String disposition)
Sets the disposition.


setDirection

public void setDirection(java.lang.String direction)
Sets the direction. This must be one of the values FORWARD, REVERSE, A_WIND, B_WIND, C_WIND, D_WIND, FRONT, BACK. FORWARD may be the only one that makes sense for digital formats.


setDuration

public void setDuration(long duration)
Sets the duration in samples. This affects the current face and its first FaceRegion.


setFirstSampleOffset

public void setFirstSampleOffset(long offset)
Sets the offset of the first byte of sample data.


setFormat

public void setFormat(java.lang.String format)
Sets the format name.


setMapLocations

public void setMapLocations(java.lang.String[] locations)
Sets the array of channel map locations. The length of the array must equal the number of channels.


setNumChannels

public void setNumChannels(int numChannels)
Sets the number of channels.


setPrimaryIdentifier

public void setPrimaryIdentifier(java.lang.String primaryIdentifier)
Sets the primary identifier.


setPrimaryIdentifierType

public void setPrimaryIdentifierType(java.lang.String primaryIdentifierType)
Sets the primary identifier type. If the primary identifier type is OTHER, use setOtherPrimaryIdentifierType instead.


setOtherPrimaryIdentifierType

public void setOtherPrimaryIdentifierType(java.lang.String otherType)
Sets the primary identifier type as "OTHER", and set the otherType.


setSampleRate

public void setSampleRate(double sampleRate)
Sets the sample rate.


setSpecificationVersion

public void setSpecificationVersion(java.lang.String specificationVersion)
Sets the specification version of the document format.


setStartTime

public void setStartTime(long samples)
Sets the start time in samples. This affects the current face and its first FaceRegion.


setUse

public void setUse(java.lang.String useType,
                   java.lang.String otherType)
Sets the role of the document. Permitted values are ORIGINAL_MASTER, PRESERVATION_MASTER, PRODUCTION_MASTER, SERVICE, PREVIEW, or OTHER. If useType is "OTHER", then otherType is significant. Since OTHER is the only meaningful value for a digital document, the code assumes this will always be the case and uses otherType.


setWordSize

public void setWordSize(int wordSize)
Sets the word size.


addFormatRegion

public void addFormatRegion()
Adds a FormatRegion object to a FormatSize list. The most recently added FormatRegion object will be filled in by setBitDepth, setSampleRate, and setWordSize.


addFace

public void addFace()
Adds a Face.



jhove/doc/edu/harvard/hul/ois/jhove/Agent.html0000644000707400001440000004462711510702350020460 0ustar garyusers Agent (JHOVE Documentation)

edu.harvard.hul.ois.jhove
Class Agent

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.Agent

public class Agent
extends java.lang.Object

Encapsulates information about agents, either individual persons or corporate bodies.


Constructor Summary
Agent(java.lang.String name, AgentType type)
          Creates an Agent given a name and an AgentType.
 
Method Summary
 java.lang.String getAddress()
          Returns the value of the address property.
 java.lang.String getEmail()
          Returns the value of the email property.
 java.lang.String getFax()
          Returns the value of the fax property.
 java.lang.String getName()
          Returns the value of the name property.
 java.lang.String getNote()
          Returns the value of the note property.
 java.lang.String getTelephone()
          Returns the value of the telephone property.
 AgentType getType()
          Returns the value of the type property.
 java.lang.String getWeb()
          Returns the value of the web property.
 void setAddress(java.lang.String address)
          Sets the value of the address property.
 void setEmail(java.lang.String email)
          Sets the value of the email property.
 void setFax(java.lang.String fax)
          Sets the value of the fax property.
 void setName(java.lang.String name)
          Sets the value of the name property.
 void setNote(java.lang.String note)
          Sets the value of the note property.
 void setTelephone(java.lang.String telephone)
          Sets the value of the telephone property.
 void setWeb(java.lang.String web)
          Sets the value of the web property.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

Agent

public Agent(java.lang.String name,
             AgentType type)
Creates an Agent given a name and an AgentType.

Method Detail

getAddress

public java.lang.String getAddress()
Returns the value of the address property.


getEmail

public java.lang.String getEmail()
Returns the value of the email property.


getFax

public java.lang.String getFax()
Returns the value of the fax property.


getName

public java.lang.String getName()
Returns the value of the name property.


getNote

public java.lang.String getNote()
Returns the value of the note property.


getTelephone

public java.lang.String getTelephone()
Returns the value of the telephone property.


getType

public AgentType getType()
Returns the value of the type property.


getWeb

public java.lang.String getWeb()
Returns the value of the web property.


setAddress

public void setAddress(java.lang.String address)
Sets the value of the address property.


setEmail

public void setEmail(java.lang.String email)
Sets the value of the email property.


setFax

public void setFax(java.lang.String fax)
Sets the value of the fax property.


setName

public void setName(java.lang.String name)
Sets the value of the name property.


setNote

public void setNote(java.lang.String note)
Sets the value of the note property.


setTelephone

public void setTelephone(java.lang.String telephone)
Sets the value of the telephone property.


setWeb

public void setWeb(java.lang.String web)
Sets the value of the web property.



jhove/doc/edu/harvard/hul/ois/jhove/AgentType.html0000644000707400001440000003450411510702350021313 0ustar garyusers AgentType (JHOVE Documentation)

edu.harvard.hul.ois.jhove
Class AgentType

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.EnumerationType
      extended by edu.harvard.hul.ois.jhove.AgentType

public final class AgentType
extends EnumerationType

This class defines enumerated types for an Agent. Applications will not create or modify AgentTypes, but will use one of the predefined AgentType instances COMMERCIAL, GOVERNMENT, EDUCATIONAL, NONPROFIT, STANDARD, or OTHER.

See Also:
Agent

Field Summary
static AgentType COMMERCIAL
          Agent type for a commercial entity.
static AgentType EDUCATIONAL
          Agent type for an educational institution.
static AgentType GOVERNMENT
          Agent type for a governmental body.
static AgentType NONPROFIT
          Agent type for a non-profit organization.
static AgentType OTHER
          Agent type that doesn't fit the other categories.
static AgentType STANDARD
          Agent type for a standards body.
 
Method Summary
 
Methods inherited from class edu.harvard.hul.ois.jhove.EnumerationType
equals, toString
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

COMMERCIAL

public static final AgentType COMMERCIAL
Agent type for a commercial entity.


GOVERNMENT

public static final AgentType GOVERNMENT
Agent type for a governmental body.


EDUCATIONAL

public static final AgentType EDUCATIONAL
Agent type for an educational institution.


NONPROFIT

public static final AgentType NONPROFIT
Agent type for a non-profit organization.


STANDARD

public static final AgentType STANDARD
Agent type for a standards body.


OTHER

public static final AgentType OTHER
Agent type that doesn't fit the other categories.



jhove/doc/edu/harvard/hul/ois/jhove/AnalogDigitalFlagType.html0000644000707400001440000003025211510702351023543 0ustar garyusers AnalogDigitalFlagType (JHOVE Documentation)

edu.harvard.hul.ois.jhove
Class AnalogDigitalFlagType

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.EnumerationType
      extended by edu.harvard.hul.ois.jhove.AnalogDigitalFlagType

public class AnalogDigitalFlagType
extends EnumerationType

This class defines enumerated types for the analog/digital flag of AESAudioMetadata. Applications will not create or modify instances of this class, but will use one of the predefined AnalogDigitalFlagType instances.

Author:
Gary McGath

Field Summary
static AnalogDigitalFlagType ANALOG
          Enumeration instance for analog data
static AnalogDigitalFlagType FILE_DIGITAL
          Enumeration instance for FILE digital data
static AnalogDigitalFlagType PHYS_DIGITAL
          Enumeration instance for physical digital data
 
Method Summary
 
Methods inherited from class edu.harvard.hul.ois.jhove.EnumerationType
equals, toString
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

ANALOG

public static final AnalogDigitalFlagType ANALOG
Enumeration instance for analog data


PHYS_DIGITAL

public static final AnalogDigitalFlagType PHYS_DIGITAL
Enumeration instance for physical digital data


FILE_DIGITAL

public static final AnalogDigitalFlagType FILE_DIGITAL
Enumeration instance for FILE digital data



jhove/doc/edu/harvard/hul/ois/jhove/App.html0000644000707400001440000003410711510702351020133 0ustar garyusers App (JHOVE Documentation)

edu.harvard.hul.ois.jhove
Class App

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.App

public class App
extends java.lang.Object

The application class for JHOVE. One instance of this class is generated by the application. Various utility and informational methods are contained here.


Constructor Summary
App(java.lang.String name, java.lang.String release, int[] date, java.lang.String usage, java.lang.String rights)
          Creates an App object.
 
Method Summary
 java.util.Date getDate()
          Returns application code creation date
 java.lang.String getName()
          Returns the name of this application
 java.lang.String getRelease()
          Returns the release identifier for this application.
 java.lang.String getRights()
          Returns the rights string.
 java.lang.String getUsage()
          Returns the usage string, which should be output when the user enters a command line with only the application name.
 void show(OutputHandler handler)
          Outputs detailed information about the application, including configuration, available modules and handlers, etc.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

App

public App(java.lang.String name,
           java.lang.String release,
           int[] date,
           java.lang.String usage,
           java.lang.String rights)
Creates an App object.

Parameters:
name - Name of the application.
release - Release identifier.
date - Last modification date of the application code, in the form of an array of three numbers. date[0] is the year, date[1] the month, and date[2] the day.
usage - String summarizing command line usage, to output when app name is typed with no arguments or flags.
rights - Copyright or other rights statement.
Method Detail

getDate

public java.util.Date getDate()
Returns application code creation date


getName

public java.lang.String getName()
Returns the name of this application


getRelease

public java.lang.String getRelease()
Returns the release identifier for this application.


getRights

public java.lang.String getRights()
Returns the rights string.


getUsage

public java.lang.String getUsage()
Returns the usage string, which should be output when the user enters a command line with only the application name.


show

public void show(OutputHandler handler)
Outputs detailed information about the application, including configuration, available modules and handlers, etc.



jhove/doc/edu/harvard/hul/ois/jhove/ByteArrayXMPSource.html0000644000707400001440000003435411510702351023067 0ustar garyusers ByteArrayXMPSource (JHOVE Documentation)

edu.harvard.hul.ois.jhove
Class ByteArrayXMPSource

java.lang.Object
  extended by org.xml.sax.InputSource
      extended by edu.harvard.hul.ois.jhove.XMPSource
          extended by edu.harvard.hul.ois.jhove.ByteArrayXMPSource

public class ByteArrayXMPSource
extends XMPSource

Class for providing an InputSource to XMPHandler, with a ByteArrayInputStream as the basis of the InputSource. This is suitable for a number of modules.

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.XMPSource
_reader
 
Constructor Summary
ByteArrayXMPSource(java.io.ByteArrayInputStream instrm)
          Constructor based on ByteArrayInputStream.
ByteArrayXMPSource(java.io.ByteArrayInputStream instrm, java.lang.String encoding)
          Constructor based on ByteArrayInputStream with encoding.
 
Method Summary
protected  void resetReader()
          Causes reading to begin from the start again.
 
Methods inherited from class edu.harvard.hul.ois.jhove.XMPSource
makeProperty
 
Methods inherited from class org.xml.sax.InputSource
getByteStream, getCharacterStream, getEncoding, getPublicId, getSystemId, setByteStream, setCharacterStream, setEncoding, setPublicId, setSystemId
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ByteArrayXMPSource

public ByteArrayXMPSource(java.io.ByteArrayInputStream instrm)
                   throws java.io.IOException
Constructor based on ByteArrayInputStream.

Parameters:
instrm - ByteArrayInputStream containing the XMP
Throws:
java.io.IOException

ByteArrayXMPSource

public ByteArrayXMPSource(java.io.ByteArrayInputStream instrm,
                          java.lang.String encoding)
                   throws java.io.IOException
Constructor based on ByteArrayInputStream with encoding.

Parameters:
instrm - ByteArrayInputStream containing the XMP
Throws:
java.io.IOException
Method Detail

resetReader

protected void resetReader()
Description copied from class: XMPSource
Causes reading to begin from the start again. Typically this means creating a new value for _reader that will start over.

Specified by:
resetReader in class XMPSource


jhove/doc/edu/harvard/hul/ois/jhove/Callback.html0000644000707400001440000002076711510702351021116 0ustar garyusers Callback (JHOVE Documentation)

edu.harvard.hul.ois.jhove
Interface Callback

All Known Implementing Classes:
JhoveWindow

public interface Callback

An interface for supporting a general, simple callback function.


Method Summary
 int callback(int selector, java.lang.Object parm)
          A generic callback function.
 

Method Detail

callback

int callback(int selector,
             java.lang.Object parm)
A generic callback function. Any class which needs to support callback can implement callback and pass a reference to itself to the function that does the callback.

Parameters:
selector - An indicator of the function to be performed. Interpretation is determined by the implementing class.
parm - Whatever data may be appropriate to the callback.
Returns:
As specified by the implementing class.


jhove/doc/edu/harvard/hul/ois/jhove/Checksum.html0000644000707400001440000003255611510702351021163 0ustar garyusers Checksum (JHOVE Documentation)

edu.harvard.hul.ois.jhove
Class Checksum

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.Checksum

public class Checksum
extends java.lang.Object

This class encapsulates the result of calculations which provide a greater or lesser degree of confirmation of the integrity of a digital object's content, including checksums, CRC's, message digests, etc.

See Also:
ChecksumType, Checksummer

Constructor Summary
Checksum(java.lang.String value, ChecksumType type)
          Creates a Checksum with a given value and type
 
Method Summary
 ChecksumType getType()
          Returns this Checksum's type
 java.lang.String getValue()
          Returns this Checksum's value
 void setType(ChecksumType type)
          Sets the type of this Checksum
 void setValue(java.lang.String value)
          Sets the value of this Checksum
static byte unsignedByteToByte(int value)
          Maps unsigned byte value (0 to 256) to signed byte value (-128 to 127).
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

Checksum

public Checksum(java.lang.String value,
                ChecksumType type)
Creates a Checksum with a given value and type

Method Detail

getType

public ChecksumType getType()
Returns this Checksum's type


getValue

public java.lang.String getValue()
Returns this Checksum's value


setType

public void setType(ChecksumType type)
Sets the type of this Checksum


setValue

public void setValue(java.lang.String value)
Sets the value of this Checksum


unsignedByteToByte

public static byte unsignedByteToByte(int value)
Maps unsigned byte value (0 to 256) to signed byte value (-128 to 127).



jhove/doc/edu/harvard/hul/ois/jhove/ChecksumInputStream.html0000644000707400001440000004300611510702351023347 0ustar garyusers ChecksumInputStream (JHOVE Documentation)

edu.harvard.hul.ois.jhove
Class ChecksumInputStream

java.lang.Object
  extended by java.io.InputStream
      extended by java.io.FilterInputStream
          extended by edu.harvard.hul.ois.jhove.ChecksumInputStream
All Implemented Interfaces:
java.io.Closeable

public class ChecksumInputStream
extends java.io.FilterInputStream

A ChecksumInputStream is a FilterInputStream with the added functionality of calculating checksums as it goes. The idea of replacing this with java.util.zip.CheckedInputStream looks very tempting, but we need the byte count, which CheckedInputStream doesn't provide.

Author:
Gary McGath

Field Summary
 
Fields inherited from class java.io.FilterInputStream
in
 
Constructor Summary
ChecksumInputStream(java.io.InputStream stream, Checksummer cksummer)
          Constructor.
 
Method Summary
 void close()
          Closes the subsumed stream.
 Checksummer getChecksummer()
          Returns the Checksummer object.
 long getNBytes()
          Returns the byte count to date on the stream.
 int read()
          Reads a byte from the subsumed stream, updating the byte count and the checksums.
 int read(byte[] b)
          Reads some number of bytes from the input stream and stores them into the buffer array b.
 int read(byte[] b, int off, int len)
          Reads up to len bytes of data from the input stream into an array of bytes.
 long skip(long n)
          Skips n bytes.
 
Methods inherited from class java.io.FilterInputStream
available, mark, markSupported, reset
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ChecksumInputStream

public ChecksumInputStream(java.io.InputStream stream,
                           Checksummer cksummer)
Constructor.

Parameters:
stream - Stream to be filtered
cksummer - Object to calculate checksum on the bytes as they are read
Method Detail

read

public int read()
         throws java.io.IOException
Reads a byte from the subsumed stream, updating the byte count and the checksums.

Overrides:
read in class java.io.FilterInputStream
Throws:
java.io.IOException

read

public int read(byte[] b)
         throws java.io.IOException
Reads some number of bytes from the input stream and stores them into the buffer array b. The number of bytes actually read is returned as an integer. All bytes read are fed through the checksummer.

Overrides:
read in class java.io.FilterInputStream
Throws:
java.io.IOException

read

public int read(byte[] b,
                int off,
                int len)
         throws java.io.IOException
Reads up to len bytes of data from the input stream into an array of bytes. An attempt is made to read as many as len bytes, but a smaller number may be read, possibly zero. The number of bytes actually read is returned as an integer. All bytes read are fed through the checksummer.

Overrides:
read in class java.io.FilterInputStream
Throws:
java.io.IOException

skip

public long skip(long n)
          throws java.io.IOException
Skips n bytes. Reads them and feeds them through the checksummer.

Overrides:
skip in class java.io.FilterInputStream
Throws:
java.io.IOException

close

public void close()
           throws java.io.IOException
Closes the subsumed stream.

Specified by:
close in interface java.io.Closeable
Overrides:
close in class java.io.FilterInputStream
Throws:
java.io.IOException

getNBytes

public long getNBytes()
Returns the byte count to date on the stream. This returns the number of bytes read. Because of buffering, this is not a reliable indicator of how many bytes have actually been processed.


getChecksummer

public Checksummer getChecksummer()
Returns the Checksummer object.



jhove/doc/edu/harvard/hul/ois/jhove/ChecksumType.html0000644000707400001440000002770111510702351022021 0ustar garyusers ChecksumType (JHOVE Documentation)

edu.harvard.hul.ois.jhove
Class ChecksumType

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.EnumerationType
      extended by edu.harvard.hul.ois.jhove.ChecksumType

public final class ChecksumType
extends EnumerationType

This class defines enumerated types for a Checksum on a content stream or file. Applications will not create or modify ChecksumTypes, but will use one of the predefined ChecksumType instances CRC32, MD5, or SHA1.

See Also:
Checksum

Field Summary
static ChecksumType CRC32
          32-bit Cyclical Redundancy Checksum.
static ChecksumType MD5
          128-bit Message Digest 5.
static ChecksumType SHA1
          160-bit Secure Hash Algorithm.
 
Method Summary
 
Methods inherited from class edu.harvard.hul.ois.jhove.EnumerationType
equals, toString
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

CRC32

public static final ChecksumType CRC32
32-bit Cyclical Redundancy Checksum.


MD5

public static final ChecksumType MD5
128-bit Message Digest 5.


SHA1

public static final ChecksumType SHA1
160-bit Secure Hash Algorithm.



jhove/doc/edu/harvard/hul/ois/jhove/Checksummer.html0000644000707400001440000004163711510702351021667 0ustar garyusers Checksummer (JHOVE Documentation)

edu.harvard.hul.ois.jhove
Class Checksummer

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.Checksummer
All Implemented Interfaces:
java.util.zip.Checksum

public class Checksummer
extends java.lang.Object
implements java.util.zip.Checksum

The Checksummer class encapsulates the calculation of the CRC32, MD5, and SHA-1 checksums.


Field Summary
protected  long _nByte
          Byte count.
 
Constructor Summary
Checksummer()
          Creates a Checksummer, with instances of each of CRC32, MD5 MessageDigest, and SHA-1 MessageDigest.
 
Method Summary
 java.lang.String getCRC32()
          Returns the value of the CRC32 as a hex string.
 java.lang.String getMD5()
          Returns the value of the MD5 digest as a hex string.
 java.lang.String getSHA1()
          Returns the value of the SHA-1 digest as a hex string.
 long getValue()
          getValue is required by the Checksum interface, but we can return only one of the three values.
 void reset()
          Resets all checksums and the byte count to their initial values.
 void update(byte b)
          Updates the checksum with the argument.
 void update(byte[] b)
          Updates the checksum with the argument.
 void update(byte[] b, int off, int len)
          Updates the checksum with the argument.
 void update(int b)
          Updates the checksum with the argument.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

_nByte

protected long _nByte
Byte count.

Constructor Detail

Checksummer

public Checksummer()
Creates a Checksummer, with instances of each of CRC32, MD5 MessageDigest, and SHA-1 MessageDigest. If one or both of the MessageDigests aren't supported on the current platform, they are left as null.

See Also:
CRC32, MessageDigest
Method Detail

reset

public void reset()
Resets all checksums and the byte count to their initial values.

Specified by:
reset in interface java.util.zip.Checksum

getValue

public long getValue()
getValue is required by the Checksum interface, but we can return only one of the three values. We return the CRC32 value, since that's the one which is guaranteed to be available.

Specified by:
getValue in interface java.util.zip.Checksum

update

public void update(byte b)
Updates the checksum with the argument. Called when a signed byte is available.


update

public void update(int b)
Updates the checksum with the argument. Called when an unsigned byte is available.

Specified by:
update in interface java.util.zip.Checksum

update

public void update(byte[] b)
Updates the checksum with the argument. Called when a byte array is available.


update

public void update(byte[] b,
                   int off,
                   int len)
Updates the checksum with the argument. Called when a byte array is available.

Specified by:
update in interface java.util.zip.Checksum

getCRC32

public java.lang.String getCRC32()
Returns the value of the CRC32 as a hex string.


getMD5

public java.lang.String getMD5()
Returns the value of the MD5 digest as a hex string. Returns null if the digest is not available.


getSHA1

public java.lang.String getSHA1()
Returns the value of the SHA-1 digest as a hex string. Returns null if the digest is not available.



jhove/doc/edu/harvard/hul/ois/jhove/ConfigHandler.html0000644000707400001440000007060711510702351022123 0ustar garyusers ConfigHandler (JHOVE Documentation)

edu.harvard.hul.ois.jhove
Class ConfigHandler

java.lang.Object
  extended by org.xml.sax.helpers.DefaultHandler
      extended by edu.harvard.hul.ois.jhove.ConfigHandler
All Implemented Interfaces:
org.xml.sax.ContentHandler, org.xml.sax.DTDHandler, org.xml.sax.EntityResolver, org.xml.sax.ErrorHandler

public class ConfigHandler
extends org.xml.sax.helpers.DefaultHandler

SAX Parser for the configuration file.


Field Summary
protected  java.lang.StringBuffer _content
           
protected  java.util.List _handlerParams
          The list of handler parameters.
protected  boolean _isHandler
           
protected  boolean _isModule
           
protected  java.util.List _modParams
          The list of module parameters.
protected  java.util.List _module
          The list of modules.
 
Constructor Summary
ConfigHandler()
          Creates a ConfigHandler.
 
Method Summary
 void characters(char[] ch, int start, int length)
          SAX parser callback method.
 void endElement(java.lang.String namespaceURI, java.lang.String localName, java.lang.String rawName)
          SAX parser callback method.
 int getBufferSize()
          Returns the buffer size specified in the config file.
 java.lang.String getEncoding()
          Returns the character encoding specified by the config file.
 java.util.Map getExtensions()
          Return an associative map of configuration extensions.
 java.util.List getHandler()
          Returns the List of OutputHandlers specified by the config file.
 java.util.List getHandlerParams()
          Returns the List of handler parameters specified by the config file.
 java.lang.String getJhoveHome()
          Returns the path to the application's home directory, with final path separator.
 java.lang.String getLogLevel()
          Returns the name of the desired log level.
 java.lang.String getMixVsn()
          Returns the MIX schema version specified by the config file.
 java.util.List getModule()
          Returns the List of Modules specified by the config file.
 java.util.List getModuleParams()
          Returns the List of module parameters specified by the config file.
 int getSigBytes()
          Returns the number of bytes to examine when looking for an indefinitely positioned signature, or checking the first sigBytes bytes of a file in lieu of a signature.
 java.lang.String getTempDir()
          Returns the temporary directory path specified by the config file, with final path separator.
 org.xml.sax.InputSource resolveEntity(java.lang.String publicId, java.lang.String systemId)
          EntityResolver designed to locate the config schema.
 void startElement(java.lang.String namespaceURI, java.lang.String localName, java.lang.String rawName, org.xml.sax.Attributes atts)
          SAX parser callback method.
 
Methods inherited from class org.xml.sax.helpers.DefaultHandler
endDocument, endPrefixMapping, error, fatalError, ignorableWhitespace, notationDecl, processingInstruction, setDocumentLocator, skippedEntity, startDocument, startPrefixMapping, unparsedEntityDecl, warning
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

_content

protected java.lang.StringBuffer _content

_handlerParams

protected java.util.List _handlerParams
The list of handler parameters. Each element in the List is a List of Strings (which may be empty but not null) representing parameters to be passed to the module. List elements are in one-to-one correspondence with _handler.


_isHandler

protected boolean _isHandler

_isModule

protected boolean _isModule

_module

protected java.util.List _module
The list of modules. Each element in the List is an array of two Strings representing the class and the initialization string.


_modParams

protected java.util.List _modParams
The list of module parameters. Each element in the List is a List of Strings (which may be empty but not null) representing parameters to be passed to the module. List elements are in one-to-one correspondence with _module.

Constructor Detail

ConfigHandler

public ConfigHandler()
Creates a ConfigHandler.

Method Detail

getModule

public java.util.List getModule()
Returns the List of Modules specified by the config file. Each element of the List is a String[2] whose elements are the module class name and initialization value.

See Also:
Module

getModuleParams

public java.util.List getModuleParams()
Returns the List of module parameters specified by the config file. Each element of the List is a List (possibly empty) of Strings whose elements are parameters to pass to the module. The values returned by getModuleParams() are in one-to-one correspondence with those return by getModule().


getHandlerParams

public java.util.List getHandlerParams()
Returns the List of handler parameters specified by the config file. Each element of the List is a List (possibly empty) of Strings whose elements are parameters to pass to the output handler. The values returned by getHandlerParams() are in one-to-one correspondence with those return by getHandler().


getHandler

public java.util.List getHandler()
Returns the List of OutputHandlers specified by the config file.

See Also:
OutputHandler

getTempDir

public java.lang.String getTempDir()
Returns the temporary directory path specified by the config file, with final path separator.


getMixVsn

public java.lang.String getMixVsn()
Returns the MIX schema version specified by the config file. Acceptable values are "0.2" and "1.0" and "2.0".


getSigBytes

public int getSigBytes()
Returns the number of bytes to examine when looking for an indefinitely positioned signature, or checking the first sigBytes bytes of a file in lieu of a signature.


getEncoding

public java.lang.String getEncoding()
Returns the character encoding specified by the config file.


getBufferSize

public int getBufferSize()
Returns the buffer size specified in the config file.

Returns:
the buffer size, or -1 if none specified

getExtensions

public java.util.Map getExtensions()
Return an associative map of configuration extensions.


getJhoveHome

public java.lang.String getJhoveHome()
Returns the path to the application's home directory, with final path separator.


getLogLevel

public java.lang.String getLogLevel()
Returns the name of the desired log level. This should be the name of one of the predefined values of java.util.logging.Level, e.g., "WARNING", "INFO", "ALL". The default level is SEVERE.


startElement

public void startElement(java.lang.String namespaceURI,
                         java.lang.String localName,
                         java.lang.String rawName,
                         org.xml.sax.Attributes atts)
                  throws org.xml.sax.SAXException
SAX parser callback method.

Specified by:
startElement in interface org.xml.sax.ContentHandler
Overrides:
startElement in class org.xml.sax.helpers.DefaultHandler
Throws:
org.xml.sax.SAXException

characters

public void characters(char[] ch,
                       int start,
                       int length)
                throws org.xml.sax.SAXException
SAX parser callback method.

Specified by:
characters in interface org.xml.sax.ContentHandler
Overrides:
characters in class org.xml.sax.helpers.DefaultHandler
Throws:
org.xml.sax.SAXException

endElement

public void endElement(java.lang.String namespaceURI,
                       java.lang.String localName,
                       java.lang.String rawName)
                throws org.xml.sax.SAXException
SAX parser callback method.

Specified by:
endElement in interface org.xml.sax.ContentHandler
Overrides:
endElement in class org.xml.sax.helpers.DefaultHandler
Throws:
org.xml.sax.SAXException

resolveEntity

public org.xml.sax.InputSource resolveEntity(java.lang.String publicId,
                                             java.lang.String systemId)
                                      throws org.xml.sax.SAXException,
                                             java.io.IOException
EntityResolver designed to locate the config schema. It tries to find it as a local resource. It appears that not all SAX implementations will actually call this function for schema resolution, so this isn't a guarantee that the schema in the config file won't be called directly. But hopefully it will cut down on the burden on the server with the official schema copy.

Specified by:
resolveEntity in interface org.xml.sax.EntityResolver
Overrides:
resolveEntity in class org.xml.sax.helpers.DefaultHandler
Throws:
org.xml.sax.SAXException
java.io.IOException


jhove/doc/edu/harvard/hul/ois/jhove/CountedInputStream.html0000644000707400001440000003565211510702351023216 0ustar garyusers CountedInputStream (JHOVE Documentation)

edu.harvard.hul.ois.jhove
Class CountedInputStream

java.lang.Object
  extended by java.io.InputStream
      extended by java.io.FilterInputStream
          extended by edu.harvard.hul.ois.jhove.CountedInputStream
All Implemented Interfaces:
java.io.Closeable

public class CountedInputStream
extends java.io.FilterInputStream

A FilterInputStream which passes only a specified number of bytes, then returns an EOF condition.

Author:
Gary McGath

Field Summary
 
Fields inherited from class java.io.FilterInputStream
in
 
Constructor Summary
CountedInputStream(java.io.InputStream instrm, int count)
           
 
Method Summary
 int read()
          Reads a single byte from the stream and decrements the count of remaining bytes.
 int read(byte[] b)
          Reads some number of bytes from the input stream and stores them into the buffer array b.
 int read(byte[] b, int off, int len)
          Reads up to len bytes of data from the input stream into an array of bytes.
 long skip(long n)
          Skips n bytes.
 
Methods inherited from class java.io.FilterInputStream
available, close, mark, markSupported, reset
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

CountedInputStream

public CountedInputStream(java.io.InputStream instrm,
                          int count)
Parameters:
instrm - The InputStream being counted
count - The number of bytes to be allowed
Method Detail

read

public int read()
         throws java.io.IOException
Reads a single byte from the stream and decrements the count of remaining bytes. If the count is exhausted, returns -1 to signify end of file.

Overrides:
read in class java.io.FilterInputStream
Throws:
java.io.IOException

read

public int read(byte[] b)
         throws java.io.IOException
Reads some number of bytes from the input stream and stores them into the buffer array b. The number of bytes actually read is returned as an integer. The number of bytes read will not exceed the number of bytes remaining in the count. The count is decremented by the number of bytes actually read.

Overrides:
read in class java.io.FilterInputStream
Throws:
java.io.IOException

read

public int read(byte[] b,
                int off,
                int len)
         throws java.io.IOException
Reads up to len bytes of data from the input stream into an array of bytes. An attempt is made to read as many as len bytes, but a smaller number may be read, possibly zero. The number of bytes actually read is returned as an integer. The number of bytes read will not exceed the number of bytes remaining in the count. The count is decremented by the number of bytes actually read.

Overrides:
read in class java.io.FilterInputStream
Throws:
java.io.IOException

skip

public long skip(long n)
          throws java.io.IOException
Skips n bytes. Decrements the count by the number of bytes actually skipped.

Overrides:
skip in class java.io.FilterInputStream
Throws:
java.io.IOException


jhove/doc/edu/harvard/hul/ois/jhove/Document.html0000644000707400001440000005417611510702351021201 0ustar garyusers Document (JHOVE Documentation)

edu.harvard.hul.ois.jhove
Class Document

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.Document

public class Document
extends java.lang.Object

This class encapsulates information about format specification documents.

See Also:
DocumentType

Constructor Summary
Document(java.lang.String title, DocumentType type)
          Creates a Document with a given title and one of the predefined DocumentTypes.
 
Method Summary
 java.util.List getAuthor()
          Returns a List of Agents, each representing an author of this Document.
 java.lang.String getDate()
          Returns the date of this Document
 java.lang.String getEdition()
          Returns informaton on the edition of this Document
 java.lang.String getEnumeration()
          Returns the enumeration (e.g., serial volume and number) of this Document
 java.util.List getIdentifier()
          Returns the list of formal Identifiers for this Document.
 java.lang.String getNote()
          Returns the note associated with this Document
 java.lang.String getPages()
          Returns pagination information for this Document
 java.util.List getPublisher()
          Returns a List of Agents, each representing a publisher of this Document.
 java.lang.String getTitle()
          Returns the title of this Document
 DocumentType getType()
          Returns one of the predefined DocumentTypes as the type of this Document
 void setAuthor(Agent author)
          Adds an author to the list of authors
 void setDate(java.lang.String date)
          Sets the date of this Document
 void setEdition(java.lang.String edition)
          Sets edition information for this Document
 void setEnumeration(java.lang.String enm)
          Sets enumeration information (e.g., serial volume and number) for this Document
 void setIdentifier(Identifier identifier)
          Adds an Identifier to the list of identifiers
 void setNote(java.lang.String note)
          Sets a note giving additional information about this Document
 void setPages(java.lang.String pages)
          Sets pagination information for this Document
 void setPublisher(Agent publisher)
          Adds a publisher to the list of publishers
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

Document

public Document(java.lang.String title,
                DocumentType type)
Creates a Document with a given title and one of the predefined DocumentTypes.

Method Detail

getAuthor

public java.util.List getAuthor()
Returns a List of Agents, each representing an author of this Document. Returns an empty list if no authors have been listed.

See Also:
Agent

getDate

public java.lang.String getDate()
Returns the date of this Document


getEdition

public java.lang.String getEdition()
Returns informaton on the edition of this Document


getEnumeration

public java.lang.String getEnumeration()
Returns the enumeration (e.g., serial volume and number) of this Document


getIdentifier

public java.util.List getIdentifier()
Returns the list of formal Identifiers for this Document. If no Identifiers are given, returns an empty list.


getNote

public java.lang.String getNote()
Returns the note associated with this Document


getPages

public java.lang.String getPages()
Returns pagination information for this Document


getPublisher

public java.util.List getPublisher()
Returns a List of Agents, each representing a publisher of this Document. If no publishers are listed, returns an empty list.


getTitle

public java.lang.String getTitle()
Returns the title of this Document


getType

public DocumentType getType()
Returns one of the predefined DocumentTypes as the type of this Document


setAuthor

public void setAuthor(Agent author)
Adds an author to the list of authors


setDate

public void setDate(java.lang.String date)
Sets the date of this Document


setEdition

public void setEdition(java.lang.String edition)
Sets edition information for this Document


setEnumeration

public void setEnumeration(java.lang.String enm)
Sets enumeration information (e.g., serial volume and number) for this Document


setIdentifier

public void setIdentifier(Identifier identifier)
Adds an Identifier to the list of identifiers


setNote

public void setNote(java.lang.String note)
Sets a note giving additional information about this Document


setPages

public void setPages(java.lang.String pages)
Sets pagination information for this Document


setPublisher

public void setPublisher(Agent publisher)
Adds a publisher to the list of publishers



jhove/doc/edu/harvard/hul/ois/jhove/DocumentType.html0000644000707400001440000003605611510702351022040 0ustar garyusers DocumentType (JHOVE Documentation)

edu.harvard.hul.ois.jhove
Class DocumentType

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.EnumerationType
      extended by edu.harvard.hul.ois.jhove.DocumentType

public final class DocumentType
extends EnumerationType

This class defines enumerated types for a Document. Applications will not create or modify DocumentTypes, but will use one of the predefined DocumentType instances ARTICLE, BOOK, REPORT, RFC, STANDARD, WEB, or OTHER.

See Also:
Document

Field Summary
static DocumentType ARTICLE
          Document type for a printed article.
static DocumentType BOOK
          Document type for an book.
static DocumentType OTHER
          Document type that doesn't fit the other categories.
static DocumentType REPORT
          Document type for a report.
static DocumentType RFC
          Document type for an IETF Request for Comment.
static DocumentType STANDARD
          Document type for a standards body publication.
static DocumentType WEB
          Document type for a Web page.
 
Method Summary
 
Methods inherited from class edu.harvard.hul.ois.jhove.EnumerationType
equals, toString
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

ARTICLE

public static final DocumentType ARTICLE
Document type for a printed article.


BOOK

public static final DocumentType BOOK
Document type for an book.


REPORT

public static final DocumentType REPORT
Document type for a report.


RFC

public static final DocumentType RFC
Document type for an IETF Request for Comment.


STANDARD

public static final DocumentType STANDARD
Document type for a standards body publication.


WEB

public static final DocumentType WEB
Document type for a Web page.


OTHER

public static final DocumentType OTHER
Document type that doesn't fit the other categories.



jhove/doc/edu/harvard/hul/ois/jhove/Dump.html0000644000707400001440000003731711510702351020326 0ustar garyusers Dump (JHOVE Documentation)

edu.harvard.hul.ois.jhove
Class Dump

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.Dump

public class Dump
extends java.lang.Object

Common methods for dump utilities.


Constructor Summary
Dump()
          CLASS CONSTRUCTOR.
 
Method Summary
protected static java.lang.String leading(int os, int width)
          Return leading characters to pad out the byte offset to field width.
protected static java.lang.String leading(int os, int width, char pad)
          Return leading characters to pad out the byte offset to field width.
protected static java.lang.String leading(long os, int width)
          Return leading characters to pad out the byte offset to field width.
protected static java.lang.String leading(long os, int width, char pad)
          Return leading characters to pad out the byte offset to field width.
protected static java.lang.String leading(java.lang.String s, int width)
          Return leading characters to pad out the string to field width.
protected static java.lang.String leading(java.lang.String s, int width, char pad)
          Return leading characters to pad out the string to field width.
protected static java.lang.String readChars(java.io.DataInputStream stream, int length)
          Read and display a sequence of characters.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

Dump

public Dump()
CLASS CONSTRUCTOR.

Method Detail

leading

protected static java.lang.String leading(int os,
                                          int width)
Return leading characters to pad out the byte offset to field width.

Parameters:
os - Byte offset
width - Field width
Returns:
String of leading zeros

leading

protected static java.lang.String leading(long os,
                                          int width)
Return leading characters to pad out the byte offset to field width.

Parameters:
os - Byte offset
width - Field width
Returns:
String of leading zeros

leading

protected static java.lang.String leading(int os,
                                          int width,
                                          char pad)
Return leading characters to pad out the byte offset to field width.

Parameters:
os - Byte offset
width - Field width
pad - Padding character
Returns:
String of leading characters

leading

protected static java.lang.String leading(long os,
                                          int width,
                                          char pad)
Return leading characters to pad out the byte offset to field width.

Parameters:
os - Byte offset
width - Field width
pad - Padding character
Returns:
String of leading characters

leading

protected static java.lang.String leading(java.lang.String s,
                                          int width)
Return leading characters to pad out the string to field width.

Parameters:
s - String
width - Field width
Returns:
String of leading characters

leading

protected static java.lang.String leading(java.lang.String s,
                                          int width,
                                          char pad)
Return leading characters to pad out the string to field width.

Parameters:
s - String
width - Field width
pad - Padding character
Returns:
String of leading characters

readChars

protected static java.lang.String readChars(java.io.DataInputStream stream,
                                            int length)
                                     throws java.io.IOException
Read and display a sequence of characters.

Parameters:
stream - Data input stream
length - Number of characters
Returns:
Character string
Throws:
java.io.IOException


jhove/doc/edu/harvard/hul/ois/jhove/EnumerationType.html0000644000707400001440000003104711510702351022543 0ustar garyusers EnumerationType (JHOVE Documentation)

edu.harvard.hul.ois.jhove
Class EnumerationType

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.EnumerationType
Direct Known Subclasses:
AgentType, AnalogDigitalFlagType, ChecksumType, DocumentType, IdentifierType, PropertyArity, PropertyType, SignatureType, SignatureUseType

public abstract class EnumerationType
extends java.lang.Object

Enumerated data type. To create an emumeration, define a subclass of EnumerationType with a private constructor, and define as many public final static instances of the subclass, within the subclass definition, as there are enumeration cases. No other instances of an EnumerationType should ever be created, and the only operations which should ever be performed on an EnumerationType are assignment and equality testing.


Constructor Summary
protected EnumerationType(java.lang.String value)
          Instantiate an EnumerationType object.
 
Method Summary
 boolean equals(EnumerationType enm)
          Type equality test.
 java.lang.String toString()
          Return enumeration value.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

EnumerationType

protected EnumerationType(java.lang.String value)
Instantiate an EnumerationType object.

Parameters:
value - Enumeration value
Method Detail

equals

public boolean equals(EnumerationType enm)
Type equality test.

Parameters:
enm - Enumerated type
Returns:
True, if equal

toString

public java.lang.String toString()
Return enumeration value.

Overrides:
toString in class java.lang.Object
Returns:
Value


jhove/doc/edu/harvard/hul/ois/jhove/ErrorMessage.html0000644000707400001440000003355011510702351022012 0ustar garyusers ErrorMessage (JHOVE Documentation)

edu.harvard.hul.ois.jhove
Class ErrorMessage

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.Message
      extended by edu.harvard.hul.ois.jhove.ErrorMessage

public class ErrorMessage
extends Message

This class encapsulates an error message from a Module, representing a problem in the content being analyzed.


Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.Message
_message, _offset, _subMessage, NULL
 
Constructor Summary
ErrorMessage(java.lang.String message)
          Create an ErrorMessage.
ErrorMessage(java.lang.String message, long offset)
          Create an ErrorMessage.
ErrorMessage(java.lang.String message, java.lang.String subMessage)
          Create an ErrorMessage.
ErrorMessage(java.lang.String message, java.lang.String subMessage, long offset)
          Create an ErrorMessage.
 
Method Summary
 
Methods inherited from class edu.harvard.hul.ois.jhove.Message
getMessage, getOffset, getSubMessage
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ErrorMessage

public ErrorMessage(java.lang.String message)
Create an ErrorMessage.

Parameters:
message - Human-readable string describing the problem.

ErrorMessage

public ErrorMessage(java.lang.String message,
                    long offset)
Create an ErrorMessage.

Parameters:
message - Human-readable string describing the problem.
offset - The offset in the file at which the problem was detected.

ErrorMessage

public ErrorMessage(java.lang.String message,
                    java.lang.String subMessage)
Create an ErrorMessage.

Parameters:
message - Human-readable string describing the problem.

ErrorMessage

public ErrorMessage(java.lang.String message,
                    java.lang.String subMessage,
                    long offset)
Create an ErrorMessage.

Parameters:
message - Human-readable string describing the problem.
subMessage - Human-readable additional information.
offset - The offset in the file at which the problem was detected.


jhove/doc/edu/harvard/hul/ois/jhove/ExternalSignature.html0000644000707400001440000003777711510702351023077 0ustar garyusers ExternalSignature (JHOVE Documentation)

edu.harvard.hul.ois.jhove
Class ExternalSignature

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.Signature
      extended by edu.harvard.hul.ois.jhove.ExternalSignature

public class ExternalSignature
extends Signature

This class encapsulates information about external format signatures. The value of a Signature may be either a String or a byte array (stored as an int array to avoid signed byte problems).


Constructor Summary
ExternalSignature(int[] value, SignatureType type, SignatureUseType use)
          Creates an ExternalSignature given a byte array, a type, and a use requirement.
ExternalSignature(int[] value, SignatureType type, SignatureUseType use, java.lang.String note)
          Creates an ExternalSignature given a byte array, a type, a use requirement, and a note.
ExternalSignature(java.lang.String value, SignatureType type, SignatureUseType use)
          Creates an ExternalSignature given a string value, a type, and a use requirement.
ExternalSignature(java.lang.String value, SignatureType type, SignatureUseType use, java.lang.String note)
          Creates an ExternalSignature given a string value, a type, a use requirement, and a note.
 
Method Summary
 
Methods inherited from class edu.harvard.hul.ois.jhove.Signature
getNote, getType, getUse, getValue, getValueHexString, getValueString, isStringValue
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ExternalSignature

public ExternalSignature(java.lang.String value,
                         SignatureType type,
                         SignatureUseType use)
Creates an ExternalSignature given a string value, a type, and a use requirement.


ExternalSignature

public ExternalSignature(int[] value,
                         SignatureType type,
                         SignatureUseType use)
Creates an ExternalSignature given a byte array, a type, and a use requirement.


ExternalSignature

public ExternalSignature(java.lang.String value,
                         SignatureType type,
                         SignatureUseType use,
                         java.lang.String note)
Creates an ExternalSignature given a string value, a type, a use requirement, and a note.


ExternalSignature

public ExternalSignature(int[] value,
                         SignatureType type,
                         SignatureUseType use,
                         java.lang.String note)
Creates an ExternalSignature given a byte array, a type, a use requirement, and a note.



jhove/doc/edu/harvard/hul/ois/jhove/HandlerBase.html0000644000707400001440000022410211510702351021557 0ustar garyusers HandlerBase (JHOVE Documentation)

edu.harvard.hul.ois.jhove
Class HandlerBase

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.HandlerBase
All Implemented Interfaces:
OutputHandler
Direct Known Subclasses:
TextHandler, ViewHandler, XmlHandler

public abstract class HandlerBase
extends java.lang.Object
implements OutputHandler

Abstract base class for Jhove output handlers. Output handlers should normally subclass HandlerBase.


Nested Class Summary
static class HandlerBase.SynchronizedDateFormat
          A DateFormat class to address an issue of thread safety.
 
Field Summary
protected  App _app
          The application object
protected  JhoveBase _base
          The Jhove engine
protected  java.util.Date _date
          Handler last modification date
protected  java.util.List _defaultParams
          List of default parameters.
protected  java.lang.String _encoding
          Character encoding for writer
protected  java.lang.String _init
          Initialization value.
protected  JhoveBase _je
          JHOVE engine.
protected  int _level
          Indentation level
protected  java.util.logging.Logger _logger
          Logger for a handler class.
protected  java.lang.String _name
          Handler name
protected  java.lang.String _note
          Handler note
protected  java.lang.String _param
          Handler-specific parameter.
protected  java.lang.String _release
          Handler release description.
protected  java.lang.String _rights
          Copyright notice
protected  java.util.List _specification
          Handler specification document list
protected  Agent _vendor
          Handler vendor
protected  java.io.PrintWriter _writer
          Writer for doing output
static HandlerBase.SynchronizedDateFormat date
          A DateFormat for representing a Date in yyyy-MM-dd (e.g., 2003-07-31) format.
static HandlerBase.SynchronizedDateFormat dateTime
          A DateFormat for representing a Date in yyyy-MM-dd HH:mm:ss z (e.g., 2003-07-31 15:31:12 EDT) format.
static HandlerBase.SynchronizedDateFormat iso8601
          A DateFormat for representing a Date in ISO 8601 (e.g., 2003-07-31T15:31:12-0400) format.
 
Constructor Summary
protected HandlerBase(java.lang.String name, java.lang.String release, int[] date, java.lang.String note, java.lang.String rights)
          Constructors of all subclasses of HandlerBase should call this as a super constructor.
 
Method Summary
 void analyze(RepInfo info)
          Callback allowing post-parse, pre-show analysis of object representation information.
 void applyDefaultParams()
          Applies the default parameters.
 void close()
          Close the writer after all output has been done.
protected static java.lang.String doctype(java.lang.String root, java.lang.String uri)
          Return the XML DOCTYPE instruction.
protected static java.lang.String doctype(java.lang.String root, java.lang.String name, java.lang.String uri)
          Return the XML DOCTYPE instruction.
protected static java.lang.String doubleArray(double[] darray)
          Return String representation of an array of double.
protected static java.lang.String element(java.lang.String tag)
          Returns, as a String, an empty XML.
protected static java.lang.String element(java.lang.String tag, java.lang.String content)
          Returns, as a String, an XML element with a given tag and content
protected static java.lang.String element(java.lang.String tag, java.lang.String[][] attrs)
          Returns, as a String, an XML element with a given tag and attributes
protected static java.lang.String element(java.lang.String tag, java.lang.String[][] attrs, java.lang.String content)
          Returns, as a String, an XML element with a given tag, content and attributes
protected static java.lang.String elementEnd(java.lang.String tag)
          Returns, as a String, the closing tag of an element.
protected static java.lang.String elementStart(java.lang.String tag)
          Returns, as a String, the opening tag of an element.
protected static java.lang.String elementStart(java.lang.String tag, java.lang.String[][] attrs)
          Returns, as a String, the opening tag of an element with specified attributes.
 void endDirectory()
          Callback indicating a directory is finished being processed.
 java.util.Date getDate()
          Return the last modification date of this OutputHandler, as a Java Date object
 java.lang.String getEncoding()
          Returns this handler's encoding.
protected static java.lang.String getIndent(int level)
          Returns a String containing a number of spaces equal to the current indent level.
 java.lang.String getName()
          Return the OutputHandler name
 java.lang.String getNote()
          Return the OutputHandler note
 java.lang.String getRelease()
          Return the release identifier
 java.lang.String getRights()
          Return the copyright information string
 java.util.List getSpecification()
          Returns a list of Document objects (one for each specification document).
 Agent getVendor()
          Return the vendor information
 void init(java.lang.String init)
          Per-instantiation initialization.
protected static java.lang.String integerArray(int[] iarray)
          Return String representation of an integer array.
protected static java.lang.String integerArray(int[] iarray, char separator)
          Return String representation of an integer array with specified separator.
protected static java.lang.String longArray(long[] larray)
          Return String representation of an array of long with space separator.
 boolean okToProcess(java.lang.String filepath)
          Callback to give the handler the opportunity to decide whether or not to process a file.
 void param(java.lang.String param)
          Per-action initialization.
protected static java.lang.String rationalArray(Rational[] rarray)
          Return String representation of an array of Rational, each evaluated as a double, with space separator.
protected static java.lang.String rationalArray10(Rational[] rarray)
          Return String representation of an array of Rational, each as two integers, with space separator.
 void reset()
          Reset the handler.
 void resetParams()
          Reset parameter settings.
 void setApp(App app)
          Pass the associated App object to this Module.
 void setBase(JhoveBase je)
          Assigns the JHOVE engine object to provide services to this handler
 void setDefaultParams(java.util.List params)
          Set a a List of default parameters for the module.
 void setEncoding(java.lang.String encoding)
          Assigns the encoding to be used by this OutputHandler
 void setWriter(java.io.PrintWriter writer)
          Assigns a PrintWriter to do output for this OutputHandler
abstract  void show()
          Outputs minimal information about the application
abstract  void show(App app)
          Outputs detailed information about the application, including configuration, available modules and handlers, etc.
abstract  void show(Module module)
          Outputs information about a Module
abstract  void show(OutputHandler handler)
          Outputs information about the OutputHandler specified in the parameter
abstract  void show(RepInfo info)
          Outputs the information contained in a RepInfo object
abstract  void showFooter()
          Do the final output.
abstract  void showHeader()
          Do the initial output.
 void startDirectory(java.lang.String directory)
          Callback indicating a new directory is being processed.
protected  java.lang.String toDateTime(java.util.Date date)
           
protected static java.lang.String xmlDecl()
          Return a canonical XML declaration with default encoding.
protected static java.lang.String xmlDecl(java.lang.String encoding)
          Return a canonical XML declaration with specified encoding.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

date

public static HandlerBase.SynchronizedDateFormat date
A DateFormat for representing a Date in yyyy-MM-dd (e.g., 2003-07-31) format.


dateTime

public static HandlerBase.SynchronizedDateFormat dateTime
A DateFormat for representing a Date in yyyy-MM-dd HH:mm:ss z (e.g., 2003-07-31 15:31:12 EDT) format.


iso8601

public static HandlerBase.SynchronizedDateFormat iso8601
A DateFormat for representing a Date in ISO 8601 (e.g., 2003-07-31T15:31:12-0400) format. We subclass SimpleDateFormat to make it thread-safe.


_app

protected App _app
The application object


_base

protected JhoveBase _base
The Jhove engine


_date

protected java.util.Date _date
Handler last modification date


_encoding

protected java.lang.String _encoding
Character encoding for writer


_init

protected java.lang.String _init
Initialization value.


_defaultParams

protected java.util.List _defaultParams
List of default parameters.


_je

protected JhoveBase _je
JHOVE engine.


_level

protected int _level
Indentation level


_name

protected java.lang.String _name
Handler name


_note

protected java.lang.String _note
Handler note


_release

protected java.lang.String _release
Handler release description.


_param

protected java.lang.String _param
Handler-specific parameter.


_rights

protected java.lang.String _rights
Copyright notice


_specification

protected java.util.List _specification
Handler specification document list


_vendor

protected Agent _vendor
Handler vendor


_writer

protected java.io.PrintWriter _writer
Writer for doing output


_logger

protected java.util.logging.Logger _logger
Logger for a handler class.

Constructor Detail

HandlerBase

protected HandlerBase(java.lang.String name,
                      java.lang.String release,
                      int[] date,
                      java.lang.String note,
                      java.lang.String rights)
Constructors of all subclasses of HandlerBase should call this as a super constructor.

Parameters:
name - Name of the handler
release - Release identifier
date - Last modification date of the handler code, in the form of an array of three numbers. date[0] is the year, date[1] the month, and date[2] the day.
note - Additional information about the handler (may be null)
rights - Copyright notice for the handler
Method Detail

reset

public void reset()
Reset the handler. This needs to be called before each invocation.

Specified by:
reset in interface OutputHandler

setDefaultParams

public void setDefaultParams(java.util.List params)
Set a a List of default parameters for the module.

Specified by:
setDefaultParams in interface OutputHandler
Parameters:
params - A List whose elements are Strings. May be empty.

applyDefaultParams

public void applyDefaultParams()
                        throws java.lang.Exception
Applies the default parameters. Calling this clears any prior parameters.

Specified by:
applyDefaultParams in interface OutputHandler
Throws:
java.lang.Exception

resetParams

public void resetParams()
                 throws java.lang.Exception
Reset parameter settings. Returns to a default state without any parameters. The default method clears the saved parameter.

Specified by:
resetParams in interface OutputHandler
Throws:
java.lang.Exception

init

public void init(java.lang.String init)
          throws java.lang.Exception
Per-instantiation initialization. The default method does nothing.

Specified by:
init in interface OutputHandler
Parameters:
init - Initialization parameter. This is typically obtained from the configuration file.
Throws:
java.lang.Exception

param

public void param(java.lang.String param)
           throws java.lang.Exception
Per-action initialization. The default method does nothing.

Specified by:
param in interface OutputHandler
Parameters:
param - Initialization parameter.
Throws:
java.lang.Exception

getDate

public final java.util.Date getDate()
Return the last modification date of this OutputHandler, as a Java Date object

Specified by:
getDate in interface OutputHandler

getName

public final java.lang.String getName()
Return the OutputHandler name

Specified by:
getName in interface OutputHandler

getNote

public final java.lang.String getNote()
Return the OutputHandler note

Specified by:
getNote in interface OutputHandler

getRelease

public final java.lang.String getRelease()
Return the release identifier

Specified by:
getRelease in interface OutputHandler

getRights

public final java.lang.String getRights()
Return the copyright information string

Specified by:
getRights in interface OutputHandler

getSpecification

public final java.util.List getSpecification()
Returns a list of Document objects (one for each specification document). The specification list is generated by the OutputHandler, and specifications cannot be added by callers.

Specified by:
getSpecification in interface OutputHandler
See Also:
Document

getVendor

public final Agent getVendor()
Return the vendor information

Specified by:
getVendor in interface OutputHandler

getEncoding

public java.lang.String getEncoding()
Returns this handler's encoding.

Specified by:
getEncoding in interface OutputHandler

setApp

public final void setApp(App app)
Pass the associated App object to this Module. The App makes various services available.

Specified by:
setApp in interface OutputHandler

setBase

public final void setBase(JhoveBase je)
Assigns the JHOVE engine object to provide services to this handler

Specified by:
setBase in interface OutputHandler

setEncoding

public void setEncoding(java.lang.String encoding)
Assigns the encoding to be used by this OutputHandler

Specified by:
setEncoding in interface OutputHandler

setWriter

public final void setWriter(java.io.PrintWriter writer)
Assigns a PrintWriter to do output for this OutputHandler

Specified by:
setWriter in interface OutputHandler

analyze

public void analyze(RepInfo info)
Callback allowing post-parse, pre-show analysis of object representation information.

Specified by:
analyze in interface OutputHandler
Parameters:
info - Object representation information

endDirectory

public void endDirectory()
Callback indicating a directory is finished being processed.

Specified by:
endDirectory in interface OutputHandler

okToProcess

public boolean okToProcess(java.lang.String filepath)
Callback to give the handler the opportunity to decide whether or not to process a file. Most handlers will always return true.

Specified by:
okToProcess in interface OutputHandler
Parameters:
filepath - File pathname

show

public abstract void show(Module module)
Outputs information about a Module

Specified by:
show in interface OutputHandler

show

public abstract void show(RepInfo info)
Outputs the information contained in a RepInfo object

Specified by:
show in interface OutputHandler

show

public abstract void show(OutputHandler handler)
Outputs information about the OutputHandler specified in the parameter

Specified by:
show in interface OutputHandler

show

public abstract void show()
Outputs minimal information about the application

Specified by:
show in interface OutputHandler

show

public abstract void show(App app)
Outputs detailed information about the application, including configuration, available modules and handlers, etc.

Specified by:
show in interface OutputHandler

showHeader

public abstract void showHeader()
Do the initial output. This should be in a suitable format for including multiple files between the header and the footer.

Specified by:
showHeader in interface OutputHandler

showFooter

public abstract void showFooter()
Do the final output. This should be in a suitable format for including multiple files between the header and the footer.

Specified by:
showFooter in interface OutputHandler

close

public void close()
Close the writer after all output has been done.

Specified by:
close in interface OutputHandler

startDirectory

public void startDirectory(java.lang.String directory)
Callback indicating a new directory is being processed.

Specified by:
startDirectory in interface OutputHandler
Parameters:
directory - Directory path

doctype

protected static java.lang.String doctype(java.lang.String root,
                                          java.lang.String uri)
Return the XML DOCTYPE instruction.

Parameters:
root - Root element of the DTD
uri - URI of the DTD

doctype

protected static java.lang.String doctype(java.lang.String root,
                                          java.lang.String name,
                                          java.lang.String uri)
Return the XML DOCTYPE instruction.

Parameters:
root - Root element of the DTD
name - Public name of the DTD
uri - URI of the DTD

element

protected static java.lang.String element(java.lang.String tag)
Returns, as a String, an empty XML.

Parameters:
tag - XML tag

element

protected static java.lang.String element(java.lang.String tag,
                                          java.lang.String content)
Returns, as a String, an XML element with a given tag and content

Parameters:
tag - An XML tag
content - Content string. Characters requiring conversion to entitites will be converted.

element

protected static java.lang.String element(java.lang.String tag,
                                          java.lang.String[][] attrs)
Returns, as a String, an XML element with a given tag and attributes

Parameters:
tag - An XML tag
attrs - An array of String[2] elements, where for each element, attrs[i][0] is the attribute key and attrs[i][1] is the attribute value. Null values are skipped.

element

protected static java.lang.String element(java.lang.String tag,
                                          java.lang.String[][] attrs,
                                          java.lang.String content)
Returns, as a String, an XML element with a given tag, content and attributes

Parameters:
tag - An XML tag
content - Content string. Characters requiring conversion to entitites will be converted.
attrs - An array of String[2] elements, where for each element, attrs[i][0] is the attribute key and attrs[i][1] is the attribute value. Null values are skipped.

elementEnd

protected static java.lang.String elementEnd(java.lang.String tag)
Returns, as a String, the closing tag of an element. No checking is done that opening and closing tags match.

Parameters:
tag - An XML tag

elementStart

protected static java.lang.String elementStart(java.lang.String tag)
Returns, as a String, the opening tag of an element.

Parameters:
tag - An XML tag

elementStart

protected static java.lang.String elementStart(java.lang.String tag,
                                               java.lang.String[][] attrs)
Returns, as a String, the opening tag of an element with specified attributes.

Parameters:
tag - An XML tag
attrs - An array of String[2] elements, where for each element, attrs[i][0] is the attribute key and attrs[i][1] is the attribute value.

xmlDecl

protected static java.lang.String xmlDecl()
Return a canonical XML declaration with default encoding.


xmlDecl

protected static java.lang.String xmlDecl(java.lang.String encoding)
Return a canonical XML declaration with specified encoding.


getIndent

protected static java.lang.String getIndent(int level)
Returns a String containing a number of spaces equal to the current indent level.


integerArray

protected static java.lang.String integerArray(int[] iarray)
Return String representation of an integer array.


integerArray

protected static java.lang.String integerArray(int[] iarray,
                                               char separator)
Return String representation of an integer array with specified separator.


longArray

protected static java.lang.String longArray(long[] larray)
Return String representation of an array of long with space separator.


rationalArray

protected static java.lang.String rationalArray(Rational[] rarray)
Return String representation of an array of Rational, each evaluated as a double, with space separator.


rationalArray10

protected static java.lang.String rationalArray10(Rational[] rarray)
Return String representation of an array of Rational, each as two integers, with space separator.


doubleArray

protected static java.lang.String doubleArray(double[] darray)
Return String representation of an array of double.


toDateTime

protected java.lang.String toDateTime(java.util.Date date)


jhove/doc/edu/harvard/hul/ois/jhove/Identifier.html0000644000707400001440000003137211510702351021476 0ustar garyusers Identifier (JHOVE Documentation)

edu.harvard.hul.ois.jhove
Class Identifier

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.Identifier

public class Identifier
extends java.lang.Object

This class encapsulates information about an identifier for a specification document.


Constructor Summary
Identifier(java.lang.String value, IdentifierType type)
          Create an Identifier.
Identifier(java.lang.String value, IdentifierType type, java.lang.String note)
          Create an Identifier.
 
Method Summary
 java.lang.String getNote()
          Return the note, which will be null if none was specified.
 IdentifierType getType()
          Return the identifier type.
 java.lang.String getValue()
          Return the displayable string.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

Identifier

public Identifier(java.lang.String value,
                  IdentifierType type)
Create an Identifier.

Parameters:
value - The text displayed for this Identifier.
type - The type of identification.

Identifier

public Identifier(java.lang.String value,
                  IdentifierType type,
                  java.lang.String note)
Create an Identifier.

Parameters:
value - The text displayed for this Identifier.
type - The type of identification.
note - A note giving supplementary information.
Method Detail

getType

public IdentifierType getType()
Return the identifier type.


getValue

public java.lang.String getValue()
Return the displayable string.


getNote

public java.lang.String getNote()
Return the note, which will be null if none was specified.



jhove/doc/edu/harvard/hul/ois/jhove/IdentifierType.html0000644000707400001440000006326511510702351022346 0ustar garyusers IdentifierType (JHOVE Documentation)

edu.harvard.hul.ois.jhove
Class IdentifierType

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.EnumerationType
      extended by edu.harvard.hul.ois.jhove.IdentifierType

public final class IdentifierType
extends EnumerationType

This class defines enumerated types for an Identifier of a format specification document. Applications will not create or modify IdentifierTypes, but will use one of the predefined IdentifierType instances ANSI, DDC, DOI, ECMA, HANDLE, ISO, ISBN, LC, LCCN, NISO, PII, RFC, SICI, URI, URL, URN, or OTHER.

See Also:
Identifier

Field Summary
static IdentifierType ANSI
          Identifier type for American National Standards Institute.
static IdentifierType CCITT
          Identifier type for CCITT.
static IdentifierType DDC
          Identifier type for Dewey Decimal Classification.
static IdentifierType DOI
          Identifier type for Digital Object Identifier.
static IdentifierType ECMA
          Identifier type for ECMA.
static IdentifierType HANDLE
          Identifier type for CNRI Handle.
static IdentifierType ISBN
          Identifier type for International Standard Book Number.
static IdentifierType ISO
          Identifier type for International Standards Organization.
static IdentifierType ITU
          Identifier type for International Telecommunication Union.
static IdentifierType JEITA
          Identifier type for Japan Electronics and Information Technology Industries Association.
static IdentifierType LC
          Identifier type for Library of Congress classification.
static IdentifierType LCCN
          Identifier type for Library of Congress catalogue number.
static IdentifierType NISO
          Identifier type for NISO standard number.
static IdentifierType OTHER
          Identifier type for whatever doesn't fit other categories.
static IdentifierType PII
          Identifier type for Publisher Item Identifier.
static IdentifierType RFC
          Identifier type for IETF Request for Comment.
static IdentifierType SICI
          Identifier type for Serial Item and Contribution Identifier.
static IdentifierType URI
          Identifier type for Uniform Resource Identifier.
static IdentifierType URL
          Identifier type for Uniform Resource Locator.
static IdentifierType URN
          Identifier type for Uniform Resource Name.
 
Method Summary
 
Methods inherited from class edu.harvard.hul.ois.jhove.EnumerationType
equals, toString
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

ANSI

public static final IdentifierType ANSI
Identifier type for American National Standards Institute.


DDC

public static final IdentifierType DDC
Identifier type for Dewey Decimal Classification.


DOI

public static final IdentifierType DOI
Identifier type for Digital Object Identifier.


ECMA

public static final IdentifierType ECMA
Identifier type for ECMA.


HANDLE

public static final IdentifierType HANDLE
Identifier type for CNRI Handle.


ISO

public static final IdentifierType ISO
Identifier type for International Standards Organization.


ISBN

public static final IdentifierType ISBN
Identifier type for International Standard Book Number.


LC

public static final IdentifierType LC
Identifier type for Library of Congress classification.


LCCN

public static final IdentifierType LCCN
Identifier type for Library of Congress catalogue number.


NISO

public static final IdentifierType NISO
Identifier type for NISO standard number.


PII

public static final IdentifierType PII
Identifier type for Publisher Item Identifier.


RFC

public static final IdentifierType RFC
Identifier type for IETF Request for Comment.


SICI

public static final IdentifierType SICI
Identifier type for Serial Item and Contribution Identifier.


URI

public static final IdentifierType URI
Identifier type for Uniform Resource Identifier.


URL

public static final IdentifierType URL
Identifier type for Uniform Resource Locator.


URN

public static final IdentifierType URN
Identifier type for Uniform Resource Name.


CCITT

public static final IdentifierType CCITT
Identifier type for CCITT.


ITU

public static final IdentifierType ITU
Identifier type for International Telecommunication Union.


JEITA

public static final IdentifierType JEITA
Identifier type for Japan Electronics and Information Technology Industries Association.


OTHER

public static final IdentifierType OTHER
Identifier type for whatever doesn't fit other categories.



jhove/doc/edu/harvard/hul/ois/jhove/InfoMessage.html0000644000707400001440000003372211510702351021615 0ustar garyusers InfoMessage (JHOVE Documentation)

edu.harvard.hul.ois.jhove
Class InfoMessage

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.Message
      extended by edu.harvard.hul.ois.jhove.InfoMessage

public class InfoMessage
extends Message

This class encapsulates an informational message from a Module, giving information (not necessarily a problem) about the content being analyzed or the way that Jhove deals with it.


Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.Message
_message, _offset, _subMessage, NULL
 
Constructor Summary
InfoMessage(java.lang.String message)
          Create an InfoMessage.
InfoMessage(java.lang.String message, long offset)
          Create an InfoMessage.
InfoMessage(java.lang.String message, java.lang.String subMessage)
          Create an InfoMessage.
InfoMessage(java.lang.String message, java.lang.String subMessage, long offset)
          Create an InfoMessage.
 
Method Summary
 
Methods inherited from class edu.harvard.hul.ois.jhove.Message
getMessage, getOffset, getSubMessage
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

InfoMessage

public InfoMessage(java.lang.String message)
Create an InfoMessage.

Parameters:
message - Human-readable string giving the information.

InfoMessage

public InfoMessage(java.lang.String message,
                   long offset)
Create an InfoMessage.

Parameters:
message - Human-readable string giving the information.
offset - The offset in the file relevant to the situation being described

InfoMessage

public InfoMessage(java.lang.String message,
                   java.lang.String subMessage)
Create an InfoMessage.

Parameters:
message - Human-readable string giving the information.
subMessage - Human-readable additional information.

InfoMessage

public InfoMessage(java.lang.String message,
                   java.lang.String subMessage,
                   long offset)
Create an InfoMessage.

Parameters:
message - Human-readable string giving the information.
subMessage - Human-readable additional information.
offset - The offset in the file relevant to the situation being described


jhove/doc/edu/harvard/hul/ois/jhove/InternalSignature.html0000644000707400001440000006123111510702351023047 0ustar garyusers InternalSignature (JHOVE Documentation)

edu.harvard.hul.ois.jhove
Class InternalSignature

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.Signature
      extended by edu.harvard.hul.ois.jhove.InternalSignature

public class InternalSignature
extends Signature

This class encapsulates information about internal format signatures. The value of a Signature may be either a String or a byte array (stored as an int array to avoid signed byte problems).


Constructor Summary
InternalSignature(int[] value, SignatureType type, SignatureUseType use)
          Creates an InternalSignature given a byte array, a type, and a use requirement.
InternalSignature(int[] value, SignatureType type, SignatureUseType use, int offset)
          Creates an InternalSignature given a byte array, a type, a use requirement, and a byte offset.
InternalSignature(int[] value, SignatureType type, SignatureUseType use, int offset, java.lang.String note)
          Creates an InternalSignature given a string value, a type, a use requirement, a byte offset, and a note.
InternalSignature(int[] value, SignatureType type, SignatureUseType use, java.lang.String note)
          Creates an InternalSignature given a byte array, a type, a use requirement, and a note.
InternalSignature(java.lang.String value, SignatureType type, SignatureUseType use)
          Creates an InternalSignature given a string value, a type, and a use requirement.
InternalSignature(java.lang.String value, SignatureType type, SignatureUseType use, int offset)
          Creates an InternalSignature given a string value, a type, a use requirement, and a byte offset.
InternalSignature(java.lang.String value, SignatureType type, SignatureUseType use, int offset, java.lang.String note)
          Creates an InternalSignature given a string value, a type, a use requirement, a byte offset, and a note.
InternalSignature(java.lang.String value, SignatureType type, SignatureUseType use, java.lang.String note)
          Creates an InternalSignature given a string value, a type, a use requirement, and a note.
 
Method Summary
 int getOffset()
          Returns the byte offset.
 boolean hasFixedOffset()
          Returns true if this InternalSignature has a fixed byte offset.
 
Methods inherited from class edu.harvard.hul.ois.jhove.Signature
getNote, getType, getUse, getValue, getValueHexString, getValueString, isStringValue
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

InternalSignature

public InternalSignature(java.lang.String value,
                         SignatureType type,
                         SignatureUseType use)
Creates an InternalSignature given a string value, a type, and a use requirement. An InternalSignature created with this constructor does not have a fixed byte offset.


InternalSignature

public InternalSignature(int[] value,
                         SignatureType type,
                         SignatureUseType use)
Creates an InternalSignature given a byte array, a type, and a use requirement. An InternalSignature created with this constructor does not have a fixed byte offset.


InternalSignature

public InternalSignature(java.lang.String value,
                         SignatureType type,
                         SignatureUseType use,
                         int offset)
Creates an InternalSignature given a string value, a type, a use requirement, and a byte offset. An InternalSignature created with this constructor has a fixed byte offset.


InternalSignature

public InternalSignature(int[] value,
                         SignatureType type,
                         SignatureUseType use,
                         int offset)
Creates an InternalSignature given a byte array, a type, a use requirement, and a byte offset. An InternalSignature created with this constructor has a fixed byte offset.


InternalSignature

public InternalSignature(java.lang.String value,
                         SignatureType type,
                         SignatureUseType use,
                         java.lang.String note)
Creates an InternalSignature given a string value, a type, a use requirement, and a note. An InternalSignature created with this constructor does not have a fixed byte offset.


InternalSignature

public InternalSignature(int[] value,
                         SignatureType type,
                         SignatureUseType use,
                         java.lang.String note)
Creates an InternalSignature given a byte array, a type, a use requirement, and a note. An InternalSignature created with this constructor does not have a fixed byte offset.


InternalSignature

public InternalSignature(java.lang.String value,
                         SignatureType type,
                         SignatureUseType use,
                         int offset,
                         java.lang.String note)
Creates an InternalSignature given a string value, a type, a use requirement, a byte offset, and a note. An InternalSignature created with this constructor has a fixed byte offset.


InternalSignature

public InternalSignature(int[] value,
                         SignatureType type,
                         SignatureUseType use,
                         int offset,
                         java.lang.String note)
Creates an InternalSignature given a string value, a type, a use requirement, a byte offset, and a note. An InternalSignature created with this constructor has a fixed byte offset.

Method Detail

getOffset

public int getOffset()
Returns the byte offset. This value is meaningful only if this InternalSignature has a fixed byte offset.


hasFixedOffset

public boolean hasFixedOffset()
Returns true if this InternalSignature has a fixed byte offset.



jhove/doc/edu/harvard/hul/ois/jhove/JhoveBase.html0000644000707400001440000017306511510702351021270 0ustar garyusers JhoveBase (JHOVE Documentation)

edu.harvard.hul.ois.jhove
Class JhoveBase

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.JhoveBase

public class JhoveBase
extends java.lang.Object

The JHOVE engine, providing all base services necessary to build an application. More than one JhoveBase may be instantiated and process files in concurrent threads. Any one instance must not be multithreaded.


Field Summary
protected  boolean _abort
          Flag for aborting activity.
protected  int _bufferSize
          Buffer size for buffered I/O.
protected  boolean _checksum
           
protected  java.lang.String _configFile
          Configuration file pathname.
protected  java.net.URLConnection _conn
          Current URL connection.
protected  java.lang.Thread _currentThread
          Thread currently parsing a document.
protected  java.lang.String _encoding
          Selected encoding.
protected  java.util.Map _extensions
          Associate map of configution extensions.
protected  java.util.List _handlerList
          Ordered list of output handlers.
protected  java.util.Map _handlerMap
          Map of output handlers (for fast access by name).
protected  java.lang.String _jhoveHome
          JHOVE home directory.
protected  java.util.logging.Logger _logger
          Logger for this class.
protected  java.lang.String _logLevel
          Logger resource bundle.
protected  java.lang.String _mixVsn
          MIX version.
protected  java.util.List _moduleList
          Ordered list of modules.
protected  java.util.Map _moduleMap
          Map of modules (for fast access by name).
protected  long _nByte
          Byte count for digital object
protected  java.lang.String _outputFile
           
protected  java.io.File _saveDir
          Directory for saving files.
protected  java.lang.String _saxClass
          SAX parser class.
protected  boolean _showRaw
           
protected  int _sigBytes
          Number of bytes for fake signature checking.
protected  boolean _signature
           
protected  java.lang.String _tempDir
          Temporary directory.
 
Constructor Summary
JhoveBase()
          Instantiate a JhoveBase object.
 
Method Summary
 void abort()
          Aborts an activity.
 java.io.File connToTempFile(java.net.URLConnection conn, RepInfo info)
          Saves a URLConnection's data stream to a temporary file.
 void dispatch(App app, Module module, OutputHandler aboutHandler, OutputHandler handler, java.lang.String outputFile, java.lang.String[] dirFileOrUri)
          Processes a file or directory, or outputs information.
 boolean getAbort()
          Returns the abort flag.
 int getBufferSize()
          Returns buffer size.
 boolean getChecksumFlag()
          Returns true if checksumming is requested.
 java.lang.String getConfigFile()
          Returns the configuration file.
static java.lang.String getConfigFileFromProperties()
          Uses the user.home property to locate the configuration file.
 java.util.Date getDate()
          Returns the engine date (the date at which this instance was created).
 java.lang.String getEncoding()
          Returns the output encoding.
 java.util.Map getExtension()
          Return the JHOVE configuration extensions.
 java.lang.String getExtension(java.lang.String name)
          Return the JHOVE configuration extension by name.
static java.lang.String getFromProperties(java.lang.String name)
          Returns a named value from the properties file.
 OutputHandler getHandler(java.lang.String name)
          Return a handler by name.
 java.util.List getHandlerList()
          Returns the list of handlers.
 java.util.Map getHandlerMap()
          Returns map of handler names to handlers.
 java.lang.String getJhoveHome()
          Returns the JHOVE home directory.
 java.lang.String getMixVersion()
          Returns the requested MIX schema version.
 Module getModule(java.lang.String name)
          Returns a module by name.
 java.util.List getModuleList()
          Returns the List of modules.
 java.util.Map getModuleMap()
          Returns the Map of module names to modules.
 java.lang.String getName()
          Returns the engine name.
 java.lang.String getOuputFile()
          Returns the output file.
 java.lang.String getRelease()
          Returns the engine release.
 java.lang.String getRights()
          Return the engine rights statement
 java.io.File getSaveDirectory()
          Return the directory designated for saving files.
 java.lang.String getSaxClass()
          Return the SAX class.
static java.lang.String getSaxClassFromProperties()
          Returns the value of the property edu.harvard.hul.ois.jhove.saxClass, which should be the name of the main SAX class.
 boolean getShowRawFlag()
          Returns true if raw output is requested.
 int getSigBytes()
          Return the maximum number of bytes to check, for modules that look for an indefinitely positioned signature or check the first sigBytes bytes in lieu of a signature
 boolean getSignatureFlag()
          Returns the "check signature only" flag.
 java.lang.String getTempDirectory()
          Return the temporary directory.
 void init(java.lang.String configFile, java.lang.String saxClass)
          Initialize the JHOVE engine.
protected static java.io.PrintWriter makeWriter(java.lang.String outputFile, java.lang.String encoding)
          Creates an output PrintWriter.
 java.io.File newTempFile()
          Creates a temporary file with a unique name.
 boolean process(App app, Module module, OutputHandler handler, java.lang.String dirFileOrUri)
           
 boolean processFile(App app, Module module, boolean verbose, java.io.File file, RepInfo info)
           
 void resetAbort()
          Resets the abort flag.
 void setBufferSize(int bufferSize)
          Sets the buffer size.
 void setCallback(Callback callback)
          Sets a callback object for tracking progress.
 void setChecksumFlag(boolean checksum)
          Sets the value to be returned by doChecksum().
 void setCurrentThread(java.lang.Thread t)
          Sets the current thread for parsing.
 void setEncoding(java.lang.String encoding)
          Sets the output encoding.
 void setLogLevel(java.lang.String level)
          Sets the log level.
 void setSaveDirectory(java.io.File dir)
          Sets the default directory for subsequent save operations.
 void setShowRawFlag(boolean raw)
          Sets the value to be returned by getShowRawFlag (), which determines if only raw numeric values should be output.
 void setSignatureFlag(boolean signature)
          Sets the "check signature only" flag.
 void setTempDirectory(java.lang.String tempDir)
          Sets the temporary directory path.
 java.io.File tempFile()
          Creates a temporary file with a unique name.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

_abort

protected boolean _abort
Flag for aborting activity.


_bufferSize

protected int _bufferSize
Buffer size for buffered I/O.


_checksum

protected boolean _checksum

_configFile

protected java.lang.String _configFile
Configuration file pathname.


_encoding

protected java.lang.String _encoding
Selected encoding.


_extensions

protected java.util.Map _extensions
Associate map of configution extensions.


_handlerList

protected java.util.List _handlerList
Ordered list of output handlers.


_handlerMap

protected java.util.Map _handlerMap
Map of output handlers (for fast access by name).


_jhoveHome

protected java.lang.String _jhoveHome
JHOVE home directory.


_moduleList

protected java.util.List _moduleList
Ordered list of modules.


_moduleMap

protected java.util.Map _moduleMap
Map of modules (for fast access by name).


_outputFile

protected java.lang.String _outputFile

_saxClass

protected java.lang.String _saxClass
SAX parser class.


_showRaw

protected boolean _showRaw

_signature

protected boolean _signature

_tempDir

protected java.lang.String _tempDir
Temporary directory.


_mixVsn

protected java.lang.String _mixVsn
MIX version.


_sigBytes

protected int _sigBytes
Number of bytes for fake signature checking.


_saveDir

protected java.io.File _saveDir
Directory for saving files.


_nByte

protected long _nByte
Byte count for digital object


_conn

protected java.net.URLConnection _conn
Current URL connection.


_currentThread

protected java.lang.Thread _currentThread
Thread currently parsing a document.


_logger

protected java.util.logging.Logger _logger
Logger for this class.


_logLevel

protected java.lang.String _logLevel
Logger resource bundle.

Constructor Detail

JhoveBase

public JhoveBase()
          throws JhoveException
Instantiate a JhoveBase object.

Throws:
JhoveException - If invoked with JVM lower than 1.4
Method Detail

init

public void init(java.lang.String configFile,
                 java.lang.String saxClass)
          throws JhoveException
Initialize the JHOVE engine.

Parameters:
configFile - Configuration file pathname
Throws:
JhoveException

setCallback

public void setCallback(Callback callback)
Sets a callback object for tracking progress. By default, the callback is null.


dispatch

public void dispatch(App app,
                     Module module,
                     OutputHandler aboutHandler,
                     OutputHandler handler,
                     java.lang.String outputFile,
                     java.lang.String[] dirFileOrUri)
              throws java.lang.Exception
Processes a file or directory, or outputs information. If dirFileOrUri is null, Does one of the following:
  • If module is non-null, provides information about the module.
  • Otherwise if aboutHandler is non-null, provides information about that handler.
  • If they're both null, provides information about the application.

Parameters:
app - The App object for the application
module - The module to be used
aboutHandler - If specified, the handler about which info is requested
handler - The handler for processing the output
outputFile - Name of the file to which output should go
dirFileOrUri - One or more file names or URI's to be analyzed
Throws:
java.lang.Exception

process

public boolean process(App app,
                       Module module,
                       OutputHandler handler,
                       java.lang.String dirFileOrUri)
                throws java.lang.Exception
Throws:
java.lang.Exception

connToTempFile

public java.io.File connToTempFile(java.net.URLConnection conn,
                                   RepInfo info)
                            throws java.io.IOException
Saves a URLConnection's data stream to a temporary file. This may be interrupted asynchronously by calling abort (), in which case it will delete the temporary file and return null.

Throws:
java.io.IOException

abort

public void abort()
Aborts an activity. This simply sets a flag; whether anything is aborted depends on what activity is happening.


processFile

public boolean processFile(App app,
                           Module module,
                           boolean verbose,
                           java.io.File file,
                           RepInfo info)
                    throws java.lang.Exception
Throws:
java.lang.Exception

tempFile

public java.io.File tempFile()
                      throws java.io.IOException
Creates a temporary file with a unique name. The file will be deleted when the application exits.

Throws:
java.io.IOException

getAbort

public boolean getAbort()
Returns the abort flag.


getBufferSize

public int getBufferSize()
Returns buffer size. A value of -1 signifies that the invoknig code should assume the default buffer size.


getConfigFile

public java.lang.String getConfigFile()
Returns the configuration file.


getDate

public java.util.Date getDate()
Returns the engine date (the date at which this instance was created).


getEncoding

public java.lang.String getEncoding()
Returns the output encoding.


getExtension

public java.util.Map getExtension()
Return the JHOVE configuration extensions.


getExtension

public java.lang.String getExtension(java.lang.String name)
Return the JHOVE configuration extension by name.


getHandler

public OutputHandler getHandler(java.lang.String name)
Return a handler by name.


getHandlerMap

public java.util.Map getHandlerMap()
Returns map of handler names to handlers.


getHandlerList

public java.util.List getHandlerList()
Returns the list of handlers.


getJhoveHome

public java.lang.String getJhoveHome()
Returns the JHOVE home directory.


getModule

public Module getModule(java.lang.String name)
Returns a module by name.


getModuleMap

public java.util.Map getModuleMap()
Returns the Map of module names to modules.


getModuleList

public java.util.List getModuleList()
Returns the List of modules.


getName

public java.lang.String getName()
Returns the engine name.


getOuputFile

public java.lang.String getOuputFile()
Returns the output file.


getRelease

public java.lang.String getRelease()
Returns the engine release.


getRights

public java.lang.String getRights()
Return the engine rights statement


getSaxClass

public java.lang.String getSaxClass()
Return the SAX class.


getTempDirectory

public java.lang.String getTempDirectory()
Return the temporary directory.


getSigBytes

public int getSigBytes()
Return the maximum number of bytes to check, for modules that look for an indefinitely positioned signature or check the first sigBytes bytes in lieu of a signature


getSaveDirectory

public java.io.File getSaveDirectory()
Return the directory designated for saving files. This is simply the directory most recently set by setSaveDirectory.


getChecksumFlag

public boolean getChecksumFlag()
Returns true if checksumming is requested.


getShowRawFlag

public boolean getShowRawFlag()
Returns true if raw output is requested. Raw output means numeric rather than symbolic output; its exact interpretation is up to the module, but generally applies to named flags.


getSignatureFlag

public boolean getSignatureFlag()
Returns the "check signature only" flag.


getMixVersion

public java.lang.String getMixVersion()
Returns the requested MIX schema version.


setBufferSize

public void setBufferSize(int bufferSize)
Sets the buffer size. A value of -1 signifies that the invoking code will assume the default buffer size.


setEncoding

public void setEncoding(java.lang.String encoding)
Sets the output encoding.


setTempDirectory

public void setTempDirectory(java.lang.String tempDir)
Sets the temporary directory path.


setLogLevel

public void setLogLevel(java.lang.String level)
Sets the log level. The value should be the name of a predefined instance of java.util.logging.Level, e.g., "WARNING", "INFO", "ALL". This will override the config file setting.


setChecksumFlag

public void setChecksumFlag(boolean checksum)
Sets the value to be returned by doChecksum().


setShowRawFlag

public void setShowRawFlag(boolean raw)
Sets the value to be returned by getShowRawFlag (), which determines if only raw numeric values should be output.


setSignatureFlag

public void setSignatureFlag(boolean signature)
Sets the "check signature only" flag.


setSaveDirectory

public void setSaveDirectory(java.io.File dir)
Sets the default directory for subsequent save operations.


setCurrentThread

public void setCurrentThread(java.lang.Thread t)
Sets the current thread for parsing.


resetAbort

public void resetAbort()
Resets the abort flag. This must be called at the beginning of any activity for which the abort flag may subsequently be set.


getConfigFileFromProperties

public static java.lang.String getConfigFileFromProperties()
Uses the user.home property to locate the configuration file. The file is expected to be in the subdirectory named by CONFIG_DIR under the home directory, and to be named jhove.conf. Returns null if no such file is found.


getSaxClassFromProperties

public static java.lang.String getSaxClassFromProperties()
Returns the value of the property edu.harvard.hul.ois.jhove.saxClass, which should be the name of the main SAX class. Returns null if no such property has been set up.


getFromProperties

public static java.lang.String getFromProperties(java.lang.String name)
Returns a named value from the properties file.


makeWriter

protected static java.io.PrintWriter makeWriter(java.lang.String outputFile,
                                                java.lang.String encoding)
                                         throws JhoveException
Creates an output PrintWriter.

Parameters:
outputFile - Output filepath. If null, writer goes to System.out.
encoding - Character encoding. Must not be null.
Throws:
JhoveException

newTempFile

public java.io.File newTempFile()
                         throws java.io.IOException
Creates a temporary file with a unique name. The file will be deleted when the application exits.

Throws:
java.io.IOException


jhove/doc/edu/harvard/hul/ois/jhove/JhoveException.html0000644000707400001440000002375411510702351022353 0ustar garyusers JhoveException (JHOVE Documentation)

edu.harvard.hul.ois.jhove
Class JhoveException

java.lang.Object
  extended by java.lang.Throwable
      extended by java.lang.Exception
          extended by edu.harvard.hul.ois.jhove.JhoveException
All Implemented Interfaces:
java.io.Serializable

public class JhoveException
extends java.lang.Exception

See Also:
Serialized Form

Constructor Summary
JhoveException()
           
JhoveException(java.lang.String message)
           
 
Method Summary
 
Methods inherited from class java.lang.Throwable
fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

JhoveException

public JhoveException()

JhoveException

public JhoveException(java.lang.String message)


jhove/doc/edu/harvard/hul/ois/jhove/MacStuff.html0000644000707400001440000002503011510702351021116 0ustar garyusers MacStuff (JHOVE Documentation)

edu.harvard.hul.ois.jhove
Class MacStuff

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.MacStuff

public class MacStuff
extends java.lang.Object

Code specific to Macintosh Java. This class consists of static methods, and should not be instantiated. Its methods should be called only on the Macintosh OS X platform. It requires the package com.apple.eio.FileManager.

Author:
Gary McGath

Method Summary
static boolean fileHasType(java.io.File file, java.lang.String type)
          Returns true if a file has the given file type.
static boolean isMacintosh()
          Determines if we're running on a Macintosh, so appropriate UI adjustments can be made.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Method Detail

isMacintosh

public static boolean isMacintosh()
Determines if we're running on a Macintosh, so appropriate UI adjustments can be made. In accordance with Apple's recommendations, this checks for the existence of the mrj.version property rather than checking the os.name property.


fileHasType

public static boolean fileHasType(java.io.File file,
                                  java.lang.String type)
                           throws java.lang.ClassNotFoundException
Returns true if a file has the given file type. This method uses FileManager in a dynamic way, so that it will merely throw a ClassNotFound exception if it fails. Currently this code isn't actually used, since the Jhove application is specified as checking only internal signatures. Should some future version or add-on code wish to use it, the code should look something like this:
           try {
               if (sig.getType() == SignatureType.FILETYPE &&
                       MacStuff.isMacintosh ()) {
                   if (!MacStuff.fileHasType(file, sig.getValueString())) {
                       info.setConsistent (false);
                   }    
               }
           }
           catch (ClassNotFoundException e) {
               // Mac classes missing -- can't check filetype.
           }
 

Throws:
java.lang.ClassNotFoundException


jhove/doc/edu/harvard/hul/ois/jhove/Message.html0000644000707400001440000004307011510702351020776 0ustar garyusers Message (JHOVE Documentation)

edu.harvard.hul.ois.jhove
Class Message

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.Message
Direct Known Subclasses:
ErrorMessage, InfoMessage

public abstract class Message
extends java.lang.Object

This class encapsulates a String to be displayed.


Field Summary
protected  java.lang.String _message
          Message text.
protected  long _offset
          Byte offset to which message applies.
protected  java.lang.String _subMessage
          Additional information.
static long NULL
          Value indicating a null offset.
 
Constructor Summary
protected Message(java.lang.String message)
          Create a Message.
protected Message(java.lang.String message, long offset)
          Create a Message.
protected Message(java.lang.String message, java.lang.String subMessage)
          Create a Message.
protected Message(java.lang.String message, java.lang.String subMessage, long offset)
          Create a Message.
 
Method Summary
 java.lang.String getMessage()
          Get the message string.
 long getOffset()
          Return the offset to which the information is related.
 java.lang.String getSubMessage()
          Get the submessage string.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

NULL

public static final long NULL
Value indicating a null offset.

See Also:
Constant Field Values

_message

protected java.lang.String _message
Message text.


_subMessage

protected java.lang.String _subMessage
Additional information.


_offset

protected long _offset
Byte offset to which message applies.

Constructor Detail

Message

protected Message(java.lang.String message)
Create a Message. This constructor cannot be invoked directly, since Message is abstract.

Parameters:
message - Human-readable string.

Message

protected Message(java.lang.String message,
                  java.lang.String subMessage)
Create a Message. This constructor cannot be invoked directly, since Message is abstract. The second argument adds secondary details to the primary message; the message will typically be displayed in the form "message:subMessage".

Parameters:
message - Human-readable string.
subMessage - Human-readable additional information.

Message

protected Message(java.lang.String message,
                  long offset)
Create a Message. This constructor cannot be invoked directly, since Message is abstract. The second argument adds secondary details to the primary message; the message will typically be displayed in the form "message:subMessage".

Parameters:
message - Human-readable string.
offset - Byte offset associated with the message.

Message

protected Message(java.lang.String message,
                  java.lang.String subMessage,
                  long offset)
Create a Message. This constructor cannot be invoked directly, since Message is abstract. The second argument adds secondary details to the primary message; the message will typically be displayed in the form "message:subMessage".

Parameters:
message - Human-readable string.
subMessage - Human-readable additional information.
offset - Byte offset associated with the message.
Method Detail

getMessage

public java.lang.String getMessage()
Get the message string.


getSubMessage

public java.lang.String getSubMessage()
Get the submessage string.


getOffset

public long getOffset()
Return the offset to which the information is related.



jhove/doc/edu/harvard/hul/ois/jhove/Module.html0000644000707400001440000011175611510702351020646 0ustar garyusers Module (JHOVE Documentation)

edu.harvard.hul.ois.jhove
Interface Module

All Known Implementing Classes:
AiffModule, AsciiModule, BytestreamModule, GifModule, HtmlModule, Jpeg2000Module, JpegModule, ModuleBase, PdfModule, TiffModule, Utf8Module, WaveModule, XmlModule

public interface Module

Public interface for Jhove format-specific plug-in modules. All format modules must implement the Module interface; usually the best way to do this will be to subclass ModuleBase. Modules must be declared in the configuration file and present in the Classpath to be recognized by Jhove.

See Also:
ModuleBase

Field Summary
static int MAXIMUM_VERBOSITY
           
static int MINIMUM_VERBOSITY
           
 
Method Summary
 void applyDefaultParams()
          Applies the default parameters.
 void checkSignatures(java.io.File file, java.io.InputStream stream, RepInfo info)
          Check if the digital object conforms to this Module's internal signature information.
 void checkSignatures(java.io.File file, java.io.RandomAccessFile raf, RepInfo info)
          Check if the digital object conforms to this Module's internal signature information.
 java.lang.String getCoverage()
          Return details as to the specific format versions or variants that are supported by this Module
 java.util.Date getDate()
          Return the last modification date of the Module, as a Java Date object
 java.util.List getDefaultParams()
          Returns the list of default parameters.
 java.util.List getFeatures()
          Returns the full list of features.
 java.lang.String[] getFormat()
          Return the array of format names supported by this Module
 java.lang.String[] getMimeType()
          Return the array of MIME type strings for formats supported by this Module
 java.lang.String getName()
          Return the name of this Module.
 java.lang.String getNote()
          Return the Module note
 java.lang.String getRelease()
          Return the release identifier
 java.lang.String getRepInfoNote()
          Returns the RepInfo note
 java.lang.String getRights()
          Return the copyright information string
 java.util.List getSignature()
          Return the List of Signatures recognized by this Module
 java.util.List getSpecification()
          Returns a list of Document objects (one for each specification document of the format).
 java.lang.String getValidityNote()
          Returns the string describing validity criteria
 Agent getVendor()
          Return the vendor information
 java.lang.String getWellFormedNote()
          Return the string describing well-formedness criteria
 boolean hasFeature(java.lang.String feature)
          Returns true if the module supports a given named feature, and false if the feature is unsupported or unknown.
 void init(java.lang.String init)
          Per-instantiation initialization.
 boolean isRandomAccess()
          Returns the random access flag (true if the module operates on random access files, false if it operates on streams)
 void param(java.lang.String param)
          Per-action initialization.
 int parse(java.io.InputStream stream, RepInfo info, int parseIndex)
          Parse the content of a stream digital object and store the results in RepInfo.
 void parse(java.io.RandomAccessFile file, RepInfo info)
          Parse the content of a random access digital object and store the results in RepInfo.
 void resetParams()
          Reset parameter settings.
 void setApp(App app)
          Pass the associated App object to this Module.
 void setBase(JhoveBase je)
          Pass the JHOVE engine object to this Module.
 void setDefaultParams(java.util.List params)
          Sets list of default parameters.
 void setVerbosity(int verbosity)
          Set the degree of verbosity desired from the module.
 void show(OutputHandler handler)
          Generates information about this Module.
 

Field Detail

MAXIMUM_VERBOSITY

static final int MAXIMUM_VERBOSITY
See Also:
Constant Field Values

MINIMUM_VERBOSITY

static final int MINIMUM_VERBOSITY
See Also:
Constant Field Values
Method Detail

init

void init(java.lang.String init)
          throws java.lang.Exception
Per-instantiation initialization.

Parameters:
init - Initialization parameter. This is typically obtained from the configuration file.
Throws:
java.lang.Exception

setDefaultParams

void setDefaultParams(java.util.List params)
Sets list of default parameters.

Parameters:
params - A List whose elements are Strings. May be empty.

applyDefaultParams

void applyDefaultParams()
                        throws java.lang.Exception
Applies the default parameters.

Throws:
java.lang.Exception

resetParams

void resetParams()
                 throws java.lang.Exception
Reset parameter settings. Returns to a default state without any parameters.

Throws:
java.lang.Exception

param

void param(java.lang.String param)
           throws java.lang.Exception
Per-action initialization. May be called multiple times.

Parameters:
param - Initialization parameter.
Throws:
java.lang.Exception

setApp

void setApp(App app)
Pass the associated App object to this Module. The App makes various services available.


setBase

void setBase(JhoveBase je)
Pass the JHOVE engine object to this Module.


setVerbosity

void setVerbosity(int verbosity)
Set the degree of verbosity desired from the module.

Parameters:
verbosity - The requested verbosity value.

getName

java.lang.String getName()
Return the name of this Module.


getRelease

java.lang.String getRelease()
Return the release identifier


getDate

java.util.Date getDate()
Return the last modification date of the Module, as a Java Date object


getVendor

Agent getVendor()
Return the vendor information


getRights

java.lang.String getRights()
Return the copyright information string


getNote

java.lang.String getNote()
Return the Module note


getFormat

java.lang.String[] getFormat()
Return the array of format names supported by this Module


getMimeType

java.lang.String[] getMimeType()
Return the array of MIME type strings for formats supported by this Module


getCoverage

java.lang.String getCoverage()
Return details as to the specific format versions or variants that are supported by this Module


getSignature

java.util.List getSignature()
Return the List of Signatures recognized by this Module


getSpecification

java.util.List getSpecification()
Returns a list of Document objects (one for each specification document of the format). The specification list is generated by the Module, and specifications cannot be added by callers.

See Also:
Document

getWellFormedNote

java.lang.String getWellFormedNote()
Return the string describing well-formedness criteria


getRepInfoNote

java.lang.String getRepInfoNote()
Returns the RepInfo note


getValidityNote

java.lang.String getValidityNote()
Returns the string describing validity criteria


isRandomAccess

boolean isRandomAccess()
Returns the random access flag (true if the module operates on random access files, false if it operates on streams)


hasFeature

boolean hasFeature(java.lang.String feature)
Returns true if the module supports a given named feature, and false if the feature is unsupported or unknown.


getFeatures

java.util.List getFeatures()
Returns the full list of features.


getDefaultParams

java.util.List getDefaultParams()
Returns the list of default parameters.


parse

int parse(java.io.InputStream stream,
          RepInfo info,
          int parseIndex)
          throws java.io.IOException
Parse the content of a stream digital object and store the results in RepInfo. A given Module will normally implement only one of the two parse methods, leaving the other as a stub.

Parameters:
stream - An InputStream, positioned at its beginning, which is generated from the object to be parsed. If multiple calls to parse are made on the basis of a nonzero value being returned, a new InputStream must be provided each time.
info - A fresh (on the first call) RepInfo object which will be modified to reflect the results of the parsing If multiple calls to parse are made on the basis of a nonzero value being returned, the same RepInfo object should be passed with each call.
parseIndex - Must be 0 in first call to parse. If parse returns a nonzero value, it must be called again with parseIndex equal to that return value.
Throws:
java.io.IOException

parse

void parse(java.io.RandomAccessFile file,
           RepInfo info)
           throws java.io.IOException
Parse the content of a random access digital object and store the results in RepInfo. A given Module will normally implement only one of the two parse methods, leaving the other as a stub.

Parameters:
file - A RandomAccessFile, positioned at its beginning, which is generated from the object to be parsed
info - A fresh RepInfo object which will be modified to reflect the results of the parsing
Throws:
java.io.IOException

checkSignatures

void checkSignatures(java.io.File file,
                     java.io.InputStream stream,
                     RepInfo info)
                     throws java.io.IOException
Check if the digital object conforms to this Module's internal signature information.

Parameters:
file - A File object for the object being parsed
stream - An InputStream, positioned at its beginning, which is generated from the object to be parsed
info - A fresh RepInfo object which will be modified to reflect the results of the test
Throws:
java.io.IOException

checkSignatures

void checkSignatures(java.io.File file,
                     java.io.RandomAccessFile raf,
                     RepInfo info)
                     throws java.io.IOException
Check if the digital object conforms to this Module's internal signature information.

Parameters:
file - A File object for the object being parsed
raf - A RandomAccessFile, positioned at its beginning, which is generated from the object to be parsed
info - A fresh RepInfo object which will be modified to reflect the results of the test
Throws:
java.io.IOException

show

void show(OutputHandler handler)
Generates information about this Module. The format of the output depends on the OutputHandler.



jhove/doc/edu/harvard/hul/ois/jhove/ModuleBase.html0000644000707400001440000036633311510702351021444 0ustar garyusers ModuleBase (JHOVE Documentation)

edu.harvard.hul.ois.jhove
Class ModuleBase

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.ModuleBase
All Implemented Interfaces:
Module
Direct Known Subclasses:
AiffModule, AsciiModule, BytestreamModule, GifModule, HtmlModule, Jpeg2000Module, JpegModule, PdfModule, TiffModule, Utf8Module, WaveModule, XmlModule

public abstract class ModuleBase
extends java.lang.Object
implements Module

This class is an abstract implementation of the Module interface. It contains all the methods required for a Module, but doesn't do anything by itself. A subclass should provide a functional implmentation of parse (InputStream stream, RepInfo info, int parseIndex) if it is not random access, or parse (RandomAccessFile file, RepInfo info) if it is random access.


Field Summary
protected  App _app
          The application object
protected  boolean _bigEndian
          The dominant "endianness" of the Module.
protected  boolean _checksumFinished
          Flag indicating valid checksum information set
protected  boolean _countStream
          Flag to indicate read routines should count the stream
protected  java.lang.String _coverage
          Coverage information
protected  java.util.zip.CRC32 _crc32
          CRC32 calculated on content object
protected  java.util.Date _date
          Module last modification date
protected  java.util.List _defaultParams
          List of default parameters.
protected  java.util.List _features
          The list of supported features.
protected  java.lang.String[] _format
          Formats recognized by this Module
protected  java.lang.String _init
          Initialization value.
protected  boolean _isRandomAccess
          Random access flag
protected  JhoveBase _je
          JHOVE engine.
protected  java.util.logging.Logger _logger
          Logger for a module class.
protected  java.security.MessageDigest _md5
          MD5 digest calculated on content object
protected  java.lang.String[] _mimeType
          MIME types supported by this Module
protected  java.lang.String _name
          Module name
protected  long _nByte
          Byte count of content object
protected  java.lang.String _note
          Module note
protected  java.lang.String _param
          Module-specific parameter.
protected  java.lang.String _release
          Module release description
protected  java.lang.String _repInfoNote
          RepInfo note
protected  java.lang.String _rights
          Copyright notice
protected  java.security.MessageDigest _sha1
          SHA-1 digest calculated on content object
protected  java.util.List _signature
          Module Signature list
protected  java.util.List _specification
          Module specification document list
protected  java.lang.String _validityNote
          Validity criteria
protected  Agent _vendor
          Module vendor
protected  int _verbosity
          Indicator of how much data to report
protected  java.lang.String _wellFormedNote
          Well-formedness criteria
 
Fields inherited from interface edu.harvard.hul.ois.jhove.Module
MAXIMUM_VERBOSITY, MINIMUM_VERBOSITY
 
Constructor Summary
protected ModuleBase(java.lang.String name, java.lang.String release, int[] date, java.lang.String[] format, java.lang.String coverage, java.lang.String[] mimeType, java.lang.String wellFormedNote, java.lang.String validityNote, java.lang.String repInfoNote, java.lang.String note, java.lang.String rights, boolean isRandomAccess)
          Constructors of all subclasses of ModuleBase should call this as a super constructor.
 
Method Summary
 Property addIntegerProperty(java.lang.String name, int value, java.lang.String[] labels)
          Returns an Property representing an integer value.
 Property addIntegerProperty(java.lang.String name, int value, java.lang.String[] labels, int[] index)
          Returns an Property representing an integer value.
 void applyDefaultParams()
          Applies the default parameters.
protected  void calcRAChecksum(Checksummer ckSummer, java.io.RandomAccessFile raf)
          Calculates the checksums for a module that uses a random access file.
 void checkSignatures(java.io.File file, java.io.InputStream stream, RepInfo info)
          Check if the digital object conforms to this Module's internal signature information.
 void checkSignatures(java.io.File file, java.io.RandomAccessFile raf, RepInfo info)
          Check if the digital object conforms to this Module's internal signature information.
 App getApp()
          Returns the App object.
 JhoveBase getBase()
          Returns the JHOVE engine object.
static java.io.DataInputStream getBufferedDataStream(java.io.InputStream stream, int size)
          A convenience method for getting a buffered DataInputStream from a module's InputStream.
 java.lang.String getCoverage()
          Return details as to the specific format versions or variants that are supported by this module
protected  java.lang.String getCRC32()
          Returns the hex string representation of the CRC32 result.
 java.util.Date getDate()
          Return the last modification date of this Module, as a Java Date object
 java.util.List getDefaultParams()
          Returns the list of default parameters.
 java.util.List getFeatures()
          Returns the full list of features.
 java.lang.String[] getFormat()
          Return the array of format names supported by this Module
 java.lang.String[] getMimeType()
          Return the array of MIME type strings for formats supported by this Module
 java.lang.String getName()
          Return the module name
 long getNByte()
          Returns the value of _nByte.
 java.lang.String getNote()
          Return the module note
 java.lang.String getRelease()
          Return the release identifier
 java.lang.String getRepInfoNote()
          Return the RepInfo note
 java.lang.String getRights()
          Return the copyright information string
 java.util.List getSignature()
          Return the List of Signatures recognized by this Module
 java.util.List getSpecification()
          Returns a list of Document objects (one for each specification document of the format).
 java.lang.String getValidityNote()
          Return the string describing validity criteria
 Agent getVendor()
          Return the vendor information
 java.lang.String getWellFormedNote()
          Return the string describing well-formedness criteria
 boolean hasFeature(java.lang.String feature)
          Returns true if the module supports a given named feature, and false if the feature is unsupported or unknown.
 void init(java.lang.String init)
          Per-instantiation initialization.
 void initFeatures()
          Initializes the feature list.
protected  void initParse()
          Initializes the state of the module for parsing.
 boolean isBigEndian()
          Returns true if the dominant "endianness" of the module, or the current file being processed, is big-endian, otherwise false.
 boolean isRandomAccess()
          Return the random access flag (true if the module operates on random access files, false if it operates on streams)
 void param(java.lang.String param)
          Per-action initialization.
 int parse(java.io.InputStream stream, RepInfo info, int parseIndex)
          Parse the content of a stream digital object and store the results in RepInfo.
 void parse(java.io.RandomAccessFile file, RepInfo info)
          Parse the content of a random access digital object and store the results in RepInfo.
static int readByteBuf(java.io.DataInputStream stream, byte[] buf, ModuleBase counted)
          Reads into a byte buffer from a DataInputStream.
static double readDouble(java.io.DataInputStream stream, boolean endian)
           
static double readDouble(java.io.DataInputStream stream, boolean endian, ModuleBase counted)
           
static double readDouble(java.io.RandomAccessFile file, boolean endian)
           
static float readFloat(java.io.DataInputStream stream, boolean endian, ModuleBase counted)
           
static float readFloat(java.io.RandomAccessFile file, boolean endian)
           
static int readSignedByte(java.io.DataInputStream stream)
           
static int readSignedByte(java.io.DataInputStream stream, ModuleBase counted)
           
static int readSignedByte(java.io.RandomAccessFile file)
           
static int readSignedInt(java.io.DataInputStream stream, boolean endian)
           
static int readSignedInt(java.io.DataInputStream stream, boolean endian, ModuleBase counted)
           
static int readSignedInt(java.io.RandomAccessFile file, boolean endian)
           
static long readSignedLong(java.io.DataInputStream stream, boolean bigEndian, ModuleBase counted)
          Reads eight bytes as a signed 64-bit value from a DataInputStream.
static Rational readSignedRational(java.io.DataInputStream stream, boolean endian, ModuleBase counted)
           
static Rational readSignedRational(java.io.RandomAccessFile file, boolean endian)
           
static int readSignedShort(java.io.DataInputStream stream, boolean endian)
           
static int readSignedShort(java.io.DataInputStream stream, boolean endian, ModuleBase counted)
           
static int readSignedShort(java.io.RandomAccessFile file, boolean endian)
           
static int readUnsignedByte(java.io.DataInputStream stream)
          Reads an unsigned byte from a DataInputStream.
static int readUnsignedByte(java.io.DataInputStream stream, ModuleBase counted)
          Reads an unsigned byte from a DataInputStream.
static int readUnsignedByte(java.io.RandomAccessFile file)
          Reads an unsigned byte from a RandomAccessFile.
static long readUnsignedInt(java.io.DataInputStream stream, boolean bigEndian)
          Reads four bytes as an unsigned 32-bit value from a DataInputStream.
static long readUnsignedInt(java.io.DataInputStream stream, boolean bigEndian, ModuleBase counted)
          Reads four bytes as an unsigned 32-bit value from a DataInputStream.
static long readUnsignedInt(java.io.RandomAccessFile file, boolean bigEndian)
          Reads four bytes as an unsigned 32-bit value from a RandomAccessFile.
static Rational readUnsignedRational(java.io.DataInputStream stream, boolean endian)
           
static Rational readUnsignedRational(java.io.DataInputStream stream, boolean endian, ModuleBase counted)
           
static Rational readUnsignedRational(java.io.RandomAccessFile file, boolean endian)
           
static int readUnsignedShort(java.io.DataInputStream stream, boolean bigEndian)
          Reads two bytes as an unsigned short value from a DataInputStream.
static int readUnsignedShort(java.io.DataInputStream stream, boolean bigEndian, ModuleBase counted)
          Reads two bytes as an unsigned short value from a DataInputStream.
static int readUnsignedShort(java.io.RandomAccessFile file, boolean bigEndian)
          Reads two bytes as an unsigned short value from a RandomAccessFile.
 void resetParams()
          Reset parameter settings.
 void setApp(App app)
          Pass the associated App object to this Module.
 void setBase(JhoveBase je)
          Pass the JHOVE engine object to this Module.
protected  void setChecksums(Checksummer ckSummer, RepInfo info)
          Set the checksum values.
 void setCRC32(java.util.zip.CRC32 crc32)
          Set the value of the CRC32 calculated for the content object.
 void setDefaultParams(java.util.List params)
          Set a a List of default parameters for the module.
 void setMD5(java.security.MessageDigest md5)
          Sets the MD5 calculated digest for the content object, and sets the checksumFinished flag.
 void setNByte(long nByte)
          Sets the byte count for the content object, and sets the checksumFinished flag.
 void setSHA1(java.security.MessageDigest sha1)
          Sets the SHA-1 calculated digest for the content object, and sets the checksumFinished flag.
 void setValidityNote(java.lang.String validityNote)
          Set the value of the validityNote property, which briefly explains the validity criteria of this Module.
 void setVerbosity(int verbosity)
          Set the degree of verbosity desired from the module.
 void show(OutputHandler handler)
          Generates information about this Module.
 int skipBytes(java.io.DataInputStream stream, int bytesToSkip)
           
 int skipBytes(java.io.DataInputStream stream, int bytesToSkip, ModuleBase counted)
           
protected  Property[] vectorToPropArray(java.util.Vector vec)
          A utility for converting a Vector of Properties to an Array.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

_app

protected App _app
The application object


_coverage

protected java.lang.String _coverage
Coverage information


_date

protected java.util.Date _date
Module last modification date


_format

protected java.lang.String[] _format
Formats recognized by this Module


_init

protected java.lang.String _init
Initialization value.


_defaultParams

protected java.util.List _defaultParams
List of default parameters.


_je

protected JhoveBase _je
JHOVE engine.


_mimeType

protected java.lang.String[] _mimeType
MIME types supported by this Module


_name

protected java.lang.String _name
Module name


_note

protected java.lang.String _note
Module note


_param

protected java.lang.String _param
Module-specific parameter.


_release

protected java.lang.String _release
Module release description


_repInfoNote

protected java.lang.String _repInfoNote
RepInfo note


_rights

protected java.lang.String _rights
Copyright notice


_signature

protected java.util.List _signature
Module Signature list


_specification

protected java.util.List _specification
Module specification document list


_vendor

protected Agent _vendor
Module vendor


_wellFormedNote

protected java.lang.String _wellFormedNote
Well-formedness criteria


_validityNote

protected java.lang.String _validityNote
Validity criteria


_isRandomAccess

protected boolean _isRandomAccess
Random access flag


_nByte

protected long _nByte
Byte count of content object


_crc32

protected java.util.zip.CRC32 _crc32
CRC32 calculated on content object


_md5

protected java.security.MessageDigest _md5
MD5 digest calculated on content object


_sha1

protected java.security.MessageDigest _sha1
SHA-1 digest calculated on content object


_checksumFinished

protected boolean _checksumFinished
Flag indicating valid checksum information set


_verbosity

protected int _verbosity
Indicator of how much data to report


_countStream

protected boolean _countStream
Flag to indicate read routines should count the stream


_bigEndian

protected boolean _bigEndian
The dominant "endianness" of the Module.


_features

protected java.util.List _features
The list of supported features.


_logger

protected java.util.logging.Logger _logger
Logger for a module class.

Constructor Detail

ModuleBase

protected ModuleBase(java.lang.String name,
                     java.lang.String release,
                     int[] date,
                     java.lang.String[] format,
                     java.lang.String coverage,
                     java.lang.String[] mimeType,
                     java.lang.String wellFormedNote,
                     java.lang.String validityNote,
                     java.lang.String repInfoNote,
                     java.lang.String note,
                     java.lang.String rights,
                     boolean isRandomAccess)
Constructors of all subclasses of ModuleBase should call this as a super constructor.

Parameters:
name - Name of the module
release - Release identifier
date - Last modification date of the module code, in the form of an array of three numbers. date[0] is the year, date[1] the month, and date[2] the day.
format - Array of format names supported by the module
coverage - Details as to the specific format versions or variants that are supported by the module
mimeType - Array of MIME type strings for formats supported by the module
wellFormedNote - Brief explanation of what constitutes well-formed content
validityNote - Brief explanation of what constitutes valid content
repInfoNote - Note pertaining to RepInfo (may be null)
note - Additional information about the module (may be null)
rights - Copyright notice for the module
isRandomAccess - true if the module treats content as random-access data, if it treats content as stream data
Method Detail

initFeatures

public void initFeatures()
Initializes the feature list. This method puts the following features in the list:
  • edu.harvard.hul.ois.canValidate
  • edu.harvard.hul.ois.canIdentify


init

public void init(java.lang.String init)
          throws java.lang.Exception
Per-instantiation initialization. The default method does nothing but save its parameter.

Specified by:
init in interface Module
Parameters:
init - Initialization parameter. This is typically obtained from the configuration file.
Throws:
java.lang.Exception

setDefaultParams

public void setDefaultParams(java.util.List params)
Set a a List of default parameters for the module.

Specified by:
setDefaultParams in interface Module
Parameters:
params - A List whose elements are Strings. May be empty.

applyDefaultParams

public void applyDefaultParams()
                        throws java.lang.Exception
Applies the default parameters. Calling this clears any prior parameters.

Specified by:
applyDefaultParams in interface Module
Throws:
java.lang.Exception

resetParams

public void resetParams()
                 throws java.lang.Exception
Reset parameter settings. Returns to a default state without any parameters. The default method clears the saved parameter.

Specified by:
resetParams in interface Module
Throws:
java.lang.Exception

param

public void param(java.lang.String param)
           throws java.lang.Exception
Per-action initialization. May be called multiple times. The default method does nothing but save its parameter.

Specified by:
param in interface Module
Parameters:
param - Initialization parameter.
Throws:
java.lang.Exception

getApp

public App getApp()
Returns the App object.


getBase

public JhoveBase getBase()
Returns the JHOVE engine object.


getNByte

public long getNByte()
Returns the value of _nByte. Meaningful only for modules that use a counted InputStream.


isBigEndian

public boolean isBigEndian()
Returns true if the dominant "endianness" of the module, or the current file being processed, is big-endian, otherwise false. This does not guarantee that all numbers in the module follow the dominant endianness, particularly as formats sometimes incorporate data stored in a previously defined format. For some formats, e.g., TIFF, the endianness depends on the file being processed. Every module must initialize the value of _bigEndian for this function, or else assign its value when parsing a file, to return a meaningful result. For some modules (e.g., ASCII, endianness has no meaning.


getCoverage

public final java.lang.String getCoverage()
Return details as to the specific format versions or variants that are supported by this module

Specified by:
getCoverage in interface Module

getDate

public final java.util.Date getDate()
Return the last modification date of this Module, as a Java Date object

Specified by:
getDate in interface Module

getFormat

public final java.lang.String[] getFormat()
Return the array of format names supported by this Module

Specified by:
getFormat in interface Module

getMimeType

public final java.lang.String[] getMimeType()
Return the array of MIME type strings for formats supported by this Module

Specified by:
getMimeType in interface Module

getName

public final java.lang.String getName()
Return the module name

Specified by:
getName in interface Module

getNote

public final java.lang.String getNote()
Return the module note

Specified by:
getNote in interface Module

getRelease

public final java.lang.String getRelease()
Return the release identifier

Specified by:
getRelease in interface Module

getRepInfoNote

public final java.lang.String getRepInfoNote()
Return the RepInfo note

Specified by:
getRepInfoNote in interface Module

getRights

public final java.lang.String getRights()
Return the copyright information string

Specified by:
getRights in interface Module

getSignature

public final java.util.List getSignature()
Return the List of Signatures recognized by this Module

Specified by:
getSignature in interface Module

getSpecification

public final java.util.List getSpecification()
Returns a list of Document objects (one for each specification document of the format). The specification list is generated by the Module, and specifications cannot be added by callers.

Specified by:
getSpecification in interface Module
See Also:
Document

getVendor

public final Agent getVendor()
Return the vendor information

Specified by:
getVendor in interface Module

getWellFormedNote

public final java.lang.String getWellFormedNote()
Return the string describing well-formedness criteria

Specified by:
getWellFormedNote in interface Module

getValidityNote

public final java.lang.String getValidityNote()
Return the string describing validity criteria

Specified by:
getValidityNote in interface Module

isRandomAccess

public final boolean isRandomAccess()
Return the random access flag (true if the module operates on random access files, false if it operates on streams)

Specified by:
isRandomAccess in interface Module

hasFeature

public boolean hasFeature(java.lang.String feature)
Returns true if the module supports a given named feature, and false if the feature is unsupported or unknown. Feature names are case sensitive. It is recommended that features be named using package nomenclature. The following features are, by default, supported by the modules developed by OIS:
  • edu.harvard.hul.ois.canValidate
  • edu.harvard.hul.ois.canIdentify

Specified by:
hasFeature in interface Module

getFeatures

public java.util.List getFeatures()
Returns the full list of features.

Specified by:
getFeatures in interface Module

getDefaultParams

public java.util.List getDefaultParams()
Returns the list of default parameters.

Specified by:
getDefaultParams in interface Module

setApp

public final void setApp(App app)
Pass the associated App object to this Module. The App makes various services available.

Specified by:
setApp in interface Module

setBase

public final void setBase(JhoveBase je)
Pass the JHOVE engine object to this Module.

Specified by:
setBase in interface Module

setValidityNote

public final void setValidityNote(java.lang.String validityNote)
Set the value of the validityNote property, which briefly explains the validity criteria of this Module.


setCRC32

public final void setCRC32(java.util.zip.CRC32 crc32)
Set the value of the CRC32 calculated for the content object. The checksum-like functions can be set by the caller. Setting any of these creates the assumption that the calculation is already done, and sets the checksumFinished flag to inhibit recalculation.


setVerbosity

public void setVerbosity(int verbosity)
Set the degree of verbosity desired from the module. The setting of param can override the verbosity setting. It does not affect whether raw data are reported or not, only which data are reported.

Specified by:
setVerbosity in interface Module
Parameters:
verbosity - The requested verbosity value. Recognized values are Module.MINIMUM_VERBOSITY and Module.MAXIMUM_VERBOSITY. The interpretation of the value depends on the module, and the module may choose not to use this setting. However, modules should treat MAXIMUM_VERBOSITY as a request for all the data available from the module.

setNByte

public final void setNByte(long nByte)
Sets the byte count for the content object, and sets the checksumFinished flag.


setMD5

public final void setMD5(java.security.MessageDigest md5)
Sets the MD5 calculated digest for the content object, and sets the checksumFinished flag.


setSHA1

public final void setSHA1(java.security.MessageDigest sha1)
Sets the SHA-1 calculated digest for the content object, and sets the checksumFinished flag.


parse

public int parse(java.io.InputStream stream,
                 RepInfo info,
                 int parseIndex)
          throws java.io.IOException
Parse the content of a stream digital object and store the results in RepInfo. A given Module will normally override only one of the two parse methods; the default method does nothing.

Specified by:
parse in interface Module
Parameters:
stream - An InputStream, positioned at its beginning, which is generated from the object to be parsed. If multiple calls to parse are made on the basis of a nonzero value being returned, a new InputStream must be provided each time.
info - A fresh (on the first call) RepInfo object which will be modified to reflect the results of the parsing If multiple calls to parse are made on the basis of a nonzero value being returned, the same RepInfo object should be passed with each call.
parseIndex - Must be 0 in first call to parse. If parse returns a nonzero value, it must be called again with parseIndex equal to that return value.
Throws:
java.io.IOException

parse

public void parse(java.io.RandomAccessFile file,
                  RepInfo info)
           throws java.io.IOException
Parse the content of a random access digital object and store the results in RepInfo. A given Module will normally override only one of the two parse methods; the default method does nothing.

Specified by:
parse in interface Module
Parameters:
file - A RandomAccessFile, positioned at its beginning, which is generated from the object to be parsed
info - A fresh RepInfo object which will be modified to reflect the results of the parsing
Throws:
java.io.IOException

checkSignatures

public void checkSignatures(java.io.File file,
                            java.io.InputStream stream,
                            RepInfo info)
                     throws java.io.IOException
Check if the digital object conforms to this Module's internal signature information. This function checks the file against the list of predefined signatures for the module. If there are no predefined signatures, it calls parse with the arguments passed to it. Override this for modules that check digital signatures in some other way. Any module for which the signature may be located other than at the beginning of the file must override.

Specified by:
checkSignatures in interface Module
Parameters:
file - A File object for the object being parsed
stream - An InputStream, positioned at its beginning, which is generated from the object to be parsed
info - A fresh RepInfo object which will be modified to reflect the results of the test
Throws:
java.io.IOException

checkSignatures

public void checkSignatures(java.io.File file,
                            java.io.RandomAccessFile raf,
                            RepInfo info)
                     throws java.io.IOException
Check if the digital object conforms to this Module's internal signature information.

Specified by:
checkSignatures in interface Module
Parameters:
file - A File object representing the object to be parsed
raf - A RandomAccessFile, positioned at its beginning, which is generated from the object to be parsed
info - A fresh RepInfo object which will be modified to reflect the results of the test
Throws:
java.io.IOException

initParse

protected void initParse()
Initializes the state of the module for parsing. This should be called early in each module's parse() method. If a module overrides it to provide additional functionality, the module's initParse() should call super.initParse().


calcRAChecksum

protected void calcRAChecksum(Checksummer ckSummer,
                              java.io.RandomAccessFile raf)
                       throws java.io.IOException
Calculates the checksums for a module that uses a random access file.

Throws:
java.io.IOException

setChecksums

protected void setChecksums(Checksummer ckSummer,
                            RepInfo info)
Set the checksum values.

Parameters:
ckSummer - Checksummer object
info - RepInfo object

show

public void show(OutputHandler handler)
Generates information about this Module. The format of the output depends on the OutputHandler.

Specified by:
show in interface Module

getCRC32

protected java.lang.String getCRC32()
Returns the hex string representation of the CRC32 result.


addIntegerProperty

public Property addIntegerProperty(java.lang.String name,
                                   int value,
                                   java.lang.String[] labels,
                                   int[] index)
Returns an Property representing an integer value. If raw output is specified for the module, returns an INTEGER property, and labels and index are unused. Otherwise, returns a STRING property, with the string being the element of labels whose index is the index of value in index.


addIntegerProperty

public Property addIntegerProperty(java.lang.String name,
                                   int value,
                                   java.lang.String[] labels)
Returns an Property representing an integer value. If raw output is specified for the module, returns an INTEGER property, and labels and index are unused. Otherwise, returns a STRING property, with the string being the element of labels whose index is value.


readUnsignedByte

public static int readUnsignedByte(java.io.DataInputStream stream)
                            throws java.io.IOException
Reads an unsigned byte from a DataInputStream.

Parameters:
stream - Stream to read
Throws:
java.io.IOException

readUnsignedByte

public static int readUnsignedByte(java.io.DataInputStream stream,
                                   ModuleBase counted)
                            throws java.io.IOException
Reads an unsigned byte from a DataInputStream.

Parameters:
stream - Stream to read
counted - If non-null, module for which value of _nByte shall be incremented appropriately
Throws:
java.io.IOException

readUnsignedByte

public static int readUnsignedByte(java.io.RandomAccessFile file)
                            throws java.io.IOException
Reads an unsigned byte from a RandomAccessFile.

Throws:
java.io.IOException

readByteBuf

public static int readByteBuf(java.io.DataInputStream stream,
                              byte[] buf,
                              ModuleBase counted)
                       throws java.io.IOException
Reads into a byte buffer from a DataInputStream.

Parameters:
stream - Stream to read from
buf - Byte buffer to fill up
counted - If non-null, module for which value of _nByte shall be incremented appropriately
Throws:
java.io.IOException

readUnsignedShort

public static int readUnsignedShort(java.io.DataInputStream stream,
                                    boolean bigEndian)
                             throws java.io.IOException
Reads two bytes as an unsigned short value from a DataInputStream.

Parameters:
stream - The stream to read from.
bigEndian - If true, interpret the first byte as the high byte, otherwise interpret the first byte as the low byte.
Throws:
java.io.IOException

readUnsignedShort

public static int readUnsignedShort(java.io.DataInputStream stream,
                                    boolean bigEndian,
                                    ModuleBase counted)
                             throws java.io.IOException
Reads two bytes as an unsigned short value from a DataInputStream.

Parameters:
stream - The stream to read from.
bigEndian - If true, interpret the first byte as the high byte, otherwise interpret the first byte as the low byte.
Throws:
java.io.IOException

readUnsignedShort

public static int readUnsignedShort(java.io.RandomAccessFile file,
                                    boolean bigEndian)
                             throws java.io.IOException
Reads two bytes as an unsigned short value from a RandomAccessFile.

Parameters:
file - The file to read from.
bigEndian - If true, interpret the first byte as the high byte, otherwise interpret the first byte as the low byte.
Throws:
java.io.IOException

readUnsignedInt

public static long readUnsignedInt(java.io.DataInputStream stream,
                                   boolean bigEndian)
                            throws java.io.IOException
Reads four bytes as an unsigned 32-bit value from a DataInputStream.

Parameters:
stream - The stream to read from.
bigEndian - If true, interpret the first byte as the high byte, otherwise interpret the first byte as the low byte.
Throws:
java.io.IOException

readUnsignedInt

public static long readUnsignedInt(java.io.DataInputStream stream,
                                   boolean bigEndian,
                                   ModuleBase counted)
                            throws java.io.IOException
Reads four bytes as an unsigned 32-bit value from a DataInputStream.

Parameters:
stream - The stream to read from.
bigEndian - If true, interpret the first byte as the high byte, otherwise interpret the first byte as the low byte.
Throws:
java.io.IOException

readUnsignedInt

public static long readUnsignedInt(java.io.RandomAccessFile file,
                                   boolean bigEndian)
                            throws java.io.IOException
Reads four bytes as an unsigned 32-bit value from a RandomAccessFile.

Parameters:
file - The file to read from.
bigEndian - If true, interpret the first byte as the high byte, otherwise interpret the first byte as the low byte.
Throws:
java.io.IOException

readSignedLong

public static long readSignedLong(java.io.DataInputStream stream,
                                  boolean bigEndian,
                                  ModuleBase counted)
                           throws java.io.IOException
Reads eight bytes as a signed 64-bit value from a DataInputStream. (There is no way in Java to have an unsigned long.)

Parameters:
stream - The stream to read from.
bigEndian - If true, interpret the first byte as the high byte, otherwise interpret the first byte as the low byte.
Throws:
java.io.IOException

readUnsignedRational

public static Rational readUnsignedRational(java.io.DataInputStream stream,
                                            boolean endian)
                                     throws java.io.IOException
Throws:
java.io.IOException

readUnsignedRational

public static Rational readUnsignedRational(java.io.DataInputStream stream,
                                            boolean endian,
                                            ModuleBase counted)
                                     throws java.io.IOException
Throws:
java.io.IOException

readUnsignedRational

public static Rational readUnsignedRational(java.io.RandomAccessFile file,
                                            boolean endian)
                                     throws java.io.IOException
Throws:
java.io.IOException

readSignedRational

public static Rational readSignedRational(java.io.DataInputStream stream,
                                          boolean endian,
                                          ModuleBase counted)
                                   throws java.io.IOException
Throws:
java.io.IOException

readSignedRational

public static Rational readSignedRational(java.io.RandomAccessFile file,
                                          boolean endian)
                                   throws java.io.IOException
Throws:
java.io.IOException

readSignedByte

public static int readSignedByte(java.io.RandomAccessFile file)
                          throws java.io.IOException
Throws:
java.io.IOException

readSignedShort

public static int readSignedShort(java.io.RandomAccessFile file,
                                  boolean endian)
                           throws java.io.IOException
Throws:
java.io.IOException

readSignedInt

public static int readSignedInt(java.io.RandomAccessFile file,
                                boolean endian)
                         throws java.io.IOException
Throws:
java.io.IOException

readSignedByte

public static int readSignedByte(java.io.DataInputStream stream)
                          throws java.io.IOException
Throws:
java.io.IOException

readSignedByte

public static int readSignedByte(java.io.DataInputStream stream,
                                 ModuleBase counted)
                          throws java.io.IOException
Throws:
java.io.IOException

readSignedShort

public static int readSignedShort(java.io.DataInputStream stream,
                                  boolean endian)
                           throws java.io.IOException
Throws:
java.io.IOException

readSignedShort

public static int readSignedShort(java.io.DataInputStream stream,
                                  boolean endian,
                                  ModuleBase counted)
                           throws java.io.IOException
Throws:
java.io.IOException

readSignedInt

public static int readSignedInt(java.io.DataInputStream stream,
                                boolean endian)
                         throws java.io.IOException
Throws:
java.io.IOException

readSignedInt

public static int readSignedInt(java.io.DataInputStream stream,
                                boolean endian,
                                ModuleBase counted)
                         throws java.io.IOException
Throws:
java.io.IOException

readFloat

public static float readFloat(java.io.RandomAccessFile file,
                              boolean endian)
                       throws java.io.IOException
Throws:
java.io.IOException

readFloat

public static float readFloat(java.io.DataInputStream stream,
                              boolean endian,
                              ModuleBase counted)
                       throws java.io.IOException
Throws:
java.io.IOException

readDouble

public static double readDouble(java.io.RandomAccessFile file,
                                boolean endian)
                         throws java.io.IOException
Throws:
java.io.IOException

readDouble

public static double readDouble(java.io.DataInputStream stream,
                                boolean endian)
                         throws java.io.IOException
Throws:
java.io.IOException

readDouble

public static double readDouble(java.io.DataInputStream stream,
                                boolean endian,
                                ModuleBase counted)
                         throws java.io.IOException
Throws:
java.io.IOException

skipBytes

public int skipBytes(java.io.DataInputStream stream,
                     int bytesToSkip)
              throws java.io.IOException
Throws:
java.io.IOException

skipBytes

public int skipBytes(java.io.DataInputStream stream,
                     int bytesToSkip,
                     ModuleBase counted)
              throws java.io.IOException
Throws:
java.io.IOException

getBufferedDataStream

public static java.io.DataInputStream getBufferedDataStream(java.io.InputStream stream,
                                                            int size)
A convenience method for getting a buffered DataInputStream from a module's InputStream. If the size specified is 0 or less, the default buffer size is used.


vectorToPropArray

protected Property[] vectorToPropArray(java.util.Vector vec)
A utility for converting a Vector of Properties to an Array. It can be simpler to build a Vector and then call VectorToPropArray than to allocate an array and drop all the Properites into the correct indices. All the members of the Vector must be of type Property, or a ClassCastException will be thrown.



jhove/doc/edu/harvard/hul/ois/jhove/NisoImageMetadata.html0000644000707400001440000053003011510702351022723 0ustar garyusers NisoImageMetadata (JHOVE Documentation)

edu.harvard.hul.ois.jhove
Class NisoImageMetadata

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.NisoImageMetadata

public class NisoImageMetadata
extends java.lang.Object

Encapsulation of the NISO Z39.87-2002 / AIIM 20-2002 Data Dictionary -- Technical Metadata for Digital Still Images


Field Summary
static java.lang.String[] AUTOFOCUS
          7.7.3.15 auto focus value labels.
static java.lang.String[] BACKLIGHT
          7.7.3.13 back light value labels.
static java.lang.String[] BYTEORDER
          6.1.2 byte order value labels.
static java.lang.String[] CHECKSUM_METHOD
          6.2.3.1 Checksum method value labels.
static java.lang.String[] COLORSPACE
          6.1.4.1 Color space value labels.
static int[] COLORSPACE_INDEX
          Index for 6.1.4.1 color space value labels.
static java.lang.String[] COMPRESSION_SCHEME
          6.1.3.1 Compression scheme value labels.
static int[] COMPRESSION_SCHEME_INDEX
          Index for 6.1.3.1 compression scheme value labels.
static java.lang.String[] DISPLAY_ORIENTATION
          6.2.5 display orientation value labels.
static java.lang.String[] EXTRA_SAMPLES
           
static java.lang.String[] FLASH
          7.7.3.10 flash value labels.
static java.lang.String[] FLASH_RETURN
          7.7.3.12 flash return value labels.
static java.lang.String[] GRAY_RESPONSE_UNIT
          8.2.6 gray response unit value labels.
static java.lang.String[] METERING_MODE
          7.7.3.6 metering mode value labels.
static double NILL
           
static int NULL
          Undefined value.
static java.lang.String[] ORIENTATION
          6.2.4 orientation value labels.
static java.lang.String[] PLANAR_CONFIGURATION
          6.1.6 planar configuration value labels.
static java.lang.String[] SAMPLING_FREQUENCY_PLANE
          8.1.1 sampling frequency plane value labels.
static java.lang.String[] SAMPLING_FREQUENCY_UNIT
          8.1.2 sampling frequency unit value labels.
static java.lang.String[] SCENE_ILLUMINANT
          7.7.3.7 scene illuminant value labels.
static int[] SCENE_ILLUMINANT_INDEX
          Index for 7.7.3.7 scene illuminant value labels.
static java.lang.String[] SEGMENT_TYPE
          6.1.5.1 segment type value labels.
static java.lang.String[] SENSOR
          7.8 sensor value labels.
static java.lang.String[] SOURCE_DIMENSION_UNIT
          8.1.7.1 (8.1.8.1) source dimension unit.
static java.lang.String[] TARGET_TYPE
          8.3.1 TargetType.
static java.lang.String[] YCBCR_POSITIONING
          6.1.4.4 YCbCr positioning value labels.
 
Constructor Summary
NisoImageMetadata()
          Instantiate a NisoImageMetadata object.
 
Method Summary
 int getAutoFocus()
          Get 7.7.3.15 auto focus.
 int getBackLight()
          Get 7.7.3.13 back light.
 int[] getBitsPerSample()
          Get 8.2.1 bits per sample.
 double getBrightness()
          Get 7.7.3.3 Brightness.
 java.lang.String getByteOrder()
          Get 6.1.2 byte order.
 int getChecksumMethod()
          Get 6.2.3.1 Checksum method.
 java.lang.String getChecksumValue()
          Get 6.2.3.2 Checksum value.
 int[] getColormapBitCodeValue()
          Get 8.2.4.2 colormap bit code value.
 int[] getColormapBlueValue()
          Get 8.2.4.5 colormap blue value.
 int[] getColormapGreenValue()
          Get 8.2.4.4 colormap green value.
 int[] getColormapRedValue()
          Get 8.2.4.3 colormap red value.
 java.lang.String getColormapReference()
          Get 8.2.4.1 colormap reference.
 int getColorSpace()
          Get 6.1.4.1 color space.
 double getColorTemp()
          Get 7.7.3.8 color temperature.
 int getCompressionLevel()
          Get 6.1.3.2 compression level.
 int getCompressionScheme()
          Get 6.1.3.1 compression scheme.
 java.lang.String getDateTimeCreated()
          Get 7.9 date/time created.
 java.lang.String getDateTimeProcessed()
          Get 9.1.1 DateTimeProcessed
 java.lang.String getDeviceSource()
          Get 7.5 device source.
 java.lang.String getDigitalCameraManufacturer()
          Get 7.7.1 digital camera manufacturer.
 java.lang.String getDigitalCameraModel()
          Get 7.7.2 digital camera model.
 int getDisplayOrientation()
          Get 6.2.5 Display orientation.
 double getExposureBias()
          Get 7.7.3.4 exposure bias.
 double getExposureIndex()
          Get 7.7.3.14 exposure index.
 double getExposureTime()
          Get 7.7.3.2 exposure time.
 int[] getExtraSamples()
          Get 8.2.3 extra samples.
 long getFileSize()
          Get 6.2.2 file size.
 int getFlash()
          Get 7.7.3.10 flash.
 double getFlashEnergy()
          Get 7.7.3.11 flash energy.
 int getFlashReturn()
          Get 7.7.3.12 flash return.
 double getFNumber()
          Get 7.7.3.1 F number.
 double getFocalLength()
          Get 7.7.3.9 focal length.
 int[] getGrayResponseCurve()
          Get 8.2.5 gray response curve.
 int getGrayResponseUnit()
          Get 8.2.6 gray response unit.
 java.lang.String getHostComputer()
          Get 7.4 host computer.
 java.lang.String getImageData()
          Get 8.3.3 ImageData
 java.lang.String getImageIdentifier()
          Get 6.2.1 Image identifier.
 java.lang.String getImageIdentifierLocation()
          Get 6.2.1.1 Image identifier location.
 long getImageLength()
          Get 8.1.6 image length.
 java.lang.String getImageProducer()
          Get 7.3 Image producer.
 long getImageWidth()
          Get 8.1.5 image width.
 int getMeteringMode()
          Get 7.7.3.6 metering mode.
 java.lang.String getMethodology()
          Get 7.10 methodology.
 java.lang.String getMimeType()
          Get 6.1.1 MIME type.
 int getOrientation()
          Get 6.2.4 Orientation.
 java.lang.String getOS()
          Get 7.4.1 OS (operating system).
 java.lang.String getOSVersion()
          Get 7.4.2 OS version.
 java.lang.String getPerformanceData()
          Get 8.3.4 PerformanceData.
 double getPixelSize()
          Get 7.6.3.1 pixel size.
 int getPlanarConfiguration()
          Get 6.1.6 Planar configuration.
 java.lang.String getPreferredPresentation()
          Get 6.3 preferred presentation.
 Rational getPrimaryChromaticitiesBlueX()
          Get 8.2.8.5 primary chromaticities blue X.
 Rational getPrimaryChromaticitiesBlueY()
          Get 8.2.8.6 primary chromaticities blue Y.
 Rational getPrimaryChromaticitiesGreenX()
          Get 8.2.8.3 primary chromaticities green X.
 Rational getPrimaryChromaticitiesGreenY()
          Get 8.2.8.4 primary chromaticities green Y.
 Rational getPrimaryChromaticitiesRedX()
          Get 8.2.8.1 primary chromaticities red X.
 Rational getPrimaryChromaticitiesRedY()
          Get 8.2.8.2 primary chromaticities red Y.
 java.lang.String[] getProcessingActions()
          Get 9.1.5 ProcessingActions.
 java.lang.String getProcessingAgency()
          Get 9.1.3 ProcessingAgency.
 java.lang.String getProcessingSoftwareName()
          Get 9.1.4.1 ProcessingSoftwareName
 java.lang.String getProcessingSoftwareVersion()
          Get 9.1.4.2 ProcessingSoftwareVersion
 java.lang.String getProfileName()
          Get 6.1.4.2.1 ICC profile name.
 java.lang.String getProfiles()
          Get 8.3.5 Profiles
 java.lang.String getProfileURL()
          Get 6.1.4.2.2 ICC profile URL.
 Rational[] getReferenceBlackWhite()
          Get 6.1.4.6 Reference black and white.
 long getRowsPerStrip()
          Get 6.1.5.3 Rows per strip.
 int getSamplesPerPixel()
          Get 8.2.2 samples per pixel.
 int getSamplingFrequencyPlane()
          Get 8.1.1 sampling frequency plane.
 int getSamplingFrequencyUnit()
          Get 8.1.2 sampling frequency unit.
 java.lang.String getScannerManufacturer()
          Get 7.6.1.1 scanner manufacturer.
 java.lang.String getScannerModelName()
          Get 7.6.1.2.1 scanner model name.
 java.lang.String getScannerModelNumber()
          Get 7.6.1.2.2 scanner model number.
 java.lang.String getScannerModelSerialNo()
          Get 7.6.1.2.3 scanner model serial number.
 java.lang.String getScanningSoftware()
          Get 7.6.2.1 scanning software.
 java.lang.String getScanningSoftwareVersionNo()
          Get 7.6.2.2 scanning software version number.
 int getSceneIlluminant()
          Get 7.7.3.7 scene illuminant.
 int getSegmentType()
          Get 6.1.5.1 segment type.
 int getSensor()
          Get 7.8 sensor.
 java.lang.String getSourceData()
          Get 9.1.2 SourceData.
 java.lang.String getSourceID()
          Get 7.2 source ID.
 java.lang.String getSourceType()
          Get 7.1 Source type.
 double getSourceXDimension()
           
 int getSourceXDimensionUnit()
           
 double getSourceYDimension()
           
 int getSourceYDimensionUnit()
           
 long[] getStripByteCounts()
          Get 6.1.5.4 Strip byte counts.
 long[] getStripOffsets()
          Get 6.1.5.2 Strip offsets.
 double[] getSubjectDistance()
          Get 7.7.3.5 Subject distance.
 java.lang.String getTargetIDManufacturer()
          Get 8.3.2.1 TargetIDManufacturer
 java.lang.String getTargetIDMedia()
          Get 8.3.2.3 TargetIDMedia
 java.lang.String getTargetIDName()
          Get 8.3.2.2 TargetIDName
 java.lang.String getTargetIDNo()
          Get 8.3.2.3 TargetIDNo
 int getTargetType()
          Get 8.3.1 Target Type
 long[] getTileByteCounts()
          Get 6.1.5.8 Tile byte counts.
 long getTileLength()
          Get 6.1.5.6 Tile length.
 long[] getTileOffsets()
          Get 6.1.5.7 Tile offsets.
 long getTileWidth()
          Get 6.1.5.5 Tile width.
 Property getViewerData()
          Get data for Swing GUI viewer.
 Rational getWhitePointXValue()
          Get 8.2.7.1 white point X value.
 Rational getWhitePointYValue()
          Get 8.2.7.2 white point Y value.
 double getXPhysScanResolution()
          Get 7.6.3.2.1 X physcal scanning resolution.
 double getXPrintAspectRatio()
          Get 7.7.3.16.1 X print aspect ratio.
 Rational getXSamplingFrequency()
          Get 8.1.3 X sampling frequency.
 long getXTargetedDisplayAR()
          Get 6.2.6 X targeted display aspect ratio.
 Rational[] getYCbCrCoefficients()
          Get 6.1.4.5 YCbCr coefficients.
 int getYCbCrPositioning()
          Get 6.1.4.4 YCbCr positioning.
 int[] getYCbCrSubSampling()
          Get 6.1.4.3 YCbCr subsampling.
 double getYPhysScanResolution()
          Get 7.6.3.2.2 Y physcal scanning resolution.
 double getYPrintAspectRatio()
          Get 7.7.3.16.2 Y print aspect ratio.
 Rational getYSamplingFrequency()
          Get 8.1.4 Y sampling frequency.
 long getYTargetedDisplayAR()
          Get 6.2.7 Y targeted display aspect ratio.
 void setAutoFocus(int focus)
          Set 7.7.3.15 auto focus.
 void setBackLight(int light)
          Set 7.7.3.13 back light.
 void setBitsPerSample(int[] bits)
          Set 8.2.1 bits per sample.
 void setBrightness(double brightness)
          Set 7.7.3.3 brightness.
 void setByteOrder(java.lang.String order)
          Set 6.1.2 byte order.
 void setColormapBitCodeValue(int[] value)
          Set 8.2.4.2 colormap bit code value.
 void setColormapBlueValue(int[] value)
          Set 8.2.4.4 colormap blue value.
 void setColormapGreenValue(int[] value)
          Set 8.2.4.3 colormap green value.
 void setColormapRedValue(int[] value)
          Set 8.2.4.2 colormap red value.
 void setColormapReference(java.lang.String reference)
          Set 8.2.4.1 colormap reference.
 void setColorSpace(int space)
          Set 6.1.4.1 color space
 void setColorTemp(double temp)
          Set 7.7.3.8 color temperature.
 void setCompressionLevel(int level)
          Set 6.1.3.2 compression level.
 void setCompressionScheme(int scheme)
          Set 6.1.3.1 compression scheme.
 void setDateTimeCreated(java.lang.String date)
          Set 7.9 date/time created.
 void setDateTimeProcessed(java.lang.String date)
          Set 9.1.1 DateTimeProcessed.
 void setDeviceSource(java.lang.String source)
          Set 7.5 Device source.
 void setDigitalCameraManufacturer(java.lang.String manufacturer)
          Set 7.7.1 digital camera manufacturer.
 void setDigitalCameraModel(java.lang.String model)
          Set 7.7.2 digital camera model.
 void setDisplayOrientation(int orientation)
          Set 6.2.5 display orientation.
 void setExposureBias(double bias)
          Set 7.2.3.4 exposure bias.
 void setExposureIndex(double index)
          Set 7.2.3.14 exposure index.
 void setExposureTime(double time)
          Set 7.7.3.2 exposure time.
 void setExtraSamples(int[] extra)
          Set 8.2.3 extra samples.
 void setFileSize(long size)
          Set 6.2.2 file size.
 void setFlash(int flash)
          Set 7.7.3.10 flash.
 void setFlashEnergy(double energy)
          Set 7.7.3.11 flash energy.
 void setFlashReturn(int ret)
          Set 7.7.3.12 flash return.
 void setFNumber(double f)
          Set 7.7.3.1 F number.
 void setFocalLength(double length)
          Set 7.7.3.9 focal length (double meters).
 void setGrayResponseCurve(int[] curve)
          Set 8.2.5 gray response curve.
 void setGrayResponseUnit(int unit)
          Set 8.2.6 gray response unit.
 void setHostComputer(java.lang.String computer)
          Set 7.4 host computer.
 void setImageData(java.lang.String imageData)
          Set 8.3.3 ImageData.
 void setImageIdentifier(java.lang.String identifier)
          Set 6.2.1 Image identifier.
 void setImageIdentifierLocation(java.lang.String location)
          Set 6.2.1 Image identifier location.
 void setImageLength(long length)
          Set 8.1.6 image length.
 void setImageProducer(java.lang.String producer)
          Set 7.3 image producer.
 void setImageWidth(long width)
          Set 8.1.5 image width.
 void setMeteringMode(int mode)
          Set 7.7.3.6 metering mode.
 void setMethodology(java.lang.String methodology)
          Set 7.10 methodology.
 void setMimeType(java.lang.String type)
          Set 6.1.1 MIME type.
 void setOrientation(int orientation)
          Set 6.2.4 orientation.
 void setOS(java.lang.String os)
           
 void setOSVersion(java.lang.String version)
          Set 7.4.2 OS version.
 void setPerformanceData(java.lang.String performanceData)
          Set 8.3.4 PerformanceData.
 void setPixelSize(double size)
          Set 7.6.3.1 pixel size.
 void setPlanarConfiguration(int configuration)
          Set 6.1.6 Planar configuration.
 void setPreferredPresentation(java.lang.String presentation)
          Set 6.3 preferred presentation.
 void setPrimaryChromaticitiesBlueX(Rational x)
          Set 8.2.8.5 primary chromaticities blue X.
 void setPrimaryChromaticitiesBlueY(Rational y)
          Set 8.2.8.6 primary chromaticities blue Y.
 void setPrimaryChromaticitiesGreenX(Rational x)
          Set 8.2.8.3 primary chromaticities green X.
 void setPrimaryChromaticitiesGreenY(Rational y)
          Set 8.2.8.4 primary chromaticities green Y.
 void setPrimaryChromaticitiesRedX(Rational x)
          Set 8.2.8.1 primary chromaticities red X.
 void setPrimaryChromaticitiesRedY(Rational y)
          Set 8.2.8.2 primary chromaticities red Y.
 void setProcessingActions(java.lang.String[] actions)
          Set 9.1.5 ProcessingActions.
 void setProcessingAgency(java.lang.String processingAgency)
          Set 9.1.3 ProcessingAgency.
 void setProcessingSoftwareName(java.lang.String name)
          Set 9.1.4.1 ProcessingSoftwareName
 void setProcessingSoftwareVersion(java.lang.String version)
          Set 9.1.4.2 ProcessingSoftwareVersion
 void setProfileName(java.lang.String name)
          Set 6.1.4.1 ICC profile name.
 void setProfiles(java.lang.String profiles)
          Set 8.3.5 Profiles.
 void setProfileURL(java.lang.String URL)
          Set 6.1.4.2 ICC profile URL.
 void setReferenceBlackWhite(Rational[] reference)
          Set 6.1.4.6 reference black and white.
 void setRowsPerStrip(long rows)
          Set 6.1.5.3 Rows per strip.
 void setSamplesPerPixel(int samples)
          Set 8.2.2 samples per pixel.
 void setSamplingFrequencyPlane(int plane)
          Set 8.1.1 sampling frequency plane.
 void setSamplingFrequencyUnit(int unit)
          Set 8.1.2 sampling frequency unit.
 void setScannerManufacturer(java.lang.String manufacturer)
          Set 7.6.1.1 scanner manufacturer.
 void setScannerModelName(java.lang.String name)
          Set 7.6.1.2.1 scanner model name.
 void setScannerModelNumber(java.lang.String number)
          Set 7.6.1.2.2 scanner model number.
 void setScannerModelSerialNo(java.lang.String number)
          Set 7.6.1.2.3 scanner model serial number.
 void setScanningSoftware(java.lang.String software)
          Set 7.6.2.1 scanning software.
 void setScanningSoftwareVersionNo(java.lang.String number)
          Set 7.6.2.2 scanning software version number.
 void setSceneIlluminant(int illuminant)
          Set 7.7.3.7 scene illuminant.
 void setSensor(int sensor)
          Set 7.8 sensor.
 void setSourceData(java.lang.String sourceData)
          Set 9.1.2 SourceData.
 void setSourceID(java.lang.String id)
          Set 7.2 source ID.
 void setSourceType(java.lang.String type)
          Set 7.1 source type.
 void setSourceXDimension(double x)
          Set 8.1.7 source X dimension.
 void setSourceXDimensionUnit(int unit)
          Set 8.1.7.1 source X dimension unit.
 void setSourceYDimension(double y)
          Set 8.1.8 source Y dimension.
 void setSourceYDimensionUnit(int unit)
          Set 8.1.8.1 source Y dimension unit.
 void setStripByteCounts(long[] counts)
          Set 6.1.5.4 Strip byte counts.
 void setStripOffsets(long[] offsets)
          Set 6.1.5.2 Strip offsets.
 void setSubjectDistance(double[] distance)
          Set 7.7.3.5 Subject distance
 void setTargetIDManufacturer(java.lang.String targetIDManufacturer)
          Set 8.3.2.1 TargetIDManufacturer
 void setTargetIDMedia(java.lang.String targetIDMedia)
          Set 8.3.2.4 TargetIDMedia
 void setTargetIDName(java.lang.String targetIDName)
          Set 8.3.2.2 TargetIDName
 void setTargetIDNo(java.lang.String targetIDNo)
          Set 8.3.2.3 TargetIDNo
 void setTargetType(int targetType)
          Set 8.3.1 TargetType
 void setTileByteCounts(long[] counts)
          Set 6.1.5.8 Tile byte counts.
 void setTileLength(long length)
          Set 6.1.5.6 Tile length.
 void setTileOffsets(long[] offsets)
          Set 6.1.5.7 Tile offsets.
 void setTileWidth(long width)
          Set 6.1.5.5 Tile width.
 void setViewerData(Property viewerData)
          Set information for Swing GUI viewer.
 void setWhitePointXValue(Rational x)
          Set 8.2.7.1 white point X value.
 void setWhitePointYValue(Rational y)
          Set 8.2.7.2 white point Y value.
 void setXPhysScanResolution(double x)
          Set 7.6.3.2.1 X physical scanning resolution.
 void setXPrintAspectRatio(double x)
          Set 7.7.3.16.1 X print aspect ratio.
 void setXSamplingFrequency(Rational x)
          Set 8.1.3 X sampling frequency.
 void setXTargetedDisplayAspectRatio(long x)
          Set 6.2.6.1 X targeted display aspect ratio.
 void setYCbCrCoefficients(Rational[] coefficients)
          Set 6.1.4.5 YCbCr coefficients.
 void setYCbCrPositioning(int positioning)
          Set 6.1.4.4 YCbCr positioning.
 void setYCbCrSubSampling(int[] sampling)
          Set 6.1.4.3 YCbCr Sub-sampling.
 void setYPhysScanResolution(double y)
          Set 7.6.3.2.2 Y physical scanning resolution.
 void setYPrintAspectRatio(double y)
          Set 7.7.3.16.2 Y print aspect ratio.
 void setYSamplingFrequency(Rational y)
          Set 8.1.4 Y sampling frequency.
 void setYTargetedDisplayAspectRatio(long y)
          Set 6.2.6.2 Y targeted display aspect ratio.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

AUTOFOCUS

public static final java.lang.String[] AUTOFOCUS
7.7.3.15 auto focus value labels.


BACKLIGHT

public static final java.lang.String[] BACKLIGHT
7.7.3.13 back light value labels.


BYTEORDER

public static final java.lang.String[] BYTEORDER
6.1.2 byte order value labels.


CHECKSUM_METHOD

public static final java.lang.String[] CHECKSUM_METHOD
6.2.3.1 Checksum method value labels.


COLORSPACE

public static final java.lang.String[] COLORSPACE
6.1.4.1 Color space value labels.


COLORSPACE_INDEX

public static final int[] COLORSPACE_INDEX
Index for 6.1.4.1 color space value labels.


COMPRESSION_SCHEME

public static final java.lang.String[] COMPRESSION_SCHEME
6.1.3.1 Compression scheme value labels.


COMPRESSION_SCHEME_INDEX

public static final int[] COMPRESSION_SCHEME_INDEX
Index for 6.1.3.1 compression scheme value labels.


DISPLAY_ORIENTATION

public static final java.lang.String[] DISPLAY_ORIENTATION
6.2.5 display orientation value labels.


EXTRA_SAMPLES

public static final java.lang.String[] EXTRA_SAMPLES

FLASH

public static final java.lang.String[] FLASH
7.7.3.10 flash value labels.


FLASH_RETURN

public static final java.lang.String[] FLASH_RETURN
7.7.3.12 flash return value labels.


GRAY_RESPONSE_UNIT

public static final java.lang.String[] GRAY_RESPONSE_UNIT
8.2.6 gray response unit value labels.


METERING_MODE

public static final java.lang.String[] METERING_MODE
7.7.3.6 metering mode value labels.


ORIENTATION

public static final java.lang.String[] ORIENTATION
6.2.4 orientation value labels.


PLANAR_CONFIGURATION

public static final java.lang.String[] PLANAR_CONFIGURATION
6.1.6 planar configuration value labels.


SAMPLING_FREQUENCY_PLANE

public static final java.lang.String[] SAMPLING_FREQUENCY_PLANE
8.1.1 sampling frequency plane value labels.


SAMPLING_FREQUENCY_UNIT

public static final java.lang.String[] SAMPLING_FREQUENCY_UNIT
8.1.2 sampling frequency unit value labels.


SCENE_ILLUMINANT

public static final java.lang.String[] SCENE_ILLUMINANT
7.7.3.7 scene illuminant value labels.


SCENE_ILLUMINANT_INDEX

public static final int[] SCENE_ILLUMINANT_INDEX
Index for 7.7.3.7 scene illuminant value labels.


SEGMENT_TYPE

public static final java.lang.String[] SEGMENT_TYPE
6.1.5.1 segment type value labels.


SENSOR

public static final java.lang.String[] SENSOR
7.8 sensor value labels.


SOURCE_DIMENSION_UNIT

public static final java.lang.String[] SOURCE_DIMENSION_UNIT
8.1.7.1 (8.1.8.1) source dimension unit.


YCBCR_POSITIONING

public static final java.lang.String[] YCBCR_POSITIONING
6.1.4.4 YCbCr positioning value labels.


TARGET_TYPE

public static final java.lang.String[] TARGET_TYPE
8.3.1 TargetType.


NULL

public static final int NULL
Undefined value.

See Also:
Constant Field Values

NILL

public static final double NILL
See Also:
Constant Field Values
Constructor Detail

NisoImageMetadata

public NisoImageMetadata()
Instantiate a NisoImageMetadata object.

Method Detail

getAutoFocus

public int getAutoFocus()
Get 7.7.3.15 auto focus.


getBackLight

public int getBackLight()
Get 7.7.3.13 back light.


getBitsPerSample

public int[] getBitsPerSample()
Get 8.2.1 bits per sample.


getBrightness

public double getBrightness()
Get 7.7.3.3 Brightness.


getByteOrder

public java.lang.String getByteOrder()
Get 6.1.2 byte order.


getChecksumMethod

public int getChecksumMethod()
Get 6.2.3.1 Checksum method.


getChecksumValue

public java.lang.String getChecksumValue()
Get 6.2.3.2 Checksum value.


getColormapBitCodeValue

public int[] getColormapBitCodeValue()
Get 8.2.4.2 colormap bit code value.


getColormapBlueValue

public int[] getColormapBlueValue()
Get 8.2.4.5 colormap blue value.


getColormapGreenValue

public int[] getColormapGreenValue()
Get 8.2.4.4 colormap green value.


getColormapRedValue

public int[] getColormapRedValue()
Get 8.2.4.3 colormap red value.


getColormapReference

public java.lang.String getColormapReference()
Get 8.2.4.1 colormap reference.


getColorSpace

public int getColorSpace()
Get 6.1.4.1 color space.


getColorTemp

public double getColorTemp()
Get 7.7.3.8 color temperature.


getCompressionLevel

public int getCompressionLevel()
Get 6.1.3.2 compression level.


getCompressionScheme

public int getCompressionScheme()
Get 6.1.3.1 compression scheme.


getDateTimeCreated

public java.lang.String getDateTimeCreated()
Get 7.9 date/time created.


getDateTimeProcessed

public java.lang.String getDateTimeProcessed()
Get 9.1.1 DateTimeProcessed


getDeviceSource

public java.lang.String getDeviceSource()
Get 7.5 device source.


getDigitalCameraManufacturer

public java.lang.String getDigitalCameraManufacturer()
Get 7.7.1 digital camera manufacturer.


getDigitalCameraModel

public java.lang.String getDigitalCameraModel()
Get 7.7.2 digital camera model.


getDisplayOrientation

public int getDisplayOrientation()
Get 6.2.5 Display orientation.


getExposureBias

public double getExposureBias()
Get 7.7.3.4 exposure bias.


getExposureIndex

public double getExposureIndex()
Get 7.7.3.14 exposure index.


getExposureTime

public double getExposureTime()
Get 7.7.3.2 exposure time.


getExtraSamples

public int[] getExtraSamples()
Get 8.2.3 extra samples.


getFileSize

public long getFileSize()
Get 6.2.2 file size.


getFlash

public int getFlash()
Get 7.7.3.10 flash.


getFlashEnergy

public double getFlashEnergy()
Get 7.7.3.11 flash energy.


getFlashReturn

public int getFlashReturn()
Get 7.7.3.12 flash return.


getFNumber

public double getFNumber()
Get 7.7.3.1 F number.


getFocalLength

public double getFocalLength()
Get 7.7.3.9 focal length.


getGrayResponseCurve

public int[] getGrayResponseCurve()
Get 8.2.5 gray response curve.


getGrayResponseUnit

public int getGrayResponseUnit()
Get 8.2.6 gray response unit.


getHostComputer

public java.lang.String getHostComputer()
Get 7.4 host computer.


getImageData

public java.lang.String getImageData()
Get 8.3.3 ImageData


getImageIdentifier

public java.lang.String getImageIdentifier()
Get 6.2.1 Image identifier.


getImageIdentifierLocation

public java.lang.String getImageIdentifierLocation()
Get 6.2.1.1 Image identifier location.


getImageLength

public long getImageLength()
Get 8.1.6 image length.


getImageProducer

public java.lang.String getImageProducer()
Get 7.3 Image producer.


getImageWidth

public long getImageWidth()
Get 8.1.5 image width.


getMeteringMode

public int getMeteringMode()
Get 7.7.3.6 metering mode.


getMethodology

public java.lang.String getMethodology()
Get 7.10 methodology.


getMimeType

public java.lang.String getMimeType()
Get 6.1.1 MIME type.


getOrientation

public int getOrientation()
Get 6.2.4 Orientation.


getOS

public java.lang.String getOS()
Get 7.4.1 OS (operating system).


getOSVersion

public java.lang.String getOSVersion()
Get 7.4.2 OS version.


getPerformanceData

public java.lang.String getPerformanceData()
Get 8.3.4 PerformanceData.


getPixelSize

public double getPixelSize()
Get 7.6.3.1 pixel size.


getPlanarConfiguration

public int getPlanarConfiguration()
Get 6.1.6 Planar configuration.


getPreferredPresentation

public java.lang.String getPreferredPresentation()
Get 6.3 preferred presentation.


getPrimaryChromaticitiesBlueX

public Rational getPrimaryChromaticitiesBlueX()
Get 8.2.8.5 primary chromaticities blue X.


getPrimaryChromaticitiesBlueY

public Rational getPrimaryChromaticitiesBlueY()
Get 8.2.8.6 primary chromaticities blue Y.


getPrimaryChromaticitiesGreenX

public Rational getPrimaryChromaticitiesGreenX()
Get 8.2.8.3 primary chromaticities green X.


getPrimaryChromaticitiesGreenY

public Rational getPrimaryChromaticitiesGreenY()
Get 8.2.8.4 primary chromaticities green Y.


getPrimaryChromaticitiesRedX

public Rational getPrimaryChromaticitiesRedX()
Get 8.2.8.1 primary chromaticities red X.


getPrimaryChromaticitiesRedY

public Rational getPrimaryChromaticitiesRedY()
Get 8.2.8.2 primary chromaticities red Y.


getProcessingActions

public java.lang.String[] getProcessingActions()
Get 9.1.5 ProcessingActions.


getProcessingAgency

public java.lang.String getProcessingAgency()
Get 9.1.3 ProcessingAgency.


getProcessingSoftwareName

public java.lang.String getProcessingSoftwareName()
Get 9.1.4.1 ProcessingSoftwareName


getProcessingSoftwareVersion

public java.lang.String getProcessingSoftwareVersion()
Get 9.1.4.2 ProcessingSoftwareVersion


getProfileName

public java.lang.String getProfileName()
Get 6.1.4.2.1 ICC profile name.


getProfiles

public java.lang.String getProfiles()
Get 8.3.5 Profiles


getProfileURL

public java.lang.String getProfileURL()
Get 6.1.4.2.2 ICC profile URL.


getReferenceBlackWhite

public Rational[] getReferenceBlackWhite()
Get 6.1.4.6 Reference black and white.


getRowsPerStrip

public long getRowsPerStrip()
Get 6.1.5.3 Rows per strip.


getSamplesPerPixel

public int getSamplesPerPixel()
Get 8.2.2 samples per pixel.


getSamplingFrequencyPlane

public int getSamplingFrequencyPlane()
Get 8.1.1 sampling frequency plane.


getSamplingFrequencyUnit

public int getSamplingFrequencyUnit()
Get 8.1.2 sampling frequency unit.


getScannerManufacturer

public java.lang.String getScannerManufacturer()
Get 7.6.1.1 scanner manufacturer.


getScannerModelName

public java.lang.String getScannerModelName()
Get 7.6.1.2.1 scanner model name.


getScannerModelNumber

public java.lang.String getScannerModelNumber()
Get 7.6.1.2.2 scanner model number.


getScannerModelSerialNo

public java.lang.String getScannerModelSerialNo()
Get 7.6.1.2.3 scanner model serial number.


getScanningSoftware

public java.lang.String getScanningSoftware()
Get 7.6.2.1 scanning software.


getScanningSoftwareVersionNo

public java.lang.String getScanningSoftwareVersionNo()
Get 7.6.2.2 scanning software version number.


getSceneIlluminant

public int getSceneIlluminant()
Get 7.7.3.7 scene illuminant.


getSegmentType

public int getSegmentType()
Get 6.1.5.1 segment type.


getSensor

public int getSensor()
Get 7.8 sensor.


getSourceData

public java.lang.String getSourceData()
Get 9.1.2 SourceData.


getSourceID

public java.lang.String getSourceID()
Get 7.2 source ID.


getSourceType

public java.lang.String getSourceType()
Get 7.1 Source type.


getSourceXDimension

public double getSourceXDimension()

getSourceXDimensionUnit

public int getSourceXDimensionUnit()

getSourceYDimension

public double getSourceYDimension()

getSourceYDimensionUnit

public int getSourceYDimensionUnit()

getStripByteCounts

public long[] getStripByteCounts()
Get 6.1.5.4 Strip byte counts.


getStripOffsets

public long[] getStripOffsets()
Get 6.1.5.2 Strip offsets.


getSubjectDistance

public double[] getSubjectDistance()
Get 7.7.3.5 Subject distance.


getTargetIDManufacturer

public java.lang.String getTargetIDManufacturer()
Get 8.3.2.1 TargetIDManufacturer


getTargetIDMedia

public java.lang.String getTargetIDMedia()
Get 8.3.2.3 TargetIDMedia


getTargetIDName

public java.lang.String getTargetIDName()
Get 8.3.2.2 TargetIDName


getTargetIDNo

public java.lang.String getTargetIDNo()
Get 8.3.2.3 TargetIDNo


getTargetType

public int getTargetType()
Get 8.3.1 Target Type


getTileByteCounts

public long[] getTileByteCounts()
Get 6.1.5.8 Tile byte counts.


getTileLength

public long getTileLength()
Get 6.1.5.6 Tile length.


getTileOffsets

public long[] getTileOffsets()
Get 6.1.5.7 Tile offsets.


getTileWidth

public long getTileWidth()
Get 6.1.5.5 Tile width.


getWhitePointXValue

public Rational getWhitePointXValue()
Get 8.2.7.1 white point X value.


getWhitePointYValue

public Rational getWhitePointYValue()
Get 8.2.7.2 white point Y value.


getXPrintAspectRatio

public double getXPrintAspectRatio()
Get 7.7.3.16.1 X print aspect ratio.


getXPhysScanResolution

public double getXPhysScanResolution()
Get 7.6.3.2.1 X physcal scanning resolution.


getXSamplingFrequency

public Rational getXSamplingFrequency()
Get 8.1.3 X sampling frequency.


getXTargetedDisplayAR

public long getXTargetedDisplayAR()
Get 6.2.6 X targeted display aspect ratio.


getYCbCrCoefficients

public Rational[] getYCbCrCoefficients()
Get 6.1.4.5 YCbCr coefficients.


getYCbCrPositioning

public int getYCbCrPositioning()
Get 6.1.4.4 YCbCr positioning.


getYCbCrSubSampling

public int[] getYCbCrSubSampling()
Get 6.1.4.3 YCbCr subsampling.


getYPhysScanResolution

public double getYPhysScanResolution()
Get 7.6.3.2.2 Y physcal scanning resolution.


getYPrintAspectRatio

public double getYPrintAspectRatio()
Get 7.7.3.16.2 Y print aspect ratio.


getYSamplingFrequency

public Rational getYSamplingFrequency()
Get 8.1.4 Y sampling frequency.


getYTargetedDisplayAR

public long getYTargetedDisplayAR()
Get 6.2.7 Y targeted display aspect ratio.


getViewerData

public Property getViewerData()
Get data for Swing GUI viewer.


setAutoFocus

public void setAutoFocus(int focus)
Set 7.7.3.15 auto focus.

Parameters:
focus - Auto focus

setBackLight

public void setBackLight(int light)
Set 7.7.3.13 back light.

Parameters:
light - Back light

setBitsPerSample

public void setBitsPerSample(int[] bits)
Set 8.2.1 bits per sample.

Parameters:
bits - Bits per sample

setBrightness

public void setBrightness(double brightness)
Set 7.7.3.3 brightness.

Parameters:
brightness - Brightness

setByteOrder

public void setByteOrder(java.lang.String order)
Set 6.1.2 byte order.

Parameters:
order - Byte order

setColormapBitCodeValue

public void setColormapBitCodeValue(int[] value)
Set 8.2.4.2 colormap bit code value.

Parameters:
value - Bit code value

setColormapBlueValue

public void setColormapBlueValue(int[] value)
Set 8.2.4.4 colormap blue value.

Parameters:
value - Blue value

setColormapGreenValue

public void setColormapGreenValue(int[] value)
Set 8.2.4.3 colormap green value.

Parameters:
value - Green value

setColormapRedValue

public void setColormapRedValue(int[] value)
Set 8.2.4.2 colormap red value.

Parameters:
value - Red value

setColormapReference

public void setColormapReference(java.lang.String reference)
Set 8.2.4.1 colormap reference.

Parameters:
reference - Colormap reference

setColorSpace

public void setColorSpace(int space)
Set 6.1.4.1 color space

Parameters:
space - Color space

setColorTemp

public void setColorTemp(double temp)
Set 7.7.3.8 color temperature.

Parameters:
temp - Color temperature

setCompressionLevel

public void setCompressionLevel(int level)
Set 6.1.3.2 compression level.

Parameters:
level - Compression level

setCompressionScheme

public void setCompressionScheme(int scheme)
Set 6.1.3.1 compression scheme.

Parameters:
scheme - Compression scheme

setDateTimeCreated

public void setDateTimeCreated(java.lang.String date)
Set 7.9 date/time created. TIFF dates get converted to ISO 8601 format.

Parameters:
date - Date/time created

setDateTimeProcessed

public void setDateTimeProcessed(java.lang.String date)
Set 9.1.1 DateTimeProcessed. TIFF dates get converted to ISO 8601 format.

Parameters:
date - Date/time processed

setDeviceSource

public void setDeviceSource(java.lang.String source)
Set 7.5 Device source.

Parameters:
source - Device source

setDigitalCameraManufacturer

public void setDigitalCameraManufacturer(java.lang.String manufacturer)
Set 7.7.1 digital camera manufacturer.

Parameters:
manufacturer - Camera manufacturer

setDigitalCameraModel

public void setDigitalCameraModel(java.lang.String model)
Set 7.7.2 digital camera model.

Parameters:
model - Camera model

setDisplayOrientation

public void setDisplayOrientation(int orientation)
Set 6.2.5 display orientation.

Parameters:
orientation - Display orientation

setExposureBias

public void setExposureBias(double bias)
Set 7.2.3.4 exposure bias.

Parameters:
bias - Exposure bias

setExposureIndex

public void setExposureIndex(double index)
Set 7.2.3.14 exposure index.

Parameters:
index - Exposure index

setExposureTime

public void setExposureTime(double time)
Set 7.7.3.2 exposure time.

Parameters:
time - Exposure time

setExtraSamples

public void setExtraSamples(int[] extra)
Set 8.2.3 extra samples.

Parameters:
extra - Extra samples

setFileSize

public void setFileSize(long size)
Set 6.2.2 file size.

Parameters:
size - File size

setFNumber

public void setFNumber(double f)
Set 7.7.3.1 F number.

Parameters:
f - F number

setFlashEnergy

public void setFlashEnergy(double energy)
Set 7.7.3.11 flash energy.

Parameters:
energy - Flash energy

setFlashReturn

public void setFlashReturn(int ret)
Set 7.7.3.12 flash return.

Parameters:
ret - Flash return

setFlash

public void setFlash(int flash)
Set 7.7.3.10 flash.

Parameters:
flash - Flash

setFocalLength

public void setFocalLength(double length)
Set 7.7.3.9 focal length (double meters).

Parameters:
length - Focal length

setGrayResponseCurve

public void setGrayResponseCurve(int[] curve)
Set 8.2.5 gray response curve.

Parameters:
curve - Gray response curve

setGrayResponseUnit

public void setGrayResponseUnit(int unit)
Set 8.2.6 gray response unit.

Parameters:
unit - Gray response unit

setHostComputer

public void setHostComputer(java.lang.String computer)
Set 7.4 host computer.

Parameters:
computer - Host computer

setImageData

public void setImageData(java.lang.String imageData)
Set 8.3.3 ImageData.

Parameters:
imageData - Image Data filename or URN

setImageIdentifier

public void setImageIdentifier(java.lang.String identifier)
Set 6.2.1 Image identifier.

Parameters:
identifier - Image identifier

setImageIdentifierLocation

public void setImageIdentifierLocation(java.lang.String location)
Set 6.2.1 Image identifier location.

Parameters:
location - identifier location

setImageLength

public void setImageLength(long length)
Set 8.1.6 image length.

Parameters:
length - Image length

setImageProducer

public void setImageProducer(java.lang.String producer)
Set 7.3 image producer.

Parameters:
producer - Image producer

setImageWidth

public void setImageWidth(long width)
Set 8.1.5 image width.

Parameters:
width - Image width

setMeteringMode

public void setMeteringMode(int mode)
Set 7.7.3.6 metering mode.

Parameters:
mode - Metering mode

setMethodology

public void setMethodology(java.lang.String methodology)
Set 7.10 methodology.

Parameters:
methodology - Methodology

setMimeType

public void setMimeType(java.lang.String type)
Set 6.1.1 MIME type.

Parameters:
type - MIME type

setOrientation

public void setOrientation(int orientation)
Set 6.2.4 orientation.

Parameters:
orientation - Orientation

setOS

public void setOS(java.lang.String os)

setOSVersion

public void setOSVersion(java.lang.String version)
Set 7.4.2 OS version.

Parameters:
version - OS version

setPerformanceData

public void setPerformanceData(java.lang.String performanceData)
Set 8.3.4 PerformanceData.

Parameters:
performanceData - Performance data filename or URN

setPixelSize

public void setPixelSize(double size)
Set 7.6.3.1 pixel size.

Parameters:
size - Pixel size

setPlanarConfiguration

public void setPlanarConfiguration(int configuration)
Set 6.1.6 Planar configuration.

Parameters:
configuration - Planar configuration

setPreferredPresentation

public void setPreferredPresentation(java.lang.String presentation)
Set 6.3 preferred presentation.

Parameters:
presentation - Preferred presentation

setPrimaryChromaticitiesBlueX

public void setPrimaryChromaticitiesBlueX(Rational x)
Set 8.2.8.5 primary chromaticities blue X.

Parameters:
x - Blue x

setPrimaryChromaticitiesBlueY

public void setPrimaryChromaticitiesBlueY(Rational y)
Set 8.2.8.6 primary chromaticities blue Y.

Parameters:
y - Blue y

setPrimaryChromaticitiesGreenX

public void setPrimaryChromaticitiesGreenX(Rational x)
Set 8.2.8.3 primary chromaticities green X.

Parameters:
x - Green x

setPrimaryChromaticitiesGreenY

public void setPrimaryChromaticitiesGreenY(Rational y)
Set 8.2.8.4 primary chromaticities green Y.

Parameters:
y - Green y

setPrimaryChromaticitiesRedX

public void setPrimaryChromaticitiesRedX(Rational x)
Set 8.2.8.1 primary chromaticities red X.

Parameters:
x - Red x

setPrimaryChromaticitiesRedY

public void setPrimaryChromaticitiesRedY(Rational y)
Set 8.2.8.2 primary chromaticities red Y.

Parameters:
y - Red y

setProcessingActions

public void setProcessingActions(java.lang.String[] actions)
Set 9.1.5 ProcessingActions.

Parameters:
actions - Array of strings giving image processing steps

setProcessingAgency

public void setProcessingAgency(java.lang.String processingAgency)
Set 9.1.3 ProcessingAgency.

Parameters:
processingAgency - Identifier of producing organization

setProcessingSoftwareName

public void setProcessingSoftwareName(java.lang.String name)
Set 9.1.4.1 ProcessingSoftwareName

Parameters:
name - Name of the image processing software

setProcessingSoftwareVersion

public void setProcessingSoftwareVersion(java.lang.String version)
Set 9.1.4.2 ProcessingSoftwareVersion

Parameters:
version - Version number of the processing software

setProfileName

public void setProfileName(java.lang.String name)
Set 6.1.4.1 ICC profile name.

Parameters:
name - Profile name

setProfiles

public void setProfiles(java.lang.String profiles)
Set 8.3.5 Profiles.

Parameters:
profiles - Color profile filename or URN

setProfileURL

public void setProfileURL(java.lang.String URL)
Set 6.1.4.2 ICC profile URL.

Parameters:
URL - Profile URL

setReferenceBlackWhite

public void setReferenceBlackWhite(Rational[] reference)
Set 6.1.4.6 reference black and white.

Parameters:
reference - Reference

setRowsPerStrip

public void setRowsPerStrip(long rows)
Set 6.1.5.3 Rows per strip.

Parameters:
rows - Rows per strip

setSamplingFrequencyPlane

public void setSamplingFrequencyPlane(int plane)
Set 8.1.1 sampling frequency plane.

Parameters:
plane - Sampling frequency plane

setSamplesPerPixel

public void setSamplesPerPixel(int samples)
Set 8.2.2 samples per pixel.

Parameters:
samples - Samples per pixel

setSamplingFrequencyUnit

public void setSamplingFrequencyUnit(int unit)
Set 8.1.2 sampling frequency unit.

Parameters:
unit - Sampling frequency unit

setScannerManufacturer

public void setScannerManufacturer(java.lang.String manufacturer)
Set 7.6.1.1 scanner manufacturer.

Parameters:
manufacturer - Scanner manufacturer

setScannerModelName

public void setScannerModelName(java.lang.String name)
Set 7.6.1.2.1 scanner model name.

Parameters:
name - Scanner model name

setScannerModelNumber

public void setScannerModelNumber(java.lang.String number)
Set 7.6.1.2.2 scanner model number.

Parameters:
number - Scanner model number

setScannerModelSerialNo

public void setScannerModelSerialNo(java.lang.String number)
Set 7.6.1.2.3 scanner model serial number.

Parameters:
number - Scanner model serial number

setScanningSoftware

public void setScanningSoftware(java.lang.String software)
Set 7.6.2.1 scanning software.

Parameters:
software - Scanning software

setScanningSoftwareVersionNo

public void setScanningSoftwareVersionNo(java.lang.String number)
Set 7.6.2.2 scanning software version number.

Parameters:
number - Scanning software version number

setSceneIlluminant

public void setSceneIlluminant(int illuminant)
Set 7.7.3.7 scene illuminant.

Parameters:
illuminant - Scene illuminant

setSensor

public void setSensor(int sensor)
Set 7.8 sensor.

Parameters:
sensor - Sensor

setSourceData

public void setSourceData(java.lang.String sourceData)
Set 9.1.2 SourceData.

Parameters:
sourceData - Source data identifier

setSourceID

public void setSourceID(java.lang.String id)
Set 7.2 source ID.

Parameters:
id - Source ID

setSourceType

public void setSourceType(java.lang.String type)
Set 7.1 source type.

Parameters:
type - Source type

setSourceXDimension

public void setSourceXDimension(double x)
Set 8.1.7 source X dimension.

Parameters:
x - X dimension

setSourceXDimensionUnit

public void setSourceXDimensionUnit(int unit)
Set 8.1.7.1 source X dimension unit.

Parameters:
unit - X dimension unit

setSourceYDimension

public void setSourceYDimension(double y)
Set 8.1.8 source Y dimension.

Parameters:
y - Y dimension

setSourceYDimensionUnit

public void setSourceYDimensionUnit(int unit)
Set 8.1.8.1 source Y dimension unit.

Parameters:
unit - Y dimension unit

setStripByteCounts

public void setStripByteCounts(long[] counts)
Set 6.1.5.4 Strip byte counts.

Parameters:
counts - Byte counts

setStripOffsets

public void setStripOffsets(long[] offsets)
Set 6.1.5.2 Strip offsets.

Parameters:
offsets - Strip offsets

setSubjectDistance

public void setSubjectDistance(double[] distance)
Set 7.7.3.5 Subject distance

Parameters:
distance - Subject distance

setTargetIDManufacturer

public void setTargetIDManufacturer(java.lang.String targetIDManufacturer)
Set 8.3.2.1 TargetIDManufacturer


setTargetIDMedia

public void setTargetIDMedia(java.lang.String targetIDMedia)
Set 8.3.2.4 TargetIDMedia


setTargetIDName

public void setTargetIDName(java.lang.String targetIDName)
Set 8.3.2.2 TargetIDName


setTargetIDNo

public void setTargetIDNo(java.lang.String targetIDNo)
Set 8.3.2.3 TargetIDNo


setTargetType

public void setTargetType(int targetType)
Set 8.3.1 TargetType


setTileByteCounts

public void setTileByteCounts(long[] counts)
Set 6.1.5.8 Tile byte counts.

Parameters:
counts - Byte counts

setTileLength

public void setTileLength(long length)
Set 6.1.5.6 Tile length.

Parameters:
length - Tile length

setTileOffsets

public void setTileOffsets(long[] offsets)
Set 6.1.5.7 Tile offsets.

Parameters:
offsets - tile offsets

setTileWidth

public void setTileWidth(long width)
Set 6.1.5.5 Tile width.

Parameters:
width - Tile width

setWhitePointXValue

public void setWhitePointXValue(Rational x)
Set 8.2.7.1 white point X value.

Parameters:
x - White point X

setWhitePointYValue

public void setWhitePointYValue(Rational y)
Set 8.2.7.2 white point Y value.

Parameters:
y - White point Y

setXPhysScanResolution

public void setXPhysScanResolution(double x)
Set 7.6.3.2.1 X physical scanning resolution.

Parameters:
x - X physical scanning resolution

setXPrintAspectRatio

public void setXPrintAspectRatio(double x)
Set 7.7.3.16.1 X print aspect ratio.

Parameters:
x - X aspect ratio

setXSamplingFrequency

public void setXSamplingFrequency(Rational x)
Set 8.1.3 X sampling frequency.

Parameters:
x - X sampling frequency

setXTargetedDisplayAspectRatio

public void setXTargetedDisplayAspectRatio(long x)
Set 6.2.6.1 X targeted display aspect ratio.

Parameters:
x - X units

setYCbCrCoefficients

public void setYCbCrCoefficients(Rational[] coefficients)
Set 6.1.4.5 YCbCr coefficients.

Parameters:
coefficients - Coefficients

setYCbCrPositioning

public void setYCbCrPositioning(int positioning)
Set 6.1.4.4 YCbCr positioning.

Parameters:
positioning - Positioning

setYCbCrSubSampling

public void setYCbCrSubSampling(int[] sampling)
Set 6.1.4.3 YCbCr Sub-sampling.

Parameters:
sampling - Sub-sampling

setYPhysScanResolution

public void setYPhysScanResolution(double y)
Set 7.6.3.2.2 Y physical scanning resolution.

Parameters:
y - Y physical scanning resolution

setYPrintAspectRatio

public void setYPrintAspectRatio(double y)
Set 7.7.3.16.2 Y print aspect ratio.

Parameters:
y - Y aspect ratio

setYSamplingFrequency

public void setYSamplingFrequency(Rational y)
Set 8.1.4 Y sampling frequency.

Parameters:
y - Y sampling frequency

setYTargetedDisplayAspectRatio

public void setYTargetedDisplayAspectRatio(long y)
Set 6.2.6.2 Y targeted display aspect ratio.

Parameters:
y - Y units

setViewerData

public void setViewerData(Property viewerData)
Set information for Swing GUI viewer.

Parameters:
viewerData - Private data for RepTreeModel


jhove/doc/edu/harvard/hul/ois/jhove/ObjectIdentifier.html0000644000707400001440000002567611510702351022637 0ustar garyusers ObjectIdentifier (JHOVE Documentation)

edu.harvard.hul.ois.jhove
Class ObjectIdentifier

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.ObjectIdentifier

public class ObjectIdentifier
extends java.lang.Object

Module for identification of a document. "Identification" means determining, by querying modules successively, what the format of a document is. The Bytestream module is always queried last, so a document will by identified as a Bytestream if all else fails.


Constructor Summary
ObjectIdentifier(java.util.List moduleList)
          CLASS CONSTRUCTOR.
 
Method Summary
 void identify(java.io.File file, RepInfo info, java.lang.String parm, boolean verbose, boolean shortCheck)
          Perform identification on a file.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ObjectIdentifier

public ObjectIdentifier(java.util.List moduleList)
CLASS CONSTRUCTOR.

Method Detail

identify

public void identify(java.io.File file,
                     RepInfo info,
                     java.lang.String parm,
                     boolean verbose,
                     boolean shortCheck)
              throws java.io.IOException
Perform identification on a file. The file is parsed by each of the modules in the module list until one declares that the file is well-formed. It is assumed that there is a module in the list (normally Bytestream at the end) which will always consider a file well-formed.

Throws:
java.io.IOException


jhove/doc/edu/harvard/hul/ois/jhove/OutputHandler.html0000644000707400001440000007302011510702351022206 0ustar garyusers OutputHandler (JHOVE Documentation)

edu.harvard.hul.ois.jhove
Interface OutputHandler

All Known Implementing Classes:
AuditHandler, HandlerBase, TextHandler, ViewHandler, XmlHandler

public interface OutputHandler

Public interface for Jhove output handlers. All output handlers must implement OutputHandler, and in normal cases should subclass HandlerBase.


Method Summary
 void analyze(RepInfo info)
          Callback allowing post-parse, pre-show analysis of object representation information.
 void applyDefaultParams()
          Applies the default parameters.
 void close()
          Do appropriate finalization after all output is complete.
 void endDirectory()
          Callback indicating a directory is finished being processed.
 java.util.Date getDate()
          Returns the last modification date of this handler
 java.lang.String getEncoding()
          Returns this handler's encoding.
 java.lang.String getName()
          Returns the name of this handler
 java.lang.String getNote()
          Returns this handler's note
 java.lang.String getRelease()
          Returns release information for this handler
 java.lang.String getRights()
          Returns this handler's copyright information
 java.util.List getSpecification()
          Returns a List of Document objects giving the format specification documentation
 Agent getVendor()
          Returns a List of Agent objects giving the vendor(s) of this handler.
 void init(java.lang.String init)
          Per-instantiation initialization.
 boolean okToProcess(java.lang.String filepath)
          Callback to give the handler the opportunity to decide whether or not to process a file.
 void param(java.lang.String param)
          Per-action initialization.
 void reset()
          Reset the handler.
 void resetParams()
          Reset parameter settings.
 void setApp(App app)
          Assigns an application object to provide services to this handler
 void setBase(JhoveBase je)
          Assigns the JHOVE engine object to provide services to this handler
 void setDefaultParams(java.util.List params)
          Sets list of default parameters.
 void setEncoding(java.lang.String encoding)
          Assigns the encoding to be used by this OutputHandler
 void setWriter(java.io.PrintWriter output)
          Assigns a PrintWriter to do output for this OutputHandler
 void show()
          Outputs minimal information about the application
 void show(App app)
          Outputs detailed information about the application, including configuration, available modules and handlers, etc.
 void show(Module module)
          Outputs information about a Module
 void show(OutputHandler handler)
          Outputs information about the OutputHandler specified in the parameter
 void show(RepInfo info)
          Outputs the information contained in a RepInfo object
 void showFooter()
          Do the final output.
 void showHeader()
          Do the initial output.
 void startDirectory(java.lang.String directory)
          Callback indicating a new directory is being processed.
 

Method Detail

reset

void reset()
Reset the handler. This needs to be called before each invocation.


analyze

void analyze(RepInfo info)
Callback allowing post-parse, pre-show analysis of object representation information.

Parameters:
info - Object representation information

endDirectory

void endDirectory()
Callback indicating a directory is finished being processed. Most handlers will do nothing.


getName

java.lang.String getName()
Returns the name of this handler


getRelease

java.lang.String getRelease()
Returns release information for this handler


getDate

java.util.Date getDate()
Returns the last modification date of this handler


getSpecification

java.util.List getSpecification()
Returns a List of Document objects giving the format specification documentation

See Also:
Document

getVendor

Agent getVendor()
Returns a List of Agent objects giving the vendor(s) of this handler.


getNote

java.lang.String getNote()
Returns this handler's note


getRights

java.lang.String getRights()
Returns this handler's copyright information


getEncoding

java.lang.String getEncoding()
Returns this handler's encoding.


init

void init(java.lang.String init)
          throws java.lang.Exception
Per-instantiation initialization.

Parameters:
init - Initialization parameter. This is typically obtained from the configuration file.
Throws:
java.lang.Exception

okToProcess

boolean okToProcess(java.lang.String filepath)
Callback to give the handler the opportunity to decide whether or not to process a file. Most handlers will always return true.

Parameters:
filepath - File pathname

setDefaultParams

void setDefaultParams(java.util.List params)
Sets list of default parameters.

Parameters:
params - A List whose elements are Strings. May be empty.

applyDefaultParams

void applyDefaultParams()
                        throws java.lang.Exception
Applies the default parameters.

Throws:
java.lang.Exception

resetParams

void resetParams()
                 throws java.lang.Exception
Reset parameter settings. Returns to a default state without any parameters.

Throws:
java.lang.Exception

param

void param(java.lang.String param)
           throws java.lang.Exception
Per-action initialization.

Parameters:
param - Initialization parameter.
Throws:
java.lang.Exception

setApp

void setApp(App app)
Assigns an application object to provide services to this handler


setBase

void setBase(JhoveBase je)
Assigns the JHOVE engine object to provide services to this handler


setEncoding

void setEncoding(java.lang.String encoding)
Assigns the encoding to be used by this OutputHandler


setWriter

void setWriter(java.io.PrintWriter output)
Assigns a PrintWriter to do output for this OutputHandler


show

void show(Module module)
Outputs information about a Module


show

void show(RepInfo info)
Outputs the information contained in a RepInfo object


show

void show(OutputHandler handler)
Outputs information about the OutputHandler specified in the parameter


show

void show()
Outputs minimal information about the application


show

void show(App app)
Outputs detailed information about the application, including configuration, available modules and handlers, etc.


showHeader

void showHeader()
Do the initial output. This should be in a suitable format for including multiple files between the header and the footer.


showFooter

void showFooter()
Do the final output. This should be in a suitable format for including multiple files between the header and the footer.


close

void close()
Do appropriate finalization after all output is complete.


startDirectory

void startDirectory(java.lang.String directory)
Callback indicating a new directory is being processed. Most handlers will do nothing.

Parameters:
directory - Directory path


jhove/doc/edu/harvard/hul/ois/jhove/Property.html0000644000707400001440000004064411510702352021243 0ustar garyusers Property (JHOVE Documentation)

edu.harvard.hul.ois.jhove
Class Property

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.Property

public class Property
extends java.lang.Object

This class encapsulates arbitrary format-specific properties. A Property's value can be a simple object or a structure. If it is a simple object, it has arity SCALAR. If it is a structure, its must be a Map, a List, a Set, or an array, with corresponding Arity. The simple object (in the case of arity SCALAR) or the components of the structure must have a type corresponding to one of the enumerations given by PropertyType. The components of a Property may themselves be Property objects, allowing nested structures.

See Also:
PropertyType, PropertyArity

Constructor Summary
Property(java.lang.String name, PropertyType type, java.lang.Object value)
          Creates a Property with arity SCALAR.
Property(java.lang.String name, PropertyType type, PropertyArity arity, java.lang.Object value)
          Creates a Property with a given name, type, arity and value.
 
Method Summary
 PropertyArity getArity()
          Returns the arity (type of structure) of this Property.
 Property getByName(java.lang.String name)
          Return a property by its name, regardless of its position in the structural hierarchy of properties.
 java.lang.String getName()
          Returns the displayable name of this Property.
 PropertyType getType()
          Returns the type of this Property.
 java.lang.Object getValue()
          Returns the Object which is the Property's value.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

Property

public Property(java.lang.String name,
                PropertyType type,
                java.lang.Object value)
Creates a Property with arity SCALAR.

Parameters:
name - The displayable name of the property
type - The type of property
value - The value of the property. The type of the parameter must agree with type.

Property

public Property(java.lang.String name,
                PropertyType type,
                PropertyArity arity,
                java.lang.Object value)
Creates a Property with a given name, type, arity and value.

Parameters:
name - The displayable name of the property.
type - The type of property.
arity - The arity of the property.
value - The value of the property. If the arity is SCALAR, the type of this parameter must agree with type. Otherwise, the arity must agree with arity, and its components must agree with type.
Method Detail

getArity

public PropertyArity getArity()
Returns the arity (type of structure) of this Property.


getByName

public Property getByName(java.lang.String name)
Return a property by its name, regardless of its position in the structural hierarchy of properties.

Parameters:
name - Property name
Returns:
Named property (or null)

getName

public java.lang.String getName()
Returns the displayable name of this Property.


getType

public PropertyType getType()
Returns the type of this Property. If the arity is other than SCALAR, the type refers to the compononents of the Property structure.


getValue

public java.lang.Object getValue()
Returns the Object which is the Property's value.



jhove/doc/edu/harvard/hul/ois/jhove/PropertyArity.html0000644000707400001440000003442011510702352022247 0ustar garyusers PropertyArity (JHOVE Documentation)

edu.harvard.hul.ois.jhove
Class PropertyArity

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.EnumerationType
      extended by edu.harvard.hul.ois.jhove.PropertyArity

public final class PropertyArity
extends EnumerationType

This class represents the arity (structure type) of a Property. Applications will not create or modify PropertyArities, but will use one of the predefined PropertyArity instances ARRAY, LIST, MAP, SCALAR, or SET.

See Also:
Property

Field Summary
static PropertyArity ARRAY
          An Arity corresponding to a Java array.
static PropertyArity LIST
          An Arity corresponding to java.util.List or any of its derived classes.
static PropertyArity MAP
          An Arity corresponding to java.util.Map or any of its derived classes.
static PropertyArity SCALAR
          An Arity corresponding to a simple object, which must be of a type corresponding to one of the instances of PropertyType.
static PropertyArity SET
          An Arity corresponding to java.util.Set or any of its derived classes.
 
Method Summary
 
Methods inherited from class edu.harvard.hul.ois.jhove.EnumerationType
equals, toString
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

ARRAY

public static final PropertyArity ARRAY
An Arity corresponding to a Java array. For the Java types Integer, Boolean, Byte, Character, Double, Float, Long, and Short, a Property with arity ARRAY is an array of primitive Java types rather than Objects (e.g., int rather than Integer).


LIST

public static final PropertyArity LIST
An Arity corresponding to java.util.List or any of its derived classes.


MAP

public static final PropertyArity MAP
An Arity corresponding to java.util.Map or any of its derived classes.


SCALAR

public static final PropertyArity SCALAR
An Arity corresponding to a simple object, which must be of a type corresponding to one of the instances of PropertyType.


SET

public static final PropertyArity SET
An Arity corresponding to java.util.Set or any of its derived classes.



jhove/doc/edu/harvard/hul/ois/jhove/PropertyPath.html0000644000707400001440000003713011510702352022054 0ustar garyusers PropertyPath (JHOVE Documentation)

edu.harvard.hul.ois.jhove
Class PropertyPath

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.PropertyPath

public class PropertyPath
extends java.lang.Object

A description of the location of a Property in a RepInfo object. Properties can be nested under other properties, in lists, maps, or subproperties. This class provides a general way to specify their location. For the moment, only paths by name are fully supported.

Author:
Gary McGath

Constructor Summary
PropertyPath()
          No-argument constructor.
PropertyPath(PropertyPath path)
          Cloning constructor.
PropertyPath(java.lang.String[] pathArray)
          String array constructor.
 
Method Summary
 void addPropertyIndex(int idx)
          Adds an index to the path, for an indexed property.
 void addPropertyKey(java.lang.Object obj)
          Adds a key to the path, for a property map.
 void addPropertyName(java.lang.String str)
          Adds a property name to the path.
 Property locateProperty(RepInfo info)
          Walk down the path and return the specified Property.
 Property locateProperty(RepInfo info, boolean trace)
          Walk down the path and return the specified Property.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

PropertyPath

public PropertyPath()
No-argument constructor. Creates an empty path.


PropertyPath

public PropertyPath(PropertyPath path)
Cloning constructor. This creates a new pathInfo list, whose elements are shared with the original PropertyPath's list.


PropertyPath

public PropertyPath(java.lang.String[] pathArray)
String array constructor. This allows creation of a path in a common and simple case: a hierarchy of named subproperties. It's the equivalent of creating an empty PropertyPath and then calling addElement successively with each of the strings in the array.

Method Detail

addPropertyName

public void addPropertyName(java.lang.String str)
Adds a property name to the path.


addPropertyKey

public void addPropertyKey(java.lang.Object obj)
Adds a key to the path, for a property map.


addPropertyIndex

public void addPropertyIndex(int idx)
Adds an index to the path, for an indexed property.


locateProperty

public Property locateProperty(RepInfo info)
Walk down the path and return the specified Property.

Parameters:
info - The RepInfo object to search
Returns:
The specified Property if found, otherwise null.

locateProperty

public Property locateProperty(RepInfo info,
                               boolean trace)
Walk down the path and return the specified Property.

Parameters:
info - The RepInfo object to search
trace - If true, write debugging information to standard output.
Returns:
The specified Property if found, otherwise null.


jhove/doc/edu/harvard/hul/ois/jhove/PropertyType.html0000644000707400001440000005657211510702352022114 0ustar garyusers PropertyType (JHOVE Documentation)

edu.harvard.hul.ois.jhove
Class PropertyType

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.EnumerationType
      extended by edu.harvard.hul.ois.jhove.PropertyType

public final class PropertyType
extends EnumerationType

This class defines enumerated types for an Property of some given content. Applications will not create or modify PropertyTypes, but will use one of the predefined PropertyType instances BOOLEAN, BYTE, CHARACTER, DATE, DOUBLE, FLOAT, INTEGER, LONG, OBJECT, PROPERTY, SHORT, STRING, RATIONAL, or NISOIMAGEMETADATA.

See Also:
Property

Field Summary
static PropertyType AESAUDIOMETADATA
          Property type for an AESAudioMetadata.
static PropertyType BOOLEAN
          Property type for a Boolean object, or a boolean if the Arity is Array.
static PropertyType BYTE
          Property type for a Byte object, or a byte if the Arity is Array.
static PropertyType CHARACTER
          Property type for a Character object, or a char if the Arity is Array.
static PropertyType DATE
          Property type for a Date object.
static PropertyType DOUBLE
          Property type for a Double object, or a double if the Arity is Array.
static PropertyType FLOAT
          Property type for a Float object, or a float if the Arity is Array.
static PropertyType INTEGER
          Property type for an Integer object, or an integer if the Arity is Array.
static PropertyType LONG
          Property type for a Long object, or a long if the Arity is Array.
static PropertyType NISOIMAGEMETADATA
          Property type for a NisoImageMetadata.
static PropertyType OBJECT
          Property type for an Object.
static PropertyType PROPERTY
          Property type for a Property object.
static PropertyType RATIONAL
          Property type for a Rational object.
static PropertyType SHORT
          Property type for a Short object, or a short if the Arity is Array.
static PropertyType STRING
          Property type for a String object.
static PropertyType TEXTMDMETADATA
          Property type for a TextMDMetadata.
 
Method Summary
 
Methods inherited from class edu.harvard.hul.ois.jhove.EnumerationType
equals, toString
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

BOOLEAN

public static final PropertyType BOOLEAN
Property type for a Boolean object, or a boolean if the Arity is Array.


BYTE

public static final PropertyType BYTE
Property type for a Byte object, or a byte if the Arity is Array.


CHARACTER

public static final PropertyType CHARACTER
Property type for a Character object, or a char if the Arity is Array.


DATE

public static final PropertyType DATE
Property type for a Date object.


DOUBLE

public static final PropertyType DOUBLE
Property type for a Double object, or a double if the Arity is Array.


FLOAT

public static final PropertyType FLOAT
Property type for a Float object, or a float if the Arity is Array.


INTEGER

public static final PropertyType INTEGER
Property type for an Integer object, or an integer if the Arity is Array.


LONG

public static final PropertyType LONG
Property type for a Long object, or a long if the Arity is Array.


OBJECT

public static final PropertyType OBJECT
Property type for an Object.


AESAUDIOMETADATA

public static final PropertyType AESAUDIOMETADATA
Property type for an AESAudioMetadata.


NISOIMAGEMETADATA

public static final PropertyType NISOIMAGEMETADATA
Property type for a NisoImageMetadata.


TEXTMDMETADATA

public static final PropertyType TEXTMDMETADATA
Property type for a TextMDMetadata.


PROPERTY

public static final PropertyType PROPERTY
Property type for a Property object.


SHORT

public static final PropertyType SHORT
Property type for a Short object, or a short if the Arity is Array.


STRING

public static final PropertyType STRING
Property type for a String object.


RATIONAL

public static final PropertyType RATIONAL
Property type for a Rational object.



jhove/doc/edu/harvard/hul/ois/jhove/RAFInputStream.html0000644000707400001440000004146011510702352022220 0ustar garyusers RAFInputStream (JHOVE Documentation)

edu.harvard.hul.ois.jhove
Class RAFInputStream

java.lang.Object
  extended by java.io.InputStream
      extended by edu.harvard.hul.ois.jhove.RAFInputStream
All Implemented Interfaces:
java.io.Closeable

public class RAFInputStream
extends java.io.InputStream

An InputStream layered on top of a RandomAccessFile. This is useful for a Module which has requirements that force it to use a RandomAccessFile, but is usually accessed sequentially. An RAFInputStream maintains its own position information in the file, so multiple RAFInputStreams in the same file will work without interference. However, this class is not thread-safe.

Author:
Gary McGath

Constructor Summary
RAFInputStream(java.io.RandomAccessFile raf)
          Constructor with default buffer size.
RAFInputStream(java.io.RandomAccessFile raf, int bufferSize)
          Constructor with buffer size.
 
Method Summary
 long getFilePos()
          Returns the current position in the file.
 java.io.RandomAccessFile getRAF()
          Returns the RandomAccessFile object.
 int read()
          Reads a single byte from the file.
 int read(byte[] b)
          Reads some number of bytes from the input stream and stores them into the buffer array b.
 int read(byte[] b, int off, int len)
          Reads up to len bytes of data from the input stream into an array of bytes.
 void seek(long offset)
          Positions the stream to a different point in the file.
 long skip(long n)
          Skips some number of bytes.
 
Methods inherited from class java.io.InputStream
available, close, mark, markSupported, reset
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

RAFInputStream

public RAFInputStream(java.io.RandomAccessFile raf)
Constructor with default buffer size. The stream starts at the current position of the RandomAccessFile.

Parameters:
raf - The file on which the stream is to be based.

RAFInputStream

public RAFInputStream(java.io.RandomAccessFile raf,
                      int bufferSize)
Constructor with buffer size. The stream starts at the current position of the RandomAccessFile.

Parameters:
raf - The file on which the stream is to be based.
bufferSize - The buffer size to be used. If less than or equal to 0, the default buffer size is used.
Method Detail

read

public int read()
         throws java.io.IOException
Reads a single byte from the file.

Specified by:
read in class java.io.InputStream
Throws:
java.io.IOException

read

public int read(byte[] b)
         throws java.io.IOException
Reads some number of bytes from the input stream and stores them into the buffer array b. The number of bytes actually read is returned as an integer.

Overrides:
read in class java.io.InputStream
Throws:
java.io.IOException

read

public int read(byte[] b,
                int off,
                int len)
         throws java.io.IOException
Reads up to len bytes of data from the input stream into an array of bytes. An attempt is made to read as many as len bytes, but a smaller number may be read, possibly zero. The number of bytes actually read is returned as an integer.

Overrides:
read in class java.io.InputStream
Throws:
java.io.IOException

skip

public long skip(long n)
          throws java.io.IOException
Skips some number of bytes.

Overrides:
skip in class java.io.InputStream
Returns:
The number of bytes actually skipped.
Throws:
java.io.IOException

getRAF

public java.io.RandomAccessFile getRAF()
Returns the RandomAccessFile object.


seek

public void seek(long offset)
          throws java.io.IOException
Positions the stream to a different point in the file. This invalidates the buffer.

Throws:
java.io.IOException

getFilePos

public long getFilePos()
                throws java.io.IOException
Returns the current position in the file. What is reported is the position of the byte in the file which was last extracted from the buffer.

Throws:
java.io.IOException


jhove/doc/edu/harvard/hul/ois/jhove/RFC1766Lang.html0000644000707400001440000002475111510702352021160 0ustar garyusers RFC1766Lang (JHOVE Documentation)

edu.harvard.hul.ois.jhove
Class RFC1766Lang

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.RFC1766Lang

public final class RFC1766Lang
extends java.lang.Object

Class encapsulating RFC-1766 language codes.


Constructor Summary
RFC1766Lang(java.lang.String str)
          Constructor.
 
Method Summary
 java.lang.String getLangCode()
          Returns the language code string.
 boolean isSyntaxCorrect()
          Returns true if the language code string is syntactically compliant.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

RFC1766Lang

public RFC1766Lang(java.lang.String str)
Constructor.

Parameters:
str - The ASCII string for the language code.
Method Detail

getLangCode

public java.lang.String getLangCode()
Returns the language code string.


isSyntaxCorrect

public boolean isSyntaxCorrect()
Returns true if the language code string is syntactically compliant. The primary tag must be either a two-letter code, the letter i, or the letter x (case insensitive); no checking is done against registry lists.



jhove/doc/edu/harvard/hul/ois/jhove/Rational.html0000644000707400001440000003245211510702352021166 0ustar garyusers Rational (JHOVE Documentation)

edu.harvard.hul.ois.jhove
Class Rational

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.Rational

public class Rational
extends java.lang.Object

This class encapsulates a number which is defined as the ratio of two 32-bit unsigned integers, in accordance with the TIFF specification.


Constructor Summary
Rational(int numerator, int denominator)
          The arguments to the int constructor are treated as 32-bit unsigned integers.
Rational(long numerator, long denominator)
          The arguments to this constructor are long in order to represent all possible 32-bit unsigned integers.
 
Method Summary
 long getDenominator()
          Returns the Denominator property.
 long getNumerator()
          Returns the Numerator property.
 double toDouble()
          Converts to a floating-point value (numerator/denominator).
 long toLong()
          Converts to a long value (numerator/denominator).
 java.lang.String toString()
          Represents the Rational as a String in the form of "numerator/denominator".
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

Rational

public Rational(long numerator,
                long denominator)
The arguments to this constructor are long in order to represent all possible 32-bit unsigned integers. Parameters greater than 2 ^ 32 - 1 are not meaningful.

Parameters:
numerator - numerator of the Rational value
denominator - denominator of the Rational value

Rational

public Rational(int numerator,
                int denominator)
The arguments to the int constructor are treated as 32-bit unsigned integers.

Parameters:
numerator - numerator of the Rational value
denominator - denominator of the Rational value
Method Detail

getNumerator

public long getNumerator()
Returns the Numerator property.


getDenominator

public long getDenominator()
Returns the Denominator property.


toDouble

public double toDouble()
Converts to a floating-point value (numerator/denominator). May throw an ArithmeticException.


toLong

public long toLong()
Converts to a long value (numerator/denominator). May throw an ArithmeticException.


toString

public java.lang.String toString()
Represents the Rational as a String in the form of "numerator/denominator".

Overrides:
toString in class java.lang.Object


jhove/doc/edu/harvard/hul/ois/jhove/RepInfo.html0000644000707400001440000012772611510702352020770 0ustar garyusers RepInfo (JHOVE Documentation)

edu.harvard.hul.ois.jhove
Class RepInfo

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.RepInfo
All Implemented Interfaces:
java.lang.Cloneable

public class RepInfo
extends java.lang.Object
implements java.lang.Cloneable

This class encapsulates representation information, as defined by ISO/IEC 14721, about a content stream.

See Also:
ISO/IEC 14721 (PDF)

Field Summary
static int FALSE
          Values for _valid
static int TRUE
          Values for _valid
static int UNDETERMINED
          Values for _valid
 
Constructor Summary
RepInfo(java.lang.String uri)
          Creates a RepInfo with a URI reference
RepInfo(java.lang.String uri, RepInfo external)
          Creates a RepInfo with a URI reference and an external RepInfo.
 
Method Summary
 java.lang.Object clone()
          Clones the RepInfo one level deep, making fresh copies of the checksum, message, profile, signature match, and property fields.
 void copy(RepInfo info)
          Copies all the information out of the parameter object.
 Property getByName(java.lang.String name)
          Return property by name, regardless of its position in the property hierarchy.
 java.util.List getChecksum()
          Returns this object's list of Checksums
 java.util.Date getCreated()
          Returns the creation date stored in this object.
 java.lang.String getFormat()
          Return the format identifier
 java.util.Date getLastModified()
          Returns the last modified date stored in this object.
 java.util.List getMessage()
          Returns the message list stored in this object
 java.lang.String getMimeType()
          Returns the MIME type string stored in this object
 Module getModule()
          Return the module.
 java.lang.String getNote()
          Returns the note property stored in this object
 java.util.List getProfile()
          Returns the list of profiles (Strings) stored in this object
 java.util.Map getProperty()
          Returns the Property map stored in this object.
 Property getProperty(java.lang.String name)
          Returns a named Property from the Property map
 java.util.List getSigMatch()
          Returns the list of matching signatures.
 long getSize()
          Returns the size property stored in this object.
 java.lang.String getUri()
          Returns the URI property stored in this object.
 boolean getURLFlag()
          Returns a flag which, if true, indicates the object is a URL.
 int getValid()
          Returns the value of the validity flag.
 java.lang.String getVersion()
          Returns the version property stored in this object
 int getWellFormed()
          Returns the value of the well-formed flag.
 boolean isConsistent()
          Returns the value of the consistency flag.
 void setChecksum(Checksum checksum)
          Append a Checksum object to the checksum list.
 void setConsistent(boolean consistent)
          Set the value of the consistency flag
 void setCreated(java.util.Date created)
          Set the creation date
 void setFormat(java.lang.String format)
          Set the format identifier
 void setLastModified(java.util.Date lastModified)
          Set the last modified date
 void setMessage(Message message)
          Append a Message object to the message list
 void setMimeType(java.lang.String mimeType)
          Set the MIME type string
 void setModule(Module module)
          Add the module.
 void setNote(java.lang.String note)
          Set the note string
 void setProfile(java.lang.String profile)
          Append a profile String to the profile list
 void setProperty(Property property)
          Add a Property to the property map.
 void setSigMatch(java.util.List modnames)
          Adds a list of module names, signifying that the document signature matched the module's requirements.
 void setSigMatch(java.lang.String modname)
          Adds the name of a module, signifying that the document signature matched the module's requirements.
 void setSize(long size)
          Set the size property
 void setURLFlag(boolean flag)
          Set the flag to indicate whether this is a URL (true) or a file (false)
 void setValid(boolean valid)
          Set the validity flag
 void setValid(int valid)
          Set the validity flag
 void setVersion(java.lang.String version)
          Set the version string
 void setWellFormed(boolean wellFormed)
          Set the well-formed flag
 void setWellFormed(int wellFormed)
          Set the wellFormed flag.
 void show(OutputHandler handler)
          Output the information in this object.
 
Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

TRUE

public static final int TRUE
Values for _valid

See Also:
Constant Field Values

FALSE

public static final int FALSE
Values for _valid

See Also:
Constant Field Values

UNDETERMINED

public static final int UNDETERMINED
Values for _valid

See Also:
Constant Field Values
Constructor Detail

RepInfo

public RepInfo(java.lang.String uri)
Creates a RepInfo with a URI reference

Parameters:
uri - Object file pathname or URI

RepInfo

public RepInfo(java.lang.String uri,
               RepInfo external)
Creates a RepInfo with a URI reference and an external RepInfo. By default, urlFlag is false.

Parameters:
uri - Object file pathname or URI
external - External representation information
Method Detail

clone

public java.lang.Object clone()
Clones the RepInfo one level deep, making fresh copies of the checksum, message, profile, signature match, and property fields. The external RepInfo (if any) is not cloned, but is attached directly to the clone.

Overrides:
clone in class java.lang.Object

copy

public void copy(RepInfo info)
Copies all the information out of the parameter object. This is a "shallow" copy; it is assumed that the parameter object is a temporary one that will not be further modified.


getChecksum

public java.util.List getChecksum()
Returns this object's list of Checksums


getCreated

public java.util.Date getCreated()
Returns the creation date stored in this object. A creation date is not automatically generated, but must be explicitly stored.


getFormat

public java.lang.String getFormat()
Return the format identifier


getLastModified

public java.util.Date getLastModified()
Returns the last modified date stored in this object. A date is not automatically generated, but must be explicitly stored.


getMessage

public java.util.List getMessage()
Returns the message list stored in this object


getMimeType

public java.lang.String getMimeType()
Returns the MIME type string stored in this object


getModule

public Module getModule()
Return the module.


getProfile

public java.util.List getProfile()
Returns the list of profiles (Strings) stored in this object


getProperty

public java.util.Map getProperty()
Returns the Property map stored in this object. The Property map contains key-value pairs whose key is a String and whose value is a Property.


getProperty

public Property getProperty(java.lang.String name)
Returns a named Property from the Property map

Parameters:
name - The name of the Property.

getSize

public long getSize()
Returns the size property stored in this object.


getUri

public java.lang.String getUri()
Returns the URI property stored in this object.


getURLFlag

public boolean getURLFlag()
Returns a flag which, if true, indicates the object is a URL.


isConsistent

public boolean isConsistent()
Returns the value of the consistency flag.


getWellFormed

public int getWellFormed()
Returns the value of the well-formed flag. Can return TRUE, FALSE, or UNDETERMINED.


getValid

public int getValid()
Returns the value of the validity flag. Can return TRUE, FALSE, or UNDETERMINED.


getVersion

public java.lang.String getVersion()
Returns the version property stored in this object


getNote

public java.lang.String getNote()
Returns the note property stored in this object


getSigMatch

public java.util.List getSigMatch()
Returns the list of matching signatures. JhoveBase will make this value persistent across module invocations for a given document, so the list returned will reflect all modules that have looked at the document so far.


getByName

public Property getByName(java.lang.String name)
Return property by name, regardless of its position in the property hierarchy.

Parameters:
name - Property name
Returns:
Named property (or null)

setChecksum

public void setChecksum(Checksum checksum)
Append a Checksum object to the checksum list.


setConsistent

public void setConsistent(boolean consistent)
Set the value of the consistency flag


setCreated

public void setCreated(java.util.Date created)
Set the creation date


setFormat

public void setFormat(java.lang.String format)
Set the format identifier


setLastModified

public void setLastModified(java.util.Date lastModified)
Set the last modified date


setMessage

public void setMessage(Message message)
Append a Message object to the message list


setMimeType

public void setMimeType(java.lang.String mimeType)
Set the MIME type string


setModule

public void setModule(Module module)
Add the module.


setProfile

public void setProfile(java.lang.String profile)
Append a profile String to the profile list


setProperty

public void setProperty(Property property)
Add a Property to the property map. The name of the Property becomes its key in the map.


setSize

public void setSize(long size)
Set the size property


setURLFlag

public void setURLFlag(boolean flag)
Set the flag to indicate whether this is a URL (true) or a file (false)


setWellFormed

public void setWellFormed(boolean wellFormed)
Set the well-formed flag

Parameters:
wellFormed - Boolean argument that maps to an integer value: true maps to TRUE, and false to FALSE.

setWellFormed

public void setWellFormed(int wellFormed)
Set the wellFormed flag. Setting wellFormed to false forces the consistent and valid flags to be false as well.


setValid

public void setValid(boolean valid)
Set the validity flag

Parameters:
valid - Boolean argument that maps to an integer value: true maps to TRUE, and false to FALSE.

setValid

public void setValid(int valid)
Set the validity flag

Parameters:
valid - Permitted values are TRUE, FALSE, AND UNDETERMINED. The effect of using other values is undefined.

setVersion

public void setVersion(java.lang.String version)
Set the version string


setNote

public void setNote(java.lang.String note)
Set the note string


setSigMatch

public void setSigMatch(java.lang.String modname)
Adds the name of a module, signifying that the document signature matched the module's requirements. JhoveBase will make this value persistent across module invocations for a given document.


setSigMatch

public void setSigMatch(java.util.List modnames)
Adds a list of module names, signifying that the document signature matched the module's requirements. Any previous list is lost. JhoveBase will make this value persistent across module invocations for a given document.


show

public void show(OutputHandler handler)
Output the information in this object. The format and destination of the output are determined by the OutputHandler.



jhove/doc/edu/harvard/hul/ois/jhove/Signature.html0000644000707400001440000005130311510702352021352 0ustar garyusers Signature (JHOVE Documentation)

edu.harvard.hul.ois.jhove
Class Signature

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.Signature
Direct Known Subclasses:
ExternalSignature, InternalSignature

public abstract class Signature
extends java.lang.Object

This class encapsulates information about format signatures, both internal and external. The value of a Signature may be either a String or a byte array (stored as an int array to avoid signed byte problems).


Constructor Summary
protected Signature(int[] value, SignatureType type, SignatureUseType use)
          A Signature cannot be created directly; this constructor can be called as the superclass constructor from a subclass.
protected Signature(int[] value, SignatureType type, SignatureUseType use, java.lang.String note)
          A Signature cannot be created directly; this constructor can be called as the superclass constructor from a subclass.
protected Signature(java.lang.String value, SignatureType type, SignatureUseType use)
          A Signature cannot be created directly; this constructor can be called as the superclass constructor from a subclass.
protected Signature(java.lang.String value, SignatureType type, SignatureUseType use, java.lang.String note)
          A Signature cannot be created directly; this constructor can be called as the superclass constructor from a subclass.
 
Method Summary
 java.lang.String getNote()
          Returns the note specified for this Signature, or null if no note was specified.
 SignatureType getType()
          Returns the type of this Signature
 SignatureUseType getUse()
          Returns the use requirement for this Signature
 int[] getValue()
          Returns the byte array value for this Signature.
 java.lang.String getValueHexString()
          Returns the value of this Signature as a hexadecimal string.
 java.lang.String getValueString()
          Returns the string value of this Signature.
 boolean isStringValue()
          Returns true if this Signature's value was provided as a String, false if as an array.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

Signature

protected Signature(java.lang.String value,
                    SignatureType type,
                    SignatureUseType use)
A Signature cannot be created directly; this constructor can be called as the superclass constructor from a subclass. This constructor uses a String value.


Signature

protected Signature(int[] value,
                    SignatureType type,
                    SignatureUseType use)
A Signature cannot be created directly; this constructor can be called as the superclass constructor from a subclass. This constructor uses a byte array (stored as an int array) value.


Signature

protected Signature(java.lang.String value,
                    SignatureType type,
                    SignatureUseType use,
                    java.lang.String note)
A Signature cannot be created directly; this constructor can be called as the superclass constructor from a subclass. This constructor uses a String value and allows specification of a note.


Signature

protected Signature(int[] value,
                    SignatureType type,
                    SignatureUseType use,
                    java.lang.String note)
A Signature cannot be created directly; this constructor can be called as the superclass constructor from a subclass. This constructor uses a byte array (stored as an int array) value and allows specification of a note.

Method Detail

getType

public SignatureType getType()
Returns the type of this Signature


getUse

public SignatureUseType getUse()
Returns the use requirement for this Signature


getValue

public int[] getValue()
Returns the byte array value for this Signature. If this Signature was constructed from a String, it returns the characters of the String as the bytes of the array.


getNote

public java.lang.String getNote()
Returns the note specified for this Signature, or null if no note was specified.


isStringValue

public boolean isStringValue()
Returns true if this Signature's value was provided as a String, false if as an array.


getValueString

public java.lang.String getValueString()
Returns the string value of this Signature. Returns null if this Signature was constructed with an array.


getValueHexString

public java.lang.String getValueHexString()
Returns the value of this Signature as a hexadecimal string. The length of the string is twice the length of the array or string from which this Signature was created, and all alphabetic characters are lower case.



jhove/doc/edu/harvard/hul/ois/jhove/SignatureType.html0000644000707400001440000003051011510702352022211 0ustar garyusers SignatureType (JHOVE Documentation)

edu.harvard.hul.ois.jhove
Class SignatureType

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.EnumerationType
      extended by edu.harvard.hul.ois.jhove.SignatureType

public final class SignatureType
extends EnumerationType

This class defines enumerated types for a Signature in a module. Applications will not create or modify SignatureTypes, but will use one of the predefined SignatureType instances EXTENSION, FILETYPE, or MAGIC.

See Also:
Signature

Field Summary
static SignatureType EXTENSION
          Signature type for a file extension, i.e., a sequence of characters following a period character in a file name.
static SignatureType FILETYPE
          Signature type for a Macintosh OS file type.
static SignatureType MAGIC
          Signature type for a "magic number" stored in the file.
 
Method Summary
 
Methods inherited from class edu.harvard.hul.ois.jhove.EnumerationType
equals, toString
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

EXTENSION

public static final SignatureType EXTENSION
Signature type for a file extension, i.e., a sequence of characters following a period character in a file name.


FILETYPE

public static final SignatureType FILETYPE
Signature type for a Macintosh OS file type. This applies only to Mac OS files, and is always a four-character code.


MAGIC

public static final SignatureType MAGIC
Signature type for a "magic number" stored in the file.



jhove/doc/edu/harvard/hul/ois/jhove/SignatureUseType.html0000644000707400001440000003052011510702352022667 0ustar garyusers SignatureUseType (JHOVE Documentation)

edu.harvard.hul.ois.jhove
Class SignatureUseType

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.EnumerationType
      extended by edu.harvard.hul.ois.jhove.SignatureUseType

public final class SignatureUseType
extends EnumerationType

This class defines enumerated use types for a Signature in a module. These give information on whether a signature is required in valid content. Applications will not create or modify SignatureUseTypes, but will use one of the predefined SignatureUseType instances MANDATORY, MANDATORY_IF_APPLICABLE, or OPTIONAL.

See Also:
Signature

Field Summary
static SignatureUseType MANDATORY
          Use type for a required signature.
static SignatureUseType MANDATORY_IF_APPLICABLE
          Use type for a conditionally required signature.
static SignatureUseType OPTIONAL
          Use type for an optional signature.
 
Method Summary
 
Methods inherited from class edu.harvard.hul.ois.jhove.EnumerationType
equals, toString
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

MANDATORY

public static final SignatureUseType MANDATORY
Use type for a required signature.


MANDATORY_IF_APPLICABLE

public static final SignatureUseType MANDATORY_IF_APPLICABLE
Use type for a conditionally required signature.


OPTIONAL

public static final SignatureUseType OPTIONAL
Use type for an optional signature.



jhove/doc/edu/harvard/hul/ois/jhove/Utf8BlockMarker.html0000644000707400001440000002601411510702352022355 0ustar garyusers Utf8BlockMarker (JHOVE Documentation)

edu.harvard.hul.ois.jhove
Class Utf8BlockMarker

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.Utf8BlockMarker

public class Utf8BlockMarker
extends java.lang.Object

Author:
Gary McGath

Constructor Summary
Utf8BlockMarker()
           
 
Method Summary
 Property getBlocksUsedProperty(java.lang.String name)
          Returns a Property listing the blocks that have been marked as used.
 void markBlock(int code)
           
 void reset()
          Clears all marked blocks.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

Utf8BlockMarker

public Utf8BlockMarker()
Method Detail

markBlock

public void markBlock(int code)

getBlocksUsedProperty

public Property getBlocksUsedProperty(java.lang.String name)
Returns a Property listing the blocks that have been marked as used. If no blocks have been marked, returns null.


reset

public void reset()
Clears all marked blocks.



jhove/doc/edu/harvard/hul/ois/jhove/XMLWrapperStream.html0000644000707400001440000003263011510702352022570 0ustar garyusers XMLWrapperStream (JHOVE Documentation)

edu.harvard.hul.ois.jhove
Class XMLWrapperStream

java.lang.Object
  extended by java.io.InputStream
      extended by edu.harvard.hul.ois.jhove.XMLWrapperStream
All Implemented Interfaces:
java.io.Closeable

public class XMLWrapperStream
extends java.io.InputStream

This class serves to provide an InputStream for an XML fragment (e.g., embedded XMP metadata).

Author:
Gary McGath

Constructor Summary
XMLWrapperStream(java.io.InputStream wrappedStream)
          Constructor.
XMLWrapperStream(java.io.InputStream wrappedStream, java.lang.String rootName)
          Constructor.
XMLWrapperStream(java.io.InputStream wrappedStream, java.lang.String rootName, java.lang.String version, java.lang.String encoding, java.lang.String standalone)
          Constructor.
 
Method Summary
 int read()
          Get a byte.
 
Methods inherited from class java.io.InputStream
available, close, mark, markSupported, read, read, reset, skip
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

XMLWrapperStream

public XMLWrapperStream(java.io.InputStream wrappedStream,
                        java.lang.String rootName,
                        java.lang.String version,
                        java.lang.String encoding,
                        java.lang.String standalone)
Constructor.

Parameters:
wrappedStream - The stream which this stream will subsume.
rootName - The name of the root element. May be null if wrappedStream already contains a root element.
version - The XML version. Should be null or "1.0" unless there's a really good reason.
encoding - The name of the character encoding. May be null.
standalone - The value of the standalone attribute. May be null.

XMLWrapperStream

public XMLWrapperStream(java.io.InputStream wrappedStream)
Constructor. Equivalent to XMLWrapperStream (wrappedStream, null, null, null, null)

Parameters:
wrappedStream - The stream which this stream will subsume.

XMLWrapperStream

public XMLWrapperStream(java.io.InputStream wrappedStream,
                        java.lang.String rootName)
Constructor. Equivalent to XMLWrapperStream (wrappedStream, rootName, null, null, null)

Parameters:
wrappedStream - The stream which this stream will subsume.
rootName - The name of the root element. May be null.
Method Detail

read

public int read()
         throws java.io.IOException
Get a byte. Successive calls will return the XML declaration, then the wrapped stream.

Specified by:
read in class java.io.InputStream
Throws:
java.io.IOException
See Also:
InputStream.read()


jhove/doc/edu/harvard/hul/ois/jhove/XMPHandler.html0000644000707400001440000004011311510702352021350 0ustar garyusers XMPHandler (JHOVE Documentation)

edu.harvard.hul.ois.jhove
Class XMPHandler

java.lang.Object
  extended by org.xml.sax.helpers.DefaultHandler
      extended by edu.harvard.hul.ois.jhove.XMPHandler
All Implemented Interfaces:
org.xml.sax.ContentHandler, org.xml.sax.DTDHandler, org.xml.sax.EntityResolver, org.xml.sax.ErrorHandler

public class XMPHandler
extends org.xml.sax.helpers.DefaultHandler

This class encapsulates XMP metadata within a file. It makes use of an InputStream as a data source. This differs from normal XML handling in that it's necessary to process the xpacket processing instruction in order to determine the encoding of the XML. the processingInstruction function looks for xpacket, and throws a special SAXException if it's necessary to change encoding. We don't actually extract any information from the XMP, but simply check it for well-formedness. By convention, XMPHandler should be invoked on an XMPSource (TBW), which provides the ability to recapture the InputStream from which the XMP was obtained and put it into a property once it's verified here.


Constructor Summary
XMPHandler()
           
 
Method Summary
 void endElement(java.lang.String namespaceURI, java.lang.String localName, java.lang.String rawName)
          Catches the end of an element.
 void fatalError(org.xml.sax.SAXParseException exception)
          Catch a fatal error.
 boolean isPdfaCompliant()
          Returns true if no violations of PDF/A compliance have been found, false if a problem was detected.
 void processingInstruction(java.lang.String target, java.lang.String data)
           
 void startElement(java.lang.String namespaceURI, java.lang.String localName, java.lang.String rawName, org.xml.sax.Attributes atts)
          Catches the start of an element and, if it's one we care about, sets state information.
 
Methods inherited from class org.xml.sax.helpers.DefaultHandler
characters, endDocument, endPrefixMapping, error, ignorableWhitespace, notationDecl, resolveEntity, setDocumentLocator, skippedEntity, startDocument, startPrefixMapping, unparsedEntityDecl, warning
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

XMPHandler

public XMPHandler()
Method Detail

isPdfaCompliant

public boolean isPdfaCompliant()
Returns true if no violations of PDF/A compliance have been found, false if a problem was detected.


processingInstruction

public void processingInstruction(java.lang.String target,
                                  java.lang.String data)
                           throws org.xml.sax.SAXException
Specified by:
processingInstruction in interface org.xml.sax.ContentHandler
Overrides:
processingInstruction in class org.xml.sax.helpers.DefaultHandler
Throws:
org.xml.sax.SAXException

startElement

public void startElement(java.lang.String namespaceURI,
                         java.lang.String localName,
                         java.lang.String rawName,
                         org.xml.sax.Attributes atts)
                  throws org.xml.sax.SAXException
Catches the start of an element and, if it's one we care about, sets state information.

Specified by:
startElement in interface org.xml.sax.ContentHandler
Overrides:
startElement in class org.xml.sax.helpers.DefaultHandler
Throws:
org.xml.sax.SAXException

endElement

public void endElement(java.lang.String namespaceURI,
                       java.lang.String localName,
                       java.lang.String rawName)
                throws org.xml.sax.SAXException
Catches the end of an element.

Specified by:
endElement in interface org.xml.sax.ContentHandler
Overrides:
endElement in class org.xml.sax.helpers.DefaultHandler
Throws:
org.xml.sax.SAXException

fatalError

public void fatalError(org.xml.sax.SAXParseException exception)
                throws org.xml.sax.SAXException
Catch a fatal error. This is put here because the default behavior is to report a "fatal error" to standard output, which is harmless but scary.

Specified by:
fatalError in interface org.xml.sax.ErrorHandler
Overrides:
fatalError in class org.xml.sax.helpers.DefaultHandler
Throws:
org.xml.sax.SAXException


jhove/doc/edu/harvard/hul/ois/jhove/XMPSource.html0000644000707400001440000003163511510702352021244 0ustar garyusers XMPSource (JHOVE Documentation)

edu.harvard.hul.ois.jhove
Class XMPSource

java.lang.Object
  extended by org.xml.sax.InputSource
      extended by edu.harvard.hul.ois.jhove.XMPSource
Direct Known Subclasses:
ByteArrayXMPSource, PdfXMPSource

public abstract class XMPSource
extends org.xml.sax.InputSource

Class for providing an InputSource to XMPHandler. Only an InputSource based on a Reader is supported. Each module can provide its own subclass of XMPSource. The subclass must provide a way to reset to the beginning and reread the data when makeProperty is called.

Author:
Gary McGath

Field Summary
protected  java.io.Reader _reader
          The Reader on which the InputSource is based.
 
Constructor Summary
XMPSource(java.io.Reader rdr)
          Constructor with Reader.
 
Method Summary
 Property makeProperty()
          Generates a property from the underlying data.
protected abstract  void resetReader()
          Causes reading to begin from the start again.
 
Methods inherited from class org.xml.sax.InputSource
getByteStream, getCharacterStream, getEncoding, getPublicId, getSystemId, setByteStream, setCharacterStream, setEncoding, setPublicId, setSystemId
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

_reader

protected java.io.Reader _reader
The Reader on which the InputSource is based.

Constructor Detail

XMPSource

public XMPSource(java.io.Reader rdr)
Constructor with Reader.

Method Detail

makeProperty

public Property makeProperty()
                      throws java.io.IOException
Generates a property from the underlying data. The beginning and ending processing instructions are stripped out.

Throws:
java.io.IOException

resetReader

protected abstract void resetReader()
Causes reading to begin from the start again. Typically this means creating a new value for _reader that will start over.



jhove/doc/edu/harvard/hul/ois/jhove/package-frame.html0000644000707400001440000001650011510702365022100 0ustar garyusers edu.harvard.hul.ois.jhove (JHOVE Documentation) edu.harvard.hul.ois.jhove
Interfaces 
AESAudioMetadata.Face
AESAudioMetadata.FaceRegion
AESAudioMetadata.FormatRegion
AESAudioMetadata.TimeDesc
Callback
Module
OutputHandler
Classes 
AESAudioMetadata
Agent
AgentType
AnalogDigitalFlagType
App
ByteArrayXMPSource
Checksum
ChecksumInputStream
Checksummer
ChecksumType
ConfigHandler
CountedInputStream
Document
DocumentType
Dump
EnumerationType
ErrorMessage
ExternalSignature
HandlerBase
HandlerBase.SynchronizedDateFormat
Identifier
IdentifierType
InfoMessage
InternalSignature
JhoveBase
MacStuff
Message
ModuleBase
NisoImageMetadata
ObjectIdentifier
Property
PropertyArity
PropertyPath
PropertyType
RAFInputStream
Rational
RepInfo
RFC1766Lang
Signature
SignatureType
SignatureUseType
TextMDMetadata
Utf8BlockMarker
XMLWrapperStream
XMPHandler
XMPSource
Exceptions 
JhoveException
jhove/doc/edu/harvard/hul/ois/jhove/package-summary.html0000644000707400001440000005402111510702365022503 0ustar garyusers edu.harvard.hul.ois.jhove (JHOVE Documentation)

Package edu.harvard.hul.ois.jhove

Contains the classes needed for building a JHOVE application.

See:
          Description

Interface Summary
AESAudioMetadata.Face Public interface to the nested Face object.
AESAudioMetadata.FaceRegion Public interface to the nested FaceRegion object.
AESAudioMetadata.FormatRegion Public interface to the nested FormatRegion object.
AESAudioMetadata.TimeDesc Public interface to the nested TimeDesc object.
Callback An interface for supporting a general, simple callback function.
Module Public interface for Jhove format-specific plug-in modules.
OutputHandler Public interface for Jhove output handlers.
 

Class Summary
AESAudioMetadata Encapsulation of the AES Metadata for Audio documents
Agent Encapsulates information about agents, either individual persons or corporate bodies.
AgentType This class defines enumerated types for an Agent.
AnalogDigitalFlagType This class defines enumerated types for the analog/digital flag of AESAudioMetadata.
App The application class for JHOVE.
ByteArrayXMPSource Class for providing an InputSource to XMPHandler, with a ByteArrayInputStream as the basis of the InputSource.
Checksum This class encapsulates the result of calculations which provide a greater or lesser degree of confirmation of the integrity of a digital object's content, including checksums, CRC's, message digests, etc.
ChecksumInputStream A ChecksumInputStream is a FilterInputStream with the added functionality of calculating checksums as it goes.
Checksummer The Checksummer class encapsulates the calculation of the CRC32, MD5, and SHA-1 checksums.
ChecksumType This class defines enumerated types for a Checksum on a content stream or file.
ConfigHandler SAX Parser for the configuration file.
CountedInputStream A FilterInputStream which passes only a specified number of bytes, then returns an EOF condition.
Document This class encapsulates information about format specification documents.
DocumentType This class defines enumerated types for a Document.
Dump Common methods for dump utilities.
EnumerationType Enumerated data type.
ErrorMessage This class encapsulates an error message from a Module, representing a problem in the content being analyzed.
ExternalSignature This class encapsulates information about external format signatures.
HandlerBase Abstract base class for Jhove output handlers.
HandlerBase.SynchronizedDateFormat A DateFormat class to address an issue of thread safety.
Identifier This class encapsulates information about an identifier for a specification document.
IdentifierType This class defines enumerated types for an Identifier of a format specification document.
InfoMessage This class encapsulates an informational message from a Module, giving information (not necessarily a problem) about the content being analyzed or the way that Jhove deals with it.
InternalSignature This class encapsulates information about internal format signatures.
JhoveBase The JHOVE engine, providing all base services necessary to build an application.
MacStuff Code specific to Macintosh Java.
Message This class encapsulates a String to be displayed.
ModuleBase This class is an abstract implementation of the Module interface.
NisoImageMetadata Encapsulation of the NISO Z39.87-2002 / AIIM 20-2002 Data Dictionary -- Technical Metadata for Digital Still Images
ObjectIdentifier Module for identification of a document.
Property This class encapsulates arbitrary format-specific properties.
PropertyArity This class represents the arity (structure type) of a Property.
PropertyPath A description of the location of a Property in a RepInfo object.
PropertyType This class defines enumerated types for an Property of some given content.
RAFInputStream An InputStream layered on top of a RandomAccessFile.
Rational This class encapsulates a number which is defined as the ratio of two 32-bit unsigned integers, in accordance with the TIFF specification.
RepInfo This class encapsulates representation information, as defined by ISO/IEC 14721, about a content stream.
RFC1766Lang Class encapsulating RFC-1766 language codes.
Signature This class encapsulates information about format signatures, both internal and external.
SignatureType This class defines enumerated types for a Signature in a module.
SignatureUseType This class defines enumerated use types for a Signature in a module.
TextMDMetadata Encapsulation of the textMD metadata for text files.
Utf8BlockMarker  
XMLWrapperStream This class serves to provide an InputStream for an XML fragment (e.g., embedded XMP metadata).
XMPHandler This class encapsulates XMP metadata within a file.
XMPSource Class for providing an InputSource to XMPHandler.
 

Exception Summary
JhoveException  
 

Package edu.harvard.hul.ois.jhove Description

Contains the classes needed for building a JHOVE application. This package must be used with a top-level class, with one or more output handlers or viewers, and with one or more modules for specific file formats.

Related Documentation

For overviews, tutorials, examples, guides, and tool documentation, please see:



jhove/doc/edu/harvard/hul/ois/jhove/package-tree.html0000644000707400001440000004050011510702366021743 0ustar garyusers edu.harvard.hul.ois.jhove Class Hierarchy (JHOVE Documentation)

Hierarchy For Package edu.harvard.hul.ois.jhove

Package Hierarchies:
All Packages

Class Hierarchy

Interface Hierarchy



jhove/doc/edu/harvard/hul/ois/jhove/module/0000755000707400001440000000000011510702011017776 5ustar garyusersjhove/doc/edu/harvard/hul/ois/jhove/module/aiff/0000755000707400001440000000000011510702002020703 5ustar garyusersjhove/doc/edu/harvard/hul/ois/jhove/module/aiff/AiffStrings.html0000644000707400001440000002163411510702353024027 0ustar garyusers AiffStrings (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.aiff
Class AiffStrings

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.aiff.AiffStrings

public class AiffStrings
extends java.lang.Object

A class for holding arrays of informative strings that will go into properties of an AIFF object.

Author:
Gary McGath

Field Summary
static java.lang.String[] LOOP_TYPE
          Strings for looping types in the Instrument Chunk
 
Method Summary
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

LOOP_TYPE

public static final java.lang.String[] LOOP_TYPE
Strings for looping types in the Instrument Chunk



jhove/doc/edu/harvard/hul/ois/jhove/module/aiff/AnnotationChunk.html0000644000707400001440000004036111510702353024711 0ustar garyusers AnnotationChunk (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.aiff
Class AnnotationChunk

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.iff.Chunk
      extended by edu.harvard.hul.ois.jhove.module.aiff.TextChunk
          extended by edu.harvard.hul.ois.jhove.module.aiff.AnnotationChunk

public class AnnotationChunk
extends TextChunk

Implementation of the AIFF Annotation Chunk.

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.aiff.TextChunk
propName
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.iff.Chunk
_dstream, _module, bytesLeft
 
Constructor Summary
AnnotationChunk(AiffModule module, ChunkHeader hdr, java.io.DataInputStream dstrm)
          Constructor.
 
Method Summary
 boolean readChunk(RepInfo info)
          Reads a chunk and adds an Annotation property to the module's list of annotations.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.aiff.TextChunk
readText
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.iff.Chunk
byteBufString
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

AnnotationChunk

public AnnotationChunk(AiffModule module,
                       ChunkHeader hdr,
                       java.io.DataInputStream dstrm)
Constructor.

Parameters:
module - The AIFFModule under which this was called
hdr - The header for this chunk
dstrm - The stream from which the AIFF data are being read
Method Detail

readChunk

public boolean readChunk(RepInfo info)
                  throws java.io.IOException
Reads a chunk and adds an Annotation property to the module's list of annotations. There can be multiple Annotation Chunks, so we don't create a property here directly.

Overrides:
readChunk in class TextChunk
Parameters:
info - RepInfo object to receive information
Returns:
false if the chunk is structurally invalid, otherwise true
Throws:
java.io.IOException


jhove/doc/edu/harvard/hul/ois/jhove/module/aiff/ApplicationChunk.html0000644000707400001440000003503711510702353025046 0ustar garyusers ApplicationChunk (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.aiff
Class ApplicationChunk

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.iff.Chunk
      extended by edu.harvard.hul.ois.jhove.module.aiff.ApplicationChunk

public class ApplicationChunk
extends Chunk

Implementation of the AIFF Application Chunk.

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.iff.Chunk
_dstream, _module, bytesLeft
 
Constructor Summary
ApplicationChunk(AiffModule module, ChunkHeader hdr, java.io.DataInputStream dstrm)
          Constructor.
 
Method Summary
 boolean readChunk(RepInfo info)
          Reads a chunk and puts an Application property into the RepInfo object.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.iff.Chunk
byteBufString
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ApplicationChunk

public ApplicationChunk(AiffModule module,
                        ChunkHeader hdr,
                        java.io.DataInputStream dstrm)
Constructor.

Parameters:
module - The AIFFModule under which this was called
hdr - The header for this chunk
dstrm - The stream from which the AIFF data are being read
Method Detail

readChunk

public boolean readChunk(RepInfo info)
                  throws java.io.IOException
Reads a chunk and puts an Application property into the RepInfo object.

Specified by:
readChunk in class Chunk
Parameters:
info - RepInfo object to receive information
Returns:
false if the chunk is structurally invalid, otherwise true
Throws:
java.io.IOException


jhove/doc/edu/harvard/hul/ois/jhove/module/aiff/AudioRecChunk.html0000644000707400001440000003536411510702353024301 0ustar garyusers AudioRecChunk (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.aiff
Class AudioRecChunk

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.iff.Chunk
      extended by edu.harvard.hul.ois.jhove.module.aiff.AudioRecChunk

public class AudioRecChunk
extends Chunk

Implementation of the AIFF Audio Recording Chunk. The data bytes are put into an uninterpreted byte array Property. These are specified in the AES Recommended Practice for Digital Audio Engineering - Serial Transmission Format for Linearly Represented Digital Audio Data, Section 7.1, Channel Status Data.

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.iff.Chunk
_dstream, _module, bytesLeft
 
Constructor Summary
AudioRecChunk(AiffModule module, ChunkHeader hdr, java.io.DataInputStream dstrm)
          Constructor.
 
Method Summary
 boolean readChunk(RepInfo info)
          Reads a chunk and puts an AudioRecording property into the RepInfo object.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.iff.Chunk
byteBufString
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

AudioRecChunk

public AudioRecChunk(AiffModule module,
                     ChunkHeader hdr,
                     java.io.DataInputStream dstrm)
Constructor.

Parameters:
module - The AIFFModule under which this was called
hdr - The header for this chunk
dstrm - The stream from which the AIFF data are being read
Method Detail

readChunk

public boolean readChunk(RepInfo info)
                  throws java.io.IOException
Reads a chunk and puts an AudioRecording property into the RepInfo object.

Specified by:
readChunk in class Chunk
Parameters:
info - RepInfo object to receive information
Returns:
false if the chunk is structurally invalid, otherwise true
Throws:
java.io.IOException


jhove/doc/edu/harvard/hul/ois/jhove/module/aiff/AuthorChunk.html0000644000707400001440000003451711510702353024047 0ustar garyusers AuthorChunk (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.aiff
Class AuthorChunk

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.iff.Chunk
      extended by edu.harvard.hul.ois.jhove.module.aiff.TextChunk
          extended by edu.harvard.hul.ois.jhove.module.aiff.AuthorChunk

public class AuthorChunk
extends TextChunk

Implementation of the AIFF Author Chunk.

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.aiff.TextChunk
propName
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.iff.Chunk
_dstream, _module, bytesLeft
 
Constructor Summary
AuthorChunk(AiffModule module, ChunkHeader hdr, java.io.DataInputStream dstrm)
          Constructor.
 
Method Summary
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.aiff.TextChunk
readChunk, readText
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.iff.Chunk
byteBufString
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

AuthorChunk

public AuthorChunk(AiffModule module,
                   ChunkHeader hdr,
                   java.io.DataInputStream dstrm)
Constructor.

Parameters:
module - The AIFFModule under which this was called
hdr - The header for this chunk
dstrm - The stream from which the AIFF data are being read


jhove/doc/edu/harvard/hul/ois/jhove/module/aiff/CommentsChunk.html0000644000707400001440000003471411510702353024371 0ustar garyusers CommentsChunk (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.aiff
Class CommentsChunk

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.iff.Chunk
      extended by edu.harvard.hul.ois.jhove.module.aiff.CommentsChunk

public class CommentsChunk
extends Chunk

Implementation of the AIFF Comments Chunk.

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.iff.Chunk
_dstream, _module, bytesLeft
 
Constructor Summary
CommentsChunk(AiffModule module, ChunkHeader hdr, java.io.DataInputStream dstrm)
          Constructor.
 
Method Summary
 boolean readChunk(RepInfo info)
          Reads a chunk and puts a Comments property into the RepInfo object.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.iff.Chunk
byteBufString
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

CommentsChunk

public CommentsChunk(AiffModule module,
                     ChunkHeader hdr,
                     java.io.DataInputStream dstrm)
Constructor.

Parameters:
module - The AIFFModule under which this was called
hdr - The header for this chunk
dstrm - The stream from which the AIFF data are being read
Method Detail

readChunk

public boolean readChunk(RepInfo info)
                  throws java.io.IOException
Reads a chunk and puts a Comments property into the RepInfo object.

Specified by:
readChunk in class Chunk
Parameters:
info - RepInfo object to receive information
Returns:
false if the chunk is structurally invalid, otherwise true
Throws:
java.io.IOException


jhove/doc/edu/harvard/hul/ois/jhove/module/aiff/CommonChunk.html0000644000707400001440000003463011510702353024031 0ustar garyusers CommonChunk (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.aiff
Class CommonChunk

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.iff.Chunk
      extended by edu.harvard.hul.ois.jhove.module.aiff.CommonChunk

public class CommonChunk
extends Chunk

The AIFF Common chunk.

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.iff.Chunk
_dstream, _module, bytesLeft
 
Constructor Summary
CommonChunk(AiffModule module, ChunkHeader hdr, java.io.DataInputStream dstrm)
          Constructor.
 
Method Summary
 boolean readChunk(RepInfo info)
          Reads a chunk and puts various properties into the RepInfo object.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.iff.Chunk
byteBufString
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

CommonChunk

public CommonChunk(AiffModule module,
                   ChunkHeader hdr,
                   java.io.DataInputStream dstrm)
Constructor.

Parameters:
module - The AIFFModule under which this was called
hdr - The header for this chunk
dstrm - The stream from which the AIFF data are being read
Method Detail

readChunk

public boolean readChunk(RepInfo info)
                  throws java.io.IOException
Reads a chunk and puts various properties into the RepInfo object.

Specified by:
readChunk in class Chunk
Parameters:
info - RepInfo object to receive information
Returns:
false if the chunk is structurally invalid, otherwise true
Throws:
java.io.IOException


jhove/doc/edu/harvard/hul/ois/jhove/module/aiff/CopyrightChunk.html0000644000707400001440000003457711510702353024563 0ustar garyusers CopyrightChunk (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.aiff
Class CopyrightChunk

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.iff.Chunk
      extended by edu.harvard.hul.ois.jhove.module.aiff.TextChunk
          extended by edu.harvard.hul.ois.jhove.module.aiff.CopyrightChunk

public class CopyrightChunk
extends TextChunk

Implementation of the AIFF Copyright Chunk.

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.aiff.TextChunk
propName
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.iff.Chunk
_dstream, _module, bytesLeft
 
Constructor Summary
CopyrightChunk(AiffModule module, ChunkHeader hdr, java.io.DataInputStream dstrm)
          Constructor.
 
Method Summary
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.aiff.TextChunk
readChunk, readText
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.iff.Chunk
byteBufString
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

CopyrightChunk

public CopyrightChunk(AiffModule module,
                      ChunkHeader hdr,
                      java.io.DataInputStream dstrm)
Constructor.

Parameters:
module - The AIFFModule under which this was called
hdr - The header for this chunk
dstrm - The stream from which the AIFF data are being read


jhove/doc/edu/harvard/hul/ois/jhove/module/aiff/ExtDouble.html0000644000707400001440000002502511510702353023501 0ustar garyusers ExtDouble (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.aiff
Class ExtDouble

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.aiff.ExtDouble

public class ExtDouble
extends java.lang.Object

Code to deal with the 80-bit floating point (extended double) numbers which occur in AIFF files. Should also be applicable in general. Java has no built-in support for IEEE 754 extended double numbers. Thus, we have to unpack the number and convert it to a double by hand. There is, of course, loss of precision. This isn't designed for high-precision work; as the standard disclaimer says, don't use it for life support systems or nuclear power plants.

Author:
Gary McGath

Constructor Summary
ExtDouble(byte[] rawData)
          Constructor.
 
Method Summary
 double toDouble()
          Convert the value to a Java double.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ExtDouble

public ExtDouble(byte[] rawData)
Constructor.

Parameters:
rawData - A 10-byte array representing the number in the sequence in which it was stored.
Method Detail

toDouble

public double toDouble()
Convert the value to a Java double. This results in loss of precision. If the number is out of range, results aren't guaranteed.



jhove/doc/edu/harvard/hul/ois/jhove/module/aiff/FormatVersionChunk.html0000644000707400001440000003516311510702353025401 0ustar garyusers FormatVersionChunk (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.aiff
Class FormatVersionChunk

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.iff.Chunk
      extended by edu.harvard.hul.ois.jhove.module.aiff.FormatVersionChunk

public class FormatVersionChunk
extends Chunk

Implementation of the AIFF Format Version Chunk. This chunk occurs only in the AIFF/C variant.

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.iff.Chunk
_dstream, _module, bytesLeft
 
Constructor Summary
FormatVersionChunk(AiffModule module, ChunkHeader hdr, java.io.DataInputStream dstrm)
          Constructor.
 
Method Summary
 boolean readChunk(RepInfo info)
          Reads a chunk and puts a FormatVersion property into the RepInfo object.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.iff.Chunk
byteBufString
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

FormatVersionChunk

public FormatVersionChunk(AiffModule module,
                          ChunkHeader hdr,
                          java.io.DataInputStream dstrm)
Constructor.

Parameters:
module - The AIFFModule under which this was called
hdr - The header for this chunk
dstrm - The stream from which the AIFF data are being read
Method Detail

readChunk

public boolean readChunk(RepInfo info)
                  throws java.io.IOException
Reads a chunk and puts a FormatVersion property into the RepInfo object.

Specified by:
readChunk in class Chunk
Parameters:
info - RepInfo object to receive information
Returns:
false if the chunk is structurally invalid, otherwise true
Throws:
java.io.IOException


jhove/doc/edu/harvard/hul/ois/jhove/module/aiff/InstrumentChunk.html0000644000707400001440000003501211510702353024744 0ustar garyusers InstrumentChunk (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.aiff
Class InstrumentChunk

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.iff.Chunk
      extended by edu.harvard.hul.ois.jhove.module.aiff.InstrumentChunk

public class InstrumentChunk
extends Chunk

Implementation of the AIFF Instrument Chunk.

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.iff.Chunk
_dstream, _module, bytesLeft
 
Constructor Summary
InstrumentChunk(AiffModule module, ChunkHeader hdr, java.io.DataInputStream dstrm)
          Constructor.
 
Method Summary
 boolean readChunk(RepInfo info)
          Reads a chunk and puts an Instrument property into the RepInfo object.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.iff.Chunk
byteBufString
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

InstrumentChunk

public InstrumentChunk(AiffModule module,
                       ChunkHeader hdr,
                       java.io.DataInputStream dstrm)
Constructor.

Parameters:
module - The AIFFModule under which this was called
hdr - The header for this chunk
dstrm - The stream from which the AIFF data are being read
Method Detail

readChunk

public boolean readChunk(RepInfo info)
                  throws java.io.IOException
Reads a chunk and puts an Instrument property into the RepInfo object.

Specified by:
readChunk in class Chunk
Parameters:
info - RepInfo object to receive information
Returns:
false if the chunk is structurally invalid, otherwise true
Throws:
java.io.IOException


jhove/doc/edu/harvard/hul/ois/jhove/module/aiff/MarkerChunk.html0000644000707400001440000003462211510702353024023 0ustar garyusers MarkerChunk (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.aiff
Class MarkerChunk

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.iff.Chunk
      extended by edu.harvard.hul.ois.jhove.module.aiff.MarkerChunk

public class MarkerChunk
extends Chunk

The AIFF Marker chunk.

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.iff.Chunk
_dstream, _module, bytesLeft
 
Constructor Summary
MarkerChunk(AiffModule module, ChunkHeader hdr, java.io.DataInputStream dstrm)
          Constructor.
 
Method Summary
 boolean readChunk(RepInfo info)
          Reads a chunk and puts a Markers property into the RepInfo object.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.iff.Chunk
byteBufString
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

MarkerChunk

public MarkerChunk(AiffModule module,
                   ChunkHeader hdr,
                   java.io.DataInputStream dstrm)
Constructor.

Parameters:
module - The AIFFModule under which this was called
hdr - The header for this chunk
dstrm - The stream from which the AIFF data are being read
Method Detail

readChunk

public boolean readChunk(RepInfo info)
                  throws java.io.IOException
Reads a chunk and puts a Markers property into the RepInfo object.

Specified by:
readChunk in class Chunk
Parameters:
info - RepInfo object to receive information
Returns:
false if the chunk is structurally invalid, otherwise true
Throws:
java.io.IOException


jhove/doc/edu/harvard/hul/ois/jhove/module/aiff/MidiChunk.html0000644000707400001440000003455611510702353023472 0ustar garyusers MidiChunk (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.aiff
Class MidiChunk

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.iff.Chunk
      extended by edu.harvard.hul.ois.jhove.module.aiff.MidiChunk

public class MidiChunk
extends Chunk

Implementation of the AIFF MIDI Chunk.

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.iff.Chunk
_dstream, _module, bytesLeft
 
Constructor Summary
MidiChunk(AiffModule module, ChunkHeader hdr, java.io.DataInputStream dstrm)
          Constructor.
 
Method Summary
 boolean readChunk(RepInfo info)
          Reads a chunk and puts an MIDI property into the RepInfo object.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.iff.Chunk
byteBufString
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

MidiChunk

public MidiChunk(AiffModule module,
                 ChunkHeader hdr,
                 java.io.DataInputStream dstrm)
Constructor.

Parameters:
module - The AIFFModule under which this was called
hdr - The header for this chunk
dstrm - The stream from which the AIFF data are being read
Method Detail

readChunk

public boolean readChunk(RepInfo info)
                  throws java.io.IOException
Reads a chunk and puts an MIDI property into the RepInfo object.

Specified by:
readChunk in class Chunk
Parameters:
info - RepInfo object to receive information
Returns:
false if the chunk is structurally invalid, otherwise true
Throws:
java.io.IOException


jhove/doc/edu/harvard/hul/ois/jhove/module/aiff/NameChunk.html0000644000707400001440000003443111510702353023460 0ustar garyusers NameChunk (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.aiff
Class NameChunk

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.iff.Chunk
      extended by edu.harvard.hul.ois.jhove.module.aiff.TextChunk
          extended by edu.harvard.hul.ois.jhove.module.aiff.NameChunk

public class NameChunk
extends TextChunk

Implementation of the AIFF Name Chunk.

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.aiff.TextChunk
propName
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.iff.Chunk
_dstream, _module, bytesLeft
 
Constructor Summary
NameChunk(AiffModule module, ChunkHeader hdr, java.io.DataInputStream dstrm)
          Constructor.
 
Method Summary
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.aiff.TextChunk
readChunk, readText
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.iff.Chunk
byteBufString
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

NameChunk

public NameChunk(AiffModule module,
                 ChunkHeader hdr,
                 java.io.DataInputStream dstrm)
Constructor.

Parameters:
module - The AIFFModule under which this was called
hdr - The header for this chunk
dstrm - The stream from which the AIFF data are being read


jhove/doc/edu/harvard/hul/ois/jhove/module/aiff/SaxelChunk.html0000644000707400001440000003531111510702353023652 0ustar garyusers SaxelChunk (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.aiff
Class SaxelChunk

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.iff.Chunk
      extended by edu.harvard.hul.ois.jhove.module.aiff.SaxelChunk

public class SaxelChunk
extends Chunk

Implementation of the AIFF Saxel (Sound Accelerator) Chunk. The Saxel chunk has only a tentative and incomplete status in the AIFF-C draft of 1991, and apparently nothing further was ever done with it. For purposes of extracting parameters, we treat the description of the SaxelChunk and Saxels as valid, while regarding the SaxelData as opaque.

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.iff.Chunk
_dstream, _module, bytesLeft
 
Constructor Summary
SaxelChunk(AiffModule module, ChunkHeader hdr, java.io.DataInputStream dstrm)
          Constructor.
 
Method Summary
 boolean readChunk(RepInfo info)
          Reads a chunk and puts a "Saxels" property into the RepInfo object.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.iff.Chunk
byteBufString
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

SaxelChunk

public SaxelChunk(AiffModule module,
                  ChunkHeader hdr,
                  java.io.DataInputStream dstrm)
Constructor.

Parameters:
module - The AIFFModule under which this was called
hdr - The header for this chunk
dstrm - The stream from which the AIFF data are being read
Method Detail

readChunk

public boolean readChunk(RepInfo info)
                  throws java.io.IOException
Reads a chunk and puts a "Saxels" property into the RepInfo object.

Specified by:
readChunk in class Chunk
Parameters:
info - RepInfo object to receive information
Returns:
false if the chunk is structurally invalid, otherwise true
Throws:
java.io.IOException


jhove/doc/edu/harvard/hul/ois/jhove/module/aiff/SoundDataChunk.html0000644000707400001440000003473611510702353024472 0ustar garyusers SoundDataChunk (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.aiff
Class SoundDataChunk

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.iff.Chunk
      extended by edu.harvard.hul.ois.jhove.module.aiff.SoundDataChunk

public class SoundDataChunk
extends Chunk

Implementation of the AIFF Sound Data Chunk.

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.iff.Chunk
_dstream, _module, bytesLeft
 
Constructor Summary
SoundDataChunk(AiffModule module, ChunkHeader hdr, java.io.DataInputStream dstrm)
          Constructor.
 
Method Summary
 boolean readChunk(RepInfo info)
          Reads a chunk and puts a SoundData property into the RepInfo object.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.iff.Chunk
byteBufString
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

SoundDataChunk

public SoundDataChunk(AiffModule module,
                      ChunkHeader hdr,
                      java.io.DataInputStream dstrm)
Constructor.

Parameters:
module - The AIFFModule under which this was called
hdr - The header for this chunk
dstrm - The stream from which the AIFF data are being read
Method Detail

readChunk

public boolean readChunk(RepInfo info)
                  throws java.io.IOException
Reads a chunk and puts a SoundData property into the RepInfo object.

Specified by:
readChunk in class Chunk
Parameters:
info - RepInfo object to receive information
Returns:
false if the chunk is structurally invalid, otherwise true
Throws:
java.io.IOException


jhove/doc/edu/harvard/hul/ois/jhove/module/aiff/TextChunk.html0000644000707400001440000004123211510702353023521 0ustar garyusers TextChunk (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.aiff
Class TextChunk

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.iff.Chunk
      extended by edu.harvard.hul.ois.jhove.module.aiff.TextChunk
Direct Known Subclasses:
AnnotationChunk, AuthorChunk, CopyrightChunk, NameChunk

public abstract class TextChunk
extends Chunk

Abstract superclass for the name, author, copyright, and annotation chunks, all of which have the same format.

Author:
Gary McGath

Field Summary
protected  java.lang.String propName
          Name of the property.
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.iff.Chunk
_dstream, _module, bytesLeft
 
Constructor Summary
TextChunk(AiffModule module, ChunkHeader hdr, java.io.DataInputStream dstrm)
          Constructor.
 
Method Summary
 boolean readChunk(RepInfo info)
          Reads a chunk and puts appropriate information into the RepInfo object.
protected  java.lang.String readText()
          Reads the chunk's text data.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.iff.Chunk
byteBufString
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

propName

protected java.lang.String propName
Name of the property. The subclass constructor must set this appropriately.

Constructor Detail

TextChunk

public TextChunk(AiffModule module,
                 ChunkHeader hdr,
                 java.io.DataInputStream dstrm)
Constructor.

Parameters:
module - The AIFFModule under which this was called
hdr - The header for this chunk
dstrm - The stream from which the AIFF data are being read
Method Detail

readChunk

public boolean readChunk(RepInfo info)
                  throws java.io.IOException
Reads a chunk and puts appropriate information into the RepInfo object. This method works for TextChunk, CopyrightChunk and AuthorChunk. AnnotationChunk overrides it, since there can be multiple annotations.

Specified by:
readChunk in class Chunk
Parameters:
info - RepInfo object to receive information
Returns:
false if the chunk is structurally invalid, otherwise true
Throws:
java.io.IOException

readText

protected java.lang.String readText()
                             throws java.io.IOException
Reads the chunk's text data. All text chunk subclasses consist of a text string which takes up the full byte count of the chunk. By the specification, the text is required to be ASCII.

Throws:
java.io.IOException


jhove/doc/edu/harvard/hul/ois/jhove/module/aiff/package-frame.html0000644000707400001440000000565611510702366024305 0ustar garyusers edu.harvard.hul.ois.jhove.module.aiff (JHOVE Documentation) edu.harvard.hul.ois.jhove.module.aiff
Classes 
AiffStrings
AnnotationChunk
ApplicationChunk
AudioRecChunk
AuthorChunk
CommentsChunk
CommonChunk
CopyrightChunk
ExtDouble
FormatVersionChunk
InstrumentChunk
MarkerChunk
MidiChunk
NameChunk
SaxelChunk
SoundDataChunk
TextChunk
jhove/doc/edu/harvard/hul/ois/jhove/module/aiff/package-summary.html0000644000707400001440000002646611510702366024712 0ustar garyusers edu.harvard.hul.ois.jhove.module.aiff (JHOVE Documentation)

Package edu.harvard.hul.ois.jhove.module.aiff

Contains supporting classes for the AIFF-HUL module.

See:
          Description

Class Summary
AiffStrings A class for holding arrays of informative strings that will go into properties of an AIFF object.
AnnotationChunk Implementation of the AIFF Annotation Chunk.
ApplicationChunk Implementation of the AIFF Application Chunk.
AudioRecChunk Implementation of the AIFF Audio Recording Chunk.
AuthorChunk Implementation of the AIFF Author Chunk.
CommentsChunk Implementation of the AIFF Comments Chunk.
CommonChunk The AIFF Common chunk.
CopyrightChunk Implementation of the AIFF Copyright Chunk.
ExtDouble Code to deal with the 80-bit floating point (extended double) numbers which occur in AIFF files.
FormatVersionChunk Implementation of the AIFF Format Version Chunk.
InstrumentChunk Implementation of the AIFF Instrument Chunk.
MarkerChunk The AIFF Marker chunk.
MidiChunk Implementation of the AIFF MIDI Chunk.
NameChunk Implementation of the AIFF Name Chunk.
SaxelChunk Implementation of the AIFF Saxel (Sound Accelerator) Chunk.
SoundDataChunk Implementation of the AIFF Sound Data Chunk.
TextChunk Abstract superclass for the name, author, copyright, and annotation chunks, all of which have the same format.
 

Package edu.harvard.hul.ois.jhove.module.aiff Description

Contains supporting classes for the AIFF-HUL module.



jhove/doc/edu/harvard/hul/ois/jhove/module/aiff/package-tree.html0000644000707400001440000002345611510702366024150 0ustar garyusers edu.harvard.hul.ois.jhove.module.aiff Class Hierarchy (JHOVE Documentation)

Hierarchy For Package edu.harvard.hul.ois.jhove.module.aiff

Package Hierarchies:
All Packages

Class Hierarchy



jhove/doc/edu/harvard/hul/ois/jhove/module/AiffModule.html0000644000707400001440000016302311510702352022714 0ustar garyusers AiffModule (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module
Class AiffModule

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.ModuleBase
      extended by edu.harvard.hul.ois.jhove.module.AiffModule
All Implemented Interfaces:
Module

public class AiffModule
extends ModuleBase

Module for identification and validation of AIFF files. Supports AIFF and AIFF-C.

Author:
Gary McGath

Field Summary
protected  AESAudioMetadata _aesMetadata
           
protected  java.util.List _annotationList
           
protected  Checksummer _ckSummer
          PRIVATE Instance FIELDS.
protected  ChecksumInputStream _cstream
           
protected  java.io.DataInputStream _dstream
           
protected  Property _metadata
           
protected  java.util.List _midiList
           
protected  java.util.List _propList
           
protected  java.util.List _saxelList
           
static int AIFCTYPE
           
static int AIFFTYPE
           
protected  boolean audioRecChunkSeen
           
protected  boolean authorChunkSeen
           
protected  long bytesRemaining
           
protected  boolean commentsChunkSeen
           
protected  boolean commonChunkSeen
           
protected  boolean copyrightChunkSeen
           
protected  int fileType
           
protected  boolean firstSampleOffsetMarked
           
protected  boolean formatVersionChunkSeen
           
protected  boolean instrumentChunkSeen
           
protected  boolean markerChunkSeen
           
protected  boolean nameChunkSeen
           
protected  boolean soundChunkSeen
           
 
Fields inherited from class edu.harvard.hul.ois.jhove.ModuleBase
_app, _bigEndian, _checksumFinished, _countStream, _coverage, _crc32, _date, _defaultParams, _features, _format, _init, _isRandomAccess, _je, _logger, _md5, _mimeType, _name, _nByte, _note, _param, _release, _repInfoNote, _rights, _sha1, _signature, _specification, _validityNote, _vendor, _verbosity, _wellFormedNote
 
Fields inherited from interface edu.harvard.hul.ois.jhove.Module
MAXIMUM_VERBOSITY, MINIMUM_VERBOSITY
 
Constructor Summary
AiffModule()
          Instantiates an AiffModule object.
 
Method Summary
 void addAiffProperty(Property prop)
          Adds a Property to the AIFF metadata.
 void addAnnotation(Property prop)
          Adds an Annotation Property to the annotation list.
 void addMidi(Property prop)
          Adds a MIDI Property to the MIDI list.
 void addSaxel(Property prop)
          Adds a Saxel Property to the saxel list.
protected  void dupChunkError(RepInfo info, java.lang.String chunkName)
           
 AESAudioMetadata getAESMetadata()
          Returns the module's AES metadata.
 int getFileType()
          Returns the filetype, which is AIFFTYPE or AIFCTYPE.
protected  void initParse()
          Initializes the state of the module for parsing.
 void markFirstSampleOffset(long offset)
          Marks the first sample offset as the current byte position, if it hasn't already been marked.
 int parse(java.io.InputStream stream, RepInfo info, int parseIndex)
          Parses the content of a purported AIFF digital object and stores the results in RepInfo.
 java.lang.String read4Chars(java.io.DataInputStream stream)
          Reads 4 bytes and concatenates them into a String.
 double read80BitDouble(java.io.DataInputStream stream)
          This reads an 80-bit SANE number, aka IEEE 754 extended double.
protected  boolean readChunk(RepInfo info)
          Reads an AIFF Chunk.
protected  boolean readFileType(RepInfo info)
          Reads the file type.
 java.lang.String readPascalString(java.io.DataInputStream stream)
          Reads a Pascal string.
 int readSignedShort(java.io.DataInputStream stream)
          One-argument version of readSignedShort.
 long readUnsignedInt(java.io.DataInputStream stream)
          One-argument version of readUnsignedInt.
 int readUnsignedShort(java.io.DataInputStream stream)
          One-argument version of readUnsignedShort.
 void setEndian(boolean bigEndian)
          Sets the endian-ness.
 java.util.Date timestampToDate(long timestamp)
          Converts a Macintosh-style timestamp (seconds since January 1, 1904) into a Java date.
 
Methods inherited from class edu.harvard.hul.ois.jhove.ModuleBase
addIntegerProperty, addIntegerProperty, applyDefaultParams, calcRAChecksum, checkSignatures, checkSignatures, getApp, getBase, getBufferedDataStream, getCoverage, getCRC32, getDate, getDefaultParams, getFeatures, getFormat, getMimeType, getName, getNByte, getNote, getRelease, getRepInfoNote, getRights, getSignature, getSpecification, getValidityNote, getVendor, getWellFormedNote, hasFeature, init, initFeatures, isBigEndian, isRandomAccess, param, parse, readByteBuf, readDouble, readDouble, readDouble, readFloat, readFloat, readSignedByte, readSignedByte, readSignedByte, readSignedInt, readSignedInt, readSignedInt, readSignedLong, readSignedRational, readSignedRational, readSignedShort, readSignedShort, readSignedShort, readUnsignedByte, readUnsignedByte, readUnsignedByte, readUnsignedInt, readUnsignedInt, readUnsignedInt, readUnsignedRational, readUnsignedRational, readUnsignedRational, readUnsignedShort, readUnsignedShort, readUnsignedShort, resetParams, setApp, setBase, setChecksums, setCRC32, setDefaultParams, setMD5, setNByte, setSHA1, setValidityNote, setVerbosity, show, skipBytes, skipBytes, vectorToPropArray
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

_ckSummer

protected Checksummer _ckSummer
PRIVATE Instance FIELDS.


_cstream

protected ChecksumInputStream _cstream

_dstream

protected java.io.DataInputStream _dstream

_metadata

protected Property _metadata

_propList

protected java.util.List _propList

_aesMetadata

protected AESAudioMetadata _aesMetadata

_annotationList

protected java.util.List _annotationList

_midiList

protected java.util.List _midiList

_saxelList

protected java.util.List _saxelList

bytesRemaining

protected long bytesRemaining

soundChunkSeen

protected boolean soundChunkSeen

formatVersionChunkSeen

protected boolean formatVersionChunkSeen

instrumentChunkSeen

protected boolean instrumentChunkSeen

commonChunkSeen

protected boolean commonChunkSeen

commentsChunkSeen

protected boolean commentsChunkSeen

nameChunkSeen

protected boolean nameChunkSeen

authorChunkSeen

protected boolean authorChunkSeen

copyrightChunkSeen

protected boolean copyrightChunkSeen

markerChunkSeen

protected boolean markerChunkSeen

audioRecChunkSeen

protected boolean audioRecChunkSeen

firstSampleOffsetMarked

protected boolean firstSampleOffsetMarked

fileType

protected int fileType

AIFFTYPE

public static final int AIFFTYPE
See Also:
Constant Field Values

AIFCTYPE

public static final int AIFCTYPE
See Also:
Constant Field Values
Constructor Detail

AiffModule

public AiffModule()
Instantiates an AiffModule object.

Method Detail

parse

public int parse(java.io.InputStream stream,
                 RepInfo info,
                 int parseIndex)
          throws java.io.IOException
Parses the content of a purported AIFF digital object and stores the results in RepInfo.

Specified by:
parse in interface Module
Overrides:
parse in class ModuleBase
Parameters:
stream - An InputStream, positioned at its beginning, which is generated from the object to be parsed
info - A fresh RepInfo object which will be modified to reflect the results of the parsing
parseIndex - Must be 0 in first call to parse. If parse returns a nonzero value, it must be called again with parseIndex equal to that return value.
Throws:
java.io.IOException

setEndian

public void setEndian(boolean bigEndian)
Sets the endian-ness. true indicates big-endian, and false means little-endian. This is needed because chunk data can change the usual little-endian byte order to big-endian.


addAiffProperty

public void addAiffProperty(Property prop)
Adds a Property to the AIFF metadata.


addAnnotation

public void addAnnotation(Property prop)
Adds an Annotation Property to the annotation list. This will get put into an Annotations Property.


addSaxel

public void addSaxel(Property prop)
Adds a Saxel Property to the saxel list. This will get put into a Saxels Property.


addMidi

public void addMidi(Property prop)
Adds a MIDI Property to the MIDI list. This will get put into a MIDIData Property.


initParse

protected void initParse()
Initializes the state of the module for parsing.

Overrides:
initParse in class ModuleBase

readUnsignedInt

public long readUnsignedInt(java.io.DataInputStream stream)
                     throws java.io.IOException
One-argument version of readUnsignedInt.

Throws:
java.io.IOException

readUnsignedShort

public int readUnsignedShort(java.io.DataInputStream stream)
                      throws java.io.IOException
One-argument version of readUnsignedShort.

Throws:
java.io.IOException

readSignedShort

public int readSignedShort(java.io.DataInputStream stream)
                    throws java.io.IOException
One-argument version of readSignedShort.

Throws:
java.io.IOException

read80BitDouble

public double read80BitDouble(java.io.DataInputStream stream)
                       throws java.io.IOException
This reads an 80-bit SANE number, aka IEEE 754 extended double.

Throws:
java.io.IOException

read4Chars

public java.lang.String read4Chars(java.io.DataInputStream stream)
                            throws java.io.IOException
Reads 4 bytes and concatenates them into a String. This pattern is used for ID's of various kinds.

Throws:
java.io.IOException

readPascalString

public java.lang.String readPascalString(java.io.DataInputStream stream)
                                  throws java.io.IOException
Reads a Pascal string. A Pascal string is one whose count is given in the first byte. The count is exclusive of the count byte itself. A Pascal string can have a maximum of 255 characters. If the count of a Pascal string is even (meaning the total number of bytes is odd), there will be a pad byte to skip, so that the next item can start on an even boundary. We assume the string will be in ASCII or Macintosh encoding.

Throws:
java.io.IOException

timestampToDate

public java.util.Date timestampToDate(long timestamp)
Converts a Macintosh-style timestamp (seconds since January 1, 1904) into a Java date. The timestamp is treated as a time in the default localization. Depending on that localization, there may be some variation in the exact hour of the date returned, e.g., due to daylight savings time.


getFileType

public int getFileType()
Returns the filetype, which is AIFFTYPE or AIFCTYPE.


markFirstSampleOffset

public void markFirstSampleOffset(long offset)
Marks the first sample offset as the current byte position, if it hasn't already been marked. The SSND chunk offset value must be added to the current byte offset for a correct value.


readFileType

protected boolean readFileType(RepInfo info)
                        throws java.io.IOException
Reads the file type. Broken out from parse(). If it is not a valid file type, returns false.

Throws:
java.io.IOException

readChunk

protected boolean readChunk(RepInfo info)
                     throws java.io.IOException
Reads an AIFF Chunk.

Throws:
java.io.IOException

getAESMetadata

public AESAudioMetadata getAESMetadata()
Returns the module's AES metadata.


dupChunkError

protected void dupChunkError(RepInfo info,
                             java.lang.String chunkName)


jhove/doc/edu/harvard/hul/ois/jhove/module/AsciiModule.html0000644000707400001440000011001411510702352023067 0ustar garyusers AsciiModule (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module
Class AsciiModule

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.ModuleBase
      extended by edu.harvard.hul.ois.jhove.module.AsciiModule
All Implemented Interfaces:
Module

public class AsciiModule
extends ModuleBase

Module for analysis of content as an ASCII stream.


Field Summary
protected  java.util.Map _controlCharMap
           
protected  ChecksumInputStream _cstream
          PRIVATE INSTANCE FIELDS.
protected  java.io.DataInputStream _dstream
           
protected  boolean _lineEndCR
           
protected  boolean _lineEndCRLF
           
protected  boolean _lineEndLF
           
protected  int _prevChar
           
protected  TextMDMetadata _textMD
           
protected  boolean _withTextMD
           
 
Fields inherited from class edu.harvard.hul.ois.jhove.ModuleBase
_app, _bigEndian, _checksumFinished, _countStream, _coverage, _crc32, _date, _defaultParams, _features, _format, _init, _isRandomAccess, _je, _logger, _md5, _mimeType, _name, _nByte, _note, _param, _release, _repInfoNote, _rights, _sha1, _signature, _specification, _validityNote, _vendor, _verbosity, _wellFormedNote
 
Fields inherited from interface edu.harvard.hul.ois.jhove.Module
MAXIMUM_VERBOSITY, MINIMUM_VERBOSITY
 
Constructor Summary
AsciiModule()
          Creates an AsciiModule.
 
Method Summary
protected  void checkLineEnd(int ch)
          PRIVATE INSTANCE METHODS.
 void checkSignatures(java.io.File file, java.io.InputStream stream, RepInfo info)
          Check if the digital object conforms to this Module's internal signature information.
 int parse(java.io.InputStream stream, RepInfo info, int parseIndex)
          Parse the content of a stream digital object and store the results in RepInfo.
 
Methods inherited from class edu.harvard.hul.ois.jhove.ModuleBase
addIntegerProperty, addIntegerProperty, applyDefaultParams, calcRAChecksum, checkSignatures, getApp, getBase, getBufferedDataStream, getCoverage, getCRC32, getDate, getDefaultParams, getFeatures, getFormat, getMimeType, getName, getNByte, getNote, getRelease, getRepInfoNote, getRights, getSignature, getSpecification, getValidityNote, getVendor, getWellFormedNote, hasFeature, init, initFeatures, initParse, isBigEndian, isRandomAccess, param, parse, readByteBuf, readDouble, readDouble, readDouble, readFloat, readFloat, readSignedByte, readSignedByte, readSignedByte, readSignedInt, readSignedInt, readSignedInt, readSignedLong, readSignedRational, readSignedRational, readSignedShort, readSignedShort, readSignedShort, readUnsignedByte, readUnsignedByte, readUnsignedByte, readUnsignedInt, readUnsignedInt, readUnsignedInt, readUnsignedRational, readUnsignedRational, readUnsignedRational, readUnsignedShort, readUnsignedShort, readUnsignedShort, resetParams, setApp, setBase, setChecksums, setCRC32, setDefaultParams, setMD5, setNByte, setSHA1, setValidityNote, setVerbosity, show, skipBytes, skipBytes, vectorToPropArray
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

_cstream

protected ChecksumInputStream _cstream
PRIVATE INSTANCE FIELDS.


_dstream

protected java.io.DataInputStream _dstream

_lineEndCR

protected boolean _lineEndCR

_lineEndLF

protected boolean _lineEndLF

_lineEndCRLF

protected boolean _lineEndCRLF

_prevChar

protected int _prevChar

_controlCharMap

protected java.util.Map _controlCharMap

_withTextMD

protected boolean _withTextMD

_textMD

protected TextMDMetadata _textMD
Constructor Detail

AsciiModule

public AsciiModule()
Creates an AsciiModule.

Method Detail

parse

public final int parse(java.io.InputStream stream,
                       RepInfo info,
                       int parseIndex)
                throws java.io.IOException
Parse the content of a stream digital object and store the results in RepInfo.

Specified by:
parse in interface Module
Overrides:
parse in class ModuleBase
Parameters:
stream - An InputStream, positioned at its beginning, which is generated from the object to be parsed. If multiple calls to parse are made on the basis of a nonzero value being returned, a new InputStream must be provided each time.
info - A fresh (on the first call) RepInfo object which will be modified to reflect the results of the parsing If multiple calls to parse are made on the basis of a nonzero value being returned, the same RepInfo object should be passed with each call.
parseIndex - Must be 0 in first call to parse. If parse returns a nonzero value, it must be called again with parseIndex equal to that return value.
Throws:
java.io.IOException

checkSignatures

public void checkSignatures(java.io.File file,
                            java.io.InputStream stream,
                            RepInfo info)
                     throws java.io.IOException
Check if the digital object conforms to this Module's internal signature information. An ASCII file has no "signature," so in cases like this we just check the beginning of the file as a plausible guess. This really proves nothing, since a text file could have a single accented character dozens of kilobytes into it. But oh well.

Specified by:
checkSignatures in interface Module
Overrides:
checkSignatures in class ModuleBase
Parameters:
file - A File object for the object being parsed
stream - An InputStream, positioned at its beginning, which is generated from the object to be parsed
info - A fresh RepInfo object which will be modified to reflect the results of the test
Throws:
java.io.IOException

checkLineEnd

protected void checkLineEnd(int ch)
PRIVATE INSTANCE METHODS.



jhove/doc/edu/harvard/hul/ois/jhove/module/BytestreamModule.html0000644000707400001440000007747011510702352024200 0ustar garyusers BytestreamModule (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module
Class BytestreamModule

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.ModuleBase
      extended by edu.harvard.hul.ois.jhove.module.BytestreamModule
All Implemented Interfaces:
Module

public final class BytestreamModule
extends ModuleBase

Module for analysis of content as a byte stream. This is the module of last resort, accepting any content as valid and well-formed.


Field Summary
protected  ChecksumInputStream _cstream
          PRIVATE INSTANCE FIELDS.
protected  java.io.DataInputStream _dstream
           
 
Fields inherited from class edu.harvard.hul.ois.jhove.ModuleBase
_app, _bigEndian, _checksumFinished, _countStream, _coverage, _crc32, _date, _defaultParams, _features, _format, _init, _isRandomAccess, _je, _logger, _md5, _mimeType, _name, _nByte, _note, _param, _release, _repInfoNote, _rights, _sha1, _signature, _specification, _validityNote, _vendor, _verbosity, _wellFormedNote
 
Fields inherited from interface edu.harvard.hul.ois.jhove.Module
MAXIMUM_VERBOSITY, MINIMUM_VERBOSITY
 
Constructor Summary
BytestreamModule()
          Creates a BytestreamModule.
 
Method Summary
 void checkSignatures(java.io.File file, java.io.InputStream stream, RepInfo info)
          Check signature.
 int parse(java.io.InputStream stream, RepInfo info, int parseIndex)
          Parse the content of a stream digital object and store the results in RepInfo.
 
Methods inherited from class edu.harvard.hul.ois.jhove.ModuleBase
addIntegerProperty, addIntegerProperty, applyDefaultParams, calcRAChecksum, checkSignatures, getApp, getBase, getBufferedDataStream, getCoverage, getCRC32, getDate, getDefaultParams, getFeatures, getFormat, getMimeType, getName, getNByte, getNote, getRelease, getRepInfoNote, getRights, getSignature, getSpecification, getValidityNote, getVendor, getWellFormedNote, hasFeature, init, initFeatures, initParse, isBigEndian, isRandomAccess, param, parse, readByteBuf, readDouble, readDouble, readDouble, readFloat, readFloat, readSignedByte, readSignedByte, readSignedByte, readSignedInt, readSignedInt, readSignedInt, readSignedLong, readSignedRational, readSignedRational, readSignedShort, readSignedShort, readSignedShort, readUnsignedByte, readUnsignedByte, readUnsignedByte, readUnsignedInt, readUnsignedInt, readUnsignedInt, readUnsignedRational, readUnsignedRational, readUnsignedRational, readUnsignedShort, readUnsignedShort, readUnsignedShort, resetParams, setApp, setBase, setChecksums, setCRC32, setDefaultParams, setMD5, setNByte, setSHA1, setValidityNote, setVerbosity, show, skipBytes, skipBytes, vectorToPropArray
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

_cstream

protected ChecksumInputStream _cstream
PRIVATE INSTANCE FIELDS.


_dstream

protected java.io.DataInputStream _dstream
Constructor Detail

BytestreamModule

public BytestreamModule()
Creates a BytestreamModule.

Method Detail

parse

public final int parse(java.io.InputStream stream,
                       RepInfo info,
                       int parseIndex)
                throws java.io.IOException
Parse the content of a stream digital object and store the results in RepInfo. Any arbitrary bytestream is considered well-formed.

Specified by:
parse in interface Module
Overrides:
parse in class ModuleBase
Parameters:
stream - An InputStream, positioned at its beginning, which is generated from the object to be parsed. If multiple calls to parse are made on the basis of a nonzero value being returned, a new InputStream must be provided each time.
info - A fresh (on the first call) RepInfo object which will be modified to reflect the results of the parsing If multiple calls to parse are made on the basis of a nonzero value being returned, the same RepInfo object should be passed with each call.
parseIndex - Must be 0 in first call to parse. If parse returns a nonzero value, it must be called again with parseIndex equal to that return value.
Throws:
java.io.IOException

checkSignatures

public void checkSignatures(java.io.File file,
                            java.io.InputStream stream,
                            RepInfo info)
                     throws java.io.IOException
Check signature. Bytestreams have no signatures, but since any byte stream is considered a valid Bytestream, return immediately doing nothing. The RepInfo._consistent flag will remain true.

Specified by:
checkSignatures in interface Module
Overrides:
checkSignatures in class ModuleBase
Parameters:
file - A File object for the object being parsed
stream - An InputStream, positioned at its beginning, which is generated from the object to be parsed
info - A fresh RepInfo object which will be modified to reflect the results of the test
Throws:
java.io.IOException


jhove/doc/edu/harvard/hul/ois/jhove/module/GifModule.html0000644000707400001440000013756411510702352022567 0ustar garyusers GifModule (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module
Class GifModule

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.ModuleBase
      extended by edu.harvard.hul.ois.jhove.module.GifModule
All Implemented Interfaces:
Module

public class GifModule
extends ModuleBase

Module for identification and validation of GIF files.

Author:
Gary McGath

Field Summary
protected  java.util.List _blocksList
           
protected  Checksummer _ckSummer
           
protected  ChecksumInputStream _cstream
           
protected  java.io.DataInputStream _dstream
           
protected  int _gceCounter
           
protected  boolean _globalColorTableFlag
           
protected  int _globalColorTableSize
           
protected  Property _metadata
           
protected  int _numGraphicBlocks
           
protected  byte[] _sig
          PRIVATE INSTANCE FIELDS.
protected  Property _xmpProp
           
 
Fields inherited from class edu.harvard.hul.ois.jhove.ModuleBase
_app, _bigEndian, _checksumFinished, _countStream, _coverage, _crc32, _date, _defaultParams, _features, _format, _init, _isRandomAccess, _je, _logger, _md5, _mimeType, _name, _nByte, _note, _param, _release, _repInfoNote, _rights, _sha1, _signature, _specification, _validityNote, _vendor, _verbosity, _wellFormedNote
 
Fields inherited from interface edu.harvard.hul.ois.jhove.Module
MAXIMUM_VERBOSITY, MINIMUM_VERBOSITY
 
Constructor Summary
GifModule()
          Instantiate a GifModule object.
 
Method Summary
protected  Property addByteProperty(java.lang.String name, int value, java.lang.String[] labels)
           
 void checkSignatures(java.io.File file, java.io.InputStream stream, RepInfo info)
          Check if the digital object conforms to this Module's internal signature information.
protected  void initParse()
          Initializes the state of the module for parsing.
 int parse(java.io.InputStream stream, RepInfo info, int parseIndex)
          Parse the content of a purported GIF stream digital object and store the results in RepInfo.
protected  boolean readAppExtension(RepInfo info)
           
protected  boolean readBlock(RepInfo info)
           
protected  boolean readCommentExtension(RepInfo info)
           
protected  boolean readExtBlock(RepInfo info)
           
protected  boolean readGraphicsCtlBlock(RepInfo info)
           
protected  boolean readImage(RepInfo info)
           
protected  boolean readLSD(RepInfo info)
           
protected  boolean readPlainTextExtension(RepInfo info)
           
protected  boolean readSig(RepInfo info)
           
protected  int readUnsignedShort(java.io.DataInputStream stream)
           
protected  int readXMP()
           
 
Methods inherited from class edu.harvard.hul.ois.jhove.ModuleBase
addIntegerProperty, addIntegerProperty, applyDefaultParams, calcRAChecksum, checkSignatures, getApp, getBase, getBufferedDataStream, getCoverage, getCRC32, getDate, getDefaultParams, getFeatures, getFormat, getMimeType, getName, getNByte, getNote, getRelease, getRepInfoNote, getRights, getSignature, getSpecification, getValidityNote, getVendor, getWellFormedNote, hasFeature, init, initFeatures, isBigEndian, isRandomAccess, param, parse, readByteBuf, readDouble, readDouble, readDouble, readFloat, readFloat, readSignedByte, readSignedByte, readSignedByte, readSignedInt, readSignedInt, readSignedInt, readSignedLong, readSignedRational, readSignedRational, readSignedShort, readSignedShort, readSignedShort, readUnsignedByte, readUnsignedByte, readUnsignedByte, readUnsignedInt, readUnsignedInt, readUnsignedInt, readUnsignedRational, readUnsignedRational, readUnsignedRational, readUnsignedShort, readUnsignedShort, readUnsignedShort, resetParams, setApp, setBase, setChecksums, setCRC32, setDefaultParams, setMD5, setNByte, setSHA1, setValidityNote, setVerbosity, show, skipBytes, skipBytes, vectorToPropArray
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

_sig

protected byte[] _sig
PRIVATE INSTANCE FIELDS.


_ckSummer

protected Checksummer _ckSummer

_xmpProp

protected Property _xmpProp

_cstream

protected ChecksumInputStream _cstream

_dstream

protected java.io.DataInputStream _dstream

_globalColorTableFlag

protected boolean _globalColorTableFlag

_globalColorTableSize

protected int _globalColorTableSize

_gceCounter

protected int _gceCounter

_metadata

protected Property _metadata

_blocksList

protected java.util.List _blocksList

_numGraphicBlocks

protected int _numGraphicBlocks
Constructor Detail

GifModule

public GifModule()
Instantiate a GifModule object.

Method Detail

checkSignatures

public void checkSignatures(java.io.File file,
                            java.io.InputStream stream,
                            RepInfo info)
                     throws java.io.IOException
Check if the digital object conforms to this Module's internal signature information.

Specified by:
checkSignatures in interface Module
Overrides:
checkSignatures in class ModuleBase
Parameters:
file - A File object for the object being parsed
stream - An InputStream, positioned at its beginning, which is generated from the object to be parsed
info - A fresh RepInfo object which will be modified to reflect the results of the test
Throws:
java.io.IOException

parse

public int parse(java.io.InputStream stream,
                 RepInfo info,
                 int parseIndex)
          throws java.io.IOException
Parse the content of a purported GIF stream digital object and store the results in RepInfo.

Specified by:
parse in interface Module
Overrides:
parse in class ModuleBase
Parameters:
stream - An InputStream, positioned at its beginning, which is generated from the object to be parsed
info - A fresh RepInfo object which will be modified to reflect the results of the parsing
parseIndex - Must be 0 in first call to parse. If parse returns a nonzero value, it must be called again with parseIndex equal to that return value.
Throws:
java.io.IOException

initParse

protected void initParse()
Initializes the state of the module for parsing.

Overrides:
initParse in class ModuleBase

readSig

protected boolean readSig(RepInfo info)
                   throws java.io.IOException
Throws:
java.io.IOException

readLSD

protected boolean readLSD(RepInfo info)
                   throws java.io.IOException
Throws:
java.io.IOException

readBlock

protected boolean readBlock(RepInfo info)
                     throws java.io.IOException
Throws:
java.io.IOException

readExtBlock

protected boolean readExtBlock(RepInfo info)
                        throws java.io.IOException
Throws:
java.io.IOException

readImage

protected boolean readImage(RepInfo info)
                     throws java.io.IOException
Throws:
java.io.IOException

readAppExtension

protected boolean readAppExtension(RepInfo info)
                            throws java.io.IOException
Throws:
java.io.IOException

readCommentExtension

protected boolean readCommentExtension(RepInfo info)
                                throws java.io.IOException
Throws:
java.io.IOException

readPlainTextExtension

protected boolean readPlainTextExtension(RepInfo info)
                                  throws java.io.IOException
Throws:
java.io.IOException

readGraphicsCtlBlock

protected boolean readGraphicsCtlBlock(RepInfo info)
                                throws java.io.IOException
Throws:
java.io.IOException

readXMP

protected int readXMP()
               throws java.io.IOException
Throws:
java.io.IOException

addByteProperty

protected Property addByteProperty(java.lang.String name,
                                   int value,
                                   java.lang.String[] labels)

readUnsignedShort

protected int readUnsignedShort(java.io.DataInputStream stream)
                         throws java.io.IOException
Throws:
java.io.IOException


jhove/doc/edu/harvard/hul/ois/jhove/module/HtmlModule.html0000644000707400001440000013054311510702352022754 0ustar garyusers HtmlModule (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module
Class HtmlModule

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.ModuleBase
      extended by edu.harvard.hul.ois.jhove.module.HtmlModule
All Implemented Interfaces:
Module

public class HtmlModule
extends ModuleBase

Module for identification and validation of HTML files. HTML is different from most of the other documents in that sloppy construction is practically assumed in the specification. This module attempt to report as many errors as possible and recover reasonably from errors. To do this, there is more heuristic behavior built into this module than into the more straightforward ones. XHTML is recognized by this module, but is handed off to the XML module for processing. If the XML module is missing (which it shouldn't be if you've installed the JHOVE application without modifications), this won't be able to deal with XHTML files. HTML should be placed ahead of XML in the module order. If the XML module sees an XHTML file first, it will recognize it as XHTML, but won't be able to report the complete properties. The HTML module uses code created with the JavaCC parser generator and lexical analyzer generator. There is apparently a bug in JavaCC which causes blank lines not to be counted in certain cases, causing lexical errors to be reported with incorrect line numbers.

Author:
Gary McGath

Field Summary
protected  ChecksumInputStream _cstream
          PRIVATE INSTANCE FIELDS.
protected  java.lang.String _doctype
           
protected  java.io.DataInputStream _dstream
           
protected  TextMDMetadata _textMD
           
protected  boolean _withTextMD
           
static int HTML_3_2
           
static int HTML_4_0_FRAMESET
           
static int HTML_4_0_STRICT
           
static int HTML_4_0_TRANSITIONAL
           
static int HTML_4_01_FRAMESET
           
static int HTML_4_01_STRICT
           
static int HTML_4_01_TRANSITIONAL
           
static int XHTML_1_0_FRAMESET
           
static int XHTML_1_0_STRICT
           
static int XHTML_1_0_TRANSITIONAL
           
static int XHTML_1_1
           
 
Fields inherited from class edu.harvard.hul.ois.jhove.ModuleBase
_app, _bigEndian, _checksumFinished, _countStream, _coverage, _crc32, _date, _defaultParams, _features, _format, _init, _isRandomAccess, _je, _logger, _md5, _mimeType, _name, _nByte, _note, _param, _release, _repInfoNote, _rights, _sha1, _signature, _specification, _validityNote, _vendor, _verbosity, _wellFormedNote
 
Fields inherited from interface edu.harvard.hul.ois.jhove.Module
MAXIMUM_VERBOSITY, MINIMUM_VERBOSITY
 
Constructor Summary
HtmlModule()
          Instantiate an HtmlModule object.
 
Method Summary
protected  int checkDoctype(java.util.List elements)
           
 void checkSignatures(java.io.File file, java.io.InputStream stream, RepInfo info)
          Check if the digital object conforms to this Module's internal signature information.
protected static boolean isXmlAvailable()
           
 int parse(java.io.InputStream stream, RepInfo info, int parseIndex)
          Parse the content of a purported HTML stream digital object and store the results in RepInfo.
protected  int seemsToBeXHTML(java.util.List elements)
           
protected  java.lang.String stripQuotes(java.lang.String str)
           
 
Methods inherited from class edu.harvard.hul.ois.jhove.ModuleBase
addIntegerProperty, addIntegerProperty, applyDefaultParams, calcRAChecksum, checkSignatures, getApp, getBase, getBufferedDataStream, getCoverage, getCRC32, getDate, getDefaultParams, getFeatures, getFormat, getMimeType, getName, getNByte, getNote, getRelease, getRepInfoNote, getRights, getSignature, getSpecification, getValidityNote, getVendor, getWellFormedNote, hasFeature, init, initFeatures, initParse, isBigEndian, isRandomAccess, param, parse, readByteBuf, readDouble, readDouble, readDouble, readFloat, readFloat, readSignedByte, readSignedByte, readSignedByte, readSignedInt, readSignedInt, readSignedInt, readSignedLong, readSignedRational, readSignedRational, readSignedShort, readSignedShort, readSignedShort, readUnsignedByte, readUnsignedByte, readUnsignedByte, readUnsignedInt, readUnsignedInt, readUnsignedInt, readUnsignedRational, readUnsignedRational, readUnsignedRational, readUnsignedShort, readUnsignedShort, readUnsignedShort, resetParams, setApp, setBase, setChecksums, setCRC32, setDefaultParams, setMD5, setNByte, setSHA1, setValidityNote, setVerbosity, show, skipBytes, skipBytes, vectorToPropArray
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

_cstream

protected ChecksumInputStream _cstream
PRIVATE INSTANCE FIELDS.


_dstream

protected java.io.DataInputStream _dstream

_doctype

protected java.lang.String _doctype

HTML_3_2

public static final int HTML_3_2
See Also:
Constant Field Values

HTML_4_0_STRICT

public static final int HTML_4_0_STRICT
See Also:
Constant Field Values

HTML_4_0_FRAMESET

public static final int HTML_4_0_FRAMESET
See Also:
Constant Field Values

HTML_4_0_TRANSITIONAL

public static final int HTML_4_0_TRANSITIONAL
See Also:
Constant Field Values

HTML_4_01_STRICT

public static final int HTML_4_01_STRICT
See Also:
Constant Field Values

HTML_4_01_FRAMESET

public static final int HTML_4_01_FRAMESET
See Also:
Constant Field Values

HTML_4_01_TRANSITIONAL

public static final int HTML_4_01_TRANSITIONAL
See Also:
Constant Field Values

XHTML_1_0_STRICT

public static final int XHTML_1_0_STRICT
See Also:
Constant Field Values

XHTML_1_0_TRANSITIONAL

public static final int XHTML_1_0_TRANSITIONAL
See Also:
Constant Field Values

XHTML_1_0_FRAMESET

public static final int XHTML_1_0_FRAMESET
See Also:
Constant Field Values

XHTML_1_1

public static final int XHTML_1_1
See Also:
Constant Field Values

_withTextMD

protected boolean _withTextMD

_textMD

protected TextMDMetadata _textMD
Constructor Detail

HtmlModule

public HtmlModule()
Instantiate an HtmlModule object.

Method Detail

parse

public int parse(java.io.InputStream stream,
                 RepInfo info,
                 int parseIndex)
          throws java.io.IOException
Parse the content of a purported HTML stream digital object and store the results in RepInfo.

Specified by:
parse in interface Module
Overrides:
parse in class ModuleBase
Parameters:
stream - An InputStream, positioned at its beginning, which is generated from the object to be parsed. If multiple calls to parse are made on the basis of a nonzero value being returned, a new InputStream must be provided each time.
info - A fresh (on the first call) RepInfo object which will be modified to reflect the results of the parsing If multiple calls to parse are made on the basis of a nonzero value being returned, the same RepInfo object should be passed with each call.
parseIndex - Must be 0 in first call to parse. If parse returns a nonzero value, it must be called again with parseIndex equal to that return value.
Throws:
java.io.IOException

checkSignatures

public void checkSignatures(java.io.File file,
                            java.io.InputStream stream,
                            RepInfo info)
                     throws java.io.IOException
Check if the digital object conforms to this Module's internal signature information. HTML is one of the most ill-defined of any open formats, so checking a "signature" really means using some heuristics. The only required tag is TITLE, but that could occur well into the file. So we look for any of three strings -- taking into account case-independence and white space -- within the first sigBytes bytes, and call that a signature check.

Specified by:
checkSignatures in interface Module
Overrides:
checkSignatures in class ModuleBase
Parameters:
file - A File object for the object being parsed
stream - An InputStream, positioned at its beginning, which is generated from the object to be parsed
info - A fresh RepInfo object which will be modified to reflect the results of the test
Throws:
java.io.IOException

checkDoctype

protected int checkDoctype(java.util.List elements)

seemsToBeXHTML

protected int seemsToBeXHTML(java.util.List elements)

stripQuotes

protected java.lang.String stripQuotes(java.lang.String str)

isXmlAvailable

protected static boolean isXmlAvailable()


jhove/doc/edu/harvard/hul/ois/jhove/module/Jpeg2000Module.html0000644000707400001440000021400111510702352023227 0ustar garyusers Jpeg2000Module (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module
Class Jpeg2000Module

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.ModuleBase
      extended by edu.harvard.hul.ois.jhove.module.Jpeg2000Module
All Implemented Interfaces:
Module

public class Jpeg2000Module
extends ModuleBase

Module for identification and validation of JPEG 2000 files. Code is included for JPX, but is almost entirely untested due to the lack of available sample files that use more than a tiny fraction of the features. The current version of the module is based on the typo-laden and inconsisent "JPEG 2000 Part II Final Committee Draft" (7 December 2000). The final standard (5 May 2004) has just reached our hands, and this code will be reviewed against it and revised accordingly in the near future. (All opinions expressed in this paragraph are those of the programmer.) JPEG 2000 format is not JPEG format, and isn't compatible with it. As with JPEG, JPEG 2000 is not in itself a file format. It can be encapsulated in JP2 or JPX format, which are recognized here.

Author:
Gary McGath

Field Summary
protected  NisoImageMetadata _defaultNiso
           
protected  java.io.DataInputStream _dstream
           
protected  NisoImageMetadata _niso
          PRIVATE INSTANCE FIELDS.
protected  java.util.List _propList
           
protected  java.io.RandomAccessFile _raf
           
protected  RAFInputStream _rafStream
           
protected  java.util.List associationProps
           
protected  java.util.List binaryFilterProps
           
protected  java.util.List codestreams
           
protected  java.util.List colorSpecs
           
protected  boolean colorSpecSeen
           
protected  java.util.List composLayers
           
protected  Codestream curCodestream
           
protected  java.util.List digitalSigProps
           
protected  boolean filterMode
           
protected  boolean imageHeaderSeen
           
protected  boolean jp2Compliant
           
protected  boolean jp2HdrSeen
           
protected  boolean jpxCompliant
           
protected  int nCodestreamHeaders
           
protected  int nCodestreams
           
protected  boolean rreqSeen
           
protected  java.util.List uuidInfos
           
protected  java.util.List uuids
           
protected  java.util.List xmlList
           
 
Fields inherited from class edu.harvard.hul.ois.jhove.ModuleBase
_app, _bigEndian, _checksumFinished, _countStream, _coverage, _crc32, _date, _defaultParams, _features, _format, _init, _isRandomAccess, _je, _logger, _md5, _mimeType, _name, _nByte, _note, _param, _release, _repInfoNote, _rights, _sha1, _signature, _specification, _validityNote, _vendor, _verbosity, _wellFormedNote
 
Fields inherited from interface edu.harvard.hul.ois.jhove.Module
MAXIMUM_VERBOSITY, MINIMUM_VERBOSITY
 
Constructor Summary
Jpeg2000Module()
          Instantiate a JpegModule object.
 
Method Summary
 void addAssociationProp(Property p)
          Adds an association property to the metadata.
 void addBinaryFilterProp(Property p)
          Adds a binary filter property to the metadata.
 void addColorSpec(Property p)
          Adds a color spec property to the metadata.
 void addComposLayer(Property p)
          Adds a Compositing Layer property to the list of Compositing Layer properties.
 void addDigitalSignatureProp(Property p)
          Adds a digital signature property to the metadata.
 void addProperty(Property p)
          Adds a property to the JPEG2000 metadata.
 void addUUID(Property p)
          Adds a UUID property to the list of UUID properties.
 void addUUIDInfo(Property p)
          Adds a UUIDInfo property to the list of UUIDInfo properties.
 void addXML(java.lang.String s)
          Adds an XML string to the list of XML properties.
 Codestream getCodestream(int n)
          Returns the nth Codestream, creating it if necessary, and make it the current one.
 NisoImageMetadata getCurrentNiso()
          Returns the current NisoImageMetadata object.
 NisoImageMetadata getDefaultNiso()
          Returns the default NisoImageMetadata object.
 long getFilePos()
          Return the current position in the module.
 int getNCodestreamHeaders()
          Returns the codestream header count.
 int getNCodestreams()
          Returns the codestream count.
protected  void initParse()
          Initializes the state of the module for parsing.
 boolean isJP2HdrSeen()
           
 void parse(java.io.RandomAccessFile raf, RepInfo info)
          Parse the content of a stream digital object and store the results in RepInfo.
 java.lang.String read4Chars(java.io.DataInputStream stream)
          Reads 4 bytes and concatenates them into a String.
protected  boolean readBoxes(RepInfo info)
           
protected  boolean readFileTypeBox(RepInfo info)
           
 long readSignedLong(java.io.DataInputStream stream)
          One-argument version of readSignedLong.
 long readUnsignedInt(java.io.DataInputStream stream)
          One-argument version of readUnsignedInt.
 int readUnsignedShort(java.io.DataInputStream stream)
          One-argument version of readUnsignedShort.
 void seek(long pos)
          Seek to a new file position.
 void setColorSpecSeen(boolean b)
          Set the flag indicating the color specification box has been seen.
 void setImageHeaderSeen(boolean b)
          Set the flag indicating the color specification box has been seen.
 void setJP2Compliant(boolean b)
          Sets a flag indicating JP2 compliance.
 void setJP2HdrSeen(boolean b)
          Set the flag indicating that a JP2 header has been seen.
 void setJPXCompliant(boolean b)
          Sets a flag indicating JPX compliance.
 void setNCodestreamHeaders(int n)
          Sets the codestream header count.
 void setNCodestreams(int n)
          Sets the codestream count.
 void setRReqSeen(boolean b)
          Set the flag indicating the reader requirements box has been seen.
protected  boolean skipOverBox(BoxHeader hdr, RepInfo info, java.io.DataInputStream dstrm)
           
 
Methods inherited from class edu.harvard.hul.ois.jhove.ModuleBase
addIntegerProperty, addIntegerProperty, applyDefaultParams, calcRAChecksum, checkSignatures, checkSignatures, getApp, getBase, getBufferedDataStream, getCoverage, getCRC32, getDate, getDefaultParams, getFeatures, getFormat, getMimeType, getName, getNByte, getNote, getRelease, getRepInfoNote, getRights, getSignature, getSpecification, getValidityNote, getVendor, getWellFormedNote, hasFeature, init, initFeatures, isBigEndian, isRandomAccess, param, parse, readByteBuf, readDouble, readDouble, readDouble, readFloat, readFloat, readSignedByte, readSignedByte, readSignedByte, readSignedInt, readSignedInt, readSignedInt, readSignedLong, readSignedRational, readSignedRational, readSignedShort, readSignedShort, readSignedShort, readUnsignedByte, readUnsignedByte, readUnsignedByte, readUnsignedInt, readUnsignedInt, readUnsignedInt, readUnsignedRational, readUnsignedRational, readUnsignedRational, readUnsignedShort, readUnsignedShort, readUnsignedShort, resetParams, setApp, setBase, setChecksums, setCRC32, setDefaultParams, setMD5, setNByte, setSHA1, setValidityNote, setVerbosity, show, skipBytes, skipBytes, vectorToPropArray
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

_niso

protected NisoImageMetadata _niso
PRIVATE INSTANCE FIELDS.


_defaultNiso

protected NisoImageMetadata _defaultNiso

_dstream

protected java.io.DataInputStream _dstream

_raf

protected java.io.RandomAccessFile _raf

_rafStream

protected RAFInputStream _rafStream

_propList

protected java.util.List _propList

codestreams

protected java.util.List codestreams

binaryFilterProps

protected java.util.List binaryFilterProps

associationProps

protected java.util.List associationProps

digitalSigProps

protected java.util.List digitalSigProps

nCodestreams

protected int nCodestreams

nCodestreamHeaders

protected int nCodestreamHeaders

colorSpecs

protected java.util.List colorSpecs

uuids

protected java.util.List uuids

composLayers

protected java.util.List composLayers

uuidInfos

protected java.util.List uuidInfos

xmlList

protected java.util.List xmlList

jp2HdrSeen

protected boolean jp2HdrSeen

rreqSeen

protected boolean rreqSeen

colorSpecSeen

protected boolean colorSpecSeen

imageHeaderSeen

protected boolean imageHeaderSeen

jp2Compliant

protected boolean jp2Compliant

jpxCompliant

protected boolean jpxCompliant

curCodestream

protected Codestream curCodestream

filterMode

protected boolean filterMode
Constructor Detail

Jpeg2000Module

public Jpeg2000Module()
Instantiate a JpegModule object.

Method Detail

parse

public final void parse(java.io.RandomAccessFile raf,
                        RepInfo info)
                 throws java.io.IOException
Parse the content of a stream digital object and store the results in RepInfo. This module is based on a RandomAccessFile because of the requirements of the (so far) rarely used fragmented codestream feature. Since just about everything else can be done with an InputStream, we use a RAFInputStream except on the occasions when random access is needed. We pass the module as the counted argment to all read calls, so that we can compute relative positions in the stream based on _nByte.

Specified by:
parse in interface Module
Overrides:
parse in class ModuleBase
Parameters:
raf - A RandomAccessFile to be parsed.
info - A fresh (on the first call) RepInfo object which will be modified to reflect the results of the parsing If multiple calls to parse are made on the basis of a nonzero value being returned, the same RepInfo object should be passed with each call.
Throws:
java.io.IOException

getFilePos

public long getFilePos()
Return the current position in the module. This is somewhat optimistically named; it should be trusted only for relative positions when no seek operations occur in between calls to getFilePos.


seek

public void seek(long pos)
          throws java.io.IOException
Seek to a new file position.

Throws:
java.io.IOException

getDefaultNiso

public NisoImageMetadata getDefaultNiso()
Returns the default NisoImageMetadata object.


getCurrentNiso

public NisoImageMetadata getCurrentNiso()
Returns the current NisoImageMetadata object. If curCodestream is null, returns the default NisoImageMetadata, otherwise returns the NisoImageMetadata of curCodestream.


getCodestream

public Codestream getCodestream(int n)
Returns the nth Codestream, creating it if necessary, and make it the current one. The value of nCodestreams or nCodestreamHeaders is not affected, even if a new Codestream is created.


getNCodestreams

public int getNCodestreams()
Returns the codestream count. Because items may be added to the codestreams list when only the header is seen, this may be less than the size of the codestreams list. It will never be more.


getNCodestreamHeaders

public int getNCodestreamHeaders()
Returns the codestream header count.


isJP2HdrSeen

public boolean isJP2HdrSeen()

setNCodestreams

public void setNCodestreams(int n)
Sets the codestream count. This affects only the variable, not the size of the codestreams list. The codestream count should never be set to a value larger than the codestreams list; it signifies the number of elements of the list for which codestream boxes have actually been seen.


setNCodestreamHeaders

public void setNCodestreamHeaders(int n)
Sets the codestream header count.


setJP2HdrSeen

public void setJP2HdrSeen(boolean b)
Set the flag indicating that a JP2 header has been seen.


setRReqSeen

public void setRReqSeen(boolean b)
Set the flag indicating the reader requirements box has been seen.


setColorSpecSeen

public void setColorSpecSeen(boolean b)
Set the flag indicating the color specification box has been seen.


setImageHeaderSeen

public void setImageHeaderSeen(boolean b)
Set the flag indicating the color specification box has been seen.


setJP2Compliant

public void setJP2Compliant(boolean b)
Sets a flag indicating JP2 compliance. If the flag is set to true, and the JPX compliance flag is also true, set the MIME type to "image/jpx".


setJPXCompliant

public void setJPXCompliant(boolean b)
Sets a flag indicating JPX compliance.


addProperty

public void addProperty(Property p)
Adds a property to the JPEG2000 metadata.


addColorSpec

public void addColorSpec(Property p)
Adds a color spec property to the metadata.


addBinaryFilterProp

public void addBinaryFilterProp(Property p)
Adds a binary filter property to the metadata.


addAssociationProp

public void addAssociationProp(Property p)
Adds an association property to the metadata.


addDigitalSignatureProp

public void addDigitalSignatureProp(Property p)
Adds a digital signature property to the metadata.


addUUID

public void addUUID(Property p)
Adds a UUID property to the list of UUID properties. Called from the UUIDBox.


addUUIDInfo

public void addUUIDInfo(Property p)
Adds a UUIDInfo property to the list of UUIDInfo properties. Called from UUIDInfoBox.


addComposLayer

public void addComposLayer(Property p)
Adds a Compositing Layer property to the list of Compositing Layer properties. Called from the ComposLayerHdrBox.


addXML

public void addXML(java.lang.String s)
Adds an XML string to the list of XML properties. Called from XMLBox.


read4Chars

public java.lang.String read4Chars(java.io.DataInputStream stream)
                            throws java.io.IOException
Reads 4 bytes and concatenates them into a String.

Throws:
java.io.IOException

readUnsignedShort

public int readUnsignedShort(java.io.DataInputStream stream)
                      throws java.io.IOException
One-argument version of readUnsignedShort. JPEG2000 is always big-endian, so readUnsignedShort can unambiguously drop its endian argument.

Throws:
java.io.IOException

readUnsignedInt

public long readUnsignedInt(java.io.DataInputStream stream)
                     throws java.io.IOException
One-argument version of readUnsignedInt. JPEG2000 is always big-endian, so readUnsignedInt can unambiguously drop its endian argument.

Throws:
java.io.IOException

readSignedLong

public long readSignedLong(java.io.DataInputStream stream)
                    throws java.io.IOException
One-argument version of readSignedLong. JPEG2000 is always big-endian, so readSignedLong can unambiguously drop its endian argument.

Throws:
java.io.IOException

initParse

protected void initParse()
Initializes the state of the module for parsing.

Overrides:
initParse in class ModuleBase

readBoxes

protected boolean readBoxes(RepInfo info)
                     throws java.io.IOException
Throws:
java.io.IOException

readFileTypeBox

protected boolean readFileTypeBox(RepInfo info)
                           throws java.io.IOException
Throws:
java.io.IOException

skipOverBox

protected boolean skipOverBox(BoxHeader hdr,
                              RepInfo info,
                              java.io.DataInputStream dstrm)
                       throws java.io.IOException
Throws:
java.io.IOException


jhove/doc/edu/harvard/hul/ois/jhove/module/JpegModule.html0000644000707400001440000023662611510702353022747 0ustar garyusers JpegModule (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module
Class JpegModule

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.ModuleBase
      extended by edu.harvard.hul.ois.jhove.module.JpegModule
All Implemented Interfaces:
Module

public class JpegModule
extends ModuleBase

Module for identification and validation of JPEG files. General notes: There is no such thing as a "JPEG file format." There are several commonly used file formats which encapsulate JPEG data and conform to the JPEG stream format. There are also many formats which can encapsulate JPEG data within some larger wrapper; this module does not attempt to recognize them. Only JPEG file formats which are JPEG streams are treated here. A JPEG stream which isn't one of the known file formats will be regarded as well-formed, but not valid. To be valid, a file must conform to one of the following: JFIF, SPIFF, and JPEG/Exif. Other formats may be added in the future. This module uses the JPEG-L method of detecting a marker following a data stream, checking for a 0 high bit rather than an entire 0 byte. So long at no JPEG markers are defined with a value from 0 through 7F, this is valid for all JPEG files. * @author Gary McGath


Field Summary
protected  java.util.List _appSegsList
           
protected  java.util.List _arithCondTables
           
protected  int _capability0
           
protected  int _capability1
           
protected  Checksummer _ckSummer
           
protected  java.util.List _commentsList
           
protected  java.util.Set _compressSet
           
protected  ChecksumInputStream _cstream
           
protected  java.io.DataInputStream _dstream
           
protected  boolean _exifProfileOK
           
protected  Property _exifProp
           
protected  java.util.List _expList
           
protected  java.util.List _imageList
           
protected  Property _imageProp
           
protected  java.util.List _jpegExtsList
           
protected  Property _metadata
           
protected  NisoImageMetadata _niso
           
protected  int _numScans
           
protected  int _numSegments
           
protected  java.util.List _primaryImageList
           
protected  java.util.List _propList
           
protected  java.util.List _quantTables
           
protected  boolean _reportedJFIF
           
protected  boolean _reportedSigMatch
           
protected  int _restartInterval
           
protected  boolean _seenExif
           
protected  boolean _seenJFIF
           
protected  boolean _seenJPEGL
           
protected  boolean _seenSOF
           
protected  boolean _seenSPIFF
           
protected  SpiffDir _spiffDir
           
protected  java.util.List _srsList
           
protected  Tiling _tiling
           
protected  int _units
           
protected  int _xDensity
           
protected  Property _xmpProp
           
protected  int _yDensity
           
protected  java.lang.String exifProfileName
           
protected  java.lang.String jfifProfileName
          PRIVATE INSTANCE FIELDS.
protected  java.lang.String jpeglProfileName
           
protected  java.text.NumberFormat minorFmt
           
protected static int[] sigByte
           
protected  java.lang.String spiffProfileName
           
 
Fields inherited from class edu.harvard.hul.ois.jhove.ModuleBase
_app, _bigEndian, _checksumFinished, _countStream, _coverage, _crc32, _date, _defaultParams, _features, _format, _init, _isRandomAccess, _je, _logger, _md5, _mimeType, _name, _nByte, _note, _param, _release, _repInfoNote, _rights, _sha1, _signature, _specification, _validityNote, _vendor, _verbosity, _wellFormedNote
 
Fields inherited from interface edu.harvard.hul.ois.jhove.Module
MAXIMUM_VERBOSITY, MINIMUM_VERBOSITY
 
Constructor Summary
JpegModule()
          Instantiate a JpegModule object.
 
Method Summary
protected  Property buildCapProp(RepInfo info)
           
protected  Property buildExpandProp(RepInfo info)
           
protected  Property buildTilingProp(RepInfo info)
           
 void checkSignatures(java.io.File file, java.io.InputStream stream, RepInfo info)
          Check if the digital object conforms to this Module's internal signature information.
protected static boolean equalArray(int[] a, int[] b)
           
protected  void extractExifNisoData(NisoImageMetadata exifData)
           
protected  void initNiso()
          Initializes the constant portions of the niso metadata.
protected  void initParse()
          Initializes the state of the module for parsing.
 int parse(java.io.InputStream stream, RepInfo info, int parseIndex)
          Parse the content of a purported JPEG stream digital object and store the results in RepInfo.
protected  void readAPP0(RepInfo info)
           
protected  void readAPP1(RepInfo info)
           
protected  void readAPP8(RepInfo info)
           
protected  void readComment(RepInfo info)
           
protected  void readDAC(RepInfo info)
           
protected  void readDHP(RepInfo info)
           
protected  void readDQT(RepInfo info)
           
protected  void readDRI(RepInfo info)
           
protected  void readDTI(RepInfo info)
           
protected  void readDTT(RepInfo info)
           
protected  void readEXP(RepInfo info)
           
protected  boolean readHeader(RepInfo info)
           
protected  void readJPEGExtension(int dbyt, RepInfo info)
           
protected  void readSOF(int dbyt, RepInfo info)
           
protected  void readSRS(RepInfo info)
           
 long readUnsignedInt(java.io.DataInputStream stream)
          One-argument version of readUnsignedInt.
 int readUnsignedShort(java.io.DataInputStream stream)
          One-argument version of readUnsignedShort.
protected  void readVer(RepInfo info)
           
protected  Property readXMP(byte[] buf)
           
protected  void reportAppExt(int dbyt, RepInfo info)
           
protected  boolean skipSegment(RepInfo info)
           
 
Methods inherited from class edu.harvard.hul.ois.jhove.ModuleBase
addIntegerProperty, addIntegerProperty, applyDefaultParams, calcRAChecksum, checkSignatures, getApp, getBase, getBufferedDataStream, getCoverage, getCRC32, getDate, getDefaultParams, getFeatures, getFormat, getMimeType, getName, getNByte, getNote, getRelease, getRepInfoNote, getRights, getSignature, getSpecification, getValidityNote, getVendor, getWellFormedNote, hasFeature, init, initFeatures, isBigEndian, isRandomAccess, param, parse, readByteBuf, readDouble, readDouble, readDouble, readFloat, readFloat, readSignedByte, readSignedByte, readSignedByte, readSignedInt, readSignedInt, readSignedInt, readSignedLong, readSignedRational, readSignedRational, readSignedShort, readSignedShort, readSignedShort, readUnsignedByte, readUnsignedByte, readUnsignedByte, readUnsignedInt, readUnsignedInt, readUnsignedInt, readUnsignedRational, readUnsignedRational, readUnsignedRational, readUnsignedShort, readUnsignedShort, readUnsignedShort, resetParams, setApp, setBase, setChecksums, setCRC32, setDefaultParams, setMD5, setNByte, setSHA1, setValidityNote, setVerbosity, show, skipBytes, skipBytes, vectorToPropArray
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

jfifProfileName

protected java.lang.String jfifProfileName
PRIVATE INSTANCE FIELDS.


spiffProfileName

protected java.lang.String spiffProfileName

exifProfileName

protected java.lang.String exifProfileName

jpeglProfileName

protected java.lang.String jpeglProfileName

minorFmt

protected java.text.NumberFormat minorFmt

_ckSummer

protected Checksummer _ckSummer

_cstream

protected ChecksumInputStream _cstream

_dstream

protected java.io.DataInputStream _dstream

_metadata

protected Property _metadata

_imageProp

protected Property _imageProp

_exifProp

protected Property _exifProp

_xmpProp

protected Property _xmpProp

_niso

protected NisoImageMetadata _niso

_propList

protected java.util.List _propList

_imageList

protected java.util.List _imageList

_tiling

protected Tiling _tiling

_quantTables

protected java.util.List _quantTables

_arithCondTables

protected java.util.List _arithCondTables

_srsList

protected java.util.List _srsList

_primaryImageList

protected java.util.List _primaryImageList

_numSegments

protected int _numSegments

_numScans

protected int _numScans

_restartInterval

protected int _restartInterval

_seenJFIF

protected boolean _seenJFIF

_seenSPIFF

protected boolean _seenSPIFF

_seenJPEGL

protected boolean _seenJPEGL

_reportedSigMatch

protected boolean _reportedSigMatch

_spiffDir

protected SpiffDir _spiffDir

_seenExif

protected boolean _seenExif

_exifProfileOK

protected boolean _exifProfileOK

_reportedJFIF

protected boolean _reportedJFIF

_seenSOF

protected boolean _seenSOF

_commentsList

protected java.util.List _commentsList

_jpegExtsList

protected java.util.List _jpegExtsList

_appSegsList

protected java.util.List _appSegsList

_expList

protected java.util.List _expList

_compressSet

protected java.util.Set _compressSet

_capability0

protected int _capability0

_capability1

protected int _capability1

sigByte

protected static final int[] sigByte

_units

protected int _units

_xDensity

protected int _xDensity

_yDensity

protected int _yDensity
Constructor Detail

JpegModule

public JpegModule()
Instantiate a JpegModule object.

Method Detail

checkSignatures

public void checkSignatures(java.io.File file,
                            java.io.InputStream stream,
                            RepInfo info)
                     throws java.io.IOException
Check if the digital object conforms to this Module's internal signature information.

Specified by:
checkSignatures in interface Module
Overrides:
checkSignatures in class ModuleBase
Parameters:
file - A RandomAccessFile, positioned at its beginning, which is generated from the object to be parsed
stream - An InputStream, positioned at its beginning, which is generated from the object to be parsed
info - A fresh RepInfo object which will be modified to reflect the results of the test
Throws:
java.io.IOException

parse

public int parse(java.io.InputStream stream,
                 RepInfo info,
                 int parseIndex)
          throws java.io.IOException
Parse the content of a purported JPEG stream digital object and store the results in RepInfo. This function uses the JPEG-L method of detecting a marker following a data stream, checking for a 0 high bit rather than an entire 0 byte. So long at no JPEG markers are defined with a value from 0 through 7F, this is valid for all JPEG files.

Specified by:
parse in interface Module
Overrides:
parse in class ModuleBase
Parameters:
stream - An InputStream, positioned at its beginning, which is generated from the object to be parsed
info - A fresh RepInfo object which will be modified to reflect the results of the parsing
parseIndex - Must be 0 in first call to parse. If parse returns a nonzero value, it must be called again with parseIndex equal to that return value.
Throws:
java.io.IOException

readUnsignedShort

public int readUnsignedShort(java.io.DataInputStream stream)
                      throws java.io.IOException
One-argument version of readUnsignedShort. JPEG is always big-endian, so readUnsignedShort can unambiguously drop its endian argument.

Throws:
java.io.IOException

readUnsignedInt

public long readUnsignedInt(java.io.DataInputStream stream)
                     throws java.io.IOException
One-argument version of readUnsignedInt. JPEG is always big-endian, so readUnsignedInt can unambiguously drop its endian argument.

Throws:
java.io.IOException

initParse

protected void initParse()
Initializes the state of the module for parsing.

Overrides:
initParse in class ModuleBase

initNiso

protected void initNiso()
Initializes the constant portions of the niso metadata.


readHeader

protected boolean readHeader(RepInfo info)

readAPP0

protected void readAPP0(RepInfo info)
                 throws java.io.IOException
Throws:
java.io.IOException

readAPP1

protected void readAPP1(RepInfo info)
                 throws java.io.IOException
Throws:
java.io.IOException

readAPP8

protected void readAPP8(RepInfo info)
                 throws java.io.IOException
Throws:
java.io.IOException

readVer

protected void readVer(RepInfo info)
                throws java.io.IOException
Throws:
java.io.IOException

readDTI

protected void readDTI(RepInfo info)
                throws java.io.IOException
Throws:
java.io.IOException

readDTT

protected void readDTT(RepInfo info)
                throws java.io.IOException
Throws:
java.io.IOException

readSRS

protected void readSRS(RepInfo info)
                throws java.io.IOException
Throws:
java.io.IOException

reportAppExt

protected void reportAppExt(int dbyt,
                            RepInfo info)

readSOF

protected void readSOF(int dbyt,
                       RepInfo info)
                throws java.io.IOException
Throws:
java.io.IOException

readDHP

protected void readDHP(RepInfo info)
                throws java.io.IOException
Throws:
java.io.IOException

readEXP

protected void readEXP(RepInfo info)
                throws java.io.IOException
Throws:
java.io.IOException

readDRI

protected void readDRI(RepInfo info)
                throws java.io.IOException
Throws:
java.io.IOException

readDQT

protected void readDQT(RepInfo info)
                throws java.io.IOException
Throws:
java.io.IOException

readDAC

protected void readDAC(RepInfo info)
                throws java.io.IOException
Throws:
java.io.IOException

readJPEGExtension

protected void readJPEGExtension(int dbyt,
                                 RepInfo info)
                          throws java.io.IOException
Throws:
java.io.IOException

readComment

protected void readComment(RepInfo info)
                    throws java.io.IOException
Throws:
java.io.IOException

buildCapProp

protected Property buildCapProp(RepInfo info)

buildTilingProp

protected Property buildTilingProp(RepInfo info)

buildExpandProp

protected Property buildExpandProp(RepInfo info)

readXMP

protected Property readXMP(byte[] buf)

extractExifNisoData

protected void extractExifNisoData(NisoImageMetadata exifData)

skipSegment

protected boolean skipSegment(RepInfo info)
                       throws java.io.IOException
Throws:
java.io.IOException

equalArray

protected static boolean equalArray(int[] a,
                                    int[] b)


jhove/doc/edu/harvard/hul/ois/jhove/module/PdfModule.html0000644000707400001440000043603311510702353022565 0ustar garyusers PdfModule (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module
Class PdfModule

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.ModuleBase
      extended by edu.harvard.hul.ois.jhove.module.PdfModule
All Implemented Interfaces:
Module

public class PdfModule
extends ModuleBase

Module for identification and validation of PDF files.


Field Summary
protected  boolean _actionsExist
           
protected  ObjectStream _cachedObjectStream
          Cached object stream.
protected  int _cachedStreamIndex
          Object number of cached object stream.
protected  java.util.Map _cid0FontsMap
           
protected  java.util.Map _cid2FontsMap
           
protected  NameTreeNode _destNames
           
protected  PdfDictionary _destsDict
           
protected  java.util.List _docCatalogList
           
protected  PdfDictionary _docCatDict
           
protected  PdfIndirectObj _docCatDictRef
           
protected  PdfDictionary _docInfoDict
           
protected  PdfIndirectObj _docInfoDictRef
           
protected  java.util.List _docInfoList
           
protected  PageTreeNode _docTreeRoot
           
protected  NameTreeNode _embeddedFiles
           
protected  PdfDictionary _encryptDict
           
protected  PdfIndirectObj _encryptDictRef
           
protected  boolean _encrypted
           
protected  java.util.List _encryptList
           
protected  long _eof
           
protected  java.util.List _extStreamsList
           
protected  java.util.List _filtersList
           
protected  Property _idProperty
           
protected  java.util.List _imagesList
           
protected  Property _metadata
           
protected  java.util.Map _mmFontsMap
           
protected  int _nFonts
          Number of fonts reported so far.
protected  int _numFreeObjects
           
protected  int _numObjects
           
protected  int _numTrailers
           
protected  int _objCount
           
protected  java.util.Map _objects
           
protected  PdfDictionary _outlineDict
           
protected  PdfDictionary _pageLabelDict
           
protected  PageLabelNode _pageLabelRoot
           
protected  PdfIndirectObj _pagesDictRef
           
protected  java.util.Map _pageSeqMap
           
protected  java.util.List _pagesList
           
protected  Parser _parser
           
protected  boolean _pdfACompliant
           
protected  long _prevxref
           
protected  java.util.List _profile
          List of profile checkers
protected  java.io.RandomAccessFile _raf
           
protected  boolean _recursionWarned
           
protected  boolean _showAnnotations
           
protected  boolean _showFonts
           
protected  boolean _showOutlines
           
protected  boolean _showPages
           
protected  boolean _skippedAnnotationsReported
           
protected  boolean _skippedFontsReported
           
protected  boolean _skippedOutlinesReported
           
protected  boolean _skippedPagesReported
           
protected  long _startxref
           
protected  PdfDictionary _trailerDict
           
protected  java.util.Map _trueTypeFontsMap
           
protected  java.util.Map _type0FontsMap
           
protected  java.util.Map _type1FontsMap
           
protected  java.util.Map _type3FontsMap
           
protected  java.lang.String _version
           
protected  PdfDictionary _viewPrefDict
           
protected  java.util.Set _visitedOutlineNodes
          Map of visited nodes when walking through an outline.
protected  Property _xmpProp
           
protected  long[] _xref
           
protected  int[][] _xref2
           
protected  boolean _xrefIsStream
           
protected  int DEFAULT_MAX_FONTS
          PRIVATE INSTANCE FIELDS.
static int F_CID0
          Font type selectors.
static int F_CID2
          Font type selectors.
static int F_MM1
          Font type selectors.
static int F_TT
          Font type selectors.
static int F_TYPE0
          Font type selectors.
static int F_TYPE1
          Font type selectors.
static int F_TYPE3
          Font type selectors.
protected  int maxFonts
          maximum number of fonts to report full information on.
protected static java.lang.String outlinesRecursiveString
           
 
Fields inherited from class edu.harvard.hul.ois.jhove.ModuleBase
_app, _bigEndian, _checksumFinished, _countStream, _coverage, _crc32, _date, _defaultParams, _features, _format, _init, _isRandomAccess, _je, _logger, _md5, _mimeType, _name, _nByte, _note, _param, _release, _repInfoNote, _rights, _sha1, _signature, _specification, _validityNote, _vendor, _verbosity, _wellFormedNote
 
Fields inherited from interface edu.harvard.hul.ois.jhove.Module
MAXIMUM_VERBOSITY, MINIMUM_VERBOSITY
 
Constructor Summary
PdfModule()
          Creates an instance of the module and initializes identifying information.
 
Method Summary
protected  void addDateProperty(PdfDictionary dict, java.util.List propList, java.lang.String key, java.lang.String propName)
          Add a date proprerty, based on a dictionary entry with a string value, to a specified List.
protected  void addDestination(PdfObject itemObj, java.lang.String propName, java.util.List propList, RepInfo info)
           
protected  void addFontsProperty(java.util.List metadataList)
          Add the various font lists as a fonts property.
protected  java.lang.String addFontToMap(PdfDictionary font)
          Add the font to the appropriate map, and return its subtype.
protected  void addPagesProperty(java.util.List metadataList, RepInfo info)
           
protected  void addStringProperty(PdfDictionary dict, java.util.List propList, java.lang.String key, java.lang.String propName)
          Add a string proprerty, based on a dictionary entry with a string value, to a specified List.
protected  Property buildAnnotProperty(PdfDictionary annot, RepInfo info)
           
protected  Property buildBitmaskProperty(int val, java.lang.String name, java.lang.String[] valueNames, java.lang.String defaultStr)
           
protected  Property buildCIDInfoProperty(PdfDictionary dict)
           
protected  Property buildCMapDictProperty(PdfStream encoding)
           
protected  Property buildEncodingDictProperty(PdfDictionary encodingDict)
           
protected  Property buildFontDescriptorProperty(PdfDictionary encodingDict)
           
protected  Property buildFontProperty(java.lang.String name, java.util.Map map, int fontType)
           
protected  Property buildMeasureProperty(PdfDictionary meas)
           
protected  Property buildOutlineItemProperty(PdfDictionary dict, RepInfo info)
           
protected  Property buildOutlinesProperty(PdfDictionary dict, RepInfo info)
           
protected  Property buildPageLabelProperty(PageObject page, int pageIndex, int[] nomNumRef)
           
protected  Property buildPageProperty(PageObject page, int idx, RepInfo info)
           
protected  Property buildUserPermProperty(int flags, java.lang.String[] flagStrs)
           
protected  Property buildViewPrefProperty(PdfDictionary prefDict)
           
protected  boolean doOutlineStuff(RepInfo info)
           
protected  java.lang.String extractFilters(Filter[] filters, PdfStream stream)
          Finds the filters in a stream or array object which is the value of a stream's Filter key, and put them in _filtersList if a duplicate isn't there already.
protected  void findExternalStreams(RepInfo info)
           
protected  boolean findFilters(RepInfo info)
          Locates the filters in the content stream dictionaries and generate a list of unique pipelines.
protected  void findFonts(RepInfo info)
           
protected  void findImages(RepInfo info)
           
protected  boolean findLastTrailer(RepInfo info)
          Locate the last trailer of the file
 boolean getActionsExist()
          Return true if Actions have been detected in the file.
 PdfDictionary getCatalogDict()
          Returns the catalog dictionary object.
 PdfDictionary getDocInfo()
          Returns the document information dictionary.
 PageTreeNode getDocumentTree()
          Returns the document tree root.
 NameTreeNode getEmbeddedFiles()
          Returns a NameTreeNode for the EmbeddedFiles entry of the Names dictionary.
 PdfDictionary getEncryptionDict()
          Returns the encryption dictionary.
 java.io.RandomAccessFile getFile()
          Return the RandomAccessFile being read.
 java.util.Map getFontMap(int selector)
          Get a font map.
 java.util.List getFontMaps()
          Return a List of all the font maps.
protected  PdfObject getObject(int objIndex, int recGuard)
          Returns an object of a given number.
 PdfDictionary getOutlineDict()
          Returns the outlines dictionary object.
 PdfDictionary getTrailerDict()
          Returns the trailer dictionary object.
 PdfDictionary getViewPrefDict()
          Returns the viewer preferences dictionary object.
protected  void initParse()
          Initialize the module.
protected  boolean isFontSubset(java.lang.String baseStr)
           
protected  Property makeRectProperty(PdfArray arrObj, java.lang.String name)
           
 boolean mayBePDFACompliant()
          Returns true if the module hasn't detected any violations of PDF/A compliance.
protected  int nameToNiso(java.lang.String name, java.lang.String[] nameArray, int[] valArray)
           
protected  java.util.List oneFontPropList(PdfDictionary dict, int fontType)
           
 void param(java.lang.String param)
          Per-action initialization.
 void parse(java.io.RandomAccessFile raf, RepInfo info)
          Parse a file and stores descriptive information.
protected  boolean parseHeader(RepInfo info)
           
protected  boolean parseTrailer(RepInfo info, boolean prevOnly)
           
protected  boolean readDocCatalogDict(RepInfo info)
           
protected  boolean readDocInfoDict(RepInfo info)
           
protected  boolean readDocumentTree(RepInfo info)
           
protected  boolean readEncryptDict(RepInfo info)
           
protected  boolean readPageLabelTree(RepInfo info)
           
protected  boolean readXMPData(RepInfo info)
           
protected  boolean readXRefInfo(RepInfo info)
           
protected  boolean readXRefStreams(RepInfo info)
           
protected  boolean readXRefTables(RepInfo info)
           
 void resetParams()
          Reset parameter settings.
protected  int resolveIndirectDest(PdfSimpleObject key)
           
 PdfObject resolveIndirectObject(PdfObject indObj)
          If the argument is an indirect object reference, returns the object it resolves to, otherwise returns the object itself.
protected static java.lang.String toHex(java.lang.String s)
          PRIVATE CLASS METHODS.
protected static java.lang.String toHex(java.util.Vector v)
           
 
Methods inherited from class edu.harvard.hul.ois.jhove.ModuleBase
addIntegerProperty, addIntegerProperty, applyDefaultParams, calcRAChecksum, checkSignatures, checkSignatures, getApp, getBase, getBufferedDataStream, getCoverage, getCRC32, getDate, getDefaultParams, getFeatures, getFormat, getMimeType, getName, getNByte, getNote, getRelease, getRepInfoNote, getRights, getSignature, getSpecification, getValidityNote, getVendor, getWellFormedNote, hasFeature, init, initFeatures, isBigEndian, isRandomAccess, parse, readByteBuf, readDouble, readDouble, readDouble, readFloat, readFloat, readSignedByte, readSignedByte, readSignedByte, readSignedInt, readSignedInt, readSignedInt, readSignedLong, readSignedRational, readSignedRational, readSignedShort, readSignedShort, readSignedShort, readUnsignedByte, readUnsignedByte, readUnsignedByte, readUnsignedInt, readUnsignedInt, readUnsignedInt, readUnsignedRational, readUnsignedRational, readUnsignedRational, readUnsignedShort, readUnsignedShort, readUnsignedShort, setApp, setBase, setChecksums, setCRC32, setDefaultParams, setMD5, setNByte, setSHA1, setValidityNote, setVerbosity, show, skipBytes, skipBytes, vectorToPropArray
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

F_TYPE0

public static final int F_TYPE0
Font type selectors.

See Also:
Constant Field Values

F_TYPE1

public static final int F_TYPE1
Font type selectors.

See Also:
Constant Field Values

F_TT

public static final int F_TT
Font type selectors.

See Also:
Constant Field Values

F_TYPE3

public static final int F_TYPE3
Font type selectors.

See Also:
Constant Field Values

F_MM1

public static final int F_MM1
Font type selectors.

See Also:
Constant Field Values

F_CID0

public static final int F_CID0
Font type selectors.

See Also:
Constant Field Values

F_CID2

public static final int F_CID2
Font type selectors.

See Also:
Constant Field Values

DEFAULT_MAX_FONTS

protected int DEFAULT_MAX_FONTS
PRIVATE INSTANCE FIELDS.


_raf

protected java.io.RandomAccessFile _raf

_parser

protected Parser _parser

_version

protected java.lang.String _version

_metadata

protected Property _metadata

_xmpProp

protected Property _xmpProp

_eof

protected long _eof

_startxref

protected long _startxref

_prevxref

protected long _prevxref

_numFreeObjects

protected int _numFreeObjects

_idProperty

protected Property _idProperty

_objCount

protected int _objCount

_numObjects

protected int _numObjects

_numTrailers

protected int _numTrailers

_objects

protected java.util.Map _objects

_xref

protected long[] _xref

_xref2

protected int[][] _xref2

_xrefIsStream

protected boolean _xrefIsStream

_encrypted

protected boolean _encrypted

_docCatalogList

protected java.util.List _docCatalogList

_encryptList

protected java.util.List _encryptList

_docInfoList

protected java.util.List _docInfoList

_extStreamsList

protected java.util.List _extStreamsList

_imagesList

protected java.util.List _imagesList

_filtersList

protected java.util.List _filtersList

_pagesList

protected java.util.List _pagesList

_type0FontsMap

protected java.util.Map _type0FontsMap

_type1FontsMap

protected java.util.Map _type1FontsMap

_mmFontsMap

protected java.util.Map _mmFontsMap

_type3FontsMap

protected java.util.Map _type3FontsMap

_trueTypeFontsMap

protected java.util.Map _trueTypeFontsMap

_cid0FontsMap

protected java.util.Map _cid0FontsMap

_cid2FontsMap

protected java.util.Map _cid2FontsMap

_pageSeqMap

protected java.util.Map _pageSeqMap

_docCatDictRef

protected PdfIndirectObj _docCatDictRef

_encryptDictRef

protected PdfIndirectObj _encryptDictRef

_docInfoDictRef

protected PdfIndirectObj _docInfoDictRef

_pagesDictRef

protected PdfIndirectObj _pagesDictRef

_docCatDict

protected PdfDictionary _docCatDict

_docInfoDict

protected PdfDictionary _docInfoDict

_docTreeRoot

protected PageTreeNode _docTreeRoot

_pageLabelDict

protected PdfDictionary _pageLabelDict

_pageLabelRoot

protected PageLabelNode _pageLabelRoot

_embeddedFiles

protected NameTreeNode _embeddedFiles

_destNames

protected NameTreeNode _destNames

_encryptDict

protected PdfDictionary _encryptDict

_trailerDict

protected PdfDictionary _trailerDict

_viewPrefDict

protected PdfDictionary _viewPrefDict

_outlineDict

protected PdfDictionary _outlineDict

_destsDict

protected PdfDictionary _destsDict

_showFonts

protected boolean _showFonts

_showOutlines

protected boolean _showOutlines

_showAnnotations

protected boolean _showAnnotations

_showPages

protected boolean _showPages

_actionsExist

protected boolean _actionsExist

_pdfACompliant

protected boolean _pdfACompliant

_recursionWarned

protected boolean _recursionWarned

_skippedFontsReported

protected boolean _skippedFontsReported

_skippedOutlinesReported

protected boolean _skippedOutlinesReported

_skippedAnnotationsReported

protected boolean _skippedAnnotationsReported

_skippedPagesReported

protected boolean _skippedPagesReported

_profile

protected java.util.List _profile
List of profile checkers


_cachedObjectStream

protected ObjectStream _cachedObjectStream
Cached object stream.


_cachedStreamIndex

protected int _cachedStreamIndex
Object number of cached object stream.


_visitedOutlineNodes

protected java.util.Set _visitedOutlineNodes
Map of visited nodes when walking through an outline.


maxFonts

protected int maxFonts
maximum number of fonts to report full information on.


_nFonts

protected int _nFonts
Number of fonts reported so far.


outlinesRecursiveString

protected static final java.lang.String outlinesRecursiveString
See Also:
Constant Field Values
Constructor Detail

PdfModule

public PdfModule()
Creates an instance of the module and initializes identifying information.

Method Detail

resetParams

public void resetParams()
                 throws java.lang.Exception
Reset parameter settings. Returns to a default state without any parameters.

Specified by:
resetParams in interface Module
Overrides:
resetParams in class ModuleBase
Throws:
java.lang.Exception

param

public void param(java.lang.String param)
Per-action initialization. May be called multiple times.

Specified by:
param in interface Module
Overrides:
param in class ModuleBase
Parameters:
param - The module parameter; under command-line Jhove, the -p parameter. If the parameter contains the indicated characters, then the specified information is omitted; otherwise, it is included. (This is the reverse of the behavior prior to beta 3.) These characters may be provided as separate parameters, or all in a single parameter.
  • a: annotations
  • f: fonts
  • o: outlines
  • p: pages

The parameter is case-independent. A null parameter is equivalent to the empty string.

parse

public final void parse(java.io.RandomAccessFile raf,
                        RepInfo info)
                 throws java.io.IOException
Parse a file and stores descriptive information. A RandomAccessFile must be used to represent the object.

Specified by:
parse in interface Module
Overrides:
parse in class ModuleBase
Parameters:
raf - A PDF file
info - A clean RepInfo object, which will be modified to hold the descriptive information
Throws:
java.io.IOException

mayBePDFACompliant

public boolean mayBePDFACompliant()
Returns true if the module hasn't detected any violations of PDF/A compliance. This must return true, but is not sufficient by itself, to establish compliance. The AProfile profiler makes the final determination.


getDocumentTree

public PageTreeNode getDocumentTree()
Returns the document tree root.


getDocInfo

public PdfDictionary getDocInfo()
Returns the document information dictionary.


getEncryptionDict

public PdfDictionary getEncryptionDict()
Returns the encryption dictionary.


getActionsExist

public boolean getActionsExist()
Return true if Actions have been detected in the file.


initParse

protected final void initParse()
Initialize the module. This is called at the start of parse restore the module to its initial state.

Overrides:
initParse in class ModuleBase

parseHeader

protected boolean parseHeader(RepInfo info)
                       throws java.io.IOException
Throws:
java.io.IOException

findLastTrailer

protected boolean findLastTrailer(RepInfo info)
                           throws java.io.IOException
Locate the last trailer of the file

Throws:
java.io.IOException

parseTrailer

protected boolean parseTrailer(RepInfo info,
                               boolean prevOnly)
                        throws java.io.IOException
Throws:
java.io.IOException

readXRefInfo

protected boolean readXRefInfo(RepInfo info)
                        throws java.io.IOException
Throws:
java.io.IOException

readXRefStreams

protected boolean readXRefStreams(RepInfo info)
                           throws java.io.IOException
Throws:
java.io.IOException

readXRefTables

protected boolean readXRefTables(RepInfo info)
                          throws java.io.IOException
Throws:
java.io.IOException

readDocCatalogDict

protected boolean readDocCatalogDict(RepInfo info)
                              throws java.io.IOException
Throws:
java.io.IOException

readEncryptDict

protected boolean readEncryptDict(RepInfo info)
                           throws java.io.IOException
Throws:
java.io.IOException

readDocInfoDict

protected boolean readDocInfoDict(RepInfo info)
                           throws java.io.IOException
Throws:
java.io.IOException

readDocumentTree

protected boolean readDocumentTree(RepInfo info)
                            throws java.io.IOException
Throws:
java.io.IOException

readPageLabelTree

protected boolean readPageLabelTree(RepInfo info)

readXMPData

protected boolean readXMPData(RepInfo info)

findExternalStreams

protected void findExternalStreams(RepInfo info)
                            throws java.io.IOException
Throws:
java.io.IOException

findFilters

protected boolean findFilters(RepInfo info)
                       throws java.io.IOException
Locates the filters in the content stream dictionaries and generate a list of unique pipelines.

Returns:
false if the filter structure is defective.
Throws:
java.io.IOException

extractFilters

protected java.lang.String extractFilters(Filter[] filters,
                                          PdfStream stream)
Finds the filters in a stream or array object which is the value of a stream's Filter key, and put them in _filtersList if a duplicate isn't there already. If the name is "Crypt", appends a colon and the name if available. Returns the filter string whether it's added or not, or null if there are no filters.


findImages

protected void findImages(RepInfo info)
                   throws java.io.IOException
Throws:
java.io.IOException

nameToNiso

protected int nameToNiso(java.lang.String name,
                         java.lang.String[] nameArray,
                         int[] valArray)

findFonts

protected void findFonts(RepInfo info)
                  throws java.io.IOException
Throws:
java.io.IOException

addFontToMap

protected java.lang.String addFontToMap(PdfDictionary font)
Add the font to the appropriate map, and return its subtype. If we've exceeded the maximum number of fonts, then ignore it.


toHex

protected static java.lang.String toHex(java.lang.String s)
PRIVATE CLASS METHODS.


toHex

protected static java.lang.String toHex(java.util.Vector v)

resolveIndirectObject

public PdfObject resolveIndirectObject(PdfObject indObj)
                                throws PdfException,
                                       java.io.IOException
If the argument is an indirect object reference, returns the object it resolves to, otherwise returns the object itself. In particular, calling with null will return null.

Throws:
PdfException
java.io.IOException

getObject

protected PdfObject getObject(int objIndex,
                              int recGuard)
                       throws PdfException,
                              java.io.IOException
Returns an object of a given number. This may involve recursion into object streams, in which case it calls itself.

Parameters:
objIndex - The object number to look up
recGuard - The maximum permitted number of recursion levels; no particular value is required, but 30 or more should avoid false exceptions.
Throws:
PdfException
java.io.IOException

getFile

public java.io.RandomAccessFile getFile()
Return the RandomAccessFile being read.


getCatalogDict

public PdfDictionary getCatalogDict()
Returns the catalog dictionary object.


getTrailerDict

public PdfDictionary getTrailerDict()
Returns the trailer dictionary object.


getViewPrefDict

public PdfDictionary getViewPrefDict()
Returns the viewer preferences dictionary object.


getOutlineDict

public PdfDictionary getOutlineDict()
Returns the outlines dictionary object.


getFontMap

public java.util.Map getFontMap(int selector)
Get a font map. The map returned is determined by the selector. Any other value returns null.


getFontMaps

public java.util.List getFontMaps()
Return a List of all the font maps. Together, these contain all the fonts and subfonts in the document. Some of the maps may be null.


getEmbeddedFiles

public NameTreeNode getEmbeddedFiles()
Returns a NameTreeNode for the EmbeddedFiles entry of the Names dictionary. Returns null if there isn't one.


addFontsProperty

protected void addFontsProperty(java.util.List metadataList)
Add the various font lists as a fonts property. Note: only add the "Fonts" property if there are, in fact, fonts defined.


addPagesProperty

protected void addPagesProperty(java.util.List metadataList,
                                RepInfo info)

buildPageProperty

protected Property buildPageProperty(PageObject page,
                                     int idx,
                                     RepInfo info)
                              throws PdfException
Throws:
PdfException

buildPageLabelProperty

protected Property buildPageLabelProperty(PageObject page,
                                          int pageIndex,
                                          int[] nomNumRef)
                                   throws PdfException
Throws:
PdfException

buildMeasureProperty

protected Property buildMeasureProperty(PdfDictionary meas)

buildAnnotProperty

protected Property buildAnnotProperty(PdfDictionary annot,
                                      RepInfo info)
                               throws PdfException
Throws:
PdfException

addDestination

protected void addDestination(PdfObject itemObj,
                              java.lang.String propName,
                              java.util.List propList,
                              RepInfo info)
                       throws PdfException
Throws:
PdfException

buildFontProperty

protected Property buildFontProperty(java.lang.String name,
                                     java.util.Map map,
                                     int fontType)

oneFontPropList

protected java.util.List oneFontPropList(PdfDictionary dict,
                                         int fontType)

buildCMapDictProperty

protected Property buildCMapDictProperty(PdfStream encoding)

buildCIDInfoProperty

protected Property buildCIDInfoProperty(PdfDictionary dict)

buildEncodingDictProperty

protected Property buildEncodingDictProperty(PdfDictionary encodingDict)

buildFontDescriptorProperty

protected Property buildFontDescriptorProperty(PdfDictionary encodingDict)

buildViewPrefProperty

protected Property buildViewPrefProperty(PdfDictionary prefDict)

isFontSubset

protected boolean isFontSubset(java.lang.String baseStr)

buildOutlinesProperty

protected Property buildOutlinesProperty(PdfDictionary dict,
                                         RepInfo info)
                                  throws PdfException
Throws:
PdfException

buildOutlineItemProperty

protected Property buildOutlineItemProperty(PdfDictionary dict,
                                            RepInfo info)
                                     throws PdfException
Throws:
PdfException

doOutlineStuff

protected boolean doOutlineStuff(RepInfo info)

resolveIndirectDest

protected int resolveIndirectDest(PdfSimpleObject key)
                           throws PdfException
Throws:
PdfException

buildUserPermProperty

protected Property buildUserPermProperty(int flags,
                                         java.lang.String[] flagStrs)

addStringProperty

protected void addStringProperty(PdfDictionary dict,
                                 java.util.List propList,
                                 java.lang.String key,
                                 java.lang.String propName)
Add a string proprerty, based on a dictionary entry with a string value, to a specified List.


addDateProperty

protected void addDateProperty(PdfDictionary dict,
                               java.util.List propList,
                               java.lang.String key,
                               java.lang.String propName)
                        throws PdfException
Add a date proprerty, based on a dictionary entry with a string value, to a specified List.

Throws:
PdfException

buildBitmaskProperty

protected Property buildBitmaskProperty(int val,
                                        java.lang.String name,
                                        java.lang.String[] valueNames,
                                        java.lang.String defaultStr)

makeRectProperty

protected Property makeRectProperty(PdfArray arrObj,
                                    java.lang.String name)
                             throws PdfException
Throws:
PdfException


jhove/doc/edu/harvard/hul/ois/jhove/module/TiffException.html0000644000707400001440000002063610771557556023500 0ustar garyusers TiffException

edu.harvard.hul.ois.jhove.module
Class TiffException

java.lang.Object
  |
  +--java.lang.Throwable
        |
        +--java.lang.Exception
              |
              +--edu.harvard.hul.ois.jhove.module.TiffException
All Implemented Interfaces:
java.io.Serializable

public final class TiffException
extends java.lang.Exception

See Also:
Serialized Form

Constructor Summary
TiffException(java.lang.String m)
           
 
Methods inherited from class java.lang.Throwable
fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

TiffException

public TiffException(java.lang.String m)


jhove/doc/edu/harvard/hul/ois/jhove/module/TiffModule.html0000644000707400001440000013314711510702353022744 0ustar garyusers TiffModule (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module
Class TiffModule

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.ModuleBase
      extended by edu.harvard.hul.ois.jhove.module.TiffModule
All Implemented Interfaces:
Module

public class TiffModule
extends ModuleBase

Module for identification and validation of TIFF files.


Field Summary
protected  boolean _byteOffsetIsValid
           
protected  boolean _dngRawFlag
          Special flag for DNG profiles; is raw IFD profile satisfied
protected  boolean _dngThumbnailFlag
          Special flag for DNG profiles; is "thumbnail" (IFD 0) profile satisfied
protected  boolean _exifFirstFlag
          Special flag for Exif profiles: Is main IFD profile satisfied
protected  boolean _exifThumbnailFlag
          Special flag for Exif profiles: Is thumbnail IFD profile satisfied
protected  java.util.List _profile
          List of profile checkers.
protected  java.io.RandomAccessFile _raf
          Open TIFF file.
protected  int _version
          TIFF version.
 
Fields inherited from class edu.harvard.hul.ois.jhove.ModuleBase
_app, _bigEndian, _checksumFinished, _countStream, _coverage, _crc32, _date, _defaultParams, _features, _format, _init, _isRandomAccess, _je, _logger, _md5, _mimeType, _name, _nByte, _note, _param, _release, _repInfoNote, _rights, _sha1, _signature, _specification, _validityNote, _vendor, _verbosity, _wellFormedNote
 
Fields inherited from interface edu.harvard.hul.ois.jhove.Module
MAXIMUM_VERBOSITY, MINIMUM_VERBOSITY
 
Constructor Summary
TiffModule()
          Instantiate a object.
 
Method Summary
protected  void buildProfileList()
          Build list of profiles to check.
protected  void checkValidity(java.util.List ifds, RepInfo info)
          Go through all the IFD's, calling checkIFDValidity on each one that is a standard IFD.
protected  void checkValidity(TiffIFD ifd, RepInfo info)
          Check the validity of the IFD.
 java.util.List exifParse(java.io.RandomAccessFile raf, RepInfo info)
          Special-purpose, limited parser for embedded Exif files.
protected  void initParse()
          Initializes the state of the module for parsing.
 void parse(java.io.RandomAccessFile raf, RepInfo info)
          Parse the TIFF for well-formedness and validity, accumulating representation information.
protected  IFD parseIFDChain(long next, RepInfo info, int type, java.util.List list, boolean suppressErrors)
           
protected  java.util.List parseIFDs(long offset, RepInfo info)
          Parse all IFDs in the file, accumulating representation information.
protected  java.util.List parseIFDs(long offset, RepInfo info, boolean suppressErrors, int ifdType)
          Parse all IFDs in the file, accumulating representation information.
protected  void reportInvalid(java.lang.String s, RepInfo info)
          Report an instance of invalidity.
protected  int selectMimeTypeIndex()
          Return the index into _mimeType which should be used for the MIME type property.
 void setByteOffsetValid(boolean v)
          Allow odd offsets in values
 
Methods inherited from class edu.harvard.hul.ois.jhove.ModuleBase
addIntegerProperty, addIntegerProperty, applyDefaultParams, calcRAChecksum, checkSignatures, checkSignatures, getApp, getBase, getBufferedDataStream, getCoverage, getCRC32, getDate, getDefaultParams, getFeatures, getFormat, getMimeType, getName, getNByte, getNote, getRelease, getRepInfoNote, getRights, getSignature, getSpecification, getValidityNote, getVendor, getWellFormedNote, hasFeature, init, initFeatures, isBigEndian, isRandomAccess, param, parse, readByteBuf, readDouble, readDouble, readDouble, readFloat, readFloat, readSignedByte, readSignedByte, readSignedByte, readSignedInt, readSignedInt, readSignedInt, readSignedLong, readSignedRational, readSignedRational, readSignedShort, readSignedShort, readSignedShort, readUnsignedByte, readUnsignedByte, readUnsignedByte, readUnsignedInt, readUnsignedInt, readUnsignedInt, readUnsignedRational, readUnsignedRational, readUnsignedRational, readUnsignedShort, readUnsignedShort, readUnsignedShort, resetParams, setApp, setBase, setChecksums, setCRC32, setDefaultParams, setMD5, setNByte, setSHA1, setValidityNote, setVerbosity, show, skipBytes, skipBytes, vectorToPropArray
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

_profile

protected java.util.List _profile
List of profile checkers.


_exifFirstFlag

protected boolean _exifFirstFlag
Special flag for Exif profiles: Is main IFD profile satisfied


_exifThumbnailFlag

protected boolean _exifThumbnailFlag
Special flag for Exif profiles: Is thumbnail IFD profile satisfied


_dngThumbnailFlag

protected boolean _dngThumbnailFlag
Special flag for DNG profiles; is "thumbnail" (IFD 0) profile satisfied


_dngRawFlag

protected boolean _dngRawFlag
Special flag for DNG profiles; is raw IFD profile satisfied


_raf

protected java.io.RandomAccessFile _raf
Open TIFF file.


_version

protected int _version
TIFF version.


_byteOffsetIsValid

protected boolean _byteOffsetIsValid
Constructor Detail

TiffModule

public TiffModule()
Instantiate a object.

Method Detail

parse

public final void parse(java.io.RandomAccessFile raf,
                        RepInfo info)
                 throws java.io.IOException
Parse the TIFF for well-formedness and validity, accumulating representation information.

Specified by:
parse in interface Module
Overrides:
parse in class ModuleBase
Parameters:
raf - Open TIFF file
info - Representation informatino
Throws:
java.io.IOException

setByteOffsetValid

public void setByteOffsetValid(boolean v)
Allow odd offsets in values


exifParse

public final java.util.List exifParse(java.io.RandomAccessFile raf,
                                      RepInfo info)
                               throws java.io.IOException
Special-purpose, limited parser for embedded Exif files.

Parameters:
raf - Open TIFF file
info - Representation informatino
Throws:
java.io.IOException

buildProfileList

protected void buildProfileList()
Build list of profiles to check. Profile checking is, for the most part, done per IFD rather than per file. Exif profile checking is an exception, since it requires the coordination of multiple IFD's. Hence, the Exif profiles aren't added to the list, but treated elsewhere.


checkValidity

protected void checkValidity(java.util.List ifds,
                             RepInfo info)
Go through all the IFD's, calling checkIFDValidity on each one that is a standard IFD. (Private IFD's have different requirements, and for the moment aren't checked here.) If any of them are invalid, set info's valid field to false. Validity problems are non-fatal, and more information is better, so we keep going with all IFDs even if we find problems.


checkValidity

protected void checkValidity(TiffIFD ifd,
                             RepInfo info)
                      throws TiffException
Check the validity of the IFD.

Parameters:
ifd - IFD
Throws:
TiffException

reportInvalid

protected void reportInvalid(java.lang.String s,
                             RepInfo info)
Report an instance of invalidity.


parseIFDs

protected java.util.List parseIFDs(long offset,
                                   RepInfo info)
                            throws TiffException
Parse all IFDs in the file, accumulating representation information.

Parameters:
offset - Starting byte offset
info - Representation information
Throws:
TiffException

parseIFDs

protected java.util.List parseIFDs(long offset,
                                   RepInfo info,
                                   boolean suppressErrors,
                                   int ifdType)
                            throws TiffException
Parse all IFDs in the file, accumulating representation information.

Parameters:
offset - Starting byte offset
info - Representation information
suppressErrors - If true, use IFD even if it has errors
Throws:
TiffException

parseIFDChain

protected IFD parseIFDChain(long next,
                            RepInfo info,
                            int type,
                            java.util.List list,
                            boolean suppressErrors)
                     throws TiffException
Throws:
TiffException

initParse

protected void initParse()
Initializes the state of the module for parsing. This overrides the superclass method to reset all the profile flags.

Overrides:
initParse in class ModuleBase

selectMimeTypeIndex

protected int selectMimeTypeIndex()
Return the index into _mimeType which should be used for the MIME type property. This must be called after all the profiles have been checked. An index of 0 is dominant; if any profiles return 0 from their getMimeClass method, or if conflicting values are returned by different satisfied profiles, then we return 0.



jhove/doc/edu/harvard/hul/ois/jhove/module/Utf8Block.html0000644000707400001440000003207111510702353022501 0ustar garyusers Utf8Block (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module
Class Utf8Block

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.Utf8Block

public class Utf8Block
extends java.lang.Object

This class encapsulates a Unicode code block.

See Also:
Utf8Module

Field Summary
static Utf8Block[] unicodeBlock
          Unicode 6.0.0 blocks, derived from <http://www.unicode.org/Public/3.2-Update/Blocks-3.2.0.txt> and updated to Unicode 6.0.0
 
Constructor Summary
Utf8Block(int start, int end, java.lang.String name)
          Creates a Utf8Block, specifying the start and end codes and block name.
 
Method Summary
 int getEnd()
          Returns the end code.
 java.lang.String getName()
          Returns the block name.
 int getStart()
          Returns the start code.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

unicodeBlock

public static final Utf8Block[] unicodeBlock
Unicode 6.0.0 blocks, derived from <http://www.unicode.org/Public/3.2-Update/Blocks-3.2.0.txt> and updated to Unicode 6.0.0

Constructor Detail

Utf8Block

public Utf8Block(int start,
                 int end,
                 java.lang.String name)
Creates a Utf8Block, specifying the start and end codes and block name.

Parameters:
start - Start code as defined in the Unicode block specification
end - End code as defined in the Unicode block specification
name - Block name
Method Detail

getEnd

public int getEnd()
Returns the end code.


getName

public java.lang.String getName()
Returns the block name.


getStart

public int getStart()
Returns the start code.



jhove/doc/edu/harvard/hul/ois/jhove/module/Utf8Module.html0000644000707400001440000011400011510702353022665 0ustar garyusers Utf8Module (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module
Class Utf8Module

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.ModuleBase
      extended by edu.harvard.hul.ois.jhove.module.Utf8Module
All Implemented Interfaces:
Module

public class Utf8Module
extends ModuleBase

Module for analysis of content as a UTF-8 stream.


Field Summary
protected  java.util.Map _controlCharMap
           
protected  ChecksumInputStream _cstream
          PRIVATE INSTANCE FIELDS.
protected  java.io.DataInputStream _dstream
           
protected  boolean _lineEndCR
           
protected  boolean _lineEndCRLF
           
protected  boolean _lineEndLF
           
protected  int _prevChar
           
protected  TextMDMetadata _textMD
           
protected  boolean _withTextMD
           
protected  Utf8BlockMarker blockMarker
           
protected  int[] initialBytes
           
 
Fields inherited from class edu.harvard.hul.ois.jhove.ModuleBase
_app, _bigEndian, _checksumFinished, _countStream, _coverage, _crc32, _date, _defaultParams, _features, _format, _init, _isRandomAccess, _je, _logger, _md5, _mimeType, _name, _nByte, _note, _param, _release, _repInfoNote, _rights, _sha1, _signature, _specification, _validityNote, _vendor, _verbosity, _wellFormedNote
 
Fields inherited from interface edu.harvard.hul.ois.jhove.Module
MAXIMUM_VERBOSITY, MINIMUM_VERBOSITY
 
Constructor Summary
Utf8Module()
          Creates a Utf8Module.
 
Method Summary
protected  void checkLineEnd(int ch)
          Accumulate information about line endings.
protected  boolean checkMark(int byt, RepInfo info)
           
 void checkSignatures(java.io.File file, java.io.InputStream stream, RepInfo info)
          Check if the digital object conforms to this Module's internal signature information.
 int parse(java.io.InputStream stream, RepInfo info, int parseIndex)
          Parse the content of a stream digital object and store the results in RepInfo.
 
Methods inherited from class edu.harvard.hul.ois.jhove.ModuleBase
addIntegerProperty, addIntegerProperty, applyDefaultParams, calcRAChecksum, checkSignatures, getApp, getBase, getBufferedDataStream, getCoverage, getCRC32, getDate, getDefaultParams, getFeatures, getFormat, getMimeType, getName, getNByte, getNote, getRelease, getRepInfoNote, getRights, getSignature, getSpecification, getValidityNote, getVendor, getWellFormedNote, hasFeature, init, initFeatures, initParse, isBigEndian, isRandomAccess, param, parse, readByteBuf, readDouble, readDouble, readDouble, readFloat, readFloat, readSignedByte, readSignedByte, readSignedByte, readSignedInt, readSignedInt, readSignedInt, readSignedLong, readSignedRational, readSignedRational, readSignedShort, readSignedShort, readSignedShort, readUnsignedByte, readUnsignedByte, readUnsignedByte, readUnsignedInt, readUnsignedInt, readUnsignedInt, readUnsignedRational, readUnsignedRational, readUnsignedRational, readUnsignedShort, readUnsignedShort, readUnsignedShort, resetParams, setApp, setBase, setChecksums, setCRC32, setDefaultParams, setMD5, setNByte, setSHA1, setValidityNote, setVerbosity, show, skipBytes, skipBytes, vectorToPropArray
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

_cstream

protected ChecksumInputStream _cstream
PRIVATE INSTANCE FIELDS.


_dstream

protected java.io.DataInputStream _dstream

_lineEndCR

protected boolean _lineEndCR

_lineEndLF

protected boolean _lineEndLF

_lineEndCRLF

protected boolean _lineEndCRLF

_prevChar

protected int _prevChar

_controlCharMap

protected java.util.Map _controlCharMap

initialBytes

protected int[] initialBytes

blockMarker

protected Utf8BlockMarker blockMarker

_withTextMD

protected boolean _withTextMD

_textMD

protected TextMDMetadata _textMD
Constructor Detail

Utf8Module

public Utf8Module()
Creates a Utf8Module.

Method Detail

parse

public final int parse(java.io.InputStream stream,
                       RepInfo info,
                       int parseIndex)
                throws java.io.IOException
Parse the content of a stream digital object and store the results in RepInfo.

Specified by:
parse in interface Module
Overrides:
parse in class ModuleBase
Parameters:
stream - An InputStream, positioned at its beginning, which is generated from the object to be parsed. If multiple calls to parse are made on the basis of a nonzero value being returned, a new InputStream must be provided each time.
info - A fresh (on the first call) RepInfo object which will be modified to reflect the results of the parsing If multiple calls to parse are made on the basis of a nonzero value being returned, the same RepInfo object should be passed with each call.
parseIndex - Must be 0 in first call to parse. If parse returns a nonzero value, it must be called again with parseIndex equal to that return value.
Throws:
java.io.IOException

checkSignatures

public void checkSignatures(java.io.File file,
                            java.io.InputStream stream,
                            RepInfo info)
                     throws java.io.IOException
Check if the digital object conforms to this Module's internal signature information. Try to read the BOM if it's present, and check the beginning of the file.

Specified by:
checkSignatures in interface Module
Overrides:
checkSignatures in class ModuleBase
Parameters:
file - A File object for the object being parsed
stream - An InputStream, positioned at its beginning, which is generated from the object to be parsed
info - A fresh RepInfo object which will be modified to reflect the results of the test
Throws:
java.io.IOException

checkLineEnd

protected void checkLineEnd(int ch)
Accumulate information about line endings.

Parameters:
ch - Current character

checkMark

protected boolean checkMark(int byt,
                            RepInfo info)


jhove/doc/edu/harvard/hul/ois/jhove/module/WaveModule.html0000644000707400001440000021426611510702353022760 0ustar garyusers WaveModule (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module
Class WaveModule

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.ModuleBase
      extended by edu.harvard.hul.ois.jhove.module.WaveModule
All Implemented Interfaces:
Module

public class WaveModule
extends ModuleBase

Module for identification and validation of WAVE sound files. There is no published specification for WAVE files; this module is based on several Internet sources. WAVE format is a type of RIFF format. RIFF, in turn, is a variant on EA IFF 85.

Author:
Gary McGath

Field Summary
protected  AESAudioMetadata _aesMetadata
           
protected  int _blockAlign
           
protected  Checksummer _ckSummer
          PRIVATE INSTANCE FIELDS.
protected  ChecksumInputStream _cstream
           
protected  java.io.DataInputStream _dstream
           
protected  ExifInfo _exifInfo
           
protected  java.util.List _labeledText
           
protected  java.util.List _labels
           
protected  Property _metadata
           
protected  java.util.List _notes
           
protected  java.util.List _propList
           
protected  java.util.List _samples
           
protected  boolean broadcastExtChunkSeen
           
protected  int broadcastVersion
           
protected  long bytesRemaining
           
protected  boolean cartChunkSeen
           
protected  int compressionCode
           
protected  boolean cueChunkSeen
           
protected  boolean dataChunkSeen
           
protected  boolean factChunkSeen
           
protected  boolean firstSampleOffsetMarked
           
protected  boolean flagBroadcastWave
           
protected  boolean flagPCMWaveFormat
           
protected  boolean flagWaveFormatEx
           
protected  boolean flagWaveFormatExtensible
           
protected  boolean formatChunkSeen
           
protected  boolean instrumentChunkSeen
           
protected  boolean linkChunkSeen
           
protected  boolean mpegChunkSeen
           
protected  long numSamples
           
protected  boolean peakChunkSeen
           
protected  long sampleRate
           
 
Fields inherited from class edu.harvard.hul.ois.jhove.ModuleBase
_app, _bigEndian, _checksumFinished, _countStream, _coverage, _crc32, _date, _defaultParams, _features, _format, _init, _isRandomAccess, _je, _logger, _md5, _mimeType, _name, _nByte, _note, _param, _release, _repInfoNote, _rights, _sha1, _signature, _specification, _validityNote, _vendor, _verbosity, _wellFormedNote
 
Fields inherited from interface edu.harvard.hul.ois.jhove.Module
MAXIMUM_VERBOSITY, MINIMUM_VERBOSITY
 
Constructor Summary
WaveModule()
          Instantiates an WaveModule object.
 
Method Summary
 void addLabel(Property p)
          Adds a Label property
 void addLabeledText(Property p)
          Adds a LabeledText property
 void addListInfo(java.util.List l)
          Adds the ListInfo property, which is a List of String Properties.
 void addNote(Property p)
          Adds a Note string
 void addSample(Property p)
          Adds a Sample property
 void addSamples(long samples)
          Add to the number of data bytes.
 void addWaveProperty(Property prop)
          Adds a Property to the WAVE metadata.
 Property buildBitmaskProperty(int val, java.lang.String name, java.lang.String[] oneValueNames, java.lang.String[] zeroValueNames)
          General function for adding a property with a 32-bit value, with two arrays of Strings to interpret 0 and 1 values as a bitmask.
protected  void dupChunkError(RepInfo info, java.lang.String chunkName)
           
 AESAudioMetadata getAESMetadata()
          Returns the module's AES metadata.
 int getBlockAlign()
          Returns the number of bytes needed per aligned sample.
 int getCompressionCode()
          Returns the compression code.
 ExifInfo getExifInfo()
          Returns the ExifInfo object.
protected  void initParse()
          Initializes the state of the module for parsing.
 void markFirstSampleOffset()
          Marks the first sample offset as the current byte position, if it hasn't already been marked.
 int parse(java.io.InputStream stream, RepInfo info, int parseIndex)
          Parses the content of a purported WAVE digital object and stores the results in RepInfo.
 java.lang.String read4Chars(java.io.DataInputStream stream)
          Reads 4 bytes and concatenates them into a String.
protected  boolean readChunk(RepInfo info)
          Reads a WAVE Chunk.
 int readSignedInt(java.io.DataInputStream stream)
          One-argument version of readSignedInt.
 long readSignedLong(java.io.DataInputStream stream)
          One-argument version of readSignedLong.
 int readSignedShort(java.io.DataInputStream stream)
          One-argument version of readSignedShort.
 long readUnsignedInt(java.io.DataInputStream stream)
          One-argument version of readUnsignedInt.
 int readUnsignedShort(java.io.DataInputStream stream)
          One-argument version of readUnsignedShort.
 void setBlockAlign(int align)
          Set the number of bytes that holds an aligned sample.
 void setBroadcastVersion(int version)
          Set the version from the Broadcast Extension chunk.
 void setBroadcastWave(boolean b)
          Set the profile flag for Broadcast Wave.
 void setCompressionCode(int cf)
          Set the compression format.
 void setExifInfo(ExifInfo exifInfo)
          Sets an ExifInfo object for the module.
 void setPCMWaveFormat(boolean b)
          Set the profile flag for PCMWAVEFORMAT.
 void setSampleRate(long rate)
          Set the sample rate.
 void setWaveFormatEx(boolean b)
          Set the profile flag for WAVEFORMATEX.
 void setWaveFormatExtensible(boolean b)
          Set the profile flag for WAVEFORMATEXTENSIBLE.
 
Methods inherited from class edu.harvard.hul.ois.jhove.ModuleBase
addIntegerProperty, addIntegerProperty, applyDefaultParams, calcRAChecksum, checkSignatures, checkSignatures, getApp, getBase, getBufferedDataStream, getCoverage, getCRC32, getDate, getDefaultParams, getFeatures, getFormat, getMimeType, getName, getNByte, getNote, getRelease, getRepInfoNote, getRights, getSignature, getSpecification, getValidityNote, getVendor, getWellFormedNote, hasFeature, init, initFeatures, isBigEndian, isRandomAccess, param, parse, readByteBuf, readDouble, readDouble, readDouble, readFloat, readFloat, readSignedByte, readSignedByte, readSignedByte, readSignedInt, readSignedInt, readSignedInt, readSignedLong, readSignedRational, readSignedRational, readSignedShort, readSignedShort, readSignedShort, readUnsignedByte, readUnsignedByte, readUnsignedByte, readUnsignedInt, readUnsignedInt, readUnsignedInt, readUnsignedRational, readUnsignedRational, readUnsignedRational, readUnsignedShort, readUnsignedShort, readUnsignedShort, resetParams, setApp, setBase, setChecksums, setCRC32, setDefaultParams, setMD5, setNByte, setSHA1, setValidityNote, setVerbosity, show, skipBytes, skipBytes, vectorToPropArray
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

_ckSummer

protected Checksummer _ckSummer
PRIVATE INSTANCE FIELDS.


_cstream

protected ChecksumInputStream _cstream

_dstream

protected java.io.DataInputStream _dstream

_metadata

protected Property _metadata

_propList

protected java.util.List _propList

_notes

protected java.util.List _notes

_labels

protected java.util.List _labels

_labeledText

protected java.util.List _labeledText

_samples

protected java.util.List _samples

_aesMetadata

protected AESAudioMetadata _aesMetadata

bytesRemaining

protected long bytesRemaining

_blockAlign

protected int _blockAlign

_exifInfo

protected ExifInfo _exifInfo

compressionCode

protected int compressionCode

numSamples

protected long numSamples

sampleRate

protected long sampleRate

formatChunkSeen

protected boolean formatChunkSeen

factChunkSeen

protected boolean factChunkSeen

dataChunkSeen

protected boolean dataChunkSeen

instrumentChunkSeen

protected boolean instrumentChunkSeen

mpegChunkSeen

protected boolean mpegChunkSeen

cartChunkSeen

protected boolean cartChunkSeen

broadcastExtChunkSeen

protected boolean broadcastExtChunkSeen

peakChunkSeen

protected boolean peakChunkSeen

linkChunkSeen

protected boolean linkChunkSeen

cueChunkSeen

protected boolean cueChunkSeen

flagPCMWaveFormat

protected boolean flagPCMWaveFormat

flagWaveFormatEx

protected boolean flagWaveFormatEx

flagWaveFormatExtensible

protected boolean flagWaveFormatExtensible

flagBroadcastWave

protected boolean flagBroadcastWave

broadcastVersion

protected int broadcastVersion

firstSampleOffsetMarked

protected boolean firstSampleOffsetMarked
Constructor Detail

WaveModule

public WaveModule()
Instantiates an WaveModule object.

Method Detail

parse

public int parse(java.io.InputStream stream,
                 RepInfo info,
                 int parseIndex)
          throws java.io.IOException
Parses the content of a purported WAVE digital object and stores the results in RepInfo.

Specified by:
parse in interface Module
Overrides:
parse in class ModuleBase
Parameters:
stream - An InputStream, positioned at its beginning, which is generated from the object to be parsed
info - A fresh RepInfo object which will be modified to reflect the results of the parsing
parseIndex - Must be 0 in first call to parse. If parse returns a nonzero value, it must be called again with parseIndex equal to that return value.
Throws:
java.io.IOException

markFirstSampleOffset

public void markFirstSampleOffset()
Marks the first sample offset as the current byte position, if it hasn't already been marked.


setExifInfo

public void setExifInfo(ExifInfo exifInfo)
Sets an ExifInfo object for the module.


setBlockAlign

public void setBlockAlign(int align)
Set the number of bytes that holds an aligned sample.


getExifInfo

public ExifInfo getExifInfo()
Returns the ExifInfo object. If no ExifInfo object has been set, returns null.


getCompressionCode

public int getCompressionCode()
Returns the compression code.


getBlockAlign

public int getBlockAlign()
Returns the number of bytes needed per aligned sample.


addWaveProperty

public void addWaveProperty(Property prop)
Adds a Property to the WAVE metadata.


addLabel

public void addLabel(Property p)
Adds a Label property


addLabeledText

public void addLabeledText(Property p)
Adds a LabeledText property


addSample

public void addSample(Property p)
Adds a Sample property


addNote

public void addNote(Property p)
Adds a Note string


addListInfo

public void addListInfo(java.util.List l)
Adds the ListInfo property, which is a List of String Properties.


readSignedLong

public long readSignedLong(java.io.DataInputStream stream)
                    throws java.io.IOException
One-argument version of readSignedLong. WAVE is always little-endian, so readSignedInt can unambiguously drop its endian argument.

Throws:
java.io.IOException

readUnsignedInt

public long readUnsignedInt(java.io.DataInputStream stream)
                     throws java.io.IOException
One-argument version of readUnsignedInt. WAVE is always little-endian, so readUnsignedInt can unambiguously drop its endian argument.

Throws:
java.io.IOException

readSignedInt

public int readSignedInt(java.io.DataInputStream stream)
                  throws java.io.IOException
One-argument version of readSignedInt. WAVE is always little-endian, so readSignedInt can unambiguously drop its endian argument.

Throws:
java.io.IOException

readUnsignedShort

public int readUnsignedShort(java.io.DataInputStream stream)
                      throws java.io.IOException
One-argument version of readUnsignedShort. WAVE is always little-endian, so readUnsignedShort can unambiguously drop its endian argument.

Throws:
java.io.IOException

readSignedShort

public int readSignedShort(java.io.DataInputStream stream)
                    throws java.io.IOException
One-argument version of readSignedShort. WAVE is always little-endian, so readSignedShort can unambiguously drop its endian argument.

Throws:
java.io.IOException

read4Chars

public java.lang.String read4Chars(java.io.DataInputStream stream)
                            throws java.io.IOException
Reads 4 bytes and concatenates them into a String. This pattern is used for ID's of various kinds.

Throws:
java.io.IOException

setCompressionCode

public void setCompressionCode(int cf)
Set the compression format. Called from the Format chunk.


addSamples

public void addSamples(long samples)
Add to the number of data bytes. This may be called multiple times to give a cumulative total.


setSampleRate

public void setSampleRate(long rate)
Set the sample rate.


setPCMWaveFormat

public void setPCMWaveFormat(boolean b)
Set the profile flag for PCMWAVEFORMAT.


setWaveFormatEx

public void setWaveFormatEx(boolean b)
Set the profile flag for WAVEFORMATEX.


setWaveFormatExtensible

public void setWaveFormatExtensible(boolean b)
Set the profile flag for WAVEFORMATEXTENSIBLE.


setBroadcastWave

public void setBroadcastWave(boolean b)
Set the profile flag for Broadcast Wave.


setBroadcastVersion

public void setBroadcastVersion(int version)
Set the version from the Broadcast Extension chunk.


initParse

protected void initParse()
Initializes the state of the module for parsing.

Overrides:
initParse in class ModuleBase

readChunk

protected boolean readChunk(RepInfo info)
                     throws java.io.IOException
Reads a WAVE Chunk.

Throws:
java.io.IOException

getAESMetadata

public AESAudioMetadata getAESMetadata()
Returns the module's AES metadata.


dupChunkError

protected void dupChunkError(RepInfo info,
                             java.lang.String chunkName)

buildBitmaskProperty

public Property buildBitmaskProperty(int val,
                                     java.lang.String name,
                                     java.lang.String[] oneValueNames,
                                     java.lang.String[] zeroValueNames)
General function for adding a property with a 32-bit value, with two arrays of Strings to interpret 0 and 1 values as a bitmask.

Parameters:
val - The bitmask
name - The name for the Property
oneValueNames - Array of names to use for '1' values
zeroValueNames - Array of names to use for '0' values


jhove/doc/edu/harvard/hul/ois/jhove/module/XmlModule.html0000644000707400001440000013005211510702353022604 0ustar garyusers XmlModule (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module
Class XmlModule

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.ModuleBase
      extended by edu.harvard.hul.ois.jhove.module.XmlModule
All Implemented Interfaces:
Module

public class XmlModule
extends ModuleBase

Module for identification and validation of XML files.

Author:
Gary McGath

Field Summary
protected  java.lang.String _baseURL
           
protected  Checksummer _ckSummer
          PRIVATE INSTANCE FIELDS.
protected  ChecksumInputStream _cstream
           
protected  java.io.DataInputStream _dstream
           
protected  Property _metadata
           
protected  boolean _parseFromSig
           
protected  java.util.List _propList
           
protected  boolean _sigWantsDecl
           
protected  TextMDMetadata _textMD
           
protected  boolean _withTextMD
           
protected  java.lang.String _xhtmlDoctype
           
 
Fields inherited from class edu.harvard.hul.ois.jhove.ModuleBase
_app, _bigEndian, _checksumFinished, _countStream, _coverage, _crc32, _date, _defaultParams, _features, _format, _init, _isRandomAccess, _je, _logger, _md5, _mimeType, _name, _nByte, _note, _param, _release, _repInfoNote, _rights, _sha1, _signature, _specification, _validityNote, _vendor, _verbosity, _wellFormedNote
 
Fields inherited from interface edu.harvard.hul.ois.jhove.Module
MAXIMUM_VERBOSITY, MINIMUM_VERBOSITY
 
Constructor Summary
XmlModule()
          Instantiate an XmlModule object.
 
Method Summary
 void checkSignatures(java.io.File file, java.io.InputStream stream, RepInfo info)
          Check if the digital object conforms to this Module's internal signature information.
protected  void initParse()
          Initializes the state of the module for parsing.
protected static java.lang.String intTo4DigitHex(int n)
           
protected static boolean isNotEmpty(java.lang.String value)
          Verification that the string contains something usefull.
protected static boolean nameInCollection(java.lang.String name, java.util.Collection coll)
           
 void param(java.lang.String param)
          Per-action initialization.
 int parse(java.io.InputStream stream, RepInfo info, int parseIndex)
          Parse the content of a purported XML digital object and store the results in RepInfo.
 void resetParams()
          Reset parameter settings.
 void setXhtmlDoctype(java.lang.String doctype)
          Sets the value of the doctype string, assumed to have been forced to upper case.
 
Methods inherited from class edu.harvard.hul.ois.jhove.ModuleBase
addIntegerProperty, addIntegerProperty, applyDefaultParams, calcRAChecksum, checkSignatures, getApp, getBase, getBufferedDataStream, getCoverage, getCRC32, getDate, getDefaultParams, getFeatures, getFormat, getMimeType, getName, getNByte, getNote, getRelease, getRepInfoNote, getRights, getSignature, getSpecification, getValidityNote, getVendor, getWellFormedNote, hasFeature, init, initFeatures, isBigEndian, isRandomAccess, parse, readByteBuf, readDouble, readDouble, readDouble, readFloat, readFloat, readSignedByte, readSignedByte, readSignedByte, readSignedInt, readSignedInt, readSignedInt, readSignedLong, readSignedRational, readSignedRational, readSignedShort, readSignedShort, readSignedShort, readUnsignedByte, readUnsignedByte, readUnsignedByte, readUnsignedInt, readUnsignedInt, readUnsignedInt, readUnsignedRational, readUnsignedRational, readUnsignedRational, readUnsignedShort, readUnsignedShort, readUnsignedShort, setApp, setBase, setChecksums, setCRC32, setDefaultParams, setMD5, setNByte, setSHA1, setValidityNote, setVerbosity, show, skipBytes, skipBytes, vectorToPropArray
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

_ckSummer

protected Checksummer _ckSummer
PRIVATE INSTANCE FIELDS.


_cstream

protected ChecksumInputStream _cstream

_dstream

protected java.io.DataInputStream _dstream

_propList

protected java.util.List _propList

_metadata

protected Property _metadata

_xhtmlDoctype

protected java.lang.String _xhtmlDoctype

_baseURL

protected java.lang.String _baseURL

_sigWantsDecl

protected boolean _sigWantsDecl

_parseFromSig

protected boolean _parseFromSig

_withTextMD

protected boolean _withTextMD

_textMD

protected TextMDMetadata _textMD
Constructor Detail

XmlModule

public XmlModule()
Instantiate an XmlModule object.

Method Detail

setXhtmlDoctype

public void setXhtmlDoctype(java.lang.String doctype)
Sets the value of the doctype string, assumed to have been forced to upper case. This is set only when the HTML module invokes the XML module for an XHTML document.


resetParams

public void resetParams()
                 throws java.lang.Exception
Reset parameter settings. Returns to a default state without any parameters.

Specified by:
resetParams in interface Module
Overrides:
resetParams in class ModuleBase
Throws:
java.lang.Exception

param

public void param(java.lang.String param)
Per-action initialization.

Specified by:
param in interface Module
Overrides:
param in class ModuleBase
Parameters:
param - The module parameter; under command-line Jhove, the -p parameter. If the first character is 's', then signature checking requires a document declaration, and the rest of the URL is considered as follows. If the parameter begins with 'b' or 'B', then the remainder of the parameter is used as a base URL. Otherwise it is ignored, and there is no base URL.

parse

public int parse(java.io.InputStream stream,
                 RepInfo info,
                 int parseIndex)
          throws java.io.IOException
Parse the content of a purported XML digital object and store the results in RepInfo. This is designed to be called in two passes. On the first pass, a nonvalidating parse is done. If this succeeds, and the presence of DTD's or schemas is detected, then parse returns 1 so that it will be called again to do a validating parse. If there is nothing to validate, we consider it "valid."

Specified by:
parse in interface Module
Overrides:
parse in class ModuleBase
Parameters:
stream - An InputStream, positioned at its beginning, which is generated from the object to be parsed. If multiple calls to parse are made on the basis of a nonzero value being returned, a new InputStream must be provided each time.
info - A fresh (on the first call) RepInfo object which will be modified to reflect the results of the parsing If multiple calls to parse are made on the basis of a nonzero value being returned, the same RepInfo object should be passed with each call.
parseIndex - Must be 0 in first call to parse. If parse returns a nonzero value, it must be called again with parseIndex equal to that return value.
Throws:
java.io.IOException

checkSignatures

public void checkSignatures(java.io.File file,
                            java.io.InputStream stream,
                            RepInfo info)
                     throws java.io.IOException
Check if the digital object conforms to this Module's internal signature information. XML is a particularly messy case; in general, there's no even moderately good way to check "signatures" without parsing the whole file, since the document declaration is optional. We provide the user two choices, based on the "s" parameter. If 's' is the first character of the module parameter, then we look for an XML document declaration, and say there's no signature if it's missing. (This can reject well-formed XML files, though not valid ones.) Otherwise, if there's no document declaration, we parse the whole file.

Specified by:
checkSignatures in interface Module
Overrides:
checkSignatures in class ModuleBase
Parameters:
file - A File object for the object being parsed
stream - An InputStream, positioned at its beginning, which is generated from the object to be parsed
info - A fresh RepInfo object which will be modified to reflect the results of the test
Throws:
java.io.IOException

initParse

protected void initParse()
Description copied from class: ModuleBase
Initializes the state of the module for parsing. This should be called early in each module's parse() method. If a module overrides it to provide additional functionality, the module's initParse() should call super.initParse().

Overrides:
initParse in class ModuleBase

nameInCollection

protected static boolean nameInCollection(java.lang.String name,
                                          java.util.Collection coll)

intTo4DigitHex

protected static java.lang.String intTo4DigitHex(int n)

isNotEmpty

protected static boolean isNotEmpty(java.lang.String value)
Verification that the string contains something usefull.

Parameters:
value - string to test
Returns:
boolean


jhove/doc/edu/harvard/hul/ois/jhove/module/package-frame.html0000644000707400001440000000446611510702366023376 0ustar garyusers edu.harvard.hul.ois.jhove.module (JHOVE Documentation) edu.harvard.hul.ois.jhove.module
Classes 
AiffModule
AsciiModule
BytestreamModule
GifModule
HtmlModule
Jpeg2000Module
JpegModule
PdfModule
TiffModule
Utf8Block
Utf8Module
WaveModule
XmlModule
jhove/doc/edu/harvard/hul/ois/jhove/module/package-summary.html0000644000707400001440000002402411510702366023771 0ustar garyusers edu.harvard.hul.ois.jhove.module (JHOVE Documentation)

Package edu.harvard.hul.ois.jhove.module

Contains the main classes for JHOVE modules.

See:
          Description

Class Summary
AiffModule Module for identification and validation of AIFF files.
AsciiModule Module for analysis of content as an ASCII stream.
BytestreamModule Module for analysis of content as a byte stream.
GifModule Module for identification and validation of GIF files.
HtmlModule Module for identification and validation of HTML files.
Jpeg2000Module Module for identification and validation of JPEG 2000 files.
JpegModule Module for identification and validation of JPEG files.
PdfModule Module for identification and validation of PDF files.
TiffModule Module for identification and validation of TIFF files.
Utf8Block This class encapsulates a Unicode code block.
Utf8Module Module for analysis of content as a UTF-8 stream.
WaveModule Module for identification and validation of WAVE sound files.
XmlModule Module for identification and validation of XML files.
 

Package edu.harvard.hul.ois.jhove.module Description

Contains the main classes for JHOVE modules. All module classes are subclasses of ModuleBase.
Additional classes for some modules are found in subpackages of edu.harvard.hul.ois.jhove.module



jhove/doc/edu/harvard/hul/ois/jhove/module/package-tree.html0000644000707400001440000002133411510702366023234 0ustar garyusers edu.harvard.hul.ois.jhove.module Class Hierarchy (JHOVE Documentation)

Hierarchy For Package edu.harvard.hul.ois.jhove.module

Package Hierarchies:
All Packages

Class Hierarchy



jhove/doc/edu/harvard/hul/ois/jhove/module/gif/0000755000707400001440000000000011510702002020543 5ustar garyusersjhove/doc/edu/harvard/hul/ois/jhove/module/gif/GifStrings.html0000644000707400001440000003123111510702353023521 0ustar garyusers GifStrings (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.gif
Class GifStrings

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.gif.GifStrings

public class GifStrings
extends java.lang.Object

A class for holding arrays of informative strings that will go into properties of a GIF object.


Field Summary
static java.lang.String[] COLOR_TABLE_SORT_FLAG
          Strings for ordering or non-ordering of color table
static java.lang.String[] GCE_DISPOSAL_METHOD
          GIF Capabilities Enquiry string: way in which the graphic is to be treated after being displayed
static java.lang.String[] GCE_TRANSPARENCY_FLAG
          GIF Capabilities Enquiry string: transparency index given or not
static java.lang.String[] GCE_USER_INPUT_FLAG
          GIF Capabilities Enquiry string: user input expected or not
static java.lang.String[] GLOBAL_COLOR_TABLE_FLAG
          Strings for presence or absence of global color table
static java.lang.String[] INTERLACE_FLAG
          Image is interlaced or not
static java.lang.String[] LOCAL_COLOR_TABLE_FLAG
          Local color table present in image or not
 
Method Summary
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

GLOBAL_COLOR_TABLE_FLAG

public static final java.lang.String[] GLOBAL_COLOR_TABLE_FLAG
Strings for presence or absence of global color table


COLOR_TABLE_SORT_FLAG

public static final java.lang.String[] COLOR_TABLE_SORT_FLAG
Strings for ordering or non-ordering of color table


GCE_DISPOSAL_METHOD

public static final java.lang.String[] GCE_DISPOSAL_METHOD
GIF Capabilities Enquiry string: way in which the graphic is to be treated after being displayed


GCE_USER_INPUT_FLAG

public static final java.lang.String[] GCE_USER_INPUT_FLAG
GIF Capabilities Enquiry string: user input expected or not


GCE_TRANSPARENCY_FLAG

public static final java.lang.String[] GCE_TRANSPARENCY_FLAG
GIF Capabilities Enquiry string: transparency index given or not


LOCAL_COLOR_TABLE_FLAG

public static final java.lang.String[] LOCAL_COLOR_TABLE_FLAG
Local color table present in image or not


INTERLACE_FLAG

public static final java.lang.String[] INTERLACE_FLAG
Image is interlaced or not



jhove/doc/edu/harvard/hul/ois/jhove/module/gif/package-frame.html0000644000707400001440000000171611510702366024136 0ustar garyusers edu.harvard.hul.ois.jhove.module.gif (JHOVE Documentation) edu.harvard.hul.ois.jhove.module.gif
Classes 
GifStrings
jhove/doc/edu/harvard/hul/ois/jhove/module/gif/package-summary.html0000644000707400001440000001526711510702366024547 0ustar garyusers edu.harvard.hul.ois.jhove.module.gif (JHOVE Documentation)

Package edu.harvard.hul.ois.jhove.module.gif

Contains supporting classes for the GIF-HUL module.

See:
          Description

Class Summary
GifStrings A class for holding arrays of informative strings that will go into properties of a GIF object.
 

Package edu.harvard.hul.ois.jhove.module.gif Description

Contains supporting classes for the GIF-HUL module.



jhove/doc/edu/harvard/hul/ois/jhove/module/gif/package-tree.html0000644000707400001440000001416411510702366024004 0ustar garyusers edu.harvard.hul.ois.jhove.module.gif Class Hierarchy (JHOVE Documentation)

Hierarchy For Package edu.harvard.hul.ois.jhove.module.gif

Package Hierarchies:
All Packages

Class Hierarchy

  • java.lang.Object


jhove/doc/edu/harvard/hul/ois/jhove/module/html/0000755000707400001440000000000011510702003020743 5ustar garyusersjhove/doc/edu/harvard/hul/ois/jhove/module/html/CharStream.html0000644000707400001440000004270711510702353023704 0ustar garyusers CharStream (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.html
Interface CharStream

All Known Implementing Classes:
HtmlCharStream

public interface CharStream

This interface describes a character stream that maintains line and column number positions of the characters. It also has the capability to backup the stream to some extent. An implementation of this interface is used in the TokenManager implementation generated by JavaCCParser. All the methods except backup can be implemented in any fashion. backup needs to be implemented correctly for the correct operation of the lexer. Rest of the methods are all used to get information like line number, column number and the String that constitutes a token and are not used by the lexer. Hence their implementation won't affect the generated lexer's operation.


Method Summary
 void backup(int amount)
          Backs up the input stream by amount steps.
 char BeginToken()
          Returns the next character that marks the beginning of the next token.
 void Done()
          The lexer calls this function to indicate that it is done with the stream and hence implementations can free any resources held by this class.
 int getBeginColumn()
          Returns the column number of the first character for current token (being matched after the last call to BeginTOken).
 int getBeginLine()
          Returns the line number of the first character for current token (being matched after the last call to BeginTOken).
 int getColumn()
          Deprecated.  
 int getEndColumn()
          Returns the column number of the last character for current token (being matched after the last call to BeginTOken).
 int getEndLine()
          Returns the line number of the last character for current token (being matched after the last call to BeginTOken).
 java.lang.String GetImage()
          Returns a string made up of characters from the marked token beginning to the current buffer position.
 int getLine()
          Deprecated.  
 char[] GetSuffix(int len)
          Returns an array of characters that make up the suffix of length 'len' for the currently matched token.
 char readChar()
          Returns the next character from the selected input.
 

Method Detail

readChar

char readChar()
              throws java.io.IOException
Returns the next character from the selected input. The method of selecting the input is the responsibility of the class implementing this interface. Can throw any java.io.IOException.

Throws:
java.io.IOException

getColumn

int getColumn()
Deprecated. 

Returns the column position of the character last read.

See Also:
getEndColumn()

getLine

int getLine()
Deprecated. 

Returns the line number of the character last read.

See Also:
getEndLine()

getEndColumn

int getEndColumn()
Returns the column number of the last character for current token (being matched after the last call to BeginTOken).


getEndLine

int getEndLine()
Returns the line number of the last character for current token (being matched after the last call to BeginTOken).


getBeginColumn

int getBeginColumn()
Returns the column number of the first character for current token (being matched after the last call to BeginTOken).


getBeginLine

int getBeginLine()
Returns the line number of the first character for current token (being matched after the last call to BeginTOken).


backup

void backup(int amount)
Backs up the input stream by amount steps. Lexer calls this method if it had already read some characters, but could not use them to match a (longer) token. So, they will be used again as the prefix of the next token and it is the implemetation's responsibility to do this right.


BeginToken

char BeginToken()
                throws java.io.IOException
Returns the next character that marks the beginning of the next token. All characters must remain in the buffer between two successive calls to this method to implement backup correctly.

Throws:
java.io.IOException

GetImage

java.lang.String GetImage()
Returns a string made up of characters from the marked token beginning to the current buffer position. Implementations have the choice of returning anything that they want to. For example, for efficiency, one might decide to just return null, which is a valid implementation.


GetSuffix

char[] GetSuffix(int len)
Returns an array of characters that make up the suffix of length 'len' for the currently matched token. This is used to build up the matched string for use in actions in the case of MORE. A simple and inefficient implementation of this is as follows : { String t = GetImage(); return t.substring(t.length() - len, t.length()).toCharArray(); }


Done

void Done()
The lexer calls this function to indicate that it is done with the stream and hence implementations can free any resources held by this class. Again, the body of this function can be just empty and it will not affect the lexer's operation.



jhove/doc/edu/harvard/hul/ois/jhove/module/html/DTDMapper.html0000644000707400001440000002761511510702353023434 0ustar garyusers DTDMapper (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.html
Class DTDMapper

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.html.DTDMapper

public class DTDMapper
extends java.lang.Object

Class to map public DTD ID's to files which are included with this HTML module. This class is used by the XML module, due to the intermodulary nature of XHTML.

Author:
Gary McGath

Constructor Summary
DTDMapper()
           
 
Method Summary
static java.lang.String getXHTMLVersion(java.lang.String publicID)
          Returns the XHTML version associated with the DTD's public ID.
static boolean isXHTMLDTD(java.lang.String publicID)
          Returns TRUE if the parameter is the public ID of a known XHTML DTD.
static org.xml.sax.InputSource publicIDToFile(java.lang.String publicID)
          Attempts to convert a public ID to a matching DTD or Entity resource.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

DTDMapper

public DTDMapper()
Method Detail

publicIDToFile

public static org.xml.sax.InputSource publicIDToFile(java.lang.String publicID)
Attempts to convert a public ID to a matching DTD or Entity resource. Returns an InputStream for that resource if there is a match. Otherwise returns null.

Parameters:
publicID - The PUBLIC ID associated with a DTD or entity document

isXHTMLDTD

public static boolean isXHTMLDTD(java.lang.String publicID)
Returns TRUE if the parameter is the public ID of a known XHTML DTD.


getXHTMLVersion

public static java.lang.String getXHTMLVersion(java.lang.String publicID)
Returns the XHTML version associated with the DTD's public ID. Returns null if it isn't a known XHTML public ID.



jhove/doc/edu/harvard/hul/ois/jhove/module/html/Html3_2DocDesc.html0000644000707400001440000003241311510702353024301 0ustar garyusers Html3_2DocDesc (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.html
Class Html3_2DocDesc

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.html.HtmlDocDesc
      extended by edu.harvard.hul.ois.jhove.module.html.Html3_2DocDesc

public class Html3_2DocDesc
extends HtmlDocDesc

This class describes the requirements of an HTML 3.2 document.

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.html.HtmlDocDesc
bodyElement, commonTags, framesetElement, headElement, headings, htmlElement, supportedElements
 
Constructor Summary
Html3_2DocDesc()
          Constructor.
 
Method Summary
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.html.HtmlDocDesc
addRequiredAttribute, addSelfAttribute, addSimpleAttribute, addStringsToList, getMetadata, init, pushElementStack, removeStringsFromList, validate
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

Html3_2DocDesc

public Html3_2DocDesc()
Constructor.



jhove/doc/edu/harvard/hul/ois/jhove/module/html/Html4DocDesc.html0000644000707400001440000014002611510702354024062 0ustar garyusers Html4DocDesc (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.html
Class Html4DocDesc

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.html.HtmlDocDesc
      extended by edu.harvard.hul.ois.jhove.module.html.Html4DocDesc
Direct Known Subclasses:
Html4StrictDocDesc, Html4TFDocDesc

public abstract class Html4DocDesc
extends HtmlDocDesc

Abstract class for common features of HTML 4.0 and 4.01 documents.

Author:
Gary McGath

Field Summary
protected static java.util.List bigAttrs
          Big attributes list.
protected static java.util.List biggerAttrs
          Big attributes plus reserved attributes.
protected static java.util.List blockContent
          List of block elements.
protected static java.util.List bodyContent
          List of elements for the BODY element and some other elements.
protected static java.util.List coreAttrs
          Core attributes list.
protected static java.util.List eventAttrs
          Event attributes list.
protected static java.util.List flowContent
          List of flow elements.
protected static java.lang.String[] fontMarkup
          Names of font-related elements.
protected static java.lang.String[] formMarkup
          Names of form elements.
protected static HtmlAttributeDesc halignAtt
          Horizontal alignment attribute for cells.
protected static java.util.List i18nAttrs
          Internationalization attributes list.
protected static java.util.List inlineContent
          List of inline elements.
protected static java.util.List listContent
          List consisting of the LI element.
protected static java.lang.String[] listMarkup
          Names of list elements.
protected static java.lang.String[] phraseMarkup
          Names of phrase elements.
protected static java.util.List reservedAttrs
          Attributes described as "reserved for future use."
protected static java.lang.String[] specialMarkup
          Names of special elements.
protected static java.util.List thtdAtts
          Attributes for TH and TD elements
protected static HtmlAttributeDesc valignAtt
          Vertical alignment attribute for cells.
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.html.HtmlDocDesc
bodyElement, commonTags, framesetElement, headElement, headings, htmlElement, supportedElements
 
Constructor Summary
Html4DocDesc()
           
 
Method Summary
protected static void addAddressElement(java.util.Map stSupportedElements)
          Defines the ADDRESS element.
protected static void addBdoElement(java.util.Map stSupportedElements)
          Defines the BDO element.
protected static void addBodyElement(java.util.Map stSupportedElements)
          Defines the BODY element.
protected static void addColElement(java.util.Map stSupportedElements, java.util.List cellalignAttrs)
          Defines the COL element.
protected static void addColgroupElement(java.util.Map stSupportedElements, java.util.List cellalignAttrs)
          Defines the COLGROUP element.
protected static void addDdElement(java.util.Map stSupportedElements)
          Defines the DD element.
protected static void addDelElement(java.util.Map stSupportedElements)
          Defines the DEL element.
protected static void addDtElement(java.util.Map stSupportedElements)
          Defines the DT element.
protected static void addFieldsetElement(java.util.Map stSupportedElements)
          Defines the FIELDSET element.
protected static void addInsElement(java.util.Map stSupportedElements)
          Defines the INS element.
protected static void addLabelElement(java.util.Map stSupportedElements)
          Defines the LABEL element.
protected static void addMapElement(java.util.Map stSupportedElements)
          Defines the MAP element.
protected static void addMetaElement(java.util.Map stSupportedElements)
          Defines the META element.
protected static void addOptgroupElement(java.util.Map stSupportedElements)
          Defines the OPTGROUP (option group) element.
protected static void addOptionElement(java.util.Map stSupportedElements)
          Defines the OPTION element.
protected static void addParamElement(java.util.Map stSupportedElements)
          Defines the PARAM element.
protected static void addQElement(java.util.Map stSupportedElements)
          Defines the Q (short quote) element.
protected static void addSelectElement(java.util.Map stSupportedElements)
          Defines the SELECT element.
protected static void addSpanElement(java.util.Map stSupportedElements)
          Defines the SPAN element.
protected static void addStyleElement(java.util.Map stSupportedElements)
          Defines the STYLE element.
protected static void addSubElement(java.util.Map stSupportedElements)
          Defines the SUB (subscript) element.
protected static void addSupElement(java.util.Map stSupportedElements)
          Defines the SUP (superscript) element.
protected static void addTbodyElement(java.util.Map stSupportedElements, java.util.List cellalignAttrs)
          Defines the TBODY element.
protected static void addTdElement(java.util.Map stSupportedElements)
          Defines the TD element.
protected static void addTextareaElement(java.util.Map stSupportedElements)
          Defines the TEXTAREA element.
protected static void addTfootElement(java.util.Map stSupportedElements, java.util.List cellalignAttrs)
          Defines the TFOOT element.
protected static void addTheadElement(java.util.Map stSupportedElements, java.util.List cellalignAttrs)
          Defines the THEAD element.
protected static void addThElement(java.util.Map stSupportedElements)
          Defines the TH element.
protected static void addTitleElement(java.util.Map stSupportedElements)
          Defines the TITLE element.
protected static void classInit4(java.util.Map stSupportedElements)
          Initialization code.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.html.HtmlDocDesc
addRequiredAttribute, addSelfAttribute, addSimpleAttribute, addStringsToList, getMetadata, init, pushElementStack, removeStringsFromList, validate
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

fontMarkup

protected static java.lang.String[] fontMarkup
Names of font-related elements.


phraseMarkup

protected static java.lang.String[] phraseMarkup
Names of phrase elements.


specialMarkup

protected static java.lang.String[] specialMarkup
Names of special elements.


formMarkup

protected static java.lang.String[] formMarkup
Names of form elements.


listMarkup

protected static java.lang.String[] listMarkup
Names of list elements.


blockContent

protected static java.util.List blockContent
List of block elements.


flowContent

protected static java.util.List flowContent
List of flow elements.


inlineContent

protected static java.util.List inlineContent
List of inline elements.


listContent

protected static java.util.List listContent
List consisting of the LI element.


bodyContent

protected static java.util.List bodyContent
List of elements for the BODY element and some other elements.


coreAttrs

protected static java.util.List coreAttrs
Core attributes list.


i18nAttrs

protected static java.util.List i18nAttrs
Internationalization attributes list.


eventAttrs

protected static java.util.List eventAttrs
Event attributes list.


bigAttrs

protected static java.util.List bigAttrs
Big attributes list. The dtd calls this "attrs", but here it's called lotsaAttrs to avoid confusion with common local variables.


biggerAttrs

protected static java.util.List biggerAttrs
Big attributes plus reserved attributes.


reservedAttrs

protected static java.util.List reservedAttrs
Attributes described as "reserved for future use."


halignAtt

protected static HtmlAttributeDesc halignAtt
Horizontal alignment attribute for cells.


valignAtt

protected static HtmlAttributeDesc valignAtt
Vertical alignment attribute for cells.


thtdAtts

protected static java.util.List thtdAtts
Attributes for TH and TD elements

Constructor Detail

Html4DocDesc

public Html4DocDesc()
Method Detail

classInit4

protected static void classInit4(java.util.Map stSupportedElements)
Initialization code. This is called from the static initializer of our subclasses.


addAddressElement

protected static void addAddressElement(java.util.Map stSupportedElements)
Defines the ADDRESS element.


addBdoElement

protected static void addBdoElement(java.util.Map stSupportedElements)
Defines the BDO element.


addBodyElement

protected static void addBodyElement(java.util.Map stSupportedElements)
Defines the BODY element.


addColElement

protected static void addColElement(java.util.Map stSupportedElements,
                                    java.util.List cellalignAttrs)
Defines the COL element.


addColgroupElement

protected static void addColgroupElement(java.util.Map stSupportedElements,
                                         java.util.List cellalignAttrs)
Defines the COLGROUP element.


addDdElement

protected static void addDdElement(java.util.Map stSupportedElements)
Defines the DD element.


addDelElement

protected static void addDelElement(java.util.Map stSupportedElements)
Defines the DEL element.


addDtElement

protected static void addDtElement(java.util.Map stSupportedElements)
Defines the DT element.


addFieldsetElement

protected static void addFieldsetElement(java.util.Map stSupportedElements)
Defines the FIELDSET element.


addInsElement

protected static void addInsElement(java.util.Map stSupportedElements)
Defines the INS element.


addLabelElement

protected static void addLabelElement(java.util.Map stSupportedElements)
Defines the LABEL element.


addMapElement

protected static void addMapElement(java.util.Map stSupportedElements)
Defines the MAP element. HTML 4.0 and 4.01 actually have different definitions here. 4.0 allows block content or AREA elements, but not a mix of the two; 4.01 allows a mix of the two. The current version of the code doesn't allow that distinction to be expressed. (There are no differences between Strict and Transitional.)


addMetaElement

protected static void addMetaElement(java.util.Map stSupportedElements)
Defines the META element.


addOptgroupElement

protected static void addOptgroupElement(java.util.Map stSupportedElements)
Defines the OPTGROUP (option group) element.


addOptionElement

protected static void addOptionElement(java.util.Map stSupportedElements)
Defines the OPTION element.


addParamElement

protected static void addParamElement(java.util.Map stSupportedElements)
Defines the PARAM element.


addQElement

protected static void addQElement(java.util.Map stSupportedElements)
Defines the Q (short quote) element.


addSelectElement

protected static void addSelectElement(java.util.Map stSupportedElements)
Defines the SELECT element.


addSpanElement

protected static void addSpanElement(java.util.Map stSupportedElements)
Defines the SPAN element.


addStyleElement

protected static void addStyleElement(java.util.Map stSupportedElements)
Defines the STYLE element.


addSubElement

protected static void addSubElement(java.util.Map stSupportedElements)
Defines the SUB (subscript) element.


addSupElement

protected static void addSupElement(java.util.Map stSupportedElements)
Defines the SUP (superscript) element.


addTextareaElement

protected static void addTextareaElement(java.util.Map stSupportedElements)
Defines the TEXTAREA element.


addTbodyElement

protected static void addTbodyElement(java.util.Map stSupportedElements,
                                      java.util.List cellalignAttrs)
Defines the TBODY element.


addTdElement

protected static void addTdElement(java.util.Map stSupportedElements)
Defines the TD element. The strict and transitional versions have different attribute sets, but this is taken care of by the initialization of thtdAtts.


addTfootElement

protected static void addTfootElement(java.util.Map stSupportedElements,
                                      java.util.List cellalignAttrs)
Defines the TFOOT element.


addThElement

protected static void addThElement(java.util.Map stSupportedElements)
Defines the TH element. The strict and transitional versions have different attribute sets, but this is taken care of by the initialization of thtdAtts.


addTheadElement

protected static void addTheadElement(java.util.Map stSupportedElements,
                                      java.util.List cellalignAttrs)
Defines the THEAD element.


addTitleElement

protected static void addTitleElement(java.util.Map stSupportedElements)
Defines the TITLE element.



jhove/doc/edu/harvard/hul/ois/jhove/module/html/Html4StrictDocDesc.html0000644000707400001440000011471211510702354025256 0ustar garyusers Html4StrictDocDesc (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.html
Class Html4StrictDocDesc

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.html.HtmlDocDesc
      extended by edu.harvard.hul.ois.jhove.module.html.Html4DocDesc
          extended by edu.harvard.hul.ois.jhove.module.html.Html4StrictDocDesc
Direct Known Subclasses:
Html4_01StrictDocDesc, Html4_0StrictDocDesc

public abstract class Html4StrictDocDesc
extends Html4DocDesc

Abstract class for common features of HTML 4.0 and 4.01 strict documents. The differences between 4.0 and 4.01 are minor, so most of the code is found here.

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.html.Html4DocDesc
bigAttrs, biggerAttrs, blockContent, bodyContent, coreAttrs, eventAttrs, flowContent, fontMarkup, formMarkup, halignAtt, i18nAttrs, inlineContent, listContent, listMarkup, phraseMarkup, reservedAttrs, specialMarkup, thtdAtts, valignAtt
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.html.HtmlDocDesc
bodyElement, commonTags, framesetElement, headElement, headings, htmlElement, supportedElements
 
Constructor Summary
Html4StrictDocDesc()
           
 
Method Summary
protected static void addAddressElement(java.util.Map stSupportedElements)
          Defines the ADDRESS element.
protected static void addAElement(java.util.Map stSupportedElements)
          Defines the A element.
protected static void addAreaElement(java.util.Map stSupportedElements, HtmlAttributeDesc shapeAtt)
           
protected static void addBaseElement(java.util.Map stSupportedElements)
           
protected static void addBlockquoteElement(java.util.Map stSupportedElements)
           
protected static void addBrElement(java.util.Map stSupportedElements, java.util.List coreAttrs)
           
protected static void addButtonElement(java.util.Map stSupportedElements)
           
protected static void addCaptionElement(java.util.Map stSupportedElements, java.util.List inlineContent, HtmlAttributeDesc valignAtt)
           
protected static void addDivElement(java.util.Map stSupportedElements)
           
protected static void addDlElement(java.util.Map stSupportedElements)
           
protected static void addHeadElement(java.util.Map stSupportedElements)
           
protected static void addLegendElement(java.util.Map stSupportedElements)
           
protected static void addLiElement(java.util.Map stSupportedElements)
           
protected static void addLinkElement(java.util.Map stSupportedElements)
           
protected static void addNoscriptElement(java.util.Map stSupportedElements)
           
protected static void addObjectElement(java.util.Map stSupportedElements)
           
protected static void addOlElement(java.util.Map stSupportedElements)
           
protected static void addPElement(java.util.Map stSupportedElements)
           
protected static void addPreElement(java.util.Map stSupportedElements)
           
protected static void addScriptElement(java.util.Map stSupportedElements)
           
protected static void addTableElement(java.util.Map stSupportedElements)
           
protected static void addTrElement(java.util.Map stSupportedElements)
           
protected static void addUlElement(java.util.Map stSupportedElements)
           
protected static void classInit4(java.util.Map stSupportedElements)
          Code which is called from the static initializer of the subclasses.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.html.Html4DocDesc
addBdoElement, addBodyElement, addColElement, addColgroupElement, addDdElement, addDelElement, addDtElement, addFieldsetElement, addInsElement, addLabelElement, addMapElement, addMetaElement, addOptgroupElement, addOptionElement, addParamElement, addQElement, addSelectElement, addSpanElement, addStyleElement, addSubElement, addSupElement, addTbodyElement, addTdElement, addTextareaElement, addTfootElement, addTheadElement, addThElement, addTitleElement
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.html.HtmlDocDesc
addRequiredAttribute, addSelfAttribute, addSimpleAttribute, addStringsToList, getMetadata, init, pushElementStack, removeStringsFromList, validate
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

Html4StrictDocDesc

public Html4StrictDocDesc()
Method Detail

classInit4

protected static void classInit4(java.util.Map stSupportedElements)
Code which is called from the static initializer of the subclasses. Note that this is called before the class is instantiated, and may reference only static fields and subroutines.


addAElement

protected static void addAElement(java.util.Map stSupportedElements)
Defines the A element.


addAddressElement

protected static void addAddressElement(java.util.Map stSupportedElements)
Defines the ADDRESS element.


addAreaElement

protected static void addAreaElement(java.util.Map stSupportedElements,
                                     HtmlAttributeDesc shapeAtt)

addBaseElement

protected static void addBaseElement(java.util.Map stSupportedElements)

addBlockquoteElement

protected static void addBlockquoteElement(java.util.Map stSupportedElements)

addBrElement

protected static void addBrElement(java.util.Map stSupportedElements,
                                   java.util.List coreAttrs)

addButtonElement

protected static void addButtonElement(java.util.Map stSupportedElements)

addCaptionElement

protected static void addCaptionElement(java.util.Map stSupportedElements,
                                        java.util.List inlineContent,
                                        HtmlAttributeDesc valignAtt)

addDivElement

protected static void addDivElement(java.util.Map stSupportedElements)

addDlElement

protected static void addDlElement(java.util.Map stSupportedElements)

addHeadElement

protected static void addHeadElement(java.util.Map stSupportedElements)

addLegendElement

protected static void addLegendElement(java.util.Map stSupportedElements)

addLiElement

protected static void addLiElement(java.util.Map stSupportedElements)

addLinkElement

protected static void addLinkElement(java.util.Map stSupportedElements)

addNoscriptElement

protected static void addNoscriptElement(java.util.Map stSupportedElements)

addObjectElement

protected static void addObjectElement(java.util.Map stSupportedElements)

addOlElement

protected static void addOlElement(java.util.Map stSupportedElements)

addPElement

protected static void addPElement(java.util.Map stSupportedElements)

addPreElement

protected static void addPreElement(java.util.Map stSupportedElements)

addScriptElement

protected static void addScriptElement(java.util.Map stSupportedElements)

addTableElement

protected static void addTableElement(java.util.Map stSupportedElements)

addTrElement

protected static void addTrElement(java.util.Map stSupportedElements)

addUlElement

protected static void addUlElement(java.util.Map stSupportedElements)


jhove/doc/edu/harvard/hul/ois/jhove/module/html/Html4TFDocDesc.html0000644000707400001440000013351211510702354024316 0ustar garyusers Html4TFDocDesc (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.html
Class Html4TFDocDesc

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.html.HtmlDocDesc
      extended by edu.harvard.hul.ois.jhove.module.html.Html4DocDesc
          extended by edu.harvard.hul.ois.jhove.module.html.Html4TFDocDesc
Direct Known Subclasses:
Html4_01TFDocDesc, Html4_0TFDocDesc

public abstract class Html4TFDocDesc
extends Html4DocDesc

Abstract class for common features of HTML 4.0 and 4.01 transitional and frameset documents. The differences between 4.0 and 4.01 are minor, as are the differences between transitional and frameset so most of the code is found here.

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.html.Html4DocDesc
bigAttrs, biggerAttrs, blockContent, bodyContent, coreAttrs, eventAttrs, flowContent, fontMarkup, formMarkup, halignAtt, i18nAttrs, inlineContent, listContent, listMarkup, phraseMarkup, reservedAttrs, specialMarkup, thtdAtts, valignAtt
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.html.HtmlDocDesc
bodyElement, commonTags, framesetElement, headElement, headings, htmlElement, supportedElements
 
Constructor Summary
Html4TFDocDesc()
           
 
Method Summary
protected static void addAElement(java.util.Map stSupportedElements)
          Defines the A element.
protected static void addAppletElement(java.util.Map stSupportedElements, HtmlAttributeDesc ialignAtt)
           
protected static void addAreaElement(java.util.Map stSupportedElements, HtmlAttributeDesc shapeAtt)
           
protected static void addBaseElement(java.util.Map stSupportedElements)
           
protected static void addBasefontElement(java.util.Map stSupportedElements)
           
protected static void addBlockquoteElement(java.util.Map stSupportedElements)
           
protected static void addBrElement(java.util.Map stSupportedElements, java.util.List coreAttrs)
           
protected static void addButtonElement(java.util.Map stSupportedElements)
           
protected static void addCaptionElement(java.util.Map stSupportedElements, java.util.List inlineContent, HtmlAttributeDesc valignAtt)
           
protected static void addCenterElement(java.util.Map stSupportedElements)
           
protected static void addDirElement(java.util.Map stSupportedElements)
           
protected static void addDivElement(java.util.Map stSupportedElements)
           
protected static void addDlElement(java.util.Map stSupportedElements)
           
protected static void addFontElement(java.util.Map stSupportedElements)
          Adds the Font element.
protected static void addFrameElement(java.util.Map stSupportedElements)
          Adds to Frame element.
protected static void addFramesetElement(java.util.Map stSupportedElements)
          Adds the Frameset element.
protected static void addHeadElement(java.util.Map stSupportedElements)
           
protected static void addHrElement(java.util.Map stSupportedElements)
           
protected static void addInputElement(java.util.Map stSupportedElements)
           
protected static void addLegendElement(java.util.Map stSupportedElements)
           
protected static void addLiElement(java.util.Map stSupportedElements)
           
protected static void addLinkElement(java.util.Map stSupportedElements)
           
protected static void addMenuElement(java.util.Map stSupportedElements)
           
protected static void addNoframesElement(java.util.Map stSupportedElements, int version)
          Adds the NOFRAMES element.
protected static void addNoscriptElement(java.util.Map stSupportedElements)
           
protected static void addObjectElement(java.util.Map stSupportedElements)
           
protected static void addOlElement(java.util.Map stSupportedElements)
           
protected static void addPElement(java.util.Map stSupportedElements)
           
protected static void addPreElement(java.util.Map stSupportedElements)
           
protected static void addScriptElement(java.util.Map stSupportedElements)
           
protected static void addTableElement(java.util.Map stSupportedElements)
           
protected static void addTrElement(java.util.Map stSupportedElements)
           
protected static void addUlElement(java.util.Map stSupportedElements)
           
protected static void classInit4(java.util.Map stSupportedElements)
          Code which is called from the static initializer of the subclasses.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.html.Html4DocDesc
addAddressElement, addBdoElement, addBodyElement, addColElement, addColgroupElement, addDdElement, addDelElement, addDtElement, addFieldsetElement, addInsElement, addLabelElement, addMapElement, addMetaElement, addOptgroupElement, addOptionElement, addParamElement, addQElement, addSelectElement, addSpanElement, addStyleElement, addSubElement, addSupElement, addTbodyElement, addTdElement, addTextareaElement, addTfootElement, addTheadElement, addThElement, addTitleElement
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.html.HtmlDocDesc
addRequiredAttribute, addSelfAttribute, addSimpleAttribute, addStringsToList, getMetadata, init, pushElementStack, removeStringsFromList, validate
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

Html4TFDocDesc

public Html4TFDocDesc()
Method Detail

classInit4

protected static void classInit4(java.util.Map stSupportedElements)
Code which is called from the static initializer of the subclasses. Note that this is called before the class is instantiated, and may reference only static fields and subroutines.


addAElement

protected static void addAElement(java.util.Map stSupportedElements)
Defines the A element.


addAppletElement

protected static void addAppletElement(java.util.Map stSupportedElements,
                                       HtmlAttributeDesc ialignAtt)

addAreaElement

protected static void addAreaElement(java.util.Map stSupportedElements,
                                     HtmlAttributeDesc shapeAtt)

addBaseElement

protected static void addBaseElement(java.util.Map stSupportedElements)

addBasefontElement

protected static void addBasefontElement(java.util.Map stSupportedElements)

addBlockquoteElement

protected static void addBlockquoteElement(java.util.Map stSupportedElements)

addBrElement

protected static void addBrElement(java.util.Map stSupportedElements,
                                   java.util.List coreAttrs)

addButtonElement

protected static void addButtonElement(java.util.Map stSupportedElements)

addCaptionElement

protected static void addCaptionElement(java.util.Map stSupportedElements,
                                        java.util.List inlineContent,
                                        HtmlAttributeDesc valignAtt)

addCenterElement

protected static void addCenterElement(java.util.Map stSupportedElements)

addDirElement

protected static void addDirElement(java.util.Map stSupportedElements)

addDivElement

protected static void addDivElement(java.util.Map stSupportedElements)

addDlElement

protected static void addDlElement(java.util.Map stSupportedElements)

addFontElement

protected static void addFontElement(java.util.Map stSupportedElements)
Adds the Font element.


addFrameElement

protected static void addFrameElement(java.util.Map stSupportedElements)
Adds to Frame element.


addFramesetElement

protected static void addFramesetElement(java.util.Map stSupportedElements)
Adds the Frameset element. This is called only for 4.0 and 4.01 Frameset docuemnts.


addHeadElement

protected static void addHeadElement(java.util.Map stSupportedElements)

addHrElement

protected static void addHrElement(java.util.Map stSupportedElements)

addInputElement

protected static void addInputElement(java.util.Map stSupportedElements)

addLegendElement

protected static void addLegendElement(java.util.Map stSupportedElements)

addLiElement

protected static void addLiElement(java.util.Map stSupportedElements)

addLinkElement

protected static void addLinkElement(java.util.Map stSupportedElements)

addMenuElement

protected static void addMenuElement(java.util.Map stSupportedElements)

addNoframesElement

protected static void addNoframesElement(java.util.Map stSupportedElements,
                                         int version)
Adds the NOFRAMES element. The content differs between Transitional and Frameset DTD's.


addNoscriptElement

protected static void addNoscriptElement(java.util.Map stSupportedElements)

addObjectElement

protected static void addObjectElement(java.util.Map stSupportedElements)

addOlElement

protected static void addOlElement(java.util.Map stSupportedElements)

addPElement

protected static void addPElement(java.util.Map stSupportedElements)

addPreElement

protected static void addPreElement(java.util.Map stSupportedElements)

addScriptElement

protected static void addScriptElement(java.util.Map stSupportedElements)

addTableElement

protected static void addTableElement(java.util.Map stSupportedElements)

addTrElement

protected static void addTrElement(java.util.Map stSupportedElements)

addUlElement

protected static void addUlElement(java.util.Map stSupportedElements)


jhove/doc/edu/harvard/hul/ois/jhove/module/html/Html4_01FrameDocDesc.html0000644000707400001440000006715211510702353025344 0ustar garyusers Html4_01FrameDocDesc (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.html
Class Html4_01FrameDocDesc

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.html.HtmlDocDesc
      extended by edu.harvard.hul.ois.jhove.module.html.Html4DocDesc
          extended by edu.harvard.hul.ois.jhove.module.html.Html4TFDocDesc
              extended by edu.harvard.hul.ois.jhove.module.html.Html4_01TFDocDesc
                  extended by edu.harvard.hul.ois.jhove.module.html.Html4_01FrameDocDesc

public class Html4_01FrameDocDesc
extends Html4_01TFDocDesc

This class describes the requirements of an HTML 4.01 Frameset document.

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.html.Html4DocDesc
bigAttrs, biggerAttrs, blockContent, bodyContent, coreAttrs, eventAttrs, flowContent, fontMarkup, formMarkup, halignAtt, i18nAttrs, inlineContent, listContent, listMarkup, phraseMarkup, reservedAttrs, specialMarkup, thtdAtts, valignAtt
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.html.HtmlDocDesc
bodyElement, commonTags, framesetElement, headElement, headings, htmlElement, supportedElements
 
Constructor Summary
Html4_01FrameDocDesc()
          Constructor.
 
Method Summary
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.html.Html4_01TFDocDesc
classInit4
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.html.Html4TFDocDesc
addAElement, addAppletElement, addAreaElement, addBaseElement, addBasefontElement, addBlockquoteElement, addBrElement, addButtonElement, addCaptionElement, addCenterElement, addDirElement, addDivElement, addDlElement, addFontElement, addFrameElement, addFramesetElement, addHeadElement, addHrElement, addInputElement, addLegendElement, addLiElement, addLinkElement, addMenuElement, addNoframesElement, addNoscriptElement, addObjectElement, addOlElement, addPElement, addPreElement, addScriptElement, addTableElement, addTrElement, addUlElement, classInit4
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.html.Html4DocDesc
addAddressElement, addBdoElement, addBodyElement, addColElement, addColgroupElement, addDdElement, addDelElement, addDtElement, addFieldsetElement, addInsElement, addLabelElement, addMapElement, addMetaElement, addOptgroupElement, addOptionElement, addParamElement, addQElement, addSelectElement, addSpanElement, addStyleElement, addSubElement, addSupElement, addTbodyElement, addTdElement, addTextareaElement, addTfootElement, addTheadElement, addThElement, addTitleElement
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.html.HtmlDocDesc
addRequiredAttribute, addSelfAttribute, addSimpleAttribute, addStringsToList, getMetadata, init, pushElementStack, removeStringsFromList, validate
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

Html4_01FrameDocDesc

public Html4_01FrameDocDesc()
Constructor.



jhove/doc/edu/harvard/hul/ois/jhove/module/html/Html4_01StrictDocDesc.html0000644000707400001440000006223411510702353025556 0ustar garyusers Html4_01StrictDocDesc (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.html
Class Html4_01StrictDocDesc

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.html.HtmlDocDesc
      extended by edu.harvard.hul.ois.jhove.module.html.Html4DocDesc
          extended by edu.harvard.hul.ois.jhove.module.html.Html4StrictDocDesc
              extended by edu.harvard.hul.ois.jhove.module.html.Html4_01StrictDocDesc

public class Html4_01StrictDocDesc
extends Html4StrictDocDesc

This class describes the requirements of an HTML 4.01 Strict document.

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.html.Html4DocDesc
bigAttrs, biggerAttrs, blockContent, bodyContent, coreAttrs, eventAttrs, flowContent, fontMarkup, formMarkup, halignAtt, i18nAttrs, inlineContent, listContent, listMarkup, phraseMarkup, reservedAttrs, specialMarkup, thtdAtts, valignAtt
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.html.HtmlDocDesc
bodyElement, commonTags, framesetElement, headElement, headings, htmlElement, supportedElements
 
Constructor Summary
Html4_01StrictDocDesc()
          Constructor.
 
Method Summary
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.html.Html4StrictDocDesc
addAddressElement, addAElement, addAreaElement, addBaseElement, addBlockquoteElement, addBrElement, addButtonElement, addCaptionElement, addDivElement, addDlElement, addHeadElement, addLegendElement, addLiElement, addLinkElement, addNoscriptElement, addObjectElement, addOlElement, addPElement, addPreElement, addScriptElement, addTableElement, addTrElement, addUlElement, classInit4
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.html.Html4DocDesc
addBdoElement, addBodyElement, addColElement, addColgroupElement, addDdElement, addDelElement, addDtElement, addFieldsetElement, addInsElement, addLabelElement, addMapElement, addMetaElement, addOptgroupElement, addOptionElement, addParamElement, addQElement, addSelectElement, addSpanElement, addStyleElement, addSubElement, addSupElement, addTbodyElement, addTdElement, addTextareaElement, addTfootElement, addTheadElement, addThElement, addTitleElement
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.html.HtmlDocDesc
addRequiredAttribute, addSelfAttribute, addSimpleAttribute, addStringsToList, getMetadata, init, pushElementStack, removeStringsFromList, validate
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

Html4_01StrictDocDesc

public Html4_01StrictDocDesc()
Constructor.



jhove/doc/edu/harvard/hul/ois/jhove/module/html/Html4_01TFDocDesc.html0000644000707400001440000007011411510702353024613 0ustar garyusers Html4_01TFDocDesc (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.html
Class Html4_01TFDocDesc

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.html.HtmlDocDesc
      extended by edu.harvard.hul.ois.jhove.module.html.Html4DocDesc
          extended by edu.harvard.hul.ois.jhove.module.html.Html4TFDocDesc
              extended by edu.harvard.hul.ois.jhove.module.html.Html4_01TFDocDesc
Direct Known Subclasses:
Html4_01FrameDocDesc, Html4_01TransDocDesc

public abstract class Html4_01TFDocDesc
extends Html4TFDocDesc

Abstract class for the HTML 4.01 Transitional and Frameset document types. These are identical except for one element apiece, so nearly all the code is here or in its superclasses.

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.html.Html4DocDesc
bigAttrs, biggerAttrs, blockContent, bodyContent, coreAttrs, eventAttrs, flowContent, fontMarkup, formMarkup, halignAtt, i18nAttrs, inlineContent, listContent, listMarkup, phraseMarkup, reservedAttrs, specialMarkup, thtdAtts, valignAtt
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.html.HtmlDocDesc
bodyElement, commonTags, framesetElement, headElement, headings, htmlElement, supportedElements
 
Constructor Summary
Html4_01TFDocDesc()
           
 
Method Summary
protected static void classInit4(java.util.Map stSupportedElements, int version)
          Initialization code.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.html.Html4TFDocDesc
addAElement, addAppletElement, addAreaElement, addBaseElement, addBasefontElement, addBlockquoteElement, addBrElement, addButtonElement, addCaptionElement, addCenterElement, addDirElement, addDivElement, addDlElement, addFontElement, addFrameElement, addFramesetElement, addHeadElement, addHrElement, addInputElement, addLegendElement, addLiElement, addLinkElement, addMenuElement, addNoframesElement, addNoscriptElement, addObjectElement, addOlElement, addPElement, addPreElement, addScriptElement, addTableElement, addTrElement, addUlElement, classInit4
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.html.Html4DocDesc
addAddressElement, addBdoElement, addBodyElement, addColElement, addColgroupElement, addDdElement, addDelElement, addDtElement, addFieldsetElement, addInsElement, addLabelElement, addMapElement, addMetaElement, addOptgroupElement, addOptionElement, addParamElement, addQElement, addSelectElement, addSpanElement, addStyleElement, addSubElement, addSupElement, addTbodyElement, addTdElement, addTextareaElement, addTfootElement, addTheadElement, addThElement, addTitleElement
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.html.HtmlDocDesc
addRequiredAttribute, addSelfAttribute, addSimpleAttribute, addStringsToList, getMetadata, init, pushElementStack, removeStringsFromList, validate
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

Html4_01TFDocDesc

public Html4_01TFDocDesc()
Method Detail

classInit4

protected static void classInit4(java.util.Map stSupportedElements,
                                 int version)
Initialization code. This is called from the static initializer of our subclasses.



jhove/doc/edu/harvard/hul/ois/jhove/module/html/Html4_01TransDocDesc.html0000644000707400001440000006716011510702353025400 0ustar garyusers Html4_01TransDocDesc (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.html
Class Html4_01TransDocDesc

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.html.HtmlDocDesc
      extended by edu.harvard.hul.ois.jhove.module.html.Html4DocDesc
          extended by edu.harvard.hul.ois.jhove.module.html.Html4TFDocDesc
              extended by edu.harvard.hul.ois.jhove.module.html.Html4_01TFDocDesc
                  extended by edu.harvard.hul.ois.jhove.module.html.Html4_01TransDocDesc

public class Html4_01TransDocDesc
extends Html4_01TFDocDesc

This class describes the requirements of an HTML 4.01 Transitional document.

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.html.Html4DocDesc
bigAttrs, biggerAttrs, blockContent, bodyContent, coreAttrs, eventAttrs, flowContent, fontMarkup, formMarkup, halignAtt, i18nAttrs, inlineContent, listContent, listMarkup, phraseMarkup, reservedAttrs, specialMarkup, thtdAtts, valignAtt
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.html.HtmlDocDesc
bodyElement, commonTags, framesetElement, headElement, headings, htmlElement, supportedElements
 
Constructor Summary
Html4_01TransDocDesc()
          Constructor.
 
Method Summary
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.html.Html4_01TFDocDesc
classInit4
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.html.Html4TFDocDesc
addAElement, addAppletElement, addAreaElement, addBaseElement, addBasefontElement, addBlockquoteElement, addBrElement, addButtonElement, addCaptionElement, addCenterElement, addDirElement, addDivElement, addDlElement, addFontElement, addFrameElement, addFramesetElement, addHeadElement, addHrElement, addInputElement, addLegendElement, addLiElement, addLinkElement, addMenuElement, addNoframesElement, addNoscriptElement, addObjectElement, addOlElement, addPElement, addPreElement, addScriptElement, addTableElement, addTrElement, addUlElement, classInit4
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.html.Html4DocDesc
addAddressElement, addBdoElement, addBodyElement, addColElement, addColgroupElement, addDdElement, addDelElement, addDtElement, addFieldsetElement, addInsElement, addLabelElement, addMapElement, addMetaElement, addOptgroupElement, addOptionElement, addParamElement, addQElement, addSelectElement, addSpanElement, addStyleElement, addSubElement, addSupElement, addTbodyElement, addTdElement, addTextareaElement, addTfootElement, addTheadElement, addThElement, addTitleElement
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.html.HtmlDocDesc
addRequiredAttribute, addSelfAttribute, addSimpleAttribute, addStringsToList, getMetadata, init, pushElementStack, removeStringsFromList, validate
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

Html4_01TransDocDesc

public Html4_01TransDocDesc()
Constructor.



jhove/doc/edu/harvard/hul/ois/jhove/module/html/Html4_0FrameDocDesc.html0000644000707400001440000006713311510702353025262 0ustar garyusers Html4_0FrameDocDesc (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.html
Class Html4_0FrameDocDesc

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.html.HtmlDocDesc
      extended by edu.harvard.hul.ois.jhove.module.html.Html4DocDesc
          extended by edu.harvard.hul.ois.jhove.module.html.Html4TFDocDesc
              extended by edu.harvard.hul.ois.jhove.module.html.Html4_0TFDocDesc
                  extended by edu.harvard.hul.ois.jhove.module.html.Html4_0FrameDocDesc

public class Html4_0FrameDocDesc
extends Html4_0TFDocDesc

This class describes the requirements of an HTML 4.01 Frameset document.

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.html.Html4DocDesc
bigAttrs, biggerAttrs, blockContent, bodyContent, coreAttrs, eventAttrs, flowContent, fontMarkup, formMarkup, halignAtt, i18nAttrs, inlineContent, listContent, listMarkup, phraseMarkup, reservedAttrs, specialMarkup, thtdAtts, valignAtt
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.html.HtmlDocDesc
bodyElement, commonTags, framesetElement, headElement, headings, htmlElement, supportedElements
 
Constructor Summary
Html4_0FrameDocDesc()
          Constructor.
 
Method Summary
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.html.Html4_0TFDocDesc
classInit4
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.html.Html4TFDocDesc
addAElement, addAppletElement, addAreaElement, addBaseElement, addBasefontElement, addBlockquoteElement, addBrElement, addButtonElement, addCaptionElement, addCenterElement, addDirElement, addDivElement, addDlElement, addFontElement, addFrameElement, addFramesetElement, addHeadElement, addHrElement, addInputElement, addLegendElement, addLiElement, addLinkElement, addMenuElement, addNoframesElement, addNoscriptElement, addObjectElement, addOlElement, addPElement, addPreElement, addScriptElement, addTableElement, addTrElement, addUlElement, classInit4
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.html.Html4DocDesc
addAddressElement, addBdoElement, addBodyElement, addColElement, addColgroupElement, addDdElement, addDelElement, addDtElement, addFieldsetElement, addInsElement, addLabelElement, addMapElement, addMetaElement, addOptgroupElement, addOptionElement, addParamElement, addQElement, addSelectElement, addSpanElement, addStyleElement, addSubElement, addSupElement, addTbodyElement, addTdElement, addTextareaElement, addTfootElement, addTheadElement, addThElement, addTitleElement
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.html.HtmlDocDesc
addRequiredAttribute, addSelfAttribute, addSimpleAttribute, addStringsToList, getMetadata, init, pushElementStack, removeStringsFromList, validate
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

Html4_0FrameDocDesc

public Html4_0FrameDocDesc()
Constructor.



jhove/doc/edu/harvard/hul/ois/jhove/module/html/Html4_0StrictDocDesc.html0000644000707400001440000006244211510702353025476 0ustar garyusers Html4_0StrictDocDesc (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.html
Class Html4_0StrictDocDesc

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.html.HtmlDocDesc
      extended by edu.harvard.hul.ois.jhove.module.html.Html4DocDesc
          extended by edu.harvard.hul.ois.jhove.module.html.Html4StrictDocDesc
              extended by edu.harvard.hul.ois.jhove.module.html.Html4_0StrictDocDesc

public class Html4_0StrictDocDesc
extends Html4StrictDocDesc

This class describes the requirements of an HTML 4.0 Strict document.

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.html.Html4DocDesc
bigAttrs, biggerAttrs, blockContent, bodyContent, coreAttrs, eventAttrs, flowContent, fontMarkup, formMarkup, halignAtt, i18nAttrs, inlineContent, listContent, listMarkup, phraseMarkup, reservedAttrs, specialMarkup, thtdAtts, valignAtt
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.html.HtmlDocDesc
bodyElement, commonTags, framesetElement, headElement, headings, htmlElement, supportedElements
 
Constructor Summary
Html4_0StrictDocDesc()
          Constructor.
 
Method Summary
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.html.Html4StrictDocDesc
addAddressElement, addAElement, addAreaElement, addBaseElement, addBlockquoteElement, addBrElement, addButtonElement, addCaptionElement, addDivElement, addDlElement, addHeadElement, addLegendElement, addLiElement, addLinkElement, addNoscriptElement, addObjectElement, addOlElement, addPElement, addPreElement, addScriptElement, addTableElement, addTrElement, addUlElement, classInit4
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.html.Html4DocDesc
addBdoElement, addBodyElement, addColElement, addColgroupElement, addDdElement, addDelElement, addDtElement, addFieldsetElement, addInsElement, addLabelElement, addMapElement, addMetaElement, addOptgroupElement, addOptionElement, addParamElement, addQElement, addSelectElement, addSpanElement, addStyleElement, addSubElement, addSupElement, addTbodyElement, addTdElement, addTextareaElement, addTfootElement, addTheadElement, addThElement, addTitleElement
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.html.HtmlDocDesc
addRequiredAttribute, addSelfAttribute, addSimpleAttribute, addStringsToList, getMetadata, init, pushElementStack, removeStringsFromList, validate
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

Html4_0StrictDocDesc

public Html4_0StrictDocDesc()
Constructor. Most of the initialization work is done in a static code block rather than in the constructor, so as to minimize overhead on multiple invocations.



jhove/doc/edu/harvard/hul/ois/jhove/module/html/Html4_0TFDocDesc.html0000644000707400001440000006770711510702353024550 0ustar garyusers Html4_0TFDocDesc (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.html
Class Html4_0TFDocDesc

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.html.HtmlDocDesc
      extended by edu.harvard.hul.ois.jhove.module.html.Html4DocDesc
          extended by edu.harvard.hul.ois.jhove.module.html.Html4TFDocDesc
              extended by edu.harvard.hul.ois.jhove.module.html.Html4_0TFDocDesc
Direct Known Subclasses:
Html4_0FrameDocDesc, Html4_0TransDocDesc

public abstract class Html4_0TFDocDesc
extends Html4TFDocDesc

Abstract class for the HTML 4.0 Transitional and Frameset document types. These are identical except for one element apiece, so nearly all the code is here or in its superclasses.

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.html.Html4DocDesc
bigAttrs, biggerAttrs, blockContent, bodyContent, coreAttrs, eventAttrs, flowContent, fontMarkup, formMarkup, halignAtt, i18nAttrs, inlineContent, listContent, listMarkup, phraseMarkup, reservedAttrs, specialMarkup, thtdAtts, valignAtt
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.html.HtmlDocDesc
bodyElement, commonTags, framesetElement, headElement, headings, htmlElement, supportedElements
 
Constructor Summary
Html4_0TFDocDesc()
           
 
Method Summary
protected static void classInit4(java.util.Map stSupportedElements, int version)
           
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.html.Html4TFDocDesc
addAElement, addAppletElement, addAreaElement, addBaseElement, addBasefontElement, addBlockquoteElement, addBrElement, addButtonElement, addCaptionElement, addCenterElement, addDirElement, addDivElement, addDlElement, addFontElement, addFrameElement, addFramesetElement, addHeadElement, addHrElement, addInputElement, addLegendElement, addLiElement, addLinkElement, addMenuElement, addNoframesElement, addNoscriptElement, addObjectElement, addOlElement, addPElement, addPreElement, addScriptElement, addTableElement, addTrElement, addUlElement, classInit4
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.html.Html4DocDesc
addAddressElement, addBdoElement, addBodyElement, addColElement, addColgroupElement, addDdElement, addDelElement, addDtElement, addFieldsetElement, addInsElement, addLabelElement, addMapElement, addMetaElement, addOptgroupElement, addOptionElement, addParamElement, addQElement, addSelectElement, addSpanElement, addStyleElement, addSubElement, addSupElement, addTbodyElement, addTdElement, addTextareaElement, addTfootElement, addTheadElement, addThElement, addTitleElement
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.html.HtmlDocDesc
addRequiredAttribute, addSelfAttribute, addSimpleAttribute, addStringsToList, getMetadata, init, pushElementStack, removeStringsFromList, validate
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

Html4_0TFDocDesc

public Html4_0TFDocDesc()
Method Detail

classInit4

protected static void classInit4(java.util.Map stSupportedElements,
                                 int version)


jhove/doc/edu/harvard/hul/ois/jhove/module/html/Html4_0TransDocDesc.html0000644000707400001440000006734011510702354025320 0ustar garyusers Html4_0TransDocDesc (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.html
Class Html4_0TransDocDesc

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.html.HtmlDocDesc
      extended by edu.harvard.hul.ois.jhove.module.html.Html4DocDesc
          extended by edu.harvard.hul.ois.jhove.module.html.Html4TFDocDesc
              extended by edu.harvard.hul.ois.jhove.module.html.Html4_0TFDocDesc
                  extended by edu.harvard.hul.ois.jhove.module.html.Html4_0TransDocDesc

public class Html4_0TransDocDesc
extends Html4_0TFDocDesc

This class describes the requirements of an HTML 4.0 Transitional document.

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.html.Html4DocDesc
bigAttrs, biggerAttrs, blockContent, bodyContent, coreAttrs, eventAttrs, flowContent, fontMarkup, formMarkup, halignAtt, i18nAttrs, inlineContent, listContent, listMarkup, phraseMarkup, reservedAttrs, specialMarkup, thtdAtts, valignAtt
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.html.HtmlDocDesc
bodyElement, commonTags, framesetElement, headElement, headings, htmlElement, supportedElements
 
Constructor Summary
Html4_0TransDocDesc()
          Constructor.
 
Method Summary
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.html.Html4_0TFDocDesc
classInit4
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.html.Html4TFDocDesc
addAElement, addAppletElement, addAreaElement, addBaseElement, addBasefontElement, addBlockquoteElement, addBrElement, addButtonElement, addCaptionElement, addCenterElement, addDirElement, addDivElement, addDlElement, addFontElement, addFrameElement, addFramesetElement, addHeadElement, addHrElement, addInputElement, addLegendElement, addLiElement, addLinkElement, addMenuElement, addNoframesElement, addNoscriptElement, addObjectElement, addOlElement, addPElement, addPreElement, addScriptElement, addTableElement, addTrElement, addUlElement, classInit4
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.html.Html4DocDesc
addAddressElement, addBdoElement, addBodyElement, addColElement, addColgroupElement, addDdElement, addDelElement, addDtElement, addFieldsetElement, addInsElement, addLabelElement, addMapElement, addMetaElement, addOptgroupElement, addOptionElement, addParamElement, addQElement, addSelectElement, addSpanElement, addStyleElement, addSubElement, addSupElement, addTbodyElement, addTdElement, addTextareaElement, addTfootElement, addTheadElement, addThElement, addTitleElement
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.html.HtmlDocDesc
addRequiredAttribute, addSelfAttribute, addSimpleAttribute, addStringsToList, getMetadata, init, pushElementStack, removeStringsFromList, validate
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

Html4_0TransDocDesc

public Html4_0TransDocDesc()
Constructor. Most of the initialization work is done in a static code block rather than in the constructor, so as to minimize overhead on multiple invocations.



jhove/doc/edu/harvard/hul/ois/jhove/module/html/HtmlAttributeDesc.html0000644000707400001440000004323511510702354025240 0ustar garyusers HtmlAttributeDesc (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.html
Class HtmlAttributeDesc

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.html.HtmlAttributeDesc

public class HtmlAttributeDesc
extends java.lang.Object

Class representing an abstract attribute of an HTML element.

Author:
Gary McGath

Field Summary
static int CONREF
          Permitted values for _kind
static int CURRENT
          Permitted values for _kind
static int IMPLIED
          Permitted values for _kind
static int OTHER
          Permitted values for _kind
static int REQUIRED
          Permitted values for _kind
 
Constructor Summary
HtmlAttributeDesc(java.lang.String name)
          Constructor for an attribute that can take any value, with kind defaulting to IMPLIED.
HtmlAttributeDesc(java.lang.String name, java.lang.String[] permittedValues, int kind)
          Constructor.
 
Method Summary
 java.lang.String getName()
          Returns the attribute's name.
 boolean isRequired()
          Return true if the attribute is required.
 boolean nameMatches(java.lang.String name)
          Returns true if this tag's name matches the parameter.
 boolean valueOK(java.lang.String name, java.lang.String value)
          Returns true if the parameter is a permissible value for the attribute.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

REQUIRED

public static final int REQUIRED
Permitted values for _kind

See Also:
Constant Field Values

CURRENT

public static final int CURRENT
Permitted values for _kind

See Also:
Constant Field Values

CONREF

public static final int CONREF
Permitted values for _kind

See Also:
Constant Field Values

IMPLIED

public static final int IMPLIED
Permitted values for _kind

See Also:
Constant Field Values

OTHER

public static final int OTHER
Permitted values for _kind

See Also:
Constant Field Values
Constructor Detail

HtmlAttributeDesc

public HtmlAttributeDesc(java.lang.String name,
                         java.lang.String[] permittedValues,
                         int kind)
Constructor.

Parameters:
name - The name of the attribute. Must be lower case.
permittedValues - Specific values allowed for the parameter. If null, then any CDATA value is allowed.
kind - The kind of parameter. Must be REQUIRED, CURRENT, CONREF, or IMPLIED.

HtmlAttributeDesc

public HtmlAttributeDesc(java.lang.String name)
Constructor for an attribute that can take any value, with kind defaulting to IMPLIED.

Method Detail

getName

public java.lang.String getName()
Returns the attribute's name.


nameMatches

public boolean nameMatches(java.lang.String name)
Returns true if this tag's name matches the parameter.


valueOK

public boolean valueOK(java.lang.String name,
                       java.lang.String value)
Returns true if the parameter is a permissible value for the attribute.


isRequired

public boolean isRequired()
Return true if the attribute is required.



jhove/doc/edu/harvard/hul/ois/jhove/module/html/HtmlCharStream.html0000644000707400001440000013266411510702354024534 0ustar garyusers HtmlCharStream (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.html
Class HtmlCharStream

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.html.HtmlCharStream
All Implemented Interfaces:
CharStream

public class HtmlCharStream
extends java.lang.Object
implements CharStream

An implementation of interface CharStream, where the stream is assumed to contain only ASCII characters (without unicode processing).


Field Summary
protected  boolean _lineEndCR
           
protected  boolean _lineEndCRLF
           
protected  boolean _lineEndLF
           
protected  int[] bufcolumn
           
protected  char[] buffer
           
protected  int[] bufline
           
 int bufpos
           
protected  int column
           
protected  int inBuf
           
protected  java.io.Reader inputStream
           
protected  int line
           
protected  int maxNextCharInd
           
protected  boolean prevCharIsCR
           
protected  boolean prevCharIsLF
           
static boolean staticFlag
           
 
Constructor Summary
HtmlCharStream(java.io.InputStream dstream, int startline, int startcolumn, int buffersize, java.lang.String charset)
           
HtmlCharStream(java.io.InputStream dstream, int startline, int startcolumn, java.lang.String charset)
           
HtmlCharStream(java.io.InputStream dstream, java.lang.String charset)
           
HtmlCharStream(java.io.Reader dstream)
           
HtmlCharStream(java.io.Reader dstream, int startline, int startcolumn)
           
HtmlCharStream(java.io.Reader dstream, int startline, int startcolumn, int buffersize)
           
 
Method Summary
 void adjustBeginLineColumn(int newLine, int newCol)
          Method to adjust line and column numbers for the start of a token.
 void backup(int amount)
          Backs up the input stream by amount steps.
 char BeginToken()
          Returns the next character that marks the beginning of the next token.
 void Done()
          The lexer calls this function to indicate that it is done with the stream and hence implementations can free any resources held by this class.
protected  void ExpandBuff(boolean wrapAround)
           
protected  void FillBuff()
           
 int getBeginColumn()
          Returns the column number of the first character for current token (being matched after the last call to BeginTOken).
 int getBeginLine()
          Returns the line number of the first character for current token (being matched after the last call to BeginTOken).
 int getColumn()
          Deprecated.  
 int getEndColumn()
          Returns the column number of the last character for current token (being matched after the last call to BeginTOken).
 int getEndLine()
          Returns the line number of the last character for current token (being matched after the last call to BeginTOken).
 java.lang.String GetImage()
          Returns a string made up of characters from the marked token beginning to the current buffer position.
 java.lang.String getKindOfLineEnd()
          Retrieve the kind of end of line.
 int getLine()
          Deprecated.  
 char[] GetSuffix(int len)
          Returns an array of characters that make up the suffix of length 'len' for the currently matched token.
 char readChar()
          Returns the next character from the selected input.
 void ReInit(java.io.InputStream dstream)
           
 void ReInit(java.io.InputStream dstream, int startline, int startcolumn)
           
 void ReInit(java.io.InputStream dstream, int startline, int startcolumn, int buffersize)
           
 void ReInit(java.io.Reader dstream)
           
 void ReInit(java.io.Reader dstream, int startline, int startcolumn)
           
 void ReInit(java.io.Reader dstream, int startline, int startcolumn, int buffersize)
           
protected  void UpdateLineColumn(char c)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

staticFlag

public static final boolean staticFlag
See Also:
Constant Field Values

bufpos

public int bufpos

bufline

protected int[] bufline

bufcolumn

protected int[] bufcolumn

column

protected int column

line

protected int line

prevCharIsCR

protected boolean prevCharIsCR

prevCharIsLF

protected boolean prevCharIsLF

_lineEndCR

protected boolean _lineEndCR

_lineEndLF

protected boolean _lineEndLF

_lineEndCRLF

protected boolean _lineEndCRLF

inputStream

protected java.io.Reader inputStream

buffer

protected char[] buffer

maxNextCharInd

protected int maxNextCharInd

inBuf

protected int inBuf
Constructor Detail

HtmlCharStream

public HtmlCharStream(java.io.Reader dstream,
                      int startline,
                      int startcolumn,
                      int buffersize)

HtmlCharStream

public HtmlCharStream(java.io.Reader dstream,
                      int startline,
                      int startcolumn)

HtmlCharStream

public HtmlCharStream(java.io.Reader dstream)

HtmlCharStream

public HtmlCharStream(java.io.InputStream dstream,
                      int startline,
                      int startcolumn,
                      int buffersize,
                      java.lang.String charset)
               throws java.io.UnsupportedEncodingException
Throws:
java.io.UnsupportedEncodingException

HtmlCharStream

public HtmlCharStream(java.io.InputStream dstream,
                      int startline,
                      int startcolumn,
                      java.lang.String charset)
               throws java.io.UnsupportedEncodingException
Throws:
java.io.UnsupportedEncodingException

HtmlCharStream

public HtmlCharStream(java.io.InputStream dstream,
                      java.lang.String charset)
               throws java.io.UnsupportedEncodingException
Throws:
java.io.UnsupportedEncodingException
Method Detail

ExpandBuff

protected void ExpandBuff(boolean wrapAround)

FillBuff

protected void FillBuff()
                 throws java.io.IOException
Throws:
java.io.IOException

BeginToken

public char BeginToken()
                throws java.io.IOException
Description copied from interface: CharStream
Returns the next character that marks the beginning of the next token. All characters must remain in the buffer between two successive calls to this method to implement backup correctly.

Specified by:
BeginToken in interface CharStream
Throws:
java.io.IOException

UpdateLineColumn

protected void UpdateLineColumn(char c)

readChar

public char readChar()
              throws java.io.IOException
Description copied from interface: CharStream
Returns the next character from the selected input. The method of selecting the input is the responsibility of the class implementing this interface. Can throw any java.io.IOException.

Specified by:
readChar in interface CharStream
Throws:
java.io.IOException

getColumn

public int getColumn()
Deprecated. 

Description copied from interface: CharStream
Returns the column position of the character last read.

Specified by:
getColumn in interface CharStream
See Also:
getEndColumn()

getLine

public int getLine()
Deprecated. 

Description copied from interface: CharStream
Returns the line number of the character last read.

Specified by:
getLine in interface CharStream
See Also:
getEndLine()

getEndColumn

public int getEndColumn()
Description copied from interface: CharStream
Returns the column number of the last character for current token (being matched after the last call to BeginTOken).

Specified by:
getEndColumn in interface CharStream

getEndLine

public int getEndLine()
Description copied from interface: CharStream
Returns the line number of the last character for current token (being matched after the last call to BeginTOken).

Specified by:
getEndLine in interface CharStream

getBeginColumn

public int getBeginColumn()
Description copied from interface: CharStream
Returns the column number of the first character for current token (being matched after the last call to BeginTOken).

Specified by:
getBeginColumn in interface CharStream

getBeginLine

public int getBeginLine()
Description copied from interface: CharStream
Returns the line number of the first character for current token (being matched after the last call to BeginTOken).

Specified by:
getBeginLine in interface CharStream

backup

public void backup(int amount)
Description copied from interface: CharStream
Backs up the input stream by amount steps. Lexer calls this method if it had already read some characters, but could not use them to match a (longer) token. So, they will be used again as the prefix of the next token and it is the implemetation's responsibility to do this right.

Specified by:
backup in interface CharStream

ReInit

public void ReInit(java.io.Reader dstream,
                   int startline,
                   int startcolumn,
                   int buffersize)

ReInit

public void ReInit(java.io.Reader dstream,
                   int startline,
                   int startcolumn)

ReInit

public void ReInit(java.io.Reader dstream)

ReInit

public void ReInit(java.io.InputStream dstream,
                   int startline,
                   int startcolumn,
                   int buffersize)

ReInit

public void ReInit(java.io.InputStream dstream)

ReInit

public void ReInit(java.io.InputStream dstream,
                   int startline,
                   int startcolumn)

GetImage

public java.lang.String GetImage()
Description copied from interface: CharStream
Returns a string made up of characters from the marked token beginning to the current buffer position. Implementations have the choice of returning anything that they want to. For example, for efficiency, one might decide to just return null, which is a valid implementation.

Specified by:
GetImage in interface CharStream

GetSuffix

public char[] GetSuffix(int len)
Description copied from interface: CharStream
Returns an array of characters that make up the suffix of length 'len' for the currently matched token. This is used to build up the matched string for use in actions in the case of MORE. A simple and inefficient implementation of this is as follows : { String t = GetImage(); return t.substring(t.length() - len, t.length()).toCharArray(); }

Specified by:
GetSuffix in interface CharStream

Done

public void Done()
Description copied from interface: CharStream
The lexer calls this function to indicate that it is done with the stream and hence implementations can free any resources held by this class. Again, the body of this function can be just empty and it will not affect the lexer's operation.

Specified by:
Done in interface CharStream

adjustBeginLineColumn

public void adjustBeginLineColumn(int newLine,
                                  int newCol)
Method to adjust line and column numbers for the start of a token.


getKindOfLineEnd

public java.lang.String getKindOfLineEnd()
Retrieve the kind of end of line.

Returns:


jhove/doc/edu/harvard/hul/ois/jhove/module/html/HtmlDocDesc.html0000644000707400001440000006124511510702354024003 0ustar garyusers HtmlDocDesc (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.html
Class HtmlDocDesc

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.html.HtmlDocDesc
Direct Known Subclasses:
Html3_2DocDesc, Html4DocDesc

public abstract class HtmlDocDesc
extends java.lang.Object

This is an abstract class for processing an HTML document that has been parsed into a List of HtmlElements. It defines common behavior for all supported versions of HTML except XHTML. Subclasses modify this base as needed.

Author:
Gary McGath

Field Summary
protected  HtmlTagDesc bodyElement
          A representation of the BODY element.
protected static java.util.HashMap commonTags
          Generic list of supported tags.
protected  HtmlTagDesc framesetElement
          A representation of the FRAMESET element.
protected  HtmlTagDesc headElement
          A representation of the HEAD element.
protected static java.lang.String[] headings
          Header tags, which are invariant for all HTML versions.
protected  HtmlTagDesc htmlElement
          A representation of the HTML element.
protected  java.util.Map supportedElements
          List of supported tags for this version of HTML.
 
Constructor Summary
HtmlDocDesc()
          Consructor.
 
Method Summary
protected static void addRequiredAttribute(java.util.List atts, java.lang.String name)
          Adds an attribute to a List, with unrestricted values and type REQUIRED.
protected static void addSelfAttribute(java.util.List atts, java.lang.String name)
          Adds an attribute to a List, with the only permitted value being the name of the attribute.
protected static void addSimpleAttribute(java.util.List atts, java.lang.String name)
          Adds an attribute to a List, with unrestricted values and type IMPLIED.
protected static void addStringsToList(java.lang.String[] names, java.util.List lst)
          Adds all the Strings in an array to the end of a List.
 HtmlMetadata getMetadata()
          Returns the metadata for this document.
protected  void init()
          Initialization called by subclass constructors after supportedElements has been assigned.
protected  void pushElementStack(JHOpenTag tag)
          Pushes an element onto the element stack.
protected static void removeStringsFromList(java.util.List lst, java.lang.String[] strs)
          Removes excluded strings from a List.
 boolean validate(java.util.List elements, RepInfo info)
          Validates the document and puts interesting properties into the RepInfo.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

commonTags

protected static java.util.HashMap commonTags
Generic list of supported tags. For efficiency, this is generated only once. Subclasses will need to get a copy of this list and make additions or deletions as necessary. They must not modify any of the existing members of the list.


supportedElements

protected java.util.Map supportedElements
List of supported tags for this version of HTML. The subclass is responsible for generating this, typically using commonTags as a starting point.


htmlElement

protected HtmlTagDesc htmlElement
A representation of the HTML element.


headElement

protected HtmlTagDesc headElement
A representation of the HEAD element.


bodyElement

protected HtmlTagDesc bodyElement
A representation of the BODY element.


framesetElement

protected HtmlTagDesc framesetElement
A representation of the FRAMESET element.


headings

protected static java.lang.String[] headings
Header tags, which are invariant for all HTML versions.

Constructor Detail

HtmlDocDesc

public HtmlDocDesc()
Consructor.

Method Detail

validate

public boolean validate(java.util.List elements,
                        RepInfo info)
Validates the document and puts interesting properties into the RepInfo.

Parameters:
elements - The element list constructed by the parser
info - The RepInfo object which will be populated with properties

getMetadata

public HtmlMetadata getMetadata()
Returns the metadata for this document.


init

protected void init()
Initialization called by subclass constructors after supportedElements has been assigned.


addStringsToList

protected static void addStringsToList(java.lang.String[] names,
                                       java.util.List lst)
Adds all the Strings in an array to the end of a List.


addSimpleAttribute

protected static void addSimpleAttribute(java.util.List atts,
                                         java.lang.String name)
Adds an attribute to a List, with unrestricted values and type IMPLIED.


addRequiredAttribute

protected static void addRequiredAttribute(java.util.List atts,
                                           java.lang.String name)
Adds an attribute to a List, with unrestricted values and type REQUIRED.


addSelfAttribute

protected static void addSelfAttribute(java.util.List atts,
                                       java.lang.String name)
Adds an attribute to a List, with the only permitted value being the name of the attribute. This kind of attribute is normally represented in HTML without an explicit value; in fact, some (most?) readers won't permit an explicit value.


removeStringsFromList

protected static void removeStringsFromList(java.util.List lst,
                                            java.lang.String[] strs)
Removes excluded strings from a List.


pushElementStack

protected void pushElementStack(JHOpenTag tag)
Pushes an element onto the element stack.



jhove/doc/edu/harvard/hul/ois/jhove/module/html/HtmlMetadata.html0000644000707400001440000006663011510702354024222 0ustar garyusers HtmlMetadata (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.html
Class HtmlMetadata

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.html.HtmlMetadata

public class HtmlMetadata
extends java.lang.Object

Repository for an HTML document's metadata. Also hold some state information, so that properties involving tags, attributes and pcdata can be constructed.

Author:
Gary McGath

Constructor Summary
HtmlMetadata()
          Constructor.
 
Method Summary
 void addAbbr(Property prop)
          Adds an ABBR tag's contents to the Meta property.
 void addCitation(java.lang.String text)
          Adds a CITE element's pcdata to the Citations property.
 void addDef(java.lang.String text)
          Adds a defined term to the Defined Terms property.
 void addEntity(java.lang.String entity)
          Adds a String to the Entities property.
 void addFrame(Property prop)
          Adds a FRAME tag's contents to the Meta property.
 void addImage(Property prop)
          Adds an item to the Images property.
 void addLanguage(java.lang.String lang)
          Add a language defined in an attribute of any element except the HTML element.
 void addLink(java.lang.String link)
          Adds a link to the Links property.
 void addMeta(Property prop)
          Adds a META tag's contents to the Meta property.
 void addScript(java.lang.String stype)
          Adds the language of a SCRIPT element to the Scripts property.
 void addToPropUnderConstruction(char[] ch, int start, int length)
          Adds PCDATA text to the property under construction.
 java.lang.String extractHttpEquivValue(Property prop, java.lang.String httpEquivValue)
          Extract the content value associated with a given httpEquiv.
 void finishPropUnderConstruction()
          Finishes any property under construction.
 java.lang.String getCharset()
           
 Property getPropUnderConstruction()
          Returns the "property under construction."
 java.lang.String getTitle()
          Returns the contents of the TITLE element.
 Utf8BlockMarker getUtf8BlockMarker()
          Returns the UTF8BlockMarker for the metadata.
 void setCharset(java.lang.String charset)
          Stores the charset defined in the HTML element.
 void setLanguage(java.lang.String lang)
          Stores the language defined in the HTML element.
 void setPropUnderConstruction(Property p)
          Sets a "property under construction".
 void setTitle(java.lang.String title)
          Stores the contents of the TITLE element.
 Property toProperty(TextMDMetadata _textMD)
          Converts the metadata to a Property.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

HtmlMetadata

public HtmlMetadata()
Constructor. Initializes to the empty state.

Method Detail

setTitle

public void setTitle(java.lang.String title)
Stores the contents of the TITLE element.


setLanguage

public void setLanguage(java.lang.String lang)
Stores the language defined in the HTML element.


addLanguage

public void addLanguage(java.lang.String lang)
Add a language defined in an attribute of any element except the HTML element.


addCitation

public void addCitation(java.lang.String text)
Adds a CITE element's pcdata to the Citations property.


addMeta

public void addMeta(Property prop)
Adds a META tag's contents to the Meta property.


extractHttpEquivValue

public java.lang.String extractHttpEquivValue(Property prop,
                                              java.lang.String httpEquivValue)
Extract the content value associated with a given httpEquiv.

Parameters:
prop - List containing the description of the meta tag
httpEquivValue - the httpEquiv to consider
Returns:
the content value

setCharset

public void setCharset(java.lang.String charset)
Stores the charset defined in the HTML element.


addFrame

public void addFrame(Property prop)
Adds a FRAME tag's contents to the Meta property.


addAbbr

public void addAbbr(Property prop)
Adds an ABBR tag's contents to the Meta property.


addLink

public void addLink(java.lang.String link)
Adds a link to the Links property.


addImage

public void addImage(Property prop)
Adds an item to the Images property.


addDef

public void addDef(java.lang.String text)
Adds a defined term to the Defined Terms property.


addScript

public void addScript(java.lang.String stype)
Adds the language of a SCRIPT element to the Scripts property.


addEntity

public void addEntity(java.lang.String entity)
Adds a String to the Entities property. This property is a SortedSet, so duplicates are not added, and the resulting set can be iterated in alphabetical order.


getUtf8BlockMarker

public Utf8BlockMarker getUtf8BlockMarker()
Returns the UTF8BlockMarker for the metadata.


getTitle

public java.lang.String getTitle()
Returns the contents of the TITLE element.


getCharset

public java.lang.String getCharset()

toProperty

public Property toProperty(TextMDMetadata _textMD)
Converts the metadata to a Property.


setPropUnderConstruction

public void setPropUnderConstruction(Property p)
Sets a "property under construction". This is generally called when an XML element is found, and the PCDATA must be incorporated into the property.


getPropUnderConstruction

public Property getPropUnderConstruction()
Returns the "property under construction."


addToPropUnderConstruction

public void addToPropUnderConstruction(char[] ch,
                                       int start,
                                       int length)
Adds PCDATA text to the property under construction. This may not all be provided in one lump, so it has to allow for multiple chunks.


finishPropUnderConstruction

public void finishPropUnderConstruction()
Finishes any property under construction. This is called when an end element is encountered.



jhove/doc/edu/harvard/hul/ois/jhove/module/html/HtmlSpecialToken.html0000644000707400001440000002307711510702354025061 0ustar garyusers HtmlSpecialToken (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.html
Class HtmlSpecialToken

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.html.HtmlSpecialToken

public class HtmlSpecialToken
extends java.lang.Object

Class for defining special items in HTML element and attribute definitions. This class is never instantiated except by the static elements it defines.

Author:
Gary McGath

Field Summary
static HtmlSpecialToken PCDATA
          The PCDATA token.
 
Method Summary
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

PCDATA

public static HtmlSpecialToken PCDATA
The PCDATA token. Signifies that PCDATA is permitted in the content of an element.



jhove/doc/edu/harvard/hul/ois/jhove/module/html/HtmlStack.html0000644000707400001440000005561211510702354023545 0ustar garyusers HtmlStack (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.html
Class HtmlStack

java.lang.Object
  extended by java.util.AbstractCollection<E>
      extended by java.util.AbstractList<E>
          extended by java.util.AbstractSequentialList<E>
              extended by java.util.LinkedList
                  extended by edu.harvard.hul.ois.jhove.module.html.HtmlStack
All Implemented Interfaces:
java.io.Serializable, java.lang.Cloneable, java.lang.Iterable, java.util.Collection, java.util.Deque, java.util.List, java.util.Queue

public class HtmlStack
extends java.util.LinkedList

A LinkedList dressed up as a stack for processing HTML objects. It knows about certain elements and their history on the stack.

Author:
Gary McGath
See Also:
Serialized Form

Field Summary
 
Fields inherited from class java.util.AbstractList
modCount
 
Constructor Summary
HtmlStack()
           
 
Method Summary
protected  boolean excludesTag(java.lang.String tag)
          Returns true if any element on the stack prohibits the specified tag.
protected  boolean isBodySeen()
          Returns true if a BODY element has been pushed on the stack.
protected  boolean isHeadSeen()
          Returns true if a HEAD element has been pushed on the stack.
protected  void popp()
          Pops top element from element stack.
protected  void popTo(int idx)
          Pops elements from the stack up to and including the one indexed by idx
protected  void push(JHOpenTag tag)
          Pushes an element onto the stack.
protected  int search(java.lang.String tag)
          Searches backwards through the element stack for a match to a given tag.
protected  void setBodyElement(HtmlTagDesc elem)
          Sets the value of the HEAD element for easy comparison
protected  void setFramesetElement(HtmlTagDesc elem)
          Sets the value of the HEAD element for easy comparison
protected  void setHeadElement(HtmlTagDesc elem)
          Sets the value of the HEAD element for easy comparison
protected  JHOpenTag top()
          Gets the top of the element stack without popping it.
 
Methods inherited from class java.util.LinkedList
add, add, addAll, addAll, addFirst, addLast, clear, clone, contains, descendingIterator, element, get, getFirst, getLast, indexOf, lastIndexOf, listIterator, offer, offerFirst, offerLast, peek, peekFirst, peekLast, poll, pollFirst, pollLast, pop, push, remove, remove, remove, removeFirst, removeFirstOccurrence, removeLast, removeLastOccurrence, set, size, toArray, toArray
 
Methods inherited from class java.util.AbstractSequentialList
iterator
 
Methods inherited from class java.util.AbstractList
equals, hashCode, listIterator, removeRange, subList
 
Methods inherited from class java.util.AbstractCollection
containsAll, isEmpty, removeAll, retainAll, toString
 
Methods inherited from class java.lang.Object
finalize, getClass, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface java.util.List
containsAll, equals, hashCode, isEmpty, iterator, listIterator, removeAll, retainAll, subList
 
Methods inherited from interface java.util.Deque
iterator
 

Constructor Detail

HtmlStack

public HtmlStack()
Method Detail

setHeadElement

protected void setHeadElement(HtmlTagDesc elem)
Sets the value of the HEAD element for easy comparison


setBodyElement

protected void setBodyElement(HtmlTagDesc elem)
Sets the value of the HEAD element for easy comparison


setFramesetElement

protected void setFramesetElement(HtmlTagDesc elem)
Sets the value of the HEAD element for easy comparison


popp

protected void popp()
Pops top element from element stack. If we ever decide to go to a different stack implementation, it's necessary only to change these methods. Also, they add some type checking. Name changed from "pop" to "popp" to avoid a conflict in Java 1.6 with the List class.


push

protected void push(JHOpenTag tag)
Pushes an element onto the stack. This should have its element field set to function properly.


top

protected JHOpenTag top()
Gets the top of the element stack without popping it.


search

protected int search(java.lang.String tag)
Searches backwards through the element stack for a match to a given tag. Return -1 if no match.


popTo

protected void popTo(int idx)
Pops elements from the stack up to and including the one indexed by idx


isHeadSeen

protected boolean isHeadSeen()
Returns true if a HEAD element has been pushed on the stack.


isBodySeen

protected boolean isBodySeen()
Returns true if a BODY element has been pushed on the stack.


excludesTag

protected boolean excludesTag(java.lang.String tag)
Returns true if any element on the stack prohibits the specified tag.



jhove/doc/edu/harvard/hul/ois/jhove/module/html/HtmlTagDesc.html0000644000707400001440000007622611510702354024016 0ustar garyusers HtmlTagDesc (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.html
Class HtmlTagDesc

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.html.HtmlTagDesc
Direct Known Subclasses:
HtmlTempTagDesc

public class HtmlTagDesc
extends java.lang.Object

This class defines the permitted behavior of a particular HTML tag. The full descriptive power of a DTD description isn't implemented here, but content types and sequences of content are implemented.

Author:
Gary McGath

Field Summary
protected  int[] _sequence
          Array controlling the number of times each element of _contentArray may be used.
static int SEQ0_1
          Value in _sequence indicating an element may be used 0 or 1 times.
static int SEQ0_MANY
          Value in _sequence indicating an element may be used 0 or more times.
static int SEQ1
          Value in _sequence indicating an element must be used exactly once.
static int SEQ1_MANY
          Value in _sequence indicating an element may be used 1 or more times.
 
Constructor Summary
HtmlTagDesc(java.lang.String name, boolean openTagRequired, boolean closeTagRequired, int[] sequence, java.util.List[] contentArray, java.util.List attributes)
          Constructor for sequenced case.
HtmlTagDesc(java.lang.String name, boolean openTagRequired, boolean closeTagRequired, java.util.List content, java.util.List attributes)
          Constructor for simple case.
 
Method Summary
 void addImplicitContainer(HtmlTagDesc container)
          Provides the object with an array of element tags in which this element can be nested.
protected  boolean allowsPCData()
           
protected  boolean allowsTag(java.lang.String tag, HtmlDocDesc doc)
          Reports whether this element allows a given tag name in its content.
protected  boolean allowsTag(java.lang.String tag, int index, HtmlDocDesc doc)
          Reports whether this element allows a given tag name in its content, at the specified index.
protected  boolean canAdvanceFrom(int index, int elemCount)
          Reports whether it's legal to advance to the next content index.
protected  boolean canGetMoreAt(int index, int elemCount)
          Reports whether additional elements can be matched at the specified content index.
 boolean excludesTag(java.lang.String tag)
          Returns true if a given tag is excluded within this element.
protected  java.util.List implicitContainers(java.lang.String tag)
          Reports whether this element can be implicitly nested in an element with a given tag.
protected  boolean isCloseTagRequired()
          Returns true if the closing tag is required
protected  boolean isContentEmpty()
          Returns true if this element has empty content
 boolean isTemp()
          Reports whether this is a temporary tag descriptor.
 boolean matches(java.lang.String name)
           
protected  java.util.List missingRequiredAttributes(java.util.List names)
          Accepts a list of attribute names, and returns a List of required attribute names which are not present in the parameter list.
protected  HtmlAttributeDesc namedAttDesc(java.lang.String name)
          Returns the attribute with a given name, or null if no such attribute is defined for the element
 void setAttributes(java.lang.String[] attributeArray)
          Alternative way of setting the attribute names.
 void setExcludedContent(java.lang.String[] content)
          Specifies tags which may not be included in this element or in any element nested at any depth within it.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

_sequence

protected int[] _sequence
Array controlling the number of times each element of _contentArray may be used.


SEQ0_1

public static final int SEQ0_1
Value in _sequence indicating an element may be used 0 or 1 times.

See Also:
Constant Field Values

SEQ1

public static final int SEQ1
Value in _sequence indicating an element must be used exactly once.

See Also:
Constant Field Values

SEQ1_MANY

public static final int SEQ1_MANY
Value in _sequence indicating an element may be used 1 or more times.

See Also:
Constant Field Values

SEQ0_MANY

public static final int SEQ0_MANY
Value in _sequence indicating an element may be used 0 or more times.

See Also:
Constant Field Values
Constructor Detail

HtmlTagDesc

public HtmlTagDesc(java.lang.String name,
                   boolean openTagRequired,
                   boolean closeTagRequired,
                   java.util.List content,
                   java.util.List attributes)
Constructor for simple case.

Parameters:
name - Name of the element
openTagRequired - true if an opening tag is required
closeTagRequired - true if a closing tag is required
content - List of permitted tags. But what do I do when a particular order is required? Null if element is defined at EMPTY.
attributes - List of HtmlAttributeDesc elements enumerating the permitted attributes. May be null, in which case _attributes will be stored as an empty list.

HtmlTagDesc

public HtmlTagDesc(java.lang.String name,
                   boolean openTagRequired,
                   boolean closeTagRequired,
                   int[] sequence,
                   java.util.List[] contentArray,
                   java.util.List attributes)
Constructor for sequenced case.

Parameters:
name - Name of the element
openTagRequired - true if an opening tag is required
closeTagRequired - true if a closing tag is required
sequence - Array indicating the sequencing of elements in content. Must have the same length as sequence.
attributes - List of HtmlAttributeDesc elements enumerating the permitted attributes. May be null, in which case _attributes will be stored as an empty list.
Method Detail

setExcludedContent

public void setExcludedContent(java.lang.String[] content)
Specifies tags which may not be included in this element or in any element nested at any depth within it. Corresponds to the -(content) feature of the DTD.


excludesTag

public boolean excludesTag(java.lang.String tag)
Returns true if a given tag is excluded within this element. It is necessary to call this method for each element on the stack to determine if it is excluded.


setAttributes

public void setAttributes(java.lang.String[] attributeArray)
Alternative way of setting the attribute names. This can be used where all the attributes are unrestricted. This will replace any previously set attributes.


addImplicitContainer

public void addImplicitContainer(HtmlTagDesc container)
Provides the object with an array of element tags in which this element can be nested. Only tags for elements with optional opening tags may be listed here.


matches

public boolean matches(java.lang.String name)

isTemp

public boolean isTemp()
Reports whether this is a temporary tag descriptor. Returns false unless overridden.


allowsTag

protected boolean allowsTag(java.lang.String tag,
                            int index,
                            HtmlDocDesc doc)
Reports whether this element allows a given tag name in its content, at the specified index.


implicitContainers

protected java.util.List implicitContainers(java.lang.String tag)
Reports whether this element can be implicitly nested in an element with a given tag. There may be more than one implicit container for a tag; if the DTD is unambiguous, there should be only one which is permissible in any given context.


canGetMoreAt

protected boolean canGetMoreAt(int index,
                               int elemCount)
Reports whether additional elements can be matched at the specified content index. The index is assumed to be legal.


canAdvanceFrom

protected boolean canAdvanceFrom(int index,
                                 int elemCount)
Reports whether it's legal to advance to the next content index. The index is assumed to be legal, but the one to which it's trying to advance may not be.


allowsTag

protected boolean allowsTag(java.lang.String tag,
                            HtmlDocDesc doc)
Reports whether this element allows a given tag name in its content. This version should be used only with element descriptors that aren't associated with tags, for determining if a hypothetical implied element could contain the given tag.


allowsPCData

protected boolean allowsPCData()

namedAttDesc

protected HtmlAttributeDesc namedAttDesc(java.lang.String name)
Returns the attribute with a given name, or null if no such attribute is defined for the element


missingRequiredAttributes

protected java.util.List missingRequiredAttributes(java.util.List names)
Accepts a list of attribute names, and returns a List of required attribute names which are not present in the parameter list. Returns an empty List if all required attributes are present.


isCloseTagRequired

protected boolean isCloseTagRequired()
Returns true if the closing tag is required


isContentEmpty

protected boolean isContentEmpty()
Returns true if this element has empty content



jhove/doc/edu/harvard/hul/ois/jhove/module/html/HtmlTempTagDesc.html0000644000707400001440000004154111510702354024634 0ustar garyusers HtmlTempTagDesc (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.html
Class HtmlTempTagDesc

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.html.HtmlTagDesc
      extended by edu.harvard.hul.ois.jhove.module.html.HtmlTempTagDesc

public class HtmlTempTagDesc
extends HtmlTagDesc

Subclass of HtmlTagDesc for temporary tags. This doesn't add any functionality to the superclass, but serves as a marker class.

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.html.HtmlTagDesc
_sequence, SEQ0_1, SEQ0_MANY, SEQ1, SEQ1_MANY
 
Constructor Summary
HtmlTempTagDesc(java.lang.String name)
          Constructor.
 
Method Summary
protected  boolean allowsTag(java.lang.String tag, int index, HtmlDocDesc doc)
          Reports whether this element allows a given tag name in its content, at the specified index.
 boolean isTemp()
          Reports whether this is a temporary tag descriptor.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.html.HtmlTagDesc
addImplicitContainer, allowsPCData, allowsTag, canAdvanceFrom, canGetMoreAt, excludesTag, implicitContainers, isCloseTagRequired, isContentEmpty, matches, missingRequiredAttributes, namedAttDesc, setAttributes, setExcludedContent
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

HtmlTempTagDesc

public HtmlTempTagDesc(java.lang.String name)
Constructor.

Parameters:
name - Tag name
Method Detail

isTemp

public boolean isTemp()
Reports whether this is a temporary tag descriptor. Returns true.

Overrides:
isTemp in class HtmlTagDesc

allowsTag

protected boolean allowsTag(java.lang.String tag,
                            int index,
                            HtmlDocDesc doc)
Reports whether this element allows a given tag name in its content, at the specified index. Since we know nothing about this element, no meaningful answer is possible. Return true just to minimize the number of extra error messages.

Overrides:
allowsTag in class HtmlTagDesc


jhove/doc/edu/harvard/hul/ois/jhove/module/html/JHAttribute.html0000644000707400001440000003314211510702354024032 0ustar garyusers JHAttribute (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.html
Class JHAttribute

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.html.JHAttribute

public class JHAttribute
extends java.lang.Object

A description of an attribute within a JHOpenTag. This is not a subclass of JHElement, as it isn't part of the elements list. It is simply a way to store the information about an attribute in a JHOpenTag.

Author:
Gary McGath

Constructor Summary
JHAttribute(java.lang.String name, java.lang.String namespace, java.lang.String value, int line, int column)
          Constructor.
 
Method Summary
 int getColumn()
          Returns the column number of the beginning of the attribute definition.
 int getLine()
          Returns the line number of the beginning of the attribute definition.
 java.lang.String getName()
          Returns the attribute's name.
 java.lang.String getNamespace()
          Returns the namespace of the attribute's name.
 java.lang.String getValue()
          Returns the attribute's value.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

JHAttribute

public JHAttribute(java.lang.String name,
                   java.lang.String namespace,
                   java.lang.String value,
                   int line,
                   int column)
Constructor.

Parameters:
name - Name of the attribute. Will be forced to lower case as it is stored. Must not be null.
namespace - Namespace for the attribute. May be null if no namespace is specified.
value - Value of the attribute. May be null. If it is in quotes, the quotes will be stripped.
line - Line number at which the attribute begins.
column - Column number at which the attribute begins.
Method Detail

getName

public java.lang.String getName()
Returns the attribute's name. This is guaranteed to be in lower case.


getNamespace

public java.lang.String getNamespace()
Returns the namespace of the attribute's name. May be null.


getValue

public java.lang.String getValue()
Returns the attribute's value. May be null. If not null and was originally enclosed in double quotes, the return value has quotes stripped.


getLine

public int getLine()
Returns the line number of the beginning of the attribute definition.


getColumn

public int getColumn()
Returns the column number of the beginning of the attribute definition.



jhove/doc/edu/harvard/hul/ois/jhove/module/html/JHCloseTag.html0000644000707400001440000003322211510702354023567 0ustar garyusers JHCloseTag (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.html
Class JHCloseTag

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.html.JHElement
      extended by edu.harvard.hul.ois.jhove.module.html.JHCloseTag

public class JHCloseTag
extends JHElement

Representation of a parsed HTML close tag.

Author:
Gary McGath

Field Summary
 java.lang.String _name
           
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.html.JHElement
_column, _line
 
Constructor Summary
JHCloseTag(java.util.List elements, java.lang.String name, int line, int column)
          Constructor.
 
Method Summary
 java.lang.String getName()
          Returns the tag's name.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.html.JHElement
getColumn, getEntities, getLine
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

_name

public java.lang.String _name
Constructor Detail

JHCloseTag

public JHCloseTag(java.util.List elements,
                  java.lang.String name,
                  int line,
                  int column)
Constructor.

Parameters:
elements - The list of parsed elements, to which this gets added.
name - The name of the tag
line - Line number, for information reporting
column - Line number, for information reporting
Method Detail

getName

public java.lang.String getName()
Returns the tag's name.



jhove/doc/edu/harvard/hul/ois/jhove/module/html/JHComment.html0000644000707400001440000002741511510702354023477 0ustar garyusers JHComment (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.html
Class JHComment

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.html.JHElement
      extended by edu.harvard.hul.ois.jhove.module.html.JHComment

public class JHComment
extends JHElement

Representation of a parsed HTML comment.

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.html.JHElement
_column, _line
 
Constructor Summary
JHComment(java.util.List elements, java.lang.String text)
          Constructor.
 
Method Summary
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.html.JHElement
getColumn, getEntities, getLine
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

JHComment

public JHComment(java.util.List elements,
                 java.lang.String text)
Constructor. Just adds the comment to the element list.



jhove/doc/edu/harvard/hul/ois/jhove/module/html/JHDoctype.html0000644000707400001440000003256011510702354023501 0ustar garyusers JHDoctype (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.html
Class JHDoctype

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.html.JHElement
      extended by edu.harvard.hul.ois.jhove.module.html.JHDoctype

public class JHDoctype
extends JHElement

Representation of a parsed HTML DOCTYPE.

Author:
Gary McGath

Field Summary
 java.util.List _doctypeElements
          List of tokens in the DOCTYPE.
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.html.JHElement
_column, _line
 
Constructor Summary
JHDoctype(java.util.List elements, java.util.List dtElements)
          Constructor.
 
Method Summary
 java.util.List getDoctypeElements()
          Returns the doctype token list.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.html.JHElement
getColumn, getEntities, getLine
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

_doctypeElements

public java.util.List _doctypeElements
List of tokens in the DOCTYPE.

Constructor Detail

JHDoctype

public JHDoctype(java.util.List elements,
                 java.util.List dtElements)
Constructor.

Method Detail

getDoctypeElements

public java.util.List getDoctypeElements()
Returns the doctype token list.



jhove/doc/edu/harvard/hul/ois/jhove/module/html/JHElement.html0000644000707400001440000003466311510702354023471 0ustar garyusers JHElement (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.html
Class JHElement

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.html.JHElement
Direct Known Subclasses:
JHCloseTag, JHComment, JHDoctype, JHErrorElement, JHOpenTag, JHPCData, JHXmlDecl

public abstract class JHElement
extends java.lang.Object

Abstract superclass for the representation of portions of an HTML file. This is not the same usage of "element" as the SGML definition, but refers to a parsed unit, such as an opening tag, closing tag, or PCDATA.

Author:
Gary McGath

Field Summary
 int _column
           
 int _line
           
 
Constructor Summary
JHElement(java.util.List elements)
          Constructor.
 
Method Summary
 int getColumn()
          Returns the column number for the start of the element.
protected  java.util.List getEntities(java.lang.String text)
          Extracts entities from a text string and returns them as a List of Strings.
 int getLine()
          Returns the line number for the start of the element.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

_column

public int _column

_line

public int _line
Constructor Detail

JHElement

public JHElement(java.util.List elements)
Constructor.

Parameters:
elements - List of elements representing the document. May be null for a stub element which is implied rather than being generated by the parser.
Method Detail

getLine

public int getLine()
Returns the line number for the start of the element.


getColumn

public int getColumn()
Returns the column number for the start of the element.


getEntities

protected java.util.List getEntities(java.lang.String text)
Extracts entities from a text string and returns them as a List of Strings. If there are no entities, returns an empty List.



jhove/doc/edu/harvard/hul/ois/jhove/module/html/JHErrorElement.html0000644000707400001440000003513711510702354024500 0ustar garyusers JHErrorElement (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.html
Class JHErrorElement

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.html.JHElement
      extended by edu.harvard.hul.ois.jhove.module.html.JHErrorElement

public class JHErrorElement
extends JHElement

A JHElement which signifies a syntactic error.

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.html.JHElement
_column, _line
 
Constructor Summary
JHErrorElement(java.util.List elements, java.lang.String message, java.lang.String image, boolean illFormed)
          Constructor.
 
Method Summary
 java.lang.String getImage()
           
 void reportError(RepInfo info)
          Puts the item's error message into the RepInfo object, and affects the wellFormed and valid flags as required.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.html.JHElement
getColumn, getEntities, getLine
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

JHErrorElement

public JHErrorElement(java.util.List elements,
                      java.lang.String message,
                      java.lang.String image,
                      boolean illFormed)
Constructor.

Parameters:
elements - List of elements representing the document.
message - Message to be reported
image - Textual representation of the offending portion. This will be used as the submessage of a generated ErrorMessage.
illFormed - true if the error makes the document not well-formed, false if it makes it only invalid.
Method Detail

getImage

public java.lang.String getImage()

reportError

public void reportError(RepInfo info)
Puts the item's error message into the RepInfo object, and affects the wellFormed and valid flags as required. Once it's determined that a document is not well-formed, error elements indicating only invalidity will be ignored. However, additional messages that indicate the current level of badness (not well-formed or invalid) will continue to be reported.



jhove/doc/edu/harvard/hul/ois/jhove/module/html/JHOpenTag.html0000644000707400001440000006421711510702354023433 0ustar garyusers JHOpenTag (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.html
Class JHOpenTag

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.html.JHElement
      extended by edu.harvard.hul.ois.jhove.module.html.JHOpenTag

public class JHOpenTag
extends JHElement

Representation of a parsed HTML open tag, including its attributes. This arguable would better be called an element, but JHElement is the name of the abstract superclass.

Author:
Gary McGath

Field Summary
 java.util.List _attributes
          List of element attributes.
 java.lang.String _name
          Element name.
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.html.JHElement
_column, _line
 
Constructor Summary
JHOpenTag(java.util.List elements, java.lang.String name, java.util.List attrs, int line, int column)
          Constructor.
JHOpenTag(java.util.List elements, java.lang.String name, java.util.List attrs, int line, int column, java.lang.String message)
          Constructor with error message.
JHOpenTag(java.lang.String name)
          Constructor for a stub attribute.
 
Method Summary
protected  void advanceIndex()
          Increments the value of _contentIdx
protected  boolean allowsTag(java.lang.String tag, HtmlDocDesc doc)
          Returns true if the tag given in the parameter is allowable in our context.
protected  boolean canAdvance()
          Reports whether it's legal to advance to the next content index.
protected  boolean canGetMore()
          Checks if we can accept another element at the current content index.
protected  void countComponent()
          Counts off a component at the current index.
 java.util.List getAttributes()
          Returns the tag's attributes.
 HtmlTagDesc getElement()
          Returns the element definition which has been associated with this tag.
protected  java.lang.String getErrorMessage()
          Returns the error message associated with this element.
 java.lang.String getName()
          Returns the tag's name.
protected  void processElement(HtmlMetadata mdata)
          Process the element to extract any available metadata.
 void setElement(HtmlTagDesc element)
          Associates an the tag with an element definition.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.html.JHElement
getColumn, getEntities, getLine
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

_name

public java.lang.String _name
Element name. Fields are made public to avoid overcomplicating the .jj file


_attributes

public java.util.List _attributes
List of element attributes. Each attributes is an array of two strings, the name and the value. If no explicit value was given, attribute[1] is null. If the attribute was in quotes, the quotes are still there.

Constructor Detail

JHOpenTag

public JHOpenTag(java.util.List elements,
                 java.lang.String name,
                 java.util.List attrs,
                 int line,
                 int column)
Constructor.

Parameters:
elements - The list of parsed elements, to which this gets added. May be null for a stub element not generated by the parser.
name - The name of the tag
attrs - A List of attributes, representing the parsed attributes of the tag. Each attributes is an array of two strings, the name and the value. If no explicit value was given, attribute[1] is null. If the attribute was in quotes, the quotes are still there.
line - Line number, for information reporting
column - Line number, for information reporting

JHOpenTag

public JHOpenTag(java.util.List elements,
                 java.lang.String name,
                 java.util.List attrs,
                 int line,
                 int column,
                 java.lang.String message)
Constructor with error message. This is used to allow constructs which are erroneous but common -- specifically, the closing of a tag with "/>".

Parameters:
elements - The list of parsed elements, to which this gets added. May be null for a stub element not generated by the parser.
name - The name of the tag
attrs - A List of attributes, representing the parsed attributes of the tag. Each attributes is an array of two strings, the name and the value. If no explicit value was given, attribute[1] is null. If the attribute was in quotes, the quotes are still there.
message - An error message indicating that this element isn't well-formed, but we'll take it anyway.

JHOpenTag

public JHOpenTag(java.lang.String name)
Constructor for a stub attribute. This shouldn't ever be used by the parser, but only by the module for generating implied elements.

Method Detail

setElement

public void setElement(HtmlTagDesc element)
Associates an the tag with an element definition. This is done by the HTML module, not by the parser.


getElement

public HtmlTagDesc getElement()
Returns the element definition which has been associated with this tag.


getName

public java.lang.String getName()
Returns the tag's name.


getAttributes

public java.util.List getAttributes()
Returns the tag's attributes.

Returns:
The attributes as a List. Each attributes is an array of two strings, the name and the value. If no explicit value was given, attribute[1] is null. If the attribute was in quotes, the quotes are still there.

processElement

protected void processElement(HtmlMetadata mdata)
Process the element to extract any available metadata.


allowsTag

protected boolean allowsTag(java.lang.String tag,
                            HtmlDocDesc doc)
Returns true if the tag given in the parameter is allowable in our context.


canGetMore

protected boolean canGetMore()
Checks if we can accept another element at the current content index.


countComponent

protected void countComponent()
Counts off a component at the current index.


advanceIndex

protected void advanceIndex()
Increments the value of _contentIdx


canAdvance

protected boolean canAdvance()
Reports whether it's legal to advance to the next content index. The index is assumed to be legal, but the one to which it's trying to advance may not be.


getErrorMessage

protected java.lang.String getErrorMessage()
Returns the error message associated with this element. If it returns a non-null value, the tag is not well-formed, and the error should be reported.



jhove/doc/edu/harvard/hul/ois/jhove/module/html/JHPCData.html0000644000707400001440000003532411510702354023167 0ustar garyusers JHPCData (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.html
Class JHPCData

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.html.JHElement
      extended by edu.harvard.hul.ois.jhove.module.html.JHPCData

public class JHPCData
extends JHElement

Representation of parsed HTML PCDATA.

Author:
Gary McGath

Field Summary
 java.lang.String _text
           
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.html.JHElement
_column, _line
 
Constructor Summary
JHPCData(java.util.List elements, java.lang.String text, int line, int column)
          Constructor.
 
Method Summary
protected  void processPCData(HtmlStack elementStack, HtmlMetadata metadata)
          Extracts metadata and entities from the PCData object and its stack context.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.html.JHElement
getColumn, getEntities, getLine
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

_text

public java.lang.String _text
Constructor Detail

JHPCData

public JHPCData(java.util.List elements,
                java.lang.String text,
                int line,
                int column)
Constructor.

Parameters:
elements - The list of parsed elements, to which this gets added. May be null for a stub element not generated by the parser.
text - The name of the tag
line - Line number, for information reporting
column - Line number, for information reporting
Method Detail

processPCData

protected void processPCData(HtmlStack elementStack,
                             HtmlMetadata metadata)
Extracts metadata and entities from the PCData object and its stack context.



jhove/doc/edu/harvard/hul/ois/jhove/module/html/JHXmlDecl.html0000644000707400001440000002777711510702354023440 0ustar garyusers JHXmlDecl (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.html
Class JHXmlDecl

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.html.JHElement
      extended by edu.harvard.hul.ois.jhove.module.html.JHXmlDecl

public class JHXmlDecl
extends JHElement

Representation of an XML declaration. This class allows XHTML files to be examined without choking. The actual work is done by the XML module, but first we have to determine that it is XHTML.

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.html.JHElement
_column, _line
 
Constructor Summary
JHXmlDecl(java.util.List elements)
          Constructor.
 
Method Summary
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.html.JHElement
getColumn, getEntities, getLine
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

JHXmlDecl

public JHXmlDecl(java.util.List elements)
Constructor. We don't really care about the content; this is just a placeholder. So it has a minimal constructor.

Parameters:
elements - The list of parsed elements, to which this gets added.


jhove/doc/edu/harvard/hul/ois/jhove/module/html/ParseException.html0000644000707400001440000004741011510702354024601 0ustar garyusers ParseException (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.html
Class ParseException

java.lang.Object
  extended by java.lang.Throwable
      extended by java.lang.Exception
          extended by edu.harvard.hul.ois.jhove.module.html.ParseException
All Implemented Interfaces:
java.io.Serializable

public class ParseException
extends java.lang.Exception

This exception is thrown when parse errors are encountered. You can explicitly create objects of this exception type by calling the method generateParseException in the generated parser. You can modify this class to customize your error reporting mechanisms so long as you retain the public fields.

See Also:
Serialized Form

Field Summary
 Token currentToken
          This is the last token that has been consumed successfully.
protected  java.lang.String eol
          The end of line string for this machine.
 int[][] expectedTokenSequences
          Each entry in this array is an array of integers.
protected  boolean specialConstructor
          This variable determines which constructor was used to create this object and thereby affects the semantics of the "getMessage" method (see below).
 java.lang.String[] tokenImage
          This is a reference to the "tokenImage" array of the generated parser within which the parse error occurred.
 
Constructor Summary
ParseException()
          The following constructors are for use by you for whatever purpose you can think of.
ParseException(java.lang.String message)
           
ParseException(Token currentTokenVal, int[][] expectedTokenSequencesVal, java.lang.String[] tokenImageVal)
          This constructor is used by the method "generateParseException" in the generated parser.
 
Method Summary
protected  java.lang.String add_escapes(java.lang.String str)
          Used to convert raw characters to their escaped version when these raw version cannot be used as part of an ASCII string literal.
 java.lang.String getMessage()
          This method has the standard behavior when this object has been created using the standard constructors.
 
Methods inherited from class java.lang.Throwable
fillInStackTrace, getCause, getLocalizedMessage, getStackTrace, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

specialConstructor

protected boolean specialConstructor
This variable determines which constructor was used to create this object and thereby affects the semantics of the "getMessage" method (see below).


currentToken

public Token currentToken
This is the last token that has been consumed successfully. If this object has been created due to a parse error, the token followng this token will (therefore) be the first error token.


expectedTokenSequences

public int[][] expectedTokenSequences
Each entry in this array is an array of integers. Each array of integers represents a sequence of tokens (by their ordinal values) that is expected at this point of the parse.


tokenImage

public java.lang.String[] tokenImage
This is a reference to the "tokenImage" array of the generated parser within which the parse error occurred. This array is defined in the generated ...Constants interface.


eol

protected java.lang.String eol
The end of line string for this machine.

Constructor Detail

ParseException

public ParseException(Token currentTokenVal,
                      int[][] expectedTokenSequencesVal,
                      java.lang.String[] tokenImageVal)
This constructor is used by the method "generateParseException" in the generated parser. Calling this constructor generates a new object of this type with the fields "currentToken", "expectedTokenSequences", and "tokenImage" set. The boolean flag "specialConstructor" is also set to true to indicate that this constructor was used to create this object. This constructor calls its super class with the empty string to force the "toString" method of parent class "Throwable" to print the error message in the form: ParseException:


ParseException

public ParseException()
The following constructors are for use by you for whatever purpose you can think of. Constructing the exception in this manner makes the exception behave in the normal way - i.e., as documented in the class "Throwable". The fields "errorToken", "expectedTokenSequences", and "tokenImage" do not contain relevant information. The JavaCC generated code does not use these constructors.


ParseException

public ParseException(java.lang.String message)
Method Detail

getMessage

public java.lang.String getMessage()
This method has the standard behavior when this object has been created using the standard constructors. Otherwise, it uses "currentToken" and "expectedTokenSequences" to generate a parse error message and returns it. If this object has been created due to a parse error, and you do not catch it (it gets thrown from the parser), then this method is called during the printing of the final stack trace, and hence the correct error message gets displayed.

Overrides:
getMessage in class java.lang.Throwable

add_escapes

protected java.lang.String add_escapes(java.lang.String str)
Used to convert raw characters to their escaped version when these raw version cannot be used as part of an ASCII string literal.



jhove/doc/edu/harvard/hul/ois/jhove/module/html/ParseHtml.html0000644000707400001440000011152711510702354023550 0ustar garyusers ParseHtml (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.html
Class ParseHtml

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.html.ParseHtml
All Implemented Interfaces:
ParseHtmlConstants

public class ParseHtml
extends java.lang.Object
implements ParseHtmlConstants


Field Summary
 Token jj_nt
           
 boolean lookingAhead
           
 Token token
           
 ParseHtmlTokenManager token_source
           
 
Fields inherited from interface edu.harvard.hul.ois.jhove.module.html.ParseHtmlConstants
COLON, DEFAULT, DOCTYPEKEYWORD, ENDING_COMMENT, EOF, EQUALS, IN_ATTVALUE, IN_COMMENT, IN_DOCTYPE, IN_DOCTYPE2, IN_PCDATA, IN_TAG, LABRACKET, NAKEDDTITEM, NAKEDVALUE, NAME, OPENCOMMENT, PCDATA, PCDATASTART, QMARK, QUOTEDDTITEM, QUOTEDVALUE, RABRACKET, SINGQUOTEDVALUE, SLASH, STARTDOCTYPE, tokenImage
 
Constructor Summary
ParseHtml(CharStream stream)
           
ParseHtml(ParseHtmlTokenManager tm)
           
 
Method Summary
 void Attribute(java.util.List attrs)
           
 java.lang.String AttrVal()
           
 JHCloseTag CloseTag()
           
 void disable_tracing()
           
 JHDoctype Doctype()
           
 void DoctypeItem(java.util.List dtElements)
           
 JHElement Element(java.util.List elements)
           
 void enable_tracing()
           
 ParseException generateParseException()
           
 java.util.List getElements()
           
 Token getNextToken()
           
 Token getToken(int index)
           
 java.util.List HtmlDoc()
           
 Token Name()
           
 JHOpenTag OpenTag()
           
 JHPCData PCData()
           
 void ReInit(CharStream stream)
           
 void ReInit(ParseHtmlTokenManager tm)
           
 java.lang.String TagCloser()
           
 JHXmlDecl XMLDecl()
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

token_source

public ParseHtmlTokenManager token_source

token

public Token token

jj_nt

public Token jj_nt

lookingAhead

public boolean lookingAhead
Constructor Detail

ParseHtml

public ParseHtml(CharStream stream)

ParseHtml

public ParseHtml(ParseHtmlTokenManager tm)
Method Detail

getElements

public java.util.List getElements()

HtmlDoc

public final java.util.List HtmlDoc()
                             throws ParseException
Throws:
ParseException

Element

public final JHElement Element(java.util.List elements)
                        throws ParseException
Throws:
ParseException

OpenTag

public final JHOpenTag OpenTag()
                        throws ParseException
Throws:
ParseException

XMLDecl

public final JHXmlDecl XMLDecl()
                        throws ParseException
Throws:
ParseException

CloseTag

public final JHCloseTag CloseTag()
                          throws ParseException
Throws:
ParseException

PCData

public final JHPCData PCData()
                      throws ParseException
Throws:
ParseException

Doctype

public final JHDoctype Doctype()
                        throws ParseException
Throws:
ParseException

DoctypeItem

public final void DoctypeItem(java.util.List dtElements)
                       throws ParseException
Throws:
ParseException

Name

public final Token Name()
                 throws ParseException
Throws:
ParseException

AttrVal

public final java.lang.String AttrVal()
                               throws ParseException
Throws:
ParseException

Attribute

public final void Attribute(java.util.List attrs)
                     throws ParseException
Throws:
ParseException

TagCloser

public final java.lang.String TagCloser()
                                 throws ParseException
Throws:
ParseException

ReInit

public void ReInit(CharStream stream)

ReInit

public void ReInit(ParseHtmlTokenManager tm)

getNextToken

public final Token getNextToken()

getToken

public final Token getToken(int index)

generateParseException

public ParseException generateParseException()

enable_tracing

public final void enable_tracing()

disable_tracing

public final void disable_tracing()


jhove/doc/edu/harvard/hul/ois/jhove/module/html/ParseHtmlConstants.html0000644000707400001440000006225611510702354025451 0ustar garyusers ParseHtmlConstants (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.html
Interface ParseHtmlConstants

All Known Implementing Classes:
ParseHtml, ParseHtmlTokenManager

public interface ParseHtmlConstants


Field Summary
static int COLON
           
static int DEFAULT
           
static int DOCTYPEKEYWORD
           
static int ENDING_COMMENT
           
static int EOF
           
static int EQUALS
           
static int IN_ATTVALUE
           
static int IN_COMMENT
           
static int IN_DOCTYPE
           
static int IN_DOCTYPE2
           
static int IN_PCDATA
           
static int IN_TAG
           
static int LABRACKET
           
static int NAKEDDTITEM
           
static int NAKEDVALUE
           
static int NAME
           
static int OPENCOMMENT
           
static int PCDATA
           
static int PCDATASTART
           
static int QMARK
           
static int QUOTEDDTITEM
           
static int QUOTEDVALUE
           
static int RABRACKET
           
static int SINGQUOTEDVALUE
           
static int SLASH
           
static int STARTDOCTYPE
           
static java.lang.String[] tokenImage
           
 

Field Detail

EOF

static final int EOF
See Also:
Constant Field Values

STARTDOCTYPE

static final int STARTDOCTYPE
See Also:
Constant Field Values

LABRACKET

static final int LABRACKET
See Also:
Constant Field Values

PCDATASTART

static final int PCDATASTART
See Also:
Constant Field Values

PCDATA

static final int PCDATA
See Also:
Constant Field Values

NAME

static final int NAME
See Also:
Constant Field Values

EQUALS

static final int EQUALS
See Also:
Constant Field Values

NAKEDVALUE

static final int NAKEDVALUE
See Also:
Constant Field Values

QUOTEDVALUE

static final int QUOTEDVALUE
See Also:
Constant Field Values

SINGQUOTEDVALUE

static final int SINGQUOTEDVALUE
See Also:
Constant Field Values

QMARK

static final int QMARK
See Also:
Constant Field Values

SLASH

static final int SLASH
See Also:
Constant Field Values

COLON

static final int COLON
See Also:
Constant Field Values

RABRACKET

static final int RABRACKET
See Also:
Constant Field Values

DOCTYPEKEYWORD

static final int DOCTYPEKEYWORD
See Also:
Constant Field Values

NAKEDDTITEM

static final int NAKEDDTITEM
See Also:
Constant Field Values

QUOTEDDTITEM

static final int QUOTEDDTITEM
See Also:
Constant Field Values

OPENCOMMENT

static final int OPENCOMMENT
See Also:
Constant Field Values

DEFAULT

static final int DEFAULT
See Also:
Constant Field Values

IN_PCDATA

static final int IN_PCDATA
See Also:
Constant Field Values

IN_TAG

static final int IN_TAG
See Also:
Constant Field Values

IN_ATTVALUE

static final int IN_ATTVALUE
See Also:
Constant Field Values

IN_DOCTYPE

static final int IN_DOCTYPE
See Also:
Constant Field Values

IN_DOCTYPE2

static final int IN_DOCTYPE2
See Also:
Constant Field Values

IN_COMMENT

static final int IN_COMMENT
See Also:
Constant Field Values

ENDING_COMMENT

static final int ENDING_COMMENT
See Also:
Constant Field Values

tokenImage

static final java.lang.String[] tokenImage


jhove/doc/edu/harvard/hul/ois/jhove/module/html/ParseHtmlTokenManager.html0000644000707400001440000005721411510702354026046 0ustar garyusers ParseHtmlTokenManager (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.html
Class ParseHtmlTokenManager

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.html.ParseHtmlTokenManager
All Implemented Interfaces:
ParseHtmlConstants

public class ParseHtmlTokenManager
extends java.lang.Object
implements ParseHtmlConstants


Field Summary
protected  char curChar
           
 java.io.PrintStream debugStream
           
protected  CharStream input_stream
           
static int[] jjnewLexState
           
static java.lang.String[] jjstrLiteralImages
           
static java.lang.String[] lexStateNames
           
 
Fields inherited from interface edu.harvard.hul.ois.jhove.module.html.ParseHtmlConstants
COLON, DEFAULT, DOCTYPEKEYWORD, ENDING_COMMENT, EOF, EQUALS, IN_ATTVALUE, IN_COMMENT, IN_DOCTYPE, IN_DOCTYPE2, IN_PCDATA, IN_TAG, LABRACKET, NAKEDDTITEM, NAKEDVALUE, NAME, OPENCOMMENT, PCDATA, PCDATASTART, QMARK, QUOTEDDTITEM, QUOTEDVALUE, RABRACKET, SINGQUOTEDVALUE, SLASH, STARTDOCTYPE, tokenImage
 
Constructor Summary
ParseHtmlTokenManager(CharStream stream)
           
ParseHtmlTokenManager(CharStream stream, int lexState)
           
 
Method Summary
 Token getNextToken()
           
protected  Token jjFillToken()
           
 void ReInit(CharStream stream)
           
 void ReInit(CharStream stream, int lexState)
           
 void setDebugStream(java.io.PrintStream ds)
           
 void SwitchTo(int lexState)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

debugStream

public java.io.PrintStream debugStream

jjstrLiteralImages

public static final java.lang.String[] jjstrLiteralImages

lexStateNames

public static final java.lang.String[] lexStateNames

jjnewLexState

public static final int[] jjnewLexState

input_stream

protected CharStream input_stream

curChar

protected char curChar
Constructor Detail

ParseHtmlTokenManager

public ParseHtmlTokenManager(CharStream stream)

ParseHtmlTokenManager

public ParseHtmlTokenManager(CharStream stream,
                             int lexState)
Method Detail

setDebugStream

public void setDebugStream(java.io.PrintStream ds)

ReInit

public void ReInit(CharStream stream)

ReInit

public void ReInit(CharStream stream,
                   int lexState)

SwitchTo

public void SwitchTo(int lexState)

jjFillToken

protected Token jjFillToken()

getNextToken

public Token getNextToken()


jhove/doc/edu/harvard/hul/ois/jhove/module/html/SimpleCharStream.html0000644000707400001440000010137611510702354025055 0ustar garyusers SimpleCharStream (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.html
Class SimpleCharStream

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.html.SimpleCharStream

public class SimpleCharStream
extends java.lang.Object

An implementation of interface CharStream, where the stream is assumed to contain only ASCII characters (without unicode processing).


Field Summary
protected  int[] bufcolumn
           
protected  char[] buffer
           
protected  int[] bufline
           
 int bufpos
           
protected  int column
           
protected  int inBuf
           
protected  java.io.Reader inputStream
           
protected  int line
           
protected  int maxNextCharInd
           
protected  boolean prevCharIsCR
           
protected  boolean prevCharIsLF
           
static boolean staticFlag
           
 
Constructor Summary
SimpleCharStream(java.io.InputStream dstream)
           
SimpleCharStream(java.io.InputStream dstream, int startline, int startcolumn)
           
SimpleCharStream(java.io.InputStream dstream, int startline, int startcolumn, int buffersize)
           
SimpleCharStream(java.io.Reader dstream)
           
SimpleCharStream(java.io.Reader dstream, int startline, int startcolumn)
           
SimpleCharStream(java.io.Reader dstream, int startline, int startcolumn, int buffersize)
           
 
Method Summary
 void adjustBeginLineColumn(int newLine, int newCol)
          Method to adjust line and column numbers for the start of a token.
 void backup(int amount)
           
 char BeginToken()
           
 void Done()
           
protected  void ExpandBuff(boolean wrapAround)
           
protected  void FillBuff()
           
 int getBeginColumn()
           
 int getBeginLine()
           
 int getColumn()
          Deprecated.  
 int getEndColumn()
           
 int getEndLine()
           
 java.lang.String GetImage()
           
 int getLine()
          Deprecated.  
 char[] GetSuffix(int len)
           
 char readChar()
           
 void ReInit(java.io.InputStream dstream)
           
 void ReInit(java.io.InputStream dstream, int startline, int startcolumn)
           
 void ReInit(java.io.InputStream dstream, int startline, int startcolumn, int buffersize)
           
 void ReInit(java.io.Reader dstream)
           
 void ReInit(java.io.Reader dstream, int startline, int startcolumn)
           
 void ReInit(java.io.Reader dstream, int startline, int startcolumn, int buffersize)
           
protected  void UpdateLineColumn(char c)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

staticFlag

public static final boolean staticFlag
See Also:
Constant Field Values

bufpos

public int bufpos

bufline

protected int[] bufline

bufcolumn

protected int[] bufcolumn

column

protected int column

line

protected int line

prevCharIsCR

protected boolean prevCharIsCR

prevCharIsLF

protected boolean prevCharIsLF

inputStream

protected java.io.Reader inputStream

buffer

protected char[] buffer

maxNextCharInd

protected int maxNextCharInd

inBuf

protected int inBuf
Constructor Detail

SimpleCharStream

public SimpleCharStream(java.io.Reader dstream,
                        int startline,
                        int startcolumn,
                        int buffersize)

SimpleCharStream

public SimpleCharStream(java.io.Reader dstream,
                        int startline,
                        int startcolumn)

SimpleCharStream

public SimpleCharStream(java.io.Reader dstream)

SimpleCharStream

public SimpleCharStream(java.io.InputStream dstream,
                        int startline,
                        int startcolumn,
                        int buffersize)

SimpleCharStream

public SimpleCharStream(java.io.InputStream dstream,
                        int startline,
                        int startcolumn)

SimpleCharStream

public SimpleCharStream(java.io.InputStream dstream)
Method Detail

ExpandBuff

protected void ExpandBuff(boolean wrapAround)

FillBuff

protected void FillBuff()
                 throws java.io.IOException
Throws:
java.io.IOException

BeginToken

public char BeginToken()
                throws java.io.IOException
Throws:
java.io.IOException

UpdateLineColumn

protected void UpdateLineColumn(char c)

readChar

public char readChar()
              throws java.io.IOException
Throws:
java.io.IOException

getColumn

public int getColumn()
Deprecated. 

See Also:
getEndColumn()

getLine

public int getLine()
Deprecated. 

See Also:
getEndLine()

getEndColumn

public int getEndColumn()

getEndLine

public int getEndLine()

getBeginColumn

public int getBeginColumn()

getBeginLine

public int getBeginLine()

backup

public void backup(int amount)

ReInit

public void ReInit(java.io.Reader dstream,
                   int startline,
                   int startcolumn,
                   int buffersize)

ReInit

public void ReInit(java.io.Reader dstream,
                   int startline,
                   int startcolumn)

ReInit

public void ReInit(java.io.Reader dstream)

ReInit

public void ReInit(java.io.InputStream dstream,
                   int startline,
                   int startcolumn,
                   int buffersize)

ReInit

public void ReInit(java.io.InputStream dstream)

ReInit

public void ReInit(java.io.InputStream dstream,
                   int startline,
                   int startcolumn)

GetImage

public java.lang.String GetImage()

GetSuffix

public char[] GetSuffix(int len)

Done

public void Done()

adjustBeginLineColumn

public void adjustBeginLineColumn(int newLine,
                                  int newCol)
Method to adjust line and column numbers for the start of a token.



jhove/doc/edu/harvard/hul/ois/jhove/module/html/Token.html0000644000707400001440000004542711510702354022736 0ustar garyusers Token (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.html
Class Token

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.html.Token

public class Token
extends java.lang.Object

Describes the input token stream.


Field Summary
 int beginColumn
          beginLine and beginColumn describe the position of the first character of this token; endLine and endColumn describe the position of the last character of this token.
 int beginLine
          beginLine and beginColumn describe the position of the first character of this token; endLine and endColumn describe the position of the last character of this token.
 int endColumn
          beginLine and beginColumn describe the position of the first character of this token; endLine and endColumn describe the position of the last character of this token.
 int endLine
          beginLine and beginColumn describe the position of the first character of this token; endLine and endColumn describe the position of the last character of this token.
 java.lang.String image
          The string image of the token.
 int kind
          An integer that describes the kind of this token.
 Token next
          A reference to the next regular (non-special) token from the input stream.
 Token specialToken
          This field is used to access special tokens that occur prior to this token, but after the immediately preceding regular (non-special) token.
 
Constructor Summary
Token()
           
 
Method Summary
static Token newToken(int ofKind)
          Returns a new Token object, by default.
 java.lang.String toString()
          Returns the image.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

kind

public int kind
An integer that describes the kind of this token. This numbering system is determined by JavaCCParser, and a table of these numbers is stored in the file ...Constants.java.


beginLine

public int beginLine
beginLine and beginColumn describe the position of the first character of this token; endLine and endColumn describe the position of the last character of this token.


beginColumn

public int beginColumn
beginLine and beginColumn describe the position of the first character of this token; endLine and endColumn describe the position of the last character of this token.


endLine

public int endLine
beginLine and beginColumn describe the position of the first character of this token; endLine and endColumn describe the position of the last character of this token.


endColumn

public int endColumn
beginLine and beginColumn describe the position of the first character of this token; endLine and endColumn describe the position of the last character of this token.


image

public java.lang.String image
The string image of the token.


next

public Token next
A reference to the next regular (non-special) token from the input stream. If this is the last token from the input stream, or if the token manager has not read tokens beyond this one, this field is set to null. This is true only if this token is also a regular token. Otherwise, see below for a description of the contents of this field.


specialToken

public Token specialToken
This field is used to access special tokens that occur prior to this token, but after the immediately preceding regular (non-special) token. If there are no such special tokens, this field is set to null. When there are more than one such special token, this field refers to the last of these special tokens, which in turn refers to the next previous special token through its specialToken field, and so on until the first special token (whose specialToken field is null). The next fields of special tokens refer to other special tokens that immediately follow it (without an intervening regular token). If there is no such token, this field is null.

Constructor Detail

Token

public Token()
Method Detail

toString

public java.lang.String toString()
Returns the image.

Overrides:
toString in class java.lang.Object

newToken

public static final Token newToken(int ofKind)
Returns a new Token object, by default. However, if you want, you can create and return subclass objects based on the value of ofKind. Simply add the cases to the switch for all those special cases. For example, if you have a subclass of Token called IDToken that you want to create if ofKind is ID, simlpy add something like : case MyParserConstants.ID : return new IDToken(); to the following switch statement. Then you can cast matchedToken variable to the appropriate type and use it in your lexical actions.



jhove/doc/edu/harvard/hul/ois/jhove/module/html/TokenMgrError.html0000644000707400001440000003576711510702354024424 0ustar garyusers TokenMgrError (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.html
Class TokenMgrError

java.lang.Object
  extended by java.lang.Throwable
      extended by java.lang.Error
          extended by edu.harvard.hul.ois.jhove.module.html.TokenMgrError
All Implemented Interfaces:
java.io.Serializable

public class TokenMgrError
extends java.lang.Error

See Also:
Serialized Form

Constructor Summary
TokenMgrError()
           
TokenMgrError(boolean EOFSeen, int lexState, int errorLine, int errorColumn, java.lang.String errorAfter, char curChar, int reason)
           
TokenMgrError(java.lang.String message, int reason)
           
 
Method Summary
protected static java.lang.String addEscapes(java.lang.String str)
          Replaces unprintable characters by their espaced (or unicode escaped) equivalents in the given string
 java.lang.String getMessage()
          You can also modify the body of this method to customize your error messages.
protected static java.lang.String LexicalError(boolean EOFSeen, int lexState, int errorLine, int errorColumn, java.lang.String errorAfter, char curChar)
          Returns a detailed message for the Error when it is thrown by the token manager to indicate a lexical error.
 
Methods inherited from class java.lang.Throwable
fillInStackTrace, getCause, getLocalizedMessage, getStackTrace, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

TokenMgrError

public TokenMgrError()

TokenMgrError

public TokenMgrError(java.lang.String message,
                     int reason)

TokenMgrError

public TokenMgrError(boolean EOFSeen,
                     int lexState,
                     int errorLine,
                     int errorColumn,
                     java.lang.String errorAfter,
                     char curChar,
                     int reason)
Method Detail

addEscapes

protected static final java.lang.String addEscapes(java.lang.String str)
Replaces unprintable characters by their espaced (or unicode escaped) equivalents in the given string


LexicalError

protected static java.lang.String LexicalError(boolean EOFSeen,
                                               int lexState,
                                               int errorLine,
                                               int errorColumn,
                                               java.lang.String errorAfter,
                                               char curChar)
Returns a detailed message for the Error when it is thrown by the token manager to indicate a lexical error. Parameters : EOFSeen : indicates if EOF caused the lexicl error curLexState : lexical state in which this error occured errorLine : line number when the error occured errorColumn : column number when the error occured errorAfter : prefix that was seen before this error occured curchar : the offending character Note: You can customize the lexical error message by modifying this method.


getMessage

public java.lang.String getMessage()
You can also modify the body of this method to customize your error messages. For example, cases like LOOP_DETECTED and INVALID_LEXICAL_STATE are not of end-users concern, so you can return something like : "Internal Error : Please file a bug report .... " from this method for such cases in the release version of your parser.

Overrides:
getMessage in class java.lang.Throwable


jhove/doc/edu/harvard/hul/ois/jhove/module/html/package-frame.html0000644000707400001440000001423211510702366024332 0ustar garyusers edu.harvard.hul.ois.jhove.module.html (JHOVE Documentation) edu.harvard.hul.ois.jhove.module.html
Interfaces 
CharStream
ParseHtmlConstants
Classes 
DTDMapper
Html3_2DocDesc
Html4_01FrameDocDesc
Html4_01StrictDocDesc
Html4_01TFDocDesc
Html4_01TransDocDesc
Html4_0FrameDocDesc
Html4_0StrictDocDesc
Html4_0TFDocDesc
Html4_0TransDocDesc
Html4DocDesc
Html4StrictDocDesc
Html4TFDocDesc
HtmlAttributeDesc
HtmlCharStream
HtmlDocDesc
HtmlMetadata
HtmlSpecialToken
HtmlStack
HtmlTagDesc
HtmlTempTagDesc
JHAttribute
JHCloseTag
JHComment
JHDoctype
JHElement
JHErrorElement
JHOpenTag
JHPCData
JHXmlDecl
ParseHtml
ParseHtmlTokenManager
SimpleCharStream
Token
Exceptions 
ParseException
Errors 
TokenMgrError
jhove/doc/edu/harvard/hul/ois/jhove/module/html/package-summary.html0000644000707400001440000004740311510702366024743 0ustar garyusers edu.harvard.hul.ois.jhove.module.html (JHOVE Documentation)

Package edu.harvard.hul.ois.jhove.module.html

Contains supporting classes for the HTML-HUL module.

See:
          Description

Interface Summary
CharStream This interface describes a character stream that maintains line and column number positions of the characters.
ParseHtmlConstants  
 

Class Summary
DTDMapper Class to map public DTD ID's to files which are included with this HTML module.
Html3_2DocDesc This class describes the requirements of an HTML 3.2 document.
Html4_01FrameDocDesc This class describes the requirements of an HTML 4.01 Frameset document.
Html4_01StrictDocDesc This class describes the requirements of an HTML 4.01 Strict document.
Html4_01TFDocDesc Abstract class for the HTML 4.01 Transitional and Frameset document types.
Html4_01TransDocDesc This class describes the requirements of an HTML 4.01 Transitional document.
Html4_0FrameDocDesc This class describes the requirements of an HTML 4.01 Frameset document.
Html4_0StrictDocDesc This class describes the requirements of an HTML 4.0 Strict document.
Html4_0TFDocDesc Abstract class for the HTML 4.0 Transitional and Frameset document types.
Html4_0TransDocDesc This class describes the requirements of an HTML 4.0 Transitional document.
Html4DocDesc Abstract class for common features of HTML 4.0 and 4.01 documents.
Html4StrictDocDesc Abstract class for common features of HTML 4.0 and 4.01 strict documents.
Html4TFDocDesc Abstract class for common features of HTML 4.0 and 4.01 transitional and frameset documents.
HtmlAttributeDesc Class representing an abstract attribute of an HTML element.
HtmlCharStream An implementation of interface CharStream, where the stream is assumed to contain only ASCII characters (without unicode processing).
HtmlDocDesc This is an abstract class for processing an HTML document that has been parsed into a List of HtmlElements.
HtmlMetadata Repository for an HTML document's metadata.
HtmlSpecialToken Class for defining special items in HTML element and attribute definitions.
HtmlStack A LinkedList dressed up as a stack for processing HTML objects.
HtmlTagDesc This class defines the permitted behavior of a particular HTML tag.
HtmlTempTagDesc Subclass of HtmlTagDesc for temporary tags.
JHAttribute A description of an attribute within a JHOpenTag.
JHCloseTag Representation of a parsed HTML close tag.
JHComment Representation of a parsed HTML comment.
JHDoctype Representation of a parsed HTML DOCTYPE.
JHElement Abstract superclass for the representation of portions of an HTML file.
JHErrorElement A JHElement which signifies a syntactic error.
JHOpenTag Representation of a parsed HTML open tag, including its attributes.
JHPCData Representation of parsed HTML PCDATA.
JHXmlDecl Representation of an XML declaration.
ParseHtml  
ParseHtmlTokenManager  
SimpleCharStream An implementation of interface CharStream, where the stream is assumed to contain only ASCII characters (without unicode processing).
Token Describes the input token stream.
 

Exception Summary
ParseException This exception is thrown when parse errors are encountered.
 

Error Summary
TokenMgrError  
 

Package edu.harvard.hul.ois.jhove.module.html Description

Contains supporting classes for the HTML-HUL module.

This module uses code generated by JavaCC. The grammar file is ParseHtml.jj. It can be compiled using BuildParser.bat. Compiling it generates the following files:

  • CharStream.java
  • ParseException.java
  • ParseHtml.java
  • ParseHtmlConstants.java
  • ParseHtmlTokenManager.java
  • SimpleCharStream.java
  • Token.java
  • TokenMgrError.java

In addition, HtmlCharStream.java has been created by manually modifying CharStream.java. If a future version of JavaCC changes CharStream.java, HtmlCharStream.java should be changed to match.

A number of DTD and Entity files have been stored with this package to facilitate resolution of Doctypes without having to get them over the Internet. These are the W3 Consortium's files, and no rights over them are claimed by including them here.
The list of files:

  • xhtml1-frameset.dtd
  • xhtml1-strict.dtd
  • xhtml1-transitional.dtd
  • xhtml-lat1.ent
  • xhtml-special.ent
  • xhtml-symbol.ent

This module uses the XML-HUL module in validating XHTML files.



jhove/doc/edu/harvard/hul/ois/jhove/module/html/package-tree.html0000644000707400001440000003716611510702366024212 0ustar garyusers edu.harvard.hul.ois.jhove.module.html Class Hierarchy (JHOVE Documentation)

Hierarchy For Package edu.harvard.hul.ois.jhove.module.html

Package Hierarchies:
All Packages

Class Hierarchy

Interface Hierarchy



jhove/doc/edu/harvard/hul/ois/jhove/module/iff/0000755000707400001440000000000011510702003020543 5ustar garyusersjhove/doc/edu/harvard/hul/ois/jhove/module/iff/Chunk.html0000644000707400001440000004714211510702354022522 0ustar garyusers Chunk (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.iff
Class Chunk

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.iff.Chunk
Direct Known Subclasses:
ApplicationChunk, AudioRecChunk, AXMLChunk, BroadcastExtChunk, CartChunk, CommentsChunk, CommonChunk, CueChunk, DataChunk, ExifMakerNoteChunk, ExifStringChunk, ExifUserCommentChunk, ExifVersionChunk, FactChunk, FormatChunk, FormatVersionChunk, InstrumentChunk, InstrumentChunk, LabeledTextChunk, LinkChunk, ListInfoTextChunk, MarkerChunk, MidiChunk, MpegChunk, PeakEnvelopeChunk, SampleChunk, SaxelChunk, SimpleTextChunk, SoundDataChunk, Superchunk, TextChunk

public abstract class Chunk
extends java.lang.Object

Abstract superclass for IFF/AIFF chunks.

Author:
Gary McGath

Field Summary
protected  java.io.DataInputStream _dstream
           
protected  ModuleBase _module
           
protected  long bytesLeft
           
 
Constructor Summary
Chunk(ModuleBase module, ChunkHeader hdr, java.io.DataInputStream dstrm)
          Constructor.
 
Method Summary
protected  java.lang.String byteBufString(byte[] b)
          Convert a byte buffer cleanly to an ASCII string.
abstract  boolean readChunk(RepInfo info)
          Reads a chunk and puts appropriate information into the RepInfo object.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

_module

protected ModuleBase _module

bytesLeft

protected long bytesLeft

_dstream

protected java.io.DataInputStream _dstream
Constructor Detail

Chunk

public Chunk(ModuleBase module,
             ChunkHeader hdr,
             java.io.DataInputStream dstrm)
Constructor.

Parameters:
module - The Module under which this was called
hdr - The header for this chunk
dstrm - The stream from which the data are being read
Method Detail

readChunk

public abstract boolean readChunk(RepInfo info)
                           throws java.io.IOException
Reads a chunk and puts appropriate information into the RepInfo object.

Parameters:
info - RepInfo object to receive information
Returns:
false if the chunk is structurally invalid, otherwise true
Throws:
java.io.IOException

byteBufString

protected java.lang.String byteBufString(byte[] b)
Convert a byte buffer cleanly to an ASCII string. This is used for fixed-allocation strings in Broadcast WAVE chunks, and might have uses elsewhere. If a string is shorter than its fixed allocation, we're guaranteed only that there is a null terminating the string, and noise could follow it. So we can't use the byte buffer constructor for a string.



jhove/doc/edu/harvard/hul/ois/jhove/module/iff/ChunkHeader.html0000644000707400001440000003143211510702354023626 0ustar garyusers ChunkHeader (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.iff
Class ChunkHeader

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.iff.ChunkHeader

public class ChunkHeader
extends java.lang.Object

This class encapsulates an IFF/AIFF chunk header.

Author:
Gary McGath

Constructor Summary
ChunkHeader(ModuleBase module, RepInfo info)
          Constructor.
 
Method Summary
 java.lang.String getID()
          Returns the chunk type, which is a 4-character code
 long getSize()
          Returns the chunk size (excluding the first 8 bytes)
 boolean readHeader(java.io.DataInputStream dstrm)
          Reads the header of a chunk.
 void setID(java.lang.String id)
          Sets the chunk type, which is a 4-character code, directly.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ChunkHeader

public ChunkHeader(ModuleBase module,
                   RepInfo info)
Constructor.

Parameters:
module - The module under which the chunk is being read
info - The RepInfo object being used by the module
Method Detail

readHeader

public boolean readHeader(java.io.DataInputStream dstrm)
                   throws java.io.IOException
Reads the header of a chunk. If _chunkID is non-null, it's assumed to have already been read.

Throws:
java.io.IOException

setID

public void setID(java.lang.String id)
Sets the chunk type, which is a 4-character code, directly.


getID

public java.lang.String getID()
Returns the chunk type, which is a 4-character code


getSize

public long getSize()
Returns the chunk size (excluding the first 8 bytes)



jhove/doc/edu/harvard/hul/ois/jhove/module/iff/Superchunk.html0000644000707400001440000003536711510702354023607 0ustar garyusers Superchunk (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.iff
Class Superchunk

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.iff.Chunk
      extended by edu.harvard.hul.ois.jhove.module.iff.Superchunk
Direct Known Subclasses:
AssocDataListChunk, ListInfoChunk

public abstract class Superchunk
extends Chunk

Abstract class for a chunk that contains other chunks. It is assumed that the nested chunks come last in the chunk, so that once you start reading chunks, reaching the end of the superchunk is the indicator that there are no more chunks to read.

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.iff.Chunk
_dstream, _module, bytesLeft
 
Constructor Summary
Superchunk(ModuleBase module, ChunkHeader hdr, java.io.DataInputStream dstrm, RepInfo info)
          Constructor.
 
Method Summary
 ChunkHeader getNextChunkHeader()
          Reads and returns the next ChunkHeader within this Chunk, and takes care of byte counting.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.iff.Chunk
byteBufString, readChunk
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

Superchunk

public Superchunk(ModuleBase module,
                  ChunkHeader hdr,
                  java.io.DataInputStream dstrm,
                  RepInfo info)
Constructor.

Parameters:
module - The WaveModule under which this was called
hdr - The header for this chunk
dstrm - The stream from which the WAVE data are being read
info - RepInfo object for error reporting
Method Detail

getNextChunkHeader

public ChunkHeader getNextChunkHeader()
                               throws java.io.IOException
Reads and returns the next ChunkHeader within this Chunk, and takes care of byte counting. If this Chunk is exhausted, returns null.

Throws:
java.io.IOException


jhove/doc/edu/harvard/hul/ois/jhove/module/iff/package-frame.html0000644000707400001440000000226611510702366024136 0ustar garyusers edu.harvard.hul.ois.jhove.module.iff (JHOVE Documentation) edu.harvard.hul.ois.jhove.module.iff
Classes 
Chunk
ChunkHeader
Superchunk
jhove/doc/edu/harvard/hul/ois/jhove/module/iff/package-summary.html0000644000707400001440000001655211510702366024544 0ustar garyusers edu.harvard.hul.ois.jhove.module.iff (JHOVE Documentation)

Package edu.harvard.hul.ois.jhove.module.iff

Contains supporting classes for modules based on the IFF specification (EA IFF 85).

See:
          Description

Class Summary
Chunk Abstract superclass for IFF/AIFF chunks.
ChunkHeader This class encapsulates an IFF/AIFF chunk header.
Superchunk Abstract class for a chunk that contains other chunks.
 

Package edu.harvard.hul.ois.jhove.module.iff Description

Contains supporting classes for modules based on the IFF specification (EA IFF 85). This may include AIFF, RIFF and others. This package may also, at some point, include a generic IFF module.



jhove/doc/edu/harvard/hul/ois/jhove/module/iff/package-tree.html0000644000707400001440000001504311510702366024000 0ustar garyusers edu.harvard.hul.ois.jhove.module.iff Class Hierarchy (JHOVE Documentation)

Hierarchy For Package edu.harvard.hul.ois.jhove.module.iff

Package Hierarchies:
All Packages

Class Hierarchy

  • java.lang.Object
    • edu.harvard.hul.ois.jhove.module.iff.Chunk
    • edu.harvard.hul.ois.jhove.module.iff.ChunkHeader


jhove/doc/edu/harvard/hul/ois/jhove/module/jpeg/0000755000707400001440000000000011510702003020724 5ustar garyusersjhove/doc/edu/harvard/hul/ois/jhove/module/jpeg/ArithConditioning.html0000644000707400001440000002414711510702354025247 0ustar garyusers ArithConditioning (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.jpeg
Class ArithConditioning

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.jpeg.ArithConditioning

public class ArithConditioning
extends java.lang.Object

Encapsulation of an arithmetic conditioning entry for a JPEG image.

Author:
Gary McGath

Constructor Summary
ArithConditioning(int tableClass, int destIdentifier)
          Constructor.
 
Method Summary
 Property makeProperty(boolean raw)
          Returns a Property defining the conditioning data
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ArithConditioning

public ArithConditioning(int tableClass,
                         int destIdentifier)
Constructor.

Method Detail

makeProperty

public Property makeProperty(boolean raw)
Returns a Property defining the conditioning data



jhove/doc/edu/harvard/hul/ois/jhove/module/jpeg/JpegExif.html0000644000707400001440000003053111510702354023326 0ustar garyusers JpegExif (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.jpeg
Class JpegExif

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.jpeg.JpegExif

public final class JpegExif
extends java.lang.Object

Reader of Exif data embedded in a JPEG App1 block. This makes use of the TIFF module, since an Exif stream is really an embedded TIFF file; but it is designed to fail cleanly if the TIFF module is absent.

Author:
Gary McGath

Constructor Summary
JpegExif()
           
 
Method Summary
 boolean isExifProfileOK()
          Returns true if the Exif IFD is present and satisfies the profile requirements.
static boolean isTiffAvailable()
          Checks if the TIFF module is available.
 RepInfo readExifData(java.io.DataInputStream dstream, JhoveBase je, int length)
          Reads the Exif data from the current point at the data stream, puts it into a temporary file, and makes a RepInfo object available.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

JpegExif

public JpegExif()
Method Detail

isTiffAvailable

public static boolean isTiffAvailable()
Checks if the TIFF module is available.


readExifData

public RepInfo readExifData(java.io.DataInputStream dstream,
                            JhoveBase je,
                            int length)
Reads the Exif data from the current point at the data stream, puts it into a temporary file, and makes a RepInfo object available. This should be called only if isTiffAvailable() has returned true.


isExifProfileOK

public boolean isExifProfileOK()
Returns true if the Exif IFD is present and satisfies the profile requirements.



jhove/doc/edu/harvard/hul/ois/jhove/module/jpeg/JpegStrings.html0000644000707400001440000003137211510702354024070 0ustar garyusers JpegStrings (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.jpeg
Class JpegStrings

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.jpeg.JpegStrings

public class JpegStrings
extends java.lang.Object

A class for holding arrays of informative strings that will go into properties of a JPEG object.


Field Summary
static java.lang.String[] CAPABILITY_V0
          Values for capability indicator byte for Version 0
static java.lang.String[] CAPABILITY_V1
          Values for capability indicator byte for Version 1.
static java.lang.String[] COMPRESSION_TYPE
          JPEG compression types, indexed on marker byte - 0XC0.
static java.lang.String[] DAC_CLASS
           
static java.lang.String[] DQT_PRECISION
           
static java.lang.String[] TILING_CAPABILITY_V1
           
static java.lang.String[] TILING_TYPE
           
 
Method Summary
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

COMPRESSION_TYPE

public static final java.lang.String[] COMPRESSION_TYPE
JPEG compression types, indexed on marker byte - 0XC0. This applies only to marker codes for the primary image; thumbnail compression schemes are completely incompatible.


CAPABILITY_V0

public static final java.lang.String[] CAPABILITY_V0
Values for capability indicator byte for Version 0


CAPABILITY_V1

public static final java.lang.String[] CAPABILITY_V1
Values for capability indicator byte for Version 1. These are by bit position from right to left.


TILING_CAPABILITY_V1

public static final java.lang.String[] TILING_CAPABILITY_V1

TILING_TYPE

public static final java.lang.String[] TILING_TYPE

DQT_PRECISION

public static final java.lang.String[] DQT_PRECISION

DAC_CLASS

public static final java.lang.String[] DAC_CLASS


jhove/doc/edu/harvard/hul/ois/jhove/module/jpeg/QuantizationTable.html0000644000707400001440000002461311510702354025267 0ustar garyusers QuantizationTable (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.jpeg
Class QuantizationTable

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.jpeg.QuantizationTable

public class QuantizationTable
extends java.lang.Object

Encapsulation of a quantization table entry for a JPEG image.

Author:
Gary McGath

Constructor Summary
QuantizationTable(int precision, int destIdentifier)
          Constructor.
 
Method Summary
 Property makeProperty(boolean raw)
          Returns a Property defining the quantization table
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

QuantizationTable

public QuantizationTable(int precision,
                         int destIdentifier)
Constructor.

Method Detail

makeProperty

public Property makeProperty(boolean raw)
Returns a Property defining the quantization table



jhove/doc/edu/harvard/hul/ois/jhove/module/jpeg/SRS.html0000644000707400001440000002430011510702354022271 0ustar garyusers SRS (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.jpeg
Class SRS

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.jpeg.SRS

public class SRS
extends java.lang.Object

Encapsulation of an SRS (selectively refined scan) entry for a JPEG image.

Author:
Gary McGath

Constructor Summary
SRS(int vertOffset, int horOffset, int vertSize, int horSize)
          Constructor.
 
Method Summary
 Property makeProperty()
          Returns a Property defining the SRS
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

SRS

public SRS(int vertOffset,
           int horOffset,
           int vertSize,
           int horSize)
Constructor.

Method Detail

makeProperty

public Property makeProperty()
Returns a Property defining the SRS



jhove/doc/edu/harvard/hul/ois/jhove/module/jpeg/Spiff.html0000644000707400001440000004761511510702354022707 0ustar garyusers Spiff (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.jpeg
Class Spiff

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.jpeg.Spiff

public class Spiff
extends java.lang.Object

Static methods and data for SPIFF Jpeg files.

Author:
Gary McGath

Field Summary
static int CONTACT_INFO
           
static int COPYRIGHT_INFO
           
static int CREATOR_ID
           
static int EOD
           
static int IMAGE_DESC
           
static int IMAGE_ORIENTATION
           
static int IMAGE_TITLE
           
static int PROTECTION_INDICATOR
           
static int SCAN_INDEX
           
static int SETREF
           
static int THUMBNAIL
           
static int TILE_INDEX
           
static int TIME_STAMP
           
static int VERSION_IDENT
           
static int XFER_CHARACTERISTICS
           
 
Method Summary
static int colorSpaceToNiso(int s)
          Converts S value to NISO color space.
static int compressionTypeToNiso(int s)
          Converts C value to NISO compression scheme.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

EOD

public static final int EOD
See Also:
Constant Field Values

XFER_CHARACTERISTICS

public static final int XFER_CHARACTERISTICS
See Also:
Constant Field Values

IMAGE_ORIENTATION

public static final int IMAGE_ORIENTATION
See Also:
Constant Field Values

THUMBNAIL

public static final int THUMBNAIL
See Also:
Constant Field Values

IMAGE_TITLE

public static final int IMAGE_TITLE
See Also:
Constant Field Values

IMAGE_DESC

public static final int IMAGE_DESC
See Also:
Constant Field Values

TIME_STAMP

public static final int TIME_STAMP
See Also:
Constant Field Values

VERSION_IDENT

public static final int VERSION_IDENT
See Also:
Constant Field Values

CREATOR_ID

public static final int CREATOR_ID
See Also:
Constant Field Values

PROTECTION_INDICATOR

public static final int PROTECTION_INDICATOR
See Also:
Constant Field Values

COPYRIGHT_INFO

public static final int COPYRIGHT_INFO
See Also:
Constant Field Values

CONTACT_INFO

public static final int CONTACT_INFO
See Also:
Constant Field Values

TILE_INDEX

public static final int TILE_INDEX
See Also:
Constant Field Values

SCAN_INDEX

public static final int SCAN_INDEX
See Also:
Constant Field Values

SETREF

public static final int SETREF
See Also:
Constant Field Values
Method Detail

colorSpaceToNiso

public static int colorSpaceToNiso(int s)
Converts S value to NISO color space. Return -1 if there is no matching color space in NISO, or the S value is out of bounds.


compressionTypeToNiso

public static int compressionTypeToNiso(int s)
Converts C value to NISO compression scheme. Return -1 if there is no matching color space in NISO, or the S value is out of bounds.



jhove/doc/edu/harvard/hul/ois/jhove/module/jpeg/SpiffDir.html0000644000707400001440000003030711510702354023334 0ustar garyusers SpiffDir (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.jpeg
Class SpiffDir

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.jpeg.SpiffDir

public class SpiffDir
extends java.lang.Object

This class represents a SPIFF directory and the tags defined under it. A SPIFF directory consists of one or more APP8 segments, and may define ancillary images. It is always contained within the primary image stream.

Author:
Gary McGath

Constructor Summary
SpiffDir(JpegModule module)
           
 
Method Summary
 void appendThumbnailProps(java.util.List imageList)
          Appends any thumbnail properties that have been collected to the provided list.
 void readDirEntry(java.io.DataInputStream dstream, int length)
          Reads a directory entry, starting at the position after the APP8 marker and length.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

SpiffDir

public SpiffDir(JpegModule module)
Method Detail

readDirEntry

public void readDirEntry(java.io.DataInputStream dstream,
                         int length)
                  throws java.io.IOException
Reads a directory entry, starting at the position after the APP8 marker and length. If the entry is for a thumbnail, create a Property for that thumbnail and add it to the thumbnail list. Other tags provide interesting information, some of which should go into properties, but for the moment we just handle the thumbnail and ignore other tags. An APP8 segment which is in a SPIFF file, and isn't the first APP8 segment (file header), is presumed to be a directory entry. These directory entries are a little inconvenient, because they can contain offsets to data in what we otherwise handle as a stream format. The offsets can be either to data within the block, or to faraway indirect data blocks. For the present version, we ignore offset data, which seems to be used only for the actual image bits (e.g., TNDATA).

Throws:
java.io.IOException

appendThumbnailProps

public void appendThumbnailProps(java.util.List imageList)
Appends any thumbnail properties that have been collected to the provided list.



jhove/doc/edu/harvard/hul/ois/jhove/module/jpeg/Tiling.html0000644000707400001440000003740411510702354023061 0ustar garyusers Tiling (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.jpeg
Class Tiling

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.jpeg.Tiling

public class Tiling
extends java.lang.Object

Encapsulation of the tiling information for a JPEG image.

Author:
Gary McGath

Constructor Summary
Tiling()
          Constructor.
 
Method Summary
 void addTile(long vertScale, long horScale, long vertOffset, long horOffset)
          Adds a tile to the list.
 Property buildTileListProp()
          Returns a property listing all the tiles.
 int getHorScale()
           
 long getRefGridHeight()
           
 long getRefGridWidth()
           
 int getTilingType()
           
 int getVertScale()
           
 void setHorScale(int horScale)
           
 void setRefGridHeight(long refGridHeight)
           
 void setRefGridWidth(long refGridWidth)
           
 void setTilingType(int tilingType)
           
 void setVertScale(int vertScale)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

Tiling

public Tiling()
Constructor.

Method Detail

addTile

public void addTile(long vertScale,
                    long horScale,
                    long vertOffset,
                    long horOffset)
Adds a tile to the list.


buildTileListProp

public Property buildTileListProp()
Returns a property listing all the tiles.


setTilingType

public void setTilingType(int tilingType)

setVertScale

public void setVertScale(int vertScale)

setHorScale

public void setHorScale(int horScale)

setRefGridHeight

public void setRefGridHeight(long refGridHeight)

setRefGridWidth

public void setRefGridWidth(long refGridWidth)

getTilingType

public int getTilingType()

getVertScale

public int getVertScale()

getHorScale

public int getHorScale()

getRefGridHeight

public long getRefGridHeight()

getRefGridWidth

public long getRefGridWidth()


jhove/doc/edu/harvard/hul/ois/jhove/module/jpeg/package-frame.html0000644000707400001440000000342711510702366024317 0ustar garyusers edu.harvard.hul.ois.jhove.module.jpeg (JHOVE Documentation) edu.harvard.hul.ois.jhove.module.jpeg
Classes 
ArithConditioning
JpegExif
JpegStrings
QuantizationTable
Spiff
SpiffDir
SRS
Tiling
jhove/doc/edu/harvard/hul/ois/jhove/module/jpeg/package-summary.html0000644000707400001440000002140511510702366024716 0ustar garyusers edu.harvard.hul.ois.jhove.module.jpeg (JHOVE Documentation)

Package edu.harvard.hul.ois.jhove.module.jpeg

Contains supporting classes for the JPEG-HUL module.

See:
          Description

Class Summary
ArithConditioning Encapsulation of an arithmetic conditioning entry for a JPEG image.
JpegExif Reader of Exif data embedded in a JPEG App1 block.
JpegStrings A class for holding arrays of informative strings that will go into properties of a JPEG object.
QuantizationTable Encapsulation of a quantization table entry for a JPEG image.
Spiff Static methods and data for SPIFF Jpeg files.
SpiffDir This class represents a SPIFF directory and the tags defined under it.
SRS Encapsulation of an SRS (selectively refined scan) entry for a JPEG image.
Tiling Encapsulation of the tiling information for a JPEG image.
 

Package edu.harvard.hul.ois.jhove.module.jpeg Description

Contains supporting classes for the JPEG-HUL module.



jhove/doc/edu/harvard/hul/ois/jhove/module/jpeg/package-tree.html0000644000707400001440000001714711510702366024170 0ustar garyusers edu.harvard.hul.ois.jhove.module.jpeg Class Hierarchy (JHOVE Documentation)

Hierarchy For Package edu.harvard.hul.ois.jhove.module.jpeg

Package Hierarchies:
All Packages

Class Hierarchy

  • java.lang.Object
    • edu.harvard.hul.ois.jhove.module.jpeg.ArithConditioning
    • edu.harvard.hul.ois.jhove.module.jpeg.JpegExif
    • edu.harvard.hul.ois.jhove.module.jpeg.JpegStrings
    • edu.harvard.hul.ois.jhove.module.jpeg.QuantizationTable
    • edu.harvard.hul.ois.jhove.module.jpeg.Spiff
    • edu.harvard.hul.ois.jhove.module.jpeg.SpiffDir
    • edu.harvard.hul.ois.jhove.module.jpeg.SRS
    • edu.harvard.hul.ois.jhove.module.jpeg.Tiling


jhove/doc/edu/harvard/hul/ois/jhove/module/jpeg2000/0000755000707400001440000000000011510702005021230 5ustar garyusersjhove/doc/edu/harvard/hul/ois/jhove/module/jpeg2000/AssociationBox.html0000644000707400001440000005357011510702354025064 0ustar garyusers AssociationBox (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.jpeg2000
Class AssociationBox

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
      extended by edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
          extended by edu.harvard.hul.ois.jhove.module.jpeg2000.AssociationBox
All Implemented Interfaces:
java.util.Iterator

public class AssociationBox
extends JP2Box

Association Box. An AssociationBox can occur in pretty much any superbox or at the top level. It simply establishes an association between boxes. See ISO/IEC FCD15444-2: 2000, L.9.11

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
_bytesRead, associations, DESCRIPTION_NAME, noJP2Hdr, startBytesRead
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
_boxHeader, _dstrm, _module, _parentBox, _raf, _repInfo, bytesLeft, filePos, hasBoxes
 
Constructor Summary
AssociationBox(java.io.RandomAccessFile raf, BoxHolder parent)
          Constructor with superbox.
 
Method Summary
protected  java.lang.String getSelfPropName()
          Returns the name of the Box.
 boolean readBox()
          Reads the box, putting appropriate information in the RepInfo object.
protected  Property selfDescProperty()
          Returns a Property which describes the Box, for use by Association boxes and perhaps others.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
addAssociation, boxMaker, emptyBox, finalizeBytesRead, getBytesRead, getLength, getSelfPropDesc, init, initBytesRead, makeAssocProperty, setBoxHeader, setDataInputStream, setModule, setRandomAccessFile, setRepInfo, skipBox, wrongBoxContext, wrongBoxSize
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
getFilePos, hasNext, next, remove, superboxOverrun, superboxUnderrun
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

AssociationBox

public AssociationBox(java.io.RandomAccessFile raf,
                      BoxHolder parent)
Constructor with superbox.

Parameters:
parent - parent superbox of this box or TopLevelBoxHolder
Method Detail

readBox

public boolean readBox()
                throws java.io.IOException
Reads the box, putting appropriate information in the RepInfo object. setModule, setBoxHeader, setRepInfo and setDataInputStream must be called before readBox is called. readBox must completely consume the box, so that the next byte to be read by the DataInputStream is the FF byte of the next Box.

Specified by:
readBox in class JP2Box
Throws:
java.io.IOException

selfDescProperty

protected Property selfDescProperty()
Returns a Property which describes the Box, for use by Association boxes and perhaps others. An Association box can recursively contain other Association boxes. Since an Association box adds Association properties to its ancestors, This just returns null to avoid duplicate reporting.

Overrides:
selfDescProperty in class JP2Box

getSelfPropName

protected java.lang.String getSelfPropName()
Returns the name of the Box.

Overrides:
getSelfPropName in class JP2Box


jhove/doc/edu/harvard/hul/ois/jhove/module/jpeg2000/BPCCBox.html0000644000707400001440000005100011510702354023301 0ustar garyusers BPCCBox (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.jpeg2000
Class BPCCBox

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
      extended by edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
          extended by edu.harvard.hul.ois.jhove.module.jpeg2000.BPCCBox
All Implemented Interfaces:
java.util.Iterator

public class BPCCBox
extends JP2Box

Bits Per Component box. See I.5.3.2 in ISO/IEC 15444-1:2000

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
_bytesRead, associations, DESCRIPTION_NAME, noJP2Hdr, startBytesRead
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
_boxHeader, _dstrm, _module, _parentBox, _raf, _repInfo, bytesLeft, filePos, hasBoxes
 
Constructor Summary
BPCCBox(java.io.RandomAccessFile raf, BoxHolder parent)
          Constructor with superbox.
 
Method Summary
protected  java.lang.String getSelfPropName()
          Returns the name of the Box.
 boolean readBox()
          Reads the box, putting appropriate information in the RepInfo object.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
addAssociation, boxMaker, emptyBox, finalizeBytesRead, getBytesRead, getLength, getSelfPropDesc, init, initBytesRead, makeAssocProperty, selfDescProperty, setBoxHeader, setDataInputStream, setModule, setRandomAccessFile, setRepInfo, skipBox, wrongBoxContext, wrongBoxSize
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
getFilePos, hasNext, next, remove, superboxOverrun, superboxUnderrun
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

BPCCBox

public BPCCBox(java.io.RandomAccessFile raf,
               BoxHolder parent)
Constructor with superbox.

Parameters:
parent - parent superbox of this box
Method Detail

readBox

public boolean readBox()
                throws java.io.IOException
Reads the box, putting appropriate information in the RepInfo object. setModule, setBoxHeader, setRepInfo and setDataInputStream must be called before readBox is called. readBox must completely consume the box, so that the next byte to be read by the DataInputStream is the FF byte of the next Box.

Specified by:
readBox in class JP2Box
Throws:
java.io.IOException

getSelfPropName

protected java.lang.String getSelfPropName()
Returns the name of the Box.

Overrides:
getSelfPropName in class JP2Box


jhove/doc/edu/harvard/hul/ois/jhove/module/jpeg2000/BinaryFilterBox.html0000644000707400001440000005526611510702354025206 0ustar garyusers BinaryFilterBox (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.jpeg2000
Class BinaryFilterBox

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
      extended by edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
          extended by edu.harvard.hul.ois.jhove.module.jpeg2000.BinaryFilterBox
All Implemented Interfaces:
java.util.Iterator

public class BinaryFilterBox
extends JP2Box

Binary Filter box (JPX). See ISO/IEC FCD15444-2: 2000, L.9.14 A Binary Filter Box can subsume any number of other boxes, which will look to the module as if they simply replace this box. BoxHolder makes a special case of BinaryFilterBoxes, calling the getBoxStream method to extract the subsumed boxes. Only Deflate coding, not DES, is supported. It is assumed that a BinaryFilterBox is never encoded inside another BinaryFilterBox. This is untested code, due to lack of sample files; please report any bugs found to HUL/OIS.

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
_bytesRead, associations, DESCRIPTION_NAME, noJP2Hdr, startBytesRead
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
_boxHeader, _dstrm, _module, _parentBox, _raf, _repInfo, bytesLeft, filePos, hasBoxes
 
Constructor Summary
BinaryFilterBox(java.io.RandomAccessFile raf, JP2Box parent)
          Constructor with superbox.
 
Method Summary
 java.io.DataInputStream getBoxStream()
          returns the InputStream which will provide the decompressed boxes subsumed in this Box.
protected  java.lang.String getSelfPropName()
          Returns the name of the Box.
 java.lang.Object next()
           
 boolean readBox()
          Reads the box, putting appropriate information in the RepInfo object.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
addAssociation, boxMaker, emptyBox, finalizeBytesRead, getBytesRead, getLength, getSelfPropDesc, init, initBytesRead, makeAssocProperty, selfDescProperty, setBoxHeader, setDataInputStream, setModule, setRandomAccessFile, setRepInfo, skipBox, wrongBoxContext, wrongBoxSize
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
getFilePos, hasNext, remove, superboxOverrun, superboxUnderrun
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

BinaryFilterBox

public BinaryFilterBox(java.io.RandomAccessFile raf,
                       JP2Box parent)
Constructor with superbox.

Parameters:
parent - parent superbox of this box or TopLevelBoxHolder
Method Detail

readBox

public boolean readBox()
                throws java.io.IOException
Reads the box, putting appropriate information in the RepInfo object. setModule, setBoxHeader, setRepInfo and setDataInputStream must be called before readBox is called. readBox must completely consume the box, so that the next byte to be read by the DataInputStream is the FF byte of the next Box.

Specified by:
readBox in class JP2Box
Throws:
java.io.IOException

next

public java.lang.Object next()
Specified by:
next in interface java.util.Iterator
Overrides:
next in class BoxHolder

getBoxStream

public java.io.DataInputStream getBoxStream()
returns the InputStream which will provide the decompressed boxes subsumed in this Box.


getSelfPropName

protected java.lang.String getSelfPropName()
Returns the name of the Box.

Overrides:
getSelfPropName in class JP2Box


jhove/doc/edu/harvard/hul/ois/jhove/module/jpeg2000/BoxHeader.html0000644000707400001440000003275211510702354023777 0ustar garyusers BoxHeader (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.jpeg2000
Class BoxHeader

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHeader

public class BoxHeader
extends java.lang.Object

Encapsulation of a JPEG 2000 box header.

Author:
Gary McGath

Constructor Summary
BoxHeader(Jpeg2000Module mod, java.io.DataInputStream dstrm)
          Constructor.
 
Method Summary
 long getDataLength()
          Returns the number of bytes in the Box, not including the header.
 long getHeaderLength()
          Returns the length of the header.
 long getLength()
          Returns the box length, which includes the length and type fields.
 java.lang.String getType()
          Returns the box type.
 void readHeader()
          Reads 8 bytes from the beginning of the box and parses out the box length and type.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

BoxHeader

public BoxHeader(Jpeg2000Module mod,
                 java.io.DataInputStream dstrm)
Constructor.

Parameters:
mod - The Module which uses this object
dstrm - The DataInputStream reading data for the Module
Method Detail

readHeader

public void readHeader()
                throws java.io.IOException
Reads 8 bytes from the beginning of the box and parses out the box length and type.

Throws:
java.io.IOException

getLength

public long getLength()
Returns the box length, which includes the length and type fields. If the value returned is 0, the length of the box is all the remaining data to the end of the file.


getHeaderLength

public long getHeaderLength()
Returns the length of the header. This number is equal to the number of bytes that have been read by readHeader().


getDataLength

public long getDataLength()
Returns the number of bytes in the Box, not including the header. This is equivalent to getLength() - getHeaderLength(). If getLength() would return 0, this value is meaningless.


getType

public java.lang.String getType()
Returns the box type.



jhove/doc/edu/harvard/hul/ois/jhove/module/jpeg2000/BoxHolder.html0000644000707400001440000005237111510702354024023 0ustar garyusers BoxHolder (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.jpeg2000
Class BoxHolder

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
All Implemented Interfaces:
java.util.Iterator
Direct Known Subclasses:
JP2Box, TopLevelBoxHolder

public class BoxHolder
extends java.lang.Object
implements java.util.Iterator

A BoxHolder is a container for JPEG 2000 boxes.

Author:
Gary McGath

Field Summary
protected  BoxHeader _boxHeader
           
protected  java.io.DataInputStream _dstrm
           
protected  Jpeg2000Module _module
           
protected  JP2Box _parentBox
           
protected  java.io.RandomAccessFile _raf
           
protected  RepInfo _repInfo
           
protected  long bytesLeft
           
protected  long filePos
           
protected  boolean hasBoxes
           
 
Constructor Summary
BoxHolder(java.io.RandomAccessFile raf)
          Constructor.
 
Method Summary
protected  long getFilePos()
          Returns the file position.
protected  java.lang.String getSelfPropName()
          Returns the name of the BoxHolder.
 boolean hasNext()
          Checks if any more subboxes are available.
 java.lang.Object next()
           
 void remove()
          Always throws UnsupportedOperationException.
protected  void superboxOverrun()
          Utility error reporting function for a subbox overrunning its superbox.
protected  void superboxUnderrun()
          Utility error reporting function for a subbox underrunning its superbox.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

_module

protected Jpeg2000Module _module

_parentBox

protected JP2Box _parentBox

_raf

protected java.io.RandomAccessFile _raf

_dstrm

protected java.io.DataInputStream _dstrm

_boxHeader

protected BoxHeader _boxHeader

_repInfo

protected RepInfo _repInfo

bytesLeft

protected long bytesLeft

filePos

protected long filePos

hasBoxes

protected boolean hasBoxes
Constructor Detail

BoxHolder

public BoxHolder(java.io.RandomAccessFile raf)
Constructor.

Method Detail

getFilePos

protected long getFilePos()
Returns the file position. In practice, this means returning the beginning of the Box.


hasNext

public boolean hasNext()
Checks if any more subboxes are available. This class doesn't fully conform to the Iterator interface, as there are some cases where the lack of more boxes won't be detected till an EOF is encounterd. So callers should call hasNext to avoid reading overruns, and then test the value returned by next for nullity.

Specified by:
hasNext in interface java.util.Iterator

next

public java.lang.Object next()
Specified by:
next in interface java.util.Iterator

remove

public void remove()
            throws java.lang.UnsupportedOperationException
Always throws UnsupportedOperationException.

Specified by:
remove in interface java.util.Iterator
Throws:
java.lang.UnsupportedOperationException

superboxOverrun

protected void superboxOverrun()
Utility error reporting function for a subbox overrunning its superbox. Sets the RepInfo's wellFormed flag to false.


superboxUnderrun

protected void superboxUnderrun()
Utility error reporting function for a subbox underrunning its superbox. Sets the RepInfo's wellFormed flag to false.


getSelfPropName

protected java.lang.String getSelfPropName()
Returns the name of the BoxHolder. All subclasses should override this.



jhove/doc/edu/harvard/hul/ois/jhove/module/jpeg2000/COCMarkerSegment.html0000644000707400001440000004246411510702354025230 0ustar garyusers COCMarkerSegment (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.jpeg2000
Class COCMarkerSegment

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.jpeg2000.MarkerSegment
      extended by edu.harvard.hul.ois.jhove.module.jpeg2000.COCMarkerSegment

public class COCMarkerSegment
extends MarkerSegment

Class for the COC (Coding style component) marker segment. May occur in the main or the tile part header. In the main header it overrides the COD for the specified component. In the tile part header it overrides the COD for the component in the tile part.

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.MarkerSegment
_ccs, _cs, _dstream, _module, _repInfo, COC, COD, COM, CRG, EOC, EPH, PLM, PLT, POC, PPM, PPT, QCC, QCD, RGN, SIZ, SOC, SOD, SOP, SOT, TLM
 
Constructor Summary
COCMarkerSegment()
          Constructor.
 
Method Summary
protected  boolean process(int bytesToEat)
          Process the marker segment.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.MarkerSegment
getMainOrTile, isMarker, markerSegmentMaker, nCompBytes, readMarkLen, setCodestream, setContCodestream, setDataInputStream, setModule, setRepInfo
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

COCMarkerSegment

public COCMarkerSegment()
Constructor.

Method Detail

process

protected boolean process(int bytesToEat)
                   throws java.io.IOException
Process the marker segment. The DataInputStream will be at the point of having read the marker code. The process method must consume exactly the number of bytes remaining in the marker segment.

Specified by:
process in class MarkerSegment
Parameters:
bytesToEat - The number of bytes that must be consumed. If it is 0 for a MarkerSegment, the number of bytes to consume is unknown.
Returns:
true if segment is well-formed, false otherwise.
Throws:
java.io.IOException


jhove/doc/edu/harvard/hul/ois/jhove/module/jpeg2000/CODMarkerSegment.html0000644000707400001440000004231611510702354025225 0ustar garyusers CODMarkerSegment (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.jpeg2000
Class CODMarkerSegment

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.jpeg2000.MarkerSegment
      extended by edu.harvard.hul.ois.jhove.module.jpeg2000.CODMarkerSegment

public class CODMarkerSegment
extends MarkerSegment

Class for the COD (coding style default) marker segment. This comes either in the main header or after an SOT and describes the functions used to code the entire tile.

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.MarkerSegment
_ccs, _cs, _dstream, _module, _repInfo, COC, COD, COM, CRG, EOC, EPH, PLM, PLT, POC, PPM, PPT, QCC, QCD, RGN, SIZ, SOC, SOD, SOP, SOT, TLM
 
Constructor Summary
CODMarkerSegment()
           
 
Method Summary
protected  boolean process(int bytesToEat)
          Processes the marker segment.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.MarkerSegment
getMainOrTile, isMarker, markerSegmentMaker, nCompBytes, readMarkLen, setCodestream, setContCodestream, setDataInputStream, setModule, setRepInfo
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

CODMarkerSegment

public CODMarkerSegment()
Method Detail

process

protected boolean process(int bytesToEat)
                   throws java.io.IOException
Processes the marker segment. The DataInputStream will be at the point of having read the marker code. The process method must consume exactly the number of bytes remaining in the marker segment.

Specified by:
process in class MarkerSegment
Parameters:
bytesToEat - The number of bytes that must be consumed. If it is 0 for a MarkerSegment, the number of bytes to consume is unknown.
Returns:
true if segment is well-formed, false otherwise.
Throws:
java.io.IOException


jhove/doc/edu/harvard/hul/ois/jhove/module/jpeg2000/CRGMarkerSegment.html0000644000707400001440000004217111510702354025232 0ustar garyusers CRGMarkerSegment (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.jpeg2000
Class CRGMarkerSegment

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.jpeg2000.MarkerSegment
      extended by edu.harvard.hul.ois.jhove.module.jpeg2000.CRGMarkerSegment

public class CRGMarkerSegment
extends MarkerSegment

Class for the CRG (component registration) marker segment.

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.MarkerSegment
_ccs, _cs, _dstream, _module, _repInfo, COC, COD, COM, CRG, EOC, EPH, PLM, PLT, POC, PPM, PPT, QCC, QCD, RGN, SIZ, SOC, SOD, SOP, SOT, TLM
 
Constructor Summary
CRGMarkerSegment()
          Constructor.
 
Method Summary
protected  boolean process(int bytesToEat)
          Processes the marker segment.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.MarkerSegment
getMainOrTile, isMarker, markerSegmentMaker, nCompBytes, readMarkLen, setCodestream, setContCodestream, setDataInputStream, setModule, setRepInfo
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

CRGMarkerSegment

public CRGMarkerSegment()
Constructor.

Method Detail

process

protected boolean process(int bytesToEat)
                   throws java.io.IOException
Processes the marker segment. The DataInputStream will be at the point of having read the marker code. The process method must consume exactly the number of bytes remaining in the marker segment.

Specified by:
process in class MarkerSegment
Parameters:
bytesToEat - The number of bytes that must be consumed. If it is 0 for a MarkerSegment, the number of bytes to consume is unknown.
Returns:
true if segment is well-formed, false otherwise.
Throws:
java.io.IOException


jhove/doc/edu/harvard/hul/ois/jhove/module/jpeg2000/CaptureResolutionBox.html0000644000707400001440000005134711510702354026277 0ustar garyusers CaptureResolutionBox (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.jpeg2000
Class CaptureResolutionBox

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
      extended by edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
          extended by edu.harvard.hul.ois.jhove.module.jpeg2000.CaptureResolutionBox
All Implemented Interfaces:
java.util.Iterator

public class CaptureResolutionBox
extends JP2Box

Capture Resolution Box. See I.5.3.7.1 in ISO/IEC 15444-1:2000

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
_bytesRead, associations, DESCRIPTION_NAME, noJP2Hdr, startBytesRead
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
_boxHeader, _dstrm, _module, _parentBox, _raf, _repInfo, bytesLeft, filePos, hasBoxes
 
Constructor Summary
CaptureResolutionBox(java.io.RandomAccessFile raf, BoxHolder parent)
          Constructor with superbox.
 
Method Summary
protected  java.lang.String getSelfPropName()
          Returns the name of the Box.
 boolean readBox()
          Reads the box, putting appropriate information in the RepInfo object.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
addAssociation, boxMaker, emptyBox, finalizeBytesRead, getBytesRead, getLength, getSelfPropDesc, init, initBytesRead, makeAssocProperty, selfDescProperty, setBoxHeader, setDataInputStream, setModule, setRandomAccessFile, setRepInfo, skipBox, wrongBoxContext, wrongBoxSize
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
getFilePos, hasNext, next, remove, superboxOverrun, superboxUnderrun
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

CaptureResolutionBox

public CaptureResolutionBox(java.io.RandomAccessFile raf,
                            BoxHolder parent)
Constructor with superbox.

Parameters:
parent - parent superbox of this box
Method Detail

readBox

public boolean readBox()
                throws java.io.IOException
Reads the box, putting appropriate information in the RepInfo object. setModule, setBoxHeader, setRepInfo and setDataInputStream must be called before readBox is called. readBox must completely consume the box, so that the next byte to be read by the DataInputStream is the FF byte of the next Box.

Specified by:
readBox in class JP2Box
Throws:
java.io.IOException

getSelfPropName

protected java.lang.String getSelfPropName()
Returns the name of the Box.

Overrides:
getSelfPropName in class JP2Box


jhove/doc/edu/harvard/hul/ois/jhove/module/jpeg2000/ChannelDefBox.html0000644000707400001440000005112111510702354024565 0ustar garyusers ChannelDefBox (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.jpeg2000
Class ChannelDefBox

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
      extended by edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
          extended by edu.harvard.hul.ois.jhove.module.jpeg2000.ChannelDefBox
All Implemented Interfaces:
java.util.Iterator

public class ChannelDefBox
extends JP2Box

Channel Definition Box. See I.5.3.6 in ISO/IEC 15444-1:2000 and ISO/IEC FCD15444-2: 2000, L.9.4.5

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
_bytesRead, associations, DESCRIPTION_NAME, noJP2Hdr, startBytesRead
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
_boxHeader, _dstrm, _module, _parentBox, _raf, _repInfo, bytesLeft, filePos, hasBoxes
 
Constructor Summary
ChannelDefBox(java.io.RandomAccessFile raf, BoxHolder parent)
          Constructor with superbox.
 
Method Summary
protected  java.lang.String getSelfPropName()
          Returns the name of the Box.
 boolean readBox()
          Reads the box, putting appropriate information in the RepInfo object.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
addAssociation, boxMaker, emptyBox, finalizeBytesRead, getBytesRead, getLength, getSelfPropDesc, init, initBytesRead, makeAssocProperty, selfDescProperty, setBoxHeader, setDataInputStream, setModule, setRandomAccessFile, setRepInfo, skipBox, wrongBoxContext, wrongBoxSize
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
getFilePos, hasNext, next, remove, superboxOverrun, superboxUnderrun
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ChannelDefBox

public ChannelDefBox(java.io.RandomAccessFile raf,
                     BoxHolder parent)
Constructor with superbox.

Method Detail

readBox

public boolean readBox()
                throws java.io.IOException
Reads the box, putting appropriate information in the RepInfo object. setModule, setBoxHeader, setRepInfo and setDataInputStream must be called before readBox is called. readBox must completely consume the box, so that the next byte to be read by the DataInputStream is the FF byte of the next Box.

Specified by:
readBox in class JP2Box
Throws:
java.io.IOException

getSelfPropName

protected java.lang.String getSelfPropName()
Returns the name of the Box.

Overrides:
getSelfPropName in class JP2Box


jhove/doc/edu/harvard/hul/ois/jhove/module/jpeg2000/Codestream.html0000644000707400001440000006261511510702354024225 0ustar garyusers Codestream (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.jpeg2000
Class Codestream

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.jpeg2000.MainOrTile
      extended by edu.harvard.hul.ois.jhove.module.jpeg2000.Codestream

public class Codestream
extends MainOrTile

The information on a codestream, extracted from a Contiguous Codestream or Fragment Table, and the corresponding Codestream Header if any.

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.MainOrTile
_codProperty, _comments, _components, _packetLengthList, _pocProperty, _precSize, _qcdProperty, NULL
 
Constructor Summary
Codestream()
           
 
Method Summary
 void addPPMLength(long len)
          Add a PPM tilepart header length to the list of lengths
 void addTileLength(Property p)
          Add a tile length property to the list of tile lengths.
 NisoImageMetadata getNiso()
          Returns the images NisoImageMetadata.
 Property makeProperty()
          Builds a Property out of everything we've collected.
protected  void setCompMapProperty(Property p)
          Sets the component mapping property.
 void setCompProperty(int idx, Property prop)
          Set a property indexed by component.
protected  void setCRGProperty(Property p)
           
 void setDefaultNiso(NisoImageMetadata dNiso)
          Set the initial Niso values from a default Niso object.
protected  void setLabelProperty(Property p)
          Sets the label property.
protected  void setPaletteProperty(Property p)
          Sets the palette property.
protected  void setROIProperty(Property p)
          Sets the ROI property.
protected  void setSIZProperty(Property p)
          Sets the SIZ property.
 void setTiles(java.util.List tiles)
          Assign a List of Tile objects to the tiles field
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.MainOrTile
addComment, addPacketLength, getNumComponents, setCODProperty, setNumComponents, setPOCProperty, setQCDProperty
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

Codestream

public Codestream()
Method Detail

makeProperty

public Property makeProperty()
Builds a Property out of everything we've collected.


setDefaultNiso

public void setDefaultNiso(NisoImageMetadata dNiso)
Set the initial Niso values from a default Niso object. This doesn't attempt to be complete, but sets the values which we know could have been set from the JP2 header.


getNiso

public NisoImageMetadata getNiso()
Returns the images NisoImageMetadata.


setTiles

public void setTiles(java.util.List tiles)
Assign a List of Tile objects to the tiles field


addTileLength

public void addTileLength(Property p)
Add a tile length property to the list of tile lengths.


addPPMLength

public void addPPMLength(long len)
Add a PPM tilepart header length to the list of lengths


setLabelProperty

protected void setLabelProperty(Property p)
Sets the label property.


setCompMapProperty

protected void setCompMapProperty(Property p)
Sets the component mapping property.


setPaletteProperty

protected void setPaletteProperty(Property p)
Sets the palette property.


setROIProperty

protected void setROIProperty(Property p)
Sets the ROI property.


setSIZProperty

protected void setSIZProperty(Property p)
Sets the SIZ property.


setCRGProperty

protected void setCRGProperty(Property p)

setCompProperty

public void setCompProperty(int idx,
                            Property prop)
Set a property indexed by component. If a property for that component doesn't already exist, it is created. prop is then added to the property list of that property.

Overrides:
setCompProperty in class MainOrTile


jhove/doc/edu/harvard/hul/ois/jhove/module/jpeg2000/CodestreamHeaderBox.html0000644000707400001440000005340211510702354026001 0ustar garyusers CodestreamHeaderBox (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.jpeg2000
Class CodestreamHeaderBox

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
      extended by edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
          extended by edu.harvard.hul.ois.jhove.module.jpeg2000.CodestreamHeaderBox
All Implemented Interfaces:
java.util.Iterator

public class CodestreamHeaderBox
extends JP2Box

Codestream Header box. This is similar to a JP2HeaderBox, and has many of the same subboxes, but applies to a single codestream. See ISO/IEC FCD15444-2: 2000, L.9.3

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
_bytesRead, associations, DESCRIPTION_NAME, noJP2Hdr, startBytesRead
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
_boxHeader, _dstrm, _module, _parentBox, _raf, _repInfo, bytesLeft, filePos, hasBoxes
 
Constructor Summary
CodestreamHeaderBox(java.io.RandomAccessFile raf, BoxHolder parent)
          Constructor with superbox.
 
Method Summary
protected  Codestream getCodestream()
          Returns the associated Codestream object.
protected  java.lang.String getSelfPropName()
          Returns the name of the Box.
 boolean readBox()
          Reads the box, putting appropriate information in the RepInfo object.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
addAssociation, boxMaker, emptyBox, finalizeBytesRead, getBytesRead, getLength, getSelfPropDesc, init, initBytesRead, makeAssocProperty, selfDescProperty, setBoxHeader, setDataInputStream, setModule, setRandomAccessFile, setRepInfo, skipBox, wrongBoxContext, wrongBoxSize
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
getFilePos, hasNext, next, remove, superboxOverrun, superboxUnderrun
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

CodestreamHeaderBox

public CodestreamHeaderBox(java.io.RandomAccessFile raf,
                           BoxHolder parent)
Constructor with superbox.

Parameters:
parent - Must be null or the TopLevelBoxHolder
Method Detail

readBox

public boolean readBox()
                throws java.io.IOException
Reads the box, putting appropriate information in the RepInfo object. setModule, setBoxHeader, setRepInfo and setDataInputStream must be called before readBox is called. readBox must completely consume the box, so that the next byte to be read by the DataInputStream is the FF byte of the next Box.

Specified by:
readBox in class JP2Box
Throws:
java.io.IOException

getCodestream

protected Codestream getCodestream()
Returns the associated Codestream object.


getSelfPropName

protected java.lang.String getSelfPropName()
Returns the name of the Box.

Overrides:
getSelfPropName in class JP2Box


jhove/doc/edu/harvard/hul/ois/jhove/module/jpeg2000/CodestreamRegBox.html0000644000707400001440000005136011510702354025327 0ustar garyusers CodestreamRegBox (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.jpeg2000
Class CodestreamRegBox

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
      extended by edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
          extended by edu.harvard.hul.ois.jhove.module.jpeg2000.CodestreamRegBox
All Implemented Interfaces:
java.util.Iterator

public class CodestreamRegBox
extends JP2Box

Codestream Registration Box. See ISO/IEC FCD15444-2: 2000, L.9.4.7

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
_bytesRead, associations, DESCRIPTION_NAME, noJP2Hdr, startBytesRead
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
_boxHeader, _dstrm, _module, _parentBox, _raf, _repInfo, bytesLeft, filePos, hasBoxes
 
Constructor Summary
CodestreamRegBox(java.io.RandomAccessFile raf, BoxHolder parent)
          Constructor with superbox.
 
Method Summary
protected  java.lang.String getSelfPropName()
          Returns the name of the Box.
 boolean readBox()
          Reads the box, putting appropriate information in the RepInfo object.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
addAssociation, boxMaker, emptyBox, finalizeBytesRead, getBytesRead, getLength, getSelfPropDesc, init, initBytesRead, makeAssocProperty, selfDescProperty, setBoxHeader, setDataInputStream, setModule, setRandomAccessFile, setRepInfo, skipBox, wrongBoxContext, wrongBoxSize
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
getFilePos, hasNext, next, remove, superboxOverrun, superboxUnderrun
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

CodestreamRegBox

public CodestreamRegBox(java.io.RandomAccessFile raf,
                        BoxHolder parent)
Constructor with superbox.

Parameters:
parent - parent superbox of this box (must be a ComposLayerHdrBox)
Method Detail

readBox

public boolean readBox()
                throws java.io.IOException
Reads the box, putting appropriate information in the RepInfo object. setModule, setBoxHeader, setRepInfo and setDataInputStream must be called before readBox is called. readBox must completely consume the box, so that the next byte to be read by the DataInputStream is the FF byte of the next Box.

Specified by:
readBox in class JP2Box
Throws:
java.io.IOException

getSelfPropName

protected java.lang.String getSelfPropName()
Returns the name of the Box.

Overrides:
getSelfPropName in class JP2Box


jhove/doc/edu/harvard/hul/ois/jhove/module/jpeg2000/ColorGroupBox.html0000644000707400001440000005321711510702354024701 0ustar garyusers ColorGroupBox (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.jpeg2000
Class ColorGroupBox

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
      extended by edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
          extended by edu.harvard.hul.ois.jhove.module.jpeg2000.ColorGroupBox
All Implemented Interfaces:
java.util.Iterator

public class ColorGroupBox
extends JP2Box

Color Group Box. See ISO/IEC FCD15444-2: 2000, L.9.4.1

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
_bytesRead, associations, DESCRIPTION_NAME, noJP2Hdr, startBytesRead
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
_boxHeader, _dstrm, _module, _parentBox, _raf, _repInfo, bytesLeft, filePos, hasBoxes
 
Constructor Summary
ColorGroupBox(java.io.RandomAccessFile raf, BoxHolder parent)
          Constructor with superbox.
 
Method Summary
protected  void addColorSpec(Property p)
          Adds a color spec property to the parent Compositing Layer Header Box.
protected  java.lang.String getSelfPropName()
          Returns the name of the Box.
 boolean readBox()
          Reads the box, putting appropriate information in the RepInfo object.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
addAssociation, boxMaker, emptyBox, finalizeBytesRead, getBytesRead, getLength, getSelfPropDesc, init, initBytesRead, makeAssocProperty, selfDescProperty, setBoxHeader, setDataInputStream, setModule, setRandomAccessFile, setRepInfo, skipBox, wrongBoxContext, wrongBoxSize
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
getFilePos, hasNext, next, remove, superboxOverrun, superboxUnderrun
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ColorGroupBox

public ColorGroupBox(java.io.RandomAccessFile raf,
                     BoxHolder parent)
Constructor with superbox.

Parameters:
parent - parent superbox of this box (must be a ComposLayerHdrBox)
Method Detail

readBox

public boolean readBox()
                throws java.io.IOException
Reads the box, putting appropriate information in the RepInfo object. setModule, setBoxHeader, setRepInfo and setDataInputStream must be called before readBox is called. readBox must completely consume the box, so that the next byte to be read by the DataInputStream is the FF byte of the next Box.

Specified by:
readBox in class JP2Box
Throws:
java.io.IOException

addColorSpec

protected void addColorSpec(Property p)
Adds a color spec property to the parent Compositing Layer Header Box.


getSelfPropName

protected java.lang.String getSelfPropName()
Returns the name of the Box.

Overrides:
getSelfPropName in class JP2Box


jhove/doc/edu/harvard/hul/ois/jhove/module/jpeg2000/ColorSpecBox.html0000644000707400001440000005131311510702354024472 0ustar garyusers ColorSpecBox (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.jpeg2000
Class ColorSpecBox

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
      extended by edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
          extended by edu.harvard.hul.ois.jhove.module.jpeg2000.ColorSpecBox
All Implemented Interfaces:
java.util.Iterator

public class ColorSpecBox
extends JP2Box

Color specification box. See I.5.3.3 in ISO/IEC 15444-1:2000 and ISO/IEC FCD15444-2: 2000, L.9.4.2

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
_bytesRead, associations, DESCRIPTION_NAME, noJP2Hdr, startBytesRead
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
_boxHeader, _dstrm, _module, _parentBox, _raf, _repInfo, bytesLeft, filePos, hasBoxes
 
Constructor Summary
ColorSpecBox(java.io.RandomAccessFile raf, BoxHolder parent)
          Constructor with superbox.
 
Method Summary
protected  java.lang.String getSelfPropName()
          Returns the name of the Box.
 boolean readBox()
          Reads the box, putting appropriate information in the RepInfo object.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
addAssociation, boxMaker, emptyBox, finalizeBytesRead, getBytesRead, getLength, getSelfPropDesc, init, initBytesRead, makeAssocProperty, selfDescProperty, setBoxHeader, setDataInputStream, setModule, setRandomAccessFile, setRepInfo, skipBox, wrongBoxContext, wrongBoxSize
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
getFilePos, hasNext, next, remove, superboxOverrun, superboxUnderrun
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ColorSpecBox

public ColorSpecBox(java.io.RandomAccessFile raf,
                    BoxHolder parent)
Constructor with superbox.

Parameters:
parent - parent superbox of this box (must be JP2HeaderBox or ColorGroupBox)
Method Detail

readBox

public boolean readBox()
                throws java.io.IOException
Reads the box, putting appropriate information in the RepInfo object. setModule, setBoxHeader, setRepInfo and setDataInputStream must be called before readBox is called. readBox must completely consume the box, so that the next byte to be read by the DataInputStream is the FF byte of the next Box.

Specified by:
readBox in class JP2Box
Throws:
java.io.IOException

getSelfPropName

protected java.lang.String getSelfPropName()
Returns the name of the Box.

Overrides:
getSelfPropName in class JP2Box


jhove/doc/edu/harvard/hul/ois/jhove/module/jpeg2000/CommentMarkerSegment.html0000644000707400001440000004233211510702354026220 0ustar garyusers CommentMarkerSegment (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.jpeg2000
Class CommentMarkerSegment

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.jpeg2000.MarkerSegment
      extended by edu.harvard.hul.ois.jhove.module.jpeg2000.CommentMarkerSegment

public class CommentMarkerSegment
extends MarkerSegment

Class for the COM (Comment) marker segment. This comes either in the main header or after an SOT.

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.MarkerSegment
_ccs, _cs, _dstream, _module, _repInfo, COC, COD, COM, CRG, EOC, EPH, PLM, PLT, POC, PPM, PPT, QCC, QCD, RGN, SIZ, SOC, SOD, SOP, SOT, TLM
 
Constructor Summary
CommentMarkerSegment()
          Constructor.
 
Method Summary
protected  boolean process(int bytesToEat)
          Process the marker segment.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.MarkerSegment
getMainOrTile, isMarker, markerSegmentMaker, nCompBytes, readMarkLen, setCodestream, setContCodestream, setDataInputStream, setModule, setRepInfo
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

CommentMarkerSegment

public CommentMarkerSegment()
Constructor.

Method Detail

process

protected boolean process(int bytesToEat)
                   throws java.io.IOException
Process the marker segment. The DataInputStream will be at the point of having read the marker code. The process method must consume exactly the number of bytes remaining in the marker segment.

Specified by:
process in class MarkerSegment
Parameters:
bytesToEat - The number of bytes that must be consumed. If it is 0 for a MarkerSegment, the number of bytes to consume is unknown.
Returns:
true if segment is well-formed, false otherwise.
Throws:
java.io.IOException


jhove/doc/edu/harvard/hul/ois/jhove/module/jpeg2000/CompOptionsBox.html0000644000707400001440000004746311510702354025066 0ustar garyusers CompOptionsBox (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.jpeg2000
Class CompOptionsBox

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
      extended by edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
          extended by edu.harvard.hul.ois.jhove.module.jpeg2000.CompOptionsBox
All Implemented Interfaces:
java.util.Iterator

public class CompOptionsBox
extends JP2Box

Composition options box (JPX). See ISO/IEC FCD15444-2: 2000, L.9.10.1

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
_bytesRead, associations, DESCRIPTION_NAME, noJP2Hdr, startBytesRead
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
_boxHeader, _dstrm, _module, _parentBox, _raf, _repInfo, bytesLeft, filePos, hasBoxes
 
Constructor Summary
CompOptionsBox(java.io.RandomAccessFile raf, BoxHolder parent)
          Constructor with superbox.
 
Method Summary
 boolean readBox()
          Reads the box, putting appropriate information in the RepInfo object.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
addAssociation, boxMaker, emptyBox, finalizeBytesRead, getBytesRead, getLength, getSelfPropDesc, getSelfPropName, init, initBytesRead, makeAssocProperty, selfDescProperty, setBoxHeader, setDataInputStream, setModule, setRandomAccessFile, setRepInfo, skipBox, wrongBoxContext, wrongBoxSize
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
getFilePos, hasNext, next, remove, superboxOverrun, superboxUnderrun
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

CompOptionsBox

public CompOptionsBox(java.io.RandomAccessFile raf,
                      BoxHolder parent)
Constructor with superbox.

Parameters:
parent - parent superbox of this box
Method Detail

readBox

public boolean readBox()
                throws java.io.IOException
Reads the box, putting appropriate information in the RepInfo object. setModule, setBoxHeader, setRepInfo and setDataInputStream must be called before readBox is called. readBox must completely consume the box, so that the next byte to be read by the DataInputStream is the FF byte of the next Box.

Specified by:
readBox in class JP2Box
Throws:
java.io.IOException


jhove/doc/edu/harvard/hul/ois/jhove/module/jpeg2000/ComponentMapBox.html0000644000707400001440000005124111510702354025201 0ustar garyusers ComponentMapBox (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.jpeg2000
Class ComponentMapBox

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
      extended by edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
          extended by edu.harvard.hul.ois.jhove.module.jpeg2000.ComponentMapBox
All Implemented Interfaces:
java.util.Iterator

public class ComponentMapBox
extends JP2Box

Component Mapping Box. See I.5.3.5 in ISO/IEC 15444-1:2000

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
_bytesRead, associations, DESCRIPTION_NAME, noJP2Hdr, startBytesRead
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
_boxHeader, _dstrm, _module, _parentBox, _raf, _repInfo, bytesLeft, filePos, hasBoxes
 
Constructor Summary
ComponentMapBox(java.io.RandomAccessFile raf, BoxHolder parent)
          Constructor with superbox.
 
Method Summary
protected  java.lang.String getSelfPropName()
          Returns the name of the Box.
 boolean readBox()
          Reads the box, putting appropriate information in the RepInfo object.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
addAssociation, boxMaker, emptyBox, finalizeBytesRead, getBytesRead, getLength, getSelfPropDesc, init, initBytesRead, makeAssocProperty, selfDescProperty, setBoxHeader, setDataInputStream, setModule, setRandomAccessFile, setRepInfo, skipBox, wrongBoxContext, wrongBoxSize
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
getFilePos, hasNext, next, remove, superboxOverrun, superboxUnderrun
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ComponentMapBox

public ComponentMapBox(java.io.RandomAccessFile raf,
                       BoxHolder parent)
Constructor with superbox.

Parameters:
parent - parent superbox of this box
Method Detail

readBox

public boolean readBox()
                throws java.io.IOException
Reads the box, putting appropriate information in the RepInfo object. setModule, setBoxHeader, setRepInfo and setDataInputStream must be called before readBox is called. readBox must completely consume the box, so that the next byte to be read by the DataInputStream is the FF byte of the next Box.

Specified by:
readBox in class JP2Box
Throws:
java.io.IOException

getSelfPropName

protected java.lang.String getSelfPropName()
Returns the name of the Box.

Overrides:
getSelfPropName in class JP2Box


jhove/doc/edu/harvard/hul/ois/jhove/module/jpeg2000/ComposLayerHdrBox.html0000644000707400001440000006057011510702354025501 0ustar garyusers ComposLayerHdrBox (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.jpeg2000
Class ComposLayerHdrBox

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
      extended by edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
          extended by edu.harvard.hul.ois.jhove.module.jpeg2000.ComposLayerHdrBox
All Implemented Interfaces:
java.util.Iterator

public class ComposLayerHdrBox
extends JP2Box

Compositing Layer Header Box (JPX superbox). See ISO/IEC FCD15444-2: 2000, L.9.4

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
_bytesRead, associations, DESCRIPTION_NAME, noJP2Hdr, startBytesRead
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
_boxHeader, _dstrm, _module, _parentBox, _raf, _repInfo, bytesLeft, filePos, hasBoxes
 
Constructor Summary
ComposLayerHdrBox(java.io.RandomAccessFile raf, BoxHolder parent)
          Constructor with superbox.
 
Method Summary
protected  void addChannelDef(Property p)
          Add channel definition property.
protected  void addCodestreamReg(Property p)
          Add codestream registration property.
protected  void addColorSpec(Property p)
          Add a color specification property.
protected  void addOpacity(Property p)
          Add an opacity property.
protected  java.lang.String getSelfPropName()
          Returns the name of the Box.
 boolean readBox()
          Reads the box, putting appropriate information in the RepInfo object.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
addAssociation, boxMaker, emptyBox, finalizeBytesRead, getBytesRead, getLength, getSelfPropDesc, init, initBytesRead, makeAssocProperty, selfDescProperty, setBoxHeader, setDataInputStream, setModule, setRandomAccessFile, setRepInfo, skipBox, wrongBoxContext, wrongBoxSize
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
getFilePos, hasNext, next, remove, superboxOverrun, superboxUnderrun
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ComposLayerHdrBox

public ComposLayerHdrBox(java.io.RandomAccessFile raf,
                         BoxHolder parent)
Constructor with superbox.

Parameters:
parent - parent superbox of this box
Method Detail

readBox

public boolean readBox()
                throws java.io.IOException
Reads the box, putting appropriate information in the RepInfo object. setModule, setBoxHeader, setRepInfo and setDataInputStream must be called before readBox is called. readBox must completely consume the box, so that the next byte to be read by the DataInputStream is the FF byte of the next Box.

Specified by:
readBox in class JP2Box
Throws:
java.io.IOException

addColorSpec

protected void addColorSpec(Property p)
Add a color specification property.


addOpacity

protected void addOpacity(Property p)
Add an opacity property.


addChannelDef

protected void addChannelDef(Property p)
Add channel definition property.


addCodestreamReg

protected void addCodestreamReg(Property p)
Add codestream registration property.


getSelfPropName

protected java.lang.String getSelfPropName()
Returns the name of the Box.

Overrides:
getSelfPropName in class JP2Box


jhove/doc/edu/harvard/hul/ois/jhove/module/jpeg2000/CompositionBox.html0000644000707400001440000005511711510702354025112 0ustar garyusers CompositionBox (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.jpeg2000
Class CompositionBox

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
      extended by edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
          extended by edu.harvard.hul.ois.jhove.module.jpeg2000.CompositionBox
All Implemented Interfaces:
java.util.Iterator

public class CompositionBox
extends JP2Box

Composition Box (JPX). See ISO/IEC FCD15444-2: 2000, L.9.10

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
_bytesRead, associations, DESCRIPTION_NAME, noJP2Hdr, startBytesRead
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
_boxHeader, _dstrm, _module, _parentBox, _raf, _repInfo, bytesLeft, filePos, hasBoxes
 
Constructor Summary
CompositionBox(java.io.RandomAccessFile raf, BoxHolder parent)
          Constructor with superbox.
 
Method Summary
protected  void addInstSet(Property p)
          Add an instruction set property to the list.
 boolean readBox()
          Reads the box, putting appropriate information in the RepInfo object.
protected  void setHeight(long h)
          Set the height value.
protected  void setLoop(int l)
          Set the loop value.
protected  void setWidth(long w)
          Set the height value.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
addAssociation, boxMaker, emptyBox, finalizeBytesRead, getBytesRead, getLength, getSelfPropDesc, getSelfPropName, init, initBytesRead, makeAssocProperty, selfDescProperty, setBoxHeader, setDataInputStream, setModule, setRandomAccessFile, setRepInfo, skipBox, wrongBoxContext, wrongBoxSize
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
getFilePos, hasNext, next, remove, superboxOverrun, superboxUnderrun
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

CompositionBox

public CompositionBox(java.io.RandomAccessFile raf,
                      BoxHolder parent)
Constructor with superbox.

Parameters:
parent - parent superbox of this box
Method Detail

readBox

public boolean readBox()
                throws java.io.IOException
Reads the box, putting appropriate information in the RepInfo object. setModule, setBoxHeader, setRepInfo and setDataInputStream must be called before readBox is called. readBox must completely consume the box, so that the next byte to be read by the DataInputStream is the FF byte of the next Box.

Specified by:
readBox in class JP2Box
Throws:
java.io.IOException

addInstSet

protected void addInstSet(Property p)
Add an instruction set property to the list. This is called from InstructionSetBox.


setHeight

protected void setHeight(long h)
Set the height value. This is called from CompositionBox.


setWidth

protected void setWidth(long w)
Set the height value. This is called from CompositionBox.


setLoop

protected void setLoop(int l)
Set the loop value. This is called from CompositionBox.



jhove/doc/edu/harvard/hul/ois/jhove/module/jpeg2000/ContCodestream.html0000644000707400001440000004364411510702354025052 0ustar garyusers ContCodestream (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.jpeg2000
Class ContCodestream

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.jpeg2000.ContCodestream

public class ContCodestream
extends java.lang.Object

Encapsulation of a JPEG 2000 codestream. This is based on the information in Appendix A of ISO/IEC 15444-1:2000(E). That standard "does not include a definition of compliance or conformance."

Author:
Gary McGath

Constructor Summary
ContCodestream(Jpeg2000Module module, java.io.DataInputStream dstream, long length)
          Constructor.
 
Method Summary
protected  Tile getCurTile()
          Gets the value of curTile.
protected  Tile getTile(int idx)
          Gets the tile whose index is idx.
 java.util.List getTiles()
          Returns the list of tiles.
protected  boolean isPPMSeen()
          Returns the value of the ppmSeen flag, signifying that a PPM marker segment has been encountered.
 boolean readCodestream(Codestream cs, RepInfo info)
          Reading a codestream generates various bits of information about the image.
protected  void setCurTile(Tile tile)
          Sets the value of curTile.
protected  void setPPMSeen(boolean b)
          Sets the value of the ppmSeen flag, signifying that a PPM marker segment has been encountered.
protected  void setTileLeft(long tileLeft)
          Set the number of bytes remaining in the current tile.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ContCodestream

public ContCodestream(Jpeg2000Module module,
                      java.io.DataInputStream dstream,
                      long length)
Constructor.

Parameters:
length - Length of the codestream, exclusive of the box header. If the codestream box has a length field of 0, pass 0 for this parameter.
Method Detail

readCodestream

public boolean readCodestream(Codestream cs,
                              RepInfo info)
                       throws java.io.IOException
Reading a codestream generates various bits of information about the image. These are made available after reading through accessor functions.

Parameters:
cs - The image which this codestream defines. Must have a non-null codestream field.
info - The RepInfo object which accumulates information about the document. Used for reporting errors.
Returns:
True if no fatal errors detected, false if error prevents safe continuation
Throws:
java.io.IOException

getTiles

public java.util.List getTiles()
Returns the list of tiles. The elements are Tile objects.


setTileLeft

protected void setTileLeft(long tileLeft)
Set the number of bytes remaining in the current tile. For use by MarkerSegment subclasses.


getTile

protected Tile getTile(int idx)
Gets the tile whose index is idx.


setCurTile

protected void setCurTile(Tile tile)
Sets the value of curTile.


setPPMSeen

protected void setPPMSeen(boolean b)
Sets the value of the ppmSeen flag, signifying that a PPM marker segment has been encountered.


getCurTile

protected Tile getCurTile()
Gets the value of curTile. May be null.


isPPMSeen

protected boolean isPPMSeen()
Returns the value of the ppmSeen flag, signifying that a PPM marker segment has been encountered.



jhove/doc/edu/harvard/hul/ois/jhove/module/jpeg2000/ContCodestreamBox.html0000644000707400001440000005145011510702354025515 0ustar garyusers ContCodestreamBox (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.jpeg2000
Class ContCodestreamBox

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
      extended by edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
          extended by edu.harvard.hul.ois.jhove.module.jpeg2000.ContCodestreamBox
All Implemented Interfaces:
java.util.Iterator

public class ContCodestreamBox
extends JP2Box

Continuous codestream box. See I.5.4 in ISO/IEC 15444-1:2000

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
_bytesRead, associations, DESCRIPTION_NAME, noJP2Hdr, startBytesRead
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
_boxHeader, _dstrm, _module, _parentBox, _raf, _repInfo, bytesLeft, filePos, hasBoxes
 
Constructor Summary
ContCodestreamBox(java.io.RandomAccessFile raf, BoxHolder parent)
          Constructor with superbox.
 
Method Summary
protected  java.lang.String getSelfPropName()
          Returns the name of the Box.
 boolean readBox()
          Reads the box, putting appropriate information in the RepInfo object.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
addAssociation, boxMaker, emptyBox, finalizeBytesRead, getBytesRead, getLength, getSelfPropDesc, init, initBytesRead, makeAssocProperty, selfDescProperty, setBoxHeader, setDataInputStream, setModule, setRandomAccessFile, setRepInfo, skipBox, wrongBoxContext, wrongBoxSize
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
getFilePos, hasNext, next, remove, superboxOverrun, superboxUnderrun
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ContCodestreamBox

public ContCodestreamBox(java.io.RandomAccessFile raf,
                         BoxHolder parent)
Constructor with superbox.

Parameters:
parent - parent superbox of this box
Method Detail

readBox

public boolean readBox()
                throws java.io.IOException
Reads the box, putting appropriate information in the RepInfo object. setModule, setBoxHeader, setRepInfo and setDataInputStream must be called before readBox is called. readBox must completely consume the box, so that the next byte to be read by the DataInputStream is the FF byte of the next Box. The reading and interpretation of the actual codestream occurs within the execution of readBox.

Specified by:
readBox in class JP2Box
Throws:
java.io.IOException

getSelfPropName

protected java.lang.String getSelfPropName()
Returns the name of the Box.

Overrides:
getSelfPropName in class JP2Box


jhove/doc/edu/harvard/hul/ois/jhove/module/jpeg2000/CrossRefBox.html0000644000707400001440000005345411510702354024337 0ustar garyusers CrossRefBox (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.jpeg2000
Class CrossRefBox

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
      extended by edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
          extended by edu.harvard.hul.ois.jhove.module.jpeg2000.CrossRefBox
All Implemented Interfaces:
java.util.Iterator

public class CrossRefBox
extends JP2Box

Cross Reference Box (JPX). A Cross Reference Box may be found in a Codestream Header, Compositing Layer Header, or Association box. When it is encountered, the box to which it refers should be substituted for the Cross Reference Box. Interesting features of the box are that it isn't all in one place, but is scattered through multiple locations by a fragment list, and it doesn't follow standard superbox rules. See ISO/IEC FCD15444-2: 2000, L.9.7

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
_bytesRead, associations, DESCRIPTION_NAME, noJP2Hdr, startBytesRead
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
_boxHeader, _dstrm, _module, _parentBox, _raf, _repInfo, bytesLeft, filePos, hasBoxes
 
Constructor Summary
CrossRefBox(java.io.RandomAccessFile raf, BoxHolder parent)
          Constructor with superbox.
 
Method Summary
 java.io.DataInputStream getCrossRefStream()
          Returns a DataInputStream based on a FragmentInputStream so that the fragments can be read as a single entity.
protected  java.lang.String getSelfPropName()
          Returns the name of the Box.
 boolean readBox()
          Reads the box, putting appropriate information in the RepInfo object.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
addAssociation, boxMaker, emptyBox, finalizeBytesRead, getBytesRead, getLength, getSelfPropDesc, init, initBytesRead, makeAssocProperty, selfDescProperty, setBoxHeader, setDataInputStream, setModule, setRandomAccessFile, setRepInfo, skipBox, wrongBoxContext, wrongBoxSize
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
getFilePos, hasNext, next, remove, superboxOverrun, superboxUnderrun
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

CrossRefBox

public CrossRefBox(java.io.RandomAccessFile raf,
                   BoxHolder parent)
Constructor with superbox.

Parameters:
parent - parent superbox of this box or TopLevelBoxHolder
Method Detail

readBox

public boolean readBox()
                throws java.io.IOException
Reads the box, putting appropriate information in the RepInfo object. setModule, setBoxHeader, setRepInfo and setDataInputStream must be called before readBox is called. readBox must completely consume the box, so that the next byte to be read by the DataInputStream is the FF byte of the next Box.

Specified by:
readBox in class JP2Box
Throws:
java.io.IOException

getCrossRefStream

public java.io.DataInputStream getCrossRefStream()
Returns a DataInputStream based on a FragmentInputStream so that the fragments can be read as a single entity.


getSelfPropName

protected java.lang.String getSelfPropName()
Returns the name of the Box.

Overrides:
getSelfPropName in class JP2Box


jhove/doc/edu/harvard/hul/ois/jhove/module/jpeg2000/DDResolutionBox.html0000644000707400001440000005123211510702355025155 0ustar garyusers DDResolutionBox (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.jpeg2000
Class DDResolutionBox

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
      extended by edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
          extended by edu.harvard.hul.ois.jhove.module.jpeg2000.DDResolutionBox
All Implemented Interfaces:
java.util.Iterator

public class DDResolutionBox
extends JP2Box

Default Display Resolution Box. See I.5.3.7.2 in ISO/IEC 15444-1:2000

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
_bytesRead, associations, DESCRIPTION_NAME, noJP2Hdr, startBytesRead
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
_boxHeader, _dstrm, _module, _parentBox, _raf, _repInfo, bytesLeft, filePos, hasBoxes
 
Constructor Summary
DDResolutionBox(java.io.RandomAccessFile raf, BoxHolder parent)
          Constructor with superbox.
 
Method Summary
protected  java.lang.String getSelfPropName()
          Returns the name of the Box.
 boolean readBox()
          Reads the box, putting appropriate information in the RepInfo object.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
addAssociation, boxMaker, emptyBox, finalizeBytesRead, getBytesRead, getLength, getSelfPropDesc, init, initBytesRead, makeAssocProperty, selfDescProperty, setBoxHeader, setDataInputStream, setModule, setRandomAccessFile, setRepInfo, skipBox, wrongBoxContext, wrongBoxSize
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
getFilePos, hasNext, next, remove, superboxOverrun, superboxUnderrun
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

DDResolutionBox

public DDResolutionBox(java.io.RandomAccessFile raf,
                       BoxHolder parent)
Constructor with superbox.

Parameters:
parent - parent superbox of this box
Method Detail

readBox

public boolean readBox()
                throws java.io.IOException
Reads the box, putting appropriate information in the RepInfo object. setModule, setBoxHeader, setRepInfo and setDataInputStream must be called before readBox is called. readBox must completely consume the box, so that the next byte to be read by the DataInputStream is the FF byte of the next Box.

Specified by:
readBox in class JP2Box
Throws:
java.io.IOException

getSelfPropName

protected java.lang.String getSelfPropName()
Returns the name of the Box.

Overrides:
getSelfPropName in class JP2Box


jhove/doc/edu/harvard/hul/ois/jhove/module/jpeg2000/DataEntryURLBox.html0000644000707400001440000005115111510702355025060 0ustar garyusers DataEntryURLBox (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.jpeg2000
Class DataEntryURLBox

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
      extended by edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
          extended by edu.harvard.hul.ois.jhove.module.jpeg2000.DataEntryURLBox
All Implemented Interfaces:
java.util.Iterator

public class DataEntryURLBox
extends JP2Box

Data Entry URL Box.

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
_bytesRead, associations, DESCRIPTION_NAME, noJP2Hdr, startBytesRead
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
_boxHeader, _dstrm, _module, _parentBox, _raf, _repInfo, bytesLeft, filePos, hasBoxes
 
Constructor Summary
DataEntryURLBox(java.io.RandomAccessFile raf, BoxHolder parent)
          Constructor with superbox.
 
Method Summary
protected  java.lang.String getSelfPropName()
          Returns the name of the Box.
 boolean readBox()
          Reads the box, putting appropriate information in the RepInfo object.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
addAssociation, boxMaker, emptyBox, finalizeBytesRead, getBytesRead, getLength, getSelfPropDesc, init, initBytesRead, makeAssocProperty, selfDescProperty, setBoxHeader, setDataInputStream, setModule, setRandomAccessFile, setRepInfo, skipBox, wrongBoxContext, wrongBoxSize
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
getFilePos, hasNext, next, remove, superboxOverrun, superboxUnderrun
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

DataEntryURLBox

public DataEntryURLBox(java.io.RandomAccessFile raf,
                       BoxHolder parent)
Constructor with superbox.

Parameters:
parent - parent superbox of this box
Method Detail

readBox

public boolean readBox()
                throws java.io.IOException
Reads the box, putting appropriate information in the RepInfo object. setModule, setBoxHeader, setRepInfo and setDataInputStream must be called before readBox is called. readBox must completely consume the box, so that the next byte to be read by the DataInputStream is the FF byte of the next Box.

Specified by:
readBox in class JP2Box
Throws:
java.io.IOException

getSelfPropName

protected java.lang.String getSelfPropName()
Returns the name of the Box.

Overrides:
getSelfPropName in class JP2Box


jhove/doc/edu/harvard/hul/ois/jhove/module/jpeg2000/DefaultBox.html0000644000707400001440000005100611510702355024165 0ustar garyusers DefaultBox (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.jpeg2000
Class DefaultBox

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
      extended by edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
          extended by edu.harvard.hul.ois.jhove.module.jpeg2000.DefaultBox
All Implemented Interfaces:
java.util.Iterator

public class DefaultBox
extends JP2Box

Default class for Boxes that have not yet been implemented. Also used for the "free" box, which by definition contains no information.

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
_bytesRead, associations, DESCRIPTION_NAME, noJP2Hdr, startBytesRead
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
_boxHeader, _dstrm, _module, _parentBox, _raf, _repInfo, bytesLeft, filePos, hasBoxes
 
Constructor Summary
DefaultBox(java.io.RandomAccessFile raf)
          Constructor.
DefaultBox(java.io.RandomAccessFile raf, BoxHolder parent)
          Constructor with superbox.
 
Method Summary
 boolean readBox()
          Reads the box, putting appropriate information in the RepInfo object.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
addAssociation, boxMaker, emptyBox, finalizeBytesRead, getBytesRead, getLength, getSelfPropDesc, getSelfPropName, init, initBytesRead, makeAssocProperty, selfDescProperty, setBoxHeader, setDataInputStream, setModule, setRandomAccessFile, setRepInfo, skipBox, wrongBoxContext, wrongBoxSize
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
getFilePos, hasNext, next, remove, superboxOverrun, superboxUnderrun
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

DefaultBox

public DefaultBox(java.io.RandomAccessFile raf)
Constructor.


DefaultBox

public DefaultBox(java.io.RandomAccessFile raf,
                  BoxHolder parent)
Constructor with superbox.

Method Detail

readBox

public boolean readBox()
                throws java.io.IOException
Description copied from class: JP2Box
Reads the box, putting appropriate information in the RepInfo object. setModule, setBoxHeader, setRepInfo and setDataInputStream must be called before readBox is called. Thus, the header of the box must already have been read. readBox must completely consume the box, so that the next byte to be read by the DataInputStream is the FF byte of the next Box. The number of bytes read must be placed in _bytesRead.

Specified by:
readBox in class JP2Box
Throws:
java.io.IOException


jhove/doc/edu/harvard/hul/ois/jhove/module/jpeg2000/DefaultMarkerSegment.html0000644000707400001440000004266411510702355026213 0ustar garyusers DefaultMarkerSegment (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.jpeg2000
Class DefaultMarkerSegment

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.jpeg2000.MarkerSegment
      extended by edu.harvard.hul.ois.jhove.module.jpeg2000.DefaultMarkerSegment

public class DefaultMarkerSegment
extends MarkerSegment

This class is used to handle any unrecognized or unimplemented marker segment in a codestream.

Author:
Gary McGath To change the template for this generated type comment go to Window>Preferences>Java>Code Generation>Code and Comments

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.MarkerSegment
_ccs, _cs, _dstream, _module, _repInfo, COC, COD, COM, CRG, EOC, EPH, PLM, PLT, POC, PPM, PPT, QCC, QCD, RGN, SIZ, SOC, SOD, SOP, SOT, TLM
 
Constructor Summary
DefaultMarkerSegment()
           
 
Method Summary
protected  boolean process(int bytesToEat)
          Processes the marker segment.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.MarkerSegment
getMainOrTile, isMarker, markerSegmentMaker, nCompBytes, readMarkLen, setCodestream, setContCodestream, setDataInputStream, setModule, setRepInfo
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

DefaultMarkerSegment

public DefaultMarkerSegment()
Method Detail

process

protected boolean process(int bytesToEat)
                   throws java.io.IOException
Processes the marker segment. The DataInputStream will be at the point of having read the marker code. The process method must consume exactly the number of bytes remaining in the marker segment; for a marker, this number will always be 0.

Specified by:
process in class MarkerSegment
Parameters:
bytesToEat - The number of bytes that must be consumed. For a Marker, this number will always be 0. If it is 0 for a MarkerSegment, the number of bytes to consume is unknown.
Returns:
true if segment is well-formed, false otherwise.
Throws:
java.io.IOException


jhove/doc/edu/harvard/hul/ois/jhove/module/jpeg2000/DesiredReproBox.html0000644000707400001440000005126011510702355025172 0ustar garyusers DesiredReproBox (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.jpeg2000
Class DesiredReproBox

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
      extended by edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
          extended by edu.harvard.hul.ois.jhove.module.jpeg2000.DesiredReproBox
All Implemented Interfaces:
java.util.Iterator

public class DesiredReproBox
extends JP2Box

Desired Reproductions Box (JPX). See ISO/IEC FCD15444-2: 2000, L.9.15

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
_bytesRead, associations, DESCRIPTION_NAME, noJP2Hdr, startBytesRead
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
_boxHeader, _dstrm, _module, _parentBox, _raf, _repInfo, bytesLeft, filePos, hasBoxes
 
Constructor Summary
DesiredReproBox(java.io.RandomAccessFile raf, BoxHolder parent)
          Constructor with superbox.
 
Method Summary
protected  java.lang.String getSelfPropName()
          Returns the name of the Box.
 boolean readBox()
          Reads the box, putting appropriate information in the RepInfo object.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
addAssociation, boxMaker, emptyBox, finalizeBytesRead, getBytesRead, getLength, getSelfPropDesc, init, initBytesRead, makeAssocProperty, selfDescProperty, setBoxHeader, setDataInputStream, setModule, setRandomAccessFile, setRepInfo, skipBox, wrongBoxContext, wrongBoxSize
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
getFilePos, hasNext, next, remove, superboxOverrun, superboxUnderrun
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

DesiredReproBox

public DesiredReproBox(java.io.RandomAccessFile raf,
                       BoxHolder parent)
Constructor with superbox.

Parameters:
parent - parent superbox of this box
Method Detail

readBox

public boolean readBox()
                throws java.io.IOException
Reads the box, putting appropriate information in the RepInfo object. setModule, setBoxHeader, setRepInfo and setDataInputStream must be called before readBox is called. readBox must completely consume the box, so that the next byte to be read by the DataInputStream is the FF byte of the next Box.

Specified by:
readBox in class JP2Box
Throws:
java.io.IOException

getSelfPropName

protected java.lang.String getSelfPropName()
Returns the name of the Box.

Overrides:
getSelfPropName in class JP2Box


jhove/doc/edu/harvard/hul/ois/jhove/module/jpeg2000/DigSignatureBox.html0000644000707400001440000005131511510702355025171 0ustar garyusers DigSignatureBox (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.jpeg2000
Class DigSignatureBox

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
      extended by edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
          extended by edu.harvard.hul.ois.jhove.module.jpeg2000.DigSignatureBox
All Implemented Interfaces:
java.util.Iterator

public class DigSignatureBox
extends JP2Box

Digital Signature Box (JPX). See ISO/IEC FCD15444-2: 2000, L.9.17 Only the MD5 and SHA-1 algorithms are supported.

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
_bytesRead, associations, DESCRIPTION_NAME, noJP2Hdr, startBytesRead
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
_boxHeader, _dstrm, _module, _parentBox, _raf, _repInfo, bytesLeft, filePos, hasBoxes
 
Constructor Summary
DigSignatureBox(java.io.RandomAccessFile raf, BoxHolder parent)
          Constructor with superbox.
 
Method Summary
protected  java.lang.String getSelfPropName()
          Returns the name of the Box.
 boolean readBox()
          Reads the box, putting appropriate information in the RepInfo object.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
addAssociation, boxMaker, emptyBox, finalizeBytesRead, getBytesRead, getLength, getSelfPropDesc, init, initBytesRead, makeAssocProperty, selfDescProperty, setBoxHeader, setDataInputStream, setModule, setRandomAccessFile, setRepInfo, skipBox, wrongBoxContext, wrongBoxSize
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
getFilePos, hasNext, next, remove, superboxOverrun, superboxUnderrun
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

DigSignatureBox

public DigSignatureBox(java.io.RandomAccessFile raf,
                       BoxHolder parent)
Constructor with superbox.

Parameters:
parent - parent superbox of this box
Method Detail

readBox

public boolean readBox()
                throws java.io.IOException
Reads the box, putting appropriate information in the RepInfo object. setModule, setBoxHeader, setRepInfo and setDataInputStream must be called before readBox is called. readBox must completely consume the box, so that the next byte to be read by the DataInputStream is the FF byte of the next Box.

Specified by:
readBox in class JP2Box
Throws:
java.io.IOException

getSelfPropName

protected java.lang.String getSelfPropName()
Returns the name of the Box.

Overrides:
getSelfPropName in class JP2Box


jhove/doc/edu/harvard/hul/ois/jhove/module/jpeg2000/FileTypeBox.html0000644000707400001440000005224111510702355024324 0ustar garyusers FileTypeBox (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.jpeg2000
Class FileTypeBox

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
      extended by edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
          extended by edu.harvard.hul.ois.jhove.module.jpeg2000.FileTypeBox
All Implemented Interfaces:
java.util.Iterator

public class FileTypeBox
extends JP2Box

File Type Box. See I.5.2 in ISO/IEC 15444-1:2000 A File Type box can occur only as the first thing after the Signature Box, so this will be invoked only directly from the Module.

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
_bytesRead, associations, DESCRIPTION_NAME, noJP2Hdr, startBytesRead
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
_boxHeader, _dstrm, _module, _parentBox, _raf, _repInfo, bytesLeft, filePos, hasBoxes
 
Constructor Summary
FileTypeBox(java.io.RandomAccessFile raf)
          Constructor.
FileTypeBox(java.io.RandomAccessFile raf, JP2Box parent)
          The constructor with superbox is meaningless.
 
Method Summary
protected  java.lang.String getSelfPropName()
          Returns the name of the Box.
 boolean readBox()
          Reads the box, putting appropriate information in the RepInfo object.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
addAssociation, boxMaker, emptyBox, finalizeBytesRead, getBytesRead, getLength, getSelfPropDesc, init, initBytesRead, makeAssocProperty, selfDescProperty, setBoxHeader, setDataInputStream, setModule, setRandomAccessFile, setRepInfo, skipBox, wrongBoxContext, wrongBoxSize
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
getFilePos, hasNext, next, remove, superboxOverrun, superboxUnderrun
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

FileTypeBox

public FileTypeBox(java.io.RandomAccessFile raf)
Constructor.


FileTypeBox

public FileTypeBox(java.io.RandomAccessFile raf,
                   JP2Box parent)
The constructor with superbox is meaningless.

Method Detail

readBox

public boolean readBox()
                throws java.io.IOException
Reads the box, putting appropriate information in the RepInfo object. setModule, setBoxHeader, setRepInfo and setDataInputStream must be called before readBox is called. readBox must completely consume the box, so that the next byte to be read by the DataInputStream is the FF byte of the next Box.

Specified by:
readBox in class JP2Box
Throws:
java.io.IOException

getSelfPropName

protected java.lang.String getSelfPropName()
Returns the name of the Box.

Overrides:
getSelfPropName in class JP2Box


jhove/doc/edu/harvard/hul/ois/jhove/module/jpeg2000/FragmentInputStream.html0000644000707400001440000003065211510702355026073 0ustar garyusers FragmentInputStream (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.jpeg2000
Class FragmentInputStream

java.lang.Object
  extended by java.io.InputStream
      extended by edu.harvard.hul.ois.jhove.module.jpeg2000.FragmentInputStream
All Implemented Interfaces:
java.io.Closeable

public class FragmentInputStream
extends java.io.InputStream

A FragmentInputStream provides an interface by which the scattered fragments of a Fragment List Box can be read as a single stream. Only fragments within the originating file are supported, not fragments in external files.

Author:
Gary McGath

Constructor Summary
FragmentInputStream(java.util.List fragments, java.io.RandomAccessFile raf)
           
FragmentInputStream(java.util.List fragments, java.io.RandomAccessFile raf, int bufSize)
           
 
Method Summary
 int read()
          Returns the next byte from the stream, buffering each fragment in turn until the last fragment is exhausted.
 
Methods inherited from class java.io.InputStream
available, close, mark, markSupported, read, read, reset, skip
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

FragmentInputStream

public FragmentInputStream(java.util.List fragments,
                           java.io.RandomAccessFile raf)
Parameters:
fragments - List of fragment entries. Each fragment entry is an array of two longs, with fragment[0] being the length and fragment[1] the offset.

FragmentInputStream

public FragmentInputStream(java.util.List fragments,
                           java.io.RandomAccessFile raf,
                           int bufSize)
Method Detail

read

public int read()
         throws java.io.IOException
Returns the next byte from the stream, buffering each fragment in turn until the last fragment is exhausted.

Specified by:
read in class java.io.InputStream
Returns:
The next byte of the stream, or -1 to indicate no more bytes are available.
Throws:
java.io.IOException


jhove/doc/edu/harvard/hul/ois/jhove/module/jpeg2000/FragmentListBox.html0000644000707400001440000005307211510702355025205 0ustar garyusers FragmentListBox (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.jpeg2000
Class FragmentListBox

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
      extended by edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
          extended by edu.harvard.hul.ois.jhove.module.jpeg2000.FragmentListBox
All Implemented Interfaces:
java.util.Iterator

public class FragmentListBox
extends JP2Box

Fragment List Box (JPX). Subbox of Fragment Table box or Cross-Reference box. See L.9.6.1 in ISO/IEC FCD15444-2:2000.

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
_bytesRead, associations, DESCRIPTION_NAME, noJP2Hdr, startBytesRead
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
_boxHeader, _dstrm, _module, _parentBox, _raf, _repInfo, bytesLeft, filePos, hasBoxes
 
Constructor Summary
FragmentListBox(java.io.RandomAccessFile raf, BoxHolder parent)
          Constructor with superbox.
 
Method Summary
protected  java.util.List getFragmentList()
          Returns the fragment list.
protected  java.lang.String getSelfPropName()
          Returns the name of the Box.
 boolean readBox()
          Reads the box, putting appropriate information in the RepInfo object.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
addAssociation, boxMaker, emptyBox, finalizeBytesRead, getBytesRead, getLength, getSelfPropDesc, init, initBytesRead, makeAssocProperty, selfDescProperty, setBoxHeader, setDataInputStream, setModule, setRandomAccessFile, setRepInfo, skipBox, wrongBoxContext, wrongBoxSize
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
getFilePos, hasNext, next, remove, superboxOverrun, superboxUnderrun
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

FragmentListBox

public FragmentListBox(java.io.RandomAccessFile raf,
                       BoxHolder parent)
Constructor with superbox.

Parameters:
parent - parent superbox of this box. The parent may be a FragmentTableBox or a CrossReferenceBox.
Method Detail

readBox

public boolean readBox()
                throws java.io.IOException
Reads the box, putting appropriate information in the RepInfo object. setModule, setBoxHeader, setRepInfo and setDataInputStream must be called before readBox is called. readBox must completely consume the box, so that the next byte to be read by the DataInputStream is the FF byte of the next Box.

Specified by:
readBox in class JP2Box
Throws:
java.io.IOException

getFragmentList

protected java.util.List getFragmentList()
Returns the fragment list. If there are external references to fragments, returns null; in this case, a warning message has been added to the RepInfo object.


getSelfPropName

protected java.lang.String getSelfPropName()
Returns the name of the Box.

Overrides:
getSelfPropName in class JP2Box


jhove/doc/edu/harvard/hul/ois/jhove/module/jpeg2000/FragmentTableBox.html0000644000707400001440000005131211510702355025314 0ustar garyusers FragmentTableBox (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.jpeg2000
Class FragmentTableBox

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
      extended by edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
          extended by edu.harvard.hul.ois.jhove.module.jpeg2000.FragmentTableBox
All Implemented Interfaces:
java.util.Iterator

public class FragmentTableBox
extends JP2Box

Fragment Table Box (JPX). See L.9.6 in ISO/IEC FCD15444-2:2000.

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
_bytesRead, associations, DESCRIPTION_NAME, noJP2Hdr, startBytesRead
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
_boxHeader, _dstrm, _module, _parentBox, _raf, _repInfo, bytesLeft, filePos, hasBoxes
 
Constructor Summary
FragmentTableBox(java.io.RandomAccessFile raf, BoxHolder parent)
          Constructor with superbox.
 
Method Summary
protected  java.lang.String getSelfPropName()
          Returns the name of the Box.
 boolean readBox()
          Reads the box, putting appropriate information in the RepInfo object.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
addAssociation, boxMaker, emptyBox, finalizeBytesRead, getBytesRead, getLength, getSelfPropDesc, init, initBytesRead, makeAssocProperty, selfDescProperty, setBoxHeader, setDataInputStream, setModule, setRandomAccessFile, setRepInfo, skipBox, wrongBoxContext, wrongBoxSize
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
getFilePos, hasNext, next, remove, superboxOverrun, superboxUnderrun
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

FragmentTableBox

public FragmentTableBox(java.io.RandomAccessFile raf,
                        BoxHolder parent)
Constructor with superbox.

Parameters:
parent - parent superbox of this box or TopLevelBoxHolder
Method Detail

readBox

public boolean readBox()
                throws java.io.IOException
Reads the box, putting appropriate information in the RepInfo object. setModule, setBoxHeader, setRepInfo and setDataInputStream must be called before readBox is called. readBox must completely consume the box, so that the next byte to be read by the DataInputStream is the FF byte of the next Box.

Specified by:
readBox in class JP2Box
Throws:
java.io.IOException

getSelfPropName

protected java.lang.String getSelfPropName()
Returns the name of the Box.

Overrides:
getSelfPropName in class JP2Box


jhove/doc/edu/harvard/hul/ois/jhove/module/jpeg2000/GTSOBox.html0000644000707400001440000004734711510702355023372 0ustar garyusers GTSOBox (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.jpeg2000
Class GTSOBox

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
      extended by edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
          extended by edu.harvard.hul.ois.jhove.module.jpeg2000.GTSOBox
All Implemented Interfaces:
java.util.Iterator

public class GTSOBox
extends JP2Box

Graphics Technology Standard Output Box. This box holds an ICC color profile. See ISO/IEC FCD15444-2: 2000, L.9.15.1

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
_bytesRead, associations, DESCRIPTION_NAME, noJP2Hdr, startBytesRead
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
_boxHeader, _dstrm, _module, _parentBox, _raf, _repInfo, bytesLeft, filePos, hasBoxes
 
Constructor Summary
GTSOBox(java.io.RandomAccessFile raf, BoxHolder parent)
          Constructor with superbox.
 
Method Summary
 boolean readBox()
          Reads the box, putting appropriate information in the RepInfo object.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
addAssociation, boxMaker, emptyBox, finalizeBytesRead, getBytesRead, getLength, getSelfPropDesc, getSelfPropName, init, initBytesRead, makeAssocProperty, selfDescProperty, setBoxHeader, setDataInputStream, setModule, setRandomAccessFile, setRepInfo, skipBox, wrongBoxContext, wrongBoxSize
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
getFilePos, hasNext, next, remove, superboxOverrun, superboxUnderrun
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

GTSOBox

public GTSOBox(java.io.RandomAccessFile raf,
               BoxHolder parent)
Constructor with superbox.

Parameters:
parent - parent superbox of this box
Method Detail

readBox

public boolean readBox()
                throws java.io.IOException
Reads the box, putting appropriate information in the RepInfo object. setModule, setBoxHeader, setRepInfo and setDataInputStream must be called before readBox is called. readBox must completely consume the box, so that the next byte to be read by the DataInputStream is the FF byte of the next Box.

Specified by:
readBox in class JP2Box
Throws:
java.io.IOException


jhove/doc/edu/harvard/hul/ois/jhove/module/jpeg2000/IPRBox.html0000644000707400001440000005114011510702355023232 0ustar garyusers IPRBox (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.jpeg2000
Class IPRBox

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
      extended by edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
          extended by edu.harvard.hul.ois.jhove.module.jpeg2000.IPRBox
All Implemented Interfaces:
java.util.Iterator

public class IPRBox
extends JP2Box

Intellectual Property Rights box. See I.6 in ISO/IEC 15444-1:2000 The spec says nothing about the content of the IPR box, so the generated Property reports it as a sequence of bytes.

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
_bytesRead, associations, DESCRIPTION_NAME, noJP2Hdr, startBytesRead
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
_boxHeader, _dstrm, _module, _parentBox, _raf, _repInfo, bytesLeft, filePos, hasBoxes
 
Constructor Summary
IPRBox(java.io.RandomAccessFile raf, BoxHolder parent)
          Constructor with superbox.
 
Method Summary
protected  java.lang.String getSelfPropName()
          Returns the name of the Box.
 boolean readBox()
          Reads the box, putting appropriate information in the RepInfo object.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
addAssociation, boxMaker, emptyBox, finalizeBytesRead, getBytesRead, getLength, getSelfPropDesc, init, initBytesRead, makeAssocProperty, selfDescProperty, setBoxHeader, setDataInputStream, setModule, setRandomAccessFile, setRepInfo, skipBox, wrongBoxContext, wrongBoxSize
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
getFilePos, hasNext, next, remove, superboxOverrun, superboxUnderrun
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

IPRBox

public IPRBox(java.io.RandomAccessFile raf,
              BoxHolder parent)
Constructor with superbox.

Parameters:
parent - parent superbox of this box
Method Detail

readBox

public boolean readBox()
                throws java.io.IOException
Reads the box, putting appropriate information in the RepInfo object. setModule, setBoxHeader, setRepInfo and setDataInputStream must be called before readBox is called. readBox must completely consume the box, so that the next byte to be read by the DataInputStream is the FF byte of the next Box.

Specified by:
readBox in class JP2Box
Throws:
java.io.IOException

getSelfPropName

protected java.lang.String getSelfPropName()
Returns the name of the Box.

Overrides:
getSelfPropName in class JP2Box


jhove/doc/edu/harvard/hul/ois/jhove/module/jpeg2000/ImageHeaderBox.html0000644000707400001440000005116511510702355024742 0ustar garyusers ImageHeaderBox (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.jpeg2000
Class ImageHeaderBox

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
      extended by edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
          extended by edu.harvard.hul.ois.jhove.module.jpeg2000.ImageHeaderBox
All Implemented Interfaces:
java.util.Iterator

public class ImageHeaderBox
extends JP2Box

Image Header Box. See I.5.3.1 in ISO/IEC 15444-1:2000

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
_bytesRead, associations, DESCRIPTION_NAME, noJP2Hdr, startBytesRead
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
_boxHeader, _dstrm, _module, _parentBox, _raf, _repInfo, bytesLeft, filePos, hasBoxes
 
Constructor Summary
ImageHeaderBox(java.io.RandomAccessFile raf, BoxHolder parent)
          Constructor with superbox.
 
Method Summary
protected  java.lang.String getSelfPropName()
          Returns the name of the Box.
 boolean readBox()
          Reads the box, putting appropriate information in the RepInfo object.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
addAssociation, boxMaker, emptyBox, finalizeBytesRead, getBytesRead, getLength, getSelfPropDesc, init, initBytesRead, makeAssocProperty, selfDescProperty, setBoxHeader, setDataInputStream, setModule, setRandomAccessFile, setRepInfo, skipBox, wrongBoxContext, wrongBoxSize
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
getFilePos, hasNext, next, remove, superboxOverrun, superboxUnderrun
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ImageHeaderBox

public ImageHeaderBox(java.io.RandomAccessFile raf,
                      BoxHolder parent)
Constructor with superbox.

Parameters:
parent - parent superbox of this box
Method Detail

readBox

public boolean readBox()
                throws java.io.IOException
Reads the box, putting appropriate information in the RepInfo object. setModule, setBoxHeader, setRepInfo and setDataInputStream must be called before readBox is called. readBox must completely consume the box, so that the next byte to be read by the DataInputStream is the FF byte of the next Box.

Specified by:
readBox in class JP2Box
Throws:
java.io.IOException

getSelfPropName

protected java.lang.String getSelfPropName()
Returns the name of the Box.

Overrides:
getSelfPropName in class JP2Box


jhove/doc/edu/harvard/hul/ois/jhove/module/jpeg2000/InstructionSetBox.html0000644000707400001440000004752111510702355025605 0ustar garyusers InstructionSetBox (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.jpeg2000
Class InstructionSetBox

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
      extended by edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
          extended by edu.harvard.hul.ois.jhove.module.jpeg2000.InstructionSetBox
All Implemented Interfaces:
java.util.Iterator

public class InstructionSetBox
extends JP2Box

Instruction Set Box (JPX). See ISO/IEC FCD15444-2: 2000, L.9.10.2

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
_bytesRead, associations, DESCRIPTION_NAME, noJP2Hdr, startBytesRead
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
_boxHeader, _dstrm, _module, _parentBox, _raf, _repInfo, bytesLeft, filePos, hasBoxes
 
Constructor Summary
InstructionSetBox(java.io.RandomAccessFile raf, BoxHolder parent)
          Constructor with superbox.
 
Method Summary
 boolean readBox()
          Reads the box, putting appropriate information in the RepInfo object.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
addAssociation, boxMaker, emptyBox, finalizeBytesRead, getBytesRead, getLength, getSelfPropDesc, getSelfPropName, init, initBytesRead, makeAssocProperty, selfDescProperty, setBoxHeader, setDataInputStream, setModule, setRandomAccessFile, setRepInfo, skipBox, wrongBoxContext, wrongBoxSize
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
getFilePos, hasNext, next, remove, superboxOverrun, superboxUnderrun
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

InstructionSetBox

public InstructionSetBox(java.io.RandomAccessFile raf,
                         BoxHolder parent)
Constructor with superbox.

Parameters:
parent - parent superbox of this box
Method Detail

readBox

public boolean readBox()
                throws java.io.IOException
Reads the box, putting appropriate information in the RepInfo object. setModule, setBoxHeader, setRepInfo and setDataInputStream must be called before readBox is called. readBox must completely consume the box, so that the next byte to be read by the DataInputStream is the FF byte of the next Box.

Specified by:
readBox in class JP2Box
Throws:
java.io.IOException


jhove/doc/edu/harvard/hul/ois/jhove/module/jpeg2000/JP2Box.html0000644000707400001440000012542511510702355023203 0ustar garyusers JP2Box (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.jpeg2000
Class JP2Box

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
      extended by edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
All Implemented Interfaces:
java.util.Iterator
Direct Known Subclasses:
AssociationBox, BinaryFilterBox, BPCCBox, CaptureResolutionBox, ChannelDefBox, CodestreamHeaderBox, CodestreamRegBox, ColorGroupBox, ColorSpecBox, ComponentMapBox, CompOptionsBox, CompositionBox, ComposLayerHdrBox, ContCodestreamBox, CrossRefBox, DataEntryURLBox, DDResolutionBox, DefaultBox, DesiredReproBox, DigSignatureBox, FileTypeBox, FragmentListBox, FragmentTableBox, GTSOBox, ImageHeaderBox, InstructionSetBox, IPRBox, JP2HeaderBox, LabelBox, NumberListBox, OpacityBox, PaletteBox, ReaderRequirementsBox, ResolutionBox, ROIBox, UUIDBox, UUIDInfoBox, UUIDListBox, XMLBox

public abstract class JP2Box
extends BoxHolder

Superclass for JPEG 2000 boxes.

Author:
Gary McGath

Field Summary
protected  long _bytesRead
           
protected  java.util.List associations
           
protected static java.lang.String DESCRIPTION_NAME
           
protected static java.lang.String noJP2Hdr
           
protected  long startBytesRead
           
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
_boxHeader, _dstrm, _module, _parentBox, _raf, _repInfo, bytesLeft, filePos, hasBoxes
 
Constructor Summary
JP2Box(java.io.RandomAccessFile raf)
          Constructor.
JP2Box(java.io.RandomAccessFile raf, BoxHolder parent)
          Constructor for a box which is found within a superbox.
 
Method Summary
protected  void addAssociation(Property p)
           
static JP2Box boxMaker(java.lang.String hType, BoxHolder parent)
          Static factory method for generating an object of the appropriate subclass of MarkerSegment, based on the box type.
protected  void emptyBox()
          Utility error reporting function for a box which is expected to have subboxes, but doesn't.
protected  void finalizeBytesRead()
           
 int getBytesRead()
           
protected  long getLength()
          Returns the length of the box, including header, based on the information in the header.
protected  Property getSelfPropDesc()
          Returns a Property which describes the box.
protected  java.lang.String getSelfPropName()
          Returns the name of the Box.
protected  void init(BoxHolder parent)
           
protected  void initBytesRead()
           
protected  Property makeAssocProperty()
          Make a Property from the association list.
abstract  boolean readBox()
          Reads the box, putting appropriate information in the RepInfo object.
protected  Property selfDescProperty()
          Returns a Property which describes the Box, for use by Association boxes and perhaps others.
 void setBoxHeader(BoxHeader hdr)
          Sets the BoxHeader from which this Box was obtained.
 void setDataInputStream(java.io.DataInputStream dstrm)
          Assigns the DataInputStream from which the box is being read.
 void setModule(Jpeg2000Module module)
          Sets the module under which the Box is being read.
 void setRandomAccessFile(java.io.RandomAccessFile raf)
          Assigns the RandomAccessFile from which the box is being read.
 void setRepInfo(RepInfo info)
          Assigns a RepInfo object, so that subclasses of JP2Box can add Properties and Messages.
 void skipBox()
          Skips over the box.
protected  void wrongBoxContext()
          Utility error reporting function for box in a context (superbox or lack thereof) which is not permitted.
protected  void wrongBoxSize()
          Utility error reporting function for incorrect box length.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
getFilePos, hasNext, next, remove, superboxOverrun, superboxUnderrun
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

startBytesRead

protected long startBytesRead

_bytesRead

protected long _bytesRead

associations

protected java.util.List associations

noJP2Hdr

protected static final java.lang.String noJP2Hdr
See Also:
Constant Field Values

DESCRIPTION_NAME

protected static final java.lang.String DESCRIPTION_NAME
See Also:
Constant Field Values
Constructor Detail

JP2Box

public JP2Box(java.io.RandomAccessFile raf)
Constructor. Has no arguments, so that invoking lots of different subclasses is relatively simple. setModule, setBoxHeader, setRepInfo, and setDataInputStream should be called immediately after the constructor.


JP2Box

public JP2Box(java.io.RandomAccessFile raf,
              BoxHolder parent)
Constructor for a box which is found within a superbox.

Parameters:
parent - parent superbox of this box
Method Detail

init

protected void init(BoxHolder parent)

setModule

public void setModule(Jpeg2000Module module)
Sets the module under which the Box is being read.


setBoxHeader

public void setBoxHeader(BoxHeader hdr)
Sets the BoxHeader from which this Box was obtained.


setRepInfo

public void setRepInfo(RepInfo info)
Assigns a RepInfo object, so that subclasses of JP2Box can add Properties and Messages.


setDataInputStream

public void setDataInputStream(java.io.DataInputStream dstrm)
Assigns the DataInputStream from which the box is being read.


setRandomAccessFile

public void setRandomAccessFile(java.io.RandomAccessFile raf)
Assigns the RandomAccessFile from which the box is being read.


boxMaker

public static JP2Box boxMaker(java.lang.String hType,
                              BoxHolder parent)
Static factory method for generating an object of the appropriate subclass of MarkerSegment, based on the box type. This is for use in top-level reading of boxes, not subboxes. Provision is made for calling this with a parent box, but the set of boxes dispatched on is the set used at top level. Certain box types have magical characteristics and have to be checked by the BoxHolder. These include BinaryFilterBox and CrossReferenceBox.

Parameters:
hType - 4-character string indicating the box type
parent - parent BoxHolder

initBytesRead

protected void initBytesRead()

finalizeBytesRead

protected void finalizeBytesRead()

readBox

public abstract boolean readBox()
                         throws java.io.IOException
Reads the box, putting appropriate information in the RepInfo object. setModule, setBoxHeader, setRepInfo and setDataInputStream must be called before readBox is called. Thus, the header of the box must already have been read. readBox must completely consume the box, so that the next byte to be read by the DataInputStream is the FF byte of the next Box. The number of bytes read must be placed in _bytesRead.

Throws:
java.io.IOException

getBytesRead

public int getBytesRead()

skipBox

public void skipBox()
             throws java.io.IOException
Skips over the box. Can be called when the box is legal but meaningless in the current context.

Throws:
java.io.IOException

addAssociation

protected void addAssociation(Property p)

wrongBoxSize

protected void wrongBoxSize()
Utility error reporting function for incorrect box length. Sets the RepInfo's wellFormed flag to false.


wrongBoxContext

protected void wrongBoxContext()
Utility error reporting function for box in a context (superbox or lack thereof) which is not permitted. Sets the RepInfo's wellFormed flag to false.


emptyBox

protected void emptyBox()
Utility error reporting function for a box which is expected to have subboxes, but doesn't.


makeAssocProperty

protected Property makeAssocProperty()
Make a Property from the association list. Returns null if the list is empty.


selfDescProperty

protected Property selfDescProperty()
Returns a Property which describes the Box, for use by Association boxes and perhaps others. Most subclasses will only have to override getSelfPropName and getSelfPropDesc. A subclass that shouldn't be added to the Association box's property can override this to return null.


getSelfPropName

protected java.lang.String getSelfPropName()
Returns the name of the Box. All Boxes should override this.

Overrides:
getSelfPropName in class BoxHolder

getSelfPropDesc

protected Property getSelfPropDesc()
Returns a Property which describes the box. This is used as a subproperty of the Property returned by selfDescProperty. Properties that we don't care to describe don't have to override this. This class should return either null or a property with DESCRIPTION_NAME for its name.


getLength

protected long getLength()
Returns the length of the box, including header, based on the information in the header.



jhove/doc/edu/harvard/hul/ois/jhove/module/jpeg2000/JP2HeaderBox.html0000644000707400001440000005101211510702355024302 0ustar garyusers JP2HeaderBox (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.jpeg2000
Class JP2HeaderBox

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
      extended by edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
          extended by edu.harvard.hul.ois.jhove.module.jpeg2000.JP2HeaderBox
All Implemented Interfaces:
java.util.Iterator

public class JP2HeaderBox
extends JP2Box

JP2 Header Box. See I.5.3 in ISO/IEC 15444-1:2000 and ISO/IEC FCD15444-2: 2000, L.9.2

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
_bytesRead, associations, DESCRIPTION_NAME, noJP2Hdr, startBytesRead
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
_boxHeader, _dstrm, _module, _parentBox, _raf, _repInfo, bytesLeft, filePos, hasBoxes
 
Constructor Summary
JP2HeaderBox(java.io.RandomAccessFile raf, BoxHolder parent)
          Constructor with superbox.
 
Method Summary
protected  java.lang.String getSelfPropName()
          Returns the name of the Box.
 boolean readBox()
          Reads the box, putting appropriate information in the RepInfo object.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
addAssociation, boxMaker, emptyBox, finalizeBytesRead, getBytesRead, getLength, getSelfPropDesc, init, initBytesRead, makeAssocProperty, selfDescProperty, setBoxHeader, setDataInputStream, setModule, setRandomAccessFile, setRepInfo, skipBox, wrongBoxContext, wrongBoxSize
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
getFilePos, hasNext, next, remove, superboxOverrun, superboxUnderrun
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

JP2HeaderBox

public JP2HeaderBox(java.io.RandomAccessFile raf,
                    BoxHolder parent)
Constructor with superbox.

Method Detail

readBox

public boolean readBox()
                throws java.io.IOException
Reads the box, putting appropriate information in the RepInfo object. setModule, setBoxHeader, setRepInfo and setDataInputStream must be called before readBox is called. readBox must completely consume the box, so that the next byte to be read by the DataInputStream is the FF byte of the next Box.

Specified by:
readBox in class JP2Box
Throws:
java.io.IOException

getSelfPropName

protected java.lang.String getSelfPropName()
Returns the name of the Box.

Overrides:
getSelfPropName in class JP2Box


jhove/doc/edu/harvard/hul/ois/jhove/module/jpeg2000/JP2Strings.html0000644000707400001440000004207411510702355024102 0ustar garyusers JP2Strings (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.jpeg2000
Class JP2Strings

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Strings

public final class JP2Strings
extends java.lang.Object

String constants for JPEG 2000 module. This module contains no code, and all data are static.

Author:
Gary McGath

Field Summary
static int[] approxIdx
          Indexes for approxStr.
static java.lang.String[] approxStr
          Strings for the approx field of the color specification box, indexed by approxIdx.
static int[] ctypIdx
          Indexes for ctypStr.
static java.lang.String[] ctypStr
          Strings for the channel type field of the channel definition box, indexed by ctypIdx.
static java.lang.String[] digitalSigPtrTypeStr
          Strings for pointer types in the Digital Signature Box.
static java.lang.String[] digitalSigTypeStr
          Strings for types in the Digital Signature Box.
static java.lang.String[] enumCSStr
          Strings for values of enumCS in the color specification box.
static java.lang.String[] inCodestreamStr
          Strings for the "region of interest present in codestream" field of the ROI box.
static java.lang.String[] methodStr
          Strings for method values in the color specification box.
static java.lang.String[] mtypStr
          Strings for the MTYP field of the Component Mapping box.
static java.lang.String[] numberListTypeStr
          Strings for the number type value in the Number List box.
static java.lang.String[] opacityTypeStr
          Strings for the opacity type in the Opacity Box.
static java.lang.String[] roiTypeStr
          Strings for the region type field of the ROI box.
 
Method Summary
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

methodStr

public static final java.lang.String[] methodStr
Strings for method values in the color specification box.


enumCSStr

public static final java.lang.String[] enumCSStr
Strings for values of enumCS in the color specification box. Only values 16-17 are recognized by JP2.


mtypStr

public static final java.lang.String[] mtypStr
Strings for the MTYP field of the Component Mapping box.


opacityTypeStr

public static final java.lang.String[] opacityTypeStr
Strings for the opacity type in the Opacity Box.


numberListTypeStr

public static final java.lang.String[] numberListTypeStr
Strings for the number type value in the Number List box. Types must be normalized by shifting the high byte right 24 bits before indexing.


digitalSigTypeStr

public static final java.lang.String[] digitalSigTypeStr
Strings for types in the Digital Signature Box.


digitalSigPtrTypeStr

public static final java.lang.String[] digitalSigPtrTypeStr
Strings for pointer types in the Digital Signature Box.


inCodestreamStr

public static final java.lang.String[] inCodestreamStr
Strings for the "region of interest present in codestream" field of the ROI box.


roiTypeStr

public static final java.lang.String[] roiTypeStr
Strings for the region type field of the ROI box.


ctypStr

public static final java.lang.String[] ctypStr
Strings for the channel type field of the channel definition box, indexed by ctypIdx.


ctypIdx

public static final int[] ctypIdx
Indexes for ctypStr.


approxStr

public static final java.lang.String[] approxStr
Strings for the approx field of the color specification box, indexed by approxIdx. A zero value will be reported as an Integer property of 0.


approxIdx

public static final int[] approxIdx
Indexes for approxStr.



jhove/doc/edu/harvard/hul/ois/jhove/module/jpeg2000/LabelBox.html0000644000707400001440000005452111510702355023625 0ustar garyusers LabelBox (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.jpeg2000
Class LabelBox

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
      extended by edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
          extended by edu.harvard.hul.ois.jhove.module.jpeg2000.LabelBox
All Implemented Interfaces:
java.util.Iterator

public class LabelBox
extends JP2Box

Label box. A Label box does nothing in itself; it simply makes its label string available for its superbox. See ISO/IEC FCD15444-2: 2000, L.9.13

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
_bytesRead, associations, DESCRIPTION_NAME, noJP2Hdr, startBytesRead
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
_boxHeader, _dstrm, _module, _parentBox, _raf, _repInfo, bytesLeft, filePos, hasBoxes
 
Constructor Summary
LabelBox(java.io.RandomAccessFile raf, BoxHolder parent)
          Constructor with superbox.
 
Method Summary
protected  java.lang.String getLabel()
          Returns the label string.
protected  Property getSelfPropDesc()
          Returns a Property which describes the Box, for use by Association boxes and perhaps others.
protected  java.lang.String getSelfPropName()
          Returns the name of the Box.
 boolean readBox()
          Reads the box, saving the label text.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
addAssociation, boxMaker, emptyBox, finalizeBytesRead, getBytesRead, getLength, init, initBytesRead, makeAssocProperty, selfDescProperty, setBoxHeader, setDataInputStream, setModule, setRandomAccessFile, setRepInfo, skipBox, wrongBoxContext, wrongBoxSize
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
getFilePos, hasNext, next, remove, superboxOverrun, superboxUnderrun
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

LabelBox

public LabelBox(java.io.RandomAccessFile raf,
                BoxHolder parent)
Constructor with superbox.

Parameters:
parent - parent superbox of this box
Method Detail

readBox

public boolean readBox()
                throws java.io.IOException
Reads the box, saving the label text. setModule, setBoxHeader, setRepInfo and setDataInputStream must be called before readBox is called. readBox must completely consume the box, so that the next byte to be read by the DataInputStream is the FF byte of the next Box.

Specified by:
readBox in class JP2Box
Throws:
java.io.IOException

getLabel

protected java.lang.String getLabel()
Returns the label string. Valid only after readBox() has been called.


getSelfPropDesc

protected Property getSelfPropDesc()
Returns a Property which describes the Box, for use by Association boxes and perhaps others.

Overrides:
getSelfPropDesc in class JP2Box

getSelfPropName

protected java.lang.String getSelfPropName()
Returns the name of the Box.

Overrides:
getSelfPropName in class JP2Box


jhove/doc/edu/harvard/hul/ois/jhove/module/jpeg2000/MainOrTile.html0000644000707400001440000005522311510702355024140 0ustar garyusers MainOrTile (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.jpeg2000
Class MainOrTile

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.jpeg2000.MainOrTile
Direct Known Subclasses:
Codestream, Tile

public abstract class MainOrTile
extends java.lang.Object

Abstract superclass for Codestream and Tile classes. Many marker segments can apply either to the codestream as a whole or to specific tiles; this class merges those features in a single place.

Author:
Gary McGath

Field Summary
protected  Property _codProperty
          Coding style default property
protected  java.util.List _comments
          Comments -- list of properties
protected  Property[] _components
          Array of components.
protected  java.util.List _packetLengthList
           
protected  Property _pocProperty
          Progression order change property
protected  int[] _precSize
           
protected  Property _qcdProperty
          Quantization default property
protected static int NULL
           
 
Constructor Summary
MainOrTile()
           
 
Method Summary
 void addComment(Property comment)
          Adds a property to the comment list
 void addPacketLength(long len)
          Add a packet length to the list of packet lengths.
protected  int getNumComponents()
          Gets the number of components.
 void setCODProperty(Property prop)
          Sets the coding style default property.
 void setCompProperty(int idx, Property prop)
          Sets a property indexed by component.
 void setNumComponents(int nComp)
          Sets the number of components.
 void setPOCProperty(Property prop)
          Sets the progression order change property.
 void setQCDProperty(Property prop)
          Sets the quantization default property.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

NULL

protected static final int NULL
See Also:
Constant Field Values

_precSize

protected int[] _precSize

_components

protected Property[] _components
Array of components. This is created when the SIZ marker segment reports the number of components.


_codProperty

protected Property _codProperty
Coding style default property


_qcdProperty

protected Property _qcdProperty
Quantization default property


_pocProperty

protected Property _pocProperty
Progression order change property


_comments

protected java.util.List _comments
Comments -- list of properties


_packetLengthList

protected java.util.List _packetLengthList
Constructor Detail

MainOrTile

public MainOrTile()
Method Detail

setNumComponents

public void setNumComponents(int nComp)
Sets the number of components. As a side effect, creates the compoments array. This should be called from the SIZMarkerSegment class, and in a valid file will precede the setting of any components.


setCompProperty

public void setCompProperty(int idx,
                            Property prop)
Sets a property indexed by component.


getNumComponents

protected int getNumComponents()
Gets the number of components.


setCODProperty

public void setCODProperty(Property prop)
Sets the coding style default property.


setQCDProperty

public void setQCDProperty(Property prop)
Sets the quantization default property.


setPOCProperty

public void setPOCProperty(Property prop)
Sets the progression order change property.


addComment

public void addComment(Property comment)
Adds a property to the comment list


addPacketLength

public void addPacketLength(long len)
Add a packet length to the list of packet lengths.



jhove/doc/edu/harvard/hul/ois/jhove/module/jpeg2000/Marker.html0000644000707400001440000004363611510702355023363 0ustar garyusers Marker (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.jpeg2000
Class Marker

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.jpeg2000.MarkerSegment
      extended by edu.harvard.hul.ois.jhove.module.jpeg2000.Marker

public class Marker
extends MarkerSegment

This is a subclass of MarkerSegment for Markers. Markers are those elements of a codestream which have no parameters. It can be subclassed for specific Markers, or used directly to provide default behavior.

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.MarkerSegment
_ccs, _cs, _dstream, _module, _repInfo, COC, COD, COM, CRG, EOC, EPH, PLM, PLT, POC, PPM, PPT, QCC, QCD, RGN, SIZ, SOC, SOD, SOP, SOT, TLM
 
Constructor Summary
Marker()
           
 
Method Summary
protected  boolean process(int bytesToEat)
          Default processing.
protected  int readMarkLen()
          Overrides the superclass to return 0 without consuming any bytes from the DataInputStream.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.MarkerSegment
getMainOrTile, isMarker, markerSegmentMaker, nCompBytes, setCodestream, setContCodestream, setDataInputStream, setModule, setRepInfo
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

Marker

public Marker()
Method Detail

readMarkLen

protected int readMarkLen()
                   throws java.io.IOException
Overrides the superclass to return 0 without consuming any bytes from the DataInputStream.

Overrides:
readMarkLen in class MarkerSegment
Throws:
java.io.IOException

process

protected boolean process(int bytesToEat)
Default processing. Does nothing, and always returns true.

Specified by:
process in class MarkerSegment
Parameters:
bytesToEat - The number of bytes that must be consumed. For a Marker, this number will always be 0. If it is 0 for a MarkerSegment, the number of bytes to consume is unknown.
Returns:
true if segment is well-formed, false otherwise.


jhove/doc/edu/harvard/hul/ois/jhove/module/jpeg2000/MarkerSegment.html0000644000707400001440000012066711510702355024706 0ustar garyusers MarkerSegment (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.jpeg2000
Class MarkerSegment

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.jpeg2000.MarkerSegment
Direct Known Subclasses:
COCMarkerSegment, CODMarkerSegment, CommentMarkerSegment, CRGMarkerSegment, DefaultMarkerSegment, Marker, PLMMarkerSegment, PLTMarkerSegment, POCMarkerSegment, PPMMarkerSegment, PPTMarkerSegment, QCCMarkerSegment, QCDMarkerSegment, RGNMarkerSegment, SIZMarkerSegment, SOTMarkerSegment, TLMMarkerSegment

public abstract class MarkerSegment
extends java.lang.Object

Abstract superclass for marker segments.

Author:
Gary McGath

Field Summary
protected  ContCodestream _ccs
           
protected  Codestream _cs
           
protected  java.io.DataInputStream _dstream
           
protected  Jpeg2000Module _module
           
protected  RepInfo _repInfo
           
protected static int COC
           
protected static int COD
           
protected static int COM
           
protected static int CRG
           
protected static int EOC
           
protected static int EPH
           
protected static int PLM
           
protected static int PLT
           
protected static int POC
           
protected static int PPM
           
protected static int PPT
           
protected static int QCC
           
protected static int QCD
           
protected static int RGN
           
protected static int SIZ
           
protected static int SOC
           
protected static int SOD
           
protected static int SOP
           
protected static int SOT
           
protected static int TLM
           
 
Constructor Summary
MarkerSegment()
          Constructor.
 
Method Summary
protected  MainOrTile getMainOrTile()
          Returns the MainOrTile object which is currently applicable in the Contiguous Codestream.
 boolean isMarker()
          Returns true if this segment is a Marker.
protected static MarkerSegment markerSegmentMaker(int markerCode)
          Static factory method for generating an object of the appropriate subclass of MarkerSegment, based on the marker code.
protected  int nCompBytes()
          Determines size of fields indexed by number of components.
protected abstract  boolean process(int bytesToEat)
          Process the marker or marker segment.
protected  int readMarkLen()
          Reads and returns the length field of the marker segment.
 void setCodestream(Codestream cs)
          Sets the Codestream object being built.
 void setContCodestream(ContCodestream ccs)
          Sets the Continuous Codestream from which this marker was obtained.
 void setDataInputStream(java.io.DataInputStream dstream)
          Sets the DataInputStream over which this marker is being read.
 void setModule(Jpeg2000Module module)
          Sets the Module under which all this is happening.
 void setRepInfo(RepInfo repInfo)
          Sets the RepInfo into which messages may be placed.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

SOC

protected static final int SOC
See Also:
Constant Field Values

COD

protected static final int COD
See Also:
Constant Field Values

COC

protected static final int COC
See Also:
Constant Field Values

TLM

protected static final int TLM
See Also:
Constant Field Values

PLM

protected static final int PLM
See Also:
Constant Field Values

PLT

protected static final int PLT
See Also:
Constant Field Values

QCD

protected static final int QCD
See Also:
Constant Field Values

QCC

protected static final int QCC
See Also:
Constant Field Values

RGN

protected static final int RGN
See Also:
Constant Field Values

POC

protected static final int POC
See Also:
Constant Field Values

PPM

protected static final int PPM
See Also:
Constant Field Values

PPT

protected static final int PPT
See Also:
Constant Field Values

CRG

protected static final int CRG
See Also:
Constant Field Values

COM

protected static final int COM
See Also:
Constant Field Values

SOT

protected static final int SOT
See Also:
Constant Field Values

SOP

protected static final int SOP
See Also:
Constant Field Values

EPH

protected static final int EPH
See Also:
Constant Field Values

SOD

protected static final int SOD
See Also:
Constant Field Values

EOC

protected static final int EOC
See Also:
Constant Field Values

SIZ

protected static final int SIZ
See Also:
Constant Field Values

_ccs

protected ContCodestream _ccs

_cs

protected Codestream _cs

_module

protected Jpeg2000Module _module

_dstream

protected java.io.DataInputStream _dstream

_repInfo

protected RepInfo _repInfo
Constructor Detail

MarkerSegment

public MarkerSegment()
Constructor. After an instance of a MarkerSegment is created, the setter methods setContCodestream, setCodestream, setModule, and setDataInputStream must all be called as part of the setup before process is called.

Method Detail

setContCodestream

public void setContCodestream(ContCodestream ccs)
Sets the Continuous Codestream from which this marker was obtained.


setCodestream

public void setCodestream(Codestream cs)
Sets the Codestream object being built.


setModule

public void setModule(Jpeg2000Module module)
Sets the Module under which all this is happening.


setDataInputStream

public void setDataInputStream(java.io.DataInputStream dstream)
Sets the DataInputStream over which this marker is being read.


setRepInfo

public void setRepInfo(RepInfo repInfo)
Sets the RepInfo into which messages may be placed.


isMarker

public boolean isMarker()
Returns true if this segment is a Marker. Will return false unless overridden.


markerSegmentMaker

protected static MarkerSegment markerSegmentMaker(int markerCode)
Static factory method for generating an object of the appropriate subclass of MarkerSegment, based on the marker code.

Parameters:
markerCode - The 8-bit marker code (ignoring the FF).

readMarkLen

protected int readMarkLen()
                   throws java.io.IOException
Reads and returns the length field of the marker segment. The setter methods setModule and setDataInputStream must be called as part of the setup before readMarkLen is called.

Throws:
java.io.IOException

nCompBytes

protected int nCompBytes()
Determines size of fields indexed by number of components. Some marker segments have fields which are 1 byte long if the number of components is 1-255, and 2 bytes long if the number of components is 256-65535.

Returns:
0 if number of components not yet set, otherwise 1 or 2

getMainOrTile

protected MainOrTile getMainOrTile()
Returns the MainOrTile object which is currently applicable in the Contiguous Codestream. If the Contiguous Codestream has a current Tile, that is returned; otherwise the Codestream object established by setCodestream is returned.


process

protected abstract boolean process(int bytesToEat)
                            throws java.io.IOException
Process the marker or marker segment. The DataInputStream will be at the point of having read the marker code. The process method must consume exactly the number of bytes remaining in the marker segment; for a marker, this number will always be 0.

Parameters:
bytesToEat - The number of bytes that must be consumed. For a Marker, this number will always be 0. If it is 0 for a MarkerSegment, the number of bytes to consume is unknown.
Returns:
true if segment is well-formed, false otherwise.
Throws:
java.io.IOException


jhove/doc/edu/harvard/hul/ois/jhove/module/jpeg2000/NumberListBox.html0000644000707400001440000005364711510702355024702 0ustar garyusers NumberListBox (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.jpeg2000
Class NumberListBox

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
      extended by edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
          extended by edu.harvard.hul.ois.jhove.module.jpeg2000.NumberListBox
All Implemented Interfaces:
java.util.Iterator

public class NumberListBox
extends JP2Box

Number list box. Provides a list of numbers with types. It's apparently used only within an Association box, so it simply makes a property available. See ISO/IEC FCD15444-2: 2000, L.9.12

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
_bytesRead, associations, DESCRIPTION_NAME, noJP2Hdr, startBytesRead
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
_boxHeader, _dstrm, _module, _parentBox, _raf, _repInfo, bytesLeft, filePos, hasBoxes
 
Constructor Summary
NumberListBox(java.io.RandomAccessFile raf, BoxHolder parent)
          Constructor with superbox.
 
Method Summary
protected  Property getSelfPropDesc()
          Returns a Property which describes the Box, for use by Association boxes and perhaps others.
protected  java.lang.String getSelfPropName()
          Returns the name of the Box.
 boolean readBox()
          Reads the box, putting appropriate information in the RepInfo object.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
addAssociation, boxMaker, emptyBox, finalizeBytesRead, getBytesRead, getLength, init, initBytesRead, makeAssocProperty, selfDescProperty, setBoxHeader, setDataInputStream, setModule, setRandomAccessFile, setRepInfo, skipBox, wrongBoxContext, wrongBoxSize
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
getFilePos, hasNext, next, remove, superboxOverrun, superboxUnderrun
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

NumberListBox

public NumberListBox(java.io.RandomAccessFile raf,
                     BoxHolder parent)
Constructor with superbox.

Parameters:
parent - parent superbox of this box
Method Detail

readBox

public boolean readBox()
                throws java.io.IOException
Reads the box, putting appropriate information in the RepInfo object. setModule, setBoxHeader, setRepInfo and setDataInputStream must be called before readBox is called. readBox must completely consume the box, so that the next byte to be read by the DataInputStream is the FF byte of the next Box.

Specified by:
readBox in class JP2Box
Throws:
java.io.IOException

getSelfPropDesc

protected Property getSelfPropDesc()
Returns a Property which describes the Box, for use by Association boxes and perhaps others.

Overrides:
getSelfPropDesc in class JP2Box

getSelfPropName

protected java.lang.String getSelfPropName()
Returns the name of the Box.

Overrides:
getSelfPropName in class JP2Box


jhove/doc/edu/harvard/hul/ois/jhove/module/jpeg2000/OpacityBox.html0000644000707400001440000005105211510702355024212 0ustar garyusers OpacityBox (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.jpeg2000
Class OpacityBox

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
      extended by edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
          extended by edu.harvard.hul.ois.jhove.module.jpeg2000.OpacityBox
All Implemented Interfaces:
java.util.Iterator

public class OpacityBox
extends JP2Box

Opacity Box (JPX). See ISO/IEC FCD15444-2: 2000, L.9.4.6

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
_bytesRead, associations, DESCRIPTION_NAME, noJP2Hdr, startBytesRead
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
_boxHeader, _dstrm, _module, _parentBox, _raf, _repInfo, bytesLeft, filePos, hasBoxes
 
Constructor Summary
OpacityBox(java.io.RandomAccessFile raf, BoxHolder parent)
          Constructor with superbox.
 
Method Summary
protected  java.lang.String getSelfPropName()
          Returns the name of the Box.
 boolean readBox()
          Reads the box, putting appropriate information in the RepInfo object.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
addAssociation, boxMaker, emptyBox, finalizeBytesRead, getBytesRead, getLength, getSelfPropDesc, init, initBytesRead, makeAssocProperty, selfDescProperty, setBoxHeader, setDataInputStream, setModule, setRandomAccessFile, setRepInfo, skipBox, wrongBoxContext, wrongBoxSize
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
getFilePos, hasNext, next, remove, superboxOverrun, superboxUnderrun
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

OpacityBox

public OpacityBox(java.io.RandomAccessFile raf,
                  BoxHolder parent)
Constructor with superbox.

Parameters:
parent - parent superbox of this box
Method Detail

readBox

public boolean readBox()
                throws java.io.IOException
Reads the box, putting appropriate information in the RepInfo object. setModule, setBoxHeader, setRepInfo and setDataInputStream must be called before readBox is called. readBox must completely consume the box, so that the next byte to be read by the DataInputStream is the FF byte of the next Box.

Specified by:
readBox in class JP2Box
Throws:
java.io.IOException

getSelfPropName

protected java.lang.String getSelfPropName()
Returns the name of the Box.

Overrides:
getSelfPropName in class JP2Box


jhove/doc/edu/harvard/hul/ois/jhove/module/jpeg2000/PLMMarkerSegment.html0000644000707400001440000004221211510702355025244 0ustar garyusers PLMMarkerSegment (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.jpeg2000
Class PLMMarkerSegment

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.jpeg2000.MarkerSegment
      extended by edu.harvard.hul.ois.jhove.module.jpeg2000.PLMMarkerSegment

public class PLMMarkerSegment
extends MarkerSegment

Class for the PLM Marker segment. This gives packet lengths at the header level.

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.MarkerSegment
_ccs, _cs, _dstream, _module, _repInfo, COC, COD, COM, CRG, EOC, EPH, PLM, PLT, POC, PPM, PPT, QCC, QCD, RGN, SIZ, SOC, SOD, SOP, SOT, TLM
 
Constructor Summary
PLMMarkerSegment()
          Constructor.
 
Method Summary
protected  boolean process(int bytesToEat)
          Processes the marker segment.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.MarkerSegment
getMainOrTile, isMarker, markerSegmentMaker, nCompBytes, readMarkLen, setCodestream, setContCodestream, setDataInputStream, setModule, setRepInfo
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

PLMMarkerSegment

public PLMMarkerSegment()
Constructor.

Method Detail

process

protected boolean process(int bytesToEat)
                   throws java.io.IOException
Processes the marker segment. The DataInputStream will be at the point of having read the marker code. The process method must consume exactly the number of bytes remaining in the marker segment.

Specified by:
process in class MarkerSegment
Parameters:
bytesToEat - The number of bytes that must be consumed. If it is 0 for a MarkerSegment, the number of bytes to consume is unknown.
Returns:
true if segment is well-formed, false otherwise.
Throws:
java.io.IOException


jhove/doc/edu/harvard/hul/ois/jhove/module/jpeg2000/PLTMarkerSegment.html0000644000707400001440000004222411510702355025256 0ustar garyusers PLTMarkerSegment (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.jpeg2000
Class PLTMarkerSegment

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.jpeg2000.MarkerSegment
      extended by edu.harvard.hul.ois.jhove.module.jpeg2000.PLTMarkerSegment

public class PLTMarkerSegment
extends MarkerSegment

Class for the PLT Marker segment. This gives packet lengths at the tile level.

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.MarkerSegment
_ccs, _cs, _dstream, _module, _repInfo, COC, COD, COM, CRG, EOC, EPH, PLM, PLT, POC, PPM, PPT, QCC, QCD, RGN, SIZ, SOC, SOD, SOP, SOT, TLM
 
Constructor Summary
PLTMarkerSegment()
          Constructor.
 
Method Summary
protected  boolean process(int bytesToEat)
          Processes the marker segment.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.MarkerSegment
getMainOrTile, isMarker, markerSegmentMaker, nCompBytes, readMarkLen, setCodestream, setContCodestream, setDataInputStream, setModule, setRepInfo
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

PLTMarkerSegment

public PLTMarkerSegment()
Constructor.

Method Detail

process

protected boolean process(int bytesToEat)
                   throws java.io.IOException
Processes the marker segment. The DataInputStream will be at the point of having read the marker code. The process method must consume exactly the number of bytes remaining in the marker segment.

Specified by:
process in class MarkerSegment
Parameters:
bytesToEat - The number of bytes that must be consumed. If it is 0 for a MarkerSegment, the number of bytes to consume is unknown.
Returns:
true if segment is well-formed, false otherwise.
Throws:
java.io.IOException


jhove/doc/edu/harvard/hul/ois/jhove/module/jpeg2000/POCMarkerSegment.html0000644000707400001440000004222211510702355025236 0ustar garyusers POCMarkerSegment (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.jpeg2000
Class POCMarkerSegment

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.jpeg2000.MarkerSegment
      extended by edu.harvard.hul.ois.jhove.module.jpeg2000.POCMarkerSegment

public class POCMarkerSegment
extends MarkerSegment

Class for the POC (Progression order change) marker segment. May occur in the main or the tile part header.

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.MarkerSegment
_ccs, _cs, _dstream, _module, _repInfo, COC, COD, COM, CRG, EOC, EPH, PLM, PLT, POC, PPM, PPT, QCC, QCD, RGN, SIZ, SOC, SOD, SOP, SOT, TLM
 
Constructor Summary
POCMarkerSegment()
           
 
Method Summary
protected  boolean process(int bytesToEat)
          Process the marker segment.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.MarkerSegment
getMainOrTile, isMarker, markerSegmentMaker, nCompBytes, readMarkLen, setCodestream, setContCodestream, setDataInputStream, setModule, setRepInfo
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

POCMarkerSegment

public POCMarkerSegment()
Method Detail

process

protected boolean process(int bytesToEat)
                   throws java.io.IOException
Process the marker segment. The DataInputStream will be at the point of having read the marker code. The process method must consume exactly the number of bytes remaining in the marker segment.

Specified by:
process in class MarkerSegment
Parameters:
bytesToEat - The number of bytes that must be consumed. If it is 0 for a MarkerSegment, the number of bytes to consume is unknown.
Returns:
true if segment is well-formed, false otherwise.
Throws:
java.io.IOException


jhove/doc/edu/harvard/hul/ois/jhove/module/jpeg2000/PaletteBox.html0000644000707400001440000005105011510702355024176 0ustar garyusers PaletteBox (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.jpeg2000
Class PaletteBox

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
      extended by edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
          extended by edu.harvard.hul.ois.jhove.module.jpeg2000.PaletteBox
All Implemented Interfaces:
java.util.Iterator

public class PaletteBox
extends JP2Box

Palette box. See I.5.3.4 in ISO/IEC 15444-1:2000

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
_bytesRead, associations, DESCRIPTION_NAME, noJP2Hdr, startBytesRead
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
_boxHeader, _dstrm, _module, _parentBox, _raf, _repInfo, bytesLeft, filePos, hasBoxes
 
Constructor Summary
PaletteBox(java.io.RandomAccessFile raf, BoxHolder parent)
          Constructor with superbox.
 
Method Summary
protected  java.lang.String getSelfPropName()
          Returns the name of the Box.
 boolean readBox()
          Reads the box, putting appropriate information in the RepInfo object.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
addAssociation, boxMaker, emptyBox, finalizeBytesRead, getBytesRead, getLength, getSelfPropDesc, init, initBytesRead, makeAssocProperty, selfDescProperty, setBoxHeader, setDataInputStream, setModule, setRandomAccessFile, setRepInfo, skipBox, wrongBoxContext, wrongBoxSize
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
getFilePos, hasNext, next, remove, superboxOverrun, superboxUnderrun
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

PaletteBox

public PaletteBox(java.io.RandomAccessFile raf,
                  BoxHolder parent)
Constructor with superbox.

Parameters:
parent - parent superbox of this box
Method Detail

readBox

public boolean readBox()
                throws java.io.IOException
Reads the box, putting appropriate information in the RepInfo object. setModule, setBoxHeader, setRepInfo and setDataInputStream must be called before readBox is called. readBox must completely consume the box, so that the next byte to be read by the DataInputStream is the FF byte of the next Box.

Specified by:
readBox in class JP2Box
Throws:
java.io.IOException

getSelfPropName

protected java.lang.String getSelfPropName()
Returns the name of the Box.

Overrides:
getSelfPropName in class JP2Box


jhove/doc/edu/harvard/hul/ois/jhove/module/jpeg2000/PPMMarkerSegment.html0000644000707400001440000004253511510702355025260 0ustar garyusers PPMMarkerSegment (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.jpeg2000
Class PPMMarkerSegment

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.jpeg2000.MarkerSegment
      extended by edu.harvard.hul.ois.jhove.module.jpeg2000.PPMMarkerSegment

public class PPMMarkerSegment
extends MarkerSegment

Class for the PPM (Packed packet headers, main header) marker segment. I'm assuming for the present that the full details of packet headers is getting deeper into the bits than we want, so it just checks some basic information. There can be multiple PPM marker segments.

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.MarkerSegment
_ccs, _cs, _dstream, _module, _repInfo, COC, COD, COM, CRG, EOC, EPH, PLM, PLT, POC, PPM, PPT, QCC, QCD, RGN, SIZ, SOC, SOD, SOP, SOT, TLM
 
Constructor Summary
PPMMarkerSegment()
          Constructor.
 
Method Summary
protected  boolean process(int bytesToEat)
          Processes the marker segment.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.MarkerSegment
getMainOrTile, isMarker, markerSegmentMaker, nCompBytes, readMarkLen, setCodestream, setContCodestream, setDataInputStream, setModule, setRepInfo
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

PPMMarkerSegment

public PPMMarkerSegment()
Constructor.

Method Detail

process

protected boolean process(int bytesToEat)
                   throws java.io.IOException
Processes the marker segment. The DataInputStream will be at the point of having read the marker code. The process method must consume exactly the number of bytes remaining in the marker segment.

Specified by:
process in class MarkerSegment
Parameters:
bytesToEat - The number of bytes that must be consumed. If it is 0 for a MarkerSegment, the number of bytes to consume is unknown.
Returns:
true if segment is well-formed, false otherwise.
Throws:
java.io.IOException


jhove/doc/edu/harvard/hul/ois/jhove/module/jpeg2000/PPTMarkerSegment.html0000644000707400001440000004236211510702355025265 0ustar garyusers PPTMarkerSegment (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.jpeg2000
Class PPTMarkerSegment

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.jpeg2000.MarkerSegment
      extended by edu.harvard.hul.ois.jhove.module.jpeg2000.PPTMarkerSegment

public class PPTMarkerSegment
extends MarkerSegment

Class for the PPT (Packed packet headers, tile-part header) marker segment. Similar to the PPM marker segment, but applicable to tile parts rather than the main header.

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.MarkerSegment
_ccs, _cs, _dstream, _module, _repInfo, COC, COD, COM, CRG, EOC, EPH, PLM, PLT, POC, PPM, PPT, QCC, QCD, RGN, SIZ, SOC, SOD, SOP, SOT, TLM
 
Constructor Summary
PPTMarkerSegment()
          Constructor.
 
Method Summary
protected  boolean process(int bytesToEat)
          Processes the marker segment.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.MarkerSegment
getMainOrTile, isMarker, markerSegmentMaker, nCompBytes, readMarkLen, setCodestream, setContCodestream, setDataInputStream, setModule, setRepInfo
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

PPTMarkerSegment

public PPTMarkerSegment()
Constructor.

Method Detail

process

protected boolean process(int bytesToEat)
                   throws java.io.IOException
Processes the marker segment. The DataInputStream will be at the point of having read the marker code. The process method must consume exactly the number of bytes remaining in the marker segment.

Specified by:
process in class MarkerSegment
Parameters:
bytesToEat - The number of bytes that must be consumed. If it is 0 for a MarkerSegment, the number of bytes to consume is unknown.
Returns:
true if segment is well-formed, false otherwise.
Throws:
java.io.IOException


jhove/doc/edu/harvard/hul/ois/jhove/module/jpeg2000/QCCMarkerSegment.html0000644000707400001440000004245311510702355025231 0ustar garyusers QCCMarkerSegment (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.jpeg2000
Class QCCMarkerSegment

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.jpeg2000.MarkerSegment
      extended by edu.harvard.hul.ois.jhove.module.jpeg2000.QCCMarkerSegment

public class QCCMarkerSegment
extends MarkerSegment

Class for the QCC (Quantization component) marker segment. May occur in the main or the tile part header. In the main header it overrides the QCD for the specified component. In the tile part header it overrides the QCD for the component in the tile part.

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.MarkerSegment
_ccs, _cs, _dstream, _module, _repInfo, COC, COD, COM, CRG, EOC, EPH, PLM, PLT, POC, PPM, PPT, QCC, QCD, RGN, SIZ, SOC, SOD, SOP, SOT, TLM
 
Constructor Summary
QCCMarkerSegment()
           
 
Method Summary
protected  boolean process(int bytesToEat)
          Process the marker segment.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.MarkerSegment
getMainOrTile, isMarker, markerSegmentMaker, nCompBytes, readMarkLen, setCodestream, setContCodestream, setDataInputStream, setModule, setRepInfo
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

QCCMarkerSegment

public QCCMarkerSegment()
Method Detail

process

protected boolean process(int bytesToEat)
                   throws java.io.IOException
Process the marker segment. The DataInputStream will be at the point of having read the marker code. The process method must consume exactly the number of bytes remaining in the marker segment.

Specified by:
process in class MarkerSegment
Parameters:
bytesToEat - The number of bytes that must be consumed. If it is 0 for a MarkerSegment, the number of bytes to consume is unknown.
Returns:
true if segment is well-formed, false otherwise.
Throws:
java.io.IOException


jhove/doc/edu/harvard/hul/ois/jhove/module/jpeg2000/QCDMarkerSegment.html0000644000707400001440000004227311510702355025232 0ustar garyusers QCDMarkerSegment (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.jpeg2000
Class QCDMarkerSegment

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.jpeg2000.MarkerSegment
      extended by edu.harvard.hul.ois.jhove.module.jpeg2000.QCDMarkerSegment

public class QCDMarkerSegment
extends MarkerSegment

Class for the QCD (Quantization default) marker segment. This comes either in the main header or after an SOT.

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.MarkerSegment
_ccs, _cs, _dstream, _module, _repInfo, COC, COD, COM, CRG, EOC, EPH, PLM, PLT, POC, PPM, PPT, QCC, QCD, RGN, SIZ, SOC, SOD, SOP, SOT, TLM
 
Constructor Summary
QCDMarkerSegment()
          Constructor.
 
Method Summary
protected  boolean process(int bytesToEat)
          Process the marker segment.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.MarkerSegment
getMainOrTile, isMarker, markerSegmentMaker, nCompBytes, readMarkLen, setCodestream, setContCodestream, setDataInputStream, setModule, setRepInfo
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

QCDMarkerSegment

public QCDMarkerSegment()
Constructor.

Method Detail

process

protected boolean process(int bytesToEat)
                   throws java.io.IOException
Process the marker segment. The DataInputStream will be at the point of having read the marker code. The process method must consume exactly the number of bytes remaining in the marker segment.

Specified by:
process in class MarkerSegment
Parameters:
bytesToEat - The number of bytes that must be consumed. If it is 0 for a MarkerSegment, the number of bytes to consume is unknown.
Returns:
true if segment is well-formed, false otherwise.
Throws:
java.io.IOException


jhove/doc/edu/harvard/hul/ois/jhove/module/jpeg2000/RGNMarkerSegment.html0000644000707400001440000004217611510702355025253 0ustar garyusers RGNMarkerSegment (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.jpeg2000
Class RGNMarkerSegment

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.jpeg2000.MarkerSegment
      extended by edu.harvard.hul.ois.jhove.module.jpeg2000.RGNMarkerSegment

public class RGNMarkerSegment
extends MarkerSegment

Class for the RGN (region of interest) marker segment. This comes either in the main header or after an SOT.

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.MarkerSegment
_ccs, _cs, _dstream, _module, _repInfo, COC, COD, COM, CRG, EOC, EPH, PLM, PLT, POC, PPM, PPT, QCC, QCD, RGN, SIZ, SOC, SOD, SOP, SOT, TLM
 
Constructor Summary
RGNMarkerSegment()
           
 
Method Summary
protected  boolean process(int bytesToEat)
          Processes the marker segment.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.MarkerSegment
getMainOrTile, isMarker, markerSegmentMaker, nCompBytes, readMarkLen, setCodestream, setContCodestream, setDataInputStream, setModule, setRepInfo
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

RGNMarkerSegment

public RGNMarkerSegment()
Method Detail

process

protected boolean process(int bytesToEat)
                   throws java.io.IOException
Processes the marker segment. The DataInputStream will be at the point of having read the marker code. The process method must consume exactly the number of bytes remaining in the marker segment.

Specified by:
process in class MarkerSegment
Parameters:
bytesToEat - The number of bytes that must be consumed. If it is 0 for a MarkerSegment, the number of bytes to consume is unknown.
Returns:
true if segment is well-formed, false otherwise.
Throws:
java.io.IOException


jhove/doc/edu/harvard/hul/ois/jhove/module/jpeg2000/ROIBox.html0000644000707400001440000005323111510702355023234 0ustar garyusers ROIBox (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.jpeg2000
Class ROIBox

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
      extended by edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
          extended by edu.harvard.hul.ois.jhove.module.jpeg2000.ROIBox
All Implemented Interfaces:
java.util.Iterator

public class ROIBox
extends JP2Box

ROI Description box (JPX). See ISO/IEC FCD15444-2: 2000, L.9.16

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
_bytesRead, associations, DESCRIPTION_NAME, noJP2Hdr, startBytesRead
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
_boxHeader, _dstrm, _module, _parentBox, _raf, _repInfo, bytesLeft, filePos, hasBoxes
 
Constructor Summary
ROIBox(java.io.RandomAccessFile raf, BoxHolder parent)
          Constructor with superbox.
 
Method Summary
protected  Property getSelfPropDesc()
          Returns a Property which describes the box.
protected  java.lang.String getSelfPropName()
          Returns the name of the Box.
 boolean readBox()
          Reads the box, putting appropriate information in the RepInfo object.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
addAssociation, boxMaker, emptyBox, finalizeBytesRead, getBytesRead, getLength, init, initBytesRead, makeAssocProperty, selfDescProperty, setBoxHeader, setDataInputStream, setModule, setRandomAccessFile, setRepInfo, skipBox, wrongBoxContext, wrongBoxSize
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
getFilePos, hasNext, next, remove, superboxOverrun, superboxUnderrun
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ROIBox

public ROIBox(java.io.RandomAccessFile raf,
              BoxHolder parent)
Constructor with superbox.

Parameters:
parent - parent superbox of this box
Method Detail

readBox

public boolean readBox()
                throws java.io.IOException
Reads the box, putting appropriate information in the RepInfo object. setModule, setBoxHeader, setRepInfo and setDataInputStream must be called before readBox is called. readBox must completely consume the box, so that the next byte to be read by the DataInputStream is the FF byte of the next Box.

Specified by:
readBox in class JP2Box
Throws:
java.io.IOException

getSelfPropName

protected java.lang.String getSelfPropName()
Returns the name of the Box.

Overrides:
getSelfPropName in class JP2Box

getSelfPropDesc

protected Property getSelfPropDesc()
Returns a Property which describes the box. This is used as a subproperty of the Property returned by selfDescProperty.

Overrides:
getSelfPropDesc in class JP2Box


jhove/doc/edu/harvard/hul/ois/jhove/module/jpeg2000/ReaderRequirementsBox.html0000644000707400001440000005142311510702355026412 0ustar garyusers ReaderRequirementsBox (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.jpeg2000
Class ReaderRequirementsBox

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
      extended by edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
          extended by edu.harvard.hul.ois.jhove.module.jpeg2000.ReaderRequirementsBox
All Implemented Interfaces:
java.util.Iterator

public class ReaderRequirementsBox
extends JP2Box

Reader requirements box (JPX). See L.9.1 in ISO/IEC FCD15444-2:2000.

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
_bytesRead, associations, DESCRIPTION_NAME, noJP2Hdr, startBytesRead
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
_boxHeader, _dstrm, _module, _parentBox, _raf, _repInfo, bytesLeft, filePos, hasBoxes
 
Constructor Summary
ReaderRequirementsBox(java.io.RandomAccessFile raf, BoxHolder parent)
          Constructor with superbox.
 
Method Summary
protected  java.lang.String getSelfPropName()
          Returns the name of the Box.
 boolean readBox()
          Reads the box, putting appropriate information in the RepInfo object.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
addAssociation, boxMaker, emptyBox, finalizeBytesRead, getBytesRead, getLength, getSelfPropDesc, init, initBytesRead, makeAssocProperty, selfDescProperty, setBoxHeader, setDataInputStream, setModule, setRandomAccessFile, setRepInfo, skipBox, wrongBoxContext, wrongBoxSize
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
getFilePos, hasNext, next, remove, superboxOverrun, superboxUnderrun
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ReaderRequirementsBox

public ReaderRequirementsBox(java.io.RandomAccessFile raf,
                             BoxHolder parent)
Constructor with superbox.

Parameters:
parent - parent superbox of this box
Method Detail

readBox

public boolean readBox()
                throws java.io.IOException
Reads the box, putting appropriate information in the RepInfo object. setModule, setBoxHeader, setRepInfo and setDataInputStream must be called before readBox is called. readBox must completely consume the box, so that the next byte to be read by the DataInputStream is the FF byte of the next Box.

Specified by:
readBox in class JP2Box
Throws:
java.io.IOException

getSelfPropName

protected java.lang.String getSelfPropName()
Returns the name of the Box.

Overrides:
getSelfPropName in class JP2Box


jhove/doc/edu/harvard/hul/ois/jhove/module/jpeg2000/ResolutionBox.html0000644000707400001440000005245311510702355024753 0ustar garyusers ResolutionBox (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.jpeg2000
Class ResolutionBox

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
      extended by edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
          extended by edu.harvard.hul.ois.jhove.module.jpeg2000.ResolutionBox
All Implemented Interfaces:
java.util.Iterator

public class ResolutionBox
extends JP2Box

Resolution box. See I.5.3.7 in ISO/IEC 15444-1:2000

Author:
Gary McGath
See Also:
CaptureResolutionBox, DDResolutionBox

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
_bytesRead, associations, DESCRIPTION_NAME, noJP2Hdr, startBytesRead
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
_boxHeader, _dstrm, _module, _parentBox, _raf, _repInfo, bytesLeft, filePos, hasBoxes
 
Constructor Summary
ResolutionBox(java.io.RandomAccessFile raf, BoxHolder parent)
          Constructor with superbox.
 
Method Summary
protected  java.lang.String getSelfPropName()
          Returns the name of the Box.
 boolean readBox()
          Reads the box, putting appropriate information in the RepInfo object.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
addAssociation, boxMaker, emptyBox, finalizeBytesRead, getBytesRead, getLength, getSelfPropDesc, init, initBytesRead, makeAssocProperty, selfDescProperty, setBoxHeader, setDataInputStream, setModule, setRandomAccessFile, setRepInfo, skipBox, wrongBoxContext, wrongBoxSize
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
getFilePos, hasNext, next, remove, superboxOverrun, superboxUnderrun
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ResolutionBox

public ResolutionBox(java.io.RandomAccessFile raf,
                     BoxHolder parent)
Constructor with superbox.

Parameters:
parent - parent superbox of this box
Method Detail

readBox

public boolean readBox()
                throws java.io.IOException
Description copied from class: JP2Box
Reads the box, putting appropriate information in the RepInfo object. setModule, setBoxHeader, setRepInfo and setDataInputStream must be called before readBox is called. Thus, the header of the box must already have been read. readBox must completely consume the box, so that the next byte to be read by the DataInputStream is the FF byte of the next Box. The number of bytes read must be placed in _bytesRead.

Specified by:
readBox in class JP2Box
Throws:
java.io.IOException

getSelfPropName

protected java.lang.String getSelfPropName()
Returns the name of the Box.

Overrides:
getSelfPropName in class JP2Box


jhove/doc/edu/harvard/hul/ois/jhove/module/jpeg2000/SIZMarkerSegment.html0000644000707400001440000004256011510702355025267 0ustar garyusers SIZMarkerSegment (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.jpeg2000
Class SIZMarkerSegment

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.jpeg2000.MarkerSegment
      extended by edu.harvard.hul.ois.jhove.module.jpeg2000.SIZMarkerSegment

public class SIZMarkerSegment
extends MarkerSegment

Class for the SIZ marker segment. This is a mandatory marker in the main header, and provides information about the uncompressed image such as the width and height of the reference grid, the width and height of the tiles, the number of components, component bit depth, and the separation of component samples with respect to the reference grid.

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.MarkerSegment
_ccs, _cs, _dstream, _module, _repInfo, COC, COD, COM, CRG, EOC, EPH, PLM, PLT, POC, PPM, PPT, QCC, QCD, RGN, SIZ, SOC, SOD, SOP, SOT, TLM
 
Constructor Summary
SIZMarkerSegment()
           
 
Method Summary
protected  boolean process(int bytesToEat)
          Process the marker segment.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.MarkerSegment
getMainOrTile, isMarker, markerSegmentMaker, nCompBytes, readMarkLen, setCodestream, setContCodestream, setDataInputStream, setModule, setRepInfo
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

SIZMarkerSegment

public SIZMarkerSegment()
Method Detail

process

protected boolean process(int bytesToEat)
                   throws java.io.IOException
Process the marker segment. The DataInputStream will be at the point of having read the marker code. The process method must consume exactly the number of bytes remaining in the marker segment.

Specified by:
process in class MarkerSegment
Parameters:
bytesToEat - The number of bytes that must be consumed. If it is 0 for a MarkerSegment, the number of bytes to consume is unknown.
Returns:
true if segment is well-formed, false otherwise.
Throws:
java.io.IOException


jhove/doc/edu/harvard/hul/ois/jhove/module/jpeg2000/SOTMarkerSegment.html0000644000707400001440000004213511510702355025265 0ustar garyusers SOTMarkerSegment (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.jpeg2000
Class SOTMarkerSegment

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.jpeg2000.MarkerSegment
      extended by edu.harvard.hul.ois.jhove.module.jpeg2000.SOTMarkerSegment

public class SOTMarkerSegment
extends MarkerSegment

Class for the SOT (start of tile-part) marker segment.

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.MarkerSegment
_ccs, _cs, _dstream, _module, _repInfo, COC, COD, COM, CRG, EOC, EPH, PLM, PLT, POC, PPM, PPT, QCC, QCD, RGN, SIZ, SOC, SOD, SOP, SOT, TLM
 
Constructor Summary
SOTMarkerSegment()
          Constructor
 
Method Summary
protected  boolean process(int bytesToEat)
          Process the marker segment.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.MarkerSegment
getMainOrTile, isMarker, markerSegmentMaker, nCompBytes, readMarkLen, setCodestream, setContCodestream, setDataInputStream, setModule, setRepInfo
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

SOTMarkerSegment

public SOTMarkerSegment()
Constructor

Method Detail

process

protected boolean process(int bytesToEat)
                   throws java.io.IOException
Process the marker segment. The DataInputStream will be at the point of having read the marker code. The process method must consume exactly the number of bytes remaining in the marker segment.

Specified by:
process in class MarkerSegment
Parameters:
bytesToEat - The number of bytes that must be consumed. If it is 0 for a MarkerSegment, the number of bytes to consume is unknown.
Returns:
true if segment is well-formed, false otherwise.
Throws:
java.io.IOException


jhove/doc/edu/harvard/hul/ois/jhove/module/jpeg2000/TLMMarkerSegment.html0000644000707400001440000004216411510702355025256 0ustar garyusers TLMMarkerSegment (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.jpeg2000
Class TLMMarkerSegment

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.jpeg2000.MarkerSegment
      extended by edu.harvard.hul.ois.jhove.module.jpeg2000.TLMMarkerSegment

public class TLMMarkerSegment
extends MarkerSegment

Class for the TLM (tile length) marker segment. This may occur only in the main header.

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.MarkerSegment
_ccs, _cs, _dstream, _module, _repInfo, COC, COD, COM, CRG, EOC, EPH, PLM, PLT, POC, PPM, PPT, QCC, QCD, RGN, SIZ, SOC, SOD, SOP, SOT, TLM
 
Constructor Summary
TLMMarkerSegment()
           
 
Method Summary
protected  boolean process(int bytesToEat)
          Processes the marker segment.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.MarkerSegment
getMainOrTile, isMarker, markerSegmentMaker, nCompBytes, readMarkLen, setCodestream, setContCodestream, setDataInputStream, setModule, setRepInfo
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

TLMMarkerSegment

public TLMMarkerSegment()
Method Detail

process

protected boolean process(int bytesToEat)
                   throws java.io.IOException
Processes the marker segment. The DataInputStream will be at the point of having read the marker code. The process method must consume exactly the number of bytes remaining in the marker segment.

Specified by:
process in class MarkerSegment
Parameters:
bytesToEat - The number of bytes that must be consumed. If it is 0 for a MarkerSegment, the number of bytes to consume is unknown.
Returns:
true if segment is well-formed, false otherwise.
Throws:
java.io.IOException


jhove/doc/edu/harvard/hul/ois/jhove/module/jpeg2000/Tile.html0000644000707400001440000004065511510702355023035 0ustar garyusers Tile (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.jpeg2000
Class Tile

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.jpeg2000.MainOrTile
      extended by edu.harvard.hul.ois.jhove.module.jpeg2000.Tile

public class Tile
extends MainOrTile

Encapsulation of a JPEG 2000 tile in a codestream.

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.MainOrTile
_codProperty, _comments, _components, _packetLengthList, _pocProperty, _precSize, _qcdProperty, NULL
 
Constructor Summary
Tile()
          Constructor.
 
Method Summary
 void addPPTLength(long len)
          Adds a PPM tilepart header length to the list of lengths
 void addTilePart(TilePart tp)
          Adds a TilePart to the List of TileParts.
 java.util.List getTileParts()
          returns the List of TileParts.
 Property makeProperty()
          Returns a Property describing the tile.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.MainOrTile
addComment, addPacketLength, getNumComponents, setCODProperty, setCompProperty, setNumComponents, setPOCProperty, setQCDProperty
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

Tile

public Tile()
Constructor.

Method Detail

addTilePart

public void addTilePart(TilePart tp)
Adds a TilePart to the List of TileParts.


getTileParts

public java.util.List getTileParts()
returns the List of TileParts.


addPPTLength

public void addPPTLength(long len)
Adds a PPM tilepart header length to the list of lengths


makeProperty

public Property makeProperty()
Returns a Property describing the tile. The name of the Property is "Tile".



jhove/doc/edu/harvard/hul/ois/jhove/module/jpeg2000/TilePart.html0000644000707400001440000002655211510702355023664 0ustar garyusers TilePart (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.jpeg2000
Class TilePart

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.jpeg2000.TilePart

public class TilePart
extends java.lang.Object

Encapsulation of a tile-part in a JPEG 2000 codestream.

Author:
Gary McGath

Constructor Summary
TilePart(Tile tile, int index)
          Constructor.
 
Method Summary
 Property makeProperty()
          Returns a Property based on the TilePart.
 void setLength(long len)
          Sets the length field.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

TilePart

public TilePart(Tile tile,
                int index)
Constructor.

Parameters:
tile - The Tile of which this is a part
index - The index of this tile part
Method Detail

setLength

public void setLength(long len)
Sets the length field. This must be called before calling makeProperty.


makeProperty

public Property makeProperty()
Returns a Property based on the TilePart. The Property is named "TilePart".



jhove/doc/edu/harvard/hul/ois/jhove/module/jpeg2000/TopLevelBoxHolder.html0000644000707400001440000004132311510702355025472 0ustar garyusers TopLevelBoxHolder (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.jpeg2000
Class TopLevelBoxHolder

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
      extended by edu.harvard.hul.ois.jhove.module.jpeg2000.TopLevelBoxHolder
All Implemented Interfaces:
java.util.Iterator

public class TopLevelBoxHolder
extends BoxHolder

A subclass of BoxHolder specifically for getting top-level boxes in a JPEG 2000 file.

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
_boxHeader, _dstrm, _module, _parentBox, _raf, _repInfo, bytesLeft, filePos, hasBoxes
 
Constructor Summary
TopLevelBoxHolder(Jpeg2000Module module, java.io.RandomAccessFile raf, RepInfo info, java.io.DataInputStream dstream)
           
 
Method Summary
protected  java.lang.String getSelfPropName()
          Returns a name for use in messages.
 boolean hasNext()
          Checks if any more subboxes are available.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
getFilePos, next, remove, superboxOverrun, superboxUnderrun
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

TopLevelBoxHolder

public TopLevelBoxHolder(Jpeg2000Module module,
                         java.io.RandomAccessFile raf,
                         RepInfo info,
                         java.io.DataInputStream dstream)
Parameters:
raf -
Method Detail

getSelfPropName

protected java.lang.String getSelfPropName()
Returns a name for use in messages.

Overrides:
getSelfPropName in class BoxHolder

hasNext

public boolean hasNext()
Description copied from class: BoxHolder
Checks if any more subboxes are available. This class doesn't fully conform to the Iterator interface, as there are some cases where the lack of more boxes won't be detected till an EOF is encounterd. So callers should call hasNext to avoid reading overruns, and then test the value returned by next for nullity.

Specified by:
hasNext in interface java.util.Iterator
Overrides:
hasNext in class BoxHolder


jhove/doc/edu/harvard/hul/ois/jhove/module/jpeg2000/UUIDBox.html0000644000707400001440000005155311510702355023356 0ustar garyusers UUIDBox (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.jpeg2000
Class UUIDBox

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
      extended by edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
          extended by edu.harvard.hul.ois.jhove.module.jpeg2000.UUIDBox
All Implemented Interfaces:
java.util.Iterator

public class UUIDBox
extends JP2Box

UUID Box. See I.7.2 in ISO/IEC 15444-1:2000

Author:
Gary McGath
See Also:
UUIDInfoBox, UUIDListBox

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
_bytesRead, associations, DESCRIPTION_NAME, noJP2Hdr, startBytesRead
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
_boxHeader, _dstrm, _module, _parentBox, _raf, _repInfo, bytesLeft, filePos, hasBoxes
 
Constructor Summary
UUIDBox(java.io.RandomAccessFile raf, BoxHolder parent)
          Constructor with superbox.
 
Method Summary
protected  java.lang.String getSelfPropName()
          Returns the name of the Box.
 boolean readBox()
          Reads the box, putting appropriate information in the RepInfo object.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
addAssociation, boxMaker, emptyBox, finalizeBytesRead, getBytesRead, getLength, getSelfPropDesc, init, initBytesRead, makeAssocProperty, selfDescProperty, setBoxHeader, setDataInputStream, setModule, setRandomAccessFile, setRepInfo, skipBox, wrongBoxContext, wrongBoxSize
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
getFilePos, hasNext, next, remove, superboxOverrun, superboxUnderrun
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

UUIDBox

public UUIDBox(java.io.RandomAccessFile raf,
               BoxHolder parent)
Constructor with superbox.

Parameters:
parent - parent superbox of this box
Method Detail

readBox

public boolean readBox()
                throws java.io.IOException
Reads the box, putting appropriate information in the RepInfo object. setModule, setBoxHeader, setRepInfo and setDataInputStream must be called before readBox is called. readBox must completely consume the box, so that the next byte to be read by the DataInputStream is the FF byte of the next Box.

Specified by:
readBox in class JP2Box
Throws:
java.io.IOException

getSelfPropName

protected java.lang.String getSelfPropName()
Returns the name of the Box.

Overrides:
getSelfPropName in class JP2Box


jhove/doc/edu/harvard/hul/ois/jhove/module/jpeg2000/UUIDInfoBox.html0000644000707400001440000005362511510702355024174 0ustar garyusers UUIDInfoBox (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.jpeg2000
Class UUIDInfoBox

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
      extended by edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
          extended by edu.harvard.hul.ois.jhove.module.jpeg2000.UUIDInfoBox
All Implemented Interfaces:
java.util.Iterator

public class UUIDInfoBox
extends JP2Box

UUID info box. See I.7.3 in ISO/IEC 15444-1:2000

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
_bytesRead, associations, DESCRIPTION_NAME, noJP2Hdr, startBytesRead
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
_boxHeader, _dstrm, _module, _parentBox, _raf, _repInfo, bytesLeft, filePos, hasBoxes
 
Constructor Summary
UUIDInfoBox(java.io.RandomAccessFile raf, BoxHolder parent)
          Constructor with superbox.
 
Method Summary
protected  java.lang.String getSelfPropName()
          Returns the name of the Box.
 boolean readBox()
          Reads the box, putting appropriate information in the RepInfo object.
protected  void setURL(java.lang.String url)
          Sets the URL string.
protected  void setUUIDList(byte[][] uuids)
          Sets the UUID list.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
addAssociation, boxMaker, emptyBox, finalizeBytesRead, getBytesRead, getLength, getSelfPropDesc, init, initBytesRead, makeAssocProperty, selfDescProperty, setBoxHeader, setDataInputStream, setModule, setRandomAccessFile, setRepInfo, skipBox, wrongBoxContext, wrongBoxSize
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
getFilePos, hasNext, next, remove, superboxOverrun, superboxUnderrun
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

UUIDInfoBox

public UUIDInfoBox(java.io.RandomAccessFile raf,
                   BoxHolder parent)
Constructor with superbox.

Parameters:
parent - parent superbox of this box
Method Detail

readBox

public boolean readBox()
                throws java.io.IOException
Reads the box, putting appropriate information in the RepInfo object. setModule, setBoxHeader, setRepInfo and setDataInputStream must be called before readBox is called. readBox must completely consume the box, so that the next byte to be read by the DataInputStream is the FF byte of the next Box.

Specified by:
readBox in class JP2Box
Throws:
java.io.IOException

setURL

protected void setURL(java.lang.String url)
Sets the URL string. This will be called from DataEntryURLBox.


setUUIDList

protected void setUUIDList(byte[][] uuids)
Sets the UUID list. The argument is an array of byte arrays of length 16, or schematically: byte[][16].


getSelfPropName

protected java.lang.String getSelfPropName()
Returns the name of the Box.

Overrides:
getSelfPropName in class JP2Box


jhove/doc/edu/harvard/hul/ois/jhove/module/jpeg2000/UUIDListBox.html0000644000707400001440000005104611510702355024207 0ustar garyusers UUIDListBox (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.jpeg2000
Class UUIDListBox

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
      extended by edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
          extended by edu.harvard.hul.ois.jhove.module.jpeg2000.UUIDListBox
All Implemented Interfaces:
java.util.Iterator

public class UUIDListBox
extends JP2Box

UUID Box. See I.7.3.1 in ISO/IEC 15444-1:2000

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
_bytesRead, associations, DESCRIPTION_NAME, noJP2Hdr, startBytesRead
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
_boxHeader, _dstrm, _module, _parentBox, _raf, _repInfo, bytesLeft, filePos, hasBoxes
 
Constructor Summary
UUIDListBox(java.io.RandomAccessFile raf, BoxHolder parent)
          Constructor with superbox.
 
Method Summary
protected  java.lang.String getSelfPropName()
          Returns the name of the Box.
 boolean readBox()
          Reads the box, putting appropriate information in the RepInfo object.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
addAssociation, boxMaker, emptyBox, finalizeBytesRead, getBytesRead, getLength, getSelfPropDesc, init, initBytesRead, makeAssocProperty, selfDescProperty, setBoxHeader, setDataInputStream, setModule, setRandomAccessFile, setRepInfo, skipBox, wrongBoxContext, wrongBoxSize
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
getFilePos, hasNext, next, remove, superboxOverrun, superboxUnderrun
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

UUIDListBox

public UUIDListBox(java.io.RandomAccessFile raf,
                   BoxHolder parent)
Constructor with superbox.

Parameters:
parent - parent superbox of this box
Method Detail

readBox

public boolean readBox()
                throws java.io.IOException
Reads the box, putting appropriate information in the RepInfo object. setModule, setBoxHeader, setRepInfo and setDataInputStream must be called before readBox is called. readBox must completely consume the box, so that the next byte to be read by the DataInputStream is the FF byte of the next Box.

Specified by:
readBox in class JP2Box
Throws:
java.io.IOException

getSelfPropName

protected java.lang.String getSelfPropName()
Returns the name of the Box.

Overrides:
getSelfPropName in class JP2Box


jhove/doc/edu/harvard/hul/ois/jhove/module/jpeg2000/XMLBox.html0000644000707400001440000005250411510702355023245 0ustar garyusers XMLBox (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.jpeg2000
Class XMLBox

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
      extended by edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
          extended by edu.harvard.hul.ois.jhove.module.jpeg2000.XMLBox
All Implemented Interfaces:
java.util.Iterator

public class XMLBox
extends JP2Box

XML Box. See I.7.1 in ISO/IEC 15444-1:2000

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
_bytesRead, associations, DESCRIPTION_NAME, noJP2Hdr, startBytesRead
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
_boxHeader, _dstrm, _module, _parentBox, _raf, _repInfo, bytesLeft, filePos, hasBoxes
 
Constructor Summary
XMLBox(java.io.RandomAccessFile raf, BoxHolder parent)
          Constructor with superbox.
 
Method Summary
protected  Property getSelfPropDesc()
          Returns a Property which describes the Box, for use by Association boxes and perhaps others.
protected  java.lang.String getSelfPropName()
          Returns the name of the Box.
 boolean readBox()
          Reads the box, putting appropriate information in the RepInfo object.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
addAssociation, boxMaker, emptyBox, finalizeBytesRead, getBytesRead, getLength, init, initBytesRead, makeAssocProperty, selfDescProperty, setBoxHeader, setDataInputStream, setModule, setRandomAccessFile, setRepInfo, skipBox, wrongBoxContext, wrongBoxSize
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
getFilePos, hasNext, next, remove, superboxOverrun, superboxUnderrun
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

XMLBox

public XMLBox(java.io.RandomAccessFile raf,
              BoxHolder parent)
Constructor with superbox.

Parameters:
parent - parent superbox of this box
Method Detail

readBox

public boolean readBox()
                throws java.io.IOException
Reads the box, putting appropriate information in the RepInfo object. setModule, setBoxHeader, setRepInfo and setDataInputStream must be called before readBox is called. readBox must completely consume the box, so that the next byte to be read by the DataInputStream is the FF byte of the next Box.

Specified by:
readBox in class JP2Box
Throws:
java.io.IOException

getSelfPropDesc

protected Property getSelfPropDesc()
Returns a Property which describes the Box, for use by Association boxes and perhaps others.

Overrides:
getSelfPropDesc in class JP2Box

getSelfPropName

protected java.lang.String getSelfPropName()
Returns the name of the Box.

Overrides:
getSelfPropName in class JP2Box


jhove/doc/edu/harvard/hul/ois/jhove/module/jpeg2000/package-frame.html0000644000707400001440000002312111510702366024612 0ustar garyusers edu.harvard.hul.ois.jhove.module.jpeg2000 (JHOVE Documentation) edu.harvard.hul.ois.jhove.module.jpeg2000
Classes 
AssociationBox
BinaryFilterBox
BoxHeader
BoxHolder
BPCCBox
CaptureResolutionBox
ChannelDefBox
COCMarkerSegment
Codestream
CodestreamHeaderBox
CodestreamRegBox
CODMarkerSegment
ColorGroupBox
ColorSpecBox
CommentMarkerSegment
ComponentMapBox
CompOptionsBox
CompositionBox
ComposLayerHdrBox
ContCodestream
ContCodestreamBox
CRGMarkerSegment
CrossRefBox
DataEntryURLBox
DDResolutionBox
DefaultBox
DefaultMarkerSegment
DesiredReproBox
DigSignatureBox
FileTypeBox
FragmentInputStream
FragmentListBox
FragmentTableBox
GTSOBox
ImageHeaderBox
InstructionSetBox
IPRBox
JP2Box
JP2HeaderBox
JP2Strings
LabelBox
MainOrTile
Marker
MarkerSegment
NumberListBox
OpacityBox
PaletteBox
PLMMarkerSegment
PLTMarkerSegment
POCMarkerSegment
PPMMarkerSegment
PPTMarkerSegment
QCCMarkerSegment
QCDMarkerSegment
ReaderRequirementsBox
ResolutionBox
RGNMarkerSegment
ROIBox
SIZMarkerSegment
SOTMarkerSegment
Tile
TilePart
TLMMarkerSegment
TopLevelBoxHolder
UUIDBox
UUIDInfoBox
UUIDListBox
XMLBox
jhove/doc/edu/harvard/hul/ois/jhove/module/jpeg2000/package-summary.html0000644000707400001440000006370611510702366025232 0ustar garyusers edu.harvard.hul.ois.jhove.module.jpeg2000 (JHOVE Documentation)

Package edu.harvard.hul.ois.jhove.module.jpeg2000

Contains supporting classes for the JPEG2000-HUL module.

See:
          Description

Class Summary
AssociationBox Association Box.
BinaryFilterBox Binary Filter box (JPX).
BoxHeader Encapsulation of a JPEG 2000 box header.
BoxHolder A BoxHolder is a container for JPEG 2000 boxes.
BPCCBox Bits Per Component box.
CaptureResolutionBox Capture Resolution Box.
ChannelDefBox Channel Definition Box.
COCMarkerSegment Class for the COC (Coding style component) marker segment.
Codestream The information on a codestream, extracted from a Contiguous Codestream or Fragment Table, and the corresponding Codestream Header if any.
CodestreamHeaderBox Codestream Header box.
CodestreamRegBox Codestream Registration Box.
CODMarkerSegment Class for the COD (coding style default) marker segment.
ColorGroupBox Color Group Box.
ColorSpecBox Color specification box.
CommentMarkerSegment Class for the COM (Comment) marker segment.
ComponentMapBox Component Mapping Box.
CompOptionsBox Composition options box (JPX).
CompositionBox Composition Box (JPX).
ComposLayerHdrBox Compositing Layer Header Box (JPX superbox).
ContCodestream Encapsulation of a JPEG 2000 codestream.
ContCodestreamBox Continuous codestream box.
CRGMarkerSegment Class for the CRG (component registration) marker segment.
CrossRefBox Cross Reference Box (JPX).
DataEntryURLBox Data Entry URL Box.
DDResolutionBox Default Display Resolution Box.
DefaultBox Default class for Boxes that have not yet been implemented.
DefaultMarkerSegment This class is used to handle any unrecognized or unimplemented marker segment in a codestream.
DesiredReproBox Desired Reproductions Box (JPX).
DigSignatureBox Digital Signature Box (JPX).
FileTypeBox File Type Box.
FragmentInputStream A FragmentInputStream provides an interface by which the scattered fragments of a Fragment List Box can be read as a single stream.
FragmentListBox Fragment List Box (JPX).
FragmentTableBox Fragment Table Box (JPX).
GTSOBox Graphics Technology Standard Output Box.
ImageHeaderBox Image Header Box.
InstructionSetBox Instruction Set Box (JPX).
IPRBox Intellectual Property Rights box.
JP2Box Superclass for JPEG 2000 boxes.
JP2HeaderBox JP2 Header Box.
JP2Strings String constants for JPEG 2000 module.
LabelBox Label box.
MainOrTile Abstract superclass for Codestream and Tile classes.
Marker This is a subclass of MarkerSegment for Markers.
MarkerSegment Abstract superclass for marker segments.
NumberListBox Number list box.
OpacityBox Opacity Box (JPX).
PaletteBox Palette box.
PLMMarkerSegment Class for the PLM Marker segment.
PLTMarkerSegment Class for the PLT Marker segment.
POCMarkerSegment Class for the POC (Progression order change) marker segment.
PPMMarkerSegment Class for the PPM (Packed packet headers, main header) marker segment.
PPTMarkerSegment Class for the PPT (Packed packet headers, tile-part header) marker segment.
QCCMarkerSegment Class for the QCC (Quantization component) marker segment.
QCDMarkerSegment Class for the QCD (Quantization default) marker segment.
ReaderRequirementsBox Reader requirements box (JPX).
ResolutionBox Resolution box.
RGNMarkerSegment Class for the RGN (region of interest) marker segment.
ROIBox ROI Description box (JPX).
SIZMarkerSegment Class for the SIZ marker segment.
SOTMarkerSegment Class for the SOT (start of tile-part) marker segment.
Tile Encapsulation of a JPEG 2000 tile in a codestream.
TilePart Encapsulation of a tile-part in a JPEG 2000 codestream.
TLMMarkerSegment Class for the TLM (tile length) marker segment.
TopLevelBoxHolder A subclass of BoxHolder specifically for getting top-level boxes in a JPEG 2000 file.
UUIDBox UUID Box.
UUIDInfoBox UUID info box.
UUIDListBox UUID Box.
XMLBox XML Box.
 

Package edu.harvard.hul.ois.jhove.module.jpeg2000 Description

Contains supporting classes for the JPEG2000-HUL module.



jhove/doc/edu/harvard/hul/ois/jhove/module/jpeg2000/package-tree.html0000644000707400001440000005334711510702366024474 0ustar garyusers edu.harvard.hul.ois.jhove.module.jpeg2000 Class Hierarchy (JHOVE Documentation)

Hierarchy For Package edu.harvard.hul.ois.jhove.module.jpeg2000

Package Hierarchies:
All Packages

Class Hierarchy



jhove/doc/edu/harvard/hul/ois/jhove/module/pdf/0000755000707400001440000000000011510702006020553 5ustar garyusersjhove/doc/edu/harvard/hul/ois/jhove/module/pdf/AProfile.html0000644000707400001440000004721311510702355023160 0ustar garyusers AProfile (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.pdf
Class AProfile

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.pdf.PdfProfile
      extended by edu.harvard.hul.ois.jhove.module.pdf.AProfile

public final class AProfile
extends PdfProfile

PDF profile checker for PDF/A-1 documents. See 19005-1:2005(E), "Document Imaging Applications Application Issues". Revised to reflect the final standard. With the new terminology, this profile is specific to PDF/A-1; there may be additional standards in the PDF/A family later on. "PDF/A" means "PDF/A-1" in the documentation of this code. There are two levels of conformance, called Level A and Level B. We report these as two different profiles. To accomplish this, we use AProfileLevelA, linked to an instance of this, which simply checks if this profile established Level A compliance.


Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.pdf.PdfProfile
_module, _parser, _profileText, _raf
 
Constructor Summary
AProfile(PdfModule module)
          Constructor.
 
Method Summary
protected  boolean formObjectOK(PdfDictionary xo)
          Checks if a Form xobject is valid.
protected  boolean imageObjectOK(PdfDictionary xo)
          Checks if a single image XObject fits the profile
protected  boolean satisfiesLevelA()
          Returns true if the document was found to be Level A conformant.
 boolean satisfiesThisProfile()
          Returns true if the document satisfies the profile at Level B or better.
 void setTaggedProfile(TaggedProfile tpr)
          Calling setTaggedProfile links this AProfile to a TaggedProfile.
protected  boolean xObjectOK(PdfDictionary xo)
          Checks a single XObject for xObjectsOK.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.pdf.PdfProfile
getText, hasFilters, isAlreadyOK, satisfiesProfile, xObjectsOK
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

AProfile

public AProfile(PdfModule module)
Constructor. Creates an AProfile object for subsequent testing.

Parameters:
module - The module under which we are checking the profile.
Method Detail

setTaggedProfile

public void setTaggedProfile(TaggedProfile tpr)
Calling setTaggedProfile links this AProfile to a TaggedProfile.


satisfiesThisProfile

public boolean satisfiesThisProfile()
Returns true if the document satisfies the profile at Level B or better. Also sets the level A flag to the appropriate value, so that satisfiesLevelA can subsequently be called.

Specified by:
satisfiesThisProfile in class PdfProfile

satisfiesLevelA

protected boolean satisfiesLevelA()
Returns true if the document was found to be Level A conformant. This returns a meaningful result only after satisfiesThisProfile has been called, and is intended for use by the Level A profiler.


xObjectOK

protected boolean xObjectOK(PdfDictionary xo)
Checks a single XObject for xObjectsOK.

Overrides:
xObjectOK in class PdfProfile

formObjectOK

protected boolean formObjectOK(PdfDictionary xo)
Checks if a Form xobject is valid. This overrides the method in XProfileBase.


imageObjectOK

protected boolean imageObjectOK(PdfDictionary xo)
Checks if a single image XObject fits the profile



jhove/doc/edu/harvard/hul/ois/jhove/module/pdf/AProfileLevelA.html0000644000707400001440000003723111510702355024250 0ustar garyusers AProfileLevelA (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.pdf
Class AProfileLevelA

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.pdf.PdfProfile
      extended by edu.harvard.hul.ois.jhove.module.pdf.AProfileLevelA

public class AProfileLevelA
extends PdfProfile

PDF profile checker for PDF/A-1 documents, Level A. See ISO 19005-1:2005(E), "Document Imaging Applications Application Issues". This profile checker is completely dependent on AProfile. It simply queries an instance of AProfile for Level A compliance.

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.pdf.PdfProfile
_module, _parser, _profileText, _raf
 
Constructor Summary
AProfileLevelA(PdfModule module)
          Constructor.
 
Method Summary
 boolean satisfiesThisProfile()
          Returns true if the document satisfies the profile at Level A.
 void setAProfile(AProfile tpr)
          Calling setAProfile links this AProfile to a TaggedProfile.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.pdf.PdfProfile
getText, hasFilters, isAlreadyOK, satisfiesProfile, xObjectOK, xObjectsOK
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

AProfileLevelA

public AProfileLevelA(PdfModule module)
Constructor. Creates an AProfileLevelA object for subsequent testing.

Parameters:
module - The module under which we are checking the profile.
Method Detail

satisfiesThisProfile

public boolean satisfiesThisProfile()
Returns true if the document satisfies the profile at Level A. This returns a meaningful result only if satisfiesThisProfile() has previously been called on the profile assigned by setAProfile.

Specified by:
satisfiesThisProfile in class PdfProfile

setAProfile

public void setAProfile(AProfile tpr)
Calling setAProfile links this AProfile to a TaggedProfile. This class gets all its information from the linked AProfile, so calling this is mandatory.



jhove/doc/edu/harvard/hul/ois/jhove/module/pdf/ArrayEnd.html0000644000707400001440000002417111510702355023162 0ustar garyusers ArrayEnd (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.pdf
Class ArrayEnd

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.pdf.Token
      extended by edu.harvard.hul.ois.jhove.module.pdf.ArrayEnd

public class ArrayEnd
extends Token

Class for Tokens which represent the "]" that closes an array.


Constructor Summary
ArrayEnd()
          Creates an instance of an ArrayEnd
 
Method Summary
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.pdf.Token
isPdfACompliant, isSimpleToken
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ArrayEnd

public ArrayEnd()
Creates an instance of an ArrayEnd



jhove/doc/edu/harvard/hul/ois/jhove/module/pdf/ArrayStart.html0000644000707400001440000002424011510702355023546 0ustar garyusers ArrayStart (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.pdf
Class ArrayStart

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.pdf.Token
      extended by edu.harvard.hul.ois.jhove.module.pdf.ArrayStart

public class ArrayStart
extends Token

Class for Tokens which represent the "[" that opens an array.


Constructor Summary
ArrayStart()
          Creates an instance of an ArrayStart
 
Method Summary
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.pdf.Token
isPdfACompliant, isSimpleToken
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ArrayStart

public ArrayStart()
Creates an instance of an ArrayStart



jhove/doc/edu/harvard/hul/ois/jhove/module/pdf/Ascii85FilterStream.html0000644000707400001440000002570611510702355025211 0ustar garyusers Ascii85FilterStream (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.pdf
Class Ascii85FilterStream

java.lang.Object
  extended by java.io.InputStream
      extended by java.io.FilterInputStream
          extended by edu.harvard.hul.ois.jhove.module.pdf.Ascii85FilterStream
All Implemented Interfaces:
java.io.Closeable

public class Ascii85FilterStream
extends java.io.FilterInputStream

This is a stub which may be implemented in the future. It appears to be unnecessary for object streams and cross-reference streams created by any version of Acrobat through 7.0, and we don't look at other types of streams.

Author:
Gary McGath

Field Summary
 
Fields inherited from class java.io.FilterInputStream
in
 
Constructor Summary
Ascii85FilterStream(java.io.InputStream in)
           
 
Method Summary
 
Methods inherited from class java.io.FilterInputStream
available, close, mark, markSupported, read, read, read, reset, skip
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

Ascii85FilterStream

public Ascii85FilterStream(java.io.InputStream in)
Parameters:
in -


jhove/doc/edu/harvard/hul/ois/jhove/module/pdf/AsciiHexFilterStream.html0000644000707400001440000002571511510702355025501 0ustar garyusers AsciiHexFilterStream (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.pdf
Class AsciiHexFilterStream

java.lang.Object
  extended by java.io.InputStream
      extended by java.io.FilterInputStream
          extended by edu.harvard.hul.ois.jhove.module.pdf.AsciiHexFilterStream
All Implemented Interfaces:
java.io.Closeable

public class AsciiHexFilterStream
extends java.io.FilterInputStream

This is a stub which may be implemented in the future. It appears to be unnecessary for object streams and cross-reference streams created by any version of Acrobat through 7.0, and we don't look at other types of streams.

Author:
Gary McGath

Field Summary
 
Fields inherited from class java.io.FilterInputStream
in
 
Constructor Summary
AsciiHexFilterStream(java.io.InputStream in)
           
 
Method Summary
 
Methods inherited from class java.io.FilterInputStream
available, close, mark, markSupported, read, read, read, reset, skip
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

AsciiHexFilterStream

public AsciiHexFilterStream(java.io.InputStream in)
Parameters:
in -


jhove/doc/edu/harvard/hul/ois/jhove/module/pdf/Comment.html0000644000707400001440000003123211510702355023053 0ustar garyusers Comment (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.pdf
Class Comment

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.pdf.Token
      extended by edu.harvard.hul.ois.jhove.module.pdf.StringValuedToken
          extended by edu.harvard.hul.ois.jhove.module.pdf.Comment

public class Comment
extends StringValuedToken

Class for Tokens which represent PDF comments.


Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.pdf.StringValuedToken
_rawBytes, _value
 
Constructor Summary
Comment()
          Creates an instance of a Comment
 
Method Summary
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.pdf.StringValuedToken
getRawBytes, getValue, setValue
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.pdf.Token
isPdfACompliant, isSimpleToken
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

Comment

public Comment()
Creates an instance of a Comment



jhove/doc/edu/harvard/hul/ois/jhove/module/pdf/CrossRefStream.html0000644000707400001440000004616711510702355024370 0ustar garyusers CrossRefStream (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.pdf
Class CrossRefStream

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.pdf.CrossRefStream

public class CrossRefStream
extends java.lang.Object

This class implements the Cross-Reference Stream, an alternative to the Cross-Reference Table starting in PDF 1.4. A cross-reference stream is identified by a startxref keyword, as opposed to the xref keyword which identifies the old-style cross-reference table. JHOVE supports only FlateDecode as a filter for cross-reference streams. This is consistent with the implementation limitation described in Appendix H of the PDF manual for Acrobat 6 and earlier.

Author:
Gary McGath

Constructor Summary
CrossRefStream(PdfStream xstrm)
          Constructor.
 
Method Summary
 int getContentStreamIndex()
          Returns the content stream index of the last object read.
 int getContentStreamObjNum()
          Returns the object number of the content stream in which this object is stored.
 int getFreeCount()
          Returns the number of free objects detected.
 int getNumObjects()
          Returns the total object count.
 int getObjNum()
          Returns number of the last object read by readNextObject ().
 int getOffset()
          Returns the offset of the last object object read.
 long getPrevXref()
          Returns the offset of the previous cross-reference stream, or -1 if none is specified.
 void initRead(java.io.RandomAccessFile raf)
          Prepares for reading the Stream.
 boolean isObjCompressed()
          Returns true if the last object read by readNextObject () is a compressed object.
 boolean isValid()
          Returns true if the PdfStream object meets the requirements of a cross-reference stream.
 boolean readNextObject()
          Reads the next object in the stream.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

CrossRefStream

public CrossRefStream(PdfStream xstrm)
Constructor.

Parameters:
xstrm - PdfStream object which contains a presumed cross-reference stream.
Method Detail

isValid

public boolean isValid()
Returns true if the PdfStream object meets the requirements of a cross-reference stream. Also extracts information from the dictionary for subsequent processing.


initRead

public void initRead(java.io.RandomAccessFile raf)
              throws java.io.IOException,
                     PdfException
Prepares for reading the Stream. If the filter List includes one which we don't support, throws a PdfException.

Throws:
java.io.IOException
PdfException

readNextObject

public boolean readNextObject()
                       throws java.io.IOException
Reads the next object in the stream. After calling readObject, it is possible to call accessors to get information about the object. For the moment, we punt on the question of how to deal with Object Streams. Free objects are skipped over while being counted. After readNextObject() returns false, the caller may call getFreeCount() to determine the number of free objects.

Returns:
true if there is an object, false if no more objects are available.
Throws:
java.io.IOException

getObjNum

public int getObjNum()
Returns number of the last object read by readNextObject (). Do not call if readNextObject () returns false.


isObjCompressed

public boolean isObjCompressed()
Returns true if the last object read by readNextObject () is a compressed object. Do not call if readNextObject () returns false.


getFreeCount

public int getFreeCount()
Returns the number of free objects detected. This may be called after readNextObject returns false, signifying that all the objects have been read and all the free objects counted.


getNumObjects

public int getNumObjects()
Returns the total object count.


getOffset

public int getOffset()
Returns the offset of the last object object read. This is meaningful only if the last object read was type 1 (uncompressed).


getContentStreamObjNum

public int getContentStreamObjNum()
Returns the object number of the content stream in which this object is stored. This is nmeaningful only if the last object read was type 2 (compressed in content stream).


getPrevXref

public long getPrevXref()
Returns the offset of the previous cross-reference stream, or -1 if none is specified.


getContentStreamIndex

public int getContentStreamIndex()
Returns the content stream index of the last object read. This is nmeaningful only if the last object read was type 2 (compressed in content stream).



jhove/doc/edu/harvard/hul/ois/jhove/module/pdf/Destination.html0000644000707400001440000003667211510702355023747 0ustar garyusers Destination (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.pdf
Class Destination

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.pdf.Destination

public final class Destination
extends java.lang.Object

Class encapsulating PDF destination objects, which refer to a page in the document. We need to make two different kinds of distinctions: between destinations that make an indirect and a direct reference to a page; and between destinations that have been reached by a direct and an indirect reference. The PDF spec allows only one level of indirection, so each of these forms has options not available to the other. We call a destination which has been reached directly an unnamed destination, and one which has been reached indirectly a named destination. We call a destination which has an indirect target an indirect destination, and one which has a page object as a target a direct destination. Applying the PDF documentation, we find that a destination can never be both named and indirect. In other words, there are really two cases, involving three kinds of destinations:

  • An unnamed, direct destination, which refers to the page object.
  • An unnamed, indirect destination, which refers to a named, direct destination, which refers to the page object.


Constructor Summary
Destination(PdfObject destObj, PdfModule module, boolean named)
          Constructor.
 
Method Summary
 PdfSimpleObject getIndirectDest()
          Returns the string naming the indirect destination.
 PdfDictionary getPageDest()
          Returns the page object dictionary if the destination is direct.
 int getPageDestObjNumber()
          Returns the object number of the page object dictionary if the destination is direct.
 boolean isIndirect()
          Returns true if the destination is indirect.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

Destination

public Destination(PdfObject destObj,
                   PdfModule module,
                   boolean named)
            throws PdfException
Constructor. If this is a named destination, the destObj may be a PdfArray or a PdfDictionary; if this is not a named destination, the destObj may be a PdfSimpleObject (encapsulating a Literal or Name) or a PdfDictionary.

Parameters:
destObj - The destination object
module - The invoking PdfModule
named - Flag indicating whether this object came from a named destination.
Throws:
PdfException
Method Detail

isIndirect

public boolean isIndirect()
Returns true if the destination is indirect.


getIndirectDest

public PdfSimpleObject getIndirectDest()
Returns the string naming the indirect destination. Returns null if the destination is not indirect.


getPageDest

public PdfDictionary getPageDest()
Returns the page object dictionary if the destination is direct. Returns null if the destination is not direct.


getPageDestObjNumber

public int getPageDestObjNumber()
                         throws java.lang.NullPointerException
Returns the object number of the page object dictionary if the destination is direct. Throws a NullPointerException otherwise.

Throws:
java.lang.NullPointerException


jhove/doc/edu/harvard/hul/ois/jhove/module/pdf/DictionaryEnd.html0000644000707400001440000002433411510702355024212 0ustar garyusers DictionaryEnd (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.pdf
Class DictionaryEnd

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.pdf.Token
      extended by edu.harvard.hul.ois.jhove.module.pdf.DictionaryEnd

public class DictionaryEnd
extends Token

Class for Tokens which represent the ">>" sequence that ends a Dictionary.


Constructor Summary
DictionaryEnd()
          Creates an instance of a DictionaryEnd
 
Method Summary
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.pdf.Token
isPdfACompliant, isSimpleToken
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

DictionaryEnd

public DictionaryEnd()
Creates an instance of a DictionaryEnd



jhove/doc/edu/harvard/hul/ois/jhove/module/pdf/DictionaryStart.html0000644000707400001440000002436311510702355024603 0ustar garyusers DictionaryStart (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.pdf
Class DictionaryStart

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.pdf.Token
      extended by edu.harvard.hul.ois.jhove.module.pdf.DictionaryStart

public class DictionaryStart
extends Token

Class for Tokens which represent the "<<" sequence that opens a Dictionary.


Constructor Summary
DictionaryStart()
          Creates an instance of a DictionaryStart
 
Method Summary
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.pdf.Token
isPdfACompliant, isSimpleToken
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

DictionaryStart

public DictionaryStart()
Creates an instance of a DictionaryStart



jhove/doc/edu/harvard/hul/ois/jhove/module/pdf/DocNode.html0000644000707400001440000006400011510702355022763 0ustar garyusers DocNode (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.pdf
Class DocNode

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.pdf.DocNode
Direct Known Subclasses:
PageObject, PageTreeNode

public abstract class DocNode
extends java.lang.Object

Abstract class for nodes of a PDF document tree.


Field Summary
protected  PdfDictionary _dict
          The dictionary which defines this node.
protected  PdfModule _module
          The PdfModule this node is associated with.
protected  boolean _pageObjectFlag
          True if this node is a PageObject.
protected  PageTreeNode _parent
          The parent node of this node.
protected  boolean _walkFinished
          Set to true when all subnodes of this node have been iterated through following a StartWalk.
 
Constructor Summary
DocNode(PdfModule module, PageTreeNode parent, PdfDictionary dict)
          Superclass constructor.
 
Method Summary
 PdfObject get(java.lang.String key, boolean inheritable)
          Get an named property.
 PdfDictionary getDict()
          Returns the page object or page tree node dictionary from which this object was constructed.
 PdfDictionary getFontResources()
          Returns the dictionary of fonts within the node's Resources dictionary, if both exist.
 PdfArray getMediaBox()
          Get the MediaBox of this node.
 DocNode getParent()
          Returns the parent of this node.
 PdfDictionary getResources()
          Get the Resources dictionary.
 boolean isPageObject()
          Returns true if this node is a PageObject.
abstract  DocNode nextDocNode()
          Get the next DocNode which is under this node.
abstract  PageObject nextPageObject()
          Get the next PageObject which is under this node.
abstract  void startWalk()
          Initialize an iterator through the descendants of this node.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

_module

protected PdfModule _module
The PdfModule this node is associated with.


_parent

protected PageTreeNode _parent
The parent node of this node.


_dict

protected PdfDictionary _dict
The dictionary which defines this node.


_pageObjectFlag

protected boolean _pageObjectFlag
True if this node is a PageObject.


_walkFinished

protected boolean _walkFinished
Set to true when all subnodes of this node have been iterated through following a StartWalk.

Constructor Detail

DocNode

public DocNode(PdfModule module,
               PageTreeNode parent,
               PdfDictionary dict)
Superclass constructor.

Parameters:
module - The PdfModule under which we're operating
parent - The parent node in the document tree; may be null only for the root node
dict - The dictionary object on which this node is based
Method Detail

isPageObject

public boolean isPageObject()
Returns true if this node is a PageObject.


startWalk

public abstract void startWalk()
Initialize an iterator through the descendants of this node.


nextPageObject

public abstract PageObject nextPageObject()
Get the next PageObject which is under this node.


nextDocNode

public abstract DocNode nextDocNode()
Get the next DocNode which is under this node. All PageTreeNodes and PageObjects are eventually returned by walking through a structure with nextNode.


getParent

public DocNode getParent()
Returns the parent of this node.


getDict

public PdfDictionary getDict()
Returns the page object or page tree node dictionary from which this object was constructed.


getResources

public PdfDictionary getResources()
                           throws PdfException
Get the Resources dictionary. Either a PageTreeNode or a PageObject can have a Resources dictionary. Returns null if there is no Resources dictionary. The object may be referenced indirectly.

Throws:
PdfException

getFontResources

public PdfDictionary getFontResources()
                               throws PdfException
Returns the dictionary of fonts within the node's Resources dictionary, if both exist. Otherwise returns null. The dictionary will most often have indirect object references as values. What is returned is not a Font dictionary, but rather a dictionary of Font dictionaries.

Throws:
PdfException

getMediaBox

public PdfArray getMediaBox()
                     throws PdfInvalidException
Get the MediaBox of this node. MediaBox is an inheritable property, so it walks up the chain of ancestors if it doesn't contain one. Returns null if none. Throws a PdfInvalidException if an invalid MediaBox is found.

Throws:
PdfInvalidException

get

public PdfObject get(java.lang.String key,
                     boolean inheritable)
Get an named property. If this object doesn't have the specified property and inheritable is true, walks up the chain of ancestors to try to find one. If no ancestor has the property or inheritable is false, returns null.



jhove/doc/edu/harvard/hul/ois/jhove/module/pdf/FileSpecification.html0000644000707400001440000003120311510702355025027 0ustar garyusers FileSpecification (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.pdf
Class FileSpecification

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.pdf.FileSpecification

public class FileSpecification
extends java.lang.Object

A class which encapsulates a file specification in PDF. A file specification may be given as either a string or a dictionary. The specification is converted to a string according to the following rules: If a PDF string object is the file specifier, that string is used, without attempting to convert file separators to the local file system. If a PDF dictionary is used, one of the following is used, in decreasing order of preference:

  • The system-neutral file specification string
  • The Unix file specification string
  • The DOS file specification string
  • The Macintosh file specification string


Constructor Summary
FileSpecification(PdfObject obj)
          Constructor.
 
Method Summary
 PdfObject getSourceObject()
          Returns the PdfObject from which the file specification was created.
 java.lang.String getSpecString()
          Returns the file specification as a string.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

FileSpecification

public FileSpecification(PdfObject obj)
                  throws PdfException
Constructor.

Parameters:
obj - A PdfDictionary with the file specification under the key "F", "Unix", "DOS", or "Mac"; or a PdfSimpleObject whose string value is the file specification. If obj is a dictionary and more than one key is specified, then the first of the keys F, Unix, DOS, and Mac to be found is used.
Throws:
PdfException
Method Detail

getSpecString

public java.lang.String getSpecString()
Returns the file specification as a string.


getSourceObject

public PdfObject getSourceObject()
Returns the PdfObject from which the file specification was created.



jhove/doc/edu/harvard/hul/ois/jhove/module/pdf/FileTokenizer.html0000644000707400001440000004774211510702355024240 0ustar garyusers FileTokenizer (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.pdf
Class FileTokenizer

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.pdf.Tokenizer
      extended by edu.harvard.hul.ois.jhove.module.pdf.FileTokenizer

public class FileTokenizer
extends Tokenizer

Tokenizer subclass which gets data from a RandomAccessFile.

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.pdf.Tokenizer
_ch, _file, PDFDOCENCODING
 
Constructor Summary
FileTokenizer(java.io.RandomAccessFile file)
           
 
Method Summary
 void backupChar()
          Back up a byte so it will be read again.
 long getFilePos()
          Gets the current position in the file.
protected  void initStream(Stream token)
          Streams can occur only in files, not in streams, so some of the initialization of a stream object goes here.
 int readChar()
          Gets a character from the file, using a buffer.
 void seek(long offset)
          Set the Tokenizer to a new position in the file.
protected  void setStreamOffset(Stream token)
          Sets the offset of a Stream to the current file position.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.pdf.Tokenizer
addLanguageCode, getLanguageCodes, getNext, getNext, getOffset, getPDFACompliant, getWSString, readChar1, scanMode, seekReset, setEncrypted, setPDFACompliant
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

FileTokenizer

public FileTokenizer(java.io.RandomAccessFile file)
Method Detail

getFilePos

public long getFilePos()
                throws java.io.IOException
Gets the current position in the file. This method is aware of buffering.

Throws:
java.io.IOException

readChar

public int readChar()
             throws java.io.IOException
Gets a character from the file, using a buffer.

Specified by:
readChar in class Tokenizer
Throws:
java.io.IOException

seek

public void seek(long offset)
          throws java.io.IOException
Set the Tokenizer to a new position in the file.

Specified by:
seek in class Tokenizer
Parameters:
offset - The offset in bytes from the start of the file.
Throws:
java.io.IOException

backupChar

public void backupChar()
Back up a byte so it will be read again.

Specified by:
backupChar in class Tokenizer

initStream

protected void initStream(Stream token)
                   throws java.io.IOException
Streams can occur only in files, not in streams, so some of the initialization of a stream object goes here.

Specified by:
initStream in class Tokenizer
Throws:
java.io.IOException

setStreamOffset

protected void setStreamOffset(Stream token)
                        throws java.io.IOException
Sets the offset of a Stream to the current file position. Only the file-based tokenizer can do this, which is why this overrides the Tokenizer method.

Specified by:
setStreamOffset in class Tokenizer
Throws:
java.io.IOException


jhove/doc/edu/harvard/hul/ois/jhove/module/pdf/Filter.html0000644000707400001440000003141311510702355022677 0ustar garyusers Filter (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.pdf
Class Filter

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.pdf.Filter

public class Filter
extends java.lang.Object

Container for a PDF stream filter.

Author:
Gary McGath

Constructor Summary
Filter(java.lang.String name)
          Constructor.
 
Method Summary
 PdfDictionary getDecodeParms()
          Returns the DecodeParms dictionary, or null if there is none.
 java.lang.String getFilterName()
          Returns the name of the filter.
 java.lang.String getNameParam()
          Returns the "Name" parameter of the filter, or null if there is no such parameter.
 void setDecodeParms(PdfDictionary parms)
          Stores the DecodeParms or FDecodeParms dictionary which is associated with this filter.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

Filter

public Filter(java.lang.String name)
Constructor.

Parameters:
name - The name of the filter.
Method Detail

getFilterName

public java.lang.String getFilterName()
Returns the name of the filter.


getDecodeParms

public PdfDictionary getDecodeParms()
Returns the DecodeParms dictionary, or null if there is none.


getNameParam

public java.lang.String getNameParam()
Returns the "Name" parameter of the filter, or null if there is no such parameter. This is normally associated with a Crypt filter, and shouldn't be confused with the name of the filter.


setDecodeParms

public void setDecodeParms(PdfDictionary parms)
Stores the DecodeParms or FDecodeParms dictionary which is associated with this filter.



jhove/doc/edu/harvard/hul/ois/jhove/module/pdf/Hexadecimal.html0000644000707400001440000003650611510702355023666 0ustar garyusers Hexadecimal (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.pdf
Class Hexadecimal

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.pdf.Token
      extended by edu.harvard.hul.ois.jhove.module.pdf.StringValuedToken
          extended by edu.harvard.hul.ois.jhove.module.pdf.Literal
              extended by edu.harvard.hul.ois.jhove.module.pdf.Hexadecimal

Deprecated.

public class Hexadecimal
extends Literal

Class for Tokens which represent hexadecimally encoded PDF strings. This class really has no justification as a separate entity. Except for the way they're written, hexadecimal strings aren't different in any way from other strings.


Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.pdf.Literal
PDFDOCENCODING
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.pdf.StringValuedToken
_rawBytes, _value
 
Constructor Summary
Hexadecimal()
          Deprecated. Creates an instance of a hexadecimal string literal
 
Method Summary
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.pdf.Literal
appendHex, convertHex, isDate, isPDFACompliant, isPDFDocEncoding, parseDate, processLiteral, setPDFDocEncoding
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.pdf.StringValuedToken
getRawBytes, getValue, setValue
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.pdf.Token
isPdfACompliant, isSimpleToken
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

Hexadecimal

public Hexadecimal()
Deprecated. 
Creates an instance of a hexadecimal string literal



jhove/doc/edu/harvard/hul/ois/jhove/module/pdf/Keyword.html0000644000707400001440000003121611510702355023077 0ustar garyusers Keyword (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.pdf
Class Keyword

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.pdf.Token
      extended by edu.harvard.hul.ois.jhove.module.pdf.StringValuedToken
          extended by edu.harvard.hul.ois.jhove.module.pdf.Keyword

public class Keyword
extends StringValuedToken

Class for Tokens which represent PDF keywords.


Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.pdf.StringValuedToken
_rawBytes, _value
 
Constructor Summary
Keyword()
          Creates an instance of a Keyword
 
Method Summary
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.pdf.StringValuedToken
getRawBytes, getValue, setValue
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.pdf.Token
isPdfACompliant, isSimpleToken
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

Keyword

public Keyword()
Creates an instance of a Keyword



jhove/doc/edu/harvard/hul/ois/jhove/module/pdf/LinearizedProfile.html0000644000707400001440000003407311510702355025066 0ustar garyusers LinearizedProfile (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.pdf
Class LinearizedProfile

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.pdf.PdfProfile
      extended by edu.harvard.hul.ois.jhove.module.pdf.LinearizedProfile

public final class LinearizedProfile
extends PdfProfile

PDF profile checker for Linearized documents.


Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.pdf.PdfProfile
_module, _parser, _profileText, _raf
 
Constructor Summary
LinearizedProfile(PdfModule module)
          Creates a PdfProfile object for subsequent testing.
 
Method Summary
 boolean satisfiesThisProfile()
          Returns true if the document satisfies the profile.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.pdf.PdfProfile
getText, hasFilters, isAlreadyOK, satisfiesProfile, xObjectOK, xObjectsOK
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

LinearizedProfile

public LinearizedProfile(PdfModule module)
Creates a PdfProfile object for subsequent testing.

Method Detail

satisfiesThisProfile

public boolean satisfiesThisProfile()
Returns true if the document satisfies the profile.

Specified by:
satisfiesThisProfile in class PdfProfile


jhove/doc/edu/harvard/hul/ois/jhove/module/pdf/Literal.html0000644000707400001440000005270511510702355023055 0ustar garyusers Literal (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.pdf
Class Literal

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.pdf.Token
      extended by edu.harvard.hul.ois.jhove.module.pdf.StringValuedToken
          extended by edu.harvard.hul.ois.jhove.module.pdf.Literal
Direct Known Subclasses:
Hexadecimal

public class Literal
extends StringValuedToken

Class for Tokens which represent PDF strings. The class maintains a field for determining whether the string is encoded as PDF encoding or UTF-16. This is determined in the course of analyzing the characters for the token.


Field Summary
static char[] PDFDOCENCODING
          Mapping between PDFDocEncoding and Unicode code points.
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.pdf.StringValuedToken
_rawBytes, _value
 
Constructor Summary
Literal()
          Creates an instance of a string literal
 
Method Summary
 void appendHex(int ch)
          Append a hex character.
 void convertHex()
          Convert the raw hex data.
 boolean isDate()
          Returns true if the string value is a parsable date.
 boolean isPDFACompliant()
          Returns true if this token doesn't violate any PDF/A rules, false if it does.
 boolean isPDFDocEncoding()
          Returns true if this string is in PDFDocEncoding, false if UTF-16.
 java.util.Date parseDate()
          Parse the string value to a date.
 long processLiteral(Tokenizer tok)
          Process the incoming characters into a string literal.
 void setPDFDocEncoding(boolean pdfDocEncoding)
          Sets the value of pDFDocEncoding.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.pdf.StringValuedToken
getRawBytes, getValue, setValue
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.pdf.Token
isPdfACompliant, isSimpleToken
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

PDFDOCENCODING

public static char[] PDFDOCENCODING
Mapping between PDFDocEncoding and Unicode code points.

Constructor Detail

Literal

public Literal()
Creates an instance of a string literal

Method Detail

appendHex

public void appendHex(int ch)
               throws PdfException
Append a hex character. This is used only for hex literals (those that start with '<').

Parameters:
ch - The integer 8-bit code for a hex character
Throws:
PdfException

processLiteral

public long processLiteral(Tokenizer tok)
                    throws java.io.IOException
Process the incoming characters into a string literal. This is used for literals delimited by parentheses, as opposed to hex strings.

Parameters:
tok - The tokenizer, passed to give access to its getChar function.
Returns:
true if the character was processed normally, false if a terminating parenthesis was reached.
Throws:
java.io.IOException

convertHex

public void convertHex()
                throws PdfException
Convert the raw hex data. Two buffers are saved: _rawBytes for the untranslated hex-encoded data, and _value for the PDF or UTF encoded string.

Throws:
PdfException

isPDFDocEncoding

public boolean isPDFDocEncoding()
Returns true if this string is in PDFDocEncoding, false if UTF-16.


setPDFDocEncoding

public void setPDFDocEncoding(boolean pdfDocEncoding)
Sets the value of pDFDocEncoding.


isDate

public boolean isDate()
Returns true if the string value is a parsable date. Conforms to the ASN.1 date format: D:YYYYMMDDHHmmSSOHH'mm' where everything before and after YYYY is optional. If we take this literally, the format is frighteningly ambiguous (imagine, for instance, leaving out hours but not minutes and seconds), so the checking is a bit loose.


parseDate

public java.util.Date parseDate()
Parse the string value to a date. PDF dates conform to the ASN.1 date format. This consists of D:YYYYMMDDHHmmSSOHH'mm' where everything before and after YYYY is optional. Adobe doesn't actually say so, but I'm assuming that if a field is included, everything to its left must be included, e.g., you can't have seconds but leave out minutes.


isPDFACompliant

public boolean isPDFACompliant()
Returns true if this token doesn't violate any PDF/A rules, false if it does.



jhove/doc/edu/harvard/hul/ois/jhove/module/pdf/Name.html0000644000707400001440000003320111510702355022327 0ustar garyusers Name (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.pdf
Class Name

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.pdf.Token
      extended by edu.harvard.hul.ois.jhove.module.pdf.StringValuedToken
          extended by edu.harvard.hul.ois.jhove.module.pdf.Name

public class Name
extends StringValuedToken

Class for Tokens which represent PDF names.


Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.pdf.StringValuedToken
_rawBytes, _value
 
Constructor Summary
Name()
          Creates an instance of a Name
 
Method Summary
 boolean isPdfACompliant()
          Returns true if it's within the PDF/A implementation limit
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.pdf.StringValuedToken
getRawBytes, getValue, setValue
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.pdf.Token
isSimpleToken
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

Name

public Name()
Creates an instance of a Name

Method Detail

isPdfACompliant

public boolean isPdfACompliant()
Returns true if it's within the PDF/A implementation limit

Overrides:
isPdfACompliant in class Token


jhove/doc/edu/harvard/hul/ois/jhove/module/pdf/NameTreeNode.html0000644000707400001440000004110511510702355023757 0ustar garyusers NameTreeNode (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.pdf
Class NameTreeNode

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.pdf.NameTreeNode

public class NameTreeNode
extends java.lang.Object

Class for nodes of a PDF name tree, e.g., ExternalFiles. Name trees are intended for large amounts of data that won't have to all be brought into memory at once; so this implementation is geared toward file-based lookup of a key rather than creating an in-memory structure. Descendant nodes become available for garbage collection if they are not on the search path for a match. Keys are collated according to raw bytes, not character encoding.


Field Summary
protected  PdfDictionary _dict
           
protected  PdfModule _module
           
protected  NameTreeNode _parent
           
 
Constructor Summary
NameTreeNode(PdfModule module, NameTreeNode parent, PdfDictionary dict)
          Constructor.
 
Method Summary
 PdfObject get(java.util.Vector key)
          Get the PdfObject which matches the key, or null if there is no match.
 boolean inBounds(java.util.Vector key)
          See if a key is within the bounds of this node.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

_module

protected PdfModule _module

_parent

protected NameTreeNode _parent

_dict

protected PdfDictionary _dict
Constructor Detail

NameTreeNode

public NameTreeNode(PdfModule module,
                    NameTreeNode parent,
                    PdfDictionary dict)
             throws PdfException
Constructor.

Parameters:
module - The PdfModule under which we're operating
parent - The parent node in the document tree; may be null only for the root node
dict - The dictionary object on which this node is based
Throws:
PdfException
Method Detail

inBounds

public boolean inBounds(java.util.Vector key)
See if a key is within the bounds of this node. All keys are within the bounds of the root node.


get

public PdfObject get(java.util.Vector key)
              throws PdfException
Get the PdfObject which matches the key, or null if there is no match.

Throws:
PdfException


jhove/doc/edu/harvard/hul/ois/jhove/module/pdf/Numeric.html0000644000707400001440000003604311510702355023060 0ustar garyusers Numeric (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.pdf
Class Numeric

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.pdf.Token
      extended by edu.harvard.hul.ois.jhove.module.pdf.Numeric

public class Numeric
extends Token

Class for Tokens which represent PDF numbers. Numeric values are stored as double if they have a real value, or as int if they have an integer value. The implementation notes state that the maximum value of an integer on a 32-bit machine is 2 ^ 31 - 1. However, they also say that byte offsets have a limit of 10 decimal digits, which is a larger value. So we store integer values as long.


Constructor Summary
Numeric()
          Creates an instance of a Numeric
 
Method Summary
 int getIntegerValue()
          Returns the value, converted to an integer
 long getLongValue()
          Returns the value, converted to a long
 double getValue()
          Returns the value of this Numeric as a double
 boolean isPdfACompliant()
          Returns true if this is within PDF/A implementation limits.
 boolean isReal()
          Returns true if the value is stored as a floating-point number.
 void setValue(double value)
          Set this object's value to a double.
 void setValue(long value)
          Set this object's value to a long.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.pdf.Token
isSimpleToken
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

Numeric

public Numeric()
Creates an instance of a Numeric

Method Detail

getIntegerValue

public int getIntegerValue()
Returns the value, converted to an integer


getLongValue

public long getLongValue()
Returns the value, converted to a long


getValue

public double getValue()
Returns the value of this Numeric as a double


isReal

public boolean isReal()
Returns true if the value is stored as a floating-point number.


setValue

public void setValue(double value)
Set this object's value to a double.


setValue

public void setValue(long value)
Set this object's value to a long.


isPdfACompliant

public boolean isPdfACompliant()
Returns true if this is within PDF/A implementation limits.

Overrides:
isPdfACompliant in class Token


jhove/doc/edu/harvard/hul/ois/jhove/module/pdf/ObjectStream.html0000644000707400001440000003214511510702355024037 0ustar garyusers ObjectStream (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.pdf
Class ObjectStream

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.pdf.ObjectStream

public class ObjectStream
extends java.lang.Object

This class implements the Object Stream, a new way of storing objects starting in PDF 1.4. An object stream can contain one or more objects, as described in Section 3.4 of the PostScript manual. JHOVE supports only FlateDecode as a filter for cross-reference streams. This is consistent with the implementation limitation described in Appendix H of the PDF manual for Acrobat 6 and earlier.

Author:
Gary McGath

Constructor Summary
ObjectStream(PdfStream ostrm, java.io.RandomAccessFile raf)
          Constructor.
 
Method Summary
 PdfObject getObject(int objnum)
          Extracts an object from the stream.
 boolean isValid()
          Checks the validity of the stream dictionary, and extracts information necessary for subsequent reading.
 void readIndex()
          Reads the index of the object stream.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ObjectStream

public ObjectStream(PdfStream ostrm,
                    java.io.RandomAccessFile raf)
Constructor.

Method Detail

isValid

public boolean isValid()
Checks the validity of the stream dictionary, and extracts information necessary for subsequent reading.


readIndex

public void readIndex()
               throws PdfException,
                      java.io.IOException
Reads the index of the object stream.

Throws:
PdfException
java.io.IOException

getObject

public PdfObject getObject(int objnum)
                    throws PdfException
Extracts an object from the stream.

Throws:
PdfException


jhove/doc/edu/harvard/hul/ois/jhove/module/pdf/PageLabelNode.html0000644000707400001440000005730311510702355024102 0ustar garyusers PageLabelNode (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.pdf
Class PageLabelNode

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.pdf.PageLabelNode

public class PageLabelNode
extends java.lang.Object

Class for nodes of a PDF number tree.


Field Summary
protected  PdfDictionary _dict
          The dictionary which defines this node.
protected  PdfModule _module
          The PdfModule this node is associated with.
protected  PageLabelNode _parent
          The parent node of this node.
protected  boolean _walkFinished
          Set to true when all subnodes of this node have been iterated through following a StartWalk.
 
Constructor Summary
PageLabelNode(PdfModule module, PageLabelNode parent, PdfDictionary dict)
          Superclass constructor.
 
Method Summary
 PdfObject _getCurrentValue()
          Returns value associated with current key
 void buildSubtree()
          Build the subtree of descendants of this node, using the Kids entry in the dictionary.
 boolean findNextKeyValue()
          Obtain the next key-value pair from the tree.
 int getCurrentKey()
          Returns key at current position in traversing tree
 int getPrevKey()
          Returns key previously obtained in traversing tree
 PdfObject getPrevValue()
          Returns value associated with key previously obtained in traversing tree
static java.lang.String intToBase26(int n, boolean upperCase)
          A convenience method to turn integers into "letter" page numbers as defined for PDF.
static java.lang.String intToRoman(int n, boolean upperCase)
          A convenience method to turn integers into Roman numerals, for the generation of page labels.
 PageLabelNode nextLeafObject()
          Get the next leaf object which is under this node.
 void startWalk()
          Initialize an iterator through the descendants of this node.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

_module

protected PdfModule _module
The PdfModule this node is associated with.


_parent

protected PageLabelNode _parent
The parent node of this node.


_dict

protected PdfDictionary _dict
The dictionary which defines this node.


_walkFinished

protected boolean _walkFinished
Set to true when all subnodes of this node have been iterated through following a StartWalk.

Constructor Detail

PageLabelNode

public PageLabelNode(PdfModule module,
                     PageLabelNode parent,
                     PdfDictionary dict)
Superclass constructor.

Parameters:
module - The PdfModule under which we're operating
parent - The parent node in the document tree; may be null only for the root node
dict - The dictionary object on which this node is based
Method Detail

buildSubtree

public void buildSubtree()
                  throws PdfException
Build the subtree of descendants of this node, using the Kids entry in the dictionary. Leaf nodes are recognized by not having a Kids entry.

Throws:
PdfException

startWalk

public void startWalk()
Initialize an iterator through the descendants of this node.


nextLeafObject

public PageLabelNode nextLeafObject()
Get the next leaf object which is under this node. This function is designed such that calling startWalk() and then repeatedly calling nextLeafObject() will return all the leaf objects in the tree under this node, and finally will return null when there are no more. A leaf object is one which has no Kids; it is required to have a Nums entry.


findNextKeyValue

public boolean findNextKeyValue()
                         throws PdfException
Obtain the next key-value pair from the tree. This returns true if a pair is available, false if not. After this is called, getCurrentKey and getCurrentValue may be called to retrieve the key and value thus found. Each time this is called, currentKey and currentValue get copied into prevKey and prevValue.

Throws:
PdfException

getCurrentKey

public int getCurrentKey()
Returns key at current position in traversing tree


_getCurrentValue

public PdfObject _getCurrentValue()
Returns value associated with current key


getPrevKey

public int getPrevKey()
Returns key previously obtained in traversing tree


getPrevValue

public PdfObject getPrevValue()
Returns value associated with key previously obtained in traversing tree


intToRoman

public static java.lang.String intToRoman(int n,
                                          boolean upperCase)
A convenience method to turn integers into Roman numerals, for the generation of page labels.


intToBase26

public static java.lang.String intToBase26(int n,
                                           boolean upperCase)
A convenience method to turn integers into "letter" page numbers as defined for PDF. The first 26 pages are A-Z, the next 26 AA-ZZ, etc.



jhove/doc/edu/harvard/hul/ois/jhove/module/pdf/PageObject.html0000644000707400001440000006215411510702355023463 0ustar garyusers PageObject (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.pdf
Class PageObject

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.pdf.DocNode
      extended by edu.harvard.hul.ois.jhove.module.pdf.PageObject

public class PageObject
extends DocNode

Class encapsulating a PDF page object node.


Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.pdf.DocNode
_dict, _module, _pageObjectFlag, _parent, _walkFinished
 
Constructor Summary
PageObject(PdfModule module, PageTreeNode parent, PdfDictionary dict)
          Superclass constructor.
 
Method Summary
 PdfArray getAnnotations()
          Return the page's Annots array of dictionaries, or null if none
 PdfArray getArtBox()
          Returns the ArtBox for the page, or null if none.
 PdfArray getBleedBox()
          Returns the BleedBox for the page, or null if none.
 java.util.List getContentStreams()
          Returns the List of content streams.
 PdfArray getTrimBox()
          Returns the TrimBox for the page, or null if none.
 void loadContent(PdfModule module)
          Find the content stream(s) for this page.
 DocNode nextDocNode()
          Called to walk through all page tree nodes and page objects.
 PageObject nextPageObject()
          Returns this object the first time it is called after startWalk is called, then null when called again.
 void startWalk()
          Call this function when recursively walking through a document tree.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.pdf.DocNode
get, getDict, getFontResources, getMediaBox, getParent, getResources, isPageObject
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

PageObject

public PageObject(PdfModule module,
                  PageTreeNode parent,
                  PdfDictionary dict)
Superclass constructor.

Parameters:
module - The module under which we're operating
parent - The parent node in the document tree; may be null only for the root node
dict - The dictionary object on which this node is based
Method Detail

loadContent

public void loadContent(PdfModule module)
                 throws PdfException
Find the content stream(s) for this page. This is called when the page tree content stream is built by PageTreeNode. getContentStreams may subsequently be called to get the content.

Throws:
PdfException

getContentStreams

public java.util.List getContentStreams()
Returns the List of content streams. The list elements are of type PdfStream.


getAnnotations

public PdfArray getAnnotations()
                        throws PdfException
Return the page's Annots array of dictionaries, or null if none

Throws:
PdfException

startWalk

public void startWalk()
Call this function when recursively walking through a document tree. This allows nextPageObject () to be return this object exactly once.

Specified by:
startWalk in class DocNode

nextPageObject

public PageObject nextPageObject()
Returns this object the first time it is called after startWalk is called, then null when called again. This allows a recursive walk through a document tree to work properly.

Specified by:
nextPageObject in class DocNode

nextDocNode

public DocNode nextDocNode()
Called to walk through all page tree nodes and page objects. Functionally identical with nextPageObject.

Specified by:
nextDocNode in class DocNode

getArtBox

public PdfArray getArtBox()
                   throws PdfException
Returns the ArtBox for the page, or null if none. Throws a PDFException if there is an ArtBox but it is not a rectangle.

Throws:
PdfException

getTrimBox

public PdfArray getTrimBox()
                    throws PdfException
Returns the TrimBox for the page, or null if none. Throws a PDFException if there is an TrimBox but it is not a rectangle.

Throws:
PdfException

getBleedBox

public PdfArray getBleedBox()
                     throws PdfException
Returns the BleedBox for the page, or null if none. Throws a PDFException if there is an BleedBox but it is not a rectangle.

Throws:
PdfException


jhove/doc/edu/harvard/hul/ois/jhove/module/pdf/PageTreeNode.html0000644000707400001440000005115611510702355023762 0ustar garyusers PageTreeNode (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.pdf
Class PageTreeNode

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.pdf.DocNode
      extended by edu.harvard.hul.ois.jhove.module.pdf.PageTreeNode

public class PageTreeNode
extends DocNode

Class encapsulating a PDF page tree node. The page tree is built such that callers can walk through it by calling startWalk and then calling nextDocNode (for all nodes) or nextPageObject (for pages only) repeatedly.


Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.pdf.DocNode
_dict, _module, _pageObjectFlag, _parent, _walkFinished
 
Constructor Summary
PageTreeNode(PdfModule module, PageTreeNode parent, PdfDictionary dict)
          Superclass constructor.
 
Method Summary
 void buildSubtree(boolean toplevel, int recGuard)
          Builds the subtree of descendants of this node, using the Kids entry in the dictionary.
 void buildSubtree(boolean toplevel, int recGuard, int objNumber, int genNumber)
          Builds the subtree of descendants of this node, using the Kids entry in the dictionary.
 DocNode nextDocNode()
          Get the next DocNode which is under this node.
 PageObject nextPageObject()
          Get the next PageObject which is under this node.
 void startWalk()
          Initialize an iterator through the descendants of this node.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.pdf.DocNode
get, getDict, getFontResources, getMediaBox, getParent, getResources, isPageObject
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

PageTreeNode

public PageTreeNode(PdfModule module,
                    PageTreeNode parent,
                    PdfDictionary dict)
Superclass constructor.

Parameters:
module - The PDFModule under which we're operating
parent - The parent node in the document tree; may be null only for the root node
dict - The dictionary object on which this node is based
Method Detail

buildSubtree

public void buildSubtree(boolean toplevel,
                         int recGuard)
                  throws PdfException
Builds the subtree of descendants of this node, using the Kids entry in the dictionary.

Throws:
PdfException

buildSubtree

public void buildSubtree(boolean toplevel,
                         int recGuard,
                         int objNumber,
                         int genNumber)
                  throws PdfException
Builds the subtree of descendants of this node, using the Kids entry in the dictionary.

Throws:
PdfException

startWalk

public void startWalk()
Initialize an iterator through the descendants of this node.

Specified by:
startWalk in class DocNode

nextPageObject

public PageObject nextPageObject()
Get the next PageObject which is under this node. This function is designed such that calling startWalk() and then repeatedly calling nextPageObject() will return all the PageObjects in the tree under this node, and finally will return null when there are no more.

Specified by:
nextPageObject in class DocNode

nextDocNode

public DocNode nextDocNode()
Get the next DocNode which is under this node. This function is designed such that calling startWalk() and then repeatedly calling nextPageObject() will return first this node, then all the DocNodes in the tree under this node. It finally will return null when there are no more.

Specified by:
nextDocNode in class DocNode


jhove/doc/edu/harvard/hul/ois/jhove/module/pdf/Parser.html0000644000707400001440000007763111510702355022722 0ustar garyusers Parser (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.pdf
Class Parser

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.pdf.Parser

public class Parser
extends java.lang.Object

The Parser class implements some limited syntactic analysis for PDF. It isn't by any means intended to be a full parser. Its main job is to track nesting of syntactic elements such as dictionary and array beginnings and ends.


Constructor Summary
Parser(Tokenizer tokenizer)
          Constructor.
 
Method Summary
 int getArrayDepth()
          Returns the number of array starts not yet matched by array ends.
 int getDictDepth()
          Returns the number of dictionary starts not yet matched by dictionary ends.
 java.util.Set getLanguageCodes()
          Returns the language code set from the Tokenizer.
 Token getNext()
          Gets a token.
 Token getNext(java.lang.Class clas, java.lang.String errMsg)
          A class-sensitive version of getNext.
 Token getNext(long max)
          Gets a token.
 long getOffset()
          Returns the current offset into the file.
 boolean getPDFACompliant()
          Returns false if either the parser or the tokenizer has detected non-compliance with PDF/A restrictions.
 java.lang.String getWSString()
          Returns the Tokenizer's current whitespace string.
 PdfArray readArray()
          Reads an array.
 PdfDictionary readDictionary()
          Reads a dictionary.
 PdfObject readObject()
          Reads an object.
 PdfObject readObjectDef()
          Reads an object definition, from wherever we are in the stream to the completion of one full object after the obj keyword.
 PdfObject readObjectDef(Numeric objNumTok)
          Reads an object definition, given the first numeric object, which has already been read and is passed as an argument.
 void reset()
          Clear the state of the parser so that it can start reading at a different place in the file.
 void resetLoose()
          Clear the state of the parser so that it can start reading at a different place in the file and ignore any nesting errors.
 void scanMode(boolean flag)
          If true, do not attempt to parse non-whitespace delimited tokens, e.g., literal and hexadecimal strings.
 void seek(long offset)
          Positions the file to the specified offset, and resets the state for a new token stream.
 void setEncrypted(boolean encrypted)
          Tells this Parser, and its Tokenizer, whether the file is encrypted.
 void setObjectMap(java.util.Map objectMap)
          Set the object map on which the parser will work.
 void setPDFACompliant(boolean pdfACompliant)
          Set the value of the pdfACompliant flag.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

Parser

public Parser(Tokenizer tokenizer)
Constructor. A Parser works with a Tokenizer that feeds it tokens.

Parameters:
tokenizer - The Tokenizer which the parser will use
Method Detail

setObjectMap

public void setObjectMap(java.util.Map objectMap)
Set the object map on which the parser will work.


reset

public void reset()
Clear the state of the parser so that it can start reading at a different place in the file. Clears the stack and the dictionary and array depth counters.


resetLoose

public void resetLoose()
Clear the state of the parser so that it can start reading at a different place in the file and ignore any nesting errors. Sets the stack and the dictionary and array depth counters to a large number so that nesting exceptions won't be thrown.


getNext

public Token getNext()
              throws java.io.IOException,
                     PdfException
Gets a token. Uses Tokenizer.getNext, and keeps track of the depth of dictionary and array nesting.

Throws:
java.io.IOException
PdfException

getNext

public Token getNext(long max)
              throws java.io.IOException,
                     PdfException
Gets a token. Uses Tokenizer.getNext, and keeps track of the depth of dictionary and array nesting.

Parameters:
max - Maximum allowable size of the token
Throws:
java.io.IOException
PdfException

getNext

public Token getNext(java.lang.Class clas,
                     java.lang.String errMsg)
              throws java.io.IOException,
                     PdfException
A class-sensitive version of getNext. The token which is obtained must be of the specified class (or a subclass thereof), or a PdfInvalidException with message errMsg will be thrown.

Throws:
java.io.IOException
PdfException

getDictDepth

public int getDictDepth()
Returns the number of dictionary starts not yet matched by dictionary ends.


setEncrypted

public void setEncrypted(boolean encrypted)
Tells this Parser, and its Tokenizer, whether the file is encrypted.


getArrayDepth

public int getArrayDepth()
Returns the number of array starts not yet matched by array ends.


getWSString

public java.lang.String getWSString()
Returns the Tokenizer's current whitespace string.


getLanguageCodes

public java.util.Set getLanguageCodes()
Returns the language code set from the Tokenizer.


getPDFACompliant

public boolean getPDFACompliant()
Returns false if either the parser or the tokenizer has detected non-compliance with PDF/A restrictions. A value of true is no guarantee that the file is compliant.


setPDFACompliant

public void setPDFACompliant(boolean pdfACompliant)
Set the value of the pdfACompliant flag. This may be used to clear previous detection of noncompliance. If the parameter has a value of true, the tokenizer's pdfACompliant flag is also set to true.


readObjectDef

public PdfObject readObjectDef()
                        throws java.io.IOException,
                               PdfException
Reads an object definition, from wherever we are in the stream to the completion of one full object after the obj keyword.

Throws:
java.io.IOException
PdfException

readObjectDef

public PdfObject readObjectDef(Numeric objNumTok)
                        throws java.io.IOException,
                               PdfException
Reads an object definition, given the first numeric object, which has already been read and is passed as an argument. This is called by the no-argument readObjectDef; the only other case in which it will be called is for a cross-reference stream, which can be distinguished from a cross-reference table only once the first token is read.

Throws:
java.io.IOException
PdfException

readObject

public PdfObject readObject()
                     throws java.io.IOException,
                            PdfException
Reads an object. By design, this reader has a number of limitations.
  • It doesn't retain the contents of streams
  • It doesn't recognize a stream when it's pointing at the stream's dictionary; it will just read the dictionary
Functions which it uses may call it recursively to build up structures. If it encounters a token inappropriate for an object start, it throws a PdfException on which getToken() may be called to retrieve that token.

Throws:
java.io.IOException
PdfException

readArray

public PdfArray readArray()
                   throws java.io.IOException,
                          PdfException
Reads an array. When this is called, we have already read the ArrayStart token, and arrayDepth has been incremented to reflect this.

Throws:
java.io.IOException
PdfException

readDictionary

public PdfDictionary readDictionary()
                             throws java.io.IOException,
                                    PdfException
Reads a dictionary. When this is called, we have already read the DictionaryStart token, and dictDepth has been incremented to reflect this. Only for use in this special case, where we're picking up a dictionary in midstream.

Throws:
java.io.IOException
PdfException

getOffset

public long getOffset()
Returns the current offset into the file.


seek

public void seek(long offset)
          throws java.io.IOException,
                 PdfException
Positions the file to the specified offset, and resets the state for a new token stream.

Throws:
java.io.IOException
PdfException

scanMode

public void scanMode(boolean flag)
If true, do not attempt to parse non-whitespace delimited tokens, e.g., literal and hexadecimal strings.

Parameters:
flag - Scan mode flag


jhove/doc/edu/harvard/hul/ois/jhove/module/pdf/PdfArray.html0000644000707400001440000004024711510702355023167 0ustar garyusers PdfArray (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.pdf
Class PdfArray

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.pdf.PdfObject
      extended by edu.harvard.hul.ois.jhove.module.pdf.PdfArray

public class PdfArray
extends PdfObject

A representation of a PDF array object.


Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.pdf.PdfObject
_genNumber, _objNumber
 
Constructor Summary
PdfArray()
          Creates a PdfArray object with empty contents.
PdfArray(int objNumber, int genNumber)
          Creates a PdfArray object.
 
Method Summary
 void add(PdfObject obj)
          Adds an object to the array.
 java.util.Vector getContent()
          Return the contents of the array as a Vector.
 boolean isPdfACompliant()
          Report if it's within implementation limits defined for PDF/A.
 java.lang.String toPipeline()
          Concatenate the elements, if they are PdfSimpleObjects, into a string separated by spaces.
 double[] toRectangle()
          Attempts to convert this Array to a PDF rectangle.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.pdf.PdfObject
getGenNumber, getObjNumber, setGenNumber, setObjNumber
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

PdfArray

public PdfArray(int objNumber,
                int genNumber)
Creates a PdfArray object.

Parameters:
objNumber - The PDF object number
genNumber - The PDF generation number

PdfArray

public PdfArray()
Creates a PdfArray object with empty contents.

Method Detail

add

public void add(PdfObject obj)
Adds an object to the array.


getContent

public java.util.Vector getContent()
Return the contents of the array as a Vector.


isPdfACompliant

public boolean isPdfACompliant()
Report if it's within implementation limits defined for PDF/A.


toPipeline

public java.lang.String toPipeline()
Concatenate the elements, if they are PdfSimpleObjects, into a string separated by spaces. Return an empty string if there are no PdfSimpleObjects.


toRectangle

public double[] toRectangle()
Attempts to convert this Array to a PDF rectangle. If the Array is a valid rectangle (i.e., an array of exactly four numbers), returns a Java array of four doubles reflecting the rectangle. Otherwise returns null.



jhove/doc/edu/harvard/hul/ois/jhove/module/pdf/PdfDictionary.html0000644000707400001440000004026411510702355024215 0ustar garyusers PdfDictionary (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.pdf
Class PdfDictionary

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.pdf.PdfObject
      extended by edu.harvard.hul.ois.jhove.module.pdf.PdfDictionary

public class PdfDictionary
extends PdfObject

A representation of a PDF dictionary object.


Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.pdf.PdfObject
_genNumber, _objNumber
 
Constructor Summary
PdfDictionary()
          Creates a PdfDictionary object.
PdfDictionary(int objNumber, int genNumber)
          Creates a PdfDictionary object.
 
Method Summary
 void add(java.lang.String key, PdfObject value)
          Accumulate an entry into the dictionary.
 PdfObject get(java.lang.String key)
          Get the PDFObject whose key has the specified string value.
 boolean isPdfACompliant()
          Return true if it's within the PDF/A implementation limit.
 java.util.Iterator iterator()
          Returns an iterator which will successively return all the values in the dictionary.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.pdf.PdfObject
getGenNumber, getObjNumber, setGenNumber, setObjNumber
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

PdfDictionary

public PdfDictionary(int objNumber,
                     int genNumber)
Creates a PdfDictionary object.

Parameters:
objNumber - The PDF object number
genNumber - The PDF generation number

PdfDictionary

public PdfDictionary()
Creates a PdfDictionary object.

Method Detail

add

public void add(java.lang.String key,
                PdfObject value)
Accumulate an entry into the dictionary.

Parameters:
key - String value of the dictionary key
value - PdfObject encapsulation of the dictionary value

get

public PdfObject get(java.lang.String key)
Get the PDFObject whose key has the specified string value. Returns null if there is no such key.

Parameters:
key - The string value of the key to look up.

isPdfACompliant

public boolean isPdfACompliant()
Return true if it's within the PDF/A implementation limit.


iterator

public java.util.Iterator iterator()
Returns an iterator which will successively return all the values in the dictionary.



jhove/doc/edu/harvard/hul/ois/jhove/module/pdf/PdfException.html0000644000707400001440000003603211510702355024044 0ustar garyusers PdfException (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.pdf
Class PdfException

java.lang.Object
  extended by java.lang.Throwable
      extended by java.lang.Exception
          extended by edu.harvard.hul.ois.jhove.module.pdf.PdfException
All Implemented Interfaces:
java.io.Serializable
Direct Known Subclasses:
PdfInvalidException, PdfMalformedException

public abstract class PdfException
extends java.lang.Exception

Abstract exception subclass used internally by the PDF module. Throwing a PDFException indicates that the document is ill-formed or invalid; use the appropriate subclass to indicate which.

See Also:
Serialized Form

Constructor Summary
PdfException(java.lang.String m)
          Create a PdfException.
PdfException(java.lang.String m, long offset)
          Create a PdfException with specified offset.
PdfException(java.lang.String m, long offset, Token token)
          Create a PdfException with specified offset and token.
 
Method Summary
abstract  void disparage(RepInfo info)
          Performs the appropriate disparagement act on a RepInfo object, such as setting the valid or well-formed flag to false.
 long getOffset()
          Returns the offset at which the exception occurred.
 Token getToken()
          Return the token associated with the exception.
 
Methods inherited from class java.lang.Throwable
fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

PdfException

public PdfException(java.lang.String m)
Create a PdfException.


PdfException

public PdfException(java.lang.String m,
                    long offset)
Create a PdfException with specified offset.


PdfException

public PdfException(java.lang.String m,
                    long offset,
                    Token token)
Create a PdfException with specified offset and token.

Method Detail

getOffset

public long getOffset()
Returns the offset at which the exception occurred.


getToken

public Token getToken()
Return the token associated with the exception.


disparage

public abstract void disparage(RepInfo info)
Performs the appropriate disparagement act on a RepInfo object, such as setting the valid or well-formed flag to false.



jhove/doc/edu/harvard/hul/ois/jhove/module/pdf/PdfFlateInputStream.html0000644000707400001440000004003511510702355025333 0ustar garyusers PdfFlateInputStream (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.pdf
Class PdfFlateInputStream

java.lang.Object
  extended by java.io.InputStream
      extended by java.io.FilterInputStream
          extended by edu.harvard.hul.ois.jhove.module.pdf.PdfFlateInputStream
All Implemented Interfaces:
java.io.Closeable

public class PdfFlateInputStream
extends java.io.FilterInputStream

An enhancement of InflaterInputStream to support Predictor and Columns. How complicated does this get? Do I need to read the whole thing before I can "predict" anything?

Author:
Gary McGath

Field Summary
 
Fields inherited from class java.io.FilterInputStream
in
 
Constructor Summary
PdfFlateInputStream(java.io.InputStream is)
          Constructor with null DecodeParms dictionary
PdfFlateInputStream(java.io.InputStream is, PdfDictionary parms)
          Constructor with specified DecodeParms dictionary
 
Method Summary
 int read()
          Reads one byte from the stream.
 int read(byte[] b)
          Reads the specified number of bytes into a buffer.
 int read(byte[] b, int off, int len)
          Reads the specified number of bytes into a buffer with offset and length specified.
 long skip(long n)
           
 
Methods inherited from class java.io.FilterInputStream
available, close, mark, markSupported, reset
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

PdfFlateInputStream

public PdfFlateInputStream(java.io.InputStream is)
Constructor with null DecodeParms dictionary

Parameters:
is - InputStream to be inflated

PdfFlateInputStream

public PdfFlateInputStream(java.io.InputStream is,
                           PdfDictionary parms)
Constructor with specified DecodeParms dictionary

Parameters:
is - InputStream to be inflated
parms - DecodeParms dictionary. May be null, in which case this is equivalent to the one-parameter constructor.
Method Detail

read

public int read()
         throws java.io.IOException
Reads one byte from the stream. Returns -1 if end of file is reached.

Overrides:
read in class java.io.FilterInputStream
Throws:
java.io.IOException

read

public int read(byte[] b)
         throws java.io.IOException
Reads the specified number of bytes into a buffer. Returns the number of bytes actually read, or -1 if end of file has been reached.

Overrides:
read in class java.io.FilterInputStream
Throws:
java.io.IOException

read

public int read(byte[] b,
                int off,
                int len)
         throws java.io.IOException
Reads the specified number of bytes into a buffer with offset and length specified. Returns -1 if end of file has been reached. No matter how much is requested, this will only return one row's worth of data at most.

Overrides:
read in class java.io.FilterInputStream
Throws:
java.io.IOException

skip

public long skip(long n)
          throws java.io.IOException
Overrides:
skip in class java.io.FilterInputStream
Throws:
java.io.IOException


jhove/doc/edu/harvard/hul/ois/jhove/module/pdf/PdfIndirectObj.html0000644000707400001440000003254411510702355024306 0ustar garyusers PdfIndirectObj (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.pdf
Class PdfIndirectObj

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.pdf.PdfObject
      extended by edu.harvard.hul.ois.jhove.module.pdf.PdfIndirectObj

public class PdfIndirectObj
extends PdfObject

A representation of a PDF indirect object reference.


Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.pdf.PdfObject
_genNumber, _objNumber
 
Constructor Summary
PdfIndirectObj(int objNumber, int genNumber, java.util.Map objectMap)
          Creates a PdfIndirectObj object.
 
Method Summary
 PdfObject getObject()
          Retrieves the object which is referenced.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.pdf.PdfObject
getGenNumber, getObjNumber, setGenNumber, setObjNumber
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

PdfIndirectObj

public PdfIndirectObj(int objNumber,
                      int genNumber,
                      java.util.Map objectMap)
Creates a PdfIndirectObj object.

Parameters:
objNumber - The PDF object number
genNumber - The PDF generation number
objectMap - The object map for the PDF file
Method Detail

getObject

public PdfObject getObject()
Retrieves the object which is referenced. Uses the cached reference if there is one; caches the reference if there wasn't one before.



jhove/doc/edu/harvard/hul/ois/jhove/module/pdf/PdfInvalidException.html0000644000707400001440000003572411510702355025362 0ustar garyusers PdfInvalidException (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.pdf
Class PdfInvalidException

java.lang.Object
  extended by java.lang.Throwable
      extended by java.lang.Exception
          extended by edu.harvard.hul.ois.jhove.module.pdf.PdfException
              extended by edu.harvard.hul.ois.jhove.module.pdf.PdfInvalidException
All Implemented Interfaces:
java.io.Serializable

public final class PdfInvalidException
extends PdfException

Exception subclass used internally by the PDF module. A PdfInvalidException is thrown when a condition indicates that the document is invalid but not necessarily ill-formed.

See Also:
Serialized Form

Constructor Summary
PdfInvalidException(java.lang.String m)
          Creates a PdfInvalidException.
PdfInvalidException(java.lang.String m, long offset)
          Creates a PdfInvalidException with specified offset.
PdfInvalidException(java.lang.String m, long offset, Token token)
          Creates a PdfInvalidException with specified offset and token.
 
Method Summary
 void disparage(RepInfo info)
          Performs the appropriate disparagement act on a RepInfo object.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.pdf.PdfException
getOffset, getToken
 
Methods inherited from class java.lang.Throwable
fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

PdfInvalidException

public PdfInvalidException(java.lang.String m)
Creates a PdfInvalidException.


PdfInvalidException

public PdfInvalidException(java.lang.String m,
                           long offset)
Creates a PdfInvalidException with specified offset.


PdfInvalidException

public PdfInvalidException(java.lang.String m,
                           long offset,
                           Token token)
Creates a PdfInvalidException with specified offset and token.

Method Detail

disparage

public void disparage(RepInfo info)
Performs the appropriate disparagement act on a RepInfo object. For a PdfInvalidException, this is to call setValid (false).

Specified by:
disparage in class PdfException


jhove/doc/edu/harvard/hul/ois/jhove/module/pdf/PdfMalformedException.html0000644000707400001440000003626711510702355025705 0ustar garyusers PdfMalformedException (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.pdf
Class PdfMalformedException

java.lang.Object
  extended by java.lang.Throwable
      extended by java.lang.Exception
          extended by edu.harvard.hul.ois.jhove.module.pdf.PdfException
              extended by edu.harvard.hul.ois.jhove.module.pdf.PdfMalformedException
All Implemented Interfaces:
java.io.Serializable

public class PdfMalformedException
extends PdfException

Exception subclass used internally by the PDF module. A PdfMalformedException is thrown when a condition indicates that the document is not well-formed.

See Also:
PdfInvalidException, Serialized Form

Constructor Summary
PdfMalformedException(java.lang.String m)
          Creates a PdfMalformedException.
PdfMalformedException(java.lang.String m, long offset)
          Creates a PdfMalformedException with specified offset.
PdfMalformedException(java.lang.String m, long offset, Token token)
          Creates a PdfMalformedException with specified offset and token.
 
Method Summary
 void disparage(RepInfo info)
          Performs the appropriate disparagement act on a RepInfo object.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.pdf.PdfException
getOffset, getToken
 
Methods inherited from class java.lang.Throwable
fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

PdfMalformedException

public PdfMalformedException(java.lang.String m)
Creates a PdfMalformedException.


PdfMalformedException

public PdfMalformedException(java.lang.String m,
                             long offset)
Creates a PdfMalformedException with specified offset.


PdfMalformedException

public PdfMalformedException(java.lang.String m,
                             long offset,
                             Token token)
Creates a PdfMalformedException with specified offset and token.

Method Detail

disparage

public void disparage(RepInfo info)
Performs the appropriate disparagement act on a RepInfo object. For a PdfInvalidException, this is to call setValid (false).

Specified by:
disparage in class PdfException


jhove/doc/edu/harvard/hul/ois/jhove/module/pdf/PdfObject.html0000644000707400001440000003727611510702355023327 0ustar garyusers PdfObject (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.pdf
Class PdfObject

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.pdf.PdfObject
Direct Known Subclasses:
PdfArray, PdfDictionary, PdfIndirectObj, PdfSimpleObject, PdfStream

public abstract class PdfObject
extends java.lang.Object

The abstract superclass for all representations of objects in PDF files. Objects may be created using the obj syntax, in which case they have an object and generation number, or they may be parts of other objects, in which case they don't. All subclasses should implement a constructor which has the object and generation numbers as its last two arguments, and one which has the same arguments except for omitting these two.


Field Summary
protected  int _genNumber
          PDF generation number.
protected  int _objNumber
          PDF object number.
 
Constructor Summary
PdfObject()
          Superclass constructor for which the object and generation number will be added separately or not at all.
PdfObject(int objNumber, int genNumber)
          Superclass constructor which should be called for all PdfObject instances that include an object and generation number.
 
Method Summary
 int getGenNumber()
          Returns the PDF generation number.
 int getObjNumber()
          Returns the PDF object number.
 void setGenNumber(int num)
          Sets the PDF generation number.
 void setObjNumber(int num)
          Sets the PDF object number.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

_objNumber

protected int _objNumber
PDF object number.


_genNumber

protected int _genNumber
PDF generation number.

Constructor Detail

PdfObject

public PdfObject(int objNumber,
                 int genNumber)
Superclass constructor which should be called for all PdfObject instances that include an object and generation number.

Parameters:
objNumber - The PDF object number
genNumber - The PDF generation number

PdfObject

public PdfObject()
Superclass constructor for which the object and generation number will be added separately or not at all. Initializes the object and generation numbers to -1 to signify their absence.

Method Detail

getObjNumber

public int getObjNumber()
Returns the PDF object number. If the object wasn't given an object number, returns -1.


getGenNumber

public int getGenNumber()
Returns the PDF generation number. If the object wasn't given a generation number, returns -1.


setObjNumber

public void setObjNumber(int num)
Sets the PDF object number.


setGenNumber

public void setGenNumber(int num)
Sets the PDF generation number.



jhove/doc/edu/harvard/hul/ois/jhove/module/pdf/PdfProfile.html0000644000707400001440000005374711510702355023522 0ustar garyusers PdfProfile (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.pdf
Class PdfProfile

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.pdf.PdfProfile
Direct Known Subclasses:
AProfile, AProfileLevelA, LinearizedProfile, TaggedProfile, XProfileBase

public abstract class PdfProfile
extends java.lang.Object

Abstract class for PDF profile checkers.


Field Summary
protected  PdfModule _module
          The module invoking this profile.
protected  Parser _parser
          The Parser being used on the file.
protected  java.lang.String _profileText
          A brief human-readable description of the profile.
protected  java.io.RandomAccessFile _raf
          The file being analyzed.
 
Constructor Summary
PdfProfile(PdfModule module)
          Creates a PdfProfile.
 
Method Summary
 java.lang.String getText()
          Returns the text which describes this profile.
protected  boolean hasFilters(PdfObject filter, java.lang.String[] names)
          Returns true if a Filter object contains a filter name which matches any of the Strings in the second argument.
 boolean isAlreadyOK()
          Returns the value of the alreadyOK flag.
 boolean satisfiesProfile(java.io.RandomAccessFile raf, Parser parser)
          Returns true if the document satisfies the profile.
abstract  boolean satisfiesThisProfile()
          Returns true if the document satisfies the profile.
protected  boolean xObjectOK(PdfDictionary xo)
          Checks a single XObject for xObjectsOK.
protected  boolean xObjectsOK(PdfDictionary xos)
          This checks the "XObjects" dictionary, which is a dictionary whose entries have values that are XObjects.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

_module

protected PdfModule _module
The module invoking this profile.


_profileText

protected java.lang.String _profileText
A brief human-readable description of the profile.


_parser

protected Parser _parser
The Parser being used on the file.


_raf

protected java.io.RandomAccessFile _raf
The file being analyzed.

Constructor Detail

PdfProfile

public PdfProfile(PdfModule module)
Creates a PdfProfile. Subclass constructors should call the super constructor, then assign a value to _profileText.

Parameters:
module - The PDFModule we're working under
Method Detail

isAlreadyOK

public boolean isAlreadyOK()
Returns the value of the alreadyOK flag. This flag when one profile depends on another, to save redundant checking. The alreadyOK flag is set whenever satisfiesProfile returns true.


satisfiesProfile

public final boolean satisfiesProfile(java.io.RandomAccessFile raf,
                                      Parser parser)
Returns true if the document satisfies the profile. This calls satisfiesThisProfile(), which does the actual work.

Parameters:
raf - The RandomAccessFile being parsed
parser - The Parser being used on the file

satisfiesThisProfile

public abstract boolean satisfiesThisProfile()
Returns true if the document satisfies the profile. Subclasses should override satisfiesThisProfile(), not satisfiesProfile(), as satisfiesProfile() does some additional bookkeeping for all subclases.


getText

public java.lang.String getText()
Returns the text which describes this profile.


hasFilters

protected boolean hasFilters(PdfObject filter,
                             java.lang.String[] names)
Returns true if a Filter object contains a filter name which matches any of the Strings in the second argument. Will return false
Parameters:
filter - A PdfObject which may be either a PdfSimpleObject encapsulating a Name, or a PdfArray of such objects. If a null value is passed, it doesn't match any filter, so false is returned.
names - An array of Strings naming the filters which should precipitate a true result

xObjectsOK

protected boolean xObjectsOK(PdfDictionary xos)
This checks the "XObjects" dictionary, which is a dictionary whose entries have values that are XObjects. Override xObjectOK to implement profile-specific behavior.


xObjectOK

protected boolean xObjectOK(PdfDictionary xo)
Checks a single XObject for xObjectsOK. Always returns true. Override to implement tests.



jhove/doc/edu/harvard/hul/ois/jhove/module/pdf/PdfSimpleObject.html0000644000707400001440000004516011510702355024470 0ustar garyusers PdfSimpleObject (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.pdf
Class PdfSimpleObject

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.pdf.PdfObject
      extended by edu.harvard.hul.ois.jhove.module.pdf.PdfSimpleObject

public class PdfSimpleObject
extends PdfObject

A representation of a PDF object which can be represented by a Token. In some cases, this means that the full content of the object isn't stored, because we don't (think we) need it for our purposes.


Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.pdf.PdfObject
_genNumber, _objNumber
 
Constructor Summary
PdfSimpleObject(Token token)
          Creates a PdfSimpleObject.
PdfSimpleObject(Token token, int objNumber, int genNumber)
          Creates a PdfSimpleObject.
 
Method Summary
 double getDoubleValue()
          Return the double value of the token.
 int getIntValue()
          Return the integer value of the token.
 java.util.Vector getRawBytes()
          Return the raw bytes of the token, as a Vector of Integer objects.
 java.lang.String getStringValue()
          Return the string value of the token.
 Token getToken()
          Returns the token represented by this object.
 boolean isFalse()
          Return true if the value of the token is the keyword "false", and false otherwise.
 boolean isTrue()
          Return true if the value of the token is the keyword "true", and false otherwise.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.pdf.PdfObject
getGenNumber, getObjNumber, setGenNumber, setObjNumber
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

PdfSimpleObject

public PdfSimpleObject(Token token,
                       int objNumber,
                       int genNumber)
Creates a PdfSimpleObject.

Parameters:
objNumber - The PDF object number
genNumber - The PDF generation number
token - The Token represented by this object

PdfSimpleObject

public PdfSimpleObject(Token token)
Creates a PdfSimpleObject.

Parameters:
token - The Token represented by this object
Method Detail

getToken

public Token getToken()
Returns the token represented by this object.


getStringValue

public java.lang.String getStringValue()
Return the string value of the token. Returns null if the token is not a StringValuedToken.


getRawBytes

public java.util.Vector getRawBytes()
Return the raw bytes of the token, as a Vector of Integer objects. Returns null if the token is not a StringValuedToken.


getIntValue

public int getIntValue()
Return the integer value of the token. Throws a ClassCastException if the token is not a Numeric.


getDoubleValue

public double getDoubleValue()
Return the double value of the token. Throws a ClassCastException if the token is not a Numeric.


isTrue

public boolean isTrue()
Return true if the value of the token is the keyword "true", and false otherwise.


isFalse

public boolean isFalse()
Return true if the value of the token is the keyword "false", and false otherwise.



jhove/doc/edu/harvard/hul/ois/jhove/module/pdf/PdfStream.html0000644000707400001440000005372511510702355023351 0ustar garyusers PdfStream (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.pdf
Class PdfStream

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.pdf.PdfObject
      extended by edu.harvard.hul.ois.jhove.module.pdf.PdfStream

public class PdfStream
extends PdfObject

A representation of a PDF stream object. A PdfStream consists of a dictionary and a stream token. By default the content of the stream isn't loaded, but it can be loaded when necessary.


Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.pdf.PdfObject
_genNumber, _objNumber
 
Constructor Summary
PdfStream(PdfDictionary dict, Stream stream)
          Creates a PdfStream.
PdfStream(PdfDictionary dict, Stream stream, int objNumber, int genNumber)
          Creates a PdfStream
 
Method Summary
 PdfDictionary getDict()
          Returns the stream's dictionary
 java.lang.String getFileSpecification()
          If the stream is external, returns the file specification for it, otherwise returns null.
 java.lang.String getFilterName()
          Return the name of the filter, if the DecodeParams dictionary is present and has a "Name" entry.
 Filter[] getFilters()
          Returns an array (possibly empty but not null) of the filters for this Stream.
 Stream getStream()
          Returns the stream's Stream portion
 boolean isImage()
          Returns true if this is an image stream.
 boolean isPdfaCompliant()
          Returns true if no PDF/A compliance problems have been found, false if problems have been found
protected  java.util.List makeFilterList()
           
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.pdf.PdfObject
getGenNumber, getObjNumber, setGenNumber, setObjNumber
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

PdfStream

public PdfStream(PdfDictionary dict,
                 Stream stream,
                 int objNumber,
                 int genNumber)
          throws PdfException
Creates a PdfStream

Parameters:
dict - A dictionary describing the stream
stream - A Stream token
objNumber - The PDF object number
genNumber - The PDF generation number
Throws:
PdfException

PdfStream

public PdfStream(PdfDictionary dict,
                 Stream stream)
          throws PdfException
Creates a PdfStream.

Parameters:
dict - A dictionary describing the stream
stream - A Stream token
Throws:
PdfException
Method Detail

getDict

public PdfDictionary getDict()
Returns the stream's dictionary


getStream

public Stream getStream()
Returns the stream's Stream portion


getFileSpecification

public java.lang.String getFileSpecification()
If the stream is external, returns the file specification for it, otherwise returns null.


isPdfaCompliant

public boolean isPdfaCompliant()
Returns true if no PDF/A compliance problems have been found, false if problems have been found


getFilters

public Filter[] getFilters()
                    throws PdfException
Returns an array (possibly empty but not null) of the filters for this Stream. The elements of the array are Filter objects.

Throws:
PdfException

getFilterName

public java.lang.String getFilterName()
Return the name of the filter, if the DecodeParams dictionary is present and has a "Name" entry.


makeFilterList

protected java.util.List makeFilterList()
                                 throws PdfException
Throws:
PdfException

isImage

public boolean isImage()
Returns true if this is an image stream.



jhove/doc/edu/harvard/hul/ois/jhove/module/pdf/PdfStrings.html0000644000707400001440000002715611510702355023546 0ustar garyusers PdfStrings (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.pdf
Class PdfStrings

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.pdf.PdfStrings

public class PdfStrings
extends java.lang.Object

A class for holding arrays of informative strings that will go into properties of a PDF object.


Field Summary
static java.lang.String[] ALGORITHM
          Encryption algorithm strings.
static java.lang.String[] ANNOTATIONFLAGS
          Flags for annotations
static java.lang.String[] FONTDESCFLAGS
          Flags for FontDescriptor.
static java.lang.String[] USERPERMFLAGS2
          Flags for user access permissions when revision 2 is specified.
static java.lang.String[] USERPERMFLAGS3
          Flags for user access permissions when revision 3 is specified.
 
Method Summary
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

ALGORITHM

public static final java.lang.String[] ALGORITHM
Encryption algorithm strings.


FONTDESCFLAGS

public static final java.lang.String[] FONTDESCFLAGS
Flags for FontDescriptor. In PDF notation, bit 1 (not 0) is the low-order bit.


USERPERMFLAGS3

public static final java.lang.String[] USERPERMFLAGS3
Flags for user access permissions when revision 3 is specified.


USERPERMFLAGS2

public static final java.lang.String[] USERPERMFLAGS2
Flags for user access permissions when revision 2 is specified.


ANNOTATIONFLAGS

public static final java.lang.String[] ANNOTATIONFLAGS
Flags for annotations



jhove/doc/edu/harvard/hul/ois/jhove/module/pdf/PdfXMPSource.html0000644000707400001440000004060311510702355023732 0ustar garyusers PdfXMPSource (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.pdf
Class PdfXMPSource

java.lang.Object
  extended by org.xml.sax.InputSource
      extended by edu.harvard.hul.ois.jhove.XMPSource
          extended by edu.harvard.hul.ois.jhove.module.pdf.PdfXMPSource

public final class PdfXMPSource
extends XMPSource

Class for providing an InputSource to XMPHandler. Only an InputSource based on a Reader is supported.

Author:
Gary McGath

Field Summary
protected  java.lang.String _encoding
           
 
Fields inherited from class edu.harvard.hul.ois.jhove.XMPSource
_reader
 
Constructor Summary
PdfXMPSource(PdfStream stream, java.io.RandomAccessFile raf)
          Constructor based on Stream object.
PdfXMPSource(PdfStream stream, java.io.RandomAccessFile raf, java.lang.String encoding)
          Constructor based on Stream object with encoding specified.
 
Method Summary
protected  void resetReader()
          Causes reading to begin from the start again.
 
Methods inherited from class edu.harvard.hul.ois.jhove.XMPSource
makeProperty
 
Methods inherited from class org.xml.sax.InputSource
getByteStream, getCharacterStream, getEncoding, getPublicId, getSystemId, setByteStream, setCharacterStream, setEncoding, setPublicId, setSystemId
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

_encoding

protected java.lang.String _encoding
Constructor Detail

PdfXMPSource

public PdfXMPSource(PdfStream stream,
                    java.io.RandomAccessFile raf)
             throws java.io.UnsupportedEncodingException
Constructor based on Stream object. Since a double read may be necessary, we have one version without encoding (before it's known), and another with encoding.

Parameters:
stream - PDFStream containing the XMP
raf - The RandomAccessFile object underlying the PDF
Throws:
java.io.UnsupportedEncodingException

PdfXMPSource

public PdfXMPSource(PdfStream stream,
                    java.io.RandomAccessFile raf,
                    java.lang.String encoding)
             throws java.io.UnsupportedEncodingException
Constructor based on Stream object with encoding specified.

Parameters:
stream - PDFStream containing the XMP
raf - The RandomAccessFile object underlying the PDF
encoding - The character encoding to use
Throws:
java.io.UnsupportedEncodingException
Method Detail

resetReader

protected void resetReader()
Description copied from class: XMPSource
Causes reading to begin from the start again. Typically this means creating a new value for _reader that will start over.

Specified by:
resetReader in class XMPSource


jhove/doc/edu/harvard/hul/ois/jhove/module/pdf/RunLengthFilterStream.html0000644000707400001440000002571211510702355025707 0ustar garyusers RunLengthFilterStream (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.pdf
Class RunLengthFilterStream

java.lang.Object
  extended by java.io.InputStream
      extended by java.io.FilterInputStream
          extended by edu.harvard.hul.ois.jhove.module.pdf.RunLengthFilterStream
All Implemented Interfaces:
java.io.Closeable

public class RunLengthFilterStream
extends java.io.FilterInputStream

This is a stub which may be implemented in the future. It appears to be unnecessary for object streams and cross-reference streams created by any version of Acrobat through 7.0, and we don't look at other types of streams.

Author:
Gary McGath

Field Summary
 
Fields inherited from class java.io.FilterInputStream
in
 
Constructor Summary
RunLengthFilterStream(java.io.InputStream in)
           
 
Method Summary
 
Methods inherited from class java.io.FilterInputStream
available, close, mark, markSupported, read, read, read, reset, skip
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

RunLengthFilterStream

public RunLengthFilterStream(java.io.InputStream in)
Parameters:
in -


jhove/doc/edu/harvard/hul/ois/jhove/module/pdf/State.html0000644000707400001440000010600011510702355022525 0ustar garyusers State (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.pdf
Class State

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.pdf.State

public class State
extends java.lang.Object

An enumeration class for use with the Tokenizer. Only the static instances which are declared within the class should ever be created.


Field Summary
static State COMMENT
           
static State E
           
static State EN
           
static State END
           
static State ENDS
           
static State ENDST
           
static State ENDSTR
           
static State ENDSTRE
           
static State ENDSTREA
           
static State ENDSTREAM
           
static State FRACTIONAL
           
static State GREATER_THAN
           
static State HEX_FE_1
           
static State HEX_FE_2
           
static State HEX_PDF_1
           
static State HEX_PDF_2
           
static State HEX_RAW
           
static State HEX_UTF16_1
           
static State HEX_UTF16_2
           
static State HEX_UTF16_3
           
static State HEX_UTF16_4
           
static State HEXADECIMAL
           
static State KEYWORD
           
static State LESS_THAN
           
static State LITERAL
           
static State LITERAL_FE
           
static State LITERAL_PDF
           
static State LITERAL_UTF16_1
           
static State LITERAL_UTF16_2
           
static State NAME
           
static State NUMERIC
           
static State STREAM
           
static State WHITESPACE
           
 
Method Summary
 boolean equals(State state)
          Equality test.
 java.lang.String toString()
          Convert to String representation.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

COMMENT

public static final State COMMENT

E

public static final State E

EN

public static final State EN

END

public static final State END

ENDS

public static final State ENDS

ENDST

public static final State ENDST

ENDSTR

public static final State ENDSTR

ENDSTRE

public static final State ENDSTRE

ENDSTREA

public static final State ENDSTREA

ENDSTREAM

public static final State ENDSTREAM

FRACTIONAL

public static final State FRACTIONAL

GREATER_THAN

public static final State GREATER_THAN

HEXADECIMAL

public static final State HEXADECIMAL

HEX_FE_1

public static final State HEX_FE_1

HEX_FE_2

public static final State HEX_FE_2

HEX_PDF_1

public static final State HEX_PDF_1

HEX_PDF_2

public static final State HEX_PDF_2

HEX_UTF16_1

public static final State HEX_UTF16_1

HEX_UTF16_2

public static final State HEX_UTF16_2

HEX_UTF16_3

public static final State HEX_UTF16_3

HEX_UTF16_4

public static final State HEX_UTF16_4

HEX_RAW

public static final State HEX_RAW

KEYWORD

public static final State KEYWORD

LESS_THAN

public static final State LESS_THAN

LITERAL

public static final State LITERAL

LITERAL_FE

public static final State LITERAL_FE

LITERAL_PDF

public static final State LITERAL_PDF

LITERAL_UTF16_1

public static final State LITERAL_UTF16_1

LITERAL_UTF16_2

public static final State LITERAL_UTF16_2

NAME

public static final State NAME

NUMERIC

public static final State NUMERIC

STREAM

public static final State STREAM

WHITESPACE

public static final State WHITESPACE
Method Detail

equals

public boolean equals(State state)
Equality test. Two State objects are considered equal only if they are the same object.


toString

public java.lang.String toString()
Convert to String representation. A State object's String representation is its name.

Overrides:
toString in class java.lang.Object


jhove/doc/edu/harvard/hul/ois/jhove/module/pdf/StdStructTypes.html0000644000707400001440000002666111510702356024450 0ustar garyusers StdStructTypes (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.pdf
Class StdStructTypes

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.pdf.StdStructTypes

public class StdStructTypes
extends java.lang.Object

This class holds the constants for standard structure type names, and a static method for determining if a string belongs to those names.


Field Summary
static java.lang.String[] blockLevelNames
          The subset of typeNames which denotes a block-level element
static java.lang.String[] typeNames
          Array of valid structure type names
 
Method Summary
static boolean includes(java.lang.String s)
          Returns true if s is equal (by an equals() test) to some string in typeNames.
static boolean isBlockLevel(java.lang.String s)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

typeNames

public static final java.lang.String[] typeNames
Array of valid structure type names


blockLevelNames

public static final java.lang.String[] blockLevelNames
The subset of typeNames which denotes a block-level element

Method Detail

includes

public static boolean includes(java.lang.String s)
Returns true if s is equal (by an equals() test) to some string in typeNames.


isBlockLevel

public static boolean isBlockLevel(java.lang.String s)


jhove/doc/edu/harvard/hul/ois/jhove/module/pdf/Stream.html0000644000707400001440000004644011510702356022714 0ustar garyusers Stream (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.pdf
Class Stream

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.pdf.Token
      extended by edu.harvard.hul.ois.jhove.module.pdf.Stream

public class Stream
extends Token

Class to encapsulate a stream token. The content of the stream is not saved, only its length and starting offset.


Constructor Summary
Stream()
          Constructor.
 
Method Summary
 boolean advanceTo(int offset)
          Advances to a specified offset in the stream.
 long getLength()
          Returns the length of the stream.
 long getOffset()
          Returns the current offset in the stream.
 void initRead(java.io.RandomAccessFile raf)
          Prepares for reading the Stream.
 int read()
          Reads a byte from the Stream, applying the Filters if any.
 int read(byte[] b)
          Reads a sequence of bytes from the Stream, applying the Filters if any.
 int readAsciiInt()
          Reads an ASCII string, which may be preceded by white space.
 void setFilters(Filter[] filters)
          Sets the array of filters used by the stream.
 void setLength(long length)
          Sets the length field.
 void setOffset(long offset)
          Sets the offset field.
 long skipBytes(long n)
          Skips a specified number of bytes in the stream.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.pdf.Token
isPdfACompliant, isSimpleToken
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

Stream

public Stream()
Constructor.

Method Detail

getLength

public long getLength()
Returns the length of the stream. This is 0, unless the Stream's setLength method has been called.


setLength

public void setLength(long length)
Sets the length field. This should be the length of the stream proper (not counting its dictionary) before filtering, in other words, the number of bytes stored in the file.


getOffset

public long getOffset()
Returns the current offset in the stream. This is -1, unless the Stream's setOffset method has been called.


setOffset

public void setOffset(long offset)
Sets the offset field.


setFilters

public void setFilters(Filter[] filters)
Sets the array of filters used by the stream. This must be called before initRead.


initRead

public void initRead(java.io.RandomAccessFile raf)
              throws java.io.IOException,
                     PdfException
Prepares for reading the Stream. If the filter List includes one which we don't support, throws a PdfException. This supports the abbreviated filter names in Appendix H of the PDF spec.

Throws:
java.io.IOException
PdfException

read

public int read()
         throws java.io.IOException
Reads a byte from the Stream, applying the Filters if any.

Throws:
java.io.IOException

read

public int read(byte[] b)
         throws java.io.IOException
Reads a sequence of bytes from the Stream, applying the Filters if any.

Throws:
java.io.IOException

skipBytes

public long skipBytes(long n)
               throws java.io.IOException
Skips a specified number of bytes in the stream.

Throws:
java.io.IOException

readAsciiInt

public int readAsciiInt()
                 throws java.io.IOException,
                        PdfException
Reads an ASCII string, which may be preceded by white space. Will eat the first white space character after the ASCII string.

Throws:
java.io.IOException
PdfException

advanceTo

public boolean advanceTo(int offset)
                  throws java.io.IOException
Advances to a specified offset in the stream. The offset is defined as the number of decompressed bytes which precede the position in the stream. Returns true if the advance is successful, false if the point has already been passed or some other failure occurs.

Throws:
java.io.IOException


jhove/doc/edu/harvard/hul/ois/jhove/module/pdf/StreamInputStream.html0000644000707400001440000002671211510702356025110 0ustar garyusers StreamInputStream (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.pdf
Class StreamInputStream

java.lang.Object
  extended by java.io.InputStream
      extended by edu.harvard.hul.ois.jhove.module.pdf.StreamInputStream
All Implemented Interfaces:
java.io.Closeable

public class StreamInputStream
extends java.io.InputStream

A StreamInputStream is an InputStream which provides the bytes from a PdfStream. It reads bytes from the PdfStream's underlying file starting at the beginning of the stream data and providing as many bytes as are indicated by its length. No filters are applied; just the raw data is read.


Constructor Summary
StreamInputStream(PdfStream pdfStream, java.io.RandomAccessFile file)
           
 
Method Summary
 int read()
          Return one byte from the stream.
 
Methods inherited from class java.io.InputStream
available, close, mark, markSupported, read, read, reset, skip
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

StreamInputStream

public StreamInputStream(PdfStream pdfStream,
                         java.io.RandomAccessFile file)
Method Detail

read

public int read()
         throws java.io.IOException
Return one byte from the stream. When the end of the stream is reached, returns -1.

Specified by:
read in class java.io.InputStream
Throws:
java.io.IOException


jhove/doc/edu/harvard/hul/ois/jhove/module/pdf/StreamTokenizer.html0000644000707400001440000005136211510702356024606 0ustar garyusers StreamTokenizer (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.pdf
Class StreamTokenizer

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.pdf.Tokenizer
      extended by edu.harvard.hul.ois.jhove.module.pdf.StreamTokenizer

public class StreamTokenizer
extends Tokenizer

Tokenizer subclass which gets data from an object stream.

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.pdf.Tokenizer
_ch, _file, PDFDOCENCODING
 
Constructor Summary
StreamTokenizer(java.io.RandomAccessFile file, Stream stream)
           
 
Method Summary
 void backupChar()
          Back up a byte so it will be read again.
protected  void initStream(Stream token)
          Streams can occur only in files, not in streams, so this should never be called.
 int readChar()
          Gets a character from the file, using a buffer.
 void seek(long offset)
          Set the Tokenizer to a new position in the stream.
protected  void setStreamOffset(Stream token)
          Sets the offset of a Stream to the current file position.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.pdf.Tokenizer
addLanguageCode, getLanguageCodes, getNext, getNext, getOffset, getPDFACompliant, getWSString, readChar1, scanMode, seekReset, setEncrypted, setPDFACompliant
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

StreamTokenizer

public StreamTokenizer(java.io.RandomAccessFile file,
                       Stream stream)
Method Detail

initStream

protected void initStream(Stream token)
                   throws java.io.IOException,
                          PdfException
Streams can occur only in files, not in streams, so this should never be called.

Specified by:
initStream in class Tokenizer
Throws:
java.io.IOException
PdfException

readChar

public int readChar()
             throws java.io.IOException
Gets a character from the file, using a buffer.

Specified by:
readChar in class Tokenizer
Throws:
java.io.IOException

seek

public void seek(long offset)
          throws java.io.IOException,
                 PdfException
Set the Tokenizer to a new position in the stream.

Specified by:
seek in class Tokenizer
Parameters:
offset - The offset in bytes from the start of the stream.
Throws:
java.io.IOException
PdfException

setStreamOffset

protected void setStreamOffset(Stream token)
                        throws java.io.IOException,
                               PdfException
Sets the offset of a Stream to the current file position. Only the file-based tokenizer can do this, so this should never be called.

Specified by:
setStreamOffset in class Tokenizer
Throws:
java.io.IOException
PdfException

backupChar

public void backupChar()
Back up a byte so it will be read again.

Specified by:
backupChar in class Tokenizer


jhove/doc/edu/harvard/hul/ois/jhove/module/pdf/StringValuedToken.html0000644000707400001440000003523711510702356025073 0ustar garyusers StringValuedToken (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.pdf
Class StringValuedToken

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.pdf.Token
      extended by edu.harvard.hul.ois.jhove.module.pdf.StringValuedToken
Direct Known Subclasses:
Comment, Keyword, Literal, Name

public abstract class StringValuedToken
extends Token

Abstract class for all PDF tokens which consist of a character sequence.


Field Summary
protected  java.util.Vector _rawBytes
           
protected  java.lang.String _value
           
 
Constructor Summary
StringValuedToken()
           
 
Method Summary
 java.util.Vector getRawBytes()
          Get the value of the token's untranslated bytes.
 java.lang.String getValue()
          Get the value of the token as a String.
 void setValue(java.lang.String value)
          Set the value of the token.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.pdf.Token
isPdfACompliant, isSimpleToken
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

_value

protected java.lang.String _value

_rawBytes

protected java.util.Vector _rawBytes
Constructor Detail

StringValuedToken

public StringValuedToken()
Method Detail

getValue

public java.lang.String getValue()
Get the value of the token as a String.


getRawBytes

public java.util.Vector getRawBytes()
Get the value of the token's untranslated bytes. This is unsupported and will always return null.


setValue

public void setValue(java.lang.String value)
Set the value of the token.



jhove/doc/edu/harvard/hul/ois/jhove/module/pdf/StructureElement.html0000644000707400001440000003243011510702356024765 0ustar garyusers StructureElement (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.pdf
Class StructureElement

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.pdf.StructureElement

public class StructureElement
extends java.lang.Object

Class for element of PDF document structure tree.

See Also:
StructureTree

Constructor Summary
StructureElement(PdfDictionary dict, StructureTree tree)
          Constructor.
 
Method Summary
 void buildSubtree()
          Build this element's subtree, if any This checks the "K" entry in the dictionary and locates all referened structure elements.
 void checkAttributes()
          Determine if the attributes of this element are valid.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

StructureElement

public StructureElement(PdfDictionary dict,
                        StructureTree tree)
                 throws PdfException
Constructor.

Parameters:
dict - A PdfDictionary corresponding to a structure element
tree - The root StructureTree object
Throws:
PdfException
Method Detail

buildSubtree

public void buildSubtree()
                  throws PdfException
Build this element's subtree, if any This checks the "K" entry in the dictionary and locates all referened structure elements. These are put into StructureElement objects, which have their own subtrees built, and these StructureElements are accumulated into children.

Throws:
PdfException

checkAttributes

public void checkAttributes()
                     throws PdfException
Determine if the attributes of this element are valid. If errors are detected, throws a PdfInvalidException.

Throws:
PdfException


jhove/doc/edu/harvard/hul/ois/jhove/module/pdf/StructureTree.html0000644000707400001440000003506411510702356024301 0ustar garyusers StructureTree (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.pdf
Class StructureTree

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.pdf.StructureTree

public class StructureTree
extends java.lang.Object

Class for PDF document structure tree. See section 9.6, "Logical Structure," of PDF Reference, Version 1.4, for an explanation of the document structure.

See Also:
StructureElement

Constructor Summary
StructureTree(PdfModule module, java.io.RandomAccessFile raf, Parser parser)
          Constructor.
 
Method Summary
 java.lang.String dereferenceStructType(java.lang.String st)
          Dereference a name in the role map.
 PdfModule getModule()
          Returns the module associated with this object.
 boolean isPresent()
          Returns true if and only if the document structure exists.
 boolean isValid()
          Returns true if and only if no errors were detected.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

StructureTree

public StructureTree(PdfModule module,
                     java.io.RandomAccessFile raf,
                     Parser parser)
              throws PdfException
Constructor. If there is a document structure tree, this fills in the appropriate information. If there isn't, it does nothing. Call isPresent() to determine whether there is a document structure tree. A PdfInvalidException may be thrown if there is a structure tree but it is invalid.

Parameters:
module - The PdfModule under which we're operating
raf - The document file object
parser - The Parser being used
Throws:
PdfException
Method Detail

isPresent

public boolean isPresent()
Returns true if and only if the document structure exists.


isValid

public boolean isValid()
Returns true if and only if no errors were detected.


getModule

public PdfModule getModule()
Returns the module associated with this object.


dereferenceStructType

public java.lang.String dereferenceStructType(java.lang.String st)
Dereference a name in the role map. If there is no role map, or if the parameter is not mapped by the role map, the original parameter will be returned. The string will be looked up through multiple levels in the role map. The maximum number of levels is limited to 50, in case of circular mappings. The value returned will be null if the role map contains invalid data or the limit of 50 lookups is reached.



jhove/doc/edu/harvard/hul/ois/jhove/module/pdf/TaggedProfile.html0000644000707400001440000003437711510702356024203 0ustar garyusers TaggedProfile (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.pdf
Class TaggedProfile

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.pdf.PdfProfile
      extended by edu.harvard.hul.ois.jhove.module.pdf.TaggedProfile

public final class TaggedProfile
extends PdfProfile

PDF profile checker for Tagged PDF documents. See section 9.7, "Tagged PDF", of the PDF Reference, Version 1.4, for an explanation of tagged PDF.


Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.pdf.PdfProfile
_module, _parser, _profileText, _raf
 
Constructor Summary
TaggedProfile(PdfModule module)
          Constructor.
 
Method Summary
 boolean satisfiesThisProfile()
          Returns true if the document satisfies the profile.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.pdf.PdfProfile
getText, hasFilters, isAlreadyOK, satisfiesProfile, xObjectOK, xObjectsOK
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

TaggedProfile

public TaggedProfile(PdfModule module)
Constructor. Creates a TaggedProfile object for subsequent testing.

Parameters:
module - The module under which we are checking the profile.
Method Detail

satisfiesThisProfile

public boolean satisfiesThisProfile()
Returns true if the document satisfies the profile. We check only the dictionaries, not the stream contents.

Specified by:
satisfiesThisProfile in class PdfProfile


jhove/doc/edu/harvard/hul/ois/jhove/module/pdf/Token.html0000644000707400001440000002770311510702356022542 0ustar garyusers Token (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.pdf
Class Token

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.pdf.Token
Direct Known Subclasses:
ArrayEnd, ArrayStart, DictionaryEnd, DictionaryStart, Numeric, Stream, StringValuedToken

public abstract class Token
extends java.lang.Object

Abstract class to encapsulate lexical tokens from a PDF file. Tokens include numbers, strings, names, delimiters (the open and close markers for dictionaries and arrays), and streams. There are a variety of subclasses for specific kinds of tokens.


Constructor Summary
Token()
          Superclass constructor
 
Method Summary
 boolean isPdfACompliant()
          Returns true if this token is within PDF/A implementation limits.
 boolean isSimpleToken()
          Returns true if the token is one which the Parser treats as a unitary object.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

Token

public Token()
Superclass constructor

Method Detail

isSimpleToken

public boolean isSimpleToken()
Returns true if the token is one which the Parser treats as a unitary object. Everything but arrays and dictionaries is considered a "simple" token for our purposes.


isPdfACompliant

public boolean isPdfACompliant()
Returns true if this token is within PDF/A implementation limits. Always returns true unless overridden.



jhove/doc/edu/harvard/hul/ois/jhove/module/pdf/Tokenizer.html0000644000707400001440000006710511510702356023434 0ustar garyusers Tokenizer (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.pdf
Class Tokenizer

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.pdf.Tokenizer
Direct Known Subclasses:
FileTokenizer, StreamTokenizer

public abstract class Tokenizer
extends java.lang.Object

Tokenizer for PDF files. This is used in conjunction with the Parser, which assembled Tokens into higher-level constructs.


Field Summary
protected  int _ch
          Character code of current character.
protected  java.io.RandomAccessFile _file
          Source from which to read bytes.
static char[] PDFDOCENCODING
          Mapping between PDFDocEncoding and Unicode code points.
 
Constructor Summary
Tokenizer()
          Constructor.
 
Method Summary
 void addLanguageCode(java.lang.String langCode)
          Add a string to the language codes
abstract  void backupChar()
          Back up a byte so it will be read again.
 java.util.Set getLanguageCodes()
          Return the set of language codes.
 Token getNext()
          Parses out and returns a token from the input file.
 Token getNext(long max)
          Parses out and returns a token from the input file.
 long getOffset()
          Return the current offset into the file.
 boolean getPDFACompliant()
          Returns the value of the pdfACompliant flag, which indicates that the tokenizer hasn't detected non-compliance.
 java.lang.String getWSString()
          Returns the value of the last white space string read by the tokenizer.
protected abstract  void initStream(Stream token)
          Initialization code for Stream object.
abstract  int readChar()
          Get a character from the file or stream, using a buffer
 int readChar1(boolean utf16)
          Read a character in one-byte or 2-byte format, as requested
 void scanMode(boolean flag)
          If true, do not attempt to parse non-whitespace delimited tokens, e.g., literal and hexadecimal strings.
abstract  void seek(long offset)
          Set the Tokenizer to a new position in the file.
protected  void seekReset(long offset)
          Reset after a seek.
 void setEncrypted(boolean encrypted)
          Tell this object that the file is or isn't encrypted.
 void setPDFACompliant(boolean pdfACompliant)
          Set the value of the pdfACompliant flag.
protected abstract  void setStreamOffset(Stream token)
          Sets the offset of a Stream to the current file position.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

PDFDOCENCODING

public static char[] PDFDOCENCODING
Mapping between PDFDocEncoding and Unicode code points.


_file

protected java.io.RandomAccessFile _file
Source from which to read bytes.


_ch

protected int _ch
Character code of current character.

Constructor Detail

Tokenizer

public Tokenizer()
Constructor.

Method Detail

getNext

public Token getNext()
              throws java.io.IOException,
                     PdfException
Parses out and returns a token from the input file. If it hits the end of the file, returns null. Other parsing problems cause an exception to be thrown. When an exception is thrown, the state is changed to WHITESPACE, so the parser can get back in sync more easily.

Throws:
java.io.IOException
PdfException

getNext

public Token getNext(long max)
              throws java.io.IOException,
                     PdfException
Parses out and returns a token from the input file. If it hits the end of the file, returns null. Other parsing problems cause an exception to be thrown. When an exception is thrown, the state is changed to WHITESPACE, so the parser can get back in sync more easily.

Parameters:
max - Maximum allowable size of the token
Throws:
java.io.IOException
PdfException

getOffset

public long getOffset()
Return the current offset into the file.


getLanguageCodes

public java.util.Set getLanguageCodes()
Return the set of language codes. Members of the set are Strings.


setEncrypted

public void setEncrypted(boolean encrypted)
Tell this object that the file is or isn't encrypted.


getPDFACompliant

public boolean getPDFACompliant()
Returns the value of the pdfACompliant flag, which indicates that the tokenizer hasn't detected non-compliance. A value of true is no guarantee that the file is compliant.


setPDFACompliant

public void setPDFACompliant(boolean pdfACompliant)
Set the value of the pdfACompliant flag. This may be used to clear previous detection of noncompliance.


getWSString

public java.lang.String getWSString()
Returns the value of the last white space string read by the tokenizer. Repositioning clears the white space string.


seek

public abstract void seek(long offset)
                   throws java.io.IOException,
                          PdfException
Set the Tokenizer to a new position in the file.

Parameters:
offset - The offset in bytes from the start of the file.
Throws:
java.io.IOException
PdfException

seekReset

protected void seekReset(long offset)
Reset after a seek.


readChar

public abstract int readChar()
                      throws java.io.IOException
Get a character from the file or stream, using a buffer

Throws:
java.io.IOException

readChar1

public int readChar1(boolean utf16)
              throws java.io.IOException
Read a character in one-byte or 2-byte format, as requested

Throws:
java.io.IOException

backupChar

public abstract void backupChar()
Back up a byte so it will be read again.


addLanguageCode

public void addLanguageCode(java.lang.String langCode)
Add a string to the language codes


scanMode

public void scanMode(boolean flag)
If true, do not attempt to parse non-whitespace delimited tokens, e.g., literal and hexadecimal strings.

Parameters:
flag - Scan mode flag

initStream

protected abstract void initStream(Stream token)
                            throws java.io.IOException,
                                   PdfException
Initialization code for Stream object. This is meaningful only for the FileTokenizer subclass.

Throws:
java.io.IOException
PdfException

setStreamOffset

protected abstract void setStreamOffset(Stream token)
                                 throws java.io.IOException,
                                        PdfException
Sets the offset of a Stream to the current file position. Only the file-based tokenizer can do this, which is why this overrides the Tokenizer method.

Throws:
java.io.IOException
PdfException


jhove/doc/edu/harvard/hul/ois/jhove/module/pdf/X1Profile.html0000644000707400001440000005300711510702356023267 0ustar garyusers X1Profile (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.pdf
Class X1Profile

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.pdf.PdfProfile
      extended by edu.harvard.hul.ois.jhove.module.pdf.XProfileBase
          extended by edu.harvard.hul.ois.jhove.module.pdf.X1Profile

public final class X1Profile
extends XProfileBase

PDF profile checker for PDF/X-1 documents. See ISO Standard 15930-1, "Complete exchange using CMYK data (PDF/X-1 and PDF/X-1a)"


Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.pdf.XProfileBase
_bleedBoxPresent, _xType, PDFX1, PDFX1A, PDFX2, PDFX3
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.pdf.PdfProfile
_module, _parser, _profileText, _raf
 
Constructor Summary
X1Profile(PdfModule module)
          Constructor.
 
Method Summary
protected  boolean formObjectOK(PdfDictionary xo)
          Checks if a Form xobject is valid.
 boolean isX1aCompliant()
          Returns the result of X-1a compliance testing which was performed in the course of satisfiesThisProfile.
 boolean satisfiesThisProfile()
          Returns true if the document satisfies the profile.
protected  boolean xObjectOK(PdfDictionary xo)
          Checks a single XObject for xObjectsOK.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.pdf.XProfileBase
bboxOK, checkPrefsAgainstBleedBox, extGStateOK, filterOK, imageObjectOK, infoDictOK, isBleedBoxPresent, outputIntentsOK, trailerDictOK
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.pdf.PdfProfile
getText, hasFilters, isAlreadyOK, satisfiesProfile, xObjectsOK
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

X1Profile

public X1Profile(PdfModule module)
Constructor. Creates an X1Profile object for subsequent testing.

Parameters:
module - The module under which we are checking the profile.
Method Detail

satisfiesThisProfile

public boolean satisfiesThisProfile()
Returns true if the document satisfies the profile. X-1a compliance is a superset of the requirements of X-1 compliance (i.e., X-1a compliant documents are a subset of X-1 compliant documents), so we test for X-1a compliance at the same time. The result can subsequently be obtained by calling isX1aCompliant.

Specified by:
satisfiesThisProfile in class PdfProfile

isX1aCompliant

public boolean isX1aCompliant()
Returns the result of X-1a compliance testing which was performed in the course of satisfiesThisProfile. If satisfiesThisProfile hasn't been called, returns false.


xObjectOK

protected boolean xObjectOK(PdfDictionary xo)
Description copied from class: XProfileBase
Checks a single XObject for xObjectsOK. Calls imageObjectOK and formObjectOK for profile-specific functionality.

Overrides:
xObjectOK in class XProfileBase

formObjectOK

protected boolean formObjectOK(PdfDictionary xo)
Checks if a Form xobject is valid. This overrides the method in XProfileBase.

Overrides:
formObjectOK in class XProfileBase


jhove/doc/edu/harvard/hul/ois/jhove/module/pdf/X1aProfile.html0000644000707400001440000004574711510702356023444 0ustar garyusers X1aProfile (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.pdf
Class X1aProfile

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.pdf.PdfProfile
      extended by edu.harvard.hul.ois.jhove.module.pdf.XProfileBase
          extended by edu.harvard.hul.ois.jhove.module.pdf.X1aProfile

public final class X1aProfile
extends XProfileBase

PDF profile checker for PDF/X-1a documents. See ISO Standard 15930-1, "Complete exchange using CMYK data (PDF/X-1 and PDF/X-1a)" This module depends on the PDF/X-1 profiler, since the PDF/X-1 specification is PDF/X-1 plus a few additional restrictions.


Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.pdf.XProfileBase
_bleedBoxPresent, _xType, PDFX1, PDFX1A, PDFX2, PDFX3
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.pdf.PdfProfile
_module, _parser, _profileText, _raf
 
Constructor Summary
X1aProfile(PdfModule module)
          Constructor.
 
Method Summary
 boolean satisfiesThisProfile()
          Returns true if the document satisfies the profile.
 void setX1Profile(X1Profile x1)
          Calling setX1Profile links this X1aProfiler to an X1Profiler.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.pdf.XProfileBase
bboxOK, checkPrefsAgainstBleedBox, extGStateOK, filterOK, formObjectOK, imageObjectOK, infoDictOK, isBleedBoxPresent, outputIntentsOK, trailerDictOK, xObjectOK
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.pdf.PdfProfile
getText, hasFilters, isAlreadyOK, satisfiesProfile, xObjectsOK
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

X1aProfile

public X1aProfile(PdfModule module)
Constructor. Creates an X1aProfile object for subsequent testing.

Parameters:
module - The module under which we are checking the profile.
Method Detail

setX1Profile

public void setX1Profile(X1Profile x1)
Calling setX1Profile links this X1aProfiler to an X1Profiler.


satisfiesThisProfile

public boolean satisfiesThisProfile()
Returns true if the document satisfies the profile. If setX1Profile hasn't been called, creates a temporary X1Profile and tests against that profile first. Either way, X1Profile.isX1aCompliant is then called to determine the X-1/a compliance status.

Specified by:
satisfiesThisProfile in class PdfProfile


jhove/doc/edu/harvard/hul/ois/jhove/module/pdf/X2Profile.html0000644000707400001440000004571511510702356023277 0ustar garyusers X2Profile (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.pdf
Class X2Profile

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.pdf.PdfProfile
      extended by edu.harvard.hul.ois.jhove.module.pdf.XProfileBase
          extended by edu.harvard.hul.ois.jhove.module.pdf.X2Profile

public final class X2Profile
extends XProfileBase

PDF profile checker for PDF/X-2 documents. See ISO Standard ISO 15930-2:2003(E), "Graphic technology - Prepress digital data exchange Use of PDF - Part 2: Partial exchange of printing data (PDF/X-2)"


Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.pdf.XProfileBase
_bleedBoxPresent, _xType, PDFX1, PDFX1A, PDFX2, PDFX3
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.pdf.PdfProfile
_module, _parser, _profileText, _raf
 
Constructor Summary
X2Profile(PdfModule module)
          Constructor.
 
Method Summary
protected  boolean formObjectOK(PdfDictionary xo)
          Checks if a Form xobject is valid.
 boolean satisfiesThisProfile()
          Returns true if the document satisfies the profile.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.pdf.XProfileBase
bboxOK, checkPrefsAgainstBleedBox, extGStateOK, filterOK, imageObjectOK, infoDictOK, isBleedBoxPresent, outputIntentsOK, trailerDictOK, xObjectOK
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.pdf.PdfProfile
getText, hasFilters, isAlreadyOK, satisfiesProfile, xObjectsOK
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

X2Profile

public X2Profile(PdfModule module)
Constructor. Creates an X2Profile object for subsequent testing.

Parameters:
module - The module under which we are checking the profile.
Method Detail

satisfiesThisProfile

public boolean satisfiesThisProfile()
Returns true if the document satisfies the profile.

Specified by:
satisfiesThisProfile in class PdfProfile

formObjectOK

protected boolean formObjectOK(PdfDictionary xo)
Checks if a Form xobject is valid. This overrides the method in XProfileBase.

Overrides:
formObjectOK in class XProfileBase


jhove/doc/edu/harvard/hul/ois/jhove/module/pdf/X3Profile.html0000644000707400001440000004620611510702356023274 0ustar garyusers X3Profile (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.pdf
Class X3Profile

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.pdf.PdfProfile
      extended by edu.harvard.hul.ois.jhove.module.pdf.XProfileBase
          extended by edu.harvard.hul.ois.jhove.module.pdf.X3Profile

public final class X3Profile
extends XProfileBase

PDF profile checker for PDF/X-3 documents. See ISO Standard 15930-3, "Complete exchange suitable for colour-managed workflows (PDF/X-3)"


Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.pdf.XProfileBase
_bleedBoxPresent, _xType, PDFX1, PDFX1A, PDFX2, PDFX3
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.pdf.PdfProfile
_module, _parser, _profileText, _raf
 
Constructor Summary
X3Profile(PdfModule module)
          Constructor.
 
Method Summary
 boolean satisfiesThisProfile()
          Returns true if the document satisfies the profile.
protected  boolean xObjectOK(PdfDictionary xo)
          Checks a single XObject for xObjectsOK.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.pdf.XProfileBase
bboxOK, checkPrefsAgainstBleedBox, extGStateOK, filterOK, formObjectOK, imageObjectOK, infoDictOK, isBleedBoxPresent, outputIntentsOK, trailerDictOK
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.pdf.PdfProfile
getText, hasFilters, isAlreadyOK, satisfiesProfile, xObjectsOK
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

X3Profile

public X3Profile(PdfModule module)
Constructor. Creates an X3Profile object for subsequent testing.

Parameters:
module - The module under which we are checking the profile.
Method Detail

satisfiesThisProfile

public boolean satisfiesThisProfile()
Returns true if the document satisfies the profile.

Specified by:
satisfiesThisProfile in class PdfProfile

xObjectOK

protected boolean xObjectOK(PdfDictionary xo)
Description copied from class: XProfileBase
Checks a single XObject for xObjectsOK. Calls imageObjectOK and formObjectOK for profile-specific functionality.

Overrides:
xObjectOK in class XProfileBase


jhove/doc/edu/harvard/hul/ois/jhove/module/pdf/XProfileBase.html0000644000707400001440000007020011510702356023773 0ustar garyusers XProfileBase (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.pdf
Class XProfileBase

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.pdf.PdfProfile
      extended by edu.harvard.hul.ois.jhove.module.pdf.XProfileBase
Direct Known Subclasses:
X1aProfile, X1Profile, X2Profile, X3Profile

public abstract class XProfileBase
extends PdfProfile

Abstract base class for PDF profilers of the PDF/X family. See ISO Standard 15930-1, "Complete exchange using CMYK data (PDF/X-1 and PDF/X-1a)"


Field Summary
protected  boolean _bleedBoxPresent
          Set to true if a BleedBox is found.
protected  int _xType
          PDF-X type used by the subclass.
static int PDFX1
          Enumerated values for PDF-X type
static int PDFX1A
          Enumerated values for PDF-X type
static int PDFX2
          Enumerated values for PDF-X type
static int PDFX3
          Enumerated values for PDF-X type
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.pdf.PdfProfile
_module, _parser, _profileText, _raf
 
Constructor Summary
XProfileBase(PdfModule module, int xType)
          Constructor.
 
Method Summary
protected  boolean bboxOK(boolean requireMediaBox)
          Checks all the page objects for bounding boxes.
protected  boolean checkPrefsAgainstBleedBox()
          Checks ViewerPreferences dictionary against MediaBox and BleedBox.
protected  boolean extGStateOK(PdfDictionary gs)
          Checks if the ExtGState resource meets profile requirements.
protected  boolean filterOK(PdfObject filters, boolean forbidLZW, boolean forbidJBIG2)
          Checks for forbidden filters in a Filters dictionary.
protected  boolean formObjectOK(PdfDictionary fo)
          Checks the conformance of a form XObject.
protected  boolean imageObjectOK(PdfDictionary xo)
          Checks if a single image XObject fits the profile
protected  boolean infoDictOK(java.lang.String xVersion)
          Checks if the entries which are required in the document information dictionary by PDF-X/1 and X/3 are there.
protected  boolean isBleedBoxPresent()
          Returns true if a BleedBox has been detected.
protected  boolean outputIntentsOK(PdfArray intents)
          Checks if the OutputIntents of this document conform to profile requirements.
protected  boolean trailerDictOK()
          Checks profile requirements on the trailer dictionary.
protected  boolean xObjectOK(PdfDictionary xo)
          Checks a single XObject for xObjectsOK.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.pdf.PdfProfile
getText, hasFilters, isAlreadyOK, satisfiesProfile, satisfiesThisProfile, xObjectsOK
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

PDFX1

public static int PDFX1
Enumerated values for PDF-X type


PDFX1A

public static int PDFX1A
Enumerated values for PDF-X type


PDFX2

public static int PDFX2
Enumerated values for PDF-X type


PDFX3

public static int PDFX3
Enumerated values for PDF-X type


_xType

protected int _xType
PDF-X type used by the subclass.


_bleedBoxPresent

protected boolean _bleedBoxPresent
Set to true if a BleedBox is found.

Constructor Detail

XProfileBase

public XProfileBase(PdfModule module,
                    int xType)
Constructor. Creates an X1Profile object for subsequent testing.

Parameters:
module - The module under which we are checking the profile.
xType - The type of PDF/X profile being checked
Method Detail

infoDictOK

protected boolean infoDictOK(java.lang.String xVersion)
Checks if the entries which are required in the document information dictionary by PDF-X/1 and X/3 are there. These entries are optional under the PDF specification, so they must be checked here.


isBleedBoxPresent

protected boolean isBleedBoxPresent()
Returns true if a BleedBox has been detected.


outputIntentsOK

protected boolean outputIntentsOK(PdfArray intents)
Checks if the OutputIntents of this document conform to profile requirements. There must be exactly one entry in the dictionary which has a subtype of GTS_PDFX.


trailerDictOK

protected boolean trailerDictOK()
Checks profile requirements on the trailer dictionary.


extGStateOK

protected boolean extGStateOK(PdfDictionary gs)
Checks if the ExtGState resource meets profile requirements. It may not have TR, TR2, or HTP entries.


xObjectOK

protected boolean xObjectOK(PdfDictionary xo)
Checks a single XObject for xObjectsOK. Calls imageObjectOK and formObjectOK for profile-specific functionality.

Overrides:
xObjectOK in class PdfProfile

imageObjectOK

protected boolean imageObjectOK(PdfDictionary xo)
Checks if a single image XObject fits the profile


formObjectOK

protected boolean formObjectOK(PdfDictionary fo)
Checks the conformance of a form XObject. Does nothing; must be overridden if there are conditions on such forms.


bboxOK

protected boolean bboxOK(boolean requireMediaBox)
Checks all the page objects for bounding boxes. If requireMediaBox is true, each page has to include or inherit a MediaBox. Each page must include one but not both of a TrimBox and an ArtBox.


checkPrefsAgainstBleedBox

protected boolean checkPrefsAgainstBleedBox()
Checks ViewerPreferences dictionary against MediaBox and BleedBox. In PDF-X1/a and X2, if a BleedBox is present and if the ViewerPreferences dictionary contains the ViewClip, PrintArea or PrintClip keys, each of those keys present shall have the value MediaBox or BleedBox. This must be called after bboxOK has checked if any BleedBoxes are found.


filterOK

protected boolean filterOK(PdfObject filters,
                           boolean forbidLZW,
                           boolean forbidJBIG2)
Checks for forbidden filters in a Filters dictionary.



jhove/doc/edu/harvard/hul/ois/jhove/module/pdf/package-frame.html0000644000707400001440000001761711510702366024151 0ustar garyusers edu.harvard.hul.ois.jhove.module.pdf (JHOVE Documentation) edu.harvard.hul.ois.jhove.module.pdf
Classes 
AProfile
AProfileLevelA
ArrayEnd
ArrayStart
Ascii85FilterStream
AsciiHexFilterStream
Comment
CrossRefStream
Destination
DictionaryEnd
DictionaryStart
DocNode
FileSpecification
FileTokenizer
Filter
Hexadecimal
Keyword
LinearizedProfile
Literal
Name
NameTreeNode
Numeric
ObjectStream
PageLabelNode
PageObject
PageTreeNode
Parser
PdfArray
PdfDictionary
PdfFlateInputStream
PdfIndirectObj
PdfObject
PdfProfile
PdfSimpleObject
PdfStream
PdfStrings
PdfXMPSource
RunLengthFilterStream
State
StdStructTypes
Stream
StreamInputStream
StreamTokenizer
StringValuedToken
StructureElement
StructureTree
TaggedProfile
Token
Tokenizer
X1aProfile
X1Profile
X2Profile
X3Profile
XProfileBase
Exceptions 
PdfException
PdfInvalidException
PdfMalformedException
jhove/doc/edu/harvard/hul/ois/jhove/module/pdf/package-summary.html0000644000707400001440000005641711510702366024555 0ustar garyusers edu.harvard.hul.ois.jhove.module.pdf (JHOVE Documentation)

Package edu.harvard.hul.ois.jhove.module.pdf

Contains supporting classes for the PDF-HUL module.

See:
          Description

Class Summary
AProfile PDF profile checker for PDF/A-1 documents.
AProfileLevelA PDF profile checker for PDF/A-1 documents, Level A.
ArrayEnd Class for Tokens which represent the "]" that closes an array.
ArrayStart Class for Tokens which represent the "[" that opens an array.
Ascii85FilterStream This is a stub which may be implemented in the future.
AsciiHexFilterStream This is a stub which may be implemented in the future.
Comment Class for Tokens which represent PDF comments.
CrossRefStream This class implements the Cross-Reference Stream, an alternative to the Cross-Reference Table starting in PDF 1.4.
Destination Class encapsulating PDF destination objects, which refer to a page in the document.
DictionaryEnd Class for Tokens which represent the ">>" sequence that ends a Dictionary.
DictionaryStart Class for Tokens which represent the "<<" sequence that opens a Dictionary.
DocNode Abstract class for nodes of a PDF document tree.
FileSpecification A class which encapsulates a file specification in PDF.
FileTokenizer Tokenizer subclass which gets data from a RandomAccessFile.
Filter Container for a PDF stream filter.
Hexadecimal Deprecated.  
Keyword Class for Tokens which represent PDF keywords.
LinearizedProfile PDF profile checker for Linearized documents.
Literal Class for Tokens which represent PDF strings.
Name Class for Tokens which represent PDF names.
NameTreeNode Class for nodes of a PDF name tree, e.g., ExternalFiles.
Numeric Class for Tokens which represent PDF numbers.
ObjectStream This class implements the Object Stream, a new way of storing objects starting in PDF 1.4.
PageLabelNode Class for nodes of a PDF number tree.
PageObject Class encapsulating a PDF page object node.
PageTreeNode Class encapsulating a PDF page tree node.
Parser The Parser class implements some limited syntactic analysis for PDF.
PdfArray A representation of a PDF array object.
PdfDictionary A representation of a PDF dictionary object.
PdfFlateInputStream An enhancement of InflaterInputStream to support Predictor and Columns.
PdfIndirectObj A representation of a PDF indirect object reference.
PdfObject The abstract superclass for all representations of objects in PDF files.
PdfProfile Abstract class for PDF profile checkers.
PdfSimpleObject A representation of a PDF object which can be represented by a Token.
PdfStream A representation of a PDF stream object.
PdfStrings A class for holding arrays of informative strings that will go into properties of a PDF object.
PdfXMPSource Class for providing an InputSource to XMPHandler.
RunLengthFilterStream This is a stub which may be implemented in the future.
State An enumeration class for use with the Tokenizer.
StdStructTypes This class holds the constants for standard structure type names, and a static method for determining if a string belongs to those names.
Stream Class to encapsulate a stream token.
StreamInputStream A StreamInputStream is an InputStream which provides the bytes from a PdfStream.
StreamTokenizer Tokenizer subclass which gets data from an object stream.
StringValuedToken Abstract class for all PDF tokens which consist of a character sequence.
StructureElement Class for element of PDF document structure tree.
StructureTree Class for PDF document structure tree.
TaggedProfile PDF profile checker for Tagged PDF documents.
Token Abstract class to encapsulate lexical tokens from a PDF file.
Tokenizer Tokenizer for PDF files.
X1aProfile PDF profile checker for PDF/X-1a documents.
X1Profile PDF profile checker for PDF/X-1 documents.
X2Profile PDF profile checker for PDF/X-2 documents.
X3Profile PDF profile checker for PDF/X-3 documents.
XProfileBase Abstract base class for PDF profilers of the PDF/X family.
 

Exception Summary
PdfException Abstract exception subclass used internally by the PDF module.
PdfInvalidException Exception subclass used internally by the PDF module.
PdfMalformedException Exception subclass used internally by the PDF module.
 

Package edu.harvard.hul.ois.jhove.module.pdf Description

Contains supporting classes for the PDF-HUL module.



jhove/doc/edu/harvard/hul/ois/jhove/module/pdf/package-tree.html0000644000707400001440000004516411510702366024014 0ustar garyusers edu.harvard.hul.ois.jhove.module.pdf Class Hierarchy (JHOVE Documentation)

Hierarchy For Package edu.harvard.hul.ois.jhove.module.pdf

Package Hierarchies:
All Packages

Class Hierarchy



jhove/doc/edu/harvard/hul/ois/jhove/module/tiff/0000755000707400001440000000000011510702010020725 5ustar garyusersjhove/doc/edu/harvard/hul/ois/jhove/module/tiff/DirectoryProperty.html0000644000707400001440000007031710771557535025370 0ustar garyusers DirectoryProperty (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.tiff
Class DirectoryProperty

java.lang.Object
  |
  +--edu.harvard.hul.ois.jhove.Property
        |
        +--edu.harvard.hul.ois.jhove.module.tiff.DirectoryProperty
Direct Known Subclasses:
GeoTagProperty, TiffIFDProperty

public abstract class DirectoryProperty
extends Property

This is an abstract class which subsumes both TiffIFDProperty and GeoTagProperty. It provides various methods for converting data types to output.

Author:
Gary McGath

Field Summary
protected  java.util.List _messages
           
protected  java.text.NumberFormat _numFormat
           
protected  java.util.List _propList
           
protected  boolean _rawOutput
           
 
Constructor Summary
DirectoryProperty(java.lang.String name, boolean rawOutput)
          Creates the DirectoryProperty object.
 
Method Summary
protected  void addBitmaskProperty(long lval, java.lang.String name, java.lang.String[] valueNames)
           
protected  void addDoubleArrayProperty(double[] larr, java.lang.String name)
           
protected  void addDoubleProperty(double dval, java.lang.String name)
           
protected  void addIntArrayProperty(int[] iarr, java.lang.String name)
           
protected  void addIntArrayProperty(int[] iarr, java.lang.String name, java.lang.String[] valueNames)
           
protected  void addIntProperty(int ival, java.lang.String name)
           
protected  void addIntProperty(int ival, java.lang.String name, int[] valueIndex, java.lang.String[] valueNames)
           
protected  void addIntProperty(int ival, java.lang.String name, java.lang.String[] valueNames)
           
protected  void addLongArrayProperty(long[] larr, java.lang.String name)
           
protected  void addLongProperty(long lval, java.lang.String name)
           
protected  void addRationalArrayProperty(Rational[] rarr, java.lang.String name)
           
protected  void addRationalProperty(Rational rat, java.lang.String name)
           
protected  void addStringArrayProperty(java.lang.String[] strval, java.lang.String name)
          General function for adding a property for a tag with an ASCII value.
protected  void addStringProperty(java.lang.String strval, java.lang.String name)
          General function for adding a property for a tag with an ASCII value.
protected  void addStringProperty(java.lang.String strval, java.lang.String name, java.lang.String[] rawStrs, java.lang.String[] subStrs)
          Adds a property for a tag with an ASCII value, where in non-raw output mode we substitute a more easily understood string.
 java.util.List getMessages()
          Get any messages that were generated in building this object.
protected  java.lang.String RationalToString(Rational rat)
           
 
Methods inherited from class edu.harvard.hul.ois.jhove.Property
getArity, getName, getType, getValue
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

_rawOutput

protected boolean _rawOutput

_propList

protected java.util.List _propList

_messages

protected java.util.List _messages

_numFormat

protected java.text.NumberFormat _numFormat
Constructor Detail

DirectoryProperty

public DirectoryProperty(java.lang.String name,
                         boolean rawOutput)
Creates the DirectoryProperty object.

Parameters:
rawOutput - true if numeric values should not be replaced with explanatory text
Method Detail

getMessages

public java.util.List getMessages()
Get any messages that were generated in building this object.


addStringProperty

protected void addStringProperty(java.lang.String strval,
                                 java.lang.String name)
General function for adding a property for a tag with an ASCII value.

Parameters:
strval - The string value of the property
name - The name of the property

addStringArrayProperty

protected void addStringArrayProperty(java.lang.String[] strval,
                                      java.lang.String name)
General function for adding a property for a tag with an ASCII value.

Parameters:
strval - The string values of the property
name - The name of the property

addStringProperty

protected void addStringProperty(java.lang.String strval,
                                 java.lang.String name,
                                 java.lang.String[] rawStrs,
                                 java.lang.String[] subStrs)
Adds a property for a tag with an ASCII value, where in non-raw output mode we substitute a more easily understood string. Any value which is not found in the rawStrs array will not be replaced. rawStrs and subStrs must be of equal length.

Parameters:
strval - The string value of the property
name - The name of the property
rawStrs - An array of Strings which may be tag values
subStrs - An array of Strings which will replace the raw tag values in corresponding positions in the array.

addIntArrayProperty

protected void addIntArrayProperty(int[] iarr,
                                   java.lang.String name)

addIntArrayProperty

protected void addIntArrayProperty(int[] iarr,
                                   java.lang.String name,
                                   java.lang.String[] valueNames)

addLongArrayProperty

protected void addLongArrayProperty(long[] larr,
                                    java.lang.String name)

addIntProperty

protected void addIntProperty(int ival,
                              java.lang.String name)

addIntProperty

protected void addIntProperty(int ival,
                              java.lang.String name,
                              java.lang.String[] valueNames)

addIntProperty

protected void addIntProperty(int ival,
                              java.lang.String name,
                              int[] valueIndex,
                              java.lang.String[] valueNames)

addLongProperty

protected void addLongProperty(long lval,
                               java.lang.String name)

addBitmaskProperty

protected void addBitmaskProperty(long lval,
                                  java.lang.String name,
                                  java.lang.String[] valueNames)

addRationalProperty

protected void addRationalProperty(Rational rat,
                                   java.lang.String name)

addRationalArrayProperty

protected void addRationalArrayProperty(Rational[] rarr,
                                        java.lang.String name)

RationalToString

protected java.lang.String RationalToString(Rational rat)

addDoubleProperty

protected void addDoubleProperty(double dval,
                                 java.lang.String name)

addDoubleArrayProperty

protected void addDoubleArrayProperty(double[] larr,
                                      java.lang.String name)


jhove/doc/edu/harvard/hul/ois/jhove/module/tiff/ExifIFD.html0000644000707400001440000011205611510702356023053 0ustar garyusers ExifIFD (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.tiff
Class ExifIFD

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.tiff.IFD
      extended by edu.harvard.hul.ois.jhove.module.tiff.ExifIFD

public class ExifIFD
extends IFD

Encapsulation of a Exif IFD


Field Summary
static java.lang.String[] COMPONENTSCONFIGURATION_L
           
static java.lang.String[] CONTRAST_L
           
static java.lang.String[] CUSTOMRENDERED_L
           
static java.lang.String[] EXPOSUREMODE_L
           
static java.lang.String[] EXPOSUREPROGRAM_L
           
static java.lang.String[] FILESOURCE_L
           
static int[] FLASH_INDEX
           
static java.lang.String[] FLASH_L
           
static java.lang.String[] FOCALPLANERESOLUTIONUNIT_L
           
static java.lang.String[] GAINCONTROL_L
           
static int[] LIGHTSOURCE_INDEX
           
static java.lang.String[] LIGHTSOURCE_L
           
static int[] METERINGMODE_INDEX
           
static java.lang.String[] METERINGMODE_L
           
static java.lang.String[] SATURATION_L
           
static java.lang.String[] SCENECAPTURETYPE_L
           
static java.lang.String[] SCENETYPE_L
           
static java.lang.String[] SENSINGMETHOD_L
           
static java.lang.String[] SHARPNESS_L
           
static java.lang.String[] SUBJECTDISTANCERANGE_L
           
static java.lang.String[] WHITEBALANCE_L
           
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.tiff.IFD
_bigEndian, _info, _next, _offset, _version, ASCII, BYTE, DOUBLE, EXIF, FLOAT, GLOBALPARAMETERS, GPSINFO, IFD, INTEROPERABILITY, LONG, NULL, RATIONAL, SBYTE, SHORT, SLONG, SRATIONAL, SSHORT, TIFF, TYPE, UNDEFINED
 
Constructor Summary
ExifIFD(long offset, RepInfo info, java.io.RandomAccessFile raf, boolean bigEndian)
          Instantiate an ExifIFD object.
 
Method Summary
 java.util.List exifProps(Property pHeader)
          Extracts and returns the Exif property list from a standard IFD property header.
 int getColorspace()
          returns the colorspace value (tag 40961).
 java.lang.String getExifVersion()
          Returns the Exif version string (tag 36864).
 java.lang.String getFlashpixVersion()
          Returns the Flashpix version string (tag 40960).
 NisoImageMetadata getNisoImageMetadata()
          Returns the constructed NisoImageMetadata.
 Property getProperty(boolean rawOutput)
          Get the IFD properties.
 void lookupTag(int tag, int type, long count, long value)
          Lookup an IFD tag.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.tiff.IFD
addBitmaskProperty, addIntegerArrayProperty, addIntegerProperty, addIntegerProperty, addRationalArrayProperty, addRationalProperty, average, calcValueSize, checkCount, checkType, checkType, getErrors, getNext, getOffset, getVersion, isBigEndian, isFirst, isThumbnail, parse, parse, parse, postParseInitialization, propertyHeader, readASCII, readASCIIArray, readByte, readByteArray, readDoubleArray, readLong, readLongArray, readRational, readRationalArray, readShort, readShortArray, readSignedRational, readSignedRationalArray, readSShortArray, readTrueByteArray, readUnsigned, setFirst, setThumbnail
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

COMPONENTSCONFIGURATION_L

public static final java.lang.String[] COMPONENTSCONFIGURATION_L

CONTRAST_L

public static final java.lang.String[] CONTRAST_L

CUSTOMRENDERED_L

public static final java.lang.String[] CUSTOMRENDERED_L

EXPOSUREMODE_L

public static final java.lang.String[] EXPOSUREMODE_L

EXPOSUREPROGRAM_L

public static final java.lang.String[] EXPOSUREPROGRAM_L

FILESOURCE_L

public static final java.lang.String[] FILESOURCE_L

FLASH_L

public static final java.lang.String[] FLASH_L

FLASH_INDEX

public static final int[] FLASH_INDEX

FOCALPLANERESOLUTIONUNIT_L

public static final java.lang.String[] FOCALPLANERESOLUTIONUNIT_L

GAINCONTROL_L

public static final java.lang.String[] GAINCONTROL_L

LIGHTSOURCE_L

public static final java.lang.String[] LIGHTSOURCE_L

LIGHTSOURCE_INDEX

public static final int[] LIGHTSOURCE_INDEX

METERINGMODE_L

public static final java.lang.String[] METERINGMODE_L

METERINGMODE_INDEX

public static final int[] METERINGMODE_INDEX

SATURATION_L

public static final java.lang.String[] SATURATION_L

SCENECAPTURETYPE_L

public static final java.lang.String[] SCENECAPTURETYPE_L

SCENETYPE_L

public static final java.lang.String[] SCENETYPE_L

SENSINGMETHOD_L

public static final java.lang.String[] SENSINGMETHOD_L

SHARPNESS_L

public static final java.lang.String[] SHARPNESS_L

SUBJECTDISTANCERANGE_L

public static final java.lang.String[] SUBJECTDISTANCERANGE_L

WHITEBALANCE_L

public static final java.lang.String[] WHITEBALANCE_L
Constructor Detail

ExifIFD

public ExifIFD(long offset,
               RepInfo info,
               java.io.RandomAccessFile raf,
               boolean bigEndian)
Instantiate an ExifIFD object.

Parameters:
offset - IFD offset
info - the RepInfo object
raf - TIFF file
bigEndian - True if big-endian file
Method Detail

getProperty

public Property getProperty(boolean rawOutput)
Get the IFD properties.

Specified by:
getProperty in class IFD

getExifVersion

public java.lang.String getExifVersion()
Returns the Exif version string (tag 36864).


getNisoImageMetadata

public NisoImageMetadata getNisoImageMetadata()
Returns the constructed NisoImageMetadata.


getFlashpixVersion

public java.lang.String getFlashpixVersion()
Returns the Flashpix version string (tag 40960).


getColorspace

public int getColorspace()
returns the colorspace value (tag 40961).


exifProps

public java.util.List exifProps(Property pHeader)
Extracts and returns the Exif property list from a standard IFD property header.


lookupTag

public void lookupTag(int tag,
                      int type,
                      long count,
                      long value)
               throws TiffException
Lookup an IFD tag.

Specified by:
lookupTag in class IFD
Throws:
TiffException


jhove/doc/edu/harvard/hul/ois/jhove/module/tiff/GPSInfoIFD.html0000644000707400001440000012531011510702356023422 0ustar garyusers GPSInfoIFD (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.tiff
Class GPSInfoIFD

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.tiff.IFD
      extended by edu.harvard.hul.ois.jhove.module.tiff.GPSInfoIFD

public class GPSInfoIFD
extends IFD

Encapsulation of a GPSInfo IFD (for TIFF/EP and Exif).


Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.tiff.IFD
_bigEndian, _info, _next, _offset, _version, ASCII, BYTE, DOUBLE, EXIF, FLOAT, GLOBALPARAMETERS, GPSINFO, IFD, INTEROPERABILITY, LONG, NULL, RATIONAL, SBYTE, SHORT, SLONG, SRATIONAL, SSHORT, TIFF, TYPE, UNDEFINED
 
Constructor Summary
GPSInfoIFD(long offset, RepInfo info, java.io.RandomAccessFile raf, boolean bigEndian)
          Instantiate an GPSInfoIFD object.
 
Method Summary
 Rational getGPSAltitude()
          Get the GPSAltitude (6).
 int getGPSAltitudeRef()
          Get the GPSAltitudeRef (5).
 java.lang.String getGPSDateStamp()
          Get the GPSDateStamp (29).
 Rational getGPSDestBearing()
          Get the GPSDestBearing (24).
 java.lang.String getGPSDestBearingRef()
          Get the GPSDestBearingRef (23).
 Rational getGPSDestDistance()
          Get the GPSDestDistance (26).
 java.lang.String getGPSDestDistanceRef()
          Get the GPSDestDistanceRef (25).
 Rational[] getGPSDestLatitude()
          Get the GPSDestLatitude (20).
 java.lang.String getGPSDestLatitudeRef()
          Get the GPSDestLatitudeRef (19).
 Rational[] getGPSDestLongitude()
          Get the GPSDestLongitude (22).
 java.lang.String getGPSDestLongitudeRef()
          Get the GPSDestLongitudeRef (21).
 int getGPSDifferential()
          Get the GPSDifferential (30).
 Rational getGPSDOP()
          Get the GPSDOP (11).
 Rational getGPSImgDirection()
          Get the GPSImgDirection (17).
 java.lang.String getGPSImgDirectionRef()
          Get the GPSImgDirectionRef (16).
 Rational[] getGPSLatitude()
          Get the GPSLatitude (2).
 java.lang.String getGPSLatitudeRef()
          Get the GPSLatitudeRef (1).
 Rational[] getGPSLongitude()
          Get the GPSLongitude (4).
 java.lang.String getGPSLongitudeRef()
          Get the GPSLongitudeRef (3).
 java.lang.String getGPSMapDatum()
          Get the GPSMapDatum (18).
 java.lang.String getGPSMeasureMode()
          Get the GPSMeasureMode (10).
 int[] getGPSProcessingMethod()
          Get the GPSProcessingMethod (27).
 java.lang.String getGPSSatellites()
          Get the GPSSatellites (8).
 Rational getGPSSpeed()
          Get the GPSSpeed (13).
 java.lang.String getGPSSpeedRef()
          Get the GPSSpeedRef (12).
 java.lang.String getGPStatus()
          Get the GPSStatus (9).
 Rational getGPSTrack()
          Get the GPSTrack (15).
 java.lang.String getGPSTrackRef()
          Get the GPSTrackRef (14).
 int[] getGPSVersionID()
          Get the GPSVersionID (1).
 Rational[] getGPTimeStamp()
          Get the GPSTimeStamp (7).
 Property getProperty(boolean rawOutput)
          Get the IFD properties.
 void lookupTag(int tag, int type, long count, long value)
          Lookup an IFD tag.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.tiff.IFD
addBitmaskProperty, addIntegerArrayProperty, addIntegerProperty, addIntegerProperty, addRationalArrayProperty, addRationalProperty, average, calcValueSize, checkCount, checkType, checkType, getErrors, getNext, getOffset, getVersion, isBigEndian, isFirst, isThumbnail, parse, parse, parse, postParseInitialization, propertyHeader, readASCII, readASCIIArray, readByte, readByteArray, readDoubleArray, readLong, readLongArray, readRational, readRationalArray, readShort, readShortArray, readSignedRational, readSignedRationalArray, readSShortArray, readTrueByteArray, readUnsigned, setFirst, setThumbnail
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

GPSInfoIFD

public GPSInfoIFD(long offset,
                  RepInfo info,
                  java.io.RandomAccessFile raf,
                  boolean bigEndian)
Instantiate an GPSInfoIFD object.

Parameters:
offset - IFD offset
info - The RepInfo object
raf - TIFF file
bigEndian - True if big-endian file
Method Detail

getGPSAltitude

public Rational getGPSAltitude()
Get the GPSAltitude (6).


getGPSAltitudeRef

public int getGPSAltitudeRef()
Get the GPSAltitudeRef (5).


getGPSDateStamp

public java.lang.String getGPSDateStamp()
Get the GPSDateStamp (29).


getGPSDestBearing

public Rational getGPSDestBearing()
Get the GPSDestBearing (24).


getGPSDestBearingRef

public java.lang.String getGPSDestBearingRef()
Get the GPSDestBearingRef (23).


getGPSDestDistance

public Rational getGPSDestDistance()
Get the GPSDestDistance (26).


getGPSDestDistanceRef

public java.lang.String getGPSDestDistanceRef()
Get the GPSDestDistanceRef (25).


getGPSDestLatitude

public Rational[] getGPSDestLatitude()
Get the GPSDestLatitude (20).


getGPSDestLatitudeRef

public java.lang.String getGPSDestLatitudeRef()
Get the GPSDestLatitudeRef (19).


getGPSDestLongitude

public Rational[] getGPSDestLongitude()
Get the GPSDestLongitude (22).


getGPSDestLongitudeRef

public java.lang.String getGPSDestLongitudeRef()
Get the GPSDestLongitudeRef (21).


getGPSDifferential

public int getGPSDifferential()
Get the GPSDifferential (30).


getGPSDOP

public Rational getGPSDOP()
Get the GPSDOP (11).


getGPSImgDirection

public Rational getGPSImgDirection()
Get the GPSImgDirection (17).


getGPSImgDirectionRef

public java.lang.String getGPSImgDirectionRef()
Get the GPSImgDirectionRef (16).


getGPSLatitude

public Rational[] getGPSLatitude()
Get the GPSLatitude (2).


getGPSLatitudeRef

public java.lang.String getGPSLatitudeRef()
Get the GPSLatitudeRef (1).


getGPSLongitude

public Rational[] getGPSLongitude()
Get the GPSLongitude (4).


getGPSLongitudeRef

public java.lang.String getGPSLongitudeRef()
Get the GPSLongitudeRef (3).


getGPSMapDatum

public java.lang.String getGPSMapDatum()
Get the GPSMapDatum (18).


getGPSMeasureMode

public java.lang.String getGPSMeasureMode()
Get the GPSMeasureMode (10).


getGPSProcessingMethod

public int[] getGPSProcessingMethod()
Get the GPSProcessingMethod (27).


getGPSSatellites

public java.lang.String getGPSSatellites()
Get the GPSSatellites (8).


getGPSSpeed

public Rational getGPSSpeed()
Get the GPSSpeed (13).


getGPSSpeedRef

public java.lang.String getGPSSpeedRef()
Get the GPSSpeedRef (12).


getGPStatus

public java.lang.String getGPStatus()
Get the GPSStatus (9).


getGPTimeStamp

public Rational[] getGPTimeStamp()
Get the GPSTimeStamp (7).


getGPSTrack

public Rational getGPSTrack()
Get the GPSTrack (15).


getGPSTrackRef

public java.lang.String getGPSTrackRef()
Get the GPSTrackRef (14).


getGPSVersionID

public int[] getGPSVersionID()
Get the GPSVersionID (1).


getProperty

public Property getProperty(boolean rawOutput)
Get the IFD properties.

Specified by:
getProperty in class IFD

lookupTag

public void lookupTag(int tag,
                      int type,
                      long count,
                      long value)
               throws TiffException
Lookup an IFD tag.

Specified by:
lookupTag in class IFD
Throws:
TiffException


jhove/doc/edu/harvard/hul/ois/jhove/module/tiff/GeoTiffStrings.html0000644000707400001440000005502111510702356024530 0ustar garyusers GeoTiffStrings (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.tiff
Class GeoTiffStrings

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.tiff.GeoTiffStrings

public class GeoTiffStrings
extends java.lang.Object

This class contains indexed string arrays for the various keys that are used by GeoTIFF. It contains no code and never needs to be instantiated.


Field Summary
static java.lang.String[] ANGULARUNITS
           
static int[] ANGULARUNITS_INDEX
           
static java.lang.String[] COORDINATETRANSFORMATION
           
static int[] COORDINATETRANSFORMATION_INDEX
           
static java.lang.String[] ELLIPSOID
           
static int[] ELLIPSOID_INDEX
           
static java.lang.String[] GEODETICDATUM
           
static int[] GEODETICDATUM_INDEX
           
static java.lang.String[] GEOGRAPHICS
           
static int[] GEOGRAPHICS_INDEX
           
static java.lang.String[] LINEARUNITS
           
static int[] LINEARUNITS_INDEX
           
static java.lang.String[] MODELTYPE
           
static int[] MODELTYPE_INDEX
           
static java.lang.String[] PRIMEMERIDIAN
           
static int[] PRIMEMERIDIAN_INDEX
           
static java.lang.String[] PROJECTEDCSTYPE
           
static int[] PROJECTEDCSTYPE_INDEX
           
static java.lang.String[] PROJECTION
           
static int[] PROJECTION_INDEX
           
static java.lang.String[] RASTERTYPE
           
static int[] RASTERTYPE_INDEX
           
static java.lang.String[] VERTICALCSDATUM
           
static int[] VERTICALCSDATUM_INDEX
           
static java.lang.String[] VERTICALCSTYPE
           
static int[] VERTICALCSTYPE_INDEX
           
 
Method Summary
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

MODELTYPE_INDEX

public static final int[] MODELTYPE_INDEX

MODELTYPE

public static final java.lang.String[] MODELTYPE

RASTERTYPE_INDEX

public static final int[] RASTERTYPE_INDEX

RASTERTYPE

public static final java.lang.String[] RASTERTYPE

LINEARUNITS_INDEX

public static final int[] LINEARUNITS_INDEX

LINEARUNITS

public static final java.lang.String[] LINEARUNITS

ANGULARUNITS_INDEX

public static final int[] ANGULARUNITS_INDEX

ANGULARUNITS

public static final java.lang.String[] ANGULARUNITS

GEOGRAPHICS_INDEX

public static final int[] GEOGRAPHICS_INDEX

GEOGRAPHICS

public static final java.lang.String[] GEOGRAPHICS

GEODETICDATUM_INDEX

public static final int[] GEODETICDATUM_INDEX

GEODETICDATUM

public static final java.lang.String[] GEODETICDATUM

ELLIPSOID_INDEX

public static final int[] ELLIPSOID_INDEX

ELLIPSOID

public static final java.lang.String[] ELLIPSOID

PRIMEMERIDIAN_INDEX

public static final int[] PRIMEMERIDIAN_INDEX

PRIMEMERIDIAN

public static final java.lang.String[] PRIMEMERIDIAN

PROJECTEDCSTYPE_INDEX

public static final int[] PROJECTEDCSTYPE_INDEX

PROJECTEDCSTYPE

public static final java.lang.String[] PROJECTEDCSTYPE

PROJECTION_INDEX

public static final int[] PROJECTION_INDEX

PROJECTION

public static final java.lang.String[] PROJECTION

COORDINATETRANSFORMATION_INDEX

public static final int[] COORDINATETRANSFORMATION_INDEX

COORDINATETRANSFORMATION

public static final java.lang.String[] COORDINATETRANSFORMATION

VERTICALCSTYPE_INDEX

public static final int[] VERTICALCSTYPE_INDEX

VERTICALCSTYPE

public static final java.lang.String[] VERTICALCSTYPE

VERTICALCSDATUM_INDEX

public static final int[] VERTICALCSDATUM_INDEX

VERTICALCSDATUM

public static final java.lang.String[] VERTICALCSDATUM


jhove/doc/edu/harvard/hul/ois/jhove/module/tiff/GeoTiffTags.html0000644000707400001440000005634710771557526024030 0ustar garyusers GeoTiffTags (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.tiff
Class GeoTiffTags

java.lang.Object
  |
  +--edu.harvard.hul.ois.jhove.module.tiff.TagFamily
        |
        +--edu.harvard.hul.ois.jhove.module.tiff.GeoTiffTags

public class GeoTiffTags
extends TagFamily

This class encapsulates the tags in the GeoTIFF extensions. An instance of this class will be created by TiffIFD; if tags in this class should not be recognized for a given IFD, it will be created disabled.


Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.tiff.TagFamily
_enabled, _ifd, _version, UNDEFINED
 
Constructor Summary
GeoTiffTags(TiffIFD ifd, boolean enabled, boolean rawOutput)
          Creates a GeoTiffTags object.
 
Method Summary
 GeoTag getGeoKeyDirectoryTag()
           
 double[] getModelPixelScale()
           
 double[] getModelTiepoints()
           
 double[] getModelTransformation()
           
protected  boolean lookupTag(TiffModule module, TiffIFD ifd, int tag, int fieldType, int nValues, long valueOffset, RepInfo info)
          Looks up a tag.
 void makeGeoAsciiParams(TiffTag tiffTag, long valueOffset)
           
 void makeGeoDoubleParams(TiffTag tiffTag, long valueOffset)
           
 void setModelPixelScale(double[] modelPixelScale)
           
 void setModelTiepoints(double[] modelTiepoints)
           
 void setModelTransformation(double[] modelTransformation)
           
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.tiff.TagFamily
checkCount, checkType, checkType, isEnabled, makeAscii, makeAsciiArray, makeDoubleArray, makeInt, makeIntArray, makeLong, makeLongArray, makeRational, makeRationalArray
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

GeoTiffTags

public GeoTiffTags(TiffIFD ifd,
                   boolean enabled,
                   boolean rawOutput)
Creates a GeoTiffTags object.

Parameters:
ifd - The IFD from which the tag was obtained
enabled - true if this set of tags is to be used. If false, no tags in this class will be recognized as valid.
rawOutput - true if the Property created for these tags should contain only raw data rather than explanatory strings
Method Detail

lookupTag

protected boolean lookupTag(TiffModule module,
                            TiffIFD ifd,
                            int tag,
                            int fieldType,
                            int nValues,
                            long valueOffset,
                            RepInfo info)
                     throws TiffException
Looks up a tag. Sets instance variables as necessary to record the tag, and may change the contents of the info parameter. If this object is not enabled, its lookupTag method must not be called.

Specified by:
lookupTag in class TagFamily
Parameters:
module - The TiffModule under which the tag is being read
ifd - The TiffIFD in which the tag was found
tag - The tag value for the tag being looked up
fieldType - The field type (using the TIFF type values)
nValues - The number of values indicated by the tag
valueOffset - The offset in the file to the value. If the size of the data is 4 or less, this will be an offset to the "offset" field itself.
info - The RepInfo object describing the current file
TiffException

getGeoKeyDirectoryTag

public GeoTag getGeoKeyDirectoryTag()

getModelPixelScale

public double[] getModelPixelScale()

getModelTiepoints

public double[] getModelTiepoints()

getModelTransformation

public double[] getModelTransformation()

makeGeoAsciiParams

public void makeGeoAsciiParams(TiffTag tiffTag,
                               long valueOffset)

makeGeoDoubleParams

public void makeGeoDoubleParams(TiffTag tiffTag,
                                long valueOffset)

setModelPixelScale

public void setModelPixelScale(double[] modelPixelScale)

setModelTiepoints

public void setModelTiepoints(double[] modelTiepoints)

setModelTransformation

public void setModelTransformation(double[] modelTransformation)


jhove/doc/edu/harvard/hul/ois/jhove/module/tiff/GlobalParametersIFD.html0000644000707400001440000006530711510702356025412 0ustar garyusers GlobalParametersIFD (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.tiff
Class GlobalParametersIFD

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.tiff.IFD
      extended by edu.harvard.hul.ois.jhove.module.tiff.GlobalParametersIFD

public class GlobalParametersIFD
extends IFD

Encapsulation of a GlobalParameters IFD, as defined by TIFF/FX, RFC 2301.

Author:
Gary McGath

Field Summary
static int CODINGMETHODS
          Tiff/FX-specific tags.
static int FAXPROFILE
          Tiff/FX-specific tags.
static int MODENUMBER
          Tiff/FX-specific tags.
static int PROFILETYPE
          Tiff/FX-specific tags.
static int VERSIONYEAR
          Tiff/FX-specific tags.
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.tiff.IFD
_bigEndian, _info, _next, _offset, _version, ASCII, BYTE, DOUBLE, EXIF, FLOAT, GLOBALPARAMETERS, GPSINFO, IFD, INTEROPERABILITY, LONG, NULL, RATIONAL, SBYTE, SHORT, SLONG, SRATIONAL, SSHORT, TIFF, TYPE, UNDEFINED
 
Constructor Summary
GlobalParametersIFD(long offset, RepInfo info, java.io.RandomAccessFile raf, boolean bigEndian)
          Instantiate a GlobalParametersIFD object.
 
Method Summary
 Property getProperty(boolean rawOutput)
          Get the IFD properties.
 void lookupTag(int tag, int type, long count, long value)
          Lookup an IFD tag.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.tiff.IFD
addBitmaskProperty, addIntegerArrayProperty, addIntegerProperty, addIntegerProperty, addRationalArrayProperty, addRationalProperty, average, calcValueSize, checkCount, checkType, checkType, getErrors, getNext, getOffset, getVersion, isBigEndian, isFirst, isThumbnail, parse, parse, parse, postParseInitialization, propertyHeader, readASCII, readASCIIArray, readByte, readByteArray, readDoubleArray, readLong, readLongArray, readRational, readRationalArray, readShort, readShortArray, readSignedRational, readSignedRationalArray, readSShortArray, readTrueByteArray, readUnsigned, setFirst, setThumbnail
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

PROFILETYPE

public static final int PROFILETYPE
Tiff/FX-specific tags.

See Also:
Constant Field Values

FAXPROFILE

public static final int FAXPROFILE
Tiff/FX-specific tags.

See Also:
Constant Field Values

CODINGMETHODS

public static final int CODINGMETHODS
Tiff/FX-specific tags.

See Also:
Constant Field Values

VERSIONYEAR

public static final int VERSIONYEAR
Tiff/FX-specific tags.

See Also:
Constant Field Values

MODENUMBER

public static final int MODENUMBER
Tiff/FX-specific tags.

See Also:
Constant Field Values
Constructor Detail

GlobalParametersIFD

public GlobalParametersIFD(long offset,
                           RepInfo info,
                           java.io.RandomAccessFile raf,
                           boolean bigEndian)
Instantiate a GlobalParametersIFD object.

Parameters:
offset - IFD offset
raf - TIFF file
bigEndian - True if big-endian file
Method Detail

getProperty

public Property getProperty(boolean rawOutput)
                     throws TiffException
Get the IFD properties.

Specified by:
getProperty in class IFD
Throws:
TiffException

lookupTag

public void lookupTag(int tag,
                      int type,
                      long count,
                      long value)
               throws TiffException
Lookup an IFD tag.

Specified by:
lookupTag in class IFD
Throws:
TiffException


jhove/doc/edu/harvard/hul/ois/jhove/module/tiff/IFD.html0000644000707400001440000022174111510702356022241 0ustar garyusers IFD (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.tiff
Class IFD

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.tiff.IFD
Direct Known Subclasses:
ExifIFD, GlobalParametersIFD, GPSInfoIFD, InteroperabilityIFD, TiffIFD

public abstract class IFD
extends java.lang.Object

Encapsulation of a TIFF image file directory (IFD).


Field Summary
protected  boolean _bigEndian
          True if big-endian file.
protected  RepInfo _info
          Representation information.
protected  long _next
          Offset of next IFD.
protected  long _offset
          IFD offset.
protected  int _version
          TIFF version.
static int ASCII
          TIFF ASCII type.
static int BYTE
          TIFF BYTE (unsigned 8-bit) type.
static int DOUBLE
          TIFF DOUBLE (64-bit IEEE floating point) type.
static int EXIF
          Exif IFD.
static int FLOAT
          TIFF FLOAT (32-bit IEEE floating point) type.
static int GLOBALPARAMETERS
          Global parameters IFD.
static int GPSINFO
          GPSInfo IFD.
static int IFD
          TIFF IFD (LONG) type.
static int INTEROPERABILITY
          Exif Interoperability IFD.
static int LONG
          TIFF LONG (unsigned 32-bit) type.
static int NULL
          Undefined value for integer tags.
static int RATIONAL
          TIFF RATIONAL (two LONGs) type.
static int SBYTE
          TIFF SBYTE (signed 8-bit) type.
static int SHORT
          TIFF SHORT (unsigned 16-bit) type.
static int SLONG
          TIFF SLONG (signed 32-bit) type.
static int SRATIONAL
          TIFF SRATIONAL (two SLONGs) type.
static int SSHORT
          TIFF SSHORT (signed 16-bit) type.
static int TIFF
          Standard TIFF IFD.
static java.lang.String[] TYPE
          TIFF type labels.
static int UNDEFINED
          TIFF UNDEFINED (unsigned 8-bit) type.
 
Constructor Summary
IFD(long offset, RepInfo info, java.io.RandomAccessFile raf, boolean bigEndian)
          Instantiate an IFD object.
 
Method Summary
protected  Property addBitmaskProperty(java.lang.String name, long value, java.lang.String[] labels, boolean rawOutput)
          Returns a Property representing a bitmask.
protected  Property addIntegerArrayProperty(java.lang.String name, int[] value, java.lang.String[] labels, boolean rawOutput)
          Returns an ARRAY Property representing an integer array.
protected  Property addIntegerProperty(java.lang.String name, int value, java.lang.String[] labels, boolean rawOutput)
          Returns an Property representing an integer value.
protected  Property addIntegerProperty(java.lang.String name, int value, java.lang.String[] labels, int[] index, boolean rawOutput)
          Returns an Property representing an integer value.
protected  Property addRationalArrayProperty(java.lang.String name, Rational[] r, boolean rawOutput)
           
protected  Property addRationalProperty(java.lang.String name, Rational r, boolean rawOutput)
          Returns a property for a tag with a RATIONAL value.
protected static Rational average(Rational r1, Rational r2)
           
static long calcValueSize(int type, long count)
          Calculate how many bytes a given number of fields of a given type will require.
protected static void checkCount(int tag, long count, int minCount)
          Check the tag entry count.
protected static void checkType(int tag, int type, int expected)
          Check the tag entry type.
protected static void checkType(int tag, int type, int type1, int type2)
          Check the tag entry type.
 java.util.List getErrors()
          Get any errors discovered during parsing.
 long getNext()
          Get the offset of the next IFD.
 long getOffset()
          Get the IFD offset.
abstract  Property getProperty(boolean rawOutput)
          Get the IFD properties.
 int getVersion()
          Get the TIFF version.
 boolean isBigEndian()
          Returns true if file is big-endian, false if little-endian.
 boolean isFirst()
          Return true if this is the first IFD.
 boolean isThumbnail()
          Return true if this is the thumbnail IFD.
abstract  void lookupTag(int tag, int type, long count, long value)
          Lookup IFD tag.
 long parse()
          Parse the IFD.
 long parse(boolean byteOffsetIsValid)
          Parse the IFD.
 long parse(boolean byteOffsetIsValid, boolean suppressErrors)
          Parse the IFD.
protected  void postParseInitialization()
          Perform initializations that have to wait until after the IFD has been parsed.
protected  Property propertyHeader(java.lang.String type, java.util.List entries)
          Standard IFD property header.
protected  java.lang.String readASCII(long count, long value)
          Reads a string value from the TIFF file.
protected  java.lang.String[] readASCIIArray(long count, long value)
          Reads an array of strings from the TIFF file.
protected  int readByte(int type, long count, long value)
          Reads and returns a single unsigned 8-bit integer value.
protected  int[] readByteArray(int type, long count, long value)
          Reads an array of bytes and returns it as an int array.
protected  double[] readDoubleArray(long count, long value)
          Reads a TIFF array of DOUBLE 64-bit values and returns it as a double array.
protected  long readLong(int type, long count, long value)
          Reads and returns a single unsigned 32-bit integer value.
protected  long[] readLongArray(int type, long count, long value)
          Reads a TIFF array of signed 32-bit integer values and returns it as a long array.
protected  Rational readRational(long count, long value)
          Reads a RATIONAL value and returns it as a Rational.
protected  Rational[] readRationalArray(long count, long value)
          Reads an array of RATIONAL values and returns it as an array of Rational.
protected  int readShort(int type, long count, long value)
          Reads and returns a single unsigned 16-bit value.
protected  int[] readShortArray(int type, long count, long value)
          Reads a TIFF array of unsigned 16-bit values and returns it as an int array.
protected  Rational readSignedRational(long count, long value)
          Reads an SRATIONAL value and returns it as a Rational.
protected  Rational[] readSignedRationalArray(long count, long value)
          Reads an array of SRATIONAL values and returns it as an array of Rational.
protected  int[] readSShortArray(int type, long count, long value)
          Reads a TIFF array of signed 16-bit values and returns it as an int array.
protected  byte[] readTrueByteArray(int type, long count, long value)
          Reads an array of bytes and returns it as a byte array.
 long readUnsigned(int type)
          Reads an unsigned number of any type.
 void setFirst(boolean first)
          Sets flag indicating whether this is the first IFD.
 void setThumbnail(boolean thumbnail)
          Sets flag indicating whether this is the "thumbnail" IFD.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

TIFF

public static final int TIFF
Standard TIFF IFD.

See Also:
Constant Field Values

EXIF

public static final int EXIF
Exif IFD.

See Also:
Constant Field Values

INTEROPERABILITY

public static final int INTEROPERABILITY
Exif Interoperability IFD.

See Also:
Constant Field Values

GPSINFO

public static final int GPSINFO
GPSInfo IFD.

See Also:
Constant Field Values

GLOBALPARAMETERS

public static final int GLOBALPARAMETERS
Global parameters IFD.

See Also:
Constant Field Values

NULL

public static final int NULL
Undefined value for integer tags.

See Also:
Constant Field Values

BYTE

public static final int BYTE
TIFF BYTE (unsigned 8-bit) type.

See Also:
Constant Field Values

ASCII

public static final int ASCII
TIFF ASCII type.

See Also:
Constant Field Values

SHORT

public static final int SHORT
TIFF SHORT (unsigned 16-bit) type.

See Also:
Constant Field Values

LONG

public static final int LONG
TIFF LONG (unsigned 32-bit) type.

See Also:
Constant Field Values

RATIONAL

public static final int RATIONAL
TIFF RATIONAL (two LONGs) type.

See Also:
Constant Field Values

SBYTE

public static final int SBYTE
TIFF SBYTE (signed 8-bit) type.

See Also:
Constant Field Values

UNDEFINED

public static final int UNDEFINED
TIFF UNDEFINED (unsigned 8-bit) type.

See Also:
Constant Field Values

SSHORT

public static final int SSHORT
TIFF SSHORT (signed 16-bit) type.

See Also:
Constant Field Values

SLONG

public static final int SLONG
TIFF SLONG (signed 32-bit) type.

See Also:
Constant Field Values

SRATIONAL

public static final int SRATIONAL
TIFF SRATIONAL (two SLONGs) type.

See Also:
Constant Field Values

FLOAT

public static final int FLOAT
TIFF FLOAT (32-bit IEEE floating point) type.

See Also:
Constant Field Values

DOUBLE

public static final int DOUBLE
TIFF DOUBLE (64-bit IEEE floating point) type.

See Also:
Constant Field Values

IFD

public static final int IFD
TIFF IFD (LONG) type.

See Also:
Constant Field Values

TYPE

public static final java.lang.String[] TYPE
TIFF type labels.


_bigEndian

protected boolean _bigEndian
True if big-endian file.


_info

protected RepInfo _info
Representation information.


_next

protected long _next
Offset of next IFD.


_offset

protected long _offset
IFD offset.


_version

protected int _version
TIFF version.

Constructor Detail

IFD

public IFD(long offset,
           RepInfo info,
           java.io.RandomAccessFile raf,
           boolean bigEndian)
Instantiate an IFD object.

Parameters:
offset - IFD offset
info - Representation information
raf - TIFF file
bigEndian - True if big-endian file
Method Detail

getErrors

public java.util.List getErrors()
Get any errors discovered during parsing.


getNext

public long getNext()
Get the offset of the next IFD.


getOffset

public long getOffset()
Get the IFD offset.


getProperty

public abstract Property getProperty(boolean rawOutput)
                              throws TiffException
Get the IFD properties.

Throws:
TiffException

getVersion

public int getVersion()
Get the TIFF version.


isFirst

public boolean isFirst()
Return true if this is the first IFD.


isThumbnail

public boolean isThumbnail()
Return true if this is the thumbnail IFD.


lookupTag

public abstract void lookupTag(int tag,
                               int type,
                               long count,
                               long value)
                        throws TiffException
Lookup IFD tag.

Throws:
TiffException

parse

public long parse()
           throws TiffException
Parse the IFD. Errors are not suppressed, and odd byte offsets for tags not allowed.

Returns:
The offset of the next IFD
Throws:
TiffException

parse

public long parse(boolean byteOffsetIsValid,
                  boolean suppressErrors)
           throws TiffException
Parse the IFD.

Parameters:
byteOffsetIsValid - If true, allow offsets on odd byte boundaries
suppressErrors - If true, return IFD even with errors
Returns:
The offset of the next IFD
Throws:
TiffException

parse

public long parse(boolean byteOffsetIsValid)
           throws TiffException
Parse the IFD. Errors are not suppressed.

Parameters:
byteOffsetIsValid - If true, allow offsets on odd byte boundaries
Returns:
The offset of the next IFD
Throws:
TiffException

setFirst

public void setFirst(boolean first)
Sets flag indicating whether this is the first IFD.


setThumbnail

public void setThumbnail(boolean thumbnail)
Sets flag indicating whether this is the "thumbnail" IFD. The second IFD in the top-level chain is assumed to be the Thumbnail IFD.


addBitmaskProperty

protected Property addBitmaskProperty(java.lang.String name,
                                      long value,
                                      java.lang.String[] labels,
                                      boolean rawOutput)
Returns a Property representing a bitmask. If rawOutput is true, returns a LIST property whose elements are STRING properties. The string values of these STRING properties are the elements of labels whose indices correspond to 1 bits in the bitmask, counting the low-order bit as bit 0. if rawOutput is false, returns a LONG property whose numeric value is value.


addIntegerProperty

protected Property addIntegerProperty(java.lang.String name,
                                      int value,
                                      java.lang.String[] labels,
                                      boolean rawOutput)
Returns an Property representing an integer value. If rawOutput is true, returns an INTEGER property, and labels and index are unused. Otherwise, returns a STRING property, with the string being the element of labels whose index is value.


addIntegerProperty

protected Property addIntegerProperty(java.lang.String name,
                                      int value,
                                      java.lang.String[] labels,
                                      int[] index,
                                      boolean rawOutput)
Returns an Property representing an integer value. If rawOutput is true, returns an INTEGER property, and labels and index are unused. Otherwise, returns a STRING property, with the string being the element of labels whose index is the index of value in index.


addIntegerArrayProperty

protected Property addIntegerArrayProperty(java.lang.String name,
                                           int[] value,
                                           java.lang.String[] labels,
                                           boolean rawOutput)
Returns an ARRAY Property representing an integer array. If rawOutput is true, the elements of the property array are INTEGER properties, and labels is unused. Otherwise, the elements of the array are STRING properties, with the elements of value used as indices into labels.


addRationalProperty

protected Property addRationalProperty(java.lang.String name,
                                       Rational r,
                                       boolean rawOutput)
Returns a property for a tag with a RATIONAL value. If rawOutput is true, returns a property with type RATIONAL. Otherwise, returns a property with type STRING, and the text representation of the Rational value as a floating-point ratio.


addRationalArrayProperty

protected Property addRationalArrayProperty(java.lang.String name,
                                            Rational[] r,
                                            boolean rawOutput)

postParseInitialization

protected void postParseInitialization()
Perform initializations that have to wait until after the IFD has been parsed.


propertyHeader

protected Property propertyHeader(java.lang.String type,
                                  java.util.List entries)
Standard IFD property header.


readASCII

protected java.lang.String readASCII(long count,
                                     long value)
                              throws java.io.IOException
Reads a string value from the TIFF file. If there are non-ASCII characters, they're escaped as %XX

Parameters:
count - Length of string
value - Offset of string
Throws:
java.io.IOException

readASCIIArray

protected java.lang.String[] readASCIIArray(long count,
                                            long value)
                                     throws java.io.IOException
Reads an array of strings from the TIFF file.

Parameters:
count - Number of strings to read
value - Offset from which to read
Throws:
java.io.IOException

readByte

protected int readByte(int type,
                       long count,
                       long value)
                throws java.io.IOException
Reads and returns a single unsigned 8-bit integer value.

Parameters:
type - TIFF type to read; must be an 8-bit type
count - Unused
value - Offset from which to read
Throws:
java.io.IOException

readByteArray

protected int[] readByteArray(int type,
                              long count,
                              long value)
                       throws java.io.IOException
Reads an array of bytes and returns it as an int array.

Parameters:
type - TIFF type to read; must be an 8-bit type
count - Number of bytes to read
value - Offset from which to read
Throws:
java.io.IOException

readTrueByteArray

protected byte[] readTrueByteArray(int type,
                                   long count,
                                   long value)
                            throws java.io.IOException
Reads an array of bytes and returns it as a byte array.

Parameters:
type - Unused
count - Number of bytes to read
value - Offset from which to read
Throws:
java.io.IOException

readDoubleArray

protected double[] readDoubleArray(long count,
                                   long value)
                            throws java.io.IOException
Reads a TIFF array of DOUBLE 64-bit values and returns it as a double array.

Parameters:
count - Number of values to read
value - Offset from which to read
Throws:
java.io.IOException

readLong

protected long readLong(int type,
                        long count,
                        long value)
                 throws java.io.IOException
Reads and returns a single unsigned 32-bit integer value.

Parameters:
type - TIFF type to read; must be a 32-bit type
count - Unused
value - Offset from which to read
Throws:
java.io.IOException

readLongArray

protected long[] readLongArray(int type,
                               long count,
                               long value)
                        throws java.io.IOException
Reads a TIFF array of signed 32-bit integer values and returns it as a long array.

Parameters:
type - TIFF type to read; must be a 32-bit type
count - Number of values to read
value - Offset from which to read
Throws:
java.io.IOException

readUnsigned

public long readUnsigned(int type)
                  throws java.io.IOException
Reads an unsigned number of any type.

Parameters:
type - TIFF type to read
Throws:
java.io.IOException

readRational

protected Rational readRational(long count,
                                long value)
                         throws java.io.IOException
Reads a RATIONAL value and returns it as a Rational.

Throws:
java.io.IOException

readRationalArray

protected Rational[] readRationalArray(long count,
                                       long value)
                                throws java.io.IOException
Reads an array of RATIONAL values and returns it as an array of Rational.

Throws:
java.io.IOException

readSignedRational

protected Rational readSignedRational(long count,
                                      long value)
                               throws java.io.IOException
Reads an SRATIONAL value and returns it as a Rational.

Throws:
java.io.IOException

readSignedRationalArray

protected Rational[] readSignedRationalArray(long count,
                                             long value)
                                      throws java.io.IOException
Reads an array of SRATIONAL values and returns it as an array of Rational.

Throws:
java.io.IOException

readShort

protected int readShort(int type,
                        long count,
                        long value)
                 throws java.io.IOException
Reads and returns a single unsigned 16-bit value.

Throws:
java.io.IOException

readShortArray

protected int[] readShortArray(int type,
                               long count,
                               long value)
                        throws java.io.IOException
Reads a TIFF array of unsigned 16-bit values and returns it as an int array.

Throws:
java.io.IOException

readSShortArray

protected int[] readSShortArray(int type,
                                long count,
                                long value)
                         throws java.io.IOException
Reads a TIFF array of signed 16-bit values and returns it as an int array.

Throws:
java.io.IOException

calcValueSize

public static long calcValueSize(int type,
                                 long count)
Calculate how many bytes a given number of fields of a given type will require.

Parameters:
type - Field type
count - Field count

isBigEndian

public boolean isBigEndian()
Returns true if file is big-endian, false if little-endian.


checkCount

protected static void checkCount(int tag,
                                 long count,
                                 int minCount)
                          throws TiffException
Check the tag entry count.

Parameters:
tag - Tag entry value
count - Tag entry count
minCount - Tag count
Throws:
TiffException

checkType

protected static void checkType(int tag,
                                int type,
                                int expected)
                         throws TiffException
Check the tag entry type.

Parameters:
tag - Tag entry value
type - Tag entry type
expected - Tag type
Throws:
TiffException

checkType

protected static void checkType(int tag,
                                int type,
                                int type1,
                                int type2)
                         throws TiffException
Check the tag entry type.

Parameters:
tag - Tag entry value
type - Tag entry type
type1 - Tag type
type2 - Alternate tag type
Throws:
TiffException

average

protected static Rational average(Rational r1,
                                  Rational r2)


jhove/doc/edu/harvard/hul/ois/jhove/module/tiff/InteroperabilityIFD.html0000644000707400001440000005621411510702356025510 0ustar garyusers InteroperabilityIFD (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.tiff
Class InteroperabilityIFD

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.tiff.IFD
      extended by edu.harvard.hul.ois.jhove.module.tiff.InteroperabilityIFD

public class InteroperabilityIFD
extends IFD

Encapsulation of an Exif Interoperability IFD (for Exif).


Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.tiff.IFD
_bigEndian, _info, _next, _offset, _version, ASCII, BYTE, DOUBLE, EXIF, FLOAT, GLOBALPARAMETERS, GPSINFO, IFD, INTEROPERABILITY, LONG, NULL, RATIONAL, SBYTE, SHORT, SLONG, SRATIONAL, SSHORT, TIFF, TYPE, UNDEFINED
 
Constructor Summary
InteroperabilityIFD(long offset, RepInfo info, java.io.RandomAccessFile raf, boolean bigEndian)
          Instantiate an InteroperabilityIFD object.
 
Method Summary
 java.lang.String getInteroperabilityIndex()
          Get the InteroperabilityIndex tag (1).
 Property getProperty(boolean rawOutput)
          Get the IFD properties.
 void lookupTag(int tag, int type, long count, long value)
          Lookup an IFD tag.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.tiff.IFD
addBitmaskProperty, addIntegerArrayProperty, addIntegerProperty, addIntegerProperty, addRationalArrayProperty, addRationalProperty, average, calcValueSize, checkCount, checkType, checkType, getErrors, getNext, getOffset, getVersion, isBigEndian, isFirst, isThumbnail, parse, parse, parse, postParseInitialization, propertyHeader, readASCII, readASCIIArray, readByte, readByteArray, readDoubleArray, readLong, readLongArray, readRational, readRationalArray, readShort, readShortArray, readSignedRational, readSignedRationalArray, readSShortArray, readTrueByteArray, readUnsigned, setFirst, setThumbnail
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

InteroperabilityIFD

public InteroperabilityIFD(long offset,
                           RepInfo info,
                           java.io.RandomAccessFile raf,
                           boolean bigEndian)
Instantiate an InteroperabilityIFD object.

Parameters:
offset - IFD offset
info - the RepInfo object
raf - TIFF file
bigEndian - True if big-endian file
Method Detail

getInteroperabilityIndex

public java.lang.String getInteroperabilityIndex()
Get the InteroperabilityIndex tag (1).


getProperty

public Property getProperty(boolean rawOutput)
Get the IFD properties.

Specified by:
getProperty in class IFD

lookupTag

public void lookupTag(int tag,
                      int type,
                      long count,
                      long value)
               throws TiffException
Lookup an IFD tag.

Specified by:
lookupTag in class IFD
Throws:
TiffException


jhove/doc/edu/harvard/hul/ois/jhove/module/tiff/StandardIFDProperty.html0000644000707400001440000004111210771557536025477 0ustar garyusers StandardIFDProperty (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.tiff
Class StandardIFDProperty

java.lang.Object
  |
  +--edu.harvard.hul.ois.jhove.Property
        |
        +--edu.harvard.hul.ois.jhove.module.tiff.DirectoryProperty
              |
              +--edu.harvard.hul.ois.jhove.module.tiff.TiffIFDProperty
                    |
                    +--edu.harvard.hul.ois.jhove.module.tiff.StandardIFDProperty

public class StandardIFDProperty
extends TiffIFDProperty

This class encapsulates the complex Property which is constructed with the information specific to a top-level TIFF IFD, as opposed to a private IFD.

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffIFDProperty
_ifd
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.tiff.DirectoryProperty
_messages, _numFormat, _propList, _rawOutput
 
Constructor Summary
StandardIFDProperty(TiffIFD ifd, boolean rawOutput)
          Creates the TiffIFDProperty object from an IFD.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffIFDProperty
addOffset, addSubIFDList
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.tiff.DirectoryProperty
addBitmaskProperty, addDoubleArrayProperty, addDoubleProperty, addIntArrayProperty, addIntArrayProperty, addIntProperty, addIntProperty, addIntProperty, addLongArrayProperty, addLongProperty, addRationalArrayProperty, addRationalProperty, addStringArrayProperty, addStringProperty, addStringProperty, getMessages, RationalToString
 
Methods inherited from class edu.harvard.hul.ois.jhove.Property
getArity, getName, getType, getValue
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

StandardIFDProperty

public StandardIFDProperty(TiffIFD ifd,
                           boolean rawOutput)
Creates the TiffIFDProperty object from an IFD. The IFD must be of type STANDARD.

Parameters:
ifd - The IFD object from which to extract information
rawOutput - true if numeric values should not be replaced with explanatory text


jhove/doc/edu/harvard/hul/ois/jhove/module/tiff/TagFamily.html0000644000707400001440000011401010771557535023521 0ustar garyusers TagFamily (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.tiff
Class TagFamily

java.lang.Object
  |
  +--edu.harvard.hul.ois.jhove.module.tiff.TagFamily
Direct Known Subclasses:
CoreTags, EPTags, ExifIFDTags, ExifTags, FTags, GeoTiffTags, GPSIFDTags, InterOpIFDTags, ITTags

public abstract class TagFamily
extends java.lang.Object

Subclasses of this abstract class encapsulate a set of TIFF tags, providing accessor functions for their values. Any TiffIFD instance should instantiate all the subclasses of TagFamily, enabling those which are actually legitimate for the IFD by setting the enabled parameter in the constructor.


Field Summary
protected  boolean _enabled
          True if tag family enabled.
protected  TiffIFD _ifd
          TIFF IFD.
protected  int _version
          TIFF version.
static int UNDEFINED
          Undefined initial value.
 
Constructor Summary
TagFamily(TiffIFD ifd, boolean enabled)
          TagFamily constructor.
 
Method Summary
protected  void checkCount(int tag, int nValues, int minCount)
          Check the tag entry count.
protected  void checkType(int tag, int fieldType, int type)
          Check the tag entry type.
protected  void checkType(int tag, int fieldType, int type1, int type2)
          Check the tag entry type.
 boolean isEnabled()
          Returns true if this TagFamily object is enabled.
protected abstract  boolean lookupTag(TiffModule module, TiffIFD ifd, int tag, int fieldType, int nValues, long valueOffset, RepInfo info)
          Looks up a tag in a TagFamily object.
protected  java.lang.String makeAscii(TiffModule module, TiffTag tiffTag, long valueOffset)
          Obtains a string value from a tag whose type is ASCII or UNDEFINED.
protected  java.lang.String[] makeAsciiArray(TiffModule module, TiffTag tiffTag, long valueOffset)
          Obtains a string array from a tag whose type is ASCII or UNDEFINED.
protected  double[] makeDoubleArray(TiffModule module, TiffTag tiffTag, long valueOffset)
          Obtains a double array value from a tag whose type is DOUBLE.
protected  int makeInt(TiffModule module, TiffTag tiffTag, long valueOffset)
          Obtains an integer value from a tag whose type is integer-compatible.
protected  int[] makeIntArray(TiffModule module, TiffTag tiffTag, long valueOffset)
          Obtains an integer array value from a tag whose type is integer-compatible.
protected  long makeLong(TiffModule module, TiffTag tiffTag, long valueOffset)
          Obtains a long value from a tag whose type is integer-compatible.
protected  long[] makeLongArray(TiffModule module, TiffTag tiffTag, long valueOffset)
          Obtains a long array value from a tag whose type is integer-compatible.
protected  Rational makeRational(TiffModule module, TiffTag tiffTag, long valueOffset)
          Obtains a Rational value from a tag whose type is RATIONAL.
protected  Rational[] makeRationalArray(TiffModule module, TiffTag tiffTag, long valueOffset)
          Obtains a Rational array value from a tag whose type is Rational.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

UNDEFINED

public static final int UNDEFINED
Undefined initial value.

See Also:
Constant Field Values

_enabled

protected boolean _enabled
True if tag family enabled.


_ifd

protected TiffIFD _ifd
TIFF IFD.


_version

protected int _version
TIFF version.

Constructor Detail

TagFamily

public TagFamily(TiffIFD ifd,
                 boolean enabled)
TagFamily constructor. Subclasses of TagFamily should call this as a superclass constructor.

Parameters:
ifd - The IFD from which the tag came
enabled - true if we should make use of this TagFamily subclass for the current IFD
Method Detail

checkCount

protected void checkCount(int tag,
                          int nValues,
                          int minCount)
                   throws TiffException
Check the tag entry count.

Parameters:
tag - Tag entry value
nValues - Tag entry count
minCount - Tag count
TiffException

checkType

protected void checkType(int tag,
                         int fieldType,
                         int type)
                  throws TiffException
Check the tag entry type.

Parameters:
tag - Tag entry value
fieldType - Tag entry type
type - Tag type
TiffException

checkType

protected void checkType(int tag,
                         int fieldType,
                         int type1,
                         int type2)
                  throws TiffException
Check the tag entry type.

Parameters:
tag - Tag entry value
fieldType - Tag entry type
type1 - Tag type
type2 - Alternate tag type
TiffException

isEnabled

public boolean isEnabled()
Returns true if this TagFamily object is enabled.


lookupTag

protected abstract boolean lookupTag(TiffModule module,
                                     TiffIFD ifd,
                                     int tag,
                                     int fieldType,
                                     int nValues,
                                     long valueOffset,
                                     RepInfo info)
                              throws TiffException
Looks up a tag in a TagFamily object. Sets instance variables as necessary to record the tag, and may change the contents of the info parameter. If a TagFamily object is not enabled, its lookupTag method must not be called.

Parameters:
module - The TiffModule under which the tag is being read
ifd - The TiffIFD in which the tag was found
tag - The tag value for the tag being looked up
fieldType - The field type (using the TIFF type values)
nValues - The number of values indicated by the tag
valueOffset - The offset in the file to the value. If the size of the data is 4 or less, this will be an offset to the "offset" field itself.
info - The RepInfo object describing the current file
TiffException

makeAscii

protected java.lang.String makeAscii(TiffModule module,
                                     TiffTag tiffTag,
                                     long valueOffset)
                              throws java.io.IOException
Obtains a string value from a tag whose type is ASCII or UNDEFINED. This should be used only with tags which are expected to have a single string; if it has more than one string (separated by nulls), only the first will be returned.

Parameters:
module - The TiffModule under which we are operating
tiffTag - The TiffTag from which we are extracting the value
valueOffset - The offset to the data value. If the value is contained in the tag, this must be the offset to the datum in the tag itself.
java.io.IOException

makeAsciiArray

protected java.lang.String[] makeAsciiArray(TiffModule module,
                                            TiffTag tiffTag,
                                            long valueOffset)
                                     throws java.io.IOException
Obtains a string array from a tag whose type is ASCII or UNDEFINED. This should be used with tags which may contain multiple, null-separated strings.

Parameters:
module - The TiffModule under which we are operating
tiffTag - The TiffTag from which we are extracting the value
valueOffset - The offset to the data value. If the value is contained in the tag, this must be the offset to the datum in the tag itself.
java.io.IOException

makeDoubleArray

protected double[] makeDoubleArray(TiffModule module,
                                   TiffTag tiffTag,
                                   long valueOffset)
                            throws java.io.IOException
Obtains a double array value from a tag whose type is DOUBLE. This should be used with tags which may have multiple values.

Parameters:
module - The TiffModule under which we are operating
tiffTag - The TiffTag from which we are extracting the value
valueOffset - The offset to the data value.
java.io.IOException

makeInt

protected int makeInt(TiffModule module,
                      TiffTag tiffTag,
                      long valueOffset)
               throws java.io.IOException
Obtains an integer value from a tag whose type is integer-compatible. This should be used only with tags which are expected to have a single value; if it has more than one value, only the first will be returned.

Parameters:
module - The TiffModule under which we are operating
tiffTag - The TiffTag from which we are extracting the value
valueOffset - The offset to the data value. If the value is contained in the tag, this must be the offset to the datum in the tag itself.
java.io.IOException

makeIntArray

protected int[] makeIntArray(TiffModule module,
                             TiffTag tiffTag,
                             long valueOffset)
                      throws java.io.IOException
Obtains an integer array value from a tag whose type is integer-compatible. This should be used with tags which may have multiple values.

Parameters:
module - The TiffModule under which we are operating
tiffTag - The TiffTag from which we are extracting the value
valueOffset - The offset to the data value.
java.io.IOException

makeLong

protected long makeLong(TiffModule module,
                        TiffTag tiffTag,
                        long valueOffset)
                 throws java.io.IOException
Obtains a long value from a tag whose type is integer-compatible. This should be used only with tags which are expected to have a single value; if it has more than one value, only the first will be returned.

Parameters:
module - The TiffModule under which we are operating
tiffTag - The TiffTag from which we are extracting the value
valueOffset - The offset to the data value. If the value is contained in the tag, this must be the offset to the datum in the tag itself.
java.io.IOException

makeLongArray

protected long[] makeLongArray(TiffModule module,
                               TiffTag tiffTag,
                               long valueOffset)
                        throws java.io.IOException
Obtains a long array value from a tag whose type is integer-compatible. This should be used with tags which may have multiple values.

Parameters:
module - The TiffModule under which we are operating
tiffTag - The TiffTag from which we are extracting the value
valueOffset - The offset to the data value.
java.io.IOException

makeRational

protected Rational makeRational(TiffModule module,
                                TiffTag tiffTag,
                                long valueOffset)
                         throws java.io.IOException
Obtains a Rational value from a tag whose type is RATIONAL. This should be used only with tags which are expected to have a single value; if it has more than one value, only the first will be returned.

Parameters:
module - The TiffModule under which we are operating
tiffTag - The TiffTag from which we are extracting the value
valueOffset - The offset to the data value. If the value is contained in the tag, this must be the offset to the datum in the tag itself.
java.io.IOException

makeRationalArray

protected Rational[] makeRationalArray(TiffModule module,
                                       TiffTag tiffTag,
                                       long valueOffset)
                                throws java.io.IOException
Obtains a Rational array value from a tag whose type is Rational. This should be used with tags which may have multiple values.

Parameters:
module - The TiffModule under which we are operating
tiffTag - The TiffTag from which we are extracting the value
valueOffset - The offset to the data value.
java.io.IOException


jhove/doc/edu/harvard/hul/ois/jhove/module/tiff/TiffException.html0000644000707400001440000002703411510702356024405 0ustar garyusers TiffException (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.tiff
Class TiffException

java.lang.Object
  extended by java.lang.Throwable
      extended by java.lang.Exception
          extended by edu.harvard.hul.ois.jhove.module.tiff.TiffException
All Implemented Interfaces:
java.io.Serializable

public final class TiffException
extends java.lang.Exception

Exception subclass used internally by the TIFF module.

See Also:
Serialized Form

Constructor Summary
TiffException(java.lang.String m)
          Create a TiffException.
TiffException(java.lang.String m, long offset)
          Create a TiffException with specified offset.
 
Method Summary
 long getOffset()
          Returns the offset at which the exception occurred.
 
Methods inherited from class java.lang.Throwable
fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

TiffException

public TiffException(java.lang.String m)
Create a TiffException.


TiffException

public TiffException(java.lang.String m,
                     long offset)
Create a TiffException with specified offset.

Method Detail

getOffset

public long getOffset()
Returns the offset at which the exception occurred.



jhove/doc/edu/harvard/hul/ois/jhove/module/tiff/TiffFXBase.html0000644000707400001440000005423211510702356023557 0ustar garyusers TiffFXBase (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.tiff
Class TiffFXBase

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
      extended by edu.harvard.hul.ois.jhove.module.tiff.TiffFXBase
Direct Known Subclasses:
TiffProfileFXC, TiffProfileFXF, TiffProfileFXJ, TiffProfileFXL, TiffProfileFXM, TiffProfileFXS

public abstract class TiffFXBase
extends TiffProfile

Base class for all profiles under TIFF/FX. All TIFF/FX profiles should call TiffFXBase.satisfiesClass to establish that common requirements are met.

Author:
Gary McGath

Field Summary
static int GLOBALPARAMETERSIFD
          Tiff/FX-specific tags.
static int STRIPROWCOUNTS
          Tiff/FX-specific tags.
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
_mimeClass, _profileText, MIME_1314, MIME_FX, MIME_GENERIC
 
Constructor Summary
TiffFXBase()
           
 
Method Summary
protected  int perCMtoPerInch(int res)
          Convert a units/cm value to a units/inch value.
protected  boolean satisfiesClass(TiffIFD ifd)
          Test for common requirements of all Tiff/FX profiles.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
getMimeClass, getText, isAlreadyOK, satisfiesBackgroundColorIndicator, satisfiesBackgroundColorIndicator, satisfiesCompression, satisfiesCompression, satisfiesDotRange, satisfiesFillOrder, satisfiesImageColorIndicator, satisfiesImageColorIndicator, satisfiesImageWidth, satisfiesIndexed, satisfiesNewSubfileType, satisfiesNewSubfileType, satisfiesOrientation, satisfiesOrientation, satisfiesPhotometricInterpretation, satisfiesPhotometricInterpretation, satisfiesPlanarConfiguration, satisfiesPlanarConfiguration, satisfiesProfile, satisfiesResolutionUnit, satisfiesResolutionUnit, satisfiesSamplesPerPixel, satisfiesSamplesPerPixel, satisfiesThisProfile, satisfiesXResolution, satisfiesYResolution, setAlreadyOK
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

GLOBALPARAMETERSIFD

public static final int GLOBALPARAMETERSIFD
Tiff/FX-specific tags.

See Also:
Constant Field Values

STRIPROWCOUNTS

public static final int STRIPROWCOUNTS
Tiff/FX-specific tags.

See Also:
Constant Field Values
Constructor Detail

TiffFXBase

public TiffFXBase()
Method Detail

satisfiesClass

protected boolean satisfiesClass(TiffIFD ifd)
Test for common requirements of all Tiff/FX profiles. Subclasses should call satisfiesClass() from their satisfiesThisProfile() method to avoid redundant code. If this method returns false, the IFD does not meet the requirements of any TIFF/FX profile. Calling this also guarantees that the image length, image width, bits per sample, X resolution (sampling frequency), Y resolution and page number values are non-null objects.


perCMtoPerInch

protected int perCMtoPerInch(int res)
Convert a units/cm value to a units/inch value. For expected values, we use a table lookup to avoid rounding problems. If a value isn't in the table, we do a rounded conversion.



jhove/doc/edu/harvard/hul/ois/jhove/module/tiff/TiffIFD.html0000644000707400001440000053477011510702356023063 0ustar garyusers TiffIFD (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.tiff
Class TiffIFD

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.tiff.IFD
      extended by edu.harvard.hul.ois.jhove.module.tiff.TiffIFD

public class TiffIFD
extends IFD

Encapsulation of standard TIFF IFD.


Field Summary
static int ARTIST
          Standard TIFF 6.0 tags.
static java.lang.String[] BACKGROUNDCOLORINDICATOR_L
           
static int BITSPERSAMPLE
          Standard TIFF 6.0 tags.
static int CELLLENGTH
          Standard TIFF 6.0 tags.
static int CELLWIDTH
          Standard TIFF 6.0 tags.
static java.lang.String[] CFALAYOUT_L
           
static int COLORMAP
          Standard TIFF 6.0 tags.
static int COMPRESSION
          Standard TIFF 6.0 tags.
static int COPYRIGHT
          Standard TIFF 6.0 tags.
static int DATETIME
          Standard TIFF 6.0 tags.
static int DOCUMENTNAME
          Standard TIFF 6.0 tags.
static int DOTRANGE
          Standard TIFF 6.0 tags.
static int EXTRASAMPLES
          Standard TIFF 6.0 tags.
static int FILLORDER
          Standard TIFF 6.0 tags.
static int FREEBYTECOUNTS
          Standard TIFF 6.0 tags.
static int FREEOFFSETS
          Standard TIFF 6.0 tags.
static int GEOGANGULARUNITSGEOKEY
          GeoTIFF key values.
static int GEOGANGULARUNITSIZEGEOKEY
          GeoTIFF key values.
static int GEOGAZIMUTHUNITSGEOKEY
          GeoTIFF key values.
static int GEOGCITATIONGEOKEY
          GeoTIFF key values.
static int GEOGELLIPSOIDGEOKEY
          GeoTIFF key values.
static int GEOGGEODETICDATUMGEOKEY
          GeoTIFF key values.
static int GEOGINVFLATTENINGGEOKEY
          GeoTIFF key values.
static int GEOGLINEARUNITSGEOKEY
          GeoTIFF key values.
static int GEOGLINEARUNITSIZEGEOKEY
          GeoTIFF key values.
static int GEOGPRIMEMERIDIANGEOKEY
          GeoTIFF key values.
static int GEOGPRIMEMERIDIANLONGGEOKEY
          GeoTIFF key values.
static int GEOGRAPHICTYPEGEOKEY
          GeoTIFF key values.
static int GEOGSEMIMAJORAXISGEOKEY
          GeoTIFF key values.
static int GEOGSEMIMINORAXISGEOKEY
          GeoTIFF key values.
static int GRAYRESPONSECURVE
          Standard TIFF 6.0 tags.
static int GRAYRESPONSEUNIT
          Standard TIFF 6.0 tags.
static int GTCITATIONGEOKEY
          GeoTIFF key values.
static int GTMODELTYPEGEOKEY
          GeoTIFF key values.
static int GTRASTERTYPEGEOKEY
          GeoTIFF key values.
static int HALFTONEHINTS
          Standard TIFF 6.0 tags.
static java.lang.String[] HCUSAGE_L
           
static int HOSTCOMPUTER
          Standard TIFF 6.0 tags.
static java.lang.String[] IMAGECOLORINDICATOR_L
           
static int IMAGEDESCRIPTION
          Standard TIFF 6.0 tags.
static java.lang.String[] IMAGELAYER_L
           
static int IMAGELENGTH
          Standard TIFF 6.0 tags.
static int IMAGEWIDTH
          Standard TIFF 6.0 tags.
static int INKNAMES
          Standard TIFF 6.0 tags.
static int INKSET
          Standard TIFF 6.0 tags.
static int JPEGACTABLES
          Standard TIFF 6.0 tags.
static int JPEGDCTABLES
          Standard TIFF 6.0 tags.
static int JPEGINTERCHANGEFORMAT
          Standard TIFF 6.0 tags.
static int JPEGINTERCHANGEFORMATLENGTH
          Standard TIFF 6.0 tags.
static int JPEGLOSSLESSPREDICTORS
          Standard TIFF 6.0 tags.
static int JPEGPOINTTRANSFORMS
          Standard TIFF 6.0 tags.
static int JPEGPROC
          Standard TIFF 6.0 tags.
static int JPEGQTABLES
          Standard TIFF 6.0 tags.
static int JPEGRESTARTINTERVAL
          Standard TIFF 6.0 tags.
static int MAKE
          Standard TIFF 6.0 tags.
static java.lang.String[] MAKERNOTESAFETY_L
           
static int MAXSAMPLEVALUE
          Standard TIFF 6.0 tags.
static int MINSAMPLEVALUE
          Standard TIFF 6.0 tags.
static int MODEL
          Standard TIFF 6.0 tags.
static int NEWSUBFILETYPE
          Standard TIFF 6.0 tags.
static int NUMBEROFINKS
          Standard TIFF 6.0 tags.
static int ORIENTATION
          Standard TIFF 6.0 tags.
static int PAGENAME
          Standard TIFF 6.0 tags.
static int PAGENUMBER
          Standard TIFF 6.0 tags.
static int PCSCITATIONGEOKEY
          GeoTIFF key values.
static int PHOTOMETRICINTERPRETATION
          Standard TIFF 6.0 tags.
static int PLANARCONFIGURATION
          Standard TIFF 6.0 tags.
static int PREDICTOR
          Standard TIFF 6.0 tags.
static int PRIMARYCHROMATICITIES
          Standard TIFF 6.0 tags.
static int PROJAZIMUTHANGLEGEOKEY
          GeoTIFF key values.
static int PROJCENTEREASTINGGEOKEY
          GeoTIFF key values.
static int PROJCENTERLATGEOKEY
          GeoTIFF key values.
static int PROJCENTERLONGGEOKEY
          GeoTIFF key values.
static int PROJCOORDTRANSGEOKEY
          GeoTIFF key values.
static int PROJECTEDCSTYPEGEOKEY
          GeoTIFF key values.
static int PROJECTIONGEOKEY
          GeoTIFF key values.
static int PROJFALSEEASTINGGEOKEY
          GeoTIFF key values.
static int PROJFALSENORTHINGGEOKEY
          GeoTIFF key values.
static int PROJFALSEORIGINEASTINGGEOKEY
          GeoTIFF key values.
static int PROJFALSEORIGINLATGEOKEY
          GeoTIFF key values.
static int PROJFALSEORIGINLONGGEOKEY
          GeoTIFF key values.
static int PROJFALSEORIGINNORTHINGGEOKEY
          GeoTIFF key values.
static int PROJFALSEORIGINNORTHINGGEOKEY_2
          GeoTIFF key values.
static int PROJLINEARUNITSGEOKEY
          GeoTIFF key values.
static int PROJLINEARUNITSIZEGEOKEY
          GeoTIFF key values.
static int PROJNATORIGINLATGEOKEY
          GeoTIFF key values.
static int PROJNATORIGINLONGGEOKEY
          GeoTIFF key values.
static int PROJSCALEATCENTERGEOKEY
          GeoTIFF key values.
static int PROJSCALEATNATORIGINGEOKEY
          GeoTIFF key values.
static int PROJSTDPARALLEL1GEOKEY
          GeoTIFF key values.
static int PROJSTDPARALLEL2GEOKEY
          GeoTIFF key values.
static int PROJSTRAIGHTVERTPOLELONGEOKEY
          GeoTIFF key values.
static int REFERENCEBLACKWHITE
          Standard TIFF 6.0 tags.
static int RESOLUTIONUNIT
          Standard TIFF 6.0 tags.
static int ROWSPERSTRIP
          Standard TIFF 6.0 tags.
static int SAMPLEFORMAT
          Standard TIFF 6.0 tags.
static int SAMPLESPERPIXEL
          Standard TIFF 6.0 tags.
static int SMAXSAMPLEVALUE
          Standard TIFF 6.0 tags.
static int SMINSAMPLEVALUE
          Standard TIFF 6.0 tags.
static int SOFTWARE
          Standard TIFF 6.0 tags.
static int STRIPBYTECOUNTS
          Standard TIFF 6.0 tags.
static int STRIPOFFSETS
          Standard TIFF 6.0 tags.
static int SUBFILETYPE
          Standard TIFF 6.0 tags.
static int T4OPTIONS
          Standard TIFF 6.0 tags.
static int T6OPTIONS
          Standard TIFF 6.0 tags.
static int TARGETPRINTER
          Standard TIFF 6.0 tags.
static int THRESHHOLDING
          Standard TIFF 6.0 tags.
static int TILEBYTECOUNTS
          Standard TIFF 6.0 tags.
static int TILELENGTH
          Standard TIFF 6.0 tags.
static int TILEOFFSETS
          Standard TIFF 6.0 tags.
static int TILEWIDTH
          Standard TIFF 6.0 tags.
static int TRANSFERFUNCTION
          Standard TIFF 6.0 tags.
static int TRANSFERRANGE
          Standard TIFF 6.0 tags.
static java.lang.String[] TRANSPARENCYINDICATOR_L
           
static int VERTICALCITATIONGEOKEY
          GeoTIFF key values.
static int VERTICALCSTYPEGEOKEY
          GeoTIFF key values.
static int VERTICALDATUMGEOKEY
          GeoTIFF key values.
static int VERTICALUNITSGEOKEY
          GeoTIFF key values.
static int WHITEPOINT
          Standard TIFF 6.0 tags.
static int XPOSITION
          Standard TIFF 6.0 tags.
static int XRESOLUTION
          Standard TIFF 6.0 tags.
static int YCBCRCOEFFICIENTS
          Standard TIFF 6.0 tags.
static int YCBCRPOSITIONING
          Standard TIFF 6.0 tags.
static int YCBCRSUBSAMPLING
          Standard TIFF 6.0 tags.
static int YPOSITION
          Standard TIFF 6.0 tags.
static int YRESOLUTION
          Standard TIFF 6.0 tags.
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.tiff.IFD
_bigEndian, _info, _next, _offset, _version, ASCII, BYTE, DOUBLE, EXIF, FLOAT, GLOBALPARAMETERS, GPSINFO, IFD, INTEROPERABILITY, LONG, NULL, RATIONAL, SBYTE, SHORT, SLONG, SRATIONAL, SSHORT, TIFF, TYPE, UNDEFINED
 
Constructor Summary
TiffIFD(long offset, RepInfo info, java.io.RandomAccessFile raf, boolean bigEndian)
          Instantiate an TiffIFD object.
 
Method Summary
 int[] getAnnotations()
          Returns the value of the ANNOTATIONS (50255) tag.
 Rational getAperatureValue()
          Returns the value of the APERTUREVALUE (37378) tag.
 Rational[] getAsShotNeutral()
          Returns the value of the AsShotNeutral (50728) tag.
 Rational[] getAsShotWhiteXY()
          Returns the value of the AsShotWhiteXY (50729) tag.
 int getBackgroundColorIndicator()
          Returns the value of the TIFF/IT BACKGROUNDCOLORINDICATOR (34024) tag.
 int getBackgroundColorValue()
          Returns the value of the BACKGROUNDCOLORVALUE (34026) tag.
 java.lang.String getBatteryLevel()
          Returns the value of the BATTERYLEVEL (33423) tag.
 int getBitsPerExtendedRunLength()
          Returns the value of the BITSPEREXTENDEDRUNLENGTH (34021) tag.
 int getBitsPerRunLength()
          Returns the value of the BITSPERRUNLENGTH (34020) tag.
 int getCellLength()
          Returns the value of the CELLLENGTH (265) tag.
 int getCellWidth()
          Returns the value of the CELLWIDTH (264) tag.
 int[] getCFAPattern()
          Returns the value of the CFAPATTERN (33422) tag.
 int[] getCFAPlaneColor()
          Returns the value of the CFAPlaneColor (50710) tag.
 int[] getCFARepeatPatternDim()
          Returns the value of the CFAREPEATPATTERNDIM (33421) tag.
 int[] getClipPath()
          Returns the value of the CLIPPATH (343) tag.
 java.lang.String getColorSequence()
          Returns the value of the COLORSEQUENCE (34017) tag.
 int[] getColorTable()
          Returns the value of the COLORTABLE (34022) tag.
 Rational getCompressedBitsPerPixel()
          Returns the value of the COMPRESSEDBITSPERPIXEL (37122) tag.
 java.lang.String getCopyright()
          Returns the value of the COPYRIGHT (33432) tag.
 java.lang.String getDateTime()
          Returns the value of the DATETIME (306) tag.
 int[] getDNGVersion()
          Returns the value of the DNGVERSION (50706) tag.
 java.lang.String getDocumentName()
          Returns the value of the DOCUMENTNAME (269) tag.
 int[] getDotRange()
          Returns the value of the DOTRANGE (336) tag.
 long getExifIFD()
          Return the offset of the Exif IFD.
 int getExposureProgram()
          Returns the value of the EXPOSUREPROGRAM (34850) tag.
 int getFillOrder()
          Returns the value of the FILLORDER (266) tag.
 int getFocalPlaneResolutionUnit()
          Returns the value of the FOCALPLANERESOLUTIONUNIT (37392) tag.
 Rational getFocalPlaneXResolution()
          Returns the value of the FOCALPLANEXRESOLUTION (37390) tag.
 Rational getFocalPlaneYResolution()
          Returns the value of the FOCALPLANEYRESOLUTION (37390) tag.
 int[] getGeoKeyDirectoryTag()
          Returns the value of the GEOKEYDIRECTORYTAG (34735) tag.
 long getGlobalParametersIFD()
          Return the offset of the GlobalParameters IFD.
 long getGPSInfoIFD()
          Return the offset of the GPSInfo IFD.
 int getImageColorIndicator()
          Returns the value of the IMAGECOLORINDICATOR (34023) tag.
 int getImageColorValue()
          Returns the value of the IMAGECOLORVALUE (34025) tag.
 java.lang.String getImageDescription()
          Returns the value of the IMAGEDESCRIPTION (270) tag.
 java.lang.String getImageHistory()
          Returns the value of the IMAGEHISTORY (37395) tag.
 int[] getImageLayer()
          Returns the value of the IMAGELAYER (34732) tag.
 long getImageNumber()
          Returns the value of the IMAGENUMBER (37393) tag.
 int[] getImageSourceData()
          Returns the value of the IMAGESOURCEDATA (37724) tag.
 int getIndexed()
          Returns the value of the INDEXED (364) tag.
 java.lang.String[] getInkNames()
          Returns the value of the INKNAMES (333) tag.
 int getInkSet()
          Returns the value of the INKSET (332) tag.
 int[] getInterColourProfile()
          Returns the value of the ICC_PROFILE tag.
 int getInterlace()
          Returns the value of the INTERLACE (34857) tag.
 long getInteroperabilityIFD()
          Returns the offset of the Exif Interoperability IFD.
 long[] getIPTCNAA()
          Returns the value of the IPTCNAA (33723) tag.
 int[] getISOSpeedRatings()
          Returns the value of the ISOSPEEDRATINGS (34855) tag.
 java.lang.String getIT8Header()
          Returns the value of the IT8HEADER (34018) tag.
 long getJpegInterchangeFormat()
           
 int getJPEGProc()
          Returns the value of the JPEGPROC (512) tag.
 Rational getMaxAperatureValue()
          Returns the value of the MAXAPERTUREVALUE (37381) tag.
 double[] getModelTiepointTag()
          Returns the value of the MODELTIEPOINTTAG (33922) tag.
 double[] getModelTransformationTag()
          Returns the value of the MODELTRANSFORMATIONTAG (34264) tag.
 long getNewSubfileType()
          Returns the value of the NEWSUBFILETYPE (254) tag.
 NisoImageMetadata getNisoImageMetadata()
          Returns the constructed NisoImageMetadata.
 int[] getNoise()
          Returns the value of the NOISE (37389) tag.
 int getNumberOfInks()
          Returns the value of the NUMBEROFINKS (334) tag.
 int[] getOECF()
          Returns the value of the OECF (34856) tag.
 java.lang.String getPageName()
          Returns the value of the PAGENAME (285) tag.
 int[] getPageNumber()
          Returns the value of the PAGENUMBER (297) tag.
 int[] getPhotoshopProperties()
          Returns the value of the PHOTOSHOPPROPS (34377) tag.
 int[] getPixelIntensityRange()
          Returns the value of the PIXELINTENSITYRANGE (34027) tag.
 Property getProperty(boolean rawOutput)
          Get the IFD properties.
 int getRasterPadding()
          Returns the value of the RASTERPADDING (34019) tag.
 java.lang.String getSecurityClasssification()
          Returns the value of the SECURITYCLASSIFICATION (37394) tag.
 int getSelfTimerMode()
          Returns the value of the SELFTIMERMODE (34859) tag.
 Rational getShutterSpeedValue()
          Returns the value of the SHUTTERSPEEDVALUE (37377) tag.
 java.lang.String getSite()
          Returns the value of the SITE (34016) tag.
 int[] getSpatialFrequencyResponse()
          Returns the value of the SPATIALFREQUENCYRESPONSE (37388) tag.
 java.lang.String getSpectralSensitivity()
          Returns the value of the SPECTRALSENSITIVITY (34852) tag.
 long[] getStripRowCounts()
          Returns the value of the STRIPROWCOUNTS (559) tag.
 long[] getSubIFDs()
          Returns the value of the SUBIFDS (330) tag.
 int[] getSubjectLocation()
          Returns the value of the SUBJECTLOCATION (37396) tag.
 long getT4Options()
          Returns the value of the T4OPTIONS (292) tag.
 long getT6Options()
          Returns the value of the T6OPTIONS (293) tag.
 ExifIFD getTheExifIFD()
          Returns the Exif IFD object, or null if none.
 GlobalParametersIFD getTheGlobalParametersIFD()
          Returns the GlobalParameters IFD object, or null if none.
 GPSInfoIFD getTheGPSInfoIFD()
          Returns the GPS info IFD object, or null if none.
 InteroperabilityIFD getTheInteroperabilityIFD()
          Returns the Interoperability IFD object, or null if none.
 int getThreshholding()
          Returns the value of the THRESHHOLDING (263) tag.
 java.lang.String getTIFFEPStandardID()
          Returns the value of the TIFFEPSTANDARDID (37398) tag.
 int[] getTimeZoneOffset()
          Returns the value of the TIMEZONEOFFSET (34858) tag.
 int getTransparencyIndicator()
          Returns the value of the TRANSPARENCYINDICATOR (34028) tag.
 java.lang.String getUniqueCameraModel()
          Returns the value of the DNG UNIQUECAMERAMODEL (50708) tag.
 long getXClipPathUnits()
          Returns the value of the XCLIPPATHUNITS (344) tag.
 Rational getXPosition()
          Returns the value of the XPOSITION (286) tag.
 Rational getYPosition()
          Returns the value of the XPOSITION (287) tag.
 void lookupTag(int tag, int type, long count, long value)
          Looks up an IFD tag.
protected  void postParseInitialization()
          Perform initializations that have to wait until after the IFD has been parsed.
 void setTheExifIFD(ExifIFD exif)
           
 void setTheGlobalParametersIFD(GlobalParametersIFD gp)
           
 void setTheGPSInfoIFD(GPSInfoIFD gpsInfo)
           
 void setTheInteroperabilityIFD(InteroperabilityIFD interOp)
           
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.tiff.IFD
addBitmaskProperty, addIntegerArrayProperty, addIntegerProperty, addIntegerProperty, addRationalArrayProperty, addRationalProperty, average, calcValueSize, checkCount, checkType, checkType, getErrors, getNext, getOffset, getVersion, isBigEndian, isFirst, isThumbnail, parse, parse, parse, propertyHeader, readASCII, readASCIIArray, readByte, readByteArray, readDoubleArray, readLong, readLongArray, readRational, readRationalArray, readShort, readShortArray, readSignedRational, readSignedRationalArray, readSShortArray, readTrueByteArray, readUnsigned, setFirst, setThumbnail
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

NEWSUBFILETYPE

public static final int NEWSUBFILETYPE
Standard TIFF 6.0 tags.

See Also:
Constant Field Values

SUBFILETYPE

public static final int SUBFILETYPE
Standard TIFF 6.0 tags.

See Also:
Constant Field Values

IMAGEWIDTH

public static final int IMAGEWIDTH
Standard TIFF 6.0 tags.

See Also:
Constant Field Values

IMAGELENGTH

public static final int IMAGELENGTH
Standard TIFF 6.0 tags.

See Also:
Constant Field Values

BITSPERSAMPLE

public static final int BITSPERSAMPLE
Standard TIFF 6.0 tags.

See Also:
Constant Field Values

COMPRESSION

public static final int COMPRESSION
Standard TIFF 6.0 tags.

See Also:
Constant Field Values

PHOTOMETRICINTERPRETATION

public static final int PHOTOMETRICINTERPRETATION
Standard TIFF 6.0 tags.

See Also:
Constant Field Values

THRESHHOLDING

public static final int THRESHHOLDING
Standard TIFF 6.0 tags.

See Also:
Constant Field Values

CELLWIDTH

public static final int CELLWIDTH
Standard TIFF 6.0 tags.

See Also:
Constant Field Values

CELLLENGTH

public static final int CELLLENGTH
Standard TIFF 6.0 tags.

See Also:
Constant Field Values

FILLORDER

public static final int FILLORDER
Standard TIFF 6.0 tags.

See Also:
Constant Field Values

DOCUMENTNAME

public static final int DOCUMENTNAME
Standard TIFF 6.0 tags.

See Also:
Constant Field Values

IMAGEDESCRIPTION

public static final int IMAGEDESCRIPTION
Standard TIFF 6.0 tags.

See Also:
Constant Field Values

MAKE

public static final int MAKE
Standard TIFF 6.0 tags.

See Also:
Constant Field Values

MODEL

public static final int MODEL
Standard TIFF 6.0 tags.

See Also:
Constant Field Values

STRIPOFFSETS

public static final int STRIPOFFSETS
Standard TIFF 6.0 tags.

See Also:
Constant Field Values

ORIENTATION

public static final int ORIENTATION
Standard TIFF 6.0 tags.

See Also:
Constant Field Values

SAMPLESPERPIXEL

public static final int SAMPLESPERPIXEL
Standard TIFF 6.0 tags.

See Also:
Constant Field Values

ROWSPERSTRIP

public static final int ROWSPERSTRIP
Standard TIFF 6.0 tags.

See Also:
Constant Field Values

STRIPBYTECOUNTS

public static final int STRIPBYTECOUNTS
Standard TIFF 6.0 tags.

See Also:
Constant Field Values

MINSAMPLEVALUE

public static final int MINSAMPLEVALUE
Standard TIFF 6.0 tags.

See Also:
Constant Field Values

MAXSAMPLEVALUE

public static final int MAXSAMPLEVALUE
Standard TIFF 6.0 tags.

See Also:
Constant Field Values

XRESOLUTION

public static final int XRESOLUTION
Standard TIFF 6.0 tags.

See Also:
Constant Field Values

YRESOLUTION

public static final int YRESOLUTION
Standard TIFF 6.0 tags.

See Also:
Constant Field Values

PLANARCONFIGURATION

public static final int PLANARCONFIGURATION
Standard TIFF 6.0 tags.

See Also:
Constant Field Values

PAGENAME

public static final int PAGENAME
Standard TIFF 6.0 tags.

See Also:
Constant Field Values

XPOSITION

public static final int XPOSITION
Standard TIFF 6.0 tags.

See Also:
Constant Field Values

YPOSITION

public static final int YPOSITION
Standard TIFF 6.0 tags.

See Also:
Constant Field Values

FREEOFFSETS

public static final int FREEOFFSETS
Standard TIFF 6.0 tags.

See Also:
Constant Field Values

FREEBYTECOUNTS

public static final int FREEBYTECOUNTS
Standard TIFF 6.0 tags.

See Also:
Constant Field Values

GRAYRESPONSEUNIT

public static final int GRAYRESPONSEUNIT
Standard TIFF 6.0 tags.

See Also:
Constant Field Values

GRAYRESPONSECURVE

public static final int GRAYRESPONSECURVE
Standard TIFF 6.0 tags.

See Also:
Constant Field Values

T4OPTIONS

public static final int T4OPTIONS
Standard TIFF 6.0 tags.

See Also:
Constant Field Values

T6OPTIONS

public static final int T6OPTIONS
Standard TIFF 6.0 tags.

See Also:
Constant Field Values

RESOLUTIONUNIT

public static final int RESOLUTIONUNIT
Standard TIFF 6.0 tags.

See Also:
Constant Field Values

PAGENUMBER

public static final int PAGENUMBER
Standard TIFF 6.0 tags.

See Also:
Constant Field Values

TRANSFERFUNCTION

public static final int TRANSFERFUNCTION
Standard TIFF 6.0 tags.

See Also:
Constant Field Values

SOFTWARE

public static final int SOFTWARE
Standard TIFF 6.0 tags.

See Also:
Constant Field Values

DATETIME

public static final int DATETIME
Standard TIFF 6.0 tags.

See Also:
Constant Field Values

ARTIST

public static final int ARTIST
Standard TIFF 6.0 tags.

See Also:
Constant Field Values

HOSTCOMPUTER

public static final int HOSTCOMPUTER
Standard TIFF 6.0 tags.

See Also:
Constant Field Values

PREDICTOR

public static final int PREDICTOR
Standard TIFF 6.0 tags.

See Also:
Constant Field Values

WHITEPOINT

public static final int WHITEPOINT
Standard TIFF 6.0 tags.

See Also:
Constant Field Values

PRIMARYCHROMATICITIES

public static final int PRIMARYCHROMATICITIES
Standard TIFF 6.0 tags.

See Also:
Constant Field Values

COLORMAP

public static final int COLORMAP
Standard TIFF 6.0 tags.

See Also:
Constant Field Values

HALFTONEHINTS

public static final int HALFTONEHINTS
Standard TIFF 6.0 tags.

See Also:
Constant Field Values

TILEWIDTH

public static final int TILEWIDTH
Standard TIFF 6.0 tags.

See Also:
Constant Field Values

TILELENGTH

public static final int TILELENGTH
Standard TIFF 6.0 tags.

See Also:
Constant Field Values

TILEOFFSETS

public static final int TILEOFFSETS
Standard TIFF 6.0 tags.

See Also:
Constant Field Values

TILEBYTECOUNTS

public static final int TILEBYTECOUNTS
Standard TIFF 6.0 tags.

See Also:
Constant Field Values

INKSET

public static final int INKSET
Standard TIFF 6.0 tags.

See Also:
Constant Field Values

INKNAMES

public static final int INKNAMES
Standard TIFF 6.0 tags.

See Also:
Constant Field Values

NUMBEROFINKS

public static final int NUMBEROFINKS
Standard TIFF 6.0 tags.

See Also:
Constant Field Values

DOTRANGE

public static final int DOTRANGE
Standard TIFF 6.0 tags.

See Also:
Constant Field Values

TARGETPRINTER

public static final int TARGETPRINTER
Standard TIFF 6.0 tags.

See Also:
Constant Field Values

EXTRASAMPLES

public static final int EXTRASAMPLES
Standard TIFF 6.0 tags.

See Also:
Constant Field Values

SAMPLEFORMAT

public static final int SAMPLEFORMAT
Standard TIFF 6.0 tags.

See Also:
Constant Field Values

SMINSAMPLEVALUE

public static final int SMINSAMPLEVALUE
Standard TIFF 6.0 tags.

See Also:
Constant Field Values

SMAXSAMPLEVALUE

public static final int SMAXSAMPLEVALUE
Standard TIFF 6.0 tags.

See Also:
Constant Field Values

TRANSFERRANGE

public static final int TRANSFERRANGE
Standard TIFF 6.0 tags.

See Also:
Constant Field Values

JPEGPROC

public static final int JPEGPROC
Standard TIFF 6.0 tags.

See Also:
Constant Field Values

JPEGINTERCHANGEFORMAT

public static final int JPEGINTERCHANGEFORMAT
Standard TIFF 6.0 tags.

See Also:
Constant Field Values

JPEGINTERCHANGEFORMATLENGTH

public static final int JPEGINTERCHANGEFORMATLENGTH
Standard TIFF 6.0 tags.

See Also:
Constant Field Values

JPEGRESTARTINTERVAL

public static final int JPEGRESTARTINTERVAL
Standard TIFF 6.0 tags.

See Also:
Constant Field Values

JPEGLOSSLESSPREDICTORS

public static final int JPEGLOSSLESSPREDICTORS
Standard TIFF 6.0 tags.

See Also:
Constant Field Values

JPEGPOINTTRANSFORMS

public static final int JPEGPOINTTRANSFORMS
Standard TIFF 6.0 tags.

See Also:
Constant Field Values

JPEGQTABLES

public static final int JPEGQTABLES
Standard TIFF 6.0 tags.

See Also:
Constant Field Values

JPEGDCTABLES

public static final int JPEGDCTABLES
Standard TIFF 6.0 tags.

See Also:
Constant Field Values

JPEGACTABLES

public static final int JPEGACTABLES
Standard TIFF 6.0 tags.

See Also:
Constant Field Values

YCBCRCOEFFICIENTS

public static final int YCBCRCOEFFICIENTS
Standard TIFF 6.0 tags.

See Also:
Constant Field Values

YCBCRSUBSAMPLING

public static final int YCBCRSUBSAMPLING
Standard TIFF 6.0 tags.

See Also:
Constant Field Values

YCBCRPOSITIONING

public static final int YCBCRPOSITIONING
Standard TIFF 6.0 tags.

See Also:
Constant Field Values

REFERENCEBLACKWHITE

public static final int REFERENCEBLACKWHITE
Standard TIFF 6.0 tags.

See Also:
Constant Field Values

COPYRIGHT

public static final int COPYRIGHT
Standard TIFF 6.0 tags.

See Also:
Constant Field Values

BACKGROUNDCOLORINDICATOR_L

public static final java.lang.String[] BACKGROUNDCOLORINDICATOR_L

HCUSAGE_L

public static final java.lang.String[] HCUSAGE_L

IMAGECOLORINDICATOR_L

public static final java.lang.String[] IMAGECOLORINDICATOR_L

TRANSPARENCYINDICATOR_L

public static final java.lang.String[] TRANSPARENCYINDICATOR_L

GTMODELTYPEGEOKEY

public static final int GTMODELTYPEGEOKEY
GeoTIFF key values.

See Also:
Constant Field Values

GTRASTERTYPEGEOKEY

public static final int GTRASTERTYPEGEOKEY
GeoTIFF key values.

See Also:
Constant Field Values

GTCITATIONGEOKEY

public static final int GTCITATIONGEOKEY
GeoTIFF key values.

See Also:
Constant Field Values

GEOGRAPHICTYPEGEOKEY

public static final int GEOGRAPHICTYPEGEOKEY
GeoTIFF key values.

See Also:
Constant Field Values

GEOGCITATIONGEOKEY

public static final int GEOGCITATIONGEOKEY
GeoTIFF key values.

See Also:
Constant Field Values

GEOGGEODETICDATUMGEOKEY

public static final int GEOGGEODETICDATUMGEOKEY
GeoTIFF key values.

See Also:
Constant Field Values

GEOGPRIMEMERIDIANGEOKEY

public static final int GEOGPRIMEMERIDIANGEOKEY
GeoTIFF key values.

See Also:
Constant Field Values

GEOGLINEARUNITSGEOKEY

public static final int GEOGLINEARUNITSGEOKEY
GeoTIFF key values.

See Also:
Constant Field Values

GEOGLINEARUNITSIZEGEOKEY

public static final int GEOGLINEARUNITSIZEGEOKEY
GeoTIFF key values.

See Also:
Constant Field Values

GEOGANGULARUNITSGEOKEY

public static final int GEOGANGULARUNITSGEOKEY
GeoTIFF key values.

See Also:
Constant Field Values

GEOGANGULARUNITSIZEGEOKEY

public static final int GEOGANGULARUNITSIZEGEOKEY
GeoTIFF key values.

See Also:
Constant Field Values

GEOGELLIPSOIDGEOKEY

public static final int GEOGELLIPSOIDGEOKEY
GeoTIFF key values.

See Also:
Constant Field Values

GEOGSEMIMAJORAXISGEOKEY

public static final int GEOGSEMIMAJORAXISGEOKEY
GeoTIFF key values.

See Also:
Constant Field Values

GEOGSEMIMINORAXISGEOKEY

public static final int GEOGSEMIMINORAXISGEOKEY
GeoTIFF key values.

See Also:
Constant Field Values

GEOGINVFLATTENINGGEOKEY

public static final int GEOGINVFLATTENINGGEOKEY
GeoTIFF key values.

See Also:
Constant Field Values

GEOGAZIMUTHUNITSGEOKEY

public static final int GEOGAZIMUTHUNITSGEOKEY
GeoTIFF key values.

See Also:
Constant Field Values

GEOGPRIMEMERIDIANLONGGEOKEY

public static final int GEOGPRIMEMERIDIANLONGGEOKEY
GeoTIFF key values.

See Also:
Constant Field Values

PROJECTEDCSTYPEGEOKEY

public static final int PROJECTEDCSTYPEGEOKEY
GeoTIFF key values.

See Also:
Constant Field Values

PCSCITATIONGEOKEY

public static final int PCSCITATIONGEOKEY
GeoTIFF key values.

See Also:
Constant Field Values

PROJECTIONGEOKEY

public static final int PROJECTIONGEOKEY
GeoTIFF key values.

See Also:
Constant Field Values

PROJCOORDTRANSGEOKEY

public static final int PROJCOORDTRANSGEOKEY
GeoTIFF key values.

See Also:
Constant Field Values

PROJLINEARUNITSGEOKEY

public static final int PROJLINEARUNITSGEOKEY
GeoTIFF key values.

See Also:
Constant Field Values

PROJLINEARUNITSIZEGEOKEY

public static final int PROJLINEARUNITSIZEGEOKEY
GeoTIFF key values.

See Also:
Constant Field Values

PROJSTDPARALLEL1GEOKEY

public static final int PROJSTDPARALLEL1GEOKEY
GeoTIFF key values.

See Also:
Constant Field Values

PROJSTDPARALLEL2GEOKEY

public static final int PROJSTDPARALLEL2GEOKEY
GeoTIFF key values.

See Also:
Constant Field Values

PROJNATORIGINLONGGEOKEY

public static final int PROJNATORIGINLONGGEOKEY
GeoTIFF key values.

See Also:
Constant Field Values

PROJNATORIGINLATGEOKEY

public static final int PROJNATORIGINLATGEOKEY
GeoTIFF key values.

See Also:
Constant Field Values

PROJFALSEEASTINGGEOKEY

public static final int PROJFALSEEASTINGGEOKEY
GeoTIFF key values.

See Also:
Constant Field Values

PROJFALSENORTHINGGEOKEY

public static final int PROJFALSENORTHINGGEOKEY
GeoTIFF key values.

See Also:
Constant Field Values

PROJFALSEORIGINLONGGEOKEY

public static final int PROJFALSEORIGINLONGGEOKEY
GeoTIFF key values.

See Also:
Constant Field Values

PROJFALSEORIGINLATGEOKEY

public static final int PROJFALSEORIGINLATGEOKEY
GeoTIFF key values.

See Also:
Constant Field Values

PROJFALSEORIGINEASTINGGEOKEY

public static final int PROJFALSEORIGINEASTINGGEOKEY
GeoTIFF key values.

See Also:
Constant Field Values

PROJFALSEORIGINNORTHINGGEOKEY

public static final int PROJFALSEORIGINNORTHINGGEOKEY
GeoTIFF key values.

See Also:
Constant Field Values

PROJCENTERLONGGEOKEY

public static final int PROJCENTERLONGGEOKEY
GeoTIFF key values.

See Also:
Constant Field Values

PROJCENTERLATGEOKEY

public static final int PROJCENTERLATGEOKEY
GeoTIFF key values.

See Also:
Constant Field Values

PROJCENTEREASTINGGEOKEY

public static final int PROJCENTEREASTINGGEOKEY
GeoTIFF key values.

See Also:
Constant Field Values

PROJFALSEORIGINNORTHINGGEOKEY_2

public static final int PROJFALSEORIGINNORTHINGGEOKEY_2
GeoTIFF key values.

See Also:
Constant Field Values

PROJSCALEATNATORIGINGEOKEY

public static final int PROJSCALEATNATORIGINGEOKEY
GeoTIFF key values.

See Also:
Constant Field Values

PROJSCALEATCENTERGEOKEY

public static final int PROJSCALEATCENTERGEOKEY
GeoTIFF key values.

See Also:
Constant Field Values

PROJAZIMUTHANGLEGEOKEY

public static final int PROJAZIMUTHANGLEGEOKEY
GeoTIFF key values.

See Also:
Constant Field Values

PROJSTRAIGHTVERTPOLELONGEOKEY

public static final int PROJSTRAIGHTVERTPOLELONGEOKEY
GeoTIFF key values.

See Also:
Constant Field Values

VERTICALCSTYPEGEOKEY

public static final int VERTICALCSTYPEGEOKEY
GeoTIFF key values.

See Also:
Constant Field Values

VERTICALCITATIONGEOKEY

public static final int VERTICALCITATIONGEOKEY
GeoTIFF key values.

See Also:
Constant Field Values

VERTICALDATUMGEOKEY

public static final int VERTICALDATUMGEOKEY
GeoTIFF key values.

See Also:
Constant Field Values

VERTICALUNITSGEOKEY

public static final int VERTICALUNITSGEOKEY
GeoTIFF key values.

See Also:
Constant Field Values

IMAGELAYER_L

public static final java.lang.String[] IMAGELAYER_L

CFALAYOUT_L

public static final java.lang.String[] CFALAYOUT_L

MAKERNOTESAFETY_L

public static final java.lang.String[] MAKERNOTESAFETY_L
Constructor Detail

TiffIFD

public TiffIFD(long offset,
               RepInfo info,
               java.io.RandomAccessFile raf,
               boolean bigEndian)
Instantiate an TiffIFD object.

Parameters:
offset - IFD offset
info - The RepInfo object
raf - TIFF file
bigEndian - True if big-endian file
Method Detail

getAperatureValue

public Rational getAperatureValue()
Returns the value of the APERTUREVALUE (37378) tag. Note typo in function name.


getBackgroundColorIndicator

public int getBackgroundColorIndicator()
Returns the value of the TIFF/IT BACKGROUNDCOLORINDICATOR (34024) tag.


getBackgroundColorValue

public int getBackgroundColorValue()
Returns the value of the BACKGROUNDCOLORVALUE (34026) tag.


getBatteryLevel

public java.lang.String getBatteryLevel()
Returns the value of the BATTERYLEVEL (33423) tag.


getBitsPerExtendedRunLength

public int getBitsPerExtendedRunLength()
Returns the value of the BITSPEREXTENDEDRUNLENGTH (34021) tag.


getBitsPerRunLength

public int getBitsPerRunLength()
Returns the value of the BITSPERRUNLENGTH (34020) tag.


getCellLength

public int getCellLength()
Returns the value of the CELLLENGTH (265) tag.


getCellWidth

public int getCellWidth()
Returns the value of the CELLWIDTH (264) tag.


getCFAPattern

public int[] getCFAPattern()
Returns the value of the CFAPATTERN (33422) tag.


getCFARepeatPatternDim

public int[] getCFARepeatPatternDim()
Returns the value of the CFAREPEATPATTERNDIM (33421) tag.


getClipPath

public int[] getClipPath()
Returns the value of the CLIPPATH (343) tag.


getColorSequence

public java.lang.String getColorSequence()
Returns the value of the COLORSEQUENCE (34017) tag.


getColorTable

public int[] getColorTable()
Returns the value of the COLORTABLE (34022) tag.


getCompressedBitsPerPixel

public Rational getCompressedBitsPerPixel()
Returns the value of the COMPRESSEDBITSPERPIXEL (37122) tag.


getCopyright

public java.lang.String getCopyright()
Returns the value of the COPYRIGHT (33432) tag.


getDateTime

public java.lang.String getDateTime()
Returns the value of the DATETIME (306) tag.


getDocumentName

public java.lang.String getDocumentName()
Returns the value of the DOCUMENTNAME (269) tag.


getDotRange

public int[] getDotRange()
Returns the value of the DOTRANGE (336) tag.


getExifIFD

public long getExifIFD()
Return the offset of the Exif IFD.


getGlobalParametersIFD

public long getGlobalParametersIFD()
Return the offset of the GlobalParameters IFD.


getExposureProgram

public int getExposureProgram()
Returns the value of the EXPOSUREPROGRAM (34850) tag.


getFillOrder

public int getFillOrder()
Returns the value of the FILLORDER (266) tag.


getFocalPlaneResolutionUnit

public int getFocalPlaneResolutionUnit()
Returns the value of the FOCALPLANERESOLUTIONUNIT (37392) tag.


getFocalPlaneXResolution

public Rational getFocalPlaneXResolution()
Returns the value of the FOCALPLANEXRESOLUTION (37390) tag.


getFocalPlaneYResolution

public Rational getFocalPlaneYResolution()
Returns the value of the FOCALPLANEYRESOLUTION (37390) tag.


getGeoKeyDirectoryTag

public int[] getGeoKeyDirectoryTag()
Returns the value of the GEOKEYDIRECTORYTAG (34735) tag.


getGPSInfoIFD

public long getGPSInfoIFD()
Return the offset of the GPSInfo IFD.


getImageColorIndicator

public int getImageColorIndicator()
Returns the value of the IMAGECOLORINDICATOR (34023) tag.


getImageColorValue

public int getImageColorValue()
Returns the value of the IMAGECOLORVALUE (34025) tag.


getImageDescription

public java.lang.String getImageDescription()
Returns the value of the IMAGEDESCRIPTION (270) tag.


getImageHistory

public java.lang.String getImageHistory()
Returns the value of the IMAGEHISTORY (37395) tag.


getImageLayer

public int[] getImageLayer()
Returns the value of the IMAGELAYER (34732) tag.


getImageNumber

public long getImageNumber()
Returns the value of the IMAGENUMBER (37393) tag.


getImageSourceData

public int[] getImageSourceData()
Returns the value of the IMAGESOURCEDATA (37724) tag.


getPhotoshopProperties

public int[] getPhotoshopProperties()
Returns the value of the PHOTOSHOPPROPS (34377) tag.


getAnnotations

public int[] getAnnotations()
Returns the value of the ANNOTATIONS (50255) tag.


getInkNames

public java.lang.String[] getInkNames()
Returns the value of the INKNAMES (333) tag.


getInkSet

public int getInkSet()
Returns the value of the INKSET (332) tag.


getInterlace

public int getInterlace()
Returns the value of the INTERLACE (34857) tag.


getInteroperabilityIFD

public long getInteroperabilityIFD()
Returns the offset of the Exif Interoperability IFD.


getInterColourProfile

public int[] getInterColourProfile()
Returns the value of the ICC_PROFILE tag.


getIndexed

public int getIndexed()
Returns the value of the INDEXED (364) tag.


getJpegInterchangeFormat

public long getJpegInterchangeFormat()

getIPTCNAA

public long[] getIPTCNAA()
Returns the value of the IPTCNAA (33723) tag.


getISOSpeedRatings

public int[] getISOSpeedRatings()
Returns the value of the ISOSPEEDRATINGS (34855) tag.


getIT8Header

public java.lang.String getIT8Header()
Returns the value of the IT8HEADER (34018) tag.


getJPEGProc

public int getJPEGProc()
Returns the value of the JPEGPROC (512) tag.


getMaxAperatureValue

public Rational getMaxAperatureValue()
Returns the value of the MAXAPERTUREVALUE (37381) tag. Note typo in function name.


getModelTiepointTag

public double[] getModelTiepointTag()
Returns the value of the MODELTIEPOINTTAG (33922) tag.


getModelTransformationTag

public double[] getModelTransformationTag()
Returns the value of the MODELTRANSFORMATIONTAG (34264) tag.


getNewSubfileType

public long getNewSubfileType()
Returns the value of the NEWSUBFILETYPE (254) tag.


getNisoImageMetadata

public NisoImageMetadata getNisoImageMetadata()
Returns the constructed NisoImageMetadata.


getNoise

public int[] getNoise()
Returns the value of the NOISE (37389) tag.


getNumberOfInks

public int getNumberOfInks()
Returns the value of the NUMBEROFINKS (334) tag.


getOECF

public int[] getOECF()
Returns the value of the OECF (34856) tag.


getPageName

public java.lang.String getPageName()
Returns the value of the PAGENAME (285) tag.


getPageNumber

public int[] getPageNumber()
Returns the value of the PAGENUMBER (297) tag.


getPixelIntensityRange

public int[] getPixelIntensityRange()
Returns the value of the PIXELINTENSITYRANGE (34027) tag.


getRasterPadding

public int getRasterPadding()
Returns the value of the RASTERPADDING (34019) tag.


getSecurityClasssification

public java.lang.String getSecurityClasssification()
Returns the value of the SECURITYCLASSIFICATION (37394) tag.


getSelfTimerMode

public int getSelfTimerMode()
Returns the value of the SELFTIMERMODE (34859) tag.


getShutterSpeedValue

public Rational getShutterSpeedValue()
Returns the value of the SHUTTERSPEEDVALUE (37377) tag.


getSite

public java.lang.String getSite()
Returns the value of the SITE (34016) tag.


getSpatialFrequencyResponse

public int[] getSpatialFrequencyResponse()
Returns the value of the SPATIALFREQUENCYRESPONSE (37388) tag.


getSpectralSensitivity

public java.lang.String getSpectralSensitivity()
Returns the value of the SPECTRALSENSITIVITY (34852) tag.


getStripRowCounts

public long[] getStripRowCounts()
Returns the value of the STRIPROWCOUNTS (559) tag.


getSubIFDs

public long[] getSubIFDs()
Returns the value of the SUBIFDS (330) tag.


getSubjectLocation

public int[] getSubjectLocation()
Returns the value of the SUBJECTLOCATION (37396) tag.


getT4Options

public long getT4Options()
Returns the value of the T4OPTIONS (292) tag.


getT6Options

public long getT6Options()
Returns the value of the T6OPTIONS (293) tag.


getTheExifIFD

public ExifIFD getTheExifIFD()
Returns the Exif IFD object, or null if none.


getTheGPSInfoIFD

public GPSInfoIFD getTheGPSInfoIFD()
Returns the GPS info IFD object, or null if none.


getTheInteroperabilityIFD

public InteroperabilityIFD getTheInteroperabilityIFD()
Returns the Interoperability IFD object, or null if none.


getTheGlobalParametersIFD

public GlobalParametersIFD getTheGlobalParametersIFD()
Returns the GlobalParameters IFD object, or null if none.


getThreshholding

public int getThreshholding()
Returns the value of the THRESHHOLDING (263) tag.


getTIFFEPStandardID

public java.lang.String getTIFFEPStandardID()
Returns the value of the TIFFEPSTANDARDID (37398) tag.


getTimeZoneOffset

public int[] getTimeZoneOffset()
Returns the value of the TIMEZONEOFFSET (34858) tag.


getTransparencyIndicator

public int getTransparencyIndicator()
Returns the value of the TRANSPARENCYINDICATOR (34028) tag.


getXClipPathUnits

public long getXClipPathUnits()
Returns the value of the XCLIPPATHUNITS (344) tag.


getXPosition

public Rational getXPosition()
Returns the value of the XPOSITION (286) tag.


getYPosition

public Rational getYPosition()
Returns the value of the XPOSITION (287) tag.


getDNGVersion

public int[] getDNGVersion()
Returns the value of the DNGVERSION (50706) tag.


getUniqueCameraModel

public java.lang.String getUniqueCameraModel()
Returns the value of the DNG UNIQUECAMERAMODEL (50708) tag.


getCFAPlaneColor

public int[] getCFAPlaneColor()
Returns the value of the CFAPlaneColor (50710) tag.


getAsShotNeutral

public Rational[] getAsShotNeutral()
Returns the value of the AsShotNeutral (50728) tag.


getAsShotWhiteXY

public Rational[] getAsShotWhiteXY()
Returns the value of the AsShotWhiteXY (50729) tag.


getProperty

public Property getProperty(boolean rawOutput)
                     throws TiffException
Get the IFD properties.

Specified by:
getProperty in class IFD
Throws:
TiffException

lookupTag

public void lookupTag(int tag,
                      int type,
                      long count,
                      long value)
               throws TiffException
Looks up an IFD tag.

Specified by:
lookupTag in class IFD
Throws:
TiffException

postParseInitialization

protected void postParseInitialization()
Perform initializations that have to wait until after the IFD has been parsed.

Overrides:
postParseInitialization in class IFD

setTheExifIFD

public void setTheExifIFD(ExifIFD exif)

setTheGPSInfoIFD

public void setTheGPSInfoIFD(GPSInfoIFD gpsInfo)

setTheInteroperabilityIFD

public void setTheInteroperabilityIFD(InteroperabilityIFD interOp)

setTheGlobalParametersIFD

public void setTheGlobalParametersIFD(GlobalParametersIFD gp)


jhove/doc/edu/harvard/hul/ois/jhove/module/tiff/TiffProfile.html0000644000707400001440000016175511510702356024060 0ustar garyusers TiffProfile (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.tiff
Class TiffProfile

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
Direct Known Subclasses:
TiffFXBase, TiffProfileClassB, TiffProfileClassF, TiffProfileClassG, TiffProfileClassIT, TiffProfileClassP, TiffProfileClassR, TiffProfileClassY, TiffProfileDLF, TiffProfileDNG, TiffProfileDNGThumb, TiffProfileEP, TiffProfileExif, TiffProfileExifIFD, TiffProfileExifThumb, TiffProfileGeoTIFF, TiffProfilePagemaker6, TiffProfilePhotoshop, TiffProfileRFC1314

public abstract class TiffProfile
extends java.lang.Object

Abstract class for TIFF profile checkers. A profile applies to a given IFD; the caller should run all profiles on all IFD's and accumulate a List of the Strings returned by getText when satisfiesProfile returns true.


Field Summary
protected  int _mimeClass
           
protected  java.lang.String _profileText
          PRIVATE CLASS FIELDS.
static int MIME_1314
          Values for mimeClass.
static int MIME_FX
          Values for mimeClass.
static int MIME_GENERIC
          Values for mimeClass.
 
Constructor Summary
TiffProfile()
          Creates a TiffProfile.
 
Method Summary
 int getMimeClass()
          Returns the MIME class for this profile.
 java.lang.String getText()
          Returns the text which describes this profile.
 boolean isAlreadyOK()
          Returns the value of the alreadyOK flag.
protected  boolean satisfiesBackgroundColorIndicator(TiffIFD ifd, int value)
          Checks if the value of the BackgroundColorIndicator tag matches the value passed to it.
protected  boolean satisfiesBackgroundColorIndicator(TiffIFD ifd, int[] values)
          Checks if the value of the BackgroundColorIndicator tag matches any of the values in the array passed to it.
protected  boolean satisfiesCompression(TiffIFD ifd, int value)
          Checks if the value of the PlanarConfiguration tag matches the value passed to it.
protected  boolean satisfiesCompression(TiffIFD ifd, int[] values)
          Checks if the value of the Compression tag matches any of the values in the array passed to it.
protected  boolean satisfiesDotRange(TiffIFD ifd, int minValue, int maxValue)
          Checks the DotRange against a minimum and a maximum value.
protected  boolean satisfiesFillOrder(TiffIFD ifd, int[] values)
          Checks if the value of the Indexed tag matches any of the values in the array passed to it.
protected  boolean satisfiesImageColorIndicator(TiffIFD ifd, int value)
          Checks if the value of the ImageColorIndicator tag matches the value passed to it.
protected  boolean satisfiesImageColorIndicator(TiffIFD ifd, int[] values)
          Checks if the value of the ImageColorIndicator tag matches any of the values in the array passed to it.
protected  boolean satisfiesImageWidth(TiffIFD ifd, int[] values)
          Checks if the value of the ImageWidth tag matches any of the values in the array passed to it.
protected  boolean satisfiesIndexed(TiffIFD ifd, int[] values)
          Checks if the value of the Indexed tag matches any of the values in the array passed to it.
protected  boolean satisfiesNewSubfileType(TiffIFD ifd, long value)
          Checks if the value of the NewSubfileType tag matches the value passed to it.
protected  boolean satisfiesNewSubfileType(TiffIFD ifd, long[] values)
          Checks if the value of the NewSubfileType tag matches any of the values in the array passed to it.
protected  boolean satisfiesOrientation(TiffIFD ifd, int value)
          Checks if the value of the Orientation tag matches the value passed to it.
protected  boolean satisfiesOrientation(TiffIFD ifd, int[] values)
          Checks if the value of the Orientation tag matches any of the values in the array passed to it.
protected  boolean satisfiesPhotometricInterpretation(TiffIFD ifd, int value)
          Checks if the value of the PhotometricInterpretation tag matches the value passed to it.
protected  boolean satisfiesPhotometricInterpretation(TiffIFD ifd, int[] values)
          Checks if the value of the PhotometricInterpretation tag matches any of the values in the array passed to it.
protected  boolean satisfiesPlanarConfiguration(TiffIFD ifd, int value)
          Checks if the value of the PlanarConfiguration tag matches the value passed to it.
protected  boolean satisfiesPlanarConfiguration(TiffIFD ifd, int[] values)
          Checks if the value of the PlanarConfiguration tag matches any of the values in the array passed to it.
 boolean satisfiesProfile(IFD ifd)
          Returns true if the IFD satisfies the profile.
protected  boolean satisfiesResolutionUnit(TiffIFD ifd, int value)
          Checks if the value of the ResolutionUnit tag matches the value passed to it.
protected  boolean satisfiesResolutionUnit(TiffIFD ifd, int[] values)
          Checks if the value of the ResolutionUnit tag matches any of the values in the array passed to it.
protected  boolean satisfiesSamplesPerPixel(TiffIFD ifd, int value)
          Checks if the value of the SamplesPerPixel tag matches the value passed to it.
protected  boolean satisfiesSamplesPerPixel(TiffIFD ifd, int[] values)
          Checks if the value of the SamplesPerPixel tag matches any of the values in the array passed to it.
abstract  boolean satisfiesThisProfile(IFD ifd)
          Returns true if the IFD satisfies the profile.
protected  boolean satisfiesXResolution(TiffIFD ifd, int[] values)
          Checks if the value of the XResolution tag matches any of the values in the array passed to it.
protected  boolean satisfiesYResolution(TiffIFD ifd, int[] values)
          Checks if the value of the XResolution tag matches any of the values in the array passed to it.
 void setAlreadyOK(boolean ok)
          Sets the value of the alreadyOK flag.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

_profileText

protected java.lang.String _profileText
PRIVATE CLASS FIELDS.


_mimeClass

protected int _mimeClass

MIME_GENERIC

public static final int MIME_GENERIC
Values for mimeClass. These are the appropriate indices into TiffModule.MIMETYPE

See Also:
Constant Field Values

MIME_FX

public static final int MIME_FX
Values for mimeClass. These are the appropriate indices into TiffModule.MIMETYPE

See Also:
Constant Field Values

MIME_1314

public static final int MIME_1314
Values for mimeClass. These are the appropriate indices into TiffModule.MIMETYPE

See Also:
Constant Field Values
Constructor Detail

TiffProfile

public TiffProfile()
Creates a TiffProfile. Subclass constructors should assign a value to _profileText, then call the super constructor. Sets _mimeClass to MIME_GENERIC. Profiles which indicate other MIME classes should assign a different value to _mimeClass, which is the index into TiffModule.MIMETYPE that should be used.

Method Detail

satisfiesProfile

public final boolean satisfiesProfile(IFD ifd)
Returns true if the IFD satisfies the profile. This calls satisfiesThisProfile(), which does the actual work. satisfiesProfile() sets the alreadyOK flag, which may be checked by calling isAlreadyOK() to save the effort of testing the same profile more than once and thus generating duplicate output. Subclasses should not override satisfiesProfile.

Parameters:
ifd - The IFD which is being evaluated against the profile

satisfiesThisProfile

public abstract boolean satisfiesThisProfile(IFD ifd)
Returns true if the IFD satisfies the profile. Subclasses should override satisfiesThisProfile(), not satisfiesProfile(), as satisfiesProfile() does some additional bookkeeping for all subclases.


getText

public java.lang.String getText()
Returns the text which describes this profile.


setAlreadyOK

public void setAlreadyOK(boolean ok)
Sets the value of the alreadyOK flag.


getMimeClass

public int getMimeClass()
Returns the MIME class for this profile. This will be one of the values MIME_GENERIC, MIME_FX, and MIME_1314, corresponding to indices into TiffModule.MIMETYPE. All profiles which don't imply a special MIME type other than image/tiff should take no special action, allowing MIME_GENERIC to be returned. Classes which return a different value should assign that value to MIME_CLASS in the constructor rather than overriding this.


isAlreadyOK

public boolean isAlreadyOK()
Returns the value of the alreadyOK flag. This flag can be used when a profile is being checked against more than one IFD, to see if it has satisfied a previous IFD and thus avoid duplicate profile listings. The alreadyOK flag is set whenever satisfiesProfile returns true.


satisfiesCompression

protected boolean satisfiesCompression(TiffIFD ifd,
                                       int[] values)
Checks if the value of the Compression tag matches any of the values in the array passed to it.

Parameters:
ifd - The IFD being checked
values - An array of values, any of which will satisfy the test.

satisfiesCompression

protected boolean satisfiesCompression(TiffIFD ifd,
                                       int value)
Checks if the value of the PlanarConfiguration tag matches the value passed to it.

Parameters:
ifd - The IFD being checked
value - A value which must match the tag value to satisfy the test.

satisfiesPhotometricInterpretation

protected boolean satisfiesPhotometricInterpretation(TiffIFD ifd,
                                                     int[] values)
Checks if the value of the PhotometricInterpretation tag matches any of the values in the array passed to it.

Parameters:
ifd - The IFD being checked
values - An array of values, any of which will satisfy the test.

satisfiesPhotometricInterpretation

protected boolean satisfiesPhotometricInterpretation(TiffIFD ifd,
                                                     int value)
Checks if the value of the PhotometricInterpretation tag matches the value passed to it.

Parameters:
ifd - The IFD being checked
value - A value which must match the tag value to satisfy the test.

satisfiesResolutionUnit

protected boolean satisfiesResolutionUnit(TiffIFD ifd,
                                          int[] values)
Checks if the value of the ResolutionUnit tag matches any of the values in the array passed to it.

Parameters:
ifd - The IFD being checked
values - An array of values, any of which will satisfy the test.

satisfiesResolutionUnit

protected boolean satisfiesResolutionUnit(TiffIFD ifd,
                                          int value)
Checks if the value of the ResolutionUnit tag matches the value passed to it.

Parameters:
ifd - The IFD being checked
value - A value which must match the tag value to satisfy the test.

satisfiesXResolution

protected boolean satisfiesXResolution(TiffIFD ifd,
                                       int[] values)
Checks if the value of the XResolution tag matches any of the values in the array passed to it.

Parameters:
ifd - The IFD being checked
values - An array of values, any of which will satisfy the test.

satisfiesYResolution

protected boolean satisfiesYResolution(TiffIFD ifd,
                                       int[] values)
Checks if the value of the XResolution tag matches any of the values in the array passed to it.

Parameters:
ifd - The IFD being checked
values - An array of values, any of which will satisfy the test.

satisfiesSamplesPerPixel

protected boolean satisfiesSamplesPerPixel(TiffIFD ifd,
                                           int[] values)
Checks if the value of the SamplesPerPixel tag matches any of the values in the array passed to it.

Parameters:
ifd - The IFD being checked
values - An array of values, any of which will satisfy the test.

satisfiesSamplesPerPixel

protected boolean satisfiesSamplesPerPixel(TiffIFD ifd,
                                           int value)
Checks if the value of the SamplesPerPixel tag matches the value passed to it.

Parameters:
ifd - The IFD being checked
value - A value which must match the tag value to satisfy the test.

satisfiesPlanarConfiguration

protected boolean satisfiesPlanarConfiguration(TiffIFD ifd,
                                               int[] values)
Checks if the value of the PlanarConfiguration tag matches any of the values in the array passed to it.

Parameters:
ifd - The IFD being checked
values - An array of values, any of which will satisfy the test.

satisfiesPlanarConfiguration

protected boolean satisfiesPlanarConfiguration(TiffIFD ifd,
                                               int value)
Checks if the value of the PlanarConfiguration tag matches the value passed to it.

Parameters:
ifd - The IFD being checked
value - A value which must match the tag value to satisfy the test.

satisfiesOrientation

protected boolean satisfiesOrientation(TiffIFD ifd,
                                       int[] values)
Checks if the value of the Orientation tag matches any of the values in the array passed to it.

Parameters:
ifd - The IFD being checked
values - An array of values, any of which will satisfy the test.

satisfiesOrientation

protected boolean satisfiesOrientation(TiffIFD ifd,
                                       int value)
Checks if the value of the Orientation tag matches the value passed to it.

Parameters:
ifd - The IFD being checked
value - A value which must match the tag value to satisfy the test.

satisfiesImageColorIndicator

protected boolean satisfiesImageColorIndicator(TiffIFD ifd,
                                               int[] values)
Checks if the value of the ImageColorIndicator tag matches any of the values in the array passed to it.

Parameters:
ifd - The IFD being checked
values - An array of values, any of which will satisfy the test.

satisfiesImageColorIndicator

protected boolean satisfiesImageColorIndicator(TiffIFD ifd,
                                               int value)
Checks if the value of the ImageColorIndicator tag matches the value passed to it.

Parameters:
ifd - The IFD being checked
value - A value which must match the tag value to satisfy the test.

satisfiesNewSubfileType

protected boolean satisfiesNewSubfileType(TiffIFD ifd,
                                          long[] values)
Checks if the value of the NewSubfileType tag matches any of the values in the array passed to it.

Parameters:
ifd - The IFD being checked
values - An array of long values, any of which will satisfy the test.

satisfiesNewSubfileType

protected boolean satisfiesNewSubfileType(TiffIFD ifd,
                                          long value)
Checks if the value of the NewSubfileType tag matches the value passed to it.

Parameters:
ifd - The IFD being checked
value - A value which must match the tag value to satisfy the test.

satisfiesBackgroundColorIndicator

protected boolean satisfiesBackgroundColorIndicator(TiffIFD ifd,
                                                    int[] values)
Checks if the value of the BackgroundColorIndicator tag matches any of the values in the array passed to it.

Parameters:
ifd - The IFD being checked
values - An array of values, any of which will satisfy the test.

satisfiesBackgroundColorIndicator

protected boolean satisfiesBackgroundColorIndicator(TiffIFD ifd,
                                                    int value)
Checks if the value of the BackgroundColorIndicator tag matches the value passed to it.

Parameters:
ifd - The IFD being checked
value - A value which must match the tag value to satisfy the test.

satisfiesDotRange

protected boolean satisfiesDotRange(TiffIFD ifd,
                                    int minValue,
                                    int maxValue)
Checks the DotRange against a minimum and a maximum value. Returns true if the DotRange exists, is well-formed (i.e., has at least 2 values, and the first two values equal minValue and maxValue respectively.


satisfiesImageWidth

protected boolean satisfiesImageWidth(TiffIFD ifd,
                                      int[] values)
Checks if the value of the ImageWidth tag matches any of the values in the array passed to it.

Parameters:
ifd - The IFD being checked
values - An array of values, any of which will satisfy the test.

satisfiesIndexed

protected boolean satisfiesIndexed(TiffIFD ifd,
                                   int[] values)
Checks if the value of the Indexed tag matches any of the values in the array passed to it.

Parameters:
ifd - The IFD being checked
values - An array of values, any of which will satisfy the test.

satisfiesFillOrder

protected boolean satisfiesFillOrder(TiffIFD ifd,
                                     int[] values)
Checks if the value of the Indexed tag matches any of the values in the array passed to it.

Parameters:
ifd - The IFD being checked
values - An array of values, any of which will satisfy the test.


jhove/doc/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassB.html0000644000707400001440000004506411510702356025142 0ustar garyusers TiffProfileClassB (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.tiff
Class TiffProfileClassB

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
      extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassB

public final class TiffProfileClassB
extends TiffProfile

Profile checker for TIFF Class B (Baseline Bilevel).


Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
_mimeClass, _profileText, MIME_1314, MIME_FX, MIME_GENERIC
 
Constructor Summary
TiffProfileClassB()
           
 
Method Summary
 boolean satisfiesThisProfile(IFD ifd)
          Returns true if the IFD satisfies the requirements of a Class B profile.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
getMimeClass, getText, isAlreadyOK, satisfiesBackgroundColorIndicator, satisfiesBackgroundColorIndicator, satisfiesCompression, satisfiesCompression, satisfiesDotRange, satisfiesFillOrder, satisfiesImageColorIndicator, satisfiesImageColorIndicator, satisfiesImageWidth, satisfiesIndexed, satisfiesNewSubfileType, satisfiesNewSubfileType, satisfiesOrientation, satisfiesOrientation, satisfiesPhotometricInterpretation, satisfiesPhotometricInterpretation, satisfiesPlanarConfiguration, satisfiesPlanarConfiguration, satisfiesProfile, satisfiesResolutionUnit, satisfiesResolutionUnit, satisfiesSamplesPerPixel, satisfiesSamplesPerPixel, satisfiesXResolution, satisfiesYResolution, setAlreadyOK
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

TiffProfileClassB

public TiffProfileClassB()
Method Detail

satisfiesThisProfile

public boolean satisfiesThisProfile(IFD ifd)
Returns true if the IFD satisfies the requirements of a Class B profile. See the TIFF 6.0 specification for details.

Specified by:
satisfiesThisProfile in class TiffProfile


jhove/doc/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileDLF.html0000644000707400001440000005176011510702356024400 0ustar garyusers TiffProfileDLF (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.tiff
Class TiffProfileDLF

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
      extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfileDLF
Direct Known Subclasses:
TiffProfileDLFBW, TiffProfileDLFColor, TiffProfileDLFGray

public abstract class TiffProfileDLF
extends TiffProfile

Abstract superclass for the profile checkers for TIFF/DLF


Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
_mimeClass, _profileText, MIME_1314, MIME_FX, MIME_GENERIC
 
Constructor Summary
TiffProfileDLF()
           
 
Method Summary
protected  boolean hasMinimumResolution(TiffIFD tifd, double minUnit2Res, double minUnit3Res)
          Checks for minimum X and Y resolution.
 boolean satisfiesThisProfile(IFD ifd)
          Returns true if the IFD satisfies the requirements that are common to the bilevel, grayscale, and color DLF profiles.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
getMimeClass, getText, isAlreadyOK, satisfiesBackgroundColorIndicator, satisfiesBackgroundColorIndicator, satisfiesCompression, satisfiesCompression, satisfiesDotRange, satisfiesFillOrder, satisfiesImageColorIndicator, satisfiesImageColorIndicator, satisfiesImageWidth, satisfiesIndexed, satisfiesNewSubfileType, satisfiesNewSubfileType, satisfiesOrientation, satisfiesOrientation, satisfiesPhotometricInterpretation, satisfiesPhotometricInterpretation, satisfiesPlanarConfiguration, satisfiesPlanarConfiguration, satisfiesProfile, satisfiesResolutionUnit, satisfiesResolutionUnit, satisfiesSamplesPerPixel, satisfiesSamplesPerPixel, satisfiesXResolution, satisfiesYResolution, setAlreadyOK
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

TiffProfileDLF

public TiffProfileDLF()
Method Detail

satisfiesThisProfile

public boolean satisfiesThisProfile(IFD ifd)
Returns true if the IFD satisfies the requirements that are common to the bilevel, grayscale, and color DLF profiles. The subclasses should call super(ifd) first, then do additional checking if it returns true. details.

Specified by:
satisfiesThisProfile in class TiffProfile

hasMinimumResolution

protected boolean hasMinimumResolution(TiffIFD tifd,
                                       double minUnit2Res,
                                       double minUnit3Res)
Checks for minimum X and Y resolution. All of the DLF profiles have similar tests for XResolution and YResolution. In all cases the values depend on the ResolutionUnit, which must be either 2 or 3.

Parameters:
tifd - The TiffIFD from which to extract the tags.
minUnit2Res - The minimum XResolution and YResolution when ResolutionUnit is 2
minUnit3Res - The minimum XResolution and YResolution when ResolutionUnit is 3


jhove/doc/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassF.html0000644000707400001440000004520111510702356025137 0ustar garyusers TiffProfileClassF (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.tiff
Class TiffProfileClassF

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
      extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassF

public final class TiffProfileClassF
extends TiffProfile

Profile checker for TIFF Class F.

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
_mimeClass, _profileText, MIME_1314, MIME_FX, MIME_GENERIC
 
Constructor Summary
TiffProfileClassF()
          Constructor.
 
Method Summary
 boolean satisfiesThisProfile(IFD ifd)
          Returns true if the IFD satisfies the requirements of a Class F profile.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
getMimeClass, getText, isAlreadyOK, satisfiesBackgroundColorIndicator, satisfiesBackgroundColorIndicator, satisfiesCompression, satisfiesCompression, satisfiesDotRange, satisfiesFillOrder, satisfiesImageColorIndicator, satisfiesImageColorIndicator, satisfiesImageWidth, satisfiesIndexed, satisfiesNewSubfileType, satisfiesNewSubfileType, satisfiesOrientation, satisfiesOrientation, satisfiesPhotometricInterpretation, satisfiesPhotometricInterpretation, satisfiesPlanarConfiguration, satisfiesPlanarConfiguration, satisfiesProfile, satisfiesResolutionUnit, satisfiesResolutionUnit, satisfiesSamplesPerPixel, satisfiesSamplesPerPixel, satisfiesXResolution, satisfiesYResolution, setAlreadyOK
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

TiffProfileClassF

public TiffProfileClassF()
Constructor.

Method Detail

satisfiesThisProfile

public boolean satisfiesThisProfile(IFD ifd)
Returns true if the IFD satisfies the requirements of a Class F profile. See the Class F specification for details.

Specified by:
satisfiesThisProfile in class TiffProfile


jhove/doc/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassG.html0000644000707400001440000004517611510702356025153 0ustar garyusers TiffProfileClassG (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.tiff
Class TiffProfileClassG

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
      extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassG

public final class TiffProfileClassG
extends TiffProfile

Profile checker for TIFF Class G (Baseline Grayscale).

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
_mimeClass, _profileText, MIME_1314, MIME_FX, MIME_GENERIC
 
Constructor Summary
TiffProfileClassG()
           
 
Method Summary
 boolean satisfiesThisProfile(IFD ifd)
          Returns true if the IFD satisfies the requirements of a Class G profile.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
getMimeClass, getText, isAlreadyOK, satisfiesBackgroundColorIndicator, satisfiesBackgroundColorIndicator, satisfiesCompression, satisfiesCompression, satisfiesDotRange, satisfiesFillOrder, satisfiesImageColorIndicator, satisfiesImageColorIndicator, satisfiesImageWidth, satisfiesIndexed, satisfiesNewSubfileType, satisfiesNewSubfileType, satisfiesOrientation, satisfiesOrientation, satisfiesPhotometricInterpretation, satisfiesPhotometricInterpretation, satisfiesPlanarConfiguration, satisfiesPlanarConfiguration, satisfiesProfile, satisfiesResolutionUnit, satisfiesResolutionUnit, satisfiesSamplesPerPixel, satisfiesSamplesPerPixel, satisfiesXResolution, satisfiesYResolution, setAlreadyOK
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

TiffProfileClassG

public TiffProfileClassG()
Method Detail

satisfiesThisProfile

public boolean satisfiesThisProfile(IFD ifd)
Returns true if the IFD satisfies the requirements of a Class G profile. See the TIFF 6.0 specification for details.

Specified by:
satisfiesThisProfile in class TiffProfile


jhove/doc/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassIT.html0000644000707400001440000005520211510702356025270 0ustar garyusers TiffProfileClassIT (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.tiff
Class TiffProfileClassIT

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
      extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassIT
Direct Known Subclasses:
TiffProfileClassITBL, TiffProfileClassITBLP1, TiffProfileClassITBP, TiffProfileClassITBPP1, TiffProfileClassITBPP2, TiffProfileClassITCT, TiffProfileClassITCTP1, TiffProfileClassITCTP2, TiffProfileClassITFP, TiffProfileClassITFPP1, TiffProfileClassITFPP2, TiffProfileClassITHC, TiffProfileClassITHCP1, TiffProfileClassITHCP2, TiffProfileClassITLW, TiffProfileClassITLWP1, TiffProfileClassITLWP2, TiffProfileClassITMP, TiffProfileClassITMPP1, TiffProfileClassITMPP2, TiffProfileClassITSD, TiffProfileClassITSDP2

public abstract class TiffProfileClassIT
extends TiffProfile

Abstract superclass for Tiff Profile Checkers Tiff IP/whatever.

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
_mimeClass, _profileText, MIME_1314, MIME_FX, MIME_GENERIC
 
Constructor Summary
TiffProfileClassIT()
           
 
Method Summary
 boolean satisfiesThisProfile(IFD ifd)
          Returns true if the IFD satisfies the requirements which are common to all Tiff IT profiles.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
getMimeClass, getText, isAlreadyOK, satisfiesBackgroundColorIndicator, satisfiesBackgroundColorIndicator, satisfiesCompression, satisfiesCompression, satisfiesDotRange, satisfiesFillOrder, satisfiesImageColorIndicator, satisfiesImageColorIndicator, satisfiesImageWidth, satisfiesIndexed, satisfiesNewSubfileType, satisfiesNewSubfileType, satisfiesOrientation, satisfiesOrientation, satisfiesPhotometricInterpretation, satisfiesPhotometricInterpretation, satisfiesPlanarConfiguration, satisfiesPlanarConfiguration, satisfiesProfile, satisfiesResolutionUnit, satisfiesResolutionUnit, satisfiesSamplesPerPixel, satisfiesSamplesPerPixel, satisfiesXResolution, satisfiesYResolution, setAlreadyOK
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

TiffProfileClassIT

public TiffProfileClassIT()
Method Detail

satisfiesThisProfile

public boolean satisfiesThisProfile(IFD ifd)
Returns true if the IFD satisfies the requirements which are common to all Tiff IT profiles. Subclasses will call this, then apply additional tests if it returns true.

Specified by:
satisfiesThisProfile in class TiffProfile


jhove/doc/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITBL.html0000644000707400001440000004620711510702356025513 0ustar garyusers TiffProfileClassITBL (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.tiff
Class TiffProfileClassITBL

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
      extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassIT
          extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassITBL

public final class TiffProfileClassITBL
extends TiffProfileClassIT

Profile checker for TIFF Class IT-BL. The TIFF/IT spec states that "TIFF/IT-BP makes use of all the features and functionality supported by the TIFF and TIFF/IT fields appropriate to binary line art images."

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
_mimeClass, _profileText, MIME_1314, MIME_FX, MIME_GENERIC
 
Constructor Summary
TiffProfileClassITBL()
           
 
Method Summary
 boolean satisfiesThisProfile(IFD ifd)
          Returns true if the IFD satisfies the requirements of the profile.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
getMimeClass, getText, isAlreadyOK, satisfiesBackgroundColorIndicator, satisfiesBackgroundColorIndicator, satisfiesCompression, satisfiesCompression, satisfiesDotRange, satisfiesFillOrder, satisfiesImageColorIndicator, satisfiesImageColorIndicator, satisfiesImageWidth, satisfiesIndexed, satisfiesNewSubfileType, satisfiesNewSubfileType, satisfiesOrientation, satisfiesOrientation, satisfiesPhotometricInterpretation, satisfiesPhotometricInterpretation, satisfiesPlanarConfiguration, satisfiesPlanarConfiguration, satisfiesProfile, satisfiesResolutionUnit, satisfiesResolutionUnit, satisfiesSamplesPerPixel, satisfiesSamplesPerPixel, satisfiesXResolution, satisfiesYResolution, setAlreadyOK
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

TiffProfileClassITBL

public TiffProfileClassITBL()
Method Detail

satisfiesThisProfile

public boolean satisfiesThisProfile(IFD ifd)
Returns true if the IFD satisfies the requirements of the profile. See the documentation for details.

Overrides:
satisfiesThisProfile in class TiffProfileClassIT


jhove/doc/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITBLP1.html0000644000707400001440000004635211510702356025715 0ustar garyusers TiffProfileClassITBLP1 (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.tiff
Class TiffProfileClassITBLP1

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
      extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassIT
          extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassITBLP1

public final class TiffProfileClassITBLP1
extends TiffProfileClassIT

Profile checker for TIFF Class IT-BL/P1. The TIFF/IT spec states that "TIFF/IT-BL/P1 is a simplified image file format profile for binary line art (BL) image data and can be considered a constrained subset of TIFF/IT-BL specifically intended for simpler implementation."

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
_mimeClass, _profileText, MIME_1314, MIME_FX, MIME_GENERIC
 
Constructor Summary
TiffProfileClassITBLP1()
           
 
Method Summary
 boolean satisfiesThisProfile(IFD ifd)
          Returns true if the IFD satisfies the requirements of the profile.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
getMimeClass, getText, isAlreadyOK, satisfiesBackgroundColorIndicator, satisfiesBackgroundColorIndicator, satisfiesCompression, satisfiesCompression, satisfiesDotRange, satisfiesFillOrder, satisfiesImageColorIndicator, satisfiesImageColorIndicator, satisfiesImageWidth, satisfiesIndexed, satisfiesNewSubfileType, satisfiesNewSubfileType, satisfiesOrientation, satisfiesOrientation, satisfiesPhotometricInterpretation, satisfiesPhotometricInterpretation, satisfiesPlanarConfiguration, satisfiesPlanarConfiguration, satisfiesProfile, satisfiesResolutionUnit, satisfiesResolutionUnit, satisfiesSamplesPerPixel, satisfiesSamplesPerPixel, satisfiesXResolution, satisfiesYResolution, setAlreadyOK
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

TiffProfileClassITBLP1

public TiffProfileClassITBLP1()
Method Detail

satisfiesThisProfile

public boolean satisfiesThisProfile(IFD ifd)
Returns true if the IFD satisfies the requirements of the profile. See the documentation for details.

Overrides:
satisfiesThisProfile in class TiffProfileClassIT


jhove/doc/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITBP.html0000644000707400001440000004621611510702356025517 0ustar garyusers TiffProfileClassITBP (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.tiff
Class TiffProfileClassITBP

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
      extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassIT
          extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassITBP

public final class TiffProfileClassITBP
extends TiffProfileClassIT

Profile checker for TIFF Class IT-BP. The TIFF/IT spec states that "TIFF/IT-BP makes use of all the features and functionality supported by the TIFF and TIFF/IT fields appropriate to binary picture images."

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
_mimeClass, _profileText, MIME_1314, MIME_FX, MIME_GENERIC
 
Constructor Summary
TiffProfileClassITBP()
           
 
Method Summary
 boolean satisfiesThisProfile(IFD ifd)
          Returns true if the IFD satisfies the requirements of the profile.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
getMimeClass, getText, isAlreadyOK, satisfiesBackgroundColorIndicator, satisfiesBackgroundColorIndicator, satisfiesCompression, satisfiesCompression, satisfiesDotRange, satisfiesFillOrder, satisfiesImageColorIndicator, satisfiesImageColorIndicator, satisfiesImageWidth, satisfiesIndexed, satisfiesNewSubfileType, satisfiesNewSubfileType, satisfiesOrientation, satisfiesOrientation, satisfiesPhotometricInterpretation, satisfiesPhotometricInterpretation, satisfiesPlanarConfiguration, satisfiesPlanarConfiguration, satisfiesProfile, satisfiesResolutionUnit, satisfiesResolutionUnit, satisfiesSamplesPerPixel, satisfiesSamplesPerPixel, satisfiesXResolution, satisfiesYResolution, setAlreadyOK
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

TiffProfileClassITBP

public TiffProfileClassITBP()
Method Detail

satisfiesThisProfile

public boolean satisfiesThisProfile(IFD ifd)
Returns true if the IFD satisfies the requirements of the profile. See the documentation for details.

Overrides:
satisfiesThisProfile in class TiffProfileClassIT


jhove/doc/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITBPP1.html0000644000707400001440000004635411510702356025723 0ustar garyusers TiffProfileClassITBPP1 (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.tiff
Class TiffProfileClassITBPP1

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
      extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassIT
          extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassITBPP1

public final class TiffProfileClassITBPP1
extends TiffProfileClassIT

Profile checker for TIFF Class IT-BP/P1. The TIFF/IT spec states that "TIFF/IT-BP/P1 is a simplified image file format profile for binary picture (BP) image data and can be considred a constrained subset of TIFF/IT-BP specifically intended for simpler implementation."

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
_mimeClass, _profileText, MIME_1314, MIME_FX, MIME_GENERIC
 
Constructor Summary
TiffProfileClassITBPP1()
           
 
Method Summary
 boolean satisfiesThisProfile(IFD ifd)
          Returns true if the IFD satisfies the requirements of the profile.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
getMimeClass, getText, isAlreadyOK, satisfiesBackgroundColorIndicator, satisfiesBackgroundColorIndicator, satisfiesCompression, satisfiesCompression, satisfiesDotRange, satisfiesFillOrder, satisfiesImageColorIndicator, satisfiesImageColorIndicator, satisfiesImageWidth, satisfiesIndexed, satisfiesNewSubfileType, satisfiesNewSubfileType, satisfiesOrientation, satisfiesOrientation, satisfiesPhotometricInterpretation, satisfiesPhotometricInterpretation, satisfiesPlanarConfiguration, satisfiesPlanarConfiguration, satisfiesProfile, satisfiesResolutionUnit, satisfiesResolutionUnit, satisfiesSamplesPerPixel, satisfiesSamplesPerPixel, satisfiesXResolution, satisfiesYResolution, setAlreadyOK
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

TiffProfileClassITBPP1

public TiffProfileClassITBPP1()
Method Detail

satisfiesThisProfile

public boolean satisfiesThisProfile(IFD ifd)
Returns true if the IFD satisfies the requirements of the profile. See the documentation for details.

Overrides:
satisfiesThisProfile in class TiffProfileClassIT


jhove/doc/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITBPP2.html0000644000707400001440000004612111510702356025714 0ustar garyusers TiffProfileClassITBPP2 (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.tiff
Class TiffProfileClassITBPP2

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
      extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassIT
          extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassITBPP2

public final class TiffProfileClassITBPP2
extends TiffProfileClassIT

Profile checker for TIFF Class IT-BP/P2. The TIFF/IT spec states that "TIFF/IT-BP/P2 is an extension of TIFF/IT-BP/P1."

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
_mimeClass, _profileText, MIME_1314, MIME_FX, MIME_GENERIC
 
Constructor Summary
TiffProfileClassITBPP2()
           
 
Method Summary
 boolean satisfiesThisProfile(IFD ifd)
          Returns true if the IFD satisfies the requirements of the profile.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
getMimeClass, getText, isAlreadyOK, satisfiesBackgroundColorIndicator, satisfiesBackgroundColorIndicator, satisfiesCompression, satisfiesCompression, satisfiesDotRange, satisfiesFillOrder, satisfiesImageColorIndicator, satisfiesImageColorIndicator, satisfiesImageWidth, satisfiesIndexed, satisfiesNewSubfileType, satisfiesNewSubfileType, satisfiesOrientation, satisfiesOrientation, satisfiesPhotometricInterpretation, satisfiesPhotometricInterpretation, satisfiesPlanarConfiguration, satisfiesPlanarConfiguration, satisfiesProfile, satisfiesResolutionUnit, satisfiesResolutionUnit, satisfiesSamplesPerPixel, satisfiesSamplesPerPixel, satisfiesXResolution, satisfiesYResolution, setAlreadyOK
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

TiffProfileClassITBPP2

public TiffProfileClassITBPP2()
Method Detail

satisfiesThisProfile

public boolean satisfiesThisProfile(IFD ifd)
Returns true if the IFD satisfies the requirements of the profile. See the documentation for details.

Overrides:
satisfiesThisProfile in class TiffProfileClassIT


jhove/doc/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITCT.html0000644000707400001440000004573611510702356025532 0ustar garyusers TiffProfileClassITCT (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.tiff
Class TiffProfileClassITCT

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
      extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassIT
          extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassITCT

public final class TiffProfileClassITCT
extends TiffProfileClassIT

Profile checker for TIFF Class IT-CT.

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
_mimeClass, _profileText, MIME_1314, MIME_FX, MIME_GENERIC
 
Constructor Summary
TiffProfileClassITCT()
           
 
Method Summary
 boolean satisfiesThisProfile(IFD ifd)
          Returns true if the IFD satisfies the requirements of the profile.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
getMimeClass, getText, isAlreadyOK, satisfiesBackgroundColorIndicator, satisfiesBackgroundColorIndicator, satisfiesCompression, satisfiesCompression, satisfiesDotRange, satisfiesFillOrder, satisfiesImageColorIndicator, satisfiesImageColorIndicator, satisfiesImageWidth, satisfiesIndexed, satisfiesNewSubfileType, satisfiesNewSubfileType, satisfiesOrientation, satisfiesOrientation, satisfiesPhotometricInterpretation, satisfiesPhotometricInterpretation, satisfiesPlanarConfiguration, satisfiesPlanarConfiguration, satisfiesProfile, satisfiesResolutionUnit, satisfiesResolutionUnit, satisfiesSamplesPerPixel, satisfiesSamplesPerPixel, satisfiesXResolution, satisfiesYResolution, setAlreadyOK
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

TiffProfileClassITCT

public TiffProfileClassITCT()
Method Detail

satisfiesThisProfile

public boolean satisfiesThisProfile(IFD ifd)
Returns true if the IFD satisfies the requirements of the profile. See the documentation for details.

Overrides:
satisfiesThisProfile in class TiffProfileClassIT


jhove/doc/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITCTP1.html0000644000707400001440000004577511510702356025736 0ustar garyusers TiffProfileClassITCTP1 (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.tiff
Class TiffProfileClassITCTP1

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
      extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassIT
          extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassITCTP1

public final class TiffProfileClassITCTP1
extends TiffProfileClassIT

Profile checker for TIFF Class IT-CT/P1.

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
_mimeClass, _profileText, MIME_1314, MIME_FX, MIME_GENERIC
 
Constructor Summary
TiffProfileClassITCTP1()
           
 
Method Summary
 boolean satisfiesThisProfile(IFD ifd)
          Returns true if the IFD satisfies the requirements of the profile.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
getMimeClass, getText, isAlreadyOK, satisfiesBackgroundColorIndicator, satisfiesBackgroundColorIndicator, satisfiesCompression, satisfiesCompression, satisfiesDotRange, satisfiesFillOrder, satisfiesImageColorIndicator, satisfiesImageColorIndicator, satisfiesImageWidth, satisfiesIndexed, satisfiesNewSubfileType, satisfiesNewSubfileType, satisfiesOrientation, satisfiesOrientation, satisfiesPhotometricInterpretation, satisfiesPhotometricInterpretation, satisfiesPlanarConfiguration, satisfiesPlanarConfiguration, satisfiesProfile, satisfiesResolutionUnit, satisfiesResolutionUnit, satisfiesSamplesPerPixel, satisfiesSamplesPerPixel, satisfiesXResolution, satisfiesYResolution, setAlreadyOK
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

TiffProfileClassITCTP1

public TiffProfileClassITCTP1()
Method Detail

satisfiesThisProfile

public boolean satisfiesThisProfile(IFD ifd)
Returns true if the IFD satisfies the requirements of the profile. See the documentation for details.

Overrides:
satisfiesThisProfile in class TiffProfileClassIT


jhove/doc/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITCTP2.html0000644000707400001440000004577511510702356025737 0ustar garyusers TiffProfileClassITCTP2 (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.tiff
Class TiffProfileClassITCTP2

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
      extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassIT
          extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassITCTP2

public final class TiffProfileClassITCTP2
extends TiffProfileClassIT

Profile checker for TIFF Class IT-CT/P2.

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
_mimeClass, _profileText, MIME_1314, MIME_FX, MIME_GENERIC
 
Constructor Summary
TiffProfileClassITCTP2()
           
 
Method Summary
 boolean satisfiesThisProfile(IFD ifd)
          Returns true if the IFD satisfies the requirements of the profile.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
getMimeClass, getText, isAlreadyOK, satisfiesBackgroundColorIndicator, satisfiesBackgroundColorIndicator, satisfiesCompression, satisfiesCompression, satisfiesDotRange, satisfiesFillOrder, satisfiesImageColorIndicator, satisfiesImageColorIndicator, satisfiesImageWidth, satisfiesIndexed, satisfiesNewSubfileType, satisfiesNewSubfileType, satisfiesOrientation, satisfiesOrientation, satisfiesPhotometricInterpretation, satisfiesPhotometricInterpretation, satisfiesPlanarConfiguration, satisfiesPlanarConfiguration, satisfiesProfile, satisfiesResolutionUnit, satisfiesResolutionUnit, satisfiesSamplesPerPixel, satisfiesSamplesPerPixel, satisfiesXResolution, satisfiesYResolution, setAlreadyOK
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

TiffProfileClassITCTP2

public TiffProfileClassITCTP2()
Method Detail

satisfiesThisProfile

public boolean satisfiesThisProfile(IFD ifd)
Returns true if the IFD satisfies the requirements of the profile. See the documentation for details.

Overrides:
satisfiesThisProfile in class TiffProfileClassIT


jhove/doc/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITFP.html0000644000707400001440000004643311510702356025524 0ustar garyusers TiffProfileClassITFP (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.tiff
Class TiffProfileClassITFP

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
      extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassIT
          extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassITFP

public final class TiffProfileClassITFP
extends TiffProfileClassIT

Profile checker for TIFF Class IT-FP. The TIFF/IT spec states that "TIFF/IT-FP provides a mechanism for associating image files of the different types that make up a final page." Note that Jhove profiles are applied to individual IFD levels, so this profile does not check the relationships among IFDs which are part of the FP specification.

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
_mimeClass, _profileText, MIME_1314, MIME_FX, MIME_GENERIC
 
Constructor Summary
TiffProfileClassITFP()
           
 
Method Summary
 boolean satisfiesThisProfile(IFD ifd)
          Returns true if the IFD satisfies the requirements of the profile.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
getMimeClass, getText, isAlreadyOK, satisfiesBackgroundColorIndicator, satisfiesBackgroundColorIndicator, satisfiesCompression, satisfiesCompression, satisfiesDotRange, satisfiesFillOrder, satisfiesImageColorIndicator, satisfiesImageColorIndicator, satisfiesImageWidth, satisfiesIndexed, satisfiesNewSubfileType, satisfiesNewSubfileType, satisfiesOrientation, satisfiesOrientation, satisfiesPhotometricInterpretation, satisfiesPhotometricInterpretation, satisfiesPlanarConfiguration, satisfiesPlanarConfiguration, satisfiesProfile, satisfiesResolutionUnit, satisfiesResolutionUnit, satisfiesSamplesPerPixel, satisfiesSamplesPerPixel, satisfiesXResolution, satisfiesYResolution, setAlreadyOK
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

TiffProfileClassITFP

public TiffProfileClassITFP()
Method Detail

satisfiesThisProfile

public boolean satisfiesThisProfile(IFD ifd)
Returns true if the IFD satisfies the requirements of the profile. See the documentation for details.

Overrides:
satisfiesThisProfile in class TiffProfileClassIT


jhove/doc/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITFPP1.html0000644000707400001440000004606211510702356025723 0ustar garyusers TiffProfileClassITFPP1 (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.tiff
Class TiffProfileClassITFPP1

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
      extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassIT
          extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassITFPP1

public final class TiffProfileClassITFPP1
extends TiffProfileClassIT

Profile checker for TIFF Class IT-FP/P1. TIFF/IT-FP/P1 is a simplified form of TIFF/IT-FP.

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
_mimeClass, _profileText, MIME_1314, MIME_FX, MIME_GENERIC
 
Constructor Summary
TiffProfileClassITFPP1()
           
 
Method Summary
 boolean satisfiesThisProfile(IFD ifd)
          Returns true if the IFD satisfies the requirements of the profile.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
getMimeClass, getText, isAlreadyOK, satisfiesBackgroundColorIndicator, satisfiesBackgroundColorIndicator, satisfiesCompression, satisfiesCompression, satisfiesDotRange, satisfiesFillOrder, satisfiesImageColorIndicator, satisfiesImageColorIndicator, satisfiesImageWidth, satisfiesIndexed, satisfiesNewSubfileType, satisfiesNewSubfileType, satisfiesOrientation, satisfiesOrientation, satisfiesPhotometricInterpretation, satisfiesPhotometricInterpretation, satisfiesPlanarConfiguration, satisfiesPlanarConfiguration, satisfiesProfile, satisfiesResolutionUnit, satisfiesResolutionUnit, satisfiesSamplesPerPixel, satisfiesSamplesPerPixel, satisfiesXResolution, satisfiesYResolution, setAlreadyOK
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

TiffProfileClassITFPP1

public TiffProfileClassITFPP1()
Method Detail

satisfiesThisProfile

public boolean satisfiesThisProfile(IFD ifd)
Returns true if the IFD satisfies the requirements of the profile. See the documentation for details.

Overrides:
satisfiesThisProfile in class TiffProfileClassIT


jhove/doc/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITFPP2.html0000644000707400001440000004615411510702356025726 0ustar garyusers TiffProfileClassITFPP2 (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.tiff
Class TiffProfileClassITFPP2

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
      extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassIT
          extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassITFPP2

public final class TiffProfileClassITFPP2
extends TiffProfileClassIT

Profile checker for TIFF Class IT-FP/P2. TIFF/IT-FP/P2 is a simplified form of TIFF/IT-FP. The differences between FP/P1 and FP/P2 are very minor.

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
_mimeClass, _profileText, MIME_1314, MIME_FX, MIME_GENERIC
 
Constructor Summary
TiffProfileClassITFPP2()
           
 
Method Summary
 boolean satisfiesThisProfile(IFD ifd)
          Returns true if the IFD satisfies the requirements of the profile.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
getMimeClass, getText, isAlreadyOK, satisfiesBackgroundColorIndicator, satisfiesBackgroundColorIndicator, satisfiesCompression, satisfiesCompression, satisfiesDotRange, satisfiesFillOrder, satisfiesImageColorIndicator, satisfiesImageColorIndicator, satisfiesImageWidth, satisfiesIndexed, satisfiesNewSubfileType, satisfiesNewSubfileType, satisfiesOrientation, satisfiesOrientation, satisfiesPhotometricInterpretation, satisfiesPhotometricInterpretation, satisfiesPlanarConfiguration, satisfiesPlanarConfiguration, satisfiesProfile, satisfiesResolutionUnit, satisfiesResolutionUnit, satisfiesSamplesPerPixel, satisfiesSamplesPerPixel, satisfiesXResolution, satisfiesYResolution, setAlreadyOK
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

TiffProfileClassITFPP2

public TiffProfileClassITFPP2()
Method Detail

satisfiesThisProfile

public boolean satisfiesThisProfile(IFD ifd)
Returns true if the IFD satisfies the requirements of the profile. See the documentation for details.

Overrides:
satisfiesThisProfile in class TiffProfileClassIT


jhove/doc/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITHC.html0000644000707400001440000004624111510702356025506 0ustar garyusers TiffProfileClassITHC (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.tiff
Class TiffProfileClassITHC

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
      extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassIT
          extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassITHC

public final class TiffProfileClassITHC
extends TiffProfileClassIT

Profile checker for TIFF Class IT-HC. The TIFF/IT spec states that "TIFF/IT-HC makes use of all the features and functionality supported by the TIFF and TIFF/IT fields appropriate to high resolution continuous tone images."

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
_mimeClass, _profileText, MIME_1314, MIME_FX, MIME_GENERIC
 
Constructor Summary
TiffProfileClassITHC()
           
 
Method Summary
 boolean satisfiesThisProfile(IFD ifd)
          Returns true if the IFD satisfies the requirements of the profile.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
getMimeClass, getText, isAlreadyOK, satisfiesBackgroundColorIndicator, satisfiesBackgroundColorIndicator, satisfiesCompression, satisfiesCompression, satisfiesDotRange, satisfiesFillOrder, satisfiesImageColorIndicator, satisfiesImageColorIndicator, satisfiesImageWidth, satisfiesIndexed, satisfiesNewSubfileType, satisfiesNewSubfileType, satisfiesOrientation, satisfiesOrientation, satisfiesPhotometricInterpretation, satisfiesPhotometricInterpretation, satisfiesPlanarConfiguration, satisfiesPlanarConfiguration, satisfiesProfile, satisfiesResolutionUnit, satisfiesResolutionUnit, satisfiesSamplesPerPixel, satisfiesSamplesPerPixel, satisfiesXResolution, satisfiesYResolution, setAlreadyOK
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

TiffProfileClassITHC

public TiffProfileClassITHC()
Method Detail

satisfiesThisProfile

public boolean satisfiesThisProfile(IFD ifd)
Returns true if the IFD satisfies the requirements of the profile. See the documentation for details.

Overrides:
satisfiesThisProfile in class TiffProfileClassIT


jhove/doc/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITHCP1.html0000644000707400001440000004637411510702356025716 0ustar garyusers TiffProfileClassITHCP1 (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.tiff
Class TiffProfileClassITHCP1

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
      extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassIT
          extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassITHCP1

public final class TiffProfileClassITHCP1
extends TiffProfileClassIT

Profile checker for TIFF Class IT-HC/P1. The TIFF/IT spec states that "TIFF/IT-HC/P1 is a simplified image file format profile for high resolution continuous tone (HC) image data and can be considered a constrained subset of TIFF/IT-HC specifically intended for simpler implementation."

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
_mimeClass, _profileText, MIME_1314, MIME_FX, MIME_GENERIC
 
Constructor Summary
TiffProfileClassITHCP1()
           
 
Method Summary
 boolean satisfiesThisProfile(IFD ifd)
          Returns true if the IFD satisfies the requirements of the profile.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
getMimeClass, getText, isAlreadyOK, satisfiesBackgroundColorIndicator, satisfiesBackgroundColorIndicator, satisfiesCompression, satisfiesCompression, satisfiesDotRange, satisfiesFillOrder, satisfiesImageColorIndicator, satisfiesImageColorIndicator, satisfiesImageWidth, satisfiesIndexed, satisfiesNewSubfileType, satisfiesNewSubfileType, satisfiesOrientation, satisfiesOrientation, satisfiesPhotometricInterpretation, satisfiesPhotometricInterpretation, satisfiesPlanarConfiguration, satisfiesPlanarConfiguration, satisfiesProfile, satisfiesResolutionUnit, satisfiesResolutionUnit, satisfiesSamplesPerPixel, satisfiesSamplesPerPixel, satisfiesXResolution, satisfiesYResolution, setAlreadyOK
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

TiffProfileClassITHCP1

public TiffProfileClassITHCP1()
Method Detail

satisfiesThisProfile

public boolean satisfiesThisProfile(IFD ifd)
Returns true if the IFD satisfies the requirements of the profile. See the documentation for details.

Overrides:
satisfiesThisProfile in class TiffProfileClassIT


jhove/doc/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITHCP2.html0000644000707400001440000004612111510702356025705 0ustar garyusers TiffProfileClassITHCP2 (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.tiff
Class TiffProfileClassITHCP2

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
      extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassIT
          extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassITHCP2

public final class TiffProfileClassITHCP2
extends TiffProfileClassIT

Profile checker for TIFF Class IT-HC/P2. The TIFF/IT spec states that "TIFF/IT-HC/P2 is an extension of TIFF/IT-HC/P1."

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
_mimeClass, _profileText, MIME_1314, MIME_FX, MIME_GENERIC
 
Constructor Summary
TiffProfileClassITHCP2()
           
 
Method Summary
 boolean satisfiesThisProfile(IFD ifd)
          Returns true if the IFD satisfies the requirements of the profile.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
getMimeClass, getText, isAlreadyOK, satisfiesBackgroundColorIndicator, satisfiesBackgroundColorIndicator, satisfiesCompression, satisfiesCompression, satisfiesDotRange, satisfiesFillOrder, satisfiesImageColorIndicator, satisfiesImageColorIndicator, satisfiesImageWidth, satisfiesIndexed, satisfiesNewSubfileType, satisfiesNewSubfileType, satisfiesOrientation, satisfiesOrientation, satisfiesPhotometricInterpretation, satisfiesPhotometricInterpretation, satisfiesPlanarConfiguration, satisfiesPlanarConfiguration, satisfiesProfile, satisfiesResolutionUnit, satisfiesResolutionUnit, satisfiesSamplesPerPixel, satisfiesSamplesPerPixel, satisfiesXResolution, satisfiesYResolution, setAlreadyOK
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

TiffProfileClassITHCP2

public TiffProfileClassITHCP2()
Method Detail

satisfiesThisProfile

public boolean satisfiesThisProfile(IFD ifd)
Returns true if the IFD satisfies the requirements of the profile. See the documentation for details.

Overrides:
satisfiesThisProfile in class TiffProfileClassIT


jhove/doc/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITLW.html0000644000707400001440000004621011510702356025532 0ustar garyusers TiffProfileClassITLW (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.tiff
Class TiffProfileClassITLW

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
      extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassIT
          extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassITLW

public final class TiffProfileClassITLW
extends TiffProfileClassIT

Profile checker for TIFF Class IT-LW. The TIFF/IT spec states that "TIFF/IT-LW makes use of all the features and functionality supported by the TIFF and TIFF/IT fields appropriate to line art images."

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
_mimeClass, _profileText, MIME_1314, MIME_FX, MIME_GENERIC
 
Constructor Summary
TiffProfileClassITLW()
           
 
Method Summary
 boolean satisfiesThisProfile(IFD ifd)
          Returns true if the IFD satisfies the requirements of the profile.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
getMimeClass, getText, isAlreadyOK, satisfiesBackgroundColorIndicator, satisfiesBackgroundColorIndicator, satisfiesCompression, satisfiesCompression, satisfiesDotRange, satisfiesFillOrder, satisfiesImageColorIndicator, satisfiesImageColorIndicator, satisfiesImageWidth, satisfiesIndexed, satisfiesNewSubfileType, satisfiesNewSubfileType, satisfiesOrientation, satisfiesOrientation, satisfiesPhotometricInterpretation, satisfiesPhotometricInterpretation, satisfiesPlanarConfiguration, satisfiesPlanarConfiguration, satisfiesProfile, satisfiesResolutionUnit, satisfiesResolutionUnit, satisfiesSamplesPerPixel, satisfiesSamplesPerPixel, satisfiesXResolution, satisfiesYResolution, setAlreadyOK
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

TiffProfileClassITLW

public TiffProfileClassITLW()
Method Detail

satisfiesThisProfile

public boolean satisfiesThisProfile(IFD ifd)
Returns true if the IFD satisfies the requirements of the profile. See the documentation for details.

Overrides:
satisfiesThisProfile in class TiffProfileClassIT


jhove/doc/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITLWP1.html0000644000707400001440000004633411510702356025742 0ustar garyusers TiffProfileClassITLWP1 (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.tiff
Class TiffProfileClassITLWP1

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
      extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassIT
          extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassITLWP1

public final class TiffProfileClassITLWP1
extends TiffProfileClassIT

Profile checker for TIFF Class IT-LW/P1. The TIFF/IT spec states that "TIFF/IT-LW/P1 is a simplified image file format profile for line art (LW) image data and can be considered as a constrained subset of TIFF/IT-LW specified for simpler implementation."

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
_mimeClass, _profileText, MIME_1314, MIME_FX, MIME_GENERIC
 
Constructor Summary
TiffProfileClassITLWP1()
           
 
Method Summary
 boolean satisfiesThisProfile(IFD ifd)
          Returns true if the IFD satisfies the requirements of the profile.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
getMimeClass, getText, isAlreadyOK, satisfiesBackgroundColorIndicator, satisfiesBackgroundColorIndicator, satisfiesCompression, satisfiesCompression, satisfiesDotRange, satisfiesFillOrder, satisfiesImageColorIndicator, satisfiesImageColorIndicator, satisfiesImageWidth, satisfiesIndexed, satisfiesNewSubfileType, satisfiesNewSubfileType, satisfiesOrientation, satisfiesOrientation, satisfiesPhotometricInterpretation, satisfiesPhotometricInterpretation, satisfiesPlanarConfiguration, satisfiesPlanarConfiguration, satisfiesProfile, satisfiesResolutionUnit, satisfiesResolutionUnit, satisfiesSamplesPerPixel, satisfiesSamplesPerPixel, satisfiesXResolution, satisfiesYResolution, setAlreadyOK
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

TiffProfileClassITLWP1

public TiffProfileClassITLWP1()
Method Detail

satisfiesThisProfile

public boolean satisfiesThisProfile(IFD ifd)
Returns true if the IFD satisfies the requirements of the profile. See the documentation for details.

Overrides:
satisfiesThisProfile in class TiffProfileClassIT


jhove/doc/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITLWP2.html0000644000707400001440000004644111510702356025742 0ustar garyusers TiffProfileClassITLWP2 (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.tiff
Class TiffProfileClassITLWP2

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
      extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassIT
          extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassITLWP2

public final class TiffProfileClassITLWP2
extends TiffProfileClassIT

Profile checker for TIFF Class IT-LW/P2. The TIFF/IT spec states that "TIFF/IT-LW/P1 is a simplified image file format profile for line art (LW) image data and can be considered as a constrained subset of TIFF/IT-LW specified for simpler implementation. TIFF/IT-LW/P2 can be considered as an extension of TIFF/IT-LW/P1."

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
_mimeClass, _profileText, MIME_1314, MIME_FX, MIME_GENERIC
 
Constructor Summary
TiffProfileClassITLWP2()
           
 
Method Summary
 boolean satisfiesThisProfile(IFD ifd)
          Returns true if the IFD satisfies the requirements of the profile.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
getMimeClass, getText, isAlreadyOK, satisfiesBackgroundColorIndicator, satisfiesBackgroundColorIndicator, satisfiesCompression, satisfiesCompression, satisfiesDotRange, satisfiesFillOrder, satisfiesImageColorIndicator, satisfiesImageColorIndicator, satisfiesImageWidth, satisfiesIndexed, satisfiesNewSubfileType, satisfiesNewSubfileType, satisfiesOrientation, satisfiesOrientation, satisfiesPhotometricInterpretation, satisfiesPhotometricInterpretation, satisfiesPlanarConfiguration, satisfiesPlanarConfiguration, satisfiesProfile, satisfiesResolutionUnit, satisfiesResolutionUnit, satisfiesSamplesPerPixel, satisfiesSamplesPerPixel, satisfiesXResolution, satisfiesYResolution, setAlreadyOK
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

TiffProfileClassITLWP2

public TiffProfileClassITLWP2()
Method Detail

satisfiesThisProfile

public boolean satisfiesThisProfile(IFD ifd)
Returns true if the IFD satisfies the requirements of the profile. See the documentation for details.

Overrides:
satisfiesThisProfile in class TiffProfileClassIT


jhove/doc/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITMP.html0000644000707400001440000004624411510702356025533 0ustar garyusers TiffProfileClassITMP (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.tiff
Class TiffProfileClassITMP

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
      extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassIT
          extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassITMP

public final class TiffProfileClassITMP
extends TiffProfileClassIT

Profile checker for TIFF Class IT-MP. The TIFF/IT spec states that "TIFF/IT-MP makes use of all the features and functionality supported by the TIFF and TIFF/IT fields appropriate to monochrome continuous tone picture images."

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
_mimeClass, _profileText, MIME_1314, MIME_FX, MIME_GENERIC
 
Constructor Summary
TiffProfileClassITMP()
           
 
Method Summary
 boolean satisfiesThisProfile(IFD ifd)
          Returns true if the IFD satisfies the requirements of the profile.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
getMimeClass, getText, isAlreadyOK, satisfiesBackgroundColorIndicator, satisfiesBackgroundColorIndicator, satisfiesCompression, satisfiesCompression, satisfiesDotRange, satisfiesFillOrder, satisfiesImageColorIndicator, satisfiesImageColorIndicator, satisfiesImageWidth, satisfiesIndexed, satisfiesNewSubfileType, satisfiesNewSubfileType, satisfiesOrientation, satisfiesOrientation, satisfiesPhotometricInterpretation, satisfiesPhotometricInterpretation, satisfiesPlanarConfiguration, satisfiesPlanarConfiguration, satisfiesProfile, satisfiesResolutionUnit, satisfiesResolutionUnit, satisfiesSamplesPerPixel, satisfiesSamplesPerPixel, satisfiesXResolution, satisfiesYResolution, setAlreadyOK
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

TiffProfileClassITMP

public TiffProfileClassITMP()
Method Detail

satisfiesThisProfile

public boolean satisfiesThisProfile(IFD ifd)
Returns true if the IFD satisfies the requirements of the profile. See the documentation for details.

Overrides:
satisfiesThisProfile in class TiffProfileClassIT


jhove/doc/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITMPP1.html0000644000707400001440000004640011510702356025726 0ustar garyusers TiffProfileClassITMPP1 (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.tiff
Class TiffProfileClassITMPP1

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
      extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassIT
          extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassITMPP1

public final class TiffProfileClassITMPP1
extends TiffProfileClassIT

Profile checker for TIFF Class IT-MP/P1. The TIFF/IT spec states that "TIFF/IT-MP/P1 is a simplified image file format profile for monochrome continuous tone picture image (MP) data and can be considred a constrained subset of TIFF/IT-MP specifically intended for simpler implementation."

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
_mimeClass, _profileText, MIME_1314, MIME_FX, MIME_GENERIC
 
Constructor Summary
TiffProfileClassITMPP1()
           
 
Method Summary
 boolean satisfiesThisProfile(IFD ifd)
          Returns true if the IFD satisfies the requirements of the profile.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
getMimeClass, getText, isAlreadyOK, satisfiesBackgroundColorIndicator, satisfiesBackgroundColorIndicator, satisfiesCompression, satisfiesCompression, satisfiesDotRange, satisfiesFillOrder, satisfiesImageColorIndicator, satisfiesImageColorIndicator, satisfiesImageWidth, satisfiesIndexed, satisfiesNewSubfileType, satisfiesNewSubfileType, satisfiesOrientation, satisfiesOrientation, satisfiesPhotometricInterpretation, satisfiesPhotometricInterpretation, satisfiesPlanarConfiguration, satisfiesPlanarConfiguration, satisfiesProfile, satisfiesResolutionUnit, satisfiesResolutionUnit, satisfiesSamplesPerPixel, satisfiesSamplesPerPixel, satisfiesXResolution, satisfiesYResolution, setAlreadyOK
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

TiffProfileClassITMPP1

public TiffProfileClassITMPP1()
Method Detail

satisfiesThisProfile

public boolean satisfiesThisProfile(IFD ifd)
Returns true if the IFD satisfies the requirements of the profile. See the documentation for details.

Overrides:
satisfiesThisProfile in class TiffProfileClassIT


jhove/doc/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITMPP2.html0000644000707400001440000004612111510702356025727 0ustar garyusers TiffProfileClassITMPP2 (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.tiff
Class TiffProfileClassITMPP2

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
      extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassIT
          extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassITMPP2

public final class TiffProfileClassITMPP2
extends TiffProfileClassIT

Profile checker for TIFF Class IT-MP/P2. The TIFF/IT spec states that "TIFF/IT-MP/P2 is an extension of TIFF/IT-MP/P1."

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
_mimeClass, _profileText, MIME_1314, MIME_FX, MIME_GENERIC
 
Constructor Summary
TiffProfileClassITMPP2()
           
 
Method Summary
 boolean satisfiesThisProfile(IFD ifd)
          Returns true if the IFD satisfies the requirements of the profile.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
getMimeClass, getText, isAlreadyOK, satisfiesBackgroundColorIndicator, satisfiesBackgroundColorIndicator, satisfiesCompression, satisfiesCompression, satisfiesDotRange, satisfiesFillOrder, satisfiesImageColorIndicator, satisfiesImageColorIndicator, satisfiesImageWidth, satisfiesIndexed, satisfiesNewSubfileType, satisfiesNewSubfileType, satisfiesOrientation, satisfiesOrientation, satisfiesPhotometricInterpretation, satisfiesPhotometricInterpretation, satisfiesPlanarConfiguration, satisfiesPlanarConfiguration, satisfiesProfile, satisfiesResolutionUnit, satisfiesResolutionUnit, satisfiesSamplesPerPixel, satisfiesSamplesPerPixel, satisfiesXResolution, satisfiesYResolution, setAlreadyOK
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

TiffProfileClassITMPP2

public TiffProfileClassITMPP2()
Method Detail

satisfiesThisProfile

public boolean satisfiesThisProfile(IFD ifd)
Returns true if the IFD satisfies the requirements of the profile. See the documentation for details.

Overrides:
satisfiesThisProfile in class TiffProfileClassIT


jhove/doc/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITSD.html0000644000707400001440000004625111510702356025523 0ustar garyusers TiffProfileClassITSD (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.tiff
Class TiffProfileClassITSD

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
      extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassIT
          extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassITSD

public final class TiffProfileClassITSD
extends TiffProfileClassIT

Profile checker for TIFF Class IT-SD. The TIFF/IT spec states that "TIFF/IT-SD makes use of all the features and functionality supported by the TIFF and TIFF/IT fields appropriate to prescreened (copydot) colour separation images."

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
_mimeClass, _profileText, MIME_1314, MIME_FX, MIME_GENERIC
 
Constructor Summary
TiffProfileClassITSD()
           
 
Method Summary
 boolean satisfiesThisProfile(IFD ifd)
          Returns true if the IFD satisfies the requirements of the profile.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
getMimeClass, getText, isAlreadyOK, satisfiesBackgroundColorIndicator, satisfiesBackgroundColorIndicator, satisfiesCompression, satisfiesCompression, satisfiesDotRange, satisfiesFillOrder, satisfiesImageColorIndicator, satisfiesImageColorIndicator, satisfiesImageWidth, satisfiesIndexed, satisfiesNewSubfileType, satisfiesNewSubfileType, satisfiesOrientation, satisfiesOrientation, satisfiesPhotometricInterpretation, satisfiesPhotometricInterpretation, satisfiesPlanarConfiguration, satisfiesPlanarConfiguration, satisfiesProfile, satisfiesResolutionUnit, satisfiesResolutionUnit, satisfiesSamplesPerPixel, satisfiesSamplesPerPixel, satisfiesXResolution, satisfiesYResolution, setAlreadyOK
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

TiffProfileClassITSD

public TiffProfileClassITSD()
Method Detail

satisfiesThisProfile

public boolean satisfiesThisProfile(IFD ifd)
Returns true if the IFD satisfies the requirements of the profile. See the documentation for details.

Overrides:
satisfiesThisProfile in class TiffProfileClassIT


jhove/doc/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITSDP2.html0000644000707400001440000004637011510702356025727 0ustar garyusers TiffProfileClassITSDP2 (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.tiff
Class TiffProfileClassITSDP2

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
      extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassIT
          extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassITSDP2

public final class TiffProfileClassITSDP2
extends TiffProfileClassIT

Profile checker for TIFF Class IT-SD/P2. The TIFF/IT spec states that "TIFF/IT-SD/P2 is a simplified file format profile for screened data image (SD) data and can be considered a constrained subset of TIFF/IT-SD specifically intended for simpler implementation." There is no TIFF/IT-SD/P1.

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
_mimeClass, _profileText, MIME_1314, MIME_FX, MIME_GENERIC
 
Constructor Summary
TiffProfileClassITSDP2()
           
 
Method Summary
 boolean satisfiesThisProfile(IFD ifd)
          Returns true if the IFD satisfies the requirements of the profile.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
getMimeClass, getText, isAlreadyOK, satisfiesBackgroundColorIndicator, satisfiesBackgroundColorIndicator, satisfiesCompression, satisfiesCompression, satisfiesDotRange, satisfiesFillOrder, satisfiesImageColorIndicator, satisfiesImageColorIndicator, satisfiesImageWidth, satisfiesIndexed, satisfiesNewSubfileType, satisfiesNewSubfileType, satisfiesOrientation, satisfiesOrientation, satisfiesPhotometricInterpretation, satisfiesPhotometricInterpretation, satisfiesPlanarConfiguration, satisfiesPlanarConfiguration, satisfiesProfile, satisfiesResolutionUnit, satisfiesResolutionUnit, satisfiesSamplesPerPixel, satisfiesSamplesPerPixel, satisfiesXResolution, satisfiesYResolution, setAlreadyOK
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

TiffProfileClassITSDP2

public TiffProfileClassITSDP2()
Method Detail

satisfiesThisProfile

public boolean satisfiesThisProfile(IFD ifd)
Returns true if the IFD satisfies the requirements of the profile. See the documentation for details.

Overrides:
satisfiesThisProfile in class TiffProfileClassIT


jhove/doc/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassP.html0000644000707400001440000004521211510702356025153 0ustar garyusers TiffProfileClassP (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.tiff
Class TiffProfileClassP

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
      extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassP

public final class TiffProfileClassP
extends TiffProfile

Profile checker for TIFF Class P (Baseline Palette color).

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
_mimeClass, _profileText, MIME_1314, MIME_FX, MIME_GENERIC
 
Constructor Summary
TiffProfileClassP()
           
 
Method Summary
 boolean satisfiesThisProfile(IFD ifd)
          Returns true if the IFD satisfies the requirements of a Class P profile.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
getMimeClass, getText, isAlreadyOK, satisfiesBackgroundColorIndicator, satisfiesBackgroundColorIndicator, satisfiesCompression, satisfiesCompression, satisfiesDotRange, satisfiesFillOrder, satisfiesImageColorIndicator, satisfiesImageColorIndicator, satisfiesImageWidth, satisfiesIndexed, satisfiesNewSubfileType, satisfiesNewSubfileType, satisfiesOrientation, satisfiesOrientation, satisfiesPhotometricInterpretation, satisfiesPhotometricInterpretation, satisfiesPlanarConfiguration, satisfiesPlanarConfiguration, satisfiesProfile, satisfiesResolutionUnit, satisfiesResolutionUnit, satisfiesSamplesPerPixel, satisfiesSamplesPerPixel, satisfiesXResolution, satisfiesYResolution, setAlreadyOK
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

TiffProfileClassP

public TiffProfileClassP()
Method Detail

satisfiesThisProfile

public boolean satisfiesThisProfile(IFD ifd)
Returns true if the IFD satisfies the requirements of a Class P profile. See the TIFF 6.0 specification for details.

Specified by:
satisfiesThisProfile in class TiffProfile


jhove/doc/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassR.html0000644000707400001440000004520011510702356025152 0ustar garyusers TiffProfileClassR (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.tiff
Class TiffProfileClassR

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
      extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassR

public final class TiffProfileClassR
extends TiffProfile

Profile checker for TIFF Class R (Baseline Palette color).

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
_mimeClass, _profileText, MIME_1314, MIME_FX, MIME_GENERIC
 
Constructor Summary
TiffProfileClassR()
           
 
Method Summary
 boolean satisfiesThisProfile(IFD ifd)
          Returns true if the IFD satisfies the requirements of a Class R profile.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
getMimeClass, getText, isAlreadyOK, satisfiesBackgroundColorIndicator, satisfiesBackgroundColorIndicator, satisfiesCompression, satisfiesCompression, satisfiesDotRange, satisfiesFillOrder, satisfiesImageColorIndicator, satisfiesImageColorIndicator, satisfiesImageWidth, satisfiesIndexed, satisfiesNewSubfileType, satisfiesNewSubfileType, satisfiesOrientation, satisfiesOrientation, satisfiesPhotometricInterpretation, satisfiesPhotometricInterpretation, satisfiesPlanarConfiguration, satisfiesPlanarConfiguration, satisfiesProfile, satisfiesResolutionUnit, satisfiesResolutionUnit, satisfiesSamplesPerPixel, satisfiesSamplesPerPixel, satisfiesXResolution, satisfiesYResolution, setAlreadyOK
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

TiffProfileClassR

public TiffProfileClassR()
Method Detail

satisfiesThisProfile

public boolean satisfiesThisProfile(IFD ifd)
Returns true if the IFD satisfies the requirements of a Class R profile. See the TIFF 6.0 specification for details.

Specified by:
satisfiesThisProfile in class TiffProfile


jhove/doc/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassY.html0000644000707400001440000004516211510702356025170 0ustar garyusers TiffProfileClassY (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.tiff
Class TiffProfileClassY

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
      extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassY

public final class TiffProfileClassY
extends TiffProfile

Profile checker for TIFF Class Y (Baseline YCbCr).

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
_mimeClass, _profileText, MIME_1314, MIME_FX, MIME_GENERIC
 
Constructor Summary
TiffProfileClassY()
           
 
Method Summary
 boolean satisfiesThisProfile(IFD ifd)
          Returns true if the IFD satisfies the requirements of a Class Y profile.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
getMimeClass, getText, isAlreadyOK, satisfiesBackgroundColorIndicator, satisfiesBackgroundColorIndicator, satisfiesCompression, satisfiesCompression, satisfiesDotRange, satisfiesFillOrder, satisfiesImageColorIndicator, satisfiesImageColorIndicator, satisfiesImageWidth, satisfiesIndexed, satisfiesNewSubfileType, satisfiesNewSubfileType, satisfiesOrientation, satisfiesOrientation, satisfiesPhotometricInterpretation, satisfiesPhotometricInterpretation, satisfiesPlanarConfiguration, satisfiesPlanarConfiguration, satisfiesProfile, satisfiesResolutionUnit, satisfiesResolutionUnit, satisfiesSamplesPerPixel, satisfiesSamplesPerPixel, satisfiesXResolution, satisfiesYResolution, setAlreadyOK
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

TiffProfileClassY

public TiffProfileClassY()
Method Detail

satisfiesThisProfile

public boolean satisfiesThisProfile(IFD ifd)
Returns true if the IFD satisfies the requirements of a Class Y profile. See the TIFF 6.0 specification for details.

Specified by:
satisfiesThisProfile in class TiffProfile


jhove/doc/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileDLFBW.html0000644000707400001440000004722111510702356024626 0ustar garyusers TiffProfileDLFBW (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.tiff
Class TiffProfileDLFBW

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
      extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfileDLF
          extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfileDLFBW

public final class TiffProfileDLFBW
extends TiffProfileDLF

Profile checker for TIFF DLF Benchmark for Faithful Digital Reproductions of Monographs and Serials: black and white.


Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
_mimeClass, _profileText, MIME_1314, MIME_FX, MIME_GENERIC
 
Constructor Summary
TiffProfileDLFBW()
           
 
Method Summary
 boolean satisfiesThisProfile(IFD ifd)
          Returns true if the IFD satisfies the requirements of the profile.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfileDLF
hasMinimumResolution
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
getMimeClass, getText, isAlreadyOK, satisfiesBackgroundColorIndicator, satisfiesBackgroundColorIndicator, satisfiesCompression, satisfiesCompression, satisfiesDotRange, satisfiesFillOrder, satisfiesImageColorIndicator, satisfiesImageColorIndicator, satisfiesImageWidth, satisfiesIndexed, satisfiesNewSubfileType, satisfiesNewSubfileType, satisfiesOrientation, satisfiesOrientation, satisfiesPhotometricInterpretation, satisfiesPhotometricInterpretation, satisfiesPlanarConfiguration, satisfiesPlanarConfiguration, satisfiesProfile, satisfiesResolutionUnit, satisfiesResolutionUnit, satisfiesSamplesPerPixel, satisfiesSamplesPerPixel, satisfiesXResolution, satisfiesYResolution, setAlreadyOK
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

TiffProfileDLFBW

public TiffProfileDLFBW()
Method Detail

satisfiesThisProfile

public boolean satisfiesThisProfile(IFD ifd)
Returns true if the IFD satisfies the requirements of the profile. See the documentation for details.

Overrides:
satisfiesThisProfile in class TiffProfileDLF


jhove/doc/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileDLFColor.html0000644000707400001440000004727111510702356025401 0ustar garyusers TiffProfileDLFColor (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.tiff
Class TiffProfileDLFColor

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
      extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfileDLF
          extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfileDLFColor

public final class TiffProfileDLFColor
extends TiffProfileDLF

Profile checker for TIFF DLF Benchmark for Faithful Digital Reproductions of Monographs and Serials: color.


Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
_mimeClass, _profileText, MIME_1314, MIME_FX, MIME_GENERIC
 
Constructor Summary
TiffProfileDLFColor()
           
 
Method Summary
 boolean satisfiesThisProfile(IFD ifd)
          Returns true if the IFD satisfies the requirements of the profile.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfileDLF
hasMinimumResolution
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
getMimeClass, getText, isAlreadyOK, satisfiesBackgroundColorIndicator, satisfiesBackgroundColorIndicator, satisfiesCompression, satisfiesCompression, satisfiesDotRange, satisfiesFillOrder, satisfiesImageColorIndicator, satisfiesImageColorIndicator, satisfiesImageWidth, satisfiesIndexed, satisfiesNewSubfileType, satisfiesNewSubfileType, satisfiesOrientation, satisfiesOrientation, satisfiesPhotometricInterpretation, satisfiesPhotometricInterpretation, satisfiesPlanarConfiguration, satisfiesPlanarConfiguration, satisfiesProfile, satisfiesResolutionUnit, satisfiesResolutionUnit, satisfiesSamplesPerPixel, satisfiesSamplesPerPixel, satisfiesXResolution, satisfiesYResolution, setAlreadyOK
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

TiffProfileDLFColor

public TiffProfileDLFColor()
Method Detail

satisfiesThisProfile

public boolean satisfiesThisProfile(IFD ifd)
Returns true if the IFD satisfies the requirements of the profile. See the documentation for details.

Overrides:
satisfiesThisProfile in class TiffProfileDLF


jhove/doc/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileDLFGray.html0000644000707400001440000004725311510702356025225 0ustar garyusers TiffProfileDLFGray (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.tiff
Class TiffProfileDLFGray

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
      extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfileDLF
          extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfileDLFGray

public final class TiffProfileDLFGray
extends TiffProfileDLF

Profile checker for TIFF DLF Benchmark for Faithful Digital Reproductions of Monographs and Serials: grayscale.


Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
_mimeClass, _profileText, MIME_1314, MIME_FX, MIME_GENERIC
 
Constructor Summary
TiffProfileDLFGray()
           
 
Method Summary
 boolean satisfiesThisProfile(IFD ifd)
          Returns true if the IFD satisfies the requirements of the profile.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfileDLF
hasMinimumResolution
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
getMimeClass, getText, isAlreadyOK, satisfiesBackgroundColorIndicator, satisfiesBackgroundColorIndicator, satisfiesCompression, satisfiesCompression, satisfiesDotRange, satisfiesFillOrder, satisfiesImageColorIndicator, satisfiesImageColorIndicator, satisfiesImageWidth, satisfiesIndexed, satisfiesNewSubfileType, satisfiesNewSubfileType, satisfiesOrientation, satisfiesOrientation, satisfiesPhotometricInterpretation, satisfiesPhotometricInterpretation, satisfiesPlanarConfiguration, satisfiesPlanarConfiguration, satisfiesProfile, satisfiesResolutionUnit, satisfiesResolutionUnit, satisfiesSamplesPerPixel, satisfiesSamplesPerPixel, satisfiesXResolution, satisfiesYResolution, setAlreadyOK
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

TiffProfileDLFGray

public TiffProfileDLFGray()
Method Detail

satisfiesThisProfile

public boolean satisfiesThisProfile(IFD ifd)
Returns true if the IFD satisfies the requirements of the profile. See the documentation for details.

Overrides:
satisfiesThisProfile in class TiffProfileDLF


jhove/doc/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileDNG.html0000644000707400001440000005045211510702356024400 0ustar garyusers TiffProfileDNG (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.tiff
Class TiffProfileDNG

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
      extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfileDNG

public class TiffProfileDNG
extends TiffProfile

Profile checker for the DNG raw IFD.

Author:
Gary McGath
See Also:
TiffProfileDNG

Field Summary
static int CFA
          PhotometricInterpretation for CFA space
static int LINEAR_RAW
           
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
_mimeClass, _profileText, MIME_1314, MIME_FX, MIME_GENERIC
 
Constructor Summary
TiffProfileDNG()
           
 
Method Summary
 boolean satisfiesThisProfile(IFD ifd)
          Returns true if the IFD satisfies the requirements of the profile.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
getMimeClass, getText, isAlreadyOK, satisfiesBackgroundColorIndicator, satisfiesBackgroundColorIndicator, satisfiesCompression, satisfiesCompression, satisfiesDotRange, satisfiesFillOrder, satisfiesImageColorIndicator, satisfiesImageColorIndicator, satisfiesImageWidth, satisfiesIndexed, satisfiesNewSubfileType, satisfiesNewSubfileType, satisfiesOrientation, satisfiesOrientation, satisfiesPhotometricInterpretation, satisfiesPhotometricInterpretation, satisfiesPlanarConfiguration, satisfiesPlanarConfiguration, satisfiesProfile, satisfiesResolutionUnit, satisfiesResolutionUnit, satisfiesSamplesPerPixel, satisfiesSamplesPerPixel, satisfiesXResolution, satisfiesYResolution, setAlreadyOK
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

CFA

public static final int CFA
PhotometricInterpretation for CFA space

See Also:
Constant Field Values

LINEAR_RAW

public static final int LINEAR_RAW
See Also:
Constant Field Values
Constructor Detail

TiffProfileDNG

public TiffProfileDNG()
Method Detail

satisfiesThisProfile

public boolean satisfiesThisProfile(IFD ifd)
Returns true if the IFD satisfies the requirements of the profile. See the documentation for details.

Specified by:
satisfiesThisProfile in class TiffProfile


jhove/doc/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileDNGThumb.html0000644000707400001440000004602111510702356025375 0ustar garyusers TiffProfileDNGThumb (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.tiff
Class TiffProfileDNGThumb

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
      extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfileDNGThumb

public class TiffProfileDNGThumb
extends TiffProfile

IFD 0 of a DNG document must satisfy this profile. It doesn't actually have to be a "thumbnail" in the sense of containing a low-resolution image, but it has to contain the "IFD 0" tags specified by DNG. In addition, some other document must satisfy TiffProfileDNG.

Author:
Gary McGath
See Also:
TiffProfileDNG

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
_mimeClass, _profileText, MIME_1314, MIME_FX, MIME_GENERIC
 
Constructor Summary
TiffProfileDNGThumb()
           
 
Method Summary
 boolean satisfiesThisProfile(IFD ifd)
          Returns true if the IFD satisfies the requirements of a DNG thumbnail profile.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
getMimeClass, getText, isAlreadyOK, satisfiesBackgroundColorIndicator, satisfiesBackgroundColorIndicator, satisfiesCompression, satisfiesCompression, satisfiesDotRange, satisfiesFillOrder, satisfiesImageColorIndicator, satisfiesImageColorIndicator, satisfiesImageWidth, satisfiesIndexed, satisfiesNewSubfileType, satisfiesNewSubfileType, satisfiesOrientation, satisfiesOrientation, satisfiesPhotometricInterpretation, satisfiesPhotometricInterpretation, satisfiesPlanarConfiguration, satisfiesPlanarConfiguration, satisfiesProfile, satisfiesResolutionUnit, satisfiesResolutionUnit, satisfiesSamplesPerPixel, satisfiesSamplesPerPixel, satisfiesXResolution, satisfiesYResolution, setAlreadyOK
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

TiffProfileDNGThumb

public TiffProfileDNGThumb()
Method Detail

satisfiesThisProfile

public boolean satisfiesThisProfile(IFD ifd)
Returns true if the IFD satisfies the requirements of a DNG thumbnail profile.

Specified by:
satisfiesThisProfile in class TiffProfile


jhove/doc/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileEP.html0000644000707400001440000004541311510702356024275 0ustar garyusers TiffProfileEP (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.tiff
Class TiffProfileEP

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
      extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfileEP

public class TiffProfileEP
extends TiffProfile

Profile checker for TIFF/EP. For TIFF/EP, no default values may be assumed. At the moment, we have no way to determine which values were defaulted, so defaults are shown even if the file satisfies the EP profile. This class also serves as the base class for DNG, which is defined as a restricted subset of TIFF/EP.


Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
_mimeClass, _profileText, MIME_1314, MIME_FX, MIME_GENERIC
 
Constructor Summary
TiffProfileEP()
           
 
Method Summary
 boolean satisfiesThisProfile(IFD ifd)
          Returns true if the IFD satisfies the requirements of a TIFF/EP profile.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
getMimeClass, getText, isAlreadyOK, satisfiesBackgroundColorIndicator, satisfiesBackgroundColorIndicator, satisfiesCompression, satisfiesCompression, satisfiesDotRange, satisfiesFillOrder, satisfiesImageColorIndicator, satisfiesImageColorIndicator, satisfiesImageWidth, satisfiesIndexed, satisfiesNewSubfileType, satisfiesNewSubfileType, satisfiesOrientation, satisfiesOrientation, satisfiesPhotometricInterpretation, satisfiesPhotometricInterpretation, satisfiesPlanarConfiguration, satisfiesPlanarConfiguration, satisfiesProfile, satisfiesResolutionUnit, satisfiesResolutionUnit, satisfiesSamplesPerPixel, satisfiesSamplesPerPixel, satisfiesXResolution, satisfiesYResolution, setAlreadyOK
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

TiffProfileEP

public TiffProfileEP()
Method Detail

satisfiesThisProfile

public boolean satisfiesThisProfile(IFD ifd)
Returns true if the IFD satisfies the requirements of a TIFF/EP profile. See the TIFF/EP specification for details.

Specified by:
satisfiesThisProfile in class TiffProfile


jhove/doc/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileExif.html0000644000707400001440000004602411510702356024663 0ustar garyusers TiffProfileExif (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.tiff
Class TiffProfileExif

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
      extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfileExif

public final class TiffProfileExif
extends TiffProfile

Profile checker for Exif. This applies to the main IFD of the file. To satisfy the Exif profile, the thumbnail IFD must also satisfy TiffProfileExifThumb.

See Also:
TiffProfileExifThumb, TiffProfileExifIFD

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
_mimeClass, _profileText, MIME_1314, MIME_FX, MIME_GENERIC
 
Constructor Summary
TiffProfileExif()
           
 
Method Summary
 boolean satisfiesThisProfile(IFD ifd)
          Returns true if the IFD satisfies the requirements of an Exif profile.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
getMimeClass, getText, isAlreadyOK, satisfiesBackgroundColorIndicator, satisfiesBackgroundColorIndicator, satisfiesCompression, satisfiesCompression, satisfiesDotRange, satisfiesFillOrder, satisfiesImageColorIndicator, satisfiesImageColorIndicator, satisfiesImageWidth, satisfiesIndexed, satisfiesNewSubfileType, satisfiesNewSubfileType, satisfiesOrientation, satisfiesOrientation, satisfiesPhotometricInterpretation, satisfiesPhotometricInterpretation, satisfiesPlanarConfiguration, satisfiesPlanarConfiguration, satisfiesProfile, satisfiesResolutionUnit, satisfiesResolutionUnit, satisfiesSamplesPerPixel, satisfiesSamplesPerPixel, satisfiesXResolution, satisfiesYResolution, setAlreadyOK
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

TiffProfileExif

public TiffProfileExif()
Method Detail

satisfiesThisProfile

public boolean satisfiesThisProfile(IFD ifd)
Returns true if the IFD satisfies the requirements of an Exif profile. See the Exif specification for details.

Specified by:
satisfiesThisProfile in class TiffProfile


jhove/doc/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileExifIFD.html0000644000707400001440000004534111510702356025207 0ustar garyusers TiffProfileExifIFD (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.tiff
Class TiffProfileExifIFD

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
      extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfileExifIFD

public class TiffProfileExifIFD
extends TiffProfile

Profile checker for the Exif IFD of a TIFF file which potentially matches the TIFF profile. This is called from TiffProfileExif to check the Exif IFD.

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
_mimeClass, _profileText, MIME_1314, MIME_FX, MIME_GENERIC
 
Constructor Summary
TiffProfileExifIFD()
           
 
Method Summary
 boolean satisfiesThisProfile(IFD ifd)
          Returns true if the IFD satisfies the requirements of an Exif profile.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
getMimeClass, getText, isAlreadyOK, satisfiesBackgroundColorIndicator, satisfiesBackgroundColorIndicator, satisfiesCompression, satisfiesCompression, satisfiesDotRange, satisfiesFillOrder, satisfiesImageColorIndicator, satisfiesImageColorIndicator, satisfiesImageWidth, satisfiesIndexed, satisfiesNewSubfileType, satisfiesNewSubfileType, satisfiesOrientation, satisfiesOrientation, satisfiesPhotometricInterpretation, satisfiesPhotometricInterpretation, satisfiesPlanarConfiguration, satisfiesPlanarConfiguration, satisfiesProfile, satisfiesResolutionUnit, satisfiesResolutionUnit, satisfiesSamplesPerPixel, satisfiesSamplesPerPixel, satisfiesXResolution, satisfiesYResolution, setAlreadyOK
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

TiffProfileExifIFD

public TiffProfileExifIFD()
Method Detail

satisfiesThisProfile

public boolean satisfiesThisProfile(IFD ifd)
Returns true if the IFD satisfies the requirements of an Exif profile. See the Exif specification for details.

Specified by:
satisfiesThisProfile in class TiffProfile


jhove/doc/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileExifThumb.html0000644000707400001440000004762611510702356025674 0ustar garyusers TiffProfileExifThumb (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.tiff
Class TiffProfileExifThumb

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
      extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfileExifThumb

public class TiffProfileExifThumb
extends TiffProfile

Profile checker for the thumbnail IFD of a TIFF file potentially meeting the TIFF profile. This doesn't go into the _profiles list of TiffIFD, but rather is one of two (or more?) profiles that must be checked to determine if the file meets the Exif profile. It should be called only for the "thumbnail" IFD, which is the second top-level IFD.

Author:
Gary McGath
See Also:
TiffProfileExif

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
_mimeClass, _profileText, MIME_1314, MIME_FX, MIME_GENERIC
 
Constructor Summary
TiffProfileExifThumb()
           
 
Method Summary
 boolean satisfiesThisProfile(IFD ifd)
          Returns true if the IFD satisfies the requirements of a thumbnail IFD for an Exif profile.
 void setMainCompression(int comp)
          Record the compression scheme of the main IFD; required for comparison.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
getMimeClass, getText, isAlreadyOK, satisfiesBackgroundColorIndicator, satisfiesBackgroundColorIndicator, satisfiesCompression, satisfiesCompression, satisfiesDotRange, satisfiesFillOrder, satisfiesImageColorIndicator, satisfiesImageColorIndicator, satisfiesImageWidth, satisfiesIndexed, satisfiesNewSubfileType, satisfiesNewSubfileType, satisfiesOrientation, satisfiesOrientation, satisfiesPhotometricInterpretation, satisfiesPhotometricInterpretation, satisfiesPlanarConfiguration, satisfiesPlanarConfiguration, satisfiesProfile, satisfiesResolutionUnit, satisfiesResolutionUnit, satisfiesSamplesPerPixel, satisfiesSamplesPerPixel, satisfiesXResolution, satisfiesYResolution, setAlreadyOK
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

TiffProfileExifThumb

public TiffProfileExifThumb()
Method Detail

setMainCompression

public void setMainCompression(int comp)
Record the compression scheme of the main IFD; required for comparison.


satisfiesThisProfile

public boolean satisfiesThisProfile(IFD ifd)
Returns true if the IFD satisfies the requirements of a thumbnail IFD for an Exif profile. See the Exif specification for details.

Specified by:
satisfiesThisProfile in class TiffProfile


jhove/doc/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileFXC.html0000644000707400001440000005113611510702356024410 0ustar garyusers TiffProfileFXC (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.tiff
Class TiffProfileFXC

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
      extended by edu.harvard.hul.ois.jhove.module.tiff.TiffFXBase
          extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfileFXC

public class TiffProfileFXC
extends TiffFXBase

Profile checker for TIFF FX, Profile C (Baseline Color). Image data content is not checked for profile conformance. Only tags are checked.

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffFXBase
GLOBALPARAMETERSIFD, STRIPROWCOUNTS
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
_mimeClass, _profileText, MIME_1314, MIME_FX, MIME_GENERIC
 
Constructor Summary
TiffProfileFXC()
          Constructor.
 
Method Summary
 boolean satisfiesThisProfile(IFD ifd)
          Returns true if the IFD satisfies the requirements of a TIFF/FX C profile.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffFXBase
perCMtoPerInch, satisfiesClass
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
getMimeClass, getText, isAlreadyOK, satisfiesBackgroundColorIndicator, satisfiesBackgroundColorIndicator, satisfiesCompression, satisfiesCompression, satisfiesDotRange, satisfiesFillOrder, satisfiesImageColorIndicator, satisfiesImageColorIndicator, satisfiesImageWidth, satisfiesIndexed, satisfiesNewSubfileType, satisfiesNewSubfileType, satisfiesOrientation, satisfiesOrientation, satisfiesPhotometricInterpretation, satisfiesPhotometricInterpretation, satisfiesPlanarConfiguration, satisfiesPlanarConfiguration, satisfiesProfile, satisfiesResolutionUnit, satisfiesResolutionUnit, satisfiesSamplesPerPixel, satisfiesSamplesPerPixel, satisfiesXResolution, satisfiesYResolution, setAlreadyOK
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

TiffProfileFXC

public TiffProfileFXC()
Constructor.

Method Detail

satisfiesThisProfile

public boolean satisfiesThisProfile(IFD ifd)
Returns true if the IFD satisfies the requirements of a TIFF/FX C profile. See the TIFF/FX specification for details.

Specified by:
satisfiesThisProfile in class TiffProfile


jhove/doc/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileFXF.html0000644000707400001440000005131511510702356024412 0ustar garyusers TiffProfileFXF (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.tiff
Class TiffProfileFXF

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
      extended by edu.harvard.hul.ois.jhove.module.tiff.TiffFXBase
          extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfileFXF

public class TiffProfileFXF
extends TiffFXBase

Profile checker for TIFF FX, Profile F, aka TIFF-F. This supersedes the Class F profile (TiffProfileClassF), which will be deprecated and removed from the Jhove application. Image data content is not checked for profile conformance. Only tags are checked.

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffFXBase
GLOBALPARAMETERSIFD, STRIPROWCOUNTS
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
_mimeClass, _profileText, MIME_1314, MIME_FX, MIME_GENERIC
 
Constructor Summary
TiffProfileFXF()
          Constructor.
 
Method Summary
 boolean satisfiesThisProfile(IFD ifd)
          Returns true if the IFD satisfies the requirements of a TIFF/FX S profile.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffFXBase
perCMtoPerInch, satisfiesClass
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
getMimeClass, getText, isAlreadyOK, satisfiesBackgroundColorIndicator, satisfiesBackgroundColorIndicator, satisfiesCompression, satisfiesCompression, satisfiesDotRange, satisfiesFillOrder, satisfiesImageColorIndicator, satisfiesImageColorIndicator, satisfiesImageWidth, satisfiesIndexed, satisfiesNewSubfileType, satisfiesNewSubfileType, satisfiesOrientation, satisfiesOrientation, satisfiesPhotometricInterpretation, satisfiesPhotometricInterpretation, satisfiesPlanarConfiguration, satisfiesPlanarConfiguration, satisfiesProfile, satisfiesResolutionUnit, satisfiesResolutionUnit, satisfiesSamplesPerPixel, satisfiesSamplesPerPixel, satisfiesXResolution, satisfiesYResolution, setAlreadyOK
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

TiffProfileFXF

public TiffProfileFXF()
Constructor.

Method Detail

satisfiesThisProfile

public boolean satisfiesThisProfile(IFD ifd)
Returns true if the IFD satisfies the requirements of a TIFF/FX S profile. See the TIFF/FX specification for details.

Specified by:
satisfiesThisProfile in class TiffProfile


jhove/doc/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileFXJ.html0000644000707400001440000005112011510702357024411 0ustar garyusers TiffProfileFXJ (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.tiff
Class TiffProfileFXJ

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
      extended by edu.harvard.hul.ois.jhove.module.tiff.TiffFXBase
          extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfileFXJ

public class TiffProfileFXJ
extends TiffFXBase

Profile checker for TIFF FX, Profile J (lossless JBIG). Image data content is not checked for profile conformance. Only tags are checked.

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffFXBase
GLOBALPARAMETERSIFD, STRIPROWCOUNTS
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
_mimeClass, _profileText, MIME_1314, MIME_FX, MIME_GENERIC
 
Constructor Summary
TiffProfileFXJ()
          Constructor.
 
Method Summary
 boolean satisfiesThisProfile(IFD ifd)
          Returns true if the IFD satisfies the requirements of a TIFF/FX J profile.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffFXBase
perCMtoPerInch, satisfiesClass
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
getMimeClass, getText, isAlreadyOK, satisfiesBackgroundColorIndicator, satisfiesBackgroundColorIndicator, satisfiesCompression, satisfiesCompression, satisfiesDotRange, satisfiesFillOrder, satisfiesImageColorIndicator, satisfiesImageColorIndicator, satisfiesImageWidth, satisfiesIndexed, satisfiesNewSubfileType, satisfiesNewSubfileType, satisfiesOrientation, satisfiesOrientation, satisfiesPhotometricInterpretation, satisfiesPhotometricInterpretation, satisfiesPlanarConfiguration, satisfiesPlanarConfiguration, satisfiesProfile, satisfiesResolutionUnit, satisfiesResolutionUnit, satisfiesSamplesPerPixel, satisfiesSamplesPerPixel, satisfiesXResolution, satisfiesYResolution, setAlreadyOK
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

TiffProfileFXJ

public TiffProfileFXJ()
Constructor.

Method Detail

satisfiesThisProfile

public boolean satisfiesThisProfile(IFD ifd)
Returns true if the IFD satisfies the requirements of a TIFF/FX J profile. See the TIFF/FX specification for details.

Specified by:
satisfiesThisProfile in class TiffProfile


jhove/doc/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileFXL.html0000644000707400001440000005112211510702357024415 0ustar garyusers TiffProfileFXL (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.tiff
Class TiffProfileFXL

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
      extended by edu.harvard.hul.ois.jhove.module.tiff.TiffFXBase
          extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfileFXL

public class TiffProfileFXL
extends TiffFXBase

Profile checker for TIFF FX, Profile L (Lossless Color). Image data content is not checked for profile conformance. Only tags are checked.

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffFXBase
GLOBALPARAMETERSIFD, STRIPROWCOUNTS
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
_mimeClass, _profileText, MIME_1314, MIME_FX, MIME_GENERIC
 
Constructor Summary
TiffProfileFXL()
          Constructor.
 
Method Summary
 boolean satisfiesThisProfile(IFD ifd)
          Returns true if the IFD satisfies the requirements of a TIFF/FX L profile.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffFXBase
perCMtoPerInch, satisfiesClass
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
getMimeClass, getText, isAlreadyOK, satisfiesBackgroundColorIndicator, satisfiesBackgroundColorIndicator, satisfiesCompression, satisfiesCompression, satisfiesDotRange, satisfiesFillOrder, satisfiesImageColorIndicator, satisfiesImageColorIndicator, satisfiesImageWidth, satisfiesIndexed, satisfiesNewSubfileType, satisfiesNewSubfileType, satisfiesOrientation, satisfiesOrientation, satisfiesPhotometricInterpretation, satisfiesPhotometricInterpretation, satisfiesPlanarConfiguration, satisfiesPlanarConfiguration, satisfiesProfile, satisfiesResolutionUnit, satisfiesResolutionUnit, satisfiesSamplesPerPixel, satisfiesSamplesPerPixel, satisfiesXResolution, satisfiesYResolution, setAlreadyOK
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

TiffProfileFXL

public TiffProfileFXL()
Constructor.

Method Detail

satisfiesThisProfile

public boolean satisfiesThisProfile(IFD ifd)
Returns true if the IFD satisfies the requirements of a TIFF/FX L profile. See the TIFF/FX specification for details.

Specified by:
satisfiesThisProfile in class TiffProfile


jhove/doc/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileFXM.html0000644000707400001440000005152611510702357024426 0ustar garyusers TiffProfileFXM (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.tiff
Class TiffProfileFXM

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
      extended by edu.harvard.hul.ois.jhove.module.tiff.TiffFXBase
          extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfileFXM

public class TiffProfileFXM
extends TiffFXBase

Profile checker for TIFF FX, Profile M (Mixed Raster Content). Image data content is not checked for profile conformance. Only tags are checked.

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffFXBase
GLOBALPARAMETERSIFD, STRIPROWCOUNTS
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
_mimeClass, _profileText, MIME_1314, MIME_FX, MIME_GENERIC
 
Constructor Summary
TiffProfileFXM()
          Constructor.
 
Method Summary
 boolean satisfiesThisProfile(IFD ifd)
          Returns true if the IFD satisfies the requirements of a TIFF/FX M profile.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffFXBase
perCMtoPerInch, satisfiesClass
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
getMimeClass, getText, isAlreadyOK, satisfiesBackgroundColorIndicator, satisfiesBackgroundColorIndicator, satisfiesCompression, satisfiesCompression, satisfiesDotRange, satisfiesFillOrder, satisfiesImageColorIndicator, satisfiesImageColorIndicator, satisfiesImageWidth, satisfiesIndexed, satisfiesNewSubfileType, satisfiesNewSubfileType, satisfiesOrientation, satisfiesOrientation, satisfiesPhotometricInterpretation, satisfiesPhotometricInterpretation, satisfiesPlanarConfiguration, satisfiesPlanarConfiguration, satisfiesProfile, satisfiesResolutionUnit, satisfiesResolutionUnit, satisfiesSamplesPerPixel, satisfiesSamplesPerPixel, satisfiesXResolution, satisfiesYResolution, setAlreadyOK
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

TiffProfileFXM

public TiffProfileFXM()
Constructor.

Method Detail

satisfiesThisProfile

public boolean satisfiesThisProfile(IFD ifd)
Returns true if the IFD satisfies the requirements of a TIFF/FX M profile. See the TIFF/FX specification for details. Proper validation should check if the subIFDs are appropriate to the M profile layer scheme. However, the existing design of the TIFF module has almost no understanding of IFD hierarchies. This could be an enhancement for a future release.

Specified by:
satisfiesThisProfile in class TiffProfile


jhove/doc/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileFXS.html0000644000707400001440000005111011510702357024421 0ustar garyusers TiffProfileFXS (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.tiff
Class TiffProfileFXS

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
      extended by edu.harvard.hul.ois.jhove.module.tiff.TiffFXBase
          extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfileFXS

public class TiffProfileFXS
extends TiffFXBase

Profile checker for TIFF FX, Profile S. Image data content is not checked for profile conformance. Only tags are checked.

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffFXBase
GLOBALPARAMETERSIFD, STRIPROWCOUNTS
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
_mimeClass, _profileText, MIME_1314, MIME_FX, MIME_GENERIC
 
Constructor Summary
TiffProfileFXS()
          Constructor.
 
Method Summary
 boolean satisfiesThisProfile(IFD ifd)
          Returns true if the IFD satisfies the requirements of a TIFF/FX S profile.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffFXBase
perCMtoPerInch, satisfiesClass
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
getMimeClass, getText, isAlreadyOK, satisfiesBackgroundColorIndicator, satisfiesBackgroundColorIndicator, satisfiesCompression, satisfiesCompression, satisfiesDotRange, satisfiesFillOrder, satisfiesImageColorIndicator, satisfiesImageColorIndicator, satisfiesImageWidth, satisfiesIndexed, satisfiesNewSubfileType, satisfiesNewSubfileType, satisfiesOrientation, satisfiesOrientation, satisfiesPhotometricInterpretation, satisfiesPhotometricInterpretation, satisfiesPlanarConfiguration, satisfiesPlanarConfiguration, satisfiesProfile, satisfiesResolutionUnit, satisfiesResolutionUnit, satisfiesSamplesPerPixel, satisfiesSamplesPerPixel, satisfiesXResolution, satisfiesYResolution, setAlreadyOK
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

TiffProfileFXS

public TiffProfileFXS()
Constructor.

Method Detail

satisfiesThisProfile

public boolean satisfiesThisProfile(IFD ifd)
Returns true if the IFD satisfies the requirements of a TIFF/FX S profile. See the TIFF/FX specification for details.

Specified by:
satisfiesThisProfile in class TiffProfile


jhove/doc/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileGeoTIFF.html0000644000707400001440000004506311510702357025156 0ustar garyusers TiffProfileGeoTIFF (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.tiff
Class TiffProfileGeoTIFF

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
      extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfileGeoTIFF

public final class TiffProfileGeoTIFF
extends TiffProfile

Profile checker for GeoTIFF.


Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
_mimeClass, _profileText, MIME_1314, MIME_FX, MIME_GENERIC
 
Constructor Summary
TiffProfileGeoTIFF()
           
 
Method Summary
 boolean satisfiesThisProfile(IFD ifd)
          Returns true if the IFD satisfies the requirements of the the profile.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
getMimeClass, getText, isAlreadyOK, satisfiesBackgroundColorIndicator, satisfiesBackgroundColorIndicator, satisfiesCompression, satisfiesCompression, satisfiesDotRange, satisfiesFillOrder, satisfiesImageColorIndicator, satisfiesImageColorIndicator, satisfiesImageWidth, satisfiesIndexed, satisfiesNewSubfileType, satisfiesNewSubfileType, satisfiesOrientation, satisfiesOrientation, satisfiesPhotometricInterpretation, satisfiesPhotometricInterpretation, satisfiesPlanarConfiguration, satisfiesPlanarConfiguration, satisfiesProfile, satisfiesResolutionUnit, satisfiesResolutionUnit, satisfiesSamplesPerPixel, satisfiesSamplesPerPixel, satisfiesXResolution, satisfiesYResolution, setAlreadyOK
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

TiffProfileGeoTIFF

public TiffProfileGeoTIFF()
Method Detail

satisfiesThisProfile

public boolean satisfiesThisProfile(IFD ifd)
Returns true if the IFD satisfies the requirements of the the profile. See the GeoTIFF specification for details.

Specified by:
satisfiesThisProfile in class TiffProfile


jhove/doc/edu/harvard/hul/ois/jhove/module/tiff/TiffProfilePagemaker6.html0000644000707400001440000004515611510702357025760 0ustar garyusers TiffProfilePagemaker6 (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.tiff
Class TiffProfilePagemaker6

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
      extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfilePagemaker6

public final class TiffProfilePagemaker6
extends TiffProfile

Profile checker for TIFF Pagemaker 6.0.


Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
_mimeClass, _profileText, MIME_1314, MIME_FX, MIME_GENERIC
 
Constructor Summary
TiffProfilePagemaker6()
           
 
Method Summary
 boolean satisfiesThisProfile(IFD ifd)
          Returns true if the IFD satisfies the requirements of the profile.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
getMimeClass, getText, isAlreadyOK, satisfiesBackgroundColorIndicator, satisfiesBackgroundColorIndicator, satisfiesCompression, satisfiesCompression, satisfiesDotRange, satisfiesFillOrder, satisfiesImageColorIndicator, satisfiesImageColorIndicator, satisfiesImageWidth, satisfiesIndexed, satisfiesNewSubfileType, satisfiesNewSubfileType, satisfiesOrientation, satisfiesOrientation, satisfiesPhotometricInterpretation, satisfiesPhotometricInterpretation, satisfiesPlanarConfiguration, satisfiesPlanarConfiguration, satisfiesProfile, satisfiesResolutionUnit, satisfiesResolutionUnit, satisfiesSamplesPerPixel, satisfiesSamplesPerPixel, satisfiesXResolution, satisfiesYResolution, setAlreadyOK
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

TiffProfilePagemaker6

public TiffProfilePagemaker6()
Method Detail

satisfiesThisProfile

public boolean satisfiesThisProfile(IFD ifd)
Returns true if the IFD satisfies the requirements of the profile. See the PageMaker specification for details.

Specified by:
satisfiesThisProfile in class TiffProfile


jhove/doc/edu/harvard/hul/ois/jhove/module/tiff/TiffProfilePhotoshop.html0000644000707400001440000004513411510702357025755 0ustar garyusers TiffProfilePhotoshop (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.tiff
Class TiffProfilePhotoshop

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
      extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfilePhotoshop

public final class TiffProfilePhotoshop
extends TiffProfile

Profile checker for TIFF Photoshop.


Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
_mimeClass, _profileText, MIME_1314, MIME_FX, MIME_GENERIC
 
Constructor Summary
TiffProfilePhotoshop()
           
 
Method Summary
 boolean satisfiesThisProfile(IFD ifd)
          Returns true if the IFD satisfies the requirements of the profile.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
getMimeClass, getText, isAlreadyOK, satisfiesBackgroundColorIndicator, satisfiesBackgroundColorIndicator, satisfiesCompression, satisfiesCompression, satisfiesDotRange, satisfiesFillOrder, satisfiesImageColorIndicator, satisfiesImageColorIndicator, satisfiesImageWidth, satisfiesIndexed, satisfiesNewSubfileType, satisfiesNewSubfileType, satisfiesOrientation, satisfiesOrientation, satisfiesPhotometricInterpretation, satisfiesPhotometricInterpretation, satisfiesPlanarConfiguration, satisfiesPlanarConfiguration, satisfiesProfile, satisfiesResolutionUnit, satisfiesResolutionUnit, satisfiesSamplesPerPixel, satisfiesSamplesPerPixel, satisfiesXResolution, satisfiesYResolution, setAlreadyOK
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

TiffProfilePhotoshop

public TiffProfilePhotoshop()
Method Detail

satisfiesThisProfile

public boolean satisfiesThisProfile(IFD ifd)
Returns true if the IFD satisfies the requirements of the profile. See the Photoshop specification for details.

Specified by:
satisfiesThisProfile in class TiffProfile


jhove/doc/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileRFC1314.html0000644000707400001440000004512711510702357024717 0ustar garyusers TiffProfileRFC1314 (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.tiff
Class TiffProfileRFC1314

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
      extended by edu.harvard.hul.ois.jhove.module.tiff.TiffProfileRFC1314

public final class TiffProfileRFC1314
extends TiffProfile

Profile checker for TIFF RFC 1314.

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
_mimeClass, _profileText, MIME_1314, MIME_FX, MIME_GENERIC
 
Constructor Summary
TiffProfileRFC1314()
           
 
Method Summary
 boolean satisfiesThisProfile(IFD ifd)
          Returns true if the IFD satisfies the requirements of the profile.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
getMimeClass, getText, isAlreadyOK, satisfiesBackgroundColorIndicator, satisfiesBackgroundColorIndicator, satisfiesCompression, satisfiesCompression, satisfiesDotRange, satisfiesFillOrder, satisfiesImageColorIndicator, satisfiesImageColorIndicator, satisfiesImageWidth, satisfiesIndexed, satisfiesNewSubfileType, satisfiesNewSubfileType, satisfiesOrientation, satisfiesOrientation, satisfiesPhotometricInterpretation, satisfiesPhotometricInterpretation, satisfiesPlanarConfiguration, satisfiesPlanarConfiguration, satisfiesProfile, satisfiesResolutionUnit, satisfiesResolutionUnit, satisfiesSamplesPerPixel, satisfiesSamplesPerPixel, satisfiesXResolution, satisfiesYResolution, setAlreadyOK
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

TiffProfileRFC1314

public TiffProfileRFC1314()
Method Detail

satisfiesThisProfile

public boolean satisfiesThisProfile(IFD ifd)
Returns true if the IFD satisfies the requirements of the profile. See the documentation for details.

Specified by:
satisfiesThisProfile in class TiffProfile


jhove/doc/edu/harvard/hul/ois/jhove/module/tiff/TiffTags.html0000644000707400001440000002071711510702357023347 0ustar garyusers TiffTags (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.tiff
Class TiffTags

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.tiff.TiffTags

public class TiffTags
extends java.lang.Object

A class for enumerating TIFF tag numbers and labels, and associating one with the other. This class is never instantiated; all its methods and data are static.


Method Summary
static java.lang.String tagName(int tag)
          Return tag name by number.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Method Detail

tagName

public static java.lang.String tagName(int tag)
Return tag name by number.



jhove/doc/edu/harvard/hul/ois/jhove/module/tiff/package-frame.html0000644000707400001440000002172411510702366024322 0ustar garyusers edu.harvard.hul.ois.jhove.module.tiff (JHOVE Documentation) edu.harvard.hul.ois.jhove.module.tiff
Classes 
ExifIFD
GeoTiffStrings
GlobalParametersIFD
GPSInfoIFD
IFD
InteroperabilityIFD
TiffFXBase
TiffIFD
TiffProfile
TiffProfileClassB
TiffProfileClassF
TiffProfileClassG
TiffProfileClassIT
TiffProfileClassITBL
TiffProfileClassITBLP1
TiffProfileClassITBP
TiffProfileClassITBPP1
TiffProfileClassITBPP2
TiffProfileClassITCT
TiffProfileClassITCTP1
TiffProfileClassITCTP2
TiffProfileClassITFP
TiffProfileClassITFPP1
TiffProfileClassITFPP2
TiffProfileClassITHC
TiffProfileClassITHCP1
TiffProfileClassITHCP2
TiffProfileClassITLW
TiffProfileClassITLWP1
TiffProfileClassITLWP2
TiffProfileClassITMP
TiffProfileClassITMPP1
TiffProfileClassITMPP2
TiffProfileClassITSD
TiffProfileClassITSDP2
TiffProfileClassP
TiffProfileClassR
TiffProfileClassY
TiffProfileDLF
TiffProfileDLFBW
TiffProfileDLFColor
TiffProfileDLFGray
TiffProfileDNG
TiffProfileDNGThumb
TiffProfileEP
TiffProfileExif
TiffProfileExifIFD
TiffProfileExifThumb
TiffProfileFXC
TiffProfileFXF
TiffProfileFXJ
TiffProfileFXL
TiffProfileFXM
TiffProfileFXS
TiffProfileGeoTIFF
TiffProfilePagemaker6
TiffProfilePhotoshop
TiffProfileRFC1314
TiffTags
Exceptions 
TiffException
jhove/doc/edu/harvard/hul/ois/jhove/module/tiff/package-summary.html0000644000707400001440000006107511510702366024730 0ustar garyusers edu.harvard.hul.ois.jhove.module.tiff (JHOVE Documentation)

Package edu.harvard.hul.ois.jhove.module.tiff

Contains supporting classes for the TIFF-HUL module.

See:
          Description

Class Summary
ExifIFD Encapsulation of a Exif IFD
GeoTiffStrings This class contains indexed string arrays for the various keys that are used by GeoTIFF.
GlobalParametersIFD Encapsulation of a GlobalParameters IFD, as defined by TIFF/FX, RFC 2301.
GPSInfoIFD Encapsulation of a GPSInfo IFD (for TIFF/EP and Exif).
IFD Encapsulation of a TIFF image file directory (IFD).
InteroperabilityIFD Encapsulation of an Exif Interoperability IFD (for Exif).
TiffFXBase Base class for all profiles under TIFF/FX.
TiffIFD Encapsulation of standard TIFF IFD.
TiffProfile Abstract class for TIFF profile checkers.
TiffProfileClassB Profile checker for TIFF Class B (Baseline Bilevel).
TiffProfileClassF Profile checker for TIFF Class F.
TiffProfileClassG Profile checker for TIFF Class G (Baseline Grayscale).
TiffProfileClassIT Abstract superclass for Tiff Profile Checkers Tiff IP/whatever.
TiffProfileClassITBL Profile checker for TIFF Class IT-BL.
TiffProfileClassITBLP1 Profile checker for TIFF Class IT-BL/P1.
TiffProfileClassITBP Profile checker for TIFF Class IT-BP.
TiffProfileClassITBPP1 Profile checker for TIFF Class IT-BP/P1.
TiffProfileClassITBPP2 Profile checker for TIFF Class IT-BP/P2.
TiffProfileClassITCT Profile checker for TIFF Class IT-CT.
TiffProfileClassITCTP1 Profile checker for TIFF Class IT-CT/P1.
TiffProfileClassITCTP2 Profile checker for TIFF Class IT-CT/P2.
TiffProfileClassITFP Profile checker for TIFF Class IT-FP.
TiffProfileClassITFPP1 Profile checker for TIFF Class IT-FP/P1.
TiffProfileClassITFPP2 Profile checker for TIFF Class IT-FP/P2.
TiffProfileClassITHC Profile checker for TIFF Class IT-HC.
TiffProfileClassITHCP1 Profile checker for TIFF Class IT-HC/P1.
TiffProfileClassITHCP2 Profile checker for TIFF Class IT-HC/P2.
TiffProfileClassITLW Profile checker for TIFF Class IT-LW.
TiffProfileClassITLWP1 Profile checker for TIFF Class IT-LW/P1.
TiffProfileClassITLWP2 Profile checker for TIFF Class IT-LW/P2.
TiffProfileClassITMP Profile checker for TIFF Class IT-MP.
TiffProfileClassITMPP1 Profile checker for TIFF Class IT-MP/P1.
TiffProfileClassITMPP2 Profile checker for TIFF Class IT-MP/P2.
TiffProfileClassITSD Profile checker for TIFF Class IT-SD.
TiffProfileClassITSDP2 Profile checker for TIFF Class IT-SD/P2.
TiffProfileClassP Profile checker for TIFF Class P (Baseline Palette color).
TiffProfileClassR Profile checker for TIFF Class R (Baseline Palette color).
TiffProfileClassY Profile checker for TIFF Class Y (Baseline YCbCr).
TiffProfileDLF Abstract superclass for the profile checkers for TIFF/DLF
TiffProfileDLFBW Profile checker for TIFF DLF Benchmark for Faithful Digital Reproductions of Monographs and Serials: black and white.
TiffProfileDLFColor Profile checker for TIFF DLF Benchmark for Faithful Digital Reproductions of Monographs and Serials: color.
TiffProfileDLFGray Profile checker for TIFF DLF Benchmark for Faithful Digital Reproductions of Monographs and Serials: grayscale.
TiffProfileDNG Profile checker for the DNG raw IFD.
TiffProfileDNGThumb IFD 0 of a DNG document must satisfy this profile.
TiffProfileEP Profile checker for TIFF/EP.
TiffProfileExif Profile checker for Exif.
TiffProfileExifIFD Profile checker for the Exif IFD of a TIFF file which potentially matches the TIFF profile.
TiffProfileExifThumb Profile checker for the thumbnail IFD of a TIFF file potentially meeting the TIFF profile.
TiffProfileFXC Profile checker for TIFF FX, Profile C (Baseline Color).
TiffProfileFXF Profile checker for TIFF FX, Profile F, aka TIFF-F.
TiffProfileFXJ Profile checker for TIFF FX, Profile J (lossless JBIG).
TiffProfileFXL Profile checker for TIFF FX, Profile L (Lossless Color).
TiffProfileFXM Profile checker for TIFF FX, Profile M (Mixed Raster Content).
TiffProfileFXS Profile checker for TIFF FX, Profile S.
TiffProfileGeoTIFF Profile checker for GeoTIFF.
TiffProfilePagemaker6 Profile checker for TIFF Pagemaker 6.0.
TiffProfilePhotoshop Profile checker for TIFF Photoshop.
TiffProfileRFC1314 Profile checker for TIFF RFC 1314.
TiffTags A class for enumerating TIFF tag numbers and labels, and associating one with the other.
 

Exception Summary
TiffException Exception subclass used internally by the TIFF module.
 

Package edu.harvard.hul.ois.jhove.module.tiff Description

Contains supporting classes for the TIFF-HUL module.



jhove/doc/edu/harvard/hul/ois/jhove/module/tiff/package-tree.html0000644000707400001440000004723711510702366024176 0ustar garyusers edu.harvard.hul.ois.jhove.module.tiff Class Hierarchy (JHOVE Documentation)

Hierarchy For Package edu.harvard.hul.ois.jhove.module.tiff

Package Hierarchies:
All Packages

Class Hierarchy



jhove/doc/edu/harvard/hul/ois/jhove/module/wave/0000755000707400001440000000000011510702011020740 5ustar garyusersjhove/doc/edu/harvard/hul/ois/jhove/module/wave/AXMLChunk.html0000644000707400001440000003515111510702357023402 0ustar garyusers AXMLChunk (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.wave
Class AXMLChunk

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.iff.Chunk
      extended by edu.harvard.hul.ois.jhove.module.wave.AXMLChunk

public class AXMLChunk
extends Chunk

Implementation of the WAVE AXML Chunk, which contains arbitrary XML metadata, as specified in Specification of the Broadcast Wave Format: A format for audio data files in broadcasting; Supplement 5: <axml> Chunk (European Broadcasting Union)

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.iff.Chunk
_dstream, _module, bytesLeft
 
Constructor Summary
AXMLChunk(ModuleBase module, ChunkHeader hdr, java.io.DataInputStream dstrm)
          Constructor.
 
Method Summary
 boolean readChunk(RepInfo info)
          Reads a chunk and puts a BroadcastAudioExtension Property into the RepInfo object.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.iff.Chunk
byteBufString
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

AXMLChunk

public AXMLChunk(ModuleBase module,
                 ChunkHeader hdr,
                 java.io.DataInputStream dstrm)
Constructor.

Parameters:
module - The WaveModule under which this was called
hdr - The header for this chunk
dstrm - The stream from which the WAVE data are being read
Method Detail

readChunk

public boolean readChunk(RepInfo info)
                  throws java.io.IOException
Reads a chunk and puts a BroadcastAudioExtension Property into the RepInfo object.

Specified by:
readChunk in class Chunk
Parameters:
info - RepInfo object to receive information
Returns:
false if the chunk is structurally invalid, otherwise true
Throws:
java.io.IOException


jhove/doc/edu/harvard/hul/ois/jhove/module/wave/AssocDataListChunk.html0000644000707400001440000003747211510702357025347 0ustar garyusers AssocDataListChunk (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.wave
Class AssocDataListChunk

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.iff.Chunk
      extended by edu.harvard.hul.ois.jhove.module.iff.Superchunk
          extended by edu.harvard.hul.ois.jhove.module.wave.AssocDataListChunk

public class AssocDataListChunk
extends Superchunk

The associated data list ('list') chunk, which is different from the RIFF 'LIST' chunk, ListInfoTextChunk. It can contain several different types of informational chunks.

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.iff.Chunk
_dstream, _module, bytesLeft
 
Constructor Summary
AssocDataListChunk(ModuleBase module, ChunkHeader hdr, java.io.DataInputStream dstrm, RepInfo info)
          Constructor.
 
Method Summary
 boolean readChunk(RepInfo info)
          Reads the chunk and its nested chunks, and puts appropriate properties into the RepInfo object.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.iff.Superchunk
getNextChunkHeader
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.iff.Chunk
byteBufString
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

AssocDataListChunk

public AssocDataListChunk(ModuleBase module,
                          ChunkHeader hdr,
                          java.io.DataInputStream dstrm,
                          RepInfo info)
Constructor.

Parameters:
module - The WaveModule under which this was called
hdr - The header for this chunk
dstrm - The stream from which the WAVE data are being read
info - RepInfo object for error reporting
Method Detail

readChunk

public boolean readChunk(RepInfo info)
                  throws java.io.IOException
Reads the chunk and its nested chunks, and puts appropriate properties into the RepInfo object.

Specified by:
readChunk in class Chunk
Parameters:
info - RepInfo object to receive information
Returns:
false if the chunk or a nested chunk is structurally invalid, otherwise true
Throws:
java.io.IOException


jhove/doc/edu/harvard/hul/ois/jhove/module/wave/BroadcastExtChunk.html0000644000707400001440000003503111510702357025221 0ustar garyusers BroadcastExtChunk (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.wave
Class BroadcastExtChunk

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.iff.Chunk
      extended by edu.harvard.hul.ois.jhove.module.wave.BroadcastExtChunk

public class BroadcastExtChunk
extends Chunk

Implementation of the WAVE Broadcast Audio Extension Chunk.

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.iff.Chunk
_dstream, _module, bytesLeft
 
Constructor Summary
BroadcastExtChunk(ModuleBase module, ChunkHeader hdr, java.io.DataInputStream dstrm)
          Constructor.
 
Method Summary
 boolean readChunk(RepInfo info)
          Reads a chunk and puts a BroadcastAudioExtension Property into the RepInfo object.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.iff.Chunk
byteBufString
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

BroadcastExtChunk

public BroadcastExtChunk(ModuleBase module,
                         ChunkHeader hdr,
                         java.io.DataInputStream dstrm)
Constructor.

Parameters:
module - The WaveModule under which this was called
hdr - The header for this chunk
dstrm - The stream from which the WAVE data are being read
Method Detail

readChunk

public boolean readChunk(RepInfo info)
                  throws java.io.IOException
Reads a chunk and puts a BroadcastAudioExtension Property into the RepInfo object.

Specified by:
readChunk in class Chunk
Parameters:
info - RepInfo object to receive information
Returns:
false if the chunk is structurally invalid, otherwise true
Throws:
java.io.IOException


jhove/doc/edu/harvard/hul/ois/jhove/module/wave/CartChunk.html0000644000707400001440000003451411510702357023534 0ustar garyusers CartChunk (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.wave
Class CartChunk

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.iff.Chunk
      extended by edu.harvard.hul.ois.jhove.module.wave.CartChunk

public class CartChunk
extends Chunk

Implementation of the WAVE Cart Chunk.

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.iff.Chunk
_dstream, _module, bytesLeft
 
Constructor Summary
CartChunk(ModuleBase module, ChunkHeader hdr, java.io.DataInputStream dstrm)
          Constructor.
 
Method Summary
 boolean readChunk(RepInfo info)
          Reads a chunk and puts a Cart Property into the RepInfo object.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.iff.Chunk
byteBufString
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

CartChunk

public CartChunk(ModuleBase module,
                 ChunkHeader hdr,
                 java.io.DataInputStream dstrm)
Constructor.

Parameters:
module - The WaveModule under which this was called
hdr - The header for this chunk
dstrm - The stream from which the WAVE data are being read
Method Detail

readChunk

public boolean readChunk(RepInfo info)
                  throws java.io.IOException
Reads a chunk and puts a Cart Property into the RepInfo object.

Specified by:
readChunk in class Chunk
Parameters:
info - RepInfo object to receive information
Returns:
false if the chunk is structurally invalid, otherwise true
Throws:
java.io.IOException


jhove/doc/edu/harvard/hul/ois/jhove/module/wave/CueChunk.html0000644000707400001440000003452511510702357023361 0ustar garyusers CueChunk (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.wave
Class CueChunk

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.iff.Chunk
      extended by edu.harvard.hul.ois.jhove.module.wave.CueChunk

public class CueChunk
extends Chunk

Implementation of the WAVE Cue chunk, which defines cue points in an audio stream.

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.iff.Chunk
_dstream, _module, bytesLeft
 
Constructor Summary
CueChunk(ModuleBase module, ChunkHeader hdr, java.io.DataInputStream dstrm)
          Constructor.
 
Method Summary
 boolean readChunk(RepInfo info)
          Reads a chunk and puts a Cue property into the RepInfo object.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.iff.Chunk
byteBufString
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

CueChunk

public CueChunk(ModuleBase module,
                ChunkHeader hdr,
                java.io.DataInputStream dstrm)
Constructor.

Parameters:
module - The WaveModule under which this was called
hdr - The header for this chunk
dstrm - The stream from which the WAVE data are being read
Method Detail

readChunk

public boolean readChunk(RepInfo info)
                  throws java.io.IOException
Reads a chunk and puts a Cue property into the RepInfo object.

Specified by:
readChunk in class Chunk
Parameters:
info - RepInfo object to receive information
Returns:
false if the chunk is structurally invalid, otherwise true
Throws:
java.io.IOException


jhove/doc/edu/harvard/hul/ois/jhove/module/wave/DataChunk.html0000644000707400001440000003472311510702357023516 0ustar garyusers DataChunk (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.wave
Class DataChunk

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.iff.Chunk
      extended by edu.harvard.hul.ois.jhove.module.wave.DataChunk

public class DataChunk
extends Chunk

Implementation of the WAVE Data Chunk. Data Chunks may occur either at the top level (i.e., under the RIFF chunk) or under a data list chunk. There can be only one top-level Data Chunk.

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.iff.Chunk
_dstream, _module, bytesLeft
 
Constructor Summary
DataChunk(ModuleBase module, ChunkHeader hdr, java.io.DataInputStream dstrm)
          Constructor.
 
Method Summary
 boolean readChunk(RepInfo info)
          Reads a chunk and puts a Data property into the RepInfo object.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.iff.Chunk
byteBufString
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

DataChunk

public DataChunk(ModuleBase module,
                 ChunkHeader hdr,
                 java.io.DataInputStream dstrm)
Constructor.

Parameters:
module - The WaveModule under which this was called
hdr - The header for this chunk
dstrm - The stream from which the WAVE data are being read
Method Detail

readChunk

public boolean readChunk(RepInfo info)
                  throws java.io.IOException
Reads a chunk and puts a Data property into the RepInfo object.

Specified by:
readChunk in class Chunk
Parameters:
info - RepInfo object to receive information
Returns:
false if the chunk is structurally invalid, otherwise true
Throws:
java.io.IOException


jhove/doc/edu/harvard/hul/ois/jhove/module/wave/ExifInfo.html0000644000707400001440000003615511510702357023364 0ustar garyusers ExifInfo (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.wave
Class ExifInfo

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.wave.ExifInfo

public class ExifInfo
extends java.lang.Object

Encapsulation of Exif information for a Wave file. Exif sound information doesn't closely follow Exif image information, so we don't particularly try to force property names to match.

Author:
Gary McGath
See Also:
ExifIFD

Constructor Summary
ExifInfo()
           
 
Method Summary
 Property buildProperty()
          Constructs a property and returns it.
protected  void setExifVersion(java.lang.String version)
          Converts the raw 4-byte array into a version string and stores it.
protected  void setMakerNote(byte[] note)
          Sets the maker note.
protected  void setManufacturer(java.lang.String file)
          Sets the manufacturer of the equipment that produced the file.
protected  void setModel(java.lang.String file)
          Sets the model of the equipment that produced the file.
protected  void setRelatedImageFile(java.lang.String file)
          Sets the related image file name.
protected  void setTimeCreated(java.lang.String time)
          Sets the creation time as an ASCII string.
protected  void setUserComment(java.lang.String comment)
          Sets the user comment.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ExifInfo

public ExifInfo()
Method Detail

buildProperty

public Property buildProperty()
Constructs a property and returns it.


setExifVersion

protected void setExifVersion(java.lang.String version)
Converts the raw 4-byte array into a version string and stores it.


setRelatedImageFile

protected void setRelatedImageFile(java.lang.String file)
Sets the related image file name.


setTimeCreated

protected void setTimeCreated(java.lang.String time)
Sets the creation time as an ASCII string.


setManufacturer

protected void setManufacturer(java.lang.String file)
Sets the manufacturer of the equipment that produced the file.


setModel

protected void setModel(java.lang.String file)
Sets the model of the equipment that produced the file.


setMakerNote

protected void setMakerNote(byte[] note)
Sets the maker note.


setUserComment

protected void setUserComment(java.lang.String comment)
Sets the user comment.



jhove/doc/edu/harvard/hul/ois/jhove/module/wave/ExifMakerNoteChunk.html0000644000707400001440000003517211510702357025345 0ustar garyusers ExifMakerNoteChunk (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.wave
Class ExifMakerNoteChunk

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.iff.Chunk
      extended by edu.harvard.hul.ois.jhove.module.wave.ExifMakerNoteChunk

public class ExifMakerNoteChunk
extends Chunk

This class encapsulates the Exif Maker Note chunk. The format of this is manufacturer-depedent, hence is regarded simply as an array of integers.

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.iff.Chunk
_dstream, _module, bytesLeft
 
Constructor Summary
ExifMakerNoteChunk(ModuleBase module, ChunkHeader hdr, java.io.DataInputStream dstrm)
          Constructor.
 
Method Summary
 boolean readChunk(RepInfo info)
          Reads a chunk and puts information into the superchunk's Exif property.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.iff.Chunk
byteBufString
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ExifMakerNoteChunk

public ExifMakerNoteChunk(ModuleBase module,
                          ChunkHeader hdr,
                          java.io.DataInputStream dstrm)
Constructor.

Parameters:
module - The WaveModule under which this was called
hdr - The header for this chunk
dstrm - The stream from which the WAVE data are being read
Method Detail

readChunk

public boolean readChunk(RepInfo info)
                  throws java.io.IOException
Reads a chunk and puts information into the superchunk's Exif property.

Specified by:
readChunk in class Chunk
Parameters:
info - RepInfo object to receive information
Returns:
false if the chunk is structurally invalid, otherwise true
Throws:
java.io.IOException


jhove/doc/edu/harvard/hul/ois/jhove/module/wave/ExifStringChunk.html0000644000707400001440000003504611510702357024726 0ustar garyusers ExifStringChunk (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.wave
Class ExifStringChunk

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.iff.Chunk
      extended by edu.harvard.hul.ois.jhove.module.wave.ExifStringChunk

public class ExifStringChunk
extends Chunk

Class for encapsulating Exif chunks whose content consists of a null-terminated ASCII string.

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.iff.Chunk
_dstream, _module, bytesLeft
 
Constructor Summary
ExifStringChunk(ModuleBase module, ChunkHeader hdr, java.io.DataInputStream dstrm)
          Constructor.
 
Method Summary
 boolean readChunk(RepInfo info)
          Reads a chunk and puts information into the superchunk's Exif property.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.iff.Chunk
byteBufString
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ExifStringChunk

public ExifStringChunk(ModuleBase module,
                       ChunkHeader hdr,
                       java.io.DataInputStream dstrm)
Constructor.

Parameters:
module - The WaveModule under which this was called
hdr - The header for this chunk
dstrm - The stream from which the WAVE data are being read
Method Detail

readChunk

public boolean readChunk(RepInfo info)
                  throws java.io.IOException
Reads a chunk and puts information into the superchunk's Exif property.

Specified by:
readChunk in class Chunk
Parameters:
info - RepInfo object to receive information
Returns:
false if the chunk is structurally invalid, otherwise true
Throws:
java.io.IOException


jhove/doc/edu/harvard/hul/ois/jhove/module/wave/ExifUserCommentChunk.html0000644000707400001440000003512211510702357025714 0ustar garyusers ExifUserCommentChunk (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.wave
Class ExifUserCommentChunk

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.iff.Chunk
      extended by edu.harvard.hul.ois.jhove.module.wave.ExifUserCommentChunk

public class ExifUserCommentChunk
extends Chunk

This class encapsulates the Exif User Comment chunk.

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.iff.Chunk
_dstream, _module, bytesLeft
 
Constructor Summary
ExifUserCommentChunk(ModuleBase module, ChunkHeader hdr, java.io.DataInputStream dstrm)
          Constructor.
 
Method Summary
 boolean readChunk(RepInfo info)
          Reads a chunk and puts information into the superchunk's Exif property.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.iff.Chunk
byteBufString
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ExifUserCommentChunk

public ExifUserCommentChunk(ModuleBase module,
                            ChunkHeader hdr,
                            java.io.DataInputStream dstrm)
Constructor.

Parameters:
module - The WaveModule under which this was called
hdr - The header for this chunk
dstrm - The stream from which the WAVE data are being read
Method Detail

readChunk

public boolean readChunk(RepInfo info)
                  throws java.io.IOException
Reads a chunk and puts information into the superchunk's Exif property.

Specified by:
readChunk in class Chunk
Parameters:
info - RepInfo object to receive information
Returns:
false if the chunk is structurally invalid, otherwise true
Throws:
java.io.IOException


jhove/doc/edu/harvard/hul/ois/jhove/module/wave/ExifVersionChunk.html0000644000707400001440000003505511510702357025105 0ustar garyusers ExifVersionChunk (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.wave
Class ExifVersionChunk

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.iff.Chunk
      extended by edu.harvard.hul.ois.jhove.module.wave.ExifVersionChunk

public class ExifVersionChunk
extends Chunk

Chunk for Exif version information. This chunk may occur only within a LIST chunk of type "exif".

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.iff.Chunk
_dstream, _module, bytesLeft
 
Constructor Summary
ExifVersionChunk(ModuleBase module, ChunkHeader hdr, java.io.DataInputStream dstrm)
          Constructor.
 
Method Summary
 boolean readChunk(RepInfo info)
          Reads a chunk and puts information into the superchunk's Exif property.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.iff.Chunk
byteBufString
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ExifVersionChunk

public ExifVersionChunk(ModuleBase module,
                        ChunkHeader hdr,
                        java.io.DataInputStream dstrm)
Constructor.

Parameters:
module - The WaveModule under which this was called
hdr - The header for this chunk
dstrm - The stream from which the WAVE data are being read
Method Detail

readChunk

public boolean readChunk(RepInfo info)
                  throws java.io.IOException
Reads a chunk and puts information into the superchunk's Exif property.

Specified by:
readChunk in class Chunk
Parameters:
info - RepInfo object to receive information
Returns:
false if the chunk is structurally invalid, otherwise true
Throws:
java.io.IOException


jhove/doc/edu/harvard/hul/ois/jhove/module/wave/FactChunk.html0000644000707400001440000003463211510702357023521 0ustar garyusers FactChunk (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.wave
Class FactChunk

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.iff.Chunk
      extended by edu.harvard.hul.ois.jhove.module.wave.FactChunk

public class FactChunk
extends Chunk

Implementation of the WAVE Fact Chunk. The Fact chunk contains information specific to the compression scheme.

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.iff.Chunk
_dstream, _module, bytesLeft
 
Constructor Summary
FactChunk(ModuleBase module, ChunkHeader hdr, java.io.DataInputStream dstrm)
          Constructor.
 
Method Summary
 boolean readChunk(RepInfo info)
          Reads a chunk and puts a Fact Property into the RepInfo object.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.iff.Chunk
byteBufString
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

FactChunk

public FactChunk(ModuleBase module,
                 ChunkHeader hdr,
                 java.io.DataInputStream dstrm)
Constructor.

Parameters:
module - The WaveModule under which this was called
hdr - The header for this chunk
dstrm - The stream from which the WAVE data are being read
Method Detail

readChunk

public boolean readChunk(RepInfo info)
                  throws java.io.IOException
Reads a chunk and puts a Fact Property into the RepInfo object.

Specified by:
readChunk in class Chunk
Parameters:
info - RepInfo object to receive information
Returns:
false if the chunk is structurally invalid, otherwise true
Throws:
java.io.IOException


jhove/doc/edu/harvard/hul/ois/jhove/module/wave/FormatChunk.html0000644000707400001440000004173711510702357024100 0ustar garyusers FormatChunk (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.wave
Class FormatChunk

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.iff.Chunk
      extended by edu.harvard.hul.ois.jhove.module.wave.FormatChunk

public class FormatChunk
extends Chunk

Implementation of the WAVE Format Chunk.

Author:
Gary McGath

Field Summary
static int WAVE_FORMAT_EXTENSIBLE
          Compression code for Microsoft Extensible Wave Format
static int WAVE_FORMAT_MPEG
          Compression code for MPEG
static int WAVE_FORMAT_PCM
          Compression code for original Microsoft PCM
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.iff.Chunk
_dstream, _module, bytesLeft
 
Constructor Summary
FormatChunk(WaveModule module, ChunkHeader hdr, java.io.DataInputStream dstrm)
          Constructor.
 
Method Summary
 boolean readChunk(RepInfo info)
          Reads a chunk and puts appropriate Properties into the RepInfo object.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.iff.Chunk
byteBufString
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

WAVE_FORMAT_PCM

public static final int WAVE_FORMAT_PCM
Compression code for original Microsoft PCM

See Also:
Constant Field Values

WAVE_FORMAT_MPEG

public static final int WAVE_FORMAT_MPEG
Compression code for MPEG

See Also:
Constant Field Values

WAVE_FORMAT_EXTENSIBLE

public static final int WAVE_FORMAT_EXTENSIBLE
Compression code for Microsoft Extensible Wave Format

See Also:
Constant Field Values
Constructor Detail

FormatChunk

public FormatChunk(WaveModule module,
                   ChunkHeader hdr,
                   java.io.DataInputStream dstrm)
Constructor.

Parameters:
module - The WaveModule under which this was called
hdr - The header for this chunk
dstrm - The stream from which the WAVE data are being read
Method Detail

readChunk

public boolean readChunk(RepInfo info)
                  throws java.io.IOException
Reads a chunk and puts appropriate Properties into the RepInfo object.

Specified by:
readChunk in class Chunk
Parameters:
info - RepInfo object to receive information
Returns:
false if the chunk is structurally invalid, otherwise true
Throws:
java.io.IOException


jhove/doc/edu/harvard/hul/ois/jhove/module/wave/InstrumentChunk.html0000644000707400001440000003513011510702357025006 0ustar garyusers InstrumentChunk (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.wave
Class InstrumentChunk

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.iff.Chunk
      extended by edu.harvard.hul.ois.jhove.module.wave.InstrumentChunk

public class InstrumentChunk
extends Chunk

Implementation of the WAVE Instrument Chunk, which gives information about a MIDI instrument. Similar to the Sample chunk or the AIFF Instrument chunk, but simpler than either.

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.iff.Chunk
_dstream, _module, bytesLeft
 
Constructor Summary
InstrumentChunk(ModuleBase module, ChunkHeader hdr, java.io.DataInputStream dstrm)
          Constructor.
 
Method Summary
 boolean readChunk(RepInfo info)
          Reads a chunk and puts an Instrument property into the RepInfo object.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.iff.Chunk
byteBufString
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

InstrumentChunk

public InstrumentChunk(ModuleBase module,
                       ChunkHeader hdr,
                       java.io.DataInputStream dstrm)
Constructor.

Parameters:
module - The WaveModule under which this was called
hdr - The header for this chunk
dstrm - The stream from which the WAVE data are being read
Method Detail

readChunk

public boolean readChunk(RepInfo info)
                  throws java.io.IOException
Reads a chunk and puts an Instrument property into the RepInfo object.

Specified by:
readChunk in class Chunk
Parameters:
info - RepInfo object to receive information
Returns:
false if the chunk is structurally invalid, otherwise true
Throws:
java.io.IOException


jhove/doc/edu/harvard/hul/ois/jhove/module/wave/LabelChunk.html0000644000707400001440000003661411510702357023665 0ustar garyusers LabelChunk (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.wave
Class LabelChunk

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.iff.Chunk
      extended by edu.harvard.hul.ois.jhove.module.wave.SimpleTextChunk
          extended by edu.harvard.hul.ois.jhove.module.wave.LabelChunk

public class LabelChunk
extends SimpleTextChunk

Implementation of the WAVE Label Chunk.

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.iff.Chunk
_dstream, _module, bytesLeft
 
Constructor Summary
LabelChunk(ModuleBase module, ChunkHeader hdr, java.io.DataInputStream dstrm)
          Constructor.
 
Method Summary
 boolean readChunk(RepInfo info)
          Reads a chunk and adds to the module's list of labels.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.wave.SimpleTextChunk
readTextProp
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.iff.Chunk
byteBufString
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

LabelChunk

public LabelChunk(ModuleBase module,
                  ChunkHeader hdr,
                  java.io.DataInputStream dstrm)
Constructor.

Parameters:
module - The WaveModule under which this was called
hdr - The header for this chunk
dstrm - The stream from which the WAVE data are being read
Method Detail

readChunk

public boolean readChunk(RepInfo info)
                  throws java.io.IOException
Reads a chunk and adds to the module's list of labels.

Specified by:
readChunk in class Chunk
Parameters:
info - RepInfo object to receive information
Returns:
false if the chunk is structurally invalid, otherwise true
Throws:
java.io.IOException


jhove/doc/edu/harvard/hul/ois/jhove/module/wave/LinkChunk.html0000644000707400001440000003507311510702357023541 0ustar garyusers LinkChunk (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.wave
Class LinkChunk

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.iff.Chunk
      extended by edu.harvard.hul.ois.jhove.module.wave.LinkChunk

public class LinkChunk
extends Chunk

Implementation of the WAVE Link Chunk, as specified in Specification of the Broadcast Wave Format: A format for audio data files in broadcasting; Supplement 4: <link> Chunk (European Broadcasting Union)

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.iff.Chunk
_dstream, _module, bytesLeft
 
Constructor Summary
LinkChunk(ModuleBase module, ChunkHeader hdr, java.io.DataInputStream dstrm)
          Constructor.
 
Method Summary
 boolean readChunk(RepInfo info)
          Reads a chunk and puts a BroadcastAudioExtension Property into the RepInfo object.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.iff.Chunk
byteBufString
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

LinkChunk

public LinkChunk(ModuleBase module,
                 ChunkHeader hdr,
                 java.io.DataInputStream dstrm)
Constructor.

Parameters:
module - The WaveModule under which this was called
hdr - The header for this chunk
dstrm - The stream from which the WAVE data are being read
Method Detail

readChunk

public boolean readChunk(RepInfo info)
                  throws java.io.IOException
Reads a chunk and puts a BroadcastAudioExtension Property into the RepInfo object.

Specified by:
readChunk in class Chunk
Parameters:
info - RepInfo object to receive information
Returns:
false if the chunk is structurally invalid, otherwise true
Throws:
java.io.IOException


jhove/doc/edu/harvard/hul/ois/jhove/module/wave/LabeledTextChunk.html0000644000707400001440000003476211510702357025045 0ustar garyusers LabeledTextChunk (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.wave
Class LabeledTextChunk

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.iff.Chunk
      extended by edu.harvard.hul.ois.jhove.module.wave.LabeledTextChunk

public class LabeledTextChunk
extends Chunk

The Labelled Text Chunk, which can occur only in an Associated Data List.

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.iff.Chunk
_dstream, _module, bytesLeft
 
Constructor Summary
LabeledTextChunk(ModuleBase module, ChunkHeader hdr, java.io.DataInputStream dstrm)
          Constructor.
 
Method Summary
 boolean readChunk(RepInfo info)
          Reads a chunk and puts an MPEG Property into the RepInfo object.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.iff.Chunk
byteBufString
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

LabeledTextChunk

public LabeledTextChunk(ModuleBase module,
                        ChunkHeader hdr,
                        java.io.DataInputStream dstrm)
Constructor.

Parameters:
module - The WaveModule under which this was called
hdr - The header for this chunk
dstrm - The stream from which the WAVE data are being read
Method Detail

readChunk

public boolean readChunk(RepInfo info)
                  throws java.io.IOException
Reads a chunk and puts an MPEG Property into the RepInfo object.

Specified by:
readChunk in class Chunk
Parameters:
info - RepInfo object to receive information
Returns:
false if the chunk is structurally invalid, otherwise true
Throws:
java.io.IOException


jhove/doc/edu/harvard/hul/ois/jhove/module/wave/LinkChunkHandler.html0000644000707400001440000003675411510702357025046 0ustar garyusers LinkChunkHandler (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.wave
Class LinkChunkHandler

java.lang.Object
  extended by org.xml.sax.helpers.DefaultHandler
      extended by edu.harvard.hul.ois.jhove.module.wave.LinkChunkHandler
All Implemented Interfaces:
org.xml.sax.ContentHandler, org.xml.sax.DTDHandler, org.xml.sax.EntityResolver, org.xml.sax.ErrorHandler

public class LinkChunkHandler
extends org.xml.sax.helpers.DefaultHandler

This handler parses the data of a WAVE List chunk.

Author:
Gary McGath

Constructor Summary
LinkChunkHandler()
           
 
Method Summary
 void characters(char[] ch, int start, int length)
          SAX parser callback method for PC text.
 void endElement(java.lang.String namespaceURI, java.lang.String localName, java.lang.String rawName)
          SAX parser callback method.
 java.util.List getFileNames()
          Accessor for getting file name list.
 java.lang.String getID()
          Accessor for getting the ID element.
 void startElement(java.lang.String namespaceURI, java.lang.String localName, java.lang.String qualifiedName, org.xml.sax.Attributes atts)
          Looks for the first element encountered.
 
Methods inherited from class org.xml.sax.helpers.DefaultHandler
endDocument, endPrefixMapping, error, fatalError, ignorableWhitespace, notationDecl, processingInstruction, resolveEntity, setDocumentLocator, skippedEntity, startDocument, startPrefixMapping, unparsedEntityDecl, warning
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

LinkChunkHandler

public LinkChunkHandler()
Method Detail

getFileNames

public java.util.List getFileNames()
Accessor for getting file name list. The value returned is meaningful only after parsing. The value returned is guaranteed not to be null, but may be empty.


getID

public java.lang.String getID()
Accessor for getting the ID element. The value returned may be null, as the ID element is optional.


startElement

public void startElement(java.lang.String namespaceURI,
                         java.lang.String localName,
                         java.lang.String qualifiedName,
                         org.xml.sax.Attributes atts)
                  throws org.xml.sax.SAXException
Looks for the first element encountered. Stores its name as the value to be returned by getRoot, qualified name by preference, local name if the qualified name isn't available.

Specified by:
startElement in interface org.xml.sax.ContentHandler
Overrides:
startElement in class org.xml.sax.helpers.DefaultHandler
Throws:
org.xml.sax.SAXException

characters

public void characters(char[] ch,
                       int start,
                       int length)
                throws org.xml.sax.SAXException
SAX parser callback method for PC text.

Specified by:
characters in interface org.xml.sax.ContentHandler
Overrides:
characters in class org.xml.sax.helpers.DefaultHandler
Throws:
org.xml.sax.SAXException

endElement

public void endElement(java.lang.String namespaceURI,
                       java.lang.String localName,
                       java.lang.String rawName)
                throws org.xml.sax.SAXException
SAX parser callback method.

Specified by:
endElement in interface org.xml.sax.ContentHandler
Overrides:
endElement in class org.xml.sax.helpers.DefaultHandler
Throws:
org.xml.sax.SAXException


jhove/doc/edu/harvard/hul/ois/jhove/module/wave/ListInfoChunk.html0000644000707400001440000004233411510702357024371 0ustar garyusers ListInfoChunk (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.wave
Class ListInfoChunk

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.iff.Chunk
      extended by edu.harvard.hul.ois.jhove.module.iff.Superchunk
          extended by edu.harvard.hul.ois.jhove.module.wave.ListInfoChunk

public class ListInfoChunk
extends Superchunk

Implementation of the WAVE LIST chunk. Two chunk types, 'exif' and 'INFO', are supported; other list types will be reported as unknown and treated as an error.

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.iff.Chunk
_dstream, _module, bytesLeft
 
Constructor Summary
ListInfoChunk(ModuleBase module, ChunkHeader hdr, java.io.DataInputStream dstrm, RepInfo info)
          Constructor.
 
Method Summary
 boolean readAdtlChunk(RepInfo info)
          Reads the chunk and its nested chunks, and puts appropriate properties into the RepInfo object.
 boolean readChunk(RepInfo info)
          Reads a chunk and puts appropriate information into the RepInfo object.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.iff.Superchunk
getNextChunkHeader
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.iff.Chunk
byteBufString
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ListInfoChunk

public ListInfoChunk(ModuleBase module,
                     ChunkHeader hdr,
                     java.io.DataInputStream dstrm,
                     RepInfo info)
Constructor.

Parameters:
module - The WaveModule under which this was called
hdr - The header for this chunk
dstrm - The stream from which the WAVE data are being read
info - RepInfo object for error reporting
Method Detail

readChunk

public boolean readChunk(RepInfo info)
                  throws java.io.IOException
Reads a chunk and puts appropriate information into the RepInfo object.

Specified by:
readChunk in class Chunk
Parameters:
info - RepInfo object to receive information
Returns:
false if the chunk is structurally invalid, otherwise true
Throws:
java.io.IOException

readAdtlChunk

public boolean readAdtlChunk(RepInfo info)
                      throws java.io.IOException
Reads the chunk and its nested chunks, and puts appropriate properties into the RepInfo object.

Returns:
false if the chunk or a nested chunk is structurally invalid, otherwise true
Throws:
java.io.IOException


jhove/doc/edu/harvard/hul/ois/jhove/module/wave/ListInfoTextChunk.html0000644000707400001440000003663311510702357025243 0ustar garyusers ListInfoTextChunk (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.wave
Class ListInfoTextChunk

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.iff.Chunk
      extended by edu.harvard.hul.ois.jhove.module.wave.ListInfoTextChunk

public class ListInfoTextChunk
extends Chunk

This implements any of the subchunks of the ListInfoChunk (a LIST chunk with a list type of INFO). All such chunks are identical in format, consisting of a null-terminated string. About 17 chunk ID's are recognized; others will be ignored.

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.iff.Chunk
_dstream, _module, bytesLeft
 
Constructor Summary
ListInfoTextChunk(ModuleBase module, ChunkHeader hdr, java.io.DataInputStream dstrm, java.util.List listInfoProps, ListInfoChunk parent)
          Constructor.
 
Method Summary
 boolean readChunk(RepInfo info)
          Reads a chunk and.....
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.iff.Chunk
byteBufString
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ListInfoTextChunk

public ListInfoTextChunk(ModuleBase module,
                         ChunkHeader hdr,
                         java.io.DataInputStream dstrm,
                         java.util.List listInfoProps,
                         ListInfoChunk parent)
Constructor.

Parameters:
module - The WaveModule under which this was called
hdr - The header for this chunk
dstrm - The stream from which the WAVE data are being read
listInfoProps - A List of the Properties associated with the ListInfoChunk
parent - The ListInfoChunk within which this Chunk occurs
Method Detail

readChunk

public boolean readChunk(RepInfo info)
                  throws java.io.IOException
Reads a chunk and.....

Specified by:
readChunk in class Chunk
Parameters:
info - RepInfo object to receive information
Returns:
false if the chunk is structurally invalid, otherwise true
Throws:
java.io.IOException


jhove/doc/edu/harvard/hul/ois/jhove/module/wave/MpegChunk.html0000644000707400001440000003454011510702357023532 0ustar garyusers MpegChunk (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.wave
Class MpegChunk

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.iff.Chunk
      extended by edu.harvard.hul.ois.jhove.module.wave.MpegChunk

public class MpegChunk
extends Chunk

Implementation of the WAVE MPEG Audio Extension Chunk.

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.iff.Chunk
_dstream, _module, bytesLeft
 
Constructor Summary
MpegChunk(ModuleBase module, ChunkHeader hdr, java.io.DataInputStream dstrm)
          Constructor.
 
Method Summary
 boolean readChunk(RepInfo info)
          Reads a chunk and puts an MPEG Property into the RepInfo object.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.iff.Chunk
byteBufString
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

MpegChunk

public MpegChunk(ModuleBase module,
                 ChunkHeader hdr,
                 java.io.DataInputStream dstrm)
Constructor.

Parameters:
module - The WaveModule under which this was called
hdr - The header for this chunk
dstrm - The stream from which the WAVE data are being read
Method Detail

readChunk

public boolean readChunk(RepInfo info)
                  throws java.io.IOException
Reads a chunk and puts an MPEG Property into the RepInfo object.

Specified by:
readChunk in class Chunk
Parameters:
info - RepInfo object to receive information
Returns:
false if the chunk is structurally invalid, otherwise true
Throws:
java.io.IOException


jhove/doc/edu/harvard/hul/ois/jhove/module/wave/NoteChunk.html0000644000707400001440000003655311510702357023555 0ustar garyusers NoteChunk (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.wave
Class NoteChunk

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.iff.Chunk
      extended by edu.harvard.hul.ois.jhove.module.wave.SimpleTextChunk
          extended by edu.harvard.hul.ois.jhove.module.wave.NoteChunk

public class NoteChunk
extends SimpleTextChunk

Implementation of the WAVE Note Chunk.

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.iff.Chunk
_dstream, _module, bytesLeft
 
Constructor Summary
NoteChunk(ModuleBase module, ChunkHeader hdr, java.io.DataInputStream dstrm)
          Constructor.
 
Method Summary
 boolean readChunk(RepInfo info)
          Reads a chunk and adds to the module's list of Notes.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.wave.SimpleTextChunk
readTextProp
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.iff.Chunk
byteBufString
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

NoteChunk

public NoteChunk(ModuleBase module,
                 ChunkHeader hdr,
                 java.io.DataInputStream dstrm)
Constructor.

Parameters:
module - The WaveModule under which this was called
hdr - The header for this chunk
dstrm - The stream from which the WAVE data are being read
Method Detail

readChunk

public boolean readChunk(RepInfo info)
                  throws java.io.IOException
Reads a chunk and adds to the module's list of Notes.

Specified by:
readChunk in class Chunk
Parameters:
info - RepInfo object to receive information
Returns:
false if the chunk is structurally invalid, otherwise true
Throws:
java.io.IOException


jhove/doc/edu/harvard/hul/ois/jhove/module/wave/PeakEnvelopeChunk.html0000644000707400001440000003503211510702357025215 0ustar garyusers PeakEnvelopeChunk (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.wave
Class PeakEnvelopeChunk

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.iff.Chunk
      extended by edu.harvard.hul.ois.jhove.module.wave.PeakEnvelopeChunk

public class PeakEnvelopeChunk
extends Chunk

Implementation of the WAVE Peak Envelope ('levl') Chunk.

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.iff.Chunk
_dstream, _module, bytesLeft
 
Constructor Summary
PeakEnvelopeChunk(ModuleBase module, ChunkHeader hdr, java.io.DataInputStream dstrm)
          Constructor.
 
Method Summary
 boolean readChunk(RepInfo info)
          Reads a chunk and puts a BroadcastAudioExtension Property into the RepInfo object.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.iff.Chunk
byteBufString
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

PeakEnvelopeChunk

public PeakEnvelopeChunk(ModuleBase module,
                         ChunkHeader hdr,
                         java.io.DataInputStream dstrm)
Constructor.

Parameters:
module - The WaveModule under which this was called
hdr - The header for this chunk
dstrm - The stream from which the WAVE data are being read
Method Detail

readChunk

public boolean readChunk(RepInfo info)
                  throws java.io.IOException
Reads a chunk and puts a BroadcastAudioExtension Property into the RepInfo object.

Specified by:
readChunk in class Chunk
Parameters:
info - RepInfo object to receive information
Returns:
false if the chunk is structurally invalid, otherwise true
Throws:
java.io.IOException


jhove/doc/edu/harvard/hul/ois/jhove/module/wave/SampleChunk.html0000644000707400001440000003530411510702357024062 0ustar garyusers SampleChunk (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.wave
Class SampleChunk

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.iff.Chunk
      extended by edu.harvard.hul.ois.jhove.module.wave.SampleChunk

public class SampleChunk
extends Chunk

Implementation of the WAVE Sample (or Sampler) Chunk, which gives information about a MIDI sample.

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.iff.Chunk
_dstream, _module, bytesLeft
 
Constructor Summary
SampleChunk(ModuleBase module, ChunkHeader hdr, java.io.DataInputStream dstrm)
          Constructor.
 
Method Summary
 boolean readChunk(RepInfo info)
          Reads a chunk and puts a Sample property into the RepInfo object.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.iff.Chunk
byteBufString
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

SampleChunk

public SampleChunk(ModuleBase module,
                   ChunkHeader hdr,
                   java.io.DataInputStream dstrm)
Constructor.

Parameters:
module - The WaveModule under which this was called
hdr - The header for this chunk
dstrm - The stream from which the WAVE data are being read
Method Detail

readChunk

public boolean readChunk(RepInfo info)
                  throws java.io.IOException
Reads a chunk and puts a Sample property into the RepInfo object. It isn't clear whether multiple Sample chunks are allowed (representing different sound samples for different notes or note ranges). This module assumes they are, so it constructs a Samples property, consisting of a list of Sample properties.

Specified by:
readChunk in class Chunk
Parameters:
info - RepInfo object to receive information
Returns:
false if the chunk is structurally invalid, otherwise true
Throws:
java.io.IOException


jhove/doc/edu/harvard/hul/ois/jhove/module/wave/SimpleTextChunk.html0000644000707400001440000003564411510702357024746 0ustar garyusers SimpleTextChunk (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.wave
Class SimpleTextChunk

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.iff.Chunk
      extended by edu.harvard.hul.ois.jhove.module.wave.SimpleTextChunk
Direct Known Subclasses:
LabelChunk, NoteChunk

public abstract class SimpleTextChunk
extends Chunk

Superclass for the very similar Note and Label chunks.

Author:
Gary McGath

Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.module.iff.Chunk
_dstream, _module, bytesLeft
 
Constructor Summary
SimpleTextChunk(ModuleBase module, ChunkHeader hdr, java.io.DataInputStream dstrm)
          Constructor.
 
Method Summary
protected  Property readTextProp(WaveModule module, java.lang.String propName)
          Reads the text item, and returns a Property containing the cue point ID and the text.
 
Methods inherited from class edu.harvard.hul.ois.jhove.module.iff.Chunk
byteBufString, readChunk
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

SimpleTextChunk

public SimpleTextChunk(ModuleBase module,
                       ChunkHeader hdr,
                       java.io.DataInputStream dstrm)
Constructor.

Parameters:
module - The WaveModule under which this was called
hdr - The header for this chunk
dstrm - The stream from which the WAVE data are being read
Method Detail

readTextProp

protected Property readTextProp(WaveModule module,
                                java.lang.String propName)
                         throws java.io.IOException
Reads the text item, and returns a Property containing the cue point ID and the text.

Throws:
java.io.IOException


jhove/doc/edu/harvard/hul/ois/jhove/module/wave/WaveStrings.html0000644000707400001440000003274011510702357024125 0ustar garyusers WaveStrings (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.wave
Class WaveStrings

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.wave.WaveStrings

public class WaveStrings
extends java.lang.Object

A class for holding arrays of informative strings that will go into properties of a WAVE object.

Author:
Gary McGath

Field Summary
static java.lang.String[] ANCILLARY_DEF_0
          Flags for ancillary data definition in the MPEG chunk, "0" values
static java.lang.String[] ANCILLARY_DEF_1
          Flags for ancillary data definition in the MPEG chunk, "1" values
static java.lang.String[] COMPRESSION_FORMAT
          Strings for data compression formats; indexed by COMPRESSION_INDEX
static int[] COMPRESSION_INDEX
           
static java.lang.String[] SMPTE_FORMAT
          Strings for SMPTE formats in the Sample Chunk
static int[] SMPTE_FORMAT_INDEX
          Indices for SMPTE formats in the Sample Chunk
static java.lang.String[] SOUND_INFORMATION_0
          Flags for SoundInformation bits in the MPEG chunk, "0" values
static java.lang.String[] SOUND_INFORMATION_1
          Flags for SoundInformation bits in the MPEG chunk, "1" values
 
Method Summary
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

COMPRESSION_FORMAT

public static final java.lang.String[] COMPRESSION_FORMAT
Strings for data compression formats; indexed by COMPRESSION_INDEX


COMPRESSION_INDEX

public static final int[] COMPRESSION_INDEX

SMPTE_FORMAT

public static final java.lang.String[] SMPTE_FORMAT
Strings for SMPTE formats in the Sample Chunk


SMPTE_FORMAT_INDEX

public static final int[] SMPTE_FORMAT_INDEX
Indices for SMPTE formats in the Sample Chunk


SOUND_INFORMATION_1

public static final java.lang.String[] SOUND_INFORMATION_1
Flags for SoundInformation bits in the MPEG chunk, "1" values


SOUND_INFORMATION_0

public static final java.lang.String[] SOUND_INFORMATION_0
Flags for SoundInformation bits in the MPEG chunk, "0" values


ANCILLARY_DEF_1

public static final java.lang.String[] ANCILLARY_DEF_1
Flags for ancillary data definition in the MPEG chunk, "1" values


ANCILLARY_DEF_0

public static final java.lang.String[] ANCILLARY_DEF_0
Flags for ancillary data definition in the MPEG chunk, "0" values



jhove/doc/edu/harvard/hul/ois/jhove/module/wave/package-frame.html0000644000707400001440000001007111510702366024325 0ustar garyusers edu.harvard.hul.ois.jhove.module.wave (JHOVE Documentation) edu.harvard.hul.ois.jhove.module.wave
Classes 
AssocDataListChunk
AXMLChunk
BroadcastExtChunk
CartChunk
CueChunk
DataChunk
ExifInfo
ExifMakerNoteChunk
ExifStringChunk
ExifUserCommentChunk
ExifVersionChunk
FactChunk
FormatChunk
InstrumentChunk
LabelChunk
LabeledTextChunk
LinkChunk
LinkChunkHandler
ListInfoChunk
ListInfoTextChunk
MpegChunk
NoteChunk
PeakEnvelopeChunk
SampleChunk
SimpleTextChunk
WaveStrings
jhove/doc/edu/harvard/hul/ois/jhove/module/wave/package-summary.html0000644000707400001440000003510511510702366024735 0ustar garyusers edu.harvard.hul.ois.jhove.module.wave (JHOVE Documentation)

Package edu.harvard.hul.ois.jhove.module.wave

Contains supporting classes for the WAVE-HUL module.

See:
          Description

Class Summary
AssocDataListChunk The associated data list ('list') chunk, which is different from the RIFF 'LIST' chunk, ListInfoTextChunk.
AXMLChunk Implementation of the WAVE AXML Chunk, which contains arbitrary XML metadata, as specified in Specification of the Broadcast Wave Format: A format for audio data files in broadcasting; Supplement 5: <axml> Chunk (European Broadcasting Union)
BroadcastExtChunk Implementation of the WAVE Broadcast Audio Extension Chunk.
CartChunk Implementation of the WAVE Cart Chunk.
CueChunk Implementation of the WAVE Cue chunk, which defines cue points in an audio stream.
DataChunk Implementation of the WAVE Data Chunk.
ExifInfo Encapsulation of Exif information for a Wave file.
ExifMakerNoteChunk This class encapsulates the Exif Maker Note chunk.
ExifStringChunk Class for encapsulating Exif chunks whose content consists of a null-terminated ASCII string.
ExifUserCommentChunk This class encapsulates the Exif User Comment chunk.
ExifVersionChunk Chunk for Exif version information.
FactChunk Implementation of the WAVE Fact Chunk.
FormatChunk Implementation of the WAVE Format Chunk.
InstrumentChunk Implementation of the WAVE Instrument Chunk, which gives information about a MIDI instrument.
LabelChunk Implementation of the WAVE Label Chunk.
LabeledTextChunk The Labelled Text Chunk, which can occur only in an Associated Data List.
LinkChunk Implementation of the WAVE Link Chunk, as specified in Specification of the Broadcast Wave Format: A format for audio data files in broadcasting; Supplement 4: <link> Chunk (European Broadcasting Union)
LinkChunkHandler This handler parses the data of a WAVE List chunk.
ListInfoChunk Implementation of the WAVE LIST chunk.
ListInfoTextChunk This implements any of the subchunks of the ListInfoChunk (a LIST chunk with a list type of INFO).
MpegChunk Implementation of the WAVE MPEG Audio Extension Chunk.
NoteChunk Implementation of the WAVE Note Chunk.
PeakEnvelopeChunk Implementation of the WAVE Peak Envelope ('levl') Chunk.
SampleChunk Implementation of the WAVE Sample (or Sampler) Chunk, which gives information about a MIDI sample.
SimpleTextChunk Superclass for the very similar Note and Label chunks.
WaveStrings A class for holding arrays of informative strings that will go into properties of a WAVE object.
 

Package edu.harvard.hul.ois.jhove.module.wave Description

Contains supporting classes for the WAVE-HUL module.



jhove/doc/edu/harvard/hul/ois/jhove/module/wave/package-tree.html0000644000707400001440000003027211510702366024177 0ustar garyusers edu.harvard.hul.ois.jhove.module.wave Class Hierarchy (JHOVE Documentation)

Hierarchy For Package edu.harvard.hul.ois.jhove.module.wave

Package Hierarchies:
All Packages

Class Hierarchy



jhove/doc/edu/harvard/hul/ois/jhove/module/xml/0000755000707400001440000000000011510702011020576 5ustar garyusersjhove/doc/edu/harvard/hul/ois/jhove/module/xml/XhtmlProcessing.html0000644000707400001440000002552711510702357024645 0ustar garyusers XhtmlProcessing (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.xml
Class XhtmlProcessing

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.xml.XhtmlProcessing

public final class XhtmlProcessing
extends java.lang.Object

Methods for processing XHTML elements in an XML document. These are closely related in functionality to corresponding methods in the XML module.

Author:
Gary McGath
See Also:
HtmlDocDesc

Constructor Summary
XhtmlProcessing()
           
 
Method Summary
protected static void processElement(java.lang.String localName, java.lang.String qualifiedName, org.xml.sax.Attributes atts, HtmlMetadata mdata)
          Process the element to extract any available metadata.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

XhtmlProcessing

public XhtmlProcessing()
Method Detail

processElement

protected static void processElement(java.lang.String localName,
                                     java.lang.String qualifiedName,
                                     org.xml.sax.Attributes atts,
                                     HtmlMetadata mdata)
Process the element to extract any available metadata.



jhove/doc/edu/harvard/hul/ois/jhove/module/xml/XmlDeclHandler.html0000644000707400001440000004077211510702357024341 0ustar garyusers XmlDeclHandler (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.xml
Class XmlDeclHandler

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.xml.XmlDeclHandler
All Implemented Interfaces:
org.xml.sax.ext.DeclHandler

public class XmlDeclHandler
extends java.lang.Object
implements org.xml.sax.ext.DeclHandler

This implementation of DeclHandler takes care of collecting entity declarations.

Author:
Gary McGath

Constructor Summary
XmlDeclHandler()
           
 
Method Summary
 void attributeDecl(java.lang.String arg0, java.lang.String arg1, java.lang.String arg2, java.lang.String arg3, java.lang.String arg4)
          Report an attribute type declaration.
 void elementDecl(java.lang.String arg0, java.lang.String arg1)
          Report an element type declaration.
 void externalEntityDecl(java.lang.String name, java.lang.String publicID, java.lang.String systemID)
          Adds external entity declarations to the entity declarations list in the form of a String[3], with element 0 being the name, element 1 the public ID, and 2 the system ID.
 java.util.List getExternalEntityDeclarations()
          Returns list of entity declarations.
 java.util.List getInternalEntityDeclarations()
          Returns list of entity declarations.
 void internalEntityDecl(java.lang.String name, java.lang.String value)
          Adds internal entity declarations to the entity declarations list in the form of a String[2], with element 0 being the name and element 1 being the value.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

XmlDeclHandler

public XmlDeclHandler()
Method Detail

elementDecl

public void elementDecl(java.lang.String arg0,
                        java.lang.String arg1)
                 throws org.xml.sax.SAXException
Report an element type declaration. Does nothing.

Specified by:
elementDecl in interface org.xml.sax.ext.DeclHandler
Throws:
org.xml.sax.SAXException
See Also:
DeclHandler.elementDecl(java.lang.String, java.lang.String)

internalEntityDecl

public void internalEntityDecl(java.lang.String name,
                               java.lang.String value)
                        throws org.xml.sax.SAXException
Adds internal entity declarations to the entity declarations list in the form of a String[2], with element 0 being the name and element 1 being the value.

Specified by:
internalEntityDecl in interface org.xml.sax.ext.DeclHandler
Throws:
org.xml.sax.SAXException

externalEntityDecl

public void externalEntityDecl(java.lang.String name,
                               java.lang.String publicID,
                               java.lang.String systemID)
                        throws org.xml.sax.SAXException
Adds external entity declarations to the entity declarations list in the form of a String[3], with element 0 being the name, element 1 the public ID, and 2 the system ID.

Specified by:
externalEntityDecl in interface org.xml.sax.ext.DeclHandler
Throws:
org.xml.sax.SAXException

attributeDecl

public void attributeDecl(java.lang.String arg0,
                          java.lang.String arg1,
                          java.lang.String arg2,
                          java.lang.String arg3,
                          java.lang.String arg4)
                   throws org.xml.sax.SAXException
Report an attribute type declaration. Does nothing.

Specified by:
attributeDecl in interface org.xml.sax.ext.DeclHandler
Throws:
org.xml.sax.SAXException
See Also:
DeclHandler.attributeDecl(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String)

getInternalEntityDeclarations

public java.util.List getInternalEntityDeclarations()
Returns list of entity declarations. Each list is an array String[2], giving the name and value respectively.


getExternalEntityDeclarations

public java.util.List getExternalEntityDeclarations()
Returns list of entity declarations. Each list is an array String[3], giving the name, public ID, and system ID respectively.



jhove/doc/edu/harvard/hul/ois/jhove/module/xml/XmlDeclStream.html0000644000707400001440000004743011510702357024215 0ustar garyusers XmlDeclStream (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.xml
Class XmlDeclStream

java.lang.Object
  extended by java.io.InputStream
      extended by java.io.FilterInputStream
          extended by edu.harvard.hul.ois.jhove.module.xml.XmlDeclStream
All Implemented Interfaces:
java.io.Closeable

public class XmlDeclStream
extends java.io.FilterInputStream

This class is layered under the InputSource for the XmlModule so that it can detect an XML declaration and character references, which aren't reported by other API's. This is called XmlDeclStream for historical reasons, though it's no longer limited to that function.

Author:
Gary McGath

Field Summary
protected  boolean _lineEndCR
           
protected  boolean _lineEndCRLF
           
protected  boolean _lineEndLF
           
protected  int _prevChar
           
 
Fields inherited from class java.io.FilterInputStream
in
 
Constructor Summary
XmlDeclStream(java.io.InputStream strm)
           
 
Method Summary
protected  void checkLineEnd(int ch)
           
 java.util.List getCharacterReferences()
          Returns the character references as a List of Integers.
 java.lang.String getEncoding()
          Returns the encoding string.
 java.lang.String getKindOfLineEnd()
           
 java.lang.String getStandalone()
          Returns the standalone string.
 java.lang.String getVersion()
          Returns the version string.
 int read()
          Reads the next byte of data from this input stream.
 int read(byte[] b)
          Reads up to byte.length bytes of data from this input stream into an array of bytes.
 int read(byte[] b, int off, int len)
          Reads up to len bytes of data from this input stream into an array of bytes.
 
Methods inherited from class java.io.FilterInputStream
available, close, mark, markSupported, reset, skip
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

_lineEndCR

protected boolean _lineEndCR

_lineEndLF

protected boolean _lineEndLF

_lineEndCRLF

protected boolean _lineEndCRLF

_prevChar

protected int _prevChar
Constructor Detail

XmlDeclStream

public XmlDeclStream(java.io.InputStream strm)
Method Detail

read

public int read()
         throws java.io.IOException
Reads the next byte of data from this input stream. Processes bytes as it reads them.

Overrides:
read in class java.io.FilterInputStream
Throws:
java.io.IOException

read

public int read(byte[] b)
         throws java.io.IOException
Reads up to byte.length bytes of data from this input stream into an array of bytes. Processes bytes as it reads them.

Overrides:
read in class java.io.FilterInputStream
Throws:
java.io.IOException

read

public int read(byte[] b,
                int off,
                int len)
         throws java.io.IOException
Reads up to len bytes of data from this input stream into an array of bytes. Processes bytes as it reads them.

Overrides:
read in class java.io.FilterInputStream
Throws:
java.io.IOException

getCharacterReferences

public java.util.List getCharacterReferences()
Returns the character references as a List of Integers. No sorting or elimination of duplicates is done; this is just all the character references in the order they occurred.


getVersion

public java.lang.String getVersion()
Returns the version string. May be null (though it shouldn't be in well-formed XML).


getEncoding

public java.lang.String getEncoding()
Returns the encoding string. May be null.


getStandalone

public java.lang.String getStandalone()
Returns the standalone string. May be null.


checkLineEnd

protected void checkLineEnd(int ch)

getKindOfLineEnd

public java.lang.String getKindOfLineEnd()


jhove/doc/edu/harvard/hul/ois/jhove/module/xml/XmlLexicalHandler.html0000644000707400001440000004350411510702357025047 0ustar garyusers XmlLexicalHandler (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.xml
Class XmlLexicalHandler

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.module.xml.XmlLexicalHandler
All Implemented Interfaces:
org.xml.sax.ext.LexicalHandler

public class XmlLexicalHandler
extends java.lang.Object
implements org.xml.sax.ext.LexicalHandler

This implementation of LexicalHandler takes care of comments, DTD's, entities and other stuff for XmlModule. The caller has to make sure the LexicalHandler property is supported by the SAX implementation, and set that property to this class.

Author:
Gary McGath

Constructor Summary
XmlLexicalHandler()
           
 
Method Summary
 void comment(char[] text, int start, int length)
          Gathers comments into the comments list.
 void endCDATA()
          Report the end of a CDATA section.
 void endDTD()
          Report the end of DTD declarations.
 void endEntity(java.lang.String name)
          Report the end of an entity.
 java.util.List getComments()
          Returns the value of the comments list, which is a List of Strings.
 java.util.Set getEntityNames()
          Returns the Set of entity names.
 void startCDATA()
          Report the start of a CDATA section.
 void startDTD(java.lang.String arg0, java.lang.String arg1, java.lang.String arg2)
          Report the start of DTD declarations, if any.
 void startEntity(java.lang.String name)
          Accumulates entity names into the entity set.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

XmlLexicalHandler

public XmlLexicalHandler()
Method Detail

endCDATA

public void endCDATA()
              throws org.xml.sax.SAXException
Report the end of a CDATA section. Does nothing.

Specified by:
endCDATA in interface org.xml.sax.ext.LexicalHandler
Throws:
org.xml.sax.SAXException
See Also:
LexicalHandler.endCDATA()

endDTD

public void endDTD()
            throws org.xml.sax.SAXException
Report the end of DTD declarations. Does nothing.

Specified by:
endDTD in interface org.xml.sax.ext.LexicalHandler
Throws:
org.xml.sax.SAXException
See Also:
LexicalHandler.endDTD()

startCDATA

public void startCDATA()
                throws org.xml.sax.SAXException
Report the start of a CDATA section. Does nothing.

Specified by:
startCDATA in interface org.xml.sax.ext.LexicalHandler
Throws:
org.xml.sax.SAXException
See Also:
LexicalHandler.startCDATA()

comment

public void comment(char[] text,
                    int start,
                    int length)
             throws org.xml.sax.SAXException
Gathers comments into the comments list.

Specified by:
comment in interface org.xml.sax.ext.LexicalHandler
Throws:
org.xml.sax.SAXException
See Also:
LexicalHandler.comment(char[], int, int)

startEntity

public void startEntity(java.lang.String name)
                 throws org.xml.sax.SAXException
Accumulates entity names into the entity set. This will be used for determining which entities are actually used.

Specified by:
startEntity in interface org.xml.sax.ext.LexicalHandler
Throws:
org.xml.sax.SAXException
See Also:
LexicalHandler.startEntity(java.lang.String)

endEntity

public void endEntity(java.lang.String name)
               throws org.xml.sax.SAXException
Report the end of an entity. Does nothing.

Specified by:
endEntity in interface org.xml.sax.ext.LexicalHandler
Throws:
org.xml.sax.SAXException
See Also:
LexicalHandler.endEntity(java.lang.String)

startDTD

public void startDTD(java.lang.String arg0,
                     java.lang.String arg1,
                     java.lang.String arg2)
              throws org.xml.sax.SAXException
Report the start of DTD declarations, if any. Does nothing.

Specified by:
startDTD in interface org.xml.sax.ext.LexicalHandler
Throws:
org.xml.sax.SAXException
See Also:
LexicalHandler.startDTD(java.lang.String, java.lang.String, java.lang.String)

getComments

public java.util.List getComments()
Returns the value of the comments list, which is a List of Strings.


getEntityNames

public java.util.Set getEntityNames()
Returns the Set of entity names.



jhove/doc/edu/harvard/hul/ois/jhove/module/xml/XmlModuleHandler.html0000644000707400001440000010006411510702357024706 0ustar garyusers XmlModuleHandler (JHOVE Documentation)

edu.harvard.hul.ois.jhove.module.xml
Class XmlModuleHandler

java.lang.Object
  extended by org.xml.sax.helpers.DefaultHandler
      extended by edu.harvard.hul.ois.jhove.module.xml.XmlModuleHandler
All Implemented Interfaces:
org.xml.sax.ContentHandler, org.xml.sax.DTDHandler, org.xml.sax.EntityResolver, org.xml.sax.ErrorHandler

public class XmlModuleHandler
extends org.xml.sax.helpers.DefaultHandler

This handler does the parsing work of the XML module.

Author:
Gary McGath

Constructor Summary
XmlModuleHandler()
          Constructor.
 
Method Summary
 void characters(char[] ch, int start, int length)
          Processes PCData characters.
 void endElement(java.lang.String namespaceURI, java.lang.String localName, java.lang.String qName)
          The only action taken here is some bookkeeping in connection with the HTML metadata.
 void error(org.xml.sax.SAXParseException e)
          Processes a parsing exception.
 java.util.Set getAttributeValues()
          Returns the set of attribute values.
 java.lang.String getDTDURI()
          Returns the DTD URI.
 HtmlMetadata getHtmlMetadata()
          Returns the HTML metadata object.
 java.util.List getMessages()
          Returns the List of messages generated during the parse.
 java.util.Map getNamespaces()
          Returns the map of prefixes to namespaces.
 java.util.List getNotations()
          Returns the list of notations.
 java.util.List getProcessingInstructions()
          Returns the List of processing instructions.
 java.lang.String getRoot()
          Returns the qualified name of the root element.
 java.util.List getSchemas()
          Returns the list of schemas.
 boolean getSigFlag()
          Returns true if we have seen an element or a processing instruction, which implies that we've seen an XML declaration.
 java.util.List getUnparsedEntities()
          Returns the list of unparsed entities.
 boolean isValid()
          Returns the validity state.
 void notationDecl(java.lang.String name, java.lang.String publicID, java.lang.String systemID)
          Puts all notations into the notation list.
 void processingInstruction(java.lang.String target, java.lang.String data)
          Handles a processing instruction.
 org.xml.sax.InputSource resolveEntity(java.lang.String publicId, java.lang.String systemId)
          Overrides standard resolveEntity.
 void setXhtmlFlag(boolean flag)
          Sets the value of the XHTML flag.
 void startElement(java.lang.String namespaceURI, java.lang.String localName, java.lang.String qualifiedName, org.xml.sax.Attributes atts)
          Looks for the first element encountered.
 void startPrefixMapping(java.lang.String prefix, java.lang.String uri)
          Begin the scope of a prefix-URI Namespace mapping.
 void unparsedEntityDecl(java.lang.String name, java.lang.String publicId, java.lang.String systemId, java.lang.String notationName)
          Picks up unparsed entity declarations, after calling the superclass's unparsedEntityDecl, and puts their information into the unparsed entity declaration list as an array of four strings: [ name, publicId, systemId, notationName].
 void warning(org.xml.sax.SAXParseException e)
          Processes a warning.
 
Methods inherited from class org.xml.sax.helpers.DefaultHandler
endDocument, endPrefixMapping, fatalError, ignorableWhitespace, setDocumentLocator, skippedEntity, startDocument
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

XmlModuleHandler

public XmlModuleHandler()
Constructor.

Method Detail

setXhtmlFlag

public void setXhtmlFlag(boolean flag)
Sets the value of the XHTML flag. Special properties are extracted if this is an XHTML document.


getHtmlMetadata

public HtmlMetadata getHtmlMetadata()
Returns the HTML metadata object. Will be non-null only for a document recognized as XHTML.


startElement

public void startElement(java.lang.String namespaceURI,
                         java.lang.String localName,
                         java.lang.String qualifiedName,
                         org.xml.sax.Attributes atts)
                  throws org.xml.sax.SAXException
Looks for the first element encountered. Stores its name as the value to be returned by getRoot, qualified name by preference, local name if the qualified name isn't available.

Specified by:
startElement in interface org.xml.sax.ContentHandler
Overrides:
startElement in class org.xml.sax.helpers.DefaultHandler
Throws:
org.xml.sax.SAXException

endElement

public void endElement(java.lang.String namespaceURI,
                       java.lang.String localName,
                       java.lang.String qName)
The only action taken here is some bookkeeping in connection with the HTML metadata.

Specified by:
endElement in interface org.xml.sax.ContentHandler
Overrides:
endElement in class org.xml.sax.helpers.DefaultHandler

characters

public void characters(char[] ch,
                       int start,
                       int length)
Processes PCData characters. This does things only in connection with properties under construction in HTML metadata.

Specified by:
characters in interface org.xml.sax.ContentHandler
Overrides:
characters in class org.xml.sax.helpers.DefaultHandler

startPrefixMapping

public void startPrefixMapping(java.lang.String prefix,
                               java.lang.String uri)
                        throws org.xml.sax.SAXException
Begin the scope of a prefix-URI Namespace mapping. Prefixes mappings are stored in _namespaces.

Specified by:
startPrefixMapping in interface org.xml.sax.ContentHandler
Overrides:
startPrefixMapping in class org.xml.sax.helpers.DefaultHandler
Throws:
org.xml.sax.SAXException

processingInstruction

public void processingInstruction(java.lang.String target,
                                  java.lang.String data)
                           throws org.xml.sax.SAXException
Handles a processing instruction. Adds it to the list that will be returned by getProcessingInstructions. Each element of the list is an array of two Strings. Element 0 of the array is the target, and element 1 is the data.

Specified by:
processingInstruction in interface org.xml.sax.ContentHandler
Overrides:
processingInstruction in class org.xml.sax.helpers.DefaultHandler
Throws:
org.xml.sax.SAXException

notationDecl

public void notationDecl(java.lang.String name,
                         java.lang.String publicID,
                         java.lang.String systemID)
                  throws org.xml.sax.SAXException
Puts all notations into the notation list. A list entry is a String[3], consisting of name, public ID, and system ID.

Specified by:
notationDecl in interface org.xml.sax.DTDHandler
Overrides:
notationDecl in class org.xml.sax.helpers.DefaultHandler
Throws:
org.xml.sax.SAXException

resolveEntity

public org.xml.sax.InputSource resolveEntity(java.lang.String publicId,
                                             java.lang.String systemId)
                                      throws org.xml.sax.SAXException
Overrides standard resolveEntity. First looks for DTD and entity files that are stored as resources, and uses those if available. (Faster and more reliable than grabbing them over the Net.) If that fails, calls the superclass's resolveEntity. Regardless, it then looks for anything that appears to be a DTD and puts it in the DTD URI field. If the superclass's attempt to resolve the entity results in an IOException, we just ignore it.

Specified by:
resolveEntity in interface org.xml.sax.EntityResolver
Overrides:
resolveEntity in class org.xml.sax.helpers.DefaultHandler
Throws:
org.xml.sax.SAXException

unparsedEntityDecl

public void unparsedEntityDecl(java.lang.String name,
                               java.lang.String publicId,
                               java.lang.String systemId,
                               java.lang.String notationName)
                        throws org.xml.sax.SAXException
Picks up unparsed entity declarations, after calling the superclass's unparsedEntityDecl, and puts their information into the unparsed entity declaration list as an array of four strings: [ name, publicId, systemId, notationName]. Null values are converted into empty strings.

Specified by:
unparsedEntityDecl in interface org.xml.sax.DTDHandler
Overrides:
unparsedEntityDecl in class org.xml.sax.helpers.DefaultHandler
Throws:
org.xml.sax.SAXException

warning

public void warning(org.xml.sax.SAXParseException e)
Processes a warning. We just add an InfoMessage.

Specified by:
warning in interface org.xml.sax.ErrorHandler
Overrides:
warning in class org.xml.sax.helpers.DefaultHandler

error

public void error(org.xml.sax.SAXParseException e)
Processes a parsing exception. An ill-formed piece of XML will get a fatalError (I think), so we can assume that any error here indicates only invalidity.

Specified by:
error in interface org.xml.sax.ErrorHandler
Overrides:
error in class org.xml.sax.helpers.DefaultHandler

getAttributeValues

public java.util.Set getAttributeValues()
Returns the set of attribute values.


getSchemas

public java.util.List getSchemas()
Returns the list of schemas. The elements of the list are Strings, giving the URI's for the schemas.


getUnparsedEntities

public java.util.List getUnparsedEntities()
Returns the list of unparsed entities. The elements of the list are arrays of four Strings, giving the name, public ID, system ID and notation name respectively.


getNamespaces

public java.util.Map getNamespaces()
Returns the map of prefixes to namespaces. The keys and values are Strings.


getDTDURI

public java.lang.String getDTDURI()
Returns the DTD URI. May be null.


getProcessingInstructions

public java.util.List getProcessingInstructions()
Returns the List of processing instructions. Each element is an array of two strings, giving the target and data respectively.


getNotations

public java.util.List getNotations()
Returns the list of notations. Each is an array String[3]: name, public ID, and system ID.


getRoot

public java.lang.String getRoot()
Returns the qualified name of the root element.


getMessages

public java.util.List getMessages()
Returns the List of messages generated during the parse.


isValid

public boolean isValid()
Returns the validity state. If error has been called, the return value will be false.


getSigFlag

public boolean getSigFlag()
Returns true if we have seen an element or a processing instruction, which implies that we've seen an XML declaration.



jhove/doc/edu/harvard/hul/ois/jhove/module/xml/package-frame.html0000644000707400001440000000274011510702366024167 0ustar garyusers edu.harvard.hul.ois.jhove.module.xml (JHOVE Documentation) edu.harvard.hul.ois.jhove.module.xml
Classes 
XhtmlProcessing
XmlDeclHandler
XmlDeclStream
XmlLexicalHandler
XmlModuleHandler
jhove/doc/edu/harvard/hul/ois/jhove/module/xml/package-summary.html0000644000707400001440000002001711510702366024567 0ustar garyusers edu.harvard.hul.ois.jhove.module.xml (JHOVE Documentation)

Package edu.harvard.hul.ois.jhove.module.xml

Contains supporting classes for the XML-HUL module.

See:
          Description

Class Summary
XhtmlProcessing Methods for processing XHTML elements in an XML document.
XmlDeclHandler This implementation of DeclHandler takes care of collecting entity declarations.
XmlDeclStream This class is layered under the InputSource for the XmlModule so that it can detect an XML declaration and character references, which aren't reported by other API's.
XmlLexicalHandler This implementation of LexicalHandler takes care of comments, DTD's, entities and other stuff for XmlModule.
XmlModuleHandler This handler does the parsing work of the XML module.
 

Package edu.harvard.hul.ois.jhove.module.xml Description

Contains supporting classes for the XML-HUL module.



jhove/doc/edu/harvard/hul/ois/jhove/module/xml/package-tree.html0000644000707400001440000001660711510702366024043 0ustar garyusers edu.harvard.hul.ois.jhove.module.xml Class Hierarchy (JHOVE Documentation)

Hierarchy For Package edu.harvard.hul.ois.jhove.module.xml

Package Hierarchies:
All Packages

Class Hierarchy

  • java.lang.Object
    • org.xml.sax.helpers.DefaultHandler (implements org.xml.sax.ContentHandler, org.xml.sax.DTDHandler, org.xml.sax.EntityResolver, org.xml.sax.ErrorHandler)
    • java.io.InputStream (implements java.io.Closeable)
      • java.io.FilterInputStream
    • edu.harvard.hul.ois.jhove.module.xml.XhtmlProcessing
    • edu.harvard.hul.ois.jhove.module.xml.XmlDeclHandler (implements org.xml.sax.ext.DeclHandler)
    • edu.harvard.hul.ois.jhove.module.xml.XmlLexicalHandler (implements org.xml.sax.ext.LexicalHandler)


jhove/doc/edu/harvard/hul/ois/jhove/viewer/0000755000707400001440000000000011510702012020013 5ustar garyusersjhove/doc/edu/harvard/hul/ois/jhove/viewer/AppInfoWindow.html0000644000707400001440000006263011510702360023442 0ustar garyusers AppInfoWindow (JHOVE Documentation)

edu.harvard.hul.ois.jhove.viewer
Class AppInfoWindow

java.lang.Object
  extended by java.awt.Component
      extended by java.awt.Container
          extended by java.awt.Window
              extended by java.awt.Frame
                  extended by javax.swing.JFrame
                      extended by edu.harvard.hul.ois.jhove.viewer.InfoWindow
                          extended by edu.harvard.hul.ois.jhove.viewer.AppInfoWindow
All Implemented Interfaces:
java.awt.image.ImageObserver, java.awt.MenuContainer, java.io.Serializable, javax.accessibility.Accessible, javax.swing.RootPaneContainer, javax.swing.WindowConstants

public class AppInfoWindow
extends InfoWindow

This window is for presenting information about the JHOVE application.

See Also:
Serialized Form

Nested Class Summary
 
Nested classes/interfaces inherited from class javax.swing.JFrame
javax.swing.JFrame.AccessibleJFrame
 
Nested classes/interfaces inherited from class java.awt.Frame
java.awt.Frame.AccessibleAWTFrame
 
Nested classes/interfaces inherited from class java.awt.Window
java.awt.Window.AccessibleAWTWindow
 
Nested classes/interfaces inherited from class java.awt.Container
java.awt.Container.AccessibleAWTContainer
 
Nested classes/interfaces inherited from class java.awt.Component
java.awt.Component.AccessibleAWTComponent, java.awt.Component.BaselineResizeBehavior, java.awt.Component.BltBufferStrategy, java.awt.Component.FlipBufferStrategy
 
Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.viewer.InfoWindow
_app, _dateFmt, eol
 
Fields inherited from class javax.swing.JFrame
accessibleContext, EXIT_ON_CLOSE, rootPane, rootPaneCheckingEnabled
 
Fields inherited from class java.awt.Frame
CROSSHAIR_CURSOR, DEFAULT_CURSOR, E_RESIZE_CURSOR, HAND_CURSOR, ICONIFIED, MAXIMIZED_BOTH, MAXIMIZED_HORIZ, MAXIMIZED_VERT, MOVE_CURSOR, N_RESIZE_CURSOR, NE_RESIZE_CURSOR, NORMAL, NW_RESIZE_CURSOR, S_RESIZE_CURSOR, SE_RESIZE_CURSOR, SW_RESIZE_CURSOR, TEXT_CURSOR, W_RESIZE_CURSOR, WAIT_CURSOR
 
Fields inherited from class java.awt.Component
BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENT
 
Fields inherited from interface javax.swing.WindowConstants
DISPOSE_ON_CLOSE, DO_NOTHING_ON_CLOSE, HIDE_ON_CLOSE
 
Fields inherited from interface java.awt.image.ImageObserver
ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH
 
Constructor Summary
AppInfoWindow(App app, JhoveBase jbase)
           
 
Method Summary
 
Methods inherited from class edu.harvard.hul.ois.jhove.viewer.InfoWindow
closeFromMenu, doSaveDialog, selectHandler, setSaveActionListener
 
Methods inherited from class javax.swing.JFrame
addImpl, createRootPane, frameInit, getAccessibleContext, getContentPane, getDefaultCloseOperation, getGlassPane, getGraphics, getJMenuBar, getLayeredPane, getRootPane, getTransferHandler, isDefaultLookAndFeelDecorated, isRootPaneCheckingEnabled, paramString, processWindowEvent, remove, repaint, setContentPane, setDefaultCloseOperation, setDefaultLookAndFeelDecorated, setGlassPane, setIconImage, setJMenuBar, setLayeredPane, setLayout, setRootPane, setRootPaneCheckingEnabled, setTransferHandler, update
 
Methods inherited from class java.awt.Frame
addNotify, getCursorType, getExtendedState, getFrames, getIconImage, getMaximizedBounds, getMenuBar, getState, getTitle, isResizable, isUndecorated, remove, removeNotify, setCursor, setExtendedState, setMaximizedBounds, setMenuBar, setResizable, setState, setTitle, setUndecorated
 
Methods inherited from class java.awt.Window
addPropertyChangeListener, addPropertyChangeListener, addWindowFocusListener, addWindowListener, addWindowStateListener, applyResourceBundle, applyResourceBundle, createBufferStrategy, createBufferStrategy, dispose, getBufferStrategy, getFocusableWindowState, getFocusCycleRootAncestor, getFocusOwner, getFocusTraversalKeys, getGraphicsConfiguration, getIconImages, getInputContext, getListeners, getLocale, getModalExclusionType, getMostRecentFocusOwner, getOwnedWindows, getOwner, getOwnerlessWindows, getToolkit, getWarningString, getWindowFocusListeners, getWindowListeners, getWindows, getWindowStateListeners, hide, isActive, isAlwaysOnTop, isAlwaysOnTopSupported, isFocusableWindow, isFocusCycleRoot, isFocused, isLocationByPlatform, isShowing, pack, paint, postEvent, processEvent, processWindowFocusEvent, processWindowStateEvent, removeWindowFocusListener, removeWindowListener, removeWindowStateListener, reshape, setAlwaysOnTop, setBounds, setBounds, setCursor, setFocusableWindowState, setFocusCycleRoot, setIconImages, setLocationByPlatform, setLocationRelativeTo, setMinimumSize, setModalExclusionType, setSize, setSize, setVisible, show, toBack, toFront
 
Methods inherited from class java.awt.Container
add, add, add, add, add, addContainerListener, applyComponentOrientation, areFocusTraversalKeysSet, countComponents, deliverEvent, doLayout, findComponentAt, findComponentAt, getAlignmentX, getAlignmentY, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents, getComponentZOrder, getContainerListeners, getFocusTraversalPolicy, getInsets, getLayout, getMaximumSize, getMinimumSize, getMousePosition, getPreferredSize, insets, invalidate, isAncestorOf, isFocusCycleRoot, isFocusTraversalPolicyProvider, isFocusTraversalPolicySet, layout, list, list, locate, minimumSize, paintComponents, preferredSize, print, printComponents, processContainerEvent, remove, removeAll, removeContainerListener, setComponentZOrder, setFocusTraversalKeys, setFocusTraversalPolicy, setFocusTraversalPolicyProvider, setFont, transferFocusBackward, transferFocusDownCycle, validate, validateTree
 
Methods inherited from class java.awt.Component
action, add, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addInputMethodListener, addKeyListener, addMouseListener, addMouseMotionListener, addMouseWheelListener, bounds, checkImage, checkImage, coalesceEvents, contains, contains, createImage, createImage, createVolatileImage, createVolatileImage, disable, disableEvents, dispatchEvent, enable, enable, enableEvents, enableInputMethods, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, getBackground, getBaseline, getBaselineResizeBehavior, getBounds, getBounds, getColorModel, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusListeners, getFocusTraversalKeysEnabled, getFont, getFontMetrics, getForeground, getHeight, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputMethodListeners, getInputMethodRequests, getKeyListeners, getLocation, getLocation, getLocationOnScreen, getMouseListeners, getMouseMotionListeners, getMousePosition, getMouseWheelListeners, getName, getParent, getPeer, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getSize, getTreeLock, getWidth, getX, getY, gotFocus, handleEvent, hasFocus, imageUpdate, inside, isBackgroundSet, isCursorSet, isDisplayable, isDoubleBuffered, isEnabled, isFocusable, isFocusOwner, isFocusTraversable, isFontSet, isForegroundSet, isLightweight, isMaximumSizeSet, isMinimumSizeSet, isOpaque, isPreferredSizeSet, isValid, isVisible, keyDown, keyUp, list, list, list, location, lostFocus, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus, paintAll, prepareImage, prepareImage, printAll, processComponentEvent, processFocusEvent, processHierarchyBoundsEvent, processHierarchyEvent, processInputMethodEvent, processKeyEvent, processMouseEvent, processMouseMotionEvent, processMouseWheelEvent, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, removePropertyChangeListener, removePropertyChangeListener, repaint, repaint, repaint, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, resize, resize, setBackground, setComponentOrientation, setDropTarget, setEnabled, setFocusable, setFocusTraversalKeysEnabled, setForeground, setIgnoreRepaint, setLocale, setLocation, setLocation, setMaximumSize, setName, setPreferredSize, show, size, toString, transferFocus, transferFocusUpCycle
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface java.awt.MenuContainer
getFont, postEvent
 

Constructor Detail

AppInfoWindow

public AppInfoWindow(App app,
                     JhoveBase jbase)


jhove/doc/edu/harvard/hul/ois/jhove/viewer/ConfigWindow.html0000644000707400001440000005605411510702360023316 0ustar garyusers ConfigWindow (JHOVE Documentation)

edu.harvard.hul.ois.jhove.viewer
Class ConfigWindow

java.lang.Object
  extended by java.awt.Component
      extended by java.awt.Container
          extended by java.awt.Window
              extended by java.awt.Dialog
                  extended by javax.swing.JDialog
                      extended by edu.harvard.hul.ois.jhove.viewer.ConfigWindow
All Implemented Interfaces:
java.awt.image.ImageObserver, java.awt.MenuContainer, java.io.Serializable, javax.accessibility.Accessible, javax.swing.RootPaneContainer, javax.swing.WindowConstants

public class ConfigWindow
extends javax.swing.JDialog

Window for high-level editing of the application's configuration file.

Author:
Gary McGath
See Also:
Serialized Form

Nested Class Summary
 
Nested classes/interfaces inherited from class javax.swing.JDialog
javax.swing.JDialog.AccessibleJDialog
 
Nested classes/interfaces inherited from class java.awt.Dialog
java.awt.Dialog.AccessibleAWTDialog, java.awt.Dialog.ModalExclusionType, java.awt.Dialog.ModalityType
 
Nested classes/interfaces inherited from class java.awt.Window
java.awt.Window.AccessibleAWTWindow
 
Nested classes/interfaces inherited from class java.awt.Container
java.awt.Container.AccessibleAWTContainer
 
Nested classes/interfaces inherited from class java.awt.Component
java.awt.Component.AccessibleAWTComponent, java.awt.Component.BaselineResizeBehavior, java.awt.Component.BltBufferStrategy, java.awt.Component.FlipBufferStrategy
 
Field Summary
 
Fields inherited from class javax.swing.JDialog
accessibleContext, rootPane, rootPaneCheckingEnabled
 
Fields inherited from class java.awt.Dialog
DEFAULT_MODALITY_TYPE
 
Fields inherited from class java.awt.Component
BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENT
 
Fields inherited from interface javax.swing.WindowConstants
DISPOSE_ON_CLOSE, DO_NOTHING_ON_CLOSE, EXIT_ON_CLOSE, HIDE_ON_CLOSE
 
Fields inherited from interface java.awt.image.ImageObserver
ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH
 
Constructor Summary
ConfigWindow(javax.swing.JFrame parent, java.io.File configFile, ConfigHandler handler)
          Constructor.
 
Method Summary
 
Methods inherited from class javax.swing.JDialog
addImpl, createRootPane, dialogInit, getAccessibleContext, getContentPane, getDefaultCloseOperation, getGlassPane, getGraphics, getJMenuBar, getLayeredPane, getRootPane, getTransferHandler, isDefaultLookAndFeelDecorated, isRootPaneCheckingEnabled, paramString, processWindowEvent, remove, repaint, setContentPane, setDefaultCloseOperation, setDefaultLookAndFeelDecorated, setGlassPane, setJMenuBar, setLayeredPane, setLayout, setRootPane, setRootPaneCheckingEnabled, setTransferHandler, update
 
Methods inherited from class java.awt.Dialog
addNotify, getModalityType, getTitle, hide, isModal, isResizable, isUndecorated, setModal, setModalityType, setResizable, setTitle, setUndecorated, setVisible, show, toBack
 
Methods inherited from class java.awt.Window
addPropertyChangeListener, addPropertyChangeListener, addWindowFocusListener, addWindowListener, addWindowStateListener, applyResourceBundle, applyResourceBundle, createBufferStrategy, createBufferStrategy, dispose, getBufferStrategy, getFocusableWindowState, getFocusCycleRootAncestor, getFocusOwner, getFocusTraversalKeys, getGraphicsConfiguration, getIconImages, getInputContext, getListeners, getLocale, getModalExclusionType, getMostRecentFocusOwner, getOwnedWindows, getOwner, getOwnerlessWindows, getToolkit, getWarningString, getWindowFocusListeners, getWindowListeners, getWindows, getWindowStateListeners, isActive, isAlwaysOnTop, isAlwaysOnTopSupported, isFocusableWindow, isFocusCycleRoot, isFocused, isLocationByPlatform, isShowing, pack, paint, postEvent, processEvent, processWindowFocusEvent, processWindowStateEvent, removeNotify, removeWindowFocusListener, removeWindowListener, removeWindowStateListener, reshape, setAlwaysOnTop, setBounds, setBounds, setCursor, setFocusableWindowState, setFocusCycleRoot, setIconImage, setIconImages, setLocationByPlatform, setLocationRelativeTo, setMinimumSize, setModalExclusionType, setSize, setSize, toFront
 
Methods inherited from class java.awt.Container
add, add, add, add, add, addContainerListener, applyComponentOrientation, areFocusTraversalKeysSet, countComponents, deliverEvent, doLayout, findComponentAt, findComponentAt, getAlignmentX, getAlignmentY, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents, getComponentZOrder, getContainerListeners, getFocusTraversalPolicy, getInsets, getLayout, getMaximumSize, getMinimumSize, getMousePosition, getPreferredSize, insets, invalidate, isAncestorOf, isFocusCycleRoot, isFocusTraversalPolicyProvider, isFocusTraversalPolicySet, layout, list, list, locate, minimumSize, paintComponents, preferredSize, print, printComponents, processContainerEvent, remove, removeAll, removeContainerListener, setComponentZOrder, setFocusTraversalKeys, setFocusTraversalPolicy, setFocusTraversalPolicyProvider, setFont, transferFocusBackward, transferFocusDownCycle, validate, validateTree
 
Methods inherited from class java.awt.Component
action, add, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addInputMethodListener, addKeyListener, addMouseListener, addMouseMotionListener, addMouseWheelListener, bounds, checkImage, checkImage, coalesceEvents, contains, contains, createImage, createImage, createVolatileImage, createVolatileImage, disable, disableEvents, dispatchEvent, enable, enable, enableEvents, enableInputMethods, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, getBackground, getBaseline, getBaselineResizeBehavior, getBounds, getBounds, getColorModel, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusListeners, getFocusTraversalKeysEnabled, getFont, getFontMetrics, getForeground, getHeight, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputMethodListeners, getInputMethodRequests, getKeyListeners, getLocation, getLocation, getLocationOnScreen, getMouseListeners, getMouseMotionListeners, getMousePosition, getMouseWheelListeners, getName, getParent, getPeer, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getSize, getTreeLock, getWidth, getX, getY, gotFocus, handleEvent, hasFocus, imageUpdate, inside, isBackgroundSet, isCursorSet, isDisplayable, isDoubleBuffered, isEnabled, isFocusable, isFocusOwner, isFocusTraversable, isFontSet, isForegroundSet, isLightweight, isMaximumSizeSet, isMinimumSizeSet, isOpaque, isPreferredSizeSet, isValid, isVisible, keyDown, keyUp, list, list, list, location, lostFocus, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus, paintAll, prepareImage, prepareImage, printAll, processComponentEvent, processFocusEvent, processHierarchyBoundsEvent, processHierarchyEvent, processInputMethodEvent, processKeyEvent, processMouseEvent, processMouseMotionEvent, processMouseWheelEvent, remove, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, removePropertyChangeListener, removePropertyChangeListener, repaint, repaint, repaint, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, resize, resize, setBackground, setComponentOrientation, setDropTarget, setEnabled, setFocusable, setFocusTraversalKeysEnabled, setForeground, setIgnoreRepaint, setLocale, setLocation, setLocation, setMaximumSize, setName, setPreferredSize, show, size, toString, transferFocus, transferFocusUpCycle
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

ConfigWindow

public ConfigWindow(javax.swing.JFrame parent,
                    java.io.File configFile,
                    ConfigHandler handler)
Constructor.

Parameters:
configFile - The file which was opened for configuration information, or null to start with a clean slate.
handler - A ConfigHandler which has already processed the configuration file, or null if configFile is null.


jhove/doc/edu/harvard/hul/ois/jhove/viewer/ConfigWriter.html0000644000707400001440000003026411510702360023316 0ustar garyusers ConfigWriter (JHOVE Documentation)

edu.harvard.hul.ois.jhove.viewer
Class ConfigWriter

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.viewer.ConfigWriter

public class ConfigWriter
extends java.lang.Object

Class to write out configuration information to the configuration file. To minimize the chance of getting into a bad state, it writes to a temporary file, then replaces the old config file with that file, rather than directly overwriting the existing file.

Author:
Gary McGath

Constructor Summary
ConfigWriter(java.io.File file, ConfigWindow parent)
          Constructor.
 
Method Summary
 void writeFile(java.util.List modules, java.util.List handlers, java.io.File homeDir, java.io.File tempDir, java.lang.String encoding, int bufferSize)
          Writes out the content of the file to the temporary file, then deletes the existing configuration file (as specified by the constructor parameter) and renames the temporary file to the configuration file.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ConfigWriter

public ConfigWriter(java.io.File file,
                    ConfigWindow parent)
             throws java.io.IOException
Constructor. Creates a temporary file for writing and creates an OutputStreamWriter to write to it. If there is already a file located by file, it will not be replaced or overwritten until writeFile has successfully written out the temporary file.

Parameters:
file - Location of the configuration file
parent - The ConfigWindow which invoked this instance
Throws:
java.io.IOException
Method Detail

writeFile

public void writeFile(java.util.List modules,
                      java.util.List handlers,
                      java.io.File homeDir,
                      java.io.File tempDir,
                      java.lang.String encoding,
                      int bufferSize)
               throws java.io.IOException
Writes out the content of the file to the temporary file, then deletes the existing configuration file (as specified by the constructor parameter) and renames the temporary file to the configuration file. If the temporary file can't be written, or the configuration file can't be replaced, a warning dialog is put up and the configuration file remains unchanged.

Throws:
java.io.IOException


jhove/doc/edu/harvard/hul/ois/jhove/viewer/InfoWindow.html0000644000707400001440000007501011510702361022776 0ustar garyusers InfoWindow (JHOVE Documentation)

edu.harvard.hul.ois.jhove.viewer
Class InfoWindow

java.lang.Object
  extended by java.awt.Component
      extended by java.awt.Container
          extended by java.awt.Window
              extended by java.awt.Frame
                  extended by javax.swing.JFrame
                      extended by edu.harvard.hul.ois.jhove.viewer.InfoWindow
All Implemented Interfaces:
java.awt.image.ImageObserver, java.awt.MenuContainer, java.io.Serializable, javax.accessibility.Accessible, javax.swing.RootPaneContainer, javax.swing.WindowConstants
Direct Known Subclasses:
AppInfoWindow, ModuleInfoWindow, ViewWindow

public abstract class InfoWindow
extends javax.swing.JFrame

An abstract superclass for windows that display information and can be saved to a file.

Author:
Gary McGath
See Also:
Serialized Form

Nested Class Summary
 
Nested classes/interfaces inherited from class javax.swing.JFrame
javax.swing.JFrame.AccessibleJFrame
 
Nested classes/interfaces inherited from class java.awt.Frame
java.awt.Frame.AccessibleAWTFrame
 
Nested classes/interfaces inherited from class java.awt.Window
java.awt.Window.AccessibleAWTWindow
 
Nested classes/interfaces inherited from class java.awt.Container
java.awt.Container.AccessibleAWTContainer
 
Nested classes/interfaces inherited from class java.awt.Component
java.awt.Component.AccessibleAWTComponent, java.awt.Component.BaselineResizeBehavior, java.awt.Component.BltBufferStrategy, java.awt.Component.FlipBufferStrategy
 
Field Summary
protected  App _app
           
protected  java.text.SimpleDateFormat _dateFmt
           
protected static java.lang.String eol
           
 
Fields inherited from class javax.swing.JFrame
accessibleContext, EXIT_ON_CLOSE, rootPane, rootPaneCheckingEnabled
 
Fields inherited from class java.awt.Frame
CROSSHAIR_CURSOR, DEFAULT_CURSOR, E_RESIZE_CURSOR, HAND_CURSOR, ICONIFIED, MAXIMIZED_BOTH, MAXIMIZED_HORIZ, MAXIMIZED_VERT, MOVE_CURSOR, N_RESIZE_CURSOR, NE_RESIZE_CURSOR, NORMAL, NW_RESIZE_CURSOR, S_RESIZE_CURSOR, SE_RESIZE_CURSOR, SW_RESIZE_CURSOR, TEXT_CURSOR, W_RESIZE_CURSOR, WAIT_CURSOR
 
Fields inherited from class java.awt.Component
BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENT
 
Fields inherited from interface javax.swing.WindowConstants
DISPOSE_ON_CLOSE, DO_NOTHING_ON_CLOSE, HIDE_ON_CLOSE
 
Fields inherited from interface java.awt.image.ImageObserver
ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH
 
Constructor Summary
InfoWindow(java.lang.String title, App app, JhoveBase base)
          Constructor.
 
Method Summary
protected  void closeFromMenu()
          Handler for the "Close" menu item.
protected  java.io.PrintWriter doSaveDialog()
          Puts up a dialog to save the file.
protected  OutputHandler selectHandler()
          Sets up the OutputHandler from the JComboBox and returns it.
protected  void setSaveActionListener(java.awt.event.ActionListener listener)
          Sets the ActionListener for the "Save as" menu item.
 
Methods inherited from class javax.swing.JFrame
addImpl, createRootPane, frameInit, getAccessibleContext, getContentPane, getDefaultCloseOperation, getGlassPane, getGraphics, getJMenuBar, getLayeredPane, getRootPane, getTransferHandler, isDefaultLookAndFeelDecorated, isRootPaneCheckingEnabled, paramString, processWindowEvent, remove, repaint, setContentPane, setDefaultCloseOperation, setDefaultLookAndFeelDecorated, setGlassPane, setIconImage, setJMenuBar, setLayeredPane, setLayout, setRootPane, setRootPaneCheckingEnabled, setTransferHandler, update
 
Methods inherited from class java.awt.Frame
addNotify, getCursorType, getExtendedState, getFrames, getIconImage, getMaximizedBounds, getMenuBar, getState, getTitle, isResizable, isUndecorated, remove, removeNotify, setCursor, setExtendedState, setMaximizedBounds, setMenuBar, setResizable, setState, setTitle, setUndecorated
 
Methods inherited from class java.awt.Window
addPropertyChangeListener, addPropertyChangeListener, addWindowFocusListener, addWindowListener, addWindowStateListener, applyResourceBundle, applyResourceBundle, createBufferStrategy, createBufferStrategy, dispose, getBufferStrategy, getFocusableWindowState, getFocusCycleRootAncestor, getFocusOwner, getFocusTraversalKeys, getGraphicsConfiguration, getIconImages, getInputContext, getListeners, getLocale, getModalExclusionType, getMostRecentFocusOwner, getOwnedWindows, getOwner, getOwnerlessWindows, getToolkit, getWarningString, getWindowFocusListeners, getWindowListeners, getWindows, getWindowStateListeners, hide, isActive, isAlwaysOnTop, isAlwaysOnTopSupported, isFocusableWindow, isFocusCycleRoot, isFocused, isLocationByPlatform, isShowing, pack, paint, postEvent, processEvent, processWindowFocusEvent, processWindowStateEvent, removeWindowFocusListener, removeWindowListener, removeWindowStateListener, reshape, setAlwaysOnTop, setBounds, setBounds, setCursor, setFocusableWindowState, setFocusCycleRoot, setIconImages, setLocationByPlatform, setLocationRelativeTo, setMinimumSize, setModalExclusionType, setSize, setSize, setVisible, show, toBack, toFront
 
Methods inherited from class java.awt.Container
add, add, add, add, add, addContainerListener, applyComponentOrientation, areFocusTraversalKeysSet, countComponents, deliverEvent, doLayout, findComponentAt, findComponentAt, getAlignmentX, getAlignmentY, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents, getComponentZOrder, getContainerListeners, getFocusTraversalPolicy, getInsets, getLayout, getMaximumSize, getMinimumSize, getMousePosition, getPreferredSize, insets, invalidate, isAncestorOf, isFocusCycleRoot, isFocusTraversalPolicyProvider, isFocusTraversalPolicySet, layout, list, list, locate, minimumSize, paintComponents, preferredSize, print, printComponents, processContainerEvent, remove, removeAll, removeContainerListener, setComponentZOrder, setFocusTraversalKeys, setFocusTraversalPolicy, setFocusTraversalPolicyProvider, setFont, transferFocusBackward, transferFocusDownCycle, validate, validateTree
 
Methods inherited from class java.awt.Component
action, add, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addInputMethodListener, addKeyListener, addMouseListener, addMouseMotionListener, addMouseWheelListener, bounds, checkImage, checkImage, coalesceEvents, contains, contains, createImage, createImage, createVolatileImage, createVolatileImage, disable, disableEvents, dispatchEvent, enable, enable, enableEvents, enableInputMethods, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, getBackground, getBaseline, getBaselineResizeBehavior, getBounds, getBounds, getColorModel, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusListeners, getFocusTraversalKeysEnabled, getFont, getFontMetrics, getForeground, getHeight, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputMethodListeners, getInputMethodRequests, getKeyListeners, getLocation, getLocation, getLocationOnScreen, getMouseListeners, getMouseMotionListeners, getMousePosition, getMouseWheelListeners, getName, getParent, getPeer, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getSize, getTreeLock, getWidth, getX, getY, gotFocus, handleEvent, hasFocus, imageUpdate, inside, isBackgroundSet, isCursorSet, isDisplayable, isDoubleBuffered, isEnabled, isFocusable, isFocusOwner, isFocusTraversable, isFontSet, isForegroundSet, isLightweight, isMaximumSizeSet, isMinimumSizeSet, isOpaque, isPreferredSizeSet, isValid, isVisible, keyDown, keyUp, list, list, list, location, lostFocus, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus, paintAll, prepareImage, prepareImage, printAll, processComponentEvent, processFocusEvent, processHierarchyBoundsEvent, processHierarchyEvent, processInputMethodEvent, processKeyEvent, processMouseEvent, processMouseMotionEvent, processMouseWheelEvent, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, removePropertyChangeListener, removePropertyChangeListener, repaint, repaint, repaint, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, resize, resize, setBackground, setComponentOrientation, setDropTarget, setEnabled, setFocusable, setFocusTraversalKeysEnabled, setForeground, setIgnoreRepaint, setLocale, setLocation, setLocation, setMaximumSize, setName, setPreferredSize, show, size, toString, transferFocus, transferFocusUpCycle
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface java.awt.MenuContainer
getFont, postEvent
 

Field Detail

_app

protected App _app

eol

protected static final java.lang.String eol

_dateFmt

protected java.text.SimpleDateFormat _dateFmt
Constructor Detail

InfoWindow

public InfoWindow(java.lang.String title,
                  App app,
                  JhoveBase base)
           throws java.awt.HeadlessException
Constructor. The window is created with a File menu that has "Save as" and "Close" items.

Parameters:
title - Window title. Will be truncated to 32 characters.
app - The associated App object.
base - The associated JhoveBase object.
Throws:
java.awt.HeadlessException
Method Detail

setSaveActionListener

protected void setSaveActionListener(java.awt.event.ActionListener listener)
Sets the ActionListener for the "Save as" menu item. Subclasses need to call this with an appropriate ActionListener in order to make the menu item functional.


doSaveDialog

protected java.io.PrintWriter doSaveDialog()
Puts up a dialog to save the file. If the user requests a file, deletes any old file with the same name, creates the new file, and returns a PrintWriter to the file. The save dialog is customized with two JComboBoxes. One lets the user select a character encoding, which is used by the PrintWriter; the other lets the user choose an OutputHandler to control the output format (e.g., text or HTML). The encodings shown in a JComboBox are UTF-8, ISO-8859-1, Cp1252, MacRoman, and the default encoding for the locale (if different from the above), but the user can type in other encodings. If an unknown encoding is selected, an error dialog will be displayed. OutputHandlers other than the ones known to the application can't be specified (what would the application do with them?)


selectHandler

protected OutputHandler selectHandler()
Sets up the OutputHandler from the JComboBox and returns it. Subclasses should call selectHandler to obtain an OutputHandler with which to produce data.


closeFromMenu

protected void closeFromMenu()
Handler for the "Close" menu item. Simply hides the window without deleting it.



jhove/doc/edu/harvard/hul/ois/jhove/viewer/JhoveWindow.InvisibleFilenameFilter.html0000644000707400001440000002535611510702362027721 0ustar garyusers JhoveWindow.InvisibleFilenameFilter (JHOVE Documentation)

edu.harvard.hul.ois.jhove.viewer
Class JhoveWindow.InvisibleFilenameFilter

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.viewer.JhoveWindow.InvisibleFilenameFilter
All Implemented Interfaces:
java.io.FilenameFilter
Enclosing class:
JhoveWindow

protected class JhoveWindow.InvisibleFilenameFilter
extends java.lang.Object
implements java.io.FilenameFilter

Class to filter out filenames that start with a period. These are "invisible" file names, at least under Unix, and generally shouldn't be included when walking through a directory.


Constructor Summary
protected JhoveWindow.InvisibleFilenameFilter()
           
 
Method Summary
 boolean accept(java.io.File dir, java.lang.String name)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

JhoveWindow.InvisibleFilenameFilter

protected JhoveWindow.InvisibleFilenameFilter()
Method Detail

accept

public boolean accept(java.io.File dir,
                      java.lang.String name)
Specified by:
accept in interface java.io.FilenameFilter


jhove/doc/edu/harvard/hul/ois/jhove/viewer/JhoveWindow.html0000644000707400001440000012056111510702362023161 0ustar garyusers JhoveWindow (JHOVE Documentation)

edu.harvard.hul.ois.jhove.viewer
Class JhoveWindow

java.lang.Object
  extended by java.awt.Component
      extended by java.awt.Container
          extended by java.awt.Window
              extended by java.awt.Frame
                  extended by javax.swing.JFrame
                      extended by edu.harvard.hul.ois.jhove.viewer.JhoveWindow
All Implemented Interfaces:
Callback, java.awt.dnd.DropTargetListener, java.awt.image.ImageObserver, java.awt.MenuContainer, java.io.Serializable, java.util.EventListener, javax.accessibility.Accessible, javax.swing.RootPaneContainer, javax.swing.WindowConstants

public class JhoveWindow
extends javax.swing.JFrame
implements Callback, java.awt.dnd.DropTargetListener

Main window of JHoveViewer application.

See Also:
Serialized Form

Nested Class Summary
protected  class JhoveWindow.InvisibleFilenameFilter
          Class to filter out filenames that start with a period.
 
Nested classes/interfaces inherited from class javax.swing.JFrame
javax.swing.JFrame.AccessibleJFrame
 
Nested classes/interfaces inherited from class java.awt.Frame
java.awt.Frame.AccessibleAWTFrame
 
Nested classes/interfaces inherited from class java.awt.Window
java.awt.Window.AccessibleAWTWindow
 
Nested classes/interfaces inherited from class java.awt.Container
java.awt.Container.AccessibleAWTContainer
 
Nested classes/interfaces inherited from class java.awt.Component
java.awt.Component.AccessibleAWTComponent, java.awt.Component.BaselineResizeBehavior, java.awt.Component.BltBufferStrategy, java.awt.Component.FlipBufferStrategy
 
Field Summary
protected  java.util.logging.Logger _logger
          Logger for a module class.
 
Fields inherited from class javax.swing.JFrame
accessibleContext, EXIT_ON_CLOSE, rootPane, rootPaneCheckingEnabled
 
Fields inherited from class java.awt.Frame
CROSSHAIR_CURSOR, DEFAULT_CURSOR, E_RESIZE_CURSOR, HAND_CURSOR, ICONIFIED, MAXIMIZED_BOTH, MAXIMIZED_HORIZ, MAXIMIZED_VERT, MOVE_CURSOR, N_RESIZE_CURSOR, NE_RESIZE_CURSOR, NORMAL, NW_RESIZE_CURSOR, S_RESIZE_CURSOR, SE_RESIZE_CURSOR, SW_RESIZE_CURSOR, TEXT_CURSOR, W_RESIZE_CURSOR, WAIT_CURSOR
 
Fields inherited from class java.awt.Component
BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENT
 
Fields inherited from interface javax.swing.WindowConstants
DISPOSE_ON_CLOSE, DO_NOTHING_ON_CLOSE, HIDE_ON_CLOSE
 
Fields inherited from interface java.awt.image.ImageObserver
ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH
 
Constructor Summary
JhoveWindow(App app, JhoveBase base)
           
 
Method Summary
 void analyzeDirectory(java.io.File file, Module module)
          This method opens a directory, recursing through multiple levels if possible, and feeding individual files to pickAndAnalyzeFile1.
 int callback(int selector, java.lang.Object parm)
          Implementation of Callback.callback.
 void dragEnter(java.awt.dnd.DropTargetDragEvent dtde)
          Invoked when the drag enters the component.
 void dragExit(java.awt.dnd.DropTargetEvent dte)
          Invoked when the drag leaves the component.
 void dragOver(java.awt.dnd.DropTargetDragEvent dtde)
          Does nothing.
 void drop(java.awt.dnd.DropTargetDropEvent dtde)
          Called when the thingy is dropped on the component.
 void dropActionChanged(java.awt.dnd.DropTargetDragEvent dtde)
          Called if the drop action changes during the drag (e.g., by changing the modifier keys).
protected  javax.swing.JMenuItem getCloseAllItem()
          Returns the "Close all document windows" menu item.
static void makeChooserOpaque(javax.swing.JFileChooser chooser)
          Makes a JFileChooser dialog treat packages and applications as opaque entities.
 void pickAndAnalyzeFile()
          Here we let the user pick a file, then analyze it.
 void pickAndAnalyzeFile1(java.io.File file, Module module)
          This method does the actual work of pickAndAnalyzeFile, called from a thread so it can run asynchronously.
 void pickAndAnalyzeFileList1(java.util.List files, Module module)
          This is called to analyze a List of files.
 void pickAndAnalyzeURL()
           
 void pickAndAnalyzeURL1(java.lang.String uri, Module module)
          This method does the actual work of pickAndAnalyzeURL, called from a thread so it can run asynchronously.
 void setDoChecksum(boolean checksum)
          Sets the checksum flag.
 void setRawOutput(boolean rawOutput)
          Sets the raw output flag.
 
Methods inherited from class javax.swing.JFrame
addImpl, createRootPane, frameInit, getAccessibleContext, getContentPane, getDefaultCloseOperation, getGlassPane, getGraphics, getJMenuBar, getLayeredPane, getRootPane, getTransferHandler, isDefaultLookAndFeelDecorated, isRootPaneCheckingEnabled, paramString, processWindowEvent, remove, repaint, setContentPane, setDefaultCloseOperation, setDefaultLookAndFeelDecorated, setGlassPane, setIconImage, setJMenuBar, setLayeredPane, setLayout, setRootPane, setRootPaneCheckingEnabled, setTransferHandler, update
 
Methods inherited from class java.awt.Frame
addNotify, getCursorType, getExtendedState, getFrames, getIconImage, getMaximizedBounds, getMenuBar, getState, getTitle, isResizable, isUndecorated, remove, removeNotify, setCursor, setExtendedState, setMaximizedBounds, setMenuBar, setResizable, setState, setTitle, setUndecorated
 
Methods inherited from class java.awt.Window
addPropertyChangeListener, addPropertyChangeListener, addWindowFocusListener, addWindowListener, addWindowStateListener, applyResourceBundle, applyResourceBundle, createBufferStrategy, createBufferStrategy, dispose, getBufferStrategy, getFocusableWindowState, getFocusCycleRootAncestor, getFocusOwner, getFocusTraversalKeys, getGraphicsConfiguration, getIconImages, getInputContext, getListeners, getLocale, getModalExclusionType, getMostRecentFocusOwner, getOwnedWindows, getOwner, getOwnerlessWindows, getToolkit, getWarningString, getWindowFocusListeners, getWindowListeners, getWindows, getWindowStateListeners, hide, isActive, isAlwaysOnTop, isAlwaysOnTopSupported, isFocusableWindow, isFocusCycleRoot, isFocused, isLocationByPlatform, isShowing, pack, paint, postEvent, processEvent, processWindowFocusEvent, processWindowStateEvent, removeWindowFocusListener, removeWindowListener, removeWindowStateListener, reshape, setAlwaysOnTop, setBounds, setBounds, setCursor, setFocusableWindowState, setFocusCycleRoot, setIconImages, setLocationByPlatform, setLocationRelativeTo, setMinimumSize, setModalExclusionType, setSize, setSize, setVisible, show, toBack, toFront
 
Methods inherited from class java.awt.Container
add, add, add, add, add, addContainerListener, applyComponentOrientation, areFocusTraversalKeysSet, countComponents, deliverEvent, doLayout, findComponentAt, findComponentAt, getAlignmentX, getAlignmentY, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents, getComponentZOrder, getContainerListeners, getFocusTraversalPolicy, getInsets, getLayout, getMaximumSize, getMinimumSize, getMousePosition, getPreferredSize, insets, invalidate, isAncestorOf, isFocusCycleRoot, isFocusTraversalPolicyProvider, isFocusTraversalPolicySet, layout, list, list, locate, minimumSize, paintComponents, preferredSize, print, printComponents, processContainerEvent, remove, removeAll, removeContainerListener, setComponentZOrder, setFocusTraversalKeys, setFocusTraversalPolicy, setFocusTraversalPolicyProvider, setFont, transferFocusBackward, transferFocusDownCycle, validate, validateTree
 
Methods inherited from class java.awt.Component
action, add, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addInputMethodListener, addKeyListener, addMouseListener, addMouseMotionListener, addMouseWheelListener, bounds, checkImage, checkImage, coalesceEvents, contains, contains, createImage, createImage, createVolatileImage, createVolatileImage, disable, disableEvents, dispatchEvent, enable, enable, enableEvents, enableInputMethods, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, getBackground, getBaseline, getBaselineResizeBehavior, getBounds, getBounds, getColorModel, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusListeners, getFocusTraversalKeysEnabled, getFont, getFontMetrics, getForeground, getHeight, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputMethodListeners, getInputMethodRequests, getKeyListeners, getLocation, getLocation, getLocationOnScreen, getMouseListeners, getMouseMotionListeners, getMousePosition, getMouseWheelListeners, getName, getParent, getPeer, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getSize, getTreeLock, getWidth, getX, getY, gotFocus, handleEvent, hasFocus, imageUpdate, inside, isBackgroundSet, isCursorSet, isDisplayable, isDoubleBuffered, isEnabled, isFocusable, isFocusOwner, isFocusTraversable, isFontSet, isForegroundSet, isLightweight, isMaximumSizeSet, isMinimumSizeSet, isOpaque, isPreferredSizeSet, isValid, isVisible, keyDown, keyUp, list, list, list, location, lostFocus, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus, paintAll, prepareImage, prepareImage, printAll, processComponentEvent, processFocusEvent, processHierarchyBoundsEvent, processHierarchyEvent, processInputMethodEvent, processKeyEvent, processMouseEvent, processMouseMotionEvent, processMouseWheelEvent, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, removePropertyChangeListener, removePropertyChangeListener, repaint, repaint, repaint, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, resize, resize, setBackground, setComponentOrientation, setDropTarget, setEnabled, setFocusable, setFocusTraversalKeysEnabled, setForeground, setIgnoreRepaint, setLocale, setLocation, setLocation, setMaximumSize, setName, setPreferredSize, show, size, toString, transferFocus, transferFocusUpCycle
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface java.awt.MenuContainer
getFont, postEvent
 

Field Detail

_logger

protected java.util.logging.Logger _logger
Logger for a module class.

Constructor Detail

JhoveWindow

public JhoveWindow(App app,
                   JhoveBase base)
Method Detail

pickAndAnalyzeFile

public void pickAndAnalyzeFile()
Here we let the user pick a file, then analyze it.


makeChooserOpaque

public static void makeChooserOpaque(javax.swing.JFileChooser chooser)
Makes a JFileChooser dialog treat packages and applications as opaque entities. Has no effect on other platforms.


pickAndAnalyzeFile1

public void pickAndAnalyzeFile1(java.io.File file,
                                Module module)
This method does the actual work of pickAndAnalyzeFile, called from a thread so it can run asynchronously.


pickAndAnalyzeFileList1

public void pickAndAnalyzeFileList1(java.util.List files,
                                    Module module)
This is called to analyze a List of files.


analyzeDirectory

public void analyzeDirectory(java.io.File file,
                             Module module)
This method opens a directory, recursing through multiple levels if possible, and feeding individual files to pickAndAnalyzeFile1.


pickAndAnalyzeURL

public void pickAndAnalyzeURL()

pickAndAnalyzeURL1

public void pickAndAnalyzeURL1(java.lang.String uri,
                               Module module)
This method does the actual work of pickAndAnalyzeURL, called from a thread so it can run asynchronously.


callback

public int callback(int selector,
                    java.lang.Object parm)
Implementation of Callback.callback.

Specified by:
callback in interface Callback
Parameters:
selector - 1 signifies update of byte count. 2 signifies change of URI. Other values result in no action.
parm - If selector = 1, must be a Long that evaluates to the number of bytes processed to date. If selector = 2, must be a String naming the object being processed. Will be truncated at the left if longer than 64 characters.
Returns:
As specified by the implementing class.

setRawOutput

public void setRawOutput(boolean rawOutput)
Sets the raw output flag. If set to true, raw numeric values are displayed; if false, explanatory text may be substituted.


setDoChecksum

public void setDoChecksum(boolean checksum)
Sets the checksum flag. If set to true, checksums are reported.


dragEnter

public void dragEnter(java.awt.dnd.DropTargetDragEvent dtde)
Invoked when the drag enters the component. Accepts the drag if it's a file which is being dragged, and changes the background color to give visual feedback.

Specified by:
dragEnter in interface java.awt.dnd.DropTargetListener

dragExit

public void dragExit(java.awt.dnd.DropTargetEvent dte)
Invoked when the drag leaves the component. Restores the default background color.

Specified by:
dragExit in interface java.awt.dnd.DropTargetListener

dragOver

public void dragOver(java.awt.dnd.DropTargetDragEvent dtde)
Does nothing.

Specified by:
dragOver in interface java.awt.dnd.DropTargetListener

drop

public void drop(java.awt.dnd.DropTargetDropEvent dtde)
Called when the thingy is dropped on the component. This causes the file to be opened. The default background color will be restored; theoretically this should already have happened, but Windows appears to require it be done here.

Specified by:
drop in interface java.awt.dnd.DropTargetListener

dropActionChanged

public void dropActionChanged(java.awt.dnd.DropTargetDragEvent dtde)
Called if the drop action changes during the drag (e.g., by changing the modifier keys). Does nothing, as we treat copy and move identically.

Specified by:
dropActionChanged in interface java.awt.dnd.DropTargetListener

getCloseAllItem

protected javax.swing.JMenuItem getCloseAllItem()
Returns the "Close all document windows" menu item. This allows document windows to add themselves as listeners.



jhove/doc/edu/harvard/hul/ois/jhove/viewer/LeafHolder.html0000644000707400001440000002275010771557567022753 0ustar garyusers LeafHolder (JHOVE Documentation)

edu.harvard.hul.ois.jhove.viewer
Class LeafHolder

java.lang.Object
  |
  +--edu.harvard.hul.ois.jhove.viewer.LeafHolder

public class LeafHolder
extends java.lang.Object


Constructor Summary
LeafHolder(java.lang.String displayValue, int position)
           
 
Method Summary
 java.lang.String getDisplayValue()
           
 int getPosition()
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

LeafHolder

public LeafHolder(java.lang.String displayValue,
                  int position)
Method Detail

getPosition

public int getPosition()

getDisplayValue

public java.lang.String getDisplayValue()


jhove/doc/edu/harvard/hul/ois/jhove/viewer/MainScreen.html0000644000707400001440000002401311510702362022735 0ustar garyusers MainScreen (JHOVE Documentation)

edu.harvard.hul.ois.jhove.viewer
Class MainScreen

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.viewer.MainScreen

public class MainScreen
extends java.lang.Object

Static methods for positioning windows on the main screen.

Author:
Gary McGath

Method Summary
static void centerTopWindow(java.awt.Window win)
          Center the window at the top of the main screen.
static void centerWindow(java.awt.Window win)
          Center the window on the main screen.
static java.awt.Rectangle mainBounds()
          Returns the bounds of the main monitor device.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Method Detail

centerWindow

public static void centerWindow(java.awt.Window win)
Center the window on the main screen.


centerTopWindow

public static void centerTopWindow(java.awt.Window win)
Center the window at the top of the main screen.


mainBounds

public static java.awt.Rectangle mainBounds()
Returns the bounds of the main monitor device.



jhove/doc/edu/harvard/hul/ois/jhove/viewer/ModuleInfoWindow.html0000644000707400001440000006707511510702362024161 0ustar garyusers ModuleInfoWindow (JHOVE Documentation)

edu.harvard.hul.ois.jhove.viewer
Class ModuleInfoWindow

java.lang.Object
  extended by java.awt.Component
      extended by java.awt.Container
          extended by java.awt.Window
              extended by java.awt.Frame
                  extended by javax.swing.JFrame
                      extended by edu.harvard.hul.ois.jhove.viewer.InfoWindow
                          extended by edu.harvard.hul.ois.jhove.viewer.ModuleInfoWindow
All Implemented Interfaces:
java.awt.image.ImageObserver, java.awt.MenuContainer, java.io.Serializable, javax.accessibility.Accessible, javax.swing.RootPaneContainer, javax.swing.WindowConstants

public class ModuleInfoWindow
extends InfoWindow

This window is for presenting information about the selected module. If no module is selected, a brief message is put into the window.

See Also:
Serialized Form

Nested Class Summary
 
Nested classes/interfaces inherited from class javax.swing.JFrame
javax.swing.JFrame.AccessibleJFrame
 
Nested classes/interfaces inherited from class java.awt.Frame
java.awt.Frame.AccessibleAWTFrame
 
Nested classes/interfaces inherited from class java.awt.Window
java.awt.Window.AccessibleAWTWindow
 
Nested classes/interfaces inherited from class java.awt.Container
java.awt.Container.AccessibleAWTContainer
 
Nested classes/interfaces inherited from class java.awt.Component
java.awt.Component.AccessibleAWTComponent, java.awt.Component.BaselineResizeBehavior, java.awt.Component.BltBufferStrategy, java.awt.Component.FlipBufferStrategy
 
Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.viewer.InfoWindow
_app, _dateFmt, eol
 
Fields inherited from class javax.swing.JFrame
accessibleContext, EXIT_ON_CLOSE, rootPane, rootPaneCheckingEnabled
 
Fields inherited from class java.awt.Frame
CROSSHAIR_CURSOR, DEFAULT_CURSOR, E_RESIZE_CURSOR, HAND_CURSOR, ICONIFIED, MAXIMIZED_BOTH, MAXIMIZED_HORIZ, MAXIMIZED_VERT, MOVE_CURSOR, N_RESIZE_CURSOR, NE_RESIZE_CURSOR, NORMAL, NW_RESIZE_CURSOR, S_RESIZE_CURSOR, SE_RESIZE_CURSOR, SW_RESIZE_CURSOR, TEXT_CURSOR, W_RESIZE_CURSOR, WAIT_CURSOR
 
Fields inherited from class java.awt.Component
BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENT
 
Fields inherited from interface javax.swing.WindowConstants
DISPOSE_ON_CLOSE, DO_NOTHING_ON_CLOSE, HIDE_ON_CLOSE
 
Fields inherited from interface java.awt.image.ImageObserver
ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH
 
Constructor Summary
ModuleInfoWindow(App app, JhoveBase base, Module module)
          Constructor.
 
Method Summary
 void showModule(Module module)
          Formats and presents the module information in the window.
 
Methods inherited from class edu.harvard.hul.ois.jhove.viewer.InfoWindow
closeFromMenu, doSaveDialog, selectHandler, setSaveActionListener
 
Methods inherited from class javax.swing.JFrame
addImpl, createRootPane, frameInit, getAccessibleContext, getContentPane, getDefaultCloseOperation, getGlassPane, getGraphics, getJMenuBar, getLayeredPane, getRootPane, getTransferHandler, isDefaultLookAndFeelDecorated, isRootPaneCheckingEnabled, paramString, processWindowEvent, remove, repaint, setContentPane, setDefaultCloseOperation, setDefaultLookAndFeelDecorated, setGlassPane, setIconImage, setJMenuBar, setLayeredPane, setLayout, setRootPane, setRootPaneCheckingEnabled, setTransferHandler, update
 
Methods inherited from class java.awt.Frame
addNotify, getCursorType, getExtendedState, getFrames, getIconImage, getMaximizedBounds, getMenuBar, getState, getTitle, isResizable, isUndecorated, remove, removeNotify, setCursor, setExtendedState, setMaximizedBounds, setMenuBar, setResizable, setState, setTitle, setUndecorated
 
Methods inherited from class java.awt.Window
addPropertyChangeListener, addPropertyChangeListener, addWindowFocusListener, addWindowListener, addWindowStateListener, applyResourceBundle, applyResourceBundle, createBufferStrategy, createBufferStrategy, dispose, getBufferStrategy, getFocusableWindowState, getFocusCycleRootAncestor, getFocusOwner, getFocusTraversalKeys, getGraphicsConfiguration, getIconImages, getInputContext, getListeners, getLocale, getModalExclusionType, getMostRecentFocusOwner, getOwnedWindows, getOwner, getOwnerlessWindows, getToolkit, getWarningString, getWindowFocusListeners, getWindowListeners, getWindows, getWindowStateListeners, hide, isActive, isAlwaysOnTop, isAlwaysOnTopSupported, isFocusableWindow, isFocusCycleRoot, isFocused, isLocationByPlatform, isShowing, pack, paint, postEvent, processEvent, processWindowFocusEvent, processWindowStateEvent, removeWindowFocusListener, removeWindowListener, removeWindowStateListener, reshape, setAlwaysOnTop, setBounds, setBounds, setCursor, setFocusableWindowState, setFocusCycleRoot, setIconImages, setLocationByPlatform, setLocationRelativeTo, setMinimumSize, setModalExclusionType, setSize, setSize, setVisible, show, toBack, toFront
 
Methods inherited from class java.awt.Container
add, add, add, add, add, addContainerListener, applyComponentOrientation, areFocusTraversalKeysSet, countComponents, deliverEvent, doLayout, findComponentAt, findComponentAt, getAlignmentX, getAlignmentY, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents, getComponentZOrder, getContainerListeners, getFocusTraversalPolicy, getInsets, getLayout, getMaximumSize, getMinimumSize, getMousePosition, getPreferredSize, insets, invalidate, isAncestorOf, isFocusCycleRoot, isFocusTraversalPolicyProvider, isFocusTraversalPolicySet, layout, list, list, locate, minimumSize, paintComponents, preferredSize, print, printComponents, processContainerEvent, remove, removeAll, removeContainerListener, setComponentZOrder, setFocusTraversalKeys, setFocusTraversalPolicy, setFocusTraversalPolicyProvider, setFont, transferFocusBackward, transferFocusDownCycle, validate, validateTree
 
Methods inherited from class java.awt.Component
action, add, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addInputMethodListener, addKeyListener, addMouseListener, addMouseMotionListener, addMouseWheelListener, bounds, checkImage, checkImage, coalesceEvents, contains, contains, createImage, createImage, createVolatileImage, createVolatileImage, disable, disableEvents, dispatchEvent, enable, enable, enableEvents, enableInputMethods, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, getBackground, getBaseline, getBaselineResizeBehavior, getBounds, getBounds, getColorModel, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusListeners, getFocusTraversalKeysEnabled, getFont, getFontMetrics, getForeground, getHeight, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputMethodListeners, getInputMethodRequests, getKeyListeners, getLocation, getLocation, getLocationOnScreen, getMouseListeners, getMouseMotionListeners, getMousePosition, getMouseWheelListeners, getName, getParent, getPeer, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getSize, getTreeLock, getWidth, getX, getY, gotFocus, handleEvent, hasFocus, imageUpdate, inside, isBackgroundSet, isCursorSet, isDisplayable, isDoubleBuffered, isEnabled, isFocusable, isFocusOwner, isFocusTraversable, isFontSet, isForegroundSet, isLightweight, isMaximumSizeSet, isMinimumSizeSet, isOpaque, isPreferredSizeSet, isValid, isVisible, keyDown, keyUp, list, list, list, location, lostFocus, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus, paintAll, prepareImage, prepareImage, printAll, processComponentEvent, processFocusEvent, processHierarchyBoundsEvent, processHierarchyEvent, processInputMethodEvent, processKeyEvent, processMouseEvent, processMouseMotionEvent, processMouseWheelEvent, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, removePropertyChangeListener, removePropertyChangeListener, repaint, repaint, repaint, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, resize, resize, setBackground, setComponentOrientation, setDropTarget, setEnabled, setFocusable, setFocusTraversalKeysEnabled, setForeground, setIgnoreRepaint, setLocale, setLocation, setLocation, setMaximumSize, setName, setPreferredSize, show, size, toString, transferFocus, transferFocusUpCycle
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface java.awt.MenuContainer
getFont, postEvent
 

Constructor Detail

ModuleInfoWindow

public ModuleInfoWindow(App app,
                        JhoveBase base,
                        Module module)
Constructor.

Parameters:
app - The associated App object.
base - The associated JhoveBase object.
module - The Module whose information is to be presented.
Method Detail

showModule

public void showModule(Module module)
Formats and presents the module information in the window.



jhove/doc/edu/harvard/hul/ois/jhove/viewer/NoConfAlert.html0000644000707400001440000005415211510702363023073 0ustar garyusers NoConfAlert (JHOVE Documentation)

edu.harvard.hul.ois.jhove.viewer
Class NoConfAlert

java.lang.Object
  extended by java.awt.Component
      extended by java.awt.Container
          extended by java.awt.Window
              extended by java.awt.Dialog
                  extended by javax.swing.JDialog
                      extended by edu.harvard.hul.ois.jhove.viewer.NoConfAlert
All Implemented Interfaces:
java.awt.image.ImageObserver, java.awt.MenuContainer, java.io.Serializable, javax.accessibility.Accessible, javax.swing.RootPaneContainer, javax.swing.WindowConstants

public class NoConfAlert
extends javax.swing.JDialog

This class implements an alert which is posted when no configuration file can be found.

See Also:
Serialized Form

Nested Class Summary
 
Nested classes/interfaces inherited from class javax.swing.JDialog
javax.swing.JDialog.AccessibleJDialog
 
Nested classes/interfaces inherited from class java.awt.Dialog
java.awt.Dialog.AccessibleAWTDialog, java.awt.Dialog.ModalExclusionType, java.awt.Dialog.ModalityType
 
Nested classes/interfaces inherited from class java.awt.Window
java.awt.Window.AccessibleAWTWindow
 
Nested classes/interfaces inherited from class java.awt.Container
java.awt.Container.AccessibleAWTContainer
 
Nested classes/interfaces inherited from class java.awt.Component
java.awt.Component.AccessibleAWTComponent, java.awt.Component.BaselineResizeBehavior, java.awt.Component.BltBufferStrategy, java.awt.Component.FlipBufferStrategy
 
Field Summary
 
Fields inherited from class javax.swing.JDialog
accessibleContext, rootPane, rootPaneCheckingEnabled
 
Fields inherited from class java.awt.Dialog
DEFAULT_MODALITY_TYPE
 
Fields inherited from class java.awt.Component
BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENT
 
Fields inherited from interface javax.swing.WindowConstants
DISPOSE_ON_CLOSE, DO_NOTHING_ON_CLOSE, EXIT_ON_CLOSE, HIDE_ON_CLOSE
 
Fields inherited from interface java.awt.image.ImageObserver
ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH
 
Constructor Summary
NoConfAlert(javax.swing.JFrame owner)
           
 
Method Summary
 
Methods inherited from class javax.swing.JDialog
addImpl, createRootPane, dialogInit, getAccessibleContext, getContentPane, getDefaultCloseOperation, getGlassPane, getGraphics, getJMenuBar, getLayeredPane, getRootPane, getTransferHandler, isDefaultLookAndFeelDecorated, isRootPaneCheckingEnabled, paramString, processWindowEvent, remove, repaint, setContentPane, setDefaultCloseOperation, setDefaultLookAndFeelDecorated, setGlassPane, setJMenuBar, setLayeredPane, setLayout, setRootPane, setRootPaneCheckingEnabled, setTransferHandler, update
 
Methods inherited from class java.awt.Dialog
addNotify, getModalityType, getTitle, hide, isModal, isResizable, isUndecorated, setModal, setModalityType, setResizable, setTitle, setUndecorated, setVisible, show, toBack
 
Methods inherited from class java.awt.Window
addPropertyChangeListener, addPropertyChangeListener, addWindowFocusListener, addWindowListener, addWindowStateListener, applyResourceBundle, applyResourceBundle, createBufferStrategy, createBufferStrategy, dispose, getBufferStrategy, getFocusableWindowState, getFocusCycleRootAncestor, getFocusOwner, getFocusTraversalKeys, getGraphicsConfiguration, getIconImages, getInputContext, getListeners, getLocale, getModalExclusionType, getMostRecentFocusOwner, getOwnedWindows, getOwner, getOwnerlessWindows, getToolkit, getWarningString, getWindowFocusListeners, getWindowListeners, getWindows, getWindowStateListeners, isActive, isAlwaysOnTop, isAlwaysOnTopSupported, isFocusableWindow, isFocusCycleRoot, isFocused, isLocationByPlatform, isShowing, pack, paint, postEvent, processEvent, processWindowFocusEvent, processWindowStateEvent, removeNotify, removeWindowFocusListener, removeWindowListener, removeWindowStateListener, reshape, setAlwaysOnTop, setBounds, setBounds, setCursor, setFocusableWindowState, setFocusCycleRoot, setIconImage, setIconImages, setLocationByPlatform, setLocationRelativeTo, setMinimumSize, setModalExclusionType, setSize, setSize, toFront
 
Methods inherited from class java.awt.Container
add, add, add, add, add, addContainerListener, applyComponentOrientation, areFocusTraversalKeysSet, countComponents, deliverEvent, doLayout, findComponentAt, findComponentAt, getAlignmentX, getAlignmentY, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents, getComponentZOrder, getContainerListeners, getFocusTraversalPolicy, getInsets, getLayout, getMaximumSize, getMinimumSize, getMousePosition, getPreferredSize, insets, invalidate, isAncestorOf, isFocusCycleRoot, isFocusTraversalPolicyProvider, isFocusTraversalPolicySet, layout, list, list, locate, minimumSize, paintComponents, preferredSize, print, printComponents, processContainerEvent, remove, removeAll, removeContainerListener, setComponentZOrder, setFocusTraversalKeys, setFocusTraversalPolicy, setFocusTraversalPolicyProvider, setFont, transferFocusBackward, transferFocusDownCycle, validate, validateTree
 
Methods inherited from class java.awt.Component
action, add, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addInputMethodListener, addKeyListener, addMouseListener, addMouseMotionListener, addMouseWheelListener, bounds, checkImage, checkImage, coalesceEvents, contains, contains, createImage, createImage, createVolatileImage, createVolatileImage, disable, disableEvents, dispatchEvent, enable, enable, enableEvents, enableInputMethods, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, getBackground, getBaseline, getBaselineResizeBehavior, getBounds, getBounds, getColorModel, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusListeners, getFocusTraversalKeysEnabled, getFont, getFontMetrics, getForeground, getHeight, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputMethodListeners, getInputMethodRequests, getKeyListeners, getLocation, getLocation, getLocationOnScreen, getMouseListeners, getMouseMotionListeners, getMousePosition, getMouseWheelListeners, getName, getParent, getPeer, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getSize, getTreeLock, getWidth, getX, getY, gotFocus, handleEvent, hasFocus, imageUpdate, inside, isBackgroundSet, isCursorSet, isDisplayable, isDoubleBuffered, isEnabled, isFocusable, isFocusOwner, isFocusTraversable, isFontSet, isForegroundSet, isLightweight, isMaximumSizeSet, isMinimumSizeSet, isOpaque, isPreferredSizeSet, isValid, isVisible, keyDown, keyUp, list, list, list, location, lostFocus, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus, paintAll, prepareImage, prepareImage, printAll, processComponentEvent, processFocusEvent, processHierarchyBoundsEvent, processHierarchyEvent, processInputMethodEvent, processKeyEvent, processMouseEvent, processMouseMotionEvent, processMouseWheelEvent, remove, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, removePropertyChangeListener, removePropertyChangeListener, repaint, repaint, repaint, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, resize, resize, setBackground, setComponentOrientation, setDropTarget, setEnabled, setFocusable, setFocusTraversalKeysEnabled, setForeground, setIgnoreRepaint, setLocale, setLocation, setLocation, setMaximumSize, setName, setPreferredSize, show, size, toString, transferFocus, transferFocusUpCycle
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

NoConfAlert

public NoConfAlert(javax.swing.JFrame owner)


jhove/doc/edu/harvard/hul/ois/jhove/viewer/NumericField.html0000644000707400001440000006430011510702364023264 0ustar garyusers NumericField (JHOVE Documentation)

edu.harvard.hul.ois.jhove.viewer
Class NumericField

java.lang.Object
  extended by java.awt.Component
      extended by java.awt.Container
          extended by javax.swing.JComponent
              extended by javax.swing.text.JTextComponent
                  extended by javax.swing.JTextField
                      extended by javax.swing.JFormattedTextField
                          extended by edu.harvard.hul.ois.jhove.viewer.NumericField
All Implemented Interfaces:
java.awt.image.ImageObserver, java.awt.MenuContainer, java.io.Serializable, javax.accessibility.Accessible, javax.swing.Scrollable, javax.swing.SwingConstants

public class NumericField
extends javax.swing.JFormattedTextField

A JTextField which permits only decimal digits

Author:
Gary McGath
See Also:
Serialized Form

Nested Class Summary
 
Nested classes/interfaces inherited from class javax.swing.JFormattedTextField
javax.swing.JFormattedTextField.AbstractFormatter, javax.swing.JFormattedTextField.AbstractFormatterFactory
 
Nested classes/interfaces inherited from class javax.swing.JTextField
javax.swing.JTextField.AccessibleJTextField
 
Nested classes/interfaces inherited from class javax.swing.text.JTextComponent
javax.swing.text.JTextComponent.AccessibleJTextComponent, javax.swing.text.JTextComponent.DropLocation, javax.swing.text.JTextComponent.KeyBinding
 
Nested classes/interfaces inherited from class javax.swing.JComponent
javax.swing.JComponent.AccessibleJComponent
 
Nested classes/interfaces inherited from class java.awt.Container
java.awt.Container.AccessibleAWTContainer
 
Nested classes/interfaces inherited from class java.awt.Component
java.awt.Component.AccessibleAWTComponent, java.awt.Component.BaselineResizeBehavior, java.awt.Component.BltBufferStrategy, java.awt.Component.FlipBufferStrategy
 
Field Summary
 
Fields inherited from class javax.swing.JFormattedTextField
COMMIT, COMMIT_OR_REVERT, PERSIST, REVERT
 
Fields inherited from class javax.swing.JTextField
notifyAction
 
Fields inherited from class javax.swing.text.JTextComponent
DEFAULT_KEYMAP, FOCUS_ACCELERATOR_KEY
 
Fields inherited from class javax.swing.JComponent
accessibleContext, listenerList, TOOL_TIP_TEXT_KEY, ui, UNDEFINED_CONDITION, WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, WHEN_FOCUSED, WHEN_IN_FOCUSED_WINDOW
 
Fields inherited from class java.awt.Component
BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENT
 
Fields inherited from interface javax.swing.SwingConstants
BOTTOM, CENTER, EAST, HORIZONTAL, LEADING, LEFT, NEXT, NORTH, NORTH_EAST, NORTH_WEST, PREVIOUS, RIGHT, SOUTH, SOUTH_EAST, SOUTH_WEST, TOP, TRAILING, VERTICAL, WEST
 
Fields inherited from interface java.awt.image.ImageObserver
ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH
 
Constructor Summary
NumericField(int init)
           
 
Method Summary
 
Methods inherited from class javax.swing.JFormattedTextField
commitEdit, getActions, getFocusLostBehavior, getFormatter, getFormatterFactory, getUIClassID, getValue, invalidEdit, isEditValid, processFocusEvent, processInputMethodEvent, setDocument, setFocusLostBehavior, setFormatter, setFormatterFactory, setValue
 
Methods inherited from class javax.swing.JTextField
actionPropertyChanged, addActionListener, configurePropertiesFromAction, createActionPropertyChangeListener, createDefaultModel, fireActionPerformed, getAccessibleContext, getAction, getActionListeners, getColumns, getColumnWidth, getHorizontalAlignment, getHorizontalVisibility, getPreferredSize, getScrollOffset, isValidateRoot, paramString, postActionEvent, removeActionListener, scrollRectToVisible, setAction, setActionCommand, setColumns, setFont, setHorizontalAlignment, setScrollOffset
 
Methods inherited from class javax.swing.text.JTextComponent
addCaretListener, addInputMethodListener, addKeymap, copy, cut, fireCaretUpdate, getCaret, getCaretColor, getCaretListeners, getCaretPosition, getDisabledTextColor, getDocument, getDragEnabled, getDropLocation, getDropMode, getFocusAccelerator, getHighlighter, getInputMethodRequests, getKeymap, getKeymap, getMargin, getNavigationFilter, getPreferredScrollableViewportSize, getPrintable, getScrollableBlockIncrement, getScrollableTracksViewportHeight, getScrollableTracksViewportWidth, getScrollableUnitIncrement, getSelectedText, getSelectedTextColor, getSelectionColor, getSelectionEnd, getSelectionStart, getText, getText, getToolTipText, getUI, isEditable, loadKeymap, modelToView, moveCaretPosition, paste, print, print, print, read, removeCaretListener, removeKeymap, removeNotify, replaceSelection, select, selectAll, setCaret, setCaretColor, setCaretPosition, setComponentOrientation, setDisabledTextColor, setDragEnabled, setDropMode, setEditable, setFocusAccelerator, setHighlighter, setKeymap, setMargin, setNavigationFilter, setSelectedTextColor, setSelectionColor, setSelectionEnd, setSelectionStart, setText, setUI, updateUI, viewToModel, write
 
Methods inherited from class javax.swing.JComponent
addAncestorListener, addNotify, addVetoableChangeListener, computeVisibleRect, contains, createToolTip, disable, enable, firePropertyChange, firePropertyChange, firePropertyChange, fireVetoableChange, getActionForKeyStroke, getActionMap, getAlignmentX, getAlignmentY, getAncestorListeners, getAutoscrolls, getBaseline, getBaselineResizeBehavior, getBorder, getBounds, getClientProperty, getComponentGraphics, getComponentPopupMenu, getConditionForKeyStroke, getDebugGraphicsOptions, getDefaultLocale, getFontMetrics, getGraphics, getHeight, getInheritsPopupMenu, getInputMap, getInputMap, getInputVerifier, getInsets, getInsets, getListeners, getLocation, getMaximumSize, getMinimumSize, getNextFocusableComponent, getPopupLocation, getRegisteredKeyStrokes, getRootPane, getSize, getToolTipLocation, getToolTipText, getTopLevelAncestor, getTransferHandler, getVerifyInputWhenFocusTarget, getVetoableChangeListeners, getVisibleRect, getWidth, getX, getY, grabFocus, isDoubleBuffered, isLightweightComponent, isManagingFocus, isOpaque, isOptimizedDrawingEnabled, isPaintingForPrint, isPaintingTile, isRequestFocusEnabled, paint, paintBorder, paintChildren, paintComponent, paintImmediately, paintImmediately, print, printAll, printBorder, printChildren, printComponent, processComponentKeyEvent, processKeyBinding, processKeyEvent, processMouseEvent, processMouseMotionEvent, putClientProperty, registerKeyboardAction, registerKeyboardAction, removeAncestorListener, removeVetoableChangeListener, repaint, repaint, requestDefaultFocus, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, resetKeyboardActions, reshape, revalidate, setActionMap, setAlignmentX, setAlignmentY, setAutoscrolls, setBackground, setBorder, setComponentPopupMenu, setDebugGraphicsOptions, setDefaultLocale, setDoubleBuffered, setEnabled, setFocusTraversalKeys, setForeground, setInheritsPopupMenu, setInputMap, setInputVerifier, setMaximumSize, setMinimumSize, setNextFocusableComponent, setOpaque, setPreferredSize, setRequestFocusEnabled, setToolTipText, setTransferHandler, setUI, setVerifyInputWhenFocusTarget, setVisible, unregisterKeyboardAction, update
 
Methods inherited from class java.awt.Container
add, add, add, add, add, addContainerListener, addImpl, addPropertyChangeListener, addPropertyChangeListener, applyComponentOrientation, areFocusTraversalKeysSet, countComponents, deliverEvent, doLayout, findComponentAt, findComponentAt, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents, getComponentZOrder, getContainerListeners, getFocusTraversalKeys, getFocusTraversalPolicy, getLayout, getMousePosition, insets, invalidate, isAncestorOf, isFocusCycleRoot, isFocusCycleRoot, isFocusTraversalPolicyProvider, isFocusTraversalPolicySet, layout, list, list, locate, minimumSize, paintComponents, preferredSize, printComponents, processContainerEvent, processEvent, remove, remove, removeAll, removeContainerListener, setComponentZOrder, setFocusCycleRoot, setFocusTraversalPolicy, setFocusTraversalPolicyProvider, setLayout, transferFocusBackward, transferFocusDownCycle, validate, validateTree
 
Methods inherited from class java.awt.Component
action, add, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addKeyListener, addMouseListener, addMouseMotionListener, addMouseWheelListener, bounds, checkImage, checkImage, coalesceEvents, contains, createImage, createImage, createVolatileImage, createVolatileImage, disableEvents, dispatchEvent, enable, enableEvents, enableInputMethods, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, getBackground, getBounds, getColorModel, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusCycleRootAncestor, getFocusListeners, getFocusTraversalKeysEnabled, getFont, getForeground, getGraphicsConfiguration, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputContext, getInputMethodListeners, getKeyListeners, getLocale, getLocation, getLocationOnScreen, getMouseListeners, getMouseMotionListeners, getMousePosition, getMouseWheelListeners, getName, getParent, getPeer, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getToolkit, getTreeLock, gotFocus, handleEvent, hasFocus, hide, imageUpdate, inside, isBackgroundSet, isCursorSet, isDisplayable, isEnabled, isFocusable, isFocusOwner, isFocusTraversable, isFontSet, isForegroundSet, isLightweight, isMaximumSizeSet, isMinimumSizeSet, isPreferredSizeSet, isShowing, isValid, isVisible, keyDown, keyUp, list, list, list, location, lostFocus, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus, paintAll, postEvent, prepareImage, prepareImage, processComponentEvent, processHierarchyBoundsEvent, processHierarchyEvent, processMouseWheelEvent, remove, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, removePropertyChangeListener, removePropertyChangeListener, repaint, repaint, repaint, resize, resize, setBounds, setBounds, setCursor, setDropTarget, setFocusable, setFocusTraversalKeysEnabled, setIgnoreRepaint, setLocale, setLocation, setLocation, setName, setSize, setSize, show, show, size, toString, transferFocus, transferFocusUpCycle
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

NumericField

public NumericField(int init)


jhove/doc/edu/harvard/hul/ois/jhove/viewer/PrefsWindow.html0000644000707400001440000005701611510702364023173 0ustar garyusers PrefsWindow (JHOVE Documentation)

edu.harvard.hul.ois.jhove.viewer
Class PrefsWindow

java.lang.Object
  extended by java.awt.Component
      extended by java.awt.Container
          extended by java.awt.Window
              extended by java.awt.Dialog
                  extended by javax.swing.JDialog
                      extended by edu.harvard.hul.ois.jhove.viewer.PrefsWindow
All Implemented Interfaces:
java.awt.image.ImageObserver, java.awt.MenuContainer, java.io.Serializable, javax.accessibility.Accessible, javax.swing.RootPaneContainer, javax.swing.WindowConstants

public class PrefsWindow
extends javax.swing.JDialog

Window for setting preferences for the Jhove viewer.

Author:
Gary McGath
See Also:
Serialized Form

Nested Class Summary
 
Nested classes/interfaces inherited from class javax.swing.JDialog
javax.swing.JDialog.AccessibleJDialog
 
Nested classes/interfaces inherited from class java.awt.Dialog
java.awt.Dialog.AccessibleAWTDialog, java.awt.Dialog.ModalExclusionType, java.awt.Dialog.ModalityType
 
Nested classes/interfaces inherited from class java.awt.Window
java.awt.Window.AccessibleAWTWindow
 
Nested classes/interfaces inherited from class java.awt.Container
java.awt.Container.AccessibleAWTContainer
 
Nested classes/interfaces inherited from class java.awt.Component
java.awt.Component.AccessibleAWTComponent, java.awt.Component.BaselineResizeBehavior, java.awt.Component.BltBufferStrategy, java.awt.Component.FlipBufferStrategy
 
Field Summary
 
Fields inherited from class javax.swing.JDialog
accessibleContext, rootPane, rootPaneCheckingEnabled
 
Fields inherited from class java.awt.Dialog
DEFAULT_MODALITY_TYPE
 
Fields inherited from class java.awt.Component
BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENT
 
Fields inherited from interface javax.swing.WindowConstants
DISPOSE_ON_CLOSE, DO_NOTHING_ON_CLOSE, EXIT_ON_CLOSE, HIDE_ON_CLOSE
 
Fields inherited from interface java.awt.image.ImageObserver
ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH
 
Constructor Summary
PrefsWindow(JhoveWindow owner)
          Constructor.
 
Method Summary
 void saveAndShow()
          This is called when the window is made visible.
 
Methods inherited from class javax.swing.JDialog
addImpl, createRootPane, dialogInit, getAccessibleContext, getContentPane, getDefaultCloseOperation, getGlassPane, getGraphics, getJMenuBar, getLayeredPane, getRootPane, getTransferHandler, isDefaultLookAndFeelDecorated, isRootPaneCheckingEnabled, paramString, processWindowEvent, remove, repaint, setContentPane, setDefaultCloseOperation, setDefaultLookAndFeelDecorated, setGlassPane, setJMenuBar, setLayeredPane, setLayout, setRootPane, setRootPaneCheckingEnabled, setTransferHandler, update
 
Methods inherited from class java.awt.Dialog
addNotify, getModalityType, getTitle, hide, isModal, isResizable, isUndecorated, setModal, setModalityType, setResizable, setTitle, setUndecorated, setVisible, show, toBack
 
Methods inherited from class java.awt.Window
addPropertyChangeListener, addPropertyChangeListener, addWindowFocusListener, addWindowListener, addWindowStateListener, applyResourceBundle, applyResourceBundle, createBufferStrategy, createBufferStrategy, dispose, getBufferStrategy, getFocusableWindowState, getFocusCycleRootAncestor, getFocusOwner, getFocusTraversalKeys, getGraphicsConfiguration, getIconImages, getInputContext, getListeners, getLocale, getModalExclusionType, getMostRecentFocusOwner, getOwnedWindows, getOwner, getOwnerlessWindows, getToolkit, getWarningString, getWindowFocusListeners, getWindowListeners, getWindows, getWindowStateListeners, isActive, isAlwaysOnTop, isAlwaysOnTopSupported, isFocusableWindow, isFocusCycleRoot, isFocused, isLocationByPlatform, isShowing, pack, paint, postEvent, processEvent, processWindowFocusEvent, processWindowStateEvent, removeNotify, removeWindowFocusListener, removeWindowListener, removeWindowStateListener, reshape, setAlwaysOnTop, setBounds, setBounds, setCursor, setFocusableWindowState, setFocusCycleRoot, setIconImage, setIconImages, setLocationByPlatform, setLocationRelativeTo, setMinimumSize, setModalExclusionType, setSize, setSize, toFront
 
Methods inherited from class java.awt.Container
add, add, add, add, add, addContainerListener, applyComponentOrientation, areFocusTraversalKeysSet, countComponents, deliverEvent, doLayout, findComponentAt, findComponentAt, getAlignmentX, getAlignmentY, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents, getComponentZOrder, getContainerListeners, getFocusTraversalPolicy, getInsets, getLayout, getMaximumSize, getMinimumSize, getMousePosition, getPreferredSize, insets, invalidate, isAncestorOf, isFocusCycleRoot, isFocusTraversalPolicyProvider, isFocusTraversalPolicySet, layout, list, list, locate, minimumSize, paintComponents, preferredSize, print, printComponents, processContainerEvent, remove, removeAll, removeContainerListener, setComponentZOrder, setFocusTraversalKeys, setFocusTraversalPolicy, setFocusTraversalPolicyProvider, setFont, transferFocusBackward, transferFocusDownCycle, validate, validateTree
 
Methods inherited from class java.awt.Component
action, add, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addInputMethodListener, addKeyListener, addMouseListener, addMouseMotionListener, addMouseWheelListener, bounds, checkImage, checkImage, coalesceEvents, contains, contains, createImage, createImage, createVolatileImage, createVolatileImage, disable, disableEvents, dispatchEvent, enable, enable, enableEvents, enableInputMethods, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, getBackground, getBaseline, getBaselineResizeBehavior, getBounds, getBounds, getColorModel, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusListeners, getFocusTraversalKeysEnabled, getFont, getFontMetrics, getForeground, getHeight, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputMethodListeners, getInputMethodRequests, getKeyListeners, getLocation, getLocation, getLocationOnScreen, getMouseListeners, getMouseMotionListeners, getMousePosition, getMouseWheelListeners, getName, getParent, getPeer, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getSize, getTreeLock, getWidth, getX, getY, gotFocus, handleEvent, hasFocus, imageUpdate, inside, isBackgroundSet, isCursorSet, isDisplayable, isDoubleBuffered, isEnabled, isFocusable, isFocusOwner, isFocusTraversable, isFontSet, isForegroundSet, isLightweight, isMaximumSizeSet, isMinimumSizeSet, isOpaque, isPreferredSizeSet, isValid, isVisible, keyDown, keyUp, list, list, list, location, lostFocus, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus, paintAll, prepareImage, prepareImage, printAll, processComponentEvent, processFocusEvent, processHierarchyBoundsEvent, processHierarchyEvent, processInputMethodEvent, processKeyEvent, processMouseEvent, processMouseMotionEvent, processMouseWheelEvent, remove, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, removePropertyChangeListener, removePropertyChangeListener, repaint, repaint, repaint, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, resize, resize, setBackground, setComponentOrientation, setDropTarget, setEnabled, setFocusable, setFocusTraversalKeysEnabled, setForeground, setIgnoreRepaint, setLocale, setLocation, setLocation, setMaximumSize, setName, setPreferredSize, show, size, toString, transferFocus, transferFocusUpCycle
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

PrefsWindow

public PrefsWindow(JhoveWindow owner)
Constructor.

Method Detail

saveAndShow

public void saveAndShow()
This is called when the window is made visible. (For efficiency, it is hidden rather than being disposed when the user clicks OK or cancel.) The state of the dialog is saved, then it is made visible. If the user clicks Cancel, the state of the dialog will be restored.



jhove/doc/edu/harvard/hul/ois/jhove/viewer/ProgressWindow.html0000644000707400001440000007325211510702365023721 0ustar garyusers ProgressWindow (JHOVE Documentation)

edu.harvard.hul.ois.jhove.viewer
Class ProgressWindow

java.lang.Object
  extended by java.awt.Component
      extended by java.awt.Container
          extended by java.awt.Window
              extended by java.awt.Frame
                  extended by javax.swing.JFrame
                      extended by edu.harvard.hul.ois.jhove.viewer.ProgressWindow
All Implemented Interfaces:
java.awt.image.ImageObserver, java.awt.MenuContainer, java.io.Serializable, javax.accessibility.Accessible, javax.swing.RootPaneContainer, javax.swing.WindowConstants

public class ProgressWindow
extends javax.swing.JFrame

Window for showing progress of file processing. We may or may not have the total length available; if we do, we show the total length as part of the information. Normally we keep one window alive for the whole application, showing and hiding it as needed.

See Also:
Serialized Form

Nested Class Summary
 
Nested classes/interfaces inherited from class javax.swing.JFrame
javax.swing.JFrame.AccessibleJFrame
 
Nested classes/interfaces inherited from class java.awt.Frame
java.awt.Frame.AccessibleAWTFrame
 
Nested classes/interfaces inherited from class java.awt.Window
java.awt.Window.AccessibleAWTWindow
 
Nested classes/interfaces inherited from class java.awt.Container
java.awt.Container.AccessibleAWTContainer
 
Nested classes/interfaces inherited from class java.awt.Component
java.awt.Component.AccessibleAWTComponent, java.awt.Component.BaselineResizeBehavior, java.awt.Component.BltBufferStrategy, java.awt.Component.FlipBufferStrategy
 
Field Summary
static int DOWNLOADING
          Progress state: URI is being downloaded.
static int PROCESSING
          Progress state: Processing the document.
static int UNKNOWN
          Progress state: Indeterminate or not yet started.
 
Fields inherited from class javax.swing.JFrame
accessibleContext, EXIT_ON_CLOSE, rootPane, rootPaneCheckingEnabled
 
Fields inherited from class java.awt.Frame
CROSSHAIR_CURSOR, DEFAULT_CURSOR, E_RESIZE_CURSOR, HAND_CURSOR, ICONIFIED, MAXIMIZED_BOTH, MAXIMIZED_HORIZ, MAXIMIZED_VERT, MOVE_CURSOR, N_RESIZE_CURSOR, NE_RESIZE_CURSOR, NORMAL, NW_RESIZE_CURSOR, S_RESIZE_CURSOR, SE_RESIZE_CURSOR, SW_RESIZE_CURSOR, TEXT_CURSOR, W_RESIZE_CURSOR, WAIT_CURSOR
 
Fields inherited from class java.awt.Component
BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENT
 
Fields inherited from interface javax.swing.WindowConstants
DISPOSE_ON_CLOSE, DO_NOTHING_ON_CLOSE, HIDE_ON_CLOSE
 
Fields inherited from interface java.awt.image.ImageObserver
ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH
 
Constructor Summary
ProgressWindow(java.awt.event.ActionListener canceler)
          Constructor.
 
Method Summary
 void setByteCount(long count, boolean update)
          Update the byte count.
 void setContentLength(long length, boolean update)
          Set the total length to be displayed.
 void setDocName(java.lang.String name, boolean update)
          Set the name of the document being displayed.
 void setProgressState(int state, boolean update)
          Set the progress state.
 
Methods inherited from class javax.swing.JFrame
addImpl, createRootPane, frameInit, getAccessibleContext, getContentPane, getDefaultCloseOperation, getGlassPane, getGraphics, getJMenuBar, getLayeredPane, getRootPane, getTransferHandler, isDefaultLookAndFeelDecorated, isRootPaneCheckingEnabled, paramString, processWindowEvent, remove, repaint, setContentPane, setDefaultCloseOperation, setDefaultLookAndFeelDecorated, setGlassPane, setIconImage, setJMenuBar, setLayeredPane, setLayout, setRootPane, setRootPaneCheckingEnabled, setTransferHandler, update
 
Methods inherited from class java.awt.Frame
addNotify, getCursorType, getExtendedState, getFrames, getIconImage, getMaximizedBounds, getMenuBar, getState, getTitle, isResizable, isUndecorated, remove, removeNotify, setCursor, setExtendedState, setMaximizedBounds, setMenuBar, setResizable, setState, setTitle, setUndecorated
 
Methods inherited from class java.awt.Window
addPropertyChangeListener, addPropertyChangeListener, addWindowFocusListener, addWindowListener, addWindowStateListener, applyResourceBundle, applyResourceBundle, createBufferStrategy, createBufferStrategy, dispose, getBufferStrategy, getFocusableWindowState, getFocusCycleRootAncestor, getFocusOwner, getFocusTraversalKeys, getGraphicsConfiguration, getIconImages, getInputContext, getListeners, getLocale, getModalExclusionType, getMostRecentFocusOwner, getOwnedWindows, getOwner, getOwnerlessWindows, getToolkit, getWarningString, getWindowFocusListeners, getWindowListeners, getWindows, getWindowStateListeners, hide, isActive, isAlwaysOnTop, isAlwaysOnTopSupported, isFocusableWindow, isFocusCycleRoot, isFocused, isLocationByPlatform, isShowing, pack, paint, postEvent, processEvent, processWindowFocusEvent, processWindowStateEvent, removeWindowFocusListener, removeWindowListener, removeWindowStateListener, reshape, setAlwaysOnTop, setBounds, setBounds, setCursor, setFocusableWindowState, setFocusCycleRoot, setIconImages, setLocationByPlatform, setLocationRelativeTo, setMinimumSize, setModalExclusionType, setSize, setSize, setVisible, show, toBack, toFront
 
Methods inherited from class java.awt.Container
add, add, add, add, add, addContainerListener, applyComponentOrientation, areFocusTraversalKeysSet, countComponents, deliverEvent, doLayout, findComponentAt, findComponentAt, getAlignmentX, getAlignmentY, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents, getComponentZOrder, getContainerListeners, getFocusTraversalPolicy, getInsets, getLayout, getMaximumSize, getMinimumSize, getMousePosition, getPreferredSize, insets, invalidate, isAncestorOf, isFocusCycleRoot, isFocusTraversalPolicyProvider, isFocusTraversalPolicySet, layout, list, list, locate, minimumSize, paintComponents, preferredSize, print, printComponents, processContainerEvent, remove, removeAll, removeContainerListener, setComponentZOrder, setFocusTraversalKeys, setFocusTraversalPolicy, setFocusTraversalPolicyProvider, setFont, transferFocusBackward, transferFocusDownCycle, validate, validateTree
 
Methods inherited from class java.awt.Component
action, add, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addInputMethodListener, addKeyListener, addMouseListener, addMouseMotionListener, addMouseWheelListener, bounds, checkImage, checkImage, coalesceEvents, contains, contains, createImage, createImage, createVolatileImage, createVolatileImage, disable, disableEvents, dispatchEvent, enable, enable, enableEvents, enableInputMethods, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, getBackground, getBaseline, getBaselineResizeBehavior, getBounds, getBounds, getColorModel, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusListeners, getFocusTraversalKeysEnabled, getFont, getFontMetrics, getForeground, getHeight, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputMethodListeners, getInputMethodRequests, getKeyListeners, getLocation, getLocation, getLocationOnScreen, getMouseListeners, getMouseMotionListeners, getMousePosition, getMouseWheelListeners, getName, getParent, getPeer, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getSize, getTreeLock, getWidth, getX, getY, gotFocus, handleEvent, hasFocus, imageUpdate, inside, isBackgroundSet, isCursorSet, isDisplayable, isDoubleBuffered, isEnabled, isFocusable, isFocusOwner, isFocusTraversable, isFontSet, isForegroundSet, isLightweight, isMaximumSizeSet, isMinimumSizeSet, isOpaque, isPreferredSizeSet, isValid, isVisible, keyDown, keyUp, list, list, list, location, lostFocus, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus, paintAll, prepareImage, prepareImage, printAll, processComponentEvent, processFocusEvent, processHierarchyBoundsEvent, processHierarchyEvent, processInputMethodEvent, processKeyEvent, processMouseEvent, processMouseMotionEvent, processMouseWheelEvent, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, removePropertyChangeListener, removePropertyChangeListener, repaint, repaint, repaint, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, resize, resize, setBackground, setComponentOrientation, setDropTarget, setEnabled, setFocusable, setFocusTraversalKeysEnabled, setForeground, setIgnoreRepaint, setLocale, setLocation, setLocation, setMaximumSize, setName, setPreferredSize, show, size, toString, transferFocus, transferFocusUpCycle
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface java.awt.MenuContainer
getFont, postEvent
 

Field Detail

UNKNOWN

public static final int UNKNOWN
Progress state: Indeterminate or not yet started.

See Also:
Constant Field Values

DOWNLOADING

public static final int DOWNLOADING
Progress state: URI is being downloaded.

See Also:
Constant Field Values

PROCESSING

public static final int PROCESSING
Progress state: Processing the document.

See Also:
Constant Field Values
Constructor Detail

ProgressWindow

public ProgressWindow(java.awt.event.ActionListener canceler)
Constructor.

Parameters:
canceler - An ActionListener which responds to the Cancel button.
Method Detail

setContentLength

public void setContentLength(long length,
                             boolean update)
Set the total length to be displayed. If this is set to a positive number, then the display will show "xxxx bytes of yyyy". If it is not set, or is set to a zero or negative number, the display will show "xxxx bytes".

Parameters:
length - The length to display
update - If true, requests a display update.

setProgressState

public void setProgressState(int state,
                             boolean update)
Set the progress state.

Parameters:
state - The state value to assign. Valid values are UNKNOWN, DOWNLOADING, and PROCESSING.
update - If true, requests a display update

setDocName

public void setDocName(java.lang.String name,
                       boolean update)
Set the name of the document being displayed.

Parameters:
name - The file name or URL to display
update - If true, requests a display update

setByteCount

public void setByteCount(long count,
                         boolean update)
Update the byte count. Setting the count to a negative number blanks the byte count pane.

Parameters:
count - The new byte count value
update - If true, requests a display update


jhove/doc/edu/harvard/hul/ois/jhove/viewer/RepTreeRoot.html0000644000707400001440000003336511510702365023140 0ustar garyusers RepTreeRoot (JHOVE Documentation)

edu.harvard.hul.ois.jhove.viewer
Class RepTreeRoot

java.lang.Object
  extended by javax.swing.tree.DefaultMutableTreeNode
      extended by edu.harvard.hul.ois.jhove.viewer.RepTreeRoot
All Implemented Interfaces:
java.io.Serializable, java.lang.Cloneable, javax.swing.tree.MutableTreeNode, javax.swing.tree.TreeNode

public class RepTreeRoot
extends javax.swing.tree.DefaultMutableTreeNode

This subclass of DefaultMutableTreeNode simply adds a method for constructing the tree. All nodes in the tree except for the root will be plain DefaultMutablereeNodes.

See Also:
Serialized Form

Field Summary
 
Fields inherited from class javax.swing.tree.DefaultMutableTreeNode
allowsChildren, children, EMPTY_ENUMERATION, parent, userObject
 
Constructor Summary
RepTreeRoot(RepInfo info, App app, JhoveBase base)
          Constructor.
 
Method Summary
 int getIndexOfChild(java.lang.Object parent, java.lang.Object child)
          Find the index of an object in its parent.
 
Methods inherited from class javax.swing.tree.DefaultMutableTreeNode
add, breadthFirstEnumeration, children, clone, depthFirstEnumeration, getAllowsChildren, getChildAfter, getChildAt, getChildBefore, getChildCount, getDepth, getFirstChild, getFirstLeaf, getIndex, getLastChild, getLastLeaf, getLeafCount, getLevel, getNextLeaf, getNextNode, getNextSibling, getParent, getPath, getPathToRoot, getPreviousLeaf, getPreviousNode, getPreviousSibling, getRoot, getSharedAncestor, getSiblingCount, getUserObject, getUserObjectPath, insert, isLeaf, isNodeAncestor, isNodeChild, isNodeDescendant, isNodeRelated, isNodeSibling, isRoot, pathFromAncestorEnumeration, postorderEnumeration, preorderEnumeration, remove, remove, removeAllChildren, removeFromParent, setAllowsChildren, setParent, setUserObject, toString
 
Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

RepTreeRoot

public RepTreeRoot(RepInfo info,
                   App app,
                   JhoveBase base)
Constructor.

Parameters:
info - The RepInfo object whose contents are to be displayed.
app - The App object under which we're operating.
Method Detail

getIndexOfChild

public int getIndexOfChild(java.lang.Object parent,
                           java.lang.Object child)
Find the index of an object in its parent. Understands the Jhove property structure.



jhove/doc/edu/harvard/hul/ois/jhove/viewer/ViewCellRenderer.html0000644000707400001440000002433510771557567024150 0ustar garyusers ViewCellRenderer (JHOVE Documentation)

edu.harvard.hul.ois.jhove.viewer
Class ViewCellRenderer

java.lang.Object
  |
  +--edu.harvard.hul.ois.jhove.viewer.ViewCellRenderer
All Implemented Interfaces:
javax.swing.tree.TreeCellRenderer

public class ViewCellRenderer
extends java.lang.Object
implements javax.swing.tree.TreeCellRenderer


Constructor Summary
ViewCellRenderer()
           
 
Method Summary
 java.awt.Component getTreeCellRendererComponent(javax.swing.JTree tree, java.lang.Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ViewCellRenderer

public ViewCellRenderer()
Method Detail

getTreeCellRendererComponent

public java.awt.Component getTreeCellRendererComponent(javax.swing.JTree tree,
                                                       java.lang.Object value,
                                                       boolean selected,
                                                       boolean expanded,
                                                       boolean leaf,
                                                       int row,
                                                       boolean hasFocus)
Specified by:
getTreeCellRendererComponent in interface javax.swing.tree.TreeCellRenderer


jhove/doc/edu/harvard/hul/ois/jhove/viewer/ViewHandler.html0000644000707400001440000007530111510702365023132 0ustar garyusers ViewHandler (JHOVE Documentation)

edu.harvard.hul.ois.jhove.viewer
Class ViewHandler

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.HandlerBase
      extended by edu.harvard.hul.ois.jhove.viewer.ViewHandler
All Implemented Interfaces:
OutputHandler

public class ViewHandler
extends HandlerBase

This is an output handler which connects JHOVE output to the Swing interface of the viewer application. It is responsible for creating appropriate windows and making them known to (?).

Author:
Gary McGath

Nested Class Summary
 
Nested classes/interfaces inherited from class edu.harvard.hul.ois.jhove.HandlerBase
HandlerBase.SynchronizedDateFormat
 
Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.HandlerBase
_app, _base, _date, _defaultParams, _encoding, _init, _je, _level, _logger, _name, _note, _param, _release, _rights, _specification, _vendor, _writer, date, dateTime, iso8601
 
Constructor Summary
ViewHandler(JhoveWindow jhwin, App app, JhoveBase base)
          Creates a ViewHandler.
 
Method Summary
 void show()
          Outputs minimal information about the application
 void show(App app)
          Outputs detailed information about the application, including configuration, available modules and handlers, etc.
 void show(Module module)
          Outputs information about a Module
 void show(OutputHandler handler)
          Outputs information about the OutputHandler specified in the parameter.
 void show(RepInfo info)
          Outputs the information contained in a RepInfo object.
 void showFooter()
          Complete the output.
 void showHeader()
          Do the initial output.
 
Methods inherited from class edu.harvard.hul.ois.jhove.HandlerBase
analyze, applyDefaultParams, close, doctype, doctype, doubleArray, element, element, element, element, elementEnd, elementStart, elementStart, endDirectory, getDate, getEncoding, getIndent, getName, getNote, getRelease, getRights, getSpecification, getVendor, init, integerArray, integerArray, longArray, okToProcess, param, rationalArray, rationalArray10, reset, resetParams, setApp, setBase, setDefaultParams, setEncoding, setWriter, startDirectory, toDateTime, xmlDecl, xmlDecl
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ViewHandler

public ViewHandler(JhoveWindow jhwin,
                   App app,
                   JhoveBase base)
Creates a ViewHandler.

Parameters:
jhwin - The JhoveWindow which acts as the parent to output windows.
Method Detail

showHeader

public void showHeader()
Do the initial output. This needs to set up the window.

Specified by:
showHeader in interface OutputHandler
Specified by:
showHeader in class HandlerBase

show

public void show(RepInfo info)
Outputs the information contained in a RepInfo object. showHeader must be called to set up the ViewWindow before this is called. I need to break out part of the ViewWindow code to here so it can produce the output for one file.

Specified by:
show in interface OutputHandler
Specified by:
show in class HandlerBase

show

public void show()
Description copied from class: HandlerBase
Outputs minimal information about the application

Specified by:
show in interface OutputHandler
Specified by:
show in class HandlerBase

show

public void show(App app)
Description copied from class: HandlerBase
Outputs detailed information about the application, including configuration, available modules and handlers, etc.

Specified by:
show in interface OutputHandler
Specified by:
show in class HandlerBase

show

public void show(Module module)
Description copied from class: HandlerBase
Outputs information about a Module

Specified by:
show in interface OutputHandler
Specified by:
show in class HandlerBase

showFooter

public void showFooter()
Complete the output. Does this have to do anything?

Specified by:
showFooter in interface OutputHandler
Specified by:
showFooter in class HandlerBase

show

public void show(OutputHandler handler)
Outputs information about the OutputHandler specified in the parameter. Since this never should occur in a normal list of handlers, it's unnecessary to do anything (I think).

Specified by:
show in interface OutputHandler
Specified by:
show in class HandlerBase


jhove/doc/edu/harvard/hul/ois/jhove/viewer/ViewWindow.html0000644000707400001440000007401311510702365023023 0ustar garyusers ViewWindow (JHOVE Documentation)

edu.harvard.hul.ois.jhove.viewer
Class ViewWindow

java.lang.Object
  extended by java.awt.Component
      extended by java.awt.Container
          extended by java.awt.Window
              extended by java.awt.Frame
                  extended by javax.swing.JFrame
                      extended by edu.harvard.hul.ois.jhove.viewer.InfoWindow
                          extended by edu.harvard.hul.ois.jhove.viewer.ViewWindow
All Implemented Interfaces:
java.awt.image.ImageObserver, java.awt.MenuContainer, java.io.Serializable, javax.accessibility.Accessible, javax.swing.RootPaneContainer, javax.swing.WindowConstants

public class ViewWindow
extends InfoWindow

This is the main window for viewing the results of a file analysis. Multiple instances of InfoWindow are allowed; they are deleted when closed. The URI of the analyzed object is used as the window title. A JTree is used to display the information. The earlier version of this class displayed a single file. This version is controlled by a ViewHandler, which displays multiple files within a single window. There can still be multiple ViewWindows, but each will come from a separate operation. Dragging a directory to the main window will produce a single ViewWindow; dragging a group of files will produce multiple windows.

See Also:
Serialized Form

Nested Class Summary
 
Nested classes/interfaces inherited from class javax.swing.JFrame
javax.swing.JFrame.AccessibleJFrame
 
Nested classes/interfaces inherited from class java.awt.Frame
java.awt.Frame.AccessibleAWTFrame
 
Nested classes/interfaces inherited from class java.awt.Window
java.awt.Window.AccessibleAWTWindow
 
Nested classes/interfaces inherited from class java.awt.Container
java.awt.Container.AccessibleAWTContainer
 
Nested classes/interfaces inherited from class java.awt.Component
java.awt.Component.AccessibleAWTComponent, java.awt.Component.BaselineResizeBehavior, java.awt.Component.BltBufferStrategy, java.awt.Component.FlipBufferStrategy
 
Field Summary
 
Fields inherited from class edu.harvard.hul.ois.jhove.viewer.InfoWindow
_app, _dateFmt, eol
 
Fields inherited from class javax.swing.JFrame
accessibleContext, EXIT_ON_CLOSE, rootPane, rootPaneCheckingEnabled
 
Fields inherited from class java.awt.Frame
CROSSHAIR_CURSOR, DEFAULT_CURSOR, E_RESIZE_CURSOR, HAND_CURSOR, ICONIFIED, MAXIMIZED_BOTH, MAXIMIZED_HORIZ, MAXIMIZED_VERT, MOVE_CURSOR, N_RESIZE_CURSOR, NE_RESIZE_CURSOR, NORMAL, NW_RESIZE_CURSOR, S_RESIZE_CURSOR, SE_RESIZE_CURSOR, SW_RESIZE_CURSOR, TEXT_CURSOR, W_RESIZE_CURSOR, WAIT_CURSOR
 
Fields inherited from class java.awt.Component
BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENT
 
Fields inherited from interface javax.swing.WindowConstants
DISPOSE_ON_CLOSE, DO_NOTHING_ON_CLOSE, HIDE_ON_CLOSE
 
Fields inherited from interface java.awt.image.ImageObserver
ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH
 
Constructor Summary
ViewWindow(App app, JhoveBase base, JhoveWindow jhwin)
          Constructor.
 
Method Summary
 void addRepInfo(RepInfo info, App app, JhoveBase base)
          Appends the representation of a RepInfo object to the tree.
protected  void closeFromMenu()
          Invoked when the "Close" menu item is selected.
 void expandRows()
          Expands the tree appropriately when everything is build.
 
Methods inherited from class edu.harvard.hul.ois.jhove.viewer.InfoWindow
doSaveDialog, selectHandler, setSaveActionListener
 
Methods inherited from class javax.swing.JFrame
addImpl, createRootPane, frameInit, getAccessibleContext, getContentPane, getDefaultCloseOperation, getGlassPane, getGraphics, getJMenuBar, getLayeredPane, getRootPane, getTransferHandler, isDefaultLookAndFeelDecorated, isRootPaneCheckingEnabled, paramString, processWindowEvent, remove, repaint, setContentPane, setDefaultCloseOperation, setDefaultLookAndFeelDecorated, setGlassPane, setIconImage, setJMenuBar, setLayeredPane, setLayout, setRootPane, setRootPaneCheckingEnabled, setTransferHandler, update
 
Methods inherited from class java.awt.Frame
addNotify, getCursorType, getExtendedState, getFrames, getIconImage, getMaximizedBounds, getMenuBar, getState, getTitle, isResizable, isUndecorated, remove, removeNotify, setCursor, setExtendedState, setMaximizedBounds, setMenuBar, setResizable, setState, setTitle, setUndecorated
 
Methods inherited from class java.awt.Window
addPropertyChangeListener, addPropertyChangeListener, addWindowFocusListener, addWindowListener, addWindowStateListener, applyResourceBundle, applyResourceBundle, createBufferStrategy, createBufferStrategy, dispose, getBufferStrategy, getFocusableWindowState, getFocusCycleRootAncestor, getFocusOwner, getFocusTraversalKeys, getGraphicsConfiguration, getIconImages, getInputContext, getListeners, getLocale, getModalExclusionType, getMostRecentFocusOwner, getOwnedWindows, getOwner, getOwnerlessWindows, getToolkit, getWarningString, getWindowFocusListeners, getWindowListeners, getWindows, getWindowStateListeners, hide, isActive, isAlwaysOnTop, isAlwaysOnTopSupported, isFocusableWindow, isFocusCycleRoot, isFocused, isLocationByPlatform, isShowing, pack, paint, postEvent, processEvent, processWindowFocusEvent, processWindowStateEvent, removeWindowFocusListener, removeWindowListener, removeWindowStateListener, reshape, setAlwaysOnTop, setBounds, setBounds, setCursor, setFocusableWindowState, setFocusCycleRoot, setIconImages, setLocationByPlatform, setLocationRelativeTo, setMinimumSize, setModalExclusionType, setSize, setSize, setVisible, show, toBack, toFront
 
Methods inherited from class java.awt.Container
add, add, add, add, add, addContainerListener, applyComponentOrientation, areFocusTraversalKeysSet, countComponents, deliverEvent, doLayout, findComponentAt, findComponentAt, getAlignmentX, getAlignmentY, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents, getComponentZOrder, getContainerListeners, getFocusTraversalPolicy, getInsets, getLayout, getMaximumSize, getMinimumSize, getMousePosition, getPreferredSize, insets, invalidate, isAncestorOf, isFocusCycleRoot, isFocusTraversalPolicyProvider, isFocusTraversalPolicySet, layout, list, list, locate, minimumSize, paintComponents, preferredSize, print, printComponents, processContainerEvent, remove, removeAll, removeContainerListener, setComponentZOrder, setFocusTraversalKeys, setFocusTraversalPolicy, setFocusTraversalPolicyProvider, setFont, transferFocusBackward, transferFocusDownCycle, validate, validateTree
 
Methods inherited from class java.awt.Component
action, add, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addInputMethodListener, addKeyListener, addMouseListener, addMouseMotionListener, addMouseWheelListener, bounds, checkImage, checkImage, coalesceEvents, contains, contains, createImage, createImage, createVolatileImage, createVolatileImage, disable, disableEvents, dispatchEvent, enable, enable, enableEvents, enableInputMethods, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, getBackground, getBaseline, getBaselineResizeBehavior, getBounds, getBounds, getColorModel, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusListeners, getFocusTraversalKeysEnabled, getFont, getFontMetrics, getForeground, getHeight, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputMethodListeners, getInputMethodRequests, getKeyListeners, getLocation, getLocation, getLocationOnScreen, getMouseListeners, getMouseMotionListeners, getMousePosition, getMouseWheelListeners, getName, getParent, getPeer, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getSize, getTreeLock, getWidth, getX, getY, gotFocus, handleEvent, hasFocus, imageUpdate, inside, isBackgroundSet, isCursorSet, isDisplayable, isDoubleBuffered, isEnabled, isFocusable, isFocusOwner, isFocusTraversable, isFontSet, isForegroundSet, isLightweight, isMaximumSizeSet, isMinimumSizeSet, isOpaque, isPreferredSizeSet, isValid, isVisible, keyDown, keyUp, list, list, list, location, lostFocus, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus, paintAll, prepareImage, prepareImage, printAll, processComponentEvent, processFocusEvent, processHierarchyBoundsEvent, processHierarchyEvent, processInputMethodEvent, processKeyEvent, processMouseEvent, processMouseMotionEvent, processMouseWheelEvent, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, removePropertyChangeListener, removePropertyChangeListener, repaint, repaint, repaint, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, resize, resize, setBackground, setComponentOrientation, setDropTarget, setEnabled, setFocusable, setFocusTraversalKeysEnabled, setForeground, setIgnoreRepaint, setLocale, setLocation, setLocation, setMaximumSize, setName, setPreferredSize, show, size, toString, transferFocus, transferFocusUpCycle
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface java.awt.MenuContainer
getFont, postEvent
 

Constructor Detail

ViewWindow

public ViewWindow(App app,
                  JhoveBase base,
                  JhoveWindow jhwin)
Constructor.

Parameters:
app - The associated App object.
base - The JhoveBase object for the application.
jhwin - The main JhoveWindow.
Method Detail

addRepInfo

public void addRepInfo(RepInfo info,
                       App app,
                       JhoveBase base)
Appends the representation of a RepInfo object to the tree. The RepInfo object is saved into a list so that the window contents can be saved to a file later.


expandRows

public void expandRows()
Expands the tree appropriately when everything is build.


closeFromMenu

protected void closeFromMenu()
Invoked when the "Close" menu item is selected. Overrides the parent class's method to delete the window rather than hiding it.

Overrides:
closeFromMenu in class InfoWindow


jhove/doc/edu/harvard/hul/ois/jhove/viewer/package-frame.html0000644000707400001440000000471411510702366023406 0ustar garyusers edu.harvard.hul.ois.jhove.viewer (JHOVE Documentation) edu.harvard.hul.ois.jhove.viewer
Classes 
AppInfoWindow
ConfigWindow
ConfigWriter
InfoWindow
JhoveWindow
MainScreen
ModuleInfoWindow
NoConfAlert
NumericField
PrefsWindow
ProgressWindow
RepTreeRoot
ViewHandler
ViewWindow
jhove/doc/edu/harvard/hul/ois/jhove/viewer/package-summary.html0000644000707400001440000002437611510702366024017 0ustar garyusers edu.harvard.hul.ois.jhove.viewer (JHOVE Documentation)

Package edu.harvard.hul.ois.jhove.viewer

Contains the classes for the JHOVE GUI.

See:
          Description

Class Summary
AppInfoWindow This window is for presenting information about the JHOVE application.
ConfigWindow Window for high-level editing of the application's configuration file.
ConfigWriter Class to write out configuration information to the configuration file.
InfoWindow An abstract superclass for windows that display information and can be saved to a file.
JhoveWindow Main window of JHoveViewer application.
MainScreen Static methods for positioning windows on the main screen.
ModuleInfoWindow This window is for presenting information about the selected module.
NoConfAlert This class implements an alert which is posted when no configuration file can be found.
NumericField A JTextField which permits only decimal digits
PrefsWindow Window for setting preferences for the Jhove viewer.
ProgressWindow Window for showing progress of file processing.
RepTreeRoot This subclass of DefaultMutableTreeNode simply adds a method for constructing the tree.
ViewHandler This is an output handler which connects JHOVE output to the Swing interface of the viewer application.
ViewWindow This is the main window for viewing the results of a file analysis.
 

Package edu.harvard.hul.ois.jhove.viewer Description

Contains the classes for the JHOVE GUI. These are based on the Swing classes and work with a variety of windowing environments.



jhove/doc/edu/harvard/hul/ois/jhove/viewer/package-tree.html0000644000707400001440000002471511510702366023256 0ustar garyusers edu.harvard.hul.ois.jhove.viewer Class Hierarchy (JHOVE Documentation)

Hierarchy For Package edu.harvard.hul.ois.jhove.viewer

Package Hierarchies:
All Packages

Class Hierarchy

  • java.lang.Object
    • java.awt.Component (implements java.awt.image.ImageObserver, java.awt.MenuContainer, java.io.Serializable)
      • java.awt.Container
        • javax.swing.JComponent (implements java.io.Serializable)
          • javax.swing.text.JTextComponent (implements javax.accessibility.Accessible, javax.swing.Scrollable)
            • javax.swing.JTextField (implements javax.swing.SwingConstants)
              • javax.swing.JFormattedTextField
        • java.awt.Window (implements javax.accessibility.Accessible)
          • java.awt.Dialog
            • javax.swing.JDialog (implements javax.accessibility.Accessible, javax.swing.RootPaneContainer, javax.swing.WindowConstants)
          • java.awt.Frame (implements java.awt.MenuContainer)
            • javax.swing.JFrame (implements javax.accessibility.Accessible, javax.swing.RootPaneContainer, javax.swing.WindowConstants)
    • edu.harvard.hul.ois.jhove.viewer.ConfigWriter
    • javax.swing.tree.DefaultMutableTreeNode (implements java.lang.Cloneable, javax.swing.tree.MutableTreeNode, java.io.Serializable)
    • edu.harvard.hul.ois.jhove.HandlerBase (implements edu.harvard.hul.ois.jhove.OutputHandler)
    • edu.harvard.hul.ois.jhove.viewer.JhoveWindow.InvisibleFilenameFilter (implements java.io.FilenameFilter)
    • edu.harvard.hul.ois.jhove.viewer.MainScreen


jhove/doc/edu/harvard/hul/ois/jhove/HandlerBase.SynchronizedDateFormat.html0000644000707400001440000003534511510702351026215 0ustar garyusers HandlerBase.SynchronizedDateFormat (JHOVE Documentation)

edu.harvard.hul.ois.jhove
Class HandlerBase.SynchronizedDateFormat

java.lang.Object
  extended by java.text.Format
      extended by java.text.DateFormat
          extended by java.text.SimpleDateFormat
              extended by edu.harvard.hul.ois.jhove.HandlerBase.SynchronizedDateFormat
All Implemented Interfaces:
java.io.Serializable, java.lang.Cloneable
Enclosing class:
HandlerBase

public static class HandlerBase.SynchronizedDateFormat
extends java.text.SimpleDateFormat

A DateFormat class to address an issue of thread safety.

See Also:
Serialized Form

Nested Class Summary
 
Nested classes/interfaces inherited from class java.text.DateFormat
java.text.DateFormat.Field
 
Field Summary
 
Fields inherited from class java.text.DateFormat
AM_PM_FIELD, calendar, DATE_FIELD, DAY_OF_WEEK_FIELD, DAY_OF_WEEK_IN_MONTH_FIELD, DAY_OF_YEAR_FIELD, DEFAULT, ERA_FIELD, FULL, HOUR_OF_DAY0_FIELD, HOUR_OF_DAY1_FIELD, HOUR0_FIELD, HOUR1_FIELD, LONG, MEDIUM, MILLISECOND_FIELD, MINUTE_FIELD, MONTH_FIELD, numberFormat, SECOND_FIELD, SHORT, TIMEZONE_FIELD, WEEK_OF_MONTH_FIELD, WEEK_OF_YEAR_FIELD, YEAR_FIELD
 
Constructor Summary
HandlerBase.SynchronizedDateFormat(java.lang.String pattern)
           
 
Method Summary
 java.lang.StringBuffer format(java.util.Date date, java.lang.StringBuffer toAppendTo, java.text.FieldPosition pos)
           
 
Methods inherited from class java.text.SimpleDateFormat
applyLocalizedPattern, applyPattern, clone, equals, formatToCharacterIterator, get2DigitYearStart, getDateFormatSymbols, hashCode, parse, set2DigitYearStart, setDateFormatSymbols, toLocalizedPattern, toPattern
 
Methods inherited from class java.text.DateFormat
format, format, getAvailableLocales, getCalendar, getDateInstance, getDateInstance, getDateInstance, getDateTimeInstance, getDateTimeInstance, getDateTimeInstance, getInstance, getNumberFormat, getTimeInstance, getTimeInstance, getTimeInstance, getTimeZone, isLenient, parse, parseObject, setCalendar, setLenient, setNumberFormat, setTimeZone
 
Methods inherited from class java.text.Format
format, parseObject
 
Methods inherited from class java.lang.Object
finalize, getClass, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

HandlerBase.SynchronizedDateFormat

public HandlerBase.SynchronizedDateFormat(java.lang.String pattern)
Method Detail

format

public java.lang.StringBuffer format(java.util.Date date,
                                     java.lang.StringBuffer toAppendTo,
                                     java.text.FieldPosition pos)
Overrides:
format in class java.text.SimpleDateFormat


jhove/doc/edu/harvard/hul/ois/jhove/TextMDMetadata.html0000644000707400001440000011212411510702352022216 0ustar garyusers TextMDMetadata (JHOVE Documentation)

edu.harvard.hul.ois.jhove
Class TextMDMetadata

java.lang.Object
  extended by edu.harvard.hul.ois.jhove.TextMDMetadata

public class TextMDMetadata
extends java.lang.Object

Encapsulation of the textMD metadata for text files. See http://www.loc.gov/standards/textMd for more information.

Author:
Thomas Ledoux

Field Summary
static java.lang.String[] BYTE_ORDER
          Uses enumerated values of 'big', 'little', and 'middle' endian.
static int BYTE_ORDER_BIG
           
static int BYTE_ORDER_LITTLE
           
static int BYTE_ORDER_MIDDLE
           
static java.lang.String CHARSET_ASCII
           
static java.lang.String CHARSET_ISO8859_1
           
static java.lang.String CHARSET_UTF8
           
static java.lang.String DEFAULT_LOCATION
           
protected static java.util.Map fromISO_639_2_T2B
          Map from ISO 639/2 T to ISO 639/2 B
static java.lang.String[] LINEBREAK
          Uses enumerated values of 'CR', 'LF' and 'CR/LF' for the idenntification of the linebreak.
static int LINEBREAK_CR
           
static int LINEBREAK_CRLF
           
static int LINEBREAK_LF
           
static java.lang.String NAMESPACE
          textMD namespace and version
static int NILL
          To represent the unknown
protected static java.util.Set setOfUnknownJavaCharset
          Set of unknown charsets in Java
protected static java.lang.String[] UNKNOWN_JAVA_CHARSET
          Array of textMD charsets unknown by java.nio.charset.Charsets
static java.lang.String VERSION
           
 
Constructor Summary
TextMDMetadata()
           
 
Method Summary
 int getByte_order()
           
 java.lang.String getByte_orderString()
           
 java.lang.String getByte_size()
           
 java.lang.String getCharacter_size()
           
 java.lang.String getCharset()
           
 java.lang.String getLanguage()
           
 int getLinebreak()
           
 java.lang.String getLinebreakString()
           
 java.lang.String getMarkup_basis_version()
           
 java.lang.String getMarkup_basis()
           
 java.lang.String getMarkup_language_version()
           
 java.lang.String getMarkup_language()
           
 void setByte_order(int byte_order)
           
 void setByte_size(java.lang.String byte_size)
           
 void setCharacter_size(java.lang.String character_size)
           
 void setCharset(java.lang.String charset)
           
 void setLanguage(java.lang.String language)
           
 void setLinebreak(int linebreak)
           
 void setMarkup_basis_version(java.lang.String markup_basis_version)
           
 void setMarkup_basis(java.lang.String markup_basis)
           
 void setMarkup_language_version(java.lang.String markup_language_version)
           
 void setMarkup_language(java.lang.String markup_language)
           
static java.lang.String toISO_639_2(java.lang.String srcLang)
          Transform a language to the ISO_639-2 language (only enumeration allowed in textMD schema).
static java.lang.String toTextMDCharset(java.lang.String srcCharset)
          Transform a given charset in the "authorized" list given in the textMD schema enumeration.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

NAMESPACE

public static final java.lang.String NAMESPACE
textMD namespace and version

See Also:
Constant Field Values

DEFAULT_LOCATION

public static final java.lang.String DEFAULT_LOCATION
See Also:
Constant Field Values

VERSION

public static final java.lang.String VERSION
See Also:
Constant Field Values

BYTE_ORDER

public static final java.lang.String[] BYTE_ORDER
Uses enumerated values of 'big', 'little', and 'middle' endian.


BYTE_ORDER_BIG

public static final int BYTE_ORDER_BIG
See Also:
Constant Field Values

BYTE_ORDER_LITTLE

public static final int BYTE_ORDER_LITTLE
See Also:
Constant Field Values

BYTE_ORDER_MIDDLE

public static final int BYTE_ORDER_MIDDLE
See Also:
Constant Field Values

LINEBREAK

public static final java.lang.String[] LINEBREAK
Uses enumerated values of 'CR', 'LF' and 'CR/LF' for the idenntification of the linebreak.


LINEBREAK_CR

public static final int LINEBREAK_CR
See Also:
Constant Field Values

LINEBREAK_LF

public static final int LINEBREAK_LF
See Also:
Constant Field Values

LINEBREAK_CRLF

public static final int LINEBREAK_CRLF
See Also:
Constant Field Values

UNKNOWN_JAVA_CHARSET

protected static final java.lang.String[] UNKNOWN_JAVA_CHARSET
Array of textMD charsets unknown by java.nio.charset.Charsets


setOfUnknownJavaCharset

protected static java.util.Set setOfUnknownJavaCharset
Set of unknown charsets in Java


fromISO_639_2_T2B

protected static java.util.Map fromISO_639_2_T2B
Map from ISO 639/2 T to ISO 639/2 B


CHARSET_ASCII

public static final java.lang.String CHARSET_ASCII
See Also:
Constant Field Values

CHARSET_UTF8

public static final java.lang.String CHARSET_UTF8
See Also:
Constant Field Values

CHARSET_ISO8859_1

public static final java.lang.String CHARSET_ISO8859_1
See Also:
Constant Field Values

NILL

public static final int NILL
To represent the unknown

See Also:
Constant Field Values
Constructor Detail

TextMDMetadata

public TextMDMetadata()
Method Detail

getCharset

public java.lang.String getCharset()
Returns:
the charset

setCharset

public void setCharset(java.lang.String charset)
Parameters:
charset - the charset to set

getByte_order

public int getByte_order()
Returns:
the byte_order

getByte_orderString

public java.lang.String getByte_orderString()

setByte_order

public void setByte_order(int byte_order)
Parameters:
byte_order - the byte_order to set

getByte_size

public java.lang.String getByte_size()
Returns:
the byte_size

setByte_size

public void setByte_size(java.lang.String byte_size)
Parameters:
byte_size - the byte_size to set

getCharacter_size

public java.lang.String getCharacter_size()
Returns:
the character_size

setCharacter_size

public void setCharacter_size(java.lang.String character_size)
Parameters:
character_size - the character_size to set

getLinebreak

public int getLinebreak()
Returns:
the linebreak

getLinebreakString

public java.lang.String getLinebreakString()
Returns:
the linebreak in String form

setLinebreak

public void setLinebreak(int linebreak)
Parameters:
linebreak - the linebreak to set

getLanguage

public java.lang.String getLanguage()
Returns:
the language

setLanguage

public void setLanguage(java.lang.String language)
Parameters:
language - the language to set

getMarkup_basis

public java.lang.String getMarkup_basis()
Returns:
the markup_basis

setMarkup_basis

public void setMarkup_basis(java.lang.String markup_basis)
Parameters:
markup_basis - the markup_basis to set

getMarkup_basis_version

public java.lang.String getMarkup_basis_version()
Returns:
the markup_basis_version

setMarkup_basis_version

public void setMarkup_basis_version(java.lang.String markup_basis_version)
Parameters:
markup_basis_version - the markup_basis_version to set

getMarkup_language

public java.lang.String getMarkup_language()
Returns:
the markup_language

setMarkup_language

public void setMarkup_language(java.lang.String markup_language)
Parameters:
markup_language - the markup_language to set

getMarkup_language_version

public java.lang.String getMarkup_language_version()
Returns:
the markup_language_version

setMarkup_language_version

public void setMarkup_language_version(java.lang.String markup_language_version)
Parameters:
markup_language_version - the markup_language_version to set

toTextMDCharset

public static java.lang.String toTextMDCharset(java.lang.String srcCharset)
Transform a given charset in the "authorized" list given in the textMD schema enumeration. From the schema documentation on charset (http://www.loc.gov/standards/textMD/elementSet/index.html#element_charset). The character set employed by the text. Controlled vocab using IANA names for character sets: http://www.iana.org/assignments/character-sets. The problem arises because the java Charset uses the (preferred MIME name) where textMD uses the Name ...

Parameters:
srcCharset - charset from the file
Returns:
normalized charset

toISO_639_2

public static java.lang.String toISO_639_2(java.lang.String srcLang)
Transform a language to the ISO_639-2 language (only enumeration allowed in textMD schema).

Parameters:
srcLang - language in the file
Returns:
normalized language in 3 letters (except qaa-qtz)


jhove/doc/allclasses-frame.html0000644000707400001440000016641711510702367015751 0ustar garyusers All Classes (JHOVE Documentation) All Classes
AESAudioMetadata
AESAudioMetadata.Face
AESAudioMetadata.FaceRegion
AESAudioMetadata.FormatRegion
AESAudioMetadata.TimeDesc
Agent
AgentType
AiffModule
AiffStrings
AnalogDigitalFlagType
AnnotationChunk
App
AppInfoWindow
ApplicationChunk
AProfile
AProfileLevelA
ArithConditioning
ArrayEnd
ArrayStart
Ascii85FilterStream
AsciiHexFilterStream
AsciiModule
AssocDataListChunk
AssociationBox
AudioRecChunk
AuditCount
AuditHandler
AuditState
AuthorChunk
AXMLChunk
BinaryFilterBox
BoxHeader
BoxHolder
BPCCBox
BroadcastExtChunk
ByteArrayXMPSource
BytestreamModule
Callback
CaptureResolutionBox
CartChunk
ChannelDefBox
CharStream
Checksum
ChecksumInputStream
Checksummer
ChecksumType
Chunk
ChunkHeader
COCMarkerSegment
Codestream
CodestreamHeaderBox
CodestreamRegBox
CODMarkerSegment
ColorGroupBox
ColorSpecBox
Comment
CommentMarkerSegment
CommentsChunk
CommonChunk
ComponentMapBox
CompOptionsBox
CompositionBox
ComposLayerHdrBox
ConfigHandler
ConfigWindow
ConfigWriter
ContCodestream
ContCodestreamBox
CopyrightChunk
CountedInputStream
CRGMarkerSegment
CrossRefBox
CrossRefStream
CueChunk
DataChunk
DataEntryURLBox
DDResolutionBox
DefaultBox
DefaultMarkerSegment
DesiredReproBox
Destination
DictionaryEnd
DictionaryStart
DigSignatureBox
DocNode
Document
DocumentType
DTDMapper
Dump
EnumerationType
ErrorMessage
ExifIFD
ExifInfo
ExifMakerNoteChunk
ExifStringChunk
ExifUserCommentChunk
ExifVersionChunk
ExtDouble
ExternalSignature
FactChunk
FileSpecification
FileTokenizer
FileTypeBox
Filter
FormatChunk
FormatVersionChunk
FragmentInputStream
FragmentListBox
FragmentTableBox
GeoTiffStrings
GifModule
GifStrings
GlobalParametersIFD
GPSInfoIFD
GTSOBox
HandlerBase
HandlerBase.SynchronizedDateFormat
Hexadecimal
Html3_2DocDesc
Html4_01FrameDocDesc
Html4_01StrictDocDesc
Html4_01TFDocDesc
Html4_01TransDocDesc
Html4_0FrameDocDesc
Html4_0StrictDocDesc
Html4_0TFDocDesc
Html4_0TransDocDesc
Html4DocDesc
Html4StrictDocDesc
Html4TFDocDesc
HtmlAttributeDesc
HtmlCharStream
HtmlDocDesc
HtmlMetadata
HtmlModule
HtmlSpecialToken
HtmlStack
HtmlTagDesc
HtmlTempTagDesc
Identifier
IdentifierType
IFD
ImageHeaderBox
InfoMessage
InfoWindow
InstructionSetBox
InstrumentChunk
InstrumentChunk
InternalSignature
InteroperabilityIFD
IPRBox
JHAttribute
JHCloseTag
JHComment
JHDoctype
JHElement
JHErrorElement
JHOpenTag
JhoveBase
JhoveException
JhoveWindow
JHPCData
JHXmlDecl
JP2Box
JP2HeaderBox
JP2Strings
Jpeg2000Module
JpegExif
JpegModule
JpegStrings
Keyword
LabelBox
LabelChunk
LabeledTextChunk
LinearizedProfile
LinkChunk
LinkChunkHandler
ListInfoChunk
ListInfoTextChunk
Literal
MacStuff
MainOrTile
MainScreen
Marker
MarkerChunk
MarkerSegment
Message
MidiChunk
Module
ModuleBase
ModuleInfoWindow
MpegChunk
Name
NameChunk
NameTreeNode
NisoImageMetadata
NoConfAlert
NoteChunk
NumberListBox
Numeric
NumericField
ObjectIdentifier
ObjectStream
OpacityBox
OutputHandler
PageLabelNode
PageObject
PageTreeNode
PaletteBox
ParseException
ParseHtml
ParseHtmlConstants
ParseHtmlTokenManager
Parser
PdfArray
PdfDictionary
PdfException
PdfFlateInputStream
PdfIndirectObj
PdfInvalidException
PdfMalformedException
PdfModule
PdfObject
PdfProfile
PdfSimpleObject
PdfStream
PdfStrings
PdfXMPSource
PeakEnvelopeChunk
PLMMarkerSegment
PLTMarkerSegment
POCMarkerSegment
PPMMarkerSegment
PPTMarkerSegment
PrefsWindow
ProgressWindow
Property
PropertyArity
PropertyPath
PropertyType
QCCMarkerSegment
QCDMarkerSegment
QuantizationTable
RAFInputStream
Rational
ReaderRequirementsBox
RepInfo
RepTreeRoot
ResolutionBox
RFC1766Lang
RGNMarkerSegment
ROIBox
RunLengthFilterStream
SampleChunk
SaxelChunk
Signature
SignatureType
SignatureUseType
SimpleCharStream
SimpleTextChunk
SIZMarkerSegment
SOTMarkerSegment
SoundDataChunk
Spiff
SpiffDir
SRS
State
StdStructTypes
Stream
StreamInputStream
StreamTokenizer
StringValuedToken
StructureElement
StructureTree
Superchunk
TaggedProfile
TextChunk
TextHandler
TextMDMetadata
TiffException
TiffFXBase
TiffIFD
TiffModule
TiffProfile
TiffProfileClassB
TiffProfileClassF
TiffProfileClassG
TiffProfileClassIT
TiffProfileClassITBL
TiffProfileClassITBLP1
TiffProfileClassITBP
TiffProfileClassITBPP1
TiffProfileClassITBPP2
TiffProfileClassITCT
TiffProfileClassITCTP1
TiffProfileClassITCTP2
TiffProfileClassITFP
TiffProfileClassITFPP1
TiffProfileClassITFPP2
TiffProfileClassITHC
TiffProfileClassITHCP1
TiffProfileClassITHCP2
TiffProfileClassITLW
TiffProfileClassITLWP1
TiffProfileClassITLWP2
TiffProfileClassITMP
TiffProfileClassITMPP1
TiffProfileClassITMPP2
TiffProfileClassITSD
TiffProfileClassITSDP2
TiffProfileClassP
TiffProfileClassR
TiffProfileClassY
TiffProfileDLF
TiffProfileDLFBW
TiffProfileDLFColor
TiffProfileDLFGray
TiffProfileDNG
TiffProfileDNGThumb
TiffProfileEP
TiffProfileExif
TiffProfileExifIFD
TiffProfileExifThumb
TiffProfileFXC
TiffProfileFXF
TiffProfileFXJ
TiffProfileFXL
TiffProfileFXM
TiffProfileFXS
TiffProfileGeoTIFF
TiffProfilePagemaker6
TiffProfilePhotoshop
TiffProfileRFC1314
TiffTags
Tile
TilePart
Tiling
TLMMarkerSegment
Token
Token
Tokenizer
TokenMgrError
TopLevelBoxHolder
Utf8Block
Utf8BlockMarker
Utf8Module
UUIDBox
UUIDInfoBox
UUIDListBox
ViewHandler
ViewWindow
WaveModule
WaveStrings
X1aProfile
X1Profile
X2Profile
X3Profile
XhtmlProcessing
XMLBox
XmlDeclHandler
XmlDeclStream
XmlHandler
XmlLexicalHandler
XmlModule
XmlModuleHandler
XMLWrapperStream
XMPHandler
XMPSource
XProfileBase
jhove/doc/allclasses-noframe.html0000644000707400001440000015007311510702367016275 0ustar garyusers All Classes (JHOVE Documentation) All Classes
AESAudioMetadata
AESAudioMetadata.Face
AESAudioMetadata.FaceRegion
AESAudioMetadata.FormatRegion
AESAudioMetadata.TimeDesc
Agent
AgentType
AiffModule
AiffStrings
AnalogDigitalFlagType
AnnotationChunk
App
AppInfoWindow
ApplicationChunk
AProfile
AProfileLevelA
ArithConditioning
ArrayEnd
ArrayStart
Ascii85FilterStream
AsciiHexFilterStream
AsciiModule
AssocDataListChunk
AssociationBox
AudioRecChunk
AuditCount
AuditHandler
AuditState
AuthorChunk
AXMLChunk
BinaryFilterBox
BoxHeader
BoxHolder
BPCCBox
BroadcastExtChunk
ByteArrayXMPSource
BytestreamModule
Callback
CaptureResolutionBox
CartChunk
ChannelDefBox
CharStream
Checksum
ChecksumInputStream
Checksummer
ChecksumType
Chunk
ChunkHeader
COCMarkerSegment
Codestream
CodestreamHeaderBox
CodestreamRegBox
CODMarkerSegment
ColorGroupBox
ColorSpecBox
Comment
CommentMarkerSegment
CommentsChunk
CommonChunk
ComponentMapBox
CompOptionsBox
CompositionBox
ComposLayerHdrBox
ConfigHandler
ConfigWindow
ConfigWriter
ContCodestream
ContCodestreamBox
CopyrightChunk
CountedInputStream
CRGMarkerSegment
CrossRefBox
CrossRefStream
CueChunk
DataChunk
DataEntryURLBox
DDResolutionBox
DefaultBox
DefaultMarkerSegment
DesiredReproBox
Destination
DictionaryEnd
DictionaryStart
DigSignatureBox
DocNode
Document
DocumentType
DTDMapper
Dump
EnumerationType
ErrorMessage
ExifIFD
ExifInfo
ExifMakerNoteChunk
ExifStringChunk
ExifUserCommentChunk
ExifVersionChunk
ExtDouble
ExternalSignature
FactChunk
FileSpecification
FileTokenizer
FileTypeBox
Filter
FormatChunk
FormatVersionChunk
FragmentInputStream
FragmentListBox
FragmentTableBox
GeoTiffStrings
GifModule
GifStrings
GlobalParametersIFD
GPSInfoIFD
GTSOBox
HandlerBase
HandlerBase.SynchronizedDateFormat
Hexadecimal
Html3_2DocDesc
Html4_01FrameDocDesc
Html4_01StrictDocDesc
Html4_01TFDocDesc
Html4_01TransDocDesc
Html4_0FrameDocDesc
Html4_0StrictDocDesc
Html4_0TFDocDesc
Html4_0TransDocDesc
Html4DocDesc
Html4StrictDocDesc
Html4TFDocDesc
HtmlAttributeDesc
HtmlCharStream
HtmlDocDesc
HtmlMetadata
HtmlModule
HtmlSpecialToken
HtmlStack
HtmlTagDesc
HtmlTempTagDesc
Identifier
IdentifierType
IFD
ImageHeaderBox
InfoMessage
InfoWindow
InstructionSetBox
InstrumentChunk
InstrumentChunk
InternalSignature
InteroperabilityIFD
IPRBox
JHAttribute
JHCloseTag
JHComment
JHDoctype
JHElement
JHErrorElement
JHOpenTag
JhoveBase
JhoveException
JhoveWindow
JHPCData
JHXmlDecl
JP2Box
JP2HeaderBox
JP2Strings
Jpeg2000Module
JpegExif
JpegModule
JpegStrings
Keyword
LabelBox
LabelChunk
LabeledTextChunk
LinearizedProfile
LinkChunk
LinkChunkHandler
ListInfoChunk
ListInfoTextChunk
Literal
MacStuff
MainOrTile
MainScreen
Marker
MarkerChunk
MarkerSegment
Message
MidiChunk
Module
ModuleBase
ModuleInfoWindow
MpegChunk
Name
NameChunk
NameTreeNode
NisoImageMetadata
NoConfAlert
NoteChunk
NumberListBox
Numeric
NumericField
ObjectIdentifier
ObjectStream
OpacityBox
OutputHandler
PageLabelNode
PageObject
PageTreeNode
PaletteBox
ParseException
ParseHtml
ParseHtmlConstants
ParseHtmlTokenManager
Parser
PdfArray
PdfDictionary
PdfException
PdfFlateInputStream
PdfIndirectObj
PdfInvalidException
PdfMalformedException
PdfModule
PdfObject
PdfProfile
PdfSimpleObject
PdfStream
PdfStrings
PdfXMPSource
PeakEnvelopeChunk
PLMMarkerSegment
PLTMarkerSegment
POCMarkerSegment
PPMMarkerSegment
PPTMarkerSegment
PrefsWindow
ProgressWindow
Property
PropertyArity
PropertyPath
PropertyType
QCCMarkerSegment
QCDMarkerSegment
QuantizationTable
RAFInputStream
Rational
ReaderRequirementsBox
RepInfo
RepTreeRoot
ResolutionBox
RFC1766Lang
RGNMarkerSegment
ROIBox
RunLengthFilterStream
SampleChunk
SaxelChunk
Signature
SignatureType
SignatureUseType
SimpleCharStream
SimpleTextChunk
SIZMarkerSegment
SOTMarkerSegment
SoundDataChunk
Spiff
SpiffDir
SRS
State
StdStructTypes
Stream
StreamInputStream
StreamTokenizer
StringValuedToken
StructureElement
StructureTree
Superchunk
TaggedProfile
TextChunk
TextHandler
TextMDMetadata
TiffException
TiffFXBase
TiffIFD
TiffModule
TiffProfile
TiffProfileClassB
TiffProfileClassF
TiffProfileClassG
TiffProfileClassIT
TiffProfileClassITBL
TiffProfileClassITBLP1
TiffProfileClassITBP
TiffProfileClassITBPP1
TiffProfileClassITBPP2
TiffProfileClassITCT
TiffProfileClassITCTP1
TiffProfileClassITCTP2
TiffProfileClassITFP
TiffProfileClassITFPP1
TiffProfileClassITFPP2
TiffProfileClassITHC
TiffProfileClassITHCP1
TiffProfileClassITHCP2
TiffProfileClassITLW
TiffProfileClassITLWP1
TiffProfileClassITLWP2
TiffProfileClassITMP
TiffProfileClassITMPP1
TiffProfileClassITMPP2
TiffProfileClassITSD
TiffProfileClassITSDP2
TiffProfileClassP
TiffProfileClassR
TiffProfileClassY
TiffProfileDLF
TiffProfileDLFBW
TiffProfileDLFColor
TiffProfileDLFGray
TiffProfileDNG
TiffProfileDNGThumb
TiffProfileEP
TiffProfileExif
TiffProfileExifIFD
TiffProfileExifThumb
TiffProfileFXC
TiffProfileFXF
TiffProfileFXJ
TiffProfileFXL
TiffProfileFXM
TiffProfileFXS
TiffProfileGeoTIFF
TiffProfilePagemaker6
TiffProfilePhotoshop
TiffProfileRFC1314
TiffTags
Tile
TilePart
Tiling
TLMMarkerSegment
Token
Token
Tokenizer
TokenMgrError
TopLevelBoxHolder
Utf8Block
Utf8BlockMarker
Utf8Module
UUIDBox
UUIDInfoBox
UUIDListBox
ViewHandler
ViewWindow
WaveModule
WaveStrings
X1aProfile
X1Profile
X2Profile
X3Profile
XhtmlProcessing
XMLBox
XmlDeclHandler
XmlDeclStream
XmlHandler
XmlLexicalHandler
XmlModule
XmlModuleHandler
XMLWrapperStream
XMPHandler
XMPSource
XProfileBase
jhove/doc/constant-values.html0000644000707400001440000036660111510702366015655 0ustar garyusers Constant Field Values (JHOVE Documentation)

Constant Field Values


Contents
edu.harvard.*

edu.harvard.hul.ois.jhove.AESAudioMetadata
public static final int BIG_ENDIAN 0
public static final java.lang.String FILE_NAME "FILE_NAME"
public static final int LITTLE_ENDIAN 1
public static final double NILL -1.0
public static final int NULL -1
public static final java.lang.String OTHER "OTHER"
public static final java.lang.String SCHEMA_VERSION "1.02b"

edu.harvard.hul.ois.jhove.Message
public static final long NULL -1L

edu.harvard.hul.ois.jhove.Module
public static final int MAXIMUM_VERBOSITY 1
public static final int MINIMUM_VERBOSITY 2

edu.harvard.hul.ois.jhove.NisoImageMetadata
public static final double NILL -1.0
public static final int NULL -1

edu.harvard.hul.ois.jhove.RepInfo
public static final int FALSE 0
public static final int TRUE 1
public static final int UNDETERMINED -1

edu.harvard.hul.ois.jhove.TextMDMetadata
public static final int BYTE_ORDER_BIG 0
public static final int BYTE_ORDER_LITTLE 1
public static final int BYTE_ORDER_MIDDLE 2
public static final java.lang.String CHARSET_ASCII "US-ASCII"
public static final java.lang.String CHARSET_ISO8859_1 "ISO-8859-1"
public static final java.lang.String CHARSET_UTF8 "UTF-8"
public static final java.lang.String DEFAULT_LOCATION "http://www.loc.gov/standards/textMD/textMD-v3.01a.xsd"
public static final int LINEBREAK_CR 0
public static final int LINEBREAK_CRLF 2
public static final int LINEBREAK_LF 1
public static final java.lang.String NAMESPACE "info:lc/xmlns/textMD-v3"
public static final int NILL -1
public static final java.lang.String VERSION "3.0"

edu.harvard.hul.ois.jhove.module.AiffModule
public static final int AIFCTYPE 2
public static final int AIFFTYPE 1

edu.harvard.hul.ois.jhove.module.HtmlModule
public static final int HTML_3_2 1
public static final int HTML_4_0_FRAMESET 3
public static final int HTML_4_0_STRICT 2
public static final int HTML_4_0_TRANSITIONAL 4
public static final int HTML_4_01_FRAMESET 6
public static final int HTML_4_01_STRICT 5
public static final int HTML_4_01_TRANSITIONAL 7
public static final int XHTML_1_0_FRAMESET 10
public static final int XHTML_1_0_STRICT 8
public static final int XHTML_1_0_TRANSITIONAL 9
public static final int XHTML_1_1 11

edu.harvard.hul.ois.jhove.module.PdfModule
public static final int F_CID0 6
public static final int F_CID2 7
public static final int F_MM1 5
public static final int F_TT 3
public static final int F_TYPE0 1
public static final int F_TYPE1 2
public static final int F_TYPE3 4
protected static final java.lang.String outlinesRecursiveString "Outlines contain recursive references."

edu.harvard.hul.ois.jhove.module.html.HtmlAttributeDesc
public static final int CONREF 3
public static final int CURRENT 2
public static final int IMPLIED 4
public static final int OTHER 5
public static final int REQUIRED 1

edu.harvard.hul.ois.jhove.module.html.HtmlCharStream
public static final boolean staticFlag false

edu.harvard.hul.ois.jhove.module.html.HtmlTagDesc
public static final int SEQ0_1 0
public static final int SEQ0_MANY 3
public static final int SEQ1 1
public static final int SEQ1_MANY 2

edu.harvard.hul.ois.jhove.module.html.ParseHtmlConstants
public static final int COLON 12
public static final int DEFAULT 0
public static final int DOCTYPEKEYWORD 14
public static final int ENDING_COMMENT 7
public static final int EOF 0
public static final int EQUALS 6
public static final int IN_ATTVALUE 3
public static final int IN_COMMENT 6
public static final int IN_DOCTYPE 4
public static final int IN_DOCTYPE2 5
public static final int IN_PCDATA 1
public static final int IN_TAG 2
public static final int LABRACKET 2
public static final int NAKEDDTITEM 15
public static final int NAKEDVALUE 7
public static final int NAME 5
public static final int OPENCOMMENT 22
public static final int PCDATA 4
public static final int PCDATASTART 3
public static final int QMARK 10
public static final int QUOTEDDTITEM 16
public static final int QUOTEDVALUE 8
public static final int RABRACKET 13
public static final int SINGQUOTEDVALUE 9
public static final int SLASH 11
public static final int STARTDOCTYPE 1

edu.harvard.hul.ois.jhove.module.html.SimpleCharStream
public static final boolean staticFlag false

edu.harvard.hul.ois.jhove.module.jpeg.Spiff
public static final int CONTACT_INFO 13
public static final int COPYRIGHT_INFO 12
public static final int CREATOR_ID 9
public static final int EOD 1
public static final int IMAGE_DESC 6
public static final int IMAGE_ORIENTATION 3
public static final int IMAGE_TITLE 5
public static final int PROTECTION_INDICATOR 10
public static final int SCAN_INDEX 15
public static final int SETREF 16
public static final int THUMBNAIL 4
public static final int TILE_INDEX 14
public static final int TIME_STAMP 7
public static final int VERSION_IDENT 8
public static final int XFER_CHARACTERISTICS 2

edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
protected static final java.lang.String DESCRIPTION_NAME "Description"
protected static final java.lang.String noJP2Hdr "Other boxes may not occur before JP2 Header"

edu.harvard.hul.ois.jhove.module.jpeg2000.MainOrTile
protected static final int NULL -1

edu.harvard.hul.ois.jhove.module.jpeg2000.MarkerSegment
protected static final int COC 83
protected static final int COD 82
protected static final int COM 100
protected static final int CRG 99
protected static final int EOC 217
protected static final int EPH 146
protected static final int PLM 87
protected static final int PLT 88
protected static final int POC 95
protected static final int PPM 96
protected static final int PPT 97
protected static final int QCC 93
protected static final int QCD 92
protected static final int RGN 94
protected static final int SIZ 81
protected static final int SOC 79
protected static final int SOD 147
protected static final int SOP 145
protected static final int SOT 144
protected static final int TLM 85

edu.harvard.hul.ois.jhove.module.tiff.GlobalParametersIFD
public static final int CODINGMETHODS 403
public static final int FAXPROFILE 402
public static final int MODENUMBER 405
public static final int PROFILETYPE 401
public static final int VERSIONYEAR 404

edu.harvard.hul.ois.jhove.module.tiff.IFD
public static final int ASCII 2
public static final int BYTE 1
public static final int DOUBLE 12
public static final int EXIF 1
public static final int FLOAT 11
public static final int GLOBALPARAMETERS 4
public static final int GPSINFO 3
public static final int IFD 13
public static final int INTEROPERABILITY 2
public static final int LONG 4
public static final int NULL -1
public static final int RATIONAL 5
public static final int SBYTE 6
public static final int SHORT 3
public static final int SLONG 9
public static final int SRATIONAL 10
public static final int SSHORT 8
public static final int TIFF 0
public static final int UNDEFINED 7

edu.harvard.hul.ois.jhove.module.tiff.TiffFXBase
public static final int GLOBALPARAMETERSIFD 400
public static final int STRIPROWCOUNTS 559

edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
public static final int ARTIST 315
public static final int BITSPERSAMPLE 258
public static final int CELLLENGTH 265
public static final int CELLWIDTH 264
public static final int COLORMAP 320
public static final int COMPRESSION 259
public static final int COPYRIGHT 33432
public static final int DATETIME 306
public static final int DOCUMENTNAME 269
public static final int DOTRANGE 336
public static final int EXTRASAMPLES 338
public static final int FILLORDER 266
public static final int FREEBYTECOUNTS 289
public static final int FREEOFFSETS 288
public static final int GEOGANGULARUNITSGEOKEY 2054
public static final int GEOGANGULARUNITSIZEGEOKEY 2055
public static final int GEOGAZIMUTHUNITSGEOKEY 2060
public static final int GEOGCITATIONGEOKEY 2049
public static final int GEOGELLIPSOIDGEOKEY 2056
public static final int GEOGGEODETICDATUMGEOKEY 2050
public static final int GEOGINVFLATTENINGGEOKEY 2059
public static final int GEOGLINEARUNITSGEOKEY 2052
public static final int GEOGLINEARUNITSIZEGEOKEY 2053
public static final int GEOGPRIMEMERIDIANGEOKEY 2051
public static final int GEOGPRIMEMERIDIANLONGGEOKEY 2061
public static final int GEOGRAPHICTYPEGEOKEY 2048
public static final int GEOGSEMIMAJORAXISGEOKEY 2057
public static final int GEOGSEMIMINORAXISGEOKEY 2058
public static final int GRAYRESPONSECURVE 291
public static final int GRAYRESPONSEUNIT 290
public static final int GTCITATIONGEOKEY 1026
public static final int GTMODELTYPEGEOKEY 1024
public static final int GTRASTERTYPEGEOKEY 1025
public static final int HALFTONEHINTS 321
public static final int HOSTCOMPUTER 316
public static final int IMAGEDESCRIPTION 270
public static final int IMAGELENGTH 257
public static final int IMAGEWIDTH 256
public static final int INKNAMES 333
public static final int INKSET 332
public static final int JPEGACTABLES 521
public static final int JPEGDCTABLES 520
public static final int JPEGINTERCHANGEFORMAT 513
public static final int JPEGINTERCHANGEFORMATLENGTH 514
public static final int JPEGLOSSLESSPREDICTORS 517
public static final int JPEGPOINTTRANSFORMS 518
public static final int JPEGPROC 512
public static final int JPEGQTABLES 519
public static final int JPEGRESTARTINTERVAL 515
public static final int MAKE 271
public static final int MAXSAMPLEVALUE 281
public static final int MINSAMPLEVALUE 280
public static final int MODEL 272
public static final int NEWSUBFILETYPE 254
public static final int NUMBEROFINKS 334
public static final int ORIENTATION 274
public static final int PAGENAME 285
public static final int PAGENUMBER 297
public static final int PCSCITATIONGEOKEY 3073
public static final int PHOTOMETRICINTERPRETATION 262
public static final int PLANARCONFIGURATION 284
public static final int PREDICTOR 317
public static final int PRIMARYCHROMATICITIES 319
public static final int PROJAZIMUTHANGLEGEOKEY 3094
public static final int PROJCENTEREASTINGGEOKEY 3090
public static final int PROJCENTERLATGEOKEY 3089
public static final int PROJCENTERLONGGEOKEY 3088
public static final int PROJCOORDTRANSGEOKEY 3075
public static final int PROJECTEDCSTYPEGEOKEY 3072
public static final int PROJECTIONGEOKEY 3074
public static final int PROJFALSEEASTINGGEOKEY 3082
public static final int PROJFALSENORTHINGGEOKEY 3083
public static final int PROJFALSEORIGINEASTINGGEOKEY 3086
public static final int PROJFALSEORIGINLATGEOKEY 3085
public static final int PROJFALSEORIGINLONGGEOKEY 3084
public static final int PROJFALSEORIGINNORTHINGGEOKEY 3087
public static final int PROJFALSEORIGINNORTHINGGEOKEY_2 3091
public static final int PROJLINEARUNITSGEOKEY 3076
public static final int PROJLINEARUNITSIZEGEOKEY 3077
public static final int PROJNATORIGINLATGEOKEY 3081
public static final int PROJNATORIGINLONGGEOKEY 3080
public static final int PROJSCALEATCENTERGEOKEY 3093
public static final int PROJSCALEATNATORIGINGEOKEY 3092
public static final int PROJSTDPARALLEL1GEOKEY 3078
public static final int PROJSTDPARALLEL2GEOKEY 3079
public static final int PROJSTRAIGHTVERTPOLELONGEOKEY 3095
public static final int REFERENCEBLACKWHITE 532
public static final int RESOLUTIONUNIT 296
public static final int ROWSPERSTRIP 278
public static final int SAMPLEFORMAT 339
public static final int SAMPLESPERPIXEL 277
public static final int SMAXSAMPLEVALUE 341
public static final int SMINSAMPLEVALUE 340
public static final int SOFTWARE 305
public static final int STRIPBYTECOUNTS 279
public static final int STRIPOFFSETS 273
public static final int SUBFILETYPE 255
public static final int T4OPTIONS 292
public static final int T6OPTIONS 293
public static final int TARGETPRINTER 337
public static final int THRESHHOLDING 263
public static final int TILEBYTECOUNTS 325
public static final int TILELENGTH 323
public static final int TILEOFFSETS 324
public static final int TILEWIDTH 322
public static final int TRANSFERFUNCTION 301
public static final int TRANSFERRANGE 342
public static final int VERTICALCITATIONGEOKEY 4097
public static final int VERTICALCSTYPEGEOKEY 4096
public static final int VERTICALDATUMGEOKEY 4098
public static final int VERTICALUNITSGEOKEY 4099
public static final int WHITEPOINT 318
public static final int XPOSITION 286
public static final int XRESOLUTION 282
public static final int YCBCRCOEFFICIENTS 529
public static final int YCBCRPOSITIONING 531
public static final int YCBCRSUBSAMPLING 530
public static final int YPOSITION 287
public static final int YRESOLUTION 283

edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
public static final int MIME_1314 2
public static final int MIME_FX 1
public static final int MIME_GENERIC 0

edu.harvard.hul.ois.jhove.module.tiff.TiffProfileDNG
public static final int CFA 32803
public static final int LINEAR_RAW 34892

edu.harvard.hul.ois.jhove.module.wave.FormatChunk
public static final int WAVE_FORMAT_EXTENSIBLE 65534
public static final int WAVE_FORMAT_MPEG 80
public static final int WAVE_FORMAT_PCM 1

edu.harvard.hul.ois.jhove.viewer.ProgressWindow
public static final int DOWNLOADING 1
public static final int PROCESSING 2
public static final int UNKNOWN 0



jhove/doc/deprecated-list.html0000644000707400001440000001664411510702367015600 0ustar garyusers Deprecated List (JHOVE Documentation)

Deprecated API


Contents
Deprecated Classes
edu.harvard.hul.ois.jhove.module.pdf.Hexadecimal
            
 

Deprecated Methods
edu.harvard.hul.ois.jhove.module.html.SimpleCharStream.getColumn()
            
edu.harvard.hul.ois.jhove.module.html.HtmlCharStream.getColumn()
            
edu.harvard.hul.ois.jhove.module.html.CharStream.getColumn()
            
edu.harvard.hul.ois.jhove.module.html.SimpleCharStream.getLine()
            
edu.harvard.hul.ois.jhove.module.html.HtmlCharStream.getLine()
            
edu.harvard.hul.ois.jhove.module.html.CharStream.getLine()
            
 



jhove/doc/help-doc.html0000644000707400001440000002150111510702367014206 0ustar garyusers API Help (JHOVE Documentation)

How This API Document Is Organized

This API (Application Programming Interface) document has pages corresponding to the items in the navigation bar, described as follows.

Overview

The Overview page is the front page of this API document and provides a list of all packages with a summary for each. This page can also contain an overall description of the set of packages.

Package

Each package has a page that contains a list of its classes and interfaces, with a summary for each. This page can contain four categories:

  • Interfaces (italic)
  • Classes
  • Enums
  • Exceptions
  • Errors
  • Annotation Types

Class/Interface

Each class, interface, nested class and nested interface has its own separate page. Each of these pages has three sections consisting of a class/interface description, summary tables, and detailed member descriptions:

  • Class inheritance diagram
  • Direct Subclasses
  • All Known Subinterfaces
  • All Known Implementing Classes
  • Class/interface declaration
  • Class/interface description

  • Nested Class Summary
  • Field Summary
  • Constructor Summary
  • Method Summary

  • Field Detail
  • Constructor Detail
  • Method Detail
Each summary entry contains the first sentence from the detailed description for that item. The summary entries are alphabetical, while the detailed descriptions are in the order they appear in the source code. This preserves the logical groupings established by the programmer.

Annotation Type

Each annotation type has its own separate page with the following sections:

  • Annotation Type declaration
  • Annotation Type description
  • Required Element Summary
  • Optional Element Summary
  • Element Detail

Enum

Each enum has its own separate page with the following sections:

  • Enum declaration
  • Enum description
  • Enum Constant Summary
  • Enum Constant Detail

Tree (Class Hierarchy)

There is a Class Hierarchy page for all packages, plus a hierarchy for each package. Each hierarchy page contains a list of classes and a list of interfaces. The classes are organized by inheritance structure starting with java.lang.Object. The interfaces do not inherit from java.lang.Object.
  • When viewing the Overview page, clicking on "Tree" displays the hierarchy for all packages.
  • When viewing a particular package, class or interface page, clicking "Tree" displays the hierarchy for only that package.

Deprecated API

The Deprecated API page lists all of the API that have been deprecated. A deprecated API is not recommended for use, generally due to improvements, and a replacement API is usually given. Deprecated APIs may be removed in future implementations.

Index

The Index contains an alphabetic list of all classes, interfaces, constructors, methods, and fields.

Prev/Next

These links take you to the next or previous class, interface, package, or related page.

Frames/No Frames

These links show and hide the HTML frames. All pages are available with or without frames.

Serialized Form

Each serializable or externalizable class has a description of its serialization fields and methods. This information is of interest to re-implementors, not to developers using the API. While there is no link in the navigation bar, you can get to this information by going to any serialized class and clicking "Serialized Form" in the "See also" section of the class description.

Constant Field Values

The Constant Field Values page lists the static final fields and their values.

This help file applies to API documentation generated using the standard doclet.



jhove/doc/index-all.html0000644000707400001440000530030311510702367014375 0ustar garyusers Index (JHOVE Documentation)
A B C D E F G H I J K L M N O P Q R S T U V W X Y _

A

A_D - Static variable in class edu.harvard.hul.ois.jhove.AESAudioMetadata
Analog / digital labels.
abort() - Method in class edu.harvard.hul.ois.jhove.JhoveBase
Aborts an activity.
accept(File, String) - Method in class edu.harvard.hul.ois.jhove.viewer.JhoveWindow.InvisibleFilenameFilter
 
add(PdfObject) - Method in class edu.harvard.hul.ois.jhove.module.pdf.PdfArray
Adds an object to the array.
add(String, PdfObject) - Method in class edu.harvard.hul.ois.jhove.module.pdf.PdfDictionary
Accumulate an entry into the dictionary.
add_escapes(String) - Method in exception edu.harvard.hul.ois.jhove.module.html.ParseException
Used to convert raw characters to their escaped version when these raw version cannot be used as part of an ASCII string literal.
addAbbr(Property) - Method in class edu.harvard.hul.ois.jhove.module.html.HtmlMetadata
Adds an ABBR tag's contents to the Meta property.
addAddressElement(Map) - Static method in class edu.harvard.hul.ois.jhove.module.html.Html4DocDesc
Defines the ADDRESS element.
addAddressElement(Map) - Static method in class edu.harvard.hul.ois.jhove.module.html.Html4StrictDocDesc
Defines the ADDRESS element.
addAElement(Map) - Static method in class edu.harvard.hul.ois.jhove.module.html.Html4StrictDocDesc
Defines the A element.
addAElement(Map) - Static method in class edu.harvard.hul.ois.jhove.module.html.Html4TFDocDesc
Defines the A element.
addAiffProperty(Property) - Method in class edu.harvard.hul.ois.jhove.module.AiffModule
Adds a Property to the AIFF metadata.
addAnnotation(Property) - Method in class edu.harvard.hul.ois.jhove.module.AiffModule
Adds an Annotation Property to the annotation list.
addAppletElement(Map, HtmlAttributeDesc) - Static method in class edu.harvard.hul.ois.jhove.module.html.Html4TFDocDesc
 
addAreaElement(Map, HtmlAttributeDesc) - Static method in class edu.harvard.hul.ois.jhove.module.html.Html4StrictDocDesc
 
addAreaElement(Map, HtmlAttributeDesc) - Static method in class edu.harvard.hul.ois.jhove.module.html.Html4TFDocDesc
 
addAssociation(Property) - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
 
addAssociationProp(Property) - Method in class edu.harvard.hul.ois.jhove.module.Jpeg2000Module
Adds an association property to the metadata.
addBaseElement(Map) - Static method in class edu.harvard.hul.ois.jhove.module.html.Html4StrictDocDesc
 
addBaseElement(Map) - Static method in class edu.harvard.hul.ois.jhove.module.html.Html4TFDocDesc
 
addBasefontElement(Map) - Static method in class edu.harvard.hul.ois.jhove.module.html.Html4TFDocDesc
 
addBdoElement(Map) - Static method in class edu.harvard.hul.ois.jhove.module.html.Html4DocDesc
Defines the BDO element.
addBinaryFilterProp(Property) - Method in class edu.harvard.hul.ois.jhove.module.Jpeg2000Module
Adds a binary filter property to the metadata.
addBitmaskProperty(String, long, String[], boolean) - Method in class edu.harvard.hul.ois.jhove.module.tiff.IFD
Returns a Property representing a bitmask.
addBlockquoteElement(Map) - Static method in class edu.harvard.hul.ois.jhove.module.html.Html4StrictDocDesc
 
addBlockquoteElement(Map) - Static method in class edu.harvard.hul.ois.jhove.module.html.Html4TFDocDesc
 
addBodyElement(Map) - Static method in class edu.harvard.hul.ois.jhove.module.html.Html4DocDesc
Defines the BODY element.
addBrElement(Map, List) - Static method in class edu.harvard.hul.ois.jhove.module.html.Html4StrictDocDesc
 
addBrElement(Map, List) - Static method in class edu.harvard.hul.ois.jhove.module.html.Html4TFDocDesc
 
addButtonElement(Map) - Static method in class edu.harvard.hul.ois.jhove.module.html.Html4StrictDocDesc
 
addButtonElement(Map) - Static method in class edu.harvard.hul.ois.jhove.module.html.Html4TFDocDesc
 
addByteProperty(String, int, String[]) - Method in class edu.harvard.hul.ois.jhove.module.GifModule
 
addCaptionElement(Map, List, HtmlAttributeDesc) - Static method in class edu.harvard.hul.ois.jhove.module.html.Html4StrictDocDesc
 
addCaptionElement(Map, List, HtmlAttributeDesc) - Static method in class edu.harvard.hul.ois.jhove.module.html.Html4TFDocDesc
 
addCenterElement(Map) - Static method in class edu.harvard.hul.ois.jhove.module.html.Html4TFDocDesc
 
addChannelDef(Property) - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.ComposLayerHdrBox
Add channel definition property.
addCitation(String) - Method in class edu.harvard.hul.ois.jhove.module.html.HtmlMetadata
Adds a CITE element's pcdata to the Citations property.
addCodestreamReg(Property) - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.ComposLayerHdrBox
Add codestream registration property.
addColElement(Map, List) - Static method in class edu.harvard.hul.ois.jhove.module.html.Html4DocDesc
Defines the COL element.
addColgroupElement(Map, List) - Static method in class edu.harvard.hul.ois.jhove.module.html.Html4DocDesc
Defines the COLGROUP element.
addColorSpec(Property) - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.ColorGroupBox
Adds a color spec property to the parent Compositing Layer Header Box.
addColorSpec(Property) - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.ComposLayerHdrBox
Add a color specification property.
addColorSpec(Property) - Method in class edu.harvard.hul.ois.jhove.module.Jpeg2000Module
Adds a color spec property to the metadata.
addComment(Property) - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.MainOrTile
Adds a property to the comment list
addComposLayer(Property) - Method in class edu.harvard.hul.ois.jhove.module.Jpeg2000Module
Adds a Compositing Layer property to the list of Compositing Layer properties.
addDateProperty(PdfDictionary, List, String, String) - Method in class edu.harvard.hul.ois.jhove.module.PdfModule
Add a date proprerty, based on a dictionary entry with a string value, to a specified List.
addDdElement(Map) - Static method in class edu.harvard.hul.ois.jhove.module.html.Html4DocDesc
Defines the DD element.
addDef(String) - Method in class edu.harvard.hul.ois.jhove.module.html.HtmlMetadata
Adds a defined term to the Defined Terms property.
addDelElement(Map) - Static method in class edu.harvard.hul.ois.jhove.module.html.Html4DocDesc
Defines the DEL element.
addDestination(PdfObject, String, List, RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.PdfModule
 
addDigitalSignatureProp(Property) - Method in class edu.harvard.hul.ois.jhove.module.Jpeg2000Module
Adds a digital signature property to the metadata.
addDirElement(Map) - Static method in class edu.harvard.hul.ois.jhove.module.html.Html4TFDocDesc
 
addDivElement(Map) - Static method in class edu.harvard.hul.ois.jhove.module.html.Html4StrictDocDesc
 
addDivElement(Map) - Static method in class edu.harvard.hul.ois.jhove.module.html.Html4TFDocDesc
 
addDlElement(Map) - Static method in class edu.harvard.hul.ois.jhove.module.html.Html4StrictDocDesc
 
addDlElement(Map) - Static method in class edu.harvard.hul.ois.jhove.module.html.Html4TFDocDesc
 
addDtElement(Map) - Static method in class edu.harvard.hul.ois.jhove.module.html.Html4DocDesc
Defines the DT element.
addEntity(String) - Method in class edu.harvard.hul.ois.jhove.module.html.HtmlMetadata
Adds a String to the Entities property.
addEscapes(String) - Static method in error edu.harvard.hul.ois.jhove.module.html.TokenMgrError
Replaces unprintable characters by their espaced (or unicode escaped) equivalents in the given string
addFace() - Method in class edu.harvard.hul.ois.jhove.AESAudioMetadata
Adds a Face.
addFaceRegion() - Method in interface edu.harvard.hul.ois.jhove.AESAudioMetadata.Face
Adds a FaceRegion.
addFieldsetElement(Map) - Static method in class edu.harvard.hul.ois.jhove.module.html.Html4DocDesc
Defines the FIELDSET element.
addFontElement(Map) - Static method in class edu.harvard.hul.ois.jhove.module.html.Html4TFDocDesc
Adds the Font element.
addFontsProperty(List) - Method in class edu.harvard.hul.ois.jhove.module.PdfModule
Add the various font lists as a fonts property.
addFontToMap(PdfDictionary) - Method in class edu.harvard.hul.ois.jhove.module.PdfModule
Add the font to the appropriate map, and return its subtype.
addFormatRegion() - Method in class edu.harvard.hul.ois.jhove.AESAudioMetadata
Adds a FormatRegion object to a FormatSize list.
addFrame(Property) - Method in class edu.harvard.hul.ois.jhove.module.html.HtmlMetadata
Adds a FRAME tag's contents to the Meta property.
addFrameElement(Map) - Static method in class edu.harvard.hul.ois.jhove.module.html.Html4TFDocDesc
Adds to Frame element.
addFramesetElement(Map) - Static method in class edu.harvard.hul.ois.jhove.module.html.Html4TFDocDesc
Adds the Frameset element.
addHeadElement(Map) - Static method in class edu.harvard.hul.ois.jhove.module.html.Html4StrictDocDesc
 
addHeadElement(Map) - Static method in class edu.harvard.hul.ois.jhove.module.html.Html4TFDocDesc
 
addHrElement(Map) - Static method in class edu.harvard.hul.ois.jhove.module.html.Html4TFDocDesc
 
addImage(Property) - Method in class edu.harvard.hul.ois.jhove.module.html.HtmlMetadata
Adds an item to the Images property.
addImplicitContainer(HtmlTagDesc) - Method in class edu.harvard.hul.ois.jhove.module.html.HtmlTagDesc
Provides the object with an array of element tags in which this element can be nested.
addInputElement(Map) - Static method in class edu.harvard.hul.ois.jhove.module.html.Html4TFDocDesc
 
addInsElement(Map) - Static method in class edu.harvard.hul.ois.jhove.module.html.Html4DocDesc
Defines the INS element.
addInstSet(Property) - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.CompositionBox
Add an instruction set property to the list.
addIntegerArrayProperty(String, int[], String[], boolean) - Method in class edu.harvard.hul.ois.jhove.module.tiff.IFD
Returns an ARRAY Property representing an integer array.
addIntegerProperty(String, int, String[], boolean) - Method in class edu.harvard.hul.ois.jhove.module.tiff.IFD
Returns an Property representing an integer value.
addIntegerProperty(String, int, String[], int[], boolean) - Method in class edu.harvard.hul.ois.jhove.module.tiff.IFD
Returns an Property representing an integer value.
addIntegerProperty(String, int, String[], int[]) - Method in class edu.harvard.hul.ois.jhove.ModuleBase
Returns an Property representing an integer value.
addIntegerProperty(String, int, String[]) - Method in class edu.harvard.hul.ois.jhove.ModuleBase
Returns an Property representing an integer value.
addLabel(Property) - Method in class edu.harvard.hul.ois.jhove.module.WaveModule
Adds a Label property
addLabeledText(Property) - Method in class edu.harvard.hul.ois.jhove.module.WaveModule
Adds a LabeledText property
addLabelElement(Map) - Static method in class edu.harvard.hul.ois.jhove.module.html.Html4DocDesc
Defines the LABEL element.
addLanguage(String) - Method in class edu.harvard.hul.ois.jhove.module.html.HtmlMetadata
Add a language defined in an attribute of any element except the HTML element.
addLanguageCode(String) - Method in class edu.harvard.hul.ois.jhove.module.pdf.Tokenizer
Add a string to the language codes
addLegendElement(Map) - Static method in class edu.harvard.hul.ois.jhove.module.html.Html4StrictDocDesc
 
addLegendElement(Map) - Static method in class edu.harvard.hul.ois.jhove.module.html.Html4TFDocDesc
 
addLiElement(Map) - Static method in class edu.harvard.hul.ois.jhove.module.html.Html4StrictDocDesc
 
addLiElement(Map) - Static method in class edu.harvard.hul.ois.jhove.module.html.Html4TFDocDesc
 
addLink(String) - Method in class edu.harvard.hul.ois.jhove.module.html.HtmlMetadata
Adds a link to the Links property.
addLinkElement(Map) - Static method in class edu.harvard.hul.ois.jhove.module.html.Html4StrictDocDesc
 
addLinkElement(Map) - Static method in class edu.harvard.hul.ois.jhove.module.html.Html4TFDocDesc
 
addListInfo(List) - Method in class edu.harvard.hul.ois.jhove.module.WaveModule
Adds the ListInfo property, which is a List of String Properties.
addMapElement(Map) - Static method in class edu.harvard.hul.ois.jhove.module.html.Html4DocDesc
Defines the MAP element.
addMenuElement(Map) - Static method in class edu.harvard.hul.ois.jhove.module.html.Html4TFDocDesc
 
addMeta(Property) - Method in class edu.harvard.hul.ois.jhove.module.html.HtmlMetadata
Adds a META tag's contents to the Meta property.
addMetaElement(Map) - Static method in class edu.harvard.hul.ois.jhove.module.html.Html4DocDesc
Defines the META element.
addMidi(Property) - Method in class edu.harvard.hul.ois.jhove.module.AiffModule
Adds a MIDI Property to the MIDI list.
addNoframesElement(Map, int) - Static method in class edu.harvard.hul.ois.jhove.module.html.Html4TFDocDesc
Adds the NOFRAMES element.
addNoscriptElement(Map) - Static method in class edu.harvard.hul.ois.jhove.module.html.Html4StrictDocDesc
 
addNoscriptElement(Map) - Static method in class edu.harvard.hul.ois.jhove.module.html.Html4TFDocDesc
 
addNote(Property) - Method in class edu.harvard.hul.ois.jhove.module.WaveModule
Adds a Note string
addObjectElement(Map) - Static method in class edu.harvard.hul.ois.jhove.module.html.Html4StrictDocDesc
 
addObjectElement(Map) - Static method in class edu.harvard.hul.ois.jhove.module.html.Html4TFDocDesc
 
addOlElement(Map) - Static method in class edu.harvard.hul.ois.jhove.module.html.Html4StrictDocDesc
 
addOlElement(Map) - Static method in class edu.harvard.hul.ois.jhove.module.html.Html4TFDocDesc
 
addOpacity(Property) - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.ComposLayerHdrBox
Add an opacity property.
addOptgroupElement(Map) - Static method in class edu.harvard.hul.ois.jhove.module.html.Html4DocDesc
Defines the OPTGROUP (option group) element.
addOptionElement(Map) - Static method in class edu.harvard.hul.ois.jhove.module.html.Html4DocDesc
Defines the OPTION element.
addPacketLength(long) - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.MainOrTile
Add a packet length to the list of packet lengths.
addPagesProperty(List, RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.PdfModule
 
addParamElement(Map) - Static method in class edu.harvard.hul.ois.jhove.module.html.Html4DocDesc
Defines the PARAM element.
addPElement(Map) - Static method in class edu.harvard.hul.ois.jhove.module.html.Html4StrictDocDesc
 
addPElement(Map) - Static method in class edu.harvard.hul.ois.jhove.module.html.Html4TFDocDesc
 
addPPMLength(long) - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.Codestream
Add a PPM tilepart header length to the list of lengths
addPPTLength(long) - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.Tile
Adds a PPM tilepart header length to the list of lengths
addPreElement(Map) - Static method in class edu.harvard.hul.ois.jhove.module.html.Html4StrictDocDesc
 
addPreElement(Map) - Static method in class edu.harvard.hul.ois.jhove.module.html.Html4TFDocDesc
 
addProperty(Property) - Method in class edu.harvard.hul.ois.jhove.module.Jpeg2000Module
Adds a property to the JPEG2000 metadata.
addPropertyIndex(int) - Method in class edu.harvard.hul.ois.jhove.PropertyPath
Adds an index to the path, for an indexed property.
addPropertyKey(Object) - Method in class edu.harvard.hul.ois.jhove.PropertyPath
Adds a key to the path, for a property map.
addPropertyName(String) - Method in class edu.harvard.hul.ois.jhove.PropertyPath
Adds a property name to the path.
addQElement(Map) - Static method in class edu.harvard.hul.ois.jhove.module.html.Html4DocDesc
Defines the Q (short quote) element.
addRationalArrayProperty(String, Rational[], boolean) - Method in class edu.harvard.hul.ois.jhove.module.tiff.IFD
 
addRationalProperty(String, Rational, boolean) - Method in class edu.harvard.hul.ois.jhove.module.tiff.IFD
Returns a property for a tag with a RATIONAL value.
addRepInfo(RepInfo, App, JhoveBase) - Method in class edu.harvard.hul.ois.jhove.viewer.ViewWindow
Appends the representation of a RepInfo object to the tree.
addRequiredAttribute(List, String) - Static method in class edu.harvard.hul.ois.jhove.module.html.HtmlDocDesc
Adds an attribute to a List, with unrestricted values and type REQUIRED.
addSample(Property) - Method in class edu.harvard.hul.ois.jhove.module.WaveModule
Adds a Sample property
addSamples(long) - Method in class edu.harvard.hul.ois.jhove.module.WaveModule
Add to the number of data bytes.
addSaxel(Property) - Method in class edu.harvard.hul.ois.jhove.module.AiffModule
Adds a Saxel Property to the saxel list.
addScript(String) - Method in class edu.harvard.hul.ois.jhove.module.html.HtmlMetadata
Adds the language of a SCRIPT element to the Scripts property.
addScriptElement(Map) - Static method in class edu.harvard.hul.ois.jhove.module.html.Html4StrictDocDesc
 
addScriptElement(Map) - Static method in class edu.harvard.hul.ois.jhove.module.html.Html4TFDocDesc
 
addSelectElement(Map) - Static method in class edu.harvard.hul.ois.jhove.module.html.Html4DocDesc
Defines the SELECT element.
addSelfAttribute(List, String) - Static method in class edu.harvard.hul.ois.jhove.module.html.HtmlDocDesc
Adds an attribute to a List, with the only permitted value being the name of the attribute.
addSimpleAttribute(List, String) - Static method in class edu.harvard.hul.ois.jhove.module.html.HtmlDocDesc
Adds an attribute to a List, with unrestricted values and type IMPLIED.
addSpanElement(Map) - Static method in class edu.harvard.hul.ois.jhove.module.html.Html4DocDesc
Defines the SPAN element.
addStringProperty(PdfDictionary, List, String, String) - Method in class edu.harvard.hul.ois.jhove.module.PdfModule
Add a string proprerty, based on a dictionary entry with a string value, to a specified List.
addStringsToList(String[], List) - Static method in class edu.harvard.hul.ois.jhove.module.html.HtmlDocDesc
Adds all the Strings in an array to the end of a List.
addStyleElement(Map) - Static method in class edu.harvard.hul.ois.jhove.module.html.Html4DocDesc
Defines the STYLE element.
addSubElement(Map) - Static method in class edu.harvard.hul.ois.jhove.module.html.Html4DocDesc
Defines the SUB (subscript) element.
addSupElement(Map) - Static method in class edu.harvard.hul.ois.jhove.module.html.Html4DocDesc
Defines the SUP (superscript) element.
addTableElement(Map) - Static method in class edu.harvard.hul.ois.jhove.module.html.Html4StrictDocDesc
 
addTableElement(Map) - Static method in class edu.harvard.hul.ois.jhove.module.html.Html4TFDocDesc
 
addTbodyElement(Map, List) - Static method in class edu.harvard.hul.ois.jhove.module.html.Html4DocDesc
Defines the TBODY element.
addTdElement(Map) - Static method in class edu.harvard.hul.ois.jhove.module.html.Html4DocDesc
Defines the TD element.
addTextareaElement(Map) - Static method in class edu.harvard.hul.ois.jhove.module.html.Html4DocDesc
Defines the TEXTAREA element.
addTfootElement(Map, List) - Static method in class edu.harvard.hul.ois.jhove.module.html.Html4DocDesc
Defines the TFOOT element.
addTheadElement(Map, List) - Static method in class edu.harvard.hul.ois.jhove.module.html.Html4DocDesc
Defines the THEAD element.
addThElement(Map) - Static method in class edu.harvard.hul.ois.jhove.module.html.Html4DocDesc
Defines the TH element.
addTile(long, long, long, long) - Method in class edu.harvard.hul.ois.jhove.module.jpeg.Tiling
Adds a tile to the list.
addTileLength(Property) - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.Codestream
Add a tile length property to the list of tile lengths.
addTilePart(TilePart) - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.Tile
Adds a TilePart to the List of TileParts.
addTitleElement(Map) - Static method in class edu.harvard.hul.ois.jhove.module.html.Html4DocDesc
Defines the TITLE element.
addToPropUnderConstruction(char[], int, int) - Method in class edu.harvard.hul.ois.jhove.module.html.HtmlMetadata
Adds PCDATA text to the property under construction.
addTrElement(Map) - Static method in class edu.harvard.hul.ois.jhove.module.html.Html4StrictDocDesc
 
addTrElement(Map) - Static method in class edu.harvard.hul.ois.jhove.module.html.Html4TFDocDesc
 
addUlElement(Map) - Static method in class edu.harvard.hul.ois.jhove.module.html.Html4StrictDocDesc
 
addUlElement(Map) - Static method in class edu.harvard.hul.ois.jhove.module.html.Html4TFDocDesc
 
addUUID(Property) - Method in class edu.harvard.hul.ois.jhove.module.Jpeg2000Module
Adds a UUID property to the list of UUID properties.
addUUIDInfo(Property) - Method in class edu.harvard.hul.ois.jhove.module.Jpeg2000Module
Adds a UUIDInfo property to the list of UUIDInfo properties.
addWaveProperty(Property) - Method in class edu.harvard.hul.ois.jhove.module.WaveModule
Adds a Property to the WAVE metadata.
addXML(String) - Method in class edu.harvard.hul.ois.jhove.module.Jpeg2000Module
Adds an XML string to the list of XML properties.
adjustBeginLineColumn(int, int) - Method in class edu.harvard.hul.ois.jhove.module.html.HtmlCharStream
Method to adjust line and column numbers for the start of a token.
adjustBeginLineColumn(int, int) - Method in class edu.harvard.hul.ois.jhove.module.html.SimpleCharStream
Method to adjust line and column numbers for the start of a token.
advanceIndex() - Method in class edu.harvard.hul.ois.jhove.module.html.JHOpenTag
Increments the value of _contentIdx
advanceTo(int) - Method in class edu.harvard.hul.ois.jhove.module.pdf.Stream
Advances to a specified offset in the stream.
AESAudioMetadata - Class in edu.harvard.hul.ois.jhove
Encapsulation of the AES Metadata for Audio documents
AESAudioMetadata() - Constructor for class edu.harvard.hul.ois.jhove.AESAudioMetadata
Instantiate a NisoImageMetadata object.
AESAUDIOMETADATA - Static variable in class edu.harvard.hul.ois.jhove.PropertyType
Property type for an AESAudioMetadata.
AESAudioMetadata.Face - Interface in edu.harvard.hul.ois.jhove
Public interface to the nested Face object.
AESAudioMetadata.FaceRegion - Interface in edu.harvard.hul.ois.jhove
Public interface to the nested FaceRegion object.
AESAudioMetadata.FormatRegion - Interface in edu.harvard.hul.ois.jhove
Public interface to the nested FormatRegion object.
AESAudioMetadata.TimeDesc - Interface in edu.harvard.hul.ois.jhove
Public interface to the nested TimeDesc object.
Agent - Class in edu.harvard.hul.ois.jhove
Encapsulates information about agents, either individual persons or corporate bodies.
Agent(String, AgentType) - Constructor for class edu.harvard.hul.ois.jhove.Agent
Creates an Agent given a name and an AgentType.
AgentType - Class in edu.harvard.hul.ois.jhove
This class defines enumerated types for an Agent.
AIFCTYPE - Static variable in class edu.harvard.hul.ois.jhove.module.AiffModule
 
AiffModule - Class in edu.harvard.hul.ois.jhove.module
Module for identification and validation of AIFF files.
AiffModule() - Constructor for class edu.harvard.hul.ois.jhove.module.AiffModule
Instantiates an AiffModule object.
AiffStrings - Class in edu.harvard.hul.ois.jhove.module.aiff
A class for holding arrays of informative strings that will go into properties of an AIFF object.
AIFFTYPE - Static variable in class edu.harvard.hul.ois.jhove.module.AiffModule
 
ALGORITHM - Static variable in class edu.harvard.hul.ois.jhove.module.pdf.PdfStrings
Encryption algorithm strings.
allowsPCData() - Method in class edu.harvard.hul.ois.jhove.module.html.HtmlTagDesc
 
allowsTag(String, int, HtmlDocDesc) - Method in class edu.harvard.hul.ois.jhove.module.html.HtmlTagDesc
Reports whether this element allows a given tag name in its content, at the specified index.
allowsTag(String, HtmlDocDesc) - Method in class edu.harvard.hul.ois.jhove.module.html.HtmlTagDesc
Reports whether this element allows a given tag name in its content.
allowsTag(String, int, HtmlDocDesc) - Method in class edu.harvard.hul.ois.jhove.module.html.HtmlTempTagDesc
Reports whether this element allows a given tag name in its content, at the specified index.
allowsTag(String, HtmlDocDesc) - Method in class edu.harvard.hul.ois.jhove.module.html.JHOpenTag
Returns true if the tag given in the parameter is allowable in our context.
ANALOG - Static variable in class edu.harvard.hul.ois.jhove.AnalogDigitalFlagType
Enumeration instance for analog data
AnalogDigitalFlagType - Class in edu.harvard.hul.ois.jhove
This class defines enumerated types for the analog/digital flag of AESAudioMetadata.
analyze(RepInfo) - Method in class edu.harvard.hul.ois.jhove.HandlerBase
Callback allowing post-parse, pre-show analysis of object representation information.
analyze(RepInfo) - Method in interface edu.harvard.hul.ois.jhove.OutputHandler
Callback allowing post-parse, pre-show analysis of object representation information.
analyzeDirectory(File, Module) - Method in class edu.harvard.hul.ois.jhove.viewer.JhoveWindow
This method opens a directory, recursing through multiple levels if possible, and feeding individual files to pickAndAnalyzeFile1.
ANCILLARY_DEF_0 - Static variable in class edu.harvard.hul.ois.jhove.module.wave.WaveStrings
Flags for ancillary data definition in the MPEG chunk, "0" values
ANCILLARY_DEF_1 - Static variable in class edu.harvard.hul.ois.jhove.module.wave.WaveStrings
Flags for ancillary data definition in the MPEG chunk, "1" values
ANGULARUNITS - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.GeoTiffStrings
 
ANGULARUNITS_INDEX - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.GeoTiffStrings
 
AnnotationChunk - Class in edu.harvard.hul.ois.jhove.module.aiff
Implementation of the AIFF Annotation Chunk.
AnnotationChunk(AiffModule, ChunkHeader, DataInputStream) - Constructor for class edu.harvard.hul.ois.jhove.module.aiff.AnnotationChunk
Constructor.
ANNOTATIONFLAGS - Static variable in class edu.harvard.hul.ois.jhove.module.pdf.PdfStrings
Flags for annotations
ANSI - Static variable in class edu.harvard.hul.ois.jhove.IdentifierType
Identifier type for American National Standards Institute.
App - Class in edu.harvard.hul.ois.jhove
The application class for JHOVE.
App(String, String, int[], String, String) - Constructor for class edu.harvard.hul.ois.jhove.App
Creates an App object.
appendHex(int) - Method in class edu.harvard.hul.ois.jhove.module.pdf.Literal
Append a hex character.
appendThumbnailProps(List) - Method in class edu.harvard.hul.ois.jhove.module.jpeg.SpiffDir
Appends any thumbnail properties that have been collected to the provided list.
AppInfoWindow - Class in edu.harvard.hul.ois.jhove.viewer
This window is for presenting information about the JHOVE application.
AppInfoWindow(App, JhoveBase) - Constructor for class edu.harvard.hul.ois.jhove.viewer.AppInfoWindow
 
ApplicationChunk - Class in edu.harvard.hul.ois.jhove.module.aiff
Implementation of the AIFF Application Chunk.
ApplicationChunk(AiffModule, ChunkHeader, DataInputStream) - Constructor for class edu.harvard.hul.ois.jhove.module.aiff.ApplicationChunk
Constructor.
applyDefaultParams() - Method in class edu.harvard.hul.ois.jhove.HandlerBase
Applies the default parameters.
applyDefaultParams() - Method in interface edu.harvard.hul.ois.jhove.Module
Applies the default parameters.
applyDefaultParams() - Method in class edu.harvard.hul.ois.jhove.ModuleBase
Applies the default parameters.
applyDefaultParams() - Method in interface edu.harvard.hul.ois.jhove.OutputHandler
Applies the default parameters.
approxIdx - Static variable in class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Strings
Indexes for approxStr.
approxStr - Static variable in class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Strings
Strings for the approx field of the color specification box, indexed by approxIdx.
AProfile - Class in edu.harvard.hul.ois.jhove.module.pdf
PDF profile checker for PDF/A-1 documents.
AProfile(PdfModule) - Constructor for class edu.harvard.hul.ois.jhove.module.pdf.AProfile
Constructor.
AProfileLevelA - Class in edu.harvard.hul.ois.jhove.module.pdf
PDF profile checker for PDF/A-1 documents, Level A.
AProfileLevelA(PdfModule) - Constructor for class edu.harvard.hul.ois.jhove.module.pdf.AProfileLevelA
Constructor.
ArithConditioning - Class in edu.harvard.hul.ois.jhove.module.jpeg
Encapsulation of an arithmetic conditioning entry for a JPEG image.
ArithConditioning(int, int) - Constructor for class edu.harvard.hul.ois.jhove.module.jpeg.ArithConditioning
Constructor.
ARRAY - Static variable in class edu.harvard.hul.ois.jhove.PropertyArity
An Arity corresponding to a Java array.
ArrayEnd - Class in edu.harvard.hul.ois.jhove.module.pdf
Class for Tokens which represent the "]" that closes an array.
ArrayEnd() - Constructor for class edu.harvard.hul.ois.jhove.module.pdf.ArrayEnd
Creates an instance of an ArrayEnd
ArrayStart - Class in edu.harvard.hul.ois.jhove.module.pdf
Class for Tokens which represent the "[" that opens an array.
ArrayStart() - Constructor for class edu.harvard.hul.ois.jhove.module.pdf.ArrayStart
Creates an instance of an ArrayStart
ARTICLE - Static variable in class edu.harvard.hul.ois.jhove.DocumentType
Document type for a printed article.
ARTIST - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Standard TIFF 6.0 tags.
ASCII - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.IFD
TIFF ASCII type.
Ascii85FilterStream - Class in edu.harvard.hul.ois.jhove.module.pdf
This is a stub which may be implemented in the future.
Ascii85FilterStream(InputStream) - Constructor for class edu.harvard.hul.ois.jhove.module.pdf.Ascii85FilterStream
 
AsciiHexFilterStream - Class in edu.harvard.hul.ois.jhove.module.pdf
This is a stub which may be implemented in the future.
AsciiHexFilterStream(InputStream) - Constructor for class edu.harvard.hul.ois.jhove.module.pdf.AsciiHexFilterStream
 
AsciiModule - Class in edu.harvard.hul.ois.jhove.module
Module for analysis of content as an ASCII stream.
AsciiModule() - Constructor for class edu.harvard.hul.ois.jhove.module.AsciiModule
Creates an AsciiModule.
AssocDataListChunk - Class in edu.harvard.hul.ois.jhove.module.wave
The associated data list ('list') chunk, which is different from the RIFF 'LIST' chunk, ListInfoTextChunk.
AssocDataListChunk(ModuleBase, ChunkHeader, DataInputStream, RepInfo) - Constructor for class edu.harvard.hul.ois.jhove.module.wave.AssocDataListChunk
Constructor.
AssociationBox - Class in edu.harvard.hul.ois.jhove.module.jpeg2000
Association Box.
AssociationBox(RandomAccessFile, BoxHolder) - Constructor for class edu.harvard.hul.ois.jhove.module.jpeg2000.AssociationBox
Constructor with superbox.
associationProps - Variable in class edu.harvard.hul.ois.jhove.module.Jpeg2000Module
 
associations - Variable in class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
 
Attribute(List) - Method in class edu.harvard.hul.ois.jhove.module.html.ParseHtml
 
attributeDecl(String, String, String, String, String) - Method in class edu.harvard.hul.ois.jhove.module.xml.XmlDeclHandler
Report an attribute type declaration.
AttrVal() - Method in class edu.harvard.hul.ois.jhove.module.html.ParseHtml
 
AudioRecChunk - Class in edu.harvard.hul.ois.jhove.module.aiff
Implementation of the AIFF Audio Recording Chunk.
AudioRecChunk(AiffModule, ChunkHeader, DataInputStream) - Constructor for class edu.harvard.hul.ois.jhove.module.aiff.AudioRecChunk
Constructor.
audioRecChunkSeen - Variable in class edu.harvard.hul.ois.jhove.module.AiffModule
 
AuditCount - Class in edu.harvard.hul.ois.jhove.handler.audit
Count object for the JHOVE Audit output handler.
AuditCount() - Constructor for class edu.harvard.hul.ois.jhove.handler.audit.AuditCount
Instantiate a AuditCount object.
AuditHandler - Class in edu.harvard.hul.ois.jhove.handler
JHOVE audit output handler, derived from the standard JHOVE XML handler.
AuditHandler() - Constructor for class edu.harvard.hul.ois.jhove.handler.AuditHandler
Instantiate a AudiHandler object.
AuditState - Class in edu.harvard.hul.ois.jhove.handler.audit
State object for the JHOVE Audit output handler.
AuditState(String) - Constructor for class edu.harvard.hul.ois.jhove.handler.audit.AuditState
Instantiate a AuditState object.
AuthorChunk - Class in edu.harvard.hul.ois.jhove.module.aiff
Implementation of the AIFF Author Chunk.
AuthorChunk(AiffModule, ChunkHeader, DataInputStream) - Constructor for class edu.harvard.hul.ois.jhove.module.aiff.AuthorChunk
Constructor.
authorChunkSeen - Variable in class edu.harvard.hul.ois.jhove.module.AiffModule
 
AUTOFOCUS - Static variable in class edu.harvard.hul.ois.jhove.NisoImageMetadata
7.7.3.15 auto focus value labels.
average(Rational, Rational) - Static method in class edu.harvard.hul.ois.jhove.module.tiff.IFD
 
AXMLChunk - Class in edu.harvard.hul.ois.jhove.module.wave
Implementation of the WAVE AXML Chunk, which contains arbitrary XML metadata, as specified in Specification of the Broadcast Wave Format: A format for audio data files in broadcasting; Supplement 5: <axml> Chunk (European Broadcasting Union)
AXMLChunk(ModuleBase, ChunkHeader, DataInputStream) - Constructor for class edu.harvard.hul.ois.jhove.module.wave.AXMLChunk
Constructor.

B

BACKGROUNDCOLORINDICATOR_L - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
 
BACKLIGHT - Static variable in class edu.harvard.hul.ois.jhove.NisoImageMetadata
7.7.3.13 back light value labels.
backup(int) - Method in interface edu.harvard.hul.ois.jhove.module.html.CharStream
Backs up the input stream by amount steps.
backup(int) - Method in class edu.harvard.hul.ois.jhove.module.html.HtmlCharStream
 
backup(int) - Method in class edu.harvard.hul.ois.jhove.module.html.SimpleCharStream
 
backupChar() - Method in class edu.harvard.hul.ois.jhove.module.pdf.FileTokenizer
Back up a byte so it will be read again.
backupChar() - Method in class edu.harvard.hul.ois.jhove.module.pdf.StreamTokenizer
Back up a byte so it will be read again.
backupChar() - Method in class edu.harvard.hul.ois.jhove.module.pdf.Tokenizer
Back up a byte so it will be read again.
bboxOK(boolean) - Method in class edu.harvard.hul.ois.jhove.module.pdf.XProfileBase
Checks all the page objects for bounding boxes.
beginColumn - Variable in class edu.harvard.hul.ois.jhove.module.html.Token
beginLine and beginColumn describe the position of the first character of this token; endLine and endColumn describe the position of the last character of this token.
beginLine - Variable in class edu.harvard.hul.ois.jhove.module.html.Token
beginLine and beginColumn describe the position of the first character of this token; endLine and endColumn describe the position of the last character of this token.
BeginToken() - Method in interface edu.harvard.hul.ois.jhove.module.html.CharStream
Returns the next character that marks the beginning of the next token.
BeginToken() - Method in class edu.harvard.hul.ois.jhove.module.html.HtmlCharStream
 
BeginToken() - Method in class edu.harvard.hul.ois.jhove.module.html.SimpleCharStream
 
BIG_ENDIAN - Static variable in class edu.harvard.hul.ois.jhove.AESAudioMetadata
Big-endian constant.
bigAttrs - Static variable in class edu.harvard.hul.ois.jhove.module.html.Html4DocDesc
Big attributes list.
biggerAttrs - Static variable in class edu.harvard.hul.ois.jhove.module.html.Html4DocDesc
Big attributes plus reserved attributes.
BinaryFilterBox - Class in edu.harvard.hul.ois.jhove.module.jpeg2000
Binary Filter box (JPX).
BinaryFilterBox(RandomAccessFile, JP2Box) - Constructor for class edu.harvard.hul.ois.jhove.module.jpeg2000.BinaryFilterBox
Constructor with superbox.
binaryFilterProps - Variable in class edu.harvard.hul.ois.jhove.module.Jpeg2000Module
 
BITSPERSAMPLE - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Standard TIFF 6.0 tags.
blockContent - Static variable in class edu.harvard.hul.ois.jhove.module.html.Html4DocDesc
List of block elements.
blockLevelNames - Static variable in class edu.harvard.hul.ois.jhove.module.pdf.StdStructTypes
The subset of typeNames which denotes a block-level element
blockMarker - Variable in class edu.harvard.hul.ois.jhove.module.Utf8Module
 
bodyContent - Static variable in class edu.harvard.hul.ois.jhove.module.html.Html4DocDesc
List of elements for the BODY element and some other elements.
bodyElement - Variable in class edu.harvard.hul.ois.jhove.module.html.HtmlDocDesc
A representation of the BODY element.
BOOK - Static variable in class edu.harvard.hul.ois.jhove.DocumentType
Document type for an book.
BOOLEAN - Static variable in class edu.harvard.hul.ois.jhove.PropertyType
Property type for a Boolean object, or a boolean if the Arity is Array.
BoxHeader - Class in edu.harvard.hul.ois.jhove.module.jpeg2000
Encapsulation of a JPEG 2000 box header.
BoxHeader(Jpeg2000Module, DataInputStream) - Constructor for class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHeader
Constructor.
BoxHolder - Class in edu.harvard.hul.ois.jhove.module.jpeg2000
A BoxHolder is a container for JPEG 2000 boxes.
BoxHolder(RandomAccessFile) - Constructor for class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
Constructor.
boxMaker(String, BoxHolder) - Static method in class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
Static factory method for generating an object of the appropriate subclass of MarkerSegment, based on the box type.
BPCCBox - Class in edu.harvard.hul.ois.jhove.module.jpeg2000
Bits Per Component box.
BPCCBox(RandomAccessFile, BoxHolder) - Constructor for class edu.harvard.hul.ois.jhove.module.jpeg2000.BPCCBox
Constructor with superbox.
BroadcastExtChunk - Class in edu.harvard.hul.ois.jhove.module.wave
Implementation of the WAVE Broadcast Audio Extension Chunk.
BroadcastExtChunk(ModuleBase, ChunkHeader, DataInputStream) - Constructor for class edu.harvard.hul.ois.jhove.module.wave.BroadcastExtChunk
Constructor.
broadcastExtChunkSeen - Variable in class edu.harvard.hul.ois.jhove.module.WaveModule
 
broadcastVersion - Variable in class edu.harvard.hul.ois.jhove.module.WaveModule
 
bufcolumn - Variable in class edu.harvard.hul.ois.jhove.module.html.HtmlCharStream
 
bufcolumn - Variable in class edu.harvard.hul.ois.jhove.module.html.SimpleCharStream
 
buffer - Variable in class edu.harvard.hul.ois.jhove.module.html.HtmlCharStream
 
buffer - Variable in class edu.harvard.hul.ois.jhove.module.html.SimpleCharStream
 
bufline - Variable in class edu.harvard.hul.ois.jhove.module.html.HtmlCharStream
 
bufline - Variable in class edu.harvard.hul.ois.jhove.module.html.SimpleCharStream
 
bufpos - Variable in class edu.harvard.hul.ois.jhove.module.html.HtmlCharStream
 
bufpos - Variable in class edu.harvard.hul.ois.jhove.module.html.SimpleCharStream
 
buildAnnotProperty(PdfDictionary, RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.PdfModule
 
buildBitmaskProperty(int, String, String[], String) - Method in class edu.harvard.hul.ois.jhove.module.PdfModule
 
buildBitmaskProperty(int, String, String[], String[]) - Method in class edu.harvard.hul.ois.jhove.module.WaveModule
General function for adding a property with a 32-bit value, with two arrays of Strings to interpret 0 and 1 values as a bitmask.
buildCapProp(RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.JpegModule
 
buildCIDInfoProperty(PdfDictionary) - Method in class edu.harvard.hul.ois.jhove.module.PdfModule
 
buildCMapDictProperty(PdfStream) - Method in class edu.harvard.hul.ois.jhove.module.PdfModule
 
buildEncodingDictProperty(PdfDictionary) - Method in class edu.harvard.hul.ois.jhove.module.PdfModule
 
buildExpandProp(RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.JpegModule
 
buildFontDescriptorProperty(PdfDictionary) - Method in class edu.harvard.hul.ois.jhove.module.PdfModule
 
buildFontProperty(String, Map, int) - Method in class edu.harvard.hul.ois.jhove.module.PdfModule
 
buildMeasureProperty(PdfDictionary) - Method in class edu.harvard.hul.ois.jhove.module.PdfModule
 
buildOutlineItemProperty(PdfDictionary, RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.PdfModule
 
buildOutlinesProperty(PdfDictionary, RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.PdfModule
 
buildPageLabelProperty(PageObject, int, int[]) - Method in class edu.harvard.hul.ois.jhove.module.PdfModule
 
buildPageProperty(PageObject, int, RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.PdfModule
 
buildProfileList() - Method in class edu.harvard.hul.ois.jhove.module.TiffModule
Build list of profiles to check.
buildProperty() - Method in class edu.harvard.hul.ois.jhove.module.wave.ExifInfo
Constructs a property and returns it.
buildSubtree() - Method in class edu.harvard.hul.ois.jhove.module.pdf.PageLabelNode
Build the subtree of descendants of this node, using the Kids entry in the dictionary.
buildSubtree(boolean, int) - Method in class edu.harvard.hul.ois.jhove.module.pdf.PageTreeNode
Builds the subtree of descendants of this node, using the Kids entry in the dictionary.
buildSubtree(boolean, int, int, int) - Method in class edu.harvard.hul.ois.jhove.module.pdf.PageTreeNode
Builds the subtree of descendants of this node, using the Kids entry in the dictionary.
buildSubtree() - Method in class edu.harvard.hul.ois.jhove.module.pdf.StructureElement
Build this element's subtree, if any This checks the "K" entry in the dictionary and locates all referened structure elements.
buildTileListProp() - Method in class edu.harvard.hul.ois.jhove.module.jpeg.Tiling
Returns a property listing all the tiles.
buildTilingProp(RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.JpegModule
 
buildUserPermProperty(int, String[]) - Method in class edu.harvard.hul.ois.jhove.module.PdfModule
 
buildViewPrefProperty(PdfDictionary) - Method in class edu.harvard.hul.ois.jhove.module.PdfModule
 
BYTE - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.IFD
TIFF BYTE (unsigned 8-bit) type.
BYTE - Static variable in class edu.harvard.hul.ois.jhove.PropertyType
Property type for a Byte object, or a byte if the Arity is Array.
BYTE_ORDER - Static variable in class edu.harvard.hul.ois.jhove.TextMDMetadata
Uses enumerated values of 'big', 'little', and 'middle' endian.
BYTE_ORDER_BIG - Static variable in class edu.harvard.hul.ois.jhove.TextMDMetadata
 
BYTE_ORDER_LITTLE - Static variable in class edu.harvard.hul.ois.jhove.TextMDMetadata
 
BYTE_ORDER_MIDDLE - Static variable in class edu.harvard.hul.ois.jhove.TextMDMetadata
 
ByteArrayXMPSource - Class in edu.harvard.hul.ois.jhove
Class for providing an InputSource to XMPHandler, with a ByteArrayInputStream as the basis of the InputSource.
ByteArrayXMPSource(ByteArrayInputStream) - Constructor for class edu.harvard.hul.ois.jhove.ByteArrayXMPSource
Constructor based on ByteArrayInputStream.
ByteArrayXMPSource(ByteArrayInputStream, String) - Constructor for class edu.harvard.hul.ois.jhove.ByteArrayXMPSource
Constructor based on ByteArrayInputStream with encoding.
byteBufString(byte[]) - Method in class edu.harvard.hul.ois.jhove.module.iff.Chunk
Convert a byte buffer cleanly to an ASCII string.
BYTEORDER - Static variable in class edu.harvard.hul.ois.jhove.NisoImageMetadata
6.1.2 byte order value labels.
bytesLeft - Variable in class edu.harvard.hul.ois.jhove.module.iff.Chunk
 
bytesLeft - Variable in class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
 
bytesRemaining - Variable in class edu.harvard.hul.ois.jhove.module.AiffModule
 
bytesRemaining - Variable in class edu.harvard.hul.ois.jhove.module.WaveModule
 
BytestreamModule - Class in edu.harvard.hul.ois.jhove.module
Module for analysis of content as a byte stream.
BytestreamModule() - Constructor for class edu.harvard.hul.ois.jhove.module.BytestreamModule
Creates a BytestreamModule.

C

calcRAChecksum(Checksummer, RandomAccessFile) - Method in class edu.harvard.hul.ois.jhove.ModuleBase
Calculates the checksums for a module that uses a random access file.
calcValueSize(int, long) - Static method in class edu.harvard.hul.ois.jhove.module.tiff.IFD
Calculate how many bytes a given number of fields of a given type will require.
Callback - Interface in edu.harvard.hul.ois.jhove
An interface for supporting a general, simple callback function.
callback(int, Object) - Method in interface edu.harvard.hul.ois.jhove.Callback
A generic callback function.
callback(int, Object) - Method in class edu.harvard.hul.ois.jhove.viewer.JhoveWindow
Implementation of Callback.callback.
canAdvance() - Method in class edu.harvard.hul.ois.jhove.module.html.JHOpenTag
Reports whether it's legal to advance to the next content index.
canAdvanceFrom(int, int) - Method in class edu.harvard.hul.ois.jhove.module.html.HtmlTagDesc
Reports whether it's legal to advance to the next content index.
canGetMore() - Method in class edu.harvard.hul.ois.jhove.module.html.JHOpenTag
Checks if we can accept another element at the current content index.
canGetMoreAt(int, int) - Method in class edu.harvard.hul.ois.jhove.module.html.HtmlTagDesc
Reports whether additional elements can be matched at the specified content index.
CAPABILITY_V0 - Static variable in class edu.harvard.hul.ois.jhove.module.jpeg.JpegStrings
Values for capability indicator byte for Version 0
CAPABILITY_V1 - Static variable in class edu.harvard.hul.ois.jhove.module.jpeg.JpegStrings
Values for capability indicator byte for Version 1.
CaptureResolutionBox - Class in edu.harvard.hul.ois.jhove.module.jpeg2000
Capture Resolution Box.
CaptureResolutionBox(RandomAccessFile, BoxHolder) - Constructor for class edu.harvard.hul.ois.jhove.module.jpeg2000.CaptureResolutionBox
Constructor with superbox.
CartChunk - Class in edu.harvard.hul.ois.jhove.module.wave
Implementation of the WAVE Cart Chunk.
CartChunk(ModuleBase, ChunkHeader, DataInputStream) - Constructor for class edu.harvard.hul.ois.jhove.module.wave.CartChunk
Constructor.
cartChunkSeen - Variable in class edu.harvard.hul.ois.jhove.module.WaveModule
 
CCITT - Static variable in class edu.harvard.hul.ois.jhove.IdentifierType
Identifier type for CCITT.
CELLLENGTH - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Standard TIFF 6.0 tags.
CELLWIDTH - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Standard TIFF 6.0 tags.
centerTopWindow(Window) - Static method in class edu.harvard.hul.ois.jhove.viewer.MainScreen
Center the window at the top of the main screen.
centerWindow(Window) - Static method in class edu.harvard.hul.ois.jhove.viewer.MainScreen
Center the window on the main screen.
CFA - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffProfileDNG
PhotometricInterpretation for CFA space
CFALAYOUT_L - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
 
ChannelDefBox - Class in edu.harvard.hul.ois.jhove.module.jpeg2000
Channel Definition Box.
ChannelDefBox(RandomAccessFile, BoxHolder) - Constructor for class edu.harvard.hul.ois.jhove.module.jpeg2000.ChannelDefBox
Constructor with superbox.
CHARACTER - Static variable in class edu.harvard.hul.ois.jhove.PropertyType
Property type for a Character object, or a char if the Arity is Array.
characters(char[], int, int) - Method in class edu.harvard.hul.ois.jhove.ConfigHandler
SAX parser callback method.
characters(char[], int, int) - Method in class edu.harvard.hul.ois.jhove.module.wave.LinkChunkHandler
SAX parser callback method for PC text.
characters(char[], int, int) - Method in class edu.harvard.hul.ois.jhove.module.xml.XmlModuleHandler
Processes PCData characters.
CHARSET_ASCII - Static variable in class edu.harvard.hul.ois.jhove.TextMDMetadata
 
CHARSET_ISO8859_1 - Static variable in class edu.harvard.hul.ois.jhove.TextMDMetadata
 
CHARSET_UTF8 - Static variable in class edu.harvard.hul.ois.jhove.TextMDMetadata
 
CharStream - Interface in edu.harvard.hul.ois.jhove.module.html
This interface describes a character stream that maintains line and column number positions of the characters.
checkAttributes() - Method in class edu.harvard.hul.ois.jhove.module.pdf.StructureElement
Determine if the attributes of this element are valid.
checkCount(int, long, int) - Static method in class edu.harvard.hul.ois.jhove.module.tiff.IFD
Check the tag entry count.
checkDoctype(List) - Method in class edu.harvard.hul.ois.jhove.module.HtmlModule
 
checkLineEnd(int) - Method in class edu.harvard.hul.ois.jhove.module.AsciiModule
PRIVATE INSTANCE METHODS.
checkLineEnd(int) - Method in class edu.harvard.hul.ois.jhove.module.Utf8Module
Accumulate information about line endings.
checkLineEnd(int) - Method in class edu.harvard.hul.ois.jhove.module.xml.XmlDeclStream
 
checkMark(int, RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.Utf8Module
 
checkPrefsAgainstBleedBox() - Method in class edu.harvard.hul.ois.jhove.module.pdf.XProfileBase
Checks ViewerPreferences dictionary against MediaBox and BleedBox.
checkSignatures(File, InputStream, RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.AsciiModule
Check if the digital object conforms to this Module's internal signature information.
checkSignatures(File, InputStream, RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.BytestreamModule
Check signature.
checkSignatures(File, InputStream, RepInfo) - Method in interface edu.harvard.hul.ois.jhove.Module
Check if the digital object conforms to this Module's internal signature information.
checkSignatures(File, RandomAccessFile, RepInfo) - Method in interface edu.harvard.hul.ois.jhove.Module
Check if the digital object conforms to this Module's internal signature information.
checkSignatures(File, InputStream, RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.GifModule
Check if the digital object conforms to this Module's internal signature information.
checkSignatures(File, InputStream, RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.HtmlModule
Check if the digital object conforms to this Module's internal signature information.
checkSignatures(File, InputStream, RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.JpegModule
Check if the digital object conforms to this Module's internal signature information.
checkSignatures(File, InputStream, RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.Utf8Module
Check if the digital object conforms to this Module's internal signature information.
checkSignatures(File, InputStream, RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.XmlModule
Check if the digital object conforms to this Module's internal signature information.
checkSignatures(File, InputStream, RepInfo) - Method in class edu.harvard.hul.ois.jhove.ModuleBase
Check if the digital object conforms to this Module's internal signature information.
checkSignatures(File, RandomAccessFile, RepInfo) - Method in class edu.harvard.hul.ois.jhove.ModuleBase
Check if the digital object conforms to this Module's internal signature information.
Checksum - Class in edu.harvard.hul.ois.jhove
This class encapsulates the result of calculations which provide a greater or lesser degree of confirmation of the integrity of a digital object's content, including checksums, CRC's, message digests, etc.
Checksum(String, ChecksumType) - Constructor for class edu.harvard.hul.ois.jhove.Checksum
Creates a Checksum with a given value and type
CHECKSUM_METHOD - Static variable in class edu.harvard.hul.ois.jhove.NisoImageMetadata
6.2.3.1 Checksum method value labels.
ChecksumInputStream - Class in edu.harvard.hul.ois.jhove
A ChecksumInputStream is a FilterInputStream with the added functionality of calculating checksums as it goes.
ChecksumInputStream(InputStream, Checksummer) - Constructor for class edu.harvard.hul.ois.jhove.ChecksumInputStream
Constructor.
Checksummer - Class in edu.harvard.hul.ois.jhove
The Checksummer class encapsulates the calculation of the CRC32, MD5, and SHA-1 checksums.
Checksummer() - Constructor for class edu.harvard.hul.ois.jhove.Checksummer
Creates a Checksummer, with instances of each of CRC32, MD5 MessageDigest, and SHA-1 MessageDigest.
ChecksumType - Class in edu.harvard.hul.ois.jhove
This class defines enumerated types for a Checksum on a content stream or file.
checkType(int, int, int) - Static method in class edu.harvard.hul.ois.jhove.module.tiff.IFD
Check the tag entry type.
checkType(int, int, int, int) - Static method in class edu.harvard.hul.ois.jhove.module.tiff.IFD
Check the tag entry type.
checkValidity(List, RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.TiffModule
Go through all the IFD's, calling checkIFDValidity on each one that is a standard IFD.
checkValidity(TiffIFD, RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.TiffModule
Check the validity of the IFD.
Chunk - Class in edu.harvard.hul.ois.jhove.module.iff
Abstract superclass for IFF/AIFF chunks.
Chunk(ModuleBase, ChunkHeader, DataInputStream) - Constructor for class edu.harvard.hul.ois.jhove.module.iff.Chunk
Constructor.
ChunkHeader - Class in edu.harvard.hul.ois.jhove.module.iff
This class encapsulates an IFF/AIFF chunk header.
ChunkHeader(ModuleBase, RepInfo) - Constructor for class edu.harvard.hul.ois.jhove.module.iff.ChunkHeader
Constructor.
classInit4(Map, int) - Static method in class edu.harvard.hul.ois.jhove.module.html.Html4_01TFDocDesc
Initialization code.
classInit4(Map, int) - Static method in class edu.harvard.hul.ois.jhove.module.html.Html4_0TFDocDesc
 
classInit4(Map) - Static method in class edu.harvard.hul.ois.jhove.module.html.Html4DocDesc
Initialization code.
classInit4(Map) - Static method in class edu.harvard.hul.ois.jhove.module.html.Html4StrictDocDesc
Code which is called from the static initializer of the subclasses.
classInit4(Map) - Static method in class edu.harvard.hul.ois.jhove.module.html.Html4TFDocDesc
Code which is called from the static initializer of the subclasses.
clearBitrateReduction() - Method in class edu.harvard.hul.ois.jhove.AESAudioMetadata
Set the bitrate reduction information to null (no compression).
clearBitrateReduction() - Method in interface edu.harvard.hul.ois.jhove.AESAudioMetadata.FormatRegion
Sets the bitrate reduction information to null (no compression).
clone(String) - Method in class edu.harvard.hul.ois.jhove.handler.audit.AuditState
Creates and returns a copy of this object.
clone() - Method in class edu.harvard.hul.ois.jhove.RepInfo
Clones the RepInfo one level deep, making fresh copies of the checksum, message, profile, signature match, and property fields.
close() - Method in class edu.harvard.hul.ois.jhove.ChecksumInputStream
Closes the subsumed stream.
close() - Method in class edu.harvard.hul.ois.jhove.HandlerBase
Close the writer after all output has been done.
close() - Method in interface edu.harvard.hul.ois.jhove.OutputHandler
Do appropriate finalization after all output is complete.
closeFromMenu() - Method in class edu.harvard.hul.ois.jhove.viewer.InfoWindow
Handler for the "Close" menu item.
closeFromMenu() - Method in class edu.harvard.hul.ois.jhove.viewer.ViewWindow
Invoked when the "Close" menu item is selected.
CloseTag() - Method in class edu.harvard.hul.ois.jhove.module.html.ParseHtml
 
COC - Static variable in class edu.harvard.hul.ois.jhove.module.jpeg2000.MarkerSegment
 
COCMarkerSegment - Class in edu.harvard.hul.ois.jhove.module.jpeg2000
Class for the COC (Coding style component) marker segment.
COCMarkerSegment() - Constructor for class edu.harvard.hul.ois.jhove.module.jpeg2000.COCMarkerSegment
Constructor.
COD - Static variable in class edu.harvard.hul.ois.jhove.module.jpeg2000.MarkerSegment
 
Codestream - Class in edu.harvard.hul.ois.jhove.module.jpeg2000
The information on a codestream, extracted from a Contiguous Codestream or Fragment Table, and the corresponding Codestream Header if any.
Codestream() - Constructor for class edu.harvard.hul.ois.jhove.module.jpeg2000.Codestream
 
CodestreamHeaderBox - Class in edu.harvard.hul.ois.jhove.module.jpeg2000
Codestream Header box.
CodestreamHeaderBox(RandomAccessFile, BoxHolder) - Constructor for class edu.harvard.hul.ois.jhove.module.jpeg2000.CodestreamHeaderBox
Constructor with superbox.
CodestreamRegBox - Class in edu.harvard.hul.ois.jhove.module.jpeg2000
Codestream Registration Box.
CodestreamRegBox(RandomAccessFile, BoxHolder) - Constructor for class edu.harvard.hul.ois.jhove.module.jpeg2000.CodestreamRegBox
Constructor with superbox.
codestreams - Variable in class edu.harvard.hul.ois.jhove.module.Jpeg2000Module
 
CODINGMETHODS - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.GlobalParametersIFD
Tiff/FX-specific tags.
CODMarkerSegment - Class in edu.harvard.hul.ois.jhove.module.jpeg2000
Class for the COD (coding style default) marker segment.
CODMarkerSegment() - Constructor for class edu.harvard.hul.ois.jhove.module.jpeg2000.CODMarkerSegment
 
COLON - Static variable in interface edu.harvard.hul.ois.jhove.module.html.ParseHtmlConstants
 
COLOR_TABLE_SORT_FLAG - Static variable in class edu.harvard.hul.ois.jhove.module.gif.GifStrings
Strings for ordering or non-ordering of color table
ColorGroupBox - Class in edu.harvard.hul.ois.jhove.module.jpeg2000
Color Group Box.
ColorGroupBox(RandomAccessFile, BoxHolder) - Constructor for class edu.harvard.hul.ois.jhove.module.jpeg2000.ColorGroupBox
Constructor with superbox.
COLORMAP - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Standard TIFF 6.0 tags.
COLORSPACE - Static variable in class edu.harvard.hul.ois.jhove.NisoImageMetadata
6.1.4.1 Color space value labels.
COLORSPACE_INDEX - Static variable in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Index for 6.1.4.1 color space value labels.
colorSpaceToNiso(int) - Static method in class edu.harvard.hul.ois.jhove.module.jpeg.Spiff
Converts S value to NISO color space.
ColorSpecBox - Class in edu.harvard.hul.ois.jhove.module.jpeg2000
Color specification box.
ColorSpecBox(RandomAccessFile, BoxHolder) - Constructor for class edu.harvard.hul.ois.jhove.module.jpeg2000.ColorSpecBox
Constructor with superbox.
colorSpecs - Variable in class edu.harvard.hul.ois.jhove.module.Jpeg2000Module
 
colorSpecSeen - Variable in class edu.harvard.hul.ois.jhove.module.Jpeg2000Module
 
column - Variable in class edu.harvard.hul.ois.jhove.module.html.HtmlCharStream
 
column - Variable in class edu.harvard.hul.ois.jhove.module.html.SimpleCharStream
 
COM - Static variable in class edu.harvard.hul.ois.jhove.module.jpeg2000.MarkerSegment
 
Comment - Class in edu.harvard.hul.ois.jhove.module.pdf
Class for Tokens which represent PDF comments.
Comment() - Constructor for class edu.harvard.hul.ois.jhove.module.pdf.Comment
Creates an instance of a Comment
COMMENT - Static variable in class edu.harvard.hul.ois.jhove.module.pdf.State
 
comment(char[], int, int) - Method in class edu.harvard.hul.ois.jhove.module.xml.XmlLexicalHandler
Gathers comments into the comments list.
CommentMarkerSegment - Class in edu.harvard.hul.ois.jhove.module.jpeg2000
Class for the COM (Comment) marker segment.
CommentMarkerSegment() - Constructor for class edu.harvard.hul.ois.jhove.module.jpeg2000.CommentMarkerSegment
Constructor.
CommentsChunk - Class in edu.harvard.hul.ois.jhove.module.aiff
Implementation of the AIFF Comments Chunk.
CommentsChunk(AiffModule, ChunkHeader, DataInputStream) - Constructor for class edu.harvard.hul.ois.jhove.module.aiff.CommentsChunk
Constructor.
commentsChunkSeen - Variable in class edu.harvard.hul.ois.jhove.module.AiffModule
 
COMMERCIAL - Static variable in class edu.harvard.hul.ois.jhove.AgentType
Agent type for a commercial entity.
CommonChunk - Class in edu.harvard.hul.ois.jhove.module.aiff
The AIFF Common chunk.
CommonChunk(AiffModule, ChunkHeader, DataInputStream) - Constructor for class edu.harvard.hul.ois.jhove.module.aiff.CommonChunk
Constructor.
commonChunkSeen - Variable in class edu.harvard.hul.ois.jhove.module.AiffModule
 
commonTags - Static variable in class edu.harvard.hul.ois.jhove.module.html.HtmlDocDesc
Generic list of supported tags.
ComponentMapBox - Class in edu.harvard.hul.ois.jhove.module.jpeg2000
Component Mapping Box.
ComponentMapBox(RandomAccessFile, BoxHolder) - Constructor for class edu.harvard.hul.ois.jhove.module.jpeg2000.ComponentMapBox
Constructor with superbox.
COMPONENTSCONFIGURATION_L - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.ExifIFD
 
CompOptionsBox - Class in edu.harvard.hul.ois.jhove.module.jpeg2000
Composition options box (JPX).
CompOptionsBox(RandomAccessFile, BoxHolder) - Constructor for class edu.harvard.hul.ois.jhove.module.jpeg2000.CompOptionsBox
Constructor with superbox.
CompositionBox - Class in edu.harvard.hul.ois.jhove.module.jpeg2000
Composition Box (JPX).
CompositionBox(RandomAccessFile, BoxHolder) - Constructor for class edu.harvard.hul.ois.jhove.module.jpeg2000.CompositionBox
Constructor with superbox.
ComposLayerHdrBox - Class in edu.harvard.hul.ois.jhove.module.jpeg2000
Compositing Layer Header Box (JPX superbox).
ComposLayerHdrBox(RandomAccessFile, BoxHolder) - Constructor for class edu.harvard.hul.ois.jhove.module.jpeg2000.ComposLayerHdrBox
Constructor with superbox.
composLayers - Variable in class edu.harvard.hul.ois.jhove.module.Jpeg2000Module
 
COMPRESSION - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Standard TIFF 6.0 tags.
COMPRESSION_FORMAT - Static variable in class edu.harvard.hul.ois.jhove.module.wave.WaveStrings
Strings for data compression formats; indexed by COMPRESSION_INDEX
COMPRESSION_INDEX - Static variable in class edu.harvard.hul.ois.jhove.module.wave.WaveStrings
 
COMPRESSION_SCHEME - Static variable in class edu.harvard.hul.ois.jhove.NisoImageMetadata
6.1.3.1 Compression scheme value labels.
COMPRESSION_SCHEME_INDEX - Static variable in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Index for 6.1.3.1 compression scheme value labels.
COMPRESSION_TYPE - Static variable in class edu.harvard.hul.ois.jhove.module.jpeg.JpegStrings
JPEG compression types, indexed on marker byte - 0XC0.
compressionCode - Variable in class edu.harvard.hul.ois.jhove.module.WaveModule
 
compressionTypeToNiso(int) - Static method in class edu.harvard.hul.ois.jhove.module.jpeg.Spiff
Converts C value to NISO compression scheme.
ConfigHandler - Class in edu.harvard.hul.ois.jhove
SAX Parser for the configuration file.
ConfigHandler() - Constructor for class edu.harvard.hul.ois.jhove.ConfigHandler
Creates a ConfigHandler.
ConfigWindow - Class in edu.harvard.hul.ois.jhove.viewer
Window for high-level editing of the application's configuration file.
ConfigWindow(JFrame, File, ConfigHandler) - Constructor for class edu.harvard.hul.ois.jhove.viewer.ConfigWindow
Constructor.
ConfigWriter - Class in edu.harvard.hul.ois.jhove.viewer
Class to write out configuration information to the configuration file.
ConfigWriter(File, ConfigWindow) - Constructor for class edu.harvard.hul.ois.jhove.viewer.ConfigWriter
Constructor.
connToTempFile(URLConnection, RepInfo) - Method in class edu.harvard.hul.ois.jhove.JhoveBase
Saves a URLConnection's data stream to a temporary file.
CONREF - Static variable in class edu.harvard.hul.ois.jhove.module.html.HtmlAttributeDesc
Permitted values for _kind
CONTACT_INFO - Static variable in class edu.harvard.hul.ois.jhove.module.jpeg.Spiff
 
ContCodestream - Class in edu.harvard.hul.ois.jhove.module.jpeg2000
Encapsulation of a JPEG 2000 codestream.
ContCodestream(Jpeg2000Module, DataInputStream, long) - Constructor for class edu.harvard.hul.ois.jhove.module.jpeg2000.ContCodestream
Constructor.
ContCodestreamBox - Class in edu.harvard.hul.ois.jhove.module.jpeg2000
Continuous codestream box.
ContCodestreamBox(RandomAccessFile, BoxHolder) - Constructor for class edu.harvard.hul.ois.jhove.module.jpeg2000.ContCodestreamBox
Constructor with superbox.
CONTRAST_L - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.ExifIFD
 
convertHex() - Method in class edu.harvard.hul.ois.jhove.module.pdf.Literal
Convert the raw hex data.
COORDINATETRANSFORMATION - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.GeoTiffStrings
 
COORDINATETRANSFORMATION_INDEX - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.GeoTiffStrings
 
copy(RepInfo) - Method in class edu.harvard.hul.ois.jhove.RepInfo
Copies all the information out of the parameter object.
COPYRIGHT - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Standard TIFF 6.0 tags.
COPYRIGHT_INFO - Static variable in class edu.harvard.hul.ois.jhove.module.jpeg.Spiff
 
CopyrightChunk - Class in edu.harvard.hul.ois.jhove.module.aiff
Implementation of the AIFF Copyright Chunk.
CopyrightChunk(AiffModule, ChunkHeader, DataInputStream) - Constructor for class edu.harvard.hul.ois.jhove.module.aiff.CopyrightChunk
Constructor.
copyrightChunkSeen - Variable in class edu.harvard.hul.ois.jhove.module.AiffModule
 
coreAttrs - Static variable in class edu.harvard.hul.ois.jhove.module.html.Html4DocDesc
Core attributes list.
countComponent() - Method in class edu.harvard.hul.ois.jhove.module.html.JHOpenTag
Counts off a component at the current index.
CountedInputStream - Class in edu.harvard.hul.ois.jhove
A FilterInputStream which passes only a specified number of bytes, then returns an EOF condition.
CountedInputStream(InputStream, int) - Constructor for class edu.harvard.hul.ois.jhove.CountedInputStream
 
CRC32 - Static variable in class edu.harvard.hul.ois.jhove.ChecksumType
32-bit Cyclical Redundancy Checksum.
CREATOR_ID - Static variable in class edu.harvard.hul.ois.jhove.module.jpeg.Spiff
 
CRG - Static variable in class edu.harvard.hul.ois.jhove.module.jpeg2000.MarkerSegment
 
CRGMarkerSegment - Class in edu.harvard.hul.ois.jhove.module.jpeg2000
Class for the CRG (component registration) marker segment.
CRGMarkerSegment() - Constructor for class edu.harvard.hul.ois.jhove.module.jpeg2000.CRGMarkerSegment
Constructor.
CrossRefBox - Class in edu.harvard.hul.ois.jhove.module.jpeg2000
Cross Reference Box (JPX).
CrossRefBox(RandomAccessFile, BoxHolder) - Constructor for class edu.harvard.hul.ois.jhove.module.jpeg2000.CrossRefBox
Constructor with superbox.
CrossRefStream - Class in edu.harvard.hul.ois.jhove.module.pdf
This class implements the Cross-Reference Stream, an alternative to the Cross-Reference Table starting in PDF 1.4.
CrossRefStream(PdfStream) - Constructor for class edu.harvard.hul.ois.jhove.module.pdf.CrossRefStream
Constructor.
ctypIdx - Static variable in class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Strings
Indexes for ctypStr.
ctypStr - Static variable in class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Strings
Strings for the channel type field of the channel definition box, indexed by ctypIdx.
CueChunk - Class in edu.harvard.hul.ois.jhove.module.wave
Implementation of the WAVE Cue chunk, which defines cue points in an audio stream.
CueChunk(ModuleBase, ChunkHeader, DataInputStream) - Constructor for class edu.harvard.hul.ois.jhove.module.wave.CueChunk
Constructor.
cueChunkSeen - Variable in class edu.harvard.hul.ois.jhove.module.WaveModule
 
curChar - Variable in class edu.harvard.hul.ois.jhove.module.html.ParseHtmlTokenManager
 
curCodestream - Variable in class edu.harvard.hul.ois.jhove.module.Jpeg2000Module
 
CURRENT - Static variable in class edu.harvard.hul.ois.jhove.module.html.HtmlAttributeDesc
Permitted values for _kind
currentToken - Variable in exception edu.harvard.hul.ois.jhove.module.html.ParseException
This is the last token that has been consumed successfully.
CUSTOMRENDERED_L - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.ExifIFD
 

D

DAC_CLASS - Static variable in class edu.harvard.hul.ois.jhove.module.jpeg.JpegStrings
 
DataChunk - Class in edu.harvard.hul.ois.jhove.module.wave
Implementation of the WAVE Data Chunk.
DataChunk(ModuleBase, ChunkHeader, DataInputStream) - Constructor for class edu.harvard.hul.ois.jhove.module.wave.DataChunk
Constructor.
dataChunkSeen - Variable in class edu.harvard.hul.ois.jhove.module.WaveModule
 
DataEntryURLBox - Class in edu.harvard.hul.ois.jhove.module.jpeg2000
Data Entry URL Box.
DataEntryURLBox(RandomAccessFile, BoxHolder) - Constructor for class edu.harvard.hul.ois.jhove.module.jpeg2000.DataEntryURLBox
Constructor with superbox.
date - Static variable in class edu.harvard.hul.ois.jhove.HandlerBase
A DateFormat for representing a Date in yyyy-MM-dd (e.g., 2003-07-31) format.
DATE - Static variable in class edu.harvard.hul.ois.jhove.PropertyType
Property type for a Date object.
dateTime - Static variable in class edu.harvard.hul.ois.jhove.HandlerBase
A DateFormat for representing a Date in yyyy-MM-dd HH:mm:ss z (e.g., 2003-07-31 15:31:12 EDT) format.
DATETIME - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Standard TIFF 6.0 tags.
DDC - Static variable in class edu.harvard.hul.ois.jhove.IdentifierType
Identifier type for Dewey Decimal Classification.
DDResolutionBox - Class in edu.harvard.hul.ois.jhove.module.jpeg2000
Default Display Resolution Box.
DDResolutionBox(RandomAccessFile, BoxHolder) - Constructor for class edu.harvard.hul.ois.jhove.module.jpeg2000.DDResolutionBox
Constructor with superbox.
debugStream - Variable in class edu.harvard.hul.ois.jhove.module.html.ParseHtmlTokenManager
 
DEFAULT - Static variable in interface edu.harvard.hul.ois.jhove.module.html.ParseHtmlConstants
 
DEFAULT_LOCATION - Static variable in class edu.harvard.hul.ois.jhove.TextMDMetadata
 
DEFAULT_MAX_FONTS - Variable in class edu.harvard.hul.ois.jhove.module.PdfModule
PRIVATE INSTANCE FIELDS.
DefaultBox - Class in edu.harvard.hul.ois.jhove.module.jpeg2000
Default class for Boxes that have not yet been implemented.
DefaultBox(RandomAccessFile) - Constructor for class edu.harvard.hul.ois.jhove.module.jpeg2000.DefaultBox
Constructor.
DefaultBox(RandomAccessFile, BoxHolder) - Constructor for class edu.harvard.hul.ois.jhove.module.jpeg2000.DefaultBox
Constructor with superbox.
DefaultMarkerSegment - Class in edu.harvard.hul.ois.jhove.module.jpeg2000
This class is used to handle any unrecognized or unimplemented marker segment in a codestream.
DefaultMarkerSegment() - Constructor for class edu.harvard.hul.ois.jhove.module.jpeg2000.DefaultMarkerSegment
 
dereferenceStructType(String) - Method in class edu.harvard.hul.ois.jhove.module.pdf.StructureTree
Dereference a name in the role map.
DESCRIPTION_NAME - Static variable in class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
 
DesiredReproBox - Class in edu.harvard.hul.ois.jhove.module.jpeg2000
Desired Reproductions Box (JPX).
DesiredReproBox(RandomAccessFile, BoxHolder) - Constructor for class edu.harvard.hul.ois.jhove.module.jpeg2000.DesiredReproBox
Constructor with superbox.
Destination - Class in edu.harvard.hul.ois.jhove.module.pdf
Class encapsulating PDF destination objects, which refer to a page in the document.
Destination(PdfObject, PdfModule, boolean) - Constructor for class edu.harvard.hul.ois.jhove.module.pdf.Destination
Constructor.
DictionaryEnd - Class in edu.harvard.hul.ois.jhove.module.pdf
Class for Tokens which represent the ">>" sequence that ends a Dictionary.
DictionaryEnd() - Constructor for class edu.harvard.hul.ois.jhove.module.pdf.DictionaryEnd
Creates an instance of a DictionaryEnd
DictionaryStart - Class in edu.harvard.hul.ois.jhove.module.pdf
Class for Tokens which represent the "<<" sequence that opens a Dictionary.
DictionaryStart() - Constructor for class edu.harvard.hul.ois.jhove.module.pdf.DictionaryStart
Creates an instance of a DictionaryStart
digitalSigProps - Variable in class edu.harvard.hul.ois.jhove.module.Jpeg2000Module
 
digitalSigPtrTypeStr - Static variable in class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Strings
Strings for pointer types in the Digital Signature Box.
digitalSigTypeStr - Static variable in class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Strings
Strings for types in the Digital Signature Box.
DigSignatureBox - Class in edu.harvard.hul.ois.jhove.module.jpeg2000
Digital Signature Box (JPX).
DigSignatureBox(RandomAccessFile, BoxHolder) - Constructor for class edu.harvard.hul.ois.jhove.module.jpeg2000.DigSignatureBox
Constructor with superbox.
disable_tracing() - Method in class edu.harvard.hul.ois.jhove.module.html.ParseHtml
 
disparage(RepInfo) - Method in exception edu.harvard.hul.ois.jhove.module.pdf.PdfException
Performs the appropriate disparagement act on a RepInfo object, such as setting the valid or well-formed flag to false.
disparage(RepInfo) - Method in exception edu.harvard.hul.ois.jhove.module.pdf.PdfInvalidException
Performs the appropriate disparagement act on a RepInfo object.
disparage(RepInfo) - Method in exception edu.harvard.hul.ois.jhove.module.pdf.PdfMalformedException
Performs the appropriate disparagement act on a RepInfo object.
dispatch(App, Module, OutputHandler, OutputHandler, String, String[]) - Method in class edu.harvard.hul.ois.jhove.JhoveBase
Processes a file or directory, or outputs information.
DISPLAY_ORIENTATION - Static variable in class edu.harvard.hul.ois.jhove.NisoImageMetadata
6.2.5 display orientation value labels.
DocNode - Class in edu.harvard.hul.ois.jhove.module.pdf
Abstract class for nodes of a PDF document tree.
DocNode(PdfModule, PageTreeNode, PdfDictionary) - Constructor for class edu.harvard.hul.ois.jhove.module.pdf.DocNode
Superclass constructor.
doctype(String, String) - Static method in class edu.harvard.hul.ois.jhove.HandlerBase
Return the XML DOCTYPE instruction.
doctype(String, String, String) - Static method in class edu.harvard.hul.ois.jhove.HandlerBase
Return the XML DOCTYPE instruction.
Doctype() - Method in class edu.harvard.hul.ois.jhove.module.html.ParseHtml
 
DoctypeItem(List) - Method in class edu.harvard.hul.ois.jhove.module.html.ParseHtml
 
DOCTYPEKEYWORD - Static variable in interface edu.harvard.hul.ois.jhove.module.html.ParseHtmlConstants
 
Document - Class in edu.harvard.hul.ois.jhove
This class encapsulates information about format specification documents.
Document(String, DocumentType) - Constructor for class edu.harvard.hul.ois.jhove.Document
Creates a Document with a given title and one of the predefined DocumentTypes.
DOCUMENTNAME - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Standard TIFF 6.0 tags.
DocumentType - Class in edu.harvard.hul.ois.jhove
This class defines enumerated types for a Document.
DOI - Static variable in class edu.harvard.hul.ois.jhove.IdentifierType
Identifier type for Digital Object Identifier.
Done() - Method in interface edu.harvard.hul.ois.jhove.module.html.CharStream
The lexer calls this function to indicate that it is done with the stream and hence implementations can free any resources held by this class.
Done() - Method in class edu.harvard.hul.ois.jhove.module.html.HtmlCharStream
 
Done() - Method in class edu.harvard.hul.ois.jhove.module.html.SimpleCharStream
 
doOutlineStuff(RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.PdfModule
 
doSaveDialog() - Method in class edu.harvard.hul.ois.jhove.viewer.InfoWindow
Puts up a dialog to save the file.
DOTRANGE - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Standard TIFF 6.0 tags.
DOUBLE - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.IFD
TIFF DOUBLE (64-bit IEEE floating point) type.
DOUBLE - Static variable in class edu.harvard.hul.ois.jhove.PropertyType
Property type for a Double object, or a double if the Arity is Array.
doubleArray(double[]) - Static method in class edu.harvard.hul.ois.jhove.HandlerBase
Return String representation of an array of double.
DOWNLOADING - Static variable in class edu.harvard.hul.ois.jhove.viewer.ProgressWindow
Progress state: URI is being downloaded.
DQT_PRECISION - Static variable in class edu.harvard.hul.ois.jhove.module.jpeg.JpegStrings
 
dragEnter(DropTargetDragEvent) - Method in class edu.harvard.hul.ois.jhove.viewer.JhoveWindow
Invoked when the drag enters the component.
dragExit(DropTargetEvent) - Method in class edu.harvard.hul.ois.jhove.viewer.JhoveWindow
Invoked when the drag leaves the component.
dragOver(DropTargetDragEvent) - Method in class edu.harvard.hul.ois.jhove.viewer.JhoveWindow
Does nothing.
drop(DropTargetDropEvent) - Method in class edu.harvard.hul.ois.jhove.viewer.JhoveWindow
Called when the thingy is dropped on the component.
dropActionChanged(DropTargetDragEvent) - Method in class edu.harvard.hul.ois.jhove.viewer.JhoveWindow
Called if the drop action changes during the drag (e.g., by changing the modifier keys).
DTDMapper - Class in edu.harvard.hul.ois.jhove.module.html
Class to map public DTD ID's to files which are included with this HTML module.
DTDMapper() - Constructor for class edu.harvard.hul.ois.jhove.module.html.DTDMapper
 
Dump - Class in edu.harvard.hul.ois.jhove
Common methods for dump utilities.
Dump() - Constructor for class edu.harvard.hul.ois.jhove.Dump
CLASS CONSTRUCTOR.
dupChunkError(RepInfo, String) - Method in class edu.harvard.hul.ois.jhove.module.AiffModule
 
dupChunkError(RepInfo, String) - Method in class edu.harvard.hul.ois.jhove.module.WaveModule
 

E

E - Static variable in class edu.harvard.hul.ois.jhove.module.pdf.State
 
ECMA - Static variable in class edu.harvard.hul.ois.jhove.IdentifierType
Identifier type for ECMA.
edu.harvard.hul.ois.jhove - package edu.harvard.hul.ois.jhove
Contains the classes needed for building a JHOVE application.
edu.harvard.hul.ois.jhove.handler - package edu.harvard.hul.ois.jhove.handler
Contains the main classes for JHOVE output handlers.
edu.harvard.hul.ois.jhove.handler.audit - package edu.harvard.hul.ois.jhove.handler.audit
Contains the supporting classes for the JHOVE audit output handler.
edu.harvard.hul.ois.jhove.module - package edu.harvard.hul.ois.jhove.module
Contains the main classes for JHOVE modules.
edu.harvard.hul.ois.jhove.module.aiff - package edu.harvard.hul.ois.jhove.module.aiff
Contains supporting classes for the AIFF-HUL module.
edu.harvard.hul.ois.jhove.module.gif - package edu.harvard.hul.ois.jhove.module.gif
Contains supporting classes for the GIF-HUL module.
edu.harvard.hul.ois.jhove.module.html - package edu.harvard.hul.ois.jhove.module.html
Contains supporting classes for the HTML-HUL module.
edu.harvard.hul.ois.jhove.module.iff - package edu.harvard.hul.ois.jhove.module.iff
Contains supporting classes for modules based on the IFF specification (EA IFF 85).
edu.harvard.hul.ois.jhove.module.jpeg - package edu.harvard.hul.ois.jhove.module.jpeg
Contains supporting classes for the JPEG-HUL module.
edu.harvard.hul.ois.jhove.module.jpeg2000 - package edu.harvard.hul.ois.jhove.module.jpeg2000
Contains supporting classes for the JPEG2000-HUL module.
edu.harvard.hul.ois.jhove.module.pdf - package edu.harvard.hul.ois.jhove.module.pdf
Contains supporting classes for the PDF-HUL module.
edu.harvard.hul.ois.jhove.module.tiff - package edu.harvard.hul.ois.jhove.module.tiff
Contains supporting classes for the TIFF-HUL module.
edu.harvard.hul.ois.jhove.module.wave - package edu.harvard.hul.ois.jhove.module.wave
Contains supporting classes for the WAVE-HUL module.
edu.harvard.hul.ois.jhove.module.xml - package edu.harvard.hul.ois.jhove.module.xml
Contains supporting classes for the XML-HUL module.
edu.harvard.hul.ois.jhove.viewer - package edu.harvard.hul.ois.jhove.viewer
Contains the classes for the JHOVE GUI.
EDUCATIONAL - Static variable in class edu.harvard.hul.ois.jhove.AgentType
Agent type for an educational institution.
element(String) - Static method in class edu.harvard.hul.ois.jhove.HandlerBase
Returns, as a String, an empty XML.
element(String, String) - Static method in class edu.harvard.hul.ois.jhove.HandlerBase
Returns, as a String, an XML element with a given tag and content
element(String, String[][]) - Static method in class edu.harvard.hul.ois.jhove.HandlerBase
Returns, as a String, an XML element with a given tag and attributes
element(String, String[][], String) - Static method in class edu.harvard.hul.ois.jhove.HandlerBase
Returns, as a String, an XML element with a given tag, content and attributes
Element(List) - Method in class edu.harvard.hul.ois.jhove.module.html.ParseHtml
 
elementDecl(String, String) - Method in class edu.harvard.hul.ois.jhove.module.xml.XmlDeclHandler
Report an element type declaration.
elementEnd(String) - Static method in class edu.harvard.hul.ois.jhove.HandlerBase
Returns, as a String, the closing tag of an element.
elementStart(String) - Static method in class edu.harvard.hul.ois.jhove.HandlerBase
Returns, as a String, the opening tag of an element.
elementStart(String, String[][]) - Static method in class edu.harvard.hul.ois.jhove.HandlerBase
Returns, as a String, the opening tag of an element with specified attributes.
ELLIPSOID - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.GeoTiffStrings
 
ELLIPSOID_INDEX - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.GeoTiffStrings
 
emptyBox() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
Utility error reporting function for a box which is expected to have subboxes, but doesn't.
EN - Static variable in class edu.harvard.hul.ois.jhove.module.pdf.State
 
enable_tracing() - Method in class edu.harvard.hul.ois.jhove.module.html.ParseHtml
 
END - Static variable in class edu.harvard.hul.ois.jhove.module.pdf.State
 
endCDATA() - Method in class edu.harvard.hul.ois.jhove.module.xml.XmlLexicalHandler
Report the end of a CDATA section.
endColumn - Variable in class edu.harvard.hul.ois.jhove.module.html.Token
beginLine and beginColumn describe the position of the first character of this token; endLine and endColumn describe the position of the last character of this token.
endDirectory() - Method in class edu.harvard.hul.ois.jhove.handler.AuditHandler
Callback indicating a directory is finished being processed.
endDirectory() - Method in class edu.harvard.hul.ois.jhove.HandlerBase
Callback indicating a directory is finished being processed.
endDirectory() - Method in interface edu.harvard.hul.ois.jhove.OutputHandler
Callback indicating a directory is finished being processed.
endDirectoryImpl(AuditState) - Method in class edu.harvard.hul.ois.jhove.handler.AuditHandler
Local extension to the standard callback indicating a directory is finished being processed.
endDTD() - Method in class edu.harvard.hul.ois.jhove.module.xml.XmlLexicalHandler
Report the end of DTD declarations.
endElement(String, String, String) - Method in class edu.harvard.hul.ois.jhove.ConfigHandler
SAX parser callback method.
endElement(String, String, String) - Method in class edu.harvard.hul.ois.jhove.module.wave.LinkChunkHandler
SAX parser callback method.
endElement(String, String, String) - Method in class edu.harvard.hul.ois.jhove.module.xml.XmlModuleHandler
The only action taken here is some bookkeeping in connection with the HTML metadata.
endElement(String, String, String) - Method in class edu.harvard.hul.ois.jhove.XMPHandler
Catches the end of an element.
endEntity(String) - Method in class edu.harvard.hul.ois.jhove.module.xml.XmlLexicalHandler
Report the end of an entity.
ENDING_COMMENT - Static variable in interface edu.harvard.hul.ois.jhove.module.html.ParseHtmlConstants
 
endLine - Variable in class edu.harvard.hul.ois.jhove.module.html.Token
beginLine and beginColumn describe the position of the first character of this token; endLine and endColumn describe the position of the last character of this token.
ENDS - Static variable in class edu.harvard.hul.ois.jhove.module.pdf.State
 
ENDST - Static variable in class edu.harvard.hul.ois.jhove.module.pdf.State
 
ENDSTR - Static variable in class edu.harvard.hul.ois.jhove.module.pdf.State
 
ENDSTRE - Static variable in class edu.harvard.hul.ois.jhove.module.pdf.State
 
ENDSTREA - Static variable in class edu.harvard.hul.ois.jhove.module.pdf.State
 
ENDSTREAM - Static variable in class edu.harvard.hul.ois.jhove.module.pdf.State
 
enumCSStr - Static variable in class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Strings
Strings for values of enumCS in the color specification box.
EnumerationType - Class in edu.harvard.hul.ois.jhove
Enumerated data type.
EnumerationType(String) - Constructor for class edu.harvard.hul.ois.jhove.EnumerationType
Instantiate an EnumerationType object.
EOC - Static variable in class edu.harvard.hul.ois.jhove.module.jpeg2000.MarkerSegment
 
EOD - Static variable in class edu.harvard.hul.ois.jhove.module.jpeg.Spiff
 
EOF - Static variable in interface edu.harvard.hul.ois.jhove.module.html.ParseHtmlConstants
 
eol - Variable in exception edu.harvard.hul.ois.jhove.module.html.ParseException
The end of line string for this machine.
eol - Static variable in class edu.harvard.hul.ois.jhove.viewer.InfoWindow
 
EPH - Static variable in class edu.harvard.hul.ois.jhove.module.jpeg2000.MarkerSegment
 
equalArray(int[], int[]) - Static method in class edu.harvard.hul.ois.jhove.module.JpegModule
 
equals(EnumerationType) - Method in class edu.harvard.hul.ois.jhove.EnumerationType
Type equality test.
EQUALS - Static variable in interface edu.harvard.hul.ois.jhove.module.html.ParseHtmlConstants
 
equals(State) - Method in class edu.harvard.hul.ois.jhove.module.pdf.State
Equality test.
error(SAXParseException) - Method in class edu.harvard.hul.ois.jhove.module.xml.XmlModuleHandler
Processes a parsing exception.
ErrorMessage - Class in edu.harvard.hul.ois.jhove
This class encapsulates an error message from a Module, representing a problem in the content being analyzed.
ErrorMessage(String) - Constructor for class edu.harvard.hul.ois.jhove.ErrorMessage
Create an ErrorMessage.
ErrorMessage(String, long) - Constructor for class edu.harvard.hul.ois.jhove.ErrorMessage
Create an ErrorMessage.
ErrorMessage(String, String) - Constructor for class edu.harvard.hul.ois.jhove.ErrorMessage
Create an ErrorMessage.
ErrorMessage(String, String, long) - Constructor for class edu.harvard.hul.ois.jhove.ErrorMessage
Create an ErrorMessage.
eventAttrs - Static variable in class edu.harvard.hul.ois.jhove.module.html.Html4DocDesc
Event attributes list.
excludesTag(String) - Method in class edu.harvard.hul.ois.jhove.module.html.HtmlStack
Returns true if any element on the stack prohibits the specified tag.
excludesTag(String) - Method in class edu.harvard.hul.ois.jhove.module.html.HtmlTagDesc
Returns true if a given tag is excluded within this element.
EXIF - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.IFD
Exif IFD.
ExifIFD - Class in edu.harvard.hul.ois.jhove.module.tiff
Encapsulation of a Exif IFD
ExifIFD(long, RepInfo, RandomAccessFile, boolean) - Constructor for class edu.harvard.hul.ois.jhove.module.tiff.ExifIFD
Instantiate an ExifIFD object.
ExifInfo - Class in edu.harvard.hul.ois.jhove.module.wave
Encapsulation of Exif information for a Wave file.
ExifInfo() - Constructor for class edu.harvard.hul.ois.jhove.module.wave.ExifInfo
 
ExifMakerNoteChunk - Class in edu.harvard.hul.ois.jhove.module.wave
This class encapsulates the Exif Maker Note chunk.
ExifMakerNoteChunk(ModuleBase, ChunkHeader, DataInputStream) - Constructor for class edu.harvard.hul.ois.jhove.module.wave.ExifMakerNoteChunk
Constructor.
exifParse(RandomAccessFile, RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.TiffModule
Special-purpose, limited parser for embedded Exif files.
exifProfileName - Variable in class edu.harvard.hul.ois.jhove.module.JpegModule
 
exifProps(Property) - Method in class edu.harvard.hul.ois.jhove.module.tiff.ExifIFD
Extracts and returns the Exif property list from a standard IFD property header.
ExifStringChunk - Class in edu.harvard.hul.ois.jhove.module.wave
Class for encapsulating Exif chunks whose content consists of a null-terminated ASCII string.
ExifStringChunk(ModuleBase, ChunkHeader, DataInputStream) - Constructor for class edu.harvard.hul.ois.jhove.module.wave.ExifStringChunk
Constructor.
ExifUserCommentChunk - Class in edu.harvard.hul.ois.jhove.module.wave
This class encapsulates the Exif User Comment chunk.
ExifUserCommentChunk(ModuleBase, ChunkHeader, DataInputStream) - Constructor for class edu.harvard.hul.ois.jhove.module.wave.ExifUserCommentChunk
Constructor.
ExifVersionChunk - Class in edu.harvard.hul.ois.jhove.module.wave
Chunk for Exif version information.
ExifVersionChunk(ModuleBase, ChunkHeader, DataInputStream) - Constructor for class edu.harvard.hul.ois.jhove.module.wave.ExifVersionChunk
Constructor.
ExpandBuff(boolean) - Method in class edu.harvard.hul.ois.jhove.module.html.HtmlCharStream
 
ExpandBuff(boolean) - Method in class edu.harvard.hul.ois.jhove.module.html.SimpleCharStream
 
expandRows() - Method in class edu.harvard.hul.ois.jhove.viewer.ViewWindow
Expands the tree appropriately when everything is build.
expectedTokenSequences - Variable in exception edu.harvard.hul.ois.jhove.module.html.ParseException
Each entry in this array is an array of integers.
EXPOSUREMODE_L - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.ExifIFD
 
EXPOSUREPROGRAM_L - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.ExifIFD
 
ExtDouble - Class in edu.harvard.hul.ois.jhove.module.aiff
Code to deal with the 80-bit floating point (extended double) numbers which occur in AIFF files.
ExtDouble(byte[]) - Constructor for class edu.harvard.hul.ois.jhove.module.aiff.ExtDouble
Constructor.
EXTENSION - Static variable in class edu.harvard.hul.ois.jhove.SignatureType
Signature type for a file extension, i.e., a sequence of characters following a period character in a file name.
externalEntityDecl(String, String, String) - Method in class edu.harvard.hul.ois.jhove.module.xml.XmlDeclHandler
Adds external entity declarations to the entity declarations list in the form of a String[3], with element 0 being the name, element 1 the public ID, and 2 the system ID.
ExternalSignature - Class in edu.harvard.hul.ois.jhove
This class encapsulates information about external format signatures.
ExternalSignature(String, SignatureType, SignatureUseType) - Constructor for class edu.harvard.hul.ois.jhove.ExternalSignature
Creates an ExternalSignature given a string value, a type, and a use requirement.
ExternalSignature(int[], SignatureType, SignatureUseType) - Constructor for class edu.harvard.hul.ois.jhove.ExternalSignature
Creates an ExternalSignature given a byte array, a type, and a use requirement.
ExternalSignature(String, SignatureType, SignatureUseType, String) - Constructor for class edu.harvard.hul.ois.jhove.ExternalSignature
Creates an ExternalSignature given a string value, a type, a use requirement, and a note.
ExternalSignature(int[], SignatureType, SignatureUseType, String) - Constructor for class edu.harvard.hul.ois.jhove.ExternalSignature
Creates an ExternalSignature given a byte array, a type, a use requirement, and a note.
extGStateOK(PdfDictionary) - Method in class edu.harvard.hul.ois.jhove.module.pdf.XProfileBase
Checks if the ExtGState resource meets profile requirements.
EXTRA_SAMPLES - Static variable in class edu.harvard.hul.ois.jhove.NisoImageMetadata
 
extractExifNisoData(NisoImageMetadata) - Method in class edu.harvard.hul.ois.jhove.module.JpegModule
 
extractFilters(Filter[], PdfStream) - Method in class edu.harvard.hul.ois.jhove.module.PdfModule
Finds the filters in a stream or array object which is the value of a stream's Filter key, and put them in _filtersList if a duplicate isn't there already.
extractHttpEquivValue(Property, String) - Method in class edu.harvard.hul.ois.jhove.module.html.HtmlMetadata
Extract the content value associated with a given httpEquiv.
EXTRASAMPLES - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Standard TIFF 6.0 tags.

F

F_CID0 - Static variable in class edu.harvard.hul.ois.jhove.module.PdfModule
Font type selectors.
F_CID2 - Static variable in class edu.harvard.hul.ois.jhove.module.PdfModule
Font type selectors.
F_MM1 - Static variable in class edu.harvard.hul.ois.jhove.module.PdfModule
Font type selectors.
F_TT - Static variable in class edu.harvard.hul.ois.jhove.module.PdfModule
Font type selectors.
F_TYPE0 - Static variable in class edu.harvard.hul.ois.jhove.module.PdfModule
Font type selectors.
F_TYPE1 - Static variable in class edu.harvard.hul.ois.jhove.module.PdfModule
Font type selectors.
F_TYPE3 - Static variable in class edu.harvard.hul.ois.jhove.module.PdfModule
Font type selectors.
FactChunk - Class in edu.harvard.hul.ois.jhove.module.wave
Implementation of the WAVE Fact Chunk.
FactChunk(ModuleBase, ChunkHeader, DataInputStream) - Constructor for class edu.harvard.hul.ois.jhove.module.wave.FactChunk
Constructor.
factChunkSeen - Variable in class edu.harvard.hul.ois.jhove.module.WaveModule
 
FALSE - Static variable in class edu.harvard.hul.ois.jhove.RepInfo
Values for _valid
fatalError(SAXParseException) - Method in class edu.harvard.hul.ois.jhove.XMPHandler
Catch a fatal error.
FAXPROFILE - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.GlobalParametersIFD
Tiff/FX-specific tags.
FILE_DIGITAL - Static variable in class edu.harvard.hul.ois.jhove.AnalogDigitalFlagType
Enumeration instance for FILE digital data
FILE_NAME - Static variable in class edu.harvard.hul.ois.jhove.AESAudioMetadata
Values for primary identifier type
fileHasType(File, String) - Static method in class edu.harvard.hul.ois.jhove.MacStuff
Returns true if a file has the given file type.
filePos - Variable in class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
 
FILESOURCE_L - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.ExifIFD
 
FileSpecification - Class in edu.harvard.hul.ois.jhove.module.pdf
A class which encapsulates a file specification in PDF.
FileSpecification(PdfObject) - Constructor for class edu.harvard.hul.ois.jhove.module.pdf.FileSpecification
Constructor.
FileTokenizer - Class in edu.harvard.hul.ois.jhove.module.pdf
Tokenizer subclass which gets data from a RandomAccessFile.
FileTokenizer(RandomAccessFile) - Constructor for class edu.harvard.hul.ois.jhove.module.pdf.FileTokenizer
 
fileType - Variable in class edu.harvard.hul.ois.jhove.module.AiffModule
 
FILETYPE - Static variable in class edu.harvard.hul.ois.jhove.SignatureType
Signature type for a Macintosh OS file type.
FileTypeBox - Class in edu.harvard.hul.ois.jhove.module.jpeg2000
File Type Box.
FileTypeBox(RandomAccessFile) - Constructor for class edu.harvard.hul.ois.jhove.module.jpeg2000.FileTypeBox
Constructor.
FileTypeBox(RandomAccessFile, JP2Box) - Constructor for class edu.harvard.hul.ois.jhove.module.jpeg2000.FileTypeBox
The constructor with superbox is meaningless.
FillBuff() - Method in class edu.harvard.hul.ois.jhove.module.html.HtmlCharStream
 
FillBuff() - Method in class edu.harvard.hul.ois.jhove.module.html.SimpleCharStream
 
FILLORDER - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Standard TIFF 6.0 tags.
Filter - Class in edu.harvard.hul.ois.jhove.module.pdf
Container for a PDF stream filter.
Filter(String) - Constructor for class edu.harvard.hul.ois.jhove.module.pdf.Filter
Constructor.
filterMode - Variable in class edu.harvard.hul.ois.jhove.module.Jpeg2000Module
 
filterOK(PdfObject, boolean, boolean) - Method in class edu.harvard.hul.ois.jhove.module.pdf.XProfileBase
Checks for forbidden filters in a Filters dictionary.
finalizeBytesRead() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
 
findExternalStreams(RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.PdfModule
 
findFilters(RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.PdfModule
Locates the filters in the content stream dictionaries and generate a list of unique pipelines.
findFonts(RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.PdfModule
 
findImages(RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.PdfModule
 
findLastTrailer(RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.PdfModule
Locate the last trailer of the file
findNextKeyValue() - Method in class edu.harvard.hul.ois.jhove.module.pdf.PageLabelNode
Obtain the next key-value pair from the tree.
finishPropUnderConstruction() - Method in class edu.harvard.hul.ois.jhove.module.html.HtmlMetadata
Finishes any property under construction.
firstSampleOffsetMarked - Variable in class edu.harvard.hul.ois.jhove.module.AiffModule
 
firstSampleOffsetMarked - Variable in class edu.harvard.hul.ois.jhove.module.WaveModule
 
flagBroadcastWave - Variable in class edu.harvard.hul.ois.jhove.module.WaveModule
 
flagPCMWaveFormat - Variable in class edu.harvard.hul.ois.jhove.module.WaveModule
 
flagWaveFormatEx - Variable in class edu.harvard.hul.ois.jhove.module.WaveModule
 
flagWaveFormatExtensible - Variable in class edu.harvard.hul.ois.jhove.module.WaveModule
 
FLASH - Static variable in class edu.harvard.hul.ois.jhove.NisoImageMetadata
7.7.3.10 flash value labels.
FLASH_INDEX - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.ExifIFD
 
FLASH_L - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.ExifIFD
 
FLASH_RETURN - Static variable in class edu.harvard.hul.ois.jhove.NisoImageMetadata
7.7.3.12 flash return value labels.
FLOAT - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.IFD
TIFF FLOAT (32-bit IEEE floating point) type.
FLOAT - Static variable in class edu.harvard.hul.ois.jhove.PropertyType
Property type for a Float object, or a float if the Arity is Array.
flowContent - Static variable in class edu.harvard.hul.ois.jhove.module.html.Html4DocDesc
List of flow elements.
FOCALPLANERESOLUTIONUNIT_L - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.ExifIFD
 
FONTDESCFLAGS - Static variable in class edu.harvard.hul.ois.jhove.module.pdf.PdfStrings
Flags for FontDescriptor.
fontMarkup - Static variable in class edu.harvard.hul.ois.jhove.module.html.Html4DocDesc
Names of font-related elements.
format(Date, StringBuffer, FieldPosition) - Method in class edu.harvard.hul.ois.jhove.HandlerBase.SynchronizedDateFormat
 
FormatChunk - Class in edu.harvard.hul.ois.jhove.module.wave
Implementation of the WAVE Format Chunk.
FormatChunk(WaveModule, ChunkHeader, DataInputStream) - Constructor for class edu.harvard.hul.ois.jhove.module.wave.FormatChunk
Constructor.
formatChunkSeen - Variable in class edu.harvard.hul.ois.jhove.module.WaveModule
 
FormatVersionChunk - Class in edu.harvard.hul.ois.jhove.module.aiff
Implementation of the AIFF Format Version Chunk.
FormatVersionChunk(AiffModule, ChunkHeader, DataInputStream) - Constructor for class edu.harvard.hul.ois.jhove.module.aiff.FormatVersionChunk
Constructor.
formatVersionChunkSeen - Variable in class edu.harvard.hul.ois.jhove.module.AiffModule
 
formMarkup - Static variable in class edu.harvard.hul.ois.jhove.module.html.Html4DocDesc
Names of form elements.
formObjectOK(PdfDictionary) - Method in class edu.harvard.hul.ois.jhove.module.pdf.AProfile
Checks if a Form xobject is valid.
formObjectOK(PdfDictionary) - Method in class edu.harvard.hul.ois.jhove.module.pdf.X1Profile
Checks if a Form xobject is valid.
formObjectOK(PdfDictionary) - Method in class edu.harvard.hul.ois.jhove.module.pdf.X2Profile
Checks if a Form xobject is valid.
formObjectOK(PdfDictionary) - Method in class edu.harvard.hul.ois.jhove.module.pdf.XProfileBase
Checks the conformance of a form XObject.
FRACTIONAL - Static variable in class edu.harvard.hul.ois.jhove.module.pdf.State
 
FragmentInputStream - Class in edu.harvard.hul.ois.jhove.module.jpeg2000
A FragmentInputStream provides an interface by which the scattered fragments of a Fragment List Box can be read as a single stream.
FragmentInputStream(List, RandomAccessFile) - Constructor for class edu.harvard.hul.ois.jhove.module.jpeg2000.FragmentInputStream
 
FragmentInputStream(List, RandomAccessFile, int) - Constructor for class edu.harvard.hul.ois.jhove.module.jpeg2000.FragmentInputStream
 
FragmentListBox - Class in edu.harvard.hul.ois.jhove.module.jpeg2000
Fragment List Box (JPX).
FragmentListBox(RandomAccessFile, BoxHolder) - Constructor for class edu.harvard.hul.ois.jhove.module.jpeg2000.FragmentListBox
Constructor with superbox.
FragmentTableBox - Class in edu.harvard.hul.ois.jhove.module.jpeg2000
Fragment Table Box (JPX).
FragmentTableBox(RandomAccessFile, BoxHolder) - Constructor for class edu.harvard.hul.ois.jhove.module.jpeg2000.FragmentTableBox
Constructor with superbox.
framesetElement - Variable in class edu.harvard.hul.ois.jhove.module.html.HtmlDocDesc
A representation of the FRAMESET element.
FREEBYTECOUNTS - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Standard TIFF 6.0 tags.
FREEOFFSETS - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Standard TIFF 6.0 tags.
fromISO_639_2_T2B - Static variable in class edu.harvard.hul.ois.jhove.TextMDMetadata
Map from ISO 639/2 T to ISO 639/2 B

G

GAINCONTROL_L - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.ExifIFD
 
GCE_DISPOSAL_METHOD - Static variable in class edu.harvard.hul.ois.jhove.module.gif.GifStrings
GIF Capabilities Enquiry string: way in which the graphic is to be treated after being displayed
GCE_TRANSPARENCY_FLAG - Static variable in class edu.harvard.hul.ois.jhove.module.gif.GifStrings
GIF Capabilities Enquiry string: transparency index given or not
GCE_USER_INPUT_FLAG - Static variable in class edu.harvard.hul.ois.jhove.module.gif.GifStrings
GIF Capabilities Enquiry string: user input expected or not
generateParseException() - Method in class edu.harvard.hul.ois.jhove.module.html.ParseHtml
 
GEODETICDATUM - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.GeoTiffStrings
 
GEODETICDATUM_INDEX - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.GeoTiffStrings
 
GEOGANGULARUNITSGEOKEY - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
GeoTIFF key values.
GEOGANGULARUNITSIZEGEOKEY - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
GeoTIFF key values.
GEOGAZIMUTHUNITSGEOKEY - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
GeoTIFF key values.
GEOGCITATIONGEOKEY - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
GeoTIFF key values.
GEOGELLIPSOIDGEOKEY - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
GeoTIFF key values.
GEOGGEODETICDATUMGEOKEY - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
GeoTIFF key values.
GEOGINVFLATTENINGGEOKEY - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
GeoTIFF key values.
GEOGLINEARUNITSGEOKEY - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
GeoTIFF key values.
GEOGLINEARUNITSIZEGEOKEY - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
GeoTIFF key values.
GEOGPRIMEMERIDIANGEOKEY - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
GeoTIFF key values.
GEOGPRIMEMERIDIANLONGGEOKEY - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
GeoTIFF key values.
GEOGRAPHICS - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.GeoTiffStrings
 
GEOGRAPHICS_INDEX - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.GeoTiffStrings
 
GEOGRAPHICTYPEGEOKEY - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
GeoTIFF key values.
GEOGSEMIMAJORAXISGEOKEY - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
GeoTIFF key values.
GEOGSEMIMINORAXISGEOKEY - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
GeoTIFF key values.
GeoTiffStrings - Class in edu.harvard.hul.ois.jhove.module.tiff
This class contains indexed string arrays for the various keys that are used by GeoTIFF.
get(String, boolean) - Method in class edu.harvard.hul.ois.jhove.module.pdf.DocNode
Get an named property.
get(Vector) - Method in class edu.harvard.hul.ois.jhove.module.pdf.NameTreeNode
Get the PdfObject which matches the key, or null if there is no match.
get(String) - Method in class edu.harvard.hul.ois.jhove.module.pdf.PdfDictionary
Get the PDFObject whose key has the specified string value.
getAbort() - Method in class edu.harvard.hul.ois.jhove.JhoveBase
Returns the abort flag.
getActionsExist() - Method in class edu.harvard.hul.ois.jhove.module.PdfModule
Return true if Actions have been detected in the file.
getAddress() - Method in class edu.harvard.hul.ois.jhove.Agent
Returns the value of the address property.
getAESMetadata() - Method in class edu.harvard.hul.ois.jhove.module.AiffModule
Returns the module's AES metadata.
getAESMetadata() - Method in class edu.harvard.hul.ois.jhove.module.WaveModule
Returns the module's AES metadata.
getAnalogDigitalFlag() - Method in class edu.harvard.hul.ois.jhove.AESAudioMetadata
Returns analog/digital flag.
getAnnotations() - Method in class edu.harvard.hul.ois.jhove.module.pdf.PageObject
Return the page's Annots array of dictionaries, or null if none
getAnnotations() - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Returns the value of the ANNOTATIONS (50255) tag.
getAperatureValue() - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Returns the value of the APERTUREVALUE (37378) tag.
getApp() - Method in class edu.harvard.hul.ois.jhove.ModuleBase
Returns the App object.
getAppSpecificData() - Method in class edu.harvard.hul.ois.jhove.AESAudioMetadata
Returns application-specific data.
getArity() - Method in class edu.harvard.hul.ois.jhove.Property
Returns the arity (type of structure) of this Property.
getArrayDepth() - Method in class edu.harvard.hul.ois.jhove.module.pdf.Parser
Returns the number of array starts not yet matched by array ends.
getArtBox() - Method in class edu.harvard.hul.ois.jhove.module.pdf.PageObject
Returns the ArtBox for the page, or null if none.
getAsShotNeutral() - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Returns the value of the AsShotNeutral (50728) tag.
getAsShotWhiteXY() - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Returns the value of the AsShotWhiteXY (50729) tag.
getAttributes() - Method in class edu.harvard.hul.ois.jhove.module.html.JHOpenTag
Returns the tag's attributes.
getAttributeValues() - Method in class edu.harvard.hul.ois.jhove.module.xml.XmlModuleHandler
Returns the set of attribute values.
getAudioDataEncoding() - Method in class edu.harvard.hul.ois.jhove.AESAudioMetadata
Returns audio data encoding.
getAuthor() - Method in class edu.harvard.hul.ois.jhove.Document
Returns a List of Agents, each representing an author of this Document.
getAutoFocus() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 7.7.3.15 auto focus.
getBackgroundColorIndicator() - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Returns the value of the TIFF/IT BACKGROUNDCOLORINDICATOR (34024) tag.
getBackgroundColorValue() - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Returns the value of the BACKGROUNDCOLORVALUE (34026) tag.
getBackLight() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 7.7.3.13 back light.
getBase() - Method in class edu.harvard.hul.ois.jhove.ModuleBase
Returns the JHOVE engine object.
getBatteryLevel() - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Returns the value of the BATTERYLEVEL (33423) tag.
getBeginColumn() - Method in interface edu.harvard.hul.ois.jhove.module.html.CharStream
Returns the column number of the first character for current token (being matched after the last call to BeginTOken).
getBeginColumn() - Method in class edu.harvard.hul.ois.jhove.module.html.HtmlCharStream
 
getBeginColumn() - Method in class edu.harvard.hul.ois.jhove.module.html.SimpleCharStream
 
getBeginLine() - Method in interface edu.harvard.hul.ois.jhove.module.html.CharStream
Returns the line number of the first character for current token (being matched after the last call to BeginTOken).
getBeginLine() - Method in class edu.harvard.hul.ois.jhove.module.html.HtmlCharStream
 
getBeginLine() - Method in class edu.harvard.hul.ois.jhove.module.html.SimpleCharStream
 
getBitDepth() - Method in interface edu.harvard.hul.ois.jhove.AESAudioMetadata.FormatRegion
Returns the bit depth.
getBitrateReduction() - Method in interface edu.harvard.hul.ois.jhove.AESAudioMetadata.FormatRegion
Returns the bitrate reduction (compression information).
getBitrateReduction() - Method in class edu.harvard.hul.ois.jhove.AESAudioMetadata
Returns the bitrate reduction (compression information).
getBitsPerExtendedRunLength() - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Returns the value of the BITSPEREXTENDEDRUNLENGTH (34021) tag.
getBitsPerRunLength() - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Returns the value of the BITSPERRUNLENGTH (34020) tag.
getBitsPerSample() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 8.2.1 bits per sample.
getBleedBox() - Method in class edu.harvard.hul.ois.jhove.module.pdf.PageObject
Returns the BleedBox for the page, or null if none.
getBlockAlign() - Method in class edu.harvard.hul.ois.jhove.module.WaveModule
Returns the number of bytes needed per aligned sample.
getBlocksUsedProperty(String) - Method in class edu.harvard.hul.ois.jhove.Utf8BlockMarker
Returns a Property listing the blocks that have been marked as used.
getBoxStream() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.BinaryFilterBox
returns the InputStream which will provide the decompressed boxes subsumed in this Box.
getBrightness() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 7.7.3.3 Brightness.
getBufferedDataStream(InputStream, int) - Static method in class edu.harvard.hul.ois.jhove.ModuleBase
A convenience method for getting a buffered DataInputStream from a module's InputStream.
getBufferSize() - Method in class edu.harvard.hul.ois.jhove.ConfigHandler
Returns the buffer size specified in the config file.
getBufferSize() - Method in class edu.harvard.hul.ois.jhove.JhoveBase
Returns buffer size.
getByName(String) - Method in class edu.harvard.hul.ois.jhove.Property
Return a property by its name, regardless of its position in the structural hierarchy of properties.
getByName(String) - Method in class edu.harvard.hul.ois.jhove.RepInfo
Return property by name, regardless of its position in the property hierarchy.
getByte_order() - Method in class edu.harvard.hul.ois.jhove.TextMDMetadata
 
getByte_orderString() - Method in class edu.harvard.hul.ois.jhove.TextMDMetadata
 
getByte_size() - Method in class edu.harvard.hul.ois.jhove.TextMDMetadata
 
getByteOrder() - Method in class edu.harvard.hul.ois.jhove.AESAudioMetadata
Return the byte order: 0 = big-endian; 1 = little-endian.
getByteOrder() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 6.1.2 byte order.
getBytesRead() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
 
getCatalogDict() - Method in class edu.harvard.hul.ois.jhove.module.PdfModule
Returns the catalog dictionary object.
getCellLength() - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Returns the value of the CELLLENGTH (265) tag.
getCellWidth() - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Returns the value of the CELLWIDTH (264) tag.
getCFAPattern() - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Returns the value of the CFAPATTERN (33422) tag.
getCFAPlaneColor() - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Returns the value of the CFAPlaneColor (50710) tag.
getCFARepeatPatternDim() - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Returns the value of the CFAREPEATPATTERNDIM (33421) tag.
getCharacter_size() - Method in class edu.harvard.hul.ois.jhove.TextMDMetadata
 
getCharacterReferences() - Method in class edu.harvard.hul.ois.jhove.module.xml.XmlDeclStream
Returns the character references as a List of Integers.
getCharset() - Method in class edu.harvard.hul.ois.jhove.module.html.HtmlMetadata
 
getCharset() - Method in class edu.harvard.hul.ois.jhove.TextMDMetadata
 
getChecksum() - Method in class edu.harvard.hul.ois.jhove.RepInfo
Returns this object's list of Checksums
getChecksumFlag() - Method in class edu.harvard.hul.ois.jhove.JhoveBase
Returns true if checksumming is requested.
getChecksummer() - Method in class edu.harvard.hul.ois.jhove.ChecksumInputStream
Returns the Checksummer object.
getChecksumMethod() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 6.2.3.1 Checksum method.
getChecksumValue() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 6.2.3.2 Checksum value.
getClipPath() - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Returns the value of the CLIPPATH (343) tag.
getCloseAllItem() - Method in class edu.harvard.hul.ois.jhove.viewer.JhoveWindow
Returns the "Close all document windows" menu item.
getCodestream() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.CodestreamHeaderBox
Returns the associated Codestream object.
getCodestream(int) - Method in class edu.harvard.hul.ois.jhove.module.Jpeg2000Module
Returns the nth Codestream, creating it if necessary, and make it the current one.
getColormapBitCodeValue() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 8.2.4.2 colormap bit code value.
getColormapBlueValue() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 8.2.4.5 colormap blue value.
getColormapGreenValue() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 8.2.4.4 colormap green value.
getColormapRedValue() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 8.2.4.3 colormap red value.
getColormapReference() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 8.2.4.1 colormap reference.
getColorSequence() - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Returns the value of the COLORSEQUENCE (34017) tag.
getColorspace() - Method in class edu.harvard.hul.ois.jhove.module.tiff.ExifIFD
returns the colorspace value (tag 40961).
getColorSpace() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 6.1.4.1 color space.
getColorTable() - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Returns the value of the COLORTABLE (34022) tag.
getColorTemp() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 7.7.3.8 color temperature.
getColumn() - Method in interface edu.harvard.hul.ois.jhove.module.html.CharStream
Deprecated.  
getColumn() - Method in class edu.harvard.hul.ois.jhove.module.html.HtmlCharStream
Deprecated.  
getColumn() - Method in class edu.harvard.hul.ois.jhove.module.html.JHAttribute
Returns the column number of the beginning of the attribute definition.
getColumn() - Method in class edu.harvard.hul.ois.jhove.module.html.JHElement
Returns the column number for the start of the element.
getColumn() - Method in class edu.harvard.hul.ois.jhove.module.html.SimpleCharStream
Deprecated.  
getComments() - Method in class edu.harvard.hul.ois.jhove.module.xml.XmlLexicalHandler
Returns the value of the comments list, which is a List of Strings.
getCompressedBitsPerPixel() - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Returns the value of the COMPRESSEDBITSPERPIXEL (37122) tag.
getCompressionCode() - Method in class edu.harvard.hul.ois.jhove.module.WaveModule
Returns the compression code.
getCompressionLevel() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 6.1.3.2 compression level.
getCompressionScheme() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 6.1.3.1 compression scheme.
getConfigFile() - Method in class edu.harvard.hul.ois.jhove.JhoveBase
Returns the configuration file.
getConfigFileFromProperties() - Static method in class edu.harvard.hul.ois.jhove.JhoveBase
Uses the user.home property to locate the configuration file.
getContent() - Method in class edu.harvard.hul.ois.jhove.module.pdf.PdfArray
Return the contents of the array as a Vector.
getContentStreamIndex() - Method in class edu.harvard.hul.ois.jhove.module.pdf.CrossRefStream
Returns the content stream index of the last object read.
getContentStreamObjNum() - Method in class edu.harvard.hul.ois.jhove.module.pdf.CrossRefStream
Returns the object number of the content stream in which this object is stored.
getContentStreams() - Method in class edu.harvard.hul.ois.jhove.module.pdf.PageObject
Returns the List of content streams.
getCopyright() - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Returns the value of the COPYRIGHT (33432) tag.
getCoverage() - Method in interface edu.harvard.hul.ois.jhove.Module
Return details as to the specific format versions or variants that are supported by this Module
getCoverage() - Method in class edu.harvard.hul.ois.jhove.ModuleBase
Return details as to the specific format versions or variants that are supported by this module
getCRC32() - Method in class edu.harvard.hul.ois.jhove.Checksummer
Returns the value of the CRC32 as a hex string.
getCRC32() - Method in class edu.harvard.hul.ois.jhove.ModuleBase
Returns the hex string representation of the CRC32 result.
getCreated() - Method in class edu.harvard.hul.ois.jhove.RepInfo
Returns the creation date stored in this object.
getCrossRefStream() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.CrossRefBox
Returns a DataInputStream based on a FragmentInputStream so that the fragments can be read as a single entity.
getCurrentKey() - Method in class edu.harvard.hul.ois.jhove.module.pdf.PageLabelNode
Returns key at current position in traversing tree
getCurrentNiso() - Method in class edu.harvard.hul.ois.jhove.module.Jpeg2000Module
Returns the current NisoImageMetadata object.
getCurTile() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.ContCodestream
Gets the value of curTile.
getDataLength() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHeader
Returns the number of bytes in the Box, not including the header.
getDate() - Method in class edu.harvard.hul.ois.jhove.App
Returns application code creation date
getDate() - Method in class edu.harvard.hul.ois.jhove.Document
Returns the date of this Document
getDate() - Method in class edu.harvard.hul.ois.jhove.HandlerBase
Return the last modification date of this OutputHandler, as a Java Date object
getDate() - Method in class edu.harvard.hul.ois.jhove.JhoveBase
Returns the engine date (the date at which this instance was created).
getDate() - Method in interface edu.harvard.hul.ois.jhove.Module
Return the last modification date of the Module, as a Java Date object
getDate() - Method in class edu.harvard.hul.ois.jhove.ModuleBase
Return the last modification date of this Module, as a Java Date object
getDate() - Method in interface edu.harvard.hul.ois.jhove.OutputHandler
Returns the last modification date of this handler
getDateTime() - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Returns the value of the DATETIME (306) tag.
getDateTimeCreated() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 7.9 date/time created.
getDateTimeProcessed() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 9.1.1 DateTimeProcessed
getDecodeParms() - Method in class edu.harvard.hul.ois.jhove.module.pdf.Filter
Returns the DecodeParms dictionary, or null if there is none.
getDefaultNiso() - Method in class edu.harvard.hul.ois.jhove.module.Jpeg2000Module
Returns the default NisoImageMetadata object.
getDefaultParams() - Method in interface edu.harvard.hul.ois.jhove.Module
Returns the list of default parameters.
getDefaultParams() - Method in class edu.harvard.hul.ois.jhove.ModuleBase
Returns the list of default parameters.
getDenominator() - Method in class edu.harvard.hul.ois.jhove.Rational
Returns the Denominator property.
getDeviceSource() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 7.5 device source.
getDict() - Method in class edu.harvard.hul.ois.jhove.module.pdf.DocNode
Returns the page object or page tree node dictionary from which this object was constructed.
getDict() - Method in class edu.harvard.hul.ois.jhove.module.pdf.PdfStream
Returns the stream's dictionary
getDictDepth() - Method in class edu.harvard.hul.ois.jhove.module.pdf.Parser
Returns the number of dictionary starts not yet matched by dictionary ends.
getDigitalCameraManufacturer() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 7.7.1 digital camera manufacturer.
getDigitalCameraModel() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 7.7.2 digital camera model.
getDirection() - Method in interface edu.harvard.hul.ois.jhove.AESAudioMetadata.Face
Returns the direction.
getDirectory() - Method in class edu.harvard.hul.ois.jhove.handler.audit.AuditState
Returns the directory path.
getDisplayOrientation() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 6.2.5 Display orientation.
getDisposition() - Method in class edu.harvard.hul.ois.jhove.AESAudioMetadata
Returns disposition.
getDNGVersion() - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Returns the value of the DNGVERSION (50706) tag.
getDocInfo() - Method in class edu.harvard.hul.ois.jhove.module.PdfModule
Returns the document information dictionary.
getDoctypeElements() - Method in class edu.harvard.hul.ois.jhove.module.html.JHDoctype
Returns the doctype token list.
getDocumentName() - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Returns the value of the DOCUMENTNAME (269) tag.
getDocumentTree() - Method in class edu.harvard.hul.ois.jhove.module.PdfModule
Returns the document tree root.
getDotRange() - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Returns the value of the DOTRANGE (336) tag.
getDoubleValue() - Method in class edu.harvard.hul.ois.jhove.module.pdf.PdfSimpleObject
Return the double value of the token.
getDTDURI() - Method in class edu.harvard.hul.ois.jhove.module.xml.XmlModuleHandler
Returns the DTD URI.
getDuration() - Method in interface edu.harvard.hul.ois.jhove.AESAudioMetadata.Face
Returns the duration.
getDuration() - Method in interface edu.harvard.hul.ois.jhove.AESAudioMetadata.FaceRegion
Returns the duration.
getEdition() - Method in class edu.harvard.hul.ois.jhove.Document
Returns informaton on the edition of this Document
getElement() - Method in class edu.harvard.hul.ois.jhove.module.html.JHOpenTag
Returns the element definition which has been associated with this tag.
getElements() - Method in class edu.harvard.hul.ois.jhove.module.html.ParseHtml
 
getEmail() - Method in class edu.harvard.hul.ois.jhove.Agent
Returns the value of the email property.
getEmbeddedFiles() - Method in class edu.harvard.hul.ois.jhove.module.PdfModule
Returns a NameTreeNode for the EmbeddedFiles entry of the Names dictionary.
getEncoding() - Method in class edu.harvard.hul.ois.jhove.ConfigHandler
Returns the character encoding specified by the config file.
getEncoding() - Method in class edu.harvard.hul.ois.jhove.HandlerBase
Returns this handler's encoding.
getEncoding() - Method in class edu.harvard.hul.ois.jhove.JhoveBase
Returns the output encoding.
getEncoding() - Method in class edu.harvard.hul.ois.jhove.module.xml.XmlDeclStream
Returns the encoding string.
getEncoding() - Method in interface edu.harvard.hul.ois.jhove.OutputHandler
Returns this handler's encoding.
getEncryptionDict() - Method in class edu.harvard.hul.ois.jhove.module.PdfModule
Returns the encryption dictionary.
getEnd() - Method in class edu.harvard.hul.ois.jhove.module.Utf8Block
Returns the end code.
getEndColumn() - Method in interface edu.harvard.hul.ois.jhove.module.html.CharStream
Returns the column number of the last character for current token (being matched after the last call to BeginTOken).
getEndColumn() - Method in class edu.harvard.hul.ois.jhove.module.html.HtmlCharStream
 
getEndColumn() - Method in class edu.harvard.hul.ois.jhove.module.html.SimpleCharStream
 
getEndLine() - Method in interface edu.harvard.hul.ois.jhove.module.html.CharStream
Returns the line number of the last character for current token (being matched after the last call to BeginTOken).
getEndLine() - Method in class edu.harvard.hul.ois.jhove.module.html.HtmlCharStream
 
getEndLine() - Method in class edu.harvard.hul.ois.jhove.module.html.SimpleCharStream
 
getEntities(String) - Method in class edu.harvard.hul.ois.jhove.module.html.JHElement
Extracts entities from a text string and returns them as a List of Strings.
getEntityNames() - Method in class edu.harvard.hul.ois.jhove.module.xml.XmlLexicalHandler
Returns the Set of entity names.
getEnumeration() - Method in class edu.harvard.hul.ois.jhove.Document
Returns the enumeration (e.g., serial volume and number) of this Document
getErrorMessage() - Method in class edu.harvard.hul.ois.jhove.module.html.JHOpenTag
Returns the error message associated with this element.
getErrors() - Method in class edu.harvard.hul.ois.jhove.module.tiff.IFD
Get any errors discovered during parsing.
getExifIFD() - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Return the offset of the Exif IFD.
getExifInfo() - Method in class edu.harvard.hul.ois.jhove.module.WaveModule
Returns the ExifInfo object.
getExifVersion() - Method in class edu.harvard.hul.ois.jhove.module.tiff.ExifIFD
Returns the Exif version string (tag 36864).
getExposureBias() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 7.7.3.4 exposure bias.
getExposureIndex() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 7.7.3.14 exposure index.
getExposureProgram() - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Returns the value of the EXPOSUREPROGRAM (34850) tag.
getExposureTime() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 7.7.3.2 exposure time.
getExtension() - Method in class edu.harvard.hul.ois.jhove.JhoveBase
Return the JHOVE configuration extensions.
getExtension(String) - Method in class edu.harvard.hul.ois.jhove.JhoveBase
Return the JHOVE configuration extension by name.
getExtensions() - Method in class edu.harvard.hul.ois.jhove.ConfigHandler
Return an associative map of configuration extensions.
getExternalEntityDeclarations() - Method in class edu.harvard.hul.ois.jhove.module.xml.XmlDeclHandler
Returns list of entity declarations.
getExtraSamples() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 8.2.3 extra samples.
getFaceList() - Method in class edu.harvard.hul.ois.jhove.AESAudioMetadata
Gets the list of Faces.
getFaceRegion(int) - Method in interface edu.harvard.hul.ois.jhove.AESAudioMetadata.Face
Returns an indexed FaceRegion.
getFax() - Method in class edu.harvard.hul.ois.jhove.Agent
Returns the value of the fax property.
getFeatures() - Method in interface edu.harvard.hul.ois.jhove.Module
Returns the full list of features.
getFeatures() - Method in class edu.harvard.hul.ois.jhove.ModuleBase
Returns the full list of features.
getFile() - Method in class edu.harvard.hul.ois.jhove.module.PdfModule
Return the RandomAccessFile being read.
getFileNames() - Method in class edu.harvard.hul.ois.jhove.module.wave.LinkChunkHandler
Accessor for getting file name list.
getFilePos() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
Returns the file position.
getFilePos() - Method in class edu.harvard.hul.ois.jhove.module.Jpeg2000Module
Return the current position in the module.
getFilePos() - Method in class edu.harvard.hul.ois.jhove.module.pdf.FileTokenizer
Gets the current position in the file.
getFilePos() - Method in class edu.harvard.hul.ois.jhove.RAFInputStream
Returns the current position in the file.
getFileSize() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 6.2.2 file size.
getFileSpecification() - Method in class edu.harvard.hul.ois.jhove.module.pdf.PdfStream
If the stream is external, returns the file specification for it, otherwise returns null.
getFileType() - Method in class edu.harvard.hul.ois.jhove.module.AiffModule
Returns the filetype, which is AIFFTYPE or AIFCTYPE.
getFillOrder() - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Returns the value of the FILLORDER (266) tag.
getFilterName() - Method in class edu.harvard.hul.ois.jhove.module.pdf.Filter
Returns the name of the filter.
getFilterName() - Method in class edu.harvard.hul.ois.jhove.module.pdf.PdfStream
Return the name of the filter, if the DecodeParams dictionary is present and has a "Name" entry.
getFilters() - Method in class edu.harvard.hul.ois.jhove.module.pdf.PdfStream
Returns an array (possibly empty but not null) of the filters for this Stream.
getFirstSampleOffset() - Method in class edu.harvard.hul.ois.jhove.AESAudioMetadata
Return the offset of the first byte of sample data.
getFlash() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 7.7.3.10 flash.
getFlashEnergy() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 7.7.3.11 flash energy.
getFlashpixVersion() - Method in class edu.harvard.hul.ois.jhove.module.tiff.ExifIFD
Returns the Flashpix version string (tag 40960).
getFlashReturn() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 7.7.3.12 flash return.
getFNumber() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 7.7.3.1 F number.
getFocalLength() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 7.7.3.9 focal length.
getFocalPlaneResolutionUnit() - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Returns the value of the FOCALPLANERESOLUTIONUNIT (37392) tag.
getFocalPlaneXResolution() - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Returns the value of the FOCALPLANEXRESOLUTION (37390) tag.
getFocalPlaneYResolution() - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Returns the value of the FOCALPLANEYRESOLUTION (37390) tag.
getFontMap(int) - Method in class edu.harvard.hul.ois.jhove.module.PdfModule
Get a font map.
getFontMaps() - Method in class edu.harvard.hul.ois.jhove.module.PdfModule
Return a List of all the font maps.
getFontResources() - Method in class edu.harvard.hul.ois.jhove.module.pdf.DocNode
Returns the dictionary of fonts within the node's Resources dictionary, if both exist.
getFormat() - Method in class edu.harvard.hul.ois.jhove.AESAudioMetadata
Returns format name.
getFormat() - Method in interface edu.harvard.hul.ois.jhove.Module
Return the array of format names supported by this Module
getFormat() - Method in class edu.harvard.hul.ois.jhove.ModuleBase
Return the array of format names supported by this Module
getFormat() - Method in class edu.harvard.hul.ois.jhove.RepInfo
Return the format identifier
getFormatList() - Method in class edu.harvard.hul.ois.jhove.AESAudioMetadata
Gets the list of Format Regions.
getFragmentList() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.FragmentListBox
Returns the fragment list.
getFrames() - Method in interface edu.harvard.hul.ois.jhove.AESAudioMetadata.TimeDesc
Returns the frames component of the fraction of a second.
getFreeCount() - Method in class edu.harvard.hul.ois.jhove.module.pdf.CrossRefStream
Returns the number of free objects detected.
getFromProperties(String) - Static method in class edu.harvard.hul.ois.jhove.JhoveBase
Returns a named value from the properties file.
getGenNumber() - Method in class edu.harvard.hul.ois.jhove.module.pdf.PdfObject
Returns the PDF generation number.
getGeoKeyDirectoryTag() - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Returns the value of the GEOKEYDIRECTORYTAG (34735) tag.
getGlobalParametersIFD() - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Return the offset of the GlobalParameters IFD.
getGPSAltitude() - Method in class edu.harvard.hul.ois.jhove.module.tiff.GPSInfoIFD
Get the GPSAltitude (6).
getGPSAltitudeRef() - Method in class edu.harvard.hul.ois.jhove.module.tiff.GPSInfoIFD
Get the GPSAltitudeRef (5).
getGPSDateStamp() - Method in class edu.harvard.hul.ois.jhove.module.tiff.GPSInfoIFD
Get the GPSDateStamp (29).
getGPSDestBearing() - Method in class edu.harvard.hul.ois.jhove.module.tiff.GPSInfoIFD
Get the GPSDestBearing (24).
getGPSDestBearingRef() - Method in class edu.harvard.hul.ois.jhove.module.tiff.GPSInfoIFD
Get the GPSDestBearingRef (23).
getGPSDestDistance() - Method in class edu.harvard.hul.ois.jhove.module.tiff.GPSInfoIFD
Get the GPSDestDistance (26).
getGPSDestDistanceRef() - Method in class edu.harvard.hul.ois.jhove.module.tiff.GPSInfoIFD
Get the GPSDestDistanceRef (25).
getGPSDestLatitude() - Method in class edu.harvard.hul.ois.jhove.module.tiff.GPSInfoIFD
Get the GPSDestLatitude (20).
getGPSDestLatitudeRef() - Method in class edu.harvard.hul.ois.jhove.module.tiff.GPSInfoIFD
Get the GPSDestLatitudeRef (19).
getGPSDestLongitude() - Method in class edu.harvard.hul.ois.jhove.module.tiff.GPSInfoIFD
Get the GPSDestLongitude (22).
getGPSDestLongitudeRef() - Method in class edu.harvard.hul.ois.jhove.module.tiff.GPSInfoIFD
Get the GPSDestLongitudeRef (21).
getGPSDifferential() - Method in class edu.harvard.hul.ois.jhove.module.tiff.GPSInfoIFD
Get the GPSDifferential (30).
getGPSDOP() - Method in class edu.harvard.hul.ois.jhove.module.tiff.GPSInfoIFD
Get the GPSDOP (11).
getGPSImgDirection() - Method in class edu.harvard.hul.ois.jhove.module.tiff.GPSInfoIFD
Get the GPSImgDirection (17).
getGPSImgDirectionRef() - Method in class edu.harvard.hul.ois.jhove.module.tiff.GPSInfoIFD
Get the GPSImgDirectionRef (16).
getGPSInfoIFD() - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Return the offset of the GPSInfo IFD.
getGPSLatitude() - Method in class edu.harvard.hul.ois.jhove.module.tiff.GPSInfoIFD
Get the GPSLatitude (2).
getGPSLatitudeRef() - Method in class edu.harvard.hul.ois.jhove.module.tiff.GPSInfoIFD
Get the GPSLatitudeRef (1).
getGPSLongitude() - Method in class edu.harvard.hul.ois.jhove.module.tiff.GPSInfoIFD
Get the GPSLongitude (4).
getGPSLongitudeRef() - Method in class edu.harvard.hul.ois.jhove.module.tiff.GPSInfoIFD
Get the GPSLongitudeRef (3).
getGPSMapDatum() - Method in class edu.harvard.hul.ois.jhove.module.tiff.GPSInfoIFD
Get the GPSMapDatum (18).
getGPSMeasureMode() - Method in class edu.harvard.hul.ois.jhove.module.tiff.GPSInfoIFD
Get the GPSMeasureMode (10).
getGPSProcessingMethod() - Method in class edu.harvard.hul.ois.jhove.module.tiff.GPSInfoIFD
Get the GPSProcessingMethod (27).
getGPSSatellites() - Method in class edu.harvard.hul.ois.jhove.module.tiff.GPSInfoIFD
Get the GPSSatellites (8).
getGPSSpeed() - Method in class edu.harvard.hul.ois.jhove.module.tiff.GPSInfoIFD
Get the GPSSpeed (13).
getGPSSpeedRef() - Method in class edu.harvard.hul.ois.jhove.module.tiff.GPSInfoIFD
Get the GPSSpeedRef (12).
getGPStatus() - Method in class edu.harvard.hul.ois.jhove.module.tiff.GPSInfoIFD
Get the GPSStatus (9).
getGPSTrack() - Method in class edu.harvard.hul.ois.jhove.module.tiff.GPSInfoIFD
Get the GPSTrack (15).
getGPSTrackRef() - Method in class edu.harvard.hul.ois.jhove.module.tiff.GPSInfoIFD
Get the GPSTrackRef (14).
getGPSVersionID() - Method in class edu.harvard.hul.ois.jhove.module.tiff.GPSInfoIFD
Get the GPSVersionID (1).
getGPTimeStamp() - Method in class edu.harvard.hul.ois.jhove.module.tiff.GPSInfoIFD
Get the GPSTimeStamp (7).
getGrayResponseCurve() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 8.2.5 gray response curve.
getGrayResponseUnit() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 8.2.6 gray response unit.
getHandler() - Method in class edu.harvard.hul.ois.jhove.ConfigHandler
Returns the List of OutputHandlers specified by the config file.
getHandler(String) - Method in class edu.harvard.hul.ois.jhove.JhoveBase
Return a handler by name.
getHandlerList() - Method in class edu.harvard.hul.ois.jhove.JhoveBase
Returns the list of handlers.
getHandlerMap() - Method in class edu.harvard.hul.ois.jhove.JhoveBase
Returns map of handler names to handlers.
getHandlerParams() - Method in class edu.harvard.hul.ois.jhove.ConfigHandler
Returns the List of handler parameters specified by the config file.
getHeaderLength() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHeader
Returns the length of the header.
getHorScale() - Method in class edu.harvard.hul.ois.jhove.module.jpeg.Tiling
 
getHostComputer() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 7.4 host computer.
getHours() - Method in interface edu.harvard.hul.ois.jhove.AESAudioMetadata.TimeDesc
Returns the hours component.
getHtmlMetadata() - Method in class edu.harvard.hul.ois.jhove.module.xml.XmlModuleHandler
Returns the HTML metadata object.
getID() - Method in class edu.harvard.hul.ois.jhove.module.iff.ChunkHeader
Returns the chunk type, which is a 4-character code
getID() - Method in class edu.harvard.hul.ois.jhove.module.wave.LinkChunkHandler
Accessor for getting the ID element.
getIdentifier() - Method in class edu.harvard.hul.ois.jhove.Document
Returns the list of formal Identifiers for this Document.
GetImage() - Method in interface edu.harvard.hul.ois.jhove.module.html.CharStream
Returns a string made up of characters from the marked token beginning to the current buffer position.
GetImage() - Method in class edu.harvard.hul.ois.jhove.module.html.HtmlCharStream
 
getImage() - Method in class edu.harvard.hul.ois.jhove.module.html.JHErrorElement
 
GetImage() - Method in class edu.harvard.hul.ois.jhove.module.html.SimpleCharStream
 
getImageColorIndicator() - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Returns the value of the IMAGECOLORINDICATOR (34023) tag.
getImageColorValue() - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Returns the value of the IMAGECOLORVALUE (34025) tag.
getImageData() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 8.3.3 ImageData
getImageDescription() - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Returns the value of the IMAGEDESCRIPTION (270) tag.
getImageHistory() - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Returns the value of the IMAGEHISTORY (37395) tag.
getImageIdentifier() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 6.2.1 Image identifier.
getImageIdentifierLocation() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 6.2.1.1 Image identifier location.
getImageLayer() - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Returns the value of the IMAGELAYER (34732) tag.
getImageLength() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 8.1.6 image length.
getImageNumber() - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Returns the value of the IMAGENUMBER (37393) tag.
getImageProducer() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 7.3 Image producer.
getImageSourceData() - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Returns the value of the IMAGESOURCEDATA (37724) tag.
getImageWidth() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 8.1.5 image width.
getIndent(int) - Static method in class edu.harvard.hul.ois.jhove.HandlerBase
Returns a String containing a number of spaces equal to the current indent level.
getIndexed() - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Returns the value of the INDEXED (364) tag.
getIndexOfChild(Object, Object) - Method in class edu.harvard.hul.ois.jhove.viewer.RepTreeRoot
Find the index of an object in its parent.
getIndirectDest() - Method in class edu.harvard.hul.ois.jhove.module.pdf.Destination
Returns the string naming the indirect destination.
getInkNames() - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Returns the value of the INKNAMES (333) tag.
getInkSet() - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Returns the value of the INKSET (332) tag.
getIntegerValue() - Method in class edu.harvard.hul.ois.jhove.module.pdf.Numeric
Returns the value, converted to an integer
getInterColourProfile() - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Returns the value of the ICC_PROFILE tag.
getInterlace() - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Returns the value of the INTERLACE (34857) tag.
getInternalEntityDeclarations() - Method in class edu.harvard.hul.ois.jhove.module.xml.XmlDeclHandler
Returns list of entity declarations.
getInteroperabilityIFD() - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Returns the offset of the Exif Interoperability IFD.
getInteroperabilityIndex() - Method in class edu.harvard.hul.ois.jhove.module.tiff.InteroperabilityIFD
Get the InteroperabilityIndex tag (1).
getIntValue() - Method in class edu.harvard.hul.ois.jhove.module.pdf.PdfSimpleObject
Return the integer value of the token.
getIPTCNAA() - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Returns the value of the IPTCNAA (33723) tag.
getISOSpeedRatings() - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Returns the value of the ISOSPEEDRATINGS (34855) tag.
getIT8Header() - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Returns the value of the IT8HEADER (34018) tag.
getJhoveHome() - Method in class edu.harvard.hul.ois.jhove.ConfigHandler
Returns the path to the application's home directory, with final path separator.
getJhoveHome() - Method in class edu.harvard.hul.ois.jhove.JhoveBase
Returns the JHOVE home directory.
getJpegInterchangeFormat() - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
 
getJPEGProc() - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Returns the value of the JPEGPROC (512) tag.
getKindOfLineEnd() - Method in class edu.harvard.hul.ois.jhove.module.html.HtmlCharStream
Retrieve the kind of end of line.
getKindOfLineEnd() - Method in class edu.harvard.hul.ois.jhove.module.xml.XmlDeclStream
 
getLabel() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.LabelBox
Returns the label string.
getLangCode() - Method in class edu.harvard.hul.ois.jhove.RFC1766Lang
Returns the language code string.
getLanguage() - Method in class edu.harvard.hul.ois.jhove.TextMDMetadata
 
getLanguageCodes() - Method in class edu.harvard.hul.ois.jhove.module.pdf.Parser
Returns the language code set from the Tokenizer.
getLanguageCodes() - Method in class edu.harvard.hul.ois.jhove.module.pdf.Tokenizer
Return the set of language codes.
getLastModified() - Method in class edu.harvard.hul.ois.jhove.RepInfo
Returns the last modified date stored in this object.
getLength() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHeader
Returns the box length, which includes the length and type fields.
getLength() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
Returns the length of the box, including header, based on the information in the header.
getLength() - Method in class edu.harvard.hul.ois.jhove.module.pdf.Stream
Returns the length of the stream.
getLine() - Method in interface edu.harvard.hul.ois.jhove.module.html.CharStream
Deprecated.  
getLine() - Method in class edu.harvard.hul.ois.jhove.module.html.HtmlCharStream
Deprecated.  
getLine() - Method in class edu.harvard.hul.ois.jhove.module.html.JHAttribute
Returns the line number of the beginning of the attribute definition.
getLine() - Method in class edu.harvard.hul.ois.jhove.module.html.JHElement
Returns the line number for the start of the element.
getLine() - Method in class edu.harvard.hul.ois.jhove.module.html.SimpleCharStream
Deprecated.  
getLinebreak() - Method in class edu.harvard.hul.ois.jhove.TextMDMetadata
 
getLinebreakString() - Method in class edu.harvard.hul.ois.jhove.TextMDMetadata
 
getLogLevel() - Method in class edu.harvard.hul.ois.jhove.ConfigHandler
Returns the name of the desired log level.
getLongValue() - Method in class edu.harvard.hul.ois.jhove.module.pdf.Numeric
Returns the value, converted to a long
getMainOrTile() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.MarkerSegment
Returns the MainOrTile object which is currently applicable in the Contiguous Codestream.
getMapLocations() - Method in interface edu.harvard.hul.ois.jhove.AESAudioMetadata.FaceRegion
Returns the channel map locations.
getMapLocations() - Method in class edu.harvard.hul.ois.jhove.AESAudioMetadata
Returns the names of the map locations.
getMarkup_basis() - Method in class edu.harvard.hul.ois.jhove.TextMDMetadata
 
getMarkup_basis_version() - Method in class edu.harvard.hul.ois.jhove.TextMDMetadata
 
getMarkup_language() - Method in class edu.harvard.hul.ois.jhove.TextMDMetadata
 
getMarkup_language_version() - Method in class edu.harvard.hul.ois.jhove.TextMDMetadata
 
getMaxAperatureValue() - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Returns the value of the MAXAPERTUREVALUE (37381) tag.
getMD5() - Method in class edu.harvard.hul.ois.jhove.Checksummer
Returns the value of the MD5 digest as a hex string.
getMediaBox() - Method in class edu.harvard.hul.ois.jhove.module.pdf.DocNode
Get the MediaBox of this node.
getMessage() - Method in class edu.harvard.hul.ois.jhove.Message
Get the message string.
getMessage() - Method in exception edu.harvard.hul.ois.jhove.module.html.ParseException
This method has the standard behavior when this object has been created using the standard constructors.
getMessage() - Method in error edu.harvard.hul.ois.jhove.module.html.TokenMgrError
You can also modify the body of this method to customize your error messages.
getMessage() - Method in class edu.harvard.hul.ois.jhove.RepInfo
Returns the message list stored in this object
getMessages() - Method in class edu.harvard.hul.ois.jhove.module.xml.XmlModuleHandler
Returns the List of messages generated during the parse.
getMetadata() - Method in class edu.harvard.hul.ois.jhove.module.html.HtmlDocDesc
Returns the metadata for this document.
getMeteringMode() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 7.7.3.6 metering mode.
getMethodology() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 7.10 methodology.
getMimeClass() - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
Returns the MIME class for this profile.
getMimeType() - Method in interface edu.harvard.hul.ois.jhove.Module
Return the array of MIME type strings for formats supported by this Module
getMimeType() - Method in class edu.harvard.hul.ois.jhove.ModuleBase
Return the array of MIME type strings for formats supported by this Module
getMimeType() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 6.1.1 MIME type.
getMimeType() - Method in class edu.harvard.hul.ois.jhove.RepInfo
Returns the MIME type string stored in this object
getMinutes() - Method in interface edu.harvard.hul.ois.jhove.AESAudioMetadata.TimeDesc
Returns the minutes component.
getMixVersion() - Method in class edu.harvard.hul.ois.jhove.JhoveBase
Returns the requested MIX schema version.
getMixVsn() - Method in class edu.harvard.hul.ois.jhove.ConfigHandler
Returns the MIX schema version specified by the config file.
getModelTiepointTag() - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Returns the value of the MODELTIEPOINTTAG (33922) tag.
getModelTransformationTag() - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Returns the value of the MODELTRANSFORMATIONTAG (34264) tag.
getModule() - Method in class edu.harvard.hul.ois.jhove.ConfigHandler
Returns the List of Modules specified by the config file.
getModule(String) - Method in class edu.harvard.hul.ois.jhove.JhoveBase
Returns a module by name.
getModule() - Method in class edu.harvard.hul.ois.jhove.module.pdf.StructureTree
Returns the module associated with this object.
getModule() - Method in class edu.harvard.hul.ois.jhove.RepInfo
Return the module.
getModuleList() - Method in class edu.harvard.hul.ois.jhove.JhoveBase
Returns the List of modules.
getModuleMap() - Method in class edu.harvard.hul.ois.jhove.JhoveBase
Returns the Map of module names to modules.
getModuleParams() - Method in class edu.harvard.hul.ois.jhove.ConfigHandler
Returns the List of module parameters specified by the config file.
getName() - Method in class edu.harvard.hul.ois.jhove.Agent
Returns the value of the name property.
getName() - Method in class edu.harvard.hul.ois.jhove.App
Returns the name of this application
getName() - Method in class edu.harvard.hul.ois.jhove.HandlerBase
Return the OutputHandler name
getName() - Method in class edu.harvard.hul.ois.jhove.JhoveBase
Returns the engine name.
getName() - Method in interface edu.harvard.hul.ois.jhove.Module
Return the name of this Module.
getName() - Method in class edu.harvard.hul.ois.jhove.module.html.HtmlAttributeDesc
Returns the attribute's name.
getName() - Method in class edu.harvard.hul.ois.jhove.module.html.JHAttribute
Returns the attribute's name.
getName() - Method in class edu.harvard.hul.ois.jhove.module.html.JHCloseTag
Returns the tag's name.
getName() - Method in class edu.harvard.hul.ois.jhove.module.html.JHOpenTag
Returns the tag's name.
getName() - Method in class edu.harvard.hul.ois.jhove.module.Utf8Block
Returns the block name.
getName() - Method in class edu.harvard.hul.ois.jhove.ModuleBase
Return the module name
getName() - Method in interface edu.harvard.hul.ois.jhove.OutputHandler
Returns the name of this handler
getName() - Method in class edu.harvard.hul.ois.jhove.Property
Returns the displayable name of this Property.
getNameParam() - Method in class edu.harvard.hul.ois.jhove.module.pdf.Filter
Returns the "Name" parameter of the filter, or null if there is no such parameter.
getNamespace() - Method in class edu.harvard.hul.ois.jhove.module.html.JHAttribute
Returns the namespace of the attribute's name.
getNamespaces() - Method in class edu.harvard.hul.ois.jhove.module.xml.XmlModuleHandler
Returns the map of prefixes to namespaces.
getNByte() - Method in class edu.harvard.hul.ois.jhove.ModuleBase
Returns the value of _nByte.
getNBytes() - Method in class edu.harvard.hul.ois.jhove.ChecksumInputStream
Returns the byte count to date on the stream.
getNCodestreamHeaders() - Method in class edu.harvard.hul.ois.jhove.module.Jpeg2000Module
Returns the codestream header count.
getNCodestreams() - Method in class edu.harvard.hul.ois.jhove.module.Jpeg2000Module
Returns the codestream count.
getNewSubfileType() - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Returns the value of the NEWSUBFILETYPE (254) tag.
getNext() - Method in class edu.harvard.hul.ois.jhove.module.pdf.Parser
Gets a token.
getNext(long) - Method in class edu.harvard.hul.ois.jhove.module.pdf.Parser
Gets a token.
getNext(Class, String) - Method in class edu.harvard.hul.ois.jhove.module.pdf.Parser
A class-sensitive version of getNext.
getNext() - Method in class edu.harvard.hul.ois.jhove.module.pdf.Tokenizer
Parses out and returns a token from the input file.
getNext(long) - Method in class edu.harvard.hul.ois.jhove.module.pdf.Tokenizer
Parses out and returns a token from the input file.
getNext() - Method in class edu.harvard.hul.ois.jhove.module.tiff.IFD
Get the offset of the next IFD.
getNextChunkHeader() - Method in class edu.harvard.hul.ois.jhove.module.iff.Superchunk
Reads and returns the next ChunkHeader within this Chunk, and takes care of byte counting.
getNextToken() - Method in class edu.harvard.hul.ois.jhove.module.html.ParseHtml
 
getNextToken() - Method in class edu.harvard.hul.ois.jhove.module.html.ParseHtmlTokenManager
 
getNiso() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.Codestream
Returns the images NisoImageMetadata.
getNisoImageMetadata() - Method in class edu.harvard.hul.ois.jhove.module.tiff.ExifIFD
Returns the constructed NisoImageMetadata.
getNisoImageMetadata() - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Returns the constructed NisoImageMetadata.
getNoise() - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Returns the value of the NOISE (37389) tag.
getNotations() - Method in class edu.harvard.hul.ois.jhove.module.xml.XmlModuleHandler
Returns the list of notations.
getNote() - Method in class edu.harvard.hul.ois.jhove.Agent
Returns the value of the note property.
getNote() - Method in class edu.harvard.hul.ois.jhove.Document
Returns the note associated with this Document
getNote() - Method in class edu.harvard.hul.ois.jhove.HandlerBase
Return the OutputHandler note
getNote() - Method in class edu.harvard.hul.ois.jhove.Identifier
Return the note, which will be null if none was specified.
getNote() - Method in interface edu.harvard.hul.ois.jhove.Module
Return the Module note
getNote() - Method in class edu.harvard.hul.ois.jhove.ModuleBase
Return the module note
getNote() - Method in interface edu.harvard.hul.ois.jhove.OutputHandler
Returns this handler's note
getNote() - Method in class edu.harvard.hul.ois.jhove.RepInfo
Returns the note property stored in this object
getNote() - Method in class edu.harvard.hul.ois.jhove.Signature
Returns the note specified for this Signature, or null if no note was specified.
getNotFound() - Method in class edu.harvard.hul.ois.jhove.handler.audit.AuditState
Returns the number of files not found.
getNotProcessed() - Method in class edu.harvard.hul.ois.jhove.handler.audit.AuditCount
Returns the total number of files not processed.
getNumberOfInks() - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Returns the value of the NUMBEROFINKS (334) tag.
getNumChannels() - Method in class edu.harvard.hul.ois.jhove.AESAudioMetadata
Returns number of channels.
getNumComponents() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.MainOrTile
Gets the number of components.
getNumerator() - Method in class edu.harvard.hul.ois.jhove.Rational
Returns the Numerator property.
getNumObjects() - Method in class edu.harvard.hul.ois.jhove.module.pdf.CrossRefStream
Returns the total object count.
getObject(int) - Method in class edu.harvard.hul.ois.jhove.module.pdf.ObjectStream
Extracts an object from the stream.
getObject() - Method in class edu.harvard.hul.ois.jhove.module.pdf.PdfIndirectObj
Retrieves the object which is referenced.
getObject(int, int) - Method in class edu.harvard.hul.ois.jhove.module.PdfModule
Returns an object of a given number.
getObjNum() - Method in class edu.harvard.hul.ois.jhove.module.pdf.CrossRefStream
Returns number of the last object read by readNextObject ().
getObjNumber() - Method in class edu.harvard.hul.ois.jhove.module.pdf.PdfObject
Returns the PDF object number.
getOECF() - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Returns the value of the OECF (34856) tag.
getOffset() - Method in class edu.harvard.hul.ois.jhove.InternalSignature
Returns the byte offset.
getOffset() - Method in class edu.harvard.hul.ois.jhove.Message
Return the offset to which the information is related.
getOffset() - Method in class edu.harvard.hul.ois.jhove.module.pdf.CrossRefStream
Returns the offset of the last object object read.
getOffset() - Method in class edu.harvard.hul.ois.jhove.module.pdf.Parser
Returns the current offset into the file.
getOffset() - Method in exception edu.harvard.hul.ois.jhove.module.pdf.PdfException
Returns the offset at which the exception occurred.
getOffset() - Method in class edu.harvard.hul.ois.jhove.module.pdf.Stream
Returns the current offset in the stream.
getOffset() - Method in class edu.harvard.hul.ois.jhove.module.pdf.Tokenizer
Return the current offset into the file.
getOffset() - Method in class edu.harvard.hul.ois.jhove.module.tiff.IFD
Get the IFD offset.
getOffset() - Method in exception edu.harvard.hul.ois.jhove.module.tiff.TiffException
Returns the offset at which the exception occurred.
getOrientation() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 6.2.4 Orientation.
getOS() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 7.4.1 OS (operating system).
getOSVersion() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 7.4.2 OS version.
getOuputFile() - Method in class edu.harvard.hul.ois.jhove.JhoveBase
Returns the output file.
getOutlineDict() - Method in class edu.harvard.hul.ois.jhove.module.PdfModule
Returns the outlines dictionary object.
getPageDest() - Method in class edu.harvard.hul.ois.jhove.module.pdf.Destination
Returns the page object dictionary if the destination is direct.
getPageDestObjNumber() - Method in class edu.harvard.hul.ois.jhove.module.pdf.Destination
Returns the object number of the page object dictionary if the destination is direct.
getPageName() - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Returns the value of the PAGENAME (285) tag.
getPageNumber() - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Returns the value of the PAGENUMBER (297) tag.
getPages() - Method in class edu.harvard.hul.ois.jhove.Document
Returns pagination information for this Document
getParent() - Method in class edu.harvard.hul.ois.jhove.module.pdf.DocNode
Returns the parent of this node.
getPDFACompliant() - Method in class edu.harvard.hul.ois.jhove.module.pdf.Parser
Returns false if either the parser or the tokenizer has detected non-compliance with PDF/A restrictions.
getPDFACompliant() - Method in class edu.harvard.hul.ois.jhove.module.pdf.Tokenizer
Returns the value of the pdfACompliant flag, which indicates that the tokenizer hasn't detected non-compliance.
getPerformanceData() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 8.3.4 PerformanceData.
getPhotoshopProperties() - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Returns the value of the PHOTOSHOPPROPS (34377) tag.
getPixelIntensityRange() - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Returns the value of the PIXELINTENSITYRANGE (34027) tag.
getPixelSize() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 7.6.3.1 pixel size.
getPlanarConfiguration() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 6.1.6 Planar configuration.
getPreferredPresentation() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 6.3 preferred presentation.
getPrevKey() - Method in class edu.harvard.hul.ois.jhove.module.pdf.PageLabelNode
Returns key previously obtained in traversing tree
getPrevValue() - Method in class edu.harvard.hul.ois.jhove.module.pdf.PageLabelNode
Returns value associated with key previously obtained in traversing tree
getPrevXref() - Method in class edu.harvard.hul.ois.jhove.module.pdf.CrossRefStream
Returns the offset of the previous cross-reference stream, or -1 if none is specified.
getPrimaryChromaticitiesBlueX() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 8.2.8.5 primary chromaticities blue X.
getPrimaryChromaticitiesBlueY() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 8.2.8.6 primary chromaticities blue Y.
getPrimaryChromaticitiesGreenX() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 8.2.8.3 primary chromaticities green X.
getPrimaryChromaticitiesGreenY() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 8.2.8.4 primary chromaticities green Y.
getPrimaryChromaticitiesRedX() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 8.2.8.1 primary chromaticities red X.
getPrimaryChromaticitiesRedY() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 8.2.8.2 primary chromaticities red Y.
getPrimaryIdentifier() - Method in class edu.harvard.hul.ois.jhove.AESAudioMetadata
Returns primary identifier.
getPrimaryIdentifierType() - Method in class edu.harvard.hul.ois.jhove.AESAudioMetadata
Returns primary identifier type.
getProcessingActions() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 9.1.5 ProcessingActions.
getProcessingAgency() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 9.1.3 ProcessingAgency.
getProcessingInstructions() - Method in class edu.harvard.hul.ois.jhove.module.xml.XmlModuleHandler
Returns the List of processing instructions.
getProcessingSoftwareName() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 9.1.4.1 ProcessingSoftwareName
getProcessingSoftwareVersion() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 9.1.4.2 ProcessingSoftwareVersion
getProfile() - Method in class edu.harvard.hul.ois.jhove.RepInfo
Returns the list of profiles (Strings) stored in this object
getProfileName() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 6.1.4.2.1 ICC profile name.
getProfiles() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 8.3.5 Profiles
getProfileURL() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 6.1.4.2.2 ICC profile URL.
getProperty(boolean) - Method in class edu.harvard.hul.ois.jhove.module.tiff.ExifIFD
Get the IFD properties.
getProperty(boolean) - Method in class edu.harvard.hul.ois.jhove.module.tiff.GlobalParametersIFD
Get the IFD properties.
getProperty(boolean) - Method in class edu.harvard.hul.ois.jhove.module.tiff.GPSInfoIFD
Get the IFD properties.
getProperty(boolean) - Method in class edu.harvard.hul.ois.jhove.module.tiff.IFD
Get the IFD properties.
getProperty(boolean) - Method in class edu.harvard.hul.ois.jhove.module.tiff.InteroperabilityIFD
Get the IFD properties.
getProperty(boolean) - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Get the IFD properties.
getProperty() - Method in class edu.harvard.hul.ois.jhove.RepInfo
Returns the Property map stored in this object.
getProperty(String) - Method in class edu.harvard.hul.ois.jhove.RepInfo
Returns a named Property from the Property map
getPropUnderConstruction() - Method in class edu.harvard.hul.ois.jhove.module.html.HtmlMetadata
Returns the "property under construction."
getPublisher() - Method in class edu.harvard.hul.ois.jhove.Document
Returns a List of Agents, each representing a publisher of this Document.
getRAF() - Method in class edu.harvard.hul.ois.jhove.RAFInputStream
Returns the RandomAccessFile object.
getRasterPadding() - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Returns the value of the RASTERPADDING (34019) tag.
getRawBytes() - Method in class edu.harvard.hul.ois.jhove.module.pdf.PdfSimpleObject
Return the raw bytes of the token, as a Vector of Integer objects.
getRawBytes() - Method in class edu.harvard.hul.ois.jhove.module.pdf.StringValuedToken
Get the value of the token's untranslated bytes.
getReferenceBlackWhite() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 6.1.4.6 Reference black and white.
getRefGridHeight() - Method in class edu.harvard.hul.ois.jhove.module.jpeg.Tiling
 
getRefGridWidth() - Method in class edu.harvard.hul.ois.jhove.module.jpeg.Tiling
 
getRelease() - Method in class edu.harvard.hul.ois.jhove.App
Returns the release identifier for this application.
getRelease() - Method in class edu.harvard.hul.ois.jhove.HandlerBase
Return the release identifier
getRelease() - Method in class edu.harvard.hul.ois.jhove.JhoveBase
Returns the engine release.
getRelease() - Method in interface edu.harvard.hul.ois.jhove.Module
Return the release identifier
getRelease() - Method in class edu.harvard.hul.ois.jhove.ModuleBase
Return the release identifier
getRelease() - Method in interface edu.harvard.hul.ois.jhove.OutputHandler
Returns release information for this handler
getRepInfoNote() - Method in interface edu.harvard.hul.ois.jhove.Module
Returns the RepInfo note
getRepInfoNote() - Method in class edu.harvard.hul.ois.jhove.ModuleBase
Return the RepInfo note
getResources() - Method in class edu.harvard.hul.ois.jhove.module.pdf.DocNode
Get the Resources dictionary.
getRights() - Method in class edu.harvard.hul.ois.jhove.App
Returns the rights string.
getRights() - Method in class edu.harvard.hul.ois.jhove.HandlerBase
Return the copyright information string
getRights() - Method in class edu.harvard.hul.ois.jhove.JhoveBase
Return the engine rights statement
getRights() - Method in interface edu.harvard.hul.ois.jhove.Module
Return the copyright information string
getRights() - Method in class edu.harvard.hul.ois.jhove.ModuleBase
Return the copyright information string
getRights() - Method in interface edu.harvard.hul.ois.jhove.OutputHandler
Returns this handler's copyright information
getRoot() - Method in class edu.harvard.hul.ois.jhove.module.xml.XmlModuleHandler
Returns the qualified name of the root element.
getRowsPerStrip() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 6.1.5.3 Rows per strip.
getSampleRate() - Method in interface edu.harvard.hul.ois.jhove.AESAudioMetadata.FormatRegion
Returns the sample rate.
getSampleRate() - Method in class edu.harvard.hul.ois.jhove.AESAudioMetadata
 
getSampleRate() - Method in interface edu.harvard.hul.ois.jhove.AESAudioMetadata.TimeDesc
Returns the sample rate on which the samples remainder is based.
getSamples() - Method in interface edu.harvard.hul.ois.jhove.AESAudioMetadata.TimeDesc
Returns the samples remaining after the frames part of the fractional second.
getSamplesPerPixel() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 8.2.2 samples per pixel.
getSamplingFrequencyPlane() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 8.1.1 sampling frequency plane.
getSamplingFrequencyUnit() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 8.1.2 sampling frequency unit.
getSaveDirectory() - Method in class edu.harvard.hul.ois.jhove.JhoveBase
Return the directory designated for saving files.
getSaxClass() - Method in class edu.harvard.hul.ois.jhove.JhoveBase
Return the SAX class.
getSaxClassFromProperties() - Static method in class edu.harvard.hul.ois.jhove.JhoveBase
Returns the value of the property edu.harvard.hul.ois.jhove.saxClass, which should be the name of the main SAX class.
getScannerManufacturer() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 7.6.1.1 scanner manufacturer.
getScannerModelName() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 7.6.1.2.1 scanner model name.
getScannerModelNumber() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 7.6.1.2.2 scanner model number.
getScannerModelSerialNo() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 7.6.1.2.3 scanner model serial number.
getScanningSoftware() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 7.6.2.1 scanning software.
getScanningSoftwareVersionNo() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 7.6.2.2 scanning software version number.
getSceneIlluminant() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 7.7.3.7 scene illuminant.
getSchemas() - Method in class edu.harvard.hul.ois.jhove.module.xml.XmlModuleHandler
Returns the list of schemas.
getSchemaVersion() - Method in class edu.harvard.hul.ois.jhove.AESAudioMetadata
Returns schema version.
getSeconds() - Method in interface edu.harvard.hul.ois.jhove.AESAudioMetadata.TimeDesc
Returns the seconds component.
getSecurityClasssification() - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Returns the value of the SECURITYCLASSIFICATION (37394) tag.
getSegmentType() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 6.1.5.1 segment type.
getSelfPropDesc() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
Returns a Property which describes the box.
getSelfPropDesc() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.LabelBox
Returns a Property which describes the Box, for use by Association boxes and perhaps others.
getSelfPropDesc() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.NumberListBox
Returns a Property which describes the Box, for use by Association boxes and perhaps others.
getSelfPropDesc() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.ROIBox
Returns a Property which describes the box.
getSelfPropDesc() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.XMLBox
Returns a Property which describes the Box, for use by Association boxes and perhaps others.
getSelfPropName() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.AssociationBox
Returns the name of the Box.
getSelfPropName() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.BinaryFilterBox
Returns the name of the Box.
getSelfPropName() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
Returns the name of the BoxHolder.
getSelfPropName() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.BPCCBox
Returns the name of the Box.
getSelfPropName() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.CaptureResolutionBox
Returns the name of the Box.
getSelfPropName() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.ChannelDefBox
Returns the name of the Box.
getSelfPropName() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.CodestreamHeaderBox
Returns the name of the Box.
getSelfPropName() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.CodestreamRegBox
Returns the name of the Box.
getSelfPropName() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.ColorGroupBox
Returns the name of the Box.
getSelfPropName() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.ColorSpecBox
Returns the name of the Box.
getSelfPropName() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.ComponentMapBox
Returns the name of the Box.
getSelfPropName() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.ComposLayerHdrBox
Returns the name of the Box.
getSelfPropName() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.ContCodestreamBox
Returns the name of the Box.
getSelfPropName() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.CrossRefBox
Returns the name of the Box.
getSelfPropName() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.DataEntryURLBox
Returns the name of the Box.
getSelfPropName() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.DDResolutionBox
Returns the name of the Box.
getSelfPropName() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.DesiredReproBox
Returns the name of the Box.
getSelfPropName() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.DigSignatureBox
Returns the name of the Box.
getSelfPropName() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.FileTypeBox
Returns the name of the Box.
getSelfPropName() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.FragmentListBox
Returns the name of the Box.
getSelfPropName() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.FragmentTableBox
Returns the name of the Box.
getSelfPropName() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.ImageHeaderBox
Returns the name of the Box.
getSelfPropName() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.IPRBox
Returns the name of the Box.
getSelfPropName() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
Returns the name of the Box.
getSelfPropName() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2HeaderBox
Returns the name of the Box.
getSelfPropName() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.LabelBox
Returns the name of the Box.
getSelfPropName() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.NumberListBox
Returns the name of the Box.
getSelfPropName() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.OpacityBox
Returns the name of the Box.
getSelfPropName() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.PaletteBox
Returns the name of the Box.
getSelfPropName() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.ReaderRequirementsBox
Returns the name of the Box.
getSelfPropName() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.ResolutionBox
Returns the name of the Box.
getSelfPropName() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.ROIBox
Returns the name of the Box.
getSelfPropName() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.TopLevelBoxHolder
Returns a name for use in messages.
getSelfPropName() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.UUIDBox
Returns the name of the Box.
getSelfPropName() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.UUIDInfoBox
Returns the name of the Box.
getSelfPropName() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.UUIDListBox
Returns the name of the Box.
getSelfPropName() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.XMLBox
Returns the name of the Box.
getSelfTimerMode() - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Returns the value of the SELFTIMERMODE (34859) tag.
getSensor() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 7.8 sensor.
getSHA1() - Method in class edu.harvard.hul.ois.jhove.Checksummer
Returns the value of the SHA-1 digest as a hex string.
getShowRawFlag() - Method in class edu.harvard.hul.ois.jhove.JhoveBase
Returns true if raw output is requested.
getShutterSpeedValue() - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Returns the value of the SHUTTERSPEEDVALUE (37377) tag.
getSigBytes() - Method in class edu.harvard.hul.ois.jhove.ConfigHandler
Returns the number of bytes to examine when looking for an indefinitely positioned signature, or checking the first sigBytes bytes of a file in lieu of a signature.
getSigBytes() - Method in class edu.harvard.hul.ois.jhove.JhoveBase
Return the maximum number of bytes to check, for modules that look for an indefinitely positioned signature or check the first sigBytes bytes in lieu of a signature
getSigFlag() - Method in class edu.harvard.hul.ois.jhove.module.xml.XmlModuleHandler
Returns true if we have seen an element or a processing instruction, which implies that we've seen an XML declaration.
getSigMatch() - Method in class edu.harvard.hul.ois.jhove.RepInfo
Returns the list of matching signatures.
getSignature() - Method in interface edu.harvard.hul.ois.jhove.Module
Return the List of Signatures recognized by this Module
getSignature() - Method in class edu.harvard.hul.ois.jhove.ModuleBase
Return the List of Signatures recognized by this Module
getSignatureFlag() - Method in class edu.harvard.hul.ois.jhove.JhoveBase
Returns the "check signature only" flag.
getSite() - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Returns the value of the SITE (34016) tag.
getSize() - Method in class edu.harvard.hul.ois.jhove.module.iff.ChunkHeader
Returns the chunk size (excluding the first 8 bytes)
getSize() - Method in class edu.harvard.hul.ois.jhove.RepInfo
Returns the size property stored in this object.
getSourceData() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 9.1.2 SourceData.
getSourceID() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 7.2 source ID.
getSourceObject() - Method in class edu.harvard.hul.ois.jhove.module.pdf.FileSpecification
Returns the PdfObject from which the file specification was created.
getSourceType() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 7.1 Source type.
getSourceXDimension() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
 
getSourceXDimensionUnit() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
 
getSourceYDimension() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
 
getSourceYDimensionUnit() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
 
getSpatialFrequencyResponse() - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Returns the value of the SPATIALFREQUENCYRESPONSE (37388) tag.
getSpecification() - Method in class edu.harvard.hul.ois.jhove.HandlerBase
Returns a list of Document objects (one for each specification document).
getSpecification() - Method in interface edu.harvard.hul.ois.jhove.Module
Returns a list of Document objects (one for each specification document of the format).
getSpecification() - Method in class edu.harvard.hul.ois.jhove.ModuleBase
Returns a list of Document objects (one for each specification document of the format).
getSpecification() - Method in interface edu.harvard.hul.ois.jhove.OutputHandler
Returns a List of Document objects giving the format specification documentation
getSpecificationVersion() - Method in class edu.harvard.hul.ois.jhove.AESAudioMetadata
Returns specification version of the document format.
getSpecString() - Method in class edu.harvard.hul.ois.jhove.module.pdf.FileSpecification
Returns the file specification as a string.
getSpectralSensitivity() - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Returns the value of the SPECTRALSENSITIVITY (34852) tag.
getStandalone() - Method in class edu.harvard.hul.ois.jhove.module.xml.XmlDeclStream
Returns the standalone string.
getStart() - Method in class edu.harvard.hul.ois.jhove.module.Utf8Block
Returns the start code.
getStartTime() - Method in interface edu.harvard.hul.ois.jhove.AESAudioMetadata.Face
Returns the starting time.
getStartTime() - Method in interface edu.harvard.hul.ois.jhove.AESAudioMetadata.FaceRegion
Returns the starting time.
getStream() - Method in class edu.harvard.hul.ois.jhove.module.pdf.PdfStream
Returns the stream's Stream portion
getStringValue() - Method in class edu.harvard.hul.ois.jhove.module.pdf.PdfSimpleObject
Return the string value of the token.
getStripByteCounts() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 6.1.5.4 Strip byte counts.
getStripOffsets() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 6.1.5.2 Strip offsets.
getStripRowCounts() - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Returns the value of the STRIPROWCOUNTS (559) tag.
getSubIFDs() - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Returns the value of the SUBIFDS (330) tag.
getSubjectDistance() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 7.7.3.5 Subject distance.
getSubjectLocation() - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Returns the value of the SUBJECTLOCATION (37396) tag.
getSubMessage() - Method in class edu.harvard.hul.ois.jhove.Message
Get the submessage string.
GetSuffix(int) - Method in interface edu.harvard.hul.ois.jhove.module.html.CharStream
Returns an array of characters that make up the suffix of length 'len' for the currently matched token.
GetSuffix(int) - Method in class edu.harvard.hul.ois.jhove.module.html.HtmlCharStream
 
GetSuffix(int) - Method in class edu.harvard.hul.ois.jhove.module.html.SimpleCharStream
 
getT4Options() - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Returns the value of the T4OPTIONS (292) tag.
getT6Options() - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Returns the value of the T6OPTIONS (293) tag.
getTargetIDManufacturer() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 8.3.2.1 TargetIDManufacturer
getTargetIDMedia() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 8.3.2.3 TargetIDMedia
getTargetIDName() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 8.3.2.2 TargetIDName
getTargetIDNo() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 8.3.2.3 TargetIDNo
getTargetType() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 8.3.1 Target Type
getTelephone() - Method in class edu.harvard.hul.ois.jhove.Agent
Returns the value of the telephone property.
getTempDir() - Method in class edu.harvard.hul.ois.jhove.ConfigHandler
Returns the temporary directory path specified by the config file, with final path separator.
getTempDirectory() - Method in class edu.harvard.hul.ois.jhove.JhoveBase
Return the temporary directory.
getText() - Method in class edu.harvard.hul.ois.jhove.module.pdf.PdfProfile
Returns the text which describes this profile.
getText() - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
Returns the text which describes this profile.
getTheExifIFD() - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Returns the Exif IFD object, or null if none.
getTheGlobalParametersIFD() - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Returns the GlobalParameters IFD object, or null if none.
getTheGPSInfoIFD() - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Returns the GPS info IFD object, or null if none.
getTheInteroperabilityIFD() - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Returns the Interoperability IFD object, or null if none.
getThreshholding() - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Returns the value of the THRESHHOLDING (263) tag.
getTIFFEPStandardID() - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Returns the value of the TIFFEPSTANDARDID (37398) tag.
getTile(int) - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.ContCodestream
Gets the tile whose index is idx.
getTileByteCounts() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 6.1.5.8 Tile byte counts.
getTileLength() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 6.1.5.6 Tile length.
getTileOffsets() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 6.1.5.7 Tile offsets.
getTileParts() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.Tile
returns the List of TileParts.
getTiles() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.ContCodestream
Returns the list of tiles.
getTileWidth() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 6.1.5.5 Tile width.
getTilingType() - Method in class edu.harvard.hul.ois.jhove.module.jpeg.Tiling
 
getTimeZoneOffset() - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Returns the value of the TIMEZONEOFFSET (34858) tag.
getTitle() - Method in class edu.harvard.hul.ois.jhove.Document
Returns the title of this Document
getTitle() - Method in class edu.harvard.hul.ois.jhove.module.html.HtmlMetadata
Returns the contents of the TITLE element.
getToken(int) - Method in class edu.harvard.hul.ois.jhove.module.html.ParseHtml
 
getToken() - Method in exception edu.harvard.hul.ois.jhove.module.pdf.PdfException
Return the token associated with the exception.
getToken() - Method in class edu.harvard.hul.ois.jhove.module.pdf.PdfSimpleObject
Returns the token represented by this object.
getTotal() - Method in class edu.harvard.hul.ois.jhove.handler.audit.AuditCount
Returns the total number of valid or well-formed files.
getTrailerDict() - Method in class edu.harvard.hul.ois.jhove.module.PdfModule
Returns the trailer dictionary object.
getTransparencyIndicator() - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Returns the value of the TRANSPARENCYINDICATOR (34028) tag.
getTrimBox() - Method in class edu.harvard.hul.ois.jhove.module.pdf.PageObject
Returns the TrimBox for the page, or null if none.
getType() - Method in class edu.harvard.hul.ois.jhove.Agent
Returns the value of the type property.
getType() - Method in class edu.harvard.hul.ois.jhove.Checksum
Returns this Checksum's type
getType() - Method in class edu.harvard.hul.ois.jhove.Document
Returns one of the predefined DocumentTypes as the type of this Document
getType() - Method in class edu.harvard.hul.ois.jhove.Identifier
Return the identifier type.
getType() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHeader
Returns the box type.
getType() - Method in class edu.harvard.hul.ois.jhove.Property
Returns the type of this Property.
getType() - Method in class edu.harvard.hul.ois.jhove.Signature
Returns the type of this Signature
getUniqueCameraModel() - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Returns the value of the DNG UNIQUECAMERAMODEL (50708) tag.
getUnparsedEntities() - Method in class edu.harvard.hul.ois.jhove.module.xml.XmlModuleHandler
Returns the list of unparsed entities.
getUri() - Method in class edu.harvard.hul.ois.jhove.RepInfo
Returns the URI property stored in this object.
getURLFlag() - Method in class edu.harvard.hul.ois.jhove.RepInfo
Returns a flag which, if true, indicates the object is a URL.
getUsage() - Method in class edu.harvard.hul.ois.jhove.App
Returns the usage string, which should be output when the user enters a command line with only the application name.
getUse() - Method in class edu.harvard.hul.ois.jhove.AESAudioMetadata
Returns the use (role of the document).
getUse() - Method in class edu.harvard.hul.ois.jhove.Signature
Returns the use requirement for this Signature
getUtf8BlockMarker() - Method in class edu.harvard.hul.ois.jhove.module.html.HtmlMetadata
Returns the UTF8BlockMarker for the metadata.
getValid() - Method in class edu.harvard.hul.ois.jhove.handler.audit.AuditCount
Returns the total number of valid files.
getValid() - Method in class edu.harvard.hul.ois.jhove.RepInfo
Returns the value of the validity flag.
getValidityNote() - Method in interface edu.harvard.hul.ois.jhove.Module
Returns the string describing validity criteria
getValidityNote() - Method in class edu.harvard.hul.ois.jhove.ModuleBase
Return the string describing validity criteria
getValue() - Method in class edu.harvard.hul.ois.jhove.Checksum
Returns this Checksum's value
getValue() - Method in class edu.harvard.hul.ois.jhove.Checksummer
getValue is required by the Checksum interface, but we can return only one of the three values.
getValue() - Method in class edu.harvard.hul.ois.jhove.Identifier
Return the displayable string.
getValue() - Method in class edu.harvard.hul.ois.jhove.module.html.JHAttribute
Returns the attribute's value.
getValue() - Method in class edu.harvard.hul.ois.jhove.module.pdf.Numeric
Returns the value of this Numeric as a double
getValue() - Method in class edu.harvard.hul.ois.jhove.module.pdf.StringValuedToken
Get the value of the token as a String.
getValue() - Method in class edu.harvard.hul.ois.jhove.Property
Returns the Object which is the Property's value.
getValue() - Method in class edu.harvard.hul.ois.jhove.Signature
Returns the byte array value for this Signature.
getValueHexString() - Method in class edu.harvard.hul.ois.jhove.Signature
Returns the value of this Signature as a hexadecimal string.
getValueString() - Method in class edu.harvard.hul.ois.jhove.Signature
Returns the string value of this Signature.
getVendor() - Method in class edu.harvard.hul.ois.jhove.HandlerBase
Return the vendor information
getVendor() - Method in interface edu.harvard.hul.ois.jhove.Module
Return the vendor information
getVendor() - Method in class edu.harvard.hul.ois.jhove.ModuleBase
Return the vendor information
getVendor() - Method in interface edu.harvard.hul.ois.jhove.OutputHandler
Returns a List of Agent objects giving the vendor(s) of this handler.
getVersion() - Method in class edu.harvard.hul.ois.jhove.module.tiff.IFD
Get the TIFF version.
getVersion() - Method in class edu.harvard.hul.ois.jhove.module.xml.XmlDeclStream
Returns the version string.
getVersion() - Method in class edu.harvard.hul.ois.jhove.RepInfo
Returns the version property stored in this object
getVertScale() - Method in class edu.harvard.hul.ois.jhove.module.jpeg.Tiling
 
getViewerData() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get data for Swing GUI viewer.
getViewPrefDict() - Method in class edu.harvard.hul.ois.jhove.module.PdfModule
Returns the viewer preferences dictionary object.
getWeb() - Method in class edu.harvard.hul.ois.jhove.Agent
Returns the value of the web property.
getWellFormed() - Method in class edu.harvard.hul.ois.jhove.handler.audit.AuditCount
Returns the total number of well-formed files.
getWellFormed() - Method in class edu.harvard.hul.ois.jhove.RepInfo
Returns the value of the well-formed flag.
getWellFormedNote() - Method in interface edu.harvard.hul.ois.jhove.Module
Return the string describing well-formedness criteria
getWellFormedNote() - Method in class edu.harvard.hul.ois.jhove.ModuleBase
Return the string describing well-formedness criteria
getWhitePointXValue() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 8.2.7.1 white point X value.
getWhitePointYValue() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 8.2.7.2 white point Y value.
getWordSize() - Method in interface edu.harvard.hul.ois.jhove.AESAudioMetadata.FormatRegion
Returns the word size.
getWSString() - Method in class edu.harvard.hul.ois.jhove.module.pdf.Parser
Returns the Tokenizer's current whitespace string.
getWSString() - Method in class edu.harvard.hul.ois.jhove.module.pdf.Tokenizer
Returns the value of the last white space string read by the tokenizer.
getXClipPathUnits() - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Returns the value of the XCLIPPATHUNITS (344) tag.
getXHTMLVersion(String) - Static method in class edu.harvard.hul.ois.jhove.module.html.DTDMapper
Returns the XHTML version associated with the DTD's public ID.
getXPhysScanResolution() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 7.6.3.2.1 X physcal scanning resolution.
getXPosition() - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Returns the value of the XPOSITION (286) tag.
getXPrintAspectRatio() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 7.7.3.16.1 X print aspect ratio.
getXSamplingFrequency() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 8.1.3 X sampling frequency.
getXTargetedDisplayAR() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 6.2.6 X targeted display aspect ratio.
getYCbCrCoefficients() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 6.1.4.5 YCbCr coefficients.
getYCbCrPositioning() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 6.1.4.4 YCbCr positioning.
getYCbCrSubSampling() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 6.1.4.3 YCbCr subsampling.
getYPhysScanResolution() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 7.6.3.2.2 Y physcal scanning resolution.
getYPosition() - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Returns the value of the XPOSITION (287) tag.
getYPrintAspectRatio() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 7.7.3.16.2 Y print aspect ratio.
getYSamplingFrequency() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 8.1.4 Y sampling frequency.
getYTargetedDisplayAR() - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Get 6.2.7 Y targeted display aspect ratio.
GifModule - Class in edu.harvard.hul.ois.jhove.module
Module for identification and validation of GIF files.
GifModule() - Constructor for class edu.harvard.hul.ois.jhove.module.GifModule
Instantiate a GifModule object.
GifStrings - Class in edu.harvard.hul.ois.jhove.module.gif
A class for holding arrays of informative strings that will go into properties of a GIF object.
GLOBAL_COLOR_TABLE_FLAG - Static variable in class edu.harvard.hul.ois.jhove.module.gif.GifStrings
Strings for presence or absence of global color table
GLOBALPARAMETERS - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.IFD
Global parameters IFD.
GlobalParametersIFD - Class in edu.harvard.hul.ois.jhove.module.tiff
Encapsulation of a GlobalParameters IFD, as defined by TIFF/FX, RFC 2301.
GlobalParametersIFD(long, RepInfo, RandomAccessFile, boolean) - Constructor for class edu.harvard.hul.ois.jhove.module.tiff.GlobalParametersIFD
Instantiate a GlobalParametersIFD object.
GLOBALPARAMETERSIFD - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffFXBase
Tiff/FX-specific tags.
GOVERNMENT - Static variable in class edu.harvard.hul.ois.jhove.AgentType
Agent type for a governmental body.
GPSINFO - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.IFD
GPSInfo IFD.
GPSInfoIFD - Class in edu.harvard.hul.ois.jhove.module.tiff
Encapsulation of a GPSInfo IFD (for TIFF/EP and Exif).
GPSInfoIFD(long, RepInfo, RandomAccessFile, boolean) - Constructor for class edu.harvard.hul.ois.jhove.module.tiff.GPSInfoIFD
Instantiate an GPSInfoIFD object.
GRAY_RESPONSE_UNIT - Static variable in class edu.harvard.hul.ois.jhove.NisoImageMetadata
8.2.6 gray response unit value labels.
GRAYRESPONSECURVE - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Standard TIFF 6.0 tags.
GRAYRESPONSEUNIT - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Standard TIFF 6.0 tags.
GREATER_THAN - Static variable in class edu.harvard.hul.ois.jhove.module.pdf.State
 
GTCITATIONGEOKEY - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
GeoTIFF key values.
GTMODELTYPEGEOKEY - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
GeoTIFF key values.
GTRASTERTYPEGEOKEY - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
GeoTIFF key values.
GTSOBox - Class in edu.harvard.hul.ois.jhove.module.jpeg2000
Graphics Technology Standard Output Box.
GTSOBox(RandomAccessFile, BoxHolder) - Constructor for class edu.harvard.hul.ois.jhove.module.jpeg2000.GTSOBox
Constructor with superbox.

H

HALFTONEHINTS - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Standard TIFF 6.0 tags.
halignAtt - Static variable in class edu.harvard.hul.ois.jhove.module.html.Html4DocDesc
Horizontal alignment attribute for cells.
HANDLE - Static variable in class edu.harvard.hul.ois.jhove.IdentifierType
Identifier type for CNRI Handle.
HandlerBase - Class in edu.harvard.hul.ois.jhove
Abstract base class for Jhove output handlers.
HandlerBase(String, String, int[], String, String) - Constructor for class edu.harvard.hul.ois.jhove.HandlerBase
Constructors of all subclasses of HandlerBase should call this as a super constructor.
HandlerBase.SynchronizedDateFormat - Class in edu.harvard.hul.ois.jhove
A DateFormat class to address an issue of thread safety.
HandlerBase.SynchronizedDateFormat(String) - Constructor for class edu.harvard.hul.ois.jhove.HandlerBase.SynchronizedDateFormat
 
hasBoxes - Variable in class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
 
hasFeature(String) - Method in interface edu.harvard.hul.ois.jhove.Module
Returns true if the module supports a given named feature, and false if the feature is unsupported or unknown.
hasFeature(String) - Method in class edu.harvard.hul.ois.jhove.ModuleBase
Returns true if the module supports a given named feature, and false if the feature is unsupported or unknown.
hasFilters(PdfObject, String[]) - Method in class edu.harvard.hul.ois.jhove.module.pdf.PdfProfile
Returns true if a Filter object contains a filter name which matches any of the Strings in the second argument.
hasFixedOffset() - Method in class edu.harvard.hul.ois.jhove.InternalSignature
Returns true if this InternalSignature has a fixed byte offset.
hasMinimumResolution(TiffIFD, double, double) - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffProfileDLF
Checks for minimum X and Y resolution.
hasNext() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
Checks if any more subboxes are available.
hasNext() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.TopLevelBoxHolder
 
HCUSAGE_L - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
 
headElement - Variable in class edu.harvard.hul.ois.jhove.module.html.HtmlDocDesc
A representation of the HEAD element.
headings - Static variable in class edu.harvard.hul.ois.jhove.module.html.HtmlDocDesc
Header tags, which are invariant for all HTML versions.
HEX_FE_1 - Static variable in class edu.harvard.hul.ois.jhove.module.pdf.State
 
HEX_FE_2 - Static variable in class edu.harvard.hul.ois.jhove.module.pdf.State
 
HEX_PDF_1 - Static variable in class edu.harvard.hul.ois.jhove.module.pdf.State
 
HEX_PDF_2 - Static variable in class edu.harvard.hul.ois.jhove.module.pdf.State
 
HEX_RAW - Static variable in class edu.harvard.hul.ois.jhove.module.pdf.State
 
HEX_UTF16_1 - Static variable in class edu.harvard.hul.ois.jhove.module.pdf.State
 
HEX_UTF16_2 - Static variable in class edu.harvard.hul.ois.jhove.module.pdf.State
 
HEX_UTF16_3 - Static variable in class edu.harvard.hul.ois.jhove.module.pdf.State
 
HEX_UTF16_4 - Static variable in class edu.harvard.hul.ois.jhove.module.pdf.State
 
Hexadecimal - Class in edu.harvard.hul.ois.jhove.module.pdf
Deprecated.  
Hexadecimal() - Constructor for class edu.harvard.hul.ois.jhove.module.pdf.Hexadecimal
Deprecated. Creates an instance of a hexadecimal string literal
HEXADECIMAL - Static variable in class edu.harvard.hul.ois.jhove.module.pdf.State
 
HOSTCOMPUTER - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Standard TIFF 6.0 tags.
Html3_2DocDesc - Class in edu.harvard.hul.ois.jhove.module.html
This class describes the requirements of an HTML 3.2 document.
Html3_2DocDesc() - Constructor for class edu.harvard.hul.ois.jhove.module.html.Html3_2DocDesc
Constructor.
Html4_01FrameDocDesc - Class in edu.harvard.hul.ois.jhove.module.html
This class describes the requirements of an HTML 4.01 Frameset document.
Html4_01FrameDocDesc() - Constructor for class edu.harvard.hul.ois.jhove.module.html.Html4_01FrameDocDesc
Constructor.
Html4_01StrictDocDesc - Class in edu.harvard.hul.ois.jhove.module.html
This class describes the requirements of an HTML 4.01 Strict document.
Html4_01StrictDocDesc() - Constructor for class edu.harvard.hul.ois.jhove.module.html.Html4_01StrictDocDesc
Constructor.
Html4_01TFDocDesc - Class in edu.harvard.hul.ois.jhove.module.html
Abstract class for the HTML 4.01 Transitional and Frameset document types.
Html4_01TFDocDesc() - Constructor for class edu.harvard.hul.ois.jhove.module.html.Html4_01TFDocDesc
 
Html4_01TransDocDesc - Class in edu.harvard.hul.ois.jhove.module.html
This class describes the requirements of an HTML 4.01 Transitional document.
Html4_01TransDocDesc() - Constructor for class edu.harvard.hul.ois.jhove.module.html.Html4_01TransDocDesc
Constructor.
Html4_0FrameDocDesc - Class in edu.harvard.hul.ois.jhove.module.html
This class describes the requirements of an HTML 4.01 Frameset document.
Html4_0FrameDocDesc() - Constructor for class edu.harvard.hul.ois.jhove.module.html.Html4_0FrameDocDesc
Constructor.
Html4_0StrictDocDesc - Class in edu.harvard.hul.ois.jhove.module.html
This class describes the requirements of an HTML 4.0 Strict document.
Html4_0StrictDocDesc() - Constructor for class edu.harvard.hul.ois.jhove.module.html.Html4_0StrictDocDesc
Constructor.
Html4_0TFDocDesc - Class in edu.harvard.hul.ois.jhove.module.html
Abstract class for the HTML 4.0 Transitional and Frameset document types.
Html4_0TFDocDesc() - Constructor for class edu.harvard.hul.ois.jhove.module.html.Html4_0TFDocDesc
 
Html4_0TransDocDesc - Class in edu.harvard.hul.ois.jhove.module.html
This class describes the requirements of an HTML 4.0 Transitional document.
Html4_0TransDocDesc() - Constructor for class edu.harvard.hul.ois.jhove.module.html.Html4_0TransDocDesc
Constructor.
Html4DocDesc - Class in edu.harvard.hul.ois.jhove.module.html
Abstract class for common features of HTML 4.0 and 4.01 documents.
Html4DocDesc() - Constructor for class edu.harvard.hul.ois.jhove.module.html.Html4DocDesc
 
Html4StrictDocDesc - Class in edu.harvard.hul.ois.jhove.module.html
Abstract class for common features of HTML 4.0 and 4.01 strict documents.
Html4StrictDocDesc() - Constructor for class edu.harvard.hul.ois.jhove.module.html.Html4StrictDocDesc
 
Html4TFDocDesc - Class in edu.harvard.hul.ois.jhove.module.html
Abstract class for common features of HTML 4.0 and 4.01 transitional and frameset documents.
Html4TFDocDesc() - Constructor for class edu.harvard.hul.ois.jhove.module.html.Html4TFDocDesc
 
HTML_3_2 - Static variable in class edu.harvard.hul.ois.jhove.module.HtmlModule
 
HTML_4_01_FRAMESET - Static variable in class edu.harvard.hul.ois.jhove.module.HtmlModule
 
HTML_4_01_STRICT - Static variable in class edu.harvard.hul.ois.jhove.module.HtmlModule
 
HTML_4_01_TRANSITIONAL - Static variable in class edu.harvard.hul.ois.jhove.module.HtmlModule
 
HTML_4_0_FRAMESET - Static variable in class edu.harvard.hul.ois.jhove.module.HtmlModule
 
HTML_4_0_STRICT - Static variable in class edu.harvard.hul.ois.jhove.module.HtmlModule
 
HTML_4_0_TRANSITIONAL - Static variable in class edu.harvard.hul.ois.jhove.module.HtmlModule
 
HtmlAttributeDesc - Class in edu.harvard.hul.ois.jhove.module.html
Class representing an abstract attribute of an HTML element.
HtmlAttributeDesc(String, String[], int) - Constructor for class edu.harvard.hul.ois.jhove.module.html.HtmlAttributeDesc
Constructor.
HtmlAttributeDesc(String) - Constructor for class edu.harvard.hul.ois.jhove.module.html.HtmlAttributeDesc
Constructor for an attribute that can take any value, with kind defaulting to IMPLIED.
HtmlCharStream - Class in edu.harvard.hul.ois.jhove.module.html
An implementation of interface CharStream, where the stream is assumed to contain only ASCII characters (without unicode processing).
HtmlCharStream(Reader, int, int, int) - Constructor for class edu.harvard.hul.ois.jhove.module.html.HtmlCharStream
 
HtmlCharStream(Reader, int, int) - Constructor for class edu.harvard.hul.ois.jhove.module.html.HtmlCharStream
 
HtmlCharStream(Reader) - Constructor for class edu.harvard.hul.ois.jhove.module.html.HtmlCharStream
 
HtmlCharStream(InputStream, int, int, int, String) - Constructor for class edu.harvard.hul.ois.jhove.module.html.HtmlCharStream
 
HtmlCharStream(InputStream, int, int, String) - Constructor for class edu.harvard.hul.ois.jhove.module.html.HtmlCharStream
 
HtmlCharStream(InputStream, String) - Constructor for class edu.harvard.hul.ois.jhove.module.html.HtmlCharStream
 
HtmlDoc() - Method in class edu.harvard.hul.ois.jhove.module.html.ParseHtml
 
HtmlDocDesc - Class in edu.harvard.hul.ois.jhove.module.html
This is an abstract class for processing an HTML document that has been parsed into a List of HtmlElements.
HtmlDocDesc() - Constructor for class edu.harvard.hul.ois.jhove.module.html.HtmlDocDesc
Consructor.
htmlElement - Variable in class edu.harvard.hul.ois.jhove.module.html.HtmlDocDesc
A representation of the HTML element.
HtmlMetadata - Class in edu.harvard.hul.ois.jhove.module.html
Repository for an HTML document's metadata.
HtmlMetadata() - Constructor for class edu.harvard.hul.ois.jhove.module.html.HtmlMetadata
Constructor.
HtmlModule - Class in edu.harvard.hul.ois.jhove.module
Module for identification and validation of HTML files.
HtmlModule() - Constructor for class edu.harvard.hul.ois.jhove.module.HtmlModule
Instantiate an HtmlModule object.
HtmlSpecialToken - Class in edu.harvard.hul.ois.jhove.module.html
Class for defining special items in HTML element and attribute definitions.
HtmlStack - Class in edu.harvard.hul.ois.jhove.module.html
A LinkedList dressed up as a stack for processing HTML objects.
HtmlStack() - Constructor for class edu.harvard.hul.ois.jhove.module.html.HtmlStack
 
HtmlTagDesc - Class in edu.harvard.hul.ois.jhove.module.html
This class defines the permitted behavior of a particular HTML tag.
HtmlTagDesc(String, boolean, boolean, List, List) - Constructor for class edu.harvard.hul.ois.jhove.module.html.HtmlTagDesc
Constructor for simple case.
HtmlTagDesc(String, boolean, boolean, int[], List[], List) - Constructor for class edu.harvard.hul.ois.jhove.module.html.HtmlTagDesc
Constructor for sequenced case.
HtmlTempTagDesc - Class in edu.harvard.hul.ois.jhove.module.html
Subclass of HtmlTagDesc for temporary tags.
HtmlTempTagDesc(String) - Constructor for class edu.harvard.hul.ois.jhove.module.html.HtmlTempTagDesc
Constructor.

I

i18nAttrs - Static variable in class edu.harvard.hul.ois.jhove.module.html.Html4DocDesc
Internationalization attributes list.
Identifier - Class in edu.harvard.hul.ois.jhove
This class encapsulates information about an identifier for a specification document.
Identifier(String, IdentifierType) - Constructor for class edu.harvard.hul.ois.jhove.Identifier
Create an Identifier.
Identifier(String, IdentifierType, String) - Constructor for class edu.harvard.hul.ois.jhove.Identifier
Create an Identifier.
IdentifierType - Class in edu.harvard.hul.ois.jhove
This class defines enumerated types for an Identifier of a format specification document.
identify(File, RepInfo, String, boolean, boolean) - Method in class edu.harvard.hul.ois.jhove.ObjectIdentifier
Perform identification on a file.
IFD - Class in edu.harvard.hul.ois.jhove.module.tiff
Encapsulation of a TIFF image file directory (IFD).
IFD(long, RepInfo, RandomAccessFile, boolean) - Constructor for class edu.harvard.hul.ois.jhove.module.tiff.IFD
Instantiate an IFD object.
IFD - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.IFD
TIFF IFD (LONG) type.
image - Variable in class edu.harvard.hul.ois.jhove.module.html.Token
The string image of the token.
IMAGE_DESC - Static variable in class edu.harvard.hul.ois.jhove.module.jpeg.Spiff
 
IMAGE_ORIENTATION - Static variable in class edu.harvard.hul.ois.jhove.module.jpeg.Spiff
 
IMAGE_TITLE - Static variable in class edu.harvard.hul.ois.jhove.module.jpeg.Spiff
 
IMAGECOLORINDICATOR_L - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
 
IMAGEDESCRIPTION - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Standard TIFF 6.0 tags.
ImageHeaderBox - Class in edu.harvard.hul.ois.jhove.module.jpeg2000
Image Header Box.
ImageHeaderBox(RandomAccessFile, BoxHolder) - Constructor for class edu.harvard.hul.ois.jhove.module.jpeg2000.ImageHeaderBox
Constructor with superbox.
imageHeaderSeen - Variable in class edu.harvard.hul.ois.jhove.module.Jpeg2000Module
 
IMAGELAYER_L - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
 
IMAGELENGTH - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Standard TIFF 6.0 tags.
imageObjectOK(PdfDictionary) - Method in class edu.harvard.hul.ois.jhove.module.pdf.AProfile
Checks if a single image XObject fits the profile
imageObjectOK(PdfDictionary) - Method in class edu.harvard.hul.ois.jhove.module.pdf.XProfileBase
Checks if a single image XObject fits the profile
IMAGEWIDTH - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Standard TIFF 6.0 tags.
implicitContainers(String) - Method in class edu.harvard.hul.ois.jhove.module.html.HtmlTagDesc
Reports whether this element can be implicitly nested in an element with a given tag.
IMPLIED - Static variable in class edu.harvard.hul.ois.jhove.module.html.HtmlAttributeDesc
Permitted values for _kind
IN_ATTVALUE - Static variable in interface edu.harvard.hul.ois.jhove.module.html.ParseHtmlConstants
 
IN_COMMENT - Static variable in interface edu.harvard.hul.ois.jhove.module.html.ParseHtmlConstants
 
IN_DOCTYPE - Static variable in interface edu.harvard.hul.ois.jhove.module.html.ParseHtmlConstants
 
IN_DOCTYPE2 - Static variable in interface edu.harvard.hul.ois.jhove.module.html.ParseHtmlConstants
 
IN_PCDATA - Static variable in interface edu.harvard.hul.ois.jhove.module.html.ParseHtmlConstants
 
IN_TAG - Static variable in interface edu.harvard.hul.ois.jhove.module.html.ParseHtmlConstants
 
inBounds(Vector) - Method in class edu.harvard.hul.ois.jhove.module.pdf.NameTreeNode
See if a key is within the bounds of this node.
inBuf - Variable in class edu.harvard.hul.ois.jhove.module.html.HtmlCharStream
 
inBuf - Variable in class edu.harvard.hul.ois.jhove.module.html.SimpleCharStream
 
includes(String) - Static method in class edu.harvard.hul.ois.jhove.module.pdf.StdStructTypes
Returns true if s is equal (by an equals() test) to some string in typeNames.
inCodestreamStr - Static variable in class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Strings
Strings for the "region of interest present in codestream" field of the ROI box.
infoDictOK(String) - Method in class edu.harvard.hul.ois.jhove.module.pdf.XProfileBase
Checks if the entries which are required in the document information dictionary by PDF-X/1 and X/3 are there.
InfoMessage - Class in edu.harvard.hul.ois.jhove
This class encapsulates an informational message from a Module, giving information (not necessarily a problem) about the content being analyzed or the way that Jhove deals with it.
InfoMessage(String) - Constructor for class edu.harvard.hul.ois.jhove.InfoMessage
Create an InfoMessage.
InfoMessage(String, long) - Constructor for class edu.harvard.hul.ois.jhove.InfoMessage
Create an InfoMessage.
InfoMessage(String, String) - Constructor for class edu.harvard.hul.ois.jhove.InfoMessage
Create an InfoMessage.
InfoMessage(String, String, long) - Constructor for class edu.harvard.hul.ois.jhove.InfoMessage
Create an InfoMessage.
InfoWindow - Class in edu.harvard.hul.ois.jhove.viewer
An abstract superclass for windows that display information and can be saved to a file.
InfoWindow(String, App, JhoveBase) - Constructor for class edu.harvard.hul.ois.jhove.viewer.InfoWindow
Constructor.
init(String) - Method in class edu.harvard.hul.ois.jhove.handler.audit.AuditState
Initializes to a specified directory and clears counters.
init(String) - Method in class edu.harvard.hul.ois.jhove.HandlerBase
Per-instantiation initialization.
init(String, String) - Method in class edu.harvard.hul.ois.jhove.JhoveBase
Initialize the JHOVE engine.
init() - Method in class edu.harvard.hul.ois.jhove.module.html.HtmlDocDesc
Initialization called by subclass constructors after supportedElements has been assigned.
init(String) - Method in interface edu.harvard.hul.ois.jhove.Module
Per-instantiation initialization.
init(BoxHolder) - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
 
init(String) - Method in class edu.harvard.hul.ois.jhove.ModuleBase
Per-instantiation initialization.
init(String) - Method in interface edu.harvard.hul.ois.jhove.OutputHandler
Per-instantiation initialization.
initBytesRead() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
 
initFeatures() - Method in class edu.harvard.hul.ois.jhove.ModuleBase
Initializes the feature list.
initialBytes - Variable in class edu.harvard.hul.ois.jhove.module.Utf8Module
 
initNiso() - Method in class edu.harvard.hul.ois.jhove.module.JpegModule
Initializes the constant portions of the niso metadata.
initParse() - Method in class edu.harvard.hul.ois.jhove.module.AiffModule
Initializes the state of the module for parsing.
initParse() - Method in class edu.harvard.hul.ois.jhove.module.GifModule
Initializes the state of the module for parsing.
initParse() - Method in class edu.harvard.hul.ois.jhove.module.Jpeg2000Module
Initializes the state of the module for parsing.
initParse() - Method in class edu.harvard.hul.ois.jhove.module.JpegModule
Initializes the state of the module for parsing.
initParse() - Method in class edu.harvard.hul.ois.jhove.module.PdfModule
Initialize the module.
initParse() - Method in class edu.harvard.hul.ois.jhove.module.TiffModule
Initializes the state of the module for parsing.
initParse() - Method in class edu.harvard.hul.ois.jhove.module.WaveModule
Initializes the state of the module for parsing.
initParse() - Method in class edu.harvard.hul.ois.jhove.module.XmlModule
 
initParse() - Method in class edu.harvard.hul.ois.jhove.ModuleBase
Initializes the state of the module for parsing.
initRead(RandomAccessFile) - Method in class edu.harvard.hul.ois.jhove.module.pdf.CrossRefStream
Prepares for reading the Stream.
initRead(RandomAccessFile) - Method in class edu.harvard.hul.ois.jhove.module.pdf.Stream
Prepares for reading the Stream.
initStream(Stream) - Method in class edu.harvard.hul.ois.jhove.module.pdf.FileTokenizer
Streams can occur only in files, not in streams, so some of the initialization of a stream object goes here.
initStream(Stream) - Method in class edu.harvard.hul.ois.jhove.module.pdf.StreamTokenizer
Streams can occur only in files, not in streams, so this should never be called.
initStream(Stream) - Method in class edu.harvard.hul.ois.jhove.module.pdf.Tokenizer
Initialization code for Stream object.
INKNAMES - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Standard TIFF 6.0 tags.
INKSET - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Standard TIFF 6.0 tags.
inlineContent - Static variable in class edu.harvard.hul.ois.jhove.module.html.Html4DocDesc
List of inline elements.
input_stream - Variable in class edu.harvard.hul.ois.jhove.module.html.ParseHtmlTokenManager
 
inputStream - Variable in class edu.harvard.hul.ois.jhove.module.html.HtmlCharStream
 
inputStream - Variable in class edu.harvard.hul.ois.jhove.module.html.SimpleCharStream
 
InstructionSetBox - Class in edu.harvard.hul.ois.jhove.module.jpeg2000
Instruction Set Box (JPX).
InstructionSetBox(RandomAccessFile, BoxHolder) - Constructor for class edu.harvard.hul.ois.jhove.module.jpeg2000.InstructionSetBox
Constructor with superbox.
InstrumentChunk - Class in edu.harvard.hul.ois.jhove.module.aiff
Implementation of the AIFF Instrument Chunk.
InstrumentChunk(AiffModule, ChunkHeader, DataInputStream) - Constructor for class edu.harvard.hul.ois.jhove.module.aiff.InstrumentChunk
Constructor.
InstrumentChunk - Class in edu.harvard.hul.ois.jhove.module.wave
Implementation of the WAVE Instrument Chunk, which gives information about a MIDI instrument.
InstrumentChunk(ModuleBase, ChunkHeader, DataInputStream) - Constructor for class edu.harvard.hul.ois.jhove.module.wave.InstrumentChunk
Constructor.
instrumentChunkSeen - Variable in class edu.harvard.hul.ois.jhove.module.AiffModule
 
instrumentChunkSeen - Variable in class edu.harvard.hul.ois.jhove.module.WaveModule
 
INTEGER - Static variable in class edu.harvard.hul.ois.jhove.PropertyType
Property type for an Integer object, or an integer if the Arity is Array.
integerArray(int[]) - Static method in class edu.harvard.hul.ois.jhove.HandlerBase
Return String representation of an integer array.
integerArray(int[], char) - Static method in class edu.harvard.hul.ois.jhove.HandlerBase
Return String representation of an integer array with specified separator.
INTERLACE_FLAG - Static variable in class edu.harvard.hul.ois.jhove.module.gif.GifStrings
Image is interlaced or not
internalEntityDecl(String, String) - Method in class edu.harvard.hul.ois.jhove.module.xml.XmlDeclHandler
Adds internal entity declarations to the entity declarations list in the form of a String[2], with element 0 being the name and element 1 being the value.
InternalSignature - Class in edu.harvard.hul.ois.jhove
This class encapsulates information about internal format signatures.
InternalSignature(String, SignatureType, SignatureUseType) - Constructor for class edu.harvard.hul.ois.jhove.InternalSignature
Creates an InternalSignature given a string value, a type, and a use requirement.
InternalSignature(int[], SignatureType, SignatureUseType) - Constructor for class edu.harvard.hul.ois.jhove.InternalSignature
Creates an InternalSignature given a byte array, a type, and a use requirement.
InternalSignature(String, SignatureType, SignatureUseType, int) - Constructor for class edu.harvard.hul.ois.jhove.InternalSignature
Creates an InternalSignature given a string value, a type, a use requirement, and a byte offset.
InternalSignature(int[], SignatureType, SignatureUseType, int) - Constructor for class edu.harvard.hul.ois.jhove.InternalSignature
Creates an InternalSignature given a byte array, a type, a use requirement, and a byte offset.
InternalSignature(String, SignatureType, SignatureUseType, String) - Constructor for class edu.harvard.hul.ois.jhove.InternalSignature
Creates an InternalSignature given a string value, a type, a use requirement, and a note.
InternalSignature(int[], SignatureType, SignatureUseType, String) - Constructor for class edu.harvard.hul.ois.jhove.InternalSignature
Creates an InternalSignature given a byte array, a type, a use requirement, and a note.
InternalSignature(String, SignatureType, SignatureUseType, int, String) - Constructor for class edu.harvard.hul.ois.jhove.InternalSignature
Creates an InternalSignature given a string value, a type, a use requirement, a byte offset, and a note.
InternalSignature(int[], SignatureType, SignatureUseType, int, String) - Constructor for class edu.harvard.hul.ois.jhove.InternalSignature
Creates an InternalSignature given a string value, a type, a use requirement, a byte offset, and a note.
INTEROPERABILITY - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.IFD
Exif Interoperability IFD.
InteroperabilityIFD - Class in edu.harvard.hul.ois.jhove.module.tiff
Encapsulation of an Exif Interoperability IFD (for Exif).
InteroperabilityIFD(long, RepInfo, RandomAccessFile, boolean) - Constructor for class edu.harvard.hul.ois.jhove.module.tiff.InteroperabilityIFD
Instantiate an InteroperabilityIFD object.
intTo4DigitHex(int) - Static method in class edu.harvard.hul.ois.jhove.module.XmlModule
 
intToBase26(int, boolean) - Static method in class edu.harvard.hul.ois.jhove.module.pdf.PageLabelNode
A convenience method to turn integers into "letter" page numbers as defined for PDF.
intToRoman(int, boolean) - Static method in class edu.harvard.hul.ois.jhove.module.pdf.PageLabelNode
A convenience method to turn integers into Roman numerals, for the generation of page labels.
IPRBox - Class in edu.harvard.hul.ois.jhove.module.jpeg2000
Intellectual Property Rights box.
IPRBox(RandomAccessFile, BoxHolder) - Constructor for class edu.harvard.hul.ois.jhove.module.jpeg2000.IPRBox
Constructor with superbox.
isAlreadyOK() - Method in class edu.harvard.hul.ois.jhove.module.pdf.PdfProfile
Returns the value of the alreadyOK flag.
isAlreadyOK() - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
Returns the value of the alreadyOK flag.
isBigEndian() - Method in class edu.harvard.hul.ois.jhove.module.tiff.IFD
Returns true if file is big-endian, false if little-endian.
isBigEndian() - Method in class edu.harvard.hul.ois.jhove.ModuleBase
Returns true if the dominant "endianness" of the module, or the current file being processed, is big-endian, otherwise false.
isBleedBoxPresent() - Method in class edu.harvard.hul.ois.jhove.module.pdf.XProfileBase
Returns true if a BleedBox has been detected.
isBlockLevel(String) - Static method in class edu.harvard.hul.ois.jhove.module.pdf.StdStructTypes
 
ISBN - Static variable in class edu.harvard.hul.ois.jhove.IdentifierType
Identifier type for International Standard Book Number.
isBodySeen() - Method in class edu.harvard.hul.ois.jhove.module.html.HtmlStack
Returns true if a BODY element has been pushed on the stack.
isCloseTagRequired() - Method in class edu.harvard.hul.ois.jhove.module.html.HtmlTagDesc
Returns true if the closing tag is required
isConsistent() - Method in class edu.harvard.hul.ois.jhove.RepInfo
Returns the value of the consistency flag.
isContentEmpty() - Method in class edu.harvard.hul.ois.jhove.module.html.HtmlTagDesc
Returns true if this element has empty content
isDate() - Method in class edu.harvard.hul.ois.jhove.module.pdf.Literal
Returns true if the string value is a parsable date.
isEmpty() - Method in interface edu.harvard.hul.ois.jhove.AESAudioMetadata.FormatRegion
Returns true if the region is empty.
isExifProfileOK() - Method in class edu.harvard.hul.ois.jhove.module.jpeg.JpegExif
Returns true if the Exif IFD is present and satisfies the profile requirements.
isFalse() - Method in class edu.harvard.hul.ois.jhove.module.pdf.PdfSimpleObject
Return true if the value of the token is the keyword "false", and false otherwise.
isFirst() - Method in class edu.harvard.hul.ois.jhove.module.tiff.IFD
Return true if this is the first IFD.
isFontSubset(String) - Method in class edu.harvard.hul.ois.jhove.module.PdfModule
 
isHeadSeen() - Method in class edu.harvard.hul.ois.jhove.module.html.HtmlStack
Returns true if a HEAD element has been pushed on the stack.
isImage() - Method in class edu.harvard.hul.ois.jhove.module.pdf.PdfStream
Returns true if this is an image stream.
isIndirect() - Method in class edu.harvard.hul.ois.jhove.module.pdf.Destination
Returns true if the destination is indirect.
isJP2HdrSeen() - Method in class edu.harvard.hul.ois.jhove.module.Jpeg2000Module
 
isMacintosh() - Static method in class edu.harvard.hul.ois.jhove.MacStuff
Determines if we're running on a Macintosh, so appropriate UI adjustments can be made.
isMarker() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.MarkerSegment
Returns true if this segment is a Marker.
isNotEmpty(String) - Static method in class edu.harvard.hul.ois.jhove.module.XmlModule
Verification that the string contains something usefull.
ISO - Static variable in class edu.harvard.hul.ois.jhove.IdentifierType
Identifier type for International Standards Organization.
iso8601 - Static variable in class edu.harvard.hul.ois.jhove.HandlerBase
A DateFormat for representing a Date in ISO 8601 (e.g., 2003-07-31T15:31:12-0400) format.
isObjCompressed() - Method in class edu.harvard.hul.ois.jhove.module.pdf.CrossRefStream
Returns true if the last object read by readNextObject () is a compressed object.
isPageObject() - Method in class edu.harvard.hul.ois.jhove.module.pdf.DocNode
Returns true if this node is a PageObject.
isPDFACompliant() - Method in class edu.harvard.hul.ois.jhove.module.pdf.Literal
Returns true if this token doesn't violate any PDF/A rules, false if it does.
isPdfACompliant() - Method in class edu.harvard.hul.ois.jhove.module.pdf.Name
Returns true if it's within the PDF/A implementation limit
isPdfACompliant() - Method in class edu.harvard.hul.ois.jhove.module.pdf.Numeric
Returns true if this is within PDF/A implementation limits.
isPdfACompliant() - Method in class edu.harvard.hul.ois.jhove.module.pdf.PdfArray
Report if it's within implementation limits defined for PDF/A.
isPdfACompliant() - Method in class edu.harvard.hul.ois.jhove.module.pdf.PdfDictionary
Return true if it's within the PDF/A implementation limit.
isPdfaCompliant() - Method in class edu.harvard.hul.ois.jhove.module.pdf.PdfStream
Returns true if no PDF/A compliance problems have been found, false if problems have been found
isPdfACompliant() - Method in class edu.harvard.hul.ois.jhove.module.pdf.Token
Returns true if this token is within PDF/A implementation limits.
isPdfaCompliant() - Method in class edu.harvard.hul.ois.jhove.XMPHandler
Returns true if no violations of PDF/A compliance have been found, false if a problem was detected.
isPDFDocEncoding() - Method in class edu.harvard.hul.ois.jhove.module.pdf.Literal
Returns true if this string is in PDFDocEncoding, false if UTF-16.
isPPMSeen() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.ContCodestream
Returns the value of the ppmSeen flag, signifying that a PPM marker segment has been encountered.
isPresent() - Method in class edu.harvard.hul.ois.jhove.module.pdf.StructureTree
Returns true if and only if the document structure exists.
isRandomAccess() - Method in interface edu.harvard.hul.ois.jhove.Module
Returns the random access flag (true if the module operates on random access files, false if it operates on streams)
isRandomAccess() - Method in class edu.harvard.hul.ois.jhove.ModuleBase
Return the random access flag (true if the module operates on random access files, false if it operates on streams)
isReal() - Method in class edu.harvard.hul.ois.jhove.module.pdf.Numeric
Returns true if the value is stored as a floating-point number.
isRequired() - Method in class edu.harvard.hul.ois.jhove.module.html.HtmlAttributeDesc
Return true if the attribute is required.
isSimpleToken() - Method in class edu.harvard.hul.ois.jhove.module.pdf.Token
Returns true if the token is one which the Parser treats as a unitary object.
isStringValue() - Method in class edu.harvard.hul.ois.jhove.Signature
Returns true if this Signature's value was provided as a String, false if as an array.
isSyntaxCorrect() - Method in class edu.harvard.hul.ois.jhove.RFC1766Lang
Returns true if the language code string is syntactically compliant.
isTemp() - Method in class edu.harvard.hul.ois.jhove.module.html.HtmlTagDesc
Reports whether this is a temporary tag descriptor.
isTemp() - Method in class edu.harvard.hul.ois.jhove.module.html.HtmlTempTagDesc
Reports whether this is a temporary tag descriptor.
isThumbnail() - Method in class edu.harvard.hul.ois.jhove.module.tiff.IFD
Return true if this is the thumbnail IFD.
isTiffAvailable() - Static method in class edu.harvard.hul.ois.jhove.module.jpeg.JpegExif
Checks if the TIFF module is available.
isTrue() - Method in class edu.harvard.hul.ois.jhove.module.pdf.PdfSimpleObject
Return true if the value of the token is the keyword "true", and false otherwise.
isValid() - Method in class edu.harvard.hul.ois.jhove.module.pdf.CrossRefStream
Returns true if the PdfStream object meets the requirements of a cross-reference stream.
isValid() - Method in class edu.harvard.hul.ois.jhove.module.pdf.ObjectStream
Checks the validity of the stream dictionary, and extracts information necessary for subsequent reading.
isValid() - Method in class edu.harvard.hul.ois.jhove.module.pdf.StructureTree
Returns true if and only if no errors were detected.
isValid() - Method in class edu.harvard.hul.ois.jhove.module.xml.XmlModuleHandler
Returns the validity state.
isX1aCompliant() - Method in class edu.harvard.hul.ois.jhove.module.pdf.X1Profile
Returns the result of X-1a compliance testing which was performed in the course of satisfiesThisProfile.
isXHTMLDTD(String) - Static method in class edu.harvard.hul.ois.jhove.module.html.DTDMapper
Returns TRUE if the parameter is the public ID of a known XHTML DTD.
isXmlAvailable() - Static method in class edu.harvard.hul.ois.jhove.module.HtmlModule
 
iterator() - Method in class edu.harvard.hul.ois.jhove.module.pdf.PdfDictionary
Returns an iterator which will successively return all the values in the dictionary.
ITU - Static variable in class edu.harvard.hul.ois.jhove.IdentifierType
Identifier type for International Telecommunication Union.

J

JEITA - Static variable in class edu.harvard.hul.ois.jhove.IdentifierType
Identifier type for Japan Electronics and Information Technology Industries Association.
jfifProfileName - Variable in class edu.harvard.hul.ois.jhove.module.JpegModule
PRIVATE INSTANCE FIELDS.
JHAttribute - Class in edu.harvard.hul.ois.jhove.module.html
A description of an attribute within a JHOpenTag.
JHAttribute(String, String, String, int, int) - Constructor for class edu.harvard.hul.ois.jhove.module.html.JHAttribute
Constructor.
JHCloseTag - Class in edu.harvard.hul.ois.jhove.module.html
Representation of a parsed HTML close tag.
JHCloseTag(List, String, int, int) - Constructor for class edu.harvard.hul.ois.jhove.module.html.JHCloseTag
Constructor.
JHComment - Class in edu.harvard.hul.ois.jhove.module.html
Representation of a parsed HTML comment.
JHComment(List, String) - Constructor for class edu.harvard.hul.ois.jhove.module.html.JHComment
Constructor.
JHDoctype - Class in edu.harvard.hul.ois.jhove.module.html
Representation of a parsed HTML DOCTYPE.
JHDoctype(List, List) - Constructor for class edu.harvard.hul.ois.jhove.module.html.JHDoctype
Constructor.
JHElement - Class in edu.harvard.hul.ois.jhove.module.html
Abstract superclass for the representation of portions of an HTML file.
JHElement(List) - Constructor for class edu.harvard.hul.ois.jhove.module.html.JHElement
Constructor.
JHErrorElement - Class in edu.harvard.hul.ois.jhove.module.html
A JHElement which signifies a syntactic error.
JHErrorElement(List, String, String, boolean) - Constructor for class edu.harvard.hul.ois.jhove.module.html.JHErrorElement
Constructor.
JHOpenTag - Class in edu.harvard.hul.ois.jhove.module.html
Representation of a parsed HTML open tag, including its attributes.
JHOpenTag(List, String, List, int, int) - Constructor for class edu.harvard.hul.ois.jhove.module.html.JHOpenTag
Constructor.
JHOpenTag(List, String, List, int, int, String) - Constructor for class edu.harvard.hul.ois.jhove.module.html.JHOpenTag
Constructor with error message.
JHOpenTag(String) - Constructor for class edu.harvard.hul.ois.jhove.module.html.JHOpenTag
Constructor for a stub attribute.
JhoveBase - Class in edu.harvard.hul.ois.jhove
The JHOVE engine, providing all base services necessary to build an application.
JhoveBase() - Constructor for class edu.harvard.hul.ois.jhove.JhoveBase
Instantiate a JhoveBase object.
JhoveException - Exception in edu.harvard.hul.ois.jhove
 
JhoveException() - Constructor for exception edu.harvard.hul.ois.jhove.JhoveException
 
JhoveException(String) - Constructor for exception edu.harvard.hul.ois.jhove.JhoveException
 
JhoveWindow - Class in edu.harvard.hul.ois.jhove.viewer
Main window of JHoveViewer application.
JhoveWindow(App, JhoveBase) - Constructor for class edu.harvard.hul.ois.jhove.viewer.JhoveWindow
 
JhoveWindow.InvisibleFilenameFilter - Class in edu.harvard.hul.ois.jhove.viewer
Class to filter out filenames that start with a period.
JhoveWindow.InvisibleFilenameFilter() - Constructor for class edu.harvard.hul.ois.jhove.viewer.JhoveWindow.InvisibleFilenameFilter
 
JHPCData - Class in edu.harvard.hul.ois.jhove.module.html
Representation of parsed HTML PCDATA.
JHPCData(List, String, int, int) - Constructor for class edu.harvard.hul.ois.jhove.module.html.JHPCData
Constructor.
JHXmlDecl - Class in edu.harvard.hul.ois.jhove.module.html
Representation of an XML declaration.
JHXmlDecl(List) - Constructor for class edu.harvard.hul.ois.jhove.module.html.JHXmlDecl
Constructor.
jj_nt - Variable in class edu.harvard.hul.ois.jhove.module.html.ParseHtml
 
jjFillToken() - Method in class edu.harvard.hul.ois.jhove.module.html.ParseHtmlTokenManager
 
jjnewLexState - Static variable in class edu.harvard.hul.ois.jhove.module.html.ParseHtmlTokenManager
 
jjstrLiteralImages - Static variable in class edu.harvard.hul.ois.jhove.module.html.ParseHtmlTokenManager
 
JP2Box - Class in edu.harvard.hul.ois.jhove.module.jpeg2000
Superclass for JPEG 2000 boxes.
JP2Box(RandomAccessFile) - Constructor for class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
Constructor.
JP2Box(RandomAccessFile, BoxHolder) - Constructor for class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
Constructor for a box which is found within a superbox.
jp2Compliant - Variable in class edu.harvard.hul.ois.jhove.module.Jpeg2000Module
 
jp2HdrSeen - Variable in class edu.harvard.hul.ois.jhove.module.Jpeg2000Module
 
JP2HeaderBox - Class in edu.harvard.hul.ois.jhove.module.jpeg2000
JP2 Header Box.
JP2HeaderBox(RandomAccessFile, BoxHolder) - Constructor for class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2HeaderBox
Constructor with superbox.
JP2Strings - Class in edu.harvard.hul.ois.jhove.module.jpeg2000
String constants for JPEG 2000 module.
Jpeg2000Module - Class in edu.harvard.hul.ois.jhove.module
Module for identification and validation of JPEG 2000 files.
Jpeg2000Module() - Constructor for class edu.harvard.hul.ois.jhove.module.Jpeg2000Module
Instantiate a JpegModule object.
JPEGACTABLES - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Standard TIFF 6.0 tags.
JPEGDCTABLES - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Standard TIFF 6.0 tags.
JpegExif - Class in edu.harvard.hul.ois.jhove.module.jpeg
Reader of Exif data embedded in a JPEG App1 block.
JpegExif() - Constructor for class edu.harvard.hul.ois.jhove.module.jpeg.JpegExif
 
JPEGINTERCHANGEFORMAT - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Standard TIFF 6.0 tags.
JPEGINTERCHANGEFORMATLENGTH - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Standard TIFF 6.0 tags.
JPEGLOSSLESSPREDICTORS - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Standard TIFF 6.0 tags.
jpeglProfileName - Variable in class edu.harvard.hul.ois.jhove.module.JpegModule
 
JpegModule - Class in edu.harvard.hul.ois.jhove.module
Module for identification and validation of JPEG files.
JpegModule() - Constructor for class edu.harvard.hul.ois.jhove.module.JpegModule
Instantiate a JpegModule object.
JPEGPOINTTRANSFORMS - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Standard TIFF 6.0 tags.
JPEGPROC - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Standard TIFF 6.0 tags.
JPEGQTABLES - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Standard TIFF 6.0 tags.
JPEGRESTARTINTERVAL - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Standard TIFF 6.0 tags.
JpegStrings - Class in edu.harvard.hul.ois.jhove.module.jpeg
A class for holding arrays of informative strings that will go into properties of a JPEG object.
jpxCompliant - Variable in class edu.harvard.hul.ois.jhove.module.Jpeg2000Module
 

K

Keyword - Class in edu.harvard.hul.ois.jhove.module.pdf
Class for Tokens which represent PDF keywords.
Keyword() - Constructor for class edu.harvard.hul.ois.jhove.module.pdf.Keyword
Creates an instance of a Keyword
KEYWORD - Static variable in class edu.harvard.hul.ois.jhove.module.pdf.State
 
kind - Variable in class edu.harvard.hul.ois.jhove.module.html.Token
An integer that describes the kind of this token.

L

LabelBox - Class in edu.harvard.hul.ois.jhove.module.jpeg2000
Label box.
LabelBox(RandomAccessFile, BoxHolder) - Constructor for class edu.harvard.hul.ois.jhove.module.jpeg2000.LabelBox
Constructor with superbox.
LabelChunk - Class in edu.harvard.hul.ois.jhove.module.wave
Implementation of the WAVE Label Chunk.
LabelChunk(ModuleBase, ChunkHeader, DataInputStream) - Constructor for class edu.harvard.hul.ois.jhove.module.wave.LabelChunk
Constructor.
LabeledTextChunk - Class in edu.harvard.hul.ois.jhove.module.wave
The Labelled Text Chunk, which can occur only in an Associated Data List.
LabeledTextChunk(ModuleBase, ChunkHeader, DataInputStream) - Constructor for class edu.harvard.hul.ois.jhove.module.wave.LabeledTextChunk
Constructor.
LABRACKET - Static variable in interface edu.harvard.hul.ois.jhove.module.html.ParseHtmlConstants
 
LC - Static variable in class edu.harvard.hul.ois.jhove.IdentifierType
Identifier type for Library of Congress classification.
LCCN - Static variable in class edu.harvard.hul.ois.jhove.IdentifierType
Identifier type for Library of Congress catalogue number.
leading(int, int) - Static method in class edu.harvard.hul.ois.jhove.Dump
Return leading characters to pad out the byte offset to field width.
leading(long, int) - Static method in class edu.harvard.hul.ois.jhove.Dump
Return leading characters to pad out the byte offset to field width.
leading(int, int, char) - Static method in class edu.harvard.hul.ois.jhove.Dump
Return leading characters to pad out the byte offset to field width.
leading(long, int, char) - Static method in class edu.harvard.hul.ois.jhove.Dump
Return leading characters to pad out the byte offset to field width.
leading(String, int) - Static method in class edu.harvard.hul.ois.jhove.Dump
Return leading characters to pad out the string to field width.
leading(String, int, char) - Static method in class edu.harvard.hul.ois.jhove.Dump
Return leading characters to pad out the string to field width.
LESS_THAN - Static variable in class edu.harvard.hul.ois.jhove.module.pdf.State
 
LexicalError(boolean, int, int, int, String, char) - Static method in error edu.harvard.hul.ois.jhove.module.html.TokenMgrError
Returns a detailed message for the Error when it is thrown by the token manager to indicate a lexical error.
lexStateNames - Static variable in class edu.harvard.hul.ois.jhove.module.html.ParseHtmlTokenManager
 
LIGHTSOURCE_INDEX - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.ExifIFD
 
LIGHTSOURCE_L - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.ExifIFD
 
line - Variable in class edu.harvard.hul.ois.jhove.module.html.HtmlCharStream
 
line - Variable in class edu.harvard.hul.ois.jhove.module.html.SimpleCharStream
 
LINEAR_RAW - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffProfileDNG
 
LinearizedProfile - Class in edu.harvard.hul.ois.jhove.module.pdf
PDF profile checker for Linearized documents.
LinearizedProfile(PdfModule) - Constructor for class edu.harvard.hul.ois.jhove.module.pdf.LinearizedProfile
Creates a PdfProfile object for subsequent testing.
LINEARUNITS - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.GeoTiffStrings
 
LINEARUNITS_INDEX - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.GeoTiffStrings
 
LINEBREAK - Static variable in class edu.harvard.hul.ois.jhove.TextMDMetadata
Uses enumerated values of 'CR', 'LF' and 'CR/LF' for the idenntification of the linebreak.
LINEBREAK_CR - Static variable in class edu.harvard.hul.ois.jhove.TextMDMetadata
 
LINEBREAK_CRLF - Static variable in class edu.harvard.hul.ois.jhove.TextMDMetadata
 
LINEBREAK_LF - Static variable in class edu.harvard.hul.ois.jhove.TextMDMetadata
 
LinkChunk - Class in edu.harvard.hul.ois.jhove.module.wave
Implementation of the WAVE Link Chunk, as specified in Specification of the Broadcast Wave Format: A format for audio data files in broadcasting; Supplement 4: <link> Chunk (European Broadcasting Union)
LinkChunk(ModuleBase, ChunkHeader, DataInputStream) - Constructor for class edu.harvard.hul.ois.jhove.module.wave.LinkChunk
Constructor.
LinkChunkHandler - Class in edu.harvard.hul.ois.jhove.module.wave
This handler parses the data of a WAVE List chunk.
LinkChunkHandler() - Constructor for class edu.harvard.hul.ois.jhove.module.wave.LinkChunkHandler
 
linkChunkSeen - Variable in class edu.harvard.hul.ois.jhove.module.WaveModule
 
LIST - Static variable in class edu.harvard.hul.ois.jhove.PropertyArity
An Arity corresponding to java.util.List or any of its derived classes.
listContent - Static variable in class edu.harvard.hul.ois.jhove.module.html.Html4DocDesc
List consisting of the LI element.
ListInfoChunk - Class in edu.harvard.hul.ois.jhove.module.wave
Implementation of the WAVE LIST chunk.
ListInfoChunk(ModuleBase, ChunkHeader, DataInputStream, RepInfo) - Constructor for class edu.harvard.hul.ois.jhove.module.wave.ListInfoChunk
Constructor.
ListInfoTextChunk - Class in edu.harvard.hul.ois.jhove.module.wave
This implements any of the subchunks of the ListInfoChunk (a LIST chunk with a list type of INFO).
ListInfoTextChunk(ModuleBase, ChunkHeader, DataInputStream, List, ListInfoChunk) - Constructor for class edu.harvard.hul.ois.jhove.module.wave.ListInfoTextChunk
Constructor.
listMarkup - Static variable in class edu.harvard.hul.ois.jhove.module.html.Html4DocDesc
Names of list elements.
Literal - Class in edu.harvard.hul.ois.jhove.module.pdf
Class for Tokens which represent PDF strings.
Literal() - Constructor for class edu.harvard.hul.ois.jhove.module.pdf.Literal
Creates an instance of a string literal
LITERAL - Static variable in class edu.harvard.hul.ois.jhove.module.pdf.State
 
LITERAL_FE - Static variable in class edu.harvard.hul.ois.jhove.module.pdf.State
 
LITERAL_PDF - Static variable in class edu.harvard.hul.ois.jhove.module.pdf.State
 
LITERAL_UTF16_1 - Static variable in class edu.harvard.hul.ois.jhove.module.pdf.State
 
LITERAL_UTF16_2 - Static variable in class edu.harvard.hul.ois.jhove.module.pdf.State
 
LITTLE_ENDIAN - Static variable in class edu.harvard.hul.ois.jhove.AESAudioMetadata
Little-endian constant.
loadContent(PdfModule) - Method in class edu.harvard.hul.ois.jhove.module.pdf.PageObject
Find the content stream(s) for this page.
LOCAL_COLOR_TABLE_FLAG - Static variable in class edu.harvard.hul.ois.jhove.module.gif.GifStrings
Local color table present in image or not
locateProperty(RepInfo) - Method in class edu.harvard.hul.ois.jhove.PropertyPath
Walk down the path and return the specified Property.
locateProperty(RepInfo, boolean) - Method in class edu.harvard.hul.ois.jhove.PropertyPath
Walk down the path and return the specified Property.
LONG - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.IFD
TIFF LONG (unsigned 32-bit) type.
LONG - Static variable in class edu.harvard.hul.ois.jhove.PropertyType
Property type for a Long object, or a long if the Arity is Array.
longArray(long[]) - Static method in class edu.harvard.hul.ois.jhove.HandlerBase
Return String representation of an array of long with space separator.
lookingAhead - Variable in class edu.harvard.hul.ois.jhove.module.html.ParseHtml
 
lookupTag(int, int, long, long) - Method in class edu.harvard.hul.ois.jhove.module.tiff.ExifIFD
Lookup an IFD tag.
lookupTag(int, int, long, long) - Method in class edu.harvard.hul.ois.jhove.module.tiff.GlobalParametersIFD
Lookup an IFD tag.
lookupTag(int, int, long, long) - Method in class edu.harvard.hul.ois.jhove.module.tiff.GPSInfoIFD
Lookup an IFD tag.
lookupTag(int, int, long, long) - Method in class edu.harvard.hul.ois.jhove.module.tiff.IFD
Lookup IFD tag.
lookupTag(int, int, long, long) - Method in class edu.harvard.hul.ois.jhove.module.tiff.InteroperabilityIFD
Lookup an IFD tag.
lookupTag(int, int, long, long) - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Looks up an IFD tag.
LOOP_TYPE - Static variable in class edu.harvard.hul.ois.jhove.module.aiff.AiffStrings
Strings for looping types in the Instrument Chunk

M

MacStuff - Class in edu.harvard.hul.ois.jhove
Code specific to Macintosh Java.
MAGIC - Static variable in class edu.harvard.hul.ois.jhove.SignatureType
Signature type for a "magic number" stored in the file.
mainBounds() - Static method in class edu.harvard.hul.ois.jhove.viewer.MainScreen
Returns the bounds of the main monitor device.
MainOrTile - Class in edu.harvard.hul.ois.jhove.module.jpeg2000
Abstract superclass for Codestream and Tile classes.
MainOrTile() - Constructor for class edu.harvard.hul.ois.jhove.module.jpeg2000.MainOrTile
 
MainScreen - Class in edu.harvard.hul.ois.jhove.viewer
Static methods for positioning windows on the main screen.
MAKE - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Standard TIFF 6.0 tags.
makeAssocProperty() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
Make a Property from the association list.
makeChooserOpaque(JFileChooser) - Static method in class edu.harvard.hul.ois.jhove.viewer.JhoveWindow
Makes a JFileChooser dialog treat packages and applications as opaque entities.
makeFilterList() - Method in class edu.harvard.hul.ois.jhove.module.pdf.PdfStream
 
makeProperty(boolean) - Method in class edu.harvard.hul.ois.jhove.module.jpeg.ArithConditioning
Returns a Property defining the conditioning data
makeProperty(boolean) - Method in class edu.harvard.hul.ois.jhove.module.jpeg.QuantizationTable
Returns a Property defining the quantization table
makeProperty() - Method in class edu.harvard.hul.ois.jhove.module.jpeg.SRS
Returns a Property defining the SRS
makeProperty() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.Codestream
Builds a Property out of everything we've collected.
makeProperty() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.Tile
Returns a Property describing the tile.
makeProperty() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.TilePart
Returns a Property based on the TilePart.
makeProperty() - Method in class edu.harvard.hul.ois.jhove.XMPSource
Generates a property from the underlying data.
makeRectProperty(PdfArray, String) - Method in class edu.harvard.hul.ois.jhove.module.PdfModule
 
MAKERNOTESAFETY_L - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
 
makeWriter(String, String) - Static method in class edu.harvard.hul.ois.jhove.JhoveBase
Creates an output PrintWriter.
MANDATORY - Static variable in class edu.harvard.hul.ois.jhove.SignatureUseType
Use type for a required signature.
MANDATORY_IF_APPLICABLE - Static variable in class edu.harvard.hul.ois.jhove.SignatureUseType
Use type for a conditionally required signature.
MAP - Static variable in class edu.harvard.hul.ois.jhove.PropertyArity
An Arity corresponding to java.util.Map or any of its derived classes.
markBlock(int) - Method in class edu.harvard.hul.ois.jhove.Utf8BlockMarker
 
Marker - Class in edu.harvard.hul.ois.jhove.module.jpeg2000
This is a subclass of MarkerSegment for Markers.
Marker() - Constructor for class edu.harvard.hul.ois.jhove.module.jpeg2000.Marker
 
MarkerChunk - Class in edu.harvard.hul.ois.jhove.module.aiff
The AIFF Marker chunk.
MarkerChunk(AiffModule, ChunkHeader, DataInputStream) - Constructor for class edu.harvard.hul.ois.jhove.module.aiff.MarkerChunk
Constructor.
markerChunkSeen - Variable in class edu.harvard.hul.ois.jhove.module.AiffModule
 
MarkerSegment - Class in edu.harvard.hul.ois.jhove.module.jpeg2000
Abstract superclass for marker segments.
MarkerSegment() - Constructor for class edu.harvard.hul.ois.jhove.module.jpeg2000.MarkerSegment
Constructor.
markerSegmentMaker(int) - Static method in class edu.harvard.hul.ois.jhove.module.jpeg2000.MarkerSegment
Static factory method for generating an object of the appropriate subclass of MarkerSegment, based on the marker code.
markFirstSampleOffset(long) - Method in class edu.harvard.hul.ois.jhove.module.AiffModule
Marks the first sample offset as the current byte position, if it hasn't already been marked.
markFirstSampleOffset() - Method in class edu.harvard.hul.ois.jhove.module.WaveModule
Marks the first sample offset as the current byte position, if it hasn't already been marked.
matches(String) - Method in class edu.harvard.hul.ois.jhove.module.html.HtmlTagDesc
 
maxFonts - Variable in class edu.harvard.hul.ois.jhove.module.PdfModule
maximum number of fonts to report full information on.
MAXIMUM_VERBOSITY - Static variable in interface edu.harvard.hul.ois.jhove.Module
 
maxNextCharInd - Variable in class edu.harvard.hul.ois.jhove.module.html.HtmlCharStream
 
maxNextCharInd - Variable in class edu.harvard.hul.ois.jhove.module.html.SimpleCharStream
 
MAXSAMPLEVALUE - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Standard TIFF 6.0 tags.
mayBePDFACompliant() - Method in class edu.harvard.hul.ois.jhove.module.PdfModule
Returns true if the module hasn't detected any violations of PDF/A compliance.
MD5 - Static variable in class edu.harvard.hul.ois.jhove.ChecksumType
128-bit Message Digest 5.
Message - Class in edu.harvard.hul.ois.jhove
This class encapsulates a String to be displayed.
Message(String) - Constructor for class edu.harvard.hul.ois.jhove.Message
Create a Message.
Message(String, String) - Constructor for class edu.harvard.hul.ois.jhove.Message
Create a Message.
Message(String, long) - Constructor for class edu.harvard.hul.ois.jhove.Message
Create a Message.
Message(String, String, long) - Constructor for class edu.harvard.hul.ois.jhove.Message
Create a Message.
METERING_MODE - Static variable in class edu.harvard.hul.ois.jhove.NisoImageMetadata
7.7.3.6 metering mode value labels.
METERINGMODE_INDEX - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.ExifIFD
 
METERINGMODE_L - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.ExifIFD
 
methodStr - Static variable in class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Strings
Strings for method values in the color specification box.
MidiChunk - Class in edu.harvard.hul.ois.jhove.module.aiff
Implementation of the AIFF MIDI Chunk.
MidiChunk(AiffModule, ChunkHeader, DataInputStream) - Constructor for class edu.harvard.hul.ois.jhove.module.aiff.MidiChunk
Constructor.
MIME_1314 - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
Values for mimeClass.
MIME_FX - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
Values for mimeClass.
MIME_GENERIC - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
Values for mimeClass.
MINIMUM_VERBOSITY - Static variable in interface edu.harvard.hul.ois.jhove.Module
 
minorFmt - Variable in class edu.harvard.hul.ois.jhove.module.JpegModule
 
MINSAMPLEVALUE - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Standard TIFF 6.0 tags.
missingRequiredAttributes(List) - Method in class edu.harvard.hul.ois.jhove.module.html.HtmlTagDesc
Accepts a list of attribute names, and returns a List of required attribute names which are not present in the parameter list.
MODEL - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Standard TIFF 6.0 tags.
MODELTYPE - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.GeoTiffStrings
 
MODELTYPE_INDEX - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.GeoTiffStrings
 
MODENUMBER - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.GlobalParametersIFD
Tiff/FX-specific tags.
Module - Interface in edu.harvard.hul.ois.jhove
Public interface for Jhove format-specific plug-in modules.
ModuleBase - Class in edu.harvard.hul.ois.jhove
This class is an abstract implementation of the Module interface.
ModuleBase(String, String, int[], String[], String, String[], String, String, String, String, String, boolean) - Constructor for class edu.harvard.hul.ois.jhove.ModuleBase
Constructors of all subclasses of ModuleBase should call this as a super constructor.
ModuleInfoWindow - Class in edu.harvard.hul.ois.jhove.viewer
This window is for presenting information about the selected module.
ModuleInfoWindow(App, JhoveBase, Module) - Constructor for class edu.harvard.hul.ois.jhove.viewer.ModuleInfoWindow
Constructor.
MpegChunk - Class in edu.harvard.hul.ois.jhove.module.wave
Implementation of the WAVE MPEG Audio Extension Chunk.
MpegChunk(ModuleBase, ChunkHeader, DataInputStream) - Constructor for class edu.harvard.hul.ois.jhove.module.wave.MpegChunk
Constructor.
mpegChunkSeen - Variable in class edu.harvard.hul.ois.jhove.module.WaveModule
 
mtypStr - Static variable in class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Strings
Strings for the MTYP field of the Component Mapping box.

N

NAKEDDTITEM - Static variable in interface edu.harvard.hul.ois.jhove.module.html.ParseHtmlConstants
 
NAKEDVALUE - Static variable in interface edu.harvard.hul.ois.jhove.module.html.ParseHtmlConstants
 
Name() - Method in class edu.harvard.hul.ois.jhove.module.html.ParseHtml
 
NAME - Static variable in interface edu.harvard.hul.ois.jhove.module.html.ParseHtmlConstants
 
Name - Class in edu.harvard.hul.ois.jhove.module.pdf
Class for Tokens which represent PDF names.
Name() - Constructor for class edu.harvard.hul.ois.jhove.module.pdf.Name
Creates an instance of a Name
NAME - Static variable in class edu.harvard.hul.ois.jhove.module.pdf.State
 
NameChunk - Class in edu.harvard.hul.ois.jhove.module.aiff
Implementation of the AIFF Name Chunk.
NameChunk(AiffModule, ChunkHeader, DataInputStream) - Constructor for class edu.harvard.hul.ois.jhove.module.aiff.NameChunk
Constructor.
nameChunkSeen - Variable in class edu.harvard.hul.ois.jhove.module.AiffModule
 
namedAttDesc(String) - Method in class edu.harvard.hul.ois.jhove.module.html.HtmlTagDesc
Returns the attribute with a given name, or null if no such attribute is defined for the element
nameInCollection(String, Collection) - Static method in class edu.harvard.hul.ois.jhove.module.XmlModule
 
nameMatches(String) - Method in class edu.harvard.hul.ois.jhove.module.html.HtmlAttributeDesc
Returns true if this tag's name matches the parameter.
NAMESPACE - Static variable in class edu.harvard.hul.ois.jhove.TextMDMetadata
textMD namespace and version
nameToNiso(String, String[], int[]) - Method in class edu.harvard.hul.ois.jhove.module.PdfModule
 
NameTreeNode - Class in edu.harvard.hul.ois.jhove.module.pdf
Class for nodes of a PDF name tree, e.g., ExternalFiles.
NameTreeNode(PdfModule, NameTreeNode, PdfDictionary) - Constructor for class edu.harvard.hul.ois.jhove.module.pdf.NameTreeNode
Constructor.
nCodestreamHeaders - Variable in class edu.harvard.hul.ois.jhove.module.Jpeg2000Module
 
nCodestreams - Variable in class edu.harvard.hul.ois.jhove.module.Jpeg2000Module
 
nCompBytes() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.MarkerSegment
Determines size of fields indexed by number of components.
NEWSUBFILETYPE - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Standard TIFF 6.0 tags.
newTempFile() - Method in class edu.harvard.hul.ois.jhove.JhoveBase
Creates a temporary file with a unique name.
newToken(int) - Static method in class edu.harvard.hul.ois.jhove.module.html.Token
Returns a new Token object, by default.
next - Variable in class edu.harvard.hul.ois.jhove.module.html.Token
A reference to the next regular (non-special) token from the input stream.
next() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.BinaryFilterBox
 
next() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
 
nextDocNode() - Method in class edu.harvard.hul.ois.jhove.module.pdf.DocNode
Get the next DocNode which is under this node.
nextDocNode() - Method in class edu.harvard.hul.ois.jhove.module.pdf.PageObject
Called to walk through all page tree nodes and page objects.
nextDocNode() - Method in class edu.harvard.hul.ois.jhove.module.pdf.PageTreeNode
Get the next DocNode which is under this node.
nextLeafObject() - Method in class edu.harvard.hul.ois.jhove.module.pdf.PageLabelNode
Get the next leaf object which is under this node.
nextPageObject() - Method in class edu.harvard.hul.ois.jhove.module.pdf.DocNode
Get the next PageObject which is under this node.
nextPageObject() - Method in class edu.harvard.hul.ois.jhove.module.pdf.PageObject
Returns this object the first time it is called after startWalk is called, then null when called again.
nextPageObject() - Method in class edu.harvard.hul.ois.jhove.module.pdf.PageTreeNode
Get the next PageObject which is under this node.
NILL - Static variable in class edu.harvard.hul.ois.jhove.AESAudioMetadata
Constant for an undefined floating-point value.
NILL - Static variable in class edu.harvard.hul.ois.jhove.NisoImageMetadata
 
NILL - Static variable in class edu.harvard.hul.ois.jhove.TextMDMetadata
To represent the unknown
NISO - Static variable in class edu.harvard.hul.ois.jhove.IdentifierType
Identifier type for NISO standard number.
NisoImageMetadata - Class in edu.harvard.hul.ois.jhove
Encapsulation of the NISO Z39.87-2002 / AIIM 20-2002 Data Dictionary -- Technical Metadata for Digital Still Images
NisoImageMetadata() - Constructor for class edu.harvard.hul.ois.jhove.NisoImageMetadata
Instantiate a NisoImageMetadata object.
NISOIMAGEMETADATA - Static variable in class edu.harvard.hul.ois.jhove.PropertyType
Property type for a NisoImageMetadata.
NoConfAlert - Class in edu.harvard.hul.ois.jhove.viewer
This class implements an alert which is posted when no configuration file can be found.
NoConfAlert(JFrame) - Constructor for class edu.harvard.hul.ois.jhove.viewer.NoConfAlert
 
noJP2Hdr - Static variable in class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
 
NONPROFIT - Static variable in class edu.harvard.hul.ois.jhove.AgentType
Agent type for a non-profit organization.
notationDecl(String, String, String) - Method in class edu.harvard.hul.ois.jhove.module.xml.XmlModuleHandler
Puts all notations into the notation list.
NoteChunk - Class in edu.harvard.hul.ois.jhove.module.wave
Implementation of the WAVE Note Chunk.
NoteChunk(ModuleBase, ChunkHeader, DataInputStream) - Constructor for class edu.harvard.hul.ois.jhove.module.wave.NoteChunk
Constructor.
NULL - Static variable in class edu.harvard.hul.ois.jhove.AESAudioMetadata
Constant for an undefined integer value.
NULL - Static variable in class edu.harvard.hul.ois.jhove.Message
Value indicating a null offset.
NULL - Static variable in class edu.harvard.hul.ois.jhove.module.jpeg2000.MainOrTile
 
NULL - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.IFD
Undefined value for integer tags.
NULL - Static variable in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Undefined value.
NumberListBox - Class in edu.harvard.hul.ois.jhove.module.jpeg2000
Number list box.
NumberListBox(RandomAccessFile, BoxHolder) - Constructor for class edu.harvard.hul.ois.jhove.module.jpeg2000.NumberListBox
Constructor with superbox.
numberListTypeStr - Static variable in class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Strings
Strings for the number type value in the Number List box.
NUMBEROFINKS - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Standard TIFF 6.0 tags.
Numeric - Class in edu.harvard.hul.ois.jhove.module.pdf
Class for Tokens which represent PDF numbers.
Numeric() - Constructor for class edu.harvard.hul.ois.jhove.module.pdf.Numeric
Creates an instance of a Numeric
NUMERIC - Static variable in class edu.harvard.hul.ois.jhove.module.pdf.State
 
NumericField - Class in edu.harvard.hul.ois.jhove.viewer
A JTextField which permits only decimal digits
NumericField(int) - Constructor for class edu.harvard.hul.ois.jhove.viewer.NumericField
 
numSamples - Variable in class edu.harvard.hul.ois.jhove.module.WaveModule
 

O

OBJECT - Static variable in class edu.harvard.hul.ois.jhove.PropertyType
Property type for an Object.
ObjectIdentifier - Class in edu.harvard.hul.ois.jhove
Module for identification of a document.
ObjectIdentifier(List) - Constructor for class edu.harvard.hul.ois.jhove.ObjectIdentifier
CLASS CONSTRUCTOR.
ObjectStream - Class in edu.harvard.hul.ois.jhove.module.pdf
This class implements the Object Stream, a new way of storing objects starting in PDF 1.4.
ObjectStream(PdfStream, RandomAccessFile) - Constructor for class edu.harvard.hul.ois.jhove.module.pdf.ObjectStream
Constructor.
okToProcess(String) - Method in class edu.harvard.hul.ois.jhove.handler.AuditHandler
Determine whether or not to process the file.
okToProcess(String) - Method in class edu.harvard.hul.ois.jhove.HandlerBase
Callback to give the handler the opportunity to decide whether or not to process a file.
okToProcess(String) - Method in interface edu.harvard.hul.ois.jhove.OutputHandler
Callback to give the handler the opportunity to decide whether or not to process a file.
okToProcessImpl(String, AuditState) - Method in class edu.harvard.hul.ois.jhove.handler.AuditHandler
Local extension to standard callback that determines whether or not to process the file.
oneFontPropList(PdfDictionary, int) - Method in class edu.harvard.hul.ois.jhove.module.PdfModule
 
OpacityBox - Class in edu.harvard.hul.ois.jhove.module.jpeg2000
Opacity Box (JPX).
OpacityBox(RandomAccessFile, BoxHolder) - Constructor for class edu.harvard.hul.ois.jhove.module.jpeg2000.OpacityBox
Constructor with superbox.
opacityTypeStr - Static variable in class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Strings
Strings for the opacity type in the Opacity Box.
OPENCOMMENT - Static variable in interface edu.harvard.hul.ois.jhove.module.html.ParseHtmlConstants
 
OpenTag() - Method in class edu.harvard.hul.ois.jhove.module.html.ParseHtml
 
OPTIONAL - Static variable in class edu.harvard.hul.ois.jhove.SignatureUseType
Use type for an optional signature.
ORIENTATION - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Standard TIFF 6.0 tags.
ORIENTATION - Static variable in class edu.harvard.hul.ois.jhove.NisoImageMetadata
6.2.4 orientation value labels.
OTHER - Static variable in class edu.harvard.hul.ois.jhove.AESAudioMetadata
Values for primary identifier type
OTHER - Static variable in class edu.harvard.hul.ois.jhove.AgentType
Agent type that doesn't fit the other categories.
OTHER - Static variable in class edu.harvard.hul.ois.jhove.DocumentType
Document type that doesn't fit the other categories.
OTHER - Static variable in class edu.harvard.hul.ois.jhove.IdentifierType
Identifier type for whatever doesn't fit other categories.
OTHER - Static variable in class edu.harvard.hul.ois.jhove.module.html.HtmlAttributeDesc
Permitted values for _kind
outlinesRecursiveString - Static variable in class edu.harvard.hul.ois.jhove.module.PdfModule
 
OutputHandler - Interface in edu.harvard.hul.ois.jhove
Public interface for Jhove output handlers.
outputIntentsOK(PdfArray) - Method in class edu.harvard.hul.ois.jhove.module.pdf.XProfileBase
Checks if the OutputIntents of this document conform to profile requirements.

P

PageLabelNode - Class in edu.harvard.hul.ois.jhove.module.pdf
Class for nodes of a PDF number tree.
PageLabelNode(PdfModule, PageLabelNode, PdfDictionary) - Constructor for class edu.harvard.hul.ois.jhove.module.pdf.PageLabelNode
Superclass constructor.
PAGENAME - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Standard TIFF 6.0 tags.
PAGENUMBER - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Standard TIFF 6.0 tags.
PageObject - Class in edu.harvard.hul.ois.jhove.module.pdf
Class encapsulating a PDF page object node.
PageObject(PdfModule, PageTreeNode, PdfDictionary) - Constructor for class edu.harvard.hul.ois.jhove.module.pdf.PageObject
Superclass constructor.
PageTreeNode - Class in edu.harvard.hul.ois.jhove.module.pdf
Class encapsulating a PDF page tree node.
PageTreeNode(PdfModule, PageTreeNode, PdfDictionary) - Constructor for class edu.harvard.hul.ois.jhove.module.pdf.PageTreeNode
Superclass constructor.
PaletteBox - Class in edu.harvard.hul.ois.jhove.module.jpeg2000
Palette box.
PaletteBox(RandomAccessFile, BoxHolder) - Constructor for class edu.harvard.hul.ois.jhove.module.jpeg2000.PaletteBox
Constructor with superbox.
param(String) - Method in class edu.harvard.hul.ois.jhove.HandlerBase
Per-action initialization.
param(String) - Method in interface edu.harvard.hul.ois.jhove.Module
Per-action initialization.
param(String) - Method in class edu.harvard.hul.ois.jhove.module.PdfModule
Per-action initialization.
param(String) - Method in class edu.harvard.hul.ois.jhove.module.XmlModule
Per-action initialization.
param(String) - Method in class edu.harvard.hul.ois.jhove.ModuleBase
Per-action initialization.
param(String) - Method in interface edu.harvard.hul.ois.jhove.OutputHandler
Per-action initialization.
parse(InputStream, RepInfo, int) - Method in class edu.harvard.hul.ois.jhove.module.AiffModule
Parses the content of a purported AIFF digital object and stores the results in RepInfo.
parse(InputStream, RepInfo, int) - Method in class edu.harvard.hul.ois.jhove.module.AsciiModule
Parse the content of a stream digital object and store the results in RepInfo.
parse(InputStream, RepInfo, int) - Method in class edu.harvard.hul.ois.jhove.module.BytestreamModule
Parse the content of a stream digital object and store the results in RepInfo.
parse(InputStream, RepInfo, int) - Method in class edu.harvard.hul.ois.jhove.module.GifModule
Parse the content of a purported GIF stream digital object and store the results in RepInfo.
parse(InputStream, RepInfo, int) - Method in class edu.harvard.hul.ois.jhove.module.HtmlModule
Parse the content of a purported HTML stream digital object and store the results in RepInfo.
parse(RandomAccessFile, RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.Jpeg2000Module
Parse the content of a stream digital object and store the results in RepInfo.
parse(InputStream, RepInfo, int) - Method in class edu.harvard.hul.ois.jhove.module.JpegModule
Parse the content of a purported JPEG stream digital object and store the results in RepInfo.
parse(InputStream, RepInfo, int) - Method in interface edu.harvard.hul.ois.jhove.Module
Parse the content of a stream digital object and store the results in RepInfo.
parse(RandomAccessFile, RepInfo) - Method in interface edu.harvard.hul.ois.jhove.Module
Parse the content of a random access digital object and store the results in RepInfo.
parse(RandomAccessFile, RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.PdfModule
Parse a file and stores descriptive information.
parse() - Method in class edu.harvard.hul.ois.jhove.module.tiff.IFD
Parse the IFD.
parse(boolean, boolean) - Method in class edu.harvard.hul.ois.jhove.module.tiff.IFD
Parse the IFD.
parse(boolean) - Method in class edu.harvard.hul.ois.jhove.module.tiff.IFD
Parse the IFD.
parse(RandomAccessFile, RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.TiffModule
Parse the TIFF for well-formedness and validity, accumulating representation information.
parse(InputStream, RepInfo, int) - Method in class edu.harvard.hul.ois.jhove.module.Utf8Module
Parse the content of a stream digital object and store the results in RepInfo.
parse(InputStream, RepInfo, int) - Method in class edu.harvard.hul.ois.jhove.module.WaveModule
Parses the content of a purported WAVE digital object and stores the results in RepInfo.
parse(InputStream, RepInfo, int) - Method in class edu.harvard.hul.ois.jhove.module.XmlModule
Parse the content of a purported XML digital object and store the results in RepInfo.
parse(InputStream, RepInfo, int) - Method in class edu.harvard.hul.ois.jhove.ModuleBase
Parse the content of a stream digital object and store the results in RepInfo.
parse(RandomAccessFile, RepInfo) - Method in class edu.harvard.hul.ois.jhove.ModuleBase
Parse the content of a random access digital object and store the results in RepInfo.
parseDate() - Method in class edu.harvard.hul.ois.jhove.module.pdf.Literal
Parse the string value to a date.
ParseException - Exception in edu.harvard.hul.ois.jhove.module.html
This exception is thrown when parse errors are encountered.
ParseException(Token, int[][], String[]) - Constructor for exception edu.harvard.hul.ois.jhove.module.html.ParseException
This constructor is used by the method "generateParseException" in the generated parser.
ParseException() - Constructor for exception edu.harvard.hul.ois.jhove.module.html.ParseException
The following constructors are for use by you for whatever purpose you can think of.
ParseException(String) - Constructor for exception edu.harvard.hul.ois.jhove.module.html.ParseException
 
parseHeader(RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.PdfModule
 
ParseHtml - Class in edu.harvard.hul.ois.jhove.module.html
 
ParseHtml(CharStream) - Constructor for class edu.harvard.hul.ois.jhove.module.html.ParseHtml
 
ParseHtml(ParseHtmlTokenManager) - Constructor for class edu.harvard.hul.ois.jhove.module.html.ParseHtml
 
ParseHtmlConstants - Interface in edu.harvard.hul.ois.jhove.module.html
 
ParseHtmlTokenManager - Class in edu.harvard.hul.ois.jhove.module.html
 
ParseHtmlTokenManager(CharStream) - Constructor for class edu.harvard.hul.ois.jhove.module.html.ParseHtmlTokenManager
 
ParseHtmlTokenManager(CharStream, int) - Constructor for class edu.harvard.hul.ois.jhove.module.html.ParseHtmlTokenManager
 
parseIFDChain(long, RepInfo, int, List, boolean) - Method in class edu.harvard.hul.ois.jhove.module.TiffModule
 
parseIFDs(long, RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.TiffModule
Parse all IFDs in the file, accumulating representation information.
parseIFDs(long, RepInfo, boolean, int) - Method in class edu.harvard.hul.ois.jhove.module.TiffModule
Parse all IFDs in the file, accumulating representation information.
Parser - Class in edu.harvard.hul.ois.jhove.module.pdf
The Parser class implements some limited syntactic analysis for PDF.
Parser(Tokenizer) - Constructor for class edu.harvard.hul.ois.jhove.module.pdf.Parser
Constructor.
parseTrailer(RepInfo, boolean) - Method in class edu.harvard.hul.ois.jhove.module.PdfModule
 
PCDATA - Static variable in class edu.harvard.hul.ois.jhove.module.html.HtmlSpecialToken
The PCDATA token.
PCData() - Method in class edu.harvard.hul.ois.jhove.module.html.ParseHtml
 
PCDATA - Static variable in interface edu.harvard.hul.ois.jhove.module.html.ParseHtmlConstants
 
PCDATASTART - Static variable in interface edu.harvard.hul.ois.jhove.module.html.ParseHtmlConstants
 
PCSCITATIONGEOKEY - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
GeoTIFF key values.
PdfArray - Class in edu.harvard.hul.ois.jhove.module.pdf
A representation of a PDF array object.
PdfArray(int, int) - Constructor for class edu.harvard.hul.ois.jhove.module.pdf.PdfArray
Creates a PdfArray object.
PdfArray() - Constructor for class edu.harvard.hul.ois.jhove.module.pdf.PdfArray
Creates a PdfArray object with empty contents.
PdfDictionary - Class in edu.harvard.hul.ois.jhove.module.pdf
A representation of a PDF dictionary object.
PdfDictionary(int, int) - Constructor for class edu.harvard.hul.ois.jhove.module.pdf.PdfDictionary
Creates a PdfDictionary object.
PdfDictionary() - Constructor for class edu.harvard.hul.ois.jhove.module.pdf.PdfDictionary
Creates a PdfDictionary object.
PDFDOCENCODING - Static variable in class edu.harvard.hul.ois.jhove.module.pdf.Literal
Mapping between PDFDocEncoding and Unicode code points.
PDFDOCENCODING - Static variable in class edu.harvard.hul.ois.jhove.module.pdf.Tokenizer
Mapping between PDFDocEncoding and Unicode code points.
PdfException - Exception in edu.harvard.hul.ois.jhove.module.pdf
Abstract exception subclass used internally by the PDF module.
PdfException(String) - Constructor for exception edu.harvard.hul.ois.jhove.module.pdf.PdfException
Create a PdfException.
PdfException(String, long) - Constructor for exception edu.harvard.hul.ois.jhove.module.pdf.PdfException
Create a PdfException with specified offset.
PdfException(String, long, Token) - Constructor for exception edu.harvard.hul.ois.jhove.module.pdf.PdfException
Create a PdfException with specified offset and token.
PdfFlateInputStream - Class in edu.harvard.hul.ois.jhove.module.pdf
An enhancement of InflaterInputStream to support Predictor and Columns.
PdfFlateInputStream(InputStream) - Constructor for class edu.harvard.hul.ois.jhove.module.pdf.PdfFlateInputStream
Constructor with null DecodeParms dictionary
PdfFlateInputStream(InputStream, PdfDictionary) - Constructor for class edu.harvard.hul.ois.jhove.module.pdf.PdfFlateInputStream
Constructor with specified DecodeParms dictionary
PdfIndirectObj - Class in edu.harvard.hul.ois.jhove.module.pdf
A representation of a PDF indirect object reference.
PdfIndirectObj(int, int, Map) - Constructor for class edu.harvard.hul.ois.jhove.module.pdf.PdfIndirectObj
Creates a PdfIndirectObj object.
PdfInvalidException - Exception in edu.harvard.hul.ois.jhove.module.pdf
Exception subclass used internally by the PDF module.
PdfInvalidException(String) - Constructor for exception edu.harvard.hul.ois.jhove.module.pdf.PdfInvalidException
Creates a PdfInvalidException.
PdfInvalidException(String, long) - Constructor for exception edu.harvard.hul.ois.jhove.module.pdf.PdfInvalidException
Creates a PdfInvalidException with specified offset.
PdfInvalidException(String, long, Token) - Constructor for exception edu.harvard.hul.ois.jhove.module.pdf.PdfInvalidException
Creates a PdfInvalidException with specified offset and token.
PdfMalformedException - Exception in edu.harvard.hul.ois.jhove.module.pdf
Exception subclass used internally by the PDF module.
PdfMalformedException(String) - Constructor for exception edu.harvard.hul.ois.jhove.module.pdf.PdfMalformedException
Creates a PdfMalformedException.
PdfMalformedException(String, long) - Constructor for exception edu.harvard.hul.ois.jhove.module.pdf.PdfMalformedException
Creates a PdfMalformedException with specified offset.
PdfMalformedException(String, long, Token) - Constructor for exception edu.harvard.hul.ois.jhove.module.pdf.PdfMalformedException
Creates a PdfMalformedException with specified offset and token.
PdfModule - Class in edu.harvard.hul.ois.jhove.module
Module for identification and validation of PDF files.
PdfModule() - Constructor for class edu.harvard.hul.ois.jhove.module.PdfModule
Creates an instance of the module and initializes identifying information.
PdfObject - Class in edu.harvard.hul.ois.jhove.module.pdf
The abstract superclass for all representations of objects in PDF files.
PdfObject(int, int) - Constructor for class edu.harvard.hul.ois.jhove.module.pdf.PdfObject
Superclass constructor which should be called for all PdfObject instances that include an object and generation number.
PdfObject() - Constructor for class edu.harvard.hul.ois.jhove.module.pdf.PdfObject
Superclass constructor for which the object and generation number will be added separately or not at all.
PdfProfile - Class in edu.harvard.hul.ois.jhove.module.pdf
Abstract class for PDF profile checkers.
PdfProfile(PdfModule) - Constructor for class edu.harvard.hul.ois.jhove.module.pdf.PdfProfile
Creates a PdfProfile.
PdfSimpleObject - Class in edu.harvard.hul.ois.jhove.module.pdf
A representation of a PDF object which can be represented by a Token.
PdfSimpleObject(Token, int, int) - Constructor for class edu.harvard.hul.ois.jhove.module.pdf.PdfSimpleObject
Creates a PdfSimpleObject.
PdfSimpleObject(Token) - Constructor for class edu.harvard.hul.ois.jhove.module.pdf.PdfSimpleObject
Creates a PdfSimpleObject.
PdfStream - Class in edu.harvard.hul.ois.jhove.module.pdf
A representation of a PDF stream object.
PdfStream(PdfDictionary, Stream, int, int) - Constructor for class edu.harvard.hul.ois.jhove.module.pdf.PdfStream
Creates a PdfStream
PdfStream(PdfDictionary, Stream) - Constructor for class edu.harvard.hul.ois.jhove.module.pdf.PdfStream
Creates a PdfStream.
PdfStrings - Class in edu.harvard.hul.ois.jhove.module.pdf
A class for holding arrays of informative strings that will go into properties of a PDF object.
PDFX1 - Static variable in class edu.harvard.hul.ois.jhove.module.pdf.XProfileBase
Enumerated values for PDF-X type
PDFX1A - Static variable in class edu.harvard.hul.ois.jhove.module.pdf.XProfileBase
Enumerated values for PDF-X type
PDFX2 - Static variable in class edu.harvard.hul.ois.jhove.module.pdf.XProfileBase
Enumerated values for PDF-X type
PDFX3 - Static variable in class edu.harvard.hul.ois.jhove.module.pdf.XProfileBase
Enumerated values for PDF-X type
PdfXMPSource - Class in edu.harvard.hul.ois.jhove.module.pdf
Class for providing an InputSource to XMPHandler.
PdfXMPSource(PdfStream, RandomAccessFile) - Constructor for class edu.harvard.hul.ois.jhove.module.pdf.PdfXMPSource
Constructor based on Stream object.
PdfXMPSource(PdfStream, RandomAccessFile, String) - Constructor for class edu.harvard.hul.ois.jhove.module.pdf.PdfXMPSource
Constructor based on Stream object with encoding specified.
peakChunkSeen - Variable in class edu.harvard.hul.ois.jhove.module.WaveModule
 
PeakEnvelopeChunk - Class in edu.harvard.hul.ois.jhove.module.wave
Implementation of the WAVE Peak Envelope ('levl') Chunk.
PeakEnvelopeChunk(ModuleBase, ChunkHeader, DataInputStream) - Constructor for class edu.harvard.hul.ois.jhove.module.wave.PeakEnvelopeChunk
Constructor.
perCMtoPerInch(int) - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffFXBase
Convert a units/cm value to a units/inch value.
PHOTOMETRICINTERPRETATION - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Standard TIFF 6.0 tags.
phraseMarkup - Static variable in class edu.harvard.hul.ois.jhove.module.html.Html4DocDesc
Names of phrase elements.
PHYS_DIGITAL - Static variable in class edu.harvard.hul.ois.jhove.AnalogDigitalFlagType
Enumeration instance for physical digital data
pickAndAnalyzeFile() - Method in class edu.harvard.hul.ois.jhove.viewer.JhoveWindow
Here we let the user pick a file, then analyze it.
pickAndAnalyzeFile1(File, Module) - Method in class edu.harvard.hul.ois.jhove.viewer.JhoveWindow
This method does the actual work of pickAndAnalyzeFile, called from a thread so it can run asynchronously.
pickAndAnalyzeFileList1(List, Module) - Method in class edu.harvard.hul.ois.jhove.viewer.JhoveWindow
This is called to analyze a List of files.
pickAndAnalyzeURL() - Method in class edu.harvard.hul.ois.jhove.viewer.JhoveWindow
 
pickAndAnalyzeURL1(String, Module) - Method in class edu.harvard.hul.ois.jhove.viewer.JhoveWindow
This method does the actual work of pickAndAnalyzeURL, called from a thread so it can run asynchronously.
PII - Static variable in class edu.harvard.hul.ois.jhove.IdentifierType
Identifier type for Publisher Item Identifier.
PLANAR_CONFIGURATION - Static variable in class edu.harvard.hul.ois.jhove.NisoImageMetadata
6.1.6 planar configuration value labels.
PLANARCONFIGURATION - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Standard TIFF 6.0 tags.
PLM - Static variable in class edu.harvard.hul.ois.jhove.module.jpeg2000.MarkerSegment
 
PLMMarkerSegment - Class in edu.harvard.hul.ois.jhove.module.jpeg2000
Class for the PLM Marker segment.
PLMMarkerSegment() - Constructor for class edu.harvard.hul.ois.jhove.module.jpeg2000.PLMMarkerSegment
Constructor.
PLT - Static variable in class edu.harvard.hul.ois.jhove.module.jpeg2000.MarkerSegment
 
PLTMarkerSegment - Class in edu.harvard.hul.ois.jhove.module.jpeg2000
Class for the PLT Marker segment.
PLTMarkerSegment() - Constructor for class edu.harvard.hul.ois.jhove.module.jpeg2000.PLTMarkerSegment
Constructor.
POC - Static variable in class edu.harvard.hul.ois.jhove.module.jpeg2000.MarkerSegment
 
POCMarkerSegment - Class in edu.harvard.hul.ois.jhove.module.jpeg2000
Class for the POC (Progression order change) marker segment.
POCMarkerSegment() - Constructor for class edu.harvard.hul.ois.jhove.module.jpeg2000.POCMarkerSegment
 
popp() - Method in class edu.harvard.hul.ois.jhove.module.html.HtmlStack
Pops top element from element stack.
popTo(int) - Method in class edu.harvard.hul.ois.jhove.module.html.HtmlStack
Pops elements from the stack up to and including the one indexed by idx
postParseInitialization() - Method in class edu.harvard.hul.ois.jhove.module.tiff.IFD
Perform initializations that have to wait until after the IFD has been parsed.
postParseInitialization() - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Perform initializations that have to wait until after the IFD has been parsed.
PPM - Static variable in class edu.harvard.hul.ois.jhove.module.jpeg2000.MarkerSegment
 
PPMMarkerSegment - Class in edu.harvard.hul.ois.jhove.module.jpeg2000
Class for the PPM (Packed packet headers, main header) marker segment.
PPMMarkerSegment() - Constructor for class edu.harvard.hul.ois.jhove.module.jpeg2000.PPMMarkerSegment
Constructor.
PPT - Static variable in class edu.harvard.hul.ois.jhove.module.jpeg2000.MarkerSegment
 
PPTMarkerSegment - Class in edu.harvard.hul.ois.jhove.module.jpeg2000
Class for the PPT (Packed packet headers, tile-part header) marker segment.
PPTMarkerSegment() - Constructor for class edu.harvard.hul.ois.jhove.module.jpeg2000.PPTMarkerSegment
Constructor.
PREDICTOR - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Standard TIFF 6.0 tags.
PrefsWindow - Class in edu.harvard.hul.ois.jhove.viewer
Window for setting preferences for the Jhove viewer.
PrefsWindow(JhoveWindow) - Constructor for class edu.harvard.hul.ois.jhove.viewer.PrefsWindow
Constructor.
prevCharIsCR - Variable in class edu.harvard.hul.ois.jhove.module.html.HtmlCharStream
 
prevCharIsCR - Variable in class edu.harvard.hul.ois.jhove.module.html.SimpleCharStream
 
prevCharIsLF - Variable in class edu.harvard.hul.ois.jhove.module.html.HtmlCharStream
 
prevCharIsLF - Variable in class edu.harvard.hul.ois.jhove.module.html.SimpleCharStream
 
PRIMARYCHROMATICITIES - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Standard TIFF 6.0 tags.
PRIMEMERIDIAN - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.GeoTiffStrings
 
PRIMEMERIDIAN_INDEX - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.GeoTiffStrings
 
process(App, Module, OutputHandler, String) - Method in class edu.harvard.hul.ois.jhove.JhoveBase
 
process(int) - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.COCMarkerSegment
Process the marker segment.
process(int) - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.CODMarkerSegment
Processes the marker segment.
process(int) - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.CommentMarkerSegment
Process the marker segment.
process(int) - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.CRGMarkerSegment
Processes the marker segment.
process(int) - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.DefaultMarkerSegment
Processes the marker segment.
process(int) - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.Marker
Default processing.
process(int) - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.MarkerSegment
Process the marker or marker segment.
process(int) - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.PLMMarkerSegment
Processes the marker segment.
process(int) - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.PLTMarkerSegment
Processes the marker segment.
process(int) - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.POCMarkerSegment
Process the marker segment.
process(int) - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.PPMMarkerSegment
Processes the marker segment.
process(int) - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.PPTMarkerSegment
Processes the marker segment.
process(int) - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.QCCMarkerSegment
Process the marker segment.
process(int) - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.QCDMarkerSegment
Process the marker segment.
process(int) - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.RGNMarkerSegment
Processes the marker segment.
process(int) - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.SIZMarkerSegment
Process the marker segment.
process(int) - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.SOTMarkerSegment
Process the marker segment.
process(int) - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.TLMMarkerSegment
Processes the marker segment.
processElement(HtmlMetadata) - Method in class edu.harvard.hul.ois.jhove.module.html.JHOpenTag
Process the element to extract any available metadata.
processElement(String, String, Attributes, HtmlMetadata) - Static method in class edu.harvard.hul.ois.jhove.module.xml.XhtmlProcessing
Process the element to extract any available metadata.
processFile(App, Module, boolean, File, RepInfo) - Method in class edu.harvard.hul.ois.jhove.JhoveBase
 
PROCESSING - Static variable in class edu.harvard.hul.ois.jhove.viewer.ProgressWindow
Progress state: Processing the document.
processingInstruction(String, String) - Method in class edu.harvard.hul.ois.jhove.module.xml.XmlModuleHandler
Handles a processing instruction.
processingInstruction(String, String) - Method in class edu.harvard.hul.ois.jhove.XMPHandler
 
processLiteral(Tokenizer) - Method in class edu.harvard.hul.ois.jhove.module.pdf.Literal
Process the incoming characters into a string literal.
processPCData(HtmlStack, HtmlMetadata) - Method in class edu.harvard.hul.ois.jhove.module.html.JHPCData
Extracts metadata and entities from the PCData object and its stack context.
PROFILETYPE - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.GlobalParametersIFD
Tiff/FX-specific tags.
ProgressWindow - Class in edu.harvard.hul.ois.jhove.viewer
Window for showing progress of file processing.
ProgressWindow(ActionListener) - Constructor for class edu.harvard.hul.ois.jhove.viewer.ProgressWindow
Constructor.
PROJAZIMUTHANGLEGEOKEY - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
GeoTIFF key values.
PROJCENTEREASTINGGEOKEY - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
GeoTIFF key values.
PROJCENTERLATGEOKEY - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
GeoTIFF key values.
PROJCENTERLONGGEOKEY - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
GeoTIFF key values.
PROJCOORDTRANSGEOKEY - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
GeoTIFF key values.
PROJECTEDCSTYPE - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.GeoTiffStrings
 
PROJECTEDCSTYPE_INDEX - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.GeoTiffStrings
 
PROJECTEDCSTYPEGEOKEY - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
GeoTIFF key values.
PROJECTION - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.GeoTiffStrings
 
PROJECTION_INDEX - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.GeoTiffStrings
 
PROJECTIONGEOKEY - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
GeoTIFF key values.
PROJFALSEEASTINGGEOKEY - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
GeoTIFF key values.
PROJFALSENORTHINGGEOKEY - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
GeoTIFF key values.
PROJFALSEORIGINEASTINGGEOKEY - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
GeoTIFF key values.
PROJFALSEORIGINLATGEOKEY - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
GeoTIFF key values.
PROJFALSEORIGINLONGGEOKEY - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
GeoTIFF key values.
PROJFALSEORIGINNORTHINGGEOKEY - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
GeoTIFF key values.
PROJFALSEORIGINNORTHINGGEOKEY_2 - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
GeoTIFF key values.
PROJLINEARUNITSGEOKEY - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
GeoTIFF key values.
PROJLINEARUNITSIZEGEOKEY - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
GeoTIFF key values.
PROJNATORIGINLATGEOKEY - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
GeoTIFF key values.
PROJNATORIGINLONGGEOKEY - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
GeoTIFF key values.
PROJSCALEATCENTERGEOKEY - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
GeoTIFF key values.
PROJSCALEATNATORIGINGEOKEY - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
GeoTIFF key values.
PROJSTDPARALLEL1GEOKEY - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
GeoTIFF key values.
PROJSTDPARALLEL2GEOKEY - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
GeoTIFF key values.
PROJSTRAIGHTVERTPOLELONGEOKEY - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
GeoTIFF key values.
Property - Class in edu.harvard.hul.ois.jhove
This class encapsulates arbitrary format-specific properties.
Property(String, PropertyType, Object) - Constructor for class edu.harvard.hul.ois.jhove.Property
Creates a Property with arity SCALAR.
Property(String, PropertyType, PropertyArity, Object) - Constructor for class edu.harvard.hul.ois.jhove.Property
Creates a Property with a given name, type, arity and value.
PROPERTY - Static variable in class edu.harvard.hul.ois.jhove.PropertyType
Property type for a Property object.
PropertyArity - Class in edu.harvard.hul.ois.jhove
This class represents the arity (structure type) of a Property.
propertyHeader(String, List) - Method in class edu.harvard.hul.ois.jhove.module.tiff.IFD
Standard IFD property header.
PropertyPath - Class in edu.harvard.hul.ois.jhove
A description of the location of a Property in a RepInfo object.
PropertyPath() - Constructor for class edu.harvard.hul.ois.jhove.PropertyPath
No-argument constructor.
PropertyPath(PropertyPath) - Constructor for class edu.harvard.hul.ois.jhove.PropertyPath
Cloning constructor.
PropertyPath(String[]) - Constructor for class edu.harvard.hul.ois.jhove.PropertyPath
String array constructor.
PropertyType - Class in edu.harvard.hul.ois.jhove
This class defines enumerated types for an Property of some given content.
propName - Variable in class edu.harvard.hul.ois.jhove.module.aiff.TextChunk
Name of the property.
PROTECTION_INDICATOR - Static variable in class edu.harvard.hul.ois.jhove.module.jpeg.Spiff
 
publicIDToFile(String) - Static method in class edu.harvard.hul.ois.jhove.module.html.DTDMapper
Attempts to convert a public ID to a matching DTD or Entity resource.
push(JHOpenTag) - Method in class edu.harvard.hul.ois.jhove.module.html.HtmlStack
Pushes an element onto the stack.
pushElementStack(JHOpenTag) - Method in class edu.harvard.hul.ois.jhove.module.html.HtmlDocDesc
Pushes an element onto the element stack.

Q

QCC - Static variable in class edu.harvard.hul.ois.jhove.module.jpeg2000.MarkerSegment
 
QCCMarkerSegment - Class in edu.harvard.hul.ois.jhove.module.jpeg2000
Class for the QCC (Quantization component) marker segment.
QCCMarkerSegment() - Constructor for class edu.harvard.hul.ois.jhove.module.jpeg2000.QCCMarkerSegment
 
QCD - Static variable in class edu.harvard.hul.ois.jhove.module.jpeg2000.MarkerSegment
 
QCDMarkerSegment - Class in edu.harvard.hul.ois.jhove.module.jpeg2000
Class for the QCD (Quantization default) marker segment.
QCDMarkerSegment() - Constructor for class edu.harvard.hul.ois.jhove.module.jpeg2000.QCDMarkerSegment
Constructor.
QMARK - Static variable in interface edu.harvard.hul.ois.jhove.module.html.ParseHtmlConstants
 
QuantizationTable - Class in edu.harvard.hul.ois.jhove.module.jpeg
Encapsulation of a quantization table entry for a JPEG image.
QuantizationTable(int, int) - Constructor for class edu.harvard.hul.ois.jhove.module.jpeg.QuantizationTable
Constructor.
QUOTEDDTITEM - Static variable in interface edu.harvard.hul.ois.jhove.module.html.ParseHtmlConstants
 
QUOTEDVALUE - Static variable in interface edu.harvard.hul.ois.jhove.module.html.ParseHtmlConstants
 

R

RABRACKET - Static variable in interface edu.harvard.hul.ois.jhove.module.html.ParseHtmlConstants
 
RAFInputStream - Class in edu.harvard.hul.ois.jhove
An InputStream layered on top of a RandomAccessFile.
RAFInputStream(RandomAccessFile) - Constructor for class edu.harvard.hul.ois.jhove.RAFInputStream
Constructor with default buffer size.
RAFInputStream(RandomAccessFile, int) - Constructor for class edu.harvard.hul.ois.jhove.RAFInputStream
Constructor with buffer size.
RASTERTYPE - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.GeoTiffStrings
 
RASTERTYPE_INDEX - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.GeoTiffStrings
 
RATIONAL - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.IFD
TIFF RATIONAL (two LONGs) type.
RATIONAL - Static variable in class edu.harvard.hul.ois.jhove.PropertyType
Property type for a Rational object.
Rational - Class in edu.harvard.hul.ois.jhove
This class encapsulates a number which is defined as the ratio of two 32-bit unsigned integers, in accordance with the TIFF specification.
Rational(long, long) - Constructor for class edu.harvard.hul.ois.jhove.Rational
The arguments to this constructor are long in order to represent all possible 32-bit unsigned integers.
Rational(int, int) - Constructor for class edu.harvard.hul.ois.jhove.Rational
The arguments to the int constructor are treated as 32-bit unsigned integers.
rationalArray(Rational[]) - Static method in class edu.harvard.hul.ois.jhove.HandlerBase
Return String representation of an array of Rational, each evaluated as a double, with space separator.
rationalArray10(Rational[]) - Static method in class edu.harvard.hul.ois.jhove.HandlerBase
Return String representation of an array of Rational, each as two integers, with space separator.
rationalToString(StringBuffer, String, String, Rational) - Method in class edu.harvard.hul.ois.jhove.handler.XmlHandler
Appends a Rational value to a StringBuffer
read() - Method in class edu.harvard.hul.ois.jhove.ChecksumInputStream
Reads a byte from the subsumed stream, updating the byte count and the checksums.
read(byte[]) - Method in class edu.harvard.hul.ois.jhove.ChecksumInputStream
Reads some number of bytes from the input stream and stores them into the buffer array b.
read(byte[], int, int) - Method in class edu.harvard.hul.ois.jhove.ChecksumInputStream
Reads up to len bytes of data from the input stream into an array of bytes.
read() - Method in class edu.harvard.hul.ois.jhove.CountedInputStream
Reads a single byte from the stream and decrements the count of remaining bytes.
read(byte[]) - Method in class edu.harvard.hul.ois.jhove.CountedInputStream
Reads some number of bytes from the input stream and stores them into the buffer array b.
read(byte[], int, int) - Method in class edu.harvard.hul.ois.jhove.CountedInputStream
Reads up to len bytes of data from the input stream into an array of bytes.
read() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.FragmentInputStream
Returns the next byte from the stream, buffering each fragment in turn until the last fragment is exhausted.
read() - Method in class edu.harvard.hul.ois.jhove.module.pdf.PdfFlateInputStream
Reads one byte from the stream.
read(byte[]) - Method in class edu.harvard.hul.ois.jhove.module.pdf.PdfFlateInputStream
Reads the specified number of bytes into a buffer.
read(byte[], int, int) - Method in class edu.harvard.hul.ois.jhove.module.pdf.PdfFlateInputStream
Reads the specified number of bytes into a buffer with offset and length specified.
read() - Method in class edu.harvard.hul.ois.jhove.module.pdf.Stream
Reads a byte from the Stream, applying the Filters if any.
read(byte[]) - Method in class edu.harvard.hul.ois.jhove.module.pdf.Stream
Reads a sequence of bytes from the Stream, applying the Filters if any.
read() - Method in class edu.harvard.hul.ois.jhove.module.pdf.StreamInputStream
Return one byte from the stream.
read() - Method in class edu.harvard.hul.ois.jhove.module.xml.XmlDeclStream
Reads the next byte of data from this input stream.
read(byte[]) - Method in class edu.harvard.hul.ois.jhove.module.xml.XmlDeclStream
Reads up to byte.length bytes of data from this input stream into an array of bytes.
read(byte[], int, int) - Method in class edu.harvard.hul.ois.jhove.module.xml.XmlDeclStream
Reads up to len bytes of data from this input stream into an array of bytes.
read() - Method in class edu.harvard.hul.ois.jhove.RAFInputStream
Reads a single byte from the file.
read(byte[]) - Method in class edu.harvard.hul.ois.jhove.RAFInputStream
Reads some number of bytes from the input stream and stores them into the buffer array b.
read(byte[], int, int) - Method in class edu.harvard.hul.ois.jhove.RAFInputStream
Reads up to len bytes of data from the input stream into an array of bytes.
read() - Method in class edu.harvard.hul.ois.jhove.XMLWrapperStream
Get a byte.
read4Chars(DataInputStream) - Method in class edu.harvard.hul.ois.jhove.module.AiffModule
Reads 4 bytes and concatenates them into a String.
read4Chars(DataInputStream) - Method in class edu.harvard.hul.ois.jhove.module.Jpeg2000Module
Reads 4 bytes and concatenates them into a String.
read4Chars(DataInputStream) - Method in class edu.harvard.hul.ois.jhove.module.WaveModule
Reads 4 bytes and concatenates them into a String.
read80BitDouble(DataInputStream) - Method in class edu.harvard.hul.ois.jhove.module.AiffModule
This reads an 80-bit SANE number, aka IEEE 754 extended double.
readAdtlChunk(RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.wave.ListInfoChunk
Reads the chunk and its nested chunks, and puts appropriate properties into the RepInfo object.
readAPP0(RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.JpegModule
 
readAPP1(RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.JpegModule
 
readAPP8(RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.JpegModule
 
readAppExtension(RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.GifModule
 
readArray() - Method in class edu.harvard.hul.ois.jhove.module.pdf.Parser
Reads an array.
readASCII(long, long) - Method in class edu.harvard.hul.ois.jhove.module.tiff.IFD
Reads a string value from the TIFF file.
readASCIIArray(long, long) - Method in class edu.harvard.hul.ois.jhove.module.tiff.IFD
Reads an array of strings from the TIFF file.
readAsciiInt() - Method in class edu.harvard.hul.ois.jhove.module.pdf.Stream
Reads an ASCII string, which may be preceded by white space.
readBlock(RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.GifModule
 
readBox() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.AssociationBox
Reads the box, putting appropriate information in the RepInfo object.
readBox() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.BinaryFilterBox
Reads the box, putting appropriate information in the RepInfo object.
readBox() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.BPCCBox
Reads the box, putting appropriate information in the RepInfo object.
readBox() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.CaptureResolutionBox
Reads the box, putting appropriate information in the RepInfo object.
readBox() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.ChannelDefBox
Reads the box, putting appropriate information in the RepInfo object.
readBox() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.CodestreamHeaderBox
Reads the box, putting appropriate information in the RepInfo object.
readBox() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.CodestreamRegBox
Reads the box, putting appropriate information in the RepInfo object.
readBox() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.ColorGroupBox
Reads the box, putting appropriate information in the RepInfo object.
readBox() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.ColorSpecBox
Reads the box, putting appropriate information in the RepInfo object.
readBox() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.ComponentMapBox
Reads the box, putting appropriate information in the RepInfo object.
readBox() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.CompOptionsBox
Reads the box, putting appropriate information in the RepInfo object.
readBox() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.CompositionBox
Reads the box, putting appropriate information in the RepInfo object.
readBox() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.ComposLayerHdrBox
Reads the box, putting appropriate information in the RepInfo object.
readBox() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.ContCodestreamBox
Reads the box, putting appropriate information in the RepInfo object.
readBox() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.CrossRefBox
Reads the box, putting appropriate information in the RepInfo object.
readBox() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.DataEntryURLBox
Reads the box, putting appropriate information in the RepInfo object.
readBox() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.DDResolutionBox
Reads the box, putting appropriate information in the RepInfo object.
readBox() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.DefaultBox
 
readBox() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.DesiredReproBox
Reads the box, putting appropriate information in the RepInfo object.
readBox() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.DigSignatureBox
Reads the box, putting appropriate information in the RepInfo object.
readBox() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.FileTypeBox
Reads the box, putting appropriate information in the RepInfo object.
readBox() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.FragmentListBox
Reads the box, putting appropriate information in the RepInfo object.
readBox() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.FragmentTableBox
Reads the box, putting appropriate information in the RepInfo object.
readBox() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.GTSOBox
Reads the box, putting appropriate information in the RepInfo object.
readBox() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.ImageHeaderBox
Reads the box, putting appropriate information in the RepInfo object.
readBox() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.InstructionSetBox
Reads the box, putting appropriate information in the RepInfo object.
readBox() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.IPRBox
Reads the box, putting appropriate information in the RepInfo object.
readBox() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
Reads the box, putting appropriate information in the RepInfo object.
readBox() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2HeaderBox
Reads the box, putting appropriate information in the RepInfo object.
readBox() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.LabelBox
Reads the box, saving the label text.
readBox() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.NumberListBox
Reads the box, putting appropriate information in the RepInfo object.
readBox() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.OpacityBox
Reads the box, putting appropriate information in the RepInfo object.
readBox() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.PaletteBox
Reads the box, putting appropriate information in the RepInfo object.
readBox() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.ReaderRequirementsBox
Reads the box, putting appropriate information in the RepInfo object.
readBox() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.ResolutionBox
 
readBox() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.ROIBox
Reads the box, putting appropriate information in the RepInfo object.
readBox() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.UUIDBox
Reads the box, putting appropriate information in the RepInfo object.
readBox() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.UUIDInfoBox
Reads the box, putting appropriate information in the RepInfo object.
readBox() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.UUIDListBox
Reads the box, putting appropriate information in the RepInfo object.
readBox() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.XMLBox
Reads the box, putting appropriate information in the RepInfo object.
readBoxes(RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.Jpeg2000Module
 
readByte(int, long, long) - Method in class edu.harvard.hul.ois.jhove.module.tiff.IFD
Reads and returns a single unsigned 8-bit integer value.
readByteArray(int, long, long) - Method in class edu.harvard.hul.ois.jhove.module.tiff.IFD
Reads an array of bytes and returns it as an int array.
readByteBuf(DataInputStream, byte[], ModuleBase) - Static method in class edu.harvard.hul.ois.jhove.ModuleBase
Reads into a byte buffer from a DataInputStream.
readChar() - Method in interface edu.harvard.hul.ois.jhove.module.html.CharStream
Returns the next character from the selected input.
readChar() - Method in class edu.harvard.hul.ois.jhove.module.html.HtmlCharStream
 
readChar() - Method in class edu.harvard.hul.ois.jhove.module.html.SimpleCharStream
 
readChar() - Method in class edu.harvard.hul.ois.jhove.module.pdf.FileTokenizer
Gets a character from the file, using a buffer.
readChar() - Method in class edu.harvard.hul.ois.jhove.module.pdf.StreamTokenizer
Gets a character from the file, using a buffer.
readChar() - Method in class edu.harvard.hul.ois.jhove.module.pdf.Tokenizer
Get a character from the file or stream, using a buffer
readChar1(boolean) - Method in class edu.harvard.hul.ois.jhove.module.pdf.Tokenizer
Read a character in one-byte or 2-byte format, as requested
readChars(DataInputStream, int) - Static method in class edu.harvard.hul.ois.jhove.Dump
Read and display a sequence of characters.
readChunk(RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.aiff.AnnotationChunk
Reads a chunk and adds an Annotation property to the module's list of annotations.
readChunk(RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.aiff.ApplicationChunk
Reads a chunk and puts an Application property into the RepInfo object.
readChunk(RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.aiff.AudioRecChunk
Reads a chunk and puts an AudioRecording property into the RepInfo object.
readChunk(RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.aiff.CommentsChunk
Reads a chunk and puts a Comments property into the RepInfo object.
readChunk(RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.aiff.CommonChunk
Reads a chunk and puts various properties into the RepInfo object.
readChunk(RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.aiff.FormatVersionChunk
Reads a chunk and puts a FormatVersion property into the RepInfo object.
readChunk(RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.aiff.InstrumentChunk
Reads a chunk and puts an Instrument property into the RepInfo object.
readChunk(RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.aiff.MarkerChunk
Reads a chunk and puts a Markers property into the RepInfo object.
readChunk(RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.aiff.MidiChunk
Reads a chunk and puts an MIDI property into the RepInfo object.
readChunk(RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.aiff.SaxelChunk
Reads a chunk and puts a "Saxels" property into the RepInfo object.
readChunk(RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.aiff.SoundDataChunk
Reads a chunk and puts a SoundData property into the RepInfo object.
readChunk(RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.aiff.TextChunk
Reads a chunk and puts appropriate information into the RepInfo object.
readChunk(RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.AiffModule
Reads an AIFF Chunk.
readChunk(RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.iff.Chunk
Reads a chunk and puts appropriate information into the RepInfo object.
readChunk(RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.wave.AssocDataListChunk
Reads the chunk and its nested chunks, and puts appropriate properties into the RepInfo object.
readChunk(RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.wave.AXMLChunk
Reads a chunk and puts a BroadcastAudioExtension Property into the RepInfo object.
readChunk(RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.wave.BroadcastExtChunk
Reads a chunk and puts a BroadcastAudioExtension Property into the RepInfo object.
readChunk(RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.wave.CartChunk
Reads a chunk and puts a Cart Property into the RepInfo object.
readChunk(RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.wave.CueChunk
Reads a chunk and puts a Cue property into the RepInfo object.
readChunk(RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.wave.DataChunk
Reads a chunk and puts a Data property into the RepInfo object.
readChunk(RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.wave.ExifMakerNoteChunk
Reads a chunk and puts information into the superchunk's Exif property.
readChunk(RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.wave.ExifStringChunk
Reads a chunk and puts information into the superchunk's Exif property.
readChunk(RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.wave.ExifUserCommentChunk
Reads a chunk and puts information into the superchunk's Exif property.
readChunk(RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.wave.ExifVersionChunk
Reads a chunk and puts information into the superchunk's Exif property.
readChunk(RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.wave.FactChunk
Reads a chunk and puts a Fact Property into the RepInfo object.
readChunk(RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.wave.FormatChunk
Reads a chunk and puts appropriate Properties into the RepInfo object.
readChunk(RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.wave.InstrumentChunk
Reads a chunk and puts an Instrument property into the RepInfo object.
readChunk(RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.wave.LabelChunk
Reads a chunk and adds to the module's list of labels.
readChunk(RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.wave.LabeledTextChunk
Reads a chunk and puts an MPEG Property into the RepInfo object.
readChunk(RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.wave.LinkChunk
Reads a chunk and puts a BroadcastAudioExtension Property into the RepInfo object.
readChunk(RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.wave.ListInfoChunk
Reads a chunk and puts appropriate information into the RepInfo object.
readChunk(RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.wave.ListInfoTextChunk
Reads a chunk and.....
readChunk(RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.wave.MpegChunk
Reads a chunk and puts an MPEG Property into the RepInfo object.
readChunk(RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.wave.NoteChunk
Reads a chunk and adds to the module's list of Notes.
readChunk(RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.wave.PeakEnvelopeChunk
Reads a chunk and puts a BroadcastAudioExtension Property into the RepInfo object.
readChunk(RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.wave.SampleChunk
Reads a chunk and puts a Sample property into the RepInfo object.
readChunk(RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.WaveModule
Reads a WAVE Chunk.
readCodestream(Codestream, RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.ContCodestream
Reading a codestream generates various bits of information about the image.
readComment(RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.JpegModule
 
readCommentExtension(RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.GifModule
 
readDAC(RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.JpegModule
 
readDHP(RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.JpegModule
 
readDictionary() - Method in class edu.harvard.hul.ois.jhove.module.pdf.Parser
Reads a dictionary.
readDirEntry(DataInputStream, int) - Method in class edu.harvard.hul.ois.jhove.module.jpeg.SpiffDir
Reads a directory entry, starting at the position after the APP8 marker and length.
readDocCatalogDict(RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.PdfModule
 
readDocInfoDict(RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.PdfModule
 
readDocumentTree(RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.PdfModule
 
readDouble(RandomAccessFile, boolean) - Static method in class edu.harvard.hul.ois.jhove.ModuleBase
 
readDouble(DataInputStream, boolean) - Static method in class edu.harvard.hul.ois.jhove.ModuleBase
 
readDouble(DataInputStream, boolean, ModuleBase) - Static method in class edu.harvard.hul.ois.jhove.ModuleBase
 
readDoubleArray(long, long) - Method in class edu.harvard.hul.ois.jhove.module.tiff.IFD
Reads a TIFF array of DOUBLE 64-bit values and returns it as a double array.
readDQT(RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.JpegModule
 
readDRI(RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.JpegModule
 
readDTI(RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.JpegModule
 
readDTT(RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.JpegModule
 
readEncryptDict(RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.PdfModule
 
ReaderRequirementsBox - Class in edu.harvard.hul.ois.jhove.module.jpeg2000
Reader requirements box (JPX).
ReaderRequirementsBox(RandomAccessFile, BoxHolder) - Constructor for class edu.harvard.hul.ois.jhove.module.jpeg2000.ReaderRequirementsBox
Constructor with superbox.
readExifData(DataInputStream, JhoveBase, int) - Method in class edu.harvard.hul.ois.jhove.module.jpeg.JpegExif
Reads the Exif data from the current point at the data stream, puts it into a temporary file, and makes a RepInfo object available.
readEXP(RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.JpegModule
 
readExtBlock(RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.GifModule
 
readFileType(RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.AiffModule
Reads the file type.
readFileTypeBox(RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.Jpeg2000Module
 
readFloat(RandomAccessFile, boolean) - Static method in class edu.harvard.hul.ois.jhove.ModuleBase
 
readFloat(DataInputStream, boolean, ModuleBase) - Static method in class edu.harvard.hul.ois.jhove.ModuleBase
 
readGraphicsCtlBlock(RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.GifModule
 
readHeader(DataInputStream) - Method in class edu.harvard.hul.ois.jhove.module.iff.ChunkHeader
Reads the header of a chunk.
readHeader() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHeader
Reads 8 bytes from the beginning of the box and parses out the box length and type.
readHeader(RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.JpegModule
 
readImage(RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.GifModule
 
readIndex() - Method in class edu.harvard.hul.ois.jhove.module.pdf.ObjectStream
Reads the index of the object stream.
readJPEGExtension(int, RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.JpegModule
 
readLong(int, long, long) - Method in class edu.harvard.hul.ois.jhove.module.tiff.IFD
Reads and returns a single unsigned 32-bit integer value.
readLongArray(int, long, long) - Method in class edu.harvard.hul.ois.jhove.module.tiff.IFD
Reads a TIFF array of signed 32-bit integer values and returns it as a long array.
readLSD(RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.GifModule
 
readMarkLen() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.Marker
Overrides the superclass to return 0 without consuming any bytes from the DataInputStream.
readMarkLen() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.MarkerSegment
Reads and returns the length field of the marker segment.
readNextObject() - Method in class edu.harvard.hul.ois.jhove.module.pdf.CrossRefStream
Reads the next object in the stream.
readObject() - Method in class edu.harvard.hul.ois.jhove.module.pdf.Parser
Reads an object.
readObjectDef() - Method in class edu.harvard.hul.ois.jhove.module.pdf.Parser
Reads an object definition, from wherever we are in the stream to the completion of one full object after the obj keyword.
readObjectDef(Numeric) - Method in class edu.harvard.hul.ois.jhove.module.pdf.Parser
Reads an object definition, given the first numeric object, which has already been read and is passed as an argument.
readPageLabelTree(RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.PdfModule
 
readPascalString(DataInputStream) - Method in class edu.harvard.hul.ois.jhove.module.AiffModule
Reads a Pascal string.
readPlainTextExtension(RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.GifModule
 
readRational(long, long) - Method in class edu.harvard.hul.ois.jhove.module.tiff.IFD
Reads a RATIONAL value and returns it as a Rational.
readRationalArray(long, long) - Method in class edu.harvard.hul.ois.jhove.module.tiff.IFD
Reads an array of RATIONAL values and returns it as an array of Rational.
readShort(int, long, long) - Method in class edu.harvard.hul.ois.jhove.module.tiff.IFD
Reads and returns a single unsigned 16-bit value.
readShortArray(int, long, long) - Method in class edu.harvard.hul.ois.jhove.module.tiff.IFD
Reads a TIFF array of unsigned 16-bit values and returns it as an int array.
readSig(RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.GifModule
 
readSignedByte(RandomAccessFile) - Static method in class edu.harvard.hul.ois.jhove.ModuleBase
 
readSignedByte(DataInputStream) - Static method in class edu.harvard.hul.ois.jhove.ModuleBase
 
readSignedByte(DataInputStream, ModuleBase) - Static method in class edu.harvard.hul.ois.jhove.ModuleBase
 
readSignedInt(DataInputStream) - Method in class edu.harvard.hul.ois.jhove.module.WaveModule
One-argument version of readSignedInt.
readSignedInt(RandomAccessFile, boolean) - Static method in class edu.harvard.hul.ois.jhove.ModuleBase
 
readSignedInt(DataInputStream, boolean) - Static method in class edu.harvard.hul.ois.jhove.ModuleBase
 
readSignedInt(DataInputStream, boolean, ModuleBase) - Static method in class edu.harvard.hul.ois.jhove.ModuleBase
 
readSignedLong(DataInputStream) - Method in class edu.harvard.hul.ois.jhove.module.Jpeg2000Module
One-argument version of readSignedLong.
readSignedLong(DataInputStream) - Method in class edu.harvard.hul.ois.jhove.module.WaveModule
One-argument version of readSignedLong.
readSignedLong(DataInputStream, boolean, ModuleBase) - Static method in class edu.harvard.hul.ois.jhove.ModuleBase
Reads eight bytes as a signed 64-bit value from a DataInputStream.
readSignedRational(long, long) - Method in class edu.harvard.hul.ois.jhove.module.tiff.IFD
Reads an SRATIONAL value and returns it as a Rational.
readSignedRational(DataInputStream, boolean, ModuleBase) - Static method in class edu.harvard.hul.ois.jhove.ModuleBase
 
readSignedRational(RandomAccessFile, boolean) - Static method in class edu.harvard.hul.ois.jhove.ModuleBase
 
readSignedRationalArray(long, long) - Method in class edu.harvard.hul.ois.jhove.module.tiff.IFD
Reads an array of SRATIONAL values and returns it as an array of Rational.
readSignedShort(DataInputStream) - Method in class edu.harvard.hul.ois.jhove.module.AiffModule
One-argument version of readSignedShort.
readSignedShort(DataInputStream) - Method in class edu.harvard.hul.ois.jhove.module.WaveModule
One-argument version of readSignedShort.
readSignedShort(RandomAccessFile, boolean) - Static method in class edu.harvard.hul.ois.jhove.ModuleBase
 
readSignedShort(DataInputStream, boolean) - Static method in class edu.harvard.hul.ois.jhove.ModuleBase
 
readSignedShort(DataInputStream, boolean, ModuleBase) - Static method in class edu.harvard.hul.ois.jhove.ModuleBase
 
readSOF(int, RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.JpegModule
 
readSRS(RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.JpegModule
 
readSShortArray(int, long, long) - Method in class edu.harvard.hul.ois.jhove.module.tiff.IFD
Reads a TIFF array of signed 16-bit values and returns it as an int array.
readText() - Method in class edu.harvard.hul.ois.jhove.module.aiff.TextChunk
Reads the chunk's text data.
readTextProp(WaveModule, String) - Method in class edu.harvard.hul.ois.jhove.module.wave.SimpleTextChunk
Reads the text item, and returns a Property containing the cue point ID and the text.
readTrueByteArray(int, long, long) - Method in class edu.harvard.hul.ois.jhove.module.tiff.IFD
Reads an array of bytes and returns it as a byte array.
readUnsigned(int) - Method in class edu.harvard.hul.ois.jhove.module.tiff.IFD
Reads an unsigned number of any type.
readUnsignedByte(DataInputStream) - Static method in class edu.harvard.hul.ois.jhove.ModuleBase
Reads an unsigned byte from a DataInputStream.
readUnsignedByte(DataInputStream, ModuleBase) - Static method in class edu.harvard.hul.ois.jhove.ModuleBase
Reads an unsigned byte from a DataInputStream.
readUnsignedByte(RandomAccessFile) - Static method in class edu.harvard.hul.ois.jhove.ModuleBase
Reads an unsigned byte from a RandomAccessFile.
readUnsignedInt(DataInputStream) - Method in class edu.harvard.hul.ois.jhove.module.AiffModule
One-argument version of readUnsignedInt.
readUnsignedInt(DataInputStream) - Method in class edu.harvard.hul.ois.jhove.module.Jpeg2000Module
One-argument version of readUnsignedInt.
readUnsignedInt(DataInputStream) - Method in class edu.harvard.hul.ois.jhove.module.JpegModule
One-argument version of readUnsignedInt.
readUnsignedInt(DataInputStream) - Method in class edu.harvard.hul.ois.jhove.module.WaveModule
One-argument version of readUnsignedInt.
readUnsignedInt(DataInputStream, boolean) - Static method in class edu.harvard.hul.ois.jhove.ModuleBase
Reads four bytes as an unsigned 32-bit value from a DataInputStream.
readUnsignedInt(DataInputStream, boolean, ModuleBase) - Static method in class edu.harvard.hul.ois.jhove.ModuleBase
Reads four bytes as an unsigned 32-bit value from a DataInputStream.
readUnsignedInt(RandomAccessFile, boolean) - Static method in class edu.harvard.hul.ois.jhove.ModuleBase
Reads four bytes as an unsigned 32-bit value from a RandomAccessFile.
readUnsignedRational(DataInputStream, boolean) - Static method in class edu.harvard.hul.ois.jhove.ModuleBase
 
readUnsignedRational(DataInputStream, boolean, ModuleBase) - Static method in class edu.harvard.hul.ois.jhove.ModuleBase
 
readUnsignedRational(RandomAccessFile, boolean) - Static method in class edu.harvard.hul.ois.jhove.ModuleBase
 
readUnsignedShort(DataInputStream) - Method in class edu.harvard.hul.ois.jhove.module.AiffModule
One-argument version of readUnsignedShort.
readUnsignedShort(DataInputStream) - Method in class edu.harvard.hul.ois.jhove.module.GifModule
 
readUnsignedShort(DataInputStream) - Method in class edu.harvard.hul.ois.jhove.module.Jpeg2000Module
One-argument version of readUnsignedShort.
readUnsignedShort(DataInputStream) - Method in class edu.harvard.hul.ois.jhove.module.JpegModule
One-argument version of readUnsignedShort.
readUnsignedShort(DataInputStream) - Method in class edu.harvard.hul.ois.jhove.module.WaveModule
One-argument version of readUnsignedShort.
readUnsignedShort(DataInputStream, boolean) - Static method in class edu.harvard.hul.ois.jhove.ModuleBase
Reads two bytes as an unsigned short value from a DataInputStream.
readUnsignedShort(DataInputStream, boolean, ModuleBase) - Static method in class edu.harvard.hul.ois.jhove.ModuleBase
Reads two bytes as an unsigned short value from a DataInputStream.
readUnsignedShort(RandomAccessFile, boolean) - Static method in class edu.harvard.hul.ois.jhove.ModuleBase
Reads two bytes as an unsigned short value from a RandomAccessFile.
readVer(RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.JpegModule
 
readXMP() - Method in class edu.harvard.hul.ois.jhove.module.GifModule
 
readXMP(byte[]) - Method in class edu.harvard.hul.ois.jhove.module.JpegModule
 
readXMPData(RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.PdfModule
 
readXRefInfo(RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.PdfModule
 
readXRefStreams(RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.PdfModule
 
readXRefTables(RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.PdfModule
 
REFERENCEBLACKWHITE - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Standard TIFF 6.0 tags.
ReInit(Reader, int, int, int) - Method in class edu.harvard.hul.ois.jhove.module.html.HtmlCharStream
 
ReInit(Reader, int, int) - Method in class edu.harvard.hul.ois.jhove.module.html.HtmlCharStream
 
ReInit(Reader) - Method in class edu.harvard.hul.ois.jhove.module.html.HtmlCharStream
 
ReInit(InputStream, int, int, int) - Method in class edu.harvard.hul.ois.jhove.module.html.HtmlCharStream
 
ReInit(InputStream) - Method in class edu.harvard.hul.ois.jhove.module.html.HtmlCharStream
 
ReInit(InputStream, int, int) - Method in class edu.harvard.hul.ois.jhove.module.html.HtmlCharStream
 
ReInit(CharStream) - Method in class edu.harvard.hul.ois.jhove.module.html.ParseHtml
 
ReInit(ParseHtmlTokenManager) - Method in class edu.harvard.hul.ois.jhove.module.html.ParseHtml
 
ReInit(CharStream) - Method in class edu.harvard.hul.ois.jhove.module.html.ParseHtmlTokenManager
 
ReInit(CharStream, int) - Method in class edu.harvard.hul.ois.jhove.module.html.ParseHtmlTokenManager
 
ReInit(Reader, int, int, int) - Method in class edu.harvard.hul.ois.jhove.module.html.SimpleCharStream
 
ReInit(Reader, int, int) - Method in class edu.harvard.hul.ois.jhove.module.html.SimpleCharStream
 
ReInit(Reader) - Method in class edu.harvard.hul.ois.jhove.module.html.SimpleCharStream
 
ReInit(InputStream, int, int, int) - Method in class edu.harvard.hul.ois.jhove.module.html.SimpleCharStream
 
ReInit(InputStream) - Method in class edu.harvard.hul.ois.jhove.module.html.SimpleCharStream
 
ReInit(InputStream, int, int) - Method in class edu.harvard.hul.ois.jhove.module.html.SimpleCharStream
 
remove() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
Always throws UnsupportedOperationException.
removeStringsFromList(List, String[]) - Static method in class edu.harvard.hul.ois.jhove.module.html.HtmlDocDesc
Removes excluded strings from a List.
RepInfo - Class in edu.harvard.hul.ois.jhove
This class encapsulates representation information, as defined by ISO/IEC 14721, about a content stream.
RepInfo(String) - Constructor for class edu.harvard.hul.ois.jhove.RepInfo
Creates a RepInfo with a URI reference
RepInfo(String, RepInfo) - Constructor for class edu.harvard.hul.ois.jhove.RepInfo
Creates a RepInfo with a URI reference and an external RepInfo.
REPORT - Static variable in class edu.harvard.hul.ois.jhove.DocumentType
Document type for a report.
reportAppExt(int, RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.JpegModule
 
reportError(RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.html.JHErrorElement
Puts the item's error message into the RepInfo object, and affects the wellFormed and valid flags as required.
reportInvalid(String, RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.TiffModule
Report an instance of invalidity.
RepTreeRoot - Class in edu.harvard.hul.ois.jhove.viewer
This subclass of DefaultMutableTreeNode simply adds a method for constructing the tree.
RepTreeRoot(RepInfo, App, JhoveBase) - Constructor for class edu.harvard.hul.ois.jhove.viewer.RepTreeRoot
Constructor.
REQUIRED - Static variable in class edu.harvard.hul.ois.jhove.module.html.HtmlAttributeDesc
Permitted values for _kind
reservedAttrs - Static variable in class edu.harvard.hul.ois.jhove.module.html.Html4DocDesc
Attributes described as "reserved for future use."
reset() - Method in class edu.harvard.hul.ois.jhove.Checksummer
Resets all checksums and the byte count to their initial values.
reset() - Method in class edu.harvard.hul.ois.jhove.HandlerBase
Reset the handler.
reset() - Method in class edu.harvard.hul.ois.jhove.module.pdf.Parser
Clear the state of the parser so that it can start reading at a different place in the file.
reset() - Method in interface edu.harvard.hul.ois.jhove.OutputHandler
Reset the handler.
reset() - Method in class edu.harvard.hul.ois.jhove.Utf8BlockMarker
Clears all marked blocks.
resetAbort() - Method in class edu.harvard.hul.ois.jhove.JhoveBase
Resets the abort flag.
resetLoose() - Method in class edu.harvard.hul.ois.jhove.module.pdf.Parser
Clear the state of the parser so that it can start reading at a different place in the file and ignore any nesting errors.
resetParams() - Method in class edu.harvard.hul.ois.jhove.HandlerBase
Reset parameter settings.
resetParams() - Method in class edu.harvard.hul.ois.jhove.module.PdfModule
Reset parameter settings.
resetParams() - Method in interface edu.harvard.hul.ois.jhove.Module
Reset parameter settings.
resetParams() - Method in class edu.harvard.hul.ois.jhove.module.XmlModule
Reset parameter settings.
resetParams() - Method in class edu.harvard.hul.ois.jhove.ModuleBase
Reset parameter settings.
resetParams() - Method in interface edu.harvard.hul.ois.jhove.OutputHandler
Reset parameter settings.
resetReader() - Method in class edu.harvard.hul.ois.jhove.ByteArrayXMPSource
 
resetReader() - Method in class edu.harvard.hul.ois.jhove.module.pdf.PdfXMPSource
 
resetReader() - Method in class edu.harvard.hul.ois.jhove.XMPSource
Causes reading to begin from the start again.
ResolutionBox - Class in edu.harvard.hul.ois.jhove.module.jpeg2000
Resolution box.
ResolutionBox(RandomAccessFile, BoxHolder) - Constructor for class edu.harvard.hul.ois.jhove.module.jpeg2000.ResolutionBox
Constructor with superbox.
RESOLUTIONUNIT - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Standard TIFF 6.0 tags.
resolveEntity(String, String) - Method in class edu.harvard.hul.ois.jhove.ConfigHandler
EntityResolver designed to locate the config schema.
resolveEntity(String, String) - Method in class edu.harvard.hul.ois.jhove.module.xml.XmlModuleHandler
Overrides standard resolveEntity.
resolveIndirectDest(PdfSimpleObject) - Method in class edu.harvard.hul.ois.jhove.module.PdfModule
 
resolveIndirectObject(PdfObject) - Method in class edu.harvard.hul.ois.jhove.module.PdfModule
If the argument is an indirect object reference, returns the object it resolves to, otherwise returns the object itself.
RFC - Static variable in class edu.harvard.hul.ois.jhove.DocumentType
Document type for an IETF Request for Comment.
RFC - Static variable in class edu.harvard.hul.ois.jhove.IdentifierType
Identifier type for IETF Request for Comment.
RFC1766Lang - Class in edu.harvard.hul.ois.jhove
Class encapsulating RFC-1766 language codes.
RFC1766Lang(String) - Constructor for class edu.harvard.hul.ois.jhove.RFC1766Lang
Constructor.
RGN - Static variable in class edu.harvard.hul.ois.jhove.module.jpeg2000.MarkerSegment
 
RGNMarkerSegment - Class in edu.harvard.hul.ois.jhove.module.jpeg2000
Class for the RGN (region of interest) marker segment.
RGNMarkerSegment() - Constructor for class edu.harvard.hul.ois.jhove.module.jpeg2000.RGNMarkerSegment
 
ROIBox - Class in edu.harvard.hul.ois.jhove.module.jpeg2000
ROI Description box (JPX).
ROIBox(RandomAccessFile, BoxHolder) - Constructor for class edu.harvard.hul.ois.jhove.module.jpeg2000.ROIBox
Constructor with superbox.
roiTypeStr - Static variable in class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Strings
Strings for the region type field of the ROI box.
ROWSPERSTRIP - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Standard TIFF 6.0 tags.
rreqSeen - Variable in class edu.harvard.hul.ois.jhove.module.Jpeg2000Module
 
RunLengthFilterStream - Class in edu.harvard.hul.ois.jhove.module.pdf
This is a stub which may be implemented in the future.
RunLengthFilterStream(InputStream) - Constructor for class edu.harvard.hul.ois.jhove.module.pdf.RunLengthFilterStream
 

S

SampleChunk - Class in edu.harvard.hul.ois.jhove.module.wave
Implementation of the WAVE Sample (or Sampler) Chunk, which gives information about a MIDI sample.
SampleChunk(ModuleBase, ChunkHeader, DataInputStream) - Constructor for class edu.harvard.hul.ois.jhove.module.wave.SampleChunk
Constructor.
SAMPLEFORMAT - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Standard TIFF 6.0 tags.
sampleRate - Variable in class edu.harvard.hul.ois.jhove.module.WaveModule
 
SAMPLESPERPIXEL - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Standard TIFF 6.0 tags.
SAMPLING_FREQUENCY_PLANE - Static variable in class edu.harvard.hul.ois.jhove.NisoImageMetadata
8.1.1 sampling frequency plane value labels.
SAMPLING_FREQUENCY_UNIT - Static variable in class edu.harvard.hul.ois.jhove.NisoImageMetadata
8.1.2 sampling frequency unit value labels.
satisfiesBackgroundColorIndicator(TiffIFD, int[]) - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
Checks if the value of the BackgroundColorIndicator tag matches any of the values in the array passed to it.
satisfiesBackgroundColorIndicator(TiffIFD, int) - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
Checks if the value of the BackgroundColorIndicator tag matches the value passed to it.
satisfiesClass(TiffIFD) - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffFXBase
Test for common requirements of all Tiff/FX profiles.
satisfiesCompression(TiffIFD, int[]) - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
Checks if the value of the Compression tag matches any of the values in the array passed to it.
satisfiesCompression(TiffIFD, int) - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
Checks if the value of the PlanarConfiguration tag matches the value passed to it.
satisfiesDotRange(TiffIFD, int, int) - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
Checks the DotRange against a minimum and a maximum value.
satisfiesFillOrder(TiffIFD, int[]) - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
Checks if the value of the Indexed tag matches any of the values in the array passed to it.
satisfiesImageColorIndicator(TiffIFD, int[]) - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
Checks if the value of the ImageColorIndicator tag matches any of the values in the array passed to it.
satisfiesImageColorIndicator(TiffIFD, int) - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
Checks if the value of the ImageColorIndicator tag matches the value passed to it.
satisfiesImageWidth(TiffIFD, int[]) - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
Checks if the value of the ImageWidth tag matches any of the values in the array passed to it.
satisfiesIndexed(TiffIFD, int[]) - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
Checks if the value of the Indexed tag matches any of the values in the array passed to it.
satisfiesLevelA() - Method in class edu.harvard.hul.ois.jhove.module.pdf.AProfile
Returns true if the document was found to be Level A conformant.
satisfiesNewSubfileType(TiffIFD, long[]) - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
Checks if the value of the NewSubfileType tag matches any of the values in the array passed to it.
satisfiesNewSubfileType(TiffIFD, long) - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
Checks if the value of the NewSubfileType tag matches the value passed to it.
satisfiesOrientation(TiffIFD, int[]) - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
Checks if the value of the Orientation tag matches any of the values in the array passed to it.
satisfiesOrientation(TiffIFD, int) - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
Checks if the value of the Orientation tag matches the value passed to it.
satisfiesPhotometricInterpretation(TiffIFD, int[]) - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
Checks if the value of the PhotometricInterpretation tag matches any of the values in the array passed to it.
satisfiesPhotometricInterpretation(TiffIFD, int) - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
Checks if the value of the PhotometricInterpretation tag matches the value passed to it.
satisfiesPlanarConfiguration(TiffIFD, int[]) - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
Checks if the value of the PlanarConfiguration tag matches any of the values in the array passed to it.
satisfiesPlanarConfiguration(TiffIFD, int) - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
Checks if the value of the PlanarConfiguration tag matches the value passed to it.
satisfiesProfile(RandomAccessFile, Parser) - Method in class edu.harvard.hul.ois.jhove.module.pdf.PdfProfile
Returns true if the document satisfies the profile.
satisfiesProfile(IFD) - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
Returns true if the IFD satisfies the profile.
satisfiesResolutionUnit(TiffIFD, int[]) - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
Checks if the value of the ResolutionUnit tag matches any of the values in the array passed to it.
satisfiesResolutionUnit(TiffIFD, int) - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
Checks if the value of the ResolutionUnit tag matches the value passed to it.
satisfiesSamplesPerPixel(TiffIFD, int[]) - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
Checks if the value of the SamplesPerPixel tag matches any of the values in the array passed to it.
satisfiesSamplesPerPixel(TiffIFD, int) - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
Checks if the value of the SamplesPerPixel tag matches the value passed to it.
satisfiesThisProfile() - Method in class edu.harvard.hul.ois.jhove.module.pdf.AProfile
Returns true if the document satisfies the profile at Level B or better.
satisfiesThisProfile() - Method in class edu.harvard.hul.ois.jhove.module.pdf.AProfileLevelA
Returns true if the document satisfies the profile at Level A.
satisfiesThisProfile() - Method in class edu.harvard.hul.ois.jhove.module.pdf.LinearizedProfile
Returns true if the document satisfies the profile.
satisfiesThisProfile() - Method in class edu.harvard.hul.ois.jhove.module.pdf.PdfProfile
Returns true if the document satisfies the profile.
satisfiesThisProfile() - Method in class edu.harvard.hul.ois.jhove.module.pdf.TaggedProfile
Returns true if the document satisfies the profile.
satisfiesThisProfile() - Method in class edu.harvard.hul.ois.jhove.module.pdf.X1aProfile
Returns true if the document satisfies the profile.
satisfiesThisProfile() - Method in class edu.harvard.hul.ois.jhove.module.pdf.X1Profile
Returns true if the document satisfies the profile.
satisfiesThisProfile() - Method in class edu.harvard.hul.ois.jhove.module.pdf.X2Profile
Returns true if the document satisfies the profile.
satisfiesThisProfile() - Method in class edu.harvard.hul.ois.jhove.module.pdf.X3Profile
Returns true if the document satisfies the profile.
satisfiesThisProfile(IFD) - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
Returns true if the IFD satisfies the profile.
satisfiesThisProfile(IFD) - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassB
Returns true if the IFD satisfies the requirements of a Class B profile.
satisfiesThisProfile(IFD) - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassF
Returns true if the IFD satisfies the requirements of a Class F profile.
satisfiesThisProfile(IFD) - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassG
Returns true if the IFD satisfies the requirements of a Class G profile.
satisfiesThisProfile(IFD) - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassIT
Returns true if the IFD satisfies the requirements which are common to all Tiff IT profiles.
satisfiesThisProfile(IFD) - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassITBL
Returns true if the IFD satisfies the requirements of the profile.
satisfiesThisProfile(IFD) - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassITBLP1
Returns true if the IFD satisfies the requirements of the profile.
satisfiesThisProfile(IFD) - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassITBP
Returns true if the IFD satisfies the requirements of the profile.
satisfiesThisProfile(IFD) - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassITBPP1
Returns true if the IFD satisfies the requirements of the profile.
satisfiesThisProfile(IFD) - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassITBPP2
Returns true if the IFD satisfies the requirements of the profile.
satisfiesThisProfile(IFD) - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassITCT
Returns true if the IFD satisfies the requirements of the profile.
satisfiesThisProfile(IFD) - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassITCTP1
Returns true if the IFD satisfies the requirements of the profile.
satisfiesThisProfile(IFD) - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassITCTP2
Returns true if the IFD satisfies the requirements of the profile.
satisfiesThisProfile(IFD) - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassITFP
Returns true if the IFD satisfies the requirements of the profile.
satisfiesThisProfile(IFD) - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassITFPP1
Returns true if the IFD satisfies the requirements of the profile.
satisfiesThisProfile(IFD) - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassITFPP2
Returns true if the IFD satisfies the requirements of the profile.
satisfiesThisProfile(IFD) - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassITHC
Returns true if the IFD satisfies the requirements of the profile.
satisfiesThisProfile(IFD) - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassITHCP1
Returns true if the IFD satisfies the requirements of the profile.
satisfiesThisProfile(IFD) - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassITHCP2
Returns true if the IFD satisfies the requirements of the profile.
satisfiesThisProfile(IFD) - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassITLW
Returns true if the IFD satisfies the requirements of the profile.
satisfiesThisProfile(IFD) - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassITLWP1
Returns true if the IFD satisfies the requirements of the profile.
satisfiesThisProfile(IFD) - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassITLWP2
Returns true if the IFD satisfies the requirements of the profile.
satisfiesThisProfile(IFD) - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassITMP
Returns true if the IFD satisfies the requirements of the profile.
satisfiesThisProfile(IFD) - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassITMPP1
Returns true if the IFD satisfies the requirements of the profile.
satisfiesThisProfile(IFD) - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassITMPP2
Returns true if the IFD satisfies the requirements of the profile.
satisfiesThisProfile(IFD) - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassITSD
Returns true if the IFD satisfies the requirements of the profile.
satisfiesThisProfile(IFD) - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassITSDP2
Returns true if the IFD satisfies the requirements of the profile.
satisfiesThisProfile(IFD) - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassP
Returns true if the IFD satisfies the requirements of a Class P profile.
satisfiesThisProfile(IFD) - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassR
Returns true if the IFD satisfies the requirements of a Class R profile.
satisfiesThisProfile(IFD) - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassY
Returns true if the IFD satisfies the requirements of a Class Y profile.
satisfiesThisProfile(IFD) - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffProfileDLF
Returns true if the IFD satisfies the requirements that are common to the bilevel, grayscale, and color DLF profiles.
satisfiesThisProfile(IFD) - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffProfileDLFBW
Returns true if the IFD satisfies the requirements of the profile.
satisfiesThisProfile(IFD) - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffProfileDLFColor
Returns true if the IFD satisfies the requirements of the profile.
satisfiesThisProfile(IFD) - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffProfileDLFGray
Returns true if the IFD satisfies the requirements of the profile.
satisfiesThisProfile(IFD) - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffProfileDNG
Returns true if the IFD satisfies the requirements of the profile.
satisfiesThisProfile(IFD) - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffProfileDNGThumb
Returns true if the IFD satisfies the requirements of a DNG thumbnail profile.
satisfiesThisProfile(IFD) - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffProfileEP
Returns true if the IFD satisfies the requirements of a TIFF/EP profile.
satisfiesThisProfile(IFD) - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffProfileExif
Returns true if the IFD satisfies the requirements of an Exif profile.
satisfiesThisProfile(IFD) - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffProfileExifIFD
Returns true if the IFD satisfies the requirements of an Exif profile.
satisfiesThisProfile(IFD) - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffProfileExifThumb
Returns true if the IFD satisfies the requirements of a thumbnail IFD for an Exif profile.
satisfiesThisProfile(IFD) - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffProfileFXC
Returns true if the IFD satisfies the requirements of a TIFF/FX C profile.
satisfiesThisProfile(IFD) - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffProfileFXF
Returns true if the IFD satisfies the requirements of a TIFF/FX S profile.
satisfiesThisProfile(IFD) - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffProfileFXJ
Returns true if the IFD satisfies the requirements of a TIFF/FX J profile.
satisfiesThisProfile(IFD) - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffProfileFXL
Returns true if the IFD satisfies the requirements of a TIFF/FX L profile.
satisfiesThisProfile(IFD) - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffProfileFXM
Returns true if the IFD satisfies the requirements of a TIFF/FX M profile.
satisfiesThisProfile(IFD) - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffProfileFXS
Returns true if the IFD satisfies the requirements of a TIFF/FX S profile.
satisfiesThisProfile(IFD) - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffProfileGeoTIFF
Returns true if the IFD satisfies the requirements of the the profile.
satisfiesThisProfile(IFD) - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffProfilePagemaker6
Returns true if the IFD satisfies the requirements of the profile.
satisfiesThisProfile(IFD) - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffProfilePhotoshop
Returns true if the IFD satisfies the requirements of the profile.
satisfiesThisProfile(IFD) - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffProfileRFC1314
Returns true if the IFD satisfies the requirements of the profile.
satisfiesXResolution(TiffIFD, int[]) - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
Checks if the value of the XResolution tag matches any of the values in the array passed to it.
satisfiesYResolution(TiffIFD, int[]) - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
Checks if the value of the XResolution tag matches any of the values in the array passed to it.
SATURATION_L - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.ExifIFD
 
saveAndShow() - Method in class edu.harvard.hul.ois.jhove.viewer.PrefsWindow
This is called when the window is made visible.
SaxelChunk - Class in edu.harvard.hul.ois.jhove.module.aiff
Implementation of the AIFF Saxel (Sound Accelerator) Chunk.
SaxelChunk(AiffModule, ChunkHeader, DataInputStream) - Constructor for class edu.harvard.hul.ois.jhove.module.aiff.SaxelChunk
Constructor.
SBYTE - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.IFD
TIFF SBYTE (signed 8-bit) type.
SCALAR - Static variable in class edu.harvard.hul.ois.jhove.PropertyArity
An Arity corresponding to a simple object, which must be of a type corresponding to one of the instances of PropertyType.
SCAN_INDEX - Static variable in class edu.harvard.hul.ois.jhove.module.jpeg.Spiff
 
scanMode(boolean) - Method in class edu.harvard.hul.ois.jhove.module.pdf.Parser
If true, do not attempt to parse non-whitespace delimited tokens, e.g., literal and hexadecimal strings.
scanMode(boolean) - Method in class edu.harvard.hul.ois.jhove.module.pdf.Tokenizer
If true, do not attempt to parse non-whitespace delimited tokens, e.g., literal and hexadecimal strings.
SCENE_ILLUMINANT - Static variable in class edu.harvard.hul.ois.jhove.NisoImageMetadata
7.7.3.7 scene illuminant value labels.
SCENE_ILLUMINANT_INDEX - Static variable in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Index for 7.7.3.7 scene illuminant value labels.
SCENECAPTURETYPE_L - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.ExifIFD
 
SCENETYPE_L - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.ExifIFD
 
SCHEMA_VERSION - Static variable in class edu.harvard.hul.ois.jhove.AESAudioMetadata
Constant value for the SchemaVersion field
search(String) - Method in class edu.harvard.hul.ois.jhove.module.html.HtmlStack
Searches backwards through the element stack for a match to a given tag.
seek(long) - Method in class edu.harvard.hul.ois.jhove.module.Jpeg2000Module
Seek to a new file position.
seek(long) - Method in class edu.harvard.hul.ois.jhove.module.pdf.FileTokenizer
Set the Tokenizer to a new position in the file.
seek(long) - Method in class edu.harvard.hul.ois.jhove.module.pdf.Parser
Positions the file to the specified offset, and resets the state for a new token stream.
seek(long) - Method in class edu.harvard.hul.ois.jhove.module.pdf.StreamTokenizer
Set the Tokenizer to a new position in the stream.
seek(long) - Method in class edu.harvard.hul.ois.jhove.module.pdf.Tokenizer
Set the Tokenizer to a new position in the file.
seek(long) - Method in class edu.harvard.hul.ois.jhove.RAFInputStream
Positions the stream to a different point in the file.
seekReset(long) - Method in class edu.harvard.hul.ois.jhove.module.pdf.Tokenizer
Reset after a seek.
seemsToBeXHTML(List) - Method in class edu.harvard.hul.ois.jhove.module.HtmlModule
 
SEGMENT_TYPE - Static variable in class edu.harvard.hul.ois.jhove.NisoImageMetadata
6.1.5.1 segment type value labels.
selectHandler() - Method in class edu.harvard.hul.ois.jhove.viewer.InfoWindow
Sets up the OutputHandler from the JComboBox and returns it.
selectMimeTypeIndex() - Method in class edu.harvard.hul.ois.jhove.module.TiffModule
Return the index into _mimeType which should be used for the MIME type property.
selfDescProperty() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.AssociationBox
Returns a Property which describes the Box, for use by Association boxes and perhaps others.
selfDescProperty() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
Returns a Property which describes the Box, for use by Association boxes and perhaps others.
SENSINGMETHOD_L - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.ExifIFD
 
SENSOR - Static variable in class edu.harvard.hul.ois.jhove.NisoImageMetadata
7.8 sensor value labels.
SEQ0_1 - Static variable in class edu.harvard.hul.ois.jhove.module.html.HtmlTagDesc
Value in _sequence indicating an element may be used 0 or 1 times.
SEQ0_MANY - Static variable in class edu.harvard.hul.ois.jhove.module.html.HtmlTagDesc
Value in _sequence indicating an element may be used 0 or more times.
SEQ1 - Static variable in class edu.harvard.hul.ois.jhove.module.html.HtmlTagDesc
Value in _sequence indicating an element must be used exactly once.
SEQ1_MANY - Static variable in class edu.harvard.hul.ois.jhove.module.html.HtmlTagDesc
Value in _sequence indicating an element may be used 1 or more times.
SET - Static variable in class edu.harvard.hul.ois.jhove.PropertyArity
An Arity corresponding to java.util.Set or any of its derived classes.
setAddress(String) - Method in class edu.harvard.hul.ois.jhove.Agent
Sets the value of the address property.
setAlreadyOK(boolean) - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
Sets the value of the alreadyOK flag.
setAnalogDigitalFlag(String) - Method in class edu.harvard.hul.ois.jhove.AESAudioMetadata
Sets the analog/digital flag.
setApp(App) - Method in class edu.harvard.hul.ois.jhove.HandlerBase
Pass the associated App object to this Module.
setApp(App) - Method in interface edu.harvard.hul.ois.jhove.Module
Pass the associated App object to this Module.
setApp(App) - Method in class edu.harvard.hul.ois.jhove.ModuleBase
Pass the associated App object to this Module.
setApp(App) - Method in interface edu.harvard.hul.ois.jhove.OutputHandler
Assigns an application object to provide services to this handler
setAppSpecificData(String) - Method in class edu.harvard.hul.ois.jhove.AESAudioMetadata
Set the application-specific data.
setAProfile(AProfile) - Method in class edu.harvard.hul.ois.jhove.module.pdf.AProfileLevelA
Calling setAProfile links this AProfile to a TaggedProfile.
setAttributes(String[]) - Method in class edu.harvard.hul.ois.jhove.module.html.HtmlTagDesc
Alternative way of setting the attribute names.
setAudioDataEncoding(String) - Method in class edu.harvard.hul.ois.jhove.AESAudioMetadata
Sets the audio data encoding.
setAuthor(Agent) - Method in class edu.harvard.hul.ois.jhove.Document
Adds an author to the list of authors
setAutoFocus(int) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 7.7.3.15 auto focus.
setBackLight(int) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 7.7.3.13 back light.
setBase(JhoveBase) - Method in class edu.harvard.hul.ois.jhove.HandlerBase
Assigns the JHOVE engine object to provide services to this handler
setBase(JhoveBase) - Method in interface edu.harvard.hul.ois.jhove.Module
Pass the JHOVE engine object to this Module.
setBase(JhoveBase) - Method in class edu.harvard.hul.ois.jhove.ModuleBase
Pass the JHOVE engine object to this Module.
setBase(JhoveBase) - Method in interface edu.harvard.hul.ois.jhove.OutputHandler
Assigns the JHOVE engine object to provide services to this handler
setBitDepth(int) - Method in interface edu.harvard.hul.ois.jhove.AESAudioMetadata.FormatRegion
Sets the bit depth value.
setBitDepth(int) - Method in class edu.harvard.hul.ois.jhove.AESAudioMetadata
Sets the bit depth.
setBitrateReduction(String, String, String, String, String, String, String) - Method in interface edu.harvard.hul.ois.jhove.AESAudioMetadata.FormatRegion
Sets the bitrate reduction (aka compression type).
setBitrateReduction(String, String, String, String, String, String, String) - Method in class edu.harvard.hul.ois.jhove.AESAudioMetadata
Sets the bitrate reduction (compression type).
setBitsPerSample(int[]) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 8.2.1 bits per sample.
setBlockAlign(int) - Method in class edu.harvard.hul.ois.jhove.module.WaveModule
Set the number of bytes that holds an aligned sample.
setBodyElement(HtmlTagDesc) - Method in class edu.harvard.hul.ois.jhove.module.html.HtmlStack
Sets the value of the HEAD element for easy comparison
setBoxHeader(BoxHeader) - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
Sets the BoxHeader from which this Box was obtained.
setBrightness(double) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 7.7.3.3 brightness.
setBroadcastVersion(int) - Method in class edu.harvard.hul.ois.jhove.module.WaveModule
Set the version from the Broadcast Extension chunk.
setBroadcastWave(boolean) - Method in class edu.harvard.hul.ois.jhove.module.WaveModule
Set the profile flag for Broadcast Wave.
setBufferSize(int) - Method in class edu.harvard.hul.ois.jhove.JhoveBase
Sets the buffer size.
setByte_order(int) - Method in class edu.harvard.hul.ois.jhove.TextMDMetadata
 
setByte_size(String) - Method in class edu.harvard.hul.ois.jhove.TextMDMetadata
 
setByteCount(long, boolean) - Method in class edu.harvard.hul.ois.jhove.viewer.ProgressWindow
Update the byte count.
setByteOffsetValid(boolean) - Method in class edu.harvard.hul.ois.jhove.module.TiffModule
Allow odd offsets in values
setByteOrder(int) - Method in class edu.harvard.hul.ois.jhove.AESAudioMetadata
Sets the byte order.
setByteOrder(String) - Method in class edu.harvard.hul.ois.jhove.AESAudioMetadata
Sets the byte order.
setByteOrder(String) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 6.1.2 byte order.
setCallback(Callback) - Method in class edu.harvard.hul.ois.jhove.JhoveBase
Sets a callback object for tracking progress.
setCharacter_size(String) - Method in class edu.harvard.hul.ois.jhove.TextMDMetadata
 
setCharset(String) - Method in class edu.harvard.hul.ois.jhove.module.html.HtmlMetadata
Stores the charset defined in the HTML element.
setCharset(String) - Method in class edu.harvard.hul.ois.jhove.TextMDMetadata
 
setChecksum(Checksum) - Method in class edu.harvard.hul.ois.jhove.RepInfo
Append a Checksum object to the checksum list.
setChecksumFlag(boolean) - Method in class edu.harvard.hul.ois.jhove.JhoveBase
Sets the value to be returned by doChecksum().
setChecksums(Checksummer, RepInfo) - Method in class edu.harvard.hul.ois.jhove.ModuleBase
Set the checksum values.
setCodestream(Codestream) - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.MarkerSegment
Sets the Codestream object being built.
setCODProperty(Property) - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.MainOrTile
Sets the coding style default property.
setColormapBitCodeValue(int[]) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 8.2.4.2 colormap bit code value.
setColormapBlueValue(int[]) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 8.2.4.4 colormap blue value.
setColormapGreenValue(int[]) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 8.2.4.3 colormap green value.
setColormapRedValue(int[]) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 8.2.4.2 colormap red value.
setColormapReference(String) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 8.2.4.1 colormap reference.
setColorSpace(int) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 6.1.4.1 color space
setColorSpecSeen(boolean) - Method in class edu.harvard.hul.ois.jhove.module.Jpeg2000Module
Set the flag indicating the color specification box has been seen.
setColorTemp(double) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 7.7.3.8 color temperature.
setCompMapProperty(Property) - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.Codestream
Sets the component mapping property.
setCompProperty(int, Property) - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.Codestream
Set a property indexed by component.
setCompProperty(int, Property) - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.MainOrTile
Sets a property indexed by component.
setCompressionCode(int) - Method in class edu.harvard.hul.ois.jhove.module.WaveModule
Set the compression format.
setCompressionLevel(int) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 6.1.3.2 compression level.
setCompressionScheme(int) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 6.1.3.1 compression scheme.
setConsistent(boolean) - Method in class edu.harvard.hul.ois.jhove.RepInfo
Set the value of the consistency flag
setContCodestream(ContCodestream) - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.MarkerSegment
Sets the Continuous Codestream from which this marker was obtained.
setContentLength(long, boolean) - Method in class edu.harvard.hul.ois.jhove.viewer.ProgressWindow
Set the total length to be displayed.
setCRC32(CRC32) - Method in class edu.harvard.hul.ois.jhove.ModuleBase
Set the value of the CRC32 calculated for the content object.
setCreated(Date) - Method in class edu.harvard.hul.ois.jhove.RepInfo
Set the creation date
setCRGProperty(Property) - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.Codestream
 
setCurrentThread(Thread) - Method in class edu.harvard.hul.ois.jhove.JhoveBase
Sets the current thread for parsing.
setCurTile(Tile) - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.ContCodestream
Sets the value of curTile.
setDataInputStream(DataInputStream) - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
Assigns the DataInputStream from which the box is being read.
setDataInputStream(DataInputStream) - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.MarkerSegment
Sets the DataInputStream over which this marker is being read.
setDate(String) - Method in class edu.harvard.hul.ois.jhove.Document
Sets the date of this Document
setDateTimeCreated(String) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 7.9 date/time created.
setDateTimeProcessed(String) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 9.1.1 DateTimeProcessed.
setDebugStream(PrintStream) - Method in class edu.harvard.hul.ois.jhove.module.html.ParseHtmlTokenManager
 
setDecodeParms(PdfDictionary) - Method in class edu.harvard.hul.ois.jhove.module.pdf.Filter
Stores the DecodeParms or FDecodeParms dictionary which is associated with this filter.
setDefaultNiso(NisoImageMetadata) - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.Codestream
Set the initial Niso values from a default Niso object.
setDefaultParams(List) - Method in class edu.harvard.hul.ois.jhove.HandlerBase
Set a a List of default parameters for the module.
setDefaultParams(List) - Method in interface edu.harvard.hul.ois.jhove.Module
Sets list of default parameters.
setDefaultParams(List) - Method in class edu.harvard.hul.ois.jhove.ModuleBase
Set a a List of default parameters for the module.
setDefaultParams(List) - Method in interface edu.harvard.hul.ois.jhove.OutputHandler
Sets list of default parameters.
setDeviceSource(String) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 7.5 Device source.
setDigitalCameraManufacturer(String) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 7.7.1 digital camera manufacturer.
setDigitalCameraModel(String) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 7.7.2 digital camera model.
setDirection(String) - Method in interface edu.harvard.hul.ois.jhove.AESAudioMetadata.Face
Sets the direction.
setDirection(String) - Method in class edu.harvard.hul.ois.jhove.AESAudioMetadata
Sets the direction.
setDirectory(String) - Method in class edu.harvard.hul.ois.jhove.handler.audit.AuditState
Sets the directory path.
setDisplayOrientation(int) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 6.2.5 display orientation.
setDisposition(String) - Method in class edu.harvard.hul.ois.jhove.AESAudioMetadata
Sets the disposition.
setDoChecksum(boolean) - Method in class edu.harvard.hul.ois.jhove.viewer.JhoveWindow
Sets the checksum flag.
setDocName(String, boolean) - Method in class edu.harvard.hul.ois.jhove.viewer.ProgressWindow
Set the name of the document being displayed.
setDuration(long) - Method in interface edu.harvard.hul.ois.jhove.AESAudioMetadata.Face
Sets the duration.
setDuration(long) - Method in interface edu.harvard.hul.ois.jhove.AESAudioMetadata.FaceRegion
Sets the duration.
setDuration(long) - Method in class edu.harvard.hul.ois.jhove.AESAudioMetadata
Sets the duration in samples.
setEdition(String) - Method in class edu.harvard.hul.ois.jhove.Document
Sets edition information for this Document
setElement(HtmlTagDesc) - Method in class edu.harvard.hul.ois.jhove.module.html.JHOpenTag
Associates an the tag with an element definition.
setEmail(String) - Method in class edu.harvard.hul.ois.jhove.Agent
Sets the value of the email property.
setEncoding(String) - Method in class edu.harvard.hul.ois.jhove.HandlerBase
Assigns the encoding to be used by this OutputHandler
setEncoding(String) - Method in class edu.harvard.hul.ois.jhove.JhoveBase
Sets the output encoding.
setEncoding(String) - Method in interface edu.harvard.hul.ois.jhove.OutputHandler
Assigns the encoding to be used by this OutputHandler
setEncrypted(boolean) - Method in class edu.harvard.hul.ois.jhove.module.pdf.Parser
Tells this Parser, and its Tokenizer, whether the file is encrypted.
setEncrypted(boolean) - Method in class edu.harvard.hul.ois.jhove.module.pdf.Tokenizer
Tell this object that the file is or isn't encrypted.
setEndian(boolean) - Method in class edu.harvard.hul.ois.jhove.module.AiffModule
Sets the endian-ness.
setEnumeration(String) - Method in class edu.harvard.hul.ois.jhove.Document
Sets enumeration information (e.g., serial volume and number) for this Document
setExcludedContent(String[]) - Method in class edu.harvard.hul.ois.jhove.module.html.HtmlTagDesc
Specifies tags which may not be included in this element or in any element nested at any depth within it.
setExifInfo(ExifInfo) - Method in class edu.harvard.hul.ois.jhove.module.WaveModule
Sets an ExifInfo object for the module.
setExifVersion(String) - Method in class edu.harvard.hul.ois.jhove.module.wave.ExifInfo
Converts the raw 4-byte array into a version string and stores it.
setExposureBias(double) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 7.2.3.4 exposure bias.
setExposureIndex(double) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 7.2.3.14 exposure index.
setExposureTime(double) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 7.7.3.2 exposure time.
setExtraSamples(int[]) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 8.2.3 extra samples.
setFax(String) - Method in class edu.harvard.hul.ois.jhove.Agent
Sets the value of the fax property.
setFileSize(long) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 6.2.2 file size.
setFilters(Filter[]) - Method in class edu.harvard.hul.ois.jhove.module.pdf.Stream
Sets the array of filters used by the stream.
setFirst(boolean) - Method in class edu.harvard.hul.ois.jhove.module.tiff.IFD
Sets flag indicating whether this is the first IFD.
setFirstSampleOffset(long) - Method in class edu.harvard.hul.ois.jhove.AESAudioMetadata
Sets the offset of the first byte of sample data.
setFlash(int) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 7.7.3.10 flash.
setFlashEnergy(double) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 7.7.3.11 flash energy.
setFlashReturn(int) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 7.7.3.12 flash return.
setFNumber(double) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 7.7.3.1 F number.
setFocalLength(double) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 7.7.3.9 focal length (double meters).
setFormat(String) - Method in class edu.harvard.hul.ois.jhove.AESAudioMetadata
Sets the format name.
setFormat(String) - Method in class edu.harvard.hul.ois.jhove.RepInfo
Set the format identifier
setFramesetElement(HtmlTagDesc) - Method in class edu.harvard.hul.ois.jhove.module.html.HtmlStack
Sets the value of the HEAD element for easy comparison
setGenNumber(int) - Method in class edu.harvard.hul.ois.jhove.module.pdf.PdfObject
Sets the PDF generation number.
setGrayResponseCurve(int[]) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 8.2.5 gray response curve.
setGrayResponseUnit(int) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 8.2.6 gray response unit.
setHeadElement(HtmlTagDesc) - Method in class edu.harvard.hul.ois.jhove.module.html.HtmlStack
Sets the value of the HEAD element for easy comparison
setHeight(long) - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.CompositionBox
Set the height value.
setHorScale(int) - Method in class edu.harvard.hul.ois.jhove.module.jpeg.Tiling
 
setHostComputer(String) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 7.4 host computer.
setID(String) - Method in class edu.harvard.hul.ois.jhove.module.iff.ChunkHeader
Sets the chunk type, which is a 4-character code, directly.
setIdentifier(Identifier) - Method in class edu.harvard.hul.ois.jhove.Document
Adds an Identifier to the list of identifiers
setImageData(String) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 8.3.3 ImageData.
setImageHeaderSeen(boolean) - Method in class edu.harvard.hul.ois.jhove.module.Jpeg2000Module
Set the flag indicating the color specification box has been seen.
setImageIdentifier(String) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 6.2.1 Image identifier.
setImageIdentifierLocation(String) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 6.2.1 Image identifier location.
setImageLength(long) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 8.1.6 image length.
setImageProducer(String) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 7.3 image producer.
setImageWidth(long) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 8.1.5 image width.
setJP2Compliant(boolean) - Method in class edu.harvard.hul.ois.jhove.module.Jpeg2000Module
Sets a flag indicating JP2 compliance.
setJP2HdrSeen(boolean) - Method in class edu.harvard.hul.ois.jhove.module.Jpeg2000Module
Set the flag indicating that a JP2 header has been seen.
setJPXCompliant(boolean) - Method in class edu.harvard.hul.ois.jhove.module.Jpeg2000Module
Sets a flag indicating JPX compliance.
setLabelProperty(Property) - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.Codestream
Sets the label property.
setLanguage(String) - Method in class edu.harvard.hul.ois.jhove.module.html.HtmlMetadata
Stores the language defined in the HTML element.
setLanguage(String) - Method in class edu.harvard.hul.ois.jhove.TextMDMetadata
 
setLastModified(Date) - Method in class edu.harvard.hul.ois.jhove.RepInfo
Set the last modified date
setLength(long) - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.TilePart
Sets the length field.
setLength(long) - Method in class edu.harvard.hul.ois.jhove.module.pdf.Stream
Sets the length field.
setLinebreak(int) - Method in class edu.harvard.hul.ois.jhove.TextMDMetadata
 
setLogLevel(String) - Method in class edu.harvard.hul.ois.jhove.JhoveBase
Sets the log level.
setLoop(int) - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.CompositionBox
Set the loop value.
setMainCompression(int) - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffProfileExifThumb
Record the compression scheme of the main IFD; required for comparison.
setMakerNote(byte[]) - Method in class edu.harvard.hul.ois.jhove.module.wave.ExifInfo
Sets the maker note.
setManufacturer(String) - Method in class edu.harvard.hul.ois.jhove.module.wave.ExifInfo
Sets the manufacturer of the equipment that produced the file.
setMapLocations(String[]) - Method in interface edu.harvard.hul.ois.jhove.AESAudioMetadata.FaceRegion
Sets the channel map locations.
setMapLocations(String[]) - Method in class edu.harvard.hul.ois.jhove.AESAudioMetadata
Sets the array of channel map locations.
setMarkup_basis(String) - Method in class edu.harvard.hul.ois.jhove.TextMDMetadata
 
setMarkup_basis_version(String) - Method in class edu.harvard.hul.ois.jhove.TextMDMetadata
 
setMarkup_language(String) - Method in class edu.harvard.hul.ois.jhove.TextMDMetadata
 
setMarkup_language_version(String) - Method in class edu.harvard.hul.ois.jhove.TextMDMetadata
 
setMD5(MessageDigest) - Method in class edu.harvard.hul.ois.jhove.ModuleBase
Sets the MD5 calculated digest for the content object, and sets the checksumFinished flag.
setMessage(Message) - Method in class edu.harvard.hul.ois.jhove.RepInfo
Append a Message object to the message list
setMeteringMode(int) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 7.7.3.6 metering mode.
setMethodology(String) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 7.10 methodology.
setMimeType(String) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 6.1.1 MIME type.
setMimeType(String) - Method in class edu.harvard.hul.ois.jhove.RepInfo
Set the MIME type string
setModel(String) - Method in class edu.harvard.hul.ois.jhove.module.wave.ExifInfo
Sets the model of the equipment that produced the file.
setModule(Jpeg2000Module) - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
Sets the module under which the Box is being read.
setModule(Jpeg2000Module) - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.MarkerSegment
Sets the Module under which all this is happening.
setModule(Module) - Method in class edu.harvard.hul.ois.jhove.RepInfo
Add the module.
setName(String) - Method in class edu.harvard.hul.ois.jhove.Agent
Sets the value of the name property.
setNByte(long) - Method in class edu.harvard.hul.ois.jhove.ModuleBase
Sets the byte count for the content object, and sets the checksumFinished flag.
setNCodestreamHeaders(int) - Method in class edu.harvard.hul.ois.jhove.module.Jpeg2000Module
Sets the codestream header count.
setNCodestreams(int) - Method in class edu.harvard.hul.ois.jhove.module.Jpeg2000Module
Sets the codestream count.
setNote(String) - Method in class edu.harvard.hul.ois.jhove.Agent
Sets the value of the note property.
setNote(String) - Method in class edu.harvard.hul.ois.jhove.Document
Sets a note giving additional information about this Document
setNote(String) - Method in class edu.harvard.hul.ois.jhove.RepInfo
Set the note string
setNotFound(int) - Method in class edu.harvard.hul.ois.jhove.handler.audit.AuditState
Sets the count of files not found.
setNotProcessed(int) - Method in class edu.harvard.hul.ois.jhove.handler.audit.AuditCount
Sets the count of files that are not processed.
setNumChannels(int) - Method in class edu.harvard.hul.ois.jhove.AESAudioMetadata
Sets the number of channels.
setNumComponents(int) - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.MainOrTile
Sets the number of components.
setObjectMap(Map) - Method in class edu.harvard.hul.ois.jhove.module.pdf.Parser
Set the object map on which the parser will work.
setObjNumber(int) - Method in class edu.harvard.hul.ois.jhove.module.pdf.PdfObject
Sets the PDF object number.
setOffset(long) - Method in class edu.harvard.hul.ois.jhove.module.pdf.Stream
Sets the offset field.
setOfUnknownJavaCharset - Static variable in class edu.harvard.hul.ois.jhove.TextMDMetadata
Set of unknown charsets in Java
setOrientation(int) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 6.2.4 orientation.
setOS(String) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
 
setOSVersion(String) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 7.4.2 OS version.
setOtherPrimaryIdentifierType(String) - Method in class edu.harvard.hul.ois.jhove.AESAudioMetadata
Sets the primary identifier type as "OTHER", and set the otherType.
setPages(String) - Method in class edu.harvard.hul.ois.jhove.Document
Sets pagination information for this Document
setPaletteProperty(Property) - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.Codestream
Sets the palette property.
setPCMWaveFormat(boolean) - Method in class edu.harvard.hul.ois.jhove.module.WaveModule
Set the profile flag for PCMWAVEFORMAT.
setPDFACompliant(boolean) - Method in class edu.harvard.hul.ois.jhove.module.pdf.Parser
Set the value of the pdfACompliant flag.
setPDFACompliant(boolean) - Method in class edu.harvard.hul.ois.jhove.module.pdf.Tokenizer
Set the value of the pdfACompliant flag.
setPDFDocEncoding(boolean) - Method in class edu.harvard.hul.ois.jhove.module.pdf.Literal
Sets the value of pDFDocEncoding.
setPerformanceData(String) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 8.3.4 PerformanceData.
setPixelSize(double) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 7.6.3.1 pixel size.
setPlanarConfiguration(int) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 6.1.6 Planar configuration.
setPOCProperty(Property) - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.MainOrTile
Sets the progression order change property.
setPPMSeen(boolean) - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.ContCodestream
Sets the value of the ppmSeen flag, signifying that a PPM marker segment has been encountered.
setPreferredPresentation(String) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 6.3 preferred presentation.
setPrimaryChromaticitiesBlueX(Rational) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 8.2.8.5 primary chromaticities blue X.
setPrimaryChromaticitiesBlueY(Rational) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 8.2.8.6 primary chromaticities blue Y.
setPrimaryChromaticitiesGreenX(Rational) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 8.2.8.3 primary chromaticities green X.
setPrimaryChromaticitiesGreenY(Rational) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 8.2.8.4 primary chromaticities green Y.
setPrimaryChromaticitiesRedX(Rational) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 8.2.8.1 primary chromaticities red X.
setPrimaryChromaticitiesRedY(Rational) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 8.2.8.2 primary chromaticities red Y.
setPrimaryIdentifier(String) - Method in class edu.harvard.hul.ois.jhove.AESAudioMetadata
Sets the primary identifier.
setPrimaryIdentifierType(String) - Method in class edu.harvard.hul.ois.jhove.AESAudioMetadata
Sets the primary identifier type.
setProcessingActions(String[]) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 9.1.5 ProcessingActions.
setProcessingAgency(String) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 9.1.3 ProcessingAgency.
setProcessingSoftwareName(String) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 9.1.4.1 ProcessingSoftwareName
setProcessingSoftwareVersion(String) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 9.1.4.2 ProcessingSoftwareVersion
setProfile(String) - Method in class edu.harvard.hul.ois.jhove.RepInfo
Append a profile String to the profile list
setProfileName(String) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 6.1.4.1 ICC profile name.
setProfiles(String) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 8.3.5 Profiles.
setProfileURL(String) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 6.1.4.2 ICC profile URL.
setProgressState(int, boolean) - Method in class edu.harvard.hul.ois.jhove.viewer.ProgressWindow
Set the progress state.
setProperty(Property) - Method in class edu.harvard.hul.ois.jhove.RepInfo
Add a Property to the property map.
setPropUnderConstruction(Property) - Method in class edu.harvard.hul.ois.jhove.module.html.HtmlMetadata
Sets a "property under construction".
setPublisher(Agent) - Method in class edu.harvard.hul.ois.jhove.Document
Adds a publisher to the list of publishers
setQCDProperty(Property) - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.MainOrTile
Sets the quantization default property.
setRandomAccessFile(RandomAccessFile) - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
Assigns the RandomAccessFile from which the box is being read.
setRawOutput(boolean) - Method in class edu.harvard.hul.ois.jhove.viewer.JhoveWindow
Sets the raw output flag.
SETREF - Static variable in class edu.harvard.hul.ois.jhove.module.jpeg.Spiff
 
setReferenceBlackWhite(Rational[]) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 6.1.4.6 reference black and white.
setRefGridHeight(long) - Method in class edu.harvard.hul.ois.jhove.module.jpeg.Tiling
 
setRefGridWidth(long) - Method in class edu.harvard.hul.ois.jhove.module.jpeg.Tiling
 
setRelatedImageFile(String) - Method in class edu.harvard.hul.ois.jhove.module.wave.ExifInfo
Sets the related image file name.
setRepInfo(RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
Assigns a RepInfo object, so that subclasses of JP2Box can add Properties and Messages.
setRepInfo(RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.MarkerSegment
Sets the RepInfo into which messages may be placed.
setROIProperty(Property) - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.Codestream
Sets the ROI property.
setRowsPerStrip(long) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 6.1.5.3 Rows per strip.
setRReqSeen(boolean) - Method in class edu.harvard.hul.ois.jhove.module.Jpeg2000Module
Set the flag indicating the reader requirements box has been seen.
setSampleRate(double) - Method in interface edu.harvard.hul.ois.jhove.AESAudioMetadata.FormatRegion
Sets the sample rate.
setSampleRate(double) - Method in class edu.harvard.hul.ois.jhove.AESAudioMetadata
Sets the sample rate.
setSampleRate(long) - Method in class edu.harvard.hul.ois.jhove.module.WaveModule
Set the sample rate.
setSamplesPerPixel(int) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 8.2.2 samples per pixel.
setSamplingFrequencyPlane(int) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 8.1.1 sampling frequency plane.
setSamplingFrequencyUnit(int) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 8.1.2 sampling frequency unit.
setSaveActionListener(ActionListener) - Method in class edu.harvard.hul.ois.jhove.viewer.InfoWindow
Sets the ActionListener for the "Save as" menu item.
setSaveDirectory(File) - Method in class edu.harvard.hul.ois.jhove.JhoveBase
Sets the default directory for subsequent save operations.
setScannerManufacturer(String) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 7.6.1.1 scanner manufacturer.
setScannerModelName(String) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 7.6.1.2.1 scanner model name.
setScannerModelNumber(String) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 7.6.1.2.2 scanner model number.
setScannerModelSerialNo(String) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 7.6.1.2.3 scanner model serial number.
setScanningSoftware(String) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 7.6.2.1 scanning software.
setScanningSoftwareVersionNo(String) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 7.6.2.2 scanning software version number.
setSceneIlluminant(int) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 7.7.3.7 scene illuminant.
setSensor(int) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 7.8 sensor.
setSHA1(MessageDigest) - Method in class edu.harvard.hul.ois.jhove.ModuleBase
Sets the SHA-1 calculated digest for the content object, and sets the checksumFinished flag.
setShowRawFlag(boolean) - Method in class edu.harvard.hul.ois.jhove.JhoveBase
Sets the value to be returned by getShowRawFlag (), which determines if only raw numeric values should be output.
setSigMatch(String) - Method in class edu.harvard.hul.ois.jhove.RepInfo
Adds the name of a module, signifying that the document signature matched the module's requirements.
setSigMatch(List) - Method in class edu.harvard.hul.ois.jhove.RepInfo
Adds a list of module names, signifying that the document signature matched the module's requirements.
setSignatureFlag(boolean) - Method in class edu.harvard.hul.ois.jhove.JhoveBase
Sets the "check signature only" flag.
setSize(long) - Method in class edu.harvard.hul.ois.jhove.RepInfo
Set the size property
setSIZProperty(Property) - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.Codestream
Sets the SIZ property.
setSourceData(String) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 9.1.2 SourceData.
setSourceID(String) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 7.2 source ID.
setSourceType(String) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 7.1 source type.
setSourceXDimension(double) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 8.1.7 source X dimension.
setSourceXDimensionUnit(int) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 8.1.7.1 source X dimension unit.
setSourceYDimension(double) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 8.1.8 source Y dimension.
setSourceYDimensionUnit(int) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 8.1.8.1 source Y dimension unit.
setSpecificationVersion(String) - Method in class edu.harvard.hul.ois.jhove.AESAudioMetadata
Sets the specification version of the document format.
setStartTime(long) - Method in interface edu.harvard.hul.ois.jhove.AESAudioMetadata.Face
Sets the starting time.
setStartTime(long) - Method in interface edu.harvard.hul.ois.jhove.AESAudioMetadata.FaceRegion
Sets the starting time.
setStartTime(long) - Method in class edu.harvard.hul.ois.jhove.AESAudioMetadata
Sets the start time in samples.
setStreamOffset(Stream) - Method in class edu.harvard.hul.ois.jhove.module.pdf.FileTokenizer
Sets the offset of a Stream to the current file position.
setStreamOffset(Stream) - Method in class edu.harvard.hul.ois.jhove.module.pdf.StreamTokenizer
Sets the offset of a Stream to the current file position.
setStreamOffset(Stream) - Method in class edu.harvard.hul.ois.jhove.module.pdf.Tokenizer
Sets the offset of a Stream to the current file position.
setStripByteCounts(long[]) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 6.1.5.4 Strip byte counts.
setStripOffsets(long[]) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 6.1.5.2 Strip offsets.
setSubjectDistance(double[]) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 7.7.3.5 Subject distance
setTaggedProfile(TaggedProfile) - Method in class edu.harvard.hul.ois.jhove.module.pdf.AProfile
Calling setTaggedProfile links this AProfile to a TaggedProfile.
setTargetIDManufacturer(String) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 8.3.2.1 TargetIDManufacturer
setTargetIDMedia(String) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 8.3.2.4 TargetIDMedia
setTargetIDName(String) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 8.3.2.2 TargetIDName
setTargetIDNo(String) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 8.3.2.3 TargetIDNo
setTargetType(int) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 8.3.1 TargetType
setTelephone(String) - Method in class edu.harvard.hul.ois.jhove.Agent
Sets the value of the telephone property.
setTempDirectory(String) - Method in class edu.harvard.hul.ois.jhove.JhoveBase
Sets the temporary directory path.
setTheExifIFD(ExifIFD) - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
 
setTheGlobalParametersIFD(GlobalParametersIFD) - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
 
setTheGPSInfoIFD(GPSInfoIFD) - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
 
setTheInteroperabilityIFD(InteroperabilityIFD) - Method in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
 
setThumbnail(boolean) - Method in class edu.harvard.hul.ois.jhove.module.tiff.IFD
Sets flag indicating whether this is the "thumbnail" IFD.
setTileByteCounts(long[]) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 6.1.5.8 Tile byte counts.
setTileLeft(long) - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.ContCodestream
Set the number of bytes remaining in the current tile.
setTileLength(long) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 6.1.5.6 Tile length.
setTileOffsets(long[]) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 6.1.5.7 Tile offsets.
setTiles(List) - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.Codestream
Assign a List of Tile objects to the tiles field
setTileWidth(long) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 6.1.5.5 Tile width.
setTilingType(int) - Method in class edu.harvard.hul.ois.jhove.module.jpeg.Tiling
 
setTimeCreated(String) - Method in class edu.harvard.hul.ois.jhove.module.wave.ExifInfo
Sets the creation time as an ASCII string.
setTitle(String) - Method in class edu.harvard.hul.ois.jhove.module.html.HtmlMetadata
Stores the contents of the TITLE element.
setType(ChecksumType) - Method in class edu.harvard.hul.ois.jhove.Checksum
Sets the type of this Checksum
setURL(String) - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.UUIDInfoBox
Sets the URL string.
setURLFlag(boolean) - Method in class edu.harvard.hul.ois.jhove.RepInfo
Set the flag to indicate whether this is a URL (true) or a file (false)
setUse(String, String) - Method in class edu.harvard.hul.ois.jhove.AESAudioMetadata
Sets the role of the document.
setUserComment(String) - Method in class edu.harvard.hul.ois.jhove.module.wave.ExifInfo
Sets the user comment.
setUUIDList(byte[][]) - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.UUIDInfoBox
Sets the UUID list.
setValid(int) - Method in class edu.harvard.hul.ois.jhove.handler.audit.AuditCount
Sets the count of valid files.
setValid(boolean) - Method in class edu.harvard.hul.ois.jhove.RepInfo
Set the validity flag
setValid(int) - Method in class edu.harvard.hul.ois.jhove.RepInfo
Set the validity flag
setValidityNote(String) - Method in class edu.harvard.hul.ois.jhove.ModuleBase
Set the value of the validityNote property, which briefly explains the validity criteria of this Module.
setValue(String) - Method in class edu.harvard.hul.ois.jhove.Checksum
Sets the value of this Checksum
setValue(double) - Method in class edu.harvard.hul.ois.jhove.module.pdf.Numeric
Set this object's value to a double.
setValue(long) - Method in class edu.harvard.hul.ois.jhove.module.pdf.Numeric
Set this object's value to a long.
setValue(String) - Method in class edu.harvard.hul.ois.jhove.module.pdf.StringValuedToken
Set the value of the token.
setVerbosity(int) - Method in interface edu.harvard.hul.ois.jhove.Module
Set the degree of verbosity desired from the module.
setVerbosity(int) - Method in class edu.harvard.hul.ois.jhove.ModuleBase
Set the degree of verbosity desired from the module.
setVersion(String) - Method in class edu.harvard.hul.ois.jhove.RepInfo
Set the version string
setVertScale(int) - Method in class edu.harvard.hul.ois.jhove.module.jpeg.Tiling
 
setViewerData(Property) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set information for Swing GUI viewer.
setWaveFormatEx(boolean) - Method in class edu.harvard.hul.ois.jhove.module.WaveModule
Set the profile flag for WAVEFORMATEX.
setWaveFormatExtensible(boolean) - Method in class edu.harvard.hul.ois.jhove.module.WaveModule
Set the profile flag for WAVEFORMATEXTENSIBLE.
setWeb(String) - Method in class edu.harvard.hul.ois.jhove.Agent
Sets the value of the web property.
setWellFormed(int) - Method in class edu.harvard.hul.ois.jhove.handler.audit.AuditCount
Sets the count of well-formed files.
setWellFormed(boolean) - Method in class edu.harvard.hul.ois.jhove.RepInfo
Set the well-formed flag
setWellFormed(int) - Method in class edu.harvard.hul.ois.jhove.RepInfo
Set the wellFormed flag.
setWhitePointXValue(Rational) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 8.2.7.1 white point X value.
setWhitePointYValue(Rational) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 8.2.7.2 white point Y value.
setWidth(long) - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.CompositionBox
Set the height value.
setWordSize(int) - Method in interface edu.harvard.hul.ois.jhove.AESAudioMetadata.FormatRegion
Sets the word size.
setWordSize(int) - Method in class edu.harvard.hul.ois.jhove.AESAudioMetadata
Sets the word size.
setWriter(PrintWriter) - Method in class edu.harvard.hul.ois.jhove.HandlerBase
Assigns a PrintWriter to do output for this OutputHandler
setWriter(PrintWriter) - Method in interface edu.harvard.hul.ois.jhove.OutputHandler
Assigns a PrintWriter to do output for this OutputHandler
setX1Profile(X1Profile) - Method in class edu.harvard.hul.ois.jhove.module.pdf.X1aProfile
Calling setX1Profile links this X1aProfiler to an X1Profiler.
setXhtmlDoctype(String) - Method in class edu.harvard.hul.ois.jhove.module.XmlModule
Sets the value of the doctype string, assumed to have been forced to upper case.
setXhtmlFlag(boolean) - Method in class edu.harvard.hul.ois.jhove.module.xml.XmlModuleHandler
Sets the value of the XHTML flag.
setXPhysScanResolution(double) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 7.6.3.2.1 X physical scanning resolution.
setXPrintAspectRatio(double) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 7.7.3.16.1 X print aspect ratio.
setXSamplingFrequency(Rational) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 8.1.3 X sampling frequency.
setXTargetedDisplayAspectRatio(long) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 6.2.6.1 X targeted display aspect ratio.
setYCbCrCoefficients(Rational[]) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 6.1.4.5 YCbCr coefficients.
setYCbCrPositioning(int) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 6.1.4.4 YCbCr positioning.
setYCbCrSubSampling(int[]) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 6.1.4.3 YCbCr Sub-sampling.
setYPhysScanResolution(double) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 7.6.3.2.2 Y physical scanning resolution.
setYPrintAspectRatio(double) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 7.7.3.16.2 Y print aspect ratio.
setYSamplingFrequency(Rational) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 8.1.4 Y sampling frequency.
setYTargetedDisplayAspectRatio(long) - Method in class edu.harvard.hul.ois.jhove.NisoImageMetadata
Set 6.2.6.2 Y targeted display aspect ratio.
SHA1 - Static variable in class edu.harvard.hul.ois.jhove.ChecksumType
160-bit Secure Hash Algorithm.
SHARPNESS_L - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.ExifIFD
 
SHORT - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.IFD
TIFF SHORT (unsigned 16-bit) type.
SHORT - Static variable in class edu.harvard.hul.ois.jhove.PropertyType
Property type for a Short object, or a short if the Arity is Array.
show(OutputHandler) - Method in class edu.harvard.hul.ois.jhove.App
Outputs detailed information about the application, including configuration, available modules and handlers, etc.
show(RepInfo) - Method in class edu.harvard.hul.ois.jhove.handler.AuditHandler
Outputs the information contained in a RepInfo object
show() - Method in class edu.harvard.hul.ois.jhove.handler.TextHandler
Outputs minimal information about the application
show(App) - Method in class edu.harvard.hul.ois.jhove.handler.TextHandler
Outputs detailed information about the application, including configuration, available modules and handlers, etc.
show(OutputHandler) - Method in class edu.harvard.hul.ois.jhove.handler.TextHandler
Outputs information about the OutputHandler specified in the parameter
show(Module) - Method in class edu.harvard.hul.ois.jhove.handler.TextHandler
Outputs information about a Module
show(RepInfo) - Method in class edu.harvard.hul.ois.jhove.handler.TextHandler
Outputs the information contained in a RepInfo object
show() - Method in class edu.harvard.hul.ois.jhove.handler.XmlHandler
Outputs minimal information about the application
show(App) - Method in class edu.harvard.hul.ois.jhove.handler.XmlHandler
Outputs detailed information about the application, including configuration, available modules and handlers, etc.
show(OutputHandler) - Method in class edu.harvard.hul.ois.jhove.handler.XmlHandler
Outputs information about the OutputHandler specified in the parameter
show(Module) - Method in class edu.harvard.hul.ois.jhove.handler.XmlHandler
Outputs information about a Module
show(RepInfo) - Method in class edu.harvard.hul.ois.jhove.handler.XmlHandler
Outputs the information contained in a RepInfo object
show(Module) - Method in class edu.harvard.hul.ois.jhove.HandlerBase
Outputs information about a Module
show(RepInfo) - Method in class edu.harvard.hul.ois.jhove.HandlerBase
Outputs the information contained in a RepInfo object
show(OutputHandler) - Method in class edu.harvard.hul.ois.jhove.HandlerBase
Outputs information about the OutputHandler specified in the parameter
show() - Method in class edu.harvard.hul.ois.jhove.HandlerBase
Outputs minimal information about the application
show(App) - Method in class edu.harvard.hul.ois.jhove.HandlerBase
Outputs detailed information about the application, including configuration, available modules and handlers, etc.
show(OutputHandler) - Method in interface edu.harvard.hul.ois.jhove.Module
Generates information about this Module.
show(OutputHandler) - Method in class edu.harvard.hul.ois.jhove.ModuleBase
Generates information about this Module.
show(Module) - Method in interface edu.harvard.hul.ois.jhove.OutputHandler
Outputs information about a Module
show(RepInfo) - Method in interface edu.harvard.hul.ois.jhove.OutputHandler
Outputs the information contained in a RepInfo object
show(OutputHandler) - Method in interface edu.harvard.hul.ois.jhove.OutputHandler
Outputs information about the OutputHandler specified in the parameter
show() - Method in interface edu.harvard.hul.ois.jhove.OutputHandler
Outputs minimal information about the application
show(App) - Method in interface edu.harvard.hul.ois.jhove.OutputHandler
Outputs detailed information about the application, including configuration, available modules and handlers, etc.
show(OutputHandler) - Method in class edu.harvard.hul.ois.jhove.RepInfo
Output the information in this object.
show(RepInfo) - Method in class edu.harvard.hul.ois.jhove.viewer.ViewHandler
Outputs the information contained in a RepInfo object.
show() - Method in class edu.harvard.hul.ois.jhove.viewer.ViewHandler
 
show(App) - Method in class edu.harvard.hul.ois.jhove.viewer.ViewHandler
 
show(Module) - Method in class edu.harvard.hul.ois.jhove.viewer.ViewHandler
 
show(OutputHandler) - Method in class edu.harvard.hul.ois.jhove.viewer.ViewHandler
Outputs information about the OutputHandler specified in the parameter.
showAESAudioMetadata(AESAudioMetadata) - Method in class edu.harvard.hul.ois.jhove.handler.XmlHandler
Display the audio metadata formatted according to the AES schema.
showAgent(Agent, String) - Method in class edu.harvard.hul.ois.jhove.handler.XmlHandler
PRIVATE INSTANCE METHODS.
showArrayProperty(Property, String) - Method in class edu.harvard.hul.ois.jhove.handler.XmlHandler
 
showChangeHistory10(NisoImageMetadata, String) - Method in class edu.harvard.hul.ois.jhove.handler.XmlHandler
 
showChangeHistory20(NisoImageMetadata, String) - Method in class edu.harvard.hul.ois.jhove.handler.XmlHandler
 
showChecksum(Checksum) - Method in class edu.harvard.hul.ois.jhove.handler.XmlHandler
 
showDocument(Document) - Method in class edu.harvard.hul.ois.jhove.handler.XmlHandler
 
showFooter() - Method in class edu.harvard.hul.ois.jhove.handler.AuditHandler
Do the final output.
showFooter() - Method in class edu.harvard.hul.ois.jhove.handler.TextHandler
Do the final output.
showFooter() - Method in class edu.harvard.hul.ois.jhove.handler.XmlHandler
Do the final output.
showFooter() - Method in class edu.harvard.hul.ois.jhove.HandlerBase
Do the final output.
showFooter() - Method in interface edu.harvard.hul.ois.jhove.OutputHandler
Do the final output.
showFooter() - Method in class edu.harvard.hul.ois.jhove.viewer.ViewHandler
Complete the output.
showFooterImpl(AuditState) - Method in class edu.harvard.hul.ois.jhove.handler.AuditHandler
Local extension to the standard callback that does the final output.
showHeader() - Method in class edu.harvard.hul.ois.jhove.handler.AuditHandler
Do the initial output.
showHeader() - Method in class edu.harvard.hul.ois.jhove.handler.TextHandler
Do the initial output.
showHeader() - Method in class edu.harvard.hul.ois.jhove.handler.XmlHandler
Do the initial output.
showHeader() - Method in class edu.harvard.hul.ois.jhove.HandlerBase
Do the initial output.
showHeader() - Method in interface edu.harvard.hul.ois.jhove.OutputHandler
Do the initial output.
showHeader() - Method in class edu.harvard.hul.ois.jhove.viewer.ViewHandler
Do the initial output.
showHeaderImpl(String) - Method in class edu.harvard.hul.ois.jhove.handler.AuditHandler
Local extension to the standard callback that does the initial output.
showIdentifier(Identifier) - Method in class edu.harvard.hul.ois.jhove.handler.XmlHandler
 
showImpl(RepInfo, AuditState) - Method in class edu.harvard.hul.ois.jhove.handler.AuditHandler
Local extension to the standard callback that outputs the information contained in a RepInfo object
showMessage(Message) - Method in class edu.harvard.hul.ois.jhove.handler.XmlHandler
 
showModule(Module) - Method in class edu.harvard.hul.ois.jhove.viewer.ModuleInfoWindow
Formats and presents the module information in the window.
showNisoBasicDigitalObjectInformation10(NisoImageMetadata, String) - Method in class edu.harvard.hul.ois.jhove.handler.XmlHandler
 
showNisoBasicDigitalObjectInformation20(NisoImageMetadata, String) - Method in class edu.harvard.hul.ois.jhove.handler.XmlHandler
 
showNisoBasicImageInformation10(NisoImageMetadata, String) - Method in class edu.harvard.hul.ois.jhove.handler.XmlHandler
 
showNisoBasicImageInformation20(NisoImageMetadata, String) - Method in class edu.harvard.hul.ois.jhove.handler.XmlHandler
 
showNisoBasicImageParameters02(NisoImageMetadata, String) - Method in class edu.harvard.hul.ois.jhove.handler.XmlHandler
 
showNisoChangeHistory02(NisoImageMetadata, String) - Method in class edu.harvard.hul.ois.jhove.handler.XmlHandler
 
showNisoImageAssessmentMetadata10(NisoImageMetadata, String) - Method in class edu.harvard.hul.ois.jhove.handler.XmlHandler
 
showNisoImageAssessmentMetadata20(NisoImageMetadata, String) - Method in class edu.harvard.hul.ois.jhove.handler.XmlHandler
 
showNisoImageCaptureMetadata10(NisoImageMetadata, String) - Method in class edu.harvard.hul.ois.jhove.handler.XmlHandler
 
showNisoImageCaptureMetadata20(NisoImageMetadata, String) - Method in class edu.harvard.hul.ois.jhove.handler.XmlHandler
 
showNisoImageCreation02(NisoImageMetadata, String) - Method in class edu.harvard.hul.ois.jhove.handler.XmlHandler
 
showNisoImageMetadata(NisoImageMetadata, String, boolean) - Method in class edu.harvard.hul.ois.jhove.handler.TextHandler
Display the NISO image metadata formatted according to the MIX schema.
showNisoImageMetadata(NisoImageMetadata) - Method in class edu.harvard.hul.ois.jhove.handler.XmlHandler
Display the NISO image metadata formatted according to the MIX schema.
showNisoImageMetadata02(NisoImageMetadata) - Method in class edu.harvard.hul.ois.jhove.handler.XmlHandler
Display the NISO image metadata formatted according to the MIX 0.2 schema.
showNisoImageMetadata10(NisoImageMetadata) - Method in class edu.harvard.hul.ois.jhove.handler.XmlHandler
Display the NISO image metadata formatted according to the MIX 1.0 schema.
showNisoImageMetadata20(NisoImageMetadata) - Method in class edu.harvard.hul.ois.jhove.handler.XmlHandler
Display the NISO image metadata formatted according to the MIX 2.0 schema.
showNisoImagingPerformanceAssessment02(NisoImageMetadata, String) - Method in class edu.harvard.hul.ois.jhove.handler.XmlHandler
 
showProperty(Property) - Method in class edu.harvard.hul.ois.jhove.handler.XmlHandler
 
showSignature(Signature) - Method in class edu.harvard.hul.ois.jhove.handler.XmlHandler
 
showTextMDMetadata(TextMDMetadata) - Method in class edu.harvard.hul.ois.jhove.handler.XmlHandler
Display the text metadata formatted according to the textMD schema (see http://www.loc.gov/standards/textMD).
SICI - Static variable in class edu.harvard.hul.ois.jhove.IdentifierType
Identifier type for Serial Item and Contribution Identifier.
sigByte - Static variable in class edu.harvard.hul.ois.jhove.module.JpegModule
 
Signature - Class in edu.harvard.hul.ois.jhove
This class encapsulates information about format signatures, both internal and external.
Signature(String, SignatureType, SignatureUseType) - Constructor for class edu.harvard.hul.ois.jhove.Signature
A Signature cannot be created directly; this constructor can be called as the superclass constructor from a subclass.
Signature(int[], SignatureType, SignatureUseType) - Constructor for class edu.harvard.hul.ois.jhove.Signature
A Signature cannot be created directly; this constructor can be called as the superclass constructor from a subclass.
Signature(String, SignatureType, SignatureUseType, String) - Constructor for class edu.harvard.hul.ois.jhove.Signature
A Signature cannot be created directly; this constructor can be called as the superclass constructor from a subclass.
Signature(int[], SignatureType, SignatureUseType, String) - Constructor for class edu.harvard.hul.ois.jhove.Signature
A Signature cannot be created directly; this constructor can be called as the superclass constructor from a subclass.
SignatureType - Class in edu.harvard.hul.ois.jhove
This class defines enumerated types for a Signature in a module.
SignatureUseType - Class in edu.harvard.hul.ois.jhove
This class defines enumerated use types for a Signature in a module.
SimpleCharStream - Class in edu.harvard.hul.ois.jhove.module.html
An implementation of interface CharStream, where the stream is assumed to contain only ASCII characters (without unicode processing).
SimpleCharStream(Reader, int, int, int) - Constructor for class edu.harvard.hul.ois.jhove.module.html.SimpleCharStream
 
SimpleCharStream(Reader, int, int) - Constructor for class edu.harvard.hul.ois.jhove.module.html.SimpleCharStream
 
SimpleCharStream(Reader) - Constructor for class edu.harvard.hul.ois.jhove.module.html.SimpleCharStream
 
SimpleCharStream(InputStream, int, int, int) - Constructor for class edu.harvard.hul.ois.jhove.module.html.SimpleCharStream
 
SimpleCharStream(InputStream, int, int) - Constructor for class edu.harvard.hul.ois.jhove.module.html.SimpleCharStream
 
SimpleCharStream(InputStream) - Constructor for class edu.harvard.hul.ois.jhove.module.html.SimpleCharStream
 
SimpleTextChunk - Class in edu.harvard.hul.ois.jhove.module.wave
Superclass for the very similar Note and Label chunks.
SimpleTextChunk(ModuleBase, ChunkHeader, DataInputStream) - Constructor for class edu.harvard.hul.ois.jhove.module.wave.SimpleTextChunk
Constructor.
SINGQUOTEDVALUE - Static variable in interface edu.harvard.hul.ois.jhove.module.html.ParseHtmlConstants
 
SIZ - Static variable in class edu.harvard.hul.ois.jhove.module.jpeg2000.MarkerSegment
 
SIZMarkerSegment - Class in edu.harvard.hul.ois.jhove.module.jpeg2000
Class for the SIZ marker segment.
SIZMarkerSegment() - Constructor for class edu.harvard.hul.ois.jhove.module.jpeg2000.SIZMarkerSegment
 
skip(long) - Method in class edu.harvard.hul.ois.jhove.ChecksumInputStream
Skips n bytes.
skip(long) - Method in class edu.harvard.hul.ois.jhove.CountedInputStream
Skips n bytes.
skip(long) - Method in class edu.harvard.hul.ois.jhove.module.pdf.PdfFlateInputStream
 
skip(long) - Method in class edu.harvard.hul.ois.jhove.RAFInputStream
Skips some number of bytes.
skipBox() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
Skips over the box.
skipBytes(long) - Method in class edu.harvard.hul.ois.jhove.module.pdf.Stream
Skips a specified number of bytes in the stream.
skipBytes(DataInputStream, int) - Method in class edu.harvard.hul.ois.jhove.ModuleBase
 
skipBytes(DataInputStream, int, ModuleBase) - Method in class edu.harvard.hul.ois.jhove.ModuleBase
 
skipOverBox(BoxHeader, RepInfo, DataInputStream) - Method in class edu.harvard.hul.ois.jhove.module.Jpeg2000Module
 
skipSegment(RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.JpegModule
 
SLASH - Static variable in interface edu.harvard.hul.ois.jhove.module.html.ParseHtmlConstants
 
SLONG - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.IFD
TIFF SLONG (signed 32-bit) type.
SMAXSAMPLEVALUE - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Standard TIFF 6.0 tags.
SMINSAMPLEVALUE - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Standard TIFF 6.0 tags.
SMPTE_FORMAT - Static variable in class edu.harvard.hul.ois.jhove.module.wave.WaveStrings
Strings for SMPTE formats in the Sample Chunk
SMPTE_FORMAT_INDEX - Static variable in class edu.harvard.hul.ois.jhove.module.wave.WaveStrings
Indices for SMPTE formats in the Sample Chunk
SOC - Static variable in class edu.harvard.hul.ois.jhove.module.jpeg2000.MarkerSegment
 
SOD - Static variable in class edu.harvard.hul.ois.jhove.module.jpeg2000.MarkerSegment
 
SOFTWARE - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Standard TIFF 6.0 tags.
SOP - Static variable in class edu.harvard.hul.ois.jhove.module.jpeg2000.MarkerSegment
 
SOT - Static variable in class edu.harvard.hul.ois.jhove.module.jpeg2000.MarkerSegment
 
SOTMarkerSegment - Class in edu.harvard.hul.ois.jhove.module.jpeg2000
Class for the SOT (start of tile-part) marker segment.
SOTMarkerSegment() - Constructor for class edu.harvard.hul.ois.jhove.module.jpeg2000.SOTMarkerSegment
Constructor
SOUND_INFORMATION_0 - Static variable in class edu.harvard.hul.ois.jhove.module.wave.WaveStrings
Flags for SoundInformation bits in the MPEG chunk, "0" values
SOUND_INFORMATION_1 - Static variable in class edu.harvard.hul.ois.jhove.module.wave.WaveStrings
Flags for SoundInformation bits in the MPEG chunk, "1" values
soundChunkSeen - Variable in class edu.harvard.hul.ois.jhove.module.AiffModule
 
SoundDataChunk - Class in edu.harvard.hul.ois.jhove.module.aiff
Implementation of the AIFF Sound Data Chunk.
SoundDataChunk(AiffModule, ChunkHeader, DataInputStream) - Constructor for class edu.harvard.hul.ois.jhove.module.aiff.SoundDataChunk
Constructor.
SOURCE_DIMENSION_UNIT - Static variable in class edu.harvard.hul.ois.jhove.NisoImageMetadata
8.1.7.1 (8.1.8.1) source dimension unit.
specialConstructor - Variable in exception edu.harvard.hul.ois.jhove.module.html.ParseException
This variable determines which constructor was used to create this object and thereby affects the semantics of the "getMessage" method (see below).
specialMarkup - Static variable in class edu.harvard.hul.ois.jhove.module.html.Html4DocDesc
Names of special elements.
specialToken - Variable in class edu.harvard.hul.ois.jhove.module.html.Token
This field is used to access special tokens that occur prior to this token, but after the immediately preceding regular (non-special) token.
Spiff - Class in edu.harvard.hul.ois.jhove.module.jpeg
Static methods and data for SPIFF Jpeg files.
SpiffDir - Class in edu.harvard.hul.ois.jhove.module.jpeg
This class represents a SPIFF directory and the tags defined under it.
SpiffDir(JpegModule) - Constructor for class edu.harvard.hul.ois.jhove.module.jpeg.SpiffDir
 
spiffProfileName - Variable in class edu.harvard.hul.ois.jhove.module.JpegModule
 
SRATIONAL - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.IFD
TIFF SRATIONAL (two SLONGs) type.
SRS - Class in edu.harvard.hul.ois.jhove.module.jpeg
Encapsulation of an SRS (selectively refined scan) entry for a JPEG image.
SRS(int, int, int, int) - Constructor for class edu.harvard.hul.ois.jhove.module.jpeg.SRS
Constructor.
SSHORT - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.IFD
TIFF SSHORT (signed 16-bit) type.
STANDARD - Static variable in class edu.harvard.hul.ois.jhove.AgentType
Agent type for a standards body.
STANDARD - Static variable in class edu.harvard.hul.ois.jhove.DocumentType
Document type for a standards body publication.
startBytesRead - Variable in class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
 
startCDATA() - Method in class edu.harvard.hul.ois.jhove.module.xml.XmlLexicalHandler
Report the start of a CDATA section.
startDirectory(String) - Method in class edu.harvard.hul.ois.jhove.handler.AuditHandler
Callback indicating a new directory is being processed.
startDirectory(String) - Method in class edu.harvard.hul.ois.jhove.HandlerBase
Callback indicating a new directory is being processed.
startDirectory(String) - Method in interface edu.harvard.hul.ois.jhove.OutputHandler
Callback indicating a new directory is being processed.
startDirectoryImpl(AuditState) - Method in class edu.harvard.hul.ois.jhove.handler.AuditHandler
Local extension to the standard callback indicating a new directory is being processed.
STARTDOCTYPE - Static variable in interface edu.harvard.hul.ois.jhove.module.html.ParseHtmlConstants
 
startDTD(String, String, String) - Method in class edu.harvard.hul.ois.jhove.module.xml.XmlLexicalHandler
Report the start of DTD declarations, if any.
startElement(String, String, String, Attributes) - Method in class edu.harvard.hul.ois.jhove.ConfigHandler
SAX parser callback method.
startElement(String, String, String, Attributes) - Method in class edu.harvard.hul.ois.jhove.module.wave.LinkChunkHandler
Looks for the first element encountered.
startElement(String, String, String, Attributes) - Method in class edu.harvard.hul.ois.jhove.module.xml.XmlModuleHandler
Looks for the first element encountered.
startElement(String, String, String, Attributes) - Method in class edu.harvard.hul.ois.jhove.XMPHandler
Catches the start of an element and, if it's one we care about, sets state information.
startEntity(String) - Method in class edu.harvard.hul.ois.jhove.module.xml.XmlLexicalHandler
Accumulates entity names into the entity set.
startPrefixMapping(String, String) - Method in class edu.harvard.hul.ois.jhove.module.xml.XmlModuleHandler
Begin the scope of a prefix-URI Namespace mapping.
startWalk() - Method in class edu.harvard.hul.ois.jhove.module.pdf.DocNode
Initialize an iterator through the descendants of this node.
startWalk() - Method in class edu.harvard.hul.ois.jhove.module.pdf.PageLabelNode
Initialize an iterator through the descendants of this node.
startWalk() - Method in class edu.harvard.hul.ois.jhove.module.pdf.PageObject
Call this function when recursively walking through a document tree.
startWalk() - Method in class edu.harvard.hul.ois.jhove.module.pdf.PageTreeNode
Initialize an iterator through the descendants of this node.
State - Class in edu.harvard.hul.ois.jhove.module.pdf
An enumeration class for use with the Tokenizer.
staticFlag - Static variable in class edu.harvard.hul.ois.jhove.module.html.HtmlCharStream
 
staticFlag - Static variable in class edu.harvard.hul.ois.jhove.module.html.SimpleCharStream
 
StdStructTypes - Class in edu.harvard.hul.ois.jhove.module.pdf
This class holds the constants for standard structure type names, and a static method for determining if a string belongs to those names.
STREAM - Static variable in class edu.harvard.hul.ois.jhove.module.pdf.State
 
Stream - Class in edu.harvard.hul.ois.jhove.module.pdf
Class to encapsulate a stream token.
Stream() - Constructor for class edu.harvard.hul.ois.jhove.module.pdf.Stream
Constructor.
StreamInputStream - Class in edu.harvard.hul.ois.jhove.module.pdf
A StreamInputStream is an InputStream which provides the bytes from a PdfStream.
StreamInputStream(PdfStream, RandomAccessFile) - Constructor for class edu.harvard.hul.ois.jhove.module.pdf.StreamInputStream
 
StreamTokenizer - Class in edu.harvard.hul.ois.jhove.module.pdf
Tokenizer subclass which gets data from an object stream.
StreamTokenizer(RandomAccessFile, Stream) - Constructor for class edu.harvard.hul.ois.jhove.module.pdf.StreamTokenizer
 
STRING - Static variable in class edu.harvard.hul.ois.jhove.PropertyType
Property type for a String object.
StringValuedToken - Class in edu.harvard.hul.ois.jhove.module.pdf
Abstract class for all PDF tokens which consist of a character sequence.
StringValuedToken() - Constructor for class edu.harvard.hul.ois.jhove.module.pdf.StringValuedToken
 
STRIPBYTECOUNTS - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Standard TIFF 6.0 tags.
STRIPOFFSETS - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Standard TIFF 6.0 tags.
stripQuotes(String) - Method in class edu.harvard.hul.ois.jhove.module.HtmlModule
 
STRIPROWCOUNTS - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffFXBase
Tiff/FX-specific tags.
StructureElement - Class in edu.harvard.hul.ois.jhove.module.pdf
Class for element of PDF document structure tree.
StructureElement(PdfDictionary, StructureTree) - Constructor for class edu.harvard.hul.ois.jhove.module.pdf.StructureElement
Constructor.
StructureTree - Class in edu.harvard.hul.ois.jhove.module.pdf
Class for PDF document structure tree.
StructureTree(PdfModule, RandomAccessFile, Parser) - Constructor for class edu.harvard.hul.ois.jhove.module.pdf.StructureTree
Constructor.
SUBFILETYPE - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Standard TIFF 6.0 tags.
SUBJECTDISTANCERANGE_L - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.ExifIFD
 
superboxOverrun() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
Utility error reporting function for a subbox overrunning its superbox.
superboxUnderrun() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
Utility error reporting function for a subbox underrunning its superbox.
Superchunk - Class in edu.harvard.hul.ois.jhove.module.iff
Abstract class for a chunk that contains other chunks.
Superchunk(ModuleBase, ChunkHeader, DataInputStream, RepInfo) - Constructor for class edu.harvard.hul.ois.jhove.module.iff.Superchunk
Constructor.
supportedElements - Variable in class edu.harvard.hul.ois.jhove.module.html.HtmlDocDesc
List of supported tags for this version of HTML.
SwitchTo(int) - Method in class edu.harvard.hul.ois.jhove.module.html.ParseHtmlTokenManager
 

T

T4OPTIONS - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Standard TIFF 6.0 tags.
T6OPTIONS - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Standard TIFF 6.0 tags.
TagCloser() - Method in class edu.harvard.hul.ois.jhove.module.html.ParseHtml
 
TaggedProfile - Class in edu.harvard.hul.ois.jhove.module.pdf
PDF profile checker for Tagged PDF documents.
TaggedProfile(PdfModule) - Constructor for class edu.harvard.hul.ois.jhove.module.pdf.TaggedProfile
Constructor.
tagName(int) - Static method in class edu.harvard.hul.ois.jhove.module.tiff.TiffTags
Return tag name by number.
TARGET_TYPE - Static variable in class edu.harvard.hul.ois.jhove.NisoImageMetadata
8.3.1 TargetType.
TARGETPRINTER - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Standard TIFF 6.0 tags.
tempFile() - Method in class edu.harvard.hul.ois.jhove.JhoveBase
Creates a temporary file with a unique name.
TextChunk - Class in edu.harvard.hul.ois.jhove.module.aiff
Abstract superclass for the name, author, copyright, and annotation chunks, all of which have the same format.
TextChunk(AiffModule, ChunkHeader, DataInputStream) - Constructor for class edu.harvard.hul.ois.jhove.module.aiff.TextChunk
Constructor.
TextHandler - Class in edu.harvard.hul.ois.jhove.handler
OutputHandler for plain text output.
TextHandler() - Constructor for class edu.harvard.hul.ois.jhove.handler.TextHandler
Creates a TextHandler.
TEXTMDMETADATA - Static variable in class edu.harvard.hul.ois.jhove.PropertyType
Property type for a TextMDMetadata.
TextMDMetadata - Class in edu.harvard.hul.ois.jhove
Encapsulation of the textMD metadata for text files.
TextMDMetadata() - Constructor for class edu.harvard.hul.ois.jhove.TextMDMetadata
 
THRESHHOLDING - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Standard TIFF 6.0 tags.
thtdAtts - Static variable in class edu.harvard.hul.ois.jhove.module.html.Html4DocDesc
Attributes for TH and TD elements
THUMBNAIL - Static variable in class edu.harvard.hul.ois.jhove.module.jpeg.Spiff
 
TIFF - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.IFD
Standard TIFF IFD.
TiffException - Exception in edu.harvard.hul.ois.jhove.module.tiff
Exception subclass used internally by the TIFF module.
TiffException(String) - Constructor for exception edu.harvard.hul.ois.jhove.module.tiff.TiffException
Create a TiffException.
TiffException(String, long) - Constructor for exception edu.harvard.hul.ois.jhove.module.tiff.TiffException
Create a TiffException with specified offset.
TiffFXBase - Class in edu.harvard.hul.ois.jhove.module.tiff
Base class for all profiles under TIFF/FX.
TiffFXBase() - Constructor for class edu.harvard.hul.ois.jhove.module.tiff.TiffFXBase
 
TiffIFD - Class in edu.harvard.hul.ois.jhove.module.tiff
Encapsulation of standard TIFF IFD.
TiffIFD(long, RepInfo, RandomAccessFile, boolean) - Constructor for class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Instantiate an TiffIFD object.
TiffModule - Class in edu.harvard.hul.ois.jhove.module
Module for identification and validation of TIFF files.
TiffModule() - Constructor for class edu.harvard.hul.ois.jhove.module.TiffModule
Instantiate a object.
TiffProfile - Class in edu.harvard.hul.ois.jhove.module.tiff
Abstract class for TIFF profile checkers.
TiffProfile() - Constructor for class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
Creates a TiffProfile.
TiffProfileClassB - Class in edu.harvard.hul.ois.jhove.module.tiff
Profile checker for TIFF Class B (Baseline Bilevel).
TiffProfileClassB() - Constructor for class edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassB
 
TiffProfileClassF - Class in edu.harvard.hul.ois.jhove.module.tiff
Profile checker for TIFF Class F.
TiffProfileClassF() - Constructor for class edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassF
Constructor.
TiffProfileClassG - Class in edu.harvard.hul.ois.jhove.module.tiff
Profile checker for TIFF Class G (Baseline Grayscale).
TiffProfileClassG() - Constructor for class edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassG
 
TiffProfileClassIT - Class in edu.harvard.hul.ois.jhove.module.tiff
Abstract superclass for Tiff Profile Checkers Tiff IP/whatever.
TiffProfileClassIT() - Constructor for class edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassIT
 
TiffProfileClassITBL - Class in edu.harvard.hul.ois.jhove.module.tiff
Profile checker for TIFF Class IT-BL.
TiffProfileClassITBL() - Constructor for class edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassITBL
 
TiffProfileClassITBLP1 - Class in edu.harvard.hul.ois.jhove.module.tiff
Profile checker for TIFF Class IT-BL/P1.
TiffProfileClassITBLP1() - Constructor for class edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassITBLP1
 
TiffProfileClassITBP - Class in edu.harvard.hul.ois.jhove.module.tiff
Profile checker for TIFF Class IT-BP.
TiffProfileClassITBP() - Constructor for class edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassITBP
 
TiffProfileClassITBPP1 - Class in edu.harvard.hul.ois.jhove.module.tiff
Profile checker for TIFF Class IT-BP/P1.
TiffProfileClassITBPP1() - Constructor for class edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassITBPP1
 
TiffProfileClassITBPP2 - Class in edu.harvard.hul.ois.jhove.module.tiff
Profile checker for TIFF Class IT-BP/P2.
TiffProfileClassITBPP2() - Constructor for class edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassITBPP2
 
TiffProfileClassITCT - Class in edu.harvard.hul.ois.jhove.module.tiff
Profile checker for TIFF Class IT-CT.
TiffProfileClassITCT() - Constructor for class edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassITCT
 
TiffProfileClassITCTP1 - Class in edu.harvard.hul.ois.jhove.module.tiff
Profile checker for TIFF Class IT-CT/P1.
TiffProfileClassITCTP1() - Constructor for class edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassITCTP1
 
TiffProfileClassITCTP2 - Class in edu.harvard.hul.ois.jhove.module.tiff
Profile checker for TIFF Class IT-CT/P2.
TiffProfileClassITCTP2() - Constructor for class edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassITCTP2
 
TiffProfileClassITFP - Class in edu.harvard.hul.ois.jhove.module.tiff
Profile checker for TIFF Class IT-FP.
TiffProfileClassITFP() - Constructor for class edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassITFP
 
TiffProfileClassITFPP1 - Class in edu.harvard.hul.ois.jhove.module.tiff
Profile checker for TIFF Class IT-FP/P1.
TiffProfileClassITFPP1() - Constructor for class edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassITFPP1
 
TiffProfileClassITFPP2 - Class in edu.harvard.hul.ois.jhove.module.tiff
Profile checker for TIFF Class IT-FP/P2.
TiffProfileClassITFPP2() - Constructor for class edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassITFPP2
 
TiffProfileClassITHC - Class in edu.harvard.hul.ois.jhove.module.tiff
Profile checker for TIFF Class IT-HC.
TiffProfileClassITHC() - Constructor for class edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassITHC
 
TiffProfileClassITHCP1 - Class in edu.harvard.hul.ois.jhove.module.tiff
Profile checker for TIFF Class IT-HC/P1.
TiffProfileClassITHCP1() - Constructor for class edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassITHCP1
 
TiffProfileClassITHCP2 - Class in edu.harvard.hul.ois.jhove.module.tiff
Profile checker for TIFF Class IT-HC/P2.
TiffProfileClassITHCP2() - Constructor for class edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassITHCP2
 
TiffProfileClassITLW - Class in edu.harvard.hul.ois.jhove.module.tiff
Profile checker for TIFF Class IT-LW.
TiffProfileClassITLW() - Constructor for class edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassITLW
 
TiffProfileClassITLWP1 - Class in edu.harvard.hul.ois.jhove.module.tiff
Profile checker for TIFF Class IT-LW/P1.
TiffProfileClassITLWP1() - Constructor for class edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassITLWP1
 
TiffProfileClassITLWP2 - Class in edu.harvard.hul.ois.jhove.module.tiff
Profile checker for TIFF Class IT-LW/P2.
TiffProfileClassITLWP2() - Constructor for class edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassITLWP2
 
TiffProfileClassITMP - Class in edu.harvard.hul.ois.jhove.module.tiff
Profile checker for TIFF Class IT-MP.
TiffProfileClassITMP() - Constructor for class edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassITMP
 
TiffProfileClassITMPP1 - Class in edu.harvard.hul.ois.jhove.module.tiff
Profile checker for TIFF Class IT-MP/P1.
TiffProfileClassITMPP1() - Constructor for class edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassITMPP1
 
TiffProfileClassITMPP2 - Class in edu.harvard.hul.ois.jhove.module.tiff
Profile checker for TIFF Class IT-MP/P2.
TiffProfileClassITMPP2() - Constructor for class edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassITMPP2
 
TiffProfileClassITSD - Class in edu.harvard.hul.ois.jhove.module.tiff
Profile checker for TIFF Class IT-SD.
TiffProfileClassITSD() - Constructor for class edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassITSD
 
TiffProfileClassITSDP2 - Class in edu.harvard.hul.ois.jhove.module.tiff
Profile checker for TIFF Class IT-SD/P2.
TiffProfileClassITSDP2() - Constructor for class edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassITSDP2
 
TiffProfileClassP - Class in edu.harvard.hul.ois.jhove.module.tiff
Profile checker for TIFF Class P (Baseline Palette color).
TiffProfileClassP() - Constructor for class edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassP
 
TiffProfileClassR - Class in edu.harvard.hul.ois.jhove.module.tiff
Profile checker for TIFF Class R (Baseline Palette color).
TiffProfileClassR() - Constructor for class edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassR
 
TiffProfileClassY - Class in edu.harvard.hul.ois.jhove.module.tiff
Profile checker for TIFF Class Y (Baseline YCbCr).
TiffProfileClassY() - Constructor for class edu.harvard.hul.ois.jhove.module.tiff.TiffProfileClassY
 
TiffProfileDLF - Class in edu.harvard.hul.ois.jhove.module.tiff
Abstract superclass for the profile checkers for TIFF/DLF
TiffProfileDLF() - Constructor for class edu.harvard.hul.ois.jhove.module.tiff.TiffProfileDLF
 
TiffProfileDLFBW - Class in edu.harvard.hul.ois.jhove.module.tiff
Profile checker for TIFF DLF Benchmark for Faithful Digital Reproductions of Monographs and Serials: black and white.
TiffProfileDLFBW() - Constructor for class edu.harvard.hul.ois.jhove.module.tiff.TiffProfileDLFBW
 
TiffProfileDLFColor - Class in edu.harvard.hul.ois.jhove.module.tiff
Profile checker for TIFF DLF Benchmark for Faithful Digital Reproductions of Monographs and Serials: color.
TiffProfileDLFColor() - Constructor for class edu.harvard.hul.ois.jhove.module.tiff.TiffProfileDLFColor
 
TiffProfileDLFGray - Class in edu.harvard.hul.ois.jhove.module.tiff
Profile checker for TIFF DLF Benchmark for Faithful Digital Reproductions of Monographs and Serials: grayscale.
TiffProfileDLFGray() - Constructor for class edu.harvard.hul.ois.jhove.module.tiff.TiffProfileDLFGray
 
TiffProfileDNG - Class in edu.harvard.hul.ois.jhove.module.tiff
Profile checker for the DNG raw IFD.
TiffProfileDNG() - Constructor for class edu.harvard.hul.ois.jhove.module.tiff.TiffProfileDNG
 
TiffProfileDNGThumb - Class in edu.harvard.hul.ois.jhove.module.tiff
IFD 0 of a DNG document must satisfy this profile.
TiffProfileDNGThumb() - Constructor for class edu.harvard.hul.ois.jhove.module.tiff.TiffProfileDNGThumb
 
TiffProfileEP - Class in edu.harvard.hul.ois.jhove.module.tiff
Profile checker for TIFF/EP.
TiffProfileEP() - Constructor for class edu.harvard.hul.ois.jhove.module.tiff.TiffProfileEP
 
TiffProfileExif - Class in edu.harvard.hul.ois.jhove.module.tiff
Profile checker for Exif.
TiffProfileExif() - Constructor for class edu.harvard.hul.ois.jhove.module.tiff.TiffProfileExif
 
TiffProfileExifIFD - Class in edu.harvard.hul.ois.jhove.module.tiff
Profile checker for the Exif IFD of a TIFF file which potentially matches the TIFF profile.
TiffProfileExifIFD() - Constructor for class edu.harvard.hul.ois.jhove.module.tiff.TiffProfileExifIFD
 
TiffProfileExifThumb - Class in edu.harvard.hul.ois.jhove.module.tiff
Profile checker for the thumbnail IFD of a TIFF file potentially meeting the TIFF profile.
TiffProfileExifThumb() - Constructor for class edu.harvard.hul.ois.jhove.module.tiff.TiffProfileExifThumb
 
TiffProfileFXC - Class in edu.harvard.hul.ois.jhove.module.tiff
Profile checker for TIFF FX, Profile C (Baseline Color).
TiffProfileFXC() - Constructor for class edu.harvard.hul.ois.jhove.module.tiff.TiffProfileFXC
Constructor.
TiffProfileFXF - Class in edu.harvard.hul.ois.jhove.module.tiff
Profile checker for TIFF FX, Profile F, aka TIFF-F.
TiffProfileFXF() - Constructor for class edu.harvard.hul.ois.jhove.module.tiff.TiffProfileFXF
Constructor.
TiffProfileFXJ - Class in edu.harvard.hul.ois.jhove.module.tiff
Profile checker for TIFF FX, Profile J (lossless JBIG).
TiffProfileFXJ() - Constructor for class edu.harvard.hul.ois.jhove.module.tiff.TiffProfileFXJ
Constructor.
TiffProfileFXL - Class in edu.harvard.hul.ois.jhove.module.tiff
Profile checker for TIFF FX, Profile L (Lossless Color).
TiffProfileFXL() - Constructor for class edu.harvard.hul.ois.jhove.module.tiff.TiffProfileFXL
Constructor.
TiffProfileFXM - Class in edu.harvard.hul.ois.jhove.module.tiff
Profile checker for TIFF FX, Profile M (Mixed Raster Content).
TiffProfileFXM() - Constructor for class edu.harvard.hul.ois.jhove.module.tiff.TiffProfileFXM
Constructor.
TiffProfileFXS - Class in edu.harvard.hul.ois.jhove.module.tiff
Profile checker for TIFF FX, Profile S.
TiffProfileFXS() - Constructor for class edu.harvard.hul.ois.jhove.module.tiff.TiffProfileFXS
Constructor.
TiffProfileGeoTIFF - Class in edu.harvard.hul.ois.jhove.module.tiff
Profile checker for GeoTIFF.
TiffProfileGeoTIFF() - Constructor for class edu.harvard.hul.ois.jhove.module.tiff.TiffProfileGeoTIFF
 
TiffProfilePagemaker6 - Class in edu.harvard.hul.ois.jhove.module.tiff
Profile checker for TIFF Pagemaker 6.0.
TiffProfilePagemaker6() - Constructor for class edu.harvard.hul.ois.jhove.module.tiff.TiffProfilePagemaker6
 
TiffProfilePhotoshop - Class in edu.harvard.hul.ois.jhove.module.tiff
Profile checker for TIFF Photoshop.
TiffProfilePhotoshop() - Constructor for class edu.harvard.hul.ois.jhove.module.tiff.TiffProfilePhotoshop
 
TiffProfileRFC1314 - Class in edu.harvard.hul.ois.jhove.module.tiff
Profile checker for TIFF RFC 1314.
TiffProfileRFC1314() - Constructor for class edu.harvard.hul.ois.jhove.module.tiff.TiffProfileRFC1314
 
TiffTags - Class in edu.harvard.hul.ois.jhove.module.tiff
A class for enumerating TIFF tag numbers and labels, and associating one with the other.
Tile - Class in edu.harvard.hul.ois.jhove.module.jpeg2000
Encapsulation of a JPEG 2000 tile in a codestream.
Tile() - Constructor for class edu.harvard.hul.ois.jhove.module.jpeg2000.Tile
Constructor.
TILE_INDEX - Static variable in class edu.harvard.hul.ois.jhove.module.jpeg.Spiff
 
TILEBYTECOUNTS - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Standard TIFF 6.0 tags.
TILELENGTH - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Standard TIFF 6.0 tags.
TILEOFFSETS - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Standard TIFF 6.0 tags.
TilePart - Class in edu.harvard.hul.ois.jhove.module.jpeg2000
Encapsulation of a tile-part in a JPEG 2000 codestream.
TilePart(Tile, int) - Constructor for class edu.harvard.hul.ois.jhove.module.jpeg2000.TilePart
Constructor.
TILEWIDTH - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Standard TIFF 6.0 tags.
Tiling - Class in edu.harvard.hul.ois.jhove.module.jpeg
Encapsulation of the tiling information for a JPEG image.
Tiling() - Constructor for class edu.harvard.hul.ois.jhove.module.jpeg.Tiling
Constructor.
TILING_CAPABILITY_V1 - Static variable in class edu.harvard.hul.ois.jhove.module.jpeg.JpegStrings
 
TILING_TYPE - Static variable in class edu.harvard.hul.ois.jhove.module.jpeg.JpegStrings
 
TIME_STAMP - Static variable in class edu.harvard.hul.ois.jhove.module.jpeg.Spiff
 
timestampToDate(long) - Method in class edu.harvard.hul.ois.jhove.module.AiffModule
Converts a Macintosh-style timestamp (seconds since January 1, 1904) into a Java date.
TLM - Static variable in class edu.harvard.hul.ois.jhove.module.jpeg2000.MarkerSegment
 
TLMMarkerSegment - Class in edu.harvard.hul.ois.jhove.module.jpeg2000
Class for the TLM (tile length) marker segment.
TLMMarkerSegment() - Constructor for class edu.harvard.hul.ois.jhove.module.jpeg2000.TLMMarkerSegment
 
toDateTime(Date) - Method in class edu.harvard.hul.ois.jhove.HandlerBase
 
toDouble() - Method in class edu.harvard.hul.ois.jhove.module.aiff.ExtDouble
Convert the value to a Java double.
toDouble() - Method in class edu.harvard.hul.ois.jhove.Rational
Converts to a floating-point value (numerator/denominator).
toHex(String) - Static method in class edu.harvard.hul.ois.jhove.module.PdfModule
PRIVATE CLASS METHODS.
toHex(Vector) - Static method in class edu.harvard.hul.ois.jhove.module.PdfModule
 
toISO_639_2(String) - Static method in class edu.harvard.hul.ois.jhove.TextMDMetadata
Transform a language to the ISO_639-2 language (only enumeration allowed in textMD schema).
token - Variable in class edu.harvard.hul.ois.jhove.module.html.ParseHtml
 
Token - Class in edu.harvard.hul.ois.jhove.module.html
Describes the input token stream.
Token() - Constructor for class edu.harvard.hul.ois.jhove.module.html.Token
 
Token - Class in edu.harvard.hul.ois.jhove.module.pdf
Abstract class to encapsulate lexical tokens from a PDF file.
Token() - Constructor for class edu.harvard.hul.ois.jhove.module.pdf.Token
Superclass constructor
token_source - Variable in class edu.harvard.hul.ois.jhove.module.html.ParseHtml
 
tokenImage - Variable in exception edu.harvard.hul.ois.jhove.module.html.ParseException
This is a reference to the "tokenImage" array of the generated parser within which the parse error occurred.
tokenImage - Static variable in interface edu.harvard.hul.ois.jhove.module.html.ParseHtmlConstants
 
Tokenizer - Class in edu.harvard.hul.ois.jhove.module.pdf
Tokenizer for PDF files.
Tokenizer() - Constructor for class edu.harvard.hul.ois.jhove.module.pdf.Tokenizer
Constructor.
TokenMgrError - Error in edu.harvard.hul.ois.jhove.module.html
 
TokenMgrError() - Constructor for error edu.harvard.hul.ois.jhove.module.html.TokenMgrError
 
TokenMgrError(String, int) - Constructor for error edu.harvard.hul.ois.jhove.module.html.TokenMgrError
 
TokenMgrError(boolean, int, int, int, String, char, int) - Constructor for error edu.harvard.hul.ois.jhove.module.html.TokenMgrError
 
toLong() - Method in class edu.harvard.hul.ois.jhove.Rational
Converts to a long value (numerator/denominator).
top() - Method in class edu.harvard.hul.ois.jhove.module.html.HtmlStack
Gets the top of the element stack without popping it.
toPipeline() - Method in class edu.harvard.hul.ois.jhove.module.pdf.PdfArray
Concatenate the elements, if they are PdfSimpleObjects, into a string separated by spaces.
TopLevelBoxHolder - Class in edu.harvard.hul.ois.jhove.module.jpeg2000
A subclass of BoxHolder specifically for getting top-level boxes in a JPEG 2000 file.
TopLevelBoxHolder(Jpeg2000Module, RandomAccessFile, RepInfo, DataInputStream) - Constructor for class edu.harvard.hul.ois.jhove.module.jpeg2000.TopLevelBoxHolder
 
toProperty(TextMDMetadata) - Method in class edu.harvard.hul.ois.jhove.module.html.HtmlMetadata
Converts the metadata to a Property.
toRectangle() - Method in class edu.harvard.hul.ois.jhove.module.pdf.PdfArray
Attempts to convert this Array to a PDF rectangle.
toString() - Method in class edu.harvard.hul.ois.jhove.EnumerationType
Return enumeration value.
toString() - Method in class edu.harvard.hul.ois.jhove.module.html.Token
Returns the image.
toString() - Method in class edu.harvard.hul.ois.jhove.module.pdf.State
Convert to String representation.
toString() - Method in class edu.harvard.hul.ois.jhove.Rational
Represents the Rational as a String in the form of "numerator/denominator".
toTextMDCharset(String) - Static method in class edu.harvard.hul.ois.jhove.TextMDMetadata
Transform a given charset in the "authorized" list given in the textMD schema enumeration.
trailerDictOK() - Method in class edu.harvard.hul.ois.jhove.module.pdf.XProfileBase
Checks profile requirements on the trailer dictionary.
TRANSFERFUNCTION - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Standard TIFF 6.0 tags.
TRANSFERRANGE - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Standard TIFF 6.0 tags.
TRANSPARENCYINDICATOR_L - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
 
TRUE - Static variable in class edu.harvard.hul.ois.jhove.RepInfo
Values for _valid
TYPE - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.IFD
TIFF type labels.
typeNames - Static variable in class edu.harvard.hul.ois.jhove.module.pdf.StdStructTypes
Array of valid structure type names

U

UNDEFINED - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.IFD
TIFF UNDEFINED (unsigned 8-bit) type.
UNDETERMINED - Static variable in class edu.harvard.hul.ois.jhove.RepInfo
Values for _valid
unicodeBlock - Static variable in class edu.harvard.hul.ois.jhove.module.Utf8Block
Unicode 6.0.0 blocks, derived from <http://www.unicode.org/Public/3.2-Update/Blocks-3.2.0.txt> and updated to Unicode 6.0.0
UNKNOWN - Static variable in class edu.harvard.hul.ois.jhove.viewer.ProgressWindow
Progress state: Indeterminate or not yet started.
UNKNOWN_JAVA_CHARSET - Static variable in class edu.harvard.hul.ois.jhove.TextMDMetadata
Array of textMD charsets unknown by java.nio.charset.Charsets
unparsedEntityDecl(String, String, String, String) - Method in class edu.harvard.hul.ois.jhove.module.xml.XmlModuleHandler
Picks up unparsed entity declarations, after calling the superclass's unparsedEntityDecl, and puts their information into the unparsed entity declaration list as an array of four strings: [ name, publicId, systemId, notationName].
unsignedByteToByte(int) - Static method in class edu.harvard.hul.ois.jhove.Checksum
Maps unsigned byte value (0 to 256) to signed byte value (-128 to 127).
update(byte) - Method in class edu.harvard.hul.ois.jhove.Checksummer
Updates the checksum with the argument.
update(int) - Method in class edu.harvard.hul.ois.jhove.Checksummer
Updates the checksum with the argument.
update(byte[]) - Method in class edu.harvard.hul.ois.jhove.Checksummer
Updates the checksum with the argument.
update(byte[], int, int) - Method in class edu.harvard.hul.ois.jhove.Checksummer
Updates the checksum with the argument.
UpdateLineColumn(char) - Method in class edu.harvard.hul.ois.jhove.module.html.HtmlCharStream
 
UpdateLineColumn(char) - Method in class edu.harvard.hul.ois.jhove.module.html.SimpleCharStream
 
URI - Static variable in class edu.harvard.hul.ois.jhove.IdentifierType
Identifier type for Uniform Resource Identifier.
URL - Static variable in class edu.harvard.hul.ois.jhove.IdentifierType
Identifier type for Uniform Resource Locator.
URN - Static variable in class edu.harvard.hul.ois.jhove.IdentifierType
Identifier type for Uniform Resource Name.
USERPERMFLAGS2 - Static variable in class edu.harvard.hul.ois.jhove.module.pdf.PdfStrings
Flags for user access permissions when revision 2 is specified.
USERPERMFLAGS3 - Static variable in class edu.harvard.hul.ois.jhove.module.pdf.PdfStrings
Flags for user access permissions when revision 3 is specified.
Utf8Block - Class in edu.harvard.hul.ois.jhove.module
This class encapsulates a Unicode code block.
Utf8Block(int, int, String) - Constructor for class edu.harvard.hul.ois.jhove.module.Utf8Block
Creates a Utf8Block, specifying the start and end codes and block name.
Utf8BlockMarker - Class in edu.harvard.hul.ois.jhove
 
Utf8BlockMarker() - Constructor for class edu.harvard.hul.ois.jhove.Utf8BlockMarker
 
Utf8Module - Class in edu.harvard.hul.ois.jhove.module
Module for analysis of content as a UTF-8 stream.
Utf8Module() - Constructor for class edu.harvard.hul.ois.jhove.module.Utf8Module
Creates a Utf8Module.
UUIDBox - Class in edu.harvard.hul.ois.jhove.module.jpeg2000
UUID Box.
UUIDBox(RandomAccessFile, BoxHolder) - Constructor for class edu.harvard.hul.ois.jhove.module.jpeg2000.UUIDBox
Constructor with superbox.
UUIDInfoBox - Class in edu.harvard.hul.ois.jhove.module.jpeg2000
UUID info box.
UUIDInfoBox(RandomAccessFile, BoxHolder) - Constructor for class edu.harvard.hul.ois.jhove.module.jpeg2000.UUIDInfoBox
Constructor with superbox.
uuidInfos - Variable in class edu.harvard.hul.ois.jhove.module.Jpeg2000Module
 
UUIDListBox - Class in edu.harvard.hul.ois.jhove.module.jpeg2000
UUID Box.
UUIDListBox(RandomAccessFile, BoxHolder) - Constructor for class edu.harvard.hul.ois.jhove.module.jpeg2000.UUIDListBox
Constructor with superbox.
uuids - Variable in class edu.harvard.hul.ois.jhove.module.Jpeg2000Module
 

V

validate(List, RepInfo) - Method in class edu.harvard.hul.ois.jhove.module.html.HtmlDocDesc
Validates the document and puts interesting properties into the RepInfo.
valignAtt - Static variable in class edu.harvard.hul.ois.jhove.module.html.Html4DocDesc
Vertical alignment attribute for cells.
valueOK(String, String) - Method in class edu.harvard.hul.ois.jhove.module.html.HtmlAttributeDesc
Returns true if the parameter is a permissible value for the attribute.
valueToString(Object) - Method in class edu.harvard.hul.ois.jhove.handler.XmlHandler
 
vectorToPropArray(Vector) - Method in class edu.harvard.hul.ois.jhove.ModuleBase
A utility for converting a Vector of Properties to an Array.
VERSION - Static variable in class edu.harvard.hul.ois.jhove.TextMDMetadata
 
VERSION_IDENT - Static variable in class edu.harvard.hul.ois.jhove.module.jpeg.Spiff
 
VERSIONYEAR - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.GlobalParametersIFD
Tiff/FX-specific tags.
VERTICALCITATIONGEOKEY - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
GeoTIFF key values.
VERTICALCSDATUM - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.GeoTiffStrings
 
VERTICALCSDATUM_INDEX - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.GeoTiffStrings
 
VERTICALCSTYPE - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.GeoTiffStrings
 
VERTICALCSTYPE_INDEX - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.GeoTiffStrings
 
VERTICALCSTYPEGEOKEY - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
GeoTIFF key values.
VERTICALDATUMGEOKEY - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
GeoTIFF key values.
VERTICALUNITSGEOKEY - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
GeoTIFF key values.
ViewHandler - Class in edu.harvard.hul.ois.jhove.viewer
This is an output handler which connects JHOVE output to the Swing interface of the viewer application.
ViewHandler(JhoveWindow, App, JhoveBase) - Constructor for class edu.harvard.hul.ois.jhove.viewer.ViewHandler
Creates a ViewHandler.
ViewWindow - Class in edu.harvard.hul.ois.jhove.viewer
This is the main window for viewing the results of a file analysis.
ViewWindow(App, JhoveBase, JhoveWindow) - Constructor for class edu.harvard.hul.ois.jhove.viewer.ViewWindow
Constructor.

W

warning(SAXParseException) - Method in class edu.harvard.hul.ois.jhove.module.xml.XmlModuleHandler
Processes a warning.
WAVE_FORMAT_EXTENSIBLE - Static variable in class edu.harvard.hul.ois.jhove.module.wave.FormatChunk
Compression code for Microsoft Extensible Wave Format
WAVE_FORMAT_MPEG - Static variable in class edu.harvard.hul.ois.jhove.module.wave.FormatChunk
Compression code for MPEG
WAVE_FORMAT_PCM - Static variable in class edu.harvard.hul.ois.jhove.module.wave.FormatChunk
Compression code for original Microsoft PCM
WaveModule - Class in edu.harvard.hul.ois.jhove.module
Module for identification and validation of WAVE sound files.
WaveModule() - Constructor for class edu.harvard.hul.ois.jhove.module.WaveModule
Instantiates an WaveModule object.
WaveStrings - Class in edu.harvard.hul.ois.jhove.module.wave
A class for holding arrays of informative strings that will go into properties of a WAVE object.
WEB - Static variable in class edu.harvard.hul.ois.jhove.DocumentType
Document type for a Web page.
WHITEBALANCE_L - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.ExifIFD
 
WHITEPOINT - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Standard TIFF 6.0 tags.
WHITESPACE - Static variable in class edu.harvard.hul.ois.jhove.module.pdf.State
 
writeFile(List, List, File, File, String, int) - Method in class edu.harvard.hul.ois.jhove.viewer.ConfigWriter
Writes out the content of the file to the temporary file, then deletes the existing configuration file (as specified by the constructor parameter) and renames the temporary file to the configuration file.
wrongBoxContext() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
Utility error reporting function for box in a context (superbox or lack thereof) which is not permitted.
wrongBoxSize() - Method in class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
Utility error reporting function for incorrect box length.

X

X1aProfile - Class in edu.harvard.hul.ois.jhove.module.pdf
PDF profile checker for PDF/X-1a documents.
X1aProfile(PdfModule) - Constructor for class edu.harvard.hul.ois.jhove.module.pdf.X1aProfile
Constructor.
X1Profile - Class in edu.harvard.hul.ois.jhove.module.pdf
PDF profile checker for PDF/X-1 documents.
X1Profile(PdfModule) - Constructor for class edu.harvard.hul.ois.jhove.module.pdf.X1Profile
Constructor.
X2Profile - Class in edu.harvard.hul.ois.jhove.module.pdf
PDF profile checker for PDF/X-2 documents.
X2Profile(PdfModule) - Constructor for class edu.harvard.hul.ois.jhove.module.pdf.X2Profile
Constructor.
X3Profile - Class in edu.harvard.hul.ois.jhove.module.pdf
PDF profile checker for PDF/X-3 documents.
X3Profile(PdfModule) - Constructor for class edu.harvard.hul.ois.jhove.module.pdf.X3Profile
Constructor.
XFER_CHARACTERISTICS - Static variable in class edu.harvard.hul.ois.jhove.module.jpeg.Spiff
 
XHTML_1_0_FRAMESET - Static variable in class edu.harvard.hul.ois.jhove.module.HtmlModule
 
XHTML_1_0_STRICT - Static variable in class edu.harvard.hul.ois.jhove.module.HtmlModule
 
XHTML_1_0_TRANSITIONAL - Static variable in class edu.harvard.hul.ois.jhove.module.HtmlModule
 
XHTML_1_1 - Static variable in class edu.harvard.hul.ois.jhove.module.HtmlModule
 
XhtmlProcessing - Class in edu.harvard.hul.ois.jhove.module.xml
Methods for processing XHTML elements in an XML document.
XhtmlProcessing() - Constructor for class edu.harvard.hul.ois.jhove.module.xml.XhtmlProcessing
 
XMLBox - Class in edu.harvard.hul.ois.jhove.module.jpeg2000
XML Box.
XMLBox(RandomAccessFile, BoxHolder) - Constructor for class edu.harvard.hul.ois.jhove.module.jpeg2000.XMLBox
Constructor with superbox.
xmlDecl() - Static method in class edu.harvard.hul.ois.jhove.HandlerBase
Return a canonical XML declaration with default encoding.
xmlDecl(String) - Static method in class edu.harvard.hul.ois.jhove.HandlerBase
Return a canonical XML declaration with specified encoding.
XMLDecl() - Method in class edu.harvard.hul.ois.jhove.module.html.ParseHtml
 
XmlDeclHandler - Class in edu.harvard.hul.ois.jhove.module.xml
This implementation of DeclHandler takes care of collecting entity declarations.
XmlDeclHandler() - Constructor for class edu.harvard.hul.ois.jhove.module.xml.XmlDeclHandler
 
XmlDeclStream - Class in edu.harvard.hul.ois.jhove.module.xml
This class is layered under the InputSource for the XmlModule so that it can detect an XML declaration and character references, which aren't reported by other API's.
XmlDeclStream(InputStream) - Constructor for class edu.harvard.hul.ois.jhove.module.xml.XmlDeclStream
 
XmlHandler - Class in edu.harvard.hul.ois.jhove.handler
OutputHandler for XML output.
XmlHandler() - Constructor for class edu.harvard.hul.ois.jhove.handler.XmlHandler
Creates an XmlHandler.
XmlHandler(String, String, int[], String, String) - Constructor for class edu.harvard.hul.ois.jhove.handler.XmlHandler
Constructor for use by subclasses.
XmlLexicalHandler - Class in edu.harvard.hul.ois.jhove.module.xml
This implementation of LexicalHandler takes care of comments, DTD's, entities and other stuff for XmlModule.
XmlLexicalHandler() - Constructor for class edu.harvard.hul.ois.jhove.module.xml.XmlLexicalHandler
 
xmlList - Variable in class edu.harvard.hul.ois.jhove.module.Jpeg2000Module
 
XmlModule - Class in edu.harvard.hul.ois.jhove.module
Module for identification and validation of XML files.
XmlModule() - Constructor for class edu.harvard.hul.ois.jhove.module.XmlModule
Instantiate an XmlModule object.
XmlModuleHandler - Class in edu.harvard.hul.ois.jhove.module.xml
This handler does the parsing work of the XML module.
XmlModuleHandler() - Constructor for class edu.harvard.hul.ois.jhove.module.xml.XmlModuleHandler
Constructor.
XMLWrapperStream - Class in edu.harvard.hul.ois.jhove
This class serves to provide an InputStream for an XML fragment (e.g., embedded XMP metadata).
XMLWrapperStream(InputStream, String, String, String, String) - Constructor for class edu.harvard.hul.ois.jhove.XMLWrapperStream
Constructor.
XMLWrapperStream(InputStream) - Constructor for class edu.harvard.hul.ois.jhove.XMLWrapperStream
Constructor.
XMLWrapperStream(InputStream, String) - Constructor for class edu.harvard.hul.ois.jhove.XMLWrapperStream
Constructor.
XMPHandler - Class in edu.harvard.hul.ois.jhove
This class encapsulates XMP metadata within a file.
XMPHandler() - Constructor for class edu.harvard.hul.ois.jhove.XMPHandler
 
XMPSource - Class in edu.harvard.hul.ois.jhove
Class for providing an InputSource to XMPHandler.
XMPSource(Reader) - Constructor for class edu.harvard.hul.ois.jhove.XMPSource
Constructor with Reader.
xObjectOK(PdfDictionary) - Method in class edu.harvard.hul.ois.jhove.module.pdf.AProfile
Checks a single XObject for xObjectsOK.
xObjectOK(PdfDictionary) - Method in class edu.harvard.hul.ois.jhove.module.pdf.PdfProfile
Checks a single XObject for xObjectsOK.
xObjectOK(PdfDictionary) - Method in class edu.harvard.hul.ois.jhove.module.pdf.X1Profile
 
xObjectOK(PdfDictionary) - Method in class edu.harvard.hul.ois.jhove.module.pdf.X3Profile
 
xObjectOK(PdfDictionary) - Method in class edu.harvard.hul.ois.jhove.module.pdf.XProfileBase
Checks a single XObject for xObjectsOK.
xObjectsOK(PdfDictionary) - Method in class edu.harvard.hul.ois.jhove.module.pdf.PdfProfile
This checks the "XObjects" dictionary, which is a dictionary whose entries have values that are XObjects.
XPOSITION - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Standard TIFF 6.0 tags.
XProfileBase - Class in edu.harvard.hul.ois.jhove.module.pdf
Abstract base class for PDF profilers of the PDF/X family.
XProfileBase(PdfModule, int) - Constructor for class edu.harvard.hul.ois.jhove.module.pdf.XProfileBase
Constructor.
XRESOLUTION - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Standard TIFF 6.0 tags.

Y

YCBCR_POSITIONING - Static variable in class edu.harvard.hul.ois.jhove.NisoImageMetadata
6.1.4.4 YCbCr positioning value labels.
YCBCRCOEFFICIENTS - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Standard TIFF 6.0 tags.
YCBCRPOSITIONING - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Standard TIFF 6.0 tags.
YCBCRSUBSAMPLING - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Standard TIFF 6.0 tags.
YPOSITION - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Standard TIFF 6.0 tags.
YRESOLUTION - Static variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffIFD
Standard TIFF 6.0 tags.

_

_abort - Variable in class edu.harvard.hul.ois.jhove.JhoveBase
Flag for aborting activity.
_actionsExist - Variable in class edu.harvard.hul.ois.jhove.module.PdfModule
 
_aesMetadata - Variable in class edu.harvard.hul.ois.jhove.module.AiffModule
 
_aesMetadata - Variable in class edu.harvard.hul.ois.jhove.module.WaveModule
 
_annotationList - Variable in class edu.harvard.hul.ois.jhove.module.AiffModule
 
_app - Variable in class edu.harvard.hul.ois.jhove.HandlerBase
The application object
_app - Variable in class edu.harvard.hul.ois.jhove.ModuleBase
The application object
_app - Variable in class edu.harvard.hul.ois.jhove.viewer.InfoWindow
 
_appSegsList - Variable in class edu.harvard.hul.ois.jhove.module.JpegModule
 
_arithCondTables - Variable in class edu.harvard.hul.ois.jhove.module.JpegModule
 
_attributes - Variable in class edu.harvard.hul.ois.jhove.module.html.JHOpenTag
List of element attributes.
_base - Variable in class edu.harvard.hul.ois.jhove.HandlerBase
The Jhove engine
_baseURL - Variable in class edu.harvard.hul.ois.jhove.module.XmlModule
 
_bigEndian - Variable in class edu.harvard.hul.ois.jhove.module.tiff.IFD
True if big-endian file.
_bigEndian - Variable in class edu.harvard.hul.ois.jhove.ModuleBase
The dominant "endianness" of the Module.
_bleedBoxPresent - Variable in class edu.harvard.hul.ois.jhove.module.pdf.XProfileBase
Set to true if a BleedBox is found.
_blockAlign - Variable in class edu.harvard.hul.ois.jhove.module.WaveModule
 
_blocksList - Variable in class edu.harvard.hul.ois.jhove.module.GifModule
 
_boxHeader - Variable in class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
 
_bufferSize - Variable in class edu.harvard.hul.ois.jhove.JhoveBase
Buffer size for buffered I/O.
_byteOffsetIsValid - Variable in class edu.harvard.hul.ois.jhove.module.TiffModule
 
_bytesRead - Variable in class edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box
 
_cachedObjectStream - Variable in class edu.harvard.hul.ois.jhove.module.PdfModule
Cached object stream.
_cachedStreamIndex - Variable in class edu.harvard.hul.ois.jhove.module.PdfModule
Object number of cached object stream.
_capability0 - Variable in class edu.harvard.hul.ois.jhove.module.JpegModule
 
_capability1 - Variable in class edu.harvard.hul.ois.jhove.module.JpegModule
 
_ccs - Variable in class edu.harvard.hul.ois.jhove.module.jpeg2000.MarkerSegment
 
_ch - Variable in class edu.harvard.hul.ois.jhove.module.pdf.Tokenizer
Character code of current character.
_checksum - Variable in class edu.harvard.hul.ois.jhove.JhoveBase
 
_checksumFinished - Variable in class edu.harvard.hul.ois.jhove.ModuleBase
Flag indicating valid checksum information set
_cid0FontsMap - Variable in class edu.harvard.hul.ois.jhove.module.PdfModule
 
_cid2FontsMap - Variable in class edu.harvard.hul.ois.jhove.module.PdfModule
 
_ckSummer - Variable in class edu.harvard.hul.ois.jhove.module.AiffModule
PRIVATE Instance FIELDS.
_ckSummer - Variable in class edu.harvard.hul.ois.jhove.module.GifModule
 
_ckSummer - Variable in class edu.harvard.hul.ois.jhove.module.JpegModule
 
_ckSummer - Variable in class edu.harvard.hul.ois.jhove.module.WaveModule
PRIVATE INSTANCE FIELDS.
_ckSummer - Variable in class edu.harvard.hul.ois.jhove.module.XmlModule
PRIVATE INSTANCE FIELDS.
_codProperty - Variable in class edu.harvard.hul.ois.jhove.module.jpeg2000.MainOrTile
Coding style default property
_column - Variable in class edu.harvard.hul.ois.jhove.module.html.JHElement
 
_comments - Variable in class edu.harvard.hul.ois.jhove.module.jpeg2000.MainOrTile
Comments -- list of properties
_commentsList - Variable in class edu.harvard.hul.ois.jhove.module.JpegModule
 
_components - Variable in class edu.harvard.hul.ois.jhove.module.jpeg2000.MainOrTile
Array of components.
_compressSet - Variable in class edu.harvard.hul.ois.jhove.module.JpegModule
 
_configFile - Variable in class edu.harvard.hul.ois.jhove.JhoveBase
Configuration file pathname.
_conn - Variable in class edu.harvard.hul.ois.jhove.JhoveBase
Current URL connection.
_content - Variable in class edu.harvard.hul.ois.jhove.ConfigHandler
 
_controlCharMap - Variable in class edu.harvard.hul.ois.jhove.module.AsciiModule
 
_controlCharMap - Variable in class edu.harvard.hul.ois.jhove.module.Utf8Module
 
_countStream - Variable in class edu.harvard.hul.ois.jhove.ModuleBase
Flag to indicate read routines should count the stream
_coverage - Variable in class edu.harvard.hul.ois.jhove.ModuleBase
Coverage information
_crc32 - Variable in class edu.harvard.hul.ois.jhove.ModuleBase
CRC32 calculated on content object
_cs - Variable in class edu.harvard.hul.ois.jhove.module.jpeg2000.MarkerSegment
 
_cstream - Variable in class edu.harvard.hul.ois.jhove.module.AiffModule
 
_cstream - Variable in class edu.harvard.hul.ois.jhove.module.AsciiModule
PRIVATE INSTANCE FIELDS.
_cstream - Variable in class edu.harvard.hul.ois.jhove.module.BytestreamModule
PRIVATE INSTANCE FIELDS.
_cstream - Variable in class edu.harvard.hul.ois.jhove.module.GifModule
 
_cstream - Variable in class edu.harvard.hul.ois.jhove.module.HtmlModule
PRIVATE INSTANCE FIELDS.
_cstream - Variable in class edu.harvard.hul.ois.jhove.module.JpegModule
 
_cstream - Variable in class edu.harvard.hul.ois.jhove.module.Utf8Module
PRIVATE INSTANCE FIELDS.
_cstream - Variable in class edu.harvard.hul.ois.jhove.module.WaveModule
 
_cstream - Variable in class edu.harvard.hul.ois.jhove.module.XmlModule
 
_currentThread - Variable in class edu.harvard.hul.ois.jhove.JhoveBase
Thread currently parsing a document.
_date - Variable in class edu.harvard.hul.ois.jhove.HandlerBase
Handler last modification date
_date - Variable in class edu.harvard.hul.ois.jhove.ModuleBase
Module last modification date
_dateFmt - Variable in class edu.harvard.hul.ois.jhove.viewer.InfoWindow
 
_defaultNiso - Variable in class edu.harvard.hul.ois.jhove.module.Jpeg2000Module
 
_defaultParams - Variable in class edu.harvard.hul.ois.jhove.HandlerBase
List of default parameters.
_defaultParams - Variable in class edu.harvard.hul.ois.jhove.ModuleBase
List of default parameters.
_destNames - Variable in class edu.harvard.hul.ois.jhove.module.PdfModule
 
_destsDict - Variable in class edu.harvard.hul.ois.jhove.module.PdfModule
 
_dict - Variable in class edu.harvard.hul.ois.jhove.module.pdf.DocNode
The dictionary which defines this node.
_dict - Variable in class edu.harvard.hul.ois.jhove.module.pdf.NameTreeNode
 
_dict - Variable in class edu.harvard.hul.ois.jhove.module.pdf.PageLabelNode
The dictionary which defines this node.
_directory - Variable in class edu.harvard.hul.ois.jhove.handler.audit.AuditState
Directory pathname.
_dngRawFlag - Variable in class edu.harvard.hul.ois.jhove.module.TiffModule
Special flag for DNG profiles; is raw IFD profile satisfied
_dngThumbnailFlag - Variable in class edu.harvard.hul.ois.jhove.module.TiffModule
Special flag for DNG profiles; is "thumbnail" (IFD 0) profile satisfied
_docCatalogList - Variable in class edu.harvard.hul.ois.jhove.module.PdfModule
 
_docCatDict - Variable in class edu.harvard.hul.ois.jhove.module.PdfModule
 
_docCatDictRef - Variable in class edu.harvard.hul.ois.jhove.module.PdfModule
 
_docInfoDict - Variable in class edu.harvard.hul.ois.jhove.module.PdfModule
 
_docInfoDictRef - Variable in class edu.harvard.hul.ois.jhove.module.PdfModule
 
_docInfoList - Variable in class edu.harvard.hul.ois.jhove.module.PdfModule
 
_docTreeRoot - Variable in class edu.harvard.hul.ois.jhove.module.PdfModule
 
_doctype - Variable in class edu.harvard.hul.ois.jhove.module.HtmlModule
 
_doctypeElements - Variable in class edu.harvard.hul.ois.jhove.module.html.JHDoctype
List of tokens in the DOCTYPE.
_dstream - Variable in class edu.harvard.hul.ois.jhove.module.AiffModule
 
_dstream - Variable in class edu.harvard.hul.ois.jhove.module.AsciiModule
 
_dstream - Variable in class edu.harvard.hul.ois.jhove.module.BytestreamModule
 
_dstream - Variable in class edu.harvard.hul.ois.jhove.module.GifModule
 
_dstream - Variable in class edu.harvard.hul.ois.jhove.module.HtmlModule
 
_dstream - Variable in class edu.harvard.hul.ois.jhove.module.iff.Chunk
 
_dstream - Variable in class edu.harvard.hul.ois.jhove.module.jpeg2000.MarkerSegment
 
_dstream - Variable in class edu.harvard.hul.ois.jhove.module.Jpeg2000Module
 
_dstream - Variable in class edu.harvard.hul.ois.jhove.module.JpegModule
 
_dstream - Variable in class edu.harvard.hul.ois.jhove.module.Utf8Module
 
_dstream - Variable in class edu.harvard.hul.ois.jhove.module.WaveModule
 
_dstream - Variable in class edu.harvard.hul.ois.jhove.module.XmlModule
 
_dstrm - Variable in class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
 
_embeddedFiles - Variable in class edu.harvard.hul.ois.jhove.module.PdfModule
 
_encoding - Variable in class edu.harvard.hul.ois.jhove.HandlerBase
Character encoding for writer
_encoding - Variable in class edu.harvard.hul.ois.jhove.JhoveBase
Selected encoding.
_encoding - Variable in class edu.harvard.hul.ois.jhove.module.pdf.PdfXMPSource
 
_encryptDict - Variable in class edu.harvard.hul.ois.jhove.module.PdfModule
 
_encryptDictRef - Variable in class edu.harvard.hul.ois.jhove.module.PdfModule
 
_encrypted - Variable in class edu.harvard.hul.ois.jhove.module.PdfModule
 
_encryptList - Variable in class edu.harvard.hul.ois.jhove.module.PdfModule
 
_eof - Variable in class edu.harvard.hul.ois.jhove.module.PdfModule
 
_exifFirstFlag - Variable in class edu.harvard.hul.ois.jhove.module.TiffModule
Special flag for Exif profiles: Is main IFD profile satisfied
_exifInfo - Variable in class edu.harvard.hul.ois.jhove.module.WaveModule
 
_exifProfileOK - Variable in class edu.harvard.hul.ois.jhove.module.JpegModule
 
_exifProp - Variable in class edu.harvard.hul.ois.jhove.module.JpegModule
 
_exifThumbnailFlag - Variable in class edu.harvard.hul.ois.jhove.module.TiffModule
Special flag for Exif profiles: Is thumbnail IFD profile satisfied
_expList - Variable in class edu.harvard.hul.ois.jhove.module.JpegModule
 
_extensions - Variable in class edu.harvard.hul.ois.jhove.JhoveBase
Associate map of configution extensions.
_extStreamsList - Variable in class edu.harvard.hul.ois.jhove.module.PdfModule
 
_features - Variable in class edu.harvard.hul.ois.jhove.ModuleBase
The list of supported features.
_file - Variable in class edu.harvard.hul.ois.jhove.module.pdf.Tokenizer
Source from which to read bytes.
_filtersList - Variable in class edu.harvard.hul.ois.jhove.module.PdfModule
 
_format - Variable in class edu.harvard.hul.ois.jhove.ModuleBase
Formats recognized by this Module
_gceCounter - Variable in class edu.harvard.hul.ois.jhove.module.GifModule
 
_genNumber - Variable in class edu.harvard.hul.ois.jhove.module.pdf.PdfObject
PDF generation number.
_getCurrentValue() - Method in class edu.harvard.hul.ois.jhove.module.pdf.PageLabelNode
Returns value associated with current key
_globalColorTableFlag - Variable in class edu.harvard.hul.ois.jhove.module.GifModule
 
_globalColorTableSize - Variable in class edu.harvard.hul.ois.jhove.module.GifModule
 
_handlerList - Variable in class edu.harvard.hul.ois.jhove.JhoveBase
Ordered list of output handlers.
_handlerMap - Variable in class edu.harvard.hul.ois.jhove.JhoveBase
Map of output handlers (for fast access by name).
_handlerParams - Variable in class edu.harvard.hul.ois.jhove.ConfigHandler
The list of handler parameters.
_home - Variable in class edu.harvard.hul.ois.jhove.handler.AuditHandler
Home directory of the audit.
_idProperty - Variable in class edu.harvard.hul.ois.jhove.module.PdfModule
 
_imageList - Variable in class edu.harvard.hul.ois.jhove.module.JpegModule
 
_imageProp - Variable in class edu.harvard.hul.ois.jhove.module.JpegModule
 
_imagesList - Variable in class edu.harvard.hul.ois.jhove.module.PdfModule
 
_info - Variable in class edu.harvard.hul.ois.jhove.module.tiff.IFD
Representation information.
_init - Variable in class edu.harvard.hul.ois.jhove.HandlerBase
Initialization value.
_init - Variable in class edu.harvard.hul.ois.jhove.ModuleBase
Initialization value.
_isHandler - Variable in class edu.harvard.hul.ois.jhove.ConfigHandler
 
_isModule - Variable in class edu.harvard.hul.ois.jhove.ConfigHandler
 
_isRandomAccess - Variable in class edu.harvard.hul.ois.jhove.ModuleBase
Random access flag
_je - Variable in class edu.harvard.hul.ois.jhove.HandlerBase
JHOVE engine.
_je - Variable in class edu.harvard.hul.ois.jhove.ModuleBase
JHOVE engine.
_jhoveHome - Variable in class edu.harvard.hul.ois.jhove.JhoveBase
JHOVE home directory.
_jpegExtsList - Variable in class edu.harvard.hul.ois.jhove.module.JpegModule
 
_labeledText - Variable in class edu.harvard.hul.ois.jhove.module.WaveModule
 
_labels - Variable in class edu.harvard.hul.ois.jhove.module.WaveModule
 
_level - Variable in class edu.harvard.hul.ois.jhove.HandlerBase
Indentation level
_line - Variable in class edu.harvard.hul.ois.jhove.module.html.JHElement
 
_lineEndCR - Variable in class edu.harvard.hul.ois.jhove.module.AsciiModule
 
_lineEndCR - Variable in class edu.harvard.hul.ois.jhove.module.html.HtmlCharStream
 
_lineEndCR - Variable in class edu.harvard.hul.ois.jhove.module.Utf8Module
 
_lineEndCR - Variable in class edu.harvard.hul.ois.jhove.module.xml.XmlDeclStream
 
_lineEndCRLF - Variable in class edu.harvard.hul.ois.jhove.module.AsciiModule
 
_lineEndCRLF - Variable in class edu.harvard.hul.ois.jhove.module.html.HtmlCharStream
 
_lineEndCRLF - Variable in class edu.harvard.hul.ois.jhove.module.Utf8Module
 
_lineEndCRLF - Variable in class edu.harvard.hul.ois.jhove.module.xml.XmlDeclStream
 
_lineEndLF - Variable in class edu.harvard.hul.ois.jhove.module.AsciiModule
 
_lineEndLF - Variable in class edu.harvard.hul.ois.jhove.module.html.HtmlCharStream
 
_lineEndLF - Variable in class edu.harvard.hul.ois.jhove.module.Utf8Module
 
_lineEndLF - Variable in class edu.harvard.hul.ois.jhove.module.xml.XmlDeclStream
 
_logger - Variable in class edu.harvard.hul.ois.jhove.HandlerBase
Logger for a handler class.
_logger - Variable in class edu.harvard.hul.ois.jhove.JhoveBase
Logger for this class.
_logger - Variable in class edu.harvard.hul.ois.jhove.ModuleBase
Logger for a module class.
_logger - Variable in class edu.harvard.hul.ois.jhove.viewer.JhoveWindow
Logger for a module class.
_logLevel - Variable in class edu.harvard.hul.ois.jhove.JhoveBase
Logger resource bundle.
_md5 - Variable in class edu.harvard.hul.ois.jhove.ModuleBase
MD5 digest calculated on content object
_message - Variable in class edu.harvard.hul.ois.jhove.Message
Message text.
_metadata - Variable in class edu.harvard.hul.ois.jhove.module.AiffModule
 
_metadata - Variable in class edu.harvard.hul.ois.jhove.module.GifModule
 
_metadata - Variable in class edu.harvard.hul.ois.jhove.module.JpegModule
 
_metadata - Variable in class edu.harvard.hul.ois.jhove.module.PdfModule
 
_metadata - Variable in class edu.harvard.hul.ois.jhove.module.WaveModule
 
_metadata - Variable in class edu.harvard.hul.ois.jhove.module.XmlModule
 
_midiList - Variable in class edu.harvard.hul.ois.jhove.module.AiffModule
 
_mimeClass - Variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
 
_mimeType - Variable in class edu.harvard.hul.ois.jhove.handler.AuditHandler
Number of files processed by MIME type.
_mimeType - Variable in class edu.harvard.hul.ois.jhove.ModuleBase
MIME types supported by this Module
_mixVsn - Variable in class edu.harvard.hul.ois.jhove.JhoveBase
MIX version.
_mmFontsMap - Variable in class edu.harvard.hul.ois.jhove.module.PdfModule
 
_modParams - Variable in class edu.harvard.hul.ois.jhove.ConfigHandler
The list of module parameters.
_module - Variable in class edu.harvard.hul.ois.jhove.ConfigHandler
The list of modules.
_module - Variable in class edu.harvard.hul.ois.jhove.module.iff.Chunk
 
_module - Variable in class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
 
_module - Variable in class edu.harvard.hul.ois.jhove.module.jpeg2000.MarkerSegment
 
_module - Variable in class edu.harvard.hul.ois.jhove.module.pdf.DocNode
The PdfModule this node is associated with.
_module - Variable in class edu.harvard.hul.ois.jhove.module.pdf.NameTreeNode
 
_module - Variable in class edu.harvard.hul.ois.jhove.module.pdf.PageLabelNode
The PdfModule this node is associated with.
_module - Variable in class edu.harvard.hul.ois.jhove.module.pdf.PdfProfile
The module invoking this profile.
_moduleList - Variable in class edu.harvard.hul.ois.jhove.JhoveBase
Ordered list of modules.
_moduleMap - Variable in class edu.harvard.hul.ois.jhove.JhoveBase
Map of modules (for fast access by name).
_name - Variable in class edu.harvard.hul.ois.jhove.HandlerBase
Handler name
_name - Variable in class edu.harvard.hul.ois.jhove.module.html.JHCloseTag
 
_name - Variable in class edu.harvard.hul.ois.jhove.module.html.JHOpenTag
Element name.
_name - Variable in class edu.harvard.hul.ois.jhove.ModuleBase
Module name
_nAudit - Variable in class edu.harvard.hul.ois.jhove.handler.AuditHandler
Number of files audited.
_nByte - Variable in class edu.harvard.hul.ois.jhove.Checksummer
Byte count.
_nByte - Variable in class edu.harvard.hul.ois.jhove.JhoveBase
Byte count for digital object
_nByte - Variable in class edu.harvard.hul.ois.jhove.ModuleBase
Byte count of content object
_next - Variable in class edu.harvard.hul.ois.jhove.module.tiff.IFD
Offset of next IFD.
_nFonts - Variable in class edu.harvard.hul.ois.jhove.module.PdfModule
Number of fonts reported so far.
_niso - Variable in class edu.harvard.hul.ois.jhove.module.Jpeg2000Module
PRIVATE INSTANCE FIELDS.
_niso - Variable in class edu.harvard.hul.ois.jhove.module.JpegModule
 
_note - Variable in class edu.harvard.hul.ois.jhove.HandlerBase
Handler note
_note - Variable in class edu.harvard.hul.ois.jhove.ModuleBase
Module note
_notes - Variable in class edu.harvard.hul.ois.jhove.module.WaveModule
 
_notFound - Variable in class edu.harvard.hul.ois.jhove.handler.audit.AuditState
Number of files not found.
_notProcessed - Variable in class edu.harvard.hul.ois.jhove.handler.audit.AuditCount
Number of files not processed.
_numFreeObjects - Variable in class edu.harvard.hul.ois.jhove.module.PdfModule
 
_numGraphicBlocks - Variable in class edu.harvard.hul.ois.jhove.module.GifModule
 
_numObjects - Variable in class edu.harvard.hul.ois.jhove.module.PdfModule
 
_numScans - Variable in class edu.harvard.hul.ois.jhove.module.JpegModule
 
_numSegments - Variable in class edu.harvard.hul.ois.jhove.module.JpegModule
 
_numTrailers - Variable in class edu.harvard.hul.ois.jhove.module.PdfModule
 
_objCount - Variable in class edu.harvard.hul.ois.jhove.module.PdfModule
 
_objects - Variable in class edu.harvard.hul.ois.jhove.module.PdfModule
 
_objNumber - Variable in class edu.harvard.hul.ois.jhove.module.pdf.PdfObject
PDF object number.
_offset - Variable in class edu.harvard.hul.ois.jhove.Message
Byte offset to which message applies.
_offset - Variable in class edu.harvard.hul.ois.jhove.module.tiff.IFD
IFD offset.
_outlineDict - Variable in class edu.harvard.hul.ois.jhove.module.PdfModule
 
_outputFile - Variable in class edu.harvard.hul.ois.jhove.JhoveBase
 
_packetLengthList - Variable in class edu.harvard.hul.ois.jhove.module.jpeg2000.MainOrTile
 
_pageLabelDict - Variable in class edu.harvard.hul.ois.jhove.module.PdfModule
 
_pageLabelRoot - Variable in class edu.harvard.hul.ois.jhove.module.PdfModule
 
_pageObjectFlag - Variable in class edu.harvard.hul.ois.jhove.module.pdf.DocNode
True if this node is a PageObject.
_pagesDictRef - Variable in class edu.harvard.hul.ois.jhove.module.PdfModule
 
_pageSeqMap - Variable in class edu.harvard.hul.ois.jhove.module.PdfModule
 
_pagesList - Variable in class edu.harvard.hul.ois.jhove.module.PdfModule
 
_param - Variable in class edu.harvard.hul.ois.jhove.HandlerBase
Handler-specific parameter.
_param - Variable in class edu.harvard.hul.ois.jhove.ModuleBase
Module-specific parameter.
_parent - Variable in class edu.harvard.hul.ois.jhove.module.pdf.DocNode
The parent node of this node.
_parent - Variable in class edu.harvard.hul.ois.jhove.module.pdf.NameTreeNode
 
_parent - Variable in class edu.harvard.hul.ois.jhove.module.pdf.PageLabelNode
The parent node of this node.
_parentBox - Variable in class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
 
_parseFromSig - Variable in class edu.harvard.hul.ois.jhove.module.XmlModule
 
_parser - Variable in class edu.harvard.hul.ois.jhove.module.pdf.PdfProfile
The Parser being used on the file.
_parser - Variable in class edu.harvard.hul.ois.jhove.module.PdfModule
 
_pdfACompliant - Variable in class edu.harvard.hul.ois.jhove.module.PdfModule
 
_pocProperty - Variable in class edu.harvard.hul.ois.jhove.module.jpeg2000.MainOrTile
Progression order change property
_precSize - Variable in class edu.harvard.hul.ois.jhove.module.jpeg2000.MainOrTile
 
_prevChar - Variable in class edu.harvard.hul.ois.jhove.module.AsciiModule
 
_prevChar - Variable in class edu.harvard.hul.ois.jhove.module.Utf8Module
 
_prevChar - Variable in class edu.harvard.hul.ois.jhove.module.xml.XmlDeclStream
 
_prevxref - Variable in class edu.harvard.hul.ois.jhove.module.PdfModule
 
_primaryImageList - Variable in class edu.harvard.hul.ois.jhove.module.JpegModule
 
_profile - Variable in class edu.harvard.hul.ois.jhove.module.PdfModule
List of profile checkers
_profile - Variable in class edu.harvard.hul.ois.jhove.module.TiffModule
List of profile checkers.
_profileText - Variable in class edu.harvard.hul.ois.jhove.module.pdf.PdfProfile
A brief human-readable description of the profile.
_profileText - Variable in class edu.harvard.hul.ois.jhove.module.tiff.TiffProfile
PRIVATE CLASS FIELDS.
_propList - Variable in class edu.harvard.hul.ois.jhove.module.AiffModule
 
_propList - Variable in class edu.harvard.hul.ois.jhove.module.Jpeg2000Module
 
_propList - Variable in class edu.harvard.hul.ois.jhove.module.JpegModule
 
_propList - Variable in class edu.harvard.hul.ois.jhove.module.WaveModule
 
_propList - Variable in class edu.harvard.hul.ois.jhove.module.XmlModule
 
_qcdProperty - Variable in class edu.harvard.hul.ois.jhove.module.jpeg2000.MainOrTile
Quantization default property
_quantTables - Variable in class edu.harvard.hul.ois.jhove.module.JpegModule
 
_raf - Variable in class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
 
_raf - Variable in class edu.harvard.hul.ois.jhove.module.Jpeg2000Module
 
_raf - Variable in class edu.harvard.hul.ois.jhove.module.pdf.PdfProfile
The file being analyzed.
_raf - Variable in class edu.harvard.hul.ois.jhove.module.PdfModule
 
_raf - Variable in class edu.harvard.hul.ois.jhove.module.TiffModule
Open TIFF file.
_rafStream - Variable in class edu.harvard.hul.ois.jhove.module.Jpeg2000Module
 
_rawBytes - Variable in class edu.harvard.hul.ois.jhove.module.pdf.StringValuedToken
 
_reader - Variable in class edu.harvard.hul.ois.jhove.XMPSource
The Reader on which the InputSource is based.
_recursionWarned - Variable in class edu.harvard.hul.ois.jhove.module.PdfModule
 
_release - Variable in class edu.harvard.hul.ois.jhove.HandlerBase
Handler release description.
_release - Variable in class edu.harvard.hul.ois.jhove.ModuleBase
Module release description
_repInfo - Variable in class edu.harvard.hul.ois.jhove.module.jpeg2000.BoxHolder
 
_repInfo - Variable in class edu.harvard.hul.ois.jhove.module.jpeg2000.MarkerSegment
 
_repInfoNote - Variable in class edu.harvard.hul.ois.jhove.ModuleBase
RepInfo note
_reportedJFIF - Variable in class edu.harvard.hul.ois.jhove.module.JpegModule
 
_reportedSigMatch - Variable in class edu.harvard.hul.ois.jhove.module.JpegModule
 
_restartInterval - Variable in class edu.harvard.hul.ois.jhove.module.JpegModule
 
_rights - Variable in class edu.harvard.hul.ois.jhove.HandlerBase
Copyright notice
_rights - Variable in class edu.harvard.hul.ois.jhove.ModuleBase
Copyright notice
_samples - Variable in class edu.harvard.hul.ois.jhove.module.WaveModule
 
_saveDir - Variable in class edu.harvard.hul.ois.jhove.JhoveBase
Directory for saving files.
_saxClass - Variable in class edu.harvard.hul.ois.jhove.JhoveBase
SAX parser class.
_saxelList - Variable in class edu.harvard.hul.ois.jhove.module.AiffModule
 
_seenExif - Variable in class edu.harvard.hul.ois.jhove.module.JpegModule
 
_seenJFIF - Variable in class edu.harvard.hul.ois.jhove.module.JpegModule
 
_seenJPEGL - Variable in class edu.harvard.hul.ois.jhove.module.JpegModule
 
_seenSOF - Variable in class edu.harvard.hul.ois.jhove.module.JpegModule
 
_seenSPIFF - Variable in class edu.harvard.hul.ois.jhove.module.JpegModule
 
_sequence - Variable in class edu.harvard.hul.ois.jhove.module.html.HtmlTagDesc
Array controlling the number of times each element of _contentArray may be used.
_sha1 - Variable in class edu.harvard.hul.ois.jhove.ModuleBase
SHA-1 digest calculated on content object
_showAnnotations - Variable in class edu.harvard.hul.ois.jhove.module.PdfModule
 
_showFonts - Variable in class edu.harvard.hul.ois.jhove.module.PdfModule
 
_showOutlines - Variable in class edu.harvard.hul.ois.jhove.module.PdfModule
 
_showPages - Variable in class edu.harvard.hul.ois.jhove.module.PdfModule
 
_showRaw - Variable in class edu.harvard.hul.ois.jhove.JhoveBase
 
_sig - Variable in class edu.harvard.hul.ois.jhove.module.GifModule
PRIVATE INSTANCE FIELDS.
_sigBytes - Variable in class edu.harvard.hul.ois.jhove.JhoveBase
Number of bytes for fake signature checking.
_signature - Variable in class edu.harvard.hul.ois.jhove.JhoveBase
 
_signature - Variable in class edu.harvard.hul.ois.jhove.ModuleBase
Module Signature list
_sigWantsDecl - Variable in class edu.harvard.hul.ois.jhove.module.XmlModule
 
_skippedAnnotationsReported - Variable in class edu.harvard.hul.ois.jhove.module.PdfModule
 
_skippedFontsReported - Variable in class edu.harvard.hul.ois.jhove.module.PdfModule
 
_skippedOutlinesReported - Variable in class edu.harvard.hul.ois.jhove.module.PdfModule
 
_skippedPagesReported - Variable in class edu.harvard.hul.ois.jhove.module.PdfModule
 
_specification - Variable in class edu.harvard.hul.ois.jhove.HandlerBase
Handler specification document list
_specification - Variable in class edu.harvard.hul.ois.jhove.ModuleBase
Module specification document list
_spiffDir - Variable in class edu.harvard.hul.ois.jhove.module.JpegModule
 
_srsList - Variable in class edu.harvard.hul.ois.jhove.module.JpegModule
 
_startxref - Variable in class edu.harvard.hul.ois.jhove.module.PdfModule
 
_stateMap - Variable in class edu.harvard.hul.ois.jhove.handler.AuditHandler
State map.
_stateStack - Variable in class edu.harvard.hul.ois.jhove.handler.AuditHandler
State stack.
_subMessage - Variable in class edu.harvard.hul.ois.jhove.Message
Additional information.
_t0 - Variable in class edu.harvard.hul.ois.jhove.handler.AuditHandler
Initial time.
_tempDir - Variable in class edu.harvard.hul.ois.jhove.JhoveBase
Temporary directory.
_text - Variable in class edu.harvard.hul.ois.jhove.module.html.JHPCData
 
_textMD - Variable in class edu.harvard.hul.ois.jhove.module.AsciiModule
 
_textMD - Variable in class edu.harvard.hul.ois.jhove.module.HtmlModule
 
_textMD - Variable in class edu.harvard.hul.ois.jhove.module.Utf8Module
 
_textMD - Variable in class edu.harvard.hul.ois.jhove.module.XmlModule
 
_tiling - Variable in class edu.harvard.hul.ois.jhove.module.JpegModule
 
_trailerDict - Variable in class edu.harvard.hul.ois.jhove.module.PdfModule
 
_trueTypeFontsMap - Variable in class edu.harvard.hul.ois.jhove.module.PdfModule
 
_type0FontsMap - Variable in class edu.harvard.hul.ois.jhove.module.PdfModule
 
_type1FontsMap - Variable in class edu.harvard.hul.ois.jhove.module.PdfModule
 
_type3FontsMap - Variable in class edu.harvard.hul.ois.jhove.module.PdfModule
 
_units - Variable in class edu.harvard.hul.ois.jhove.module.JpegModule
 
_valid - Variable in class edu.harvard.hul.ois.jhove.handler.audit.AuditCount
Number of valid files.
_validityNote - Variable in class edu.harvard.hul.ois.jhove.ModuleBase
Validity criteria
_value - Variable in class edu.harvard.hul.ois.jhove.module.pdf.StringValuedToken
 
_vendor - Variable in class edu.harvard.hul.ois.jhove.HandlerBase
Handler vendor
_vendor - Variable in class edu.harvard.hul.ois.jhove.ModuleBase
Module vendor
_verbosity - Variable in class edu.harvard.hul.ois.jhove.ModuleBase
Indicator of how much data to report
_version - Variable in class edu.harvard.hul.ois.jhove.module.PdfModule
 
_version - Variable in class edu.harvard.hul.ois.jhove.module.tiff.IFD
TIFF version.
_version - Variable in class edu.harvard.hul.ois.jhove.module.TiffModule
TIFF version.
_viewPrefDict - Variable in class edu.harvard.hul.ois.jhove.module.PdfModule
 
_visitedOutlineNodes - Variable in class edu.harvard.hul.ois.jhove.module.PdfModule
Map of visited nodes when walking through an outline.
_walkFinished - Variable in class edu.harvard.hul.ois.jhove.module.pdf.DocNode
Set to true when all subnodes of this node have been iterated through following a StartWalk.
_walkFinished - Variable in class edu.harvard.hul.ois.jhove.module.pdf.PageLabelNode
Set to true when all subnodes of this node have been iterated through following a StartWalk.
_wellFormed - Variable in class edu.harvard.hul.ois.jhove.handler.audit.AuditCount
Number of well-formed files.
_wellFormedNote - Variable in class edu.harvard.hul.ois.jhove.ModuleBase
Well-formedness criteria
_withTextMD - Variable in class edu.harvard.hul.ois.jhove.module.AsciiModule
 
_withTextMD - Variable in class edu.harvard.hul.ois.jhove.module.HtmlModule
 
_withTextMD - Variable in class edu.harvard.hul.ois.jhove.module.Utf8Module
 
_withTextMD - Variable in class edu.harvard.hul.ois.jhove.module.XmlModule
 
_writer - Variable in class edu.harvard.hul.ois.jhove.HandlerBase
Writer for doing output
_xDensity - Variable in class edu.harvard.hul.ois.jhove.module.JpegModule
 
_xhtmlDoctype - Variable in class edu.harvard.hul.ois.jhove.module.XmlModule
 
_xmpProp - Variable in class edu.harvard.hul.ois.jhove.module.GifModule
 
_xmpProp - Variable in class edu.harvard.hul.ois.jhove.module.JpegModule
 
_xmpProp - Variable in class edu.harvard.hul.ois.jhove.module.PdfModule
 
_xref - Variable in class edu.harvard.hul.ois.jhove.module.PdfModule
 
_xref2 - Variable in class edu.harvard.hul.ois.jhove.module.PdfModule
 
_xrefIsStream - Variable in class edu.harvard.hul.ois.jhove.module.PdfModule
 
_xType - Variable in class edu.harvard.hul.ois.jhove.module.pdf.XProfileBase
PDF-X type used by the subclass.
_yDensity - Variable in class edu.harvard.hul.ois.jhove.module.JpegModule
 

A B C D E F G H I J K L M N O P Q R S T U V W X Y _

jhove/doc/index.html0000644000707400001440000000257011510702367013627 0ustar garyusers JHOVE Documentation <H2> Frame Alert</H2> <P> This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client. <BR> Link to<A HREF="overview-summary.html">Non-frame version.</A> jhove/doc/overview-frame.html0000644000707400001440000000644311510702365015457 0ustar garyusers Overview List (JHOVE Documentation)
All Classes

Packages
edu.harvard.hul.ois.jhove
edu.harvard.hul.ois.jhove.handler
edu.harvard.hul.ois.jhove.handler.audit
edu.harvard.hul.ois.jhove.module
edu.harvard.hul.ois.jhove.module.aiff
edu.harvard.hul.ois.jhove.module.gif
edu.harvard.hul.ois.jhove.module.html
edu.harvard.hul.ois.jhove.module.iff
edu.harvard.hul.ois.jhove.module.jpeg
edu.harvard.hul.ois.jhove.module.jpeg2000
edu.harvard.hul.ois.jhove.module.pdf
edu.harvard.hul.ois.jhove.module.tiff
edu.harvard.hul.ois.jhove.module.wave
edu.harvard.hul.ois.jhove.module.xml
edu.harvard.hul.ois.jhove.viewer

  jhove/doc/overview-summary.html0000644000707400001440000002151111510702367016055 0ustar garyusers Overview (JHOVE Documentation)



JHOVE API Specification (1.1)

See:
          Description

Packages
edu.harvard.hul.ois.jhove Contains the classes needed for building a JHOVE application.
edu.harvard.hul.ois.jhove.handler Contains the main classes for JHOVE output handlers.
edu.harvard.hul.ois.jhove.handler.audit Contains the supporting classes for the JHOVE audit output handler.
edu.harvard.hul.ois.jhove.module Contains the main classes for JHOVE modules.
edu.harvard.hul.ois.jhove.module.aiff Contains supporting classes for the AIFF-HUL module.
edu.harvard.hul.ois.jhove.module.gif Contains supporting classes for the GIF-HUL module.
edu.harvard.hul.ois.jhove.module.html Contains supporting classes for the HTML-HUL module.
edu.harvard.hul.ois.jhove.module.iff Contains supporting classes for modules based on the IFF specification (EA IFF 85).
edu.harvard.hul.ois.jhove.module.jpeg Contains supporting classes for the JPEG-HUL module.
edu.harvard.hul.ois.jhove.module.jpeg2000 Contains supporting classes for the JPEG2000-HUL module.
edu.harvard.hul.ois.jhove.module.pdf Contains supporting classes for the PDF-HUL module.
edu.harvard.hul.ois.jhove.module.tiff Contains supporting classes for the TIFF-HUL module.
edu.harvard.hul.ois.jhove.module.wave Contains supporting classes for the WAVE-HUL module.
edu.harvard.hul.ois.jhove.module.xml Contains supporting classes for the XML-HUL module.
edu.harvard.hul.ois.jhove.viewer Contains the classes for the JHOVE GUI.

 

JHOVE API Specification (1.1)



jhove/doc/overview-tree.html0000644000707400001440000024426511510702366015333 0ustar garyusers Class Hierarchy (JHOVE Documentation)

Hierarchy For All Packages

Package Hierarchies:
edu.harvard.hul.ois.jhove, edu.harvard.hul.ois.jhove.handler, edu.harvard.hul.ois.jhove.handler.audit, edu.harvard.hul.ois.jhove.module, edu.harvard.hul.ois.jhove.module.aiff, edu.harvard.hul.ois.jhove.module.gif, edu.harvard.hul.ois.jhove.module.html, edu.harvard.hul.ois.jhove.module.iff, edu.harvard.hul.ois.jhove.module.jpeg, edu.harvard.hul.ois.jhove.module.jpeg2000, edu.harvard.hul.ois.jhove.module.pdf, edu.harvard.hul.ois.jhove.module.tiff, edu.harvard.hul.ois.jhove.module.wave, edu.harvard.hul.ois.jhove.module.xml, edu.harvard.hul.ois.jhove.viewer

Class Hierarchy

Interface Hierarchy



jhove/doc/package-list0000644000707400001440000000104211510702365014110 0ustar garyusersedu.harvard.hul.ois.jhove edu.harvard.hul.ois.jhove.handler edu.harvard.hul.ois.jhove.handler.audit edu.harvard.hul.ois.jhove.module edu.harvard.hul.ois.jhove.module.aiff edu.harvard.hul.ois.jhove.module.gif edu.harvard.hul.ois.jhove.module.html edu.harvard.hul.ois.jhove.module.iff edu.harvard.hul.ois.jhove.module.jpeg edu.harvard.hul.ois.jhove.module.jpeg2000 edu.harvard.hul.ois.jhove.module.pdf edu.harvard.hul.ois.jhove.module.tiff edu.harvard.hul.ois.jhove.module.wave edu.harvard.hul.ois.jhove.module.xml edu.harvard.hul.ois.jhove.viewer jhove/doc/packages.html0000644000707400001440000000140210771557550014301 0ustar garyusers (JHOVE Documentation)


The front page has been relocated.Please see:
          Frame version
          Non-frame version.
jhove/doc/serialized-form.html0000644000707400001440000007706011510702366015621 0ustar garyusers Serialized Form (JHOVE Documentation)

Serialized Form


Package edu.harvard.hul.ois.jhove

Class edu.harvard.hul.ois.jhove.HandlerBase.SynchronizedDateFormat extends java.text.SimpleDateFormat implements Serializable

Class edu.harvard.hul.ois.jhove.JhoveException extends java.lang.Exception implements Serializable


Package edu.harvard.hul.ois.jhove.module.html

Class edu.harvard.hul.ois.jhove.module.html.HtmlStack extends java.util.LinkedList implements Serializable

Serialized Fields

headElement

HtmlTagDesc headElement
Elements which get special treatment.


bodyElement

HtmlTagDesc bodyElement

framesetElement

HtmlTagDesc framesetElement

headSeen

boolean headSeen

bodySeen

boolean bodySeen

Class edu.harvard.hul.ois.jhove.module.html.ParseException extends java.lang.Exception implements Serializable

Serialized Fields

specialConstructor

boolean specialConstructor
This variable determines which constructor was used to create this object and thereby affects the semantics of the "getMessage" method (see below).


currentToken

Token currentToken
This is the last token that has been consumed successfully. If this object has been created due to a parse error, the token followng this token will (therefore) be the first error token.


expectedTokenSequences

int[][] expectedTokenSequences
Each entry in this array is an array of integers. Each array of integers represents a sequence of tokens (by their ordinal values) that is expected at this point of the parse.


tokenImage

java.lang.String[] tokenImage
This is a reference to the "tokenImage" array of the generated parser within which the parse error occurred. This array is defined in the generated ...Constants interface.


eol

java.lang.String eol
The end of line string for this machine.

Class edu.harvard.hul.ois.jhove.module.html.TokenMgrError extends java.lang.Error implements Serializable

Serialized Fields

errorCode

int errorCode
Indicates the reason why the exception is thrown. It will have one of the above 4 values.


Package edu.harvard.hul.ois.jhove.module.pdf

Class edu.harvard.hul.ois.jhove.module.pdf.PdfException extends java.lang.Exception implements Serializable

Serialized Fields

_offset

long _offset

_token

Token _token

Class edu.harvard.hul.ois.jhove.module.pdf.PdfInvalidException extends PdfException implements Serializable

Class edu.harvard.hul.ois.jhove.module.pdf.PdfMalformedException extends PdfException implements Serializable


Package edu.harvard.hul.ois.jhove.module.tiff

Class edu.harvard.hul.ois.jhove.module.tiff.TiffException extends java.lang.Exception implements Serializable

Serialized Fields

_offset

long _offset

Package edu.harvard.hul.ois.jhove.viewer

Class edu.harvard.hul.ois.jhove.viewer.AppInfoWindow extends InfoWindow implements Serializable

Serialized Fields

texta

javax.swing.JTextArea texta

Class edu.harvard.hul.ois.jhove.viewer.ConfigWindow extends javax.swing.JDialog implements Serializable

Serialized Fields

_configFile

java.io.File _configFile

_modules

java.util.List<E> _modules

_handlers

java.util.List<E> _handlers

_bufferSize

int _bufferSize

_homeDir

java.io.File _homeDir

_tempDir

java.io.File _tempDir

_encoding

java.lang.String _encoding

_mainBox

javax.swing.Box _mainBox

_modTable

javax.swing.JTable _modTable

_hanTable

javax.swing.JTable _hanTable

_modTableModel

javax.swing.table.AbstractTableModel _modTableModel

_hanTableModel

javax.swing.table.AbstractTableModel _hanTableModel

_homeLabel

javax.swing.JLabel _homeLabel

_tempDirLabel

javax.swing.JLabel _tempDirLabel

_bufSizeBox

NumericField _bufSizeBox

_encodingBox

javax.swing.JTextField _encodingBox

Class edu.harvard.hul.ois.jhove.viewer.InfoWindow extends javax.swing.JFrame implements Serializable

Serialized Fields

_app

App _app

_base

JhoveBase _base

_saveItem

javax.swing.JMenuItem _saveItem

_closeItem

javax.swing.JMenuItem _closeItem

_handlerBox

javax.swing.JComboBox _handlerBox

_encodingBox

javax.swing.JComboBox _encodingBox

_dateFmt

java.text.SimpleDateFormat _dateFmt

Class edu.harvard.hul.ois.jhove.viewer.JhoveWindow extends javax.swing.JFrame implements Serializable

Serialized Fields

_app

App _app

_base

JhoveBase _base

_appInfoWin

AppInfoWindow _appInfoWin

_moduleInfoWin

ModuleInfoWindow _moduleInfoWin

_moduleSubmenu

javax.swing.JMenu _moduleSubmenu

_openFileItem

javax.swing.JMenuItem _openFileItem

_openURLItem

javax.swing.JMenuItem _openURLItem

_closeAllItem

javax.swing.JMenuItem _closeAllItem

_moduleGroup

javax.swing.ButtonGroup _moduleGroup

syncStr

java.lang.String syncStr

_rawOutput

boolean _rawOutput

_doChecksum

boolean _doChecksum

_progWind

ProgressWindow _progWind

_configWind

ConfigWindow _configWind

_prefsWindow

PrefsWindow _prefsWindow

_lastDir

java.io.File _lastDir

_selectedModule

java.lang.String _selectedModule

_moduleMenuListener

java.awt.event.ActionListener _moduleMenuListener

logo

javax.swing.JPanel logo

_viewHandler

ViewHandler _viewHandler

_logger

java.util.logging.Logger _logger
Logger for a module class.


invisibleFilter

JhoveWindow.InvisibleFilenameFilter invisibleFilter

Class edu.harvard.hul.ois.jhove.viewer.ModuleInfoWindow extends InfoWindow implements Serializable

Serialized Fields

texta

javax.swing.JTextArea texta

_level

int _level

_module

Module _module

Class edu.harvard.hul.ois.jhove.viewer.NoConfAlert extends javax.swing.JDialog implements Serializable

Class edu.harvard.hul.ois.jhove.viewer.NumericField extends javax.swing.JFormattedTextField implements Serializable

Class edu.harvard.hul.ois.jhove.viewer.PrefsWindow extends javax.swing.JDialog implements Serializable

Serialized Fields

jhoveWin

JhoveWindow jhoveWin

rawCheckBox

javax.swing.JCheckBox rawCheckBox

checksumCheckBox

javax.swing.JCheckBox checksumCheckBox

saveRawOutput

boolean saveRawOutput

saveChecksum

boolean saveChecksum

Class edu.harvard.hul.ois.jhove.viewer.ProgressWindow extends javax.swing.JFrame implements Serializable

Serialized Fields

_contentLength

long _contentLength

_byteCount

long _byteCount

_docName

java.lang.String _docName

_progressLabel

javax.swing.JLabel _progressLabel

_docNameLabel

javax.swing.JLabel _docNameLabel

_progressState

int _progressState

Class edu.harvard.hul.ois.jhove.viewer.RepTreeRoot extends javax.swing.tree.DefaultMutableTreeNode implements Serializable

Serialized Fields

_info

RepInfo _info
PRIVATE INSTANCE FIELDS.


_repProp

Property _repProp

_app

App _app

_base

JhoveBase _base

_rawOutput

boolean _rawOutput

_dateFmt

java.text.DateFormat _dateFmt

_sampleRate

double _sampleRate

Class edu.harvard.hul.ois.jhove.viewer.ViewWindow extends InfoWindow implements Serializable

Serialized Fields

_info

java.util.List<E> _info

_closeAllItem

javax.swing.JMenuItem _closeAllItem

_closeAllListener

java.awt.event.ActionListener _closeAllListener

_rootNode

javax.swing.tree.DefaultMutableTreeNode _rootNode

tree

javax.swing.JTree tree



jhove/doc/stylesheet.css0000644000707400001440000000255711510702367014542 0ustar garyusers/* Javadoc style sheet */ /* Define colors, fonts and other style attributes here to override the defaults */ /* Page background color */ body { background-color: #FFFFFF; color:#000000 } /* Headings */ h1 { font-size: 145% } /* Table colors */ .TableHeadingColor { background: #CCCCFF; color:#000000 } /* Dark mauve */ .TableSubHeadingColor { background: #EEEEFF; color:#000000 } /* Light mauve */ .TableRowColor { background: #FFFFFF; color:#000000 } /* White */ /* Font used in left-hand frame lists */ .FrameTitleFont { font-size: 100%; font-family: Helvetica, Arial, sans-serif; color:#000000 } .FrameHeadingFont { font-size: 90%; font-family: Helvetica, Arial, sans-serif; color:#000000 } .FrameItemFont { font-size: 90%; font-family: Helvetica, Arial, sans-serif; color:#000000 } /* Navigation bar fonts and colors */ .NavBarCell1 { background-color:#EEEEFF; color:#000000} /* Light mauve */ .NavBarCell1Rev { background-color:#00008B; color:#FFFFFF} /* Dark Blue */ .NavBarFont1 { font-family: Arial, Helvetica, sans-serif; color:#000000;color:#000000;} .NavBarFont1Rev { font-family: Arial, Helvetica, sans-serif; color:#FFFFFF;color:#FFFFFF;} .NavBarCell2 { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF; color:#000000} .NavBarCell3 { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF; color:#000000} jhove/doc/resources/0000755000707400001440000000000011510702366013637 5ustar garyusersjhove/doc/resources/inherit.gif0000644000707400001440000000007111510702366015766 0ustar garyusersGIF89a, DrjԐ;߀Q@N;jhove/COPYING0000644000707400001440000006346310771557572012146 0ustar garyusers GNU LESSER GENERAL PUBLIC LICENSE Version 2.1, February 1999 Copyright (C) 1991, 1999 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. When we speak of free software, we are referring to freedom of use, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish); that you receive source code or can get it if you want it; that you can change the software and use pieces of it in new free programs; and that you are informed that you can do these things. To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights. We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. GNU LESSER GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Libraries If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. , 1 April 1990 Ty Coon, President of Vice That's all there is to it! jhove/LICENSE0000644000707400001440000000147410771557571012111 0ustar garyusersJHOVE - JSTOR/Harvard Object Validation Environment Copyright 2003-2008 by JSTOR and the President and Fellows of Harvard College This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lessor General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA jhove/README0000644000707400001440000002446711510701504011746 0ustar garyusersJHOVE - JSTOR/Harvard Object Validation Environment Copyright 2003-2011 by JSTOR and the President and Fellows of Harvard College JHOVE is made available under the GNU Lesser General Public License (LGPL; see the file LICENSE for details) Rev. 1.6, 2011-01-04 JHOVE (the JSTOR/Harvard Object Validation Environment, pronounced "jhove") is an extensible software framework for performing format identification, validation, and characterization of digital objects. o Format identification is the process of determining the format to which a digital object conforms: "I have a digital object; what format is it?" o Format validation is the process of determining the level of compliance of a digital object to the specification for its purported format: "I have an object purportedly of format F; is it?" o Format characterization is the process of determing the format-specific significant properties of an object of a given format: "I have an object of format F; what are its salient properties?" These actions are frequently necessary during routine operation of digital repositories and for digital preservation activities. The output from JHOVE is controlled by output handlers. JHOVE uses an extensible plug-in architecture; it can be configured at the time of its invocation to include whatever specific format modules and output handlers that are desired. The initial release of JHOVE includes modules for arbitrary byte streams, ASCII and UTF-8 encoded text, AIFF and WAVE audio, GIF, JPEG, JPEG 2000, TIFF, and PDF; and text and XML output handlers. The JHOVE project is a collaboration of JSTOR and the Harvard University Library. Development of JHOVE was funded in part by the Andrew W. Mellon Foundation. JHOVE is made available under the GNU Lesser General Public License (LGPL; see the file LICENSE for details). REQUIREMENTS 1. Java J2SE 1.4 (JHOVE was originally implemented using the Sun J2SE SDK 1.4.1 and has been tested to work with 1.4.2 ) 2. If you would like to compile the JHOVE source code, then Apache Ant, a Java-based build tool is necessary. Note that the JAVA_HOME environment variable must be set appropriately for Ant to work properly. (JHOVE was implemented and tested using Ant 1.5.1.) DISTRIBUTION The JHOVE distribution package includes: jhove/ # JHOVE home directory COPYING # GNU Lesser General Public License LICENSE # JHOVE license information README RELEASENOTES # JHOVE release notes bin/ jhove.jar # JHOVE API package jhove-handler.jar # Standard output handler package jhove-module.jar # Standard module package JhoveApp.jar # JHOVE command line application JhoveView.jar # JHOVE with Swing GUI front-end build.xml # Ant configuration file classes/ build.xml # Ant configuration file edu/ ... # JHOVE API packages ADump.* # AIFF dump utility class GDump.* # GIF dump utility class Jhove.* # JHOVE main class JDump.* # JPEG dump utility class J2Dump.* # JPEG 2000 dump utility class PDump.* # PDF dump utility class TDump.* # TIFF dump utility class UserHome.* # user.home property utility class WDump.* # WAVE dump utility class conf/ jhove.conf # JHOVE configuration file jhove.xsd # JHOVE output schema jhoveConfig.xsd # JHOVE configuration file schema doc/ *.html # API documentation ... examples/ # Sample files ascii/ ... gif/ ... jpeg/ ... jpeg2000/ ... pdf/ ... tiff/ ... utf-8/ ... adump* # AIFF dump Bourne shell driver adump.bat* # AIFF dump DOS shell driver script gdump* # GIF dump Bourne shell driver gdump.bat* # GIF dump DOS shell driver script jdump* # JPEG dump Bourne shell driver jdump.bat* # JPEG dump DOS shell driver script j2dump* # JPEG 2000 dump Bourne shell driver j2dump.bat* # JPEG 2000 dump DOS shell driver jhove.tmpl* # Template for JHOVE Bourne shell driver script jhove_bat.tmpl* # Template for JHOVE DOS shell driver script pdump* # PDF dump Bourne shell driver pdump.bat* # PDF dump DOS shell driver script tdump* # TIFF dump Bourne shell driver tdump.bat* # TIFF dump DOS shell driver script userhome* # user.home Bourne shell driver userhome.bat* # user.home DOS shell driver script wdump* # WAVE dump Bourne shell driver wdump.bat* # WAVE dump DOS shell driver script INSTALLATION Edit the configuration file, jhove/conf/jhove.conf, and set the absolute pathname of the JHOVE home directory and the temporary directory (in which temporary files are created): jhove-home-directory temporary-directory The JHOVE home directory is the top-most directory in the distribution TAR or ZIP file. On Unix systems, "/var/tmp" is an appropriate temporary directory; on Windows, "C:\Temp". For example, if the distribution TAR file is disaggregated on a Unix system in the directory "/users/stephen/ projects", then the configuration file should read: /users/stephen/projects/jhove /var/tmp In the JHOVE home directory, copy the JHOVE Bourne shell driver script template, "jhove.tmpl", to "jhove" (or the equivalent Windows shell script, "jhove_bat.tmpl" to "jhove.bat"), and set the JHOVE home directory, Java home directory, and Java interpreter: JHOVE_HOME=jhove-home-directory JAVA_HOME=java-home-directory JAVA=java-interpreter The JAVA_HOME property should provide the absolute pathname of the Java runtime or SDK installation; JAVA should provide the absolute pathname of the Java interpreter. For example: JHOVE_HOME=/users/stephen/projects/jhove JAVA_HOME=/usr/local/j2re1.4.1_02 JAVA=$JAVA_HOME/bin/java In the DOS shell driver script, jhove.bat, the equivalent three variables are: SET JHOVE_HOME=jhove-home-directory SET JAVA_HOME=java-home-directory SET JAVA=%JAVA_HOME%\bin\java For example: SET JHOVE_HOME="C:\Program Files\jhove" SET JAVA_HOME="C:\Program Files\java\j2re1.4.1_02" SET JAVA=%JAVA_HOME%\bin\java The quotation marks are necessary because of the embedded space characters. On Windows platforms it may also be necessary to add the Java bin subdirectory to the System PATH environment variable: PATH=C:\Program Files\java\j2re1.4.1_02\bin;... (For information on setting a Windows environment variable, consult your local documentation or system administrator.) USAGE java Jhove [-c config] [-m module] [-h handler] [-e encoding] [-H handler] [-o output] [-x saxclass] [-t tempdir] [-b bufsize] [-l loglevel] [[-krs] dir-file-or-uri [...]] where -c config Configuration file pathname -m module Module name -h handler Output handler name (defaults to TEXT) -e encoding Character encoding used by output handler (defaults to UTF-8) -H handler About handler name -o output Output file pathname (defaults to standard output) -x saxclass SAX parser class (defaults to J2SE 1.4 default) -t tempdir Temporary directory in which to create temporary files -b bufsize Buffer size for buffered I/O (defaults to J2SE 1.4 default) -l loglevel Logging level -k Calculate CRC32, MD5, and SHA-1 checksums -r Display raw data flags, not textual equivalents -s Format identification based on internal signatures only dir-file-or-uri Directory or file pathname or URI of formated content stream All named modules and output handlers must be found on the Java CLASSPATH at the time of invocation. The JHOVE driver script, jhove/jhove, automatically sets the CLASSPATH and invokes the Jhove main class: jhove [-c config] [-m module] [-h handler] [-e encoding] [-H handler] [-o output] [-x saxclass] [-t tempdir] [-b bufsize] [-l loglevel] [[-krs] dir-file-or-uri [...]] The following additional programs are available, primarily for testing and debugging purposes. They display a minimally processed, human-readable version of the contents of AIFF, GIF, JPEG, JPEG 2000, PDF, TIFF, and WAVE files: java ADump aiff-file java GDump gif-file java JDump jpeg-file java J2Dump jpeg2000-file java PDump pdf-file java TDump tiff-file java WDump wave-file For convenience, the following driver scripts are also available: adump aiff-file gdump gif-file jdump jpeg-file j2dump jpeg2000-file pdump pdf-file tdump tiff-file wdump wave-file The JHOVE Swing-based GUI interface can be invoked from a command shell from the jhove/bin sub-directory: java -jar JhoveView.jar -c where is the pathname of the JHOVE configuration file. jhove/RELEASENOTES0000644000707400001440000015424211510701504012675 0ustar garyusersRELEASENOTES JHOVE - JSTOR/Harvard Object Validation Environment Copyright 2003-2009 by JSTOR and the President and Fellows of Harvard College JHOVE is made available under the GNU Lesser General Public License (LGPL; see the file LICENSE for details) RELEASE NOTES FOR JHOVE 1.6 2011-01-03 XML HANDLER AND TEXT HANDLER 1. The default version of MIX is now 2.0. In earlier versions it was 0.2. However, MIX 2.0 still isn't supported in the text handler, so it will produce 1.0 output by default. The XML handler will produce MIX 2.0 output. TIFF MODULE 1. JHOVE returned a \"String index out of range: 4\" exceptions during TIFF validation for a tiff contains an empty (not NULL) date/time field. This has been corrected so that a date/time field with the wrong length won't be parsed but will report an error instead. 2. If text tags contain characters which aren't printable ASCII, these are now output as escape sequences so that invalid XML isn't output. UTF-8 MODULE 1. Updated to Unicode 6.0.0. RELEASE NOTES FOR JHOVE 1.5 2009-12-17 PDF MODULE 1. An ArrayIndexOutOfBoundsException was thrown on a PDF with an invalid object number in the cross-reference stream. In JHOVE 1.5, this is correctly reported as a violation of well-formedness. UTF-8 MODULE 1. With some very simple UTF-8 files, JHOVE handlers would throw an exception processing them, and the GUI would fail silently. This happened with files using no UTF-8 blocks. This has been fixed. TEXTMD (multiple modules) 1. TextMD metadata can now optionally be reported. To get this, it's necessary to edit jhove.conf. TextMD can be enabled on a per-module basis for HtmlModule, AsciiModule, Utf8Module, and XmlModule. The element for each chosen module must contain the element withtextmd=true (no spaces). 2. The TextMD feature was added by Thomas Ledoux. RELEASE NOTES FOR JHOVE 1.4 2009-07-30 PDF MODULE 1. The PDF/A profile has been updated to the final version of 19005-1:2005(E) and made more thorough. Among the changes: a. The set-state and no-op actions disqualify a PDF/A candidate. b. The ASCIIHexDecode and ASCII85Decode filters no longer disqualify a candidate. c. Checking of outlines has been added. d. Additional checking of Type 1 fonts and symbolic fonts. e. Bug fix in checking type 2 subfonts. f. An LZW filter in an image object disqualifies a candidate. g. The xpacket processing instruction is checked for attributes which disqualify from PDF/A. h. Conformity to implementation limits is checked as a condition of PDF/A conformity. JPEG2000 MODULE 1. The pathological case of an image with no components is checked so it won't cause a crash. XML HANDLER 1. A reset() function has been added so that if the handler is reused, it will return to a valid initial state. RELEASE NOTES FOR JHOVE 1.3 2009-06-04 GENERAL 1. The build.xml files now force compilation to Java 1.4, preventing accidental distributions that aren't 1.4-compatible. 2. Spaces are allowed in file paths on Windows, if the path is enclosed in quotes. This fix had been in version 1.1i, and had been lost since then. PDF MODULE 1. According to the PDF 1.6 specification, table 3.4, parameters for a stream filter can be either a dictionary or the null object. The null object was treated as an error; it is now allowed. 2. Object stream handling was seriously buggy, causing rejection of well-formed and valid files; it's better now. 3. In PDF 1.4, an outline dictionary unconditionally must have a "First" and a "Last" entry. JHOVE follows this requirement, declaring a file invalid if it isn't met. However, PDF 1.6 relaxes the requirement, applying it only "if there are any open or closed outline entries." Thus, an empty outline dictionary with no "First" or "Last" entry is valid. It is now accepted (for all PDF versions). 4. If a page number tree in a PDF file is missing an expected "Nums" entry, this was being reported as an invalid date. A more appropriate error message is now given. TIFF MODULE 1. TIFF tag 33723 (IPTC-NAA) was considered valid only if the data type is ASCII or LONG. But according to Aware Systems, the valid types are UNDEFINED and BYTE. All four types are now accepted. XML HANDLER 1. Omissions in MIX 1.0 and 2.0 output have been fixed. RELEASE NOTES FOR JHOVE 1.2 2009-02-10 GENERAL 1. A bug has been fixed in CountedInputStream, which could potentially have caused infinite recursion in some modules. HTML MODULE 1. An incompatibility with Java 1.6 has been fixed. PDF MODULE 1. A null pointer exception would be thrown for PDF documents without a document root tree. This has been fixed. 2. A source of possible false positives in PDF profiles has been fixed. 3. Certain checks weren't being done to Type 2 fonts, and some PDF/A profile violations might have been missed as a result. This has been fixed. WAVE MODULE 1. Sub-chunks of the 'adtl' chunk are now constrained to even byte boundaries. XML HANDLER 1. MIX 2.0 is now supported. 2. The URL for the MIX 0.2 schema has changed to reflect the change on the LOC MIX site. 3. The handler was sometimes incorrectly reporting whether the AESAudioMetadata property had an empty value or not. This has been fixed. RELEASE NOTES FOR JHOVE 1.1 Rev. 2008-02-22 COMMAND-LINE INTERFACE 1. Allow filenames with internal spaces if they are quoted on the command line. 2. Corrected error setting the Classpath in the Windows Shell script (jhove.bat) 3. Corrected error opening the configuration file using the default GCJ parser in the GNU Java Runtime Environment. GUI (SWING) INTERFACE (JHOVE VIEW) 1. AES metadata properties displayed in the RepInfo window rearranged slightly to make their ordering consistent with the Text and XML handlers. 2. The JhoveView.main() method will now accept a "-c configFile" option on the command line. The GUI interface can now be invoked by: java -jar bin/JhoveView.jar -c configFile 3. Corrected error opening the configuration file using the default GCJ parser in the GNU Java Runtime Environment. 4. Correct recurrent problems with reading the configuration file on Windows installations. AIFF MODULE 1. Correct value for first sample offset by included non-zero offset defined in the SSND chunk. 2. Do not report bitrate reduction data for PCM data. 3. All non-final instance fields and methods are protected, rather than private. ASCII MODULE 1. A minimal file containing no line-end characters now does not produce an empty ASCIIMetadata property, which is invalid against the JHOVE schema. 2. Zero-length files are considered not well-formed. 3. Issue informative message if file contains no printable characters. 4. All non-final instance fields and methods are protected, rather than private. BYTESTREAM MODULE 1. All non-final instance fields and methods are protected, rather than private. GIF MODULE 1. All non-final instance fields and methods are protected, rather than private. HTML MODULE 1. The HTMLMetadata block in the module output is only produced if there is at least one actual metadata property to report. 2. All non-final instance fields and methods are protected, rather than private. JPEG MODULE 1. The JPEG module reports the X and Y sampling frequency for files meeting the JFIF profile. 2. The JPEG module reports the pixel aspect ratio for JFIF profile files for which it is defined. 3. File handles were not being properly closed when processing embedded EXIF metadata. In cases where JHOVE was invoked against large numbers of objects this was causing a premature crash due to the resource leak. 4. All non-final instance fields and methods are protected, rather than private. 5. Correct parsing of the EXIF "subsecTimeOriginal" (37251) and "subsecTimeDigitized" (37522) properties. 6. Validation errors in embedded EXIF metdata were not being fully reported. JPEG 2000 MODULE 1. All non-final instance fields and methods are protected, rather than private. 2. Files generated by the LuraWave codec are no longer incorrecly identified as having unrecognized QCC marker segments. PDF MODULE 1. Date strings are now parsed with strict conformance to the ASN.1 syntax. 2. Destinations defined by indirect references to non-existent objects are assumed to have the value "null". Files containing such destinations are reported as "well-formed, but not valid". 3. No attempt is made to display encrypted outline item title strings are not displayed. 4. Catch error if the Info key of the trailer dictionary is not an indirect reference. 5. Read entire page tree structure, regardless of its internal organization. This error may have caused the under reporting of page resources, such as fonts and images. 6. The NISO Compression Scheme for all images using the CCITTFaxDecode compression filter is now reported properly; previously, the scheme was always reported as CCITT 1D even if the actual compression algorithm was CCITT Group 3 or 4. 7. Properly parse UTF-16 escape characters encoded in double-byte form. 8. The module properly stops looking for the header comment after 1024 bytes. 9. All non-final instance fields and methods are protected, rather than private. 10. The number of incremental updates is now reported correctly, rather than the total number of file trailers, which is one greater than the number of updates. 11. Only up to 1000 fonts will be reported. After that, an informative message will be generated. The limit can be set using the parameter "nxxxx" in the module-specific section of the configuration file: edu.harvard.hul.ois.jhove.module.PdfModule n2000 12. Subfonts of Type 0 are now being properly reported. 13. PDF/A-1b profile is now being properly reported. 14. Permit trailer info key to be optional. 15. Additional correction for outline recursion. 16. Fix treatment of indirect object of Actions. 17. Correctly handle trailer dictionary without Info entry. 18. Ignore comments within dictionaries. TIFF MODULE 1. Corrected error parsing pyramidal TIFF using the SubIFDs tag with a type of IFD (13) rather than LONG (4). 7. Correct parsing of the EXIF "subsecTimeOriginal" (37251) and "subsecTimeDigitized" (37522) properties. 2. All sub-IFDs of a pyramidal TIFF are now properly parsed. 3. The EXIF GainControl tag (41991) is now correctly identified as a SHORT, not a RATIONAL, value. 4. Corrected error in which valid files were reported as being only well-formed due to an incorrect parsing of the DateTime (306) tag. 5. Byte-aligned offsets can be considered well-formed if the module parameter "byteoffset=true" is set in the configuration file: edu.harvard.hul.ois.jhove.module.TiffModule byteoffset=true 6. All non-final instance fields and methods are protected, rather than private. 7. Correct parsing of the EXIF "subsecTimeOriginal" (37251) and "subsecTimeDigitized" (37522) properties. 8. Using the "-s" option, the TIFF module was incorrectlly reporting signature matches for text files starting with "II". 9. Validation errors in embedded EXIF metdata were not being fully reported. UTF8 MODULE 1. Corrected error under which malformed UTF-8 files containing encoding sequences starting with a byte value in the range 0xF8 through 0xFF were reported as well-formed and valid. 2. Zero-length files are considered not well-formed. 3. Issue informative message if file contains no printable characters. 4. All non-final instance fields and methods are protected, rather than private. WAVE MODULE 1. BWF files now set the correct start time in the AES metadata. 2. All non-final instance fields and methods are protected, rather than private. 3. "cue " and "adtl" chunks are now properly read. XML MODULE 1. The DTD is assumed to be the first DOCTYPE system ID in the file with an ".dtd" extension. 2. All non-final instance fields and methods are protected, rather than private. 3. The module correctly handles schemaLocation attributes that do not provide two whitespace-separated URIs. TEXT HANDLER 1. AES audio metadata properties rearranged slightly to make their ordering consistent with the XML schema. XML HANDLER 1. Correct sample rate formatting in AES Time Code Format (TCF) temporal references. 2. Correct face IDREF in AES metadata. 3. Disallowed control characters are removed from content. 4. Null property values no longer generate empty elements. 5. Image technical metadata can be reported in terms of the MIX 1.0 schema, as opposed to the default reporting against MIX 0.2. To specify the 1.0 schema include the directive: 1.0 if the configuration file. JHOVE API 1. The process() and processFile() methods of the JhoveBase class are now public, to permit direct access to the API by applications. 2. Checksum calculations now use buffered I/O uniformly for improved performance. 3. All non-final fields and methods in the JhoveBase class are protected, rather than private. 4. When invoked with the "-s" option JHOVE now reports the signature matched format and MIME type. 5. The processing of files in a directory is now performed in an alphabetically sorted order. ADUMP UTILITY 1. Display the field values of known chunks. TDUMP UTILITY 1. New format that sorts all tag definitions by their byte offset and also displays the byte ranges for image data. 2. Command line flags permit the suppression of BYTE data display (-b) and and subIFD parsing (-s). USERHOME UTILITY 1. A new utility program, UserHome, is available to determine the value of the Java user.home property needed to know where to place the configuration file. This utility can be invoked by the driver scripts "userhome" (Bourne shell) or "userhome.bat" (Windows). ************************************************************************ RELEASE NOTES FOR JHOVE 1.0 Rev. 2005-05-26 GENERAL 1. Zero length files are now handled properly in all modules. 2. Missing start time in audio files is now handled property in all audio modules. 3. Miscellaneous bug fixes, enhancements, and documentation updates. AIFF MODULE 1. Corrected error causing BitrateReduction to be incorrectly reported for uncompressed PCM audio. JPEG2000 MODULE 1. The module now validates the enumerated ICC profile types in the Color Specification Box. In the JP2 profile, an unrecognized ICC profile type marks the file as not well formed; in the JPX, the file is merely not valid. 2. In the beta 3 release certain invalid JPEG 2000 files were reported as well formed in the JP2 profile. This has been corrected. PDF MODULE 1. Following the practice of Acrobar, the PDF module will accept the "%PDF-1.n" header comment anywhere in the first 1024 bytes of a file (with appropriate notification via an information message), rather than requiring that it start at byte offset 0. 2. The requirements for the PDF/A profile have been brought into conformance with the most recent version of the PDF/A specification, ISO/DIS 19005-1 of 2004-12-22. 3. Corrected bug that prevented valid PDF/X-1 files from being recognized as such. WAVE MODULE 1. Corrected error causing BitrateReduction to be incorrectly reported for uncompressed PCM audio. XML HANDLER 1. Dates reported for the NISO Z39.87 element are now canonicalized to be in proper ISO 8601 form. 2. The NISO Z39.87 element is now reported, if known. AUDIT HANDLER 1. The current working directory is reported as the "home" attribute of the element and individual files are reported as relative pathnames ************************************************************************ RELEASE NOTES FOR JHOVE 1.0 (beta 3) Rev. 2005-02-04 1 GENERAL 1. The architecture has been modified to simplify the use of JHOVE with new "front ends." The new JhoveBase class is used in conjunction with the App class to incorporate nearly all the work of setting up a JHOVE instance. The main Jhove class and the App class are now smaller than before. 2. Checksums were often being reported with incorrect values due to an output formatting error that dropped zeroes. This has been fixed. 3. New utilities GDUMP and JDUMP created for GIF and JPEG documents. 4. Error messages are more consistently factored into submessages. This allows messages indicating the same type of error to be more readily grouped. 5. Some modules were reporting a MIME type for a document that is not well-formed. This no longer occurs. 6. Duplicate reporting of AES BitDepth has been suppressed. 7. New module for HTML format. Be sure to update the configuration file, jhove/conf/jhove.conf, to include the module: ... edu.harvard.hul.ois.jhove.module.HtmlModule ... 8. The AES audio metadata representation has been updated to conform with schema version 1.02b (pre-release). 9. New property, sigMatches, has been added to RepInfo. This records which module(s) regarded the signature of the document as a match, even if the document was not well-formed. This is useful in identifying broken documents that are reported as ASCII or Bytestream. 10. The logging API is supported, permitting the generation of debugging messages. 11. All modules are now non-final, so that they can be subclassed by adventurous users. 12. The -p and -P arguments of the command line are no longer supported. Instead, the equivalent parameters can be provided to all variants of JHOVE (including those which don't take a command line) by specifying a element within the element of the configuration file. Example: edu.harvard.hul.ois.jhove.module.PdfModule a f p 2 JHOVE COMMAND-LINE INTERFACE 1. The JHOVE command-line interface can now accept directory names, as well as file pathnames and URIs: java Jhove [-c config] [-m module] [-h handler] [-e encoding] [-H handler] [-o output] [-x saxclass] [-t tempdir] [-b bufsize] [-l loglevel] [[-krs] dir-file-or-uri [...]] All of the files in the directories are processed in a depth-first recursive descent. 3 JHOVEVIEWER (SWING GUI) INTERFACE 1. The JhoveViewer class now allows dragging of a directory or of multiple files, and the output for all files is presented in a single window. This significantly reduces the window clutter. 2. The JhoveViewer presents the module menu in alphabetical order rather than configuration file order. 3. The JhoveViewer was failing to report some submessages. This is fixed. 4. The JhoveViewer was failing silently on certain URL errors; it now puts up an error alert. 5. If an empty module class name is added in the Configuration dialog, it is ignored. 4 AIFF MODULE 1. Descriptive properties added. 2. Checksum was sometimes missing; fixed. 3. Specification URL added to descriptive information. 4. Reported MIME type changed to 'audio/x-aiff' from 'application/aiff'. 5 GIF MODULE 1. BitsPerSample is now reported. 6 JPEG MODULE 1. Errors occurring when parsing an optional EXIF segment were not being reported. This problem manifested itself by incorrectly reporting that the JPEG file is not well-formed. 2. Array size bug in BitsPerSample fixed. 7 JPEG2000 MODULE 1. Specification information added for ITU. 2. Errors in parsing of an EXIF segment are now reported. 8 PDF MODULE 1. In certain instances the module was inappropriately reporting well-formed PDF files as being non-well-formed, indicating (incorrectly) that the file does not contain a trailer. 2. Fixed a NullPointerException being thrown with a defective page root tree. 3. Certain broken cross-reference tables would throw the module into a loop. This is fixed. 4. Problems in XMP data that triggered a SAX error were being reported to standard output as a "fatal error." They are now properly reported. 5. Error in offset reporting fixed. 6. Now reports FontFile2 and FontFile3. 7. File trailers are now found more reliably. 8. PDF/A profile updated to latest draft proposal, ISO/CD 19005-1 (2004-09-20). 9. Parameters that would have been specified by the -p argument of the command line are now specified by the element in the configuration file. The sense of these parameters has been reversed; by default, the PDF module presents the maximum amount of information unless suppressed by including the characters a, p, f, or o in the parameter value(s). 9 TIFF MODULE 1. Adobe DNG tags are recognized, and a DNG profile has been added. 2. Bug in DATETIME checking fixed. 3. Changes in validity tests for PhotometricInterpretation, SamplesPerPixel and BitsPerSample. 4. Corrected spurious null values for some properties. 5. Tag data type checking was badly broken, now fixed. 10 WAVE MODULE 1. Type 'exif' recognized in LIST chunk. 2. Format and signature information updated. 3. Checksum was sometimes missing; fixed. 4. Reported MIME type changed to 'audio/x-wave' from 'audio/x-wav'. 11 XML MODULE 1. Now reports 1.0 and 1.1 as versions rather than profiles. 2. Reported MIME type changed to 'text/xml' from 'application/xml'. 3. A base URL for DTD's may now be specified using the element. The URL must be preceded by the letter b to distinguish it from potential future parameters, e.g., edu.harvard.hul.ois.jhove.module.XmlModule bhttp://www.example.com/ 12 XML HANDLER 1. The "xsi" namespace is now defined in the NISO Image Metadata and AES Audio Metadata elements. This allows these segments to validate when extracted from the JHOVE output document. 2. The element is properly named; it had been improperly displayed as . 3. X and YSamplingFrequency are reported as positive integers ("600"), not ratios ("600/1"), for consistency with the MIX schema. 4. An empty Properties element in the XML handler is now suppressed. 13 GDUMP UTILITY 1. New utility to dump GIF files in human-readable form. 14 JDUMP UTILITY 1. New utility to dump JPEG files in human-readable form. 15 TDUMP UTILITY 1. The output format has changed slightly, e.g. 00000000: "II" (little endian) 42 00000008: IFD 1 with 15 entries 00000034: 254 (NewSubFileType) LONG 1 = 0 00000046: 256 (ImageWidth) LONG 1 = 2948 00000058: 257 (ImageLength) LONG 1 = 4620 ... ************************************************************************ RELEASE NOTES FOR JHOVE 1.0 (beta 2) Rev. 2004-07-19 1. GENERAL 1.1 Multiple files can now be specified in command line. jhove ... [[-krs] file-or-uri ...] A single output document (XML or text) will be generated for a set of files specified in a command line. 1.2 API version information is now available through methods in the App class. 1.3 AESAudioMetadata property has been added for sound formats. The new PropertyPath class facilitates the extraction of Properties by applications that use the JHOVE API. 1.4 The ErrorMessage and InfoMessage classes now support a submessage string for more flexible message factoring. 1.5 The SAX parser class may now be specified in the jhove.properties file in the property "edu.harvard.hul.ois.jhove.saxClass". 2. GRAPHIC USER INTERFACE (JhoveView) 2.1 Supports drag and drop of directories; subdirectories are processed recursively. 2.2 The menu option "File > Close document windows" closes all document windows. 3. MODULES (GENERAL) 3.1 Performance has been improved in all modules. 3.2 New modules for JPEG 2000, AIFF, and WAVE formats. Be sure to update the configuration file, jhove/conf/jhove.conf, to include these modules: ... edu.harvard.hul.ois.jhove.module.AiffModule edu.harvard.hul.ois.jhove.module.WaveModule edu.harvard.hul.ois.jhove.module.Jpeg2000Module ... 3.3 Bug reading unsigned integers has been fixed. 4. PDF MODULE 4.1 More information provided about encryption keys. 4.2 UserAccess property now shows "No permissions" if no bits are set. 5. GIF MODULE 5.1 Unexpected EOF is now handled cleanly. 6. JPEG MODULE 6.1 Exif data exception properly thrown. 7. TIFF MODULE 7.1 Identification of Exif profile has been improved. 7.2 Photoshop tags 34377 and 50255 are now recognized. 7.3 Bug in handling ExtraSamples tag fixed. 7.4 Bug in determining valid date/time formats; the range for hours was incorrectly constrained to 1-24, rather than 0-24. 8. XML MODULE 8.1 If no encoding is specified, encoding is now reported as UTF-8. 8.2 Catches and reports UTFDataFormatException. 8.3 A greater range of parsers (including Xerces) now will do schema validation. 9. XML HANDLER 9.1 Omitted values in NisoImageMetadata were being reported in XML in some cases as default values (e.g., -1). These have been suppressed. 9.2 element was inappropriately nested underneath the element. 9.3 The "subMessage" attribute is now properly defined in the jhove.xsd schema. ======= JHOVE - JSTOR/Harvard Object Validation Environment Copyright 2003-2009 by JSTOR and the President and Fellows of Harvard College JHOVE is made available under the GNU Lesser General Public License (LGPL; see the file LICENSE for details) RELEASE NOTES FOR JHOVE 1.5 2009-12-17 PDF MODULE 1. An ArrayIndexOutOfBoundsException was thrown on a PDF with an invalid object number in the cross-reference stream. In JHOVE 1.5, this is correctly reported as a violation of well-formedness. UTF-8 MODULE 1. With some very simple UTF-8 files, JHOVE handlers would throw an exception processing them, and the GUI would fail silently. This happened with files using no UTF-8 blocks. This has been fixed. TEXTMD (multiple modules) 1. TextMD metadata can now optionally be reported. To get this, it's necessary to edit jhove.conf. TextMD can be enabled on a per-module basis for HtmlModule, AsciiModule, Utf8Module, and XmlModule. The element for each chosen module must contain the element withtextmd=true (no spaces). 2. The TextMD feature was added by Thomas Ledoux. RELEASE NOTES FOR JHOVE 1.4 2009-07-30 PDF MODULE 1. The PDF/A profile has been updated to the final version of 19005-1:2005(E) and made more thorough. Among the changes: a. The set-state and no-op actions disqualify a PDF/A candidate. b. The ASCIIHexDecode and ASCII85Decode filters no longer disqualify a candidate. c. Checking of outlines has been added. d. Additional checking of Type 1 fonts and symbolic fonts. e. Bug fix in checking type 2 subfonts. f. An LZW filter in an image object disqualifies a candidate. g. The xpacket processing instruction is checked for attributes which disqualify from PDF/A. h. Conformity to implementation limits is checked as a condition of PDF/A conformity. JPEG2000 MODULE 1. The pathological case of an image with no components is checked so it won't cause a crash. XML HANDLER 1. A reset() function has been added so that if the handler is reused, it will return to a valid initial state. RELEASE NOTES FOR JHOVE 1.3 2009-06-04 GENERAL 1. The build.xml files now force compilation to Java 1.4, preventing accidental distributions that aren't 1.4-compatible. 2. Spaces are allowed in file paths on Windows, if the path is enclosed in quotes. This fix had been in version 1.1i, and had been lost since then. PDF MODULE 1. According to the PDF 1.6 specification, table 3.4, parameters for a stream filter can be either a dictionary or the null object. The null object was treated as an error; it is now allowed. 2. Object stream handling was seriously buggy, causing rejection of well-formed and valid files; it's better now. 3. In PDF 1.4, an outline dictionary unconditionally must have a "First" and a "Last" entry. JHOVE follows this requirement, declaring a file invalid if it isn't met. However, PDF 1.6 relaxes the requirement, applying it only "if there are any open or closed outline entries." Thus, an empty outline dictionary with no "First" or "Last" entry is valid. It is now accepted (for all PDF versions). 4. If a page number tree in a PDF file is missing an expected "Nums" entry, this was being reported as an invalid date. A more appropriate error message is now given. TIFF MODULE 1. TIFF tag 33723 (IPTC-NAA) was considered valid only if the data type is ASCII or LONG. But according to Aware Systems, the valid types are UNDEFINED and BYTE. All four types are now accepted. XML HANDLER 1. Omissions in MIX 1.0 and 2.0 output have been fixed. RELEASE NOTES FOR JHOVE 1.2 2009-02-10 GENERAL 1. A bug has been fixed in CountedInputStream, which could potentially have caused infinite recursion in some modules. HTML MODULE 1. An incompatibility with Java 1.6 has been fixed. PDF MODULE 1. A null pointer exception would be thrown for PDF documents without a document root tree. This has been fixed. 2. A source of possible false positives in PDF profiles has been fixed. 3. Certain checks weren't being done to Type 2 fonts, and some PDF/A profile violations might have been missed as a result. This has been fixed. WAVE MODULE 1. Sub-chunks of the 'adtl' chunk are now constrained to even byte boundaries. XML HANDLER 1. MIX 2.0 is now supported. 2. The URL for the MIX 0.2 schema has changed to reflect the change on the LOC MIX site. 3. The handler was sometimes incorrectly reporting whether the AESAudioMetadata property had an empty value or not. This has been fixed. RELEASE NOTES FOR JHOVE 1.1 Rev. 2008-02-22 COMMAND-LINE INTERFACE 1. Allow filenames with internal spaces if they are quoted on the command line. 2. Corrected error setting the Classpath in the Windows Shell script (jhove.bat) 3. Corrected error opening the configuration file using the default GCJ parser in the GNU Java Runtime Environment. GUI (SWING) INTERFACE (JHOVE VIEW) 1. AES metadata properties displayed in the RepInfo window rearranged slightly to make their ordering consistent with the Text and XML handlers. 2. The JhoveView.main() method will now accept a "-c configFile" option on the command line. The GUI interface can now be invoked by: java -jar bin/JhoveView.jar -c configFile 3. Corrected error opening the configuration file using the default GCJ parser in the GNU Java Runtime Environment. 4. Correct recurrent problems with reading the configuration file on Windows installations. AIFF MODULE 1. Correct value for first sample offset by included non-zero offset defined in the SSND chunk. 2. Do not report bitrate reduction data for PCM data. 3. All non-final instance fields and methods are protected, rather than private. ASCII MODULE 1. A minimal file containing no line-end characters now does not produce an empty ASCIIMetadata property, which is invalid against the JHOVE schema. 2. Zero-length files are considered not well-formed. 3. Issue informative message if file contains no printable characters. 4. All non-final instance fields and methods are protected, rather than private. BYTESTREAM MODULE 1. All non-final instance fields and methods are protected, rather than private. GIF MODULE 1. All non-final instance fields and methods are protected, rather than private. HTML MODULE 1. The HTMLMetadata block in the module output is only produced if there is at least one actual metadata property to report. 2. All non-final instance fields and methods are protected, rather than private. JPEG MODULE 1. The JPEG module reports the X and Y sampling frequency for files meeting the JFIF profile. 2. The JPEG module reports the pixel aspect ratio for JFIF profile files for which it is defined. 3. File handles were not being properly closed when processing embedded EXIF metadata. In cases where JHOVE was invoked against large numbers of objects this was causing a premature crash due to the resource leak. 4. All non-final instance fields and methods are protected, rather than private. 5. Correct parsing of the EXIF "subsecTimeOriginal" (37251) and "subsecTimeDigitized" (37522) properties. 6. Validation errors in embedded EXIF metdata were not being fully reported. JPEG 2000 MODULE 1. All non-final instance fields and methods are protected, rather than private. 2. Files generated by the LuraWave codec are no longer incorrecly identified as having unrecognized QCC marker segments. PDF MODULE 1. Date strings are now parsed with strict conformance to the ASN.1 syntax. 2. Destinations defined by indirect references to non-existent objects are assumed to have the value "null". Files containing such destinations are reported as "well-formed, but not valid". 3. No attempt is made to display encrypted outline item title strings are not displayed. 4. Catch error if the Info key of the trailer dictionary is not an indirect reference. 5. Read entire page tree structure, regardless of its internal organization. This error may have caused the under reporting of page resources, such as fonts and images. 6. The NISO Compression Scheme for all images using the CCITTFaxDecode compression filter is now reported properly; previously, the scheme was always reported as CCITT 1D even if the actual compression algorithm was CCITT Group 3 or 4. 7. Properly parse UTF-16 escape characters encoded in double-byte form. 8. The module properly stops looking for the header comment after 1024 bytes. 9. All non-final instance fields and methods are protected, rather than private. 10. The number of incremental updates is now reported correctly, rather than the total number of file trailers, which is one greater than the number of updates. 11. Only up to 1000 fonts will be reported. After that, an informative message will be generated. The limit can be set using the parameter "nxxxx" in the module-specific section of the configuration file: edu.harvard.hul.ois.jhove.module.PdfModule n2000 12. Subfonts of Type 0 are now being properly reported. 13. PDF/A-1b profile is now being properly reported. 14. Permit trailer info key to be optional. 15. Additional correction for outline recursion. 16. Fix treatment of indirect object of Actions. 17. Correctly handle trailer dictionary without Info entry. 18. Ignore comments within dictionaries. TIFF MODULE 1. Corrected error parsing pyramidal TIFF using the SubIFDs tag with a type of IFD (13) rather than LONG (4). 7. Correct parsing of the EXIF "subsecTimeOriginal" (37251) and "subsecTimeDigitized" (37522) properties. 2. All sub-IFDs of a pyramidal TIFF are now properly parsed. 3. The EXIF GainControl tag (41991) is now correctly identified as a SHORT, not a RATIONAL, value. 4. Corrected error in which valid files were reported as being only well-formed due to an incorrect parsing of the DateTime (306) tag. 5. Byte-aligned offsets can be considered well-formed if the module parameter "byteoffset=true" is set in the configuration file: edu.harvard.hul.ois.jhove.module.TiffModule byteoffset=true 6. All non-final instance fields and methods are protected, rather than private. 7. Correct parsing of the EXIF "subsecTimeOriginal" (37251) and "subsecTimeDigitized" (37522) properties. 8. Using the "-s" option, the TIFF module was incorrectlly reporting signature matches for text files starting with "II". 9. Validation errors in embedded EXIF metdata were not being fully reported. UTF8 MODULE 1. Corrected error under which malformed UTF-8 files containing encoding sequences starting with a byte value in the range 0xF8 through 0xFF were reported as well-formed and valid. 2. Zero-length files are considered not well-formed. 3. Issue informative message if file contains no printable characters. 4. All non-final instance fields and methods are protected, rather than private. WAVE MODULE 1. BWF files now set the correct start time in the AES metadata. 2. All non-final instance fields and methods are protected, rather than private. 3. "cue " and "adtl" chunks are now properly read. XML MODULE 1. The DTD is assumed to be the first DOCTYPE system ID in the file with an ".dtd" extension. 2. All non-final instance fields and methods are protected, rather than private. 3. The module correctly handles schemaLocation attributes that do not provide two whitespace-separated URIs. TEXT HANDLER 1. AES audio metadata properties rearranged slightly to make their ordering consistent with the XML schema. XML HANDLER 1. Correct sample rate formatting in AES Time Code Format (TCF) temporal references. 2. Correct face IDREF in AES metadata. 3. Disallowed control characters are removed from content. 4. Null property values no longer generate empty elements. 5. Image technical metadata can be reported in terms of the MIX 1.0 schema, as opposed to the default reporting against MIX 0.2. To specify the 1.0 schema include the directive: 1.0 if the configuration file. JHOVE API 1. The process() and processFile() methods of the JhoveBase class are now public, to permit direct access to the API by applications. 2. Checksum calculations now use buffered I/O uniformly for improved performance. 3. All non-final fields and methods in the JhoveBase class are protected, rather than private. 4. When invoked with the "-s" option JHOVE now reports the signature matched format and MIME type. 5. The processing of files in a directory is now performed in an alphabetically sorted order. ADUMP UTILITY 1. Display the field values of known chunks. TDUMP UTILITY 1. New format that sorts all tag definitions by their byte offset and also displays the byte ranges for image data. 2. Command line flags permit the suppression of BYTE data display (-b) and and subIFD parsing (-s). USERHOME UTILITY 1. A new utility program, UserHome, is available to determine the value of the Java user.home property needed to know where to place the configuration file. This utility can be invoked by the driver scripts "userhome" (Bourne shell) or "userhome.bat" (Windows). ************************************************************************ RELEASE NOTES FOR JHOVE 1.0 Rev. 2005-05-26 GENERAL 1. Zero length files are now handled properly in all modules. 2. Missing start time in audio files is now handled property in all audio modules. 3. Miscellaneous bug fixes, enhancements, and documentation updates. AIFF MODULE 1. Corrected error causing BitrateReduction to be incorrectly reported for uncompressed PCM audio. JPEG2000 MODULE 1. The module now validates the enumerated ICC profile types in the Color Specification Box. In the JP2 profile, an unrecognized ICC profile type marks the file as not well formed; in the JPX, the file is merely not valid. 2. In the beta 3 release certain invalid JPEG 2000 files were reported as well formed in the JP2 profile. This has been corrected. PDF MODULE 1. Following the practice of Acrobar, the PDF module will accept the "%PDF-1.n" header comment anywhere in the first 1024 bytes of a file (with appropriate notification via an information message), rather than requiring that it start at byte offset 0. 2. The requirements for the PDF/A profile have been brought into conformance with the most recent version of the PDF/A specification, ISO/DIS 19005-1 of 2004-12-22. 3. Corrected bug that prevented valid PDF/X-1 files from being recognized as such. WAVE MODULE 1. Corrected error causing BitrateReduction to be incorrectly reported for uncompressed PCM audio. XML HANDLER 1. Dates reported for the NISO Z39.87 element are now canonicalized to be in proper ISO 8601 form. 2. The NISO Z39.87 element is now reported, if known. AUDIT HANDLER 1. The current working directory is reported as the "home" attribute of the element and individual files are reported as relative pathnames ************************************************************************ RELEASE NOTES FOR JHOVE 1.0 (beta 3) Rev. 2005-02-04 1 GENERAL 1. The architecture has been modified to simplify the use of JHOVE with new "front ends." The new JhoveBase class is used in conjunction with the App class to incorporate nearly all the work of setting up a JHOVE instance. The main Jhove class and the App class are now smaller than before. 2. Checksums were often being reported with incorrect values due to an output formatting error that dropped zeroes. This has been fixed. 3. New utilities GDUMP and JDUMP created for GIF and JPEG documents. 4. Error messages are more consistently factored into submessages. This allows messages indicating the same type of error to be more readily grouped. 5. Some modules were reporting a MIME type for a document that is not well-formed. This no longer occurs. 6. Duplicate reporting of AES BitDepth has been suppressed. 7. New module for HTML format. Be sure to update the configuration file, jhove/conf/jhove.conf, to include the module: ... edu.harvard.hul.ois.jhove.module.HtmlModule ... 8. The AES audio metadata representation has been updated to conform with schema version 1.02b (pre-release). 9. New property, sigMatches, has been added to RepInfo. This records which module(s) regarded the signature of the document as a match, even if the document was not well-formed. This is useful in identifying broken documents that are reported as ASCII or Bytestream. 10. The logging API is supported, permitting the generation of debugging messages. 11. All modules are now non-final, so that they can be subclassed by adventurous users. 12. The -p and -P arguments of the command line are no longer supported. Instead, the equivalent parameters can be provided to all variants of JHOVE (including those which don't take a command line) by specifying a element within the element of the configuration file. Example: edu.harvard.hul.ois.jhove.module.PdfModule a f p 2 JHOVE COMMAND-LINE INTERFACE 1. The JHOVE command-line interface can now accept directory names, as well as file pathnames and URIs: java Jhove [-c config] [-m module] [-h handler] [-e encoding] [-H handler] [-o output] [-x saxclass] [-t tempdir] [-b bufsize] [-l loglevel] [[-krs] dir-file-or-uri [...]] All of the files in the directories are processed in a depth-first recursive descent. 3 JHOVEVIEWER (SWING GUI) INTERFACE 1. The JhoveViewer class now allows dragging of a directory or of multiple files, and the output for all files is presented in a single window. This significantly reduces the window clutter. 2. The JhoveViewer presents the module menu in alphabetical order rather than configuration file order. 3. The JhoveViewer was failing to report some submessages. This is fixed. 4. The JhoveViewer was failing silently on certain URL errors; it now puts up an error alert. 5. If an empty module class name is added in the Configuration dialog, it is ignored. 4 AIFF MODULE 1. Descriptive properties added. 2. Checksum was sometimes missing; fixed. 3. Specification URL added to descriptive information. 4. Reported MIME type changed to 'audio/x-aiff' from 'application/aiff'. 5 GIF MODULE 1. BitsPerSample is now reported. 6 JPEG MODULE 1. Errors occurring when parsing an optional EXIF segment were not being reported. This problem manifested itself by incorrectly reporting that the JPEG file is not well-formed. 2. Array size bug in BitsPerSample fixed. 7 JPEG2000 MODULE 1. Specification information added for ITU. 2. Errors in parsing of an EXIF segment are now reported. 8 PDF MODULE 1. In certain instances the module was inappropriately reporting well-formed PDF files as being non-well-formed, indicating (incorrectly) that the file does not contain a trailer. 2. Fixed a NullPointerException being thrown with a defective page root tree. 3. Certain broken cross-reference tables would throw the module into a loop. This is fixed. 4. Problems in XMP data that triggered a SAX error were being reported to standard output as a "fatal error." They are now properly reported. 5. Error in offset reporting fixed. 6. Now reports FontFile2 and FontFile3. 7. File trailers are now found more reliably. 8. PDF/A profile updated to latest draft proposal, ISO/CD 19005-1 (2004-09-20). 9. Parameters that would have been specified by the -p argument of the command line are now specified by the element in the configuration file. The sense of these parameters has been reversed; by default, the PDF module presents the maximum amount of information unless suppressed by including the characters a, p, f, or o in the parameter value(s). 9 TIFF MODULE 1. Adobe DNG tags are recognized, and a DNG profile has been added. 2. Bug in DATETIME checking fixed. 3. Changes in validity tests for PhotometricInterpretation, SamplesPerPixel and BitsPerSample. 4. Corrected spurious null values for some properties. 5. Tag data type checking was badly broken, now fixed. 10 WAVE MODULE 1. Type 'exif' recognized in LIST chunk. 2. Format and signature information updated. 3. Checksum was sometimes missing; fixed. 4. Reported MIME type changed to 'audio/x-wave' from 'audio/x-wav'. 11 XML MODULE 1. Now reports 1.0 and 1.1 as versions rather than profiles. 2. Reported MIME type changed to 'text/xml' from 'application/xml'. 3. A base URL for DTD's may now be specified using the element. The URL must be preceded by the letter b to distinguish it from potential future parameters, e.g., edu.harvard.hul.ois.jhove.module.XmlModule bhttp://www.example.com/ 12 XML HANDLER 1. The "xsi" namespace is now defined in the NISO Image Metadata and AES Audio Metadata elements. This allows these segments to validate when extracted from the JHOVE output document. 2. The element is properly named; it had been improperly displayed as . 3. X and YSamplingFrequency are reported as positive integers ("600"), not ratios ("600/1"), for consistency with the MIX schema. 4. An empty Properties element in the XML handler is now suppressed. 13 GDUMP UTILITY 1. New utility to dump GIF files in human-readable form. 14 JDUMP UTILITY 1. New utility to dump JPEG files in human-readable form. 15 TDUMP UTILITY 1. The output format has changed slightly, e.g. 00000000: "II" (little endian) 42 00000008: IFD 1 with 15 entries 00000034: 254 (NewSubFileType) LONG 1 = 0 00000046: 256 (ImageWidth) LONG 1 = 2948 00000058: 257 (ImageLength) LONG 1 = 4620 ... ************************************************************************ RELEASE NOTES FOR JHOVE 1.0 (beta 2) Rev. 2004-07-19 1. GENERAL 1.1 Multiple files can now be specified in command line. jhove ... [[-krs] file-or-uri ...] A single output document (XML or text) will be generated for a set of files specified in a command line. 1.2 API version information is now available through methods in the App class. 1.3 AESAudioMetadata property has been added for sound formats. The new PropertyPath class facilitates the extraction of Properties by applications that use the JHOVE API. 1.4 The ErrorMessage and InfoMessage classes now support a submessage string for more flexible message factoring. 1.5 The SAX parser class may now be specified in the jhove.properties file in the property "edu.harvard.hul.ois.jhove.saxClass". 2. GRAPHIC USER INTERFACE (JhoveView) 2.1 Supports drag and drop of directories; subdirectories are processed recursively. 2.2 The menu option "File > Close document windows" closes all document windows. 3. MODULES (GENERAL) 3.1 Performance has been improved in all modules. 3.2 New modules for JPEG 2000, AIFF, and WAVE formats. Be sure to update the configuration file, jhove/conf/jhove.conf, to include these modules: ... edu.harvard.hul.ois.jhove.module.AiffModule edu.harvard.hul.ois.jhove.module.WaveModule edu.harvard.hul.ois.jhove.module.Jpeg2000Module ... 3.3 Bug reading unsigned integers has been fixed. 4. PDF MODULE 4.1 More information provided about encryption keys. 4.2 UserAccess property now shows "No permissions" if no bits are set. 5. GIF MODULE 5.1 Unexpected EOF is now handled cleanly. 6. JPEG MODULE 6.1 Exif data exception properly thrown. 7. TIFF MODULE 7.1 Identification of Exif profile has been improved. 7.2 Photoshop tags 34377 and 50255 are now recognized. 7.3 Bug in handling ExtraSamples tag fixed. 7.4 Bug in determining valid date/time formats; the range for hours was incorrectly constrained to 1-24, rather than 0-24. 8. XML MODULE 8.1 If no encoding is specified, encoding is now reported as UTF-8. 8.2 Catches and reports UTFDataFormatException. 8.3 A greater range of parsers (including Xerces) now will do schema validation. 9. XML HANDLER 9.1 Omitted values in NisoImageMetadata were being reported in XML in some cases as default values (e.g., -1). These have been suppressed. 9.2 element was inappropriately nested underneath the element. 9.3 The "subMessage" attribute is now properly defined in the jhove.xsd schema. jhove/build.xml0000644000707400001440000000563010771557571012723 0ustar garyusers Project build file Jhove - JSTOR/Harvard Object Validation Environment Version 1.0 2004-09-10 Copyright 2004 by JSTOR and the President and Fellows of Harvard College jhove/configure.pl0000644000707400001440000000446010771557572013421 0ustar garyusers#!/usr/bin/perl ######################################################################## # Jhove - JSTOR/Harvard Object Validation Environment # Copyright 2004 by JSTOR and the President and Fellows of Harvard College # # A Perl script for plugging local path information into the # various script files of JHOVE, as well as conf/jhove.conf. # # This is configured only for Unix (including OS X). # # Usage: configure.pl jhove_home_directory [java_home_directory [java_runtime_directory]] # # If invoked with no arguments, it will output a usage message. # ######################################################################## use File::Copy; sub mung { my $f = $_[0]; my $bak = $f . "~"; #If there is no backup file, copy the file to the #backup. Otherwise work from the backup. if (!(-e $bak)) { rename ($f, $bak); } open (INFILE, $bak); open (OUTFILE, ">" . $f); #Walks through each line of file, making substitutions. #Remember that the JAVA_HOME and JAVA arguments are optional. while () { s/^JHOVE_HOME=.*/JHOVE_HOME=$ARGV[0]/; if ($narg >= 2) { s/^JAVA_HOME=.*/JAVA_HOME=$ARGV[1]/; } if ($narg >= 3) { s/^JAVA=.*/JAVA=$ARGV[2]/; } print OUTFILE; } close (INFILE); close (OUTFILE); if (-e $f) { print ("Fixed " . $f . "\n"); } } $narg = $#ARGV + 1; if ($narg <= 0) { print "Usage: configure.pl jhove_home_directory [java_home_directory [java_runtime_directory]]\n"; exit; } print "JHOVE_HOME will be set to " . $ARGV[0] . "\n"; if ($narg >= 2) { print "JAVA_HOME will be set to " . $ARGV[1] . "\n"; } if ($narg >= 3) { print "JAVA will be set to " . $ARGV[2] . "\n"; } mung ("jhove"); mung ("adump"); mung ("gdump"); mung ("jdump"); mung ("j2dump"); mung ("pdump"); mung ("tdump"); mung ("wdump"); #Fix up the config file. We assume that the #element is all on one line. if (!(-e "conf/jhove.conf~")) { rename ("conf/jhove.conf", "conf/jhove.conf~"); } open (INFILE, "conf/jhove.conf~"); open (OUTFILE, ">conf/jhove.conf"); while () { s!.*!$ARGV[0]!; print OUTFILE; } close (INFILE); close (OUTFILE); if (-e "conf/jhove.conf") { print "Fixed conf/jhove.conf\n"; } exit; jhove/gdump0000644000707400001440000000176311144316636012132 0ustar garyusers#!/bin/sh ######################################################################## # gdump - JSTOR/Harvard Object Validation Environment # Copyright 2004-2005 by the President and Fellows of Harvard College # JHOVE is made available under the GNU General Public License (see the # file LICENSE for details) # # Driver script for the GIF dump utility # # Usage: gdump file # # where file is a GIF file # # Configuration constants: JHOVE_HOME=/users/stephen/projects/jhove JAVA_HOME=/usr/java # Java JRE directory JAVA=$JAVA_HOME/bin/java # Java interpreter EXTRA_JARS= # Extra .jar files to add to CLASSPATH # NOTE: Nothing below this line should be edited ######################################################################## CP=${JHOVE_HOME}/bin/JhoveApp.jar:${EXTRA_JARS} # Retrieve a copy of all command line arguments to pass to the application. ARGS="" for ARG do ARGS="$ARGS $ARG" done # Set the CLASSPATH and invoke the Java loader. ${JAVA} -classpath $CP GDump $ARGS jhove/gdump.bat0000644000707400001440000000221311144316636012666 0ustar garyusers@ECHO OFF REM gdump - JSTOR/Harvard Object Validation Environment REM Copyright 2004-2005 by the President and Fellows of Harvard College REM JHOVE is made available under the GNU General Public License (see the REM file LICENSE for details) REM REM Driver script for the GIF dump utility REM REM Usage: gdump file REM REM where file is a GIF file REM REM Configuration constants: REM JHOVE_HOME Jhove installation directory REM JAVA_HOME Java JRE directory REM JAVA Java interpreter REM EXTRA_JARS Extra jar files to add to CLASSPATH SET JHOVE_HOME="C:\Program Files\jhove" SET JAVA_HOME="C:\Program Files\java\j2re1.4.1_02" SET JAVA=%JAVA_HOME%\bin\java SET EXTRA_JARS= REM NOTE: Nothing below this line should be edited REM ######################################################################### SET CP=%JHOVE_HOME%\bin\JhoveApp.jar IF "%EXTRA_JARS%"=="" GOTO FI SET CP=%CP%:%EXTRA_JARS :FI REM Retrieve a copy of all command line arguments to pass to the application SET ARGS= :WHILE IF "%1"=="" GOTO LOOP SET ARGS=%ARGS% %1 SHIFT GOTO WHILE :LOOP REM Set the CLASSPATH and invoke the Java loader %JAVA% -classpath %CP% GDump %ARGS% jhove/j2dump0000644000707400001440000000177511144316636012222 0ustar garyusers#!/bin/sh ######################################################################## # j2dump - JSTOR/Harvard Object Validation Environment # Copyright 2004-2005 by the President and Fellows of Harvard College # JHOVE is made available under the GNU General Public License (see the # file LICENSE for details) # # Driver script for the JPEG 2000 dump utility # # Usage: j2dump file # # where file is a JPEG file # # Configuration constants: JHOVE_HOME=/users/stephen/projects/jhove JAVA_HOME=/usr/java # Java JRE directory JAVA=$JAVA_HOME/bin/java # Java interpreter EXTRA_JARS= # Extra .jar files to add to CLASSPATH # NOTE: Nothing below this line should be edited ######################################################################## CP=${JHOVE_HOME}/bin/JhoveApp.jar:${EXTRA_JARS} # Retrieve a copy of all command line arguments to pass to the application. ARGS="" for ARG do ARGS="$ARGS $ARG" done # Set the CLASSPATH and invoke the Java loader. ${JAVA} -classpath $CP J2Dump $ARGS jhove/j2dump.bat0000644000707400001440000000222311144316636012754 0ustar garyusers@ECHO OFF REM j2dump - JSTOR/Harvard Object Validation Environment REM Copyright 2004-205 by the President and Fellows of Harvard College REM JHOVE is made available under the GNU General Public License (see the REM file LICENSE for details) REM REM Driver script for the JPEG 2000 dump utility REM REM Usage: j2dump file REM REM where file is a JPEG file REM REM Configuration constants: REM JHOVE_HOME Jhove installation directory REM JAVA_HOME Java JRE directory REM JAVA Java interpreter REM EXTRA_JARS Extra jar files to add to CLASSPATH SET JHOVE_HOME="C:\Program Files\jhove" SET JAVA_HOME="C:\Program Files\java\j2re1.4.1_02" SET JAVA=%JAVA_HOME%\bin\java SET EXTRA_JARS= REM NOTE: Nothing below this line should be edited REM ######################################################################### SET CP=%JHOVE_HOME%\bin\JhoveApp.jar IF "%EXTRA_JARS%"=="" GOTO FI SET CP=%CP%:%EXTRA_JARS :FI REM Retrieve a copy of all command line arguments to pass to the application SET ARGS= :WHILE IF "%1"=="" GOTO LOOP SET ARGS=%ARGS% %1 SHIFT GOTO WHILE :LOOP REM Set the CLASSPATH and invoke the Java loader %JAVA% -classpath %CP% JDump %ARGS% jhove/jdump0000644000707400001440000000176511144316636012137 0ustar garyusers#!/bin/sh ######################################################################## # jdump - JSTOR/Harvard Object Validation Environment # Copyright 2004-2005 by the President and Fellows of Harvard College # JHOVE is made available under the GNU General Public License (see the # file LICENSE for details) # # Driver script for the JPEG dump utility # # Usage: jdump file # # where file is a JPEG file # # Configuration constants: JHOVE_HOME=/users/stephen/projects/jhove JAVA_HOME=/usr/java # Java JRE directory JAVA=$JAVA_HOME/bin/java # Java interpreter EXTRA_JARS= # Extra .jar files to add to CLASSPATH # NOTE: Nothing below this line should be edited ######################################################################## CP=${JHOVE_HOME}/bin/JhoveApp.jar:${EXTRA_JARS} # Retrieve a copy of all command line arguments to pass to the application. ARGS="" for ARG do ARGS="$ARGS $ARG" done # Set the CLASSPATH and invoke the Java loader. ${JAVA} -classpath $CP JDump $ARGS jhove/jdump.bat0000644000707400001440000000221511144316636012673 0ustar garyusers@ECHO OFF REM jdump - JSTOR/Harvard Object Validation Environment REM Copyright 2004-2005 by the President and Fellows of Harvard College REM JHOVE is made available under the GNU General Public License (see the REM file LICENSE for details) REM REM Driver script for the JPEG dump utility REM REM Usage: jdump file REM REM where file is a JPEG file REM REM Configuration constants: REM JHOVE_HOME Jhove installation directory REM JAVA_HOME Java JRE directory REM JAVA Java interpreter REM EXTRA_JARS Extra jar files to add to CLASSPATH SET JHOVE_HOME="C:\Program Files\jhove" SET JAVA_HOME="C:\Program Files\java\j2re1.4.1_02" SET JAVA=%JAVA_HOME%\bin\java SET EXTRA_JARS= REM NOTE: Nothing below this line should be edited REM ######################################################################### SET CP=%JHOVE_HOME%\bin\JhoveApp.jar IF "%EXTRA_JARS%"=="" GOTO FI SET CP=%CP%:%EXTRA_JARS :FI REM Retrieve a copy of all command line arguments to pass to the application SET ARGS= :WHILE IF "%1"=="" GOTO LOOP SET ARGS=%ARGS% %1 SHIFT GOTO WHILE :LOOP REM Set the CLASSPATH and invoke the Java loader %JAVA% -classpath %CP% JDump %ARGS% jhove/jhove0000755000707400001440000000420711204532672012125 0ustar garyusers#!/bin/sh ######################################################################## # JHOVE - JSTOR/Harvard Object Validation Environment # Copyright 2003-2005 by JSTOR and the President and Fellows of Harvard College # JHOVE is made available under the GNU General Public License (see the # file LICENSE for details) # # Usage: jhove [-c config] [-m module] [-h handler] [-e encoding] [-H handler] # [-o output] [-x saxclass] [-t tempdir] [-b bufsize] # [-l loglevel] [[-krs] dir-file-or-uri [...]] # # where -c config Configuration file pathname # -m module Module name # -h handler Output handler name (defaults to TEXT) # -e encoding Character encoding of output handler (defaults to UTF-8) # -H handler About handler name # -o output Output file pathname (defaults to standard output) # -x saxclass SAX parser class (defaults to J2SE 1.4 default) # -t tempdir Temporary directory in which to create temporary files # -b bufsize Buffer size for buffered I/O (defaults to J2SE 1.4 default) # -k Calculate CRC32, MD5, and SHA-1 checksums # -r Display raw data flags, not textual equivalents # -s Format identification based on internal signatures only # dir-file-or-uri Directory, file pathname or URI of formatted content # # Configuration constants: #JHOVE_HOME=/users/gary/dev/jhove JHOVE_HOME=[fill in path to jhove directory] JAVA_HOME=/usr/java # Java JRE directory -- change to your local java home JAVA=$JAVA_HOME/bin/java # Java interpreter -- usually won't need change #XTRA_JARS=/users/stephen/xercesImpl.jar EXTRA_JARS= # Extra .jar files to add to CLASSPATH # NOTE: Nothing below this line should be edited ######################################################################## CP=${JHOVE_HOME}/bin/JhoveApp.jar:${EXTRA_JARS} # Retrieve a copy of all command line arguments to pass to the application. ARGS="" for ARG do ARGS="$ARGS $ARG" done # Set the CLASSPATH and invoke the Java loader. #{JAVA} -classpath $CP Jhove $ARGS -x org.apache.xerces.parsers.SAXParser ${JAVA} -classpath $CP Jhove $ARGS jhove/jhove.bat0000644000707400001440000000440211207320107012653 0ustar garyusers@ECHO OFF REM JHOVE - JSTOR/Harvard Object Validation Environment REM Copyright 2003-2006 by JSTOR and the President and Fellows of Harvard College REM JHOVE is made available under the GNU General Public License (see the REM file LICENSE for details) REM REM Usage: jhove [-c config] [-m module] [-h handler] [-e encoding] REM [-H handler] [-o output] [-x saxclass] [-t tempdir] REM [-b bufsize] [-l loglevel] [[-krs] dir-file-or-uri [...]] REM REM where -c config Configuration file pathname REM -m module Module name REM -h handler Output handler name (defaults to TEXT) REM -e encoding Character encoding of output handler (defaults to UTF-8) REM -H handler About handler name REM -o output Output file pathname (defaults to standard output) REM -x saxclass SAX parser class (defaults to J2SE 1.4 default) REM -t tempdir Temporary directory in which to create temporary files REM -b bufsize Buffer size for buffered I/O (defaults to J2SE default) REM -l loglevel Logging level REM -k Calculate CRC32, MD5, and SHA-1 checksums REM -r Display raw data flags, not textual equivalents REM -s Format identification based on internal signatures only REM dir-file-or-uri Directory, file pathname, or URI of formatted content REM REM Configuration constants: REM JHOVE_HOME Jhove installation directory REM JAVA_HOME Java JRE directory REM JAVA Java interpreter REM EXTRA_JARS Extra jar files to add to CLASSPATH REM Change JHOVE_HOME if location of JHOVE is different from the following SET JHOVE_HOME="C:\Program Files\jhove" REM Change JAVA_HOME to your installed Java directory SET JAVA_HOME="C:\Program Files\java\j2re1.4.1_02" SET JAVA=%JAVA_HOME%\bin\java SET EXTRA_JARS= REM NOTE: Nothing below this line should be edited REM ######################################################################### SET CP=%JHOVE_HOME%\bin\JhoveApp.jar IF "%EXTRA_JARS%"=="" GOTO FI SET CP=%CP%:%EXTRA_JARS :FI REM Retrieve a copy of all command line arguments to pass to the application SET ARGS= :WHILE IF %1x==x GOTO LOOP SET ARGS=%ARGS% %1 SHIFT GOTO WHILE :LOOP REM Set the CLASSPATH and invoke the Java loader %JAVA% -classpath %CP% Jhove %ARGS% jhove/jhove.tmpl0000755000707400001440000000411110771557571013107 0ustar garyusers#!/bin/sh ######################################################################## # JHOVE - JSTOR/Harvard Object Validation Environment # Copyright 2003-2004 by JSTOR and the President and Fellows of Harvard College # JHOVE is made available under the GNU General Public License (see the # file LICENSE for details) # # Copy jhove.tmpl to jhove, and replace the value of JHOVE_HOME with # the path to your jhove directory. # # Usage: jhove [-c config] [-m module [-p param]] [-h handler [-P param]] # [-e encoding] [-H handler] [-o output] [-x saxclass] # [-t tempdir] [-b bufsize] [[-krs] dir-file-or-uri [...]] # # where -c config Configuration file pathname # -m module Module name # -p param Module-specific parameter # -h handler Output handler name (defaults to TEXT) # -P param Handler-specific parameter # -o output Output file pathname (defaults to standard output) # -x saxclass SAX parser class (defaults to J2SE 1.4 default) # -t tempdir Temporary directory in which to create temporary files # -b bufsize Buffer size for buffered I/O (defaults to J2SE 1.4 default) # -k Calculate CRC32, MD5, and SHA-1 checksums # -r Display raw data flags, not textual equivalents # -s Format identification based on internal signatures only # dir-file-or-uri Directory, file pathname or URI of formatted content # # Configuration constants: JHOVE_HOME=[your directory path]/jhove JAVA_HOME=/usr/java JAVA=/usr/bin/java #XTRA_JARS=/users/stephen/xercesImpl.jar EXTRA_JARS= # Extra .jar files to add to CLASSPATH # NOTE: Nothing below this line should be edited ######################################################################## CP=${JHOVE_HOME}/bin/JhoveApp.jar:${EXTRA_JARS} # Retrieve a copy of all command line arguments to pass to the application. ARGS="" for ARG do ARGS="$ARGS $ARG" done # Set the CLASSPATH and invoke the Java loader. #{JAVA} -classpath $CP Jhove $ARGS -x org.apache.xerces.parsers.SAXParser ${JAVA} -classpath $CP Jhove $ARGS jhove/jhove_bat.tmpl0000644000707400001440000000447510771557571013747 0ustar garyusers@ECHO OFF REM JHOVE - JSTOR/Harvard Object Validation Environment REM Copyright 2003-2005 by JSTOR and the President and Fellows of Harvard College REM JHOVE is made available under the GNU General Public License (see the REM file LICENSE for details) REM REM Usage: jhove [-c config] [-m module] [-h handler] [-e encoding] REM [-H handler] [-o output] [-x saxclass] [-t tempdir] REM [-b bufsize] [-l loglevel] [[-krs] dir-file-or-uri [...]] REM REM For Windows systems, copy jhove_bat.tmpl to jhove.bat and change REM the value of JHOVE_HOME to the path to your jhove directory. REM REM where -c config Configuration file pathname REM -m module Module name REM -h handler Output handler name (defaults to TEXT) REM -e encoding Character encoding of output handler (defaults to UTF-8) REM -H handler About handler name REM -o output Output file pathname (defaults to standard output) REM -x saxclass SAX parser class (defaults to J2SE 1.4 default) REM -t tempdir Temporary directory in which to create temporary files REM -b bufsize Buffer size for buffered I/O (defaults to J2SE default) REM -l loglevel Logging level REM -k Calculate CRC32, MD5, and SHA-1 checksums REM -r Display raw data flags, not textual equivalents REM -s Format identification based on internal signatures only REM dir-file-or-uri Directory, file pathname, or URI of formatted content REM REM Configuration constants: REM JHOVE_HOME Jhove installation directory REM JAVA_HOME Java JRE directory REM JAVA Java interpreter REM EXTRA_JARS Extra jar files to add to CLASSPATH REM SET JHOVE_HOME="C:\Program Files\jhove" SET JHOVE_HOME="[your directory path]\jhove" SET JAVA_HOME="C:\Program Files\java\j2re1.4.1_02" SET JAVA=%JAVA_HOME%\bin\java SET EXTRA_JARS= REM NOTE: Nothing below this line should be edited REM ######################################################################### SET CP=%JHOVE_HOME%\bin\JhoveApp.jar IF "%EXTRA_JARS%"=="" GOTO FI SET CP=%CP%:%EXTRA_JARS :FI REM Retrieve a copy of all command line arguments to pass to the application SET ARGS= :WHILE IF "%1"=="" GOTO LOOP SET ARGS=%ARGS% %1 SHIFT GOTO WHILE :LOOP REM Set the CLASSPATH and invoke the Java loader %JAVA% -classpath %CP% Jhove %ARGS% jhove/pdump0000644000707400001440000000177511144316636012146 0ustar garyusers#!/bin/sh ######################################################################## # pdump - JSTOR/Harvard Object Validation Environment # Copyright 2003-2005 by JSTOR and the President and Fellows of Harvard College # JHOVE is made available under the GNU General Public License (see the # file LICENSE for details) # # Driver script for the PDF dump utility # # Usage: pdump file # # where file is a PDF file # # Configuration constants: JHOVE_HOME=/users/stephen/projects/jhove JAVA_HOME=/usr/java # Java JRE directory JAVA=$JAVA_HOME/bin/java # Java interpreter EXTRA_JARS= # Extra .jar files to add to CLASSPATH # NOTE: Nothing below this line should be edited ######################################################################## CP=${JHOVE_HOME}/bin/JhoveApp.jar:${EXTRA_JARS} # Retrieve a copy of all command line arguments to pass to the application. ARGS="" for ARG do ARGS="$ARGS $ARG" done # Set the CLASSPATH and invoke the Java loader. ${JAVA} -classpath $CP PDump $ARGS jhove/pdump.bat0000644000707400001440000000222511144316636012702 0ustar garyusers@ECHO OFF REM pdump - JSTOR/Harvard Object Validation Environment REM Copyright 2003-2005 by JSTOR and the President and Fellows of Harvard College REM JHOVE is made available under the GNU General Public License (see the REM file LICENSE for details) REM REM Driver script for the PDF dump utility REM REM Usage: pdump file REM REM where file is a PDF file REM REM Configuration constants: REM JHOVE_HOME Jhove installation directory REM JAVA_HOME Java JRE directory REM JAVA Java interpreter REM EXTRA_JARS Extra jar files to add to CLASSPATH SET JHOVE_HOME="C:\Program Files\jhove" SET JAVA_HOME="C:\Program Files\java\j2re1.4.1_02" SET JAVA=%JAVA_HOME%\bin\java SET EXTRA_JARS= REM NOTE: Nothing below this line should be edited REM ######################################################################### SET CP=%JHOVE_HOME%\bin\JhoveApp.jar IF "%EXTRA_JARS%"=="" GOTO FI SET CP=%CP%:%EXTRA_JARS :FI REM Retrieve a copy of all command line arguments to pass to the application SET ARGS= :WHILE IF "%1"=="" GOTO LOOP SET ARGS=%ARGS% %1 SHIFT GOTO WHILE :LOOP REM Set the CLASSPATH and invoke the Java loader %JAVA% -classpath %CP% PDump %ARGS% jhove/userhome0000755000707400001440000000141410771557571012653 0ustar garyusers#!/bin/sh ######################################################################## # userhome - JSTOR/Harvard Object Validation Environment # Copyright 2004-2006 by the President and Fellows of Harvard College # JHOVE is made available under the GNU General Public License (see the # file LICENSE for details) # # Driver script to display the default Java user.home property # # Usage: userhome # # Configuration constants: JHOVE_HOME=/users/stephen/projects/jhove JAVA_HOME=/usr/java # Java JRE directory JAVA=$JAVA_HOME/bin/java # Java interpreter # NOTE: Nothing below this line should be edited ######################################################################## # Set the CLASSPATH and invoke the Java loader. ${JAVA} -classpath ${JHOVE_HOME}/classes UserHome jhove/userhome.bat0000755000707400001440000000161510771557571013423 0ustar garyusers@ECHO OFF REM userhome - JSTOR/Harvard Object Validation Environment REM Copyright 2004-2006 by the President and Fellows of Harvard College REM JHOVE is made available under the GNU General Public License (see the REM file LICENSE for details) REM REM Driver script to display the default Java user.home property REM REM Usage: userhome REM REM Configuration constants: REM JHOVE_HOME Jhove installation directory REM JAVA_HOME Java JRE directory REM JAVA Java interpreter REM EXTRA_JARS Extra jar files to add to CLASSPATH SET JHOVE_HOME="C:\Program Files\jhove" SET JAVA_HOME="C:\Program Files\java\j2re1.4.2_07" SET JAVA=%JAVA_HOME%\bin\java REM NOTE: Nothing below this line should be edited REM ######################################################################### REM Set the CLASSPATH and invoke the Java loader %JAVA% -classpath %JHOVE_HOME%\classes UserHome jhove/classes/0000755000707400001440000000000011510702110012500 5ustar garyusersjhove/classes/META-INF/0000755000707400001440000000000011510702110013640 5ustar garyusersjhove/classes/META-INF/MANIFEST.MF0000644000707400001440000000046311510702110015275 0ustar garyusersManifest-Version: 1.0 Ant-Version: Apache Ant 1.6.5 Created-By: 16.3-b01 (Sun Microsystems Inc.) Built-By: gary Built-On: 2011-01-04T15:34:16 Main-Class: Jhove Name: JHOVE Version: 1.0 Package: Jhove app Rights: Copyright 2004-2006 by JSTOR and the President and Fellows of Harvard College jhove/classes/ADump.java0000644000707400001440000001740310771562733014405 0ustar garyusers/********************************************************************** * JDump - JSTOR/Harvard Object Validation Environment * Copyright 2004-2005 by the President and Fellows of Harvard College * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * USA **********************************************************************/ import edu.harvard.hul.ois.jhove.*; import edu.harvard.hul.ois.jhove.module.aiff.*; import java.io.*; /** * Dump contents of AIFF file in human-readable format. * @author Gary McGath */ public class ADump extends Dump { /* Fixed value for first 4 bytes */ private static final int[] sigByte = { 0X46, 0X4F, 0X52, 0X4D }; private static final boolean ENDIAN = true; /* bigEndian */ /****************************************************************** * MAIN ENTRY POINT. ******************************************************************/ /** * Main entry point. * @param args Command line arguments */ public static void main (String [] args) { if (args.length < 1) { System.err.println ("usage: java ADump file"); System.exit (-1); } try { FileInputStream file = new FileInputStream (args[0]); BufferedInputStream buffer = new BufferedInputStream (file); DataInputStream stream = new DataInputStream (buffer); ADump dump = new ADump (); // Just to access contained classes long os = 0; for (int i=0; i<4; i++) { int ch; ch = stream.readUnsignedByte(); if (ch != sigByte[i]) { System.out.println ("No AIFF FORM header"); System.exit (-2); } } os += 4; long ckSize = ModuleBase.readUnsignedInt (stream, ENDIAN); // Read the file type StringBuffer formType = new StringBuffer (4); for (int i=0; i<4; i++) { int ch = ModuleBase.readUnsignedByte(stream); formType.append((char) ch); } System.out.println ("00000000: FORM " + ckSize + ": " + formType); boolean aiff_c = false; if (formType.toString ().equals ("AIFC")) { aiff_c = true; } StringBuffer sbuf = new StringBuffer (); boolean endOfFile = false; while (!endOfFile) { // Read chunks try { sbuf.setLength(0); // Read chunk name. for (int i=0; i<4; i++) { int ch = ModuleBase.readUnsignedByte(stream); sbuf.append((char) ch); } String ckID = sbuf.toString (); // Read size (excluding chunk name and size fields) ckSize = ModuleBase.readUnsignedInt (stream, ENDIAN); System.out.print (leading (os, 8) + os + ": " + ckID + " " + ckSize); long alreadyRead = 0; if (ckID.equals ("AESD")) { int [] aes = new int[24]; for (int i=0; i<24; i++) { aes[i] = ModuleBase.readUnsignedByte (stream); } System.out.print (": " + aes[0]); for (int i=1; i<24; i++) { System.out.print ("," + aes[i]); } alreadyRead = 24; } else if (ckID.equals ("ANNO") || ckID.equals ("AUTH") || ckID.equals ("(c) ") || ckID.equals ("NAME")) { sbuf.setLength (0); for (int i=0; i 0) { break; } else { boxStack.pop (); } } // Read the header of a JP2 box Box box = dump.new Box (stream); try { box.read (); } catch (EOFException e) { endOfFile = true; break; } os += box.length - box.bytesLeft; // If it's contained in a superbox, subtract // this box from its remaining length if (boxtop != null) { boxtop.bytesLeft -= box.length; } System.out.println (leading (os, 8) + os + ": " + stackPrefix (boxStack) + box.type + " " + box.length); if (box.isSuperbox ()) { boxStack.push (box); } else { os += box.bytesLeft; stream.skipBytes((int) box.bytesLeft); } // A "length" of 0 means the box occupies the rest of the file. if (box.length == 0) { endOfFile = true; } } } catch (Exception e) { e.printStackTrace (System.err); System.exit (-2); } } /* Constructs a qualifying prefix to indicate nested boxes. */ private static String stackPrefix (Stack boxStack) { StringBuffer retval = new StringBuffer (); // In defiance of gravity, we rummage through the stack // of boxes starting at the bottom. for (int i = 0; i < boxStack.size(); i++) { Box box = (Box) boxStack.elementAt (i); // Remove trailing spaces from types for better readability retval.append (box.type.trim() + "/"); } return retval.toString (); } /** Local class for defining JPEG2000 boxes. */ class Box { public String type; public long length; public long bytesLeft; public boolean hasBoxes; DataInputStream dstream; public Box (DataInputStream stream) { this.dstream = stream; } /** Reads a box header and sets up for reading contents. */ public void read () throws IOException { length = ModuleBase.readUnsignedInt (dstream, ENDIAN, null); long headerLength = 8; type = read4Chars (); // If the length field is 1, there is an 8-byte extended // length field. if (length == 1) { length = ModuleBase.readSignedLong(dstream, true, null); headerLength = 16; } bytesLeft = length - headerLength; } /* Reads a 4-character name */ private String read4Chars() throws IOException { StringBuffer sbuf = new StringBuffer(4); for (int i = 0; i < 4; i++) { int ch = ModuleBase.readUnsignedByte(dstream, null); sbuf.append((char) ch); } return sbuf.toString(); } /** Returns true if this box contains other boxes. * At present, we don't deal with the insides of boxes * that contain both data and boxes (e.g., cref). */ public boolean isSuperbox () { // If it's a known superbox type, we return true. // If we've left any out, that will merely make us // lose the subboxes of that type. String [] supertypes = { "asoc", "cgrp", "comp", "drep", "ftbl", "jp2h", "jpch", "jplh", "res ", "uuid" }; for (int i = 0; i < supertypes.length; i++) { if (supertypes[i].equals (type)) { return true; } } return false; } } } jhove/classes/JDump.java0000644000707400001440000002733110771562733014417 0ustar garyusers/********************************************************************** * JDump - JSTOR/Harvard Object Validation Environment * Copyright 2004 by the President and Fellows of Harvard College * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * USA **********************************************************************/ import edu.harvard.hul.ois.jhove.*; import java.io.*; //import java.util.*; /** * Dump contents of JPEG file in human-readable format. */ public class JDump extends Dump { /****************************************************************** * MAIN ENTRY POINT. ******************************************************************/ /** * Main entry point. * @param args Command line arguments */ public static void main (String [] args) { if (args.length < 1) { System.err.println ("usage: java JDump file"); System.exit (-1); } try { FileInputStream file = new FileInputStream (args[0]); BufferedInputStream buffer = new BufferedInputStream (file); DataInputStream stream = new DataInputStream (buffer); boolean bigEndian = true; long os = 0; boolean endOfImage = false; boolean readingECS = false; boolean haveCode = false;; int nECS = 0; int code = 0; while (!endOfImage) { if (!readingECS) { if (!haveCode) { code = stream.readUnsignedByte (); for (int i=0; (code = stream.readUnsignedByte ()) == 0xff; i++) { System.out.println (leading (os, 8) + os + ": fill 0xff"); os++; } } } else { boolean ff = false; int length = 0; while (true) { code = stream.readUnsignedByte (); length++; if (code == 0xff) { ff = true; } else if (ff) { if (code != 0x00) { length -= 2; break; } else { ff = false; } } } System.out.println (leading (os, 8) + os + ": ECS" + nECS + " " + length + " ..."); os += length; nECS++; readingECS = false; haveCode = true; continue; } if (code == 0x01) { System.out.println (leading (os, 8) + os + ": TEM"); } else if ((code >= 0xc0 && code <= 0xc3) || (code >= 0xc5 && code <= 0xc7) || (code >= 0xc9 && code <= 0xcb) || (code >= 0xcd && code <= 0xcf)) { int n = code - 0xc0; /****************** int length = markerSegment (stream, bigEndian); */ int length = ModuleBase.readUnsignedShort (stream, bigEndian, null); int P = stream.readUnsignedByte (); int Y = ModuleBase.readUnsignedShort (stream, bigEndian, null); int X = ModuleBase.readUnsignedShort (stream, bigEndian, null); int Nf = stream.readUnsignedByte (); int [] Ci = new int [Nf]; int [] Hi = new int [Nf]; int [] Vi = new int [Nf]; int [] Tqi = new int [Nf]; for (int i=0; i= 0xd0 && code <= 0xd7) { int m = code - 0xd0; System.out.println (leading (os, 8) + os + ": RST" + m); readingECS = true; } else if (code == 0xd8) { System.out.println (leading (os, 8) + os + ": SOI"); } else if (code == 0xd9) { System.out.println (leading (os, 8) + os + ": EOI"); endOfImage = true; break; } else if (code == 0xda) { int length = markerSegment (stream, bigEndian); System.out.println (leading (os, 8) + os + ": SOS" + " " + length + " ..."); os += length; readingECS = true; } else if (code == 0xdb) { int length = markerSegment (stream, bigEndian); System.out.println (leading (os, 8) + os + ": DQT" + " " + length + " ..."); os += length; } else if (code == 0xdc) { int length = markerSegment (stream, bigEndian); System.out.println (leading (os, 8) + os + ": DNL" + " " + length + " ..."); os += length; } else if (code == 0xdd) { int length = markerSegment (stream, bigEndian); System.out.println (leading (os, 8) + os + ": DRI" + " " + length + " ..."); os += length; } else if (code == 0xde) { int length = markerSegment (stream, bigEndian); System.out.println (leading (os, 8) + os + ": DHP" + " " + length + " ..."); os += length; } else if (code == 0xdf) { int length = markerSegment (stream, bigEndian); System.out.println (leading (os, 8) + os + ": EXP" + " " + length + " ..."); os += length; } else if (code == 0xe0) { int length = ModuleBase.readUnsignedShort (stream, bigEndian, null); String id = readChars (stream, 5); if (id.equals ("JFIF\0")) { int major = stream.readUnsignedByte (); int minor = stream.readUnsignedByte (); int units = stream.readUnsignedByte (); int xDensity = ModuleBase.readUnsignedShort (stream, bigEndian, null); int yDensity = ModuleBase.readUnsignedShort (stream, bigEndian, null); int xThumbnail = stream.readUnsignedByte (); int yThumbnail = stream.readUnsignedByte (); System.out.print (leading (os, 8) + os + ": APP0 " + "\"" + id + "\" " + major + "." + minor + " " + units + " " + xDensity + "x" + yDensity + " " + xThumbnail + "x" + yThumbnail); int n = length - 16; if (n > 0) { for (int i=0; i 0) { for (int i=0; i= 0xe1 && code <= 0xef) { int n = code - 0xe0; /* int length = markerSegment (stream, bigEndian); */ int length = ModuleBase.readUnsignedShort (stream, bigEndian, null); if ((n == 1 || n == 2) && length >= 8) { String id = readChars (stream, 4); int NULL = stream.readUnsignedByte (); int padding = stream.readUnsignedByte (); if (id.equals ("Exif") || id.equals ("FPXR")) { System.out.println (leading (os, 8) + os + ": APP" + n + " \"" + id + "\" " + NULL + " " + padding + " " + (length-8) + ": ..."); } else { System.out.println (leading (os, 8) + os + ": APP" + n + " " + length + " ..."); } for (int i=8; i 0) { int [] cap = new int [n]; for (int i=0; i= 0xf7 && code <= 0xfd) { int n = code - 0xf0; int length = markerSegment (stream, bigEndian); System.out.println (leading (os, 8) + os + ": JPG" + n + " " + length + " ..."); os += length; } else if (code == 0xfe) { int length = ModuleBase.readUnsignedShort (stream, bigEndian, null); String comment = readChars (stream, length-2); System.out.println (leading (os, 8) + os + ": COM \"" + comment + "\""); os += length; } else { int length = markerSegment (stream, bigEndian); String hex = Integer.toHexString (code); System.out.println (leading (os, 8) + os + ": RES (0x" + leading (hex, 2) + hex + ") " + length + " ..."); } os += 2; } stream.close (); } catch (Exception e) { e.printStackTrace (System.err); System.exit (-2); } } /** * Read marker segment data * @param stream Data input stream * @param bigEndian True if big-endian * @return Length of marker segment */ private static int markerSegment (DataInputStream stream, boolean bigEndian) throws IOException { int length = ModuleBase.readUnsignedShort (stream, bigEndian, null); for (int i=2; i 0) { dirFileOrUri = new String [len]; for (int i=0; i 80) { msg = msg.substring (0, 79) + "..."; } JOptionPane.showMessageDialog (hiddenFrame, msg, "Jhove Error", JOptionPane.ERROR_MESSAGE); } } jhove/classes/PDump.java0000644000707400001440000000712710771562732014425 0ustar garyusers/********************************************************************** * PDump - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * USA **********************************************************************/ import edu.harvard.hul.ois.jhove.*; import edu.harvard.hul.ois.jhove.module.pdf.*; import java.io.*; /** * Dump contents of PDF file in human-readable format. */ public class PDump extends Dump { /****************************************************************** * MAIN ENTRY POINT. ******************************************************************/ /** * Main entry point. * @param args Command line arguments */ public static void main (String [] args) { if (args.length < 1) { System.err.println ("usage: java PDump file"); System.exit (-1); } try { RandomAccessFile file = new RandomAccessFile (args[0], "r"); Tokenizer tokenizer = new FileTokenizer (file); Token token = null; long offset = 0; while ((token = tokenizer.getNext ()) != null) { System.out.print (leading (offset, 8) + offset + ": "); if (token instanceof ArrayEnd) { System.out.println ("ArrayEnd"); } else if (token instanceof ArrayStart) { System.out.println ("ArrayStart"); } else if (token instanceof Comment) { System.out.println ("Comment \"" + ((Comment) token).getValue () + "\""); } else if (token instanceof DictionaryEnd) { System.out.println ("DictionaryEnd"); } else if (token instanceof DictionaryStart) { System.out.println ("DictionaryStart"); } // else if (token instanceof Hexadecimal) { // System.out.println ("Hexadecimal[" + // (((Hexadecimal) token).isPDFDocEncoding () ? // "PDF" : "UTF-16") + "] \"" + // ((Hexadecimal) token).getValue () + // "\""); // } else if (token instanceof Keyword) { System.out.println ("Keyword \"" + ((Keyword) token).getValue () + "\""); } else if (token instanceof Literal) { System.out.println ("Literal[" + (((Literal)token).isPDFDocEncoding () ? "PDF" : "UTF-16") + "] \"" + ((Literal) token).getValue () + "\""); } else if (token instanceof Name) { System.out.println ("Name \"" + ((Name) token).getValue () + "\""); } else if (token instanceof Numeric) { Numeric numeric = (Numeric) token; if (numeric.isReal ()) { System.out.println ("Numeric " + numeric.getValue ()); } else { System.out.println ("Numeric " + numeric.getIntegerValue ()); } } else if (token instanceof Stream) { System.out.println ("Stream " + ((Stream) token).getLength ()); } else { System.out.println (token); } offset = tokenizer.getOffset (); } } catch (Exception e) { e.printStackTrace (System.err); System.exit (-2); } } } jhove/classes/TDump.java0000644000707400001440000002412210771562732014423 0ustar garyusers/********************************************************************** * TDump - JSTOR/Harvard Object Validation Environment * Copyright 2003-2004 by JSTOR and the President and Fellows of Harvard College * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * USA **********************************************************************/ import edu.harvard.hul.ois.jhove.*; import edu.harvard.hul.ois.jhove.module.tiff.*; import java.io.*; import java.util.*; /** * Dump contents of TIFF file in human-readable format. */ public class TDump extends Dump { /****************************************************************** * PRIVATE CLASS FIELDS. ******************************************************************/ /** Count of IFDs. */ private static int _nIFDs; /** Sorted associative map of tags. */ private static Map _tags; /****************************************************************** * MAIN ENTRY POINT. ******************************************************************/ /** * Main entry point. * @param args Command line arguments */ public static void main (String [] args) { if (args.length < 1) { System.err.println ("usage: java TDump [-bs] file"); System.exit (-1); } String tiff = null; boolean nobyte = false; boolean nosub = false; for (int i=0; i 0) { } file.close (); } catch (Exception e) { e.printStackTrace (System.out); err = -2; } finally { /* Display all tags in offset-sorted order. */ Iterator iter = _tags.keySet ().iterator (); while (iter.hasNext ()) { String os = (String) iter.next (); System.out.println (os + ": " + (String) _tags.get (os)); } if (err != 0) { System.exit (err); } } } /** * Read IFDs. * @param file Open TIFF file * @param bigEndian True if big-endian * @param offset Byte offset of IFD * @param nobyte If true, only display the first 8 bytes of data of * type BYTE * @param nosub If true, do not parse subIFDs */ private static long readIFD (RandomAccessFile file, boolean bigEndian, long offset, boolean nobyte, boolean nosub) throws Exception { int nIFD = ++_nIFDs; List subIFDs = new ArrayList (); List stripByteCounts = new ArrayList (); List stripOffsets = new ArrayList (); file.seek (offset); int nEntries = ModuleBase.readUnsignedShort (file, bigEndian); _tags.put (leading (offset, 8) + offset, "IFD " + nIFD + " with " + nEntries + " entries"); String name = null; for (int i=0; i 4) { long vo = ModuleBase.readUnsignedInt (file, bigEndian); file.seek (vo); buffer.append (" @" + vo); } StringBuffer ascii = new StringBuffer (); for (int j=0; j 4) { long vo = ModuleBase.readUnsignedInt (file, bigEndian); file.seek (vo); buffer.append (" @" + vo); } buffer.append (" ="); long ct = count; if (nobyte && count > 8) { ct = 8; } for (int j=0; j 8) { buffer.append (" ..."); } } else if (type == IFD.DOUBLE) { long vo = ModuleBase.readUnsignedInt (file, bigEndian); file.seek (vo); buffer.append (" @" + vo + " ="); for (int j=0; j 1) { long vo = ModuleBase.readUnsignedInt (file, bigEndian); file.seek (vo); buffer.append (" @" + vo); } buffer.append (" ="); for (int j=0; j 1) { long vo = ModuleBase.readUnsignedInt (file, bigEndian); file.seek (vo); buffer.append (" @" + vo + " = "); } else if (tag == 330 || /* Sub IFD */ tag == 34665 || /* EXIF IFD */ tag == 34853 || /* EXIF GPS IFD */ tag == 40965) { /* EXIF Interoperability IFD */ buffer.append (" @"); } else { buffer.append (" = "); } for (int j=0; j 0) { buffer.append (" "); } buffer.append (in); if (tag == 330 || /* Sub IFD */ tag == 34665 || /* EXIF IFD */ tag == 34853 || /* EXIF GPS IFD */ tag == 40965) { /* EXIF Interoperability IFD */ subIFDs.add (new Long (in)); } else if (tag == 273) { stripOffsets.add (new Long (in)); } else if (tag == 279) { stripByteCounts.add (new Long (in)); } } } else if (type == IFD.RATIONAL) { long vo = ModuleBase.readUnsignedInt (file, bigEndian); file.seek (vo); buffer.append (" @" + vo + " ="); for (int j=0; j 4) { long vo = ModuleBase.readUnsignedInt (file, bigEndian); file.seek (vo); buffer.append (" @" + vo); } buffer.append (" ="); for (int j=0; j 2) { long vo = ModuleBase.readUnsignedInt (file, bigEndian); file.seek (vo); buffer.append (" @" + vo); } buffer.append (" ="); for (int j=0; j 1) { long vo = ModuleBase.readUnsignedInt (file, bigEndian); file.seek (vo); buffer.append (" @" + vo); } buffer.append (" ="); for (int j=0; j 2) { long vo = ModuleBase.readUnsignedInt (file, bigEndian); file.seek (vo); buffer.append (" @" + vo); } buffer.append (" ="); for (int j=0; j 0) { } } } long os = offset + 2 + nEntries*12; file.seek (os); long next = ModuleBase.readUnsignedInt (file, bigEndian); _tags.put (leading (os, 8) + os, "NextIFDOffset LONG @" + next); int len = stripOffsets.size (); if (len > 0) { for (int j=0; j 14) { int bitsPerSample = ModuleBase.readUnsignedShort (stream, ENDIAN); System.out.print (" " + bitsPerSample); alreadyRead = 16; if (ckSize > 16) { int size = ModuleBase.readUnsignedShort (stream, ENDIAN); System.out.print (" " + size); alreadyRead = 18; if (size == 22) { int validBitsPerSample = ModuleBase.readUnsignedShort (stream, ENDIAN); long channelMask = ModuleBase.readUnsignedInt (stream, ENDIAN); hex = Long.toHexString (channelMask); System.out.print (" " + validBitsPerSample + " 0x" + leading (hex, 8) + hex + " 0x"); for (int i=0; i<4; i++) { long guid = ModuleBase.readUnsignedInt ( stream, ENDIAN); hex = Long.toHexString (guid); System.out.print (leading (hex, 8) + hex); } alreadyRead = 40; } } } } System.out.println (); if (ckID.equals ("list") || ckID.equals ("LIST")) { readNestedChunks (ckID, stream, ckSize, os + 8); } else { stream.skipBytes ((int) (ckSize - alreadyRead)); } os += ckSize + 8; } catch (EOFException e) { endOfFile = true; } } } catch (Exception e) { } } /* The "list" and "LIST" chunks (which are two distinct chunk types) hold nested chunks. */ private static void readNestedChunks (String ckID, DataInputStream stream, long ckSize, long os) throws IOException { String listType = read4Chars (stream); System.out.println ("List type = " + listType); while (ckSize > 0) { String subCkID = read4Chars (stream); long subCkSize = ModuleBase.readUnsignedInt (stream, ENDIAN, null); System.out.println (leading (os, 8) + os + ": " + ckID + "/" + subCkID + " " + subCkSize); stream.skipBytes ((int) subCkSize); os += subCkSize + 8; ckSize -= subCkSize + 8; } } private static String read4Chars (DataInputStream stream) throws IOException { StringBuffer sbuf = new StringBuffer(4); for (int i = 0; i < 4; i++) { int ch = ModuleBase.readUnsignedByte(stream, null); sbuf.append((char) ch); } return sbuf.toString (); } } jhove/classes/build.xml0000644000707400001440000001267011211532163014336 0ustar garyusers Main build file Jhove - JSTOR/Harvard Object Validation Environment Version 1.1 2006-02-13 Copyright 2004-2006 by JSTOR and the President and Fellows of Harvard College
jhove/classes/overview.html0000644000707400001440000000011210771562732015254 0ustar garyusers JHOVE API Specification (1.1) jhove/classes/edu/0000755000707400001440000000000011510701764013273 5ustar garyusersjhove/classes/edu/harvard/0000755000707400001440000000000011510701764014722 5ustar garyusersjhove/classes/edu/harvard/hul/0000755000707400001440000000000011510701764015512 5ustar garyusersjhove/classes/edu/harvard/hul/ois/0000755000707400001440000000000011510701764016304 5ustar garyusersjhove/classes/edu/harvard/hul/ois/jhove/0000755000707400001440000000000011510702106017406 5ustar garyusersjhove/classes/edu/harvard/hul/ois/jhove/handler/0000755000707400001440000000000011510702110021016 5ustar garyusersjhove/classes/edu/harvard/hul/ois/jhove/handler/audit/0000755000707400001440000000000011510702106022131 5ustar garyusersjhove/classes/edu/harvard/hul/ois/jhove/handler/audit/AuditCount.java0000644000707400001440000000610510771562775025105 0ustar garyusers/********************************************************************** * Audit output handler * Copyright 2004 by the President and Fellows of Harvard College * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * USA **********************************************************************/ package edu.harvard.hul.ois.jhove.handler.audit; //import java.io.*; /** * Count object for the JHOVE Audit output handler. */ public class AuditCount { /****************************************************************** * PRIVATE INSTANCE FIELDS. ******************************************************************/ /** Number of files not processed. */ protected int _notProcessed; /** Number of valid files. */ protected int _valid; /** Number of well-formed files. */ protected int _wellFormed; /****************************************************************** * CLASS CONSTRUCTOR. ******************************************************************/ /** * Instantiate a AuditCount object. */ public AuditCount () { _notProcessed = 0; _valid = 0; _wellFormed = 0; } /****************************************************************** * PUBLIC INSTANCE METHODS. * * Accessor methods. ******************************************************************/ /** Returns the total number of files not processed. */ public int getNotProcessed () { return _notProcessed; } /** Returns the total number of valid or well-formed files. */ public int getTotal () { return _valid + _wellFormed; } /** Returns the total number of valid files. */ public int getValid () { return _valid; } /** Returns the total number of well-formed files. */ public int getWellFormed () { return _wellFormed; } /****************************************************************** * Mutator methods. ******************************************************************/ /** Sets the count of files that are not processed. */ public void setNotProcessed (int notProcessed) { _notProcessed = notProcessed; } /** Sets the count of valid files. */ public void setValid (int valid) { _valid = valid; } /** Sets the count of well-formed files. */ public void setWellFormed (int wellFormed) { _wellFormed = wellFormed; } } jhove/classes/edu/harvard/hul/ois/jhove/handler/audit/AuditState.java0000644000707400001440000000666610771562775025111 0ustar garyusers/********************************************************************** * Audit output handler * Copyright 2004 by the President and Fellows of Harvard College * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * USA **********************************************************************/ package edu.harvard.hul.ois.jhove.handler.audit; import java.io.*; /** * State object for the JHOVE Audit output handler. */ public class AuditState extends AuditCount implements Cloneable { /****************************************************************** * PROTECTED INSTANCE FIELDS. ******************************************************************/ /** Directory pathname. */ protected String _directory; /** Number of files not found. */ protected int _notFound; /****************************************************************** * CLASS CONSTRUCTOR. ******************************************************************/ /** * Instantiate a AuditState object. */ public AuditState (String directory) { super (); init (directory); } /** * Initializes to a specified directory and clears counters. */ protected void init (String directory) { try { File file = new File (directory); _directory = file.getCanonicalPath (); } catch (Exception e) { _directory = directory; } _notFound = 0; _valid = 0; _wellFormed = 0; } /****************************************************************** * PUBLIC INSTANCE METHODS. ******************************************************************/ /** * Creates and returns a copy of this object. */ public Object clone (String directory) throws CloneNotSupportedException { AuditState state = (AuditState) super.clone (); state.init (directory); return state; } /****************************************************************** * Accessor methods. ******************************************************************/ /** Returns the directory path. */ public String getDirectory () { return _directory; } /** Returns the number of files not found. */ public int getNotFound () { return _notFound; } /****************************************************************** * Mutator methods. ******************************************************************/ /** Sets the directory path. */ public void setDirectory (String directory) { try { File file = new File (directory); _directory = file.getCanonicalPath (); } catch (Exception e) { _directory = directory; } } /** Sets the count of files not found. */ public void setNotFound (int notFound) { _notFound = notFound; } } jhove/classes/edu/harvard/hul/ois/jhove/handler/audit/build.xml0000644000707400001440000000207611204567556024001 0ustar garyusers Audit output handler build file Jhove - JSTOR/Harvard Object Validation Environment Version 1.0 2004-12-09 Copyright 2004 by JSTOR and the President and Fellows of Harvard College jhove/classes/edu/harvard/hul/ois/jhove/handler/audit/package.html0000644000707400001440000000057710771562775024453 0ustar garyusers Contains the supporting classes for the JHOVE audit output handler.
jhove/classes/edu/harvard/hul/ois/jhove/handler/audit/AuditCount.class0000644000707400001440000000115011510702103025231 0ustar garyusers2     _notProcessedI_valid _wellFormed()VCodegetNotProcessed()IgetTotalgetValid getWellFormedsetNotProcessed(I)VsetValid setWellFormed   2edu/harvard/hul/ois/jhove/handler/audit/AuditCountjava/lang/Object!    **** *  **` * * * * *jhove/classes/edu/harvard/hul/ois/jhove/handler/audit/AuditState.class0000644000707400001440000000204711510702106025232 0ustar garyusers2: $ %& ' ( )* + , - ./012 _directoryLjava/lang/String; _notFoundI(Ljava/lang/String;)VCodeinit StackMapTable*clone&(Ljava/lang/String;)Ljava/lang/Object; Exceptions3 getDirectory()Ljava/lang/String; getNotFound()I setDirectory setNotFound(I)V 4  java/io/File  5 java/lang/Exception  6 78 92edu/harvard/hul/ois/jhove/handler/audit/AuditState2edu/harvard/hul/ois/jhove/handler/audit/AuditCountjava/lang/Cloneable$java/lang/CloneNotSupportedException()VgetCanonicalPath_valid _wellFormedjava/lang/Object()Ljava/lang/Object;!  **+K*Y+M*, M*+** * T* M,+,* *!<Y+M*, M*+T"#*jhove/classes/edu/harvard/hul/ois/jhove/handler/AuditHandler.java0000644000707400001440000003112610771562776024266 0ustar garyusers/********************************************************************** * Audit output handler * Copyright 2004 by the President and Fellows of Harvard College * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * USA **********************************************************************/ package edu.harvard.hul.ois.jhove.handler; import edu.harvard.hul.ois.jhove.*; import edu.harvard.hul.ois.jhove.handler.audit.*; import java.util.*; /** * JHOVE audit output handler, derived from the standard JHOVE XML * handler. It is expected that this class will be used as the parent for * other, more interesting output handlers. Subclasses should override the * implementations of the Impl methods, e.g., endDirectoryImpl (). * @see JHOVE * XML output handler */ public class AuditHandler extends XmlHandler { /****************************************************************** * PRIVATE CLASS FIELDS. ******************************************************************/ /** Audit output handler name. */ private static final String NAME = "Audit"; /** Audit output handler release ID. */ private static final String RELEASE = "1.1"; /** Audit output handler release date. */ private static final int [] DATE = {2005, 04, 22}; /** Audit output handler informative note. */ private static final String NOTE = "This output handler is derived from the standard JHOVE XML output " + "handler. It is intended to be used as the parent class for other, " + "more interesting handlers."; /** Audit output handler rights statement. */ private static final String RIGHTS = "Copyright 2004-2005 by the President and Fellows of Harvard College. " + "Released under the GNU LGPL license"; /***************************************************************** * PRIVATE INSTANCE FIELDS. ******************************************************************/ /** Home directory of the audit. */ protected String _home; /** Number of files processed by MIME type. */ protected Map _mimeType; /** State map. */ protected Map _stateMap; /** State stack. */ protected Stack _stateStack; /** Initial time. */ protected long _t0; /** Number of files audited. */ protected int _nAudit; /****************************************************************** * CLASS CONSTRUCTOR. ******************************************************************/ /** * Instantiate a AudiHandler object. */ public AuditHandler () { super (NAME, RELEASE, DATE, NOTE, RIGHTS); /* Define the standard output handler properties. */ _name = NAME; _release = RELEASE; Calendar calendar = new GregorianCalendar (); calendar.set (DATE[0], DATE[1]-1, DATE[2]); _date = calendar.getTime (); _note = NOTE; _rights = RIGHTS; /* Initialize the handler. */ _mimeType = new TreeMap (); _stateMap = new TreeMap (); _stateStack = new Stack (); _nAudit = 0; } /****************************************************************** * PUBLIC INSTANCE METHODS. ******************************************************************/ /** * Callback indicating a directory is finished being processed. * Prop the state stack and place the current directory file count * into the directory hash. */ public final void endDirectory () { AuditState state = (AuditState) _stateStack.pop (); _stateMap.put (state.getDirectory (), state); endDirectoryImpl (state); } /** * Local extension to the standard callback indicating a directory is * finished being processed. * @param state Audit handler state */ public void endDirectoryImpl (AuditState state) { } /** * Determine whether or not to process the file. * @param filepath File pathname */ public final boolean okToProcess (String filepath) { AuditState state = (AuditState) _stateStack.peek (); boolean ok = okToProcessImpl (filepath, state); if (!ok) { state.setNotProcessed (state.getNotProcessed () + 1); } return ok; } /** * Local extension to standard callback that determines whether or not * to process the file. * @param filepath File pathname * @param state Audit handler state */ public boolean okToProcessImpl (String filepath, AuditState state) { return true; } /** * Outputs the information contained in a RepInfo object * @param info Object representation information */ public void show (RepInfo info) { AuditState state = (AuditState) _stateStack.peek (); /* If the file is not found, then no module is assigned in the * RepInfo object. */ if (info.getModule () == null) { state.setNotFound (state.getNotFound () + 1); _writer.println (""); } else { String mime = info.getMimeType (); AuditCount count = (AuditCount) _mimeType.get (mime); if (count == null) { count = new AuditCount (); } int valid = info.getValid (); if (valid == RepInfo.TRUE) { state.setValid (state.getValid () + 1); count.setValid (count.getValid () + 1); } else { state.setWellFormed (state.getWellFormed () + 1); count.setWellFormed (count.getWellFormed () + 1); } _mimeType.put (mime, count); } showImpl (info, state); } /** * Local extension to the standard callback that outputs the * information contained in a RepInfo object * @param info Object representation information * @param state Audit handler state */ public void showImpl (RepInfo info, AuditState state) { String status = null; String mime = info.getMimeType (); if (mime != null) { if (info.getWellFormed () == RepInfo.TRUE) { if (info.getValid () == RepInfo.TRUE) { status = "valid"; } else { status = "well-formed"; } } else { status = "not well-formed"; } } else { status = "not found"; } /* Retrieve the MD5 checksum, if available. */ String md5 = null; List list = info.getChecksum (); int len = list.size (); for (int i=0; i 0 || state.getNotFound () > 0) { _stateMap.put (state.getDirectory (), state); } showFooterImpl (state); // super.showFooter (); _writer.println (""); _writer.println (""); /* Update the elapsed time. */ long dt = (System.currentTimeMillis () - _t0 + 999) / 1000; long ss = dt % 60; long dm = dt / 60; long mm = dm % 60; long hh = dm / 60; _writer.println (""); _writer.flush (); } /** * Local extension to the standard callback that does the final output. * This should be in a suitable format for * including multiple files between the header and the footer, and * the XML of the header and footer must balance out. * @param state Audit handler state */ public void showFooterImpl (AuditState state) { if (_nAudit > 0) { String margin = getIndent (_level--); _writer.println (margin + elementEnd ("audit")); } super.showFooter (); } /** * Do the initial output. This should be in a suitable format for * including multiple files between the header and the footer, and * the XML of the header and footer must balance out. */ public void showHeader () { /* Initialize the handler. */ _mimeType = new TreeMap (); _stateMap = new TreeMap (); _stateStack = new Stack (); _nAudit = 0; _t0 = System.currentTimeMillis (); /* Instantiate a state object and initialize with the values * of the global configuration file. */ AuditState state = showHeaderImpl ("."); _stateStack.push (state); _home = state.getDirectory (); } /** * Local extension to the standard callback that does the initial output. * This should be in a suitable format for including multiple files * between the header and the footer, and the XML of the header and footer * must balance out. * @param directory Current directory filepath */ public AuditState showHeaderImpl (String directory) { super.showHeader (); return new AuditState (directory); } /** * Callback indicating a new directory is being processed. * * Additional state information can be added to the AuditState object * in the showHeaderImpl() method before it is pushed onto the stack. */ public void startDirectory (String directory) { try { AuditState state = (AuditState) ((AuditState) _stateStack.peek ()).clone (directory); startDirectoryImpl (state); _stateStack.push (state); } catch (CloneNotSupportedException e) { e.printStackTrace (System.err); System.exit (-1); } } /** * Local extension to the standard callback indicating a new directory * is being processed. * @param state Audit handler state */ public void startDirectoryImpl (AuditState state) { } } jhove/classes/edu/harvard/hul/ois/jhove/handler/TextHandler.java0000644000707400001440000024003411266077451024133 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003-2004 by JSTOR and the President and Fellows of Harvard College * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * USA **********************************************************************/ package edu.harvard.hul.ois.jhove.handler; import edu.harvard.hul.ois.jhove.*; import java.text.*; import java.util.*; /** * OutputHandler for plain text output. */ public class TextHandler extends HandlerBase { /****************************************************************** * PRIVATE CLASS FIELDS. ******************************************************************/ private static final String NAME = "TEXT"; private static final String RELEASE = "1.5"; private static final int [] DATE = {2009, 10, 14}; private static final String NOTE = "This is the default JHOVE output " + "handler"; private static final String RIGHTS = "Copyright 2003-2009 by JSTOR and " + "the President and Fellows of Harvard College. " + "Released under the terms of the GNU Lesser General Public License."; private NumberFormat _format; /****************************************************************** * PRIVATE INSTANCE FIELDS. ******************************************************************/ /* Sample rate. */ private double _sampleRate; /****************************************************************** * CLASS CONSTRUCTOR. ******************************************************************/ /** * Creates a TextHandler. */ public TextHandler () { super (NAME, RELEASE, DATE, NOTE, RIGHTS); Agent agent = new Agent ("Harvard University Library", AgentType.EDUCATIONAL); agent.setAddress ("Office for Information Systems, " + "90 Mt. Auburn St., " + "Cambridge, MA 02138"); agent.setTelephone ("+1 (617) 495-3724"); agent.setEmail("jhove-support@hulmail.harvard.edu"); _vendor = agent; _format = NumberFormat.getInstance (); _format.setGroupingUsed (false); _format.setMinimumFractionDigits (0); } /****************************************************************** * PUBLIC INSTANCE METHODS. ******************************************************************/ /** * Outputs minimal information about the application */ public void show () { String margin = getIndent (++_level); _level--; } /** * Outputs detailed information about the application, * including configuration, available modules and handlers, * etc. */ public void show (App app) { String margin = getIndent (++_level); _writer.println (margin + "App:"); _writer.println (margin + " API: " + _je.getRelease () + ", " + HandlerBase.date.format (_je.getDate ())); String configFile = _je.getConfigFile (); if (configFile != null) { _writer.println (margin + " Configuration: " + configFile ); } String s = _je.getSaxClass (); if (s != null) { _writer.println (margin + " SAXparser: " + s ); } s = _je.getJhoveHome (); if (s != null) { _writer.println (margin + " JhoveHome: " + s); } s = _je.getEncoding (); if (s != null) { _writer.println (margin + " Encoding: " + s); } s = _je.getTempDirectory (); if (s != null) { _writer.println (margin + " TempDirectory: " + s); } _writer.println (margin + " BufferSize: " + _je.getBufferSize ()); Iterator iter = _je.getModuleMap ().keySet ().iterator (); while (iter.hasNext ()) { Module module = _je.getModule ((String) iter.next ()); _writer.println (margin + " Module: " + module.getName () + " " + module.getRelease ()); } iter = _je.getHandlerMap ().keySet ().iterator (); while (iter.hasNext ()) { OutputHandler handler = _je.getHandler ((String) iter.next ()); _writer.println (margin + " OutputHandler: " + handler.getName () + " " + handler.getRelease ()); } _writer.println (margin + " Usage: " + app.getUsage ()); _writer.println (margin + " Rights: " + app.getRights ()); _level--; } /** * Outputs information about the OutputHandler specified * in the parameter */ public void show (OutputHandler handler) { String margin = getIndent (++_level); _writer.println(margin + "Handler: " + handler.getName ()); _writer.println (margin + " Release: " + handler.getRelease ()); _writer.println (margin + " Date: " + HandlerBase.date.format (handler.getDate ())); List list = handler.getSpecification (); int n = list.size (); for (int i=0; i 0) { _writer.print (margin + " Format: " + ss[0]); for (int i=1; i 0) { _writer.print (margin + " MIMEtype: " + ss[0]); for (int i=1; i -1) { _writer.println (margin + " Size: " + size); } String s = info.getFormat (); if (s != null) { _writer.println (margin + " Format: " + s); } s = info.getVersion (); if (s != null) { _writer.println (margin + " Version: " + s); } if (!_je.getSignatureFlag ()) { _writer.print (margin + " Status: "); switch (info.getWellFormed ()) { case RepInfo.TRUE: s = "Well-Formed"; break; case RepInfo.FALSE: s = "Not well-formed"; break; default: s = "Unknown"; break; } if (info.getWellFormed () == RepInfo.TRUE) { switch (info.getValid ()) { case RepInfo.TRUE: s += " and valid"; break; case RepInfo.FALSE: s += ", but not valid"; break; // case UNDETERMINED: add nothing } } _writer.println (s); } else { // If we aren't checking signatures, we still need to say something. _writer.print (margin + " Status: "); switch (info.getWellFormed ()) { case RepInfo.TRUE: s = "Well-Formed"; break; default: s = "Not well-formed"; break; } _writer.println (s); } List list = info.getSigMatch(); int n = list.size (); if (n > 0) { _writer.println (margin + " SignatureMatches:"); for (int i = 0; i < n; i++) { _writer.println (margin + " " + (String) list.get (i)); } } list = info.getMessage (); n = list.size (); for (int i=0; i 0) { _writer.print (margin + " Profile: " + (String) list.get (0)); for (int i=1; i -1) { _writer.println (margin + " Offset: " + offset); } _level--; } private void showSignature (Signature signature) { String margin = getIndent (++_level); String sigValue; if (signature.isStringValue ()) { sigValue = signature.getValueString (); } else { sigValue = signature.getValueHexString (); } _writer.println (margin + signature.getType ().toString () + ": " + sigValue); if (signature.getType ().equals (SignatureType.MAGIC)) { if (((InternalSignature) signature).hasFixedOffset ()) { _writer.println (margin + " Offset: " + ((InternalSignature) signature).getOffset ()); } } String note = signature.getNote (); if (note != null) { _writer.println (margin + " Note: " + note); } String use = signature.getUse ().toString (); if (use != null) { _writer.println (margin + " Use: " + use); } _level--; } /* showProperty may be called recursively. */ private void showProperty (Property property, String key, String margin) { PropertyArity arity = property.getArity (); if (key == null) { _writer.print (margin + " "); } else { _writer.print (margin + " " + key + ": "); } if (arity.equals (PropertyArity.SCALAR)) { showScalarProperty (property, margin); } else if (arity.equals (PropertyArity.LIST)) { showListProperty (property, margin); } else if (arity.equals (PropertyArity.MAP)) { showMapProperty (property, margin); } else if (arity.equals (PropertyArity.SET)) { showSetProperty (property, margin); } else if (arity.equals (PropertyArity.ARRAY)) { showArrayProperty (property, margin); } else { _writer.println (); } } private void showScalarProperty (Property property, String margin) { PropertyType type = property.getType (); if (PropertyType.PROPERTY.equals (type)) { _writer.println (); Property prop = (Property) property.getValue (); showProperty (prop, prop.getName (), margin + " "); //_writer.println (); // Does this improve things? } else if (PropertyType.NISOIMAGEMETADATA.equals (type)) { showNisoImageMetadata ((NisoImageMetadata) property.getValue (), margin + " ", _je.getShowRawFlag ()); } else if (PropertyType.AESAUDIOMETADATA.equals (type)) { showAESAudioMetadata ((AESAudioMetadata) property.getValue (), margin + " ", _je.getShowRawFlag ()); } else if (PropertyType.TEXTMDMETADATA.equals(type)) { showTextMDMetadata((TextMDMetadata) property.getValue(), margin + " ", _je.getShowRawFlag ()); } else { _writer.println (property.getValue ().toString ()); } } private void showListProperty (Property property, String margin) { PropertyType type = property.getType (); boolean valueIsProperty = PropertyType.PROPERTY.equals (type); boolean valueIsNiso = PropertyType.NISOIMAGEMETADATA.equals (type); boolean valueIsTextMD = PropertyType.TEXTMDMETADATA.equals(type); List list = (List) property.getValue (); int n = list.size (); int i; if (n > 0) { // Put a blank line after the name of the property list. if (valueIsProperty) { _writer.println (); } for (i = 0; i < n; i++) { if (valueIsProperty) { Property pval = (Property) list.get (i); showProperty (pval, pval.getName (), margin + " "); } else if (valueIsNiso) { showNisoImageMetadata ((NisoImageMetadata) list.get (i), margin + " ", _je.getShowRawFlag ()); } else if (valueIsTextMD) { showTextMDMetadata( (TextMDMetadata) list.get (i), margin + " ", _je.getShowRawFlag ()); } else { Object val = list.get (i); if (i == 0) { _writer.print (val); } else { _writer.print (", " + val); } } } } if (!valueIsProperty || n == 0) { _writer.println (); } } private void showMapProperty (Property property, String margin) { /* Map output looks like key : mapkey1 / mapval1, mapkey2 / mapval2, ... */ PropertyType type = property.getType (); boolean valueIsProperty = PropertyType.PROPERTY.equals (type); boolean valueIsNiso = PropertyType.NISOIMAGEMETADATA.equals (type); boolean valueIsTextMD = PropertyType.TEXTMDMETADATA.equals(type); Map propmap = (Map) property.getValue (); Set keys = propmap.keySet(); Iterator propiter = keys.iterator(); while (propiter.hasNext ()) { Object propkey = propiter.next(); Object val = propmap.get(propkey); if (valueIsProperty) { Property pval = (Property) val; showProperty (pval, pval.getName (), margin + " "); String propkeyStr = propkey.toString (); if (!(pval.getName ().equals(propkeyStr ))) { _writer.println (" Key: " + propkeyStr); } } else if (valueIsNiso) { showNisoImageMetadata ((NisoImageMetadata) val, margin + " ", _je.getShowRawFlag ()); } else if (valueIsTextMD) { showTextMDMetadata ((TextMDMetadata) val, margin + " ", _je.getShowRawFlag ()); } else { _writer.println (" " + val.toString ()); _writer.println (" Key: " + propkey.toString ()); } } } private void showSetProperty (Property property, String margin) { PropertyType type = property.getType (); boolean valueIsProperty = PropertyType.PROPERTY.equals (type); boolean valueIsNiso = PropertyType.NISOIMAGEMETADATA.equals (type); boolean valueIsTextMD = PropertyType.TEXTMDMETADATA.equals(type); Set propset = (Set) property.getValue (); Iterator propiter = propset.iterator (); boolean first = true; while (propiter.hasNext ()) { Object val = propiter.next (); if (valueIsProperty) { Property pval = (Property) val; showProperty (pval, pval.getName (), margin + " "); } else if (valueIsNiso) { showNisoImageMetadata ((NisoImageMetadata) val, margin + " ", _je.getShowRawFlag ()); } else if (valueIsTextMD) { showTextMDMetadata ((TextMDMetadata) val, margin + " ", _je.getShowRawFlag ()); } else { if (first) { _writer.print (val.toString ()); first = false; } else { _writer.print (", " + val.toString ()); } } } _writer.println (); } private void showArrayProperty (Property property, String margin) { boolean[] boolArray = null; byte[] byteArray = null; char[] charArray = null; java.util.Date[] dateArray = null; double[] doubleArray = null; float[] floatArray = null; int[] intArray = null; long[] longArray = null; Object[] objArray = null; Property[] propArray = null; short[] shortArray = null; String[] stringArray = null; Rational[] rationalArray = null; NisoImageMetadata[] nisoArray = null; TextMDMetadata[] textMDArray = null; int n = 0; PropertyType propType = property.getType(); if (PropertyType.BOOLEAN.equals (propType)) { boolArray = (boolean []) property.getValue (); n = boolArray.length; } else if (PropertyType.BYTE.equals (propType)) { byteArray = (byte []) property.getValue (); n = byteArray.length; } else if (PropertyType.CHARACTER.equals (propType)) { charArray = (char []) property.getValue (); n = charArray.length; } else if (PropertyType.DATE.equals (propType)) { dateArray = (java.util.Date []) property.getValue (); n = dateArray.length; } else if (PropertyType.DOUBLE.equals (propType)) { doubleArray = (double []) property.getValue (); n = doubleArray.length; } else if (PropertyType.FLOAT.equals (propType)) { floatArray = (float []) property.getValue (); n = floatArray.length; } else if (PropertyType.INTEGER.equals (propType)) { intArray = (int []) property.getValue (); n = intArray.length; } else if (PropertyType.LONG.equals (propType)) { longArray = (long []) property.getValue (); n = longArray.length; } else if (PropertyType.OBJECT.equals (propType)) { objArray = (Object []) property.getValue (); n = objArray.length; } else if (PropertyType.SHORT.equals (propType)) { shortArray = (short []) property.getValue (); n = shortArray.length; } else if (PropertyType.STRING.equals (propType)) { stringArray = (String []) property.getValue (); n = stringArray.length; } else if (PropertyType.RATIONAL.equals (propType)) { rationalArray = (Rational []) property.getValue (); n = rationalArray.length; } else if (PropertyType.PROPERTY.equals (propType)) { propArray = (Property []) property.getValue (); n = propArray.length; } else if (PropertyType.NISOIMAGEMETADATA.equals (propType)) { nisoArray = (NisoImageMetadata []) property.getValue (); n = nisoArray.length; } else if (PropertyType.TEXTMDMETADATA.equals(propType)) { textMDArray = (TextMDMetadata []) property.getValue (); n = textMDArray.length; } for (int i = 0; i < n; i++) { String elem; if (PropertyType.BOOLEAN.equals (propType)) { elem = String.valueOf (boolArray[i]); } else if (PropertyType.BYTE.equals (propType)) { elem = String.valueOf (byteArray[i]); } else if (PropertyType.CHARACTER.equals (propType)) { elem = String.valueOf (charArray[i]); } else if (PropertyType.DATE.equals (propType)) { elem = dateArray[i].toString(); } else if (PropertyType.DOUBLE.equals (propType)) { elem = String.valueOf (doubleArray[i]); } else if (PropertyType.FLOAT.equals (propType)) { elem = String.valueOf (floatArray[i]); } else if (PropertyType.INTEGER.equals (propType)) { elem = String.valueOf (intArray[i]); } else if (PropertyType.LONG.equals (propType)) { elem = String.valueOf (longArray[i]); } else if (PropertyType.OBJECT.equals (propType)) { elem = objArray[i].toString(); } else if (PropertyType.SHORT.equals (propType)) { elem = String.valueOf (shortArray[i]); } else if (PropertyType.STRING.equals (propType)) { elem = stringArray[i]; } else if (PropertyType.RATIONAL.equals (propType)) { elem = rationalArray[i].toString (); } else if (PropertyType.NISOIMAGEMETADATA.equals (propType)) { if (i == 0) { _writer.println (); } NisoImageMetadata niso = nisoArray[i]; showNisoImageMetadata (niso, margin + " ", _je.getShowRawFlag ()); continue; } else if (PropertyType.TEXTMDMETADATA.equals (propType)) { if (i == 0) { _writer.println (); } showTextMDMetadata (textMDArray[i], margin + " ", _je.getShowRawFlag ()); continue; } else if (PropertyType.PROPERTY.equals (propType)) { if (i == 0) { _writer.println (); } Property pval = propArray[i]; showProperty (pval, pval.getName (), margin + " "); continue; } else elem = ""; if (i == 0) { _writer.print (elem); } else { _writer.print (", " + elem); } } if (propType != PropertyType.PROPERTY && propType != PropertyType.NISOIMAGEMETADATA) { _writer.println (); } } /* Output the textMD metadata, which is its own special * kind of property. */ private void showTextMDMetadata (TextMDMetadata textMD, String margin, boolean rawOutput) { String margn2 = margin + " "; String margn3 = margn2 + " "; _writer.println (); _writer.println (margn2 + "Character_info:"); String s = textMD.getCharset (); if (s != null) { _writer.println (margn3 + "Charset: " + s); } if ((s = textMD.getByte_orderString ()) != null) { _writer.println (margn3 + "Byte_order: " + s); } if ((s = textMD.getByte_size ()) != null) { _writer.println (margn3 + "Byte_size: " + s); } if ((s = textMD.getCharacter_size ()) != null) { _writer.println (margn3 + "Character_size: " + s); } if ((s = textMD.getLinebreakString ()) != null) { _writer.println (margn3 + "Linebreak: " + s); } if ((s = textMD.getLanguage ()) != null) { _writer.println (margn2 + "Language: " + s); } if ((s = textMD.getMarkup_basis ()) != null) { _writer.println (margn2 + "Markup_basis: " + s); } if ((s = textMD.getMarkup_basis_version ()) != null) { _writer.println (margn2 + "Markup_basis_version: " + s); } if ((s = textMD.getMarkup_language ()) != null) { _writer.println (margn2 + "Markup_language: " + s); } if ((s = textMD.getMarkup_language_version ()) != null) { _writer.println (margn2 + "Markup_language_version: " + s); } } /* Output the AES audio metadata, which is its own special * kind of property. */ private void showAESAudioMetadata (AESAudioMetadata aes, String margin, boolean rawOutput) { String margn2 = margin + " "; String margn3 = margn2 + " "; String margn4 = margn3 + " "; String margn5 = margn4 + " "; _sampleRate = aes.getSampleRate (); _writer.println (); String s = aes.getAnalogDigitalFlag(); if (s != null) { _writer.println (margn2 + "AnalogDigitalFlag: " + s); } s = aes.getSchemaVersion (); if (s != null) { _writer.println (margn2 + "SchemaVersion: " + s); } s = aes.getFormat (); if (s != null) { _writer.println (margn2 + "Format: " + s); } s = aes.getSpecificationVersion (); if (s != null) { _writer.println (margn2 + "SpecificationVersion: " + s); } s = aes.getAppSpecificData(); if (s != null) { _writer.println (margn2 + "AppSpecificData: " + s); } s = aes.getAudioDataEncoding (); if (s != null) { _writer.println (margn2 + "AudioDataEncoding: " + s); } int in = aes.getByteOrder (); if (in != AESAudioMetadata.NULL) { _writer.println (margn2 + "ByteOrder: " + (in == AESAudioMetadata.BIG_ENDIAN ? "BIG_ENDIAN" : "LITTLE_ENDIAN")); } long lin = aes.getFirstSampleOffset (); if (lin != AESAudioMetadata.NULL) { _writer.println (margn2 + "FirstSampleOffset: " + Long.toString (lin)); } String[] use = aes.getUse (); if (use != null) { _writer.println (margn2 + "Use:"); _writer.println (margn3 + "UseType: " + use[0]); _writer.println (margn3 + "OtherType: " + use[1]); } s = aes.getPrimaryIdentifier(); if (s != null) { String t= aes.getPrimaryIdentifierType (); _writer.println (margn2 + "PrimaryIdentifier: " + s); if (t != null) { _writer.println (margn3 + "IdentifierType: " + t); } } List facelist = aes.getFaceList (); if (!facelist.isEmpty ()) { // Add the face information, which is mostly filler. AESAudioMetadata.Face f = (AESAudioMetadata.Face) facelist.get(0); _writer.println (margn2 + "Face: "); _writer.println (margn3 + "TimeLine: "); AESAudioMetadata.TimeDesc startTime = f.getStartTime(); if (startTime != null) { writeAESTimeRange (margn3, startTime, f.getDuration()); } int nchan = aes.getNumChannels (); if (nchan != AESAudioMetadata.NULL) { _writer.println (margn4 + "NumChannels: " + Integer.toString (nchan)); } String[] locs = aes.getMapLocations (); for (int ch = 0; ch < nchan; ch++) { // write a stream description for each channel _writer.println (margn4 + "Stream:"); _writer.println (margn5 + "ChannelNum: " + Integer.toString (ch)); _writer.println (margn5 + "ChannelAssignment: " + locs[ch]); } } // In the general case, a FormatList can contain multiple // FormatRegions. This doesn't happen with any of the current // modules; if it's needed in the future, simply set up an // iteration loop on formatList. List flist = aes.getFormatList (); if (!flist.isEmpty ()) { AESAudioMetadata.FormatRegion rgn = (AESAudioMetadata.FormatRegion) flist.get(0); int bitDepth = rgn.getBitDepth (); double sampleRate = rgn.getSampleRate (); int wordSize = rgn.getWordSize (); String[] bitRed = rgn.getBitrateReduction (); // Build a FormatRegion subtree if at least one piece of data // that goes into it is present. if (bitDepth != AESAudioMetadata.NULL || sampleRate != AESAudioMetadata.NILL || wordSize != AESAudioMetadata.NULL) { _writer.println (margn2 + "FormatList:"); _writer.println (margn3 + "FormatRegion:"); if (bitDepth != AESAudioMetadata.NULL) { _writer.println (margn4 + "BitDepth: " + Integer.toString (bitDepth)); } if (sampleRate != AESAudioMetadata.NILL) { _writer.println (margn4 + "SampleRate: " + Double.toString (sampleRate)); } if (wordSize != AESAudioMetadata.NULL) { _writer.println (margn4 + "WordSize: " + Integer.toString (wordSize)); } if (bitRed != null) { _writer.println (margn4 + "BitrateReduction"); _writer.println (margn5 + "CodecName: " + bitRed[0]); _writer.println (margn5 + "codecNameVersion: " + bitRed[1]); _writer.println (margn5 + "codecCreatorApplication: " + bitRed[2]); _writer.println (margn5 + "codecCreatorApplicationVersion: " + bitRed[3]); _writer.println (margn5 + "codecQuality: " + bitRed[4]); _writer.println (margn5 + "dataRate: " + bitRed[5]); _writer.println (margn5 + "dataRateMode: " + bitRed[6]); } } } } /* start must be non-null, but duration may be null */ private void writeAESTimeRange (String baseIndent, AESAudioMetadata.TimeDesc start, AESAudioMetadata.TimeDesc duration) { final String margn1 = baseIndent + " "; final String margn2 = margn1 + " "; final String margn3 = margn2 + " "; _writer.println (margn1 + "StartTime:"); _writer.println (margn2 + "FrameCount: 30"); _writer.println (margn2 + "TimeBase: 1000"); _writer.println (margn2 + "VideoField: FIELD_1"); _writer.println (margn2 + "CountingMode: NTSC_NON_DROP_FRAME"); _writer.println (margn2 + "Hours: " + Integer.toString (start.getHours ())); _writer.println (margn2 + "Minutes: " + Integer.toString (start.getMinutes ())); _writer.println (margn2 + "Seconds: " + Integer.toString (start.getSeconds ())); _writer.println (margn2 + "Frames: " + Integer.toString (start.getFrames ())); _writer.println (margn2 + "Samples: "); double sr = start.getSampleRate (); if (sr == 1.0) { sr = _sampleRate; } _writer.println (margn3 + "SampleRate: S" + Integer.toString ((int) sr)); _writer.println (margn3 + "NumberOfSamples: " + Integer.toString (start.getSamples ())); _writer.println (margn2 + "FilmFraming: NOT_APPLICABLE"); _writer.println (margn3 + "Type: ntscFilmFramingType"); if (duration != null) { _writer.println (margn1 + "Duration:"); _writer.println (margn2 + "FrameCount: 30"); _writer.println (margn2 + "TimeBase: 1000"); _writer.println (margn2 + "VideoField: FIELD_1"); _writer.println (margn2 + "CountingMode: NTSC_NON_DROP_FRAME"); _writer.println (margn2 + "Hours: " + Integer.toString (duration.getHours ())); _writer.println (margn2 + "Minutes: " + Integer.toString (duration.getMinutes ())); _writer.println (margn2 + "Seconds: " + Integer.toString (duration.getSeconds ())); _writer.println (margn2 + "Frames: " + Integer.toString (duration.getFrames ())); _writer.println (margn2 + "Samples: "); sr = duration.getSampleRate (); if (sr == 1.0) { sr = _sampleRate; } _writer.println (margn3 + "SampleRate: S" + Integer.toString ((int) sr)); _writer.println (margn3 + "NumberOfSamples: " + Integer.toString (duration.getSamples ())); _writer.println (margn2 + "FilmFraming: NOT_APPLICABLE"); _writer.println (margn3 + "Type: ntscFilmFramingType"); } } /** * Display the NISO image metadata formatted according to * the MIX schema. The schema which is used may be 0.2 or 1.0, * depending on the module parameters. * @param niso NISO image metadata */ protected void showNisoImageMetadata (NisoImageMetadata niso, String margin, boolean rawOutput) { if ("0.2".equals (_je.getMixVersion())) { showNisoImageMetadata02 (niso, margin, rawOutput); } else { showNisoImageMetadata10 (niso, margin, rawOutput); } } /* Output the Niso image metadata, which is its own special * kind of property. This provides a text approximation to MIX 0.2. */ private void showNisoImageMetadata02 (NisoImageMetadata niso, String margin, boolean rawOutput) { String margn2 = margin + " "; _writer.println (); String s = niso.getMimeType (); if (s != null) { _writer.println (margn2 + "MIMEType: " + s); } if ((s = niso.getByteOrder ()) != null) { _writer.println (margn2 + "ByteOrder: " + s); } int n = niso.getCompressionScheme (); if (n != NisoImageMetadata.NULL) { _writer.println (margn2 + "CompressionScheme: " + addIntegerValue (n, NisoImageMetadata.COMPRESSION_SCHEME, NisoImageMetadata.COMPRESSION_SCHEME_INDEX, rawOutput)); } if ((n = niso.getCompressionLevel ()) != NisoImageMetadata.NULL) { _writer.println (margn2 + "CompressionLevel: " + n); } if ((n = niso.getColorSpace ()) != NisoImageMetadata.NULL) { _writer.println (margn2 + "ColorSpace: " + addIntegerValue (n, NisoImageMetadata.COLORSPACE, NisoImageMetadata.COLORSPACE_INDEX, rawOutput)); } if ((s = niso.getProfileName ()) != null) { _writer.println (margn2 + "ProfileName: " + s); } if ((s = niso.getProfileURL ()) != null) { _writer.println (margn2 + "ProfileURL: " + s); } int [] iarray = niso.getYCbCrSubSampling (); if (iarray != null) { _writer.print (margn2 + "YCbCrSubSampling: " + iarray[0]); for (int i=1; i yres ? xres : yres); _writer.println (margn2 + "MaximumOpticalResolution: " + Double.toString (res)); } if ((s = niso.getScanningSoftware ()) != null) { _writer.println (margn2 + "ScanningSoftware: " + s); } if ((s = niso.getScanningSoftwareVersionNo ()) != null) { _writer.println (margn2 + "ScanningSoftwareVersionNo: " + s); } if ((s = niso.getDigitalCameraManufacturer ()) != null) { _writer.println (margn2 + "DigitalCameraManufacturer: " + s); } if ((s = niso.getDigitalCameraModel ()) != null) { _writer.println (margn2 + "DigitalCameraModel: " + s); } if ((d = niso.getFNumber ()) != NisoImageMetadata.NILL) { _writer.println (margn2 + "FNumber: " + d); } if ((d = niso.getExposureTime ()) != NisoImageMetadata.NILL) { _writer.println (margn2 + "ExposureTime: " + d); } if ((d = niso.getBrightness ()) != NisoImageMetadata.NILL) { _writer.println (margn2 + "BrightnessValue: " + d); } if ((d = niso.getExposureBias ()) != NisoImageMetadata.NILL) { _writer.println (margn2 + "ExposureBiasValue: " + d); } double [] darray = niso.getSubjectDistance (); if (darray != null) { _writer.print (margn2 + "SubjectDistance: " + darray[0]); for (int i=1; i -1) { s = labels[n]; } else { outOfRange = true; } } if (rawOutput || outOfRange) { s = Integer.toString (value); } return s; } private String addRationalValue (Rational r, boolean rawOutput) { String s = null; if (!rawOutput) { s = _format.format (r.toDouble ()); } else { s = r.toString (); } return s; } } jhove/classes/edu/harvard/hul/ois/jhove/handler/XmlHandler.java0000644000707400001440000052674511266077376023775 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003-2009 by JSTOR and the President and Fellows of Harvard College * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * USA **********************************************************************/ package edu.harvard.hul.ois.jhove.handler; import edu.harvard.hul.ois.jhove.*; import java.util.*; /** * OutputHandler for XML output. * * @see Schema * for JHOVE XML output */ public class XmlHandler extends edu.harvard.hul.ois.jhove.HandlerBase { /****************************************************************** * PRIVATE CLASS FIELDS. ******************************************************************/ /** Handler name. */ private static final String NAME = "XML"; /** Handler release identifier. */ private static final String RELEASE = "1.6"; /** Handler release date. */ private static final int [] DATE = {2009, 10, 14}; /** Handler informative note. */ private static final String NOTE = "This output handler is defined by the XML Schema " + "http://hul.harvard.edu/ois/xml/xsd/jhove/jhove.xsd"; /** Handler rights statement. */ private static final String RIGHTS = "Copyright 2003-2007 by JSTOR and the President and Fellows of " + "Harvard College. " + "Released under the GNU Lesser General Public License."; /** Localized line separator character. */ private final static String EOL = System.getProperty ("line.separator"); /** Schema version. */ private static final String SCHEMA_VERSION = "1.6"; /****************************************************************** * PRIVATE INSTANCE FIELDS. ******************************************************************/ /* Sample rate. */ private double _sampleRate; /****************************************************************** * CLASS CONSTRUCTOR. ******************************************************************/ /** * Creates an XmlHandler. */ public XmlHandler () { super (NAME, RELEASE, DATE, NOTE, RIGHTS); Agent agent = new Agent ("Harvard University Library", AgentType.EDUCATIONAL); agent.setAddress ("Office for Information Systems, " + "90 Mt. Auburn St., " + "Cambridge, MA 02138"); agent.setTelephone ("+1 (617) 495-3724"); agent.setEmail("jhove-support@hulmail.harvard.edu"); _vendor = agent; } /** Constructor for use by subclasses. */ public XmlHandler (String name, String release, int [] date, String note, String rights) { super (name, release, date, note, rights); Agent agent = new Agent ("Harvard University Library", AgentType.EDUCATIONAL); agent.setAddress ("Office for Information Systems, " + "90 Mt. Auburn St., " + "Cambridge, MA 02138"); agent.setTelephone ("+1 (617) 495-3724"); agent.setEmail("jhove-support@hulmail.harvard.edu"); _vendor = agent; } /****************************************************************** * PUBLIC INSTANCE METHODS. ******************************************************************/ /** * Outputs minimal information about the application */ public void show () { String margin = getIndent (++_level); _level--; } /** * Outputs detailed information about the application, * including configuration, available modules and handlers, * etc. */ public void show (App app) { String margin = getIndent (++_level); String margn2 = margin + " "; String margn3 = margn2 + " "; _writer.println (margin + elementStart ("app")); String [][] attrs = { {"date", date.format (_je.getDate ())} }; _writer.println (margn2 + element ("api", attrs, _je.getRelease ())); String configFile = _je.getConfigFile (); if (configFile != null) { _writer.println (margn2 + element ("configuration", configFile)); } String s = _je.getSaxClass (); if (s != null ) { _writer.println (margn2 + element ("saxParser", s)); } s = _je.getJhoveHome (); if (s != null ) { _writer.println (margn2 + element ("jhoveHome", s)); } s = _je.getEncoding (); if (s != null ) { _writer.println (margn2 + element ("encoding", s)); } s = _je.getTempDirectory (); if (s != null ) { _writer.println (margn2 + element ("tempDirectory", s)); } _writer.println (margn2 + element ("bufferSize", Integer.toString (_je.getBufferSize ()))); _writer.println (margn2 + elementStart ("modules")); Iterator iter = _je.getModuleMap ().keySet ().iterator (); while (iter.hasNext ()) { Module module = _je.getModule ((String) iter.next ()); String [][] attr2 = { {"release", module.getRelease ()} }; _writer.println (margn3 + element ("module", attr2, module.getName ())); } _writer.println (margn2 + elementEnd ("modules")); _writer.println (margn2 + elementStart ("outputHandlers")); iter = _je.getHandlerMap ().keySet ().iterator (); while (iter.hasNext ()) { OutputHandler handler = _je.getHandler ((String) iter.next ()); String [][] attr2 = { {"release", handler.getRelease ()} }; _writer.println (margn3 + element ("outputHandler", attr2, handler.getName ())); } _writer.println (margn2 + elementEnd ("outputHandlers")); _writer.println (margn2 + element ("usage", app.getUsage ())); _writer.println (margn2 + element ("rights", app.getRights ())); _writer.println (margin + elementEnd ("app")); _level--; } /** * Outputs information about the OutputHandler specified * in the parameter */ public void show (OutputHandler handler) { String margin = getIndent (++_level); String margn2 = margin + " "; _writer.println (margin + elementStart ("handler")); _writer.println (margn2 + element ("name", handler.getName ())); _writer.println (margn2 + element ("release", handler.getRelease ())); _writer.println (margn2 + element ("date", date.format (handler.getDate ()))); List list = handler.getSpecification (); int n = list.size (); if (n > 0) { _writer.println (margn2 + elementStart ("specifications")); ++_level; for (int i=0; i 0) { _writer.println (margn2 + elementStart ("formats")); for (int i=0; i 0) { _writer.println (margn2 + elementStart ("mimeTypes")); for (int i=0; i 0) { _writer.println (margn2 + elementStart ("signatures")); ++_level; for (int i=0; i 0) { _writer.println (margn2 + elementStart ("specifications")); ++_level; for (int i=0; i -1) { _writer.println (margn2 + element ("size", Long.toString (size))); } String s = info.getFormat (); if (s != null) { _writer.println (margn2 + element ("format", s)); } s = info.getVersion (); if (s != null) { _writer.println (margn2 + element ("version", s)); } String wfStr; if (!_je.getSignatureFlag ()) { switch (info.getWellFormed ()) { case RepInfo.TRUE: wfStr = "Well-Formed"; break; case RepInfo.FALSE: wfStr = "Not well-formed"; break; default: wfStr = "Unknown"; break; } // If it's well-formed, append validity information if (info.getWellFormed () == RepInfo.TRUE) { switch (info.getValid ()) { case RepInfo.TRUE: wfStr += " and valid"; break; case RepInfo.FALSE: wfStr += ", but not valid"; break; // case UNDETERMINED: add nothing } } _writer.println (margn2 + element ("status", wfStr)); } else { // If we aren't checking signatures, we still need to say something. switch (info.getWellFormed ()) { case RepInfo.TRUE: wfStr = "Well-Formed"; break; default: wfStr = "Not well-formed"; break; } _writer.println (margn2 + element ("status", wfStr)); } List list = info.getSigMatch(); int n = list.size (); if (n > 0) { _writer.println (margn2 + elementStart ("sigMatch")); _level++; for (int i = 0; i < n; i++) { _writer.println (margn2 + element ("module", (String) list.get (i))); } _level--; _writer.println (margn2 + elementEnd ("sigMatch")); } list = info.getMessage (); n = list.size (); if (n > 0) { _writer.println (margn2 + elementStart ("messages")); _level++; for (int i=0; i 0) { _writer.println (margn2 + elementStart ("profiles")); for (int i=0; i 0) { _writer.println (margn2 + elementStart ("properties")); Iterator iter = map.keySet ().iterator (); while (iter.hasNext ()) { String key = (String) iter.next (); Property property = info.getProperty (key); showProperty (property); } _writer.println (margn2 + elementEnd ("properties")); } } list = info.getChecksum (); n = list.size (); if (n > 0) { _writer.println (margn2 + elementStart ("checksums")); _level++; for (int i=0; i 0) { _writer.println (margn2 + elementStart ("authors")); ++_level; for (int i=0; i 0) { ++_level; _writer.println (margn2 + elementStart ("publishers")); for (int i=0; i 0) { _writer.println (margn2 + elementStart ("identifiers")); ++_level; for (int i=0; i -1) { attrs[1] [1] = Long.toString (offset); hasAttr = true; } if (message instanceof ErrorMessage) { attrs[2] [1] = "error"; hasAttr = true; } else if (message instanceof InfoMessage) { attrs[2] [1] = "info"; hasAttr = true; } if (hasAttr) { _writer.println (margin + element ("message", attrs, message.getMessage ())); } else { _writer.println (margin + element ("message", message.getMessage ())); } _level--; } protected void showSignature (Signature signature) { String margin = getIndent (++_level); String margin1 = margin + " "; String sigValue; _writer.println (margin + elementStart ("signature")); if (signature.isStringValue ()) { sigValue = signature.getValueString (); } else { sigValue = signature.getValueHexString (); } _writer.println (margin1 + element ("type", signature.getType ().toString ())); _writer.println (margin1 + element ("value", sigValue )); if (signature.getType ().equals (SignatureType.MAGIC)) { if (((InternalSignature) signature).hasFixedOffset ()) { _writer.println (margin1 + element ("offset", "0x" + Integer.toHexString (((InternalSignature) signature).getOffset ()))); } } String note = signature.getNote (); if (note != null) { _writer.println (margin1 + element ("note", note)); } String use = signature.getUse ().toString (); if (use != null) { _writer.println (margin1 + element ("use", use)); } _writer.println (margin + elementEnd ("signature")); _level--; } /* Do special conversions on values as needed. */ protected String valueToString(Object obj) { if (obj instanceof Date) { return toDateTime ((Date) obj); } else return obj.toString (); } protected void showProperty (Property property) { String margin = getIndent (++_level); String margn2 = margin + " "; String margn3 = margn2 + " "; String margn4 = margn3 + " "; PropertyArity arity = property.getArity (); PropertyType type = property.getType (); // If the property would generate an empty element, don't output it, // as this could result in a schema violation. if (isPropertyEmpty (property, arity)) return; boolean valueIsProperty = PropertyType.PROPERTY.equals(type); boolean valueIsNiso = PropertyType.NISOIMAGEMETADATA.equals(type); boolean valueIsAes = PropertyType.AESAUDIOMETADATA.equals(type); boolean valueIsTextMD = PropertyType.TEXTMDMETADATA.equals(type); String[][] propAttrs = new String[2][]; propAttrs[0] = new String[] { "arity", arity.toString () }; propAttrs[1] = new String[] { "type", type.toString () }; _writer.println (margn2 + elementStart ("property")); _writer.println (margn3 + element ("name", property.getName ())); _writer.println (margn3 + elementStart ("values", propAttrs)); if (arity.equals (PropertyArity.SCALAR)) { /* Just a single value */ if (valueIsProperty) { showProperty ((Property) property.getValue ()); } else if (valueIsNiso) { _writer.println (margn4 + elementStart ("value")); showNisoImageMetadata ((NisoImageMetadata)property.getValue()); _writer.println (margn4 + elementEnd ("value")); } else if (valueIsAes) { _writer.println (margn4 + elementStart ("value")); showAESAudioMetadata ((AESAudioMetadata)property.getValue()); _writer.println (margn4 + elementEnd ("value")); } else if (valueIsTextMD) { _writer.println (margn4 + elementStart ("value")); showTextMDMetadata ((TextMDMetadata)property.getValue()); _writer.println (margn4 + elementEnd ("value")); } else { _writer.println (margn4 + element ("value", property.getValue ().toString ())); } } else if (arity.equals (PropertyArity.LIST)) { List propList = (List) property.getValue (); ListIterator iter = propList.listIterator(); while (iter.hasNext ()) { Object val = iter.next(); if (valueIsProperty) { showProperty ((Property) val); } else if (valueIsNiso) { _writer.println (margn4 + elementStart ("value")); showNisoImageMetadata ((NisoImageMetadata)property.getValue()); _writer.println (margn4 + elementEnd ("value")); } else if (valueIsAes) { _writer.println (margn4 + elementStart ("value")); showAESAudioMetadata ((AESAudioMetadata)property.getValue()); _writer.println (margn4 + elementEnd ("value")); } else if (valueIsTextMD) { _writer.println (margn4 + elementStart ("value")); showTextMDMetadata ((TextMDMetadata)property.getValue()); _writer.println (margn4 + elementEnd ("value")); } else { _writer.println (margn4 + element ("value", valueToString (val))); } } } else if (arity.equals (PropertyArity.MAP)) { /* For a map, the key is the "key" attribute of its corresponding value */ Map propMap = (Map) property.getValue (); Iterator keyIter = propMap.keySet ().iterator (); while (keyIter.hasNext ()) { Object key = keyIter.next(); String keystr = key.toString (); Object val = propMap.get (key); String[][] attrs = new String[1][]; String[] keyAttr = new String[2]; keyAttr[0] = "key"; keyAttr[1] = keystr; attrs[0] = keyAttr; if (valueIsProperty) { Property pval = (Property) val; // If the key equals the property name, suppress the key if (pval.getName().equals (keystr)) { _writer.print (margn4 + elementStart ("value")); } else { _writer.print (margn4 + elementStart ("value", attrs)); } showProperty (pval); _writer.println (margn4 + elementEnd ("value")); } else if (valueIsNiso) { _writer.println (margn4 + elementStart ("value")); showNisoImageMetadata ((NisoImageMetadata) val); _writer.println (margn4 + elementEnd ("value")); } else if (valueIsAes) { _writer.println (margn4 + elementStart ("value")); showAESAudioMetadata ((AESAudioMetadata) val); _writer.println (margn4 + elementEnd ("value")); } else if (valueIsTextMD) { _writer.println (margn4 + elementStart ("value")); showTextMDMetadata ((TextMDMetadata) val); _writer.println (margn4 + elementEnd ("value")); } else { _writer.println (margn4 + element ("value", attrs, valueToString (val))); } } } else if (arity.equals (PropertyArity.SET)) { Set propSet = (Set) property.getValue (); Iterator iter = propSet.iterator(); while (iter.hasNext ()) { Object val = iter.next(); if (valueIsProperty) { showProperty ((Property) val); } else { _writer.println (margn4 + element ("value", valueToString (val))); } } } else if (arity.equals (PropertyArity.ARRAY)) { showArrayProperty (property, margn4); } _writer.println (margn3 + elementEnd ("values")); _writer.println (margn2 + elementEnd ("property")); --_level; } /** Checks if a property would produce an empty XML element, and * returns true if it would. */ private boolean isPropertyEmpty (Property property, PropertyArity arity) { try { if (arity.equals (PropertyArity.SET)) { Set propSet = (Set) property.getValue (); return (propSet.isEmpty()); } else if (arity.equals (PropertyArity.LIST)) { List propList = (List) property.getValue (); return (propList.isEmpty()); } else if (arity.equals (PropertyArity.MAP)) { Map propMap = (Map) property.getValue (); return (propMap.isEmpty()); } else if (arity.equals (PropertyArity.ARRAY)) { // Ack! Is there any easy way to do this? boolean[] boolArray = null; byte[] byteArray = null; char[] charArray = null; java.util.Date[] dateArray = null; double[] doubleArray = null; float[] floatArray = null; int[] intArray = null; long[] longArray = null; Object[] objArray = null; Property[] propArray = null; short[] shortArray = null; String[] stringArray = null; Rational[] rationalArray = null; NisoImageMetadata[] nisoArray = null; AESAudioMetadata[] aesArray = null; TextMDMetadata[] textMDArray = null; int n = 0; PropertyType propType = property.getType(); if (PropertyType.BOOLEAN.equals (propType)) { boolArray = (boolean []) property.getValue (); n = boolArray.length; } else if (PropertyType.BYTE.equals (propType)) { byteArray = (byte []) property.getValue (); n = byteArray.length; } else if (PropertyType.CHARACTER.equals (propType)) { charArray = (char []) property.getValue (); n = charArray.length; } else if (PropertyType.DATE.equals (propType)) { dateArray = (java.util.Date []) property.getValue (); n = dateArray.length; } else if (PropertyType.DOUBLE.equals (propType)) { doubleArray = (double []) property.getValue (); n = doubleArray.length; } else if (PropertyType.FLOAT.equals (propType)) { floatArray = (float []) property.getValue (); n = floatArray.length; } else if (PropertyType.INTEGER.equals (propType)) { intArray = (int []) property.getValue (); n = intArray.length; } else if (PropertyType.LONG.equals (propType)) { longArray = (long []) property.getValue (); n = longArray.length; } else if (PropertyType.OBJECT.equals (propType)) { objArray = (Object []) property.getValue (); n = objArray.length; } else if (PropertyType.SHORT.equals (propType)) { shortArray = (short []) property.getValue (); n = shortArray.length; } else if (PropertyType.STRING.equals (propType)) { stringArray = (String []) property.getValue (); n = stringArray.length; } else if (PropertyType.RATIONAL.equals (propType)) { rationalArray = (Rational []) property.getValue (); n = rationalArray.length; } else if (PropertyType.PROPERTY.equals (propType)) { propArray = (Property []) property.getValue (); n = propArray.length; } else if (PropertyType.NISOIMAGEMETADATA.equals (propType)) { nisoArray = (NisoImageMetadata []) property.getValue (); n = nisoArray.length; } else if (PropertyType.AESAUDIOMETADATA.equals (propType)) { aesArray = (AESAudioMetadata []) property.getValue (); n = aesArray.length; } else if (PropertyType.TEXTMDMETADATA.equals (propType)) { textMDArray = (TextMDMetadata []) property.getValue (); n = textMDArray.length; } return (n == 0); } else { return property.getValue ().toString ().length() == 0; } } catch (Exception e) { // If something goes seriously wrong, return true to punt the property return true; } } /* The array property has so many special cases of its own that we break it out of showProperty */ protected void showArrayProperty (Property property, String margin) { boolean[] boolArray = null; byte[] byteArray = null; char[] charArray = null; java.util.Date[] dateArray = null; double[] doubleArray = null; float[] floatArray = null; int[] intArray = null; long[] longArray = null; Object[] objArray = null; Property[] propArray = null; short[] shortArray = null; String[] stringArray = null; Rational[] rationalArray = null; NisoImageMetadata[] nisoArray = null; AESAudioMetadata[] aesArray = null; TextMDMetadata[] textMDArray = null; int n = 0; PropertyType propType = property.getType(); if (PropertyType.BOOLEAN.equals (propType)) { boolArray = (boolean []) property.getValue (); n = boolArray.length; } else if (PropertyType.BYTE.equals (propType)) { byteArray = (byte []) property.getValue (); n = byteArray.length; } else if (PropertyType.CHARACTER.equals (propType)) { charArray = (char []) property.getValue (); n = charArray.length; } else if (PropertyType.DATE.equals (propType)) { dateArray = (java.util.Date []) property.getValue (); n = dateArray.length; } else if (PropertyType.DOUBLE.equals (propType)) { doubleArray = (double []) property.getValue (); n = doubleArray.length; } else if (PropertyType.FLOAT.equals (propType)) { floatArray = (float []) property.getValue (); n = floatArray.length; } else if (PropertyType.INTEGER.equals (propType)) { intArray = (int []) property.getValue (); n = intArray.length; } else if (PropertyType.LONG.equals (propType)) { longArray = (long []) property.getValue (); n = longArray.length; } else if (PropertyType.OBJECT.equals (propType)) { objArray = (Object []) property.getValue (); n = objArray.length; } else if (PropertyType.SHORT.equals (propType)) { shortArray = (short []) property.getValue (); n = shortArray.length; } else if (PropertyType.STRING.equals (propType)) { stringArray = (String []) property.getValue (); n = stringArray.length; } else if (PropertyType.RATIONAL.equals (propType)) { rationalArray = (Rational []) property.getValue (); n = rationalArray.length; } else if (PropertyType.PROPERTY.equals (propType)) { propArray = (Property []) property.getValue (); n = propArray.length; } else if (PropertyType.NISOIMAGEMETADATA.equals (propType)) { nisoArray = (NisoImageMetadata []) property.getValue (); n = nisoArray.length; } else if (PropertyType.AESAUDIOMETADATA.equals (propType)) { aesArray = (AESAudioMetadata []) property.getValue (); n = aesArray.length; } else if (PropertyType.TEXTMDMETADATA.equals (propType)) { textMDArray = (TextMDMetadata []) property.getValue (); n = textMDArray.length; } for (int i = 0; i < n; i++) { String elem; if (PropertyType.BOOLEAN.equals (propType)) { elem = String.valueOf (boolArray[i]); } else if (PropertyType.BYTE.equals (propType)) { elem = String.valueOf (byteArray[i]); } else if (PropertyType.CHARACTER.equals (propType)) { elem = String.valueOf (charArray[i]); } else if (PropertyType.DATE.equals (propType)) { elem = dateArray[i].toString(); } else if (PropertyType.DOUBLE.equals (propType)) { elem = String.valueOf (doubleArray[i]); } else if (PropertyType.FLOAT.equals (propType)) { elem = String.valueOf (floatArray[i]); } else if (PropertyType.INTEGER.equals (propType)) { elem = String.valueOf (intArray[i]); } else if (PropertyType.LONG.equals (propType)) { elem = String.valueOf (longArray[i]); } else if (PropertyType.OBJECT.equals (propType)) { elem = valueToString (objArray[i]); } else if (PropertyType.SHORT.equals (propType)) { elem = String.valueOf (shortArray[i]); } else if (PropertyType.STRING.equals (propType)) { elem = stringArray[i]; } else if (PropertyType.RATIONAL.equals (propType)) { elem = rationalArray[i].toString (); } else if (PropertyType.PROPERTY.equals (propType)) { showProperty (propArray[i]); continue; } else if (PropertyType.NISOIMAGEMETADATA.equals (propType)) { showNisoImageMetadata (nisoArray[i]); continue; } else if (PropertyType.AESAUDIOMETADATA.equals (propType)) { showAESAudioMetadata (aesArray[i]); continue; } else if (PropertyType.TEXTMDMETADATA.equals (propType)) { showTextMDMetadata( textMDArray[i]); continue; } else elem = ""; _writer.println (margin + element ("value", elem)); } } /** * Display the text metadata formatted according to * the textMD schema (see http://www.loc.gov/standards/textMD). * @param textMD textMD text metadata */ protected void showTextMDMetadata (TextMDMetadata textMD) { String margin = getIndent (++_level); String margn2 = margin + " "; String margn3 = margn2 + " "; String [][] attrs = { {"xmlns:textmd", TextMDMetadata.NAMESPACE}, {"xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance"}, {"xsi:schemaLocation", TextMDMetadata.NAMESPACE + " " + TextMDMetadata.DEFAULT_LOCATION}, }; _writer.println (margin + elementStart ("textmd:textMD", attrs)); _writer.println (margn2 + elementStart("textmd:character_info")); _writer.println (margn3 + element("textmd:charset", textMD.getCharset())); _writer.println (margn3 + element("textmd:byte_order", textMD.getByte_orderString())); _writer.println (margn3 + element("textmd:byte_size", textMD.getByte_size())); if ("variable".equals(textMD.getCharacter_size())) { String [][] attrs1 = {{"encoding", textMD.getCharset() }}; _writer.println (margn3 + element("textmd:character_size", attrs1, "variable")); } else { _writer.println (margn3 + element("textmd:character_size", textMD.getCharacter_size())); } _writer.println (margn3 + element("textmd:linebreak", textMD.getLinebreakString())); _writer.println (margn2 + elementEnd("textmd:character_info")); if (textMD.getLanguage() != null && textMD.getLanguage().length() != 0) { _writer.println (margn2 + element("textmd:language", textMD.getLanguage())); } if (textMD.getMarkup_basis() != null && textMD.getMarkup_basis().length() != 0) { if (textMD.getMarkup_basis_version() != null) { String [][] attrs1 = {{"version", textMD.getMarkup_basis_version() }}; _writer.println (margn2 + element("textmd:markup_basis", attrs1, textMD.getMarkup_basis())); } else { _writer.println (margn2 + element("textmd:markup_basis", textMD.getMarkup_basis())); } } if (textMD.getMarkup_language() != null && textMD.getMarkup_language().length() != 0) { if (textMD.getMarkup_language_version() != null) { String [][] attrs1 = {{"version", textMD.getMarkup_language_version() }}; _writer.println (margn2 + element("textmd:markup_language", attrs1, textMD.getMarkup_language())); } else { _writer.println (margn2 + element("textmd:markup_language", textMD.getMarkup_language())); } } _writer.println (margin + elementEnd ("textmd:textMD")); _level--; } /** * Display the NISO image metadata formatted according to * the MIX schema. The schema which is used may be 0.2 or 1.0 or 2.0, * depending on the module parameters. * @param niso NISO image metadata */ protected void showNisoImageMetadata (NisoImageMetadata niso) { if ("0.2".equals (_je.getMixVersion())) { showNisoImageMetadata02 (niso); } else if ("1.0".equals (_je.getMixVersion())) { showNisoImageMetadata10 (niso); } else { showNisoImageMetadata20 (niso); } } /** * Display the NISO image metadata formatted according to * the MIX 0.2 schema. */ protected void showNisoImageMetadata02 (NisoImageMetadata niso) { String margin = getIndent (++_level); String [][] attrs = {{"xmlns:mix", "http://www.loc.gov/mix/"}, {"xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance"}, {"xsi:schemaLocation", "http://www.loc.gov/mix/ http://www.loc.gov/mix/mix02.xsd"}}; _writer.println (margin + elementStart ("mix:mix", attrs)); showNisoBasicImageParameters02 (niso, margin); showNisoImageCreation02 (niso, margin); showNisoImagingPerformanceAssessment02 (niso, margin); showNisoChangeHistory02 (niso, margin); _writer.println (margin + elementEnd ("mix:mix")); _level--; } /* The NISO Metadata output is split into multiple functions so that they're merely outrageously big rather than disgustingly big */ /* Top level element 1 of 4: BasicImageParameters */ protected void showNisoBasicImageParameters02 (NisoImageMetadata niso, String margin) { String margn2 = margin + " "; String margn3 = margn2 + " "; String margn4 = margn3 + " "; String margn5 = margn4 + " "; String margn6 = margn5 + " "; _writer.println (margn2 + elementStart ("mix:BasicImageParameters")); // Here things get rather deeply nested, and we want to be able // to back out if it turns out that we really have no content to // deliver. So rather than writing directly to the writer, we // write to a StringBuffer that may or may not get used. StringBuffer fBuf = new StringBuffer (margn3 + elementStart ("mix:Format") + EOL); boolean useFBuf = false; // set to true if some data show up String s = niso.getMimeType (); if (s != null) { fBuf.append (margn4 + element ("mix:MIMEType", s) + EOL); useFBuf = true; } if ((s = niso.getByteOrder ()) != null) { fBuf.append (margn4 + element ("mix:ByteOrder", s) + EOL); useFBuf = true; } int comp = niso.getCompressionScheme (); int level = niso.getCompressionLevel (); if (comp != NisoImageMetadata.NULL || level != NisoImageMetadata.NULL) { fBuf.append (margn4 + elementStart ("mix:Compression") + EOL); if (comp != NisoImageMetadata.NULL) { fBuf.append (margn5 + element ("mix:CompressionScheme", Integer.toString (comp)) + EOL); } if (level != NisoImageMetadata.NULL) { fBuf.append (margn5 + element ("mix:CompressionLevel", Integer.toString (level)) + EOL); } fBuf.append (margn4 + elementEnd ("mix:Compression") + EOL); useFBuf = true; } // Nest photometric interpretation tentative buffer in fBuf StringBuffer piBuf = new StringBuffer (margn4 + elementStart ("mix:PhotometricInterpretation") + EOL); boolean usePIBuf = false; int n = niso.getColorSpace (); if (n != NisoImageMetadata.NULL) { piBuf.append (margn5 + element ("mix:ColorSpace", Integer.toString(n)) + EOL); usePIBuf = true; } String s2= niso.getProfileURL (); if ((s = niso.getProfileName ()) != null || s2 != null) { piBuf.append (margn5 + elementStart ("mix:ICCProfile") + EOL); if (s != null) { piBuf.append (margn6 + element ("mix:ProfileName", s) + EOL); } if (s2!= null) { piBuf.append (margn6 + element ("mix:ProfileURL", s2) + EOL); } piBuf.append (margn5 + elementEnd ("mix:ICCProfile")); usePIBuf = true; } int [] iarray = niso.getYCbCrSubSampling (); if (iarray != null) { piBuf.append (margn5 + element ("mix:YCbCrSubSampling", integerArray (iarray)) + EOL); usePIBuf = true; } if ((n = niso.getYCbCrPositioning ()) != NisoImageMetadata.NULL) { piBuf.append (margn5 + element ("mix:YCbCrPositioning", Integer.toString (n)) + EOL); usePIBuf = true; } Rational [] rarray = niso.getYCbCrCoefficients (); if (rarray != null) { piBuf.append (margn5 + element ("mix:YCbCrCoefficients", rationalArray (rarray)) + EOL); usePIBuf = true; } if ((rarray = niso.getReferenceBlackWhite ()) != null) { piBuf.append (margn5 + element ("mix:ReferenceBlackWhite", rationalArray (rarray)) + EOL); usePIBuf = true; } piBuf.append (margn4 + elementEnd ("mix:PhotometricInterpretation") + EOL); if (usePIBuf) { fBuf.append (piBuf); useFBuf = true; } // Now a tentative buffer for the Segments element StringBuffer segBuf = new StringBuffer (margn4 + elementStart ("mix:Segments") + EOL); boolean useSegBuf = false; if ((n = niso.getSegmentType ()) != NisoImageMetadata.NULL) { segBuf.append (margn5 + element ("mix:SegmentType", Integer.toString (n)) + EOL); useSegBuf = true; } long [] larray = niso.getStripOffsets (); if (larray != null) { segBuf.append (margn5 + element ("mix:StripOffsets", longArray (larray)) + EOL); useSegBuf = true; } long ln = niso.getRowsPerStrip (); if (ln != NisoImageMetadata.NULL) { segBuf.append (margn5 + element ("mix:RowsPerStrip", Long.toString (ln)) + EOL); useSegBuf = true; } if ((larray = niso.getStripByteCounts ()) != null) { segBuf.append (margn5 + element ("mix:StripByteCounts", longArray (larray)) + EOL); useSegBuf = true; } if ((ln = niso.getTileWidth ()) != NisoImageMetadata.NULL) { segBuf.append (margn5 + element ("mix:TileWidth", Long.toString (ln)) + EOL); useSegBuf = true; } if ((ln = niso.getTileLength ()) != NisoImageMetadata.NULL) { segBuf.append (margn5 + element ("mix:TileLength", Long.toString (ln)) + EOL); useSegBuf = true; } if ((larray = niso.getTileOffsets ()) != null) { segBuf.append (margn5 + element ("mix:TileOffsets", longArray (larray)) + EOL); useSegBuf = true; } if ((larray = niso.getTileByteCounts ()) != null) { segBuf.append (margn5 + element ("mix:TileByteCounts", longArray (larray)) + EOL); useSegBuf = true; } segBuf.append (margn4 + elementEnd ("mix:Segments") + EOL); if (useSegBuf) { fBuf.append (segBuf); useFBuf = true; } if ((n = niso.getPlanarConfiguration ()) != NisoImageMetadata.NULL) { fBuf.append (margn4 + element ("mix:PlanarConfiguration", Integer.toString (n)) + EOL); } fBuf.append (margn3 + elementEnd ("mix:Format") + EOL); if (useFBuf) { _writer.print (fBuf.toString ()); } // Now a tentative buffer for the File element. It's actually // pretty safe that this will have some content, but I'd rather // be consistent. Besides, it's a good test of the pattern. StringBuffer fileBuf = new StringBuffer (margn3 + elementStart ("mix:File") + EOL); boolean useFileBuf = false; s = niso.getImageIdentifier (); if (s != null) { fileBuf.append (margn4 + element ("mix:ImageIdentifier", s) + EOL); useFileBuf = true; } ln = niso.getFileSize (); if (ln != NisoImageMetadata.NULL) { fileBuf.append (margn4 + element ("mix:FileSize", Long.toString (ln)) + EOL); useFileBuf = true; } n = niso.getChecksumMethod (); s = niso.getChecksumValue (); if (n != NisoImageMetadata.NULL || s != null) { fileBuf.append (margn4 + elementStart ("mix:Checksum") + EOL); if (n != NisoImageMetadata.NULL) { fileBuf.append (margn5 + element ("mix:ChecksumMethod", Integer.toString (n)) + EOL); } if (s != null) { fileBuf.append (margn5 + element ("mix:ChecksumValue", s) + EOL); } fileBuf.append (margn4 + elementEnd ("mix:Checksum") + EOL); useFileBuf = true; } n = niso.getOrientation (); if (n != NisoImageMetadata.NULL) { fileBuf.append (margn4 + element ("mix:Orientation", Integer.toString (n)) + EOL); useFileBuf = true; } n = niso.getDisplayOrientation (); if (n != NisoImageMetadata.NULL) { fileBuf.append (margn4 + element ("mix:DisplayOrientation", Integer.toString (n)) + EOL); useFileBuf = true; } ln = niso.getXTargetedDisplayAR (); long ln2 = niso.getYTargetedDisplayAR (); if (ln != NisoImageMetadata.NULL || ln2 != NisoImageMetadata.NULL) { fileBuf.append (margn4 + elementStart ("mix:TargetedDisplayAR") + EOL); if (ln != NisoImageMetadata.NULL) { fileBuf.append (margn5 + element ("mix:XTargetedDisplayAR", Long.toString (ln)) + EOL); } if (ln2 != NisoImageMetadata.NULL) { fileBuf.append (margn5 + element ("mix:YTargetedDisplayAR", Long.toString (ln2)) + EOL); } fileBuf.append (margn4 + elementEnd ("mix:TargetedDisplayAR") + EOL); useFileBuf = true; } fileBuf.append (margn3 + elementEnd ("mix:File") + EOL); if (useFileBuf) { _writer.print (fileBuf.toString ()); } _writer.println (margn2 + elementEnd ("mix:BasicImageParameters")); } /* Top level element 2 of 4: ImageCreation */ protected void showNisoImageCreation02 (NisoImageMetadata niso, String margin) { String margn2 = margin + " "; String margn3 = margn2 + " "; String margn4 = margn3 + " "; String margn5 = margn4 + " "; String margn6 = margn5 + " "; _writer.println (margn2 + elementStart ("mix:ImageCreation")); String s = niso.getSourceType (); if (s != null) { _writer.println (margn3 + element ("mix:SourceType", s)); } s = niso.getSourceID (); if (s != null) { _writer.println (margn3 + element ("mix:SourceID", s)); } s = niso.getImageProducer (); if (s != null) { _writer.println (margn3 + element ("mix:ImageProducer", s)); } StringBuffer hostBuf = new StringBuffer (margn3 + elementStart ("mix:Host") + EOL); boolean useHostBuf = false; s = niso.getHostComputer (); if (s != null) { hostBuf.append (margn4 + element ("mix:HostComputer", s) + EOL); useHostBuf = true; } s = niso.getOS (); if (s != null) { hostBuf.append (margn4 + element ("mix:OperatingSystem", s) + EOL); useHostBuf = true; } s = niso.getOSVersion (); if (s != null) { hostBuf.append (margn4 + element ("mix:OSVersion", s) + EOL); useHostBuf = true; } hostBuf.append (margn3 + elementEnd ("mix:Host") + EOL); if (useHostBuf) { _writer.print (hostBuf); } s = niso.getDeviceSource (); if (s != null) { _writer.println (margn3 + element ("mix:DeviceSource", s)); } // Here things get rather deeply nested, and we want to be able // to back out if it turns out that we really have no content to // deliver. So rather than writing directly to the writer, we // write to a StringBuffer that may or may not get used. StringBuffer sscBuf = new StringBuffer (margn3 + elementStart ("mix:ScanningSystemCapture") + EOL); boolean useSSCBuf = false; // set to true if we find interesting data. StringBuffer sshBuf = new StringBuffer (margn4 + elementStart ("mix:ScanningSystemHardware") + EOL); boolean useSSHBuf = false; s = niso.getScannerManufacturer(); if (s != null) { sshBuf.append (margn5 + element ("mix:ScannerManufacturer", s) + EOL); useSSHBuf = true; } s = niso.getScannerModelName (); String s1 = niso.getScannerModelNumber (); String s2 = niso.getScannerModelSerialNo (); if (s != null || s1 != null || s2 != null) { sshBuf.append (margn5 + elementStart ("mix:ScannerModel") + EOL); if (s != null) { sshBuf.append (margn6 + element ("mix:ScannerModelName", s) + EOL); useSSHBuf = true; } if (s1 != null) { sshBuf.append (margn6 + element ("mix:ScannerModelNumber", s1) + EOL); useSSHBuf = true; } if (s2 != null) { sshBuf.append (margn6 + element ("mix:ScannerModelSerialNo ", s2) + EOL); useSSHBuf = true; } sshBuf.append (margn5 + elementEnd ("mix:ScannerModel") + EOL); } sshBuf.append (margn4 + elementEnd ("mix:ScanningSystemHardware") + EOL); if (useSSHBuf) { // There's some ScanningSystemHardware content, and therefore some // ScanningSystemCapture content; keep the element. sscBuf.append (sshBuf); useSSCBuf = true; } // Build a tentative buffer for scanning system software StringBuffer sssBuf = new StringBuffer (margn4 + elementStart ("mix:ScanningSystemSoftware") + EOL); boolean useSSSBuf = false; s = niso.getScanningSoftware (); if (s != null) { sssBuf.append (margn5 + element ("mix:ScanningSoftware", s) + EOL); useSSSBuf = true; } s = niso.getScanningSoftwareVersionNo (); if (s != null) { sssBuf.append (margn5 + element ("mix:ScanningSoftwareVersionNo", s) + EOL); useSSSBuf = true; } sssBuf.append (margn4 + elementEnd ("mix:ScanningSystemSoftware") + EOL); if (useSSSBuf) { // There's some ScanningSystemSoftware content, and therefore some // ScanningSystemCapture content; keep the element. sscBuf.append (sssBuf); useSSCBuf = true; } // Build a tentative buffer for scanner capture settings StringBuffer scsBuf = new StringBuffer (margn4 + elementStart ("mix:ScannerCaptureSettings") + EOL); boolean useSCSBuf = false; double d = niso.getPixelSize (); if (d != NisoImageMetadata.NILL) { scsBuf.append (margn5 + element ("mix:PixelSize", Double.toString (d)) + EOL); useSCSBuf = true; } d = niso.getXPhysScanResolution (); double d1 = niso.getYPhysScanResolution (); if (d != NisoImageMetadata.NILL || d1 != NisoImageMetadata.NILL) { scsBuf.append (margn5 + elementStart ("mix:PhysScanResolution") + EOL); if (d != NisoImageMetadata.NILL) { scsBuf.append (margn6 + element ("mix:XphysScanResolution", Double.toString (d)) + EOL); } if (d1 != NisoImageMetadata.NILL) { scsBuf.append (margn6 + element ("mix:YphysScanResolution", Double.toString (d1)) + EOL); } scsBuf.append (margn5 + elementEnd ("mix:PhysScanResolution") + EOL); useSCSBuf = true; } scsBuf.append (margn4 + elementEnd ("mix:ScannerCaptureSettings") + EOL); if (useSCSBuf) { sscBuf.append (scsBuf); useSSCBuf = true; } sscBuf.append (margn3 + elementEnd ("mix:ScanningSystemCapture") + EOL); // Finally! Do we use any of this stuff we just went through? if (useSSCBuf) { _writer.print (sscBuf.toString ()); } // Same deal for digital camera capture; put the element in a tentative // StringBuffer and then decide if it's non-trivial. StringBuffer dccBuf = new StringBuffer (margn3 + elementStart ("mix:DigitalCameraCapture") + EOL); boolean useDCCBuf = false; s = niso.getDigitalCameraManufacturer (); if (s != null) { dccBuf.append (margn4 + element ("mix:DigitalCameraManufacturer", s) + EOL); useDCCBuf = true; } s = niso.getDigitalCameraModel (); if (s != null) { dccBuf.append (margn4 + element ("mix:DigitalCameraModel", s) + EOL); useDCCBuf = true; } dccBuf.append (margn3 + elementEnd ("mix:DigitalCameraCapture") + EOL); if (useDCCBuf) { _writer.print (dccBuf.toString ()); } // Same tentative buffer deal for camera capture settings. StringBuffer ccsBuf = new StringBuffer (margn3 + elementStart ("mix:CameraCaptureSettings") + EOL); boolean useCCSBuf = false; d = niso.getFNumber (); if (d != NisoImageMetadata.NILL) { ccsBuf.append (margn4 + element ("mix:FNumber", Double.toString (d)) + EOL); useCCSBuf = true; } d = niso.getExposureTime (); if (d != NisoImageMetadata.NILL) { ccsBuf.append (margn4 + element ("mix:ExposureTime", Double.toString (d)) + EOL); useCCSBuf = true; } d = niso.getBrightness (); if (d != NisoImageMetadata.NILL) { ccsBuf.append (margn4 + element ("mix:Brightness", Double.toString (d)) + EOL); useCCSBuf = true; } d = niso.getExposureBias (); if (d != NisoImageMetadata.NILL) { ccsBuf.append (margn4 + element ("mix:ExposureBias", Double.toString (d)) + EOL); useCCSBuf = true; } double [] darray = niso.getSubjectDistance (); if (darray != null) { ccsBuf.append (margn4 + element ("mix:SubjectDistance", doubleArray (darray)) + EOL); useCCSBuf = true; } int n = niso.getMeteringMode (); if (n != NisoImageMetadata.NULL) { ccsBuf.append (margn4 + element ("mix:MeteringMode", Integer.toString (n)) + EOL); useCCSBuf = true; } n = niso.getSceneIlluminant (); if (n != NisoImageMetadata.NULL) { ccsBuf.append (margn4 + element ("mix:SceneIlluminant", Integer.toString (n)) + EOL); useCCSBuf = true; } d = niso.getColorTemp (); if (d != NisoImageMetadata.NILL) { ccsBuf.append (margn4 + element ("mix:ColorTemp", Double.toString (d)) + EOL); useCCSBuf = true; } d = niso.getFocalLength (); if (d != NisoImageMetadata.NILL) { ccsBuf.append (margn4 + element ("mix:FocalLength", Double.toString (d)) + EOL); useCCSBuf = true; } n = niso.getFlash (); if (n != NisoImageMetadata.NULL) { ccsBuf.append (margn4 + element ("mix:Flash", Integer.toString (n)) + EOL); useCCSBuf = true; } d = niso.getFlashEnergy (); if (d != NisoImageMetadata.NILL) { ccsBuf.append (margn4 + element ("mix:FlashEnergy", Double.toString (d)) + EOL); useCCSBuf = true; } n = niso.getFlashReturn (); if (n != NisoImageMetadata.NULL) { ccsBuf.append (margn4 + element ("mix:FlashReturn", Integer.toString (n)) + EOL); useCCSBuf = true; } n = niso.getBackLight (); if (n != NisoImageMetadata.NULL) { ccsBuf.append (margn4 + element ("mix:BackLight", Integer.toString (n)) + EOL); useCCSBuf = true; } d = niso.getExposureIndex (); if (d != NisoImageMetadata.NILL) { ccsBuf.append (margn4 + element ("mix:ExposureIndex", Double.toString (d)) + EOL); useCCSBuf = true; } n = niso.getAutoFocus (); if (n != NisoImageMetadata.NULL) { ccsBuf.append (margn4 + element ("mix:AutoFocus", Integer.toString (n)) + EOL); useCCSBuf = true; } d = niso.getXPrintAspectRatio (); d1 = niso.getYPrintAspectRatio (); if (d != NisoImageMetadata.NILL || d1 != NisoImageMetadata.NILL) { ccsBuf.append (margn4 + elementStart ("mix:PrintAspectRatio") + EOL); if (d != NisoImageMetadata.NILL) { ccsBuf.append (margn5 + element ("mix:XPrintAspectRatio", Double.toString (d)) + EOL); } if (d1 != NisoImageMetadata.NILL) { ccsBuf.append (margn5 + element ("mix:YPrintAspectRatio", Double.toString (d1)) + EOL); ccsBuf.append (margn4 + elementEnd ("mix:PrintAspectRatio") + EOL); useCCSBuf = true; } } ccsBuf.append (margn3 + elementEnd ("mix:CameraCaptureSettings") + EOL); if (useCCSBuf) { _writer.print (ccsBuf.toString ()); } // Finally we get a relative breather without having to check nested // elements. n = niso.getSensor (); if (n != NisoImageMetadata.NULL) { _writer.println (margn3 + element ("mix:Sensor", Integer.toString (n))); } s = niso.getDateTimeCreated (); if (s != null) { _writer.println (margn3 + element ("mix:DateTimeCreated", s)); } s = niso.getMethodology (); if (s != null) { _writer.println (margn3 + element ("mix:Methodology", s)); } _writer.println (margn2 + elementEnd ("mix:ImageCreation")); } /* Top level element 3 of 4: ImagingPerformanceAssessment */ protected void showNisoImagingPerformanceAssessment02 (NisoImageMetadata niso, String margin) { String margn2 = margin + " "; String margn3 = margn2 + " "; String margn4 = margn3 + " "; String margn5 = margn4 + " "; String margn6 = margn5 + " "; String margn7 = margn6 + " "; StringBuffer ipaBuf = new StringBuffer (margn3 + elementStart ("mix:ImagingPerformanceAssessment") + EOL); boolean useIPABuf = false; // set to true if we find interesting data. StringBuffer smBuf = new StringBuffer (margn4 + elementStart ("mix:SpatialMetrics") + EOL); boolean useSMBuf = false; int n = niso.getSamplingFrequencyPlane (); if (n != NisoImageMetadata.NULL) { smBuf.append (margn5 + element ("mix:SamplingFrequencyPlane", Integer.toString (n)) + EOL); useSMBuf = true; } n = niso.getSamplingFrequencyUnit (); if (n != NisoImageMetadata.NULL) { smBuf.append (margn5 + element ("mix:SamplingFrequencyUnit", Integer.toString (n)) + EOL); useSMBuf = true; } Rational r = niso.getXSamplingFrequency (); if (r != null) { smBuf.append (margn5 + element ("mix:XSamplingFrequency", Long.toString (r.toLong())) + EOL); useSMBuf = true; } r = niso.getYSamplingFrequency (); if (r != null) { smBuf.append (margn5 + element ("mix:YSamplingFrequency", Long.toString (r.toLong())) + EOL); useSMBuf = true; } long ln = niso.getImageWidth (); if (ln != NisoImageMetadata.NULL) { smBuf.append (margn5 + element ("mix:ImageWidth", Long.toString (ln)) + EOL); useSMBuf = true; } ln = niso.getImageLength (); if (ln != NisoImageMetadata.NULL) { smBuf.append (margn5 + element ("mix:ImageLength", Long.toString (ln)) + EOL); useSMBuf = true; } double d = niso.getSourceXDimension (); n = niso.getSourceXDimensionUnit (); if (d != NisoImageMetadata.NILL || n != NisoImageMetadata.NULL) { smBuf.append (margn5 + elementStart ("mix:Source_X") + EOL); if (d != NisoImageMetadata.NILL) { smBuf.append (margn6 + element ("mix:Source_Xdimension", Double.toString (d)) + EOL); } if (n != NisoImageMetadata.NULL) { smBuf.append (margn6 + element ("mix:Source_XdimensionUnit", Integer.toString (n)) + EOL); } smBuf.append (margn5 + elementEnd ("mix:Source_X") + EOL); useSMBuf = true; } d = niso.getSourceYDimension (); n = niso.getSourceYDimensionUnit (); if (d != NisoImageMetadata.NILL || n != NisoImageMetadata.NULL) { smBuf.append (margn4 + elementStart ("mix:Source_Y") + EOL); if (d != NisoImageMetadata.NILL) { smBuf.append (margn5 + element ("mix:Source_Ydimension", Double.toString (d)) + EOL); } if (n != NisoImageMetadata.NULL) { smBuf.append (margn5 + element ("mix:Source_YdimensionUnit", Integer.toString (n)) + EOL); } smBuf.append (margn4 + elementEnd ("mix:Source_Y") + EOL); useSMBuf = true; } smBuf.append (margn3 + elementEnd ("mix:SpatialMetrics") + EOL); if (useSMBuf) { ipaBuf.append (smBuf); useIPABuf = true; } // Now a tentative buffer for the Energetics element StringBuffer eBuf = new StringBuffer (margn3 + elementStart ("mix:Energetics") + EOL); boolean useEBuf = false; int [] iarray = niso.getBitsPerSample (); if (iarray != null) { eBuf.append (margn4 + element ("mix:BitsPerSample", integerArray (iarray, ',')) + EOL); useEBuf = true; } n = niso.getSamplesPerPixel (); if (n != NisoImageMetadata.NULL) { eBuf.append (margn4 + element ("mix:SamplesPerPixel", Integer.toString (n)) + EOL); useEBuf = true; } iarray = niso.getExtraSamples (); if (iarray != null) { // extraSamples can only be an integer, so the best we can do is // snag the first value from the array. It also must be limited to // 0, 1, 2, or 3. n = iarray[0]; if (n >= 0 && n <= 3) { eBuf.append (margn4 + element ("mix:ExtraSamples", Integer.toString (n)) + EOL); useEBuf = true; } // This is what we'd really like to do, but it violates the schema. // Keep this code around in the event the schema is fixed in the future. // eBuf.append (margn4 + element ("mix:ExtraSamples", // integerArray (iarray)) + EOL); // useEBuf = true; } // Tentative buffer for colormap element within Energetics StringBuffer cmBuf = new StringBuffer (margn4 + elementStart ("mix:Colormap") + EOL); boolean useCMBuf = false; String s = niso.getColormapReference (); if (s != null) { cmBuf.append (margn5 + element ("mix:Reference", s) + EOL); useCMBuf = true; } iarray = niso.getColormapRedValue (); if (iarray != null) { cmBuf.append (margn5 + elementStart ("mix:Wrap")); // If the red array is there, assume the others are too, and are // equal in length. int[] bcarray = niso.getColormapBitCodeValue (); int[] garray = niso.getColormapGreenValue (); int[] barray = niso.getColormapBlueValue (); try { for (int i = 0; i < iarray.length; i++) { cmBuf.append (margn6 + elementStart ("mix:Color") + EOL); n = bcarray[i]; if (n != NisoImageMetadata.NULL) { cmBuf.append (margn7 + element ("mix:BitCodeValue", Integer.toString (n)) + EOL); } n = iarray[i]; if (n != NisoImageMetadata.NULL) { cmBuf.append (margn7 + element ("mix:RedValue", Integer.toString (n)) + EOL); } n = garray[i]; if (n != NisoImageMetadata.NULL) { cmBuf.append (margn7 + element ("mix:GreenValue", Integer.toString (n)) + EOL); } n = barray[i]; if (n != NisoImageMetadata.NULL) { cmBuf.append (margn7 + element ("mix:BlueValue", Integer.toString (n)) + EOL); } cmBuf.append (margn6 + elementEnd ("mix:Color") + EOL); } } catch (Exception e) { // If the assumption mentioned above is wrong, // we'll get broken XML, but at least won't die here. } cmBuf.append (margn5 + elementEnd ("mix:Wrap") + EOL); useCMBuf = true; } cmBuf.append (margn4 + elementEnd ("mix:Colormap")); if (useCMBuf) { eBuf.append (cmBuf); useEBuf = true; } iarray = niso.getGrayResponseCurve (); n = niso.getGrayResponseUnit (); if (iarray != null || n != NisoImageMetadata.NULL) { eBuf.append (margn4 + elementStart("mix:GrayResponse") + EOL); if (iarray != null) { eBuf.append (margn5 + element ("mix:GrayResponseCurve", integerArray (iarray)) + EOL); } if (n != NisoImageMetadata.NULL) { eBuf.append (margn5 + element ("mix:GrayResponseUnit", Integer.toString (n)) + EOL); } eBuf.append (margn4 + elementEnd("mix:GrayResponse") + EOL); useEBuf = true; } r = niso.getWhitePointXValue (); Rational r1 = niso.getWhitePointYValue (); if (r != null || r1 != null) { // These are specified in the scheme as CIExyType. All the // schema tells us about this type is that it's a string. eBuf.append (margn4 + elementStart("mix:WhitePoint") + EOL); if (r != null) { eBuf.append (margn5 + element ("mix:WhitePoint_Xvalue", r.toString ()) + EOL); } if (r1 != null) { eBuf.append (margn5 + element ("mix:WhitePoint_Yvalue", r1.toString ()) + EOL); } eBuf.append (margn4 + elementEnd("mix:WhitePoint") + EOL); useEBuf = true; } r = niso.getPrimaryChromaticitiesRedX (); // For simplicity, we check only the red x in deciding whether // to incorporate this element. A partial set of chromaticities // would be meaningless anyway. if (r != null) { eBuf.append (margn4 + elementStart("mix:PrimaryChromaticities") + EOL); eBuf.append (margn5 + element ("mix:PrimaryChromaticities_RedX", r.toString ()) + EOL); r = niso.getPrimaryChromaticitiesRedY (); if (r != null) { eBuf.append (margn5 + element ("mix:PrimaryChromaticities_RedY", r.toString ()) + EOL); } r = niso.getPrimaryChromaticitiesGreenX (); if (r != null) { eBuf.append (margn5 + element ("mix:PrimaryChromaticities_GreenX", r.toString ()) + EOL); } r = niso.getPrimaryChromaticitiesGreenY (); if (r != null) { eBuf.append (margn5 + element ("mix:PrimaryChromaticities_GreenY", r.toString ()) + EOL); } r = niso.getPrimaryChromaticitiesBlueX (); if (r != null) { eBuf.append (margn5 + element ("mix:PrimaryChromaticities_BlueX", r.toString ()) + EOL); } r = niso.getPrimaryChromaticitiesBlueY (); if (r != null) { eBuf.append (margn5 + element ("mix:PrimaryChromaticities_BlueY", r.toString ()) + EOL); } eBuf.append (margn4 + elementEnd("mix:PrimaryChromaticities") + EOL); useEBuf = true; } eBuf.append (margn3 + elementEnd ("mix:Energetics") + EOL); if (useEBuf) { ipaBuf.append (eBuf); useIPABuf = true; } // Another tentative buffer for TargetData StringBuffer tdBuf = new StringBuffer (margn3 + elementStart ("mix:TargetData") + EOL); boolean useTDBuf = false; n = niso.getTargetType (); if (n != NisoImageMetadata.NULL) { tdBuf.append (margn4 + element ("mix:TargetType", Integer.toString (n)) + EOL); useTDBuf = true; } // Nest a TargetID tentative buffer in the TargetData buffer StringBuffer tiBuf = new StringBuffer (margn4 + elementStart ("mix:TargetID") + EOL); boolean useTIBuf = false; s = niso.getTargetIDManufacturer (); if (s != null) { tiBuf.append (margn5 + element ("mix:TargetIDManufacturer", s) + EOL); useTIBuf = true; } s = niso.getTargetIDName (); if (s != null) { tiBuf.append (margn5 + element ("mix:TargetIDName", s) + EOL); useTIBuf = true; } s = niso.getTargetIDNo (); if (s != null) { tiBuf.append (margn5 + element ("mix:TargetIDNo", s) + EOL); useTIBuf = true; } s = niso.getTargetIDMedia (); if (s != null) { tiBuf.append (margn5 + element ("mix:TargetIDMedia", s) + EOL); useTIBuf = true; } tiBuf.append (margn4 + elementEnd ("mix:TargetID") + EOL); if (useTIBuf) { tdBuf.append (tiBuf); useTDBuf = true; } s = niso.getImageData (); if (s != null) { tdBuf.append (margn5 + element ("mix:ImageData", s) + EOL); useTDBuf = true; } s = niso.getPerformanceData (); if (s != null) { tdBuf.append (margn5 + element ("mix:PerformanceData", s) + EOL); useTDBuf = true; } s = niso.getProfiles (); if (s != null) { tdBuf.append (margn5 + element ("mix:Profiles", s) + EOL); useTDBuf = true; } tdBuf.append (margn3 + elementEnd ("mix:TargetData") + EOL); if (useTDBuf) { ipaBuf.append (tdBuf); useIPABuf = true; } ipaBuf.append (margn2 + elementEnd ("mix:ImagingPerformanceAssessment") + EOL); if (useIPABuf) { _writer.print (ipaBuf.toString ()); } } /* Top level element 4 of 4: ChangeHistory */ protected void showNisoChangeHistory02 (NisoImageMetadata niso, String margin) { String margn2 = margin + " "; String margn3 = margn2 + " "; String margn4 = margn3 + " "; String margn5 = margn4 + " "; String margn6 = margn5 + " "; String margn7 = margn6 + " "; // Yet again, build elements in tentative buffers and throw them // away if they prove trivial. StringBuffer chBuf = new StringBuffer (margn2 + elementStart ("mix:ChangeHistory") + EOL); boolean useCHBuf = false; StringBuffer ipBuf = new StringBuffer (margn3 + elementStart ("mix:ImageProcessing") + EOL); boolean useIPBuf = false; String s = niso.getDateTimeProcessed (); if (s != null) { ipBuf.append (margn4 + element ("DateTimeProcessed", s) + EOL); useIPBuf = true; } s = niso.getSourceData (); if (s != null) { ipBuf.append (margn4 + element ("SourceData", s) + EOL); useIPBuf = true; } s = niso.getProcessingAgency (); if (s != null) { ipBuf.append (margn4 + element ("ProcessingAgency", s) + EOL); useIPBuf = true; } // Third-level nesting of tentative buffer! StringBuffer psBuf = new StringBuffer (margn4 + elementStart ("ProcessingSoftware") + EOL); boolean usePSBuf = false; s = niso.getProcessingSoftwareName (); if (s != null) { psBuf.append (margn5 + element ("ProcessingSoftwareName", s) + EOL); usePSBuf = true; } s = niso.getProcessingSoftwareVersion (); if (s != null) { psBuf.append (margn5 + element ("ProcessingSoftwareVersion", s) + EOL); usePSBuf = true; } psBuf.append (margn4 + elementEnd ("ProcessingSoftware") + EOL); if (usePSBuf) { ipBuf.append (psBuf); useIPBuf = true; } // Hard to say, but I think the intent is that there be // one ProcessingActions element per processing action. String [] sarray = niso.getProcessingActions (); if (sarray != null) { for (int i = 0; i < sarray.length; i++) { ipBuf.append (margn4 + element ("ProcessingActions", sarray[i]) + EOL); } useIPBuf = true; } ipBuf.append (margn3 + elementEnd ("mix:ImageProcessing") + EOL); if (useIPBuf) { chBuf.append (ipBuf); useCHBuf = true; } chBuf.append (margn2 + elementEnd ("mix:ChangeHistory") + EOL); if (useCHBuf) { _writer.print (chBuf.toString ()); } } /** * Display the NISO image metadata formatted according to * the MIX 1.0 schema. */ protected void showNisoImageMetadata10 (NisoImageMetadata niso) { String margin = getIndent (++_level); String [][] attrs = {{"xmlns:mix", "http://www.loc.gov/mix/v10"}, {"xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance"}, {"xsi:schemaLocation", "http://www.loc.gov/mix/v10 http://www.loc.gov/standards/mix/mix10/mix10.xsd"}}; _writer.println (margin + elementStart ("mix:mix", attrs)); showNisoBasicDigitalObjectInformation10 (niso, margin); showNisoBasicImageInformation10 (niso, margin); showNisoImageCaptureMetadata10 (niso, margin); showNisoImageAssessmentMetadata10 (niso, margin); showChangeHistory10 (niso, margin); _writer.println (margin + elementEnd ("mix:mix")); _level--; } /* The NISO Metadata output (1.0 now) is split into multiple functions so that they're merely outrageously big rather than disgustingly big */ /* Top level element 1 of 5: BasicDigitalObjectInformation */ protected void showNisoBasicDigitalObjectInformation10 (NisoImageMetadata niso, String margin) { String margn2 = margin + " "; String margn3 = margn2 + " "; String margn4 = margn3 + " "; String margn5 = margn4 + " "; _writer.println (margn2 + elementStart ("mix:BasicDigitalObjectInformation")); StringBuffer objIDBuf = new StringBuffer (margn3 + elementStart ("mix:ObjectIdentifier") + EOL); boolean useObjIDBuf = false; objIDBuf.append (margn4 + element ("mix:objectIdentifierType", "JHOVE") + EOL); String s = niso.getImageIdentifier (); if (s != null) { objIDBuf.append (margn4 + element ("mix:objectIdentifierValue", s) + EOL); useObjIDBuf = true; } objIDBuf.append (margn3 + elementEnd ("mix:ObjectIdentifier") + EOL); if (useObjIDBuf) { _writer.print (objIDBuf.toString ()); } long ln = niso.getFileSize(); if (ln != NisoImageMetadata.NULL) { _writer.print (margn4 + element ("mix:fileSize", Long.toString (ln)) + EOL); } // TODO we really should output a FormatDesignation, but it isn't in the NisoImageMetadata class yet. // TODO If we output a FormatDesignation, we should output a FormatRegistry. if ((s = niso.getByteOrder ()) != null) { // Convert strings to MIX 1.0 form if (s.startsWith ("big")) { s = "big_endian"; } else if (s.startsWith ("little")) { s = "little_endian"; } _writer.print (margn4 + element ("mix:byteOrder", s) + EOL); } int comp = niso.getCompressionScheme (); int level = niso.getCompressionLevel (); if (comp != NisoImageMetadata.NULL || level != NisoImageMetadata.NULL) { _writer.print (margn4 + elementStart ("mix:Compression") + EOL); if (comp != NisoImageMetadata.NULL) { _writer.print (margn5 + element ("mix:compressionScheme", Integer.toString (comp)) + EOL); } // TODO it isn't clear how to get from compression level to compression ratio _writer.print (margn4 + elementEnd ("mix:Compression") + EOL); } int n = niso.getChecksumMethod (); s = niso.getChecksumValue (); if (n != NisoImageMetadata.NULL || s != null) { _writer.print (margn4 + elementStart ("mix:Fixity") + EOL); if (n != NisoImageMetadata.NULL) { _writer.print (margn5 + element ("mix:messageDigestAlgorithm", Integer.toString (n)) + EOL); } if (s != null) { _writer.print (margn5 + element ("mix:messageDigest", s) + EOL); } _writer.println (margn4 + elementEnd ("mix:Fixity")); } _writer.println (margn3 + elementEnd ("mix:BasicDigitalObjectInformation")); } /* 1.0, Top level element 2 of 5: BasicImageInformation */ protected void showNisoBasicImageInformation10 (NisoImageMetadata niso, String margin) { String margn2 = margin + " "; String margn3 = margn2 + " "; String margn4 = margn3 + " "; String margn5 = margn4 + " "; String margn6 = margn5 + " "; String margn7 = margn6 + " "; _writer.println (margn2 + elementStart ("mix:BasicImageInformation")); StringBuffer basCharBuf = new StringBuffer (margn3 + elementStart ("mix:BasicImageCharacteristics") + EOL); boolean useBasCharBuf = false; long ln = niso.getImageWidth (); if (ln != NisoImageMetadata.NULL) { basCharBuf.append (margn4 + element ("mix:imageWidth", Long.toString (ln)) + EOL); useBasCharBuf = true; } ln = niso.getImageLength (); if (ln != NisoImageMetadata.NULL) { basCharBuf.append (margn4 + element ("mix:imageHeight", Long.toString (ln)) + EOL); useBasCharBuf = true; } // Nest photometric interpretation tentative buffer in basCharBuf StringBuffer piBuf = new StringBuffer (margn4 + elementStart ("mix:PhotometricInterpretation") + EOL); boolean usePIBuf = false; int n = niso.getColorSpace (); if (n != NisoImageMetadata.NULL) { piBuf.append (margn5 + element ("mix:colorSpace", Integer.toString(n)) + EOL); usePIBuf = true; } String s = niso.getProfileName (); String s2= niso.getProfileURL (); if (s != null || s2 != null) { piBuf.append (margn5 + elementStart ("mix:ColorProfile") + EOL); piBuf.append (margn6 + elementStart ("mix:IccProfile") + EOL); if (s != null) { piBuf.append (margn7 + element ("mix:iccProfileName", s) +EOL); } if (s2!= null) { piBuf.append (margn7 + element ("mix:iccProfileURL", s2) +EOL); } piBuf.append (margn6 + elementEnd ("mix:IccProfile") + EOL); piBuf.append (margn5 + elementEnd ("mix:ColorProfile") + EOL); usePIBuf = true; } int [] iarray = niso.getYCbCrSubSampling (); n = niso.getYCbCrPositioning (); Rational [] rarray = niso.getYCbCrCoefficients (); if (iarray != null || n != NisoImageMetadata.NULL || rarray != null) { piBuf.append (margn5 + elementStart ("mix:YCbCr") + EOL); usePIBuf = true; if (iarray != null && iarray.length >= 2) { piBuf.append (margn6 + elementStart ("mix:YCbCrSubSampling") + EOL); piBuf.append (margn7 + element ("mix:yCbCrSubsampleHoriz", Integer.toString (iarray[0])) + EOL); piBuf.append (margn7 + element ("mix:yCbCrSubsampleVert", Integer.toString (iarray[1])) + EOL); piBuf.append (margn6 + elementEnd ("mix:YCbCrSubSampling") + EOL); } if (n != NisoImageMetadata.NULL) { piBuf.append (margn6 + element ("mix:yCbCrPositioning", Integer.toString (n)) + EOL); } if (rarray != null) { piBuf.append (margn6 + element ("mix:yCbCrCoefficients", rationalArray10 (rarray)) + EOL); } piBuf.append (margn5 + elementEnd ("mix:YCbCr") + EOL); } rarray = niso.getReferenceBlackWhite (); if (rarray != null) { piBuf.append (margn6 + element ("mix:referenceBlackWhite", rationalArray10 (rarray)) + EOL); usePIBuf = true; } piBuf.append (margn4 + elementEnd ("mix:PhotometricInterpretation") + EOL); if (usePIBuf) { basCharBuf.append (piBuf); useBasCharBuf = true; } basCharBuf.append (margn3 + elementEnd ("mix:BasicImageCharacteristics")); if (useBasCharBuf) { _writer.println (basCharBuf); } _writer.println (margn2 + elementEnd ("mix:BasicImageInformation")); // TODO SpecialFormatCharacteristics would be nice to have here, // but that's future expansion } /* 1.0, Top level element 3 of 5: ImageCaptureMetadata */ protected void showNisoImageCaptureMetadata10 (NisoImageMetadata niso, String margin) { String margn2 = margin + " "; String margn3 = margn2 + " "; String margn4 = margn3 + " "; String margn5 = margn4 + " "; String margn6 = margn5 + " "; String margn7 = margn6 + " "; StringBuffer captureBuffer = new StringBuffer (); boolean useCaptureBuffer = false; String s = niso.getSourceType (); if (s != null) { captureBuffer.append (margn3 + element ("mix:sourceType", s)); useCaptureBuffer = true; } s = niso.getSourceID (); if (s != null) { captureBuffer.append (margn3 + elementStart ("mix:SourceID")); captureBuffer.append (margn3 + element ("mix:sourceIDValue", s)); captureBuffer.append (margn3 + elementEnd ("mix:sourceID")); useCaptureBuffer = true; } double d = niso.getSourceXDimension (); int n = niso.getSourceXDimensionUnit (); if (d != NisoImageMetadata.NILL || n != NisoImageMetadata.NULL) { // Assume that both X and Y exist, or neither captureBuffer.append (margn3 + elementStart ("mix:SourceSize")); captureBuffer.append (margn4 + elementStart ("mix:SourceXDimension") + EOL); if (d != NisoImageMetadata.NILL) { captureBuffer.append (margn5 + element ("mix:sourceXDimensionValue", Double.toString (d)) + EOL); } if (n != NisoImageMetadata.NULL) { captureBuffer.append (margn5 + element ("mix:sourceXDimensionUnit", Integer.toString (n)) + EOL); } captureBuffer.append (margn4 + elementEnd ("mix:SourceXDimension")+ EOL); d = niso.getSourceYDimension (); n = niso.getSourceYDimensionUnit (); if (d != NisoImageMetadata.NILL || n != NisoImageMetadata.NULL) { captureBuffer.append (margn4 + elementStart ("mix:SourceYDimension") + EOL); if (d != NisoImageMetadata.NILL) { captureBuffer.append (margn5 + element ("mix:sourceYDimensionValue", Double.toString (d)) + EOL); } if (n != NisoImageMetadata.NULL) { captureBuffer.append (margn5 + element ("mix:sourceYDimensionUnit", Integer.toString (n))+ EOL); } captureBuffer.append (margn4 + elementEnd ("mix:SourceYDimension") + EOL); } captureBuffer.append (margn3 + elementEnd ("mix:SourceSize") + EOL); useCaptureBuffer = true; } StringBuffer genCapBuf = new StringBuffer (margn3 + elementStart ("mix:GeneralCaptureInformation") + EOL); boolean useGenCapBuf = false; s = niso.getDateTimeCreated (); if (s != null) { genCapBuf.append (margn3 + element ("mix:dateTimeCreated", s) + EOL); useGenCapBuf = true; } s = niso.getImageProducer (); if (s != null) { genCapBuf.append (margn3 + element ("mix:imageProducer", s) + EOL); useGenCapBuf = true; } s = niso.getDeviceSource (); if (s != null) { genCapBuf.append (margn3 + element ("mix:captureDevice", s) + EOL); /* This has a restricted set of values. Does the setting code * conform? */ } genCapBuf.append (margn3 + elementEnd ("mix:GeneralCaptureInformation") + EOL); if (useGenCapBuf) { captureBuffer.append (genCapBuf); useCaptureBuffer = true; } // Here's a chunk of XML for scanners. StringBuffer scanCapBuf = new StringBuffer (margn3 + elementStart ("mix:ScannerCapture") + EOL); boolean useScanCapBuf = false; String mfg = niso.getScannerManufacturer (); if (mfg != null) { scanCapBuf.append (margn4 + element ("mix:scannerManufacturer", mfg) + EOL); useScanCapBuf = true; } String model = niso.getScannerModelName (); String modelNum = niso.getScannerModelNumber(); String serNum = niso.getScannerModelSerialNo(); if (model != null || modelNum != null || serNum != null) { useScanCapBuf = true; scanCapBuf.append (margn4 + elementStart ("mix:ScannerModel") + EOL); if (model != null) { scanCapBuf.append (margn5 + element ("mix:scannerModelName", model) + EOL); } if (modelNum != null) { scanCapBuf.append (margn5 + element ("mix:scannerModelNumber", modelNum)+ EOL); } if (serNum != null) { scanCapBuf.append (margn5 + element ("mix:scannerModelSerialNo", serNum) + EOL); } scanCapBuf.append (margn4 + elementEnd ("mix:ScannerModel") + EOL); } double xres = niso.getXPhysScanResolution(); double yres = niso.getYPhysScanResolution(); if (xres != NisoImageMetadata.NULL && yres != NisoImageMetadata.NULL) { double res = (xres > yres ? xres : yres); scanCapBuf.append (margn4 + element ("mix:maximumOpticalResolution", Double.toString (res)) + EOL); } s = niso.getScanningSoftware(); if (s != null) { useScanCapBuf = true; scanCapBuf.append (margn4 + elementStart ("mix:ScanningSystemSoftware") + EOL); scanCapBuf.append (margn5 + element ("mix:scanningSoftwareName", s) + EOL); s = niso.getScanningSoftwareVersionNo(); if (s != null) { scanCapBuf.append (margn5 + element ("mix:scanningSoftwareVersionNo", s) + EOL); } scanCapBuf.append (margn4 + elementEnd ("mix:ScanningSystemSoftware") + EOL); } scanCapBuf.append (margn3 + elementEnd ("mix:ScannerCapture") + EOL); if (useScanCapBuf) { captureBuffer.append (scanCapBuf); useCaptureBuffer = true; } // Now we'll hear from the digital cameras. StringBuffer digCamBuf = new StringBuffer (margn3 + elementStart ("mix:DigitalCameraCapture") + EOL); boolean useDigCamBuf = false; s = niso.getDigitalCameraManufacturer(); if (s != null) { digCamBuf.append (margn4 + element ("mix:digitalCameraManufacturer") + EOL); useDigCamBuf = true; } s = niso.getDigitalCameraModel(); if (s != null) { digCamBuf.append (margn4 + elementStart ("mix:DigitalCameraModel")+ EOL); digCamBuf.append (margn5 + element ("mix:digitalCameraModelName") + s + EOL); digCamBuf.append (margn4 + elementEnd ("mix:DigitalCameraModel") + EOL); useDigCamBuf = true; } // Nest a buffer for CameraCaptureSettings StringBuffer ccSetBuf = new StringBuffer (margn4 + elementStart ("mix:CameraCaptureSettings") + EOL); boolean useCcSetBuf = false; // CameraCaptureSettings consists only of an ImageData element, so we // don't need another use flag here. ccSetBuf.append (margn5 + elementStart ("mix:ImageData") + EOL); d = niso.getFNumber (); if (d != NisoImageMetadata.NULL) { ccSetBuf.append (margn6 + element ("mix:fNumber", Double.toString (d)) + EOL); useCcSetBuf = true; } d = niso.getExposureTime(); if (d != NisoImageMetadata.NULL) { ccSetBuf.append (margn6 + element ("mix:exposureTime", Double.toString (d)) + EOL); useCcSetBuf = true; } d = niso.getBrightness(); if (d != NisoImageMetadata.NULL) { ccSetBuf.append (margn6 + element ("mix:brightnessValue", Double.toString (d)) + EOL); useCcSetBuf = true; } d = niso.getExposureBias(); if (d != NisoImageMetadata.NULL) { ccSetBuf.append (margn6 + element ("mix:exposureBiasValue", Double.toString (d)) + EOL); useCcSetBuf = true; } double[] darray = niso.getSubjectDistance (); if (darray != null) { // For the old schema, we dumped out the whole array, but the 1.0 // schema clearly says a non-negative number is expected. // So just use darray[0]. ccSetBuf.append (margn6 + element ("mix:subjectDistance", Double.toString (darray[0])) + EOL); useCcSetBuf = true; } n = niso.getMeteringMode (); if (n != NisoImageMetadata.NULL) { ccSetBuf.append (margn6 + element ("mix:meteringMode", Integer.toString (n)) + EOL); useCcSetBuf = true; } n = niso.getFlash (); if (n != NisoImageMetadata.NULL) { ccSetBuf.append (margn6 + element ("mix:flash", Integer.toString (n)) + EOL); useCcSetBuf = true; } d = niso.getFocalLength (); if (d != NisoImageMetadata.NULL) { ccSetBuf.append (margn6 + element ("mix:focalLength", Double.toString (d)) + EOL); useCcSetBuf = true; } d = niso.getFlashEnergy (); if (d != NisoImageMetadata.NULL) { ccSetBuf.append (margn6 + element ("mix:flashEnergy", Double.toString (d)) + EOL); useCcSetBuf = true; } n = niso.getBackLight (); if (n != NisoImageMetadata.NULL) { ccSetBuf.append (margn6 + element ("mix:backLight", Integer.toString (n)) + EOL); useCcSetBuf = true; } d = niso.getExposureIndex (); if (d != NisoImageMetadata.NULL) { ccSetBuf.append (margn6 + element ("mix:exposureIndex", Double.toString (d)) + EOL); useCcSetBuf = true; } n = niso.getAutoFocus (); if (n != NisoImageMetadata.NULL) { ccSetBuf.append (margn6 + element ("mix:autoFocus", Integer.toString (n)) + EOL); useCcSetBuf = true; } d = niso.getXPrintAspectRatio(); double d2 = niso.getYPrintAspectRatio(); if (d != NisoImageMetadata.NULL || d2 != NisoImageMetadata.NULL) { ccSetBuf.append (margn6 + elementStart ("mix:PrintAspectRatio") + EOL); if (d != NisoImageMetadata.NULL) { ccSetBuf.append (margn7 + element ("mix:xPrintAspectRatio", Double.toString(d)) + EOL); } if (d2 != NisoImageMetadata.NULL) { ccSetBuf.append (margn7 + element ("mix:yPrintAspectRatio", Double.toString(d)) + EOL); } ccSetBuf.append (margn6 + elementEnd ("mix:PrintAspectRatio") + EOL); } ccSetBuf.append (margn5 + elementEnd ("mix:ImageData") + EOL); ccSetBuf.append (margn4 + elementEnd ("mix:CameraCaptureSettings") + EOL); if (useCcSetBuf) { digCamBuf.append (ccSetBuf); useDigCamBuf = true; } digCamBuf.append (margn3 + elementEnd ("mix:DigitalCameraCapture") + EOL); if (useDigCamBuf) { captureBuffer.append (digCamBuf); useCaptureBuffer = true; } n = niso.getOrientation(); if (n != NisoImageMetadata.NULL) { captureBuffer.append (margn3 + element ("mix:orientation", Integer.toString (n)) + EOL); useCaptureBuffer = true; } s = niso.getMethodology(); if (s != null) { captureBuffer.append (margn3 + element ("mix:methodology", s) + EOL); } if (useCaptureBuffer) { _writer.println (margn2 + elementStart ("mix:ImageCaptureMetadata")); _writer.print (captureBuffer.toString ()); _writer.println (margn2 + elementEnd ("mix:ImageCaptureMetadata")); } } /* 1.0, Top level element 4 of 5: ImageAssessmentMetadata */ protected void showNisoImageAssessmentMetadata10 (NisoImageMetadata niso, String margin) { String margn2 = margin + " "; String margn3 = margn2 + " "; String margn4 = margn3 + " "; String margn5 = margn4 + " "; String margn6 = margn5 + " "; _writer.println (margn2 + elementStart ("mix:ImageAssessmentMetadata")); StringBuffer metricsBuf = new StringBuffer (margn3 + elementStart("mix:SpatialMetrics") + EOL); boolean useMetricsBuf = false; int n = niso.getSamplingFrequencyPlane(); if (n != NisoImageMetadata.NULL) { metricsBuf.append (margn4 + element("mix:samplingFrequencyPlane", Integer.toString(n)) + EOL); useMetricsBuf = true; } n = niso.getSamplingFrequencyUnit(); if (n != NisoImageMetadata.NULL) { metricsBuf.append (margn4 + element("mix:samplingFrequencyUnit", Integer.toString(n)) + EOL); useMetricsBuf = true; } Rational r = niso.getXSamplingFrequency(); if (r != null) { rationalToString (metricsBuf, "mix:xSamplingFrequency", margn4, r); } r = niso.getYSamplingFrequency(); if (r != null) { rationalToString (metricsBuf, "mix:ySamplingFrequency", margn4, r); } metricsBuf.append(margn3 + elementEnd ("mix:SpatialMetrics")); if (useMetricsBuf) { _writer.println (metricsBuf); } StringBuffer colorEncBuf = new StringBuffer (margn3 + elementStart("mix:ImageColorEncoding") + EOL); boolean useColorEncBuf = false; int[] iarray = niso.getBitsPerSample(); if (iarray != null) { colorEncBuf.append (margn4 + elementStart ("mix:bitsPerSample") + EOL); colorEncBuf.append (margn5 + element ("mix:bitsPerSampleValue", integerArray (iarray, ',')) + EOL); colorEncBuf.append (margn5 + element ("mix:bitsPerSampleUnit", "integer") + EOL); // bitsPerSampleUnit can also be floating point. Don't ask me why. colorEncBuf.append (margn4 + elementEnd ("mix:bitsPerSample") + EOL); useColorEncBuf = true; } n = niso.getSamplesPerPixel(); if (n != NisoImageMetadata.NULL) { colorEncBuf.append (margn4 + element ("mix:samplesPerPixel", Integer.toString(n)) + EOL); useColorEncBuf = true; } iarray = niso.getExtraSamples(); if (iarray != null) { // extraSamples can only be an integer, so the best we can do is // snag the first value from the array. It also must be limited to // 0, 1, 2, or 3. n = iarray[0]; if (n >= 0 && n <= 3) { colorEncBuf.append (margn4 + element ("mix:extraSamples", Integer.toString (n)) + EOL); useColorEncBuf = true; } } String s = niso.getColormapReference(); if (s != null) { colorEncBuf.append (margn4 + elementStart("mix:Colormap") + EOL); colorEncBuf.append (margn5 + element ("mix:colormapReference", s) + EOL); colorEncBuf.append (margn4 + elementEnd ("mix:Colormap") + EOL); useColorEncBuf = true; } // This is complete nonsense, but it's what the spec says iarray = niso.getGrayResponseCurve(); if (iarray != null) { colorEncBuf.append (margn4 + element ("mix:grayResponseCurve", "N") + EOL); useColorEncBuf = true; } n = niso.getGrayResponseUnit(); if (n != NisoImageMetadata.NULL) { colorEncBuf.append (margn4 + element ("mix:grayResponseUnit", Integer.toString (n)) + EOL); useColorEncBuf = true; } r = niso.getWhitePointXValue(); Rational r2 = niso.getWhitePointYValue(); if (r != null || r2 != null) { colorEncBuf.append (margn4 + elementStart ("mix:WhitePoint") + EOL); if (r != null) { rationalToString (colorEncBuf, "mix:whitePointXValue", margn5, r); } if (r2 != null) { rationalToString (colorEncBuf, "mix:whitePointYValue", margn5, r2); } colorEncBuf.append (margn4 + elementEnd ("mix:WhitePoint") + EOL); useColorEncBuf = true; } // A chromaticities buffer to go in the color encoding buffer. StringBuffer chromaBuf = new StringBuffer (margn4 + elementStart ("mix:PrimaryChromaticities") + EOL); boolean useChromaBuf = false; r = niso.getPrimaryChromaticitiesRedX(); if (r != null) { rationalToString (chromaBuf, "mix:primaryChromaticitiesRedX", margn5, r); useChromaBuf = true; } r = niso.getPrimaryChromaticitiesRedY(); if (r != null) { rationalToString (chromaBuf, "mix:primaryChromaticitiesRedY", margn5, r); useChromaBuf = true; } r = niso.getPrimaryChromaticitiesGreenX(); if (r != null) { rationalToString (chromaBuf, "mix:primaryChromaticitiesGreenX", margn5, r); useChromaBuf = true; } r = niso.getPrimaryChromaticitiesGreenY(); if (r != null) { rationalToString (chromaBuf, "mix:primaryChromaticitiesGreenY", margn5, r); useChromaBuf = true; } r = niso.getPrimaryChromaticitiesBlueX(); if (r != null) { rationalToString (chromaBuf, "mix:primaryChromaticitiesBlueX", margn5, r); useChromaBuf = true; } r = niso.getPrimaryChromaticitiesBlueY(); if (r != null) { rationalToString (chromaBuf, "mix:primaryChromaticitiesBlueY", margn5, r); useChromaBuf = true; } chromaBuf.append (margn4 + elementEnd ("mix:PrimaryChromaticities") + EOL); if(useChromaBuf) { colorEncBuf.append (chromaBuf); useColorEncBuf = true; } colorEncBuf.append (margn3 + elementEnd ("mix:ImageColorEncoding") + EOL); if (useColorEncBuf) { _writer.print (colorEncBuf); } StringBuffer targetBuf = new StringBuffer (margn3 + elementStart ("mix:TargetData") + EOL); boolean useTargetBuf = false; n = niso.getTargetType(); if (n != NisoImageMetadata.NULL) { targetBuf.append (margn4 + element ("mix:targetType", Integer.toString(n)) + EOL); useTargetBuf = true; } // Now a nested buffer for TargetID. StringBuffer targetIDBuf = new StringBuffer (margn4 + elementStart("mix:TargetID") + EOL); boolean useTargetIDBuf = false; s = niso.getTargetIDManufacturer(); if (s != null) { targetIDBuf.append (margn5 + element ("mix:targetManufacturer", s) + EOL); useTargetIDBuf = true; } s = niso.getTargetIDName(); if (s != null) { targetIDBuf.append (margn5 + element ("mix:targetName", s) + EOL); useTargetIDBuf = true; } s = niso.getTargetIDNo(); if (s != null) { targetIDBuf.append (margn5 + element ("mix:targetNo", s) + EOL); useTargetIDBuf = true; } s = niso.getTargetIDMedia(); if (s != null) { targetIDBuf.append (margn5 + element ("mix:targetMedia", s) + EOL); useTargetIDBuf = true; } targetIDBuf.append (margn4 + elementEnd ("mix:TargetID") + EOL); if (useTargetIDBuf) { targetBuf.append (targetIDBuf); useTargetBuf = true; } s = niso.getImageData(); if (s != null) { targetBuf.append (margn4 + element ("mix:externalTarget", s) + EOL); useTargetBuf = true; } s = niso.getPerformanceData(); if (s != null) { targetBuf.append (margn4 + element ("mix:performanceData", s) + EOL); useTargetBuf = true; } targetBuf.append (margn3 + elementEnd ("mix:TargetData") + EOL); if (useTargetBuf) { _writer.print (targetBuf); } _writer.println (margn2 + elementEnd ("mix:ImageAssessmentMetadata")); } /* 1.0, Top level element 5 of 5: ChangeHistory (without time travel) */ protected void showChangeHistory10 (NisoImageMetadata niso, String margin) { String margn2 = margin + " "; String margn3 = margn2 + " "; String margn4 = margn3 + " "; String margn5 = margn4 + " "; String margn6 = margn5 + " "; // There may be nothing at all to write. Put the whole thing in a buffer. StringBuffer chBuf = new StringBuffer (margn2 + elementStart ("mix:ChangeHistory") + EOL); boolean useChBuf = false; chBuf.append (margn3 + elementStart ("mix:ImageProcessing") + EOL); String s = niso.getSourceData(); if (s != null) { chBuf.append (margn4 + element ("mix:sourceData") + EOL); useChBuf = true; } s = niso.getProcessingAgency(); if (s != null) { chBuf.append (margn4 + element ("mix:processingAgency") + EOL); useChBuf = true; } StringBuffer sftwBuf = new StringBuffer (margn4 + elementStart ("mix:ProcessingSoftware") + EOL); boolean useSftwBuf = false; s = niso.getProcessingSoftwareName(); if (s != null) { sftwBuf.append (margn5 + element ("mix:processingSoftwareName", s) + EOL); useSftwBuf = true; } s = niso.getProcessingSoftwareVersion(); if (s != null) { sftwBuf.append (margn5 + element ("mix:processingSoftwareVersion", s) + EOL); useSftwBuf = true; } s = niso.getOS(); if (s != null) { sftwBuf.append (margn5 + element ("mix:processingOperatingSystemName", s) + EOL); useSftwBuf = true; } s = niso.getOSVersion(); if (s != null) { sftwBuf.append (margn5 + element ("mix:processingOperatingSystemVersion", s) + EOL); useSftwBuf = true; } sftwBuf.append (margn4 + elementEnd ("mix:ProcessingSoftware") + EOL); if (useSftwBuf) { chBuf.append (sftwBuf); useChBuf = true; } String[] sarray = niso.getProcessingActions(); if (sarray != null) { for (int i = 0; i < sarray.length; i++) { chBuf.append (margn4 + element ("mix:processingActions", sarray[i]) + EOL); } useChBuf = true; } chBuf.append (margn3 + elementEnd ("mix:ImageProcessing") + EOL); chBuf.append (margn2 + elementEnd ("mix:ChangeHistory") + EOL); if (useChBuf) { _writer.println (chBuf); } } /** * Display the NISO image metadata formatted according to * the MIX 2.0 schema. */ protected void showNisoImageMetadata20 (NisoImageMetadata niso) { String margin = getIndent (++_level); String [][] attrs = {{"xmlns:mix", "http://www.loc.gov/mix/v20"}, {"xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance"}, {"xsi:schemaLocation", "http://www.loc.gov/mix/v20 http://www.loc.gov/standards/mix/mix20/mix20.xsd"}}; _writer.println (margin + elementStart ("mix:mix", attrs)); showNisoBasicDigitalObjectInformation20 (niso, margin); showNisoBasicImageInformation20 (niso, margin); showNisoImageCaptureMetadata20 (niso, margin); showNisoImageAssessmentMetadata20 (niso, margin); showChangeHistory20 (niso, margin); _writer.println (margin + elementEnd ("mix:mix")); _level--; } /* The NISO Metadata output for version 2.0. Top level element 1 of 6: BasicDigitalObjectInformation */ protected void showNisoBasicDigitalObjectInformation20 (NisoImageMetadata niso, String margin) { String margn2 = margin + " "; String margn3 = margn2 + " "; String margn4 = margn3 + " "; String margn5 = margn4 + " "; _writer.println (margn2 + elementStart ("mix:BasicDigitalObjectInformation")); StringBuffer objIDBuf = new StringBuffer (margn3 + elementStart ("mix:ObjectIdentifier") + EOL); objIDBuf.append (margn4 + element ("mix:objectIdentifierType", "JHOVE") + EOL); String s = niso.getImageIdentifier (); if (s != null) { objIDBuf.append (margn4 + element ("mix:objectIdentifierValue", s) + EOL); } objIDBuf.append (margn3 + elementEnd ("mix:ObjectIdentifier") + EOL); _writer.print (objIDBuf.toString ()); long ln = niso.getFileSize(); if (ln != NisoImageMetadata.NULL) { _writer.print (margn3 + element ("mix:fileSize", Long.toString (ln)) + EOL); } if ((s = niso.getByteOrder ()) != null) { // Convert strings to MIX 1.0 form if (s.startsWith ("big")) { s = "big endian"; } else if (s.startsWith ("little")) { s = "little endian"; } _writer.print (margn3 + element ("mix:byteOrder", s) + EOL); } int comp = niso.getCompressionScheme (); int level = niso.getCompressionLevel (); String compStr; switch (comp) { case 1: compStr = "Uncompressed"; break; case 2: compStr = "CCITT 1D"; break; case 3: compStr = "Group 3 Fax"; break; case 4: compStr = "Group 4 Fax"; break; case 5: compStr = "LZW"; break; case 6: compStr = "JPEG"; break; case 32773: compStr = "PackBits"; break; default: compStr = "Unknown"; break; } if (comp != NisoImageMetadata.NULL || level != NisoImageMetadata.NULL) { _writer.print (margn3 + elementStart ("mix:Compression") + EOL); if (comp != NisoImageMetadata.NULL) { _writer.print (margn4 + element ("mix:compressionScheme", compStr) + EOL); } // TODO it isn't clear how to get from compression level to compression ratio _writer.print (margn3 + elementEnd ("mix:Compression") + EOL); } // NOTE: Checksum method and value are never set currently. If they are, the // values set will need to be converted to meaningful MIX values. This code is left // here just as a reminder. int n = niso.getChecksumMethod (); s = niso.getChecksumValue (); if (n != NisoImageMetadata.NULL || s != null) { _writer.print (margn4 + elementStart ("mix:Fixity") + EOL); if (n != NisoImageMetadata.NULL) { _writer.print (margn5 + element ("mix:messageDigestAlgorithm", Integer.toString (n)) + EOL); } if (s != null) { _writer.print (margn5 + element ("mix:messageDigest", s) + EOL); } _writer.println (margn4 + elementEnd ("mix:Fixity")); } _writer.print(margn2 + elementEnd ("mix:BasicDigitalObjectInformation") + EOL); } /* MIX/NISO 2.0, Top level element 2 of 5: BasicImageInformation */ protected void showNisoBasicImageInformation20 (NisoImageMetadata niso, String margin) { String margn2 = margin + " "; String margn3 = margn2 + " "; String margn4 = margn3 + " "; String margn5 = margn4 + " "; String margn6 = margn5 + " "; String margn7 = margn6 + " "; _writer.println (margn2 + elementStart ("mix:BasicImageInformation")); StringBuffer basCharBuf = new StringBuffer (margn3 + elementStart ("mix:BasicImageCharacteristics") + EOL); boolean useBasCharBuf = false; long ln = niso.getImageWidth (); if (ln != NisoImageMetadata.NULL) { basCharBuf.append (margn4 + element ("mix:imageWidth", Long.toString (ln)) + EOL); useBasCharBuf = true; } ln = niso.getImageLength (); if (ln != NisoImageMetadata.NULL) { basCharBuf.append (margn4 + element ("mix:imageHeight", Long.toString (ln)) + EOL); useBasCharBuf = true; } // Nest photometric interpretation tentative buffer in basCharBuf StringBuffer piBuf = new StringBuffer (margn4 + elementStart ("mix:PhotometricInterpretation") + EOL); boolean usePIBuf = false; int n = niso.getColorSpace (); if (n != NisoImageMetadata.NULL) { piBuf.append (margn5 + element ("mix:colorSpace", photometricInterpretationToString (n)) + EOL); usePIBuf = true; } String s = niso.getProfileName (); String s2= niso.getProfileURL (); if (s != null || s2 != null) { piBuf.append (margn5 + elementStart ("mix:ColorProfile") + EOL); piBuf.append (margn6 + elementStart ("mix:IccProfile") + EOL); if (s != null) { piBuf.append (margn7 + element ("mix:iccProfileName", s) +EOL); } if (s2!= null) { piBuf.append (margn7 + element ("mix:iccProfileURI", s2) +EOL); } piBuf.append (margn6 + elementEnd ("mix:IccProfile") + EOL); // MIX 2.0 also allows embedded and local profiles. We don't currently support that. piBuf.append (margn5 + elementEnd ("mix:ColorProfile") + EOL); usePIBuf = true; } int [] iarray = niso.getYCbCrSubSampling (); n = niso.getYCbCrPositioning (); Rational [] rarray = niso.getYCbCrCoefficients (); if (iarray != null || n != NisoImageMetadata.NULL || rarray != null) { piBuf.append (margn5 + elementStart ("mix:YCbCr") + EOL); usePIBuf = true; if (iarray != null && iarray.length >= 2) { piBuf.append (margn6 + elementStart ("mix:YCbCrSubSampling") + EOL); piBuf.append (margn7 + element ("mix:yCbCrSubsampleHoriz", Integer.toString (iarray[0])) + EOL); piBuf.append (margn7 + element ("mix:yCbCrSubsampleVert", Integer.toString (iarray[1])) + EOL); piBuf.append (margn6 + elementEnd ("mix:YCbCrSubSampling") + EOL); } if (n != NisoImageMetadata.NULL) { piBuf.append (margn6 + element ("mix:yCbCrPositioning", Integer.toString (n)) + EOL); } if (rarray != null && rarray.length >= 3) { piBuf.append (margn6 + elementStart ("mix:YCbCrCoefficients") + EOL); rationalToString(piBuf, "mix:lumaRed", margn7, rarray[0]); rationalToString(piBuf, "mix:lumaGreen", margn7, rarray[1]); rationalToString(piBuf, "mix:lumaBlue", margn7, rarray[2]); piBuf.append (margn6 + elementEnd ("mix:YCbCrCoefficients") + EOL); } piBuf.append (margn5 + elementEnd ("mix:YCbCr") + EOL); } rarray = niso.getReferenceBlackWhite (); if (rarray != null) { piBuf.append (margn5 + elementStart("mix:ReferenceBlackWhite") + EOL); for (int i = 0; i < rarray.length - 1; i += 2) { piBuf.append (margn6 + elementStart("mix:Component") + EOL); piBuf.append (margn7 + elementStart("mix:componentPhotometricInterpretation")); // Tricky here. The reference BW might be given as either RGB or yCbCr. String pi; if (niso.getColorSpace() == 6) { // yCbCr switch (i) { case 0: pi = "Y"; break; case 2: pi = "Cb"; break; case 4: default: pi = "Cr"; break; } } else { switch (i) { // otherwise assume RGB case 0: pi = "R"; break; case 2: pi = "G"; break; case 4: default: pi = "B"; break; } } piBuf.append (pi + elementEnd ("mix:componentPhotometricInterpretation") + EOL); rationalToString (piBuf, "mix:footroom", margn7, rarray[i]); rationalToString (piBuf, "mix:headroom", margn7, rarray[i + 1]); piBuf.append (margn7 + elementEnd("mix:Component") + EOL); } piBuf.append (margn6 + elementEnd("mix:ReferenceBlackWhite") + EOL); usePIBuf = true; } piBuf.append (margn4 + elementEnd ("mix:PhotometricInterpretation") + EOL); if (usePIBuf) { basCharBuf.append (piBuf); useBasCharBuf = true; } basCharBuf.append (margn3 + elementEnd ("mix:BasicImageCharacteristics")); if (useBasCharBuf) { _writer.println (basCharBuf); } _writer.println (margn2 + elementEnd ("mix:BasicImageInformation")); // TODO SpecialFormatCharacteristics would be nice to have here, // but that's future expansion } /* 2.0, Top level element 3 of 5: ImageCaptureMetadata */ protected void showNisoImageCaptureMetadata20 (NisoImageMetadata niso, String margin) { String margn2 = margin + " "; String margn3 = margn2 + " "; String margn4 = margn3 + " "; String margn5 = margn4 + " "; String margn6 = margn5 + " "; String margn7 = margn6 + " "; String margn8 = margn7 + " "; // We don't start with an ImageCaptureMetadata element, because the // whole element is conditional on having some content. StringBuffer captureBuffer = new StringBuffer (); boolean useCaptureBuffer = false; int n; String s = niso.getSourceType (); String si = niso.getSourceID (); double d = niso.getSourceXDimension (); if (s != null || si != null || d != NisoImageMetadata.NILL) { captureBuffer.append (margn3 + element ("mix:SourceInformation", s)); useCaptureBuffer = true; if (s != null) { captureBuffer.append (margn4 + element ("mix:sourceType", s)); } if (si != null) { captureBuffer.append (margn4 + elementStart ("mix:SourceID")); captureBuffer.append (margn4 + element ("mix:sourceIDValue", si)); captureBuffer.append (margn4 + elementEnd ("mix:sourceID")); } n = niso.getSourceXDimensionUnit (); if (d != NisoImageMetadata.NILL || n != NisoImageMetadata.NULL) { // Assume that both X and Y exist, or neither captureBuffer.append (margn4 + elementStart ("mix:SourceSize")); captureBuffer.append (margn5 + elementStart ("mix:SourceXDimension") + EOL); if (d != NisoImageMetadata.NILL) { captureBuffer.append (margn6 + element ("mix:sourceXDimensionValue", Double.toString (d)) + EOL); } if (n != NisoImageMetadata.NULL) { captureBuffer.append (margn6 + element ("mix:sourceXDimensionUnit", Integer.toString (n)) + EOL); } captureBuffer.append (margn5 + elementEnd ("mix:SourceXDimension")+ EOL); d = niso.getSourceYDimension (); n = niso.getSourceYDimensionUnit (); if (d != NisoImageMetadata.NILL || n != NisoImageMetadata.NULL) { captureBuffer.append (margn5 + elementStart ("mix:SourceYDimension") + EOL); if (d != NisoImageMetadata.NILL) { captureBuffer.append (margn6 + element ("mix:sourceYDimensionValue", Double.toString (d)) + EOL); } if (n != NisoImageMetadata.NULL) { captureBuffer.append (margn6 + element ("mix:sourceYDimensionUnit", Integer.toString (n))+ EOL); } captureBuffer.append (margn5 + elementEnd ("mix:SourceYDimension") + EOL); } captureBuffer.append (margn4 + elementEnd ("mix:SourceSize") + EOL); } captureBuffer.append (margn3 + elementEnd ("mix:SourceInformation") + EOL); } StringBuffer genCapBuf = new StringBuffer (margn3 + elementStart ("mix:GeneralCaptureInformation") + EOL); boolean useGenCapBuf = false; s = niso.getDateTimeCreated (); if (s != null) { genCapBuf.append (margn3 + element ("mix:dateTimeCreated", s) + EOL); useGenCapBuf = true; } s = niso.getImageProducer (); if (s != null) { genCapBuf.append (margn3 + element ("mix:imageProducer", s) + EOL); useGenCapBuf = true; } s = niso.getDeviceSource (); if (s != null) { genCapBuf.append (margn3 + element ("mix:captureDevice", s) + EOL); /* This has a restricted set of values. Does the setting code * conform? */ } genCapBuf.append (margn3 + elementEnd ("mix:GeneralCaptureInformation") + EOL); if (useGenCapBuf) { captureBuffer.append (genCapBuf); useCaptureBuffer = true; } // Here's a chunk of XML for scanners. StringBuffer scanCapBuf = new StringBuffer (margn3 + elementStart ("mix:ScannerCapture") + EOL); boolean useScanCapBuf = false; String mfg = niso.getScannerManufacturer (); if (mfg != null) { scanCapBuf.append (margn4 + element ("mix:scannerManufacturer", mfg) + EOL); useScanCapBuf = true; } String model = niso.getScannerModelName (); String modelNum = niso.getScannerModelNumber(); String serNum = niso.getScannerModelSerialNo(); if (model != null || modelNum != null || serNum != null) { useScanCapBuf = true; scanCapBuf.append (margn4 + elementStart ("mix:ScannerModel") + EOL); if (model != null) { scanCapBuf.append (margn5 + element ("mix:scannerModelName", model) + EOL); } if (modelNum != null) { scanCapBuf.append (margn5 + element ("mix:scannerModelNumber", modelNum)+ EOL); } if (serNum != null) { scanCapBuf.append (margn5 + element ("mix:scannerModelSerialNo", serNum) + EOL); } scanCapBuf.append (margn4 + elementEnd ("mix:ScannerModel") + EOL); } double xres = niso.getXPhysScanResolution(); double yres = niso.getYPhysScanResolution(); if (xres != NisoImageMetadata.NULL && yres != NisoImageMetadata.NULL) { scanCapBuf.append (margn4 + elementStart ("mix:MaximumOpticalResolution") + EOL); scanCapBuf.append (margn5 + element ("mix:xOpticalResolution", Double.toString (xres)) + EOL); scanCapBuf.append (margn5 + element ("mix:yOpticalResolution", Double.toString (yres)) + EOL); scanCapBuf.append (margn5 + element ("mix:resolutionUnit", "in.") + EOL); // is this a safe assumption? scanCapBuf.append (margn4 + elementEnd ("mix:MaximumOpticalResolution")); } s = niso.getScanningSoftware(); if (s != null) { useScanCapBuf = true; scanCapBuf.append (margn4 + elementStart ("mix:ScanningSystemSoftware") + EOL); scanCapBuf.append (margn5 + element ("mix:scanningSoftwareName", s) + EOL); s = niso.getScanningSoftwareVersionNo(); if (s != null) { scanCapBuf.append (margn5 + element ("mix:scanningSoftwareVersionNo", s) + EOL); } scanCapBuf.append (margn4 + elementEnd ("mix:ScanningSystemSoftware") + EOL); } scanCapBuf.append (margn3 + elementEnd ("mix:ScannerCapture") + EOL); if (useScanCapBuf) { captureBuffer.append (scanCapBuf); useCaptureBuffer = true; } // Now we'll hear from the digital cameras. StringBuffer digCamBuf = new StringBuffer (margn3 + elementStart ("mix:DigitalCameraCapture") + EOL); boolean useDigCamBuf = false; s = niso.getDigitalCameraManufacturer(); if (s != null) { digCamBuf.append (margn4 + element ("mix:digitalCameraManufacturer") + EOL); useDigCamBuf = true; } s = niso.getDigitalCameraModel(); if (s != null) { digCamBuf.append (margn4 + elementStart ("mix:DigitalCameraModel")+ EOL); digCamBuf.append (margn5 + element ("mix:digitalCameraModelName") + s + EOL); digCamBuf.append (margn4 + elementEnd ("mix:DigitalCameraModel") + EOL); useDigCamBuf = true; } // Nest a buffer for CameraCaptureSettings StringBuffer ccSetBuf = new StringBuffer (margn4 + elementStart ("mix:CameraCaptureSettings") + EOL); boolean useCcSetBuf = false; // CameraCaptureSettings consists only of an ImageData element, so we // don't need another use flag here. ccSetBuf.append (margn5 + elementStart ("mix:ImageData") + EOL); d = niso.getFNumber (); if (d != NisoImageMetadata.NULL) { ccSetBuf.append (margn6 + element ("mix:fNumber", Double.toString (d)) + EOL); useCcSetBuf = true; } d = niso.getExposureTime(); if (d != NisoImageMetadata.NULL) { ccSetBuf.append (margn6 + element ("mix:exposureTime", Double.toString (d)) + EOL); useCcSetBuf = true; } d = niso.getBrightness(); if (d != NisoImageMetadata.NULL) { ccSetBuf.append (margn6 + element ("mix:brightnessValue", Double.toString (d)) + EOL); useCcSetBuf = true; } d = niso.getExposureBias(); if (d != NisoImageMetadata.NULL) { ccSetBuf.append (margn6 + element ("mix:exposureBiasValue", Double.toString (d)) + EOL); useCcSetBuf = true; } double[] darray = niso.getSubjectDistance (); if (darray != null) { // darray has two values. If they're equal, set "distance". Otherwise, // set the min and max. ccSetBuf.append (margn6 + elementStart("mix:SubjectDistance") + EOL); useCcSetBuf = true; if (darray[0] == darray[1]) { ccSetBuf.append (margn7 + element ("mix:distance", Double.toString(darray[0])) + EOL); } else { ccSetBuf.append (margn7 + elementStart("mix:MinMaxDistance") + EOL); ccSetBuf.append (margn8 + element ("mix:minDistance", Double.toString(darray[0])) + EOL); ccSetBuf.append (margn8 + element ("mix:maxDistance", Double.toString(darray[1])) + EOL); ccSetBuf.append (margn7 + elementEnd("mix:MinMaxDistance") + EOL); } ccSetBuf.append (margn6 + elementEnd("mix:SubjectDistance") + EOL); } n = niso.getMeteringMode (); if (n != NisoImageMetadata.NULL) { ccSetBuf.append (margn6 + element ("mix:meteringMode", Integer.toString (n)) + EOL); useCcSetBuf = true; } n = niso.getFlash (); if (n != NisoImageMetadata.NULL) { ccSetBuf.append (margn6 + element ("mix:flash", Integer.toString (n)) + EOL); useCcSetBuf = true; } d = niso.getFocalLength (); if (d != NisoImageMetadata.NULL) { ccSetBuf.append (margn6 + element ("mix:focalLength", Double.toString (d)) + EOL); useCcSetBuf = true; } d = niso.getFlashEnergy (); if (d != NisoImageMetadata.NULL) { ccSetBuf.append (margn6 + element ("mix:flashEnergy", Double.toString (d)) + EOL); useCcSetBuf = true; } n = niso.getBackLight (); if (n != NisoImageMetadata.NULL) { ccSetBuf.append (margn6 + element ("mix:backLight", Integer.toString (n)) + EOL); useCcSetBuf = true; } d = niso.getExposureIndex (); if (d != NisoImageMetadata.NULL) { ccSetBuf.append (margn6 + element ("mix:exposureIndex", Double.toString (d)) + EOL); useCcSetBuf = true; } n = niso.getAutoFocus (); if (n != NisoImageMetadata.NULL) { ccSetBuf.append (margn6 + element ("mix:autoFocus", Integer.toString (n)) + EOL); useCcSetBuf = true; } d = niso.getXPrintAspectRatio(); double d2 = niso.getYPrintAspectRatio(); if (d != NisoImageMetadata.NULL || d2 != NisoImageMetadata.NULL) { ccSetBuf.append (margn6 + elementStart ("mix:PrintAspectRatio") + EOL); if (d != NisoImageMetadata.NULL) { ccSetBuf.append (margn7 + element ("mix:xPrintAspectRatio", Double.toString(d)) + EOL); } if (d2 != NisoImageMetadata.NULL) { ccSetBuf.append (margn7 + element ("mix:yPrintAspectRatio", Double.toString(d)) + EOL); } ccSetBuf.append (margn6 + elementEnd ("mix:PrintAspectRatio") + EOL); } ccSetBuf.append (margn5 + elementEnd ("mix:ImageData") + EOL); ccSetBuf.append (margn4 + elementEnd ("mix:CameraCaptureSettings") + EOL); if (useCcSetBuf) { digCamBuf.append (ccSetBuf); useDigCamBuf = true; } digCamBuf.append (margn3 + elementEnd ("mix:DigitalCameraCapture") + EOL); if (useDigCamBuf) { captureBuffer.append (digCamBuf); useCaptureBuffer = true; } n = niso.getOrientation(); if (n != NisoImageMetadata.NULL) { final String[] orient = { "unknown", "normal*", "normal, image flipped", "normal, rotated 180", "normal, image flipped, rotated 180", "normal, image flipped, rotated cw 90", "normal, rotated ccw 90", "normal, image flipped, rotated ccw 90", "normal, rotated cw 90" }; if (n > 8 || n < 0) { n = 0; // force "unknown" for bad value } captureBuffer.append (margn3 + element ("mix:orientation", orient[n]) + EOL); useCaptureBuffer = true; } s = niso.getMethodology(); if (s != null) { captureBuffer.append (margn3 + element ("mix:methodology", s) + EOL); } if (useCaptureBuffer) { _writer.println (margn2 + elementStart ("mix:ImageCaptureMetadata")); _writer.print (captureBuffer.toString ()); _writer.println (margn2 + elementEnd ("mix:ImageCaptureMetadata")); } } /* 2.0, Top level element 4 of 5: ImageAssessmentMetadata */ protected void showNisoImageAssessmentMetadata20 (NisoImageMetadata niso, String margin) { String margn2 = margin + " "; String margn3 = margn2 + " "; String margn4 = margn3 + " "; String margn5 = margn4 + " "; String margn6 = margn5 + " "; _writer.println (margn2 + elementStart ("mix:ImageAssessmentMetadata")); StringBuffer metricsBuf = new StringBuffer (margn3 + elementStart("mix:SpatialMetrics") + EOL); boolean useMetricsBuf = false; int n = niso.getSamplingFrequencyPlane(); if (n != NisoImageMetadata.NULL) { metricsBuf.append (margn4 + element("mix:samplingFrequencyPlane", Integer.toString(n)) + EOL); useMetricsBuf = true; } n = niso.getSamplingFrequencyUnit(); if (n != NisoImageMetadata.NULL) { final String sfu[] = {null, "no absolute unit of measurement", "in.", "cm"}; if (n < 1 || n > 3) { n = 1; } metricsBuf.append (margn4 + element("mix:samplingFrequencyUnit", sfu[n]) + EOL); useMetricsBuf = true; } Rational r = niso.getXSamplingFrequency(); if (r != null) { rationalToString (metricsBuf, "mix:xSamplingFrequency", margn4, r); } r = niso.getYSamplingFrequency(); if (r != null) { rationalToString (metricsBuf, "mix:ySamplingFrequency", margn4, r); } metricsBuf.append(margn3 + elementEnd ("mix:SpatialMetrics")); if (useMetricsBuf) { _writer.println (metricsBuf); } StringBuffer colorEncBuf = new StringBuffer (margn3 + elementStart("mix:ImageColorEncoding") + EOL); boolean useColorEncBuf = false; int[] iarray = niso.getBitsPerSample(); if (iarray != null) { colorEncBuf.append (margn4 + elementStart ("mix:BitsPerSample") + EOL); for (int ii = 1; ii < iarray.length; ii++) { colorEncBuf.append (margn5 + element ("mix:bitsPerSampleValue", Integer.toString(iarray[ii]) ) + EOL); } colorEncBuf.append (margn5 + element ("mix:bitsPerSampleUnit", "integer") + EOL); // bitsPerSampleUnit can also be floating point. Don't ask me why. colorEncBuf.append (margn4 + elementEnd ("mix:BitsPerSample") + EOL); useColorEncBuf = true; } n = niso.getSamplesPerPixel(); if (n != NisoImageMetadata.NULL) { colorEncBuf.append (margn4 + element ("mix:samplesPerPixel", Integer.toString(n)) + EOL); useColorEncBuf = true; } iarray = niso.getExtraSamples(); if (iarray != null) { for (int ii = 0; ii < iarray.length; ii++) { n = iarray[ii]; if (n >= 0 && n <= 3) { colorEncBuf.append (margn4 + element ("mix:extraSamples", Integer.toString (n)) + EOL); useColorEncBuf = true; } } } String s = niso.getColormapReference(); if (s != null) { colorEncBuf.append (margn4 + elementStart("mix:Colormap") + EOL); colorEncBuf.append (margn5 + element ("mix:colormapReference", s) + EOL); colorEncBuf.append (margn4 + elementEnd ("mix:Colormap") + EOL); useColorEncBuf = true; } iarray = niso.getGrayResponseCurve(); if (iarray != null) { for (int ii = 0; ii < iarray.length; ii++) { colorEncBuf.append (margn4 + element ("mix:GrayResponseCurve", Integer.toString(iarray[ii])) + EOL); } useColorEncBuf = true; } n = niso.getGrayResponseUnit(); if (n != NisoImageMetadata.NULL) { colorEncBuf.append (margn4 + element ("mix:grayResponseUnit", Integer.toString (n)) + EOL); useColorEncBuf = true; } r = niso.getWhitePointXValue(); Rational r2 = niso.getWhitePointYValue(); if (r != null || r2 != null) { colorEncBuf.append (margn4 + elementStart ("mix:WhitePoint") + EOL); if (r != null) { rationalToString (colorEncBuf, "mix:whitePointXValue", margn5, r); } if (r2 != null) { rationalToString (colorEncBuf, "mix:whitePointYValue", margn5, r2); } colorEncBuf.append (margn4 + elementEnd ("mix:WhitePoint") + EOL); useColorEncBuf = true; } // A chromaticities buffer to go in the color encoding buffer. StringBuffer chromaBuf = new StringBuffer (margn4 + elementStart ("mix:PrimaryChromaticities") + EOL); boolean useChromaBuf = false; r = niso.getPrimaryChromaticitiesRedX(); if (r != null) { rationalToString (chromaBuf, "mix:primaryChromaticitiesRedX", margn5, r); useChromaBuf = true; } r = niso.getPrimaryChromaticitiesRedY(); if (r != null) { rationalToString (chromaBuf, "mix:primaryChromaticitiesRedY", margn5, r); useChromaBuf = true; } r = niso.getPrimaryChromaticitiesGreenX(); if (r != null) { rationalToString (chromaBuf, "mix:primaryChromaticitiesGreenX", margn5, r); useChromaBuf = true; } r = niso.getPrimaryChromaticitiesGreenY(); if (r != null) { rationalToString (chromaBuf, "mix:primaryChromaticitiesGreenY", margn5, r); useChromaBuf = true; } r = niso.getPrimaryChromaticitiesBlueX(); if (r != null) { rationalToString (chromaBuf, "mix:primaryChromaticitiesBlueX", margn5, r); useChromaBuf = true; } r = niso.getPrimaryChromaticitiesBlueY(); if (r != null) { rationalToString (chromaBuf, "mix:primaryChromaticitiesBlueY", margn5, r); useChromaBuf = true; } chromaBuf.append (margn4 + elementEnd ("mix:PrimaryChromaticities") + EOL); if (useChromaBuf) { colorEncBuf.append (chromaBuf); useColorEncBuf = true; } colorEncBuf.append (margn3 + elementEnd ("mix:ImageColorEncoding") + EOL); if (useColorEncBuf) { _writer.print (colorEncBuf); } StringBuffer targetBuf = new StringBuffer (margn3 + elementStart ("mix:TargetData") + EOL); boolean useTargetBuf = false; n = niso.getTargetType(); if (n != NisoImageMetadata.NULL) { targetBuf.append (margn4 + element ("mix:targetType", Integer.toString(n)) + EOL); useTargetBuf = true; } // Now a nested buffer for TargetID. StringBuffer targetIDBuf = new StringBuffer (margn4 + elementStart("mix:TargetID") + EOL); boolean useTargetIDBuf = false; s = niso.getTargetIDManufacturer(); if (s != null) { targetIDBuf.append (margn5 + element ("mix:targetManufacturer", s) + EOL); useTargetIDBuf = true; } s = niso.getTargetIDName(); if (s != null) { targetIDBuf.append (margn5 + element ("mix:targetName", s) + EOL); useTargetIDBuf = true; } s = niso.getTargetIDNo(); if (s != null) { targetIDBuf.append (margn5 + element ("mix:targetNo", s) + EOL); useTargetIDBuf = true; } s = niso.getTargetIDMedia(); if (s != null) { targetIDBuf.append (margn5 + element ("mix:targetMedia", s) + EOL); useTargetIDBuf = true; } targetIDBuf.append (margn4 + elementEnd ("mix:TargetID") + EOL); if (useTargetIDBuf) { targetBuf.append (targetIDBuf); useTargetBuf = true; } s = niso.getImageData(); if (s != null) { targetBuf.append (margn4 + element ("mix:externalTarget", s) + EOL); useTargetBuf = true; } s = niso.getPerformanceData(); if (s != null) { targetBuf.append (margn4 + element ("mix:performanceData", s) + EOL); useTargetBuf = true; } targetBuf.append (margn3 + elementEnd ("mix:TargetData") + EOL); if (useTargetBuf) { _writer.print (targetBuf); } _writer.println (margn2 + elementEnd ("mix:ImageAssessmentMetadata")); } /* 2.0, Top level element 5 of 5: ChangeHistory */ protected void showChangeHistory20 (NisoImageMetadata niso, String margin) { String margn2 = margin + " "; String margn3 = margn2 + " "; String margn4 = margn3 + " "; String margn5 = margn4 + " "; //String margn6 = margn5 + " "; // There may be nothing at all to write. Put the whole thing in a buffer. StringBuffer chBuf = new StringBuffer (margn2 + elementStart ("mix:ChangeHistory") + EOL); boolean useChBuf = false; chBuf.append (margn3 + elementStart ("mix:ImageProcessing") + EOL); String s = niso.getSourceData(); if (s != null) { chBuf.append (margn4 + element ("mix:sourceData") + EOL); useChBuf = true; } s = niso.getProcessingAgency(); if (s != null) { chBuf.append (margn4 + element ("mix:processingAgency") + EOL); useChBuf = true; } StringBuffer sftwBuf = new StringBuffer (margn4 + elementStart ("mix:ProcessingSoftware") + EOL); boolean useSftwBuf = false; s = niso.getProcessingSoftwareName(); if (s != null) { sftwBuf.append (margn5 + element ("mix:processingSoftwareName", s) + EOL); useSftwBuf = true; } s = niso.getProcessingSoftwareVersion(); if (s != null) { sftwBuf.append (margn5 + element ("mix:processingSoftwareVersion", s) + EOL); useSftwBuf = true; } s = niso.getOS(); if (s != null) { sftwBuf.append (margn5 + element ("mix:processingOperatingSystemName", s) + EOL); useSftwBuf = true; } s = niso.getOSVersion(); if (s != null) { sftwBuf.append (margn5 + element ("mix:processingOperatingSystemVersion", s) + EOL); useSftwBuf = true; } sftwBuf.append (margn4 + elementEnd ("mix:ProcessingSoftware") + EOL); if (useSftwBuf) { chBuf.append (sftwBuf); useChBuf = true; } String[] sarray = niso.getProcessingActions(); if (sarray != null) { for (int i = 0; i < sarray.length; i++) { chBuf.append (margn4 + element ("mix:processingActions", sarray[i]) + EOL); } useChBuf = true; } chBuf.append (margn3 + elementEnd ("mix:ImageProcessing") + EOL); chBuf.append (margn2 + elementEnd ("mix:ChangeHistory") + EOL); if (useChBuf) { _writer.println (chBuf); } } /** Convert the color space value (which is based on the TIFF * PhotometricInterpretation convention) to one of the suggested * values for MIX 2.0 */ private String photometricInterpretationToString (int n) { String s = "Unknown"; switch (n) { case 0: s = "WhiteIsZero"; break; case 1: s = "BlackIsZero"; break; case 2: s = "RGB"; break; case 3: s = "PaletteColor"; break; case 4: s = "TransparencyMask"; break; case 5: s = "CMYK"; break; case 6: s = "YCbCr"; break; case 8: s = "CIELab"; break; case 9: s = "ICCLab"; break; case 10: s = "ITULab"; break; case 32803: s = "CFA"; break; // used by DNG case 34892: s = "LinearRaw"; break; // used by DNG } return s; } /** * Display the audio metadata formatted according to * the AES schema. * @param aes AES audio metadata */ protected void showAESAudioMetadata (AESAudioMetadata aes) { _level += 3; final String margin = getIndent (_level); final String margn2 = margin + " "; final String margn3 = margn2 + " "; final String margn4 = margn3 + " "; final String margn5 = margn4 + " "; //final String margn6 = margn5 + " "; // ID strings. These are arbitrary, but must be unique // within the document. final String formatRegionID = "J1"; final String faceRegionID = "J2"; final String faceID = "J3"; final String audioObjectID = "J4"; final String streamIDBase = "J9"; _sampleRate = aes.getSampleRate (); final String [][] attrs = {{"xmlns:aes", "http://www.aes.org/audioObject"}, {"xmlns:tcf", "http://www.aes.org/tcf"}, {"xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance"}, {"ID", audioObjectID }, {"analogDigitalFlag", aes.getAnalogDigitalFlag ()}, {"disposition", "Validated by JHOVE"}, {"schemaVersion","1.02b"}}; _writer.println (margin + elementStart ("aes:audioObject", attrs)); String s = aes.getFormat (); if (s != null) { String v = aes.getSpecificationVersion (); String[][] fmattrs = new String[1][2]; fmattrs[0][0] = "specificationVersion"; if (v != null) { fmattrs[0][1] = v; } else { // Shouldn't happen fmattrs[0][1] = ""; } _writer.println (margn2 + element ("aes:format", fmattrs, s)); } s = aes.getAppSpecificData(); if (s != null) { _writer.println (margn2 + element ("aes:appSpecificData", s)); } s = aes.getAudioDataEncoding (); if (s != null) { _writer.println (margn2 + element ("aes:audioDataEncoding", s)); } int in = aes.getByteOrder (); if (in != AESAudioMetadata.NULL) { _writer.println (margn2 + element ("aes:byteOrder", in == AESAudioMetadata.BIG_ENDIAN ? "BIG_ENDIAN" : "LITTLE_ENDIAN")); } long lin = aes.getFirstSampleOffset (); if (lin != AESAudioMetadata.NULL) { _writer.println (margn2 + element ("aes:firstSampleOffset", Long.toString (lin))); } String[] use = aes.getUse (); if (use != null) { String[][] uattrs = new String [][] { { "useType", use[0] }, { "otherType", use[1] }}; _writer.println (margn2 + element ("aes:use", uattrs)); } s = aes.getPrimaryIdentifier(); if (s != null) { String t= aes.getPrimaryIdentifierType (); String[][] idattrs = new String[1][2]; idattrs[0][0] = "identifierType"; if (t != null) { idattrs[0][1] = t; } else { // Shouldn't happen idattrs[0][1] = ""; } _writer.println (margn2 + element ("aes:primaryIdentifier", idattrs, s)); } // Add the face information, which is mostly filler. // In the general case, it can contain multiple Faces; // this isn't supported yet. List facelist = aes.getFaceList (); if (!facelist.isEmpty ()) { final String [] [] faceRegionAttrs = { { "ID", faceRegionID }, { "formatRef", formatRegionID }, { "faceRef", faceID }, { "label", "BuiltByJHOVE" } }; final String [] [] faceAttrs = { { "direction", null }, { "ID", faceID }, { "audioObjectRef", audioObjectID }, { "label", "Face" } }; AESAudioMetadata.Face f = (AESAudioMetadata.Face) facelist.get(0); faceAttrs[0] [1] = f.getDirection(); _writer.println (margn2 + elementStart ("aes:face", faceAttrs)); // Fill in a minimal time range. AESAudioMetadata.TimeDesc startTime = f.getStartTime(); if (startTime != null) { _writer.println (margn3 + elementStart ("aes:timeline")); writeAESTimeRange (margn3, startTime, f.getDuration()); _writer.println (margn3 + elementEnd ("aes:timeline")); } // For the present, assume just one face region AESAudioMetadata.FaceRegion facergn = f.getFaceRegion (0); _writer.println (margn3 + elementStart ("aes:region", faceRegionAttrs)); _writer.println (margn4 + elementStart ("aes:timeRange")); writeAESTimeRange (margn3, facergn.getStartTime (), facergn.getDuration ()); _writer.println (margn4 + elementEnd ("aes:timeRange")); int nchan = aes.getNumChannels (); if (nchan != AESAudioMetadata.NULL) { _writer.println (margn4 + element ("aes:numChannels", Integer.toString (nchan))); } String[] locs = aes.getMapLocations (); for (int ch = 0; ch < nchan; ch++) { // write a stream element for each channel String [] [] streamAttrs = { { "ID", streamIDBase + Integer.toString (ch) }, { "label", "JHOVE" }, { "faceRegionRef", faceRegionID } }; _writer.println (margn4 + elementStart ("aes:stream", streamAttrs)); String [] [] chanAttrs = { { "channelNum", Integer.toString(ch) }, { "mapLocation", locs[ch] } }; _writer.println (margn5 + element ("aes:channelAssignment", chanAttrs)); _writer.println (margn4 + elementEnd ("aes:stream")); } _writer.println (margn3 + elementEnd ("aes:region")); _writer.println (margn2+ elementEnd ("aes:face")); } // In the general case, a FormatList can contain multiple // FormatRegions. This doesn't happen with any of the current // modules; if it's needed in the future, simply set up an // iteration loop on formatList. List flist = aes.getFormatList (); if (!flist.isEmpty ()) { AESAudioMetadata.FormatRegion rgn = (AESAudioMetadata.FormatRegion) flist.get(0); int bitDepth = rgn.getBitDepth (); double sampleRate = rgn.getSampleRate (); int wordSize = rgn.getWordSize (); String[] bitRed = rgn.getBitrateReduction (); // Build a FormatRegion subtree if at least one piece of data // that goes into it is present. if (bitDepth != AESAudioMetadata.NULL || sampleRate != AESAudioMetadata.NILL || wordSize != AESAudioMetadata.NULL) { _writer.println (margn2 + elementStart ("aes:formatList")); String[] [] frAttr = { { "ID", formatRegionID } }; _writer.println (margn3 + elementStart ("aes:formatRegion", frAttr)); if (bitDepth != AESAudioMetadata.NULL) { _writer.println (margn4 + element ("aes:bitDepth", Integer.toString (bitDepth))); } if (sampleRate != AESAudioMetadata.NILL) { _writer.println (margn4 + element ("aes:sampleRate", Double.toString (sampleRate))); } if (wordSize != AESAudioMetadata.NULL) { _writer.println (margn4 + element ("aes:wordSize", Integer.toString (wordSize))); } if (bitRed != null) { _writer.println (margn4 + elementStart ("aes:bitrateReduction")); _writer.println (margn5 + element ("aes:codecName", bitRed[0])); _writer.println (margn5 + element ("aes:codecNameVersion", bitRed[1])); _writer.println (margn5 + element ("aes:codecCreatorApplication", bitRed[2])); _writer.println (margn5 + element ("aes:codecCreatorApplicationVersion", bitRed[3])); _writer.println (margn5 + element ("aes:codecQuality", bitRed[4])); _writer.println (margn5 + element ("aes:dataRate", bitRed[5])); _writer.println (margn5 + element ("aes:dataRateMode", bitRed[6])); _writer.println (margn4 + elementEnd ("aes:bitrateReduction")); } _writer.println (margn3 + elementEnd ("aes:formatRegion")); _writer.println (margn2 + elementEnd ("aes:formatList")); } } /* This should go somewhere, but where? */ // int nchan = aes.getNumChannels (); // if (nchan != AESAudioMetadata.NULL) { // _writer.println (margn2 + element ("aes:numChannels", // Integer.toString (nchan))); // } _writer.println (margin + elementEnd ("aes:audioObject")); _level -= 3; } /* Break out the writing of a timeRangeType element. * This always gives a start time of 0. This is all * FAKE DATA for the moment. */ private void writeAESTimeRange (String baseIndent, AESAudioMetadata.TimeDesc start, AESAudioMetadata.TimeDesc duration) { final String margn1 = baseIndent + " "; final String margn2 = margn1 + " "; final String margn3 = margn2 + " "; final String [] [] attrs = { { "tcf:frameCount", "30" }, { "tcf:timeBase", "1000" }, { "tcf:videoField", "FIELD_1" }, { "tcf:countingMode", "NTSC_NON_DROP_FRAME" } }; final String [] [] ffAttrs = { { "tcf:framing", "NOT_APPLICABLE" }, { "xsi:type", "tcf:ntscFilmFramingType" } }; _writer.println (margn1 + elementStart ("tcf:startTime", attrs)); _writer.println (margn2 + element ("tcf:hours", Integer.toString (start.getHours ()))); _writer.println (margn2 + element ("tcf:minutes", Integer.toString (start.getMinutes ()))); _writer.println (margn2 + element ("tcf:seconds", Integer.toString (start.getSeconds ()))); _writer.println (margn2 + element ("tcf:frames", Integer.toString (start.getFrames ()) )); String[] [] sampleAttrs = { {"tcf:sampleRate", ""} }; double sr = start.getSampleRate (); if (sr == 1.0) { sr = _sampleRate; } sampleAttrs[0][1] = "S" + Integer.toString ((int) sr); _writer.println (margn2 + elementStart ("tcf:samples", sampleAttrs)); _writer.println (margn3 + element ("tcf:numberOfSamples", Integer.toString (start.getSamples ()))); _writer.println (margn2 + elementEnd("tcf:samples")); _writer.println (margn2 + element ("tcf:filmFraming", ffAttrs)); _writer.println (margn1 + elementEnd ("tcf:startTime")); if (duration != null) { _writer.println (margn1 + elementStart ("tcf:duration", attrs)); _writer.println (margn2 + element ("tcf:hours", Integer.toString (duration.getHours ()))); _writer.println (margn2 + element ("tcf:minutes", Integer.toString (duration.getMinutes ()))); _writer.println (margn2 + element ("tcf:seconds", Integer.toString (duration.getSeconds ()))); _writer.println (margn2 + element ("tcf:frames", Integer.toString (duration.getFrames ()))); sr = duration.getSampleRate (); if (sr == 1.0) { sr = _sampleRate; } sampleAttrs[0][1] = "S" + Integer.toString ((int) sr); _writer.println (margn2 + elementStart ("tcf:samples", sampleAttrs)); _writer.println (margn3 + element ("tcf:numberOfSamples", Integer.toString (duration.getSamples ()) )); _writer.println (margn2 + elementEnd("tcf:samples")); _writer.println (margn2 + element ("tcf:filmFraming", ffAttrs)); _writer.println (margn1 + elementEnd ("tcf:duration")); } } /* Clean up a URI string by escaping forbidden characters. * We assume (perhaps dangerously) that a % is the start of * an already escaped hexadecimal sequence. */ private String cleanURIString (String uri) { StringBuffer sb = new StringBuffer (uri.length() * 2); boolean change = false; for (int i = 0; i < uri.length (); i++) { char c = uri.charAt (i); if ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || (c >= '0' && c <= '9') || (c == '%') || // assume it's an escape ("-_.!~*'();/?:@=+$,".indexOf (c) >= 0)) { sb.append (c); } else { int cval = (int) c; // More significant hex digit int mshd = (cval >> 4); if (mshd >= 10) { mshd += (int) 'A' - 10; } else { mshd += (int) '0'; } sb.append ('%'); sb.append ((char) mshd); // Less significant hex digit int lshd = (cval & 0X0F); if (lshd >= 10) { lshd += (int) 'A' - 10; } else { lshd += (int) '0'; } sb.append ((char) lshd); change = true; } } // For efficiency, return the original string // if nothing changed. if (change) { return sb.toString (); } else { return uri; } } /** Appends a Rational value to a StringBuffer */ public void rationalToString (StringBuffer buf, String tag, String margin, Rational r) { String margn2 = margin + " "; long numer = r.getNumerator (); long denom = r.getDenominator (); buf.append (margin + elementStart (tag) + EOL); buf.append (margn2 + element ("mix:numerator", Long.toString (numer)) + EOL); if (denom != 1L) { buf.append (margn2 + element ("mix:denominator", Long.toString (denom)) + EOL); } buf.append (margin + elementEnd (tag) + EOL); } } jhove/classes/edu/harvard/hul/ois/jhove/handler/build.xml0000644000707400001440000000464311204567556022675 0ustar garyusers Handler build file Jhove - JSTOR/Harvard Object Validation Environment Version 1.0 2004-02-03 Copyright 2004 by JSTOR and the President and Fellows of Harvard College
jhove/classes/edu/harvard/hul/ois/jhove/handler/package.html0000644000707400001440000000065710771562776023345 0ustar garyusers Contains the main classes for JHOVE output handlers. All module classes are subclasses of HandlerBase.
jhove/classes/edu/harvard/hul/ois/jhove/handler/XmlHandler.class0000644000707400001440000022021311510702103024105 0ustar garyusers2 P89 :;< =>? @A BC DE FG H I J KL M NO P QR S TUVWX Y Z [\ ]^_ [` a [bc d [ef [gh [ij [klm [n opq [r %s +t uv uw [xy z`{ z| }~ [ [ ` |   \         Y z\ z z z z  z z  t z z z z z z            [         %      |  @P       P  R R P R R R R R R R  R T       | ` \ M   P     f f f f! "P "# "$% &' ( o) f f* +P, -P . / 0 12 1$ 13 14 156 7P 1P8 |9 7: 7$ ;<= >? @A B 7CD E Fv Fw G 7HI %JK L TM 7NO 7P Q + % 1RS 1TU 1VW 1XY 1Z[ 1\] 1^ 1_` 1ab 1cd 1e 1fghijk lm n o p P q r s tPuvwxyz{ |} ~         [         }  }             }           }P               T                        ! "# $% &' () *+ ,- ./ 01 23 4 5678 9: ;< =>?@ AB CD EF tG HI JK LM N OPQR S TUVWX YZ [ \] ^_` ab cd e f ghijkl m nopq r stuv wxy z{ |} ~                        T }M        ! " # $ %&'()*+,-. /0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^ _ `abcdefg hijklm  nopqr st uv wxyz {| }~     v v v  v       _   / / / / /_ / }   } t t NAMELjava/lang/String; ConstantValueRELEASEDATE[INOTERIGHTSEOLSCHEMA_VERSION _sampleRateD()VCodeM(Ljava/lang/String;Ljava/lang/String;[ILjava/lang/String;Ljava/lang/String;)Vshow"(Ledu/harvard/hul/ois/jhove/App;)V StackMapTableW,(Ledu/harvard/hul/ois/jhove/OutputHandler;)VD>%(Ledu/harvard/hul/ois/jhove/Module;)V&(Ledu/harvard/hul/ois/jhove/RepInfo;)V I showAgent6(Ledu/harvard/hul/ois/jhove/Agent;Ljava/lang/String;)V showChecksum'(Ledu/harvard/hul/ois/jhove/Checksum;)V showDocument'(Ledu/harvard/hul/ois/jhove/Document;)V showFooter showHeadershowIdentifier)(Ledu/harvard/hul/ois/jhove/Identifier;)V showMessage&(Ledu/harvard/hul/ois/jhove/Message;)V showSignature((Ledu/harvard/hul/ois/jhove/Signature;)V valueToString&(Ljava/lang/Object;)Ljava/lang/String; showProperty'(Ledu/harvard/hul/ois/jhove/Property;)V<OisPropertyEmptyP(Ledu/harvard/hul/ois/jhove/Property;Ledu/harvard/hul/ois/jhove/PropertyArity;)ZmshowArrayProperty9(Ledu/harvard/hul/ois/jhove/Property;Ljava/lang/String;)VshowTextMDMetadata-(Ledu/harvard/hul/ois/jhove/TextMDMetadata;)VAshowNisoImageMetadata0(Ledu/harvard/hul/ois/jhove/NisoImageMetadata;)VshowNisoImageMetadata02showNisoBasicImageParameters02B(Ledu/harvard/hul/ois/jhove/NisoImageMetadata;Ljava/lang/String;)V=showNisoImageCreation02&showNisoImagingPerformanceAssessment02showNisoChangeHistory02showNisoImageMetadata10'showNisoBasicDigitalObjectInformation10showNisoBasicImageInformation10showNisoImageCaptureMetadata10!showNisoImageAssessmentMetadata10showChangeHistory10showNisoImageMetadata20'showNisoBasicDigitalObjectInformation20showNisoBasicImageInformation20showNisoImageCaptureMetadata20!showNisoImageAssessmentMetadata20showChangeHistory20!photometricInterpretationToString(I)Ljava/lang/String;showAESAudioMetadata/(Ledu/harvard/hul/ois/jhove/AESAudioMetadata;)V?LWwriteAESTimeRangeTimeDesc InnerClasses(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/AESAudioMetadata$TimeDesc;Ledu/harvard/hul/ois/jhove/AESAudioMetadata$TimeDesc;)VcleanURIString&(Ljava/lang/String;)Ljava/lang/String;rationalToStringc(Ljava/lang/StringBuffer;Ljava/lang/String;Ljava/lang/String;Ledu/harvard/hul/ois/jhove/Rational;)VXML1.6 cThis output handler is defined by the XML Schema http://hul.harvard.edu/ois/xml/xsd/jhove/jhove.xsdCopyright 2003-2007 by JSTOR and the President and Fellows of Harvard College. Released under the GNU Lesser General Public License. edu/harvard/hul/ois/jhove/AgentHarvard University Library  FOffice for Information Systems, 90 Mt. Auburn St., Cambridge, MA 02138 +1 (617) 495-3724 !jhove-support@hulmail.harvard.edu    #java/lang/StringBuilder    app 4 [Ljava/lang/String;java/lang/Stringdate X      api    configuration   saxParser  jhoveHome encoding  tempDirectory bufferSize  #modules     ! "# $%releasemodule & '4outputHandlers ( )* outputHandlerusage +rights ,handlername -. specifications /0"edu/harvard/hul/ois/jhove/Document  12Vendor  3note 45formatsformat 6coverage 75 mimeTypesmimeType 8. signatures#edu/harvard/hul/ois/jhove/Signature  9. :!featuresfeature methodology ; wellFormed <validity =repInfo $>uri ? 34 @reportingModule A created B C  lastModified DEsizeF G 4 Hversion I! J Well-FormedNot well-formedUnknown K and valid, but not validstatus L.sigMatch M.messages!edu/harvard/hul/ois/jhove/Message  7 N.profilesprofile O properties OP  Q. checksums"edu/harvard/hul/ois/jhove/Checksum typeagent RS Taddress U telephone Vfax Wemail Xweb RYZchecksum [ specificationtitle \ R]^ _.authorsAuthor `. publishers Publisher aedition   b enumeration cpages d. identifiers$edu/harvard/hul/ois/jhove/Identifier jhove e f g4 g xmlns:xsi)http://www.w3.org/2001/XMLSchema-instancexmlns'http://hul.harvard.edu/ois/xml/ns/jhovexsi:schemaLocation^http://hul.harvard.edu/ois/xml/ns/jhove http://hul.harvard.edu/ois/xml/xsd/jhove/1.6/jhove.xsd hijava/util/Date identifiervalue Rjk subMessageoffsetseverity l mE&edu/harvard/hul/ois/jhove/ErrorMessageerror%edu/harvard/hul/ois/jhove/InfoMessageinfomessage M signature n! o p Rqr st uv+edu/harvard/hul/ois/jhove/InternalSignature w!0x m x# yz{use |} R~     aritypropertyvalues  [#"edu/harvard/hul/ois/jhove/Property+edu/harvard/hul/ois/jhove/NisoImageMetadata   *edu/harvard/hul/ois/jhove/AESAudioMetadata $%(edu/harvard/hul/ois/jhove/TextMDMetadata  java/util/List    java/util/Map /key u   java/util/Set   [Z [B [C [Ljava/util/Date; [D [F  [J [Ljava/lang/Object; [S  %[Ledu/harvard/hul/ois/jhove/Rational;%[Ledu/harvard/hul/ois/jhove/Property;.[Ledu/harvard/hul/ois/jhove/NisoImageMetadata;-[Ledu/harvard/hul/ois/jhove/AESAudioMetadata;+[Ledu/harvard/hul/ois/jhove/TextMDMetadata; java/lang/Exception  #    G xmlns:textmdinfo:lc/xmlns/textMD-v3Minfo:lc/xmlns/textMD-v3 http://www.loc.gov/standards/textMD/textMD-v3.01a.xsd textmd:textMDtextmd:character_infotextmd:charset textmd:byte_order textmd:byte_size variable textmd:character_sizetextmd:linebreak  textmd:language  textmd:markup_basis  textmd:markup_language0.2    1.0    xmlns:mixhttp://www.loc.gov/mix/8http://www.loc.gov/mix/ http://www.loc.gov/mix/mix02.xsdmix:mix    mix:BasicImageParametersjava/lang/StringBuffer mix:Format   mix:MIMEType   mix:ByteOrder  mix:Compressionmix:CompressionSchememix:CompressionLevelmix:PhotometricInterpretation mix:ColorSpace  mix:ICCProfilemix:ProfileNamemix:ProfileURL mix:YCbCrSubSampling  mix:YCbCrPositioning mix:YCbCrCoefficients  mix:ReferenceBlackWhite  mix:Segments mix:SegmentType mix:StripOffsets  Emix:RowsPerStrip mix:StripByteCounts E mix:TileWidth Emix:TileLength mix:TileOffsets mix:TileByteCounts mix:PlanarConfigurationmix:File mix:ImageIdentifier E mix:FileSize   mix:Checksummix:ChecksumMethodmix:ChecksumValue mix:Orientation mix:DisplayOrientation E Emix:TargetedDisplayARmix:XTargetedDisplayARmix:YTargetedDisplayARmix:ImageCreation mix:SourceType  mix:SourceID mix:ImageProducermix:Host mix:HostComputer mix:OperatingSystem  mix:OSVersion  mix:DeviceSourcemix:ScanningSystemCapturemix:ScanningSystemHardware mix:ScannerManufacturer   mix:ScannerModelmix:ScannerModelNamemix:ScannerModelNumbermix:ScannerModelSerialNo mix:ScanningSystemSoftware mix:ScanningSoftware mix:ScanningSoftwareVersionNomix:ScannerCaptureSettings  mix:PixelSize   mix:PhysScanResolutionmix:XphysScanResolutionmix:YphysScanResolutionmix:DigitalCameraCapture mix:DigitalCameraManufacturer mix:DigitalCameraModelmix:CameraCaptureSettings  mix:FNumber mix:ExposureTime mix:Brightness mix:ExposureBias mix:SubjectDistance  mix:MeteringMode mix:SceneIlluminant  mix:ColorTemp mix:FocalLength  mix:Flash mix:FlashEnergy mix:FlashReturn  mix:BackLight mix:ExposureIndex  mix:AutoFocus  mix:PrintAspectRatiomix:XPrintAspectRatiomix:YPrintAspectRatio  mix:Sensor mix:DateTimeCreated mix:Methodology mix:ImagingPerformanceAssessmentmix:SpatialMetrics mix:SamplingFrequencyPlane mix:SamplingFrequencyUnit  mix:XSamplingFrequency E  mix:YSamplingFrequency Emix:ImageWidth Emix:ImageLength   mix:Source_Xmix:Source_Xdimensionmix:Source_XdimensionUnit   mix:Source_Ymix:Source_Ydimensionmix:Source_YdimensionUnitmix:Energetics mix:BitsPerSample  mix:SamplesPerPixel mix:ExtraSamples mix:Colormap  mix:Reference mix:Wrap    mix:Colormix:BitCodeValue mix:RedValuemix:GreenValue mix:BlueValue  mix:GrayResponsemix:GrayResponseCurvemix:GrayResponseUnit   mix:WhitePointmix:WhitePoint_Xvaluemix:WhitePoint_Yvalue  mix:PrimaryChromaticitiesmix:PrimaryChromaticities_RedX  mix:PrimaryChromaticities_RedY   mix:PrimaryChromaticities_GreenX   mix:PrimaryChromaticities_GreenY  mix:PrimaryChromaticities_BlueX  mix:PrimaryChromaticities_BlueYmix:TargetData mix:TargetType mix:TargetID mix:TargetIDManufacturer mix:TargetIDName mix:TargetIDNo mix:TargetIDMedia ! mix:ImageData "mix:PerformanceData # mix:Profilesmix:ChangeHistorymix:ImageProcessing $DateTimeProcessed % SourceData &ProcessingAgencyProcessingSoftware 'ProcessingSoftwareName (ProcessingSoftwareVersion )5ProcessingActionshttp://www.loc.gov/mix/v10Khttp://www.loc.gov/mix/v10 http://www.loc.gov/standards/mix/mix10/mix10.xsd     !mix:BasicDigitalObjectInformationmix:ObjectIdentifiermix:objectIdentifierTypeJHOVEmix:objectIdentifierValue mix:fileSizebig * + big_endianlittle little_endian mix:byteOrdermix:compressionScheme mix:Fixitymix:messageDigestAlgorithmmix:messageDigestmix:BasicImageInformationmix:BasicImageCharacteristicsmix:imageWidthmix:imageHeightmix:colorSpacemix:ColorProfilemix:IccProfilemix:iccProfileNamemix:iccProfileURL mix:YCbCrmix:yCbCrSubsampleHorizmix:yCbCrSubsampleVertmix:yCbCrPositioningmix:yCbCrCoefficients ,mix:referenceBlackWhite mix:sourceTypemix:sourceIDValue mix:sourceIDmix:SourceSizemix:SourceXDimensionmix:sourceXDimensionValuemix:sourceXDimensionUnitmix:SourceYDimensionmix:sourceYDimensionValuemix:sourceYDimensionUnitmix:GeneralCaptureInformationmix:dateTimeCreatedmix:imageProducermix:captureDevicemix:ScannerCapturemix:scannerManufacturermix:scannerModelNamemix:scannerModelNumbermix:scannerModelSerialNomix:maximumOpticalResolutionmix:scanningSoftwareNamemix:scanningSoftwareVersionNomix:digitalCameraManufacturer 4mix:digitalCameraModelName mix:fNumbermix:exposureTimemix:brightnessValuemix:exposureBiasValuemix:subjectDistancemix:meteringMode mix:flashmix:focalLengthmix:flashEnergy mix:backLightmix:exposureIndex mix:autoFocusmix:xPrintAspectRatiomix:yPrintAspectRatiomix:orientationmix:methodologymix:ImageCaptureMetadatamix:ImageAssessmentMetadatamix:samplingFrequencyPlanemix:samplingFrequencyUnitmix:xSamplingFrequency 56mix:ySamplingFrequencymix:ImageColorEncodingmix:bitsPerSamplemix:bitsPerSampleValuemix:bitsPerSampleUnitintegermix:samplesPerPixelmix:extraSamplesmix:colormapReferencemix:grayResponseCurveNmix:grayResponseUnitmix:whitePointXValuemix:whitePointYValuemix:primaryChromaticitiesRedXmix:primaryChromaticitiesRedYmix:primaryChromaticitiesGreenXmix:primaryChromaticitiesGreenYmix:primaryChromaticitiesBlueXmix:primaryChromaticitiesBlueYmix:targetTypemix:targetManufacturermix:targetName mix:targetNomix:targetMediamix:externalTargetmix:performanceDatamix:sourceDatamix:processingAgencymix:ProcessingSoftwaremix:processingSoftwareNamemix:processingSoftwareVersion!mix:processingOperatingSystemName$mix:processingOperatingSystemVersionmix:processingActionshttp://www.loc.gov/mix/v20Khttp://www.loc.gov/mix/v20 http://www.loc.gov/standards/mix/mix20/mix20.xsd      ! big endian little endian UncompressedCCITT 1D Group 3 Fax Group 4 FaxLZWJPEGPackBits "#mix:iccProfileURI mix:lumaRed mix:lumaGreen mix:lumaBlue mix:Component&mix:componentPhotometricInterpretationYCbCrRGB mix:footroom mix:headroommix:SourceInformationmix:MaximumOpticalResolutionmix:xOpticalResolutionmix:yOpticalResolutionmix:resolutionUnitin. mix:distancemix:MinMaxDistancemix:minDistancemix:maxDistanceunknownnormal*normal, image flippednormal, rotated 180�%normal, image flipped, rotated 180�'normal, image flipped, rotated cw 90�normal, rotated ccw 90�(normal, image flipped, rotated ccw 90�normal, rotated cw 90�no absolute unit of measurementcm WhiteIsZero BlackIsZeroRGB PaletteColorTransparencyMaskCMYKYCbCrCIELabICCLabITULabCFA LinearRaw -  xmlns:aeshttp://www.aes.org/audioObject xmlns:tcfhttp://www.aes.org/tcfIDJ4analogDigitalFlag . dispositionValidated by JHOVE schemaVersion1.02baes:audioObject /[[Ljava/lang/String;specificationVersion aes:format 0aes:appSpecificData 1aes:audioDataEncoding  aes:byteOrder BIG_ENDIAN LITTLE_ENDIAN 2Eaes:firstSampleOffset y5useType otherTypeaes:use @ 3 4identifierTypeaes:primaryIdentifier 5.J2 formatRefJ1faceRefJ3label BuiltByJHOVE directionaudioObjectRefFace/edu/harvard/hul/ois/jhove/AESAudioMetadata$Face 6aes:face 7 8 aes:timeline 9 8 .2 : ; aes:region aes:timeRange <aes:numChannels =5J9 faceRegionRef aes:stream channelNum mapLocationaes:channelAssignment >.7edu/harvard/hul/ois/jhove/AESAudioMetadata$FormatRegion FormatRegion ? @ A5aes:formatListaes:formatRegion aes:bitDepthaes:sampleRate aes:wordSizeaes:bitrateReduction aes:codecNameaes:codecNameVersionaes:codecCreatorApplication"aes:codecCreatorApplicationVersionaes:codecQuality aes:dataRateaes:dataRateModetcf:frameCount30 tcf:timeBase1000tcf:videoFieldFIELD_1tcf:countingModeNTSC_NON_DROP_FRAME tcf:framingNOT_APPLICABLExsi:typetcf:ntscFilmFramingType tcf:startTime tcf:hours B tcf:minutes C tcf:seconds D tcf:frames Etcf:sampleRateS tcf:samplestcf:numberOfSamples Ftcf:filmFraming tcf:duration  G H I-_.!~*'();/?:@=+$, J K  L ME NE mix:numeratormix:denominatorline.separator O O4,edu/harvard/hul/ois/jhove/handler/XmlHandler%edu/harvard/hul/ois/jhove/HandlerBaseedu/harvard/hul/ois/jhove/Appjava/util/Iterator'edu/harvard/hul/ois/jhove/OutputHandler edu/harvard/hul/ois/jhove/Module!edu/harvard/hul/ois/jhove/RepInfo'edu/harvard/hul/ois/jhove/PropertyArity&edu/harvard/hul/ois/jhove/PropertyTypejava/util/ListIteratorjava/lang/Object"edu/harvard/hul/ois/jhove/Rationaljava/io/PrintWriter3edu/harvard/hul/ois/jhove/AESAudioMetadata$TimeDesc FaceRegion5edu/harvard/hul/ois/jhove/AESAudioMetadata$FaceRegion#edu/harvard/hul/ois/jhove/AgentType EDUCATIONAL%Ledu/harvard/hul/ois/jhove/AgentType;:(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/AgentType;)V setAddress(Ljava/lang/String;)V setTelephonesetEmail_vendor!Ledu/harvard/hul/ois/jhove/Agent;_levelI getIndentappend-(Ljava/lang/String;)Ljava/lang/StringBuilder;toString()Ljava/lang/String;_writerLjava/io/PrintWriter; elementStartprintlnSynchronizedDateFormat>Ledu/harvard/hul/ois/jhove/HandlerBase$SynchronizedDateFormat;_je%Ledu/harvard/hul/ois/jhove/JhoveBase;#edu/harvard/hul/ois/jhove/JhoveBasegetDate()Ljava/util/Date;  ?&*Y-5@*Y-A*!B78:9\*!:C: YY*Y-L+?)*Y-<+=)*Y-Z+[#)+\:q*Y-]6,*Y^2)*Y-]@+_:"*Y-`)+a:q*Y-b6,*Yc2)*Y-b@+d:O6q*Y-e*Y`6  * Qfg *Yd*Y-e@+h:O6q*Y-P*Y`6  * QRS *Yd*Y-P@+i:   j*Y-k l:  92 ::*Ym)*Y-k@*Y-n+oY:#*Yp)+qY:#*Yr)+sY:#*Yt)*Y-n@+u:  * UV+vY:"*Y-X)+wY:"*Y-I)*Y,>@*Yd\0+-0?&?&<8H++1**f*Y`ZMY,NY-:+x:YYySY*+z{SS:*Y,t|aYY Q)*Yd*Y-@+:  O6  q*Y-*Y`6 * Q*Yd*Y-@+:  "*Y-c )+:  O6  w*Y-6 3*Y Q)*Y-@+:|r*Y-78:9 ::+:**Y-@+:  O6  q*Y-*Y`6 * Q*Yd*Y-@+:  "*Y-X )*Y,t@*Yd{#T--0)))%!=5&=&)36?&=&)*Y`ZNY-:YYSY,SS:*Y-|*YL+)*Y+)+:#*Y)+Y:#*Y)+Y:#*Y)+Y:#*Y)+Y:#*Y)*Y-@*Yd"T))))cW*Y`ZMYYSY+SSN*Y,-+&*YdO*Y`ZMY,N*Y,*Y-+)*Y-+)+:O6s*Y-*Y`6*Q¶V*Yd*Y-@+:O6s*Y`*Y-ĸ6*QŶV*Y-ĸ@*Yd+:"*Y-)+Y:"*Y-)+Y:"*Y-)+Y:"*Y-)+:O6q*Y-θ*Y`6*Q϶Є*Yd*Y-θ@+Y:"*Y-X)*Y,@*Yd8&=&)(((=&(@4*YZdL*Y+Ҹ@*ӱM/*Y`ZLY+M*%*Y+*Ըն*Y+ֶYYSYSSYYSYSSYYSYSSYYLSY*ݶSSYY +??:  6@ +AA:  6ٲB +CC:  6D +:6E +FF:6|  +GG:  6]  +HH:6>  +II:6  +JJ:6+KNL1L2JLKLLr^13579;=?AGCFHIJ@@@XN:::::: : : : : :::::6+:0 +11N-6Ѳ2 +33:64 +55:66 +77:6t8 +99:6U: +;;:66< +==:  6> +??:  6@ +AA:  6ٲB +CC:  6D +:6E +FF:6|  +GG:  6]  +HH:6>  +II:6  +JJ:660 -3M:j2 3N:R4 4O::6 2P:"8 1Q: : 0R:<  .N:ڲ>  /S:²@ * 2#:B  5N:D 2:|E 2T:d  * 2l  *2U  *2>  *2'U:*Y,)Yu$U13579;=?AGCFHIJ U*Y`ZMY,NY-:YYVSYWSSYYSYSSYYSYXSS:*Y,Y|*Y-Z*Y[+\)*Y]+^)*Y_+`)a+b(CYY/SY+\SS:*Yca&&*Yc+b)*Yd+e)*Y-Z@+f/+fK%*Y-g+f)+hv+hKl+iCYYSY+iSS:*Y-j+h&%*Y-j+h)+kv+kKl+lCYYSY+lSS:*Y-m+k&%*Y-m+k)*Y,Y@*Yd'h T"sW!W!  M6n*!o( *+p q*!o( *+r*+s  *Y`ZMYYtSYuSSYYSYSSYYSYvSSN*Y,w-|*+,x*+,y*+,z*+,{*Y,w@*Yd  hY,NY-:Y:Y:Y:*Y-|}YY~:6 +:  ,Y )W6 +Y: ,Y )W6 +6 +6    YW ,Y 4)W ,Y 4)WY@W6 }YY: 6+6/ Y4)W6+:+Y:  YW ) Y )W) Y)W Y@W6+:/ Y)W6+Y6/ Y4)W6+:/ Y)W6+Y:/ Y)W6 Y@W W6 }YY:6+Y6/Y4)W6+:/Y)W6+7/Y)W6+Y:/Y)W6+\7/Y)W6+\7/Y)W6+Y:/Y)W6+Y:/Y)W6Y@WW6 +Y6,Y4)WY~@W *)}YY:6+:  ,Y )W6+7/Y)W6+6+:  YW,Y4)W )Y )WY@W6+6/Y4)W6+6/Y4)W6+7+7 YøW,Y)W,Y)WYø@W6Y@W*)*Y-|@( 2R.&aN* 6=66F53`6?:59955334]:R*&77U1&4  :Y,NY-:Y:Y:Y:*Y-Ƹ+:$*Y)+:$*Y)+:$*Y)}YY͸: 6 +:, Y)W6 +:, Y)W6 +:, Y)W6  Y͸@W * +:$*Y)}YY׸: 6 }YYظ: 6+:, Y)W6+:+:+:  Y޸W, Y)W6, Y)W6, Y)W6 Y޸@W Yظ@W  W6 }YY:6+:,Y)W6+:,Y)W6Y@W W6 }YY:6+9闙/Y)W6+9+9闚 闙YW闙,Y)W闙,Y)WY@W6Y@W W6  Y׸@W * )}YY:6+:,Y)W6+:,Y)W6Y@W*)}YY:6+9闙/Y)W6+9闙/Y)W6+9闙/Y)W6+9闙/Y)W6+:/Y)W6+6/Y4)W6+6/Y4)W6+9闙/Y)W6+ 9闙/Y )W6+ 6/Y 4)W6+ 9闙/Y)W6+6/Y4)W6+6/Y4)W6+9闙/Y)W6+6/Y4)W6+9+9闚 闙YW闙,Y)W闙SY)WY@W6Y@W*)+6'*Y4)+:$*Y)+ :$*Y!)*Y-Ƹ@2 ++]331+ Q--#3]33dU1&34]34d:::6977::7:77:7UX4/++  Y,NY-:Y:Y:Y:Y:}YY": 6 }YY#: 6 +$6  / Y% 4)W6 +&6  / Y' 4)W6 +(:2 Y)*)W6 ++:2 Y,*)W6 +-7/ Y.)W6 +/7/ Y0)W6 +19+26 闚   Y3W闙, Y4)W , Y5 4)W Y3@W6 +69+76 闚   Y8W闙, Y9)W , Y: 4)W Y8@W6  Y#@W   W6 }YY;:6+<:1Y=,>)W6+?6  /Y@ 4)W6+A:@.6  5 /YB 4)W6}YYC:6+D:,YE)W6+F:YGW+H:+I:+J:6)YKW.6  ,YL 4)W.6  ,YM 4)W.6  ,YN 4)W.6  ,YO 4)WYK@Wէ:YG@W6YC@WW6+P:+Q6   YRW,YS)W ,YT 4)WYR@W6+U:+V:YWW,YXT)W,YYT)WYW@W6+Z:{Y[WY\T)W+]:,Y^T)W+_:,Y`T)W+a:,YbT)W+c:,YdT)W+e:,YfT)WY[@W6Y;@W W6 }YYg:6+h6  /Yi 4)W6}YYj:6+k:,Yl)W6+m:,Yn)W6+o:,Yp)W6+q:,Yr)W6Yj@WW6+s:,Yt)W6+u:,Yv)W6+w:,Yx)W6Yg@W W6  Y-"@W * )mL7 799::U.&U.&3b=7G]=====a555)B&-Q.&Q-&3333&3a]333333333@Y,NY-:Y:Y:Y:Y:}YY-y: 6 }YYz: 6 +{:  , Y| )W6 +}:  , Y~ )W6 +:  , Y )W6 }YY:6+:  ,Y )W6+:  ,Y )W6Y@W W6 +:@62 Y2)W6  Yz@W   W6  Y-y@W * )G 33]33 633 *Y`ZMYYtSYSSYYSYSSYYSYSSN*Y,w-|*+,*+,*+,*+,*+,*Y,w@*Ydt#Y,NY-:Y:Y:*Y-}YY:6Y)W+:  ,Y )W6Y@W*)+7  -*Y ))+Y: M  :  : *Y ))+6 +6    }*Y) -*Y 4))*Y@)+6+:  *Y)-*Y4)) **Y ))*Y@*Y@? 48&T$T+0ʻY,NY-:Y:Y:Y:Y:*Y-}YY: 6 +-7  / Y )W6 +/7  / Y )W6 }YY: 6+6/ Y4)W6+:+: YW YW) Y)W) Y)W Y@W Y@W6+:+6+:U YW6 YW Y.4)W Y.4)W Y@W, Y4)W, Y)W Y@W+:/ Y)W6 Y@W  W6  Y@W * *Y-@T :ar*J!=F.-#63+ " YY,NY-:Y:Y:Y:Y:}Y: 6 +:  & Y )W6 +:  b YʸW Y )W Y@W6 +19 +26 闚  YW YW 闙, Y )W, Y4)W Y@W+69 +76 闚  YW 闙, Y )W, Y4)W Y@W Y@W6 }YY:6+:  ,Y )W6+:  ,Y )W6+:  )Y )WY@W W6 }YY:6+:,Y)W6+:+:+: 6Y޸W)Y)W)Y)W)Y)WY޸@W+9+9闙F闙=9Y)W+:  6YWY )W+:  )Y )WY@WY@W W6 }YY:6+:  *YǸȶW6+:  wYWYɸȶ WY@W6}YY:6YtW+9  闙/Y )W6+9  闙/Y )W6+9  闙/Y )W6+9  闙/Y )W6+:1Y1)W6+6/Y4)W6+ 6/Y4)W6+ 9  闙/Y )W6+ 9  闙/Y )W6+6/Y4)W6+9  闙/Y )W6+6/Y4)W6+9 +9  闚  闙YW 闙,Y )W 闙,Y )WY@WYt@WY@WW6Y@W W6 +6/ Y4)W6 + :  ) Y )W K*Y-ڸ* )*Y-ڸ@1 is.>U.#&]303] Q**#*A*#3[~:::8977::7:7U1#W370L=Y,NY-:Y:Y:Y:*Y-۸}YY#:6 +$6  /Y 4)W6 +&6  /Y 4)W6 +(:  * ++:  * Y#@W *}YY: 6 +<: YW Y,>)W Y)W Y@W6 +?6  / Y 4)W6 +A:@.6  5 / Y 4)W6 +D:t YCW Y)W YC@W6 +P:- Y)W6 +Q6  / Y 4)W6 +U: +V: r YWW *  *  YW@W6 }YY[:6+Z:  * 6+]:  * 6+_:  * 6+a:  * 6+c:  * 6+e:  * 6Y[@W W6  Y@W * Ի}YYg:6+h6  /Y 4)W6}YYj:6+k:,Y)W6+m:,Y)W6+o:,Y)W6+q:,Y)W6Yj@WW6+s:,Y)W6+u:,Y)W6Yg@W **Y-۸@q 7+=7G{475&D31a]3333331<Y,NY-:Y:Y:Y:}YY-y:6 YzW+}:  *YȶW6 +:  *YȶW6 }YY: 6 +:  , Y )W6 +:  , Y )W6 +:  , Y )W6 +:  , Y )W6  Y@W  W6 +:  @6 2Y 2)W6 Yz@WY-y@W *B 1]3333 6T *Y`ZMYYtSYSSYYSYSSYYSYSSN*Y,w-|*+,*+,*+,*+,*+, *Y,w@*YdY,NY-:Y:Y:*Y-}YY:Y)W+:)Y)WY@W*)+7  -*Y ))+Y:M  : :*Y))+6 +6  {CKS[cks : 7 : /: ': : : : :    z*Y) **Y ))*Y@)+6+:*Y)-*Y4))**Y))*Y@*Y-@)K h&P Q$T+{Y,NY-:Y:Y:Y:Y:*Y-}YY: 6 +-7  / Y )W6 +/7  / Y )W6 }YY: 6+60 Y*)W6+:+: YW YW) Y)W) Y)W Y@W Y@W6+:+6+: YW6 YW Y.4)W Y.4)W Y@W, Y4)Wx YW* 2* 2* 2 Y@W Y@W+: YW6d4 YW YW+@3#3+33:L:D:<2"2*22::: Y@W*  2* !`2 Y@W Y@W6 Y@W  W6  Y@W * *Y-@l :br*J!=F.#1y#o&3+%Y,NY-:Y:Y:Y:Y:Y: }Y: 6 +: +:+19  闙 Y" )W6  # Y )W_ YʸW Y)W Y@W+26 闚   YW YW闙, Y)W , Y 4)W Y@W+69+76 闚   YW闙, Y)W , Y 4)W Y@W Y@W Y"@W}YY:6+:  ,Y )W6+:  ,Y )W6+:  )Y )WY@W W6 }YY:6+:,Y)W6+:+:+: 6Y޸W)Y)W)Y)W)Y)WY޸@W+9+9闙闙Y#WY$)WY%)WY&')WY#@W+:  6YWY )W+:  )Y )WY@WY@W W6 }YY:6+:  *YǸȶW6+:  wYWYɸȶ WY@W6}YY:6 YtW+9闙/Y)W6 +9闙/Y)W6 +9闙/Y)W6 +9闙/Y)W6 +:!!&YW6 !1!11Y(!1)WY)WY *!1)WY +!1)WY)@WY@W+6  /Y 4)W6 + 6  /Y 4)W6 + 9闙/Y)W6 + 9闙/Y)W6 +6  /Y 4)W6 +9闙/Y)W6 +6  /Y 4)W6 +9+9"闚 "闙YW闙,Y)W"闙,Y)WY@WYt@WY@W W6Y@W W6 +6  ~ Y,SY-SY.SY/SY0SY1SY2SY3SY4S:$  6  Y$ 2)W6 + :  ) Y )W K*Y-ڸ* )*Y-ڸ@g5G`s.>U.###]303] Q**##3[~:::k9#797::7:7U1#W3W+0L Y,NY-:Y:Y:Y:*Y-۸}YY#:6 +$6  /Y 4)W6 +&6  ZYSY5SY'SY6S:    6 Y  2)W6 +(:  * ++:  * Y#@W *}YY: 6 +<: Y=W65 Y.4)W Y)W Y=@W6 +?6  / Y 4)W6 +A:R6G.6  5 / Y 4)W6 +D:t YCW Y)W YC@W6 +P:C65 YS.4)W6 +Q6  / Y 4)W6 +U: +V: r YWW *  *  YW@W6 }YY[:6+Z:  * 6+]:  * 6+_:  * 6+a:  * 6+c:  * 6+e:  * 6Y[@W W6  Y@W * Ի}YYg:6+h6  /Y 4)W6}YYj:6+k:,Y)W6+m:,Y)W6+o:,Y)W6+q:,Y)W6Yj@WW6+s:,Y)W6+u:,Y)W6Yg@W **Y-۸@( 3++[=9M7 E{ 975&D31a]3333331!#һY,NY-:Y:Y:}YY-y:6YzW+}:  *YȶW6+:  *YȶW6}YY: 6 +:  , Y )W6 +:  , Y )W6 +:  , Y )W6 +:  , Y )W6  Y@W  W6+:  @6   2Y  2)W 6Yz@WY-y@W *? 1]3333 6T"#M lsz #L7MM8MF9M?:M8;M1M?M@MAMBM, p$% *Y`*MY,NY-:Y:Y:*+CDYYESYFSSYYGSYHSSYYSYSSYYISYJSSYYKSY+LSSYYMSYNSSYYOSYPSS: *Y,Q |+R:  U+S:T:2US2S 2VS*Y-W &+X:  #*Y-Y )+Z:  #*Y-[ )+\6/*Y-] ^_)+`7&*Y-a)+b:QYYcSY2SSYYdSY2SS:*Y-ef+g:  U+h:T:2iS2S 2VS*Y-j &+k:jYYISYlSSYYmSYnSSYYoSYpSSYYqSYrSS:YYsSYSSYYISYpSSYYtSYJSSYYqSYuSS:Qv:2wS*Y-x|y:P*Yz*{|*Yz@}:*Y~|*Y*|*Y@+6'*Y4)+:6YYISYY4SSYYqSYSSYYSYlSS:*Y|YYSY4SSYYSY2SS:*Yf*Y@*Y~@*Y-x@+:jQ:696:闚 R*Y-YYISYnSS:*Y|'*Y4)闙'*Y)'*Y4)7*Y*Y2)*Y2)*Y2)*Y2)*Y2)*Y2)*Y2)*Y@*Y@*Y-@*Y,Q@*YdM&TT!**(&T'()&T'() 1X1T!F&TTT*+,<&TU&T-T,)8<&T.2W Y+:Y:Y:YYSYSSYYSYSSYYSYSSYYSYSS:YYSYSSYYSYSS:*Y|*Y,4)*Y,4)*Y,4)*Y,4)YYSYVSS: ,9   *D9  2Y 4S*Y |*Y,4)*Y@*Yf*Y@-*Y|*Y-4)*Y-4)*Y-4)*Y-4)-9   *D9  2Y 4S*Y |*Y-4)*Y@*Yf*Y@. ++TTT34  Ż}Y+KhM>6+K+6A Z1a z#0 9% ,WM6z6 70,%W,W~6 70,W>\,+3   " 56 Y-:77+Y-,W+Y)W ++Y)W+Y-,@W 7,  YOY OYOĸų1*/0 v   ] jhove/classes/edu/harvard/hul/ois/jhove/handler/TextHandler.class0000644000707400001440000012347411510702103024304 0ustar garyusers2                        !" #  $ %&  '(  )*  +,  -.  /01  2 3  4 5 6 78 79:  ;< =>? =!  @  AB C> C!D EFG EHIJK C$ CL M NOP Q CRS T CUV CHW =$ =XY Z [ =\] =^_ =`a b =L =c 6de =fg =hi =jk =R =U =H lmn lopqr #s ltu v lwx lyz { l| l}~   l l l l  l l l l  l  >           N N  N N N N N N N  NU   E> E! E$ v     U    b b b b      bU b                  >            8               8 8 8  8 8 8    ! "# $% &' () *+ ,- ./ 01 2 3 45 67 |8 9: ;< => ?@AB CD EF GHIJ K LMN O PQST gU gV W XY Z[ \]^_ `a uc u2 ud uefghi jklmnopqrstuvwxyz {| }~   2                                                                                             !" #$ %& ' () * +, -. /0 12 34 56 7 89 :; <= >? @A B CD EF GH IJ KL MN OP Q RS T UV WX YZ [\ ]^ _` ab c de fg hi jk lm no pq rs tu vw xy z{ |}~ 8   NAMELjava/lang/String; ConstantValueRELEASEDATE[INOTERIGHTS_formatLjava/text/NumberFormat; _sampleRateD()VCodeshow"(Ledu/harvard/hul/ois/jhove/App;)V StackMapTable:,(Ledu/harvard/hul/ois/jhove/OutputHandler;)V%(Ledu/harvard/hul/ois/jhove/Module;)V&(Ledu/harvard/hul/ois/jhove/RepInfo;)V showAgent6(Ledu/harvard/hul/ois/jhove/Agent;Ljava/lang/String;)V showChecksum'(Ledu/harvard/hul/ois/jhove/Checksum;)V showDocument9(Ledu/harvard/hul/ois/jhove/Document;Ljava/lang/String;)VO showFooter showHeadershowIdentifier)(Ledu/harvard/hul/ois/jhove/Identifier;)V showMessage&(Ledu/harvard/hul/ois/jhove/Message;)V showSignature((Ledu/harvard/hul/ois/jhove/Signature;)V showPropertyK(Ledu/harvard/hul/ois/jhove/Property;Ljava/lang/String;Ljava/lang/String;)VshowScalarProperty9(Ledu/harvard/hul/ois/jhove/Property;Ljava/lang/String;)VshowListPropertyshowMapPropertyshowSetPropertyshowArrayPropertyshowTextMDMetadata@(Ledu/harvard/hul/ois/jhove/TextMDMetadata;Ljava/lang/String;Z)VshowAESAudioMetadataB(Ledu/harvard/hul/ois/jhove/AESAudioMetadata;Ljava/lang/String;Z)VQawriteAESTimeRangeTimeDesc InnerClasses(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/AESAudioMetadata$TimeDesc;Ledu/harvard/hul/ois/jhove/AESAudioMetadata$TimeDesc;)VshowNisoImageMetadataC(Ledu/harvard/hul/ois/jhove/NisoImageMetadata;Ljava/lang/String;Z)VshowNisoImageMetadata02showNisoImageMetadata10addIntegerValue)(I[Ljava/lang/String;Z)Ljava/lang/String;+(I[Ljava/lang/String;[IZ)Ljava/lang/String;addRationalValue9(Ledu/harvard/hul/ois/jhove/Rational;Z)Ljava/lang/String;TEXT1.5 (This is the default JHOVE output handlerCopyright 2003-2009 by JSTOR and the President and Fellows of Harvard College. Released under the terms of the GNU Lesser General Public License. edu/harvard/hul/ois/jhove/AgentHarvard University Library  FOffice for Information Systems, 90 Mt. Auburn St., Cambridge, MA 02138 +1 (617) 495-3724 !jhove-support@hulmail.harvard.edu         java/lang/StringBuilder  App:   API:  ,     Configuration:  SAXparser:  JhoveHome:  Encoding:  TempDirectory:  BufferSize:       java/lang/String  Module:     OutputHandler:  Usage:   Rights:  Handler:  Release:  Date:   "edu/harvard/hul/ois/jhove/Document Specification  Vendor   Note: Module:  Format:    Coverage:  MIMEtype: #edu/harvard/hul/ois/jhove/Signature   Feature:  Methodology:  Well-formed:  Validity:  RepresentationInformation:  RepresentationInformation:  ReportingModule: , Rel.  ()  Created:   LastModified:  Size:    Version:  Status:  Well-FormedNot well-formedUnknown  and valid, but not valid  SignatureMatches: !edu/harvard/hul/ois/jhove/Message    Profile:    "edu/harvard/hul/ois/jhove/Checksum :  Type:   Address:  Telephone:  Fax:   Email:   Web:  Checksum:        Author  Publisher  Edition:   Enumeration:  Pages: $edu/harvard/hul/ois/jhove/Identifier    (Rel. java/util/Date Identifier: &edu/harvard/hul/ois/jhove/ErrorMessageErrorMessage: %edu/harvard/hul/ois/jhove/InfoMessage InfoMessage:  Message:    Offset:     !" #$ %&+edu/harvard/hul/ois/jhove/InternalSignature '  ()* Use: +, -.  /.  0.  1.  2.  3 45  "edu/harvard/hul/ois/jhove/Property 65+edu/harvard/hul/ois/jhove/NisoImageMetadata 7  85*edu/harvard/hul/ois/jhove/AESAudioMetadata  95(edu/harvard/hul/ois/jhove/TextMDMetadata java/util/List : java/util/Map ; %< Key:   Key:  java/util/Set =5[Z >5[B ?5[C 5[Ljava/util/Date; @5[D A5[F B5 C5[J D5[Ljava/lang/Object; E5[S F5[Ljava/lang/String; G5%[Ledu/harvard/hul/ois/jhove/Rational;%[Ledu/harvard/hul/ois/jhove/Property;.[Ledu/harvard/hul/ois/jhove/NisoImageMetadata;+[Ledu/harvard/hul/ois/jhove/TextMDMetadata; HI H HJ HK HL HMCharacter_info: N Charset: O Byte_order: P Byte_size: QCharacter_size: R Linebreak: S Language: TMarkup_basis: UMarkup_basis_version: VMarkup_language: WMarkup_language_version: XY  ZAnalogDigitalFlag: [SchemaVersion: Format: \SpecificationVersion: ]AppSpecificData: ^AudioDataEncoding: _ ByteOrder:  BIG_ENDIAN LITTLE_ENDIAN `FirstSampleOffset: a M (Use: UseType:  OtherType: b cPrimaryIdentifier: IdentifierType: d e/edu/harvard/hul/ois/jhove/AESAudioMetadata$FaceFaceFace:  TimeLine: fg hg  i NumChannels: j  kStream: ChannelNum: ChannelAssignment: l7edu/harvard/hul/ois/jhove/AESAudioMetadata$FormatRegion FormatRegion m n o FormatList: FormatRegion: BitDepth:  SampleRate: p K WordSize: BitrateReduction CodecName: codecNameVersion: codecCreatorApplication:  codecCreatorApplicationVersion: codecQuality:  dataRate: dataRateMode:  StartTime:FrameCount: 30TimeBase: 1000VideoField: FIELD_1!CountingMode: NTSC_NON_DROP_FRAMEHours: q Minutes: r Seconds: sFrames: t Samples:  SampleRate: SNumberOfSamples: uFilmFraming: NOT_APPLICABLEType: ntscFilmFramingType Duration:0.2 v   MIMEType: _ wCompressionScheme: x y  zCompressionLevel: { ColorSpace: | } ~ ProfileName:  ProfileURL: YCbCrSubSampling: YCbCrPositioning:   YCbCrCoefficients:  ReferenceBlackWhite:  SegmentType:  StripOffsets: RowsPerStrip: StripByteCounts:  TileWidth:  TileLength:  TileOffsets: TileByteCounts: PlanarConfiguration:  ImageIdentifier: ImageIdentifierLocation:  FileSize: ChecksumMethod:  ChecksumValue:  Orientation:  DisplayOrientation:  XTargetedDisplayAR: YTargetedDisplayAR: PreferredPresentation:  SourceType: ImageProducer: HostComputer: OperatingSystem:  OSVersion: DeviceSource: ScannerManufacturer: ScannerModelName: ScannerModelNumber: ScannerModelSerialNo: ScanningSoftware: ScanningSoftwareVersionNo: Y PixelSize:  YXPhysScanResolution: YYPhysScanResolution: DigitalCameraManufacturer: DigitalCameraModel: Y FNumber: YExposureTime: Y Brightness: YExposureBias: SubjectDistance: MeteringMode:  SceneIlluminant: Y ColorTemp: Y FocalLength: Flash:  Y FlashEnergy:  FlashReturn:   BackLight:  YExposureIndex:  AutoFocus:  YXPrintAspectRatio: YYPrintAspectRatio: Sensor:  DateTimeCreated:  Methodology: SamplingFrequencyPlane:  SamplingFrequencyUnit:  XSamplingFrequency: YSamplingFrequency:  ImageWidth:  ImageLength: YSourceXDimension: SourceXDimensionUnit:  YSourceYDimension: SourceYDimensionUnit: BitsPerSample: SamplesPerPixel: ExtraSamples:  ColormapReference: ColormapBitCodeValue: ColormapRedValue: ColormapGreenValue: ColormapBlueValue: GrayResponseCurve: GrayResponseUnit:  WhitePointXValue:  PrimaryChromaticitiesRedX: PrimaryChromaticitiesRedY: PrimaryChromaticitiesGreenX: PrimaryChromaticitiesGreenY: PrimaryChromaticitiesBlueX: PrimaryChromaticitiesBlueY:  TargetType:  TargetIDManufacturer: TargetIDName:  TargetIDNo: TargetIDMedia:  ImageData: PerformanceData:  Profiles: DateTimeProcessed:  SourceData: ProcessingAgency: ProcessingSoftwareName: ProcessingSoftwareVersion: ProcessingActions: big  big_endianlittle little_endian ImageHeight: iccProfileName: iccProfileURL: SourceIDCaptureDevice: MaximumOpticalResolution: BrightnessValue: ExposureBiasValue: BitsPerSampleUnit: integerExternalTarget: Y K-edu/harvard/hul/ois/jhove/handler/TextHandler%edu/harvard/hul/ois/jhove/HandlerBasejava/util/Iterator'edu/harvard/hul/ois/jhove/OutputHandler edu/harvard/hul/ois/jhove/Module'edu/harvard/hul/ois/jhove/PropertyArity&edu/harvard/hul/ois/jhove/PropertyTypejava/lang/Objectjava/io/PrintWriter3edu/harvard/hul/ois/jhove/AESAudioMetadata$TimeDesc"edu/harvard/hul/ois/jhove/RationalM(Ljava/lang/String;Ljava/lang/String;[ILjava/lang/String;Ljava/lang/String;)V#edu/harvard/hul/ois/jhove/AgentType EDUCATIONAL%Ledu/harvard/hul/ois/jhove/AgentType;:(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/AgentType;)V setAddress(Ljava/lang/String;)V setTelephonesetEmail_vendor!Ledu/harvard/hul/ois/jhove/Agent;java/text/NumberFormat getInstance()Ljava/text/NumberFormat;setGroupingUsed(Z)VsetMinimumFractionDigits(I)V_levelI getIndent(I)Ljava/lang/String;_writerLjava/io/PrintWriter;append-(Ljava/lang/String;)Ljava/lang/StringBuilder;toString()Ljava/lang/String;println_je%Ledu/harvard/hul/ois/jhove/JhoveBase;#edu/harvard/hul/ois/jhove/JhoveBase getReleasedateSynchronizedDateFormat>Ledu/harvard/hul/ois/jhove/HandlerBase$SynchronizedDateFormat;getDate()Ljava/util/Date;45:6L* 78?:*Y,@A<B*Y,C+D*Y,E+F*Yd! ,,,,6RRS*Y`ZM*Y,G+A*Y,H+B*Y,I#+J%+KN-L66*-MNOP+Q: *RS+TY:"*Y,U+VY:"*Y,E'** -*Y`ZM*Y,W+;*Y,H+=*Y,I#+X%+YN-W*Y,Z-2[6-&*Y"-2[*\+]:"*Y,^+_N-W*Y,`-2[6-&*Y"-2[*\+a:L66*Mbc+d:L66*MNOP+e:Df:6178:*Y,g*Y,h+iY:"*Y,j+kY:"*Y,l+mY:"*Y,n+o: *RS+pY:"*Y,U+qY:"*Y,E*YdI$)+.)7D****| *Y`ZM+rN*Y,s+t-M*Y,u-;v-=wx-X%y+z:(*Y,{|%+}:(*Y,~|%+7"*Y,+:"*Y,Z+:"*Y,* *Y,[+)":::+P+I3Y:Y:*H*Y,[+::*+:L6  V*Y,6   2*Y, M8 +:L6 6   * M +:"*Y,`+:L6  g*Y,M8[6   .*Y" M8[ *\+:  7 45:  6 78: *+  ,+:L6 6   * M *YdY//-))B% 005)>1%R1*Y`ZN*Y-,+*Y-++:"*Y-+Y:"*Y-+Y:"*Y-+Y:"*Y-+Y:"*Y-*Yd((((k_*Y`ZM*Y,+*Y,+*Yd*Y`ZN*Y-,+*Y-++:L66*MS+:L66*MS+:"*Y-+Y:"*Y-I+Y:"*Y-+Y:"*Y-+:L66*M„+Y:"*Y-U*Yd5 g)((((*Yd*ı*Y`ZL*Y+*ŶƶǶ*Ŷȶ"#*Ŷɶ%y*Y+IʻY̶%*Y`ZM*Y,Ͷ+ζ*Y,+϶ж+N-!*Y,U-*Yd {*Y`ZM+ҙ N+ԙ NN+:+:Y:*Y,-+7"*Y,ڶ*Yd +K*Y`ZM+ۙ +N+N*Y,+޶߶-+޲1+'*Y,ڶ+2+:"*Y,U+:"*Y,*Ydb),+:, *Y-[&*Y-<,[ *+-Z *+-F *+-2 *+- *+- *\'"+N-4*\+:*Y,<-+*+Y,<* u-+*+Y,<* C-+*+Y,<* *+ @111 w 4+N-6-6-6+:L6 *\6  2 M: *  Y,<0* MY,<* l0* MY,<* : M:  * *Y" [ ' *\1 C :11 N+N-6-6-6+:4:5:  6  7:   : [ : *  Y,< :    *Y  )* Y,<* l)* Y,<* A*Y  *Y  1; w**=I  +N-6-6-6+:5:6 67: + : *  Y,<)* Y,<* c)* Y,<* 8 * [6 !*Y" [5*\,5 ?**3N:::::: : : : : ::::6+:+N-6+:6+:6t+:6U+:66+:6+:  6+:  6ٲ+  :  6!+"":  6#+$$:6|%+&&:6]+'':  6>+((:6+)):66-3*:ʲ3+:4,:2-:1.:j0/:R .+:: /0:" 2: ! 5+:# 2:ݲ%21:Ų9 *\2:*Y,<* 5 *\*2Y,<* s7 *\ 2:*Y,<42:*[*Y"[ *\u'R '"$&())%''Y,<:Y<:*\*Y3+4:$*Y5+6Y:$*Y7+8Y:$*Y9+:Y:$*Y;+Y:$*Y?+@Y:$*YA+BY:$*YC+DY:$*YE+FY:$*YG z*********Y,<:Y<:Y<:Y<:*+HI*\+J:$*YK+L:$*YM+N:$*YO+P:$*YQ+R:$*YS+T:$*YU+V6  0*YW XY+Z7  '*Y[ \+]:  e*Y^*Y_ 2*Y` 2+a:P+b: *Yc $*Yd +e:  f Mg:*Yh*Yij:*kl+m6'*Yno+p:6m*Yq*Yro*Ys2+t:fMu:v6w9x6y:z *Y|*Y}'*Y~oz'*Y'*Yo*Y*Y2*Y2*Y2*Y2*Y2*Y2*Y2) +++++,  2l$Wq/$p $U$$a,)$A  Y+<:Y<:Y<:*Y*Y*Y*Y*Y*Y,o*Y,o*Y,o*Y,o*Y,9 *I9*Yo*Y,o*Y*Y-*Y*Y*Y*Y*Y*Y-o*Y-o*Y-o*Y-o*Y-9 *I9*Yo*Y-o*Y*Y%8"*  *+, *+,pY,<:*\+:$*Y+Y:$*YW+6/*Y*+Y6$*Y2+Y6/*Y*+Y:$*Y+Y:$*Y+:\*Y.2[6'*Y".2[*\+Y6,*Y*+:f*Y*2[6  ,*Y"* 2[ *\+:f*Y*2[6  ,*Y"* 2[ *\+Y6,*Y*+:  \*YĶ /[6   '*Y"  /[ *\+7  $*Yƶ +Y: \*Yȶ /[6   '*Y"  /[ *\+\7 $*Yʶ +\7 $*Y̶ +Y: \*Yζ /[6   '*Y"  /[ *\+Y: \*Yж /[6   '*Y"  /[ *\+Y6,*YҶ*+Y:$*Yն+Y:$*Y׶+\7 $*Yٶ +Y6,*Y۶*+Y:$*Y޶+Y6,*Y*+Y6,*Y*+\7 $*Y +\7 $*Y +Y:$*Y+Y:$*Y+Y:$*Y+Y:$*Y+Y:$*Y+Y:$*Y+Y:$*Y+Y:$*Y+Y:$*Y+Y:$*Y+Y:$*Y+Y:$*Y+Y:$*Y+9  z$*Y +\9 z$*Y +\9 z$*Y  + Y:$*Y + Y:$*Y +\9 z$*Y +\9 z$*Y +\9 z$*Y +\9 z$*Y +:\*Y1[6'*Y"1[*\+Y6,*Y*+Y6,*Y*+\9 z$*Y +\9 z$*Y  +!Y6,*Y"*#+$\9 z$*Y% +&Y6,*Y'*(+)Y6,*Y**++,\9 z$*Y- +.Y6,*Y/*0+1\9 z$*Y2 +3\9 z$*Y4 +5Y6,*Y6*7+8Y:$*Y9+:Y:$*Y;++?Y6,*Y@*A+B:)*YC*+D:)*YE*+F\7 $*YG +H\7 $*YI +J\9 z$*YK +LY6,*YM*N+O\9 z$*YP +QY6,*YR*N+SY:\*YT.2[6'*Y".2[*\+UY6$*YV2+WY:l*YX*.Y[6/*Y"*.Y[*\+ZY:$*Y[+\Y:\*Y].2[6'*Y".2[*\+^Y:\*Y_.2[6'*Y".2[*\+`Y:\*Ya.2[6'*Y".2[*\+bY:\*Yc.2[6'*Y".2[*\+dY:\*Ye.2[6'*Y".2[*\+fY6,*Yg*h+i:)*Yj*+kY:)*Yj*+lY:)*Ym*+nY:)*Yo*+pY:)*Yq*+rY:)*Ys*+tY:)*Yu*+vY:)*Yw*+xY6,*Yy*z+{Y:$*Y|+}Y:$*Y~+Y:$*Y+Y:$*Y+Y:$*Y+Y:$*Y+Y:$*Y+Y:$*Y+Y:$*Y+Y:$*Y+Y:$*Y+Y:$*Y+:\*Y2[6'*Y"2[*\H*7+6**0+35&05030+//+../+/+3**.3*33..*************/..**....0+33..3.33.3..3**3300...3.3/++73*/+/+/+/+/+30///////3************0$+Y,<:*\+Y:$*Yն+\7$*Yٶ+Y:G ::*YW+6/*Y*+Y6$*Y2+Y6,*Y۶*+Y:$*Y޶+F\7$*YG+H\7$*Y+Y6/*Y*+Y:$*Y+Y:$*Y+:  \*Y .2[6   '*Y"  .2[ *\+:  f*Y* 2[6   ,*Y"*  2[ *\+:  f*Y* 2[6   ,*Y"*  2[ *\+Y:$*Y+:$*Y+J\9 z$*YK +LY6,*YM*N+O\9 z$*YP+QY6,*YR*N+8Y:$*Y9+Y:$*Y+Y:$*Y+Y:$*Y+Y:$*Y+Y:$*Y+Y:$*Y+9 +9 zAz8  9*Y+Y:$*Y+Y:$*Y+ Y:$*Y + Y:$*Y +\9 z$*Y +\9 z$*Y +\9 z$*Y +\9 z$*Y +:\*Y1[6'*Y"1[*\+Y6,*Y*+!Y6,*Y"*#+\9 z$*Y  +$\9 z$*Y% +)Y6,*Y**++,\9 z$*Y- +.Y6,*Y/*0+1\9 z$*Y2 +3\9 z$*Y4 +Y6,*Y*+:Y:$*Y;++?Y6,*Y@*A+B:)*YC*+D:)*YE*+SY: x*YT .2[6 '*Y" .2[*\*Y+UY6$*YV2+WY: l*YX* .Y[6 /*Y"* .Y[*\+ZY:$*Y[+dY: \*Ye .2[6 '*Y" .2[*\+fY6,*Yg*h+i:)*Yj*+kY:)*Yj*+lY:)*Ym*+nY:)*Yo*+pY:)*Yq*+rY:)*Ys*+tY:)*Yu*+vY:)*Yw*+xY6,*Yy*z+{Y:$*Y|+}Y:$*Y~+Y:$*Y+Y:$*Y+Y:$*Y+Y:$*Y+Y:$*Y+Y:$*Y+Y:$*Y+Y:$*Y+Y:$*Y+Y:$*Y+:\*Y2[6'*Y"2[*\eG. 7+3*..6**0+5&050*+.3.3********A%****....0+33..3.3..3*3300/+"+73*/+30///////3************0$+>#:, ,2: o:  R:6766--. 6  ,2:6 o:$ $ 7N*+N+1N- # YOY OYO" gR ub % jhove/classes/edu/harvard/hul/ois/jhove/handler/AuditHandler.class0000644000707400001440000001567611510702106024435 0ustar garyusers2               % %  %  /   / /   / /   C C     K K K          / % !"# $% &<' %() *+ , - ./ 0 1 2 3 4 56 $7 8 $9:;NAMELjava/lang/String; ConstantValueRELEASEDATE[INOTERIGHTS_home _mimeTypeLjava/util/Map; _stateMap _stateStackLjava/util/Stack;_t0J_nAuditI()VCode endDirectoryendDirectoryImpl7(Ledu/harvard/hul/ois/jhove/handler/audit/AuditState;)V okToProcess(Ljava/lang/String;)Z StackMapTableokToProcessImplI(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/handler/audit/AuditState;)Zshow&(Ledu/harvard/hul/ois/jhove/RepInfo;)VshowImplZ(Ledu/harvard/hul/ois/jhove/RepInfo;Ledu/harvard/hul/ois/jhove/handler/audit/AuditState;)V:<= showFooter>?@showFooterImpl showHeadershowHeaderImplH(Ljava/lang/String;)Ledu/harvard/hul/ois/jhove/handler/audit/AuditState;startDirectory(Ljava/lang/String;)V6startDirectoryImplAudit1.1 This output handler is derived from the standard JHOVE XML output handler. It is intended to be used as the parent class for other, more interesting handlers.hCopyright 2004-2005 by the President and Fellows of Harvard College. Released under the GNU LGPL license A B Cjava/util/GregorianCalendar D EF GH IJ K Ljava/util/TreeMap java/util/Stack MN2edu/harvard/hul/ois/jhove/handler/audit/AuditState OPQ RS TN UV WX< YZ [V \X ]^java/lang/StringBuilder% bP@ c dP ef2edu/harvard/hul/ois/jhove/handler/audit/AuditCount gV hX iV jX valid well-formednot well-formed not found kl= mV en"edu/harvard/hul/ois/jhove/Checksum opq rs tu vP w xy[Ljava/lang/String;java/lang/Stringhome audit z{ |} ~V ymimestatusmd5file  V 
jhove/classes/edu/harvard/hul/ois/jhove/module/package.html0000644000707400001440000000104510771562771023200 0ustar garyusers Contains the main classes for JHOVE modules. All module classes are subclasses of ModuleBase.
Additional classes for some modules are found in subpackages of edu.harvard.hul.ois.jhove.module jhove/classes/edu/harvard/hul/ois/jhove/module/aiff/0000755000707400001440000000000011510702106021600 5ustar garyusersjhove/classes/edu/harvard/hul/ois/jhove/module/aiff/ExtDouble.class0000644000707400001440000000074711510702104024530 0ustar garyusers2  @ _rawData[B([B)VCodetoDouble()D StackMapTable   /edu/harvard/hul/ois/jhove/module/aiff/ExtDoublejava/lang/Object()Vjava/lang/Mathpow(DD)D!    **+| B*3z<*3x*3=~=Ą766 !*3yB!* 3|B9!k9w90!&jhove/classes/edu/harvard/hul/ois/jhove/module/aiff/AiffStrings.java0000644000707400001440000000150210771562773024706 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.aiff; /** * A class for holding arrays of informative strings that will go into * properties of an AIFF object. * * @author Gary McGath * */ public class AiffStrings { /** A private constructor just to make sure nobody instantiates the class by mistake. */ private AiffStrings () { } /** Strings for looping types in the Instrument Chunk */ public final static String[] LOOP_TYPE = { "No looping", "Forward looping", "Forward/backward looping" }; } jhove/classes/edu/harvard/hul/ois/jhove/module/aiff/AnnotationChunk.java0000644000707400001440000000311310771562774025573 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.aiff; import java.io.*; import edu.harvard.hul.ois.jhove.*; import edu.harvard.hul.ois.jhove.module.AiffModule; import edu.harvard.hul.ois.jhove.module.iff.*; /** * Implementation of the AIFF Annotation Chunk. * * @author Gary McGath * */ public class AnnotationChunk extends TextChunk { /** * Constructor. * * @param module The AIFFModule under which this was called * @param hdr The header for this chunk * @param dstrm The stream from which the AIFF data are being read */ public AnnotationChunk( AiffModule module, ChunkHeader hdr, DataInputStream dstrm) { super(module, hdr, dstrm); } /** Reads a chunk and adds an Annotation property to the * module's list of annotations. * * There can be multiple Annotation Chunks, so we don't * create a property here directly. * * @return false if the chunk is structurally * invalid, otherwise true */ public boolean readChunk(RepInfo info) throws IOException { String name = readText (); ((AiffModule) _module).addAnnotation (new Property (propName, PropertyType.STRING, name)); return true; } } jhove/classes/edu/harvard/hul/ois/jhove/module/aiff/ApplicationChunk.java0000644000707400001440000000570510771562774025735 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.aiff; import java.io.DataInputStream; import java.io.IOException; import edu.harvard.hul.ois.jhove.*; import edu.harvard.hul.ois.jhove.module.AiffModule; import edu.harvard.hul.ois.jhove.module.iff.Chunk; import edu.harvard.hul.ois.jhove.module.iff.ChunkHeader; /** * Implementation of the AIFF Application Chunk. * * @author Gary McGath * */ public class ApplicationChunk extends Chunk { /** * Constructor. * * @param module The AIFFModule under which this was called * @param hdr The header for this chunk * @param dstrm The stream from which the AIFF data are being read */ public ApplicationChunk( AiffModule module, ChunkHeader hdr, DataInputStream dstrm) { super(module, hdr, dstrm); } /** Reads a chunk and puts an Application property into * the RepInfo object. * * @return false if the chunk is structurally * invalid, otherwise true */ public boolean readChunk(RepInfo info) throws IOException { AiffModule module = (AiffModule) _module; String applicationSignature = module.read4Chars (_dstream); byte[] data = new byte[(int) (bytesLeft - 4)]; ModuleBase.readByteBuf (_dstream, data, _module); Property[] propArr = new Property[2]; propArr[0] = new Property ("ApplicationSignature", PropertyType.STRING, applicationSignature); AESAudioMetadata aes = module.getAESMetadata (); aes.setAppSpecificData(applicationSignature); // If the application signature is 'pdos' or 'stoc', // then the beginning of the data area is a Pascal // string naming the application. Otherwise, we // just report the raw data. ('pdos' is for Apple II // applications, 'stoc' for the entire non-Apple world.) if ("stoc".equals (applicationSignature) || "pdos".equals (applicationSignature)) { String appName = module.readPascalString(_dstream); bytesLeft -= appName.length() + 1; module.skipBytes (_dstream, (int) bytesLeft, module); propArr[1] = new Property ("ApplicationName", PropertyType.STRING, appName); } else { propArr[1] = new Property ("Data", PropertyType.BYTE, PropertyArity.ARRAY, data); } module.addAiffProperty (new Property ("Application", PropertyType.PROPERTY, PropertyArity.ARRAY, propArr)); return true; } } jhove/classes/edu/harvard/hul/ois/jhove/module/aiff/AudioRecChunk.java0000644000707400001440000000443010771562774025157 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.aiff; import java.io.DataInputStream; import java.io.IOException; import edu.harvard.hul.ois.jhove.*; import edu.harvard.hul.ois.jhove.module.AiffModule; import edu.harvard.hul.ois.jhove.module.iff.Chunk; import edu.harvard.hul.ois.jhove.module.iff.ChunkHeader; /** * Implementation of the AIFF Audio Recording Chunk. * * The data bytes are put into an uninterpreted byte array * Property. These are specified in the AES Recommended * Practice for Digital Audio Engineering - Serial Transmission * Format for Linearly Represented Digital Audio Data, * Section 7.1, Channel Status Data. * * @author Gary McGath * */ public class AudioRecChunk extends Chunk { /** * Constructor. * * @param module The AIFFModule under which this was called * @param hdr The header for this chunk * @param dstrm The stream from which the AIFF data are being read */ public AudioRecChunk( AiffModule module, ChunkHeader hdr, DataInputStream dstrm) { super(module, hdr, dstrm); } /** Reads a chunk and puts an AudioRecording property into * the RepInfo object. * * @return false if the chunk is structurally * invalid, otherwise true */ public boolean readChunk(RepInfo info) throws IOException { AiffModule module = (AiffModule) _module; if (bytesLeft != 24) { // This chunk must always have exactly 24 bytes data info.setMessage (new ErrorMessage ("Audio Recording Chunk is incorrect size", module.getNByte ())); info.setWellFormed (false); return false; } byte[] buf = new byte[24]; ModuleBase.readByteBuf (_dstream, buf, module); module.addAiffProperty (new Property ("AudioRecording", PropertyType.BYTE, PropertyArity.ARRAY, buf)); return true; } } jhove/classes/edu/harvard/hul/ois/jhove/module/aiff/AuthorChunk.java0000644000707400001440000000175510771562774024735 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.aiff; import java.io.DataInputStream; import edu.harvard.hul.ois.jhove.module.AiffModule; import edu.harvard.hul.ois.jhove.module.iff.*; /** * Implementation of the AIFF Author Chunk. * * @author Gary McGath * */ public class AuthorChunk extends TextChunk { /** * Constructor. * * @param module The AIFFModule under which this was called * @param hdr The header for this chunk * @param dstrm The stream from which the AIFF data are being read */ public AuthorChunk( AiffModule module, ChunkHeader hdr, DataInputStream dstrm) { super(module, hdr, dstrm); propName = "Author"; } } jhove/classes/edu/harvard/hul/ois/jhove/module/aiff/CommentsChunk.java0000644000707400001440000000605110771562775025253 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.aiff; import java.io.DataInputStream; import java.io.IOException; import java.util.*; import edu.harvard.hul.ois.jhove.*; import edu.harvard.hul.ois.jhove.module.AiffModule; import edu.harvard.hul.ois.jhove.module.iff.*; /** * Implementation of the AIFF Comments Chunk. * * @author Gary McGath * */ public class CommentsChunk extends Chunk { /** * Constructor. * * @param module The AIFFModule under which this was called * @param hdr The header for this chunk * @param dstrm The stream from which the AIFF data are being read */ public CommentsChunk (AiffModule module, ChunkHeader hdr, DataInputStream dstrm) { super(module, hdr, dstrm); } /** Reads a chunk and puts a Comments property into * the RepInfo object. * * @return false if the chunk is structurally * invalid, otherwise true */ public boolean readChunk(RepInfo info) throws IOException { AiffModule module = (AiffModule) _module; int numComments = module.readUnsignedShort (_dstream); bytesLeft -= 2; if (numComments == 0) { return true; // trivial case } // Create a List of comment properties List comments = new ArrayList (numComments); for (int i = 0; i < numComments; i++) { long timestamp = module.readUnsignedInt (_dstream); Date jTimestamp = module.timestampToDate (timestamp); int marker = module.readSignedShort (_dstream); int count = module.readUnsignedShort (_dstream); bytesLeft -= 8; byte[] buf = new byte[count]; ModuleBase.readByteBuf(_dstream, buf, module); bytesLeft -= count; /* Ensure that each byt is a printable ASCII character. */ for (int j=0; j 127) { buf[j] = 32; } } String comment = new String (buf, "ASCII"); // Build the property for one comment Property[] comAr = new Property[2]; comAr[0] = new Property ("Timestamp", PropertyType.DATE, jTimestamp); comAr[1] = new Property ("CommentText", PropertyType.STRING, comment); comments.add (new Property ("Comment", PropertyType.PROPERTY, PropertyArity.ARRAY, comAr)); } module.addAiffProperty(new Property ("Comments", PropertyType.PROPERTY, PropertyArity.LIST, comments)); return true; } } jhove/classes/edu/harvard/hul/ois/jhove/module/aiff/CommonChunk.java0000644000707400001440000001453010771562774024716 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College * **********************************************************************/ package edu.harvard.hul.ois.jhove.module.aiff; import edu.harvard.hul.ois.jhove.*; import java.io.DataInputStream; import java.io.IOException; import edu.harvard.hul.ois.jhove.module.AiffModule; import edu.harvard.hul.ois.jhove.module.iff.*; /** * The AIFF Common chunk. * * @author Gary McGath * */ public class CommonChunk extends Chunk { /** * Constructor. * * @param module The AIFFModule under which this was called * @param hdr The header for this chunk * @param dstrm The stream from which the AIFF data are being read */ public CommonChunk( AiffModule module, ChunkHeader hdr, DataInputStream dstrm) { super(module, hdr, dstrm); } /** Reads a chunk and puts various properties into * the RepInfo object. * * @return false if the chunk is structurally * invalid, otherwise true */ public boolean readChunk(RepInfo info) throws IOException { AiffModule module = (AiffModule) _module; int numChannels = module.readUnsignedShort (_dstream); long numSampleFrames = module.readUnsignedInt (_dstream); int sampleSize = module.readUnsignedShort (_dstream); bytesLeft -= 8; String compressionType = null; String compressionName = null; double sampleRate = module.read80BitDouble (_dstream); bytesLeft -= 10; if (module.getFileType () == AiffModule.AIFCTYPE) { if (bytesLeft == 0) { // This is a rather special case, but testing did turn up // a file that misbehaved in this way. info.setMessage (new ErrorMessage ("Common Chunk in AIFF-C does not have compression type", module.getNByte())); info.setWellFormed (false); return false; } compressionType = module.read4Chars (_dstream); // According to David Ackerman, the compression type can // change the endianness of the document. if (compressionType.equals ("sowt")) { module.setEndian (false); // little-endian } bytesLeft -= 4; compressionName = module.readPascalString (_dstream); bytesLeft -= compressionName.length () + 1; } AESAudioMetadata aes = module.getAESMetadata (); aes.setBitDepth (sampleSize); aes.setSampleRate (sampleRate); aes.setNumChannels (numChannels); setChannelLocations (aes, numChannels); //aes.setDuration ((double) numSampleFrames / sampleRate); aes.setDuration (numSampleFrames); module.addAiffProperty (new Property ("SampleFrames", PropertyType.LONG, new Long (numSampleFrames))); // Proper handling of compression type should depend // on whether raw output is set if (compressionType != null) { module.addAiffProperty (new Property ("CompressionType", PropertyType.STRING, compressionType)); if (compressionType.equals ("NONE")) { } else if (compressionType.equals ("raw ")) { aes.setAudioDataEncoding ("PCM 8-bit offset-binary"); } else if (compressionType.equals ("twos")) { aes.setAudioDataEncoding ("PCM 16-bit twos-complement big-endian"); } else if (compressionType.equals ("sowt")) { aes.setAudioDataEncoding ("PCM 16-bit twos-complement little-endian"); } else if (compressionType.equals ("fl32")) { aes.setAudioDataEncoding ("PCM 32-bit integer"); } else if (compressionType.equals ("fl64")) { aes.setAudioDataEncoding ("PCM 64-bit floating point"); } else if (compressionType.equals ("in24")) { aes.setAudioDataEncoding ("PCM 24-bit integer"); } else if (compressionType.equals ("in32")) { aes.setAudioDataEncoding ("PCM 32-bit integer"); } else { aes.setAudioDataEncoding (compressionName); // The size of the data after compression isn't available // from the Common chunk, so we mark it as "unknown." // With a bit more sophistication, we could combine the // information from here and the Sound Data chunk to get // the effective byte rate, but we're about to release. String name = compressionName; if (name == null || name.length () == 0) { name = compressionType; } aes.setBitrateReduction (compressionName, "", "", "", "LOSSY", "UNKNOWN", "FIXED"); } } if (compressionName != null && compressionName.length () > 0) { module.addAiffProperty (new Property ("CompressionName", PropertyType.STRING, compressionName)); } return true; } /* Assign channel locationss according to the number of * channels and the standard AIFF assignment. */ private void setChannelLocations (AESAudioMetadata aes, int numChannels) { String[] mapLoc = new String[numChannels]; switch (numChannels) { case 1: mapLoc[0] = "UNKNOWN"; break; // There are two 4-channel alternatives. Pick one. case 4: mapLoc[3] = "SURROUND"; // fall through to case 3 case 3: mapLoc[2] = "CENTER"; // fall through to case 2 case 2: mapLoc[0] = "LEFT"; mapLoc[1] = "RIGHT"; break; case 6: mapLoc[0] = "LEFT"; mapLoc[1] = "LEFT_CENTER"; mapLoc[2] = "CENTER"; mapLoc[3] = "RIGHT"; mapLoc[4] = "RIGHT_CENTER"; mapLoc[5] = "SURROUND"; break; // If we get some other number of channels, punt. default: for (int i = 0; i < numChannels; i++) { mapLoc[i] = "UNKNOWN"; } } aes.setMapLocations(mapLoc); } } jhove/classes/edu/harvard/hul/ois/jhove/module/aiff/CopyrightChunk.java0000644000707400001440000000177110771562774025441 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.aiff; import java.io.DataInputStream; import edu.harvard.hul.ois.jhove.module.AiffModule; import edu.harvard.hul.ois.jhove.module.iff.*; /** * Implementation of the AIFF Copyright Chunk. * * @author Gary McGath * */ public class CopyrightChunk extends TextChunk { /** * Constructor. * * @param module The AIFFModule under which this was called * @param hdr The header for this chunk * @param dstrm The stream from which the AIFF data are being read */ public CopyrightChunk( AiffModule module, ChunkHeader hdr, DataInputStream dstrm) { super(module, hdr, dstrm); propName = "Copyright"; } } jhove/classes/edu/harvard/hul/ois/jhove/module/aiff/ExtDouble.java0000644000707400001440000000526410771562773024373 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.aiff; /** * Code to deal with the 80-bit floating point (extended double) * numbers which occur in AIFF files. Should also be applicable * in general. * * Java has no built-in support for IEEE 754 extended double numbers. * Thus, we have to unpack the number and convert it to a double by * hand. There is, of course, loss of precision. * * This isn't designed for high-precision work; as the standard * disclaimer says, don't use it for life support systems or nuclear * power plants. * * @author Gary McGath * */ public class ExtDouble { byte[] _rawData; /** * Constructor. * * @param rawData A 10-byte array representing the number * in the sequence in which it was stored. */ public ExtDouble(byte[] rawData) { _rawData = rawData; } /** Convert the value to a Java double. This results in * loss of precision. If the number is out of range, * results aren't guaranteed. */ public double toDouble () { int sign; int exponent; long mantissa = 0; // Extract the sign bit. sign = _rawData[0] >> 7; // Extract the exponent. It's stored with a // bias of 16383, so subtract that off. // Also, the mantissa is between 1 and 2 (i.e., // all but 1 digits are to the right of the binary point, so // we take 62 (not 63: see below) off the exponent for that. exponent = (_rawData[0] << 8) | _rawData[1]; exponent &= 0X7FFF; // strip off sign bit exponent -= (16383 + 62); // 1 is added to the "real" exponent // Extract the mantissa. It's 64 bits of unsigned // data, but a long is a signed number, so we have to // discard the LSB. We'll lose more than that converting // to double anyway. This division by 2 is the reason for // adding an extra 1 to the exponent above. int shifter = 55; for (int i = 2; i < 9; i++) { mantissa |= ((long) _rawData[i] & 0XFFL) << shifter; shifter -= 8; } mantissa |= _rawData[9] >>> 1; // Now put it together in a floating point number. double val = Math.pow (2, exponent); val *= mantissa; if (sign != 0) { val = -val; } return val; } } jhove/classes/edu/harvard/hul/ois/jhove/module/aiff/FormatVersionChunk.java0000644000707400001440000000345610771562774026271 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College * **********************************************************************/ package edu.harvard.hul.ois.jhove.module.aiff; import edu.harvard.hul.ois.jhove.*; import edu.harvard.hul.ois.jhove.module.AiffModule; import edu.harvard.hul.ois.jhove.module.iff.*; import java.io.*; import java.util.*; /** * Implementation of the AIFF Format Version Chunk. * This chunk occurs only in the AIFF/C variant. * * @author Gary McGath * */ public class FormatVersionChunk extends Chunk { /** * Constructor. * * @param module The AIFFModule under which this was called * @param hdr The header for this chunk * @param dstrm The stream from which the AIFF data are being read */ public FormatVersionChunk ( AiffModule module, ChunkHeader hdr, DataInputStream dstrm) { super (module, hdr, dstrm); } /** Reads a chunk and puts a FormatVersion property into * the RepInfo object. * * @return false if the chunk is structurally * invalid, otherwise true */ public boolean readChunk (RepInfo info) throws IOException { AiffModule module = (AiffModule) _module; long timestamp = module.readUnsignedInt (_dstream); // The timestamp is in seconds since January 1, 1904. // We must convert to Java time. Date jTimestamp = module.timestampToDate (timestamp); module.addAiffProperty (new Property ("FormatVersion", PropertyType.DATE, jTimestamp)); return true; } } jhove/classes/edu/harvard/hul/ois/jhove/module/aiff/InstrumentChunk.java0000644000707400001440000001106110771562774025632 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.aiff; import java.io.DataInputStream; import java.io.IOException; import java.util.*; import edu.harvard.hul.ois.jhove.RepInfo; import edu.harvard.hul.ois.jhove.*; import edu.harvard.hul.ois.jhove.module.AiffModule; import edu.harvard.hul.ois.jhove.module.iff.*; /** * Implementation of the AIFF Instrument Chunk. * * @author Gary McGath * */ public class InstrumentChunk extends Chunk { /** * Constructor. * * @param module The AIFFModule under which this was called * @param hdr The header for this chunk * @param dstrm The stream from which the AIFF data are being read */ public InstrumentChunk( AiffModule module, ChunkHeader hdr, DataInputStream dstrm) { super(module, hdr, dstrm); } /** Reads a chunk and puts an Instrument property into * the RepInfo object. * * @return false if the chunk is structurally * invalid, otherwise true */ public boolean readChunk(RepInfo info) throws IOException { AiffModule module = (AiffModule) _module; int baseNote = ModuleBase.readUnsignedByte (_dstream, module); int detune = ModuleBase.readSignedByte (_dstream, module); int lowNote = ModuleBase.readUnsignedByte (_dstream, module); int highNote = ModuleBase.readUnsignedByte (_dstream, module); int lowVelocity = ModuleBase.readUnsignedByte (_dstream, module); int highVelocity = ModuleBase.readUnsignedByte (_dstream, module); int gain = module.readSignedShort (_dstream); Loop sustainLoop = readLoop (module); Loop releaseLoop = readLoop (module); List propList = new ArrayList (9); propList.add (new Property ("BaseNote", PropertyType.INTEGER, new Integer (baseNote))); propList.add (new Property ("Detune", PropertyType.INTEGER, new Integer (detune))); propList.add (new Property ("LowNote", PropertyType.INTEGER, new Integer (lowNote))); propList.add (new Property ("HighNote", PropertyType.INTEGER, new Integer (highNote))); propList.add (new Property ("LowVelocity", PropertyType.INTEGER, new Integer (lowVelocity))); propList.add (new Property ("HighVelocity", PropertyType.INTEGER, new Integer (highVelocity))); propList.add (new Property ("Gain", PropertyType.INTEGER, new Integer (gain))); propList.add (sustainLoop.loopProp("SustainLoop")); propList.add (releaseLoop.loopProp("ReleaseLoop")); module.addAiffProperty(new Property ("Instrument", PropertyType.PROPERTY, PropertyArity.LIST, propList)); return true; } private Loop readLoop (AiffModule module) throws IOException { int playMode = module.readSignedShort(_dstream); int beginLoop = module.readUnsignedShort (_dstream); int endLoop = module.readUnsignedShort (_dstream); return new Loop (playMode, beginLoop, endLoop); } /* Local class for encapsulating the Loop structure */ private class Loop { public int playMode; public int beginLoop; public int endLoop; public Loop (int playMode, int beginLoop, int endLoop) { this.playMode = playMode; this.beginLoop = beginLoop; this.endLoop = endLoop; } public Property loopProp (String name) { Property[] propArr = new Property[3]; propArr[0] = _module.addIntegerProperty("PlayMode", playMode, AiffStrings.LOOP_TYPE); propArr[1] = new Property ("BeginLoop", PropertyType.INTEGER, new Integer (beginLoop)); propArr[2] = new Property ("EndLoop", PropertyType.INTEGER, new Integer (endLoop)); return new Property (name, PropertyType.PROPERTY, PropertyArity.ARRAY, propArr); } } } jhove/classes/edu/harvard/hul/ois/jhove/module/aiff/MarkerChunk.java0000644000707400001440000000507210771562774024710 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.aiff; import java.io.DataInputStream; import java.io.IOException; import java.util.*; import edu.harvard.hul.ois.jhove.*; import edu.harvard.hul.ois.jhove.module.AiffModule; import edu.harvard.hul.ois.jhove.module.iff.*; /** * The AIFF Marker chunk. * * @author Gary McGath * */ public class MarkerChunk extends Chunk { /** * Constructor. * * @param module The AIFFModule under which this was called * @param hdr The header for this chunk * @param dstrm The stream from which the AIFF data are being read */ public MarkerChunk( AiffModule module, ChunkHeader hdr, DataInputStream dstrm) { super(module, hdr, dstrm); } /** Reads a chunk and puts a Markers property into * the RepInfo object. * * @return false if the chunk is structurally * invalid, otherwise true */ public boolean readChunk(RepInfo info) throws IOException { AiffModule module = (AiffModule) _module; int numMarkers = module.readUnsignedShort (_dstream); if (numMarkers == 0) { return true; // trivial but legal case } List markerList = new ArrayList (numMarkers); for (int i = 0; i < numMarkers; i++) { int id = module.readUnsignedShort (_dstream); long position = module.readUnsignedInt (_dstream); String markerName = module.readPascalString(_dstream); Property[] mArr = new Property[3]; mArr[0] = new Property ("ID", PropertyType.INTEGER, new Integer (id)); mArr[1] = new Property ("Position", PropertyType.LONG, new Long (position)); mArr[2] = new Property ("Name", PropertyType.STRING, markerName); markerList.add (new Property ("Marker", PropertyType.PROPERTY, PropertyArity.ARRAY, mArr)); } module.addAiffProperty (new Property ("Markers", PropertyType.PROPERTY, PropertyArity.LIST, markerList)); return true; } } jhove/classes/edu/harvard/hul/ois/jhove/module/aiff/MidiChunk.java0000644000707400001440000000341310771562773024345 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.aiff; import java.io.DataInputStream; import java.io.IOException; import edu.harvard.hul.ois.jhove.*; import edu.harvard.hul.ois.jhove.module.AiffModule; import edu.harvard.hul.ois.jhove.module.iff.Chunk; import edu.harvard.hul.ois.jhove.module.iff.ChunkHeader; /** * Implementation of the AIFF MIDI Chunk. * * @author Gary McGath * */ public class MidiChunk extends Chunk { /** * Constructor. * * @param module The AIFFModule under which this was called * @param hdr The header for this chunk * @param dstrm The stream from which the AIFF data are being read */ public MidiChunk( AiffModule module, ChunkHeader hdr, DataInputStream dstrm) { super(module, hdr, dstrm); } /** Reads a chunk and puts an MIDI property into * the RepInfo object. * * @return false if the chunk is structurally * invalid, otherwise true */ public boolean readChunk(RepInfo info) throws IOException { AiffModule module = (AiffModule) _module; if (bytesLeft == 0) { return true; // dubious, but call it legal } byte[] buf = new byte[(int) bytesLeft]; ModuleBase.readByteBuf (_dstream, buf, _module); module.addMidi (new Property ("MIDI", PropertyType.BYTE, PropertyArity.ARRAY, buf)); return true; } } jhove/classes/edu/harvard/hul/ois/jhove/module/aiff/NameChunk.java0000644000707400001440000000174410771562773024350 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.aiff; import java.io.DataInputStream; import edu.harvard.hul.ois.jhove.module.AiffModule; import edu.harvard.hul.ois.jhove.module.iff.*; /** * Implementation of the AIFF Name Chunk. * * @author Gary McGath * */ public class NameChunk extends TextChunk { /** * Constructor. * * @param module The AIFFModule under which this was called * @param hdr The header for this chunk * @param dstrm The stream from which the AIFF data are being read */ public NameChunk( AiffModule module, ChunkHeader hdr, DataInputStream dstrm) { super(module, hdr, dstrm); propName = "Name"; } } jhove/classes/edu/harvard/hul/ois/jhove/module/aiff/SaxelChunk.java0000644000707400001440000000576010771562774024547 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.aiff; import java.io.DataInputStream; import java.io.IOException; //import java.util.*; import edu.harvard.hul.ois.jhove.*; import edu.harvard.hul.ois.jhove.module.AiffModule; import edu.harvard.hul.ois.jhove.module.iff.Chunk; import edu.harvard.hul.ois.jhove.module.iff.ChunkHeader; /** * Implementation of the AIFF Saxel (Sound Accelerator) Chunk. * * The Saxel chunk has only a tentative and incomplete status in the * AIFF-C draft of 1991, and apparently nothing further was * ever done with it. For purposes of extracting parameters, * we treat the description of the SaxelChunk and Saxels as * valid, while regarding the SaxelData as opaque. * * @author Gary McGath * */ public class SaxelChunk extends Chunk { /** * Constructor. * * @param module The AIFFModule under which this was called * @param hdr The header for this chunk * @param dstrm The stream from which the AIFF data are being read */ public SaxelChunk( AiffModule module, ChunkHeader hdr, DataInputStream dstrm) { super(module, hdr, dstrm); } /** Reads a chunk and puts a "Saxels" property into * the RepInfo object. * * @return false if the chunk is structurally * invalid, otherwise true * */ public boolean readChunk(RepInfo info) throws IOException { AiffModule module = (AiffModule) _module; int numSaxels = module.readUnsignedShort (_dstream); bytesLeft -= 2; if (numSaxels == 0) { return true; // trivial case } // Create a List of properties for (int i = 0; i < numSaxels; i++) { // Multiple saxel chunks are allowed, of which // each can have multiple saxels. We put them // all together into a single saxel list in // the module. Property[] propArr = new Property[2]; int id = module.readUnsignedShort (_dstream); int size = module.readUnsignedShort (_dstream); // Just skip the actual data. module.skipBytes (_dstream, size, module); // Build the property to add to the saxel list. propArr[0] = new Property ("ID", PropertyType.INTEGER, new Integer (id)); propArr[1] = new Property ("Size", PropertyType.INTEGER, new Integer (size)); module.addSaxel (new Property ("Saxel", PropertyType.PROPERTY, PropertyArity.ARRAY, propArr)); } return true; } } jhove/classes/edu/harvard/hul/ois/jhove/module/aiff/SoundDataChunk.java0000644000707400001440000000431110771562773025343 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.aiff; import edu.harvard.hul.ois.jhove.*; import edu.harvard.hul.ois.jhove.module.AiffModule; import edu.harvard.hul.ois.jhove.module.iff.*; import java.io.DataInputStream; import java.io.IOException; /** * Implementation of the AIFF Sound Data Chunk. * * @author Gary McGath * */ public class SoundDataChunk extends Chunk { /** * Constructor. * * @param module The AIFFModule under which this was called * @param hdr The header for this chunk * @param dstrm The stream from which the AIFF data are being read */ public SoundDataChunk (AiffModule module, ChunkHeader hdr, DataInputStream dstrm) { super(module, hdr, dstrm); } /** Reads a chunk and puts a SoundData property into * the RepInfo object. * * @return false if the chunk is structurally * invalid, otherwise true */ public boolean readChunk(RepInfo info) throws IOException { AiffModule module = (AiffModule) _module; Property[] propArray = new Property[3]; long offset = module.readUnsignedInt (_dstream); long blockSize = module.readUnsignedInt (_dstream); propArray[0] = new Property ("Offset", PropertyType.LONG, new Long (offset)); propArray[1] = new Property ("BlockSize", PropertyType.LONG, new Long (blockSize)); propArray[2] = new Property ("DataLength", PropertyType.LONG, new Long (bytesLeft - 8)); module.addAiffProperty(new Property ("SoundData", PropertyType.PROPERTY, PropertyArity.ARRAY, propArray)); // This must be called precisely at this point in reading the // data stream to produce an accurate result. module.markFirstSampleOffset (offset); module.skipBytes (_dstream, (int) (bytesLeft - 8), module); return true; } } jhove/classes/edu/harvard/hul/ois/jhove/module/aiff/TextChunk.java0000644000707400001440000000451110771562773024407 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.aiff; import java.io.DataInputStream; import java.io.IOException; import edu.harvard.hul.ois.jhove.*; import edu.harvard.hul.ois.jhove.module.AiffModule; import edu.harvard.hul.ois.jhove.module.iff.*; /** * Abstract superclass for the name, author, copyright, * and annotation chunks, all of which have the same * format. * * @author Gary McGath * */ public abstract class TextChunk extends Chunk { /** Name of the property. The subclass constructor * must set this appropriately. */ protected String propName; /** * Constructor. * * @param module The AIFFModule under which this was called * @param hdr The header for this chunk * @param dstrm The stream from which the AIFF data are being read */ public TextChunk (AiffModule module, ChunkHeader hdr, DataInputStream dstrm) { super(module, hdr, dstrm); } /** Reads a chunk and puts appropriate information into * the RepInfo object. * * This method works for TextChunk, CopyrightChunk and * AuthorChunk. AnnotationChunk overrides it, since there * can be multiple annotations. */ public boolean readChunk (RepInfo info) throws IOException { AiffModule module = (AiffModule) _module; String name = readText (); module.addAiffProperty (new Property (propName, PropertyType.STRING, name)); return true; } /** * Reads the chunk's text data. * All text chunk subclasses consist of a text string * which takes up the full byte count of the chunk. * By the specification, the text is required to be ASCII. */ protected String readText () throws IOException { byte[] buf = new byte[(int) bytesLeft]; ModuleBase.readByteBuf (_dstream, buf, _module); /* Ensure that each byt is a printable ASCII character. */ for (int i=0; i 127) { buf[i] = 32; } } return new String (buf, "ASCII"); } } jhove/classes/edu/harvard/hul/ois/jhove/module/aiff/build.xml0000644000707400001440000000206611204567557023450 0ustar garyusers JPEG module build file Jhove - JSTOR/Harvard Object Validation Environment Version 1.0 2004-05-05 Copyright 2004 by JSTOR and the President and Fellows of Harvard College jhove/classes/edu/harvard/hul/ois/jhove/module/aiff/package.html0000644000707400001440000000061010771562775024106 0ustar garyusers Contains supporting classes for the AIFF-HUL module.

jhove/classes/edu/harvard/hul/ois/jhove/module/aiff/AiffStrings.class0000644000707400001440000000055511510702104025051 0ustar garyusers2   LOOP_TYPE[Ljava/lang/String;()VCode java/lang/String No loopingForward loopingForward/backward looping 1edu/harvard/hul/ois/jhove/module/aiff/AiffStringsjava/lang/Object!   *  #YSYSYSjhove/classes/edu/harvard/hul/ois/jhove/module/aiff/ApplicationChunk.class0000644000707400001440000000453411510702104026067 0ustar garyusers2z / 01 2 3 4 5678 9: ; < =>? @AB C @D EFG 9H IJ KL 9M NOP{(Ledu/harvard/hul/ois/jhove/module/AiffModule;Ledu/harvard/hul/ois/jhove/module/iff/ChunkHeader;Ljava/io/DataInputStream;)VCode readChunk&(Ledu/harvard/hul/ois/jhove/RepInfo;)Z StackMapTableOQ1RSTU ExceptionsV W XY+edu/harvard/hul/ois/jhove/module/AiffModule Z[ \] ^_` ab"edu/harvard/hul/ois/jhove/PropertyApplicationSignaturec de f ghU ijstocR klpdos m] no pqApplicationNameData res tu v Application we xy6edu/harvard/hul/ois/jhove/module/aiff/ApplicationChunk*edu/harvard/hul/ois/jhove/module/iff/Chunk!edu/harvard/hul/ois/jhove/RepInfojava/lang/String[B%[Ledu/harvard/hul/ois/jhove/Property;*edu/harvard/hul/ois/jhove/AESAudioMetadatajava/io/IOExceptiont(Ledu/harvard/hul/ois/jhove/ModuleBase;Ledu/harvard/hul/ois/jhove/module/iff/ChunkHeader;Ljava/io/DataInputStream;)V_module&Ledu/harvard/hul/ois/jhove/ModuleBase;_dstreamLjava/io/DataInputStream; read4Chars-(Ljava/io/DataInputStream;)Ljava/lang/String; bytesLeftJ$edu/harvard/hul/ois/jhove/ModuleBase readByteBufD(Ljava/io/DataInputStream;[BLedu/harvard/hul/ois/jhove/ModuleBase;)I&edu/harvard/hul/ois/jhove/PropertyTypeSTRING(Ledu/harvard/hul/ois/jhove/PropertyType;O(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ljava/lang/Object;)VgetAESMetadata.()Ledu/harvard/hul/ois/jhove/AESAudioMetadata;setAppSpecificData(Ljava/lang/String;)Vequals(Ljava/lang/Object;)ZreadPascalStringlength()I skipBytesC(Ljava/io/DataInputStream;ILedu/harvard/hul/ois/jhove/ModuleBase;)IBYTE'edu/harvard/hul/ois/jhove/PropertyArityARRAY)Ledu/harvard/hul/ois/jhove/PropertyArity;x(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ledu/harvard/hul/ois/jhove/PropertyArity;Ljava/lang/Object;)VPROPERTYaddAiffProperty'(Ledu/harvard/hul/ois/jhove/Property;)V! !"*+,-#$"*M,*N*e:** W : Y - S,:-- -B,*:*Y`e,**,W Y  S YS, Y% a&'()*+,>-.jhove/classes/edu/harvard/hul/ois/jhove/module/aiff/AudioRecChunk.class0000644000707400001440000000334611510702104025317 0ustar garyusers2T  !" #$% & ' () (* + ,-./ 01 23 4 567{(Ledu/harvard/hul/ois/jhove/module/AiffModule;Ledu/harvard/hul/ois/jhove/module/iff/ChunkHeader;Ljava/io/DataInputStream;)VCode readChunk&(Ledu/harvard/hul/ois/jhove/RepInfo;)Z StackMapTable" Exceptions8 9 :;+edu/harvard/hul/ois/jhove/module/AiffModule <=&edu/harvard/hul/ois/jhove/ErrorMessage'Audio Recording Chunk is incorrect size >? @A BC DE FGH IJ"edu/harvard/hul/ois/jhove/PropertyAudioRecordingK LMN OP Q RS3edu/harvard/hul/ois/jhove/module/aiff/AudioRecChunk*edu/harvard/hul/ois/jhove/module/iff/Chunkjava/io/IOExceptiont(Ledu/harvard/hul/ois/jhove/ModuleBase;Ledu/harvard/hul/ois/jhove/module/iff/ChunkHeader;Ljava/io/DataInputStream;)V_module&Ledu/harvard/hul/ois/jhove/ModuleBase; bytesLeftJgetNByte()J(Ljava/lang/String;J)V!edu/harvard/hul/ois/jhove/RepInfo setMessage&(Ledu/harvard/hul/ois/jhove/Message;)V setWellFormed(Z)V_dstreamLjava/io/DataInputStream;$edu/harvard/hul/ois/jhove/ModuleBase readByteBufD(Ljava/io/DataInputStream;[BLedu/harvard/hul/ois/jhove/ModuleBase;)I&edu/harvard/hul/ois/jhove/PropertyTypeBYTE(Ledu/harvard/hul/ois/jhove/PropertyType;'edu/harvard/hul/ois/jhove/PropertyArityARRAY)Ledu/harvard/hul/ois/jhove/PropertyArity;x(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ledu/harvard/hul/ois/jhove/PropertyArity;Ljava/lang/Object;)VaddAiffProperty'(Ledu/harvard/hul/ois/jhove/Property;)V!*+,-jP*M*+Y, + N* -,W,Y-+jhove/classes/edu/harvard/hul/ois/jhove/module/aiff/CommentsChunk.class0000644000707400001440000000452411510702104025410 0ustar garyusers2| #2 "34 "5 6 "78 9 : ; < =>?@ ABC DE FG DHI DJ KL M NOP KQ RST{(Ledu/harvard/hul/ois/jhove/module/AiffModule;Ledu/harvard/hul/ois/jhove/module/iff/ChunkHeader;Ljava/io/DataInputStream;)VCode readChunk&(Ledu/harvard/hul/ois/jhove/RepInfo;)Z StackMapTable4USVWX ExceptionsY $Z [\+edu/harvard/hul/ois/jhove/module/AiffModule ]^ _` abjava/util/ArrayList $c de fg h`i jkjava/lang/StringASCII $l"edu/harvard/hul/ois/jhove/Property Timestampm no $p CommentText qoComment ros tu $vU wxComments yu z{3edu/harvard/hul/ois/jhove/module/aiff/CommentsChunk*edu/harvard/hul/ois/jhove/module/iff/Chunkjava/util/List!edu/harvard/hul/ois/jhove/RepInfojava/util/Date[Bjava/io/IOExceptiont(Ledu/harvard/hul/ois/jhove/ModuleBase;Ledu/harvard/hul/ois/jhove/module/iff/ChunkHeader;Ljava/io/DataInputStream;)V_module&Ledu/harvard/hul/ois/jhove/ModuleBase;_dstreamLjava/io/DataInputStream;readUnsignedShort(Ljava/io/DataInputStream;)I bytesLeftJ(I)VreadUnsignedInt(Ljava/io/DataInputStream;)JtimestampToDate(J)Ljava/util/Date;readSignedShort$edu/harvard/hul/ois/jhove/ModuleBase readByteBufD(Ljava/io/DataInputStream;[BLedu/harvard/hul/ois/jhove/ModuleBase;)I([BLjava/lang/String;)V&edu/harvard/hul/ois/jhove/PropertyTypeDATE(Ledu/harvard/hul/ois/jhove/PropertyType;O(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ljava/lang/Object;)VSTRINGPROPERTY'edu/harvard/hul/ois/jhove/PropertyArityARRAY)Ledu/harvard/hul/ois/jhove/PropertyArity;x(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ledu/harvard/hul/ois/jhove/PropertyArity;Ljava/lang/Object;)Vadd(Ljava/lang/Object;)ZLISTaddAiffProperty'(Ledu/harvard/hul/ois/jhove/Property;)V!"#$%&*+,-'(&x*M,*>*Ye Y :6,* 7, :,* 6 ,*6 *Ye : * ,W*Y e6   $  3   3    T ڻY : :  YS Y SY W,,Y !)H#* +W ,-*+./U,-*+01jhove/classes/edu/harvard/hul/ois/jhove/module/aiff/CommonChunk.class0000644000707400001440000000717711510702104025062 0ustar garyusers2 HY GZ[ G\ ] ^ G_ ` abc d e fg fh ij ?k l m ?n o pq pr ps Gt puvw xyz %{ "| }~ x p p p{(Ledu/harvard/hul/ois/jhove/module/AiffModule;Ledu/harvard/hul/ois/jhove/module/iff/ChunkHeader;Ljava/io/DataInputStream;)VCode readChunk&(Ledu/harvard/hul/ois/jhove/RepInfo;)Z StackMapTable[ ExceptionssetChannelLocations0(Ledu/harvard/hul/ois/jhove/AESAudioMetadata;I)V I +edu/harvard/hul/ois/jhove/module/AiffModule &edu/harvard/hul/ois/jhove/ErrorMessage5Common Chunk in AIFF-C does not have compression type I sowt  VW "edu/harvard/hul/ois/jhove/Property SampleFrames java/lang/Long I I CompressionType NONEraw PCM 8-bit offset-binary twos%PCM 16-bit twos-complement big-endian(PCM 16-bit twos-complement little-endianfl32PCM 32-bit integerfl64PCM 64-bit floating pointin24PCM 24-bit integerin32LOSSYUNKNOWNFIXED CompressionNamejava/lang/StringSURROUNDCENTERLEFTRIGHT LEFT_CENTER RIGHT_CENTER 1edu/harvard/hul/ois/jhove/module/aiff/CommonChunk*edu/harvard/hul/ois/jhove/module/iff/Chunk!edu/harvard/hul/ois/jhove/RepInfo*edu/harvard/hul/ois/jhove/AESAudioMetadatajava/io/IOException[Ljava/lang/String;t(Ledu/harvard/hul/ois/jhove/ModuleBase;Ledu/harvard/hul/ois/jhove/module/iff/ChunkHeader;Ljava/io/DataInputStream;)V_module&Ledu/harvard/hul/ois/jhove/ModuleBase;_dstreamLjava/io/DataInputStream;readUnsignedShort(Ljava/io/DataInputStream;)IreadUnsignedInt(Ljava/io/DataInputStream;)J bytesLeftJread80BitDouble(Ljava/io/DataInputStream;)D getFileType()IgetNByte()J(Ljava/lang/String;J)V setMessage&(Ledu/harvard/hul/ois/jhove/Message;)V setWellFormed(Z)V read4Chars-(Ljava/io/DataInputStream;)Ljava/lang/String;equals(Ljava/lang/Object;)Z setEndianreadPascalStringlengthgetAESMetadata.()Ledu/harvard/hul/ois/jhove/AESAudioMetadata; setBitDepth(I)V setSampleRate(D)VsetNumChannels setDuration(J)V&edu/harvard/hul/ois/jhove/PropertyTypeLONG(Ledu/harvard/hul/ois/jhove/PropertyType;O(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ljava/lang/Object;)VaddAiffProperty'(Ledu/harvard/hul/ois/jhove/Property;)VSTRINGsetAudioDataEncoding(Ljava/lang/String;)VsetBitrateReduction(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)VsetMapLocations([Ljava/lang/String;)V!GHIJK*+,-LMK? *M,*>,*7,*6*Ye::,* 9 *Y e, d* +Y,+,*:,*Ye,*:*Y`e,:     *   !,"Y#$%Y&'(,"Y)*'(+,  -./  0.  1.2  3.n4  5.Z6  7.F8  3.2 .:   :  999:;<=,"Y>*'(N6v OPQRR&dSRTUVWK?Nf&83.fE-;SP-@S-AS-BS-CS9-BS-DS-AS-CS-ES-@S6-;S+-FN,X jhove/classes/edu/harvard/hul/ois/jhove/module/aiff/FormatVersionChunk.class0000644000707400001440000000226311510702104026417 0ustar garyusers23         !"{(Ledu/harvard/hul/ois/jhove/module/AiffModule;Ledu/harvard/hul/ois/jhove/module/iff/ChunkHeader;Ljava/io/DataInputStream;)VCode readChunk&(Ledu/harvard/hul/ois/jhove/RepInfo;)Z Exceptions# $ %&+edu/harvard/hul/ois/jhove/module/AiffModule '( )* +,"edu/harvard/hul/ois/jhove/Property FormatVersion- ./ 0 128edu/harvard/hul/ois/jhove/module/aiff/FormatVersionChunk*edu/harvard/hul/ois/jhove/module/iff/Chunkjava/io/IOExceptiont(Ledu/harvard/hul/ois/jhove/ModuleBase;Ledu/harvard/hul/ois/jhove/module/iff/ChunkHeader;Ljava/io/DataInputStream;)V_module&Ledu/harvard/hul/ois/jhove/ModuleBase;_dstreamLjava/io/DataInputStream;readUnsignedInt(Ljava/io/DataInputStream;)JtimestampToDate(J)Ljava/util/Date;&edu/harvard/hul/ois/jhove/PropertyTypeDATE(Ledu/harvard/hul/ois/jhove/PropertyType;O(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ljava/lang/Object;)VaddAiffProperty'(Ledu/harvard/hul/ois/jhove/Property;)V! *+,-8,*M,*B,!:,Y  jhove/classes/edu/harvard/hul/ois/jhove/module/aiff/InstrumentChunk$Loop.class0000644000707400001440000000321411510702104026664 0ustar garyusers2Q ! " # $ %& '() *+ ,-. /01 2 34 /5 67 89<playModeI beginLoopendLoopthis$07Ledu/harvard/hul/ois/jhove/module/aiff/InstrumentChunk;=(Ledu/harvard/hul/ois/jhove/module/aiff/InstrumentChunk;III)VCodeloopProp8(Ljava/lang/String;)Ledu/harvard/hul/ois/jhove/Property;  =   "edu/harvard/hul/ois/jhove/Property> ?@PlayModeA BCD EF BeginLoopG HIjava/lang/Integer J KEndLoop LIM NO P:edu/harvard/hul/ois/jhove/module/aiff/InstrumentChunk$LoopLoop InnerClassesjava/lang/Object()V5edu/harvard/hul/ois/jhove/module/aiff/InstrumentChunk access$000_(Ledu/harvard/hul/ois/jhove/module/aiff/InstrumentChunk;)Ledu/harvard/hul/ois/jhove/ModuleBase;1edu/harvard/hul/ois/jhove/module/aiff/AiffStrings LOOP_TYPE[Ljava/lang/String;$edu/harvard/hul/ois/jhove/ModuleBaseaddIntegerPropertyL(Ljava/lang/String;I[Ljava/lang/String;)Ledu/harvard/hul/ois/jhove/Property;&edu/harvard/hul/ois/jhove/PropertyTypeINTEGER(Ledu/harvard/hul/ois/jhove/PropertyType;(I)VO(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ljava/lang/Object;)VPROPERTY'edu/harvard/hul/ois/jhove/PropertyArityARRAY)Ledu/harvard/hul/ois/jhove/PropertyArity;x(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ledu/harvard/hul/ois/jhove/PropertyArity;Ljava/lang/Object;)V &*+**** k _M,** S,Y Y*S,Y Y*SY+,; ':jhove/classes/edu/harvard/hul/ois/jhove/module/aiff/InstrumentChunk.class0000644000707400001440000000534411510702104025774 0ustar garyusers2x #2 $34 #5 67 68 9 #:; <=> ?@A < B CDEFGHIJK !LMN ?O PQ R S TU !VWXLoop InnerClasses{(Ledu/harvard/hul/ois/jhove/module/AiffModule;Ledu/harvard/hul/ois/jhove/module/iff/ChunkHeader;Ljava/io/DataInputStream;)VCode readChunk&(Ledu/harvard/hul/ois/jhove/RepInfo;)Z ExceptionsYreadLoopk(Ledu/harvard/hul/ois/jhove/module/AiffModule;)Ledu/harvard/hul/ois/jhove/module/aiff/InstrumentChunk$Loop; access$000_(Ledu/harvard/hul/ois/jhove/module/aiff/InstrumentChunk;)Ledu/harvard/hul/ois/jhove/ModuleBase; Z[ '\+edu/harvard/hul/ois/jhove/module/AiffModule ]^_ `a ba cd ./java/util/ArrayList 'e"edu/harvard/hul/ois/jhove/PropertyBaseNotef ghjava/lang/Integer 'ij klDetuneLowNoteHighNote LowVelocity HighVelocityGain SustainLoop mn ReleaseLoop Instrument ohp qr 's tu vd:edu/harvard/hul/ois/jhove/module/aiff/InstrumentChunk$Loop 'w5edu/harvard/hul/ois/jhove/module/aiff/InstrumentChunk*edu/harvard/hul/ois/jhove/module/iff/Chunkjava/io/IOException_module&Ledu/harvard/hul/ois/jhove/ModuleBase;t(Ledu/harvard/hul/ois/jhove/ModuleBase;Ledu/harvard/hul/ois/jhove/module/iff/ChunkHeader;Ljava/io/DataInputStream;)V_dstreamLjava/io/DataInputStream;$edu/harvard/hul/ois/jhove/ModuleBasereadUnsignedByteB(Ljava/io/DataInputStream;Ledu/harvard/hul/ois/jhove/ModuleBase;)IreadSignedBytereadSignedShort(Ljava/io/DataInputStream;)I(I)V&edu/harvard/hul/ois/jhove/PropertyTypeINTEGER(Ledu/harvard/hul/ois/jhove/PropertyType;O(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ljava/lang/Object;)Vjava/util/Listadd(Ljava/lang/Object;)ZloopProp8(Ljava/lang/String;)Ledu/harvard/hul/ois/jhove/Property;PROPERTY'edu/harvard/hul/ois/jhove/PropertyArityLIST)Ledu/harvard/hul/ois/jhove/PropertyArity;x(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ledu/harvard/hul/ois/jhove/PropertyArity;Ljava/lang/Object;)VaddAiffProperty'(Ledu/harvard/hul/ois/jhove/Property;)VreadUnsignedShort=(Ledu/harvard/hul/ois/jhove/module/aiff/InstrumentChunk;III)V!#$'()*+,-*+)q e*M*,>*,6*,6*,6*,6*,6,*6 *,: *,: Y :  Y YW Y YW Y YW Y YW Y YW Y YW Y Y W  W  W, Y ,-./)5)+*=+* >+* 6!Y*",-01)*& !#%jhove/classes/edu/harvard/hul/ois/jhove/module/aiff/MarkerChunk.class0000644000707400001440000000373111510702104025043 0ustar garyusers2j * +, - ./ 0 1 234 567 0 89 5:; <= 5>? 5@ AB C DEF AG HIJ{(Ledu/harvard/hul/ois/jhove/module/AiffModule;Ledu/harvard/hul/ois/jhove/module/iff/ChunkHeader;Ljava/io/DataInputStream;)VCode readChunk&(Ledu/harvard/hul/ois/jhove/RepInfo;)Z StackMapTable,K ExceptionsL M NO+edu/harvard/hul/ois/jhove/module/AiffModule PQ RSjava/util/ArrayList T UV WX"edu/harvard/hul/ois/jhove/PropertyIDY Z[java/lang/Integer \Position ][java/lang/Long ^Name _[Marker `[a bc dK efMarkers gc hi1edu/harvard/hul/ois/jhove/module/aiff/MarkerChunk*edu/harvard/hul/ois/jhove/module/iff/Chunkjava/util/Listjava/io/IOExceptiont(Ledu/harvard/hul/ois/jhove/ModuleBase;Ledu/harvard/hul/ois/jhove/module/iff/ChunkHeader;Ljava/io/DataInputStream;)V_module&Ledu/harvard/hul/ois/jhove/ModuleBase;_dstreamLjava/io/DataInputStream;readUnsignedShort(Ljava/io/DataInputStream;)I(I)VreadUnsignedInt(Ljava/io/DataInputStream;)JreadPascalString-(Ljava/io/DataInputStream;)Ljava/lang/String;&edu/harvard/hul/ois/jhove/PropertyTypeINTEGER(Ledu/harvard/hul/ois/jhove/PropertyType;O(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ljava/lang/Object;)VLONG(J)VSTRINGPROPERTY'edu/harvard/hul/ois/jhove/PropertyArityARRAY)Ledu/harvard/hul/ois/jhove/PropertyArity;x(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ledu/harvard/hul/ois/jhove/PropertyArity;Ljava/lang/Object;)Vadd(Ljava/lang/Object;)ZLISTaddAiffProperty'(Ledu/harvard/hul/ois/jhove/Property;)V! !"*+,-#$" *M,*>Y:6,*6,*7,* :  :   Y YS  YYS  Y S Y Wv, Y%& '()jhove/classes/edu/harvard/hul/ois/jhove/module/aiff/MidiChunk.class0000644000707400001440000000262611510702104024506 0ustar garyusers2=      !" #$ % &'({(Ledu/harvard/hul/ois/jhove/module/AiffModule;Ledu/harvard/hul/ois/jhove/module/iff/ChunkHeader;Ljava/io/DataInputStream;)VCode readChunk&(Ledu/harvard/hul/ois/jhove/RepInfo;)Z StackMapTable Exceptions) * +,+edu/harvard/hul/ois/jhove/module/AiffModule -. /01 23"edu/harvard/hul/ois/jhove/PropertyMIDI4 567 89 : ;</edu/harvard/hul/ois/jhove/module/aiff/MidiChunk*edu/harvard/hul/ois/jhove/module/iff/Chunkjava/io/IOExceptiont(Ledu/harvard/hul/ois/jhove/ModuleBase;Ledu/harvard/hul/ois/jhove/module/iff/ChunkHeader;Ljava/io/DataInputStream;)V_module&Ledu/harvard/hul/ois/jhove/ModuleBase; bytesLeftJ_dstreamLjava/io/DataInputStream;$edu/harvard/hul/ois/jhove/ModuleBase readByteBufD(Ljava/io/DataInputStream;[BLedu/harvard/hul/ois/jhove/ModuleBase;)I&edu/harvard/hul/ois/jhove/PropertyTypeBYTE(Ledu/harvard/hul/ois/jhove/PropertyType;'edu/harvard/hul/ois/jhove/PropertyArityARRAY)Ledu/harvard/hul/ois/jhove/PropertyArity;x(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ledu/harvard/hul/ois/jhove/PropertyArity;Ljava/lang/Object;)VaddMidi'(Ledu/harvard/hul/ois/jhove/Property;)V! *+,-X>*M* *N*-*W,Y - jhove/classes/edu/harvard/hul/ois/jhove/module/aiff/SaxelChunk.class0000644000707400001440000000331311510702104024672 0ustar garyusers2P ! "# $ % &' () *+, - ./0 *1 23 4 567{(Ledu/harvard/hul/ois/jhove/module/AiffModule;Ledu/harvard/hul/ois/jhove/module/iff/ChunkHeader;Ljava/io/DataInputStream;)VCode readChunk&(Ledu/harvard/hul/ois/jhove/RepInfo;)Z StackMapTable# Exceptions8 9 :;+edu/harvard/hul/ois/jhove/module/AiffModule <= >? @A"edu/harvard/hul/ois/jhove/Property BCIDD EFjava/lang/Integer G HSizeSaxel IFJ KL M NO0edu/harvard/hul/ois/jhove/module/aiff/SaxelChunk*edu/harvard/hul/ois/jhove/module/iff/Chunkjava/io/IOExceptiont(Ledu/harvard/hul/ois/jhove/ModuleBase;Ledu/harvard/hul/ois/jhove/module/iff/ChunkHeader;Ljava/io/DataInputStream;)V_module&Ledu/harvard/hul/ois/jhove/ModuleBase;_dstreamLjava/io/DataInputStream;readUnsignedShort(Ljava/io/DataInputStream;)I bytesLeftJ skipBytesC(Ljava/io/DataInputStream;ILedu/harvard/hul/ois/jhove/ModuleBase;)I&edu/harvard/hul/ois/jhove/PropertyTypeINTEGER(Ledu/harvard/hul/ois/jhove/PropertyType;(I)VO(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ljava/lang/Object;)VPROPERTY'edu/harvard/hul/ois/jhove/PropertyArityARRAY)Ledu/harvard/hul/ois/jhove/PropertyArity;x(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ledu/harvard/hul/ois/jhove/PropertyArity;Ljava/lang/Object;)VaddSaxel'(Ledu/harvard/hul/ois/jhove/Property;)V!*+,- *M,*>*Ye6v :,*6,*6,*, W Y YS Y YS, Y#x jhove/classes/edu/harvard/hul/ois/jhove/module/aiff/SoundDataChunk.class0000644000707400001440000000334111510702104025501 0ustar garyusers2S ! "#$ % &' ()* + ,-. /0 (1 23 4 5 6 789{(Ledu/harvard/hul/ois/jhove/module/AiffModule;Ledu/harvard/hul/ois/jhove/module/iff/ChunkHeader;Ljava/io/DataInputStream;)VCode readChunk&(Ledu/harvard/hul/ois/jhove/RepInfo;)Z Exceptions: ; <=+edu/harvard/hul/ois/jhove/module/AiffModule"edu/harvard/hul/ois/jhove/Property >? @AOffsetB CDjava/lang/Long E F BlockSize DataLength GH SoundData IDJ KL M NO PE QR4edu/harvard/hul/ois/jhove/module/aiff/SoundDataChunk*edu/harvard/hul/ois/jhove/module/iff/Chunkjava/io/IOExceptiont(Ledu/harvard/hul/ois/jhove/ModuleBase;Ledu/harvard/hul/ois/jhove/module/iff/ChunkHeader;Ljava/io/DataInputStream;)V_module&Ledu/harvard/hul/ois/jhove/ModuleBase;_dstreamLjava/io/DataInputStream;readUnsignedInt(Ljava/io/DataInputStream;)J&edu/harvard/hul/ois/jhove/PropertyTypeLONG(Ledu/harvard/hul/ois/jhove/PropertyType;(J)VO(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ljava/lang/Object;)V bytesLeftJPROPERTY'edu/harvard/hul/ois/jhove/PropertyArityARRAY)Ledu/harvard/hul/ois/jhove/PropertyArity;x(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ledu/harvard/hul/ois/jhove/PropertyArity;Ljava/lang/Object;)VaddAiffProperty'(Ledu/harvard/hul/ois/jhove/Property;)VmarkFirstSampleOffset skipBytesC(Ljava/io/DataInputStream;ILedu/harvard/hul/ois/jhove/ModuleBase;)I!*+,- *MN,*7,*7-Y Y S-Y  Y S-Y  Y*e S,Y-,,**e,W jhove/classes/edu/harvard/hul/ois/jhove/module/aiff/AnnotationChunk.class0000644000707400001440000000172711510702106025741 0ustar garyusers2,       {(Ledu/harvard/hul/ois/jhove/module/AiffModule;Ledu/harvard/hul/ois/jhove/module/iff/ChunkHeader;Ljava/io/DataInputStream;)VCode readChunk&(Ledu/harvard/hul/ois/jhove/RepInfo;)Z Exceptions ! "#+edu/harvard/hul/ois/jhove/module/AiffModule"edu/harvard/hul/ois/jhove/Property $%& '( ) *+5edu/harvard/hul/ois/jhove/module/aiff/AnnotationChunk/edu/harvard/hul/ois/jhove/module/aiff/TextChunkjava/io/IOExceptionreadText()Ljava/lang/String;_module&Ledu/harvard/hul/ois/jhove/ModuleBase;propNameLjava/lang/String;&edu/harvard/hul/ois/jhove/PropertyTypeSTRING(Ledu/harvard/hul/ois/jhove/PropertyType;O(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ljava/lang/Object;)V addAnnotation'(Ledu/harvard/hul/ois/jhove/Property;)V!  *+,-, *M*Y*, jhove/classes/edu/harvard/hul/ois/jhove/module/aiff/TextChunk.class0000644000707400001440000000277311510702106024555 0ustar garyusers2E   ! "# $ %& ' ( ) * +,-. /01propNameLjava/lang/String;{(Ledu/harvard/hul/ois/jhove/module/AiffModule;Ledu/harvard/hul/ois/jhove/module/iff/ChunkHeader;Ljava/io/DataInputStream;)VCode readChunk&(Ledu/harvard/hul/ois/jhove/RepInfo;)Z Exceptions2readText()Ljava/lang/String; StackMapTable3 4 56+edu/harvard/hul/ois/jhove/module/AiffModule "edu/harvard/hul/ois/jhove/Property 7 89 : ;< => ?@A BCjava/lang/StringASCII D/edu/harvard/hul/ois/jhove/module/aiff/TextChunk*edu/harvard/hul/ois/jhove/module/iff/Chunkjava/io/IOException[Bt(Ledu/harvard/hul/ois/jhove/ModuleBase;Ledu/harvard/hul/ois/jhove/module/iff/ChunkHeader;Ljava/io/DataInputStream;)V_module&Ledu/harvard/hul/ois/jhove/ModuleBase;&edu/harvard/hul/ois/jhove/PropertyTypeSTRING(Ledu/harvard/hul/ois/jhove/PropertyType;O(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ljava/lang/Object;)VaddAiffProperty'(Ledu/harvard/hul/ois/jhove/Property;)V bytesLeftJ_dstreamLjava/io/DataInputStream;$edu/harvard/hul/ois/jhove/ModuleBase readByteBufD(Ljava/io/DataInputStream;[BLedu/harvard/hul/ois/jhove/ModuleBase;)I([BLjava/lang/String;)V!*+,-."*M*N,Y*- cC* L* +* W=++3 +3+ T Y+jhove/classes/edu/harvard/hul/ois/jhove/module/aiff/AuthorChunk.class0000644000707400001440000000057211510702106025066 0ustar garyusers2      {(Ledu/harvard/hul/ois/jhove/module/AiffModule;Ledu/harvard/hul/ois/jhove/module/iff/ChunkHeader;Ljava/io/DataInputStream;)VCode Author 1edu/harvard/hul/ois/jhove/module/aiff/AuthorChunk/edu/harvard/hul/ois/jhove/module/aiff/TextChunkpropNameLjava/lang/String;!*+,-*jhove/classes/edu/harvard/hul/ois/jhove/module/aiff/CopyrightChunk.class0000644000707400001440000000060011510702106025564 0ustar garyusers2      {(Ledu/harvard/hul/ois/jhove/module/AiffModule;Ledu/harvard/hul/ois/jhove/module/iff/ChunkHeader;Ljava/io/DataInputStream;)VCode  Copyright 4edu/harvard/hul/ois/jhove/module/aiff/CopyrightChunk/edu/harvard/hul/ois/jhove/module/aiff/TextChunkpropNameLjava/lang/String;!*+,-*jhove/classes/edu/harvard/hul/ois/jhove/module/aiff/NameChunk.class0000644000707400001440000000056611510702106024507 0ustar garyusers2      {(Ledu/harvard/hul/ois/jhove/module/AiffModule;Ledu/harvard/hul/ois/jhove/module/iff/ChunkHeader;Ljava/io/DataInputStream;)VCode Name /edu/harvard/hul/ois/jhove/module/aiff/NameChunk/edu/harvard/hul/ois/jhove/module/aiff/TextChunkpropNameLjava/lang/String;!*+,-*jhove/classes/edu/harvard/hul/ois/jhove/module/gif/0000755000707400001440000000000011510702104021436 5ustar garyusersjhove/classes/edu/harvard/hul/ois/jhove/module/gif/GifStrings.java0000644000707400001440000000417610771562777024424 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.gif; /** * A class for holding arrays of informative strings that will go into * properties of a GIF object. */ public class GifStrings { /** A private constructor just to make sure nobody instantiates the class by mistake. */ private GifStrings () { } /** Strings for presence or absence of global color table */ public final static String[] GLOBAL_COLOR_TABLE_FLAG = { "No global color table; background color index meaningless", "Global color table follows; background color index meaningful" }; /** Strings for ordering or non-ordering of color table */ public final static String[] COLOR_TABLE_SORT_FLAG = { "Not ordered", "Ordered by decreasing importance" }; /** GIF Capabilities Enquiry string: way in which the graphic is to * be treated after being displayed */ public final static String[] GCE_DISPOSAL_METHOD = { "No disposal specified", "Do not dispose", "Restore to background color", "Restore to previous" }; /** GIF Capabilities Enquiry string: user input * expected or not */ public final static String[] GCE_USER_INPUT_FLAG = { "User input not expected", "User input expected" }; /** GIF Capabilities Enquiry string: transparency * index given or not */ public final static String[] GCE_TRANSPARENCY_FLAG = { "Transparent index is not given", "Transparent index given" }; /** Local color table present in image or not */ public final static String[] LOCAL_COLOR_TABLE_FLAG = { "No local color table; use global table if available", "Local color table follows" }; /** Image is interlaced or not */ public final static String[] INTERLACE_FLAG = { "Image is not interlaced", "Image is interlaced" }; } jhove/classes/edu/harvard/hul/ois/jhove/module/gif/build.xml0000644000707400001440000000205611204567556023306 0ustar garyusers GIF module build file Jhove - JSTOR/Harvard Object Validation Environment Version 1.0 2004-02-03 Copyright 2004 by JSTOR and the President and Fellows of Harvard College jhove/classes/edu/harvard/hul/ois/jhove/module/gif/package.html0000644000707400001440000000060710771562777023756 0ustar garyusers Contains supporting classes for the GIF-HUL module.

jhove/classes/edu/harvard/hul/ois/jhove/module/gif/GifStrings.class0000644000707400001440000000227211510702104024547 0ustar garyusers2C ()*+ ,-. /0123 456 789 :;< =>? @ABGLOBAL_COLOR_TABLE_FLAG[Ljava/lang/String;COLOR_TABLE_SORT_FLAGGCE_DISPOSAL_METHODGCE_USER_INPUT_FLAGGCE_TRANSPARENCY_FLAGLOCAL_COLOR_TABLE_FLAGINTERLACE_FLAG()VCode $%java/lang/String9No global color table; background color index meaningless=Global color table follows; background color index meaningful  Not ordered Ordered by decreasing importance No disposal specifiedDo not disposeRestore to background colorRestore to previous User input not expectedUser input expected Transparent index is not givenTransparent index given !3No local color table; use global table if availableLocal color table follows "Image is not interlacedImage is interlaced #/edu/harvard/hul/ois/jhove/module/gif/GifStringsjava/lang/Object! !"#$%&*'%&YSYSYSYSY SY SY SY S YSYSYSYSYSYSYSYSjhove/classes/edu/harvard/hul/ois/jhove/module/html/0000755000707400001440000000000011510702106021637 5ustar garyusersjhove/classes/edu/harvard/hul/ois/jhove/module/html/DTDMapper.class0000644000707400001440000000342211510702104024445 0ustar garyusers2\ 2 345 36789:;<=>?@ABCD EF GHI JK LMNOxhtml1FramesetLjava/lang/String; ConstantValue xhtml1Strictxhtml1Transitionalxhtml11 latin1Ent specialEnt symbolEnt()VCodepublicIDToFile-(Ljava/lang/String;)Lorg/xml/sax/InputSource; StackMapTablePQK isXHTMLDTD(Ljava/lang/String;)ZgetXHTMLVersion&(Ljava/lang/String;)Ljava/lang/String; %&P RS"-//W3C//DTD XHTML 1.0 FRAMESET//EN TUxhtml1-frameset.dtd -//W3C//DTD XHTML 1.0 STRICT//ENxhtml1-strict.dtd&-//W3C//DTD XHTML 1.0 TRANSITIONAL//ENxhtml1-transitional.dtd-//W3C//DTD XHTML 1.1//ENxhtml11-flat.dtd&-//W3C//ENTITIES LATIN 1 FOR XHTML//ENxhtml-lat1.ent&-//W3C//ENTITIES SPECIAL FOR XHTML//ENxhtml-special.ent&-//W3C//ENTITIES SYMBOLS FOR XHTML//ENxhtml-symbol.ent/edu/harvard/hul/ois/jhove/module/html/DTDMapperV WXQ YZorg/xml/sax/InputSource %[java/lang/Exception ./1.11.0java/lang/Objectjava/lang/String java/net/URL toUpperCase()Ljava/lang/String;equals(Ljava/lang/Object;)Zjava/lang/Class getResource"(Ljava/lang/String;)Ljava/net/URL; openStream()Ljava/io/InputStream;(Ljava/io/InputStream;)V! ! " #$%&'* ()'L**K* LZ* LK*  L< *  L- *  L* L*L+ +M,,NY-N*% + ++,- ./'N5**K***  **(@ 01'3*K* ** jhove/classes/edu/harvard/hul/ois/jhove/module/html/CharStream.java0000644000707400001440000000716010771562771024563 0ustar garyusers/* Generated By:JavaCC: Do not edit this line. CharStream.java Version 3.0 */ package edu.harvard.hul.ois.jhove.module.html; /** * This interface describes a character stream that maintains line and * column number positions of the characters. It also has the capability * to backup the stream to some extent. An implementation of this * interface is used in the TokenManager implementation generated by * JavaCCParser. * * All the methods except backup can be implemented in any fashion. backup * needs to be implemented correctly for the correct operation of the lexer. * Rest of the methods are all used to get information like line number, * column number and the String that constitutes a token and are not used * by the lexer. Hence their implementation won't affect the generated lexer's * operation. */ public interface CharStream { /** * Returns the next character from the selected input. The method * of selecting the input is the responsibility of the class * implementing this interface. Can throw any java.io.IOException. */ char readChar() throws java.io.IOException; /** * Returns the column position of the character last read. * @deprecated * @see #getEndColumn */ int getColumn(); /** * Returns the line number of the character last read. * @deprecated * @see #getEndLine */ int getLine(); /** * Returns the column number of the last character for current token (being * matched after the last call to BeginTOken). */ int getEndColumn(); /** * Returns the line number of the last character for current token (being * matched after the last call to BeginTOken). */ int getEndLine(); /** * Returns the column number of the first character for current token (being * matched after the last call to BeginTOken). */ int getBeginColumn(); /** * Returns the line number of the first character for current token (being * matched after the last call to BeginTOken). */ int getBeginLine(); /** * Backs up the input stream by amount steps. Lexer calls this method if it * had already read some characters, but could not use them to match a * (longer) token. So, they will be used again as the prefix of the next * token and it is the implemetation's responsibility to do this right. */ void backup(int amount); /** * Returns the next character that marks the beginning of the next token. * All characters must remain in the buffer between two successive calls * to this method to implement backup correctly. */ char BeginToken() throws java.io.IOException; /** * Returns a string made up of characters from the marked token beginning * to the current buffer position. Implementations have the choice of returning * anything that they want to. For example, for efficiency, one might decide * to just return null, which is a valid implementation. */ String GetImage(); /** * Returns an array of characters that make up the suffix of length 'len' for * the currently matched token. This is used to build up the matched string * for use in actions in the case of MORE. A simple and inefficient * implementation of this is as follows : * * { * String t = GetImage(); * return t.substring(t.length() - len, t.length()).toCharArray(); * } */ char[] GetSuffix(int len); /** * The lexer calls this function to indicate that it is done with the stream * and hence implementations can free any resources held by this class. * Again, the body of this function can be just empty and it will not * affect the lexer's operation. */ void Done(); } jhove/classes/edu/harvard/hul/ois/jhove/module/html/DTDMapper.java0000644000707400001440000000751610771562770024316 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College * **********************************************************************/ package edu.harvard.hul.ois.jhove.module.html; import java.io.InputStream; import java.net.URL; import org.xml.sax.InputSource; /** * Class to map public DTD ID's to files which are included with this * HTML module. This class is used by the XML module, due to the * intermodulary nature of XHTML. * * @author Gary McGath * */ public class DTDMapper { private final static String xhtml1Frameset = "-//W3C//DTD XHTML 1.0 FRAMESET//EN"; private final static String xhtml1Strict = "-//W3C//DTD XHTML 1.0 STRICT//EN"; private final static String xhtml1Transitional = "-//W3C//DTD XHTML 1.0 TRANSITIONAL//EN"; private final static String xhtml11 = "-//W3C//DTD XHTML 1.1//EN"; private final static String latin1Ent = "-//W3C//ENTITIES LATIN 1 FOR XHTML//EN"; private final static String specialEnt = "-//W3C//ENTITIES SPECIAL FOR XHTML//EN"; private final static String symbolEnt = "-//W3C//ENTITIES SYMBOLS FOR XHTML//EN"; /** Attempts to convert a public ID to a matching DTD or Entity resource. * Returns an InputStream for that resource if there is a match. * Otherwise returns null. * * @param publicID The PUBLIC ID associated with a DTD or entity document */ public static InputSource publicIDToFile(String publicID) { String filename = null; if (publicID == null) { return null; } // Make comparisons case-insensitive -- just in case publicID = publicID.toUpperCase (); if (xhtml1Frameset.equals (publicID)) { filename = "xhtml1-frameset.dtd"; } else if (xhtml1Strict.equals (publicID)) { filename = "xhtml1-strict.dtd"; } else if (xhtml1Transitional.equals (publicID)) { filename = "xhtml1-transitional.dtd"; } else if (xhtml11.equals (publicID)) { filename = "xhtml11-flat.dtd"; } else if (latin1Ent.equals (publicID)) { filename = "xhtml-lat1.ent"; } else if (specialEnt.equals (publicID)) { filename = "xhtml-special.ent"; } else if (symbolEnt.equals (publicID)) { filename = "xhtml-symbol.ent"; } if (filename != null) { URL dtdURL = DTDMapper.class.getResource(filename); if (dtdURL != null) { try { InputStream strm = dtdURL.openStream(); return new InputSource (strm); } catch (Exception e) { return null; } } } return null; } /** Returns TRUE if the parameter is the public ID of a * known XHTML DTD. */ public static boolean isXHTMLDTD (String publicID) { if (publicID == null) { return false; } publicID = publicID.toUpperCase (); return (xhtml1Frameset.equals (publicID) || xhtml1Strict.equals (publicID) || xhtml1Transitional.equals (publicID) || xhtml11.equals (publicID)); } /** Returns the XHTML version associated with the DTD's * public ID. Returns null if it isn't * a known XHTML public ID. */ public static String getXHTMLVersion (String publicID) { publicID = publicID.toUpperCase (); if (!isXHTMLDTD (publicID)) { return null; } else if (xhtml11.equals (publicID)) { return "1.1"; } else { return "1.0"; } } } jhove/classes/edu/harvard/hul/ois/jhove/module/html/Html3_2DocDesc.java0000644000707400001440000006221610771562762025172 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.html; import java.util.*; /** * This class describes the requirements of an HTML 3.2 document. * * @author Gary McGath * */ public class Html3_2DocDesc extends HtmlDocDesc { /* Static, private map of supported tags. * For efficiency, we create a static Map * of supported tags just once, then assign that to stSupportedElements * in the constructor. */ private static Map stSupportedElements; /* Static initializer. A superclass is initialized before its * subclass, so we can count on the static initializer of HtmlDocDesc * to have run already. * * It's time to start thinking about how to factor this code. * Each element can be created separately, with the necessary * arguments passed for each one. It would be a nice pattern if * all elements had the same calling sequence, but realistically * some are going to need extras such as special lists of names. * The element functions (which will all be static) should be here * if unique, or in the parent class if they can be used for more * than one version of HTML. There should be a naming convention * for the functions in the parent class indicating which names * they can be used with. */ static { stSupportedElements = new HashMap (280); String[] fontMarkup = new String[] { "tt", "i", "b", "u", "strike", "big", "small", "sub", "sup" }; String[] phraseMarkup = new String[] { "em", "strong", "dfn", "code", "samp", "kbd", "var", "cite" }; String[] specialMarkup = new String[] { "a", "img", "applet", "font", "basefont", "br", "script", "map" }; String[] formMarkup = new String[] { "input", "select", "textarea" }; String[] listMarkup = new String [] { "ul", "ol", "dir", "menu" }; /* textContent lists all the content types which are permitted in * the markup elements. For a first cut, strings signify the * name of the element which is permitted. */ List textContent = new ArrayList(35); addStringsToList (fontMarkup, textContent); addStringsToList (phraseMarkup, textContent); addStringsToList (specialMarkup, textContent); addStringsToList (formMarkup, textContent); textContent.add (HtmlSpecialToken.PCDATA); List blockContent = new ArrayList (20); addStringsToList (listMarkup, blockContent); String[] blockMisc = new String[] {"p", "pre", "dl", "div", "center", "blockquote", "form", "isindex", "hr", "table" }; addStringsToList (blockMisc, blockContent); List flowContent = new ArrayList (30); flowContent.addAll (blockContent); flowContent.addAll (textContent); int i; String name; HtmlTagDesc td; /* Text elements */ for (i = 0; i < fontMarkup.length; i++) { name = fontMarkup[i]; td = new HtmlTagDesc (name, true, true, textContent, null); stSupportedElements.put (name, td); } /* Phrase elements. */ for (i = 0; i < phraseMarkup.length; i++) { name = phraseMarkup[i]; td = new HtmlTagDesc (name, true, true, textContent, null); stSupportedElements.put (name, td); } addFontElement (textContent); addBasefontElement (); addBrElement (); /* Content for the BODY element, also used for other elements */ List bodyContent = new ArrayList (100); addStringsToList (headings, bodyContent); bodyContent.addAll (textContent); bodyContent.addAll (blockContent); bodyContent.add ("address"); addBodyElement (bodyContent); addAddressElement (textContent); HtmlAttributeDesc halignAtt = new HtmlAttributeDesc ("align", new String[] { "left", "center", "right" }, HtmlAttributeDesc.IMPLIED); /* Caution -- some elements' align attributes have a different * set of permitted values. Don't use halignAtt for these. */ addDivElement (bodyContent, halignAtt); addCenterElement (bodyContent); addAElement (textContent); addMapElement (); addAreaElement (); addLinkElement (); HtmlAttributeDesc ialignAtt = new HtmlAttributeDesc ("align", new String[] { "top", "middle", "bottom", "left", "right" }, HtmlAttributeDesc.IMPLIED); addImgElement (ialignAtt); addAppletElement (ialignAtt, textContent); addParamElement (); addHrElement (halignAtt); addPElement (halignAtt, textContent); /* The heading (H1-H6) elements */ List atts = new ArrayList (1); atts.add (halignAtt); for (i = 0; i < headings.length; i++) { name = headings[i]; td = new HtmlTagDesc (name, true, true, textContent, atts); stSupportedElements.put (name, td); } addPreElement (textContent); addBlockquoteElement (bodyContent); addDlElement (); addDtElement (textContent); addDdElement (flowContent); List listContent = new ArrayList (1); listContent.add ("li"); addOlElement (listContent); addUlElement (listContent); addDirElement (listContent); addMenuElement (listContent); addLiElement (flowContent); addFormElement (bodyContent); addInputElement (ialignAtt); addSelectElement (); addOptionElement (); addTableElement (); HtmlAttributeDesc valignAtt = new HtmlAttributeDesc ("valign", new String[] { "top", "middle", "bottom" }, HtmlAttributeDesc.IMPLIED); addTrElement (halignAtt, valignAtt); List thtdAtts = new ArrayList (7); // common attribute list for TH and TD addSelfAttribute (thtdAtts, "nowrap"); addSimpleAttribute (thtdAtts, "rowspan"); addSimpleAttribute (thtdAtts, "colspan"); thtdAtts.add (halignAtt); thtdAtts.add (valignAtt); addSimpleAttribute (thtdAtts, "width"); addSimpleAttribute (thtdAtts, "height"); addThElement (bodyContent, thtdAtts); addTdElement (bodyContent, thtdAtts); addCaptionElement (textContent, valignAtt); addHeadElement (); addTitleElement (); addIsindexElement (); addBaseElement (); addMetaElement (); addScriptElement (); addStyleElement (); /* The HTML element */ name = "html"; List htmlContent = new ArrayList (2); htmlContent.add ("head"); htmlContent.add ("body"); td = new HtmlTagDesc (name, false, false, htmlContent, null); td.setAttributes (new String[] {"version" }); stSupportedElements.put (name, td); } /** Constructor. */ public Html3_2DocDesc () { // publish stSupportedElements to superclass supportedElements = stSupportedElements; init (); } /** Static initializers for each element. If elements are common to more * than one HTML version, they should be moved into the superclass. * Different initializers may have different argument lists. */ private static void addAddressElement (List textContent) { String name = "address"; List addressContent = new ArrayList (36); addressContent.addAll (textContent); addressContent.add ("p"); HtmlTagDesc td = new HtmlTagDesc (name, true, true, addressContent, null); stSupportedElements.put (name, td); } /* Initializer for "A" (anchor) element. */ private static void addAElement (List textContent) { /* The Anchor (A) element */ String name = "a"; HtmlTagDesc td = new HtmlTagDesc (name, true, true, textContent, null); td.setAttributes (new String[] {"name", "href", "rel", "rev", "title" }); td.setExcludedContent(new String[] { "a" }); stSupportedElements.put (name, td); } /* Initializer for APPLET element. */ private static void addAppletElement (HtmlAttributeDesc ialignAtt, List textContent) { String name = "applet"; List atts = new ArrayList (9); addSimpleAttribute (atts, "codebase"); atts.add (new HtmlAttributeDesc ("code", null, HtmlAttributeDesc.REQUIRED)); addSimpleAttribute (atts, "alt"); addSimpleAttribute (atts, "name"); atts.add (new HtmlAttributeDesc ("width", null, HtmlAttributeDesc.REQUIRED)); atts.add (new HtmlAttributeDesc ("height", null, HtmlAttributeDesc.REQUIRED)); atts.add (ialignAtt); addSimpleAttribute (atts, "hspace"); addSimpleAttribute (atts, "vspace"); List appletContent = new ArrayList (36); appletContent.addAll (textContent); appletContent.add ("param"); HtmlTagDesc td = new HtmlTagDesc (name, true, false, appletContent, atts); stSupportedElements.put (name, td); } private static void addAreaElement () { String name = "area"; List atts = new ArrayList (5); atts.add (new HtmlAttributeDesc ("shape", new String[] {"rect", "circle", "poly" }, HtmlAttributeDesc.REQUIRED)); addSimpleAttribute (atts, "coords"); addSimpleAttribute (atts, "href"); atts.add (new HtmlAttributeDesc ("nohref", new String[] {"nohref"}, HtmlAttributeDesc.IMPLIED)); atts.add (new HtmlAttributeDesc ("alt", null, HtmlAttributeDesc.REQUIRED)); HtmlTagDesc td = new HtmlTagDesc (name, true, false, null, atts); stSupportedElements.put (name, td); } private static void addBaseElement () { String name = "base"; List atts = new ArrayList (1); addSimpleAttribute (atts, "href"); HtmlTagDesc td = new HtmlTagDesc (name, true, false, null, atts); stSupportedElements.put (name, td); } private static void addBasefontElement () { String name = "basefont"; HtmlTagDesc td = new HtmlTagDesc (name, true, false, null, null); td.setAttributes (new String[] {"size"}); stSupportedElements.put (name, td); } private static void addBlockquoteElement (List bodyContent) { /* The BLOCKQUOTE element */ String name = "blockquote"; HtmlTagDesc td = new HtmlTagDesc (name, true, true, bodyContent, null); stSupportedElements.put (name, td); } private static void addBodyElement (List bodyContent) { String name = "body"; HtmlTagDesc td = new HtmlTagDesc (name, true, true, bodyContent, null); td.setAttributes (new String [] {"bgcolor", "text", "link", "vlink", "alink", "background" }); stSupportedElements.put (name, td); } private static void addBrElement () { String name = "br"; HtmlTagDesc td = new HtmlTagDesc (name, true, false, null, null); stSupportedElements.put (name, td); } private static void addCaptionElement (List textContent, HtmlAttributeDesc valignAtt) { String name = "caption"; List atts = new ArrayList (1); atts.add (valignAtt); HtmlTagDesc td = new HtmlTagDesc (name, true, true, textContent, atts); stSupportedElements.put (name, td); } private static void addCenterElement (List bodyContent) { String name = "center"; HtmlTagDesc td = new HtmlTagDesc (name, true, true, bodyContent, null); stSupportedElements.put (name, td); } private static void addDdElement (List flowContent) { String name = "dd"; HtmlTagDesc td = new HtmlTagDesc (name, true, false, flowContent, null); stSupportedElements.put (name, td); } private static void addDirElement (List listContent) { String name = "dir"; List atts = new ArrayList (1); addSelfAttribute (atts, "compact"); HtmlTagDesc td = new HtmlTagDesc (name, true, true, listContent, atts); stSupportedElements.put (name, td); } private static void addDivElement (List bodyContent, HtmlAttributeDesc halignAtt) { String name = "div"; List atts = new ArrayList (1); atts.add (halignAtt); HtmlTagDesc td = new HtmlTagDesc (name, true, true, bodyContent, atts); stSupportedElements.put (name, td); } private static void addDlElement () { String name = "dl"; List dlContent = new ArrayList (2); addStringsToList(new String[] { "dt", "dd" }, dlContent); List atts = new ArrayList (1); addSelfAttribute(atts, "compact"); HtmlTagDesc td = new HtmlTagDesc (name, true, true, dlContent, atts); stSupportedElements.put (name, td); } private static void addDtElement (List textContent) { String name = "dt"; HtmlTagDesc td = new HtmlTagDesc (name, true, false, textContent, null); stSupportedElements.put (name, td); } private static void addFontElement (List textContent) { String name = "font"; HtmlTagDesc td = new HtmlTagDesc (name, true, true, textContent, null); td.setAttributes (new String[] {"size", "color"}); stSupportedElements.put (name, td); } private static void addFormElement (List bodyContent) { final String name = "form"; List atts = new ArrayList (3); addSimpleAttribute (atts, "action"); atts.add (new HtmlAttributeDesc ("method", null, HtmlAttributeDesc.OTHER)); atts.add (new HtmlAttributeDesc ("enctype", null, HtmlAttributeDesc.OTHER)); List formContent = new ArrayList (bodyContent.size ()); formContent.addAll (bodyContent); removeStringsFromList (formContent, new String[] { "form" }); HtmlTagDesc td = new HtmlTagDesc (name, true, true, formContent, atts); stSupportedElements.put (name, td); } private static void addHeadElement () { String name = "head"; String[] headMisc = new String[] {"script", "style", "meta", "link" }; List headContent = new ArrayList (7); headContent.add ("title"); headContent.add ("isindex"); headContent.add ("base"); HtmlTagDesc td = new HtmlTagDesc (name, false, false, headContent, null); stSupportedElements.put (name, td); /* Attributes TITLE (required), ISINDEX (optional), and BASE (optional) * are supposed to come in that order, ahead of anything else. * For the moment, just toss them in with the rest. */ addStringsToList (headMisc, headContent); } private static void addHrElement (HtmlAttributeDesc halignAtt) { String name = "hr"; List atts = new ArrayList (4); atts.add (halignAtt); addSelfAttribute (atts, "noshade"); addSimpleAttribute (atts, "size"); addSimpleAttribute (atts, "width"); HtmlTagDesc td = new HtmlTagDesc (name, true, false, null, atts); stSupportedElements.put (name, td); } private static void addImgElement (HtmlAttributeDesc ialignAtt) { String name = "img"; List atts = new ArrayList (10); addRequiredAttribute (atts, "src"); addSimpleAttribute (atts, "alt"); atts.add (ialignAtt); addSimpleAttribute (atts, "height"); addSimpleAttribute (atts, "width"); addSimpleAttribute (atts, "border"); addSimpleAttribute (atts, "hspace"); addSimpleAttribute (atts, "vspace"); addSimpleAttribute (atts, "usemap"); addSelfAttribute (atts, "ismap"); HtmlTagDesc td = new HtmlTagDesc (name, true, false, null, atts); stSupportedElements.put (name, td); } private static void addInputElement (HtmlAttributeDesc ialignAtt) { final String name = "input"; List atts = new ArrayList (8); atts.add (new HtmlAttributeDesc ("type", new String[] {"text", "password", "checkbox", "radio", "submit", "reset", "file", "hidden", "image"}, HtmlAttributeDesc.OTHER)); addSimpleAttribute (atts, "name"); addSimpleAttribute (atts, "value"); addSelfAttribute (atts, "checked"); addSimpleAttribute (atts, "size"); addSimpleAttribute (atts, "maxlength"); addSimpleAttribute (atts, "src"); atts.add (ialignAtt); HtmlTagDesc td = new HtmlTagDesc (name, true, true, null, atts); stSupportedElements.put (name, td); } private static void addIsindexElement () { final String name = "isindex"; List atts = new ArrayList (1); addSimpleAttribute (atts, "prompt"); HtmlTagDesc td = new HtmlTagDesc (name, true, false, null, atts); stSupportedElements.put (name, td); } private static void addLiElement (List flowContent) { final String name = "li"; List atts = new ArrayList (2); addSimpleAttribute (atts, "type"); addSimpleAttribute (atts, "value"); HtmlTagDesc td = new HtmlTagDesc (name, true, false, flowContent, atts); stSupportedElements.put (name, td); } private static void addLinkElement () { final String name = "link"; HtmlTagDesc td = new HtmlTagDesc (name, true, false, null, null); td.setAttributes (new String [] { "href", "rel", "rev", "title" }); stSupportedElements.put (name, td); } private static void addMapElement () { final String name = "map"; List atts = new ArrayList (1); addSimpleAttribute (atts, "name"); List mapContent = new ArrayList (1); mapContent.add ("area"); HtmlTagDesc td = new HtmlTagDesc (name, true, true, mapContent, atts); stSupportedElements.put (name, td); } private static void addMenuElement (List listContent) { final String name = "menu"; List atts = new ArrayList (1); addSelfAttribute (atts, "compact"); HtmlTagDesc td = new HtmlTagDesc (name, true, true, listContent, atts); stSupportedElements.put (name, td); } private static void addMetaElement () { final String name = "meta"; List atts = new ArrayList (3); addSimpleAttribute (atts, "http-equiv"); addSimpleAttribute (atts, "name"); addRequiredAttribute (atts, "content"); HtmlTagDesc td = new HtmlTagDesc (name, true, false, null, atts); stSupportedElements.put (name, td); } private static void addOlElement (List listContent) { final String name = "ol"; List atts = new ArrayList (3); addSimpleAttribute (atts, "type"); addSimpleAttribute (atts, "start"); addSelfAttribute (atts, "compact"); HtmlTagDesc td = new HtmlTagDesc (name, true, true, listContent, atts); stSupportedElements.put (name, td); } private static void addOptionElement () { final String name = "option"; List atts = new ArrayList (2); addSelfAttribute (atts, "selected"); addSimpleAttribute (atts,"value"); List content = new ArrayList (1); content.add (HtmlSpecialToken.PCDATA); HtmlTagDesc td = new HtmlTagDesc (name, true, true, content, atts); stSupportedElements.put (name, td); } private static void addPElement (HtmlAttributeDesc halignAtt, List textContent) { final String name = "p"; List atts = new ArrayList (1); atts.add (halignAtt); HtmlTagDesc td = new HtmlTagDesc (name, true, false, textContent, atts); stSupportedElements.put (name, td); } private static void addParamElement () { final String name = "param"; List atts = new ArrayList (2); addRequiredAttribute (atts, "name"); addSimpleAttribute (atts, "value"); HtmlTagDesc td = new HtmlTagDesc (name, true, false, null, atts); stSupportedElements.put (name, td); } private static void addPreElement (List textContent) { final String name = "pre"; List atts = new ArrayList (1); addSimpleAttribute(atts, "width"); List preContent = new ArrayList (35); preContent.addAll(textContent); /* Take out excluded elements */ removeStringsFromList (preContent, new String [] {"img", "big", "small", "sub", "sup", "font"}); HtmlTagDesc td = new HtmlTagDesc (name, true, true, preContent, atts); stSupportedElements.put (name, td); } private static void addScriptElement () { /* In HTML 3.2, this is just a placeholder */ final String name = "script"; List content = new ArrayList (1); content.add (HtmlSpecialToken.PCDATA); HtmlTagDesc td = new HtmlTagDesc (name, true, true, content, null); stSupportedElements.put (name, td); } private static void addSelectElement () { final String name = "select"; List atts = new ArrayList (3); addSimpleAttribute (atts, "name"); addSimpleAttribute (atts, "size"); addSelfAttribute (atts, "multiple"); List content = new ArrayList (1); content.add ("option"); HtmlTagDesc td = new HtmlTagDesc (name, true, true, content, atts); stSupportedElements.put (name, td); } private static void addStyleElement () { /* In HTML 3.2, this is just a placeholder */ final String name = "style"; List content = new ArrayList (1); content.add (HtmlSpecialToken.PCDATA); HtmlTagDesc td = new HtmlTagDesc (name, true, true, content, null); stSupportedElements.put (name, td); } private static void addTableElement () { final String name = "table"; List atts = new ArrayList (5); atts.add (new HtmlAttributeDesc ("align", new String[] {"left", "center", "right"}, HtmlAttributeDesc.IMPLIED)); addSimpleAttribute (atts, "width"); addSimpleAttribute (atts, "border"); addSimpleAttribute (atts, "cellspacing"); addSimpleAttribute (atts, "cellpadding"); List content = new ArrayList (2); content.add ("caption"); content.add ("tr"); HtmlTagDesc td = new HtmlTagDesc (name, true, true, content, atts); stSupportedElements.put (name, td); } private static void addTextareaElement () { final String name = "textarea"; List atts = new ArrayList (3); addSimpleAttribute (atts, "name"); addSimpleAttribute (atts, "rows"); addSimpleAttribute (atts, "cols"); List content = new ArrayList (1); content.add (HtmlSpecialToken.PCDATA); HtmlTagDesc td = new HtmlTagDesc (name, true, true, content, atts); stSupportedElements.put (name, td); } private static void addTdElement (List bodyContent, List thtdAtts) { final String name = "td"; HtmlTagDesc td = new HtmlTagDesc (name, true, false, bodyContent, thtdAtts); stSupportedElements.put (name, td); } private static void addThElement (List bodyContent, List thtdAtts) { final String name = "th"; HtmlTagDesc td = new HtmlTagDesc (name, true, false, bodyContent, thtdAtts); stSupportedElements.put (name, td); } private static void addTitleElement () { /* I'm confused by the DTD for this one. * Content consists only of PCDATA, but certain elements are * specifically excluded from its content. This seems * redundant. */ String name = "title"; List pcdataContent = new ArrayList (1); pcdataContent.add (HtmlSpecialToken.PCDATA); HtmlTagDesc td = new HtmlTagDesc (name, true, true, pcdataContent, null); stSupportedElements.put (name, td); } private static void addTrElement (HtmlAttributeDesc halignAtt, HtmlAttributeDesc valignAtt) { final String name = "tr"; List atts = new ArrayList (2); atts.add (halignAtt); atts.add (valignAtt); List content = new ArrayList (2); content.add ("th"); content.add ("td"); HtmlTagDesc td = new HtmlTagDesc (name, true, false, content, atts); stSupportedElements.put (name, td); } private static void addUlElement (List listContent) { final String name = "ul"; List atts = new ArrayList (2); addSimpleAttribute (atts, "type"); addSelfAttribute (atts, "compact"); HtmlTagDesc td = new HtmlTagDesc (name, true, true, listContent, atts); stSupportedElements.put (name, td); } } jhove/classes/edu/harvard/hul/ois/jhove/module/html/Html4DocDesc.java0000644000707400001440000004726410771562766024764 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.html; import java.util.*; /** * Abstract class for common features of HTML 4.0 and 4.01 * documents. * * @author Gary McGath * */ public abstract class Html4DocDesc extends HtmlDocDesc { /** Names of font-related elements. */ protected static String[] fontMarkup; /** Names of phrase elements. */ protected static String[] phraseMarkup; /** Names of special elements. */ protected static String[] specialMarkup; /** Names of form elements. */ protected static String[] formMarkup; /** Names of list elements. */ protected static String[] listMarkup; /** List of block elements. */ protected static List blockContent; /** List of flow elements. */ protected static List flowContent; /** List of inline elements. */ protected static List inlineContent; /** List consisting of the LI element. */ protected static List listContent; /** List of elements for the BODY element and some other elements. */ protected static List bodyContent; /** Core attributes list. */ protected static List coreAttrs; /** Internationalization attributes list. */ protected static List i18nAttrs; /** Event attributes list. */ protected static List eventAttrs; /** Big attributes list. The dtd calls this "attrs", but here * it's called lotsaAttrs to avoid confusion with common * local variables. */ protected static List bigAttrs; /** Big attributes plus reserved attributes. */ protected static List biggerAttrs; /** Attributes described as "reserved for future use." */ protected static List reservedAttrs; /** Horizontal alignment attribute for cells. */ protected static HtmlAttributeDesc halignAtt; /** Vertical alignment attribute for cells. */ protected static HtmlAttributeDesc valignAtt; /** Attributes for TH and TD elements */ protected static List thtdAtts; /** Initialization code. This is called from the static initializer * of our subclasses. */ protected static void classInit4 (Map stSupportedElements) { phraseMarkup = new String[] { "em", "strong", "dfn", "code", "samp", "kbd", "var", "cite", "abbr", "acronym" }; formMarkup = new String[] { "input", "select", "textarea", "label", "button" }; /* Core attrs list, used for various elements */ coreAttrs = new ArrayList (4); addSimpleAttribute (coreAttrs, "id"); addSimpleAttribute (coreAttrs, "class"); addSimpleAttribute (coreAttrs, "style"); addSimpleAttribute (coreAttrs, "title"); /* Internationalization attrs list */ i18nAttrs = new ArrayList (2); addSimpleAttribute (i18nAttrs, "lang"); i18nAttrs.add (new HtmlAttributeDesc ("id", new String[] {"ltr", "rtl"}, HtmlAttributeDesc.IMPLIED)); /* Event attrs list */ eventAttrs = new ArrayList (10); addSimpleAttribute (eventAttrs, "onclick"); addSimpleAttribute (eventAttrs, "ondblclick"); addSimpleAttribute (eventAttrs, "onmousedown"); addSimpleAttribute (eventAttrs, "onmouseup"); addSimpleAttribute (eventAttrs, "onmouseover"); addSimpleAttribute (eventAttrs, "onmousemove"); addSimpleAttribute (eventAttrs, "onmouseout"); addSimpleAttribute (eventAttrs, "onkeypress"); addSimpleAttribute (eventAttrs, "onkeydown"); addSimpleAttribute (eventAttrs, "onkeyup"); bigAttrs = new ArrayList (coreAttrs.size() + i18nAttrs.size() + eventAttrs.size()); bigAttrs.addAll (coreAttrs); bigAttrs.addAll (i18nAttrs); bigAttrs.addAll (eventAttrs); /* Attributes described as "reserved for future use." */ reservedAttrs = new ArrayList (3); addSimpleAttribute (reservedAttrs, "datasrc"); addSimpleAttribute (reservedAttrs, "datafld"); addSimpleAttribute (reservedAttrs, "dataformatas"); // yes, spelled that way /* Big attributes plus reserved attributes. */ biggerAttrs = new ArrayList (bigAttrs.size() + 3); biggerAttrs.addAll (bigAttrs); biggerAttrs.addAll (reservedAttrs); /* Reusable attributes for cell alignment. */ halignAtt = new HtmlAttributeDesc ("align", new String [] {"left", "center", "right", "justify", "char"}, HtmlAttributeDesc.IMPLIED); valignAtt = new HtmlAttributeDesc ("valign", new String[] { "top", "middle", "bottom", "baseline" }, HtmlAttributeDesc.IMPLIED); } /** Static initializers for each element. If elements are common to more * than one HTML version, they should be moved into the superclass. * Different initializers may have different argument lists. */ /** Defines the ADDRESS element. */ protected static void addAddressElement (Map stSupportedElements) { String name = "address"; List addressContent = new ArrayList (36); addressContent.addAll (inlineContent); addressContent.add ("p"); HtmlTagDesc td = new HtmlTagDesc (name, true, true, addressContent, bigAttrs); stSupportedElements.put (name, td); } /** Defines the BDO element. */ protected static void addBdoElement (Map stSupportedElements) { String name = "bdo"; List atts = new ArrayList (coreAttrs.size () + 2); atts.addAll (coreAttrs); addSimpleAttribute (atts, "lang"); atts.add (new HtmlAttributeDesc ("dir", new String[] { "ltr", "rtl" }, HtmlAttributeDesc.REQUIRED)); HtmlTagDesc td = new HtmlTagDesc (name, true, true, inlineContent, atts); stSupportedElements.put (name, td); } /** Defines the BODY element. */ protected static void addBodyElement (Map stSupportedElements) { /* bodyContent is different for transitional and strict, but * the code in this function is common to both. */ String name = "body"; List atts = new ArrayList (bigAttrs.size () + 2); atts.addAll (bigAttrs); addSimpleAttribute (atts, "onload"); addSimpleAttribute (atts, "onunload"); HtmlTagDesc td = new HtmlTagDesc (name, true, true, bodyContent, atts); stSupportedElements.put (name, td); } /** Defines the COL element. */ protected static void addColElement (Map stSupportedElements, List cellalignAttrs) { String name = "col"; List atts = new ArrayList (bigAttrs.size () + 8); atts.addAll (bigAttrs); atts.addAll (cellalignAttrs); addSimpleAttribute (atts, "span"); addSimpleAttribute (atts, "width"); HtmlTagDesc td = new HtmlTagDesc (name, true, false, null, atts); stSupportedElements.put (name, td); } /** Defines the COLGROUP element. */ protected static void addColgroupElement (Map stSupportedElements, List cellalignAttrs) { String name = "colgroup"; List content = new ArrayList (1); content.add ("col"); List atts = new ArrayList (bigAttrs.size () + 8); atts.addAll (bigAttrs); atts.addAll (cellalignAttrs); addSimpleAttribute (atts, "span"); addSimpleAttribute (atts, "width"); HtmlTagDesc td = new HtmlTagDesc (name, true, false, content, atts); stSupportedElements.put (name, td); } /** Defines the DD element. */ protected static void addDdElement (Map stSupportedElements) { String name = "dd"; HtmlTagDesc td = new HtmlTagDesc (name, true, false, flowContent, bigAttrs); stSupportedElements.put (name, td); } /** Defines the DEL element. */ protected static void addDelElement (Map stSupportedElements) { final String name = "del"; List atts = new ArrayList (bigAttrs.size () + 2); atts.addAll (bigAttrs); addSimpleAttribute (atts, "cite"); addSimpleAttribute (atts, "datetime"); HtmlTagDesc td = new HtmlTagDesc (name, true, true, flowContent, atts); stSupportedElements.put (name, td); } /** Defines the DT element. */ protected static void addDtElement (Map stSupportedElements) { String name = "dt"; HtmlTagDesc td = new HtmlTagDesc (name, true, false, inlineContent, bigAttrs); stSupportedElements.put (name, td); } /** Defines the FIELDSET element. */ protected static void addFieldsetElement (Map stSupportedElements) { String name = "fieldset"; List content = new ArrayList (flowContent.size () + 3); content.addAll (flowContent); content.add (HtmlSpecialToken.PCDATA); content.add ("legend"); HtmlTagDesc td = new HtmlTagDesc (name, true, true, content, bigAttrs); stSupportedElements.put (name, td); } /** Defines the INS element. */ protected static void addInsElement (Map stSupportedElements) { final String name = "ins"; List atts = new ArrayList (bigAttrs.size () + 2); atts.addAll (bigAttrs); addSimpleAttribute (atts, "cite"); addSimpleAttribute (atts, "datetime"); HtmlTagDesc td = new HtmlTagDesc (name, true, true, flowContent, atts); stSupportedElements.put (name, td); } /** Defines the LABEL element. */ protected static void addLabelElement (Map stSupportedElements) { final String name = "label"; List atts = new ArrayList (bigAttrs.size () + 4); atts.addAll (bigAttrs); addSimpleAttribute (atts, "for"); addSimpleAttribute (atts, "accesskey"); addSimpleAttribute (atts, "onfocus"); addSimpleAttribute (atts, "onblur"); HtmlTagDesc td = new HtmlTagDesc (name, true, true, inlineContent, atts); stSupportedElements.put (name, td); } /** Defines the MAP element. * HTML 4.0 and 4.01 actually have different definitions here. 4.0 * allows block content or AREA elements, but not a mix of the two; * 4.01 allows a mix of the two. The current version of the code * doesn't allow that distinction to be expressed. (There are no * differences between Strict and Transitional.) */ protected static void addMapElement (Map stSupportedElements) { final String name = "map"; List atts = new ArrayList (bigAttrs.size () + 1); atts.addAll (bigAttrs); addSimpleAttribute (atts, "name"); List mapContent = new ArrayList (1); mapContent.addAll (blockContent); mapContent.add ("area"); HtmlTagDesc td = new HtmlTagDesc (name, true, true, mapContent, atts); stSupportedElements.put (name, td); } /** Defines the META element. */ protected static void addMetaElement (Map stSupportedElements) { final String name = "meta"; List atts = new ArrayList (3); addSimpleAttribute (atts, "http-equiv"); addSimpleAttribute (atts, "name"); addRequiredAttribute (atts, "content"); HtmlTagDesc td = new HtmlTagDesc (name, true, false, null, atts); stSupportedElements.put (name, td); } /** Defines the OPTGROUP (option group) element. */ protected static void addOptgroupElement (Map stSupportedElements) { final String name = "option"; List atts = new ArrayList (bigAttrs.size () + 2); atts.addAll (bigAttrs); addSelfAttribute (atts, "selected"); addSimpleAttribute (atts,"label"); List content = new ArrayList (1); content.add ("option"); HtmlTagDesc td = new HtmlTagDesc (name, true, true, content, atts); stSupportedElements.put (name, td); } /** Defines the OPTION element. */ protected static void addOptionElement (Map stSupportedElements) { final String name = "option"; List atts = new ArrayList (bigAttrs.size () + 4); atts.addAll (bigAttrs); addSelfAttribute (atts, "selected"); addSelfAttribute (atts, "disabled"); addSimpleAttribute (atts, "label"); addSimpleAttribute (atts, "value"); List content = new ArrayList (1); content.add (HtmlSpecialToken.PCDATA); HtmlTagDesc td = new HtmlTagDesc (name, true, true, content, atts); stSupportedElements.put (name, td); } /** Defines the PARAM element. */ protected static void addParamElement (Map stSupportedElements) { final String name = "param"; List atts = new ArrayList (2); addRequiredAttribute (atts, "name"); addSimpleAttribute (atts, "value"); atts.add (new HtmlAttributeDesc ("valuetype", new String [] { "data", "ref", "object" }, HtmlAttributeDesc.OTHER )); addSimpleAttribute (atts, "type"); HtmlTagDesc td = new HtmlTagDesc (name, true, false, null, atts); stSupportedElements.put (name, td); } /** Defines the Q (short quote) element. */ protected static void addQElement (Map stSupportedElements) { final String name = "q"; List atts = new ArrayList (bigAttrs.size () + 1); atts.addAll (bigAttrs); addSimpleAttribute (atts, "cite"); HtmlTagDesc td = new HtmlTagDesc (name, true, true, inlineContent, atts); stSupportedElements.put (name, td); } /** Defines the SELECT element. */ protected static void addSelectElement (Map stSupportedElements) { final String name = "select"; List atts = new ArrayList (biggerAttrs.size () + 10); atts.addAll (biggerAttrs); addSimpleAttribute (atts, "name"); addSimpleAttribute (atts, "size"); addSelfAttribute (atts, "multiple"); addSelfAttribute (atts, "disabled"); addSimpleAttribute (atts, "tabindex"); addSimpleAttribute (atts, "onfocus"); addSimpleAttribute (atts, "onblur"); addSimpleAttribute (atts, "onchange"); List content = new ArrayList (2); content.add ("option"); content.add ("optgroup"); HtmlTagDesc td = new HtmlTagDesc (name, true, true, content, atts); stSupportedElements.put (name, td); } /** Defines the SPAN element. */ protected static void addSpanElement (Map stSupportedElements) { final String name = "span"; HtmlTagDesc td = new HtmlTagDesc (name, true, true, inlineContent, biggerAttrs); stSupportedElements.put (name, td); } /** Defines the STYLE element. */ protected static void addStyleElement (Map stSupportedElements) { final String name = "style"; List content = new ArrayList (1); content.add (HtmlSpecialToken.PCDATA); List atts = new ArrayList (6); atts.addAll (i18nAttrs); addSimpleAttribute (atts, "type"); addSimpleAttribute (atts, "media"); addSimpleAttribute (atts, "title"); HtmlTagDesc td = new HtmlTagDesc (name, true, true, content, atts); stSupportedElements.put (name, td); } /** Defines the SUB (subscript) element. */ protected static void addSubElement (Map stSupportedElements) { final String name = "sub"; HtmlTagDesc td = new HtmlTagDesc (name, true, true, inlineContent, bigAttrs); stSupportedElements.put (name, td); } /** Defines the SUP (superscript) element. */ protected static void addSupElement (Map stSupportedElements) { final String name = "sup"; HtmlTagDesc td = new HtmlTagDesc (name, true, true, inlineContent, bigAttrs); stSupportedElements.put (name, td); } /** Defines the TEXTAREA element. */ protected static void addTextareaElement (Map stSupportedElements) { final String name = "textarea"; List atts = new ArrayList (biggerAttrs.size () + 12); addSimpleAttribute (atts, "name"); addSimpleAttribute (atts, "rows"); addSimpleAttribute (atts, "cols"); addSelfAttribute (atts, "disabled"); addSelfAttribute (atts, "readonly"); addSimpleAttribute (atts, "tabindex"); addSimpleAttribute (atts, "accesskey"); addSimpleAttribute (atts, "onfocus"); addSimpleAttribute (atts, "onblur"); addSimpleAttribute (atts, "onselect"); addSimpleAttribute (atts, "onchange"); List content = new ArrayList (1); content.add (HtmlSpecialToken.PCDATA); HtmlTagDesc td = new HtmlTagDesc (name, true, true, content, atts); stSupportedElements.put (name, td); } /** Defines the TBODY element. */ protected static void addTbodyElement (Map stSupportedElements, List cellalignAttrs) { final String name = "tbody"; List content = new ArrayList (1); content.add ("tr"); List atts = new ArrayList (bigAttrs.size () + 8); atts.addAll (bigAttrs); atts.addAll (cellalignAttrs); HtmlTagDesc td = new HtmlTagDesc (name, false, false, content, atts); stSupportedElements.put (name, td); } /** Defines the TD element. * The strict and transitional versions have * different attribute sets, but this is taken care of by the * initialization of thtdAtts. */ protected static void addTdElement (Map stSupportedElements) { final String name = "td"; HtmlTagDesc td = new HtmlTagDesc (name, true, false, flowContent, thtdAtts); stSupportedElements.put (name, td); } /** Defines the TFOOT element. */ protected static void addTfootElement (Map stSupportedElements, List cellalignAttrs) { final String name = "tfoot"; List content = new ArrayList (1); content.add ("tr"); List atts = new ArrayList (bigAttrs.size () + 8); atts.addAll (bigAttrs); atts.addAll (cellalignAttrs); HtmlTagDesc td = new HtmlTagDesc (name, true, false, content, atts); stSupportedElements.put (name, td); } /** Defines the TH element. * The strict and transitional versions have * different attribute sets, but this is taken care of by the * initialization of thtdAtts. */ protected static void addThElement (Map stSupportedElements) { final String name = "th"; HtmlTagDesc td = new HtmlTagDesc (name, true, false, flowContent, thtdAtts); stSupportedElements.put (name, td); } /** Defines the THEAD element. */ protected static void addTheadElement (Map stSupportedElements, List cellalignAttrs) { final String name = "thead"; List content = new ArrayList (1); content.add ("tr"); List atts = new ArrayList (bigAttrs.size () + 8); atts.addAll (bigAttrs); atts.addAll (cellalignAttrs); HtmlTagDesc td = new HtmlTagDesc (name, true, false, content, atts); stSupportedElements.put (name, td); } /** Defines the TITLE element. */ protected static void addTitleElement (Map stSupportedElements) { /* I'm confused by the DTD for this one. * Content consists only of PCDATA, but certain elements are * specifically excluded from its content. This seems * redundant. */ String name = "title"; List pcdataContent = new ArrayList (1); pcdataContent.add (HtmlSpecialToken.PCDATA); HtmlTagDesc td = new HtmlTagDesc (name, true, true, pcdataContent, i18nAttrs); stSupportedElements.put (name, td); } } jhove/classes/edu/harvard/hul/ois/jhove/module/html/Html4StrictDocDesc.java0000644000707400001440000004057510771562757026153 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.html; import java.util.*; /** * Abstract class for common features of HTML 4.0 and 4.01 strict * documents. The differences between 4.0 and 4.01 are minor, so * most of the code is found here. * * @author Gary McGath * */ public abstract class Html4StrictDocDesc extends Html4DocDesc { /** Code which is called from the static initializer of the * subclasses. Note that this is called before the class * is instantiated, and may reference only static fields * and subroutines. */ protected static void classInit4 (Map stSupportedElements) { Html4DocDesc.classInit4(stSupportedElements); String name; HtmlTagDesc td; fontMarkup = new String[] { "tt", "i", "b", "big", "small" }; listMarkup = new String [] { "ul", "ol" }; specialMarkup = new String[] { "a", "img", "object", "br", "script", "map", "q", "sub", "sup", "span", "bdo" }; /* inlineContent lists all the content types which are permitted in * the markup elements. For a first cut, strings signify the * name of the element which is permitted. */ inlineContent = new ArrayList(35); addStringsToList (fontMarkup, inlineContent); addStringsToList (phraseMarkup, inlineContent); addStringsToList (specialMarkup, inlineContent); addStringsToList (formMarkup, inlineContent); inlineContent.add (HtmlSpecialToken.PCDATA); blockContent = new ArrayList (20); addStringsToList (headings, blockContent); addStringsToList (listMarkup, blockContent); String[] blockMisc = new String[] {"p", "pre", "dl", "div", "noscript", "blockquote", "form", "hr", "table", "fieldset", "address" }; addStringsToList (blockMisc, blockContent); flowContent = new ArrayList (30); flowContent.addAll (blockContent); flowContent.addAll (inlineContent); /* Content for the BODY element, also used for other elements */ bodyContent = new ArrayList (blockContent.size () + 3); bodyContent.addAll (blockContent); bodyContent.add ("script"); bodyContent.add ("ins"); bodyContent.add ("del"); listContent = new ArrayList (1); listContent.add ("li"); /* Text elements */ int i; for (i = 0; i < fontMarkup.length; i++) { name = fontMarkup[i]; td = new HtmlTagDesc (name, true, true, inlineContent, bigAttrs); stSupportedElements.put (name, td); } /* Phrase elements. */ for (i = 0; i < phraseMarkup.length; i++) { name = phraseMarkup[i]; td = new HtmlTagDesc (name, true, true, inlineContent, bigAttrs); stSupportedElements.put (name, td); } thtdAtts = new ArrayList (bigAttrs.size() + 7); // common attribute list for TH and TD thtdAtts.addAll (bigAttrs); addSimpleAttribute (thtdAtts, "abbr"); addSimpleAttribute (thtdAtts, "axis"); addSimpleAttribute (thtdAtts, "headers"); addSimpleAttribute (thtdAtts, "scope"); thtdAtts.add (halignAtt); thtdAtts.add (valignAtt); addSimpleAttribute (thtdAtts, "rowspan"); addSimpleAttribute (thtdAtts, "colspan"); } /** Static initializers for each element. If elements are common to more * than one HTML version, they should be moved into the superclass. * Different initializers may have different argument lists. */ /** Defines the A element. */ protected static void addAElement (Map stSupportedElements) { /* The Anchor (A) element */ String name = "a"; List atts = new ArrayList (bigAttrs.size () + 14); atts.addAll (bigAttrs); addSimpleAttribute (atts, "type"); addSimpleAttribute (atts, "name"); addSimpleAttribute (atts, "href"); addSimpleAttribute (atts, "hreflang"); addSimpleAttribute (atts, "rel"); addSimpleAttribute (atts, "rev"); addSimpleAttribute (atts, "accesskey"); addSimpleAttribute (atts, "shape"); addSimpleAttribute (atts, "rect"); addSimpleAttribute (atts, "coords"); addSimpleAttribute (atts, "tabindex"); addSimpleAttribute (atts, "onfocus"); addSimpleAttribute (atts, "onblur"); List content = new ArrayList (inlineContent.size ()); content.addAll (inlineContent); content.remove ("a"); HtmlTagDesc td = new HtmlTagDesc (name, true, true, content, atts); stSupportedElements.put (name, td); } /** Defines the ADDRESS element. */ protected static void addAddressElement (Map stSupportedElements) { String name = "address"; HtmlTagDesc td = new HtmlTagDesc (name, true, true, inlineContent, bigAttrs); stSupportedElements.put (name, td); } protected static void addAreaElement (Map stSupportedElements, HtmlAttributeDesc shapeAtt) { String name = "area"; List atts = new ArrayList (5); atts.add (shapeAtt); addSimpleAttribute (atts, "coords"); addSimpleAttribute (atts, "href"); atts.add (new HtmlAttributeDesc ("nohref", new String[] {"nohref"}, HtmlAttributeDesc.IMPLIED)); atts.add (new HtmlAttributeDesc ("alt", null, HtmlAttributeDesc.REQUIRED)); addSimpleAttribute (atts, "tabindex"); addSimpleAttribute (atts, "accesskey"); addSimpleAttribute (atts, "onfocus"); addSimpleAttribute (atts, "onblur"); HtmlTagDesc td = new HtmlTagDesc (name, true, false, null, atts); stSupportedElements.put (name, td); } protected static void addBaseElement (Map stSupportedElements) { String name = "base"; List atts = new ArrayList (1); addRequiredAttribute (atts, "href"); HtmlTagDesc td = new HtmlTagDesc (name, true, false, null, atts); stSupportedElements.put (name, td); } protected static void addBlockquoteElement (Map stSupportedElements) { String name = "blockquote"; List content = new ArrayList (blockContent.size () + 1); content.addAll (blockContent); content.add ("script"); List atts = new ArrayList (bigAttrs.size () + 1); atts.addAll (bigAttrs); addSimpleAttribute (atts, "cite"); HtmlTagDesc td = new HtmlTagDesc (name, true, true, content, atts); stSupportedElements.put (name, td); } protected static void addBrElement (Map stSupportedElements, List coreAttrs) { String name = "br"; HtmlTagDesc td = new HtmlTagDesc (name, true, false, null, coreAttrs); stSupportedElements.put (name, td); } protected static void addButtonElement (Map stSupportedElements) { String name = "button"; List content = new ArrayList (formMarkup.length + 3); addStringsToList(formMarkup, content); content.add ("form"); content.add ("fieldset"); List atts = new ArrayList (biggerAttrs.size () + 8); atts.addAll (biggerAttrs); addSimpleAttribute (atts, "name"); addSimpleAttribute (atts, "value"); atts.add (new HtmlAttributeDesc ("type", new String[] {"button", "submit" , "reset"}, HtmlAttributeDesc.OTHER)); addSelfAttribute (atts, "disabled"); addSimpleAttribute (atts, "tabindex"); addSimpleAttribute (atts, "accesskey"); addSimpleAttribute (atts, "onfocus"); addSimpleAttribute (atts, "onblur"); } protected static void addCaptionElement (Map stSupportedElements, List inlineContent, HtmlAttributeDesc valignAtt) { String name = "caption"; HtmlTagDesc td = new HtmlTagDesc (name, true, true, inlineContent, bigAttrs); stSupportedElements.put (name, td); } protected static void addDivElement (Map stSupportedElements) { String name = "div"; HtmlTagDesc td = new HtmlTagDesc (name, true, true, flowContent, bigAttrs); stSupportedElements.put (name, td); } protected static void addDlElement (Map stSupportedElements) { String name = "dl"; List dlContent = new ArrayList (2); addStringsToList(new String[] { "dt", "dd" }, dlContent); HtmlTagDesc td = new HtmlTagDesc (name, true, true, dlContent, bigAttrs); stSupportedElements.put (name, td); } protected static void addHeadElement (Map stSupportedElements) { String name = "head"; String[] headMisc = new String[] {"script", "style", "meta", "link" }; List headContent = new ArrayList (7); headContent.add ("title"); headContent.add ("base"); headContent.add ("script"); headContent.add ("style"); headContent.add ("meta"); headContent.add ("link"); headContent.add ("object"); HtmlTagDesc td = new HtmlTagDesc (name, false, false, headContent, null); stSupportedElements.put (name, td); /* Attributes TITLE (required), ISINDEX (optional), and BASE (optional) * are supposed to come in that order, ahead of anything else. * For the moment, just toss them in with the rest. */ addStringsToList (headMisc, headContent); } protected static void addLegendElement (Map stSupportedElements) { final String name = "label"; List atts = new ArrayList (bigAttrs.size () + 1); atts.addAll (bigAttrs); addSimpleAttribute (atts, "accesskey"); HtmlTagDesc td = new HtmlTagDesc (name, true, true, inlineContent, atts); stSupportedElements.put (name, td); } protected static void addLiElement (Map stSupportedElements) { final String name = "li"; HtmlTagDesc td = new HtmlTagDesc (name, true, false, flowContent, bigAttrs); stSupportedElements.put (name, td); } protected static void addLinkElement (Map stSupportedElements) { final String name = "link"; List atts = new ArrayList (bigAttrs.size () + 8); atts.addAll (bigAttrs); addSimpleAttribute (atts, "charset"); addSimpleAttribute (atts, "href"); addSimpleAttribute (atts, "hreflang"); addSimpleAttribute (atts, "type"); addSimpleAttribute (atts, "rel"); addSimpleAttribute (atts, "rev"); addSimpleAttribute (atts, "media"); HtmlTagDesc td = new HtmlTagDesc (name, true, false, null, atts); stSupportedElements.put (name, td); } protected static void addNoscriptElement (Map stSupportedElements) { final String name = "noscript"; HtmlTagDesc td = new HtmlTagDesc (name, true, false, blockContent, bigAttrs); stSupportedElements.put (name, td); } protected static void addObjectElement (Map stSupportedElements) { final String name = "object"; List atts = new ArrayList (biggerAttrs.size () + 13); atts.addAll (biggerAttrs); addSelfAttribute (atts, "declare"); addSimpleAttribute (atts, "classid"); addSimpleAttribute (atts, "codebase"); addSimpleAttribute (atts, "data"); addSimpleAttribute (atts, "type"); addSimpleAttribute (atts, "codetype"); addSimpleAttribute (atts, "archive"); addSimpleAttribute (atts, "standby"); addSimpleAttribute (atts, "height"); addSimpleAttribute (atts, "width"); addSimpleAttribute (atts, "usemap"); addSimpleAttribute (atts, "name"); addSimpleAttribute (atts, "tabindex"); } protected static void addOlElement (Map stSupportedElements) { final String name = "ol"; HtmlTagDesc td = new HtmlTagDesc (name, true, true, listContent, bigAttrs); stSupportedElements.put (name, td); } protected static void addPElement (Map stSupportedElements) { final String name = "p"; HtmlTagDesc td = new HtmlTagDesc (name, true, false, inlineContent, bigAttrs); stSupportedElements.put (name, td); } protected static void addPreElement (Map stSupportedElements) { final String name = "pre"; List preContent = new ArrayList (inlineContent.size ()); preContent.addAll(inlineContent); /* Take out excluded elements */ removeStringsFromList (preContent, new String [] {"img", "object", "big", "small", "sub", "sup"}); HtmlTagDesc td = new HtmlTagDesc (name, true, true, preContent, bigAttrs); stSupportedElements.put (name, td); } protected static void addScriptElement (Map stSupportedElements) { final String name = "script"; List content = new ArrayList (1); content.add (HtmlSpecialToken.PCDATA); List atts = new ArrayList (6); addSimpleAttribute (atts, "charset"); addSimpleAttribute (atts, "type"); addSimpleAttribute (atts, "src"); addSelfAttribute (atts, "defer"); addSimpleAttribute (atts, "event"); addSimpleAttribute (atts, "for"); HtmlTagDesc td = new HtmlTagDesc (name, true, true, content, atts); stSupportedElements.put (name, td); } protected static void addTableElement (Map stSupportedElements) { final String name = "table"; List atts = new ArrayList (biggerAttrs.size () + 8); atts.addAll (biggerAttrs); addSimpleAttribute (atts, "summary"); addSimpleAttribute (atts, "width"); addSimpleAttribute (atts, "border"); atts.add (new HtmlAttributeDesc ("frame", new String[] { "void", "above", "below", "hsides", "lhs", "rhs", "vsides", "box", "border" }, HtmlAttributeDesc.IMPLIED)); atts.add (new HtmlAttributeDesc ("rules", new String[] { "none", "groups", "rows", "cols", "all" }, HtmlAttributeDesc.IMPLIED)); addSimpleAttribute (atts, "rules"); addSimpleAttribute (atts, "cellspacing"); addSimpleAttribute (atts, "cellpadding"); addSimpleAttribute (atts, "datapagesize"); List[] contentArray = new List[5]; int[] contentSequence = new int[] { HtmlTagDesc.SEQ0_1, HtmlTagDesc.SEQ0_MANY, HtmlTagDesc.SEQ0_1, HtmlTagDesc.SEQ0_1, HtmlTagDesc.SEQ1_MANY }; List content = new ArrayList (1); content.add ("caption"); contentArray[0] = content; content = new ArrayList(2); content.add ("col"); content.add ("colgroup"); contentArray[1] = content; content = new ArrayList (1); content.add ("thead"); contentArray[2] = content; content = new ArrayList (1); content.add ("tfoot"); contentArray[3] = content; content = new ArrayList (1); content.add ("tbody"); contentArray[4] = content; HtmlTagDesc td = new HtmlTagDesc (name, true, true, contentSequence, contentArray, atts); stSupportedElements.put (name, td); } protected static void addTrElement (Map stSupportedElements) { final String name = "tr"; List atts = new ArrayList (bigAttrs.size() + 3); atts.addAll (bigAttrs); atts.add (halignAtt); atts.add (valignAtt); List content = new ArrayList (2); content.add ("th"); content.add ("td"); HtmlTagDesc td = new HtmlTagDesc (name, true, false, content, atts); td.addImplicitContainer((HtmlTagDesc) stSupportedElements.get ("tbody")); stSupportedElements.put (name, td); } protected static void addUlElement (Map stSupportedElements) { final String name = "ul"; HtmlTagDesc td = new HtmlTagDesc (name, true, true, listContent, bigAttrs); stSupportedElements.put (name, td); } } jhove/classes/edu/harvard/hul/ois/jhove/module/html/Html4TFDocDesc.java0000644000707400001440000006304210771562760025200 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.html; import edu.harvard.hul.ois.jhove.module.HtmlModule; import java.util.*; /** * Abstract class for common features of HTML 4.0 and 4.01 transitional and frameset * documents. The differences between 4.0 and 4.01 are minor, as * are the differences between transitional and frameset so * most of the code is found here. * * @author Gary McGath * */ public abstract class Html4TFDocDesc extends Html4DocDesc { /** Code which is called from the static initializer of the * subclasses. Note that this is called before the class * is instantiated, and may reference only static fields * and subroutines. */ protected static void classInit4 (Map stSupportedElements) { Html4DocDesc.classInit4(stSupportedElements); String name; HtmlTagDesc td; fontMarkup = new String[] { "tt", "i", "b", "u", "s", "strike", "big", "small" }; listMarkup = new String [] { "ul", "ol", "dir", "menu" }; specialMarkup = new String[] { "a", "img", "applet", "object", "font", "basefont", "br", "script", "map", "q", "sub", "sup", "span", "bdo", "iframe" }; /* inlineContent lists all the content types which are permitted in * the markup elements. For a first cut, strings signify the * name of the element which is permitted. */ inlineContent = new ArrayList(35); addStringsToList (fontMarkup, inlineContent); addStringsToList (phraseMarkup, inlineContent); addStringsToList (specialMarkup, inlineContent); addStringsToList (formMarkup, inlineContent); inlineContent.add (HtmlSpecialToken.PCDATA); blockContent = new ArrayList (20); addStringsToList (headings, blockContent); addStringsToList (listMarkup, blockContent); String[] blockMisc = new String[] {"p", "pre", "dl", "div", "center", "noscript", "blockquote", "form", "hr", "table", "fieldset", "address" }; addStringsToList (blockMisc, blockContent); flowContent = new ArrayList (30); flowContent.addAll (blockContent); flowContent.addAll (inlineContent); /* Content for the BODY element, also used for other elements */ bodyContent = new ArrayList (flowContent.size () + 3); bodyContent.addAll (flowContent); bodyContent.add ("ins"); bodyContent.add ("del"); listContent = new ArrayList (1); listContent.add ("li"); thtdAtts = new ArrayList (bigAttrs.size() + 7); // common attribute list for TH and TD thtdAtts.addAll (bigAttrs); addSimpleAttribute (thtdAtts, "abbr"); addSimpleAttribute (thtdAtts, "axis"); addSimpleAttribute (thtdAtts, "headers"); addSimpleAttribute (thtdAtts, "scope"); thtdAtts.add (halignAtt); thtdAtts.add (valignAtt); addSelfAttribute (thtdAtts, "nowrap"); addSimpleAttribute (thtdAtts, "rowspan"); addSimpleAttribute (thtdAtts, "colspan"); addSimpleAttribute (thtdAtts, "bgcolor"); addSimpleAttribute (thtdAtts, "width"); addSimpleAttribute (thtdAtts, "height"); } /** Defines the A element. */ protected static void addAElement (Map stSupportedElements) { /* The Anchor (A) element */ String name = "a"; List atts = new ArrayList (bigAttrs.size () + 14); atts.addAll (bigAttrs); addSimpleAttribute (atts, "type"); addSimpleAttribute (atts, "name"); addSimpleAttribute (atts, "href"); addSimpleAttribute (atts, "hreflang"); addSimpleAttribute (atts, "target"); // not in strict addSimpleAttribute (atts, "rel"); addSimpleAttribute (atts, "rev"); addSimpleAttribute (atts, "accesskey"); addSimpleAttribute (atts, "shape"); addSimpleAttribute (atts, "rect"); addSimpleAttribute (atts, "coords"); addSimpleAttribute (atts, "tabindex"); addSimpleAttribute (atts, "onfocus"); addSimpleAttribute (atts, "onblur"); List content = new ArrayList (inlineContent.size ()); content.addAll (inlineContent); content.remove ("a"); HtmlTagDesc td = new HtmlTagDesc (name, true, true, content, atts); stSupportedElements.put (name, td); } protected static void addAppletElement (Map stSupportedElements, HtmlAttributeDesc ialignAtt) { String name = "applet"; List content = new ArrayList (flowContent.size ()); content.addAll (flowContent); content.add ("param"); List atts = new ArrayList (9); addSimpleAttribute (atts, "codebase"); addSimpleAttribute (atts, "archive"); addSimpleAttribute (atts, "code"); addSimpleAttribute (atts, "object"); addSimpleAttribute (atts, "alt"); addSimpleAttribute (atts, "alt"); addSimpleAttribute (atts, "name"); addRequiredAttribute (atts, "width"); addRequiredAttribute (atts, "height"); atts.add (ialignAtt); addSimpleAttribute (atts, "hspace"); addSimpleAttribute (atts, "vspace"); HtmlTagDesc td = new HtmlTagDesc (name, true, false, content, atts); stSupportedElements.put (name, td); } protected static void addAreaElement (Map stSupportedElements, HtmlAttributeDesc shapeAtt) { String name = "area"; List atts = new ArrayList (10); atts.add (shapeAtt); addSimpleAttribute (atts, "coords"); addSimpleAttribute (atts, "href"); addSimpleAttribute (atts, "target"); atts.add (new HtmlAttributeDesc ("nohref", new String[] {"nohref"}, HtmlAttributeDesc.IMPLIED)); atts.add (new HtmlAttributeDesc ("alt", null, HtmlAttributeDesc.REQUIRED)); addSimpleAttribute (atts, "tabindex"); addSimpleAttribute (atts, "accesskey"); addSimpleAttribute (atts, "onfocus"); addSimpleAttribute (atts, "onblur"); HtmlTagDesc td = new HtmlTagDesc (name, true, false, null, atts); stSupportedElements.put (name, td); } protected static void addBaseElement (Map stSupportedElements) { String name = "base"; List atts = new ArrayList (2); addSimpleAttribute (atts, "href"); addSimpleAttribute (atts, "target"); HtmlTagDesc td = new HtmlTagDesc (name, true, false, null, atts); stSupportedElements.put (name, td); } protected static void addBasefontElement (Map stSupportedElements) { String name = "basefont"; List atts = new ArrayList (4); addSimpleAttribute (atts, "id"); addSimpleAttribute (atts, "size"); addSimpleAttribute (atts, "color"); addSimpleAttribute (atts, "face"); HtmlTagDesc td = new HtmlTagDesc (name, true, false, null, atts); stSupportedElements.put (name, td); } protected static void addBlockquoteElement (Map stSupportedElements) { String name = "blockquote"; List content = new ArrayList (blockContent.size () + 1); content.addAll (blockContent); content.add ("script"); List atts = new ArrayList (bigAttrs.size () + 1); atts.addAll (bigAttrs); addSimpleAttribute (atts, "cite"); HtmlTagDesc td = new HtmlTagDesc (name, true, true, flowContent, atts); stSupportedElements.put (name, td); } protected static void addBrElement (Map stSupportedElements, List coreAttrs) { String name = "br"; List atts = new ArrayList (coreAttrs.size () + 1); atts.addAll (coreAttrs); atts.add (new HtmlAttributeDesc ("clear", new String[] {"left", "all", "right", "none" }, HtmlAttributeDesc.OTHER)); HtmlTagDesc td = new HtmlTagDesc (name, true, false, null, atts); stSupportedElements.put (name, td); } protected static void addButtonElement (Map stSupportedElements) { String name = "button"; List content = new ArrayList (formMarkup.length + 3); addStringsToList(formMarkup, content); content.add ("form"); content.add ("isindex"); content.add ("fieldset"); content.add ("iframe"); List atts = new ArrayList (biggerAttrs.size () + 8); atts.addAll (biggerAttrs); addSimpleAttribute (atts, "name"); addSimpleAttribute (atts, "value"); atts.add (new HtmlAttributeDesc ("type", new String[] {"button", "submit" , "reset"}, HtmlAttributeDesc.OTHER)); addSelfAttribute (atts, "disabled"); addSimpleAttribute (atts, "tabindex"); addSimpleAttribute (atts, "accesskey"); addSimpleAttribute (atts, "onfocus"); addSimpleAttribute (atts, "onblur"); } protected static void addCaptionElement (Map stSupportedElements, List inlineContent, HtmlAttributeDesc valignAtt) { String name = "caption"; List atts = new ArrayList (bigAttrs.size () + 1); atts.add (new HtmlAttributeDesc ("align", new String[] {"top", "bottom", "left", "right" }, HtmlAttributeDesc.IMPLIED)); HtmlTagDesc td = new HtmlTagDesc (name, true, true, inlineContent, atts); stSupportedElements.put (name, td); } protected static void addCenterElement (Map stSupportedElements) { String name = "center"; HtmlTagDesc td = new HtmlTagDesc (name, true, true, flowContent, bigAttrs); stSupportedElements.put (name, td); } protected static void addDirElement (Map stSupportedElements) { String name = "dir"; List atts = new ArrayList (1); addSelfAttribute (atts, "compact"); HtmlTagDesc td = new HtmlTagDesc (name, true, true, listContent, atts); stSupportedElements.put (name, td); } protected static void addDivElement (Map stSupportedElements) { String name = "div"; List atts = new ArrayList (bigAttrs.size () + 1); atts.addAll (bigAttrs); atts.add (new HtmlAttributeDesc ("align", new String [] {"left", "center", "right", "justify"}, HtmlAttributeDesc.IMPLIED)); HtmlTagDesc td = new HtmlTagDesc (name, true, true, flowContent, atts); stSupportedElements.put (name, td); } protected static void addDlElement (Map stSupportedElements) { String name = "dl"; List dlContent = new ArrayList (2); addStringsToList(new String[] { "dt", "dd" }, dlContent); List atts = new ArrayList (bigAttrs.size () + 1); addSelfAttribute(atts, "compact"); HtmlTagDesc td = new HtmlTagDesc (name, true, true, dlContent, atts); stSupportedElements.put (name, td); } /** Adds the Font element. */ protected static void addFontElement (Map stSupportedElements) { String name = "font"; List atts = new ArrayList (bigAttrs.size () + 10); atts.addAll (bigAttrs); atts.addAll (i18nAttrs); addSimpleAttribute (atts, "size"); addSimpleAttribute (atts, "color"); addSimpleAttribute (atts, "face"); HtmlTagDesc td = new HtmlTagDesc (name, true, true, inlineContent, atts); stSupportedElements.put (name, td); } /** Adds to Frame element. */ protected static void addFrameElement (Map stSupportedElements) { String name = "frame"; List atts = new ArrayList (bigAttrs.size () + 8); atts.addAll (bigAttrs); addSimpleAttribute (atts, "longdesc"); addSimpleAttribute (atts, "name"); addSimpleAttribute (atts, "src"); addSimpleAttribute (atts, "marginwidth"); addSimpleAttribute (atts, "marginheight"); addSelfAttribute (atts, "noresize"); atts.add (new HtmlAttributeDesc ("scrolling", new String[] { "yes", "no", "auto" }, HtmlAttributeDesc.OTHER)); HtmlTagDesc td = new HtmlTagDesc (name, true, false, null, atts); stSupportedElements.put (name, td); } /** Adds the Frameset element. This is called only for * 4.0 and 4.01 Frameset docuemnts. */ protected static void addFramesetElement (Map stSupportedElements) { String name = "frameset"; List content = new ArrayList (3); addStringsToList (new String[] {"frameset", "frame", "noframes" }, content); List atts = new ArrayList (coreAttrs.size () + 4); atts.addAll (coreAttrs); addSimpleAttribute(atts, "rows"); addSimpleAttribute(atts, "cols"); addSimpleAttribute(atts, "onload"); addSimpleAttribute(atts, "onunload"); HtmlTagDesc td = new HtmlTagDesc (name, false, false, content, atts); stSupportedElements.put (name, td); } protected static void addHeadElement (Map stSupportedElements) { String name = "head"; String[] headMisc = new String[] {"script", "style", "meta", "link" }; List headContent = new ArrayList (7); headContent.add ("title"); headContent.add ("isindex"); headContent.add ("base"); headContent.add ("script"); headContent.add ("style"); headContent.add ("meta"); headContent.add ("link"); headContent.add ("object"); HtmlTagDesc td = new HtmlTagDesc (name, false, false, headContent, null); stSupportedElements.put (name, td); /* Attributes TITLE (required), ISINDEX (optional), and BASE (optional) * are supposed to come in that order, ahead of anything else. * For the moment, just toss them in with the rest. */ addStringsToList (headMisc, headContent); } protected static void addHrElement (Map stSupportedElements) { String name = "hr"; List atts = new ArrayList (bigAttrs.size () + 4); atts.add (new HtmlAttributeDesc ("align", new String[] { "left", "center", "right" }, HtmlAttributeDesc.IMPLIED)); addSelfAttribute (atts, "noshade"); addSimpleAttribute (atts, "size"); addSimpleAttribute (atts, "width"); HtmlTagDesc td = new HtmlTagDesc (name, true, false, null, atts); stSupportedElements.put (name, td); } protected static void addInputElement (Map stSupportedElements) { final String name = "input"; List atts = new ArrayList (biggerAttrs.size () + 20); atts.addAll (biggerAttrs); atts.add (new HtmlAttributeDesc ("type", new String[] {"text", "password", "checkbox", "radio", "submit", "reset", "file", "hidden", "image", "button"}, HtmlAttributeDesc.OTHER)); addSimpleAttribute (atts, "name"); addSimpleAttribute (atts, "value"); addSelfAttribute (atts, "checked"); addSelfAttribute (atts, "disabled"); addSelfAttribute (atts, "readonly"); addSimpleAttribute (atts, "size"); addSimpleAttribute (atts, "maxlength"); addSimpleAttribute (atts, "src"); addSimpleAttribute (atts, "alt"); addSimpleAttribute (atts, "usemap"); addSimpleAttribute (atts, "tabindex"); addSimpleAttribute (atts, "accesskey"); addSimpleAttribute (atts, "onfocus"); addSimpleAttribute (atts, "onblur"); addSimpleAttribute (atts, "onselect"); addSimpleAttribute (atts, "onchange"); addSimpleAttribute (atts, "accept"); atts.add (new HtmlAttributeDesc ("align", new String[] { "top", "middle", "bottom", "left", "right" }, HtmlAttributeDesc.IMPLIED)); HtmlTagDesc td = new HtmlTagDesc (name, true, true, null, atts); stSupportedElements.put (name, td); } protected static void addLegendElement (Map stSupportedElements) { final String name = "label"; List atts = new ArrayList (bigAttrs.size () + 2); atts.addAll (bigAttrs); addSimpleAttribute (atts, "accesskey"); atts.add (new HtmlAttributeDesc ("align", new String[] {"top", "left", "bottom", "right" }, HtmlAttributeDesc.IMPLIED)); HtmlTagDesc td = new HtmlTagDesc (name, true, true, inlineContent, atts); stSupportedElements.put (name, td); } protected static void addLiElement (Map stSupportedElements) { final String name = "li"; List atts = new ArrayList (bigAttrs.size () + 2); atts.addAll (bigAttrs); addSimpleAttribute (atts, "type"); addSimpleAttribute (atts, "value"); HtmlTagDesc td = new HtmlTagDesc (name, true, false, flowContent, atts); stSupportedElements.put (name, td); } protected static void addLinkElement (Map stSupportedElements) { final String name = "link"; List atts = new ArrayList (bigAttrs.size () + 8); atts.addAll (bigAttrs); addSimpleAttribute (atts, "charset"); addSimpleAttribute (atts, "href"); addSimpleAttribute (atts, "hreflang"); addSimpleAttribute (atts, "type"); addSimpleAttribute (atts, "rel"); addSimpleAttribute (atts, "rev"); addSimpleAttribute (atts, "media"); addSimpleAttribute (atts, "target"); HtmlTagDesc td = new HtmlTagDesc (name, true, false, null, atts); stSupportedElements.put (name, td); } protected static void addMenuElement (Map stSupportedElements) { final String name = "menu"; List atts = new ArrayList (1); addSelfAttribute (atts, "compact"); HtmlTagDesc td = new HtmlTagDesc (name, true, true, listContent, atts); stSupportedElements.put (name, td); } /** Adds the NOFRAMES element. The content differs between Transitional * and Frameset DTD's. */ protected static void addNoframesElement (Map stSupportedElements, int version) { final String name = "noframes"; List content; if (version == HtmlModule.HTML_4_01_FRAMESET || version == HtmlModule.HTML_4_0_FRAMESET) { content = new ArrayList (1); // There's something I obviously don't understand about DTD syntax. // The content is given as (BODY) -(NOFRAMES) // But if the only allowed element is BODY, it's superfluous to // exclude NOFRAMES. What am I missing? content.add ("body"); } else { content = flowContent; } HtmlTagDesc td = new HtmlTagDesc (name, true, true, content, bigAttrs); stSupportedElements.put (name, td); } protected static void addNoscriptElement (Map stSupportedElements) { final String name = "noscript"; HtmlTagDesc td = new HtmlTagDesc (name, true, false, flowContent, bigAttrs); stSupportedElements.put (name, td); } protected static void addObjectElement (Map stSupportedElements) { final String name = "object"; List atts = new ArrayList (biggerAttrs.size () + 13); atts.addAll (biggerAttrs); addSelfAttribute (atts, "declare"); addSimpleAttribute (atts, "classid"); addSimpleAttribute (atts, "codebase"); addSimpleAttribute (atts, "data"); addSimpleAttribute (atts, "type"); addSimpleAttribute (atts, "codetype"); addSimpleAttribute (atts, "archive"); addSimpleAttribute (atts, "standby"); addSimpleAttribute (atts, "height"); addSimpleAttribute (atts, "width"); addSimpleAttribute (atts, "usemap"); addSimpleAttribute (atts, "name"); addSimpleAttribute (atts, "tabindex"); addSimpleAttribute (atts, "align"); addSimpleAttribute (atts, "border"); addSimpleAttribute (atts, "hspace"); addSimpleAttribute (atts, "vspace"); } protected static void addOlElement (Map stSupportedElements) { final String name = "ol"; List atts = new ArrayList (bigAttrs.size () + 3); atts.addAll (bigAttrs); addSimpleAttribute (atts, "type"); addSelfAttribute (atts, "compact"); addSimpleAttribute (atts, "start"); HtmlTagDesc td = new HtmlTagDesc (name, true, true, listContent, atts); stSupportedElements.put (name, td); } protected static void addPElement (Map stSupportedElements) { final String name = "p"; List atts = new ArrayList (bigAttrs.size () + 1); atts.addAll (bigAttrs); atts.add (new HtmlAttributeDesc ("align", new String [] {"left", "center", "right", "justify"}, HtmlAttributeDesc.IMPLIED)); HtmlTagDesc td = new HtmlTagDesc (name, true, false, inlineContent, atts); stSupportedElements.put (name, td); } protected static void addPreElement (Map stSupportedElements) { final String name = "pre"; List preContent = new ArrayList (inlineContent.size ()); preContent.addAll(inlineContent); /* Take out excluded elements */ removeStringsFromList (preContent, new String [] {"img", "object", "big", "small", "sub", "sup"}); List atts = new ArrayList (bigAttrs.size () + 1); atts.addAll (bigAttrs); addSimpleAttribute (atts, "width"); HtmlTagDesc td = new HtmlTagDesc (name, true, true, preContent, atts); stSupportedElements.put (name, td); } protected static void addScriptElement (Map stSupportedElements) { final String name = "script"; List content = new ArrayList (1); content.add (HtmlSpecialToken.PCDATA); List atts = new ArrayList (6); addSimpleAttribute (atts, "charset"); addSimpleAttribute (atts, "type"); addSimpleAttribute (atts, "language"); addSimpleAttribute (atts, "src"); addSelfAttribute (atts, "defer"); addSimpleAttribute (atts, "event"); addSimpleAttribute (atts, "for"); HtmlTagDesc td = new HtmlTagDesc (name, true, true, content, atts); stSupportedElements.put (name, td); } protected static void addTableElement (Map stSupportedElements) { final String name = "table"; List atts = new ArrayList (biggerAttrs.size () + 10); atts.addAll (biggerAttrs); addSimpleAttribute (atts, "summary"); addSimpleAttribute (atts, "width"); addSimpleAttribute (atts, "border"); atts.add (new HtmlAttributeDesc ("frame", new String[] { "void", "above", "below", "hsides", "lhs", "rhs", "vsides", "box", "border" }, HtmlAttributeDesc.IMPLIED)); atts.add (new HtmlAttributeDesc ("rules", new String[] { "none", "groups", "rows", "cols", "all" }, HtmlAttributeDesc.IMPLIED)); addSimpleAttribute (atts, "rules"); addSimpleAttribute (atts, "cellspacing"); addSimpleAttribute (atts, "cellpadding"); atts.add (new HtmlAttributeDesc ("align", new String[] { "left", "center", "right" }, HtmlAttributeDesc.IMPLIED)); addSimpleAttribute (atts, "bgcolor"); addSimpleAttribute (atts, "datapagesize"); List[] contentArray = new List[5]; int[] contentSequence = new int[] { HtmlTagDesc.SEQ0_1, HtmlTagDesc.SEQ0_MANY, HtmlTagDesc.SEQ0_1, HtmlTagDesc.SEQ0_1, HtmlTagDesc.SEQ1_MANY }; List content = new ArrayList (1); content.add ("caption"); contentArray[0] = content; content = new ArrayList(2); content.add ("col"); content.add ("colgroup"); contentArray[1] = content; content = new ArrayList (1); content.add ("thead"); contentArray[2] = content; content = new ArrayList (1); content.add ("tfoot"); contentArray[3] = content; content = new ArrayList (1); content.add ("tbody"); contentArray[4] = content; HtmlTagDesc td = new HtmlTagDesc (name, true, true, contentSequence, contentArray, atts); stSupportedElements.put (name, td); } protected static void addTrElement (Map stSupportedElements) { final String name = "tr"; List atts = new ArrayList (bigAttrs.size() + 3); atts.addAll (bigAttrs); atts.add (halignAtt); atts.add (valignAtt); addSimpleAttribute (atts, "bgcolor"); List content = new ArrayList (2); content.add ("th"); content.add ("td"); HtmlTagDesc td = new HtmlTagDesc (name, true, false, content, atts); td.addImplicitContainer((HtmlTagDesc) stSupportedElements.get ("tbody")); stSupportedElements.put (name, td); } protected static void addUlElement (Map stSupportedElements) { final String name = "ul"; List atts = new ArrayList (bigAttrs.size () + 2); atts.addAll (bigAttrs); addSimpleAttribute (atts, "type"); addSelfAttribute (atts, "compact"); HtmlTagDesc td = new HtmlTagDesc (name, true, true, listContent, atts); stSupportedElements.put (name, td); } } jhove/classes/edu/harvard/hul/ois/jhove/module/html/Html4_01FrameDocDesc.java0000644000707400001440000000223110771562766026220 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.html; import edu.harvard.hul.ois.jhove.module.HtmlModule; import java.util.*; /** * This class describes the requirements of an HTML 4.01 Frameset document. * * @author Gary McGath * */ public class Html4_01FrameDocDesc extends Html4_01TFDocDesc { /* Static, private map of supported tags. * For efficiency, we create a static Map * of supported tags just once, then assign that to stSupportedElements * in the constructor. */ private static Map stSupportedElements; { stSupportedElements = new HashMap (280); Html4_01TFDocDesc.classInit4 (stSupportedElements, HtmlModule.HTML_4_01_FRAMESET); } /** Constructor. */ public Html4_01FrameDocDesc () { // publish stSupportedElements to superclass supportedElements = stSupportedElements; init (); } } jhove/classes/edu/harvard/hul/ois/jhove/module/html/Html4_01StrictDocDesc.java0000644000707400001440000002132310771562766026441 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.html; //import edu.harvard.hul.ois.jhove.*; import java.util.*; //import java.io.*; /** * This class describes the requirements of an HTML 4.01 Strict document. * * @author Gary McGath * */ public class Html4_01StrictDocDesc extends Html4StrictDocDesc { /* Static, private map of supported tags. * For efficiency, we create a static Map * of supported tags just once, then assign that to stSupportedElements * in the constructor. */ private static Map stSupportedElements; /* Static initializer. A superclass is initialized before its * subclass, so we can count on the static initializer of HtmlDocDesc * to have run already. */ static { stSupportedElements = new HashMap (280); classInit4 (stSupportedElements); int i; String name; HtmlTagDesc td; addSupElement (stSupportedElements); addSubElement (stSupportedElements); addSpanElement (stSupportedElements); addBdoElement (stSupportedElements); addBrElement (stSupportedElements, coreAttrs); addBodyElement (stSupportedElements); addAddressElement (stSupportedElements); addDivElement (stSupportedElements); addAElement (stSupportedElements); addMapElement (stSupportedElements); HtmlAttributeDesc shapeAtt = new HtmlAttributeDesc ("shape", new String[] {"rect", "circle", "poly", "default" }, HtmlAttributeDesc.REQUIRED); addAreaElement (stSupportedElements, shapeAtt); addLinkElement (stSupportedElements); addImgElement (stSupportedElements); addObjectElement (stSupportedElements); addParamElement (stSupportedElements); addHrElement (stSupportedElements); addPElement (stSupportedElements); /* The heading (H1-H6) elements */ for (i = 0; i < headings.length; i++) { name = headings[i]; td = new HtmlTagDesc (name, true, true, inlineContent, bigAttrs); stSupportedElements.put (name, td); } addPreElement (stSupportedElements); addQElement (stSupportedElements); addBlockquoteElement (stSupportedElements); addInsElement (stSupportedElements); addDelElement (stSupportedElements); addDlElement (stSupportedElements); addDtElement (stSupportedElements); addDdElement (stSupportedElements); addOlElement (stSupportedElements); addUlElement (stSupportedElements); addLiElement (stSupportedElements); addFormElement (stSupportedElements); addLabelElement (stSupportedElements); addInputElement (stSupportedElements); addSelectElement (stSupportedElements); addOptgroupElement (stSupportedElements); addOptionElement (stSupportedElements); addTextareaElement (stSupportedElements); addFieldsetElement (stSupportedElements); addLegendElement (stSupportedElements); addButtonElement (stSupportedElements); addTableElement (stSupportedElements); HtmlAttributeDesc halignAtt = new HtmlAttributeDesc ("align", new String [] {"left|center|right|justify|char"}, HtmlAttributeDesc.IMPLIED); HtmlAttributeDesc valignAtt = new HtmlAttributeDesc ("valign", new String[] { "top", "middle", "bottom", "baseline" }, HtmlAttributeDesc.IMPLIED); List cellalignAttrs = new ArrayList (4); // combine cellhalign and cellvalign cellalignAttrs.add (new HtmlAttributeDesc ("align", new String[] {"left", "center", "right", "justify", "char" }, HtmlAttributeDesc.IMPLIED)); addSimpleAttribute (cellalignAttrs, "char"); addSimpleAttribute (cellalignAttrs, "charoff"); addTheadElement (stSupportedElements, cellalignAttrs); addTfootElement (stSupportedElements, cellalignAttrs); addTbodyElement (stSupportedElements, cellalignAttrs); addTrElement (stSupportedElements); addThElement (stSupportedElements); addTdElement (stSupportedElements); addCaptionElement (stSupportedElements, inlineContent, valignAtt); addColgroupElement (stSupportedElements, cellalignAttrs); addColElement (stSupportedElements, cellalignAttrs); addHeadElement (stSupportedElements); addTitleElement (stSupportedElements); addBaseElement (stSupportedElements); addMetaElement (stSupportedElements); addScriptElement (stSupportedElements); addNoscriptElement (stSupportedElements); addStyleElement (stSupportedElements); /* The HTML element */ name = "html"; List htmlContent = new ArrayList (2); htmlContent.add ("head"); htmlContent.add ("body"); td = new HtmlTagDesc (name, false, false, htmlContent, i18nAttrs); stSupportedElements.put (name, td); } /** * Constructor. */ public Html4_01StrictDocDesc () { // publish stSupportedElements to superclass supportedElements = stSupportedElements; init (); } private static void addFormElement (Map stSupportedElements) { final String name = "form"; List atts = new ArrayList (bigAttrs.size () + 8); atts.addAll (bigAttrs); addSimpleAttribute (atts, "action"); addSimpleAttribute (atts, "method"); addSimpleAttribute (atts, "enctype"); addSimpleAttribute (atts, "accept"); // 4.01 addSimpleAttribute (atts, "name"); // 4.01 addSimpleAttribute (atts, "onsubmit"); addSimpleAttribute (atts, "onreset"); addSimpleAttribute (atts, "accept-charset"); List formContent = new ArrayList (blockContent.size ()); formContent.addAll (blockContent); formContent.add ("script"); removeStringsFromList (formContent, new String[] { "form" }); HtmlTagDesc td = new HtmlTagDesc (name, true, true, formContent, atts); stSupportedElements.put (name, td); } private static void addHrElement (Map stSupportedElements) { String name = "hr"; HtmlTagDesc td = new HtmlTagDesc (name, true, false, null, bigAttrs); stSupportedElements.put (name, td); } private static void addImgElement (Map stSupportedElements) { String name = "img"; List atts = new ArrayList (bigAttrs.size () + 10); atts.addAll (bigAttrs); addRequiredAttribute (atts, "src"); addRequiredAttribute (atts, "alt"); addSimpleAttribute (atts, "longdesc"); addSimpleAttribute (atts, "name"); // new to 4.01 addSimpleAttribute (atts, "height"); addSimpleAttribute (atts, "width"); addSimpleAttribute (atts, "usemap"); addSelfAttribute (atts, "ismap"); HtmlTagDesc td = new HtmlTagDesc (name, true, false, null, atts); stSupportedElements.put (name, td); } private static void addInputElement (Map stSupportedElements) { final String name = "input"; List atts = new ArrayList (biggerAttrs.size () + 20); atts.addAll (biggerAttrs); atts.add (new HtmlAttributeDesc ("type", new String[] {"text", "password", "checkbox", "radio", "submit", "reset", "file", "hidden", "image", "button"}, HtmlAttributeDesc.OTHER)); addSimpleAttribute (atts, "name"); addSimpleAttribute (atts, "value"); addSelfAttribute (atts, "checked"); addSelfAttribute (atts, "disabled"); addSelfAttribute (atts, "readonly"); addSimpleAttribute (atts, "size"); addSimpleAttribute (atts, "maxlength"); addSimpleAttribute (atts, "src"); addSimpleAttribute (atts, "alt"); addSimpleAttribute (atts, "usemap"); addSelfAttribute (atts, "ismap"); // 4.01 addSimpleAttribute (atts, "tabindex"); addSimpleAttribute (atts, "accesskey"); addSimpleAttribute (atts, "onfocus"); addSimpleAttribute (atts, "onblur"); addSimpleAttribute (atts, "onselect"); addSimpleAttribute (atts, "onchange"); addSimpleAttribute (atts, "accept"); HtmlTagDesc td = new HtmlTagDesc (name, true, true, null, atts); stSupportedElements.put (name, td); } } jhove/classes/edu/harvard/hul/ois/jhove/module/html/Html4_01TFDocDesc.java0000644000707400001440000002063710771562757025511 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College * **********************************************************************/ package edu.harvard.hul.ois.jhove.module.html; import edu.harvard.hul.ois.jhove.module.HtmlModule; import java.util.*; /** * Abstract class for the HTML 4.01 Transitional and Frameset document * types. These are identical except for one element apiece, so nearly * all the code is here or in its superclasses. * * @author Gary McGath * */ public abstract class Html4_01TFDocDesc extends Html4TFDocDesc { /** Initialization code. This is called from the static initializer * of our subclasses. */ protected static void classInit4 (Map stSupportedElements, int version) { Html4TFDocDesc.classInit4(stSupportedElements); int i; String name; HtmlTagDesc td; for (i = 0; i < fontMarkup.length; i++) { name = fontMarkup[i]; td = new HtmlTagDesc (name, true, true, inlineContent, bigAttrs); stSupportedElements.put (name, td); } /* Phrase elements. */ for (i = 0; i < phraseMarkup.length; i++) { name = phraseMarkup[i]; td = new HtmlTagDesc (name, true, true, inlineContent, bigAttrs); stSupportedElements.put (name, td); } addSupElement (stSupportedElements); addSubElement (stSupportedElements); addSpanElement (stSupportedElements); addBdoElement (stSupportedElements); addBasefontElement (stSupportedElements); addFontElement (stSupportedElements); addBrElement (stSupportedElements, coreAttrs); addAddressElement (stSupportedElements); addDivElement (stSupportedElements); addCenterElement (stSupportedElements); addAElement (stSupportedElements); addMapElement (stSupportedElements); HtmlAttributeDesc shapeAtt = new HtmlAttributeDesc ("shape", new String[] {"rect", "circle", "poly", "default" }, HtmlAttributeDesc.REQUIRED); addAreaElement (stSupportedElements, shapeAtt); addLinkElement (stSupportedElements); addImgElement (stSupportedElements); addObjectElement (stSupportedElements); addParamElement (stSupportedElements); HtmlAttributeDesc ialignAtt = new HtmlAttributeDesc ("align", new String[] { "top", "middle", "bottom", "left", "right" }, HtmlAttributeDesc.IMPLIED); addAppletElement (stSupportedElements, ialignAtt); addHrElement (stSupportedElements); addPElement (stSupportedElements); /* The heading (H1-H6) elements */ for (i = 0; i < headings.length; i++) { name = headings[i]; td = new HtmlTagDesc (name, true, true, inlineContent, bigAttrs); stSupportedElements.put (name, td); } addPreElement (stSupportedElements); addQElement (stSupportedElements); addBlockquoteElement (stSupportedElements); addInsElement (stSupportedElements); addDelElement (stSupportedElements); addDlElement (stSupportedElements); addDtElement (stSupportedElements); addDdElement (stSupportedElements); addOlElement (stSupportedElements); addUlElement (stSupportedElements); addDirElement (stSupportedElements); addMenuElement (stSupportedElements); addLiElement (stSupportedElements); addFormElement (stSupportedElements); addLabelElement (stSupportedElements); addInputElement (stSupportedElements); addSelectElement (stSupportedElements); addOptgroupElement (stSupportedElements); addOptionElement (stSupportedElements); addTextareaElement (stSupportedElements); addFieldsetElement (stSupportedElements); addLegendElement (stSupportedElements); addButtonElement (stSupportedElements); addTableElement (stSupportedElements); HtmlAttributeDesc halignAtt = new HtmlAttributeDesc ("align", new String [] {"left", "center", "right", "justify", "char"}, HtmlAttributeDesc.IMPLIED); HtmlAttributeDesc valignAtt = new HtmlAttributeDesc ("valign", new String[] { "top", "middle", "bottom", "baseline" }, HtmlAttributeDesc.IMPLIED); List cellalignAttrs = new ArrayList (4); // combine cellhalign and cellvalign cellalignAttrs.add (new HtmlAttributeDesc ("align", new String[] {"left", "center", "right", "justify", "char" }, HtmlAttributeDesc.IMPLIED)); addSimpleAttribute (cellalignAttrs, "char"); addSimpleAttribute (cellalignAttrs, "charoff"); cellalignAttrs.add (valignAtt); addTheadElement (stSupportedElements, cellalignAttrs); addTfootElement (stSupportedElements, cellalignAttrs); addTbodyElement (stSupportedElements, cellalignAttrs); addTrElement (stSupportedElements); addThElement (stSupportedElements); addTdElement (stSupportedElements); addCaptionElement (stSupportedElements, inlineContent, valignAtt); addColgroupElement (stSupportedElements, cellalignAttrs); addColElement (stSupportedElements, cellalignAttrs); addHeadElement (stSupportedElements); addTitleElement (stSupportedElements); addBaseElement (stSupportedElements); addMetaElement (stSupportedElements); addScriptElement (stSupportedElements); addNoscriptElement (stSupportedElements); addStyleElement (stSupportedElements); /* The HTML element */ name = "html"; List htmlContent = new ArrayList (2); htmlContent.add ("head"); if (version == HtmlModule.HTML_4_01_FRAMESET) { htmlContent.add ("frameset"); } else { htmlContent.add ("body"); } td = new HtmlTagDesc (name, false, false, htmlContent, i18nAttrs); stSupportedElements.put (name, td); addNoframesElement (stSupportedElements, version); if (version == HtmlModule.HTML_4_01_FRAMESET) { addFramesetElement (stSupportedElements); addFrameElement (stSupportedElements); } addBodyElement (stSupportedElements); } private static void addFormElement (Map stSupportedElements) { final String name = "form"; List atts = new ArrayList (bigAttrs.size () + 9); atts.addAll (bigAttrs); addSimpleAttribute (atts, "action"); addSimpleAttribute (atts, "method"); addSimpleAttribute (atts, "enctype"); addSimpleAttribute (atts, "accept"); addSimpleAttribute (atts, "name"); addSimpleAttribute (atts, "onsubmit"); addSimpleAttribute (atts, "onreset"); addSimpleAttribute (atts, "target"); addSimpleAttribute (atts, "accept-charset"); List formContent = new ArrayList (flowContent.size ()); formContent.addAll (flowContent); //formContent.add ("script"); removeStringsFromList (formContent, new String[] { "form" }); HtmlTagDesc td = new HtmlTagDesc (name, true, true, formContent, atts); stSupportedElements.put (name, td); } private static void addImgElement (Map stSupportedElements) { String name = "img"; List atts = new ArrayList (bigAttrs.size () + 10); atts.addAll (bigAttrs); addRequiredAttribute (atts, "src"); addRequiredAttribute (atts, "alt"); addSimpleAttribute (atts, "longdesc"); addSimpleAttribute (atts, "name"); // new to 4.01 addSimpleAttribute (atts, "height"); addSimpleAttribute (atts, "width"); addSimpleAttribute (atts, "usemap"); addSelfAttribute (atts, "ismap"); atts.add (new HtmlAttributeDesc ("align", new String[] { "top", "middle", "bottom", "left", "right" }, HtmlAttributeDesc.IMPLIED)); addSimpleAttribute (atts, "border"); addSimpleAttribute (atts, "hspace"); addSimpleAttribute (atts, "vspace"); HtmlTagDesc td = new HtmlTagDesc (name, true, false, null, atts); stSupportedElements.put (name, td); } } jhove/classes/edu/harvard/hul/ois/jhove/module/html/Html4_01TransDocDesc.java0000644000707400001440000000226310771562757026262 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College * **********************************************************************/ package edu.harvard.hul.ois.jhove.module.html; import edu.harvard.hul.ois.jhove.module.HtmlModule; import java.util.*; /** * This class describes the requirements of an HTML 4.01 Transitional document. * * @author Gary McGath * */ public class Html4_01TransDocDesc extends Html4_01TFDocDesc { /* Static, private map of supported tags. * For efficiency, we create a static Map * of supported tags just once, then assign that to stSupportedElements * in the constructor. */ private static Map stSupportedElements; { stSupportedElements = new HashMap (280); Html4_01TFDocDesc.classInit4 (stSupportedElements, HtmlModule.HTML_4_01_TRANSITIONAL); } /** * Constructor. */ public Html4_01TransDocDesc () { // publish stSupportedElements to superclass supportedElements = stSupportedElements; init (); } } jhove/classes/edu/harvard/hul/ois/jhove/module/html/Html4_0FrameDocDesc.java0000644000707400001440000000224210771562770026134 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.html; import edu.harvard.hul.ois.jhove.module.HtmlModule; import java.util.*; /** * This class describes the requirements of an HTML 4.01 Frameset document. * * @author Gary McGath * */ public class Html4_0FrameDocDesc extends Html4_0TFDocDesc { /* Static, private map of supported tags. * For efficiency, we create a static Map * of supported tags just once, then assign that to stSupportedElements * in the constructor. */ private static Map stSupportedElements; { stSupportedElements = new HashMap (280); Html4_0TFDocDesc.classInit4 (stSupportedElements, HtmlModule.HTML_4_0_FRAMESET); } /** * Constructor. */ public Html4_0FrameDocDesc () { // publish stSupportedElements to superclass supportedElements = stSupportedElements; init (); } } jhove/classes/edu/harvard/hul/ois/jhove/module/html/Html4_0StrictDocDesc.java0000644000707400001440000002203610771562771026356 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.html; //import edu.harvard.hul.ois.jhove.*; import java.util.*; /** * This class describes the requirements of an HTML 4.0 Strict document. * * @author Gary McGath * */ public class Html4_0StrictDocDesc extends Html4StrictDocDesc { /* Static, private map of supported tags. * For efficiency, we create a static Map * of supported tags just once, then assign that to stSupportedElements * in the constructor. */ private static Map stSupportedElements; /* Static initializer. A superclass is initialized before its * subclass, so we can count on the static initializer of HtmlDocDesc * to have run already. * * It's time to start thinking about how to factor this code. * Each element can be created separately, with the necessary * arguments passed for each one. It would be a nice pattern if * all elements had the same calling sequence, but realistically * some are going to need extras such as special lists of names. * The element functions (which will all be static) should be here * if unique, or in the parent class if they can be used for more * than one version of HTML. There should be a naming convention * for the functions in the parent class indicating which names * they can be used with. */ static { stSupportedElements = new HashMap (280); classInit4 (stSupportedElements); int i; String name; HtmlTagDesc td; addSupElement (stSupportedElements); addSubElement (stSupportedElements); addSpanElement (stSupportedElements); addBdoElement (stSupportedElements); addBrElement (stSupportedElements, coreAttrs); addBodyElement (stSupportedElements); addAddressElement (stSupportedElements); addDivElement (stSupportedElements); addAElement (stSupportedElements); addMapElement (stSupportedElements); HtmlAttributeDesc shapeAtt = new HtmlAttributeDesc ("shape", new String[] {"rect", "circle", "poly", "default" }, HtmlAttributeDesc.REQUIRED); addAreaElement (stSupportedElements, shapeAtt); addLinkElement (stSupportedElements); addImgElement (stSupportedElements); addObjectElement (stSupportedElements); addParamElement (stSupportedElements); addHrElement (stSupportedElements); addPElement (stSupportedElements); /* The heading (H1-H6) elements */ for (i = 0; i < headings.length; i++) { name = headings[i]; td = new HtmlTagDesc (name, true, true, inlineContent, bigAttrs); stSupportedElements.put (name, td); } addPreElement (stSupportedElements); addQElement (stSupportedElements); addBlockquoteElement (stSupportedElements); addInsElement (stSupportedElements); addDelElement (stSupportedElements); addDlElement (stSupportedElements); addDtElement (stSupportedElements); addDdElement (stSupportedElements); addOlElement (stSupportedElements); addUlElement (stSupportedElements); addLiElement (stSupportedElements); addFormElement (stSupportedElements); addLabelElement (stSupportedElements); addInputElement (stSupportedElements); addSelectElement (stSupportedElements); addOptgroupElement (stSupportedElements); addOptionElement (stSupportedElements); addTextareaElement (stSupportedElements); addFieldsetElement (stSupportedElements); addLegendElement (stSupportedElements); addButtonElement (stSupportedElements); addTableElement (stSupportedElements); List cellalignAttrs = new ArrayList (4); // combine cellhalign and cellvalign cellalignAttrs.add (new HtmlAttributeDesc ("align", new String[] {"left", "center", "right", "justify", "char" }, HtmlAttributeDesc.IMPLIED)); addSimpleAttribute (cellalignAttrs, "char"); addSimpleAttribute (cellalignAttrs, "charoff"); addTheadElement (stSupportedElements, cellalignAttrs); addTfootElement (stSupportedElements, cellalignAttrs); addTbodyElement (stSupportedElements, cellalignAttrs); addTrElement (stSupportedElements); addThElement (stSupportedElements); addTdElement (stSupportedElements); addCaptionElement (stSupportedElements, inlineContent, valignAtt); addColgroupElement (stSupportedElements, cellalignAttrs); addColElement (stSupportedElements, cellalignAttrs); addHeadElement (stSupportedElements); addTitleElement (stSupportedElements); addBaseElement (stSupportedElements); addMetaElement (stSupportedElements); addScriptElement (stSupportedElements); addNoscriptElement (stSupportedElements); addStyleElement (stSupportedElements); /* The HTML element */ name = "html"; List htmlContent = new ArrayList (2); htmlContent.add ("head"); htmlContent.add ("body"); td = new HtmlTagDesc (name, false, false, htmlContent, i18nAttrs); stSupportedElements.put (name, td); } /** * Constructor. * Most of the initialization work is done in a static code * block rather than in the constructor, so as to minimize * overhead on multiple invocations. */ public Html4_0StrictDocDesc () { // publish stSupportedElements to superclass supportedElements = stSupportedElements; init (); } private static void addFormElement (Map stSupportedElements) { final String name = "form"; List atts = new ArrayList (bigAttrs.size () + 8); atts.addAll (bigAttrs); addSimpleAttribute (atts, "action"); addSimpleAttribute (atts, "method"); addSimpleAttribute (atts, "enctype"); addSimpleAttribute (atts, "onsubmit"); addSimpleAttribute (atts, "onreset"); addSimpleAttribute (atts, "accept-charset"); List formContent = new ArrayList (blockContent.size ()); formContent.addAll (blockContent); formContent.add ("script"); removeStringsFromList (formContent, new String[] { "form" }); HtmlTagDesc td = new HtmlTagDesc (name, true, true, formContent, atts); stSupportedElements.put (name, td); } private static void addHrElement (Map stSupportedElements) { String name = "hr"; List atts = new ArrayList (coreAttrs.size () + eventAttrs.size ()); atts.addAll (coreAttrs); atts.addAll (eventAttrs); HtmlTagDesc td = new HtmlTagDesc (name, true, false, null, atts); stSupportedElements.put (name, td); } private static void addImgElement (Map stSupportedElements) { String name = "img"; List atts = new ArrayList (bigAttrs.size () + 10); atts.addAll (bigAttrs); addRequiredAttribute (atts, "src"); addRequiredAttribute (atts, "alt"); addSimpleAttribute (atts, "longdesc"); addSimpleAttribute (atts, "height"); addSimpleAttribute (atts, "width"); addSimpleAttribute (atts, "usemap"); addSelfAttribute (atts, "ismap"); HtmlTagDesc td = new HtmlTagDesc (name, true, false, null, atts); stSupportedElements.put (name, td); } private static void addInputElement (Map stSupportedElements) { final String name = "input"; List atts = new ArrayList (biggerAttrs.size () + 20); atts.addAll (biggerAttrs); atts.add (new HtmlAttributeDesc ("type", new String[] {"text", "password", "checkbox", "radio", "submit", "reset", "file", "hidden", "image", "button"}, HtmlAttributeDesc.OTHER)); addSimpleAttribute (atts, "name"); addSimpleAttribute (atts, "value"); addSelfAttribute (atts, "checked"); addSelfAttribute (atts, "disabled"); addSelfAttribute (atts, "readonly"); addSimpleAttribute (atts, "size"); addSimpleAttribute (atts, "maxlength"); addSimpleAttribute (atts, "src"); addSimpleAttribute (atts, "alt"); addSimpleAttribute (atts, "usemap"); addSimpleAttribute (atts, "tabindex"); addSimpleAttribute (atts, "accesskey"); addSimpleAttribute (atts, "onfocus"); addSimpleAttribute (atts, "onblur"); addSimpleAttribute (atts, "onselect"); addSimpleAttribute (atts, "onchange"); addSimpleAttribute (atts, "accept"); HtmlTagDesc td = new HtmlTagDesc (name, true, true, null, atts); stSupportedElements.put (name, td); } } jhove/classes/edu/harvard/hul/ois/jhove/module/html/Html4_0TFDocDesc.java0000644000707400001440000002016710771562771025422 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.html; import edu.harvard.hul.ois.jhove.module.HtmlModule; import java.util.*; /** * Abstract class for the HTML 4.0 Transitional and Frameset document * types. These are identical except for one element apiece, so nearly * all the code is here or in its superclasses. * * @author Gary McGath * */ public abstract class Html4_0TFDocDesc extends Html4TFDocDesc { protected static void classInit4 (Map stSupportedElements, int version) { Html4TFDocDesc.classInit4(stSupportedElements); int i; String name; HtmlTagDesc td; for (i = 0; i < fontMarkup.length; i++) { name = fontMarkup[i]; td = new HtmlTagDesc (name, true, true, inlineContent, bigAttrs); stSupportedElements.put (name, td); } /* Phrase elements. */ for (i = 0; i < phraseMarkup.length; i++) { name = phraseMarkup[i]; td = new HtmlTagDesc (name, true, true, inlineContent, bigAttrs); stSupportedElements.put (name, td); } addSupElement (stSupportedElements); addSubElement (stSupportedElements); addSpanElement (stSupportedElements); addBdoElement (stSupportedElements); addBasefontElement (stSupportedElements); addFontElement (stSupportedElements); addBrElement (stSupportedElements, coreAttrs); addAddressElement (stSupportedElements); addDivElement (stSupportedElements); addCenterElement (stSupportedElements); addAElement (stSupportedElements); addMapElement (stSupportedElements); HtmlAttributeDesc shapeAtt = new HtmlAttributeDesc ("shape", new String[] {"rect", "circle", "poly", "default" }, HtmlAttributeDesc.REQUIRED); addAreaElement (stSupportedElements, shapeAtt); addLinkElement (stSupportedElements); addImgElement (stSupportedElements); addObjectElement (stSupportedElements); addParamElement (stSupportedElements); HtmlAttributeDesc ialignAtt = new HtmlAttributeDesc ("align", new String[] { "top", "middle", "bottom", "left", "right" }, HtmlAttributeDesc.IMPLIED); addAppletElement (stSupportedElements, ialignAtt); addHrElement (stSupportedElements); addPElement (stSupportedElements); /* The heading (H1-H6) elements */ for (i = 0; i < headings.length; i++) { name = headings[i]; td = new HtmlTagDesc (name, true, true, inlineContent, bigAttrs); stSupportedElements.put (name, td); } addPreElement (stSupportedElements); addQElement (stSupportedElements); addBlockquoteElement (stSupportedElements); addInsElement (stSupportedElements); addDelElement (stSupportedElements); addDlElement (stSupportedElements); addDtElement (stSupportedElements); addDdElement (stSupportedElements); addOlElement (stSupportedElements); addUlElement (stSupportedElements); addDirElement (stSupportedElements); addLiElement (stSupportedElements); addFormElement (stSupportedElements); addLabelElement (stSupportedElements); addInputElement (stSupportedElements); addSelectElement (stSupportedElements); addOptgroupElement (stSupportedElements); addOptionElement (stSupportedElements); addTextareaElement (stSupportedElements); addFieldsetElement (stSupportedElements); addLegendElement (stSupportedElements); addButtonElement (stSupportedElements); addTableElement (stSupportedElements); HtmlAttributeDesc halignAtt = new HtmlAttributeDesc ("align", new String [] {"left", "center", "right", "justify", "char"}, HtmlAttributeDesc.IMPLIED); HtmlAttributeDesc valignAtt = new HtmlAttributeDesc ("valign", new String[] { "top", "middle", "bottom", "baseline" }, HtmlAttributeDesc.IMPLIED); List cellalignAttrs = new ArrayList (4); // combine cellhalign and cellvalign cellalignAttrs.add (new HtmlAttributeDesc ("align", new String[] {"left", "center", "right", "justify", "char" }, HtmlAttributeDesc.IMPLIED)); addSimpleAttribute (cellalignAttrs, "char"); addSimpleAttribute (cellalignAttrs, "charoff"); cellalignAttrs.add (valignAtt); addTheadElement (stSupportedElements, cellalignAttrs); addTfootElement (stSupportedElements, cellalignAttrs); addTbodyElement (stSupportedElements, cellalignAttrs); addTrElement (stSupportedElements); addThElement (stSupportedElements); addTdElement (stSupportedElements); addCaptionElement (stSupportedElements, inlineContent, valignAtt); addColgroupElement (stSupportedElements, cellalignAttrs); addColElement (stSupportedElements, cellalignAttrs); addHeadElement (stSupportedElements); addTitleElement (stSupportedElements); addBaseElement (stSupportedElements); addMetaElement (stSupportedElements); addScriptElement (stSupportedElements); addNoscriptElement (stSupportedElements); addStyleElement (stSupportedElements); /* The HTML element */ name = "html"; List htmlContent = new ArrayList (2); htmlContent.add ("head"); if (version == HtmlModule.HTML_4_0_FRAMESET) { htmlContent.add ("frameset"); } else { htmlContent.add ("body"); } td = new HtmlTagDesc (name, false, false, htmlContent, i18nAttrs); stSupportedElements.put (name, td); addNoframesElement (stSupportedElements, version); if (version == HtmlModule.HTML_4_0_FRAMESET) { addFramesetElement (stSupportedElements); addFrameElement (stSupportedElements); } addBodyElement (stSupportedElements); } private static void addFormElement (Map stSupportedElements) { final String name = "form"; List atts = new ArrayList (bigAttrs.size () + 9); atts.addAll (bigAttrs); addSimpleAttribute (atts, "action"); addSimpleAttribute (atts, "method"); addSimpleAttribute (atts, "enctype"); addSimpleAttribute (atts, "onsubmit"); addSimpleAttribute (atts, "onreset"); addSimpleAttribute (atts, "target"); addSimpleAttribute (atts, "accept-charset"); List formContent = new ArrayList (blockContent.size ()); formContent.addAll (blockContent); formContent.add ("script"); removeStringsFromList (formContent, new String[] { "form" }); HtmlTagDesc td = new HtmlTagDesc (name, true, true, formContent, atts); stSupportedElements.put (name, td); } private static void addImgElement (Map stSupportedElements) { String name = "img"; List atts = new ArrayList (bigAttrs.size () + 10); atts.addAll (bigAttrs); addRequiredAttribute (atts, "src"); addRequiredAttribute (atts, "alt"); addSimpleAttribute (atts, "longdesc"); addSimpleAttribute (atts, "height"); addSimpleAttribute (atts, "width"); addSimpleAttribute (atts, "usemap"); addSelfAttribute (atts, "ismap"); atts.add (new HtmlAttributeDesc ("align", new String[] { "top", "middle", "bottom", "left", "right" }, HtmlAttributeDesc.IMPLIED)); addSimpleAttribute (atts, "border"); addSimpleAttribute (atts, "hspace"); addSimpleAttribute (atts, "vspace"); HtmlTagDesc td = new HtmlTagDesc (name, true, false, null, atts); stSupportedElements.put (name, td); } } jhove/classes/edu/harvard/hul/ois/jhove/module/html/HtmlStack.java0000644000707400001440000000752411102124225024401 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.html; import java.util.*; /** * A LinkedList dressed up as a stack for processing HTML objects. * It knows about certain elements and their history on the stack. * * @author Gary McGath * */ public class HtmlStack extends LinkedList { /** Elements which get special treatment. */ private HtmlTagDesc headElement; private HtmlTagDesc bodyElement; private HtmlTagDesc framesetElement; private boolean headSeen; private boolean bodySeen; /** Sets the value of the HEAD element for easy comparison */ protected void setHeadElement (HtmlTagDesc elem) { headElement = elem; } /** Sets the value of the HEAD element for easy comparison */ protected void setBodyElement (HtmlTagDesc elem) { bodyElement = elem; } /** Sets the value of the HEAD element for easy comparison */ protected void setFramesetElement (HtmlTagDesc elem) { bodyElement = elem; } /** Pops top element from element stack. If we ever decide * to go to a different stack implementation, it's necessary * only to change these methods. Also, they add some * type checking. * * Name changed from "pop" to "popp" to avoid a conflict in Java 1.6 * with the List class. * */ protected void popp () { removeLast (); } /** Pushes an element onto the stack. This should have * its element field set to function properly. */ protected void push (JHOpenTag tag) { add (tag); HtmlTagDesc element = tag.getElement (); if (element == headElement) { headSeen = true; } else if (element == bodyElement) { bodySeen = true; } } /** Gets the top of the element stack without popping it. */ protected JHOpenTag top () { return (JHOpenTag) getLast(); } /** Searches backwards through the element stack for a * match to a given tag. Return -1 if no match. */ protected int search (String tag) { /* Supposedly this ListIterator setup works * for walking backwards. */ ListIterator liter = listIterator (size()); int idx = size () - 1; while (liter.hasPrevious ()) { JHOpenTag stackTag = (JHOpenTag) liter.previous(); HtmlTagDesc elem = stackTag.getElement (); if (elem.matches (tag)) { return idx; } idx--; } /* No match, return -1 */ return -1; } /** Pops elements from the stack up to and including the * one indexed by idx */ protected void popTo (int idx) { int npop = size () - idx; for (int i = 0; i < npop; i++) { removeLast(); } } /** Returns true if a HEAD element has been * pushed on the stack. */ protected boolean isHeadSeen () { return headSeen; } /** Returns true if a BODY element has been * pushed on the stack. */ protected boolean isBodySeen () { return bodySeen; } /** Returns true if any element on the stack * prohibits the specified tag. */ protected boolean excludesTag (String tag) { Iterator iter = iterator (); while (iter.hasNext ()) { JHOpenTag stackTag = (JHOpenTag) iter.next (); if (stackTag.getElement ().excludesTag (tag)) { return true; } } return false; } } jhove/classes/edu/harvard/hul/ois/jhove/module/html/Html4_0TransDocDesc.java0000644000707400001440000000252610771562760026175 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.html; import edu.harvard.hul.ois.jhove.module.HtmlModule; import java.util.*; /** * This class describes the requirements of an HTML 4.0 Transitional document. * * @author Gary McGath * */ public class Html4_0TransDocDesc extends Html4_0TFDocDesc { /* Static, private map of supported tags. * For efficiency, we create a static Map * of supported tags just once, then assign that to stSupportedElements * in the constructor. */ private static Map stSupportedElements; { stSupportedElements = new HashMap (280); Html4_0TFDocDesc.classInit4 (stSupportedElements, HtmlModule.HTML_4_0_TRANSITIONAL); } /** * Constructor. * Most of the initialization work is done in a static code * block rather than in the constructor, so as to minimize * overhead on multiple invocations. */ public Html4_0TransDocDesc () { // publish stSupportedElements to superclass supportedElements = stSupportedElements; init (); } } jhove/classes/edu/harvard/hul/ois/jhove/module/html/HtmlAttributeDesc.java0000644000707400001440000000614510771562761026122 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.html; //import java.util.*; /** * Class representing an abstract attribute of an HTML element. * * @author Gary McGath * */ public class HtmlAttributeDesc { /** Permitted values for _kind */ public final static int REQUIRED = 1, // #REQUIRED CURRENT = 2, // #CURRENT CONREF = 3, // #CONREF IMPLIED = 4, // #IMPLIED OTHER = 5; // Explicit default private String _name; private int _kind; private String[] _permittedValues; /** * Constructor. * * @param name The name of the attribute. Must be lower case. * @param permittedValues Specific values allowed for the parameter. If * null, then any CDATA value is allowed. * @param kind The kind of parameter. Must be REQUIRED, CURRENT, * CONREF, or IMPLIED. */ public HtmlAttributeDesc (String name, String[] permittedValues, int kind) { _name = name; _permittedValues = permittedValues; _kind = kind; } /** * Constructor for an attribute that can take any value, with * kind defaulting to IMPLIED. */ public HtmlAttributeDesc (String name) { _name = name; _permittedValues = null; _kind = IMPLIED; } /** * Returns the attribute's name. */ public String getName () { return _name; } /** Returns true if this tag's name * matches the parameter. */ public boolean nameMatches(String name) { return _name.equals (name); } /** Returns true if the parameter is a permissible * value for the attribute. */ public boolean valueOK (String name, String value) { if (_permittedValues == null) { return true; } else if (value == null) { // An attribute without a value is permitted only when // there is only one legal value, and that equals the // attribute's name. if (_permittedValues.length == 1 && _permittedValues[0].equals (name)) { return true; } else { return false; } } else { value = value.toLowerCase (); for (int i = 0; i < _permittedValues.length; i++) { if (_permittedValues[i].equals (value)) { return true; } } return false; // No match } } /** Return true if the attribute is required. */ public boolean isRequired () { return _kind == REQUIRED; } } jhove/classes/edu/harvard/hul/ois/jhove/module/html/HtmlCharStream.java0000644000707400001440000002707511266077145025413 0ustar garyusers/* This is a very slightly changed version of HtmlCharStream.java Version 3.0, * which is produced by JavaCC. The change is to allow a character * set other than Unicode to be specified, and to make the default * ISO 8859-1. One of the main reasons for this is that some ISO 8859 * characters look like illegal characters in Unicode, making PCDATA * appear invalid just because it has funny characters. */ /* 24-Oct-04 GDM: Modified readChar to circumvent a bug which causes * infinite loops when reading binary files (which are never HTML) */ package edu.harvard.hul.ois.jhove.module.html; import java.io.UnsupportedEncodingException; /** * An implementation of interface CharStream, where the stream is assumed to * contain only ASCII characters (without unicode processing). */ public class HtmlCharStream implements CharStream { public static final boolean staticFlag = false; int bufsize; int available; int tokenBegin; public int bufpos = -1; protected int bufline[]; protected int bufcolumn[]; protected int column = 0; protected int line = 1; protected boolean prevCharIsCR = false; protected boolean prevCharIsLF = false; // Detection of end of line protected boolean _lineEndCR; protected boolean _lineEndLF; protected boolean _lineEndCRLF; protected java.io.Reader inputStream; protected char[] buffer; protected int maxNextCharInd = 0; protected int inBuf = 0; protected void ExpandBuff(boolean wrapAround) { char[] newbuffer = new char[bufsize + 2048]; int newbufline[] = new int[bufsize + 2048]; int newbufcolumn[] = new int[bufsize + 2048]; try { if (wrapAround) { System.arraycopy(buffer, tokenBegin, newbuffer, 0, bufsize - tokenBegin); System.arraycopy(buffer, 0, newbuffer, bufsize - tokenBegin, bufpos); buffer = newbuffer; System.arraycopy(bufline, tokenBegin, newbufline, 0, bufsize - tokenBegin); System.arraycopy(bufline, 0, newbufline, bufsize - tokenBegin, bufpos); bufline = newbufline; System.arraycopy(bufcolumn, tokenBegin, newbufcolumn, 0, bufsize - tokenBegin); System.arraycopy(bufcolumn, 0, newbufcolumn, bufsize - tokenBegin, bufpos); bufcolumn = newbufcolumn; maxNextCharInd = (bufpos += (bufsize - tokenBegin)); } else { System.arraycopy(buffer, tokenBegin, newbuffer, 0, bufsize - tokenBegin); buffer = newbuffer; System.arraycopy(bufline, tokenBegin, newbufline, 0, bufsize - tokenBegin); bufline = newbufline; System.arraycopy(bufcolumn, tokenBegin, newbufcolumn, 0, bufsize - tokenBegin); bufcolumn = newbufcolumn; maxNextCharInd = (bufpos -= tokenBegin); } } catch (Throwable t) { throw new Error(t.getMessage()); } bufsize += 2048; available = bufsize; tokenBegin = 0; } protected void FillBuff() throws java.io.IOException { if (maxNextCharInd == available) { if (available == bufsize) { if (tokenBegin > 2048) { bufpos = maxNextCharInd = 0; available = tokenBegin; } else if (tokenBegin < 0) bufpos = maxNextCharInd = 0; else ExpandBuff(false); } else if (available > tokenBegin) available = bufsize; else if ((tokenBegin - available) < 2048) ExpandBuff(true); else available = tokenBegin; } int i; try { if ((i = inputStream.read(buffer, maxNextCharInd, available - maxNextCharInd)) == -1) { inputStream.close(); throw new java.io.IOException(); } else maxNextCharInd += i; return; } catch(java.io.IOException e) { --bufpos; backup(0); if (tokenBegin == -1) tokenBegin = bufpos; throw e; } } public char BeginToken() throws java.io.IOException { tokenBegin = -1; char c = readChar(); tokenBegin = bufpos; return c; } protected void UpdateLineColumn(char c) { column++; if (prevCharIsLF) { _lineEndLF = true; prevCharIsLF = false; line += (column = 1); } else if (prevCharIsCR) { if ( c == '\n') { _lineEndCRLF = true; } else { _lineEndCR = true; } prevCharIsCR = false; if (c == '\n') { prevCharIsLF = true; } else line += (column = 1); } switch (c) { case '\r' : prevCharIsCR = true; break; case '\n' : prevCharIsLF = true; break; // GDM 29-Oct-04: It makes more sense to me to consider a tab // as just one character; we have no way to know what // the tab spacing in somebody's editor is. // case '\t' : // column--; // column += (8 - (column & 07)); // break; default : break; } bufline[bufpos] = line; bufcolumn[bufpos] = column; } public char readChar() throws java.io.IOException { if (inBuf > 0) { --inBuf; if (++bufpos == bufsize) bufpos = 0; return buffer[bufpos]; } if (++bufpos >= maxNextCharInd) FillBuff(); char c = buffer[bufpos]; /** GDM: Check against binary characters which may * otherwise throw this thing into a loop. */ if (c >= '\000' && c <= '\010') { throw new java.io.IOException ("Illegal character read"); } UpdateLineColumn(c); return (c); } /** * @deprecated * @see #getEndColumn */ public int getColumn() { return bufcolumn[bufpos]; } /** * @deprecated * @see #getEndLine */ public int getLine() { return bufline[bufpos]; } public int getEndColumn() { return bufcolumn[bufpos]; } public int getEndLine() { return bufline[bufpos]; } public int getBeginColumn() { /* GDM 24-Oct-04: Catch exceptions which may be thrown * when parsing binary files */ try { return bufcolumn[tokenBegin]; } catch (ArrayIndexOutOfBoundsException e) { return -1; } } public int getBeginLine() { /* GDM 24-Oct-04: Catch exceptions which may be thrown * when parsing binary files */ try { return bufline[tokenBegin]; } catch (ArrayIndexOutOfBoundsException e) { return -1; } } public void backup(int amount) { inBuf += amount; if ((bufpos -= amount) < 0) bufpos += bufsize; } public HtmlCharStream(java.io.Reader dstream, int startline, int startcolumn, int buffersize) { inputStream = dstream; line = startline; column = startcolumn - 1; available = bufsize = buffersize; buffer = new char[buffersize]; bufline = new int[buffersize]; bufcolumn = new int[buffersize]; } public HtmlCharStream(java.io.Reader dstream, int startline, int startcolumn) { this(dstream, startline, startcolumn, 4096); } public HtmlCharStream(java.io.Reader dstream) { this(dstream, 1, 1, 4096); } public void ReInit(java.io.Reader dstream, int startline, int startcolumn, int buffersize) { inputStream = dstream; line = startline; column = startcolumn - 1; if (buffer == null || buffersize != buffer.length) { available = bufsize = buffersize; buffer = new char[buffersize]; bufline = new int[buffersize]; bufcolumn = new int[buffersize]; } prevCharIsLF = prevCharIsCR = false; tokenBegin = inBuf = maxNextCharInd = 0; bufpos = -1; } public void ReInit(java.io.Reader dstream, int startline, int startcolumn) { ReInit(dstream, startline, startcolumn, 4096); } public void ReInit(java.io.Reader dstream) { ReInit(dstream, 1, 1, 4096); } public HtmlCharStream(java.io.InputStream dstream, int startline, int startcolumn, int buffersize, String charset) throws UnsupportedEncodingException { this(new java.io.InputStreamReader(dstream, charset), startline, startcolumn, 4096); } public HtmlCharStream(java.io.InputStream dstream, int startline, int startcolumn, String charset) throws UnsupportedEncodingException { this(dstream, startline, startcolumn, 4096, charset); } public HtmlCharStream(java.io.InputStream dstream, String charset) throws UnsupportedEncodingException { this(dstream, 1, 1, 4096, charset); } public void ReInit(java.io.InputStream dstream, int startline, int startcolumn, int buffersize) { ReInit(new java.io.InputStreamReader(dstream), startline, startcolumn, 4096); } public void ReInit(java.io.InputStream dstream) { ReInit(dstream, 1, 1, 4096); } public void ReInit(java.io.InputStream dstream, int startline, int startcolumn) { ReInit(dstream, startline, startcolumn, 4096); } public String GetImage() { if (bufpos >= tokenBegin) return new String(buffer, tokenBegin, bufpos - tokenBegin + 1); else return new String(buffer, tokenBegin, bufsize - tokenBegin) + new String(buffer, 0, bufpos + 1); } public char[] GetSuffix(int len) { char[] ret = new char[len]; if ((bufpos + 1) >= len) System.arraycopy(buffer, bufpos - len + 1, ret, 0, len); else { System.arraycopy(buffer, bufsize - (len - bufpos - 1), ret, 0, len - bufpos - 1); System.arraycopy(buffer, 0, ret, len - bufpos - 1, bufpos + 1); } return ret; } public void Done() { buffer = null; bufline = null; bufcolumn = null; } /** * Method to adjust line and column numbers for the start of a token. */ public void adjustBeginLineColumn(int newLine, int newCol) { int start = tokenBegin; int len; if (bufpos >= tokenBegin) { len = bufpos - tokenBegin + inBuf + 1; } else { len = bufsize - tokenBegin + bufpos + 1 + inBuf; } int i = 0, j = 0, k = 0; int nextColDiff = 0, columnDiff = 0; while (i < len && bufline[j = start % bufsize] == bufline[k = ++start % bufsize]) { bufline[j] = newLine; nextColDiff = columnDiff + bufcolumn[k] - bufcolumn[j]; bufcolumn[j] = newCol + columnDiff; columnDiff = nextColDiff; i++; } if (i < len) { bufline[j] = newLine++; bufcolumn[j] = newCol + columnDiff; while (i++ < len) { if (bufline[j = start % bufsize] != bufline[++start % bufsize]) bufline[j] = newLine++; else bufline[j] = newLine; } } line = bufline[j]; column = bufcolumn[j]; } /** * Retrieve the kind of end of line. * @return */ public String getKindOfLineEnd() { if (_lineEndCR || _lineEndLF || _lineEndCRLF) { if (_lineEndCRLF) { return "CRLF"; } if (_lineEndCR) { return "CR"; } if (_lineEndLF) { return "LF"; } } return null; } } jhove/classes/edu/harvard/hul/ois/jhove/module/html/HtmlDocDesc.java0000644000707400001440000004745411102124225024646 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.html; import edu.harvard.hul.ois.jhove.*; import java.util.*; //import java.io.*; /** * This is an abstract class for processing an HTML document that has * been parsed into a List of HtmlElements. It defines common behavior * for all supported versions of HTML except XHTML. Subclasses * modify this base as needed. * * @author Gary McGath * */ public abstract class HtmlDocDesc { /** Metadata for this document. */ private HtmlMetadata metadata; /** Generic list of supported tags. For efficiency, this is * generated only once. Subclasses will need to get a copy * of this list and make additions or deletions as necessary. * They must not modify any of the existing * members of the list. */ protected static HashMap commonTags; /** List of supported tags for this version of HTML. The subclass * is responsible for generating this, typically using commonTags * as a starting point. */ protected Map supportedElements; /** A representation of the HTML element. */ protected HtmlTagDesc htmlElement; /** A representation of the HEAD element. */ protected HtmlTagDesc headElement; /** A representation of the BODY element. */ protected HtmlTagDesc bodyElement; /** A representation of the FRAMESET element. */ protected HtmlTagDesc framesetElement; private HtmlStack elementStack; /** Header tags, which are invariant for all HTML versions. */ protected static String[] headings = { "h1", "h2", "h3", "h4", "h5", "h6" }; /** Consructor. */ public HtmlDocDesc () { } /** Validates the document and puts interesting properties into the * RepInfo. * * @param elements The element list constructed by the parser * @param info The RepInfo object which will be populated * with properties */ public boolean validate (List elements, RepInfo info) { // As we get to each open tag, we // check it against the corresponding HtmlTagDesc. If there isn't one, we // mark the document as invalid but continue anyway; we create a temporary // HtmlTagDesc object for the tag that we find, with the closing tag indicated // as optional. // For each open tag, we push the HtmlTagDesc object onto the stack. We check // if it's in the allowed content of the enclosing element. If not, we report it // as an error but continue with it anyway. // // We special-case HTML, HEAD and BODY, which can be implied. // If a tag is found which requires the content model for one of // these, and it isn't on the stack, we just push it. metadata = new HtmlMetadata (); elementStack = new HtmlStack (); elementStack.setHeadElement (headElement); elementStack.setBodyElement (bodyElement); elementStack.setFramesetElement (framesetElement); Iterator iter = elements.iterator(); while (iter.hasNext ()) { JHElement elem = (JHElement) iter.next (); if (elem instanceof JHDoctype) { // Doctype requires no further processing; grammar // will have already caught it if it's not at the top continue; } else if (elem instanceof JHOpenTag) { doOpenTag ((JHOpenTag) elem, info); } else if (elem instanceof JHCloseTag) { doCloseTag ((JHCloseTag) elem, info); } else if (elem instanceof JHErrorElement) { doErrorElement ((JHErrorElement) elem, info); } else if (elem instanceof JHPCData) { doPCData ((JHPCData) elem, info, metadata); } } // It's a requirement that there be at least a TITLE, // and thus an implicit or explicit HEAD element. if (!elementStack.isHeadSeen ()) { info.setMessage(new ErrorMessage ("Document must have implicit or explicit HEAD element")); info.setValid (false); } return true; } /** Returns the metadata for this document. */ public HtmlMetadata getMetadata () { return metadata; } /** Initialization called by subclass constructors after supportedElements * has been assigned. */ protected void init () { htmlElement = (HtmlTagDesc) supportedElements.get ("html"); headElement = (HtmlTagDesc) supportedElements.get ("head"); bodyElement = (HtmlTagDesc) supportedElements.get ("body"); } /* Break out open tag code */ private void doOpenTag (JHOpenTag tag, RepInfo info) { String name = tag.getName ().toLowerCase (); boolean unknownTag = false; String msg = tag.getErrorMessage (); if (msg != null) { info.setMessage (new ErrorMessage (msg, "Name = " + name + ", Line = " + tag.getLine () + ", Column = " + tag.getColumn () )); info.setWellFormed (false); // But keep going anyway! } /* If it's anything but an HTML tag, and the stack is empty, * push an "HTML" element. */ if (elementStack.isEmpty ()) { if (!"html".equals (name)) { JHOpenTag fakeTag = new JHOpenTag ("html"); fakeTag.setElement (htmlElement); elementStack.push (fakeTag); } } HtmlTagDesc tagDesc = (HtmlTagDesc) supportedElements.get (name); if (tagDesc == null) { unknownTag = true; } // Check the context only if it's a known tag; // otherwise we'll issue a redundant error message. if (!unknownTag && !checkElementContext (tag, info)) { String toptag = null; if (!elementStack.isEmpty ()) { JHOpenTag top = (JHOpenTag) elementStack.top(); toptag = top.getName(); } info.setMessage (new ErrorMessage ("Tag illegal in context", "Name = " + name + ", " + (toptag != null ? "Container = " + toptag + ", " : "") + "Line = " + tag.getLine () + ", Column = " + tag.getColumn () )); info.setValid (false); } if (unknownTag) { info.setMessage (new ErrorMessage ("Unknown tag", "Name = " + name + ", Line = " + tag.getLine () + ", Column = " + tag.getColumn ())); info.setValid (false); // Make a temporary tag descriptor tagDesc = new HtmlTempTagDesc (name); } if (!unknownTag && info.getWellFormed() == RepInfo.TRUE) { /* Check if the attributes are valid */ List atts = tag.getAttributes (); Iterator iter = atts.iterator (); // Create a list to accumulate all attribute names. List attNames = new ArrayList (atts.size ()); while (iter.hasNext ()) { JHAttribute att = (JHAttribute) iter.next (); String attName = att.getName(); attNames.add (attName); String attVal = att.getValue(); HtmlAttributeDesc attDesc = tagDesc.namedAttDesc (attName); if (attDesc == null) { info.setMessage ( new ErrorMessage ("Undefined attribute for element", "Name = " + name + ", Attribute = " + attName + ", Line = " + att.getLine () + ", Column = " + att.getColumn ())); info.setValid (false); } else { /* Check if value is legit */ if (!attDesc.valueOK (attName, attVal)) { info.setMessage (new ErrorMessage ("Improper value for attribute", "Element = " + name + ", Attribute = " + attName + ", Value = " + attVal + ", Line = " + att.getLine () + ", Column = " + att.getColumn ())); info.setValid (false); } } // Extract entities from attribute value if (attVal != null) { Iterator entIter = tag.getEntities (attVal).iterator (); Utf8BlockMarker utf8BM = metadata.getUtf8BlockMarker (); while (entIter.hasNext ()) { String ent = (String) entIter.next (); metadata.addEntity (ent); // If it's a numerical entity, note which UTF8 block it's in try { if (ent.charAt (1) == '#') { int entval = Integer.parseInt (ent.substring (2, ent.length() - 1)); utf8BM.markBlock(entval); } } catch (Exception e) { // Any exception means it's the wrong kind of entity } } } } // Check if all required attributes were found. List missingAtts = tagDesc.missingRequiredAttributes(attNames); if (!missingAtts.isEmpty ()) { info.setValid (false); Iterator miter = missingAtts.iterator (); while (miter.hasNext ()) { String matt = (String) miter.next (); info.setMessage (new ErrorMessage ("Missing required attribute", "Tag = " + name + ", Attribute = " + matt + ", Line = " + tag.getLine () + ", Column = " + tag.getColumn ())); } } } tag.processElement (metadata); // If the content is empty, then a closing tag isn't permitted // (SGML handbook 7.3), so we don't push the open tag. // But if it's a temporary tag descriptor, we don't know // anything about it, so all guesses are wild. Push it anyway. if (tagDesc.isTemp () || !tagDesc.isContentEmpty()) { tag.setElement (tagDesc); elementStack.push (tag); } } private void doCloseTag (JHCloseTag tag, RepInfo info) { String name = tag.getName (); // Dig down into the stack till we find an element which // matches this. If there's none, report the document // as not well formed. Also allow for the special case // of an empty body. (An empty head is illegal.) int idx = elementStack.search (name); if (idx == -1) { info.setMessage (new ErrorMessage ("Close tag without matching open tag", "Name = " + name + ", Line = " + tag.getLine () + ", Column = " + tag.getColumn ())); info.setValid (false); } else { // Pop the stack down to the level of the matching tag. elementStack.popTo (idx); } } private void doErrorElement (JHErrorElement elem, RepInfo info) { elem.reportError (info); } private void doPCData (JHPCData elem, RepInfo info, HtmlMetadata metadata) { // Pop any elements that have optional close tags and do not // allow PCDATA. if (elementStack.isEmpty ()) { // PCData before any content. This generates an implicit // html and body if they haven't already been seen. // It also means the document isn't valid, since the title // should precede any PCData. info.setMessage(new ErrorMessage ("Document must have implicit or explicit HEAD element")); info.setValid (false); return; } HtmlTagDesc top = elementStack.top ().getElement (); if (top.isTemp() || top.allowsPCData ()) { // We assume that PCData is allowed with unknown tags. elem.processPCData (elementStack, metadata); return; } // If we can pop elements with optional closing tags till we find // one that allows PCData, we should do that. But popping the // stack empty, as could happen if we're in a HEAD element, is // wrong. So we always allow two elements to remain on the stack. while (!top.isCloseTagRequired ()) { if (elementStack.size () <= 2) { break; } elementStack.popp (); top = elementStack.top ().getElement (); if (top.allowsPCData ()) { elem.processPCData (elementStack, metadata); return; } } info.setMessage (new ErrorMessage ("PCData illegal in context", "Line = " + elem.getLine () + ", Column = " + elem.getColumn () )); info.setValid (false); } /* Returns true if the element is permissible at this point. * This may pop elements off the stack and push implied tags. */ private boolean checkElementContext (JHOpenTag elem, RepInfo info) { /* We are guaranteed there's something on the stack * unless the tag is "html", but Paranoia Is A Virtue */ String name = elem.getName (); if (elementStack.isEmpty ()) { if ("html".equals (name)) { return true; } else { // This shouldn't happen return false; } } if (elementStack.excludesTag (name)) { return false; } JHOpenTag top = elementStack.top (); for (;;) { if (top.canGetMore () && top.allowsTag (name, this)) { top.countComponent (); return true; } if (!top.canAdvance ()) { /* Can't advance, can't stay put. */ break; } top.advanceIndex (); } /* Kludgy special-case code for optional tags */ HtmlTagDesc topElem = top.getElement (); if (topElem == htmlElement) { if (!elementStack.isHeadSeen () && headElement.allowsTag (name, this)) { JHOpenTag fakeTag = new JHOpenTag ("head"); fakeTag.setElement(headElement); elementStack.push (fakeTag); return true; } if (!elementStack.isBodySeen () && bodyElement != null && bodyElement.allowsTag (name, this)) { JHOpenTag fakeTag = new JHOpenTag ("body"); fakeTag.setElement (bodyElement); elementStack.push (fakeTag); return true; } return false; } else if (topElem == headElement) { if ("body".equals (name) || "frameset".equals (name)) { // Pop implied head end tag. Is this too much // special-casing? elementStack.popp (); elementStack.push (elem); return true; } else if (!elementStack.isBodySeen () && bodyElement != null && bodyElement.allowsTag (name, this)) { // Similar to above case except that the head is // implicitly terminated. elementStack.popp (); JHOpenTag fakeTag = new JHOpenTag ("body"); fakeTag.setElement (bodyElement); elementStack.push (fakeTag); return true; } else { return false; } } // Pop elements till we find a valid context. If // the enclosing element doesn't have an optional close // tag, report an error but pop it anyway. But first // check if there even is a context to which we can pop things. boolean complained = false; boolean searchStack = false; if (elementStack.size () > 2) { Iterator iter = elementStack.iterator (); // Discard html element iter.next (); while (iter.hasNext ()) { JHOpenTag otag = (JHOpenTag) iter.next (); if (otag.allowsTag (name, this)) { searchStack = true; break; } } } if (searchStack) { // We've established we can pop down to something. while (elementStack.size () > 2) { if (!complained) { top = elementStack.top (); topElem = top.getElement (); if (topElem.isCloseTagRequired()) { info.setValid (false); info.setMessage (new ErrorMessage ("Tag illegal in context", "Name = " + name + ", " + "Container = " + top.getName() + ", " + "Line = " + elem.getLine() + ", Column = " + elem.getColumn ())); } } elementStack.popp (); top = elementStack.top (); //topElem = top.getElement (); if (top.allowsTag (name, this)) { return true; } if (elementStack.isEmpty ()) { break; } } } return false; } /** Adds all the Strings in an array to the end of a List. */ protected static void addStringsToList (String[] names, List lst) { for (int i = 0; i < names.length; i++) { lst.add (names[i]); } } /** Adds an attribute to a List, with unrestricted values and * type IMPLIED. */ protected static void addSimpleAttribute (List atts, String name) { atts.add (new HtmlAttributeDesc (name)); } /** Adds an attribute to a List, with unrestricted values and * type REQUIRED. */ protected static void addRequiredAttribute (List atts, String name) { atts.add (new HtmlAttributeDesc (name, null, HtmlAttributeDesc.REQUIRED)); } /** Adds an attribute to a List, with the only permitted value being * the name of the attribute. This kind of attribute is normally * represented in HTML without an explicit value; in fact, some (most?) * readers won't permit an explicit value. */ protected static void addSelfAttribute (List atts, String name) { atts.add (new HtmlAttributeDesc (name, new String[] { name }, HtmlAttributeDesc.IMPLIED)); } /** Removes excluded strings from a List. */ protected static void removeStringsFromList (List lst, String [] strs) { for (int i = 0; i < strs.length; i++) { lst.remove(strs[i]); } } /** Pushes an element onto the element stack. */ protected void pushElementStack (JHOpenTag tag) { elementStack.push (tag); } } jhove/classes/edu/harvard/hul/ois/jhove/module/html/HtmlMetadata.java0000644000707400001440000003204311267140734025065 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004-2009 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.html; import edu.harvard.hul.ois.jhove.*; import java.util.*; /** * Repository for an HTML document's metadata. * Also hold some state information, so that properties involving * tags, attributes and pcdata can be constructed. * * @author Gary McGath * */ public class HtmlMetadata { private String _title; private String _lang; private List _meta; private String _charset; private TreeSet _languages; private List _links; private List _images; private List _citations; private List _defs; private List _frames; private List _scripts; private List _abbrs; private TreeSet _entities; private Property _propUnderConstruction; /** Object for tracking UTF8 blocks. */ private Utf8BlockMarker utf8BM; /** Constructor. Initializes to the empty state. */ public HtmlMetadata () { // Mostly sets variables to their defaults; it's good // documentation practice. Lists are set to null until // there's actually something to add to them; this guarantees // that toProperty() doesn't have to deal with empty lists. _title = null; _lang = null; _meta = null; _charset = null; _links = null; _images = null; _citations = null; _defs = null; _frames = null; _scripts = null; _entities = null; _languages = null; _propUnderConstruction = null; utf8BM = new Utf8BlockMarker (); } /** Stores the contents of the TITLE element. */ public void setTitle (String title) { _title = title; } /** Stores the language defined in the HTML element. */ public void setLanguage (String lang) { _lang = lang; } /** Add a language defined in an attribute of any element * except the HTML element. */ public void addLanguage (String lang) { if (!lang.equals(_lang)) { if (_languages == null) { _languages = new TreeSet (); } _languages.add (lang); } } /** Adds a CITE element's pcdata to the Citations property. */ public void addCitation (String text) { if (_citations == null) { _citations = new LinkedList (); } _citations.add (text); } /** Adds a META tag's contents to the Meta property. */ public void addMeta (Property prop) { // We don't set _meta until there's a property; // thus, we guarantee it will never be an empty list. if (_meta == null) { _meta = new LinkedList (); } _meta.add (prop); // Is it a httpequiv=Content-Type ? String valContentType = extractHttpEquivValue(prop, "Content-Type"); if (valContentType != null) { final String toSearch = "charset="; int indexOfCharset = valContentType.indexOf(toSearch); if (indexOfCharset != -1) { setCharset(valContentType.substring(indexOfCharset + toSearch.length())); } } // Is it a httpequiv=Content-Language ? String valContentLanguage = extractHttpEquivValue(prop, "Content-Language"); if (valContentLanguage != null) { setLanguage(valContentLanguage); } } /** * Extract the content value associated with a given httpEquiv. * @param prop List containing the description of the meta tag * @param httpEquivValue the httpEquiv to consider * @return the content value */ public String extractHttpEquivValue(Property prop, String httpEquivValue) { if (httpEquivValue == null) return null; String value = null; Property httpEquiv = prop.getByName("Httpequiv"); if (httpEquiv != null && PropertyArity.SCALAR.equals(httpEquiv.getArity()) && PropertyType.STRING.equals(httpEquiv.getType()) ) { String val = (String)httpEquiv.getValue(); if (httpEquivValue.equalsIgnoreCase(val)) { // Look for charset in the Content property Property content = prop.getByName("Content"); if (content != null && PropertyArity.SCALAR.equals(content.getArity()) && PropertyType.STRING.equals(content.getType()) ) { value = (String)content.getValue(); } } } return value; } /** Stores the charset defined in the HTML element. */ public void setCharset (String charset) { _charset = charset; } /** Adds a FRAME tag's contents to the Meta property. */ public void addFrame (Property prop) { // We don't set _frames until there's a property; // thus, we guarantee it will never be an empty list. if (_frames == null) { _frames = new LinkedList (); } _frames.add (prop); } /** Adds an ABBR tag's contents to the Meta property. */ public void addAbbr (Property prop) { if (_abbrs == null) { _abbrs = new LinkedList (); } _abbrs.add (prop); } /** Adds a link to the Links property. */ public void addLink (String link) { if (_links == null) { _links = new LinkedList (); } _links.add (link); } /** Adds an item to the Images property. */ public void addImage (Property prop) { if (_images == null) { _images = new LinkedList (); } _images.add (prop); } /** Adds a defined term to the Defined Terms property. */ public void addDef (String text) { if (_defs == null) { _defs = new LinkedList (); } _defs.add (text); } /** Adds the language of a SCRIPT element to the Scripts property. */ public void addScript (String stype) { if (_scripts == null) { _scripts = new LinkedList (); } _scripts.add (stype); } /** Adds a String to the Entities property. This property is a * SortedSet, so duplicates are not added, and the resulting set * can be iterated in alphabetical order. */ public void addEntity (String entity) { if (_entities == null) { _entities = new TreeSet (); } _entities.add (entity); } /** Returns the UTF8BlockMarker for the metadata. */ public Utf8BlockMarker getUtf8BlockMarker () { return utf8BM; } /** Returns the contents of the TITLE element. */ public String getTitle () { return _title; } public String getCharset() { return _charset; } /** Converts the metadata to a Property. */ public Property toProperty (TextMDMetadata _textMD) { List propList = new LinkedList (); Property val = new Property ("HTMLMetadata", PropertyType.PROPERTY, PropertyArity.LIST, propList); if (_lang != null) { propList.add (new Property ("PrimaryLanguage", PropertyType.STRING, _lang)); if (_textMD != null) { _textMD.setLanguage(_lang); } } if (_languages != null) { propList.add (new Property ("OtherLanguages", PropertyType.STRING, PropertyArity.SET, _languages)); } if (_title != null) { propList.add (new Property ("Title", PropertyType.STRING, _title)); } if (_meta != null) { // We're guaranteed that if _meta isn't null, it's non-empty. propList.add (new Property ("MetaTags", PropertyType.PROPERTY, PropertyArity.LIST, _meta)); } if (_frames != null) { propList.add (new Property ("Frames", PropertyType.PROPERTY, PropertyArity.LIST, _frames)); } if (_links != null) { propList.add (new Property ("Links", PropertyType.STRING, PropertyArity.LIST, _links)); } if (_scripts != null) { propList.add (new Property ("Scripts", PropertyType.STRING, PropertyArity.LIST, _scripts)); } if (_images != null) { propList.add (new Property("Images", PropertyType.PROPERTY, PropertyArity.LIST, _images)); } if (_citations != null) { propList.add (new Property("Citations", PropertyType.STRING, PropertyArity.LIST, _citations)); } if (_defs != null) { propList.add (new Property ("DefinedTerms", PropertyType.STRING, PropertyArity.LIST, _defs)); } if (_abbrs != null) { propList.add (new Property ("Abbreviations", PropertyType.PROPERTY, PropertyArity.LIST, _abbrs)); } if (_entities != null) { propList.add (new Property ("Entities", PropertyType.STRING, PropertyArity.SET, _entities)); } if (utf8BM != null) { Property p = utf8BM.getBlocksUsedProperty("UnicodeEntityBlocks"); if (p != null) { propList.add (p); } } if (_textMD != null) { propList.add (new Property ("TextMDMetadata", PropertyType.TEXTMDMETADATA, PropertyArity.SCALAR, _textMD)); } if (propList.isEmpty ()) { return null; } return val; } /** Sets a "property under construction". This is generally * called when an XML element is found, and the PCDATA must * be incorporated into the property. */ public void setPropUnderConstruction (Property p) { _propUnderConstruction = p; } /** Returns the "property under construction." */ public Property getPropUnderConstruction () { return _propUnderConstruction; } /** Adds PCDATA text to the property under construction. * This may not all be provided in one lump, so it * has to allow for multiple chunks. */ public void addToPropUnderConstruction (char[] ch, int start, int length) { if (_propUnderConstruction != null) { String argStr = new String (ch, start, length); String name = _propUnderConstruction.getName (); Object val = _propUnderConstruction.getValue (); if ("abbr".equals (name)) { // Theoretically, this can come in more than one // chunk, but a long abbreviation is moronic if // not oxymoronic. List propList = (List) _propUnderConstruction.getValue(); Property abProp = new Property ("abbr", PropertyType.STRING, argStr); propList.add(0, abProp); } else if ("title".equals (name) || "dfn".equals (name)) { // For these properties, we just need to maintain // the String. But to keep the design consistent and // simple, we maintain the Property and then just pull // out the String at the end. // A Property is immutable. Rather than risk obscure // consequences from changing this assumption, we append // the text to a new Property. _propUnderConstruction = new Property (name, PropertyType.STRING, (String) val + argStr); } } } /** Finishes any property under construction. This is called * when an end element is encountered. */ public void finishPropUnderConstruction () { if (_propUnderConstruction != null) { String name = _propUnderConstruction.getName (); if ("abbr".equals(name)) { addAbbr (_propUnderConstruction); } else if ("title".equals (name)) { _title = (String) _propUnderConstruction.getValue (); } _propUnderConstruction = null; } } } jhove/classes/edu/harvard/hul/ois/jhove/module/html/HtmlSpecialToken.java0000644000707400001440000000200510771562766025735 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.html; /** * Class for defining special items in HTML element and attribute * definitions. This class is never instantiated except by the * static elements it defines. * * @author Gary McGath * */ public class HtmlSpecialToken { String _name; /** Private constructor. This class may not be instantiated. */ private HtmlSpecialToken () {} private HtmlSpecialToken (String name) { _name = name; } //public static HtmlSpecialToken EMPTY = new HtmlSpecialToken ("EMPTY"); /** The PCDATA token. Signifies that PCDATA is permitted in the content * of an element. */ public static HtmlSpecialToken PCDATA = new HtmlSpecialToken ("PCDATA"); } jhove/classes/edu/harvard/hul/ois/jhove/module/html/HtmlTagDesc.java0000644000707400001440000003263010771562760024667 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.html; import java.util.*; /** * This class defines the permitted behavior of a particular HTML tag. * The full descriptive power of a DTD description isn't implemented here, * but content types and sequences of content are implemented. * * @author Gary McGath * */ public class HtmlTagDesc { /* Name of element. Constructor forces it to lower case, regardless * of how it was specified. */ private String _name; private boolean _openTagRequired; private boolean _closeTagRequired; /* Element tags in which this element can be nested. Only tags for * elements with optional opening tags need to be listed here; * listing others will just reduce efficiency. If there are no * applicable elements, this can be left null (which it is by * default). */ private List _implicitContainers; /* Array of permitted content lists. null indicates an empty element. * Each element of the array is a list of tag names which are permissible * at a given point. */ private List[] _contentArray; /* Array of excluded content strings. Each String in the array is a tag which * may not be included in any descendant of the element. */ private String[] _excludedContent; /** Array controlling the number of times each element of _contentArray * may be used. */ protected int[] _sequence; /** Value in _sequence indicating an element may be used 0 or 1 times. */ public final static int SEQ0_1 = 0; /** Value in _sequence indicating an element must be used exactly once. */ public final static int SEQ1 = 1; /** Value in _sequence indicating an element may be used 1 or more times. */ public final static int SEQ1_MANY = 2; /** Value in _sequence indicating an element may be used 0 or more times. */ public final static int SEQ0_MANY = 3; /* List of Attributes which are recognized for this tag. * Will never be null, but may be empty. */ private List _attributes; /** Constructor for simple case. * * @param name Name of the element * @param openTagRequired true if an opening tag is required * @param closeTagRequired true if a closing tag is required * @param content List of permitted tags. But what do I do when * a particular order is required? Null if element * is defined at EMPTY. * @param attributes List of HtmlAttributeDesc elements enumerating * the permitted attributes. May be null, in which * case _attributes will be stored as an empty list. */ public HtmlTagDesc (String name, boolean openTagRequired, boolean closeTagRequired, List content, List attributes) { _name = name.toLowerCase (); _openTagRequired = openTagRequired; _closeTagRequired = closeTagRequired; _implicitContainers = new LinkedList (); if (content == null) { // Empty element, so there's nothing for the content array _contentArray = null; } else { _contentArray = new List[1]; _contentArray[0] = content; _sequence = new int[1]; _sequence[0] = SEQ0_MANY; // assume most general case } if (attributes == null) { _attributes = new ArrayList (1); } else { _attributes = attributes; } } /** Constructor for sequenced case. * * @param name Name of the element * @param openTagRequired true if an opening tag is required * @param closeTagRequired true if a closing tag is required * @param sequence Array indicating the sequencing of elements in * content. Must have the same length * as sequence. * @param attributes List of HtmlAttributeDesc elements enumerating * the permitted attributes. May be null, in which * case _attributes will be stored as an empty list. */ public HtmlTagDesc (String name, boolean openTagRequired, boolean closeTagRequired, int[] sequence, List[] contentArray, List attributes) { _name = name.toLowerCase (); _openTagRequired = openTagRequired; _closeTagRequired = closeTagRequired; _implicitContainers = new LinkedList (); _sequence = sequence; _contentArray = contentArray; if (attributes == null) { _attributes = new ArrayList (1); } else { _attributes = attributes; } } /** Specifies tags which may not be included in this * element or in any element nested at any depth * within it. Corresponds to the -(content) feature * of the DTD. */ public void setExcludedContent (String[] content) { _excludedContent = content; } /** Returns true if a given tag is excluded * within this element. It is necessary to call this * method for each element on the stack to determine if * it is excluded. */ public boolean excludesTag (String tag) { if (_excludedContent == null) { return false; } for (int i = 0; i < _excludedContent.length; i++) { if (_excludedContent[i].equals (tag)) { return true; } } return false; } /** Alternative way of setting the attribute names. * This can be used where all the attributes are * unrestricted. This will replace any previously * set attributes. */ public void setAttributes (String[] attributeArray) { List atts = new ArrayList (attributeArray.length); for (int i = 0; i < attributeArray.length; i++) { HtmlAttributeDesc desc = new HtmlAttributeDesc (attributeArray[i]); atts.add (desc); } _attributes = atts; } /** Provides the object with an array of element tags in which * this element can be nested. Only tags for * elements with optional opening tags may be listed here. */ public void addImplicitContainer (HtmlTagDesc container) { _implicitContainers.add (container); } public boolean matches (String name) { return name.equals (_name); } /** Reports whether this is a temporary tag descriptor. * Returns false unless overridden. */ public boolean isTemp () { return false; } /** Reports whether this element allows a given tag name * in its content, at the specified index. */ protected boolean allowsTag (String tag, int index, HtmlDocDesc doc) { if (_contentArray == null) { // null means no content allowed return false; } /* Check for index out of bounds. */ if (index >= _contentArray.length) { return false; } Iterator iter = _contentArray[index].iterator (); while (iter.hasNext ()) { String allowedTag; try { allowedTag = (String) iter.next (); } catch (Exception e) { // Catch bad casts here -- any non-strings // should be ignored. continue; } if (allowedTag.equals (tag)) { return true; } } /* We might still be OK if we can construct a set of * elements with optional opening tags which will fill * in the gap. */ HtmlTagDesc tagDesc = (HtmlTagDesc) doc.supportedElements.get (tag); if (tagDesc != null && tagDesc._implicitContainers != null) { Iterator citer = tagDesc._implicitContainers.iterator (); while (citer.hasNext ()) { HtmlTagDesc ctnr = (HtmlTagDesc) citer.next (); // Call self recursively to try to insert the implicit // tag. There may be more than one level of recursion, // at least theoretically. if (allowsTag (ctnr._name, index, doc)) { JHOpenTag ctnrTag = new JHOpenTag (ctnr._name); ctnrTag.setElement (ctnr); doc.pushElementStack(ctnrTag); return true; } } } return false; } /** Reports whether this element can be implicitly nested * in an element with a given tag. There may be more than * one implicit container for a tag; if the DTD is unambiguous, * there should be only one which is permissible in any * given context. */ protected List implicitContainers (String tag) { return _implicitContainers; } /** Reports whether additional elements can be matched * at the specified content index. The index is assumed * to be legal. */ protected boolean canGetMoreAt (int index, int elemCount) { switch (_sequence[index]) { case SEQ0_1: case SEQ1: return (elemCount == 0); case SEQ1_MANY: case SEQ0_MANY: return true; default: return false; // Should never happen } } /** Reports whether it's legal to advance to the next content * index. The index is assumed to be legal, but the one * to which it's trying to advance may not be. */ protected boolean canAdvanceFrom (int index, int elemCount) { if (index == _sequence.length - 1) { return false; // No more content to match } switch (_sequence[index]) { case SEQ0_1: case SEQ0_MANY: return true; case SEQ1: return (elemCount == 1); case SEQ1_MANY: return (elemCount >= 1); default: return false; // Should never happen } } /** Reports whether this element allows a given tag name * in its content. This version should be used only with * element descriptors that aren't associated with tags, * for determining if a hypothetical implied element could * contain the given tag. */ protected boolean allowsTag (String tag, HtmlDocDesc doc) { return allowsTag (tag, 0, doc); } protected boolean allowsPCData () { if (_contentArray == null) { return false; } Iterator iter = _contentArray[0].iterator (); while (iter.hasNext ()) { Object contentItem = iter.next (); if (contentItem == HtmlSpecialToken.PCDATA) { return true; } } return false; } /** Returns the attribute with a given name, or null if * no such attribute is defined for the element */ protected HtmlAttributeDesc namedAttDesc (String name) { Iterator iter = _attributes.iterator (); while (iter.hasNext ()) { HtmlAttributeDesc desc = (HtmlAttributeDesc) iter.next (); if (desc.nameMatches (name)) { return desc; } } /* No match. */ return null; } /** Accepts a list of attribute names, and returns a List * of required attribute names which are not present * in the parameter list. Returns an empty List * if all required attributes are present. */ protected List missingRequiredAttributes (List names) { List val = new ArrayList (_attributes.size ()); // Build a list of required attributes, which will // be whittled away by comparison with the parameter list List reqNames = new ArrayList (_attributes.size ()); Iterator iter = _attributes.iterator (); while (iter.hasNext ()) { HtmlAttributeDesc desc = (HtmlAttributeDesc) iter.next (); if (desc.isRequired ()) { boolean found = false; Iterator niter = names.iterator (); while (niter.hasNext ()) { String name = (String) niter.next (); if (desc.nameMatches (name.toLowerCase ())) { found = true; break; } } if (!found) { val.add (desc.getName ()); } } } return val; } /** Returns true if the closing tag is required */ protected boolean isCloseTagRequired () { return _closeTagRequired; } /** Returns true if this element has empty content */ protected boolean isContentEmpty () { return _contentArray == null; } } jhove/classes/edu/harvard/hul/ois/jhove/module/html/HtmlTempTagDesc.java0000644000707400001440000000267110771562767025526 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.html; /** * Subclass of HtmlTagDesc for temporary tags. This doesn't add * any functionality to the superclass, but serves as a marker class. * * @author Gary McGath * */ public class HtmlTempTagDesc extends HtmlTagDesc { /** * Constructor. * * @param name Tag name */ public HtmlTempTagDesc (String name) { super (name, false, false, null, null); // To minimize excessive error messages, assume unlimited // tags can be nested. _sequence = new int[1]; _sequence[0] = SEQ0_MANY; } /** Reports whether this is a temporary tag descriptor. * Returns true. */ public boolean isTemp () { return true; } /** Reports whether this element allows a given tag name * in its content, at the specified index. Since we know nothing * about this element, no meaningful answer is possible. Return * true just to minimize the number of extra error * messages. */ protected boolean allowsTag (String tag, int index, HtmlDocDesc doc) { return true; } } jhove/classes/edu/harvard/hul/ois/jhove/module/html/JHAttribute.java0000644000707400001440000000531610771562761024717 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.html; /** * A description of an attribute within a JHOpenTag. * This is not a subclass of JHElement, as it isn't part of * the elements list. It is simply a way to store the information * about an attribute in a JHOpenTag. * * @author Gary McGath * */ public class JHAttribute { private String _name; private String _namespace; private String _value; private int _line; private int _column; /** * Constructor. * * @param name Name of the attribute. Will be forced to * lower case as it is stored. Must not be null. * @param namespace Namespace for the attribute. May be null * if no namespace is specified. * @param value Value of the attribute. May be null. * If it is in quotes, the quotes will be stripped. * @param line Line number at which the attribute begins. * @param column Column number at which the attribute begins. */ public JHAttribute (String name, String namespace, String value, int line, int column) { _name = name.toLowerCase (); _namespace = namespace; _line = line; _column = column; // Clean up value if it's quoted if (value != null && value.length () >= 2 && value.charAt (0) == '\"' && value.charAt (value.length() - 1) == '\"') { value = value.substring (1, value.length () - 1); } _value = value; } /** Returns the attribute's name. This is guaranteed to be * in lower case. */ public String getName () { return _name; } /** Returns the namespace of the attribute's name. May be null. */ public String getNamespace () { return _namespace; } /** Returns the attribute's value. May be null. If not null * and was originally enclosed in double quotes, the return * value has quotes stripped. */ public String getValue () { return _value; } /** Returns the line number of the beginning of the * attribute definition. */ public int getLine () { return _line; } /** Returns the column number of the beginning of the * attribute definition. */ public int getColumn () { return _column; } } jhove/classes/edu/harvard/hul/ois/jhove/module/html/JHCloseTag.java0000644000707400001440000000216010771562770024447 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.html; import java.util.*; /** * Representation of a parsed HTML close tag. * * @author Gary McGath * */ public class JHCloseTag extends JHElement { public String _name; /** Constructor. * * @param elements The list of parsed elements, to which * this gets added. * @param name The name of the tag * @param line Line number, for information reporting * @param column Line number, for information reporting */ public JHCloseTag (List elements, String name, int line, int column) { super (elements); _name = name.toLowerCase (); _line = line; _column = column; } /** Returns the tag's name. */ public String getName () { return _name; } } jhove/classes/edu/harvard/hul/ois/jhove/module/html/JHComment.java0000644000707400001440000000117110771562767024357 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.html; import java.util.*; /** * Representation of a parsed HTML comment. * * @author Gary McGath * */ public class JHComment extends JHElement { /** Constructor. * Just adds the comment to the element list. */ public JHComment (List elements, String text) { super (elements); } } jhove/classes/edu/harvard/hul/ois/jhove/module/html/JHDoctype.java0000644000707400001440000000150410771562762024357 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College * **********************************************************************/ package edu.harvard.hul.ois.jhove.module.html; import java.util.*; /** * Representation of a parsed HTML DOCTYPE. * * @author Gary McGath * */ public class JHDoctype extends JHElement { /** List of tokens in the DOCTYPE. */ public List _doctypeElements; /** Constructor. */ public JHDoctype (List elements, List dtElements) { super (elements); _doctypeElements = dtElements; } /** Returns the doctype token list. */ public List getDoctypeElements () { return _doctypeElements; } } jhove/classes/edu/harvard/hul/ois/jhove/module/html/JHElement.java0000644000707400001440000000430210771562762024340 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.html; import java.util.*; /** * Abstract superclass for the representation of portions of * an HTML file. This is not the same usage of "element" as the * SGML definition, but refers to a parsed unit, such as an opening * tag, closing tag, or PCDATA. * * @author Gary McGath * */ public abstract class JHElement { public int _column; public int _line; /** Constructor. * * @param elements List of elements representing the document. * May be null for a stub element which is implied * rather than being generated by the parser. */ public JHElement (List elements) { if (elements != null) { elements.add (this); } } /** Returns the line number for the start of the element. */ public int getLine () { return _line; } /** Returns the column number for the start of the element. */ public int getColumn () { return _column; } /** Extracts entities from a text string and returns them as * a List of Strings. * If there are no entities, returns an empty List. */ protected List getEntities (String text) { List lst = new LinkedList (); int startIdx = 0; for (;;) { // Find the ampersand which starts an entity. int idx = text.indexOf ("&", startIdx); if (idx < 0) { break; // no more occurrences } // Find the semicolon which ends the entity. int semiIdx = text.indexOf (";", idx); if (semiIdx < 0) { break; // broken entity, no terminator } String ent = text.substring(idx, semiIdx + 1); lst.add (ent); // Advance to end of this entity startIdx = semiIdx; } return lst; } } jhove/classes/edu/harvard/hul/ois/jhove/module/html/JHErrorElement.java0000644000707400001440000000455610771562760025363 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004-2005 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.html; import edu.harvard.hul.ois.jhove.*; import java.util.*; /** * A JHElement which signifies a syntactic error. * * @author Gary McGath * */ public class JHErrorElement extends JHElement { private String _message; private String _image; private boolean _illFormed; /** Constructor. * @param elements List of elements representing the document. * @param message Message to be reported * @param image Textual representation of the offending portion. * This will be used as the submessage of a generated * ErrorMessage. * @param illFormed true if the error makes the document * not well-formed, false if it makes * it only invalid. */ public JHErrorElement (List elements, String message, String image, boolean illFormed) { super (elements); _message = message; _image = image; _illFormed = illFormed; } public String getImage () { return _image; } /** Puts the item's error message into the RepInfo * object, and affects the wellFormed and valid * flags as required. Once it's determined that * a document is not well-formed, error elements indicating * only invalidity will be ignored. However, additional * messages that indicate the current level of badness * (not well-formed or invalid) will continue to be reported.*/ public void reportError (RepInfo info) { // If we're already not well-formed and the error element // is for invalidity, don't bother with it. if (info.getWellFormed() == RepInfo.FALSE && !_illFormed) { return; } info.setMessage (new ErrorMessage (_message, _image)); if (_illFormed) { info.setWellFormed (false); } else { info.setValid(false); } } } jhove/classes/edu/harvard/hul/ois/jhove/module/html/JHOpenTag.java0000644000707400001440000003452610771562761024316 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College * **********************************************************************/ package edu.harvard.hul.ois.jhove.module.html; import edu.harvard.hul.ois.jhove.*; import java.util.*; /** Representation of a parsed HTML open tag, including its attributes. * This arguable would better be called an element, but JHElement is * the name of the abstract superclass. * * @author Gary McGath * */ public class JHOpenTag extends JHElement { /** Element name. * Fields are made public to avoid overcomplicating the .jj file */ public String _name; /** List of element attributes. Each * attributes is an array of two strings, the * name and the value. If no explicit value * was given, attribute[1] is null. If the * attribute was in quotes, the quotes are still there. */ public List _attributes; /** Description of the abstract element. */ private HtmlTagDesc _element; /** Error message generated by parser, or null. */ private String _errorMessage; /* Index into _element's content array to indicate the position * currently being matched against. */ private int _contentIdx; /* Number of elements matched at the current content index. */ private int _elementCount; /** * Constructor. * * @param elements The list of parsed elements, to which * this gets added. May be null for a stub * element not generated by the parser. * @param name The name of the tag * @param attrs A List of attributes, representing * the parsed attributes of the tag. Each * attributes is an array of two strings, the * name and the value. If no explicit value * was given, attribute[1] is null. If the * attribute was in quotes, the quotes are still there. * @param line Line number, for information reporting * @param column Line number, for information reporting */ public JHOpenTag (List elements, String name, List attrs, int line, int column) { super (elements); _name = name.toLowerCase (); _attributes = attrs; _line = line; _column = column; //cleanAttributeQuotes (); _contentIdx = 0; _elementCount = 0; } /** * Constructor with error message. * This is used to allow constructs which are erroneous but common -- * specifically, the closing of a tag with "/>". * * @param elements The list of parsed elements, to which * this gets added. May be null for a stub * element not generated by the parser. * @param name The name of the tag * @param attrs A List of attributes, representing * the parsed attributes of the tag. Each * attributes is an array of two strings, the * name and the value. If no explicit value * was given, attribute[1] is null. If the * attribute was in quotes, the quotes are still there. * @param message An error message indicating that this element * isn't well-formed, but we'll take it anyway. */ public JHOpenTag (List elements, String name, List attrs, int line, int column, String message) { this (elements, name, attrs, line, column); _errorMessage = message; } /** Constructor for a stub attribute. This shouldn't ever be used * by the parser, but only by the module for generating implied * elements. */ public JHOpenTag (String name) { super (null); _name = name; _attributes = new ArrayList (1); _contentIdx = 0; } /** Associates an the tag with an element definition. This is done * by the HTML module, not by the parser. */ public void setElement (HtmlTagDesc element) { _element = element; } /** Returns the element definition which has been associated with * this tag. */ public HtmlTagDesc getElement () { return _element; } /** Returns the tag's name. */ public String getName () { return _name; } /** Returns the tag's attributes. * * @return The attributes as a List. Each * attributes is an array of two strings, the * name and the value. If no explicit value * was given, attribute[1] is null. If the * attribute was in quotes, the quotes are still there. */ public List getAttributes () { return _attributes; } /** Process the element to extract any available metadata. */ protected void processElement (HtmlMetadata mdata) { if ("html".equals (_name)) { processHtml (mdata); } else if ("meta".equals (_name)) { processMeta (mdata); } else if ("a".equals (_name)) { processA (mdata); } else if ("img".equals (_name)) { processImg (mdata); } else if ("frame".equals (_name)) { processFrame (mdata); } else if ("script".equals (_name)) { processScript (mdata); } /* Look for certain attributes in any tag. */ Iterator iter = _attributes.iterator (); while (iter.hasNext ()) { JHAttribute attr = (JHAttribute) iter.next (); if ("lang".equals (attr.getName ()) && attr.getValue () != null) { mdata.addLanguage (attr.getValue ()); } } } /** Returns true if the tag given in the parameter is * allowable in our context. */ protected boolean allowsTag (String tag, HtmlDocDesc doc) { return _element.allowsTag (tag, _contentIdx, doc); } /** Checks if we can accept another element at the current * content index. */ protected boolean canGetMore () { return _element.canGetMoreAt (_contentIdx, _elementCount); } /** Counts off a component at the current index. */ protected void countComponent () { _elementCount++; } /** Increments the value of _contentIdx */ protected void advanceIndex () { _contentIdx++; _elementCount = 0; } /** Reports whether it's legal to advance to the next content * index. The index is assumed to be legal, but the one * to which it's trying to advance may not be. */ protected boolean canAdvance () { return _element.canAdvanceFrom (_contentIdx, _elementCount); } /** Returns the error message associated with this element. * If it returns a non-null value, the tag is not well-formed, * and the error should be reported. */ protected String getErrorMessage () { return _errorMessage; } /** Processes metadata from an HTML tag */ private void processHtml (HtmlMetadata mdata) { String lang = null; Iterator iter = _attributes.iterator (); while (iter.hasNext ()) { JHAttribute attr = (JHAttribute) iter.next (); if ("lang".equals (attr.getName ())) { lang = attr.getValue (); } } if (lang != null) { mdata.setLanguage(lang); } } /** Processes metadata from a META tag */ private void processMeta (HtmlMetadata mdata) { String name = null; String httpeq = null; String content = null; Iterator iter = _attributes.iterator (); while (iter.hasNext ()) { JHAttribute attr = (JHAttribute) iter.next (); String attname = attr.getName (); String attval = attr.getValue (); if ("name".equals (attname)) { name = attval; } if ("http-equiv".equals (attname)) { httpeq = attval; } if ("content".equals (attname)) { content = attval; } } if (name != null || httpeq != null || content != null) { List plist = new ArrayList (3); if (name != null) { plist.add (new Property ("Name", PropertyType.STRING, name)); } if (httpeq != null) { plist.add (new Property ("Httpequiv", PropertyType.STRING, httpeq)); } if (content != null) { plist.add (new Property ("Content", PropertyType.STRING, content)); } mdata.addMeta (new Property ("Meta", PropertyType.PROPERTY, PropertyArity.LIST, plist)); } } /** Processes metadata from an A element. Only elements with an * HREF attribute are of interest here. We ignore links * to anchors. */ private void processA (HtmlMetadata mdata) { Iterator iter = _attributes.iterator (); while (iter.hasNext ()) { JHAttribute attr = (JHAttribute) iter.next (); if ("href".equals (attr.getName ())) { String link = attr.getValue (); if (link.length() > 0 && link.charAt (0) != '#') { mdata.addLink (link); } break; } } } /** Processes metadata from the IMG element. */ private void processImg (HtmlMetadata mdata) { String alt = null; String longdesc = null; String src = null; int height = -1; int width = -1; Iterator iter = _attributes.iterator (); while (iter.hasNext ()) { JHAttribute attr = (JHAttribute) iter.next (); String attname = attr.getName (); String attval = attr.getValue (); if ("alt".equals (attname)) { alt = attval; } else if ("src".equals (attname)) { src = attval; } else if ("longdesc".equals (attname)) { longdesc = attval; } else if ("height".equals (attname)) { try { height = Integer.parseInt(attval); } catch (Exception e) {} } else if ("width".equals (attname)) { try { width = Integer.parseInt(attval); } catch (Exception e) {} } } List plist = new ArrayList (5); if (alt != null) { plist.add (new Property ("Alt", PropertyType.STRING, alt)); } if (longdesc != null) { plist.add (new Property ("Longdesc", PropertyType.STRING, longdesc)); } if (src != null) { plist.add (new Property ("Src", PropertyType.STRING, src)); } if (height >= 0) { plist.add (new Property ("Height", PropertyType.INTEGER, new Integer (height))); } if (width >= 0) { plist.add (new Property ("Width", PropertyType.INTEGER, new Integer (width))); } if (!plist.isEmpty ()) { mdata.addImage(new Property ("Image", PropertyType.PROPERTY, PropertyArity.LIST, plist)); } } /** Processes metadata from the FRAME element. */ private void processFrame (HtmlMetadata mdata) { String name = null; String title = null; String src = null; String longdesc = null; int height = -1; int width = -1; Iterator iter = _attributes.iterator (); while (iter.hasNext ()) { JHAttribute attr = (JHAttribute) iter.next (); String attname = attr.getName (); String attval = attr.getValue (); if ("name".equals (attname)) { name = attval; } else if ("title".equals (attname)) { title = attval; } else if ("src".equals (attname)) { src = attval; } else if ("longdesc".equals (attname)) { longdesc = attval; } } List plist = new ArrayList (4); if (name != null) { plist.add (new Property ("Name", PropertyType.STRING, name)); } if (title != null) { plist.add (new Property ("Title", PropertyType.STRING, title)); } if (longdesc != null) { plist.add (new Property ("Longdesc", PropertyType.STRING, longdesc)); } if (src != null) { plist.add (new Property ("src", PropertyType.STRING, src)); } if (!plist.isEmpty ()) { mdata.addFrame(new Property ("Frame", PropertyType.PROPERTY, PropertyArity.LIST, plist)); } } /** Processes metadata from the SCRIPT element. */ private void processScript (HtmlMetadata mdata) { Iterator iter = _attributes.iterator (); while (iter.hasNext ()) { JHAttribute attr = (JHAttribute) iter.next (); String attname = attr.getName (); String attval = attr.getValue (); if ("type".equals (attname)) { if (attval.length() > 0 ) { mdata.addScript (attval); } } } } } jhove/classes/edu/harvard/hul/ois/jhove/module/html/JHPCData.java0000644000707400001440000000645711205003375024037 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College * **********************************************************************/ package edu.harvard.hul.ois.jhove.module.html; import edu.harvard.hul.ois.jhove.*; import java.util.*; import edu.harvard.hul.ois.jhove.PropertyType; /** Representation of parsed HTML PCDATA. * * @author Gary McGath * */ public class JHPCData extends JHElement { public String _text; /** * Constructor. * * @param elements The list of parsed elements, to which * this gets added. May be null for a stub * element not generated by the parser. * @param text The name of the tag * @param line Line number, for information reporting * @param column Line number, for information reporting */ public JHPCData (List elements, String text, int line, int column) { super (elements); _text = text; _line = line; _column = column; } /** Extracts metadata and entities from the PCData object * and its stack context. */ protected void processPCData (HtmlStack elementStack, HtmlMetadata metadata) { JHOpenTag tag = elementStack.top (); String name = tag.getName(); if ("title".equals (name)) { metadata.setTitle (_text); } else if ("cite".equals (name)) { metadata.addCitation (_text); } else if ("dfn".equals (name)) { metadata.addDef (_text); } else if ("abbr".equals (name)) { List abbrList = new ArrayList (2); abbrList.add( (new Property ("Text", PropertyType.STRING, _text))); Iterator iter = tag.getAttributes().iterator (); while (iter.hasNext ()) { String[] attr = (String []) iter.next (); String attname = attr[0]; String attval = attr[1]; if ("title".equals (attname)) { abbrList.add (new Property ("Title", PropertyType.STRING, attval)); break; } } metadata.addAbbr (new Property ("Abbr", PropertyType.PROPERTY, PropertyArity.LIST, abbrList)); } // Extract the entities and add them to the metadata Iterator iter = getEntities (_text).iterator (); Utf8BlockMarker utf8BM = metadata.getUtf8BlockMarker (); while (iter.hasNext ()) { String ent = (String) iter.next (); metadata.addEntity (ent); // If it's a numerical entity, note which UTF8 block it's in try { if (ent.charAt (1) == '#') { int entval = Integer.parseInt (ent.substring (2, ent.length() - 1)); utf8BM.markBlock(entval); } } catch (Exception e) { // Any exception means it's the wrong kind of entity } } } } jhove/classes/edu/harvard/hul/ois/jhove/module/html/JHXmlDecl.java0000644000707400001440000000172010771562767024305 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.html; import java.util.List; /** * Representation of an XML declaration. This class allows * XHTML files to be examined without choking. The actual * work is done by the XML module, but first we have to determine * that it is XHTML. * * @author Gary McGath * */ public class JHXmlDecl extends JHElement { /** Constructor. We don't really care about the content; this is * just a placeholder. So it has a minimal constructor. * * @param elements The list of parsed elements, to which * this gets added. */ public JHXmlDecl (List elements) { super (elements); } } jhove/classes/edu/harvard/hul/ois/jhove/module/html/ParseException.java0000644000707400001440000001435610771562762025470 0ustar garyusers/* Generated By:JavaCC: Do not edit this line. ParseException.java Version 3.0 */ package edu.harvard.hul.ois.jhove.module.html; /** * This exception is thrown when parse errors are encountered. * You can explicitly create objects of this exception type by * calling the method generateParseException in the generated * parser. * * You can modify this class to customize your error reporting * mechanisms so long as you retain the public fields. */ public class ParseException extends Exception { /** * This constructor is used by the method "generateParseException" * in the generated parser. Calling this constructor generates * a new object of this type with the fields "currentToken", * "expectedTokenSequences", and "tokenImage" set. The boolean * flag "specialConstructor" is also set to true to indicate that * this constructor was used to create this object. * This constructor calls its super class with the empty string * to force the "toString" method of parent class "Throwable" to * print the error message in the form: * ParseException: */ public ParseException(Token currentTokenVal, int[][] expectedTokenSequencesVal, String[] tokenImageVal ) { super(""); specialConstructor = true; currentToken = currentTokenVal; expectedTokenSequences = expectedTokenSequencesVal; tokenImage = tokenImageVal; } /** * The following constructors are for use by you for whatever * purpose you can think of. Constructing the exception in this * manner makes the exception behave in the normal way - i.e., as * documented in the class "Throwable". The fields "errorToken", * "expectedTokenSequences", and "tokenImage" do not contain * relevant information. The JavaCC generated code does not use * these constructors. */ public ParseException() { super(); specialConstructor = false; } public ParseException(String message) { super(message); specialConstructor = false; } /** * This variable determines which constructor was used to create * this object and thereby affects the semantics of the * "getMessage" method (see below). */ protected boolean specialConstructor; /** * This is the last token that has been consumed successfully. If * this object has been created due to a parse error, the token * followng this token will (therefore) be the first error token. */ public Token currentToken; /** * Each entry in this array is an array of integers. Each array * of integers represents a sequence of tokens (by their ordinal * values) that is expected at this point of the parse. */ public int[][] expectedTokenSequences; /** * This is a reference to the "tokenImage" array of the generated * parser within which the parse error occurred. This array is * defined in the generated ...Constants interface. */ public String[] tokenImage; /** * This method has the standard behavior when this object has been * created using the standard constructors. Otherwise, it uses * "currentToken" and "expectedTokenSequences" to generate a parse * error message and returns it. If this object has been created * due to a parse error, and you do not catch it (it gets thrown * from the parser), then this method is called during the printing * of the final stack trace, and hence the correct error message * gets displayed. */ public String getMessage() { if (!specialConstructor) { return super.getMessage(); } String expected = ""; int maxSize = 0; for (int i = 0; i < expectedTokenSequences.length; i++) { if (maxSize < expectedTokenSequences[i].length) { maxSize = expectedTokenSequences[i].length; } for (int j = 0; j < expectedTokenSequences[i].length; j++) { expected += tokenImage[expectedTokenSequences[i][j]] + " "; } if (expectedTokenSequences[i][expectedTokenSequences[i].length - 1] != 0) { expected += "..."; } expected += eol + " "; } String retval = "Encountered \""; Token tok = currentToken.next; for (int i = 0; i < maxSize; i++) { if (i != 0) retval += " "; if (tok.kind == 0) { retval += tokenImage[0]; break; } retval += add_escapes(tok.image); tok = tok.next; } retval += "\" at line " + currentToken.next.beginLine + ", column " + currentToken.next.beginColumn; retval += "." + eol; if (expectedTokenSequences.length == 1) { retval += "Was expecting:" + eol + " "; } else { retval += "Was expecting one of:" + eol + " "; } retval += expected; return retval; } /** * The end of line string for this machine. */ protected String eol = System.getProperty("line.separator", "\n"); /** * Used to convert raw characters to their escaped version * when these raw version cannot be used as part of an ASCII * string literal. */ protected String add_escapes(String str) { StringBuffer retval = new StringBuffer(); char ch; for (int i = 0; i < str.length(); i++) { switch (str.charAt(i)) { case 0 : continue; case '\b': retval.append("\\b"); continue; case '\t': retval.append("\\t"); continue; case '\n': retval.append("\\n"); continue; case '\f': retval.append("\\f"); continue; case '\r': retval.append("\\r"); continue; case '\"': retval.append("\\\""); continue; case '\'': retval.append("\\\'"); continue; case '\\': retval.append("\\\\"); continue; default: if ((ch = str.charAt(i)) < 0x20 || ch > 0x7e) { String s = "0000" + Integer.toString(ch, 16); retval.append("\\u" + s.substring(s.length() - 4, s.length())); } else { retval.append(ch); } continue; } } return retval.toString(); } } jhove/classes/edu/harvard/hul/ois/jhove/module/html/ParseHtml.java0000644000707400001440000004516610771562761024440 0ustar garyusers/* Generated By:JavaCC: Do not edit this line. ParseHtml.java */ /** Caution: Changes made by hand to fix bugs. Be sure to reenter * these fixes if the file is regenerated. */ package edu.harvard.hul.ois.jhove.module.html; import java.util.*; public class ParseHtml implements ParseHtmlConstants { private List elements; public List getElements () { return elements; } final public List HtmlDoc() throws ParseException { elements = new LinkedList (); label_1: while (true) { switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case STARTDOCTYPE: case LABRACKET: case PCDATA: ; break; default: jj_la1[0] = jj_gen; break label_1; } Element(elements); } jj_consume_token(0); {if (true) return elements;} throw new Error("Missing return statement in function"); } final public JHElement Element(List elements) throws ParseException { JHElement elem; try { if (jj_2_1(2)) { elem = Doctype(); {if (true) return elem;} } else if (jj_2_2(2)) { elem = OpenTag(); {if (true) return elem;} } else if (jj_2_3(2)) { elem = CloseTag(); {if (true) return elem;} } else { switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case PCDATA: elem = PCData(); {if (true) return elem;} break; default: jj_la1[1] = jj_gen; if (jj_2_4(2)) { elem = XMLDecl(); {if (true) return elem;} } else { jj_consume_token(-1); throw new ParseException(); } } } } catch (ParseException e) { String errText = ""; for (;;) { token_source.SwitchTo(DEFAULT); Token tok = getNextToken (); if (tok.kind == LABRACKET || tok.kind == PCDATA) { break; } errText += "Text = \"" + tok.image + "\", Line = " + tok.beginLine + ", Column = " + tok.beginColumn; /****** Added GDM 14-Jun-05 to avoid infinite loop ********/ if ("".equals (tok.image)) { break; } /******* End Added GDM 14-Jun-05 to avoid infinite loop ********/ } {if (true) return new JHErrorElement(elements, "Parsing error", errText, true);} } {if (true) return elem;} throw new Error("Missing return statement in function"); } final public JHOpenTag OpenTag() throws ParseException { List attrs = new LinkedList (); Token name; String slasher; boolean complete; jj_consume_token(LABRACKET); name = Name(); label_2: while (true) { switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case NAME: ; break; default: jj_la1[2] = jj_gen; break label_2; } Attribute(attrs); } slasher = TagCloser(); if ("/".equals (slasher)) { /* This is a special hack so that a tag closed with "/>" will keep the whole thing from falling apart, yet will generate an error */ {if (true) return new JHOpenTag (elements, name.image, attrs, name.beginLine, name.beginColumn, "Construction with \"/>\" is incorrect except in XHTML");} } else { {if (true) return new JHOpenTag (elements, name.image, attrs, name.beginLine, name.beginColumn);} } throw new Error("Missing return statement in function"); } final public JHXmlDecl XMLDecl() throws ParseException { List attrs = new LinkedList (); jj_consume_token(LABRACKET); jj_consume_token(QMARK); jj_consume_token(NAME); label_3: while (true) { switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case NAME: ; break; default: jj_la1[3] = jj_gen; break label_3; } Attribute(attrs); } jj_consume_token(QMARK); jj_consume_token(RABRACKET); {if (true) return new JHXmlDecl (elements);} throw new Error("Missing return statement in function"); } final public JHCloseTag CloseTag() throws ParseException { Token name; jj_consume_token(LABRACKET); jj_consume_token(SLASH); name = Name(); jj_consume_token(RABRACKET); {if (true) return new JHCloseTag (elements, name.image, name.beginLine, name.beginColumn);} throw new Error("Missing return statement in function"); } final public JHPCData PCData() throws ParseException { Token tok = getToken(1); jj_consume_token(PCDATA); {if (true) return new JHPCData (elements, tok.image, tok.beginLine, tok.beginColumn);} throw new Error("Missing return statement in function"); } final public JHDoctype Doctype() throws ParseException { List doctypeElements = new LinkedList (); jj_consume_token(STARTDOCTYPE); jj_consume_token(DOCTYPEKEYWORD); label_4: while (true) { switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case NAKEDDTITEM: case QUOTEDDTITEM: ; break; default: jj_la1[4] = jj_gen; break label_4; } DoctypeItem(doctypeElements); } jj_consume_token(RABRACKET); {if (true) return new JHDoctype (elements, doctypeElements);} throw new Error("Missing return statement in function"); } JHErrorElement ConsumeError() throws ParseException { Token tok = getNextToken(); return new JHErrorElement (elements, "Parsing error", tok.image, true); } final public void DoctypeItem(List dtElements) throws ParseException { Token tok = getToken(1); switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case NAKEDDTITEM: jj_consume_token(NAKEDDTITEM); dtElements.add (tok.image); break; case QUOTEDDTITEM: jj_consume_token(QUOTEDDTITEM); dtElements.add (tok.image); break; default: jj_la1[5] = jj_gen; jj_consume_token(-1); throw new ParseException(); } } final public Token Name() throws ParseException { Token tok = getToken(1); jj_consume_token(NAME); {if (true) return tok;} throw new Error("Missing return statement in function"); } final public String AttrVal() throws ParseException { Token tok = getToken(1); switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case NAKEDVALUE: jj_consume_token(NAKEDVALUE); {if (true) return tok.image;} break; case QUOTEDVALUE: jj_consume_token(QUOTEDVALUE); {if (true) return tok.image;} jj_consume_token(SINGQUOTEDVALUE); {if (true) return tok.image;} break; default: jj_la1[6] = jj_gen; jj_consume_token(-1); throw new ParseException(); } throw new Error("Missing return statement in function"); } final public void Attribute(List attrs) throws ParseException { JHAttribute attval; Token name; Token namespace; String val; if (jj_2_5(2)) { namespace = Name(); jj_consume_token(COLON); name = Name(); jj_consume_token(EQUALS); val = AttrVal(); attval = new JHAttribute (name.image, namespace.image, val, name.beginLine, name.beginColumn); attrs.add(attval); } else if (jj_2_6(2)) { namespace = Name(); jj_consume_token(COLON); name = Name(); attval = new JHAttribute (name.image, namespace.image, null, name.beginLine, name.beginColumn); attrs.add(attval); } else if (jj_2_7(2)) { name = Name(); jj_consume_token(EQUALS); val = AttrVal(); attval = new JHAttribute (name.image, null, val, name.beginLine, name.beginColumn); attrs.add(attval); } else if (jj_2_8(2)) { name = Name(); attval = new JHAttribute (name.image, null, null, name.beginLine, name.beginColumn); attrs.add(attval); } else { jj_consume_token(-1); throw new ParseException(); } } final public String TagCloser() throws ParseException { Token tok = getToken (1); switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case SLASH: jj_consume_token(SLASH); jj_consume_token(RABRACKET); {if (true) return tok.image;} break; case RABRACKET: jj_consume_token(RABRACKET); {if (true) return tok.image;} break; default: jj_la1[7] = jj_gen; jj_consume_token(-1); throw new ParseException(); } throw new Error("Missing return statement in function"); } final private boolean jj_2_1(int xla) { jj_la = xla; jj_lastpos = jj_scanpos = token; try { return !jj_3_1(); } catch(LookaheadSuccess ls) { return true; } finally { jj_save(0, xla); } } final private boolean jj_2_2(int xla) { jj_la = xla; jj_lastpos = jj_scanpos = token; try { return !jj_3_2(); } catch(LookaheadSuccess ls) { return true; } finally { jj_save(1, xla); } } final private boolean jj_2_3(int xla) { jj_la = xla; jj_lastpos = jj_scanpos = token; try { return !jj_3_3(); } catch(LookaheadSuccess ls) { return true; } finally { jj_save(2, xla); } } final private boolean jj_2_4(int xla) { jj_la = xla; jj_lastpos = jj_scanpos = token; try { return !jj_3_4(); } catch(LookaheadSuccess ls) { return true; } finally { jj_save(3, xla); } } final private boolean jj_2_5(int xla) { jj_la = xla; jj_lastpos = jj_scanpos = token; try { return !jj_3_5(); } catch(LookaheadSuccess ls) { return true; } finally { jj_save(4, xla); } } final private boolean jj_2_6(int xla) { jj_la = xla; jj_lastpos = jj_scanpos = token; try { return !jj_3_6(); } catch(LookaheadSuccess ls) { return true; } finally { jj_save(5, xla); } } final private boolean jj_2_7(int xla) { jj_la = xla; jj_lastpos = jj_scanpos = token; try { return !jj_3_7(); } catch(LookaheadSuccess ls) { return true; } finally { jj_save(6, xla); } } final private boolean jj_2_8(int xla) { jj_la = xla; jj_lastpos = jj_scanpos = token; try { return !jj_3_8(); } catch(LookaheadSuccess ls) { return true; } finally { jj_save(7, xla); } } final private boolean jj_3_6() { if (jj_3R_9()) return true; if (jj_scan_token(COLON)) return true; return false; } final private boolean jj_3R_9() { if (jj_scan_token(NAME)) return true; return false; } final private boolean jj_3R_7() { if (jj_scan_token(LABRACKET)) return true; if (jj_scan_token(SLASH)) return true; return false; } final private boolean jj_3_5() { if (jj_3R_9()) return true; if (jj_scan_token(COLON)) return true; return false; } final private boolean jj_3R_8() { if (jj_scan_token(LABRACKET)) return true; if (jj_scan_token(QMARK)) return true; return false; } final private boolean jj_3R_5() { if (jj_scan_token(STARTDOCTYPE)) return true; if (jj_scan_token(DOCTYPEKEYWORD)) return true; return false; } final private boolean jj_3R_6() { if (jj_scan_token(LABRACKET)) return true; if (jj_3R_9()) return true; return false; } final private boolean jj_3_8() { if (jj_3R_9()) return true; return false; } final private boolean jj_3_4() { if (jj_3R_8()) return true; return false; } final private boolean jj_3_3() { if (jj_3R_7()) return true; return false; } final private boolean jj_3_2() { if (jj_3R_6()) return true; return false; } final private boolean jj_3_7() { if (jj_3R_9()) return true; if (jj_scan_token(EQUALS)) return true; return false; } final private boolean jj_3_1() { if (jj_3R_5()) return true; return false; } public ParseHtmlTokenManager token_source; public Token token, jj_nt; private int jj_ntk; private Token jj_scanpos, jj_lastpos; private int jj_la; public boolean lookingAhead = false; private boolean jj_semLA; private int jj_gen; final private int[] jj_la1 = new int[8]; static private int[] jj_la1_0; static { jj_la1_0(); } private static void jj_la1_0() { jj_la1_0 = new int[] {0x16,0x10,0x20,0x20,0x18000,0x18000,0x180,0x2800,}; } final private JJCalls[] jj_2_rtns = new JJCalls[8]; private boolean jj_rescan = false; private int jj_gc = 0; public ParseHtml(CharStream stream) { token_source = new ParseHtmlTokenManager(stream); token = new Token(); jj_ntk = -1; jj_gen = 0; for (int i = 0; i < 8; i++) jj_la1[i] = -1; for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); } public void ReInit(CharStream stream) { token_source.ReInit(stream); token = new Token(); jj_ntk = -1; jj_gen = 0; for (int i = 0; i < 8; i++) jj_la1[i] = -1; for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); } public ParseHtml(ParseHtmlTokenManager tm) { token_source = tm; token = new Token(); jj_ntk = -1; jj_gen = 0; for (int i = 0; i < 8; i++) jj_la1[i] = -1; for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); } public void ReInit(ParseHtmlTokenManager tm) { token_source = tm; token = new Token(); jj_ntk = -1; jj_gen = 0; for (int i = 0; i < 8; i++) jj_la1[i] = -1; for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); } final private Token jj_consume_token(int kind) throws ParseException { Token oldToken; if ((oldToken = token).next != null) token = token.next; else token = token.next = token_source.getNextToken(); jj_ntk = -1; if (token.kind == kind) { jj_gen++; if (++jj_gc > 100) { jj_gc = 0; for (int i = 0; i < jj_2_rtns.length; i++) { JJCalls c = jj_2_rtns[i]; while (c != null) { if (c.gen < jj_gen) c.first = null; c = c.next; } } } return token; } token = oldToken; jj_kind = kind; throw generateParseException(); } static private final class LookaheadSuccess extends java.lang.Error { } final private LookaheadSuccess jj_ls = new LookaheadSuccess(); final private boolean jj_scan_token(int kind) { if (jj_scanpos == jj_lastpos) { jj_la--; if (jj_scanpos.next == null) { jj_lastpos = jj_scanpos = jj_scanpos.next = token_source.getNextToken(); } else { jj_lastpos = jj_scanpos = jj_scanpos.next; } } else { jj_scanpos = jj_scanpos.next; } if (jj_rescan) { int i = 0; Token tok = token; while (tok != null && tok != jj_scanpos) { i++; tok = tok.next; } if (tok != null) jj_add_error_token(kind, i); } if (jj_scanpos.kind != kind) return true; if (jj_la == 0 && jj_scanpos == jj_lastpos) throw jj_ls; return false; } final public Token getNextToken() { if (token.next != null) token = token.next; else token = token.next = token_source.getNextToken(); jj_ntk = -1; jj_gen++; return token; } final public Token getToken(int index) { Token t = lookingAhead ? jj_scanpos : token; for (int i = 0; i < index; i++) { if (t.next != null) t = t.next; else t = t.next = token_source.getNextToken(); } return t; } final private int jj_ntk() { if ((jj_nt=token.next) == null) return (jj_ntk = (token.next=token_source.getNextToken()).kind); else return (jj_ntk = jj_nt.kind); } private java.util.Vector jj_expentries = new java.util.Vector(); private int[] jj_expentry; private int jj_kind = -1; private int[] jj_lasttokens = new int[100]; private int jj_endpos; private void jj_add_error_token(int kind, int pos) { if (pos >= 100) return; if (pos == jj_endpos + 1) { jj_lasttokens[jj_endpos++] = kind; } else if (jj_endpos != 0) { jj_expentry = new int[jj_endpos]; for (int i = 0; i < jj_endpos; i++) { jj_expentry[i] = jj_lasttokens[i]; } boolean exists = false; for (java.util.Enumeration e = jj_expentries.elements(); e.hasMoreElements();) { int[] oldentry = (int[])(e.nextElement()); if (oldentry.length == jj_expentry.length) { exists = true; for (int i = 0; i < jj_expentry.length; i++) { if (oldentry[i] != jj_expentry[i]) { exists = false; break; } } if (exists) break; } } if (!exists) jj_expentries.addElement(jj_expentry); if (pos != 0) jj_lasttokens[(jj_endpos = pos) - 1] = kind; } } public ParseException generateParseException() { jj_expentries.removeAllElements(); boolean[] la1tokens = new boolean[27]; for (int i = 0; i < 27; i++) { la1tokens[i] = false; } if (jj_kind >= 0) { la1tokens[jj_kind] = true; jj_kind = -1; } for (int i = 0; i < 8; i++) { if (jj_la1[i] == jj_gen) { for (int j = 0; j < 32; j++) { if ((jj_la1_0[i] & (1< jj_gen) { jj_la = p.arg; jj_lastpos = jj_scanpos = p.first; switch (i) { case 0: jj_3_1(); break; case 1: jj_3_2(); break; case 2: jj_3_3(); break; case 3: jj_3_4(); break; case 4: jj_3_5(); break; case 5: jj_3_6(); break; case 6: jj_3_7(); break; case 7: jj_3_8(); break; } } p = p.next; } while (p != null); } jj_rescan = false; } final private void jj_save(int index, int xla) { JJCalls p = jj_2_rtns[index]; while (p.gen > jj_gen) { if (p.next == null) { p = p.next = new JJCalls(); break; } p = p.next; } p.gen = jj_gen + xla - jj_la; p.first = token; p.arg = xla; } static final class JJCalls { int gen; Token first; int arg; JJCalls next; } } jhove/classes/edu/harvard/hul/ois/jhove/module/html/ParseHtml.jj0000644000707400001440000001504610771562767024122 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ /* javacc grammar for parsing HTML into a List that higher-level code can handle. */ options { IGNORE_CASE = true; USER_CHAR_STREAM = true; STATIC = false; } PARSER_BEGIN(ParseHtml) package edu.harvard.hul.ois.jhove.module.html; import java.util.*; public class ParseHtml { private List elements; public List getElements () { return elements; } } PARSER_END(ParseHtml) /* Lexical productions start here. */ TOKEN: { : IN_DOCTYPE | : IN_TAG } MORE: { : IN_PCDATA } TOKEN: { : DEFAULT } TOKEN: { | : IN_ATTVALUE } TOKEN: { ", "=", ",", "\""])+ > : IN_TAG | : IN_TAG | : IN_TAG } TOKEN: { | | } TOKEN: { "> : DEFAULT } TOKEN: { : IN_DOCTYPE2 } TOKEN: { "])+ > | } SKIP : /* white space */ { " " | "\t" | "\n" | "\r" | "\f" } MORE : { : IN_COMMENT } SPECIAL_TOKEN : { <"--" > : ENDING_COMMENT } MORE : { < ~[] > } SPECIAL_TOKEN : { <">" > : DEFAULT | < ~[">"] > : IN_COMMENT } List HtmlDoc () : { elements = new LinkedList (); } { /* Production block -- looks a little like Java but isn't */ (Element(elements))* { return elements; } } JHElement Element (List elements) : { JHElement elem; } { try { LOOKAHEAD(2) elem = Doctype () { return elem; } | LOOKAHEAD(2) elem = OpenTag() { return elem; } | LOOKAHEAD(2) elem = CloseTag() { return elem; } | elem = PCData() { return elem; } | LOOKAHEAD(2) elem = XMLDecl() { return elem; } /* | elem = ProcessingInst() */ } catch (ParseException e) { String errText = ""; for (;;) { token_source.SwitchTo(DEFAULT); Token tok = getNextToken (); if (tok.kind == LABRACKET || tok.kind == PCDATA) { break; } errText += "Text = \"" + tok.image + "\", Line = " + tok.beginLine + ", Column = " + tok.beginColumn; } return new JHErrorElement(elements, "Parsing error", errText, true); } { return elem; } } JHOpenTag OpenTag () : { List attrs = new LinkedList (); Token name; String slasher; boolean complete; } { name = Name () (Attribute(attrs))* slasher = TagCloser () { if ("/".equals (slasher)) { /* This is a special hack so that a tag closed with "/>" will keep the whole thing from falling apart, yet will generate an error */ return new JHOpenTag (elements, name.image, attrs, name.beginLine, name.beginColumn, "Construction with \"/>\" is incorrect except in XHTML"); } else { return new JHOpenTag (elements, name.image, attrs, name.beginLine, name.beginColumn); } } } JHXmlDecl XMLDecl () : { List attrs = new LinkedList (); } { (Attribute(attrs))* { return new JHXmlDecl (elements); } } JHCloseTag CloseTag () : { Token name; } { name = Name () { return new JHCloseTag (elements, name.image, name.beginLine, name.beginColumn); } } JHPCData PCData () : { Token tok = getToken(1); } { { return new JHPCData (elements, tok.image, tok.beginLine, tok.beginColumn); } } JHDoctype Doctype () : { List doctypeElements = new LinkedList (); } { (DoctypeItem (doctypeElements))* {return new JHDoctype (elements, doctypeElements); } } /* This is a last-resort production which consumes a token and returns an element that will be flagged as an error. */ JAVACODE JHErrorElement ConsumeError () { Token tok = getNextToken(); return new JHErrorElement (elements, "Parsing error", tok.image, true); } void DoctypeItem (List dtElements) : { Token tok = getToken(1); } { { dtElements.add (tok.image); } | { dtElements.add (tok.image); } } Token Name () : { Token tok = getToken(1); } { { return tok; } } String AttrVal () : { Token tok = getToken(1); } { { return tok.image; } | { return tok.image; } { return tok.image; } } void Attribute (List attrs) : { JHAttribute attval; Token name; Token namespace; String val; } { LOOKAHEAD(2) namespace = Name() name = Name() val = AttrVal() { attval = new JHAttribute (name.image, namespace.image, val, name.beginLine, name.beginColumn); attrs.add(attval); } | LOOKAHEAD(2) namespace = Name() name = Name() { attval = new JHAttribute (name.image, namespace.image, null, name.beginLine, name.beginColumn); attrs.add(attval); } | LOOKAHEAD(2) name = Name() val = AttrVal() { attval = new JHAttribute (name.image, null, val, name.beginLine, name.beginColumn); attrs.add(attval); } | LOOKAHEAD(2) name = Name() { attval = new JHAttribute (name.image, null, null, name.beginLine, name.beginColumn); attrs.add(attval); } } String TagCloser () : { Token tok = getToken (1); } { ( ) { return tok.image; } | { return tok.image; } } jhove/classes/edu/harvard/hul/ois/jhove/module/html/ParseHtmlConstants.java0000644000707400001440000000227110771562763026325 0ustar garyusers/* Generated By:JavaCC: Do not edit this line. ParseHtmlConstants.java */ package edu.harvard.hul.ois.jhove.module.html; public interface ParseHtmlConstants { int EOF = 0; int STARTDOCTYPE = 1; int LABRACKET = 2; int PCDATASTART = 3; int PCDATA = 4; int NAME = 5; int EQUALS = 6; int NAKEDVALUE = 7; int QUOTEDVALUE = 8; int SINGQUOTEDVALUE = 9; int QMARK = 10; int SLASH = 11; int COLON = 12; int RABRACKET = 13; int DOCTYPEKEYWORD = 14; int NAKEDDTITEM = 15; int QUOTEDDTITEM = 16; int OPENCOMMENT = 22; int DEFAULT = 0; int IN_PCDATA = 1; int IN_TAG = 2; int IN_ATTVALUE = 3; int IN_DOCTYPE = 4; int IN_DOCTYPE2 = 5; int IN_COMMENT = 6; int ENDING_COMMENT = 7; String[] tokenImage = { "", "\"", "", "", "", "", "", "", "\"?\"", "\"/\"", "\":\"", "\">\"", "\"DOCTYPE\"", "", "", "\" \"", "\"\\t\"", "\"\\n\"", "\"\\r\"", "\"\\f\"", "\" jhove/classes/edu/harvard/hul/ois/jhove/module/html/package.html0000644000707400001440000000306410771562761024146 0ustar garyusers

Contains supporting classes for the HTML-HUL module.

This module uses code generated by JavaCC. The grammar file is ParseHtml.jj. It can be compiled using BuildParser.bat. Compiling it generates the following files:

  • CharStream.java
  • ParseException.java
  • ParseHtml.java
  • ParseHtmlConstants.java
  • ParseHtmlTokenManager.java
  • SimpleCharStream.java
  • Token.java
  • TokenMgrError.java

In addition, HtmlCharStream.java has been created by manually modifying CharStream.java. If a future version of JavaCC changes CharStream.java, HtmlCharStream.java should be changed to match.

A number of DTD and Entity files have been stored with this package to facilitate resolution of Doctypes without having to get them over the Internet. These are the W3 Consortium's files, and no rights over them are claimed by including them here.
The list of files:

  • xhtml1-frameset.dtd
  • xhtml1-strict.dtd
  • xhtml1-transitional.dtd
  • xhtml-lat1.ent
  • xhtml-special.ent
  • xhtml-symbol.ent

This module uses the XML-HUL module in validating XHTML files.
jhove/classes/edu/harvard/hul/ois/jhove/module/html/xhtml-lat1.ent0000644000707400001440000002677710771562760024407 0ustar garyusers jhove/classes/edu/harvard/hul/ois/jhove/module/html/xhtml-special.ent0000644000707400001440000001004310771562767025150 0ustar garyusers jhove/classes/edu/harvard/hul/ois/jhove/module/html/xhtml-symbol.ent0000644000707400001440000003303010771562757025035 0ustar garyusers jhove/classes/edu/harvard/hul/ois/jhove/module/html/xhtml1-frameset.dtd0000644000707400001440000010026510771562771025405 0ustar garyusers %HTMLlat1; %HTMLsymbol; %HTMLspecial; jhove/classes/edu/harvard/hul/ois/jhove/module/html/xhtml1-strict.dtd0000644000707400001440000006160010771562757025112 0ustar garyusers %HTMLlat1; %HTMLsymbol; %HTMLspecial; jhove/classes/edu/harvard/hul/ois/jhove/module/html/xhtml1-transitional.dtd0000644000707400001440000007655710771562761026325 0ustar garyusers %HTMLlat1; %HTMLsymbol; %HTMLspecial; jhove/classes/edu/harvard/hul/ois/jhove/module/html/xhtml11-flat.dtd0000644000707400001440000045310210771562761024606 0ustar garyusers ]]> ]]> %xhtml-arch.mod;]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> %xhtml-legacy.mod;]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> jhove/classes/edu/harvard/hul/ois/jhove/module/html/CharStream.class0000644000707400001440000000074011510702104024716 0ustar garyusers2readChar()C Exceptions getColumn()I DeprecatedgetLine getEndColumn getEndLinegetBeginColumn getBeginLinebackup(I)V BeginTokenGetImage()Ljava/lang/String; GetSuffix(I)[CDone()V0edu/harvard/hul/ois/jhove/module/html/CharStreamjava/lang/Objectjava/io/IOException       jhove/classes/edu/harvard/hul/ois/jhove/module/html/HtmlDocDesc.class0000644000707400001440000002146011510702104025020 0ustar garyusers2                  Z  + +  +  +    Z           D    H K  K $ K K    ! " Z# Z$ Z% &' ()* $+ ,- . $/ $0  12   3 4 5 $6 7 $8  9:   ; < = > ? @ $= AB C D EFGHIJK LMNmetadata4Ledu/harvard/hul/ois/jhove/module/html/HtmlMetadata; commonTagsLjava/util/HashMap;supportedElementsLjava/util/Map; htmlElement3Ledu/harvard/hul/ois/jhove/module/html/HtmlTagDesc; headElement bodyElementframesetElement elementStack1Ledu/harvard/hul/ois/jhove/module/html/HtmlStack;headings[Ljava/lang/String;()VCodevalidate6(Ljava/util/List;Ledu/harvard/hul/ois/jhove/RepInfo;)Z StackMapTableO getMetadata6()Ledu/harvard/hul/ois/jhove/module/html/HtmlMetadata;init doOpenTagW(Ledu/harvard/hul/ois/jhove/module/html/JHOpenTag;Ledu/harvard/hul/ois/jhove/RepInfo;)V!MPP!QCR* doCloseTagX(Ledu/harvard/hul/ois/jhove/module/html/JHCloseTag;Ledu/harvard/hul/ois/jhove/RepInfo;)VdoErrorElement\(Ledu/harvard/hul/ois/jhove/module/html/JHErrorElement;Ledu/harvard/hul/ois/jhove/RepInfo;)VdoPCData(Ledu/harvard/hul/ois/jhove/module/html/JHPCData;Ledu/harvard/hul/ois/jhove/RepInfo;Ledu/harvard/hul/ois/jhove/module/html/HtmlMetadata;)VcheckElementContextW(Ledu/harvard/hul/ois/jhove/module/html/JHOpenTag;Ledu/harvard/hul/ois/jhove/RepInfo;)ZaddStringsToList&([Ljava/lang/String;Ljava/util/List;)VaddSimpleAttribute%(Ljava/util/List;Ljava/lang/String;)VaddRequiredAttributeaddSelfAttributeremoveStringsFromList&(Ljava/util/List;[Ljava/lang/String;)VpushElementStack4(Ledu/harvard/hul/ois/jhove/module/html/JHOpenTag;)V 2edu/harvard/hul/ois/jhove/module/html/HtmlMetadata /edu/harvard/hul/ois/jhove/module/html/HtmlStack ST UT VTQ WXO YZ [\/edu/harvard/hul/ois/jhove/module/html/JHElement/edu/harvard/hul/ois/jhove/module/html/JHDoctype/edu/harvard/hul/ois/jhove/module/html/JHOpenTag 0edu/harvard/hul/ois/jhove/module/html/JHCloseTag 4edu/harvard/hul/ois/jhove/module/html/JHErrorElement .edu/harvard/hul/ois/jhove/module/html/JHPCData ]Z&edu/harvard/hul/ois/jhove/ErrorMessage4Document must have implicit or explicit HEAD element ^P _` ab htmlc de1edu/harvard/hul/ois/jhove/module/html/HtmlTagDesc headbody fg hg igjava/lang/StringBuilderName = jk , Line = lm jn , Column = om pg q rb sZ tu vT w xyTag illegal in context,  Container = Line =  Unknown tag5edu/harvard/hul/ois/jhove/module/html/HtmlTempTagDesc zm {|java/util/ArrayList }m ~1edu/harvard/hul/ois/jhove/module/html/JHAttribute u g Undefined attribute for element, Attribute = Improper value for attribute Element =  , Value =  java/lang/String ^  m  R ~java/lang/Exception Missing required attributeTag =  Z Z #Close tag without matching open tag ~   Z  Z PCData illegal in context  Z   Z  Zframeset7edu/harvard/hul/ois/jhove/module/html/HtmlAttributeDesc  uh1h2h3h4h5h6 1edu/harvard/hul/ois/jhove/module/html/HtmlDocDescjava/lang/Objectjava/util/Iterator!edu/harvard/hul/ois/jhove/RepInfojava/util/List)edu/harvard/hul/ois/jhove/Utf8BlockMarkersetHeadElement6(Ledu/harvard/hul/ois/jhove/module/html/HtmlTagDesc;)VsetBodyElementsetFramesetElementiterator()Ljava/util/Iterator;hasNext()Znext()Ljava/lang/Object; isHeadSeen(Ljava/lang/String;)V setMessage&(Ledu/harvard/hul/ois/jhove/Message;)VsetValid(Z)V java/util/Mapget&(Ljava/lang/Object;)Ljava/lang/Object;getName()Ljava/lang/String; toLowerCasegetErrorMessageappend-(Ljava/lang/String;)Ljava/lang/StringBuilder;getLine()I(I)Ljava/lang/StringBuilder; getColumntoString'(Ljava/lang/String;Ljava/lang/String;)V setWellFormedisEmptyequals(Ljava/lang/Object;)Z setElementpushtop3()Ledu/harvard/hul/ois/jhove/module/html/JHOpenTag; getWellFormed getAttributes()Ljava/util/List;size(I)VaddgetValue namedAttDescM(Ljava/lang/String;)Ledu/harvard/hul/ois/jhove/module/html/HtmlAttributeDesc;valueOK'(Ljava/lang/String;Ljava/lang/String;)Z getEntities$(Ljava/lang/String;)Ljava/util/List;getUtf8BlockMarker-()Ledu/harvard/hul/ois/jhove/Utf8BlockMarker; addEntitycharAt(I)Clength substring(II)Ljava/lang/String;java/lang/IntegerparseInt(Ljava/lang/String;)I markBlockmissingRequiredAttributes"(Ljava/util/List;)Ljava/util/List;processElement7(Ledu/harvard/hul/ois/jhove/module/html/HtmlMetadata;)VisTempisContentEmptysearchpopTo reportError&(Ledu/harvard/hul/ois/jhove/RepInfo;)V getElement5()Ledu/harvard/hul/ois/jhove/module/html/HtmlTagDesc; allowsPCData processPCDatah(Ledu/harvard/hul/ois/jhove/module/html/HtmlStack;Ledu/harvard/hul/ois/jhove/module/html/HtmlMetadata;)VisCloseTagRequiredpopp excludesTag(Ljava/lang/String;)Z canGetMore allowsTagH(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/module/html/HtmlDocDesc;)ZcountComponent canAdvance advanceIndex isBodySeen)(Ljava/lang/String;[Ljava/lang/String;I)Vremove!   **Y*Y** ** ** +N-q-:*,C*,.*,*,**,Y, >*C7**!"#$%**!&#$**!'#$ +()N6+*:@,Y+Y,-.-./.+012.+3145,6*7)"-8 Y"9:*%:*;*!-#$:6*+,<:*7*=:(:,Y>+Y,-.-.?.+Y,@..?.4A.B.+012.+3145, J,YC+Y,-.-./.+012.+3145, DY-E:,F+G::HYIJ: IK:  L:   MW N:  O:  O,YP+Y,-.-.Q. ./. R12. S145, b   TV,YU+Y,V.-.Q. .W. ./. R12. S145,  d+ X:*Y:DZ:*[\#]d^_6`: b:  cl,  :  T Z: ,Yd+Y,e.-.Q. ./.+012.+3145+*fg h+:*+;aS/*<(K+^BB  Z {_+iN*-j6C,Yk+Y,-.-./.+l12.+m145, *n U+,o*7,Y, *=p:g q +*-rs6*t(*u*=p:q+*-r,Yv+Y,B.+w12.+x145,   $ I+(N*7"-8*-y*=:z-*{ |} ~p:*%v*.*-*"Y&9:*:*;*5* .* -*"Y'9:* :*;*k'-8 -8*u*+;*<* 5* -*)*uY'9:* :*;66*t=*:W":  -*{ 6*to*=:p:sW, ,Y>+Y,-.-.?.@.(.?.B.+012.+3145*u*=:-*{*7a3  D;B!%{ 4=*+*2MW  *Y+MW *Y+MW %*Y+ZY+SMW 4=+*+2W  *+;3'ZYSYSYSYSYSYSjhove/classes/edu/harvard/hul/ois/jhove/module/html/Token.class0000644000707400001440000000112111510702104023737 0ustar garyusers2   kindI beginLine beginColumnendLine endColumnimageLjava/lang/String;next-Ledu/harvard/hul/ois/jhove/module/html/Token; specialToken()VCodetoString()Ljava/lang/String;newToken0(I)Ledu/harvard/hul/ois/jhove/module/html/Token; StackMapTable  +edu/harvard/hul/ois/jhove/module/html/Tokenjava/lang/Object!    **) Y jhove/classes/edu/harvard/hul/ois/jhove/module/html/HtmlAttributeDesc.class0000644000707400001440000000210311510702104026247 0ustar garyusers25 ' ( ) * +, +-./REQUIREDI ConstantValueCURRENTCONREFIMPLIEDOTHER_nameLjava/lang/String;_kind_permittedValues[Ljava/lang/String;)(Ljava/lang/String;[Ljava/lang/String;I)VCode(Ljava/lang/String;)VgetName()Ljava/lang/String; nameMatches(Ljava/lang/String;)ZvalueOK'(Ljava/lang/String;Ljava/lang/String;)Z StackMapTable isRequired()Z 0    1 23 47edu/harvard/hul/ois/jhove/module/html/HtmlAttributeDescjava/lang/Object()Vjava/lang/Stringequals(Ljava/lang/Object;)Z toLowerCase!             **+*,* **+*** ! *+"#mN*,**2+,M>**2,$  %&%*$ @jhove/classes/edu/harvard/hul/ois/jhove/module/html/HtmlMetadata.class0000644000707400001440000001260711510702104025237 0ustar garyusers2 U T T T T T T T T T T T T T  T +    K T + + + T T / / / / + T / /    K + / K O O O T_titleLjava/lang/String;_lang_metaLjava/util/List;_charset _languagesLjava/util/TreeSet;_links_images _citations_defs_frames_scripts_abbrs _entities_propUnderConstruction$Ledu/harvard/hul/ois/jhove/Property;utf8BM+Ledu/harvard/hul/ois/jhove/Utf8BlockMarker;()VCodesetTitle(Ljava/lang/String;)V setLanguage addLanguage StackMapTable addCitationaddMeta'(Ledu/harvard/hul/ois/jhove/Property;)VextractHttpEquivValueJ(Ledu/harvard/hul/ois/jhove/Property;Ljava/lang/String;)Ljava/lang/String; setCharsetaddFrameaddAbbraddLinkaddImageaddDef addScript addEntitygetUtf8BlockMarker-()Ledu/harvard/hul/ois/jhove/Utf8BlockMarker;getTitle()Ljava/lang/String; getCharset toPropertyP(Ledu/harvard/hul/ois/jhove/TextMDMetadata;)Ledu/harvard/hul/ois/jhove/Property;setPropUnderConstructiongetPropUnderConstruction&()Ledu/harvard/hul/ois/jhove/Property;addToPropUnderConstruction([CII)VfinishPropUnderConstruction jk VW XW YZ [W ^Z _Z `Z aZ bZ cZ e] \] fg)edu/harvard/hul/ois/jhove/Utf8BlockMarker hi java/util/TreeSet java/util/LinkedList Content-Type vwcharset= ynContent-Language on Httpequiv   java/lang/String Content dZ"edu/harvard/hul/ois/jhove/Property HTMLMetadata jPrimaryLanguage jOtherLanguages TitleMetaTagsFramesLinksScriptsImages Citations DefinedTerms AbbreviationsEntitiesUnicodeEntityBlocks TextMDMetadata   j abbrjava/util/List titledfnjava/lang/StringBuilder   {t2edu/harvard/hul/ois/jhove/module/html/HtmlMetadatajava/lang/Objectequals(Ljava/lang/Object;)ZaddindexOf(Ljava/lang/String;)Ilength()I substring(I)Ljava/lang/String; getByName8(Ljava/lang/String;)Ledu/harvard/hul/ois/jhove/Property;'edu/harvard/hul/ois/jhove/PropertyAritySCALAR)Ledu/harvard/hul/ois/jhove/PropertyArity;getArity+()Ledu/harvard/hul/ois/jhove/PropertyArity;.(Ledu/harvard/hul/ois/jhove/EnumerationType;)Z&edu/harvard/hul/ois/jhove/PropertyTypeSTRING(Ledu/harvard/hul/ois/jhove/PropertyType;getType*()Ledu/harvard/hul/ois/jhove/PropertyType;getValue()Ljava/lang/Object;equalsIgnoreCase(Ljava/lang/String;)ZPROPERTYLISTx(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ledu/harvard/hul/ois/jhove/PropertyArity;Ljava/lang/Object;)VO(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ljava/lang/Object;)V(edu/harvard/hul/ois/jhove/TextMDMetadataSETgetBlocksUsedPropertyTEXTMDMETADATAisEmpty()ZgetName(ILjava/lang/Object;)Vappend-(Ljava/lang/String;)Ljava/lang/StringBuilder;toString!TUVWXWYZ[W\]^Z_Z`ZaZbZcZdZe]fghijkl]Q********* * * * * **Ymnl*+onl*+pnl='+** *Y * +Wqrnl3**Y*+WqstlzY**Y*+W*+M,!,6*,`*+ N-*-!q4uuvwlx,N+"#:d$%&V'()H*+:,,5+-#:($%&'() *+N-q ouxynl*+ztl3* *Y * +Wq{tl3*.*Y.*.+Wq|nl3**Y*+Wq}tl3**Y*+Wq~nl3* *Y * +Wqnl3* *Y * +Wqnl1* *Y * +Wql*l*l*lYM/Y012,3N*&,/Y4'*5W+ +*6* ,/Y7'8* 3W*,/Y9'*5W*,/Y:12*3W* ,/Y;12* 3W*,/Y<'2*3W* ,/Y='2* 3W*,/Y>12*3W*,/Y?'2*3W* ,/Y@'2* 3W*.,/YA12*.3W* ,/YB'8* 3W**CD: ,W+,/YEF$+3W,G-qCx   tl*+l*l *+Y+H:*I:**:J,**K:/YJ'5:L>M N**/Y'OYP+QQR5qXuu&kl^@*;*ILJ+**SM+***+*q #ujhove/classes/edu/harvard/hul/ois/jhove/module/html/HtmlTagDesc.class0000644000707400001440000001007411510702104025025 0ustar garyusers2 &e f g h ij e k lm no p q r st u v w xy xz{| }~   u  }   _nameLjava/lang/String;_openTagRequiredZ_closeTagRequired_implicitContainersLjava/util/List; _contentArray[Ljava/util/List;_excludedContent[Ljava/lang/String; _sequence[ISEQ0_1I ConstantValueSEQ1 SEQ1_MANY SEQ0_MANY _attributes7(Ljava/lang/String;ZZLjava/util/List;Ljava/util/List;)VCode StackMapTable{m:(Ljava/lang/String;ZZ[I[Ljava/util/List;Ljava/util/List;)V3/setExcludedContent([Ljava/lang/String;)V excludesTag(Ljava/lang/String;)Z setAttributesaddImplicitContainer6(Ledu/harvard/hul/ois/jhove/module/html/HtmlTagDesc;)VmatchesisTemp()Z allowsTagI(Ljava/lang/String;ILedu/harvard/hul/ois/jhove/module/html/HtmlDocDesc;)Z|implicitContainers$(Ljava/lang/String;)Ljava/util/List; canGetMoreAt(II)ZcanAdvanceFromH(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/module/html/HtmlDocDesc;)Z allowsPCData namedAttDescM(Ljava/lang/String;)Ledu/harvard/hul/ois/jhove/module/html/HtmlAttributeDesc;missingRequiredAttributes"(Ljava/util/List;)Ljava/util/List;tisCloseTagRequiredisContentEmpty ? '( )* +*java/util/LinkedList ,- ./java/util/List 23java/util/ArrayList ? >- 01 7edu/harvard/hul/ois/jhove/module/html/HtmlAttributeDesc ?  R java/lang/Stringjava/lang/Exception  1edu/harvard/hul/ois/jhove/module/html/HtmlTagDesc ST/edu/harvard/hul/ois/jhove/module/html/JHOpenTag O  L R java/lang/Objectjava/util/Iterator()V toLowerCase()Ljava/lang/String;(I)Vequals(Ljava/lang/Object;)Z(Ljava/lang/String;)Vadditerator()Ljava/util/Iterator;hasNextnext()Ljava/lang/Object;1edu/harvard/hul/ois/jhove/module/html/HtmlDocDescsupportedElementsLjava/util/Map; java/util/Mapget&(Ljava/lang/Object;)Ljava/lang/Object; setElementpushElementStack4(Ledu/harvard/hul/ois/jhove/module/html/JHOpenTag;)V6edu/harvard/hul/ois/jhove/module/html/HtmlSpecialTokenPCDATA8Ledu/harvard/hul/ois/jhove/module/html/HtmlSpecialToken; nameMatchessize()I isRequiredgetName!& '()*+*,-./012345678569:56;<56=>-?@Ag**+***Y * !* * S* * O* Y  *B.CDEE?FAuH**+***Y* * * Y  *BACDGHEIJA*+KLAH+*=**2+B  MJAQ3 Y+ M>+Y+2:,W*,B  E NOA *+WPLA +*QRASTA * * * 2:%::+-+:[S:=:*- Y:- +7:B' UXVD 'CU@WXA*YZAL2* .*((B$@[ZAiJ* d* .5*B "@@S\A*+,]RAP3* * 2L++M,!B  U^_AH,*M,,N-+"-B  U`aA Y*# M Y*# N*:b:$K6+:%:" 6,%W,B-EEU(bU(cRA*dRA$ * B @jhove/classes/edu/harvard/hul/ois/jhove/module/html/HtmlStack.class0000644000707400001440000000357111510702104024564 0ustar garyusers2d 7 8 9 : ; < = > ?@ A B CD CE FG H IJ IK FLMN headElement3Ledu/harvard/hul/ois/jhove/module/html/HtmlTagDesc; bodyElementframesetElementheadSeenZbodySeen()VCodesetHeadElement6(Ledu/harvard/hul/ois/jhove/module/html/HtmlTagDesc;)VsetBodyElementsetFramesetElementpopppush4(Ledu/harvard/hul/ois/jhove/module/html/JHOpenTag;)V StackMapTableOtop3()Ledu/harvard/hul/ois/jhove/module/html/JHOpenTag;search(Ljava/lang/String;)IP@popTo(I)V isHeadSeen()Z isBodySeen excludesTag(Ljava/lang/String;)ZQ    RS TU VW   XS/edu/harvard/hul/ois/jhove/module/html/JHOpenTag YZ [\P ]2 ^SO _5 `aQ b2 cS 45/edu/harvard/hul/ois/jhove/module/html/HtmlStackjava/util/LinkedList1edu/harvard/hul/ois/jhove/module/html/HtmlTagDescjava/util/ListIteratorjava/util/Iterator removeLast()Ljava/lang/Object;add(Ljava/lang/Object;)Z getElement5()Ledu/harvard/hul/ois/jhove/module/html/HtmlTagDesc;getLastsize()I listIterator(I)Ljava/util/ListIterator; hasPreviouspreviousmatchesiterator()Ljava/util/Iterator;hasNextnext! * !*+"!*+#!*+$*W%&D)*+W+M,* *,**' ( )** +,e>** M* d>, &, ::+'-%.(/06* d=>*W'  12*32*45F**M,, N-+' 6jhove/classes/edu/harvard/hul/ois/jhove/module/html/JHElement.class0000644000707400001440000000142111510702104024475 0ustar garyusers21     ! "#$ "%&'_columnI_line(Ljava/util/List;)VCode StackMapTable&(getLine()I getColumn getEntities$(Ljava/lang/String;)Ljava/util/List; )( *+  java/util/LinkedList&, -.; /0/edu/harvard/hul/ois/jhove/module/html/JHElementjava/lang/Objectjava/util/List()Vadd(Ljava/lang/Object;)Zjava/lang/StringindexOf(Ljava/lang/String;I)I substring(II)Ljava/lang/String;!  2*+ +*W**pJYM>+60+ 6+` :,W>, jhove/classes/edu/harvard/hul/ois/jhove/module/html/JHCloseTag.class0000644000707400001440000000072711510702104024615 0ustar garyusers2     _nameLjava/lang/String;'(Ljava/util/List;Ljava/lang/String;II)VCodegetName()Ljava/lang/String;     0edu/harvard/hul/ois/jhove/module/html/JHCloseTag/edu/harvard/hul/ois/jhove/module/html/JHElement(Ljava/util/List;)Vjava/lang/String toLowerCase_lineI_column!   %*+*,**  *jhove/classes/edu/harvard/hul/ois/jhove/module/html/JHErrorElement.class0000644000707400001440000000162311510702104025513 0ustar garyusers21      ! " # $%&_messageLjava/lang/String;_image _illFormedZ8(Ljava/util/List;Ljava/lang/String;Ljava/lang/String;Z)VCodegetImage()Ljava/lang/String; reportError&(Ledu/harvard/hul/ois/jhove/RepInfo;)V StackMapTable '   ( )*&edu/harvard/hul/ois/jhove/ErrorMessage + ,- ./ 0/4edu/harvard/hul/ois/jhove/module/html/JHErrorElement/edu/harvard/hul/ois/jhove/module/html/JHElement(Ljava/util/List;)V!edu/harvard/hul/ois/jhove/RepInfo getWellFormed()I'(Ljava/lang/String;Ljava/lang/String;)V setMessage&(Ledu/harvard/hul/ois/jhove/Message;)V setWellFormed(Z)VsetValid!  "*+*,*-**N7+ *+Y*** + + !jhove/classes/edu/harvard/hul/ois/jhove/module/html/JHPCData.class0000644000707400001440000000520511510702104024204 0ustar garyusers2 ,; +< += +> ?@ ABC #D EFG EHI EJKL MNO PQ R ST AU SV WX WYZ[\ P] ^_ ` Ea +b Ecd Ee #f #g #h ij klmno_textLjava/lang/String;'(Ljava/util/List;Ljava/lang/String;II)VCode processPCDatah(Ledu/harvard/hul/ois/jhove/module/html/HtmlStack;Ledu/harvard/hul/ois/jhove/module/html/HtmlMetadata;)V StackMapTablepdqrsm /t -. uv wvx yzp {|title }~ cite dfn abbrjava/util/ArrayList /"edu/harvard/hul/ois/jhove/PropertyText /q ~ r [Ljava/lang/String;TitleAbbr  / java/lang/String  s java/lang/Exception.edu/harvard/hul/ois/jhove/module/html/JHPCData/edu/harvard/hul/ois/jhove/module/html/JHElement/edu/harvard/hul/ois/jhove/module/html/JHOpenTagjava/util/Listjava/util/Iterator)edu/harvard/hul/ois/jhove/Utf8BlockMarker(Ljava/util/List;)V_lineI_column/edu/harvard/hul/ois/jhove/module/html/HtmlStacktop3()Ledu/harvard/hul/ois/jhove/module/html/JHOpenTag;getName()Ljava/lang/String;equals(Ljava/lang/Object;)Z2edu/harvard/hul/ois/jhove/module/html/HtmlMetadatasetTitle(Ljava/lang/String;)V addCitationaddDef(I)V&edu/harvard/hul/ois/jhove/PropertyTypeSTRING(Ledu/harvard/hul/ois/jhove/PropertyType;O(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ljava/lang/Object;)Vadd getAttributes()Ljava/util/List;iterator()Ljava/util/Iterator;hasNext()Znext()Ljava/lang/Object;PROPERTY'edu/harvard/hul/ois/jhove/PropertyArityLIST)Ledu/harvard/hul/ois/jhove/PropertyArity;x(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ledu/harvard/hul/ois/jhove/PropertyArity;Ljava/lang/Object;)VaddAbbr'(Ledu/harvard/hul/ois/jhove/Property;)V getEntities$(Ljava/lang/String;)Ljava/util/List;getUtf8BlockMarker-()Ledu/harvard/hul/ois/jhove/Utf8BlockMarker; addEntitycharAt(I)Clength()I substring(II)Ljava/lang/String;java/lang/IntegerparseInt(Ljava/lang/String;)I markBlock!+,-./01"*+*,**231 ?+N-:,*  ,*  ,* Y:Y*W-:D:2:2: Y W,Y **!:,":A#:,$%#&d'(6):69*44 56678G89?6B:jhove/classes/edu/harvard/hul/ois/jhove/module/html/Html4DocDesc.class0000644000707400001440000001507411510702104025110 0ustar garyusers2`               F         !"#$ %&'() *+, -./0123456789:;<=>?@ABCDEF GHIJKL fontMarkup[Ljava/lang/String; phraseMarkup specialMarkup formMarkup listMarkup blockContentLjava/util/List; flowContent inlineContent listContent bodyContent coreAttrs i18nAttrs eventAttrsbigAttrs biggerAttrs reservedAttrs halignAtt9Ledu/harvard/hul/ois/jhove/module/html/HtmlAttributeDesc; valignAttthtdAtts()VCode classInit4(Ljava/util/Map;)VaddAddressElement addBdoElementaddBodyElement addColElement"(Ljava/util/Map;Ljava/util/List;)VaddColgroupElement addDdElement addDelElement addDtElementaddFieldsetElement addInsElementaddLabelElement addMapElementaddMetaElementaddOptgroupElementaddOptionElementaddParamElement addQElementaddSelectElementaddSpanElementaddStyleElement addSubElement addSupElementaddTextareaElementaddTbodyElement addTdElementaddTfootElement addThElementaddTheadElementaddTitleElement java/lang/Stringemstrongdfncodesampkbdvarciteabbracronym inputselecttextarealabelbutton java/util/ArrayList M id NOclassstyletitle lang7edu/harvard/hul/ois/jhove/module/html/HtmlAttributeDescltrrtl PQ RS onclick ondblclick onmousedown onmouseup onmouseover onmousemove onmouseout onkeypress onkeydownonkeyup 8T UV datasrcdatafld dataformatas alignleftcenterrightjustifychar valigntopmiddlebottombaseline address p1edu/harvard/hul/ois/jhove/module/html/HtmlTagDesc WX YZbdodirbodyonloadonunload colspanwidthcolgroupdd datetimedeldtfieldset[ \]legendinsfor accesskeyonfocusonblurname areamap http-equivcontent ^Ometaselected _Ooptiondisabledvalue valuetypedatarefobjecttypeparamqsizemultipletabindexonchangeoptgroupmediasubsuprowscolsreadonlyonselecttrtbodytd tfootththead2edu/harvard/hul/ois/jhove/module/html/Html4DocDesc1edu/harvard/hul/ois/jhove/module/html/HtmlDocDesc(I)VaddSimpleAttribute%(Ljava/util/List;Ljava/lang/String;)V)(Ljava/lang/String;[Ljava/lang/String;I)Vjava/util/Listadd(Ljava/lang/Object;)Z()IaddAll(Ljava/util/Collection;)Z7(Ljava/lang/String;ZZLjava/util/List;Ljava/util/List;)V java/util/Mapput8(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;6edu/harvard/hul/ois/jhove/module/html/HtmlSpecialTokenPCDATA8Ledu/harvard/hul/ois/jhove/module/html/HtmlSpecialToken;addRequiredAttributeaddSelfAttribute! *   YSYSYSYSYSYSY SY SY SY  S YSYSYSYSYSYYYYSY S!"WY ##$#%#&#'#(#)#*#+#,#-Y..`#.`//0W/0W/#0WY1121314Y/.`55/0W510WY6Y7SY8SY9SY:SY;S!<Y=Y>SY?SY@SYAS!B E9CLY$M,D0W,E"WFY+,/GN*+-HW i]ILY.`M,0W,,YJYSY S!"WFY+D,GN*+-HW PDKLY/.`M,/0W,L,MFY+N,GN*+-HW YMOMY/.`N-/0W-+0W-P-QFY,-G:*,HW qeRMYN-O"WY/.`:/0W+0WPQFY,-G:*,HW *SLFY+T/GM*+,HW OCY/.`M,/0W, ,UFYVT,GN*V-HW *WLFY+D/GM*+,HW WKXLYT.`M,T0W,Y"W,Z"WFY+,/GN*+-HW OCY/.`M,/0W, ,UFY[T,GN*[-HW [OY/.`M,/0W,\,],^,_FYD,GN*-HW eYY/.`M,/0W,`YN-a0W-b"WFYc-,G:*cHW @4YM,d,`,efFYg,GN*g-HW aUY/.`M,/0W,hi,YN-j"WFYj-,G:*jHW nbY/.`M,/0W,hi,ki,,lYN-Y"WFYj-,G:*jHW dXYM,`f,l,YmYnSYoSYpS!"W,qFYr,GN*r-HW I=Y/.`M,/0W, FYsD,GN*s-HW Y5. `M,50W,`,t,ui,ki,v,^,_,wYN-j"W-x"WFY-,G:*HW )FYPD5GM*P,HW `TYM,Y"WYN-0W-q-y-FY,-G:*HW )FYzD/GM*z,HW )FY{D/GM*{,HW Y5. `M,`,|,},ki,~i,v,],^,_,,wYN-Y"WFY-,G:*HW bVYN-"WY/.`:/0W+0WFY-G:*HW )FYTGM*,HW bVYN-"WY/.`:/0W+0WFY-G:*HW )FYTGM*,HW bVYN-"WY/.`:/0W+0WFY-G:*HW ;/LYM,Y"WFY+,GN*+-HWjhove/classes/edu/harvard/hul/ois/jhove/module/html/Html4StrictDocDesc.class0000644000707400001440000001553411510702104026302 0ustar garyusers2         6           S    !"#$%&'()*+,-./012345 6789:;<=>?@ABCDEFGHIJKLMNOPQRST 6UVWX Y 6Z[\()VCode classInit4(Ljava/util/Map;)V StackMapTable]^ addAElementaddAddressElementaddAreaElementK(Ljava/util/Map;Ledu/harvard/hul/ois/jhove/module/html/HtmlAttributeDesc;)VaddBaseElementaddBlockquoteElement addBrElement"(Ljava/util/Map;Ljava/util/List;)VaddButtonElementaddCaptionElement[(Ljava/util/Map;Ljava/util/List;Ledu/harvard/hul/ois/jhove/module/html/HtmlAttributeDesc;)V addDivElement addDlElementaddHeadElementaddLegendElement addLiElementaddLinkElementaddNoscriptElementaddObjectElement addOlElement addPElement addPreElementaddScriptElementaddTableElement addTrElement addUlElement java/lang/Stringttibbigsmall _^ulol `^aimgobjectbrscriptmapqsubsupspanbdo a^java/util/ArrayList b cd ef g^ h^i jk lm nd o^ppredldivnoscript blockquoteformhrtablefieldsetaddress pd qr st udinsdel vdli1edu/harvard/hul/ois/jhove/module/html/HtmlTagDesc wd x] yz {dabbr |}axisheadersscope ~ rowspancolspantypenamehrefhreflangrelrev accesskeyshaperectcoordstabindexonfocusonblur marea7edu/harvard/hul/ois/jhove/module/html/HtmlAttributeDescnohref altbase }citebutton dvaluesubmitresetdisabled }captiondtddheadstylemetalinktitlelabelcharsetmediadeclareclassidcodebasedatacodetypearchivestandbyheightwidthusemap srcdefereventforsummaryborderframevoidabovebelowhsideslhsrhsvsidesboxrulesnonegroupsrowscolsall cellspacing cellpadding datapagesizejava/util/Listcolcolgrouptheadtfoottbody thtdtr  8edu/harvard/hul/ois/jhove/module/html/Html4StrictDocDesc2edu/harvard/hul/ois/jhove/module/html/Html4DocDesc java/util/Map[Ljava/lang/String; fontMarkup listMarkup specialMarkup(I)V inlineContentLjava/util/List;addStringsToList&([Ljava/lang/String;Ljava/util/List;)V phraseMarkup formMarkup6edu/harvard/hul/ois/jhove/module/html/HtmlSpecialTokenPCDATA8Ledu/harvard/hul/ois/jhove/module/html/HtmlSpecialToken;add(Ljava/lang/Object;)Z blockContentheadings flowContentaddAll(Ljava/util/Collection;)Zsize()I bodyContent listContentbigAttrs7(Ljava/lang/String;ZZLjava/util/List;Ljava/util/List;)Vput8(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;thtdAttsaddSimpleAttribute%(Ljava/util/List;Ljava/lang/String;)V halignAtt9Ledu/harvard/hul/ois/jhove/module/html/HtmlAttributeDesc; valignAttremove)(Ljava/lang/String;[Ljava/lang/String;I)VaddRequiredAttribute biggerAttrsaddSelfAttributeremoveStringsFromList&(Ljava/util/List;[Ljava/lang/String;)V:(Ljava/lang/String;ZZ[I[Ljava/util/List;Ljava/util/List;)Vget&(Ljava/lang/Object;)Ljava/lang/Object;addImplicitContainer6(Ledu/harvard/hul/ois/jhove/module/html/HtmlTagDesc;)V!* g*YSYSYSYSYS Y SY S  Y SYSYSYSYSYSYSYSYSY SY SY#  WY!"! ! Y#SY$SY%SY&SY'SY(SY)SY*SY+SY ,SY -SN-!Y..!/W./WY!0`11!/W1 W12 W13 WY445 W6 * 2L6Y+78M*+,9W6*2L6Y+78M*+,9WӻY70`::7/W:;<:=<:><:?<:@ W:A W:B<:C<//  LY70`M,7/W,D<,E<,F<,G<,H<,I<,J<,K<,L<,M<,N<,O<,P<Y0N-/W- QW6Y+-,8:*+9W *-L6Y+78M*+,9W }RMYN-+ W-M<-F<-SYTYTSU W-SYVU W-N<-J<-O<-P<6Y,-8:*,9W 5)WLYM,FX6Y+,8N*+-9W oc(LY!0`M,!/W, WY70`N-7/W-Y<6Y+,-8:*+9W &M6Y,+8N*,-9W ZLY`M,,) W,, WY[0`N-[/W-E<-\<-SYDYZSY]SY^SU W-_`-N<-J<-O<-P< *aN6Y-+78:*-9W *&L6Y+.78M*+,9W C7%LYMYbSYcS,6Y+,78N*+-9W dLYSYeSYfSYgSMYN-h W-W W- W-e W-f W-g W- W6Y+-8:*+9W,- I=Y70`M,7/W,J<6Yi,8N*i-9W )6Y5.78M*5,9W l`Y70`M,7/W,j<,F<,G<,D<,H<,I<,k<6Yg,8N*g-9W )6Y'!78M*',9W xlY[0 `M,[/W,l`,m<,n<,o<,D<,p<,q<,r<,s<,t<,u<,E<,N< )6Y 478M* ,9W )6Y#78M*#,9W h\Y0M,/W,YSYSYSYSYSYSv6Y$,78N*$-9W h\YM, WYN-j<-D<-w<-x`-y<-z<6Y,-8:*9W }Y[0`M,[/W,{<,t<,|<,SY} Y~SYSYSYSYSYSYSYSY|SU W,SYYSYSYSYSYSU W,<,<,<,<N YOYOYOYOYO:Y:a W-SY: W W-SY: W-SY: W-SY: W-S6Y+-,:*+9W vY70`M,7/W,@ W,A WYN- W- W6Y-,8:*6*9W )6Y 478M* ,9Wjhove/classes/edu/harvard/hul/ois/jhove/module/html/Html4TFDocDesc.class0000644000707400001440000002321611510702104025337 0ustar garyusers2          !"#$%&' () "* + , - . /0 1 2 3456789:;<=>? @ A B CDE FG H IJ KLMN O PQ RSTUVWXYZ[\]^_`abcde fg _h ijklmno pqrstu kvwxyz{|}~     _ i _()VCode classInit4(Ljava/util/Map;)V addAElementaddAppletElementK(Ljava/util/Map;Ledu/harvard/hul/ois/jhove/module/html/HtmlAttributeDesc;)VaddAreaElementaddBaseElementaddBasefontElementaddBlockquoteElement addBrElement"(Ljava/util/Map;Ljava/util/List;)VaddButtonElementaddCaptionElement[(Ljava/util/Map;Ljava/util/List;Ledu/harvard/hul/ois/jhove/module/html/HtmlAttributeDesc;)VaddCenterElement addDirElement addDivElement addDlElementaddFontElementaddFrameElementaddFramesetElementaddHeadElement addHrElementaddInputElementaddLegendElement addLiElementaddLinkElementaddMenuElementaddNoframesElement(Ljava/util/Map;I)V StackMapTableaddNoscriptElementaddObjectElement addOlElement addPElement addPreElementaddScriptElementaddTableElement addTrElement addUlElement java/lang/Stringttibusstrikebigsmall uloldirmenu aimgappletobjectfontbasefontbrscriptmapqsubsupspanbdoiframe java/util/ArrayList         ppredldivcenternoscript blockquoteformhrtablefieldsetaddress   y insdel li  abbr axisheadersscope  nowrap rowspancolspanbgcolorwidthheighttypenamehrefhreflangtargetrelrev accesskeyshaperectcoordstabindexonfocusonblur 1edu/harvard/hul/ois/jhove/module/html/HtmlTagDesc   paramcodebasearchivecodealt  hspacevspacearea7edu/harvard/hul/ois/jhove/module/html/HtmlAttributeDescnohref  baseidsizecolorfaceciteclearleftallrightnonebuttonisindex  valuesubmitresetdisabledcaptionaligntopbottomcompactjustifydtdd  framelongdescsrc marginwidth marginheightnoresize scrollingyesnoautoframesetnoframes rowscolsonloadonunloadheadstylemetalinktitlenoshadetextpasswordcheckboxradiofilehiddenimagecheckedreadonly maxlengthusemaponselectonchangeacceptmiddleinputlabelcharsetmediabodydeclareclassiddatacodetypestandbyborderstart languagedefereventforsummaryvoidabovebelowhsideslhsrhsvsidesboxrulesgroups cellspacing cellpadding datapagesizejava/util/Listcolcolgrouptheadtfoottbody thtdtr  4edu/harvard/hul/ois/jhove/module/html/Html4TFDocDesc2edu/harvard/hul/ois/jhove/module/html/Html4DocDesc fontMarkup[Ljava/lang/String; listMarkup specialMarkup(I)V inlineContentLjava/util/List;addStringsToList&([Ljava/lang/String;Ljava/util/List;)V phraseMarkup formMarkup6edu/harvard/hul/ois/jhove/module/html/HtmlSpecialTokenPCDATA8Ledu/harvard/hul/ois/jhove/module/html/HtmlSpecialToken;add(Ljava/lang/Object;)Z blockContentheadings flowContentaddAll(Ljava/util/Collection;)Z()I bodyContent listContentbigAttrsthtdAttsaddSimpleAttribute%(Ljava/util/List;Ljava/lang/String;)V halignAtt9Ledu/harvard/hul/ois/jhove/module/html/HtmlAttributeDesc; valignAttaddSelfAttributeremove7(Ljava/lang/String;ZZLjava/util/List;Ljava/util/List;)V java/util/Mapput8(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;addRequiredAttribute)(Ljava/lang/String;[Ljava/lang/String;I)V biggerAttrs i18nAttrs coreAttrsremoveStringsFromList&(Ljava/util/List;[Ljava/lang/String;)V:(Ljava/lang/String;ZZ[I[Ljava/util/List;Ljava/util/List;)Vget&(Ljava/lang/Object;)Ljava/lang/Object;addImplicitContainer6(Ledu/harvard/hul/ois/jhove/module/html/HtmlTagDesc;)V!#* \P*YSYSYSYSYSY SY SY S Y SYSYSYSYSYSYSYSYSYSYSYSYSY SY SY SY SY SY S!"Y##$ $%&$%!$%'$%$()W"Y#*+*%*% Y,SY-SY.SY/SY0SY1SY2SY3SY4SY 5SY 6SY 7SN-*%"Y#88*9W8$9W"Y8:`#;;89W;<)W;=)W"Y#>>?)W"Y@:`#AA@9WABCADCAECAFCAG)WAH)WAIJAKCALCAMCANCAOC L"Y@:`#M,@9W,PC,QC,RC,SC,TC,UC,VC,WC,XC,YC,ZC,[C,\C,]C"Y$:#N-$9W-^W_Y+-,`:*+aW M"Y8:#N-89W-b)W"Y #:cCdCeCCfCfCQCNgOg+)WhCiC_Y,-`:*,aW jM"Y #N-+)W-ZC-RC-TC-kYlYlSm)W-kYfm)W-[C-WC-\C-]C_Y,-`:*,aW ;/nL"Y#M,RC,TC_Y+,`N*+-aW G;L"Y#M,oC,pC,qC,rC_Y+,`N*+-aW qe2L"Y*:`#M,*9W,)W"Y@:`#N-@9W-sC_Y+8-`:*+aW i]M"Y+:`#N-+9W-kYtYuSYvSYwSYxSm)W_Y,-`:*,aW yL"Y'`#M',%,3)W,z)W,6)W, )W"Y{:`#N-{9W-QC-|C-kYPYySY}SY~Sm)W-J-[C-WC-\C-]C fZN"Y@:`#:kYYSYSYuSYwSm)W_Y-+`:*-aW *0L_Y+8@`M*+,aW 7+L"Y#M,J_Y+>,`N*+-aW ma/L"Y@:`#M,@9W,kYYuSY0SYwSYSm)W_Y+8,`N*+-aW [O.L"Y#MYSYS,%"Y@:`#N-J_Y+,-`:*+aW aUL"Y@: `#M,@9W,9W,pC,qC,rC_Y+$,`N*+-aW L"Y@:`#M,@9W,C,QC,C,C,C,J,kYYSYSYSm)W_Y+,`N*+-aW |pL"Y#MYSYSYS,%"Y:`#N-9W-C-C-C-C_Y+,-`:*+aW LYSYSYSYSM"Y#N-)W-z)W-n)W-)W-)W-)W-)W-)W_Y+-`:*+aW,-% nb4L"Y@:`#M,kYYuSY0SYwSm)W,J,pC,NC_Y+,`N*+-aW ""Y{:`#M,{9W,kYP YSYSYSYSY}SY~SYSYSYSY ySm)W,QC,|C,J,J,J,pC,C,C,fC,C,[C,WC,\C,]C,C,C,C,kYYSYSYSYuSYwSm)W_Y,`N*-aW rf"Y@:`#M,@9W,WC,kYYSYuSYSYwSm)W_Y$,`N*-aW OC"Y@:`#M,@9W,PC,|C_Y?8,`N*?-aW rf"Y@:`#M,@9W,C,RC,SC,PC,UC,VC,C,TC_Y,`N*-aW 6*"Y#M,J_Y>,`N*-aW ^A"Y#N-)W8N_Y-@`:*aW   )_Y18@`M*1,aW "Y{: `#M,{9W,J,C,cC,C,PC,C,dC,C,OC,NC,C,QC,[C,C,C,hC,iC UI"Y@:`#M,@9W,PC,J,C_Y>,`N*-aW l`"Y@:`#M,@9W,kYYuSY0SYwSYSm)W_Y,$,`N*,-aW ~"Y$:#M,$9W,YSYSY SY SYSYS"Y@:`#N-@9W-NC_Y-,-`:*-aW nb"Y#M,()W"Y#N-C-PC-C-C-J-C-C_Y,-`:*aW "Y{: `#M,{9W,C,NC,C,kY YSYSYSYSYSYSYSYSYSm)W,kYYxSYSYSYSYvSm)W,ɸC,˸C,̸C,kYYuSY0SYwSm)W,MC,͸CN YOYOYOYOYO:"Y#:)W-S"Y#:Ϲ)Wй)W-S"Y#:ѹ)W-S"Y#:ҹ)W-S"Y#:ӹ)W-S_Y5-,:*5aW |"Y@:`#M,@9W,G)W,H)W,MC"Y#N-չ)W-ֹ)W_Y-,`:*ӹ_*aW OC"Y@:`#M,@9W,PC,J_Y >,`N* -aWjhove/classes/edu/harvard/hul/ois/jhove/module/html/Html4_01TFDocDesc.class0000644000707400001440000001155411510702104025641 0ustar garyusers2y       K          ()VCode classInit4(Ljava/util/Map;I)V StackMapTableaddFormElement(Ljava/util/Map;)V addImgElement 1edu/harvard/hul/ois/jhove/module/html/HtmlTagDesc  ! " #$ % & ' ( ) * + , -. / 0 1 2 37edu/harvard/hul/ois/jhove/module/html/HtmlAttributeDescshapejava/lang/Stringrectcirclepolydefault 4 56 7 8 9aligntopmiddlebottomleftright :6 ; < = > ? @ A B C D E F G H I J K L M N O P Q R S Tcenterjustifycharvalignbaselinejava/util/ArrayList U VW XYcharoff Z. [. \. ] ^ _ `a b. c. d e f g h i jhtmlheadframesetbody k l m n o pq rsactionmethodenctypeacceptnameonsubmitonresettargetaccept-charset t form uvimgsrc wYaltlongdescheightwidthusemapismap xYborderhspacevspace7edu/harvard/hul/ois/jhove/module/html/Html4_01TFDocDesc4edu/harvard/hul/ois/jhove/module/html/Html4TFDocDesc java/util/Mapjava/util/List fontMarkup[Ljava/lang/String; inlineContentLjava/util/List;bigAttrs7(Ljava/lang/String;ZZLjava/util/List;Ljava/util/List;)Vput8(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; phraseMarkup addSupElement addSubElementaddSpanElement addBdoElementaddBasefontElementaddFontElement coreAttrs addBrElement"(Ljava/util/Map;Ljava/util/List;)VaddAddressElement addDivElementaddCenterElement addAElement addMapElement)(Ljava/lang/String;[Ljava/lang/String;I)VaddAreaElementK(Ljava/util/Map;Ledu/harvard/hul/ois/jhove/module/html/HtmlAttributeDesc;)VaddLinkElementaddObjectElementaddParamElementaddAppletElement addHrElement addPElementheadings addPreElement addQElementaddBlockquoteElement addInsElement addDelElement addDlElement addDtElement addDdElement addOlElement addUlElement addDirElementaddMenuElement addLiElementaddLabelElementaddInputElementaddSelectElementaddOptgroupElementaddOptionElementaddTextareaElementaddFieldsetElementaddLegendElementaddButtonElementaddTableElement(I)Vadd(Ljava/lang/Object;)ZaddSimpleAttribute%(Ljava/util/List;Ljava/lang/String;)VaddTheadElementaddTfootElementaddTbodyElement addTrElement addThElement addTdElementaddCaptionElement[(Ljava/util/Map;Ljava/util/List;Ledu/harvard/hul/ois/jhove/module/html/HtmlAttributeDesc;)VaddColgroupElement addColElementaddHeadElementaddTitleElementaddBaseElementaddMetaElementaddScriptElementaddNoscriptElementaddStyleElement i18nAttrsaddNoframesElementaddFramesetElementaddFrameElementaddBodyElementsize()IaddAll(Ljava/util/Collection;)Z flowContentremoveStringsFromList&(Ljava/util/List;[Ljava/lang/String;)VaddRequiredAttributeaddSelfAttribute!* i *=+2NY-:*-W= + 2NY-:*-W* * * * ********YYSYSYSYS:** *!*"*#Y$Y%SY&SY'SY(SY)S:***+*,=-+-2NY-:*-W*.*/*0*1*2*3*4*5*6*7*8*9*:*;*<*=*>*?*@*A*B*C*D*EY$Y(SYFSY)SYGSYHS:YIY%SY&SY'SYJS:KYL:  Y$Y(SYFSY)SYGSYHSMW HN ON MW* P* Q* R*S*T*U*V* W* X*Y*Z*[*\*]*^*_`NKYL:  aMW bMW  cMWY- d:*-W*e *f*g*he ///v  -  KYi `LM,jW,kN,lN,mN,nN,oN,pN,qN,rN,sNKYtiLN-tjW-YuSvYu-,:*uW wLKYi `LM,jW,xy,zy,{N,oN,|N,}N,~N,,Y$Y%SY&SY'SY(SY)SMW,N,N,NY+,N*+-Wjhove/classes/edu/harvard/hul/ois/jhove/module/html/Html4_01StrictDocDesc.class0000644000707400001440000001205311510702104026573 0ustar garyusers2            ( B                          !"#$ % & ' ( ) * + , - . / 0 1 2 3 4567 89:stSupportedElementsLjava/util/Map;()VCodeaddFormElement(Ljava/util/Map;)V addHrElement addImgElementaddInputElement StackMapTable ; <java/util/ArrayList =>? @ A BCaction DEmethodenctypeacceptnameonsubmitonresetaccept-charset F>script GHjava/lang/Stringform IJ1edu/harvard/hul/ois/jhove/module/html/HtmlTagDesc KL MNhrimgsrc OEaltlongdescheightwidthusemapismap PE Q>7edu/harvard/hul/ois/jhove/module/html/HtmlAttributeDesctypetextpasswordcheckboxradiosubmitresetfilehiddenimagebutton Rvaluecheckeddisabledreadonlysize maxlengthtabindex accesskeyonfocusonbluronselectonchangeinputjava/util/HashMap S T U V W X> YZ [ \ ] ^ _shaperectcirclepolydefault `a b c d e fg h> i j k l m n o p q r s t u v w x y z { |alignleft|center|right|justify|charvaligntopmiddlebottombaselineleftcenterrightjustifycharcharoff }Z ~Z Z     Z Z       htmlheadbody >;edu/harvard/hul/ois/jhove/module/html/Html4_01StrictDocDesc8edu/harvard/hul/ois/jhove/module/html/Html4StrictDocDescsupportedElementsinitbigAttrsLjava/util/List;java/util/List()I(I)VaddAll(Ljava/util/Collection;)ZaddSimpleAttribute%(Ljava/util/List;Ljava/lang/String;)V blockContentadd(Ljava/lang/Object;)ZremoveStringsFromList&(Ljava/util/List;[Ljava/lang/String;)V7(Ljava/lang/String;ZZLjava/util/List;Ljava/util/List;)V java/util/Mapput8(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;addRequiredAttributeaddSelfAttribute biggerAttrs)(Ljava/lang/String;[Ljava/lang/String;I)V classInit4 addSupElement addSubElementaddSpanElement addBdoElement coreAttrs addBrElement"(Ljava/util/Map;Ljava/util/List;)VaddBodyElementaddAddressElement addDivElement addAElement addMapElementaddAreaElementK(Ljava/util/Map;Ledu/harvard/hul/ois/jhove/module/html/HtmlAttributeDesc;)VaddLinkElementaddObjectElementaddParamElement addPElementheadings[Ljava/lang/String; inlineContent addPreElement addQElementaddBlockquoteElement addInsElement addDelElement addDlElement addDtElement addDdElement addOlElement addUlElement addLiElementaddLabelElementaddSelectElementaddOptgroupElementaddOptionElementaddTextareaElementaddFieldsetElementaddLegendElementaddButtonElementaddTableElementaddTheadElementaddTfootElementaddTbodyElement addTrElement addThElement addTdElementaddCaptionElement[(Ljava/util/Map;Ljava/util/List;Ledu/harvard/hul/ois/jhove/module/html/HtmlAttributeDesc;)VaddColgroupElement addColElementaddHeadElementaddTitleElementaddBaseElementaddMetaElementaddScriptElementaddNoscriptElementaddStyleElement i18nAttrs! *** Y`M, W, , , , , , , , YN- W-W-YSY-,:*W (LY+M*+,W sgLY `M, W,, ,! , ," ,# ,$ ,%&Y+,N*+-W Y'`M,' W,(Y) Y*SY+SY,SY-SY.SY/SY0SY1SY2SY 3S4W, ,5 ,6&,7&,8&,9 ,: , , ,$ ,%&,; ,< ,= ,> ,? ,@ , YA,N*A-WBYCDEFGHIJKLMNO(YPYQSYRSYSSYTS4N-UVWXYZ[;\+\2LY+]M+,WӲ^_`abcdefghijklmnopqrs(YtYuS4:(YvYwSYxSYySYzS4:Y:(YtY{SY|SY}SY~SYS4W  ]LY:WWY+M+,W/jhove/classes/edu/harvard/hul/ois/jhove/module/html/Html4_01TransDocDesc.class0000644000707400001440000000066211510702104026415 0ustar garyusers2      stSupportedElementsLjava/util/Map;()VCode java/util/HashMap     :edu/harvard/hul/ois/jhove/module/html/Html4_01TransDocDesc7edu/harvard/hul/ois/jhove/module/html/Html4_01TFDocDesc(I)V classInit4(Ljava/util/Map;I)VsupportedElementsinit!   1%*Y**jhove/classes/edu/harvard/hul/ois/jhove/module/html/Html4_0TFDocDesc.class0000644000707400001440000001147011510702104025555 0ustar garyusers2t       J           ()VCode classInit4(Ljava/util/Map;I)V StackMapTableaddFormElement(Ljava/util/Map;)V addImgElement 1edu/harvard/hul/ois/jhove/module/html/HtmlTagDesc     ! " # $ % & ' ( )* + , - . /7edu/harvard/hul/ois/jhove/module/html/HtmlAttributeDescshapejava/lang/Stringrectcirclepolydefault 0 12 3 4 5aligntopmiddlebottomleftright 62 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N Ocenterjustifycharvalignbaselinejava/util/ArrayList P QR STcharoff U* V* W* X Y Z [\ ]* ^* _ ` a b c d ehtmlheadframesetbody f g h i j kl mnactionmethodenctypeonsubmitonresettargetaccept-charset oscriptform pqimgsrc rTaltlongdescheightwidthusemapismap sTborderhspacevspace6edu/harvard/hul/ois/jhove/module/html/Html4_0TFDocDesc4edu/harvard/hul/ois/jhove/module/html/Html4TFDocDesc java/util/Mapjava/util/List fontMarkup[Ljava/lang/String; inlineContentLjava/util/List;bigAttrs7(Ljava/lang/String;ZZLjava/util/List;Ljava/util/List;)Vput8(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; phraseMarkup addSupElement addSubElementaddSpanElement addBdoElementaddBasefontElementaddFontElement coreAttrs addBrElement"(Ljava/util/Map;Ljava/util/List;)VaddAddressElement addDivElementaddCenterElement addAElement addMapElement)(Ljava/lang/String;[Ljava/lang/String;I)VaddAreaElementK(Ljava/util/Map;Ledu/harvard/hul/ois/jhove/module/html/HtmlAttributeDesc;)VaddLinkElementaddObjectElementaddParamElementaddAppletElement addHrElement addPElementheadings addPreElement addQElementaddBlockquoteElement addInsElement addDelElement addDlElement addDtElement addDdElement addOlElement addUlElement addDirElement addLiElementaddLabelElementaddInputElementaddSelectElementaddOptgroupElementaddOptionElementaddTextareaElementaddFieldsetElementaddLegendElementaddButtonElementaddTableElement(I)Vadd(Ljava/lang/Object;)ZaddSimpleAttribute%(Ljava/util/List;Ljava/lang/String;)VaddTheadElementaddTfootElementaddTbodyElement addTrElement addThElement addTdElementaddCaptionElement[(Ljava/util/Map;Ljava/util/List;Ledu/harvard/hul/ois/jhove/module/html/HtmlAttributeDesc;)VaddColgroupElement addColElementaddHeadElementaddTitleElementaddBaseElementaddMetaElementaddScriptElementaddNoscriptElementaddStyleElement i18nAttrsaddNoframesElementaddFramesetElementaddFrameElementaddBodyElementsize()IaddAll(Ljava/util/Collection;)Z blockContentremoveStringsFromList&(Ljava/util/List;[Ljava/lang/String;)VaddRequiredAttributeaddSelfAttribute!* c *=+2NY-:*-W= + 2NY-:*-W* * * * ********YYSYSYSYS:** *!*"*#Y$Y%SY&SY'SY(SY)S:***+*,=-+-2NY-:*-W*.*/*0*1*2*3*4*5*6*7*8*9*:*;*<*=*>*?*@*A*B*C*DY$Y(SYESY)SYFSYGS:YHY%SY&SY'SYIS:JYK:  Y$Y(SYESY)SYFSYGSLW GM NM LW* O* P* Q*R*S*T*U* V* W*X*Y*Z*[*\*]*^_NJYK:  `LW aLW  bLWY- c:*-W*d *e*f*ge ///q  ,  JYh `KM,iW,jM,kM,lM,mM,nM,oM,pMJYqhKN-qiW-rLW-YsStYs-,:*sW uLJYh `KM,iW,vw,xw,yM,zM,{M,|M,}~,Y$Y%SY&SY'SY(SY)SLW,M,M,MY+,N*+-Wjhove/classes/edu/harvard/hul/ois/jhove/module/html/Html4_0StrictDocDesc.class0000644000707400001440000001201711510702104026512 0ustar garyusers2             ( D                            ! " # $ % & ' ( ) * + ,-./ 012stSupportedElementsLjava/util/Map;()VCodeaddFormElement(Ljava/util/Map;)V addHrElement addImgElementaddInputElement StackMapTable 3 4java/util/ArrayList 567 8 9 :;action <=methodenctypeonsubmitonresetaccept-charset >6script ?@java/lang/Stringform AB1edu/harvard/hul/ois/jhove/module/html/HtmlTagDesc CD EFhr G6 H6imgsrc I=altlongdescheightwidthusemapismap J= K67edu/harvard/hul/ois/jhove/module/html/HtmlAttributeDesctypetextpasswordcheckboxradiosubmitresetfilehiddenimagebutton Lnamevaluecheckeddisabledreadonlysize maxlengthtabindex accesskeyonfocusonbluronselectonchangeacceptinputjava/util/HashMap M N O P Q RS T U V W Xshaperectcirclepolydefault YZ [ \ ] ^ _` a6 b c d e f g h i j k l m n o p q r s t ualignleftcenterrightjustifycharcharoff vS wS xS y z { |} ~ S S       htmlheadbody 6:edu/harvard/hul/ois/jhove/module/html/Html4_0StrictDocDesc8edu/harvard/hul/ois/jhove/module/html/Html4StrictDocDescsupportedElementsinitbigAttrsLjava/util/List;java/util/List()I(I)VaddAll(Ljava/util/Collection;)ZaddSimpleAttribute%(Ljava/util/List;Ljava/lang/String;)V blockContentadd(Ljava/lang/Object;)ZremoveStringsFromList&(Ljava/util/List;[Ljava/lang/String;)V7(Ljava/lang/String;ZZLjava/util/List;Ljava/util/List;)V java/util/Mapput8(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; coreAttrs eventAttrsaddRequiredAttributeaddSelfAttribute biggerAttrs)(Ljava/lang/String;[Ljava/lang/String;I)V classInit4 addSupElement addSubElementaddSpanElement addBdoElement addBrElement"(Ljava/util/Map;Ljava/util/List;)VaddBodyElementaddAddressElement addDivElement addAElement addMapElementaddAreaElementK(Ljava/util/Map;Ledu/harvard/hul/ois/jhove/module/html/HtmlAttributeDesc;)VaddLinkElementaddObjectElementaddParamElement addPElementheadings[Ljava/lang/String; inlineContent addPreElement addQElementaddBlockquoteElement addInsElement addDelElement addDlElement addDtElement addDdElement addOlElement addUlElement addLiElementaddLabelElementaddSelectElementaddOptgroupElementaddOptionElementaddTextareaElementaddFieldsetElementaddLegendElementaddButtonElementaddTableElementaddTheadElementaddTfootElementaddTbodyElement addTrElement addThElement addTdElement valignAtt9Ledu/harvard/hul/ois/jhove/module/html/HtmlAttributeDesc;addCaptionElement[(Ljava/util/Map;Ljava/util/List;Ledu/harvard/hul/ois/jhove/module/html/HtmlAttributeDesc;)VaddColgroupElement addColElementaddHeadElementaddTitleElementaddBaseElementaddMetaElementaddScriptElementaddNoscriptElementaddStyleElement i18nAttrs! *** Y`M, W, , , , , , YN- W-W-YSY-,:*W SGLY`M, W, WY+,N*+-W maLY `M, W,, ,! ," ,# ,$ ,%&Y+,N*+-W Y'`M,' W,(Y) Y*SY+SY,SY-SY.SY/SY0SY1SY2SY 3S4W,5 ,6 ,7&,8&,9&,: ,; , , ,$ ,< ,= ,> ,? ,@ ,A ,B YC,N*C-WlJDYEFGHIJKLMNOP(YQYRSYSSYTSYUS4N-VWXYZ[\;]+]2LY+^M+,WӲ_`abcdefghijklmnopqrstY:(YuYvSYwSYxSYySYzS4Wz { |}~^LY:WWY+M+,W/jhove/classes/edu/harvard/hul/ois/jhove/module/html/JHComment.class0000644000707400001440000000037211510702104024512 0ustar garyusers2  %(Ljava/util/List;Ljava/lang/String;)VCode  /edu/harvard/hul/ois/jhove/module/html/JHComment/edu/harvard/hul/ois/jhove/module/html/JHElement(Ljava/util/List;)V!*+jhove/classes/edu/harvard/hul/ois/jhove/module/html/Html4_0TransDocDesc.class0000644000707400001440000000065711510702104026340 0ustar garyusers2      stSupportedElementsLjava/util/Map;()VCode java/util/HashMap     9edu/harvard/hul/ois/jhove/module/html/Html4_0TransDocDesc6edu/harvard/hul/ois/jhove/module/html/Html4_0TFDocDesc(I)V classInit4(Ljava/util/Map;I)VsupportedElementsinit!   0$*Y**jhove/classes/edu/harvard/hul/ois/jhove/module/html/HtmlCharStream.class0000644000707400001440000001200311510702104025536 0ustar garyusers2 4 4 4 4 4 4 4 4 4 4   4 4 4 4 4 4 4 4 4 4 4  4 5 4 4 & 4 & 4 + - - - staticFlagZ ConstantValuebufsizeI available tokenBeginbufposbufline[I bufcolumncolumnline prevCharIsCR prevCharIsLF _lineEndCR _lineEndLF _lineEndCRLF inputStreamLjava/io/Reader;buffer[CmaxNextCharIndinBuf ExpandBuff(Z)VCode StackMapTableMAFillBuff()V Exceptions BeginToken()CUpdateLineColumn(C)VreadChar getColumn()I DeprecatedgetLine getEndColumn getEndLinegetBeginColumn getBeginLinebackup(I)V(Ljava/io/Reader;III)V(Ljava/io/Reader;II)V(Ljava/io/Reader;)VReInit-(Ljava/io/InputStream;IIILjava/lang/String;)V,(Ljava/io/InputStream;IILjava/lang/String;)V*(Ljava/io/InputStream;Ljava/lang/String;)V(Ljava/io/InputStream;III)V(Ljava/io/InputStream;)V(Ljava/io/InputStream;II)VGetImage()Ljava/lang/String; GetSuffix(I)[CDoneadjustBeginLineColumn(II)VgetKindOfLineEnd ;< LM >< ?< @A BA N<java/lang/Throwablejava/lang/Error z m =< PQ JK Xjava/io/IOException mX kl a^ C< F8 H8 D< E8 I8 G8 O< WXIllegal character read _`(java/lang/ArrayIndexOutOfBoundsException mn qnjava/io/InputStreamReader mu mr mw qvjava/lang/String mjava/lang/StringBuilder zCRLFCRLF4edu/harvard/hul/ois/jhove/module/html/HtmlCharStreamjava/lang/Object0edu/harvard/hul/ois/jhove/module/html/CharStream$java/io/UnsupportedEncodingExceptionjava/lang/System arraycopy*(Ljava/lang/Object;ILjava/lang/Object;II)V getMessage(Ljava/lang/String;)Vjava/io/Readerread([CII)Iclose([CII)Vappend-(Ljava/lang/String;)Ljava/lang/StringBuilder;toString!456789:;<=<><?<@ABAC<D<E8F8G8H8I8JKLMN<O<PQRg*`M*` N*` :**,**d*,**d**,**-**d*-**d**-****d***d****Y**d`Zh**,**d*,**-**d*-****d***Y*dZ: Y *Y`** *";> STUUdBVWXR** ~* *>***Z** T***Z@*8* *** "** d * ** **** *dY<*Y*Y`M*Yd** **,S 5, YZ[\]^R **<**\_`R*Y`****Y*Z`?*8 *** **Y*Z`* " * ****O***OS -a^Rm*.*Yd*Y`Z****4*Y`Z****4< Y *!S ( \bcR **.decR **.dfcR **.gcR **.hcR- **.L "SJijcR- **.L "SJiklR;&*Y`*YdZ*Y*`S%mnRh\*#********+**d**Z ** * moR *+$mpR *+$qnRzd*+**d* *&**Z ** * **Z***ZZ*S""qoR *+%qpR *+%mrR *&Y+'$\smtR *+(\smuR *+,(\sqvR*&Y+)%qwR *+*qxR *+*yzRva**+Y****d`,-Y.+Y****d,/+Y**`,/0S&{|RuZM*`**d`,8***ddd,*dd*,*dd*`,S #T4}XR***~RP *>****d*``6**d*``*`666666 V**pY6.**pY6.4*O *.`*.d6* `O6 [*O* `O;**pY6.**p.*O*O**.**.S#% YY6 zRM5** *!*1*2*3S jhove/classes/edu/harvard/hul/ois/jhove/module/html/HtmlSpecialToken.class0000644000707400001440000000065111510702104026074 0ustar garyusers2    _nameLjava/lang/String;PCDATA8Ledu/harvard/hul/ois/jhove/module/html/HtmlSpecialToken;()VCode(Ljava/lang/String;)V  6edu/harvard/hul/ois/jhove/module/html/HtmlSpecialToken  java/lang/Object!  *  **+  Yjhove/classes/edu/harvard/hul/ois/jhove/module/html/HtmlTempTagDesc.class0000644000707400001440000000074211510702104025654 0ustar garyusers2   (Ljava/lang/String;)VCodeisTemp()Z allowsTagI(Ljava/lang/String;ILedu/harvard/hul/ois/jhove/module/html/HtmlDocDesc;)Z  5edu/harvard/hul/ois/jhove/module/html/HtmlTempTagDesc1edu/harvard/hul/ois/jhove/module/html/HtmlTagDesc7(Ljava/lang/String;ZZLjava/util/List;Ljava/util/List;)V _sequence[I!$*+* *O  jhove/classes/edu/harvard/hul/ois/jhove/module/html/JHAttribute.class0000644000707400001440000000160311510702104025051 0ustar garyusers26 ! "# $ % & ' "( ") "* +,-_nameLjava/lang/String; _namespace_value_lineI_column;(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;II)VCode StackMapTable,.getName()Ljava/lang/String; getNamespacegetValuegetLine()I getColumn /. 0     1 23 45 1edu/harvard/hul/ois/jhove/module/html/JHAttributejava/lang/Objectjava/lang/String()V toLowerCaselengthcharAt(I)C substring(II)Ljava/lang/String;!  }T**+*,**-0-(-"--d"--d N*- N*** * *jhove/classes/edu/harvard/hul/ois/jhove/module/html/JHDoctype.class0000644000707400001440000000057611510702104024525 0ustar garyusers2   _doctypeElementsLjava/util/List;#(Ljava/util/List;Ljava/util/List;)VCodegetDoctypeElements()Ljava/util/List;  /edu/harvard/hul/ois/jhove/module/html/JHDoctype/edu/harvard/hul/ois/jhove/module/html/JHElement(Ljava/util/List;)V!  *+*,  *jhove/classes/edu/harvard/hul/ois/jhove/module/html/JHXmlDecl.class0000644000707400001440000000032211510702104024433 0ustar garyusers2  (Ljava/util/List;)VCode /edu/harvard/hul/ois/jhove/module/html/JHXmlDecl/edu/harvard/hul/ois/jhove/module/html/JHElement!*+jhove/classes/edu/harvard/hul/ois/jhove/module/html/ParseException.class0000644000707400001440000000522211510702104025616 0ustar garyusers2N 5OPQ RS 4T 4U 4V 4W 4X 5Y 5Z[ Y \] ^_`a bc bd be 4fg bh ij bklmno !Y pq prs !tuvwxyz{| }~ p ! !^specialConstructorZ currentToken-Ledu/harvard/hul/ois/jhove/module/html/Token;expectedTokenSequences[[I tokenImage[Ljava/lang/String;eolLjava/lang/String;F(Ledu/harvard/hul/ois/jhove/module/html/Token;[[I[Ljava/lang/String;)VCode()V(Ljava/lang/String;)V getMessage()Ljava/lang/String; StackMapTable add_escapes&(Ljava/lang/String;)Ljava/lang/String;o @Dline.separator  >? 67 89 :; <= @C EFjava/lang/StringBuilder  F...  Encountered " 9 ? JK " at line  , column .Was expecting:Was expecting one of:java/lang/StringBuffer \b \t\n\f\r\"\'\\0000 \u 4edu/harvard/hul/ois/jhove/module/html/ParseExceptionjava/lang/Exceptionjava/lang/String+edu/harvard/hul/ois/jhove/module/html/Tokenjava/lang/System getProperty8(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;append-(Ljava/lang/String;)Ljava/lang/StringBuilder;toStringnextkindIimage beginLine(I)Ljava/lang/StringBuilder; beginColumnlength()IcharAt(I)C,(Ljava/lang/String;)Ljava/lang/StringBuffer;java/lang/Integer(II)Ljava/lang/String; substring(C)Ljava/lang/StringBuffer;!456789:;<=>?@AB2&****+*, *- @CB!* **@DB"*+**EFB** L=>* * 2 * 2=6* 2. Y+* * 2.2L* 2* 2d. Y+L Y+*LeN*:6g Y-N Y-* 2N+ Y-*N: Y-**N Y-*N* & Y-*N# Y- *N Y-+N-G* H6& HI"'yJKBz(!Y"M6+#+$ RU _ i s }"'\,%&W,'&W,(&W,)&W,*&W,+&Wu,,&Wk,-&Wa+$Y> ~H Y./:, Y0#d#1&W ,2W,3G@ L` MHLDMHLjhove/classes/edu/harvard/hul/ois/jhove/module/html/ParseHtml$LookaheadSuccess.class0000644000707400001440000000067011510702104027773 0ustar garyusers2   ()VCode InnerClasses6(Ledu/harvard/hul/ois/jhove/module/html/ParseHtml$1;)V @edu/harvard/hul/ois/jhove/module/html/ParseHtml$LookaheadSuccessLookaheadSuccessjava/lang/Error1edu/harvard/hul/ois/jhove/module/html/ParseHtml$1/edu/harvard/hul/ois/jhove/module/html/ParseHtml0* *   jhove/classes/edu/harvard/hul/ois/jhove/module/html/ParseHtml$JJCalls.class0000644000707400001440000000066311510702104026037 0ustar garyusers2 genIfirst-Ledu/harvard/hul/ois/jhove/module/html/Token;argnextJJCalls InnerClasses9Ledu/harvard/hul/ois/jhove/module/html/ParseHtml$JJCalls;()VCode 7edu/harvard/hul/ois/jhove/module/html/ParseHtml$JJCallsjava/lang/Object/edu/harvard/hul/ois/jhove/module/html/ParseHtml0  *  jhove/classes/edu/harvard/hul/ois/jhove/module/html/ParseHtml$1.class0000644000707400001440000000033011510702104024704 0ustar garyusers2 EnclosingMethod 1edu/harvard/hul/ois/jhove/module/html/ParseHtml$1 InnerClassesjava/lang/Object/edu/harvard/hul/ois/jhove/module/html/ParseHtml  jhove/classes/edu/harvard/hul/ois/jhove/module/html/ParseHtml.class0000644000707400001440000002740011510702104024566 0ustar garyusers2                    f  h   h h  h  !"#$ &% & ' ()*+ -, --. 1/0 31 23 61 45 96 78 9 :; >< = > ? @ A B C D EF G H I J K L M N O P Q R S T  UV W X Y IZ [\ a ] ^ _` fab h [ fc hd f [e [f [g h i j k l am no np aq ar s at au v w [x yz{|} InnerClassesJJCallsLookaheadSuccesselementsLjava/util/List; token_source=Ledu/harvard/hul/ois/jhove/module/html/ParseHtmlTokenManager;token-Ledu/harvard/hul/ois/jhove/module/html/Token;jj_ntjj_ntkI jj_scanpos jj_lastposjj_la lookingAheadZjj_semLAjj_genjj_la1[Ijj_la1_0 jj_2_rtns:[Ledu/harvard/hul/ois/jhove/module/html/ParseHtml$JJCalls; jj_rescanjj_gcjj_lsBLedu/harvard/hul/ois/jhove/module/html/ParseHtml$LookaheadSuccess; jj_expentriesLjava/util/Vector; jj_expentryjj_kind jj_lasttokens jj_endpos getElements()Ljava/util/List;CodeHtmlDoc StackMapTable ExceptionsElementC(Ljava/util/List;)Ledu/harvard/hul/ois/jhove/module/html/JHElement;~bOpenTag3()Ledu/harvard/hul/ois/jhove/module/html/JHOpenTag;XMLDecl3()Ledu/harvard/hul/ois/jhove/module/html/JHXmlDecl;CloseTag4()Ledu/harvard/hul/ois/jhove/module/html/JHCloseTag;PCData2()Ledu/harvard/hul/ois/jhove/module/html/JHPCData;Doctype3()Ledu/harvard/hul/ois/jhove/module/html/JHDoctype; ConsumeError8()Ledu/harvard/hul/ois/jhove/module/html/JHErrorElement; DoctypeItem(Ljava/util/List;)VName/()Ledu/harvard/hul/ois/jhove/module/html/Token;AttrVal()Ljava/lang/String; Attribute; TagCloserjj_2_1(I)ZFjj_2_2jj_2_3jj_2_4jj_2_5jj_2_6jj_2_7jj_2_8jj_3_6()Zjj_3R_9jj_3R_7jj_3_5jj_3R_8jj_3R_5jj_3R_6jj_3_8jj_3_4jj_3_3jj_3_2jj_3_7jj_3_1()V5(Ledu/harvard/hul/ois/jhove/module/html/CharStream;)VzReInit@(Ledu/harvard/hul/ois/jhove/module/html/ParseHtmlTokenManager;)V`jj_consume_token0(I)Ledu/harvard/hul/ois/jhove/module/html/Token;V jj_scan_token getNextTokengetToken()Ijj_add_error_token(II)VgenerateParseException8()Ledu/harvard/hul/ois/jhove/module/html/ParseException;enable_tracingdisable_tracingjj_rescan_tokenjj_save java/util/LinkedList 4edu/harvard/hul/ois/jhove/module/html/ParseException  java/lang/StringBuilder Text = "  ", Line =   , Column =  ~ 4edu/harvard/hul/ois/jhove/module/html/JHErrorElement Parsing error  //edu/harvard/hul/ois/jhove/module/html/JHOpenTag3Construction with "/>" is incorrect except in XHTML  /edu/harvard/hul/ois/jhove/module/html/JHXmlDecl 0edu/harvard/hul/ois/jhove/module/html/JHCloseTag  .edu/harvard/hul/ois/jhove/module/html/JHPCData /edu/harvard/hul/ois/jhove/module/html/JHDoctype   1edu/harvard/hul/ois/jhove/module/html/JHAttribute  @edu/harvard/hul/ois/jhove/module/html/ParseHtml$LookaheadSuccess 7edu/harvard/hul/ois/jhove/module/html/ParseHtml$JJCalls  java/util/Vector ;edu/harvard/hul/ois/jhove/module/html/ParseHtmlTokenManager +edu/harvard/hul/ois/jhove/module/html/Token               /edu/harvard/hul/ois/jhove/module/html/ParseHtmljava/lang/Object8edu/harvard/hul/ois/jhove/module/html/ParseHtmlConstants1edu/harvard/hul/ois/jhove/module/html/ParseHtml$1java/lang/Stringjava/util/Listjava/lang/Throwable0edu/harvard/hul/ois/jhove/module/html/CharStreamjava/util/Enumeration[Z[[ISwitchTo(I)Vkindappend-(Ljava/lang/String;)Ljava/lang/StringBuilder;imageLjava/lang/String; beginLine(I)Ljava/lang/StringBuilder; beginColumntoStringequals(Ljava/lang/Object;)Z8(Ljava/util/List;Ljava/lang/String;Ljava/lang/String;Z)VI(Ljava/util/List;Ljava/lang/String;Ljava/util/List;IILjava/lang/String;)V7(Ljava/util/List;Ljava/lang/String;Ljava/util/List;II)V'(Ljava/util/List;Ljava/lang/String;II)V#(Ljava/util/List;Ljava/util/List;)Vadd;(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;II)V6(Ledu/harvard/hul/ois/jhove/module/html/ParseHtml$1;)Vnextgenfirst9Ledu/harvard/hul/ois/jhove/module/html/ParseHtml$JJCalls;()Ljava/util/Enumeration;hasMoreElements nextElement()Ljava/lang/Object; addElement(Ljava/lang/Object;)VremoveAllElementssize elementAt(I)Ljava/lang/Object; tokenImage[Ljava/lang/String;F(Ledu/harvard/hul/ois/jhove/module/html/Token;[[I[Ljava/lang/String;)Varg! 4*c*Y* **!!**O**W* W*  C h* * M,* * M,* *M,* ***M,**O* *M,* WYN:**:ZNY !"#!$:%&Y+'(,-Z[st# CM"GYL* W*)M* ****O *+**+N,-%-Y*,+, ,#./-Y*,+, ,#0C (rYL* W* W* W* ****O *+** W* W1Y*2C =1* W* W*)L* W3Y*++ +#40$*5L* W6Y*++ +#7pYL* W* W* ****O *+8* W9Y*+:C $*L&Y*'+(w*5M* **E0* W+,;W0* W+,;W**O* WYC*5L* W+e*5L* **3'* W+* W+**O* WY C (*<H*):* W*)N* W*=:>Y-- -#?M+,;W*@:*):* W*)N>Y-- -#?M+,;W{*A7*)N* W*=:>Y-- -#?M+,;W?*B)*)N>Y-- -#?M+,;W* WYM>;- l*5L* **:  .* W* W+* W+**O* WY C |=*C***DZEF*G=*HM>*H:*H'I2'*2242 @HJ|=*C***DZEF*J=*HM>*H:*H'I2'*2242 @HJ|=*C***DZEF*K=*HM>*H:*H'I2'*2242 @HJ|=*C***DZEF*L=*HM>*H:*H'I2'*2242 @HJ|=*C***DZEF*M=*HM>*H:*H'I2'*2242 @HJ|=*C***DZEF*N=*HM>*H:*H'I2'*2242 @HJ@*C***DZEF*O=*HM>*H:*H(I4(+4464 @IK@*C***DZEF*P=*HM>*H:*H(I4(+4464 @IK,*Q* R ! *R -*R* R ,*Q* R -*R* R -*R*R +*R*Q   *Q   *S   *T   *U ,*Q*R   *V @4 YOYOY OY OYWOYWOYOY(OX*Y*Z* *[\*]*^*IY_`*aYbc*d*d e*fY+g*hYiD**=*O=*\*\[YjSksQ*+k*hYiD**=*O=*\*\[YjS*Y*Z* *[\*]*^*IY_`*aYbc*d*d e*+*hYiD**=*O=*\*\[YjSdpN*+*hYiD**=*O=*\*\[YjS*DYMl**DlD**D*mZlD**Da*Y`*Y^`Z^dB*^>*\2*\2:n* op:*D*,D*d*q0 *E*FE*YCdC*El***E*mZlZEF!***ElZEF**ElE*]+=*DN--*E-lN- *r*E*C*E*F*`:  U?*Dl**DlD**D*mZlD**Y`*Dc>*Z *E*DM>%,l ,lM,*mZlM,C I4**DlZs**D*mZlZ**sZ'd*t`*e*YtZ`tO*t**t u>*t*u*e.O>*cv:wPxyy:*u3>6*u.*u.> *c*uz*e*ZtdO'  (y%*c{L= +T*d+*dT*d=4*.*!> X.x~+T=(+3* u*uO*c*uz*t*|*r*c}yM>*c},*c~yySY*D,. $!  *]<*\2M,n**,C**,oZEFl/7?GOW_g*GW8*JW0*KW(*LW *MW*NW*OW*PW,pM,mZ*]  OjN*\2N-n*"-p-[YjZpN -pN-*`*Cdn-*Do- ![Ijhove/classes/edu/harvard/hul/ois/jhove/module/html/ParseHtmlConstants.class0000644000707400001440000000307511510702104026465 0ustar garyusers2pRSTUVWXYZ[\]^_`abcdefghijkl mnoEOFI ConstantValue STARTDOCTYPE LABRACKET PCDATASTARTPCDATANAMEEQUALS NAKEDVALUE QUOTEDVALUESINGQUOTEDVALUE QMARK SLASH COLON  RABRACKET DOCTYPEKEYWORD NAKEDDTITEM QUOTEDDTITEM OPENCOMMENTDEFAULT IN_PCDATAIN_TAG IN_ATTVALUE IN_DOCTYPE IN_DOCTYPE2 IN_COMMENTENDING_COMMENT tokenImage[Ljava/lang/String;()VCodejava/lang/String"  "?""/"":"">" "DOCTYPE" " ""\t""\n""\r""\f"" jhove/classes/edu/harvard/hul/ois/jhove/module/iff/package.html0000644000707400001440000000100310771563000023720 0ustar garyusers Contains supporting classes for modules based on the IFF specification (EA IFF 85). This may include AIFF, RIFF and others. This package may also, at some point, include a generic IFF module.

jhove/classes/edu/harvard/hul/ois/jhove/module/iff/ChunkHeader.class0000644000707400001440000000354211510702104024651 0ustar garyusers2n 5 6 78 9 :; <= >?@ 5A B CDEF :G H IJ IK L C M :N :O PQR_module&Ledu/harvard/hul/ois/jhove/ModuleBase;_repInfo#Ledu/harvard/hul/ois/jhove/RepInfo;_sizeJ_chunkIDLjava/lang/String;L(Ledu/harvard/hul/ois/jhove/ModuleBase;Ledu/harvard/hul/ois/jhove/RepInfo;)VCode readHeader(Ljava/io/DataInputStream;)Z StackMapTable8S ExceptionsTsetID(Ljava/lang/String;)VgetID()Ljava/lang/String;getSize()J %U   java/lang/StringBuffer %VW XYZ [\S ]^java/lang/StringBuilder0 _` a2&edu/harvard/hul/ois/jhove/ErrorMessageInvalid character in Chunk IDCharacter = 0x b4 %cd ef gh _i #$ jk lm !"0edu/harvard/hul/ois/jhove/module/iff/ChunkHeaderjava/lang/Objectjava/lang/Stringjava/io/IOException()V(I)V$edu/harvard/hul/ois/jhove/ModuleBasereadUnsignedByteB(Ljava/io/DataInputStream;Ledu/harvard/hul/ois/jhove/ModuleBase;)Ijava/lang/Integer toHexString(I)Ljava/lang/String;length()Iappend-(Ljava/lang/String;)Ljava/lang/StringBuilder;toStringgetNByte((Ljava/lang/String;Ljava/lang/String;J)V!edu/harvard/hul/ois/jhove/RepInfo setMessage&(Ledu/harvard/hul/ois/jhove/Message;)V setWellFormed(Z)V(C)Ljava/lang/StringBuffer; isBigEndian()ZreadUnsignedIntC(Ljava/io/DataInputStream;ZLedu/harvard/hul/ois/jhove/ModuleBase;)J! !"#$%&'**+*,()'YM>}+*6 ^: Y   :*Y Y   **,W*,*+*** +;,4 -./0'*+12'*34'*jhove/classes/edu/harvard/hul/ois/jhove/module/iff/Superchunk.class0000644000707400001440000000217011510702105024614 0ustar garyusers20         !"_repInfo#Ledu/harvard/hul/ois/jhove/RepInfo;(Ledu/harvard/hul/ois/jhove/ModuleBase;Ledu/harvard/hul/ois/jhove/module/iff/ChunkHeader;Ljava/io/DataInputStream;Ledu/harvard/hul/ois/jhove/RepInfo;)VCodegetNextChunkHeader4()Ledu/harvard/hul/ois/jhove/module/iff/ChunkHeader; StackMapTable" Exceptions# $ %&0edu/harvard/hul/ois/jhove/module/iff/ChunkHeader '( ) *+ ,- .//edu/harvard/hul/ois/jhove/module/iff/Superchunk*edu/harvard/hul/ois/jhove/module/iff/Chunkjava/io/IOExceptiont(Ledu/harvard/hul/ois/jhove/ModuleBase;Ledu/harvard/hul/ois/jhove/module/iff/ChunkHeader;Ljava/io/DataInputStream;)V bytesLeftJ_module&Ledu/harvard/hul/ois/jhove/ModuleBase;L(Ledu/harvard/hul/ois/jhove/ModuleBase;Ledu/harvard/hul/ois/jhove/RepInfo;)V_dstreamLjava/io/DataInputStream; readHeader(Ljava/io/DataInputStream;)ZgetSize()J!  *+,-*^@* LY**M,*, >*Y`e,  jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg/0000755000707400001440000000000011510702105021617 5ustar garyusersjhove/classes/edu/harvard/hul/ois/jhove/module/jpeg/Tiling.class0000644000707400001440000000422511510702103024075 0ustar garyusers2w AB A C DE DF GH GIJKL MNO P QRSTU MV WX YZ W[ \ ] ^ _ `abtileListLjava/util/List; _tilingTypeI _vertScale _horScale_refGridHeightJ _refGridWidth()VCodeaddTile(JJJJ)VbuildTileListProp&()Ledu/harvard/hul/ois/jhove/Property; StackMapTablecd setTilingType(I)V setVertScale setHorScalesetRefGridHeight(J)VsetRefGridWidth getTilingType()I getVertScale getHorScalegetRefGridHeight()JgetRefGridWidth )*java/util/LinkedList !c ef ghd ij kl[J"edu/harvard/hul/ois/jhove/Property VerticalScalem nojava/lang/Long )8 )pHorizontalScaleVerticalOffsretHorizontalOffsetTile qor st )uTiles vt "# $# %# &' (',edu/harvard/hul/ois/jhove/module/jpeg/Tilingjava/lang/Objectjava/util/Listjava/util/ListIteratoradd(Ljava/lang/Object;)Z listIterator()Ljava/util/ListIterator;hasNext()Znext()Ljava/lang/Object;&edu/harvard/hul/ois/jhove/PropertyTypeLONG(Ledu/harvard/hul/ois/jhove/PropertyType;O(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ljava/lang/Object;)VPROPERTY'edu/harvard/hul/ois/jhove/PropertyArityARRAY)Ledu/harvard/hul/ois/jhove/PropertyArity;x(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ledu/harvard/hul/ois/jhove/PropertyArity;Ljava/lang/Object;)VLIST! !"#$#%#&'(' )*+**Y,-+4 ( :  P !P P P* W./+ »YL*M,, N : Y Y-/S Y Y-/S Y Y-/S Y Y-/S+ YWd Y+01234+*54+*64+*78+*98+*:;+*<;+*=;+*>?+*@?+*jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg/ArithConditioning.java0000644000707400001440000000327310771562776026135 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College * **********************************************************************/ package edu.harvard.hul.ois.jhove.module.jpeg; import edu.harvard.hul.ois.jhove.*; /** * Encapsulation of an arithmetic conditioning entry for a JPEG image. * * @author Gary McGath * */ public class ArithConditioning { private int _tableClass; private int _destIdentifier; /** * Constructor. */ public ArithConditioning(int tableClass, int destIdentifier) { _tableClass = tableClass; _destIdentifier = destIdentifier; } /** * Returns a Property defining the conditioning data */ public Property makeProperty (boolean raw) { Property[] parray = new Property[2]; if (raw) { parray[0] = new Property ("TableClass", PropertyType.INTEGER, new Integer (_tableClass)); } else { String prec = "Undefined"; try { prec = JpegStrings.DAC_CLASS[_tableClass]; } catch (Exception e) {} parray[0] = new Property ("Precision", PropertyType.STRING, prec); } parray[1] = new Property ("DestinationIdentifier", PropertyType.INTEGER, new Integer (_destIdentifier)); return new Property ("ArithmeticConditioning", PropertyType.PROPERTY, PropertyArity.ARRAY, parray); } } jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg/JpegExif.java0000644000707400001440000001657711432574545024225 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.jpeg; import java.io.*; import java.util.*; import edu.harvard.hul.ois.jhove.*; import edu.harvard.hul.ois.jhove.module.tiff.ExifIFD; import edu.harvard.hul.ois.jhove.module.tiff.TiffIFD; import edu.harvard.hul.ois.jhove.module.tiff.TiffProfileExif; import edu.harvard.hul.ois.jhove.module.tiff.TiffProfileExifIFD; //import edu.harvard.hul.ois.jhove.module.*; /** * Reader of Exif data embedded in a JPEG App1 block. This makes use * of the TIFF module, since an Exif stream is really an embedded TIFF * file; but it is designed to fail cleanly if the TIFF module is absent. * * @author Gary McGath * */ public final class JpegExif { private boolean _exifProfileOK; public JpegExif () { _exifProfileOK = false; } /** Checks if the TIFF module is available. */ public static boolean isTiffAvailable () { try { Class tiffClass = Class.forName ("edu.harvard.hul.ois.jhove.module.TiffModule"); return true; } catch (Exception e) { return false; } } /** Reads the Exif data from the current point at the data stream, * puts it into a temporary file, and makes a RepInfo object * available. This should be called only if isTiffAvailable() * has returned true. */ public RepInfo readExifData (DataInputStream dstream, JhoveBase je, int length) { RandomAccessFile tiffRaf = null; File tiffFile = null; FileOutputStream fos = null; RepInfo info = new RepInfo ("tempfile"); /* We're now at the beginning of the TIFF data. * Copy it into a temporary file, then parse that * as a TIFF file. */ try { tiffFile = je.tempFile (); fos = new FileOutputStream (tiffFile); int bufSize = je.getBufferSize (); int tiffLen = length - 8; /* Set a default buffer size if the app doesn't specify one. */ if (bufSize <= 0) { bufSize = 32768; } if (bufSize > tiffLen) { // can buffer whole file in one buffer bufSize = tiffLen; } BufferedOutputStream bos = new BufferedOutputStream (fos, bufSize); byte[] buf = new byte[bufSize]; while (tiffLen > 0) { //int len; int sz; if (tiffLen < bufSize) { sz = tiffLen; } else { sz = bufSize; } sz = dstream.read (buf, 0, sz); bos.write(buf, 0, sz); tiffLen -= sz; } fos.flush (); edu.harvard.hul.ois.jhove.module.TiffModule tiffMod = new edu.harvard.hul.ois.jhove.module.TiffModule (); tiffMod.setByteOffsetValid(true); // Now parse the file, using a special parsing method. // Close only after we're all done. tiffRaf = new RandomAccessFile (tiffFile, "r"); List ifds = tiffMod.exifParse (tiffRaf, info); if (ifds == null) { return info; } // Locate the Exif IFD. (We probably also want the // Interoperability IFD eventually.) ListIterator iter = ifds.listIterator(); boolean first = true; boolean haveNisoMetadata = false; while (iter.hasNext()) { Object ifd = iter.next (); if (ifd instanceof TiffIFD) { // The TIFF IFD has useful information, which gets put // into its NISO metadata. Make it available to the caller. if (first) { NisoImageMetadata niso = ((TiffIFD) ifd).getNisoImageMetadata (); // The first one is presumed to be the interesting one. info.setProperty (new Property ("NisoImageMetadata", PropertyType.NISOIMAGEMETADATA, niso)); haveNisoMetadata = true; TiffProfileExif exifProfile = new TiffProfileExif (); _exifProfileOK = exifProfile.satisfiesProfile ((TiffIFD) ifd); } } if (ifd instanceof ExifIFD) { // Now for complicated stuff copying out the appropriate properties. // Probably I just want to go through them and match interesting // properties one by one, and copy them directly out. // Or do I just want to copy the whole Exif property? ExifIFD eifd = (ExifIFD) ifd; Property ifdProp = eifd.getProperty( (je.getShowRawFlag ())); List exifList = null; if (ifdProp != null) { exifList = eifd.exifProps (ifdProp); } if (_exifProfileOK) { TiffProfileExifIFD exifIFDProfile = new TiffProfileExifIFD (); _exifProfileOK = exifIFDProfile.satisfiesProfile(eifd); } if (exifList != null) { info.setProperty(new Property ("Exif", PropertyType.PROPERTY, PropertyArity.LIST, exifList)); } // See if we have any interesting NISO metadata. If so, and // we haven't gotten real NISO metadata, use it. if (!haveNisoMetadata) { NisoImageMetadata niso = eifd.getNisoImageMetadata (); info.setProperty (new Property ("NisoImageMetadata", PropertyType.NISOIMAGEMETADATA, niso)); } } first = false; } } catch (IOException e) { info.setMessage (new ErrorMessage ("I/O exception processing Exif metadata: " + e.getMessage ())); // Maybe should put this directly in the parent's // RepInfo, otherwise I have to copy the message afterwards. } finally { if (tiffRaf != null) { try { tiffRaf.close(); } catch (Exception e) {} } if (fos != null) { try { fos.close(); } catch (Exception e) {} } if (tiffFile != null) { try { tiffFile.delete(); } catch (Exception e) {} } } return info; } /** Returns true if the Exif IFD is present and satisfies * the profile requirements. */ public boolean isExifProfileOK () { return _exifProfileOK; } } jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg/JpegStrings.java0000644000707400001440000001263310771562775024757 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College * **********************************************************************/ package edu.harvard.hul.ois.jhove.module.jpeg; /** * A class for holding arrays of informative strings that will go into * properties of a JPEG object. */ public class JpegStrings { /** A private constructor just to make sure nobody instantiates the class by mistake. */ private JpegStrings () { } /** JPEG compression types, indexed on marker byte - 0XC0. * This applies only to marker codes for the primary image; * thumbnail compression schemes are completely incompatible. */ public final static String[] COMPRESSION_TYPE = { "Huffman coding, Baseline DCT", "Huffman coding, Extemded sequential DCT", "Huffman coding, Progressive DCT", "Huffman coding, Lossless (sequential)", "", "Huffman coding, Differential sequential DCT", "Huffman coding, Differential progressive DCT", "Huffman coding, Differential lossless (sequential)", "", "Arithmetic coding, Extended sequential DCT", "Arithmetic coding, Progressive DCT", "Arithmetic coding, Lossless (sequential)", "", "Arithmetic coding, Differential sequential DCT", "Arithmetic coding, Differential progressive DCT", "Arithmetic coding, Differential lossless (sequential)" }; /** Values for capability indicator byte for Version 0 */ public final static String[] CAPABILITY_V0 = { "", // 0 "Baseline sequential", // 1 "Extended sequential, Huffman, 8-bits", // 2 "Extended sequential, arithmetic, 8-bits", // 3 "Extended sequential, Huffman, 12-bits", // 4 "Extended sequential, arithmetic, 12-bits", // 5 "Spectral selection, Huffman, 8-bits", // 6 "Spectral selection, arithmetic, 8-bits", // 7 "Full progression, Huffman, 8-bits", // 8 "Full progression, arithmetic, 8-bits", // 9 "Spectral selection, Huffman, 12-bits", // 10 "Spectral selection, arithmetic, 12-bits", // 11 "Full progression, Huffman, 12-bits", // 12 "Full progression, arithmetic, 12-bits", // 13 "Lossless, Huffman", // 14 "Lossless, arithmetic", // 15 "Hierarchical, sequential Huffman, 8-bits", // 16 "Hierarchical, sequential arithmetic, 8-bits", // 17 "Hierarchical, sequential Huffman, 12-bits", // 18 "Hierarchical, sequential arithmetic, 12-bits", // 19 "Hierarchical, Spectral Selection, " + "Huffman, 8-bits", // 20 "Hierarchical, Spectral Selection, " + "arithmetic, 8-bits", // 21 "Hierarchical, Full progression, " + "Huffman, 8-bits", // 22 "Hierarchical, Full progression, " + "arithmetic, 8-bits", // 23 "Hierarchical, Spectral Selection, " + "Huffman, 12-bits", // 24 "Hierarchical, Spectral Selection, " + "arithmetic, 12-bits", // 25 "Hierarchical, Full progression, " + "Huffman, 12-bits", // 26 "Hierarchical, Full progression, " + "arithmetic, 12-bits", // 27 "Hierarchical, Lossless, Huffman", // 28 "Hierarchical, Lossless, arithmetic" // 29 }; /** Values for capability indicator byte for Version 1. * These are by bit position from right to left. */ public final static String[] CAPABILITY_V1 = { "10 < blocks per MCU < 20", // 0xxx xxx1 "Variable quantization", // 0xxx xx1x "Hierarchical selective refinement", // 0xxx x1xx "Progressive selective refinement", // 0xxx 1xxx "Componenet selective refinement", // 0xx1 xxxx }; /* Values for capability indicator byte, tiling bits, * for Version 1. These match the indicated masks. */ public final static String[] TILING_CAPABILITY_V1 = { "No tiling", // 000x xxxx "Simple tiling", // 001x xxxx "Pyramidal tiling", // 010x xxxx "Composite tiling" // 011x xxxx }; /* Values for tiling type, as defined in the DTI segment. */ public final static String[] TILING_TYPE = { "Simple", // 0 "Pyramidal", // 1 "Composite" // 2 }; /* Values for precision in DQT segment. */ public final static String[] DQT_PRECISION = { "8-bit", // 0 "16-bit", // 1 }; /* Values for precision in DAC segment. */ public final static String[] DAC_CLASS = { "DC table or iossiess table", // 0 "AC table", // 1 }; } jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg/QuantizationTable.java0000644000707400001440000000325510771562776026157 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College * **********************************************************************/ package edu.harvard.hul.ois.jhove.module.jpeg; import edu.harvard.hul.ois.jhove.*; /** * Encapsulation of a quantization table entry for a JPEG image. * * @author Gary McGath * */ public class QuantizationTable { private int _precision; private int _destIdentifier; /** * Constructor. */ public QuantizationTable(int precision, int destIdentifier) { _precision = precision; _destIdentifier = destIdentifier; } /** * Returns a Property defining the quantization table */ public Property makeProperty (boolean raw) { Property[] parray = new Property[2]; if (raw) { parray[0] = new Property ("Precision", PropertyType.INTEGER, new Integer (_precision)); } else { String prec = "Undefined"; try { prec = JpegStrings.DQT_PRECISION[_precision]; } catch (Exception e) {} parray[0] = new Property ("Precision", PropertyType.STRING, prec); } parray[1] = new Property ("DestinationIdentifier", PropertyType.INTEGER, new Integer (_destIdentifier)); return new Property ("QuantizationTable", PropertyType.PROPERTY, PropertyArity.ARRAY, parray); } } jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg/SRS.java0000644000707400001440000000326010771562775023163 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College * **********************************************************************/ package edu.harvard.hul.ois.jhove.module.jpeg; import edu.harvard.hul.ois.jhove.*; /** * Encapsulation of an SRS (selectively refined scan) entry for a JPEG image. * * @author Gary McGath * */ public class SRS { private int _vertOffset; private int _horOffset; private int _vertSize; private int _horSize; /** * Constructor. */ public SRS(int vertOffset, int horOffset, int vertSize, int horSize) { _vertOffset = vertOffset; _horOffset = horOffset; _vertSize = vertSize; _horSize = horSize; } /** * Returns a Property defining the SRS */ public Property makeProperty () { Property[] parray = new Property[4]; parray[0] = new Property ("VerticalOffset", PropertyType.INTEGER, new Integer (_vertOffset)); parray[1] = new Property ("HorizontalOffset", PropertyType.INTEGER, new Integer (_horOffset)); parray[2] = new Property ("VerticalSize", PropertyType.INTEGER, new Integer (_vertSize)); parray[3] = new Property ("HorizontalSize", PropertyType.INTEGER, new Integer (_horSize)); return new Property ("SelectivelyRefinedScan", PropertyType.PROPERTY, PropertyArity.ARRAY, parray); } } jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg/Spiff.java0000644000707400001440000000541710771562775023571 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College * **********************************************************************/ package edu.harvard.hul.ois.jhove.module.jpeg; /** * Static methods and data for SPIFF Jpeg files. * * @author Gary McGath * */ public class Spiff { /* Definitions of SPIFF tags. */ public final static int EOD = 1, XFER_CHARACTERISTICS = 2, IMAGE_ORIENTATION = 3, THUMBNAIL = 4, IMAGE_TITLE = 5, IMAGE_DESC = 6, TIME_STAMP = 7, VERSION_IDENT = 8, CREATOR_ID = 9, PROTECTION_INDICATOR = 0XA, COPYRIGHT_INFO = 0X0C, CONTACT_INFO = 0X0D, TILE_INDEX = 0X0E, SCAN_INDEX = 0X0F, SETREF = 0X10; /* Color space to NISO mapping array. */ private final static int[] nisoColor = { 0, // 0 bilevel, white is 0 6, // 1 YCbCr (1) -1, // 2 other 6, // 3 YCbCr (2) 6, // 4 YCbCr (3) -1, // 5 reserved -1, // 6 reserved -1, // 7 reserved 1, // 8 grayscale (black is 0) -1, // 9 PhotoYCC 2, // 10 RGB -1, // 11 CMY 5, // 12 CMYK -1, // 13 YCCK 8, // 14 CIELab 1 // 15 bilevel, black is 0 }; /* Compression to NISO mapping array. When we don't have * an exact match, call it JPEG (6). */ private final static int[] nisoCompScheme = { 1, // 0 uncompressed 6, // 1 T.4, MH 6, // 2 T.4, MR 6, // 3 T.6, MMR 32661, // 4 JBIG 6 // 5 JPEG }; /** * Private constructor, to prevent instantiation */ private Spiff() { } /** Converts S value to NISO color space. Return -1 if there * is no matching color space in NISO, or the S value is out * of bounds. */ public static int colorSpaceToNiso (int s) { if (s < 0 || s > nisoColor.length) { return -1; } else { return nisoColor[s]; } } /** Converts C value to NISO compression scheme. Return -1 if there * is no matching color space in NISO, or the S value is out * of bounds. */ public static int compressionTypeToNiso (int s) { if (s < 0 || s > nisoCompScheme.length) { return -1; } else { return nisoCompScheme[s]; } } } jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg/SpiffDir.java0000644000707400001440000001004310771562776024220 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College * **********************************************************************/ package edu.harvard.hul.ois.jhove.module.jpeg; import java.io.*; import java.util.*; import edu.harvard.hul.ois.jhove.*; import edu.harvard.hul.ois.jhove.module.JpegModule; /** * This class represents a SPIFF directory and the tags defined under * it. A SPIFF directory consists of one or more APP8 segments, and * may define ancillary images. It is always contained within the * primary image stream. * * @author Gary McGath * */ public class SpiffDir { private JpegModule _module; /* list of thumbnail properties */ private List _thumbnails; /** * */ public SpiffDir(JpegModule module) { _module = module; _thumbnails = new LinkedList (); } /** * Reads a directory entry, starting at the position after * the APP8 marker and length. If the entry is for a thumbnail, create * a Property for that thumbnail and add it to the thumbnail * list. Other tags provide interesting information, some of * which should go into properties, but for the moment we * just handle the thumbnail and ignore other tags. * * An APP8 segment which is in a SPIFF file, and isn't the * first APP8 segment (file header), is presumed to be a * directory entry. These directory entries are a little * inconvenient, because they can contain offsets to data in * what we otherwise handle as a stream format. The offsets * can be either to data within the block, or to faraway * indirect data blocks. For the present version, we ignore * offset data, which seems to be used only for the actual * image bits (e.g., TNDATA). */ public void readDirEntry (DataInputStream dstream, int length) throws IOException { int tag = (int) _module.readUnsignedInt (dstream); switch (tag) { case Spiff.THUMBNAIL: readThumbnail (dstream, length); break; default: _module.skipBytes (dstream, length - 6, _module); break; } } /** * Appends any thumbnail properties that have been collected to * the provided list. */ public void appendThumbnailProps (List imageList) { imageList.addAll (_thumbnails); } /* Reads a thumbnail entry. A Property is created and added to * the list of thumbnails. */ private void readThumbnail (DataInputStream dstream, int length) throws IOException { NisoImageMetadata niso = new NisoImageMetadata(); _module.skipBytes (dstream, 4, _module); // tndata int height = _module.readUnsignedShort (dstream); int width = _module.readUnsignedShort (dstream); int tns = ModuleBase.readUnsignedByte (dstream, _module); int tnbps = ModuleBase.readUnsignedByte (dstream, _module); int tnc = ModuleBase.readUnsignedByte (dstream, _module); _module.skipBytes (dstream, length - 13, _module); // Fill in NISO data niso.setMimeType("image/jpeg"); niso.setByteOrder ("big-endian"); niso.setBitsPerSample (new int[] {tnbps} ); int cs = Spiff.colorSpaceToNiso(tns); if (cs >= 0) { niso.setColorSpace (cs); } int comp = Spiff.compressionTypeToNiso (tnc); if (comp >= 0) { niso.setCompressionScheme(comp); } Property nisoProp = new Property ("NisoImageMetadata", PropertyType.NISOIMAGEMETADATA, niso); List propList = new LinkedList (); propList.add (nisoProp); Property imageProp = new Property ("ThumbImage", PropertyType.PROPERTY, PropertyArity.LIST, propList); _thumbnails.add (imageProp); } } jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg/Tiling.java0000644000707400001440000000662710771562776023755 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College * **********************************************************************/ package edu.harvard.hul.ois.jhove.module.jpeg; import java.util.*; import edu.harvard.hul.ois.jhove.*; /** * Encapsulation of the tiling information for a JPEG image. * * @author Gary McGath * */ public class Tiling { /* List of individual tile descriptions */ private List tileList; private int _tilingType; private int _vertScale; private int _horScale; private long _refGridHeight; private long _refGridWidth; /** * Constructor. */ public Tiling() { tileList = new LinkedList (); } /** * Adds a tile to the list. */ public void addTile (long vertScale, long horScale, long vertOffset, long horOffset) { // Represent the tile as an array of 4 longs long[] tile = new long[4]; tile[0] = vertScale; tile[1] = horScale; tile[2] = vertOffset; tile[3] = horOffset; tileList.add (tile); } /** * Returns a property listing all the tiles. */ public Property buildTileListProp () { List tpList = new LinkedList (); ListIterator iter = tileList.listIterator (); while (iter.hasNext ()) { long[] tile = (long []) iter.next (); Property[] tProp = new Property[4]; tProp[0] = new Property ("VerticalScale", PropertyType.LONG, new Long (tile[0])); tProp[1] = new Property ("HorizontalScale", PropertyType.LONG, new Long (tile[1])); tProp[2] = new Property ("VerticalOffsret", PropertyType.LONG, new Long (tile[2])); tProp[3] = new Property ("HorizontalOffset", PropertyType.LONG, new Long (tile[3])); tpList.add (new Property ("Tile", PropertyType.PROPERTY, PropertyArity.ARRAY, tProp)); } return new Property ("Tiles", PropertyType.PROPERTY, PropertyArity.LIST, tpList); } public void setTilingType (int tilingType) { _tilingType = tilingType; } public void setVertScale (int vertScale) { _vertScale = vertScale; } public void setHorScale (int horScale) { _horScale = horScale; } public void setRefGridHeight (long refGridHeight) { _refGridHeight = refGridHeight; } public void setRefGridWidth (long refGridWidth) { _refGridWidth = refGridWidth; } public int getTilingType () { return _tilingType; } public int getVertScale () { return _vertScale; } public int getHorScale () { return _horScale; } public long getRefGridHeight () { return _refGridHeight; } public long getRefGridWidth () { return _refGridWidth; } } jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg/build.xml0000644000707400001440000000206611204567556023467 0ustar garyusers JPEG module build file Jhove - JSTOR/Harvard Object Validation Environment Version 1.0 2004-02-03 Copyright 2004 by JSTOR and the President and Fellows of Harvard College jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg/package.html0000644000707400001440000000061010771562776024127 0ustar garyusers Contains supporting classes for the JPEG-HUL module.

jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg/SpiffDir.class0000644000707400001440000000463311510702103024360 0ustar garyusers2 !4 56 4 7 89 : 8; <=> 4 8? @AB CD E F GH I GJ KLM NO P <QR NS TU VWX_module-Ledu/harvard/hul/ois/jhove/module/JpegModule; _thumbnailsLjava/util/List;0(Ledu/harvard/hul/ois/jhove/module/JpegModule;)VCode readDirEntry(Ljava/io/DataInputStream;I)V StackMapTable ExceptionsYappendThumbnailProps(Ljava/util/List;)V readThumbnailWZ> &[ "#java/util/LinkedList $%\ ]^ 0* _`a bc+edu/harvard/hul/ois/jhove/NisoImageMetadata def gh image/jpeg ij big-endian kj lmn op qr sp tr"edu/harvard/hul/ois/jhove/PropertyNisoImageMetadatau vw &x yz ThumbImage {w| }~ &.edu/harvard/hul/ois/jhove/module/jpeg/SpiffDirjava/lang/Objectjava/io/IOExceptionjava/io/DataInputStream()V+edu/harvard/hul/ois/jhove/module/JpegModulereadUnsignedInt(Ljava/io/DataInputStream;)J skipBytesC(Ljava/io/DataInputStream;ILedu/harvard/hul/ois/jhove/ModuleBase;)Ijava/util/ListaddAll(Ljava/util/Collection;)ZreadUnsignedShort(Ljava/io/DataInputStream;)I$edu/harvard/hul/ois/jhove/ModuleBasereadUnsignedByteB(Ljava/io/DataInputStream;Ledu/harvard/hul/ois/jhove/ModuleBase;)I setMimeType(Ljava/lang/String;)V setByteOrdersetBitsPerSample([I)V+edu/harvard/hul/ois/jhove/module/jpeg/SpiffcolorSpaceToNiso(I)I setColorSpace(I)VcompressionTypeToNisosetCompressionScheme&edu/harvard/hul/ois/jhove/PropertyTypeNISOIMAGEMETADATA(Ledu/harvard/hul/ois/jhove/PropertyType;O(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ljava/lang/Object;)Vadd(Ljava/lang/Object;)ZPROPERTY'edu/harvard/hul/ois/jhove/PropertyArityLIST)Ledu/harvard/hul/ois/jhove/PropertyArity;x(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ledu/harvard/hul/ois/jhove/PropertyArity;Ljava/lang/Object;)V! !"#$%&'(!**+*Y)*(Q7*+>*+*+d*W+,-./( +* W0*(׻ Y N*+*W*+ 6*+ 6+* 6+* 6+* 6*+ d*W--- YO6  - 6  - Y-: Y:   WY : * W+ 123,-jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg/ArithConditioning.class0000644000707400001440000000253611510702105026270 0ustar garyusers2L # $ %&' ()* + ,- ./01 (234 (5 67 89: _tableClassI_destIdentifier(II)VCode makeProperty'(Z)Ledu/harvard/hul/ois/jhove/Property; StackMapTable;9<0 =  "edu/harvard/hul/ois/jhove/Property TableClass> ?@java/lang/Integer A B UndefinedC DEjava/lang/Exception Precision F@DestinationIdentifierArithmeticConditioning G@H IJ K7edu/harvard/hul/ois/jhove/module/jpeg/ArithConditioningjava/lang/Object%[Ledu/harvard/hul/ois/jhove/Property;java/lang/String()V&edu/harvard/hul/ois/jhove/PropertyTypeINTEGER(Ledu/harvard/hul/ois/jhove/PropertyType;(I)VO(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ljava/lang/Object;)V1edu/harvard/hul/ois/jhove/module/jpeg/JpegStrings DAC_CLASS[Ljava/lang/String;STRINGPROPERTY'edu/harvard/hul/ois/jhove/PropertyArityARRAY)Ledu/harvard/hul/ois/jhove/PropertyArity;x(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ledu/harvard/hul/ois/jhove/PropertyArity;Ljava/lang/Object;)V!*** rM ,YY* S$ N *2N:,Y - S,YY* SY,)25  & !"jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg/JpegExif.class0000644000707400001440000001035311510702105024351 0ustar garyusers2 A` @ab cdefg h ijk l imn o pq r st ` uvw x y z z {| }~    "  '` ' i * * .` . " * 8` 8 6 8 7h _exifProfileOKZ()VCodeisTiffAvailable()Z StackMapTablee readExifDatad(Ljava/io/DataInputStream;Ledu/harvard/hul/ois/jhove/JhoveBase;I)Ledu/harvard/hul/ois/jhove/RepInfo;vkfntisExifProfileOK DE BC+edu.harvard.hul.ois.jhove.module.TiffModule java/lang/Exception!edu/harvard/hul/ois/jhove/RepInfotempfile D java/io/FileOutputStream D java/io/BufferedOutputStream D E+edu/harvard/hul/ois/jhove/module/TiffModule java/io/RandomAccessFiler D E H  H -edu/harvard/hul/ois/jhove/module/tiff/TiffIFD "edu/harvard/hul/ois/jhove/PropertyNisoImageMetadata D 5edu/harvard/hul/ois/jhove/module/tiff/TiffProfileExif -edu/harvard/hul/ois/jhove/module/tiff/ExifIFD H 8edu/harvard/hul/ois/jhove/module/tiff/TiffProfileExifIFDExif  Djava/io/IOException&edu/harvard/hul/ois/jhove/ErrorMessagejava/lang/StringBuilder(I/O exception processing Exif metadata: .edu/harvard/hul/ois/jhove/module/jpeg/JpegExifjava/lang/Objectjava/io/DataInputStream#edu/harvard/hul/ois/jhove/JhoveBase java/io/File[Bjava/util/Listjava/util/ListIteratorjava/lang/Throwablejava/lang/ClassforName%(Ljava/lang/String;)Ljava/lang/Class;(Ljava/lang/String;)VtempFile()Ljava/io/File;(Ljava/io/File;)V getBufferSize()I(Ljava/io/OutputStream;I)Vread([BII)Iwrite([BII)VflushsetByteOffsetValid(Z)V#(Ljava/io/File;Ljava/lang/String;)V exifParseO(Ljava/io/RandomAccessFile;Ledu/harvard/hul/ois/jhove/RepInfo;)Ljava/util/List;closedelete listIterator()Ljava/util/ListIterator;hasNextnext()Ljava/lang/Object;getNisoImageMetadata/()Ledu/harvard/hul/ois/jhove/NisoImageMetadata;&edu/harvard/hul/ois/jhove/PropertyTypeNISOIMAGEMETADATA(Ledu/harvard/hul/ois/jhove/PropertyType;O(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ljava/lang/Object;)V setProperty'(Ledu/harvard/hul/ois/jhove/Property;)VsatisfiesProfile.(Ledu/harvard/hul/ois/jhove/module/tiff/IFD;)ZgetShowRawFlag getProperty'(Z)Ledu/harvard/hul/ois/jhove/Property; exifProps6(Ledu/harvard/hul/ois/jhove/Property;)Ljava/util/List;PROPERTY'edu/harvard/hul/ois/jhove/PropertyArityLIST)Ledu/harvard/hul/ois/jhove/PropertyArity;x(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ledu/harvard/hul/ois/jhove/PropertyArity;Ljava/lang/Object;)Vappend-(Ljava/lang/String;)Ljava/lang/StringBuilder; getMessage()Ljava/lang/String;toString setMessage&(Ledu/harvard/hul/ois/jhove/Message;)V1@ABCDEF ** GHF+ KKIHJKLFj:::Y:, : Y :, 6d6  6  6Y: :  4   6 6 +  6      d6 Y:  Y: :  8: : :W: :66: ?: !:"Y#$%&6'Y(:* )*{*:,+,:: -:*.Y/:*0"Y1234&5:"Y#$%&6& : :W::7Y8Y9:;<;=>? : :DW;:6: : :W:  66;@CJORY_bgg6gnsv}gigI+': MNOPQRS TUAMNOPQRSTUVWSJLJMJXVY*Z[WMNOPQRSLJLJMJD\qJLJMJD]MNOPQRS^JLJMJMNOPQRS_HF*jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg/JpegStrings.class0000644000707400001440000000613411510702105025111 0ustar garyusers2 FSTUVWXYZ[\]^_`ab Ecdefghijklmnopqrstuvwxyz{|}~ E E E E E ECOMPRESSION_TYPE[Ljava/lang/String; CAPABILITY_V0 CAPABILITY_V1TILING_CAPABILITY_V1 TILING_TYPE DQT_PRECISION DAC_CLASS()VCode OPjava/lang/StringHuffman coding, Baseline DCT'Huffman coding, Extemded sequential DCTHuffman coding, Progressive DCT%Huffman coding, Lossless (sequential)+Huffman coding, Differential sequential DCT,Huffman coding, Differential progressive DCT2Huffman coding, Differential lossless (sequential)*Arithmetic coding, Extended sequential DCT"Arithmetic coding, Progressive DCT(Arithmetic coding, Lossless (sequential).Arithmetic coding, Differential sequential DCT/Arithmetic coding, Differential progressive DCT5Arithmetic coding, Differential lossless (sequential) GHBaseline sequential$Extended sequential, Huffman, 8-bits'Extended sequential, arithmetic, 8-bits%Extended sequential, Huffman, 12-bits(Extended sequential, arithmetic, 12-bits#Spectral selection, Huffman, 8-bits&Spectral selection, arithmetic, 8-bits!Full progression, Huffman, 8-bits$Full progression, arithmetic, 8-bits$Spectral selection, Huffman, 12-bits'Spectral selection, arithmetic, 12-bits"Full progression, Huffman, 12-bits%Full progression, arithmetic, 12-bitsLossless, HuffmanLossless, arithmetic(Hierarchical, sequential Huffman, 8-bits+Hierarchical, sequential arithmetic, 8-bits)Hierarchical, sequential Huffman, 12-bits,Hierarchical, sequential arithmetic, 12-bits1Hierarchical, Spectral Selection, Huffman, 8-bits4Hierarchical, Spectral Selection, arithmetic, 8-bits/Hierarchical, Full progression, Huffman, 8-bits2Hierarchical, Full progression, arithmetic, 8-bits2Hierarchical, Spectral Selection, Huffman, 12-bits5Hierarchical, Spectral Selection, arithmetic, 12-bits0Hierarchical, Full progression, Huffman, 12-bits3Hierarchical, Full progression, arithmetic, 12-bitsHierarchical, Lossless, Huffman"Hierarchical, Lossless, arithmetic IH10 < blocks per MCU < 20Variable quantization!Hierarchical selective refinement Progressive selective refinementComponenet selective refinement JH No tiling Simple tilingPyramidal tilingComposite tiling KHSimple Pyramidal Composite LH8-bit16-bit MHDC table or iossiess tableAC table NH1edu/harvard/hul/ois/jhove/module/jpeg/JpegStringsjava/lang/Object!EFGHIHJHKHLHMHNHOPQ*RPQYSYSYSYSYSYSY SY SYSY  SY  SY  SY SY SYSYSYSYSYSYSYSYSYSYSYSY SY SY SY SY SYSY SY!SY"SY#SY$SY%SY&SY'SY(SY)SY*SY+SY,SY-SY.S/Y0SY1SY2SY3SY4S5Y6SY7SY8SY9S:Y;SYY?SY@SAYBSYCSDjhove/classes/edu/harvard/hul/ois/jhove/module/jpeg/QuantizationTable.class0000644000707400001440000000251411510702105026306 0ustar garyusers2J " # $%& '() * +, -./ '012 '3 45 678 _precisionI_destIdentifier(II)VCode makeProperty'(Z)Ledu/harvard/hul/ois/jhove/Property; StackMapTable97:/ ;  "edu/harvard/hul/ois/jhove/Property Precision< =>java/lang/Integer ? @ UndefinedA BCjava/lang/Exception D>DestinationIdentifierQuantizationTable E>F GH I7edu/harvard/hul/ois/jhove/module/jpeg/QuantizationTablejava/lang/Object%[Ledu/harvard/hul/ois/jhove/Property;java/lang/String()V&edu/harvard/hul/ois/jhove/PropertyTypeINTEGER(Ledu/harvard/hul/ois/jhove/PropertyType;(I)VO(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ljava/lang/Object;)V1edu/harvard/hul/ois/jhove/module/jpeg/JpegStrings DQT_PRECISION[Ljava/lang/String;STRINGPROPERTY'edu/harvard/hul/ois/jhove/PropertyArityARRAY)Ledu/harvard/hul/ois/jhove/PropertyArity;x(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ledu/harvard/hul/ois/jhove/PropertyArity;Ljava/lang/Object;)V!*** rM ,YY* S$ N *2N:,Y - S,YY* SY,)25  & !jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg/SRS.class0000644000707400001440000000222111510702105023312 0ustar garyusers2@   ! " #$% &'( ) *+,-. &/ 01 234 _vertOffsetI _horOffset _vertSize_horSize(IIII)VCode makeProperty&()Ledu/harvard/hul/ois/jhove/Property; 5    "edu/harvard/hul/ois/jhove/PropertyVerticalOffset6 78java/lang/Integer 9 :HorizontalOffset VerticalSizeHorizontalSizeSelectivelyRefinedScan ;8< => ?)edu/harvard/hul/ois/jhove/module/jpeg/SRSjava/lang/Object()V&edu/harvard/hul/ois/jhove/PropertyTypeINTEGER(Ledu/harvard/hul/ois/jhove/PropertyType;(I)VO(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ljava/lang/Object;)VPROPERTY'edu/harvard/hul/ois/jhove/PropertyArityARRAY)Ledu/harvard/hul/ois/jhove/PropertyArity;x(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ledu/harvard/hul/ois/jhove/PropertyArity;Ljava/lang/Object;)V!&***** ~L+Y Y* S+Y  Y* S+Y  Y* S+Y Y* SY+jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg/Spiff.class0000644000707400001440000000214111510702105023713 0ustar garyusers26 1 2 345EODI ConstantValueXFER_CHARACTERISTICSIMAGE_ORIENTATION THUMBNAIL IMAGE_TITLE IMAGE_DESC TIME_STAMP VERSION_IDENT CREATOR_ID PROTECTION_INDICATOR COPYRIGHT_INFO  CONTACT_INFO  TILE_INDEX SCAN_INDEXSETREF nisoColor[InisoCompScheme()VCodecolorSpaceToNiso(I)I StackMapTablecompressionTypeToNiso )* &' ('+edu/harvard/hul/ois/jhove/module/jpeg/Spiffjava/lang/Object!      !"#$%&'(')*+* ,-+* ..  /-+* .. 0*+{ YOYOYOYOYOYOYOYOYOY OY OY OY OY OYOYO YOYOYOYOYOYOjhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/0000755000707400001440000000000011510702106022122 5ustar garyusersjhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/BoxHeader.class0000644000707400001440000000230211510702103025004 0ustar garyusers2< ' ( ) *+ , -. / *0 123_lengthJ_typeLjava/lang/String;_module1Ledu/harvard/hul/ois/jhove/module/Jpeg2000Module;_dstreamLjava/io/DataInputStream; _headerLengthM(Ledu/harvard/hul/ois/jhove/module/Jpeg2000Module;Ljava/io/DataInputStream;)VCode readHeader()V StackMapTable Exceptions4 getLength()JgetHeaderLength getDataLengthgetType()Ljava/lang/String;   5 67 8 9:  ;7 3edu/harvard/hul/ois/jhove/module/jpeg2000/BoxHeaderjava/lang/Objectjava/io/IOException$edu/harvard/hul/ois/jhove/ModuleBasereadUnsignedIntC(Ljava/io/DataInputStream;ZLedu/harvard/hul/ois/jhove/ModuleBase;)J/edu/harvard/hul/ois/jhove/module/Jpeg2000Module read4Chars-(Ljava/io/DataInputStream;)Ljava/lang/String;readSignedLong!**+*,bJ******* **** * B !"*#"* $" ** e%&*jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/AssociationBox.java0000644000707400001440000000704710771562667025752 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College * **********************************************************************/ package edu.harvard.hul.ois.jhove.module.jpeg2000; import edu.harvard.hul.ois.jhove.*; import java.io.*; import java.util.*; /** * Association Box. * * An AssociationBox can occur in pretty much any superbox * or at the top level. It simply establishes an association * between boxes. * * See ISO/IEC FCD15444-2: 2000, L.9.11 * * @author Gary McGath * */ public class AssociationBox extends JP2Box { /** * Constructor with superbox. * * @param parent parent superbox of this box * or TopLevelBoxHolder */ public AssociationBox(RandomAccessFile raf, BoxHolder parent) { super(raf, parent); } /** Reads the box, putting appropriate information in * the RepInfo object. setModule, setBoxHeader, * setRepInfo and setDataInputStream must be called * before readBox is called. * readBox must completely consume the * box, so that the next byte to be read by the * DataInputStream is the FF byte of the next Box. */ public boolean readBox() throws IOException { initBytesRead (); hasBoxes = true; int sizeLeft = (int) _boxHeader.getDataLength (); // Label and Number List boxes are given as examples, but // there is actually no restriction; an Association Box // can associate any arbitrary collection of boxes. // In order to avoid doubling (squaring?) the complexity // of the Module, only Image, Number List, Association and XML // boxes are reported in detail. JP2Box box = null; List boxProps = new LinkedList (); while (hasNext ()) { box = (JP2Box) next (); if (box == null) { break; } if (!box.readBox ()) { return false; } Property sdProp = box.selfDescProperty (); if (sdProp != null) { boxProps.add (sdProp); } } // Hierarchically add any association properties to the // property list. if (!associations.isEmpty ()) { boxProps.add (new Property ("Associations", PropertyType.PROPERTY, PropertyArity.LIST, associations)); } Property assocProp = new Property ("Association", PropertyType.PROPERTY, PropertyArity.LIST, boxProps); if (_parentBox != null) { _parentBox.addAssociation (assocProp); } else { _module.addAssociationProp (assocProp); } finalizeBytesRead (); return true; } /** Returns a Property which describes the Box, for use * by Association boxes and perhaps others. * An Association box can recursively contain other * Association boxes. Since an Association box adds * Association properties to its ancestors, This just * returns null to avoid duplicate reporting. */ protected Property selfDescProperty () { return null; } /** Returns the name of the Box. */ protected String getSelfPropName () { return "Association Box"; } } jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/BPCCBox.java0000644000707400001440000000357510771562664024204 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.jpeg2000; import java.io.*; import edu.harvard.hul.ois.jhove.*; /** * Bits Per Component box. * See I.5.3.2 in ISO/IEC 15444-1:2000 * * @author Gary McGath * */ public class BPCCBox extends JP2Box { /** * Constructor with superbox. * * @param parent parent superbox of this box */ public BPCCBox(RandomAccessFile raf, BoxHolder parent) { super(raf, parent); } /** Reads the box, putting appropriate information in * the RepInfo object. setModule, setBoxHeader, * setRepInfo and setDataInputStream must be called * before readBox is called. * readBox must completely consume the * box, so that the next byte to be read by the * DataInputStream is the FF byte of the next Box. */ public boolean readBox() throws IOException { if (!(_parentBox instanceof JP2HeaderBox || _parentBox instanceof CodestreamHeaderBox)) { wrongBoxContext(); return false; } initBytesRead (); int len = (int) _boxHeader.getDataLength (); int[] bits = new int[len]; for (int i = 0; i < len; i++) { bits[i] = ModuleBase.readUnsignedByte (_dstrm, _module); } NisoImageMetadata niso; niso = _module.getCurrentNiso (); niso.setBitsPerSample (bits); finalizeBytesRead (); return true; } /** Returns the name of the Box. */ protected String getSelfPropName () { return "Bits Per Component Box"; } } jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/BinaryFilterBox.java0000644000707400001440000001153010771562674026056 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College * **********************************************************************/ package edu.harvard.hul.ois.jhove.module.jpeg2000; import java.io.*; import java.util.zip.InflaterInputStream; import edu.harvard.hul.ois.jhove.*; /** * Binary Filter box (JPX). * See ISO/IEC FCD15444-2: 2000, L.9.14 * * A Binary Filter Box can subsume any number of * other boxes, which will look to the module as if they * simply replace this box. BoxHolder makes a special case * of BinaryFilterBoxes, calling the getBoxStream method to * extract the subsumed boxes. * * Only Deflate coding, not DES, is supported. * * It is assumed that a BinaryFilterBox is never * encoded inside another BinaryFilterBox. * * This is untested code, due to lack of sample files; * please report any bugs found to HUL/OIS. * * @author Gary McGath * */ public class BinaryFilterBox extends JP2Box { private final static int[] gzipuuid = { 0XEC, 0X34, 0X0B, 0X04, 0X74, 0XC5, 0X11, 0XD4, 0XA7, 0X29, 0X87, 0X9E, 0XA3, 0X54, 0X8F, 0X0E }; private DataInputStream boxStream; private JP2Box _realParent; /** * Constructor with superbox. * * @param parent parent superbox of this box * or TopLevelBoxHolder */ public BinaryFilterBox(RandomAccessFile raf, JP2Box parent) { super(raf, parent); _realParent = parent; } /** Reads the box, putting appropriate information in * the RepInfo object. setModule, setBoxHeader, * setRepInfo and setDataInputStream must be called * before readBox is called. * readBox must completely consume the * box, so that the next byte to be read by the * DataInputStream is the FF byte of the next Box. */ public boolean readBox() throws IOException { // Compare the filter type with the GZIP type. // If it's anything else, just report a property // and ignore the contents. byte[] uuidbuf = new byte[16]; ModuleBase.readByteBuf (_dstrm, uuidbuf, _module); boolean isGzip = true; for (int i = 0; i < 16; i++) { if ((int) uuidbuf[i] != gzipuuid[i]) { isGzip = false; } } // Accumulate all binary filter UUIDs into a property. _module.addBinaryFilterProp (new Property ("BinaryFilter", PropertyType.BYTE, PropertyArity.ARRAY, uuidbuf)); if (isGzip) { // report that we've left information unprocessed _repInfo.setMessage(new InfoMessage ("Binary Filter Box of type other than Gzip, contents not processed", _module.getFilePos ())); } else { // We use a CountedInputStream, which will report an // EOF after streamLimit bytes. // The caller is responsible for making sure that // the underlying stream doesn't get mixed up with this // stream for counting purposes. // We have to put a DataInputStream on top of the // InflaterInputStream, which means there are two // DataInputStreams in the stream stack. Ugly, but // should still work. int streamLimit = (int) (_boxHeader.getLength () - 16); boxStream = new DataInputStream (new InflaterInputStream (new CountedInputStream (_dstrm, streamLimit))); } // We report _bytesRead as the total number of bytes in the // box, including the stream which hasn't actually been read // yet, because that makes things easier for the caller to // keep things counted. return true; } public Object next () { BoxHeader hdr = new BoxHeader (_module, boxStream); try { hdr.readHeader (); JP2Box box = JP2Box.boxMaker (hdr.getType (), _realParent); box.setModule(_module); box.setRepInfo(_repInfo); box.setRandomAccessFile(_raf); box.setDataInputStream(boxStream); return box; } catch (IOException e) { // Will come here when the BoxHeader reaches an EOF return null; } } /** returns the InputStream which will provide the decompressed * boxes subsumed in this Box. */ public DataInputStream getBoxStream () { return boxStream; } /** Returns the name of the Box. */ protected String getSelfPropName () { return "Binary Filter Box"; } } jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/BoxHeader.java0000644000707400001440000000510510771562662024652 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.jpeg2000; import edu.harvard.hul.ois.jhove.*; import edu.harvard.hul.ois.jhove.module.Jpeg2000Module; import java.io.*; /** * Encapsulation of a JPEG 2000 box header. * * @author Gary McGath * */ public class BoxHeader { private long _length; private String _type; private Jpeg2000Module _module; private DataInputStream _dstream; private long _headerLength; /** * Constructor. * * @param mod The Module which uses this object * @param dstrm The DataInputStream reading data for the Module */ public BoxHeader (Jpeg2000Module mod, DataInputStream dstrm) { _module = mod; _dstream = dstrm; } /** * Reads 8 bytes from the beginning of the box and parses * out the box length and type. */ public void readHeader () throws IOException { _length = ModuleBase.readUnsignedInt(_dstream, true, _module); _type = _module.read4Chars (_dstream); // If the length field is 1, there is an 8-byte extended // length field. if (_length == 1) { _length = ModuleBase.readSignedLong(_dstream, true, _module); _headerLength = 16; } else { _headerLength = 8; } } /** * Returns the box length, which includes the length and * type fields. If the value returned is 0, the length * of the box is all the remaining data to the end of the file. */ public long getLength () { return _length; } /** * Returns the length of the header. * This number is equal to the number * of bytes that have been read by readHeader(). */ public long getHeaderLength () { return _headerLength; } /** * Returns the number of bytes in the Box, not including * the header. This is equivalent to * getLength() - getHeaderLength(). * If getLength() would return 0, this value is * meaningless. */ public long getDataLength () { return _length - _headerLength; } /** * Returns the box type. */ public String getType () { return _type; } } jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/BoxHolder.java0000644000707400001440000001456610771562674024715 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.jpeg2000; import edu.harvard.hul.ois.jhove.module.Jpeg2000Module; import edu.harvard.hul.ois.jhove.*; import java.io.*; import java.util.*; /** * A BoxHolder is a container for JPEG 2000 boxes. * * @author Gary McGath * */ public class BoxHolder implements Iterator { protected Jpeg2000Module _module; protected JP2Box _parentBox; protected RandomAccessFile _raf; protected DataInputStream _dstrm; protected BoxHeader _boxHeader; protected RepInfo _repInfo; protected long bytesLeft; protected long filePos; protected boolean hasBoxes; private BinaryFilterBox binaryFilterBox; /** * Constructor. */ public BoxHolder(RandomAccessFile raf) { hasBoxes = false; // subclass which is a superbox should override _raf = raf; binaryFilterBox = null; try { filePos = raf.getFilePointer (); } catch (IOException e) {} //makeInputStream (); } /** Returns the file position. * In practice, this means returning the beginning of the Box. */ protected long getFilePos () { // ghaaaaaa ... Maybe the best I can do is report // the start of the box in the file. the module's // file position is useless. Of course, for a Binary // Filter box, even getting the start of the box in // the file will be tricky. return filePos; } /** * Checks if any more subboxes are available. * This class doesn't fully conform to the Iterator interface, * as there are some cases where the lack of more boxes * won't be detected till an EOF is encounterd. So callers * should call hasNext to avoid reading overruns, and then * test the value returned by next for nullity. */ public boolean hasNext () { return (hasBoxes && bytesLeft >= 8); } /* This should return the next Box, if any. */ public Object next () { if (!hasBoxes) { return null; } try { BoxHeader subhdr; JP2Box nextBox; // If we've encountered a BinaryFilterBox, it feeds // us boxes till it's exhausted. When it has no // more boxes, we set it to null to indicate we // resume reading ordinary boxes. if (binaryFilterBox != null) { if (binaryFilterBox.hasNext ()) { nextBox = (JP2Box) binaryFilterBox.next (); } else { binaryFilterBox = null; // Fall through into normal reading } } if (bytesLeft < 8) { return null; } subhdr = new BoxHeader (_module, _dstrm); subhdr.readHeader (); bytesLeft -= subhdr.getLength (); String hType = subhdr.getType (); if ("bfil".equals (hType)) { binaryFilterBox = new BinaryFilterBox (_raf, (this instanceof JP2Box) ? (JP2Box) this : null); // If I can make the following magic actually // work correctly, then I'm starting to get somewhere. if (binaryFilterBox.hasNext ()) { return binaryFilterBox.next (); } else { // The "else" is a BinaryFilterBox with no content. // This seems unlikely, but assume it's legal and // fall through to the next box. subhdr.readHeader (); hType = subhdr.getType (); } } if ("cref".equals (hType)) { // A Cross Reference Box is replaced by another box, // which is found in the DataInputStream it produces. CrossRefBox xrefBox = new CrossRefBox (_raf, (this instanceof JP2Box) ? (JP2Box) this : null); if (!xrefBox.readBox ()) { return null; } BoxHeader xrefhdr = new BoxHeader (_module, xrefBox.getCrossRefStream()); xrefhdr.readHeader (); nextBox = JP2Box.boxMaker (xrefhdr.getType (), (this instanceof JP2Box) ? (JP2Box) this : null); return nextBox; } else { nextBox = JP2Box.boxMaker(hType, this); nextBox.setModule(_module); nextBox.setRepInfo(_repInfo); nextBox.setRandomAccessFile(_raf); nextBox.setDataInputStream(_dstrm); nextBox.setBoxHeader (subhdr); return nextBox; } } catch (IOException e) { // Probably I should be reporting an error here return null; } } /** Always throws UnsupportedOperationException. */ public void remove () throws UnsupportedOperationException { throw new UnsupportedOperationException(); } /** Utility error reporting function for a subbox overrunning * its superbox. * Sets the RepInfo's wellFormed flag to false. */ protected void superboxOverrun () { _repInfo.setMessage (new ErrorMessage ("Size of contained Box overruns " + getSelfPropName (), _module.getFilePos ())); _repInfo.setWellFormed (false); } /** Utility error reporting function for a subbox underrunning * its superbox. * Sets the RepInfo's wellFormed flag to false. */ protected void superboxUnderrun () { _repInfo.setMessage (new ErrorMessage ("Size of contained Boxes underruns " + getSelfPropName (), _module.getFilePos ())); _repInfo.setWellFormed (false); } /** Returns the name of the BoxHolder. All subclasses should * override this. */ protected String getSelfPropName () { return ""; } } jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/COCMarkerSegment.java0000644000707400001440000001202110771562667026102 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College * **********************************************************************/ package edu.harvard.hul.ois.jhove.module.jpeg2000; import java.io.*; import java.util.*; import edu.harvard.hul.ois.jhove.*; //import edu.harvard.hul.ois.jhove.module.Jpeg2000Module; /** * Class for the COC (Coding style component) marker segment. * May occur in the main or the tile part header. In the * main header it overrides the COD for the specified * component. In the tile part header it overrides the * COD for the component in the tile part. * * @author Gary McGath * */ public class COCMarkerSegment extends MarkerSegment { /** * Constructor. */ public COCMarkerSegment() { super(); } /** Process the marker segment. The DataInputStream * will be at the point of having read the marker code. The * process method must consume exactly the number * of bytes remaining in the marker segment. * * @param bytesToEat The number of bytes that must be consumed. * If it is 0 for a MarkerSegment, the * number of bytes to consume is unknown. * * @return true if segment is well-formed, * false otherwise. */ protected boolean process(int bytesToEat) throws IOException { int compIdxBytes = nCompBytes(); if (compIdxBytes == 0) { // COC found before SIZ _repInfo.setMessage (new ErrorMessage ("COC marker segment at wrong position in codestream")); return false; } int compIdx; // size of Ccoc field depends on number of components if (compIdxBytes < 257) { compIdx = ModuleBase.readUnsignedByte (_dstream, _module); } else{ compIdx = _module.readUnsignedShort (_dstream); } int codeStyle = ModuleBase.readUnsignedByte (_dstream, _module); // The SPcoc parameters int nDecomp = ModuleBase.readUnsignedByte (_dstream, _module); int codeBlockWid = ModuleBase.readUnsignedByte (_dstream, _module); int codeBlockHt = ModuleBase.readUnsignedByte (_dstream, _module); int codeBlockStyle = ModuleBase.readUnsignedByte (_dstream, _module); int xform = ModuleBase.readUnsignedByte (_dstream, _module); int precSize[] = null; if ((codeStyle & 1) != 0) { // The first parameter (8 bits) corresponds to the // N(L)LL subband. Each successive parameter corresponds // to each successive resolution level in order. // I think that means the number of bytes equals the // number of resolution levels + 1 -- but where do I get // the number of resolution levels? Based on the (highly // confusing) information about the marker segment length, // that must be the same as the number of decomposition // levels. precSize = new int[nDecomp + 1]; for (int i = 0; i < nDecomp + 1; i++) { precSize[i] = ModuleBase.readUnsignedByte (_dstream, _module); } } // Build a property and attach it to the appropriate component. This // may be a component of the codestream or of a tile part. The // number of components is apparently established only by the SIZ // marker segment and never changes for tiles or tile parts. MainOrTile cs = getMainOrTile (); List propList = new ArrayList (10); propList.add (new Property ("CodingStyle", PropertyType.INTEGER, new Integer (codeStyle))); propList.add (new Property ("NumberDecompositionLevels", PropertyType.INTEGER, new Integer (nDecomp))); propList.add (new Property ("CodeBlockWidth", PropertyType.INTEGER, new Integer (codeBlockWid))); propList.add (new Property ("CodeBlockHeight", PropertyType.INTEGER, new Integer (codeBlockHt))); propList.add (new Property ("CodeBlockStyle", PropertyType.INTEGER, new Integer (codeBlockStyle))); propList.add (new Property ("Transformation", PropertyType.INTEGER, new Integer (xform))); propList.add (new Property ("PrecinctSize", PropertyType.INTEGER, PropertyArity.ARRAY, precSize)); cs.setCompProperty (compIdx, new Property ("COC", PropertyType.PROPERTY, PropertyArity.LIST, propList)); return true; } } jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/CODMarkerSegment.java0000644000707400001440000001125110771562662026102 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.jpeg2000; import java.io.*; import java.util.*; import edu.harvard.hul.ois.jhove.*; //import edu.harvard.hul.ois.jhove.module.Jpeg2000Module; /** * Class for the COD (coding style default) marker segment. * This comes either in the main header or * after an SOT and describes the functions * used to code the entire tile. * * @author Gary McGath * */ public class CODMarkerSegment extends MarkerSegment { public CODMarkerSegment () { } /** * Processes the marker segment. The DataInputStream * will be at the point of having read the marker code. The * process method must consume exactly the number * of bytes remaining in the marker segment. * * @param bytesToEat The number of bytes that must be consumed. * If it is 0 for a MarkerSegment, the * number of bytes to consume is unknown. */ protected boolean process (int bytesToEat) throws IOException { int codeStyle = ModuleBase.readUnsignedByte (_dstream, _module); // The SGcod parameter, 32 bits int progOrder = ModuleBase.readUnsignedByte (_dstream, _module); int nLayers = _module.readUnsignedShort (_dstream); int mcTrans = ModuleBase.readUnsignedByte (_dstream, _module); // The SPcod parameters int nDecomp = ModuleBase.readUnsignedByte (_dstream, _module); int codeBlockWid = ModuleBase.readUnsignedByte (_dstream, _module); int codeBlockHt = ModuleBase.readUnsignedByte (_dstream, _module); int codeBlockStyle = ModuleBase.readUnsignedByte (_dstream, _module); int xform = ModuleBase.readUnsignedByte (_dstream, _module); int precSize[] = null; if ((codeStyle & 1) != 0) { // The first parameter (8 bits) corresponds to the // N(L)LL subband. Each successive parameter corresponds // to each successive resolution level in order. // I think that means the number of bytes equals the // number of resolution levels + 1 -- but where do I get // the number of resolution levels? Based on the (highly // confusing) information about the marker segment length, // that must be the same as the number of decomposition // levels. precSize = new int[nDecomp + 1]; for (int i = 0; i < nDecomp + 1; i++) { precSize[i] = ModuleBase.readUnsignedByte (_dstream, _module); } } MainOrTile cs = getMainOrTile (); // Set values for the tile or codestream List propList = new ArrayList (12); propList.add (new Property ("CodingStyle", PropertyType.INTEGER, new Integer (codeStyle))); propList.add (new Property ("ProgressionOrder", PropertyType.INTEGER, new Integer (progOrder))); propList.add (new Property ("NumberOfLayers", PropertyType.INTEGER, new Integer (nLayers))); propList.add (new Property ("MultipleComponentTransformation", PropertyType.INTEGER, new Integer (mcTrans))); propList.add (new Property ("NumberDecompositionLevels", PropertyType.INTEGER, new Integer (nDecomp))); propList.add (new Property ("CodeBlockWidth", PropertyType.INTEGER, new Integer (codeBlockWid))); propList.add (new Property ("CodeBlockHeight", PropertyType.INTEGER, new Integer (codeBlockHt))); propList.add (new Property ("CodeBlockStyle", PropertyType.INTEGER, new Integer (codeBlockStyle))); propList.add (new Property ("Transformation", PropertyType.INTEGER, new Integer (xform))); if (precSize != null) { propList.add (new Property ("PrecinctSize", PropertyType.INTEGER, PropertyArity.ARRAY, precSize)); } cs.setCODProperty (new Property ("CodingStyleDefault", PropertyType.PROPERTY, PropertyArity.LIST, propList)); return true; } } jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/CRGMarkerSegment.java0000644000707400001440000000463410771562676026124 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.jpeg2000; import edu.harvard.hul.ois.jhove.*; import java.io.*; /** * * Class for the CRG (component registration) * marker segment. * * @author Gary McGath * */ public class CRGMarkerSegment extends MarkerSegment { /** * Constructor. */ public CRGMarkerSegment() { super(); } /** * Processes the marker segment. The DataInputStream * will be at the point of having read the marker code. The * process method must consume exactly the number * of bytes remaining in the marker segment. * * @param bytesToEat The number of bytes that must be consumed. * If it is 0 for a MarkerSegment, the * number of bytes to consume is unknown. */ protected boolean process(int bytesToEat) throws IOException { if (_ccs.getCurTile () != null) { _repInfo.setMessage (new ErrorMessage ("CRG header allowed only in main header of codestream")); return false; } int ncomps = _cs.getNumComponents (); if (ncomps * 4 != bytesToEat) { _repInfo.setMessage (new ErrorMessage ("CRG marker segment has incorrect length")); } int[] horOffsets = new int[ncomps]; int[] vertOffsets = new int[ncomps]; for (int i = 0; i < ncomps; i++) { horOffsets[i] = _module.readUnsignedShort (_dstream); vertOffsets[i] = _module.readUnsignedShort (_dstream); } Property[] props = new Property[2]; props[0] = new Property ("HorizontalOffsets", PropertyType.INTEGER, PropertyArity.ARRAY, horOffsets); props[1] = new Property ("VerticalOffsets", PropertyType.INTEGER, PropertyArity.ARRAY, vertOffsets); _cs.setCRGProperty (new Property ("ComponentRegistration", PropertyType.PROPERTY, PropertyArity.ARRAY, props)); return true; } } jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/CaptureResolutionBox.java0000644000707400001440000000602610771562670027153 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.jpeg2000; import java.io.*; import edu.harvard.hul.ois.jhove.*; /** * Capture Resolution Box. * See I.5.3.7.1 in ISO/IEC 15444-1:2000 * * @author Gary McGath * */ public class CaptureResolutionBox extends JP2Box { /** * Constructor with superbox. * * @param parent parent superbox of this box */ public CaptureResolutionBox (RandomAccessFile raf, BoxHolder parent) { super (raf, parent); } /** Reads the box, putting appropriate information in * the RepInfo object. setModule, setBoxHeader, * setRepInfo and setDataInputStream must be called * before readBox is called. * readBox must completely consume the * box, so that the next byte to be read by the * DataInputStream is the FF byte of the next Box. */ public boolean readBox() throws IOException { if (!(_parentBox instanceof ResolutionBox)) { wrongBoxContext (); return false; } initBytesRead (); ResolutionBox resBox = (ResolutionBox) _parentBox; // Vertical Capture grid resolution num & denom int vrcNum = _module.readUnsignedShort (_dstrm); int vrcDenom = _module.readUnsignedShort (_dstrm); // Horizontal Capture grid resolution num & denom int hrcNum = _module.readUnsignedShort (_dstrm); int hrcDenom = _module.readUnsignedShort (_dstrm); // Vertical and Horizontal capture grid exponents int vrcExp = ModuleBase.readUnsignedByte (_dstrm, _module); int hrcExp = ModuleBase.readUnsignedByte (_dstrm, _module); // We need to set resolution in NisoImageMetadata // as a Rational. It seems unlikely that negative // exponents will be used (signifying resolutions // less than 1 dpi), so we figure the exponent into // the numerator. Also, this resolution is in // dots per meter, which isn't a NISO standard unit, // so we multiply the denominator by 100 to give // units per centimeter. Rational vrc = new Rational ((int) (vrcNum * Math.pow (10, vrcExp)), vrcDenom * 100); Rational hrc = new Rational ((int) (hrcNum * Math.pow (10, hrcExp)), hrcDenom * 100); NisoImageMetadata niso = _module.getCurrentNiso (); niso.setYSamplingFrequency (vrc); niso.setXSamplingFrequency (hrc); niso.setSamplingFrequencyUnit (3); finalizeBytesRead (); return true; } /** Returns the name of the Box. */ protected String getSelfPropName () { return "Capture Resolution Box"; } } jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/ChannelDefBox.java0000644000707400001440000000635310771562671025457 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.jpeg2000; import java.io.*; import edu.harvard.hul.ois.jhove.*; /** * Channel Definition Box. * See I.5.3.6 in ISO/IEC 15444-1:2000 * and ISO/IEC FCD15444-2: 2000, L.9.4.5 * * @author Gary McGath * */ public class ChannelDefBox extends JP2Box { /** * Constructor with superbox. */ public ChannelDefBox (RandomAccessFile raf, BoxHolder parent) { super (raf, parent); } /** Reads the box, putting appropriate information in * the RepInfo object. setModule, setBoxHeader, * setRepInfo and setDataInputStream must be called * before readBox is called. * readBox must completely consume the * box, so that the next byte to be read by the * DataInputStream is the FF byte of the next Box. */ public boolean readBox() throws IOException { if (!(_parentBox instanceof JP2HeaderBox || _parentBox instanceof CodestreamHeaderBox)) { wrongBoxContext(); return false; } initBytesRead (); int len = (int) _boxHeader.getDataLength (); int nchan = _module.readUnsignedShort (_dstrm); len -= 2; Property[] chans = new Property[nchan]; for (int i = 0; i < nchan; i++) { Property[] cprop = new Property[3]; int cidx = _module.readUnsignedShort (_dstrm); cprop[0] = new Property ("ChannelIndex", PropertyType.INTEGER, new Integer (cidx)); int typ = _module.readUnsignedShort (_dstrm); cprop[1] = _module.addIntegerProperty ("ChannelType", typ, JP2Strings.ctypStr, JP2Strings.ctypIdx); int assoc = _module.readUnsignedShort (_dstrm); len -= 6; // The interpretation of the assoc field depends // on the color space, so we just report it as // an integer. cprop[2] = new Property ("ChannelAssociation", PropertyType.INTEGER, new Integer (assoc)); chans[i] = new Property ("Channel", PropertyType.PROPERTY, PropertyArity.ARRAY, cprop); } _module.skipBytes (_dstrm, (int) len, _module); Property prop = new Property ("ChannelDefinition", PropertyType.PROPERTY, PropertyArity.ARRAY, chans); if (_parentBox instanceof JP2HeaderBox) { _module.addProperty (prop); } else if (_parentBox instanceof ComposLayerHdrBox) { ((ComposLayerHdrBox) _parentBox).addChannelDef (prop); } finalizeBytesRead (); return true; } /** Returns the name of the Box. */ protected String getSelfPropName () { return "Channel Definition Box"; } } jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/Codestream.java0000644000707400001440000001773110771562667025114 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College * **********************************************************************/ package edu.harvard.hul.ois.jhove.module.jpeg2000; import edu.harvard.hul.ois.jhove.*; import java.util.*; /** * The information on a codestream, extracted from a Contiguous Codestream * or Fragment Table, and the corresponding Codestream Header if any. * @author Gary McGath * */ public class Codestream extends MainOrTile { private NisoImageMetadata _niso; /* List of Tile objects associated with the codestream */ private List _tiles; /* List of lengths (Long objects) found in PPM code segments */ private List _ppmLengthList; /* Label property */ private Property _labelProperty; /* Component mapping property */ private Property _compMapProperty; /* Property generated by the SIZ marker segment */ private Property _sizProperty; /* Property generated by the CRG marker segment */ private Property _crgProperty; /* Property generated by the PaletteBox of a CodestreamHeader */ private Property _paletteProperty; /* Property generated by the ROIBox of a CodestreamHeader */ private Property _roiProperty; /* List of tile length properties */ private List tileLengthList; public Codestream () { _precSize = null; _niso = new NisoImageMetadata (); } /** Builds a * Property out of everything we've collected. */ public Property makeProperty () { List propList = new ArrayList (10); if (_labelProperty != null) { propList.add (_labelProperty); } if (_compMapProperty != null) { propList.add (_compMapProperty); } if (_paletteProperty != null) { propList.add (_paletteProperty); } if (_roiProperty != null) { propList.add (_roiProperty); } if (_sizProperty != null) { propList.add (_sizProperty); } if (_codProperty != null) { propList.add (_codProperty); } if (_qcdProperty != null) { propList.add (_qcdProperty); } if (_pocProperty != null) { propList.add (_pocProperty); } if (tileLengthList != null && !tileLengthList.isEmpty ()) { propList.add (new Property ("TileLengths", PropertyType.PROPERTY, PropertyArity.LIST, tileLengthList)); } if (_packetLengthList != null && !_packetLengthList.isEmpty ()) { propList.add (new Property ("PacketLengths", PropertyType.LONG, PropertyArity.LIST, _packetLengthList)); } if (_ppmLengthList != null && !_ppmLengthList.isEmpty ()) { propList.add (new Property ("PackedPacketHeaderLengths", PropertyType.LONG, PropertyArity.LIST, _ppmLengthList)); } if (_crgProperty != null) { propList.add (_crgProperty ); } propList.add (new Property ("NisoImageMetadata", PropertyType.NISOIMAGEMETADATA, _niso)); if (_tiles != null && !_tiles.isEmpty ()) { List tpList = new ArrayList (_tiles.size ()); ListIterator iter = _tiles.listIterator (); while (iter.hasNext ()) { Tile t = (Tile) iter.next (); tpList.add (t.makeProperty ()); } propList.add (new Property ("Tiles", PropertyType.PROPERTY, PropertyArity.LIST, tpList)); } if (!_comments.isEmpty ()) { propList.add (new Property ("Comments", PropertyType.PROPERTY, PropertyArity.LIST, _comments)); } if (_components != null) { // The component array may be only partially populated, or // not at all, so we reduce it to a List. List clist = new ArrayList (_components.length); for (int i = 0; i < _components.length; i++ ) { Property c = _components[i]; if (c != null) { clist.add (c); } } if (!clist.isEmpty ()) { propList.add (new Property ("Components", PropertyType.PROPERTY, PropertyArity.LIST, clist)); } } return new Property ("Codestream", PropertyType.PROPERTY, PropertyArity.LIST, propList); } /** Set the initial Niso values from a default Niso object. * This doesn't attempt to be complete, but sets * the values which we know could have been set from the * JP2 header. */ public void setDefaultNiso (NisoImageMetadata dNiso) { _niso.setByteOrder(dNiso.getByteOrder ()); _niso.setMimeType (dNiso.getMimeType ()); _niso.setBitsPerSample (dNiso.getBitsPerSample ()); _niso.setImageLength (dNiso.getImageLength ()); _niso.setImageWidth (dNiso.getImageWidth ()); _niso.setSamplesPerPixel (dNiso.getSamplesPerPixel ()); _niso.setCompressionScheme (dNiso.getCompressionScheme ()); _niso.setYSamplingFrequency (dNiso.getYSamplingFrequency ()); _niso.setXSamplingFrequency (dNiso.getXSamplingFrequency ()); _niso.setSamplingFrequencyUnit (dNiso.getSamplingFrequencyUnit ()); } /** Returns the images NisoImageMetadata. */ public NisoImageMetadata getNiso () { return _niso; } /** Assign a List of Tile objects to the tiles field */ public void setTiles (List tiles) { _tiles = tiles; } /** Add a tile length property to the list of tile lengths. */ public void addTileLength (Property p) { if (tileLengthList == null) { tileLengthList = new LinkedList (); } tileLengthList.add (p); } /** Add a PPM tilepart header length to the list of lengths */ public void addPPMLength (long len) { _ppmLengthList.add (new Long (len)); } /** Sets the label property. */ protected void setLabelProperty (Property p) { _labelProperty = p; } /** Sets the component mapping property. */ protected void setCompMapProperty (Property p) { _compMapProperty = p; } /** Sets the palette property. */ protected void setPaletteProperty (Property p) { _paletteProperty = p; } /** Sets the ROI property. */ protected void setROIProperty (Property p) { _roiProperty = p; } /** Sets the SIZ property. */ protected void setSIZProperty (Property p) { _sizProperty = p; } /* Sets the CRG property. */ protected void setCRGProperty (Property p) { _crgProperty = p; } /** Set a property indexed by component. * If a property for that component doesn't already * exist, it is created. prop is then * added to the property list of that property. */ public void setCompProperty (int idx, Property prop) { if (_components != null && _components.length > idx) { if (_components[idx] == null) { // Have to create the component property _components[idx] = new Property ("Component", PropertyType.PROPERTY, PropertyArity.LIST, new LinkedList ()); } List pList = (List) _components[idx].getValue (); pList.add (prop); } } } jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/CodestreamHeaderBox.java0000644000707400001440000000773010771562657026673 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College * **********************************************************************/ package edu.harvard.hul.ois.jhove.module.jpeg2000; import java.io.*; import edu.harvard.hul.ois.jhove.*; /** * Codestream Header box. * This is similar to a JP2HeaderBox, and has many of the same subboxes, * but applies to a single codestream. * * See ISO/IEC FCD15444-2: 2000, L.9.3 * * @author Gary McGath * */ public class CodestreamHeaderBox extends JP2Box { private Codestream curCodestream; /** * Constructor with superbox. * * @param parent Must be null or the TopLevelBoxHolder */ public CodestreamHeaderBox(RandomAccessFile raf, BoxHolder parent) { super(raf, parent); } /** Reads the box, putting appropriate information in * the RepInfo object. setModule, setBoxHeader, * setRepInfo and setDataInputStream must be called * before readBox is called. * readBox must completely consume the * box, so that the next byte to be read by the * DataInputStream is the FF byte of the next Box. */ public boolean readBox() throws IOException { if (_parentBox != null) { wrongBoxContext(); return false; } initBytesRead (); hasBoxes = true; int nch = _module.getNCodestreamHeaders () + 1; _module.setNCodestreams (nch); curCodestream = _module.getCodestream (nch); int sizeLeft = (int) _boxHeader.getDataLength() ; BoxHeader subhdr = new BoxHeader (_module, _dstrm); int state = 0; // state variable for checking progress of boxes JP2Box box = null; while (hasNext ()) { box = (JP2Box) next (); if (state == 0 && box instanceof LabelBox) { state = 1; if (!box.readBox ()) { return false; } curCodestream.setLabelProperty (new Property ("Label", PropertyType.STRING, ((LabelBox) box).getLabel ())); // Read the next box box = (JP2Box) next (); if (box == null) { break; } } // First box, except perhaps for the label box, // is the image header. else if (state <= 1) { if (box instanceof ImageHeaderBox) { state = 2; if (!box.readBox ()) { return false; } } else { _repInfo.setMessage (new ErrorMessage ("First box of Codestream Header must be image header", _module.getFilePos ())); _repInfo.setWellFormed (false); return false; } } else { if (box instanceof BPCCBox || box instanceof PaletteBox || box instanceof ComponentMapBox || box instanceof ROIBox) { if (!box.readBox ()) { return false; } } else { // Other boxes are legal; skip over them box.skipBox (); } } } finalizeBytesRead (); return true; } /** Returns the associated Codestream object. */ protected Codestream getCodestream () { return curCodestream; } /** Returns the name of the Box. */ protected String getSelfPropName () { return "Codestream Header Box"; } } jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/CodestreamRegBox.java0000644000707400001440000000712210771562667026214 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College * **********************************************************************/ package edu.harvard.hul.ois.jhove.module.jpeg2000; import java.io.*; import edu.harvard.hul.ois.jhove.*; /** * Codestream Registration Box. * See ISO/IEC FCD15444-2: 2000, L.9.4.7 * * @author Gary McGath * */ public class CodestreamRegBox extends JP2Box { /** * Constructor with superbox. * * @param parent parent superbox of this box * (must be a ComposLayerHdrBox) */ public CodestreamRegBox(RandomAccessFile raf, BoxHolder parent) { super(raf, parent); } /** Reads the box, putting appropriate information in * the RepInfo object. setModule, setBoxHeader, * setRepInfo and setDataInputStream must be called * before readBox is called. * readBox must completely consume the * box, so that the next byte to be read by the * DataInputStream is the FF byte of the next Box. */ public boolean readBox() throws IOException { if (!(_parentBox instanceof ComposLayerHdrBox)) { wrongBoxContext(); return false; } Property[] propArray = new Property[3]; propArray[0] = new Property ("HorizontalGridSize", PropertyType.INTEGER, new Integer (_module.readUnsignedShort (_dstrm))); propArray[1] = new Property ("VerticalGridSize", PropertyType.INTEGER, new Integer (_module.readUnsignedShort (_dstrm))); int bytesLeft = (int) _boxHeader.getDataLength() - 4; // Each codestream entry is 6 bytes long (a short and 4 bytes) int nStreams = bytesLeft / 6; Property[] streamsProp = new Property[nStreams]; for (int i = 0; i < nStreams; i++) { // Build a property for one codestream Property[] csProp = new Property[5]; csProp[0] = new Property ("CodestreamNumber", PropertyType.INTEGER, new Integer (_module.readUnsignedShort (_dstrm))); csProp[1] = new Property ("HorizontalResolution", PropertyType.INTEGER, new Integer (ModuleBase.readUnsignedByte (_dstrm, _module))); csProp[2] = new Property ("VerticalResolution", PropertyType.INTEGER, new Integer (ModuleBase.readUnsignedByte (_dstrm, _module))); csProp[3] = new Property ("HorizontalOffset", PropertyType.INTEGER, new Integer (ModuleBase.readUnsignedByte (_dstrm, _module))); csProp[4] = new Property ("VerticalOffset", PropertyType.INTEGER, new Integer (ModuleBase.readUnsignedByte (_dstrm, _module))); streamsProp[i] = new Property ("Codestreams", PropertyType.PROPERTY, PropertyArity.ARRAY, csProp); } ((ComposLayerHdrBox) _parentBox).addCodestreamReg (new Property ("CodestreamRegistration", PropertyType.PROPERTY, PropertyArity.ARRAY, streamsProp)); return true; } /** Returns the name of the Box. */ protected String getSelfPropName () { return "Codestream Registration Box"; } } jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/ColorGroupBox.java0000644000707400001440000000476010771562666025567 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College * **********************************************************************/ package edu.harvard.hul.ois.jhove.module.jpeg2000; import edu.harvard.hul.ois.jhove.*; import java.io.*; /** * Color Group Box. * See ISO/IEC FCD15444-2: 2000, L.9.4.1 * * * @author Gary McGath * */ public class ColorGroupBox extends JP2Box { /** * Constructor with superbox. * * @param parent parent superbox of this box * (must be a ComposLayerHdrBox) */ public ColorGroupBox(RandomAccessFile raf, BoxHolder parent) { super(raf, parent); } /** Reads the box, putting appropriate information in * the RepInfo object. setModule, setBoxHeader, * setRepInfo and setDataInputStream must be called * before readBox is called. * readBox must completely consume the * box, so that the next byte to be read by the * DataInputStream is the FF byte of the next Box. */ public boolean readBox() throws IOException { // A Color Group box consists of 0 or more color specification // boxes. It is allowed only in a Compositing Layer Header box. if (!(_parentBox instanceof ComposLayerHdrBox)) { wrongBoxContext(); return false; } initBytesRead (); int sizeLeft = (int) _boxHeader.getDataLength() ; BoxHeader subhdr = new BoxHeader (_module, _dstrm); int state = 0; // state variable for checking progress of boxes JP2Box box = null; while (hasNext ()) { box = (JP2Box) next (); if (box == null) { break; } if (box instanceof ColorSpecBox) { if (!box.readBox ()) { return false; } } else { box.skipBox (); } } finalizeBytesRead (); return false; } /** Adds a color spec property to the parent Compositing Layer * Header Box. */ protected void addColorSpec (Property p) { ((ComposLayerHdrBox) _parentBox).addColorSpec (p); } /** Returns the name of the Box. */ protected String getSelfPropName () { return "Color Group Box"; } } jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/IPRBox.java0000644000707400001440000000367310771562675024130 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.jpeg2000; import java.io.*; import edu.harvard.hul.ois.jhove.*; /** * Intellectual Property Rights box. * See I.6 in ISO/IEC 15444-1:2000 * * The spec says nothing about the content of the IPR box, * so the generated Property reports it as a sequence of bytes. * * @author Gary McGath * */ public class IPRBox extends JP2Box { /** * Constructor with superbox. * * @param parent parent superbox of this box */ public IPRBox (RandomAccessFile raf, BoxHolder parent) { super (raf); } /** Reads the box, putting appropriate information in * the RepInfo object. setModule, setBoxHeader, * setRepInfo and setDataInputStream must be called * before readBox is called. * readBox must completely consume the * box, so that the next byte to be read by the * DataInputStream is the FF byte of the next Box. */ public boolean readBox() throws IOException { initBytesRead (); int len = (int) _boxHeader.getDataLength (); byte[] bytes = new byte[len]; for (int i = 0; i < len; i++) { bytes[i] = (byte) ModuleBase.readUnsignedByte (_dstrm, _module); } _module.addProperty (new Property ("IntellectualPropertyRights", PropertyType.BYTE, PropertyArity.ARRAY, bytes)); finalizeBytesRead (); return true; } /** Returns the name of the Box. */ protected String getSelfPropName () { return "Intellectual Property Rights Box"; } } jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/ColorSpecBox.java0000644000707400001440000001542210771562670025355 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.jpeg2000; import edu.harvard.hul.ois.jhove.*; import java.io.*; import java.util.*; /** * Color specification box. * See I.5.3.3 in ISO/IEC 15444-1:2000 * and ISO/IEC FCD15444-2: 2000, L.9.4.2 * * @author Gary McGath * */ public class ColorSpecBox extends JP2Box { /** * Constructor with superbox. * * @param parent parent superbox of this box * (must be JP2HeaderBox or ColorGroupBox) */ public ColorSpecBox (RandomAccessFile raf, BoxHolder parent) { super (raf, parent); } /** Reads the box, putting appropriate information in * the RepInfo object. setModule, setBoxHeader, * setRepInfo and setDataInputStream must be called * before readBox is called. * readBox must completely consume the * box, so that the next byte to be read by the * DataInputStream is the FF byte of the next Box. */ public boolean readBox() throws IOException { if (!(_parentBox instanceof JP2HeaderBox || _parentBox instanceof ColorGroupBox)) { wrongBoxContext(); return false; } initBytesRead (); int len = (int) _boxHeader.getDataLength (); List subProps = new ArrayList (2); Property prop = new Property ("ColorSpec", PropertyType.PROPERTY, PropertyArity.LIST, subProps); int meth = ModuleBase.readUnsignedByte (_dstrm, _module); if (meth > 2) { _module.setJP2Compliant (false); // only 1-2 recognized by JP2 } subProps.add (_module.addIntegerProperty("Method", meth, JP2Strings.methodStr)); // Precedence. Used in JPX only. int prec = ModuleBase.readUnsignedByte (_dstrm, _module); subProps.add (new Property ("Precedence", PropertyType.INTEGER, new Integer (prec))); // The approx field provides a litmus test for distinguishing // a JP2 file from a JPX. JP2 may have only 0 for this value; // JPX must have a non-zero value. int approx = ModuleBase.readUnsignedByte (_dstrm, _module); if (approx == 0) { _module.setJPXCompliant (false); subProps.add (new Property ("Approx", PropertyType.INTEGER, new Integer (0))); } else { _module.setJP2Compliant (false); subProps.add (_module.addIntegerProperty("Approx", approx, JP2Strings.approxStr, JP2Strings.approxIdx)); } if (meth == 1) { // with meth = 1, we have an enumerated colorspace long enumCS = _module.readUnsignedInt (_dstrm); _module.skipBytes (_dstrm, len - 7, _module); Property p; p = _module.addIntegerProperty ("EnumCS", (int) enumCS, JP2Strings.enumCSStr); subProps.add (p); } else if (meth == 2 ) { // Code by Justin Littman incorporated here. // With meth = 2, the profile must be either a Monochrome // Input or a Three-Component Matrix-Based Input profile, // as defined in ICC.1:1998-09. //Read the ICC profile //Skip the header (128 bytes) _module.skipBytes(_dstrm, 128, _module); //Tag count long tagCount = _module.readUnsignedInt(_dstrm); HashSet tagSignatureSet = new HashSet(); for (int i=0; i < tagCount; i++) { //Read the tag tagSignatureSet.add(_module.read4Chars(_dstrm)); //Skip the rest of the tag table entry _module.skipBytes(_dstrm, 8, _module); } //Check if Monochrome Input Profile if (tagSignatureSet.contains("desc") && tagSignatureSet.contains("kTRC") && tagSignatureSet.contains("wtpt") && tagSignatureSet.contains("cprt")) { subProps.add (new Property ("RestrictedICCProfile", PropertyType.STRING, "Monochrome Input Profile")); } //Check if Three-Component Matrix-Based Input Profile else if (tagSignatureSet.contains("desc") && tagSignatureSet.contains("rXYZ") && tagSignatureSet.contains("gXYZ") && tagSignatureSet.contains("bXYZ") && tagSignatureSet.contains("rTRC") && tagSignatureSet.contains("gTRC") && tagSignatureSet.contains("bTRC") && tagSignatureSet.contains("wtpt") && tagSignatureSet.contains("cprt")) { subProps.add (new Property ("RestrictedICCProfile", PropertyType.STRING, "Three-Component Matrix-Based Input Profile")); } //Not a valid method 2 box else { //_module.setJP2Compliant (false); _repInfo.setMessage(new ErrorMessage ("Color spec box with method 2 has unrecognized ICC profile", filePos)); _repInfo.setValid(false); } } else { // We have an ICC profile, or else a method which isn't // defined in the specification. This excludes it // from the JP2 profile. _module.setJP2Compliant (false); } // If it's in a JP2 Header, add to the default color specs. // If it's in a Color Group Box, add to Compositing Layer // properties. if (_parentBox instanceof JP2HeaderBox) { _module.addColorSpec (prop); } else if (_parentBox instanceof ColorGroupBox) { ((ColorGroupBox) _parentBox).addColorSpec (prop); } // Skip any bytes we haven't read if (_boxHeader.getLength () != 0) { _module.skipBytes (_dstrm, (int) (len - (_module.getFilePos () - startBytesRead)), _module); } finalizeBytesRead (); _module.setColorSpecSeen (true); return true; } /** Returns the name of the Box. */ protected String getSelfPropName () { return "Color Specification Box"; } } jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/CommentMarkerSegment.java0000644000707400001440000000444310771562655027106 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.jpeg2000; import java.io.IOException; import edu.harvard.hul.ois.jhove.*; /** * Class for the COM (Comment) marker segment. * This comes either in the main header or * after an SOT. * * @author Gary McGath * */ public class CommentMarkerSegment extends MarkerSegment { /** * Constructor. */ public CommentMarkerSegment() { super(); } /** Process the marker segment. The DataInputStream * will be at the point of having read the marker code. The * process method must consume exactly the number * of bytes remaining in the marker segment. * * @param bytesToEat The number of bytes that must be consumed. * If it is 0 for a MarkerSegment, the * number of bytes to consume is unknown. * * @return true if segment is well-formed, * false otherwise. */ protected boolean process(int bytesToEat) throws IOException { MainOrTile cs = getMainOrTile (); int rcom = _module.readUnsignedShort (_dstream); Property prop; byte[] byteBuf = new byte[bytesToEat - 2]; ModuleBase.readByteBuf (_dstream, byteBuf, _module); switch (rcom) { case 0: // Binary comment prop = new Property ("Comment", PropertyType.BYTE, PropertyArity.ARRAY, byteBuf); break; case 1: // ISO Latin comment prop = new Property ("Comment", PropertyType.STRING, new String (byteBuf)); break; default: _repInfo.setMessage( (new ErrorMessage ("Unrecognized comment type"))); return false; // other values are reserved } cs.addComment (prop); return true; } } jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/CompOptionsBox.java0000644000707400001440000000333610771562665025743 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.jpeg2000; import java.io.*; /** * Composition options box (JPX). * * See ISO/IEC FCD15444-2: 2000, L.9.10.1 * * @author Gary McGath * */ public class CompOptionsBox extends JP2Box { /** * Constructor with superbox. * * @param parent parent superbox of this box */ public CompOptionsBox(RandomAccessFile raf, BoxHolder parent) { super(raf, parent); } /** Reads the box, putting appropriate information in * the RepInfo object. setModule, setBoxHeader, * setRepInfo and setDataInputStream must be called * before readBox is called. * readBox must completely consume the * box, so that the next byte to be read by the * DataInputStream is the FF byte of the next Box. */ public boolean readBox() throws IOException { if (!(_parentBox instanceof CompositionBox)) { wrongBoxContext (); return false; } initBytesRead (); if (_boxHeader.getDataLength () != 10) { wrongBoxSize (); return false; } CompositionBox parent = (CompositionBox) _parentBox; parent.setHeight (_module.readUnsignedInt (_dstrm)); parent.setWidth (_module.readUnsignedInt (_dstrm)); parent.setLoop (_module.readUnsignedShort (_dstrm)); finalizeBytesRead (); return true; } } jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/ComponentMapBox.java0000644000707400001440000000667510771562654026100 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.jpeg2000; import java.io.*; import edu.harvard.hul.ois.jhove.*; /** * Component Mapping Box. * See I.5.3.5 in ISO/IEC 15444-1:2000 * * @author Gary McGath * */ public class ComponentMapBox extends JP2Box { /** * Constructor with superbox. * * @param parent parent superbox of this box */ public ComponentMapBox (RandomAccessFile raf, BoxHolder parent) { super (raf, parent); } /** Reads the box, putting appropriate information in * the RepInfo object. setModule, setBoxHeader, * setRepInfo and setDataInputStream must be called * before readBox is called. * readBox must completely consume the * box, so that the next byte to be read by the * DataInputStream is the FF byte of the next Box. */ public boolean readBox() throws IOException { if (!(_parentBox instanceof JP2HeaderBox || _parentBox instanceof CodestreamHeaderBox)) { wrongBoxContext(); return false; } initBytesRead (); int len = (int) _boxHeader.getDataLength (); int ncomp = len / 4; Property[] parray = new Property[ncomp]; App app = _module.getApp (); // Build the array of properties for each component. // Components potentially have lots of stuff attached // to them, so probably I should define a Component // class. Need to determine how the Component Mapping // relates to component information in a codestream. // Or maybe this doesn't have anything to do with it. for (int i = 0; i < ncomp; i++) { Property[] cprop = new Property[3]; int index = _module.readUnsignedShort (_dstrm); cprop[0] = new Property ("ComponentIndex", PropertyType.INTEGER, new Integer (index)); int mtyp = ModuleBase.readUnsignedByte (_dstrm, _module); cprop[1] = _module.addIntegerProperty ("MTyp", mtyp, JP2Strings.mtypStr); int pcol = ModuleBase.readUnsignedByte (_dstrm, _module); cprop[2] = new Property ("PaletteComponent", PropertyType.INTEGER, new Integer (pcol)); parray[i] = new Property ("Component", PropertyType.PROPERTY, PropertyArity.ARRAY, cprop); } // put constructed property into the Module Property cmProp = new Property ("ComponentMapping", PropertyType.PROPERTY, PropertyArity.ARRAY, parray); if (_parentBox instanceof CodestreamHeaderBox) { Codestream cs = ((CodestreamHeaderBox) _parentBox).getCodestream (); cs.setCompMapProperty (cmProp); } else { _module.addProperty (cmProp); } finalizeBytesRead (); return true; } /** Returns the name of the Box. */ protected String getSelfPropName () { return "Component Mapping Box"; } } jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/ComposLayerHdrBox.java0000644000707400001440000001205510771562671026357 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College * **********************************************************************/ package edu.harvard.hul.ois.jhove.module.jpeg2000; import java.io.*; import java.util.*; import edu.harvard.hul.ois.jhove.*; /** * Compositing Layer Header Box (JPX superbox). * See ISO/IEC FCD15444-2: 2000, L.9.4 * * @author Gary McGath * */ public class ComposLayerHdrBox extends JP2Box { private Property label; private Property opacityProp; private Property channelDefProp; private Property codestreamRegProp; private List colorSpecs; /** * Constructor with superbox. * * @param parent parent superbox of this box */ public ComposLayerHdrBox(RandomAccessFile raf, BoxHolder parent) { super(raf, parent); } /** Reads the box, putting appropriate information in * the RepInfo object. setModule, setBoxHeader, * setRepInfo and setDataInputStream must be called * before readBox is called. * readBox must completely consume the * box, so that the next byte to be read by the * DataInputStream is the FF byte of the next Box. */ public boolean readBox() throws IOException { if (_parentBox != null) { // Box must be at top level. wrongBoxContext(); return false; } initBytesRead (); hasBoxes = true; colorSpecs = new LinkedList (); // Unlike some other boxes, compositing layer boxes // are numbered by their order in the file, starting // with 0. A definite case of design by committee. int sizeLeft = (int) _boxHeader.getDataLength() ; //BoxHeader subhdr = new BoxHeader (_module, _dstrm); int state = 0; // state variable for checking progress of boxes JP2Box box = null; boolean hasOpacity = false; boolean hasChannelDef = false; while (hasNext ()) { box = (JP2Box) next (); if (box == null) { break; } if (box instanceof ColorGroupBox || box instanceof OpacityBox || box instanceof ChannelDefBox || box instanceof CodestreamRegBox || box instanceof IPRBox || box instanceof ResolutionBox || box instanceof LabelBox) { if (!box.readBox ()) { return false; } if (box instanceof OpacityBox) { hasOpacity = true; } else if (box instanceof ChannelDefBox) { hasChannelDef = true; } if (box instanceof LabelBox) { label = new Property ("Label", PropertyType.STRING, ((LabelBox) box).getLabel ()); } } else { box.skipBox (); } } if (hasOpacity && hasChannelDef) { _repInfo.setMessage (new ErrorMessage ("Compositing Layer Header may not have both " + "Opacity and Channel Definition Boxes", _module.getFilePos ())); _repInfo.setValid (false); } finalizeBytesRead (); List propList = new ArrayList (4); if (label != null) { propList.add (label); } if (!colorSpecs.isEmpty ()) { propList.add (new Property ("ColorSpecs", PropertyType.PROPERTY, PropertyArity.LIST, colorSpecs)); } if (opacityProp != null) { propList.add (opacityProp); } if (channelDefProp != null) { propList.add (channelDefProp); } if (codestreamRegProp != null) { propList.add (codestreamRegProp); } _module.addComposLayer(new Property ("CompositeLayerHeader", PropertyType.PROPERTY, PropertyArity.LIST, propList)); return true; } /** Add a color specification property. */ protected void addColorSpec (Property p) { colorSpecs.add (p); } /** Add an opacity property. */ protected void addOpacity (Property p) { opacityProp = p; } /** Add channel definition property. */ protected void addChannelDef (Property p) { channelDefProp = p; } /** Add codestream registration property. */ protected void addCodestreamReg (Property p) { codestreamRegProp = p; } /** Returns the name of the Box. */ protected String getSelfPropName () { return "Compositing Layer Header Box"; } } jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/CompositionBox.java0000644000707400001440000001141010771562656025764 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.jpeg2000; import edu.harvard.hul.ois.jhove.*; import java.io.*; import java.util.*; /** * Composition Box (JPX). * * See ISO/IEC FCD15444-2: 2000, L.9.10 * * @author Gary McGath * */ public class CompositionBox extends JP2Box { private List instSets; private long _height; private long _width; private int _loop; /** * Constructor with superbox. * * @param parent parent superbox of this box */ public CompositionBox(RandomAccessFile raf, BoxHolder parent) { super(raf, parent); } /** Reads the box, putting appropriate information in * the RepInfo object. setModule, setBoxHeader, * setRepInfo and setDataInputStream must be called * before readBox is called. * readBox must completely consume the * box, so that the next byte to be read by the * DataInputStream is the FF byte of the next Box. */ public boolean readBox() throws IOException { JP2Box box; if (_parentBox != null) { // May not occur in a superbox wrongBoxContext(); return false; } initBytesRead (); hasBoxes = true; instSets = new LinkedList (); // A Composition box is a superbox which contains one // Composition Options Box followed by 0 (?) or more // Instruction Set Boxes. //BoxHeader subhdr = new BoxHeader (_module, _dstrm); //subhdr.readHeader (); if (!hasNext ()) { emptyBox (); return false; } // Read the options box box = (JP2Box) next (); if (!(box instanceof CompOptionsBox)) { _repInfo.setMessage (new ErrorMessage ("First box in Composition Box must be " + "Composition Options Box", _module.getFilePos())); _repInfo.setWellFormed (false); return false; } long sizeLeft = _boxHeader.getDataLength () - box.getLength (); // box = new CompOptionsBox (this); // box.setBoxHeader (subhdr); // box.setDataInputStream (_dstrm); // box.setRandomAccessFile (_raf); // box.setModule (_module); // box.setRepInfo (_repInfo); if (!box.readBox ()) { return false; } // Read the instruction set boxes while (hasNext ()) { box = (JP2Box) next (); if (box == null) { break; } if (box instanceof InstructionSetBox) { if (!box.readBox ()) { return false; } } else { box.skipBox (); } } // A box has to be at least 8 bytes long, and there must // not be any bytes left over. if (sizeLeft != 0) { // Underran the superbox -- get out quick superboxUnderrun (); return false; } finalizeBytesRead (); List propList = new ArrayList (4); propList.add (new Property ("Width", PropertyType.LONG, new Long (_width))); propList.add (new Property ("Height", PropertyType.LONG, new Long (_height))); propList.add (new Property ("Loop", PropertyType.INTEGER, new Integer (_loop))); if (!instSets.isEmpty ()) { propList.add (new Property ("InstructionSets", PropertyType.PROPERTY, PropertyArity.LIST, instSets)); } _module.addProperty (new Property ("Composition", PropertyType.PROPERTY, PropertyArity.LIST, propList)); return true; } /** Add an instruction set property to the list. * This is called from InstructionSetBox. */ protected void addInstSet (Property p) { instSets.add (p); } /** Set the height value. This is called from * CompositionBox. */ protected void setHeight (long h) { _height = h; } /** Set the height value. This is called from * CompositionBox. */ protected void setWidth (long w) { _width = w; } /** Set the loop value. This is called from * CompositionBox. */ protected void setLoop (int l) { _loop = l; } } jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/ContCodestream.java0000644000707400001440000002130111321711367025705 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College * **********************************************************************/ package edu.harvard.hul.ois.jhove.module.jpeg2000; import edu.harvard.hul.ois.jhove.*; import edu.harvard.hul.ois.jhove.module.Jpeg2000Module; import java.io.*; import java.util.*; /** * Encapsulation of a JPEG 2000 codestream. * * This is based on the information in Appendix A of * ISO/IEC 15444-1:2000(E). That standard "does not * include a definition of compliance or conformance." * * @author Gary McGath * */ public class ContCodestream { private Codestream _codestream; private long _length; private Jpeg2000Module _module; private DataInputStream _dstream; private List _tileParts; private List _tiles; private long _tileLeft; /* Tile for which we have most recently seen an unclosed SOT */ private Tile _curTile; /* Set to true when a PPM marker segment is found */ private boolean ppmSeen; /* Constants defining codestream markers */ private final static int SOC = 0X4F, // start of codestream COD = 0X52, // coding style default COC = 0X53, // coding style component TLM = 0X55, // tile-part lengths PLM = 0X57, // packet length, main header PLT = 0X58, // packet length, tile-part header QCD = 0X5C, // quantization default QCC = 0X5D, // quantization component RGN = 0X5E, // region of interest POC = 0X5F, // progression order change PPM = 0X60, // Packed packet headers, main header PPT = 0X61, // packed packet headers, tile-part header CRG = 0X63, // component registration COM = 0X64, // comment SOT = 0X90, // start of tile part SOP = 0X91, // start of packet EPH = 0X92, // end of packet header SOD = 0X93, // start of data EOC = 0XD9, // end of codestream SIZ = 0X51; // image and tile size /** * Constructor. * * @param length Length of the codestream, exclusive of the * box header. If the codestream box has a length * field of 0, pass 0 for this parameter. */ public ContCodestream (Jpeg2000Module module, DataInputStream dstream, long length) { _module = module; _dstream = dstream; _length = length; _tiles = new LinkedList (); _tileParts = new LinkedList (); // Do I want both lists? ppmSeen = false; } /** Reading a codestream generates various bits of information about * the image. These are made available after reading through * accessor functions. * * @param cs The image which this codestream defines. * Must have a non-null codestream * field. * * @param info The RepInfo object which accumulates information * about the document. Used for reporting errors. * * @return True if no fatal errors detected, * false if error prevents safe continuation */ public boolean readCodestream (Codestream cs, RepInfo info) throws IOException { final String badStream = "Ill-formed codestream"; _codestream = cs; long lengthLeft = _length; _tileLeft = 0; boolean socSeen = false; // flag to note an SOC marker has been seen // length may be 0, signifying that we go till EOF if (lengthLeft == 0) { lengthLeft = Long.MAX_VALUE; } try { while (lengthLeft > 0) { // "Marker segments" are followed by a length parameter, // but "markers" aren't. int ff = ModuleBase.readUnsignedByte (_dstream, _module); if (ff != 0XFF) { info.setMessage (new ErrorMessage (badStream)); info.setWellFormed (false); return false; } int marker = ModuleBase.readUnsignedByte (_dstream, _module); if (marker == 0X4F) { // we got the SOC marker, as expected socSeen = true; } MarkerSegment ms = MarkerSegment.markerSegmentMaker (marker); ms.setCodestream (cs); ms.setContCodestream (this); ms.setDataInputStream (_dstream); ms.setRepInfo (info); ms.setModule (_module); int markLen = ms.readMarkLen (); if (!ms.process (markLen == 0 ? 0 : markLen - 2)) { info.setMessage (new ErrorMessage ("Invalid marker segment")); info.setWellFormed (false); return false; } // markLen includes the marker length bytes, // but not the marker bytes if (!(ms instanceof Marker)) { lengthLeft -= markLen + 2; // Count down on the bytes in a tile if we're in one if (_tileLeft > 0) { _tileLeft -= markLen + 2; } } else { // It's a plain marker -- no length data. lengthLeft -= 2; if (_tileLeft > 0) { _tileLeft -= 2; } if (marker == SOD) { // 0X93 is SOD, which is followed by a bitstream. // We skip the number of bytes not yet deducted from _tileLeft _module.skipBytes (_dstream, (int) _tileLeft, _module); lengthLeft -= _tileLeft; _tileLeft = 0; } else if (marker == EOC) { break; // end of codestream } } } } catch (EOFException e) { // we're done } if (!socSeen) { info.setMessage (new ErrorMessage (badStream)); info.setWellFormed (false); return false; } _codestream.setTiles (_tiles); return true; } /** Returns the list of tiles. The elements are Tile objects. */ public List getTiles () { return _tiles; } /** Set the number of bytes remaining in the current tile. * For use by MarkerSegment subclasses. */ protected void setTileLeft (long tileLeft) { _tileLeft = tileLeft; } /** Gets the tile whose index is idx. */ protected Tile getTile (int idx) { // If we haven't reached this index before, add a tile. // Tiles are supposed to be added sequentially, but // PIAV. while (_tiles.size () <= idx) { _tiles.add (new Tile ()); } return (Tile) _tiles.get (idx); } /** Sets the value of curTile. */ protected void setCurTile (Tile tile) { _curTile = tile; } /** Sets the value of the ppmSeen flag, signifying that * a PPM marker segment has been encountered. */ protected void setPPMSeen (boolean b) { ppmSeen = b; } /** Gets the value of curTile. May be null. */ protected Tile getCurTile () { return _curTile; } /** Returns the value of the ppmSeen flag, signifying that * a PPM marker segment has been encountered. */ protected boolean isPPMSeen () { return ppmSeen; } /* Based on marker code, return true if this is a marker * segment (i.e., it has parameters). The documentation * isn't fully clear, but I think the only way to determine * what is a marker is to enumerate all values that are * markers. */ private static boolean isSegment (int marker) { if ((marker >= 0X30 && marker <= 0X3F) || marker == SOC || // start of codestream marker == EPH || // end of packet header marker == SOD || // start of data marker == EOC) { // end of codestream return false; } return true; } } jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/ContCodestreamBox.java0000644000707400001440000000426610771562663026404 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.jpeg2000; import java.io.*; import edu.harvard.hul.ois.jhove.*; /** * Continuous codestream box. * See I.5.4 in ISO/IEC 15444-1:2000 * * @author Gary McGath * */ public class ContCodestreamBox extends JP2Box { /** * Constructor with superbox. * * @param parent parent superbox of this box */ public ContCodestreamBox (RandomAccessFile raf, BoxHolder parent) { super (raf, parent); } /** Reads the box, putting appropriate information in * the RepInfo object. setModule, setBoxHeader, * setRepInfo and setDataInputStream must be called * before readBox is called. * readBox must completely consume the * box, so that the next byte to be read by the * DataInputStream is the FF byte of the next Box. * * The reading and interpretation of the actual codestream * occurs within the execution of readBox. */ public boolean readBox() throws IOException { initBytesRead (); // Must come after the JP2 header if (!_module.isJP2HdrSeen()) { _repInfo.setMessage (new ErrorMessage (noJP2Hdr, _module.getFilePos ())); return false; } int ncs = _module.getNCodestreams () + 1; _module.setNCodestreams (ncs); Codestream curCodestream = _module.getCodestream (ncs); long len = _boxHeader.getLength () == 0 ? 0 : _boxHeader.getDataLength (); ContCodestream ccs = new ContCodestream (_module, _dstrm, len); boolean retval = ccs.readCodestream (curCodestream, _repInfo); finalizeBytesRead (); return retval; } /** Returns the name of the Box. */ protected String getSelfPropName () { return "Contiguous Codestream Box"; } } jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/CrossRefBox.java0000644000707400001440000000625610771562674025223 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.jpeg2000; import edu.harvard.hul.ois.jhove.*; import java.io.*; import java.util.*; /** * Cross Reference Box (JPX). * A Cross Reference Box may be found in a Codestream * Header, Compositing Layer Header, or Association box. * When it is encountered, the box to which it refers * should be substituted for the Cross Reference Box. * Interesting features of the box are that it * isn't all in one place, but is * scattered through multiple locations by a fragment list, * and it doesn't follow standard superbox rules. * * * See ISO/IEC FCD15444-2: 2000, L.9.7 * * @author Gary McGath * */ public class CrossRefBox extends JP2Box { DataInputStream fragStream; /** * Constructor with superbox. * * @param parent parent superbox of this box * or TopLevelBoxHolder */ public CrossRefBox(RandomAccessFile raf, BoxHolder parent) { super(raf, parent); } /** Reads the box, putting appropriate information in * the RepInfo object. setModule, setBoxHeader, * setRepInfo and setDataInputStream must be called * before readBox is called. * readBox must completely consume the * box, so that the next byte to be read by the * DataInputStream is the FF byte of the next Box. */ public boolean readBox() throws IOException { if (! (_parentBox instanceof CodestreamHeaderBox || _parentBox instanceof ComposLayerHdrBox || _parentBox instanceof AssociationBox)) { wrongBoxContext (); return false; } initBytesRead (); hasBoxes = true; // Skip the box type _module.read4Chars (_dstrm); bytesLeft -= 4; JP2Box box = null; if (hasNext ()) { box = (JP2Box) next (); } if (!(box instanceof FragmentListBox)) { _repInfo.setMessage (new ErrorMessage ("Cross Reference Box does not contain Fragment List Box", _module.getFilePos ())); _repInfo.setWellFormed (false); return false; } box.readBox (); List fragList = ((FragmentListBox) box).getFragmentList(); //App app = _module.getApp(); JhoveBase base = _module.getBase (); int bufSize = base.getBufferSize (); fragStream = new DataInputStream (new FragmentInputStream (fragList, _raf, bufSize)); finalizeBytesRead (); return false; } /** Returns a DataInputStream based on a FragmentInputStream * so that the fragments can be read as a single entity. */ public DataInputStream getCrossRefStream () { return fragStream; } /** Returns the name of the Box. */ protected String getSelfPropName () { return "Cross Reference Box"; } } jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/DDResolutionBox.java0000644000707400001440000000730310771562675026043 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.jpeg2000; import java.io.*; import java.util.*; import edu.harvard.hul.ois.jhove.*; /** * Default Display Resolution Box. * See I.5.3.7.2 in ISO/IEC 15444-1:2000 * * @author Gary McGath * */ public class DDResolutionBox extends JP2Box { /** * Constructor with superbox. * * @param parent parent superbox of this box */ public DDResolutionBox (RandomAccessFile raf, BoxHolder parent) { super (raf, parent); } /** Reads the box, putting appropriate information in * the RepInfo object. setModule, setBoxHeader, * setRepInfo and setDataInputStream must be called * before readBox is called. * readBox must completely consume the * box, so that the next byte to be read by the * DataInputStream is the FF byte of the next Box. */ public boolean readBox() throws IOException { initBytesRead (); if (!(_parentBox instanceof ResolutionBox)) { wrongBoxContext(); return false; } // The information consists of two values, horizontal and // vertical, with numerator, denominator, and exponent, // in dots per meter. Not clear whether to present this // as raw data, turn it into a dots/cm rational, or what. // I'll put it up as raw data for now. ResolutionBox rb = (ResolutionBox) _parentBox; List vresList = new ArrayList(3); List hresList = new ArrayList(3); vresList.add (new Property ("Numerator", PropertyType.INTEGER, new Integer (_module.readUnsignedShort (_dstrm)))); vresList.add (new Property ("Denominator", PropertyType.INTEGER, new Integer (_module.readUnsignedShort (_dstrm)))); hresList.add (new Property ("Numerator", PropertyType.INTEGER, new Integer (_module.readUnsignedShort (_dstrm)))); hresList.add (new Property ("Denominator", PropertyType.INTEGER, new Integer (_module.readUnsignedShort (_dstrm)))); vresList.add (new Property ("Exponent", PropertyType.INTEGER, new Integer (ModuleBase.readSignedByte (_dstrm, _module)))); hresList.add (new Property ("Exponent", PropertyType.INTEGER, new Integer (ModuleBase.readSignedByte (_dstrm, _module)))); // The three properties for each direction are subsumed into // a property. Property hres = new Property ("HorizResolution", PropertyType.PROPERTY, PropertyArity.LIST, hresList); Property vres = new Property ("VertResolution", PropertyType.PROPERTY, PropertyArity.LIST, vresList); // And the two resolution properties are subsumed into // one property for the Module. Property[] topProps = new Property[2]; topProps[0] = hres; topProps[1] = vres; _module.addProperty(new Property ("DefaultDisplayResolution", PropertyType.PROPERTY, PropertyArity.ARRAY, topProps)); finalizeBytesRead (); return true; } /** Returns the name of the Box. */ protected String getSelfPropName () { return "Default Display Resolution Box"; } } jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/DataEntryURLBox.java0000644000707400001440000000531010771562666025742 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College * **********************************************************************/ package edu.harvard.hul.ois.jhove.module.jpeg2000; import java.io.*; import java.util.*; import edu.harvard.hul.ois.jhove.*; /** * Data Entry URL Box. * * @author Gary McGath * */ public class DataEntryURLBox extends JP2Box { /** * Constructor with superbox. * * @param parent parent superbox of this box */ public DataEntryURLBox(RandomAccessFile raf, BoxHolder parent) { super(raf, parent); } /** Reads the box, putting appropriate information in * the RepInfo object. setModule, setBoxHeader, * setRepInfo and setDataInputStream must be called * before readBox is called. * readBox must completely consume the * box, so that the next byte to be read by the * DataInputStream is the FF byte of the next Box. */ public boolean readBox() throws IOException { initBytesRead (); for (int i = 0; i < 4; i++) { // version and flags must be 0. // If they aren't, keep going, since we can. int v = ModuleBase.readUnsignedByte (_dstrm, _module); if (v != 0) { _repInfo.setMessage (new ErrorMessage ("Unrecognized version or flag value in Data Entry URL Box", _module.getFilePos ())); _repInfo.setValid (false); break; } } // The URL is encoded as a null-terminated string // of UTF-8 characters. List byteList = new ArrayList (512); for (;;) { int b = ModuleBase.readUnsignedByte(_dstrm, _module); if (b == 0) { break; } byteList.add (new Byte ((byte) b)); } // Turn the Byte List into a byte array. (Is there a better // way to do this?) ListIterator li = byteList.listIterator (); byte byteArr[] = new byte[byteList.size ()]; int j = 0; while (li.hasNext ()) { byteArr[j] = ((Byte)li.next ()).byteValue (); } String s = new String (byteArr, "UTF-8"); if (_parentBox instanceof UUIDInfoBox) { UUIDInfoBox uu = (UUIDInfoBox) _parentBox; uu.setURL (s); } finalizeBytesRead (); return true; } /** Returns the name of the Box. */ protected String getSelfPropName () { return "Data Entry URL Box"; } } jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/DefaultBox.java0000644000707400001440000000204510771562654025047 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.jpeg2000; import java.io.*; /** * * Default class for Boxes that have not yet been implemented. * Also used for the "free" box, which by definition contains * no information. * * @author Gary McGath * */ public class DefaultBox extends JP2Box { /** * Constructor. */ public DefaultBox(RandomAccessFile raf) { super(raf); } /** * Constructor with superbox. */ public DefaultBox (RandomAccessFile raf, BoxHolder parent) { super (raf, parent); } /* (non-Javadoc) * @see edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box#readBox() */ public boolean readBox() throws IOException { skipBox (); return true; } } jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/DefaultMarkerSegment.java0000644000707400001440000000305610771562665027070 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College * **********************************************************************/ package edu.harvard.hul.ois.jhove.module.jpeg2000; import java.io.*; /** * This class is used to handle any unrecognized or unimplemented * marker segment in a codestream. * * @author Gary McGath * * To change the template for this generated type comment go to * Window>Preferences>Java>Code Generation>Code and Comments */ public class DefaultMarkerSegment extends MarkerSegment { /** * */ public DefaultMarkerSegment() { super(); } /** * Processes the marker segment. The DataInputStream * will be at the point of having read the marker code. The * process method must consume exactly the number * of bytes remaining in the marker segment; for a marker, * this number will always be 0. * * @param bytesToEat The number of bytes that must be consumed. * For a Marker, this number will always be 0. * If it is 0 for a MarkerSegment, the * number of bytes to consume is unknown. */ protected boolean process (int bytesToEat) throws IOException { _module.skipBytes (_dstream, bytesToEat, _module); return true; } } jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/DesiredReproBox.java0000644000707400001440000000456410771562663026062 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.jpeg2000; import java.io.*; /** * * Desired Reproductions Box (JPX). * * See ISO/IEC FCD15444-2: 2000, L.9.15 * * @author Gary McGath * */ public class DesiredReproBox extends JP2Box { /** * Constructor with superbox. * * @param parent parent superbox of this box */ public DesiredReproBox(RandomAccessFile raf, BoxHolder parent) { super(raf, parent); } /** Reads the box, putting appropriate information in * the RepInfo object. setModule, setBoxHeader, * setRepInfo and setDataInputStream must be called * before readBox is called. * readBox must completely consume the * box, so that the next byte to be read by the * DataInputStream is the FF byte of the next Box. */ public boolean readBox() throws IOException { // Oddly enough, this box is NOT required to be // at the top level of the file. However, there // can be only one in the file. // It can have multiple subboxes, but the only // significant one is the Graphics Technology // Standard Output box, which simply holds an // ISO profile. initBytesRead (); int sizeLeft = (int) _boxHeader.getDataLength() ; BoxHeader subhdr = new BoxHeader (_module, _dstrm); JP2Box box = null; while (hasNext ()) { box = (JP2Box) next (); if (box == null) { break; } if (box instanceof GTSOBox) { if (!box.readBox ()) { return false; } } else { box.skipBox (); } } // There is a NISO property for reporting the // profile name. I should figure out how to // extract the name of a profile. finalizeBytesRead (); return false; } /** Returns the name of the Box. */ protected String getSelfPropName () { return "Desired Reproductions Box"; } } jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/DigSignatureBox.java0000644000707400001440000001352610771562661026054 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.jpeg2000; import edu.harvard.hul.ois.jhove.*; import java.io.*; import java.security.*; import java.util.*; /** * Digital Signature Box (JPX). * See ISO/IEC FCD15444-2: 2000, L.9.17 * * Only the MD5 and SHA-1 * algorithms are supported. * * @author Gary McGath * */ public class DigSignatureBox extends JP2Box { /** * Constructor with superbox. * * @param parent parent superbox of this box */ public DigSignatureBox(RandomAccessFile raf, BoxHolder parent) { super(raf, parent); } /** Reads the box, putting appropriate information in * the RepInfo object. setModule, setBoxHeader, * setRepInfo and setDataInputStream must be called * before readBox is called. * readBox must completely consume the * box, so that the next byte to be read by the * DataInputStream is the FF byte of the next Box. */ public boolean readBox() throws IOException { initBytesRead (); int sizeLeft = (int) _boxHeader.getDataLength (); // This may occur "anywhere in the file." Does that // mean that all superboxes should check it as a possible // subbox? List propList = new ArrayList (10); JhoveBase je = _module.getBase (); boolean raw = je.getShowRawFlag (); int styp = ModuleBase.readUnsignedByte (_dstrm, _module); if (styp > 5) { // Known signature types are 0-5 _repInfo.setMessage (new ErrorMessage ("Unknown digital signature type", _module.getFilePos ())); _repInfo.setValid (false); } propList.add (_module.addIntegerProperty ("Type", styp, JP2Strings.digitalSigTypeStr)); int ptyp = ModuleBase.readUnsignedByte (_dstrm, _module); if (ptyp > 1) { _repInfo.setMessage (new ErrorMessage ("Unknown digital signature pointer type", _module.getFilePos ())); _repInfo.setValid (false); } propList.add (_module.addIntegerProperty ("PointerType", styp, JP2Strings.digitalSigPtrTypeStr)); sizeLeft -= 2; long off = 0; long len = 0; if (ptyp == 1) { off = _module.readSignedLong (_dstrm); len = _module.readSignedLong (_dstrm); propList.add (new Property ("Offset", PropertyType.LONG, new Long (off))); propList.add (new Property ("Length", PropertyType.LONG, new Long (len))); sizeLeft -= 8; } byte[] data = new byte[sizeLeft]; ModuleBase.readByteBuf(_dstrm, data, _module); if (styp == 0 || styp == 1) { try { // If the whole file is indicated, set the // parameters accordingly if (ptyp == 0) { off = 0; len = _raf.length (); } propList.add (new Property ("Valid", PropertyType.BOOLEAN, new Boolean (isSigValid (styp, off, len, data)))); } catch (NoSuchAlgorithmException e) { // In the unlikely event the algorithms aren't // available, just don't report validity. } catch (IOException f) {} } _module.addDigitalSignatureProp (new Property ("DigitalSignature", PropertyType.PROPERTY, PropertyArity.LIST, propList)); finalizeBytesRead (); return true; } /** Returns the name of the Box. */ protected String getSelfPropName () { return "Digital Signature Box"; } /* Check if the signature is valid. Only applicable * for styp of 0 (MD5) or 1 (SHA-1). */ private boolean isSigValid (int styp, long off, long len, byte[] data) throws NoSuchAlgorithmException, IOException { MessageDigest digest; if (styp == 0) { digest = MessageDigest.getInstance ("MD5"); } else { digest = MessageDigest.getInstance ("SHA-1"); } // With the new robustness of RAFInputStream, it should // no longer be necessary to save the file position. //long savePos = _raf.getFilePointer (); // If the whole file is indicated, set the parameters // accordingly try { _raf.seek (off); int buflen = (len < 65536 ? (int) len : 65536); byte[] buf = new byte[buflen]; while (len > 0) { int btr = (len < buflen ? (int) len : buflen); int bytesRead = _raf.read (buf, 0, btr); digest.update (buf, 0, bytesRead); } byte[] digestVal = digest.digest (); // Check if we suffer from indigestion if (digestVal.length != data.length) { return false; } for (int i = 0; i < data.length; i++) { if (digestVal[i] != data[i]) { return false; } } // Our digestion is good return true; } catch (IOException e) { return false; // most likely invalid range } } } jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/FileTypeBox.java0000644000707400001440000001137610771562666025216 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College * **********************************************************************/ package edu.harvard.hul.ois.jhove.module.jpeg2000; import java.io.*; import java.util.*; import edu.harvard.hul.ois.jhove.*; /** * File Type Box. * See I.5.2 in ISO/IEC 15444-1:2000 * * A File Type box can occur only as the first thing after the * Signature Box, so this will be invoked only directly from * the Module. * * @author Gary McGath * */ public class FileTypeBox extends JP2Box { /** * Constructor. */ public FileTypeBox(RandomAccessFile raf) { super(raf); } /** * The constructor with superbox is meaningless. */ public FileTypeBox(RandomAccessFile raf, JP2Box parent) { super (raf); } /** Reads the box, putting appropriate information in * the RepInfo object. setModule, setBoxHeader, * setRepInfo and setDataInputStream must be called * before readBox is called. * readBox must completely consume the * box, so that the next byte to be read by the * DataInputStream is the FF byte of the next Box. */ public boolean readBox() throws IOException { String brand = _module.read4Chars(_dstrm); _module.addProperty (new Property ("Brand", PropertyType.STRING, brand)); // 12 bytes have been read // Brand indicates intended compliance if (!"jp2 ".equals (brand)) { _module.setJP2Compliant (false); } if (!"jpx ".equals (brand)) { _module.setJPXCompliant (false); } long minv = _module.readUnsignedInt(_dstrm); _module.addProperty (new Property ("MinorVersion", PropertyType.LONG, new Long (minv))); // 16 bytes have been read // Read the compatibility list. It takes up the rest // on the box length. int ncomp = (((int) _boxHeader.getLength ()) - 16) / 4; if (ncomp < 1) { _repInfo.setMessage (new ErrorMessage ("Empty compatibility list in File Type Box", _module.getFilePos ())); _repInfo.setWellFormed (false); return false; } List compList = new ArrayList (ncomp); boolean eflag = false; StringBuffer hexcitem = new StringBuffer (8); for (int i = 0; i < ncomp; i++) { String citem = _module.read4Chars (_dstrm); // Some files have a count of entries, which isn't supposed // to be there. If we see any nulls, report an ill-formed condition. // For each entry, we build a hex string in hexcitem just in case // it's necessary to report the string in hex. char[] cbytes = citem.toCharArray(); boolean binflag = false; for (int j = 0; j < cbytes.length; j++) { int ch = (int) cbytes[j]; hexcitem.append (Integer.toHexString(ch)); if (ch == 0 || ch >= 0X7F) { binflag = true; if (!eflag) { eflag = true; // Avoid multiple report of same error _repInfo.setValid (false); _repInfo.setMessage (new ErrorMessage ("Non-ASCII characters in compatibility item of File Type Box", _module.getFilePos ())); } } } if (!binflag) { compList.add (citem); } else { compList.add (hexifyString (citem)); } } _module.addProperty (new Property ("Compatibility", PropertyType.STRING, PropertyArity.LIST, compList)); // All the bytes have been read return true; } private String hexifyString (String s) { StringBuffer retval = new StringBuffer (2 * s.length () + 2); retval.append ("0X"); char[] chs = s.toCharArray(); for (int i = 0; i < chs.length; i++) { String hs = Integer.toHexString ((int) chs[i]); // Pad to 2 characters if (hs.length () == 1) { retval.append ('0'); } retval.append (hs); } return retval.toString (); } /** Returns the name of the Box. */ protected String getSelfPropName () { return "File Type Box"; } } jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/GTSOBox.java0000644000707400001440000000405710771562656024246 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.jpeg2000; import edu.harvard.hul.ois.jhove.*; import java.io.*; /** * Graphics Technology Standard Output Box. * This box holds an ICC color profile. * * See ISO/IEC FCD15444-2: 2000, L.9.15.1 * * @author Gary McGath * */ public class GTSOBox extends JP2Box { /** * Constructor with superbox. * * @param parent parent superbox of this box */ public GTSOBox(RandomAccessFile raf, BoxHolder parent) { super(raf, parent); } /** Reads the box, putting appropriate information in * the RepInfo object. setModule, setBoxHeader, * setRepInfo and setDataInputStream must be called * before readBox is called. * readBox must completely consume the * box, so that the next byte to be read by the * DataInputStream is the FF byte of the next Box. */ public boolean readBox() throws IOException { initBytesRead (); // Short of pulling out the bytes and somehow // analyzing them, about all we can do is report // the presence and length of the profile. // There can be only one GTSO box within the file, // which seems oddly limiting compared to the rest // of JPEG 2000. But it makes this simple. long propSize = _boxHeader.getDataLength (); Property sizeProp = new Property ("ProfileLength", PropertyType.LONG, new Long (propSize)); _module.addProperty (new Property ("GraphicsTechnologyStandardOutput", PropertyType.PROPERTY, sizeProp)); _module.skipBytes (_dstrm, (int) propSize, _module); finalizeBytesRead (); return true; } } jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/FragmentInputStream.java0000644000707400001440000000625510771562673026761 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.jpeg2000; import java.io.*; import java.util.*; /** * A FragmentInputStream provides an interface by which * the scattered fragments of a Fragment List Box can * be read as a single stream. Only fragments within * the originating file are supported, not fragments * in external files. * * @author Gary McGath * */ public class FragmentInputStream extends InputStream { private List _fragments; private RandomAccessFile _raf; private ListIterator fragIterator; private long curFragment[]; byte[] fragBuffer; /* Offset within fragBuffer. -1 indicates fragBuffer * does not contain valid data. */ private int bufOffset; /* Offset in the file from the start of the current fragment. */ private int fragOffset; /* Size allocated to the buffer. */ private int _bufSize; /* Bytes of actual data in the buffer. */ private int bufBytes; /** * @param fragments List of fragment entries. * Each fragment entry is an array of two longs, * with fragment[0] being the length and * fragment[1] the offset. */ public FragmentInputStream(List fragments, RandomAccessFile raf) { super(); _fragments = fragments; _raf = raf; init (-1); } public FragmentInputStream (List fragments, RandomAccessFile raf, int bufSize) { super (); _fragments = fragments; _raf = raf; init (bufSize); } private void init (int bufSize) { fragIterator = _fragments.listIterator (); // If no buffer size was specified, assign a default // size. if (bufSize <= 0) { bufSize = 8192; } _bufSize = bufSize; fragBuffer = new byte[bufSize]; bufOffset = 0; bufBytes = 0; } /** * Returns the next byte from the stream, buffering each fragment * in turn until the last fragment is exhausted. * * @return The next byte of the stream, or -1 to indicate no * more bytes are available. */ public int read() throws IOException { if (bufOffset >= bufBytes) { // We need a fresh buffer read. if (curFragment == null || fragOffset >= curFragment[1]) { // We need a new fragment. if (fragIterator.hasNext ()) { curFragment = (long []) fragIterator.next (); fragOffset = 0; } else { // No more data available. return -1; } } _raf.seek(curFragment[0] + fragOffset); bufBytes = _raf.read(fragBuffer); fragOffset += bufBytes; bufOffset = 0; } return fragBuffer[bufOffset++]; } } jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/FragmentListBox.java0000644000707400001440000000675710771562663026100 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.jpeg2000; import edu.harvard.hul.ois.jhove.*; import java.io.*; import java.util.*; /** * Fragment List Box (JPX). * Subbox of Fragment Table box or Cross-Reference box. * See L.9.6.1 in ISO/IEC FCD15444-2:2000. * * @author Gary McGath * */ public class FragmentListBox extends JP2Box { private List _fragmentList; /** * Constructor with superbox. * * @param parent parent superbox of this box. * The parent may be a FragmentTableBox * or a CrossReferenceBox. */ public FragmentListBox(RandomAccessFile raf, BoxHolder parent) { super (raf, parent); } /** Reads the box, putting appropriate information in * the RepInfo object. setModule, setBoxHeader, * setRepInfo and setDataInputStream must be called * before readBox is called. * readBox must completely consume the * box, so that the next byte to be read by the * DataInputStream is the FF byte of the next Box. */ public boolean readBox() throws IOException { if (!_module.isJP2HdrSeen()) { _repInfo.setMessage (new ErrorMessage (noJP2Hdr, _module.getFilePos ())); return false; } initBytesRead (); int len = (int) _boxHeader.getDataLength (); int nFrags = _module.readUnsignedShort (_dstrm); if (_boxHeader.getLength () != 0 && len != 14 * nFrags + 2) { _repInfo.setMessage (new ErrorMessage ("Fragment Table has invalid length", _module.getFilePos ())); _repInfo.setWellFormed (false); return false; } _fragmentList = new ArrayList (nFrags); for (int i = 0; i < nFrags; i++) { long offset = _module.readSignedLong (_dstrm); long fragLen = _module.readUnsignedInt (_dstrm); int dataRef = _module.readUnsignedShort (_dstrm); // If dataRef is nonzero, the stream is outside the file, // and all we can do is report the reference. In fact, // if any of the fragments are outside the file, we // have to punt. So we should collect all the // fragments and then read the stream. if (dataRef != 0) { _fragmentList = null; // no can do fragments _repInfo.setMessage (new InfoMessage ("Document references an external file", _module.getFilePos())); } else if (_fragmentList != null) { long[] frag = new long[2]; frag[0] = offset; frag[1] = fragLen; _fragmentList.add (frag); } } finalizeBytesRead (); return true; } /** Returns the fragment list. If there are external references * to fragments, returns null; in this case, a warning message * has been added to the RepInfo object. */ protected List getFragmentList () { return _fragmentList; } /** Returns the name of the Box. */ protected String getSelfPropName () { return "Fragment List Box"; } } jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/FragmentTableBox.java0000644000707400001440000000766510771562671026212 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.jpeg2000; import edu.harvard.hul.ois.jhove.*; import java.io.*; import java.util.List; /** * Fragment Table Box (JPX). * See L.9.6 in ISO/IEC FCD15444-2:2000. * @author Gary McGath * */ public class FragmentTableBox extends JP2Box { /** * Constructor with superbox. * * @param parent parent superbox of this box * or TopLevelBoxHolder */ public FragmentTableBox (RandomAccessFile raf, BoxHolder parent) { super (raf, parent); } /** Reads the box, putting appropriate information in * the RepInfo object. setModule, setBoxHeader, * setRepInfo and setDataInputStream must be called * before readBox is called. * readBox must completely consume the * box, so that the next byte to be read by the * DataInputStream is the FF byte of the next Box. */ public boolean readBox() throws IOException { boolean retval = true; initBytesRead (); hasBoxes = true; //int state = 0; // state variable for checking progress of boxes JP2Box box = (JP2Box) next (); if (box == null) { return false; // empty box can't be right } // OK, how do I deal with subboxes? Should be able to handle // them the same way as in the module, except that a different // set of boxes is acceptable. The dispatcher (in BoxHeader?) // may need to be given a list of boxes that are acceptable for // any given context. For the top-level module, the list // should probably (maybe) be in BoxHeader, but for boxes, the // list of acceptable subboxes must be provided explicitly. // Maybe an additional argument in the BoxHeader constructor. if (box instanceof FragmentListBox) { FragmentListBox fbox = (FragmentListBox) box; if (!fbox.readBox ()) { return false; } List fragList = fbox.getFragmentList(); // fragList will be null if external files are referenced. if (fragList != null) { //App app = _module.getApp(); JhoveBase base = _module.getBase (); int bufSize = base.getBufferSize (); FragmentInputStream fragStream = new FragmentInputStream (fragList, _raf, bufSize); DataInputStream dfstrm = new DataInputStream (fragStream); int ncs = _module.getNCodestreams () + 1; _module.setNCodestreams (ncs); Codestream curCodestream = _module.getCodestream (ncs); long len = _boxHeader.getLength () == 0 ? 0 : _boxHeader.getDataLength (); ContCodestream ccs = new ContCodestream (_module, dfstrm, len); // Oh, FOOBAR. This creates another situation in which // we can't count the bytes being read. Buf if we're // going to a random access file, that may all be // rendered moot anyway. retval = ccs.readCodestream (curCodestream, _repInfo); } } else { _repInfo.setMessage (new ErrorMessage ("Invalid fragment table", _module.getFilePos ())); _repInfo.setWellFormed (false); return false; } finalizeBytesRead (); return retval; } /** Returns the name of the Box. */ protected String getSelfPropName () { return "Fragment Table Box"; } } jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/ImageHeaderBox.java0000644000707400001440000000755711231420726025614 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.jpeg2000; import java.io.*; import edu.harvard.hul.ois.jhove.*; /** * Image Header Box. * See I.5.3.1 in ISO/IEC 15444-1:2000 * * @author Gary McGath * */ public class ImageHeaderBox extends JP2Box { /** * Constructor with superbox. * * @param parent parent superbox of this box */ public ImageHeaderBox(RandomAccessFile raf, BoxHolder parent) { super(raf, parent); } /** Reads the box, putting appropriate information in * the RepInfo object. setModule, setBoxHeader, * setRepInfo and setDataInputStream must be called * before readBox is called. * readBox must completely consume the * box, so that the next byte to be read by the * DataInputStream is the FF byte of the next Box. */ public boolean readBox() throws IOException { if (!(_parentBox instanceof JP2HeaderBox)) { _repInfo.setMessage (new ErrorMessage ("ImageHeader Box in illegal context", _module.getFilePos ())); return false; } initBytesRead (); if (_boxHeader.getLength() != 22) { _repInfo.setMessage (new ErrorMessage ("Image Header Box is incorrect size", _module.getFilePos ())); _repInfo.setWellFormed (false); return false; } // If this is called from a JP2 Header, we set values // in _defaultNiso, otherwise we set them in the image's // Niso metadata. Question: where do we get the codestream? NisoImageMetadata niso; if (_parentBox instanceof CodestreamHeaderBox) { Codestream cs = ((CodestreamHeaderBox) _parentBox).getCodestream (); niso = cs.getNiso (); } else { niso = _module.getDefaultNiso (); } long height = _module.readUnsignedInt (_dstrm); niso.setImageLength (height); long width = _module.readUnsignedInt (_dstrm); niso.setImageWidth (width); int nc = _module.readUnsignedShort (_dstrm); if (nc == 0) { _repInfo.setMessage (new ErrorMessage ("ImageHeader Box haz zero components", _module.getFilePos ())); return false; } niso.setSamplesPerPixel(nc); int bpc = ModuleBase.readUnsignedByte(_dstrm, _module); if (bpc != 255) { // If the value is 255, use the BPC box. int[] bits = new int[nc]; int bps = (bpc & 0X7F) + 1; for (int i = 0; i < nc; i++) { bits[i] = bps; } // The high-order bit of bpc is 1 if the samples have // signed values (!). What do we do with it? niso.setBitsPerSample(bits); } int compression = ModuleBase.readUnsignedByte (_dstrm, _module); if (compression == 7) { niso.setCompressionScheme (34712); // JPEG 2000 } int unk = ModuleBase.readUnsignedByte (_dstrm, _module); _module.addProperty (new Property ("ColorspaceUnknown", PropertyType.BOOLEAN, new Boolean (unk != 0))); int ipr = ModuleBase.readUnsignedByte (_dstrm, _module); // This just says whether there is an IPR box. // Do we need to do anything with it? finalizeBytesRead (); _module.setImageHeaderSeen (true); return true; } /** Returns the name of the Box. */ protected String getSelfPropName () { return "Image Header Box"; } } jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/InstructionSetBox.java0000644000707400001440000001332610771562674026466 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.jpeg2000; import edu.harvard.hul.ois.jhove.*; import java.io.*; import java.util.*; /** * Instruction Set Box (JPX). * See ISO/IEC FCD15444-2: 2000, L.9.10.2 * * * @author Gary McGath * */ public class InstructionSetBox extends JP2Box { /** * Constructor with superbox. * * @param parent parent superbox of this box */ public InstructionSetBox(RandomAccessFile raf, BoxHolder parent) { super(raf, parent); } /** Reads the box, putting appropriate information in * the RepInfo object. setModule, setBoxHeader, * setRepInfo and setDataInputStream must be called * before readBox is called. * readBox must completely consume the * box, so that the next byte to be read by the * DataInputStream is the FF byte of the next Box. */ public boolean readBox() throws IOException { // Flags indicating which parameters are in instructions // Can be found only in a Composition Box if (!(_parentBox instanceof CompositionBox)) { wrongBoxContext (); return false; } initBytesRead (); // ityp flags indicate which parameters are present int ityp = _module.readUnsignedShort (_dstrm); boolean hasXO_YO = ((ityp & 1) != 0); boolean hasWid_Ht = ((ityp & 2) != 0); boolean hasAnimation = ((ityp & 8) != 0); boolean hasCrop = ((ityp & 0X20) != 0); // Get the repeat count int rept = _module.readUnsignedShort (_dstrm); // Get the tick duration. Ignored (but still takes up // space) if hasAnimation is false. long tick = _module.readUnsignedInt (_dstrm); int sizeLeft = (int) _boxHeader.getDataLength () - 8; // If all significant bits of ityp are 0, there are no instructions if ((ityp & 0X2B) == 0) { if (sizeLeft != 0) { _repInfo.setMessage (new ErrorMessage ("Data underrun in Instruction Set Box", _module.getFilePos ())); _repInfo.setWellFormed (false); return false; } } else { List instProps = new ArrayList (11); // Loop to read instructions while (sizeLeft >= 0) { if (hasXO_YO) { long xo = _module.readUnsignedInt (_dstrm); instProps.add (new Property ("HorizontalOffset", PropertyType.LONG, new Long (xo))); long yo = _module.readUnsignedInt (_dstrm); instProps.add (new Property ("VerticalOffset", PropertyType.LONG, new Long (yo))); sizeLeft -= 8; } if (hasWid_Ht) { long width = _module.readUnsignedInt (_dstrm); instProps.add (new Property ("Width", PropertyType.LONG, new Long (width))); long height = _module.readUnsignedInt (_dstrm); instProps.add (new Property ("Height", PropertyType.LONG, new Long (height))); sizeLeft -= 8; } if (hasAnimation) { long life = _module.readUnsignedInt (_dstrm); // The high bit of life is the persistence flag boolean persist = ((life & 0X80000000) != 0); instProps.add (new Property ("Persist", PropertyType.BOOLEAN, new Boolean (persist))); life &= 0X7FFFFFFF; instProps.add (new Property ("Life", PropertyType.LONG, new Long (life))); // Sloppy documentation: I'm assuming that N // and NEXT-USE are the same thing. long nextuse = _module.readUnsignedInt (_dstrm); instProps.add (new Property ("NextUse", PropertyType.LONG, new Long (nextuse))); sizeLeft -= 8; } if (hasCrop) { long xc = _module.readUnsignedInt (_dstrm); instProps.add (new Property ("HorizontalCropOffset", PropertyType.LONG, new Long (xc))); long yc = _module.readUnsignedInt (_dstrm); instProps.add (new Property ("VerticalCropOffset", PropertyType.LONG, new Long (yc))); long wc = _module.readUnsignedInt (_dstrm); instProps.add (new Property ("CroppedWidth", PropertyType.LONG, new Long (wc))); long hc = _module.readUnsignedInt (_dstrm); instProps.add (new Property ("CroppedHeight", PropertyType.LONG, new Long (hc))); sizeLeft -= 16; } if (sizeLeft < 0) { _repInfo.setMessage (new ErrorMessage ("Data overrun in Instruction Set Box", _module.getFilePos ())); _repInfo.setWellFormed (false); return false; } } } finalizeBytesRead (); return true; } } jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/JP2Box.java0000644000707400001440000003415611205003607024043 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.jpeg2000; import edu.harvard.hul.ois.jhove.module.Jpeg2000Module; import edu.harvard.hul.ois.jhove.*; import java.io.*; import java.util.*; /** * Superclass for JPEG 2000 boxes. * * @author Gary McGath * */ public abstract class JP2Box extends BoxHolder { protected long startBytesRead; protected long _bytesRead; protected List associations; protected final static String noJP2Hdr = "Other boxes may not occur before JP2 Header"; /* Name to be used for self-description property. */ protected final static String DESCRIPTION_NAME = "Description"; /** * Constructor. Has no arguments, so that * invoking lots of different subclasses is * relatively simple. setModule, setBoxHeader, * setRepInfo, and setDataInputStream should * be called immediately after the constructor. */ public JP2Box (RandomAccessFile raf) { super (raf); init (null); } /** * Constructor for a box which is found within a * superbox. * * @param parent parent superbox of this box */ public JP2Box (RandomAccessFile raf, BoxHolder parent) { super (raf); init (parent); } protected void init (BoxHolder parent) { //_boxHeader = hdr; if (parent instanceof JP2Box) { _parentBox = (JP2Box) parent; } else { _parentBox = null; } _bytesRead = 0; associations = new LinkedList (); } /* This is the key to the reorganization of the code. * A normal box generates an RAFInputStream based * on the underlying RandomAccessFile. What do the * weird subclasses do, and how do I handle box * substitution? Rather than calling boxMaker statically, * should I add a method BoxHeader.getBox? That doesn't * quite cover the case where one header (for a * Binary Filter Box) turns into multiple boxes. Could * have an iterator in the BoxHeader class that is capable * of returning no boxes (in the case of a Free box) or * multiple boxes, but usually returns one box. * * But a subbox iterator, which returns all the top-level * boxes (at the top level) or all the subboxes of a given * box, is more natural. For this we need to add a BoxHolder * class, of which JP2Box is a subclass. BoxHolder will * have a method to generate an iterator; this method gets * a box (which it may keep in its pocket), and knows about * Binary Filter boxes and Cross Reference boxes. */ /** Sets the module under which the Box is being read. */ public void setModule (Jpeg2000Module module) { _module = module; } /** Sets the BoxHeader from which this Box was obtained. */ public void setBoxHeader (BoxHeader hdr) { _boxHeader = hdr; bytesLeft = _boxHeader.getDataLength (); } /** Assigns a RepInfo object, so that subclasses of * JP2Box can add Properties and Messages. */ public void setRepInfo (RepInfo info) { _repInfo = info; } /** Assigns the DataInputStream from which the box is * being read. */ public void setDataInputStream (DataInputStream dstrm) { _dstrm = dstrm; } /** Assigns the RandomAccessFile from which the box is * being read. */ public void setRandomAccessFile (RandomAccessFile raf) { _raf = raf; } /** Static factory method for generating an object of the * appropriate subclass of MarkerSegment, based on the * box type. * This is for use in top-level reading of boxes, not * subboxes. Provision is made for calling this with a * parent box, but the set of boxes dispatched on * is the set used at top level. * * Certain box types have magical characteristics and have * to be checked by the BoxHolder. These include * BinaryFilterBox and CrossReferenceBox. * * @param hType 4-character string indicating the box type * @param parent parent BoxHolder */ public static JP2Box boxMaker (String hType, BoxHolder parent) { JP2Box box = null; RandomAccessFile raf = null; if (parent != null) { raf = parent._raf; } if ("jp2h".equals (hType)) { // The JP2 header superbox box = new JP2HeaderBox (raf, parent); } else if ("asoc".equals (hType)) { // Association box (JPX) box = new AssociationBox (raf, parent); } else if ("bpcc".equals (hType)) { box = new BPCCBox (raf, parent); } else if ("chck".equals (hType)) { box = new DigSignatureBox (raf, parent); } else if ("cdef".equals (hType)) { box = new ChannelDefBox (raf, parent); } else if ("cgrp".equals (hType)) { box = new ColorGroupBox(raf, parent); } else if ("cmap".equals (hType)) { box = new ComponentMapBox (raf, parent); } else if ("colr".equals (hType)) { box = new ColorSpecBox (raf, parent); } else if ("comp".equals (hType)) { // Composition box (JPX) box = new CompositionBox (raf, parent); } else if ("copt".equals (hType)) { // Composition options box (JPX) box = new CompOptionsBox (raf, parent); } else if ("creg".equals (hType)) { // codestream registration box (JPX) box = new CodestreamRegBox (raf, parent); } else if ("drep".equals (hType)) { box = new DesiredReproBox (raf, parent); } else if ("flst".equals (hType)) { box = new FragmentListBox (raf, parent); } else if ("ftbl".equals (hType)) { // Fragment Table box (JPX) box = new FragmentTableBox (raf, parent); } else if ("gtso".equals (hType)) { // Graphics Technology Standard Output Box (JPX) box = new GTSOBox (raf, parent); } else if ("inst".equals (hType)) { // Instruction Set box (JPX) box = new InstructionSetBox (raf, parent); } else if ("ihdr".equals (hType)) { box = new ImageHeaderBox (raf, parent); } else if ("jp2c".equals (hType)) { // The Continuous Codestream box. box = new ContCodestreamBox (raf, parent); } else if ("jpch".equals (hType)) { // The Compositing Header box box = new CodestreamHeaderBox (raf, parent); } else if ("jplh".equals (hType)) { // The Compositing Layer Header box box = new ComposLayerHdrBox (raf, parent); } else if ("jp2i".equals (hType)) { // The Intellectual Property Rights box box = new IPRBox (raf, parent); } else if ("lbl ".equals (hType)) { box = new LabelBox (raf, parent); } else if ("nlst".equals (hType)) { // Number list box (JPX) box = new NumberListBox (raf, parent); } else if ("opct".equals (hType)) { box = new OpacityBox (raf, parent); } else if ("pclr".equals (hType)) { box = new PaletteBox (raf, parent); } else if ("res ".equals (hType)) { box = new ResolutionBox (raf, parent); } else if ("roid".equals (hType)) { box = new ROIBox (raf, parent); } else if ("resc".equals (hType)) { // Capture Resolution Box (JPX) box = new CaptureResolutionBox (raf, parent); } else if ("resd".equals (hType)) { // Default Display Resolution Box (JPX) box = new DDResolutionBox (raf, parent); } else if ("rreq".equals (hType)) { // Reader Requirements box (JPX) box = new ReaderRequirementsBox (raf, parent); } else if ("uinf".equals (hType)) { box = new UUIDInfoBox (raf, parent); } else if ("ulst".equals (hType)) { box = new UUIDListBox (raf, parent); } else if ("url ".equals (hType)) { box = new DataEntryURLBox (raf, parent); } else if ("uuid".equals (hType)) { box = new UUIDBox (raf, parent); } else if ("xml ".equals (hType)) { box = new XMLBox (raf, parent); } else { // Not recognized; skip over it. // The "free" box, which simply indicates // unused space, goes through here. // So does the Media Data ("mdat") box, // whose content is defined only by references // into it from a Fragment Table. box = new DefaultBox (raf); } return box; } /* Bracketing code for calculating bytes read. * Every subclass's readBox() method should start * by calling initBytesRead and finish by calling * finalizeBytesRead. */ protected void initBytesRead () { startBytesRead = _module.getFilePos (); } protected void finalizeBytesRead () { _bytesRead = _module.getFilePos () - startBytesRead; } /** Reads the box, putting appropriate information in * the RepInfo object. setModule, setBoxHeader, * setRepInfo and setDataInputStream must be called * before readBox is called. * Thus, the header of the box must already have been read. * readBox must completely consume the * box, so that the next byte to be read by the * DataInputStream is the FF byte of the next Box. * The number of bytes read must be placed in _bytesRead. */ public abstract boolean readBox () throws IOException; public int getBytesRead () { return (int) _bytesRead; } /** Skips over the box. Can be called when the box is * legal but meaningless in the current context. */ public void skipBox() throws IOException { initBytesRead (); if (_boxHeader.getLength () != 0) { _module.skipBytes (_dstrm, (int) _boxHeader.getDataLength (), _module); } finalizeBytesRead (); } /* Adds an Association property. Most superboxes can * contain Association boxes; these report themselves * as Association properties. */ protected void addAssociation (Property p) { associations.add (p); } /** Utility error reporting function for incorrect box length. * Sets the RepInfo's wellFormed flag to false. */ protected void wrongBoxSize () { _repInfo.setMessage (new ErrorMessage ("Incorrect Box size for " + getSelfPropName (), _module.getFilePos ())); _repInfo.setWellFormed (false); } /** Utility error reporting function for box in a context * (superbox or lack thereof) which is not permitted. * Sets the RepInfo's wellFormed flag to false. */ protected void wrongBoxContext () { _repInfo.setMessage (new ErrorMessage ("Invalid context for " + getSelfPropName (), _module.getFilePos ())); _repInfo.setWellFormed (false); } /** Utility error reporting function for a box which is * expected to have subboxes, but doesn't. */ protected void emptyBox () { _repInfo.setMessage (new ErrorMessage ("Box is empty", "Box type = " + getSelfPropName (), _module.getFilePos ())); _repInfo.setWellFormed (false); } /** Make a Property from the association list. * Returns null if the list is empty. */ protected Property makeAssocProperty () { if (associations.isEmpty ()) { return null; } else return new Property ("Associations", PropertyType.PROPERTY, PropertyArity.LIST, associations); } /** Returns a Property which describes the Box, for use * by Association boxes and perhaps others. * Most subclasses will only have to override * getSelfPropName and * getSelfPropDesc. A subclass * that shouldn't be added to the Association box's * property can override this to return null. */ protected Property selfDescProperty () { List subprops = new ArrayList (2); String name = getSelfPropName (); if (name == null) { return null; } subprops.add (new Property ("Name", PropertyType.STRING, name)); Property p2 = getSelfPropDesc (); if (p2 != null) { subprops.add (p2); } return new Property ("Box", PropertyType.PROPERTY, PropertyArity.LIST, subprops); } /** Returns the name of the Box. All Boxes should * override this. */ protected String getSelfPropName () { return null; } /** Returns a Property which describes the box. This is * used as a subproperty of the Property returned by * selfDescProperty. Properties that we don't care to * describe don't have to override this. This class * should return either null or a property * with DESCRIPTION_NAME for its name. */ protected Property getSelfPropDesc (){ return null; } /** Returns the length of the box, including header, based * on the information in the header. */ protected long getLength () { return _boxHeader.getLength(); } } jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/JP2HeaderBox.java0000644000707400001440000001273510771562661025174 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.jpeg2000; import java.io.*; import edu.harvard.hul.ois.jhove.*; /** * JP2 Header Box. * See I.5.3 in ISO/IEC 15444-1:2000 * and ISO/IEC FCD15444-2: 2000, L.9.2 * * * @author Gary McGath * */ public class JP2HeaderBox extends JP2Box { /** * Constructor with superbox. */ public JP2HeaderBox (RandomAccessFile raf, BoxHolder parent) { super (raf, parent); } /** Reads the box, putting appropriate information in * the RepInfo object. setModule, setBoxHeader, * setRepInfo and setDataInputStream must be called * before readBox is called. * readBox must completely consume the * box, so that the next byte to be read by the * DataInputStream is the FF byte of the next Box. */ public boolean readBox() throws IOException { initBytesRead (); hasBoxes = true; //int sizeLeft = (int) _boxHeader.getDataLength (); if (_module.isJP2HdrSeen ()) { _repInfo.setMessage (new ErrorMessage ("Multiple JP2 Header Boxes not allowed", _module.getFilePos ())); // Skip the redundant box and set invalid flag, // but keep going. _repInfo.setValid (false); if (_boxHeader.getLength () != 0) { _module.skipBytes (_dstrm, (int) _boxHeader.getDataLength (), _module); } } _module.setJP2HdrSeen (true); // In JP2 format, this must come before the Contiguous // Codestream if (_module.getNCodestreams () > 0) { _module.setJP2Compliant (false); } // The JP2 header consists of a variety of boxes, // so we keep reading boxes till we run out of bytes. //BoxHeader subhdr = new BoxHeader (_module, _dstrm); int state = 0; // state variable for checking progress of boxes JP2Box box = null; boolean hasCMap = false; boolean hasPalette = false; while (hasNext ()) { box = (JP2Box) next (); // A JPX, but not a JP2, can have a Label Box // before the Image header. if (state == 0 && box instanceof LabelBox) { state = 1; _module.setJP2Compliant (false); //box = new LabelBox (this); if (!box.readBox ()) { return false; } _module.addProperty (new Property ("JP2HeaderLabel", PropertyType.STRING, ((LabelBox) box).getLabel ())); // Read the next box box = (JP2Box) next (); } // First box, except perhaps for the label box, // is the image header. else if (state <= 1) { if (box instanceof ImageHeaderBox) { state = 2; if (!box.readBox ()) { return false; } } else { _repInfo.setMessage (new ErrorMessage ("First box of JP2 header must be image header", _module.getFilePos ())); _repInfo.setWellFormed (false); return false; } } else { // Only certain boxes are meaningful in a JP2 Header. // However, others should be skipped over, not considered // errors. if (box instanceof AssociationBox || box instanceof BPCCBox || box instanceof ColorSpecBox || box instanceof PaletteBox || box instanceof ComponentMapBox || box instanceof ChannelDefBox || box instanceof ResolutionBox || box instanceof ROIBox) { if (!box.readBox ()) { return false; } } else { box.skipBox (); } } } // Consistency checks if (hasCMap && !hasPalette) { _repInfo.setMessage (new ErrorMessage ("JP2 Header has Component Mapping box without Palette Box", _module.getFilePos ())); _repInfo.setValid (false); } if (!hasCMap && hasPalette) { _repInfo.setMessage (new ErrorMessage ("JP2 Header has Palette box without Component Mapping Box", _module.getFilePos ())); _repInfo.setValid (false); } // If there were any Associations, add a property for them. Property a = makeAssocProperty (); if (a != null) { _module.addProperty(a); } finalizeBytesRead (); return true; } /** Returns the name of the Box. */ protected String getSelfPropName () { return "JP2 Header Box"; } } jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/JP2Strings.java0000644000707400001440000001032210771562665024756 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College * **********************************************************************/ package edu.harvard.hul.ois.jhove.module.jpeg2000; /** * String constants for JPEG 2000 module. * This module contains no code, and all data are static. * * * @author Gary McGath * */ public final class JP2Strings { /** * Private constructor, to make sure the class isn't inadvertently * initiated. */ private JP2Strings () { } /** Strings for method values in the color specification box. */ public final static String methodStr[] = { "", "Enumerated Colorspace", "Restricted ICC Profile", "Any ICC Method", "Vendor Color Method" }; /** Strings for values of enumCS in the color specification box. * Only values 16-17 are recognized by JP2. */ public final static String enumCSStr[] = { "Bilevel (1 = black)", "YCbCr (1)", "", "YCbCr (2)", "YCbCr (3)", "", "", "", "", // 5-8 "PhotoYCC", "", "CMY", // 11 "CMYK", // 12 "YCCK", "CIELab", "", "sRGB", // 16 (JP2) "Greyscale", // 17 (JP2) "Bilevel (1 = white)", "CIEJab", "e-sRGB", // 20 "ROMM-RGB", "sRGB based YCbCr", "YPbPr (1125/60)", "YPbPr (1250/50)" // 24 }; /** Strings for the MTYP field of the Component Mapping box. */ public final static String mtypStr[] = { "Direct Use", "Palette Mapping" }; /** Strings for the opacity type in the Opacity Box. */ public final static String opacityTypeStr[] = { "Last channel is opacity channel", "Last channel is premultiplied opacity channel", "Chroma key transparency" }; /** Strings for the number type value in the Number * List box. Types must be normalized by shifting * the high byte right 24 bits before indexing. */ public final static String numberListTypeStr[] = { "Rendered result", "Codestream number", "Compositing layer", "Numbered entity" }; /** Strings for types in the Digital Signature Box. */ public final static String digitalSigTypeStr[] = { "MD5 checksum", "SHA-1 checksum", "DSA signature", "RSA signature on MD5 digest", "RSA signature on SHA-1 digest", "Cryptographic Message Syntax" }; /** Strings for pointer types in the Digital Signature Box. */ public final static String digitalSigPtrTypeStr[] = { "Whole file", "Byte range" }; /** Strings for the "region of interest present in codestream" field * of the ROI box. */ public final static String inCodestreamStr[] = { "Codestream does not contain static region of interest", "Codestream contains static region of interest" }; /** Strings for the region type field of the ROI box. */ public final static String roiTypeStr[] = { "Rectangular", "Elliptical" }; /** Strings for the channel type field of the channel definition box, * indexed by ctypIdx. */ public final static String ctypStr[] = { "Color image data", "Opacity", "Premultiplied opacity", "Not specified" // 2^16 - 1 }; /** Indexes for ctypStr. */ public final static int ctypIdx[] = {0, 1, 2, 65535}; /** Strings for the approx field of the color specification box, * indexed by approxIdx. A zero value will be reported as * an Integer property of 0. */ public final static String approxStr[] = { "Accurate representation", "Approximation with exceptional quality", "Approximation with reasonable quality", "Approximation with poor quality" }; /** Indexes for approxStr. */ public final static int approxIdx[] = {1, 2, 3, 4}; } jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/LabelBox.java0000644000707400001440000000424110771562651024477 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College * **********************************************************************/ package edu.harvard.hul.ois.jhove.module.jpeg2000; import edu.harvard.hul.ois.jhove.*; import java.io.*; /** * Label box. * A Label box does nothing in itself; it simply makes its * label string available for its superbox. * * See ISO/IEC FCD15444-2: 2000, L.9.13 * * @author Gary McGath * */ public class LabelBox extends JP2Box { /* The label text. */ private String _label; /** * Constructor with superbox. * * @param parent parent superbox of this box */ public LabelBox(RandomAccessFile raf, BoxHolder parent) { super(raf, parent); } /** Reads the box, saving the label text. * setModule, setBoxHeader, * setRepInfo and setDataInputStream must be called * before readBox is called. * readBox must completely consume the * box, so that the next byte to be read by the * DataInputStream is the FF byte of the next Box. */ public boolean readBox() throws IOException { if (_parentBox == null) { wrongBoxContext(); return false; } byte[] byteBuf = new byte [(int) _boxHeader.getDataLength()]; ModuleBase.readByteBuf (_dstrm, byteBuf, _module); _label = new String (byteBuf, "UTF-8"); return true; } /** Returns the label string. Valid only after * readBox() has been called. */ protected String getLabel () { return _label; } /** Returns a Property which describes the Box, for use * by Association boxes and perhaps others. */ protected Property getSelfPropDesc () { return new Property (DESCRIPTION_NAME, PropertyType.STRING, _label); } /** Returns the name of the Box. */ protected String getSelfPropName () { return "Label Box"; } } jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/MainOrTile.java0000644000707400001440000000614710771562672025024 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.jpeg2000; import edu.harvard.hul.ois.jhove.*; import java.util.*; /** * * Abstract superclass for Codestream and Tile classes. * Many marker segments can apply either to the codestream * as a whole or to specific tiles; this class merges those * features in a single place. * * @author Gary McGath * */ public abstract class MainOrTile { /* Default value */ protected final static int NULL = -1; /* Precinct size array */ protected int[] _precSize; /** Array of components. This is created when the SIZ * marker segment reports the number of components. */ protected Property[] _components; /** Coding style default property */ protected Property _codProperty; /** Quantization default property */ protected Property _qcdProperty; /** Progression order change property */ protected Property _pocProperty; /** Comments -- list of properties */ protected List _comments; /* List of packet lengths */ protected List _packetLengthList; public MainOrTile () { _components = null; _qcdProperty = null; _codProperty = null; _comments = new LinkedList (); } /** Sets the number of components. As a side effect, * creates the compoments array. This should be called * from the SIZMarkerSegment class, and in a valid * file will precede the setting of any components. */ public void setNumComponents (int nComp) { _components = new Property[nComp]; } /** Sets a property indexed by component. */ public void setCompProperty (int idx, Property prop) { if (_components != null && _components.length > idx) { _components[idx] = prop; } } /** Gets the number of components. */ protected int getNumComponents () { if (_components == null) { return 0; } else { return _components.length; } } /** Sets the coding style default property. */ public void setCODProperty (Property prop) { _codProperty = prop; } /** Sets the quantization default property. */ public void setQCDProperty (Property prop) { _qcdProperty = prop; } /** Sets the progression order change property. */ public void setPOCProperty (Property prop) { _pocProperty = prop; } /** Adds a property to the comment list */ public void addComment (Property comment) { _comments.add (comment); } /** Add a packet length to the list of packet lengths. */ public void addPacketLength (long len) { if (_packetLengthList == null) { _packetLengthList = new LinkedList (); } _packetLengthList.add (new Long (len)); } } jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/Marker.java0000644000707400001440000000207710771562665024242 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.jpeg2000; import java.io.*; /** * This is a subclass of MarkerSegment for Markers. * Markers are those elements of a codestream which have * no parameters. It can be subclassed for specific Markers, * or used directly to provide default behavior. * * @author Gary McGath * */ public class Marker extends MarkerSegment { public Marker () { } /** Overrides the superclass to return 0 without consuming * any bytes from the DataInputStream. */ protected int readMarkLen () throws IOException { return 0; } /** Default processing. Does nothing, and always returns true. */ protected boolean process (int bytesToEat) { return true; } } jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/MarkerSegment.java0000644000707400001440000001673510771562673025572 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.jpeg2000; import java.io.*; import edu.harvard.hul.ois.jhove.*; import edu.harvard.hul.ois.jhove.module.Jpeg2000Module; /** * Abstract superclass for marker segments. * * @author Gary McGath * */ public abstract class MarkerSegment { protected final static int SOC = 0X4F, // start of codestream COD = 0X52, // coding style default COC = 0X53, // coding style component TLM = 0X55, // tile-part lengths PLM = 0X57, // packet length, main header PLT = 0X58, // packet length, tile-part header QCD = 0X5C, // quantization default QCC = 0X5D, // quantization component RGN = 0X5E, // region of interest POC = 0X5F, // progression order change PPM = 0X60, // Packed packet headers, main header PPT = 0X61, // packed packet headers, tile-part header CRG = 0X63, // component registration COM = 0X64, // comment SOT = 0X90, // start of tile part SOP = 0X91, // start of packet EPH = 0X92, // end of packet header SOD = 0X93, // start of data EOC = 0XD9, // end of codestream SIZ = 0X51; // image and tile size protected ContCodestream _ccs; protected Codestream _cs; protected Jpeg2000Module _module; protected DataInputStream _dstream; protected RepInfo _repInfo; /** * Constructor. * After an instance of a MarkerSegment is created, * the setter methods setContCodestream, * setCodestream, setModule, * and setDataInputStream must all be called as * part of the setup before process is called. */ public MarkerSegment () { } /** Sets the Continuous Codestream from which this marker was * obtained. */ public void setContCodestream (ContCodestream ccs) { _ccs = ccs; } /** Sets the Codestream object being built. */ public void setCodestream (Codestream cs) { _cs = cs; } /** Sets the Module under which all this is happening. */ public void setModule (Jpeg2000Module module) { _module = module; } /** Sets the DataInputStream over which this marker is being * read. */ public void setDataInputStream (DataInputStream dstream) { _dstream = dstream; } /** Sets the RepInfo into which messages may be placed. */ public void setRepInfo (RepInfo repInfo) { _repInfo = repInfo; } /** Returns true if this segment is a Marker. * Will return false unless overridden. */ public boolean isMarker () { return false; } /** Static factory method for generating an object of the * appropriate subclass of MarkerSegment, based on the * marker code. * * @param markerCode The 8-bit marker code (ignoring the FF). */ protected static MarkerSegment markerSegmentMaker (int markerCode) { switch (markerCode) { case SOT: return new SOTMarkerSegment (); case COC: return new COCMarkerSegment (); case COD: return new CODMarkerSegment (); case COM: return new CommentMarkerSegment (); case CRG: return new CRGMarkerSegment (); case PLM: return new PLMMarkerSegment (); case PLT: return new PLTMarkerSegment (); case POC: return new POCMarkerSegment (); case PPM: return new PPMMarkerSegment (); case PPT: return new PPTMarkerSegment (); case QCC: return new QCCMarkerSegment (); case QCD: return new QCDMarkerSegment (); case RGN: return new RGNMarkerSegment (); case SIZ: return new SIZMarkerSegment (); case TLM: return new TLMMarkerSegment (); case SOC: // start of codestream case EPH: // end of packet header case SOD: // start of data case EOC: return new Marker (); // SOP won't be implemented, at least for the time // being, since it occurs within the bitstream data // of a codestream, which we don't analyze. case SOP: default: return new DefaultMarkerSegment (); } } /** Reads and returns the length field of the marker segment. * The setter methods setModule * and setDataInputStream must be called as * part of the setup before readMarkLen is called. */ protected int readMarkLen () throws IOException { return _module.readUnsignedShort (_dstream); } /** Determines size of fields indexed by number of components. * Some marker segments have fields which are 1 byte long if * the number of components is 1-255, and 2 bytes long if * the number of components is 256-65535. * * @return 0 if number of components not yet set, otherwise 1 or 2 */ protected int nCompBytes () { int nComp = _cs.getNumComponents (); if (nComp == 0) { return 0; // indicates an error condition } int compIdx; // size of Ccoc field depends on number of components return (nComp < 257 ? 1 : 2); } /** Returns the MainOrTile object which is currently * applicable in the Contiguous Codestream. If the * Contiguous Codestream has a current Tile, that is * returned; otherwise the Codestream object established * by setCodestream is returned. */ protected MainOrTile getMainOrTile () { Tile tile = _ccs.getCurTile (); if (tile != null) { return tile; } else { return _cs; } } /** Process the marker or marker segment. The DataInputStream * will be at the point of having read the marker code. The * process method must consume exactly the number * of bytes remaining in the marker segment; for a marker, * this number will always be 0. * * @param bytesToEat The number of bytes that must be consumed. * For a Marker, this number will always be 0. * If it is 0 for a MarkerSegment, the * number of bytes to consume is unknown. * @return true if segment is well-formed, * false otherwise. */ protected abstract boolean process (int bytesToEat) throws IOException; } jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/NumberListBox.java0000644000707400001440000000607210771562664025554 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.jpeg2000; import edu.harvard.hul.ois.jhove.*; import java.io.*; /** * Number list box. * Provides a list of numbers with types. * It's apparently used only within an Association * box, so it simply makes a property available. * * See ISO/IEC FCD15444-2: 2000, L.9.12 * * @author Gary McGath * */ public class NumberListBox extends JP2Box { private Property[] propArray; /** * Constructor with superbox. * * @param parent parent superbox of this box */ public NumberListBox(RandomAccessFile raf, BoxHolder parent) { super(raf, parent); } /** Reads the box, putting appropriate information in * the RepInfo object. setModule, setBoxHeader, * setRepInfo and setDataInputStream must be called * before readBox is called. * readBox must completely consume the * box, so that the next byte to be read by the * DataInputStream is the FF byte of the next Box. */ public boolean readBox() throws IOException { initBytesRead (); int numEntries = (int) _boxHeader.getDataLength () / 4; if (numEntries > 0) { propArray = new Property[numEntries]; for (int i = 0; i < numEntries; i++) { long num = _module.readUnsignedInt (_dstrm); // High byte is type, low three bytes are the // number. int typeByte = (int) ((num & 0XFF000000L) >> 24); int numValue = (int) (num & 0XFFFFFF); App app = _module.getApp (); Property[] p = new Property[2]; p[0] = _module.addIntegerProperty("Type", typeByte, JP2Strings.numberListTypeStr); p[1] = new Property ("Value", PropertyType.INTEGER, new Integer (numValue)); propArray[i] = new Property ("Number", PropertyType.PROPERTY, PropertyArity.ARRAY, p); } } finalizeBytesRead (); return true; } /** Returns a Property which describes the Box, for use * by Association boxes and perhaps others. */ protected Property getSelfPropDesc () { if (propArray != null) { return new Property (DESCRIPTION_NAME, PropertyType.PROPERTY, PropertyArity.ARRAY, propArray); } else { // A number list with no numbers isn't explicitly illegal return null; } } /** Returns the name of the Box. */ protected String getSelfPropName () { return "Number List Box"; } } jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/OpacityBox.java0000644000707400001440000000704710771562670025100 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College * **********************************************************************/ package edu.harvard.hul.ois.jhove.module.jpeg2000; import edu.harvard.hul.ois.jhove.*; import java.io.*; import java.util.*; /** * Opacity Box (JPX). * See ISO/IEC FCD15444-2: 2000, L.9.4.6 * * * @author Gary McGath * */ public class OpacityBox extends JP2Box { /** * Constructor with superbox. * * @param parent parent superbox of this box */ public OpacityBox(RandomAccessFile raf, BoxHolder parent) { super(raf, parent); } /** Reads the box, putting appropriate information in * the RepInfo object. setModule, setBoxHeader, * setRepInfo and setDataInputStream must be called * before readBox is called. * readBox must completely consume the * box, so that the next byte to be read by the * DataInputStream is the FF byte of the next Box. */ public boolean readBox() throws IOException { if (!(_parentBox instanceof ComposLayerHdrBox)) { wrongBoxContext(); return false; } initBytesRead (); List propList = new ArrayList (4); App app = _module.getApp (); int otyp = ModuleBase.readUnsignedByte (_dstrm, _module); propList.add (_module.addIntegerProperty ("Type", otyp, JP2Strings.opacityTypeStr)); if (otyp > 2) { _repInfo.setMessage (new ErrorMessage ("Invalid OTyp field in Opacity Box", _module.getFilePos ())); _repInfo.setValid (false); return false; } // The documentation of the Opacity Box is self-contradictory // with regard to what OTyp values are // followed by NCH and CV[n] fields. (There is also // a reference to an unspecified "PR" field.) // The only safe course is to see if there are any more bytes. int bytesLeft = (int) _boxHeader.getDataLength () - 1; if (bytesLeft > 0) { int nch = ModuleBase.readUnsignedByte (_dstrm, _module); // The size in bytes of the channel-key values // depends on the bit depth of the corresponding // channel, but it's simpler to calculate it based // on the bytes remaining. int[] keys = new int[nch]; int keysize = (bytesLeft - 1) / nch; for (int i = 0; i < nch; i++) { int chkey = 0; for (int j = 0; j < keysize; j++) { chkey = (chkey << 8) + ModuleBase.readUnsignedByte (_dstrm, _module); } keys[i] = chkey; } propList.add (new Property ("ChromaKeyValues", PropertyType.INTEGER, PropertyArity.ARRAY, keys)); } ((ComposLayerHdrBox) _parentBox).addOpacity (new Property ("Opacity", PropertyType.PROPERTY, PropertyArity.LIST, propList)); finalizeBytesRead (); return true; } /** Returns the name of the Box. */ protected String getSelfPropName () { return "Opacity Box"; } } jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/PLMMarkerSegment.java0000644000707400001440000000575510771562676026146 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College * **********************************************************************/ package edu.harvard.hul.ois.jhove.module.jpeg2000; import java.io.*; //import java.util.*; import edu.harvard.hul.ois.jhove.*; /** * Class for the PLM Marker segment. This gives packet lengths at * the header level. * * @author Gary McGath * */ public class PLMMarkerSegment extends MarkerSegment { // A tile part may extend across several marker segments. // we store the remainder statically here. static int nplmLeft; /** * Constructor. */ public PLMMarkerSegment() { super(); } /** * Processes the marker segment. The DataInputStream * will be at the point of having read the marker code. The * process method must consume exactly the number * of bytes remaining in the marker segment. * * @param bytesToEat The number of bytes that must be consumed. * If it is 0 for a MarkerSegment, the * number of bytes to consume is unknown. */ protected boolean process(int bytesToEat) throws IOException { int zplm = ModuleBase.readUnsignedByte (_dstream, _module); --bytesToEat; if (zplm == 0) { nplmLeft = 0; } // Whether there is an nplm, giving the number of bytes // of iplm information for the tile part, depends on whether // the previous nplm has been counted out. This is actually // quite excessive, since nplm can't be any bigger than 255. // Who DESIGNED this silly marker segment anyway? if (nplmLeft == 0) { nplmLeft = ModuleBase.readUnsignedByte (_dstream, _module); --bytesToEat; } // To add to the complications, each iplm can have a different // length. This allows unlimited packet lengths -- // or to be exact, the maximum length is 2 ^ (7 * 255) if there's // only one packet. For this implementation, we limit the maximum // packet length to 2 ^ 63. while (bytesToEat > 0) { long pktLen = 0; for (;;) { int pkByte = ModuleBase.readUnsignedByte (_dstream, _module); if (--bytesToEat < 0) { // bytes of a number can't cross marker segment boundaries _repInfo.setMessage (new ErrorMessage ("Packet length in PLM marker segment crosses segment boundaries")); return false; } pktLen = (pktLen << 7) | (pkByte | 0X7F); if ((pkByte & 0X80) == 0) { break; } _cs.addPacketLength (pktLen); } } return true; } } jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/PLTMarkerSegment.java0000644000707400001440000000506610771562674026146 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College * **********************************************************************/ package edu.harvard.hul.ois.jhove.module.jpeg2000; import java.io.*; //import java.util.*; import edu.harvard.hul.ois.jhove.*; /** * Class for the PLT Marker segment. This gives packet lengths at * the tile level. * * @author Gary McGath * */ public class PLTMarkerSegment extends MarkerSegment { /** * Constructor. */ public PLTMarkerSegment() { super(); } /** * Processes the marker segment. The DataInputStream * will be at the point of having read the marker code. The * process method must consume exactly the number * of bytes remaining in the marker segment. * * @param bytesToEat The number of bytes that must be consumed. * If it is 0 for a MarkerSegment, the * number of bytes to consume is unknown. */ protected boolean process(int bytesToEat) throws IOException { Tile tile = _ccs.getCurTile (); if (tile == null) { _repInfo.setMessage (new ErrorMessage ("PLT marker segment not allowed in codestream header")); return false; // a tile (SOT) is required } int zplt = ModuleBase.readUnsignedByte (_dstream, _module); --bytesToEat; // As with PLM, each iplt can have a different // length. This allows unlimited packet lengths -- // or to be exact, the maximum length is 2 ^ (7 * 255) if there's // only one packet. For this implementation, we limit the maximum // packet length to 2 ^ 63. while (bytesToEat > 0) { long pktLen = 0; for (;;) { int pkByte = ModuleBase.readUnsignedByte (_dstream, _module); if (--bytesToEat < 0) { // bytes of a number can't cross marker segment boundaries _repInfo.setMessage (new ErrorMessage ("Packet length in PLT marker segment crosses segment boundaries")); return false; } pktLen = (pktLen << 7) | (pkByte | 0X7F); if ((pkByte & 0X80) == 0) { break; } tile.addPacketLength (pktLen); } } return true; } } jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/POCMarkerSegment.java0000644000707400001440000001035610771562674026126 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College * **********************************************************************/ package edu.harvard.hul.ois.jhove.module.jpeg2000; import java.io.*; import edu.harvard.hul.ois.jhove.*; /** * Class for the POC (Progression order change) marker segment. * May occur in the main or the tile part header. * * @author Gary McGath * */ public class POCMarkerSegment extends MarkerSegment { /** * */ public POCMarkerSegment() { super(); } /** Process the marker segment. The DataInputStream * will be at the point of having read the marker code. The * process method must consume exactly the number * of bytes remaining in the marker segment. * * @param bytesToEat The number of bytes that must be consumed. * If it is 0 for a MarkerSegment, the * number of bytes to consume is unknown. * * @return true if segment is well-formed, * false otherwise. */ protected boolean process(int bytesToEat) throws IOException { int compIdxBytes = nCompBytes(); if (compIdxBytes == 0) { _repInfo.setMessage (new ErrorMessage ("POC marker segment at wrong position in codestream")); // POC found before SIZ return false; } // The number of bytes per change depends on whether component // indices take one or two bytes. int changeSize = compIdxBytes < 257 ? 7 : 9; // number of bytes per change int nChanges = bytesToEat / changeSize; // Make sure it's an even multiple if (changeSize * nChanges != bytesToEat) { _repInfo.setMessage (new ErrorMessage ("Invalid size for POC marker segment")); return false; } Property[] changes = new Property[nChanges]; for (int i = 0; i < nChanges; i++) { int rspoc = _module.readUnsignedShort (_dstream); // resolution level idx int cspoc; // size of Ccoc field depends on number of components if (compIdxBytes < 257) { cspoc = ModuleBase.readUnsignedByte (_dstream, _module); } else{ cspoc = _module.readUnsignedShort (_dstream); } int lyepoc = _module.readUnsignedShort (_dstream); int repoc = ModuleBase.readUnsignedByte (_dstream, _module); int cepoc; if (compIdxBytes < 257) { cepoc = ModuleBase.readUnsignedByte (_dstream, _module); } else { cepoc = _module.readUnsignedShort (_dstream); } int ppoc = ModuleBase.readUnsignedByte (_dstream, _module); Property[] propArr = new Property[5]; propArr[0] = new Property ("StartResolutionLevelIndex", PropertyType.INTEGER, new Integer (rspoc)); propArr[1] = new Property ("ComponentIndex", PropertyType.INTEGER, new Integer (cspoc)); propArr[2] = new Property ("LayerIndex", PropertyType.INTEGER, new Integer (lyepoc)); propArr[3] = new Property ("EndResolutionLevelIndex", PropertyType.INTEGER, new Integer (cepoc)); propArr[4] = new Property ("ProgressionOrder", PropertyType.INTEGER, new Integer (ppoc)); changes[i] = new Property ("Change", PropertyType.PROPERTY, PropertyArity.ARRAY, propArr); } MainOrTile cs = getMainOrTile (); cs.setPOCProperty (new Property ("ProgressionOrderChange", PropertyType.PROPERTY, PropertyArity.ARRAY, changes)); return true; } } jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/PPMMarkerSegment.java0000644000707400001440000000415010771562676026136 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.jpeg2000; import java.io.*; import edu.harvard.hul.ois.jhove.*; /** * Class for the PPM (Packed packet headers, main header) * marker segment. I'm assuming for the present that the * full details of packet headers is getting deeper into * the bits than we want, so it just checks some basic * information. There can be multiple PPM marker segments. * * @author Gary McGath * */ public class PPMMarkerSegment extends MarkerSegment { /** * Constructor. */ public PPMMarkerSegment() { super(); _ccs.setPPMSeen (true); } /** * Processes the marker segment. The DataInputStream * will be at the point of having read the marker code. The * process method must consume exactly the number * of bytes remaining in the marker segment. * * @param bytesToEat The number of bytes that must be consumed. * If it is 0 for a MarkerSegment, the * number of bytes to consume is unknown. */ protected boolean process(int bytesToEat) throws IOException { // Get index of this segment int zppm = ModuleBase.readUnsignedByte (_dstream, _module); --bytesToEat; while (bytesToEat > 0) { // Number of bytes of Ippm info in the ith tile part long nppm = _module.readUnsignedInt (_dstream); bytesToEat -= 4; if (nppm > bytesToEat) { _repInfo.setMessage(new ErrorMessage ("Invalid length for tile-part header in PPM packet")); return false; } _cs.addPPMLength (nppm); _module.skipBytes (_dstream, (int) nppm, _module); bytesToEat -= nppm; } return true; } } jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/PPTMarkerSegment.java0000644000707400001440000000451310771562670026142 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.jpeg2000; import java.io.*; import edu.harvard.hul.ois.jhove.*; /** * Class for the PPT (Packed packet headers, tile-part header) * marker segment. Similar to the PPM marker segment, but * applicable to tile parts rather than the main header. * * @author Gary McGath * */ public class PPTMarkerSegment extends MarkerSegment { /** * Constructor. */ public PPTMarkerSegment() { super(); } /** * Processes the marker segment. The DataInputStream * will be at the point of having read the marker code. The * process method must consume exactly the number * of bytes remaining in the marker segment. * * @param bytesToEat The number of bytes that must be consumed. * If it is 0 for a MarkerSegment, the * number of bytes to consume is unknown. */ protected boolean process(int bytesToEat) throws IOException { if (_ccs.isPPMSeen ()) { _repInfo.setMessage (new ErrorMessage ("PPT and PPM not allowed in same codestream")); return false; } Tile tile = _ccs.getCurTile (); if (tile == null ) { _repInfo.setMessage (new ErrorMessage ("PPT not allowed in codestream header")); return false; } int zppt = ModuleBase.readUnsignedByte (_dstream, _module); --bytesToEat; while (bytesToEat > 0) { // Number of bytes of Ippm info in the ith tile part long nppt = _module.readUnsignedInt (_dstream); bytesToEat -= 4; if (nppt > bytesToEat) { _repInfo.setMessage(new ErrorMessage ("Invalid length for tile-part header in PPM packet")); return false; } tile.addPPTLength (nppt); _module.skipBytes (_dstream, (int) nppt, _module); bytesToEat -= nppt; } return true; } } jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/PaletteBox.java0000644000707400001440000001076210771562660025063 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.jpeg2000; import edu.harvard.hul.ois.jhove.*; import java.io.*; /** * Palette box. * See I.5.3.4 in ISO/IEC 15444-1:2000 * * @author Gary McGath * */ public class PaletteBox extends JP2Box { /** * Constructor with superbox. * * @param parent parent superbox of this box */ public PaletteBox (RandomAccessFile raf, BoxHolder parent) { super (raf, parent); } /** Reads the box, putting appropriate information in * the RepInfo object. setModule, setBoxHeader, * setRepInfo and setDataInputStream must be called * before readBox is called. * readBox must completely consume the * box, so that the next byte to be read by the * DataInputStream is the FF byte of the next Box. */ public boolean readBox() throws IOException { if (!(_parentBox instanceof JP2HeaderBox)) { _repInfo.setMessage (new ErrorMessage ("Image Header Box in illegal context", _module.getFilePos ())); return false; } initBytesRead (); //_module.setPaletteSeen (true); int len = (int) _boxHeader.getDataLength (); long startNByte = _module.getFilePos(); // Track how many bytes to skip int ne = _module.readUnsignedShort (_dstrm); // 2 bytes have been read if (ne < 1 || ne > 1024) { _repInfo.setMessage (new ErrorMessage ("Palette must have 1 to 1024 entries", _module.getFilePos())); _repInfo.setValid (false); // But keep going anyway } Property[] subProp = new Property[4]; subProp[0] = new Property ("Entries", PropertyType.INTEGER, new Integer (ne)); int nc = ModuleBase.readUnsignedByte (_dstrm, _module); // 3 bytes have been read int bytesRead = 3; subProp[1] = new Property ("Components", PropertyType.INTEGER, new Integer (nc)); // Each component can, in principle, have a different bit depth, // and each can separately be signed or unsigned. int[] bpc = new int [nc]; boolean[] cmpsigned = new boolean [nc]; for (int i = 0; i < nc; i++) { int b = ModuleBase.readUnsignedByte (_dstrm, _module); cmpsigned[i] = ((b & 0X80) != 0); bpc[i] = (b & 0X7F) + 1; } bytesRead += nc; subProp[2] = new Property ("BitDepth", PropertyType.INTEGER, PropertyArity.ARRAY, bpc); // Now the actual component value arrays. Skip this if // ne is out of bounds. if (ne > 1024 || ne < 1) { subProp[3] = new Property ("Values", PropertyType.STRING, "Invalid"); } else { Property[] cprop = new Property[nc]; for (int i = 0; i < nc; i++) { int[] c = new int[ne]; for (int j = 0; j < ne; j++) { c[j] = ModuleBase.readUnsignedByte (_dstrm, _module); } cprop[i] = new Property ("Component", PropertyType.INTEGER, PropertyArity.ARRAY, c); } subProp[3] = new Property ("Values", PropertyType.PROPERTY, PropertyArity.ARRAY, cprop); bytesRead += nc * ne; } Property palProp = new Property ("Palette", PropertyType.PROPERTY, PropertyArity.ARRAY, subProp); if (_parentBox instanceof CodestreamHeaderBox) { Codestream cs = ((CodestreamHeaderBox) _parentBox).getCodestream (); cs.setPaletteProperty (palProp); } else { _module.addProperty (palProp); } // Skip any bytes we haven't read _module.skipBytes (_dstrm, (int) (len - (_module.getFilePos() - startNByte)), _module); finalizeBytesRead (); return true; } /** Returns the name of the Box. */ protected String getSelfPropName () { return "Palette Box"; } } jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/QCCMarkerSegment.java0000644000707400001440000000734610771562660026113 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.jpeg2000; import java.io.*; import java.util.*; import edu.harvard.hul.ois.jhove.*; /** * Class for the QCC (Quantization component) marker segment. * May occur in the main or the tile part header. In the * main header it overrides the QCD for the specified * component. In the tile part header it overrides the * QCD for the component in the tile part. * * @author Gary McGath * */ public class QCCMarkerSegment extends MarkerSegment { /** * */ public QCCMarkerSegment() { super(); } /** Process the marker segment. The DataInputStream * will be at the point of having read the marker code. The * process method must consume exactly the number * of bytes remaining in the marker segment. * * @param bytesToEat The number of bytes that must be consumed. * If it is 0 for a MarkerSegment, the * number of bytes to consume is unknown. * * @return true if segment is well-formed, * false otherwise. */ protected boolean process(int bytesToEat) throws IOException { int compIdxBytes = nCompBytes(); if (compIdxBytes == 0) { // QCC found before SIZ _repInfo.setMessage (new ErrorMessage ("QCC marker segment at wrong position in codestream")); return false; } int compIdx; int bytesEaten; // size of Ccoc field depends on number of components if (compIdxBytes < 257) { compIdx = ModuleBase.readUnsignedByte (_dstream, _module); bytesEaten = 1; } else{ compIdx = _module.readUnsignedShort (_dstream); bytesEaten = 2; } int sqcc = ModuleBase.readUnsignedByte (_dstream, _module); bytesEaten++; int sqccLow = sqcc & 0X1F; int nspqcc; int spqcc[]; switch (sqccLow) { case 0: // no quantization -- byte entries in spqcd nspqcc = bytesToEat - bytesEaten; spqcc = new int[nspqcc]; for (int i = 0; i < nspqcc; i++) { spqcc[i] = ModuleBase.readUnsignedByte (_dstream, _module); } break; case 1: // scalar derived (just 2 bytes of value) case 2: // scalar expounded nspqcc = (bytesToEat - bytesEaten) / 2; spqcc = new int[nspqcc]; for (int i = 0; i < nspqcc; i++) { spqcc[i] = _module.readUnsignedShort (_dstream); } break; default: _repInfo.setMessage (new ErrorMessage ("Unrecognized quantization type in QCC marker segment")); return false; // reserved value } MainOrTile cs = getMainOrTile (); List propList = new ArrayList (2); propList.add (new Property ("QuantizationStyle", PropertyType.INTEGER, new Integer (sqcc))); propList.add (new Property ("StepValue", PropertyType.INTEGER, PropertyArity.ARRAY, spqcc)); cs.setCompProperty (compIdx, new Property ("QuantizationComponent", PropertyType.PROPERTY, PropertyArity.LIST, propList)); return true; } } jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/QCDMarkerSegment.java0000644000707400001440000000605410771562663026112 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.jpeg2000; import edu.harvard.hul.ois.jhove.*; import java.io.*; import java.util.*; /** * Class for the QCD (Quantization default) marker segment. * This comes either in the main header or * after an SOT. * * @author Gary McGath * */ public class QCDMarkerSegment extends MarkerSegment { /** * Constructor. */ public QCDMarkerSegment() { super(); } /** Process the marker segment. The DataInputStream * will be at the point of having read the marker code. The * process method must consume exactly the number * of bytes remaining in the marker segment. * * @param bytesToEat The number of bytes that must be consumed. * If it is 0 for a MarkerSegment, the * number of bytes to consume is unknown. * * @return true if segment is well-formed, * false otherwise. */ protected boolean process(int bytesToEat) throws IOException { int sqcd = ModuleBase.readUnsignedByte (_dstream, _module); // What follows depends on the value of sqcd in a messy way int sqcdLow = sqcd & 0X1F; int nspqcd; int spqcd[]; switch (sqcdLow) { case 0: // no quantization -- byte entries in spqcd nspqcd = bytesToEat - 1; spqcd = new int[nspqcd]; for (int i = 0; i < nspqcd; i++) { spqcd[i] = ModuleBase.readUnsignedByte (_dstream, _module); } break; case 1: // scalar derived (just 2 bytes of value) case 2: // scalar expounded nspqcd = (bytesToEat - 1) / 2; spqcd = new int[nspqcd]; for (int i = 0; i < nspqcd; i++) { spqcd[i] = _module.readUnsignedShort (_dstream); } break; default: _repInfo.setMessage (new ErrorMessage ("Unrecognized quantization type in QCD marker segment")); return false; // reserved value } List propList = new ArrayList (2); propList.add (new Property ("QuantizationStyle", PropertyType.INTEGER, new Integer (sqcd))); propList.add (new Property ("StepValue", PropertyType.INTEGER, PropertyArity.ARRAY, spqcd)); MainOrTile cs = getMainOrTile (); cs.setQCDProperty (new Property ("QuantizationDefault", PropertyType.PROPERTY, PropertyArity.LIST, propList)); return true; } } jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/RGNMarkerSegment.java0000644000707400001440000000476610771562667026145 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.jpeg2000; import edu.harvard.hul.ois.jhove.*; import java.io.*; import java.util.*; /** * Class for the RGN (region of interest) marker segment. * This comes either in the main header or * after an SOT. * * @author Gary McGath * */ public class RGNMarkerSegment extends MarkerSegment { /** * */ public RGNMarkerSegment() { super(); } /** * Processes the marker segment. The DataInputStream * will be at the point of having read the marker code. The * process method must consume exactly the number * of bytes remaining in the marker segment. * * @param bytesToEat The number of bytes that must be consumed. * If it is 0 for a MarkerSegment, the * number of bytes to consume is unknown. */ protected boolean process(int bytesToEat) throws IOException { int compIdxBytes = nCompBytes(); if (compIdxBytes == 0) { // RGN found before SIZ _repInfo.setMessage (new ErrorMessage ("RGN marker segment at wrong position in codestream")); return false; } int compIdx; // size of Ccoc field depends on number of components if (compIdxBytes < 257) { compIdx = ModuleBase.readUnsignedByte (_dstream, _module); } else{ compIdx = _module.readUnsignedShort (_dstream); } int srgn = ModuleBase.readUnsignedByte (_dstream, _module); int sprgn = ModuleBase.readUnsignedByte (_dstream, _module); MainOrTile cs = getMainOrTile (); List propList = new ArrayList (2); propList.add (new Property ("ROIStyle", PropertyType.INTEGER, new Integer (srgn))); propList.add (new Property ("ROIParameter", PropertyType.INTEGER, new Integer (sprgn))); cs.setCompProperty (compIdx, new Property ("RegionOfInterest", PropertyType.PROPERTY, PropertyArity.LIST, propList)); return true; } } jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/ROIBox.java0000644000707400001440000001157510771562676024130 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.jpeg2000; import edu.harvard.hul.ois.jhove.*; import java.io.*; import java.util.*; /** * ROI Description box (JPX). * See ISO/IEC FCD15444-2: 2000, L.9.16 * * @author Gary McGath * */ public class ROIBox extends JP2Box { private Property roiProp; /** * Constructor with superbox. * * @param parent parent superbox of this box */ public ROIBox (RandomAccessFile raf, BoxHolder parent) { super (raf, parent); } /** Reads the box, putting appropriate information in * the RepInfo object. setModule, setBoxHeader, * setRepInfo and setDataInputStream must be called * before readBox is called. * readBox must completely consume the * box, so that the next byte to be read by the * DataInputStream is the FF byte of the next Box. */ public boolean readBox() throws IOException { final String baddata = "Invalid data in ROI"; initBytesRead (); int nroi = ModuleBase.readUnsignedByte (_dstrm, _module); List propList = new ArrayList (nroi); JhoveBase je = _module.getBase (); boolean raw = je.getShowRawFlag (); for (int i = 0; i < nroi; i++) { List roiPropList = new ArrayList (7); int incs = ModuleBase.readUnsignedByte (_dstrm, _module); if (incs > 1) { _repInfo.setMessage (new ErrorMessage (baddata, _module.getFilePos ())); _repInfo.setValid (false); } roiPropList.add (_module.addIntegerProperty("InCodestream", incs, JP2Strings.inCodestreamStr)); int rtyp = ModuleBase.readUnsignedByte (_dstrm, _module); if (rtyp > 1) { _repInfo.setMessage (new ErrorMessage ("Invalid region type in ROI Box", _module.getFilePos ())); _repInfo.setValid (false); } roiPropList.add (_module.addIntegerProperty("RegionType", rtyp, JP2Strings.roiTypeStr)); int rcp = ModuleBase.readUnsignedByte (_dstrm, _module); roiPropList.add (new Property ("CodingPriority", PropertyType.INTEGER, new Integer (rcp))); long lcx = _module.readUnsignedInt (_dstrm); roiPropList.add (new Property ("HorizontalLocation", PropertyType.LONG, new Long (lcx))); long lcy = _module.readUnsignedInt (_dstrm); roiPropList.add (new Property ("HorizontalLocation", PropertyType.LONG, new Long (lcy))); long wdt = _module.readUnsignedInt (_dstrm); roiPropList.add (new Property ("Width", PropertyType.LONG, new Long (wdt))); long hth = _module.readUnsignedInt (_dstrm); roiPropList.add (new Property ("Height", PropertyType.LONG, new Long (hth))); propList.add (new Property ("ROI", PropertyType.PROPERTY, PropertyArity.LIST, roiPropList)); } roiProp = new Property ("ROIs", PropertyType.PROPERTY, PropertyArity.LIST, propList); // If the parent box is an Association box, the property // will be put into the Association property, so there's no // need to put it in two places. if (!(_parentBox instanceof AssociationBox)) { if (_parentBox instanceof CodestreamHeaderBox) { Codestream cs = ((CodestreamHeaderBox) _parentBox).getCodestream (); cs.setROIProperty (roiProp); } else { _module.addProperty (roiProp); } } finalizeBytesRead (); return true; } /** Returns the name of the Box. */ protected String getSelfPropName () { return "ROI Description Box"; } /** Returns a Property which describes the box. This is * used as a subproperty of the Property returned by * selfDescProperty. */ protected Property getSelfPropDesc (){ Property descProp; if (roiProp != null) { return new Property (DESCRIPTION_NAME, PropertyType.PROPERTY, roiProp); } else { return null; } } } jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/ReaderRequirementsBox.java0000644000707400001440000000675510771562664027306 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.jpeg2000; import edu.harvard.hul.ois.jhove.*; import java.io.*; /** * Reader requirements box (JPX). * See L.9.1 in ISO/IEC FCD15444-2:2000. * * @author Gary McGath * */ public class ReaderRequirementsBox extends JP2Box { /** * Constructor with superbox. * * @param parent parent superbox of this box */ public ReaderRequirementsBox(RandomAccessFile raf, BoxHolder parent) { super (raf, parent); } /** Reads the box, putting appropriate information in * the RepInfo object. setModule, setBoxHeader, * setRepInfo and setDataInputStream must be called * before readBox is called. * readBox must completely consume the * box, so that the next byte to be read by the * DataInputStream is the FF byte of the next Box. */ public boolean readBox() throws IOException { final String badRR = "Invalid data in Reader Requirements box"; if (_parentBox != null) { wrongBoxContext(); System.out.println ("READBOX parentBox != null"); System.out.flush (); return false; } initBytesRead (); int len = (int) _boxHeader.getDataLength (); int maskLength = ModuleBase.readUnsignedByte (_dstrm, _module); // maskLength specifies the size of FUAM and DCM, and may be // 1, 2, 4 or 8 long fuam; // fully understand aspects mask long dcm; // decode completely mask switch (maskLength) { case 1: fuam = ModuleBase.readUnsignedByte (_dstrm, _module); dcm = ModuleBase.readUnsignedByte (_dstrm, _module); break; case 2: fuam = _module.readUnsignedShort (_dstrm); dcm = _module.readUnsignedShort (_dstrm); break; case 4: fuam = _module.readUnsignedInt (_dstrm); dcm = _module.readUnsignedInt (_dstrm); break; case 8: fuam = _module.readSignedLong (_dstrm); dcm = _module.readSignedLong (_dstrm); break; default: _repInfo.setMessage (new ErrorMessage (badRR, _module.getFilePos ())); _repInfo.setWellFormed (false); System.out.println ("READBOX default"); System.out.flush (); return false; } // nsf (number of standard flags) int nsf = _module.readUnsignedShort (_dstrm); for (int i = 0; i < nsf; i++) { int sf = _module.readUnsignedShort (_dstrm); } // Table L-13, which gives legal values of the // SF field, has a completely blank "value" column! // Presumably SF stands for "science fiction." _module.skipBytes (_dstrm, (int) (len - (_module.getFilePos () - startBytesRead)), _module); finalizeBytesRead (); _module.setRReqSeen (true); System.out.println ("READBOX seen=true"); System.out.flush (); return true; } /** Returns the name of the Box. */ protected String getSelfPropName () { return "Reader Requirements Box"; } } jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/ResolutionBox.java0000644000707400001440000000465510771562675025642 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.jpeg2000; import java.io.*; //import edu.harvard.hul.ois.jhove.*; //import edu.harvard.hul.ois.jhove.module.Jpeg2000Module; /** * Resolution box. * See I.5.3.7 in ISO/IEC 15444-1:2000 * * @author Gary McGath * * @see CaptureResolutionBox * @see DDResolutionBox */ public class ResolutionBox extends JP2Box { /** * Constructor with superbox. * * @param parent parent superbox of this box */ public ResolutionBox (RandomAccessFile raf, BoxHolder parent) { super (raf, parent); //_parentBox = parent; } /* (non-Javadoc) * @see edu.harvard.hul.ois.jhove.module.jpeg2000.JP2Box#readBox() */ public boolean readBox() throws IOException { boolean seenresc = false; // flag for Capture Resolution box boolean seenresd = false; // flog for Default Display Res box initBytesRead (); hasBoxes = true; int sizeLeft = (int) _boxHeader.getDataLength() ; BoxHeader subhdr = new BoxHeader (_module, _dstrm); //NisoImageMetadata niso = _module.getDefaultNiso (); // Later have to implement support for compositing layers, // assigning an appropriate value to niso JP2Box box; while (hasNext ()) { box = (JP2Box) next(); if (box == null) { break; } if (box instanceof CaptureResolutionBox) { // Capture resolution box seenresc = true; if (!box.readBox ()) { return false; } } else if (box instanceof DDResolutionBox) { // Default Display Resolution box seenresd = true; if (!box.readBox ()) { return false; } } else { // Skip over other boxes. box.skipBox (); } } finalizeBytesRead (); return true; } /** Returns the name of the Box. */ protected String getSelfPropName () { return "Resolution Box"; } } jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/SIZMarkerSegment.java0000644000707400001440000001216310771562670026144 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College * **********************************************************************/ package edu.harvard.hul.ois.jhove.module.jpeg2000; import java.io.*; import java.util.*; import edu.harvard.hul.ois.jhove.*; /** * Class for the SIZ marker segment. This is a mandatory marker * in the main header, and provides information about the * uncompressed image such as the width and height of the * reference grid, the width and height of the tiles, the number * of components, component bit depth, and the separation of * component samples with respect to the reference grid. * * @author Gary McGath * */ public class SIZMarkerSegment extends MarkerSegment { /** * */ public SIZMarkerSegment() { super(); } /** Process the marker segment. The DataInputStream * will be at the point of having read the marker code. The * process method must consume exactly the number * of bytes remaining in the marker segment. * * @param bytesToEat The number of bytes that must be consumed. * If it is 0 for a MarkerSegment, the * number of bytes to consume is unknown. */ protected boolean process (int bytesToEat) throws IOException { int rsiz = _module.readUnsignedShort (_dstream); // rsiz = capabilities needed to decode int xsiz = (int) _module.readUnsignedInt (_dstream); // width of reference grid int ysiz = (int) _module.readUnsignedInt (_dstream); // height of reference grid int xosiz = (int) _module.readUnsignedInt (_dstream); // horizontal offset to left side of image area int yosiz = (int) _module.readUnsignedInt (_dstream); // vertical offset to top of image area int xtsiz = (int) _module.readUnsignedInt (_dstream); // width of one reference tile int ytsiz = (int) _module.readUnsignedInt (_dstream); // height of one reference tile int xtosiz = (int) _module.readUnsignedInt (_dstream); // horizontal offset to left side of first tile int ytosiz = (int) _module.readUnsignedInt (_dstream); // vertical offset to top of first tile int csiz = _module.readUnsignedShort (_dstream); // number of components _cs.setNumComponents (csiz); int ssiz[] = new int [csiz]; // precision and sign of samples for (int i = 0; i < csiz; i++) { ssiz[i] = ModuleBase.readUnsignedByte (_dstream, _module); } // number of bits per component int xrsiz[] = new int [csiz]; // precision and sign of samples for (int i = 0; i < csiz; i++) { xrsiz[i] = ModuleBase.readUnsignedByte (_dstream, _module); } // horizontal sample separation int yrsiz[] = new int [csiz]; for (int i = 0; i < csiz; i++) { yrsiz[i] = ModuleBase.readUnsignedByte (_dstream, _module); } // vertical sample separation // For now, just assemble the info into a SIZ property and // hand it to the Codestream. List plist = new ArrayList (13); plist.add (new Property ("Capabilities", PropertyType.INTEGER, new Integer (rsiz))); plist.add (new Property ("XSize", PropertyType.INTEGER, new Integer (xsiz))); plist.add (new Property ("YSize", PropertyType.INTEGER, new Integer (ysiz))); plist.add (new Property ("XOSize", PropertyType.INTEGER, new Integer (xosiz))); plist.add (new Property ("YOSize", PropertyType.INTEGER, new Integer (yosiz))); plist.add (new Property ("XTSize", PropertyType.INTEGER, new Integer (xtsiz))); plist.add (new Property ("YTSize", PropertyType.INTEGER, new Integer (ytsiz))); plist.add (new Property ("XTOSize", PropertyType.INTEGER, new Integer (xtosiz))); plist.add (new Property ("YTOSize", PropertyType.INTEGER, new Integer (ytosiz))); plist.add (new Property ("CSize", PropertyType.INTEGER, new Integer (csiz))); plist.add (new Property ("SSize", PropertyType.INTEGER, PropertyArity.ARRAY, ssiz)); plist.add (new Property ("XRSize", PropertyType.INTEGER, PropertyArity.ARRAY, xrsiz)); plist.add (new Property ("YRSize", PropertyType.INTEGER, PropertyArity.ARRAY, yrsiz)); _cs.setSIZProperty(new Property ("ImageAndTileSize", PropertyType.PROPERTY, PropertyArity.LIST, plist)); return true; } } jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/SOTMarkerSegment.java0000644000707400001440000000375311205003656026134 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College * **********************************************************************/ package edu.harvard.hul.ois.jhove.module.jpeg2000; import java.io.*; import edu.harvard.hul.ois.jhove.*; //import edu.harvard.hul.ois.jhove.module.Jpeg2000Module; /** * Class for the SOT (start of tile-part) marker segment. * * @author Gary McGath * */ public class SOTMarkerSegment extends MarkerSegment { /** * Constructor * */ public SOTMarkerSegment() { } /** Process the marker segment. The DataInputStream * will be at the point of having read the marker code. The * process method must consume exactly the number * of bytes remaining in the marker segment. * * @param bytesToEat The number of bytes that must be consumed. * If it is 0 for a MarkerSegment, the * number of bytes to consume is unknown. */ protected boolean process (int bytesToEat) throws IOException { int tileIndex = _module.readUnsignedShort (_dstream); long tileLeft = _module.readUnsignedInt (_dstream); _ccs.setTileLeft (tileLeft); int tilePartIndex = ModuleBase.readUnsignedByte (_dstream, _module); int numTileParts = ModuleBase.readUnsignedByte (_dstream, _module); Tile tile = _ccs.getTile (tileIndex); _ccs.setCurTile (tile); TilePart tp = new TilePart (tile, tilePartIndex); tile.addTilePart (tp); tp.setLength (tileLeft); // Shouldn't be anything left, but... if (bytesToEat > 8) { _module.skipBytes (_dstream, bytesToEat - 8, _module); } return true; } } jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/TLMMarkerSegment.java0000644000707400001440000000646110771562656026143 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College * **********************************************************************/ package edu.harvard.hul.ois.jhove.module.jpeg2000; import java.io.*; import java.util.*; import edu.harvard.hul.ois.jhove.*; /** * Class for the TLM (tile length) marker segment. * This may occur only in the main header. * * @author Gary McGath * */ public class TLMMarkerSegment extends MarkerSegment { /** * */ public TLMMarkerSegment() { super(); } /** * Processes the marker segment. The DataInputStream * will be at the point of having read the marker code. The * process method must consume exactly the number * of bytes remaining in the marker segment. * * @param bytesToEat The number of bytes that must be consumed. * If it is 0 for a MarkerSegment, the * number of bytes to consume is unknown. */ protected boolean process(int bytesToEat) throws IOException { int ztlm = ModuleBase.readUnsignedByte (_dstream, _module); int stlm = ModuleBase.readUnsignedByte (_dstream, _module); int st = (stlm & 0X30) >> 4; int sp = (stlm & 0X40) >> 6; int partLength = (sp == 1) ? 4 : 2; switch (st) { // case 0: add nothing case 1: partLength += 1; break; case 2: partLength += 2; break; case 3: _repInfo.setMessage (new ErrorMessage ("Invalid ST value in TLM marker segment")); return false; // invalid st value } int nParts = (bytesToEat - 2) / partLength; // Make sure it's an even multiple if (nParts * partLength != bytesToEat - 2) { return false; } if (_ccs.getCurTile () != null) { return false; // not permitted in a tile } for (int i = 0; i < nParts; i++) { List tpList = new ArrayList (2); // The TileIndex property is given only if st != 0 if (st != 0) { int ttlm; if (st == 1) { ttlm = ModuleBase.readUnsignedByte (_dstream, _module); } else { ttlm = _module.readUnsignedShort (_dstream); } tpList.add (new Property ("Index", PropertyType.INTEGER, new Integer (ttlm))); } int length; if (sp == 1) { length = (int) _module.readUnsignedInt (_dstream); } else { length = (int) _module.readUnsignedShort (_dstream); } tpList.add (new Property ("Length", PropertyType.INTEGER, new Integer (length))); _cs.addTileLength (new Property ("TilePartLength", PropertyType.PROPERTY, PropertyArity.LIST, tpList)); } return true; } } jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/Tile.java0000644000707400001440000000675410771562672023722 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.jpeg2000; import edu.harvard.hul.ois.jhove.*; import java.util.*; /** * Encapsulation of a JPEG 2000 tile in a codestream. * * @author Gary McGath * */ public class Tile extends MainOrTile { private List _tileParts; /* List of lengths (Long objects) found in PPT code segments */ private List _pptLengthList; /** * Constructor. */ public Tile () { _tileParts = new LinkedList (); } /** Adds a TilePart to the List of TileParts. */ public void addTilePart (TilePart tp) { _tileParts.add (tp); } /** returns the List of TileParts.*/ public List getTileParts () { return _tileParts; } /** Adds a PPM tilepart header length to the list of lengths */ public void addPPTLength (long len) { _pptLengthList.add (new Long (len)); } /** Returns a Property describing the tile. * The name of the Property is "Tile". */ public Property makeProperty () { List propList = new LinkedList (); if (!_tileParts.isEmpty ()) { ListIterator tpiter = _tileParts.listIterator (); while (tpiter.hasNext ()) { TilePart tp = (TilePart) tpiter.next (); propList.add (tp.makeProperty ()); } } if (_components != null) { // It's possible only some components have overriding // properties. Go through the array and set a stub // component for any that don't. for (int i = 0; i < _components.length; i++) { if (_components[i] == null) { _components[i] = new Property ("Component", PropertyType.PROPERTY, PropertyArity.LIST, new LinkedList ()); } } propList.add (new Property ("Components", PropertyType.PROPERTY, PropertyArity.ARRAY, _components)); } if (_codProperty != null) { propList.add (_codProperty); } if (_qcdProperty != null) { propList.add (_qcdProperty); } if (_pocProperty != null) { propList.add (_pocProperty); } if (_packetLengthList != null && !_packetLengthList.isEmpty ()) { propList.add (new Property ("PacketLengths", PropertyType.LONG, PropertyArity.LIST, _packetLengthList)); } if (_pptLengthList != null && _pptLengthList.isEmpty ()) { propList.add (new Property ("PackedPacketHeaderLengths", PropertyType.LONG, PropertyArity.LIST, _pptLengthList)); } if (!_comments.isEmpty ()) { propList.add (new Property ("Comments", PropertyType.PROPERTY, PropertyArity.LIST, _comments)); } return new Property ("Tile", PropertyType.PROPERTY, PropertyArity.LIST, propList); } } jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/TilePart.java0000644000707400001440000000320110771562671024530 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.jpeg2000; import edu.harvard.hul.ois.jhove.*; import java.util.*; /** * Encapsulation of a tile-part in a JPEG 2000 codestream. * * @author Gary McGath * */ public class TilePart { private Tile _tile; private int _index; private long _length; /** * Constructor. * * @param tile The Tile of which this is a part * @param index The index of this tile part */ public TilePart (Tile tile, int index) { _tile = tile; _index = index; } /** Sets the length field. This must be called before * calling makeProperty. */ public void setLength (long len) { _length = len; } /** Returns a Property based on the TilePart. * The Property is named "TilePart". */ public Property makeProperty () { Property indexProp = new Property ("Index", PropertyType.INTEGER, new Integer (_index)); Property lengthProp = new Property ("Length", PropertyType.LONG, new Long (_length)); List propList = new ArrayList (2); propList.add (indexProp); propList.add (lengthProp); return new Property ("TilePart", PropertyType.PROPERTY, PropertyArity.LIST, propList); } } jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/TopLevelBoxHolder.java0000644000707400001440000000232310771562657026355 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.jpeg2000; import edu.harvard.hul.ois.jhove.RepInfo; import edu.harvard.hul.ois.jhove.module.Jpeg2000Module; import java.io.*; /** * A subclass of BoxHolder specifically for getting top-level * boxes in a JPEG 2000 file. * * * @author Gary McGath * */ public class TopLevelBoxHolder extends BoxHolder { private boolean eof; /** * @param raf */ public TopLevelBoxHolder(Jpeg2000Module module, RandomAccessFile raf, RepInfo info, DataInputStream dstream) { super(raf); _module = module; _dstrm = dstream; _repInfo = info; eof = false; hasBoxes = true; bytesLeft = Long.MAX_VALUE; } /** Returns a name for use in messages. */ protected String getSelfPropName () { return "Top Level"; } public boolean hasNext () { return (!eof); } } jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/UUIDBox.java0000644000707400001440000000562010771562653024232 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.jpeg2000; import edu.harvard.hul.ois.jhove.*; import java.io.*; /** * UUID Box. * See I.7.2 in ISO/IEC 15444-1:2000 * * @author Gary McGath * * @see UUIDInfoBox * @see UUIDListBox */ public class UUIDBox extends JP2Box { /** * Constructor with superbox. * * @param parent parent superbox of this box */ public UUIDBox (RandomAccessFile raf, BoxHolder parent) { super (raf, parent); } /** Reads the box, putting appropriate information in * the RepInfo object. setModule, setBoxHeader, * setRepInfo and setDataInputStream must be called * before readBox is called. * readBox must completely consume the * box, so that the next byte to be read by the * DataInputStream is the FF byte of the next Box. */ public boolean readBox() throws IOException { // The UUID box consists of a 16-byte UUID field // and a variable-size data field. Both are binary // data, so we make them byte array properties. Property parray[] = new Property[2]; initBytesRead (); int len = (int) _boxHeader.getDataLength (); if (_boxHeader.getLength() != 0 && len < 16) { wrongBoxSize (); return false; } byte[] uuid = new byte[16]; ModuleBase.readByteBuf (_dstrm, uuid, _module); parray[0] = new Property ("UUID", PropertyType.BYTE, PropertyArity.ARRAY, uuid); // Whatever is left is the data field. // This gets difficult if the length field is // 0, implying that the rest of the file is used. int dataLen = len - 16; if (dataLen > 0) { byte[] dataBytes = new byte[dataLen]; ModuleBase.readByteBuf (_dstrm, dataBytes, _module); parray[1] = new Property ("Data", PropertyType.BYTE, PropertyArity.ARRAY, dataBytes); } else { // No data -- put in a FALSE property just as placeholder parray[1] = new Property ("Data", PropertyType.BOOLEAN, Boolean.FALSE); } _module.addUUID (new Property ("UUIDBox", PropertyType.PROPERTY, PropertyArity.ARRAY, parray)); finalizeBytesRead (); return true; } /** Returns the name of the Box. */ protected String getSelfPropName () { return "UUID Box"; } } jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/UUIDInfoBox.java0000644000707400001440000001011210771562655025040 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College * **********************************************************************/ package edu.harvard.hul.ois.jhove.module.jpeg2000; import edu.harvard.hul.ois.jhove.*; import java.io.*; import java.util.*; /** * UUID info box. * See I.7.3 in ISO/IEC 15444-1:2000 * * @author Gary McGath * */ public class UUIDInfoBox extends JP2Box { private Property _urlProp; private Property _uuidListProp; /** * Constructor with superbox. * * @param parent parent superbox of this box */ public UUIDInfoBox(RandomAccessFile raf, BoxHolder parent) { super(raf, parent); } /** Reads the box, putting appropriate information in * the RepInfo object. setModule, setBoxHeader, * setRepInfo and setDataInputStream must be called * before readBox is called. * readBox must completely consume the * box, so that the next byte to be read by the * DataInputStream is the FF byte of the next Box. */ public boolean readBox() throws IOException { if (_parentBox != null) { wrongBoxContext (); return false; } initBytesRead (); hasBoxes = true; int sizeLeft = (int) _boxHeader.getDataLength() ; BoxHeader subhdr = new BoxHeader (_module, _dstrm); JP2Box box = null; while (hasNext ()) { box = (JP2Box) next (); if (box == null) { break; } if (box instanceof UUIDListBox || box instanceof UUIDListBox || box instanceof DataEntryURLBox) { box.setBoxHeader(subhdr); box.setDataInputStream(_dstrm); box.setRandomAccessFile (_raf); box.setRepInfo(_repInfo); box.setModule(_module); if (!box.readBox ()) { return false; } } else { box.skipBox (); } } // A box has to be at least 8 bytes long, and there must // not be any bytes left over. if (sizeLeft != 0) { // Underran the superbox -- get out quick _repInfo.setMessage (new ErrorMessage ("Size of contained boxes underruns UUID Info Box", _module.getFilePos ())); _repInfo.setWellFormed (false); return false; } List propList = new ArrayList (2); if (_urlProp != null) { propList.add (_urlProp); } if (_uuidListProp != null) { propList.add (_uuidListProp); } _module.addUUIDInfo (new Property ("UUIDInfo", PropertyType.PROPERTY, PropertyArity.LIST, propList)); finalizeBytesRead (); return true; } /** Sets the URL string. This will be called from * DataEntryURLBox. */ protected void setURL(String url) { _urlProp = new Property ("URL", PropertyType.STRING, url); } /** Sets the UUID list. The argument is an array * of byte arrays of length 16, or schematically: * byte[][16]. */ protected void setUUIDList (byte[][] uuids) { List propList = new ArrayList (uuids.length); for (int i = 0; i < uuids.length; i++) { propList.add (new Property ("UUIDList", PropertyType.BYTE, PropertyArity.ARRAY, uuids[i])); } _uuidListProp = new Property ("UUIDInfo", PropertyType.PROPERTY, PropertyArity.LIST, propList); } /** Returns the name of the Box. */ protected String getSelfPropName () { return "UUID Info Box"; } } jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/UUIDListBox.java0000644000707400001440000000367410771562667025102 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College * **********************************************************************/ package edu.harvard.hul.ois.jhove.module.jpeg2000; import edu.harvard.hul.ois.jhove.*; import java.io.*; /** * UUID Box. * See I.7.3.1 in ISO/IEC 15444-1:2000 * * @author Gary McGath * */ public class UUIDListBox extends JP2Box { /** * Constructor with superbox. * * @param parent parent superbox of this box */ public UUIDListBox(RandomAccessFile raf, BoxHolder parent) { super(raf, parent); } /** Reads the box, putting appropriate information in * the RepInfo object. setModule, setBoxHeader, * setRepInfo and setDataInputStream must be called * before readBox is called. * readBox must completely consume the * box, so that the next byte to be read by the * DataInputStream is the FF byte of the next Box. */ public boolean readBox() throws IOException { if (!(_parentBox instanceof UUIDInfoBox)) { wrongBoxContext(); return false; } initBytesRead (); int nUUID = _module.readUnsignedShort (_dstrm); if ((16 * nUUID + 2) != _boxHeader.getDataLength()) { wrongBoxSize (); return false; } byte[][] uuids = new byte[nUUID][]; for (int i = 0; i < nUUID; i++) { ModuleBase.readByteBuf (_dstrm, uuids[i], _module); } if (_parentBox instanceof UUIDInfoBox) { ((UUIDInfoBox) _parentBox).setUUIDList (uuids); } finalizeBytesRead (); return true; } /** Returns the name of the Box. */ protected String getSelfPropName () { return "UUID List Box"; } } jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/XMLBox.java0000644000707400001440000000374010771562654024126 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.jpeg2000; import edu.harvard.hul.ois.jhove.*; import java.io.*; /** * XML Box. * See I.7.1 in ISO/IEC 15444-1:2000 * * @author Gary McGath * */ public class XMLBox extends JP2Box { private String xmlData; /** * Constructor with superbox. * * @param parent parent superbox of this box */ public XMLBox (RandomAccessFile raf, BoxHolder parent) { super (raf, parent); } /** Reads the box, putting appropriate information in * the RepInfo object. setModule, setBoxHeader, * setRepInfo and setDataInputStream must be called * before readBox is called. * readBox must completely consume the * box, so that the next byte to be read by the * DataInputStream is the FF byte of the next Box. */ public boolean readBox() throws IOException { initBytesRead (); int len = (int) _boxHeader.getDataLength (); byte[] bbuf = new byte[len]; ModuleBase.readByteBuf (_dstrm, bbuf, _module); xmlData = new String (bbuf); if (_parentBox == null) { _module.addXML (xmlData); } finalizeBytesRead (); return true; } /** Returns a Property which describes the Box, for use * by Association boxes and perhaps others. */ protected Property getSelfPropDesc () { return new Property (DESCRIPTION_NAME, PropertyType.STRING, xmlData); } /** Returns the name of the Box. */ protected String getSelfPropName () { return "XML Box"; } } jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/build.xml0000644000707400001440000000212311204567556023763 0ustar garyusers JPEG module build file Jhove - JSTOR/Harvard Object Validation Environment Version 1.0 2004-05-05 Copyright 2004 by JSTOR and the President and Fellows of Harvard College jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/package.html0000644000707400001440000000061510771562664024432 0ustar garyusers Contains supporting classes for the JPEG2000-HUL module.

jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/MainOrTile.class0000644000707400001440000000246511510702103025160 0ustar garyusers2B 0 1 2 34 0 56 7 89 :; <=>NULLI ConstantValue _precSize[I _components%[Ledu/harvard/hul/ois/jhove/Property; _codProperty$Ledu/harvard/hul/ois/jhove/Property; _qcdProperty _pocProperty _commentsLjava/util/List;_packetLengthList()VCodesetNumComponents(I)VsetCompProperty((ILedu/harvard/hul/ois/jhove/Property;)V StackMapTablegetNumComponents()IsetCODProperty'(Ledu/harvard/hul/ois/jhove/Property;)VsetQCDPropertysetPOCProperty addCommentaddPacketLength(J)V    java/util/LinkedList "edu/harvard/hul/ois/jhove/Property ? @A java/lang/Long /4edu/harvard/hul/ois/jhove/module/jpeg2000/MainOrTilejava/lang/Objectjava/util/Listadd(Ljava/lang/Object;)Z!  !+*****Y"#! *$%!-** *,S&'(!$**& )*!*++*!*+,*!*+ -*! *+ W./!:%* *Y * Y W&jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/BoxHolder.class0000644000707400001440000000741111510702105025041 0ustar garyusers2 5c 4d 4e 4f gh 4ij 4k l mno 4p 4q r s t uv wxy z{| } ~  4  %c (c ( 4 ( ' _module1Ledu/harvard/hul/ois/jhove/module/Jpeg2000Module; _parentBox2Ledu/harvard/hul/ois/jhove/module/jpeg2000/JP2Box;_rafLjava/io/RandomAccessFile;_dstrmLjava/io/DataInputStream; _boxHeader5Ledu/harvard/hul/ois/jhove/module/jpeg2000/BoxHeader;_repInfo#Ledu/harvard/hul/ois/jhove/RepInfo; bytesLeftJfilePoshasBoxesZbinaryFilterBox;Ledu/harvard/hul/ois/jhove/module/jpeg2000/BinaryFilterBox;(Ljava/io/RandomAccessFile;)VCode StackMapTablej getFilePos()JhasNext()Znext()Ljava/lang/Object;on|remove()V ExceptionssuperboxOverrunsuperboxUnderrungetSelfPropName()Ljava/lang/String; J] FG ;< HI R EDjava/io/IOException CD ST UV0edu/harvard/hul/ois/jhove/module/jpeg2000/JP2Box3edu/harvard/hul/ois/jhove/module/jpeg2000/BoxHeader 78 => J ] R bbfil 9edu/harvard/hul/ois/jhove/module/jpeg2000/BinaryFilterBox Jcref5edu/harvard/hul/ois/jhove/module/jpeg2000/CrossRefBox J T AB K 'java/lang/UnsupportedOperationException&edu/harvard/hul/ois/jhove/ErrorMessagejava/lang/StringBuilderSize of contained Box overruns ab b QR J "Size of contained Boxes underruns 3edu/harvard/hul/ois/jhove/module/jpeg2000/BoxHolderjava/lang/Objectjava/util/Iteratorjava/io/RandomAccessFilejava/lang/StringgetFilePointerM(Ledu/harvard/hul/ois/jhove/module/Jpeg2000Module;Ljava/io/DataInputStream;)V readHeader getLengthgetTypeequals(Ljava/lang/Object;)ZO(Ljava/io/RandomAccessFile;Ledu/harvard/hul/ois/jhove/module/jpeg2000/JP2Box;)VR(Ljava/io/RandomAccessFile;Ledu/harvard/hul/ois/jhove/module/jpeg2000/BoxHolder;)VreadBoxgetCrossRefStream()Ljava/io/DataInputStream;boxMaker{(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/module/jpeg2000/BoxHolder;)Ledu/harvard/hul/ois/jhove/module/jpeg2000/JP2Box; setModule4(Ledu/harvard/hul/ois/jhove/module/Jpeg2000Module;)V setRepInfo&(Ledu/harvard/hul/ois/jhove/RepInfo;)VsetRandomAccessFilesetDataInputStream(Ljava/io/DataInputStream;)V setBoxHeader8(Ledu/harvard/hul/ois/jhove/module/jpeg2000/BoxHeader;)Vappend-(Ljava/lang/String;)Ljava/lang/StringBuilder;toString/edu/harvard/hul/ois/jhove/module/Jpeg2000Module(Ljava/lang/String;J)V!edu/harvard/hul/ois/jhove/RepInfo setMessage&(Ledu/harvard/hul/ois/jhove/Message;)V setWellFormed(Z)V!456 789:;<=>?@ABCDEDFGHIJKLM ***+**+MMNOPQRL*STL/** M@UVL52** * * M** Y**L+*Y+e+N-<*Y** * * * ++N-ZY** * :Y*:* * M,-*M,*,* !,*",*#,+$,L 9/:///./M  ENWXYjjONWXYjjOZNWXONWXOZ[)NWX[WXNWX[WXZ,NP\]L%Y&^%_]L@4* 'Y(Y)*+*,+-*./0* 1`]L@4* 'Y(Y)2+*,+-*./0* 1abL3jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/MarkerSegment.class0000644000707400001440000000766211510702105025727 0ustar garyusers2 -~ , , , , , ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ !~ #~ %~ '~ SOCI ConstantValueOCODRCOCSTLMUPLMWPLTXQCD\QCC]RGN^POC_PPM`PPTaCRGcCOMdSOTSOPEPHSODEOCSIZQ_ccs:Ledu/harvard/hul/ois/jhove/module/jpeg2000/ContCodestream;_cs6Ledu/harvard/hul/ois/jhove/module/jpeg2000/Codestream;_module1Ledu/harvard/hul/ois/jhove/module/Jpeg2000Module;_dstreamLjava/io/DataInputStream;_repInfo#Ledu/harvard/hul/ois/jhove/RepInfo;()VCodesetContCodestream=(Ledu/harvard/hul/ois/jhove/module/jpeg2000/ContCodestream;)V setCodestream9(Ledu/harvard/hul/ois/jhove/module/jpeg2000/Codestream;)V setModule4(Ledu/harvard/hul/ois/jhove/module/Jpeg2000Module;)VsetDataInputStream(Ljava/io/DataInputStream;)V setRepInfo&(Ledu/harvard/hul/ois/jhove/RepInfo;)VisMarker()ZmarkerSegmentMaker<(I)Ledu/harvard/hul/ois/jhove/module/jpeg2000/MarkerSegment; StackMapTable readMarkLen()I Exceptions nCompBytes getMainOrTile8()Ledu/harvard/hul/ois/jhove/module/jpeg2000/MainOrTile;process(I)Z bc XY Z[ \] ^_ `a:edu/harvard/hul/ois/jhove/module/jpeg2000/SOTMarkerSegment:edu/harvard/hul/ois/jhove/module/jpeg2000/COCMarkerSegment:edu/harvard/hul/ois/jhove/module/jpeg2000/CODMarkerSegment>edu/harvard/hul/ois/jhove/module/jpeg2000/CommentMarkerSegment:edu/harvard/hul/ois/jhove/module/jpeg2000/CRGMarkerSegment:edu/harvard/hul/ois/jhove/module/jpeg2000/PLMMarkerSegment:edu/harvard/hul/ois/jhove/module/jpeg2000/PLTMarkerSegment:edu/harvard/hul/ois/jhove/module/jpeg2000/POCMarkerSegment:edu/harvard/hul/ois/jhove/module/jpeg2000/PPMMarkerSegment:edu/harvard/hul/ois/jhove/module/jpeg2000/PPTMarkerSegment:edu/harvard/hul/ois/jhove/module/jpeg2000/QCCMarkerSegment:edu/harvard/hul/ois/jhove/module/jpeg2000/QCDMarkerSegment:edu/harvard/hul/ois/jhove/module/jpeg2000/RGNMarkerSegment:edu/harvard/hul/ois/jhove/module/jpeg2000/SIZMarkerSegment:edu/harvard/hul/ois/jhove/module/jpeg2000/TLMMarkerSegment0edu/harvard/hul/ois/jhove/module/jpeg2000/Marker>edu/harvard/hul/ois/jhove/module/jpeg2000/DefaultMarkerSegment  u 7edu/harvard/hul/ois/jhove/module/jpeg2000/MarkerSegmentjava/lang/Objectjava/io/IOException.edu/harvard/hul/ois/jhove/module/jpeg2000/Tile/edu/harvard/hul/ois/jhove/module/Jpeg2000ModulereadUnsignedShort(Ljava/io/DataInputStream;)I4edu/harvard/hul/ois/jhove/module/jpeg2000/CodestreamgetNumComponents8edu/harvard/hul/ois/jhove/module/jpeg2000/ContCodestream getCurTile2()Ledu/harvard/hul/ois/jhove/module/jpeg2000/Tile;!,-./012/034/056/078/09:/0;</0=>/0?@/0AB/0CD/0EF/0GH/0IJ/0KL/0MN/0OP/0QR/0ST/0UV/0WXYZ[\]^_`a bcd*efd*+ghd*+ijd*+kld*+mnd*+opd qrd[4+O#QRSUWX\]^ _`acd+###Y Y Y YYYYYYYYYY !Y"#Y$%Y&'Y(stud **)vwxud6**<s  @yzd-*+L++*s{|}vwjhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/ContCodestream.class0000644000707400001440000001023311510702105026061 0ustar garyusers2 * ) ) )  ) ) ) ) )      $ ) _codestream6Ledu/harvard/hul/ois/jhove/module/jpeg2000/Codestream;_lengthJ_module1Ledu/harvard/hul/ois/jhove/module/Jpeg2000Module;_dstreamLjava/io/DataInputStream; _tilePartsLjava/util/List;_tiles _tileLeft_curTile0Ledu/harvard/hul/ois/jhove/module/jpeg2000/Tile;ppmSeenZSOCI ConstantValueOCODRCOCSTLMUPLMWPLTXQCD\QCC]RGN^POC_PPM`PPTaCRGcCOMdSOTSOPEPHSODEOCSIZQN(Ledu/harvard/hul/ois/jhove/module/Jpeg2000Module;Ljava/io/DataInputStream;J)VCodereadCodestream\(Ledu/harvard/hul/ois/jhove/module/jpeg2000/Codestream;Ledu/harvard/hul/ois/jhove/RepInfo;)Z StackMapTable ExceptionsgetTiles()Ljava/util/List; setTileLeft(J)VgetTile3(I)Ledu/harvard/hul/ois/jhove/module/jpeg2000/Tile; setCurTile3(Ledu/harvard/hul/ois/jhove/module/jpeg2000/Tile;)V setPPMSeen(Z)V getCurTile2()Ledu/harvard/hul/ois/jhove/module/jpeg2000/Tile; isPPMSeen()Z isSegment(I)Z e /0 12 -.java/util/LinkedList 54 34 9: +, 6. &edu/harvard/hul/ois/jhove/ErrorMessageIll-formed codestream e | Invalid marker segment0edu/harvard/hul/ois/jhove/module/jpeg2000/Marker java/io/EOFException  .edu/harvard/hul/ois/jhove/module/jpeg2000/Tile 788edu/harvard/hul/ois/jhove/module/jpeg2000/ContCodestreamjava/lang/Object4edu/harvard/hul/ois/jhove/module/jpeg2000/Codestream!edu/harvard/hul/ois/jhove/RepInfo7edu/harvard/hul/ois/jhove/module/jpeg2000/MarkerSegmentjava/io/IOException()V$edu/harvard/hul/ois/jhove/ModuleBasereadUnsignedByteB(Ljava/io/DataInputStream;Ledu/harvard/hul/ois/jhove/ModuleBase;)I(Ljava/lang/String;)V setMessage&(Ledu/harvard/hul/ois/jhove/Message;)V setWellFormedmarkerSegmentMaker<(I)Ledu/harvard/hul/ois/jhove/module/jpeg2000/MarkerSegment; setCodestream9(Ledu/harvard/hul/ois/jhove/module/jpeg2000/Codestream;)VsetContCodestream=(Ledu/harvard/hul/ois/jhove/module/jpeg2000/ContCodestream;)VsetDataInputStream(Ljava/io/DataInputStream;)V setRepInfo&(Ledu/harvard/hul/ois/jhove/RepInfo;)V setModule4(Ledu/harvard/hul/ois/jhove/module/Jpeg2000Module;)V readMarkLen()Iprocess/edu/harvard/hul/ois/jhove/module/Jpeg2000Module skipBytesC(Ljava/io/DataInputStream;ILedu/harvard/hul/ois/jhove/ModuleBase;)IsetTiles(Ljava/util/List;)Vjava/util/Listsizeadd(Ljava/lang/Object;)Zget(I)Ljava/lang/Object;!)*+,-./01234546.789:;<=>?<=@A<=BC<=DE<=FG<=HI<=JK<=LM<=NO<=PQ<=RS<=TU<=VW<=XY<=Z[<=\]<=^_<=`a<=bc<=d efg;/**+*,*!*Y*Y* hig q*+ *7* 6  7 #**6,Y,**6O6:  + * * , * 6    d,Y, ' `e7* j*Y  `e Ye7* *Y e )*** * W* e7* ٠ܧ:,Y,* *"NI!OI!FI!jg/< klmno klmno+- klmBpqrstg*uvg* wxgE/*#*$Y%&W*'$j yzg*+({|g* }~g*(g* gB+0 ?O ٠j jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/Tile.class0000644000707400001440000000413111510702105024044 0ustar garyusers2u "45 4 !6 78 !9: ; 7< 7= >? >@A B !CDE FG HI JK HL !M !N !O !PQ FRS !TUVWX _tilePartsLjava/util/List;_pptLengthList()VCode addTilePart7(Ledu/harvard/hul/ois/jhove/module/jpeg2000/TilePart;)V getTileParts()Ljava/util/List; addPPTLength(J)V makeProperty&()Ledu/harvard/hul/ois/jhove/Property; StackMapTableYZ &'java/util/LinkedList #$Y [\ %$java/lang/Long &. ]^ _`Z a^ bc2edu/harvard/hul/ois/jhove/module/jpeg2000/TilePart /0 de"edu/harvard/hul/ois/jhove/Property Componentf ghi jk &l Components mk no po qo r$ PacketLengths shPackedPacketHeaderLengths t$CommentsTile.edu/harvard/hul/ois/jhove/module/jpeg2000/Tile4edu/harvard/hul/ois/jhove/module/jpeg2000/MainOrTilejava/util/Listjava/util/ListIteratoradd(Ljava/lang/Object;)ZisEmpty()Z listIterator()Ljava/util/ListIterator;hasNextnext()Ljava/lang/Object; _components%[Ledu/harvard/hul/ois/jhove/Property;&edu/harvard/hul/ois/jhove/PropertyTypePROPERTY(Ledu/harvard/hul/ois/jhove/PropertyType;'edu/harvard/hul/ois/jhove/PropertyArityLIST)Ledu/harvard/hul/ois/jhove/PropertyArity;x(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ledu/harvard/hul/ois/jhove/PropertyArity;Ljava/lang/Object;)VARRAY _codProperty$Ledu/harvard/hul/ois/jhove/Property; _qcdProperty _pocProperty_packetLengthListLONG _comments!!"#$%$&'(**Y)*( *+W+,(*-.(*YW/0( ]YL* .* M, ,  N+-W*S=*.*2*YYS+Y*W*+*W*+*W*+*W*)* +Y*W*)* +Y*W* +Y*WY +1 23 -,,%jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/TilePart.class0000644000707400001440000000243211510702105024675 0ustar garyusers2M % & ' ()* +,- . /0 +12 34 . 567 +8 9: ;<=_tile0Ledu/harvard/hul/ois/jhove/module/jpeg2000/Tile;_indexI_lengthJ4(Ledu/harvard/hul/ois/jhove/module/jpeg2000/Tile;I)VCode setLength(J)V makeProperty&()Ledu/harvard/hul/ois/jhove/Property; >   "edu/harvard/hul/ois/jhove/PropertyIndex? @Ajava/lang/Integer B CLength DAjava/lang/Long "java/util/ArrayListE FGTilePart HAI JK L2edu/harvard/hul/ois/jhove/module/jpeg2000/TilePartjava/lang/Object()V&edu/harvard/hul/ois/jhove/PropertyTypeINTEGER(Ledu/harvard/hul/ois/jhove/PropertyType;(I)VO(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ljava/lang/Object;)VLONGjava/util/Listadd(Ljava/lang/Object;)ZPROPERTY'edu/harvard/hul/ois/jhove/PropertyArityLIST)Ledu/harvard/hul/ois/jhove/PropertyArity;x(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ledu/harvard/hul/ois/jhove/PropertyArity;Ljava/lang/Object;)V! **+*!" *#$ fZYY* LY Y* MYN-+W-,WY-jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/CODMarkerSegment.class0000644000707400001440000000447011510702105026247 0ustar garyusers2q - . / 01 23 45 678 9:; 6 < =>?@ABCDEFG HI JK 9L HM NOPQ()VCodeprocess(I)Z StackMapTablePRST ExceptionsU !" VW XYZ [\] ^_ `ajava/util/ArrayList !b"edu/harvard/hul/ois/jhove/Property CodingStylec dejava/lang/Integer !fT ghProgressionOrderNumberOfLayersMultipleComponentTransformationNumberDecompositionLevelsCodeBlockWidthCodeBlockHeightCodeBlockStyleTransformation PrecinctSizei jk !lCodingStyleDefault me nkS op:edu/harvard/hul/ois/jhove/module/jpeg2000/CODMarkerSegment7edu/harvard/hul/ois/jhove/module/jpeg2000/MarkerSegment[I4edu/harvard/hul/ois/jhove/module/jpeg2000/MainOrTilejava/util/Listjava/io/IOException_dstreamLjava/io/DataInputStream;_module1Ledu/harvard/hul/ois/jhove/module/Jpeg2000Module;$edu/harvard/hul/ois/jhove/ModuleBasereadUnsignedByteB(Ljava/io/DataInputStream;Ledu/harvard/hul/ois/jhove/ModuleBase;)I/edu/harvard/hul/ois/jhove/module/Jpeg2000ModulereadUnsignedShort(Ljava/io/DataInputStream;)I getMainOrTile8()Ledu/harvard/hul/ois/jhove/module/jpeg2000/MainOrTile;(I)V&edu/harvard/hul/ois/jhove/PropertyTypeINTEGER(Ledu/harvard/hul/ois/jhove/PropertyType;O(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ljava/lang/Object;)Vadd(Ljava/lang/Object;)Z'edu/harvard/hul/ois/jhove/PropertyArityARRAY)Ledu/harvard/hul/ois/jhove/PropertyArity;x(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ledu/harvard/hul/ois/jhove/PropertyArity;Ljava/lang/Object;)VPROPERTYLISTsetCODProperty'(Ledu/harvard/hul/ois/jhove/Property;)V! !"#*$%#(**=**>**6**6**6**6**6**6 **6 : ~-` : 6  `  **O *: Y :  Y Y W Y Y W Y Y W Y Y W Y Y W Y Y W Y Y W Y Y W Y Y W  Y  W Y && '(1)*+,jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/CRGMarkerSegment.class0000644000707400001440000000400011510702105026242 0ustar garyusers2e # $ %& '() * +, - ./0 1 2 3456 78 9: ;<= 7> .?@A()VCodeprocess(I)Z StackMapTableB ExceptionsC  DEF GH IJ&edu/harvard/hul/ois/jhove/ErrorMessage4CRG header allowed only in main header of codestream KL MN OPQ RS'CRG marker segment has incorrect length TU VWX YZ"edu/harvard/hul/ois/jhove/PropertyHorizontalOffsets[ \]^ _` aVerticalOffsetsComponentRegistration b] cd:edu/harvard/hul/ois/jhove/module/jpeg2000/CRGMarkerSegment7edu/harvard/hul/ois/jhove/module/jpeg2000/MarkerSegment[Ijava/io/IOException_ccs:Ledu/harvard/hul/ois/jhove/module/jpeg2000/ContCodestream;8edu/harvard/hul/ois/jhove/module/jpeg2000/ContCodestream getCurTile2()Ledu/harvard/hul/ois/jhove/module/jpeg2000/Tile;_repInfo#Ledu/harvard/hul/ois/jhove/RepInfo;(Ljava/lang/String;)V!edu/harvard/hul/ois/jhove/RepInfo setMessage&(Ledu/harvard/hul/ois/jhove/Message;)V_cs6Ledu/harvard/hul/ois/jhove/module/jpeg2000/Codestream;4edu/harvard/hul/ois/jhove/module/jpeg2000/CodestreamgetNumComponents()I_module1Ledu/harvard/hul/ois/jhove/module/Jpeg2000Module;_dstreamLjava/io/DataInputStream;/edu/harvard/hul/ois/jhove/module/Jpeg2000ModulereadUnsignedShort(Ljava/io/DataInputStream;)I&edu/harvard/hul/ois/jhove/PropertyTypeINTEGER(Ledu/harvard/hul/ois/jhove/PropertyType;'edu/harvard/hul/ois/jhove/PropertyArityARRAY)Ledu/harvard/hul/ois/jhove/PropertyArity;x(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ledu/harvard/hul/ois/jhove/PropertyArity;Ljava/lang/Object;)VPROPERTYsetCRGProperty'(Ledu/harvard/hul/ois/jhove/Property;)V!***Y* =h*Y  N :6(-* * O* * O:Y-SYS* Y   *!"jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/CommentMarkerSegment.class0000644000707400001440000000360711510702105027245 0ustar garyusers2b $ % & ' () *+,- ./ 01 2 .34 5 6 789 : ;< =>?@()VCodeprocess(I)Z StackMapTable?AB, ExceptionsC  DE FG HIJ KLM NO"edu/harvard/hul/ois/jhove/PropertyCommentP QRS TU V WRjava/lang/String X Y Z[&edu/harvard/hul/ois/jhove/ErrorMessageUnrecognized comment type \] ^_A `a>edu/harvard/hul/ois/jhove/module/jpeg2000/CommentMarkerSegment7edu/harvard/hul/ois/jhove/module/jpeg2000/MarkerSegment4edu/harvard/hul/ois/jhove/module/jpeg2000/MainOrTile[Bjava/io/IOException getMainOrTile8()Ledu/harvard/hul/ois/jhove/module/jpeg2000/MainOrTile;_module1Ledu/harvard/hul/ois/jhove/module/Jpeg2000Module;_dstreamLjava/io/DataInputStream;/edu/harvard/hul/ois/jhove/module/Jpeg2000ModulereadUnsignedShort(Ljava/io/DataInputStream;)I$edu/harvard/hul/ois/jhove/ModuleBase readByteBufD(Ljava/io/DataInputStream;[BLedu/harvard/hul/ois/jhove/ModuleBase;)I&edu/harvard/hul/ois/jhove/PropertyTypeBYTE(Ledu/harvard/hul/ois/jhove/PropertyType;'edu/harvard/hul/ois/jhove/PropertyArityARRAY)Ledu/harvard/hul/ois/jhove/PropertyArity;x(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ledu/harvard/hul/ois/jhove/PropertyArity;Ljava/lang/Object;)VSTRING([B)VO(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ljava/lang/Object;)V_repInfo#Ledu/harvard/hul/ois/jhove/RepInfo;(Ljava/lang/String;)V!edu/harvard/hul/ois/jhove/RepInfo setMessage&(Ledu/harvard/hul/ois/jhove/Message;)V addComment'(Ledu/harvard/hul/ois/jhove/Property;)V!**M**>d:**WI/Y  :/Y Y:*Y,,@ ! "#jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/DefaultMarkerSegment.class0000644000707400001440000000112011510702105027213 0ustar garyusers2    ()VCodeprocess(I)Z Exceptions    >edu/harvard/hul/ois/jhove/module/jpeg2000/DefaultMarkerSegment7edu/harvard/hul/ois/jhove/module/jpeg2000/MarkerSegmentjava/io/IOException_module1Ledu/harvard/hul/ois/jhove/module/Jpeg2000Module;_dstreamLjava/io/DataInputStream;/edu/harvard/hul/ois/jhove/module/Jpeg2000Module skipBytesC(Ljava/io/DataInputStream;ILedu/harvard/hul/ois/jhove/ModuleBase;)I! *  ***W  jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/FragmentInputStream.class0000644000707400001440000000242511510702105027112 0ustar garyusers2Q . / 0 1 23 4 5 6 7 8 9 : ;< ;= >? >@AB _fragmentsLjava/util/List;_rafLjava/io/RandomAccessFile; fragIteratorLjava/util/ListIterator; curFragment[J fragBuffer[B bufOffsetI fragOffset_bufSizebufBytes-(Ljava/util/List;Ljava/io/RandomAccessFile;)VCode.(Ljava/util/List;Ljava/io/RandomAccessFile;I)Vinit(I)V StackMapTableread()I ExceptionsC #D   '(E FG  !   "  H IJ KLM NO *P=edu/harvard/hul/ois/jhove/module/jpeg2000/FragmentInputStreamjava/io/InputStreamjava/io/IOException()Vjava/util/List listIterator()Ljava/util/ListIterator;java/util/ListIteratorhasNext()Znext()Ljava/lang/Object;java/io/RandomAccessFileseek(J)V([B)I!  !"#$% **+*,*#&% **+*,*'(%A,** <*** * )*+%* * v* * * /,* ** * ** /* a*** *Y * ` * **Y Z` 3)!&3,-jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/JP2Strings.class0000644000707400001440000000441111510702105025115 0ustar garyusers2 FZ[\]^_` Eabcdefghijklmnopqrs Etuv Ewxyz E{|}~ E E E E E E E E E methodStr[Ljava/lang/String; enumCSStrmtypStropacityTypeStrnumberListTypeStrdigitalSigTypeStrdigitalSigPtrTypeStrinCodestreamStr roiTypeStrctypStrctypIdx[I approxStr approxIdx()VCode VWjava/lang/StringEnumerated ColorspaceRestricted ICC ProfileAny ICC MethodVendor Color Method GHBilevel (1 = black) YCbCr (1) YCbCr (2) YCbCr (3)PhotoYCCCMYCMYKYCCKCIELabsRGB GreyscaleBilevel (1 = white)CIEJabe-sRGBROMM-RGBsRGB based YCbCrYPbPr (1125/60)YPbPr (1250/50) IH Direct UsePalette Mapping JHLast channel is opacity channel-Last channel is premultiplied opacity channelChroma key transparency KHRendered resultCodestream numberCompositing layerNumbered entity LH MD5 checksumSHA-1 checksum DSA signatureRSA signature on MD5 digestRSA signature on SHA-1 digestCryptographic Message Syntax MH Whole file Byte range NH5Codestream does not contain static region of interest-Codestream contains static region of interest OH Rectangular Elliptical PHColor image dataOpacityPremultiplied opacity Not specified QH RSAccurate representation&Approximation with exceptional quality%Approximation with reasonable qualityApproximation with poor quality TH US4edu/harvard/hul/ois/jhove/module/jpeg2000/JP2Stringsjava/lang/Object1EF GHIHJHKHLHMHNHOHPHQHRSTHUSVWX*YWXYSYSYSYSYSY SY SYSY SY SYSYSYSYSY  SY SY SY SY SYSYSYSYSYSYSYSYSYSYSYSYSYSYSY SY!S"Y#SY$SY%SY&S'Y(SY)SY*SY+SY,SY-S.Y/SY0S1Y2SY3S4Y5SY6S7Y8SY9SY:SY;S< YOYOYOY=O>Y?SY@SYASYBSC YOYOYOYODjhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/Marker.class0000644000707400001440000000052711510702105024375 0ustar garyusers2  ()VCode readMarkLen()I Exceptionsprocess(I)Z 0edu/harvard/hul/ois/jhove/module/jpeg2000/Marker7edu/harvard/hul/ois/jhove/module/jpeg2000/MarkerSegmentjava/io/IOException!*   jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/PLMMarkerSegment.class0000644000707400001440000000233311510702105026266 0ustar garyusers2=       ! " #$ % &'()nplmLeftI()VCodeprocess(I)Z StackMapTable Exceptions*  +, -./ 01  23&edu/harvard/hul/ois/jhove/ErrorMessage>Packet length in PLM marker segment crosses segment boundaries 45 67 89: ;<:edu/harvard/hul/ois/jhove/module/jpeg2000/PLMMarkerSegment7edu/harvard/hul/ois/jhove/module/jpeg2000/MarkerSegmentjava/io/IOException_dstreamLjava/io/DataInputStream;_module1Ledu/harvard/hul/ois/jhove/module/Jpeg2000Module;$edu/harvard/hul/ois/jhove/ModuleBasereadUnsignedByteB(Ljava/io/DataInputStream;Ledu/harvard/hul/ois/jhove/ModuleBase;)I_repInfo#Ledu/harvard/hul/ois/jhove/RepInfo;(Ljava/lang/String;)V!edu/harvard/hul/ois/jhove/RepInfo setMessage&(Ledu/harvard/hul/ois/jhove/Message;)V_cs6Ledu/harvard/hul/ois/jhove/module/jpeg2000/Codestream;4edu/harvard/hul/ois/jhove/module/jpeg2000/CodestreamaddPacketLength(J)V! ***=**Q B**6*Y !yB~* ! % jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/PLTMarkerSegment.class0000644000707400001440000000260411510702105026276 0ustar garyusers2B      !" # $ %&' ()*+()VCodeprocess(I)Z StackMapTable, Exceptions-  ./0 12 34&edu/harvard/hul/ois/jhove/ErrorMessage3PLT marker segment not allowed in codestream header 56 78 9: ;<= >?>Packet length in PLT marker segment crosses segment boundaries, @A:edu/harvard/hul/ois/jhove/module/jpeg2000/PLTMarkerSegment7edu/harvard/hul/ois/jhove/module/jpeg2000/MarkerSegment.edu/harvard/hul/ois/jhove/module/jpeg2000/Tilejava/io/IOException_ccs:Ledu/harvard/hul/ois/jhove/module/jpeg2000/ContCodestream;8edu/harvard/hul/ois/jhove/module/jpeg2000/ContCodestream getCurTile2()Ledu/harvard/hul/ois/jhove/module/jpeg2000/Tile;_repInfo#Ledu/harvard/hul/ois/jhove/RepInfo;(Ljava/lang/String;)V!edu/harvard/hul/ois/jhove/RepInfo setMessage&(Ledu/harvard/hul/ois/jhove/Message;)V_dstreamLjava/io/DataInputStream;_module1Ledu/harvard/hul/ois/jhove/module/Jpeg2000Module;$edu/harvard/hul/ois/jhove/ModuleBasereadUnsignedByteB(Ljava/io/DataInputStream;Ledu/harvard/hul/ois/jhove/ModuleBase;)IaddPacketLength(J)V!**M,*Y* * >R 7* * 6*Y y7~ , %jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/JP2Box.class0000644000707400001440000001765711510702106024235 0ustar garyusers2                   " % ( + . 1 4 7 : =  @  C F I L O R U X [ ^ ! a"# d$% g&' j() m*+ p,- s./ v01 y2 { 34 5 6 7 38 9 :;<= > ? @ A B CD CEFGH I :JKL MN OP QR ST MU V WXYstartBytesReadJ _bytesRead associationsLjava/util/List;noJP2HdrLjava/lang/String; ConstantValueZDESCRIPTION_NAME[(Ljava/io/RandomAccessFile;)VCodeR(Ljava/io/RandomAccessFile;Ledu/harvard/hul/ois/jhove/module/jpeg2000/BoxHolder;)Vinit8(Ledu/harvard/hul/ois/jhove/module/jpeg2000/BoxHolder;)V StackMapTable setModule4(Ledu/harvard/hul/ois/jhove/module/Jpeg2000Module;)V setBoxHeader8(Ledu/harvard/hul/ois/jhove/module/jpeg2000/BoxHeader;)V setRepInfo&(Ledu/harvard/hul/ois/jhove/RepInfo;)VsetDataInputStream(Ljava/io/DataInputStream;)VsetRandomAccessFileboxMaker{(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/module/jpeg2000/BoxHolder;)Ledu/harvard/hul/ois/jhove/module/jpeg2000/JP2Box;\ initBytesRead()VfinalizeBytesReadreadBox()Z Exceptions] getBytesRead()IskipBoxaddAssociation'(Ledu/harvard/hul/ois/jhove/Property;)V wrongBoxSizewrongBoxContextemptyBoxmakeAssocProperty&()Ledu/harvard/hul/ois/jhove/Property;selfDescProperty^_KgetSelfPropName()Ljava/lang/String;getSelfPropDesc getLength()J 0edu/harvard/hul/ois/jhove/module/jpeg2000/JP2Box `a java/util/LinkedList bc def g h ij kl mnjp2h_ op6edu/harvard/hul/ois/jhove/module/jpeg2000/JP2HeaderBox asoc8edu/harvard/hul/ois/jhove/module/jpeg2000/AssociationBoxbpcc1edu/harvard/hul/ois/jhove/module/jpeg2000/BPCCBoxchck9edu/harvard/hul/ois/jhove/module/jpeg2000/DigSignatureBoxcdef7edu/harvard/hul/ois/jhove/module/jpeg2000/ChannelDefBoxcgrp7edu/harvard/hul/ois/jhove/module/jpeg2000/ColorGroupBoxcmap9edu/harvard/hul/ois/jhove/module/jpeg2000/ComponentMapBoxcolr6edu/harvard/hul/ois/jhove/module/jpeg2000/ColorSpecBoxcomp8edu/harvard/hul/ois/jhove/module/jpeg2000/CompositionBoxcopt8edu/harvard/hul/ois/jhove/module/jpeg2000/CompOptionsBoxcreg:edu/harvard/hul/ois/jhove/module/jpeg2000/CodestreamRegBoxdrep9edu/harvard/hul/ois/jhove/module/jpeg2000/DesiredReproBoxflst9edu/harvard/hul/ois/jhove/module/jpeg2000/FragmentListBoxftbl:edu/harvard/hul/ois/jhove/module/jpeg2000/FragmentTableBoxgtso1edu/harvard/hul/ois/jhove/module/jpeg2000/GTSOBoxinst;edu/harvard/hul/ois/jhove/module/jpeg2000/InstructionSetBoxihdr8edu/harvard/hul/ois/jhove/module/jpeg2000/ImageHeaderBoxjp2c;edu/harvard/hul/ois/jhove/module/jpeg2000/ContCodestreamBoxjpch=edu/harvard/hul/ois/jhove/module/jpeg2000/CodestreamHeaderBoxjplh;edu/harvard/hul/ois/jhove/module/jpeg2000/ComposLayerHdrBoxjp2i0edu/harvard/hul/ois/jhove/module/jpeg2000/IPRBoxlbl 2edu/harvard/hul/ois/jhove/module/jpeg2000/LabelBoxnlst7edu/harvard/hul/ois/jhove/module/jpeg2000/NumberListBoxopct4edu/harvard/hul/ois/jhove/module/jpeg2000/OpacityBoxpclr4edu/harvard/hul/ois/jhove/module/jpeg2000/PaletteBoxres 7edu/harvard/hul/ois/jhove/module/jpeg2000/ResolutionBoxroid0edu/harvard/hul/ois/jhove/module/jpeg2000/ROIBoxresc>edu/harvard/hul/ois/jhove/module/jpeg2000/CaptureResolutionBoxresd9edu/harvard/hul/ois/jhove/module/jpeg2000/DDResolutionBoxrreq?edu/harvard/hul/ois/jhove/module/jpeg2000/ReaderRequirementsBoxuinf5edu/harvard/hul/ois/jhove/module/jpeg2000/UUIDInfoBoxulst5edu/harvard/hul/ois/jhove/module/jpeg2000/UUIDListBoxurl 9edu/harvard/hul/ois/jhove/module/jpeg2000/DataEntryURLBoxuuid1edu/harvard/hul/ois/jhove/module/jpeg2000/UUIDBoxxml 0edu/harvard/hul/ois/jhove/module/jpeg2000/XMLBox4edu/harvard/hul/ois/jhove/module/jpeg2000/DefaultBoxq r st ^ up&edu/harvard/hul/ois/jhove/ErrorMessagejava/lang/StringBuilderIncorrect Box size for vw x yz {| }~Invalid context for  Box is empty Box type =  "edu/harvard/hul/ois/jhove/Property Associations   java/util/ArrayList Name   Box3edu/harvard/hul/ois/jhove/module/jpeg2000/BoxHolder+Other boxes may not occur before JP2 Header Descriptionjava/io/RandomAccessFilejava/io/IOExceptionjava/util/Listjava/lang/String _parentBox2Ledu/harvard/hul/ois/jhove/module/jpeg2000/JP2Box;_module1Ledu/harvard/hul/ois/jhove/module/Jpeg2000Module; _boxHeader5Ledu/harvard/hul/ois/jhove/module/jpeg2000/BoxHeader;3edu/harvard/hul/ois/jhove/module/jpeg2000/BoxHeader getDataLength bytesLeft_repInfo#Ledu/harvard/hul/ois/jhove/RepInfo;_dstrmLjava/io/DataInputStream;_rafLjava/io/RandomAccessFile;equals(Ljava/lang/Object;)Z/edu/harvard/hul/ois/jhove/module/Jpeg2000Module getFilePos skipBytesC(Ljava/io/DataInputStream;ILedu/harvard/hul/ois/jhove/ModuleBase;)Iaddappend-(Ljava/lang/String;)Ljava/lang/StringBuilder;toString(Ljava/lang/String;J)V!edu/harvard/hul/ois/jhove/RepInfo setMessage&(Ledu/harvard/hul/ois/jhove/Message;)V setWellFormed(Z)V((Ljava/lang/String;Ljava/lang/String;J)VisEmpty&edu/harvard/hul/ois/jhove/PropertyTypePROPERTY(Ledu/harvard/hul/ois/jhove/PropertyType;'edu/harvard/hul/ois/jhove/PropertyArityLIST)Ledu/harvard/hul/ois/jhove/PropertyArity;x(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ledu/harvard/hul/ois/jhove/PropertyArity;Ljava/lang/Object;)V(I)VSTRINGO(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ljava/lang/Object;)V! *+* *+*,>(+*+** *Y*+ *+ ** *+ *+*+ [MN++N*Y-+M*Y-+M*Y-+M*Y-+M*Y-+ M!*"Y-+#M$*%Y-+&Mt'*(Y-+)M^**+Y-+,MH-*.Y-+/M20*1Y-+2M3*4Y-+5M6*7Y-+8M9*:Y-+;M<*=Y-+>M?*@Y-+AMB*CY-+DME*FY-+GMH*IY-+JMlK*LY-+MMVN*OY-+PM@Q*RY-+SM*T*UY-+VMW*XY-+YMZ*[Y-+\M]*^Y-+_M`*aY-+bMc*dY-+eMf*gY-+hMi*jY-+kMzl*mY-+nMdo*pY-+qMNr*sY-+tM8u*vY-+wM"x*yY-+zM {Y-|M,/%  ** }~** }*~e*B-** * ** * W*( *+W@4* YY** }* @4* YY** }* B6* YY** }* 7"*Y*mJYL*M,+Y,W*N- +-WY+$* jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/POCMarkerSegment.class0000644000707400001440000000466011510702105026264 0ustar garyusers2r * + ,-. / 0123 4 5 67 89: ;<= > ?@ABCD ;E FG H IJ KLMN()VCodeprocess(I)Z StackMapTableOM ExceptionsP ! QR ST&edu/harvard/hul/ois/jhove/ErrorMessage2POC marker segment at wrong position in codestream UV WX#Invalid size for POC marker segment"edu/harvard/hul/ois/jhove/Property YZ [\] ^_` abStartResolutionLevelIndexc dejava/lang/Integer f gComponentIndex LayerIndexEndResolutionLevelIndexProgressionOrderChange hei jk l mnProgressionOrderChangeo pq:edu/harvard/hul/ois/jhove/module/jpeg2000/POCMarkerSegment7edu/harvard/hul/ois/jhove/module/jpeg2000/MarkerSegment%[Ledu/harvard/hul/ois/jhove/Property;java/io/IOException nCompBytes()I_repInfo#Ledu/harvard/hul/ois/jhove/RepInfo;(Ljava/lang/String;)V!edu/harvard/hul/ois/jhove/RepInfo setMessage&(Ledu/harvard/hul/ois/jhove/Message;)V_module1Ledu/harvard/hul/ois/jhove/module/Jpeg2000Module;_dstreamLjava/io/DataInputStream;/edu/harvard/hul/ois/jhove/module/Jpeg2000ModulereadUnsignedShort(Ljava/io/DataInputStream;)I$edu/harvard/hul/ois/jhove/ModuleBasereadUnsignedByteB(Ljava/io/DataInputStream;Ledu/harvard/hul/ois/jhove/ModuleBase;)I&edu/harvard/hul/ois/jhove/PropertyTypeINTEGER(Ledu/harvard/hul/ois/jhove/PropertyType;(I)VO(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ljava/lang/Object;)VPROPERTY'edu/harvard/hul/ois/jhove/PropertyArityARRAY)Ledu/harvard/hul/ois/jhove/PropertyArity;x(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ledu/harvard/hul/ois/jhove/PropertyArity;Ljava/lang/Object;)V getMainOrTile8()Ledu/harvard/hul/ois/jhove/module/jpeg2000/MainOrTile;4edu/harvard/hul/ois/jhove/module/jpeg2000/MainOrTilesetPOCProperty'(Ledu/harvard/hul/ois/jhove/Property;)V! !"*#$" *=*Y >l6h*Y :6* * 6* * 6* * 6* * 6 * * 6 * * 6 * * 6 * * 6  :   YYS  YYS  YY S  YY S  YY S Y S*: Y%7  A &* 0 '&()jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/PPMMarkerSegment.class0000644000707400001440000000277711510702105026306 0ustar garyusers2M      ! "# $%& ' () * +, "-./()VCodeprocess(I)Z StackMapTable Exceptions0  123 45 67 89: ;<= >? @A&edu/harvard/hul/ois/jhove/ErrorMessage1Invalid length for tile-part header in PPM packet BC DE FGH IJ KL:edu/harvard/hul/ois/jhove/module/jpeg2000/PPMMarkerSegment7edu/harvard/hul/ois/jhove/module/jpeg2000/MarkerSegmentjava/io/IOException_ccs:Ledu/harvard/hul/ois/jhove/module/jpeg2000/ContCodestream;8edu/harvard/hul/ois/jhove/module/jpeg2000/ContCodestream setPPMSeen(Z)V_dstreamLjava/io/DataInputStream;_module1Ledu/harvard/hul/ois/jhove/module/Jpeg2000Module;$edu/harvard/hul/ois/jhove/ModuleBasereadUnsignedByteB(Ljava/io/DataInputStream;Ledu/harvard/hul/ois/jhove/ModuleBase;)I/edu/harvard/hul/ois/jhove/module/Jpeg2000ModulereadUnsignedInt(Ljava/io/DataInputStream;)J_repInfo#Ledu/harvard/hul/ois/jhove/RepInfo;(Ljava/lang/String;)V!edu/harvard/hul/ois/jhove/RepInfo setMessage&(Ledu/harvard/hul/ois/jhove/Message;)V_cs6Ledu/harvard/hul/ois/jhove/module/jpeg2000/Codestream;4edu/harvard/hul/ois/jhove/module/jpeg2000/Codestream addPPMLength(J)V skipBytesC(Ljava/io/DataInputStream;ILedu/harvard/hul/ois/jhove/ModuleBase;)I! **`**=N**B!* Y * !**!*W!e< +"jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/PPTMarkerSegment.class0000644000707400001440000000322211510702105026277 0ustar garyusers2R    !"# $ %& '( ) * +, -./ 01 -234()VCodeprocess(I)Z StackMapTable5 Exceptions6  789 :; <=&edu/harvard/hul/ois/jhove/ErrorMessage*PPT and PPM not allowed in same codestream >? @A BC$PPT not allowed in codestream header DE FGH IJK LM1Invalid length for tile-part header in PPM packet5 NO PQ:edu/harvard/hul/ois/jhove/module/jpeg2000/PPTMarkerSegment7edu/harvard/hul/ois/jhove/module/jpeg2000/MarkerSegment.edu/harvard/hul/ois/jhove/module/jpeg2000/Tilejava/io/IOException_ccs:Ledu/harvard/hul/ois/jhove/module/jpeg2000/ContCodestream;8edu/harvard/hul/ois/jhove/module/jpeg2000/ContCodestream isPPMSeen()Z_repInfo#Ledu/harvard/hul/ois/jhove/RepInfo;(Ljava/lang/String;)V!edu/harvard/hul/ois/jhove/RepInfo setMessage&(Ledu/harvard/hul/ois/jhove/Message;)V getCurTile2()Ledu/harvard/hul/ois/jhove/module/jpeg2000/Tile;_dstreamLjava/io/DataInputStream;_module1Ledu/harvard/hul/ois/jhove/module/Jpeg2000Module;$edu/harvard/hul/ois/jhove/ModuleBasereadUnsignedByteB(Ljava/io/DataInputStream;Ledu/harvard/hul/ois/jhove/ModuleBase;)I/edu/harvard/hul/ois/jhove/module/Jpeg2000ModulereadUnsignedInt(Ljava/io/DataInputStream;)J addPPTLength(J)V skipBytesC(Ljava/io/DataInputStream;ILedu/harvard/hul/ois/jhove/ModuleBase;)I!***Y* M,*Y * * >P* * 7*Y,* * * We<-"jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/QCCMarkerSegment.class0000644000707400001440000000453611510702105026253 0ustar garyusers2u ) * +,- . /0 1 2 34 567 89 :;< =>? : @ ABC DE FG =H DI JKLM()VCodeprocess(I)Z StackMapTableN ExceptionsO ! PQ RS&edu/harvard/hul/ois/jhove/ErrorMessage2QCC marker segment at wrong position in codestream TU VW XY Z[\ ]^_ `a4Unrecognized quantization type in QCC marker segment bcjava/util/ArrayList d"edu/harvard/hul/ois/jhove/PropertyQuantizationStylee fgjava/lang/Integer hi jk StepValuel mn oQuantizationComponent pg qnr st:edu/harvard/hul/ois/jhove/module/jpeg2000/QCCMarkerSegment7edu/harvard/hul/ois/jhove/module/jpeg2000/MarkerSegment[Ijava/io/IOException nCompBytes()I_repInfo#Ledu/harvard/hul/ois/jhove/RepInfo;(Ljava/lang/String;)V!edu/harvard/hul/ois/jhove/RepInfo setMessage&(Ledu/harvard/hul/ois/jhove/Message;)V_dstreamLjava/io/DataInputStream;_module1Ledu/harvard/hul/ois/jhove/module/Jpeg2000Module;$edu/harvard/hul/ois/jhove/ModuleBasereadUnsignedByteB(Ljava/io/DataInputStream;Ledu/harvard/hul/ois/jhove/ModuleBase;)I/edu/harvard/hul/ois/jhove/module/Jpeg2000ModulereadUnsignedShort(Ljava/io/DataInputStream;)I getMainOrTile8()Ledu/harvard/hul/ois/jhove/module/jpeg2000/MainOrTile;(I)V&edu/harvard/hul/ois/jhove/PropertyTypeINTEGER(Ledu/harvard/hul/ois/jhove/PropertyType;O(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ljava/lang/Object;)Vjava/util/Listadd(Ljava/lang/Object;)Z'edu/harvard/hul/ois/jhove/PropertyArityARRAY)Ledu/harvard/hul/ois/jhove/PropertyArity;x(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ledu/harvard/hul/ois/jhove/PropertyArity;Ljava/lang/Object;)VPROPERTYLIST4edu/harvard/hul/ois/jhove/module/jpeg2000/MainOrTilesetCompProperty((ILedu/harvard/hul/ois/jhove/Property;)V! !"*#$" I*=*Y** >6* * >6** 6~6|KKd6 :6   ** O Fdl6 :6   * * O *Y * : Y:  YYW YW Y %4 4&&&'(jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/QCDMarkerSegment.class0000644000707400001440000000425311510702105026250 0ustar garyusers2o ' ( ) *+ ,- ./0 1 234 567 89: 5 ; <=> ?@ A BC 8D ?E FGHI()VCodeprocess(I)Z StackMapTableJ ExceptionsK  LM NOP QRS TU VW&edu/harvard/hul/ois/jhove/ErrorMessage4Unrecognized quantization type in QCD marker segment XY Z[java/util/ArrayList \"edu/harvard/hul/ois/jhove/PropertyQuantizationStyle] ^_java/lang/Integer `a bc StepValued ef g hiQuantizationDefault j_ kfl mn:edu/harvard/hul/ois/jhove/module/jpeg2000/QCDMarkerSegment7edu/harvard/hul/ois/jhove/module/jpeg2000/MarkerSegment[Ijava/io/IOException_dstreamLjava/io/DataInputStream;_module1Ledu/harvard/hul/ois/jhove/module/Jpeg2000Module;$edu/harvard/hul/ois/jhove/ModuleBasereadUnsignedByteB(Ljava/io/DataInputStream;Ledu/harvard/hul/ois/jhove/ModuleBase;)I/edu/harvard/hul/ois/jhove/module/Jpeg2000ModulereadUnsignedShort(Ljava/io/DataInputStream;)I_repInfo#Ledu/harvard/hul/ois/jhove/RepInfo;(Ljava/lang/String;)V!edu/harvard/hul/ois/jhove/RepInfo setMessage&(Ledu/harvard/hul/ois/jhove/Message;)V(I)V&edu/harvard/hul/ois/jhove/PropertyTypeINTEGER(Ledu/harvard/hul/ois/jhove/PropertyType;O(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ljava/lang/Object;)Vjava/util/Listadd(Ljava/lang/Object;)Z'edu/harvard/hul/ois/jhove/PropertyArityARRAY)Ledu/harvard/hul/ois/jhove/PropertyArity;x(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ledu/harvard/hul/ois/jhove/PropertyArity;Ljava/lang/Object;)V getMainOrTile8()Ledu/harvard/hul/ois/jhove/module/jpeg2000/MainOrTile;PROPERTYLIST4edu/harvard/hul/ois/jhove/module/jpeg2000/MainOrTilesetQCDProperty'(Ledu/harvard/hul/ois/jhove/Property;)V! *!" 5**=~>xHHd6 :6**OEdl6 :6**O*Y  Y : YYW YW*: Y#*, $$$%&jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/RGNMarkerSegment.class0000644000707400001440000000410711510702105026265 0ustar garyusers2n & ' ()* + ,- . / 01 23 45 678 9:; 6 < =>?@ 9A BC D EFGH()VCodeprocess(I)Z StackMapTable ExceptionsI  JK LM&edu/harvard/hul/ois/jhove/ErrorMessage2RGN marker segment at wrong position in codestream NO PQ RS TUV WXY Z[ \]java/util/ArrayList ^"edu/harvard/hul/ois/jhove/PropertyROIStyle_ `ajava/lang/Integer bc de ROIParameterRegionOfInterest fag hi jk lm:edu/harvard/hul/ois/jhove/module/jpeg2000/RGNMarkerSegment7edu/harvard/hul/ois/jhove/module/jpeg2000/MarkerSegmentjava/io/IOException nCompBytes()I_repInfo#Ledu/harvard/hul/ois/jhove/RepInfo;(Ljava/lang/String;)V!edu/harvard/hul/ois/jhove/RepInfo setMessage&(Ledu/harvard/hul/ois/jhove/Message;)V_dstreamLjava/io/DataInputStream;_module1Ledu/harvard/hul/ois/jhove/module/Jpeg2000Module;$edu/harvard/hul/ois/jhove/ModuleBasereadUnsignedByteB(Ljava/io/DataInputStream;Ledu/harvard/hul/ois/jhove/ModuleBase;)I/edu/harvard/hul/ois/jhove/module/Jpeg2000ModulereadUnsignedShort(Ljava/io/DataInputStream;)I getMainOrTile8()Ledu/harvard/hul/ois/jhove/module/jpeg2000/MainOrTile;(I)V&edu/harvard/hul/ois/jhove/PropertyTypeINTEGER(Ledu/harvard/hul/ois/jhove/PropertyType;O(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ljava/lang/Object;)Vjava/util/Listadd(Ljava/lang/Object;)ZPROPERTY'edu/harvard/hul/ois/jhove/PropertyArityLIST)Ledu/harvard/hul/ois/jhove/PropertyArity;x(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ledu/harvard/hul/ois/jhove/PropertyArity;Ljava/lang/Object;)V4edu/harvard/hul/ois/jhove/module/jpeg2000/MainOrTilesetCompProperty((ILedu/harvard/hul/ois/jhove/Property;)V! *!" *=*Y** >* * >** 6** 6* : Y:YYWYYWY#  $%jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/SIZMarkerSegment.class0000644000707400001440000000475111510702105026311 0ustar garyusers2| %0 $1 $2 34 35 $6 78 9:; <=> ?@A < B CDEFGHIJKLMN OP QRST ?U OV 7WXY()VCodeprocess(I)Z StackMapTableXZ Exceptions[ &' \] ^_` ab cd efg hij kljava/util/ArrayList &i"edu/harvard/hul/ois/jhove/Property Capabilitiesm nojava/lang/Integer &pq rsXSizeYSizeXOSizeYOSizeXTSizeYTSizeXTOSizeYTOSizeCSizeSSizet uv &wXRSizeYRSizeImageAndTileSize xo yv z{:edu/harvard/hul/ois/jhove/module/jpeg2000/SIZMarkerSegment7edu/harvard/hul/ois/jhove/module/jpeg2000/MarkerSegment[Ijava/io/IOException_module1Ledu/harvard/hul/ois/jhove/module/Jpeg2000Module;_dstreamLjava/io/DataInputStream;/edu/harvard/hul/ois/jhove/module/Jpeg2000ModulereadUnsignedShort(Ljava/io/DataInputStream;)IreadUnsignedInt(Ljava/io/DataInputStream;)J_cs6Ledu/harvard/hul/ois/jhove/module/jpeg2000/Codestream;4edu/harvard/hul/ois/jhove/module/jpeg2000/CodestreamsetNumComponents(I)V$edu/harvard/hul/ois/jhove/ModuleBasereadUnsignedByteB(Ljava/io/DataInputStream;Ledu/harvard/hul/ois/jhove/ModuleBase;)I&edu/harvard/hul/ois/jhove/PropertyTypeINTEGER(Ledu/harvard/hul/ois/jhove/PropertyType;O(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ljava/lang/Object;)Vjava/util/Listadd(Ljava/lang/Object;)Z'edu/harvard/hul/ois/jhove/PropertyArityARRAY)Ledu/harvard/hul/ois/jhove/PropertyArity;x(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ledu/harvard/hul/ois/jhove/PropertyArity;Ljava/lang/Object;)VPROPERTYLISTsetSIZProperty'(Ledu/harvard/hul/ois/jhove/Property;)V!$%&'(*)*(**=**>**6**6**6**6**6**6 **6 **6 *  : 6     **O  : 6  **O :6 **O Y : Y YW Y YW Y YW Y YW Y YW Y YW Y YW Y Y W Y Y W Y Y W Y  W Y  W Y W* Y !"#+2,---./jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/SOTMarkerSegment.class0000644000707400001440000000311511510702105026302 0ustar garyusers2O    ! " # $% &' $( $)* + ,- . /01()VCodeprocess(I)Z StackMapTable02* Exceptions3  45 678 9: ;< =>? @AB CD EF GH2edu/harvard/hul/ois/jhove/module/jpeg2000/TilePart I2 JK LA MN:edu/harvard/hul/ois/jhove/module/jpeg2000/SOTMarkerSegment7edu/harvard/hul/ois/jhove/module/jpeg2000/MarkerSegment.edu/harvard/hul/ois/jhove/module/jpeg2000/Tilejava/io/IOException_module1Ledu/harvard/hul/ois/jhove/module/Jpeg2000Module;_dstreamLjava/io/DataInputStream;/edu/harvard/hul/ois/jhove/module/Jpeg2000ModulereadUnsignedShort(Ljava/io/DataInputStream;)IreadUnsignedInt(Ljava/io/DataInputStream;)J_ccs:Ledu/harvard/hul/ois/jhove/module/jpeg2000/ContCodestream;8edu/harvard/hul/ois/jhove/module/jpeg2000/ContCodestream setTileLeft(J)V$edu/harvard/hul/ois/jhove/ModuleBasereadUnsignedByteB(Ljava/io/DataInputStream;Ledu/harvard/hul/ois/jhove/ModuleBase;)IgetTile3(I)Ledu/harvard/hul/ois/jhove/module/jpeg2000/Tile; setCurTile3(Ledu/harvard/hul/ois/jhove/module/jpeg2000/Tile;)V4(Ledu/harvard/hul/ois/jhove/module/jpeg2000/Tile;I)V addTilePart7(Ledu/harvard/hul/ois/jhove/module/jpeg2000/TilePart;)V setLength skipBytesC(Ljava/io/DataInputStream;ILedu/harvard/hul/ois/jhove/ModuleBase;)I!* **=**B*!**6**6* :* Y : !**d*Wjhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/TLMMarkerSegment.class0000644000707400001440000000473511510702105026302 0ustar garyusers2z * + , -. /01 2 34 5 678 9 :;<= >?@ 9 A BC :DE FG >H IJ K LMNO()VCodeprocess(I)Z StackMapTableNP ExceptionsQ ! RS TUV WX YZ&edu/harvard/hul/ois/jhove/ErrorMessage&Invalid ST value in TLM marker segment [\ ]^ _`a bcjava/util/ArrayList de fg"edu/harvard/hul/ois/jhove/PropertyIndexh ijjava/lang/Integer kP lm noLength pqTilePartLength rjs tu vw xy:edu/harvard/hul/ois/jhove/module/jpeg2000/TLMMarkerSegment7edu/harvard/hul/ois/jhove/module/jpeg2000/MarkerSegmentjava/util/Listjava/io/IOException_dstreamLjava/io/DataInputStream;_module1Ledu/harvard/hul/ois/jhove/module/Jpeg2000Module;$edu/harvard/hul/ois/jhove/ModuleBasereadUnsignedByteB(Ljava/io/DataInputStream;Ledu/harvard/hul/ois/jhove/ModuleBase;)I_repInfo#Ledu/harvard/hul/ois/jhove/RepInfo;(Ljava/lang/String;)V!edu/harvard/hul/ois/jhove/RepInfo setMessage&(Ledu/harvard/hul/ois/jhove/Message;)V_ccs:Ledu/harvard/hul/ois/jhove/module/jpeg2000/ContCodestream;8edu/harvard/hul/ois/jhove/module/jpeg2000/ContCodestream getCurTile2()Ledu/harvard/hul/ois/jhove/module/jpeg2000/Tile;(I)V/edu/harvard/hul/ois/jhove/module/Jpeg2000ModulereadUnsignedShort(Ljava/io/DataInputStream;)I&edu/harvard/hul/ois/jhove/PropertyTypeINTEGER(Ledu/harvard/hul/ois/jhove/PropertyType;O(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ljava/lang/Object;)Vadd(Ljava/lang/Object;)ZreadUnsignedInt(Ljava/io/DataInputStream;)J_cs6Ledu/harvard/hul/ois/jhove/module/jpeg2000/Codestream;PROPERTY'edu/harvard/hul/ois/jhove/PropertyArityLIST)Ledu/harvard/hul/ois/jhove/PropertyArity;x(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ledu/harvard/hul/ois/jhove/PropertyArity;Ljava/lang/Object;)V4edu/harvard/hul/ois/jhove/module/jpeg2000/Codestream addTileLength'(Ledu/harvard/hul/ois/jhove/Property;)V! !"*#$" M**=**>0~z6@~z66:"(*Y dl6hd* 6 Y : C**6 **6  YY W**6 **6  YY W*Y N%83&@ +'  :()jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/TopLevelBoxHolder.class0000644000707400001440000000150711510702105026514 0ustar garyusers2+        eofZ(Ledu/harvard/hul/ois/jhove/module/Jpeg2000Module;Ljava/io/RandomAccessFile;Ledu/harvard/hul/ois/jhove/RepInfo;Ljava/io/DataInputStream;)VCodegetSelfPropName()Ljava/lang/String;hasNext()Z StackMapTable ! "# $% &'  ( )* Top Level;edu/harvard/hul/ois/jhove/module/jpeg2000/TopLevelBoxHolder3edu/harvard/hul/ois/jhove/module/jpeg2000/BoxHolder(Ljava/io/RandomAccessFile;)V_module1Ledu/harvard/hul/ois/jhove/module/Jpeg2000Module;_dstrmLjava/io/DataInputStream;_repInfo#Ledu/harvard/hul/ois/jhove/RepInfo;hasBoxes bytesLeftJ!  3'*,*+**-***  $ * @jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/Codestream.class0000644000707400001440000001073011510702106025240 0ustar garyusers2 Jr Ist r Iuv w Ix Hy Iz I{ I| I} I~ I I I H  I I I  I H H  & I I                     Br D _niso-Ledu/harvard/hul/ois/jhove/NisoImageMetadata;_tilesLjava/util/List;_ppmLengthList_labelProperty$Ledu/harvard/hul/ois/jhove/Property;_compMapProperty _sizProperty _crgProperty_paletteProperty _roiPropertytileLengthList()VCode makeProperty&()Ledu/harvard/hul/ois/jhove/Property; StackMapTablesetDefaultNiso0(Ledu/harvard/hul/ois/jhove/NisoImageMetadata;)VgetNiso/()Ledu/harvard/hul/ois/jhove/NisoImageMetadata;setTiles(Ljava/util/List;)V addTileLength'(Ledu/harvard/hul/ois/jhove/Property;)V addPPMLength(J)VsetLabelPropertysetCompMapPropertysetPalettePropertysetROIPropertysetSIZPropertysetCRGPropertysetCompProperty((ILedu/harvard/hul/ois/jhove/Property;)V XY +edu/harvard/hul/ois/jhove/NisoImageMetadata KLjava/util/ArrayList X PQ RQ UQ VQ SQ Q Q Q WN "edu/harvard/hul/ois/jhove/Property TileLengths  X N PacketLengths ONPackedPacketHeaderLengths TQNisoImageMetadata X MN  .edu/harvard/hul/ois/jhove/module/jpeg2000/Tile [\Tiles NComments  Components Codestream i i java/util/LinkedListjava/lang/Long Xi Component java/util/List4edu/harvard/hul/ois/jhove/module/jpeg2000/Codestream4edu/harvard/hul/ois/jhove/module/jpeg2000/MainOrTilejava/util/ListIterator _precSize[I(I)Vadd(Ljava/lang/Object;)Z _codProperty _qcdProperty _pocPropertyisEmpty()Z&edu/harvard/hul/ois/jhove/PropertyTypePROPERTY(Ledu/harvard/hul/ois/jhove/PropertyType;'edu/harvard/hul/ois/jhove/PropertyArityLIST)Ledu/harvard/hul/ois/jhove/PropertyArity;x(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ledu/harvard/hul/ois/jhove/PropertyArity;Ljava/lang/Object;)V_packetLengthListLONGNISOIMAGEMETADATAO(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ljava/lang/Object;)Vsize()I listIterator()Ljava/util/ListIterator;hasNextnext()Ljava/lang/Object; _comments _components%[Ledu/harvard/hul/ois/jhove/Property; getByteOrder()Ljava/lang/String; setByteOrder(Ljava/lang/String;)V getMimeType setMimeTypegetBitsPerSample()[IsetBitsPerSample([I)VgetImageLength()JsetImageLength getImageWidth setImageWidthgetSamplesPerPixelsetSamplesPerPixelgetCompressionSchemesetCompressionSchemegetYSamplingFrequency&()Ledu/harvard/hul/ois/jhove/Rational;setYSamplingFrequency'(Ledu/harvard/hul/ois/jhove/Rational;)VgetXSamplingFrequencysetXSamplingFrequencygetSamplingFrequencyUnitsetSamplingFrequencyUnitgetValue!IJ KLMNONPQRQSQTQUQVQWNXYZ!***Y[\ZDY L*+* W* +* W* +* W* +* W* +* W*+* W*+* W*+* W*)*+Y* W*)*+Y* W*)*+Y* W*+* W+Y* W*!d*!XY*!"M*!#N-$-%&:,' W+Y(, W*)+Y**) W*+WY*+M>*+*+2: , W,+Y,, WY-+]/^,,,D^_"%^`aZ{o*+./*+01*+23*+45*+67*+89*+:;*+<=*+>?*+@AbcZ*deZ*+!fgZ3**BYC*+ W]hiZ*DYE WjgZ*+kgZ*+ lgZ*+ mgZ*+ ngZ*+ ogZ*+pqZa K*+F*+=*+2*+YFBYCS*+2GHN-, W]5jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/AssociationBox.class0000644000707400001440000000371611510702106026105 0ustar garyusers2p , - . / 012 3 4 56 7 8 9: ; 9<=> ?@ AB CD E F G HI JKLR(Ljava/io/RandomAccessFile;Ledu/harvard/hul/ois/jhove/module/jpeg2000/BoxHolder;)VCodereadBox()Z StackMapTable6M= ExceptionsNselfDescProperty&()Ledu/harvard/hul/ois/jhove/Property;getSelfPropName()Ljava/lang/String;  OP QR STU VWjava/util/LinkedList P X! YZ0edu/harvard/hul/ois/jhove/module/jpeg2000/JP2Box ! ()M [\ ]^ _!"edu/harvard/hul/ois/jhove/Property Associations` abc de f Association gh ij klm nj oPAssociation Box8edu/harvard/hul/ois/jhove/module/jpeg2000/AssociationBoxjava/util/Listjava/io/IOException initBytesRead()VhasBoxesZ _boxHeader5Ledu/harvard/hul/ois/jhove/module/jpeg2000/BoxHeader;3edu/harvard/hul/ois/jhove/module/jpeg2000/BoxHeader getDataLength()JhasNextnext()Ljava/lang/Object;add(Ljava/lang/Object;)Z associationsLjava/util/List;isEmpty&edu/harvard/hul/ois/jhove/PropertyTypePROPERTY(Ledu/harvard/hul/ois/jhove/PropertyType;'edu/harvard/hul/ois/jhove/PropertyArityLIST)Ledu/harvard/hul/ois/jhove/PropertyArity;x(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ledu/harvard/hul/ois/jhove/PropertyArity;Ljava/lang/Object;)V _parentBox2Ledu/harvard/hul/ois/jhove/module/jpeg2000/JP2Box;addAssociation'(Ledu/harvard/hul/ois/jhove/Property;)V_module1Ledu/harvard/hul/ois/jhove/module/Jpeg2000Module;/edu/harvard/hul/ois/jhove/module/Jpeg2000ModuleaddAssociationPropfinalizeBytesRead! *+, !***<MYN*2* M,#, , : - W*-Y* WY-:** **"#$%$%&'()*+jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/BinaryFilterBox.class0000644000707400001440000000645011510702106026221 0ustar garyusers2 +E *F *G *H IJ *KLM NO PQ R ST *UVW SX Y Z[ *\ ]^_` a b b *cd e f g +h +i +j *k +l +mnopqgzipuuid[I boxStreamLjava/io/DataInputStream; _realParent2Ledu/harvard/hul/ois/jhove/module/jpeg2000/JP2Box;O(Ljava/io/RandomAccessFile;Ledu/harvard/hul/ois/jhove/module/jpeg2000/JP2Box;)VCodereadBox()Z StackMapTabler Exceptionsnext()Ljava/lang/Object;pdn getBoxStream()Ljava/io/DataInputStream;getSelfPropName()Ljava/lang/String;()V 2s 01 t/ uvw xy ,-"edu/harvard/hul/ois/jhove/Property BinaryFilterz {|} ~ 2 %edu/harvard/hul/ois/jhove/InfoMessageABinary Filter Box of type other than Gzip, contents not processed 2 java/io/DataInputStream!java/util/zip/InflaterInputStream,edu/harvard/hul/ois/jhove/CountedInputStream 2 2 ./3edu/harvard/hul/ois/jhove/module/jpeg2000/BoxHeader 2 D B java/io/IOExceptionBinary Filter Box9edu/harvard/hul/ois/jhove/module/jpeg2000/BinaryFilterBox0edu/harvard/hul/ois/jhove/module/jpeg2000/JP2Box[BR(Ljava/io/RandomAccessFile;Ledu/harvard/hul/ois/jhove/module/jpeg2000/BoxHolder;)V_dstrm_module1Ledu/harvard/hul/ois/jhove/module/Jpeg2000Module;$edu/harvard/hul/ois/jhove/ModuleBase readByteBufD(Ljava/io/DataInputStream;[BLedu/harvard/hul/ois/jhove/ModuleBase;)I&edu/harvard/hul/ois/jhove/PropertyTypeBYTE(Ledu/harvard/hul/ois/jhove/PropertyType;'edu/harvard/hul/ois/jhove/PropertyArityARRAY)Ledu/harvard/hul/ois/jhove/PropertyArity;x(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ledu/harvard/hul/ois/jhove/PropertyArity;Ljava/lang/Object;)V/edu/harvard/hul/ois/jhove/module/Jpeg2000ModuleaddBinaryFilterProp'(Ledu/harvard/hul/ois/jhove/Property;)V_repInfo#Ledu/harvard/hul/ois/jhove/RepInfo; getFilePos()J(Ljava/lang/String;J)V!edu/harvard/hul/ois/jhove/RepInfo setMessage&(Ledu/harvard/hul/ois/jhove/Message;)V _boxHeader5Ledu/harvard/hul/ois/jhove/module/jpeg2000/BoxHeader; getLength(Ljava/io/InputStream;I)V(Ljava/io/InputStream;)VM(Ledu/harvard/hul/ois/jhove/module/Jpeg2000Module;Ljava/io/DataInputStream;)V readHeadergetTypeboxMaker{(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/module/jpeg2000/BoxHolder;)Ledu/harvard/hul/ois/jhove/module/jpeg2000/JP2Box; setModule4(Ledu/harvard/hul/ois/jhove/module/Jpeg2000Module;)V setRepInfo&(Ledu/harvard/hul/ois/jhove/RepInfo;)V_rafLjava/io/RandomAccessFile;setRandomAccessFile(Ljava/io/RandomAccessFile;)VsetDataInputStream(Ljava/io/DataInputStream;)V!*+,-./01234 *+,*,564 L*+*W=>+3.=*Y + * Y*.*e>*YYY*784*9(:;4qEY**L+ +!*"M,*#,* $,*%&,*',MAB(7B<=>?@4*AB4)CD4ui YOY4OY OYOYtOYOYOYOYOY )OY OY OY OY TOYOYOjhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/BPCCBox.class0000644000707400001440000000277611510702106024345 0ustar garyusers2L   ! " # $% & ' () *+ ,- ./01R(Ljava/io/RandomAccessFile;Ledu/harvard/hul/ois/jhove/module/jpeg2000/BoxHolder;)VCodereadBox()Z StackMapTable2 Exceptions3getSelfPropName()Ljava/lang/String;  456edu/harvard/hul/ois/jhove/module/jpeg2000/JP2HeaderBox=edu/harvard/hul/ois/jhove/module/jpeg2000/CodestreamHeaderBox 67 87 9:; <= >? @AB CDE FGH IJ K7Bits Per Component Box1edu/harvard/hul/ois/jhove/module/jpeg2000/BPCCBox0edu/harvard/hul/ois/jhove/module/jpeg2000/JP2Box[Ijava/io/IOException _parentBox2Ledu/harvard/hul/ois/jhove/module/jpeg2000/JP2Box;wrongBoxContext()V initBytesRead _boxHeader5Ledu/harvard/hul/ois/jhove/module/jpeg2000/BoxHeader;3edu/harvard/hul/ois/jhove/module/jpeg2000/BoxHeader getDataLength()J_dstrmLjava/io/DataInputStream;_module1Ledu/harvard/hul/ois/jhove/module/Jpeg2000Module;$edu/harvard/hul/ois/jhove/ModuleBasereadUnsignedByteB(Ljava/io/DataInputStream;Ledu/harvard/hul/ois/jhove/ModuleBase;)I/edu/harvard/hul/ois/jhove/module/Jpeg2000ModulegetCurrentNiso/()Ledu/harvard/hul/ois/jhove/NisoImageMetadata;+edu/harvard/hul/ois/jhove/NisoImageMetadatasetBitsPerSample([I)VfinalizeBytesRead!*+,yY** ***< M>,* * O* N-, *jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/COCMarkerSegment.class0000644000707400001440000000473211510702106026250 0ustar garyusers2~ #. "/ "012 3 45 "6 "7 89 :; "<= >?@ ABC > D EFGHIJKL MN OP AQ MR STUV()VCodeprocess(I)Z StackMapTableUW ExceptionsX $% YZ [\&edu/harvard/hul/ois/jhove/ErrorMessage2COC marker segment at wrong position in codestream $]^ _` ab cde fgh ij kljava/util/ArrayList $m"edu/harvard/hul/ois/jhove/Property CodingStylen opjava/lang/Integer $qr stNumberDecompositionLevelsCodeBlockWidthCodeBlockHeightCodeBlockStyleTransformation PrecinctSizeu vw $xCOC yp zw{ |}:edu/harvard/hul/ois/jhove/module/jpeg2000/COCMarkerSegment7edu/harvard/hul/ois/jhove/module/jpeg2000/MarkerSegment[Ijava/io/IOException nCompBytes()I_repInfo#Ledu/harvard/hul/ois/jhove/RepInfo;(Ljava/lang/String;)V!edu/harvard/hul/ois/jhove/RepInfo setMessage&(Ledu/harvard/hul/ois/jhove/Message;)V_dstreamLjava/io/DataInputStream;_module1Ledu/harvard/hul/ois/jhove/module/Jpeg2000Module;$edu/harvard/hul/ois/jhove/ModuleBasereadUnsignedByteB(Ljava/io/DataInputStream;Ledu/harvard/hul/ois/jhove/ModuleBase;)I/edu/harvard/hul/ois/jhove/module/Jpeg2000ModulereadUnsignedShort(Ljava/io/DataInputStream;)I getMainOrTile8()Ledu/harvard/hul/ois/jhove/module/jpeg2000/MainOrTile;(I)V&edu/harvard/hul/ois/jhove/PropertyTypeINTEGER(Ledu/harvard/hul/ois/jhove/PropertyType;O(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ljava/lang/Object;)Vjava/util/Listadd(Ljava/lang/Object;)Z'edu/harvard/hul/ois/jhove/PropertyArityARRAY)Ledu/harvard/hul/ois/jhove/PropertyArity;x(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ledu/harvard/hul/ois/jhove/PropertyArity;Ljava/lang/Object;)VPROPERTYLIST4edu/harvard/hul/ois/jhove/module/jpeg2000/MainOrTilesetCompProperty((ILedu/harvard/hul/ois/jhove/Property;)V!"#$%&*'(& *=*Y** >* * >** 6** 6** 6** 6** 6** 6 : ~-` : 6  `  ** O * : Y :  YYW YYW YYW YYW YYW YY W Y W Y  !)% b *+,-jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/CaptureResolutionBox.class0000644000707400001440000000322711510702106027315 0ustar garyusers2V ! "# $ % & ' () *+,@$ -. / (0 12 13 14 5678R(Ljava/io/RandomAccessFile;Ledu/harvard/hul/ois/jhove/module/jpeg2000/BoxHolder;)VCodereadBox()Z StackMapTable Exceptions9getSelfPropName()Ljava/lang/String;  :;7edu/harvard/hul/ois/jhove/module/jpeg2000/ResolutionBox <= >= ?@ ABC DEF GH"edu/harvard/hul/ois/jhove/RationalI JK L MNO PQ RQ ST U=Capture Resolution Box>edu/harvard/hul/ois/jhove/module/jpeg2000/CaptureResolutionBox0edu/harvard/hul/ois/jhove/module/jpeg2000/JP2Boxjava/io/IOException _parentBox2Ledu/harvard/hul/ois/jhove/module/jpeg2000/JP2Box;wrongBoxContext()V initBytesRead_module1Ledu/harvard/hul/ois/jhove/module/Jpeg2000Module;_dstrmLjava/io/DataInputStream;/edu/harvard/hul/ois/jhove/module/Jpeg2000ModulereadUnsignedShort(Ljava/io/DataInputStream;)I$edu/harvard/hul/ois/jhove/ModuleBasereadUnsignedByteB(Ljava/io/DataInputStream;Ledu/harvard/hul/ois/jhove/ModuleBase;)Ijava/lang/Mathpow(DD)D(II)VgetCurrentNiso/()Ledu/harvard/hul/ois/jhove/NisoImageMetadata;+edu/harvard/hul/ois/jhove/NisoImageMetadatasetYSamplingFrequency'(Ledu/harvard/hul/ois/jhove/Rational;)VsetXSamplingFrequencysetSamplingFrequencyUnit(I)VfinalizeBytesRead!*+, * ***L**=**>**6**6** 6** 6 Y  kdh: Y  kdh: *:     * jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/ChannelDefBox.class0000644000707400001440000000517511510702106025621 0ustar garyusers2 #1 "234 "5 "6 "7 89 ": "; <=>? @AB C DE FG FH <IJK @L MN O <PQ <RS T "UVWXR(Ljava/io/RandomAccessFile;Ledu/harvard/hul/ois/jhove/module/jpeg2000/BoxHolder;)VCodereadBox()Z StackMapTableWY> ExceptionsZgetSelfPropName()Ljava/lang/String; $% [\6edu/harvard/hul/ois/jhove/module/jpeg2000/JP2HeaderBox=edu/harvard/hul/ois/jhove/module/jpeg2000/CodestreamHeaderBox ]^ _^ `ab cd ef ghi jk"edu/harvard/hul/ois/jhove/Property ChannelIndexl mnjava/lang/Integer $o $p ChannelTypeq rs tu vwChannelAssociationChannel xny z{ $| }~ChannelDefinition ;edu/harvard/hul/ois/jhove/module/jpeg2000/ComposLayerHdrBox ^Channel Definition Box7edu/harvard/hul/ois/jhove/module/jpeg2000/ChannelDefBox0edu/harvard/hul/ois/jhove/module/jpeg2000/JP2Box%[Ledu/harvard/hul/ois/jhove/Property;java/io/IOException _parentBox2Ledu/harvard/hul/ois/jhove/module/jpeg2000/JP2Box;wrongBoxContext()V initBytesRead _boxHeader5Ledu/harvard/hul/ois/jhove/module/jpeg2000/BoxHeader;3edu/harvard/hul/ois/jhove/module/jpeg2000/BoxHeader getDataLength()J_module1Ledu/harvard/hul/ois/jhove/module/Jpeg2000Module;_dstrmLjava/io/DataInputStream;/edu/harvard/hul/ois/jhove/module/Jpeg2000ModulereadUnsignedShort(Ljava/io/DataInputStream;)I&edu/harvard/hul/ois/jhove/PropertyTypeINTEGER(Ledu/harvard/hul/ois/jhove/PropertyType;(I)VO(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ljava/lang/Object;)V4edu/harvard/hul/ois/jhove/module/jpeg2000/JP2StringsctypStr[Ljava/lang/String;ctypIdx[IaddIntegerPropertyN(Ljava/lang/String;I[Ljava/lang/String;[I)Ledu/harvard/hul/ois/jhove/Property;PROPERTY'edu/harvard/hul/ois/jhove/PropertyArityARRAY)Ledu/harvard/hul/ois/jhove/PropertyArity;x(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ledu/harvard/hul/ois/jhove/PropertyArity;Ljava/lang/Object;)V skipBytesC(Ljava/io/DataInputStream;ILedu/harvard/hul/ois/jhove/ModuleBase;)I addProperty'(Ledu/harvard/hul/ois/jhove/Property;)V addChannelDeffinalizeBytesRead!"#$%&*+,'(&Z +** ***<* * = N6 :* * 6 Y YS* * 6* S* * 6 YYS- YSk* * * W Y-:** *** )#*+8,-./0&!jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/CodestreamHeaderBox.class0000644000707400001440000000563711510702106027034 0ustar garyusers2 < *= *> *? *@ *A BC BD BE *F *G HI *J K *L *MNO PQR ST U V WXY *Z[\ B] ^ _` _abcde f *ghi curCodestream6Ledu/harvard/hul/ois/jhove/module/jpeg2000/Codestream;R(Ljava/io/RandomAccessFile;Ledu/harvard/hul/ois/jhove/module/jpeg2000/BoxHolder;)VCodereadBox()Z StackMapTableiIN Exceptionsj getCodestream8()Ledu/harvard/hul/ois/jhove/module/jpeg2000/Codestream;getSelfPropName()Ljava/lang/String; -. kl mn on pq rst uv wx 8y +, z{ |}3edu/harvard/hul/ois/jhove/module/jpeg2000/BoxHeader ~ - 1 0edu/harvard/hul/ois/jhove/module/jpeg2000/JP2Box2edu/harvard/hul/ois/jhove/module/jpeg2000/LabelBox 01"edu/harvard/hul/ois/jhove/PropertyLabel ; - 8edu/harvard/hul/ois/jhove/module/jpeg2000/ImageHeaderBox &edu/harvard/hul/ois/jhove/ErrorMessage3First box of Codestream Header must be image header } - 1edu/harvard/hul/ois/jhove/module/jpeg2000/BPCCBox4edu/harvard/hul/ois/jhove/module/jpeg2000/PaletteBox9edu/harvard/hul/ois/jhove/module/jpeg2000/ComponentMapBox0edu/harvard/hul/ois/jhove/module/jpeg2000/ROIBox n nCodestream Header Box=edu/harvard/hul/ois/jhove/module/jpeg2000/CodestreamHeaderBoxjava/io/IOException _parentBox2Ledu/harvard/hul/ois/jhove/module/jpeg2000/JP2Box;wrongBoxContext()V initBytesReadhasBoxesZ_module1Ledu/harvard/hul/ois/jhove/module/Jpeg2000Module;/edu/harvard/hul/ois/jhove/module/Jpeg2000ModulegetNCodestreamHeaders()IsetNCodestreams(I)V9(I)Ledu/harvard/hul/ois/jhove/module/jpeg2000/Codestream; _boxHeader5Ledu/harvard/hul/ois/jhove/module/jpeg2000/BoxHeader; getDataLength()J_dstrmLjava/io/DataInputStream;M(Ledu/harvard/hul/ois/jhove/module/Jpeg2000Module;Ljava/io/DataInputStream;)VhasNextnext()Ljava/lang/Object;&edu/harvard/hul/ois/jhove/PropertyTypeSTRING(Ledu/harvard/hul/ois/jhove/PropertyType;getLabelO(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ljava/lang/Object;)V4edu/harvard/hul/ois/jhove/module/jpeg2000/CodestreamsetLabelProperty'(Ledu/harvard/hul/ois/jhove/Property;)V_repInfo#Ledu/harvard/hul/ois/jhove/RepInfo; getFilePos(Ljava/lang/String;J)V!edu/harvard/hul/ois/jhove/RepInfo setMessage&(Ledu/harvard/hul/ois/jhove/Message;)V setWellFormed(Z)VskipBoxfinalizeBytesRead!*+,-./*+,01/L* ****`<*** * = Y**N6:**:D<6* Y*:q96*Y* !*"#$% & I'?*(2 E345)+  6789/* :;/)jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/CodestreamRegBox.class0000644000707400001440000000462711510702106026357 0ustar garyusers2q , -. /01 234 5 6 78 9 :; < =>?@ ABCDEF 2G HI JK LMNOR(Ljava/io/RandomAccessFile;Ledu/harvard/hul/ois/jhove/module/jpeg2000/BoxHolder;)VCodereadBox()Z StackMapTableNP ExceptionsQgetSelfPropName()Ljava/lang/String; ! RS;edu/harvard/hul/ois/jhove/module/jpeg2000/ComposLayerHdrBox TU"edu/harvard/hul/ois/jhove/PropertyHorizontalGridSizeV WXjava/lang/Integer YZ [\] ^_ ` aVerticalGridSize bcd efCodestreamNumberHorizontalResolutiong hiVerticalResolutionHorizontalOffsetVerticalOffset Codestreams jXk lm nCodestreamRegistration opCodestream Registration Box:edu/harvard/hul/ois/jhove/module/jpeg2000/CodestreamRegBox0edu/harvard/hul/ois/jhove/module/jpeg2000/JP2Box%[Ledu/harvard/hul/ois/jhove/Property;java/io/IOException _parentBox2Ledu/harvard/hul/ois/jhove/module/jpeg2000/JP2Box;wrongBoxContext()V&edu/harvard/hul/ois/jhove/PropertyTypeINTEGER(Ledu/harvard/hul/ois/jhove/PropertyType;_module1Ledu/harvard/hul/ois/jhove/module/Jpeg2000Module;_dstrmLjava/io/DataInputStream;/edu/harvard/hul/ois/jhove/module/Jpeg2000ModulereadUnsignedShort(Ljava/io/DataInputStream;)I(I)VO(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ljava/lang/Object;)V _boxHeader5Ledu/harvard/hul/ois/jhove/module/jpeg2000/BoxHeader;3edu/harvard/hul/ois/jhove/module/jpeg2000/BoxHeader getDataLength()J$edu/harvard/hul/ois/jhove/ModuleBasereadUnsignedByteB(Ljava/io/DataInputStream;Ledu/harvard/hul/ois/jhove/ModuleBase;)IPROPERTY'edu/harvard/hul/ois/jhove/PropertyArityARRAY)Ledu/harvard/hul/ois/jhove/PropertyArity;x(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ledu/harvard/hul/ois/jhove/PropertyArity;Ljava/lang/Object;)VaddCodestreamReg'(Ledu/harvard/hul/ois/jhove/Property;)V! !"*+,#$" _* *L+YY* * S+YY* * S*d=l>:6:YY* * SYY* *  SYY* *  SYY* *  SYY* *  SYS1*Y%_&''()*+"jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/ColorGroupBox.class0000644000707400001440000000272011510702106025716 0ustar garyusers2N % &' ( ) * +, - . / 0 123 4 5 6 789R(Ljava/io/RandomAccessFile;Ledu/harvard/hul/ois/jhove/module/jpeg2000/BoxHolder;)VCodereadBox()Z StackMapTable9,2 Exceptions: addColorSpec'(Ledu/harvard/hul/ois/jhove/Property;)VgetSelfPropName()Ljava/lang/String;  ;<;edu/harvard/hul/ois/jhove/module/jpeg2000/ComposLayerHdrBox => ?> @A BC3edu/harvard/hul/ois/jhove/module/jpeg2000/BoxHeader DE FG H I JK0edu/harvard/hul/ois/jhove/module/jpeg2000/JP2Box6edu/harvard/hul/ois/jhove/module/jpeg2000/ColorSpecBox  L> M> !"Color Group Box7edu/harvard/hul/ois/jhove/module/jpeg2000/ColorGroupBoxjava/io/IOException _parentBox2Ledu/harvard/hul/ois/jhove/module/jpeg2000/JP2Box;wrongBoxContext()V initBytesRead _boxHeader5Ledu/harvard/hul/ois/jhove/module/jpeg2000/BoxHeader; getDataLength()J_module1Ledu/harvard/hul/ois/jhove/module/Jpeg2000Module;_dstrmLjava/io/DataInputStream;M(Ledu/harvard/hul/ois/jhove/module/Jpeg2000Module;Ljava/io/DataInputStream;)VhasNextnext()Ljava/lang/Object;skipBoxfinalizeBytesRead!*+,j* ***<Y* * M>:* .* : *! !" *+#$jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/ColorSpecBox.class0000644000707400001440000001016311510702106025514 0ustar garyusers2 IX HYZ[ H\ H] H^ _`a bcd ef gh i Hj Hk lm nop qr ns tuv ewx b y nz{ q| q} n~ n n q & n &u & e H H : n  _ n H H nR(Ljava/io/RandomAccessFile;Ledu/harvard/hul/ois/jhove/module/jpeg2000/BoxHolder;)VCodereadBox()Z StackMapTablec ExceptionsgetSelfPropName()Ljava/lang/String; JK 6edu/harvard/hul/ois/jhove/module/jpeg2000/JP2HeaderBox7edu/harvard/hul/ois/jhove/module/jpeg2000/ColorGroupBox  java/util/ArrayList J"edu/harvard/hul/ois/jhove/Property ColorSpec  J   Method   Precedence java/lang/Integer J Approx EnumCS java/util/HashSet J desc kTRCwtptcprtRestrictedICCProfile Monochrome Input ProfilerXYZgXYZbXYZrTRCgTRCbTRC*Three-Component Matrix-Based Input Profile &edu/harvard/hul/ois/jhove/ErrorMessage9Color spec box with method 2 has unrecognized ICC profile J Color Specification Box6edu/harvard/hul/ois/jhove/module/jpeg2000/ColorSpecBox0edu/harvard/hul/ois/jhove/module/jpeg2000/JP2Boxjava/util/Listjava/io/IOException _parentBox2Ledu/harvard/hul/ois/jhove/module/jpeg2000/JP2Box;wrongBoxContext()V initBytesRead _boxHeader5Ledu/harvard/hul/ois/jhove/module/jpeg2000/BoxHeader;3edu/harvard/hul/ois/jhove/module/jpeg2000/BoxHeader getDataLength()J(I)V&edu/harvard/hul/ois/jhove/PropertyTypePROPERTY(Ledu/harvard/hul/ois/jhove/PropertyType;'edu/harvard/hul/ois/jhove/PropertyArityLIST)Ledu/harvard/hul/ois/jhove/PropertyArity;x(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ledu/harvard/hul/ois/jhove/PropertyArity;Ljava/lang/Object;)V_dstrmLjava/io/DataInputStream;_module1Ledu/harvard/hul/ois/jhove/module/Jpeg2000Module;$edu/harvard/hul/ois/jhove/ModuleBasereadUnsignedByteB(Ljava/io/DataInputStream;Ledu/harvard/hul/ois/jhove/ModuleBase;)I/edu/harvard/hul/ois/jhove/module/Jpeg2000ModulesetJP2Compliant(Z)V4edu/harvard/hul/ois/jhove/module/jpeg2000/JP2Strings methodStr[Ljava/lang/String;addIntegerPropertyL(Ljava/lang/String;I[Ljava/lang/String;)Ledu/harvard/hul/ois/jhove/Property;add(Ljava/lang/Object;)ZINTEGERO(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ljava/lang/Object;)VsetJPXCompliant approxStr approxIdx[IN(Ljava/lang/String;I[Ljava/lang/String;[I)Ledu/harvard/hul/ois/jhove/Property;readUnsignedInt(Ljava/io/DataInputStream;)J skipBytesC(Ljava/io/DataInputStream;ILedu/harvard/hul/ois/jhove/ModuleBase;)I enumCSStr read4Chars-(Ljava/io/DataInputStream;)Ljava/lang/String;containsSTRING_repInfo#Ledu/harvard/hul/ois/jhove/RepInfo;filePosJ(Ljava/lang/String;J)V!edu/harvard/hul/ois/jhove/RepInfo setMessage&(Ledu/harvard/hul/ois/jhove/Message;)VsetValid addColorSpec'(Ledu/harvard/hul/ois/jhove/Property;)V getLength getFilePosstartBytesReadfinalizeBytesReadsetColorSpecSeen!HIJKL*+,MNL ** ***< Y M Y ,N**6 *,*W**6, YYW**6)*, YYW#*,* !WA**"7**d*#W*$%: , W@2***#W**"7&Y': 6  , **()W***#W  *+9 ,+/ -+% .+, Y/01W *+k 2+a 3+W 4+M 5+C 6+9 7+/ -+% .+, Y/08W*9:Y;*<=>*9? ***-@**-A*B #***C*Dee*#W*E*FO5APQRuC1S1?q+TUVWLGjhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/CompOptionsBox.class0000644000707400001440000000242211510702106026074 0ustar garyusers2L    ! " #$ % & ' () * + (, - ./0R(Ljava/io/RandomAccessFile;Ledu/harvard/hul/ois/jhove/module/jpeg2000/BoxHolder;)VCodereadBox()Z StackMapTable Exceptions1  238edu/harvard/hul/ois/jhove/module/jpeg2000/CompositionBox 45 65 789 :; <5 => ?@A BC DE FE GH IJ K58edu/harvard/hul/ois/jhove/module/jpeg2000/CompOptionsBox0edu/harvard/hul/ois/jhove/module/jpeg2000/JP2Boxjava/io/IOException _parentBox2Ledu/harvard/hul/ois/jhove/module/jpeg2000/JP2Box;wrongBoxContext()V initBytesRead _boxHeader5Ledu/harvard/hul/ois/jhove/module/jpeg2000/BoxHeader;3edu/harvard/hul/ois/jhove/module/jpeg2000/BoxHeader getDataLength()J wrongBoxSize_module1Ledu/harvard/hul/ois/jhove/module/Jpeg2000Module;_dstrmLjava/io/DataInputStream;/edu/harvard/hul/ois/jhove/module/Jpeg2000ModulereadUnsignedInt(Ljava/io/DataInputStream;)J setHeight(J)VsetWidthreadUnsignedShort(Ljava/io/DataInputStream;)IsetLoop(I)VfinalizeBytesRead!*+,yc* *** * *L+* * +* * +* * *jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/ComponentMapBox.class0000644000707400001440000000544111510702106026226 0ustar garyusers2 #2 "345 "6 "7 "8 9:; "< => "? =@A BCD E F GHI JK =LMN BO PQ RS T UV =W "XYZ[R(Ljava/io/RandomAccessFile;Ledu/harvard/hul/ois/jhove/module/jpeg2000/BoxHolder;)VCodereadBox()Z StackMapTableZ\]; Exceptions^getSelfPropName()Ljava/lang/String; $% _`6edu/harvard/hul/ois/jhove/module/jpeg2000/JP2HeaderBox=edu/harvard/hul/ois/jhove/module/jpeg2000/CodestreamHeaderBox ab cb def gh"edu/harvard/hul/ois/jhove/Property ijk lm no pqComponentIndexr stjava/lang/Integer $u $vw xyMTypz {| }~PaletteComponent Component t $ComponentMapping  bComponent Mapping Box9edu/harvard/hul/ois/jhove/module/jpeg2000/ComponentMapBox0edu/harvard/hul/ois/jhove/module/jpeg2000/JP2Box%[Ledu/harvard/hul/ois/jhove/Property;edu/harvard/hul/ois/jhove/Appjava/io/IOException _parentBox2Ledu/harvard/hul/ois/jhove/module/jpeg2000/JP2Box;wrongBoxContext()V initBytesRead _boxHeader5Ledu/harvard/hul/ois/jhove/module/jpeg2000/BoxHeader;3edu/harvard/hul/ois/jhove/module/jpeg2000/BoxHeader getDataLength()J_module1Ledu/harvard/hul/ois/jhove/module/Jpeg2000Module;/edu/harvard/hul/ois/jhove/module/Jpeg2000ModulegetApp!()Ledu/harvard/hul/ois/jhove/App;_dstrmLjava/io/DataInputStream;readUnsignedShort(Ljava/io/DataInputStream;)I&edu/harvard/hul/ois/jhove/PropertyTypeINTEGER(Ledu/harvard/hul/ois/jhove/PropertyType;(I)VO(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ljava/lang/Object;)V$edu/harvard/hul/ois/jhove/ModuleBasereadUnsignedByteB(Ljava/io/DataInputStream;Ledu/harvard/hul/ois/jhove/ModuleBase;)I4edu/harvard/hul/ois/jhove/module/jpeg2000/JP2StringsmtypStr[Ljava/lang/String;addIntegerPropertyL(Ljava/lang/String;I[Ljava/lang/String;)Ledu/harvard/hul/ois/jhove/Property;PROPERTY'edu/harvard/hul/ois/jhove/PropertyArityARRAY)Ledu/harvard/hul/ois/jhove/PropertyArity;x(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ledu/harvard/hul/ois/jhove/PropertyArity;Ljava/lang/Object;)V getCodestream8()Ledu/harvard/hul/ois/jhove/module/jpeg2000/Codestream;4edu/harvard/hul/ois/jhove/module/jpeg2000/CodestreamsetCompMapProperty'(Ledu/harvard/hul/ois/jhove/Property;)V addPropertyfinalizeBytesRead!"#$%&*+,'(&A ** ***<l= N* :6 :* * 6 YYS* * 6* S* * 6  YY S- YSq Y-:**: * * ) !*+,1-./01&!jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/ComposLayerHdrBox.class0000644000707400001440000000670311510702106026523 0ustar garyusers2 N 4O 4P 4Q 4RS T 4U 4V WX 4Y 4Z[\]^_`ab cde fg h i 4j k 4lmn 4o pq r st su 4vw &x yz y{| f} ~  4 4 4 plabel$Ledu/harvard/hul/ois/jhove/Property; opacityPropchannelDefPropcodestreamRegProp colorSpecsLjava/util/List;R(Ljava/io/RandomAccessFile;Ledu/harvard/hul/ois/jhove/module/jpeg2000/BoxHolder;)VCodereadBox()Z StackMapTable[ Exceptions addColorSpec'(Ledu/harvard/hul/ois/jhove/Property;)V addOpacity addChannelDefaddCodestreamReggetSelfPropName()Ljava/lang/String; <= java/util/LinkedList < :;  @ 0edu/harvard/hul/ois/jhove/module/jpeg2000/JP2Box7edu/harvard/hul/ois/jhove/module/jpeg2000/ColorGroupBox4edu/harvard/hul/ois/jhove/module/jpeg2000/OpacityBox7edu/harvard/hul/ois/jhove/module/jpeg2000/ChannelDefBox:edu/harvard/hul/ois/jhove/module/jpeg2000/CodestreamRegBox0edu/harvard/hul/ois/jhove/module/jpeg2000/IPRBox7edu/harvard/hul/ois/jhove/module/jpeg2000/ResolutionBox2edu/harvard/hul/ois/jhove/module/jpeg2000/LabelBox ?@"edu/harvard/hul/ois/jhove/PropertyLabel M < 56 &edu/harvard/hul/ois/jhove/ErrorMessageOCompositing Layer Header may not have both Opacity and Channel Definition Boxes  < java/util/ArrayList < @ ColorSpecs  < 76 86 96CompositeLayerHeader HCompositing Layer Header Box;edu/harvard/hul/ois/jhove/module/jpeg2000/ComposLayerHdrBoxjava/util/Listjava/io/IOException _parentBox2Ledu/harvard/hul/ois/jhove/module/jpeg2000/JP2Box;wrongBoxContext()V initBytesReadhasBoxesZ _boxHeader5Ledu/harvard/hul/ois/jhove/module/jpeg2000/BoxHeader;3edu/harvard/hul/ois/jhove/module/jpeg2000/BoxHeader getDataLength()JhasNextnext()Ljava/lang/Object;&edu/harvard/hul/ois/jhove/PropertyTypeSTRING(Ledu/harvard/hul/ois/jhove/PropertyType;getLabelO(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ljava/lang/Object;)VskipBox_repInfo#Ledu/harvard/hul/ois/jhove/RepInfo;_module1Ledu/harvard/hul/ois/jhove/module/Jpeg2000Module;/edu/harvard/hul/ois/jhove/module/Jpeg2000Module getFilePos(Ljava/lang/String;J)V!edu/harvard/hul/ois/jhove/RepInfo setMessage&(Ledu/harvard/hul/ois/jhove/Message;)VsetValid(Z)VfinalizeBytesRead(I)Vadd(Ljava/lang/Object;)ZisEmptyPROPERTY'edu/harvard/hul/ois/jhove/PropertyArityLIST)Ledu/harvard/hul/ois/jhove/PropertyArity;x(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ledu/harvard/hul/ois/jhove/PropertyArity;Ljava/lang/Object;)VaddComposLayer!4 56768696:;<=>*+,?@>* ****Y* <=N66* * N-|---&---- -D-- 6 -6-*Y-{-t'"*Y* !"#*$*%&Y':**(W*)Y*+,*-(W*.*.(W*/*/(W*0*0(W* Y1+,-2A& &BC0 ( D&EFGH> *+(WIH>*+.JH>*+/KH>*+0LM>3jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/CompositionBox.class0000644000707400001440000000603411510702106026130 0ustar garyusers2 O 6P 6Q 6R 6ST U 6V 6W 6X 6YZ[ 6\]^ 6_ `a b cd ce 6f gh i jk l 6m 6no pqr stu 6v #w x yz{ 6|} s~ 6 ,p y s  `instSetsLjava/util/List;_heightJ_width_loopIR(Ljava/io/RandomAccessFile;Ledu/harvard/hul/ois/jhove/module/jpeg2000/BoxHolder;)VCodereadBox()Z StackMapTableZ Exceptions addInstSet'(Ledu/harvard/hul/ois/jhove/Property;)V setHeight(J)VsetWidthsetLoop(I)V >? java/util/LinkedList > 78 B 0edu/harvard/hul/ois/jhove/module/jpeg2000/JP2Box8edu/harvard/hul/ois/jhove/module/jpeg2000/CompOptionsBox &edu/harvard/hul/ois/jhove/ErrorMessage  AB;edu/harvard/hul/ois/jhove/module/jpeg2000/InstructionSetBox java/util/ArrayList >N"edu/harvard/hul/ois/jhove/PropertyWidth java/lang/Long ;: >K > Height 9:Loop java/lang/Integer <= BInstructionSets  > Composition I8edu/harvard/hul/ois/jhove/module/jpeg2000/CompositionBoxjava/util/Listjava/io/IOException _parentBox2Ledu/harvard/hul/ois/jhove/module/jpeg2000/JP2Box;wrongBoxContext()V initBytesReadhasBoxesZhasNextemptyBoxnext()Ljava/lang/Object;_repInfo#Ledu/harvard/hul/ois/jhove/RepInfo;_module1Ledu/harvard/hul/ois/jhove/module/Jpeg2000Module;/edu/harvard/hul/ois/jhove/module/Jpeg2000Module getFilePos()J(Ljava/lang/String;J)V!edu/harvard/hul/ois/jhove/RepInfo setMessage&(Ledu/harvard/hul/ois/jhove/Message;)V setWellFormed(Z)V _boxHeader5Ledu/harvard/hul/ois/jhove/module/jpeg2000/BoxHeader;3edu/harvard/hul/ois/jhove/module/jpeg2000/BoxHeader getDataLength getLengthskipBoxsuperboxUnderrunfinalizeBytesRead&edu/harvard/hul/ois/jhove/PropertyTypeLONG(Ledu/harvard/hul/ois/jhove/PropertyType;O(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ljava/lang/Object;)Vadd(Ljava/lang/Object;)ZINTEGERisEmptyPROPERTY'edu/harvard/hul/ois/jhove/PropertyArityLIST)Ledu/harvard/hul/ois/jhove/PropertyArity;x(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ledu/harvard/hul/ois/jhove/PropertyArity;Ljava/lang/Object;)V addProperty!6 789:;:<=>?@*+,AB@ Y* ****Y* * * L+ $*Y***+eA+* )* L++ ++ **Y: Y!"#Y*$%&'W Y("#Y*)%&'W Y*+,Y*-.&'W*/ Y012*3'W* Y41235C /D EFGHI@ *+'WJK@*)LK@*$MN@*-jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/ContCodestreamBox.class0000644000707400001440000000354111510702106026537 0ustar garyusers2` $ % & '( )*+ ', - ./ '0 '1 '2 3 45 467 8 9 : ;<=>R(Ljava/io/RandomAccessFile;Ledu/harvard/hul/ois/jhove/module/jpeg2000/BoxHolder;)VCodereadBox()Z StackMapTable? Exceptions@getSelfPropName()Ljava/lang/String;  AB CDE F GH&edu/harvard/hul/ois/jhove/ErrorMessage+Other boxes may not occur before JP2 Header IJ KL MN OP QR ST UVW XJ YJ8edu/harvard/hul/ois/jhove/module/jpeg2000/ContCodestream Z[ \ ]^ _BContiguous Codestream Box;edu/harvard/hul/ois/jhove/module/jpeg2000/ContCodestreamBox0edu/harvard/hul/ois/jhove/module/jpeg2000/JP2Box4edu/harvard/hul/ois/jhove/module/jpeg2000/Codestreamjava/io/IOException initBytesRead()V_module1Ledu/harvard/hul/ois/jhove/module/Jpeg2000Module;/edu/harvard/hul/ois/jhove/module/Jpeg2000Module isJP2HdrSeen_repInfo#Ledu/harvard/hul/ois/jhove/RepInfo; getFilePos()J(Ljava/lang/String;J)V!edu/harvard/hul/ois/jhove/RepInfo setMessage&(Ledu/harvard/hul/ois/jhove/Message;)VgetNCodestreams()IsetNCodestreams(I)V getCodestream9(I)Ledu/harvard/hul/ois/jhove/module/jpeg2000/Codestream; _boxHeader5Ledu/harvard/hul/ois/jhove/module/jpeg2000/BoxHeader;3edu/harvard/hul/ois/jhove/module/jpeg2000/BoxHeader getLength getDataLength_dstrmLjava/io/DataInputStream;N(Ledu/harvard/hul/ois/jhove/module/Jpeg2000Module;Ljava/io/DataInputStream;J)VreadCodestream\(Ledu/harvard/hul/ois/jhove/module/jpeg2000/Codestream;Ledu/harvard/hul/ois/jhove/RepInfo;)ZfinalizeBytesRead!*+,***Y* * `<* * M*  *BY**!:,*6* '*F !"#jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/CrossRefBox.class0000644000707400001440000000451211510702106025352 0ustar garyusers2 6 &789: &; &< &= &> &? @A &B &C &DEF &GHI @J K LM LN O P @Q RSTU &V W X &Y &Z[\ fragStreamLjava/io/DataInputStream;R(Ljava/io/RandomAccessFile;Ledu/harvard/hul/ois/jhove/module/jpeg2000/BoxHolder;)VCodereadBox()Z StackMapTableE Exceptions]getCrossRefStream()Ljava/io/DataInputStream;getSelfPropName()Ljava/lang/String; )* ^_=edu/harvard/hul/ois/jhove/module/jpeg2000/CodestreamHeaderBox;edu/harvard/hul/ois/jhove/module/jpeg2000/ComposLayerHdrBox8edu/harvard/hul/ois/jhove/module/jpeg2000/AssociationBox `a ba cd ef g(h ij kl m- no0edu/harvard/hul/ois/jhove/module/jpeg2000/JP2Box9edu/harvard/hul/ois/jhove/module/jpeg2000/FragmentListBox pq&edu/harvard/hul/ois/jhove/ErrorMessage6Cross Reference Box does not contain Fragment List Box rs )tu vw xy ,- z{ |}~ java/io/DataInputStream=edu/harvard/hul/ois/jhove/module/jpeg2000/FragmentInputStream ) ) '( aCross Reference Box5edu/harvard/hul/ois/jhove/module/jpeg2000/CrossRefBoxjava/io/IOException _parentBox2Ledu/harvard/hul/ois/jhove/module/jpeg2000/JP2Box;wrongBoxContext()V initBytesReadhasBoxesZ_module1Ledu/harvard/hul/ois/jhove/module/Jpeg2000Module;_dstrm/edu/harvard/hul/ois/jhove/module/Jpeg2000Module read4Chars-(Ljava/io/DataInputStream;)Ljava/lang/String; bytesLeftJhasNextnext()Ljava/lang/Object;_repInfo#Ledu/harvard/hul/ois/jhove/RepInfo; getFilePos()J(Ljava/lang/String;J)V!edu/harvard/hul/ois/jhove/RepInfo setMessage&(Ledu/harvard/hul/ois/jhove/Message;)V setWellFormed(Z)VgetFragmentList()Ljava/util/List;getBase'()Ledu/harvard/hul/ois/jhove/JhoveBase;#edu/harvard/hul/ois/jhove/JhoveBase getBufferSize()I_rafLjava/io/RandomAccessFile;.(Ljava/util/List;Ljava/io/RandomAccessFile;I)V(Ljava/io/InputStream;)VfinalizeBytesRead!&'()*+*+,,-+*** **** * W*Y  e L* *L+$*Y* *+W+M* N-6*YY,* !"#*$. $1/'0123+*#45+%jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/DDResolutionBox.class0000644000707400001440000000435611510702106026205 0ustar garyusers2p + , -. /0 123 456 7 8 9: 1 ; <=>? @AB 4C DE FGH DI 9J KLMNR(Ljava/io/RandomAccessFile;Ledu/harvard/hul/ois/jhove/module/jpeg2000/BoxHolder;)VCodereadBox()Z StackMapTable ExceptionsOgetSelfPropName()Ljava/lang/String; !" PQ RS7edu/harvard/hul/ois/jhove/module/jpeg2000/ResolutionBox TQjava/util/ArrayList !U"edu/harvard/hul/ois/jhove/Property NumeratorV WXjava/lang/Integer YZ [\] ^_ !`a bc DenominatorExponentd efHorizResolution gXh ij !kVertResolutionDefaultDisplayResolution lj mn oQDefault Display Resolution Box9edu/harvard/hul/ois/jhove/module/jpeg2000/DDResolutionBox0edu/harvard/hul/ois/jhove/module/jpeg2000/JP2Boxjava/io/IOException initBytesRead()V _parentBox2Ledu/harvard/hul/ois/jhove/module/jpeg2000/JP2Box;wrongBoxContext(I)V&edu/harvard/hul/ois/jhove/PropertyTypeINTEGER(Ledu/harvard/hul/ois/jhove/PropertyType;_module1Ledu/harvard/hul/ois/jhove/module/Jpeg2000Module;_dstrmLjava/io/DataInputStream;/edu/harvard/hul/ois/jhove/module/Jpeg2000ModulereadUnsignedShort(Ljava/io/DataInputStream;)IO(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ljava/lang/Object;)Vjava/util/Listadd(Ljava/lang/Object;)Z$edu/harvard/hul/ois/jhove/ModuleBasereadSignedByteB(Ljava/io/DataInputStream;Ledu/harvard/hul/ois/jhove/ModuleBase;)IPROPERTY'edu/harvard/hul/ois/jhove/PropertyArityLIST)Ledu/harvard/hul/ois/jhove/PropertyArity;x(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ledu/harvard/hul/ois/jhove/PropertyArity;Ljava/lang/Object;)VARRAY addProperty'(Ledu/harvard/hul/ois/jhove/Property;)VfinalizeBytesRead! !"#*+,$%#u `** **LYMYN,Y Y* * W,Y Y* * W-Y Y* * W-Y Y* * W,Y Y* * W-Y Y* * WY-:Y,::SS* Y*&'()*#jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/DataEntryURLBox.class0000644000707400001440000000402411510702106026100 0ustar garyusers2 / 0 1 2 34 567 89 : ;< ;=> ?@ A BC BD BE FG FH IJK L MN O PQRSR(Ljava/io/RandomAccessFile;Ledu/harvard/hul/ois/jhove/module/jpeg2000/BoxHolder;)VCodereadBox()Z StackMapTableTUVJ ExceptionsWgetSelfPropName()Ljava/lang/String; !" XY Z[ \]^ _` ab&edu/harvard/hul/ois/jhove/ErrorMessage8Unrecognized version or flag value in Data Entry URL Boxc de !fg hi jkjava/util/ArrayList !ljava/lang/Byte !mT no pq rsU t% uv wxjava/lang/StringUTF-8 !y z{5edu/harvard/hul/ois/jhove/module/jpeg2000/UUIDInfoBox |} ~YData Entry URL Box9edu/harvard/hul/ois/jhove/module/jpeg2000/DataEntryURLBox0edu/harvard/hul/ois/jhove/module/jpeg2000/JP2Boxjava/util/Listjava/util/ListIterator[Bjava/io/IOException initBytesRead()V_dstrmLjava/io/DataInputStream;_module1Ledu/harvard/hul/ois/jhove/module/Jpeg2000Module;$edu/harvard/hul/ois/jhove/ModuleBasereadUnsignedByteB(Ljava/io/DataInputStream;Ledu/harvard/hul/ois/jhove/ModuleBase;)I_repInfo#Ledu/harvard/hul/ois/jhove/RepInfo;/edu/harvard/hul/ois/jhove/module/Jpeg2000Module getFilePos()J(Ljava/lang/String;J)V!edu/harvard/hul/ois/jhove/RepInfo setMessage&(Ledu/harvard/hul/ois/jhove/Message;)VsetValid(Z)V(I)V(B)Vadd(Ljava/lang/Object;)Z listIterator()Ljava/util/ListIterator;size()IhasNextnext()Ljava/lang/Object; byteValue()B([BLjava/lang/String;)V _parentBox2Ledu/harvard/hul/ois/jhove/module/jpeg2000/JP2Box;setURL(Ljava/lang/String;)VfinalizeBytesRead! !"#*+,$%# *<;**=%*Y* * ƻ YL**=+YW+M+N6,-,TY-:**:*&( 6 '()%*+,-.#jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/DefaultBox.class0000644000707400001440000000073411510702106025212 0ustar garyusers2   (Ljava/io/RandomAccessFile;)VCodeR(Ljava/io/RandomAccessFile;Ledu/harvard/hul/ois/jhove/module/jpeg2000/BoxHolder;)VreadBox()Z Exceptions   4edu/harvard/hul/ois/jhove/module/jpeg2000/DefaultBox0edu/harvard/hul/ois/jhove/module/jpeg2000/JP2Boxjava/io/IOExceptionskipBox()V!*+ *+, *  jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/DesiredReproBox.class0000644000707400001440000000224111510702106026210 0ustar garyusers2@    !" # $ % & '() * + ,-.R(Ljava/io/RandomAccessFile;Ledu/harvard/hul/ois/jhove/module/jpeg2000/BoxHolder;)VCodereadBox()Z StackMapTable"( Exceptions/getSelfPropName()Ljava/lang/String;  01 23 453edu/harvard/hul/ois/jhove/module/jpeg2000/BoxHeader 67 89 : ; <=0edu/harvard/hul/ois/jhove/module/jpeg2000/JP2Box1edu/harvard/hul/ois/jhove/module/jpeg2000/GTSOBox  >1 ?1Desired Reproductions Box9edu/harvard/hul/ois/jhove/module/jpeg2000/DesiredReproBoxjava/io/IOException initBytesRead()V _boxHeader5Ledu/harvard/hul/ois/jhove/module/jpeg2000/BoxHeader; getDataLength()J_module1Ledu/harvard/hul/ois/jhove/module/Jpeg2000Module;_dstrmLjava/io/DataInputStream;M(Ledu/harvard/hul/ois/jhove/module/Jpeg2000Module;Ljava/io/DataInputStream;)VhasNextnext()Ljava/lang/Object;skipBoxfinalizeBytesRead! *+,sR**<Y**MN* )* N-- - -*jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/DigSignatureBox.class0000644000707400001440000000762611510702106026222 0ustar garyusers2 >Q =R =S TUV W =X YZ [\ =] ^_ =`ab Yc d ef egh ij Yk lmno ip Yqrs tuv w xy ^z ={ |}~ t = ' t  Y =  | | R(Ljava/io/RandomAccessFile;Ledu/harvard/hul/ois/jhove/module/jpeg2000/BoxHolder;)VCodereadBox()Z StackMapTable ExceptionsgetSelfPropName()Ljava/lang/String; isSigValid(IJJ[B)Z ?@  java/util/ArrayList ?   C  &edu/harvard/hul/ois/jhove/ErrorMessageUnknown digital signature type ? Type  &Unknown digital signature pointer type PointerType "edu/harvard/hul/ois/jhove/PropertyOffset java/lang/Long ? ?Length  Valid java/lang/Boolean NO ?&java/security/NoSuchAlgorithmExceptionjava/io/IOExceptionDigitalSignature  ? Digital Signature BoxMD5 SHA-1 9edu/harvard/hul/ois/jhove/module/jpeg2000/DigSignatureBox0edu/harvard/hul/ois/jhove/module/jpeg2000/JP2Boxjava/util/List#edu/harvard/hul/ois/jhove/JhoveBase[Bjava/security/MessageDigest initBytesRead()V _boxHeader5Ledu/harvard/hul/ois/jhove/module/jpeg2000/BoxHeader;3edu/harvard/hul/ois/jhove/module/jpeg2000/BoxHeader getDataLength()J(I)V_module1Ledu/harvard/hul/ois/jhove/module/Jpeg2000Module;/edu/harvard/hul/ois/jhove/module/Jpeg2000ModulegetBase'()Ledu/harvard/hul/ois/jhove/JhoveBase;getShowRawFlag_dstrmLjava/io/DataInputStream;$edu/harvard/hul/ois/jhove/ModuleBasereadUnsignedByteB(Ljava/io/DataInputStream;Ledu/harvard/hul/ois/jhove/ModuleBase;)I_repInfo#Ledu/harvard/hul/ois/jhove/RepInfo; getFilePos(Ljava/lang/String;J)V!edu/harvard/hul/ois/jhove/RepInfo setMessage&(Ledu/harvard/hul/ois/jhove/Message;)VsetValid(Z)V4edu/harvard/hul/ois/jhove/module/jpeg2000/JP2StringsdigitalSigTypeStr[Ljava/lang/String;addIntegerPropertyL(Ljava/lang/String;I[Ljava/lang/String;)Ledu/harvard/hul/ois/jhove/Property;add(Ljava/lang/Object;)ZdigitalSigPtrTypeStrreadSignedLong(Ljava/io/DataInputStream;)J&edu/harvard/hul/ois/jhove/PropertyTypeLONG(Ledu/harvard/hul/ois/jhove/PropertyType;(J)VO(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ljava/lang/Object;)V readByteBufD(Ljava/io/DataInputStream;[BLedu/harvard/hul/ois/jhove/ModuleBase;)I_rafLjava/io/RandomAccessFile;java/io/RandomAccessFilelengthBOOLEANPROPERTY'edu/harvard/hul/ois/jhove/PropertyArityLIST)Ledu/harvard/hul/ois/jhove/PropertyArity;x(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ledu/harvard/hul/ois/jhove/PropertyArity;Ljava/lang/Object;)VaddDigitalSignatureProp'(Ledu/harvard/hul/ois/jhove/Property;)VfinalizeBytesRead getInstance1(Ljava/lang/String;)Ljava/security/MessageDigest;seekread([BII)Iupdate([BII)Vdigest()[B!=>?@A*+,BCA **<Y M*N- 6* * 6"* Y** ,*W* * 6"* Y** ,*W 7 7 X** 7** 7 ,YY W,Y!Y  W: *  *"W D 7*#$7 ,Y%&'Y*  () W : : *Y,-.,/0*15lo*5lt+D.WEFGFxHhIDJK+LMA2NOA  34: 54:*# 67 96:  1 6 *#  :6   ;<:  6    3 3 :|+}++D; PAHAHEHPJK*+jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/FileTypeBox.class0000644000707400001440000000631011510702106025343 0ustar garyusers2 1D 0E 0F GHIJ KL M GNO PQ GRS GT GUV KWX Y 0Z [\ 0]^_ G` a bc bde fg f Ph ij k blm no 0pq rs t Puv w xyz{(Ljava/io/RandomAccessFile;)VCodeO(Ljava/io/RandomAccessFile;Ledu/harvard/hul/ois/jhove/module/jpeg2000/JP2Box;)VreadBox()Z StackMapTable|z}g~ Exceptions hexifyString&(Ljava/lang/String;)Ljava/lang/String;getSelfPropName()Ljava/lang/String; 23  "edu/harvard/hul/ois/jhove/PropertyBrand 2 jp2 | jpx  MinorVersion java/lang/Long 2  &edu/harvard/hul/ois/jhove/ErrorMessage)Empty compatibility list in File Type Box 2 java/util/ArrayList 2java/lang/StringBuffer  ;Non-ASCII characters in compatibility item of File Type Box} @A Compatibility 2 0X C File Type Box5edu/harvard/hul/ois/jhove/module/jpeg2000/FileTypeBox0edu/harvard/hul/ois/jhove/module/jpeg2000/JP2Boxjava/lang/Stringjava/util/List[Cjava/io/IOException_module1Ledu/harvard/hul/ois/jhove/module/Jpeg2000Module;_dstrmLjava/io/DataInputStream;/edu/harvard/hul/ois/jhove/module/Jpeg2000Module read4Chars-(Ljava/io/DataInputStream;)Ljava/lang/String;&edu/harvard/hul/ois/jhove/PropertyTypeSTRING(Ledu/harvard/hul/ois/jhove/PropertyType;O(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ljava/lang/Object;)V addProperty'(Ledu/harvard/hul/ois/jhove/Property;)Vequals(Ljava/lang/Object;)ZsetJP2Compliant(Z)VsetJPXCompliantreadUnsignedInt(Ljava/io/DataInputStream;)JLONG(J)V _boxHeader5Ledu/harvard/hul/ois/jhove/module/jpeg2000/BoxHeader;3edu/harvard/hul/ois/jhove/module/jpeg2000/BoxHeader getLength()J_repInfo#Ledu/harvard/hul/ois/jhove/RepInfo; getFilePos(Ljava/lang/String;J)V!edu/harvard/hul/ois/jhove/RepInfo setMessage&(Ledu/harvard/hul/ois/jhove/Message;)V setWellFormed(I)V toCharArray()[Cjava/lang/Integer toHexString(I)Ljava/lang/String;append,(Ljava/lang/String;)Ljava/lang/StringBuffer;setValidadd'edu/harvard/hul/ois/jhove/PropertyArityLIST)Ledu/harvard/hul/ois/jhove/PropertyArity;x(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ledu/harvard/hul/ois/jhove/PropertyArity;Ljava/lang/Object;)Vlength()I(C)Ljava/lang/StringBuffer;toString!01234*+254*+674 r**L*Y+  + *  + ***A*YY  *dl6$*Y**Y:6Y :6**:  !: 6 6   Q  46  "#W  -6 %6*$*Y%*   &W* '&Wf*Y()* 8U 19\:9;< :9;<9=%) >?@A4xQY++h` M,,#W+!N6-)-4":+ ,0-W,#W,.8<=9 BC4/jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/FragmentListBox.class0000644000707400001440000000402311510702106026220 0ustar garyusers2p - . /0 123 /4 5 67 8 9 :; < /= :>? 6@A B C /D /EFG 5 HI JKLM _fragmentListLjava/util/List;R(Ljava/io/RandomAccessFile;Ledu/harvard/hul/ois/jhove/module/jpeg2000/BoxHolder;)VCodereadBox()Z StackMapTable ExceptionsNgetFragmentList()Ljava/util/List;getSelfPropName()Ljava/lang/String; !" OPQ R% ST&edu/harvard/hul/ois/jhove/ErrorMessage+Other boxes may not occur before JP2 Header UV !WX YZ [\ ]^_ `V ab cd eV!Fragment Table has invalid length fgjava/util/ArrayList !h  ij kj%edu/harvard/hul/ois/jhove/InfoMessage$Document references an external filel mn o\Fragment List Box9edu/harvard/hul/ois/jhove/module/jpeg2000/FragmentListBox0edu/harvard/hul/ois/jhove/module/jpeg2000/JP2Boxjava/io/IOException_module1Ledu/harvard/hul/ois/jhove/module/Jpeg2000Module;/edu/harvard/hul/ois/jhove/module/Jpeg2000Module isJP2HdrSeen_repInfo#Ledu/harvard/hul/ois/jhove/RepInfo; getFilePos()J(Ljava/lang/String;J)V!edu/harvard/hul/ois/jhove/RepInfo setMessage&(Ledu/harvard/hul/ois/jhove/Message;)V initBytesRead()V _boxHeader5Ledu/harvard/hul/ois/jhove/module/jpeg2000/BoxHeader;3edu/harvard/hul/ois/jhove/module/jpeg2000/BoxHeader getDataLength_dstrmLjava/io/DataInputStream;readUnsignedShort(Ljava/io/DataInputStream;)I getLength setWellFormed(Z)V(I)VreadSignedLong(Ljava/io/DataInputStream;)JreadUnsignedIntjava/util/Listadd(Ljava/lang/Object;)ZfinalizeBytesRead! !"#*+,$%#+ **Y* * * <** =*  .h`$*Y* **Y>x** 7** 7** 6"**Y* '*  :  P P* W*&#O O#'()*#*+,#jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/FragmentTableBox.class0000644000707400001440000000501111510702106026332 0ustar garyusers2 6 #7 #8 #9:; < = #> ?@ ABC #D EF G ?H ?I ?J #K LM LNO P #Q RST ?U V WX WY #Z[\R(Ljava/io/RandomAccessFile;Ledu/harvard/hul/ois/jhove/module/jpeg2000/BoxHolder;)VCodereadBox()Z StackMapTable:;\]^CF_ Exceptions`getSelfPropName()Ljava/lang/String; $% ab cd ef0edu/harvard/hul/ois/jhove/module/jpeg2000/JP2Box9edu/harvard/hul/ois/jhove/module/jpeg2000/FragmentListBox '( gh ijk lm^ no=edu/harvard/hul/ois/jhove/module/jpeg2000/FragmentInputStream pq $rjava/io/DataInputStream $s to uv wx yz{ |} ~}8edu/harvard/hul/ois/jhove/module/jpeg2000/ContCodestream $ &edu/harvard/hul/ois/jhove/ErrorMessageInvalid fragment table } $ bFragment Table Box:edu/harvard/hul/ois/jhove/module/jpeg2000/FragmentTableBoxjava/util/List#edu/harvard/hul/ois/jhove/JhoveBase4edu/harvard/hul/ois/jhove/module/jpeg2000/Codestreamjava/io/IOException initBytesRead()VhasBoxesZnext()Ljava/lang/Object;getFragmentList()Ljava/util/List;_module1Ledu/harvard/hul/ois/jhove/module/Jpeg2000Module;/edu/harvard/hul/ois/jhove/module/Jpeg2000ModulegetBase'()Ledu/harvard/hul/ois/jhove/JhoveBase; getBufferSize()I_rafLjava/io/RandomAccessFile;.(Ljava/util/List;Ljava/io/RandomAccessFile;I)V(Ljava/io/InputStream;)VgetNCodestreamssetNCodestreams(I)V getCodestream9(I)Ledu/harvard/hul/ois/jhove/module/jpeg2000/Codestream; _boxHeader5Ledu/harvard/hul/ois/jhove/module/jpeg2000/BoxHeader;3edu/harvard/hul/ois/jhove/module/jpeg2000/BoxHeader getLength()J getDataLengthN(Ledu/harvard/hul/ois/jhove/module/Jpeg2000Module;Ljava/io/DataInputStream;J)V_repInfo#Ledu/harvard/hul/ois/jhove/RepInfo;readCodestream\(Ledu/harvard/hul/ois/jhove/module/jpeg2000/Codestream;Ledu/harvard/hul/ois/jhove/RepInfo;)Z getFilePos(Ljava/lang/String;J)V!edu/harvard/hul/ois/jhove/RepInfo setMessage&(Ledu/harvard/hul/ois/jhove/Message;)V setWellFormed(Z)VfinalizeBytesRead!#$%&*+,'(&9<***M,,,N--:* : 6 Y* :Y:* `6 *  *  : *  *7 Y*  :   *<$*Y* * *!)C*+e ,*+-./01F,* 2345&"jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/GTSOBox.class0000644000707400001440000000251311510702106024377 0ustar garyusers2I     ! "#$ % & '( ") *+ , *- ./0R(Ljava/io/RandomAccessFile;Ledu/harvard/hul/ois/jhove/module/jpeg2000/BoxHolder;)VCodereadBox()Z Exceptions1  23 456 78"edu/harvard/hul/ois/jhove/Property ProfileLength9 :;java/lang/Long < = >? GraphicsTechnologyStandardOutput @;A BC DE FG H31edu/harvard/hul/ois/jhove/module/jpeg2000/GTSOBox0edu/harvard/hul/ois/jhove/module/jpeg2000/JP2Boxjava/io/IOException initBytesRead()V _boxHeader5Ledu/harvard/hul/ois/jhove/module/jpeg2000/BoxHeader;3edu/harvard/hul/ois/jhove/module/jpeg2000/BoxHeader getDataLength()J&edu/harvard/hul/ois/jhove/PropertyTypeLONG(Ledu/harvard/hul/ois/jhove/PropertyType;(J)VO(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ljava/lang/Object;)V_module1Ledu/harvard/hul/ois/jhove/module/Jpeg2000Module;PROPERTY/edu/harvard/hul/ois/jhove/module/Jpeg2000Module addProperty'(Ledu/harvard/hul/ois/jhove/Property;)V_dstrmLjava/io/DataInputStream; skipBytesC(Ljava/io/DataInputStream;ILedu/harvard/hul/ois/jhove/ModuleBase;)IfinalizeBytesRead!*+,YM**@YY N* Y - * ** W*jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/IPRBox.class0000644000707400001440000000315611510702106024261 0ustar garyusers2O    ! " # $%&' () *+ , -. /012R(Ljava/io/RandomAccessFile;Ledu/harvard/hul/ois/jhove/module/jpeg2000/BoxHolder;)VCodereadBox()Z StackMapTable3 Exceptions4getSelfPropName()Ljava/lang/String; 5 67 89: ;< => ?@A BC"edu/harvard/hul/ois/jhove/PropertyIntellectualPropertyRightsD EFG HI JK LM N7 Intellectual Property Rights Box0edu/harvard/hul/ois/jhove/module/jpeg2000/IPRBox0edu/harvard/hul/ois/jhove/module/jpeg2000/JP2Box[Bjava/io/IOException(Ljava/io/RandomAccessFile;)V initBytesRead()V _boxHeader5Ledu/harvard/hul/ois/jhove/module/jpeg2000/BoxHeader;3edu/harvard/hul/ois/jhove/module/jpeg2000/BoxHeader getDataLength()J_dstrmLjava/io/DataInputStream;_module1Ledu/harvard/hul/ois/jhove/module/Jpeg2000Module;$edu/harvard/hul/ois/jhove/ModuleBasereadUnsignedByteB(Ljava/io/DataInputStream;Ledu/harvard/hul/ois/jhove/ModuleBase;)I&edu/harvard/hul/ois/jhove/PropertyTypeBYTE(Ledu/harvard/hul/ois/jhove/PropertyType;'edu/harvard/hul/ois/jhove/PropertyArityARRAY)Ledu/harvard/hul/ois/jhove/PropertyArity;x(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ledu/harvard/hul/ois/jhove/PropertyArity;Ljava/lang/Object;)V/edu/harvard/hul/ois/jhove/module/Jpeg2000Module addProperty'(Ledu/harvard/hul/ois/jhove/Property;)VfinalizeBytesRead!*+iJ**<M>,**T*Y , * jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/ImageHeaderBox.class0000644000707400001440000000615111510702106025760 0ustar garyusers2 ,= +>? +@AB +C DE F GH +I +J KLM GNO P QR DS +T DU VW VX DYZ V[ \] V^ V_`a bcd $e !f Dg +h DijklR(Ljava/io/RandomAccessFile;Ledu/harvard/hul/ois/jhove/module/jpeg2000/BoxHolder;)VCodereadBox()Z StackMapTablemknopq ExceptionsrgetSelfPropName()Ljava/lang/String; -. st6edu/harvard/hul/ois/jhove/module/jpeg2000/JP2HeaderBox uv&edu/harvard/hul/ois/jhove/ErrorMessage"ImageHeader Box in illegal context wxo yz -{| }~   z"Image Header Box is incorrect size =edu/harvard/hul/ois/jhove/module/jpeg2000/CodestreamHeaderBox  m #ImageHeader Box haz zero components  "edu/harvard/hul/ois/jhove/PropertyColorspaceUnknownq java/lang/Boolean - - Image Header Box8edu/harvard/hul/ois/jhove/module/jpeg2000/ImageHeaderBox0edu/harvard/hul/ois/jhove/module/jpeg2000/JP2Box+edu/harvard/hul/ois/jhove/NisoImageMetadata[I/edu/harvard/hul/ois/jhove/module/Jpeg2000Modulejava/lang/String&edu/harvard/hul/ois/jhove/PropertyTypejava/io/IOException _parentBox2Ledu/harvard/hul/ois/jhove/module/jpeg2000/JP2Box;_repInfo#Ledu/harvard/hul/ois/jhove/RepInfo;_module1Ledu/harvard/hul/ois/jhove/module/Jpeg2000Module; getFilePos()J(Ljava/lang/String;J)V!edu/harvard/hul/ois/jhove/RepInfo setMessage&(Ledu/harvard/hul/ois/jhove/Message;)V initBytesRead()V _boxHeader5Ledu/harvard/hul/ois/jhove/module/jpeg2000/BoxHeader;3edu/harvard/hul/ois/jhove/module/jpeg2000/BoxHeader getLength setWellFormed(Z)V getCodestream8()Ledu/harvard/hul/ois/jhove/module/jpeg2000/Codestream;4edu/harvard/hul/ois/jhove/module/jpeg2000/CodestreamgetNiso/()Ledu/harvard/hul/ois/jhove/NisoImageMetadata;getDefaultNiso_dstrmLjava/io/DataInputStream;readUnsignedInt(Ljava/io/DataInputStream;)JsetImageLength(J)V setImageWidthreadUnsignedShort(Ljava/io/DataInputStream;)IsetSamplesPerPixel(I)V$edu/harvard/hul/ois/jhove/ModuleBasereadUnsignedByteB(Ljava/io/DataInputStream;Ledu/harvard/hul/ois/jhove/ModuleBase;)IsetBitsPerSample([I)VsetCompressionSchemeBOOLEAN(Ledu/harvard/hul/ois/jhove/PropertyType;O(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ljava/lang/Object;)V addProperty'(Ledu/harvard/hul/ois/jhove/Property;)VfinalizeBytesReadsetImageHeaderSeen!+,-./*+,01/  w**Y* * * $*Y* ***M,L *L**A+ **7+**6*Y* +**6/ :~`6 6    O +**6 + **6 *!Y"#$Y %&'**6 *(*)2 #23N, 435&436<<78EE436<<78EE9:;</*jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/InstructionSetBox.class0000644000707400001440000000554011510702106026623 0ustar garyusers2 0; /<= /> /? /@ /A BC BD /E FG /HIJ BK L MN MOP QRS TUV W X YZ[\]^ T_` #abcdefgh /ijkR(Ljava/io/RandomAccessFile;Ledu/harvard/hul/ois/jhove/module/jpeg2000/BoxHolder;)VCodereadBox()Z StackMapTablejl Exceptionsm 12 no8edu/harvard/hul/ois/jhove/module/jpeg2000/CompositionBox pq rq st uvw xy z{ |}~  &edu/harvard/hul/ois/jhove/ErrorMessage$Data underrun in Instruction Set Box 1 java/util/ArrayList 1"edu/harvard/hul/ois/jhove/PropertyHorizontalOffset java/lang/Long 1 1l VerticalOffsetWidthHeightPersist java/lang/Boolean 1LifeNextUseHorizontalCropOffsetVerticalCropOffset CroppedWidth CroppedHeight#Data overrun in Instruction Set Box q;edu/harvard/hul/ois/jhove/module/jpeg2000/InstructionSetBox0edu/harvard/hul/ois/jhove/module/jpeg2000/JP2Boxjava/util/Listjava/io/IOException _parentBox2Ledu/harvard/hul/ois/jhove/module/jpeg2000/JP2Box;wrongBoxContext()V initBytesRead_module1Ledu/harvard/hul/ois/jhove/module/Jpeg2000Module;_dstrmLjava/io/DataInputStream;/edu/harvard/hul/ois/jhove/module/Jpeg2000ModulereadUnsignedShort(Ljava/io/DataInputStream;)IreadUnsignedInt(Ljava/io/DataInputStream;)J _boxHeader5Ledu/harvard/hul/ois/jhove/module/jpeg2000/BoxHeader;3edu/harvard/hul/ois/jhove/module/jpeg2000/BoxHeader getDataLength()J_repInfo#Ledu/harvard/hul/ois/jhove/RepInfo; getFilePos(Ljava/lang/String;J)V!edu/harvard/hul/ois/jhove/RepInfo setMessage&(Ledu/harvard/hul/ois/jhove/Message;)V setWellFormed(Z)V(I)V&edu/harvard/hul/ois/jhove/PropertyTypeLONG(Ledu/harvard/hul/ois/jhove/PropertyType;(J)VO(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ljava/lang/Object;)Vadd(Ljava/lang/Object;)ZBOOLEANfinalizeBytesRead!/0123*+,4537 * ****<~=~>~6 ~6**6** 7* d6 +~) S* Y** Y :  "Z** 7  YY W** 7  YY W Z** 7  YY W** 7  YY W ** 7   6  Y!"#Y $W %7  Y'Y W** 7 Y(YW ** 7  Y)Y W** 7  Y*Y W** 7 Y+YW** 7 Y,YW  * Y-** *.6H@ @ @ @U 7 8_Z @p%9:jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/JP2HeaderBox.class0000644000707400001440000000626611510702106025340 0ustar garyusers2 ? 1@ 1A 1B CD 1EFG CH I JK JL 1M NO 1P NQ CR CS CT CU 1V 1WXY Z[\ ]^ _ ` Cabc Jdefghijkl mno 1p 1qrsR(Ljava/io/RandomAccessFile;Ledu/harvard/hul/ois/jhove/module/jpeg2000/BoxHolder;)VCodereadBox()Z StackMapTablesX[ ExceptionstgetSelfPropName()Ljava/lang/String; 23 uv wx yz{ |6 }~&edu/harvard/hul/ois/jhove/ErrorMessage%Multiple JP2 Header Boxes not allowed  2  6 0edu/harvard/hul/ois/jhove/module/jpeg2000/JP2Box2edu/harvard/hul/ois/jhove/module/jpeg2000/LabelBox 56"edu/harvard/hul/ois/jhove/PropertyJP2HeaderLabel > 2 8edu/harvard/hul/ois/jhove/module/jpeg2000/ImageHeaderBox,First box of JP2 header must be image header 8edu/harvard/hul/ois/jhove/module/jpeg2000/AssociationBox1edu/harvard/hul/ois/jhove/module/jpeg2000/BPCCBox6edu/harvard/hul/ois/jhove/module/jpeg2000/ColorSpecBox4edu/harvard/hul/ois/jhove/module/jpeg2000/PaletteBox9edu/harvard/hul/ois/jhove/module/jpeg2000/ComponentMapBox7edu/harvard/hul/ois/jhove/module/jpeg2000/ChannelDefBox7edu/harvard/hul/ois/jhove/module/jpeg2000/ResolutionBox0edu/harvard/hul/ois/jhove/module/jpeg2000/ROIBox v8JP2 Header has Component Mapping box without Palette Box8JP2 Header has Palette box without Component Mapping Box vJP2 Header Box6edu/harvard/hul/ois/jhove/module/jpeg2000/JP2HeaderBoxjava/io/IOException initBytesRead()VhasBoxesZ_module1Ledu/harvard/hul/ois/jhove/module/Jpeg2000Module;/edu/harvard/hul/ois/jhove/module/Jpeg2000Module isJP2HdrSeen_repInfo#Ledu/harvard/hul/ois/jhove/RepInfo; getFilePos()J(Ljava/lang/String;J)V!edu/harvard/hul/ois/jhove/RepInfo setMessage&(Ledu/harvard/hul/ois/jhove/Message;)VsetValid(Z)V _boxHeader5Ledu/harvard/hul/ois/jhove/module/jpeg2000/BoxHeader;3edu/harvard/hul/ois/jhove/module/jpeg2000/BoxHeader getLength_dstrmLjava/io/DataInputStream; getDataLength skipBytesC(Ljava/io/DataInputStream;ILedu/harvard/hul/ois/jhove/ModuleBase;)I setJP2HdrSeengetNCodestreams()IsetJP2ComplianthasNextnext()Ljava/lang/Object;&edu/harvard/hul/ois/jhove/PropertyTypeSTRING(Ledu/harvard/hul/ois/jhove/PropertyType;getLabelO(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ljava/lang/Object;)V addProperty'(Ledu/harvard/hul/ois/jhove/Property;)V setWellFormedskipBoxmakeAssocProperty&()Ledu/harvard/hul/ois/jhove/Property;finalizeBytesRead!1234*+,564***F*Y* * *  *** *W** *<M>6**MB,;<*,*Y,*M6, <,*Y!* *",#4,$-,%&,&,',(,) ,* ,:,+1'"*Y,* * '"*Y-* * *.: **/7% V89,$ 7'':;<=>40jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/LabelBox.class0000644000707400001440000000305511510702106024644 0ustar garyusers2O # $ % & '( ) * +,-. / 012 34 5678_labelLjava/lang/String;R(Ljava/io/RandomAccessFile;Ledu/harvard/hul/ois/jhove/module/jpeg2000/BoxHolder;)VCodereadBox()Z StackMapTable Exceptions9getLabel()Ljava/lang/String;getSelfPropDesc&()Ledu/harvard/hul/ois/jhove/Property;getSelfPropName  :; <= >?@ AB CD EFG HIjava/lang/StringUTF-8 J "edu/harvard/hul/ois/jhove/Property DescriptionK LM N Label Box2edu/harvard/hul/ois/jhove/module/jpeg2000/LabelBox0edu/harvard/hul/ois/jhove/module/jpeg2000/JP2Boxjava/io/IOException _parentBox2Ledu/harvard/hul/ois/jhove/module/jpeg2000/JP2Box;wrongBoxContext()V _boxHeader5Ledu/harvard/hul/ois/jhove/module/jpeg2000/BoxHeader;3edu/harvard/hul/ois/jhove/module/jpeg2000/BoxHeader getDataLength()J_dstrmLjava/io/DataInputStream;_module1Ledu/harvard/hul/ois/jhove/module/Jpeg2000Module;$edu/harvard/hul/ois/jhove/ModuleBase readByteBufD(Ljava/io/DataInputStream;[BLedu/harvard/hul/ois/jhove/ModuleBase;)I([BLjava/lang/String;)V&edu/harvard/hul/ois/jhove/PropertyTypeSTRING(Ledu/harvard/hul/ois/jhove/PropertyType;O(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ljava/lang/Object;)V!*+,J5* **L*+*W* Y+  *  ! Y* "jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/NumberListBox.class0000644000707400001440000000421711510702106025712 0ustar garyusers2o . / 0 123 4 5 6 78 79: ;< 7=> ?@A B CD ?E FG H IJKLM propArray%[Ledu/harvard/hul/ois/jhove/Property;R(Ljava/io/RandomAccessFile;Ledu/harvard/hul/ois/jhove/module/jpeg2000/BoxHolder;)VCodereadBox()Z StackMapTable ExceptionsNgetSelfPropDesc&()Ledu/harvard/hul/ois/jhove/Property;getSelfPropName()Ljava/lang/String; "# OP QRS TU"edu/harvard/hul/ois/jhove/Property ! VW XYZ [\ ]^Type_ `a bcValued efjava/lang/Integer "g "hNumber ifj kl "m nP DescriptionNumber List Box7edu/harvard/hul/ois/jhove/module/jpeg2000/NumberListBox0edu/harvard/hul/ois/jhove/module/jpeg2000/JP2Boxjava/io/IOException initBytesRead()V _boxHeader5Ledu/harvard/hul/ois/jhove/module/jpeg2000/BoxHeader;3edu/harvard/hul/ois/jhove/module/jpeg2000/BoxHeader getDataLength()J_module1Ledu/harvard/hul/ois/jhove/module/Jpeg2000Module;_dstrmLjava/io/DataInputStream;/edu/harvard/hul/ois/jhove/module/Jpeg2000ModulereadUnsignedInt(Ljava/io/DataInputStream;)JgetApp!()Ledu/harvard/hul/ois/jhove/App;4edu/harvard/hul/ois/jhove/module/jpeg2000/JP2StringsnumberListTypeStr[Ljava/lang/String;addIntegerPropertyL(Ljava/lang/String;I[Ljava/lang/String;)Ledu/harvard/hul/ois/jhove/Property;&edu/harvard/hul/ois/jhove/PropertyTypeINTEGER(Ledu/harvard/hul/ois/jhove/PropertyType;(I)VO(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ljava/lang/Object;)VPROPERTY'edu/harvard/hul/ois/jhove/PropertyArityARRAY)Ledu/harvard/hul/ois/jhove/PropertyArity;x(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ledu/harvard/hul/ois/jhove/PropertyArity;Ljava/lang/Object;)VfinalizeBytesRead! !"#$*+,%&$ **l<*=y** B! {6! 6*::*SYYS*YS*' z()*+$2*Y*',-$jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/OpacityBox.class0000644000707400001440000000535611510702106025243 0ustar garyusers2 %4 $56 $7 $89 : $; <= $> ?@A BC <D EF $GHI <J K LM LN $O PQRS TU VW XY TZ V[ \ $]^_`R(Ljava/io/RandomAccessFile;Ledu/harvard/hul/ois/jhove/module/jpeg2000/BoxHolder;)VCodereadBox()Z StackMapTableab_c ExceptionsdgetSelfPropName()Ljava/lang/String; &' ef;edu/harvard/hul/ois/jhove/module/jpeg2000/ComposLayerHdrBox gh ihjava/util/ArrayList &j klm no pqr stTypeu vw xya z{ |}&edu/harvard/hul/ois/jhove/ErrorMessage!Invalid OTyp field in Opacity Box ~ &  "edu/harvard/hul/ois/jhove/PropertyChromaKeyValues  &Opacity h Opacity Box4edu/harvard/hul/ois/jhove/module/jpeg2000/OpacityBox0edu/harvard/hul/ois/jhove/module/jpeg2000/JP2Boxjava/util/Listedu/harvard/hul/ois/jhove/App[Ijava/io/IOException _parentBox2Ledu/harvard/hul/ois/jhove/module/jpeg2000/JP2Box;wrongBoxContext()V initBytesRead(I)V_module1Ledu/harvard/hul/ois/jhove/module/Jpeg2000Module;/edu/harvard/hul/ois/jhove/module/Jpeg2000ModulegetApp!()Ledu/harvard/hul/ois/jhove/App;_dstrmLjava/io/DataInputStream;$edu/harvard/hul/ois/jhove/ModuleBasereadUnsignedByteB(Ljava/io/DataInputStream;Ledu/harvard/hul/ois/jhove/ModuleBase;)I4edu/harvard/hul/ois/jhove/module/jpeg2000/JP2StringsopacityTypeStr[Ljava/lang/String;addIntegerPropertyL(Ljava/lang/String;I[Ljava/lang/String;)Ledu/harvard/hul/ois/jhove/Property;add(Ljava/lang/Object;)Z_repInfo#Ledu/harvard/hul/ois/jhove/RepInfo; getFilePos()J(Ljava/lang/String;J)V!edu/harvard/hul/ois/jhove/RepInfo setMessage&(Ledu/harvard/hul/ois/jhove/Message;)VsetValid(Z)V _boxHeader5Ledu/harvard/hul/ois/jhove/module/jpeg2000/BoxHeader;3edu/harvard/hul/ois/jhove/module/jpeg2000/BoxHeader getDataLength&edu/harvard/hul/ois/jhove/PropertyTypeINTEGER(Ledu/harvard/hul/ois/jhove/PropertyType;'edu/harvard/hul/ois/jhove/PropertyArityARRAY)Ledu/harvard/hul/ois/jhove/PropertyArity;x(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ledu/harvard/hul/ois/jhove/PropertyArity;Ljava/lang/Object;)VPROPERTYLIST addOpacity'(Ledu/harvard/hul/ois/jhove/Property;)VfinalizeBytesRead!$%&'(*+,)*(R  * **YL* M* * >+*  W$*Y***d6t* * 6 :dl6666 6   x* * `6  O+YW*Y +!*"+3Z,-/ .,-/  0123(#jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/PaletteBox.class0000644000707400001440000000645411510702106025231 0ustar garyusers2 +; *<= *>?@ *A BC D EF *G *H IJ *K BLM ENOP QRS T U VWXY Z[ \] Q^_` Qabc #d ef Bg Bh *ijklR(Ljava/io/RandomAccessFile;Ledu/harvard/hul/ois/jhove/module/jpeg2000/BoxHolder;)VCodereadBox()Z StackMapTablekmnoO ExceptionspgetSelfPropName()Ljava/lang/String; ,- qr6edu/harvard/hul/ois/jhove/module/jpeg2000/JP2HeaderBox st&edu/harvard/hul/ois/jhove/ErrorMessage#Image Header Box in illegal context uvw xy ,z{ |} ~  y #Palette must have 1 to 1024 entries "edu/harvard/hul/ois/jhove/PropertyEntries java/lang/Integer , ,  ComponentsBitDepth ,Values Invalid Component Palette=edu/harvard/hul/ois/jhove/module/jpeg2000/CodestreamHeaderBox   Palette Box4edu/harvard/hul/ois/jhove/module/jpeg2000/PaletteBox0edu/harvard/hul/ois/jhove/module/jpeg2000/JP2Box%[Ledu/harvard/hul/ois/jhove/Property;[I[Zjava/io/IOException _parentBox2Ledu/harvard/hul/ois/jhove/module/jpeg2000/JP2Box;_repInfo#Ledu/harvard/hul/ois/jhove/RepInfo;_module1Ledu/harvard/hul/ois/jhove/module/Jpeg2000Module;/edu/harvard/hul/ois/jhove/module/Jpeg2000Module getFilePos()J(Ljava/lang/String;J)V!edu/harvard/hul/ois/jhove/RepInfo setMessage&(Ledu/harvard/hul/ois/jhove/Message;)V initBytesRead()V _boxHeader5Ledu/harvard/hul/ois/jhove/module/jpeg2000/BoxHeader;3edu/harvard/hul/ois/jhove/module/jpeg2000/BoxHeader getDataLength_dstrmLjava/io/DataInputStream;readUnsignedShort(Ljava/io/DataInputStream;)IsetValid(Z)V&edu/harvard/hul/ois/jhove/PropertyTypeINTEGER(Ledu/harvard/hul/ois/jhove/PropertyType;(I)VO(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ljava/lang/Object;)V$edu/harvard/hul/ois/jhove/ModuleBasereadUnsignedByteB(Ljava/io/DataInputStream;Ledu/harvard/hul/ois/jhove/ModuleBase;)I'edu/harvard/hul/ois/jhove/PropertyArityARRAY)Ledu/harvard/hul/ois/jhove/PropertyArity;x(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ledu/harvard/hul/ois/jhove/PropertyArity;Ljava/lang/Object;)VSTRINGPROPERTY getCodestream8()Ledu/harvard/hul/ois/jhove/module/jpeg2000/Codestream;4edu/harvard/hul/ois/jhove/module/jpeg2000/CodestreamsetPaletteProperty'(Ledu/harvard/hul/ois/jhove/Property;)V addProperty skipBytesC(Ljava/io/DataInputStream;ILedu/harvard/hul/ois/jhove/ModuleBase;)IfinalizeBytesRead!*+,-.*+,/0. **Y* * * <*A**6 "*Y* *:YYS**66YYS :: 6  5**6    ~T  ~`O `6YS YSu: 6  E : 6    **O   Y  S Y! Sh`6Y"!: *#*#$:   % * &*** ee*'W*(1#/V 2345$ 23455 23455) 3426789:.)jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/ROIBox.class0000644000707400001440000000714311510702106024260 0ustar garyusers2 5G 4H 4I 4J KLM N OP QR 4STU OV W XY XZ[ \] O^ _`ab \cde fgh N i Ojk flm !nopq fr st uv 4w 4xyz -{ |} O~ 4roiProp$Ledu/harvard/hul/ois/jhove/Property;R(Ljava/io/RandomAccessFile;Ledu/harvard/hul/ois/jhove/module/jpeg2000/BoxHolder;)VCodereadBox()Z StackMapTable ExceptionsgetSelfPropName()Ljava/lang/String;getSelfPropDesc&()Ledu/harvard/hul/ois/jhove/Property; 89  java/util/ArrayList 8  < &edu/harvard/hul/ois/jhove/ErrorMessageInvalid data in ROI 8  InCodestream  Invalid region type in ROI Box RegionType "edu/harvard/hul/ois/jhove/PropertyCodingPriority java/lang/Integer 8 HorizontalLocation java/lang/Long 8WidthHeightROI  8ROIs 67 8edu/harvard/hul/ois/jhove/module/jpeg2000/AssociationBox=edu/harvard/hul/ois/jhove/module/jpeg2000/CodestreamHeaderBox  ROI Description Box Description0edu/harvard/hul/ois/jhove/module/jpeg2000/ROIBox0edu/harvard/hul/ois/jhove/module/jpeg2000/JP2Boxjava/util/List#edu/harvard/hul/ois/jhove/JhoveBasejava/io/IOException initBytesRead()V_dstrmLjava/io/DataInputStream;_module1Ledu/harvard/hul/ois/jhove/module/Jpeg2000Module;$edu/harvard/hul/ois/jhove/ModuleBasereadUnsignedByteB(Ljava/io/DataInputStream;Ledu/harvard/hul/ois/jhove/ModuleBase;)I(I)V/edu/harvard/hul/ois/jhove/module/Jpeg2000ModulegetBase'()Ledu/harvard/hul/ois/jhove/JhoveBase;getShowRawFlag_repInfo#Ledu/harvard/hul/ois/jhove/RepInfo; getFilePos()J(Ljava/lang/String;J)V!edu/harvard/hul/ois/jhove/RepInfo setMessage&(Ledu/harvard/hul/ois/jhove/Message;)VsetValid(Z)V4edu/harvard/hul/ois/jhove/module/jpeg2000/JP2StringsinCodestreamStr[Ljava/lang/String;addIntegerPropertyL(Ljava/lang/String;I[Ljava/lang/String;)Ledu/harvard/hul/ois/jhove/Property;add(Ljava/lang/Object;)Z roiTypeStr&edu/harvard/hul/ois/jhove/PropertyTypeINTEGER(Ledu/harvard/hul/ois/jhove/PropertyType;O(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ljava/lang/Object;)VreadUnsignedInt(Ljava/io/DataInputStream;)JLONG(J)VPROPERTY'edu/harvard/hul/ois/jhove/PropertyArityLIST)Ledu/harvard/hul/ois/jhove/PropertyArity;x(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ledu/harvard/hul/ois/jhove/PropertyArity;Ljava/lang/Object;)V _parentBox2Ledu/harvard/hul/ois/jhove/module/jpeg2000/JP2Box; getCodestream8()Ledu/harvard/hul/ois/jhove/module/jpeg2000/Codestream;4edu/harvard/hul/ois/jhove/module/jpeg2000/CodestreamsetROIProperty'(Ledu/harvard/hul/ois/jhove/Property;)V addPropertyfinalizeBytesRead!456789:*+,;<:V ***=YN*: 66Y:**6"* Y * * *W**6  "* Y* * * W**6 YY W**7 Y !Y "W**7 Y !Y "W**7Y# !Y"W**7Y$ !Y"W-Y%&'(Wr*Y)&'-(**+,0*+-*+-.:**/***0*1=6,>?@B?G>?@? ABCD:2EF:/**Y3&**=jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/ReaderRequirementsBox.class0000644000707400001440000000454311510702106027436 0ustar garyusers2 + , - ./0 12 13 4 5 67 8 9 :; <= <> <? @AB <C D EF EGH I <J K <LMNOPR(Ljava/io/RandomAccessFile;Ledu/harvard/hul/ois/jhove/module/jpeg2000/BoxHolder;)VCodereadBox()Z StackMapTable ExceptionsQgetSelfPropName()Ljava/lang/String; !" RS TUV WXREADBOX parentBox != nullY Z[ \U ]U ^_` ab cd efg hij kl mn on pq&edu/harvard/hul/ois/jhove/ErrorMessage'Invalid data in Reader Requirements box rb !st uv wxREADBOX default yz {| }U ~xREADBOX seen=trueReader Requirements Box?edu/harvard/hul/ois/jhove/module/jpeg2000/ReaderRequirementsBox0edu/harvard/hul/ois/jhove/module/jpeg2000/JP2Boxjava/io/IOException _parentBox2Ledu/harvard/hul/ois/jhove/module/jpeg2000/JP2Box;wrongBoxContext()Vjava/lang/SystemoutLjava/io/PrintStream;java/io/PrintStreamprintln(Ljava/lang/String;)Vflush initBytesRead _boxHeader5Ledu/harvard/hul/ois/jhove/module/jpeg2000/BoxHeader;3edu/harvard/hul/ois/jhove/module/jpeg2000/BoxHeader getDataLength()J_dstrmLjava/io/DataInputStream;_module1Ledu/harvard/hul/ois/jhove/module/Jpeg2000Module;$edu/harvard/hul/ois/jhove/ModuleBasereadUnsignedByteB(Ljava/io/DataInputStream;Ledu/harvard/hul/ois/jhove/ModuleBase;)I/edu/harvard/hul/ois/jhove/module/Jpeg2000ModulereadUnsignedShort(Ljava/io/DataInputStream;)IreadUnsignedInt(Ljava/io/DataInputStream;)JreadSignedLong_repInfo#Ledu/harvard/hul/ois/jhove/RepInfo; getFilePos(Ljava/lang/String;J)V!edu/harvard/hul/ois/jhove/RepInfo setMessage&(Ledu/harvard/hul/ois/jhove/Message;)V setWellFormed(Z)VstartBytesReadJ skipBytesC(Ljava/io/DataInputStream;ILedu/harvard/hul/ois/jhove/ModuleBase;)IfinalizeBytesRead setRReqSeen! !"#*+,$%# q**** =* * >/Nm* * 7* * 7* * 7* * 7l* * 7* * 7O* * 7* * 72*Y* ** * 66  * * 6 * * * *ee* W** & H.'()*#jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/ResolutionBox.class0000644000707400001440000000245511510702106025773 0ustar garyusers2G ! " # $ %& ' ( ) * +,- ./ 0 123R(Ljava/io/RandomAccessFile;Ledu/harvard/hul/ois/jhove/module/jpeg2000/BoxHolder;)VCodereadBox()Z StackMapTable3&, Exceptions4getSelfPropName()Ljava/lang/String;  56 78 9: ;<3edu/harvard/hul/ois/jhove/module/jpeg2000/BoxHeader => ?@ A B CD0edu/harvard/hul/ois/jhove/module/jpeg2000/JP2Box>edu/harvard/hul/ois/jhove/module/jpeg2000/CaptureResolutionBox 9edu/harvard/hul/ois/jhove/module/jpeg2000/DDResolutionBox E6 F6Resolution Box7edu/harvard/hul/ois/jhove/module/jpeg2000/ResolutionBoxjava/io/IOException initBytesRead()VhasBoxesZ _boxHeader5Ledu/harvard/hul/ois/jhove/module/jpeg2000/BoxHeader; getDataLength()J_module1Ledu/harvard/hul/ois/jhove/module/Jpeg2000Module;_dstrmLjava/io/DataInputStream;M(Ledu/harvard/hul/ois/jhove/module/Jpeg2000Module;Ljava/io/DataInputStream;)VhasNextnext()Ljava/lang/Object;skipBoxfinalizeBytesRead! *+,u<=***>Y** :* D* :3 <=*' jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/UUIDBox.class0000644000707400001440000000367611510702106024404 0ustar garyusers2i &' ( ) *+ *, - . / 012 34 56 78 39 :; <= 3> ?@ ABCDR(Ljava/io/RandomAccessFile;Ledu/harvard/hul/ois/jhove/module/jpeg2000/BoxHolder;)VCodereadBox()Z StackMapTableEF ExceptionsGgetSelfPropName()Ljava/lang/String; "edu/harvard/hul/ois/jhove/Property HI JKL MN ON PI QR STU VWUUIDX YZ[ \] ^Data _Z` ab cUUIDBox dZe fg hIUUID Box1edu/harvard/hul/ois/jhove/module/jpeg2000/UUIDBox0edu/harvard/hul/ois/jhove/module/jpeg2000/JP2Box%[Ledu/harvard/hul/ois/jhove/Property;[Bjava/io/IOException initBytesRead()V _boxHeader5Ledu/harvard/hul/ois/jhove/module/jpeg2000/BoxHeader;3edu/harvard/hul/ois/jhove/module/jpeg2000/BoxHeader getDataLength()J getLength wrongBoxSize_dstrmLjava/io/DataInputStream;_module1Ledu/harvard/hul/ois/jhove/module/Jpeg2000Module;$edu/harvard/hul/ois/jhove/ModuleBase readByteBufD(Ljava/io/DataInputStream;[BLedu/harvard/hul/ois/jhove/ModuleBase;)I&edu/harvard/hul/ois/jhove/PropertyTypeBYTE(Ledu/harvard/hul/ois/jhove/PropertyType;'edu/harvard/hul/ois/jhove/PropertyArityARRAY)Ledu/harvard/hul/ois/jhove/PropertyArity;x(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ledu/harvard/hul/ois/jhove/PropertyArity;Ljava/lang/Object;)VBOOLEANjava/lang/BooleanFALSELjava/lang/Boolean;O(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ljava/lang/Object;)VPROPERTY/edu/harvard/hul/ois/jhove/module/Jpeg2000ModuleaddUUID'(Ledu/harvard/hul/ois/jhove/Property;)VfinalizeBytesRead!*+,L**=*  *N*-* W+Y -Sd6.:** W+Y S+YS* Y +** Z!"#$%jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/UUIDInfoBox.class0000644000707400001440000000652211510702106025211 0ustar garyusers2 H 3I 3J 3K 3L 3M NO 3P 3Q R 3S 3TUVW X Y 3Z [ 3\ ] ^ _ `ab cd e fg fhi j 3k lm 3nop qr st %u cv 3wx qy %z{ q| s}~_urlProp$Ledu/harvard/hul/ois/jhove/Property; _uuidListPropR(Ljava/io/RandomAccessFile;Ledu/harvard/hul/ois/jhove/module/jpeg2000/BoxHolder;)VCodereadBox()Z StackMapTableOU ExceptionssetURL(Ljava/lang/String;)V setUUIDList([[B)VgetSelfPropName()Ljava/lang/String; 78 3edu/harvard/hul/ois/jhove/module/jpeg2000/BoxHeader 7 ; 0edu/harvard/hul/ois/jhove/module/jpeg2000/JP2Box5edu/harvard/hul/ois/jhove/module/jpeg2000/UUIDListBox9edu/harvard/hul/ois/jhove/module/jpeg2000/DataEntryURLBox :; &edu/harvard/hul/ois/jhove/ErrorMessage/Size of contained boxes underruns UUID Info Box 7 java/util/ArrayList 7 45 65"edu/harvard/hul/ois/jhove/PropertyUUIDInfo  7 URL 7UUIDList  UUID Info Box5edu/harvard/hul/ois/jhove/module/jpeg2000/UUIDInfoBoxjava/util/Listjava/io/IOException _parentBox2Ledu/harvard/hul/ois/jhove/module/jpeg2000/JP2Box;wrongBoxContext()V initBytesReadhasBoxesZ _boxHeader5Ledu/harvard/hul/ois/jhove/module/jpeg2000/BoxHeader; getDataLength()J_module1Ledu/harvard/hul/ois/jhove/module/Jpeg2000Module;_dstrmLjava/io/DataInputStream;M(Ledu/harvard/hul/ois/jhove/module/Jpeg2000Module;Ljava/io/DataInputStream;)VhasNextnext()Ljava/lang/Object; setBoxHeader8(Ledu/harvard/hul/ois/jhove/module/jpeg2000/BoxHeader;)VsetDataInputStream(Ljava/io/DataInputStream;)V_rafLjava/io/RandomAccessFile;setRandomAccessFile(Ljava/io/RandomAccessFile;)V_repInfo#Ledu/harvard/hul/ois/jhove/RepInfo; setRepInfo&(Ledu/harvard/hul/ois/jhove/RepInfo;)V setModule4(Ledu/harvard/hul/ois/jhove/module/Jpeg2000Module;)VskipBox/edu/harvard/hul/ois/jhove/module/Jpeg2000Module getFilePos(Ljava/lang/String;J)V!edu/harvard/hul/ois/jhove/RepInfo setMessage&(Ledu/harvard/hul/ois/jhove/Message;)V setWellFormed(Z)V(I)Vadd(Ljava/lang/Object;)Z&edu/harvard/hul/ois/jhove/PropertyTypePROPERTY(Ledu/harvard/hul/ois/jhove/PropertyType;'edu/harvard/hul/ois/jhove/PropertyArityLIST)Ledu/harvard/hul/ois/jhove/PropertyArity;x(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ledu/harvard/hul/ois/jhove/PropertyArity;Ljava/lang/Object;)V addUUIDInfo'(Ledu/harvard/hul/ois/jhove/Property;)VfinalizeBytesReadSTRINGO(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ljava/lang/Object;)VBYTEARRAY!34565789*+,:;9/* ****<Y* * MN* \* N-M-- -1-,-* -*-*-* --$*Y* * Y!:*"*"#W*$*$#W* %Y&'()**+< #=>-$?@ABC9*%Y,-+."DE9dF Y+!M>+",%Y/01+2)#W*%Y&'(,)$<  ?$FG92jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/UUIDListBox.class0000644000707400001440000000265611510702106025235 0ustar garyusers2M   ! " # $ %& ' () *+ ,- . /012R(Ljava/io/RandomAccessFile;Ledu/harvard/hul/ois/jhove/module/jpeg2000/BoxHolder;)VCodereadBox()Z StackMapTable3 Exceptions4getSelfPropName()Ljava/lang/String;  565edu/harvard/hul/ois/jhove/module/jpeg2000/UUIDInfoBox 78 98 :; <=> ?@ ABC DE F8[BG HI JK L8 UUID List Box5edu/harvard/hul/ois/jhove/module/jpeg2000/UUIDListBox0edu/harvard/hul/ois/jhove/module/jpeg2000/JP2Box[[Bjava/io/IOException _parentBox2Ledu/harvard/hul/ois/jhove/module/jpeg2000/JP2Box;wrongBoxContext()V initBytesRead_module1Ledu/harvard/hul/ois/jhove/module/Jpeg2000Module;_dstrmLjava/io/DataInputStream;/edu/harvard/hul/ois/jhove/module/Jpeg2000ModulereadUnsignedShort(Ljava/io/DataInputStream;)I _boxHeader5Ledu/harvard/hul/ois/jhove/module/jpeg2000/BoxHeader;3edu/harvard/hul/ois/jhove/module/jpeg2000/BoxHeader getDataLength()J wrongBoxSize$edu/harvard/hul/ois/jhove/ModuleBase readByteBufD(Ljava/io/DataInputStream;[BLedu/harvard/hul/ois/jhove/ModuleBase;)I setUUIDList([[B)VfinalizeBytesRead!*+,t* ****<h`* *  M>*,2* W**,*'jhove/classes/edu/harvard/hul/ois/jhove/module/jpeg2000/XMLBox.class0000644000707400001440000000317211510702106024265 0ustar garyusers2W $ % & '( ) * +,- . / 0 12 345 67 89:;xmlDataLjava/lang/String;R(Ljava/io/RandomAccessFile;Ledu/harvard/hul/ois/jhove/module/jpeg2000/BoxHolder;)VCodereadBox()Z StackMapTable< Exceptions=getSelfPropDesc&()Ledu/harvard/hul/ois/jhove/Property;getSelfPropName()Ljava/lang/String;  >? @AB CD EF GHI JKjava/lang/String L  MNO PQ R?"edu/harvard/hul/ois/jhove/Property DescriptionS TU VXML Box0edu/harvard/hul/ois/jhove/module/jpeg2000/XMLBox0edu/harvard/hul/ois/jhove/module/jpeg2000/JP2Box[Bjava/io/IOException initBytesRead()V _boxHeader5Ledu/harvard/hul/ois/jhove/module/jpeg2000/BoxHeader;3edu/harvard/hul/ois/jhove/module/jpeg2000/BoxHeader getDataLength()J_dstrmLjava/io/DataInputStream;_module1Ledu/harvard/hul/ois/jhove/module/Jpeg2000Module;$edu/harvard/hul/ois/jhove/ModuleBase readByteBufD(Ljava/io/DataInputStream;[BLedu/harvard/hul/ois/jhove/ModuleBase;)I([B)V _parentBox2Ledu/harvard/hul/ois/jhove/module/jpeg2000/JP2Box;/edu/harvard/hul/ois/jhove/module/Jpeg2000ModuleaddXML(Ljava/lang/String;)VfinalizeBytesRead&edu/harvard/hul/ois/jhove/PropertyTypeSTRING(Ledu/harvard/hul/ois/jhove/PropertyType;O(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ljava/lang/Object;)V!*+,]B**<M*,*W*Y, * ** *  < !Y* "#jhove/classes/edu/harvard/hul/ois/jhove/module/pdf/0000755000707400001440000000000011510702106021444 5ustar garyusersjhove/classes/edu/harvard/hul/ois/jhove/module/pdf/profiles/0000755000707400001440000000000011510701774023301 5ustar garyusersjhove/classes/edu/harvard/hul/ois/jhove/module/pdf/profiles/pdfa/0000755000707400001440000000000011510701773024212 5ustar garyusersjhove/classes/edu/harvard/hul/ois/jhove/module/pdf/profiles/specs/0000755000707400001440000000000011510701774024416 5ustar garyusersjhove/classes/edu/harvard/hul/ois/jhove/module/pdf/profiles/tagged/0000755000707400001440000000000011510701774024534 5ustar garyusersjhove/classes/edu/harvard/hul/ois/jhove/module/pdf/profiles/xprofile/0000755000707400001440000000000011510701774025131 5ustar garyusersjhove/classes/edu/harvard/hul/ois/jhove/module/pdf/AProfile.java0000644000707400001440000012553711467321531024037 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.pdf; import edu.harvard.hul.ois.jhove.*; import edu.harvard.hul.ois.jhove.module.*; import java.io.*; import java.util.*; import org.xml.sax.*; import javax.xml.parsers.*; /** * PDF profile checker for PDF/A-1 documents. * See 19005-1:2005(E), "Document Imaging Applications * Application Issues". * * Revised to reflect the final standard. With the new * terminology, this profile is specific to PDF/A-1; there may be * additional standards in the PDF/A family later on. "PDF/A" * means "PDF/A-1" in the documentation of this code. * * There are two levels of conformance, called Level A and Level B. * We report these as two different profiles. To accomplish this, * we use AProfileLevelA, linked to an instance of this, which * simply checks if this profile established Level A compliance. */ public final class AProfile extends PdfProfile { /****************************************************************** * PRIVATE CLASS FIELDS. ******************************************************************/ /* TaggedProfile to which this profile is linked. */ private TaggedProfile _taggedProfile; private boolean _levelA; private boolean hasDevRGB; private boolean hasDevCMYK; private boolean hasUncalCS; // flag for DeviceGray, DeviceCMYK or DeviceRGB /* Allowable annotation types. Movie, Sound and FileAttachment are allowed in PDF, but not in PDF/A. */ private String[] annotTypes = { "Text", "Link", "FreeText", "Line", "Square", "Circle", "Polygon", "Polyline", "Highlight", "Underline", "Squiggly", "StrikeOut", "Stamp", "Caret", "Ink", "Popup", "Widget", "Screen", "PrinterMark", "TrapNet" }; /* The following are the annotation types which are considered non-text annotations. */ private String[] nonTextAnnotTypes = { "Link", "Line", "Square", "Circle", "Polygon", "Polyline", "Stamp", "Caret", "Ink", "Popup", "Widget", "Screen", "PrinterMark", "TrapNet" }; private String[] excludedActions = { "Launch", "Sound", "Movie", "ResetForm", "ImportData", "JavaScript", "set-state", "no-op" }; /* The following filters are not allowed */ private String[] excludedFilters = { /*"ASCIIHexDecode", "ASCII85Decode",*/ "LZWDecode" }; /** * Constructor. * Creates an AProfile object for subsequent testing. * * @param module The module under which we are checking the profile. * */ public AProfile (PdfModule module) { super (module); _profileText = "ISO PDF/A-1, Level B"; } /** * Calling setTaggedProfile links this AProfile to a TaggedProfile. * */ public void setTaggedProfile (TaggedProfile tpr) { _taggedProfile = tpr; } /** * Returns true if the document satisfies the profile * at Level B or better. Also sets the level A flag to the * appropriate value, so that satisfiesLevelA can subsequently * be called. * */ public boolean satisfiesThisProfile () { // Assume level A compliance. _levelA = true; // The module has already done some syntactic checks. // If those failed, the file isn't compliant. if (!_module.mayBePDFACompliant ()) { _levelA = false; return false; } // Conforming to the TaggedProfile requirements is necessary // for Level A if (_taggedProfile != null && !_taggedProfile.isAlreadyOK ()) { _levelA = false; // But it may still be Level B } hasDevCMYK = false; hasDevRGB = false; hasUncalCS = false; try { // Encryption dictionary is not allowed. if (_module.getEncryptionDict () != null || !trailerDictOK () || !catalogOK () || !resourcesOK () || !fontsOK () || !outlinesOK()) { _levelA = false; return false; } } catch (Exception e) { _levelA = false; return false; } return true; // Passed all tests } /** Returns true if the document was found to be Level A * conformant. This returns a meaningful result only after * satisfiesThisProfile has been called, and * is intended for use by the Level A profiler. */ protected boolean satisfiesLevelA () { return _levelA; } /* The Encrypt and Info entries aren't allowed in the trailer dictionary. The ID entry is required. */ private boolean trailerDictOK () { PdfDictionary trailerDict = _module.getTrailerDict (); if (trailerDict == null) { return false; // really shouldn't happen } try { if (trailerDict.get ("Encrypt") != null/* || trailerDict.get ("Info") != null*/) { return false; } if (trailerDict.get ("ID") == null) { return false; } } catch (Exception e) { return false; } return true; } private boolean catalogOK () { PdfDictionary cat = _module.getCatalogDict (); if (cat == null) { return false; } try { // The document catalog dictionary "should" be present. // If it does, the value "shall" contain // a valid RFC1766 language string. PdfSimpleObject lang = (PdfSimpleObject) cat.get ("Lang"); if (lang != null) { RFC1766Lang l = new RFC1766Lang (lang.getStringValue ()); if (!l.isSyntaxCorrect ()) { return false; } } // It must have an unfiltered Metadata stream PdfStream metadata = (PdfStream) _module.resolveIndirectObject (cat.get ("Metadata")); if (!metadataOK (metadata)) { return false; } // If it has an interactive form, it must meet certain criteria PdfDictionary form = (PdfDictionary) _module.resolveIndirectObject (cat.get ("AcroForm")); if (form != null) { if (!formOK (form)) { return false; } } // It may not contain an AA entry or an OCProperties entry if (cat.get ("AA") != null || cat.get ("OCProperties") != null) { return false; } } catch (Exception e) { return false; } return true; } private boolean fontsOK () { if (!type0FontsOK ()) { return false; } // For each type of font (just because that's the easiest way // to get the fonts from the PdfModule), check that each font // has a ToUnicode entry which is a CMap stream. List lst = _module.getFontMaps (); Iterator iter = lst.listIterator (); try { while (iter.hasNext ()) { Map fmap = (Map) iter.next (); Iterator iter1 = fmap.values ().iterator (); while (iter1.hasNext ()) { PdfDictionary font = (PdfDictionary) iter1.next (); if (!fontOK (font)) { return false; } } } } catch (Exception e) { return false; } return true; } /* Check a font for validity */ private boolean fontOK (PdfDictionary font) { try { // The ToUnicode entry is required only for Level A, // and there are an assortment of exceptions. PdfSimpleObject fType = (PdfSimpleObject) font.get("Subtype"); String fTypeStr = fType.getStringValue (); PdfDictionary desc = (PdfDictionary) _module.resolveIndirectObject (font.get ("FontDescriptor")); // MODIF THL 2010/10/11 test if desc is null PdfSimpleObject flagsObj = null; if (desc != null) { flagsObj = (PdfSimpleObject) _module.resolveIndirectObject( desc.get ("Flags")); } int flags = 0; if (flagsObj != null) { flags = flagsObj.getIntValue(); } if ("Type1".equals (fTypeStr)) { // A Type 1 font must have a CharSet string in the // font descriptor dictionary. if (desc == null) { return false; // The requirement mentioned above implies a FontDescriptor is needed. } if (desc.get ("CharSet") == null) { return false; } return true; } if ("Type0".equals (fTypeStr)) { // Type 0 fonts are OK if the descendant CIDFont uses // four specified character collections. PdfObject order = font.get ("Ordering"); if (order instanceof PdfSimpleObject) { try { String ordText = ((PdfSimpleObject) order).getStringValue (); if ("Adobe-GB1".equals (ordText) || "Adobe-CNS1".equals (ordText) || "Adobe-Japan1".equals (ordText) || "Adobe-Korea1".equals (ordText)) { return true; } } catch (Exception e) {} } } PdfObject enc = font.get ("Encoding"); if (enc instanceof PdfSimpleObject) { if ((flags & 0X04) != 0) { // symbolic font? return false; // symbolic font must not have encoding } String encName = ((PdfSimpleObject) enc).getStringValue (); if ("WinAnsiEncoding".equals (encName) || "MacRomanDecoding".equals (encName) || "MacExpertDecoding".equals (encName)) { return true; } } /* * Fixed contributed by FCLA, 2007-05-30, to permit * indirect as well as direct stream object. * * PdfStream toUni = (PdfStream) font.get ("ToUnicode"); */ PdfObject toUni = (PdfObject) font.get ("ToUnicode"); if (toUni == null) { _levelA = false; } } catch (Exception e) { return false; } return true; } /* Check the type 0 font map for compatibility with CIDFont and CMap dictionaries */ private boolean type0FontsOK () { Map type0Map = _module.getFontMap (PdfModule.F_TYPE0); if (type0Map == null) { return true; } try { PdfSimpleObject ob; Iterator iter = type0Map.values().iterator (); while (iter.hasNext ()) { String registry = null; String ordering = null; PdfDictionary font = (PdfDictionary) iter.next (); // The Encoding entry can be a predefined name // or a dictionary. If it's a dictionary, it // must be compatible with the CIDSystemInfo // dictionaries. PdfObject enc = font.get ("Encoding"); if (enc instanceof PdfDictionary) { // it's a CMap dictionary. PdfDictionary info = (PdfDictionary) _module.resolveIndirectObject (((PdfDictionary) enc).get ("CIDSystemInfo")); ob = (PdfSimpleObject) info.get ("Registry"); registry = ob.getStringValue (); ob = (PdfSimpleObject) info.get ("Ordering"); ordering = ob.getStringValue (); } PdfArray descendants = (PdfArray) font.get ("DescendantFonts"); // PDF 1.4 and previous allow only a single // descendant font, and this must be a CIDFont. // While Adobe warns that this may change in a // previous version, we require here that the // first descendant be a CIDFont, and ignore any others. Vector subfonts = descendants.getContent (); /* * Fix contributed by FCLA, 2007-05-30, to permit the * subfonts array to store PdfObject as well as * PdfDictionary. * * PdfDictionary subfont = * (PdfDictionary) subfonts.elementAt (0); * subfont = (PdfDictionary) * _module.resolveIndirectObject (subfont); */ PdfObject objFont = (PdfObject) subfonts.elementAt (0); PdfDictionary subfont = (PdfDictionary) _module.resolveIndirectObject (objFont); PdfSimpleObject subtype = (PdfSimpleObject) subfont.get ("Subtype"); /* * Fix conributed by FCLA, 2007-05-30, to permit the * comparison of a general PdfSimpleObject to a string. * * if (!"CIDFontType0".equals (subtype) && * !"CIDFontType2".equals (subtype)) { */ if (!subtype.getStringValue ().equals ("CIDFontType0") && !subtype.getStringValue ().equals ("CIDFontType2")) { return false; } // If there's no CMap dictionary and this is the // first subfont, save the registration and // ordering strings. Otherwise make sure they match. PdfDictionary info = (PdfDictionary) _module.resolveIndirectObject (subfont.get ("CIDSystemInfo")); ob = (PdfSimpleObject) info.get ("Registry"); String obstr = ob.getStringValue (); if (registry == null) { registry = obstr; } else { if (!registry.equals (obstr)) { return false; } } ob = (PdfSimpleObject) info.get ("Ordering"); obstr = ob.getStringValue (); /* Fix contributed by FCLA, 2007-05-30, to fix an apparent * typo. * * if (registry == null) { */ if (ordering == null) { ordering = obstr; } else { if (!ordering.equals (obstr)) { return false; } } // A type 2 subfont must meet certain restrictions if ("CIDFontType2".equals (subtype.getStringValue())) { // MODIF THL 2010/10/11 Accept IndirectObject PdfObject cgmap1 = subfont.get ("CIDToGIDMap"); if (cgmap1 == null) { return false; } PdfObject cgmap; if (cgmap1 instanceof PdfIndirectObj) { cgmap = (PdfObject) _module.resolveIndirectObject (cgmap1); } else { cgmap = cgmap1; } if (cgmap instanceof PdfSimpleObject) { if (!"Identity".equals (((PdfSimpleObject)cgmap).getStringValue ())) { return false; } } else if (!(cgmap instanceof PdfStream)) { return false; } } } } catch (Exception e) { return false; } return true; } /* Check if a font has an acceptable encoding. This applies only to TrueType fonts. */ private boolean ttFontEncodingOK (PdfDictionary font) { try { PdfDictionary desc = (PdfDictionary) _module.resolveIndirectObject (font.get ("FontDescriptor")); // Not all fonts -- in particular, the standard 14 -- // are required to have FontDescriptors. How do we // handle encoding in those cases? if (desc == null) { return true; // for now, give benefit of doubt } PdfSimpleObject flagObj = (PdfSimpleObject) desc.get ("Flags"); int flags = flagObj.getIntValue (); if ((flags & 4) == 0) { // It's a nonsymbolic font, check the Encoding PdfSimpleObject encoding = (PdfSimpleObject) font.get ("Encoding"); String encStr = encoding.getStringValue (); if (!"MacRomanEncoding".equals (encStr) && !"WinAnsiEncoding".equals (encStr)) { return false; } } } catch (Exception e) { return false; } return true; } /* Check if the interactive form is OK */ private boolean formOK (PdfDictionary form) { // Guess what? It's another hierarchy of dictionaries! // So let's walk through the fields... try { PdfArray fields = (PdfArray) form.get ("Fields"); Vector fieldVec = fields.getContent (); for (int i = 0; i < fieldVec.size (); i++) { PdfDictionary field = (PdfDictionary) fieldVec.elementAt (i); if (!fieldOK (field)) { return false; } } // The NeedAppearances flag either shall not be present // or shall be false. PdfSimpleObject needapp = (PdfSimpleObject) form.get ("NeedAppearances"); if (needapp != null) { if (!needapp.isFalse ()) { return false; } } } catch (Exception e) { return false; } return true; } /* Check a form field for validity. We don't allow form fields to have AA (Additional Actions) dictionaries */ private boolean fieldOK (PdfDictionary field) { try { // A Widget annotation dictionary or Field dictionary // shall not contain the A or AA keys. if (field.get ("AA") != null) { return false; } if (field.get ("A") != null) { return false; } // Every form field shall have an appearance dictionary // associated with the field's data. if (field.get ("DR") == null) { return false; } PdfArray kids = (PdfArray) field.get ("Kids"); // Now, just to complicate things, the contents of // the array might be subfield dictionaries or might // be widget annotations. Oh, and neither one has // a required Type entry. // We only case about subfields. if (kids != null) { Vector kidVec = kids.getContent (); for (int i = 0; i < kidVec.size (); i++) { PdfDictionary kid = (PdfDictionary) kidVec.elementAt (i); // The safest way to check if this is a field seems // to be to look for the required Parent entry. if (kid.get ("Parent") != null) { if (!fieldOK (kid)) { return false; } } } } } catch (Exception e) { return false; } return true; } /* Walk through the page tree and check all Resources dictionaries that we find. Along the way, we check several things: Color spaces. The document may not have both CMYK and RGB color spaces. Extended graphic states. XObjects. */ private boolean resourcesOK () { PageTreeNode docTreeRoot = _module.getDocumentTree (); try { docTreeRoot.startWalk (); DocNode docNode; for (;;) { docNode = docTreeRoot.nextDocNode (); if (docNode == null) { break; } // Check for node-level resources PdfDictionary rsrc = docNode.getResources (); if (rsrc != null) { // Check color spaces. PdfDictionary cs = (PdfDictionary) _module.resolveIndirectObject (rsrc.get ("ColorSpace")); if (!colorSpaceOK (cs)) { return false; } // Check extended graphics state. PdfDictionary gs = (PdfDictionary) _module.resolveIndirectObject (rsrc.get ("ExtGState")); if (!extGStateOK (gs)) { return false; } // Check XObjects. PdfDictionary xo = (PdfDictionary) _module.resolveIndirectObject (rsrc.get ("XObject")); if (!xObjectsOK (xo)) { return false; } } // Check content streams for resources if (docNode instanceof PageObject) { List streams = ((PageObject) docNode).getContentStreams (); if (streams != null) { Iterator iter = streams.listIterator (); while (iter.hasNext ()) { PdfStream stream = (PdfStream) iter.next (); PdfDictionary dict = stream.getDict (); PdfDictionary rs = (PdfDictionary) dict.get ("Resources"); if (rs != null) { PdfDictionary cs = (PdfDictionary) _module.resolveIndirectObject (rs.get ("ColorSpace")); if (!colorSpaceOK (cs)) { return false; } PdfDictionary gs = (PdfDictionary) _module.resolveIndirectObject (rs.get ("ExtGState")); if (!extGStateOK (gs)) { return false; } PdfDictionary xo = (PdfDictionary) _module.resolveIndirectObject (rs.get ("XObject")); if (!xObjectsOK (xo)) { return false; } } // Also check for filters PdfObject filters = dict.get ("Filter"); if (hasFilters (filters, excludedFilters)) { return false; } } } // Also check page objects for annotations. // Must be one of the prescribed types, but not // Movie, Sound, or FileAttachment. PdfArray annots = ((PageObject) docNode).getAnnotations (); if (annots != null) { Vector annVec = annots.getContent (); for (int i = 0; i < annVec.size (); i++) { PdfDictionary annDict = (PdfDictionary) annVec.elementAt (i); PdfSimpleObject subtypeObj = (PdfSimpleObject) annDict.get ("Subtype"); String subtypeVal = subtypeObj.getStringValue (); boolean stOK = false; int j; for (j = 0; j < annotTypes.length; j++) { if (annotTypes[j].equals (subtypeVal)) { stOK = true; break; } } if (stOK) { return false; } // If it's a Widget, it can't have an AA entry if ("Widget".equals (subtypeVal)) { if (annDict.get ("AA") != null) { return false; } } // For non-text annotation types, the // Contents key is required. for (j = 0; i < nonTextAnnotTypes.length; j++) { if (nonTextAnnotTypes[i].equals (subtypeVal)) { if (annDict.get ("Contents") == null) { return false; } else { // Contents found, this dict OK break; } } } // if the CA key is present, it must have a // value of 1.0. PdfSimpleObject ca = (PdfSimpleObject) annDict.get ("CA"); if (ca != null) { double caVal = ca.getDoubleValue (); if (caVal != 1.0) { return false; } } } } } } } catch (Exception e) { return false; } return true; // passed all tests } /* Check if a color space dictionary is conformant */ private boolean colorSpaceOK (PdfDictionary cs) { // If it's null, that's fine. if (cs == null) { return true; } // Walk through the color space dictionary, // checking device ("uncalibrated") color spaces Iterator iter = cs.iterator (); while (iter.hasNext ()) { PdfObject res = (PdfObject) iter.next (); if (res instanceof PdfArray) { Vector resv = ((PdfArray) res).getContent (); PdfSimpleObject snameobj = (PdfSimpleObject) resv.elementAt (0); String sname = snameobj.getStringValue (); boolean oldHasUncalCS = hasUncalCS; if ("DeviceCMYK".equals (sname)) { hasDevCMYK = true; hasUncalCS = true; } else if ("DeviceRGB".equals (sname)) { hasDevRGB = true; hasUncalCS = true; } else if ("DeviceGray".equals (sname)) { hasUncalCS = true; } // If this is the first time we've hit an uncalibrated // color space, check for an appropriate OutputIntent dict. if (hasUncalCS && !oldHasUncalCS) { if (!checkUncalIntent ()) { return false; } } if (hasDevRGB && hasDevCMYK) { return false; // can't have both in same file } } } return true; // passed all tests } /* If there is an uncalibrated color space, then there must be a * "PDF/A-1 OutputIntent." */ private boolean checkUncalIntent () { try { // First off, there must be an OutputIntents array // in the document catalog dictionary. PdfDictionary catDict = _module.getCatalogDict (); PdfArray intentsArray = (PdfArray) _module.resolveIndirectObject (catDict.get ("OutputIntents")); if (intentsArray == null) { return false; } Vector intVec = intentsArray.getContent (); PdfStream theOutProfile = null; boolean pdfaProfileSeen = false; for (int i = 0; i < intVec.size (); i++) { // Multiple intents arrays are allowed, but all must use // the same DestOutputProfile object or none, and there // must be at least one that as one and has GTS_PDFA1 as // the value of its S key. PdfDictionary intent = (PdfDictionary) intVec.elementAt (0); PdfSimpleObject outCond = (PdfSimpleObject) intent.get ("OutputCondition"); if (outCond != null) { PdfStream outProfile = (PdfStream) _module.resolveIndirectObject (intent.get ("DestOutputProfile")); if (outProfile != null) { if (theOutProfile != null) { // all output profiles must be the same. if (outProfile != theOutProfile) { return false; } } else { // All subsequent output profiles must matcht his. theOutProfile = outProfile; } PdfSimpleObject subtype = (PdfSimpleObject) intent.get ("S"); if (subtype != null) { if ("GTS_PDFA1".equals (subtype.getStringValue())) { pdfaProfileSeen = true; } } } } } if (theOutProfile == null || !pdfaProfileSeen) { return false; } } catch (Exception e) { return false; } return true; } /* Check if the outlines (if any) are OK. This is a check on Actions, and the module has already checked if there are Actions in the outlines, so if there aren't any, we save the time to do this test. */ private boolean outlinesOK () { if (!_module.getActionsExist ()) { return true; } PdfDictionary outlineDict = _module.getOutlineDict (); if (outlineDict == null) { return true; } try { PdfDictionary item = (PdfDictionary) _module.resolveIndirectObject (outlineDict.get ("First")); while (item != null) { if (!checkOutlineItem (item)) { return false; } item = (PdfDictionary) _module.resolveIndirectObject (((PdfDictionary) item).get ("Next")); } } catch (Exception e) { return false; } return true; } /* Check an outline item, going down recursively */ private boolean checkOutlineItem (PdfDictionary item) { // Check if there are actions for this item try { PdfDictionary action = (PdfDictionary) _module.resolveIndirectObject (item.get ("A")); if (action != null) { if (!actionOK (action)) { return false; } } PdfDictionary child = (PdfDictionary) _module.resolveIndirectObject (item.get ("First")); while (child != null) { if (!checkOutlineItem (child)) { return false; } child = (PdfDictionary) _module.resolveIndirectObject (child.get ("Next")); } } catch (Exception e) { return false; } return true; } /* Validate an Action dictionary. Actions exclude certain types. */ private boolean actionOK (PdfDictionary action) { int i; // For some reason, an action's type is an "S" entry, not // a "Subtype" entry. try { PdfSimpleObject actType = (PdfSimpleObject) action.get ("S"); String actStr = actType.getStringValue (); // Note: I should also be checking for the set-state // and no-op actions, which are prohibited; but since // the documentation I can find doesn't say what the // actual names for these actions are, it's tough to // exclude them, and I'd rather not guess the names. for (i = 0; i < excludedActions.length; i++) { if (excludedActions[i].equals (actStr)) { return false; } } // An action can have a "Next" entry which is either // another action or an array of actions. Need to follow // the whole tree to make sure all actions are legit. PdfObject next = action.get ("Next"); if (next instanceof PdfDictionary) { if (!actionOK ((PdfDictionary) next)) { return false; } } else if (next instanceof PdfArray) { Vector nextVec = ((PdfArray) next).getContent (); for (i = 0; i < nextVec.size (); i++) { PdfDictionary nact = (PdfDictionary) nextVec.elementAt (i); if (!actionOK (nact)) { return false; } } } else if (next != null) { return false; } } catch (Exception e) { return false; } return true; } /* The ExtGState resource may not have a TR key, or a TR2 with a value other than "Default". */ private boolean extGStateOK (PdfDictionary gs) { if (gs == null) { // no object means no problem return true; } try { PdfObject tr = gs.get ("TR"); PdfObject tr2 = gs.get ("TR2"); if (tr != null) { return false; } if (tr2 != null) { String tr2Val = ((PdfSimpleObject) tr2).getStringValue (); if (!"Default".equals (tr2Val)) { return false; } } // RI is restricted to the traditional 4 rendering intents PdfSimpleObject ri = (PdfSimpleObject) gs.get ("RI"); if (ri != null) { String riVal = ri.getStringValue (); if (!validIntentString (riVal)) { return false; } } // SMask is allowed only with a value of "None". PdfSimpleObject smask = (PdfSimpleObject) gs.get ("SMask"); if (smask != null) { String smVal = smask.getStringValue (); if (!"None".equals (smVal)) { return false; } } // BM, if present, must be "Normal" or "Compatible" PdfSimpleObject blendMode = (PdfSimpleObject) gs.get ("BM"); if (blendMode != null) { String bmVal = blendMode.getStringValue (); if (!"Normal".equals (bmVal) && !"Compatible".equals (bmVal)) { return false; } } // CA and ca must be 1.0, if present PdfSimpleObject ca = (PdfSimpleObject) gs.get ("CA"); double caVal; if (ca != null) { caVal = ca.getDoubleValue (); if (caVal != 1.0) { return false; } } ca = (PdfSimpleObject) gs.get ("ca"); if (ca != null) { caVal = ca.getDoubleValue (); if (caVal != 1.0) { return false; } } } catch (Exception e) { return false; } return true; // passed all tests } /** * Checks a single XObject for xObjectsOK. */ protected boolean xObjectOK (PdfDictionary xo) { if (xo == null) { // no XObject means no problem return true; } try { // PostScript XObjects aren't allowed. // Image XObjects must meet certain tests. PdfSimpleObject subtype = (PdfSimpleObject) xo.get ("Subtype"); if (subtype != null) { String subtypeVal = subtype.getStringValue (); if ("PS".equals (subtypeVal)) { // PS XObjects aren't allowed. return false; } if ("Image".equals (subtypeVal)) { if (!imageObjectOK (xo)) { return false; } } if ("Form".equals (subtypeVal)) { if (!formObjectOK (xo)) { return false; } } } } catch (Exception e) { return false; } return true; } /** Checks if a Form xobject is valid. This overrides the method in XProfileBase. */ protected boolean formObjectOK (PdfDictionary xo) { // PDF/A elements can't have an OPI or Ref key in Form xobjects. if (xo.get ("OPI") != null || xo.get ("Ref") != null) { return false; } return true; } /** Checks if a single image XObject fits the profile */ protected boolean imageObjectOK (PdfDictionary xo) { try { // OPI and Alternates keys are disallowed if (xo.get ("OPI") != null || xo.get ("Alternates") != null) { return false; } // Check against LZW filter PdfObject filters = xo.get ("Filter"); if (hasFilters (filters, excludedFilters)) { return false; } // Interpolate is allowed only if its value is false. PdfSimpleObject interp = (PdfSimpleObject) xo.get ("Interpolate"); if (interp != null) { if (!interp.isFalse ()) { return false; } } // Intent must be one of the four standard rendering intents, // if present. PdfSimpleObject intent = (PdfSimpleObject) xo.get ("Intent"); if (intent != null) { String intentStr = intent.getStringValue (); if (! validIntentString (intentStr)) { return false; } } } catch (Exception e) { return false; } return true; } private boolean validIntentString (String str) { return ("RelativeColorimetric".equals (str) || "AbsoluteColorimetric".equals (str) || "Perceptual".equals (str) || "Saturation".equals (str)); } // See if the metadata stream from the catalog dictionary is OK private boolean metadataOK (PdfStream metadata) { // Presence of metadata is required if (metadata == null) { return false; } try { PdfDictionary metaDict = metadata.getDict (); if (metaDict.get ("Filter") != null) { // We just metadata we didn't like. Filters aren't allowed. return false; } // Create an InputSource to feed the parser. SAXParserFactory factory = SAXParserFactory.newInstance(); factory.setNamespaceAware (true); XMLReader parser = factory.newSAXParser ().getXMLReader (); //InputStream stream = new StreamInputStream (metadata, _module.getFile ()); PdfXMPSource src = new PdfXMPSource (metadata, _module.getFile ()); XMPHandler handler = new XMPHandler (); parser.setContentHandler (handler); parser.setErrorHandler (handler); // We have to parse twice. The first time, we may get // an encoding change as part of an exception thrown. If this // happens, we create a new InputSource with the encoding, and // continue. try { parser.parse (src); if (!handler.isPdfaCompliant ()) { return false; } } catch (SAXException se) { String msg = se.getMessage (); if (msg != null && msg.startsWith ("ENC=")) { // encoding change is not allowed with PDF/A, so there's no // need to re-parse return false; // String encoding = msg.substring (5); // try { // //Reader rdr = new InputStreamReader (stream, encoding); // src = new PdfXMPSource (metadata, _module.getFile (), encoding); // parser.parse (src); // if (!handler.isPdfaCompliant ()) { // return false; // } // } // catch (UnsupportedEncodingException uee) { // return false; // } } } } catch (Exception e) { return false; } return true; } } jhove/classes/edu/harvard/hul/ois/jhove/module/pdf/AProfileLevelA.java0000644000707400001440000000342111225650305025107 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004-2005 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.pdf; import edu.harvard.hul.ois.jhove.module.PdfModule; /** * PDF profile checker for PDF/A-1 documents, Level A. * See ISO 19005-1:2005(E), "Document Imaging Applications * Application Issues". * * This profile checker is completely dependent on AProfile. * It simply queries an instance of AProfile for Level A compliance. * * @author Gary McGath * */ public class AProfileLevelA extends PdfProfile { /* AProfile to which this profile is linked. */ private AProfile _aProfile; /** * Constructor. * Creates an AProfileLevelA object for subsequent testing. * * @param module The module under which we are checking the profile. * */ public AProfileLevelA(PdfModule module) { super (module); _profileText = "ISO PDF/A-1, Level A"; } /** * Returns true if the document satisfies the profile * at Level A. This returns a meaningful result only if * satisfiesThisProfile() has previously * been called on the profile assigned by setAProfile. * */ public boolean satisfiesThisProfile() { return _aProfile.satisfiesLevelA(); } /** * Calling setAProfile links this AProfile to a TaggedProfile. * This class gets all its information from the linked AProfile, * so calling this is mandatory. */ public void setAProfile (AProfile tpr) { _aProfile = tpr; } } jhove/classes/edu/harvard/hul/ois/jhove/module/pdf/ArrayEnd.java0000644000707400001440000000103610771562750024035 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.pdf; /** * Class for Tokens which represent the "]" that closes an array. */ public class ArrayEnd extends Token { /** Creates an instance of an ArrayEnd */ public ArrayEnd () { super (); } } jhove/classes/edu/harvard/hul/ois/jhove/module/pdf/ArrayStart.java0000644000707400001440000000104310771562735024425 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.pdf; /** * Class for Tokens which represent the "[" that opens an array. */ public class ArrayStart extends Token { /** Creates an instance of an ArrayStart */ public ArrayStart () { super (); } } jhove/classes/edu/harvard/hul/ois/jhove/module/pdf/Ascii85FilterStream.java0000644000707400001440000000147710771562737026075 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2005 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.pdf; import java.io.FilterInputStream; import java.io.InputStream; /** * This is a stub which may be implemented in the future. * It appears to be unnecessary for object streams and cross-reference * streams created by any version of Acrobat through 7.0, and we * don't look at other types of streams. * * @author Gary McGath * */ public class Ascii85FilterStream extends FilterInputStream { /** * @param in */ public Ascii85FilterStream(InputStream in) { super(in); } } jhove/classes/edu/harvard/hul/ois/jhove/module/pdf/AsciiHexFilterStream.java0000644000707400001440000000150110771562750026344 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2005 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.pdf; import java.io.FilterInputStream; import java.io.InputStream; /** * This is a stub which may be implemented in the future. * It appears to be unnecessary for object streams and cross-reference * streams created by any version of Acrobat through 7.0, and we * don't look at other types of streams. * * @author Gary McGath * */ public class AsciiHexFilterStream extends FilterInputStream { /** * @param in */ public AsciiHexFilterStream(InputStream in) { super(in); } } jhove/classes/edu/harvard/hul/ois/jhove/module/pdf/Comment.java0000644000707400001440000000102610771562742023732 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.pdf; /** * Class for Tokens which represent PDF comments. */ public class Comment extends StringValuedToken { /** Creates an instance of a Comment */ public Comment () { super (); } } jhove/classes/edu/harvard/hul/ois/jhove/module/pdf/CrossRefStream.java0000644000707400001440000002303211205003736025215 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2005 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.pdf; import java.io.*; import java.util.*; /** * This class implements the Cross-Reference Stream, an alternative * to the Cross-Reference Table starting in PDF 1.4. * * A cross-reference stream is identified by a startxref keyword, * as opposed to the xref keyword which identifies the old-style * cross-reference table. * * JHOVE supports only FlateDecode as a filter for cross-reference * streams. This is consistent with the implementation limitation * described in Appendix H of the PDF manual for Acrobat 6 and earlier. * * * @author Gary McGath * */ public class CrossRefStream { private PdfStream _xstrm; // The underlying Stream object. private PdfDictionary _dict; private int _size; private int[] _index; private int[] _fieldSizes; private int _freeCount; private Filter[] _filters; private int _entriesRead; private int _bytesPerEntry; private long _prevXref; // byte offset to previous xref stream, if any /* Per-object variables. */ private int _objType; private int _objNum; private int _objField1; private int _objField2; /** * Constructor. * * @param xstrm PdfStream object which contains a presumed * cross-reference stream. */ public CrossRefStream(PdfStream xstrm) { _xstrm = xstrm; _dict = xstrm.getDict (); _freeCount = 0; } /** Returns true if the PdfStream object meets * the requirements of a cross-reference stream. Also extracts * information from the dictionary for subsequent processing. */ public boolean isValid () { try { PdfObject typeobj = _dict.get ("Type"); String typeStr = null; if (typeobj instanceof PdfSimpleObject) { typeStr = ((PdfSimpleObject) typeobj).getStringValue (); if (!("XRef".equals (typeStr))) { return false; } } if (typeStr == null) { return false; } PdfObject sizeobj = _dict.get ("Size"); if (sizeobj instanceof PdfSimpleObject) { _size = ((PdfSimpleObject) sizeobj).getIntValue(); } else { return false; } // The Index entry is optional, but must have the right // format if it's present. PdfObject indexobj = _dict.get ("Index"); if (indexobj instanceof PdfArray) { Vector vec = ((PdfArray) indexobj).getContent(); // This is supposed to have a size of 2. _index = new int[2]; PdfSimpleObject idx = (PdfSimpleObject) vec.get (0); _index[0] = idx.getIntValue (); idx = (PdfSimpleObject) vec.get (1); _index[1] = idx.getIntValue (); } else { // Set up default index. _index = new int[] { 0, _size }; } // Get the field sizes. PdfObject wObj = _dict.get ("W"); if (wObj instanceof PdfArray) { Vector vec = ((PdfArray) wObj).getContent (); int len = vec.size (); _fieldSizes = new int[len]; for (int i = 0; i < len; i++) { PdfSimpleObject ob = (PdfSimpleObject) vec.get (i); _fieldSizes[i] = ob.getIntValue (); } } // Get the offset to the previous xref stream, if any. PdfObject prevObj = _dict.get ("Prev"); if (prevObj instanceof PdfSimpleObject) { _prevXref = ((PdfSimpleObject) prevObj).getIntValue(); } else { _prevXref = -1; } // Get the filter, for subsequent decompression. // We're guaranteed by the spec that this won't be a decryption // filter. _filters = _xstrm.getFilters(); // Why isn't this being used? // passed all tests return true; } catch (Exception e) { return false; } } /** Prepares for reading the Stream. * If the filter List includes one which we don't support, throws a * PdfException. */ public void initRead (RandomAccessFile raf) throws IOException, PdfException { Stream strm = _xstrm.getStream (); strm.setFilters (_xstrm.getFilters ()); strm.initRead (raf); _entriesRead = 0; /* Calculate the total bytes per entry. This may have * some utility. */ _bytesPerEntry = 0; for (int i = 0; i < _fieldSizes.length; i++) { _bytesPerEntry += _fieldSizes[i]; } } /** Reads the next object in the stream. * * After calling readObject, it is possible to * call accessors to get information about the object. * For the moment, we * punt on the question of how to deal with Object Streams. * * Free objects are skipped over while being counted. After * readNextObject() returns false, the caller * may call getFreeCount() to determine the * number of free objects. * * @return true if there is an object, false * if no more objects are available. */ public boolean readNextObject () throws IOException { /* Get the field type. */ int wid; Stream is = _xstrm.getStream (); int i; int b; for (;;) { /* Loop till we find an actual object; we just count * type 0's, which are free entries. */ wid = _fieldSizes[0]; if (_entriesRead++ >= _index[1]) { return false; // Read full complement } if (wid != 0) { /* "Fields requiring more than one byte are stored * with the high-order byte first." */ _objType = 0; for (i = 0; i < wid; i++) { b = is.read (); if (b < 0) { return false; } _objType = _objType * 256 + b; } } else { _objType = 1; // Default if field width is 0 } wid = _fieldSizes[1]; _objField1 = 0; for (i = 0; i < wid; i++) { b = is.read (); if (b < 0) { return false; } _objField1 = _objField1 * 256 + b; } wid = _fieldSizes[2]; _objField2 = 0; for (i = 0; i < wid; i++) { b = is.read (); if (b < 0) { return false; } _objField2 = _objField2 * 256 + b; } if (_objType != 0) { _objNum = _index[0] + _entriesRead - 1; return true; } else { ++_freeCount; } } } /** Returns number of the last object read by * readNextObject (). * Do not call if readNextObject () * returns false. */ public int getObjNum () { return _objNum; } /** Returns true if the last object read by * readNextObject () is a compressed object. * Do not call if readNextObject () * returns false. */ public boolean isObjCompressed () { return (_objType == 2); } /** Returns the number of free objects detected. This may * be called after readNextObject returns * false, signifying that all the objects * have been read and all the free objects counted. */ public int getFreeCount () { return _freeCount; } /** Returns the total object count. */ public int getNumObjects () { return _index[0] + _index[1]; } /** Returns the offset of the last object object read. * This is meaningful only if the last object read * was type 1 (uncompressed). */ public int getOffset () { return _objField1; } /** Returns the object number of the content stream in * which this object is stored. * This is nmeaningful only if the last object read * was type 2 (compressed in content stream). */ public int getContentStreamObjNum () { return _objField1; } /** Returns the offset of the previous cross-reference stream, * or -1 if none is specified. */ public long getPrevXref () { return _prevXref; } /** Returns the content stream index of the last object read. * This is nmeaningful only if the last object read * was type 2 (compressed in content stream). */ public int getContentStreamIndex () { return _objField2; } } jhove/classes/edu/harvard/hul/ois/jhove/module/pdf/Destination.java0000644000707400001440000001131410771562750024611 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.pdf; import edu.harvard.hul.ois.jhove.module.PdfModule; import java.util.*; /** * Class encapsulating PDF destination objects, which refer * to a page in the document. * * We need to make two different kinds of distinctions: between * destinations that make an indirect and a direct reference to * a page; and between destinations that have been reached by * a direct and an indirect reference. The PDF spec allows * only one level of indirection, so each of these forms has * options not available to the other. * * We call a destination which has been reached directly an * unnamed destination, and one which has been reached indirectly * a named destination. We call a destination which has an * indirect target an indirect destination, and one which has * a page object as a target a direct destination. Applying * the PDF documentation, we find that a destination can never * be both named and indirect. In other words, there are really * two cases, involving three kinds of destinations: * *

    *
  • An unnamed, direct destination, which refers to the page * object. *
  • An unnamed, indirect destination, which refers to a * named, direct destination, which refers to the page object. *
*/ public final class Destination { /****************************************************************** * PRIVATE CLASS FIELDS. ******************************************************************/ /* Flag indicating destination is indirect. */ private boolean _indirect; /* Name of indirect destination. */ private PdfSimpleObject _indirectDest; /* Page object for explicit destination. */ private PdfDictionary _pageDest; /** * Constructor. If this is a named destination, the destObj * may be a PdfArray or a PdfDictionary; if this is not a * named destination, the destObj may be a PdfSimpleObject * (encapsulating a Literal or Name) or a PdfDictionary. * * @param destObj The destination object * @param module The invoking PdfModule * @param named Flag indicating whether this object came * from a named destination. */ public Destination (PdfObject destObj, PdfModule module, boolean named) throws PdfException { try { if (!named && destObj instanceof PdfSimpleObject) { _indirect = true; _indirectDest = (PdfSimpleObject) destObj; } else if (destObj instanceof PdfArray) { // We extract only the page reference, not the view. _indirect = false; Vector v= ((PdfArray) destObj).getContent (); _pageDest = (PdfDictionary) module.resolveIndirectObject ((PdfObject) v.elementAt (0)); } else if (named && destObj instanceof PdfDictionary) { PdfArray destObj1 = (PdfArray) ((PdfDictionary) destObj).get ("D"); // the D entry is just like the array above. _indirect = false; Vector v= ((PdfArray) destObj1).getContent (); _pageDest = (PdfDictionary) module.resolveIndirectObject ((PdfObject) v.elementAt (0)); } else { throw new Exception (""); } } catch (Exception e) { throw new PdfInvalidException ("Invalid destination object"); } } /** * Returns true if the destination is indirect. */ public boolean isIndirect () { return _indirect; } /** * Returns the string naming the indirect destination. * Returns null if the destination is not indirect. */ public PdfSimpleObject getIndirectDest () { return _indirectDest; } /** * Returns the page object dictionary if the destination * is direct. Returns null if the destination is not * direct. */ public PdfDictionary getPageDest () { return _pageDest; } /** * Returns the object number of the page object dictionary * if the destination is direct. Throws a NullPointerException * otherwise. */ public int getPageDestObjNumber () throws NullPointerException { return _pageDest.getObjNumber (); } } jhove/classes/edu/harvard/hul/ois/jhove/module/pdf/DictionaryEnd.java0000644000707400001440000000107010771562741025062 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.pdf; /** * Class for Tokens which represent the ">>" sequence that ends a Dictionary. */ public class DictionaryEnd extends Token { /** Creates an instance of a DictionaryEnd */ public DictionaryEnd () { super (); } } jhove/classes/edu/harvard/hul/ois/jhove/module/pdf/DictionaryStart.java0000644000707400001440000000107710771562747025466 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.pdf; /** * Class for Tokens which represent the "<<" sequence that opens a Dictionary. */ public class DictionaryStart extends Token { /** Creates an instance of a DictionaryStart */ public DictionaryStart () { super (); } } jhove/classes/edu/harvard/hul/ois/jhove/module/pdf/DocNode.java0000644000707400001440000001330710771562744023652 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.pdf; import edu.harvard.hul.ois.jhove.module.PdfModule; import java.io.*; /** * Abstract class for nodes of a PDF document tree. */ public abstract class DocNode { /** The PdfModule this node is associated with. */ protected PdfModule _module; /** The parent node of this node. */ protected PageTreeNode _parent; /** The dictionary which defines this node. */ protected PdfDictionary _dict; /** True if this node is a PageObject. */ protected boolean _pageObjectFlag; /** Set to true when all subnodes of this node * have been iterated through following a StartWalk. */ protected boolean _walkFinished; /** * Superclass constructor. * @param module The PdfModule under which we're operating * @param parent The parent node in the document tree; * may be null only for the root node * @param dict The dictionary object on which this node * is based */ public DocNode (PdfModule module, PageTreeNode parent, PdfDictionary dict) { _module = module; _parent = parent; _dict = dict; // Debug code PdfIndirectObj parentRef = (PdfIndirectObj) _dict.get ("Parent"); } /** * Returns true if this node is a PageObject. */ public boolean isPageObject () { return _pageObjectFlag; } /** * Initialize an iterator through the descendants of this node. */ public abstract void startWalk (); /** * Get the next PageObject which is under this node. */ public abstract PageObject nextPageObject (); /** * Get the next DocNode which is under this node. * All PageTreeNodes and PageObjects are eventually returned * by walking through a structure with nextNode. */ public abstract DocNode nextDocNode (); /** * Returns the parent of this node. */ public DocNode getParent () { return _parent; } /** * Returns the page object or page tree node dictionary from * which this object was constructed. */ public PdfDictionary getDict () { return _dict; } /** * Get the Resources dictionary. Either a PageTreeNode or * a PageObject can have a Resources dictionary. Returns * null if there is no Resources dictionary. The object * may be referenced indirectly. */ public PdfDictionary getResources () throws PdfException { String invres = "Invalid Resources Entry in document"; if (_dict == null) { throw new PdfMalformedException ("Missing dictionary in document node"); } try { PdfObject resdict = _dict.get ("Resources"); resdict = _module.resolveIndirectObject (resdict); return (PdfDictionary) resdict; } catch (ClassCastException e) { throw new PdfInvalidException (invres); } catch (IOException f) { throw new PdfInvalidException (invres); } } /** * Returns the dictionary of fonts within the node's Resources * dictionary, if both exist. Otherwise returns null. * The dictionary will most often have indirect object * references as values. What is returned is not a * Font dictionary, but rather a dictionary of Font * dictionaries. */ public PdfDictionary getFontResources () throws PdfException { PdfDictionary resdict = getResources (); if (resdict != null) { try { PdfObject fontdict = (PdfObject) resdict.get("Font"); fontdict = _module.resolveIndirectObject (fontdict); return (PdfDictionary) fontdict; } catch (Exception e) { throw new PdfMalformedException ("Invalid Font entry in Resources"); } } else { return null; } } /** * Get the MediaBox of this node. MediaBox is an inheritable * property, so it walks up the chain of ancestors if it doesn't * contain one. Returns null if none. Throws a * PdfInvalidException if an invalid MediaBox is found. */ public PdfArray getMediaBox () throws PdfInvalidException { final String badbox = "Malformed MediaBox in page tree"; try { PdfArray mbox = (PdfArray) get ("MediaBox", true); if (mbox.toRectangle () != null) { return mbox; } else { // There's a MediaBox, but it's not a rectangle throw new PdfInvalidException (badbox); } } catch (Exception e) { throw new PdfInvalidException (badbox); } } /** * Get an named property. If this object doesn't * have the specified property and inheritable * is true, walks up the chain of ancestors * to try to find one. If no ancestor has the property or * inheritable is false, returns null. */ public PdfObject get (String key, boolean inheritable) { PdfObject val = _dict.get (key); if (val == null) { if (_parent == null || !inheritable) { return null; } else { return _parent.get (key, inheritable); } } else { return val; } } } jhove/classes/edu/harvard/hul/ois/jhove/module/pdf/FileSpecification.java0000644000707400001440000000575310771562751025723 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.pdf; /** * A class which encapsulates a file specification in PDF. A file * specification may be given as either a string or a dictionary. * The specification is converted to a string according to the following * rules: If a PDF string object is the file specifier, that string * is used, without attempting to convert file separators to the local * file system. If a PDF dictionary is used, one of the following is * used, in decreasing order of preference: * *
    *
  • The system-neutral file specification string *
  • The Unix file specification string *
  • The DOS file specification string *
  • The Macintosh file specification string *
*/ public class FileSpecification { String _specString; PdfObject _sourceObject; /** * Constructor. * * @param obj A PdfDictionary with the file specification under the * key "F", "Unix", "DOS", or "Mac"; or * a PdfSimpleObject whose string value is the * file specification. If obj is * a dictionary and more than one key is specified, * then the first of the keys F, Unix, DOS, and Mac * to be found is used. */ public FileSpecification (PdfObject obj) throws PdfException { try { _sourceObject = obj; if (obj instanceof PdfDictionary) { PdfDictionary dictObj = (PdfDictionary) obj; PdfSimpleObject pathObj; pathObj = (PdfSimpleObject) dictObj.get ("F"); if (pathObj == null) { pathObj = (PdfSimpleObject) dictObj.get ("Unix"); } if (pathObj == null) { pathObj = (PdfSimpleObject) dictObj.get ("DOS"); } if (pathObj == null) { pathObj = (PdfSimpleObject) dictObj.get ("Mac"); } if (pathObj != null) { _specString = pathObj.getStringValue (); } } else if (obj instanceof PdfSimpleObject) { _specString = ((PdfSimpleObject) obj).getStringValue (); } } catch (ClassCastException e) { throw new PdfInvalidException ("Invalid file specification"); } } /** * Returns the file specification as a string. */ public String getSpecString () { return _specString; } /** * Returns the PdfObject from which the file specification was created. */ public PdfObject getSourceObject () { return _sourceObject; } } jhove/classes/edu/harvard/hul/ois/jhove/module/pdf/FileTokenizer.java0000644000707400001440000000717110771562746025115 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2005 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.pdf; import java.io.*; /** * * Tokenizer subclass which gets data from a RandomAccessFile. * @author Gary McGath * */ public class FileTokenizer extends Tokenizer { /** Current offset to start of bytes stored in _fileBuffer */ private long _fileBufferPositionOffset; /** File buffer */ private byte[] _fileBuffer; /** Size for file buffer */ private static final int FILEBUFSIZE = 4096; /** Number of valid bytes in fileBuffer */ private int _fileBufferBytes; /** Offset to next valid byte in fileBuffer */ private int _fileBufferOffset; public FileTokenizer (RandomAccessFile file) { super (); _file = file; _fileBufferPositionOffset = -1; _fileBuffer = new byte[FILEBUFSIZE]; initFileBuffer (); } private void initFileBuffer () { _fileBufferBytes = 0; _fileBufferOffset = 0; } /** Gets the current position in the file. This method is * aware of buffering. */ public long getFilePos () throws IOException { return _fileBufferPositionOffset + _fileBufferOffset; } /** Gets a character from the file, using a buffer. */ public int readChar () throws IOException { if (_fileBufferOffset >= _fileBufferBytes) { // If the byte size is 0, we can assume a seek was already // done, but otherwise we must seek safety. if (_fileBufferBytes > 0) { long newOffset = _fileBufferPositionOffset + _fileBufferOffset; _file.seek (newOffset); _fileBufferPositionOffset = newOffset; } _fileBufferBytes = _file.read(_fileBuffer); if (_fileBufferBytes <= 0) { throw new EOFException (); } _fileBufferOffset = 0; } return (int) (_fileBuffer[_fileBufferOffset++] & 0XFF); } /** * Set the Tokenizer to a new position in the file. * * @param offset The offset in bytes from the start of the file. */ public void seek (long offset) throws IOException { if (_fileBufferPositionOffset >= 0 && offset >= _fileBufferPositionOffset && offset < _fileBufferPositionOffset + _fileBufferBytes) { // Reposition within the buffer _fileBufferOffset = (int) (offset - _fileBufferPositionOffset); } else { _file.seek (offset); initFileBuffer (); _fileBufferPositionOffset = offset; } seekReset (offset); } /** * Back up a byte so it will be read again. */ public void backupChar () { _fileBufferOffset--; } /** Streams can occur only in files, not in streams, * so some of the initialization of a stream object * goes here. */ protected void initStream (Stream token) throws IOException { token.setOffset (getFilePos ()); } /** Sets the offset of a Stream to the current file position. * Only the file-based tokenizer can do this, which is why this * overrides the Tokenizer method. */ protected void setStreamOffset (Stream token) throws IOException { if (token.getOffset() < 0) { token.setOffset (getFilePos ()); } } } jhove/classes/edu/harvard/hul/ois/jhove/module/pdf/Filter.java0000644000707400001440000000330710771562736023564 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2005 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.pdf; /** * Container for a PDF stream filter. * * @author Gary McGath * */ public class Filter { private String _filterName; private PdfDictionary _decodeParms; /** * Constructor. * * @param name The name of the filter. */ public Filter (String name) { _filterName = name; } /** Returns the name of the filter. */ public String getFilterName () { return _filterName; } /** Returns the DecodeParms dictionary, or null if there is none. */ public PdfDictionary getDecodeParms () { return _decodeParms; } /** Returns the "Name" parameter of the filter, or null * if there is no such parameter. * This is normally associated with a Crypt filter, and * shouldn't be confused with the name of the filter. */ public String getNameParam () { try { if (_decodeParms != null) { PdfSimpleObject obj = (PdfSimpleObject) _decodeParms.get ("Name"); return obj.getStringValue(); } } catch (Exception e) { } return null; } /** Stores the DecodeParms or FDecodeParms dictionary * which is associated with this filter. */ public void setDecodeParms (PdfDictionary parms) { _decodeParms = parms; } } jhove/classes/edu/harvard/hul/ois/jhove/module/pdf/Hexadecimal.java0000644000707400001440000000140310771562744024535 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.pdf; /** * Class for Tokens which represent hexadecimally encoded PDF strings. * This class really has no justification as a separate entity. Except * for the way they're written, hexadecimal strings aren't different in * any way from other strings. * * @deprecated */ public class Hexadecimal extends Literal { /** Creates an instance of a hexadecimal string literal */ public Hexadecimal () { super (); } } jhove/classes/edu/harvard/hul/ois/jhove/module/pdf/Keyword.java0000644000707400001440000000102010771562736023751 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.pdf; /** * Class for Tokens which represent PDF keywords. */ public class Keyword extends StringValuedToken { /** Creates an instance of a Keyword */ public Keyword () { super (); } } jhove/classes/edu/harvard/hul/ois/jhove/module/pdf/LinearizedProfile.java0000644000707400001440000002577110771562734025755 0ustar garyusers package edu.harvard.hul.ois.jhove.module.pdf; import edu.harvard.hul.ois.jhove.module.*; import java.util.*; /** * PDF profile checker for Linearized documents. */ public final class LinearizedProfile extends PdfProfile { /****************************************************************** * PRIVATE CLASS FIELDS. ******************************************************************/ /** * Creates a PdfProfile object for subsequent testing. * */ public LinearizedProfile (PdfModule module) { super (module); _profileText = "Linearized PDF"; } /** * Returns true if the document satisfies the profile. * */ public boolean satisfiesThisProfile () { long fileLength; try { fileLength = _raf.length (); // First we must find the first object from the beginning // of the file. The documentation contradicts the examples // on whether this is an indirect object or not. Based // on the actual files I've seen so far, I think it isn't. PdfObject firstObj = findFirstObject (); if (!(firstObj instanceof PdfDictionary)) { return false; } // Initial checks: that the first object is a linearization // dictionary, and that it has a length element which matches // the length of the file. // All entries in a linearization dictionary must be direct. PdfDictionary lindict = (PdfDictionary) firstObj; if (lindict.get ("Linearized")!= null) { PdfObject lengthObj = lindict.get ("L"); if (lengthObj instanceof PdfSimpleObject) { // The value of L must be the file length Token lengthTok = ((PdfSimpleObject) lengthObj).getToken (); if (lengthTok instanceof Numeric) { long length = ((Numeric) lengthTok).getLongValue (); if (length != fileLength) { return false; } } else { return false; } } else { return false; } } else { return false; } // Next -- check the integrity of the hint tables. // These are described in F.2.5 in the PDF 1.4 manual. // The linearization dictionary must have an 'H' entry // whose values is an array of 2 or 4 integers. PdfArray hintArray = (PdfArray) lindict.get ("H"); if (hintArray != null) { Vector hintVec = hintArray.getContent (); int vecSize = hintVec.size (); if (vecSize != 2 && vecSize != 4) { return false; } // element 0 (and 2, if present) is the offset // of a stream object. Make sure it really is. // Also check elements 1 and 3, which are lengths, // for not overflowing the file. for (int i = 0; i < vecSize; i += 2) { PdfSimpleObject hobj = (PdfSimpleObject) _module.resolveIndirectObject ((PdfObject) hintVec.elementAt (i)); Numeric hnum = (Numeric) hobj.getToken (); long hoffset = hnum.getLongValue (); hobj = (PdfSimpleObject) hintVec.elementAt (i + 1); hnum = (Numeric) hobj.getToken (); long hlen = hnum.getLongValue (); if (hoffset + hlen > fileLength) { return false; // hint dict runs past EOF } _parser.seek (hoffset); // The documentation appears to lie here. What // we find isn't the stream, but an object // definition for the stream (of the form // m n obj). Allow for both possibilities. PdfObject hintStream = _parser.readObject (); if (hintStream instanceof PdfSimpleObject) { _parser.readObject (); // discard version no. _parser.readObject (); // discard obj keyword hintStream = _parser.readObject (); // the real thing } // Parser will see a dictionary, not the stream if (!(hintStream instanceof PdfDictionary)) { return false; } if (!validateHintStream ((PdfDictionary) hintStream)) { return false; } } } else { return false; } // Check for valid first object number PdfSimpleObject firstObjNum = (PdfSimpleObject) lindict.get ("O"); if (! (firstObjNum.getToken () instanceof Numeric)) { return false; } // Check for valid offset to end of first page PdfSimpleObject endpageObj = (PdfSimpleObject) lindict.get ("E"); Numeric endpageTok = (Numeric) endpageObj.getToken (); long endpage = endpageTok.getLongValue (); if (endpage > fileLength) { return false; } // Check for valid number of pages entry PdfSimpleObject numpagesObj = (PdfSimpleObject) lindict.get ("N"); if (!(numpagesObj.getToken () instanceof Numeric)) { return false; } // Check offset to main cross-reference table PdfSimpleObject xrefObj = (PdfSimpleObject) lindict.get ("T"); Numeric xrefTok = (Numeric) xrefObj.getToken (); long xrefOffset = xrefTok.getLongValue (); if (!verifyXRef (xrefOffset)) { return false; } } catch (Exception e) { // An exception thrown anywhere means some assumption // has been violated, so it's not linearized. return false; } return true; // passed all tests } /* Find the first object from the beginning of the file. This is similar to, and perhaps a bit easier than, finding the last dictionary. For the moment we don't worry about what the object is. */ private PdfObject findFirstObject () { try { _parser.seek (8); // To get in sync, read until we see the keyword // "obj". for (;;) { Token tok = _parser.getNext (); if (tok instanceof Keyword) { if ("obj".equals(((Keyword) tok).getValue ())) { PdfObject val = _parser.readObject (); // Object must be completely contained in // the first 1024 bytes. if (_parser.getOffset () <= 1024) { return val; } else { return null; } } } if (_parser.getOffset () > 1024) { return null; } } } catch (Exception e) { return null; } } /* Read a cross-reference table to make sure it looks OK. What we're pointing at is the first _entry_ of the table, not the start of the subsection. This means we don't know the object count, which makes it very tough to figure out whether we're hit the end or we really have an invalid table. Settle for reading one object to see if it looks good. */ private boolean verifyXRef (long xrefOffset) { try { _parser.seek (xrefOffset); _parser.getNext (Numeric.class, ""); // Object number _parser.getNext (Numeric.class, ""); // Generation number _parser.getNext (Keyword.class, ""); // n or f keyword // If that didn't throw an exception, assume we're ok return true; } catch (Exception e) { return false; } } /* Check that a hint stream dictionary has some semblance of validility. */ private boolean validateHintStream (PdfDictionary hDict) { try { // An offset to the shared object hint table // is the one thing that's required. PdfSimpleObject obj = (PdfSimpleObject) hDict.get ("S"); if (obj == null) { return false; } int offset = obj.getIntValue (); if (offset < 0) { return false; } // Other objects aren't required, but must be // non-negative integers if they're there. obj = (PdfSimpleObject) hDict.get ("T"); if (obj != null) { offset = obj.getIntValue (); if (offset < 0) { return false; } } obj = (PdfSimpleObject) hDict.get ("O"); if (obj != null) { offset = obj.getIntValue (); if (offset < 0) { return false; } } obj = (PdfSimpleObject) hDict.get ("A"); if (obj != null) { offset = obj.getIntValue (); if (offset < 0) { return false; } } obj = (PdfSimpleObject) hDict.get ("E"); if (obj != null) { offset = obj.getIntValue (); if (offset < 0) { return false; } } obj = (PdfSimpleObject) hDict.get ("V"); if (obj != null) { offset = obj.getIntValue (); if (offset < 0) { return false; } } obj = (PdfSimpleObject) hDict.get ("I"); if (obj != null) { offset = obj.getIntValue (); if (offset < 0) { return false; } } obj = (PdfSimpleObject) hDict.get ("L"); if (obj != null) { offset = obj.getIntValue (); if (offset < 0) { return false; } } obj = (PdfSimpleObject) hDict.get ("C"); if (obj != null) { offset = obj.getIntValue (); if (offset < 0) { return false; } } return true; // passed all tests } catch (Exception e) { return false; } } } jhove/classes/edu/harvard/hul/ois/jhove/module/pdf/Literal.java0000644000707400001440000006420511205004042023705 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.pdf; import java.util.*; import java.text.*; import java.io.IOException; /** * Class for Tokens which represent PDF strings. The class maintains * a field for determining whether the string is encoded as PDF encoding * or UTF-16. This is determined in the course of analyzing the * characters for the token. */ public class Literal extends StringValuedToken { /** True if literal is in PDFDocEncoding; false if UTF-16. */ private boolean _pdfDocEncoding; /** Used for accumulating a hex string */ private StringBuffer rawHex; /** Used for accomodating the literal */ private StringBuffer buffer; /** Indicates if a character for the first half of a hex byte has already been buffered */ private boolean haveHi; /** The high half-byte character */ private int hi; /** First byte of a UTF-16 character. */ int b1; /** First digit of a hexadecimal string value. */ //int h1; /** The state of the tokenization. Only the subset of States which pertain to Literals are used here. */ private State _state; /** True if no discrepancies with PDF/A requirements have been found, false if there is a discrepancy in this literal. */ private boolean _pdfACompliant; /** Depth of parenthesis nesting. */ private int _parenLevel; /** Mapping between PDFDocEncoding and Unicode code points. */ public static char [] PDFDOCENCODING = { '\u0000','\u0001','\u0002','\u0003','\u0004','\u0005','\u0006','\u0007', '\b' ,'\t' ,'\n' ,'\u000b','\f' ,'\r' ,'\u000e','\u000f', '\u0010','\u0011','\u0012','\u0013','\u0014','\u0015','\u0016','\u0017', '\u02d8','\u02c7','\u02c6','\u02d9','\u02dd','\u02db','\u02da','\u02dc', '\u0020','\u0021','\"' ,'\u0023','\u0024','\u0025','\u0026','\'', '\u0028','\u0029','\u002a','\u002b','\u002c','\u002d','\u002e','\u002f', '\u0030','\u0031','\u0032','\u0033','\u0034','\u0035','\u0036','\u0037', '\u0038','\u0039','\u003a','\u003b','\u003c','\u003d','\u003e','\u003f', '\u0040','\u0041','\u0042','\u0043','\u0044','\u0045','\u0046','\u0047', '\u0048','\u0049','\u004a','\u004b','\u004c','\u004d','\u004e','\u004f', '\u0050','\u0051','\u0052','\u0053','\u0054','\u0055','\u0056','\u0057', '\u0058','\u0059','\u005a','\u005b','\\' ,'\u005d','\u005e','\u005f', '\u0060','\u0061','\u0062','\u0063','\u0064','\u0065','\u0066','\u0067', '\u0068','\u0069','\u006a','\u006b','\u006c','\u006d','\u006e','\u006f', '\u0070','\u0071','\u0072','\u0073','\u0074','\u0075','\u0076','\u0077', '\u0078','\u0079','\u007a','\u007b','\u007c','\u007d','\u007e','\u007f', '\u2022','\u2020','\u2021','\u2026','\u2003','\u2002','\u0192','\u2044', '\u2039','\u203a','\u2212','\u2030','\u201e','\u201c','\u201d','\u2018', '\u2019','\u201a','\u2122','\ufb01','\ufb02','\u0141','\u0152','\u0160', '\u0178','\u017d','\u0131','\u0142','\u0153','\u0161','\u017e','\u009f', '\u20ac','\u00a1','\u00a2','\u00a3','\u00a4','\u00a5','\u00a6','\u00a7', '\u00a8','\u00a9','\u00aa','\u00ab','\u00ac','\u00ad','\u00ae','\u00af', '\u00b0','\u00b1','\u00b2','\u00b3','\u00b4','\u00b5','\u00b6','\u00b7', '\u00b8','\u00b9','\u00ba','\u00bb','\u00bc','\u00bd','\u00be','\u00bf', '\u00c0','\u00c1','\u00c2','\u00c3','\u00c4','\u00c5','\u00c6','\u00c7', '\u00c8','\u00c9','\u00ca','\u00cb','\u00cc','\u00cd','\u00ce','\u00cf', '\u00d0','\u00d1','\u00d2','\u00d3','\u00d4','\u00d5','\u00d6','\u00d7', '\u00d8','\u00d9','\u00da','\u00db','\u00dc','\u00dd','\u00de','\u00df', '\u00e0','\u00e1','\u00e2','\u00e3','\u00e4','\u00e5','\u00e6','\u00e7', '\u00e8','\u00e9','\u00ea','\u00eb','\u00ec','\u00ed','\u00ef','\u00ef', '\u00f0','\u00f1','\u00f2','\u00f3','\u00f4','\u00f5','\u00f6','\u00f7', '\u00f8','\u00f9','\u00fa','\u00fb','\u00fc','\u00fd','\u00fe','\u00ff' }; private static final int CR = 0x0D; private static final int LF = 0x0A; private static final int BS = 0x08; private static final int HT = 0x09; private static final int FORMFEED = 0x0C; private static final int ESC = 0X1B; private static final int OPEN_PARENTHESIS = 0x28; private static final int CLOSE_PARENTHESIS = 0x29; private static final int BACKSLASH = 0x5C; private static final int FE = 0xFE; private static final int FF = 0xFF; /** Creates an instance of a string literal */ public Literal () { super (); _pdfDocEncoding = true; rawHex = new StringBuffer (); buffer = new StringBuffer (); haveHi = false; } /** * Append a hex character. This is used only for hex literals * (those that start with '<'). * * @param ch The integer 8-bit code for a hex character */ public void appendHex (int ch) throws PdfException { if (_rawBytes == null) { _rawBytes = new Vector (32); } if (haveHi) { _rawBytes.add(new Integer (hexToInt (hi, ch))); haveHi = false; } else { hi = ch; haveHi = true; } } /** * Process the incoming characters into a string literal. * This is used for literals delimited * by parentheses, as opposed to hex strings. * * @param tok The tokenizer, passed to give access to its getChar * function. * @return true if the character was processed * normally, false if a terminating * parenthesis was reached. */ public long processLiteral (Tokenizer tok) throws IOException { /** Variable for UTF-16 chars. */ int utfch = 0; /** First byte of a UTF-16 character. */ int b1 = 0x00; /* Character read from tokenizer. */ int ch; _parenLevel = 0; _rawBytes = new Vector (32); _state = State.LITERAL; long offset = 0; for (;;) { ch = tok.readChar (); offset++; _rawBytes.add (new Integer (ch)); if (_state == State.LITERAL) { // We are still in a state of flux, determining the encoding if (ch == FE) { _state = State.LITERAL_FE; } else if (ch == CLOSE_PARENTHESIS && --_parenLevel < 0) { // We have an empty string setPDFDocEncoding (true); setValue(buffer.toString()); return offset; } else if (ch == BACKSLASH) { ch = readBackslashSequence (false, tok); if (ch == 0) { continue; // invalid character, ignore } else if (ch == FE) { _state = State.LITERAL_FE; } else { // any other char is treated nonspecially setPDFDocEncoding (true); buffer.append (PDFDOCENCODING[ch]); } } else { // We now know we're in 8-bit PDF encoding. // Append the character to the buffer. if (ch == OPEN_PARENTHESIS) { // Count open parens to be matched by close parens. // Backslash-quoted parens won't get here. ++_parenLevel; } _state = State.LITERAL_PDF; setPDFDocEncoding (true); buffer.append (PDFDOCENCODING[ch]); } } else if (_state == (State.LITERAL_FE)) { if (ch == FF) { _state = State.LITERAL_UTF16_1; setPDFDocEncoding (false); } else if (ch == BACKSLASH) { ch = readBackslashSequence (false, tok); if (ch == 0) { continue; // invalid character, ignore } if (ch == FF) { _state = State.LITERAL_UTF16_1; setPDFDocEncoding (false); } else { // any other char is treated nonspecially setPDFDocEncoding (true); // The FE is just an FE, put it in the buffer buffer.append (PDFDOCENCODING[FE]); buffer.append (PDFDOCENCODING[ch]); } } else { _state = State.LITERAL_PDF; setPDFDocEncoding (true); // The FE is just an FE, put it in the buffer buffer.append (PDFDOCENCODING[FE]); buffer.append (PDFDOCENCODING[ch]); } } else if (_state == (State.LITERAL_PDF)) { if (ch == CLOSE_PARENTHESIS && --_parenLevel < 0) { setValue(buffer.toString()); return offset; } else if (ch == BACKSLASH) { ch = readBackslashSequence (false, tok); if (ch == 0) { continue; // invalid character, ignore } else { // any other char is treated nonspecially buffer.append (PDFDOCENCODING[ch]); } } else { buffer.append (PDFDOCENCODING[ch]); } } else if (_state == (State.LITERAL_UTF16_1)) { // First byte of a UTF16 character. But a close // paren or backslash is a single-byte character. // Parens within the string are double-byte characters, // so we don't have to worry about them. if (ch == CLOSE_PARENTHESIS) { setValue(buffer.toString()); return offset; } else if (ch == BACKSLASH) { utfch = readBackslashSequence (true, tok); if (utfch == 0) { continue; // invalid character, ignore } } else { _state = State.LITERAL_UTF16_2; b1 = ch; } } else if (_state == (State.LITERAL_UTF16_2)) { // Second byte of a UTF16 character. utfch = 256 * b1 + ch; _state = State.LITERAL_UTF16_1; // an ESC may appear at any point to signify // a language code. Remove the language code // from the stream and save it in a list of codes. if (utfch == ESC) { readUTFLanguageCode (tok); } else { /* It turns out that a backslash may be double-byte, * rather than the assumed single.byte. The following * allows for this. Suggested by Justin Litman, Library * of Congress, 2006-03-17. */ if (utfch == BACKSLASH) { utfch = readBackslashSequence (false, tok); if (utfch == 0) { continue; /* Invalid character, ignore. */ } } buffer.append ((char) utfch); } } } } /** * Convert the raw hex data. Two buffers are saved: _rawBytes * for the untranslated hex-encoded data, and _value for the * PDF or UTF encoded string. */ public void convertHex () throws PdfException { boolean utf = false; StringBuffer buffer = new StringBuffer (); // If a high byte is left hanging, complete it with a '0' if (haveHi) { _rawBytes.add (new Integer (hexToInt (hi, '0'))); } if (_rawBytes.size () >= 2 && rawByte (0) == 0XFE && rawByte(1) == 0XFF) { utf = true; } if (utf) { // Gather pairs of bytes into characters without conversion for (int i = 2; i < _rawBytes.size(); i += 2) { buffer.append ((char) (rawByte (i) * 256 + rawByte (i + 1))); } } else { // Convert single bytes to PDF encoded characters. for (int i = 0; i < _rawBytes.size (); i++) { buffer.append (Tokenizer.PDFDOCENCODING[rawByte (i)]); } } _value = buffer.toString (); } private static int hexToInt (int c1, int c2) throws PdfException { return 16 * hexValue (c1) + hexValue (c2); } private static int hexValue (int h) throws PdfException { int d = 0; if (0x30 <= h && h <= 0x39) { // digit 0-9 d = h - 0x30; } else if (0x41 <= h && h <= 0x46) { // letter A-F d = h - 0x37; } else if (0x61 <= h && h <= 0x66) { // letter a-f d = h - 0x57; } else { throw new PdfMalformedException ("Invalid character in hex string"); } return d; } /* Extract a byte from _rawBytes. In order to allow for byte-short situations, any byte off the end is returned as 0. */ private int rawByte (int idx) { if (idx >= _rawBytes.size ()) { return 0; } return ((Integer) _rawBytes.elementAt (idx)).intValue(); } /** * Returns true if this string is in PDFDocEncoding, * false if UTF-16. */ public boolean isPDFDocEncoding () { return _pdfDocEncoding; } /** * Sets the value of pDFDocEncoding. */ public void setPDFDocEncoding (boolean pdfDocEncoding) { _pdfDocEncoding = pdfDocEncoding; } /** * Returns true if the string value is a parsable date. * Conforms to the ASN.1 date format: D:YYYYMMDDHHmmSSOHH'mm' * where everything before and after YYYY is optional. * If we take this literally, the format is frighteningly ambiguous * (imagine, for instance, leaving out hours but not minutes and * seconds), so the checking is a bit loose. */ public boolean isDate () { return parseDate () != null; } /** * Parse the string value to a date. PDF dates conform to * the ASN.1 date format. This consists of * D:YYYYMMDDHHmmSSOHH'mm' * where everything before and after YYYY is optional. * Adobe doesn't actually say so, but I'm assuming that if a * field is included, everything to its left must be included, * e.g., you can't have seconds but leave out minutes. */ public Date parseDate () { int year = 0; int month = 0; int day = 0; int hour = 0; int minute = 0; int second = 0; char timezonechar = '?'; // +, -, or Z int timezonehour = 0; int timezoneminute = 0; Calendar cal = null; String str = getValue (); if (str == null) { return null; } str = str.trim (); if (str.length() < 4) { return null; } int datestate = 0; int charidx = 0; try { wloop: while (charidx < str.length ()) { // We parse the date using a simple state machine, // with a state for each date component. switch (datestate) { case 0: // starting state, may start with "D:" if ("D:".equals (str.substring (charidx, charidx + 2))) { charidx += 2; } datestate = 1; // advance regardless break; case 1: // expecting year year = Integer.parseInt (str.substring (charidx, charidx + 4)); charidx += 4; datestate = 2; break; case 2: // expecting month month = Integer.parseInt (str.substring (charidx, charidx+2)); charidx += 2; datestate = 3; break; case 3: // expecting day of month day = Integer.parseInt (str.substring (charidx, charidx + 2)); if (day < 1 || day > 31) { return null; } charidx += 2; datestate = 4; break; case 4: // expecting hour (00-23) hour = Integer.parseInt (str.substring (charidx, charidx + 2)); charidx += 2; datestate = 5; break; case 5: // expecting minute (00-59) minute = Integer.parseInt (str.substring (charidx, charidx+2)); charidx += 2; datestate = 6; break; case 6: // expecting second (00-59) second = Integer.parseInt (str.substring (charidx, charidx+2)); charidx += 2; datestate = 7; break; case 7: // expecting time zone ('+', '-', or 'Z') timezonechar = str.charAt (charidx); if (timezonechar != 'Z' && timezonechar != '+' && timezonechar != '-') { return null; } charidx++; datestate = 8; break; case 8: // expecting time zone hour. // ignore if timezonechar is 'Z' if (timezonechar == '+' || timezonechar == '-') { timezonehour = Integer.parseInt (str.substring (charidx, charidx + 2)); if (timezonechar == '-') { timezonehour = -timezonehour; } // Time zone hour must have trailing quote if (!str.substring (charidx+2, charidx+3).equals ("'")) { return null; } charidx += 3; } datestate = 9; break; case 9: // expecting time zone minute -- in single quotes // ignore if timezonechar is 'Z' if (timezonechar == '+' || timezonechar == '-') { if (str.charAt (charidx) == '\'') { timezoneminute = Integer.parseInt (str.substring (charidx, charidx + 2)); } if (timezonechar == '-') { timezoneminute = -timezoneminute; } // Time zone minute must have trailing quote if (!str.substring (charidx+2, charidx+3).equals ("'")) { return null; } } break wloop; } } } // Previously, we assumed that a parsing exception meant the // end of the date. This is too permissive; an exception means // that the date is not well-formed. catch (Exception e) { return null; } if (datestate < 2) { return null; // not enough fields } else { // First we must construct the time zone string, then use // it to make a TimeZone object. if (timezonechar != '?') { String tzStr = "GMT"; if (timezonechar == 'Z') { tzStr += "+0000"; } else { tzStr += timezonechar; NumberFormat nfmt = NumberFormat.getInstance (); nfmt.setMinimumIntegerDigits (2); nfmt.setMaximumIntegerDigits (2); tzStr += nfmt.format (timezonehour); tzStr += nfmt.format (timezoneminute); } TimeZone tz = TimeZone.getTimeZone (tzStr); // Use that TimeZone to create a Calendar with our date. // Note that Java months are 0-based. cal = Calendar.getInstance (tz); } else { // time zone is unspecified cal = Calendar.getInstance (); } cal.set (year, month - 1, day, hour, minute, second); return cal.getTime (); } } /** * Returns true if this token doesn't violate any * PDF/A rules, false if it does. */ public boolean isPDFACompliant () { return _pdfACompliant; } /* private void beginBackslashState () { octalBufLen = 0; backslashFlag = true; } */ /** After a backslash, read characters into an escape sequence. If we don't find a valid escape sequence, return 0. */ private int readBackslashSequence (boolean utf16, Tokenizer tok) throws IOException { int ch = tok.readChar1 (utf16); if (ch >= 0X30 && ch <= 0X37) { int num = ch - 0X30; // Read octal sequence. We may get 1, 2, or 3 characters. // If we get a non-numeric character, we're done and we // put it back. for (int i = 0; i < 2; i++) { int ch1 = tok.readChar1 (utf16); if (ch1 >= 0X30 && ch1 <= 0X37) { num = num * 8 + (ch1 - 0X30); } else { //_fileBufferOffset--; // put it back tok.backupChar (); // add this function to Tokenizer**** _pdfACompliant = false; // octal sequences must be 3 chars in PDF/A return num; } } return num; } switch (ch) { case 0X6E: // n return LF; case 0X72: // r return CR; case 0X74: // t return HT; case 0X68: // h return BS; case 0X66: // f return FORMFEED; case OPEN_PARENTHESIS: return OPEN_PARENTHESIS; case CLOSE_PARENTHESIS: return CLOSE_PARENTHESIS; case BACKSLASH: return BACKSLASH; default: return 0; } } /** We have just read an ESC in a UTF string. Save all character up to and exclusive of the next ESC as a language code. */ private void readUTFLanguageCode (Tokenizer tok) throws IOException { StringBuffer sb = new StringBuffer (); for (;;) { int ch = tok.readChar1(true); if (ch == ESC) { break; } sb.append ((char) ch); } tok.addLanguageCode (sb.toString ()); // ****add this to Tokenizer //_languageCodes.add (sb.toString ()); } /** If we're in the backslash substate (backslashFlag = true), then call this to process characters. It will accumulate octal digits into octalBuf and process other escaped characters. If the accumulation produces a character, it will return that character code, otherwise it will return 0 to indicate no character is available yet. Althought the backslash itself is a byte, even in a 16-bit string, the characters which follow it are 16-bit characters, not bytes. So we call this only after applying UTF-16 encoding where applicable. */ /* DEPRECATED for the current millisecond */ /* private int backslashProcess (int ch) { if (ch >= 0X30 && ch <= 0X37) { int num = ch - 0X30; // An octal sequence may have 1, 2, or 3 characters. // If we get a non-numeric character, we're done and // return the character, and put the character we // just received into a holding buffer. octalBuf[octalBufLen++] = num; if (octalBufLen == 3) { return octalBufValue (); } for (int i = 0; i < 2; i++) { int ch1 = readChar1 (utf16); if (ch1 >= 0X30 && ch1 <= 0X37) { num = num * 8 + (ch1 - 0X30); } else { holdChar = ch; _pdfACompliant = false; // octal sequences must be 3 chars in PDF/A return num; } } return num; } // If no octal characters have been seen yet, look for an // escaped character. if (octalBufLen == 0) { switch (ch) { case 0X6E: // n return LF; case 0X72: // r return CR; case 0X74: // t return HT; case 0X68: // h return BS; case 0X66: // f return FORMFEED; case OPEN_PARENTHESIS: return OPEN_PARENTHESIS; case CLOSE_PARENTHESIS: return CLOSE_PARENTHESIS; case BACKSLASH: return BACKSLASH; default: // illegal escape -- dump the character return 0; } else { // We have one or two buffered octal characters, // but this isn't one. Put the current character // in a holding buffer, and return the octal value. holdCh = ch; return octalBufValue (); } } } */ } jhove/classes/edu/harvard/hul/ois/jhove/module/pdf/Name.java0000644000707400001440000000126411225650305023200 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.pdf; /** * Class for Tokens which represent PDF names. */ public class Name extends StringValuedToken { /** Creates an instance of a Name */ public Name () { super (); } /** Returns true if it's within the PDF/A implementation limit */ public boolean isPdfACompliant () { return _value.getBytes().length <= 127; } } jhove/classes/edu/harvard/hul/ois/jhove/module/pdf/NameTreeNode.java0000644000707400001440000001717110771562750024645 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.pdf; import edu.harvard.hul.ois.jhove.module.PdfModule; import java.util.*; /** * Class for nodes of a PDF name tree, e.g., ExternalFiles. Name trees * are intended for large amounts of data that won't have to all be brought * into memory at once; so this implementation is geared toward file-based * lookup of a key rather than creating an in-memory structure. Descendant * nodes become available for garbage collection if they are not on the * search path for a match. * * Keys are collated according to raw bytes, not character encoding. */ public class NameTreeNode { protected PdfModule _module; protected NameTreeNode _parent; protected PdfDictionary _dict; // dictionary which defines this node //private int _prevKey; // Key previously obtained in traversing tree //private PdfObject _prevValue; // Value previously obtained in traversing tree //private NameTreeNode _currentDescendant; private Vector _kids; private Vector _names; private Vector _lowerLimit; // Lower limit of keys for this node -- null for root private Vector _upperLimit; // Upper limit of keys for this node -- null for root /** * Constructor. * @param module The PdfModule under which we're operating * @param parent The parent node in the document tree; * may be null only for the root node * @param dict The dictionary object on which this node * is based */ public NameTreeNode (PdfModule module, NameTreeNode parent, PdfDictionary dict) throws PdfException { final String inval = "Invalid name tree"; _module = module; _parent = parent; _dict = dict; try { // Get the limits of the key range. If there are no limits, this // must be the root node. PdfArray limitsDict = (PdfArray) module.resolveIndirectObject (dict.get ("Limits")); if (limitsDict == null) { _lowerLimit = null; _upperLimit = null; } else { Vector vec = limitsDict.getContent (); PdfSimpleObject limobj = (PdfSimpleObject) vec.elementAt (0); _lowerLimit = limobj.getRawBytes (); //dumpKey (_lowerLimit, "Lower limit: "); limobj = (PdfSimpleObject) vec.elementAt (1); _upperLimit = limobj.getRawBytes (); //dumpKey (_upperLimit, "Upper limit: "); } // Get the Kids and Names arrays. Normally only one will // be present. PdfArray kidsVec = (PdfArray) module.resolveIndirectObject (dict.get ("Kids")); if (kidsVec != null) { _kids = kidsVec.getContent (); } else { _kids = null; } PdfArray namesVec = (PdfArray) module.resolveIndirectObject (dict.get ("Names")); if (namesVec != null) { _names = namesVec.getContent (); } else { _names = null; } } catch (ClassCastException ce) { throw new PdfInvalidException (inval); } catch (NullPointerException ce) { throw new PdfInvalidException (inval); } catch (Exception e) { throw new PdfMalformedException (inval); } } /** * See if a key is within the bounds of this node. All keys * are within the bounds of the root node. */ public boolean inBounds (Vector key) { if (_lowerLimit == null) { return true; // root node } else { if (compareKey (key, _lowerLimit) < 0 || compareKey (key, _upperLimit) > 0) { return false; } return true; } } /** * Get the PdfObject which matches the key, or null if there is no match. */ public PdfObject get (Vector key) throws PdfException { final String invtree = "Invalid name tree"; try { if (!inBounds (key)) { return null; } // If this has a Names array, it's a leaf node or standalone root; // search it for the key. if (_names != null) { for (int i = 0; i < _names.size (); i += 2) { PdfSimpleObject k1 = (PdfSimpleObject) _names.elementAt (i); int cmp = compareKey (key, k1.getRawBytes ()); if (cmp == 0) { /* Match! */ return _module.resolveIndirectObject ((PdfObject) _names.elementAt (i + 1)); } else if (cmp < 0) { // Passed position where match should be return null; } } return null; // just not there } else if (_kids != null) { // It's a non-standalone root or an intermediate note. // Figure out which descendant we should search. for (int i = 0; i < _kids.size (); i++) { PdfDictionary kid = (PdfDictionary) _module.resolveIndirectObject ( (PdfObject) _kids.elementAt (i)); NameTreeNode kidnode = new NameTreeNode (_module, this, kid); if (kidnode.inBounds (key)) { return kidnode.get (key); } } return null; // Not in any subnode } else throw new PdfMalformedException (invtree); } catch (PdfException e1) { throw e1; } catch (Exception e) { throw new PdfMalformedException (invtree); } } /* Compare two keys (Vectors of Integer). Returns -1 if the first argument is less than the second, 1 if the first argument is greater, and 0 if they are equal. Key A is less than key B if A is a prefix of B. */ private int compareKey (Vector a, Vector b) { int lena = a.size (); int lenb = b.size (); int len = (lena < lenb ? lena : lenb); for (int i = 0; i < len; i++) { int ai = ((Integer) a.elementAt (i)).intValue (); int bi = ((Integer) b.elementAt (i)).intValue (); if (ai < bi) { return -1; } else if (ai > bi) { return 1; } } // Both are equal as far as the length of the shorter one goes. // To be equal, they must have the same length; otherwise the // shorter one is the lesser. if (lena == lenb) { return 0; } else if (lena < lenb) { return -1; } else { return 1; } } /* Debugging code */ private void dumpKey (Vector v, String label) { System.out.print (label); for (int i = 0; i < v.size (); i++) { System.out.print (v.elementAt (i).toString () + " "); } System.out.println (); } } jhove/classes/edu/harvard/hul/ois/jhove/module/pdf/Numeric.java0000644000707400001440000000512511225650343023724 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.pdf; /** * Class for Tokens which represent PDF numbers. Numeric values * are stored as double if they have a real value, or * as int if they have an integer value. The implementation notes * state that the maximum value of an integer on a 32-bit machine * is 2 ^ 31 - 1. However, they also say that byte offsets have * a limit of 10 decimal digits, which is a larger value. So we * store integer values as long. */ public class Numeric extends Token { /** True if real value; false if integer. */ private boolean _real; private double _realValue; private long _intValue; /** Creates an instance of a Numeric */ public Numeric () { super (); _real = false; _intValue = 0; } /** Returns the value, converted to an integer */ public int getIntegerValue () { if (_real) { return (int) _realValue; } else { return (int) _intValue; } } /** Returns the value, converted to a long */ public long getLongValue () { if (_real) { return (long) _realValue; } else { return _intValue; } } /** Returns the value of this Numeric as a double */ public double getValue () { if (_real) { return _realValue; } else { return (double) _intValue; } } /** * Returns true if the value is stored as a floating-point * number. */ public boolean isReal () { return _real; } /** * Set this object's value to a double. */ public void setValue (double value) { _realValue = value; _real = true; } /** * Set this object's value to a long. */ public void setValue (long value) { _intValue = value; _real = false; } /** Returns true if this is within PDF/A implementation limits. */ public boolean isPdfACompliant () { if (_real) { double absRealValue = (_realValue < 0 ? -_realValue : _realValue); return (absRealValue <= 3.404E38); } else { return (_intValue <= 2147483647 && _intValue >= -2147483648); } } } jhove/classes/edu/harvard/hul/ois/jhove/module/pdf/ObjectStream.java0000644000707400001440000001032711205571217024704 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2005 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.pdf; import java.io.*; import java.util.*; /** * This class implements the Object Stream, a new way of storing * objects starting in PDF 1.4. * * An object stream can contain one or more objects, as described in * Section 3.4 of the PostScript manual. * * JHOVE supports only FlateDecode as a filter for cross-reference * streams. This is consistent with the implementation limitation * described in Appendix H of the PDF manual for Acrobat 6 and earlier. * * * @author Gary McGath * */ public class ObjectStream { private PdfStream _ostrm; // The underlying Stream object. private PdfDictionary _dict; private int _numObjects; private int _firstOffset; private Parser _parser; private RandomAccessFile _raf; /* Index of the object stream. Each element is an int[2], * consisting of an object number and an offset. */ private Map _index; /** * Constructor. */ public ObjectStream(PdfStream ostrm, RandomAccessFile raf) { _ostrm = ostrm; _raf = raf; _dict = ostrm.getDict (); _parser = new Parser (new StreamTokenizer (raf, _ostrm.getStream())); } /** Checks the validity of the stream dictionary, and extracts * information necessary for subsequent reading. */ public boolean isValid () { try { /* Type must be ObjStm */ PdfObject obj = _dict.get ("Type"); String typeStr = null; if (obj instanceof PdfSimpleObject) { typeStr = ((PdfSimpleObject) obj).getStringValue (); } if (!("ObjStm".equals (typeStr))) { return false; } /* Number of objects */ obj = _dict.get ("N"); if (obj instanceof PdfSimpleObject) { _numObjects = ((PdfSimpleObject) obj).getIntValue(); } else { return false; } /* Offset of first object */ obj = _dict.get ("First"); if (obj instanceof PdfSimpleObject) { _firstOffset = ((PdfSimpleObject) obj).getIntValue(); } else { return false; } /* Optional refernce to object stream which this extends. */ obj = _dict.get ("Extends"); if (obj != null) { /* What do we do with this? */ } return true; } catch (Exception e) { return false; } } /** Reads the index of the object stream. */ public void readIndex () throws PdfException, IOException { Stream strm = _ostrm.getStream (); strm.setFilters (_ostrm.getFilters ()); strm.initRead (_raf); _index = new HashMap (_numObjects); for (int i = 0; i < _numObjects; i++) { /* If I'm reading it correctly, the numbers are * encoded as ASCII strings separated by white space. * I don't know what the restrictions, if any, are on * the white space. */ Integer onum = new Integer (strm.readAsciiInt ()); Integer offset = new Integer (strm.readAsciiInt ()); _index.put (onum, offset); } } /** Extracts an object from the stream. */ public PdfObject getObject (int objnum) throws PdfException { Integer onum = new Integer (objnum); Integer off = (Integer) _index.get (onum); try { if (off != null) { int offset = off.intValue (); _parser.seek (offset + _firstOffset); return _parser.readObject (); } else { return null; } } catch (IOException e) { throw new PdfMalformedException ("Offset out of bounds in object stream"); } } } jhove/classes/edu/harvard/hul/ois/jhove/module/pdf/PageLabelNode.java0000644000707400001440000002501211171651217024742 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.pdf; import edu.harvard.hul.ois.jhove.module.PdfModule; import java.util.*; /** * Class for nodes of a PDF number tree. */ public class PageLabelNode { /** The PdfModule this node is associated with. */ protected PdfModule _module; /** The parent node of this node. */ protected PageLabelNode _parent; /** The dictionary which defines this node. */ protected PdfDictionary _dict; /** Set to true when all subnodes of this node * have been iterated through following a StartWalk. */ protected boolean _walkFinished; private List _descendants; private Iterator _descendantsIter; private int _currentKey; // Key most recently obtained in traversing tree private PdfObject _currentValue; // Value most recently obtained in traversing tree private int _prevKey; // Key previously obtained in traversing tree private PdfObject _prevValue; // Value previously obtained in traversing tree private int _currentNumsIndex; // Current index into Nums entry private int _currentNumsLength; // Length of current Nums entry private Vector _currentNumsVec; // Vector from the Nums entry private PageLabelNode _currentDescendant; private PageLabelNode _currentLeaf; /** * Superclass constructor. * @param module The PdfModule under which we're operating * @param parent The parent node in the document tree; * may be null only for the root node * @param dict The dictionary object on which this node * is based */ public PageLabelNode (PdfModule module, PageLabelNode parent, PdfDictionary dict) { _module = module; _parent = parent; _dict = dict; } /** * Build the subtree of descendants of this node, using * the Kids entry in the dictionary. Leaf nodes are * recognized by not having a Kids entry. */ public void buildSubtree () throws PdfException { PdfArray kids = null; try { kids = (PdfArray) _dict.get("Kids"); if (kids != null) { Vector kidsVec = kids.getContent (); _descendants = new ArrayList (kidsVec.size ()); for (int i = 0; i < kidsVec.size (); i++) { PdfDictionary kid = (PdfDictionary) _module.resolveIndirectObject ((PdfObject) kidsVec.elementAt (i)); PageLabelNode nodeObj = new PageLabelNode (_module, this, kid); nodeObj.buildSubtree (); _descendants.add(nodeObj); } } else _descendants = null; } catch (PdfException pe) { throw pe; } catch (Exception e) { throw new PdfInvalidException ("Invalid page label node"); } } /** * Initialize an iterator through the descendants of this node. */ public void startWalk () { if (_descendants != null) { _descendantsIter = _descendants.listIterator (); _walkFinished = false; } else { _descendantsIter = null; // leaf node, or root in isolation _walkFinished = true; } _currentDescendant = null; _currentLeaf = null; _currentKey = -1; _currentValue = null; _prevKey = -1; _prevValue = null; } /** * Get the next leaf object which is under this node. This function * is designed such that calling startWalk() and then repeatedly * calling nextLeafObject() will return all the leaf objects in the tree * under this node, and finally will return null when there are no more. * A leaf object is one which has no Kids; it is required to have a * Nums entry. */ public PageLabelNode nextLeafObject () { if (_walkFinished) { return null; } // _currentDescendant == null and _walkFinished == false indicates // we're at the start. if (_currentDescendant == null) { if (_descendantsIter == null) { // No descendants. This is a root node which functions as its // only leaf. _walkFinished = true; return this; } else { // Get first descendant _currentDescendant = (PageLabelNode) _descendantsIter.next (); _currentDescendant.startWalk (); } } PageLabelNode retval = _currentDescendant.nextLeafObject (); if (retval == null) { if (_descendantsIter.hasNext ()) { _currentDescendant = (PageLabelNode) _descendantsIter.next (); _currentDescendant.startWalk (); return _currentDescendant.nextLeafObject (); } else { // We've gone through all our descendants. _walkFinished = true; return null; } } else return retval; } /** * Obtain the next key-value pair from the tree. This returns true * if a pair is available, false if not. After this is called, * getCurrentKey and getCurrentValue may be called to retrieve the * key and value thus found. Each time this is called, * currentKey and currentValue get copied into prevKey and * prevValue. */ public boolean findNextKeyValue () throws PdfException { try { if (_currentLeaf == null || _currentNumsIndex >= _currentNumsLength) { _currentLeaf = nextLeafObject (); if (_currentLeaf == null) { _prevKey = _currentKey; _prevValue = _currentValue; _currentKey = Integer.MAX_VALUE; return false; // all done } _currentNumsIndex = 0; PdfArray pairArray = (PdfArray) _module.resolveIndirectObject (_currentLeaf._dict.get ("Nums")); if (pairArray == null) { throw new PdfInvalidException ("Missing expected element in page number dictionary"); } _currentNumsVec = pairArray.getContent (); _currentNumsLength = _currentNumsVec.size (); } // The key and the value are in two successive positions in the // array, which is of the form [key value key value ... ] PdfSimpleObject keyObj = (PdfSimpleObject) _currentNumsVec.elementAt (_currentNumsIndex); // Save the previous key-value pair _prevKey = _currentKey; _prevValue = _currentValue; _currentKey = keyObj.getIntValue (); _currentValue = (PdfObject) _currentNumsVec.elementAt (_currentNumsIndex + 1); _currentNumsIndex += 2; return true; } catch (PdfInvalidException e) { throw e; } catch (Exception e) { e.printStackTrace(); throw new PdfInvalidException ("Invalid date in page number tree"); } } /** * Returns key at current position in traversing tree */ public int getCurrentKey () { return _currentKey; } /** * Returns value associated with current key */ public PdfObject _getCurrentValue () { return _currentValue; } /** * Returns key previously obtained in traversing tree */ public int getPrevKey () { return _prevKey; } /** * Returns value associated with key previously obtained * in traversing tree */ public PdfObject getPrevValue () { return _prevValue; } /** * A convenience method to turn integers into Roman * numerals, for the generation of page labels. */ public static String intToRoman (int n, boolean upperCase) { StringBuffer buf = new StringBuffer (); // Numbers of a thousand or more start with an "M" for // each full thousand. while (n >= 1000) { buf.append ("M"); n -= 1000; } // treat "CM" as a special case. if (n >= 900) { buf.append ("CM"); n -= 900; } // 500 through 899 uses D, DC, DCC, DCCC if (n >= 500) { buf.append ("D"); while (n >= 600) { buf.append ("C"); n -= 100; } n -= 500; } // 400 through 499 is CD if (n >= 400) { buf.append ("CD"); n -= 400; } // 100 through 399 is C, CC, CCC while (n >= 100) { buf.append ("C"); n -= 100; } // 90 through 99 is XC if (n >= 90) { buf.append ("XC"); n -= 90; } // 50 through 89 is L, LX, LXX, LXXX if (n >= 50) { buf.append ("L"); while (n >= 60) { buf.append ("X"); n -= 10; } n -= 50; } // 40 through 49 is XL if (n >= 40) { buf.append ("XL"); n -= 40; } // 10 through 39 is X, XX, XXX while (n >= 10) { buf.append ("X"); n -= 10; } // From here on, nitpick it out with a switch statement. switch (n) { case 1: buf.append ("I"); break; case 2: buf.append ("II"); break; case 3: buf.append ("III"); break; case 4: buf.append ("IV"); break; case 5: buf.append ("V"); break; case 6: buf.append ("VI"); break; case 7: buf.append ("VII"); break; case 8: buf.append ("VIII"); break; case 9: buf.append ("IX"); break; } String val = buf.toString (); if (upperCase) { return val; } else { return val.toLowerCase (); } } /** * A convenience method to turn integers into * "letter" page numbers as defined for PDF. * The first 26 pages are A-Z, the next 26 AA-ZZ, * etc. */ public static String intToBase26 (int n, boolean upperCase) { int repeatCount = ((n - 1) / 26) + 1; StringBuffer buf = new StringBuffer (); int ch; // Have ch be the appropriate character to repeat if (upperCase) { ch = 65 + ((n - 1) % 26); } else { ch = 97 + ((n - 1) % 26); } while (--repeatCount >= 0) { buf.append ((char) ch); } return buf.toString (); } } jhove/classes/edu/harvard/hul/ois/jhove/module/pdf/PageObject.java0000644000707400001440000001620510771562734024341 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.pdf; import edu.harvard.hul.ois.jhove.module.*; import java.io.*; import java.util.*; /** * Class encapsulating a PDF page object node. */ public class PageObject extends DocNode { private List _contentStreams; // contents of the page; may be null private static final String badPageStr = "Invalid dictionary data for page"; /** * Superclass constructor. * @param module The module under which we're operating * @param parent The parent node in the document tree; * may be null only for the root node * @param dict The dictionary object on which this node * is based */ public PageObject (PdfModule module, PageTreeNode parent, PdfDictionary dict) { super (module, parent, dict); _contentStreams = null; _pageObjectFlag = true; } /** * Find the content stream(s) for this page. This is * called when the page tree content stream is built * by PageTreeNode. getContentStreams may * subsequently be called to get the content. */ public void loadContent (PdfModule module) throws PdfException { try { PdfObject contents = _dict.get("Contents"); // the Contents entry in the dictionary may be either // a stream or an array of streams. It may also // be null, indicating no content. if (contents != null) { contents = module.resolveIndirectObject (contents); if (contents instanceof PdfStream) { _contentStreams = new ArrayList(1); _contentStreams.add(contents); return; } else if (contents instanceof PdfArray) { Vector contentVec = ((PdfArray) contents).getContent (); if (contentVec.size () == 0) { return; } _contentStreams = new ArrayList (contentVec.size ()); for (int i = 0; i < contentVec.size (); i++) { PdfObject streamElement = (PdfObject) contentVec.elementAt (i); streamElement = module.resolveIndirectObject (streamElement); _contentStreams.add ((PdfStream) streamElement); } } else { throw new PdfInvalidException (badPageStr, 0); } } } catch (NullPointerException e) { throw new PdfInvalidException (badPageStr, 0); } catch (ClassCastException e) { throw new PdfInvalidException (badPageStr, 0); } catch (IOException e) { throw new PdfMalformedException (badPageStr, 0); } } /** * Returns the List of content streams. The list elements are * of type PdfStream. */ public List getContentStreams () { return _contentStreams; } /** * Return the page's Annots array of dictionaries, or null if none */ public PdfArray getAnnotations () throws PdfException { String badAnnot = "Invalid Annotations"; try { return (PdfArray) _module.resolveIndirectObject (_dict.get ("Annots")); } catch (ClassCastException e) { throw new PdfInvalidException (badAnnot); } catch (IOException e) { throw new PdfMalformedException (badAnnot); } } /** * Call this function when recursively walking through a document * tree. This allows nextPageObject () to be return this object * exactly once. */ public void startWalk () { _walkFinished = false; } /** * Returns this object the first time it is called after startWalk * is called, then null when called again. This allows a recursive * walk through a document tree to work properly. */ public PageObject nextPageObject () { if (_walkFinished) return null; _walkFinished = true; return this; } /** * Called to walk through all page tree nodes and page objects. * Functionally identical with nextPageObject. */ public DocNode nextDocNode () { return nextPageObject (); } /** * Returns the ArtBox for the page, or null if none. Throws a * PDFException if there is an ArtBox but it is not a rectangle. */ public PdfArray getArtBox () throws PdfException { final String badbox = "Malformed ArtBox in page tree"; try { PdfArray mbox = (PdfArray) _dict.get ("ArtBox"); if (mbox == null) { return null; } else if (mbox.toRectangle () != null) { return mbox; } else { // There's an ArtBox, but it's not a rectangle throw new PdfInvalidException (badbox); } } catch (Exception e) { throw new PdfMalformedException (badbox); } } /** * Returns the TrimBox for the page, or null if none. Throws a * PDFException if there is an TrimBox but it is not a rectangle. */ public PdfArray getTrimBox () throws PdfException { final String badbox = "Malformed TrimBox in page tree"; try { PdfArray mbox = (PdfArray) _dict.get ("TrimBox"); if (mbox == null) { return null; } else if (mbox.toRectangle () != null) { return mbox; } else { // There's an TrimBox, but it's not a rectangle throw new PdfInvalidException (badbox); } } catch (Exception e) { throw new PdfMalformedException (badbox); } } /** * Returns the BleedBox for the page, or null if none. Throws a * PDFException if there is an BleedBox but it is not a rectangle. */ public PdfArray getBleedBox () throws PdfException { final String badbox = "Malformed BleedBox in page tree"; try { PdfArray mbox = (PdfArray) _dict.get ("BleedBox"); if (mbox == null) { return null; } else if (mbox.toRectangle () != null) { return mbox; } else { // There's an BleedBox, but it's not a rectangle throw new PdfInvalidException (badbox); } } catch (Exception e) { throw new PdfMalformedException (badbox); } } } jhove/classes/edu/harvard/hul/ois/jhove/module/pdf/PageTreeNode.java0000644000707400001440000002206211435272044024624 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.pdf; import edu.harvard.hul.ois.jhove.module.*; import java.util.*; /** * Class encapsulating a PDF page tree node. * The page tree is built such that callers can walk through * it by calling startWalk and then calling nextDocNode * (for all nodes) or nextPageObject (for pages only) repeatedly. */ public class PageTreeNode extends DocNode { /* The descendant DocNodes. */ private List _descendants; private ListIterator _descendantsIter; private DocNode _currentDescendant; private boolean _walkFirst; /** * Superclass constructor. * @param module The PDFModule under which we're operating * @param parent The parent node in the document tree; * may be null only for the root node * @param dict The dictionary object on which this node * is based */ public PageTreeNode (PdfModule module, PageTreeNode parent, PdfDictionary dict) { super (module, parent, dict); _pageObjectFlag = false; _descendants = new ArrayList (1); // Empty list in case it doesn't get built } /** * Builds the subtree of descendants of this node, using * the Kids entry in the dictionary. */ public void buildSubtree (boolean toplevel, int recGuard) throws PdfException { buildSubtree (toplevel, recGuard, -1, -1); } /** * Builds the subtree of descendants of this node, using * the Kids entry in the dictionary. */ public void buildSubtree (boolean toplevel, int recGuard, int objNumber, int genNumber) throws PdfException { /* Guard against infinite recursion */ if (recGuard <= 0) { throw new PdfMalformedException ("Excessive depth or infinite recursion in page tree structure"); } PdfArray kids = null; try { /* Section 3.6.2 of the PDF 1.6 doc says: * "Applications should be prepared * to handle any form of tree structure built of such nodes * [page tree nodes and page nodes]. The simplest structure * would consist of a single page tree node that references * all of the document's page objects directly." * But actually, the simplest structure would be a single * page node. And it appears that Acrobat 7 will indeed * generate such. */ /* Note that the Kids dictionary can be an indirect object. */ PdfObject obj = _dict.get("Kids"); if (obj instanceof PdfIndirectObj) { kids = (PdfArray) (((PdfIndirectObj) obj).getObject ()); } else { kids = (PdfArray) obj; } if (toplevel && kids == null) { // The single page node case, maybe. PdfSimpleObject type = (PdfSimpleObject) _dict.get ("Type"); if (type != null && "Page".equals (type.getStringValue())) { PageObject pageObj = new PageObject (_module, this, _dict); _descendants = new ArrayList (1); _descendants.add (pageObj); } } else { Vector kidsVec = kids.getContent (); _descendants = new ArrayList (kidsVec.size ()); for (int i = 0; i < kidsVec.size (); i++) { PdfIndirectObj kidRef = (PdfIndirectObj) kidsVec.elementAt (i); /************************************************** * To avoid a simple case of infinite recursion, check * that this kid is not the same page object as its * parent. **************************************************/ /************************************************** int kidObjNumber = kidRef.getObjNumber (); int kidGenNumber = kidRef.getGenNumber (); if (objNumber >= 0 && genNumber >= 0 && objNumber == kidObjNumber && genNumber == kidGenNumber) { break; } **************************************************/ PdfDictionary kid = (PdfDictionary) _module.resolveIndirectObject (kidRef); PdfSimpleObject kidtype = (PdfSimpleObject) kid.get("Type"); String kidtypeStr = kidtype.getStringValue (); if (kidtypeStr.equals("Page")) { PageObject pageObj = new PageObject (_module, this, kid); pageObj.loadContent (_module); _descendants.add(pageObj); } else if (kidtypeStr.equals ("Pages")) { PageTreeNode nodeObj = new PageTreeNode (_module, this, kid); nodeObj.buildSubtree (false, recGuard - 1); _descendants.add(nodeObj); } } } } catch (PdfException ee) { throw ee; } catch (Exception e) { throw new PdfInvalidException ("Invalid page tree node"); } } /** * Initialize an iterator through the descendants of this node. */ public void startWalk () { _descendantsIter = _descendants.listIterator (); _currentDescendant = null; _walkFirst = true; _walkFinished = false; } /** * Get the next PageObject which is under this node. This function * is designed such that calling startWalk() and then repeatedly * calling nextPageObject() will return all the PageObjects in the tree * under this node, and finally will return null when there are no more. */ public PageObject nextPageObject () { if (_walkFinished) { return null; } // _currentDescendant == null and _walkFinished == false indicates // we're at the start. if (_currentDescendant == null) { if (!_descendantsIter.hasNext ()) { _walkFinished = true; return null; } // Get first descendant _currentDescendant = (DocNode) _descendantsIter.next (); _currentDescendant.startWalk (); } PageObject retval = _currentDescendant.nextPageObject (); if (retval == null) { if (_descendantsIter.hasNext ()) { // Every node is a page object or // has at least one page object below it, right? _currentDescendant = (DocNode) _descendantsIter.next (); _currentDescendant.startWalk (); return _currentDescendant.nextPageObject (); } else { // We've gone through all our descendants. _walkFinished = true; return null; } } else { return retval; } } /** * Get the next DocNode which is under this node. This function * is designed such that calling startWalk() and then repeatedly * calling nextPageObject() will return first this node, * then all the DocNodes in the tree * under this node. It finally will return null when there * are no more. */ public DocNode nextDocNode () { if (_walkFinished) { return null; } // _walkFinished == false and _walkFirst == true indicates // we need to return "this". if (_walkFirst) { _walkFirst = false; return this; } // _currentDescendant == null and _walkFinished == false indicates // we're at the start. This is almost identical to the // logic for nextPageObject. if (_currentDescendant == null) { if (!_descendantsIter.hasNext ()) { _walkFinished = true; return null; } // Get first descendant _currentDescendant = (DocNode) _descendantsIter.next (); _currentDescendant.startWalk (); } DocNode retval = _currentDescendant.nextDocNode (); if (retval == null) { if (_descendantsIter.hasNext ()) { // Every node is a page object or // has at least one page object below it, right? _currentDescendant = (DocNode) _descendantsIter.next (); _currentDescendant.startWalk (); return _currentDescendant.nextDocNode (); } else { // We've gone through all our descendants. _walkFinished = true; return null; } } else return retval; } } jhove/classes/edu/harvard/hul/ois/jhove/module/pdf/Parser.java0000644000707400001440000003717311225650305023564 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.pdf; import java.io.*; import java.util.*; /** * The Parser class implements some limited syntactic analysis * for PDF. It isn't by any means intended to be a full * parser. Its main job is to track nesting of syntactic * elements such as dictionary and array beginnings and * ends. */ public class Parser { private Tokenizer _tokenizer; private int _dictDepth; // number of dictionary starts on stack private int _arrayDepth; // number of array starts on stack private Map _objectMap; // the object map for the file private boolean _encrypted; // true if the document is encrypted /* PDF/A compliance flag. */ private boolean _pdfACompliant; /** * Constructor. A Parser works with a Tokenizer that feeds * it tokens. * * @param tokenizer The Tokenizer which the parser will use */ public Parser (Tokenizer tokenizer) { _tokenizer = tokenizer; _pdfACompliant = true; reset (); } /** * Set the object map on which the parser will work. */ public void setObjectMap (Map objectMap) { _objectMap = objectMap; } /** * Clear the state of the parser so that it can start * reading at a different place in the file. Clears the * stack and the dictionary and array depth counters. */ public void reset () { _dictDepth = 0; _arrayDepth = 0; } /** * Clear the state of the parser so that it can start * reading at a different place in the file and ignore * any nesting errors. Sets the * stack and the dictionary and array depth counters to * a large number so that nesting exceptions won't be thrown. */ public void resetLoose () { _dictDepth = 1000000; _arrayDepth = 1000000; } /** * Gets a token. Uses Tokenizer.getNext, and keeps track * of the depth of dictionary and array nesting. */ public Token getNext () throws IOException, PdfException { return getNext (0L); } /** * Gets a token. Uses Tokenizer.getNext, and keeps track * of the depth of dictionary and array nesting. * @param max Maximum allowable size of the token */ public Token getNext (long max) throws IOException, PdfException { Token tok = _tokenizer.getNext (max); if (tok instanceof DictionaryStart) { ++_dictDepth; } else if (tok instanceof DictionaryEnd) { --_dictDepth; if (_dictDepth < 0) { throw new PdfMalformedException ("Improperly nested dictionary delimiters"); } } if (tok instanceof ArrayStart) { ++_arrayDepth; } else if (tok instanceof ArrayEnd) { --_arrayDepth; if (_arrayDepth < 0) { throw new PdfMalformedException ("Improperly nested array delimiters"); } } return tok; } /** * A class-sensitive version of getNext. The token * which is obtained must be of the specified class * (or a subclass thereof), or a PdfInvalidException with * message errMsg will be thrown. */ public Token getNext (Class clas, String errMsg) throws IOException, PdfException { Token tok = getNext (); if (!clas.isInstance (tok)) { throw new PdfInvalidException (errMsg); } if (!tok.isPdfACompliant()) _pdfACompliant = false; return tok; } /** * Returns the number of dictionary starts not yet matched by * dictionary ends. */ public int getDictDepth () { return _dictDepth; } /** * Tells this Parser, and its Tokenizer, whether the file * is encrypted. */ public void setEncrypted (boolean encrypted) { _encrypted = encrypted; _tokenizer.setEncrypted (encrypted); } /** * Returns the number of array starts not yet matched by * array ends. */ public int getArrayDepth () { return _arrayDepth; } /** * Returns the Tokenizer's current whitespace string. */ public String getWSString () { return _tokenizer.getWSString (); } /** * Returns the language code set from the Tokenizer. */ public Set getLanguageCodes () { return _tokenizer.getLanguageCodes (); } /** * Returns false if either the parser or the tokenizer has detected * non-compliance with PDF/A restrictions. A value of true * is no guarantee that the file is compliant. */ public boolean getPDFACompliant () { if (!_tokenizer.getPDFACompliant ()) { _pdfACompliant = false; } return _pdfACompliant; } /** * Set the value of the pdfACompliant flag. This may be used to * clear previous detection of noncompliance. If the parameter * has a value of true, the tokenizer's pdfACompliant * flag is also set to true. */ public void setPDFACompliant (boolean pdfACompliant) { _pdfACompliant = pdfACompliant; if (pdfACompliant) { _tokenizer.setPDFACompliant (true); } } /** * Reads an object definition, from wherever we are in the stream to * the completion of one full object after the obj keyword. */ public PdfObject readObjectDef () throws IOException, PdfException { Numeric objNumTok = (Numeric) getNext (Numeric.class, "Invalid object definition"); return readObjectDef (objNumTok); } /** Reads an object definition, given the first numeric object, which * has already been read and is passed as an argument. This is called * by the no-argument readObjectDef; the only other case in which it * will be called is for a cross-reference stream, which can be distinguished * from a cross-reference table only once the first token is read. */ public PdfObject readObjectDef (Numeric objNumTok) throws IOException, PdfException { String invDef = "Invalid object definition"; reset (); // The start of an object must be obj //Numeric objNumTok = (Numeric) getNext (Numeric.class, invDef); Numeric genNumTok = (Numeric) getNext (Numeric.class, invDef); Keyword objKey = (Keyword) getNext (Keyword.class, invDef); if (!"obj".equals (objKey.getValue ())) { throw new PdfMalformedException (invDef); } if (_tokenizer.getWSString ().length () > 1) { _pdfACompliant = false; } PdfObject obj = readObject (); // Now a special-case check to read a stream object, which // consists of a dictionary followed by a stream token. if (obj instanceof PdfDictionary) { Stream strm = null; try { strm = (Stream) getNext (Stream.class, ""); } catch (Exception e) { // if we get an exception, it just means it wasn't a stream } if (strm != null) { // Assimilate the dictionary and the stream token into the // object to be returned PdfStream strmObj = new PdfStream ((PdfDictionary) obj, strm); if (!strmObj.isPdfaCompliant()) { _pdfACompliant = false; } obj = strmObj; } } obj.setObjNumber (objNumTok.getIntegerValue ()); obj.setGenNumber (genNumTok.getIntegerValue ()); return obj; } /** * Reads an object. By design, this reader has a number * of limitations. *
    *
  • It doesn't retain the contents of streams
  • *
  • It doesn't recognize a stream when it's pointing at * the stream's dictionary; it will just read the * dictionary
  • *
* Functions which it uses may call it recursively to build up structures. * If it encounters a token inappropriate for an object start, it * throws a PdfException on which getToken() may be called to retrieve * that token. */ public PdfObject readObject () throws IOException, PdfException { Token tok = getNext (); if (tok instanceof ArrayStart) { return readArray (); } else if (tok instanceof DictionaryStart) { return readDictionary (); } else if (tok.isSimpleToken ()) { return new PdfSimpleObject (tok); } else { throw new PdfMalformedException ("Cannot parse object", getOffset(), tok); } } /** * Reads an array. When this is called, we have already read the * ArrayStart token, and arrayDepth has been incremented to reflect this. */ public PdfArray readArray () throws IOException, PdfException { PdfArray arr = new PdfArray (); for (;;) { PdfObject obj = null; try { obj = readObject (); arr.add (obj); } // We detect the end of an array by a PdfException being thrown // when readObject encounters the close bracket. When we get // the end of the array, collapse the vector before returning the object. catch (PdfException e) { Token tok = e.getToken (); if (tok instanceof ArrayEnd) { collapseObjectVector (arr.getContent ()); if (!arr.isPdfACompliant()) { _pdfACompliant = false; } return arr; } else { throw e; // real error } } } } /** Reads a dictionary. When this is called, we have already read the * DictionaryStart token, and dictDepth has been incremented to reflect this. * Only for use in this special case, where we're picking up * a dictionary in midstream. */ public PdfDictionary readDictionary () throws IOException, PdfException { PdfDictionary dict = new PdfDictionary (); // Create a vector as a temporary holding place for the objects Vector vec = new Vector (); for (;;) { PdfObject obj = null; try { obj = readObject (); // Comments within a dictionary need to be ignored. if (obj instanceof PdfSimpleObject && ((PdfSimpleObject) obj).getToken() instanceof Comment) { continue; } vec.add (obj); } // We detect the end of a dictionary by a PdfException being thrown // when readObject encounters the close angle brackets. When we get // the end of the array, collapse the vector before returning the object. catch (PdfException e) { Token tok = e.getToken (); if (tok instanceof DictionaryEnd) { collapseObjectVector (vec); String invalDict = "Malformed dictionary"; // The collapsed vector must contain an even number of objects int vecSize = vec.size (); if ((vecSize % 2) != 0) { throw new PdfMalformedException (invalDict + ": Vector must contain an even number of objects, but has " + vecSize, getOffset ()); } for (int i = 0; i < vecSize; i += 2) { try { Name key = (Name) ((PdfSimpleObject) vec.elementAt (i)).getToken (); PdfObject value = (PdfObject) vec.elementAt (i + 1); dict.add (key.getValue (), value); } catch (Exception f) { throw new PdfMalformedException (invalDict, getOffset ()); } } if (!dict.isPdfACompliant()) { _pdfACompliant = false; // exceeds implementation limit for PDF/A } return dict; } else { throw e; // real error } } } } /** * Returns the current offset into the file. */ public long getOffset () { return _tokenizer.getOffset (); } /** * Positions the file to the specified offset, and * resets the state for a new token stream. */ public void seek (long offset) throws IOException, PdfException { _tokenizer.seek (offset); reset (); } /** * PDF has a wacky grammar which must be a legacy of * PostScript's postfix syntax. A keyword of R means that * the two previous objects are really part of an indirect object * reference. This means that when a vector of objects is complete, * it has to be read backwards so that indirect object references can * be collapsed out. In the case of a dictionary, this has to be done * before the content can be interpreted as key-value pairs. */ private void collapseObjectVector (Vector v) throws PdfException { for (int i = v.size() - 1; i >= 2; i--) { PdfObject obj = (PdfObject) v.elementAt (i); if (obj instanceof PdfSimpleObject) { Token tok = ((PdfSimpleObject) obj).getToken (); if (tok instanceof Keyword) { if ("R".equals (((Keyword)tok).getValue ())) { // We're in the key of 'R'. The two previous tokens // had better be Numerics. Three objects in the Vector // are replaced by one. try { PdfSimpleObject nobj = (PdfSimpleObject) v.elementAt (i - 2); Numeric ntok = (Numeric) nobj.getToken (); int objNum = ntok.getIntegerValue (); nobj = (PdfSimpleObject) v.elementAt (i - 1); ntok = (Numeric) nobj.getToken (); int genNum = ntok.getIntegerValue (); v.set (i - 2, new PdfIndirectObj (objNum, genNum, _objectMap)); v.removeElementAt (i); v.removeElementAt (i - 1); i -= 2; } catch (Exception e) { throw new PdfMalformedException ("Malformed indirect object reference"); } } } } } } /** * If true, do not attempt to parse non-whitespace delimited tokens, e.g., * literal and hexadecimal strings. * @param flag Scan mode flag */ public void scanMode (boolean flag) { _tokenizer.scanMode (flag); } } jhove/classes/edu/harvard/hul/ois/jhove/module/pdf/PdfArray.java0000644000707400001440000000616311225650305024033 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.pdf; import java.util.*; /** * A representation of a PDF array object. */ public class PdfArray extends PdfObject { private Vector _content; /** * Creates a PdfArray object. * * @param objNumber The PDF object number * @param genNumber The PDF generation number */ public PdfArray (int objNumber, int genNumber) { super (objNumber, genNumber); _content = new Vector (); } /** * Creates a PdfArray object with empty contents. * */ public PdfArray () { super (); _content = new Vector (); } /** * Adds an object to the array. */ public void add (PdfObject obj) { _content.add (obj); } /** * Return the contents of the array as a Vector. */ public Vector getContent () { return _content; } /** Report if it's within implementation limits defined for PDF/A. */ public boolean isPdfACompliant () { return _content.size() <= 8191; } /** * Concatenate the elements, if they are PdfSimpleObjects, * into a string separated by spaces. Return an empty string * if there are no PdfSimpleObjects. */ public String toPipeline () { StringBuffer sb = new StringBuffer (); for (int i = 0; i < _content.size (); i++) { PdfObject elem = (PdfObject) _content.elementAt (i); if (elem instanceof PdfSimpleObject) { String elemval = ((PdfSimpleObject) elem).getStringValue (); // separate items with a space if (sb.length () > 0) { sb.append (' '); } sb.append (elemval); } } return sb.toString (); } /** * Attempts to convert this Array to a PDF rectangle. * If the Array is a valid rectangle (i.e., an array of exactly * four numbers), returns a Java array of four doubles reflecting * the rectangle. Otherwise returns null. */ public double[] toRectangle () { if (_content.size () != 4) { return null; } double[] retval = new double[4]; try { for (int i = 0; i < 4; i++) { PdfObject elem = (PdfObject) _content.elementAt (i); if (elem instanceof PdfSimpleObject) { double d = ((PdfSimpleObject) elem).getDoubleValue (); retval[i] = d; } else { return null; } } return retval; } catch (Exception e) { // Any failure (e.g., a ClassCastException) is assumed to mean // it wasn't a proper Rectangle return null; } } } jhove/classes/edu/harvard/hul/ois/jhove/module/pdf/PdfDictionary.java0000644000707400001440000000355511435272151025066 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.pdf; import java.util.*; /** * A representation of a PDF dictionary object. */ public class PdfDictionary extends PdfObject { private Map _entries; /** * Creates a PdfDictionary object. * * @param objNumber The PDF object number * @param genNumber The PDF generation number */ public PdfDictionary (int objNumber, int genNumber) { super (objNumber, genNumber); _entries = new HashMap (); } /** * Creates a PdfDictionary object. * */ public PdfDictionary () { super (); _entries = new HashMap (); } /** * Accumulate an entry into the dictionary. * * @param key String value of the dictionary key * @param value PdfObject encapsulation of the dictionary value */ public void add (String key, PdfObject value) { _entries.put (key, value); } /** Get the PDFObject whose key has the specified string * value. Returns null if there is no such key. * * @param key The string value of the key to look up. */ public PdfObject get (String key) { return (PdfObject) _entries.get (key); } /** Return true if it's within the PDF/A implementation limit. */ public boolean isPdfACompliant () { return _entries.size() <= 4095; } /** * Returns an iterator which will successively return * all the values in the dictionary. */ public Iterator iterator () { return _entries.values ().iterator (); } } jhove/classes/edu/harvard/hul/ois/jhove/module/pdf/PdfException.java0000644000707400001440000000431710771562747024733 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003-2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.pdf; import edu.harvard.hul.ois.jhove.*; /** * Abstract exception subclass used internally by the PDF module. * Throwing a PDFException indicates that the document is * ill-formed or invalid; use the appropriate subclass to * indicate which. */ public abstract class PdfException extends Exception { /* Note 25-Feb-2004: Previously PdfException indicated * a not-well-formed condition, and PdfInvalidException * was a subclass of PdfException that indicated an * invalid condition. This is a bad class hierarchy, * since the role of PdfException was ambiguous, * so PdfMalformedException was added, and PdfException * was made abstract. */ private long _offset; // File offset at which the exception occurred private Token _token; // Token associated with the exception /** * Create a PdfException. */ public PdfException (String m) { super(m); _offset = -1; _token = null; } /** * Create a PdfException with specified offset. */ public PdfException (String m, long offset) { super(m); _offset = offset; _token = null; } /** * Create a PdfException with specified offset and token. */ public PdfException (String m, long offset, Token token) { super(m); _offset = offset; _token = token; } /** * Returns the offset at which the exception occurred. */ public long getOffset () { return _offset; } /** * Return the token associated with the exception. */ public Token getToken () { return _token; } /** * Performs the appropriate disparagement act on a RepInfo * object, such as setting the valid or well-formed * flag to false. */ public abstract void disparage (RepInfo info); } jhove/classes/edu/harvard/hul/ois/jhove/module/pdf/PdfFlateInputStream.java0000644000707400001440000002435211204341011026170 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2005 by JSTOR and the President and Fellows of Harvard College * **********************************************************************/ package edu.harvard.hul.ois.jhove.module.pdf; import java.io.*; import java.util.zip.*; /** * An enhancement of InflaterInputStream to support Predictor and Columns. * How complicated does this get? Do I need to read the whole thing before I can * "predict" anything? * * @author Gary McGath * */ public class PdfFlateInputStream extends FilterInputStream { private InflaterInputStream iis; private PdfDictionary decodeParms; private int predictor; private int columns; /* bits per component */ private int bpc; /* colors -- the term is being used in some idiosyncratic sense */ private int colors; /* Number of bytes to hold last column of previous row, if needed */ private int colBytes; /* Length of the total row, including space for last column. * (Actual length of a predictive row is rowLen - colBytes) */ private int rowLen; /* Two row buffers for double buffering */ private byte[] rowBuf; private byte[] rowBuf2; private int rowBufOff; // aka linei_ private boolean eof; /* offset to next available byte */ private int iisBufOff; /* byte array read from IIS */ private byte[] iisBuf; /* Allocation size for iisBuf */ private final static int IISBUF_SIZE = 4096; /* iisBufLen -- number of bytes of valid data in iisBuf */ private int iisBufLen; /* End of file indicator for IIS stream */ private boolean iisEof; /** * Constructor with null DecodeParms dictionary * * @param is InputStream to be inflated */ public PdfFlateInputStream(InputStream is) { this (is, null); } /** * Constructor with specified DecodeParms dictionary * * @param is InputStream to be inflated * @param parms DecodeParms dictionary. * May be null, in which case this is equivalent * to the one-parameter constructor. * */ public PdfFlateInputStream (InputStream is, PdfDictionary parms) { super(is); iis = new InflaterInputStream (is); /* Set default values */ predictor = 1; // no prediction columns = 1; bpc = 8; colors = 1; decodeParms = parms; iisBuf = new byte [IISBUF_SIZE]; iisBufLen = 0; iisBufOff = 0; iisEof = false; eof = false; if (parms != null) { /* Extract relevant dictionary defs */ try { PdfSimpleObject pred = (PdfSimpleObject) parms.get ("Predictor"); if (pred != null) { predictor = pred.getIntValue(); } } catch (Exception e) {} try { PdfSimpleObject col = (PdfSimpleObject) parms.get ("Columns"); if (col != null) { columns = col.getIntValue(); } } catch (Exception e) {} try { PdfSimpleObject bitsper = (PdfSimpleObject) parms.get ("BitsPerComponent"); if (bitsper != null) { bpc = bitsper.getIntValue(); } } catch (Exception e) {} } /* Calculate byte counts */ if (predictor != 1) { colBytes = (colors * bpc + 7) / 8; rowLen = (columns * colors * bpc + 7) / 8 + colBytes; rowBuf = new byte[rowLen]; rowBuf2 = new byte[rowLen]; rowBufOff = rowLen; } } /** Reads one byte from the stream. * Returns -1 if end of file is reached. */ public int read() throws IOException { if (eof) { return -1; } if (predictor == 1) { return readIISByte (); } if (rowBufOff == rowLen) { // Starting out, or previous row exhausted. readRow (); if (eof) { return -1; } } return rowBuf[rowBufOff++] & 0XFF; } /** Reads the specified number of bytes into a buffer. * Returns the number of bytes actually read, or -1 if * end of file has been reached. */ public int read (byte[] b) throws IOException { /* Need to read a byte at a time till we have something to expand */ return read (b, 0, b.length); } /** Reads the specified number of bytes into a buffer * with offset and length specified. * Returns -1 if end of file has been reached. * No matter how much is requested, this will only return one * row's worth of data at most. */ public int read (byte[] b, int off, int len) throws IOException { if (eof) { return -1; } if (predictor == 1) { // predictor of 1 means no predictor. //return iis.read (b, off, len); // That can't be right, can it? return readIISBytes(b, off, len); } if (rowBufOff == rowLen) { // Starting out, or previous row exhausted. readRow (); if (eof) { return -1; } } if (len > rowLen - rowBufOff) { /* Return no more than a row's worth, regardless */ len = rowLen - rowBufOff; } for (int i = 0; i < len; i++) { b[off + i] = rowBuf[rowBufOff++]; } return len; } public long skip (long n) throws IOException { return skipIISBytes(n); } /* Takes bytes from the input buffer and turn them into bytes in the output buffer. * Returns the number of bytes available. */ private int processBytes () { int avail = 0; return avail; } /* Reads a row's worth of data and stores in rowBuf. */ private void readRow () throws IOException { /* Swap rowBuf and rowBuf2 */ byte[] r = rowBuf; rowBuf = rowBuf2; rowBuf2 = r; rowBufOff = colBytes; // Ignore weird predictor of 15 for now if (predictor >= 10) { // throw one byte away readIISByte (); } int off = colBytes; while (off < rowLen) { int n = readIISBytes(rowBuf, off, rowLen - off); if (n > 0) { off += n; } else { eof =true; return; } } switch (predictor) { case 1: case 10: break; case 2: // TIFF predictor case 11: // Sub -- left for (int i = colBytes; i < rowLen; i++) { rowBuf[i] += rowBuf[i-colBytes]; } break; case 12: // Up -- above for (int i = colBytes; i < rowLen; i++) { rowBuf[i] += rowBuf2[i]; } break; case 13: // Average -- (left + above) / 2 for (int i = colBytes; i < rowLen; i++) { rowBuf[i] += ((rowBuf[i - colBytes] & 0xFF) + (rowBuf2[i] & 0xFF)) / 2; } break; case 14: // Paeth -- closest of left, above, upper-left for (int i=0+colBytes; i < rowLen; i++) { int a = rowBuf[i - colBytes] & 0XFF; int b = rowBuf2[i] & 0XFF; int c = rowBuf2[i - colBytes] & 0XFF; int p = a + b - c; int pa = Math.abs(p - a); int pb = Math.abs(p - b); int pc = Math.abs(p - c); int val; if (pa<=pb && pa<=pc) { val = a; } else if (pb<=pc) { val = b; } else { val = c; } rowBuf[i] += (byte)val; } break; case 15: // optimum -- per line determination break; } } /** Get an "inflated" byte. We do buffering here * for efficiency. */ private int readIISByte () throws IOException { // iisBufOff -- offset to next available byte // iisBuf -- byte array read from IIS // iisBufLen -- number of bytes of valid data in iisBuf if (iisBufOff >= iisBufLen && !iisEof) { readIIS (); } if (iisEof) { return -1; } return (int) (iisBuf[iisBufOff++] & 0XFF); } /** Get a bufferload of bytes. */ private int readIISBytes (byte[] buf, int off, int len) throws IOException { if (iisBufOff >= iisBufLen && !iisEof) { readIIS (); } if (iisEof) { return -1; } /* We don't attempt to optimize across buffer boundaries */ if (iisBufLen - iisBufOff < len) { len = iisBufLen - iisBufOff; } for (int i = off; i < off + len; i++) { buf[i] = iisBuf[iisBufOff++]; } return len; } /** Skip a specified number of bytes. */ private long skipIISBytes (long n) throws IOException { if (iisBufOff >= iisBufLen && !iisEof) { readIIS (); } if (iisEof) { return -1; } if (iisBufLen - iisBufOff < n) { n = iisBufLen + iisBufOff; } iisBufOff += n; return n; } /** Fill up the IIS buffer. Should be called only by * other IIS buffer-specific routines. */ private int readIIS () throws IOException { if (iisEof) { return -1; } int n = iis.read (iisBuf); iisBufOff = 0; iisBufLen = n; if (n <= 0) { iisEof = true; } return n; } } jhove/classes/edu/harvard/hul/ois/jhove/module/pdf/PdfIndirectObj.java0000644000707400001440000000266510771562744025172 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.pdf; import java.util.*; /** * A representation of a PDF indirect object reference. */ public class PdfIndirectObj extends PdfObject { private Map _objectMap; private PdfObject _cachedObject; /** * Creates a PdfIndirectObj object. * * @param objNumber The PDF object number * @param genNumber The PDF generation number * @param objectMap The object map for the PDF file */ public PdfIndirectObj (int objNumber, int genNumber, Map objectMap) { super (objNumber, genNumber); _objectMap = objectMap; _cachedObject = null; } /** * Retrieves the object which is referenced. Uses the * cached reference if there is one; caches the reference * if there wasn't one before. */ public PdfObject getObject () { if (_cachedObject != null) { return _cachedObject; } else { long key = ((long) _objNumber << 32) + ((long) _genNumber & 0XFFFFFFFFL); _cachedObject = (PdfObject) _objectMap.get (new Long (key)); return _cachedObject; } } } jhove/classes/edu/harvard/hul/ois/jhove/module/pdf/PdfInvalidException.java0000644000707400001440000000255310771562743026236 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.pdf; import edu.harvard.hul.ois.jhove.*; /** * Exception subclass used internally by the PDF module. * A PdfInvalidException is thrown when a condition indicates * that the document is invalid but not necessarily ill-formed. */ public final class PdfInvalidException extends PdfException { /** * Creates a PdfInvalidException. */ public PdfInvalidException (String m) { super(m); } /** * Creates a PdfInvalidException with specified offset. */ public PdfInvalidException (String m, long offset) { super(m, offset); } /** * Creates a PdfInvalidException with specified offset and token. */ public PdfInvalidException (String m, long offset, Token token) { super(m, offset, token); } /** * Performs the appropriate disparagement act on a RepInfo * object. For a PdfInvalidException, this is to call * setValid (false). */ public void disparage (RepInfo info) { info.setValid (false); } } jhove/classes/edu/harvard/hul/ois/jhove/module/pdf/PdfObject.java0000644000707400001440000000435710771562751024202 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.pdf; /** * The abstract superclass for all representations of objects * in PDF files. Objects may be created using the obj syntax, * in which case they have an object and generation number, or * they may be parts of other objects, in which case they don't. * All subclasses should implement a constructor * which has the object and generation * numbers as its last two arguments, and one which has the * same arguments except for omitting these two. */ public abstract class PdfObject { /** PDF object number. */ protected int _objNumber; /** PDF generation number. */ protected int _genNumber; /** * Superclass constructor which should be called for all * PdfObject instances that include an object and generation * number. * * @param objNumber The PDF object number * @param genNumber The PDF generation number */ public PdfObject (int objNumber, int genNumber) { _objNumber = objNumber; _genNumber = genNumber; } /** * Superclass constructor for which the object and generation * number will be added separately or not at all. Initializes * the object and generation numbers to -1 to signify their * absence. */ public PdfObject () { _objNumber = -1; _genNumber = -1; } /** Returns the PDF object number. If the object wasn't given an object number, returns -1. */ public int getObjNumber () { return _objNumber; } /** Returns the PDF generation number. If the object wasn't given a generation number, returns -1. */ public int getGenNumber () { return _genNumber; } /** Sets the PDF object number. */ public void setObjNumber (int num) { _objNumber = num; } /** Sets the PDF generation number. */ public void setGenNumber (int num) { _genNumber = num; } } jhove/classes/edu/harvard/hul/ois/jhove/module/pdf/PdfMalformedException.java0000644000707400001440000000260510771562737026557 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.pdf; import edu.harvard.hul.ois.jhove.*; /** * Exception subclass used internally by the PDF module. * A PdfMalformedException is thrown when a condition indicates * that the document is not well-formed. * * @see PdfInvalidException */ public class PdfMalformedException extends PdfException { /** * Creates a PdfMalformedException. */ public PdfMalformedException (String m) { super(m); } /** * Creates a PdfMalformedException with specified offset. */ public PdfMalformedException (String m, long offset) { super(m, offset); } /** * Creates a PdfMalformedException with specified offset and token. */ public PdfMalformedException (String m, long offset, Token token) { super(m, offset, token); } /** * Performs the appropriate disparagement act on a RepInfo * object. For a PdfInvalidException, this is to call * setValid (false). */ public void disparage (RepInfo info) { info.setWellFormed (false); } } jhove/classes/edu/harvard/hul/ois/jhove/module/pdf/PdfProfile.java0000644000707400001440000001436311020526323024351 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.pdf; import edu.harvard.hul.ois.jhove.module.*; import java.io.*; import java.util.*; /** * Abstract class for PDF profile checkers. */ public abstract class PdfProfile { /****************************************************************** * PRIVATE CLASS FIELDS. ******************************************************************/ /** The module invoking this profile. */ protected PdfModule _module; /** A brief human-readable description of the profile. */ protected String _profileText; /** The Parser being used on the file. */ protected Parser _parser; /** The file being analyzed. */ protected RandomAccessFile _raf; /** Set to true if this file has previously * been validated by an invocation of this PdfProfile. */ private boolean _alreadyOK; /** * Creates a PdfProfile. * Subclass constructors should call the super constructor, * then assign a value to _profileText. * * @param module The PDFModule we're working under * */ public PdfProfile (PdfModule module) { _module = module; } /** * Returns the value of the alreadyOK flag. * This flag when one profile depends on another, to save redundant * checking. * The alreadyOK flag is set whenever satisfiesProfile * returns true. */ public boolean isAlreadyOK () { return _alreadyOK; } /** * Returns true if the document satisfies the profile. * This calls satisfiesThisProfile(), which does the actual work. * * @param raf The RandomAccessFile being parsed * @param parser The Parser being used on the file */ public final boolean satisfiesProfile (RandomAccessFile raf, Parser parser) { _raf = raf; _parser = parser; _alreadyOK = false; boolean sp = satisfiesThisProfile (); if (sp) { _alreadyOK = true; } return sp; } /** * Returns true if the document satisfies the * profile. Subclasses should override satisfiesThisProfile(), * not satisfiesProfile(), as * satisfiesProfile() does some * additional bookkeeping for all subclases. */ public abstract boolean satisfiesThisProfile (); /** * Returns the text which describes this profile. */ public String getText () { return _profileText; } /** Returns true if a Filter object contains a filter name which * matches any of the Strings in the second argument. * Will return falsefalse is returned. * @param names An array of Strings naming the filters which should * precipitate a true result */ protected boolean hasFilters (PdfObject filter, String[] names) { String filterName; try { if (filter == null) { return false; } if (filter instanceof PdfSimpleObject) { // Name of just one filter filterName = ((PdfSimpleObject) filter).getStringValue (); for (int j = 0; j < names.length; j++) { if (names[j].equals (filterName)) { return true; } } } else { // If it's not a name, it must be an array Vector filterVec = ((PdfArray) filter).getContent (); for (int i = 0; i < filterVec.size (); i++) { PdfSimpleObject filt = (PdfSimpleObject) filterVec.elementAt (i); filterName = filt.getStringValue (); for (int j = 0; j < names.length; j++) { if (names[j].equals (filterName)) { return true; } } } } } catch (Exception e) { return false; } return false; // none of the filters were found } /** * This checks the "XObjects" dictionary, which is a dictionary whose * entries have values that are XObjects. Override xObjectOK to * implement profile-specific behavior. */ protected boolean xObjectsOK (PdfDictionary xos) { if (xos == null) { return true; // nothing to fail } try { Iterator iter = xos.iterator (); while (iter.hasNext ()) { PdfObject obj = _module.resolveIndirectObject ((PdfObject) iter.next ()); if (obj instanceof PdfStream) { obj = ((PdfStream) obj).getDict (); } if (obj instanceof PdfDictionary) { PdfDictionary xobj = (PdfDictionary) obj; if (!xObjectOK (xobj)) { return false; } } } } catch (Exception e) { return false; } return true; } /** * Checks a single XObject for xObjectsOK. Always returns true. * Override to implement tests. */ protected boolean xObjectOK (PdfDictionary xo) { return true; } } jhove/classes/edu/harvard/hul/ois/jhove/module/pdf/PdfSimpleObject.java0000644000707400001440000000631210771562735025347 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.pdf; import java.util.*; /** * A representation of a PDF object which can be represented * by a Token. In some cases, this means that the full * content of the object isn't stored, because we don't * (think we) need it for our purposes. */ public class PdfSimpleObject extends PdfObject { private Token _token; /** * Creates a PdfSimpleObject. * * @param objNumber The PDF object number * @param genNumber The PDF generation number * @param token The Token represented by this object */ public PdfSimpleObject (Token token, int objNumber, int genNumber) { super (objNumber, genNumber); _token = token; } /** * Creates a PdfSimpleObject. * * @param token The Token represented by this object */ public PdfSimpleObject (Token token) { super (); _token = token; } /** * Returns the token represented by this object. */ public Token getToken () { return _token; } /** * Return the string value of the token. Returns * null if the token is not a StringValuedToken. */ public String getStringValue () { if (!(_token instanceof StringValuedToken)) { return null; } else { return ((StringValuedToken) _token).getValue (); } } /** * Return the raw bytes of the token, as a Vector of Integer objects. * Returns null if the token is not a StringValuedToken. */ public Vector getRawBytes () { if (!(_token instanceof StringValuedToken)) { return null; } else { return ((StringValuedToken) _token).getRawBytes (); } } /** * Return the integer value of the token. Throws a ClassCastException * if the token is not a Numeric. */ public int getIntValue () { return ((Numeric) _token).getIntegerValue (); } /** * Return the double value of the token. Throws a * ClassCastException if the token is not a Numeric. */ public double getDoubleValue () { return ((Numeric) _token).getValue (); } /** * Return true if the value of the token is the keyword * "true", and false otherwise. */ public boolean isTrue () { if (!(_token instanceof Keyword)) { return false; } else { return "true".equals (((Keyword) _token).getValue ()); } } /** * Return true if the value of the token is the keyword * "false", and false otherwise. */ public boolean isFalse () { if (!(_token instanceof Keyword)) { return false; } else { return "false".equals (((Keyword) _token).getValue ()); } } } jhove/classes/edu/harvard/hul/ois/jhove/module/pdf/PdfStream.java0000644000707400001440000001601611225650305024206 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.pdf; import java.util.*; /** * A representation of a PDF stream object. * A PdfStream consists of a dictionary and a stream token. * By default the content of the stream isn't loaded, but * it can be loaded when necessary. */ public class PdfStream extends PdfObject { private Stream _stream; private PdfDictionary _dict; private Filter[] _filters; private boolean pdfaCompliant; /** * Creates a PdfStream * * @param dict A dictionary describing the stream * @param stream A Stream token * @param objNumber The PDF object number * @param genNumber The PDF generation number */ public PdfStream (PdfDictionary dict, Stream stream, int objNumber, int genNumber) throws PdfException { super (objNumber, genNumber); _stream = stream; _dict = dict; pdfaCompliant = true; // assume compliance to start with extractFilters (); } /** * Creates a PdfStream. * * @param dict A dictionary describing the stream * @param stream A Stream token */ public PdfStream (PdfDictionary dict, Stream stream) throws PdfException { super (); _stream = stream; _dict = dict; pdfaCompliant = true; // assume compliance to start with extractFilters (); } /** * Returns the stream's dictionary */ public PdfDictionary getDict () { return _dict; } /** * Returns the stream's Stream portion */ public Stream getStream () { return _stream; } /** * If the stream is external, returns the file specification * for it, otherwise returns null. */ public String getFileSpecification () { PdfObject spec = _dict.get ("F"); if (spec == null) { return null; } try { pdfaCompliant = false; // not allowed with PDF/A FileSpecification fs = new FileSpecification (spec); return fs.getSpecString (); } catch (PdfException e) { return null; } } /** Returns true if no PDF/A compliance problems have been found, false if * problems have been found */ public boolean isPdfaCompliant () { return pdfaCompliant; } /** * Returns an array (possibly empty but not null) of the filters for * this Stream. The elements of the array are Filter * objects. */ public Filter[] getFilters () throws PdfException { return _filters; } /** * Return the name of the filter, if the DecodeParams dictionary * is present and has a "Name" entry. */ public String getFilterName () { PdfObject decparms = _dict.get ("DecodeParams"); if (decparms instanceof PdfDictionary) { PdfObject name = ((PdfDictionary) decparms).get ("Name"); if (name instanceof PdfSimpleObject) { return ((PdfSimpleObject)name).getStringValue(); } } return null; } /* Constructs the _filters array. */ private void extractFilters () throws PdfException { boolean ff = false; _filters = new Filter[] {}; // default value PdfObject filter = _dict.get ("Filter"); if (filter == null) { filter = _dict.get ("FFilter"); if (filter == null) { return; } ff = true; pdfaCompliant = false; } PdfObject parms; if (ff) { parms = _dict.get ("FDecodeParms"); if (parms != null) { pdfaCompliant = false; } } else { parms = _dict.get ("DecodeParms"); } /* There may be a single filter, which will be a string, * in which case the parms will be a single dictionary. * Or there may be an array, in which case the params will * be an array of dictionaries. The parms are optional, so * they may also be null. */ try { if (filter instanceof PdfArray) { Vector vec = ((PdfArray) filter).getContent(); int size = vec.size (); Filter[] val = new Filter[size]; Vector parmVec = null; if (parms != null) { parmVec = ((PdfArray) parms).getContent (); } for (int i = 0; i < size; i++) { PdfSimpleObject f = (PdfSimpleObject) vec.get(i); val[i] = new Filter (f.getStringValue()); if (parmVec != null) { PdfObject parm = (PdfObject) parmVec.get(i); // Parameter may be the null object. if (parm instanceof PdfSimpleObject) { PdfSimpleObject sParm = (PdfSimpleObject) parm; if ("null".equals (sParm.getStringValue ())) { continue; } } val[i].setDecodeParms((PdfDictionary) parmVec.get(i)); } } _filters = val; } else { /* Only other allowed value is a string */ Filter[] val = new Filter[1]; val[0] = new Filter (((PdfSimpleObject) filter).getStringValue()); if (parms instanceof PdfDictionary) { val[0].setDecodeParms((PdfDictionary) parms); } _filters = val; } } catch (Exception e) { throw new PdfMalformedException ("Malformed filter"); } } protected List makeFilterList () throws PdfException { Filter[] filters = getFilters (); if (filters.length == 0) { return null; } List lst = new ArrayList (filters.length); for (int i = 0; i < filters.length; i++) { lst.add (filters[i].getFilterName()); } return lst; } /** * Returns true if this is an image stream. */ public boolean isImage () { // An image dictionary may not have a type, but must have a subtype // of Image. PdfObject subtype = _dict.get ("Subtype"); if (subtype instanceof PdfSimpleObject) { String subtypeStr = ((PdfSimpleObject) subtype).getStringValue (); return ("Image".equals (subtypeStr)); } else { return false; } } } jhove/classes/edu/harvard/hul/ois/jhove/module/pdf/PdfStrings.java0000644000707400001440000000562610771562751024425 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.pdf; /** * A class for holding arrays of informative strings that will go into * properties of a PDF object. */ public class PdfStrings { /** A private constructor just to make sure nobody instantiates the class by mistake. */ private PdfStrings () { } /** Encryption algorithm strings. */ public final static String[] ALGORITHM = { "Undocumented", "40 bit key", "Key greater than 40", "Unpublished" }; /** Flags for FontDescriptor. In PDF notation, bit 1 * (not 0) is the low-order bit. */ public final static String[] FONTDESCFLAGS = { "FixedPitch", // 1 "Serif", // 2 "Symbolic", // 3 "Script", // 4 "", // 5 "Nonsymbolic", // 6 "Italic", // 7 "", // 8 "", // 9 "", // 10 "", // 11 "", // 12 "", // 13 "", // 14 "", // 15 "", // 16 "AllCap", // 17 "SmallCap", // 18 "ForceBold"}; // 19 /** Flags for user access permissions when revision 3 is specified. */ public final static String[] USERPERMFLAGS3 = { "", // 1, reserved "", // 2, reserved "Print", // 3 "Modify", // 4 "Extract", // 5 "Add/modify annotations/forms", // 6 "", // 7 "", // 8 "Fill interactive form fields", // 9 "Extract for accessibility", // 10 "Assemble", // 11 "Print high quality" // 12 }; /** Flags for user access permissions when revision 2 is specified. */ public final static String[] USERPERMFLAGS2 = { "", // 1, reserved "", // 2, reserved "Print", // 3 "Modify", // 4 "Extract", // 5 "Add/modify annotations/forms", // 6 "", // 7 "", // 8 "", // 9 "", // 10 "", // 11 "" // 12 }; /** Flags for annotations */ public final static String[] ANNOTATIONFLAGS = { "Invisible", // 1 "Hidden", // 2 "Print", // 3 "NoZoom", // 4 "NoRotate", // 5 "NoView", // 6 "ReadOnly" // 7 }; } jhove/classes/edu/harvard/hul/ois/jhove/module/pdf/PdfXMPSource.java0000644000707400001440000000546610771562750024622 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.pdf; //import java.io.InputStream; import java.io.*; import edu.harvard.hul.ois.jhove.XMLWrapperStream; //import edu.harvard.hul.ois.jhove.XMPSource; /** * Class for providing an InputSource to XMPHandler. * Only an InputSource based on a Reader is supported. * * @author Gary McGath * */ public final class PdfXMPSource extends edu.harvard.hul.ois.jhove.XMPSource { private PdfStream _stream; private RandomAccessFile _raf; protected String _encoding; /** * Constructor based on Stream object. * Since a double read may be necessary, we have * one version without encoding (before it's known), * and another with encoding. * * @param stream PDFStream containing the XMP * @param raf The RandomAccessFile object underlying the PDF */ public PdfXMPSource(PdfStream stream, RandomAccessFile raf) throws UnsupportedEncodingException { super (new InputStreamReader (new XMLWrapperStream (new StreamInputStream (stream, raf), "XMP", "1.0", null, null))); //super(rdr); _stream = stream; _raf = raf; } /** * Constructor based on Stream object with * encoding specified. * * @param stream PDFStream containing the XMP * @param raf The RandomAccessFile object underlying the PDF * @param encoding The character encoding to use */ public PdfXMPSource(PdfStream stream, RandomAccessFile raf, String encoding) throws UnsupportedEncodingException { super (new InputStreamReader (new StreamInputStream (stream, raf), encoding)); //super(rdr); _stream = stream; _raf = raf; _encoding = encoding; } /* (non-Javadoc) * * Resets the reader by reinitializing it from the PdfStream. * * @see edu.harvard.hul.ois.jhove.XMPSource#resetReader() */ protected void resetReader() { try { if (_encoding == null) { _reader = new InputStreamReader (new StreamInputStream (_stream, _raf)); } else { _reader = new InputStreamReader (new StreamInputStream (_stream, _raf), _encoding); } } catch (UnsupportedEncodingException e) { // Has no business happening if it didn't the first time. } } } jhove/classes/edu/harvard/hul/ois/jhove/module/pdf/RunLengthFilterStream.java0000644000707400001440000000150310771562735026562 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.pdf; import java.io.FilterInputStream; import java.io.InputStream; /** * This is a stub which may be implemented in the future. * It appears to be unnecessary for object streams and cross-reference * streams created by any version of Acrobat through 7.0, and we * don't look at other types of streams. * * @author Gary McGath * */ public class RunLengthFilterStream extends FilterInputStream { /** * @param in */ public RunLengthFilterStream(InputStream in) { super(in); } } jhove/classes/edu/harvard/hul/ois/jhove/module/pdf/State.java0000644000707400001440000000755610771562746023432 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.pdf; /** * An enumeration class for use with the Tokenizer. Only * the static instances which are declared within the class * should ever be created. */ public class State { /* **************************************************************** * PUBLIC CLASS FIELDS. ******************************************************************/ public static final State COMMENT = new State ("COMMENT"); public static final State E = new State ("E"); public static final State EN = new State ("EN"); public static final State END = new State ("END"); public static final State ENDS = new State ("ENDS"); public static final State ENDST = new State ("ENDST"); public static final State ENDSTR = new State ("ENDSTR"); public static final State ENDSTRE = new State ("ENDSTRE"); public static final State ENDSTREA = new State ("ENDSTREA"); public static final State ENDSTREAM = new State ("ENDSTREAM"); public static final State FRACTIONAL = new State ("FRACTIONAL"); public static final State GREATER_THAN = new State ("GREATER_THAN"); public static final State HEXADECIMAL = new State ("HEXADECIMAL"); public static final State HEX_FE_1 = new State ("HEX_FE_1"); public static final State HEX_FE_2 = new State ("HEX_FE_2"); public static final State HEX_PDF_1 = new State ("HEX_PDF_1"); public static final State HEX_PDF_2 = new State ("HEX_PDF_2"); public static final State HEX_UTF16_1 = new State ("HEX_UTF16_1"); public static final State HEX_UTF16_2 = new State ("HEX_UTF16_2"); public static final State HEX_UTF16_3 = new State ("HEX_UTF16_3"); public static final State HEX_UTF16_4 = new State ("HEX_UTF16_4"); public static final State HEX_RAW = new State ("HEX_RAW"); public static final State KEYWORD = new State ("KEYWORD"); public static final State LESS_THAN = new State ("LESS_THAN"); public static final State LITERAL = new State ("LITERAL"); public static final State LITERAL_FE = new State ("LITERAL_FE"); public static final State LITERAL_PDF = new State ("LITERAL_PDF"); public static final State LITERAL_UTF16_1 = new State ("LITERAL_UTF16_1"); public static final State LITERAL_UTF16_2 = new State ("LITERAL_UTF16_2"); public static final State NAME = new State ("NAME"); public static final State NUMERIC = new State ("NUMERIC"); public static final State STREAM = new State ("STREAM"); public static final State WHITESPACE = new State ("WHITESPACE"); /* **************************************************************** * PRIVATE INSTANCE FIELDS. ******************************************************************/ private String _name; /* **************************************************************** * CLASS CONSTRUCTOR. ******************************************************************/ /** * Constructor. It is private so that no other classes * can create instances of State. */ private State (String name) { _name = name; } /* **************************************************************** * PUBLIC INSTANCE METHODS. ******************************************************************/ /** * Equality test. * Two State objects are considered equal only if they * are the same object. */ public boolean equals (State state) { return this == state; } /** * Convert to String representation. * A State object's String representation is its name. */ public String toString () { return _name; } } jhove/classes/edu/harvard/hul/ois/jhove/module/pdf/StdStructTypes.java0000644000707400001440000000341610771562734025322 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.pdf; /** * This class holds the constants for standard structure type names, * and a static method for determining if a string belongs * to those names. */ public class StdStructTypes { /** * Array of valid structure type names */ public final static String typeNames [] = { "Document", "Part", "Art", "Sect", "Div", "BlockQuote", "Caption", "TOC", "TOCI", "Index", "NonStruct", "Private", "P", "H", "H1", "H2", "H3", "H4", "H5", "H6", "L", "LI", "Lbl", "LBody", "Table", "TR", "TH", "TD", "Span", "Quote", "Note", "Reference", "BibEntry", "Code", "Link", "Figure", "Formula", "Form" }; /** * The subset of typeNames which denotes a block-level * element */ public final static String blockLevelNames [] = { "P", "H", "H1", "H2", "H3", "H4", "H5", "H6", "L", "LI", "Lbl", "LBody", "Table" }; /* Private constructor, so no instances of this object can be created */ private StdStructTypes () { } /** * Returns true if s is equal (by an equals() test) * to some string in typeNames. */ public static boolean includes (String s) { for (int i = 0; i < typeNames.length; i++) { if (typeNames[i].equals (s)) { return true; } } return false; } public static boolean isBlockLevel (String s) { for (int i = 0; i < blockLevelNames.length; i++) { if (blockLevelNames[i].equals (s)) { return true; } } return false; } } jhove/classes/edu/harvard/hul/ois/jhove/module/pdf/Stream.java0000644000707400001440000001576210771562746023603 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003-2005 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.pdf; //import edu.harvard.hul.ois.jhove.*; import java.io.*; //import java.util.*; //import java.util.zip.InflaterInputStream; /** * Class to encapsulate a stream token. The content of the * stream is not saved, only its length and starting offset. */ public class Stream extends Token { /** Length of stream. */ private long _length; /** Starting offset in file. */ private long _offset; /** Number of bytes read so far. */ private int _bytesRead; /** Filters which apply to this stream. */ private Filter[] _filters; /** InputStream which incorporates all the filters. */ private InputStream _inStream; /** Byte array which contains the raw file data for reading. */ private byte[] _sdata; /** Constructor. */ public Stream () { super (); _length = 0; _offset = -1; _filters = new Filter[0]; _bytesRead = 0; _sdata = null; } /** Returns the length of the stream. This is 0, unless * the Stream's setLength method has been called. */ public long getLength () { return _length; } /** * Sets the length field. * This should be the length of the stream proper * (not counting its dictionary) before filtering, in other words, * the number of bytes stored in the file. */ public void setLength (long length) { _length = length; } /** Returns the current offset in the stream. This is -1, unless * the Stream's setOffset method has been called. */ public long getOffset () { return _offset; } /** * Sets the offset field. */ public void setOffset (long offset) { _offset = offset; } /** Sets the array of filters used by the stream. * This must be called before initRead. */ public void setFilters (Filter[] filters) { _filters = filters; } /** Prepares for reading the Stream. * If the filter List includes one which we don't support, throws a * PdfException. This supports the abbreviated filter names * in Appendix H of the PDF spec. */ public void initRead (RandomAccessFile raf) throws IOException, PdfException { _bytesRead = 0; raf.seek(_offset); //InputStream is = new RAFInputStream (raf); /* We can't easily resume reading a filtered stream if we * seek elsewhere in the file, so the only really * safe bet is to read it all into memory first. * Fortunately, _length tells us the number of raw * bytes we need to read. This also saves rereading * when we need to reset the stream. */ if (_sdata == null) { _sdata = new byte[(int) _length]; int ln = 0; while (ln < _length) { int n = raf.read (_sdata, ln, (int) (_length - ln)); if (n <= 0) { break; } ln += n; } } InputStream is = new ByteArrayInputStream (_sdata); for (int i = 0; i < _filters.length; i++) { Filter filt = (Filter) _filters[i]; String filtName = filt.getFilterName (); FilterInputStream fis = null; /* ASCIIHex-, ASCII85- and RunLengthDecode are currently * just stubs. If we ever really need them, we should * consider grabbing the implementations in PDFBox on * SourceForge, which should (hint to third-party developers * if you need them) just drop into place with * the addition of an include. */ if ("ASCIIHexDecode".equals (filtName) || "AHx".equals (filtName)) { is = new AsciiHexFilterStream (is); } else if ("ASCII85Decode".equals (filtName) || "A85".equals (filtName)) { is = new Ascii85FilterStream (is); } else if ("FlateDecode".equals (filtName) || "Fl".equals (filtName)) { // InflaterInputStream does only part of the job. // PdfFlateInputStream enhances it with Predictor support. is = new PdfFlateInputStream (is, filt.getDecodeParms()); } else if ("RunLengthDecode".equals (filtName) || "RL".equals (filtName)) { is = new RunLengthFilterStream (is); } } _inStream = is; } /** Reads a byte from the Stream, applying the Filters if any. */ public int read() throws IOException { int val = _inStream.read(); if (val >= 0) { ++_bytesRead; } return val; } /** Reads a sequence of bytes from the Stream, applying the * Filters if any. */ public int read (byte[] b) throws IOException { int n = _inStream.read (b); if (n > 0) { _bytesRead += n; } return n; } /** Skips a specified number of bytes in the stream. */ public long skipBytes (long n) throws IOException { long val = _inStream.skip(n); _bytesRead += val; return val; } /** Reads an ASCII string, which may be preceded by white space. * Will eat the first white space character after the ASCII * string. */ public int readAsciiInt () throws IOException, PdfException { boolean digitSeen = false; int val = 0; for (;;) { char c = (char) read (); if (Character.isDigit(c)) { digitSeen = true; val = val * 10 + (c - '0'); } else if (digitSeen) { /* Non-digit after a digit; we're done */ break; } else if (!Character.isWhitespace(c)) { throw new PdfMalformedException ("Malformed ASCII number in stream"); } } return val; } /** Advances to a specified offset in the stream. The offset * is defined as the number of decompressed bytes which * precede the position in the stream. Returns true * if the advance is successful, false if the * point has already been passed or some other failure occurs. */ public boolean advanceTo (int offset) throws IOException { if (offset < _bytesRead) { return false; // can't get there from here } else { while (_bytesRead < offset) { if (skipBytes (offset - _bytesRead) <= 0) { break; } } return true; } } } jhove/classes/edu/harvard/hul/ois/jhove/module/pdf/StreamInputStream.java0000644000707400001440000000302410771562745025762 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.pdf; import java.io.*; /** A StreamInputStream is an InputStream which provides the bytes * from a PdfStream. It reads bytes from the PdfStream's underlying * file starting at the beginning of the stream data and providing * as many bytes as are indicated by its length. No filters are * applied; just the raw data is read. * */ public class StreamInputStream extends InputStream { private RandomAccessFile _file; private long _startPos; private long _curPos; private long _length; public StreamInputStream (PdfStream pdfStream, RandomAccessFile file) { _file = file; Stream strm = pdfStream.getStream (); _startPos = strm.getOffset (); _curPos = _startPos; _length = strm.getLength (); try { file.seek (_startPos); } catch (IOException e) {} } /** * Return one byte from the stream. * When the end of the stream is reached, returns -1. */ public int read () throws IOException { if (_curPos - _startPos >= _length) { return -1; } else { _curPos++; int ch = _file.read (); return ch; } } }jhove/classes/edu/harvard/hul/ois/jhove/module/pdf/StreamTokenizer.java0000644000707400001440000000504210771562734025461 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2005 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.pdf; import java.io.*; /** * Tokenizer subclass which gets data from an object stream. * * @author Gary McGath * */ public class StreamTokenizer extends Tokenizer { /** Source from which to read bytes. */ private Stream _stream; /** Backup flag. */ private boolean _backupFlag; /** Last character read. Will be returned again if _backupFlag * is true. */ private int _lastChar; private static final String NO_STREAM = "Streams may not be embedded in object streams"; public StreamTokenizer (RandomAccessFile file, Stream stream) { super (); _file = file; _stream = stream; _backupFlag = false; } /** Streams can occur only in files, not in streams, * so this should never be called. */ protected void initStream (Stream token) throws IOException, PdfException { throw new PdfMalformedException (NO_STREAM); } /** Gets a character from the file, using a buffer. */ public int readChar () throws IOException { if (_backupFlag) { _backupFlag = false; return _lastChar; } else { _lastChar = _stream.read (); return _lastChar; } } /** * Set the Tokenizer to a new position in the stream. * * @param offset The offset in bytes from the start of the stream. */ public void seek (long offset) throws IOException, PdfException { // Advancing in the stream is easy. Backing up requires starting // the stream over. if (!_stream.advanceTo ((int) offset)) { _stream.initRead (_file); _stream.advanceTo ((int) offset); } seekReset (_stream.getOffset()); } /** Sets the offset of a Stream to the current file position. * Only the file-based tokenizer can do this, so this should never * be called. */ protected void setStreamOffset (Stream token) throws IOException, PdfException { throw new PdfMalformedException (NO_STREAM); } /** * Back up a byte so it will be read again. */ public void backupChar () { _backupFlag = true; } } jhove/classes/edu/harvard/hul/ois/jhove/module/pdf/StringValuedToken.java0000644000707400001440000000207411225650305025730 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.pdf; import java.util.Vector; /** * Abstract class for all PDF tokens which consist of a character sequence. */ public abstract class StringValuedToken extends Token { protected String _value; protected Vector _rawBytes; public StringValuedToken () { super (); } /** * Get the value of the token as a String. */ public String getValue () { return _value; } /** * Get the value of the token's untranslated bytes. This is unsupported * and will always return null. */ public Vector getRawBytes () { return _rawBytes; } /** * Set the value of the token. */ public void setValue (String value) { _value = value; } } jhove/classes/edu/harvard/hul/ois/jhove/module/pdf/StructureElement.java0000644000707400001440000003355310771562750025653 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.pdf; import edu.harvard.hul.ois.jhove.module.PdfModule; import java.io.*; import java.util.*; /** * Class for element of PDF document structure tree. * * @see StructureTree */ public class StructureElement { private StructureTree _tree; private PdfDictionary _dict; private PdfModule _module; private List children; private String _structType; private boolean _structIsInline; private boolean _attrIsBlock; /* Attributes which should occur only in block level elements */ private static final String blockLevelAttrs [] = { "SpaceBefore", "SpaceAfter", "StartIndent", "EndIndent", "TextIndent", "TextAlign", "BBox", "Width", "Height", "BlockAlign", "InlineAlign" }; /** * Constructor. * @param dict A PdfDictionary corresponding to a structure * element * @param tree The root StructureTree object */ public StructureElement (PdfDictionary dict, StructureTree tree) throws PdfException { _tree = tree; _dict = dict; _module = tree.getModule (); _structType = null; // If this element has a standard structure type, find it. try { PdfObject s = _module.resolveIndirectObject (dict.get ("S")); Token tok = ((PdfSimpleObject) s).getToken (); String st = ((Name) tok).getValue (); st = _tree.dereferenceStructType (st); if (StdStructTypes.includes (st)) { _structType = st; } } catch (IOException e) {} } /** * Build this element's subtree, if any * This checks the "K" entry in the dictionary and * locates all referened structure elements. These * are put into StructureElement objects, which have * their own subtrees built, and these StructureElements * are accumulated into children. */ public void buildSubtree () throws PdfException { PdfObject k = null; try { k = _module.resolveIndirectObject (_dict.get ("K")); } catch (IOException e) { throw new PdfInvalidException ("Invalid data in document structure tree"); } children = null; // The "K" element is complicated, having five variants. if (k instanceof PdfSimpleObject) { // A marked-content identifier. We don't explore further. return; } else if (k instanceof PdfDictionary) { // Could be any of three kinds of dictionaries: // - A marked-content reference dictionary // - A PDF object reference dictionary // - A structure element reference dictionary // The only one we check seriously is a structure element. PdfDictionary kdict = (PdfDictionary) k; if (isStructElem (kdict)) { StructureElement se = new StructureElement (kdict, _tree); se.buildSubtree (); se.checkAttributes (); children = new ArrayList (1); children.add (se); } else if (!isMarkedContent (kdict) && !isObjectRef (kdict)) { throw new PdfInvalidException ("Unknown element in structure tree"); } } else if (k instanceof PdfArray) { Vector kvec = ((PdfArray) k).getContent (); children = new LinkedList (); for (int i = 0; i < kvec.size (); i++) { PdfObject kelem = (PdfObject) kvec.elementAt (i); try { kelem = _module.resolveIndirectObject (kelem); } catch (IOException e) {} if (kelem instanceof PdfDictionary) { PdfDictionary kdict = (PdfDictionary) kelem; if (isStructElem (kdict)) { StructureElement se = new StructureElement (kdict, _tree); se.buildSubtree (); se.checkAttributes (); children.add (se); } } } // It's possible that none of the elements of the array // were structure elements. In this case, we change // children to null rather than have to check for an // empty vector. if (children.isEmpty ()) { children = null; } } } /** * Determine if the attributes of this element are * valid. If errors are detected, throws a PdfInvalidException. */ public void checkAttributes () throws PdfException { final String badattr = "Invalid structure attribute"; PdfObject attr; // Use the variables _structIsInline and _attrIsBlock to // note when we've got a block-level-only attribute in // an inline structure element. We initially set // _structIsInline based on the structure type, but this // may be overridden by the Placement attribute. // Figure elements occupy an ambiguous position, so we // don't mark them as ILSE's. Also, TR, TH and TD are // defined to be neither BLSE's nor ILSE's. _attrIsBlock = false; _structIsInline = !_structType.equals ("Figure") && !_structType.equals ("TH") && !_structType.equals ("TD") && !_structType.equals ("TR") && !StdStructTypes.isBlockLevel (_structType); try { attr = _module.resolveIndirectObject (_dict.get ("A")); } catch (Exception e) { throw new PdfInvalidException ("Invalid structure attribute reference"); } if (attr == null) { // no attributes is fine return; } if (attr instanceof PdfArray) { // If we have an array, it may contain elements and // revision numbers. A revision number may follow // an element, but there doesn't have to be one. Vector attrVec = ((PdfArray) attr).getContent (); for (int i = 0; i < attrVec.size (); i++) { PdfObject attrElem; try { attrElem = _module.resolveIndirectObject ((PdfObject) attrVec.elementAt (i)); } catch (IOException e) { throw new PdfInvalidException (badattr); } if (attrElem instanceof PdfDictionary) { checkAttribute ((PdfDictionary) attrElem); } else if (attrElem instanceof PdfSimpleObject) { try { Numeric revnum = (Numeric) ((PdfSimpleObject)attrElem).getToken (); } catch (Exception e) { throw new PdfInvalidException (badattr); } } else { throw new PdfInvalidException (badattr); } } } else if (attr instanceof PdfDictionary) { checkAttribute ((PdfDictionary) attr); } else { throw new PdfInvalidException ("Structure attribute has illegal type"); } if (_structIsInline && _attrIsBlock) { throw new PdfInvalidException ("Block-level attributes in inline structure element"); } } /* Check if an attribute dictionary is reasonable. */ private void checkAttribute (PdfDictionary attr) throws PdfException { try { // Must have an entry named "O", whose value is a name. PdfSimpleObject plugin = (PdfSimpleObject) attr.get ("O"); Name tok = (Name) plugin.getToken (); // If it has a Placement entry with a value other than // "Inline", then we allow block level attributes. PdfSimpleObject placement = (PdfSimpleObject) attr.get ("Placement"); if (placement != null && !"Inline".equals (placement.getStringValue ())) { _structIsInline = false; } // Though I don't think the Adobe PDF bible actually // says so, it appears that the "attributes" are // simply other keys in the attribute dictionary. // Remember if we see attributes that can't go in BLSE's; // we'll check later if we're actually in a BLSE. if (attrIsBlockLevel (attr)) { _attrIsBlock = true; } } catch (Exception e) { throw new PdfInvalidException ("Invalid attribute in document structure"); } } /* See if a dictionary is a structure element. We identify it by the S and P elements, which are required, and by making sure that the Type element, if present, has a value of "StructElem". */ private boolean isStructElem (PdfDictionary elem) throws PdfException { try { PdfObject typ = elem.get ("Type"); if (typ != null) { if (!"StructElem".equals (((PdfSimpleObject) typ).getStringValue ())) { return false; } } PdfObject s = _module.resolveIndirectObject (elem.get ("S")); // The structure type is supposed to be one of // a list of known structure types, or else is // mapped to one through the role map dictionary. // For the moment, just make sure it's a name. if (!(s instanceof PdfSimpleObject)) { return false; } Token tok = ((PdfSimpleObject) s).getToken (); if (!(tok instanceof Name)) { return false; } // It appears that there really isn't a requirement // to have structure types belong to the standard types. // Conditionalize this code out, pending more info. boolean checkStandardTypes = false; String st = ((Name) tok).getValue (); st = _tree.dereferenceStructType (st); if (!StdStructTypes.includes (st)) { if (checkStandardTypes) { throw new PdfInvalidException ("Non-standard structure type name"); } } else { // The structure type is a standard one. } // The parent reference must be an indirect reference. // The documentation says it must refer to another // structure element dictionary, but it seems that it // must also be able to refer to the structure tree root. // I'll allow both. PdfObject pref = elem.get ("P"); if (!(pref instanceof PdfIndirectObj)) { return false; } // Make sure it refers to a dictionary (at least). PdfDictionary p = (PdfDictionary) _module.resolveIndirectObject (pref); PdfSimpleObject ptype = (PdfSimpleObject) p.get ("Type"); if (ptype != null) { String typename = ptype.getStringValue (); if (!"StructTreeRoot".equals (typename) && !"StructElem".equals (typename)) { return false; } } // Passed all tests. return true; } catch (Exception e) { // Some assumption was violated return false; } } /* See if an attribute dictionary has attributes which are permitted only at block level. */ private boolean attrIsBlockLevel (PdfDictionary attrDict) { for (int i = 0; i < blockLevelAttrs.length; i++) { if (attrDict.get (blockLevelAttrs[i]) != null) { return true; } } return false; } /* Determine if a dictionary is a marked content dictionary. See Table 9.11 in the PDF 1.4 book. */ private boolean isMarkedContent (PdfDictionary dict) { try { PdfSimpleObject typeObj = (PdfSimpleObject) dict.get ("Type"); if (!typeObj.getStringValue ().equals ("MCR")) { return false; } // An MCID entry is required. PdfSimpleObject mcidObj = (PdfSimpleObject) _module.resolveIndirectObject (dict.get ("MCID")); if (mcidObj == null) { return false; } return true; } catch (Exception e) { return false; } } /* Determine if a dictionary is an object reference dictionary, as in table 9.12. */ private boolean isObjectRef (PdfDictionary dict) { try { PdfSimpleObject typeObj = (PdfSimpleObject) dict.get ("Type"); if (!typeObj.getStringValue ().equals ("OBJR")) { return false; } // An Obj entry is required. Must be an indirect object. PdfObject obj = _module.resolveIndirectObject (dict.get ("Obj")); if (obj == null) { return false; } return true; } catch (Exception e) { return false; } } } jhove/classes/edu/harvard/hul/ois/jhove/module/pdf/StructureTree.java0000644000707400001440000001510710771562734025156 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.pdf; import edu.harvard.hul.ois.jhove.module.PdfModule; import java.io.*; import java.util.*; /** * Class for PDF document structure tree. * See section 9.6, "Logical Structure," of PDF Reference, * Version 1.4, for an explanation of the document structure. * * @see StructureElement */ public class StructureTree { private PdfModule _module; private RandomAccessFile _raf; private Parser _parser; private PdfDictionary _rootDict; private PdfDictionary _roleMap; private List children; private boolean _present; private boolean _valid; /** * Constructor. If there is a document structure tree, * this fills in the appropriate information. If there isn't, * it does nothing. Call isPresent() to determine whether * there is a document structure tree. A PdfInvalidException may be * thrown if there is a structure tree but it is invalid. * * @param module The PdfModule under which we're operating * @param raf The document file object * @param parser The Parser being used */ public StructureTree (PdfModule module, RandomAccessFile raf, Parser parser) throws PdfException { _module = module; _raf = raf; _parser = parser; try { PdfDictionary docCatDict = module.getCatalogDict (); // There must be an entry in the catalog dictionary // named StructTreeRoot. If there isn't, set _present // to false. _rootDict = null; try { _rootDict = (PdfDictionary) _module.resolveIndirectObject ((PdfObject) docCatDict.get ("StructTreeRoot")); } catch (IOException e) {} if (_rootDict == null) { _present = false; _valid = false; return; } _present = true; validateRoot (); getRoleMap (); children = getChildren (); _valid = true; } catch (Exception e) { _valid = false; } } /** * Returns true if and only if the document * structure exists. */ public boolean isPresent () { return _present; } /** * Returns true if and only if no errors were * detected. */ public boolean isValid () { return _valid; } /** Returns the module associated with this object. */ public PdfModule getModule () { return _module; } /** * Dereference a name in the role map. * If there is no role map, or if the parameter is not * mapped by the role map, the original parameter will * be returned. The string will be looked up through * multiple levels in the role map. The maximum number * of levels is limited to 50, in case of circular * mappings. The value returned will be null if the * role map contains invalid data or the limit of 50 * lookups is reached. */ public String dereferenceStructType (String st) { if (_roleMap == null) { return st; } // There could be a circular mapping, so we limit the // number of concatenated lookups. for (int i = 0; i < 50; i++) { try { PdfSimpleObject mapped = (PdfSimpleObject) _roleMap.get (st); if (mapped == null) { return st; } st = mapped.getStringValue (); } catch (Exception e) { return null; // BAD dictionary! No mapping! } } return null; // Looks like an infinite loop } /* See if the root is valid. If not, throw a PDFException. */ private void validateRoot () throws PdfException { final String badRoot = "Invalid document structure root"; try { PdfSimpleObject typ = (PdfSimpleObject)_rootDict.get ("Type"); if (!"StructTreeRoot".equals (typ.getStringValue ())) { throw new PdfInvalidException (badRoot); } } catch (PdfException e) { throw e; } catch (Exception e) { throw new PdfInvalidException (badRoot); } } /** * Replaces a string with a string to which the role map * maps it. This may involve multiple levels of lookup. */ /* Build a list of the children of the root. The elements of the list are StructureElements. Returns null if there are none. */ private List getChildren () throws PdfException { final String invdata = "Invalid data in document structure root"; List kidsList = null; PdfObject kids = null; try { kids = _module.resolveIndirectObject (_rootDict.get ("K")); } catch (IOException e) {} if (kids == null) { return null; } if (kids instanceof PdfDictionary) { // Only one child kidsList = new ArrayList (1); StructureElement se = new StructureElement ((PdfDictionary) kids, this); se.buildSubtree (); se.checkAttributes (); kidsList.add (se); return kidsList; } else if (kids instanceof PdfArray) { // Multiple children Vector kidsVec = ((PdfArray) kids).getContent (); kidsList = new ArrayList (kidsVec.size ()); for (int i = 0; i < kidsVec.size (); i++) { PdfObject kid; try { kid = _module.resolveIndirectObject ((PdfObject) kidsVec.elementAt (i)); } catch (IOException e) { throw new PdfMalformedException (invdata); } StructureElement se = new StructureElement ((PdfDictionary) kid, this); se.buildSubtree (); se.checkAttributes (); kidsList.add (se); } return kidsList; } else { throw new PdfInvalidException (invdata); } } /* Extract and save the role map, if any. Throw an exception if RoleMap names something that isn't a dictionary. It's legitimate for roleMap to be null. */ private void getRoleMap () throws PdfException { final String invdata = "Invalid RoleMap"; try { _roleMap = (PdfDictionary) _module.resolveIndirectObject (_rootDict.get ("RoleMap")); } catch (Exception e) { throw new PdfInvalidException (invdata); } } } jhove/classes/edu/harvard/hul/ois/jhove/module/pdf/TaggedProfile.java0000644000707400001440000000437310771562735025056 0ustar garyusers package edu.harvard.hul.ois.jhove.module.pdf; import edu.harvard.hul.ois.jhove.module.*; /** * PDF profile checker for Tagged PDF documents. * See section 9.7, "Tagged PDF", of the PDF Reference, * Version 1.4, for an explanation of tagged PDF. */ public final class TaggedProfile extends PdfProfile { /****************************************************************** * PRIVATE CLASS FIELDS. ******************************************************************/ /** * Constructor. * Creates a TaggedProfile object for subsequent testing. * * @param module The module under which we are checking the profile. * */ public TaggedProfile (PdfModule module) { super (module); _profileText = "Tagged PDF"; } /** * Returns true if the document satisfies the profile. * We check only the dictionaries, not the stream contents. * */ public boolean satisfiesThisProfile () { try { PdfDictionary docCatDict = _module.getCatalogDict (); // An entry named markInfo must be in the doc catalog, // and must be a dictionary. The dictionary must // contain an entry named Marked, which must have a value // of true. PdfDictionary markInfo = (PdfDictionary) _module.resolveIndirectObject ((PdfObject) docCatDict.get ("MarkInfo")); if (markInfo == null) { return false; } PdfSimpleObject marked = (PdfSimpleObject) markInfo.get ("Marked"); if (!marked.isTrue ()) { return false; } // So much for MarkInfo. Now see if there is a // valid structure tree. StructureTree stree = new StructureTree (_module, _raf, _parser); if (!stree.isPresent () || !stree.isValid ()) { return false; } } catch (Exception e) { // An exception thrown anywhere means some assumption // has been violated, so it doesn't meet the profile. return false; } return true; // passed all tests } } jhove/classes/edu/harvard/hul/ois/jhove/module/pdf/Token.java0000644000707400001440000000255511225650305023404 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.pdf; /** * Abstract class to encapsulate lexical tokens from a PDF * file. Tokens include numbers, strings, names, delimiters (the * open and close markers for dictionaries and arrays), and streams. * There are a variety of subclasses for specific kinds of tokens. */ public abstract class Token { /** Superclass constructor */ public Token () { } /** * Returns true if the token is one which the Parser * treats as a unitary object. Everything but arrays and dictionaries * is considered a "simple" token for our purposes. */ public boolean isSimpleToken () { return (! (this instanceof ArrayStart) && ! (this instanceof ArrayEnd) && ! (this instanceof DictionaryStart) && ! (this instanceof DictionaryEnd)); } /** Returns true if this token is within PDF/A implementation * limits. Always returns true unless overridden. */ public boolean isPdfACompliant () { return true; } } jhove/classes/edu/harvard/hul/ois/jhove/module/pdf/Tokenizer.java0000644000707400001440000010006711225650305024273 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.pdf; import java.io.*; import java.util.*; /** * Tokenizer for PDF files. * This is used in conjunction with the Parser, which assembled * Tokens into higher-level constructs. */ public abstract class Tokenizer { /** Mapping between PDFDocEncoding and Unicode code points. */ public static char [] PDFDOCENCODING = { '\u0000','\u0001','\u0002','\u0003','\u0004','\u0005','\u0006','\u0007', '\b' ,'\t' ,'\n' ,'\u000b','\f' ,'\r' ,'\u000e','\u000f', '\u0010','\u0011','\u0012','\u0013','\u0014','\u0015','\u0016','\u0017', '\u02d8','\u02c7','\u02c6','\u02d9','\u02dd','\u02db','\u02da','\u02dc', '\u0020','\u0021','\"' ,'\u0023','\u0024','\u0025','\u0026','\'', '\u0028','\u0029','\u002a','\u002b','\u002c','\u002d','\u002e','\u002f', '\u0030','\u0031','\u0032','\u0033','\u0034','\u0035','\u0036','\u0037', '\u0038','\u0039','\u003a','\u003b','\u003c','\u003d','\u003e','\u003f', '\u0040','\u0041','\u0042','\u0043','\u0044','\u0045','\u0046','\u0047', '\u0048','\u0049','\u004a','\u004b','\u004c','\u004d','\u004e','\u004f', '\u0050','\u0051','\u0052','\u0053','\u0054','\u0055','\u0056','\u0057', '\u0058','\u0059','\u005a','\u005b','\\' ,'\u005d','\u005e','\u005f', '\u0060','\u0061','\u0062','\u0063','\u0064','\u0065','\u0066','\u0067', '\u0068','\u0069','\u006a','\u006b','\u006c','\u006d','\u006e','\u006f', '\u0070','\u0071','\u0072','\u0073','\u0074','\u0075','\u0076','\u0077', '\u0078','\u0079','\u007a','\u007b','\u007c','\u007d','\u007e','\u007f', '\u2022','\u2020','\u2021','\u2026','\u2003','\u2002','\u0192','\u2044', '\u2039','\u203a','\u2212','\u2030','\u201e','\u201c','\u201d','\u2018', '\u2019','\u201a','\u2122','\ufb01','\ufb02','\u0141','\u0152','\u0160', '\u0178','\u017d','\u0131','\u0142','\u0153','\u0161','\u017e','\u009f', '\u20ac','\u00a1','\u00a2','\u00a3','\u00a4','\u00a5','\u00a6','\u00a7', '\u00a8','\u00a9','\u00aa','\u00ab','\u00ac','\u00ad','\u00ae','\u00af', '\u00b0','\u00b1','\u00b2','\u00b3','\u00b4','\u00b5','\u00b6','\u00b7', '\u00b8','\u00b9','\u00ba','\u00bb','\u00bc','\u00bd','\u00be','\u00bf', '\u00c0','\u00c1','\u00c2','\u00c3','\u00c4','\u00c5','\u00c6','\u00c7', '\u00c8','\u00c9','\u00ca','\u00cb','\u00cc','\u00cd','\u00ce','\u00cf', '\u00d0','\u00d1','\u00d2','\u00d3','\u00d4','\u00d5','\u00d6','\u00d7', '\u00d8','\u00d9','\u00da','\u00db','\u00dc','\u00dd','\u00de','\u00df', '\u00e0','\u00e1','\u00e2','\u00e3','\u00e4','\u00e5','\u00e6','\u00e7', '\u00e8','\u00e9','\u00ea','\u00eb','\u00ec','\u00ed','\u00ef','\u00ef', '\u00f0','\u00f1','\u00f2','\u00f3','\u00f4','\u00f5','\u00f6','\u00f7', '\u00f8','\u00f9','\u00fa','\u00fb','\u00fc','\u00fd','\u00fe','\u00ff' }; private static final int CR = 0x0D; private static final int LF = 0x0A; private static final int BS = 0x08; private static final int HT = 0x09; private static final int FORMFEED = 0x0C; private static final int ESC = 0X1B; private static final int POUND_SIGN = 0x23; private static final int PERCENT_SIGN = 0x25; private static final int OPEN_PARENTHESIS = 0x28; private static final int CLOSE_PARENTHESIS = 0x29; private static final int PLUS = 0x2B; private static final int MINUS = 0x2D; private static final int PERIOD = 0x2E; private static final int SLASH = 0x2F; private static final int LESS_THAN = 0x3C; private static final int GREATER_THAN = 0x3E; private static final int OPEN_BRACKET = 0x5B; private static final int BACKSLASH = 0x5C; private static final int CLOSE_BRACKET = 0x5D; private static final int a = 0x61; private static final int d = 0x64; private static final int e = 0x65; private static final int m = 0x6D; private static final int n = 0x6E; private static final int r = 0x72; private static final int s = 0x73; private static final int t = 0x74; //private static final int FE = 0xFE; //private static final int FF = 0xFF; //private static final String CRLF = "" + CR + LF; /** Delimiter character codes. */ private static final int DELIMITER [] = { PERCENT_SIGN, OPEN_PARENTHESIS, CLOSE_PARENTHESIS, SLASH, LESS_THAN, GREATER_THAN, OPEN_BRACKET, CLOSE_BRACKET, 0x7B, /* { */ 0x7D /* } */ }; /** Whitespace character codes. */ private static final int WHITESPACE [] = { 0x00, /* NUL */ 0x09, /* HT */ LF, /* LF */ 0x0C, /* FORMFEED */ CR, /* CR */ 0x20 /* SP */ }; /** Source from which to read bytes. */ protected RandomAccessFile _file; /** Character code of current character. */ protected int _ch; /** If true, use the look-ahead character, rather than reading from the file. */ private boolean _lookAhead; /** Current offset into file for reporting purposes. */ private long _offset; /* Current parse state. */ private State _state; /* White space string. */ private String _wsString; /* PDF/A compliance flag. */ private boolean _pdfACompliant; /* Encryption flag. */ private boolean _encrypted; /* Set of language codes used in UTF strings. */ private Set _languageCodes; /* Level of nesting of parentheses in a literal; zero is the base level. */ private int _parenLevel; /** Scan mode. If true do not attempt to parse non-whitespace delimited * tokens, e.g., literal and hexadecimal strings. */ private boolean _scanMode; /** * Constructor. */ public Tokenizer () { _state = State.WHITESPACE; _wsString = ""; _lookAhead = false; _ch = 0; _offset = 0; _languageCodes = new TreeSet (); _pdfACompliant = true; _scanMode = false; } /** * Parses out and returns a token from the input file. * If it hits the end of the file, returns null. * Other parsing problems cause an exception to be thrown. * When an exception is thrown, the state is changed to * WHITESPACE, so the parser can get back in sync more easily. */ public Token getNext () throws IOException, PdfException { return getNext (0L); } /** * Parses out and returns a token from the input file. * If it hits the end of the file, returns null. * Other parsing problems cause an exception to be thrown. * When an exception is thrown, the state is changed to * WHITESPACE, so the parser can get back in sync more easily. * @param max Maximum allowable size of the token */ public Token getNext (long max) throws IOException, PdfException { String tokErr = "Lexical error"; Token token = null; StringBuffer buffer = null; //StringBuffer bkslBuffer = null; _state = State.WHITESPACE; _wsString = ""; /** Numeric sign. */ boolean negative = false; /** Floating value. */ double realValue = 0.0; /** Integer value. */ long intValue = 0; /** Numeric fractional positional unit. */ double denom = 10.0; /** Stream length. */ long length = 0L; /** Last character seen in stream but one. */ int prelastch = 0; /** Last character seen in stream. */ int lastch = 0; /** First byte of a UTF-16 character. */ //int b1 = 0x00; /** First digit of a hexadecimal string value. */ //int h1 = 0x00; /** Variable for UTF-16 chars. */ //int utfch = 0; /** Line break flag for the beginning of a data stream. */ boolean sawLineBreak = false; /** Carriage return flag for the beginning of a data stream. */ boolean sawCR = false; long startOffset = _offset; try { while (true) { if (max > 0L) { if (_offset - startOffset > max) { /* The token has exceeded the specified maximum size.*/ if (token != null && token instanceof StringValuedToken && buffer != null) { ((StringValuedToken) token).setValue ( buffer.toString ()); } else { token = null; } return token; } } if (!_lookAhead) { _ch = readChar (); if (_ch < 0) { _state = State.WHITESPACE; throw new PdfMalformedException("Unexpected EOF", _offset); } _offset++; } else { _lookAhead = false; } if (_state == (State.WHITESPACE)) { // We are not in the middle of a token. // Anything we read here starts a token // or continues whitespace. if (isWhitespace (_ch)) { _wsString += (char) _ch; } else if (_ch == OPEN_BRACKET) { _state = State.WHITESPACE; _wsString = ""; return new ArrayStart (); } else if (_ch == CLOSE_BRACKET) { _state = State.WHITESPACE; _wsString = ""; return new ArrayEnd (); } else if (_ch == PERCENT_SIGN) { _state = State.COMMENT; buffer = new StringBuffer (); token = new Comment (); } else if (_ch == PLUS || _ch == MINUS) { _state = State.NUMERIC; intValue = 0; negative = ((_ch == MINUS) ? true : false); token = new Numeric (); } else if (_ch == PERIOD) { _state = State.FRACTIONAL; realValue = 0.0; negative = false; denom = 10.0; token = new Numeric (); } else if (isNumeral (_ch)) { _state = State.NUMERIC; intValue = _ch - 48; denom = 10.0; token = new Numeric (); //((Numeric) token).setReal (false); } else if (_ch == SLASH) { _state = State.NAME; buffer = new StringBuffer (); token = new Name (); } else if (_ch == OPEN_PARENTHESIS) { if (!_scanMode) { _state = State.LITERAL; _parenLevel = 0; token = new Literal (); buffer = new StringBuffer (); } } else if (_ch == LESS_THAN) { _state = State.LESS_THAN; } else if (_ch == GREATER_THAN) { _state = State.GREATER_THAN; } else if (!isDelimiter (_ch)) { _state = State.KEYWORD; buffer = new StringBuffer (); buffer.append ((char) _ch); token = new Keyword (); } // end State.WHITESPACE } else if (_state == (State.COMMENT)) { // We are in a comment. Only a line ender can // get us out. if (_ch == CR || _ch == LF) { _state = State.WHITESPACE; _wsString += (char) _ch; ((StringValuedToken)token).setValue(buffer.toString()); if (!token.isPdfACompliant()) { _pdfACompliant = false; } return token; } else { buffer.append ((char) _ch); } } else if (_state == (State.FRACTIONAL)) { // We are reading a number and have encountered // a decimal point. if (isDelimiter (_ch) || isWhitespace (_ch)) { _state = State.WHITESPACE; _wsString = "" + (char) _ch; if (negative) { realValue = - realValue; } ((Numeric) token).setValue (realValue); if (isDelimiter (_ch)) { _lookAhead = true; } if (!token.isPdfACompliant()) { _pdfACompliant = false; } return token; } else if (isNumeral (_ch)) { realValue = realValue + ((_ch - 48)/denom); denom *= 10.0; } else { // invalid character in a number _state = State.WHITESPACE; _wsString = ""; throw new PdfMalformedException (tokErr, _offset); } } else if (_state == (State.GREATER_THAN)) { // ">" must be followed by another > as a dict end if (_ch == GREATER_THAN) { _state = State.WHITESPACE; _wsString = ""; return new DictionaryEnd (); } else { _state = State.WHITESPACE; _wsString = ""; throw new PdfMalformedException (tokErr, _offset); } } else if (_state == (State.HEXADECIMAL)) { // We're in a hexadecimal string. We will // transition from this state to a state which // indicates the encoding used. if (_ch == GREATER_THAN) { // A ">" terminates the string. _state = State.WHITESPACE; _wsString = ""; ((Literal) token).convertHex (); //buffer.append (PDFDOCENCODING[hexToInt (h1, 0x30)]); //((StringValuedToken)token).setValue(buffer.toString()); return token; } else if (!isWhitespace (_ch)) { ((Literal) token).appendHex (_ch); } } else if (_state == (State.KEYWORD)) { if (isDelimiter (_ch) || isWhitespace (_ch)) { if (isDelimiter (_ch)) { _lookAhead = true; } if (buffer.toString ().equals ("stream")) { // Streams can't be nested, so this is (or better be) // a FileTokenizer. _state = State.STREAM; sawLineBreak = (_ch == LF); sawCR = (_ch == CR); token = new Stream (); length = 0L; lastch = 0; prelastch = 0; initStream ((Stream) token); } else { _state = State.WHITESPACE; _wsString = "" + (char) _ch; ((StringValuedToken) token).setValue (buffer.toString ()); if (!token.isPdfACompliant()) { _pdfACompliant = false; } return token; } } else { buffer.append ((char) _ch); } } else if (_state == (State.LESS_THAN)) { // The last character was "<". If followed // by another "<", it's the opening token // for a dictionary. Otherwise it's the // beginning of a hexadecimal character string. if (_ch == LESS_THAN || _scanMode) { _state = State.WHITESPACE; _wsString = ""; return new DictionaryStart (); } else { _state = State.HEXADECIMAL; token = new Literal (); buffer = new StringBuffer (); ((Literal) token).appendHex (_ch); //h1 = _ch; } } else if (_state == (State.LITERAL)) { backupChar (); _offset += ((Literal) token).processLiteral (this) - 1; _state = State.WHITESPACE; _wsString = ""; return token; } else if (_state == (State.NAME)) { if (_ch == POUND_SIGN) { // The pound sign can be used as an escape in // a name; it is followed by two hex characters. int ch1 = readChar (); int ch2 = readChar (); _ch = (hexValue(ch1) << 8) + hexValue (ch2); // Will throw a PDFException if not hex } if (isDelimiter (_ch) || isWhitespace (_ch)) { _state = State.WHITESPACE; ((StringValuedToken)token).setValue(buffer.toString()); if (isDelimiter (_ch)) { _lookAhead = true; _wsString = ""; } else { _wsString = "" + (char) _ch; } if (!token.isPdfACompliant()) { _pdfACompliant = false; } return token; } else { buffer.append ((char) _ch); } } else if (_state == (State.NUMERIC)) { if (_ch == PERIOD) { _state = State.FRACTIONAL; realValue = intValue; //((Numeric) token).setReal (true); denom = 10; } else if (isDelimiter (_ch) || isWhitespace (_ch) || !isNumeral (_ch)) { if (negative) { if (_state == State.FRACTIONAL) { realValue = -realValue; } else { intValue = -intValue; } } if (_state == State.FRACTIONAL) { ((Numeric) token).setValue (realValue); } else { ((Numeric) token).setValue (intValue); } _state = State.WHITESPACE; if (isDelimiter (_ch)) { _lookAhead = true; _wsString = ""; } else { _wsString = "" + (char) _ch; } if (!token.isPdfACompliant()) { _pdfACompliant = false; } return token; } else { if (_state == State.FRACTIONAL) { realValue = realValue * 10 + _ch - 48; } else { intValue = intValue * 10 + _ch - 48; } } } else if (_state == (State.STREAM)) { if (_ch == e) { _state = State.E; } else { prelastch = lastch; lastch = _ch; setStreamOffset ((Stream) token); // Check for a CR/LF or just LF at the start of the stream. // Since we don't know at this point (not having parsed // the dictionary) whether the data is external, and since // the PDF spec says that everything between stream and // endstream is ignored, we don't know if this requirement // is enforceable here. But PDF/A forbids external streams, // so we can at least check compliance there. In any case, // we subtrace the length of the CR/LF from the purported // stream length. if (length == 0 && !sawLineBreak) { if (_ch == LF) { sawLineBreak = true; if (!sawCR) { _pdfACompliant = false; } ((Stream) token).setOffset (((Stream) token).getOffset () + 1); } else if (_ch == CR) { sawCR = true; ((Stream) token).setOffset (((Stream) token).getOffset () + 1); } else { // Coming here indicates an error if the stream // isn't external; but we don't know whether // it is. _pdfACompliant = false; } } else{ length++; } } } else if (_state == (State.E)) { if (_ch == n) { _state = State.EN; } else { _state = State.STREAM; length += 2; } } else if (_state == (State.EN)) { if (_ch == d) { _state = State.END; } else { _state = State.STREAM; length += 3; } } else if (_state == (State.END)) { if (_ch == s) { _state = State.ENDS; } else { _state = State.STREAM; length += 4; } } else if (_state == (State.ENDS)) { if (_ch == t) { _state = State.ENDST; } else { _state = State.STREAM; length += 5; } } else if (_state == (State.ENDST)) { if (_ch == r) { _state = State.ENDSTR; } else { _state = State.STREAM; length += 6; } } else if (_state == (State.ENDSTR)) { if (_ch == e) { _state = State.ENDSTRE; } else { _state = State.STREAM; length += 7; } } else if (_state == (State.ENDSTRE)) { if (_ch == a) { _state = State.ENDSTREA; } else { _state = State.STREAM; length += 8; } } else if (_state == (State.ENDSTREA)) { if (_ch == m) { _state = State.ENDSTREAM; } else { _state = State.STREAM; length += 9; } } else if (_state == (State.ENDSTREAM)) { if (isDelimiter (_ch) || isWhitespace (_ch)) { _state = State.WHITESPACE; /* The line break, if any, before endstream * is not counted in the length. */ if (prelastch == CR && lastch == LF) { length -= 2; } else if (lastch == LF || lastch == CR) { length -= 1; } ((Stream) token).setLength (length); if (isDelimiter (_ch)) { _lookAhead = true; _wsString = ""; } else { _wsString = "" + (char) _ch; } return token; } else { _state = State.STREAM; } } } } catch (EOFException e) { if (token != null && token instanceof StringValuedToken && buffer != null) { ((StringValuedToken) token).setValue (buffer.toString ()); } else { token = null; } } return token; } /** * Return the current offset into the file. */ public long getOffset () { return _offset; } /** * Return the set of language codes. Members of the set are Strings. */ public Set getLanguageCodes () { return _languageCodes; } /** * Tell this object that the file is or isn't encrypted. */ public void setEncrypted (boolean encrypted) { _encrypted = encrypted; } /** * Returns the value of the pdfACompliant flag, which indicates that * the tokenizer hasn't detected non-compliance. A value of true * is no guarantee that the file is compliant. */ public boolean getPDFACompliant () { return _pdfACompliant; } /** * Set the value of the pdfACompliant flag. This may be used to * clear previous detection of noncompliance. */ public void setPDFACompliant (boolean pdfACompliant) { _pdfACompliant = pdfACompliant; } /** * Returns the value of the last white space string read by the * tokenizer. Repositioning clears the white space string. */ public String getWSString () { return _wsString; } /** * Set the Tokenizer to a new position in the file. * * @param offset The offset in bytes from the start of the file. */ public abstract void seek (long offset) throws IOException, PdfException; /** Reset after a seek. */ protected void seekReset (long offset) { _state = State.WHITESPACE; _wsString = ""; _lookAhead = false; _ch = 0; /* Don't panic, _offset is used only for reporting purposes */ _offset = offset - 1; } /** Get a character from the file or stream, using a buffer */ public abstract int readChar () throws IOException; /** Read a character in one-byte or 2-byte format, as requested */ public int readChar1 (boolean utf16) throws IOException { if (utf16) { int ch1 = readChar (); int ch2 = readChar (); return (ch1 << 8) | ch2; } else { return readChar (); } } /** * Back up a byte so it will be read again. */ public abstract void backupChar (); /** * Add a string to the language codes */ public void addLanguageCode (String langCode) { _languageCodes.add (langCode); } /****************************************************************** * PRIVATE CLASS METHODS. ******************************************************************/ /*private static int hexToInt (int h1, int h2) throws PdfException { return 16*hexValue (h1) + hexValue (h2); } */ private static int hexValue (int h) throws PdfException { int d = 0; if (0x30 <= h && h <= 0x39) { d = h - 0x30; } else if (0x41 <= h && h <= 0x46) { d = h - 0x37; } else if (0x61 <= h && h <= 0x66) { d = h - 0x57; } else { throw new PdfMalformedException ("Invalid character in hex string", 0); } return d; } /** Return true if ch is a character which isn't white space but delimits a token. */ private static boolean isDelimiter (int ch) { boolean delimeter = false; for (int i=0; itrue
if the document satisfies the profile. * X-1a compliance is a superset of the requirements of X-1 compliance * (i.e., X-1a compliant documents are a subset of X-1 compliant * documents), so we test for X-1a compliance at the same time. * The result can subsequently be obtained by calling * isX1aCompliant. * */ public boolean satisfiesThisProfile () { _x1aCompliant = false; // guilty till proven innocent try { // First off, there must be an OutputIntents array // in the document catalog dictionary. PdfDictionary catDict = _module.getCatalogDict (); PdfArray intentsArray = (PdfArray) _module.resolveIndirectObject (catDict.get ("OutputIntents")); if (intentsArray == null) { return false; } // Check if PDF-X1/a conformance is asserted PdfDictionary docInfo = _module.getDocInfo(); try { PdfSimpleObject conf = (PdfSimpleObject) docInfo.get ("GTS_PDFXConformance"); String cn = conf.getStringValue (); if (cn.startsWith ("PDF/X-1a:")) { _x1aCompliant = true; } } catch (Exception e) { } // Next check if the OutputIntents are valid. if (!outputIntentsOK (intentsArray)) { return false; } // Do several resource checks. if (!resourcesOK ()) { return false; } // Check the trailer dictionary. if (!trailerDictOK ()) { return false; } // Check specific requirements on the doc info dictionary. if (!infoDictOK ("PDF/X-1")) { return false; } // Check that an acceptable form of encryption (or none) is used. if (!encryptionOK ()) { return false; } // Check that bounding boxes are present as required. // MediaBox is required. if (!bboxOK (true)) { return false; } // If the document contains Actions, it's non-conformant if (_module.getActionsExist ()) { return false; } // Now for specific X1-a tests // Encryption dictionary is not allowed. if (_module.getEncryptionDict () != null) { _x1aCompliant = false; } // Check that ViewerPreferences meet certain restrictions // if any BleedBoxes are present. if (!checkPrefsAgainstBleedBox ()) { _x1aCompliant = false; } } catch (Exception e) { // Any otherwise uncaught exception means nonconformance return false; } return true; } /** * Returns the result of X-1a compliance testing which was performed in * the course of satisfiesThisProfile. If * satisfiesThisProfile hasn't been called, returns * false. */ public boolean isX1aCompliant () { return _x1aCompliant; } /* Walk through the page tree and check all Resources dictionaries that we find. Along the way, we check several things: Color spaces. Any Separation and DeviceN resources we find must have an AlternateSpace of DeviceGray or DeviceCMYK. Extended graphic states. XObjects. */ private boolean resourcesOK () { PageTreeNode docTreeRoot = _module.getDocumentTree (); try { docTreeRoot.startWalk (); DocNode docNode; for (;;) { docNode = docTreeRoot.nextDocNode (); if (docNode == null) { break; } // Check for node-level resources PdfDictionary rsrc = docNode.getResources (); if (rsrc != null) { // Check color spaces. PdfDictionary cs = (PdfDictionary) _module.resolveIndirectObject (rsrc.get ("ColorSpace")); if (!colorSpaceOK (cs)) { return false; } // Check extended graphics state. PdfDictionary gs = (PdfDictionary) _module.resolveIndirectObject (rsrc.get ("ExtGState")); if (!extGStateOK (gs)) { return false; } // Check XObjects. PdfDictionary xo = (PdfDictionary) _module.resolveIndirectObject (rsrc.get ("XObject")); if (!xObjectsOK (xo)) { return false; } } // Check content streams for resources if (docNode instanceof PageObject) { List streams = ((PageObject) docNode).getContentStreams (); if (streams != null) { Iterator iter = streams.listIterator (); while (iter.hasNext ()) { PdfStream stream = (PdfStream) iter.next (); PdfDictionary dict = stream.getDict (); PdfDictionary rs = (PdfDictionary) dict.get ("Resources"); if (rs != null) { PdfDictionary cs = (PdfDictionary) _module.resolveIndirectObject (rs.get ("ColorSpace")); if (!colorSpaceOK (cs)) { return false; } PdfDictionary gs = (PdfDictionary) _module.resolveIndirectObject (rs.get ("ExtGState")); if (!extGStateOK (gs)) { return false; } PdfDictionary xo = (PdfDictionary) _module.resolveIndirectObject (rs.get ("XObject")); if (!xObjectsOK (xo)) { return false; } } // Also check for filters, for X1-a restrictions. PdfObject filters = dict.get ("Filter"); if (!filter1AOK (filters)) { _x1aCompliant = false; } } } // Also check page objects for annotations -- // in particular, TrapNet annotations. PdfArray annots = ((PageObject) docNode).getAnnotations (); if (annots != null) { Vector annVec = annots.getContent (); for (int i = 0; i < annVec.size (); i++) { PdfDictionary annDict = (PdfDictionary) annVec.elementAt (i); PdfSimpleObject subtypeObj = (PdfSimpleObject) annDict.get ("Subtype"); if ("TrapNet".equals (subtypeObj.getStringValue ())) { // FontFauxing must be absent or 0-length PdfArray ff = (PdfArray) annDict.get ("FontFauxing"); if (ff != null) { Vector ffVec = ff.getContent (); if (ffVec.size() > 0) { return false; // a faux pas } } // Check Appearance dict for TrapNet annotation PdfDictionary appDict = (PdfDictionary) annDict.get ("AP"); if (appDict != null) { PdfDictionary normalDict = (PdfDictionary) appDict.get ("N"); if (normalDict != null) { PdfSimpleObject pcm = (PdfSimpleObject) normalDict.get ("PCM"); if (!"DeviceCMYK".equals (pcm.getStringValue ())) { return false; } } } } } } } } } catch (Exception e) { return false; } return true; // passed all tests } /* Check if a color space dictionary is conformant */ private boolean colorSpaceOK (PdfDictionary cs) { // If it's null, that's fine. if (cs == null) { return true; } // Walk through the color space dictionary, // checking Separation and DeviceN resources Iterator iter = cs.iterator (); while (iter.hasNext ()) { PdfObject res = (PdfObject) iter.next (); if (res instanceof PdfArray) { Vector resv = ((PdfArray) res).getContent (); PdfSimpleObject snameobj = (PdfSimpleObject) resv.elementAt (0); String sname = snameobj.getStringValue (); if ("Separation".equals (sname) || "DeviceN".equals (sname)) { PdfSimpleObject altSpaceObj = (PdfSimpleObject) resv.elementAt (2); String altSpace = altSpaceObj.getStringValue (); if (! ("DeviceGray".equals (altSpace) || "DeviceCMYK".equals (altSpace))) { return false; } } if ("Indexed".equals (sname) || "Pattern".equals (sname)) { // Indexed and pattern color spaces must have a // base colorspace of DeviceCMYK, DeviceGray, // DeviceN, or Separation. PdfSimpleObject baseObj = (PdfSimpleObject) resv.elementAt (1); String base = baseObj.getStringValue (); if (! ("DeviceCMYK".equals (base) || "DeviceGray".equals (base) || "DeviceN".equals (base) || "Separation".equals (base))) { return false; } } } } return true; // passed all tests } /* Checks a single XObject. */ protected boolean xObjectOK (PdfDictionary xo) { if (xo == null) { // no XObject means no problem return true; } // Do common tests if (!super.xObjectOK (xo)) { return false; } // Tests specific to X/1 try { PdfDictionary opi = (PdfDictionary) xo.get ("OPI"); if (opi == null) { // If it isn't an OPI object, we don't care return true; } _x1aCompliant = false; // OPI objects aren't allowed in X-1a // get the version 2.0 dictionary. If it has only // a 1.3 dictionary, X1 apparently is indifferent. PdfDictionary opi20 = (PdfDictionary) _module.resolveIndirectObject (opi.get ("2.0")); if (opi20 == null) { return true; } // Now what we came for. The Inks entry is optional, // but if present, must be full_color, registration, // or an array containing monochrome as its first value. // If monochrome, all ink names must be CMYK colorants. // (Unfortunately, the spec doesn't tell us exactly // what these names should be: C? Cyan? cyan?) PdfObject inks = _module.resolveIndirectObject (opi20.get ("Inks")); if (inks == null) { return true; } if (inks instanceof PdfSimpleObject) { String inkname = ((PdfSimpleObject) inks).getStringValue (); if (!("full_color".equals (inkname) || "registration".equals (inkname))) { return false; } } else if (inks instanceof PdfArray) { Vector inkvec = ((PdfArray) inks).getContent (); PdfSimpleObject inkobj = (PdfSimpleObject) inkvec.elementAt (0); if (!("monochrome".equals (inkobj.getStringValue ()))) { return false; } } // Next, the referenced file must be included as // an EmbeddedFile. A file specification can be either // a dictionary or a string. I don't understand what's // being said on page 124. EmbeddedFiles maps name strings // to embedded file streams; but exactly what are the name // strings it uses? PdfObject fileObj = _module.resolveIndirectObject (opi20.get ("F")); NameTreeNode embFiles = _module.getEmbeddedFiles (); // Leave this for now, till I can make some sense of it. } catch (Exception e) { return false; } return true; // passed all tests } private boolean encryptionOK () { PdfDictionary encryptDict = _module.getEncryptionDict (); if (encryptDict == null) { return true; //no encryption is good encryption } try { PdfSimpleObject filter = (PdfSimpleObject) encryptDict.get ("Filter"); if (!"Standard".equals (filter.getStringValue ())) { return false; } // the permissions must include bit 3 (printing). In PDF's // notation, bit 1 is the low-order bit. PdfSimpleObject perm = (PdfSimpleObject) encryptDict.get ("P"); if (perm == null) { // P is required with standard encryption return false; } if ((perm.getIntValue () & 4) == 0) { return false; } } catch (Exception e) { return false; } return true; } /* Check for LZW and JBIG2 filters, which are forbidden in X/1a. This does not affect X/1 compliance. */ private boolean filter1AOK (PdfObject filters) { return !hasFilters (filters, new String [] { "LZWDecode", "JBIG2Decode" } ); } /** Checks if a Form xobject is valid. This overrides the method in XProfileBase. */ protected boolean formObjectOK (PdfDictionary xo) { // PDF-X/1-a elements can't have a Ref key in the // Form dictionary. if (xo.get ("Ref") != null) { // This is an external reference XObject. _x1aCompliant = false; } // Form objects aren't restricted in X/1 return true; } } jhove/classes/edu/harvard/hul/ois/jhove/module/pdf/X1aProfile.java0000644000707400001440000000411410771562746024307 0ustar garyusers package edu.harvard.hul.ois.jhove.module.pdf; import edu.harvard.hul.ois.jhove.module.*; /** * PDF profile checker for PDF/X-1a documents. * See ISO Standard 15930-1, "Complete exchange using * CMYK data (PDF/X-1 and PDF/X-1a)" * * This module depends on the PDF/X-1 profiler, since the PDF/X-1 specification * is PDF/X-1 plus a few additional restrictions. */ public final class X1aProfile extends XProfileBase { /****************************************************************** * PRIVATE CLASS FIELDS. ******************************************************************/ private X1Profile _x1Profile; /** * Constructor. * Creates an X1aProfile object for subsequent testing. * * @param module The module under which we are checking the profile. * */ public X1aProfile (PdfModule module) { super (module, XProfileBase.PDFX1A); _profileText = "ISO PDF/X-1a"; } /** * Calling setX1Profile links this X1aProfiler to an X1Profiler. * */ public void setX1Profile (X1Profile x1) { _x1Profile = x1; } /** * Returns true if the document satisfies the profile. * If setX1Profile hasn't been called, * creates a temporary X1Profile and tests against that profile first. * Either way, X1Profile.isX1aCompliant is then called * to determine the X-1/a compliance status. * */ public boolean satisfiesThisProfile () { if (_x1Profile != null) { // If there is a linked X1Profile, we save time by checking if // it passed or not. if (!_x1Profile.isAlreadyOK ()) { return false; } } else { // If there isn't a linked X1Profile, create one // and check it. _x1Profile = new X1Profile (_module); if (!_x1Profile.satisfiesProfile (_raf, _parser)) { return false; } } return _x1Profile.isX1aCompliant (); } } jhove/classes/edu/harvard/hul/ois/jhove/module/pdf/X2Profile.java0000644000707400001440000002000310771562740024134 0ustar garyusers package edu.harvard.hul.ois.jhove.module.pdf; import edu.harvard.hul.ois.jhove.module.*; import java.util.*; /** * PDF profile checker for PDF/X-2 documents. * See ISO Standard ISO 15930-2:2003(E), "Graphic technology - * Prepress digital data exchange Use of PDF - Part 2: * Partial exchange of printing data (PDF/X-2)" */ public final class X2Profile extends XProfileBase { /****************************************************************** * PRIVATE CLASS FIELDS. ******************************************************************/ /** * Constructor. * Creates an X2Profile object for subsequent testing. * * @param module The module under which we are checking the profile. * */ public X2Profile (PdfModule module) { super (module, XProfileBase.PDFX2); _profileText = "ISO PDF/X-2"; } /** * Returns true if the document satisfies the profile. * */ public boolean satisfiesThisProfile () { try { // First off, there must be an OutputIntents array // in the document catalog dictionary. PdfDictionary catDict = _module.getCatalogDict (); PdfArray intentsArray = (PdfArray) _module.resolveIndirectObject (catDict.get ("OutputIntents")); if (intentsArray == null) { return false; } // Next check if the OutputIntents are valid. if (!outputIntentsOK (intentsArray)) { return false; } // Check that bounding boxes are present as required. // MediaBox is required. if (!bboxOK (true)) { return false; } // Check that ViewerPreferences meet certain restrictions // if any BleedBoxes are present. if (!checkPrefsAgainstBleedBox ()) { return false; } // Check resources and other stuff. if (!resourcesOK ()) { return false; } // Check the trailer dictionary. if (!trailerDictOK ()) { return false; } // Check specific requirements on the doc info dictionary. if (!infoDictOK ("PDF/X-2:")) { return false; } } catch (Exception e) { // Any otherwise uncaught exception means nonconformance return false; } return true; // Placeholder } /* Walk through the page tree and check all Resources dictionaries that we find. Along the way, we check several things: Color spaces. Any Separation and DeviceN resources we find must have an AlternateSpace of DeviceGray or DeviceCMYK. Extended graphic states. XObjects. */ private boolean resourcesOK () { PageTreeNode docTreeRoot = _module.getDocumentTree (); try { docTreeRoot.startWalk (); DocNode docNode; for (;;) { docNode = docTreeRoot.nextDocNode (); if (docNode == null) { break; } // Check for node-level resources PdfDictionary rsrc = docNode.getResources (); if (rsrc != null) { // Check extended graphics state. PdfDictionary gs = (PdfDictionary) _module.resolveIndirectObject (rsrc.get ("ExtGState")); if (!extGStateOK (gs)) { return false; } // Check XObjects. PdfDictionary xo = (PdfDictionary) _module.resolveIndirectObject (rsrc.get ("XObject")); if (!xObjectsOK (xo)) { return false; } } // Check content streams for resources if (docNode instanceof PageObject) { List streams = ((PageObject) docNode).getContentStreams (); if (streams != null) { Iterator iter = streams.listIterator (); while (iter.hasNext ()) { PdfStream stream = (PdfStream) iter.next (); PdfDictionary dict = stream.getDict (); PdfDictionary rs = (PdfDictionary) dict.get ("Resources"); if (rs != null) { PdfDictionary gs = (PdfDictionary) _module.resolveIndirectObject (rs.get ("ExtGState")); if (!extGStateOK (gs)) { return false; } PdfDictionary xo = (PdfDictionary) _module.resolveIndirectObject (rs.get ("XObject")); if (!xObjectsOK (xo)) { return false; } } // Also check for filters, to make sure // there aren't any forbidden LZW filters. PdfObject filters = dict.get ("Filter"); if (!filterOK (filters, true, true)) { return false; } } } // Also check page objects for annotations -- // in particular, TrapNet annotations. PdfArray annots = ((PageObject) docNode).getAnnotations (); if (annots != null) { Vector annVec = annots.getContent (); for (int i = 0; i < annVec.size (); i++) { PdfDictionary annDict = (PdfDictionary) _module.resolveIndirectObject ((PdfObject) annVec.elementAt (i)); PdfSimpleObject subtypeObj = (PdfSimpleObject) annDict.get ("Subtype"); if ("TrapNet".equals (subtypeObj.getStringValue ())) { // FontFauxing must be absent or 0-length PdfArray ff = (PdfArray) annDict.get ("FontFauxing"); if (ff != null) { Vector ffVec = ff.getContent (); if (ffVec.size() > 0) { return false; // a faux pas } } } } } } } } catch (Exception e) { return false; } return true; // passed all tests } /** Checks if a Form xobject is valid. This overrides the method in XProfileBase. */ protected boolean formObjectOK (PdfDictionary xo) { // PDF-X/2 elements can't have an OPI key in Form // or Image xobjects. if (xo.get ("OPI") != null) { return false; } if (xo.get ("Ref") != null) { // This is an external reference XObject. // All PDF reference XOjbects must have a Page entry. if (xo.get ("Page") == null) { return false; } // An X/2 external reference XObject must also have a // Metadata entry. if (xo.get ("Metadata") == null) { return false; } } return true; } } jhove/classes/edu/harvard/hul/ois/jhove/module/pdf/X3Profile.java0000644000707400001440000001753110771562743024154 0ustar garyusers package edu.harvard.hul.ois.jhove.module.pdf; import edu.harvard.hul.ois.jhove.module.*; import java.util.*; /** * PDF profile checker for PDF/X-3 documents. * See ISO Standard 15930-3, "Complete exchange suitable * for colour-managed workflows (PDF/X-3)" */ public final class X3Profile extends XProfileBase { /****************************************************************** * PRIVATE CLASS FIELDS. ******************************************************************/ //private int _opiObjectCount; /** * Constructor. * Creates an X3Profile object for subsequent testing. * * @param module The module under which we are checking the profile. * */ public X3Profile (PdfModule module) { super (module, XProfileBase.PDFX3); _profileText = "ISO PDF/X-3"; } /** * Returns true if the document satisfies the profile. * */ public boolean satisfiesThisProfile () { try { // First off, there must be an OutputIntents array // in the document catalog dictionary. PdfDictionary catDict = _module.getCatalogDict (); PdfArray intentsArray = (PdfArray) _module.resolveIndirectObject (catDict.get ("OutputIntents")); if (intentsArray == null) { return false; } // Check specific requirements on the doc info dictionary. if (!infoDictOK ("PDF/X-3")) { return false; } // Next check if the OutputIntents are valid. if (!outputIntentsOK (intentsArray)) { return false; } // Check resources and other stuff. if (!resourcesOK ()) { return false; } // Check the trailer dictionary. if (!trailerDictOK ()) { return false; } // Encryption dictionary is not allowed. if (_module.getEncryptionDict () != null) { return false; } // Check that bounding boxes are present as required. // MediaBox is not required. if (!bboxOK (false)) { return false; } // If the document contains Actions, it's non-conformant if (_module.getActionsExist ()) { return false; } } catch (Exception e) { // Any otherwise uncaught exception means nonconformance return false; } return true; } /* Walk through the page tree and check all Resources dictionaries that we find. Along the way, we check several things: Color spaces. Any Separation and DeviceN resources we find must have an AlternateSpace of DeviceGray or DeviceCMYK. Extended graphic states. XObjects. */ private boolean resourcesOK () { PageTreeNode docTreeRoot = _module.getDocumentTree (); try { docTreeRoot.startWalk (); DocNode docNode; for (;;) { docNode = docTreeRoot.nextDocNode (); if (docNode == null) { break; } // Check for node-level resources PdfDictionary rsrc = docNode.getResources (); if (rsrc != null) { // Check extended graphics state. PdfDictionary gs = (PdfDictionary) _module.resolveIndirectObject (rsrc.get ("ExtGState")); if (!extGStateOK (gs)) { return false; } // Check XObjects. PdfDictionary xo = (PdfDictionary) _module.resolveIndirectObject (rsrc.get ("XObject")); if (!xObjectsOK (xo)) { return false; } } // Check content streams for resources if (docNode instanceof PageObject) { List streams = ((PageObject) docNode).getContentStreams (); if (streams != null) { Iterator iter = streams.listIterator (); while (iter.hasNext ()) { PdfStream stream = (PdfStream) iter.next (); PdfDictionary dict = stream.getDict (); PdfDictionary rs = (PdfDictionary) dict.get ("Resources"); if (rs != null) { PdfDictionary gs = (PdfDictionary) _module.resolveIndirectObject (rs.get ("ExtGState")); if (!extGStateOK (gs)) { return false; } PdfDictionary xo = (PdfDictionary) _module.resolveIndirectObject (rs.get ("XObject")); if (!xObjectsOK (xo)) { return false; } } // Also check for filters, to make sure // there aren't any forbidden LZW filters. PdfObject filters = dict.get ("Filter"); if (!filterOK (filters, true, true)) { return false; } // External streams are also forbidden. if (dict.get ("F") != null) { return false; } } } // Also check page objects for annotations -- // in particular, TrapNet annotations. PdfArray annots = ((PageObject) docNode).getAnnotations (); if (annots != null) { Vector annVec = annots.getContent (); for (int i = 0; i < annVec.size (); i++) { PdfDictionary annDict = (PdfDictionary) _module.resolveIndirectObject ((PdfObject) annVec.elementAt (i)); PdfSimpleObject subtypeObj = (PdfSimpleObject) annDict.get ("Subtype"); if ("TrapNet".equals (subtypeObj.getStringValue ())) { // FontFauxing must be absent or 0-length PdfArray ff = (PdfArray) annDict.get ("FontFauxing"); if (ff != null) { Vector ffVec = ff.getContent (); if (ffVec.size() > 0) { return false; // a faux pas } } } } } } } } catch (Exception e) { return false; } return true; // passed all tests } protected boolean xObjectOK (PdfDictionary xo) { if (xo == null) { // no XObject means no problem return true; } // Do common tests if (!super.xObjectOK (xo)) { return false; } // OPI objects aren't permitted if (xo.get ("OPI") != null) { return false; } return true; } } jhove/classes/edu/harvard/hul/ois/jhove/module/pdf/XProfileBase.java0000644000707400001440000003677610771562742024677 0ustar garyusers package edu.harvard.hul.ois.jhove.module.pdf; import edu.harvard.hul.ois.jhove.module.*; import java.util.*; /** * Abstract base class for PDF profilers of the PDF/X family. * See ISO Standard 15930-1, "Complete exchange using * CMYK data (PDF/X-1 and PDF/X-1a)" */ public abstract class XProfileBase extends PdfProfile { /****************************************************************** * PRIVATE CLASS FIELDS. ******************************************************************/ /** Enumerated values for PDF-X type */ public static int PDFX1 = 1, PDFX1A = 2, PDFX2 = 3, PDFX3 = 4; /** PDF-X type used by the subclass. */ protected int _xType; /** Set to true if a BleedBox is found. */ protected boolean _bleedBoxPresent; /** * Constructor. * Creates an X1Profile object for subsequent testing. * * @param module The module under which we are checking the profile. * @param xType The type of PDF/X profile being checked * */ public XProfileBase (PdfModule module, int xType) { super (module); _bleedBoxPresent = false; _xType = xType; } /** Checks if the entries which are required in the document information * dictionary by PDF-X/1 and X/3 are there. * These entries are optional under the PDF specification, * so they must be checked here. */ protected boolean infoDictOK (String xVersion) { PdfDictionary docInfo = _module.getDocInfo(); try { PdfSimpleObject trapped = (PdfSimpleObject) docInfo.get ("Trapped"); PdfSimpleObject xvers = (PdfSimpleObject) docInfo.get ("GTS_PDFXVersion"); if (docInfo.get ("CreationDate") == null || xvers == null || docInfo.get ("ModDate") == null || docInfo.get ("Title") == null || trapped == null) { return false; } // The value of Trapped must be True or False. // Unknown (and other random values) is prohibited. String trappedVal = trapped.getStringValue (); if (!("True".equals (trappedVal) || "False".equals (trappedVal))) { return false; } // The value of GTS_PDFXVersion must begin with the value of xVersion. String vers = xvers.getStringValue (); if (!vers.startsWith (xVersion)) { return false; } } catch (Exception e) { return false; } return true; } /** Returns true if a BleedBox has been detected. */ protected boolean isBleedBoxPresent () { return _bleedBoxPresent; } /** Checks if the OutputIntents of this document conform * to profile requirements. * There must be exactly one entry in the dictionary * which has a subtype of GTS_PDFX. */ protected boolean outputIntentsOK (PdfArray intents) { Vector intVec = intents.getContent (); int matchCount = 0; try { for (int i = 0; i < intVec.size (); i++) { PdfDictionary intent = (PdfDictionary) _module.resolveIndirectObject ((PdfObject)intVec.elementAt (i)); PdfSimpleObject sval = (PdfSimpleObject) _module.resolveIndirectObject (intent.get ("S")); if (sval != null) { String subtype = sval.getStringValue (); if ("GTS_PDFX".equals (subtype)) { ++matchCount; // there can be only one // It must have an OutputConditionIdentifier PdfSimpleObject outcond = (PdfSimpleObject) _module.resolveIndirectObject (intent.get("OutputConditionIdentifier")); if (outcond == null) return false; // X1 and 1a only: There must be either a RegistryName entry // or a DestOutputProfile // entry. Having them both is OK. if (_xType == PDFX1) { PdfSimpleObject regName = (PdfSimpleObject) _module.resolveIndirectObject (intent.get ("RegistryName")); PdfStream dop = (PdfStream) _module.resolveIndirectObject (intent.get ("DestOutputProfile")); if (regName == null && dop == null) { return false; } /* This is WRONG for X-1 and X-1a. Was it * supposed to go somewhere else?? */ // if (dop != null) { // // If present, the DestOutputProfile // // must have an AtoB1Tag entry. // PdfObject ab1 = dop.getDict().get ("AtoB1Tag"); // if (ab1 == null) { // return false; // } // } } } } } return (matchCount == 1); } catch (Exception e) { return false; } } /** Checks profile requirements on the trailer dictionary. */ protected boolean trailerDictOK () { PdfDictionary trailerDict = _module.getTrailerDict (); if (trailerDict == null) { return false; // Something is SERIOUSLY wrong if this happens } // ID entry is required if (trailerDict.get ("ID") == null) { return false; } return true; } /** Checks if the ExtGState resource meets profile requirements. * It may not have TR, TR2, or HTP entries. */ protected boolean extGStateOK (PdfDictionary gs) { if (gs == null) { // no object means no problem return true; } try { PdfObject tr = gs.get ("TR"); PdfObject tr2 = gs.get ("TR2"); PdfObject htp = gs.get ("HTP"); if (tr != null || tr2 != null || htp != null) { return false; } // If there is a halftone dictionary, it must meet // certain requirements PdfObject ht = gs.get ("HT"); if (ht instanceof PdfDictionary) { // HalftoneType must be 1 or 5 PdfDictionary htd = (PdfDictionary) ht; PdfSimpleObject htType = (PdfSimpleObject) htd.get ("HalftoneType"); int htTypeVal = htType.getIntValue (); if (htTypeVal != 1 && htTypeVal != 5) { return false; } } // The HalftoneName entry ist verboten if (gs.get ("HalftoneName") != null) { return false; } // The SMask entry is forbidden in X-1a and X-2 // unless its value is "None" if (_xType == PDFX1A || _xType == PDFX2) { PdfSimpleObject smask = (PdfSimpleObject) gs.get ("SMask"); if (smask != null) { if (!"None".equals (smask.getStringValue ())) { return false; } } // The values of BM, CA, and ca are restricted if // these keys are present PdfSimpleObject blendMode = (PdfSimpleObject) gs.get ("BM"); if (blendMode != null) { String bmVal = blendMode.getStringValue (); if (!"Normal".equals (bmVal) && !"Compatible".equals (bmVal)) { return false; } } PdfSimpleObject ca = (PdfSimpleObject) gs.get ("CA"); double caVal; if (ca != null) { caVal = ca.getDoubleValue (); if (caVal != 1.0) { return false; } } ca = (PdfSimpleObject) gs.get ("ca"); if (ca != null) { caVal = ca.getDoubleValue (); if (caVal != 1.0) { return false; } } } } catch (Exception e) { return false; } return true; // passed all tests } /** * Checks a single XObject for xObjectsOK. Calls imageObjectOK * and formObjectOK for profile-specific functionality. */ protected boolean xObjectOK (PdfDictionary xo) { if (xo == null) { // no XObject means no problem return true; } try { // PostScript XObjects aren't allowed. // Image XObjects must meet certain tests. PdfSimpleObject subtype = (PdfSimpleObject) xo.get ("Subtype"); if (subtype != null) { String subtypeVal = subtype.getStringValue (); if ("PS".equals (subtypeVal)) { // PS XObjects aren't allowed in any X format. return false; } if ("Image".equals (subtypeVal)) { if (!imageObjectOK (xo)) { return false; } } if ("Form".equals (subtypeVal)) { if (!formObjectOK (xo)) { return false; } } } } catch (Exception e) { return false; } return true; } /** Checks if a single image XObject fits the profile */ protected boolean imageObjectOK (PdfDictionary xo) { try { PdfArray alternates = (PdfArray) xo.get ("Alternates"); if (alternates == null) { // No alternates means we're fine return true; } Vector altVec = alternates.getContent (); for (int i = 0; i < altVec.size (); i++) { PdfDictionary alt = (PdfDictionary) altVec.elementAt (i); // No alternate may have DefaultForPrinting = true PdfSimpleObject dfp = (PdfSimpleObject) alt.get ("DefaultForPrinting"); if (dfp.isTrue ()) { return false; } } if (_xType == PDFX2) { // PDF-X/2 elements can't have an OPI key in Form // or Image xobjects. if (xo.get ("OPI") != null) { return false; } } if (_xType == PDFX1A || _xType == PDFX2) { // SMask is restricted in PDFX-1/a and X-2 PdfSimpleObject smask = (PdfSimpleObject) xo.get ("SMask"); if (smask != null) { if (!"None".equals (smask.getStringValue ())) { return false; } } } } catch (Exception e) { return false; } return true; // passed all tests } /** Checks the conformance of a form XObject. * Does nothing; must be overridden if there are * conditions on such forms. */ protected boolean formObjectOK (PdfDictionary fo) { return true; } /** Checks all the page objects for bounding boxes. If requireMediaBox * is true, each page has to include * or inherit a MediaBox. * Each page must include one but not both of a TrimBox and * an ArtBox. */ protected boolean bboxOK (boolean requireMediaBox) { PageTreeNode pgtree = _module.getDocumentTree (); try { pgtree.startWalk (); PageObject pageObject; for (;;) { pageObject = pgtree.nextPageObject (); if (pageObject == null) { break; } if (requireMediaBox) { // Check for a MediaBox. If there isn't one here, one // of its ancestors must have one. PdfArray mbox = pageObject.getMediaBox (); if (mbox == null) { return false; } } // Check for TrimBox or ArtBox. Apply the Highlander rule. PdfArray tbox = pageObject.getTrimBox (); PdfArray abox = pageObject.getArtBox (); if (tbox == null && abox == null) { return false; } if (tbox != null && abox != null) { return false; } // BleedBox may be in conflict with other // features. Record here whether any // BleedBox is found. if (pageObject.getBleedBox () != null) { _bleedBoxPresent = true; } } } catch (Exception e) { return false; } return true; // passed all tests } /** * Checks ViewerPreferences dictionary against MediaBox * and BleedBox. * In PDF-X1/a and X2, if a BleedBox is present and * if the ViewerPreferences dictionary contains the * ViewClip, PrintArea or PrintClip keys, each of those * keys present shall have the value MediaBox or BleedBox. * This must be called after bboxOK has checked if any * BleedBoxes are found. */ protected boolean checkPrefsAgainstBleedBox () { if (!_bleedBoxPresent) { // No bleed box, the test isn't necessary. return true; } PdfDictionary viewPrefDict = _module.getViewPrefDict (); if (viewPrefDict == null) { // No viewer prefs, passes the test trivially. return true; } try { PdfSimpleObject[] areas = new PdfSimpleObject[3]; areas[0] = (PdfSimpleObject) viewPrefDict.get ("ViewArea"); areas[1] = (PdfSimpleObject) viewPrefDict.get ("ViewClip"); areas[2] = (PdfSimpleObject) viewPrefDict.get ("PrintArea"); for (int i = 0; i < 3; i++) { if (areas[i] != null) { String s = areas[i].getStringValue (); if (!"MediaBox".equals (s) && !"BleedBox".equals (s)) { return false; } } } } catch (Exception e) { return false; } return true; } /** * Checks for forbidden filters in a Filters dictionary. */ protected boolean filterOK (PdfObject filters, boolean forbidLZW, boolean forbidJBIG2) { String filterName; try { if (filters == null) { return true; } if (filters instanceof PdfSimpleObject) { // Name of just one filter filterName = ((PdfSimpleObject) filters).getStringValue (); if ("LZWDecode".equals (filterName)) { return false; } } else { // If it's not a name, it must be an array Vector filterVec = ((PdfArray) filters).getContent (); for (int i = 0; i < filterVec.size (); i++) { PdfSimpleObject filter = (PdfSimpleObject) filterVec.elementAt (i); filterName = filter.getStringValue (); if (forbidLZW && "LZWDecode".equals (filterName)) { return false; } if (forbidJBIG2 && "JBIG2Decode".equals (filterName)) { return false; } } } } catch (Exception e) { return false; } return true; // passed all tests } } jhove/classes/edu/harvard/hul/ois/jhove/module/pdf/build.xml0000644000707400001440000000205611204567556023312 0ustar garyusers PDF module build file Jhove - JSTOR/Harvard Object Validation Environment Version 1.0 2004-02-03 Copyright 2004 by JSTOR and the President and Fellows of Harvard College jhove/classes/edu/harvard/hul/ois/jhove/module/pdf/package.html0000644000707400001440000000060710771562741023751 0ustar garyusers Contains supporting classes for the PDF-HUL module.

jhove/classes/edu/harvard/hul/ois/jhove/module/pdf/Parser.class0000644000707400001440000001426011510702104023730 0ustar garyusers2$ a ` ` ` ` ` `B@ `   `   `  ` ` " ` , ,  S S ` `  5 `  : : = : ` : ( C 5 C C J J J J C R ( (  Z C C  _tokenizer0Ledu/harvard/hul/ois/jhove/module/pdf/Tokenizer; _dictDepthI _arrayDepth _objectMapLjava/util/Map; _encryptedZ_pdfACompliant3(Ledu/harvard/hul/ois/jhove/module/pdf/Tokenizer;)VCode setObjectMap(Ljava/util/Map;)Vreset()V resetLoosegetNext.()Ledu/harvard/hul/ois/jhove/module/pdf/Token; Exceptions/(J)Ledu/harvard/hul/ois/jhove/module/pdf/Token; StackMapTableQ(Ljava/lang/Class;Ljava/lang/String;)Ledu/harvard/hul/ois/jhove/module/pdf/Token; getDictDepth()I setEncrypted(Z)V getArrayDepth getWSString()Ljava/lang/String;getLanguageCodes()Ljava/util/Set;getPDFACompliant()ZsetPDFACompliant readObjectDef2()Ledu/harvard/hul/ois/jhove/module/pdf/PdfObject;`(Ledu/harvard/hul/ois/jhove/module/pdf/Numeric;)Ledu/harvard/hul/ois/jhove/module/pdf/PdfObject; readObject readArray1()Ledu/harvard/hul/ois/jhove/module/pdf/PdfArray;readDictionary6()Ledu/harvard/hul/ois/jhove/module/pdf/PdfDictionary; getOffset()Jseek(J)VcollapseObjectVector(Ljava/util/Vector;)VscanMode lr bc kj qr gh de fe tx4edu/harvard/hul/ois/jhove/module/pdf/DictionaryStart2edu/harvard/hul/ois/jhove/module/pdf/DictionaryEnd:edu/harvard/hul/ois/jhove/module/pdf/PdfMalformedException'Improperly nested dictionary delimiters l/edu/harvard/hul/ois/jhove/module/pdf/ArrayStart-edu/harvard/hul/ois/jhove/module/pdf/ArrayEnd"Improperly nested array delimiters tu 8edu/harvard/hul/ois/jhove/module/pdf/PdfInvalidException  ij ~ ,edu/harvard/hul/ois/jhove/module/pdf/NumericInvalid object definition t{ ,edu/harvard/hul/ois/jhove/module/pdf/Keywordobj   } 2edu/harvard/hul/ois/jhove/module/pdf/PdfDictionary+edu/harvard/hul/ois/jhove/module/pdf/Streamjava/lang/Exception.edu/harvard/hul/ois/jhove/module/pdf/PdfStream l   }    4edu/harvard/hul/ois/jhove/module/pdf/PdfSimpleObject lCannot parse object l-edu/harvard/hul/ois/jhove/module/pdf/PdfArray 1edu/harvard/hul/ois/jhove/module/pdf/PdfException u  java/util/Vector,edu/harvard/hul/ois/jhove/module/pdf/Comment Malformed dictionary }java/lang/StringBuilder 9: Vector must contain an even number of objects, but has   l )edu/harvard/hul/ois/jhove/module/pdf/Name.edu/harvard/hul/ois/jhove/module/pdf/PdfObject  R3edu/harvard/hul/ois/jhove/module/pdf/PdfIndirectObj l !" # #Malformed indirect object reference +edu/harvard/hul/ois/jhove/module/pdf/Parserjava/lang/Objectjava/io/IOException*edu/harvard/hul/ois/jhove/module/pdf/Tokenjava/lang/String.edu/harvard/hul/ois/jhove/module/pdf/Tokenizer(Ljava/lang/String;)Vjava/lang/Class isInstance(Ljava/lang/Object;)ZisPdfACompliantgetValueequalslengthd(Ledu/harvard/hul/ois/jhove/module/pdf/PdfDictionary;Ledu/harvard/hul/ois/jhove/module/pdf/Stream;)VisPdfaCompliantgetIntegerValue setObjNumber(I)V setGenNumber isSimpleToken/(Ledu/harvard/hul/ois/jhove/module/pdf/Token;)VB(Ljava/lang/String;JLedu/harvard/hul/ois/jhove/module/pdf/Token;)Vadd3(Ledu/harvard/hul/ois/jhove/module/pdf/PdfObject;)VgetToken getContent()Ljava/util/Vector;sizeappend-(Ljava/lang/String;)Ljava/lang/StringBuilder;(I)Ljava/lang/StringBuilder;toString(Ljava/lang/String;J)V elementAt(I)Ljava/lang/Object;E(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/module/pdf/PdfObject;)V(IILjava/util/Map;)Vset'(ILjava/lang/Object;)Ljava/lang/Object;removeElementAt!`abcdefeghijkjlmn**+**opn*+qrn **srn **tun* vw=txnw* N- *Y`%- *Yd* Y-*Y`%-*Yd* Y-y z!!vw=t{n?$*N+- Y,-*-y z vw=|}n*~n**}n*n*n*n)***yn'* *yn* L*+!vw=nM**, N*", ":#$% Y,*&**':(?:*)* )::$,Y(-:.*:+/0-/1Zhk+y86!!vw=nX<*L+*2+ *3+4 5Y+6 Y7*8+9y z vw=nA:Y;LM*'M+,<*N->:*+?@+A*+- =y("zvw=nR (YBLCYDMN*'N-5-5EF,-GW:>: *,@H:,I6p( YJYKLMLNO*8P6E,Q5ER: ,`QS: + T U: Y*8P+V*+0+7=.47=+yE HKzr vw=n*Wn *X*vw=n +Id=+QSN-5-5E:"Y"$%r+dQ5:E:/6+dQ5:E:/6+dZY*[\W+]+d]: Y^X=+y#z v=n *_jhove/classes/edu/harvard/hul/ois/jhove/module/pdf/PdfObject.class0000644000707400001440000000074511510702104024337 0ustar garyusers2    _objNumberI _genNumber(II)VCode()V getObjNumber()I getGenNumber setObjNumber(I)V setGenNumber  .edu/harvard/hul/ois/jhove/module/pdf/PdfObjectjava/lang/Object!  ***  ***  * * * *jhove/classes/edu/harvard/hul/ois/jhove/module/pdf/PdfDictionary.class0000644000707400001440000000175211510702104025235 0ustar garyusers22     ! "# $ % &'(_entriesLjava/util/Map;(II)VCode()VaddE(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/module/pdf/PdfObject;)VgetD(Ljava/lang/String;)Ledu/harvard/hul/ois/jhove/module/pdf/PdfObject;isPdfACompliant()Z StackMapTableiterator()Ljava/util/Iterator; java/util/HashMap  ) *+ ,.edu/harvard/hul/ois/jhove/module/pdf/PdfObject -. /01 2edu/harvard/hul/ois/jhove/module/pdf/PdfDictionary java/util/Mapput8(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;&(Ljava/lang/Object;)Ljava/lang/Object;size()Ivalues()Ljava/util/Collection;java/util/Collection!  **Y**Y *+,W*+,* @*  jhove/classes/edu/harvard/hul/ois/jhove/module/pdf/DocNode.class0000644000707400001440000000537011510702104024011 0ustar garyusers2r H I J KL MN OPQR ST UVWXY SZ [\]^_ `a bc d`ef_module,Ledu/harvard/hul/ois/jhove/module/PdfModule;_parent3Ledu/harvard/hul/ois/jhove/module/pdf/PageTreeNode;_dict4Ledu/harvard/hul/ois/jhove/module/pdf/PdfDictionary;_pageObjectFlagZ _walkFinished(Ledu/harvard/hul/ois/jhove/module/PdfModule;Ledu/harvard/hul/ois/jhove/module/pdf/PageTreeNode;Ledu/harvard/hul/ois/jhove/module/pdf/PdfDictionary;)VCode isPageObject()Z startWalk()VnextPageObject3()Ledu/harvard/hul/ois/jhove/module/pdf/PageObject; nextDocNode0()Ledu/harvard/hul/ois/jhove/module/pdf/DocNode; getParentgetDict6()Ledu/harvard/hul/ois/jhove/module/pdf/PdfDictionary; getResources StackMapTablegXZ ExceptionshgetFontResourceseW] getMediaBox1()Ledu/harvard/hul/ois/jhove/module/pdf/PdfArray;agetE(Ljava/lang/String;Z)Ledu/harvard/hul/ois/jhove/module/pdf/PdfObject;i )/ ! "# $%Parent Ej3edu/harvard/hul/ois/jhove/module/pdf/PdfIndirectObj &'#Invalid Resources Entry in document:edu/harvard/hul/ois/jhove/module/pdf/PdfMalformedException#Missing dictionary in document node )k Resourcesl mn2edu/harvard/hul/ois/jhove/module/pdf/PdfDictionaryjava/lang/ClassCastException8edu/harvard/hul/ois/jhove/module/pdf/PdfInvalidExceptionjava/io/IOException 76Fontjava/lang/ExceptionInvalid Font entry in ResourcesMediaBox EF-edu/harvard/hul/ois/jhove/module/pdf/PdfArray opMalformed MediaBox in page treeq,edu/harvard/hul/ois/jhove/module/pdf/DocNodejava/lang/Objectjava/lang/String1edu/harvard/hul/ois/jhove/module/pdf/PdfException.edu/harvard/hul/ois/jhove/module/pdf/PdfObjectD(Ljava/lang/String;)Ledu/harvard/hul/ois/jhove/module/pdf/PdfObject;(Ljava/lang/String;)V*edu/harvard/hul/ois/jhove/module/PdfModuleresolveIndirectObjectb(Ledu/harvard/hul/ois/jhove/module/pdf/PdfObject;)Ledu/harvard/hul/ois/jhove/module/pdf/PdfObject; toRectangle()[D1edu/harvard/hul/ois/jhove/module/pdf/PageTreeNode! !"#$%&'(' )*+."**+*,*-*:,-+*./012343+*56+*76+r@ L* Y * M*,M,MY+MY++,+689W:I;<=>6+X+*L+#+M*,M,M Y  8?@A <=BC+a)*M,,YMY8D ?A<EF+B&*+N-**+-8 G jhove/classes/edu/harvard/hul/ois/jhove/module/pdf/PageLabelNode.class0000644000707400001440000001073211510702104025116 0ustar garyusers2 I                          -  1 1W 1 1_module,Ledu/harvard/hul/ois/jhove/module/PdfModule;_parent4Ledu/harvard/hul/ois/jhove/module/pdf/PageLabelNode;_dict4Ledu/harvard/hul/ois/jhove/module/pdf/PdfDictionary; _walkFinishedZ _descendantsLjava/util/List;_descendantsIterLjava/util/Iterator; _currentKeyI _currentValue0Ledu/harvard/hul/ois/jhove/module/pdf/PdfObject;_prevKey _prevValue_currentNumsIndex_currentNumsLength_currentNumsVecLjava/util/Vector;_currentDescendant _currentLeaf(Ledu/harvard/hul/ois/jhove/module/PdfModule;Ledu/harvard/hul/ois/jhove/module/pdf/PageLabelNode;Ledu/harvard/hul/ois/jhove/module/pdf/PdfDictionary;)VCode buildSubtree()V StackMapTable Exceptions startWalknextLeafObject6()Ledu/harvard/hul/ois/jhove/module/pdf/PageLabelNode;findNextKeyValue()Z getCurrentKey()I_getCurrentValue2()Ledu/harvard/hul/ois/jhove/module/pdf/PdfObject; getPrevKey getPrevValue intToRoman(IZ)Ljava/lang/String; intToBase26 bf JK LM NOKids -edu/harvard/hul/ois/jhove/module/pdf/PdfArray java/util/ArrayList u b RS .edu/harvard/hul/ois/jhove/module/pdf/PdfObject 2edu/harvard/hul/ois/jhove/module/pdf/PdfDictionary2edu/harvard/hul/ois/jhove/module/pdf/PageLabelNode bc ef 1edu/harvard/hul/ois/jhove/module/pdf/PdfExceptionjava/lang/Exception8edu/harvard/hul/ois/jhove/module/pdf/PdfInvalidExceptionInvalid page label node b TU PQ `M aM VW XY ZW [Y mf no r \W ]WNums2Missing expected element in page number dictionary ^_4edu/harvard/hul/ois/jhove/module/pdf/PdfSimpleObject u f Invalid date in page number treejava/lang/StringBufferM CMDCCDXCLXXLIIIIIIVVVIVIIVIIIIX  java/lang/Objectjava/util/Vectorjava/lang/StringgetD(Ljava/lang/String;)Ledu/harvard/hul/ois/jhove/module/pdf/PdfObject; getContent()Ljava/util/Vector;size(I)V elementAt(I)Ljava/lang/Object;*edu/harvard/hul/ois/jhove/module/PdfModuleresolveIndirectObjectb(Ledu/harvard/hul/ois/jhove/module/pdf/PdfObject;)Ledu/harvard/hul/ois/jhove/module/pdf/PdfObject;java/util/Listadd(Ljava/lang/Object;)Z(Ljava/lang/String;)V listIterator()Ljava/util/ListIterator;java/util/Iteratornext()Ljava/lang/Object;hasNext getIntValueprintStackTraceappend,(Ljava/lang/String;)Ljava/lang/StringBuffer;toString()Ljava/lang/String; toLowerCase(C)Ljava/lang/StringBuffer;!IJKLMNOPQRSTUVWXYZW[Y\W]W^_`MaM bcd **+*,*-efdL*L+_+M* Y, >, >*, :Y**:* W* M,MYtwtzg)hiBBjBk lmfd[E* ** * ****** *!*"g nodu**(* ****#*$*%L+5*&"**#*$*%*+g  6pqrd**'*(g**%***!** "*)*'***L+ Y+*+,**, (*,*' -L**!** "*+.**,*'`  *Y'`'L+L+/Y08989g&)hFsBkltud*vwd* xud*!ywd*" z{ds1Y2M,34WĄ,54WĄ|$,64WX,74WĄ ,84WĄpd,74WZ ,94W2 ,:4W<,;4W( ,<4W ,;4W 3=GQ[eoy,=4WP,>4WF,?4W<,@4W2,A4W(,B4W,C4W,D4W ,E4W,FN--Gg%|  3  } ~{deEdl`=1Y2NAdp`6adp`6-HW-Fg#| jhove/classes/edu/harvard/hul/ois/jhove/module/pdf/NameTreeNode.class0000644000707400001440000000651611510702104025007 0ustar garyusers2 /Q R S TU V WXY Z [ \ ]^_ `a bc defg hijk h l m ]nopq r stu $v wx yz{ (Q /| (}~ (| y_module,Ledu/harvard/hul/ois/jhove/module/PdfModule;_parent3Ledu/harvard/hul/ois/jhove/module/pdf/NameTreeNode;_dict4Ledu/harvard/hul/ois/jhove/module/pdf/PdfDictionary;_kidsLjava/util/Vector;_names _lowerLimit _upperLimit(Ledu/harvard/hul/ois/jhove/module/PdfModule;Ledu/harvard/hul/ois/jhove/module/pdf/NameTreeNode;Ledu/harvard/hul/ois/jhove/module/pdf/PdfDictionary;)VCode StackMapTableqpYeij ExceptionsinBounds(Ljava/util/Vector;)ZgetD(Ljava/util/Vector;)Ledu/harvard/hul/ois/jhove/module/pdf/PdfObject;_t compareKey'(Ljava/util/Vector;Ljava/util/Vector;)IdumpKey'(Ljava/util/Vector;Ljava/lang/String;)V ; 01 23 45Limits I -edu/harvard/hul/ois/jhove/module/pdf/PdfArray 97 :7  4edu/harvard/hul/ois/jhove/module/pdf/PdfSimpleObject Kids 67Names 87java/lang/ClassCastException8edu/harvard/hul/ois/jhove/module/pdf/PdfInvalidExceptionInvalid name tree ;java/lang/NullPointerExceptionjava/lang/Exception:edu/harvard/hul/ois/jhove/module/pdf/PdfMalformedException MN GH .edu/harvard/hul/ois/jhove/module/pdf/PdfObject2edu/harvard/hul/ois/jhove/module/pdf/PdfDictionary1edu/harvard/hul/ois/jhove/module/pdf/NameTreeNode ;< IJ1edu/harvard/hul/ois/jhove/module/pdf/PdfExceptionjava/lang/Integer   java/lang/StringBuilder  java/lang/Object*edu/harvard/hul/ois/jhove/module/PdfModule()VD(Ljava/lang/String;)Ledu/harvard/hul/ois/jhove/module/pdf/PdfObject;resolveIndirectObjectb(Ledu/harvard/hul/ois/jhove/module/pdf/PdfObject;)Ledu/harvard/hul/ois/jhove/module/pdf/PdfObject; getContent()Ljava/util/Vector;java/util/Vector elementAt(I)Ljava/lang/Object; getRawBytes(Ljava/lang/String;)Vsize()IintValuejava/lang/SystemoutLjava/io/PrintStream;java/io/PrintStreamprinttoString()Ljava/lang/String;append-(Ljava/lang/String;)Ljava/lang/StringBuilder;println! /012345678797:7;<=F**+*,*-+-:* * 2 : :*  :* +-:* *+-:* *':Y:Y:Y>G 4?@?AB.BB?@?ABCKDKE F#GH=<%* *+* *+* > IJ=w*+*R>*C* :*+6**` *O>*@** : Y**!:+ +"YN-NY # P#QW#X_#`###  PQWX_`>* =KAILBEF#MN= i+>,6667+ $%6, $%6>A+OP=Y>&,'>+)&(Y)+ *+,+-'ղ&.>  -jhove/classes/edu/harvard/hul/ois/jhove/module/pdf/ObjectStream.class0000644000707400001440000000604711510702104025062 0ustar garyusers2 ,M +N +O PQ +RST PU V W +XY Z[\ ]^ _`a b +cd +efg Ph ij ikl m +no ip m qr qs t u vwxy (z{|_ostrm0Ledu/harvard/hul/ois/jhove/module/pdf/PdfStream;_dict4Ledu/harvard/hul/ois/jhove/module/pdf/PdfDictionary; _numObjectsI _firstOffset_parser-Ledu/harvard/hul/ois/jhove/module/pdf/Parser;_rafLjava/io/RandomAccessFile;_indexLjava/util/Map;M(Ledu/harvard/hul/ois/jhove/module/pdf/PdfStream;Ljava/io/RandomAccessFile;)VCodeisValid()Z StackMapTable}~{g readIndex()V Exceptions getObject3(I)Ledu/harvard/hul/ois/jhove/module/pdf/PdfObject;ow :E -. 67 /0+edu/harvard/hul/ois/jhove/module/pdf/Parser4edu/harvard/hul/ois/jhove/module/pdf/StreamTokenizer : : 45Type 4edu/harvard/hul/ois/jhove/module/pdf/PdfSimpleObject ObjStm~ N 12First 32Extendsjava/lang/Exception  java/util/HashMap : 89java/lang/Integer  java/io/IOException:edu/harvard/hul/ois/jhove/module/pdf/PdfMalformedException%Offset out of bounds in object stream :1edu/harvard/hul/ois/jhove/module/pdf/ObjectStreamjava/lang/Object.edu/harvard/hul/ois/jhove/module/pdf/PdfObjectjava/lang/String+edu/harvard/hul/ois/jhove/module/pdf/Stream1edu/harvard/hul/ois/jhove/module/pdf/PdfException.edu/harvard/hul/ois/jhove/module/pdf/PdfStreamgetDict6()Ledu/harvard/hul/ois/jhove/module/pdf/PdfDictionary; getStream/()Ledu/harvard/hul/ois/jhove/module/pdf/Stream;J(Ljava/io/RandomAccessFile;Ledu/harvard/hul/ois/jhove/module/pdf/Stream;)V3(Ledu/harvard/hul/ois/jhove/module/pdf/Tokenizer;)V2edu/harvard/hul/ois/jhove/module/pdf/PdfDictionarygetD(Ljava/lang/String;)Ledu/harvard/hul/ois/jhove/module/pdf/PdfObject;getStringValue()Ljava/lang/String;equals(Ljava/lang/Object;)Z getIntValue()I getFilters0()[Ledu/harvard/hul/ois/jhove/module/pdf/Filter; setFilters1([Ledu/harvard/hul/ois/jhove/module/pdf/Filter;)VinitRead(Ljava/io/RandomAccessFile;)V(I)V readAsciiInt java/util/Mapput8(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;&(Ljava/lang/Object;)Ljava/lang/Object;intValueseek(J)V readObject2()Ledu/harvard/hul/ois/jhove/module/pdf/PdfObject;(Ljava/lang/String;)V!+,-./01232456789:;<=1**+*,*+*YY,* =><{* LM+ +M,* L+*+* L+*+* L+L%x&FxGgxhwx?@A  BCDE<a*L+*+**Y*=*/Y+ !NY+ !:*-"Wϱ? ,F3GH'IJ<wFY!M*,#N- -$6* *`%* &:(Y)*7:'89:'?8KKALGHjhove/classes/edu/harvard/hul/ois/jhove/module/pdf/Filter.class0000644000707400001440000000173211510702104023721 0ustar garyusers2+     ! "#$% _filterNameLjava/lang/String; _decodeParms4Ledu/harvard/hul/ois/jhove/module/pdf/PdfDictionary;(Ljava/lang/String;)VCode getFilterName()Ljava/lang/String;getDecodeParms6()Ledu/harvard/hul/ois/jhove/module/pdf/PdfDictionary; getNameParam StackMapTable#setDecodeParms7(Ledu/harvard/hul/ois/jhove/module/pdf/PdfDictionary;)V & Name' ()4edu/harvard/hul/ois/jhove/module/pdf/PdfSimpleObject *java/lang/Exception+edu/harvard/hul/ois/jhove/module/pdf/Filterjava/lang/Object()V2edu/harvard/hul/ois/jhove/module/pdf/PdfDictionarygetD(Ljava/lang/String;)Ledu/harvard/hul/ois/jhove/module/pdf/PdfObject;getStringValue!    **+**A**L+LB*+jhove/classes/edu/harvard/hul/ois/jhove/module/pdf/PdfStream.class0000644000707400001440000000637311510702104024367 0ustar garyusers2 S ,T ,U ,V ,W XY Z[ \ ]^ ,_`abc defghij k lm ln opq rs tuvw "o ,xy &z { |}~_stream-Ledu/harvard/hul/ois/jhove/module/pdf/Stream;_dict4Ledu/harvard/hul/ois/jhove/module/pdf/PdfDictionary;_filters.[Ledu/harvard/hul/ois/jhove/module/pdf/Filter; pdfaCompliantZf(Ledu/harvard/hul/ois/jhove/module/pdf/PdfDictionary;Ledu/harvard/hul/ois/jhove/module/pdf/Stream;II)VCode Exceptionsd(Ledu/harvard/hul/ois/jhove/module/pdf/PdfDictionary;Ledu/harvard/hul/ois/jhove/module/pdf/Stream;)VgetDict6()Ledu/harvard/hul/ois/jhove/module/pdf/PdfDictionary; getStream/()Ledu/harvard/hul/ois/jhove/module/pdf/Stream;getFileSpecification()Ljava/lang/String; StackMapTablep^isPdfaCompliant()Z getFilters0()[Ledu/harvard/hul/ois/jhove/module/pdf/Filter; getFilterNameextractFilters()V2cumakeFilterList()Ljava/util/List;isImage 5 -. /0 34 HI 5IF 6edu/harvard/hul/ois/jhove/module/pdf/FileSpecification 5 ?1edu/harvard/hul/ois/jhove/module/pdf/PdfException 12 DecodeParams2edu/harvard/hul/ois/jhove/module/pdf/PdfDictionaryName4edu/harvard/hul/ois/jhove/module/pdf/PdfSimpleObject ?+edu/harvard/hul/ois/jhove/module/pdf/FilterFilterFFilter FDecodeParms DecodeParms-edu/harvard/hul/ois/jhove/module/pdf/PdfArray  5.edu/harvard/hul/ois/jhove/module/pdf/PdfObjectnull java/lang/Exception:edu/harvard/hul/ois/jhove/module/pdf/PdfMalformedExceptionMalformed filter EFjava/util/ArrayList 5 G? SubtypeImage.edu/harvard/hul/ois/jhove/module/pdf/PdfStreamjava/util/Vectorjava/util/List(II)VgetD(Ljava/lang/String;)Ledu/harvard/hul/ois/jhove/module/pdf/PdfObject;3(Ledu/harvard/hul/ois/jhove/module/pdf/PdfObject;)V getSpecStringgetStringValue getContent()Ljava/util/Vector;size()I(I)Ljava/lang/Object;(Ljava/lang/String;)Vjava/lang/Stringequals(Ljava/lang/Object;)ZsetDecodeParms7(Ledu/harvard/hul/ois/jhove/module/pdf/PdfDictionary;)V(I)Vadd!,-./01234 567'**,*+**8 597$**,*+**8 :;7*<=7*>?7L&*L+* Y+ M, M"# @ ARBCD7*EF7* 8 G?7F,*L++M, ,@*AHI7 8<* *M,*M,<**N-* *N,,:6::- -:6h: Y S@:   :  2 * 3:Y,S-2- * :"Y#$R(+!@^'A A-JAAKLKSMAJAA)LBN 8 OP7W3*%L+&Y+'M>+,+2()W,@ L Q8 RD7<"**L++M+,@ Ajhove/classes/edu/harvard/hul/ois/jhove/module/pdf/PdfException.class0000644000707400001440000000126511510702104025065 0ustar garyusers2   _offsetJ_token,Ledu/harvard/hul/ois/jhove/module/pdf/Token;(Ljava/lang/String;)VCode(Ljava/lang/String;J)VB(Ljava/lang/String;JLedu/harvard/hul/ois/jhove/module/pdf/Token;)V getOffset()JgetToken.()Ledu/harvard/hul/ois/jhove/module/pdf/Token; disparage&(Ledu/harvard/hul/ois/jhove/RepInfo;)V  1edu/harvard/hul/ois/jhove/module/pdf/PdfExceptionjava/lang/Exception!   *+** *+* * *+* ***jhove/classes/edu/harvard/hul/ois/jhove/module/pdf/PageObject.class0000644000707400001440000000667511510702104024512 0ustar garyusers2 )M (N (O (PQ RS TUVW X YZ[ \ ]^ ]_`ab cdefg ch (ij k k (l (mn opqrstuvw_contentStreamsLjava/util/List; badPageStrLjava/lang/String; ConstantValue(Ledu/harvard/hul/ois/jhove/module/PdfModule;Ledu/harvard/hul/ois/jhove/module/pdf/PageTreeNode;Ledu/harvard/hul/ois/jhove/module/pdf/PdfDictionary;)VCode loadContent/(Ledu/harvard/hul/ois/jhove/module/PdfModule;)V StackMapTable`xdef ExceptionsygetContentStreams()Ljava/util/List;getAnnotations1()Ledu/harvard/hul/ois/jhove/module/pdf/PdfArray;vz startWalk()VnextPageObject3()Ledu/harvard/hul/ois/jhove/module/pdf/PageObject; nextDocNode0()Ledu/harvard/hul/ois/jhove/module/pdf/DocNode; getArtBox[q getTrimBox getBleedBox /0 *+ {| }~Contents  .edu/harvard/hul/ois/jhove/module/pdf/PdfStreamjava/util/ArrayList / -edu/harvard/hul/ois/jhove/module/pdf/PdfArray x .edu/harvard/hul/ois/jhove/module/pdf/PdfObject8edu/harvard/hul/ois/jhove/module/pdf/PdfInvalidException Invalid dictionary data for page /java/lang/NullPointerExceptionjava/lang/ClassCastExceptionjava/io/IOException:edu/harvard/hul/ois/jhove/module/pdf/PdfMalformedExceptionInvalid Annotations Annots / | DEArtBox Malformed ArtBox in page treejava/lang/ExceptionTrimBoxMalformed TrimBox in page treeBleedBoxMalformed BleedBox in page tree/edu/harvard/hul/ois/jhove/module/pdf/PageObject,edu/harvard/hul/ois/jhove/module/pdf/DocNodejava/util/Vector1edu/harvard/hul/ois/jhove/module/pdf/PdfExceptionjava/lang/String_pageObjectFlagZ_dict4Ledu/harvard/hul/ois/jhove/module/pdf/PdfDictionary;2edu/harvard/hul/ois/jhove/module/pdf/PdfDictionarygetD(Ljava/lang/String;)Ledu/harvard/hul/ois/jhove/module/pdf/PdfObject;*edu/harvard/hul/ois/jhove/module/PdfModuleresolveIndirectObjectb(Ledu/harvard/hul/ois/jhove/module/pdf/PdfObject;)Ledu/harvard/hul/ois/jhove/module/pdf/PdfObject;(I)Vjava/util/Listadd(Ljava/lang/Object;)Z getContent()Ljava/util/Vector;size()I elementAt(I)Ljava/lang/Object;(Ljava/lang/String;J)V_module,Ledu/harvard/hul/ois/jhove/module/PdfModule;(Ljava/lang/String;)V _walkFinished toRectangle()[D!()*+,-. /01*+,-**231C*M,+,M,* Y *, W, Y, N-* Y- 6-+-:+:* WҧY 'MY MY MY  23IJ23IJ23IJ4& 3560 B7K8K9 :;<=1*>?1c+L** MY+MY+!4@A8I9:;BC1*DE1%***4 FG1*H?1r1*  M,,!,Y"MY"&#&#&&#4I @J:;K?1r1*$ M,,!,Y%MY%&#&#&&#4I @J:;L?1r1*& M,,!,Y'MY'&#&#&&#4I @J:;jhove/classes/edu/harvard/hul/ois/jhove/module/pdf/PdfSimpleObject.class0000644000707400001440000000245211510702104025506 0ustar garyusers2< % & '( ) *+ , -./ ) 01234_token,Ledu/harvard/hul/ois/jhove/module/pdf/Token;1(Ledu/harvard/hul/ois/jhove/module/pdf/Token;II)VCode/(Ledu/harvard/hul/ois/jhove/module/pdf/Token;)VgetToken.()Ledu/harvard/hul/ois/jhove/module/pdf/Token;getStringValue()Ljava/lang/String; StackMapTable getRawBytes()Ljava/util/Vector; getIntValue()IgetDoubleValue()DisTrue()ZisFalse 5  66edu/harvard/hul/ois/jhove/module/pdf/StringValuedToken 7 ,edu/harvard/hul/ois/jhove/module/pdf/Numeric 8 7!,edu/harvard/hul/ois/jhove/module/pdf/Keywordtrue9 :;false4edu/harvard/hul/ois/jhove/module/pdf/PdfSimpleObject.edu/harvard/hul/ois/jhove/module/pdf/PdfObject(II)V()VgetValuegetIntegerValuejava/lang/Stringequals(Ljava/lang/Object;)Z!  **+ **+*,** ,**  * ! * "#1*  *  $#1* *  jhove/classes/edu/harvard/hul/ois/jhove/module/pdf/PdfArray.class0000644000707400001440000000257411510702104024211 0ustar garyusers2L +, - . - / 01 - 234 5 6 7 8 9 :;<_contentLjava/util/Vector;(II)VCode()Vadd3(Ledu/harvard/hul/ois/jhove/module/pdf/PdfObject;)V getContent()Ljava/util/Vector;isPdfACompliant()Z StackMapTable toPipeline()Ljava/lang/String;13= toRectangle()[D>; java/util/Vector   ? @Ajava/lang/StringBuffer BC.edu/harvard/hul/ois/jhove/module/pdf/PdfObject4edu/harvard/hul/ois/jhove/module/pdf/PdfSimpleObject D# EA FG FH I# JKjava/lang/Exception-edu/harvard/hul/ois/jhove/module/pdf/PdfArrayjava/lang/String[D(Ljava/lang/Object;)Zsize()I elementAt(I)Ljava/lang/Object;getStringValuelengthappend(C)Ljava/lang/StringBuffer;,(Ljava/lang/String;)Ljava/lang/StringBuffer;toStringgetDoubleValue()D! **Y**Y *+W* **!@"#{QY L=*:* N- !- :+ + W+W+! $4%&'(I*L=/* N- - 9+R+M=F>EF! )(%A*jhove/classes/edu/harvard/hul/ois/jhove/module/pdf/Tokenizer.class0000644000707400001440000002344111510702104024447 0ustar garyusers2{ { z z z z z z z z z@$ $  z    z       !  $ &  )  z  .  z ! 2 " # z$ % $&' 9 () )*+ = , 2- 2./ 01 23 E z45 H z6 27 z8 )9@H 0 : z; E< E= > ? @ A B C D E EFG zH IJK zL zM zNOPPDFDOCENCODING[CCRI ConstantValue LF BSHT FORMFEED ESC POUND_SIGN# PERCENT_SIGN%OPEN_PARENTHESIS(CLOSE_PARENTHESIS)PLUS+MINUS-PERIOD.SLASH/ LESS_THAN< GREATER_THAN> OPEN_BRACKET[ BACKSLASH\ CLOSE_BRACKET]aaddeemmnnrrsstt DELIMITER[I WHITESPACE_fileLjava/io/RandomAccessFile;_ch _lookAheadZ_offsetJ_state,Ledu/harvard/hul/ois/jhove/module/pdf/State; _wsStringLjava/lang/String;_pdfACompliant _encrypted_languageCodesLjava/util/Set; _parenLevel _scanMode()VCodegetNext.()Ledu/harvard/hul/ois/jhove/module/pdf/Token; ExceptionsQR/(J)Ledu/harvard/hul/ois/jhove/module/pdf/Token; StackMapTableOSTGG getOffset()JgetLanguageCodes()Ljava/util/Set; setEncrypted(Z)VgetPDFACompliant()ZsetPDFACompliant getWSString()Ljava/lang/String;seek(J)V seekResetreadChar()I readChar1(Z)I backupCharaddLanguageCode(Ljava/lang/String;)VhexValue(I)I isDelimiter(I)Z isNumeral isWhitespacescanMode initStream0(Ledu/harvard/hul/ois/jhove/module/pdf/Stream;)VsetStreamOffset U   java/util/TreeSet  Lexical error6edu/harvard/hul/ois/jhove/module/pdf/StringValuedToken V W :edu/harvard/hul/ois/jhove/module/pdf/PdfMalformedExceptionUnexpected EOF X java/lang/StringBuilder YZ Y[/edu/harvard/hul/ois/jhove/module/pdf/ArrayStart-edu/harvard/hul/ois/jhove/module/pdf/ArrayEnd \java/lang/StringBuffer,edu/harvard/hul/ois/jhove/module/pdf/Comment ],edu/harvard/hul/ois/jhove/module/pdf/Numeric ^ _)edu/harvard/hul/ois/jhove/module/pdf/Name ` ,edu/harvard/hul/ois/jhove/module/pdf/Literal a Yb,edu/harvard/hul/ois/jhove/module/pdf/KeywordT c Wd2edu/harvard/hul/ois/jhove/module/pdf/DictionaryEnd e f ghstreamS ij k+edu/harvard/hul/ois/jhove/module/pdf/Stream 4edu/harvard/hul/ois/jhove/module/pdf/DictionaryStart lm W n o p q r s t u v w xjava/io/EOFException y zjInvalid character in hex string |}.edu/harvard/hul/ois/jhove/module/pdf/Tokenizerjava/lang/Objectjava/io/IOException1edu/harvard/hul/ois/jhove/module/pdf/PdfExceptionjava/lang/String*edu/harvard/hul/ois/jhove/module/pdf/Token*edu/harvard/hul/ois/jhove/module/pdf/StatetoStringsetValue(Ljava/lang/String;J)Vappend-(Ljava/lang/String;)Ljava/lang/StringBuilder;(C)Ljava/lang/StringBuilder;COMMENTNUMERIC FRACTIONALNAMELITERALKEYWORD(C)Ljava/lang/StringBuffer;isPdfACompliant(D)V HEXADECIMAL convertHex appendHex(I)Vequals(Ljava/lang/Object;)ZSTREAMprocessLiteral3(Ledu/harvard/hul/ois/jhove/module/pdf/Tokenizer;)JE setOffsetENENDENDSENDSTENDSTRENDSTREENDSTREA ENDSTREAM setLength java/util/Setadd!z{) |}~B6****** * Y * * *   N::**69 7 9 7 6666*7 7*e+ :*4****Y**Y a***#Y*Z*X*[**Y *]**!Y"*%*#$Y%:&Y':*+ *-)*( 7 *-6)Y*:*.!*+969 )Y*:*,%*(*0d7 9 )Y*:l*/*-$Y%:.Y/:G*(+* 7*0*12Y3:$Y%:*< *4*> *5*6*7$Y%:*8W9Y::*#d* * D*Y*Z*;* *8WT*+*6 *X**Y*w9)<*6*;* *,*0d oc9 k9 **Y-**5;*>**=Y>**Y-**?=*>**2@*+2*A*7*6 **6*BCH*D* 6* 6EYF: 7 66*EG**Y*;* *8WP*4P*< * **HYI*?2Y3:$Y%:2*A*0+*J*Y2*K ea***-*#!*6*6*LxL`*6 *Z**6***Y*;* *8W*(*.*+ 99 *6* *,*+ w9 u7 *+)< ) M**6***Y*;* *+k*cNg92 Pi*aRe7 *D*e *T6*6*EU \W* %6* EEV aW* 6EEV aW*  a7 *T(*n *Xg*D Ya7 U*X(*d *[8*D \a7 &*[(*s *^ *D _a7 *^(*t *a*D ba7 *a(*r *d*D ea7 *d(*e *g|*D ha7 j*g(*a *jM*D ka7 ;*j(*m *m*D na7 *m*6 *w*   Ye7    e7 E p*6***Y**Dp: :9r qs q q  qZ q[ q q q qt qu q q q qf93* 3$@ &+$00= + $'* @@; '10+  &  4  !I#** *r* * *+***** e/*=*>x* * +sW fK<09 0d<6AF 7d<"af Wd<Yt    ?"<=uu.<   %0 9 ?"<=vv.<  * pdYUYUYUYUYUYUYUYUYUY  UY  UY  UY  UY  UYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUY  UY!!UY""UY##UY$$UY%%UY&&UY''UY((UY))UY**UY++UY,,UY--UY..UY//UY00UY11UY22UY33UY44UY55UY66UY77UY88UY99UY::UY;;UY<>UY??UY@@UYAAUYBBUYCCUYDDUYEEUYFFUYGGUYHHUYIIUYJJUYKKUYLLUYMMUYNNUYOOUYPPUYQQUYRRUYSSUYTTUYUUUYVVUYWWUYXXUYYYUYZZUY[[UY\\UY]]UY^^UY__UY``UYaaUYbbUYccUYddUYeeUYffUYggUYhhUYiiUYjjUYkkUYllUYmmUYnnUYooUYppUYqqUYrrUYssUYttUYuuUYvvUYwwUYxxUYyyUYzzUY{{UY||UY}}UY~~UYUY "UY UY !UY &UY UY UYUY DUY 9UY :UY"UY 0UY UY UY UY UY UY UY!"UYwUYxUYAUYRUY`UYxUY}UY1UYBUYSUYaUY~UYUY UYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUy Y%OY(OY)OY/OYOY[OY]OY{OY }Ou YOY OY OY OY OY Ovjhove/classes/edu/harvard/hul/ois/jhove/module/pdf/Token.class0000644000707400001440000000102211510702104023544 0ustar garyusers2 ()VCode isSimpleToken()Z StackMapTableisPdfACompliant  /edu/harvard/hul/ois/jhove/module/pdf/ArrayStart-edu/harvard/hul/ois/jhove/module/pdf/ArrayEnd4edu/harvard/hul/ois/jhove/module/pdf/DictionaryStart2edu/harvard/hul/ois/jhove/module/pdf/DictionaryEnd*edu/harvard/hul/ois/jhove/module/pdf/Tokenjava/lang/Object!  *  9"****  @  jhove/classes/edu/harvard/hul/ois/jhove/module/pdf/Numeric.class0000644000707400001440000000151211510702104024072 0ustar garyusers2) # $ % &Gj|#!'(_realZ _realValueD _intValueJ()VCodegetIntegerValue()I StackMapTable getLongValue()JgetValue()DisReal()ZsetValue(D)V(J)VisPdfACompliant    ,edu/harvard/hul/ois/jhove/module/pdf/Numeric*edu/harvard/hul/ois/jhove/module/pdf/Token!  *** (* ** '* ** '*** *  *'*! **"jG*'* *w*H'** C @@jhove/classes/edu/harvard/hul/ois/jhove/module/pdf/PdfInvalidException.class0000644000707400001440000000105511510702104026371 0ustar garyusers2    (Ljava/lang/String;)VCode(Ljava/lang/String;J)VB(Ljava/lang/String;JLedu/harvard/hul/ois/jhove/module/pdf/Token;)V disparage&(Ledu/harvard/hul/ois/jhove/RepInfo;)V     8edu/harvard/hul/ois/jhove/module/pdf/PdfInvalidException1edu/harvard/hul/ois/jhove/module/pdf/PdfException!edu/harvard/hul/ois/jhove/RepInfosetValid(Z)V1 *+  *+    *+   +jhove/classes/edu/harvard/hul/ois/jhove/module/pdf/Stream.class0000644000707400001440000000557611510702104023741 0ustar garyusers2 -V ,W ,XY ,Z ,[ ,\ ]^ ]_` a bc defg hijk hlmn o pqrs h ,t uv uw ux ,v yz y{|} (~ ,_lengthJ_offset _bytesReadI_filters.[Ledu/harvard/hul/ois/jhove/module/pdf/Filter; _inStreamLjava/io/InputStream;_sdata[B()VCode getLength()J setLength(J)V getOffset setOffset setFilters1([Ledu/harvard/hul/ois/jhove/module/pdf/Filter;)VinitRead(Ljava/io/RandomAccessFile;)V StackMapTableY Exceptionsread()I([B)I skipBytes(J)J readAsciiInt advanceTo(I)Z 9: ./ 0/+edu/harvard/hul/ois/jhove/module/pdf/Filter 34 12 78 ? Njava/io/ByteArrayInputStream 9 ASCIIHexDecode AHx9edu/harvard/hul/ois/jhove/module/pdf/AsciiHexFilterStream 9 ASCII85DecodeA858edu/harvard/hul/ois/jhove/module/pdf/Ascii85FilterStream FlateDecodeFl8edu/harvard/hul/ois/jhove/module/pdf/PdfFlateInputStream 9RunLengthDecodeRL:edu/harvard/hul/ois/jhove/module/pdf/RunLengthFilterStream 56 NO NP R :edu/harvard/hul/ois/jhove/module/pdf/PdfMalformedException Malformed ASCII number in stream 9 QR+edu/harvard/hul/ois/jhove/module/pdf/Stream*edu/harvard/hul/ois/jhove/module/pdf/Tokenjava/io/InputStreamjava/lang/Stringjava/io/FilterInputStreamjava/io/IOException1edu/harvard/hul/ois/jhove/module/pdf/PdfExceptionjava/io/RandomAccessFileseek([BII)I([B)V getFilterName()Ljava/lang/String;equals(Ljava/lang/Object;)Z(Ljava/io/InputStream;)VgetDecodeParms6()Ledu/harvard/hul/ois/jhove/module/pdf/PdfDictionary;L(Ljava/io/InputStream;Ledu/harvard/hul/ois/jhove/module/pdf/PdfDictionary;)Vskipjava/lang/CharacterisDigit(C)Z isWhitespace(Ljava/lang/String;)V!,-./0/12345678 9:;/#** **** <=;*>?;*@=;*A?;*BC;*+DE;@*+* * :** =*#+* *e > `=ٻ Y* M>**2::: Y,Me Y,ME Y,M   Y, M`*,!F, !" G.HIJ  KLMNO;0*!"< *Y`FKLNP;1*!+#= *Y`FKLQR;#*!$B*Y!a!KLSO;_=<=*%>&< h0d`=' (Y)*FKLMTU;='****d+ F KLjhove/classes/edu/harvard/hul/ois/jhove/module/pdf/State.class0000644000707400001440000000366711510702104023565 0ustar garyusers2 Gv wxH y zJ {K |L }M ~N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i COMMENT,Ledu/harvard/hul/ois/jhove/module/pdf/State;EENENDENDSENDSTENDSTRENDSTREENDSTREA ENDSTREAM FRACTIONAL GREATER_THAN HEXADECIMALHEX_FE_1HEX_FE_2 HEX_PDF_1 HEX_PDF_2 HEX_UTF16_1 HEX_UTF16_2 HEX_UTF16_3 HEX_UTF16_4HEX_RAWKEYWORD LESS_THANLITERAL LITERAL_FE LITERAL_PDFLITERAL_UTF16_1LITERAL_UTF16_2NAMENUMERICSTREAM WHITESPACE_nameLjava/lang/String;(Ljava/lang/String;)VCodeequals/(Ledu/harvard/hul/ois/jhove/module/pdf/State;)Z StackMapTabletoString()Ljava/lang/String;()V lu jk*edu/harvard/hul/ois/jhove/module/pdf/State lm HI JI KI LI MI NI OI PI QI RI SI TI UI VI WI XI YI ZI [I \I ]I ^I _I `I aI bI cI dI eI fI gI hI iIjava/lang/Object!G"HIJIKILIMINIOIPIQIRISITIUIVIWIXIYIZI[I\I]I^I_I`IaIbIcIdIeIfIgIhIiIjklmn **+opn" *+q @rsn*tunYYY  Y  Y YYYYYYYYY Y!"Y#$Y%&Y'(Y)*Y+,Y-.Y/0Y12Y34Y56Y78Y9:Y;<Y=>Y?@YABYCDYEFjhove/classes/edu/harvard/hul/ois/jhove/module/pdf/PdfProfile.class0000644000707400001440000000461011510702105024525 0ustar garyusers2s = > ? @ A B CD E FGH I JK JLM N OP OQR STU VW XYZ_module,Ledu/harvard/hul/ois/jhove/module/PdfModule; _profileTextLjava/lang/String;_parser-Ledu/harvard/hul/ois/jhove/module/pdf/Parser;_rafLjava/io/RandomAccessFile; _alreadyOKZ/(Ledu/harvard/hul/ois/jhove/module/PdfModule;)VCode isAlreadyOK()ZsatisfiesProfileJ(Ljava/io/RandomAccessFile;Ledu/harvard/hul/ois/jhove/module/pdf/Parser;)Z StackMapTablesatisfiesThisProfilegetText()Ljava/lang/String; hasFiltersF(Ledu/harvard/hul/ois/jhove/module/pdf/PdfObject;[Ljava/lang/String;)Z[\YR]DM xObjectsOK7(Ledu/harvard/hul/ois/jhove/module/pdf/PdfDictionary;)Z^ xObjectOK %_  #$ !"  -) 4edu/harvard/hul/ois/jhove/module/pdf/PdfSimpleObject `/[ ab-edu/harvard/hul/ois/jhove/module/pdf/PdfArray cd\ ef ghjava/lang/Exception ij^ k) lm.edu/harvard/hul/ois/jhove/module/pdf/PdfObjectn op.edu/harvard/hul/ois/jhove/module/pdf/PdfStream qr2edu/harvard/hul/ois/jhove/module/pdf/PdfDictionary <:/edu/harvard/hul/ois/jhove/module/pdf/PdfProfilejava/lang/Objectjava/lang/Stringjava/util/Vector[Ljava/lang/String;java/util/Iterator()VgetStringValueequals(Ljava/lang/Object;)Z getContent()Ljava/util/Vector;size()I elementAt(I)Ljava/lang/Object;iterator()Ljava/util/Iterator;hasNextnext()Ljava/lang/Object;*edu/harvard/hul/ois/jhove/module/PdfModuleresolveIndirectObjectb(Ledu/harvard/hul/ois/jhove/module/pdf/PdfObject;)Ledu/harvard/hul/ois/jhove/module/pdf/PdfObject;getDict6()Ledu/harvard/hul/ois/jhove/module/pdf/PdfDictionary;! !"#$%&' **+()'**+'7*+*,**>*,-)./'*01'++++ N6,,2- N+ :6 8: N6,,2- ħ:+,st,@ 2 3456237B89:'W++M,>*,N- -N--:*MKRLOR,;(5B8<:'jhove/classes/edu/harvard/hul/ois/jhove/module/pdf/TaggedProfile.class0000644000707400001440000000274411510702105025215 0ustar garyusers2J !" # $ %&' ( %)*+, -. / 0 1 2 3456/(Ledu/harvard/hul/ois/jhove/module/PdfModule;)VCodesatisfiesThisProfile()Z StackMapTable*,.54  Tagged PDF 78 9:; <=MarkInfo >? @A2edu/harvard/hul/ois/jhove/module/pdf/PdfDictionaryMarked4edu/harvard/hul/ois/jhove/module/pdf/PdfSimpleObject B2edu/harvard/hul/ois/jhove/module/pdf/StructureTree CD EF G H Ijava/lang/Exception2edu/harvard/hul/ois/jhove/module/pdf/TaggedProfile/edu/harvard/hul/ois/jhove/module/pdf/PdfProfile _profileTextLjava/lang/String;_module,Ledu/harvard/hul/ois/jhove/module/PdfModule;*edu/harvard/hul/ois/jhove/module/PdfModulegetCatalogDict6()Ledu/harvard/hul/ois/jhove/module/pdf/PdfDictionary;getD(Ljava/lang/String;)Ledu/harvard/hul/ois/jhove/module/pdf/PdfObject;resolveIndirectObjectb(Ledu/harvard/hul/ois/jhove/module/pdf/PdfObject;)Ledu/harvard/hul/ois/jhove/module/pdf/PdfObject;isTrue_rafLjava/io/RandomAccessFile;_parser-Ledu/harvard/hul/ois/jhove/module/pdf/Parser;v(Ledu/harvard/hul/ois/jhove/module/PdfModule;Ljava/io/RandomAccessFile;Ledu/harvard/hul/ois/jhove/module/pdf/Parser;)V isPresentisValid1 *+*a*L*+ M,,  N-  Y***: L\1\2X\&$B jhove/classes/edu/harvard/hul/ois/jhove/module/pdf/AProfileLevelA.class0000644000707400001440000000120111510702105025256 0ustar garyusers2     _aProfile/Ledu/harvard/hul/ois/jhove/module/pdf/AProfile;/(Ledu/harvard/hul/ois/jhove/module/PdfModule;)VCodesatisfiesThisProfile()Z setAProfile2(Ledu/harvard/hul/ois/jhove/module/pdf/AProfile;)V ISO PDF/A-1, Level A    3edu/harvard/hul/ois/jhove/module/pdf/AProfileLevelA/edu/harvard/hul/ois/jhove/module/pdf/PdfProfile _profileTextLjava/lang/String;-edu/harvard/hul/ois/jhove/module/pdf/AProfilesatisfiesLevelA!    *+*  * *+jhove/classes/edu/harvard/hul/ois/jhove/module/pdf/ArrayEnd.class0000644000707400001440000000027211510702105024200 0ustar garyusers2  ()VCode -edu/harvard/hul/ois/jhove/module/pdf/ArrayEnd*edu/harvard/hul/ois/jhove/module/pdf/Token!*jhove/classes/edu/harvard/hul/ois/jhove/module/pdf/ArrayStart.class0000644000707400001440000000027411510702105024571 0ustar garyusers2  ()VCode /edu/harvard/hul/ois/jhove/module/pdf/ArrayStart*edu/harvard/hul/ois/jhove/module/pdf/Token!*jhove/classes/edu/harvard/hul/ois/jhove/module/pdf/Ascii85FilterStream.class0000644000707400001440000000031211510702105026215 0ustar garyusers2  (Ljava/io/InputStream;)VCode 8edu/harvard/hul/ois/jhove/module/pdf/Ascii85FilterStreamjava/io/FilterInputStream!*+jhove/classes/edu/harvard/hul/ois/jhove/module/pdf/AsciiHexFilterStream.class0000644000707400001440000000031311510702105026506 0ustar garyusers2  (Ljava/io/InputStream;)VCode 9edu/harvard/hul/ois/jhove/module/pdf/AsciiHexFilterStreamjava/io/FilterInputStream!*+jhove/classes/edu/harvard/hul/ois/jhove/module/pdf/StringValuedToken.class0000644000707400001440000000075611510702105026112 0ustar garyusers2   _valueLjava/lang/String; _rawBytesLjava/util/Vector;()VCodegetValue()Ljava/lang/String; getRawBytes()Ljava/util/Vector;setValue(Ljava/lang/String;)V   6edu/harvard/hul/ois/jhove/module/pdf/StringValuedToken*edu/harvard/hul/ois/jhove/module/pdf/Token!   *  * * *+jhove/classes/edu/harvard/hul/ois/jhove/module/pdf/CrossRefStream.class0000644000707400001440000000656611510702105025411 0ustar garyusers2 )Z ([ \] (^ (_` abc de fgh i (jkl m (n opq or (st (u \v (wx \y z{ z| (} (~ ( z ( ( (_xstrm0Ledu/harvard/hul/ois/jhove/module/pdf/PdfStream;_dict4Ledu/harvard/hul/ois/jhove/module/pdf/PdfDictionary;_sizeI_index[I _fieldSizes _freeCount_filters.[Ledu/harvard/hul/ois/jhove/module/pdf/Filter; _entriesRead_bytesPerEntry _prevXrefJ_objType_objNum _objField1 _objField23(Ledu/harvard/hul/ois/jhove/module/pdf/PdfStream;)VCodeisValid()Z StackMapTablexinitRead(Ljava/io/RandomAccessFile;)V ExceptionsreadNextObject getObjNum()IisObjCompressed getFreeCount getNumObjects getOffsetgetContentStreamObjNum getPrevXref()JgetContentStreamIndex > *+ ,- 3/Type 4edu/harvard/hul/ois/jhove/module/pdf/PdfSimpleObject XRef Size Q ./Index-edu/harvard/hul/ois/jhove/module/pdf/PdfArray 01 W Q 21Prev 89 45java/lang/Exception  IJ 6/ 7/ :/ Q </ =/ ;/3edu/harvard/hul/ois/jhove/module/pdf/CrossRefStreamjava/lang/Object.edu/harvard/hul/ois/jhove/module/pdf/PdfObjectjava/lang/Stringjava/util/Vector+edu/harvard/hul/ois/jhove/module/pdf/Streamjava/io/IOException1edu/harvard/hul/ois/jhove/module/pdf/PdfException()V.edu/harvard/hul/ois/jhove/module/pdf/PdfStreamgetDict6()Ledu/harvard/hul/ois/jhove/module/pdf/PdfDictionary;2edu/harvard/hul/ois/jhove/module/pdf/PdfDictionarygetD(Ljava/lang/String;)Ledu/harvard/hul/ois/jhove/module/pdf/PdfObject;getStringValue()Ljava/lang/String;equals(Ljava/lang/Object;)Z getIntValue getContent()Ljava/util/Vector;(I)Ljava/lang/Object;size getFilters0()[Ledu/harvard/hul/ois/jhove/module/pdf/Filter; getStream/()Ledu/harvard/hul/ois/jhove/module/pdf/Stream; setFilters1([Ledu/harvard/hul/ois/jhove/module/pdf/Filter;)Vread!()*+,-./01213/456/7/89:/;/</=/ >?@#**+*+*AB@ @*LM++ M , ,* N-*- *:C:* :* O:* O* YOY*O*:D:6* 6!: * O*:*  ***L%=&+=,L=M<=CO &DEDRD. FDEDDDG$"D FHIJ@aC*M,*,+ *!*">**Y"*.`"C $KLMNOB@6*M*.<*Y!Z`!*.1*#>*,$6**#h`#*#*.<*%>%,$6**%h`%*.<*&>%,$6**&h`&*#**.*!`d'*Y`C7 KFK   LMPQ@*'RB@%*#C @SQ@*TQ@*.*.`UQ@*%VQ@*%WX@*YQ@*&jhove/classes/edu/harvard/hul/ois/jhove/module/pdf/Destination.class0000644000707400001440000000362511510702105024761 0ustar garyusers2V 01 2 34 5 678 9:; <= >?@ ABC A DEF _indirectZ _indirectDest6Ledu/harvard/hul/ois/jhove/module/pdf/PdfSimpleObject; _pageDest4Ledu/harvard/hul/ois/jhove/module/pdf/PdfDictionary;`(Ledu/harvard/hul/ois/jhove/module/pdf/PdfObject;Ledu/harvard/hul/ois/jhove/module/PdfModule;Z)VCode StackMapTableE8G? ExceptionsH isIndirect()ZgetIndirectDest8()Ledu/harvard/hul/ois/jhove/module/pdf/PdfSimpleObject; getPageDest6()Ledu/harvard/hul/ois/jhove/module/pdf/PdfDictionary;getPageDestObjNumber()II J4edu/harvard/hul/ois/jhove/module/pdf/PdfSimpleObject  -edu/harvard/hul/ois/jhove/module/pdf/PdfArray KLM NO.edu/harvard/hul/ois/jhove/module/pdf/PdfObjectG PQ2edu/harvard/hul/ois/jhove/module/pdf/PdfDictionary D RSjava/lang/Exception T8edu/harvard/hul/ois/jhove/module/pdf/PdfInvalidExceptionInvalid destination object U.0edu/harvard/hul/ois/jhove/module/pdf/Destinationjava/lang/Object*edu/harvard/hul/ois/jhove/module/PdfModule1edu/harvard/hul/ois/jhove/module/pdf/PdfExceptionjava/lang/NullPointerException()V getContent()Ljava/util/Vector;java/util/Vector elementAt(I)Ljava/lang/Object;resolveIndirectObjectb(Ledu/harvard/hul/ois/jhove/module/pdf/PdfObject;)Ledu/harvard/hul/ois/jhove/module/pdf/PdfObject;getD(Ljava/lang/String;)Ledu/harvard/hul/ois/jhove/module/pdf/PdfObject;(Ljava/lang/String;)V getObjNumber1*+**+u+(*+:*, I;+ 4+  :*:*, Y:Y !"#+; B$ %&'(*)**+,* -.* %/jhove/classes/edu/harvard/hul/ois/jhove/module/pdf/DictionaryEnd.class0000644000707400001440000000027711510702105025234 0ustar garyusers2  ()VCode 2edu/harvard/hul/ois/jhove/module/pdf/DictionaryEnd*edu/harvard/hul/ois/jhove/module/pdf/Token!*jhove/classes/edu/harvard/hul/ois/jhove/module/pdf/DictionaryStart.class0000644000707400001440000000030111510702105025607 0ustar garyusers2  ()VCode 4edu/harvard/hul/ois/jhove/module/pdf/DictionaryStart*edu/harvard/hul/ois/jhove/module/pdf/Token!*jhove/classes/edu/harvard/hul/ois/jhove/module/pdf/FileSpecification.class0000644000707400001440000000237711510702105026063 0ustar garyusers2= % &'( )*+,- . /012 345 _specStringLjava/lang/String; _sourceObject0Ledu/harvard/hul/ois/jhove/module/pdf/PdfObject;3(Ledu/harvard/hul/ois/jhove/module/pdf/PdfObject;)VCode StackMapTable46'*0 Exceptions7 getSpecString()Ljava/lang/String;getSourceObject2()Ledu/harvard/hul/ois/jhove/module/pdf/PdfObject; 8 2edu/harvard/hul/ois/jhove/module/pdf/PdfDictionaryF 9:4edu/harvard/hul/ois/jhove/module/pdf/PdfSimpleObjectUnixDOSMac ;" java/lang/ClassCastException8edu/harvard/hul/ois/jhove/module/pdf/PdfInvalidExceptionInvalid file specification <6edu/harvard/hul/ois/jhove/module/pdf/FileSpecificationjava/lang/Object.edu/harvard/hul/ois/jhove/module/pdf/PdfObject1edu/harvard/hul/ois/jhove/module/pdf/PdfException()VgetD(Ljava/lang/String;)Ledu/harvard/hul/ois/jhove/module/pdf/PdfObject;getStringValue(Ljava/lang/String;)V!y**++K+M,N- ,N- ,N- , N- *- +*+ M Yjm !- B  !"* #$*jhove/classes/edu/harvard/hul/ois/jhove/module/pdf/FileTokenizer.class0000644000707400001440000000266611510702105025256 0ustar garyusers2L 0 1 2 3 4 5 6 78 79: 0 ; < => =?@A_fileBufferPositionOffsetJ _fileBuffer[B FILEBUFSIZEI ConstantValue_fileBufferBytes_fileBufferOffset(Ljava/io/RandomAccessFile;)VCodeinitFileBuffer()V getFilePos()J ExceptionsBreadChar()I StackMapTableseek(J)V backupChar initStream0(Ledu/harvard/hul/ois/jhove/module/pdf/Stream;)VsetStreamOffset " CD   !"  E *+ FGjava/io/EOFException H+ #$I J+ K$2edu/harvard/hul/ois/jhove/module/pdf/FileTokenizer.edu/harvard/hul/ois/jhove/module/pdf/Tokenizerjava/io/IOException_fileLjava/io/RandomAccessFile;java/io/RandomAccessFileread([B)I seekReset+edu/harvard/hul/ois/jhove/module/pdf/Stream setOffset getOffset! ***+***!"  ** #$  ** a%&'( yb* *E*** a@* **** * Y * **Y Z` 3~)*%&*+ \F* )* **a**e * ***)/%&,"  *Y d -.  +*%&/. '+ +*)%&jhove/classes/edu/harvard/hul/ois/jhove/module/pdf/Literal.class0000644000707400001440000001724511510702105024077 0ustar garyusers2 K J  J J J J  J J J J J  J J J  J J J J $ J J   5 5 5 5 J _pdfDocEncodingZrawHexLjava/lang/StringBuffer;bufferhaveHihiIb1_state,Ledu/harvard/hul/ois/jhove/module/pdf/State;_pdfACompliant _parenLevelPDFDOCENCODING[CCR ConstantValue LF BSHT FORMFEED ESCOPEN_PARENTHESIS(CLOSE_PARENTHESIS) BACKSLASH\FEFF()VCode appendHex(I)V StackMapTable ExceptionsprocessLiteral3(Ledu/harvard/hul/ois/jhove/module/pdf/Tokenizer;)J convertHexhexToInt(II)IhexValue(I)IrawByteisPDFDocEncoding()ZsetPDFDocEncoding(Z)VisDate parseDate()Ljava/util/Date;isPDFACompliantreadBackslashSequence4(ZLedu/harvard/hul/ois/jhove/module/pdf/Tokenizer;)IreadUTFLanguageCode3(Ledu/harvard/hul/ois/jhove/module/pdf/Tokenizer;)V rs LMjava/lang/StringBuffer NO PO QM java/util/Vector rvjava/lang/Integer RS XS V UV V YZ V V V :edu/harvard/hul/ois/jhove/module/pdf/PdfMalformedExceptionInvalid character in hex string r  D:    'java/lang/ExceptionGMTjava/lang/StringBuilder +0000     v  v         WM  s ,edu/harvard/hul/ois/jhove/module/pdf/Literal6edu/harvard/hul/ois/jhove/module/pdf/StringValuedToken1edu/harvard/hul/ois/jhove/module/pdf/PdfException.edu/harvard/hul/ois/jhove/module/pdf/Tokenizerjava/io/IOExceptionjava/util/Calendarjava/lang/String _rawBytesLjava/util/Vector;add(Ljava/lang/Object;)Z*edu/harvard/hul/ois/jhove/module/pdf/StateLITERALreadChar()I LITERAL_FEtoString()Ljava/lang/String;setValue(Ljava/lang/String;)Vappend(C)Ljava/lang/StringBuffer; LITERAL_PDFLITERAL_UTF16_1LITERAL_UTF16_2size_valueLjava/lang/String; elementAt(I)Ljava/lang/Object;intValuegetValuetrimlength substring(II)Ljava/lang/String;equalsparseInt(Ljava/lang/String;)IcharAt(I)C-(Ljava/lang/String;)Ljava/lang/StringBuilder;(C)Ljava/lang/StringBuilder;java/text/NumberFormat getInstance()Ljava/text/NumberFormat;setMinimumIntegerDigitssetMaximumIntegerDigitsformat(J)Ljava/lang/String;java/util/TimeZone getTimeZone((Ljava/lang/String;)Ljava/util/TimeZone;*(Ljava/util/TimeZone;)Ljava/util/Calendar;()Ljava/util/Calendar;set (IIIIII)VgetTime readChar1(Z)I backupCharaddLanguageCode!JKLMNOPOQMRSTSUVWMXS YZ[S\]^S\_`S\abS\cdS\efS\ghS\ijS\klS\mnS\opS\qrst1%***Y*Y*uvt\E** Y *"* Y*  W* * *w% xyz{t~=>** Y * 7+6 a7* YW* *)$*YdZ***\;*+6 *y**4Wc( *Y`***4W5***\O*+6****4W*4W***4W*4W*_)*YdZ**\$*+6Q*4W@*4W/*:)**\*+=*>*h`=* *+\*+=*Ww8 |}8|}' $+, 'x~st<YM** Y* 0 W** * <0>* ,* h*` `Wۧ$>*,!* 4W*,"w)"'xy t #h#`xy teJ<09 0d<5AF 7d<!af Wd< $Y%&w  xyt1**' (w t*t*t$ *)w @tS<=>666?666 : **:   +:  ,6 6   ,  7Skj-   `./ 6 g   `.0< 6 O   `.0= 6 7   `.0>  6    `.06 6    `.06 6    `.06 6   16Z+ - 6 + -9   `.06-t6  ` `.2/  6 P+ -E  1'   `.06 - t6   ` `.2/=: ?4:Z5Y67879:b5Y67:9:;:<=5Y67>79:5Y67 >79:?:@: A:  dB CA 3a 3b 3 3 3wM!) |B   B*^t*Dt,E>0R7L0d66:,E607h0d`6,F*Dd([)^\afXhUnLrOtR    ()\w * Lx~tK*YM+E> ,W+,Gw x~stYUYUYUYUYUYUYUYUYUY  UY  UY  UY  UY  UYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUY  UY!!UY""UY##UY$$UY%%UY&&UY''UY((UY))UY**UY++UY,,UY--UY..UY//UY00UY11UY22UY33UY44UY55UY66UY77UY88UY99UY::UY;;UY<>UY??UY@@UYAAUYBBUYCCUYDDUYEEUYFFUYGGUYHHUYIIUYJJUYKKUYLLUYMMUYNNUYOOUYPPUYQQUYRRUYSSUYTTUYUUUYVVUYWWUYXXUYYYUYZZUY[[UY\\UY]]UY^^UY__UY``UYaaUYbbUYccUYddUYeeUYffUYggUYhhUYiiUYjjUYkkUYllUYmmUYnnUYooUYppUYqqUYrrUYssUYttUYuuUYvvUYwwUYxxUYyyUYzzUY{{UY||UY}}UY~~UYUY "UY UY !UY &UY UY UYUY DUY 9UY :UY"UY 0UY UY UY UY UY UY UY!"UYHUYIUYAUYRUY`UYxUY}UY1UYBUYSUYaUY~UYUY UYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUYUjhove/classes/edu/harvard/hul/ois/jhove/module/pdf/Keyword.class0000644000707400001440000000030511510702105024114 0ustar garyusers2  ()VCode ,edu/harvard/hul/ois/jhove/module/pdf/Keyword6edu/harvard/hul/ois/jhove/module/pdf/StringValuedToken!*jhove/classes/edu/harvard/hul/ois/jhove/module/pdf/LinearizedProfile.class0000644000707400001440000000707011510702105026105 0ustar garyusers2 4JK 3L 3M NO 3PQR STU VW XYZ [ \] 3^ \_` ab 3c de df 3ghijk 3lm dnop $q rs dtu dvw xyz{|}~/(Ledu/harvard/hul/ois/jhove/module/PdfModule;)VCodesatisfiesThisProfile()Z StackMapTable`QZ}UWmfindFirstObject2()Ledu/harvard/hul/ois/jhove/module/pdf/PdfObject; verifyXRef(J)ZvalidateHintStream7(Ledu/harvard/hul/ois/jhove/module/pdf/PdfDictionary;)Z 56Linearized PDF  DE2edu/harvard/hul/ois/jhove/module/pdf/PdfDictionary Linearized L4edu/harvard/hul/ois/jhove/module/pdf/PdfSimpleObject ,edu/harvard/hul/ois/jhove/module/pdf/Numeric H-edu/harvard/hul/ois/jhove/module/pdf/PdfArray  .edu/harvard/hul/ois/jhove/module/pdf/PdfObject  E HIOENT FGjava/lang/Exception ,edu/harvard/hul/ois/jhove/module/pdf/Keywordobj   S AVIC6edu/harvard/hul/ois/jhove/module/pdf/LinearizedProfile/edu/harvard/hul/ois/jhove/module/pdf/PdfProfile*edu/harvard/hul/ois/jhove/module/pdf/Tokenjava/util/Vector _profileTextLjava/lang/String;_rafLjava/io/RandomAccessFile;java/io/RandomAccessFilelength()JgetD(Ljava/lang/String;)Ledu/harvard/hul/ois/jhove/module/pdf/PdfObject;getToken.()Ledu/harvard/hul/ois/jhove/module/pdf/Token; getLongValue getContent()Ljava/util/Vector;size()I_module,Ledu/harvard/hul/ois/jhove/module/PdfModule; elementAt(I)Ljava/lang/Object;*edu/harvard/hul/ois/jhove/module/PdfModuleresolveIndirectObjectb(Ledu/harvard/hul/ois/jhove/module/pdf/PdfObject;)Ledu/harvard/hul/ois/jhove/module/pdf/PdfObject;_parser-Ledu/harvard/hul/ois/jhove/module/pdf/Parser;+edu/harvard/hul/ois/jhove/module/pdf/Parserseek(J)V readObjectgetNextgetValue()Ljava/lang/String;java/lang/Stringequals(Ljava/lang/Object;)Z getOffsetQ(Ljava/lang/Class;Ljava/lang/String;)Ledu/harvard/hul/ois/jhove/module/pdf/Token; getIntValue134567 *+*897*@*N--: F : 0 :  7 ::6 6* :  :  7 ` :  :  7   a* *: *W*W*:*Y :  : :7   :   :  :  7*N [ \` ae fj k  0 1> ?I Jb c   :;E<;=,>?X @;<>?AB2; @;<>?A%ABA'@@CDE7X*!*#L+$,%+$&'*M*(),*()L?U @AU BQU RUU : 5=;BCFG7T4** +,W* +,W*$+,WN01 :qCHI7v+- M,,.>+ M,,.>+ M,,.>+/ M,,.>+ M,,.>+0 M,,.>+1 M,,.>+ M,,.>+2 M,,.>M   3 4L Me f~  :$ A @<Cjhove/classes/edu/harvard/hul/ois/jhove/module/pdf/Name.class0000644000707400001440000000057411510702105023360 0ustar garyusers2   ()VCodeisPdfACompliant()Z StackMapTable   )edu/harvard/hul/ois/jhove/module/pdf/Name6edu/harvard/hul/ois/jhove/module/pdf/StringValuedToken_valueLjava/lang/String;java/lang/StringgetBytes()[B!* ** @jhove/classes/edu/harvard/hul/ois/jhove/module/pdf/PdfFlateInputStream.class0000644000707400001440000000646411510702105026365 0ustar garyusers2 &Y 'Z[ Z &\ &] &^ &_ &` &a &b &c &d &e &fg hij klmn &o &p &q &r &s &t &u &v &w &x yz &{ |}~iis#Ljava/util/zip/InflaterInputStream; decodeParms4Ledu/harvard/hul/ois/jhove/module/pdf/PdfDictionary; predictorIcolumnsbpccolorscolBytesrowLenrowBuf[BrowBuf2 rowBufOffeofZ iisBufOffiisBuf IISBUF_SIZE ConstantValue iisBufLeniisEof(Ljava/io/InputStream;)VCodeL(Ljava/io/InputStream;Ledu/harvard/hul/ois/jhove/module/pdf/PdfDictionary;)V StackMapTable}lread()I Exceptions([B)I([BII)Iskip(J)J processBytesreadRow()V4 readIISByte readIISBytes skipIISBytesreadIIS @C @A!java/util/zip/InflaterInputStream () ,- .- /- 0- *+ :4 >- 9- ?8 78 Predictor 4edu/harvard/hul/ois/jhove/module/pdf/PdfSimpleObject Jjava/lang/ExceptionColumnsBitsPerComponent 1- 2- 34 54 6- UJ RS IN VN WP XJ IM8edu/harvard/hul/ois/jhove/module/pdf/PdfFlateInputStreamjava/io/FilterInputStreamjava/io/InputStream2edu/harvard/hul/ois/jhove/module/pdf/PdfDictionaryjava/io/IOExceptiongetD(Ljava/lang/String;)Ledu/harvard/hul/ois/jhove/module/pdf/PdfObject; getIntValuejava/lang/Mathabs(I)I!&'()*+,-.-/-0-1-2-34546-789-:4;-<=>-?8 @AB*+@CB?*+*Y+**** *, * * * **,Q,N- *-N,N- *-N,N- *-N*O** *h`l*** h*h`l*`******Lbef|D& bEFGBHBHBHSIJBZC*********YZ`3~D KLIMB *++KLINBo** *+******d **d>6+`**YZ`3TD  !KLOPB* KLQJB<RSBK *L***+*** *W*=*'***d> `= **}KN}}}}}}}KNy}2*>**\3**d3`T*>**\3*3`T*>*/*\3**d3~*3~`l`Tϧ*`>***d3~6*3~6**d3~6`d6d!6d!6 d!6   6   6 6 *\3 `TkD^(T"N"3r ET ETKLUJBK5* * **"W** *Y Z` 3~DKLVNB|^* * **"W** * d * * d>6`+* *Y Z` 3TD !KLWPBaJ* * **"W*#* * d* * `@*Y a D KLXJBC**** %<* * *D KLjhove/classes/edu/harvard/hul/ois/jhove/module/pdf/PdfMalformedException.class0000644000707400001440000000106411510702105026712 0ustar garyusers2    (Ljava/lang/String;)VCode(Ljava/lang/String;J)VB(Ljava/lang/String;JLedu/harvard/hul/ois/jhove/module/pdf/Token;)V disparage&(Ledu/harvard/hul/ois/jhove/RepInfo;)V     :edu/harvard/hul/ois/jhove/module/pdf/PdfMalformedException1edu/harvard/hul/ois/jhove/module/pdf/PdfException!edu/harvard/hul/ois/jhove/RepInfo setWellFormed(Z)V! *+  *+    *+   +jhove/classes/edu/harvard/hul/ois/jhove/module/pdf/PdfStrings.class0000644000707400001440000000226611510702105024563 0ustar garyusers2U %012345 $6789:;<=>?@ $ABCDEFGHI $J $KLMNOPQ $RST ALGORITHM[Ljava/lang/String; FONTDESCFLAGSUSERPERMFLAGS3USERPERMFLAGS2ANNOTATIONFLAGS()VCode ,-java/lang/String Undocumented 40 bit keyKey greater than 40 Unpublished &' FixedPitchSerifSymbolicScript NonsymbolicItalicAllCapSmallCap ForceBold ('PrintModifyExtractAdd/modify annotations/formsFill interactive form fieldsExtract for accessibilityAssemblePrint high quality )' *' InvisibleHiddenNoZoomNoRotateNoViewReadOnly +'/edu/harvard/hul/ois/jhove/module/pdf/PdfStringsjava/lang/Object!$%&'(')'*'+',-.*/-.\PYSYSYSYSYSY SY SY SY SY SYSY SY SY  SY  SY  SY  SY  SY SY SYSYSYS Y SY SYSYSYSYSY SY SYSY SY SY S Y SY SYSYSYSYSY SY SY SY  SY  SY  SYSYSYSYSY SY!SY"S#jhove/classes/edu/harvard/hul/ois/jhove/module/pdf/PdfXMPSource.class0000644000707400001440000000243011510702105024750 0ustar garyusers28!"# $%& ' ( ) * + , - ./01_stream0Ledu/harvard/hul/ois/jhove/module/pdf/PdfStream;_rafLjava/io/RandomAccessFile; _encodingLjava/lang/String;M(Ledu/harvard/hul/ois/jhove/module/pdf/PdfStream;Ljava/io/RandomAccessFile;)VCode Exceptions_(Ledu/harvard/hul/ois/jhove/module/pdf/PdfStream;Ljava/io/RandomAccessFile;Ljava/lang/String;)V resetReader()V StackMapTable/java/io/InputStreamReader*edu/harvard/hul/ois/jhove/XMLWrapperStream6edu/harvard/hul/ois/jhove/module/pdf/StreamInputStream XMP1.0 2 3 4   5  67$java/io/UnsupportedEncodingException1edu/harvard/hul/ois/jhove/module/pdf/PdfXMPSource#edu/harvard/hul/ois/jhove/XMPSource`(Ljava/io/InputStream;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V(Ljava/io/InputStream;)V(Ljava/io/Reader;)V*(Ljava/io/InputStream;Ljava/lang/String;)V_readerLjava/io/Reader;18 ,*YYY+, *+ *, 1%*YY+,- *+ *, *- jG* *YY* * !*YY* * * LBE $B jhove/classes/edu/harvard/hul/ois/jhove/module/pdf/RunLengthFilterStream.class0000644000707400001440000000031411510702105026720 0ustar garyusers2  (Ljava/io/InputStream;)VCode :edu/harvard/hul/ois/jhove/module/pdf/RunLengthFilterStreamjava/io/FilterInputStream!*+jhove/classes/edu/harvard/hul/ois/jhove/module/pdf/StdStructTypes.class0000644000707400001440000000235411510702105025462 0ustar garyusers2g -9 ,: ; ,<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^3_`abcd typeNames[Ljava/lang/String;blockLevelNames()VCodeincludes(Ljava/lang/String;)Z StackMapTable isBlockLevel 12 ./ ef 0/java/lang/StringDocumentPartArtSectDiv BlockQuoteCaptionTOCTOCIIndex NonStructPrivatePHH1H2H3H4H5H6LLILblLBodyTableTRTHTDSpanQuoteNote ReferenceBibEntryLinkFigureFormulaForm3edu/harvard/hul/ois/jhove/module/pdf/StdStructTypesjava/lang/Objectequals(Ljava/lang/Object;)Z!,-./0/123* 453< <2*6  753< <2*6 823C7&YSYSYSY SY SY SY SY SYSY SY SY SY SY SYSYSYSYSYSYSYSYSYSYSYSYSY SY!SY"SY#SY$SY%SY &SY!'SY"(SY#)SY$*SY%+S YSYSYSYSYSYSYSYSYSY SY SY SY Sjhove/classes/edu/harvard/hul/ois/jhove/module/pdf/StreamInputStream.class0000644000707400001440000000165011510702105026123 0ustar garyusers2; ! "# $% & ' $( ) *+, *-./_fileLjava/io/RandomAccessFile; _startPosJ_curPos_lengthM(Ledu/harvard/hul/ois/jhove/module/pdf/PdfStream;Ljava/io/RandomAccessFile;)VCode StackMapTable.012,read()I Exceptions 3 0 452 67   87 1 9:java/io/IOException 6edu/harvard/hul/ois/jhove/module/pdf/StreamInputStreamjava/io/InputStream.edu/harvard/hul/ois/jhove/module/pdf/PdfStreamjava/io/RandomAccessFile+edu/harvard/hul/ois/jhove/module/pdf/Stream()V getStream/()Ledu/harvard/hul/ois/jhove/module/pdf/Stream; getOffset()J getLengthseek(J)V! g4**,+N*-***-,* :&.1 1<'**e**Y a* < jhove/classes/edu/harvard/hul/ois/jhove/module/pdf/StreamTokenizer.class0000644000707400001440000000262311510702105025623 0ustar garyusers2G ) * + ,-. / 0 12 13 14 15 678_stream-Ledu/harvard/hul/ois/jhove/module/pdf/Stream; _backupFlagZ _lastCharI NO_STREAMLjava/lang/String; ConstantValueJ(Ljava/io/RandomAccessFile;Ledu/harvard/hul/ois/jhove/module/pdf/Stream;)VCode initStream0(Ledu/harvard/hul/ois/jhove/module/pdf/Stream;)V Exceptions9:readChar()I StackMapTableseek(J)VsetStreamOffset backupChar()V ( ;<  :edu/harvard/hul/ois/jhove/module/pdf/PdfMalformedException-Streams may not be embedded in object streams = > ?" @A BC DE F%4edu/harvard/hul/ois/jhove/module/pdf/StreamTokenizer.edu/harvard/hul/ois/jhove/module/pdf/Tokenizerjava/io/IOException1edu/harvard/hul/ois/jhove/module/pdf/PdfException_fileLjava/io/RandomAccessFile;(Ljava/lang/String;)V+edu/harvard/hul/ois/jhove/module/pdf/Streamread advanceTo(I)ZinitRead(Ljava/io/RandomAccessFile;)V getOffset()J seekReset! **+*,* Y !"6!* **** *#$%B-* ** * W** #! & Y '(*jhove/classes/edu/harvard/hul/ois/jhove/module/pdf/StructureElement.class0000644000707400001440000001247211510702105026012 0ustar garyusers2 W                  " $   K    _tree4Ledu/harvard/hul/ois/jhove/module/pdf/StructureTree;_dict4Ledu/harvard/hul/ois/jhove/module/pdf/PdfDictionary;_module,Ledu/harvard/hul/ois/jhove/module/PdfModule;childrenLjava/util/List; _structTypeLjava/lang/String;_structIsInlineZ _attrIsBlockblockLevelAttrs[Ljava/lang/String;k(Ledu/harvard/hul/ois/jhove/module/pdf/PdfDictionary;Ledu/harvard/hul/ois/jhove/module/pdf/StructureTree;)VCode StackMapTable Exceptions buildSubtree()VcheckAttributescheckAttribute7(Ledu/harvard/hul/ois/jhove/module/pdf/PdfDictionary;)V isStructElem7(Ledu/harvard/hul/ois/jhove/module/pdf/PdfDictionary;)ZattrIsBlockLevelisMarkedContent isObjectRef gr XY Z[ \] `aS  4edu/harvard/hul/ois/jhove/module/pdf/PdfSimpleObject )edu/harvard/hul/ois/jhove/module/pdf/Name  java/io/IOExceptionK8edu/harvard/hul/ois/jhove/module/pdf/PdfInvalidException'Invalid data in document structure tree g ^_2edu/harvard/hul/ois/jhove/module/pdf/PdfDictionary |}5edu/harvard/hul/ois/jhove/module/pdf/StructureElement gh qr urjava/util/ArrayList g } }!Unknown element in structure tree-edu/harvard/hul/ois/jhove/module/pdf/PdfArray java/util/LinkedList .edu/harvard/hul/ois/jhove/module/pdf/PdfObject dcFigure THTDTR  bcAjava/lang/Exception%Invalid structure attribute referenceInvalid structure attribute xy,edu/harvard/hul/ois/jhove/module/pdf/Numeric$Structure attribute has illegal type2Block-level attributes in inline structure elementO PlacementInline  }'Invalid attribute in document structureType StructElem Non-standard structure type nameP3edu/harvard/hul/ois/jhove/module/pdf/PdfIndirectObjStructTreeRoot efMCRMCIDOBJRObjjava/lang/String SpaceBefore SpaceAfter StartIndent EndIndent TextIndent TextAlignBBoxWidthHeight BlockAlign InlineAlignjava/lang/Object2edu/harvard/hul/ois/jhove/module/pdf/StructureTree1edu/harvard/hul/ois/jhove/module/pdf/PdfExceptionjava/util/Vector*edu/harvard/hul/ois/jhove/module/pdf/Token getModule.()Ledu/harvard/hul/ois/jhove/module/PdfModule;getD(Ljava/lang/String;)Ledu/harvard/hul/ois/jhove/module/pdf/PdfObject;*edu/harvard/hul/ois/jhove/module/PdfModuleresolveIndirectObjectb(Ledu/harvard/hul/ois/jhove/module/pdf/PdfObject;)Ledu/harvard/hul/ois/jhove/module/pdf/PdfObject;getToken.()Ledu/harvard/hul/ois/jhove/module/pdf/Token;getValue()Ljava/lang/String;dereferenceStructType&(Ljava/lang/String;)Ljava/lang/String;3edu/harvard/hul/ois/jhove/module/pdf/StdStructTypesincludes(Ljava/lang/String;)Z(Ljava/lang/String;)V(I)Vjava/util/Listadd(Ljava/lang/Object;)Z getContent()Ljava/util/Vector;size()I elementAt(I)Ljava/lang/Object;isEmpty()Zequals isBlockLevelgetStringValue!WXYZ[\]^_`abcdcef ghiZ**,*+*,**+ N- : :*: *NUXjUklmBnopqri!L** LMY*+ +\+M*,2Y,*N--*Y*-W*,*, Y!+"+"#M*$Y%>,&`,'(:* ::8:*(Y*:*W*)*jF ksn Bltkstsn<opuri(****+,5*-,)*.,*/,*01**2 MNY4,,","#N6-&l*-'( ::Y5*61  7::Y5Y5,*,6 Y8*1** Y9HY\33jCDvkvVw st]n sWw  opxyiP+: M, N+; :<=,*1*+>**MY?AD3j4z{z Bw op|}iD +@M,A, =,*+ N- - : 6 :*: YB+C:D* :@ :   =: E ,A ,M3233E3F333j:ss~.s;lzklwop}i< =F+F2j }i|4+@ M,=G,*+H N-M13.13/013jzzklw}iy1+@ M,=I,*+J N-M.3+.3,-.3jzsklwriQE KYLSYMSYNSYOSYPSYQSYRSYSSYTSY USY VSFjhove/classes/edu/harvard/hul/ois/jhove/module/pdf/StructureTree.class0000644000707400001440000000704311510702105025316 0ustar garyusers2 /\ .] .^ ._ `a .bc d `efg .h .i .j .k .l .mn .op qr stuv wxyz {| } ~   $  )w_module,Ledu/harvard/hul/ois/jhove/module/PdfModule;_rafLjava/io/RandomAccessFile;_parser-Ledu/harvard/hul/ois/jhove/module/pdf/Parser; _rootDict4Ledu/harvard/hul/ois/jhove/module/pdf/PdfDictionary;_roleMapchildrenLjava/util/List;_presentZ_validv(Ledu/harvard/hul/ois/jhove/module/PdfModule;Ljava/io/RandomAccessFile;Ledu/harvard/hul/ois/jhove/module/pdf/Parser;)VCode StackMapTablefgn Exceptions isPresent()ZisValid getModule.()Ledu/harvard/hul/ois/jhove/module/PdfModule;dereferenceStructType&(Ljava/lang/String;)Ljava/lang/String;p validateRoot()Vx getChildren()Ljava/util/List; getRoleMap >T 01 23 45 67StructTreeRoot 2edu/harvard/hul/ois/jhove/module/pdf/PdfDictionaryjava/io/IOException ;< =< ST [T VW 9:java/lang/Exception 874edu/harvard/hul/ois/jhove/module/pdf/PdfSimpleObject Type 8edu/harvard/hul/ois/jhove/module/pdf/PdfInvalidExceptionInvalid document structure root >1edu/harvard/hul/ois/jhove/module/pdf/PdfExceptionKjava/util/ArrayList >5edu/harvard/hul/ois/jhove/module/pdf/StructureElement > T T -edu/harvard/hul/ois/jhove/module/pdf/PdfArray  .edu/harvard/hul/ois/jhove/module/pdf/PdfObject:edu/harvard/hul/ois/jhove/module/pdf/PdfMalformedException'Invalid data in document structure rootRoleMapInvalid RoleMap2edu/harvard/hul/ois/jhove/module/pdf/StructureTreejava/lang/Object*edu/harvard/hul/ois/jhove/module/PdfModulejava/io/RandomAccessFile+edu/harvard/hul/ois/jhove/module/pdf/Parserjava/lang/Stringjava/util/Listjava/util/VectorgetCatalogDict6()Ledu/harvard/hul/ois/jhove/module/pdf/PdfDictionary;getD(Ljava/lang/String;)Ledu/harvard/hul/ois/jhove/module/pdf/PdfObject;resolveIndirectObjectb(Ledu/harvard/hul/ois/jhove/module/pdf/PdfObject;)Ledu/harvard/hul/ois/jhove/module/pdf/PdfObject;getStringValue()Ljava/lang/String;equals(Ljava/lang/Object;)Z(Ljava/lang/String;)V(I)Vk(Ledu/harvard/hul/ois/jhove/module/pdf/PdfDictionary;Ledu/harvard/hul/ois/jhove/module/pdf/StructureTree;)V buildSubtreecheckAttributesadd getContent()Ljava/util/Vector;size()I elementAt(I)Ljava/lang/Object;!./01234567879:;<=<>?@o**+*,*-+:*** :** * * ***** :* 36 IgJdgA46BCDEFGBCDEHIJK@* LK@* MN@*OP@z6*+=2&*+N-+-LN"+#(+A" QBRHST@c5*M, YM,MY#&#)A #BUBH IVW@%MN** N:-- /YMY- * :!",#W,-$r-$%:Y&M6&M*'( ::)Y*+Y * :!",#W,Y* } A0 BXYG2Z_G Y'I[T@G&***, MY-AZH Ijhove/classes/edu/harvard/hul/ois/jhove/module/pdf/XProfileBase.class0000644000707400001440000001217711510702105025025 0ustar garyusers2 Oz N{ N| N} ~     :  ~ N ~  N N  N N  ~ ~ NPDFX1IPDFX1APDFX2PDFX3_xType_bleedBoxPresentZ0(Ledu/harvard/hul/ois/jhove/module/PdfModule;I)VCode infoDictOK(Ljava/lang/String;)Z StackMapTableisBleedBoxPresent()ZoutputIntentsOK2(Ledu/harvard/hul/ois/jhove/module/pdf/PdfArray;)Z trailerDictOK extGStateOK7(Ledu/harvard/hul/ois/jhove/module/pdf/PdfDictionary;)Z xObjectOK imageObjectOK formObjectOKbboxOK(Z)ZcheckPrefsAgainstBleedBoxfilterOK5(Ledu/harvard/hul/ois/jhove/module/pdf/PdfObject;ZZ)Z()V X VW UQ  Trapped 4edu/harvard/hul/ois/jhove/module/pdf/PdfSimpleObjectGTS_PDFXVersion CreationDateModDateTitle True False \java/lang/Exception  .edu/harvard/hul/ois/jhove/module/pdf/PdfObject 2edu/harvard/hul/ois/jhove/module/pdf/PdfDictionarySGTS_PDFXOutputConditionIdentifier PQ RegistryNameDestOutputProfile.edu/harvard/hul/ois/jhove/module/pdf/PdfStream IDTRTR2HTPHT HalftoneType  HalftoneName RQ SQSMaskNoneBMNormal CompatibleCA caSubtypePSImage nkForm ok Alternates-edu/harvard/hul/ois/jhove/module/pdf/PdfArrayDefaultForPrinting cOPI  y  ViewAreaViewClip PrintAreaMediaBoxBleedBox LZWDecode JBIG2Decode TQ1edu/harvard/hul/ois/jhove/module/pdf/XProfileBase/edu/harvard/hul/ois/jhove/module/pdf/PdfProfilejava/lang/Stringjava/util/Vector1edu/harvard/hul/ois/jhove/module/pdf/PageTreeNode/edu/harvard/hul/ois/jhove/module/pdf/PageObject7[Ledu/harvard/hul/ois/jhove/module/pdf/PdfSimpleObject;/(Ledu/harvard/hul/ois/jhove/module/PdfModule;)V_module,Ledu/harvard/hul/ois/jhove/module/PdfModule;*edu/harvard/hul/ois/jhove/module/PdfModule getDocInfo6()Ledu/harvard/hul/ois/jhove/module/pdf/PdfDictionary;getD(Ljava/lang/String;)Ledu/harvard/hul/ois/jhove/module/pdf/PdfObject;getStringValue()Ljava/lang/String;equals(Ljava/lang/Object;)Z startsWith getContent()Ljava/util/Vector;size()I elementAt(I)Ljava/lang/Object;resolveIndirectObjectb(Ledu/harvard/hul/ois/jhove/module/pdf/PdfObject;)Ledu/harvard/hul/ois/jhove/module/pdf/PdfObject;getTrailerDict getIntValuegetDoubleValue()DisTruegetDocumentTree5()Ledu/harvard/hul/ois/jhove/module/pdf/PageTreeNode; startWalknextPageObject3()Ledu/harvard/hul/ois/jhove/module/pdf/PageObject; getMediaBox1()Ledu/harvard/hul/ois/jhove/module/pdf/PdfArray; getTrimBox getArtBox getBleedBoxgetViewPrefDict!NO PQ RQ SQ TQUQVW XYZ*+**[\Zy*M,N, :, , , -- : :+NBtC^t_pt]A^__`BabcZ*deZ- +M>6,*,:*:m :\*:*5*: *:   ]:mn]D fc ghf^_`_;ghf@@aicZ6* L++!] ^ jkZ ++"M+#N+$:, -+%:+:&:'6 +(*) **++:, +-:  :./+0:19  +2:19  M*+bcmn ]< "lll7l _,__g^BamkZR++3M,9, N4-5- *+67- *+8M#M$6M7IM]_`BankZ+9:M,,N6-*-:;:<**+=*) **"++:, MAB\]] hf)BaokZpqZd*>M,?,@N-G-A:-B:-C:  -D*N(_)@_AL_M\_]$ r shh BatcZy**EL+M,+FS,+GS,+HS>-,2!,2 :IJԧMjtkqt] ^*u(BavwZz+++ :KT+::6<: :KL:t!t"Zt[jtkqt]0 f,gl`f_BaxyZ)*Mjhove/classes/edu/harvard/hul/ois/jhove/module/pdf/X1aProfile.class0000644000707400001440000000213111510702105024441 0ustar garyusers28      ! " # $ % &'( _x1Profile0Ledu/harvard/hul/ois/jhove/module/pdf/X1Profile;/(Ledu/harvard/hul/ois/jhove/module/PdfModule;)VCode setX1Profile3(Ledu/harvard/hul/ois/jhove/module/pdf/X1Profile;)VsatisfiesThisProfile()Z StackMapTable )* + ISO PDF/X-1a ,-  ..edu/harvard/hul/ois/jhove/module/pdf/X1Profile /0  12 34 56 7/edu/harvard/hul/ois/jhove/module/pdf/X1aProfile1edu/harvard/hul/ois/jhove/module/pdf/XProfileBasePDFX1AI0(Ledu/harvard/hul/ois/jhove/module/PdfModule;I)V _profileTextLjava/lang/String; isAlreadyOK_module,Ledu/harvard/hul/ois/jhove/module/PdfModule;_rafLjava/io/RandomAccessFile;_parser-Ledu/harvard/hul/ois/jhove/module/pdf/Parser;satisfiesProfileJ(Ljava/io/RandomAccessFile;Ledu/harvard/hul/ois/jhove/module/pdf/Parser;)ZisX1aCompliant1*+**+T>**(*Y* ** * * "jhove/classes/edu/harvard/hul/ois/jhove/module/pdf/X2Profile.class0000644000707400001440000000701411510702105024306 0ustar garyusers2 6J 6KL 5M 5N OPQ R OST 5U 5V 5W 5X 5YZ 5[\ O] ^_ ^` abcd 5ef 5gh i jk lm lno !pqr 5s t u vw vxyz{| ,} ~/(Ledu/harvard/hul/ois/jhove/module/PdfModule;)VCodesatisfiesThisProfile()Z StackMapTabledT\ resourcesOKo formObjectOK7(Ledu/harvard/hul/ois/jhove/module/pdf/PdfDictionary;)Z 7 ISO PDF/X-2   OutputIntents -edu/harvard/hul/ois/jhove/module/pdf/PdfArray ; @; ;PDF/X-2: java/lang/Exception    ExtGState2edu/harvard/hul/ois/jhove/module/pdf/PdfDictionary IXObject I/edu/harvard/hul/ois/jhove/module/pdf/PageObject   ; .edu/harvard/hul/ois/jhove/module/pdf/PdfStream  ResourcesFilter  .edu/harvard/hul/ois/jhove/module/pdf/PdfObjectSubtype4edu/harvard/hul/ois/jhove/module/pdf/PdfSimpleObjectTrapNet   FontFauxingOPIRefPageMetadata.edu/harvard/hul/ois/jhove/module/pdf/X2Profile1edu/harvard/hul/ois/jhove/module/pdf/XProfileBase1edu/harvard/hul/ois/jhove/module/pdf/PageTreeNode,edu/harvard/hul/ois/jhove/module/pdf/DocNodejava/util/Listjava/util/Iteratorjava/util/VectorPDFX2I0(Ledu/harvard/hul/ois/jhove/module/PdfModule;I)V _profileTextLjava/lang/String;_module,Ledu/harvard/hul/ois/jhove/module/PdfModule;*edu/harvard/hul/ois/jhove/module/PdfModulegetCatalogDict6()Ledu/harvard/hul/ois/jhove/module/pdf/PdfDictionary;getD(Ljava/lang/String;)Ledu/harvard/hul/ois/jhove/module/pdf/PdfObject;resolveIndirectObjectb(Ledu/harvard/hul/ois/jhove/module/pdf/PdfObject;)Ledu/harvard/hul/ois/jhove/module/pdf/PdfObject;outputIntentsOK2(Ledu/harvard/hul/ois/jhove/module/pdf/PdfArray;)ZbboxOK(Z)ZcheckPrefsAgainstBleedBox trailerDictOK infoDictOK(Ljava/lang/String;)ZgetDocumentTree5()Ledu/harvard/hul/ois/jhove/module/pdf/PageTreeNode; startWalk()V nextDocNode0()Ledu/harvard/hul/ois/jhove/module/pdf/DocNode; getResources extGStateOK xObjectsOKgetContentStreams()Ljava/util/List; listIterator()Ljava/util/ListIterator;hasNextnext()Ljava/lang/Object;getDictfilterOK5(Ledu/harvard/hul/ois/jhove/module/pdf/PdfObject;ZZ)ZgetAnnotations1()Ledu/harvard/hul/ois/jhove/module/pdf/PdfArray; getContent()Ljava/util/Vector;size()I elementAt(I)Ljava/lang/Object;getStringValue()Ljava/lang/String;java/lang/Stringequals(Ljava/lang/Object;)Z156789*+*:;9a*L*+ M,*, * * ***L\(\)2\3;\<D\EM\NX\< =>  B?@;9@ *L++M,c,N-=*- :**- :*,,::| !:":#:?* : * * : * $: * %,&:n':6(Z*)* :+,: - ./%0 :   ':  (M={>Z{[{{{n{ox{<v A B%==CDK EAB=CDF===>GZEABB?HI9C,+1+2+3+4<  jhove/classes/edu/harvard/hul/ois/jhove/module/pdf/X3Profile.class0000644000707400001440000000711011510702105024304 0ustar garyusers2 6K 6LM 5N 5O PQR S PTUV 5W 5X 5Y 5Z P[ 5\ P]^ P_ `a `b cdef 5gh 5ij k lm no npq "rst 5uv w x yz y{|}~ .  6/(Ledu/harvard/hul/ois/jhove/module/PdfModule;)VCodesatisfiesThisProfile()Z StackMapTablefU^ resourcesOKq| xObjectOK7(Ledu/harvard/hul/ois/jhove/module/pdf/PdfDictionary;)Z 7 ISO PDF/X-3   OutputIntents -edu/harvard/hul/ois/jhove/module/pdf/PdfArrayPDF/X-3 @; ; ;java/lang/Exception    ExtGState2edu/harvard/hul/ois/jhove/module/pdf/PdfDictionary JXObject J/edu/harvard/hul/ois/jhove/module/pdf/PageObject   ; .edu/harvard/hul/ois/jhove/module/pdf/PdfStream  ResourcesFilter F  .edu/harvard/hul/ois/jhove/module/pdf/PdfObjectSubtype4edu/harvard/hul/ois/jhove/module/pdf/PdfSimpleObjectTrapNet   FontFauxing IJOPI.edu/harvard/hul/ois/jhove/module/pdf/X3Profile1edu/harvard/hul/ois/jhove/module/pdf/XProfileBase1edu/harvard/hul/ois/jhove/module/pdf/PageTreeNode,edu/harvard/hul/ois/jhove/module/pdf/DocNodejava/util/Listjava/util/Iteratorjava/util/VectorPDFX3I0(Ledu/harvard/hul/ois/jhove/module/PdfModule;I)V _profileTextLjava/lang/String;_module,Ledu/harvard/hul/ois/jhove/module/PdfModule;*edu/harvard/hul/ois/jhove/module/PdfModulegetCatalogDict6()Ledu/harvard/hul/ois/jhove/module/pdf/PdfDictionary;getD(Ljava/lang/String;)Ledu/harvard/hul/ois/jhove/module/pdf/PdfObject;resolveIndirectObjectb(Ledu/harvard/hul/ois/jhove/module/pdf/PdfObject;)Ledu/harvard/hul/ois/jhove/module/pdf/PdfObject; infoDictOK(Ljava/lang/String;)ZoutputIntentsOK2(Ledu/harvard/hul/ois/jhove/module/pdf/PdfArray;)Z trailerDictOKgetEncryptionDictbboxOK(Z)ZgetActionsExistgetDocumentTree5()Ledu/harvard/hul/ois/jhove/module/pdf/PageTreeNode; startWalk()V nextDocNode0()Ledu/harvard/hul/ois/jhove/module/pdf/DocNode; getResources extGStateOK xObjectsOKgetContentStreams()Ljava/util/List; listIterator()Ljava/util/ListIterator;hasNextnext()Ljava/lang/Object;getDictfilterOK5(Ledu/harvard/hul/ois/jhove/module/pdf/PdfObject;ZZ)ZgetAnnotations1()Ledu/harvard/hul/ois/jhove/module/pdf/PdfArray; getContent()Ljava/util/Vector;size()I elementAt(I)Ljava/lang/Object;getStringValue()Ljava/lang/String;java/lang/Stringequals(Ljava/lang/Object;)Z156789*+*:;9p*L*+ M,* *, *****Lk)k*3k4<k=EkFQkR[k\gk< =>  B?@;9p *L++M,o,N-=*- :**- :*,",:: !":#:$:?* : * * : * %: * &'t,(:n):6*Z*+, :-.: / 01%2 :   ):  *M=>Z[z{< A B%==CDK EAB=CDF===G EAB=CD>HZEABB?IJ94+*+3+4< jhove/classes/edu/harvard/hul/ois/jhove/module/pdf/PdfIndirectObj.class0000644000707400001440000000131311510702106025317 0ustar garyusers2*        ! _objectMapLjava/util/Map; _cachedObject0Ledu/harvard/hul/ois/jhove/module/pdf/PdfObject;(IILjava/util/Map;)VCode getObject2()Ledu/harvard/hul/ois/jhove/module/pdf/PdfObject; StackMapTable "   #$ %$java/lang/Long &' ().edu/harvard/hul/ois/jhove/module/pdf/PdfObject3edu/harvard/hul/ois/jhove/module/pdf/PdfIndirectObj(II)V _objNumberI _genNumber(J)V java/util/Mapget&(Ljava/lang/Object;)Ljava/lang/Object;!  **-*Q<*** y*a@**Y  * jhove/classes/edu/harvard/hul/ois/jhove/module/pdf/PageTreeNode.class0000644000707400001440000000711311510702106024777 0ustar garyusers2 /U VW X Y Z[\ ] ^_ `a bcdef g hij k U lm n op oq rst uvw U xyz{| %] l} ~   / / / _descendantsLjava/util/List;_descendantsIterLjava/util/ListIterator;_currentDescendant.Ledu/harvard/hul/ois/jhove/module/pdf/DocNode; _walkFirstZ(Ledu/harvard/hul/ois/jhove/module/PdfModule;Ledu/harvard/hul/ois/jhove/module/pdf/PageTreeNode;Ledu/harvard/hul/ois/jhove/module/pdf/PdfDictionary;)VCode buildSubtree(ZI)V Exceptions(ZIII)V StackMapTablecwateyz startWalk()VnextPageObject3()Ledu/harvard/hul/ois/jhove/module/pdf/PageObject;j nextDocNode0()Ledu/harvard/hul/ois/jhove/module/pdf/DocNode; ;< :java/util/ArrayList ; 34 >A:edu/harvard/hul/ois/jhove/module/pdf/PdfMalformedException?1edu/harvard/hul/ois/jhove/module/pdf/PdfExceptionjava/lang/Exception8edu/harvard/hul/ois/jhove/module/pdf/PdfInvalidExceptionInvalid page tree node 56 78 9: : ,edu/harvard/hul/ois/jhove/module/pdf/DocNode MN OP RS.edu/harvard/hul/ois/jhove/module/pdf/PdfObjectjava/util/Vectorjava/lang/String_pageObjectFlag(I)V(Ljava/lang/String;)V_dict4Ledu/harvard/hul/ois/jhove/module/pdf/PdfDictionary;getD(Ljava/lang/String;)Ledu/harvard/hul/ois/jhove/module/pdf/PdfObject; getObject2()Ledu/harvard/hul/ois/jhove/module/pdf/PdfObject;getStringValue()Ljava/lang/String;equals(Ljava/lang/Object;)Z_module,Ledu/harvard/hul/ois/jhove/module/PdfModule;java/util/Listadd getContent()Ljava/util/Vector;size()I elementAt(I)Ljava/lang/Object;*edu/harvard/hul/ois/jhove/module/PdfModuleresolveIndirectObjectb(Ledu/harvard/hul/ois/jhove/module/pdf/PdfObject;)Ledu/harvard/hul/ois/jhove/module/pdf/PdfObject; loadContent/(Ledu/harvard/hul/ois/jhove/module/PdfModule;)V listIterator()Ljava/util/ListIterator; _walkFinishedjava/util/ListIteratorhasNext()Znext()Ljava/lang/Object;! /3456789:;<=%*+,-**Y>?= *@#>A=a Y :*  :  : :UP*  ::-Y*** :*Y*W:*Y6 : * :   :  :  +Y** :  ** W2 ( Y** !:  d"* We::%Y&'LO#LT$B` (CDREh FCDEGHIJ. FCDEBKDL @#MN=)**()***+*,OP=z*,**-*)- *,**)./***0**1L+5*)-"**)./***0**1*,+B  6QRS=*,*+ *+***-*)- *,**)./***0**2L+5*)-"**)./***0**2*,+B  6Tjhove/classes/edu/harvard/hul/ois/jhove/module/pdf/AProfile.class0000644000707400001440000002751611510702106024207 0ustar garyusers28       !"#$%&'() *+ ,- . / 0 1 23 45 6 7 8 29 : ; < = >? 2@A EBC 2DEFG ;H <I <JK 2LM NOP QRS T 2U VW XY XZ[ N\ ]^ _`ab ;cd efghijklmnopq 2rstuv hw xyz{|}~ x  ; 2        B   ; E^  2 2          2        _taggedProfile4Ledu/harvard/hul/ois/jhove/module/pdf/TaggedProfile;_levelAZ hasDevRGB hasDevCMYK hasUncalCS annotTypes[Ljava/lang/String;nonTextAnnotTypesexcludedActionsexcludedFilters/(Ledu/harvard/hul/ois/jhove/module/PdfModule;)VCodesetTaggedProfile7(Ledu/harvard/hul/ois/jhove/module/pdf/TaggedProfile;)VsatisfiesThisProfile()Z StackMapTable?satisfiesLevelA trailerDictOKP catalogOKFMfontsOK[fontOK7(Ledu/harvard/hul/ois/jhove/module/pdf/PdfDictionary;)Z z type0FontsOKvttFontEncodingOKformOKfieldOK resourcesOK colorSpaceOKcheckUncalIntent outlinesOKcheckOutlineItemactionOK extGStateOK xObjectOK formObjectOK imageObjectOKvalidIntentString(Ljava/lang/String;)Z metadataOK3(Ledu/harvard/hul/ois/jhove/module/pdf/PdfStream;)Z java/lang/StringTextLinkFreeTextLineSquareCirclePolygonPolyline Highlight UnderlineSquiggly StrikeOutStampCaretInkPopupWidgetScreen PrinterMarkTrapNet LaunchSoundMovie ResetForm ImportData JavaScript set-stateno-op  LZWDecode ISO PDF/A-1, Level B      java/lang/Exception Encrypt ID Lang4edu/harvard/hul/ois/jhove/module/pdf/PdfSimpleObject%edu/harvard/hul/ois/jhove/RFC1766Lang   Metadata .edu/harvard/hul/ois/jhove/module/pdf/PdfStream AcroForm2edu/harvard/hul/ois/jhove/module/pdf/PdfDictionary AA OCProperties     java/util/Map   SubtypeFontDescriptorFlags Type1 CharSetType0Ordering Adobe-GB1 Adobe-CNS1 Adobe-Japan1 Adobe-Korea1EncodingWinAnsiEncodingMacRomanDecodingMacExpertDecoding ToUnicode    CIDSystemInfoRegistryDescendantFonts-edu/harvard/hul/ois/jhove/module/pdf/PdfArray     .edu/harvard/hul/ois/jhove/module/pdf/PdfObject CIDFontType0 CIDFontType2 CIDToGIDMap3edu/harvard/hul/ois/jhove/module/pdf/PdfIndirectObjIdentityMacRomanEncodingFields  NeedAppearances ADRKidsParent     ColorSpace  ExtGState XObject /edu/harvard/hul/ois/jhove/module/pdf/PageObject   ResourcesFilter  ContentsCA   DeviceCMYK DeviceRGB DeviceGray  OutputIntentsOutputConditionDestOutputProfileS GTS_PDFA1 ! "First Next TRTR2DefaultRI SMaskNoneBMNormal CompatiblecaPSImage Form OPIRef Alternates InterpolateIntentRelativeColorimetricAbsoluteColorimetric Perceptual Saturation #$ %& '() *+1edu/harvard/hul/ois/jhove/module/pdf/PdfXMPSource ,- .$edu/harvard/hul/ois/jhove/XMPHandler  /0 12 34 5org/xml/sax/SAXException 6ENC= 7-edu/harvard/hul/ois/jhove/module/pdf/AProfile/edu/harvard/hul/ois/jhove/module/pdf/PdfProfilejava/util/Listjava/util/Iteratorjava/util/Vector1edu/harvard/hul/ois/jhove/module/pdf/PageTreeNode,edu/harvard/hul/ois/jhove/module/pdf/DocNode"javax/xml/parsers/SAXParserFactoryorg/xml/sax/XMLReader _profileTextLjava/lang/String;_module,Ledu/harvard/hul/ois/jhove/module/PdfModule;*edu/harvard/hul/ois/jhove/module/PdfModulemayBePDFACompliant2edu/harvard/hul/ois/jhove/module/pdf/TaggedProfile isAlreadyOKgetEncryptionDict6()Ledu/harvard/hul/ois/jhove/module/pdf/PdfDictionary;getTrailerDictgetD(Ljava/lang/String;)Ledu/harvard/hul/ois/jhove/module/pdf/PdfObject;getCatalogDictgetStringValue()Ljava/lang/String;(Ljava/lang/String;)VisSyntaxCorrectresolveIndirectObjectb(Ledu/harvard/hul/ois/jhove/module/pdf/PdfObject;)Ledu/harvard/hul/ois/jhove/module/pdf/PdfObject; getFontMaps()Ljava/util/List; listIterator()Ljava/util/ListIterator;hasNextnext()Ljava/lang/Object;values()Ljava/util/Collection;java/util/Collectioniterator()Ljava/util/Iterator; getIntValue()Iequals(Ljava/lang/Object;)Z getFontMap(I)Ljava/util/Map; getContent()Ljava/util/Vector; elementAt(I)Ljava/lang/Object;sizeisFalsegetDocumentTree5()Ledu/harvard/hul/ois/jhove/module/pdf/PageTreeNode; startWalk()V nextDocNode0()Ledu/harvard/hul/ois/jhove/module/pdf/DocNode; getResources xObjectsOKgetContentStreamsgetDict hasFiltersF(Ledu/harvard/hul/ois/jhove/module/pdf/PdfObject;[Ljava/lang/String;)ZgetAnnotations1()Ledu/harvard/hul/ois/jhove/module/pdf/PdfArray;getDoubleValue()DgetActionsExistgetOutlineDict newInstance&()Ljavax/xml/parsers/SAXParserFactory;setNamespaceAware(Z)V newSAXParser()Ljavax/xml/parsers/SAXParser;javax/xml/parsers/SAXParser getXMLReader()Lorg/xml/sax/XMLReader;getFile()Ljava/io/RandomAccessFile;M(Ledu/harvard/hul/ois/jhove/module/pdf/PdfStream;Ljava/io/RandomAccessFile;)VsetContentHandler(Lorg/xml/sax/ContentHandler;)VsetErrorHandler(Lorg/xml/sax/ErrorHandler;)Vparse(Lorg/xml/sax/InputSource;)VisPdfaCompliant getMessage startsWith1 **+*YSYSYSYSYSYSY SY SY SY  SY  SY SY SY SYSYSYSYSYSYS*YSYSYSYSY SY SYSYSYSY SY SY SY SY S*YSYSYSYSYSYSYSY S!*Y"S#*$%*+&|*'*() *'*&*&**'*+*,*-*(.&*/*0*1*2 *3 *' L*';nr4 ;B*'],*(5L++67+87M'4#'4 B*(9L++:7;M,N-?*(+@7ABN*-C*(+D7AE:*F+G7 +H7M041K4Lm4n4#"!Bg*I*(JL+KM,LA,MNN-OP:LME:*QߧNXb4Y_b4  B +R7;M,=N*(+S7AE::*(T7A;:6 U6V-WX7Y-WL+Z7:;<;=:[W!\W]W ^W:+_7:;6~;=:`WaW bW+c7:*'M4Z4[f4gh4i4444V< JB'B*(dL++OPN-Lt::-ME:_7:E;*(Ee7AE:f7;M,=:Z7;M,=:g7h:i:  jk: *( AE:  R7;:  =lW =mW*( e7AE:  f7;M,=: :W Z7;M,=: :Wm =WQ n7:o*(A::;p;=WBM4 4647S4T444 bS /   B^*(+S7AEM,,T7;N-U6~++_7;:=:qW`WMY4UY4>BY+r7hM,iN6-s-jE:*t+u7;: vM0T41PT4Bn+G7+w7+x7+y7hM,:,iN6-s)-jE:z7*tԧM i4 i4 i4!_i4`fi4 (B_"*({L+|+}M,,~N-Z*(-7AE:**(-7AE:**(-7AE:*,,:K:LMB::7E:]*(7AE: * *(7AE: * *(7AE: * 7: * *#`,:i:6sjE:R7;:  =: 6 6  ** 2 W 6   WG76 *$*2 W7  7;:   9=M =4>Z4[w4x44454644444  %K . $ B++M,L,MkN-h-hi:j;:=:*-6W*+*-)W*,*-W*-*- **, *+c:Q& *(9L*(+7AhM,,iN:66-so-jE:7;:N*(7AB:  6    :7;:   =W6L4v4w4F  I  BU*(*(L+*(+7AEM,!*,*(,7AEMM8P49MP4  BZ*(+w7AEM, *,*(+7AEN-!*-*(-7AENMU4=U4>RU4 B+7;N-=:=*!*!2W+7:E*EHh7hi:=sjE:*ާ N*4+N4O446 n ++7M+7N,--;=:W+7;:=:*+7;:=:W+7;: =:WW+7;:9+7;:9M4243T4Uw4x4447 !",BR++R7;M,9,=N-W-W *+-W *+M#M4$6M47IM4B,+7 +7j+7 +7+7M*,*#+7;N- -v+7;:=:*Me4(e4)?e4@ae4!BB*+W+W+W +W$@ ++M,7N--:Y+*(:Y:Ě::ǶșMTfj4f4g4;PB Bjhove/classes/edu/harvard/hul/ois/jhove/module/pdf/Comment.class0000644000707400001440000000030511510702106024073 0ustar garyusers2  ()VCode ,edu/harvard/hul/ois/jhove/module/pdf/Comment6edu/harvard/hul/ois/jhove/module/pdf/StringValuedToken!*jhove/classes/edu/harvard/hul/ois/jhove/module/pdf/Hexadecimal.class0000644000707400001440000000032211510702106024674 0ustar garyusers2   ()VCode Deprecated 0edu/harvard/hul/ois/jhove/module/pdf/Hexadecimal,edu/harvard/hul/ois/jhove/module/pdf/Literal!*jhove/classes/edu/harvard/hul/ois/jhove/module/pdf/X1Profile.class0000644000707400001440000001255011510702106024307 0ustar garyusers2 Wv Wwx Vy Vz V{ |}~ " | |  Q V V V V V V | | V |  V V V (  - V (  Q " W |  V _x1aCompliantZ/(Ledu/harvard/hul/ois/jhove/module/PdfModule;)VCodesatisfiesThisProfile()Z StackMapTableisX1aCompliant resourcesOK colorSpaceOK7(Ledu/harvard/hul/ois/jhove/module/pdf/PdfDictionary;)Z xObjectOK encryptionOK filter1AOK3(Ledu/harvard/hul/ois/jhove/module/pdf/PdfObject;)Z formObjectOK Z ISO PDF/X-1 XY   OutputIntents -edu/harvard/hul/ois/jhove/module/pdf/PdfArray GTS_PDFXConformance4edu/harvard/hul/ois/jhove/module/pdf/PdfSimpleObject  PDF/X-1a: java/lang/Exception d^ ^PDF/X-1 r^ ^ ^    ColorSpace2edu/harvard/hul/ois/jhove/module/pdf/PdfDictionary mn ExtGState nXObject n/edu/harvard/hul/ois/jhove/module/pdf/PageObject   ^ .edu/harvard/hul/ois/jhove/module/pdf/PdfStream  ResourcesFilter st       SubtypeTrapNet   FontFauxingAPNPCM DeviceCMYK .edu/harvard/hul/ois/jhove/module/pdf/PdfObject SeparationDeviceN DeviceGrayIndexedPattern qnOPI2.0Inks full_color registration monochromeF StandardP  java/lang/String LZWDecode JBIG2Decode Ref.edu/harvard/hul/ois/jhove/module/pdf/X1Profile1edu/harvard/hul/ois/jhove/module/pdf/XProfileBase1edu/harvard/hul/ois/jhove/module/pdf/PageTreeNode,edu/harvard/hul/ois/jhove/module/pdf/DocNodejava/util/Listjava/util/Iteratorjava/util/VectorPDFX1I0(Ledu/harvard/hul/ois/jhove/module/PdfModule;I)V _profileTextLjava/lang/String;_module,Ledu/harvard/hul/ois/jhove/module/PdfModule;*edu/harvard/hul/ois/jhove/module/PdfModulegetCatalogDict6()Ledu/harvard/hul/ois/jhove/module/pdf/PdfDictionary;getD(Ljava/lang/String;)Ledu/harvard/hul/ois/jhove/module/pdf/PdfObject;resolveIndirectObjectb(Ledu/harvard/hul/ois/jhove/module/pdf/PdfObject;)Ledu/harvard/hul/ois/jhove/module/pdf/PdfObject; getDocInfogetStringValue()Ljava/lang/String; startsWith(Ljava/lang/String;)ZoutputIntentsOK2(Ledu/harvard/hul/ois/jhove/module/pdf/PdfArray;)Z trailerDictOK infoDictOKbboxOK(Z)ZgetActionsExistgetEncryptionDictcheckPrefsAgainstBleedBoxgetDocumentTree5()Ledu/harvard/hul/ois/jhove/module/pdf/PageTreeNode; startWalk()V nextDocNode0()Ledu/harvard/hul/ois/jhove/module/pdf/DocNode; getResources extGStateOK xObjectsOKgetContentStreams()Ljava/util/List; listIterator()Ljava/util/ListIterator;hasNextnext()Ljava/lang/Object;getDictgetAnnotations1()Ledu/harvard/hul/ois/jhove/module/pdf/PdfArray; getContent()Ljava/util/Vector;size()I elementAt(I)Ljava/lang/Object;equals(Ljava/lang/Object;)Ziterator()Ljava/util/Iterator;getEmbeddedFiles5()Ledu/harvard/hul/ois/jhove/module/pdf/NameTreeNode; getIntValue hasFiltersF(Ledu/harvard/hul/ois/jhove/module/pdf/PdfObject;[Ljava/lang/String;)Z1VWXY Z[\*+*]^\C**L*+ M,* N- ::*:*,**********L ,MP#$[\demnxy_&$`a(`Bb    Bbc^\*d^\*L++M,, N-Z*-! ":*#*-$ ":*%*-& ":*',(h,():*:+,-:.:/ ":]*! ": * #*$ ": * %*& ": * '0 : * 1*a,(2:3:645":6 : 7 8b9 :   3:  4: ":  / ; ":   < : = 8o(M =>Z[wx_ e f%```ghK ief`ghj````akP`la<iefBbmn\ ++>M,+,,?N- - 3:5::@8 A8+5::B8=8C8 D8?5::=8#B8A8@8?_8hHi`hoklp';i`hqn\5+*+E+F "M,**,G "N-*-H :&:I8J8/ ' 3:5:K8*-L :*M:M ;<QRyz_*  ``o'+i`br^\I*L++0 MN,8+O N--P~M%D&5D6@D_`ll Bbst\3*+QYRSYSST_@un\%+U *_jhove/classes/edu/harvard/hul/ois/jhove/module/tiff/0000755000707400001440000000000011510702106021623 5ustar garyusersjhove/classes/edu/harvard/hul/ois/jhove/module/tiff/IFD.class0000644000707400001440000002630311510702104023256 0ustar garyusers2      ! " # $%  & '( ) '* '+ , -./ 0 1 2 34 56 78 59 7:;< 2=> #? "@ 7ABC (D (E (FG (H '2 3IJKL 'M 7N OP (Q RST U VWXY Z[ \] C^ Z_` Ha Cb Zcd Lef \g eh 'i Zjklm Zn 5op Y q Yr Ys YH Yt Vu vw x 7y 7z{ e| 7} 7~ 7  e e Y debug_allowoutofsequenceZ ConstantValueTIFFIEXIFINTEROPERABILITYGPSINFOGLOBALPARAMETERSNULLBYTEASCIISHORTLONGRATIONALSBYTE UNDEFINEDSSHORTSLONG  SRATIONAL FLOAT DOUBLE IFD TYPE[Ljava/lang/String; _bigEndian_errorsLjava/util/List;_first _thumbnail_formatLjava/text/NumberFormat;_info#Ledu/harvard/hul/ois/jhove/RepInfo;_nextJ_offset_rafLjava/io/RandomAccessFile;_versionB(JLedu/harvard/hul/ois/jhove/RepInfo;Ljava/io/RandomAccessFile;Z)VCode getErrors()Ljava/util/List;getNext()J getOffset getProperty'(Z)Ledu/harvard/hul/ois/jhove/Property; Exceptions getVersion()IisFirst()Z isThumbnail lookupTag(IIJJ)Vparse(ZZ)J StackMapTable..(Z)J;=SsetFirst(Z)V setThumbnailaddBitmaskPropertyM(Ljava/lang/String;J[Ljava/lang/String;Z)Ledu/harvard/hul/ois/jhove/Property;YaddIntegerPropertyM(Ljava/lang/String;I[Ljava/lang/String;Z)Ledu/harvard/hul/ois/jhove/Property;fO(Ljava/lang/String;I[Ljava/lang/String;[IZ)Ledu/harvard/hul/ois/jhove/Property;addIntegerArrayPropertyN(Ljava/lang/String;[I[Ljava/lang/String;Z)Ledu/harvard/hul/ois/jhove/Property;addRationalProperty](Ljava/lang/String;Ledu/harvard/hul/ois/jhove/Rational;Z)Ledu/harvard/hul/ois/jhove/Property;addRationalArrayProperty^(Ljava/lang/String;[Ledu/harvard/hul/ois/jhove/Rational;Z)Ledu/harvard/hul/ois/jhove/Property;postParseInitialization()VpropertyHeaderH(Ljava/lang/String;Ljava/util/List;)Ledu/harvard/hul/ois/jhove/Property; readASCII(JJ)Ljava/lang/String;preadASCIIArray(JJ)[Ljava/lang/String;readByte(IJJ)I readByteArray(IJJ)[IreadTrueByteArray(IJJ)[BreadDoubleArray(JJ)[DreadLong(IJJ)J readLongArray(IJJ)[J readUnsigned(I)J readRational((JJ)Ledu/harvard/hul/ois/jhove/Rational;readRationalArray)(JJ)[Ledu/harvard/hul/ois/jhove/Rational;readSignedRationalreadSignedRationalArray readShortreadShortArrayreadSShortArray calcValueSize(IJ)J isBigEndian checkCount(IJI)V checkType(III)V(IIII)Vaveragen(Ledu/harvard/hul/ois/jhove/Rational;Ledu/harvard/hul/ois/jhove/Rational;)Ledu/harvard/hul/ois/jhove/Rational; byteToHex(B)Ljava/lang/String; java/util/LinkedList     3edu/harvard/hul/ois/jhove/module/tiff/TiffException%edu/harvard/hul/ois/jhove/InfoMessage       java/lang/Exception Premature EOFjava/io/DataInputStreamjava/io/ByteArrayInputStream   &edu/harvard/hul/ois/jhove/ErrorMessagejava/lang/StringBuilderTag   out of sequence  Unknown data typeType = , Tag =   Value offset not word-aligned:  java/io/IOException Read error   value out of range: "edu/harvard/hul/ois/jhove/Property    java/lang/Long   java/lang/Integer java/lang/String    OffsetTypeEntries  java/lang/StringBuffer         "edu/harvard/hul/ois/jhove/Rational    Count mismatch for tag  ; expecting , saw Type mismatch for tag  or  % )edu/harvard/hul/ois/jhove/module/tiff/IFDjava/lang/Object[Bjava/util/Listjava/util/ListIterator[I[D[J%[Ledu/harvard/hul/ois/jhove/Rational;java/text/NumberFormat getInstance()Ljava/text/NumberFormat;setGroupingUsedsetMinimumFractionDigits(I)V getMessage()Ljava/lang/String;(Ljava/lang/String;J)V!edu/harvard/hul/ois/jhove/RepInfo setMessage&(Ledu/harvard/hul/ois/jhove/Message;)Vjava/io/RandomAccessFileseek(J)V$edu/harvard/hul/ois/jhove/ModuleBasereadUnsignedShort(Ljava/io/RandomAccessFile;Z)Iread([BII)IreadUnsignedInt(Ljava/io/RandomAccessFile;Z)J([B)V(Ljava/io/InputStream;)VC(Ljava/io/DataInputStream;ZLedu/harvard/hul/ois/jhove/ModuleBase;)Iappend-(Ljava/lang/String;)Ljava/lang/StringBuilder;(I)Ljava/lang/StringBuilder;toString setWellFormed((Ljava/lang/String;Ljava/lang/String;J)VC(Ljava/io/DataInputStream;ZLedu/harvard/hul/ois/jhove/ModuleBase;)J(J)Ljava/lang/StringBuilder;add(Ljava/lang/Object;)Z&edu/harvard/hul/ois/jhove/PropertyTypeSTRING(Ledu/harvard/hul/ois/jhove/PropertyType;'edu/harvard/hul/ois/jhove/PropertyArityLIST)Ledu/harvard/hul/ois/jhove/PropertyArity;x(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ledu/harvard/hul/ois/jhove/PropertyArity;Ljava/lang/Object;)VO(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ljava/lang/Object;)VINTEGERARRAYtoDouble()Dformat(D)Ljava/lang/String;PROPERTY([B)I,(Ljava/lang/String;)Ljava/lang/StringBuffer;(C)Ljava/lang/StringBuffer; setLength listIterator()Ljava/util/ListIterator;next()Ljava/lang/Object; readDouble(Ljava/io/RandomAccessFile;Z)DreadUnsignedByte(Ljava/io/RandomAccessFile;)I(JJ)V readSignedIntreadSignedShort(Ljava/lang/String;)VgetDenominator getNumerator!.]Q***-***** * * Y * *** *** ***K%*N*Y-- - F *A* 6* **6 aA h6:*W aA***:Y !"Y#Y$%:66z*&6  A*'Y(Y)*+ ,-+.*a ha/*0 6*&6     C*'Y1(Y)2+ ,3+ ,.*4a ha6   * *77 *77   84o  w7*Y(Y)9+ :.*;a ha?Y(Y)9+ :.*;a ha!*;a ha7 *    =:Y?*a!*@* WZy>YZ W?f* B** :n Y :6" x 2AWܧ&:* (Y)++B+ :.AWCY+DEF:CY+GHY IJ:;> B"[:9CY+D-2J:&:* (Y)++B+,.AWCY+KLYMJ:" :b66. 6 CY+D-2J:$* (Y)++B+,.AWCY+KLYMJ:  ~:`,N:6,=-,.2S):* (Y)++B+,.,.AW»CY+DOF:CY+KO,F:$'T%P5:CY+D*,PQJ:CY+R,J: \:?,N:6,*,2PQSCY+DOF:CY+RO,F: _ SCN-CYSGHY*IJS-CYTD+JS-CYUVE,FSCYWVO-F m*!:*XWYYZ:6>36/ *[\W ]W^$ > *!6 Y ::*XWYYZ:6  R 36  ^AW_*   * [\W  ]W N: `: 6     aNS  20) >**b>L.* :6 *bO >(* :*XW>P2*!:6**cR >**b>K-* :6 *bP >n Ai AiM]iiAiiiii]*dA**A**A  D  >: .*!**7**7eYf> q*!8:*XW"Y#Y$%:e:61*77 *77 eY  fS8 5> < 0*!**g7**g7eYf>  t*! 8:*XW"Y#Y$%:e:63*h7 *h7 eY  fS9 7> **b> L.* :6 *bO >Q3* :6 **iO > w[>S AAFKPAAFKPFPK>> >>i D* J50Y(Y)j+,k+,l+:.m4 v^    0Y(Y)n+,k+,l+,.m1 XA>9Y(Y)n+,k+,o+,l+,.m@ _S*pA+p7eY*qi*pif:eY+q i+p if:eYqqampfwQ M,~zO,~OYYrsN6',.6 70-]W-^" cWNYtSYuSYvSYwSYxSYySYzSY{SY|SY }SY ~SY SY SY WSjhove/classes/edu/harvard/hul/ois/jhove/module/tiff/ExifIFD.java0000644000707400001440000012161211432574461023725 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003-2007 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.tiff; import edu.harvard.hul.ois.jhove.*; import java.io.*; import java.util.*; /** * Encapsulation of a Exif IFD */ public class ExifIFD extends IFD { /****************************************************************** * PRIVATE CLASS FIELDS. ******************************************************************/ /** ExifVersion tag. */ private static final int EXPOSURETIME = 33434, FNUMBER = 33437, EXPOSUREPROGRAM = 34850, SPECTRALSENSITIVITY = 34852, ISOSPEEDRATINGS = 34855, OECF = 34856, EXIFVERSION = 36864, DATETIMEORIGINAL = 36867, DATETIMEDIGITIZED = 36868, COMPONENTSCONFIGURATION = 37121, COMPRESSEDBITSPERPIXEL = 37122, SHUTTERSPEEDVALUE = 37377, APERTUREVALUE = 37378, BRIGHTNESSVALUE = 37379, EXPOSUREBIASVALUE = 37380, MAXAPERTUREVALUE = 37381, SUBJECTDISTANCE = 37382, METERINGMODE = 37383, LIGHTSOURCE = 37384, FLASH = 37385, FOCALLENGTH = 37386, SUBJECTAREA = 37396, MAKERNOTE = 37500, USERCOMMENT = 37510, SUBSECTIME = 37520, SUBSECTIMEORIGINAL = 37521, SUBSECTIMEDIGITIZED = 37522, FLASHPIXVERSION = 40960, COLORSPACE = 40961, PIXELXDIMENSION = 40962, PIXELYDIMENSION = 40963, RELATEDSOUNDFILE = 40964, FLASHENERGY = 41483, SPATIALFREQUENCYRESPONSE = 41484, FOCALPLANEXRESOLUTION = 41486, FOCALPLANEYRESOLUTION = 41487, FOCALPLANERESOLUTIONUNIT = 41488, SUBJECTLOCATION = 41492, EXPOSUREINDEX = 41493, SENSINGMETHOD = 41495, FILESOURCE = 41728, SCENETYPE = 41729, CFAPATTERN = 41730, CUSTOMRENDERED = 41985, EXPOSUREMODE = 41986, WHITEBALANCE = 41987, DIGITALZOOMRATIO = 41988, FOCALLENGTHIN35MMFILM = 41989, SCENECAPTURETYPE = 41990, GAINCONTROL = 41991, CONTRAST = 41992, SATURATION = 41993, SHARPNESS = 41994, DEVICESETTINGDESCRIPTION = 41995, SUBJECTDISTANCERANGE = 41996, IMAGEUNIQUEID = 42016; private static final String [] COLORSPACE_L = { "sRGB", "uncalibrated" }; private static final int [] COLORSPACE_INDEX = { 1, 65535 }; public static final String [] COMPONENTSCONFIGURATION_L = { "Does not exist", "Y", "Cb", "Cr", "R", "G", "B" }; public static final String [] CONTRAST_L = { "normal", "soft", "hard" }; public static final String [] CUSTOMRENDERED_L = { "normal", "custom" }; public static final String [] EXPOSUREMODE_L = { "auto", "manual", "auto bracket" }; public static final String [] EXPOSUREPROGRAM_L = { "unidentified", "manual", "program normal", "aperture priority", "shutter priority", "program creative", "program action", "portrait mode", "landscape mode" }; public static final String [] FILESOURCE_L = { "", "", "", "DSC" }; public static final String [] FLASH_L = { "did not fire", "fired", "strobe return light not detected", "strobe return light detected", "fired, compulsory flash mode", "fired, compulsory flash mode, return light not detected", "fired, compulsory flash mode, return light detected", "did not fire, compulsory flash mode", "did not fire, auto mode", "fired, auto mode", "fired, auto mode, return light not detected", "fired, auto mode, return light detected", "no flash function", "fired, red-eye reduction mode", "fired, red-eye reduction mode, return light not detected", "fired, red-eye reduction mode, return light detected", "fired, compulsory mode", "fired, compulsory mode, return light not detected", "fired, compulsory flash mode, return light detected", "fired, auto mode, red-eye reduction mode", "fired, auto mode, red-eye reduction mode, return light not detected", "fired, auto mode, red-eye reduction mode, return light detected", }; public static final int[] FLASH_INDEX = { 0, 1, 5, 7, 9, 13, 15, 16, 24, 25, 29, 31, 32, 65, 69, 71, 73, 77, 79, 89, 93, 95 }; public static final String [] FOCALPLANERESOLUTIONUNIT_L = { "", "", "inches", "centimeters" }; public static final String [] GAINCONTROL_L = { "none", "low gain up", "high gain up", "low gain down", "high gain down" }; public static final String [] LIGHTSOURCE_L = { "unknown", "daylight", "fluorescent", "tungsten", "flash", "fine weather", "cloudy weather", "shade", "daylight flourescent (D 5700 - 7100K)", "day white flourescent (N 4600 - 5400K)", "cool white flourescent (W 3900 - 4500K)", "white flourescent (WW 3200 - 3700K)", "standard light A", "standard light B", "standard light C", "D55", "D65", "D75", "D50", "ISO studio tungsten", "other" }; public static final int [] LIGHTSOURCE_INDEX = { 0, 1, 2, 3, 4, 9, 10, 11, 12, 13, 14, 15, 17, 18, 19, 20, 21, 22, 23, 24, 255 }; public static final String [] METERINGMODE_L = { "unidentified", "average", "centre weighted average", "spot", "multispot", "pattern", "partial", "other" }; public static final int [] METERINGMODE_INDEX = { 0, 1, 2, 3, 4, 5, 6, 255 }; public static final String [] SATURATION_L = { "normal", "soft", "hard" }; public static final String [] SCENECAPTURETYPE_L = { "standard", "landscape", "portrait", "night" }; public static final String [] SCENETYPE_L = { "", "directly photographed image" }; public static final String [] SENSINGMETHOD_L = { "", "not defined", "one-chip color area", "two-chip color area", "three-chip color area", "color sequential area", "", "trilinear", "colour sequential linear" }; public static final String [] SHARPNESS_L = { "normal", "soft", "hard" }; public static final String [] SUBJECTDISTANCERANGE_L = { "unknown", "macro", "close", "distant" }; public static final String [] WHITEBALANCE_L = { "auto", "manual" }; /****************************************************************** * PRIVATE INSTANCE FIELDS. ******************************************************************/ /** Aperature value tag. */ private Rational _apertureValue; private Rational _brightnessValue; private int [] _cfaPattern; private int _colorSpace; private int [] _componentsConfiguration; private Rational _compressedBitsPerPixel; private int _contrast; private int _customRendered; private String _dateTimeDigitized; private String _dateTimeOriginal; private int [] _deviceSettingDescription; private Rational _digitalZoomRatio; private String _exifVersion; private Rational _exposureBiasValue; private Rational _exposureIndex; private int _exposureMode; private int _exposureProgram; private Rational _exposureTime; private int _fileSource; private int _flash; private Rational _flashEnergy; private String _flashpixVersion; private Rational _fNumber; private Rational _focalLength; private int _focalLengthIn35mmFilm; private Rational _focalPlaneXResolution; private Rational _focalPlaneYResolution; private int _focalPlaneResolutionUnit; private int _gainControl; private String _imageUniqueID; private int [] _isoSpeedRatings; private int _lightSource; private int [] _makerNote; private Rational _maxApertureValue; private int _meteringMode; private int [] _oecf; private long _pixelXDimension; private long _pixelYDimension; private String _relatedSoundFile; private int _saturation; private int _sceneCaptureType; private int _sceneType; private int _sensingMethod; private int _sharpness; private Rational _shutterSpeedValue; private int [] _spatialFrequencyResponse; private String _spectralSensitivity; private int [] _subjectArea; private Rational _subjectDistance; private int _subjectDistanceRange; private int [] _subjectLocation; private String _subSecTime; private String _subSecTimeDigitized; private String _subSecTimeOriginal; private int [] _userComment; private int _whiteBalance; /* data from standard TIFF tags */ private String _manufacturer; private String _model; private String _software; private String _artist; private int _orientation; private NisoImageMetadata _niso; /****************************************************************** * CLASS CONSTRUCTOR. ******************************************************************/ /** Instantiate an ExifIFD object. * @param offset IFD offset * @param info the RepInfo object * @param raf TIFF file * @param bigEndian True if big-endian file */ public ExifIFD (long offset, RepInfo info, RandomAccessFile raf, boolean bigEndian) { super (offset, info, raf, bigEndian); _colorSpace = NULL; _contrast = 0; _customRendered = NULL; _exifVersion = "0220"; _exposureMode = NULL; _exposureProgram = NULL; _fileSource = NULL; _flash = NULL; _flashpixVersion = "0100"; _focalLengthIn35mmFilm = NULL; _focalPlaneResolutionUnit = 2; _gainControl = NULL; _lightSource = NULL; _meteringMode = NULL; _pixelXDimension = NULL; _pixelYDimension = NULL; _saturation = NULL; _sceneCaptureType = NULL; _sceneType = NULL; _sensingMethod = NULL; _sharpness = NULL; _subjectDistanceRange = NULL; _whiteBalance = NULL; _niso = new NisoImageMetadata (); } /****************************************************************** * PUBLIC INSTANCE METHODS. ******************************************************************/ /** Get the IFD properties. */ public Property getProperty (boolean rawOutput) { List entries = new LinkedList (); entries.add (new Property ("ExifVersion", PropertyType.STRING, _exifVersion)); entries.add (new Property ("FlashpixVersion", PropertyType.STRING, _flashpixVersion)); if (_colorSpace != NULL) { entries.add (addIntegerProperty ("ColorSpace", _colorSpace, COLORSPACE_L, COLORSPACE_INDEX, rawOutput)); } if (_componentsConfiguration != null) { entries.add (new Property ("ComponentsConfiguration", PropertyType.INTEGER, PropertyArity.ARRAY, _componentsConfiguration)); } if (_compressedBitsPerPixel != null) { entries.add (addRationalProperty ("CompressedBitsPerPixel", _compressedBitsPerPixel, rawOutput)); } if (_pixelXDimension != NULL) { entries.add (new Property ("PixelXDimension", PropertyType.LONG, new Long (_pixelXDimension))); } if (_pixelYDimension != NULL) { entries.add (new Property ("PixelYDimension", PropertyType.LONG, new Long (_pixelYDimension))); } if (_makerNote != null) { entries.add (new Property ("MakerNote", PropertyType.INTEGER, PropertyArity.ARRAY, _makerNote)); } if (_userComment != null) { Property ucp = makeUserCommentProperty (_userComment, rawOutput); if (ucp != null) { entries.add (ucp); } } if (_relatedSoundFile != null) { entries.add (new Property ("RelatedSoundFile", PropertyType.STRING, _relatedSoundFile)); } if (_dateTimeOriginal != null) { entries.add (new Property ("DateTimeOriginal", PropertyType.STRING, _dateTimeOriginal)); } if (_dateTimeDigitized != null) { entries.add (new Property ("DateTimeDigitized", PropertyType.STRING, _dateTimeDigitized)); } if (_subSecTime != null) { entries.add (new Property ("SubSecTime", PropertyType.STRING, _subSecTime)); } if (_subSecTimeOriginal != null) { entries.add (new Property ("SubSecTimeOriginal", PropertyType.STRING, _subSecTimeOriginal)); } if (_subSecTimeDigitized != null) { entries.add (new Property ("SubSecTimeDigitized", PropertyType.STRING, _subSecTimeDigitized)); } if (_imageUniqueID != null) { entries.add (new Property ("ImageUniqueID",PropertyType.STRING, _imageUniqueID)); } if (_exposureTime != null) { entries.add (addRationalProperty ("ExposureTime", _exposureTime, rawOutput)); } if (_fNumber != null) { entries.add (addRationalProperty ("FNumber", _fNumber, rawOutput)); } if (_exposureProgram != NULL) { entries.add (addIntegerProperty ("ExposureProgram", _exposureProgram, EXPOSUREPROGRAM_L, rawOutput)); } if (_spectralSensitivity != null) { entries.add (new Property ("SpectralSensitivity", PropertyType.STRING, _spectralSensitivity)); } if (_isoSpeedRatings != null) { entries.add (new Property ("ISOSpeedRatings", PropertyType.INTEGER, PropertyArity.ARRAY, _isoSpeedRatings)); } if (_oecf != null) { entries.add (new Property ("OECF", PropertyType.INTEGER, PropertyArity.ARRAY, _oecf)); } if (_shutterSpeedValue != null) { entries.add (addRationalProperty ("ShutterSpeedValue", _shutterSpeedValue, rawOutput)); } if (_apertureValue != null) { entries.add (addRationalProperty ("ApertureValue", _apertureValue, rawOutput)); } if (_brightnessValue != null) { entries.add (addRationalProperty ("BrightnessValue", _brightnessValue, rawOutput)); } if (_exposureBiasValue != null) { entries.add (addRationalProperty ("ExposureBiasValue", _exposureBiasValue, rawOutput)); } if (_maxApertureValue != null) { entries.add (addRationalProperty ("MaxApertureValue", _maxApertureValue, rawOutput)); } if (_subjectDistance != null) { entries.add (addRationalProperty ("SubjectDistance", _subjectDistance, rawOutput)); } if (_meteringMode != NULL) { entries.add (addIntegerProperty ("MeteringMode", _meteringMode, METERINGMODE_L, METERINGMODE_INDEX, rawOutput)); } if (_lightSource != NULL) { entries.add (addIntegerProperty ("LightSource", _lightSource, LIGHTSOURCE_L, LIGHTSOURCE_INDEX, rawOutput)); } if (_flash != NULL) { entries.add (addIntegerProperty ("Flash", _flash, FLASH_L, FLASH_INDEX, rawOutput)); } if (_focalLength != null) { entries.add (addRationalProperty ("FocalLength", _focalLength, rawOutput)); } if (_subjectArea != null) { entries.add (new Property ("SubjectArea", PropertyType.INTEGER, PropertyArity.ARRAY, _subjectArea)); } if (_flashEnergy != null) { entries.add (addRationalProperty ("FlashEnergy", _flashEnergy, rawOutput)); } if (_spatialFrequencyResponse != null) { entries.add (new Property ("SubjectArea", PropertyType.INTEGER, PropertyArity.ARRAY, _subjectArea)); } if (_focalPlaneXResolution != null) { entries.add (addRationalProperty ("FocalPlaneXResolution", _focalPlaneXResolution, rawOutput)); } if (_focalPlaneYResolution != null) { entries.add (addRationalProperty ("FocalPlaneYResolution", _focalPlaneYResolution, rawOutput)); } if (_focalPlaneResolutionUnit != NULL) { entries.add (addIntegerProperty ("FocalPlaneResolutionUnit", _focalPlaneResolutionUnit, FOCALPLANERESOLUTIONUNIT_L, rawOutput)); } if (_subjectLocation != null) { entries.add (new Property ("SubjectLocation", PropertyType.INTEGER, PropertyArity.ARRAY, _subjectLocation)); } if (_exposureIndex != null) { entries.add (addRationalProperty ("ExposureIndex", _exposureIndex, rawOutput)); } if (_sensingMethod != NULL) { entries.add (addIntegerProperty ("SensingMethod", _sensingMethod, SENSINGMETHOD_L, rawOutput)); } if (_fileSource != NULL) { entries.add (addIntegerProperty ("FileSource", _fileSource, FILESOURCE_L, rawOutput)); } if (_sceneType != NULL) { entries.add (addIntegerProperty ("SceneType", _sceneType, SCENETYPE_L, rawOutput)); } if (_cfaPattern != null) { entries.add (new Property ("CFAPattern", PropertyType.INTEGER, PropertyArity.ARRAY, _cfaPattern)); } if (_customRendered != NULL) { entries.add (addIntegerProperty ("CustomRendered", _customRendered, CUSTOMRENDERED_L, rawOutput)); } if (_exposureMode != NULL) { entries.add (addIntegerProperty ("ExposureMode", _exposureMode, EXPOSUREMODE_L, rawOutput)); } if (_whiteBalance != NULL) { entries.add (addIntegerProperty ("WhiteBalance", _whiteBalance, WHITEBALANCE_L, rawOutput)); } if (_digitalZoomRatio != null) { entries.add (addRationalProperty ("DigitalZoomRatio", _digitalZoomRatio, rawOutput)); } if (_focalLengthIn35mmFilm != NULL) { entries.add (new Property ("FocalLengthIn35mmFilm", PropertyType.INTEGER, new Integer (_focalLengthIn35mmFilm))); } if (_sceneCaptureType != NULL) { entries.add (addIntegerProperty ("SceneCaptureType", _sceneCaptureType, SCENECAPTURETYPE_L, rawOutput)); } if (_gainControl != NULL) { entries.add (addIntegerProperty ("GainControl", _gainControl, GAINCONTROL_L, rawOutput)); } if (_saturation != NULL) { entries.add (addIntegerProperty ("Saturation", _saturation, SATURATION_L, rawOutput)); } if (_sharpness != NULL) { entries.add (addIntegerProperty ("Sharpness", _sharpness, SHARPNESS_L, rawOutput)); } if (_deviceSettingDescription != null) { entries.add (new Property ("DeviceSettingDescription", PropertyType.INTEGER, PropertyArity.ARRAY, _deviceSettingDescription)); } if (_subjectDistanceRange != NULL) { entries.add (addIntegerProperty ("SubjectDistanceRange", _subjectDistanceRange, SUBJECTDISTANCERANGE_L, rawOutput)); } // properties from standard TIFF tags if (_manufacturer != null) { entries.add (new Property ("Make", PropertyType.STRING, _manufacturer)); } if (_model != null) { entries.add (new Property ("Model", PropertyType.STRING, _model)); } if (_software != null) { entries.add (new Property ("Software", PropertyType.STRING, _software)); } if (_artist != null) { entries.add (new Property ("Artist", PropertyType.STRING, _artist)); } return propertyHeader ("Exif", entries); } /** Returns the Exif version string (tag 36864). */ public String getExifVersion () { return _exifVersion; } /** Returns the constructed NisoImageMetadata. */ public NisoImageMetadata getNisoImageMetadata () { return _niso; } /** Returns the Flashpix version string (tag 40960). */ public String getFlashpixVersion () { return _flashpixVersion; } /** returns the colorspace value (tag 40961). */ public int getColorspace () { return _colorSpace; } /** Extracts and returns the Exif property list from a standard * IFD property header. */ public List exifProps (Property pHeader) { try { Property[] pArr = (Property []) pHeader.getValue (); Property entries = pArr[2]; return (List) entries.getValue (); } catch (Exception e) { // We could get caught here if we somehow tried to get // the Exif properties from something that wasn't a // standard property header. return null; } } /** Lookup an IFD tag. */ public void lookupTag (int tag, int type, long count, long value) throws TiffException { try { if (tag == APERTUREVALUE) { checkType (tag, type, RATIONAL); checkCount (tag, count, 1); _apertureValue = readRational (count, value); } else if (tag == BRIGHTNESSVALUE) { checkType (tag, type, SRATIONAL); checkCount (tag, count, 1); _brightnessValue = readRational (count, value); } else if (tag == CFAPATTERN) { checkType (tag, type, UNDEFINED); _cfaPattern = readByteArray (type, count, value); } else if (tag == COLORSPACE) { checkType (tag, type, SHORT); checkCount (tag, count, 1); _colorSpace = readShort (type, count, value); } else if (tag == COLORSPACE) { checkType (tag, type, SHORT); checkCount (tag, count, 1); _colorSpace = readShort (type, count, value); } else if (tag == COMPONENTSCONFIGURATION) { checkType (tag, type, UNDEFINED); _componentsConfiguration = readByteArray (type, count, value); } else if (tag == COMPRESSEDBITSPERPIXEL) { checkType (tag, type, RATIONAL); checkCount (tag, count, 1); _compressedBitsPerPixel = readRational (count, value); } else if (tag == CONTRAST) { checkType (tag, type, SHORT); checkCount (tag, count, 1); _contrast = readShort (type, count, value); } else if (tag == CUSTOMRENDERED) { checkType (tag, type, SHORT); checkCount (tag, count, 1); _customRendered = readShort (type, count, value); } else if (tag == DATETIMEDIGITIZED) { checkType (tag, type, ASCII); checkCount (tag, count, 20); _dateTimeDigitized = readASCII (count, value); } else if (tag == DATETIMEORIGINAL) { checkType (tag, type, ASCII); checkCount (tag, count, 20); _dateTimeOriginal = readASCII (count, value); } else if (tag == DEVICESETTINGDESCRIPTION) { checkType (tag, type, UNDEFINED); _deviceSettingDescription = readByteArray (type, count, value); } else if (tag == DIGITALZOOMRATIO) { checkType (tag, type, RATIONAL); checkCount (tag, count, 1); _digitalZoomRatio = readRational (count, value); } else if (tag == EXIFVERSION) { checkType (tag, type, UNDEFINED); checkCount (tag, count, 4); int [] iarray = readShortArray (type, count, value); char [] carray = new char [iarray.length]; for (int i=0; iGPSInfoIFD
object. * @param offset IFD offset * @param info The RepInfo object * @param raf TIFF file * @param bigEndian True if big-endian file */ public GPSInfoIFD (long offset, RepInfo info, RandomAccessFile raf, boolean bigEndian) { super (offset, info, raf, bigEndian); _gpsAltitudeRef = NULL; _gpsDifferential = NULL; /* Set Exif defaults. */ _gpsVersionID = new int [] {2, 2, 0, 0}; _gpsAltitudeRef = 0; _gpsSpeedRef = "K"; _gpsTrackRef = "T"; _gpsImgDirectionRef = "T"; _gpsDestBearingRef = "T"; _gpsDestDistanceRef = "K"; } /****************************************************************** * PUBLIC INSTANCE METHODS. ******************************************************************/ /** Get the GPSAltitude (6). */ public Rational getGPSAltitude () { return _gpsAltitude; } /** Get the GPSAltitudeRef (5). */ public int getGPSAltitudeRef () { return _gpsAltitudeRef; } /** Get the GPSDateStamp (29). */ public String getGPSDateStamp () { return _gpsDateStamp; } /** Get the GPSDestBearing (24). */ public Rational getGPSDestBearing () { return _gpsDestBearing; } /** Get the GPSDestBearingRef (23). */ public String getGPSDestBearingRef () { return _gpsDestBearingRef; } /** Get the GPSDestDistance (26). */ public Rational getGPSDestDistance () { return _gpsDestDistance; } /** Get the GPSDestDistanceRef (25). */ public String getGPSDestDistanceRef () { return _gpsDestDistanceRef; } /** Get the GPSDestLatitude (20). */ public Rational [] getGPSDestLatitude () { return _gpsDestLatitude; } /** Get the GPSDestLatitudeRef (19). */ public String getGPSDestLatitudeRef () { return _gpsDestLatitudeRef; } /** Get the GPSDestLongitude (22). */ public Rational [] getGPSDestLongitude () { return _gpsDestLongitude; } /** Get the GPSDestLongitudeRef (21). */ public String getGPSDestLongitudeRef () { return _gpsDestLongitudeRef; } /** Get the GPSDifferential (30). */ public int getGPSDifferential () { return _gpsDifferential; } /** Get the GPSDOP (11). */ public Rational getGPSDOP () { return _gpsDOP; } /** Get the GPSImgDirection (17). */ public Rational getGPSImgDirection () { return _gpsImgDirection; } /** Get the GPSImgDirectionRef (16). */ public String getGPSImgDirectionRef () { return _gpsImgDirectionRef; } /** Get the GPSLatitude (2). */ public Rational [] getGPSLatitude () { return _gpsLatitude; } /** Get the GPSLatitudeRef (1). */ public String getGPSLatitudeRef () { return _gpsLatitudeRef; } /** Get the GPSLongitude (4). */ public Rational [] getGPSLongitude () { return _gpsLongitude; } /** Get the GPSLongitudeRef (3). */ public String getGPSLongitudeRef () { return _gpsLongitudeRef; } /** Get the GPSMapDatum (18). */ public String getGPSMapDatum () { return _gpsMapDatum; } /** Get the GPSMeasureMode (10). */ public String getGPSMeasureMode () { return _gpsMeasureMode; } /** Get the GPSProcessingMethod (27). */ public int [] getGPSProcessingMethod () { return _gpsProcessingMethod; } /** Get the GPSSatellites (8). */ public String getGPSSatellites () { return _gpsSatellites; } /** Get the GPSSpeed (13). */ public Rational getGPSSpeed () { return _gpsSpeed; } /** Get the GPSSpeedRef (12). */ public String getGPSSpeedRef () { return _gpsSpeedRef; } /** Get the GPSStatus (9). */ public String getGPStatus () { return _gpsStatus; } /** Get the GPSTimeStamp (7). */ public Rational [] getGPTimeStamp () { return _gpsTimeStamp; } /** Get the GPSTrack (15). */ public Rational getGPSTrack () { return _gpsTrack; } /** Get the GPSTrackRef (14). */ public String getGPSTrackRef () { return _gpsTrackRef; } /** Get the GPSVersionID (1). */ public int [] getGPSVersionID () { return _gpsVersionID; } /** Get the IFD properties. */ public Property getProperty (boolean rawOutput) { List entries = new LinkedList (); entries.add (new Property ("GPSVersionID", PropertyType.STRING, Integer.toString (_gpsVersionID[0]) + "." + Integer.toString (_gpsVersionID[1]) + "." + Integer.toString (_gpsVersionID[2]) + "." + Integer.toString (_gpsVersionID[3]))); if (_gpsLatitudeRef != null) { entries.add (new Property ("GPSLatitudeRef", PropertyType.STRING, _gpsLatitudeRef)); } if (_gpsLatitude != null) { entries.add (new Property ("GPSLatitude", PropertyType.RATIONAL, PropertyArity.ARRAY, _gpsLatitude)); } if (_gpsLongitudeRef != null) { entries.add (new Property ("GPSLongitudeRef", PropertyType.STRING, _gpsLongitudeRef)); } if (_gpsLongitude != null) { entries.add (new Property ("GPSLongitude", PropertyType.RATIONAL, PropertyArity.ARRAY, _gpsLongitude)); } entries.add (new Property ("GPSAltitudeRef", PropertyType.INTEGER, new Integer (_gpsAltitudeRef))); if (_gpsAltitude != null) { entries.add (new Property ("GPSAltitude", PropertyType.RATIONAL, _gpsAltitude)); } if (_gpsTimeStamp != null) { entries.add (new Property ("GPSTimeStamp", PropertyType.RATIONAL, PropertyArity.ARRAY, _gpsTimeStamp)); } if (_gpsSatellites != null) { entries.add (new Property ("GPSSatellites", PropertyType.STRING, _gpsSatellites)); } if (_gpsStatus != null) { entries.add (new Property ("GPSStatus", PropertyType.STRING, _gpsStatus)); } if (_gpsMeasureMode != null) { entries.add (new Property ("GPSMeasureMode", PropertyType.STRING, _gpsMeasureMode)); } if (_gpsDOP != null) { entries.add (new Property ("GPSDOP", PropertyType.RATIONAL, _gpsDOP)); } entries.add (new Property ("GPSSpeedRef", PropertyType.STRING, _gpsSpeedRef)); if (_gpsSpeed != null) { entries.add (new Property ("GPSSpeed", PropertyType.RATIONAL, _gpsSpeed)); } entries.add (new Property ("GPSTrackRef", PropertyType.STRING, _gpsTrackRef)); if (_gpsTrack != null) { entries.add (new Property ("GPSTrack", PropertyType.RATIONAL, _gpsTrack)); } entries.add (new Property ("GPSImgDirectionRef", PropertyType.STRING, _gpsImgDirectionRef)); if (_gpsImgDirection != null) { entries.add (new Property ("GPSImgDirection", PropertyType.RATIONAL, _gpsImgDirection)); } if (_gpsMapDatum != null) { entries.add (new Property ("GPSMapDatum", PropertyType.STRING, _gpsMapDatum)); } if (_gpsDestLatitudeRef != null) { entries.add (new Property ("GPSDestLatitudeRef", PropertyType.STRING, _gpsDestLatitudeRef)); } if (_gpsDestLatitude != null) { entries.add (new Property ("GPSDestLatitude", PropertyType.RATIONAL, PropertyArity.ARRAY, _gpsDestLatitude)); } if (_gpsDestLongitudeRef != null) { entries.add (new Property ("GPSDestLongitudeRef", PropertyType.STRING, _gpsDestLongitudeRef)); } if (_gpsDestLongitude != null) { entries.add (new Property ("GPSDestLongitude", PropertyType.RATIONAL, PropertyArity.ARRAY, _gpsDestLongitude)); } entries.add (new Property ("GPSDestBearingRef", PropertyType.STRING, _gpsDestBearingRef)); if (_gpsDestBearing != null) { entries.add (new Property ("GPSDestBearing", PropertyType.RATIONAL, _gpsDestBearing)); } entries.add (new Property ("GPSDestDistanceRef", PropertyType.STRING, _gpsDestDistanceRef)); if (_gpsDestDistance != null) { entries.add (new Property ("GPSDestDistance", PropertyType.RATIONAL, _gpsDestDistance)); } if (_gpsDestDistanceRef != null) { entries.add (new Property ("GPSDestDistanceRef", PropertyType.STRING, _gpsDestDistanceRef)); } if (_gpsProcessingMethod != null) { entries.add (new Property ("GPSProcessingMethod", PropertyType.INTEGER, PropertyArity.ARRAY, _gpsProcessingMethod)); } if (_gpsAreaInformation != null) { entries.add (new Property ("GPSAreaInformation", PropertyType.INTEGER, PropertyArity.ARRAY, _gpsAreaInformation)); } if (_gpsDateStamp != null) { entries.add (new Property ("GPSDateStamp", PropertyType.STRING, _gpsDateStamp)); } entries.add (new Property ("GPSDifferential", PropertyType.INTEGER, new Integer (_gpsDifferential))); return propertyHeader ("GPSInfo", entries); } /** Lookup an IFD tag. */ public void lookupTag (int tag, int type, long count, long value) throws TiffException { try { if (tag == GPSALTITUDE) { checkType (tag, type, RATIONAL); checkCount (tag, count, 1); _gpsAltitude = readRational (count, value); } else if (tag == GPSALTITUDEREF) { checkType (tag, type, BYTE); checkCount (tag, count, 1); _gpsAltitudeRef = readByte (type, count, value); } else if (tag == GPSDATESTAMP) { checkType (tag, type, ASCII); checkCount (tag, count, 11); _gpsDateStamp = readASCII (count, value); } else if (tag == GPSDESTBEARING) { checkType (tag, type, RATIONAL); checkCount (tag, count, 1); _gpsDestBearing = readRational (count, value); } else if (tag == GPSDESTBEARINGREF) { checkType (tag, type, ASCII); checkCount (tag, count, 2); _gpsDestBearingRef = readASCII (count, value); } else if (tag == GPSDESTDISTANCE) { checkType (tag, type, RATIONAL); checkCount (tag, count, 1); _gpsDestDistance = readRational (count, value); } else if (tag == GPSDESTDISTANCEREF) { checkType (tag, type, ASCII); checkCount (tag, count, 2); _gpsDestDistanceRef = readASCII (count, value); } else if (tag == GPSDESTLATITUDE) { checkType (tag, type, RATIONAL); checkCount (tag, count, 3); _gpsDestLatitude = readRationalArray (count, value); } else if (tag == GPSDESTLATITUDEREF) { checkType (tag, type, ASCII); checkCount (tag, count, 2); _gpsDestLatitudeRef = readASCII (count, value); } else if (tag == GPSDESTLONGITUDE) { checkType (tag, type, RATIONAL); checkCount (tag, count, 3); _gpsDestLongitude = readRationalArray (count, value); } else if (tag == GPSDESTLONGITUDEREF) { checkType (tag, type, ASCII); checkCount (tag, count, 2); _gpsDestLongitudeRef = readASCII (count, value); } else if (tag == GPSDIFFERENTIAL) { checkType (tag, type, SHORT); checkCount (tag, count, 1); _gpsDifferential = readShort (type, count, value); } else if (tag == GPSDOP) { checkType (tag, type, RATIONAL); checkCount (tag, count, 1); _gpsDOP = readRational (count, value); } else if (tag == GPSIMGDIRECTION) { checkType (tag, type, RATIONAL); checkCount (tag, count, 1); _gpsImgDirection = readRational (count, value); } else if (tag == GPSIMGDIRECTIONREF) { checkType (tag, type, ASCII); checkCount (tag, count, 2); _gpsImgDirectionRef = readASCII (count, value); } else if (tag == GPSLATITUDE) { checkType (tag, type, RATIONAL); checkCount (tag, count, 3); _gpsLatitude = readRationalArray (count, value); } else if (tag == GPSLATITUDEREF) { checkType (tag, type, ASCII); checkCount (tag, count, 2); _gpsLatitudeRef = readASCII (count, value); } else if (tag == GPSLONGITUDE) { checkType (tag, type, RATIONAL); checkCount (tag, count, 3); _gpsLongitude = readRationalArray (count, value); } else if (tag == GPSLONGITUDEREF) { checkType (tag, type, ASCII); checkCount (tag, count, 2); _gpsLongitudeRef = readASCII (count, value); } else if (tag == GPSMAPDATUM) { checkType (tag, type, ASCII); _gpsMapDatum = readASCII (count, value); } else if (tag == GPSMEASUREMODE) { checkType (tag, type, ASCII); checkCount (tag, count, 2); _gpsMeasureMode = readASCII (count, value); } else if (tag == GPSPROCESSINGMETHOD) { checkType (tag, type, UNDEFINED); _gpsProcessingMethod = readByteArray (type, count, value); } else if (tag == GPSSATELLITES) { checkType (tag, type, ASCII); _gpsSatellites = readASCII (count, value); } else if (tag == GPSSPEED) { checkType (tag, type, RATIONAL); checkCount (tag, count, 1); _gpsSpeed = readRational (count, value); } else if (tag == GPSSPEEDREF) { checkType (tag, type, ASCII); checkCount (tag, count, 2); _gpsSpeedRef = readASCII (count, value); } else if (tag == GPSSTATUS) { checkType (tag, type, ASCII); checkCount (tag, count, 2); _gpsStatus = readASCII (count, value); } else if (tag == GPSTIMESTAMP) { checkType (tag, type, RATIONAL); checkCount (tag, count, 3); _gpsTimeStamp = readRationalArray (count, value); } else if (tag == GPSTRACK) { checkType (tag, type, RATIONAL); checkCount (tag, count, 1); _gpsTrack = readRational (count, value); } else if (tag == GPSTRACKREF) { checkType (tag, type, ASCII); checkCount (tag, count, 2); _gpsTrackRef = readASCII (count, value); } else if (tag == GPSVERSIONID) { checkType (tag, type, BYTE); checkCount (tag, count, 4); _gpsVersionID = readByteArray (type, count, value); } else { _info.setMessage (new ErrorMessage ("Unknown GPSInfo IFD tag", "Tag = " + tag, value)); } } catch (IOException e) { throw new TiffException ("Read error for tag" + tag, value); } } } jhove/classes/edu/harvard/hul/ois/jhove/module/tiff/GeoTiffStrings.java0000644000707400001440000015202010771562702025401 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.tiff; /** * This class contains indexed string arrays for the * various keys that are used by GeoTIFF. It contains * no code and never needs to be instantiated. */ public class GeoTiffStrings { /* GeoTIFF general codes * Derived from European Petroleum Survey Group (ESPG) Geodesy parameters, * v2.1, June 2, 1995 * Copied 2003-08-18 from */ /* 6.3.1.1 Model type codes */ public final static int[] MODELTYPE_INDEX ={ 0, 1, 2, 3, 32767 }; public final static String[] MODELTYPE = { "Undefined", "Projection coordinate system", "Geographic latitude-longitude system (FGDC geographic)", "Geocentric (X,Y,Z) coordinate system (FGDC planar-projected)", "User-defined" }; /* 6.3.1.2 Raster type codes */ public final static int[] RASTERTYPE_INDEX = { 0, 1, 2, 32767 }; public final static String[] RASTERTYPE = { "Undefined", "Pixel is area", "Pixel is point", "User-defined" }; /* 6.3.1.3 Linear unit codes */ public final static int[] LINEARUNITS_INDEX = { 0, 9001, 9002, 9003, 9004, 9005, 9006, 9007, 9008, 9009, 9010, 9011, 9012, 9013, 9014, 9015, 32767 }; public final static String[] LINEARUNITS = { "Undefined", "Meter", "Foot", "Foot (US survey)", "Foot (modified American)", "Foot (Clarke)", "Foot (Indian)", "Link", "Link (Benoit)", "Link (Sears)", "Chain (Benoit)", "Chain (Sears)", "Yard (Sears)", "Yard (Indian)", "Fathom", "Mile (International nautical)", "User-defined" }; /* 6.3.1.4 Angular unit codes */ public final static int[] ANGULARUNITS_INDEX = { 0, 9101, 9102, 9103, 9104, 9105, 9106, 9107, 9108, 32767 }; public final static String[] ANGULARUNITS = { "Undefined", "Radian", "Degree", "Arc minute", "Second", "Grad", "Gon", "DMS", "DMS hemisphere", "User-defined" }; /* 6.3.2.1 Geographic CS type codes */ public final static int[] GEOGRAPHICS_INDEX = { 0, 4001, 4002, 4003, 4004, 4005, 4006, 4007, 4008, 4009, 4010, 4011, 4012, 4013, 4014, 4015, 4016, 4017, 4018, 4019, 4020, 4021, 4022, 4023, 4024, 4025, 4026, 4027, 4028, 4029, 4030, 4031, 4032, 4033, 4034, 4035, 4201, 4202, 4203, 4204, 4205, 4206, 4207, 4208, 4209, 4210, 4211, 4212, 4213, 4214, 4215, 4216, 4217, 4218, 4219, 4220, 4221, 4222, 4223, 4224, 4225, 4226, 4227, 4228, 4229, 4230, 4231, 4232, 4233, 4234, 4235, 4236, 4237, 4238, 4239, 4240, 4241, 4242, 4243, 4244, 4245, 4246, 4247, 4248, 4249, 4250, 4251, 4252, 4253, 4254, 4255, 4256, 4257, 4258, 4259, 4260, 4261, 4262, 4263, 4264, 4265, 4266, 4267, 4268, 4269, 4270, 4271, 4272, 4273, 4274, 4275, 4276, 4277, 4278, 4279, 4280, 4281, 4282, 4283, 4284, 4285, 4286, 4287, 4288, 4289, 4290, 4291, 4292, 4293, 4294, 4295, 4296, 4297, 4298, 4299, 4300, 4301, 4302, 4303, 4304, 4305, 4306, 4307, 4308, 4309, 4310, 4311, 4312, 4313, 4314, 4315, 4801, 4802, 4803, 4804, 4805, 4806, 4807, 4808, 4809, 4810, 4811, 4812, 4813, 4901, 4902, 32767 }; public final static String[] GEOGRAPHICS = { "Undefined", "Ellipsoid Airy 1830", "Ellipsoid Airy Modified 1849", "Ellipsoid Australian National Spheroid", "Ellipsoid Bessel 1841", "Ellipsoid Bessel modified", "Ellipsoid Bessel Namibia", "Ellipsoid Clarke 1858", "Ellipsoid Clarke 1866", "Ellipsoid Clarke 1866 Michigan", "Ellipsoid Clarke 1880 Benoit", "Ellipsoid Clarke 1880 IGN", "Ellipsoid Clarke 1880 RGS", "Ellipsoid Clarke 1880 arc", "Ellipsoid Clarke 1880 SGA 1922", "Ellipsoid Everest 1830-1937 adjustment", "Ellipsoid Everest 1830-1967 definition", "Ellipsoid Everest 1830-1975 definition", "Ellipsoid Everest 1830 modified", "Ellipsoid GRS 1980", "Ellipsoid Helmert 1906", "Ellipsoid Indonesian national spheroid", "Ellipsoid international 1924", "Ellipsoid international 1967", "Ellipsoid Krassowsky 1940", "Ellipsoid NWL9D", "Ellipsoid NWL10D", "Ellipsoid Plessis 1817", "Ellipsoid Struve 1860", "Ellipsoid war office", "Ellipsoid WGS84", "Ellipsoid GEM10C", "Ellipsoid OSU86F", "Ellipsoid OSU91A", "Ellipsoid Clarke 1880", "Ellipsoid sphere", "Adindan", "AGD66", "AGD84", "Ain el Abd", "Afgooye", "Agadez", "Lisbon", "Aratu", "Arc 1950", "Arc 1960", "Batavia", "Barbados", "Beduaram", "Beijing 1954", "Belge 1950", "Bermuda 1957", "Bern 1898", "Bogota", "Bukit Rimpah", "Camacupa", "Campo Inchauspe", "Cape", "Carthage", "Chua", "Corrego Alegre", "Cote d Ivoire", "Deir ez Zor", "Douala", "Egypt 1907", "ED50", "ED87", "Fahud", "Gandajika 1970", "Garoua", "Guyane Francaise", "Hu Tzu Shan", "HD72", "ID74", "Indian 1954", "Indian 1975", "Jamaica 1875", "JAD69", "Kalianpur", "Kandawala", "Kertau", "KOC", "La Canoa", "PSAD56", "Lake", "Leigon", "Liberia 1964", "Lome", "Luzon 1911", "Hito XVIII 1963", "Herat north", "Mahe 1971", "Makassar", "EUREF89", "Malongo 1987", "Manoca", "Merchich", "Massawa", "Minna", "Mhast", "Monte Mario", "M poraloko", "NAD27", "NAD Michigan", "NAD83", "Nahrwan 1967", "Naparima 1972", "GD49", "NGO 1948", "Datum 73", "NTF", "NSWC 9Z 2", "OSGB 1936", "OSGB70", "OS SN80", "Padang", "Palestine 1923", "Pointe Noire", "GDA94", "Pulkovo 1942", "Qatar", "Qatar 1948", "Qornoq", "Loma Quintana", "Amersfoort", "RT38", "SAD69", "Sapper Hill 1943", "Schwarzeck", "Segora", "Serindung", "Sudan", "Tananarive", "Timbalai 1948", "TM65", "TM75", "Tokyo", "Trinidad 1903", "TC 1948", "Voirol 1875", "Voirol Unifie", "Bern 1938", "Nord Sahara 1959", "Stockholm 1938", "Yacare", "Yoff", "Zanderij", "MGI", "Belge 1972", "DHDN", "Conakry 1905", "WGS 72", "WGS 72BE", "WGS 84", "Bern 1898 Bern", "Bogota Bogota", "Lisbon Lisbon", "Makassar Jakarta", "MGI Ferro", "Monte Mario Rome", "NTF Paris", "Padang Jakarta", "Belge 1950 Brussels", "Tananarive Paris", "Voirol 1875 Paris", "Voirol Unifie Paris", "Batavia Jakarta", "ATF Paris", "NDG Paris", "User-defined" }; /* 6.3.2.2 Geodetic datum codes */ public final static int[] GEODETICDATUM_INDEX = { 6001, 6002, 6003, 6004, 6005, 6006, 6007, 6008, 6009, 6010, 6011, 6012, 6013, 6014, 6015, 6016, 6017, 6018, 6019, 6020, 6021, 6022, 6023, 6024, 6025, 6026, 6027, 6028, 6029, 6030, 6031, 6032, 6033, 6034, 6035, 6201, 6202, 6203, 6204, 6205, 6206, 6207, 6208, 6209, 6210, 6211, 6212, 6213, 6214, 6215, 6216, 6217, 6218, 6219, 6220, 6221, 6222, 6223, 6224, 6225, 6226, 6227, 6228, 6229, 6230, 6231, 6232, 6233, 6234, 6235, 6236, 6237, 6238, 6239, 6240, 6241, 6242, 6243, 6244, 6245, 6246, 6247, 6248, 6249, 6250, 6251, 6252, 6253, 6254, 6255, 6256, 6257, 6258, 6259, 6260, 6261, 6262, 6263, 6264, 6265, 6266, 6267, 6268, 6269, 6270, 6271, 6272, 6273, 6274, 6275, 6276, 6277, 6278, 6279, 6280, 6281, 6282, 6283, 6284, 6285, 6286, 6287, 6288, 6289, 6290, 6291, 6292, 6293, 6294, 6295, 6296, 6297, 6298, 6299, 6300, 6301, 6302, 6303, 6304, 6305, 6306, 6307, 6308, 6309, 6310, 6311, 6312, 6313, 6314, 6315, 6322, 6324, 6326, 6901, 6902, 32767 }; public final static String[] GEODETICDATUM = { "Undefined", "Ellipsoid Airy 1830", "Ellipsoid Airy modified 1849", "Ellipsoid Australian national spheroid", "Ellipsoid Bessel 1841", "Ellipsoid Bessel modified", "Ellipsoid Bessel Namibia", "Ellipsoid Clarke 1858", "Ellipsoid Clarke 1866", "Ellipsoid Clarke 1866 Michigan", "Ellipsoid Clarke 1880 Benoit", "Ellipsoid Clarke 1880 IGN", "Ellipsoid Clarke 1880 RGS", "Ellipsoid Clarke 1880 arc", "Ellipsoid Clarke 1880 SGA1922", "Ellipsoid Everest 1830-1937 adjustment", "Ellipsoid Everest 1830-1967 definition", "Ellipsoid Everest 1830-1975 definition", "Ellipsoid Everest 1830 modified", "Ellipsoid GRS1980", "Ellipsoid Helmert1906", "Ellipsoid Indonesian national spheroid", "Ellipsoid international 1924", "Ellipsoid international 1967", "Ellipsoid Krassowsky 1960", "Ellipsoid NWL9D", "Ellipsoid NWL10D", "Ellipsoid Plessis 1817", "Ellipsoid Struve 1860", "Ellipsoid war office", "Ellipsoid WGS84", "Ellipsoid GEM10C", "Ellipsoid OSU86F", "Ellipsoid OSU91A", "Ellipsoid Clarke 1880", "Ellipsoid sphere", "Adindan", "Australian geodetic 1966", "Australian geodetic 1984", "Ain el Abd 1970", "Afgooye", "Agadez", "Lisbon", "Aratu", "Arc 1950", "Arc 1960", "Batavia", "Barbados", "Beduaram", "Beijing 1954", "Reseau National Belge 1950", "Bermuda 1957", "Bern 1898", "Bogota", "Bukit Rimpah", "Camacupa", "Campo Inchauspe", "Cape", "Carthage", "Chua", "Corrego Alegre", "Cote d'Ivoire", "Deir ez Zor", "Douala", "Egypt 1907", "European 1950", "European 1987", "Fahud", "Gandajika 1970", "Garoua", "Guyane Francaise", "Hu Tzu Shan", "Hungarian 1972", "Indonesian 1974", "Indian 1954", "Indian 1975", "Jamaica 1875", "Jamaica 1969", "Kalianpur", "Kandawala", "Kertau", "Kuwait Oil Company", "La Canoa", "Provisional S American 1956", "Lake", "Leigon", "Liberia 1964", "Lome", "Luzon 1911", "Hito XVIII 1963", "Herat north", "Mahe 1971", "Makassar", "European reference system 1989", "Malongo 1987", "Manoca", "Merchich", "Massawa", "Minna", "Mhast", "Monte Mario", "M poraloko", "North American 1927", "NAD Michigan", "north American 1983", "Nahrwan 1967", "Naparima 1972", "New Zealand geodetic 1949", "NGO 1948", "73", "Nouvelle triangulation Francaise", "NSWC 9Z 2", "OSGB 1936", "OSGB 1970 SN", "OS SN 1980", "Padang 1884", "Palestine 1923", "Pointe Noire", "Geocentric of Australia 1994", "Pulkovo 1942", "Qatar", "Qatar 1948", "Qornoq", "Loma Quintana", "Amersfoort", "RT38", "south American 1969", "Sapper Hill 1943", "Schwarzeck", "Segora", "Serindung", "Sudan", "Tananarive 1925", "Timbalai 1948", "TM65", "TM75", "Tokyo", "Trinidad 1903", "Trucial Coast 1948", "Voirol 1875", "Voirol Unifie 1960", "Bern 1938", "Nord Sahara 1959", "Stockholm 1938", "Yacare", "Yoff", "Zanderij", "Militar Geographische Institut", "Reseau National Belge 1972", "Deutsche Hauptdreiecksnetz", "Conakry 1905", "WGS72", "WGS72 transit broadcast ephemeris", "WGS84", "Ancienne triangulation Francaise", "Nord de Guerre", "User-defined" }; /* 6.3.2.3 Ellipsoid codes */ public final static int[] ELLIPSOID_INDEX = { 0,7001, 7002, 7003, 7004, 7005, 7006, 7007, 7008, 7009, 7010, 7011, 7012, 7013, 7014, 7015, 7016, 7017, 7018, 7019, 7020, 7021, 7022, 7023, 7024, 7025, 7026, 7027, 7028, 7029, 7030, 7031, 7032, 7033, 7034, 7035, 32767 }; public final static String[] ELLIPSOID = { "Undefined", "Airy 1830", "Airy modified 1849", "Australian national spheroid", "Bessel 1841", "Bessel modified", "Bessel Namibia", "Clarke 1858", "Clarke 1866", "Clarke 1866 Michigan", "Clarke 1880 Benoit", "Clarke 1880 IGN", "Clarke 1880 RGS", "Clarke 1880 arc", "Clarke 1880 SGA 1922", "Everest 1830-1937 adjustment", "Everest 1830-1967 definition", "Everest 1830-1975 definition", "Everest 1830 modified", "GRS 1980", "Helmert 1906", "Indonesian national spheroid", "International 1924", "International 1967", "Krassowsky 1940", "NWL 9D", "NWL 10D", "Plessis 1817", "Struve 1860", "War Office", "WGS 84", "GEM 10C", "OSU86F", "OSU91A", "Clarke 1880", "Sphere", "User-defined" }; /* 6.3.2.4 Prime meridian codes */ public final static int[] PRIMEMERIDIAN_INDEX = { 0, 8901, 8902, 8903, 8904, 8905, 8906, 8907, 8908, 8909, 8910, 8911, 32767 }; public final static String[] PRIMEMERIDIAN = { "Undefined", "Greenwich", "Lisbon", "Paris", "Bogota", "Madrid", "Rome", "Bern", "Jakarta", "Ferro", "Brussels", "Stockholm", "User-defined" }; /* 6.3.3.1 Projected CS type codes */ public final static int[] PROJECTEDCSTYPE_INDEX = { 0, 20137, 20138, 20248, 20249, 20250, 20251, 20252, 20253, 20254, 20255, 20256, 20257, 20258, 20348, 20349, 20350, 20351, 20352, 20353, 20354, 20355, 20356, 20357, 20358, 20437, 20438, 20439, 20499, 20538, 20539, 20700, 20822, 20823, 20824, 20973, 20975, 20977, 20979, 20981, 20983, 20985, 20987, 20989, 20991, 20993, 20995, 21100, 21148, 21149, 21150, 21413, 21414, 21415, 21416, 21417, 21418, 21419, 21420, 21421, 21422, 21423, 21473, 21474, 21475, 21476, 21477, 21478, 21479, 21480, 21481, 21482, 21483, 21500, 21790, 21817, 21818, 21891, 21892, 21893, 21894, 22032, 22033, 22191, 22192, 22193, 22194, 22195, 22196, 22197, 22332, 22391, 22392, 22523, 22524, 22832, 22992, 22993, 22994, 23028, 23029, 23030, 23031, 23032, 23033, 23034, 23035, 23036, 23037, 23038, 23239, 23240, 23433, 23846, 23847, 23848, 23849, 23850, 23851, 23852, 23853, 23886, 23887, 23888, 23889, 23890, 23891, 23892, 23893, 23894, 23947, 23948, 24047, 24048, 24100, 24200, 24370, 24371, 24372, 24373, 24374, 24382, 24383, 24384, 24500, 24547, 24548, 24720, 24721, 24818, 24819, 24820, 24821, 24877, 24878, 24879, 24880, 24891, 24892, 24893, 25000, 25231, 25391, 25392, 25393, 25394, 25395, 25700, 25932, 26191, 26192, 26193, 26237, 26331, 26332, 26391, 26392, 26393, 26432, 26591, 26592, 26632, 26692, 26703, 26704, 26705, 26706, 26707, 26708, 26709, 26710, 26711, 26712, 26713, 26714, 26715, 26716, 26717, 26718, 26719, 26720, 26721, 26722, 26729, 26730, 26731, 26732, 26733, 26734, 26735, 26736, 26737, 26738, 26739, 26740, 26741, 26742, 26743, 26744, 26745, 26746, 26747, 26748, 26749, 26750, 26751, 26752, 26753, 26754, 26755, 26756, 26757, 26758, 26759, 26760, 26761, 26762, 26763, 26764, 26765, 26766, 26767, 26768, 26769, 26770, 26771, 26772, 26773, 26774, 26774, 26775, 26775, 26776, 26776, 26777, 26777, 26778, 26779, 26780, 26781, 26782, 26783, 26784, 26785, 26786, 26787, 26788, 26789, 26790, 26791, 26792, 26793, 26794, 26795, 26796, 26797, 26798, 26801, 26802, 26803, 26903, 26904, 26905, 26906, 26907, 26908, 26909, 26910, 26911, 26912, 26913, 26914, 26915, 26916, 26917, 26918, 26919, 26920, 26921, 26922, 26923, 26929, 26930, 26931, 26932, 26933, 26934, 26935, 26936, 26937, 26938, 26939, 26940, 26941, 26942, 26943, 26944, 26945, 26946, 26948, 26949, 26950, 26951, 26952, 26953, 26954, 26955, 26956, 26957, 26958, 26959, 26960, 26961, 26962, 26963, 26964, 26965, 26966, 26967, 26968, 26969, 26970, 26971, 26972, 26973, 26974, 26975, 26976, 26977, 26978, 26979, 26980, 26981, 26982, 26983, 26984, 26985, 26986, 26987, 26988, 26989, 26990, 26991, 26992, 26993, 26994, 26995, 26996, 26997, 26998, 27038, 27039, 27040, 27120, 27200, 27291, 27292, 27429, 27500, 27581, 27582, 27583, 27591, 27592, 27593, 27700, 28232, 28348, 28349, 28350, 28351, 28352, 28353, 28354, 28355, 28356, 28357, 28358, 28404, 28405, 28406, 28407, 28408, 28409, 28410, 28411, 28412, 28413, 28414, 28415, 28416, 28417, 28418, 28419, 28420, 28421, 28422, 28423, 28424, 28425, 28426, 28427, 28428, 28429, 28430, 28431, 28432, 28464, 28465, 28466, 28467, 28468, 28469, 28470, 28471, 28472, 28473, 28474, 28475, 28476, 28477, 28478, 28479, 28480, 28481, 28482, 28483, 28484, 28485, 28486, 28487, 28488, 28489, 28490, 28491, 28492, 28600, 28991, 28992, 29118, 29119, 29120, 29121, 29122, 29177, 29178, 29179, 29180, 29181, 29182, 29183, 29184, 29185, 29220, 29221, 29333, 29635, 29636, 29700, 29738, 29739, 29800, 29849, 29850, 29900, 30200, 30339, 30340, 30491, 30492, 30591, 30592, 30600, 30729, 30730, 30731, 30732, 31028, 31121, 31291, 31292, 31293, 31300, 31491, 31492, 31493, 31494, 31495, 32001, 32002, 32003, 32005, 32006, 32007, 32008, 32009, 32010, 32011, 32012, 32013, 32014, 32015, 32016, 32017, 32018, 32019, 32020, 32021, 32022, 32023, 32024, 32025, 32026, 32027, 32028, 32029, 32030, 32031, 32033, 32034, 32035, 32036, 32037, 32038, 32039, 32040, 32041, 32042, 32043, 32044, 32045, 32046, 32047, 32048, 32049, 32050, 32051, 32052, 32053, 32054, 32055, 32056, 32057, 32058, 32059, 32060, 32100, 32104, 32107, 32108, 32109, 32110, 32111, 32112, 32113, 32114, 32115, 32116, 32117, 32118, 32119, 32120, 32121, 32122, 32123, 32124, 32125, 32126, 32127, 32128, 32129, 32130, 32133, 32134, 32135, 32136, 32137, 32138, 32139, 32140, 32141, 32142, 32143, 32144, 32145, 32146, 32147, 32148, 32149, 32150, 32151, 32152, 32153, 32154, 32155, 32156, 32157, 32158, 32161, 32201, 32202, 32203, 32204, 32205, 32206, 32207, 32208, 32209, 32210, 32211, 32212, 32213, 32214, 32215, 32216, 32217, 32218, 32219, 32220, 32221, 32222, 32223, 32224, 32225, 32226, 32227, 32228, 32229, 32230, 32231, 32232, 32233, 32234, 32235, 32236, 32237, 32238, 32239, 32240, 32241, 32242, 32243, 32244, 32245, 32246, 32247, 32248, 32249, 32250, 32251, 32252, 32253, 32254, 32255, 32256, 32257, 32258, 32259, 32260, 32301, 32302, 32303, 32304, 32305, 32306, 32307, 32308, 32309, 32310, 32311, 32312, 32313, 32314, 32315, 32316, 32317, 32318, 32319, 32320, 32321, 32322, 32323, 32324, 32325, 32326, 32327, 32328, 32329, 32330, 32331, 32332, 32333, 32334, 32335, 32336, 32337, 32338, 32339, 32340, 32341, 32342, 32343, 32344, 32345, 32346, 32347, 32348, 32349, 32350, 32351, 32352, 32353, 32354, 32355, 32356, 32357, 32358, 32359, 32360, 32401, 32402, 32403, 32404, 32405, 32406, 32407, 32408, 32409, 32410, 32411, 32412, 32413, 32414, 32415, 32416, 32417, 32418, 32419, 32420, 32421, 32422, 32423, 32424, 32425, 32426, 32427, 32428, 32429, 32430, 32431, 32432, 32433, 32434, 32435, 32436, 32437, 32438, 32439, 32440, 32441, 32442, 32443, 32444, 32445, 32446, 32447, 32448, 32449, 32450, 32451, 32452, 32453, 32454, 32455, 32456, 32457, 32458, 32459, 32460, 32501, 32502, 32503, 32504, 32505, 32506, 32507, 32508, 32509, 32510, 32511, 32512, 32513, 32514, 32515, 32516, 32517, 32518, 32519, 32520, 32521, 32522, 32523, 32524, 32525, 32526, 32527, 32528, 32529, 32530, 32531, 32532, 32533, 32534, 32535, 32536, 32537, 32538, 32539, 32540, 32541, 32542, 32543, 32544, 32545, 32546, 32547, 32548, 32549, 32550, 32551, 32552, 32553, 32554, 32555, 32556, 32557, 32558, 32559, 32560, 32601, 32602, 32603, 32604, 32605, 32606, 32607, 32608, 32609, 32610, 32611, 32612, 32613, 32614, 32615, 32616, 32617, 32618, 32619, 32620, 32621, 32622, 32623, 32624, 32625, 32626, 32627, 32628, 32629, 32630, 32631, 32632, 32633, 32634, 32635, 32636, 32637, 32638, 32639, 32640, 32641, 32642, 32643, 32644, 32645, 32646, 32647, 32648, 32649, 32650, 32651, 32652, 32653, 32654, 32655, 32656, 32657, 32658, 32659, 32660, 32701, 32702, 32703, 32704, 32705, 32706, 32707, 32708, 32709, 32710, 32711, 32712, 32713, 32714, 32715, 32716, 32717, 32718, 32719, 32720, 32721, 32722, 32723, 32724, 32725, 32726, 32727, 32728, 32729, 32730, 32731, 32732, 32733, 32734, 32735, 32736, 32737, 32738, 32739, 32740, 32741, 32742, 32743, 32744, 32745, 32746, 32747, 32748, 32749, 32750, 32751, 32752, 32753, 32754, 32755, 32756, 32757, 32758, 32759, 32760, 32767 }; public final static String[] PROJECTEDCSTYPE = { "Undefined", "Adindan UTM zone 37N", "Adindan UTM zone 38N", "AGD66 AMG zone 48", "AGD66 AMG zone 49", "AGD66 AMG zone 50", "AGD66 AMG zone 51", "AGD66 AMG zone 52", "AGD66 AMG zone 53", "AGD66 AMG zone 54", "AGD66 AMG zone 55", "AGD66 AMG zone 56", "AGD66 AMG zone 57", "AGD66 AMG zone 58", "AGD84 AMG zone 48", "AGD84 AMG zone 49", "AGD84 AMG zone 50", "AGD84 AMG zone 51", "AGD84 AMG zone 52", "AGD84 AMG zone 53", "AGD84 AMG zone 54", "AGD84 AMG zone 55", "AGD84 AMG zone 56", "AGD84 AMG zone 57", "AGD84 AMG zone 58", "Ain el Abd UTM zone 37N", "Ain el Abd UTM zone 38N", "Ain el Abd UTM zone 39N", "Ain el Abd Bahrain Grid", "Afgooye UTM zone 38N", "Afgooye UTM zone 39N", "Lisbon Portugese Grid", "Aratu UTM zone 22S", "Aratu UTM zone 23S", "Aratu UTM zone 24S", "Arc 1950 Lo13", "Arc 1950 Lo15", "Arc 1950 Lo17", "Arc 1950 Lo19", "Arc 1950 Lo21", "Arc 1950 Lo23", "Arc 1950 Lo25", "Arc 1950 Lo27", "Arc 1950 Lo29", "Arc 1950 Lo31", "Arc 1950 Lo33", "Arc 1950 Lo35", "Batavia NEIEZ", "Batavia UTM zone 48S", "Batavia UTM zone 49S", "Batavia UTM zone 50S", "Beijing Gauss zone 13", "Beijing Gauss zone 14", "Beijing Gauss zone 15", "Beijing Gauss zone 16", "Beijing Gauss zone 17", "Beijing Gauss zone 18", "Beijing Gauss zone 19", "Beijing Gauss zone 20", "Beijing Gauss zone 21", "Beijing Gauss zone 22", "Beijing Gauss zone 23", "Beijing Gauss 13N", "Beijing Gauss 14N", "Beijing Gauss 15N", "Beijing Gauss 16N", "Beijing Gauss 17N", "Beijing Gauss 18N", "Beijing Gauss 19N", "Beijing Gauss 20N", "Beijing Gauss 21N", "Beijing Gauss 22N", "Beijing Gauss 23N", "Belge Lambert 50", "Bern 1898 Swiss Old", "Bogota UTM zone 17N", "Bogota UTM zone 18N", "Bogota Colombia 3W", "Bogota Colombia Bogota", "Bogota Colombia 3E", "Bogota Colombia 6E", "Camacupa UTM 32S", "Camacupa UTM 33S", "C Inchauspe Argentina 1", "C Inchauspe Argentina 2", "C Inchauspe Argentina 3", "C Inchauspe Argentina 4", "C Inchauspe Argentina 5", "C Inchauspe Argentina 6", "C Inchauspe Argentina 7", "Carthage UTM zone 32N", "Carthage Nord Tunisie", "Carthage Sud Tunisie", "Corrego Alegre UTM 23S", "Corrego Alegre UTM 24S", "Douala UTM zone 32N", "Egypt 1907 red belt", "Egypt 1907 purple belt", "Egypt 1907 ext purple", "ED50 UTM zone 28N", "ED50 UTM zone 29N", "ED50 UTM zone 30N", "ED50 UTM zone 31N", "ED50 UTM zone 32N", "ED50 UTM zone 33N", "ED50 UTM zone 34N", "ED50 UTM zone 35N", "ED50 UTM zone 36N", "ED50 UTM zone 37N", "ED50 UTM zone 38N", "Fahud UTM zone 39N", "Fahud UTM zone 40N", "Garoua UTM zone 33N", "ID74 UTM zone 46N", "ID74 UTM zone 47N", "ID74 UTM zone 48N", "ID74 UTM zone 49N", "ID74 UTM zone 50N", "ID74 UTM zone 51N", "ID74 UTM zone 52N", "ID74 UTM zone 53N", "ID74 UTM zone 46S", "ID74 UTM zone 47S", "ID74 UTM zone 48S", "ID74 UTM zone 49S", "ID74 UTM zone 50S", "ID74 UTM zone 51S", "ID74 UTM zone 52S", "ID74 UTM zone 53S", "ID74 UTM zone 54S", "Indian 1954 UTM 47N", "Indian 1954 UTM 48N", "Indian 1975 UTM 47N", "Indian 1975 UTM 48N", "Jamaica 1875 old grid", "JAD69 Jamaica grid", "Kalianpur India 0", "Kalianpur India I", "Kalianpur India IIa", "Kalianpur India IIIa", "Kalianpur India IVa", "Kalianpur India IIb", "Kalianpur India IIIb", "Kalianpur India IVb", "Kertau Singapore grid", "Kertau UTM zone 47N", "Kertau UTM zone 48N", "La Canoa UTM zone 20N", "La Canoa UTM zone 21N", "PSAD56 UTM zone 18N", "PSAD56 UTM zone 19N", "PSAD56 UTM zone 20N", "PSAD56 UTM zone 21N", "PSAD56 UTM zone 17S", "PSAD56 UTM zone 18S", "PSAD56 UTM zone 19S", "PSAD56 UTM zone 20S", "PSAD56 Peru west zone", "PSAD56 Peru central", "PSAD56 Peru east zone", "Leigon Ghana grid", "Lome UTM zone 31N", "Luzon Philippines I", "Luzon Philippines II", "Luzon Philippines III", "Luzon Philippines IV", "Luzon Philippines V", "Makassar NEIEZ", "Malongo 1987 UTM 32S", "Merchich Nord Maroc", "Merchich Sud Maroc", "Merchich Sahara", "Massawa UTM zone 37N", "Minna UTM zone 31N", "Minna UTM zone 32N", "Minna Nigeria west", "Minna Nigeria mid belt", "Minna Nigeria east", "Mhast UTM zone 32S", "Monte Mario Italy 1", "Monte Mario Italy 2", "M poraloko UTM 32N", "M poraloko UTM 32S", "NAD27 UTM zone 3N", "NAD27 UTM zone 4N", "NAD27 UTM zone 5N", "NAD27 UTM zone 6N", "NAD27 UTM zone 7N", "NAD27 UTM zone 8N", "NAD27 UTM zone 9N", "NAD27 UTM zone 10N", "NAD27 UTM zone 11N", "NAD27 UTM zone 12N", "NAD27 UTM zone 13N", "NAD27 UTM zone 14N", "NAD27 UTM zone 15N", "NAD27 UTM zone 16N", "NAD27 UTM zone 17N", "NAD27 UTM zone 18N", "NAD27 UTM zone 19N", "NAD27 UTM zone 20N", "NAD27 UTM zone 21N", "NAD27 UTM zone 22N", "NAD27 Alabama east", "NAD27 Alabama west", "NAD27 Alaska zone 1", "NAD27 Alaska zone 2", "NAD27 Alaska zone 3", "NAD27 Alaska zone 4", "NAD27 Alaska zone 5", "NAD27 Alaska zone 6", "NAD27 Alaska zone 7", "NAD27 Alaska zone 8", "NAD27 Alaska zone 9", "NAD27 Alaska zone 10", "NAD27 California I", "NAD27 California II", "NAD27 California III", "NAD27 California IV", "NAD27 California V", "NAD27 California VI", "NAD27 California VII", "NAD27 Arizona east", "NAD27 Arizona central", "NAD27 Arizona west", "NAD27 Arkansas north", "NAD27 Arkansas south", "NAD27 Colorado north", "NAD27 Colorado central", "NAD27 Colorado south", "NAD27 Connecticut", "NAD27 Delaware", "NAD27 Florida east", "NAD27 Florida west", "NAD27 Florida north", "NAD27 Hawaii zone 1", "NAD27 Hawaii zone 2", "NAD27 Hawaii zone 3", "NAD27 Hawaii zone 4", "NAD27 Hawaii zone 5", "NAD27 Georgia east", "NAD27 Georgia west", "NAD27 Idaho east", "NAD27 Idaho central", "NAD27 Idaho west", "NAD27 Illinois east", "NAD27 Illinois west", "NAD27 Indiana east", "NAD27 BLM 14N feet", "NAD27 Indiana west", "NAD27 BLM 15N feet", "NAD27 Iowa north", "NAD27 BLM 16N feet", "NAD27 Iowa south", "NAD27 BLM 17N feet", "NAD27 Kansas north", "NAD27 Kansas south", "NAD27 Kentucky north", "NAD27 Kentucky south", "NAD27 Louisiana north", "NAD27 Louisiana south", "NAD27 Maine east", "NAD27 Maine west", "NAD27 Maryland", "NAD27 Massachusetts", "NAD27 Massachusetts Is", "NAD27 Michigan north", "NAD27 Michigan central", "NAD27 Michigan south", "NAD27 Minnesota north", "NAD27 Minnesota Cent", "NAD27 Minnesota south", "NAD27 Mississippi east", "NAD27 Mississippi west", "NAD27 Missouri east", "NAD27 Missouri central", "NAD27 Missouri west", "NAD Michigan Michigan east", "NAD Michigan Michigan old central", "NAD Michigan Michigan west", "NAD83 UTM zone 3N", "NAD83 UTM zone 4N", "NAD83 UTM zone 5N", "NAD83 UTM zone 6N", "NAD83 UTM zone 7N", "NAD83 UTM zone 8N", "NAD83 UTM zone 9N", "NAD83 UTM zone 10N", "NAD83 UTM zone 11N", "NAD83 UTM zone 12N", "NAD83 UTM zone 13N", "NAD83 UTM zone 14N", "NAD83 UTM zone 15N", "NAD83 UTM zone 16N", "NAD83 UTM zone 17N", "NAD83 UTM zone 18N", "NAD83 UTM zone 19N", "NAD83 UTM zone 20N", "NAD83 UTM zone 21N", "NAD83 UTM zone 22N", "NAD83 UTM zone 23N", "NAD83 Alabama east", "NAD83 Alabama west", "NAD83 Alaska zone 1", "NAD83 Alaska zone 2", "NAD83 Alaska zone 3", "NAD83 Alaska zone 4", "NAD83 Alaska zone 5", "NAD83 Alaska zone 6", "NAD83 Alaska zone 7", "NAD83 Alaska zone 8", "NAD83 Alaska zone 9", "NAD83 Alaska zone 10", "NAD83 California 1", "NAD83 California 2", "NAD83 California 3", "NAD83 California 4", "NAD83 California 5", "NAD83 California 6", "NAD83 Arizona east", "NAD83 Arizona central", "NAD83 Arizona west", "NAD83 Arkansas north", "NAD83 Arkansas south", "NAD83 Colorado north", "NAD83 Colorado central", "NAD83 Colorado south", "NAD83 Connecticut", "NAD83 Delaware", "NAD83 Florida east", "NAD83 Florida west", "NAD83 Florida north", "NAD83 Hawaii zone 1", "NAD83 Hawaii zone 2", "NAD83 Hawaii zone 3", "NAD83 Hawaii zone 4", "NAD83 Hawaii zone 5", "NAD83 Georgia east", "NAD83 Georgia west", "NAD83 Idaho east", "NAD83 Idaho central", "NAD83 Idaho west", "NAD83 Illinois east", "NAD83 Illinois west", "NAD83 Indiana east", "NAD83 Indiana west", "NAD83 Iowa north", "NAD83 Iowa south", "NAD83 Kansas north", "NAD83 Kansas south", "NAD83 Kentucky north", "NAD83 Kentucky south", "NAD83 Louisiana north", "NAD83 Louisiana south", "NAD83 Maine east", "NAD83 Maine west", "NAD83 Maryland", "NAD83 Massachusetts", "NAD83 Massachusetts Is", "NAD83 Michigan north", "NAD83 Michigan central", "NAD83 Michigan south", "NAD83 Minnesota north", "NAD83 Minnesota central", "NAD83 Minnesota south", "NAD83 Mississippi east", "NAD83 Mississippi west", "NAD83 Missouri east", "NAD83 Missouri central", "NAD83 Missouri west", "Nahrwan 1967 UTM 38N", "Nahrwan 1967 UTM 39N", "Nahrwan 1967 UTM 40N", "Naparima UTM 20N", "GD49 NZ Map Grid", "GD49 north Island Grid", "GD49 south Island Grid", "Datum 73 UTM zone 29N", "ATF Nord de Guerre", "NTF France I", "NTF France II", "NTF France III", "NTF Nord France", "NTF Centre France", "NTF Sud France", "British National Grid", "Point Noire UTM 32S", "GDA94 MGA zone 48", "GDA94 MGA zone 49", "GDA94 MGA zone 50", "GDA94 MGA zone 51", "GDA94 MGA zone 52", "GDA94 MGA zone 53", "GDA94 MGA zone 54", "GDA94 MGA zone 55", "GDA94 MGA zone 56", "GDA94 MGA zone 57", "GDA94 MGA zone 58", "Pulkovo Gauss zone 4", "Pulkovo Gauss zone 5", "Pulkovo Gauss zone 6", "Pulkovo Gauss zone 7", "Pulkovo Gauss zone 8", "Pulkovo Gauss zone 9", "Pulkovo Gauss zone 10", "Pulkovo Gauss zone 11", "Pulkovo Gauss zone 12", "Pulkovo Gauss zone 13", "Pulkovo Gauss zone 14", "Pulkovo Gauss zone 15", "Pulkovo Gauss zone 16", "Pulkovo Gauss zone 17", "Pulkovo Gauss zone 18", "Pulkovo Gauss zone 19", "Pulkovo Gauss zone 20", "Pulkovo Gauss zone 21", "Pulkovo Gauss zone 22", "Pulkovo Gauss zone 23", "Pulkovo Gauss zone 24", "Pulkovo Gauss zone 25", "Pulkovo Gauss zone 26", "Pulkovo Gauss zone 27", "Pulkovo Gauss zone 28", "Pulkovo Gauss zone 29", "Pulkovo Gauss zone 30", "Pulkovo Gauss zone 31", "Pulkovo Gauss zone 32", "Pulkovo Gauss 4N", "Pulkovo Gauss 5N", "Pulkovo Gauss 6N", "Pulkovo Gauss 7N", "Pulkovo Gauss 8N", "Pulkovo Gauss 9N", "Pulkovo Gauss 10N", "Pulkovo Gauss 11N", "Pulkovo Gauss 12N", "Pulkovo Gauss 13N", "Pulkovo Gauss 14N", "Pulkovo Gauss 15N", "Pulkovo Gauss 16N", "Pulkovo Gauss 17N", "Pulkovo Gauss 18N", "Pulkovo Gauss 19N", "Pulkovo Gauss 20N", "Pulkovo Gauss 21N", "Pulkovo Gauss 22N", "Pulkovo Gauss 23N", "Pulkovo Gauss 24N", "Pulkovo Gauss 25N", "Pulkovo Gauss 26N", "Pulkovo Gauss 27N", "Pulkovo Gauss 28N", "Pulkovo Gauss 29N", "Pulkovo Gauss 30N", "Pulkovo Gauss 31N", "Pulkovo Gauss 32N", "Qatar National Grid", "RD Netherlands Old", "RD Netherlands New", "SAD69 UTM zone 18N", "SAD69 UTM zone 19N", "SAD69 UTM zone 20N", "SAD69 UTM zone 21N", "SAD69 UTM zone 22N", "SAD69 UTM zone 17S", "SAD69 UTM zone 18S", "SAD69 UTM zone 19S", "SAD69 UTM zone 20S", "SAD69 UTM zone 21S", "SAD69 UTM zone 22S", "SAD69 UTM zone 23S", "SAD69 UTM zone 24S", "SAD69 UTM zone 25S", "Sapper Hill UTM 20S", "Sapper Hill UTM 21S", "Schwarzeck UTM 33S", "Sudan UTM zone 35N", "Sudan UTM zone 36N", "Tananarive Laborde", "Tananarive UTM 38S", "Tananarive UTM 39S", "Timbalai 1948 Borneo", "Timbalai 1948 UTM 49N", "Timbalai 1948 UTM 50N", "TM65 Irish Nat Grid", "Trinidad 1903 Trinidad", "TC 1948 UTM zone 39N", "TC 1948 UTM zone 40N", "Voirol N Algerie ancien", "Voirol S Algerie ancien", "Voirol Unifie N Algerie", "Voirol Unifie S Algerie", "Bern 1938 Swiss New", "Nord Sahara UTM 29N", "Nord Sahara UTM 30N", "Nord Sahara UTM 31N", "Nord Sahara UTM 32N", "Yoff UTM zone 28N", "Zanderij UTM zone 21N", "MGI Austria west", "MGI Austria central", "MGI Austria east", "Belge Lambert 72", "DHDN Germany zone 1", "DHDN Germany zone 2", "DHDN Germany zone 3", "DHDN Germany zone 4", "DHDN Germany zone 5", "NAD27 Montana north", "NAD27 Montana central", "NAD27 Montana south", "NAD27 Nebraska north", "NAD27 Nebraska south", "NAD27 Nevada east", "NAD27 Nevada central", "NAD27 Nevada west", "NAD27 New Hampshire", "NAD27 New Jersey", "NAD27 New Mexico east", "NAD27 New Mexico Cent", "NAD27 New Mexico west", "NAD27 New York east", "NAD27 New York central", "NAD27 New York west", "NAD27 New York Long Is", "NAD27 north Carolina", "NAD27 north Dakota N", "NAD27 north Dakota S", "NAD27 Ohio north", "NAD27 Ohio south", "NAD27 Oklahoma north", "NAD27 Oklahoma south", "NAD27 Oregon north", "NAD27 Oregon south", "NAD27 Pennsylvania N", "NAD27 Pennsylvania S", "NAD27 Rhode Island", "NAD27 south Carolina N", "NAD27 south Carolina S", "NAD27 south Dakota N", "NAD27 south Dakota S", "NAD27 Tennessee", "NAD27 Texas north", "NAD27 Texas north Cen", "NAD27 Texas central", "NAD27 Texas south Cen", "NAD27 Texas south", "NAD27 Utah north", "NAD27 Utah central", "NAD27 Utah south", "NAD27 Vermont", "NAD27 Virginia north", "NAD27 Virginia south", "NAD27 Washington north", "NAD27 Washington south", "NAD27 west Virginia N", "NAD27 west Virginia S", "NAD27 Wisconsin north", "NAD27 Wisconsin central", "NAD27 Wisconsin south", "NAD27 Wyoming east", "NAD27 Wyoming E central", "NAD27 Wyoming W central", "NAD27 Wyoming west", "NAD27 Puerto Rico", "NAD27 St Croix", "NAD83 Montana", "NAD83 Nebraska", "NAD83 Nevada east", "NAD83 Nevada central", "NAD83 Nevada west", "NAD83 New Hampshire", "NAD83 New Jersey", "NAD83 New Mexico east", "NAD83 New Mexico central", "NAD83 New Mexico west", "NAD83 New York east", "NAD83 New York central", "NAD83 New York west", "NAD83 New York Long Is", "NAD83 north Carolina", "NAD83 north Dakota N", "NAD83 north Dakota S", "NAD83 Ohio north", "NAD83 Ohio south", "NAD83 Oklahoma north", "NAD83 Oklahoma south", "NAD83 Oregon north", "NAD83 Oregon south", "NAD83 Pennsylvania N", "NAD83 Pennsylvania S", "NAD83 Rhode Island", "NAD83 south Carolina", "NAD83 south Dakota N", "NAD83 south Dakota S", "NAD83 Tennessee", "NAD83 Texas north", "NAD83 Texas north Cen", "NAD83 Texas central", "NAD83 Texas south Cen", "NAD83 Texas south", "NAD83 Utah north", "NAD83 Utah central", "NAD83 Utah south", "NAD83 Vermont", "NAD83 Virginia north", "NAD83 Virginia south", "NAD83 Washington north", "NAD83 Washington south", "NAD83 west Virginia N", "NAD83 west Virginia S", "NAD83 Wisconsin north", "NAD83 Wisconsin Cen", "NAD83 Wisconsin south", "NAD83 Wyoming east", "NAD83 Wyoming E Cen", "NAD83 Wyoming W Cen", "NAD83 Wyoming west", "NAD83 Puerto Rico Virgin Is", "WGS72 UTM zone 1N", "WGS72 UTM zone 2N", "WGS72 UTM zone 3N", "WGS72 UTM zone 4N", "WGS72 UTM zone 5N", "WGS72 UTM zone 6N", "WGS72 UTM zone 7N", "WGS72 UTM zone 8N", "WGS72 UTM zone 9N", "WGS72 UTM zone 10N", "WGS72 UTM zone 11N", "WGS72 UTM zone 12N", "WGS72 UTM zone 13N", "WGS72 UTM zone 14N", "WGS72 UTM zone 15N", "WGS72 UTM zone 16N", "WGS72 UTM zone 17N", "WGS72 UTM zone 18N", "WGS72 UTM zone 19N", "WGS72 UTM zone 20N", "WGS72 UTM zone 21N", "WGS72 UTM zone 22N", "WGS72 UTM zone 23N", "WGS72 UTM zone 24N", "WGS72 UTM zone 25N", "WGS72 UTM zone 26N", "WGS72 UTM zone 27N", "WGS72 UTM zone 28N", "WGS72 UTM zone 29N", "WGS72 UTM zone 30N", "WGS72 UTM zone 31N", "WGS72 UTM zone 32N", "WGS72 UTM zone 33N", "WGS72 UTM zone 34N", "WGS72 UTM zone 35N", "WGS72 UTM zone 36N", "WGS72 UTM zone 37N", "WGS72 UTM zone 38N", "WGS72 UTM zone 39N", "WGS72 UTM zone 40N", "WGS72 UTM zone 41N", "WGS72 UTM zone 42N", "WGS72 UTM zone 43N", "WGS72 UTM zone 44N", "WGS72 UTM zone 45N", "WGS72 UTM zone 46N", "WGS72 UTM zone 47N", "WGS72 UTM zone 48N", "WGS72 UTM zone 49N", "WGS72 UTM zone 50N", "WGS72 UTM zone 51N", "WGS72 UTM zone 52N", "WGS72 UTM zone 53N", "WGS72 UTM zone 54N", "WGS72 UTM zone 55N", "WGS72 UTM zone 56N", "WGS72 UTM zone 57N", "WGS72 UTM zone 58N", "WGS72 UTM zone 59N", "WGS72 UTM zone 60N", "WGS72 UTM zone 1S", "WGS72 UTM zone 2S", "WGS72 UTM zone 3S", "WGS72 UTM zone 4S", "WGS72 UTM zone 5S", "WGS72 UTM zone 6S", "WGS72 UTM zone 7S", "WGS72 UTM zone 8S", "WGS72 UTM zone 9S", "WGS72 UTM zone 10S", "WGS72 UTM zone 11S", "WGS72 UTM zone 12S", "WGS72 UTM zone 13S", "WGS72 UTM zone 14S", "WGS72 UTM zone 15S", "WGS72 UTM zone 16S", "WGS72 UTM zone 17S", "WGS72 UTM zone 18S", "WGS72 UTM zone 19S", "WGS72 UTM zone 20S", "WGS72 UTM zone 21S", "WGS72 UTM zone 22S", "WGS72 UTM zone 23S", "WGS72 UTM zone 24S", "WGS72 UTM zone 25S", "WGS72 UTM zone 26S", "WGS72 UTM zone 27S", "WGS72 UTM zone 28S", "WGS72 UTM zone 29S", "WGS72 UTM zone 30S", "WGS72 UTM zone 31S", "WGS72 UTM zone 32S", "WGS72 UTM zone 33S", "WGS72 UTM zone 34S", "WGS72 UTM zone 35S", "WGS72 UTM zone 36S", "WGS72 UTM zone 37S", "WGS72 UTM zone 38S", "WGS72 UTM zone 39S", "WGS72 UTM zone 40S", "WGS72 UTM zone 41S", "WGS72 UTM zone 42S", "WGS72 UTM zone 43S", "WGS72 UTM zone 44S", "WGS72 UTM zone 45S", "WGS72 UTM zone 46S", "WGS72 UTM zone 47S", "WGS72 UTM zone 48S", "WGS72 UTM zone 49S", "WGS72 UTM zone 50S", "WGS72 UTM zone 51S", "WGS72 UTM zone 52S", "WGS72 UTM zone 53S", "WGS72 UTM zone 54S", "WGS72 UTM zone 55S", "WGS72 UTM zone 56S", "WGS72 UTM zone 57S", "WGS72 UTM zone 58S", "WGS72 UTM zone 59S", "WGS72 UTM zone 60S", "WGS72BE UTM zone 1N", "WGS72BE UTM zone 2N", "WGS72BE UTM zone 3N", "WGS72BE UTM zone 4N", "WGS72BE UTM zone 5N", "WGS72BE UTM zone 6N", "WGS72BE UTM zone 7N", "WGS72BE UTM zone 8N", "WGS72BE UTM zone 9N", "WGS72BE UTM zone 10N", "WGS72BE UTM zone 11N", "WGS72BE UTM zone 12N", "WGS72BE UTM zone 13N", "WGS72BE UTM zone 14N", "WGS72BE UTM zone 15N", "WGS72BE UTM zone 16N", "WGS72BE UTM zone 17N", "WGS72BE UTM zone 18N", "WGS72BE UTM zone 19N", "WGS72BE UTM zone 20N", "WGS72BE UTM zone 21N", "WGS72BE UTM zone 22N", "WGS72BE UTM zone 23N", "WGS72BE UTM zone 24N", "WGS72BE UTM zone 25N", "WGS72BE UTM zone 26N", "WGS72BE UTM zone 27N", "WGS72BE UTM zone 28N", "WGS72BE UTM zone 29N", "WGS72BE UTM zone 30N", "WGS72BE UTM zone 31N", "WGS72BE UTM zone 32N", "WGS72BE UTM zone 33N", "WGS72BE UTM zone 34N", "WGS72BE UTM zone 35N", "WGS72BE UTM zone 36N", "WGS72BE UTM zone 37N", "WGS72BE UTM zone 38N", "WGS72BE UTM zone 39N", "WGS72BE UTM zone 40N", "WGS72BE UTM zone 41N", "WGS72BE UTM zone 42N", "WGS72BE UTM zone 43N", "WGS72BE UTM zone 44N", "WGS72BE UTM zone 45N", "WGS72BE UTM zone 46N", "WGS72BE UTM zone 47N", "WGS72BE UTM zone 48N", "WGS72BE UTM zone 49N", "WGS72BE UTM zone 50N", "WGS72BE UTM zone 51N", "WGS72BE UTM zone 52N", "WGS72BE UTM zone 53N", "WGS72BE UTM zone 54N", "WGS72BE UTM zone 55N", "WGS72BE UTM zone 56N", "WGS72BE UTM zone 57N", "WGS72BE UTM zone 58N", "WGS72BE UTM zone 59N", "WGS72BE UTM zone 60N", "WGS72BE UTM zone 1S", "WGS72BE UTM zone 2S", "WGS72BE UTM zone 3S", "WGS72BE UTM zone 4S", "WGS72BE UTM zone 5S", "WGS72BE UTM zone 6S", "WGS72BE UTM zone 7S", "WGS72BE UTM zone 8S", "WGS72BE UTM zone 9S", "WGS72BE UTM zone 10S", "WGS72BE UTM zone 11S", "WGS72BE UTM zone 12S", "WGS72BE UTM zone 13S", "WGS72BE UTM zone 14S", "WGS72BE UTM zone 15S", "WGS72BE UTM zone 16S", "WGS72BE UTM zone 17S", "WGS72BE UTM zone 18S", "WGS72BE UTM zone 19S", "WGS72BE UTM zone 20S", "WGS72BE UTM zone 21S", "WGS72BE UTM zone 22S", "WGS72BE UTM zone 23S", "WGS72BE UTM zone 24S", "WGS72BE UTM zone 25S", "WGS72BE UTM zone 26S", "WGS72BE UTM zone 27S", "WGS72BE UTM zone 28S", "WGS72BE UTM zone 29S", "WGS72BE UTM zone 30S", "WGS72BE UTM zone 31S", "WGS72BE UTM zone 32S", "WGS72BE UTM zone 33S", "WGS72BE UTM zone 34S", "WGS72BE UTM zone 35S", "WGS72BE UTM zone 36S", "WGS72BE UTM zone 37S", "WGS72BE UTM zone 38S", "WGS72BE UTM zone 39S", "WGS72BE UTM zone 40S", "WGS72BE UTM zone 41S", "WGS72BE UTM zone 42S", "WGS72BE UTM zone 43S", "WGS72BE UTM zone 44S", "WGS72BE UTM zone 45S", "WGS72BE UTM zone 46S", "WGS72BE UTM zone 47S", "WGS72BE UTM zone 48S", "WGS72BE UTM zone 49S", "WGS72BE UTM zone 50S", "WGS72BE UTM zone 51S", "WGS72BE UTM zone 52S", "WGS72BE UTM zone 53S", "WGS72BE UTM zone 54S", "WGS72BE UTM zone 55S", "WGS72BE UTM zone 56S", "WGS72BE UTM zone 57S", "WGS72BE UTM zone 58S", "WGS72BE UTM zone 59S", "WGS72BE UTM zone 60S", "WGS84 UTM zone 1N", "WGS84 UTM zone 2N", "WGS84 UTM zone 3N", "WGS84 UTM zone 4N", "WGS84 UTM zone 5N", "WGS84 UTM zone 6N", "WGS84 UTM zone 7N", "WGS84 UTM zone 8N", "WGS84 UTM zone 9N", "WGS84 UTM zone 10N", "WGS84 UTM zone 11N", "WGS84 UTM zone 12N", "WGS84 UTM zone 13N", "WGS84 UTM zone 14N", "WGS84 UTM zone 15N", "WGS84 UTM zone 16N", "WGS84 UTM zone 17N", "WGS84 UTM zone 18N", "WGS84 UTM zone 19N", "WGS84 UTM zone 20N", "WGS84 UTM zone 21N", "WGS84 UTM zone 22N", "WGS84 UTM zone 23N", "WGS84 UTM zone 24N", "WGS84 UTM zone 25N", "WGS84 UTM zone 26N", "WGS84 UTM zone 27N", "WGS84 UTM zone 28N", "WGS84 UTM zone 29N", "WGS84 UTM zone 30N", "WGS84 UTM zone 31N", "WGS84 UTM zone 32N", "WGS84 UTM zone 33N", "WGS84 UTM zone 34N", "WGS84 UTM zone 35N", "WGS84 UTM zone 36N", "WGS84 UTM zone 37N", "WGS84 UTM zone 38N", "WGS84 UTM zone 39N", "WGS84 UTM zone 40N", "WGS84 UTM zone 41N", "WGS84 UTM zone 42N", "WGS84 UTM zone 43N", "WGS84 UTM zone 44N", "WGS84 UTM zone 45N", "WGS84 UTM zone 46N", "WGS84 UTM zone 47N", "WGS84 UTM zone 48N", "WGS84 UTM zone 49N", "WGS84 UTM zone 50N", "WGS84 UTM zone 51N", "WGS84 UTM zone 52N", "WGS84 UTM zone 53N", "WGS84 UTM zone 54N", "WGS84 UTM zone 55N", "WGS84 UTM zone 56N", "WGS84 UTM zone 57N", "WGS84 UTM zone 58N", "WGS84 UTM zone 59N", "WGS84 UTM zone 60N", "WGS84 UTM zone 1S", "WGS84 UTM zone 2S", "WGS84 UTM zone 3S", "WGS84 UTM zone 4S", "WGS84 UTM zone 5S", "WGS84 UTM zone 6S", "WGS84 UTM zone 7S", "WGS84 UTM zone 8S", "WGS84 UTM zone 9S", "WGS84 UTM zone 10S", "WGS84 UTM zone 11S", "WGS84 UTM zone 12S", "WGS84 UTM zone 13S", "WGS84 UTM zone 14S", "WGS84 UTM zone 15S", "WGS84 UTM zone 16S", "WGS84 UTM zone 17S", "WGS84 UTM zone 18S", "WGS84 UTM zone 19S", "WGS84 UTM zone 20S", "WGS84 UTM zone 21S", "WGS84 UTM zone 22S", "WGS84 UTM zone 23S", "WGS84 UTM zone 24S", "WGS84 UTM zone 25S", "WGS84 UTM zone 26S", "WGS84 UTM zone 27S", "WGS84 UTM zone 28S", "WGS84 UTM zone 29S", "WGS84 UTM zone 30S", "WGS84 UTM zone 31S", "WGS84 UTM zone 32S", "WGS84 UTM zone 33S", "WGS84 UTM zone 34S", "WGS84 UTM zone 35S", "WGS84 UTM zone 36S", "WGS84 UTM zone 37S", "WGS84 UTM zone 38S", "WGS84 UTM zone 39S", "WGS84 UTM zone 40S", "WGS84 UTM zone 41S", "WGS84 UTM zone 42S", "WGS84 UTM zone 43S", "WGS84 UTM zone 44S", "WGS84 UTM zone 45S", "WGS84 UTM zone 46S", "WGS84 UTM zone 47S", "WGS84 UTM zone 48S", "WGS84 UTM zone 49S", "WGS84 UTM zone 50S", "WGS84 UTM zone 51S", "WGS84 UTM zone 52S", "WGS84 UTM zone 53S", "WGS84 UTM zone 54S", "WGS84 UTM zone 55S", "WGS84 UTM zone 56S", "WGS84 UTM zone 57S", "WGS84 UTM zone 58S", "WGS84 UTM zone 59S", "WGS84 UTM zone 60S", "User-defined" }; /* 6.3.3.2 Projection codes */ public final static int[] PROJECTION_INDEX = { 0, 10101, 10102, 10131, 10132, 10201, 10202, 10203, 10231, 10232, 10233, 10301, 10302, 10331, 10332, 10401, 10402, 10403, 10404, 10405, 10406, 10407, 10431, 10432, 10433, 10434, 10435, 10436, 10501, 10502, 10503, 10531, 10532, 10533, 10600, 10630, 10700, 10730, 10901, 10902, 10903, 10931, 10932, 10933, 11001, 11002, 11031, 11032, 11101, 11102, 11103, 11131, 11132, 11133, 11201, 11202, 11231, 11232, 11301, 11302, 11331, 11332, 11401, 11402, 11431, 11432, 11501, 11502, 11531, 11532, 11601, 11602, 11631, 11632, 11701, 11702, 11731, 11732, 11801, 11802, 11831, 11832, 11900, 11930, 12001, 12002, 12031, 12032, 12101, 12102, 12103, 12111, 12112, 12113, 12141, 12142, 12143, 12201, 12202, 12203, 12231, 12232, 12233, 12301, 12302, 12331, 12332, 12401, 12402, 12403, 12431, 12432, 12433, 12501, 12502, 12503, 12530, 12601, 12602, 12630, 12701, 12702, 12703, 12731, 12732, 12733, 12800, 12830, 12900, 12930, 13001, 13002, 13003, 13031, 13032, 13033, 13101, 13102, 13103, 13104, 13131, 13132, 13133, 13134, 13200, 13230, 13301, 13302, 13331, 13332, 13401, 13402, 13431, 13432, 13501, 13502, 13531, 13532, 13601, 13602, 13631, 13632, 13701, 13702, 13731, 13732, 13800, 13830, 13901, 13902, 13930, 14001, 14002, 14031, 14032, 14100, 14130, 14201, 14202, 14203, 14204, 14205, 14231, 14232, 14233, 14234, 14235, 14301, 14302, 14303, 14331, 14332, 14333, 14400, 14430, 14501, 14502, 14531, 14532, 14601, 14602, 14631, 14632, 14701, 14702, 14731, 14732, 14801, 14802, 14803, 14831, 14832, 14833, 14901, 14902, 14903, 14904, 14931, 14932, 14933, 14934, 15001, 15002, 15003, 15004, 15005, 15006, 15007, 15008, 15009, 15010, 15031, 15032, 15033, 15034, 15035, 15036, 15037, 15038, 15039, 15040, 15101, 15102, 15103, 15104, 15105, 15131, 15132, 15133, 15134, 15135, 15201, 15202, 15230, 15914, 15915, 15916, 15917, 17348, 17349, 17350, 17351, 17352, 17353, 17354, 17355, 17356, 17357, 17358, 17448, 17449, 17450, 17451, 17452, 17453, 17454, 17455, 17456, 17457, 17458, 18031, 18032, 18033, 18034, 18035, 18036, 18037, 18051, 18052, 18053, 18054, 18072, 18073, 18074, 18141, 18142, 19900, 19905, 19912, 32767 }; public final static String[] PROJECTION = { "Undefined", "Alabama CS27 east", "Alabama CS27 west", "Alabama CS83 east", "Alabama CS83 west", "Arizona coordinate system east", "Arizona coordinate system central", "Arizona coordinate system west", "Arizona CS83 east", "Arizona CS83 central", "Arizona CS83 west", "Arkansas CS27 north", "Arkansas CS27 south", "Arkansas CS83 north", "Arkansas CS83 south", "California CS27 I", "California CS27 II", "California CS27 III", "California CS27 IV", "California CS27 V", "California CS27 VI", "California CS27 VII", "California CS83 1", "California CS83 2", "California CS83 3", "California CS83 4", "California CS83 5", "California CS83 6", "Colorado CS27 north", "Colorado CS27 central", "Colorado CS27 south", "Colorado CS83 north", "Colorado CS83 central", "Colorado CS83 south", "Connecticut CS27", "Connecticut CS83", "Delaware CS27", "Delaware CS83", "Florida CS27 east", "Florida CS27 west", "Florida CS27 north", "Florida CS83 east", "Florida CS83 west", "Florida CS83 north", "Georgia CS27 east", "Georgia CS27 west", "Georgia CS83 east", "Georgia CS83 west", "Idaho CS27 east", "Idaho CS27 central", "Idaho CS27 west", "Idaho CS83 east", "Idaho CS83 central", "Idaho CS83 west", "Illinois CS27 east", "Illinois CS27 west", "Illinois CS83 east", "Illinois CS83 west", "Indiana CS27 east", "Indiana CS27 west", "Indiana CS83 east", "Indiana CS83 west", "Iowa CS27 north", "Iowa CS27 south", "Iowa CS83 north", "Iowa CS83 south", "Kansas CS27 north", "Kansas CS27 south", "Kansas CS83 north", "Kansas CS83 south", "Kentucky CS27 north", "Kentucky CS27 south", "Kentucky CS83 north", "Kentucky CS83 south", "Louisiana CS27 north", "Louisiana CS27 south", "Louisiana CS83 north", "Louisiana CS83 south", "Maine CS27 east", "Maine CS27 west", "Maine CS83 east", "Maine CS83 west", "Maryland CS27", "Maryland CS83", "Massachusetts CS27 mainland", "Massachusetts CS27 island", "Massachusetts CS83 mainland", "Massachusetts CS83 island", "Michigan state plane east", "Michigan state plane old central", "Michigan state plane west", "Michigan CS27 north", "Michigan CS27 central", "Michigan CS27 south", "Michigan CS83 north", "Michigan CS83 central", "Michigan CS83 south", "Minnesota CS27 north", "Minnesota CS27 central", "Minnesota CS27 south", "Minnesota CS83 north", "Minnesota CS83 central", "Minnesota CS83 south", "Mississippi CS27 east", "Mississippi CS27 west", "Mississippi CS83 east", "Mississippi CS83 west", "Missouri CS27 east", "Missouri CS27 central", "Missouri CS27 west", "Missouri CS83 east", "Missouri CS83 central", "Missouri CS83 west", "Montana CS27 north", "Montana CS27 central", "Montana CS27 south", "Montana CS83", "Nebraska CS27 north", "Nebraska CS27 south", "Nebraska CS83", "Nevada CS27 east", "Nevada CS27 central", "Nevada CS27 west", "Nevada CS83 east", "Nevada CS83 central", "Nevada CS83 west", "New Hampshire CS27", "New Hampshire CS83", "New Jersey CS27", "New Jersey CS83", "New Mexico CS27 east", "New Mexico CS27 central", "New Mexico CS27 west", "New Mexico CS83 east", "New Mexico CS83 central", "New Mexico CS83 west", "New York CS27 east", "New York CS27 central", "New York CS27 west", "New York CS27 Long Island", "New York CS83 east", "New York CS83 central", "New York CS83 west", "New York CS83 Long Island", "north Carolina CS27", "north Carolina CS83", "north Dakota CS27 north", "north Dakota CS27 south", "north Dakota CS83 north", "north Dakota CS83 south", "Ohio CS27 north", "Ohio CS27 south", "Ohio CS83 north", "Ohio CS83 south", "Oklahoma CS27 north", "Oklahoma CS27 south", "Oklahoma CS83 north", "Oklahoma CS83 south", "Oregon CS27 north", "Oregon CS27 south", "Oregon CS83 north", "Oregon CS83 south", "Pennsylvania CS27 north", "Pennsylvania CS27 south", "Pennsylvania CS83 north", "Pennsylvania CS83 south", "Rhode Island CS27", "Rhode Island CS83", "South Carolina CS27 north", "South Carolina CS27 south", "South Carolina CS83", "South Dakota CS27 north", "South Dakota CS27 south", "South Dakota CS83 north", "South Dakota CS83 south", "Tennessee CS27", "Tennessee CS83", "Texas CS27 north", "Texas CS27 north central", "Texas CS27 central", "Texas CS27 south central", "Texas CS27 south", "Texas CS83 north", "Texas CS83 north central", "Texas CS83 central", "Texas CS83 south central", "Texas CS83 south", "Utah CS27 north", "Utah CS27 central", "Utah CS27 south", "Utah CS83 north", "Utah CS83 central", "Utah CS83 south", "Vermont CS27", "Vermont CS83", "Virginia CS27 north", "Virginia CS27 south", "Virginia CS83 north", "Virginia CS83 south", "Washington CS27 north", "Washington CS27 south", "Washington CS83 north", "Washington CS83 south", "west Virginia CS27 north", "west Virginia CS27 south", "west Virginia CS83 north", "west Virginia CS83 south", "Wisconsin CS27 north", "Wisconsin CS27 central", "Wisconsin CS27 south", "Wisconsin CS83 north", "Wisconsin CS83 central", "Wisconsin CS83 south", "Wyoming CS27 east", "Wyoming CS27 east central", "Wyoming CS27 west central", "Wyoming CS27 west", "Wyoming CS83 east", "Wyoming CS83 east central", "Wyoming CS83 west central", "Wyoming CS83 west", "Alaska CS27 1", "Alaska CS27 2", "Alaska CS27 3", "Alaska CS27 4", "Alaska CS27 5", "Alaska CS27 6", "Alaska CS27 7", "Alaska CS27 8", "Alaska CS27 9", "Alaska CS27 10", "Alaska CS83 1", "Alaska CS83 2", "Alaska CS83 3", "Alaska CS83 4", "Alaska CS83 5", "Alaska CS83 6", "Alaska CS83 7", "Alaska CS83 8", "Alaska CS83 9", "Alaska CS83 10", "Hawaii CS27 1", "Hawaii CS27 2", "Hawaii CS27 3", "Hawaii CS27 4", "Hawaii CS27 5", "Hawaii CS83 1", "Hawaii CS83 2", "Hawaii CS83 3", "Hawaii CS83 4", "Hawaii CS83 5", "Puerto Rico CS27", "St Croix", "Puerto Rico Virgin Is", "BLM 14N feet", "BLM 15N feet", "BLM 16N feet", "BLM 17N feet", "Map grid of Australia 48", "Map grid of Australia 49", "Map grid of Australia 50", "Map grid of Australia 51", "Map grid of Australia 52", "Map grid of Australia 53", "Map grid of Australia 54", "Map grid of Australia 55", "Map grid of Australia 56", "Map grid of Australia 57", "Map grid of Australia 58", "Australian map grid 48", "Australian map grid 49", "Australian map grid 50", "Australian map grid 51", "Australian map grid 52", "Australian map grid 53", "Australian map grid 54", "Australian map grid 55", "Australian map grid 56", "Australian map grid 57", "Australian map grid 58", "Argentina 1", "Argentina 2", "Argentina 3", "Argentina 4", "Argentina 5", "Argentina 6", "Argentina 7", "Colombia 3W", "Colombia Bogota", "Colombia 3E", "Colombia 6E", "Egypt red belt", "Egypt purple belt", "Extended Purple Belt", "New Zealand north island nat grid", "New Zealand south island nat grid", "Bahrain grid", "Netherlands E Indies Equatorial", "RSO Borneo", "User-defined" }; /* 6.3.3.3 Coordinate transformation codes */ public final static int[] COORDINATETRANSFORMATION_INDEX = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 32767 }; public final static String[] COORDINATETRANSFORMATION = { "Undefined", "Transverse Mercator", "Transverse Mercator modified Alaska", "Oblique Mercator", "Oblique Mercator Laborde", "Oblique Mercator Rosenmund", "Oblique Mercator Spherical", "Mercator", "Lambert Conformal Conic 2SP", "Lambert Conformal conic Helmert", "Lambert Azimuthal equal area", "Albers equal area", "Azimuthal equidistant", "Equidistant conic", "Stereographic", "Polar stereographic", "Oblique stereographic", "Equirectangular", "Cassini Soldner", "Gnomonic", "Miller cylindrical", "Orthographic", "Polyconic", "Robinson", "Sinusoidal", "Van Der Grinten", "New Zealand map grid", "Transverse Mercator south oriented", "User-defined" }; /* 6.3.4.1 Vertical CS type codes */ public final static int[] VERTICALCSTYPE_INDEX = { 0, 5001, 5002, 5003, 5004, 5005, 5006, 5007, 5008, 5010, 5011, 5012, 5013, 5014, 5015, 5016, 5017, 5018, 5019, 5020, 5021, 5022, 5023, 5024, 5025, 5026, 5027, 5028, 5029, 5030, 5031, 5032, 5033, 5101, 5102, 5103, 5104, 5105, 5106, 32767 }; public final static String[] VERTICALCSTYPE = { "Undefined", "Airy 1830 ellipsoid", "Airy modified 1849 ellipsoid", "ANS ellipsoid", "Bessel 1841 ellipsoid", "Bessel Modified ellipsoid", "Bessel Namibia ellipsoid", "Clarke 1858 ellipsoid", "Clarke 1866 ellipsoid", "Clarke 1880 Benoit ellipsoid", "Clarke 1880 IGN ellipsoid", "Clarke 1880 RGS ellipsoid", "Clarke 1880 arc ellipsoid", "Clarke 1880 SGA 1922 ellipsoid", "Everest 1830 1937 adjustment ellipsoid", "Everest 1830 1967 definition ellipsoid", "Everest 1830 1975 definition ellipsoid", "Everest 1830 modified ellipsoid", "GRS 1980 ellipsoid", "Helmert 1906 ellipsoid", "INS ellipsoid", "International 1924 ellipsoid", "International 1967 ellipsoid", "Krassowsky 1940 ellipsoid", "NWL 9D ellipsoid", "NWL 10D ellipsoid", "Plessis 1817 ellipsoid", "Struve 1860 ellipsoid", "War Office ellipsoid", "WGS 84 ellipsoid", "GEM 10C ellipsoid", "OSU86F ellipsoid", "OSU91A ellipsoid", "Newlyn", "North American vertical datum 1929", "North American vertical datum 1988", "Yellow Sea 1956", "Baltic Sea", "Caspian Sea", "User-defined" }; /* 6.3.4.2 Vertical CS datum codes */ public final static int[] VERTICALCSDATUM_INDEX = { 0, 32767 }; public final static String[] VERTICALCSDATUM = { "Undefined", "User-defined" }; /* Private constructor to prevent instantiation */ private GeoTiffStrings () { } } jhove/classes/edu/harvard/hul/ois/jhove/module/tiff/GlobalParametersIFD.java0000644000707400001440000001303511205004335026237 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.tiff; import edu.harvard.hul.ois.jhove.*; import java.io.*; import java.util.*; /** * Encapsulation of a GlobalParameters IFD, as defined by * TIFF/FX, RFC 2301. * * @author Gary McGath * */ public class GlobalParametersIFD extends IFD { /****************************************************************** * PRIVATE INSTANCE FIELDS. ******************************************************************/ private int _profileType; private int _faxProfile; private int _codingMethods; private String _versionYear; private int _modeNumber; /** Tiff/FX-specific tags. */ public static final int PROFILETYPE = 401, FAXPROFILE = 402, CODINGMETHODS = 403, VERSIONYEAR = 404, MODENUMBER = 405; private static final String [] PROFILETYPE_L = { "Unspecified", "Group 3 Fax" }; private static final String [] FAXPROFILE_L = { "does not conform to a profile defined for TIFF for facsimile", "Minimal black & white lossless, Profile S", "Extended black & white lossless, Profile F", "Lossless JBIG black & white, Profile J", "Lossy color and grayscale, Profile C", "Lossless color and grayscale, Profile L", "Mixed Raster Content, Profile M" }; private static final String [] CODINGMETHODS_L = { "unspecified compression", "1-dimensional coding, ITU-T Rec. T.4 (MH - Modified Huffman)", "2-dimensional coding, ITU-T Rec. T.4 (MR - Modified Read)", "2-dimensional coding, ITU-T Rec. T.6 (MMR - Modified MR)", "ITU-T Rec. T.82 coding, using ITU-T Rec. T.85 (JBIG)", "ITU-T Rec. T.81 (Baseline JPEG)", "ITU-T Rec. T.82 coding, using ITU-T Rec. T.43 (JBIG color)" }; /****************************************************************** * CLASS CONSTRUCTOR. ******************************************************************/ /** Instantiate a GlobalParametersIFD object. * @param offset IFD offset * @param raf TIFF file * @param bigEndian True if big-endian file */ public GlobalParametersIFD (long offset, RepInfo info, RandomAccessFile raf, boolean bigEndian) { super (offset, info, raf, bigEndian); _profileType = NULL; _faxProfile = NULL; _codingMethods = NULL; _versionYear = null; _modeNumber = NULL; } /****************************************************************** * PUBLIC INSTANCE METHODS. ******************************************************************/ /** Get the IFD properties. */ public Property getProperty(boolean rawOutput) throws TiffException { List entries = new LinkedList (); if (_profileType != NULL) { entries.add (addIntegerProperty ("ProfileType", _profileType, PROFILETYPE_L, rawOutput)); } if (_faxProfile != NULL) { entries.add (addIntegerProperty ("FaxProfile", _faxProfile, FAXPROFILE_L, rawOutput)); } if (_codingMethods != NULL) { entries.add (addBitmaskProperty ("CodingMethods", _codingMethods, CODINGMETHODS_L, rawOutput)); } if (_versionYear != null) { entries.add (new Property ("VersionYear", PropertyType.STRING, _versionYear)); } if (_modeNumber != NULL) { entries.add (new Property ("ModeNumber", PropertyType.INTEGER, new Integer (_modeNumber))); } return propertyHeader ("GlobalParameterIFD", entries); } /** Lookup an IFD tag. */ public void lookupTag (int tag, int type, long count, long value) throws TiffException { try { if (tag == PROFILETYPE) { checkType (tag, type, LONG); checkCount (tag, count, 1); _profileType = (int) readLong(type, count, value); } else if (tag == FAXPROFILE) { checkType (tag, type, BYTE); checkCount (tag, count, 1); _faxProfile = (int) readByte(type, count, value); } else if (tag == CODINGMETHODS) { checkType (tag, type, LONG); checkCount (tag, count, 1); _codingMethods = (int) readLong(type, count, value); } else if (tag == VERSIONYEAR) { checkType (tag, type, BYTE); checkCount (tag, count, 4); _versionYear = readASCII(count, value); } else if (tag == MODENUMBER) { checkType (tag, type, BYTE); checkCount (tag, count, 1); _modeNumber = (int) readByte(type, count, value); } } catch (IOException e) { throw new TiffException ("Read error for tag " + tag, value); } } } jhove/classes/edu/harvard/hul/ois/jhove/module/tiff/IFD.java0000644000707400001440000007667611510365321023122 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.tiff; import edu.harvard.hul.ois.jhove.*; import java.io.*; import java.text.*; import java.util.*; /** * Encapsulation of a TIFF image file directory (IFD). */ public abstract class IFD { /****************************************************************** * DEBUGGING FIELDS. * All debugging fields should be set to false for release code. ******************************************************************/ /* Set to true to allow out-of-sequence tags. */ private static final boolean debug_allowoutofsequence = false; /****************************************************************** * PUBLIC CLASS FIELDS. ******************************************************************/ /** Standard TIFF IFD. */ public static final int TIFF = 0; /** Exif IFD. */ public static final int EXIF = 1; /** Exif Interoperability IFD. */ public static final int INTEROPERABILITY = 2; /** GPSInfo IFD. */ public static final int GPSINFO = 3; /** Global parameters IFD. */ public static final int GLOBALPARAMETERS = 4; /** Undefined value for integer tags. */ public static final int NULL = -1; /****************************************************************** * PRIVATE CLASS FIELDS. ******************************************************************/ /* TIFF data types. */ /** TIFF BYTE (unsigned 8-bit) type. */ public static final int BYTE = 1; /** TIFF ASCII type. */ public static final int ASCII = 2; /** TIFF SHORT (unsigned 16-bit) type. */ public static final int SHORT = 3; /** TIFF LONG (unsigned 32-bit) type. */ public static final int LONG = 4; /** TIFF RATIONAL (two LONGs) type. */ public static final int RATIONAL = 5; /** TIFF SBYTE (signed 8-bit) type. */ public static final int SBYTE = 6; /** TIFF UNDEFINED (unsigned 8-bit) type. */ public static final int UNDEFINED = 7; /** TIFF SSHORT (signed 16-bit) type. */ public static final int SSHORT = 8; /** TIFF SLONG (signed 32-bit) type. */ public static final int SLONG = 9; /** TIFF SRATIONAL (two SLONGs) type. */ public static final int SRATIONAL = 10; /** TIFF FLOAT (32-bit IEEE floating point) type. */ public static final int FLOAT = 11; /** TIFF DOUBLE (64-bit IEEE floating point) type. */ public static final int DOUBLE = 12; /** TIFF IFD (LONG) type. */ public static final int IFD = 13; /** TIFF type labels. */ public static final String TYPE [] = { "", "BYTE", "ASCII", "SHORT", "LONG", "RATIONAL", "SBYTE", "UNDEFINED", "SSHORT", "SLONG", "SRATIONAL", "FLOAT", "DOUBLE", "IFD" }; /****************************************************************** * PRIVATE INSTANCE FIELDS. ******************************************************************/ /** True if big-endian file. */ protected boolean _bigEndian; /** List of errors. */ private List _errors; /** True if this is the first IFD. */ private boolean _first; /** True if the is the "thumbnail" IFD. */ private boolean _thumbnail; /** Format for converting float to string. */ private NumberFormat _format; /** Representation information. */ protected RepInfo _info; /** Offset of next IFD. */ protected long _next; /** IFD offset. */ protected long _offset; /** Open random access TIFF file. */ private RandomAccessFile _raf; /** TIFF version. */ protected int _version; /****************************************************************** * CLASS CONSTRUCTOR. ******************************************************************/ /** Instantiate an IFD object. * @param offset IFD offset * @param info Representation information * @param raf TIFF file * @param bigEndian True if big-endian file */ public IFD (long offset, RepInfo info, RandomAccessFile raf, boolean bigEndian) { _offset = offset; _info = info; _raf = raf; _bigEndian = bigEndian; _first = false; _thumbnail = false; _next = 0L; _version = 4; _errors = new LinkedList (); _format = NumberFormat.getInstance (); _format.setGroupingUsed (false); _format.setMinimumFractionDigits (0); } /****************************************************************** * PUBLIC INSTANCE METHODS. ******************************************************************/ /** Get any errors discovered during parsing. */ public List getErrors () { return _errors; } /** Get the offset of the next IFD. */ public long getNext () { return _next; } /** Get the IFD offset. */ public long getOffset () { return _offset; } /** Get the IFD properties. */ public abstract Property getProperty (boolean rawOutput) throws TiffException; /** Get the TIFF version. */ public int getVersion () { return _version; } /** Return true if this is the first IFD. */ public boolean isFirst () { return _first; } /** Return true if this is the thumbnail IFD. */ public boolean isThumbnail () { return _thumbnail; } /** Lookup IFD tag. */ public abstract void lookupTag (int tag, int type, long count, long value) throws TiffException; /** Parse the IFD. Errors are not suppressed, and odd byte offsets for * tags not allowed. * * @return The offset of the next IFD */ public long parse () throws TiffException { return parse (false, false); } /** Parse the IFD. * @param byteOffsetIsValid If true, allow offsets on odd byte boundaries * @param suppressErrors If true, return IFD even with errors * @return The offset of the next IFD */ public long parse (boolean byteOffsetIsValid, boolean suppressErrors) throws TiffException { try { return parse (byteOffsetIsValid); } catch (TiffException e) { // If we got a TiffException and we're suppressing errors, // cover over the exception and issue an info message; // but we can't follow the IFD chain further. if (suppressErrors) { _info.setMessage (new InfoMessage (e.getMessage(), e.getOffset())); return 0; } else throw e; } } /** Parse the IFD. Errors are not suppressed. * * @param byteOffsetIsValid If true, allow offsets on odd byte boundaries * @return The offset of the next IFD */ public long parse (boolean byteOffsetIsValid) throws TiffException { /* Start at the IFD offset, read the number of entries, then * read the entire IFD. */ long offset = _offset; _next = 0L; byte [] buffer; int nFields = 0; try { _raf.seek (offset); nFields = ModuleBase.readUnsignedShort (_raf, _bigEndian); offset += 2; int len = 12*nFields; buffer = new byte[len]; _raf.read (buffer, 0, len); /* Read the offset of the next IFD (or 0 if none). */ offset += len; _next = ModuleBase.readUnsignedInt (_raf, _bigEndian); } catch (Exception e) { throw new TiffException ("Premature EOF", offset); } DataInputStream ifdStream = new DataInputStream (new ByteArrayInputStream (buffer)); try { int prevTag = 0; for (int i=0; i IFD) { _info.setMessage (new ErrorMessage ("Unknown data type", "Type = " + type + ", Tag = " + tag, _offset + 4 + 12*i)); } else { /* Type gives indication of the TIFF version. */ if (SBYTE <= type && type <= IFD) { _version = 6; } long count = ModuleBase.readUnsignedInt(ifdStream, _bigEndian, null); long value = ModuleBase.readUnsignedInt(ifdStream, _bigEndian, null); if (calcValueSize (type, count) > 4) { /* Value is the word-aligned offset of the actual * value. */ if ((value & 1) != 0) { if (byteOffsetIsValid) { _info.setMessage (new InfoMessage ( "Value offset not word-aligned: " + value, _offset + 10 + 12*i)); } else { throw new TiffException ("Value offset not " + "word-aligned: " + value, _offset + 10 + 12*i); } } } else { /* Value is the actual value; pass the offset of * the value. */ value = _offset + 10 + 12*i; } lookupTag (tag, type, count, value); } } } catch (IOException e) { throw new TiffException ("Read error", _offset + 2); } postParseInitialization (); return _next; } /** Sets flag indicating whether this is the first IFD. */ public void setFirst (boolean first) { _first = first; } /** Sets flag indicating whether this is the "thumbnail" IFD. * The second IFD in the top-level chain is assumed to be * the Thumbnail IFD. */ public void setThumbnail (boolean thumbnail) { _thumbnail = thumbnail; } /** * Returns a Property representing a bitmask. * If rawOutput is true, returns a LIST * property whose elements are STRING properties. The * string values of these STRING properties are the * elements of labels whose indices * correspond to 1 bits in the bitmask, counting * the low-order bit as bit 0. * if rawOutput is false, returns a LONG * property whose numeric value is value. */ protected Property addBitmaskProperty (String name, long value, String [] labels, boolean rawOutput) { Property prop = null; if (!rawOutput) { List list = new LinkedList (); try { for (int i=0; irawOutput is true, returns * an INTEGER property, and labels and * index are unused. Otherwise, * returns a STRING property, with the * string being the element of labels * whose index is value. */ protected Property addIntegerProperty (String name, int value, String [] labels, boolean rawOutput) { Property prop = null; if (!rawOutput) { try { prop = new Property (name, PropertyType.STRING, labels[value]); } catch (Exception e) { _errors.add (name + " value out of range: " + value); } } if (prop == null) { prop = new Property (name, PropertyType.INTEGER, new Integer (value)); } return prop; } /** * Returns an Property representing an integer value. * If rawOutput is true, returns * an INTEGER property, and labels and * index are unused. Otherwise, * returns a STRING property, with the * string being the element of labels * whose index is the index of * value in index. */ protected Property addIntegerProperty (String name, int value, String [] labels, int [] index, boolean rawOutput) { Property prop = null; if (!rawOutput) { int n = -1; for (int i=0; i -1) { prop = new Property (name, PropertyType.STRING, labels[n]); } else { _errors.add (name + " value out of range: " + value); } } if (prop == null) { prop = new Property (name, PropertyType.INTEGER, new Integer (value)); } return prop; } /** * Returns an ARRAY Property representing an integer array. * If rawOutput is true, the elements of the property array * are INTEGER properties, and labels is unused. Otherwise, * the elements of the array are STRING properties, with the * elements of value used as indices into * labels. */ protected Property addIntegerArrayProperty (String name, int [] value, String [] labels, boolean rawOutput) { Property prop = null; if (!rawOutput) { String [] s = new String[value.length]; for (int i=0; i 127) { sb.append (byteToHex (c)); } else { sb.append ((char) c); } } return sb.toString (); } /** Reads an array of strings from the TIFF file. * * @param count Number of strings to read * @param value Offset from which to read * */ protected String [] readASCIIArray (long count, long value) throws IOException { _raf.seek (value); int nstrs = 0; List list = new LinkedList (); byte[] buf = new byte[(int) count]; _raf.read (buf); StringBuffer strbuf = new StringBuffer (); for (int i=0; i 127) { strbuf.append (byteToHex ((byte) b)); } else { strbuf.append ((char) b); } } } /* We can't use ArrayList.toArray because that returns an Object[], not a String[] ... sigh. */ String [] strs = new String[nstrs]; ListIterator iter = list.listIterator (); for (int i=0; itrue if file is big-endian, * false if little-endian. */ public boolean isBigEndian () { return _bigEndian; } /****************************************************************** * PRIVATE CLASS METHODS. ******************************************************************/ /** * Check the tag entry count. * @param tag Tag entry value * @param count Tag entry count * @param minCount Tag count */ protected static void checkCount (int tag, long count, int minCount) throws TiffException { if (count < minCount) { throw new TiffException ("Count mismatch for tag " + tag + "; expecting " + minCount + ", saw " + count); } } /** * Check the tag entry type. * @param tag Tag entry value * @param type Tag entry type * @param expected Tag type */ protected static void checkType (int tag, int type, int expected) throws TiffException { /* Readers are supposed to accept BYTE, SHORT or LONG for any * unsigned integer field. */ if (type == BYTE || type == SHORT || type == LONG || type == IFD) { if (expected == BYTE || expected == SHORT || expected == LONG || expected == IFD) { return; // it's OK } } if (type != expected) { throw new TiffException ("Type mismatch for tag " + tag + "; expecting " + expected + ", saw " + type); } } /** * Check the tag entry type. * @param tag Tag entry value * @param type Tag entry type * @param type1 Tag type * @param type2 Alternate tag type */ protected static void checkType (int tag, int type, int type1, int type2) throws TiffException { if (type != type1 && type != type2) { throw new TiffException ("Type mismatch for tag " + tag + "; expecting " + type1 + " or " + type2 + ", saw " + type); } } protected static Rational average (Rational r1, Rational r2) { long d1 = r1.getDenominator (); long d2 = r2.getDenominator (); Rational f1 = new Rational (r1.getNumerator ()*d2, r1.getDenominator ()*d2); Rational f2 = new Rational (r2.getNumerator ()*d1, r2.getDenominator ()*d1); return new Rational ((f1.getNumerator () + f2.getNumerator ())/2, f1.getDenominator ()); } /****************************************************************** * PRIVATE INSTANCE METHODS. ******************************************************************/ /** Represent a byte value as %XX */ private String byteToHex (byte c) { int[] nibbles = new int[2]; nibbles[0] = ((int) c & 0XF0) >> 4; nibbles[1] = (int) c & 0X0F; StringBuffer retval = new StringBuffer ("%"); for (int i = 0; i <= 1; i++) { int b = nibbles[i]; if (b >= 10) { b += (int) 'A' - 10; } else { b += (int) '0'; } retval.append ((char) b); } return retval.toString(); } } jhove/classes/edu/harvard/hul/ois/jhove/module/tiff/InteroperabilityIFD.java0000644000707400001440000000526111205030473026344 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.tiff; import edu.harvard.hul.ois.jhove.*; import java.io.*; import java.util.*; /** * Encapsulation of an Exif Interoperability IFD (for Exif). */ public class InteroperabilityIFD extends IFD { /****************************************************************** * PRIVATE CLASS FIELDS. ******************************************************************/ /** InteroperabilityIndex tag. */ private static final int INTEROPERABILITYINDEX = 1; /****************************************************************** * PRIVATE INSTANCE FIELDS. ******************************************************************/ /** Interoperability identification tag (1). */ private String _interoperabilityIndex; /****************************************************************** * CLASS CONSTRUCTOR. ******************************************************************/ /** Instantiate an InteroperabilityIFD object. * @param offset IFD offset * @param info the RepInfo object * @param raf TIFF file * @param bigEndian True if big-endian file */ public InteroperabilityIFD (long offset, RepInfo info, RandomAccessFile raf, boolean bigEndian) { super (offset, info, raf, bigEndian); } /****************************************************************** * PUBLIC INSTANCE METHODS. ******************************************************************/ /** Get the InteroperabilityIndex tag (1). */ public String getInteroperabilityIndex () { return _interoperabilityIndex; } /** Get the IFD properties. */ public Property getProperty (boolean rawOutput) { List entries = new LinkedList (); entries.add (new Property ("Index", PropertyType.STRING, _interoperabilityIndex)); return propertyHeader ("Exif Interoperability", entries); } /** Lookup an IFD tag. */ public void lookupTag (int tag, int type, long count, long value) throws TiffException { try { if (tag == INTEROPERABILITYINDEX) { checkType (tag, type, ASCII); _interoperabilityIndex = readASCII (count, value); } else { _info.setMessage (new ErrorMessage ("Unknown Exif " + "Interoperability IFD tag", "Tag = " + tag, value)); } } catch (IOException e) { throw new TiffException ("Read error for tag " + tag, value); } } } jhove/classes/edu/harvard/hul/ois/jhove/module/tiff/TiffException.java0000644000707400001440000000166110771562716025264 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.tiff; /** * Exception subclass used internally by the TIFF module. */ public final class TiffException extends Exception { private long _offset; // File offset at which the exception occurred /** * Create a TiffException. */ public TiffException (String m) { super(m); _offset = -1; } /** * Create a TiffException with specified offset. */ public TiffException (String m, long offset) { super(m); _offset = offset; } /** * Returns the offset at which the exception occurred. */ public long getOffset () { return _offset; } } jhove/classes/edu/harvard/hul/ois/jhove/module/tiff/TiffFXBase.java0000644000707400001440000000636310771562715024441 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.tiff; import edu.harvard.hul.ois.jhove.*; /** * * Base class for all profiles under TIFF/FX. * All TIFF/FX profiles should call TiffFXBase.satisfiesClass * to establish that common requirements are met. * * @author Gary McGath * */ public abstract class TiffFXBase extends TiffProfile { /** Tiff/FX-specific tags. */ public static final int GLOBALPARAMETERSIFD = 400, STRIPROWCOUNTS = 559; /****************************************************************** * PRIVATE CLASS FIELDS. ******************************************************************/ /* Conversion table from units/inch to units/cm */ private int[] cmInchTab[] = { {80, 204}, {160, 408}, {38, 98}, // really 38.5 {77, 196}, {154, 391} }; /** * Test for common requirements of all Tiff/FX profiles. * Subclasses should call satisfiesClass() from their * satisfiesThisProfile() method to avoid redundant code. * If this method returns false, the IFD does not * meet the requirements of any TIFF/FX profile. Calling this * also guarantees that the image length, image width, * bits per sample, X resolution (sampling frequency), * Y resolution and page number values are non-null objects. */ protected boolean satisfiesClass (TiffIFD ifd) { /* Check required tags. */ NisoImageMetadata niso = ifd.getNisoImageMetadata (); if (niso.getImageLength () == NisoImageMetadata.NULL || niso.getStripOffsets () == null || niso.getImageWidth () == NisoImageMetadata.NULL || niso.getBitsPerSample () == null || niso.getColorSpace () == NisoImageMetadata.NULL || niso.getCompressionScheme () == NisoImageMetadata.NULL || // colorSpace == photometricInterpretation niso.getXSamplingFrequency () == null || niso.getYSamplingFrequency () == null || ifd.getNewSubfileType () == IFD.NULL || ifd.getPageNumber () == null) { return false; } // If compression method is 3, T4 options must be specified if (niso.getCompressionScheme () == 3) { if (ifd.getT4Options () == IFD.NULL) { return false; } } return true; // placeholder } /** * Convert a units/cm value to a units/inch value. * For expected values, we use a table lookup to avoid * rounding problems. If a value isn't in the table, * we do a rounded conversion. */ protected int perCMtoPerInch (int res) { for (int i = 0; i < cmInchTab.length; i++) { int[] pair = cmInchTab[i]; if (pair[0] == res) { return pair[1]; } } // No table match; use rounding. return (int) ((res * 2.54) + 0.5); } } jhove/classes/edu/harvard/hul/ois/jhove/module/tiff/TiffIFD.java0000644000707400001440000045450111205004500023704 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.tiff; import edu.harvard.hul.ois.jhove.*; import java.io.*; import java.util.*; import org.xml.sax.XMLReader; import org.xml.sax.SAXException; import javax.xml.parsers.SAXParserFactory; /** * Encapsulation of standard TIFF IFD. */ public class TiffIFD extends IFD { /****************************************************************** * PRIVATE CLASS FIELDS. ******************************************************************/ /** Standard TIFF 6.0 tags. */ public static final int NEWSUBFILETYPE = 254, SUBFILETYPE = 255, IMAGEWIDTH = 256, IMAGELENGTH = 257, BITSPERSAMPLE = 258, COMPRESSION = 259, PHOTOMETRICINTERPRETATION = 262, THRESHHOLDING = 263, CELLWIDTH = 264, CELLLENGTH = 265, FILLORDER = 266, DOCUMENTNAME = 269, IMAGEDESCRIPTION = 270, MAKE = 271, MODEL = 272, STRIPOFFSETS = 273, ORIENTATION = 274, SAMPLESPERPIXEL = 277, ROWSPERSTRIP = 278, STRIPBYTECOUNTS = 279, MINSAMPLEVALUE = 280, MAXSAMPLEVALUE = 281, XRESOLUTION = 282, YRESOLUTION = 283, PLANARCONFIGURATION = 284, PAGENAME = 285, XPOSITION = 286, YPOSITION = 287, FREEOFFSETS = 288, FREEBYTECOUNTS = 289, GRAYRESPONSEUNIT = 290, GRAYRESPONSECURVE = 291, T4OPTIONS = 292, T6OPTIONS = 293, RESOLUTIONUNIT = 296, PAGENUMBER = 297, TRANSFERFUNCTION = 301, SOFTWARE = 305, DATETIME = 306, ARTIST = 315, HOSTCOMPUTER = 316, PREDICTOR = 317, WHITEPOINT = 318, PRIMARYCHROMATICITIES = 319, COLORMAP = 320, HALFTONEHINTS = 321, TILEWIDTH = 322, TILELENGTH = 323, TILEOFFSETS = 324, TILEBYTECOUNTS = 325, INKSET = 332, INKNAMES = 333, NUMBEROFINKS = 334, DOTRANGE = 336, TARGETPRINTER = 337, EXTRASAMPLES = 338, SAMPLEFORMAT = 339, SMINSAMPLEVALUE = 340, SMAXSAMPLEVALUE = 341, TRANSFERRANGE = 342, JPEGPROC = 512, JPEGINTERCHANGEFORMAT = 513, JPEGINTERCHANGEFORMATLENGTH = 514, JPEGRESTARTINTERVAL = 515, JPEGLOSSLESSPREDICTORS = 517, JPEGPOINTTRANSFORMS = 518, JPEGQTABLES = 519, JPEGDCTABLES = 520, JPEGACTABLES = 521, YCBCRCOEFFICIENTS = 529, YCBCRSUBSAMPLING = 530, YCBCRPOSITIONING = 531, REFERENCEBLACKWHITE = 532, COPYRIGHT = 33432; /** Fill order tag (266) labels. */ private static final String [] FILLORDER_L = { "", "high-order", "low-order" }; /** Indexed tag (346) labels. */ private static final String [] INDEXED_L = { "not indexed", "indexed" }; /** InkSet tag (332) labels. */ private static final String [] INKSET_L = { "", "CMYK", "not CMYK" }; /** JPEGLosslessPredictors tag (517) labels. */ private static final String [] JPEGLOSSLESSPREDICTORS_L = { "", "A", "B", "C", "A+B+C", "A+((B-C)/2)", "B+((A-C)/2)", "(A+B)/2" }; /** JPEGProc tag (512) labels. */ private static final String [] JPEGPROC_L = { "baseline sequential process", "lossless process with Huffman coding" }; private static final int [] JPEGPROC_INDEX = { 1, 14 }; /** NewSubfileType tag (254) bit labels. */ private static final String [] NEWSUBFILETYPE_L = { "reduced-resolution image of another image in this file", "single page of multi-page image", "transparency mask for another image in this file" }; /** OPIProxy tag (351) labels. */ private static final String [] OPIPROXY_L = { "no higher-resolution version exists", "higher-resolution version exists" }; /** Predictor tag (317) labels. */ private static final String [] PREDICTOR_L = { "", "no prediction scheme", "horizontal differencing" }; /** SampleFormat tag (339) labels. */ private static final String [] SAMPLEFORMAT_L = { "", "unsigned integer", "signed integer", "IEEE floating point", "undefined" }; /** SubfileType tag (255) labels. */ private static final String [] SUBFILETYPE_L = { "", "full-resolution image", "reduced-resolution image", "single page of multi-page image" }; /** Threshholding tag (263) labels. */ private static final String [] THRESHHOLDING_L = { "", "no dithering or halftoning", "ordered dithering or halftoning", "randomized process" }; /** YCbCrPositioning tag (531) labels. */ private static final String [] YCBCRPOSITIONING_L = { "", "centered", "cosited" }; /** YCbCrSubSampling tag (530) labels. */ private static final String [] YCBCRSUBSAMPLING_HORZ = { "", "width of chroma image is equal to width of associated luma image", "width of chroma image is 1/2 the width of associated luma image", "", "width of chroma image is 1/4 the width of associated luma image" }; private static final String [] YCBCRSUBSAMPLING_VERT = { "", "length of chroma image is equal to length of associated luma image", "length of chroma image is 1/2 the length of associated luma image", "", "length of chroma image is 1/4 the length of associated luma image" }; /** TIFF/IT tags. */ private static final int SITE = 34016, COLORSEQUENCE = 34017, IT8HEADER = 34018, RASTERPADDING = 34019, BITSPERRUNLENGTH = 34020, BITSPEREXTENDEDRUNLENGTH = 34021, COLORTABLE = 34022, IMAGECOLORINDICATOR = 34023, BACKGROUNDCOLORINDICATOR = 34024, IMAGECOLORVALUE = 34025, BACKGROUNDCOLORVALUE = 34026, PIXELINTENSITYRANGE = 34027, TRANSPARENCYINDICATOR = 34028, COLORCHARACTERIZATION = 34029, HCUSAGE = 34030; public static final String[] BACKGROUNDCOLORINDICATOR_L = { "background not defined", "Background color defined", "full transparency, background color not defined" }; public static final String [] HCUSAGE_L = { "high resolution CT contone information", "line art (line work) information", "trapping information" }; public static final String[] IMAGECOLORINDICATOR_L = { "image not defined", "image color defined", "full transparency, image color not defined" }; /* RasterPadding tag (34019) labels */ private static final String [] RASTERPADDING_L = { "1 byte", "2 bytes", "4 bytes", "512 bytes", "1024 bytes" }; private static final int [] RASTERPADDING_INDEX = { 0, 1, 2, 9, 10 }; public static final String [] TRANSPARENCYINDICATOR_L = { "no transparency", "transparency used" }; /** TIFF/EP tags. */ private static final int CFAREPEATPATTERNDIM = 33421, CFAPATTERN = 33422, BATTERYLEVEL = 33423, EXPOSURETIME = 33434, FNUMBER = 33437, IPTCNAA = 33723, ICC_PROFILE = 34675, EXPOSUREPROGRAM = 34850, SPECTRALSENSITIVITY = 34852, ISOSPEEDRATINGS = 34855, OECF = 34856, INTERLACE = 34857, TIMEZONEOFFSET = 34858, SELFTIMERMODE = 34859, DATETIMEORIGINAL = 36867, COMPRESSEDBITSPERPIXEL = 37122, SHUTTERSPEEDVALUE = 37377, APERTUREVALUE = 37378, BRIGHTNESSVALUE = 37379, EXPOSUREBIASVALUE = 37380, MAXAPERTUREVALUE = 37381, SUBJECTDISTANCE = 37382, METERINGMODE = 37383, LIGHTSOURCE = 37384, FLASH = 37385, FOCALLENGTH = 37386, FLASHENERGY = 37387, SPATIALFREQUENCYRESPONSE = 37388, NOISE = 37389, FOCALPLANEXRESOLUTION = 37390, FOCALPLANEYRESOLUTION = 37391, FOCALPLANERESOLUTIONUNIT = 37392, IMAGENUMBER = 37393, SECURITYCLASSIFICATION = 37394, IMAGEHISTORY = 37395, SUBJECTLOCATION = 37396, EXPOSUREINDEX = 37397, TIFFEPSTANDARDID = 37398, SENSINGMETHOD = 37399; /** TIFF/EP tag labels. */ private static final String [] EXPOSUREPROGRAM_L = { "unidentified", "manual", "program normal", "aperature priority", "shutter priority", "program creative", "program action", "portrait mode", "landscape mode" }; private static final String [] FLASH_L = { "did not fire", "fired", "fired, return not sensed", "fired, return sensed", "fired, fill flash mode, camera has no flash return sensing capability", "fired, fill flash mode, return not sensed", "fired, fill flash mode, return sensed", "did not fire, flash 'off' mode", "did not fire, 'auto' mode", "fired, 'auto' mode, camera has no flash return sensing capability", "fired, 'auto' mode, return not sensed", "fired, 'auto' mode, return sensed", "camera does not have a flash unit" }; private static final int [] FLASH_INDEX = { 0, 1, 5, 7, 9, 13, 15, 16, 24, 25, 29, 31, 32 }; private static final String [] FOCALPLANERESOLUTIONUNIT_L = { "", "inch", "metre", "centimetre", "millimetre", "micrometre" }; /** Exif tags. */ private static final int EXIFIFD = 34665, GPSINFOIFD = 34853, INTEROPERABILITYIFD = 40965; /** GeoTIFF tags. */ private static final int GEOKEYDIRECTORYTAG = 34735, GEODOUBLEPARAMSTAG = 34736, GEOASCIIPARAMSTAG = 34737, MODELTIEPOINTTAG = 33922, MODELPIXELSCALETAG = 33550, MODELTRANSFORMATIONTAG = 34264; /** GeoTIFF key values. */ public static final int GTMODELTYPEGEOKEY = 1024, GTRASTERTYPEGEOKEY = 1025, GTCITATIONGEOKEY = 1026, GEOGRAPHICTYPEGEOKEY = 2048, GEOGCITATIONGEOKEY = 2049, GEOGGEODETICDATUMGEOKEY = 2050, GEOGPRIMEMERIDIANGEOKEY = 2051, GEOGLINEARUNITSGEOKEY = 2052, GEOGLINEARUNITSIZEGEOKEY = 2053, GEOGANGULARUNITSGEOKEY = 2054, GEOGANGULARUNITSIZEGEOKEY = 2055, GEOGELLIPSOIDGEOKEY = 2056, GEOGSEMIMAJORAXISGEOKEY = 2057, GEOGSEMIMINORAXISGEOKEY = 2058, GEOGINVFLATTENINGGEOKEY = 2059, GEOGAZIMUTHUNITSGEOKEY = 2060, GEOGPRIMEMERIDIANLONGGEOKEY = 2061, PROJECTEDCSTYPEGEOKEY = 3072, PCSCITATIONGEOKEY = 3073, PROJECTIONGEOKEY = 3074, PROJCOORDTRANSGEOKEY = 3075, PROJLINEARUNITSGEOKEY = 3076, PROJLINEARUNITSIZEGEOKEY = 3077, PROJSTDPARALLEL1GEOKEY = 3078, PROJSTDPARALLEL2GEOKEY = 3079, PROJNATORIGINLONGGEOKEY = 3080, PROJNATORIGINLATGEOKEY = 3081, PROJFALSEEASTINGGEOKEY = 3082, PROJFALSENORTHINGGEOKEY = 3083, PROJFALSEORIGINLONGGEOKEY = 3084, PROJFALSEORIGINLATGEOKEY = 3085, PROJFALSEORIGINEASTINGGEOKEY = 3086, PROJFALSEORIGINNORTHINGGEOKEY = 3087, PROJCENTERLONGGEOKEY = 3088, PROJCENTERLATGEOKEY = 3089, PROJCENTEREASTINGGEOKEY = 3090, PROJFALSEORIGINNORTHINGGEOKEY_2 = 3091, PROJSCALEATNATORIGINGEOKEY = 3092, PROJSCALEATCENTERGEOKEY = 3093, PROJAZIMUTHANGLEGEOKEY = 3094, PROJSTRAIGHTVERTPOLELONGEOKEY = 3095, VERTICALCSTYPEGEOKEY = 4096, VERTICALCITATIONGEOKEY = 4097, VERTICALDATUMGEOKEY = 4098, VERTICALUNITSGEOKEY = 4099; /** PageMaker 6.0 tags. */ private static final int SUBIFDS = 330, CLIPPATH = 343, XCLIPPATHUNITS = 344, YCLIPPATHUNITS = 345, INDEXED = 346, OPIPROXY = 351, IMAGEID = 32781; /** Photoshop 'Advanced Tiff' tags. */ private static final int JPEGTABLES = 347, IMAGESOURCEDATA = 37724; /** More Photoshop TIFF tags. */ private static final int PHOTOSHOPPROPS = 34377, ANNOTATIONS = 50255; /** Class F tags. */ private static final int BADFAXLINES = 326, CLEANFAXDATA = 327, CONSECUTIVEBADFAXLINES = 328; /** XMP tag. */ private static final int XMP = 700; /** TIFF/FX tags. */ private static final int GLOBALPARAMETERSIFD = 400, STRIPROWCOUNTS = 559, IMAGELAYER = 34732; public static final String [] IMAGELAYER_L = { "", "Background", "Mask", "Foreground" }; /** DNG tags. */ private static final int DNGVERSION = 50706, DNGBACKWARDVERSION = 50707, UNIQUECAMERAMODEL = 50708, LOCALIZEDCAMERAMODEL = 50709, CFAPLANECOLOR = 50710, CFALAYOUT = 50711, LINEARIZATIONTABLE = 50712, BLACKLEVELREPEATDIM = 50713, BLACKLEVEL = 50714, BLACKLEVELDELTAH = 50715, BLACKLEVELDELTAV = 50716, WHITELEVEL = 50717, DEFAULTSCALE = 50718, DEFAULTCROPORIGIN = 50719, DEFAULTCROPSIZE = 50720, COLORMATRIX1 = 50721, COLORMATRIX2 = 50722, CAMERACALIBRATION1 = 50723, CAMERACALIBRATION2 = 50724, REDUCTIONMATRIX1 = 50725, REDUCTIONMATRIX2 = 50726, ANALOGBALANCE = 50727, ASSHOTNEUTRAL = 50728, ASSHOTWHITEXY = 50729, BASELINEEXPOSURE = 50730, BASELINENOISE = 50731, BASELINESHARPNESS = 50732, BAYERGREENSPLIT = 50733, LINEARRESPONSELIMIT = 50734, CAMERASERIALNUMBER = 50735, LENSINFO = 50736, CHROMABLURRADIUS = 50737, ANTIALIASSTRENGTH = 50738, SHADOWSCALE = 50739, // Undocumented tag DNGPRIVATEDATA = 50740, MAKERNOTESAFETY = 50741, CALIBRATIONILLUMINANT1 = 50778, CALIBRATIONILLUMINANT2 = 50779, BESTQUALITYSCALE = 50780; public static final String [] CFALAYOUT_L = { "", "Rectangular", "Staggered Layout A", "Staggered Layout B", "Staggered Layout C", "Staggered Layout D" }; public static final String[] MAKERNOTESAFETY_L = { "Unsafe", "Safe" }; /****************************************************************** * PRIVATE INSTANCE FIELDS. ******************************************************************/ /** NISO Z39.87/AIIM 20-2002 image metadata. */ private NisoImageMetadata _niso; /** NewSubfileType tag (254). */ private long _newSubfileType; /** SubfileType tag (255). */ private int _subfileType; /** PhotometricInterpretation tag (262). */ private int _photometricInterpretation; /** Threshholding tag (263). */ private int _threshholding; /** Cell width tag (264). */ private int _cellWidth; /** Cell length tag (265). */ private int _cellLength; /** Fill order tag (266). */ private int _fillOrder; /** Document name tag (269). */ private String _documentName; /** Image description tag (270). */ private String _imageDescription; /** Minimum sample value tag (280). */ private int [] _minSampleValue; /** Maximum sample value tag (281). */ private int [] _maxSampleValue; /** Page name tag (285). */ private String _pageName; /** X position tag (286). */ private Rational _xPosition; /** Y position tag (287). */ private Rational _yPosition; /** Free offsets tag (288). */ private long [] _freeOffsets; /** Free byte counts tag (289). */ private long [] _freeByteCounts; /** CCITT Group 3 compression options tag (292). */ private long _t4Options; /** CCITT Group 4 compression options tag (293). */ private long _t6Options; /** Page number tag (297). */ private int [] _pageNumber; /** Transfer function tag (301). */ private boolean _transferFunction; /** Date/time tag (306). */ private String _dateTime; /** Compression differencing predictor tag (317). */ private int _predictor; /** Halftone hints tag (321). */ private int [] _halftoneHints; /** Bad fax lines tag (326). */ private long _badFaxLines; /** Clean fax data tag (327). */ private short _cleanFaxData; /** Consecutive bad fax lines tag (328). */ private long _consecutiveBadFaxLines; /** Ink set tag (332). */ private int _inkSet; /** InkNames tag (322). */ private String [] _inkNames; /** Sub IFDs tag (330). */ private long [] _subIFDs; /** Number of inks tag (334). */ private int _numberOfInks; /** Dot range tag (336). */ private int [] _dotRange; /** Target printer tag (337). */ private String _targetPrinter; /** Sample format tag (339). */ private int [] _sampleFormat; /** Transfer range tag (342). */ private int [] _transferRange; /** Clip path tag (343). */ private int [] _clipPath; /** X clip path units tag (344). */ private long _xClipPathUnits; /** Y clip path units tag (345). */ private long _yClipPathUnits; /** Indexed tag (346). */ private int _indexed; /** JPEG tables tag (347). */ private int [] _jpegTables; /** OPI proxy tag (351). */ private int _opiProxy; /** JPEG Proc tag (512). */ private int _jpegProc; /** JPEG interchange format tag (513). */ private long _jpegInterchangeFormat; /** JPEG interchange format length tag (514). */ private long _jpegInterchangeFormatLength; /** JPEG restart interval tag (515). */ private int _jpegRestartInterval; /** JPEG lossless predictors tag (517). */ private int [] _jpegLosslessPredictors; /** JPEG point transforms tag (518). */ private int [] _jpegPointTransforms; /** JPEG Q tables tag (519). */ private long [] _jpegQTables; /** JPEG DC tables tag (520). */ private long [] _jpegDCTables; /** JPEG AC tables tag (521). */ private long [] _jpegACTables; /** Copyright tag (33432). */ private String _copyright; /** Exif IFD tag (34665). */ private long _exifIFD; /** GPSInfo IFD tag (34853). */ private long _gpsInfoIFD; /** GlobalParametersIFD tag (400). */ private long _globalParametersIFD; /** Photoshop Properties tag (34377). */ private int[] _photoshopProperties; /** ImageSourceData tag (37724). */ private int [] _imageSourceData; /** Exif Interoperability IFD tag (40965). */ private long _interoperabilityIFD; /** Annotations tag (50255). */ private int[] _annotations; /* TIFF/IT tags. */ private int _backgroundColorIndicator; private int _backgroundColorValue; private int _bitsPerExtendedRunLength; private int _bitsPerRunLength; private String _colorCharacterization; private String _colorSequence; private int [] _colorTable; private long _hcUsage; private int _imageColorIndicator; private int _imageColorValue; private String _it8Header; private int [] _pixelIntensityRange; private int _rasterPadding; private String _site; private int _transparencyIndicator; /* TIFF/EP tags. */ private Rational _aperatureValue; private String _batteryLevel; private int [] _cfaRepeatPatternDim; private int [] _cfaPattern; private Rational _compressedBitsPerPixel; private int _exposureProgram; private int _flash; private int _focalPlaneResolutionUnit; private Rational _focalPlaneXResolution; private Rational _focalPlaneYResolution; private int [] _interColourProfile; private String _imageHistory; private long _imageNumber; private int _interlace; private long [] _iptc; private int [] _isoSpeedRatings; private Rational _maxAperatureValue; private int [] _noise; private int [] _oecf; private String _securityClassification; private int _selfTimerMode; private Rational _shutterSpeedValue; private int [] _spatialFrequencyResponse; private String _spectralSensitivity; private int [] _subjectLocation; private String _tiffEPStandardID; private int [] _timeZoneOffset; /* GeoTIFF tags. */ private String _geoAsciiParamsTag; private double[] _geoDoubleParamsTag; private int [] _geoKeyDirectoryTag; private double[] _modelPixelScaleTag; private double[] _modelTiepointTag; private double[] _modelTransformationTag; /* XMP property. */ private Property _xmpProp; /* Tiff/FX tag values. */ private long[] _stripRowCounts; private int[] _imageLayer; /** Exif IFD object. */ private ExifIFD _theExifIFD; /** GPSInfo IFD object. */ private GPSInfoIFD _theGPSInfoIFD; /** Exif Interoperability IFD. */ private InteroperabilityIFD _theInteroperabilityIFD; /** GlobalParameters IFD. */ private GlobalParametersIFD _theGlobalParametersIFD; /* DNG tag values. The spec says that some of these tags go into * a "raw IFD," which isn't defined. Until this is explained, * throw it all in here. */ private int[] _dngVersion; private int[] _dngBackwardVersion; private String _uniqueCameraModel; private String _localizedCameraModel; // Note: This is specified as Unicode private int[] _cfaPlaneColor; private int _cfaLayout; private int[] _linearizationTable; private int[] _blackLevelRepeatDim; // BlackLevel can be SHORT or LONG or RATIONAL. // To avoid having to store multiple versions, we will convert // SHORT or LONG values to RATIONAL. private Rational[] _blackLevel; private Rational[] _blackLevelDeltaH; private Rational[] _blackLevelDeltaV; // Though BlackLevel can be RATIONAL, WhiteLevel can't. // There must be a rational explanation. private long[] _whiteLevel; private Rational[] _defaultScale; private Rational _bestQualityScale; private Rational[] _defaultCropOrigin; private Rational[] _defaultCropSize; private int _calibrationIlluminant1; private int _calibrationIlluminant2; private Rational[] _colorMatrix1; private Rational[] _colorMatrix2; // for calculating revolutions, no doubt private Rational[] _cameraCalibration1; private Rational[] _cameraCalibration2; private Rational[] _reductionMatrix1; private Rational[] _reductionMatrix2; private Rational[] _analogBalance; private Rational[] _asShotNeutral; private Rational[] _asShotWhiteXY; private Rational _baselineExposure; private Rational _baselineNoise; private Rational _baselineSharpness; private int _bayerGreenSplit; private Rational _linearResponseLimit; private String _cameraSerialNumber; private Rational[] _lensInfo; private Rational _chromaBlurRadius; private Rational _antiAliasStrength; private int[] _dngPrivateData; private int _makerNoteSafety; /****************************************************************** * CLASS CONSTRUCTOR. ******************************************************************/ /** Instantiate an TiffIFD object. * @param offset IFD offset * @param info The RepInfo object * @param raf TIFF file * @param bigEndian True if big-endian file */ public TiffIFD (long offset, RepInfo info, RandomAccessFile raf, boolean bigEndian) { super (offset, info, raf, bigEndian); /* Define a NISO metadata object and set defaults. */ _niso = new NisoImageMetadata (); _niso.setMimeType("image/tiff"); _niso.setCompressionScheme (1); _niso.setOrientation (1); _niso.setPlanarConfiguration (1); _niso.setRowsPerStrip (4294967295L); _niso.setSamplesPerPixel (1); _niso.setByteOrder(bigEndian ? "big-endian" : "little-endian"); /* Set non-NISO defaults. */ _photometricInterpretation = NULL; _cellLength = NULL; _cellWidth = NULL; _fillOrder = NULL; _indexed = 0; _inkSet = NULL; _jpegInterchangeFormat = NULL; _jpegInterchangeFormatLength = NULL; _jpegProc = NULL; _jpegRestartInterval = NULL; _newSubfileType = 0L; _numberOfInks = NULL; _opiProxy = NULL; _predictor = NULL; _subfileType = NULL; _t4Options = NULL; _t6Options = NULL; _threshholding = 1; _xClipPathUnits = NULL; _yClipPathUnits = NULL; /* TIFF/IT defaults. */ _backgroundColorIndicator = 0; _backgroundColorValue = NULL; _bitsPerExtendedRunLength = 16; _bitsPerRunLength = 8; _hcUsage = NULL; _imageColorIndicator = 0; _imageColorValue = NULL; _rasterPadding = 0; _transparencyIndicator = 0; /* TIFF/EP defaults. */ _exposureProgram = NULL; _flash = NULL; _focalPlaneResolutionUnit = NULL; _gpsInfoIFD = NULL; _imageNumber = NULL; _selfTimerMode = NULL; /* Exif defaults. */ _exifIFD = NULL; _focalPlaneResolutionUnit = NULL; _imageNumber = NULL; _interlace = NULL; _interoperabilityIFD = NULL; _globalParametersIFD = NULL; /* Class F/RFC 1324 defaults. */ _badFaxLines = NULL; _cleanFaxData = NULL; _consecutiveBadFaxLines = NULL; /* XMP default. */ _xmpProp = null; /* Tiff/FX defaults. */ _stripRowCounts = null; _imageLayer = null; /* DNG defaults. */ _dngVersion = null; _dngBackwardVersion = null; _uniqueCameraModel = null; _localizedCameraModel = null; _cfaPlaneColor = null; _cfaLayout = NULL; _linearizationTable = null; _blackLevelRepeatDim = null; _blackLevel = null; _blackLevelDeltaH = null; _blackLevelDeltaV = null; _whiteLevel = null; _defaultScale = null; _bestQualityScale = null; _defaultCropOrigin = null; _defaultCropSize = null; _calibrationIlluminant1 = NULL; _calibrationIlluminant2 = NULL; _colorMatrix1 = null; _colorMatrix2 = null; _cameraCalibration1 = null; _cameraCalibration2 = null; _reductionMatrix1 = null; _reductionMatrix2 = null; _analogBalance = null; _asShotNeutral = null; _asShotWhiteXY = null; _baselineExposure = null; _baselineNoise = null; _baselineSharpness = null; _bayerGreenSplit = NULL; _linearResponseLimit = null; _cameraSerialNumber = null; _lensInfo = null; _chromaBlurRadius = null; _antiAliasStrength = null; _dngPrivateData = null; _makerNoteSafety = NULL; } /****************************************************************** * PUBLIC INSTANCE METHODS. ******************************************************************/ /** Returns the value of the APERTUREVALUE (37378) tag. Note typo in * function name. */ public Rational getAperatureValue () { return _aperatureValue; } /** Returns the value of the TIFF/IT BACKGROUNDCOLORINDICATOR * (34024) tag. */ public int getBackgroundColorIndicator () { return _backgroundColorIndicator; } /** Returns the value of the BACKGROUNDCOLORVALUE * (34026) tag. */ public int getBackgroundColorValue () { return _backgroundColorValue; } /** Returns the value of the BATTERYLEVEL (33423) tag. */ public String getBatteryLevel () { return _batteryLevel; } /** Returns the value of the BITSPEREXTENDEDRUNLENGTH * (34021) tag. */ public int getBitsPerExtendedRunLength () { return _bitsPerExtendedRunLength; } /** Returns the value of the BITSPERRUNLENGTH (34020) tag. */ public int getBitsPerRunLength () { return _bitsPerRunLength; } /** Returns the value of the CELLLENGTH (265) tag. */ public int getCellLength () { return _cellLength; } /** Returns the value of the CELLWIDTH (264) tag. */ public int getCellWidth () { return _cellWidth; } /** Returns the value of the CFAPATTERN (33422) tag. */ public int [] getCFAPattern () { return _cfaPattern; } /** Returns the value of the CFAREPEATPATTERNDIM * (33421) tag. */ public int [] getCFARepeatPatternDim () { return _cfaRepeatPatternDim; } /** Returns the value of the CLIPPATH (343) tag. */ public int [] getClipPath () { return _clipPath; } /** Returns the value of the COLORSEQUENCE * (34017) tag. */ public String getColorSequence () { return _colorSequence; } /** Returns the value of the COLORTABLE (34022) tag. */ public int [] getColorTable () { return _colorTable; } /** Returns the value of the COMPRESSEDBITSPERPIXEL * (37122) tag. */ public Rational getCompressedBitsPerPixel () { return _compressedBitsPerPixel; } /** Returns the value of the COPYRIGHT (33432) tag. */ public String getCopyright () { return _copyright; } /** Returns the value of the DATETIME (306) tag. */ public String getDateTime () { return _dateTime; } /** Returns the value of the DOCUMENTNAME (269) tag. */ public String getDocumentName () { return _documentName; } /** Returns the value of the DOTRANGE (336) tag. */ public int [] getDotRange () { return _dotRange; } /** Return the offset of the Exif IFD. */ public long getExifIFD () { return _exifIFD; } /** Return the offset of the GlobalParameters IFD. */ public long getGlobalParametersIFD () { return _globalParametersIFD; } /** Returns the value of the EXPOSUREPROGRAM (34850) tag. */ public int getExposureProgram () { return _exposureProgram; } /** Returns the value of the FILLORDER (266) tag. */ public int getFillOrder () { return _fillOrder; } /** Returns the value of the FOCALPLANERESOLUTIONUNIT * (37392) tag. */ public int getFocalPlaneResolutionUnit () { return _focalPlaneResolutionUnit; } /** Returns the value of the FOCALPLANEXRESOLUTION * (37390) tag. */ public Rational getFocalPlaneXResolution () { return _focalPlaneXResolution; } /** Returns the value of the FOCALPLANEYRESOLUTION * (37390) tag. */ public Rational getFocalPlaneYResolution () { return _focalPlaneYResolution; } /** Returns the value of the GEOKEYDIRECTORYTAG * (34735) tag. */ public int [] getGeoKeyDirectoryTag () { return _geoKeyDirectoryTag; } /** Return the offset of the GPSInfo IFD. */ public long getGPSInfoIFD () { return _gpsInfoIFD; } /** Returns the value of the IMAGECOLORINDICATOR * (34023) tag. */ public int getImageColorIndicator () { return _imageColorIndicator; } /** Returns the value of the IMAGECOLORVALUE (34025) tag. */ public int getImageColorValue () { return _imageColorValue; } /** Returns the value of the IMAGEDESCRIPTION (270) tag. */ public String getImageDescription () { return _imageDescription; } /** Returns the value of the IMAGEHISTORY (37395) tag. */ public String getImageHistory () { return _imageHistory; } /** Returns the value of the IMAGELAYER (34732) tag. */ public int[] getImageLayer () { return _imageLayer; } /** Returns the value of the IMAGENUMBER (37393) tag. */ public long getImageNumber () { return _imageNumber; } /** Returns the value of the IMAGESOURCEDATA * (37724) tag. */ public int [] getImageSourceData () { return _imageSourceData; } /** Returns the value of the PHOTOSHOPPROPS * (34377) tag. */ public int [] getPhotoshopProperties () { return _photoshopProperties; } /** Returns the value of the ANNOTATIONS * (50255) tag. */ public int [] getAnnotations () { return _annotations; } /** Returns the value of the INKNAMES (333) tag. */ public String [] getInkNames () { return _inkNames; } /** Returns the value of the INKSET (332) tag. */ public int getInkSet () { return _inkSet; } /** Returns the value of the INTERLACE (34857) tag. */ public int getInterlace () { return _interlace; } /** Returns the offset of the Exif Interoperability IFD. */ public long getInteroperabilityIFD () { return _interoperabilityIFD; } /** Returns the value of the ICC_PROFILE tag. */ public int [] getInterColourProfile () { return _interColourProfile; } /** Returns the value of the INDEXED (364) tag. */ public int getIndexed () { return _indexed; } public long getJpegInterchangeFormat () { return _jpegInterchangeFormat; } /** Returns the value of the IPTCNAA (33723) tag. */ public long [] getIPTCNAA () { return _iptc; } /** Returns the value of the ISOSPEEDRATINGS * (34855) tag. */ public int [] getISOSpeedRatings () { return _isoSpeedRatings; } /** Returns the value of the IT8HEADER (34018) tag. */ public String getIT8Header () { return _it8Header; } /** Returns the value of the JPEGPROC (512) tag. */ public int getJPEGProc () { return _jpegProc; } /** Returns the value of the MAXAPERTUREVALUE (37381) * tag. Note typo in function name. */ public Rational getMaxAperatureValue () { return _maxAperatureValue; } /** Returns the value of the MODELTIEPOINTTAG (33922) * tag. */ public double[] getModelTiepointTag () { return _modelTiepointTag; } /** Returns the value of the MODELTRANSFORMATIONTAG * (34264) tag. */ public double[] getModelTransformationTag () { return _modelTransformationTag; } /** Returns the value of the NEWSUBFILETYPE (254) tag. */ public long getNewSubfileType () { return _newSubfileType; } /** Returns the constructed NisoImageMetadata. */ public NisoImageMetadata getNisoImageMetadata () { return _niso; } /** Returns the value of the NOISE (37389) tag. */ public int [] getNoise () { return _noise; } /** Returns the value of the NUMBEROFINKS (334) tag. */ public int getNumberOfInks () { return _numberOfInks; } /** Returns the value of the OECF (34856) tag. */ public int [] getOECF () { return _oecf; } /** Returns the value of the PAGENAME (285) tag. */ public String getPageName () { return _pageName; } /** Returns the value of the PAGENUMBER (297) tag. */ public int [] getPageNumber () { return _pageNumber; } /** Returns the value of the PIXELINTENSITYRANGE (34027) tag. */ public int [] getPixelIntensityRange () { return _pixelIntensityRange; } /** Returns the value of the RASTERPADDING (34019) tag. */ public int getRasterPadding () { return _rasterPadding; } /** Returns the value of the SECURITYCLASSIFICATION (37394) tag. */ public String getSecurityClasssification () { return _securityClassification; } /** Returns the value of the SELFTIMERMODE (34859) tag. */ public int getSelfTimerMode () { return _selfTimerMode; } /** Returns the value of the SHUTTERSPEEDVALUE (37377) tag. */ public Rational getShutterSpeedValue () { return _shutterSpeedValue; } /** Returns the value of the SITE (34016) tag. */ public String getSite () { return _site; } /** Returns the value of the SPATIALFREQUENCYRESPONSE (37388) tag. */ public int [] getSpatialFrequencyResponse () { return _spatialFrequencyResponse; } /** Returns the value of the SPECTRALSENSITIVITY (34852) tag. */ public String getSpectralSensitivity () { return _spectralSensitivity; } /** Returns the value of the STRIPROWCOUNTS (559) tag. */ public long[] getStripRowCounts () { return _stripRowCounts; } /** Returns the value of the SUBIFDS (330) tag. */ public long [] getSubIFDs () { return _subIFDs; } /** Returns the value of the SUBJECTLOCATION (37396) tag. */ public int [] getSubjectLocation () { return _subjectLocation; } /** Returns the value of the T4OPTIONS (292) tag. */ public long getT4Options () { return _t4Options; } /** Returns the value of the T6OPTIONS (293) tag. */ public long getT6Options () { return _t6Options; } /** Returns the Exif IFD object, or null if none. */ public ExifIFD getTheExifIFD () { return _theExifIFD; } /** Returns the GPS info IFD object, or null if none. */ public GPSInfoIFD getTheGPSInfoIFD () { return _theGPSInfoIFD; } /** Returns the Interoperability IFD object, * or null if none. */ public InteroperabilityIFD getTheInteroperabilityIFD () { return _theInteroperabilityIFD; } /** Returns the GlobalParameters IFD object, or null if none. */ public GlobalParametersIFD getTheGlobalParametersIFD () { return _theGlobalParametersIFD; } /** Returns the value of the THRESHHOLDING (263) tag. */ public int getThreshholding () { return _threshholding; } /** Returns the value of the TIFFEPSTANDARDID (37398) tag. */ public String getTIFFEPStandardID () { return _tiffEPStandardID; } /** Returns the value of the TIMEZONEOFFSET (34858) tag. */ public int [] getTimeZoneOffset () { return _timeZoneOffset; } /** Returns the value of the TRANSPARENCYINDICATOR (34028) tag. */ public int getTransparencyIndicator () { return _transparencyIndicator; } /** Returns the value of the XCLIPPATHUNITS (344) tag. */ public long getXClipPathUnits () { return _xClipPathUnits; } /** Returns the value of the XPOSITION (286) tag. */ public Rational getXPosition () { return _xPosition; } /** Returns the value of the XPOSITION (287) tag. */ public Rational getYPosition () { return _yPosition; } /** Returns the value of the DNGVERSION (50706) tag. */ public int[] getDNGVersion () { return _dngVersion; } /** Returns the value of the DNG UNIQUECAMERAMODEL (50708) tag. */ public String getUniqueCameraModel () { return _uniqueCameraModel; } /** Returns the value of the CFAPlaneColor (50710) tag. */ public int[] getCFAPlaneColor () { return _cfaPlaneColor; } /** Returns the value of the AsShotNeutral (50728) tag. */ public Rational[] getAsShotNeutral () { return _asShotNeutral; } /** Returns the value of the AsShotWhiteXY (50729) tag. */ public Rational[] getAsShotWhiteXY () { return _asShotWhiteXY; } /** Get the IFD properties. */ public Property getProperty (boolean rawOutput) throws TiffException { List entries = new LinkedList (); // This function has gotten obscenely large. Split it up. addNisoProperties (entries, rawOutput); addMiscProperties (entries, rawOutput); addTiffITProperties (entries, rawOutput); addTiffEPProperties (entries, rawOutput); addGeoTiffProperties (entries, rawOutput); addTiffFXProperties (entries, rawOutput); addDNGProperties (entries, rawOutput); return propertyHeader ("TIFF", entries); } private void addNisoProperties (List entries, boolean rawOutput) { entries.add (new Property ("NisoImageMetadata", PropertyType.NISOIMAGEMETADATA, _niso)); } /* Add non-NISO properties. */ private void addMiscProperties (List entries, boolean rawOutput) { if (_imageDescription != null) { entries.add (new Property ("ImageDescription", PropertyType.STRING, _imageDescription)); } if (_dateTime != null) { entries.add (new Property ("DateTime", PropertyType.STRING, _dateTime)); } if (_newSubfileType != 0L || rawOutput) { entries.add (addBitmaskProperty ("NewSubfileType", _newSubfileType, NEWSUBFILETYPE_L, rawOutput)); } else { // if 0, always report as a raw number entries.add (new Property ("NewSubfileType", PropertyType.LONG, new Long (_newSubfileType))); } if (_subfileType != NULL && (_subfileType != 0 || rawOutput)) { entries.add (addIntegerProperty ("SubfileType", _subfileType - 1, SUBFILETYPE_L, rawOutput)); } else if (_subfileType != NULL) { // if 0, always report as a raw number entries.add (new Property ("SubfileType", PropertyType.LONG, new Long (_subfileType))); } if (_documentName != null) { entries.add (new Property ("DocmentName", PropertyType.STRING, _documentName)); } if (_pageName != null) { entries.add (new Property ("PageName", PropertyType.STRING, _pageName)); } if (_pageNumber != null) { entries.add (new Property ("PageNumber", PropertyType.INTEGER, PropertyArity.ARRAY, _pageNumber)); } if (_xPosition != null) { entries.add (addRationalProperty ("XPosition", _xPosition, rawOutput)); } if (_yPosition != null) { entries.add (addRationalProperty ("YPosition", _yPosition, rawOutput)); } if (_copyright != null) { entries.add (new Property ("Copyright", PropertyType.STRING, _copyright)); } if (_fillOrder != NULL) { entries.add (addIntegerProperty ("FillOrder", _fillOrder, FILLORDER_L, rawOutput)); } entries.add (new Property ("SampleFormat", PropertyType.INTEGER, PropertyArity.ARRAY, _sampleFormat)); if (_minSampleValue != null) { entries.add (new Property ("MinSampleValue", PropertyType.INTEGER, PropertyArity.ARRAY, _minSampleValue)); } if (_maxSampleValue != null) { entries.add (new Property ("MaxSampleValue", PropertyType.INTEGER, PropertyArity.ARRAY, _maxSampleValue)); } if (_inkSet != NULL) { entries.add (addIntegerProperty ("InkSet", _inkSet, INKSET_L, rawOutput)); } if (_numberOfInks != NULL) { entries.add (new Property ("NumberOfInks", PropertyType.INTEGER, new Integer (_numberOfInks))); } if (_inkNames != null) { entries.add (new Property ("InkNames", PropertyType.STRING, PropertyArity.ARRAY, _inkNames)); } if (_dotRange != null) { entries.add (new Property ("DotRange", PropertyType.INTEGER, PropertyArity.ARRAY, _dotRange)); } if (_targetPrinter != null) { entries.add (new Property ("TargetPrinter", PropertyType.STRING, _targetPrinter)); } if (_halftoneHints != null) { entries.add (new Property ("HalftoneHints", PropertyType.INTEGER, PropertyArity.ARRAY, _halftoneHints)); } if (_cellLength != NULL) { entries.add (new Property ("CellLength", PropertyType.INTEGER, new Integer (_cellLength))); } if (_cellWidth != NULL) { entries.add (new Property ("CellWidth", PropertyType.INTEGER, new Integer (_cellWidth))); } if (_transferFunction) { entries.add (new Property ("TransferFunction", PropertyType.BOOLEAN, new Boolean (true))); } if (_transferRange != null) { entries.add (new Property ("TransferRange", PropertyType.INTEGER, PropertyArity.ARRAY, _transferRange)); } entries.add (new Property ("Threshholding", PropertyType.INTEGER, new Integer (_threshholding))); if (_predictor != NULL) { entries.add (addIntegerProperty ("Predictor", _predictor, PREDICTOR_L, rawOutput)); } if (_t4Options != NULL) { entries.add (new Property ("T4Options", PropertyType.LONG, new Long (_t4Options))); } if (_t6Options != NULL) { entries.add (new Property ("T6Options", PropertyType.LONG, new Long (_t6Options))); } if (_jpegProc != NULL) { entries.add (addIntegerProperty ("JPEGProc", _jpegProc, JPEGPROC_L, JPEGPROC_INDEX, rawOutput)); } if (_jpegInterchangeFormat != NULL) { entries.add (new Property ("JPEGInterchangeFormat", PropertyType.LONG, new Long (_jpegInterchangeFormat))); } if (_jpegInterchangeFormatLength != NULL) { entries.add (new Property ("JPEGInterchangeFormatLength", PropertyType.LONG, new Long (_jpegInterchangeFormatLength))); } if (_jpegRestartInterval != NULL) { entries.add (new Property ("JPEGRestartInterval", PropertyType.INTEGER, new Integer (_jpegRestartInterval))); } if (_jpegLosslessPredictors != null) { entries.add (addIntegerArrayProperty ("JPEGLosslessPredictors", _jpegLosslessPredictors, JPEGLOSSLESSPREDICTORS_L, rawOutput)); } if (_jpegPointTransforms != null) { entries.add (new Property ("JPEGPointTransforms", PropertyType.INTEGER, PropertyArity.ARRAY, _jpegPointTransforms)); } if (_jpegQTables != null) { entries.add (new Property ("JPEGQTables", PropertyType.LONG, PropertyArity.ARRAY, _jpegQTables)); } if (_jpegDCTables != null) { entries.add (new Property ("JPEGDCTables", PropertyType.LONG, PropertyArity.ARRAY, _jpegDCTables)); } if (_jpegACTables != null) { entries.add (new Property ("JPEGACTables", PropertyType.LONG, PropertyArity.ARRAY, _jpegACTables)); } if (_jpegTables != null) { entries.add (new Property ("JPEGTables", PropertyType.INTEGER, PropertyArity.ARRAY, _jpegTables)); } if (_imageSourceData != null) { entries.add (new Property ("ImageSourceData", PropertyType.INTEGER, PropertyArity.ARRAY, _imageSourceData)); } if (_photoshopProperties != null) { entries.add (new Property ("PhotoshopProperties", PropertyType.INTEGER, PropertyArity.ARRAY, _photoshopProperties)); } if (_annotations != null) { entries.add (new Property ("Annotations", PropertyType.INTEGER, PropertyArity.ARRAY, _annotations)); } if (_clipPath != null) { entries.add (new Property ("ClipPath", PropertyType.INTEGER, PropertyArity.ARRAY, _clipPath)); } if (_xClipPathUnits != NULL) { entries.add (new Property ("XClipPathUnits", PropertyType.LONG, new Long (_xClipPathUnits))); } if (_yClipPathUnits != NULL) { entries.add (new Property ("YClipPathUnits", PropertyType.LONG, new Long (_yClipPathUnits))); } if (_cleanFaxData != NULL) { entries.add (new Property ("CleanFaxData", PropertyType.LONG, new Long (_cleanFaxData))); } if (_badFaxLines != NULL) { entries.add (new Property ("BadFaxLines", PropertyType.LONG, new Long (_badFaxLines))); } if (_consecutiveBadFaxLines != NULL) { entries.add (new Property ("ConsecutiveBadFaxLines", PropertyType.LONG, new Long (_consecutiveBadFaxLines))); } if (_freeByteCounts != null) { entries.add (new Property ("FreeByteCounts", PropertyType.LONG, PropertyArity.ARRAY, _freeByteCounts)); } if (_freeOffsets != null) { entries.add (new Property ("FreeOffsets", PropertyType.LONG, PropertyArity.ARRAY, _freeOffsets)); } } private void addTiffITProperties (List entries, boolean rawOutput) { /* Add TIFF/IT properties. */ List itList = new LinkedList (); if (_site != null) { itList.add (new Property ("Site", PropertyType.STRING, _site)); } if (_colorTable != null) { itList.add (new Property ("ColorTable", PropertyType.INTEGER, PropertyArity.ARRAY, _colorTable)); } itList.add (addIntegerProperty ("BackgroundColorIndicator", _backgroundColorIndicator, BACKGROUNDCOLORINDICATOR_L, rawOutput)); if (_backgroundColorValue != NULL) { itList.add (new Property ("BackgroundColorValue", PropertyType.INTEGER, new Integer (_backgroundColorValue))); } itList.add (addIntegerProperty ("ImageColorIndicator", _imageColorIndicator, IMAGECOLORINDICATOR_L, rawOutput)); itList.add (addIntegerProperty ("TransparencyIndicator", _transparencyIndicator, TRANSPARENCYINDICATOR_L, rawOutput)); if (_imageColorValue != NULL) { itList.add (new Property ("ImageColorValue", PropertyType.INTEGER, new Integer (_imageColorValue))); } if (_colorCharacterization != null) { itList.add (new Property ("ColorCharacterization", PropertyType.STRING, _colorCharacterization)); } if (_colorSequence != null) { itList.add (new Property ("ColorSequence", PropertyType.STRING, _colorSequence)); } if (_hcUsage != NULL) { itList.add (addBitmaskProperty ("HCUsage", _hcUsage, HCUSAGE_L, rawOutput)); } if (_it8Header != null) { itList.add (new Property ("IT8Header", PropertyType.STRING, _it8Header)); } if (_pixelIntensityRange != null) { itList.add (new Property ("PixelIntensityRange", PropertyType.INTEGER, PropertyArity.ARRAY, _pixelIntensityRange)); } itList.add (addIntegerProperty ("RasterPadding", _rasterPadding, RASTERPADDING_L, rawOutput)); itList.add (new Property ("BitsPerRunLength", PropertyType.INTEGER, new Integer (_bitsPerRunLength))); itList.add (new Property ("BitsPerExtendedRunLength", PropertyType.INTEGER, new Integer (_bitsPerExtendedRunLength))); entries.add (new Property ("TIFFITProperties", PropertyType.PROPERTY, PropertyArity.LIST, itList)); } /* Add TIFF/EP properties. */ private void addTiffEPProperties (List entries, boolean rawOutput) { List epList = new LinkedList (); if (_cfaRepeatPatternDim != null) { epList.add (new Property ("CFARepeatPatternDim", PropertyType.INTEGER, PropertyArity.ARRAY, _cfaRepeatPatternDim)); } if (_cfaPattern != null) { epList.add (new Property ("CFAPattern", PropertyType.INTEGER, PropertyArity.ARRAY, _cfaPattern)); } if (_batteryLevel != null) { epList.add (new Property ("BatteryLevel", PropertyType.STRING, _batteryLevel)); } if (_iptc != null) { epList.add (new Property ("IPTCNAA", PropertyType.LONG, PropertyArity.ARRAY, _iptc)); } if (_interColourProfile != null) { epList.add (new Property ("InterColourProfile", PropertyType.BOOLEAN, Boolean.TRUE)); } if (_exposureProgram != NULL) { epList.add (addIntegerProperty ("ExposureProgram", _exposureProgram, EXPOSUREPROGRAM_L, rawOutput)); } if (_spectralSensitivity != null) { epList.add (new Property ("SpectralSensitivity", PropertyType.STRING, _spectralSensitivity)); } if (_isoSpeedRatings != null) { epList.add (new Property ("ISOSpeedRatings", PropertyType.INTEGER, PropertyArity.ARRAY, _isoSpeedRatings)); } if (_oecf != null) { epList.add (new Property ("OECF", PropertyType.INTEGER, PropertyArity.ARRAY, _oecf)); } if (_interlace != NULL) { epList.add (new Property ("Interlace", PropertyType.INTEGER, new Integer (_interlace))); } if (_timeZoneOffset != null) { epList.add (new Property ("TimeZoneOffset", PropertyType.INTEGER, PropertyArity.ARRAY, _timeZoneOffset)); } if (_selfTimerMode != NULL) { epList.add (new Property ("SelfTimerMode", PropertyType.INTEGER, new Integer (_selfTimerMode))); } if (_compressedBitsPerPixel != null) { epList.add (addRationalProperty ("CompressedBitsPerPixel", _compressedBitsPerPixel, rawOutput)); } if (_shutterSpeedValue != null) { epList.add (addRationalProperty ("ShutterSpeedValue", _shutterSpeedValue, rawOutput)); } if (_aperatureValue != null) { epList.add (addRationalProperty ("AperatureValue", _aperatureValue, rawOutput)); } if (_maxAperatureValue != null) { epList.add (addRationalProperty ("MaxAperatureValue", _maxAperatureValue, rawOutput)); } if (_flash != NULL) { epList.add (addIntegerProperty ("FLASH", _flash, FLASH_L, FLASH_INDEX, rawOutput)); } if (_spatialFrequencyResponse != null) { epList.add (new Property ("SpatialFrequencyResponse", PropertyType.INTEGER, PropertyArity.ARRAY, _spatialFrequencyResponse)); } if (_noise != null) { epList.add (new Property ("Noise", PropertyType.INTEGER, PropertyArity.ARRAY, _noise)); } if (_focalPlaneXResolution != null) { epList.add (addRationalProperty ("FocalPlaneXResolution", _focalPlaneXResolution, rawOutput)); } if (_focalPlaneYResolution != null) { epList.add (addRationalProperty ("FocalPlaneYResolution", _focalPlaneYResolution, rawOutput)); } if (_focalPlaneResolutionUnit != NULL) { epList.add (addIntegerProperty ("FocalPlaneResolutionUnit", _focalPlaneResolutionUnit, FOCALPLANERESOLUTIONUNIT_L, rawOutput)); } if (_imageNumber != NULL) { epList.add (new Property ("ImageNumber", PropertyType.LONG, new Long (_imageNumber))); } if (_securityClassification != null) { epList.add (new Property ("SecurityClassification", PropertyType.STRING, _securityClassification)); } if (_imageHistory != null) { epList.add (new Property ("ImageHistory", PropertyType.STRING, _imageHistory)); } if (_subjectLocation != null) { epList.add (new Property ("SubjectLocation", PropertyType.INTEGER, PropertyArity.ARRAY, _subjectLocation)); } if (_tiffEPStandardID != null) { epList.add (new Property ("TIFFEPSStandardID", PropertyType.STRING, _tiffEPStandardID)); } if (epList.size () > 0) { entries.add (new Property ("TIFFEPProperties", PropertyType.PROPERTY, PropertyArity.LIST, epList)); } if (_xmpProp != null) { entries.add (_xmpProp); } } private void addGeoTiffProperties (List entries, boolean rawOutput) throws TiffException { /* Add GeoTIFF properties. */ List dirList = new LinkedList (); if (_geoKeyDirectoryTag != null) { dirList.add (new Property ("Version", PropertyType.INTEGER, new Integer (_geoKeyDirectoryTag[0]))); dirList.add (new Property ("Revision", PropertyType.STRING, Integer.toString (_geoKeyDirectoryTag[1]) + "."+ Integer.toString (_geoKeyDirectoryTag[2]))); dirList.add (new Property ("NumberOfKeys", PropertyType.INTEGER, new Integer (_geoKeyDirectoryTag[3]))); for (int i=0; i<_geoKeyDirectoryTag[3]; i++) { int j = i*4 + 4; int key = _geoKeyDirectoryTag[j]; int location = _geoKeyDirectoryTag[j+1]; int count = _geoKeyDirectoryTag[j+2]; int offset = _geoKeyDirectoryTag[j+3]; int ival = 0; double dval = 0.0; String sval = "NULL"; if (location == 0) { ival = offset; } else if (location == 34736) { dval = _geoDoubleParamsTag[offset]; } else if (location == 34737) { try { sval = _geoAsciiParamsTag.substring (offset, offset + count-1); } catch (Exception e) { throw new TiffException ("Invalid GeoKeyDirectory tag"); } } if (key == GTMODELTYPEGEOKEY) { dirList.add (addIntegerProperty ("GTModelType", ival, GeoTiffStrings.MODELTYPE, GeoTiffStrings.MODELTYPE_INDEX, rawOutput)); } else if (key == GTRASTERTYPEGEOKEY) { dirList.add (addIntegerProperty ("GTRasterType", ival, GeoTiffStrings.RASTERTYPE, GeoTiffStrings.RASTERTYPE_INDEX, rawOutput)); } else if (key == GTCITATIONGEOKEY) { dirList.add (new Property ("GTCitation", PropertyType.STRING, sval)); } else if (key == GEOGRAPHICTYPEGEOKEY) { dirList.add (addIntegerProperty ("GeographicType", ival, GeoTiffStrings.GEOGRAPHICS, GeoTiffStrings.GEOGRAPHICS_INDEX, rawOutput)); } else if (key == GEOGCITATIONGEOKEY) { dirList.add (new Property ("GeogCitation", PropertyType.STRING, sval)); } else if (key == GEOGGEODETICDATUMGEOKEY) { dirList.add (addIntegerProperty ("GeogGeodeticDatum", ival, GeoTiffStrings.GEODETICDATUM, GeoTiffStrings.GEODETICDATUM_INDEX, rawOutput)); } else if (key == GEOGPRIMEMERIDIANGEOKEY) { dirList.add (addIntegerProperty ("GeogPrimeMeridian", ival, GeoTiffStrings.PRIMEMERIDIAN, GeoTiffStrings.PRIMEMERIDIAN_INDEX, rawOutput)); } else if (key == GEOGPRIMEMERIDIANLONGGEOKEY) { dirList.add (new Property ("GeogPrimeMeridianLong", PropertyType.DOUBLE, new Double (dval))); } else if (key == GEOGLINEARUNITSGEOKEY) { dirList.add (addIntegerProperty ("GeogLinearUnits", ival, GeoTiffStrings.LINEARUNITS, GeoTiffStrings.LINEARUNITS_INDEX, rawOutput)); } else if (key == GEOGLINEARUNITSIZEGEOKEY) { dirList.add (new Property ("GeogLinearUnitSize", PropertyType.DOUBLE, new Double (dval))); } else if (key == GEOGANGULARUNITSGEOKEY) { dirList.add (addIntegerProperty ("GeogAngularUnits", ival, GeoTiffStrings.ANGULARUNITS, GeoTiffStrings.ANGULARUNITS_INDEX, rawOutput)); } else if (key == GEOGANGULARUNITSIZEGEOKEY) { dirList.add (new Property ("GeogAngularUnitSize", PropertyType.DOUBLE, new Double (dval))); } else if (key == GEOGELLIPSOIDGEOKEY) { dirList.add (addIntegerProperty ("GeogEllipsoid", ival, GeoTiffStrings.ELLIPSOID, GeoTiffStrings.ELLIPSOID_INDEX, rawOutput)); } else if (key == GEOGSEMIMAJORAXISGEOKEY) { dirList.add (new Property ("GeogSemiMajorAxis", PropertyType.DOUBLE, new Double (dval))); } else if (key == GEOGSEMIMINORAXISGEOKEY) { dirList.add (new Property ("GeogSemiMinorAxis", PropertyType.DOUBLE, new Double (dval))); } else if (key == GEOGINVFLATTENINGGEOKEY) { dirList.add (new Property ("GeogInvFlattening", PropertyType.DOUBLE, new Double (dval))); } else if (key == GEOGAZIMUTHUNITSGEOKEY) { dirList.add (addIntegerProperty ("GeogAzimuthUnits", ival, GeoTiffStrings.ANGULARUNITS, GeoTiffStrings.ANGULARUNITS_INDEX, rawOutput)); } else if (key == PROJECTEDCSTYPEGEOKEY) { dirList.add (addIntegerProperty ("ProjectedCSType", ival, GeoTiffStrings.PROJECTEDCSTYPE, GeoTiffStrings.PROJECTEDCSTYPE_INDEX, rawOutput)); } else if (key == PCSCITATIONGEOKEY) { dirList.add (new Property ("PCSCitation", PropertyType.STRING, sval)); } else if (key == PROJECTIONGEOKEY) { dirList.add (addIntegerProperty ("Projection", ival, GeoTiffStrings.PROJECTION, GeoTiffStrings.PROJECTION_INDEX, rawOutput)); } else if (key == PROJCOORDTRANSGEOKEY) { dirList.add (addIntegerProperty ("ProjCoordTrans", ival, GeoTiffStrings.COORDINATETRANSFORMATION, GeoTiffStrings.COORDINATETRANSFORMATION_INDEX, rawOutput)); } else if (key == PROJLINEARUNITSGEOKEY) { dirList.add (addIntegerProperty ("ProjLinearUnits", ival, GeoTiffStrings.LINEARUNITS, GeoTiffStrings.LINEARUNITS_INDEX, rawOutput)); } else if (key == PROJLINEARUNITSIZEGEOKEY) { dirList.add (new Property ("ProjLinearUnitSize", PropertyType.DOUBLE, new Double (dval))); } else if (key == PROJSTDPARALLEL1GEOKEY) { dirList.add (new Property ("ProjStdParallel1", PropertyType.DOUBLE, new Double (dval))); } else if (key == PROJSTDPARALLEL2GEOKEY) { dirList.add (new Property ("ProjStdParallel2", PropertyType.DOUBLE, new Double (dval))); } else if (key == PROJNATORIGINLONGGEOKEY) { dirList.add (new Property ("ProjNatOriginLong", PropertyType.DOUBLE, new Double (dval))); } else if (key == PROJNATORIGINLATGEOKEY) { dirList.add (new Property ("ProjNatOriginLat", PropertyType.DOUBLE, new Double (dval))); } else if (key == PROJFALSEEASTINGGEOKEY) { dirList.add (new Property ("ProjFalseEasting", PropertyType.DOUBLE, new Double (dval))); } else if (key == PROJFALSENORTHINGGEOKEY) { dirList.add (new Property ("ProjFalseNorthing", PropertyType.DOUBLE, new Double (dval))); } else if (key == PROJFALSEORIGINLONGGEOKEY) { dirList.add (new Property ("ProjFalseOriginLong", PropertyType.DOUBLE, new Double (dval))); } else if (key == PROJFALSEORIGINLATGEOKEY) { dirList.add (new Property ("ProjFalseOriginLat", PropertyType.DOUBLE, new Double (dval))); } else if (key == PROJFALSEORIGINEASTINGGEOKEY) { dirList.add (new Property ("ProjFalseOriginEasting", PropertyType.DOUBLE, new Double (dval))); } else if (key == PROJFALSEORIGINNORTHINGGEOKEY || key == PROJFALSEORIGINNORTHINGGEOKEY_2) { dirList.add (new Property ("ProjFalseOriginNorthing", PropertyType.DOUBLE, new Double (dval))); } else if (key == PROJCENTERLONGGEOKEY) { dirList.add (new Property ("ProjCenterLong", PropertyType.DOUBLE, new Double (dval))); } else if (key == PROJCENTERLATGEOKEY) { dirList.add (new Property ("ProjCenterLat", PropertyType.DOUBLE, new Double (dval))); } else if (key == PROJCENTEREASTINGGEOKEY) { dirList.add (new Property ("ProjCenterEasting", PropertyType.DOUBLE, new Double (dval))); } else if (key == PROJSCALEATNATORIGINGEOKEY) { dirList.add (new Property ("ProjScaleAtNatOrigin", PropertyType.DOUBLE, new Double (dval))); } else if (key == PROJSCALEATCENTERGEOKEY) { dirList.add (new Property ("ProjScaleAtCenter", PropertyType.DOUBLE, new Double (dval))); } else if (key == PROJAZIMUTHANGLEGEOKEY) { dirList.add (new Property ("ProjAzimuthAngle", PropertyType.DOUBLE, new Double (dval))); } else if (key == PROJSTRAIGHTVERTPOLELONGEOKEY) { dirList.add (new Property ("ProjStraightVertPoleLong", PropertyType.DOUBLE, new Double (dval))); } else if (key == VERTICALCSTYPEGEOKEY) { dirList.add (addIntegerProperty ("VerticalCSType", ival, GeoTiffStrings.VERTICALCSTYPE, GeoTiffStrings.VERTICALCSTYPE_INDEX, rawOutput)); } else if (key == VERTICALCITATIONGEOKEY) { dirList.add (new Property ("VerticalCitation", PropertyType.STRING, sval)); } else if (key == VERTICALDATUMGEOKEY) { dirList.add (addIntegerProperty ("VerticalDatum", ival, GeoTiffStrings.VERTICALCSDATUM, GeoTiffStrings.VERTICALCSDATUM_INDEX, rawOutput)); } else if (key == VERTICALUNITSGEOKEY) { dirList.add (addIntegerProperty ("VerticalUnits", ival, GeoTiffStrings.LINEARUNITS, GeoTiffStrings.LINEARUNITS_INDEX, rawOutput)); } } } List geoList = new LinkedList (); if (dirList.size () > 0) { geoList.add (new Property ("GeoKeyDirectory", PropertyType.PROPERTY, PropertyArity.LIST, dirList)); } if (_modelTiepointTag != null) { geoList.add (new Property ("ModelTiepointTag", PropertyType.DOUBLE, PropertyArity.ARRAY,_modelTiepointTag)); } if (_modelPixelScaleTag != null) { geoList.add (new Property ("ModelPixelScaleTag", PropertyType.DOUBLE, PropertyArity.ARRAY, _modelPixelScaleTag)); } if (_modelTransformationTag != null) { geoList.add (new Property ("ModelTransformationTag", PropertyType.DOUBLE, PropertyArity.ARRAY, _modelTransformationTag)); } if (geoList.size () > 0) { entries.add (new Property ("GeoTIFFProperties", PropertyType.PROPERTY, PropertyArity.LIST, geoList)); } } /* Add Tiff/FX properties */ private void addTiffFXProperties (List entries, boolean rawOutput) { if (_stripRowCounts != null) { entries.add (new Property ("StripRowCounts", PropertyType.LONG, PropertyArity.ARRAY, _stripRowCounts)); } if (_imageLayer != null) { // Do up ImageLayer as a property with two subproperties. Property[] layerProps = new Property[2]; try { layerProps[0] = addIntegerProperty ("LayerType", _imageLayer[0], IMAGELAYER_L, rawOutput); layerProps[1] = new Property ("OrdinalNumber", PropertyType.INTEGER, new Integer (_imageLayer[1])); entries.add (new Property ("ImageLayer", PropertyType.PROPERTY, PropertyArity.ARRAY, layerProps)); } // Don't blow up on incorrect array size catch (Exception e) {} } } /* Adds DNG properties. */ private void addDNGProperties (List entries, boolean rawOutput) { setDNGDefaults (); List dngList = new LinkedList (); if (_dngVersion != null) { dngList.add (new Property ("DNGVersion", PropertyType.INTEGER, PropertyArity.ARRAY, _dngVersion)); } if (_dngBackwardVersion != null) { dngList.add (new Property ("DNGBackwardVersion", PropertyType.INTEGER, PropertyArity.ARRAY, _dngBackwardVersion)); } if (_uniqueCameraModel != null) { dngList.add (new Property ("UniqueCameraModel", PropertyType.STRING, _uniqueCameraModel)); } if (_localizedCameraModel != null) { dngList.add (new Property ("LocalizedCameraModel", PropertyType.STRING, _localizedCameraModel)); } if (_cfaPlaneColor != null) { dngList.add (new Property ("CFAPlaneColor", PropertyType.INTEGER, PropertyArity.ARRAY, _cfaPlaneColor)); } if (_cfaLayout != NULL) { dngList.add (addIntegerProperty ("CFALayout", _cfaLayout, CFALAYOUT_L, rawOutput)); } if (_linearizationTable != null) { dngList.add (new Property ("LinearizationTable", PropertyType.INTEGER, PropertyArity.ARRAY, _linearizationTable)); } if (_blackLevelRepeatDim != null) { dngList.add (new Property ("BlackLevelRepeatDim", PropertyType.INTEGER, PropertyArity.ARRAY, _blackLevelRepeatDim)); } if (_blackLevel != null) { dngList.add (new Property ("BlackLevel", PropertyType.RATIONAL, PropertyArity.ARRAY, _blackLevel)); } if (_blackLevelDeltaH != null) { dngList.add (new Property ("BlackLevelDeltaH", PropertyType.RATIONAL, PropertyArity.ARRAY, _blackLevelDeltaH)); } if (_blackLevelDeltaV != null) { dngList.add (new Property ("BlackLevelDeltaV", PropertyType.RATIONAL, PropertyArity.ARRAY, _blackLevelDeltaV)); } if (_whiteLevel != null) { dngList.add (new Property ("WhiteLevel", PropertyType.LONG, PropertyArity.ARRAY, _whiteLevel)); } if (_defaultScale != null) { dngList.add (new Property ("DefaultScale", PropertyType.RATIONAL, PropertyArity.ARRAY, _defaultScale)); } if (_bestQualityScale != null) { dngList.add (new Property ("BestQualityScale", PropertyType.RATIONAL, _bestQualityScale)); } if (_defaultCropOrigin != null) { dngList.add (new Property ("DefaultCropOrigin", PropertyType.RATIONAL, PropertyArity.ARRAY, _defaultCropOrigin)); } if (_defaultCropSize != null) { dngList.add (new Property ("DefaultCropSize", PropertyType.RATIONAL, PropertyArity.ARRAY, _defaultCropSize)); } if (_calibrationIlluminant1 != NULL) { dngList.add (new Property ("CalibrationIlluminant1", PropertyType.INTEGER, new Integer (_calibrationIlluminant1))); } if (_calibrationIlluminant2 != NULL) { dngList.add (new Property ("CalibrationIlluminant2", PropertyType.INTEGER, new Integer (_calibrationIlluminant2))); } if (_colorMatrix1 != null) { dngList.add (new Property ("ColorMatrix1", PropertyType.RATIONAL, PropertyArity.ARRAY, _colorMatrix1)); } if (_colorMatrix2 != null) { dngList.add (new Property ("ColorMatrix2", PropertyType.RATIONAL, PropertyArity.ARRAY, _colorMatrix2)); } if (_cameraCalibration1 != null) { dngList.add (new Property ("CameraCalibration1", PropertyType.RATIONAL, PropertyArity.ARRAY, _cameraCalibration1)); } if (_cameraCalibration2 != null) { dngList.add (new Property ("CameraCalibration2", PropertyType.RATIONAL, PropertyArity.ARRAY, _cameraCalibration2)); } if (_reductionMatrix1 != null) { dngList.add (new Property ("ReductionMatrix1", PropertyType.RATIONAL, PropertyArity.ARRAY, _reductionMatrix1)); } if (_reductionMatrix2 != null) { dngList.add (new Property ("ReductionMatrix2", PropertyType.RATIONAL, PropertyArity.ARRAY, _reductionMatrix2)); } if (_analogBalance != null) { dngList.add (new Property ("AnalogBalance", PropertyType.RATIONAL, PropertyArity.ARRAY, _analogBalance)); } if (_asShotNeutral != null) { dngList.add (new Property ("AsShotNeutral", PropertyType.RATIONAL, PropertyArity.ARRAY, _asShotNeutral)); } if (_asShotWhiteXY != null) { dngList.add (new Property ("AsShotWhiteXY", PropertyType.RATIONAL, PropertyArity.ARRAY, _asShotWhiteXY)); } if (_baselineExposure != null) { dngList.add (new Property ("BaselineExposure", PropertyType.RATIONAL, _baselineExposure)); } if (_baselineNoise != null) { dngList.add (new Property ("BaselineNoise", PropertyType.RATIONAL, _baselineNoise)); } if (_baselineNoise != null) { dngList.add (new Property ("BaselineSharpness", PropertyType.RATIONAL, _baselineSharpness)); } if (_bayerGreenSplit != NULL) { dngList.add (new Property ("BayerGreenSplit", PropertyType.INTEGER, new Integer (_bayerGreenSplit))); } if (_linearResponseLimit != null) { dngList.add (new Property ("LinearResponseLimit", PropertyType.RATIONAL, _linearResponseLimit)); } if (_cameraSerialNumber != null) { dngList.add (new Property ("CameraSerialNumber", PropertyType.STRING, _cameraSerialNumber)); } if (_lensInfo != null) { dngList.add (new Property ("LensInfo", PropertyType.RATIONAL, PropertyArity.ARRAY, _lensInfo)); } if (_chromaBlurRadius != null) { dngList.add (new Property ("ChromaBlurRadius", PropertyType.RATIONAL, _chromaBlurRadius)); } if (_antiAliasStrength != null) { dngList.add (new Property ("AntiAliasStrength", PropertyType.RATIONAL, _antiAliasStrength)); } if (_dngPrivateData != null) { dngList.add (new Property ("DNGPrivateData", PropertyType.INTEGER, _dngPrivateData)); } if (_makerNoteSafety != NULL) { dngList.add (addIntegerProperty ("MakerNoteSafety", _makerNoteSafety, MAKERNOTESAFETY_L, rawOutput)); } if (dngList.size () > 0) { entries.add (new Property ("DNGProperties", PropertyType.PROPERTY, PropertyArity.LIST, dngList)); } } /** ColorPlanes is an undefined primary in the TIFF spec. It's * actually a non-obvious definition which is something of a * pain to calculate. */ private int calcColorPlanes () { if (_photometricInterpretation == TiffProfileDNG.CFA) { // In this case, it's the number of unique colors // in the CFA pattern. (You mean you didn't already // know that?) int nUnique = 0; if (_cfaPattern == null) { // It's broken; return 1 so we don't try to // allocate zero-length objects. return 1; } int[] uniqueColors = new int[_cfaPattern.length]; for (int i = 0; i < _cfaPattern.length; i++) { boolean unique = true; int color = _cfaPattern[i]; for (int j = 0; j < nUnique; j++) { if (color == uniqueColors[j]) { unique = false; break; } } if (unique) { uniqueColors[nUnique++] = color; } } return nUnique; } else { return _niso.getSamplesPerPixel(); } } /** Set the default values for any DNG tags that haven't been * encountered yet. If _dngVersion is zero, apply the IFD 0 * defaults; if PhotometricInterpretation is CFA or RawLinear, * apply the Raw IFD defaults. */ private void setDNGDefaults () { if (_dngVersion != null) { // Apply "IFD 0" defaults if (_dngBackwardVersion == null) { _dngBackwardVersion = new int[4]; // The default value is _dngVersion with the last two // bytes set to zero. _dngBackwardVersion[0] = _dngVersion[0]; _dngBackwardVersion[1] = _dngVersion[1]; _dngBackwardVersion[2] = 0; _dngBackwardVersion[3] = 0; } if (_uniqueCameraModel != null && _localizedCameraModel == null) { _localizedCameraModel = _uniqueCameraModel; } if (_calibrationIlluminant1 == NULL) { _calibrationIlluminant1 = 0; } if (_baselineExposure == null) { _baselineExposure = new Rational (0, 1); } if (_baselineNoise == null) { _baselineNoise = new Rational (1, 1); } if (_baselineSharpness == null) { _baselineSharpness = new Rational (1, 1); } if (_linearResponseLimit == null) { _linearResponseLimit = new Rational (1, 1); } if (_makerNoteSafety == NULL) { _makerNoteSafety = 0; } // There are some IFD 0 defaults which depend on the value of // "ColorPlanes," which is derived from information in the Raw IFD. // This would require processing the IFD's out of order, so those // defaults (AnalogBalance) go unreported. } if (_photometricInterpretation == TiffProfileDNG.CFA || _photometricInterpretation == TiffProfileDNG.LINEAR_RAW) { // Apply "Raw IFD" defaults. This really isn't sufficient // information to establish a file as DNG, but the properties // are in their own category, so it's fairly harmless to leave // them in even if it's actually, for example, a TIFF-EP file. if (_cfaPlaneColor == null) { _cfaPlaneColor = new int[] {0, 1, 2}; } if (_cfaLayout == NULL) { _cfaLayout = 1; } // The size of the LinearizationTable is -- I quote -- N. // This is NOT useful. Skip that default. if (_blackLevelRepeatDim == null) { _blackLevelRepeatDim = new int[] { 1, 1 }; } Rational zero = new Rational (0, 1); if (_blackLevel == null) { _blackLevel = new Rational [_blackLevelRepeatDim[0] * _blackLevelRepeatDim[1] * _niso.getSamplesPerPixel()]; for (int i = 0; i < _blackLevel.length; i++) { _blackLevel[i] = zero; } } if (_blackLevelDeltaH == null) { _blackLevelDeltaH = new Rational [(int) _niso.getImageWidth()]; for (int i = 0; i < _blackLevelDeltaH.length; i++) { _blackLevelDeltaH[i] = zero; } } if (_blackLevelDeltaV == null) { _blackLevelDeltaV = new Rational [(int) _niso.getImageLength()]; for (int i = 0; i < _blackLevelDeltaV.length; i++) { _blackLevelDeltaV[i] = zero; } } if (_whiteLevel == null) { _whiteLevel = new long[_niso.getSamplesPerPixel()]; long defWhite = (1L << _niso.getBitsPerSample()[0] - 1); for (int i = 0; i < _whiteLevel.length; i++) { _whiteLevel[i] = defWhite; } } Rational one = new Rational (1, 1); if (_defaultScale == null) { _defaultScale = new Rational[] { one, one }; } if (_bestQualityScale == null) { _bestQualityScale = one; } if (_defaultCropOrigin == null) { _defaultCropOrigin = new Rational[] {zero, zero}; } if (_defaultCropSize == null) { _defaultCropSize = new Rational[2]; _defaultCropSize[0] = new Rational (_niso.getImageWidth(), 1); _defaultCropSize[1] = new Rational (_niso.getImageLength(), 1); } int colorPlanes = calcColorPlanes (); if (_cameraCalibration1 == null) { // Identity matrix with dimension of ColorPlanes*ColorPlanes _cameraCalibration1 = identityMatrix (colorPlanes); } if (_cameraCalibration2 == null) { // Identity matrix with dimension of ColorPlanes*ColorPlanes _cameraCalibration2 = identityMatrix (colorPlanes); } if (_bayerGreenSplit == NULL && _photometricInterpretation == TiffProfileDNG.CFA) { _bayerGreenSplit = 0; } if (_antiAliasStrength == null) { _antiAliasStrength = new Rational (1, 1); } } } /** Create a Rational identity matrix of the specified size. */ private Rational [] identityMatrix (int dim) { Rational[] val = new Rational [dim * dim]; // Set them all to zero, then overwrite the diagonal values // to one. int i; for (i = 0; i < dim * dim; i++) { val[i] = new Rational (0, 1); } for (i = 0; i < dim; i++) { val[dim * i + i] = new Rational (1, 1); } return val; } /** Looks up an IFD tag. */ public void lookupTag (int tag, int type, long count, long value) throws TiffException { try { if (tag == APERTUREVALUE) { checkType (tag, type, RATIONAL); checkCount (tag, count, 1); _aperatureValue = readRational (count, value); } else if (tag == ARTIST) { checkType (tag, type, ASCII); _niso.setImageProducer (readASCII (count, value)); if (_version < 5) { _version = 5; } } else if (tag == BACKGROUNDCOLORINDICATOR) { checkType (tag, type, BYTE); checkCount (tag, count, 1); _backgroundColorIndicator = readByte (type, count, value); } else if (tag == BACKGROUNDCOLORVALUE) { checkType (tag, type, BYTE); checkCount (tag, count, 1); _backgroundColorValue = readByte (type, count, value); } else if (tag == BADFAXLINES) { checkType (tag, type, SHORT, LONG); checkCount (tag, count, 1); _badFaxLines = readLong (type, count, value); } else if (tag == BATTERYLEVEL) { checkType (tag, type, RATIONAL, ASCII); if (type == RATIONAL) { Rational r = readRational (count, value); _batteryLevel = Double.toString (r.toDouble ()); } else { _batteryLevel = readASCII (count, value); } } else if (tag == BITSPEREXTENDEDRUNLENGTH) { checkType (tag, type, SHORT); checkCount (tag, count, 1); _bitsPerExtendedRunLength = readShort (type, count, value); } else if (tag == BITSPERRUNLENGTH) { checkType (tag, type, SHORT); checkCount (tag, count, 1); _bitsPerRunLength = readShort (type, count, value); } else if (tag == BITSPERSAMPLE) { checkType (tag, type, SHORT); _niso.setBitsPerSample (readShortArray (type, count, value)); } else if (tag == BRIGHTNESSVALUE) { checkType (tag, type, SRATIONAL); if (count == 1) { _niso.setBrightness (readSignedRational (count, value).toDouble ()); } else { Rational [] r = readSignedRationalArray (count, value); _niso.setBrightness (average (r[0], r[1]).toDouble ()); } } else if (tag == CELLLENGTH) { checkType (tag, type, SHORT); _cellLength = readShort (type, count, value); } else if (tag == CELLWIDTH) { checkType (tag, type, SHORT); _cellWidth = readShort (type, count, value); } else if (tag == CFAPATTERN) { checkType (tag, type, BYTE); _cfaPattern = readByteArray (type, count, value); } else if (tag == CFAREPEATPATTERNDIM) { checkType (tag, type, SHORT); checkCount (tag, count, 2); _cfaRepeatPatternDim = readShortArray (type, count, value); } else if (tag == CLEANFAXDATA) { checkType (tag, type, SHORT); checkCount (tag, count, 1); _badFaxLines = readShort (type, count, value); } else if (tag == CLIPPATH) { checkType (tag, type, BYTE); _clipPath = readByteArray (type, count, value); } else if (tag == COLORCHARACTERIZATION) { checkType (tag, type, ASCII); _colorCharacterization = readASCII (count, value); } else if (tag == COLORSEQUENCE) { checkType (tag, type, ASCII); _colorSequence = readASCII (count, value); } else if (tag == COLORMAP) { checkType (tag, type, SHORT); int [] colorMap = readShortArray (type, count, value); int [] bitCode = new int [colorMap.length]; int [] red = new int [colorMap.length]; int [] green = new int [colorMap.length]; int [] blue = new int [colorMap.length]; int len = colorMap.length/3; int len2= 2*len; for (int i=0; i key) { throw new TiffException ("GeoKey " + key + " out of sequence"); } prevKey = key; } } else if (tag == GLOBALPARAMETERSIFD) { checkType (tag, type, LONG, IFD); // RFC 2301 allows only IFD, but the latest working // draft allows LONG. Even though allowing LONG // technically isn't allowed yet, letting it by seems // reasonable, since other IFD tags can be LONG. checkCount (tag, count, 1); _globalParametersIFD = readLong (type, count, value); } else if (tag == GPSINFOIFD) { checkType (tag, type, LONG); checkCount (tag, count, 1); _gpsInfoIFD = readLong (type, count, value); } else if (tag == GRAYRESPONSECURVE) { checkType (tag, type, SHORT); _niso.setGrayResponseCurve (readShortArray (type, count, value)); } else if (tag == GRAYRESPONSEUNIT) { checkType (tag, type, SHORT); checkCount (tag, count, 1); _niso.setGrayResponseUnit (readShort (type, count, value)); } else if (tag == HALFTONEHINTS) { checkType (tag, type, SHORT); checkCount (tag, count, 2); _halftoneHints = readShortArray (type, count, value); if (_version < 6) { _version = 6; } } else if (tag == HCUSAGE) { checkType (tag, type, LONG); checkCount (tag, count, 1); _hcUsage = readLong (type, count, value); } else if (tag == HOSTCOMPUTER) { checkType (tag, type, ASCII); _niso.setHostComputer (readASCII (count, value)); if (_version < 5) { _version = 5; } } else if (tag == IMAGEDESCRIPTION) { checkType (tag, type, ASCII); _imageDescription = readASCII (count, value); } else if (tag == IMAGEID) { checkType (tag, type, ASCII); _niso.setImageIdentifier (readASCII (count, value)); } else if (tag == IMAGECOLORINDICATOR) { checkType (tag, type, BYTE); checkCount (tag, count, 1); _imageColorIndicator = readByte (type, count, value); } else if (tag == IMAGECOLORVALUE) { checkType (tag, type, BYTE); checkCount (tag, count, 1); _imageColorValue = readByte (type, count, value); } else if (tag == IMAGEHISTORY) { checkType (tag, type, ASCII); _imageHistory = readASCII (count, value); } else if (tag == IMAGELAYER) { checkType (tag, type, SHORT, LONG); checkCount (tag, count, 2); _imageLayer = readShortArray (type, count, value); } else if (tag == IMAGELENGTH) { checkType (tag, type, SHORT, LONG); checkCount (tag, count, 1); _niso.setImageLength (readLong (type, count, value)); } else if (tag == IMAGENUMBER) { checkType (tag, type, LONG); checkCount (tag, count, 1); _imageNumber = readLong (type, count, value); } else if (tag == IMAGESOURCEDATA) { checkType (tag, type, UNDEFINED); //_imageSourceData = readByteArray (type, count, value); // GDM 16-Sep-2005: // The ImageSourceData tag sometimes has a gigantic // amount of data, and we don't actually do anything with // it in the current version of JHOVE except determine if // it's there. _imageSourceData = new int[] {1}; } else if (tag == PHOTOSHOPPROPS) { // Can't find any info on what type is expected. _photoshopProperties = readByteArray (type, count, value); } else if (tag == ANNOTATIONS) { // Can't find any info on what type is expected. _annotations = readByteArray (type, count, value); } else if (tag == IMAGEWIDTH) { checkType (tag, type, SHORT, LONG); checkCount (tag, count, 1); _niso.setImageWidth (readLong (type, count, value)); } else if (tag == INDEXED) { checkType (tag, type, SHORT); checkCount (tag, count, 1); _indexed = readShort (type, count, value); } else if (tag == INKNAMES) { checkType (tag, type, ASCII); _inkNames = readASCIIArray (count, value); if (_version < 6) { _version = 6; } } else if (tag == INKSET) { checkType (tag, type, SHORT); checkCount (tag, count, 1); _inkSet = readShort (type, count, value); if (_version < 6) { _version = 6; } } else if (tag == ICC_PROFILE) { checkType (tag, type, UNDEFINED); _interColourProfile = readByteArray (type, count, value); } else if (tag == INTERLACE) { checkType (tag, type, SHORT); checkCount (tag, count, 1); _interlace = readShort (type, count, value); } else if (tag == INTEROPERABILITYIFD) { checkType (tag, type, LONG); checkCount (tag, count, 1); _interoperabilityIFD = readLong (type, count, value); } else if (tag == IPTCNAA) { if (type == ASCII) { String s = readASCII (count, value); long [] larray = new long [s.length ()]; for (int i=0; i 1) { darray[1] = r[1].toDouble (); } else { darray[1] = darray[0]; } } _niso.setSubjectDistance (darray); } else if (tag == SOFTWARE) { checkType (tag, type, ASCII); _niso.setScanningSoftware (readASCII (count, value)); if (_version < 5) { _version = 5; } } else if (tag == SPATIALFREQUENCYRESPONSE) { checkType (tag, type, UNDEFINED); _spatialFrequencyResponse = readByteArray (type, count, value); } else if (tag == SPECTRALSENSITIVITY) { checkType (tag, type, ASCII); _spectralSensitivity = readASCII (count, value); } else if (tag == STRIPBYTECOUNTS) { checkType (tag, type, SHORT, LONG); _niso.setStripByteCounts (readLongArray (type, count, value)); } else if (tag == STRIPOFFSETS) { checkType (tag, type, SHORT, LONG); _niso.setStripOffsets (readLongArray (type, count, value)); } else if (tag == SUBFILETYPE) { checkType (tag, type, LONG); checkCount (tag, count, 1); _subfileType = readShort (type, count, value); } else if (tag == SUBIFDS) { checkType (tag, type, LONG, IFD); _subIFDs = readLongArray (type, count, value); } else if (tag == SUBJECTLOCATION) { checkType (tag, type, SHORT); _subjectLocation = readShortArray (type, count, value); } else if (tag == T4OPTIONS) { checkType (tag, type, LONG); _t4Options = readShort (type, count, value); } else if (tag == T6OPTIONS) { checkType (tag, type, LONG); _t6Options = readShort (type, count, value); } else if (tag == TARGETPRINTER) { checkType (tag, type, ASCII); _targetPrinter = readASCII (count, value); if (_version < 6) { _version = 6; } } else if (tag == THRESHHOLDING) { checkType (tag, type, SHORT); checkCount (tag, count, 1); _threshholding = readShort (type, count, value); } else if (tag == TIFFEPSTANDARDID) { checkType (tag, type, SHORT); checkCount (tag, count, 4); int [] iarray = readShortArray (type, count, value); _tiffEPStandardID = Integer.toString (iarray[0]) + "." + Integer.toString (iarray[1]) + "." + Integer.toString (iarray[2]) + "." + Integer.toString (iarray[3]); } else if (tag == TILEBYTECOUNTS) { checkType (tag, type, SHORT, LONG); _niso.setTileByteCounts (readLongArray (type, count, value)); if (_version < 6) { _version = 6; } } else if (tag == TILELENGTH) { checkType (tag, type, SHORT, LONG); checkCount (tag, count, 1); _niso.setTileLength (readLong (type, count, value)); if (_version < 6) { _version = 6; } } else if (tag == TILEOFFSETS) { checkType (tag, type, SHORT, LONG); _niso.setTileOffsets (readLongArray (type, count, value)); if (_version < 6) { _version = 6; } } else if (tag == TILEWIDTH) { checkType (tag, type, SHORT, LONG); checkCount (tag, count, 1); _niso.setTileWidth (readLong (type, count, value)); if (_version < 6) { _version = 6; } } else if (tag == TIMEZONEOFFSET) { checkType (tag, type, SSHORT); _timeZoneOffset = readSShortArray (type, count, value); } else if (tag == TRANSFERFUNCTION) { /* Transfer function arrays potentially can have millions * of elements, so we just report presence */ checkType (tag, type, SHORT); _transferFunction = true; } else if (tag == TRANSFERRANGE) { checkType (tag, type, SHORT); checkCount (tag, count, 6); _transferRange = readShortArray (type, count, value); if (_version < 6) { _version = 6; } } else if (tag == TRANSPARENCYINDICATOR) { checkType (tag, type, BYTE); checkCount (tag, count, 1); _transparencyIndicator = readByte (type, count, value); } else if (tag == WHITEPOINT) { checkType (tag, type, RATIONAL); checkCount (tag, count, 2); Rational [] rarray = readRationalArray (count, value); _niso.setWhitePointXValue (rarray[0]); _niso.setWhitePointYValue (rarray[0]); if (_version < 5) { _version = 5; } } else if (tag == XCLIPPATHUNITS) { checkType (tag, type, LONG); checkCount (tag, count, 1); _xClipPathUnits = readLong (type, count, value); } else if (tag == XPOSITION) { checkType (tag, type, RATIONAL); checkCount (tag, count, 1); _xPosition = readRational (count, value); } else if (tag == XRESOLUTION) { checkType (tag, type, RATIONAL); checkCount (tag, count, 1); _niso.setXSamplingFrequency (readRational (count, value)); } else if (tag == YCBCRCOEFFICIENTS) { checkType (tag, type, RATIONAL); checkCount (tag, count, 3); _niso.setYCbCrCoefficients (readRationalArray (count, value)); if (_version < 6) { _version = 6; } } else if (tag == YCBCRPOSITIONING) { checkType (tag, type, SHORT); checkCount (tag, count, 1); _niso.setYCbCrPositioning (readShort (type, count, value)); if (_version < 6) { _version = 6; } } else if (tag == YCBCRSUBSAMPLING) { checkType (tag, type, SHORT); checkCount (tag, count, 2); _niso.setYCbCrSubSampling(readShortArray (type, count, value)); if (_version < 6) { _version = 6; } } else if (tag == YCLIPPATHUNITS) { checkType (tag, type, LONG); checkCount (tag, count, 1); _yClipPathUnits = readLong (type, count, value); } else if (tag == YPOSITION) { checkType (tag, type, RATIONAL); checkCount (tag, count, 1); _yPosition = readRational (count, value); } else if (tag == YRESOLUTION) { checkType (tag, type, RATIONAL); checkCount (tag, count, 1); _niso.setYSamplingFrequency (readRational (count, value)); } else if (tag == XMP) { checkType (tag, type, BYTE); _xmpProp = readXMP (count, value); } else if (tag == DNGVERSION) { checkType (tag, type, BYTE); checkCount (tag, count, 4); _dngVersion = readByteArray (type, count, value); } else if (tag == DNGBACKWARDVERSION) { checkType (tag, type, BYTE); checkCount (tag, count, 4); _dngBackwardVersion = readByteArray (type, count, value); } else if (tag == UNIQUECAMERAMODEL) { checkType (tag, type, ASCII); _uniqueCameraModel = readASCII(count, value); } else if (tag == LOCALIZEDCAMERAMODEL) { checkType (tag, type, ASCII, BYTE); // This tag is specified as UTF-8 byte[] lcm = readTrueByteArray(type, count, value); // Trim off trailing null (s) int len = lcm.length; while (len > 0 && lcm[len - 1] == 0) { len--; } _localizedCameraModel = new String (lcm, 0, len); } else if (tag == CFAPLANECOLOR) { checkType (tag, type, BYTE); _cfaPlaneColor = readByteArray (type, count, value); } else if (tag == CFALAYOUT) { checkType (tag, type, SHORT); _cfaLayout = readShort(type, count, value); } else if (tag == LINEARIZATIONTABLE) { checkType (tag, type, SHORT); _linearizationTable = readShortArray(type, count, value); } else if (tag == BLACKLEVELREPEATDIM) { checkType (tag, type, SHORT); _blackLevelRepeatDim = readShortArray(type, count, value); } else if (tag == BLACKLEVEL) { // Just to make things complicated, this can be SHORT, LONG // or RATIONAL. To give these a least common (pardon the // expression) denominator, we convert all to rational. if (type == RATIONAL) { _blackLevel = readRationalArray(count, value); } else { checkType (tag, type, SHORT, LONG); long[] ibl = readLongArray(type, count, value); _blackLevel = new Rational[(int) count]; for (int i = 0; i < count; i++) { _blackLevel[i] = new Rational (ibl[i], 1); } } } else if (tag == BLACKLEVELDELTAH) { checkType (tag, type, SRATIONAL); _blackLevelDeltaH = readSignedRationalArray (count, value); } else if (tag == BLACKLEVELDELTAV) { checkType (tag, type, SRATIONAL); _blackLevelDeltaV = readSignedRationalArray (count, value); } else if (tag == WHITELEVEL) { checkType (tag, type, SHORT, LONG); _whiteLevel = readLongArray (type, count, value); } else if (tag == DEFAULTSCALE) { checkType (tag, type, RATIONAL); checkCount (tag, count, 2); _defaultScale = readRationalArray (count, value); } else if (tag == BESTQUALITYSCALE) { checkType (tag, type, RATIONAL); checkCount (tag, count, 1); _bestQualityScale = readRational (count, value); } else if (tag == DEFAULTCROPORIGIN) { checkCount (tag, count, 2); // Just to make things complicated, this can be SHORT, LONG // or RATIONAL. To give these a least common (pardon the // expression) denominator, we convert all to rational. if (type == RATIONAL) { _defaultCropOrigin = readRationalArray(count, value); } else { checkType (tag, type, SHORT, LONG); long[] lco = readLongArray(type, count, value); _defaultCropOrigin = new Rational[(int) count]; for (int i = 0; i < count; i++) { _defaultCropOrigin[i] = new Rational (lco[i], 1); } } } else if (tag == DEFAULTCROPSIZE) { checkCount (tag, count, 2); if (type == RATIONAL) { _defaultCropSize = readRationalArray(count, value); } else { checkType (tag, type, SHORT, LONG); long[] lcs = readLongArray(type, count, value); _defaultCropSize = new Rational[(int) count]; for (int i = 0; i < count; i++) { _defaultCropSize[i] = new Rational (lcs[i], 1); } } } else if (tag == CALIBRATIONILLUMINANT1) { checkCount (tag, count, 1); checkType (tag, type, SHORT); _calibrationIlluminant1 = readShort(type, count, value); } else if (tag == CALIBRATIONILLUMINANT2) { checkCount (tag, count, 1); checkType (tag, type, SHORT); _calibrationIlluminant2 = readShort(type, count, value); } else if (tag == COLORMATRIX1) { checkType (tag, type, SRATIONAL); _colorMatrix1 = readSignedRationalArray (count, value); } else if (tag == COLORMATRIX2) { checkType (tag, type, SRATIONAL); _colorMatrix2 = readSignedRationalArray (count, value); } else if (tag == CAMERACALIBRATION1) { checkType (tag, type, SRATIONAL); _colorMatrix1 = readSignedRationalArray (count, value); } else if (tag == CAMERACALIBRATION2) { checkType (tag, type, SRATIONAL); _colorMatrix2 = readSignedRationalArray (count, value); } else if (tag == REDUCTIONMATRIX1) { checkType (tag, type, SRATIONAL); _reductionMatrix1 = readSignedRationalArray (count, value); } else if (tag == REDUCTIONMATRIX2) { checkType (tag, type, SRATIONAL); _reductionMatrix2 = readSignedRationalArray (count, value); } else if (tag == ANALOGBALANCE) { checkType (tag, type, RATIONAL); _analogBalance = readRationalArray (count, value); } else if (tag == ASSHOTNEUTRAL) { // this can be either SHORT or RATIONAL checkType (tag, type, SHORT, RATIONAL); if (type == SHORT) { int[] asn = readShortArray (type, count, value); _asShotNeutral = new Rational [(int) count]; for (int i = 0; i < count; i++) { _asShotNeutral[i] = new Rational (asn[i], 1); } } else { _asShotNeutral = readRationalArray (count, value); } } else if (tag == ASSHOTWHITEXY) { checkType (tag, type, RATIONAL); checkCount (tag, count, 2); _asShotWhiteXY = readRationalArray (count, value); } else if (tag == BASELINEEXPOSURE) { checkType (tag, type, SRATIONAL); _baselineExposure = readSignedRational (count, value); } else if (tag == BASELINENOISE) { checkType (tag, type, RATIONAL); _baselineNoise = readRational (count, value); } else if (tag == BASELINESHARPNESS) { checkType (tag, type, RATIONAL); _baselineSharpness = readRational (count, value); } else if (tag == BAYERGREENSPLIT) { checkType (tag, type, LONG); _bayerGreenSplit = (int) readLong(type, count, value); } else if (tag == LINEARRESPONSELIMIT) { checkType (tag, type, RATIONAL); _linearResponseLimit = readRational (count, value); } else if (tag == CAMERASERIALNUMBER) { checkType (tag, type, ASCII); _cameraSerialNumber = readASCII(count, value); } else if (tag == LENSINFO) { checkType (tag, type, RATIONAL); checkCount (tag, count, 4); _lensInfo = readRationalArray (count, value); } else if (tag == CHROMABLURRADIUS) { checkType (tag, type, RATIONAL); _chromaBlurRadius = readRational (count, value); } else if (tag == ANTIALIASSTRENGTH) { checkType (tag, type, RATIONAL); _antiAliasStrength = readRational (count, value); } else if (tag == SHADOWSCALE) { _info.setMessage (new InfoMessage ("Undocumented TIFF tag ", "ShadowScale (50739)")); } else if (tag == DNGPRIVATEDATA) { checkType (tag, type, BYTE); _dngPrivateData = readByteArray (type, count, value); } else if (tag == MAKERNOTESAFETY) { checkType (tag, type, SHORT); _makerNoteSafety = readShort (type, count, value); } else { _info.setMessage (new InfoMessage ("Unknown TIFF IFD " + "tag: " + tag, value)); } } catch (IOException e) { throw new TiffException ("Read error for tag " + tag, value); } } /** Perform initializations that have to wait until after the * IFD has been parsed. */ protected void postParseInitialization () { int samplesPerPixel = _niso.getSamplesPerPixel (); int [] bitsPerSample = _niso.getBitsPerSample (); if (bitsPerSample == null) { bitsPerSample = new int [samplesPerPixel]; for (int i=0; i 1) { return false; } int [] bps = niso.getBitsPerSample (); if (bps == null || (bps[0] > 1)) { return false; } if (!satisfiesCompression (tifd, new int [] {1, 2, 32773} )) { return false; } if (!satisfiesPhotometricInterpretation (tifd, new int [] {0, 1} )) { return false; } if (!satisfiesResolutionUnit (tifd, new int [] {1, 2, 3} )) { return false; } return true; } } jhove/classes/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassF.java0000644000707400001440000001053510771562710026014 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.tiff; import edu.harvard.hul.ois.jhove.*; /** * Profile checker for TIFF Class F. * * @author Gary McGath */ public final class TiffProfileClassF extends TiffProfile { /* Significant changes February 2, 2004 */ /** * Constructor. */ public TiffProfileClassF () { super (); _profileText = "Class F"; } /** * Returns true if the IFD satisfies the requirements of a * Class F profile. See the Class F specification for * details. */ public boolean satisfiesThisProfile (IFD ifd) { if (!(ifd instanceof TiffIFD)) { return false; } TiffIFD tifd = (TiffIFD) ifd; /* Check required tags. */ NisoImageMetadata niso = tifd.getNisoImageMetadata (); if (niso.getImageLength () == NisoImageMetadata.NULL || niso.getStripOffsets () == null || niso.getRowsPerStrip () == NisoImageMetadata.NULL || niso.getStripByteCounts () == null || tifd.getPageNumber () == null || niso.getScanningSoftware () == null) { return false; } /* Check required values. */ if (!satisfiesCompression (tifd, new int[] {3, 4} )) { return false; } int fo = tifd.getFillOrder(); if (fo != 1 && fo != 2) { return false; } int cmpr = niso.getCompressionScheme (); if (cmpr == 3) { // T4 options are also known as Group 3 options long t4opt = tifd.getT4Options (); if (t4opt != 0 && t4opt != 1 && t4opt != 4 && t4opt != 5) { return false; } } else if (cmpr == 4) { long t4opt = tifd.getT4Options (); // T6 options are also known as Group 4 options long t6opt = tifd.getT6Options (); if (t6opt != 2) { return false; } } //long wid = niso.getImageWidth (); if (!satisfiesImageWidth (tifd, new int [] {1728, 2048, 2432, 2592, 3072, 3648, 3456, 4096, 4864} )) { return false; } if (!satisfiesNewSubfileType (tifd, 2)) { return false; } if (!satisfiesResolutionUnit (tifd, new int [] {2, 3} )) { return false; } if (!satisfiesXResolution (tifd, new int[] {204, 200, 300, 400, 408} )) { return false; } if (!satisfiesYResolution (tifd, new int[] {98, 196, 100, 200, 300, 391, 400} )) { return false; } int[] bps = niso.getBitsPerSample (); if (bps == null || bps[0] != 1 ) { return false; } if (!satisfiesPhotometricInterpretation (tifd, new int [] {0, 1} )) { return false; } if (!satisfiesSamplesPerPixel (tifd, 1)) { return false; } // Only certain combinations of ImageWidth and resolution are // permitted. int wid = (int) niso.getImageWidth (); int xres = (int) niso.getXSamplingFrequency ().toLong (); int yres = (int) niso.getYSamplingFrequency ().toLong (); switch (wid) { case 1728: case 2048: case 2432: if (!(xres == 204 && yres == 391) || (xres == 200 && yres == 100) || (xres == 200 && yres == 200)) { return false; } break; case 2592: case 3072: case 3648: if (!(xres == 300 && yres == 300)) { return false; } break; case 3456: case 4096: case 4864: if (!(xres == 408 && yres == 391) || (xres == 400 && yres == 400)) { return false; } break; default: break; } return true; } } jhove/classes/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassG.java0000644000707400001440000000410110771562710026005 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.tiff; import edu.harvard.hul.ois.jhove.*; /** * Profile checker for TIFF Class G (Baseline Grayscale). * * @author Gary McGath */ public final class TiffProfileClassG extends TiffProfile { public TiffProfileClassG () { super (); _profileText = "Baseline grayscale (Class G)"; } /** * Returns true if the IFD satisfies the requirements of a * Class G profile. See the TIFF 6.0 specification for * details. */ public boolean satisfiesThisProfile (IFD ifd) { if (!(ifd instanceof TiffIFD)) { return false; } TiffIFD tifd = (TiffIFD) ifd; /* Check required tags. */ NisoImageMetadata niso = tifd.getNisoImageMetadata (); if (niso.getImageWidth () == NisoImageMetadata.NULL || niso.getImageLength () == NisoImageMetadata.NULL || niso.getStripOffsets () == null || niso.getRowsPerStrip () == NisoImageMetadata.NULL || niso.getStripByteCounts () == null || niso.getXSamplingFrequency () == null || niso.getYSamplingFrequency () == null) { return false; } /* Check required values. */ if (niso.getSamplesPerPixel () > 1) { return false; } int [] bps = niso.getBitsPerSample (); if (bps == null || (bps[0] != 4 && bps[0] != 8)) { return false; } if (!satisfiesCompression (tifd, new int [] {1, 32773} )) { return false; } if (!satisfiesPhotometricInterpretation (tifd, new int [] {0, 1} )) { return false; } if (!satisfiesResolutionUnit (tifd, new int [] {1, 2, 3} )) { return false; } return true; } } jhove/classes/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassIT.java0000644000707400001440000000266110771562707026152 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.tiff; import edu.harvard.hul.ois.jhove.*; /** * Abstract superclass for Tiff Profile Checkers Tiff IP/whatever. * * @author Gary McGath */ public abstract class TiffProfileClassIT extends TiffProfile { public TiffProfileClassIT () { super (); } /** * Returns true if the IFD satisfies the requirements * which are common to all Tiff IT profiles. * Subclasses will call this, then apply additional * tests if it returns true. */ public boolean satisfiesThisProfile (IFD ifd) { if (!(ifd instanceof TiffIFD)) { return false; } TiffIFD tifd = (TiffIFD) ifd; /* Check required tags. */ NisoImageMetadata niso = tifd.getNisoImageMetadata (); if (niso.getImageWidth () == NisoImageMetadata.NULL || niso.getImageLength () == NisoImageMetadata.NULL || niso.getStripOffsets () == null || niso.getStripByteCounts () == null || niso.getXSamplingFrequency () == null || niso.getYSamplingFrequency () == null) { return false; } return true; } } jhove/classes/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassP.java0000644000707400001440000000417110771562704026030 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.tiff; import edu.harvard.hul.ois.jhove.*; /** * Profile checker for TIFF Class P (Baseline Palette color). * * @author Gary McGath */ public final class TiffProfileClassP extends TiffProfile { public TiffProfileClassP () { super (); _profileText = "Baseline palette-color (Class P)"; } /** * Returns true if the IFD satisfies the requirements of a * Class P profile. See the TIFF 6.0 specification for * details. */ public boolean satisfiesThisProfile (IFD ifd) { if (!(ifd instanceof TiffIFD)) { return false; } TiffIFD tifd = (TiffIFD) ifd; /* Check required tags. */ NisoImageMetadata niso = tifd.getNisoImageMetadata (); if (niso.getImageWidth () == NisoImageMetadata.NULL || niso.getImageLength () == NisoImageMetadata.NULL || niso.getStripOffsets () == null || niso.getRowsPerStrip () == NisoImageMetadata.NULL || niso.getStripByteCounts () == null || niso.getXSamplingFrequency () == null || niso.getYSamplingFrequency () == null || niso.getColormapBitCodeValue () == null || niso.getColormapRedValue () == null || niso.getColormapGreenValue () == null || niso.getColormapBlueValue () == null) { return false; } /* Check required values. */ int[] bps = niso.getBitsPerSample (); if (bps == null || (bps[0] != 4 && bps[0] != 8)) { return false; } if (!satisfiesCompression (tifd, new int [] {1, 32773} )) { return false; } if (!satisfiesPhotometricInterpretation (tifd, 3)) { return false; } if (!satisfiesResolutionUnit (tifd, new int [] {1, 2, 3} )) { return false; } return true; } } jhove/classes/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITBL.java0000644000707400001440000000467410771562704026373 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.tiff; import edu.harvard.hul.ois.jhove.*; /** * Profile checker for TIFF Class IT-BL. * * The TIFF/IT spec states that "TIFF/IT-BP makes use of all * the features and functionality supported by the TIFF and * TIFF/IT fields appropriate to binary line art images." * * @author Gary McGath */ public final class TiffProfileClassITBL extends TiffProfileClassIT { public TiffProfileClassITBL () { super (); _profileText = "TIFF/IT-BL (ISO 12639:1998)"; } /** * Returns true if the IFD satisfies the requirements * of the profile. See the documentation for * details. */ public boolean satisfiesThisProfile (IFD ifd) { if (!super.satisfiesThisProfile (ifd)) { return false; } TiffIFD tifd = (TiffIFD) ifd; NisoImageMetadata niso = tifd.getNisoImageMetadata (); int [] bps = niso.getBitsPerSample (); if (bps == null || bps[0] != 1) { return false; } if (!satisfiesCompression (tifd, 32898)) { return false; } if (!satisfiesPhotometricInterpretation (tifd, new int [] {0, 1} )) { return false; } if (!satisfiesSamplesPerPixel (tifd, 1)) { return false; } /* ImageColorIndicator=0,1, or 2; BackgroundColorIndicator=0,1, or 2; * ImageColorIndicator=1, but only if ImageColorValue is defined; * BackgroundColorIndicator=1, * but only if BackgroundColorValue is defined. */ int [] valueVec; if (tifd.getImageColorValue () != IFD.NULL) { valueVec = new int [] {1}; } else { valueVec = new int [] {0, 1, 2}; } if (!satisfiesImageColorIndicator (tifd, valueVec)) { return false; } if (tifd.getBackgroundColorValue () != IFD.NULL) { valueVec = new int [] {1}; } else { valueVec = new int [] {0, 1, 2}; } if (!satisfiesBackgroundColorIndicator (tifd, valueVec)) { return false; } return true; } } jhove/classes/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITBLP1.java0000644000707400001440000000615210771562716026570 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.tiff; import edu.harvard.hul.ois.jhove.*; /** * Profile checker for TIFF Class IT-BL/P1. * * The TIFF/IT spec states that "TIFF/IT-BL/P1 is a simplified * image file format profile for binary line art (BL) image * data and can be considered a constrained * subset of TIFF/IT-BL specifically intended for * simpler implementation." * * @author Gary McGath */ public final class TiffProfileClassITBLP1 extends TiffProfileClassIT { public TiffProfileClassITBLP1 () { super (); _profileText = "TIFF/IT-BL/P1 (ISO 12639:1998)"; } /** * Returns true if the IFD satisfies the requirements * of the profile. See the documentation for * details. */ public boolean satisfiesThisProfile (IFD ifd) { if (!super.satisfiesThisProfile (ifd)) { return false; } TiffIFD tifd = (TiffIFD) ifd; if (!satisfiesNewSubfileType (tifd, 0)) { return false; } NisoImageMetadata niso = tifd.getNisoImageMetadata (); int [] bps = niso.getBitsPerSample (); if (bps == null || bps[0] != 1) { return false; } if (!satisfiesCompression (tifd, 32898)) { return false; } if (!satisfiesPhotometricInterpretation (tifd, 0)) { return false; } if (!satisfiesOrientation (tifd, 1)) { return false; } if (!satisfiesSamplesPerPixel (tifd, 1)) { return false; } if (!satisfiesResolutionUnit (tifd, new int [] {2, 3} )) { return false; } /* ImageColorIndicator=0,1, or 2; BackgroundColorIndicator=0,1, or 2; * ImageColorIndicator=1, but only if ImageColorValue is defined; * BackgroundColorIndicator=1, *but only if BackgroundColorValue is defined. */ int [] valueVec; if (tifd.getImageColorValue () != IFD.NULL) { valueVec = new int [] {1}; } else { valueVec = new int [] {0, 1, 2}; } if (!satisfiesImageColorIndicator (tifd, valueVec)) { return false; } if (tifd.getBackgroundColorValue () != IFD.NULL) { valueVec = new int [] {1}; } else { valueVec = new int [] {0, 1, 2}; } if (!satisfiesBackgroundColorIndicator (tifd, valueVec)) { return false; } /* Tags which must NOT be defined */ if (tifd.getDocumentName () != null || niso.getScannerModelName () != null || tifd.getPageName () != null || niso.getHostComputer () != null || tifd.getSite () != null || tifd.getColorSequence () != null || tifd.getIT8Header() != null) { return false; } return true; } } jhove/classes/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITBP.java0000644000707400001440000000472610771562705026376 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.tiff; import edu.harvard.hul.ois.jhove.*; /** * Profile checker for TIFF Class IT-BP. * * The TIFF/IT spec states that "TIFF/IT-BP makes use of all * the features and functionality supported by the TIFF and * TIFF/IT fields appropriate to binary picture images." * * @author Gary McGath */ public final class TiffProfileClassITBP extends TiffProfileClassIT { public TiffProfileClassITBP () { super (); _profileText = "TIFF/IT-BP (ISO 12639:1998)"; } /** * Returns true if the IFD satisfies the requirements * of the profile. See the documentation for * details. */ public boolean satisfiesThisProfile (IFD ifd) { if (!super.satisfiesThisProfile (ifd)) { return false; } // We now know it's a TiffIFD TiffIFD tifd = (TiffIFD) ifd; NisoImageMetadata niso = tifd.getNisoImageMetadata (); int [] bps = niso.getBitsPerSample (); if (bps == null || bps[0] != 1) { return false; } if (!satisfiesCompression (tifd, 1)) { return false; } if (!satisfiesPhotometricInterpretation (tifd, new int[] {0, 1} )) { return false; } if (!satisfiesSamplesPerPixel (tifd, 1)) { return false; } /* ImageColorIndicator=0,1, or 2; BackgroundColorIndicator=0,1, or 2; * ImageColorIndicator=1, but only if ImageColorValue is defined; * BackgroundColorIndicator=1, * but only if BackgroundColorValue is defined. */ int [] valueVec; if (tifd.getImageColorValue () != IFD.NULL) { valueVec = new int [] {1}; } else { valueVec = new int [] {0, 1, 2}; } if (!satisfiesImageColorIndicator (tifd, valueVec)) { return false; } if (tifd.getBackgroundColorValue () != IFD.NULL) { valueVec = new int [] {1}; } else { valueVec = new int [] {0, 1, 2}; } if (!satisfiesBackgroundColorIndicator (tifd, valueVec)) { return false; } return true; } } jhove/classes/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITBPP1.java0000644000707400001440000000573110771562705026574 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.tiff; import edu.harvard.hul.ois.jhove.*; /** * Profile checker for TIFF Class IT-BP/P1. * * The TIFF/IT spec states that "TIFF/IT-BP/P1 is a simplified * image file format profile for binary picture (BP) image * data and can be considred a constrained * subset of TIFF/IT-BP specifically intended for * simpler implementation." * * @author Gary McGath */ public final class TiffProfileClassITBPP1 extends TiffProfileClassIT { public TiffProfileClassITBPP1 () { super (); _profileText = "TIFF/IT-BP/P1 (ISO 12639:1998)"; } /** * Returns true if the IFD satisfies the requirements * of the profile. See the documentation for * details. */ public boolean satisfiesThisProfile (IFD ifd) { if (!super.satisfiesThisProfile (ifd)) { return false; } if (!(ifd instanceof TiffIFD)) { return false; } TiffIFD tifd = (TiffIFD) ifd; NisoImageMetadata niso = tifd.getNisoImageMetadata (); if (!satisfiesNewSubfileType (tifd, 0)) { return false; } if (!satisfiesCompression (tifd, 1)) { return false; } if (!satisfiesPhotometricInterpretation (tifd, 0)) { return false; } if (!satisfiesSamplesPerPixel (tifd, 1)) { return false; } if (!satisfiesResolutionUnit (tifd, new int[] {2, 3} )) { return false; } /* ImageColorIndicator=0,1, or 2; BackgroundColorIndicator=0,1, or 2; * ImageColorIndicator=1, but only if ImageColorValue is defined; * BackgroundColorIndicator=1, * but only if BackgroundColorValue is defined. */ int [] valueVec; if (tifd.getImageColorValue () != IFD.NULL) { valueVec = new int [] {1}; } else { valueVec = new int [] {0, 1, 2}; } if (!satisfiesImageColorIndicator (tifd, valueVec)) { return false; } if (tifd.getBackgroundColorValue () != IFD.NULL) { valueVec = new int [] {1}; } else { valueVec = new int [] {0, 1, 2}; } if (!satisfiesBackgroundColorIndicator (tifd, valueVec)) { return false; } /* Tags which must NOT be defined */ if (tifd.getDocumentName () != null || niso.getScannerModelName () != null || tifd.getPageName () != null || niso.getHostComputer () != null || tifd.getSite () != null || tifd.getColorSequence () != null || tifd.getIT8Header() != null) { return false; } return true; } } jhove/classes/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITBPP2.java0000644000707400001440000000561510771562701026572 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.tiff; import edu.harvard.hul.ois.jhove.*; /** * Profile checker for TIFF Class IT-BP/P2. * * The TIFF/IT spec states that "TIFF/IT-BP/P2 is an extension of * TIFF/IT-BP/P1." * * @author Gary McGath */ public final class TiffProfileClassITBPP2 extends TiffProfileClassIT { public TiffProfileClassITBPP2 () { super (); _profileText = "TIFF/IT-BP/P2 (ISO 12639:1998)"; } /** * Returns true if the IFD satisfies the requirements * of the profile. See the documentation for * details. */ public boolean satisfiesThisProfile (IFD ifd) { if (!super.satisfiesThisProfile (ifd)) { return false; } // We now know it's a TiffIFD TiffIFD tifd = (TiffIFD) ifd; NisoImageMetadata niso = tifd.getNisoImageMetadata (); if (!satisfiesNewSubfileType (tifd, 0)) { return false; } if (!satisfiesCompression (tifd, new int[] {1, 4, 8} )) { return false; } if (!satisfiesPhotometricInterpretation (tifd, 0)) { return false; } if (!satisfiesSamplesPerPixel (tifd, 1)) { return false; } if (!satisfiesResolutionUnit (tifd, new int[] {2, 3} )) { return false; } /* ImageColorIndicator=0,1, or 2; BackgroundColorIndicator=0,1, or 2; * ImageColorIndicator=1, but only if ImageColorValue is defined; * BackgroundColorIndicator=1, * but only if BackgroundColorValue is defined. */ int [] valueVec; if (tifd.getImageColorValue () != IFD.NULL) { valueVec = new int [] {1}; } else { valueVec = new int [] {0, 1, 2}; } if (!satisfiesImageColorIndicator (tifd, valueVec)) { return false; } if (tifd.getBackgroundColorValue () != IFD.NULL) { valueVec = new int [] {1}; } else { valueVec = new int [] {0, 1, 2}; } if (!satisfiesBackgroundColorIndicator (tifd, valueVec)) { return false; } /* Tags which must NOT be defined */ if (tifd.getDocumentName () != null || niso.getScannerModelName () != null || tifd.getPageName () != null || niso.getHostComputer () != null || tifd.getSite () != null || tifd.getColorSequence () != null || tifd.getIT8Header() != null) { return false; } return true; } } jhove/classes/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITCT.java0000644000707400001440000000424010771562714026372 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.tiff; import edu.harvard.hul.ois.jhove.*; /** * Profile checker for TIFF Class IT-CT. * * @author Gary McGath */ public final class TiffProfileClassITCT extends TiffProfileClassIT { public TiffProfileClassITCT () { super (); _profileText = "TIFF/IT-CT (ISO 12639:1998)"; } /** * Returns true if the IFD satisfies the requirements * of the profile. See the documentation for * details. */ public boolean satisfiesThisProfile (IFD ifd) { if (!super.satisfiesThisProfile (ifd)) { return false; } // We now know it's a TiffIFD TiffIFD tifd = (TiffIFD) ifd; /* Check required tags.*/ NisoImageMetadata niso = tifd.getNisoImageMetadata (); if (niso.getBitsPerSample () == null || niso.getSamplesPerPixel () == NisoImageMetadata.NULL || niso.getSamplingFrequencyUnit () == NisoImageMetadata.NULL) { return false; } /* Check required values. */ if (!satisfiesPhotometricInterpretation (tifd, 5)) { return false; } if (!satisfiesCompression (tifd, new int [] {1, 32895} )) { return false; /* NOTE: If compression is 32895, RasterPadding must be 0, 1, 2, 9, or 10. Fix this when RasterPadding support is implemented. */ } int inkSet = tifd.getInkSet (); if (inkSet != 1 && inkSet != 2) { return false; } String seq = tifd.getColorSequence (); if (seq == null || "CMYK".equals (seq)) { if (inkSet != 1) { return false; } } int spp = niso.getSamplesPerPixel (); int numInks = tifd.getNumberOfInks (); if (numInks != NisoImageMetadata.NULL && numInks != spp) { return false; } return true; } } jhove/classes/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITCTP1.java0000644000707400001440000000524410771562677026610 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.tiff; import edu.harvard.hul.ois.jhove.*; /** * Profile checker for TIFF Class IT-CT/P1. * * @author Gary McGath */ public final class TiffProfileClassITCTP1 extends TiffProfileClassIT { public TiffProfileClassITCTP1 () { super (); _profileText = "TIFF/IT-CT/P1 (ISO 12639:1998)"; } /** * Returns true if the IFD satisfies the requirements * of the profile. See the documentation for * details. */ public boolean satisfiesThisProfile (IFD ifd) { if (!super.satisfiesThisProfile (ifd)) { return false; } // We now know that this is a TiffIFD TiffIFD tifd = (TiffIFD) ifd; /* Check required tags.*/ if (!satisfiesNewSubfileType (tifd, 0)) { return false; } NisoImageMetadata niso = tifd.getNisoImageMetadata (); // bps must be { 8, 8, 8, 8 } int [] bps = niso.getBitsPerSample (); if (bps == null || bps.length != 4) { return false; } for (int i = 0; i < 4; i++) { if (bps[i] != 8) { return false; } } if (!satisfiesCompression (tifd, 1 )) { return false; } if (!satisfiesPhotometricInterpretation (tifd, 5)) { return false; } if (!satisfiesOrientation (tifd, 1)) { return false; } if (!satisfiesSamplesPerPixel (tifd, 4)) { return false; } if (!satisfiesPlanarConfiguration (tifd, 1)) { return false; } if (!satisfiesResolutionUnit (tifd, new int [] {2, 3} )) { return false; } int inkSet = tifd.getInkSet (); if (inkSet != 1) { return false; } int numInks = tifd.getNumberOfInks (); if (numInks != 4) { return false; } if (!satisfiesDotRange (tifd, 0, 255)) { return false; } /* Tags which must NOT be defined */ if (tifd.getDocumentName () != null || niso.getScannerModelName () != null || tifd.getPageName () != null || niso.getHostComputer () != null || tifd.getSite () != null || tifd.getColorSequence () != null || tifd.getIT8Header() != null) { return false; } return true; } } jhove/classes/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITCTP2.java0000644000707400001440000000511110771562714026572 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.tiff; import edu.harvard.hul.ois.jhove.*; /** * Profile checker for TIFF Class IT-CT/P2. * * @author Gary McGath */ public final class TiffProfileClassITCTP2 extends TiffProfileClassIT { public TiffProfileClassITCTP2 () { super (); _profileText = "TIFF/IT-CT/P2 (ISO 12639:2003)"; } /** * Returns true if the IFD satisfies the requirements * of the profile. See the documentation for * details. */ public boolean satisfiesThisProfile (IFD ifd) { if (!super.satisfiesThisProfile (ifd)) { return false; } // We now know this is a TiffIFD TiffIFD tifd = (TiffIFD) ifd; /* Check required tags.*/ if (!satisfiesNewSubfileType (tifd, 0)) { return false; } NisoImageMetadata niso = tifd.getNisoImageMetadata (); // bps must be { 8, ... } int [] bps = niso.getBitsPerSample (); if (bps == null) { return false; } if (bps[0] != 8) { return false; } if (!satisfiesCompression (tifd, new int[] {1, 7, 8} )) { return false; } if (!satisfiesPhotometricInterpretation (tifd, 5)) { return false; } if (!satisfiesOrientation (tifd, 1)) { return false; } if (!satisfiesSamplesPerPixel (tifd, 4)) { return false; } if (!satisfiesPlanarConfiguration (tifd, 1)) { return false; } if (!satisfiesResolutionUnit (tifd, new int [] {2, 3} )) { return false; } int inkSet = tifd.getInkSet (); if (inkSet != 1) { return false; } int numInks = tifd.getNumberOfInks (); if (numInks != 4) { return false; } if (!satisfiesDotRange (tifd, 0, 255)) { return false; } /* Tags which must NOT be defined */ if (tifd.getDocumentName () != null || niso.getScannerModelName () != null || tifd.getPageName () != null || niso.getHostComputer () != null || tifd.getSite () != null || tifd.getColorSequence () != null || tifd.getIT8Header() != null) { return false; } return true; } } jhove/classes/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITFP.java0000644000707400001440000000610010771562710026362 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.tiff; import edu.harvard.hul.ois.jhove.*; /** * Profile checker for TIFF Class IT-FP. * * The TIFF/IT spec states that "TIFF/IT-FP provides a mechanism for * associating image files of the different types that make up a * final page." Note that Jhove profiles are applied to individual * IFD levels, so this profile does not check the relationships among * IFDs which are part of the FP specification. * * @author Gary McGath */ public final class TiffProfileClassITFP extends TiffProfileClassIT { public TiffProfileClassITFP () { super (); _profileText = "TIFF/IT-FP"; } /** * Returns true if the IFD satisfies the requirements * of the profile. See the documentation for * details. */ public boolean satisfiesThisProfile (IFD ifd) { if (!super.satisfiesThisProfile (ifd)) { return false; } // We now know this is a TiffIFD TiffIFD tifd = (TiffIFD) ifd; if (tifd.getImageDescription () == null) { return false; } // BitsPerSample=4 or 8 or {8,8,8} or {8,8,8,8} or undefined // (consistent with PhotometricInterpretation) NisoImageMetadata niso = tifd.getNisoImageMetadata (); int [] bps = niso.getBitsPerSample (); if (!(bps == null || (bps.length == 1 && (bps[0] == 4 || bps[0] == 8)) || (bps.length == 3 && bps[0] == 8 && bps[1] == 8 && bps[2] == 8) || (bps.length == 4 && bps[0] == 8 && bps[1] == 8 && bps[2] == 8 && bps[3] == 8))) { return false; } // NewSubfileType bit 3=1 long nsft = tifd.getNewSubfileType (); if ((nsft & 8) == 0) { return false; } if (!satisfiesPhotometricInterpretation (tifd, new int [] {0, 1, 2, 5} )) { return false; } // SamplesPerPixel=3 or 4 or undefined (consistent with // PhotometricInterpretation) if (!satisfiesSamplesPerPixel (tifd, new int [] {3, 4, NisoImageMetadata.NULL} )) { return false; } if (!satisfiesCompression (tifd, 1)) { return false; } if (!satisfiesPlanarConfiguration (tifd, 1)) { return false; } // InkSet=1, but only if PhotometricInterpretation=5 // NumberOfInks=4, but only if PhotometricInterpretation=5 // DotRange={0,255}, but only if PhotometricInterpretation=5 int pint = niso.getColorSpace (); int inkSet = tifd.getInkSet (); int nInks = tifd.getNumberOfInks (); if (pint == 5 && (inkSet != 1 || nInks != 4 || !satisfiesDotRange (tifd, 0, 255))) { return false; } return true; } } jhove/classes/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITFPP1.java0000644000707400001440000000670110771562705026576 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.tiff; import edu.harvard.hul.ois.jhove.*; /** * Profile checker for TIFF Class IT-FP/P1. * * TIFF/IT-FP/P1 is a simplified form of TIFF/IT-FP. * * @author Gary McGath */ public final class TiffProfileClassITFPP1 extends TiffProfileClassIT { public TiffProfileClassITFPP1 () { super (); _profileText = "TIFF/IT-FP/P1 (ISO 12639:1998)"; } /** * Returns true if the IFD satisfies the requirements * of the profile. See the documentation for * details. */ public boolean satisfiesThisProfile (IFD ifd) { if (!super.satisfiesThisProfile (ifd)) { return false; } // We now know this is a TiffIFD TiffIFD tifd = (TiffIFD) ifd; // Tags which must be present if (tifd.getImageDescription () == null || tifd.getXPosition () == null || tifd.getYPosition () == null) { return false; } // BitsPerSample=4 or 8 or {8,8,8} or {8,8,8,8} or undefined // (consistent with PhotometricInterpretation) NisoImageMetadata niso = tifd.getNisoImageMetadata (); int [] bps = niso.getBitsPerSample (); if (!(bps == null || (bps.length == 1 && (bps[0] == 4 || bps[0] == 8)) || (bps.length == 3 && bps[0] == 8 && bps[1] == 8 && bps[2] == 8) || (bps.length == 4 && bps[0] == 8 && bps[1] == 8 && bps[2] == 8 && bps[3] == 8))) { return false; } // NewSubfileType bit 3=1 long nsft = tifd.getNewSubfileType (); if ((nsft & 8) == 0) { return false; } if (!satisfiesPhotometricInterpretation (tifd, new int [] {0, 1, 2, 5} )) { return false; } // SamplesPerPixel=3 or 4 or undefined (consistent with // PhotometricInterpretation) if (!satisfiesSamplesPerPixel (tifd, new int [] {3, 4, NisoImageMetadata.NULL} )) { return false; } if (!satisfiesOrientation (tifd, 1)) { return false; } if (!satisfiesResolutionUnit (tifd, new int [] {2, 3} )) { return false; } if (!satisfiesPlanarConfiguration (tifd, 1)) { return false; } if (!satisfiesCompression (tifd, 1)) { return false; } // NumberOfInks=4, but only if PhotometricInterpretation=5 // DotRange={0,255}, but only if PhotometricInterpretation=5 int pint = niso.getColorSpace (); int nInks = tifd.getNumberOfInks (); if (pint == 5 && (nInks != 4 || !satisfiesDotRange (tifd, 0, 255))) { return false; } /* Tags which must NOT be defined */ if (tifd.getDocumentName () != null || niso.getScannerModelName () != null || tifd.getPageName () != null || niso.getHostComputer () != null || tifd.getSite () != null ) { return false; } return true; } } jhove/classes/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITFPP2.java0000644000707400001440000000627210771562705026602 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.tiff; import edu.harvard.hul.ois.jhove.*; /** * Profile checker for TIFF Class IT-FP/P2. * * TIFF/IT-FP/P2 is a simplified form of TIFF/IT-FP. * The differences between FP/P1 and FP/P2 are very minor. * * @author Gary McGath */ public final class TiffProfileClassITFPP2 extends TiffProfileClassIT { public TiffProfileClassITFPP2 () { super (); _profileText = "TIFF/IT-FP/P2 (ISO 12639:2003)"; } /** * Returns true if the IFD satisfies the requirements * of the profile. See the documentation for * details. * */ public boolean satisfiesThisProfile (IFD ifd) { if (!super.satisfiesThisProfile (ifd)) { return false; } if (!(ifd instanceof TiffIFD)) { return false; } TiffIFD tifd = (TiffIFD) ifd; if (tifd.getImageDescription () == null) { return false; } // BitsPerSample=4 or 8 or {8,8,8} or {8,8,8,8} or undefined // (consistent with PhotometricInterpretation) NisoImageMetadata niso = tifd.getNisoImageMetadata (); int [] bps = niso.getBitsPerSample (); if (!(bps == null || (bps.length == 1 && (bps[0] == 4 || bps[0] == 8)) || (bps.length == 3 && bps[0] == 8 && bps[1] == 8 && bps[2] == 8) || (bps.length == 4 && bps[0] == 8 && bps[1] == 8 && bps[2] == 8 && bps[3] == 8))) { return false; } // NewSubfileType bit 3=1 long nsft = tifd.getNewSubfileType (); if ((nsft & 8) == 0) { return false; } if (!satisfiesPhotometricInterpretation (tifd, new int [] {0, 1, 2, 5} )) { return false; } // SamplesPerPixel=3 or 4 or undefined (consistent with // PhotometricInterpretation) if (!satisfiesSamplesPerPixel (tifd, new int [] {3, 4, NisoImageMetadata.NULL} )) { return false; } if (!satisfiesOrientation (tifd, 1)) { return false; } if (!satisfiesResolutionUnit (tifd, new int [] {2, 3} )) { return false; } if (!satisfiesPlanarConfiguration (tifd, 1)) { return false; } if (!satisfiesCompression (tifd, 1)) { return false; } // NumberOfInks=4, but only if PhotometricInterpretation=5 // DotRange={0,255}, but only if PhotometricInterpretation=5 int pint = niso.getColorSpace (); int nInks = tifd.getNumberOfInks (); if (pint == 5 && (nInks != 4 || !satisfiesDotRange (tifd, 0, 255))) { return false; } /* Tags which must NOT be defined */ if (tifd.getDocumentName () != null || niso.getScannerModelName () != null || tifd.getPageName () != null || niso.getHostComputer () != null || tifd.getSite () != null ) { return false; } return true; } } jhove/classes/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITHC.java0000644000707400001440000000502010771562706026354 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.tiff; import edu.harvard.hul.ois.jhove.*; /** * Profile checker for TIFF Class IT-HC. * * The TIFF/IT spec states that "TIFF/IT-HC makes use of all * the features and functionality supported by the TIFF and * TIFF/IT fields appropriate to high resolution continuous * tone images." * * @author Gary McGath */ public final class TiffProfileClassITHC extends TiffProfileClassIT { public TiffProfileClassITHC () { super (); _profileText = "TIFF/IT-HC (ISO 12639:1998)"; } /** * Returns true if the IFD satisfies the requirements * of the profile. See the documentation for * details. */ public boolean satisfiesThisProfile (IFD ifd) { if (!super.satisfiesThisProfile (ifd)) { return false; } if (!(ifd instanceof TiffIFD)) { return false; } TiffIFD tifd = (TiffIFD) ifd; /* Check required tags. */ NisoImageMetadata niso = tifd.getNisoImageMetadata (); if (niso.getBitsPerSample () == null || niso.getSamplesPerPixel () == NisoImageMetadata.NULL) { return false; } if (!satisfiesPhotometricInterpretation (tifd, 5)) { return false; } if (!satisfiesCompression (tifd, 32895)) { return false; } if (!satisfiesPlanarConfiguration (tifd, 1)) { return false; } int inkSet = tifd.getInkSet (); if (inkSet != 1 && inkSet != 2) { return false; } String seq = tifd.getColorSequence (); if (seq == null || "CMYK".equals (seq)) { if (inkSet != 1) { return false; } } // Per footnote: If NumberOfInks tag is used, it must have the // same value as SamplesPerPixel. This requirement doesn't // apply to P1 or P2. int spp = niso.getSamplesPerPixel (); int numInks = tifd.getNumberOfInks (); if (numInks != IFD.NULL && numInks != spp) { return false; } int trans = tifd.getTransparencyIndicator (); if (trans != 0 && trans != 1) { return false; } return true; } } jhove/classes/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITHCP1.java0000644000707400001440000000571610771562705026570 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.tiff; import edu.harvard.hul.ois.jhove.*; /** * Profile checker for TIFF Class IT-HC/P1. * * The TIFF/IT spec states that "TIFF/IT-HC/P1 is a simplified * image file format profile for high resolution continuous tone * (HC) image data and can be considered a constrained subset * of TIFF/IT-HC specifically intended for simpler implementation." * * @author Gary McGath */ public final class TiffProfileClassITHCP1 extends TiffProfileClassIT { public TiffProfileClassITHCP1 () { super (); _profileText = "TIFF/IT-HC/P1 (ISO 12639:1998)"; } /** * Returns true if the IFD satisfies the requirements * of the profile. See the documentation for * details. */ public boolean satisfiesThisProfile (IFD ifd) { if (!super.satisfiesThisProfile (ifd)) { return false; } if (!(ifd instanceof TiffIFD)) { return false; } TiffIFD tifd = (TiffIFD) ifd; /* Check required tags. */ if (!satisfiesSamplesPerPixel (tifd, 4)) { return false; } // BitsPerSample must be {8, 8, 8, 8} NisoImageMetadata niso = tifd.getNisoImageMetadata (); int[] bps = niso.getBitsPerSample (); if (bps == null || bps.length < 4) { return false; } for (int i=0; i<4; i++) { if (bps[i] != 8) { return false; } } if (!satisfiesPhotometricInterpretation (tifd, 5)) { return false; } if (!satisfiesCompression (tifd, 32895)) { return false; } if (!satisfiesPlanarConfiguration (tifd, 1)) { return false; } if (!satisfiesResolutionUnit (tifd, new int [] {2, 3} )) { return false; } int inkSet = tifd.getInkSet (); if (inkSet != 1) { return false; } if (tifd.getNumberOfInks () != 4) { return false; } // DotRange={0,255} if (!satisfiesDotRange (tifd, 0, 255)) { return false; } int trans = tifd.getTransparencyIndicator (); if (trans != 0 && trans != 1) { return false; } // The tags DocumentName, Model, PageName, HostComputer, // Site, and ColorSequence must NOT be defined if (tifd.getDocumentName () != null || niso.getScannerModelName () != null || tifd.getPageName () != null || niso.getHostComputer () != null || tifd.getSite () != null || tifd.getColorSequence () != null) { return false; } return true; } } jhove/classes/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITHCP2.java0000644000707400001440000000513010771562700026552 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.tiff; import edu.harvard.hul.ois.jhove.*; /** * Profile checker for TIFF Class IT-HC/P2. * * The TIFF/IT spec states that "TIFF/IT-HC/P2 is an extension of * TIFF/IT-HC/P1." * * @author Gary McGath */ public final class TiffProfileClassITHCP2 extends TiffProfileClassIT { public TiffProfileClassITHCP2 () { super (); _profileText = "TIFF/IT-HC/P2 (ISO 12639:2003)"; } /** * Returns true if the IFD satisfies the requirements * of the profile. See the documentation for * details. */ public boolean satisfiesThisProfile (IFD ifd) { if (!super.satisfiesThisProfile (ifd)) { return false; } if (!(ifd instanceof TiffIFD)) { return false; } TiffIFD tifd = (TiffIFD) ifd; /* Check required tags. */ // BitsPerSample must be {8, ...} NisoImageMetadata niso = tifd.getNisoImageMetadata (); int[] bps = niso.getBitsPerSample (); if (bps == null || bps[0] != 8) { return false; } if (!satisfiesPhotometricInterpretation (tifd, 5)) { return false; } if (!satisfiesCompression (tifd, 32895)) { return false; } if (!satisfiesPlanarConfiguration (tifd, 1)) { return false; } if (!satisfiesResolutionUnit (tifd, new int [] {2, 3} )) { return false; } int inkSet = tifd.getInkSet (); if (inkSet != 1) { return false; } if (tifd.getNumberOfInks () != 4) { return false; } // DotRange={0,255} if (!satisfiesDotRange (tifd, 0, 255)) { return false; } int trans = tifd.getTransparencyIndicator (); if (trans != 0 && trans != 1) { return false; } // The tags DocumentName, Model, PageName, HostComputer, // Site, and ColorSequence must NOT be defined if (tifd.getDocumentName () != null || niso.getScannerModelName () != null || tifd.getPageName () != null || niso.getHostComputer () != null || tifd.getSite () != null) { return false; } return true; } } jhove/classes/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITLW.java0000644000707400001440000000467710771562704026423 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.tiff; import edu.harvard.hul.ois.jhove.*; /** * Profile checker for TIFF Class IT-LW. * * The TIFF/IT spec states that "TIFF/IT-LW makes use of all * the features and functionality supported by the TIFF and * TIFF/IT fields appropriate to line art images." * * @author Gary McGath */ public final class TiffProfileClassITLW extends TiffProfileClassIT { public TiffProfileClassITLW () { super (); _profileText = "TIFF/IT-LW (ISO 12639:1998)"; } /** * Returns true if the IFD satisfies the requirements * of the profile. See the documentation for * details. */ public boolean satisfiesThisProfile (IFD ifd) { if (!super.satisfiesThisProfile (ifd)) { return false; } if (!(ifd instanceof TiffIFD)) { return false; } TiffIFD tifd = (TiffIFD) ifd; /* Check required tags. */ if (tifd.getColorTable () == null) { return false; } NisoImageMetadata niso = tifd.getNisoImageMetadata (); int[] bps = niso.getBitsPerSample (); if (bps[0] != 8) { return false; } /* Check required values. */ if (!satisfiesSamplesPerPixel (tifd, 1)) { return false; } if (!satisfiesPhotometricInterpretation (tifd, 5)) { return false; } /* NOTE: If compression is 32895, RasterPadding must be * 0, 1, 2, 9, or 10. Fix this when RasterPadding support is * implemented. */ if (!satisfiesCompression (tifd, 32896)) { return false; } int inkSet = tifd.getInkSet (); if (inkSet != 1 && inkSet != 2) { return false; } String seq = tifd.getColorSequence (); if (seq == null || "CMYK".equals (seq)) { if (inkSet != 1) { return false; } } // Per footnote h, this applies to LW, LW/P1 and LW/P2 int spp = niso.getSamplesPerPixel (); int numInks = tifd.getNumberOfInks (); if (numInks != IFD.NULL && numInks != spp) { return false; } return true; } } jhove/classes/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITLWP1.java0000644000707400001440000000476610771562702026621 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.tiff; import edu.harvard.hul.ois.jhove.*; /** * Profile checker for TIFF Class IT-LW/P1. * * The TIFF/IT spec states that "TIFF/IT-LW/P1 is a simplified * image file format profile for line art (LW) image data and * can be considered as a constrained subset of TIFF/IT-LW specified * for simpler implementation." * * @author Gary McGath */ public final class TiffProfileClassITLWP1 extends TiffProfileClassIT { public TiffProfileClassITLWP1 () { super (); _profileText = "TIFF/IT-LW/P1 (ISO 12639:1998)"; } /** * Returns true if the IFD satisfies the requirements * of the profile. See the documentation for * details. */ public boolean satisfiesThisProfile (IFD ifd) { if (!super.satisfiesThisProfile (ifd)) { return false; } if (!(ifd instanceof TiffIFD)) { return false; } TiffIFD tifd = (TiffIFD) ifd; /* Check required tags. */ if (tifd.getColorTable () == null) { return false; } NisoImageMetadata niso = tifd.getNisoImageMetadata (); int [] bps = niso.getBitsPerSample (); if (bps[0] != 8) { return false; } /* Check required values. */ if (!satisfiesSamplesPerPixel (tifd, 1)) { return false; } if (!satisfiesResolutionUnit (tifd, new int [] {2, 3} )) { return false; } if (!satisfiesNewSubfileType (tifd, 0)) { return false; } if (!satisfiesPhotometricInterpretation (tifd, 5)) { return false; } if (!satisfiesCompression (tifd, 32896)) { return false; } int inkSet = tifd.getInkSet (); if (inkSet != 1) { return false; } int bprl = tifd.getBitsPerRunLength (); if (bprl != 8) { return false; } int bperl = tifd.getBitsPerExtendedRunLength (); if (bperl != 16) { return false; } int numInks = tifd.getNumberOfInks (); if (numInks != 4 || numInks != niso.getSamplesPerPixel ()) { return false; } return true; } } jhove/classes/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITLWP2.java0000644000707400001440000000456410771562704026620 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.tiff; import edu.harvard.hul.ois.jhove.*; /** * Profile checker for TIFF Class IT-LW/P2. * * The TIFF/IT spec states that "TIFF/IT-LW/P1 is a simplified * image file format profile for line art (LW) image data and * can be considered as a constrained subset of TIFF/IT-LW specified * for simpler implementation. TIFF/IT-LW/P2 can be considered * as an extension of TIFF/IT-LW/P1." * @author Gary McGath */ public final class TiffProfileClassITLWP2 extends TiffProfileClassIT { public TiffProfileClassITLWP2 () { super (); _profileText = "TIFF/IT-LW/P2 (ISO 12639:2003)"; } /** * Returns true if the IFD satisfies the requirements * of the profile. See the documentation for * details. */ public boolean satisfiesThisProfile (IFD ifd) { if (!super.satisfiesThisProfile (ifd)) { return false; } if (!(ifd instanceof TiffIFD)) { return false; } TiffIFD tifd = (TiffIFD) ifd; /* Check required tags. */ if (tifd.getColorTable () == null) { return false; } NisoImageMetadata niso = tifd.getNisoImageMetadata (); int [] bps = niso.getBitsPerSample (); if (bps[0] != 8) { return false; } /* Check required values. */ if (!satisfiesSamplesPerPixel (tifd, 1)) { return false; } if (!satisfiesResolutionUnit (tifd, new int [] {2, 3} )) { return false; } if (!satisfiesPhotometricInterpretation (tifd, 5)) { return false; } if (!satisfiesCompression (tifd, 32896)) { return false; } int inkSet = tifd.getInkSet (); if (inkSet != 1) { return false; } int bperl = tifd.getBitsPerExtendedRunLength (); if (bperl != 16) { return false; } int numInks = tifd.getNumberOfInks (); if (numInks != 4 || numInks != niso.getSamplesPerPixel ()) { return false; } return true; } } jhove/classes/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITMP.java0000644000707400001440000000443310771562715026405 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.tiff; import edu.harvard.hul.ois.jhove.*; /** * Profile checker for TIFF Class IT-MP. * * The TIFF/IT spec states that "TIFF/IT-MP makes use of all * the features and functionality supported by the TIFF and * TIFF/IT fields appropriate to monochrome continuous * tone picture images." * * @author Gary McGath */ public final class TiffProfileClassITMP extends TiffProfileClassIT { public TiffProfileClassITMP () { super (); _profileText = "TIFF/IT-MP (ISO 12639:1998)"; } /** * Returns true if the IFD satisfies the requirements * of the profile. See the documentation for * details. */ public boolean satisfiesThisProfile (IFD ifd) { if (!super.satisfiesThisProfile (ifd)) { return false; } if (!(ifd instanceof TiffIFD)) { return false; } TiffIFD tifd = (TiffIFD) ifd; /* Check required tags. */ NisoImageMetadata niso = tifd.getNisoImageMetadata (); if (niso.getBitsPerSample () == null) { return false; } if (!satisfiesCompression (tifd, new int [] {1, 32895} )) { return false; } if (!satisfiesPhotometricInterpretation (tifd, new int [] {0, 1} )) { return false; } // RasterPadding=0,1,2,9, or 10, but only if Compression=32895 if (niso.getCompressionScheme () == 32895) { int pad = tifd.getRasterPadding (); if (pad != 0 && pad != 1 && pad != 2 && pad != 9 && pad != 10) { return false; } } if (!satisfiesImageColorIndicator (tifd, new int [] {0, 1} )) { return false; } // ImageColorValue is defined if ImageColorIndicator=1 int ind = tifd.getImageColorIndicator (); if (ind == 1) { if (tifd.getImageColorValue () == IFD.NULL) { return false; } } return true; } } jhove/classes/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITMPP1.java0000644000707400001440000000610110771562703026575 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.tiff; import edu.harvard.hul.ois.jhove.*; /** * Profile checker for TIFF Class IT-MP/P1. * * The TIFF/IT spec states that "TIFF/IT-MP/P1 is a simplified * image file format profile for monochrome continuous tone * picture image (MP) data and can be considred a constrained * subset of TIFF/IT-MP specifically intended for * simpler implementation." * * @author Gary McGath */ public final class TiffProfileClassITMPP1 extends TiffProfileClassIT { public TiffProfileClassITMPP1 () { super (); _profileText = "TIFF/IT-MP/P1 (ISO 12639:1998)"; } /** * Returns true if the IFD satisfies the requirements * of the profile. See the documentation for * details. */ public boolean satisfiesThisProfile (IFD ifd) { if (!super.satisfiesThisProfile (ifd)) { return false; } if (!(ifd instanceof TiffIFD)) { return false; } TiffIFD tifd = (TiffIFD) ifd; if (!satisfiesNewSubfileType (tifd, 0)) { return false; } NisoImageMetadata niso = tifd.getNisoImageMetadata (); int[] bps = niso.getBitsPerSample (); if (bps == null || bps[0] != 8) { return false; } if (!satisfiesCompression (tifd, 1 )) { return false; } if (!satisfiesPhotometricInterpretation (tifd, 0)) { return false; } if (!satisfiesOrientation (tifd, 1)) { return false; } if (!satisfiesSamplesPerPixel (tifd, 1)) { return false; } if (!satisfiesResolutionUnit (tifd, new int [] { 2, 3} )) { return false; } if (!satisfiesDotRange (tifd, 0, 255)) { return false; } int ind = tifd.getImageColorIndicator (); if (ind != 0 && ind != 1) { return false; } // ImageColorValue is defined if ImageColorIndicator=1 if (ind == 1) { if (tifd.getImageColorValue () == IFD.NULL) { return false; } } // PixelIntesityRange={0,255} int [] pir = tifd.getPixelIntensityRange (); if (pir == null || pir.length < 2) { return false; } if (pir[0] != 0 || pir[1] != 255) { return false; } // Tags which must NOT be defined if (tifd.getDocumentName () != null || niso.getScannerModelName () != null || tifd.getPageName () != null || niso.getHostComputer () != null || tifd.getSite () != null || tifd.getColorSequence () != null || tifd.getIT8Header() != null) { return false; } return true; } } jhove/classes/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITMPP2.java0000644000707400001440000000563610771562702026611 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.tiff; import edu.harvard.hul.ois.jhove.*; /** * Profile checker for TIFF Class IT-MP/P2. * * The TIFF/IT spec states that "TIFF/IT-MP/P2 is an extension of * TIFF/IT-MP/P1." * * @author Gary McGath */ public final class TiffProfileClassITMPP2 extends TiffProfileClassIT { public TiffProfileClassITMPP2 () { super (); _profileText = "TIFF/IT-MP/P2 (ISO 12639:2003)"; } /** * Returns true if the IFD satisfies the requirements * of the profile. See the documentation for * details. */ public boolean satisfiesThisProfile (IFD ifd) { if (!super.satisfiesThisProfile (ifd)) { return false; } if (!(ifd instanceof TiffIFD)) { return false; } TiffIFD tifd = (TiffIFD) ifd; if (!satisfiesNewSubfileType (tifd, 0)) { return false; } NisoImageMetadata niso = tifd.getNisoImageMetadata (); int[] bps = niso.getBitsPerSample (); if (bps == null || bps[0] != 8) { return false; } if (!satisfiesCompression (tifd, new int[] {1, 7, 8} )) { return false; } if (!satisfiesPhotometricInterpretation (tifd, 0)) { return false; } if (!satisfiesOrientation (tifd, 1)) { return false; } if (!satisfiesSamplesPerPixel (tifd, 1)) { return false; } if (!satisfiesResolutionUnit (tifd, new int [] { 2, 3} )) { return false; } if (!satisfiesDotRange (tifd, 0, 255)) { return false; } int ind = tifd.getImageColorIndicator (); if (ind != 0 && ind != 1) { return false; } // ImageColorValue is defined if ImageColorIndicator=1 if (ind == 1) { if (tifd.getImageColorValue () == IFD.NULL) { return false; } } // PixelIntesityRange={0,255} int [] pir = tifd.getPixelIntensityRange (); if (pir == null || pir.length < 2) { return false; } if (pir[0] != 0 || pir[1] != 255) { return false; } // Tags which must NOT be defined if (tifd.getDocumentName () != null || niso.getScannerModelName () != null || tifd.getPageName () != null || niso.getHostComputer () != null || tifd.getSite () != null || tifd.getColorSequence () != null || tifd.getIT8Header() != null) { return false; } return true; } } jhove/classes/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITSD.java0000644000707400001440000000407210771562714026375 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.tiff; import edu.harvard.hul.ois.jhove.*; /** * Profile checker for TIFF Class IT-SD. * * The TIFF/IT spec states that "TIFF/IT-SD makes use of all * the features and functionality supported by the TIFF and * TIFF/IT fields appropriate to prescreened (copydot) * colour separation images." * * @author Gary McGath */ public final class TiffProfileClassITSD extends TiffProfileClassIT { public TiffProfileClassITSD () { super (); _profileText = "TIFF/IT-SD (ISO 12639:2003)"; } /** * Returns true if the IFD satisfies the requirements * of the profile. See the documentation for * details. */ public boolean satisfiesThisProfile (IFD ifd) { if (!super.satisfiesThisProfile (ifd)) { return false; } if (!(ifd instanceof TiffIFD)) { return false; } TiffIFD tifd = (TiffIFD) ifd; NisoImageMetadata niso = tifd.getNisoImageMetadata (); /* Check required values. */ int[] bps = niso.getBitsPerSample (); if (bps[0] != 1) { return false; } if (!satisfiesResolutionUnit (tifd, new int[] {2, 3})) { return false; } if (!satisfiesSamplesPerPixel (tifd, new int[] {1, 4})) { return false; } if (!satisfiesPhotometricInterpretation (tifd, 5)) { return false; } if (!satisfiesCompression (tifd, new int [] {1, 4, 8} )) { return false; } if (!satisfiesPlanarConfiguration (tifd, 2)) { return false; } int inkSet = tifd.getInkSet (); if (inkSet != 1 ) { return false; } String seq = tifd.getColorSequence (); if (seq != null && !"CMYK".equals (seq) && !"YMCK".equals (seq)) { return false; } return true; } } jhove/classes/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITSDP2.java0000644000707400001440000000477210771562715026607 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.tiff; import edu.harvard.hul.ois.jhove.*; /** * Profile checker for TIFF Class IT-SD/P2. * * The TIFF/IT spec states that "TIFF/IT-SD/P2 is a simplified file * format profile for screened data image (SD) data and can be * considered a constrained subset of TIFF/IT-SD specifically * intended for simpler implementation." * * There is no TIFF/IT-SD/P1. * * @author Gary McGath */ public final class TiffProfileClassITSDP2 extends TiffProfileClassIT { public TiffProfileClassITSDP2 () { super (); _profileText = "TIFF/IT-SD/P2 (ISO 12639:2003)"; } /** * Returns true if the IFD satisfies the requirements * of the profile. See the documentation for * details. */ public boolean satisfiesThisProfile (IFD ifd) { if (!super.satisfiesThisProfile (ifd)) { return false; } if (!(ifd instanceof TiffIFD)) { return false; } TiffIFD tifd = (TiffIFD) ifd; NisoImageMetadata niso = tifd.getNisoImageMetadata (); /* Check required values. */ int[] bps = niso.getBitsPerSample (); if (bps[0] != 1) { return false; } if (!satisfiesResolutionUnit (tifd, new int[] {2, 3})) { return false; } if (!satisfiesSamplesPerPixel (tifd, new int[] {1, 4})) { return false; } if (!satisfiesPhotometricInterpretation (tifd, 5)) { return false; } if (!satisfiesCompression (tifd, new int [] {1, 4, 8} )) { return false; } if (!satisfiesPlanarConfiguration (tifd, 2)) { return false; } int inkSet = tifd.getInkSet (); if (inkSet != 1 ) { return false; } int numInks = tifd.getNumberOfInks (); if (numInks != 4) { return false; } if (!satisfiesOrientation (tifd, 1)) { return false; } /* Tags which must NOT be defined */ if (tifd.getDocumentName () != null || niso.getScannerModelName () != null || tifd.getPageName () != null || niso.getHostComputer () != null || tifd.getSite () != null || tifd.getColorSequence () != null || tifd.getIT8Header () != null) { return false; } return true; } } jhove/classes/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassR.java0000644000707400001440000000401610771562677026041 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.tiff; import edu.harvard.hul.ois.jhove.*; /** * Profile checker for TIFF Class R (Baseline Palette color). * * @author Gary McGath */ public final class TiffProfileClassR extends TiffProfile { public TiffProfileClassR () { super (); _profileText = "Baseline RGB (Class R)"; } /** * Returns true if the IFD satisfies the requirements of a * Class R profile. See the TIFF 6.0 specification for * details. */ public boolean satisfiesThisProfile (IFD ifd) { if (!(ifd instanceof TiffIFD)) { return false; } TiffIFD tifd = (TiffIFD) ifd; /* Check required tags. */ NisoImageMetadata niso = tifd.getNisoImageMetadata (); if (niso.getImageWidth () == NisoImageMetadata.NULL || niso.getImageLength () == NisoImageMetadata.NULL || niso.getStripOffsets () == null || niso.getRowsPerStrip () == NisoImageMetadata.NULL || niso.getStripByteCounts () == null || niso.getXSamplingFrequency () == null || niso.getYSamplingFrequency () == null) { return false; } /* Check required values. */ int [] bps = niso.getBitsPerSample (); if (bps == null || bps.length < 3 || bps[0] != 8 || bps[1] != 8 || bps[2] != 8) { return false; } if (!satisfiesCompression (tifd, new int [] {1, 32773} )) { return false; } if (!satisfiesPhotometricInterpretation (tifd, 2)) { return false; } if (niso.getSamplesPerPixel () < 3) { return false; } if (!satisfiesResolutionUnit (tifd, new int [] {1, 2, 3} )) { return false; } return true; } } jhove/classes/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassY.java0000644000707400001440000000410010771562712026030 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.tiff; import edu.harvard.hul.ois.jhove.*; /** * Profile checker for TIFF Class Y (Baseline YCbCr). * * @author Gary McGath */ public final class TiffProfileClassY extends TiffProfile { public TiffProfileClassY () { super (); _profileText = "Extension YCbCr (Class Y)"; } /** * Returns true if the IFD satisfies the requirements of a * Class Y profile. See the TIFF 6.0 specification for * details. */ public boolean satisfiesThisProfile (IFD ifd) { if (!(ifd instanceof TiffIFD)) { return false; } TiffIFD tifd = (TiffIFD) ifd; /* Check required tags. */ NisoImageMetadata niso = tifd.getNisoImageMetadata (); if (niso.getImageWidth () == NisoImageMetadata.NULL || niso.getImageLength () == NisoImageMetadata.NULL || niso.getStripOffsets () == null || niso.getRowsPerStrip () == NisoImageMetadata.NULL || niso.getStripByteCounts () == null || niso.getXSamplingFrequency () == null || niso.getYSamplingFrequency () == null || niso.getReferenceBlackWhite () == null) { return false; } /* Check required values. */ if (!satisfiesSamplesPerPixel (tifd, 3)) { return false; } int[] bps = niso.getBitsPerSample (); if (bps == null || bps.length < 3 || bps[0] != 8 || bps[1] != 8 || bps[2] != 8) { return false; } if (!satisfiesCompression (tifd, new int [] {1, 5, 6} )) { return false; } if (!satisfiesPhotometricInterpretation (tifd, 6)) { return false; } if (!satisfiesResolutionUnit (tifd, new int [] {1, 2, 3} )) { return false; } return true; } } jhove/classes/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileDLF.java0000644000707400001440000000513710771562715025255 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.tiff; import edu.harvard.hul.ois.jhove.*; /** * Abstract superclass for the profile checkers for TIFF/DLF */ public abstract class TiffProfileDLF extends TiffProfile { public TiffProfileDLF () { super (); } /** * Returns true if the IFD satisfies the requirements * that are common to the bilevel, grayscale, and color * DLF profiles. The subclasses should call super(ifd) * first, then do additional checking if it returns true. * details. */ public boolean satisfiesThisProfile (IFD ifd) { if (!(ifd instanceof TiffIFD)) { return false; } TiffIFD tifd = (TiffIFD) ifd; if (!satisfiesPhotometricInterpretation (tifd, new int[] {0, 1} )) { return false; } return true; // passed all tests } /** Checks for minimum X and Y resolution. * All of the DLF profiles have similar tests for * XResolution and YResolution. In all cases the * values depend on the ResolutionUnit, which must be * either 2 or 3. * * @param tifd The TiffIFD from which to extract the tags. * @param minUnit2Res The minimum XResolution and YResolution * when ResolutionUnit is 2 * @param minUnit3Res The minimum XResolution and YResolution * when ResolutionUnit is 3 */ protected boolean hasMinimumResolution (TiffIFD tifd, double minUnit2Res, double minUnit3Res) { NisoImageMetadata niso = tifd.getNisoImageMetadata (); Rational xrat = niso.getXSamplingFrequency (); Rational yrat = niso.getYSamplingFrequency (); if (xrat == null || yrat == null) { return false; } int resUnit = niso.getSamplingFrequencyUnit (); if (resUnit == 2) { if (xrat.toDouble() < minUnit2Res || yrat.toDouble() < minUnit2Res) { return false; } } else if (resUnit == 3) { if (xrat.toDouble() < minUnit3Res || yrat.toDouble() < minUnit3Res) { return false; } } else { return false; // resUnit must be 2 or 3 } return true; // passed all tests } } jhove/classes/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileDLFBW.java0000644000707400001440000000245510771562712025503 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.tiff; /** * Profile checker for TIFF DLF Benchmark for Faithful Digital * Reproductions of Monographs and Serials: black and white. */ public final class TiffProfileDLFBW extends TiffProfileDLF { public TiffProfileDLFBW () { super (); _profileText = "DLF Benchmark for Faithful Digital " + "Reproductions of Monographs and Serials: " + "black and white"; } /** * Returns true if the IFD satisfies the requirements * of the profile. See the documentation for * details. */ public boolean satisfiesThisProfile (IFD ifd) { if (!(ifd instanceof TiffIFD)) { return false; } TiffIFD tifd = (TiffIFD) ifd; if (!satisfiesCompression (tifd, new int [] {1, 6} )) { return false; } if (!satisfiesPhotometricInterpretation (tifd, new int [] {0, 1} )) { return false; } /* XResolution and YResolution >= 600 (inches) or 1520 (cm) */ if (!hasMinimumResolution (tifd, 600.0, 1520.0)) { return false; } return true; } } jhove/classes/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileDLFColor.java0000644000707400001440000000277710771562701026256 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.tiff; /** * Profile checker for TIFF DLF Benchmark for Faithful Digital * Reproductions of Monographs and Serials: color. */ public final class TiffProfileDLFColor extends TiffProfileDLF { public TiffProfileDLFColor () { super (); _profileText = "DLF Benchmark for Faithful Digital " + "Reproductions of Monographs and Serials: color"; } /** * Returns true if the IFD satisfies the requirements * of the profile. See the documentation for * details. */ public boolean satisfiesThisProfile (IFD ifd) { if (!(ifd instanceof TiffIFD)) { return false; } TiffIFD tifd = (TiffIFD) ifd; if (!satisfiesCompression (tifd, new int [] {1, 5, 32773} )) { return false; } if (!satisfiesPhotometricInterpretation (tifd, new int [] {2, 6} )) { return false; } if (!satisfiesSamplesPerPixel (tifd, new int [] {3} )) { return false; } int[] bps = tifd.getNisoImageMetadata ().getBitsPerSample (); for (int i=0; i= 300 (in) or 760 (cm) */ if (!hasMinimumResolution (tifd, 300.0, 760.0)) { return false; } return true; } } jhove/classes/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileDLFGray.java0000644000707400001440000000277210771562702026076 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.tiff; /** * Profile checker for TIFF DLF Benchmark for Faithful Digital * Reproductions of Monographs and Serials: grayscale. */ public final class TiffProfileDLFGray extends TiffProfileDLF { public TiffProfileDLFGray () { super (); _profileText = "DLF Benchmark for Faithful Digital " + "Reproductions of Monographs and Serials: " + "grayscale and white"; } /** * Returns true if the IFD satisfies the requirements * of the profile. See the documentation for * details. */ public boolean satisfiesThisProfile (IFD ifd) { if (!(ifd instanceof TiffIFD)) { return false; } TiffIFD tifd = (TiffIFD) ifd; if (!satisfiesCompression (tifd, new int [] {1, 5, 32773} )) { return false; } if (!satisfiesPhotometricInterpretation (tifd, new int [] {0, 1} )) { return false; } if (!satisfiesSamplesPerPixel (tifd, new int [] {1} )) { return false; } int[] bps = tifd.getNisoImageMetadata ().getBitsPerSample (); if (bps == null || bps[0] != 8) { return false; } /* XResolution and YResolution >= 300 (in) or 760 (cm) */ if (!hasMinimumResolution (tifd, 300.0, 760.0)) { return false; } return true; } } jhove/classes/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileDNG.java0000644000707400001440000000717110771562702025254 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College * **********************************************************************/ package edu.harvard.hul.ois.jhove.module.tiff; import edu.harvard.hul.ois.jhove.*; /** * Profile checker for the DNG raw IFD. * * * @author Gary McGath * * @see TiffProfileDNG * */ public class TiffProfileDNG extends TiffProfile { /** PhotometricInterpretation for CFA space */ public final static int CFA = 32803; /* PhotometricInterpretation for LinearRaw space */ public final static int LINEAR_RAW = 34892; /* Set to true if anything directly contravenes DNG, * or a previous profile has reported as DNG */ private boolean notDNG; /* An IFD has been seen with a photometricInterpretation * specific to DNG. */ private boolean photoInterpOK; /* Orientation has been specified. */ private boolean orientationSeen; /* DNGVersion tag has been seen */ private boolean dngVersionSeen; /* UniqueCameraModel tag has been seen */ private boolean uniqueCameraModelSeen; /* AsShotNeutral tag has been seen. This isn't required, * but is mutually exclusive with AsShotWhiteXY. */ private boolean asShotNeutralSeen; /* AsShotWhiteXY tag has been seen. This isn't required, * but is mutually exclusive with AsShotNeutral. */ private boolean asShotWhiteXYSeen; /** * */ public TiffProfileDNG() { super(); _profileText = "DNG 1.0.0.0 (September 2004)"; notDNG = false; photoInterpOK = false; orientationSeen = false; dngVersionSeen = false; uniqueCameraModelSeen = false; } /** * Returns true if the IFD satisfies the requirements * of the profile. See the documentation for * details. */ public boolean satisfiesThisProfile(IFD ifd) { if (!(ifd instanceof TiffIFD)) { return false; } TiffIFD tifd = (TiffIFD) ifd; /* Check if this is the "raw" profile. */ NisoImageMetadata niso = tifd.getNisoImageMetadata (); int pInterpretation = niso.getColorSpace (); if (!(pInterpretation == CFA || pInterpretation == LINEAR_RAW)) { return false; } /* BitsPerSample must be 8 to 32, and same for all samples */ int[] bps = niso.getBitsPerSample(); if (bps != null) { int bpsval = bps[0]; if (bpsval < 8 || bpsval > 32) { return false; } for (int i = 0; i < bps.length; i++) { if (bpsval != bps[i]) { return false; } } } /* If the photometric interpretation is CFA, there must be * certain other tags. */ if (pInterpretation == CFA) { if (tifd.getCFAPlaneColor() == null || tifd.getCFARepeatPatternDim() == null || tifd.getCFAPattern() == null) { return false; } } /* Orientation is required. */ if (niso.getOrientation() == NisoImageMetadata.NULL) { return false; } /* Compression must be 1 or 7 */ int compression = niso.getCompressionScheme (); if (compression != NisoImageMetadata.NULL) { if (!(compression == 1 || compression == 7)) { return false; } } return true; } } jhove/classes/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileDNGThumb.java0000644000707400001440000000370110771562705026252 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College * **********************************************************************/ package edu.harvard.hul.ois.jhove.module.tiff; import edu.harvard.hul.ois.jhove.*; //import edu.harvard.hul.ois.jhove.module.TiffModule; /** * IFD 0 of a DNG document must satisfy this profile. It doesn't * actually have to be a "thumbnail" in the sense of containing * a low-resolution image, but it has to contain the "IFD 0" * tags specified by DNG. In addition, * some other document must satisfy TiffProfileDNG. * * @author Gary McGath * @see TiffProfileDNG */ public class TiffProfileDNGThumb extends TiffProfile { /** * */ public TiffProfileDNGThumb() { super(); } /** * Returns true if the IFD satisfies the requirements of a * DNG thumbnail profile. */ public boolean satisfiesThisProfile(IFD ifd) { if (!(ifd instanceof TiffIFD)) { return false; } TiffIFD tifd = (TiffIFD) ifd; /* Check required tags. */ if (tifd.getDNGVersion() == null) { return false; } if (tifd.getNewSubfileType() != 1) { return false; } NisoImageMetadata niso = tifd.getNisoImageMetadata (); if (tifd.getAsShotNeutral () != null && tifd.getAsShotWhiteXY () != null) { // There can be only one return false; } if (tifd.getUniqueCameraModel () == null) { return false; } /* The specification says that PhotometricInterpretation * must be 1 or 2 for a thumbnail -- but there's no requirement * that this BE a thumbnail. So that requirement appears * to be moot. */ return true; } } jhove/classes/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileEP.java0000644000707400001440000001025410771562711025144 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.tiff; import edu.harvard.hul.ois.jhove.*; /** * Profile checker for TIFF/EP. * For TIFF/EP, no default values may be assumed. * At the moment, we have no way to determine which values * were defaulted, so defaults are shown even if the file * satisfies the EP profile. * * This class also serves as the base class for DNG, * which is defined as a restricted subset of TIFF/EP. */ public class TiffProfileEP extends TiffProfile { public TiffProfileEP () { super (); _profileText = "TIFF/EP (ISO 12234-2:2001)"; } /** * Returns true if the IFD satisfies the requirements of a * TIFF/EP profile. See the TIFF/EP specification for details. */ public boolean satisfiesThisProfile (IFD ifd) { if (!(ifd instanceof TiffIFD)) { return false; } TiffIFD tifd = (TiffIFD) ifd; /* Check required tags. */ NisoImageMetadata niso = tifd.getNisoImageMetadata (); if (niso.getImageWidth () == NisoImageMetadata.NULL || niso.getImageLength () == NisoImageMetadata.NULL || niso.getBitsPerSample () == null || tifd.getImageDescription () == null || niso.getXSamplingFrequency () == null || niso.getYSamplingFrequency () == null || niso.getScannerManufacturer () == null || (niso.getScannerModelName () == null && niso.getScannerModelNumber () == null) || niso.getScanningSoftware() == null || tifd.getImageDescription () == null || tifd.getCopyright () == null || niso.getDateTimeCreated () == null || tifd.getDateTime () == null || tifd.getTIFFEPStandardID () == null) { return false; } /* Must have either a full complement of strip tags or * a full complement of tile tags. */ if (!(niso.getStripOffsets () != null && niso.getRowsPerStrip () != NisoImageMetadata.NULL && niso.getStripByteCounts () != null) && !(niso.getTileWidth () != NisoImageMetadata.NULL && niso.getTileLength () != NisoImageMetadata.NULL && niso.getTileOffsets () != null && niso.getTileByteCounts () != null)) { return false; } long subfile = tifd.getNewSubfileType (); if (subfile != 0 && subfile != 1) { return false; } if (!satisfiesResolutionUnit (tifd, new int [] {1, 2, 3} )) { return false; } if (!satisfiesOrientation (tifd, new int [] {NisoImageMetadata.NULL, 1, 3, 6, 8, 9} )) { return false; } int pInterpretation = niso.getColorSpace (); if (!(pInterpretation == 1 || pInterpretation == 2 || pInterpretation == 6 || pInterpretation == 32803 || pInterpretation > 32767)) { return false; } int config = niso.getPlanarConfiguration (); if (config != 1 && config != 2) { return false; } int method = niso.getSensor (); if (method == NisoImageMetadata.NULL || method < 0 || method > 8) { return false; } if (pInterpretation == 32803) { if (tifd.getCFARepeatPatternDim () == null) { return false; } if (tifd.getCFAPattern () == null) { return false; } } /* Make sure PhotometricInterpretation and SamplesPerPixel * are compatible. */ int samplesPerPixel = niso.getSamplesPerPixel (); if (pInterpretation == 1 || pInterpretation == 32803) { if (samplesPerPixel != 1) { return false; } } if (pInterpretation == 2 || pInterpretation == 6) { if (samplesPerPixel != 3) { return false; } } if (pInterpretation == 6) { if (niso.getYCbCrCoefficients() == null || niso.getYCbCrSubSampling () == null || niso.getYCbCrPositioning () == NisoImageMetadata.NULL || niso.getReferenceBlackWhite () == null) { return false; } } // meteringMode and exposureProgram checks deleted, per Bugzilla #33 int compression = niso.getCompressionScheme (); if (compression != NisoImageMetadata.NULL) { // Corrected 6-Jan-04 per Bugzilla #33 if (!(compression == 1 || compression == 7 || compression > 32767)) { return false; } } return true; } } jhove/classes/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileExif.java0000644000707400001440000000771110771562716025544 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.tiff; import edu.harvard.hul.ois.jhove.*; /** * Profile checker for Exif. This applies to the main IFD * of the file. To satisfy the Exif profile, the thumbnail * IFD must also satisfy TiffProfileExifThumb. * * @see TiffProfileExifThumb * @see TiffProfileExifIFD */ public final class TiffProfileExif extends TiffProfile { /* The profile text depends on the version. */ private String[] profileText = { "Exif 2.0", "Exif 2.1 (JEIDA-49-1998)", "Exif 2.2 (JEITA CP-3451)" }; private TiffProfileExifIFD _exifIFDProfile; public TiffProfileExif () { super (); //_profileText = "Exif 2.2 (JEITA CP-3451)"; _exifIFDProfile = new TiffProfileExifIFD (); } /** * Returns true if the IFD satisfies the requirements of an * Exif profile. See the Exif specification for details. */ public boolean satisfiesThisProfile (IFD ifd) { if (!(ifd instanceof TiffIFD)) { return false; } TiffIFD tifd = (TiffIFD) ifd; /* Check required tags. */ NisoImageMetadata niso = tifd.getNisoImageMetadata (); if (niso.getXSamplingFrequency () == null || niso.getYSamplingFrequency () == null) { return false; } if (satisfiesCompression (tifd, 1)) { if (niso.getImageWidth () == NisoImageMetadata.NULL || niso.getImageLength () == NisoImageMetadata.NULL || niso.getStripOffsets () == null || niso.getRowsPerStrip () == NisoImageMetadata.NULL || niso.getStripByteCounts () == null) { return false; } if (niso.getSamplesPerPixel () != 3) { return false; } /* BitsPerSample must be [8, 8, 8] */ int[] bps = niso.getBitsPerSample (); if (bps == null || bps.length < 3 || bps[0] != 8 || bps[1] != 8 || bps[2] != 8) { return false; } int pInterpretation = niso.getColorSpace (); if (!(pInterpretation == 2 || pInterpretation == 6)) { return false; } if (pInterpretation == 6) { if (niso.getYCbCrSubSampling () == null || niso.getYCbCrPositioning () == NisoImageMetadata.NULL) { return false; } } } else { // If the compression isn't 1, then the JPEGInterchangeFormat // tag must be present, but other requirements are lifted. if (tifd.getJpegInterchangeFormat() == NisoImageMetadata.NULL) { return false; } } if (!satisfiesResolutionUnit (tifd, new int [] {2, 3} )) { return false; } /* for the first IFD only, there must be an Exif subifd */ if (tifd.isFirst ()) { ExifIFD eifd = tifd.getTheExifIFD (); if (eifd == null) { return false; } // The Exif IFD must satisfy the profile requirements if (!_exifIFDProfile.satisfiesThisProfile(eifd)) { return false; } String version = eifd.getExifVersion (); int idx = 0; // If we passed the profile, the version will be one of // the following. if (version.equals ("0220")) { idx = 2; } else if (version.equals ("0210")) { idx = 1; } else if (version.equals ("0200")) { idx = 0; } _profileText = profileText[idx]; } return true; } } jhove/classes/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileExifIFD.java0000644000707400001440000000362210771562710026056 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.tiff; /** * Profile checker for the Exif IFD of a TIFF file which potentially * matches the TIFF profile. This is called from TiffProfileExif * to check the Exif IFD. * * @author Gary McGath * */ public class TiffProfileExifIFD extends TiffProfile { private int _majVersion; private int _minVersion; public TiffProfileExifIFD () { super (); // This isn't used directly to report a profile, so the // profile text is irrelevant. _profileText = null; _majVersion = -1; _minVersion = -1; } /** * Returns true if the IFD satisfies the requirements of an * Exif profile. See the Exif specification for details. */ public boolean satisfiesThisProfile (IFD ifd) { if (!(ifd instanceof ExifIFD)) { return false; } ExifIFD eifd = (ExifIFD) ifd; String version = eifd.getExifVersion (); if (version.equals ("0220")) { _majVersion = 2; _minVersion = 2; } else if (version.equals ("0210")) { _majVersion = 2; _minVersion = 1; } else if (version.equals ("0200")) { _majVersion = 2; _minVersion = 0; } else { // Other versions aren't accepted return false; } if (!(eifd.getFlashpixVersion ().equals ("0100"))) { return false; } int colspc = eifd.getColorspace (); if (colspc != 1 && colspc != 65535) { return false; } return true; } } jhove/classes/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileExifThumb.java0000644000707400001440000000403510771562705026536 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.tiff; /** * Profile checker for the thumbnail IFD of a * TIFF file potentially meeting the TIFF profile. * * This doesn't go into the _profiles list of TiffIFD, * but rather is one of two (or more?) profiles that must * be checked to determine if the file meets the Exif * profile. It should be called only for the "thumbnail" * IFD, which is the second top-level IFD. * * * @author Gary McGath * * @see TiffProfileExif */ public class TiffProfileExifThumb extends TiffProfile { /** Compression scheme of the main IFD. We need to check * our compression against the main IFD's compression. */ int mainCompression; public TiffProfileExifThumb () { super (); // This isn't used directly to report a profile, so the // profile text is irrelevant. _profileText = null; } /** * Record the compression scheme of the main IFD; required * for comparison. */ public void setMainCompression (int comp) { mainCompression = comp; } /** * Returns true if the IFD satisfies the requirements of a * thumbnail IFD for an * Exif profile. See the Exif specification for details. */ public boolean satisfiesThisProfile (IFD ifd) { if (!(ifd instanceof TiffIFD)) { return false; } TiffIFD tifd = (TiffIFD) ifd; if (!satisfiesCompression (tifd, new int [] {1, 6} )) { return false; } // If the main IFD is uncompressed, the thumbnail must be too if (mainCompression == 1 && tifd.getNisoImageMetadata().getCompressionScheme() != 1) { return false; } return true; } } jhove/classes/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileFXC.java0000644000707400001440000001022010771562702025251 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.tiff; import edu.harvard.hul.ois.jhove.*; /** * * Profile checker for TIFF FX, Profile C (Baseline Color). * * Image data content is not checked for profile conformance. * Only tags are checked. * * @author Gary McGath * */ public class TiffProfileFXC extends TiffFXBase { /** * Constructor. */ public TiffProfileFXC () { super (); _profileText = "TIFF-FX (Profile C)"; _mimeClass = MIME_FX; } /** * Returns true if the IFD satisfies the requirements of a * TIFF/FX C profile. See the TIFF/FX specification for * details. */ public boolean satisfiesThisProfile(IFD ifd) { if (!(ifd instanceof TiffIFD)) { return false; } TiffIFD tifd = (TiffIFD) ifd; if (!satisfiesClass (tifd)) { return false; } if (!satisfiesImageWidth (tifd, new int[] {864, 1024, 1216, 1728, 2048, 2432, 2592, 3072, 3456, 3648, 4096, 4864} )) { return false; } if (!satisfiesSamplesPerPixel(tifd, new int[] {1, 3})) { return false; } if (!satisfiesCompression (tifd, 7)) { return false; } if (!satisfiesPhotometricInterpretation(tifd, 10)) { return false; } if (!satisfiesResolutionUnit (tifd, new int[] {2, 3, NisoImageMetadata.NULL} )) { return false; // NOTE: RFC 2301 (1998) allows 2 or 3, but // the 2003 working draft allows only 2 (inch). // Watch for change. } if (!satisfiesSamplesPerPixel(tifd, new int[] {1, 3} )) { return false; } // XResolution must be one of the specified values // and equal YResolution if (!satisfiesXResolution(tifd, new int[] {100, 200, 300, 400} )) { return false; } if (!satisfiesFillOrder (tifd, new int[] {1, 2} )) { return false; } NisoImageMetadata niso = tifd.getNisoImageMetadata (); long xRes = niso.getXSamplingFrequency ().toLong (); if (xRes != niso.getYSamplingFrequency ().toLong ()) { return false; } if (niso.getSamplingFrequencyUnit() == 3) { // Convert from units/cm to units/inch, with rounding xRes = perCMtoPerInch ((int) xRes); } int bps = niso.getBitsPerSample ()[0]; if (bps != 8 && bps != 12) { // NOTE: RFC 2301 (1998) allows 8 or 12 bits per // sample, but the 2003 working draft allows only 8. // Watch for changes. return false; } // Check if image width is suitable to resolution int wid = (int) niso.getImageWidth (); switch ((int) xRes) { case 100: if (wid != 864 && wid != 1024 & wid != 1216) { return false; } break; case 200: if (wid != 1728 && wid != 2048 & wid != 2432) { return false; } break; case 300: if (wid != 2592 && wid != 3072 & wid != 3648) { return false; } break; case 400: if (wid != 3456 && wid != 4096 & wid != 4864) { return false; } break; } // By my best reading, the colormap is needed only // if the Indexed value is 1. if (tifd.getIndexed() == 1) { if (niso.getColormapRedValue () == null) { return false; } } return true; // passed all tests } } jhove/classes/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileFXF.java0000644000707400001440000000647310771562703025274 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.tiff; import edu.harvard.hul.ois.jhove.*; /** * * Profile checker for TIFF FX, Profile F, aka TIFF-F. * This supersedes the Class F profile (TiffProfileClassF), * which will be deprecated and removed from the Jhove * application. * * Image data content is not checked for profile conformance. * Only tags are checked. * * @author Gary McGath * */ public class TiffProfileFXF extends TiffFXBase { /** * Constructor. */ public TiffProfileFXF () { super (); _profileText = "TIFF-FX (Profile F)"; _mimeClass = MIME_FX; } /** * Returns true if the IFD satisfies the requirements of a * TIFF/FX S profile. See the TIFF/FX specification for * details. */ public boolean satisfiesThisProfile(IFD ifd) { if (!(ifd instanceof TiffIFD)) { return false; } TiffIFD tifd = (TiffIFD) ifd; if (!satisfiesClass (tifd)) { return false; } NisoImageMetadata niso = tifd.getNisoImageMetadata (); int[] bps = niso.getBitsPerSample (); if (bps[0] != 1) { return false; } if (!satisfiesCompression (tifd, new int[] {3, 4} )) { return false; } if (!satisfiesFillOrder (tifd, new int[] {1, 2} )) { return false; } // We've already established that if the compression // scheme is 3, T4Options exists. But we must establish // that if it's 4, T6Options exists and has a value of 0. if (niso.getCompressionScheme () == 4) { if (tifd.getT6Options () != 0) { return false; } } // XResolution, YResolution, and ImageWidth have codependencies. boolean xywOK = false; // guilty till proven innocent long xRes = niso.getXSamplingFrequency ().toLong(); long yRes = niso.getYSamplingFrequency ().toLong(); if (niso.getSamplingFrequencyUnit() == 3) { // Convert from units/cm to units/inch, with rounding xRes = perCMtoPerInch ((int) xRes); yRes = perCMtoPerInch ((int) yRes); } long wid = niso.getImageWidth(); if ((xRes == 200 && yRes == 100) || (xRes == 204 && yRes == 98) || (xRes == 200 && yRes == 200) || (xRes == 204 && yRes == 196) || (xRes == 204 && yRes == 391)) { if (wid == 1728 || wid == 2048 || wid == 2432) { xywOK = true; } } if (xRes == 300 && yRes == 300) { if (wid == 2592 || wid == 3072 || wid == 3648) { xywOK = true; } } if ((xRes == 408 && yRes == 391) || (xRes == 400 && yRes == 400)) { if (wid == 3456 || wid == 4096 || wid == 4864) { xywOK = true; } } if (!xywOK) { return false; } return true; // passed all tests } } jhove/classes/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileFXJ.java0000644000707400001440000000665210771562677025311 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.tiff; import edu.harvard.hul.ois.jhove.*; /** * Profile checker for TIFF FX, Profile J (lossless JBIG). * * Image data content is not checked for profile conformance. * Only tags are checked. * * @author Gary McGath * */ public class TiffProfileFXJ extends TiffFXBase { /** * Constructor. */ public TiffProfileFXJ () { super (); _profileText = "TIFF-FX (Profile J)"; _mimeClass = MIME_FX; } /** * Returns true if the IFD satisfies the requirements of a * TIFF/FX J profile. See the TIFF/FX specification for * details. */ public boolean satisfiesThisProfile(IFD ifd) { if (!(ifd instanceof TiffIFD)) { return false; } TiffIFD tifd = (TiffIFD) ifd; if (!satisfiesClass (tifd)) { return false; } NisoImageMetadata niso = tifd.getNisoImageMetadata (); int[] bps = niso.getBitsPerSample (); if (bps[0] != 1) { return false; } int cmp = niso.getCompressionScheme(); if (cmp != 9) { return false; } if (!satisfiesFillOrder (tifd, new int[] {1, 2} )) { return false; // RFC 2301 (1998) is internally inconsistent about // whether a FillOrder of 1 is permitted. The latest // working draft allows a FillOrder of 1, so I've // resolved the conflict in favor of that interpretation. } // We've already established that if the compression // scheme is 3, T4Options exists. But we must establish // that if it's 4, T6Options exists and has a value of 0. if (cmp == 4) { if (tifd.getT6Options () != 0) { return false; } } // XResolution, YResolution, and ImageWidth have codependencies. boolean xywOK = false; // guilty till proven innocent long xRes = niso.getXSamplingFrequency ().toLong(); long yRes = niso.getYSamplingFrequency ().toLong(); if (niso.getSamplingFrequencyUnit() == 3) { // Convert from units/cm to units/inch, with rounding xRes = perCMtoPerInch ((int) xRes); yRes = perCMtoPerInch ((int) yRes); } long wid = niso.getImageWidth(); if ((xRes == 200 && yRes == 100) || (xRes == 204 && yRes == 98) || (xRes == 200 && yRes == 200) || (xRes == 204 && yRes == 196) || (xRes == 204 && yRes == 391)) { if (wid == 1728 || wid == 2048 || wid == 2432) { xywOK = true; } } if (xRes == 300 && yRes == 300) { if (wid == 2592 || wid == 3072 || wid == 3648) { xywOK = true; } } if ((xRes == 408 && yRes == 391) || (xRes == 400 && yRes == 400)) { if (wid == 3456 || wid == 4096 || wid == 4864) { xywOK = true; } } if (!xywOK) { return false; } return true; // passed all tests } } jhove/classes/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileFXL.java0000644000707400001440000000663110771562712025276 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.tiff; import edu.harvard.hul.ois.jhove.*; /** * * Profile checker for TIFF FX, Profile L (Lossless Color). * * Image data content is not checked for profile conformance. * Only tags are checked. * * @author Gary McGath * */ public class TiffProfileFXL extends TiffFXBase { /** * Constructor. */ public TiffProfileFXL () { super (); _profileText = "TIFF-FX (Profile L)"; _mimeClass = MIME_FX; } /** * Returns true if the IFD satisfies the requirements of a * TIFF/FX L profile. See the TIFF/FX specification for * details. */ public boolean satisfiesThisProfile(IFD ifd) { if (!(ifd instanceof TiffIFD)) { return false; } TiffIFD tifd = (TiffIFD) ifd; if (!satisfiesClass (tifd)) { return false; } if (!satisfiesImageWidth (tifd, new int[] {864, 1024, 1216, 1728, 2048, 2432, 2592, 3072, 3456, 3648, 4096, 4864} )) { return false; } // I can't make sense of whether compression mode 7 is // allowed (since Profile L implementors are required to // implement profile C) or not (since only 10 is mentioned // under Profile L). Since the compression scheme is the // defining characteristic of JBIG, I assume it must be 10. if (!satisfiesCompression (tifd, 10 )) { return false; } if (!satisfiesPhotometricInterpretation(tifd, new int[] {2, 5, 10 } )) { return false; } if (!satisfiesResolutionUnit (tifd, new int[] {2, 3, NisoImageMetadata.NULL} )) { // NOTE: RFC 2301 (1998) allows 2 or 3, but // the 2003 working draft allows only 2 (inch). // Watch for change. return false; } if (!satisfiesSamplesPerPixel(tifd, new int[] {1, 3, 4} )) { return false; } // XResolution must be one of the specified values // and equal YResolution if (!satisfiesXResolution(tifd, new int[] {100, 200, 300, 400} )) { return false; } NisoImageMetadata niso = tifd.getNisoImageMetadata (); if (niso.getXSamplingFrequency ().toLong () != niso.getYSamplingFrequency ().toLong ()) { return false; } if (!satisfiesIndexed (tifd, new int[] {0, 1} )) { return false; } if (!satisfiesFillOrder (tifd, new int[] {1, 2} )) { return false; } int bps = niso.getBitsPerSample ()[0]; if (bps > 16) { // NOTE: RFC 2301 (1998) allows 1-16 bits per // sample, but the 2003 working draft allows only 1-12. // Watch for changes. return false; } if (tifd.getIndexed() == 1) { if (niso.getColormapRedValue () == null) { return false; } } return true; // passed all tests } } jhove/classes/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileFXM.java0000644000707400001440000000721310771562703025274 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.tiff; import edu.harvard.hul.ois.jhove.*; /** * * Profile checker for TIFF FX, Profile M (Mixed Raster Content). * * Image data content is not checked for profile conformance. * Only tags are checked. * * @author Gary McGath * */ public class TiffProfileFXM extends TiffFXBase { /** * Constructor. */ public TiffProfileFXM () { super (); _profileText = "TIFF-FX (Profile M)"; _mimeClass = MIME_FX; } /** * Returns true if the IFD satisfies the requirements of a * TIFF/FX M profile. See the TIFF/FX specification for * details. * * Proper validation should check if the subIFDs are appropriate * to the M profile layer scheme. However, the existing design * of the TIFF module has almost no understanding of IFD * hierarchies. This could be an enhancement for a future * release. */ public boolean satisfiesThisProfile(IFD ifd) { if (!(ifd instanceof TiffIFD)) { return false; } TiffIFD tifd = (TiffIFD) ifd; if (!satisfiesClass (tifd)) { return false; } NisoImageMetadata niso = tifd.getNisoImageMetadata (); if (!satisfiesImageWidth (tifd, new int[] {864, 1024, 1216, 1728, 2048, 2432, 2592, 3072, 3456, 3648, 4096, 4864} )) { return false; } if (!satisfiesNewSubfileType(tifd, new long[] {16, 18})) { return false; } if (!satisfiesCompression (tifd, new int[] {3, 4, 7, 9, 10})) { return false; // NOTE: The March 2003 draft allows a compression // value of 1 if StripByteCounts contains a 0 // value, i.e., there is no image data. Watch // for changes. } if (!satisfiesSamplesPerPixel (tifd, new int[] {1, 3, 4} )) { return false; } if (!satisfiesResolutionUnit (tifd, new int[] {2, 3, NisoImageMetadata.NULL} )) { return false; } if (!satisfiesPhotometricInterpretation (tifd, new int[] {0, 1, 2, 5, 10} )) { return false; // NOTE: The March 2003 draft allows only 0, 2 and // 10. Watch for change. } if (!satisfiesFillOrder (tifd, new int[] {1, 2} )) { return false; } int bps = niso.getBitsPerSample ()[0]; if (bps > 16) { // NOTE: RFC 2301 (1998) allows 1-16 bits per // sample, but the 2003 working draft allows only 1-12. // Watch for changes. return false; } int[] imgl = tifd.getImageLayer(); if (imgl == null || imgl[0] < 1 || imgl[0] > 3) { return false; } // Can't have both StripRowCounts and RowsPerStrip if (tifd.getStripRowCounts () != null && niso.getRowsPerStrip () != NisoImageMetadata.NULL) { return false; } // By my best reading, the colormap is needed only // if the Indexed value is 1. if (tifd.getIndexed() == 1) { if (niso.getColormapRedValue () == null) { return false; } } return true; // passed all tests } } jhove/classes/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileFXS.java0000644000707400001440000000532310771562703025302 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.tiff; import edu.harvard.hul.ois.jhove.*; /** * Profile checker for TIFF FX, Profile S. * * Image data content is not checked for profile conformance. * Only tags are checked. * * @author Gary McGath * */ public class TiffProfileFXS extends TiffFXBase { /** * Constructor. */ public TiffProfileFXS () { super (); _profileText = "TIFF-FX (Profile S)"; _mimeClass = MIME_FX; } /** * Returns true if the IFD satisfies the requirements of a * TIFF/FX S profile. See the TIFF/FX specification for * details. */ public boolean satisfiesThisProfile(IFD ifd) { if (!(ifd instanceof TiffIFD)) { return false; } TiffIFD tifd = (TiffIFD) ifd; if (!satisfiesClass (tifd)) { return false; } // Profile S (but not any other fax profile) requires // "II", little-endian data. if (ifd.isBigEndian()) { return false; } NisoImageMetadata niso = tifd.getNisoImageMetadata (); int[] bps = niso.getBitsPerSample (); if (bps[0] != 1) { return false; } if (niso.getStripOffsets().length > 1) { // Image data must be a single strip return false; } int resUnit = niso.getSamplingFrequencyUnit(); if (resUnit != 2 && resUnit != NisoImageMetadata.NULL) { return false; } if (niso.getCompressionScheme() != 3) { return false; } if (tifd.getFillOrder () != 2) { return false; } if (niso.getImageWidth () != 1728) { return false; } if (niso.getSamplesPerPixel () != 1) { return false; } long xRes = niso.getXSamplingFrequency ().toLong(); long yRes = niso.getYSamplingFrequency ().toLong(); // resolution unit must be inches, so no need to // do metric conversion if (xRes != 200 && xRes != 204) { return false; } if (yRes != 98 && yRes != 100 && yRes != 196 && yRes != 200) { return false; } long t4Opt = tifd.getT4Options (); if ((t4Opt & 0X3) != 0) { // bits 0 and 1 must be 0 return false; } return true; // passed all tests } } jhove/classes/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileGeoTIFF.java0000644000707400001440000000262710771562700026026 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.tiff; /** * Profile checker for GeoTIFF. */ public final class TiffProfileGeoTIFF extends TiffProfile { public TiffProfileGeoTIFF () { super (); _profileText = "Baseline GeoTIFF 1.0"; } /** * Returns true if the IFD satisfies the requirements of the * the profile. See the GeoTIFF specification for details. */ public boolean satisfiesThisProfile (IFD ifd) { if (!(ifd instanceof TiffIFD)) { return false; } TiffIFD tifd = (TiffIFD) ifd; if (tifd.getGeoKeyDirectoryTag () == null) { return false; } /* Exactly one of modelTiepointTag and modelTransformationTag * must be present. */ boolean hasModelTiepoint = (tifd.getModelTiepointTag() != null); boolean hasModelTransformation = (tifd.getModelTransformationTag() != null); if ((hasModelTiepoint && hasModelTransformation) || (!hasModelTiepoint && !hasModelTransformation)) { return false; } return true; } } jhove/classes/edu/harvard/hul/ois/jhove/module/tiff/TiffProfilePagemaker6.java0000644000707400001440000000561710771562716026636 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.tiff; import edu.harvard.hul.ois.jhove.*; /** * Profile checker for TIFF Pagemaker 6.0. */ public final class TiffProfilePagemaker6 extends TiffProfile { public TiffProfilePagemaker6 () { super (); _profileText = "Adobe PageMaker 6.0"; } /** * Returns true if the IFD satisfies the requirements of the * profile. See the PageMaker specification for details. */ public boolean satisfiesThisProfile (IFD ifd) { if (!(ifd instanceof TiffIFD)) { return false; } TiffIFD tifd = (TiffIFD) ifd; /* Check required tags. */ NisoImageMetadata niso = tifd.getNisoImageMetadata (); long imageLength = niso.getImageLength (); if (imageLength == NisoImageMetadata.NULL || niso.getImageWidth () == NisoImageMetadata.NULL) { return false; } boolean so = (niso.getStripOffsets () != null); boolean to = (niso.getTileOffsets () != null); if ((so && to) || (!so && !to)) { return false; } if (so) { if (niso.getStripByteCounts () == null) { return false; } long rowsPerStrip = niso.getRowsPerStrip (); if (rowsPerStrip == NisoImageMetadata.NULL || rowsPerStrip < 1L || rowsPerStrip > imageLength) { return false; } } if (to) { if (niso.getTileWidth () == NisoImageMetadata.NULL || niso.getTileLength () == NisoImageMetadata.NULL || niso.getTileOffsets () == null || niso.getTileByteCounts () == null) { return false; } } /* Check required values. */ if (!satisfiesCompression (tifd, new int [] {1, 2, 5, 32773, 32895, 32896} )) { return false; } int pi = niso.getColorSpace (); if (pi != 0 && pi != 1 && pi != 2 && pi != 3 && pi != 5 && pi != 8 && pi != 9) { return false; } int inkSet = tifd.getInkSet (); int spp = niso.getSamplesPerPixel (); if (pi == 0 || pi == 1 || pi == 3) { if (spp != 1) { return false; } } else if (pi == 2 || pi == 8 || pi == 9) { if (spp != 3) { return false; } } else if (inkSet == 1) { /* Only check for RGB, not hi-fi/multi-ink. */ if (spp != 4) { return false; } } int [] bps = niso.getBitsPerSample (); if (bps != null) { if (pi == 0 || pi == 1 || pi == 3) { for (int i=0; i -1) { name = TAG_LABELS[n]; } else { name = Integer.toString (tag); } return name; } } jhove/classes/edu/harvard/hul/ois/jhove/module/tiff/build.xml0000644000707400001440000000210011204567750023453 0ustar garyusers TIFF module build file Jhove - JSTOR/Harvard Object Validation Environment Version 1.0 2004-02-03 Copyright 2004 by JSTOR and the President and Fellows of Harvard College jhove/classes/edu/harvard/hul/ois/jhove/module/tiff/package.html0000644000707400001440000000056610771562715024135 0ustar garyusers Contains supporting classes for the TIFF-HUL module.

jhove/classes/edu/harvard/hul/ois/jhove/module/tiff/TiffProfile.class0000644000707400001440000000747111510702104025072 0ustar garyusers2 !S T U V W XY Z[ \ Z] ^ Z_ ` Za bc Zd Ze f Zg h Zi j Xk l Xm n Xo p Xq Zr Xs Xtuv _profileTextLjava/lang/String; _mimeClassI _alreadyOKZ MIME_GENERIC ConstantValueMIME_FX MIME_1314()VCodesatisfiesProfile.(Ledu/harvard/hul/ois/jhove/module/tiff/IFD;)Z StackMapTablesatisfiesThisProfilegetText()Ljava/lang/String; setAlreadyOK(Z)V getMimeClass()I isAlreadyOK()ZsatisfiesCompression4(Ledu/harvard/hul/ois/jhove/module/tiff/TiffIFD;[I)Z3(Ledu/harvard/hul/ois/jhove/module/tiff/TiffIFD;I)Z"satisfiesPhotometricInterpretationsatisfiesResolutionUnitsatisfiesXResolutionsatisfiesYResolutionsatisfiesSamplesPerPixelsatisfiesPlanarConfigurationsatisfiesOrientationsatisfiesImageColorIndicatorsatisfiesNewSubfileType4(Ledu/harvard/hul/ois/jhove/module/tiff/TiffIFD;[J)Z3(Ledu/harvard/hul/ois/jhove/module/tiff/TiffIFD;J)Z!satisfiesBackgroundColorIndicatorsatisfiesDotRange4(Ledu/harvard/hul/ois/jhove/module/tiff/TiffIFD;II)ZwsatisfiesImageWidthsatisfiesIndexedsatisfiesFillOrder /0 &' $% 53 "#x yz{ |; >? }; A? ~; B?  ; E? ; F? ; G? ; H? IJ ; L? ; ;1edu/harvard/hul/ois/jhove/module/tiff/TiffProfilejava/lang/Object[I-edu/harvard/hul/ois/jhove/module/tiff/TiffIFDgetNisoImageMetadata/()Ledu/harvard/hul/ois/jhove/NisoImageMetadata;+edu/harvard/hul/ois/jhove/NisoImageMetadatagetCompressionScheme getColorSpacegetSamplingFrequencyUnitgetXSamplingFrequency&()Ledu/harvard/hul/ois/jhove/Rational;"edu/harvard/hul/ois/jhove/RationaltoLong()JgetYSamplingFrequencygetSamplesPerPixelgetPlanarConfigurationgetOrientationgetImageColorIndicatorgetNewSubfileTypegetBackgroundColorIndicator getDotRange()[I getImageWidth getIndexed getFillOrder! !"#$%&'(%)*+%),-%)./01***231.*+=**453671*891*:;1*<=1*>?1A$+>6,,.4  >@1 YON*+-A?1A$+ >6,,.4  A@1 YON*+- B?1A$+ >6,,.4  B@1 YON*+- C?1F)+ B6,!,.4 D?1F)+B6,!,.4 E?1A$+>6,,.4  E@1 YON*+-F?1A$+>6,,.4  F@1 YON*+-G?1A$+>6,,.4  G@1 YON*+-H?1>!+>6,,.4 H@1 YON*+-IJ1?"+B6,!,/4 IK1 Y P:*+L?1>!+>6,,.4 L@1 YON*+-MN1I*+: . .4 O@P?1C&+B6,!,.4  Q?1>!+>6,,.4 R?1>!+>6,,.4 jhove/classes/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileExifThumb.class0000644000707400001440000000153311510702104026677 0ustar garyusers2(      mainCompressionI()VCodesetMainCompression(I)VsatisfiesThisProfile.(Ledu/harvard/hul/ois/jhove/module/tiff/IFD;)Z StackMapTable  -edu/harvard/hul/ois/jhove/module/tiff/TiffIFD !" #$% &':edu/harvard/hul/ois/jhove/module/tiff/TiffProfileExifThumb1edu/harvard/hul/ois/jhove/module/tiff/TiffProfile _profileTextLjava/lang/String;satisfiesCompression4(Ledu/harvard/hul/ois/jhove/module/tiff/TiffIFD;[I)ZgetNisoImageMetadata/()Ledu/harvard/hul/ois/jhove/NisoImageMetadata;+edu/harvard/hul/ois/jhove/NisoImageMetadatagetCompressionScheme()I!    ***W;++M*, YOYO*,  jhove/classes/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileDNG.class0000644000707400001440000000253111510702104025413 0ustar garyusers2N +, - . / 0 1 23 4 56#L 57 8 9 : 5; 5<=>CFAI ConstantValue LINEAR_RAWnotDNGZ photoInterpOKorientationSeendngVersionSeenuniqueCameraModelSeenasShotNeutralSeenasShotWhiteXYSeen()VCodesatisfiesThisProfile.(Ledu/harvard/hul/ois/jhove/module/tiff/IFD;)Z StackMapTable3?@ "#DNG 1.0.0.0 (September 2004) AB     -edu/harvard/hul/ois/jhove/module/tiff/TiffIFD CD? EF GH IH JH KH LF MF4edu/harvard/hul/ois/jhove/module/tiff/TiffProfileDNG1edu/harvard/hul/ois/jhove/module/tiff/TiffProfile+edu/harvard/hul/ois/jhove/NisoImageMetadata[I _profileTextLjava/lang/String;getNisoImageMetadata/()Ledu/harvard/hul/ois/jhove/NisoImageMetadata; getColorSpace()IgetBitsPerSample()[IgetCFAPlaneColorgetCFARepeatPatternDim getCFAPatterngetOrientationgetCompressionScheme!    !"#$0$*******%&$+ + M, N- 6  -:6.6  6. ,, ,--6 '$ ()* jhove/classes/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileDNGThumb.class0000644000707400001440000000146311510702104026416 0ustar garyusers2)       ()VCodesatisfiesThisProfile.(Ledu/harvard/hul/ois/jhove/module/tiff/IFD;)Z StackMapTable -edu/harvard/hul/ois/jhove/module/tiff/TiffIFD  ! "# $% &% '(9edu/harvard/hul/ois/jhove/module/tiff/TiffProfileDNGThumb1edu/harvard/hul/ois/jhove/module/tiff/TiffProfile+edu/harvard/hul/ois/jhove/NisoImageMetadata getDNGVersion()[IgetNewSubfileType()JgetNisoImageMetadata/()Ledu/harvard/hul/ois/jhove/NisoImageMetadata;getAsShotNeutral'()[Ledu/harvard/hul/ois/jhove/Rational;getAsShotWhiteXYgetUniqueCameraModel()Ljava/lang/String;!   * eB++M,, ,N, ,,  jhove/classes/edu/harvard/hul/ois/jhove/module/tiff/TiffException.class0000644000707400001440000000053311510702104025420 0ustar garyusers2  _offsetJ(Ljava/lang/String;)VCode(Ljava/lang/String;J)V getOffset()J 3edu/harvard/hul/ois/jhove/module/tiff/TiffExceptionjava/lang/Exception1   *+*   *+*   *jhove/classes/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileExifIFD.class0000644000707400001440000000155511510702104026226 0ustar garyusers26     !" #$%& '( )*+ _majVersionI _minVersion()VCodesatisfiesThisProfile.(Ledu/harvard/hul/ois/jhove/module/tiff/IFD;)Z StackMapTable ,  -.  -edu/harvard/hul/ois/jhove/module/tiff/ExifIFD /00220, 1202100200 300100 458edu/harvard/hul/ois/jhove/module/tiff/TiffProfileExifIFD1edu/harvard/hul/ois/jhove/module/tiff/TiffProfilejava/lang/String _profileTextLjava/lang/String;getExifVersion()Ljava/lang/String;equals(Ljava/lang/Object;)ZgetFlashpixVersion getColorspace()I! ****|++M,N-**1- **- **,  , 6   jhove/classes/edu/harvard/hul/ois/jhove/module/tiff/ExifIFD.class0000644000707400001440000004272511510702104024100 0ustar garyusers2 o% n& n' n() n* n+ n, n- n./ n0 n1 n2 n3 n4 n5 n6 n7 n8 n9 n: n; n< n= n>? @ nAB @CD EF "G HIJ nK nL nM nNO EP QR "S nTU nVW EXY 6Z[ n\] n^ n_ n`a nbc nde nfg nhi njk nlm nno npqr ns nt nuv nwx nyw nz{ n|} n~ n n n n n n n n n n n n n n n n n n n n n n n n n n  n n n n n n n n n n n " n n n n n n  n " n    '|( n   $     n   @          E n n      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUV EXPOSURETIMEI ConstantValueFNUMBEREXPOSUREPROGRAMSPECTRALSENSITIVITYISOSPEEDRATINGSOECF EXIFVERSIONDATETIMEORIGINALDATETIMEDIGITIZEDCOMPONENTSCONFIGURATIONCOMPRESSEDBITSPERPIXELSHUTTERSPEEDVALUE APERTUREVALUEBRIGHTNESSVALUEEXPOSUREBIASVALUEMAXAPERTUREVALUESUBJECTDISTANCE METERINGMODE LIGHTSOURCEFLASH FOCALLENGTH SUBJECTAREA MAKERNOTE USERCOMMENT SUBSECTIMESUBSECTIMEORIGINALSUBSECTIMEDIGITIZEDFLASHPIXVERSION COLORSPACEPIXELXDIMENSIONPIXELYDIMENSIONRELATEDSOUNDFILE FLASHENERGYSPATIALFREQUENCYRESPONSEFOCALPLANEXRESOLUTIONFOCALPLANEYRESOLUTIONFOCALPLANERESOLUTIONUNITSUBJECTLOCATION EXPOSUREINDEX SENSINGMETHOD FILESOURCE SCENETYPE CFAPATTERNCUSTOMRENDERED EXPOSUREMODE WHITEBALANCEDIGITALZOOMRATIOFOCALLENGTHIN35MMFILMSCENECAPTURETYPE GAINCONTROLCONTRAST SATURATION SHARPNESSDEVICESETTINGDESCRIPTIONSUBJECTDISTANCERANGE IMAGEUNIQUEID COLORSPACE_L[Ljava/lang/String;COLORSPACE_INDEX[ICOMPONENTSCONFIGURATION_L CONTRAST_LCUSTOMRENDERED_LEXPOSUREMODE_LEXPOSUREPROGRAM_L FILESOURCE_LFLASH_L FLASH_INDEXFOCALPLANERESOLUTIONUNIT_L GAINCONTROL_L LIGHTSOURCE_LLIGHTSOURCE_INDEXMETERINGMODE_LMETERINGMODE_INDEX SATURATION_LSCENECAPTURETYPE_L SCENETYPE_LSENSINGMETHOD_L SHARPNESS_LSUBJECTDISTANCERANGE_LWHITEBALANCE_L_apertureValue$Ledu/harvard/hul/ois/jhove/Rational;_brightnessValue _cfaPattern _colorSpace_componentsConfiguration_compressedBitsPerPixel _contrast_customRendered_dateTimeDigitizedLjava/lang/String;_dateTimeOriginal_deviceSettingDescription_digitalZoomRatio _exifVersion_exposureBiasValue_exposureIndex _exposureMode_exposureProgram _exposureTime _fileSource_flash _flashEnergy_flashpixVersion_fNumber _focalLength_focalLengthIn35mmFilm_focalPlaneXResolution_focalPlaneYResolution_focalPlaneResolutionUnit _gainControl_imageUniqueID_isoSpeedRatings _lightSource _makerNote_maxApertureValue _meteringMode_oecf_pixelXDimensionJ_pixelYDimension_relatedSoundFile _saturation_sceneCaptureType _sceneType_sensingMethod _sharpness_shutterSpeedValue_spatialFrequencyResponse_spectralSensitivity _subjectArea_subjectDistance_subjectDistanceRange_subjectLocation _subSecTime_subSecTimeDigitized_subSecTimeOriginal _userComment _whiteBalance _manufacturer_model _software_artist _orientation_niso-Ledu/harvard/hul/ois/jhove/NisoImageMetadata;B(JLedu/harvard/hul/ois/jhove/RepInfo;Ljava/io/RandomAccessFile;Z)VCode getProperty'(Z)Ledu/harvard/hul/ois/jhove/Property; StackMapTablegetExifVersion()Ljava/lang/String;getNisoImageMetadata/()Ledu/harvard/hul/ois/jhove/NisoImageMetadata;getFlashpixVersion getColorspace()I exifProps6(Ledu/harvard/hul/ois/jhove/Property;)Ljava/util/List; lookupTag(IIJJ)VW ExceptionsmakeUserCommentProperty)([IZ)Ledu/harvard/hul/ois/jhove/Property;UX()V  q q q0220  q q q q0100  q q q q q   q q q q q q q+edu/harvard/hul/ois/jhove/NisoImageMetadata $ java/util/LinkedList"edu/harvard/hul/ois/jhove/Property ExifVersionY Z[ \ ]^FlashpixVersion ColorSpace   _` ComponentsConfiguration a[b cd e CompressedBitsPerPixel fgPixelXDimension h[java/lang/Long iPixelYDimension  MakerNote   RelatedSoundFile DateTimeOriginal DateTimeDigitized  SubSecTime SubSecTimeOriginal SubSecTimeDigitized  ImageUniqueID  ExposureTime FNumberExposureProgram  _j SpectralSensitivity ISOSpeedRatings  ShutterSpeedValue  ApertureValue BrightnessValue ExposureBiasValue MaxApertureValue SubjectDistance MeteringMode   LightSource  Flash    FocalLength  SubjectArea  FlashEnergy  FocalPlaneXResolution FocalPlaneYResolutionFocalPlaneResolutionUnit  SubjectLocation  ExposureIndex SensingMethod  FileSource  SceneType   CFAPatternCustomRendered  ExposureMode  WhiteBalance  DigitalZoomRatioFocalLengthIn35mmFilmjava/lang/Integer kSceneCaptureType  GainControl  Saturation  Sharpness  DeviceSettingDescriptionSubjectDistanceRange  Make Model Software ArtistExif lm no%[Ledu/harvard/hul/ois/jhove/Property;java/util/Listjava/lang/Exception pq rs tu vw xy z{ |wjava/lang/String } ~y    k q  java/io/IOException3edu/harvard/hul/ois/jhove/module/tiff/TiffExceptionjava/lang/StringBuilderRead error for tag     Undefinedjava/lang/StringBuffer ASCII ^UNICODEUTF8 IDCodeValueRawValue UserComment [sRGB uncalibratedDoes not existYCbCrRGB normalsofthard customautomanual auto bracket unidentifiedprogram normalaperture priorityshutter priorityprogram creativeprogram action portrait modelandscape modeDSC did not firefired strobe return light not detectedstrobe return light detectedfired, compulsory flash mode7fired, compulsory flash mode, return light not detected3fired, compulsory flash mode, return light detected#did not fire, compulsory flash modedid not fire, auto modefired, auto mode+fired, auto mode, return light not detected'fired, auto mode, return light detectedno flash functionfired, red-eye reduction mode8fired, red-eye reduction mode, return light not detected4fired, red-eye reduction mode, return light detectedfired, compulsory mode1fired, compulsory mode, return light not detected(fired, auto mode, red-eye reduction modeCfired, auto mode, red-eye reduction mode, return light not detected?fired, auto mode, red-eye reduction mode, return light detectedinches centimetersnone low gain up high gain up low gain downhigh gain downunknowndaylight fluorescenttungstenflash fine weathercloudy weathershade%daylight flourescent (D 5700 - 7100K)&day white flourescent (N 4600 - 5400K)'cool white flourescent (W 3900 - 4500K)#white flourescent (WW 3200 - 3700K)standard light Astandard light Bstandard light CD55D65D75D50ISO studio tungstenotheraveragecentre weighted averagespot multispotpatternpartialstandard landscapeportraitnightdirectly photographed image not definedone-chip color areatwo-chip color areathree-chip color areacolor sequential area trilinearcolour sequential linearmacroclosedistant-edu/harvard/hul/ois/jhove/module/tiff/ExifIFD)edu/harvard/hul/ois/jhove/module/tiff/IFD[C[B&edu/harvard/hul/ois/jhove/PropertyTypeSTRING(Ledu/harvard/hul/ois/jhove/PropertyType;O(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ljava/lang/Object;)Vadd(Ljava/lang/Object;)ZaddIntegerPropertyO(Ljava/lang/String;I[Ljava/lang/String;[IZ)Ledu/harvard/hul/ois/jhove/Property;INTEGER'edu/harvard/hul/ois/jhove/PropertyArityARRAY)Ledu/harvard/hul/ois/jhove/PropertyArity;x(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ledu/harvard/hul/ois/jhove/PropertyArity;Ljava/lang/Object;)VaddRationalProperty](Ljava/lang/String;Ledu/harvard/hul/ois/jhove/Rational;Z)Ledu/harvard/hul/ois/jhove/Property;LONG(J)VM(Ljava/lang/String;I[Ljava/lang/String;Z)Ledu/harvard/hul/ois/jhove/Property;(I)VpropertyHeaderH(Ljava/lang/String;Ljava/util/List;)Ledu/harvard/hul/ois/jhove/Property;getValue()Ljava/lang/Object; checkType(III)V checkCount(IJI)V readRational((JJ)Ledu/harvard/hul/ois/jhove/Rational; readByteArray(IJJ)[I readShort(IJJ)I readASCII(JJ)Ljava/lang/String;readShortArray([C)VreadBytereadLong(IJJ)JsetScannerManufacturer(Ljava/lang/String;)VsetScannerModelNamesetOrientationsetXSamplingFrequency'(Ledu/harvard/hul/ois/jhove/Rational;)VsetYSamplingFrequencyappend-(Ljava/lang/String;)Ljava/lang/StringBuilder;(I)Ljava/lang/StringBuilder;toString(Ljava/lang/String;J)V(C)Ljava/lang/StringBuffer;equals([BLjava/lang/String;)VPROPERTY!nopqrsqrtqruqrvqrwqrxqryqrzqr{qr|qr}qr~qrqrqrqrqrqrqrqrqrqrqrqrqrqrqrqrqrqrqrqrqrqrqrqrqrqrqrqrqrqrqrqrqrqrqrqrqrqrqrqrqrqrqrqrqqqqqqqqqqqqqqqqqqqq *-******* * * * **************Y  & Ի Y!M,"Y#$*%&W,"Y'$* %&W*,*(*)*+&W*,,"Y-./*,0&W*1,*2*13&W*!,"Y456Y*7%&W*!,"Y856Y*7%&W*9,"Y:./*90&W*;**;$*=%&W*?,"Y@$*?%&W*A,"YB$*A%&W*C,"YD$*C%&W*E,"YF$*E%&W*G,"YH$*G%&W*I,"YJ$*I%&W*K,*L*K3&W*M,*N*M3&W*,*O*PQ&W*R,"YS$*R%&W*T,"YU./*T0&W*V,"YW./*V0&W*X,*Y*X3&W*Z,*[*Z3&W*\,*]*\3&W*^,*_*^3&W*`,*a*`3&W*b,*c*b3&W*,*d*ef+&W*,*g*hi+&W* ,*j* kl+&W*m,*n*m3&W*o,"Yp./*o0&W*q,*r*q3&W*s,"Yp./*o0&W*t,*u*t3&W*v,*w*v3&W*,*x*yQ&W*z,"Y{./*z0&W*|,*}*|3&W*,*~*Q&W* ,** Q&W*,**Q&W*,"Y./*0&W*,**Q&W*,**Q&W*,**Q&W*,**3&W* !,"Y.Y* %&W*,**Q&W*,**Q&W*,**Q&W*,**Q&W*,"Y./*0&W*,**Q&W*,"Y$*%&W*,"Y$*%&W*,"Y$*%&W*,"Y$*%&W*, @9V ((      %  *** *:+M,2N-M W !!**!Z !**!\**!!**!!**!b**!,F!**!1&!**!!**!!**!A!**!?**!!**!fM!*!::6    .U *Y !**!^ !**!|à!**!Ġ!**!Š!**!KsƠ!**!ǵ QȠ!**! 0ɠ!**!qʠM!*!::6    .U *Y ˠ!**!M̠!**!m͠!**! _Π!**!t?Ϡ!**!vР!**!Ѡ!**!Ҡ!!**!IӠ**!TԠ!**!ՠ**!9d֠!**!`Dנ!**!#ؠ**!V٠!**!ڵ۠!**!ڵܠ! **!=ݠ!**!ޠ!**!cߠ!**!A!**! !**! !**!X**!s**!R**!o!**!bm!**!L**!z1**!C**!G**!E**!;$*!:**$*!:**w+!*!6**H !**!$!**!":YY bC   &  ! &     !  ''.# B .N:Y:6++6+..6+.+.WN- -P+d:6+d+`.T- ::Y:+ ": ":"Y$-%S6"Y$-%S+"Y./+0S"Y  /0:)* [   ! " /  #$Y SY S) YOY O*YSYSYSYSYSYSYSYSYSYSYSYSYSYSYS YSYSYSY SY!SY"SY#SY$SY%SPY&SY&SY&SY'SY(SY)SY*SY+SY,SY-SY.SY/SY0SY 1SY 2SY 3SY 4SY 5SY6SY7SY8SY9SY.SY:SY;SYSyY?SY@SYASYBSYCSYDSYESYFSYGSYHSYISYJSYKSYLSY MSY NSY OSY PSY QSYRSYSSYTSYUSYVSYWSYXSh YOYOYOYOYOY OY OY OY OY  OY OY OY OY OYOYOYOYOYOYOYOiYSYYSYZSY[SY\SY]SY^SYXSe YOYOYOYOYOYOYOYOfYSYSYSY_SY`SYaSYbSY&SYcS Y&SYdSYeSYfSYgSYhSY&SYiSYjSYSYSYSYDSYkSYlSYmSYSYSjhove/classes/edu/harvard/hul/ois/jhove/module/tiff/GPSInfoIFD.class0000644000707400001440000002147311510702104024447 0ustar garyusers2 j i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i " !"# ' 8$ '%& '' $( )*+, !- ./ $0123 !45 86789:;<=>?@ABCDEFGHIJK iLMNOP iQ iR iS iT iU iV iW iX iY iZ[\] '^ __ `abcd fefg GPSVERSIONIDI ConstantValueGPSLATITUDEREF GPSLATITUDEGPSLONGITUDEREF GPSLONGITUDEGPSALTITUDEREF GPSALTITUDE GPSTIMESTAMP GPSSATELLITES GPSSTATUS GPSMEASUREMODE GPSDOP  GPSSPEEDREF GPSSPEED  GPSTRACKREFGPSTRACKGPSIMGDIRECTIONREFGPSIMGDIRECTION GPSMAPDATUMGPSDESTLATITUDEREFGPSDESTLATITUDEGPSDESTLONGITUDEREFGPSDESTLONGITUDEGPSDESTBEARINGREFGPSDESTBEARINGGPSDESTDISTANCEREFGPSDESTDISTANCEGPSPROCESSINGMETHODGPSAREAINFORMATION GPSDATESTAMPGPSDIFFERENTIAL _gpsVersionID[I_gpsLatitudeRefLjava/lang/String; _gpsLatitude%[Ledu/harvard/hul/ois/jhove/Rational;_gpsLongitudeRef _gpsLongitude_gpsAltitudeRef _gpsAltitude$Ledu/harvard/hul/ois/jhove/Rational; _gpsTimeStamp_gpsSatellites _gpsStatus_gpsMeasureMode_gpsDOP _gpsSpeedRef _gpsSpeed _gpsTrackRef _gpsTrack_gpsImgDirectionRef_gpsImgDirection _gpsMapDatum_gpsDestLatitudeRef_gpsDestLatitude_gpsDestLongitudeRef_gpsDestLongitude_gpsDestBearingRef_gpsDestBearing_gpsDestDistanceRef_gpsDestDistance_gpsProcessingMethod_gpsAreaInformation _gpsDateStamp_gpsDifferentialB(JLedu/harvard/hul/ois/jhove/RepInfo;Ljava/io/RandomAccessFile;Z)VCodegetGPSAltitude&()Ledu/harvard/hul/ois/jhove/Rational;getGPSAltitudeRef()IgetGPSDateStamp()Ljava/lang/String;getGPSDestBearinggetGPSDestBearingRefgetGPSDestDistancegetGPSDestDistanceRefgetGPSDestLatitude'()[Ledu/harvard/hul/ois/jhove/Rational;getGPSDestLatitudeRefgetGPSDestLongitudegetGPSDestLongitudeRefgetGPSDifferential getGPSDOPgetGPSImgDirectiongetGPSImgDirectionRefgetGPSLatitudegetGPSLatitudeRefgetGPSLongitudegetGPSLongitudeRefgetGPSMapDatumgetGPSMeasureModegetGPSProcessingMethod()[IgetGPSSatellites getGPSSpeedgetGPSSpeedRef getGPStatusgetGPTimeStamp getGPSTrackgetGPSTrackRefgetGPSVersionID getProperty'(Z)Ledu/harvard/hul/ois/jhove/Property; StackMapTableh lookupTag(IIJJ)Vb Exceptions l l K T java/util/LinkedList i"edu/harvard/hul/ois/jhove/Property GPSVersionIDj kljava/lang/StringBuilder mn op. m qh rsGPSLatitudeRef GPSLatitude tlu vw xGPSLongitudeRef GPSLongitudeGPSAltitudeRef yljava/lang/Integer z GPSAltitude GPSTimeStamp GPSSatellites GPSStatusGPSMeasureMode GPSSpeedRefGPSSpeed GPSTrackRefGPSTrackGPSImgDirectionRefGPSImgDirection GPSMapDatumGPSDestLatitudeRefGPSDestLatitudeGPSDestLongitudeRefGPSDestLongitudeGPSDestBearingRefGPSDestBearingGPSDestDistanceRefGPSDestDistanceGPSProcessingMethod GPSAreaInformation GPSDateStampGPSDifferentialGPSInfo {| }~        &edu/harvard/hul/ois/jhove/ErrorMessageUnknown GPSInfo IFD tagTag = o  java/io/IOException3edu/harvard/hul/ois/jhove/module/tiff/TiffExceptionRead error for tag 0edu/harvard/hul/ois/jhove/module/tiff/GPSInfoIFD)edu/harvard/hul/ois/jhove/module/tiff/IFDjava/util/List()V&edu/harvard/hul/ois/jhove/PropertyTypeSTRING(Ledu/harvard/hul/ois/jhove/PropertyType;toString(I)Ljava/lang/String;append-(Ljava/lang/String;)Ljava/lang/StringBuilder;O(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ljava/lang/Object;)Vadd(Ljava/lang/Object;)ZRATIONAL'edu/harvard/hul/ois/jhove/PropertyArityARRAY)Ledu/harvard/hul/ois/jhove/PropertyArity;x(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ledu/harvard/hul/ois/jhove/PropertyArity;Ljava/lang/Object;)VINTEGER(I)VpropertyHeaderH(Ljava/lang/String;Ljava/util/List;)Ledu/harvard/hul/ois/jhove/Property; checkType(III)V checkCount(IJI)V readRational((JJ)Ledu/harvard/hul/ois/jhove/Rational;readByte(IJJ)I readASCII(JJ)Ljava/lang/String;readRationalArray)(JJ)[Ledu/harvard/hul/ois/jhove/Rational; readShort readByteArray(IJJ)[I_info#Ledu/harvard/hul/ois/jhove/RepInfo;(I)Ljava/lang/StringBuilder;((Ljava/lang/String;Ljava/lang/String;J)V!edu/harvard/hul/ois/jhove/RepInfo setMessage&(Ledu/harvard/hul/ois/jhove/Message;)V(Ljava/lang/String;J)V!ij>klmnolmpqlmrslmtulmvwlmxylmz{lm|}lm~lmlmlmlmlmlmlmlmlmlmlmlmlmlmlmlmlmlmlmlmlmlmll![O*-*** YOYOYOYO**** * * * ** ** ** ******** ************ *!**1"Y#M,$Y%&'Y(*.)*+**.)*+**.)*+**.)*,-.W*,$Y/&*-.W*,$Y012*3.W*,$Y4&*-.W*,$Y512*3.W,$Y678Y*9-.W* ,$Y:1* -.W* ,$Y;12* 3.W*,$Y<&*-.W*,$Y=&*-.W*,$Y>&*-.W*,$Y?1*-.W,$Y@&*-.W*,$YA1*-.W,$YB&*-.W*!,$YC1*!-.W,$YD&* -.W*,$YE1*-.W*,$YF&*-.W*,$YG&*-.W*,$YH12*3.W*,$YI&*-.W*,$YJ12*3.W,$YK&* -.W*,$YL1*-.W,$YM&* -.W*,$YN1*-.W* ,$YM&* -.W*,$YO72*3.W*P,$YQ72*P3.W* ,$YR&* -.W,$YS78Y*9-.W*T,U  ; 444  44 5V!W**!X V!W**!YV! W**!Z tV!W**!XTV!W**!Z 4V!W**!XV!W**!Z V!W**![V!W**!ZV!W**![V!W**!ZtV!W**!\S V!W**!X3V!W**!XV!W**!Z V!W**![V!W**!ZV!W**![V!W**!ZwV**!Z] V!W**!Z=V**!]!V**!Z V!W**!X V!W**!Z V!W**!ZV!W**![ V!W**!X!gV!W**!ZGV!W**!](*^_Y`'Y(a*b,cd":fY'Y(g*b,he&!   $Bfjhove/classes/edu/harvard/hul/ois/jhove/module/tiff/InteroperabilityIFD.class0000644000707400001440000000367511510702104026533 0ustar garyusers2j 1 23 456 78 9 :;< = > ? @ABC 4D E F G H IJKLM NOPINTEROPERABILITYINDEXI ConstantValue_interoperabilityIndexLjava/lang/String;B(JLedu/harvard/hul/ois/jhove/RepInfo;Ljava/io/RandomAccessFile;Z)VCodegetInteroperabilityIndex()Ljava/lang/String; getProperty'(Z)Ledu/harvard/hul/ois/jhove/Property; lookupTag(IIJJ)V StackMapTableK Exceptions %& #$java/util/LinkedList %Q"edu/harvard/hul/ois/jhove/PropertyIndexR ST %UV WXExif Interoperability YZ [\ ]^ _`&edu/harvard/hul/ois/jhove/ErrorMessage%Unknown Exif Interoperability IFD tagjava/lang/StringBuilderTag = ab ac d) %ef ghjava/io/IOException3edu/harvard/hul/ois/jhove/module/tiff/TiffExceptionRead error for tag %i9edu/harvard/hul/ois/jhove/module/tiff/InteroperabilityIFD)edu/harvard/hul/ois/jhove/module/tiff/IFD()V&edu/harvard/hul/ois/jhove/PropertyTypeSTRING(Ledu/harvard/hul/ois/jhove/PropertyType;O(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ljava/lang/Object;)Vjava/util/Listadd(Ljava/lang/Object;)ZpropertyHeaderH(Ljava/lang/String;Ljava/util/List;)Ledu/harvard/hul/ois/jhove/Property; checkType(III)V readASCII(JJ)Ljava/lang/String;_info#Ledu/harvard/hul/ois/jhove/RepInfo;append-(Ljava/lang/String;)Ljava/lang/StringBuilder;(I)Ljava/lang/StringBuilder;toString((Ljava/lang/String;Ljava/lang/String;J)V!edu/harvard/hul/ois/jhove/RepInfo setMessage&(Ledu/harvard/hul/ois/jhove/Message;)V(Ljava/lang/String;J)V! !"#$%&' *-()'**+'3'YM,Y* W* , ,-'a **! (*YY":YY>A. $B/0jhove/classes/edu/harvard/hul/ois/jhove/module/tiff/GlobalParametersIFD.class0000644000707400001440000000706711510702104026431 0ustar garyusers2 <` ;a ;b ;c ;d ;ef gh ;i ;j klm ;no ;p ;qrs tu vw txy z{ ;| ;} ;~ ; ; ; #g # # # " _profileTypeI _faxProfile_codingMethods _versionYearLjava/lang/String; _modeNumber PROFILETYPE ConstantValue FAXPROFILE CODINGMETHODS VERSIONYEAR MODENUMBER PROFILETYPE_L[Ljava/lang/String; FAXPROFILE_LCODINGMETHODS_LB(JLedu/harvard/hul/ois/jhove/RepInfo;Ljava/io/RandomAccessFile;Z)VCode getProperty'(Z)Ledu/harvard/hul/ois/jhove/Property; StackMapTable Exceptions lookupTag(IIJJ)V()V ST => ?> @> AB C>java/util/LinkedList S_ ProfileType OP   FaxProfile QP CodingMethods RP "edu/harvard/hul/ois/jhove/Property VersionYear S ModeNumber java/lang/Integer SGlobalParameterIFD java/io/IOException3edu/harvard/hul/ois/jhove/module/tiff/TiffExceptionjava/lang/StringBuilderRead error for tag Sjava/lang/String Unspecified Group 3 Fax?>@>ABC>D>EFG>EHI>EJK>ELM>ENOPQPRPSTU0$*-*****VWUYM*,* *  W*,* * W*,** W*,Y* W*!,YY* W*,X %Y%Z"[\U!**!!**!f!**!C!**! "!**!":"Y#Y$%&'()!X #!" B]Z"^_Uvj*Y+SY,S *Y-SY.SY/SY0SY1SY2SY3S*Y4SY5SY6SY7SY8SY9SY:Sjhove/classes/edu/harvard/hul/ois/jhove/module/tiff/GeoTiffStrings.class0000644000707400001440000020135311510702105025552 0ustar garyusers2 t s s s s s s s s s      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcde sf sghijklmnopqrstuvwxyz{|}~ s s s s s s      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                                  ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~                                                                                                                                                                   ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~                                                                                                                                                                   ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~                    s s                                                                                                                                              ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~                                                                s s                            s s                                        s  s  s   MODELTYPE_INDEX[I MODELTYPE[Ljava/lang/String;RASTERTYPE_INDEX RASTERTYPELINEARUNITS_INDEX LINEARUNITSANGULARUNITS_INDEX ANGULARUNITSGEOGRAPHICS_INDEX GEOGRAPHICSGEODETICDATUM_INDEX GEODETICDATUMELLIPSOID_INDEX ELLIPSOIDPRIMEMERIDIAN_INDEX PRIMEMERIDIANPROJECTEDCSTYPE_INDEXPROJECTEDCSTYPEPROJECTION_INDEX PROJECTIONCOORDINATETRANSFORMATION_INDEXCOORDINATETRANSFORMATIONVERTICALCSTYPE_INDEXVERTICALCSTYPEVERTICALCSDATUM_INDEXVERTICALCSDATUM()VCode  uvjava/lang/String UndefinedProjection coordinate system6Geographic latitude-longitude system (FGDC geographic)OY?OY@OYAOYBOYCOYDOYEOYFOYGOYHOYIOYJOYKOYLOYMOYNOYOOYPOYQOYROYSOYTOYUOYVOYWOYXOYYOYZOY[OY\OY]OY^OY_OY`OYaOYbOYcOYdOYeOYfOYgOYhOYiOYjOYkOYlOYmOYnOYoOYpOYqOYrOYsOYtOYuOYvOYwOYxOYyOYzOY{OY|OY}OY~OYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOY%OY&OYO)YSY*SY+SY,SY-SY.SY/SY0SY1SY 2SY 3SY 4SY 5SY 6SY7SY8SY9SY:SY;SYSY?SY@SYASYBSYCSYDSYESYFSYGSYHSY ISY!JSY"KSY#LSY$MSY%NSY&OSY'PSY(QSY)RSY*SSY+TSY,USY-VSY.WSY/XSY0YSY1ZSY2[SY3\SY4]SY5^SY6_SY7`SY8aSY9bSY:cSY;dSY<eSY=fSY>gSY?hSY@iSYAjSYBkSYClSYDmSYEnSYFoSYGpSYHqSYIrSYJsSYKtSYLuSYMvSYNwSYOxSYPySYQzSYR{SYS|SYT}SYU~SYVSYWSYXSYYSYZSY[SY\SY]SY^SY_SY`SYaSYbSYcSYdSYeSYfSYgSYhSYiSYjSYkSYlSYmSYnSYoSYpSYqSYrSYsSYtSYuSYvSYwSYxSYySYzSY{SY|SY}SY~SYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYS YqOYrOYsOYtOYuOYvOYwOYxOYyOY zOY {OY |OY }OY ~OYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOY OY!OY"OY#9OY$:OY%;OY&OY)?OY*@OY+AOY,BOY-COY.DOY/EOY0FOY1GOY2HOY3IOY4JOY5KOY6LOY7MOY8NOY9OOY:POY;QOY<ROY=SOY>TOY?UOY@VOYAWOYBXOYCYOYDZOYE[OYF\OYG]OYH^OYI_OYJ`OYKaOYLbOYMcOYNdOYOeOYPfOYQgOYRhOYSiOYTjOYUkOYVlOYWmOYXnOYYoOYZpOY[qOY\rOY]sOY^tOY_uOY`vOYawOYbxOYcyOYdzOYe{OYf|OYg}OYh~OYiOYjOYkOYlOYmOYnOYoOYpOYqOYrOYsOYtOYuOYvOYwOYxOYyOYzOY{OY|OY}OY~OYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYSY*SYSYSY-SY.SY/SY0SY1SY 2SY 3SY 4SY 5SY 6SYSY8SY9SY:SY;SYSYSY>SY?SY@SYSYBSYCSYDSYESYFSYGSYHSY ISY!JSY"KSY#LSY$MSY%SY&SY'SY(QSY)RSY*SSY+TSY,USY-VSY.WSY/XSY0YSY1ZSY2SY3\SY4]SY5^SY6_SY7`SY8aSY9bSY:cSY;dSY<eSY=SY>gSY?hSY@iSYASYBSYClSYDmSYEnSYFoSYGpSYHSYISYJsSYKtSYLuSYMSYNwSYOxSYPySYQSYR{SYSSYT}SYU~SYVSYWSYXSYYSYZSY[SY\SY]SY^SY_SY`SYaSYbSYcSYdSYeSYfSYgSYhSYiSYjSYkSYlSYmSYnSYoSYpSYqSYrSYsSYtSYuSYvSYwSYxSYySYzSY{SY|SY}SY~SYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYS% YOYYOYZOYY\OY]OY^OY_OY`OY aOY bOY cOY dOY eOYfOYgOYhOYiOYjOYkOYlOYmOYnOYoOYpOYqOYrOYsOYtOYuOYvOYwOY xOY!yOY"zOY#{OY$O%YSYSYSYSYSYSYSYSYSY SY SY SY  SY  SY SY SY SYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSY SY!SY"SY#SY$S  YOY"OY"OY"OY"OY"OY"OY"OY"OY "OY "OY "OY O! YSY"SYSSY#SY^SY$SY%SY&SY'SY (SY )SY *SY S+Լ YOYNOYNOYOOYOOYOOYOOYOOYOOY OOY OOY O OY O!OY O"OYO|OYO}OYO~OYOOYOOYOOYOOYOOYOOYOOYOOYOOYOOYOOYPOYP:OYP;OYPOY QVOY!QWOY"QXOY#QOY$QOY%QOY&QOY'QOY(QOY)QOY*QOY+QOY,QOY-ROY.ROY/RlOY0ROY1ROY2ROY3SOY4SOY5SOY6SOY7SOY8SOY9SOY:SOY;SOY<SOY=SOY>SOY?SOY@SOYASOYBSOYCSOYDSOYESOYFSOYGSOYHSOYISOYJUOYKU9OYLU:OYMUOYNUOYOUOYPUOYQVOYRVOYSVOYTVOYUVOYVVOYWVOYXVOYYVOYZWOY_?OY_@OY_OY_OY_OY`OY`OY`OY`OY`OY`OYa-OYa.OYa/OYa0OYa;OYaOY;i?OY<i@OY=iAOY>iBOY?iDOY@iEOYAiFOYBiGOYCiHOYDiIOYEiJOYFiKOYGiLOYHiMOYIiNOYJiOOYKiPOYLiQOYMiROYNiSOYOiTOYPiUOYQiVOYRiWOYSiXOYTiYOYUiZOYVi[OYWi\OYXi]OYYi^OYZi_OY[i`OY\iaOY]ibOY^icOY_idOY`ieOYaifOYbigOYcihOYdiiOYeijOYfikOYgilOYhimOYiinOYjioOYkipOYliqOYmirOYnisOYoitOYpiuOYqivOYriOYsiOYtiOYuiOYvj@OYwjOYxjOYyk%OYzklOY{kOY|kOY}kOY~kOYkOYkOYl4OYnHOYnOYnOYnOYnOYnOYnOYnOYnOYnOYnOYnOYnOYnOYnOYnOYnOYnOYnOYnOYnOYnOYnOYnOYoOYoOYoOYoOYoOYoOYoOYoOYoOYo OYo OYo OYo OYo OYoOYoOYoOYo0OYo1OYo2OYo3OYo4OYo5OYo6OYo7OYo8OYo9OYo:OYo;OYoOYo?OYo@OYoAOYoBOYoCOYoDOYoEOYoFOYoGOYoHOYoIOYoJOYoKOYoLOYoOYq?OYq@OYqOYqOYqOYqOYqOYqOYqOYqOYqOYqOYqOYqOYrOYrOYr$OYr%OYrOYsOYsOYtOYt*OYt+OYthOYtOYtOYtOYuOYvOYvOYwOYwOYwOYwOYwOYx OYx OYx OYx OYy4OYyOYz;OYz}qOY?}rOY@}sOYA}tOYB}uOYC}vOYD}wOYE}xOYF}yOYG}zOYH}{OYI}|OYJ}}OYK}~OYL}OYM}OYN}OYO}OYP}OYQ}OYR}OYS}OYT}OYU}OYV}OYW}OYX}OYY}OYZ}OY[}OY\}OY]}OY^}OY_}OY`}OYa}OYb}OYc}OYd}OYe}OYf}OYg}OYh}OYi}OYj}OYk}OYl}OYm}OYn}OYo}OYp}OYq}OYr}OYs}OYt}OYu}OYv}OYw}OYx}OYy}OYz}OY{}OY|}OY}}OY~}OY}OY}OY}OY}OY}OY}OY}OY}OY}OY}OY}OY}OY}OY}OY}OY}OY}OY}OY}OY}OY}OY}OY}OY}OY}OY}OY}OY}OY}OY}OY}OY}OY}OY}OY}OY~OY~OY~OY~OY~OY~-OY~.OY~/OY~0OY~1OY~2OY~3OY~4OY~5OY~6OY~7OY~8OY~9OY~:OY~;OY~OY~?OY~@OY~AOY~BOY~COY~DOY~EOY~FOY~GOY~HOY~IOY~JOY~KOY~LOY~MOY~NOY~OOY~POY~QOY~ROY~SOY~TOY~UOY~VOY~WOY~XOY~YOY~ZOY~[OY~\OY~]OY~^OY~_OY~`OY~aOY~bOY~cOY~dOY~eOY~fOY~gOY~hOY~OY~OY~OY~OY~OY~OY~OY~OY~OY~OY~OY~OY~OY~OY~OY~OY~OY~OY~OY~OY~OY~OY~OY~OY~OY~OY~OY~OY~OY~OY~OY~OY~OY~OY~OY~OY~OY~OY ~OY ~OY ~OY ~OY ~OY~OY~OY~OY~OY~OY~OY~OY~OY~OY~OY~OY~OY~OY~OY~OY~OY~OY~OY ~OY!~OY"~OY#~OY$~OY%~OY&~OY'~OY(~OY)~OY*OY+OY,OY-OY.OY/OY0OY1OY2OY3 OY4 OY5 OY6 OY7 OY8OY9OY:OY;OY<OY=OY>OY?OY@OYAOYBOYCOYDOYEOYFOYGOYHOYIOYJ OYK!OYL"OYM#OYN$OYO%OYP&OYQ'OYR(OYS)OYT*OYU+OYV,OYW-OYX.OYY/OYZ0OY[YOY\ZOY][OY^\OY_]OY`^OYa_OYb`OYcaOYdbOYecOYfdOYgeOYhfOYigOYjhOYkiOYljOYmkOYnlOYomOYpnOYqoOYrpOYsqOYtrOYusOYvtOYwuOYxvOYywOYzxOY{yOY|zOY}{OY~|OY}OY~OYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYO,ԽYSY-SY.SY/SY0SY1SY2SY3SY4SY 5SY 6SY 7SY 8SY 9SY:SY;SYSY?SY@SYASYBSYCSYDSYESYFSYGSYHSYISYJSYKSY LSY!MSY"NSY#OSY$PSY%QSY&RSY'SSY(TSY)USY*VSY+WSY,XSY-YSY.ZSY/[SY0\SY1]SY2^SY3_SY4`SY5aSY6bSY7cSY8dSY9eSY:fSY;gSY<hSY=iSY>jSY?kSY@lSYAmSYBnSYCoSYDpSYEqSYFrSYGsSYHtSYIuSYJvSYKwSYLxSYMySYNzSYO{SYP|SYQ}SYR~SYSSYTSYUSYVSYWSYXSYYSYZSY[SY\SY]SY^SY_SY`SYaSYbSYcSYdSYeSYfSYgSYhSYiSYjSYkSYlSYmSYnSYoSYpSYqSYrSYsSYtSYuSYvSYwSYxSYySYzSY{SY|SY}SY~SYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSY SY SY SY SY SYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSY SY!SY"SY#SY$SY%SY&SY'SY(SY)SY*SY+SY,SY-SY.SY/SY0SY1SY2SY3SY4SY 5SY 6SY 7SY 8SY 9SY:SY;SYSY?SY@SYASYBSYCSYDSYESYFSYGSYHSYISYJSYKSY LSY!MSY"NSY#OSY$PSY%QSY&RSY'SSY(TSY)USY*VSY+WSY,XSY-YSY.ZSY/[SY0\SY1]SY2^SY3_SY4`SY5aSY6bSY7cSY8dSY9eSY:fSY;gSY<hSY=iSY>jSY?kSY@lSYAmSYBnSYCoSYDpSYEqSYFrSYGsSYHtSYIuSYJvSYKwSYLxSYMySYNzSYO{SYP|SYQ}SYR~SYSSYTSYUSYVSYWSYXSYYSYZSY[SY\SY]SY^SY_SY`SYaSYbSYcSYdSYeSYfSYgSYhSYiSYjSYkSYlSYmSYnSYoSYpSYqSYrSYsSYtSYuSYvSYwSYxSYySYzSY{SY|SY}SY~SYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSY SY SY SY SY SYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSY SY!SY"SY#SY$SY%SY&SY'SY(SY)SY*SY+SY,SY-SY.SY/SY0SY1SY2SY3SY4SY 5SY 6SY 7SY 8SY 9SY:SY;SYSY?SY@SYASYBSYCSYDSYESYFSYGSYHSYISYJSYKSY LSY!MSY"NSY#OSY$PSY%QSY&RSY'SSY(TSY)USY*VSY+WSY,XSY-YSY.ZSY/[SY0\SY1]SY2^SY3_SY4`SY5aSY6bSY7cSY8dSY9eSY:fSY;gSY<hSY=iSY>jSY?kSY@lSYAmSYBnSYCoSYDpSYEqSYFrSYGsSYHtSYIuSYJvSYKwSYLxSYMySYNzSYO{SYP|SYQ}SYR~SYSSYTSYUSYVSYWSYXSYYSYZSY[SY\SY]SY^SY_SY`SYaSYbSYcSYdSYeSYfSYgSYhSYiSYjSYkSYlSYmSYnSYoSYpSYqSYrSYsSYtSYuSYvSYwSYxSYySYzSY{SY|SY}SY~SYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSY SY SY SY SY SYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSY SY!SY"SY#SY$SY%SY&SY'SY(SY)SY*SY+SY,SY-SY.SY/SY0SY1SY2SY3SY4SY 5SY 6SY 7SY 8SY 9SY:SY;SYSY?SY@SYASYBSYCSYDSYESYFSYGSYHSYISYJSYKSY LSY!MSY"NSY#OSY$PSY%QSY&RSY'SSY(TSY)USY*VSY+WSY,XSY-YSY.ZSY/[SY0\SY1]SY2^SY3_SY4`SY5aSY6bSY7cSY8dSY9eSY:fSY;gSY<hSY=iSY>jSY?kSY@lSYAmSYBnSYCoSYDpSYEqSYFrSYGsSYHtSYIuSYJvSYKwSYLxSYMySYNzSYO{SYP|SYQ}SYR~SYSSYTSYUSYVSYWSYXSYYSYZSY[SY\SY]SY^SY_SY`SYaSYbSYcSYdSYeSYfSYgSYhSYiSYjSYkSYlSYmSYnSYoSYpSYqSYrSYsSYtSYuSYvSYwSYxSYySYzSY{SY|SY}SY~SYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYS, YOY'uOY'vOY'OY'OY'OY'OY'OY'OY 'OY 'OY (=OY (>OY ([OY(\OY(OY(OY(OY(OY(OY(OY(OY(OY(OY(OY(OY(OY(OY)OY)OY)OY)#OY )$OY!)%OY")hOY#)OY$)OY%)OY&*OY'*OY(*OY)*OY**OY+*OY,*OY-*OY.+OY/+OY0+]OY1+^OY2+_OY3+{OY4+|OY5+}OY6+OY7+OY8+OY9+OY:,%OY;,&OY<,COY=,DOY>,OY?,OY@,OYA,OYB,OYC,OYD- OYE- OYF-QOYG-ROYH-oOYI-pOYJ-OYK-OYL-OYM-OYN.OYO.OYP.7OYQ.8OYR.|OYS.OYT.OYU.OYV.OYW/OYX/EOYY/FOYZ/GOY[/OOY\/POY]/QOY^/mOY_/nOY`/oOYa/OYb/OYc/OYd/OYe/OYf/OYg0 OYh0OYi0+OYj0,OYk0qOYl0rOYm0sOYn0OYo0OYp0OYq0OYr0OYs0OYt0OYu19OYv1:OYw1VOYx1OYy1OYz1OY{1OY|1OY}1OY~2OY2OY2dOY2OY2OY2OY2OY2OY2OY2OY3-OY3.OY3/OY30OY3KOY3LOY3MOY3NOY3OY3OY3OY3OY4OY4OY4YOY4ZOY4wOY4xOY4OY4OY4OY4OY5!OY5"OY5?OY5@OY5OY5OY5OY5OY5OY6OY6MOY6NOY6jOY6OY6OY6OY6OY7OY72OY7yOY7zOY7{OY7|OY7}OY7OY7OY7OY7OY7OY7OY7OY7OY7OY7OY7OY8@OY8^OY8OY8OY8OY8OY9 OY9 OY9'OY9(OY9mOY9nOY9OY9OY9OY9OY9OY9OY9OY9OY:5OY:6OY:7OY:8OY:SOY:TOY:UOY:VOY:OY:OY:OY:OY:OY:OY:OY:OY:OY:OY:OY:OY:OY:OY:OY:OY:OY:OY:OY:OY:OY:OY:OY;OY;OY;OY;OY;OY;OY;OY;aOY;bOY;~OY>*OY>+OY>,OY>-OYCOYCOYCOYCOYCOYCOYCOY COY COY COY COY D(OYD)OYD*OYD+OYD,OYD-OYD.OYD/OYD0OYD1OYD2OYFoOYFpOYFqOYFrOYFsOYFtOYFuOYFOY FOY!FOY"FOY#FOY$FOY%FOY&FOY'FOY(MOY)MOY*MOY+O,YSYSYSYSYSYSYSYSYSY  SY  SY  SY  SY  SYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSY  SY!!SY""SY##SY$$SY%%SY&&SY''SY((SY))SY**SY++SY,,SY--SY..SY//SY00SY11SY22SY33SY44SY55SY66SY77SY88SY99SY::SY;;SY<>SY??SY@@SYAASYBBSYCCSYDDSYEESYFFSYGGSYHHSYIISYJJSYKKSYLLSYMMSYNNSYOOSYPPSYQQSYRRSYSSSYTTSYUUSYVVSYWWSYXXSYYYSYZZSY[[SY\\SY]]SY^^SY__SY``SYaaSYbbSYccSYddSYeeSYffSYggSYhhSYiiSYjjSYkkSYllSYmmSYnnSYooSYppSYqqSYrrSYssSYttSYuuSYvvSYwwSYxxSYyySYzzSY{{SY||SY}}SY~~SYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSY  SY  SY  SY  SY  SYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSY  SY!!SY""SY##SY$$SY%%SY&&SY''SY((SY))SY**SY+S+ YOYOYOYOYOYOYOYOYOY  OY  OY  OY  OY  OYOYOYOYOYOYOYOYOYOYOYOYOYOYOYO,YSY-SY.SY/SY0SY1SY2SY3SY4SY 5SY 6SY 7SY 8SY 9SY:SY;SYSY?SY@SYASYBSYCSYDSYESYFSYGSYSH( YOYOYOYOYOYOYOYOYOY OY OY OY OY OYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOY OY!OY"OY#OY$OY%OY&OY'OI(YSYJSYKSYLSYMSYNSYOSYPSYQSY RSY SSY TSY USY VSYWSYXSYYSYZSY[SY\SY]SY^SY_SY`SYaSYbSYcSYdSYeSYfSYgSYhSY iSY!jSY"kSY#lSY$mSY%nSY&oSY'Sp YOYOqYSYSrjhove/classes/edu/harvard/hul/ois/jhove/module/tiff/TiffFXBase.class0000644000707400001440000000255411510702105024600 0ustar garyusers2P )* + ,- ./ .0 .1 .2 .3 .4 .5 .6 ,7 ,8 ,9@QR?:;GLOBALPARAMETERSIFDI ConstantValueSTRIPROWCOUNTS/ cmInchTab[[I()VCodesatisfiesClass2(Ledu/harvard/hul/ois/jhove/module/tiff/TiffIFD;)Z StackMapTable<perCMtoPerInch(I)I ![I = >?< @A BC DA EF GH IH JK LK MA NF OA0edu/harvard/hul/ois/jhove/module/tiff/TiffFXBase1edu/harvard/hul/ois/jhove/module/tiff/TiffProfile+edu/harvard/hul/ois/jhove/NisoImageMetadata-edu/harvard/hul/ois/jhove/module/tiff/TiffIFDgetNisoImageMetadata/()Ledu/harvard/hul/ois/jhove/NisoImageMetadata;getImageLength()JgetStripOffsets()[J getImageWidthgetBitsPerSample()[I getColorSpace()IgetCompressionSchemegetXSamplingFrequency&()Ledu/harvard/hul/ois/jhove/Rational;getYSamplingFrequencygetNewSubfileType getPageNumber getT4Options! !"oc**Y YPOYOSY YOYOSY Y&OYbOSY YMOYOSY YOYOS#$"r+M,L,E, :, 3, +, #, ,+ +, +% Y&'("K/=**2N-.-.kc% jhove/classes/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassB.class0000644000707400001440000000246711510702105026163 0ustar garyusers2L  ! "# $ %& %' %( %) %* %+ %, %- %. / 0 123()VCodesatisfiesThisProfile.(Ledu/harvard/hul/ois/jhove/module/tiff/IFD;)Z StackMapTable#45 Baseline bilevel (Class B) 67-edu/harvard/hul/ois/jhove/module/tiff/TiffIFD 894 :; <; => ?; @> AB CB DE FG HI JI KI7edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassB1edu/harvard/hul/ois/jhove/module/tiff/TiffProfile+edu/harvard/hul/ois/jhove/NisoImageMetadata[I _profileTextLjava/lang/String;getNisoImageMetadata/()Ledu/harvard/hul/ois/jhove/NisoImageMetadata; getImageWidth()JgetImageLengthgetStripOffsets()[JgetRowsPerStripgetStripByteCountsgetXSamplingFrequency&()Ledu/harvard/hul/ois/jhove/Rational;getYSamplingFrequencygetSamplesPerPixel()IgetBitsPerSample()[IsatisfiesCompression4(Ledu/harvard/hul/ois/jhove/module/tiff/TiffIFD;[I)Z"satisfiesPhotometricInterpretationsatisfiesResolutionUnit1 **++M,N-5- *- #- - - ---: .*, YOYOYO*, YOYO*, YOYOYO F jhove/classes/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassF.class0000644000707400001440000000444711510702105026167 0ustar garyusers2w &01 %23 4 56 57 58 59 : 5; %< = 5> ? @ %A %B %C %D %E 5F %G %H 5I 5J KL 5MNO()VCodesatisfiesThisProfile.(Ledu/harvard/hul/ois/jhove/module/tiff/IFD;)Z StackMapTable3PQ '(Class F RS-edu/harvard/hul/ois/jhove/module/tiff/TiffIFD TUP VW XY ZW [Y \] ^_ `a bc dc eW fW ga hi ja ka la m] na op qW rst uW vs7edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassF1edu/harvard/hul/ois/jhove/module/tiff/TiffProfile+edu/harvard/hul/ois/jhove/NisoImageMetadata[I _profileTextLjava/lang/String;getNisoImageMetadata/()Ledu/harvard/hul/ois/jhove/NisoImageMetadata;getImageLength()JgetStripOffsets()[JgetRowsPerStripgetStripByteCounts getPageNumber()[IgetScanningSoftware()Ljava/lang/String;satisfiesCompression4(Ledu/harvard/hul/ois/jhove/module/tiff/TiffIFD;[I)Z getFillOrder()IgetCompressionScheme getT4Options getT6OptionssatisfiesImageWidthsatisfiesNewSubfileType3(Ledu/harvard/hul/ois/jhove/module/tiff/TiffIFD;J)ZsatisfiesResolutionUnitsatisfiesXResolutionsatisfiesYResolutiongetBitsPerSample"satisfiesPhotometricInterpretationsatisfiesSamplesPerPixel3(Ledu/harvard/hul/ois/jhove/module/tiff/TiffIFD;I)Z getImageWidthgetXSamplingFrequency&()Ledu/harvard/hul/ois/jhove/Rational;"edu/harvard/hul/ois/jhove/RationaltoLonggetYSamplingFrequency1%&'() ***+) ++M,N-*- #- - , - *, YOYO,6 -6.,7   ,7,7*, YOYOY OY OY OY@OY OYOYO*,*, YOYO*, YOYOY,OYOYO*, YbOYOYdOYOY,OYOYO-: .*, YOYO*, -!6-"#6-$#6  SS S @̠* "Ƞ  dȠA Ƞ9,  ,'   ,5 ;-.3F *6/ ojhove/classes/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassG.class0000644000707400001440000000247611510702105026170 0ustar garyusers2L  ! "# $ %& %' %( %) %* %+ %, %- %. / 0 123()VCodesatisfiesThisProfile.(Ledu/harvard/hul/ois/jhove/module/tiff/IFD;)Z StackMapTable#45 Baseline grayscale (Class G) 67-edu/harvard/hul/ois/jhove/module/tiff/TiffIFD 894 :; <; => ?; @> AB CB DE FG HI JI KI7edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassG1edu/harvard/hul/ois/jhove/module/tiff/TiffProfile+edu/harvard/hul/ois/jhove/NisoImageMetadata[I _profileTextLjava/lang/String;getNisoImageMetadata/()Ledu/harvard/hul/ois/jhove/NisoImageMetadata; getImageWidth()JgetImageLengthgetStripOffsets()[JgetRowsPerStripgetStripByteCountsgetXSamplingFrequency&()Ledu/harvard/hul/ois/jhove/Rational;getYSamplingFrequencygetSamplesPerPixel()IgetBitsPerSample()[IsatisfiesCompression4(Ledu/harvard/hul/ois/jhove/module/tiff/TiffIFD;[I)Z"satisfiesPhotometricInterpretationsatisfiesResolutionUnit1 **++M,N-5- *- #- - - ---:..*, YOYO*, YOYO*, YOYOYO F jhove/classes/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassIT.class0000644000707400001440000000151211510702105026304 0ustar garyusers2.         !()VCodesatisfiesThisProfile.(Ledu/harvard/hul/ois/jhove/module/tiff/IFD;)Z StackMapTable" -edu/harvard/hul/ois/jhove/module/tiff/TiffIFD #$" %& '& () *) +, -,8edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassIT1edu/harvard/hul/ois/jhove/module/tiff/TiffProfile+edu/harvard/hul/ois/jhove/NisoImageMetadatagetNisoImageMetadata/()Ledu/harvard/hul/ois/jhove/NisoImageMetadata; getImageWidth()JgetImageLengthgetStripOffsets()[JgetStripByteCountsgetXSamplingFrequency&()Ledu/harvard/hul/ois/jhove/Rational;getYSamplingFrequency! *hI++M,N-*--- - -   ;jhove/classes/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITBL.class0000644000707400001440000000236311510702105026527 0ustar garyusers2>     !" # $ % & ' ( )*+()VCodesatisfiesThisProfile.(Ledu/harvard/hul/ois/jhove/module/tiff/IFD;)Z StackMapTable,- TIFF/IT-BL (ISO 12639:1998) ./ -edu/harvard/hul/ois/jhove/module/tiff/TiffIFD 01, 23 45 67 85 9: ;7 <: =7:edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITBL8edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassIT+edu/harvard/hul/ois/jhove/NisoImageMetadata[I _profileTextLjava/lang/String;getNisoImageMetadata/()Ledu/harvard/hul/ois/jhove/NisoImageMetadata;getBitsPerSample()[IsatisfiesCompression3(Ledu/harvard/hul/ois/jhove/module/tiff/TiffIFD;I)Z"satisfiesPhotometricInterpretation4(Ledu/harvard/hul/ois/jhove/module/tiff/TiffIFD;[I)ZsatisfiesSamplesPerPixelgetImageColorValue()IsatisfiesImageColorIndicatorgetBackgroundColorValue!satisfiesBackgroundColorIndicator1 ***++M,N-: .*, *, YOYO *, ,  YO: YOYOYO:*, , YO: YOYOYO:*,     jhove/classes/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITBLP1.class0000644000707400001440000000330311510702105026723 0ustar garyusers2^ %& ' () * + ,- . / 0 1 2 3 4 5 6 7 ,8 9 ,: ; < =>?()VCodesatisfiesThisProfile.(Ledu/harvard/hul/ois/jhove/module/tiff/IFD;)Z StackMapTable)@A TIFF/IT-BL/P1 (ISO 12639:1998) BC  -edu/harvard/hul/ois/jhove/module/tiff/TiffIFD DE FG@ HI JK LK MK NK OP QR SP TR UP VW XW YW ZW [W \W ]W()VCodesatisfiesThisProfile.(Ledu/harvard/hul/ois/jhove/module/tiff/IFD;)Z StackMapTable+, TIFF/IT-BP (ISO 12639:1998) -. -edu/harvard/hul/ois/jhove/module/tiff/TiffIFD /0+ 12 34 56 74 89 :6 ;9 <6:edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITBP8edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassIT+edu/harvard/hul/ois/jhove/NisoImageMetadata[I _profileTextLjava/lang/String;getNisoImageMetadata/()Ledu/harvard/hul/ois/jhove/NisoImageMetadata;getBitsPerSample()[IsatisfiesCompression3(Ledu/harvard/hul/ois/jhove/module/tiff/TiffIFD;I)Z"satisfiesPhotometricInterpretation4(Ledu/harvard/hul/ois/jhove/module/tiff/TiffIFD;[I)ZsatisfiesSamplesPerPixelgetImageColorValue()IsatisfiesImageColorIndicatorgetBackgroundColorValue!satisfiesBackgroundColorIndicator1 ***++M,N-: .*,*, YOYO *, ,  YO: YOYOYO:*, ,  YO: YOYOYO:*,     jhove/classes/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITBPP1.class0000644000707400001440000000313211510702105026727 0ustar garyusers2V "# $ %& ' ( ) * + , - . / 0 1 23 4 25 6 7 89:()VCodesatisfiesThisProfile.(Ledu/harvard/hul/ois/jhove/module/tiff/IFD;)Z StackMapTable&;< TIFF/IT-BP/P1 (ISO 12639:1998) => -edu/harvard/hul/ois/jhove/module/tiff/TiffIFD ?@ AB CD ED FD GH IJ KH LJ MH NO; PO QO RO SO TO UO()VCodesatisfiesThisProfile.(Ledu/harvard/hul/ois/jhove/module/tiff/IFD;)Z StackMapTable&;< TIFF/IT-BP/P2 (ISO 12639:1998) => -edu/harvard/hul/ois/jhove/module/tiff/TiffIFD ?@ AB CD EF GF HD IJ KD LJ MD NO; PO QO RO SO TO UO()VCodesatisfiesThisProfile.(Ledu/harvard/hul/ois/jhove/module/tiff/IFD;)Z StackMapTable!12 TIFF/IT-CT (ISO 12639:1998) 34 -edu/harvard/hul/ois/jhove/module/tiff/TiffIFD 561 78 9: ;: <= >? @: ABCMYK2 CD E::edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITCT8edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassIT+edu/harvard/hul/ois/jhove/NisoImageMetadatajava/lang/String _profileTextLjava/lang/String;getNisoImageMetadata/()Ledu/harvard/hul/ois/jhove/NisoImageMetadata;getBitsPerSample()[IgetSamplesPerPixel()IgetSamplingFrequencyUnit"satisfiesPhotometricInterpretation3(Ledu/harvard/hul/ois/jhove/module/tiff/TiffIFD;I)ZsatisfiesCompression4(Ledu/harvard/hul/ois/jhove/module/tiff/TiffIFD;[I)Z getInkSetgetColorSequence()Ljava/lang/String;equals(Ljava/lang/Object;)ZgetNumberOfInks1 ***++M,N-- - *, *, YOY O , 6 ,:  -6,6   jhove/classes/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITCTP1.class0000644000707400001440000000330711510702105026740 0ustar garyusers2^ $% & '( ) * +, - . / 0 1 2 3 4 5 6 +7 8 +9 : ; <=>()VCodesatisfiesThisProfile.(Ledu/harvard/hul/ois/jhove/module/tiff/IFD;)Z StackMapTable(?@ TIFF/IT-CT/P1 (ISO 12639:1998) AB -edu/harvard/hul/ois/jhove/module/tiff/TiffIFD CD EF? GH IJ KJ LJ MJ NJ OP QR SR TU VW XW YW ZW [W \W ]W()VCodesatisfiesThisProfile.(Ledu/harvard/hul/ois/jhove/module/tiff/IFD;)Z StackMapTable(?@ TIFF/IT-CT/P2 (ISO 12639:2003) AB -edu/harvard/hul/ois/jhove/module/tiff/TiffIFD CD EF? GH IJ KL ML NL OL PJ QR SR TU VW XW YW ZW [W \W ]W()VCodesatisfiesThisProfile.(Ledu/harvard/hul/ois/jhove/module/tiff/IFD;)Z StackMapTable#34  TIFF/IT-FP 56 -edu/harvard/hul/ois/jhove/module/tiff/TiffIFD 78 9:3 ;< => ?@ A@ BC DC EF GF HF IJ:edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITFP8edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassIT+edu/harvard/hul/ois/jhove/NisoImageMetadata[I _profileTextLjava/lang/String;getImageDescription()Ljava/lang/String;getNisoImageMetadata/()Ledu/harvard/hul/ois/jhove/NisoImageMetadata;getBitsPerSample()[IgetNewSubfileType()J"satisfiesPhotometricInterpretation4(Ledu/harvard/hul/ois/jhove/module/tiff/TiffIFD;[I)ZsatisfiesSamplesPerPixelsatisfiesCompression3(Ledu/harvard/hul/ois/jhove/module/tiff/TiffIFD;I)ZsatisfiesPlanarConfiguration getColorSpace()I getInkSetgetNumberOfInkssatisfiesDotRange4(Ledu/harvard/hul/ois/jhove/module/tiff/TiffIFD;II)Z1 **X "*++M,,N-:j.[.R.. .0'... ., 7  *, YOYOYOYO *, YOYOYO *,*,-6,6,6  *,$ '!* /jhove/classes/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITFPP1.class0000644000707400001440000000351711510702105026742 0ustar garyusers2d '( ) *+ , - . / 01 2 3 4 5 6 7 8 09 : ; < 0= > 0? @AB()VCodesatisfiesThisProfile.(Ledu/harvard/hul/ois/jhove/module/tiff/IFD;)Z StackMapTable+CD TIFF/IT-FP/P1 (ISO 12639:1998) EF !"-edu/harvard/hul/ois/jhove/module/tiff/TiffIFD GH IJ KJ LMC NO PQ RS TS UV WS XV YV Z[ \[ ]^ _H `H aH bH cH()VCodesatisfiesThisProfile.(Ledu/harvard/hul/ois/jhove/module/tiff/IFD;)Z StackMapTable)?@ TIFF/IT-FP/P2 (ISO 12639:2003) AB  -edu/harvard/hul/ois/jhove/module/tiff/TiffIFD CD EF? GH IJ KL ML NO PL QO RO ST UT VW XD YD ZD [D \D()VCodesatisfiesThisProfile.(Ledu/harvard/hul/ois/jhove/module/tiff/IFD;)Z StackMapTable"34 TIFF/IT-HC (ISO 12639:1998) 56 -edu/harvard/hul/ois/jhove/module/tiff/TiffIFD 783 9: ;< => ?> @> A< BCCMYK4 DE F< G<:edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITHC8edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassIT+edu/harvard/hul/ois/jhove/NisoImageMetadatajava/lang/String _profileTextLjava/lang/String;getNisoImageMetadata/()Ledu/harvard/hul/ois/jhove/NisoImageMetadata;getBitsPerSample()[IgetSamplesPerPixel()I"satisfiesPhotometricInterpretation3(Ledu/harvard/hul/ois/jhove/module/tiff/TiffIFD;I)ZsatisfiesCompressionsatisfiesPlanarConfiguration getInkSetgetColorSequence()Ljava/lang/String;equals(Ljava/lang/Object;)ZgetNumberOfInksgetTransparencyIndicator1 ** *+++M,N- -*, *, *, , 6 ,:  -6,6 ,6 %  jhove/classes/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITHCP1.class0000644000707400001440000000313111510702105026717 0ustar garyusers2X #$ % &' ( ) *+ , - . / 0 1 2 3 4 *5 6 *7 8 9:;()VCodesatisfiesThisProfile.(Ledu/harvard/hul/ois/jhove/module/tiff/IFD;)Z StackMapTable'<= TIFF/IT-HC/P1 (ISO 12639:1998) >? -edu/harvard/hul/ois/jhove/module/tiff/TiffIFD @A BC< DE FA GA HA IJ KL ML NO PL QR SR TR UR VR WR()VCodesatisfiesThisProfile.(Ledu/harvard/hul/ois/jhove/module/tiff/IFD;)Z StackMapTable%89 TIFF/IT-HC/P2 (ISO 12639:2003) :; -edu/harvard/hul/ois/jhove/module/tiff/TiffIFD <=8 >? @A BA CA DE FG HG IJ KG LM NM OM PM QM()VCodesatisfiesThisProfile.(Ledu/harvard/hul/ois/jhove/module/tiff/IFD;)Z StackMapTable#456 TIFF/IT-LW (ISO 12639:1998) 78 -edu/harvard/hul/ois/jhove/module/tiff/TiffIFD 9: ;<4 =: >? @? A? BC DECMYK6 FG HC IC:edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITLW8edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassIT+edu/harvard/hul/ois/jhove/NisoImageMetadata[Ijava/lang/String _profileTextLjava/lang/String; getColorTable()[IgetNisoImageMetadata/()Ledu/harvard/hul/ois/jhove/NisoImageMetadata;getBitsPerSamplesatisfiesSamplesPerPixel3(Ledu/harvard/hul/ois/jhove/module/tiff/TiffIFD;I)Z"satisfiesPhotometricInterpretationsatisfiesCompression getInkSet()IgetColorSequence()Ljava/lang/String;equals(Ljava/lang/Object;)ZgetSamplesPerPixelgetNumberOfInks1 ** *+++M,,N-:.*, *, *, , 6 ,:  -6,6 &   jhove/classes/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITLWP1.class0000644000707400001440000000263711510702105026761 0ustar garyusers2K  ! "# $ % &' ( ) * + , - . / 0 &123()VCodesatisfiesThisProfile.(Ledu/harvard/hul/ois/jhove/module/tiff/IFD;)Z StackMapTable#45 TIFF/IT-LW/P1 (ISO 12639:1998) 67 -edu/harvard/hul/ois/jhove/module/tiff/TiffIFD 89 :;4 <9 => ?@ AB C> D> EF GF HF IF JF()VCodesatisfiesThisProfile.(Ledu/harvard/hul/ois/jhove/module/tiff/IFD;)Z StackMapTable!01 TIFF/IT-LW/P2 (ISO 12639:2003) 23 -edu/harvard/hul/ois/jhove/module/tiff/TiffIFD 45 670 85 9: ;< =: >: ?@ A@ B@ C@()VCodesatisfiesThisProfile.(Ledu/harvard/hul/ois/jhove/module/tiff/IFD;)Z StackMapTable+ TIFF/IT-MP (ISO 12639:1998) ,- -edu/harvard/hul/ois/jhove/module/tiff/TiffIFD ./+ 01 23 43 56 76 83 96 :6:edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITMP8edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassIT+edu/harvard/hul/ois/jhove/NisoImageMetadata _profileTextLjava/lang/String;getNisoImageMetadata/()Ledu/harvard/hul/ois/jhove/NisoImageMetadata;getBitsPerSample()[IsatisfiesCompression4(Ledu/harvard/hul/ois/jhove/module/tiff/TiffIFD;[I)Z"satisfiesPhotometricInterpretationgetCompressionScheme()IgetRasterPaddingsatisfiesImageColorIndicatorgetImageColorIndicatorgetImageColorValue1 ***+++M,N-*, YOYO *, YOYO - *, 6  *, YOYO ,6 , /jhove/classes/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITMPP1.class0000644000707400001440000000334211510702105026745 0ustar garyusers2^ $% & '( ) * +, - . / 0 1 2 3 4 5 6 +7 8 +9 : ; <=>()VCodesatisfiesThisProfile.(Ledu/harvard/hul/ois/jhove/module/tiff/IFD;)Z StackMapTable(?@ TIFF/IT-MP/P1 (ISO 12639:1998) AB -edu/harvard/hul/ois/jhove/module/tiff/TiffIFD CD EF? GH IJ KJ LJ MJ NO PQ RS TS UH VW XW YW ZW [W \W ]W()VCodesatisfiesThisProfile.(Ledu/harvard/hul/ois/jhove/module/tiff/IFD;)Z StackMapTable(?@ TIFF/IT-MP/P2 (ISO 12639:2003) AB -edu/harvard/hul/ois/jhove/module/tiff/TiffIFD CD EF? GH IJ KL ML NL OJ PQ RS TS UH VW XW YW ZW [W \W ]W()VCodesatisfiesThisProfile.(Ledu/harvard/hul/ois/jhove/module/tiff/IFD;)Z StackMapTable"345 TIFF/IT-SD (ISO 12639:2003) 67 -edu/harvard/hul/ois/jhove/module/tiff/TiffIFD 893 :; <= >= ?@ A= B@ CD EFCMYK5 GHYMCK:edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITSD8edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassIT+edu/harvard/hul/ois/jhove/NisoImageMetadata[Ijava/lang/String _profileTextLjava/lang/String;getNisoImageMetadata/()Ledu/harvard/hul/ois/jhove/NisoImageMetadata;getBitsPerSample()[IsatisfiesResolutionUnit4(Ledu/harvard/hul/ois/jhove/module/tiff/TiffIFD;[I)ZsatisfiesSamplesPerPixel"satisfiesPhotometricInterpretation3(Ledu/harvard/hul/ois/jhove/module/tiff/TiffIFD;I)ZsatisfiesCompressionsatisfiesPlanarConfiguration getInkSet()IgetColorSequence()Ljava/lang/String;equals(Ljava/lang/Object;)Z1 ***+++M,N-:.*, YOYO*, YOYO *, *, YOYOYO *, , 6,:    jhove/classes/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITSDP2.class0000644000707400001440000000276611510702105026751 0ustar garyusers2V "# $ %& ' () * + , - . / 0 1 2 (3 4 (5 6 7 89:()VCodesatisfiesThisProfile.(Ledu/harvard/hul/ois/jhove/module/tiff/IFD;)Z StackMapTable&;< TIFF/IT-SD/P2 (ISO 12639:2003) => -edu/harvard/hul/ois/jhove/module/tiff/TiffIFD ?@; AB CD ED FG HD IG JK LK MG NO PO QO RO SO TO UO()VCodesatisfiesThisProfile.(Ledu/harvard/hul/ois/jhove/module/tiff/IFD;)Z StackMapTable&:;  Baseline palette-color (Class P) <=-edu/harvard/hul/ois/jhove/module/tiff/TiffIFD >?: @A BA CD EA FD GH IH JK LK MK NK OK PQ RS TQ7edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassP1edu/harvard/hul/ois/jhove/module/tiff/TiffProfile+edu/harvard/hul/ois/jhove/NisoImageMetadata[I _profileTextLjava/lang/String;getNisoImageMetadata/()Ledu/harvard/hul/ois/jhove/NisoImageMetadata; getImageWidth()JgetImageLengthgetStripOffsets()[JgetRowsPerStripgetStripByteCountsgetXSamplingFrequency&()Ledu/harvard/hul/ois/jhove/Rational;getYSamplingFrequencygetColormapBitCodeValue()[IgetColormapRedValuegetColormapGreenValuegetColormapBlueValuegetBitsPerSamplesatisfiesCompression4(Ledu/harvard/hul/ois/jhove/module/tiff/TiffIFD;[I)Z"satisfiesPhotometricInterpretation3(Ledu/harvard/hul/ois/jhove/module/tiff/TiffIFD;I)ZsatisfiesResolutionUnit1 **++M,N-Q- F- ?- 4- -- &---- --:..*, YOYO*,*, YOYOYO b !" jhove/classes/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassR.class0000644000707400001440000000256511510702105026202 0ustar garyusers2M  ! "# $ %& %' %( %) %* %+ %, %- . / %0 123()VCodesatisfiesThisProfile.(Ledu/harvard/hul/ois/jhove/module/tiff/IFD;)Z StackMapTable#45 Baseline RGB (Class R) 67-edu/harvard/hul/ois/jhove/module/tiff/TiffIFD 894 :; <; => ?; @> AB CB DE FG HI JK LG7edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassR1edu/harvard/hul/ois/jhove/module/tiff/TiffProfile+edu/harvard/hul/ois/jhove/NisoImageMetadata[I _profileTextLjava/lang/String;getNisoImageMetadata/()Ledu/harvard/hul/ois/jhove/NisoImageMetadata; getImageWidth()JgetImageLengthgetStripOffsets()[JgetRowsPerStripgetStripByteCountsgetXSamplingFrequency&()Ledu/harvard/hul/ois/jhove/Rational;getYSamplingFrequencygetBitsPerSample()[IsatisfiesCompression4(Ledu/harvard/hul/ois/jhove/module/tiff/TiffIFD;[I)Z"satisfiesPhotometricInterpretation3(Ledu/harvard/hul/ois/jhove/module/tiff/TiffIFD;I)ZgetSamplesPerPixel()IsatisfiesResolutionUnit1 **++M,N-5- *- #- - - --:%.. .*, YOYO*,-*, YOYOYO F, jhove/classes/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassY.class0000644000707400001440000000271511510702105026206 0ustar garyusers2O  ! "# $ %& %' %( %) %* %+ %, %- . %/ 0 1 234()VCodesatisfiesThisProfile.(Ledu/harvard/hul/ois/jhove/module/tiff/IFD;)Z StackMapTable#56 Extension YCbCr (Class Y) 78-edu/harvard/hul/ois/jhove/module/tiff/TiffIFD 9:5 ;< =< >? @< A? BC DC EF GH IJ KL MH NL7edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassY1edu/harvard/hul/ois/jhove/module/tiff/TiffProfile+edu/harvard/hul/ois/jhove/NisoImageMetadata[I _profileTextLjava/lang/String;getNisoImageMetadata/()Ledu/harvard/hul/ois/jhove/NisoImageMetadata; getImageWidth()JgetImageLengthgetStripOffsets()[JgetRowsPerStripgetStripByteCountsgetXSamplingFrequency&()Ledu/harvard/hul/ois/jhove/Rational;getYSamplingFrequencygetReferenceBlackWhite'()[Ledu/harvard/hul/ois/jhove/Rational;satisfiesSamplesPerPixel3(Ledu/harvard/hul/ois/jhove/module/tiff/TiffIFD;I)ZgetBitsPerSample()[IsatisfiesCompression4(Ledu/harvard/hul/ois/jhove/module/tiff/TiffIFD;[I)Z"satisfiesPhotometricInterpretationsatisfiesResolutionUnit1 **++M,N-<- 1- *- - - - -*,-:%.. .*, YOYOYO*,*, YOYOYO M , jhove/classes/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileEP.class0000644000707400001440000000457211510702105025317 0ustar garyusers2 -67 ,89 : ;< ;= ;> ? ;@ ;A ;B ;C ;D ;E F ;G H I ;J ;K ;L ;M ;N ;O ;P Q ,R ,S ;T# ;U ;V W X ;Y ;Z ;[ ;\ ;] ;^_`()VCodesatisfiesThisProfile.(Ledu/harvard/hul/ois/jhove/module/tiff/IFD;)Z StackMapTable9a ./TIFF/EP (ISO 12234-2:2001) bc-edu/harvard/hul/ois/jhove/module/tiff/TiffIFD dea fg hg ij kl mn on pl ql rl sl tl ul vl wl xy zg {y |g }g ~y y g j j j 3edu/harvard/hul/ois/jhove/module/tiff/TiffProfileEP1edu/harvard/hul/ois/jhove/module/tiff/TiffProfile+edu/harvard/hul/ois/jhove/NisoImageMetadata _profileTextLjava/lang/String;getNisoImageMetadata/()Ledu/harvard/hul/ois/jhove/NisoImageMetadata; getImageWidth()JgetImageLengthgetBitsPerSample()[IgetImageDescription()Ljava/lang/String;getXSamplingFrequency&()Ledu/harvard/hul/ois/jhove/Rational;getYSamplingFrequencygetScannerManufacturergetScannerModelNamegetScannerModelNumbergetScanningSoftware getCopyrightgetDateTimeCreated getDateTimegetTIFFEPStandardIDgetStripOffsets()[JgetRowsPerStripgetStripByteCounts getTileWidth getTileLengthgetTileOffsetsgetTileByteCountsgetNewSubfileTypesatisfiesResolutionUnit4(Ledu/harvard/hul/ois/jhove/module/tiff/TiffIFD;[I)ZsatisfiesOrientation getColorSpace()IgetPlanarConfiguration getSensorgetCFARepeatPatternDim getCFAPatterngetSamplesPerPixelgetYCbCrCoefficients'()[Ledu/harvard/hul/ois/jhove/Rational;getYCbCrSubSamplinggetYCbCrPositioninggetReferenceBlackWhitegetCompressionScheme!,-./0 **120N  ++M,N-i- ^- W, P- I- B-;- ---&, ,-, ,-- -)--- -,7  *, YOYOYO*, YOYOYOYOYOY O- 6!! -"6 -#6 !,$,%-&6  !     "-'-(-) -*-+6      33 P45)#() #"jhove/classes/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileDLF.class0000644000707400001440000000213111510702105025405 0ustar garyusers2/        !()VCodesatisfiesThisProfile.(Ledu/harvard/hul/ois/jhove/module/tiff/IFD;)Z StackMapTablehasMinimumResolution4(Ledu/harvard/hul/ois/jhove/module/tiff/TiffIFD;DD)Z"# -edu/harvard/hul/ois/jhove/module/tiff/TiffIFD $% &'" () *) +,# -.4edu/harvard/hul/ois/jhove/module/tiff/TiffProfileDLF1edu/harvard/hul/ois/jhove/module/tiff/TiffProfile+edu/harvard/hul/ois/jhove/NisoImageMetadata"edu/harvard/hul/ois/jhove/Rational"satisfiesPhotometricInterpretation4(Ledu/harvard/hul/ois/jhove/module/tiff/TiffIFD;[I)ZgetNisoImageMetadata/()Ledu/harvard/hul/ois/jhove/NisoImageMetadata;getXSamplingFrequency&()Ledu/harvard/hul/ois/jhove/Rational;getYSamplingFrequencygetSamplingFrequencyUnit()ItoDouble()D!   * @%++M*, YOYO    e+:::6  ( (%  jhove/classes/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileDLFBW.class0000644000707400001440000000152711510702105025646 0ustar garyusers2%    @@ ()VCodesatisfiesThisProfile.(Ledu/harvard/hul/ois/jhove/module/tiff/IFD;)Z StackMapTable [DLF Benchmark for Faithful Digital Reproductions of Monographs and Serials: black and white -edu/harvard/hul/ois/jhove/module/tiff/TiffIFD ! "! #$6edu/harvard/hul/ois/jhove/module/tiff/TiffProfileDLFBW4edu/harvard/hul/ois/jhove/module/tiff/TiffProfileDLF _profileTextLjava/lang/String;satisfiesCompression4(Ledu/harvard/hul/ois/jhove/module/tiff/TiffIFD;[I)Z"satisfiesPhotometricInterpretationhasMinimumResolution4(Ledu/harvard/hul/ois/jhove/module/tiff/TiffIFD;DD)Z1  **hK++M*, YOYO*, YOYO*,   jhove/classes/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileDLFColor.class0000644000707400001440000000215711510702105026414 0ustar garyusers25      ! "#@r@ $%&()VCodesatisfiesThisProfile.(Ledu/harvard/hul/ois/jhove/module/tiff/IFD;)Z StackMapTable' QDLF Benchmark for Faithful Digital Reproductions of Monographs and Serials: color ()-edu/harvard/hul/ois/jhove/module/tiff/TiffIFD *+ ,+ -+ ./0 12 349edu/harvard/hul/ois/jhove/module/tiff/TiffProfileDLFColor4edu/harvard/hul/ois/jhove/module/tiff/TiffProfileDLF[I _profileTextLjava/lang/String;satisfiesCompression4(Ledu/harvard/hul/ois/jhove/module/tiff/TiffIFD;[I)Z"satisfiesPhotometricInterpretationsatisfiesSamplesPerPixelgetNisoImageMetadata/()Ledu/harvard/hul/ois/jhove/NisoImageMetadata;+edu/harvard/hul/ois/jhove/NisoImageMetadatagetBitsPerSample()[IhasMinimumResolution4(Ledu/harvard/hul/ois/jhove/module/tiff/TiffIFD;DD)Z1 **++M*, YOYOYO*, YOYO*, YO, N6--.*,    jhove/classes/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileDLFGray.class0000644000707400001440000000215211510702105026233 0ustar garyusers25      ! "#@r@ $%&()VCodesatisfiesThisProfile.(Ledu/harvard/hul/ois/jhove/module/tiff/IFD;)Z StackMapTable' _DLF Benchmark for Faithful Digital Reproductions of Monographs and Serials: grayscale and white ()-edu/harvard/hul/ois/jhove/module/tiff/TiffIFD *+ ,+ -+ ./0 12 348edu/harvard/hul/ois/jhove/module/tiff/TiffProfileDLFGray4edu/harvard/hul/ois/jhove/module/tiff/TiffProfileDLF[I _profileTextLjava/lang/String;satisfiesCompression4(Ledu/harvard/hul/ois/jhove/module/tiff/TiffIFD;[I)Z"satisfiesPhotometricInterpretationsatisfiesSamplesPerPixelgetNisoImageMetadata/()Ledu/harvard/hul/ois/jhove/NisoImageMetadata;+edu/harvard/hul/ois/jhove/NisoImageMetadatagetBitsPerSample()[IhasMinimumResolution4(Ledu/harvard/hul/ois/jhove/module/tiff/TiffIFD;DD)Z1 **v++M*, YOYOYO*, YOYO*, YO, N- -.*,   jhove/classes/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileFXC.class0000644000707400001440000000422411510702105025425 0ustar garyusers2a $% & '( ) * + , - . / 0 1 23 45 26 27 8 29 2: ; 2<=>()VCodesatisfiesThisProfile.(Ledu/harvard/hul/ois/jhove/module/tiff/IFD;)Z StackMapTable(?=@ TIFF-FX (Profile C) AB CD-edu/harvard/hul/ois/jhove/module/tiff/TiffIFD EF GH IH JK LK MH NH OH PQ? RST UV WS XY Z[ \] ^V _Y `]4edu/harvard/hul/ois/jhove/module/tiff/TiffProfileFXC0edu/harvard/hul/ois/jhove/module/tiff/TiffFXBase+edu/harvard/hul/ois/jhove/NisoImageMetadata)edu/harvard/hul/ois/jhove/module/tiff/IFD _profileTextLjava/lang/String; _mimeClassIsatisfiesClass2(Ledu/harvard/hul/ois/jhove/module/tiff/TiffIFD;)ZsatisfiesImageWidth4(Ledu/harvard/hul/ois/jhove/module/tiff/TiffIFD;[I)ZsatisfiesSamplesPerPixelsatisfiesCompression3(Ledu/harvard/hul/ois/jhove/module/tiff/TiffIFD;I)Z"satisfiesPhotometricInterpretationsatisfiesResolutionUnitsatisfiesXResolutionsatisfiesFillOrdergetNisoImageMetadata/()Ledu/harvard/hul/ois/jhove/NisoImageMetadata;getXSamplingFrequency&()Ledu/harvard/hul/ois/jhove/Rational;"edu/harvard/hul/ois/jhove/RationaltoLong()JgetYSamplingFrequencygetSamplingFrequencyUnit()IperCMtoPerInch(I)IgetBitsPerSample()[I getImageWidth getIndexedgetColormapRedValue!***7++M*,*, Y`OYOYOYOYOY OY OY OY OY @OY OY O*, YOYO*, *, *, YOYOYO *, YOYO*, YdOYOY,OYO *, YOYO ,N-7-- *7-.6  -6d+S,{`~}s ~U K @~- #~, -#  [ #!4@K"# !@K"# !@K"# !@K"# !jhove/classes/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileFXF.class0000644000707400001440000000341511510702105025431 0ustar garyusers2t 8BC 7D 7EF 7G H IJ 7K 7L IM N IO PQ IR IS 7T IUdb ,  @ VW()VCodesatisfiesThisProfile.(Ledu/harvard/hul/ois/jhove/module/tiff/IFD;)Z StackMapTableFXY 9:TIFF-FX (Profile F) Z[ \]-edu/harvard/hul/ois/jhove/module/tiff/TiffIFD ^_ `aX bc de fe gh ij klm nj ol ph qr sj4edu/harvard/hul/ois/jhove/module/tiff/TiffProfileFXF0edu/harvard/hul/ois/jhove/module/tiff/TiffFXBase+edu/harvard/hul/ois/jhove/NisoImageMetadata[I _profileTextLjava/lang/String; _mimeClassIsatisfiesClass2(Ledu/harvard/hul/ois/jhove/module/tiff/TiffIFD;)ZgetNisoImageMetadata/()Ledu/harvard/hul/ois/jhove/NisoImageMetadata;getBitsPerSample()[IsatisfiesCompression4(Ledu/harvard/hul/ois/jhove/module/tiff/TiffIFD;[I)ZsatisfiesFillOrdergetCompressionScheme()I getT6Options()JgetXSamplingFrequency&()Ledu/harvard/hul/ois/jhove/Rational;"edu/harvard/hul/ois/jhove/RationaltoLonggetYSamplingFrequencygetSamplingFrequencyUnitperCMtoPerInch(I)I getImageWidth!789:;***<=; ++M*,,N-:.*, YOYO *, YOYO - , 6- 7-7-*7*7-7  K 9 ' *!  !  #6%*%! ' )  +6- /*/! 1 3  56>, ?@A0,jhove/classes/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileFXJ.class0000644000707400001440000000334711510702105025441 0ustar garyusers2q 7AB 6C 6DE 6F G HI HJ 6K L HM NO HP HQ 6R HSdb ,  @ TU()VCodesatisfiesThisProfile.(Ledu/harvard/hul/ois/jhove/module/tiff/IFD;)Z StackMapTableEVW 89TIFF-FX (Profile J) XY Z[-edu/harvard/hul/ois/jhove/module/tiff/TiffIFD \] ^_V `a bc de fg hij kg li mc no pg4edu/harvard/hul/ois/jhove/module/tiff/TiffProfileFXJ0edu/harvard/hul/ois/jhove/module/tiff/TiffFXBase+edu/harvard/hul/ois/jhove/NisoImageMetadata[I _profileTextLjava/lang/String; _mimeClassIsatisfiesClass2(Ledu/harvard/hul/ois/jhove/module/tiff/TiffIFD;)ZgetNisoImageMetadata/()Ledu/harvard/hul/ois/jhove/NisoImageMetadata;getBitsPerSample()[IgetCompressionScheme()IsatisfiesFillOrder4(Ledu/harvard/hul/ois/jhove/module/tiff/TiffIFD;[I)Z getT6Options()JgetXSamplingFrequency&()Ledu/harvard/hul/ois/jhove/Rational;"edu/harvard/hul/ois/jhove/RationaltoLonggetYSamplingFrequencygetSamplingFrequencyUnitperCMtoPerInch(I)I getImageWidth!6789:***;<: ++M*,,N-:.- 6 *, YOYO , 6- 7- 7 -*7* 7 -7   K  9  '  * !    "6$* $! & (  *6,  .* .! 0 2  46=/ >?@0,jhove/classes/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileFXL.class0000644000707400001440000000330011510702105025430 0ustar garyusers2W  ! " #$ % & ' ( ) * + , -. /0 -1 2 3 -4 5 -678()VCodesatisfiesThisProfile.(Ledu/harvard/hul/ois/jhove/module/tiff/IFD;)Z StackMapTable$9 TIFF-FX (Profile L) :; <=-edu/harvard/hul/ois/jhove/module/tiff/TiffIFD >? @A BC DA EA FA GA HI9 JKL MN OK PA QA RS TU VS4edu/harvard/hul/ois/jhove/module/tiff/TiffProfileFXL0edu/harvard/hul/ois/jhove/module/tiff/TiffFXBase+edu/harvard/hul/ois/jhove/NisoImageMetadata _profileTextLjava/lang/String; _mimeClassIsatisfiesClass2(Ledu/harvard/hul/ois/jhove/module/tiff/TiffIFD;)ZsatisfiesImageWidth4(Ledu/harvard/hul/ois/jhove/module/tiff/TiffIFD;[I)ZsatisfiesCompression3(Ledu/harvard/hul/ois/jhove/module/tiff/TiffIFD;I)Z"satisfiesPhotometricInterpretationsatisfiesResolutionUnitsatisfiesSamplesPerPixelsatisfiesXResolutiongetNisoImageMetadata/()Ledu/harvard/hul/ois/jhove/NisoImageMetadata;getXSamplingFrequency&()Ledu/harvard/hul/ois/jhove/Rational;"edu/harvard/hul/ois/jhove/RationaltoLong()JgetYSamplingFrequencysatisfiesIndexedsatisfiesFillOrdergetBitsPerSample()[I getIndexed()IgetColormapRedValue!***W++M*,*, Y`OYOYOYOYOY OY OY OY OY @OY OY O*, *, YOYOY O *, YOYOYO *, YOYOYO *, YdOYOY,OYO , N--*, YOYO*, YOYO-.6, - [ #jhove/classes/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileFXM.class0000644000707400001440000000323611510702105025441 0ustar garyusers2Z &' ( )* + , - . / 0 1 2 3 45 6 7 48 9 4:;<()VCodesatisfiesThisProfile.(Ledu/harvard/hul/ois/jhove/module/tiff/IFD;)Z StackMapTable*=> TIFF-FX (Profile M) ?@ AB-edu/harvard/hul/ois/jhove/module/tiff/TiffIFD CD EF GH IJ KH LH MH NH OH= PQ RQ ST UV WX YQ4edu/harvard/hul/ois/jhove/module/tiff/TiffProfileFXM0edu/harvard/hul/ois/jhove/module/tiff/TiffFXBase+edu/harvard/hul/ois/jhove/NisoImageMetadata[I _profileTextLjava/lang/String; _mimeClassIsatisfiesClass2(Ledu/harvard/hul/ois/jhove/module/tiff/TiffIFD;)ZgetNisoImageMetadata/()Ledu/harvard/hul/ois/jhove/NisoImageMetadata;satisfiesImageWidth4(Ledu/harvard/hul/ois/jhove/module/tiff/TiffIFD;[I)ZsatisfiesNewSubfileType4(Ledu/harvard/hul/ois/jhove/module/tiff/TiffIFD;[J)ZsatisfiesCompressionsatisfiesSamplesPerPixelsatisfiesResolutionUnit"satisfiesPhotometricInterpretationsatisfiesFillOrdergetBitsPerSample()[I getImageLayergetStripRowCounts()[JgetRowsPerStrip()J getIndexed()IgetColormapRedValue!*** !t++M*,,N*, Y`OYOYOYOYOY OY OY OY OY @OY OY O*, Y PY P *, YOYOYOY OY O*, YOYOYO*, YOYOYO*, YOYOYOYOY O*, YOYO-.6,:. .,-, -"" #`$#!%jhove/classes/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileFXS.class0000644000707400001440000000300011510702105025434 0ustar garyusers2c #-. "/ "01 "2 34 5 67 68 69 6: ; 6< 6= 6> ?@ 6Abd BCD()VCodesatisfiesThisProfile.(Ledu/harvard/hul/ois/jhove/module/tiff/IFD;)Z StackMapTable1EF $%TIFF-FX (Profile S) GH IJ-edu/harvard/hul/ois/jhove/module/tiff/TiffIFD KLM NO PQE RS TU VW XW YW Z[ \W ]^_ `[ a^ b[4edu/harvard/hul/ois/jhove/module/tiff/TiffProfileFXS0edu/harvard/hul/ois/jhove/module/tiff/TiffFXBase+edu/harvard/hul/ois/jhove/NisoImageMetadata[I _profileTextLjava/lang/String; _mimeClassIsatisfiesClass2(Ledu/harvard/hul/ois/jhove/module/tiff/TiffIFD;)Z)edu/harvard/hul/ois/jhove/module/tiff/IFD isBigEndian()ZgetNisoImageMetadata/()Ledu/harvard/hul/ois/jhove/NisoImageMetadata;getBitsPerSample()[IgetStripOffsets()[JgetSamplingFrequencyUnit()IgetCompressionScheme getFillOrder getImageWidth()JgetSamplesPerPixelgetXSamplingFrequency&()Ledu/harvard/hul/ois/jhove/Rational;"edu/harvard/hul/ois/jhove/RationaltoLonggetYSamplingFrequency getT4Options!"#$%&***'(& ++M*,+,N- :.- - 6 - , ---7-7 ,7    )& *+,  %%jhove/classes/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileGeoTIFF.class0000644000707400001440000000123611510702105026170 0ustar garyusers2!     ()VCodesatisfiesThisProfile.(Ledu/harvard/hul/ois/jhove/module/tiff/IFD;)Z StackMapTable Baseline GeoTIFF 1.0 -edu/harvard/hul/ois/jhove/module/tiff/TiffIFD   8edu/harvard/hul/ois/jhove/module/tiff/TiffProfileGeoTIFF1edu/harvard/hul/ois/jhove/module/tiff/TiffProfile _profileTextLjava/lang/String;getGeoKeyDirectoryTag()[IgetModelTiepointTag()[DgetModelTransformationTag1    **  rH++M,,>,6    @ @ jhove/classes/edu/harvard/hul/ois/jhove/module/tiff/TiffProfilePagemaker6.class0000644000707400001440000000333211510702105026766 0ustar garyusers2Z &' () * +, +- +. +/ +0 +1 +2 +3 +4 5 +6 7 +8 +9 : ;<=()VCodesatisfiesThisProfile.(Ledu/harvard/hul/ois/jhove/module/tiff/IFD;)Z StackMapTable)>? Adobe PageMaker 6.0 @A-edu/harvard/hul/ois/jhove/module/tiff/TiffIFD BC> DE FE GH IH JH KE LE ME NH OP QR SR TR UV WX YR;edu/harvard/hul/ois/jhove/module/tiff/TiffProfilePagemaker61edu/harvard/hul/ois/jhove/module/tiff/TiffProfile+edu/harvard/hul/ois/jhove/NisoImageMetadata[I _profileTextLjava/lang/String;getNisoImageMetadata/()Ledu/harvard/hul/ois/jhove/NisoImageMetadata;getImageLength()J getImageWidthgetStripOffsets()[JgetTileOffsetsgetStripByteCountsgetRowsPerStrip getTileWidth getTileLengthgetTileByteCountssatisfiesCompression4(Ledu/harvard/hul/ois/jhove/module/tiff/TiffIFD;[I)Z getColorSpace()I getInkSetgetSamplesPerPixelgetBitsPerSample()[I getInkNames()[Ljava/lang/String;getNumberOfInks1 ** !Y ++M,N-7- - 6- 6  ,- - 7 )--- -*, YOYOYOYOYOYO-6+%  ,6 -6    /      -:  o >6   0  .!  .  .  . Χ%6     .  , ,"P" ##$ @ @   ((2 %.jhove/classes/edu/harvard/hul/ois/jhove/module/tiff/TiffProfilePhotoshop.class0000644000707400001440000000135411510702105026771 0ustar garyusers2%     ()VCodesatisfiesThisProfile.(Ledu/harvard/hul/ois/jhove/module/tiff/IFD;)Z StackMapTable Adobe Photoshop 'Advanced TIFF' -edu/harvard/hul/ois/jhove/module/tiff/TiffIFD   !" #$:edu/harvard/hul/ois/jhove/module/tiff/TiffProfilePhotoshop1edu/harvard/hul/ois/jhove/module/tiff/TiffProfile+edu/harvard/hul/ois/jhove/NisoImageMetadata _profileTextLjava/lang/String;getNisoImageMetadata/()Ledu/harvard/hul/ois/jhove/NisoImageMetadata;getCompressionScheme()IgetImageSourceData()[I1    **  U4++M,N-6 , jhove/classes/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileRFC1314.class0000644000707400001440000000263411510702105025733 0ustar garyusers2R !" # $% & '( ') * '+ ', '- '. '/ '0 1 2 3 456()VCodesatisfiesThisProfile.(Ledu/harvard/hul/ois/jhove/module/tiff/IFD;)Z StackMapTable%78 RFC 1314 9: ;<-edu/harvard/hul/ois/jhove/module/tiff/TiffIFD =>7 ?@ A@ B@ C@ DE FE GH IH JK LM NM OP QM8edu/harvard/hul/ois/jhove/module/tiff/TiffProfileRFC13141edu/harvard/hul/ois/jhove/module/tiff/TiffProfile+edu/harvard/hul/ois/jhove/NisoImageMetadata[I _profileTextLjava/lang/String; _mimeClassIgetNisoImageMetadata/()Ledu/harvard/hul/ois/jhove/NisoImageMetadata; getImageWidth()JgetImageLengthgetNewSubfileTypegetRowsPerStripgetStripByteCounts()[JgetStripOffsetsgetXSamplingFrequency&()Ledu/harvard/hul/ois/jhove/Rational;getYSamplingFrequencygetBitsPerSample()[IsatisfiesCompression4(Ledu/harvard/hul/ois/jhove/module/tiff/TiffIFD;[I)Z"satisfiesPhotometricInterpretationsatisfiesSamplesPerPixel3(Ledu/harvard/hul/ois/jhove/module/tiff/TiffIFD;I)ZsatisfiesResolutionUnit1***++M,N-@- 5, *- - -- --: .*, YOYOYO*, YOYO*,*, YOYO Q  jhove/classes/edu/harvard/hul/ois/jhove/module/tiff/TiffTags.class0000644000707400001440000001751111510702105024365 0ustar garyusers23 LY KZ K[ \]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-. Iis"$%'()*+\]^     ?\O !"#$%&'()*+,-./012345Z[\/0 TAG_LABELS[Ljava/lang/String; TAG_INDEX[I()VCodetagName(I)Ljava/lang/String; StackMapTable^ QR OP MN1 2Ujava/lang/StringNewSubFileType SubFileType ImageWidth ImageLength BitsPerSample CompressionPhotometricInterpretation Thresholding CellWidth CellLength FillOrder DocumentNameImageDescriptionMakeModel StripOffsets OrientationSamplesPerPixel RowsPerStripStripByteCountsMinSampleValueMaxSampleValue XResolution YResolutionPlanarConfigurationPageName XPosition YPosition FreeOffsetsFreeByteCountsGrayResponseUnitGrayResponseCurve Group3Options Group4OptionsResolutionUnit PageNumberColorResponseUnitTransferFunctionSoftwareDateTimeArtist HostComputer Predictor WhitePointPrimaryChromacitiesColorMap HalftoneHints TileWidth TileLength TileOffsetsTileByteCounts BadFaxLines CleanFaxDataConsecutiveBadFaxLinesSubIFDsInkSetInkNames NumberOfInksDotRange TargetPrinter ExtraSamples SampleFormatSMinSampleValueSMaxSampleValue TransferRangeClipPathXClipPathUnitsYClipPathUnitsIndexed JPEGTablesOPIProxyGlobalParametersIFD ProfileType FaxProfile CodingMethods VersionYear ModeNumberJPEGProcJPEGInterchangeFormatJPEGInterchangeFormatLengthJPEGRestartIntervalJPEGLosslessPredictorsJPEGPointTransforms JPEGQTables JPEGDCTables JPEGACTablesYCbCrCoefficientsYCbCrSubsamplingYCbCrPositioningReferenceBlackWhiteStripRowCountsImageIDMatteingDataType ImageDepth TileDepthCFARepeatPatternDim CFAPattern BatteryLevel Copyright ExposureTimeFnumberIPTC/NAAModelPixelScaleTagIntergraphMatrixTagModelTiepointTagSite ColorSequence IT8Header RasterPaddingBitsPerRunLengthBitsPerExtendedRunLength ColorTableImageColorIndicatorBackgroundColorIndicatorImageColorValueBackgroundColorValuePixelInensityRangeTransparencyIndicatorColorCharacterizationHCUsageModelTransformationTagImageResourcesExifIFDInterColourProfile ImageLayerGeoKeyDirectoryTagGeoDoubleParamsTagGeoAsciiParamsTagExposureProgramSpectralSensitivityGPSInfoISOSpeedRatingsOECF InterlaceTimeZoneOffset SelfTimerMode FaxRecvParams FaxSubAddress FaxRecvTimeDateTimeOriginalCompressedBitsPerPixelShutterSpeedValue ApertureValueBrightnessValueExposureBiasValueMaxApertureValueSubjectDistance MeteringMode LightSourceFlash FocalLength FlashEnergySpatialFrequencyResponseNoiseFocalPlaneXResolutionFocalPlaneYResolutionFocalPlaneResolutionUnit ImageNumberSecurityClassification ImageHistorySubjectLocation ExposureIndexTIFF/EPStandardID SensingMethodStoNitsImageSourceDataInteroperabilityIFD Annotations DNGVersionDNGBackwardVersionUniqueCameraModelLocalizedCameraModel CFAPlaneColor CFALayoutLinearizationTableBlackLevelRepeatDim BlackLevelBlackLevelDeltaHBlackLevelDeltaV WhiteLevel DefaultScaleDefaultCropOriginDefaultCropSize ColorMatrix1 ColorMatrix2CameraCalibration1CameraCalibration2ReductionMatrix1ReductionMatrix2 AnalogBalance AsShotNeutral AsShotWhiteXYBaselineExposure BaselineNoiseBaselineSharpnessBayerGreenSplitLinearResponseLimitCameraSerialNumberLensInfoChromaBlurRadiusAntiAliasStrength ShadowScaleDNGPrivateDataMakerNoteSafetyCalibrationIlluminant1CalibrationIlluminant2BestQualityScale.edu/harvard/hul/ois/jhove/module/tiff/TiffTagsjava/lang/Objectjava/lang/IntegertoString!KLMNOPQRS* TUSeBL=>.=  2LL+V W XRS  нYSYSYSY SY SY SY SY SYSY SY SY SY SY SYSYSYSYSYSYSYSYSYSYSYSYSY SY!SY"SY#SY$SY%SY &SY!'SY"(SY#)SY$*SY%+SY&,SY'-SY(.SY)/SY*0SY+1SY,2SY-3SY.4SY/5SY06SY17SY28SY39SY4:SY5;SY6SY9?SY:@SY;ASY<BSY=CSY>DSY?ESY@FSYAGSYBHSYCISYDJSYEKSYFLSYGMSYHNSYIOSYJPSYKQSYLRSYMSSYNTSYOUSYPVSYQWSYRXSYSYSYTZSYU[SYV\SYW]SYX^SYY_SYZ`SY[aSY\bSY]cSY^dSY_eSY`fSYagSYbhSYciSYdjSYekSYflSYgmSYhnSYioSYjpSYkqSYlrSYmsSYntSYouSYpvSYqwSYrxSYsySYtzSYu{SYv|SYw}SYx~SYySYzSY{SY|SY}SY~SYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSм YOYOYOYOYOYOYOYOYOY  OY  OY  OY OY OYOYOYOYOYOYOYOYOYOYOYOYOYOYOY OY!OY"OY#OY $OY!%OY"(OY#)OY$,OY%-OY&1OY'2OY(;OY)OY,?OY-@OY.AOY/BOY0COY1DOY2EOY3FOY4GOY5HOY6JOY7LOY8MOY9NOY:POY;QOY<ROY=SOY>TOY?UOY@VOYAWOYBXOYCYOYDZOYE[OYF_OYGOYHOYIOYJOYKOYLOYMOYNOYOOYPOYQOYROYSOYTOYU OYVOYWOYXOYYOYZ/OY[OY\OY]OY^OY_OY`OYaOYbOYcOYdOYeOYfOYgOYhOYiOYjOYkOYlOYmOYnOYoOYpOYqOYrOYsOYtOYuOYvOYwOYxOYyOYzOY{OY|OY}OY~OYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOY OY OY OY OY OYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYOY OY!OY"OY#OY$OY%OY&OY'OY(OY)OY*OY+OY,OY-OY.OY/OY0OY1OY2OY3OY4OY5OY6OY7OY8OY9OY:OY;OYOY?OY@OYAOYBOYCOYDOYEOYFOYGOYHOYIOYJOjhove/classes/edu/harvard/hul/ois/jhove/module/tiff/TiffProfileExif.class0000644000707400001440000000430211510702106025676 0ustar garyusers2 '789:; &<= 7 &>? @ AB AC &D AE AF AG AH AI AJ AK AL AM AN O &P Q R S TUV WXY &Z[\ profileText[Ljava/lang/String;_exifIFDProfile:Ledu/harvard/hul/ois/jhove/module/tiff/TiffProfileExifIFD;()VCodesatisfiesThisProfile.(Ledu/harvard/hul/ois/jhove/module/tiff/IFD;)Z StackMapTable?]^_8 ,-java/lang/StringExif 2.0Exif 2.1 (JEIDA-49-1998)Exif 2.2 (JEITA CP-3451) ()8edu/harvard/hul/ois/jhove/module/tiff/TiffProfileExifIFD *+-edu/harvard/hul/ois/jhove/module/tiff/TiffIFD `a] bc dc ef gh ih jk lh mk no pq ro sq to uh vw xy z{ /0_ |}0220 ~02100200 5edu/harvard/hul/ois/jhove/module/tiff/TiffProfileExif1edu/harvard/hul/ois/jhove/module/tiff/TiffProfile+edu/harvard/hul/ois/jhove/NisoImageMetadata[I-edu/harvard/hul/ois/jhove/module/tiff/ExifIFDgetNisoImageMetadata/()Ledu/harvard/hul/ois/jhove/NisoImageMetadata;getXSamplingFrequency&()Ledu/harvard/hul/ois/jhove/Rational;getYSamplingFrequencysatisfiesCompression3(Ledu/harvard/hul/ois/jhove/module/tiff/TiffIFD;I)Z getImageWidth()JgetImageLengthgetStripOffsets()[JgetRowsPerStripgetStripByteCountsgetSamplesPerPixel()IgetBitsPerSample()[I getColorSpacegetYCbCrSubSamplinggetYCbCrPositioninggetJpegInterchangeFormatsatisfiesResolutionUnit4(Ledu/harvard/hul/ois/jhove/module/tiff/TiffIFD;[I)ZisFirst()Z getTheExifIFD1()Ledu/harvard/hul/ois/jhove/module/tiff/ExifIFD;getExifVersion()Ljava/lang/String;equals(Ljava/lang/Object;)Z _profileTextLjava/lang/String;1&'()*+,-.3'**YSYSYS*Y /0.N+ + M, N- - *,-'--- ---:%.. .-6 - -,*, YOYO,`,:*  :6!" 6 #" 6$"6**2%15 237 ,4 5 6 jhove/classes/edu/harvard/hul/ois/jhove/module/tiff/TiffIFD.class0000644000707400001440000015551111510702106024075 0ustar garyusers2 {                                          ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~                                                                        !"#$ %&'() ; * ;+, ;-./ 0 1 o2345 I67 89 8:; 8< 8=>? 8@ 8ABC 8D 8EF 8G 8HI JK _LM 8N 8OPQ 8R 8STU 8V 8WXYZ[\ 8] 8^_` 8a 8bc 8d 8efghijklmnopqrstuvwxy 8z 8{|} 8~ 8      #  L                 _             i "             ;%     \IO  s) o o'     (               +    $       *         o\ Z[!"#$%&'()*+,-./0123   45  I !" #$ % &' &( &) *+,  -. -/ 01 23 o4 o5 6789:;<= >?@ABCDEFGHIJKLMN OPQRSTU VWXYZ[ \]^ _`ab cdef ghijklmnopqrstu vwxyz{|}~NEWSUBFILETYPEI ConstantValue SUBFILETYPE IMAGEWIDTH IMAGELENGTH BITSPERSAMPLE COMPRESSIONPHOTOMETRICINTERPRETATION THRESHHOLDING CELLWIDTH CELLLENGTH  FILLORDER  DOCUMENTNAME IMAGEDESCRIPTIONMAKEMODEL STRIPOFFSETS ORIENTATIONSAMPLESPERPIXEL ROWSPERSTRIPSTRIPBYTECOUNTSMINSAMPLEVALUEMAXSAMPLEVALUE XRESOLUTION YRESOLUTIONPLANARCONFIGURATIONPAGENAME XPOSITION YPOSITION FREEOFFSETS FREEBYTECOUNTS!GRAYRESPONSEUNIT"GRAYRESPONSECURVE# T4OPTIONS$ T6OPTIONS%RESOLUTIONUNIT( PAGENUMBER)TRANSFERFUNCTION-SOFTWARE1DATETIME2ARTIST; HOSTCOMPUTER< PREDICTOR= WHITEPOINT>PRIMARYCHROMATICITIES?COLORMAP@ HALFTONEHINTSA TILEWIDTHB TILELENGTHC TILEOFFSETSDTILEBYTECOUNTSEINKSETLINKNAMESM NUMBEROFINKSNDOTRANGEP TARGETPRINTERQ EXTRASAMPLESR SAMPLEFORMATSSMINSAMPLEVALUETSMAXSAMPLEVALUEU TRANSFERRANGEVJPEGPROCJPEGINTERCHANGEFORMATJPEGINTERCHANGEFORMATLENGTHJPEGRESTARTINTERVALJPEGLOSSLESSPREDICTORSJPEGPOINTTRANSFORMS JPEGQTABLES JPEGDCTABLES JPEGACTABLES YCBCRCOEFFICIENTSYCBCRSUBSAMPLINGYCBCRPOSITIONINGREFERENCEBLACKWHITE COPYRIGHT FILLORDER_L[Ljava/lang/String; INDEXED_LINKSET_LJPEGLOSSLESSPREDICTORS_L JPEGPROC_LJPEGPROC_INDEX[INEWSUBFILETYPE_L OPIPROXY_L PREDICTOR_LSAMPLEFORMAT_L SUBFILETYPE_LTHRESHHOLDING_LYCBCRPOSITIONING_LYCBCRSUBSAMPLING_HORZYCBCRSUBSAMPLING_VERTSITE COLORSEQUENCE IT8HEADER RASTERPADDINGBITSPERRUNLENGTHBITSPEREXTENDEDRUNLENGTH COLORTABLEIMAGECOLORINDICATORBACKGROUNDCOLORINDICATORIMAGECOLORVALUEBACKGROUNDCOLORVALUEPIXELINTENSITYRANGETRANSPARENCYINDICATORCOLORCHARACTERIZATIONHCUSAGEBACKGROUNDCOLORINDICATOR_L HCUSAGE_LIMAGECOLORINDICATOR_LRASTERPADDING_LRASTERPADDING_INDEXTRANSPARENCYINDICATOR_LCFAREPEATPATTERNDIM CFAPATTERN BATTERYLEVEL EXPOSURETIMEFNUMBERIPTCNAA ICC_PROFILEEXPOSUREPROGRAMSPECTRALSENSITIVITYISOSPEEDRATINGSOECF INTERLACETIMEZONEOFFSET SELFTIMERMODEDATETIMEORIGINALCOMPRESSEDBITSPERPIXELSHUTTERSPEEDVALUE APERTUREVALUEBRIGHTNESSVALUEEXPOSUREBIASVALUEMAXAPERTUREVALUESUBJECTDISTANCE METERINGMODE LIGHTSOURCEFLASH FOCALLENGTH FLASHENERGYSPATIALFREQUENCYRESPONSENOISEFOCALPLANEXRESOLUTIONFOCALPLANEYRESOLUTIONFOCALPLANERESOLUTIONUNIT IMAGENUMBERSECURITYCLASSIFICATION IMAGEHISTORYSUBJECTLOCATION EXPOSUREINDEXTIFFEPSTANDARDID SENSINGMETHODEXPOSUREPROGRAM_LFLASH_L FLASH_INDEXFOCALPLANERESOLUTIONUNIT_LEXIFIFD GPSINFOIFDINTEROPERABILITYIFDGEOKEYDIRECTORYTAGGEODOUBLEPARAMSTAGGEOASCIIPARAMSTAGMODELTIEPOINTTAGMODELPIXELSCALETAGMODELTRANSFORMATIONTAGGTMODELTYPEGEOKEYGTRASTERTYPEGEOKEYGTCITATIONGEOKEYGEOGRAPHICTYPEGEOKEYGEOGCITATIONGEOKEYGEOGGEODETICDATUMGEOKEYGEOGPRIMEMERIDIANGEOKEYGEOGLINEARUNITSGEOKEYGEOGLINEARUNITSIZEGEOKEYGEOGANGULARUNITSGEOKEYGEOGANGULARUNITSIZEGEOKEYGEOGELLIPSOIDGEOKEYGEOGSEMIMAJORAXISGEOKEY GEOGSEMIMINORAXISGEOKEY GEOGINVFLATTENINGGEOKEY GEOGAZIMUTHUNITSGEOKEY GEOGPRIMEMERIDIANLONGGEOKEY PROJECTEDCSTYPEGEOKEY PCSCITATIONGEOKEY PROJECTIONGEOKEY PROJCOORDTRANSGEOKEY PROJLINEARUNITSGEOKEY PROJLINEARUNITSIZEGEOKEY PROJSTDPARALLEL1GEOKEY PROJSTDPARALLEL2GEOKEY PROJNATORIGINLONGGEOKEY PROJNATORIGINLATGEOKEY PROJFALSEEASTINGGEOKEY PROJFALSENORTHINGGEOKEY PROJFALSEORIGINLONGGEOKEY PROJFALSEORIGINLATGEOKEY PROJFALSEORIGINEASTINGGEOKEY PROJFALSEORIGINNORTHINGGEOKEY PROJCENTERLONGGEOKEY PROJCENTERLATGEOKEY PROJCENTEREASTINGGEOKEY PROJFALSEORIGINNORTHINGGEOKEY_2 PROJSCALEATNATORIGINGEOKEY PROJSCALEATCENTERGEOKEY PROJAZIMUTHANGLEGEOKEY PROJSTRAIGHTVERTPOLELONGEOKEY VERTICALCSTYPEGEOKEYVERTICALCITATIONGEOKEYVERTICALDATUMGEOKEYVERTICALUNITSGEOKEYSUBIFDSJCLIPPATHWXCLIPPATHUNITSXYCLIPPATHUNITSYINDEXEDZOPIPROXY_IMAGEID JPEGTABLES[IMAGESOURCEDATAPHOTOSHOPPROPS ANNOTATIONS BADFAXLINESF CLEANFAXDATAGCONSECUTIVEBADFAXLINESHXMPGLOBALPARAMETERSIFDSTRIPROWCOUNTS/ IMAGELAYER IMAGELAYER_L DNGVERSIONDNGBACKWARDVERSIONUNIQUECAMERAMODELLOCALIZEDCAMERAMODEL CFAPLANECOLOR CFALAYOUTLINEARIZATIONTABLEBLACKLEVELREPEATDIM BLACKLEVELBLACKLEVELDELTAHBLACKLEVELDELTAV WHITELEVEL DEFAULTSCALEDEFAULTCROPORIGINDEFAULTCROPSIZE COLORMATRIX1 COLORMATRIX2CAMERACALIBRATION1CAMERACALIBRATION2REDUCTIONMATRIX1REDUCTIONMATRIX2 ANALOGBALANCE ASSHOTNEUTRAL ASSHOTWHITEXYBASELINEEXPOSURE BASELINENOISEBASELINESHARPNESSBAYERGREENSPLITLINEARRESPONSELIMITCAMERASERIALNUMBERLENSINFOCHROMABLURRADIUSANTIALIASSTRENGTH SHADOWSCALEDNGPRIVATEDATAMAKERNOTESAFETYCALIBRATIONILLUMINANT1CALIBRATIONILLUMINANT2BESTQUALITYSCALE CFALAYOUT_LMAKERNOTESAFETY_L_niso-Ledu/harvard/hul/ois/jhove/NisoImageMetadata;_newSubfileTypeJ _subfileType_photometricInterpretation_threshholding _cellWidth _cellLength _fillOrder _documentNameLjava/lang/String;_imageDescription_minSampleValue_maxSampleValue _pageName _xPosition$Ledu/harvard/hul/ois/jhove/Rational; _yPosition _freeOffsets[J_freeByteCounts _t4Options _t6Options _pageNumber_transferFunctionZ _dateTime _predictor_halftoneHints _badFaxLines _cleanFaxDataS_consecutiveBadFaxLines_inkSet _inkNames_subIFDs _numberOfInks _dotRange_targetPrinter _sampleFormat_transferRange _clipPath_xClipPathUnits_yClipPathUnits_indexed _jpegTables _opiProxy _jpegProc_jpegInterchangeFormat_jpegInterchangeFormatLength_jpegRestartInterval_jpegLosslessPredictors_jpegPointTransforms _jpegQTables _jpegDCTables _jpegACTables _copyright_exifIFD _gpsInfoIFD_globalParametersIFD_photoshopProperties_imageSourceData_interoperabilityIFD _annotations_backgroundColorIndicator_backgroundColorValue_bitsPerExtendedRunLength_bitsPerRunLength_colorCharacterization_colorSequence _colorTable_hcUsage_imageColorIndicator_imageColorValue _it8Header_pixelIntensityRange_rasterPadding_site_transparencyIndicator_aperatureValue _batteryLevel_cfaRepeatPatternDim _cfaPattern_compressedBitsPerPixel_exposureProgram_flash_focalPlaneResolutionUnit_focalPlaneXResolution_focalPlaneYResolution_interColourProfile _imageHistory _imageNumber _interlace_iptc_isoSpeedRatings_maxAperatureValue_noise_oecf_securityClassification_selfTimerMode_shutterSpeedValue_spatialFrequencyResponse_spectralSensitivity_subjectLocation_tiffEPStandardID_timeZoneOffset_geoAsciiParamsTag_geoDoubleParamsTag[D_geoKeyDirectoryTag_modelPixelScaleTag_modelTiepointTag_modelTransformationTag_xmpProp$Ledu/harvard/hul/ois/jhove/Property;_stripRowCounts _imageLayer _theExifIFD/Ledu/harvard/hul/ois/jhove/module/tiff/ExifIFD;_theGPSInfoIFD2Ledu/harvard/hul/ois/jhove/module/tiff/GPSInfoIFD;_theInteroperabilityIFD;Ledu/harvard/hul/ois/jhove/module/tiff/InteroperabilityIFD;_theGlobalParametersIFD;Ledu/harvard/hul/ois/jhove/module/tiff/GlobalParametersIFD; _dngVersion_dngBackwardVersion_uniqueCameraModel_localizedCameraModel_cfaPlaneColor _cfaLayout_linearizationTable_blackLevelRepeatDim _blackLevel%[Ledu/harvard/hul/ois/jhove/Rational;_blackLevelDeltaH_blackLevelDeltaV _whiteLevel _defaultScale_bestQualityScale_defaultCropOrigin_defaultCropSize_calibrationIlluminant1_calibrationIlluminant2 _colorMatrix1 _colorMatrix2_cameraCalibration1_cameraCalibration2_reductionMatrix1_reductionMatrix2_analogBalance_asShotNeutral_asShotWhiteXY_baselineExposure_baselineNoise_baselineSharpness_bayerGreenSplit_linearResponseLimit_cameraSerialNumber _lensInfo_chromaBlurRadius_antiAliasStrength_dngPrivateData_makerNoteSafetyB(JLedu/harvard/hul/ois/jhove/RepInfo;Ljava/io/RandomAccessFile;Z)VCode StackMapTablegetAperatureValue&()Ledu/harvard/hul/ois/jhove/Rational;getBackgroundColorIndicator()IgetBackgroundColorValuegetBatteryLevel()Ljava/lang/String;getBitsPerExtendedRunLengthgetBitsPerRunLength getCellLength getCellWidth getCFAPattern()[IgetCFARepeatPatternDim getClipPathgetColorSequence getColorTablegetCompressedBitsPerPixel getCopyright getDateTimegetDocumentName getDotRange getExifIFD()JgetGlobalParametersIFDgetExposureProgram getFillOrdergetFocalPlaneResolutionUnitgetFocalPlaneXResolutiongetFocalPlaneYResolutiongetGeoKeyDirectoryTag getGPSInfoIFDgetImageColorIndicatorgetImageColorValuegetImageDescriptiongetImageHistory getImageLayergetImageNumbergetImageSourceDatagetPhotoshopPropertiesgetAnnotations getInkNames()[Ljava/lang/String; getInkSet getInterlacegetInteroperabilityIFDgetInterColourProfile getIndexedgetJpegInterchangeFormat getIPTCNAA()[JgetISOSpeedRatings getIT8Header getJPEGProcgetMaxAperatureValuegetModelTiepointTag()[DgetModelTransformationTaggetNewSubfileTypegetNisoImageMetadata/()Ledu/harvard/hul/ois/jhove/NisoImageMetadata;getNoisegetNumberOfInksgetOECF getPageName getPageNumbergetPixelIntensityRangegetRasterPaddinggetSecurityClasssificationgetSelfTimerModegetShutterSpeedValuegetSitegetSpatialFrequencyResponsegetSpectralSensitivitygetStripRowCounts getSubIFDsgetSubjectLocation getT4Options getT6Options getTheExifIFD1()Ledu/harvard/hul/ois/jhove/module/tiff/ExifIFD;getTheGPSInfoIFD4()Ledu/harvard/hul/ois/jhove/module/tiff/GPSInfoIFD;getTheInteroperabilityIFD=()Ledu/harvard/hul/ois/jhove/module/tiff/InteroperabilityIFD;getTheGlobalParametersIFD=()Ledu/harvard/hul/ois/jhove/module/tiff/GlobalParametersIFD;getThreshholdinggetTIFFEPStandardIDgetTimeZoneOffsetgetTransparencyIndicatorgetXClipPathUnits getXPosition getYPosition getDNGVersiongetUniqueCameraModelgetCFAPlaneColorgetAsShotNeutral'()[Ledu/harvard/hul/ois/jhove/Rational;getAsShotWhiteXY getProperty'(Z)Ledu/harvard/hul/ois/jhove/Property; ExceptionsaddNisoProperties(Ljava/util/List;Z)VaddMiscPropertiesaddTiffITPropertiesaddTiffEPPropertiesaddGeoTiffProperties3addTiffFXPropertiesaddDNGPropertiescalcColorPlanessetDNGDefaults()VidentityMatrix((I)[Ledu/harvard/hul/ois/jhove/Rational;7 lookupTag(IIJJ)VpostParseInitialization setTheExifIFD2(Ledu/harvard/hul/ois/jhove/module/tiff/ExifIFD;)VsetTheGPSInfoIFD5(Ledu/harvard/hul/ois/jhove/module/tiff/GPSInfoIFD;)VsetTheInteroperabilityIFD>(Ledu/harvard/hul/ois/jhove/module/tiff/InteroperabilityIFD;)VsetTheGlobalParametersIFD>(Ledu/harvard/hul/ois/jhove/module/tiff/GlobalParametersIFD;)VreadXMP((JJ)Ledu/harvard/hul/ois/jhove/Property;"$,1174 UV+edu/harvard/hul/ois/jhove/NisoImageMetadata U  image/tiff       big-endian little-endian                                              "# $ % . / 0 1 2 3 4 5 67 87 97 : ;7 < =7 >7 ? @ A7 B7 C7 D7 E7 F7 G7 H7 I7 J K L M N O P7 Q R S T                                !             &' () *+ ,-    java/util/LinkedList       TIFF "edu/harvard/hul/ois/jhove/PropertyNisoImageMetadata  U ImageDescription DateTimeNewSubfileType   java/lang/Long U SubfileType   DocmentNamePageName PageNumber   U XPosition  YPosition Copyright FillOrder  SampleFormat  MinSampleValue MaxSampleValueInkSet  NumberOfInksjava/lang/Integer UInkNamesDotRange  TargetPrinter  HalftoneHints CellLength CellWidth TransferFunction java/lang/Boolean U  TransferRange Threshholding Predictor  T4Options T6OptionsJPEGProc   JPEGInterchangeFormatJPEGInterchangeFormatLengthJPEGRestartInterval JPEGLosslessPredictors   JPEGPointTransforms  JPEGQTables  JPEGDCTables  JPEGACTables  JPEGTablesImageSourceDataPhotoshopProperties AnnotationsClipPathXClipPathUnitsYClipPathUnits CleanFaxData BadFaxLinesConsecutiveBadFaxLines FreeByteCounts  FreeOffsetsSite ColorTableBackgroundColorIndicator BackgroundColorValueImageColorIndicator TransparencyIndicator ImageColorValue ColorCharacterization ColorSequenceHCUsage  IT8HeaderPixelIntensityRange RasterPadding BitsPerRunLengthBitsPerExtendedRunLengthTIFFITProperties  CFARepeatPatternDim CFAPattern BatteryLevelInterColourProfile ExposureProgram SpectralSensitivityISOSpeedRatings InterlaceTimeZoneOffset SelfTimerModeCompressedBitsPerPixelShutterSpeedValueAperatureValueMaxAperatureValue  SpatialFrequencyResponseNoiseFocalPlaneXResolutionFocalPlaneYResolutionFocalPlaneResolutionUnit  ImageNumberSecurityClassification ImageHistorySubjectLocationTIFFEPSStandardID aTIFFEPPropertiesVersionRevisionjava/lang/StringBuilder  . d NumberOfKeysNULL   java/lang/Exception3edu/harvard/hul/ois/jhove/module/tiff/TiffExceptionInvalid GeoKeyDirectory tag U GTModelType   GTRasterType   GTCitationGeographicType   GeogCitationGeogGeodeticDatum  GeogPrimeMeridian  GeogPrimeMeridianLong java/lang/Double UGeogLinearUnits  GeogLinearUnitSizeGeogAngularUnits  GeogAngularUnitSize GeogEllipsoid  GeogSemiMajorAxisGeogSemiMinorAxisGeogInvFlatteningGeogAzimuthUnitsProjectedCSType   PCSCitation Projection  ProjCoordTrans  ProjLinearUnitsProjLinearUnitSizeProjStdParallel1ProjStdParallel2ProjNatOriginLongProjNatOriginLatProjFalseEastingProjFalseNorthingProjFalseOriginLongProjFalseOriginLatProjFalseOriginEastingProjFalseOriginNorthingProjCenterLong ProjCenterLatProjCenterEastingProjScaleAtNatOriginProjScaleAtCenterProjAzimuthAngleProjStraightVertPoleLongVerticalCSType  VerticalCitation VerticalDatum   VerticalUnitsGeoKeyDirectoryModelTiepointTag ModelPixelScaleTagModelTransformationTagGeoTIFFPropertiesStripRowCounts LayerType  OrdinalNumber ImageLayer  DNGVersionDNGBackwardVersionUniqueCameraModelLocalizedCameraModel CFAPlaneColor CFALayout LinearizationTableBlackLevelRepeatDim BlackLevel BlackLevelDeltaHBlackLevelDeltaV WhiteLevel DefaultScaleBestQualityScaleDefaultCropOriginDefaultCropSizeCalibrationIlluminant1CalibrationIlluminant2 ColorMatrix1 ColorMatrix2CameraCalibration1CameraCalibration2ReductionMatrix1ReductionMatrix2 AnalogBalance AsShotNeutral AsShotWhiteXYBaselineExposure BaselineNoiseBaselineSharpnessBayerGreenSplitLinearResponseLimitCameraSerialNumberLensInfoChromaBlurRadiusAntiAliasStrengthDNGPrivateDataMakerNoteSafety  DNGProperties a"edu/harvard/hul/ois/jhove/Rational U u u j U a                                         ! " # $ % &a ' ( ) * +GeoKey  , out of sequence -  . / 0 1 2 3 4 5a 6 7 8 9 : ; < = > ? @a A Bj C  Da E F G F H F I F J F K F L ? M N O P Q R S R T R U V R W X  Y F Z F [ F \ F  ] ^java/lang/String U _ ` a%edu/harvard/hul/ois/jhove/InfoMessageUndocumented TIFF tag ShadowScale (50739) U b c dUnknown TIFF IFD tag: U ejava/io/IOExceptionRead error for tag fjava/io/ByteArrayInputStream U g,edu/harvard/hul/ois/jhove/ByteArrayXMPSource U h i j k l m n o p$edu/harvard/hul/ois/jhove/XMPHandler q r s t u vorg/xml/sax/SAXException wdENC= x y  U z$java/io/UnsupportedEncodingException"Invalid or ill-formed XMP metadata high-order low-order not indexedindexed CMYKnot CMYKABCA+B+C A+((B-C)/2) B+((A-C)/2)(A+B)/2baseline sequential process$lossless process with Huffman coding6reduced-resolution image of another image in this filesingle page of multi-page image0transparency mask for another image in this file#no higher-resolution version exists higher-resolution version exists no prediction schemehorizontal differencingunsigned integersigned integerIEEE floating point undefined full-resolution imagereduced-resolution imageno dithering or halftoningordered dithering or halftoningrandomized process centeredcosited @width of chroma image is equal to width of associated luma image?width of chroma image is 1/2 the width of associated luma image?width of chroma image is 1/4 the width of associated luma image Blength of chroma image is equal to length of associated luma imageAlength of chroma image is 1/2 the length of associated luma imageAlength of chroma image is 1/4 the length of associated luma image background not definedBackground color defined/full transparency, background color not defined&high resolution CT contone information line art (line work) informationtrapping informationimage not definedimage color defined*full transparency, image color not defined1 byte2 bytes4 bytes 512 bytes 1024 bytes no transparencytransparency used unidentifiedmanualprogram normalaperature priorityshutter priorityprogram creativeprogram action portrait modelandscape mode did not firefiredfired, return not sensedfired, return sensedEfired, fill flash mode, camera has no flash return sensing capability)fired, fill flash mode, return not sensed%fired, fill flash mode, return senseddid not fire, flash 'off' modedid not fire, 'auto' modeAfired, 'auto' mode, camera has no flash return sensing capability%fired, 'auto' mode, return not sensed!fired, 'auto' mode, return sensed!camera does not have a flash unitinchmetre centimetre millimetre micrometre BackgroundMask Foreground RectangularStaggered Layout AStaggered Layout BStaggered Layout CStaggered Layout DUnsafeSafe-edu/harvard/hul/ois/jhove/module/tiff/TiffIFD)edu/harvard/hul/ois/jhove/module/tiff/IFD!edu/harvard/hul/ois/jhove/RepInfojava/io/RandomAccessFilejava/util/List%[Ledu/harvard/hul/ois/jhove/Property;[B"javax/xml/parsers/SAXParserFactoryorg/xml/sax/XMLReader setMimeType(Ljava/lang/String;)VsetCompressionScheme(I)VsetOrientationsetPlanarConfigurationsetRowsPerStrip(J)VsetSamplesPerPixel setByteOrderpropertyHeaderH(Ljava/lang/String;Ljava/util/List;)Ledu/harvard/hul/ois/jhove/Property;&edu/harvard/hul/ois/jhove/PropertyTypeNISOIMAGEMETADATA(Ledu/harvard/hul/ois/jhove/PropertyType;O(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ljava/lang/Object;)Vadd(Ljava/lang/Object;)ZSTRINGaddBitmaskPropertyM(Ljava/lang/String;J[Ljava/lang/String;Z)Ledu/harvard/hul/ois/jhove/Property;LONGaddIntegerPropertyM(Ljava/lang/String;I[Ljava/lang/String;Z)Ledu/harvard/hul/ois/jhove/Property;INTEGER'edu/harvard/hul/ois/jhove/PropertyArityARRAY)Ledu/harvard/hul/ois/jhove/PropertyArity;x(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ledu/harvard/hul/ois/jhove/PropertyArity;Ljava/lang/Object;)VaddRationalProperty](Ljava/lang/String;Ledu/harvard/hul/ois/jhove/Rational;Z)Ledu/harvard/hul/ois/jhove/Property;BOOLEAN(Z)VO(Ljava/lang/String;I[Ljava/lang/String;[IZ)Ledu/harvard/hul/ois/jhove/Property;addIntegerArrayPropertyN(Ljava/lang/String;[I[Ljava/lang/String;Z)Ledu/harvard/hul/ois/jhove/Property;PROPERTYLISTTRUELjava/lang/Boolean;sizetoString(I)Ljava/lang/String;append-(Ljava/lang/String;)Ljava/lang/StringBuilder; substring(II)Ljava/lang/String;4edu/harvard/hul/ois/jhove/module/tiff/GeoTiffStrings MODELTYPEMODELTYPE_INDEX RASTERTYPERASTERTYPE_INDEX GEOGRAPHICSGEOGRAPHICS_INDEX GEODETICDATUMGEODETICDATUM_INDEX PRIMEMERIDIANPRIMEMERIDIAN_INDEXDOUBLE(D)V LINEARUNITSLINEARUNITS_INDEX ANGULARUNITSANGULARUNITS_INDEX ELLIPSOIDELLIPSOID_INDEXPROJECTEDCSTYPEPROJECTEDCSTYPE_INDEX PROJECTIONPROJECTION_INDEXCOORDINATETRANSFORMATIONCOORDINATETRANSFORMATION_INDEXVERTICALCSTYPEVERTICALCSTYPE_INDEXVERTICALCSDATUMVERTICALCSDATUM_INDEXRATIONALgetSamplesPerPixel(II)V getImageWidthgetImageLengthgetBitsPerSample(JJ)V checkType(III)V checkCount(IJI)V readRational((JJ)Ledu/harvard/hul/ois/jhove/Rational; readASCII(JJ)Ljava/lang/String;setImageProducer_versionreadByte(IJJ)I(IIII)VreadLong(IJJ)JtoDouble()D(D)Ljava/lang/String; readShortreadShortArray(IJJ)[IsetBitsPerSample([I)VreadSignedRational setBrightnessreadSignedRationalArray)(JJ)[Ledu/harvard/hul/ois/jhove/Rational;averagen(Ledu/harvard/hul/ois/jhove/Rational;Ledu/harvard/hul/ois/jhove/Rational;)Ledu/harvard/hul/ois/jhove/Rational; readByteArraysetColormapBitCodeValuesetColormapRedValuesetColormapGreenValuesetColormapBlueValuesetDateTimeCreatedsetExposureBiassetExposureTimereadRationalArraysetExtraSamplessetFlashsetFlashReturnsetFlashEnergy setFNumbersetFocalLengthgetSamplingFrequencyUnitsetSamplingFrequencyUnit readLongArray(IJJ)[JreadDoubleArray(JJ)[D(I)Ljava/lang/StringBuilder;setGrayResponseCurvesetGrayResponseUnitsetHostComputersetImageIdentifiersetImageLength setImageWidthreadASCIIArray(JJ)[Ljava/lang/String;lengthcharAt(I)CsetSceneIlluminantsetScannerManufacturersetMeteringModesetScannerModelName setColorSpacegetYCbCrCoefficientssetYCbCrCoefficients(([Ledu/harvard/hul/ois/jhove/Rational;)VgetYCbCrPositioningsetYCbCrPositioninggetYCbCrSubSamplingsetYCbCrSubSampling getColorSpacesetPrimaryChromaticitiesRedX'(Ledu/harvard/hul/ois/jhove/Rational;)VsetPrimaryChromaticitiesRedYsetPrimaryChromaticitiesGreenXsetPrimaryChromaticitiesGreenYsetPrimaryChromaticitiesBlueXsetPrimaryChromaticitiesBlueYsetReferenceBlackWhite setSensorsetSubjectDistance([D)VsetScanningSoftwaresetStripByteCounts([J)VsetStripOffsetssetTileByteCounts setTileLengthsetTileOffsets setTileWidthreadSShortArraysetWhitePointXValuesetWhitePointYValuesetXSamplingFrequencysetYSamplingFrequencyreadTrueByteArray(IJJ)[B([BII)V_info#Ledu/harvard/hul/ois/jhove/RepInfo;'(Ljava/lang/String;Ljava/lang/String;)V setMessage&(Ledu/harvard/hul/ois/jhove/Message;)V(Ljava/lang/String;J)VgetReferenceBlackWhite([B)V!(Ljava/io/ByteArrayInputStream;)V newInstance&()Ljavax/xml/parsers/SAXParserFactory;setNamespaceAware newSAXParser()Ljavax/xml/parsers/SAXParser;javax/xml/parsers/SAXParser getXMLReader()Lorg/xml/sax/XMLReader;setContentHandler(Lorg/xml/sax/ContentHandler;)Vparse(Lorg/xml/sax/InputSource;)V makeProperty&()Ledu/harvard/hul/ois/jhove/Property; getMessage startsWith(Ljava/lang/String;)Z3(Ljava/io/ByteArrayInputStream;Ljava/lang/String;)V! !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~T2N !Gd .+Y1>,bQ6U73 X=%P"\]R-C E ; : <  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuv&w'x(yz{|}~#jklmqrstuvwxy{|}~z      !"#$%&'()*+,-./012345678797:;7<=7>7?@A7B7C7D7E7F7G7H7I7JKLMNOP7QRSTjUVWf%*-*Y**** * * ************ *** *!*"*#*$*%*&*'*(*)***+*,*-*.*/*0*1*2*3*4*5*6*2*4*7*8*9*:*;*<*=*>*?*@*A*B*C*D*E*F*G*H*I*J*K*L*M*N*O*P*Q*R*S*T*U*V*W*X*Y*Z*[*\*]*^*_*`*a*b*c*d*eX/VYZ[\YZ[\]^_W*f`aW*'baW*(cdW*geaW*)faW**gaW*haW*ijW*hkjW*iljW*jmdW*knjW*lo_W*mpdW*nqdW*ordW*psjW*qtuW*6vuW*9waW*0xaW*yaW*2z_W*r{_W*s|jW*t}uW*3~aW*,aW*-dW*udW*vjW*?uW*4jW*wjW*xjW*yW*zaW*aW*7uW*8jW*{aW*uW*W*|jW*}dW*~aW*_W*W*W*uW*W*jW*aW*jW*dW*jW*jW*aW*.dW*aW*5_W*dW*jW*dW*W*>W*jW*uW*"uW*#W*W*W*W*aW*$dW*jW*aW*/uW*%_W*_W*jW*@dW*BjW*DW*YW*ZWF:YM*,*,*,*,*,*,*,*,IW$+Y*WW *u+Y*uW*o+Y*oW* +**W!+YY*W*!(*!+**!dW**!"+YY*!W*p+Y*pW*+Y*W*+Y*W*+**W*+**W*n+Y*nW*+**W+Y*W*+Y*W*+Yò*·W*+**W*!+YƲY*ȷW*z+Yɲ*zW*q+Yʲ*qW*+Y̲*˷W*+Yβ*ͷW*!+YϲY*ȷW*!+YвY*ȷW*љ+YҲӻYշW*+Yײ*ַW+YزY*$ȷW* +** W*"!+Y۲Y*"W*#!+YܲY*#W*+**޲W*!+YY*W*!+YY*W*!+YY*ȷW*+**W*+Y*W*+Y*W*+Y*W*+Y*W*+Y*W*w+Y*wW*x+Y*xW*y+Y*yW*j+Y*jW*%!+YY*%W*&!+YY*&W*;"+YY*;W*:!+YY*:W*<!+YY*<W*+Y*W*+Y*WX53 & : %  %%! :((((% ((&(( W YN*-Y*W*l-Y*lW-**'W*("-YY*(ȷW-**,W-**/W*-"-YY*-ȷW* -Y * W*k-Y *kW*+-* *+ W*~-Y*~W*-Y*W-**.W-YY**ȷW-YY*)ȷW+Y-WX &!<R !W YN*i-Y*iW*h-Y*hW*g-Y*gW*|-Y*|W*{-YӲW*0-**0W*-Y*W*}-Y *}W*-Y!*W*7"-Y"Y*7ȷW*-Y#*W*5"-Y$Y*5ȷW*m-*%*mW*-*&*W*f-*'*fW*-*(*W*1-*)*1*+W*-Y,*W*-Y-*W*r-*.*rW*s-*/*sW*2-*0*21W*4"-Y2Y*4W*-Y3*W*v-Y4*vW*-Y5*W*-Y6*W-7+Y8-W*=+*=WX$*!!!!&!& !!)! W IYN*t-Y9Y*t.ȷW-Y:;Y<*t.=>?>*t.=>@W-YAY*t.ȷW6*t.h`6*t.6*t`.6*t`.6*t`.6 6 9 B:   6 AC*D 19 -E%*F  `dG: :IYJK-*L MNWJ-*O PQW(-YR W-*S TUW-YV W-*W XYW-*Z [\W #-Y]^_Y `WX-*a bcW6#-Yd^_Y `W-*e fgW#-Yh^_Y `W-*i jkW #-Yl^_Y `Wz #-Ym^_Y `WR #-Yn^_Y `W* -*o fgW -*p qrW -Ys W -*t uvW -*w xyW -*z bcW_ #-Y{^_Y `W7 #-Y|^_Y `W #-Y}^_Y `W #-Y~^_Y `W #-Y^_Y `W #-Y^_Y `Wo #-Y^_Y `WG #-Y^_Y `W #-Y^_Y `W #-Y^_Y `W   #-Y^_Y `W #-Y^_Y `Ww #-Y^_Y `WO #-Y^_Y `W' #-Y^_Y `W #-Y^_Y `W #-Y^_Y `W #-Y^_Y `W-* We-Y WD-* W"-* bcWY:-7Y-W*Y^*W*Y^*W*Y^*W7+YWHXv8S Y]\ !! ! !!'!'!'!'''!! !!!'''''''''''''''''! !Y*""""IW }*>+Y*>W*?VN-**?.S-YY*?.ȷS+Y-W:.wzHX"WYW` *YN*@-Y*@W*A-Y*AW*B-Y*BW*C-Y*CW*D-Y*DW*E-**EW*F-Y*FW*G-Y*GW*H-Y*HW*I-Y*IW*J-Y*JW*K-Y*KW*L-Y*LW*M-Y*MW*N-Y*NW*O-Y*OW*P"-YY*PȷW*Q"-YY*QȷW*R-Y*RW*S-Y*SW*T-Y*TW*U-Y*UW*V-Y*VW*W-Y*WW*X-Y*XW*Y-Y*YW*Z-Y*ZW*[-Y*[W*\-Y*\W*\-Y*]W*^"-YY*^ȷW*_-Y²*_W*`-Yò*`W*a-YIJ*aW*b-YŲ*bW*c-YƲ*cW*d-YDz*dW*e-**eW-7+Yʲ-WX.'.!!!!!!!!!!!&&!!!!!!!!!&! aWn*ˠ_<*h*h M>*h?6*h.66,. 6  ,O*̬X   W *@*A0* A*A*@.O*A*@.O*AO*AO*B*C **BC*P*P*[*Yε[*\*Yε\*]*Yε]*_*Yε_*e*e*˟ *Ϡ*D* YOYOYOD*E*E*G* YOYOGYL*H7**G.*G.h*h͵H=*H*H+S*I***Ј͵I=*I*I+S*J***ш͵J=*J*J+S*K9**̼ K *.dyA6*K*K PYM*L*Y,SY,SL*M*,M*N*Y+SY+SN*O5*͵O*OY* S*OY* S*>*T **յT*U **յU*^*ˠ*^*c*YεcX@;   .$  8W_AhM>h,YS>,h`YS,X  W!֠!**!ٵf};'**!ڶ*Z*ܧRݠ!**!޵'0ߠ!**!޵(F!**!:5*!:*g**!ڵg!**!)!**!*n**!OE ! **!'*!:*22 **!**!**!h!**!iG!**!慵:mW**!jQ**!ڵ 6**!ڵk@*!: : :  :  : l6  h6 6 4O .O  `.O  `.O** * * **ܧl**!lP!**!ٵm/!*!6** * *** **"* "*#* #H!**!<&**!ڵn*`*ܧW26!**!ڵo**o*%*ܧ!!**!ڶ **!ڵpP.!**!q**ܧ!**!6E ! **!a*!:*22@!**!0D! **!ٶ*!:*22R***!**ܧ !**!?!**!1**1**1~CD! **!ٶ *!:*22  D! **!ٶ *!:*22  D! **!ٶ *!:*22 k4!**!2*A**23!**!ٵr!**!ٵs!**! **!E**!ڵFC **!Dr**!t*t.666  H h`6 *t .6  &IY;Y<> >@K 6    !**!9!**!3#**!"!!**!A-!**!*Z*ܧQ!**!+/<'**!ڶ* *ܧ**!ڵu**!ڶ !**!޵,!!**!޵-"**!ڵvl#!**!?I"!**!$#%!**!4&* YOw'**!x(**!y"!**!)Z!**!qM&**!*z*P*ܧGL-!**!**ܧ+**!{,!**!7-!**!8.>*!:/ :6  /  0P *|n**!|Z*!: :6    .P*| 1!**!}2**!ڵ~ '**!**ܧ'**!**ܧ-!**!*a*ܧX-!**!*0*ܧ''**!**ܧ'**!**ܧ-!**!**ܧ'**!*~*ܧu-!**!*M*ܧD[**!'3!!**!4**!ڶ56!**!ٵ**!§7!!**!8**!f**!ڶ9H: !**!&; **! < !**!+!**!**ܧ=**!N-!**!*s*ܧj>**!M_!**!+!!**!**!ڵ)!**!!**!**?* *****v*@=*YY+SYYKSYYrSA*B *C*D* YOYOE*F6 *.*ܧ& * *ܧ G**! !!**! r=+!**! * K*ܧ C?k!*!:*2H*2I*2J*2K*2L*2M**ܧ N!**!. 0!**!O* *ܧ ~(!!**! Y"!**! 3S'**!* *ܧ !!**! P**!ڵ Q!**!5 R!!**!S T**!ڵ f/**!> JU} :! *!ٶR1RE*!: *!:2R2R 1R*V 1'**!ڶW* *ܧ X**! Y**!ڵ f**!Z F**![ &!**!! J **! \**! $**!慵" %**!慵# Q&**!ڵ* o*ܧ f!**!$ D]d!*!:*;Y<.=>?>.=>?>.=>?>.=>@E+**!^**ܧC1!**!_**ܧxD+**!`*R*ܧIB1!**!a**ܧb**!c-*ѧV.!**!**ܧd!**!޵/>>!*!:*2e*2f**ܧLX!**!%*!**!ٵ  !**!ٶg/!**!A**ܧ0!**!C**ܧ~0!**!E*S*ܧJY!**!&(!**!ٵ !**!ٶh**!i=j!**!@k!**!Al**!ڵBimA*!n:6d3 *oYpC$q**!Dr**!Es**!Ft**!GuX**!H*!:*!͵H6!*HY/ SXv **!I<w **!J x**!Ky!**!Lz!**!ٵM{^!**!N*!:*!͵N6!*NY/ S_|^!**!O?*!:*!͵O6!*OY/ S}!**!P~!**!Q **!R **!S **!Re **!SI **!V- **!W**!XX>*!:*!͵Y6!*YY.S**!Y!**!Zy **![]**!ٵ\B**!ٵ]'**!ስ^ **!ٵ_**!ڵ`!**!a**!ٵb**!ٵc}*Y_**!dC**!e'*Y;Y<>@#:IY;Y<>@X!*!!"* !!' !"B Y70Y 8 ")9$1!' !& -!{\Y\& & & 7 &A Y#!$0!*!!"%!%!)0!! ]!**00**0*0$ $!".0!$!>L$.k!3$%*$!$2 *!)!g.4.41!>! #233! #!!! !!!!(!  #BIW {*<*M,  M> ,O*,,.xd>*!* 6*O*!* 6*O*!* 6*O**q* q*qO*qO* **5* ***[O[OO***[O[OO*A:Y[S[SSY[S[SS*O** *O*OX+#8GW*+W*+W*+W*+Wf:*!n:Y:Y: :   : Y:      ::  :<1:Y:   :IYK :::I[\}[I\I[H\HXn\ Y9Y]] YDIWoYSYSYSoYSYSoYSYSYSoYSYSYSYSYSYSYSYSoYSYS YOYOoYSYSYSoYSYSoYSYSYSoYSYSYSYSYSoYSYSYSYSoYSYSYSYSoYSYSYSoYSYSYSYSYSoYSYSYSYSYSoYSYSYSoYSYSYS oYSYSYSoYSYSYSYSYS YOYOYOY OY OoYSYS oYSYSYSYSYSYSYSYSYS oYSYSYSYSYSYSYSYSYSY SY SY  SY  S* YOYOYOYOY OY OYOYOYOY OY OY OY  O+oYSY SY SY SYSYS1oYSYSYSYSoYSYSYSYSYSYSoYSYSɱjhove/classes/edu/harvard/hul/ois/jhove/module/wave/0000755000707400001440000000000011510702106021635 5ustar garyusersjhove/classes/edu/harvard/hul/ois/jhove/module/wave/ExifInfo.class0000644000707400001440000000356211510702104024377 0ustar garyusers2d 78 7 9:; <= > ?@ AB CD EF GH IJ <K LM N OPQ <R LSTU _exifVersionLjava/lang/String;_relatedImageFile _timeCreated _manufacturer_model _makerNote[B _userComment()VCode buildProperty&()Ledu/harvard/hul/ois/jhove/Property; StackMapTableVsetExifVersion(Ljava/lang/String;)VsetRelatedImageFilesetTimeCreatedsetManufacturersetModel setMakerNote([B)VsetUserComment '(java/util/LinkedList "edu/harvard/hul/ois/jhove/Property ExifVersionW XY 'ZV [\ RelatedImageFile ! TimeCreated " Manufacturer #Model $% MakerNote ]Y^ _` 'a & UserCommentExif bY c`.edu/harvard/hul/ois/jhove/module/wave/ExifInfojava/lang/Objectjava/util/List&edu/harvard/hul/ois/jhove/PropertyTypeSTRING(Ledu/harvard/hul/ois/jhove/PropertyType;O(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ljava/lang/Object;)Vadd(Ljava/lang/Object;)ZBYTE'edu/harvard/hul/ois/jhove/PropertyArityARRAY)Ledu/harvard/hul/ois/jhove/PropertyArity;x(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ledu/harvard/hul/ois/jhove/PropertyArity;Ljava/lang/Object;)VPROPERTYLIST! !"#$%& '()**+)YL*+Y* W* +Y *  W* +Y *  W*+Y* W*+Y* W*+Y* W*+Y* WY+,)- ./)*+0/)*+ 1/)*+ 2/)*+3/)*+45)*+6/)*+jhove/classes/edu/harvard/hul/ois/jhove/module/wave/AXMLChunk.java0000644000707400001440000000357710771562752024271 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.wave; import edu.harvard.hul.ois.jhove.module.iff.*; import edu.harvard.hul.ois.jhove.*; import edu.harvard.hul.ois.jhove.module.WaveModule; import java.io.*; //import java.util.*; /** * Implementation of the WAVE AXML Chunk, which * contains arbitrary XML metadata, as specified in * Specification of the Broadcast Wave Format: * A format for audio data files in broadcasting; * Supplement 5: <axml> Chunk * (European Broadcasting Union) * * @author Gary McGath * */ public class AXMLChunk extends Chunk { /** * Constructor. * * @param module The WaveModule under which this was called * @param hdr The header for this chunk * @param dstrm The stream from which the WAVE data are being read */ public AXMLChunk ( ModuleBase module, ChunkHeader hdr, DataInputStream dstrm) { super(module, hdr, dstrm); } /** Reads a chunk and puts a BroadcastAudioExtension Property into * the RepInfo object. * * @return false if the chunk is structurally * invalid, otherwise true */ public boolean readChunk(RepInfo info) throws IOException { WaveModule module = (WaveModule) _module; byte[] bbuf = new byte[(int) bytesLeft]; ModuleBase.readByteBuf (_dstream, bbuf, _module); String xmlData = new String (bbuf); module.addWaveProperty (new Property ("XML", PropertyType.STRING, xmlData)); return true; } } jhove/classes/edu/harvard/hul/ois/jhove/module/wave/AssocDataListChunk.java0000644000707400001440000000651210771562754026220 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.wave; import java.io.DataInputStream; import java.io.IOException; import edu.harvard.hul.ois.jhove.*; import edu.harvard.hul.ois.jhove.module.WaveModule; import edu.harvard.hul.ois.jhove.module.iff.*; /** * The associated data list ('list') chunk, which is different from * the RIFF 'LIST' chunk, ListInfoTextChunk. It can contain * several different types of informational chunks. * * @author Gary McGath * */ public class AssocDataListChunk extends Superchunk { /** * Constructor. * * @param module The WaveModule under which this was called * @param hdr The header for this chunk * @param dstrm The stream from which the WAVE data are being read * @param info RepInfo object for error reporting */ public AssocDataListChunk( ModuleBase module, ChunkHeader hdr, DataInputStream dstrm, RepInfo info) { super(module, hdr, dstrm, info); } /** Reads the chunk and its nested chunks, and puts appropriate * properties into the RepInfo object. * * @return false if the chunk or a nested chunk * is structurally * invalid, otherwise true */ public boolean readChunk(RepInfo info) throws IOException { WaveModule module = (WaveModule) _module; // The chunk has a type ID, which is always "adtl". Presumably // this was intended to allow other list structures (don't ask // why), but any others will be considered non-conforming. String typeID = module.read4Chars(_dstream); if (!"adtl".equals (typeID)) { info.setMessage (new ErrorMessage ("Unknown list type " + "in Associated Data List Chunk", "Type = " + typeID, _module.getNByte())); info.setWellFormed (false); return false; } for (;;) { ChunkHeader chunkh = getNextChunkHeader (); if (chunkh == null) { break; } Chunk chunk = null; // The chunk list can include Labels, Notes, and // Labelled Text. String id = chunkh.getID(); int chunkSize = (int) chunkh.getSize (); if (id.equals ("labl")) { chunk = new LabelChunk (_module, chunkh, _dstream); } else if (id.equals ("note")) { chunk = new NoteChunk (_module, chunkh, _dstream); } else if (id.equals ("ltxt")) { chunk = new LabeledTextChunk (_module, chunkh, _dstream); } if (chunk == null) { _module.skipBytes (_dstream, (int) chunkSize, _module); info.setMessage (new InfoMessage ("Chunk type '" + id + "' in Associated Data Chunk ignored")); } else if (!chunk.readChunk (info)) { return false; } } return true; } } jhove/classes/edu/harvard/hul/ois/jhove/module/wave/BroadcastExtChunk.java0000644000707400001440000001067210771562752026105 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.wave; import edu.harvard.hul.ois.jhove.RepInfo; import edu.harvard.hul.ois.jhove.module.iff.*; import edu.harvard.hul.ois.jhove.*; import edu.harvard.hul.ois.jhove.module.WaveModule; import java.io.*; import java.util.*; /** * Implementation of the WAVE Broadcast Audio Extension Chunk. * * @author Gary McGath * */ public class BroadcastExtChunk extends Chunk { /** * Constructor. * * @param module The WaveModule under which this was called * @param hdr The header for this chunk * @param dstrm The stream from which the WAVE data are being read */ public BroadcastExtChunk ( ModuleBase module, ChunkHeader hdr, DataInputStream dstrm) { super(module, hdr, dstrm); } /** Reads a chunk and puts a BroadcastAudioExtension Property into * the RepInfo object. * * @return false if the chunk is structurally * invalid, otherwise true */ public boolean readChunk(RepInfo info) throws IOException { WaveModule module = (WaveModule) _module; byte[] buf256 = new byte[256]; ModuleBase.readByteBuf (_dstream, buf256, module); String description = byteBufString(buf256); byte[] buf32 = new byte[32]; ModuleBase.readByteBuf (_dstream, buf32, module); String originator = byteBufString (buf32); ModuleBase.readByteBuf (_dstream, buf32, module); String originatorRef = byteBufString (buf32); byte[] buf10 = new byte[10]; ModuleBase.readByteBuf (_dstream, buf10, module); String originationDate = byteBufString (buf10); byte[] buf8 = new byte[8]; ModuleBase.readByteBuf (_dstream, buf8, module); String originationTime = byteBufString (buf8); // TimeReference is stored as a 64-bit little-endian // number -- I think long timeReference = module.readSignedLong (_dstream); int version = module.readUnsignedShort (_dstream); module.setBroadcastVersion (version); byte[] smtpe_umid = new byte[64]; ModuleBase.readByteBuf (_dstream, smtpe_umid, module); module.skipBytes (_dstream, 190, module); String codingHistory = ""; if (bytesLeft > 602) { byte[] bufCodingHistory = new byte[(int) bytesLeft - 602]; ModuleBase.readByteBuf (_dstream, bufCodingHistory, module); codingHistory = byteBufString (bufCodingHistory); } // Whew -- we've read the whole thing. Now make that into a // list of Properties. List plist = new ArrayList (20); if (description.length () > 0) { plist.add (new Property ("Description", PropertyType.STRING, description)); } if (originator.length () > 0) { plist.add (new Property ("Originator", PropertyType.STRING, originator)); } if (originationDate.length () > 0) { plist.add (new Property ("OriginationDate", PropertyType.STRING, originationDate)); } if (originationTime.length () > 0) { plist.add (new Property ("OriginationTime", PropertyType.STRING, originationTime)); } plist.add (new Property ("TimeReference", PropertyType.LONG, new Long (timeReference))); plist.add (new Property ("Version", PropertyType.INTEGER, new Integer (version))); plist.add (new Property ("UMID", PropertyType.BYTE, PropertyArity.ARRAY, smtpe_umid)); if (codingHistory.length () > 0) { plist.add (new Property ("CodingHistory", PropertyType.STRING, codingHistory)); } module.addWaveProperty (new Property ("BroadcastAudioExtension", PropertyType.PROPERTY, PropertyArity.LIST, plist)); // set time reference in AES metadata set @author David Ackerman AESAudioMetadata aes = module.getAESMetadata (); aes.setStartTime (timeReference); return true; } } jhove/classes/edu/harvard/hul/ois/jhove/module/wave/CartChunk.java0000644000707400001440000001712110771562755024412 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.wave; import edu.harvard.hul.ois.jhove.RepInfo; import edu.harvard.hul.ois.jhove.module.iff.*; import edu.harvard.hul.ois.jhove.*; import edu.harvard.hul.ois.jhove.module.WaveModule; import java.io.*; import java.util.*; /** * Implementation of the WAVE Cart Chunk. * * @author Gary McGath * */ public class CartChunk extends Chunk { /** Number of timer tags. This is a fixed value specified by the * chunk definition. */ private static final int N_TIMER_TAGS = 8; /** * Constructor. * * @param module The WaveModule under which this was called * @param hdr The header for this chunk * @param dstrm The stream from which the WAVE data are being read */ public CartChunk ( ModuleBase module, ChunkHeader hdr, DataInputStream dstrm) { super(module, hdr, dstrm); } /** Reads a chunk and puts a Cart Property into * the RepInfo object. * * @return false if the chunk is structurally * invalid, otherwise true */ public boolean readChunk(RepInfo info) throws IOException { WaveModule module = (WaveModule) _module; byte[] buf4 = new byte[4]; ModuleBase.readByteBuf (_dstream, buf4, module); String version = byteBufString(buf4); // Title and most other fields within this chunk are ASCII strings // with a fixed allocation; calling trim() is necessary to get rid // of nulls. byte[] buf64 = new byte[64]; ModuleBase.readByteBuf (_dstream, buf64, module); String title = byteBufString (buf64); ModuleBase.readByteBuf (_dstream, buf64, module); String artist = byteBufString (buf64); ModuleBase.readByteBuf (_dstream, buf64, module); String cutID = byteBufString (buf64); ModuleBase.readByteBuf (_dstream, buf64, module); String clientID = byteBufString (buf64); ModuleBase.readByteBuf (_dstream, buf64, module); String category = byteBufString (buf64); ModuleBase.readByteBuf (_dstream, buf64, module); String classification = byteBufString (buf64); ModuleBase.readByteBuf (_dstream, buf64, module); String outCue = byteBufString (buf64); byte[] buf10 = new byte[10]; ModuleBase.readByteBuf (_dstream, buf10, module); String startDate = byteBufString (buf10); byte[] buf8 = new byte[8]; ModuleBase.readByteBuf (_dstream, buf8, module); String startTime = byteBufString (buf8); ModuleBase.readByteBuf (_dstream, buf10, module); String endDate = byteBufString (buf10); ModuleBase.readByteBuf (_dstream, buf8, module); String endTime = byteBufString (buf8); ModuleBase.readByteBuf (_dstream, buf64, module); String producerAppID = byteBufString (buf64); ModuleBase.readByteBuf (_dstream, buf64, module); String producerAppVersion = byteBufString (buf64); ModuleBase.readByteBuf (_dstream, buf64, module); String userDef = byteBufString (buf64); int levelReference = module.readSignedInt(_dstream); List timerTags = new ArrayList (N_TIMER_TAGS); for (int i = 0; i < N_TIMER_TAGS; i++) { String timerTagUsage = module.read4Chars(_dstream).trim (); long timerTagValue = module.readUnsignedInt (_dstream); if (timerTagUsage.length () > 0) { Property[] ttprop = new Property[2]; ttprop[0] = new Property ("Usage", PropertyType.STRING, timerTagUsage); ttprop[1] = new Property ("Value", PropertyType.LONG, new Long (timerTagValue)); timerTags.add (new Property ("PostTimer", PropertyType.PROPERTY, PropertyArity.ARRAY, ttprop)); } } module.skipBytes (_dstream, 276, module); byte[] buf1k = new byte[1024]; ModuleBase.readByteBuf (_dstream, buf1k, module); String url = byteBufString (buf1k); String tagText = ""; if (bytesLeft > 2048) { byte[] bufTagText = new byte[(int) bytesLeft - 2048]; ModuleBase.readByteBuf (_dstream, bufTagText, module); tagText = byteBufString (bufTagText); } // Whew -- we've read the whole thing. Now make that into a // list of Properties. List plist = new ArrayList (20); if (version. length () > 0) { plist.add (new Property ("Version", PropertyType.STRING, version)); } if (title.length() > 0) { plist.add (new Property ("Title", PropertyType.STRING, title)); } if (artist.length () > 0) { plist.add (new Property ("Artist", PropertyType.STRING, artist)); } if (cutID.length () > 0) { plist.add (new Property ("CutID", PropertyType.STRING, cutID)); } if (clientID.length () > 0) { plist.add (new Property ("ClientID", PropertyType.STRING, clientID)); } if (category.length() > 0) { plist.add (new Property ("Category", PropertyType.STRING, category)); } if (classification.length () > 0) { plist.add (new Property ("Classification", PropertyType.STRING, classification)); } if (outCue.length () > 0) { plist.add (new Property ("OutCue", PropertyType.STRING, outCue)); } if (startDate.length () > 0) { plist.add (new Property ("StartDate", PropertyType.STRING, startDate)); } if (startTime.length () > 0) { plist.add (new Property ("StartTime", PropertyType.STRING, startTime)); } if (endDate.length () > 0) { plist.add (new Property ("EndDate", PropertyType.STRING, endDate)); } if (endTime.length () > 0) { plist.add (new Property ("EndTime", PropertyType.STRING, startTime)); } if (producerAppID.length () > 0) { plist.add (new Property ("ProducerAppID", PropertyType.STRING, producerAppID)); } if (producerAppVersion.length () > 0) { plist.add (new Property ("ProducerAppVersion", PropertyType.STRING, producerAppVersion)); } if (userDef.length () > 0) { plist.add (new Property ("UserDef", PropertyType.STRING, userDef)); } plist.add (new Property ("LevelReference", PropertyType.INTEGER, new Integer (levelReference))); if (timerTags.size() > 0) { plist.add (new Property ("PostTimers", PropertyType.PROPERTY, PropertyArity.LIST, timerTags)); } if (url.length () > 0) { plist.add (new Property ("URL", PropertyType.STRING, url)); } if (tagText.length () > 0) { plist.add (new Property ("TagText", PropertyType.STRING, tagText)); } module.addWaveProperty (new Property ("Cart", PropertyType.PROPERTY, PropertyArity.LIST, plist)); return true; } } jhove/classes/edu/harvard/hul/ois/jhove/module/wave/CueChunk.java0000644000707400001440000001014510771562752024231 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.wave; import java.io.DataInputStream; import java.io.IOException; import java.util.*; import edu.harvard.hul.ois.jhove.module.WaveModule; import edu.harvard.hul.ois.jhove.*; import edu.harvard.hul.ois.jhove.module.iff.Chunk; import edu.harvard.hul.ois.jhove.module.iff.ChunkHeader; /** * Implementation of the WAVE Cue chunk, which defines cue * points in an audio stream. * * @author Gary McGath * */ public class CueChunk extends Chunk { /** * Constructor. * * @param module The WaveModule under which this was called * @param hdr The header for this chunk * @param dstrm The stream from which the WAVE data are being read */ public CueChunk( ModuleBase module, ChunkHeader hdr, DataInputStream dstrm) { super(module, hdr, dstrm); } /** Reads a chunk and puts a Cue property into * the RepInfo object. * * @return false if the chunk is structurally * invalid, otherwise true */ public boolean readChunk(RepInfo info) throws IOException { WaveModule module = (WaveModule) _module; int nPoints = (int) module.readUnsignedInt (_dstream); List points = new ArrayList (nPoints); for (int i = 0; i < nPoints; i++) { // get unique ID for cue point structure long dwIdent = module.readUnsignedInt (_dstream); // get position in play order long dwPos = module.readUnsignedInt (_dstream); // chunk ID of referenced chunk ('data' or 'slnt') String fccID = module.read4Chars (_dstream); // Get offset to start of chunk -- zero if a single // Data chunk is used long dwChunkStart = module.readUnsignedInt (_dstream); // Get offset to start of block containing position long dwBlockStart = module.readUnsignedInt (_dstream); // Get offset from start of block to cue point. // Note from the web page I'm using as a source: // Unfortunately, the WAVE documentation is much too ambiguous, // and doesn't define what it means by the term "sample offset". // This could mean a byte offset, or it could mean counting // the sample points (for example, in a 16-bit wave, every // 2 bytes would be 1 sample point), or it could even mean // sample frames (as the loop offsets in AIFF are specified). // Who knows? The guy who conjured up the Cue chunk certainly // isn't saying. I'm assuming that it's a byte offset, // like the above 2 fields. long dwSampleOffset = module.readUnsignedInt (_dstream); Property[] cueProps = new Property[5]; cueProps[0] = new Property ("ID", PropertyType.LONG, new Long (dwIdent)); cueProps[1] = new Property ("Position", PropertyType.LONG, new Long (dwPos)); cueProps[2] = new Property ("DataChunkID", PropertyType.STRING, fccID); cueProps[3] = new Property ("BlockStart", PropertyType.LONG, new Long (dwChunkStart)); cueProps[4] = new Property ("SampleOffset", PropertyType.LONG, new Long (dwBlockStart)); points.add (new Property ("CuePoint", PropertyType.PROPERTY, PropertyArity.ARRAY, cueProps)); } module.addWaveProperty(new Property ("Cue", PropertyType.PROPERTY, PropertyArity.LIST, points)); return true; } } jhove/classes/edu/harvard/hul/ois/jhove/module/wave/DataChunk.java0000644000707400001440000000510010771562755024364 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College * **********************************************************************/ package edu.harvard.hul.ois.jhove.module.wave; import java.io.DataInputStream; import java.io.IOException; import edu.harvard.hul.ois.jhove.*; import edu.harvard.hul.ois.jhove.module.WaveModule; import edu.harvard.hul.ois.jhove.module.iff.Chunk; import edu.harvard.hul.ois.jhove.module.iff.ChunkHeader; /** * Implementation of the WAVE Data Chunk. * * Data Chunks may occur either at the top level (i.e., under the RIFF * chunk) or under a data list chunk. There can be only one top-level * Data Chunk. * * @author Gary McGath * */ public class DataChunk extends Chunk { /** * Constructor. * * @param module The WaveModule under which this was called * @param hdr The header for this chunk * @param dstrm The stream from which the WAVE data are being read */ public DataChunk( ModuleBase module, ChunkHeader hdr, DataInputStream dstrm) { super(module, hdr, dstrm); } /* We may want to have another constructor which sets a parent chunk. */ /** Reads a chunk and puts a Data property into * the RepInfo object. * * @return false if the chunk is structurally * invalid, otherwise true */ public boolean readChunk(RepInfo info) throws IOException { WaveModule module = (WaveModule) _module; Property lenProp = new Property ("DataLength", PropertyType.LONG, new Long (bytesLeft)); // The behavior will be different if we are reading this under // a 'wavl' chunk. // If we have PCM compression, the number of samples is given // by the number of bytes divided by the sample blocking; otherwise // we use the Fact chunk to count samples. if (module.getCompressionCode() == FormatChunk.WAVE_FORMAT_PCM) { module.addSamples (bytesLeft / module.getBlockAlign ()); } module.addWaveProperty(new Property ("Data", PropertyType.PROPERTY, lenProp)); // This must be called precisely at this point in reading the // data stream to produce an accurate result. module.markFirstSampleOffset (); module.skipBytes (_dstream, (int) bytesLeft, module); return true; } } jhove/classes/edu/harvard/hul/ois/jhove/module/wave/ExifInfo.java0000644000707400001440000000707110771562754024241 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.wave; import edu.harvard.hul.ois.jhove.*; import java.util.*; /** * Encapsulation of Exif information for a Wave file. Exif sound * information doesn't closely follow Exif image information, so we * don't particularly try to force property names to match. * * @see edu.harvard.hul.ois.jhove.module.tiff.ExifIFD * * @author Gary McGath * */ public class ExifInfo { private String _exifVersion; private String _relatedImageFile; private String _timeCreated; private String _manufacturer; private String _model; private byte[] _makerNote; private String _userComment; public ExifInfo () { } /** Constructs a property and returns it. */ public Property buildProperty () { List entries = new LinkedList (); if (_exifVersion != null) { entries.add (new Property ("ExifVersion", PropertyType.STRING, _exifVersion)); } else { return null; // Version must be specified } if (_relatedImageFile != null) { entries.add (new Property ("RelatedImageFile", PropertyType.STRING, _relatedImageFile)); } if (_timeCreated != null) { entries.add (new Property ("TimeCreated", PropertyType.STRING, _timeCreated)); } if (_manufacturer != null) { entries.add (new Property ("Manufacturer", PropertyType.STRING, _manufacturer)); } if (_model != null) { entries.add (new Property ("Model", PropertyType.STRING, _model)); } if (_makerNote != null) { entries.add (new Property ("MakerNote", PropertyType.BYTE, PropertyArity.ARRAY, _makerNote)); } if (_userComment != null) { entries.add (new Property ("UserComment", PropertyType.STRING, _userComment)); } return new Property ("Exif", PropertyType.PROPERTY, PropertyArity.LIST, entries); } /** Converts the raw 4-byte array into a version string and * stores it. */ protected void setExifVersion(String version) { _exifVersion = version; } /** Sets the related image file name. */ protected void setRelatedImageFile (String file) { _relatedImageFile = file; } /** Sets the creation time as an ASCII string. */ protected void setTimeCreated (String time) { _timeCreated = time; } /** Sets the manufacturer of the equipment that produced the file. */ protected void setManufacturer (String file) { _manufacturer = file; } /** Sets the model of the equipment that produced the file. */ protected void setModel (String file) { _model = file; } /** Sets the maker note. */ protected void setMakerNote (byte[] note) { _makerNote = note; } /** Sets the user comment. */ protected void setUserComment (String comment) { _userComment = comment; } } jhove/classes/edu/harvard/hul/ois/jhove/module/wave/ExifMakerNoteChunk.java0000644000707400001440000000333410771562752026220 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.wave; import edu.harvard.hul.ois.jhove.*; import edu.harvard.hul.ois.jhove.module.WaveModule; import edu.harvard.hul.ois.jhove.module.iff.Chunk; import edu.harvard.hul.ois.jhove.module.iff.ChunkHeader; import java.io.*; /** * This class encapsulates the Exif Maker Note chunk. The format * of this is manufacturer-depedent, hence is regarded simply as an * array of integers. * * @author Gary McGath * */ public class ExifMakerNoteChunk extends Chunk { /** * Constructor. * * @param module The WaveModule under which this was called * @param hdr The header for this chunk * @param dstrm The stream from which the WAVE data are being read */ public ExifMakerNoteChunk( ModuleBase module, ChunkHeader hdr, DataInputStream dstrm) { super(module, hdr, dstrm); } /** Reads a chunk and puts information into the superchunk's * Exif property. * * @return false if the chunk is structurally * invalid, otherwise true */ public boolean readChunk(RepInfo info) throws IOException { WaveModule module = (WaveModule) _module; byte[] buf = new byte[(int) bytesLeft]; ModuleBase.readByteBuf (_dstream, buf, module); ExifInfo exif = module.getExifInfo (); module.getExifInfo ().setMakerNote (buf); return true; } } jhove/classes/edu/harvard/hul/ois/jhove/module/wave/ExifStringChunk.java0000644000707400001440000000414110771562753025577 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.wave; import edu.harvard.hul.ois.jhove.*; import edu.harvard.hul.ois.jhove.module.WaveModule; import edu.harvard.hul.ois.jhove.module.iff.Chunk; import edu.harvard.hul.ois.jhove.module.iff.ChunkHeader; import java.io.*; /** * Class for encapsulating Exif chunks whose content consists of * a null-terminated ASCII string. * * @author Gary McGath * */ public class ExifStringChunk extends Chunk { private String id; /** * Constructor. * * @param module The WaveModule under which this was called * @param hdr The header for this chunk * @param dstrm The stream from which the WAVE data are being read */ public ExifStringChunk( ModuleBase module, ChunkHeader hdr, DataInputStream dstrm) { super(module, hdr, dstrm); id = hdr.getID(); } /** Reads a chunk and puts information into the superchunk's * Exif property. * * @return false if the chunk is structurally * invalid, otherwise true */ public boolean readChunk(RepInfo info) throws IOException { WaveModule module = (WaveModule) _module; byte[] buf = new byte[(int) bytesLeft]; ModuleBase.readByteBuf (_dstream, buf, module); String txt = new String (buf).trim (); ExifInfo exif = module.getExifInfo (); if ("erel".equals (id)) { exif.setRelatedImageFile(txt); } else if ("etim".equals (id)) { exif.setTimeCreated (txt); } else if ("ecor".equals (id)) { exif.setManufacturer(txt); } else if ("emdl".equals (id)) { exif.setModel (txt); } module.getExifInfo ().setRelatedImageFile(txt); return true; } } jhove/classes/edu/harvard/hul/ois/jhove/module/wave/ExifUserCommentChunk.java0000644000707400001440000000636410771562755026605 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.wave; import edu.harvard.hul.ois.jhove.*; import edu.harvard.hul.ois.jhove.module.WaveModule; import edu.harvard.hul.ois.jhove.module.iff.Chunk; import edu.harvard.hul.ois.jhove.module.iff.ChunkHeader; import java.io.*; /** * This class encapsulates the Exif User Comment chunk. * * @author Gary McGath * */ public class ExifUserCommentChunk extends Chunk { // 8-byte codes for encodings; all the existing recognized // encodings are representable as ASCII strings with null // padding. "UNICODE" doesn't specify whether it's UTF-8, // UTF-16, or UTF-32. private final static String asciiDes = "ASCII"; private final static String jisDes = "JIS"; private final static String unicodeDes = "UNICODE"; /** * Constructor. * * @param module The WaveModule under which this was called * @param hdr The header for this chunk * @param dstrm The stream from which the WAVE data are being read */ public ExifUserCommentChunk( ModuleBase module, ChunkHeader hdr, DataInputStream dstrm) { super(module, hdr, dstrm); } /** Reads a chunk and puts information into the superchunk's * Exif property. * * @return false if the chunk is structurally * invalid, otherwise true */ public boolean readChunk(RepInfo info) throws IOException { WaveModule module = (WaveModule) _module; if (bytesLeft < 8) { info.setMessage (new ErrorMessage ("Exif User Comment Chunk is too short")); info.setWellFormed (false); return false; } // Read the 8-byte encoding designation. byte[] buf = new byte[8]; ModuleBase.readByteBuf (_dstream, buf, module); String encoding = new String (buf).trim (); bytesLeft -= 8; String charset = null; // Here we have to do some guessing if the character set isn't // ASCII. There are three different Unicode encodings and // even more JIS variants. if (asciiDes.equals (encoding)) { charset = "US-ASCII"; } else if (jisDes.equals (encoding)) { charset = "EUC_JP"; } else if (unicodeDes.equals (encoding)) { charset = "UTF-16"; } // Read the comment itself. buf = new byte[(int) bytesLeft]; ModuleBase.readByteBuf (_dstream, buf, module); String text = null; try { if (charset != null) { text = new String (buf, charset); } } catch (Exception e) { // If we can't decode the charset, punt to default. } if (text == null) { text = new String (buf); } ExifInfo exif = module.getExifInfo (); module.getExifInfo ().setUserComment (text); return true; } } jhove/classes/edu/harvard/hul/ois/jhove/module/wave/ExifVersionChunk.java0000644000707400001440000000355010771562753025761 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.wave; import edu.harvard.hul.ois.jhove.*; import edu.harvard.hul.ois.jhove.module.WaveModule; import edu.harvard.hul.ois.jhove.module.iff.Chunk; import edu.harvard.hul.ois.jhove.module.iff.ChunkHeader; import java.io.*; /** * Chunk for Exif version information. * This chunk may occur only within a LIST chunk of type * "exif". * * @author Gary McGath * */ public class ExifVersionChunk extends Chunk { /** * Constructor. * * @param module The WaveModule under which this was called * @param hdr The header for this chunk * @param dstrm The stream from which the WAVE data are being read */ public ExifVersionChunk( ModuleBase module, ChunkHeader hdr, DataInputStream dstrm) { super(module, hdr, dstrm); } /** Reads a chunk and puts information into the superchunk's * Exif property. * * @return false if the chunk is structurally * invalid, otherwise true */ public boolean readChunk(RepInfo info) throws IOException { WaveModule module = (WaveModule) _module; if (bytesLeft != 4) { info.setMessage (new ErrorMessage ("Incorrect length for Exif Version Chunk")); info.setWellFormed (false); return false; } byte[] buf = new byte[4]; ModuleBase.readByteBuf (_dstream, buf, module); String txt = new String (buf); module.getExifInfo ().setExifVersion(txt); return true; } } jhove/classes/edu/harvard/hul/ois/jhove/module/wave/FactChunk.java0000644000707400001440000000365710771562755024407 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.wave; import java.io.DataInputStream; import java.io.IOException; import edu.harvard.hul.ois.jhove.*; import edu.harvard.hul.ois.jhove.module.WaveModule; import edu.harvard.hul.ois.jhove.module.iff.Chunk; import edu.harvard.hul.ois.jhove.module.iff.ChunkHeader; /** * Implementation of the WAVE Fact Chunk. * The Fact chunk contains information specific to the * compression scheme. * * @author Gary McGath * */ public class FactChunk extends Chunk { /** * Constructor. * * @param module The WaveModule under which this was called * @param hdr The header for this chunk * @param dstrm The stream from which the WAVE data are being read */ public FactChunk( ModuleBase module, ChunkHeader hdr, DataInputStream dstrm) { super(module, hdr, dstrm); } /** Reads a chunk and puts a Fact Property into * the RepInfo object. * * @return false if the chunk is structurally * invalid, otherwise true */ public boolean readChunk(RepInfo info) throws IOException { WaveModule module = (WaveModule) _module; Property sizeProp = new Property ("Size", PropertyType.LONG, new Long(bytesLeft)); module.addWaveProperty (new Property ("Fact", PropertyType.PROPERTY, sizeProp)); long numSamples = module.readUnsignedInt (_dstream); module.addSamples (numSamples); bytesLeft -= 4; module.skipBytes (_dstream, (int) bytesLeft, module); return true; } } jhove/classes/edu/harvard/hul/ois/jhove/module/wave/FormatChunk.java0000644000707400001440000002101210771562754024742 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College * **********************************************************************/ package edu.harvard.hul.ois.jhove.module.wave; import java.io.DataInputStream; import java.io.IOException; import edu.harvard.hul.ois.jhove.*; import edu.harvard.hul.ois.jhove.module.WaveModule; import edu.harvard.hul.ois.jhove.module.iff.Chunk; import edu.harvard.hul.ois.jhove.module.iff.ChunkHeader; /** * Implementation of the WAVE Format Chunk. * * @author Gary McGath * */ public class FormatChunk extends Chunk { /** Compression code for original Microsoft PCM */ public final static int WAVE_FORMAT_PCM = 1; /** Compression code for MPEG */ public final static int WAVE_FORMAT_MPEG = 0X50; /** Compression code for Microsoft Extensible Wave Format */ public final static int WAVE_FORMAT_EXTENSIBLE = 0XFFFE; /** Table of lossless compression codes. */ private final static int[] losslessCodecs = { 0X163, // WMA lossless 0X1971 // Sonic foundry lossless }; /** * Constructor. * * @param module The WaveModule under which this was called * @param hdr The header for this chunk * @param dstrm The stream from which the WAVE data are being read */ public FormatChunk( WaveModule module, ChunkHeader hdr, DataInputStream dstrm) { super(module, hdr, dstrm); } /** Reads a chunk and puts appropriate Properties into * the RepInfo object. * * @return false if the chunk is structurally * invalid, otherwise true */ public boolean readChunk(RepInfo info) throws IOException { WaveModule module = (WaveModule) _module; int validBitsPerSample = -1; byte[] subformat = null; long channelMask = -1; int compressionCode = module.readUnsignedShort (_dstream); module.setCompressionCode (compressionCode); int numChannels = module.readUnsignedShort (_dstream); long sampleRate = module.readUnsignedInt (_dstream); module.setSampleRate (sampleRate); long bytesPerSecond = module.readUnsignedInt (_dstream); int blockAlign = module.readUnsignedShort (_dstream); module.setBlockAlign (blockAlign); int bitsPerSample = module.readUnsignedShort (_dstream); bytesLeft -= 16; byte[] extraBytes = null; if (bytesLeft > 0) { int extraFormatBytes = module.readUnsignedShort (_dstream); extraBytes = new byte[extraFormatBytes]; if (compressionCode == WAVE_FORMAT_EXTENSIBLE && bytesLeft >= 22) { // This is -- or should be -- WAVEFORMATEXTENSIBLE. // Need to do some additional checks on profile satisfaction. boolean wfe = true; // accept tentatively // The next word may be valid bits per sample, samples // per block, or merely "reserved". Which one it is // apparently depends on the compression format. I really // can't figure out how to tell which it is without // exhaustively researching all compression formats. validBitsPerSample = module.readUnsignedShort (_dstream); channelMask = module.readUnsignedInt (_dstream); // The subformat is a GUID subformat = new byte[20]; ModuleBase.readByteBuf(_dstream, subformat, module); // Nitpicking profile requirements if ((((bitsPerSample + 7) / 8) * numChannels) != blockAlign) { wfe = false; } if ((bitsPerSample % 8) != 0) { // So why was that fancy ceiling arithmetic needed? // So it can be the same calculation as with WaveFormatEx. wfe = false; } if (validBitsPerSample > bitsPerSample) { wfe = false; } if (wfe) { module.setWaveFormatExtensible(true); } } else { if (compressionCode != WAVE_FORMAT_PCM || (((bitsPerSample + 7) / 8) * numChannels) == blockAlign) { module.setWaveFormatEx (true); } ModuleBase.readByteBuf (_dstream, extraBytes, module); } // Possible pad to maintain even alignment if ((extraFormatBytes & 1) != 0) { _module.skipBytes (_dstream, 1, module); } } else { // no extra bytes signifies the PCM profile. In this // case, the compression code also needs to be 1 (Microsoft // PCM). if (compressionCode == WAVE_FORMAT_PCM && (((bitsPerSample + 7) / 8) * numChannels) == blockAlign) { module.setPCMWaveFormat(true); } } // Set a TENTATIVE flag if this chunk satisfies the broadcast // wave format. if (compressionCode == WAVE_FORMAT_PCM || compressionCode == WAVE_FORMAT_MPEG) { module.setBroadcastWave (true); } module.addWaveProperty (module.addIntegerProperty ("CompressionCode", compressionCode, WaveStrings.COMPRESSION_FORMAT, WaveStrings.COMPRESSION_INDEX)); AESAudioMetadata aes = module.getAESMetadata (); String compName = WaveStrings.COMPRESSION_FORMAT [WaveStrings.COMPRESSION_INDEX[compressionCode]]; aes.setAudioDataEncoding(compName); aes.setNumChannels(numChannels); setChannelLocations (aes, numChannels); aes.setSampleRate(sampleRate); aes.setBitDepth(bitsPerSample); // Check which codecs are non-lossy String qual = "LOSSY"; for (int i = 0; i < losslessCodecs.length; i++) { if (compressionCode == losslessCodecs[i]) { qual = "CODE_REGENERATING"; } } if (compressionCode == WAVE_FORMAT_PCM) { aes.clearBitrateReduction (); } else { aes.setBitrateReduction (compName, "", "", "", qual, Long.toString (bytesPerSecond), "FIXED"); } module.addWaveProperty (new Property ("AverageBytesPerSecond", PropertyType.LONG, new Long (bytesPerSecond))); module.addWaveProperty (new Property ("BlockAlign", PropertyType.INTEGER, new Integer (blockAlign))); if (extraBytes != null) { module.addWaveProperty (new Property ("ExtraFormatBytes", PropertyType.BYTE, PropertyArity.ARRAY, extraBytes)); } if (validBitsPerSample != -1) { // Should this property be called something like // ValidBitsPersampleOrSamplesPerBlock? module.addWaveProperty (new Property ("ValidBitsPerSample", PropertyType.INTEGER, new Integer (validBitsPerSample))); } if (channelMask != -1) { module.addWaveProperty (new Property ("ChannelMask", PropertyType.LONG, new Long (channelMask))); } if (subformat != null) { module.addWaveProperty (new Property ("Subformat", PropertyType.BYTE, PropertyArity.ARRAY, subformat)); } return true; } /* Set default channel assignments. This is fairly simple, * but it's helpful to keep the same structure as the equivalent * CommonChunk.setChannelLocations function. */ private void setChannelLocations (AESAudioMetadata aes, int numChannels) { String[] mapLoc = new String[numChannels]; switch (numChannels) { case 2: mapLoc[0] = "LEFT"; mapLoc[1] = "RIGHT"; break; // If we get some other number of channels, punt. default: for (int i = 0; i < numChannels; i++) { mapLoc[i] = "UNKNOWN"; } } aes.setMapLocations(mapLoc); } } jhove/classes/edu/harvard/hul/ois/jhove/module/wave/InstrumentChunk.java0000644000707400001440000000614110771562753025667 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.wave; import java.io.DataInputStream; import java.io.IOException; import edu.harvard.hul.ois.jhove.*; import edu.harvard.hul.ois.jhove.module.WaveModule; import edu.harvard.hul.ois.jhove.module.iff.Chunk; import edu.harvard.hul.ois.jhove.module.iff.ChunkHeader; /** * Implementation of the WAVE Instrument Chunk, which * gives information about a MIDI instrument. Similar to * the Sample chunk or the AIFF Instrument chunk, but simpler * than either. * * @author Gary McGath * */ public class InstrumentChunk extends Chunk { /** * Constructor. * * @param module The WaveModule under which this was called * @param hdr The header for this chunk * @param dstrm The stream from which the WAVE data are being read */ public InstrumentChunk( ModuleBase module, ChunkHeader hdr, DataInputStream dstrm) { super(module, hdr, dstrm); } /** Reads a chunk and puts an Instrument property into * the RepInfo object. * * * @return false if the chunk is structurally * invalid, otherwise true */ public boolean readChunk(RepInfo info) throws IOException { WaveModule module = (WaveModule) _module; int unshiftedNote = ModuleBase.readUnsignedByte (_dstream, _module); int fineTune = ModuleBase.readSignedByte (_dstream, _module); int gain = ModuleBase.readSignedByte (_dstream, _module); int lowNote = ModuleBase.readUnsignedByte (_dstream, _module); int highNote = ModuleBase.readUnsignedByte (_dstream, _module); int lowVelocity = ModuleBase.readUnsignedByte (_dstream, _module); int highVelocity = ModuleBase.readUnsignedByte (_dstream, _module); Property[] propArr = new Property[7]; propArr[0] = new Property ("UnshiftedNote", PropertyType.INTEGER, new Integer (unshiftedNote)); propArr[1] = new Property ("FineTune", PropertyType.INTEGER, new Integer (fineTune)); propArr[2] = new Property ("Gain", PropertyType.INTEGER, new Integer (gain)); propArr[3] = new Property ("LowNote", PropertyType.INTEGER, new Integer (lowNote)); propArr[4] = new Property ("HighNote", PropertyType.INTEGER, new Integer (highNote)); propArr[5] = new Property ("LowVelocity", PropertyType.INTEGER, new Integer (lowVelocity)); propArr[6] = new Property ("HighVelocity", PropertyType.INTEGER, new Integer (highVelocity)); module.addWaveProperty (new Property ("Instrument", PropertyType.PROPERTY, PropertyArity.ARRAY, propArr)); return true; } } jhove/classes/edu/harvard/hul/ois/jhove/module/wave/LabelChunk.java0000644000707400001440000000267710771562755024552 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.wave; import java.io.DataInputStream; import java.io.IOException; import edu.harvard.hul.ois.jhove.*; import edu.harvard.hul.ois.jhove.module.WaveModule; import edu.harvard.hul.ois.jhove.module.iff.ChunkHeader; /** * Implementation of the WAVE Label Chunk. * * @author Gary McGath * */ public class LabelChunk extends SimpleTextChunk { /** * Constructor. * * @param module The WaveModule under which this was called * @param hdr The header for this chunk * @param dstrm The stream from which the WAVE data are being read */ public LabelChunk( ModuleBase module, ChunkHeader hdr, DataInputStream dstrm) { super(module, hdr, dstrm); } /** Reads a chunk and adds to the module's list of labels. * * @return false if the chunk is structurally * invalid, otherwise true */ public boolean readChunk(RepInfo info) throws IOException { WaveModule module = (WaveModule) _module; Property p = readTextProp (module, "Label"); module.addLabel (p); return true; } } jhove/classes/edu/harvard/hul/ois/jhove/module/wave/LabeledTextChunk.java0000644000707400001440000000615110771562753025715 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College * **********************************************************************/ package edu.harvard.hul.ois.jhove.module.wave; import java.io.*; import java.util.*; import edu.harvard.hul.ois.jhove.*; import edu.harvard.hul.ois.jhove.module.WaveModule; import edu.harvard.hul.ois.jhove.module.iff.Chunk; import edu.harvard.hul.ois.jhove.module.iff.ChunkHeader; /** * * The Labelled Text Chunk, which can occur only in an Associated Data * List. * * @author Gary McGath * */ public class LabeledTextChunk extends Chunk { /** * Constructor. * * @param module The WaveModule under which this was called * @param hdr The header for this chunk * @param dstrm The stream from which the WAVE data are being read */ public LabeledTextChunk( ModuleBase module, ChunkHeader hdr, DataInputStream dstrm) { super(module, hdr, dstrm); } /** Reads a chunk and puts an MPEG Property into * the RepInfo object. * * @return false if the chunk is structurally * invalid, otherwise true */ public boolean readChunk(RepInfo info) throws IOException { WaveModule module = (WaveModule) _module; long cuePointID = module.readUnsignedInt (_dstream); long sampleLength = module.readUnsignedInt (_dstream); long purposeID = module.readUnsignedInt (_dstream); int country = module.readUnsignedShort (_dstream); int language = module.readUnsignedShort (_dstream); int dialect = module.readUnsignedShort (_dstream); int codePage = module.readUnsignedShort (_dstream); byte[] buf = new byte[(int) (bytesLeft - 20)]; ModuleBase.readByteBuf(_dstream, buf, module); String text = new String (buf).trim (); // Make the information into a Property. List plist = new ArrayList (10); plist.add (new Property ("CuePointID", PropertyType.LONG, new Long (cuePointID))); plist.add (new Property ("SampleLength", PropertyType.LONG, new Long (sampleLength))); plist.add (new Property ("PurposeID", PropertyType.LONG, new Long (purposeID))); plist.add (new Property ("Country", PropertyType.INTEGER, new Integer (country))); plist.add (new Property ("Language", PropertyType.INTEGER, new Integer (language))); plist.add (new Property ("Dialect", PropertyType.INTEGER, new Integer (dialect))); plist.add (new Property ("CodePage", PropertyType.INTEGER, new Integer (codePage))); plist.add (new Property ("Text", PropertyType.STRING, text)); module.addLabeledText(new Property ("LabeledTextItem", PropertyType.PROPERTY, PropertyArity.LIST, plist)); return true; } } jhove/classes/edu/harvard/hul/ois/jhove/module/wave/LinkChunk.java0000644000707400001440000000743610771562752024423 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College * **********************************************************************/ package edu.harvard.hul.ois.jhove.module.wave; import edu.harvard.hul.ois.jhove.module.iff.*; import edu.harvard.hul.ois.jhove.*; import edu.harvard.hul.ois.jhove.module.WaveModule; import java.io.*; import java.util.*; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParserFactory; import org.xml.sax.SAXException; import org.xml.sax.XMLReader; /** * Implementation of the WAVE Link Chunk, as specified in * Specification of the Broadcast Wave Format: * A format for audio data files in broadcasting; * Supplement 4: <link> Chunk * (European Broadcasting Union) * * @author Gary McGath * */ public class LinkChunk extends Chunk { /** * Constructor. * * @param module The WaveModule under which this was called * @param hdr The header for this chunk * @param dstrm The stream from which the WAVE data are being read */ public LinkChunk ( ModuleBase module, ChunkHeader hdr, DataInputStream dstrm) { super(module, hdr, dstrm); } /** Reads a chunk and puts a BroadcastAudioExtension Property into * the RepInfo object. * * @return false if the chunk is structurally * invalid, otherwise true */ public boolean readChunk(RepInfo info) throws IOException { WaveModule module = (WaveModule) _module; // We read the XML into a byte array, then use a ByteArrayXMPSource // to parse it. This isn't XMP, but that code provides a ready-made // way to generate an XML InputSource. byte[] buf = new byte[(int) bytesLeft]; ModuleBase.readByteBuf (_dstream, buf, module); ByteArrayInputStream bais = new ByteArrayInputStream (buf); ByteArrayXMPSource xs = new ByteArrayXMPSource (bais); try { // Create an InputSource to feed the parser. SAXParserFactory factory = SAXParserFactory.newInstance(); factory.setNamespaceAware (true); XMLReader parser = factory.newSAXParser ().getXMLReader (); LinkChunkHandler handler = new LinkChunkHandler (); parser.setContentHandler (handler); parser.parse (xs); List fileNames = handler.getFileNames (); String id = handler.getID(); if (!fileNames.isEmpty ()) { List plist = new ArrayList (2); plist.add (new Property ("FileNames", PropertyType.STRING, PropertyArity.LIST, fileNames)); if (id != null) { plist.add (new Property ("ID", PropertyType.STRING, id)); } module.addWaveProperty (new Property ("Link", PropertyType.PROPERTY, PropertyArity.LIST, plist)); } } catch (SAXException se) { info.setMessage (new ErrorMessage ("SAXException in reading Link Chunk")); info.setValid (false); return true; } catch (ParserConfigurationException pe) { info.setMessage (new ErrorMessage ("ParserConfigurationException in reading Link Chunk")); info.setValid (false); return true; } return true; } } jhove/classes/edu/harvard/hul/ois/jhove/module/wave/LinkChunkHandler.java0000644000707400001440000000531310771562753025712 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College * **********************************************************************/ package edu.harvard.hul.ois.jhove.module.wave; import java.util.*; import org.xml.sax.*; import org.xml.sax.helpers.DefaultHandler; /** * * This handler parses the data of a WAVE List chunk. * * @author Gary McGath * */ public class LinkChunkHandler extends DefaultHandler { private StringBuffer _content; private int state; private List fileNames; private String id; private final static int STATE_DEFAULT = 0, STATE_FILE = 1, STATE_ID = 2; public LinkChunkHandler () { state = STATE_DEFAULT; _content = new StringBuffer (); fileNames = new LinkedList (); id = null; } /** Accessor for getting file name list. The value returned * is meaningful only after parsing. The value returned is * guaranteed not to be null, but may be empty. */ public List getFileNames () { return fileNames; } /** Accessor for getting the ID element. The value returned * may be null, as the ID element is optional. */ public String getID () { return id; } /** * Looks for the first element encountered. Stores * its name as the value to be returned by getRoot, * qualified name by preference, local name if the * qualified name isn't available. */ public void startElement (String namespaceURI, String localName, String qualifiedName, Attributes atts) throws SAXException { if ("FILE".equals (qualifiedName)) { state = STATE_FILE; } else if ("ID".equals (qualifiedName)) { state = STATE_ID; } } /** * SAX parser callback method for PC text. */ public void characters (char [] ch, int start, int length) throws SAXException { _content.append (ch, start, length); } /** * SAX parser callback method. */ public void endElement (String namespaceURI, String localName, String rawName) throws SAXException { switch (state) { case STATE_FILE: fileNames.add (_content.toString ()); break; case STATE_ID: id = _content.toString (); break; case STATE_DEFAULT: default: break; } state = STATE_DEFAULT; _content.setLength (0); } } jhove/classes/edu/harvard/hul/ois/jhove/module/wave/ListInfoChunk.java0000644000707400001440000001556011065257327025246 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.wave; import java.io.DataInputStream; import java.io.IOException; import java.util.*; import edu.harvard.hul.ois.jhove.*; import edu.harvard.hul.ois.jhove.module.WaveModule; import edu.harvard.hul.ois.jhove.module.iff.*; /** * Implementation of the WAVE LIST chunk. * * Two chunk types, 'exif' and 'INFO', are supported; * other list types will be reported as unknown * and treated as an error. * * @author Gary McGath * */ public class ListInfoChunk extends Superchunk { /** * Constructor. * * @param module The WaveModule under which this was called * @param hdr The header for this chunk * @param dstrm The stream from which the WAVE data are being read * @param info RepInfo object for error reporting */ public ListInfoChunk( ModuleBase module, ChunkHeader hdr, DataInputStream dstrm, RepInfo info) { super(module, hdr, dstrm, info); } /** Reads a chunk and puts appropriate information into * the RepInfo object. * * @return false if the chunk is structurally * invalid, otherwise true * */ public boolean readChunk(RepInfo info) throws IOException { boolean isInfo = false; boolean isExif = false; String typeID = ((WaveModule) _module).read4Chars(_dstream); bytesLeft -= 4; if ("INFO".equals (typeID)) { return readInfoChunk (info); } else if ("exif".equals (typeID)) { return readExifChunk (info); } else if ("adtl".equals (typeID)) { return readAdtlChunk (info); } else { info.setMessage (new ErrorMessage ("Unknown list type " + typeID + " in List Chunk", _module.getNByte())); info.setWellFormed (false); return false; } } private boolean readInfoChunk (RepInfo info) throws IOException { List listInfoProps = new LinkedList (); WaveModule module = (WaveModule) _module; // The set of subchunks is somewhat // open-ended, but apparently all are identical in format, consisting // of a null-terminated string. These are subsumed under // ListInfoTextChunk. We accumulate them into a List of Properties. for (;;) { ChunkHeader chunkh = getNextChunkHeader (); if (chunkh == null) { break; } Chunk chunk = null; String id = chunkh.getID(); int chunkSize = (int) chunkh.getSize (); chunk = new ListInfoTextChunk (_module, chunkh, _dstream, listInfoProps, this); if (chunk == null) { _module.skipBytes (_dstream, (int) chunkSize, _module); info.setMessage (new InfoMessage ("Chunk type '" + id + "' in List Info Chunk ignored")); } else if (!chunk.readChunk (info)) { return false; } if ((chunkSize & 1) != 0) { // Must come out to an even byte boundary _module.skipBytes (_dstream, 1, _module); --bytesLeft; } } if (!listInfoProps.isEmpty ()) { module.addListInfo (listInfoProps); } return true; } /* The Exif chunk, unlike the Info chunk, has subchunks which aren't * homogeneous. */ private boolean readExifChunk (RepInfo info) throws IOException { List exifProps = new LinkedList (); WaveModule module = (WaveModule) _module; module.setExifInfo (new ExifInfo ()); for (;;) { ChunkHeader chunkh = getNextChunkHeader (); if (chunkh == null) { break; } Chunk chunk = null; String id = chunkh.getID(); int chunkSize = (int) chunkh.getSize (); if ("ever".equals (id)) { chunk = new ExifVersionChunk (_module, chunkh, _dstream); } else if ("erel".equals (id) || "etim".equals (id) || "ecor".equals (id) || "emdl".equals (id)) { chunk = new ExifStringChunk (_module, chunkh, _dstream); } else if ("emnt".equals (id)) { } else if ("eucm".equals (id)) { } if (chunk == null) { _module.skipBytes (_dstream, (int) chunkSize, _module); info.setMessage (new InfoMessage ("Chunk type '" + id + "' in Associated Data Chunk ignored")); } else if (!chunk.readChunk (info)) { return false; } } return false; } /** Reads the chunk and its nested chunks, and puts appropriate * properties into the RepInfo object. * * @return false if the chunk or a nested chunk * is structurally * invalid, otherwise true */ public boolean readAdtlChunk(RepInfo info) throws IOException { WaveModule module = (WaveModule) _module; for (;;) { ChunkHeader chunkh = getNextChunkHeader (); if (chunkh == null) { break; } Chunk chunk = null; // The chunk list can include Labels, Notes, and // Labelled Text. String id = chunkh.getID(); int chunkSize = (int) chunkh.getSize (); if (id.equals ("labl")) { chunk = new LabelChunk (_module, chunkh, _dstream); } else if (id.equals ("note")) { chunk = new NoteChunk (_module, chunkh, _dstream); } else if (id.equals ("ltxt")) { chunk = new LabeledTextChunk (_module, chunkh, _dstream); } if (chunk == null) { _module.skipBytes (_dstream, (int) chunkSize, _module); info.setMessage (new InfoMessage ("Chunk type '" + id + "' in Associated Data Chunk ignored")); } else if (!chunk.readChunk (info)) { return false; } if ((chunkSize & 1) != 0) { // Must come out to an even byte boundary _module.skipBytes (_dstream, 1, _module); --bytesLeft; } } return true; } } jhove/classes/edu/harvard/hul/ois/jhove/module/wave/ListInfoTextChunk.java0000644000707400001440000001127010771562753026112 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College * **********************************************************************/ package edu.harvard.hul.ois.jhove.module.wave; import java.io.DataInputStream; import java.io.IOException; import java.util.*; import edu.harvard.hul.ois.jhove.*; import edu.harvard.hul.ois.jhove.module.WaveModule; import edu.harvard.hul.ois.jhove.module.iff.*; /** * * This implements any of the subchunks of the ListInfoChunk * (a LIST chunk with a list type of INFO). * All such chunks are identical in format, consisting of a * null-terminated string. About 17 chunk ID's are recognized; * others will be ignored. * * @author Gary McGath * */ public class ListInfoTextChunk extends Chunk { private ListInfoChunk _parent; private List _listInfoProps; String _chunkID; /** * Constructor. * * @param module The WaveModule under which this was called * @param hdr The header for this chunk * @param dstrm The stream from which the WAVE data are being read * @param listInfoProps A List of the Properties associated with the * ListInfoChunk * @param parent The ListInfoChunk within which this Chunk occurs */ public ListInfoTextChunk( ModuleBase module, ChunkHeader hdr, DataInputStream dstrm, List listInfoProps, ListInfoChunk parent) { super(module, hdr, dstrm); _parent = parent; _chunkID = hdr.getID (); _listInfoProps = listInfoProps; } /** Reads a chunk and..... * * @return false if the chunk is structurally * invalid, otherwise true */ public boolean readChunk(RepInfo info) throws IOException { WaveModule module = (WaveModule) _module; byte[] buf = new byte[(int) bytesLeft]; ModuleBase.readByteBuf (_dstream, buf, module); String txt = new String (buf); txt = txt.trim (); // remove trailing null String propName = null; // Add the string to the property list if we can identify it. if ("IARL".equals (_chunkID)) { propName = "ArchivalLocation"; } else if ("IART".equals (_chunkID)) { propName = "Artist"; } else if ("ICMS".equals (_chunkID)) { propName = "Commissioned"; } else if ("ICMT".equals (_chunkID)) { propName = "Comments"; } else if ("ICOP".equals (_chunkID)) { propName = "Copyright"; } else if ("ICRD".equals (_chunkID)) { propName = "CreationDate"; } else if ("ICRP".equals (_chunkID)) { propName = "Cropped"; } else if ("IDIM".equals (_chunkID)) { propName = "Dimensions"; } else if ("IDPI".equals (_chunkID)) { propName = "DotsPerInch"; } else if ("IENG".equals (_chunkID)) { propName = "Engineer"; } else if ("IGNR".equals (_chunkID)) { propName = "Genre"; } else if ("IKEY".equals (_chunkID)) { propName = "Keywords"; } else if ("ILGT".equals (_chunkID)) { propName = "Lightness"; } else if ("IMED".equals (_chunkID)) { propName = "Medium"; } else if ("INAM".equals (_chunkID)) { propName = "Name"; } else if ("IPLT".equals (_chunkID)) { propName = "PaletteSetting"; } else if ("IPRD".equals (_chunkID)) { propName = "Product"; } else if ("ISBJ".equals (_chunkID)) { propName = "Subject"; } else if ("ISFT".equals (_chunkID)) { propName = "Software"; } else if ("ISHP".equals (_chunkID)) { propName = "Sharpness"; } else if ("ISRC".equals (_chunkID)) { propName = "Source"; } else if ("ISRF".equals (_chunkID)) { propName = "SourceForm"; } else if ("ITCH".equals (_chunkID)) { propName = "Technician"; // making this a scratch file? } if (propName != null) { _listInfoProps.add (new Property (propName, PropertyType.STRING, txt)); } else { info.setMessage (new InfoMessage ("Chunk type '" + _chunkID + "' in List Info Chunk ignored")); } return true; } } jhove/classes/edu/harvard/hul/ois/jhove/module/wave/MpegChunk.java0000644000707400001440000000517310771562754024414 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.wave; import java.io.IOException; import edu.harvard.hul.ois.jhove.RepInfo; import edu.harvard.hul.ois.jhove.module.iff.*; import edu.harvard.hul.ois.jhove.*; import edu.harvard.hul.ois.jhove.module.WaveModule; import java.io.*; import java.util.*; /** * Implementation of the WAVE MPEG Audio Extension Chunk. * * @author Gary McGath * */ public class MpegChunk extends Chunk { /** * Constructor. * * @param module The WaveModule under which this was called * @param hdr The header for this chunk * @param dstrm The stream from which the WAVE data are being read */ public MpegChunk ( ModuleBase module, ChunkHeader hdr, DataInputStream dstrm) { super(module, hdr, dstrm); } /** Reads a chunk and puts an MPEG Property into * the RepInfo object. * * @return false if the chunk is structurally * invalid, otherwise true */ public boolean readChunk(RepInfo info) throws IOException { WaveModule module = (WaveModule) _module; int soundInformation = module.readUnsignedShort(_dstream); int frameSize = module.readUnsignedShort (_dstream); int ancillaryDataLength = module.readUnsignedShort (_dstream); int ancillaryDataDef = module.readUnsignedShort (_dstream); module.skipBytes (_dstream, 4, module); // reserved List propList = new ArrayList (); propList.add (module.buildBitmaskProperty(soundInformation, "SoundInformation", WaveStrings.SOUND_INFORMATION_1, WaveStrings.SOUND_INFORMATION_0)); propList.add (new Property ("FrameSize", PropertyType.INTEGER, new Integer (frameSize))); propList.add (new Property ("AncillaryDataLength", PropertyType.INTEGER, new Integer (ancillaryDataLength))); propList.add (module.buildBitmaskProperty(ancillaryDataDef, "AncillaryDataDef", WaveStrings.ANCILLARY_DEF_1, WaveStrings.ANCILLARY_DEF_0)); module.addWaveProperty (new Property ("MPEG", PropertyType.PROPERTY, PropertyArity.LIST, propList)); return true; } } jhove/classes/edu/harvard/hul/ois/jhove/module/wave/NoteChunk.java0000644000707400001440000000267110771562752024427 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.wave; import java.io.DataInputStream; import java.io.IOException; import edu.harvard.hul.ois.jhove.*; import edu.harvard.hul.ois.jhove.module.WaveModule; import edu.harvard.hul.ois.jhove.module.iff.ChunkHeader; /** * Implementation of the WAVE Note Chunk. * * @author Gary McGath * */ public class NoteChunk extends SimpleTextChunk { /** * Constructor. * * @param module The WaveModule under which this was called * @param hdr The header for this chunk * @param dstrm The stream from which the WAVE data are being read */ public NoteChunk( ModuleBase module, ChunkHeader hdr, DataInputStream dstrm) { super(module, hdr, dstrm); } /** Reads a chunk and adds to the module's list of Notes. * * @return false if the chunk is structurally * invalid, otherwise true */ public boolean readChunk(RepInfo info) throws IOException { WaveModule module = (WaveModule) _module; Property p = readTextProp (module, "Note"); module.addNote (p); return true; } } jhove/classes/edu/harvard/hul/ois/jhove/module/wave/PeakEnvelopeChunk.java0000644000707400001440000001561310771562754026102 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.wave; import edu.harvard.hul.ois.jhove.module.iff.*; import edu.harvard.hul.ois.jhove.*; import edu.harvard.hul.ois.jhove.module.WaveModule; import java.io.*; import java.util.*; /** * Implementation of the WAVE Peak Envelope ('levl') Chunk. * * @author Gary McGath * */ public class PeakEnvelopeChunk extends Chunk { /** * Constructor. * * @param module The WaveModule under which this was called * @param hdr The header for this chunk * @param dstrm The stream from which the WAVE data are being read */ public PeakEnvelopeChunk ( ModuleBase module, ChunkHeader hdr, DataInputStream dstrm) { super(module, hdr, dstrm); } /** Reads a chunk and puts a BroadcastAudioExtension Property into * the RepInfo object. * * @return false if the chunk is structurally * invalid, otherwise true */ public boolean readChunk(RepInfo info) throws IOException { WaveModule module = (WaveModule) _module; long version = module.readUnsignedInt (_dstream); long format = module.readUnsignedInt (_dstream); long pointsPerValue = module.readUnsignedInt (_dstream); long blockSize = module.readUnsignedInt (_dstream); long peakChannels = module.readUnsignedInt (_dstream); long numPeakFrames = module.readUnsignedInt (_dstream); long posPeakOfPeaks = module.readUnsignedInt (_dstream); long offsetToPeaks = module.readUnsignedInt (_dstream); byte[] buf28 = new byte[28]; ModuleBase.readByteBuf (_dstream, buf28, module); String timestamp = byteBufString (buf28); module.skipBytes (_dstream, 60, module); // The format of the peak data depends on the value of // format and pointsPerValue. If format = 1, points are // unsigned byte. If format = 2, points are unsigned short. // The number of points per peak value is equal to the // value of pointsPerValue, which must be 1 or 2. Property peaksProp = null; if (bytesLeft > 120) { int pointBytes = (int) (bytesLeft - 120); int nPoints = 0; int nValues = 0; if (format == 1) { nPoints = pointBytes; } else if (format == 2) { nPoints = pointBytes / 2; } else { info.setValid (false); info.setMessage (new ErrorMessage ("Invalid format value in Peak Envelope Chunk")); } if (pointsPerValue == 1) { nValues = nPoints; } else if (pointsPerValue == 2) { nValues = nPoints / 2; } else { info.setValid (false); info.setMessage (new ErrorMessage ("Invalid pointsPerValue in Peak Envelope Chunk")); } if (info.getValid() == RepInfo.FALSE) { module.skipBytes (_dstream, (int) bytesLeft - 120, module); return true; } // We have two different kinds of property depending on // pointsPerValue. if (pointsPerValue == 2) { Property[] pointArray = new Property[nValues]; for (int i = 0; i < nValues; i++) { int[] point = new int[2]; pointArray[i] = new Property ("Point", PropertyType.INTEGER, PropertyArity.ARRAY, point); if (format == 1) { point[0] = ModuleBase.readUnsignedByte (_dstream, module); point[1] = ModuleBase.readUnsignedByte (_dstream, module); } else { point[0] = module.readUnsignedShort (_dstream); point[1] = module.readUnsignedShort (_dstream); } } peaksProp = new Property ("PeakEnvelopeData", PropertyType.PROPERTY, PropertyArity.ARRAY, pointArray); } else { // 1 point per value int[] pointArray = new int[nValues]; for (int i = 0; i < nValues; i++) { if (format == 1) { pointArray[i] = ModuleBase.readUnsignedByte (_dstream, module); } else { pointArray[i] = module.readUnsignedShort (_dstream); } } peaksProp = new Property ("PeakEnvelopeData", PropertyType.INTEGER, PropertyArity.ARRAY, pointArray); } } // Now put the whole mess together as a List of Properties. List plist = new ArrayList (20); plist.add (new Property ("Version", PropertyType.LONG, new Long (version))); plist.add (new Property ("Format", PropertyType.LONG, new Long (format))); plist.add (new Property ("PointsPerValue", PropertyType.LONG, new Long (pointsPerValue))); plist.add (new Property ("BlockSize", PropertyType.LONG, new Long (blockSize))); plist.add (new Property ("PeakChannels", PropertyType.LONG, new Long (peakChannels))); plist.add (new Property ("NumPeakFrames", PropertyType.LONG, new Long (numPeakFrames))); plist.add (new Property ("PosPeakOfPeaks", PropertyType.LONG, new Long (posPeakOfPeaks))); plist.add (new Property ("OffsetToPeaks", PropertyType.LONG, new Long (offsetToPeaks))); if (timestamp.length () > 0) { plist.add (new Property ("Timestamp", PropertyType.STRING, timestamp)); } if (peaksProp != null) { plist.add (peaksProp); } module.addWaveProperty (new Property ("PeakEnvelope", PropertyType.PROPERTY, PropertyArity.LIST, plist)); return true; } } jhove/classes/edu/harvard/hul/ois/jhove/module/wave/SampleChunk.java0000644000707400001440000001511510771562755024743 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.wave; import java.io.DataInputStream; import java.io.IOException; import edu.harvard.hul.ois.jhove.*; import edu.harvard.hul.ois.jhove.module.WaveModule; import edu.harvard.hul.ois.jhove.module.iff.Chunk; import edu.harvard.hul.ois.jhove.module.iff.ChunkHeader; /** * Implementation of the WAVE Sample (or Sampler) Chunk, which * gives information about a MIDI sample. * * @author Gary McGath * */ public class SampleChunk extends Chunk { /** * Constructor. * * @param module The WaveModule under which this was called * @param hdr The header for this chunk * @param dstrm The stream from which the WAVE data are being read */ public SampleChunk( ModuleBase module, ChunkHeader hdr, DataInputStream dstrm) { super(module, hdr, dstrm); } /** Reads a chunk and puts a Sample property into * the RepInfo object. * * It isn't clear whether multiple * Sample chunks are allowed (representing different sound samples * for different notes or note ranges). This module assumes * they are, so it constructs a Samples property, consisting * of a list of Sample properties. * * @return false if the chunk is structurally * invalid, otherwise true */ public boolean readChunk(RepInfo info) throws IOException { WaveModule module = (WaveModule) _module; // read MMA manufacturer and product codes (which we probably won't // try to resolve) long manufacturer = module.readUnsignedInt (_dstream); long product = module.readUnsignedInt (_dstream); // sample time in nanoseconds long samplePeriod = module.readUnsignedInt (_dstream); // read midi unity note (1-127, so why does it get 4 bytes?) long unityNote = module.readUnsignedInt (_dstream); // MIDI pitch fraction. This is apparently a fixed-point // number representing a value between 0 and 1. long pitchFraction = module.readUnsignedInt (_dstream); // Get SMPTE format. Maximum value is 30, but it also gets 4 bytes. long smpteFormat = module.readUnsignedInt (_dstream); // SMPTE offset consists of four values in a confusing mix // of signed and unsigned data. The web page I'm working from // says the frame offset is an unsigned value from 0 to -1. int sampleOffsetHour = ModuleBase.readSignedByte (_dstream, module); int sampleOffsetMinute = ModuleBase.readUnsignedByte (_dstream, module); int sampleOffsetSecond = ModuleBase.readUnsignedByte (_dstream, module); int sampleOffsetFrames = ModuleBase.readSignedByte (_dstream, module); // Or should it be unsigned?? Property[] smpteArr = new Property[4]; smpteArr[0] = new Property ("Hour", PropertyType.INTEGER, new Integer (sampleOffsetHour)); smpteArr[1] = new Property ("Minute", PropertyType.INTEGER, new Integer (sampleOffsetMinute)); smpteArr[2] = new Property ("Second", PropertyType.INTEGER, new Integer (sampleOffsetSecond)); smpteArr[3] = new Property ("Frames", PropertyType.INTEGER, new Integer (sampleOffsetFrames)); int nLoops = (int) module.readUnsignedInt (_dstream); long extraBytes = module.readUnsignedInt (_dstream); // no. of extra bytes after loops // Build an array of loop properties Property[] loopProps = new Property[nLoops]; for (int i = 0; i < nLoops; i++) { long cuePoint = module.readUnsignedInt (_dstream); int type = (int) module.readUnsignedInt (_dstream); int start = (int) module.readUnsignedInt (_dstream); int end = (int) module.readUnsignedInt (_dstream); long fraction = module.readUnsignedInt (_dstream); long playCount = module.readUnsignedInt (_dstream); // Build the loop property. Property[] lp = new Property[6]; lp[0] = new Property ("CuePointID", PropertyType.LONG, new Long (cuePoint)); lp[1] = new Property ("Type", PropertyType.INTEGER, new Integer (type)); lp[2] = new Property ("Start", PropertyType.INTEGER, new Integer (start)); lp[3] = new Property ("End", PropertyType.INTEGER, new Integer (end)); lp[4] = new Property ("Fraction", PropertyType.LONG, new Long (fraction)); lp[5] = new Property ("PlayCount", PropertyType.LONG, new Long (playCount)); loopProps[i] = new Property ("Loop", PropertyType.PROPERTY, PropertyArity.ARRAY, lp); } Property[] propArr = new Property[9]; propArr[0] = new Property ("Manufacturer", PropertyType.LONG, new Long (manufacturer)); propArr[1] = new Property ("Product", PropertyType.LONG, new Long (product)); propArr[2] = new Property ("SamplePeriod", PropertyType.LONG, new Long (samplePeriod)); propArr[3] = new Property ("UnityNote", PropertyType.LONG, new Long (unityNote)); propArr[4] = new Property ("PitchFraction", PropertyType.LONG, new Long (pitchFraction)); propArr[5] = new Property ("SMPTEFormat", PropertyType.LONG, new Long (smpteFormat)); propArr[6] = new Property ("SMPTEOffset", PropertyType.PROPERTY, PropertyArity.ARRAY, smpteArr); propArr[7] = new Property ("Loops", PropertyType.PROPERTY, PropertyArity.ARRAY, loopProps); propArr[8] = new Property ("ExtraDataBytes", PropertyType.LONG, new Long (extraBytes)); module.addSample (new Property ("Sample", PropertyType.PROPERTY, PropertyArity.ARRAY, propArr)); // Skip the extra data bytes that follow // the loop data. module.skipBytes (_dstream, (int) extraBytes, _module); return true; } } jhove/classes/edu/harvard/hul/ois/jhove/module/wave/SimpleTextChunk.java0000644000707400001440000000375510771562754025626 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.wave; import java.io.DataInputStream; import java.io.IOException; import edu.harvard.hul.ois.jhove.*; //import edu.harvard.hul.ois.jhove.RepInfo; import edu.harvard.hul.ois.jhove.module.WaveModule; import edu.harvard.hul.ois.jhove.module.iff.Chunk; import edu.harvard.hul.ois.jhove.module.iff.ChunkHeader; /** * Superclass for the very similar Note and Label chunks. * * @author Gary McGath * */ public abstract class SimpleTextChunk extends Chunk { /** * Constructor. * * @param module The WaveModule under which this was called * @param hdr The header for this chunk * @param dstrm The stream from which the WAVE data are being read */ public SimpleTextChunk( ModuleBase module, ChunkHeader hdr, DataInputStream dstrm) { super(module, hdr, dstrm); } /** Reads the text item, and returns a Property containing the * cue point ID and the text. */ protected Property readTextProp (WaveModule module, String propName) throws IOException { long cueID = module.readUnsignedInt (_dstream); bytesLeft -= 4; byte[] buf = new byte[(int) bytesLeft]; ModuleBase.readByteBuf (_dstream, buf, module); String txt = new String (buf); Property[] propArr = new Property[2]; propArr[0] = new Property ("CuePointID", PropertyType.LONG, new Long (cueID)); propArr[1] = new Property ("Text", PropertyType.STRING, txt); return new Property (propName, PropertyType.PROPERTY, PropertyArity.ARRAY, propArr); } } jhove/classes/edu/harvard/hul/ois/jhove/module/wave/WaveStrings.java0000644000707400001440000005225610771562752025011 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.wave; /** * A class for holding arrays of informative strings that will go into * properties of a WAVE object. * * @author Gary McGath * */ public class WaveStrings { /** A private constructor just to make sure nobody instantiates the class by mistake. */ private WaveStrings() { } /** Strings for data compression formats; indexed by * COMPRESSION_INDEX */ public final static String[] COMPRESSION_FORMAT = { "Unknown or unspecified format", // 0 "PCM audio in integer format", // 1 "Microsoft adaptive PCM", // 2 "PCM audio in IEEE floating-point format", // 3 "VSELP codec for Windows CE 2.0 device", // 4 "IBM CVSD", // 5 "Microsoft ALAW", // 6 "Microsoft MULAW", // 7 "Microsoft DTS", // 8 "Microsoft Digital Rights Managed encrypted audio", // 9 "Microsoft Speech audio codec", // 0XA "Windows Media RT Voice", // 0xB "OKI ADPCM", // 0X10 "Intel ADPCM", // 0X11 "Videologic Systems ADPCM", // 0X12 "Sierra ADPCM", // 0X13 "Antex ADPCM", // 0X14 "DSP Solutions DIGISTD", // 0X15 "DSP Solutions DIGIFIX", // 0X16 "OKI ADPCM chips or firmware", // 0X17 "ADPCM for Jazz 16 chip set", // 0X18 "HP CU Codec", // 0X19 "HP Dynamic Voice", // 0X1A "Yamaha ADPCM", // 0X20 "Speech Compression SONARC", // 0X21 "DSP Group True Speech", // 0X22 "Echo Speech SC1", // 0X23 "Ahead Audio File AF36", // 0X24 "Audio Processing Technology APTX", // 0X25 "Ahead Audio File AF10", // 0X26 "Prosody CTI speech card", // 0X27 "Merging Technologies LRC", // 0X28 "Dolby AC2", // 0X30 "Microsoft GSM610", // 0X31 "Microsoft MSN audio codec", // 0X32 "Antex ADPCME", // 0X33 "Control Resources VQLPC", // 0X34 "DSP Solutions Digireal", // 0X35 "DSP Solutions DIGIADPCM", // 0X36 "Control Resources CR10", // 0X37 "Natural Microsystems VBXADPCM", // 0X38 "Roland RDAC", // 0X39 "Echo Speech SC3", // 0X3A "Rockwell ADPCM", // 0X3B "Rockwell DIGITALK", // 0X3C "Xebec Multimedia Solutions", // 0X3D "Antex G721 ADPCM", // 0X40 "Antex G728 CELP", // 0X41 "Microsoft MSG723", // 0X42 "Microsoft MSG723.1", // 0X43 "Microsoft MSG729", // 0X44 "Microsoft MSG726", // 0X45 "Microsoft MPEG", // 0X50 "InSoft RT24", // 0X52 "InSoft PAC", // 0X53 "ISO/MPEG Layer 3 format tag", // 0X55 "Lucent G723", // 0X59 "Cirrus Logic", // 0X60 "ESS PCM", // 0X61 "Voxware", // 0X62 "Canopus ATRACWAVEFORMAT", // 0X63 "APICOM G726 ADPCM", // 0X64 "APICOM G722 ADPCM", // 0X65 "Microsoft DSAT Display", // 0X67 "Voxware Byte Aligned", // 0X69 "Voxware AC8", // 0X70 "Voxware AC10", // 0X71 "Voxware AC16", // 0X72 "Voxware AC20", // 0X73 "Voxware RT24", // 0X74 "Voxware RT29", // 0X75 "Voxware RT29HW", // 0X76 "Voxware VR12", // 0X77 "Voxware VR18", // 0X78 "Voxware TQ40", // 0X79 "Voxware SC3 (7A)", // 0X7A "Voxware SC3 (7B)", // 0X7B "SoftSound", // 0X80 "Voxware TQ60", // 0X81 "Microsoft MSRT24", // 0X82 "AT&T G729A", // 0X83 "Motion Pixels MVI2", // 0X84 "Datafusion Systems G726", // 0X85 "Datafusion Systems GSM610", // 0X86 "Iterated Systems ISI Audio", // 0X88 "OnLive", // 0X89 "Multitude FT SX20", // 0X8A "G.721 ADPCM", // 0X8B "Convedia G729", // 0X8C "Congruency Audio Codec", // 0X8D "Siemens SBC24", // 0X91 "Sonic Foundry Dolby AC3 SPDIF", // 0X92 "MediaSonic G723", // 0x93, "Prosody CTI speech card", // 0X94, "ZyXEL ADPCM", // 0X97, "Philips LPCBB", // 0X98, "Studer Professional Audio Packed", // 0X99, "Phony Talk", // 0XA0, "Racal Recorder GSM", // 0XA1, "Racal Recorder G720.a", // 0XA2, "Racal G723.1", // 0XA3, "Racal Tetra ACELP", // 0XA4, "NEC AAC", // 0XB0, "Rhetorex ADPCM wave format type", // 0X100, "BeCubed IRAT", // 0x101, "Vivo G723", // 0X111, "Vivo Siren", // 0X112, "Philips CELP", // 0X120, "Philips Grundig", // 0X121, "DEC G723", // 0X123, "SANYO LD-ADPCM wave type", // 0X125, "Sipro Lab ACELPNET", // 0X130, "Sipro Lab ACELP4800", // 0X131, "Sipro Lab ACELP8V3", // 0X132, "Sipro Lab ACELPG729", // 0X133, "Sipro Lab ACELPG729A", // 0X134, "Sipro Lab Kelvin", // 0X135, "VoiceAge AMR", // 0X136, "Dictaphone G726 ADPCM", // 0X140, "Dictaphone CELP68", // 0X141, "Dictaphone CELP54", // 0X142, "Qualcomm Pure Voice", // 0X150, "Qualcomm Half Rate", // 0X151, "Related to GSM 6.10", // 0x155, "Microsoft Audio 1", // 0X160, "Microsoft Audio 2", // 0X161, "Microsoft Multichannel WMA", // 0X162, "WMA lossless", // 0x163 "WMA Pro over S/PDIF", // 0x164 "Unisys ADPCM", // 0X170, "Unisys ULAW", // 0X171, "Unisys ALAW", // 0X172, "Unisys NAP 16K", // 0X173, "SyCom ACM SYC008", // 0X174, "SyCom ACM SYC701 G726L", // 0X175, "SyCom ACM SYC701 CELP54", // 0X176, "SyCom ACM SYC701 CELP68", // 0X177 "Knowledge Adventure ADPCM", // 0X178 "Fraunhofer IIS MPEC 2AAC", // 0X180 "Digital Theater Systems DS", // 0X190, "Creative Labs ADPCM", // 0X200 "Fast Speech 8", // 0X202 "Fast Speech 10", // 0X203 "UHER ADPCM", // 0X210 "Quarterdeck", // 0X220 "I-Link VC", // 0X230 "Aureal Raw Sport", // 0x240 "Interactive Products HSX", // 0x250 "Interactive Products RPELP", // 0x251 "Cs2", // 0X260 "Sony SCX", // 0X270 "Sony SCY", // 0X271 "Sony ATRAC3", // 0X272 "Sony SPC", // 0X273 "Telum", // 0X280 "Telum IA", // 0X281 "Norcom Voice Systems ADPCM", // 0x285 "Fujitsu FM Towns SND", // 0X300 "Fujitsu (301)", // 0x301 "Fujitsu (302)", // 0x302 "Fujitsu (303)", // 0x303 "Fujitsu (304)", // 0x304 "Fujitsu (305)", // 0x305 "Fujitsu (306)", // 0x306 "Fujitsu (307)", // 0x307 "Fujitsu (308)", // 0x308 "Micronas Development", // 0x350 "Micronas CELP833", // 0x351 "Brooktree digital audio format", // 0x400 "QDesign Music", // 0x450 "AT&T VMPCM", // 0x680 "AT&T TPC", // 0x681 "Olivetti SM", // 0x1000 "Olivetti PCM", // 0x1001 "Olivetti CELP", // 0x1002 "Olivetti SBC", // 0x1003 "Olivetti OPR", // 0x1004 "Lernout & Hauspie Codec", // 0x1100 "Lernout & Hauspie CELP", // 0x1101 "Lernout & Hauspie SB8", // 0x1102 "Lernout & Hauspie SB12", // 0x1103 "Lernout & Hauspie SB16", // 0x1104 "Norris", // 0x1400 "AT&T Soundspace Musicompress", // 0x1500 "Sonic Foundry Lossless", // 0x1971 "Innings ADPCM", // 0X1979 "FAST Multimedia DVM", // 0x2000 "Reserved rangle to 0x2600", // 0x2500 "Divio's AAC", // 0x4143 "Nokia adaptive multirate", // 0x4201 "Divio's G726", // 0x4243 "3Com NBX", // 0x7000 "Adaptive multirate", // 0x7a21 "AMR with silence detection", // 0x7a22 "Comverse G723.1", // 0xa100 "Comverse AVQSBC", // 0xa101 "Comverse old SBC", // 0xa102 "Symbol Technology's G729A", // 0xa103 "Voice Age AMR WB", // 0xa104 "Ingenient's G726", // 0xa105 "ISO/MPEG-4 advanced audio Coding", // 0xa106 "Encore Software Ltd's G726", // 0xa107 "Extensible Wave format" // 0xfffe }; public final static int[] COMPRESSION_INDEX = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0XA, 0xB, 0X10, 0X11, 0X12, 0X13, 0X14, 0X15, 0X16, 0X17, 0X18, 0X19, 0X1A, 0X20, 0X21, 0X22, 0X23, 0X24, 0X25, 0X26, 0X27, 0X28, 0X30, 0X31, 0X32, 0X33, 0X34, 0X35, 0X36, 0X37, 0X38, 0X39, 0X3A, 0X3B, 0X3C, 0X3D, 0X40, 0X41, 0X42, 0X43, 0X44, 0X45, 0X50, 0X52, 0X53, 0X55, 0X59, 0X60, 0X61, 0X62, 0X63, 0X64, 0X65, 0X67, 0X69, 0X70, 0X71, 0X72, 0X73, 0X74, 0X75, 0X76, 0X77, 0X78, 0X79, 0X7A, 0X7B, 0X80, 0X81, 0X82, 0X83, 0X84, 0X85, 0X86, 0X88, 0X89, 0X8A, 0X8B, 0X8C, 0X8D, 0X91, 0X92, 0x93, 0X94, 0X97, 0X98, 0X99, 0XA0, 0XA1, 0XA2, 0XA3, 0XA4, 0XB0, 0X100, 0x101, 0X111, 0X112, 0X120, 0X121, 0X123, 0X125, 0X130, 0X131, 0X132, 0X133, 0X134, 0X135, 0X136, 0X140, 0X141, 0X142, 0X150, 0X151, 0x155, 0X160, 0X161, 0X162, 0x163, 0x164, 0X170, 0X171, 0X172, 0X173, 0X174, 0X175, 0X176, 0X177, 0X178, 0X180, 0X190, 0X200, 0X202, 0X203, 0X210, 0X220, 0X230, 0x240, 0x250, 0x251, 0X260, 0X270, 0X271, 0X272, 0X273, 0X280, 0X281, 0x285, 0X300, 0x301, 0x302, 0x303, 0x304, 0x305, 0x306, 0x307, 0x308, 0x350, 0x351, 0x400, 0x450, 0x680, 0x681, 0x1000, 0x1001, 0x1002, 0x1003, 0x1004, 0x1100, 0x1101, 0x1102, 0x1103, 0x1104, 0x1400, 0x1500, 0x1971, 0X1979, 0x2000, 0x2500, 0x4143, 0x4201, 0x4243, 0x7000, 0x7a21, 0x7a22, 0xa100, 0xa101, 0xa102, 0xa103, 0xa104, 0xa105, 0xa106, 0xa107, 0xfffe }; /** Strings for SMPTE formats in the Sample Chunk */ public final static String[] SMPTE_FORMAT = { "No SMPTE offset", "24 frames per second", "25 frames per second", "30 frames per second with frame dropping", "30 frames per second" }; /** Indices for SMPTE formats in the Sample Chunk */ public final static int[] SMPTE_FORMAT_INDEX = { 0, 24, 25, 29, 30 }; /** Flags for SoundInformation bits in the MPEG chunk, * "1" values */ public final static String[] SOUND_INFORMATION_1 = { "Non-homogeneous sound data", "Padding bit always 0", "Sample frequency 22.05 or 44.1 KHz", "Free format is used" }; /** Flags for SoundInformation bits in the MPEG chunk, * "0" values */ public final static String[] SOUND_INFORMATION_0 = { "Homogeneous sound data", "Padding bit may alternate", "", "No free format audio frame" }; /** Flags for ancillary data definition in the MPEG chunk, * "1" values */ public final static String[] ANCILLARY_DEF_1 = { "Energy of left channel present", "Private byte is free for internal use" }; /** Flags for ancillary data definition in the MPEG chunk, * "0" values */ public final static String[] ANCILLARY_DEF_0 = { "Energy of left channel absent", "No private byte free for internal use" }; } jhove/classes/edu/harvard/hul/ois/jhove/module/wave/build.xml0000644000707400001440000000206611204567750023500 0ustar garyusers JPEG module build file Jhove - JSTOR/Harvard Object Validation Environment Version 1.0 2004-05-05 Copyright 2004 by JSTOR and the President and Fellows of Harvard College jhove/classes/edu/harvard/hul/ois/jhove/module/wave/package.html0000644000707400001440000000056610771562751024147 0ustar garyusers Contains supporting classes for the WAVE-HUL module.

jhove/classes/edu/harvard/hul/ois/jhove/module/wave/AXMLChunk.class0000644000707400001440000000222111510702105024412 0ustar garyusers29       ! "# $ %&'t(Ledu/harvard/hul/ois/jhove/ModuleBase;Ledu/harvard/hul/ois/jhove/module/iff/ChunkHeader;Ljava/io/DataInputStream;)VCode readChunk&(Ledu/harvard/hul/ois/jhove/RepInfo;)Z Exceptions(  )*+edu/harvard/hul/ois/jhove/module/WaveModule +, -./ 01java/lang/String 2"edu/harvard/hul/ois/jhove/PropertyXML3 45 6 78/edu/harvard/hul/ois/jhove/module/wave/AXMLChunk*edu/harvard/hul/ois/jhove/module/iff/Chunkjava/io/IOException_module&Ledu/harvard/hul/ois/jhove/ModuleBase; bytesLeftJ_dstreamLjava/io/DataInputStream;$edu/harvard/hul/ois/jhove/ModuleBase readByteBufD(Ljava/io/DataInputStream;[BLedu/harvard/hul/ois/jhove/ModuleBase;)I([B)V&edu/harvard/hul/ois/jhove/PropertyTypeSTRING(Ledu/harvard/hul/ois/jhove/PropertyType;O(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ljava/lang/Object;)VaddWaveProperty'(Ledu/harvard/hul/ois/jhove/Property;)V!*+,-G;*M*N*-*WY-:, Y  jhove/classes/edu/harvard/hul/ois/jhove/module/wave/AssocDataListChunk.class0000644000707400001440000000465311510702105026362 0ustar garyusers2 &5 %67 %8 9: ;<=>? @A B C DE F GH GI %J KL KMNO PQR PST P DUVWX Y Z[\](Ledu/harvard/hul/ois/jhove/ModuleBase;Ledu/harvard/hul/ois/jhove/module/iff/ChunkHeader;Ljava/io/DataInputStream;Ledu/harvard/hul/ois/jhove/RepInfo;)VCode readChunk&(Ledu/harvard/hul/ois/jhove/RepInfo;)Z StackMapTable7^_`\a Exceptionsb '( cd+edu/harvard/hul/ois/jhove/module/WaveModule ef ghadtl^ ij&edu/harvard/hul/ois/jhove/ErrorMessage/Unknown list type in Associated Data List Chunkjava/lang/StringBuilder 'kType = lm nop qr 'sa tu vw xy_ zo {rlabl0edu/harvard/hul/ois/jhove/module/wave/LabelChunk '|note/edu/harvard/hul/ois/jhove/module/wave/NoteChunkltxt6edu/harvard/hul/ois/jhove/module/wave/LabeledTextChunk }~%edu/harvard/hul/ois/jhove/InfoMessage Chunk type '"' in Associated Data Chunk ignored '` *+8edu/harvard/hul/ois/jhove/module/wave/AssocDataListChunk/edu/harvard/hul/ois/jhove/module/iff/Superchunkjava/lang/String0edu/harvard/hul/ois/jhove/module/iff/ChunkHeader*edu/harvard/hul/ois/jhove/module/iff/Chunk!edu/harvard/hul/ois/jhove/RepInfojava/io/IOException_module&Ledu/harvard/hul/ois/jhove/ModuleBase;_dstreamLjava/io/DataInputStream; read4Chars-(Ljava/io/DataInputStream;)Ljava/lang/String;equals(Ljava/lang/Object;)Z()Vappend-(Ljava/lang/String;)Ljava/lang/StringBuilder;toString()Ljava/lang/String;$edu/harvard/hul/ois/jhove/ModuleBasegetNByte()J((Ljava/lang/String;Ljava/lang/String;J)V setMessage&(Ledu/harvard/hul/ois/jhove/Message;)V setWellFormed(Z)VgetNextChunkHeader4()Ledu/harvard/hul/ois/jhove/module/iff/ChunkHeader;getIDgetSizet(Ledu/harvard/hul/ois/jhove/ModuleBase;Ledu/harvard/hul/ois/jhove/module/iff/ChunkHeader;Ljava/io/DataInputStream;)V skipBytesC(Ljava/io/DataInputStream;ILedu/harvard/hul/ois/jhove/ModuleBase;)I(Ljava/lang/String;)V!%&'() *+,-*+)W*M,*N-1+Y Y  - *+*:::6Y**:@Y**: Y**:<***W+ Y Y !  " #+$:,2H-. /10.= 12-.34jhove/classes/edu/harvard/hul/ois/jhove/module/wave/BroadcastExtChunk.class0000644000707400001440000000551411510702105026244 0ustar garyusers2 .= ->? -@ AB -C D E F GH -IZJ K LMNO PQ R STUVWX PYZ [\ P]^ K_ P` ab cde Pf ag h i jklmt(Ledu/harvard/hul/ois/jhove/ModuleBase;Ledu/harvard/hul/ois/jhove/module/iff/ChunkHeader;Ljava/io/DataInputStream;)VCode readChunk&(Ledu/harvard/hul/ois/jhove/RepInfo;)Z StackMapTableln?opq Exceptionsr /0 st+edu/harvard/hul/ois/jhove/module/WaveModule uvw xy z{ |} ~  java/util/ArrayList /p "edu/harvard/hul/ois/jhove/Property Description /q  OriginatorOriginationDateOriginationTime TimeReference java/lang/Long /Version java/lang/IntegerUMID  / CodingHistoryBroadcastAudioExtension  7edu/harvard/hul/ois/jhove/module/wave/BroadcastExtChunk*edu/harvard/hul/ois/jhove/module/iff/Chunk!edu/harvard/hul/ois/jhove/RepInfo[Bjava/lang/Stringjava/util/Listjava/io/IOException_module&Ledu/harvard/hul/ois/jhove/ModuleBase;_dstreamLjava/io/DataInputStream;$edu/harvard/hul/ois/jhove/ModuleBase readByteBufD(Ljava/io/DataInputStream;[BLedu/harvard/hul/ois/jhove/ModuleBase;)I byteBufString([B)Ljava/lang/String;readSignedLong(Ljava/io/DataInputStream;)JreadUnsignedShort(Ljava/io/DataInputStream;)IsetBroadcastVersion(I)V skipBytesC(Ljava/io/DataInputStream;ILedu/harvard/hul/ois/jhove/ModuleBase;)I bytesLeftJlength()I&edu/harvard/hul/ois/jhove/PropertyTypeSTRING(Ledu/harvard/hul/ois/jhove/PropertyType;O(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ljava/lang/Object;)Vadd(Ljava/lang/Object;)ZLONG(J)VINTEGERBYTE'edu/harvard/hul/ois/jhove/PropertyArityARRAY)Ledu/harvard/hul/ois/jhove/PropertyArity;x(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ledu/harvard/hul/ois/jhove/PropertyArity;Ljava/lang/Object;)VPROPERTYLISTaddWaveProperty'(Ledu/harvard/hul/ois/jhove/Property;)VgetAESMetadata.()Ledu/harvard/hul/ois/jhove/AESAudioMetadata;*edu/harvard/hul/ois/jhove/AESAudioMetadata setStartTime!-./01*+,-231O *MN*-,W*-: :*,W*:*,W*: :*,W*: : * ,W* : ,*7 ,*6, @:*,W,*, W :*  #* Zd:*,W*:Y:YWYW Y W Y WYY WY Y!WY"#$%WY&W,Y'()%*,+: ,4A56789899898989(:p;<jhove/classes/edu/harvard/hul/ois/jhove/module/wave/CartChunk.class0000644000707400001440000000721311510702105024550 0ustar garyusers2 ;N :OP :Q RS :T UV W X YZ [ Y\]^ _` ab _cd ef _g hi j kl mn :opqrstuvwxyz{|}~ _ 1W k h  N_TIMER_TAGSI ConstantValuet(Ledu/harvard/hul/ois/jhove/ModuleBase;Ledu/harvard/hul/ois/jhove/module/iff/ChunkHeader;Ljava/io/DataInputStream;)VCode readChunk&(Ledu/harvard/hul/ois/jhove/RepInfo;)Z StackMapTableP Exceptions @A +edu/harvard/hul/ois/jhove/module/WaveModule  java/util/ArrayList @  "edu/harvard/hul/ois/jhove/PropertyUsage @Value java/lang/Long @ PostTimer  @  VersionTitleArtistCutIDClientIDCategoryClassificationOutCue StartDate StartTimeEndDateEndTime ProducerAppIDProducerAppVersionUserDefLevelReference java/lang/Integer  PostTimers URLTagTextCart /edu/harvard/hul/ois/jhove/module/wave/CartChunk*edu/harvard/hul/ois/jhove/module/iff/Chunk!edu/harvard/hul/ois/jhove/RepInfo[Bjava/lang/Stringjava/util/Listjava/io/IOException_module&Ledu/harvard/hul/ois/jhove/ModuleBase;_dstreamLjava/io/DataInputStream;$edu/harvard/hul/ois/jhove/ModuleBase readByteBufD(Ljava/io/DataInputStream;[BLedu/harvard/hul/ois/jhove/ModuleBase;)I byteBufString([B)Ljava/lang/String; readSignedInt(Ljava/io/DataInputStream;)I(I)V read4Chars-(Ljava/io/DataInputStream;)Ljava/lang/String;trim()Ljava/lang/String;readUnsignedInt(Ljava/io/DataInputStream;)Jlength()I&edu/harvard/hul/ois/jhove/PropertyTypeSTRING(Ledu/harvard/hul/ois/jhove/PropertyType;O(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ljava/lang/Object;)VLONG(J)VPROPERTY'edu/harvard/hul/ois/jhove/PropertyArityARRAY)Ledu/harvard/hul/ois/jhove/PropertyArity;x(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ledu/harvard/hul/ois/jhove/PropertyArity;Ljava/lang/Object;)Vadd(Ljava/lang/Object;)Z skipBytesC(Ljava/io/DataInputStream;ILedu/harvard/hul/ois/jhove/ModuleBase;)I bytesLeftJINTEGERsizeLISTaddWaveProperty'(Ledu/harvard/hul/ois/jhove/Property;)V!:;<=>?@AB*+,-CDB }*MN*-,W*-:@:*,W*:*,W*:*,W*:*,W*: *,W*: *,W*: *,W*:  : * ,W* ::*,W*:* ,W* :*,W*:*,W*:*,W*:*,W*:,*6Y :6r,* :,* 7 M:YSYYSYW,*,W:*,W*::*#*d:*,W*:Y : Y W Y!W Y"W Y#W Y$ W Y% W Y& W Y' W Y(W Y)W Y*W Y+W Y,W Y-W Y.WY/01Y2W3Y45W Y6W Y7W,Y859EyQFGHIJIJJJJJJJIJIJJJJJJKoUIJJ(K?LMjhove/classes/edu/harvard/hul/ois/jhove/module/wave/CueChunk.class0000644000707400001440000000361011510702105024370 0ustar garyusers2f * +, - ./ 0 123 456 7 89: 4;<=> 4? @A B CDE @F GHIt(Ledu/harvard/hul/ois/jhove/ModuleBase;Ledu/harvard/hul/ois/jhove/module/iff/ChunkHeader;Ljava/io/DataInputStream;)VCode readChunk&(Ledu/harvard/hul/ois/jhove/RepInfo;)Z StackMapTableHJ,K ExceptionsL  MN+edu/harvard/hul/ois/jhove/module/WaveModule OP QRjava/util/ArrayList S TU"edu/harvard/hul/ois/jhove/PropertyIDV WXjava/lang/Long Y ZPosition DataChunkID [X BlockStart SampleOffsetCuePoint \X] ^_ `K abCue c_ de.edu/harvard/hul/ois/jhove/module/wave/CueChunk*edu/harvard/hul/ois/jhove/module/iff/Chunk!edu/harvard/hul/ois/jhove/RepInfojava/util/Listjava/io/IOException_module&Ledu/harvard/hul/ois/jhove/ModuleBase;_dstreamLjava/io/DataInputStream;readUnsignedInt(Ljava/io/DataInputStream;)J(I)V read4Chars-(Ljava/io/DataInputStream;)Ljava/lang/String;&edu/harvard/hul/ois/jhove/PropertyTypeLONG(Ledu/harvard/hul/ois/jhove/PropertyType;(J)VO(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ljava/lang/Object;)VSTRINGPROPERTY'edu/harvard/hul/ois/jhove/PropertyArityARRAY)Ledu/harvard/hul/ois/jhove/PropertyArity;x(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ledu/harvard/hul/ois/jhove/PropertyArity;Ljava/lang/Object;)Vadd(Ljava/lang/Object;)ZLISTaddWaveProperty'(Ledu/harvard/hul/ois/jhove/Property;)V! *+,-!" ? *M,*>Y:6,*7,*7,*: ,*7 ,*7 ,*7 : Y Y S Y Y S Y S Y Y S Y Y S YW&, Y#$%&'()jhove/classes/edu/harvard/hul/ois/jhove/module/wave/DataChunk.class0000644000707400001440000000251311510702105024526 0ustar garyusers2M  !"#$ %&' ( ) * + , -. %/ 0 1 2 345t(Ledu/harvard/hul/ois/jhove/ModuleBase;Ledu/harvard/hul/ois/jhove/module/iff/ChunkHeader;Ljava/io/DataInputStream;)VCode readChunk&(Ledu/harvard/hul/ois/jhove/RepInfo;)Z StackMapTable"# Exceptions6  78+edu/harvard/hul/ois/jhove/module/WaveModule"edu/harvard/hul/ois/jhove/Property DataLength9 :;java/lang/Long <= > ? @A BA C>Data D; EF GH IJ KL/edu/harvard/hul/ois/jhove/module/wave/DataChunk*edu/harvard/hul/ois/jhove/module/iff/Chunkjava/io/IOException_module&Ledu/harvard/hul/ois/jhove/ModuleBase;&edu/harvard/hul/ois/jhove/PropertyTypeLONG(Ledu/harvard/hul/ois/jhove/PropertyType; bytesLeftJ(J)VO(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ljava/lang/Object;)VgetCompressionCode()I getBlockAlign addSamplesPROPERTYaddWaveProperty'(Ledu/harvard/hul/ois/jhove/Property;)VmarkFirstSampleOffset()V_dstreamLjava/io/DataInputStream; skipBytesC(Ljava/io/DataInputStream;ILedu/harvard/hul/ois/jhove/ModuleBase;)I!*+,-y\*MYY* N, ,*, m ,Y- ,,**,W 6jhove/classes/edu/harvard/hul/ois/jhove/module/wave/ExifMakerNoteChunk.class0000644000707400001440000000170611510702105026361 0ustar garyusers2-       t(Ledu/harvard/hul/ois/jhove/ModuleBase;Ledu/harvard/hul/ois/jhove/module/iff/ChunkHeader;Ljava/io/DataInputStream;)VCode readChunk&(Ledu/harvard/hul/ois/jhove/RepInfo;)Z Exceptions  +edu/harvard/hul/ois/jhove/module/WaveModule !" #$% &' ()* +,8edu/harvard/hul/ois/jhove/module/wave/ExifMakerNoteChunk*edu/harvard/hul/ois/jhove/module/iff/Chunkjava/io/IOException_module&Ledu/harvard/hul/ois/jhove/ModuleBase; bytesLeftJ_dstreamLjava/io/DataInputStream;$edu/harvard/hul/ois/jhove/ModuleBase readByteBufD(Ljava/io/DataInputStream;[BLedu/harvard/hul/ois/jhove/ModuleBase;)I getExifInfo2()Ledu/harvard/hul/ois/jhove/module/wave/ExifInfo;.edu/harvard/hul/ois/jhove/module/wave/ExifInfo setMakerNote([B)V!   *+,- 6**M*N*-,W,:,-jhove/classes/edu/harvard/hul/ois/jhove/module/wave/ExifStringChunk.class0000644000707400001440000000302711510702105025740 0ustar garyusers2] ( )* + ,- . / 012 3 4 56 7 89: 8;< 8=> 8?@AidLjava/lang/String;t(Ledu/harvard/hul/ois/jhove/ModuleBase;Ledu/harvard/hul/ois/jhove/module/iff/ChunkHeader;Ljava/io/DataInputStream;)VCode readChunk&(Ledu/harvard/hul/ois/jhove/RepInfo;)Z StackMapTable@B-C2D ExceptionsE F GH  IJ+edu/harvard/hul/ois/jhove/module/WaveModule KL MNO PQjava/lang/String R SH TUerel VWD XYetim ZYecor [Yemdl \Y5edu/harvard/hul/ois/jhove/module/wave/ExifStringChunk*edu/harvard/hul/ois/jhove/module/iff/Chunk!edu/harvard/hul/ois/jhove/RepInfo[B.edu/harvard/hul/ois/jhove/module/wave/ExifInfojava/io/IOException0edu/harvard/hul/ois/jhove/module/iff/ChunkHeadergetID()Ljava/lang/String;_module&Ledu/harvard/hul/ois/jhove/ModuleBase; bytesLeftJ_dstreamLjava/io/DataInputStream;$edu/harvard/hul/ois/jhove/ModuleBase readByteBufD(Ljava/io/DataInputStream;[BLedu/harvard/hul/ois/jhove/ModuleBase;)I([B)Vtrim getExifInfo2()Ledu/harvard/hul/ois/jhove/module/wave/ExifInfo;equals(Ljava/lang/Object;)ZsetRelatedImageFile(Ljava/lang/String;)VsetTimeCreatedsetManufacturersetModel!*+,-*,*M*N*-,W Y- :, : * B* ,* * , C !"#$%&'jhove/classes/edu/harvard/hul/ois/jhove/module/wave/ExifUserCommentChunk.class0000644000707400001440000000346411510702105026740 0ustar garyusers2h / 01 234 5 67 68 9 :;< = >? @ABCDE FG H IJKLasciiDesLjava/lang/String; ConstantValuejisDes unicodeDest(Ledu/harvard/hul/ois/jhove/ModuleBase;Ledu/harvard/hul/ois/jhove/module/iff/ChunkHeader;Ljava/io/DataInputStream;)VCode readChunk&(Ledu/harvard/hul/ois/jhove/RepInfo;)Z StackMapTable1M<G ExceptionsN #$ OP+edu/harvard/hul/ois/jhove/module/WaveModule QR&edu/harvard/hul/ois/jhove/ErrorMessage$Exif User Comment Chunk is too short #ST UV WX YZ[ \]java/lang/String #^ _`ASCII abUS-ASCIIJISEUC_JPUNICODEUTF-16 #cjava/lang/Exception def gS:edu/harvard/hul/ois/jhove/module/wave/ExifUserCommentChunk*edu/harvard/hul/ois/jhove/module/iff/Chunk[Bjava/io/IOException_module&Ledu/harvard/hul/ois/jhove/ModuleBase; bytesLeftJ(Ljava/lang/String;)V!edu/harvard/hul/ois/jhove/RepInfo setMessage&(Ledu/harvard/hul/ois/jhove/Message;)V setWellFormed(Z)V_dstreamLjava/io/DataInputStream;$edu/harvard/hul/ois/jhove/ModuleBase readByteBufD(Ljava/io/DataInputStream;[BLedu/harvard/hul/ois/jhove/ModuleBase;)I([B)Vtrim()Ljava/lang/String;equals(Ljava/lang/Object;)Z([BLjava/lang/String;)V getExifInfo2()Ledu/harvard/hul/ois/jhove/module/wave/ExifInfo;.edu/harvard/hul/ois/jhove/module/wave/ExifInfosetUserComment! ! " #$%*+,-&'% *M*+Y + N* -, WY-:*Ye: :" ::*N* -, W:Y-:: Y-:,:,("');*++ %+B,-.jhove/classes/edu/harvard/hul/ois/jhove/module/wave/ExifVersionChunk.class0000644000707400001440000000246311510702105026122 0ustar garyusers2F    !" # $% $& ' ()* + , -./0t(Ledu/harvard/hul/ois/jhove/ModuleBase;Ledu/harvard/hul/ois/jhove/module/iff/ChunkHeader;Ljava/io/DataInputStream;)VCode readChunk&(Ledu/harvard/hul/ois/jhove/RepInfo;)Z StackMapTable Exceptions1  23+edu/harvard/hul/ois/jhove/module/WaveModule 45&edu/harvard/hul/ois/jhove/ErrorMessage'Incorrect length for Exif Version Chunk 67 89 :; <=> ?@java/lang/String A BCD E66edu/harvard/hul/ois/jhove/module/wave/ExifVersionChunk*edu/harvard/hul/ois/jhove/module/iff/Chunkjava/io/IOException_module&Ledu/harvard/hul/ois/jhove/ModuleBase; bytesLeftJ(Ljava/lang/String;)V!edu/harvard/hul/ois/jhove/RepInfo setMessage&(Ledu/harvard/hul/ois/jhove/Message;)V setWellFormed(Z)V_dstreamLjava/io/DataInputStream;$edu/harvard/hul/ois/jhove/ModuleBase readByteBufD(Ljava/io/DataInputStream;[BLedu/harvard/hul/ois/jhove/ModuleBase;)I([B)V getExifInfo2()Ledu/harvard/hul/ois/jhove/module/wave/ExifInfo;.edu/harvard/hul/ois/jhove/module/wave/ExifInfosetExifVersion!*+,-dJ*M*+Y + N* -, WY-:,'jhove/classes/edu/harvard/hul/ois/jhove/module/wave/FactChunk.class0000644000707400001440000000237511510702105024540 0ustar garyusers2E   ! "#$ % & '( ") * + , - ./0t(Ledu/harvard/hul/ois/jhove/ModuleBase;Ledu/harvard/hul/ois/jhove/module/iff/ChunkHeader;Ljava/io/DataInputStream;)VCode readChunk&(Ledu/harvard/hul/ois/jhove/RepInfo;)Z Exceptions1  23+edu/harvard/hul/ois/jhove/module/WaveModule"edu/harvard/hul/ois/jhove/PropertySize4 56java/lang/Long 78 9 :Fact ;6 <= >? @A B9 CD/edu/harvard/hul/ois/jhove/module/wave/FactChunk*edu/harvard/hul/ois/jhove/module/iff/Chunkjava/io/IOException_module&Ledu/harvard/hul/ois/jhove/ModuleBase;&edu/harvard/hul/ois/jhove/PropertyTypeLONG(Ledu/harvard/hul/ois/jhove/PropertyType; bytesLeftJ(J)VO(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ljava/lang/Object;)VPROPERTYaddWaveProperty'(Ledu/harvard/hul/ois/jhove/Property;)V_dstreamLjava/io/DataInputStream;readUnsignedInt(Ljava/io/DataInputStream;)J addSamples skipBytesC(Ljava/io/DataInputStream;ILedu/harvard/hul/ois/jhove/ModuleBase;)I!*+,-j^*MYY* N,Y - ,*7,*Ye,**,Wjhove/classes/edu/harvard/hul/ois/jhove/module/wave/FormatChunk.class0000644000707400001440000001035111510702105025104 0ustar garyusers2 B_ A`a Ab c d e f g Ah ij k l im n op qr qs t u v wx wy Az w{ w|} A~ w . w  . +  3 + wWAVE_FORMAT_PCMI ConstantValueWAVE_FORMAT_MPEGPWAVE_FORMAT_EXTENSIBLElosslessCodecs[I{(Ledu/harvard/hul/ois/jhove/module/WaveModule;Ledu/harvard/hul/ois/jhove/module/iff/ChunkHeader;Ljava/io/DataInputStream;)VCode readChunk&(Ledu/harvard/hul/ois/jhove/RepInfo;)Z StackMapTablea ExceptionssetChannelLocations0(Ledu/harvard/hul/ois/jhove/AESAudioMetadata;I)V()V L +edu/harvard/hul/ois/jhove/module/WaveModule  CompressionCode K  Z[ LOSSY JKCODE_REGENERATING ^ FIXED "edu/harvard/hul/ois/jhove/PropertyAverageBytesPerSecond java/lang/Long L L BlockAlign java/lang/Integer LExtraFormatBytes  LValidBitsPerSample ChannelMask Subformatjava/lang/StringLEFTRIGHTUNKNOWN 1edu/harvard/hul/ois/jhove/module/wave/FormatChunk*edu/harvard/hul/ois/jhove/module/iff/Chunk!edu/harvard/hul/ois/jhove/RepInfo[B*edu/harvard/hul/ois/jhove/AESAudioMetadatajava/io/IOException[Ljava/lang/String;t(Ledu/harvard/hul/ois/jhove/ModuleBase;Ledu/harvard/hul/ois/jhove/module/iff/ChunkHeader;Ljava/io/DataInputStream;)V_module&Ledu/harvard/hul/ois/jhove/ModuleBase;_dstreamLjava/io/DataInputStream;readUnsignedShort(Ljava/io/DataInputStream;)IsetCompressionCode(I)VreadUnsignedInt(Ljava/io/DataInputStream;)J setSampleRate(J)V setBlockAlign bytesLeftJ$edu/harvard/hul/ois/jhove/ModuleBase readByteBufD(Ljava/io/DataInputStream;[BLedu/harvard/hul/ois/jhove/ModuleBase;)IsetWaveFormatExtensible(Z)VsetWaveFormatEx skipBytesC(Ljava/io/DataInputStream;ILedu/harvard/hul/ois/jhove/ModuleBase;)IsetPCMWaveFormatsetBroadcastWave1edu/harvard/hul/ois/jhove/module/wave/WaveStringsCOMPRESSION_FORMATCOMPRESSION_INDEXaddIntegerPropertyN(Ljava/lang/String;I[Ljava/lang/String;[I)Ledu/harvard/hul/ois/jhove/Property;addWaveProperty'(Ledu/harvard/hul/ois/jhove/Property;)VgetAESMetadata.()Ledu/harvard/hul/ois/jhove/AESAudioMetadata;setAudioDataEncoding(Ljava/lang/String;)VsetNumChannels(D)V setBitDepthclearBitrateReductiontoString(J)Ljava/lang/String;setBitrateReduction(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V&edu/harvard/hul/ois/jhove/PropertyTypeLONG(Ledu/harvard/hul/ois/jhove/PropertyType;O(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ljava/lang/Object;)VINTEGERBYTE'edu/harvard/hul/ois/jhove/PropertyArityARRAY)Ledu/harvard/hul/ois/jhove/PropertyArity;x(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ledu/harvard/hul/ois/jhove/PropertyArity;Ljava/lang/Object;)VsetMapLocations([Ljava/lang/String;)V!ABCDEFGDEHIDEJKLMN*+,-OPN *M>:7,*6,,*6,* 7 , ,* 7 ,*6 , ,*6*Y  e :* ,*6:i* ^6,*>,* 7:*,W`lh 6p66,)`lh ,*,W~**,W`lh , P,,,,:.2:*  !"#:6$$.%: &''' ()*,+Y,-.Y /0,+Y123Y 40,+Y5678,+Y923Y40,+Y:-.Y/0,+Y;678QfRSTUU    ORSTUUVWW K!XYZ[Nb@S6-?S+-@Q\ ]^N YcOYqO$jhove/classes/edu/harvard/hul/ois/jhove/module/wave/InstrumentChunk.class0000644000707400001440000000340511510702105026026 0ustar garyusers2R ! "# $ %& %'() *+, - ./012345 *6 78 9 :;<t(Ledu/harvard/hul/ois/jhove/ModuleBase;Ledu/harvard/hul/ois/jhove/module/iff/ChunkHeader;Ljava/io/DataInputStream;)VCode readChunk&(Ledu/harvard/hul/ois/jhove/RepInfo;)Z Exceptions=  >?+edu/harvard/hul/ois/jhove/module/WaveModule @AB CD ED"edu/harvard/hul/ois/jhove/Property UnshiftedNoteF GHjava/lang/Integer I JFineTuneGainLowNoteHighNote LowVelocity HighVelocity Instrument KHL MN O PQ5edu/harvard/hul/ois/jhove/module/wave/InstrumentChunk*edu/harvard/hul/ois/jhove/module/iff/Chunkjava/io/IOException_module&Ledu/harvard/hul/ois/jhove/ModuleBase;_dstreamLjava/io/DataInputStream;$edu/harvard/hul/ois/jhove/ModuleBasereadUnsignedByteB(Ljava/io/DataInputStream;Ledu/harvard/hul/ois/jhove/ModuleBase;)IreadSignedByte&edu/harvard/hul/ois/jhove/PropertyTypeINTEGER(Ledu/harvard/hul/ois/jhove/PropertyType;(I)VO(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ljava/lang/Object;)VPROPERTY'edu/harvard/hul/ois/jhove/PropertyArityARRAY)Ledu/harvard/hul/ois/jhove/PropertyArity;x(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ledu/harvard/hul/ois/jhove/PropertyArity;Ljava/lang/Object;)VaddWaveProperty'(Ledu/harvard/hul/ois/jhove/Property;)V!*+,-; /*M**>**6**6**6**6**6**6 :  Y Y S Y Y S Y Y S Y Y S Y Y S Y Y S Y Y S,Y  jhove/classes/edu/harvard/hul/ois/jhove/module/wave/SimpleTextChunk.class0000644000707400001440000000304011510702105025747 0ustar garyusers2M   ! " #$% &'( )*+ , -. )/ )0 12 345t(Ledu/harvard/hul/ois/jhove/ModuleBase;Ledu/harvard/hul/ois/jhove/module/iff/ChunkHeader;Ljava/io/DataInputStream;)VCode readTextPrope(Ledu/harvard/hul/ois/jhove/module/WaveModule;Ljava/lang/String;)Ledu/harvard/hul/ois/jhove/Property; Exceptions6  789 :; <=> ?@java/lang/String A"edu/harvard/hul/ois/jhove/Property CuePointIDB CDjava/lang/Long E FText GD HDI JK L5edu/harvard/hul/ois/jhove/module/wave/SimpleTextChunk*edu/harvard/hul/ois/jhove/module/iff/Chunkjava/io/IOException_dstreamLjava/io/DataInputStream;+edu/harvard/hul/ois/jhove/module/WaveModulereadUnsignedInt(Ljava/io/DataInputStream;)J bytesLeftJ$edu/harvard/hul/ois/jhove/ModuleBase readByteBufD(Ljava/io/DataInputStream;[BLedu/harvard/hul/ois/jhove/ModuleBase;)I([B)V&edu/harvard/hul/ois/jhove/PropertyTypeLONG(Ledu/harvard/hul/ois/jhove/PropertyType;(J)VO(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ljava/lang/Object;)VSTRINGPROPERTY'edu/harvard/hul/ois/jhove/PropertyArityARRAY)Ledu/harvard/hul/ois/jhove/PropertyArity;x(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ledu/harvard/hul/ois/jhove/PropertyArity;Ljava/lang/Object;)V!*+,- u+*B*Ye*:*+WY : : Y Y!S YS Y,jhove/classes/edu/harvard/hul/ois/jhove/module/wave/LabeledTextChunk.class0000644000707400001440000000430711510702105026055 0ustar garyusers2| (0 '12 '3 4 5 '6 789 : ;< =>? @AB C D EFGHI @JK =LMNO @PQ @R ST U VWXt(Ledu/harvard/hul/ois/jhove/ModuleBase;Ledu/harvard/hul/ois/jhove/module/iff/ChunkHeader;Ljava/io/DataInputStream;)VCode readChunk&(Ledu/harvard/hul/ois/jhove/RepInfo;)Z ExceptionsY )* Z[+edu/harvard/hul/ois/jhove/module/WaveModule \] ^_ `a bcd efjava/lang/String )g hijava/util/ArrayList )j"edu/harvard/hul/ois/jhove/Property CuePointIDk lmjava/lang/Long )n )op qr SampleLength PurposeIDCountry smjava/lang/IntegerLanguageDialectCodePageText tmLabeledTextItem umv wx )y z{6edu/harvard/hul/ois/jhove/module/wave/LabeledTextChunk*edu/harvard/hul/ois/jhove/module/iff/Chunkjava/io/IOException_module&Ledu/harvard/hul/ois/jhove/ModuleBase;_dstreamLjava/io/DataInputStream;readUnsignedInt(Ljava/io/DataInputStream;)JreadUnsignedShort(Ljava/io/DataInputStream;)I bytesLeftJ$edu/harvard/hul/ois/jhove/ModuleBase readByteBufD(Ljava/io/DataInputStream;[BLedu/harvard/hul/ois/jhove/ModuleBase;)I([B)Vtrim()Ljava/lang/String;(I)V&edu/harvard/hul/ois/jhove/PropertyTypeLONG(Ledu/harvard/hul/ois/jhove/PropertyType;(J)VO(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ljava/lang/Object;)Vjava/util/Listadd(Ljava/lang/Object;)ZINTEGERSTRINGPROPERTY'edu/harvard/hul/ois/jhove/PropertyArityLIST)Ledu/harvard/hul/ois/jhove/PropertyArity;x(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ledu/harvard/hul/ois/jhove/PropertyArity;Ljava/lang/Object;)VaddLabeledText'(Ledu/harvard/hul/ois/jhove/Property;)V!'()*+*+,-,-+ u*M,*B,*7,*7,*6 ,*6 ,*6 ,*6 *e: * , W Y :Y :YY!WYYWYYWYY WYY WYY WYY WY !W,Y"#$%&./jhove/classes/edu/harvard/hul/ois/jhove/module/wave/LinkChunk.class0000644000707400001440000000572711510702105024564 0ustar garyusers2 ,B +CD +E +F GHI JK L MN MO MP QRS T UV UW X Y Z[\ ]^_ `a bc d Zef gh `i jklm $n op oqrstut(Ledu/harvard/hul/ois/jhove/ModuleBase;Ledu/harvard/hul/ois/jhove/module/iff/ChunkHeader;Ljava/io/DataInputStream;)VCode readChunk&(Ledu/harvard/hul/ois/jhove/RepInfo;)Z StackMapTabletvDwIKxySz{kr Exceptions| -. }~+edu/harvard/hul/ois/jhove/module/WaveModule   java/io/ByteArrayInputStream -,edu/harvard/hul/ois/jhove/ByteArrayXMPSource -x  6edu/harvard/hul/ois/jhove/module/wave/LinkChunkHandler -y z java/util/ArrayList -"edu/harvard/hul/ois/jhove/Property FileNames  - ID -Link org/xml/sax/SAXException&edu/harvard/hul/ois/jhove/ErrorMessage"SAXException in reading Link Chunk -v .javax/xml/parsers/ParserConfigurationException2ParserConfigurationException in reading Link Chunk/edu/harvard/hul/ois/jhove/module/wave/LinkChunk*edu/harvard/hul/ois/jhove/module/iff/Chunk!edu/harvard/hul/ois/jhove/RepInfo[B"javax/xml/parsers/SAXParserFactoryorg/xml/sax/XMLReaderjava/util/Listjava/lang/Stringjava/io/IOException_module&Ledu/harvard/hul/ois/jhove/ModuleBase; bytesLeftJ_dstreamLjava/io/DataInputStream;$edu/harvard/hul/ois/jhove/ModuleBase readByteBufD(Ljava/io/DataInputStream;[BLedu/harvard/hul/ois/jhove/ModuleBase;)I([B)V!(Ljava/io/ByteArrayInputStream;)V newInstance&()Ljavax/xml/parsers/SAXParserFactory;setNamespaceAware(Z)V newSAXParser()Ljavax/xml/parsers/SAXParser;javax/xml/parsers/SAXParser getXMLReader()Lorg/xml/sax/XMLReader;()VsetContentHandler(Lorg/xml/sax/ContentHandler;)Vparse(Lorg/xml/sax/InputSource;)V getFileNames()Ljava/util/List;getID()Ljava/lang/String;isEmpty()Z(I)V&edu/harvard/hul/ois/jhove/PropertyTypeSTRING(Ledu/harvard/hul/ois/jhove/PropertyType;'edu/harvard/hul/ois/jhove/PropertyArityLIST)Ledu/harvard/hul/ois/jhove/PropertyArity;x(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ledu/harvard/hul/ois/jhove/PropertyArity;Ljava/lang/Object;)Vadd(Ljava/lang/Object;)ZO(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ljava/lang/Object;)VPROPERTYaddWaveProperty'(Ledu/harvard/hul/ois/jhove/Property;)V(Ljava/lang/String;)V setMessage&(Ledu/harvard/hul/ois/jhove/Message;)VsetValid!+,-./*+,-01/l *M*N*-,WY-: Y : :  :Y:: :  VY:  Y W  Y W,Y ! "/:+$Y%&'+(:+$Y*&'+(/#/)2O 3456789:;<=<345678B>U?@Ajhove/classes/edu/harvard/hul/ois/jhove/module/wave/LinkChunkHandler.class0000644000707400001440000000263611510702105026056 0ustar garyusers2O 2 34 2 56 2 7 89 :;< = > ?@ ABC_contentLjava/lang/StringBuffer;stateI fileNamesLjava/util/List;idLjava/lang/String; STATE_DEFAULT ConstantValue STATE_FILESTATE_ID()VCode getFileNames()Ljava/util/List;getID()Ljava/lang/String; startElementQ(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lorg/xml/sax/Attributes;)V StackMapTable ExceptionsD characters([CII)V endElement9(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V "# java/lang/StringBuffer java/util/LinkedList  FILEE FGID HI J(K LG MN6edu/harvard/hul/ois/jhove/module/wave/LinkChunkHandler"org/xml/sax/helpers/DefaultHandlerorg/xml/sax/SAXExceptionjava/lang/Stringequals(Ljava/lang/Object;)Zappend([CII)Ljava/lang/StringBuffer;toStringjava/util/Listadd setLength(I)V! !"#$1%***Y*Y* %&$*'($* )*$6  - * - *+ ,-./$ *+ W,-01$gP*>>0**W** **+  ,-jhove/classes/edu/harvard/hul/ois/jhove/module/wave/ListInfoChunk.class0000644000707400001440000000777411510702105025422 0ustar garyusers2 CV BWX BY Z B[\ ]^ B_` Bab Bcde fg hi j kl m no npq f Br st suv w kxyz{ #| }~   *f  . 4 : = @(Ledu/harvard/hul/ois/jhove/ModuleBase;Ledu/harvard/hul/ois/jhove/module/iff/ChunkHeader;Ljava/io/DataInputStream;Ledu/harvard/hul/ois/jhove/RepInfo;)VCode readChunk&(Ledu/harvard/hul/ois/jhove/RepInfo;)Z StackMapTable Exceptions readInfoChunkX readExifChunk readAdtlChunk DE +edu/harvard/hul/ois/jhove/module/WaveModule INFO MHexif THadtl UH&edu/harvard/hul/ois/jhove/ErrorMessagejava/lang/StringBuilder DUnknown list type  in List Chunk  D java/util/LinkedList  7edu/harvard/hul/ois/jhove/module/wave/ListInfoTextChunk D %edu/harvard/hul/ois/jhove/InfoMessage Chunk type '' in List Info Chunk ignored D GH .edu/harvard/hul/ois/jhove/module/wave/ExifInfo ever6edu/harvard/hul/ois/jhove/module/wave/ExifVersionChunk Dereletimecoremdl5edu/harvard/hul/ois/jhove/module/wave/ExifStringChunkemnteucm"' in Associated Data Chunk ignoredlabl0edu/harvard/hul/ois/jhove/module/wave/LabelChunknote/edu/harvard/hul/ois/jhove/module/wave/NoteChunkltxt6edu/harvard/hul/ois/jhove/module/wave/LabeledTextChunk3edu/harvard/hul/ois/jhove/module/wave/ListInfoChunk/edu/harvard/hul/ois/jhove/module/iff/Superchunkjava/lang/Stringjava/io/IOExceptionjava/util/List0edu/harvard/hul/ois/jhove/module/iff/ChunkHeader*edu/harvard/hul/ois/jhove/module/iff/Chunk!edu/harvard/hul/ois/jhove/RepInfo_module&Ledu/harvard/hul/ois/jhove/ModuleBase;_dstreamLjava/io/DataInputStream; read4Chars-(Ljava/io/DataInputStream;)Ljava/lang/String; bytesLeftJequals(Ljava/lang/Object;)Z()Vappend-(Ljava/lang/String;)Ljava/lang/StringBuilder;toString()Ljava/lang/String;$edu/harvard/hul/ois/jhove/ModuleBasegetNByte()J(Ljava/lang/String;J)V setMessage&(Ledu/harvard/hul/ois/jhove/Message;)V setWellFormed(Z)VgetNextChunkHeader4()Ledu/harvard/hul/ois/jhove/module/iff/ChunkHeader;getIDgetSize(Ledu/harvard/hul/ois/jhove/ModuleBase;Ledu/harvard/hul/ois/jhove/module/iff/ChunkHeader;Ljava/io/DataInputStream;Ljava/util/List;Ledu/harvard/hul/ois/jhove/module/wave/ListInfoChunk;)V skipBytesC(Ljava/io/DataInputStream;ILedu/harvard/hul/ois/jhove/ModuleBase;)I(Ljava/lang/String;)VisEmpty()Z addListInfo(Ljava/util/List;)V setExifInfo3(Ledu/harvard/hul/ois/jhove/module/wave/ExifInfo;)Vt(Ledu/harvard/hul/ois/jhove/ModuleBase;Ledu/harvard/hul/ois/jhove/module/iff/ChunkHeader;Ljava/io/DataInputStream;)V!BCDEF *+,-GHF=>**:*Ye  *+   *+  *++YY*+I 0JKLMHFûYM*N*:::6 Y**,*!:<***"W+#YY$%&+'~***"W*Y e`,(-,)I1NO PdQJ !RSNO KLTHFDYM*N-*Y+,*:::6- .Y**/:X0 !1 2 3 4Y**5:6  7 <***"W+#YY$8&+'"I4 NO P1QJ' = RSNOKLUHF-*M*N-:-:-69 :Y*-*;:>< =Y*-*>:? @Y*-*A:<***"W+#YY$8&+'~***"W*Y eI- O P.QJ= !RSOKLjhove/classes/edu/harvard/hul/ois/jhove/module/wave/ListInfoTextChunk.class0000644000707400001440000000620611510702105026254 0ustar garyusers2 K_ J` ab Jc Jd Jef Jg Jh ijk l mn opqrstuvwxyz{|}~ =  B B B A _parent5Ledu/harvard/hul/ois/jhove/module/wave/ListInfoChunk;_listInfoPropsLjava/util/List;_chunkIDLjava/lang/String;(Ledu/harvard/hul/ois/jhove/ModuleBase;Ledu/harvard/hul/ois/jhove/module/iff/ChunkHeader;Ljava/io/DataInputStream;Ljava/util/List;Ledu/harvard/hul/ois/jhove/module/wave/ListInfoChunk;)VCode readChunk&(Ledu/harvard/hul/ois/jhove/RepInfo;)Z StackMapTablefk Exceptions R LM PQ NO +edu/harvard/hul/ois/jhove/module/WaveModule  java/lang/String R IARL ArchivalLocationIARTArtistICMS CommissionedICMTCommentsICOP CopyrightICRD CreationDateICRPCroppedIDIM DimensionsIDPI DotsPerInchIENGEngineerIGNRGenreIKEYKeywordsILGT LightnessIMEDMediumINAMNameIPLTPaletteSettingIPRDProductISBJSubjectISFTSoftwareISHP SharpnessISRCSourceISRF SourceFormITCH Technician"edu/harvard/hul/ois/jhove/Property R %edu/harvard/hul/ois/jhove/InfoMessagejava/lang/StringBuilder R Chunk type ' ' in List Info Chunk ignored R 7edu/harvard/hul/ois/jhove/module/wave/ListInfoTextChunk*edu/harvard/hul/ois/jhove/module/iff/Chunk!edu/harvard/hul/ois/jhove/RepInfo[Bjava/io/IOExceptiont(Ledu/harvard/hul/ois/jhove/ModuleBase;Ledu/harvard/hul/ois/jhove/module/iff/ChunkHeader;Ljava/io/DataInputStream;)V0edu/harvard/hul/ois/jhove/module/iff/ChunkHeadergetID()Ljava/lang/String;_module&Ledu/harvard/hul/ois/jhove/ModuleBase; bytesLeftJ_dstreamLjava/io/DataInputStream;$edu/harvard/hul/ois/jhove/ModuleBase readByteBufD(Ljava/io/DataInputStream;[BLedu/harvard/hul/ois/jhove/ModuleBase;)I([B)Vtrimequals(Ljava/lang/Object;)Z&edu/harvard/hul/ois/jhove/PropertyTypeSTRING(Ledu/harvard/hul/ois/jhove/PropertyType;O(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ljava/lang/Object;)Vjava/util/Listadd()Vappend-(Ljava/lang/String;)Ljava/lang/StringBuilder;toString(Ljava/lang/String;)V setMessage&(Ledu/harvard/hul/ois/jhove/Message;)V!JKLMNOPQRST(*+,-**,*UVTm(*M*N* -, W Y- : ::* :* :* :|* :i* :V* :C* :0* :*  : !* ":#* $:%* &:'* (:)* *:+* ,:-* .:/* 0:r1* 2:_3* 4:L5* 6:97* 8:&9* ::;*<:*=Y>?@W)+AYBYCDE*EFEGHIW3AXYZ[\\%]^jhove/classes/edu/harvard/hul/ois/jhove/module/wave/MpegChunk.class0000644000707400001440000000402211510702105024542 0ustar garyusers2i & '( ) * +, -. /0 /1 2 3456 789 : ;<= /> /?@ 7A BC D EFGt(Ledu/harvard/hul/ois/jhove/ModuleBase;Ledu/harvard/hul/ois/jhove/module/iff/ChunkHeader;Ljava/io/DataInputStream;)VCode readChunk&(Ledu/harvard/hul/ois/jhove/RepInfo;)Z ExceptionsH  IJ+edu/harvard/hul/ois/jhove/module/WaveModule KL MN OPjava/util/ArrayList QSoundInformationR ST UT VWX YZ"edu/harvard/hul/ois/jhove/Property FrameSize[ \]java/lang/Integer ^ _AncillaryDataLengthAncillaryDataDef `T aTMPEG b]c de f gh/edu/harvard/hul/ois/jhove/module/wave/MpegChunk*edu/harvard/hul/ois/jhove/module/iff/Chunkjava/io/IOException_module&Ledu/harvard/hul/ois/jhove/ModuleBase;_dstreamLjava/io/DataInputStream;readUnsignedShort(Ljava/io/DataInputStream;)I skipBytesC(Ljava/io/DataInputStream;ILedu/harvard/hul/ois/jhove/ModuleBase;)I()V1edu/harvard/hul/ois/jhove/module/wave/WaveStringsSOUND_INFORMATION_1[Ljava/lang/String;SOUND_INFORMATION_0buildBitmaskProperty_(ILjava/lang/String;[Ljava/lang/String;[Ljava/lang/String;)Ledu/harvard/hul/ois/jhove/Property;java/util/Listadd(Ljava/lang/Object;)Z&edu/harvard/hul/ois/jhove/PropertyTypeINTEGER(Ledu/harvard/hul/ois/jhove/PropertyType;(I)VO(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ljava/lang/Object;)VANCILLARY_DEF_1ANCILLARY_DEF_0PROPERTY'edu/harvard/hul/ois/jhove/PropertyArityLIST)Ledu/harvard/hul/ois/jhove/PropertyArity;x(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ledu/harvard/hul/ois/jhove/PropertyArity;Ljava/lang/Object;)VaddWaveProperty'(Ledu/harvard/hul/ois/jhove/Property;)V! !*+,-"#!*M,*>,*6,*6,*6,*,WY:, WYY WYY W, W,Y$%jhove/classes/edu/harvard/hul/ois/jhove/module/wave/NoteChunk.class0000644000707400001440000000141011510702105024555 0ustar garyusers2    t(Ledu/harvard/hul/ois/jhove/ModuleBase;Ledu/harvard/hul/ois/jhove/module/iff/ChunkHeader;Ljava/io/DataInputStream;)VCode readChunk&(Ledu/harvard/hul/ois/jhove/RepInfo;)Z Exceptions +edu/harvard/hul/ois/jhove/module/WaveModuleNote  /edu/harvard/hul/ois/jhove/module/wave/NoteChunk5edu/harvard/hul/ois/jhove/module/wave/SimpleTextChunkjava/io/IOException_module&Ledu/harvard/hul/ois/jhove/ModuleBase; readTextPrope(Ledu/harvard/hul/ois/jhove/module/WaveModule;Ljava/lang/String;)Ledu/harvard/hul/ois/jhove/Property;addNote'(Ledu/harvard/hul/ois/jhove/Property;)V!  *+,-  #*M*,N,-jhove/classes/edu/harvard/hul/ois/jhove/module/wave/PeakEnvelopeChunk.class0000644000707400001440000000666211510702105026244 0ustar garyusers2 4F 3GH 3I J KL 3M N 3Ox PQRS T PUV PWXY Z[ \] ^ K_ `a Zbc de Zfg "h i jklmnopqr stu Zvw \x yz{t(Ledu/harvard/hul/ois/jhove/ModuleBase;Ledu/harvard/hul/ois/jhove/module/iff/ChunkHeader;Ljava/io/DataInputStream;)VCode readChunk&(Ledu/harvard/hul/ois/jhove/RepInfo;)Z StackMapTablez|H}~X Exceptions 56 +edu/harvard/hul/ois/jhove/module/WaveModule  | &edu/harvard/hul/ois/jhove/ErrorMessage+Invalid format value in Peak Envelope Chunk 5 -Invalid pointsPerValue in Peak Envelope Chunk "edu/harvard/hul/ois/jhove/PropertyPoint  5 PeakEnvelopeData java/util/ArrayList 5Version java/lang/Long 5 5 FormatPointsPerValue BlockSize PeakChannels NumPeakFramesPosPeakOfPeaks OffsetToPeaks~  Timestamp  PeakEnvelope 7edu/harvard/hul/ois/jhove/module/wave/PeakEnvelopeChunk*edu/harvard/hul/ois/jhove/module/iff/Chunk!edu/harvard/hul/ois/jhove/RepInfo[Bjava/lang/String%[Ledu/harvard/hul/ois/jhove/Property;[Ijava/util/Listjava/io/IOException_module&Ledu/harvard/hul/ois/jhove/ModuleBase;_dstreamLjava/io/DataInputStream;readUnsignedInt(Ljava/io/DataInputStream;)J$edu/harvard/hul/ois/jhove/ModuleBase readByteBufD(Ljava/io/DataInputStream;[BLedu/harvard/hul/ois/jhove/ModuleBase;)I byteBufString([B)Ljava/lang/String; skipBytesC(Ljava/io/DataInputStream;ILedu/harvard/hul/ois/jhove/ModuleBase;)I bytesLeftJsetValid(Z)V(Ljava/lang/String;)V setMessage&(Ledu/harvard/hul/ois/jhove/Message;)VgetValid()I&edu/harvard/hul/ois/jhove/PropertyTypeINTEGER(Ledu/harvard/hul/ois/jhove/PropertyType;'edu/harvard/hul/ois/jhove/PropertyArityARRAY)Ledu/harvard/hul/ois/jhove/PropertyArity;x(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ledu/harvard/hul/ois/jhove/PropertyArity;Ljava/lang/Object;)VreadUnsignedByteB(Ljava/io/DataInputStream;Ledu/harvard/hul/ois/jhove/ModuleBase;)IreadUnsignedShort(Ljava/io/DataInputStream;)IPROPERTY(I)VLONG(J)VO(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ljava/lang/Object;)Vadd(Ljava/lang/Object;)ZlengthSTRINGLISTaddWaveProperty'(Ledu/harvard/hul/ois/jhove/Property;)V!34567*+,-897 (*M,*B,*7,*7,*7 ,*7 ,*7 ,*7,*7:*,W*:,*<,W:*  k*  e666 6' l6++Y 6' l6++Y+,** xd,W :6^ :YS *,O*,O,*O,*OY:P :6- *,O,*OһY:Y:Y !"Y!#$%WY&!"Y#$%WY'!"Y#$%WY(!"Y #$%WY)!"Y #$%WY*!"Y #$%WY+!"Y#$%WY,!"Y#$%W-Y./$%W %W,Y012:v;<=>?@ ACBB ;<=>?@CDEjhove/classes/edu/harvard/hul/ois/jhove/module/wave/SampleChunk.class0000644000707400001440000000532511510702105025102 0ustar garyusers2 +8 *9: *; < => =?@A BCD E FGHIJ BKL MNOPQRS BT UV WXYZ[\]^_`a b cdet(Ledu/harvard/hul/ois/jhove/ModuleBase;Ledu/harvard/hul/ois/jhove/module/iff/ChunkHeader;Ljava/io/DataInputStream;)VCode readChunk&(Ledu/harvard/hul/ois/jhove/RepInfo;)Z StackMapTabledf:g Exceptionsh ,- ij+edu/harvard/hul/ois/jhove/module/WaveModule kl mno pq rq"edu/harvard/hul/ois/jhove/PropertyHours tujava/lang/Integer ,v ,wMinuteSecondFrames CuePointID xujava/lang/Long ,yTypeStartEndFraction PlayCountLoop zu{ |} ,~ ManufacturerProduct SamplePeriod UnityNote PitchFraction SMPTEFormat SMPTEOffsetLoopsExtraDataBytesSample  1edu/harvard/hul/ois/jhove/module/wave/SampleChunk*edu/harvard/hul/ois/jhove/module/iff/Chunk!edu/harvard/hul/ois/jhove/RepInfo%[Ledu/harvard/hul/ois/jhove/Property;java/io/IOException_module&Ledu/harvard/hul/ois/jhove/ModuleBase;_dstreamLjava/io/DataInputStream;readUnsignedInt(Ljava/io/DataInputStream;)J$edu/harvard/hul/ois/jhove/ModuleBasereadSignedByteB(Ljava/io/DataInputStream;Ledu/harvard/hul/ois/jhove/ModuleBase;)IreadUnsignedByte&edu/harvard/hul/ois/jhove/PropertyTypeINTEGER(Ledu/harvard/hul/ois/jhove/PropertyType;(I)VO(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ljava/lang/Object;)VLONG(J)VPROPERTY'edu/harvard/hul/ois/jhove/PropertyArityARRAY)Ledu/harvard/hul/ois/jhove/PropertyArity;x(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ledu/harvard/hul/ois/jhove/PropertyArity;Ljava/lang/Object;)V addSample'(Ledu/harvard/hul/ois/jhove/Property;)V skipBytesC(Ljava/io/DataInputStream;ILedu/harvard/hul/ois/jhove/ModuleBase;)I!*+,-.*+,-/0.6 #*M,*B,*7,*7,*7 ,*7 ,*7 *,6*,6*,6*,6:Y Y SY Y SY Y SY Y S,*6,*7:6,*7,*6,*6,*6,*7,*7 :""YY S"Y Y S"Y Y S"Y Y S"YY S"YY  SY"S :YY! SYY SY Y SY!Y  SY"Y  SY#Y  SY$SY%SY&Y S,Y'(,**)W1(2345567jhove/classes/edu/harvard/hul/ois/jhove/module/wave/WaveStrings.class0000644000707400001440000002070311510702105025141 0ustar garyusers2       !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~        COMPRESSION_FORMAT[Ljava/lang/String;COMPRESSION_INDEX[I SMPTE_FORMATSMPTE_FORMAT_INDEXSOUND_INFORMATION_1SOUND_INFORMATION_0ANCILLARY_DEF_1ANCILLARY_DEF_0()VCode java/lang/StringUnknown or unspecified formatPCM audio in integer formatMicrosoft adaptive PCM'PCM audio in IEEE floating-point format%VSELP codec for Windows CE 2.0 deviceIBM CVSDMicrosoft ALAWMicrosoft MULAW Microsoft DTS0Microsoft Digital Rights Managed encrypted audioMicrosoft Speech audio codecWindows Media RT Voice OKI ADPCM Intel ADPCMVideologic Systems ADPCM Sierra ADPCM Antex ADPCMDSP Solutions DIGISTDDSP Solutions DIGIFIXOKI ADPCM chips or firmwareADPCM for Jazz 16 chip set HP CU CodecHP Dynamic Voice Yamaha ADPCMSpeech Compression SONARCDSP Group True SpeechEcho Speech SC1Ahead Audio File AF36 Audio Processing Technology APTXAhead Audio File AF10Prosody CTI speech cardMerging Technologies LRC Dolby AC2Microsoft GSM610Microsoft MSN audio codec Antex ADPCMEControl Resources VQLPCDSP Solutions DigirealDSP Solutions DIGIADPCMControl Resources CR10Natural Microsystems VBXADPCM Roland RDACEcho Speech SC3Rockwell ADPCMRockwell DIGITALKXebec Multimedia SolutionsAntex G721 ADPCMAntex G728 CELPMicrosoft MSG723Microsoft MSG723.1Microsoft MSG729Microsoft MSG726Microsoft MPEG InSoft RT24 InSoft PACISO/MPEG Layer 3 format tag Lucent G723 Cirrus LogicESS PCMVoxwareCanopus ATRACWAVEFORMATAPICOM G726 ADPCMAPICOM G722 ADPCMMicrosoft DSAT DisplayVoxware Byte Aligned Voxware AC8 Voxware AC10 Voxware AC16 Voxware AC20 Voxware RT24 Voxware RT29Voxware RT29HW Voxware VR12 Voxware VR18 Voxware TQ40Voxware SC3 (7A)Voxware SC3 (7B) SoftSound Voxware TQ60Microsoft MSRT24 AT&T G729AMotion Pixels MVI2Datafusion Systems G726Datafusion Systems GSM610Iterated Systems ISI AudioOnLiveMultitude FT SX20 G.721 ADPCM Convedia G729Congruency Audio Codec Siemens SBC24Sonic Foundry Dolby AC3 SPDIFMediaSonic G723 ZyXEL ADPCM Philips LPCBB Studer Professional Audio Packed Phony TalkRacal Recorder GSMRacal Recorder G720.a Racal G723.1Racal Tetra ACELPNEC AACRhetorex ADPCM wave format type BeCubed IRAT Vivo G723 Vivo Siren Philips CELPPhilips GrundigDEC G723SANYO LD-ADPCM wave typeSipro Lab ACELPNETSipro Lab ACELP4800Sipro Lab ACELP8V3Sipro Lab ACELPG729Sipro Lab ACELPG729ASipro Lab Kelvin VoiceAge AMRDictaphone G726 ADPCMDictaphone CELP68Dictaphone CELP54Qualcomm Pure VoiceQualcomm Half RateRelated to GSM 6.10Microsoft Audio 1Microsoft Audio 2Microsoft Multichannel WMA WMA losslessWMA Pro over S/PDIF Unisys ADPCM Unisys ULAW Unisys ALAWUnisys NAP 16KSyCom ACM SYC008SyCom ACM SYC701 G726LSyCom ACM SYC701 CELP54SyCom ACM SYC701 CELP68Knowledge Adventure ADPCMFraunhofer IIS MPEC 2AACDigital Theater Systems DSCreative Labs ADPCM Fast Speech 8Fast Speech 10 UHER ADPCM Quarterdeck I-Link VCAureal Raw SportInteractive Products HSXInteractive Products RPELPCs2Sony SCXSony SCY Sony ATRAC3Sony SPCTelumTelum IANorcom Voice Systems ADPCMFujitsu FM Towns SND Fujitsu (301) Fujitsu (302) Fujitsu (303) Fujitsu (304) Fujitsu (305) Fujitsu (306) Fujitsu (307) Fujitsu (308)Micronas DevelopmentMicronas CELP833Brooktree digital audio format QDesign Music AT&T VMPCMAT&T TPC Olivetti SM Olivetti PCM Olivetti CELP Olivetti SBC Olivetti OPRLernout & Hauspie CodecLernout & Hauspie CELPLernout & Hauspie SB8Lernout & Hauspie SB12Lernout & Hauspie SB16NorrisAT&T Soundspace MusicompressSonic Foundry Lossless Innings ADPCMFAST Multimedia DVMReserved rangle to 0x2600 Divio's AACNokia adaptive multirate Divio's G7263Com NBXAdaptive multirateAMR with silence detectionComverse G723.1Comverse AVQSBCComverse old SBCSymbol Technology's G729AVoice Age AMR WBIngenient's G726 ISO/MPEG-4 advanced audio CodingEncore Software Ltd's G726Extensible Wave format No SMPTE offset24 frames per second25 frames per second(30 frames per second with frame dropping30 frames per second Non-homogeneous sound dataPadding bit always 0"Sample frequency 22.05 or 44.1 KHzFree format is used Homogeneous sound dataPadding bit may alternateNo free format audio frame Energy of left channel present%Private byte is free for internal use Energy of left channel absent%No private byte free for internal use 1edu/harvard/hul/ois/jhove/module/wave/WaveStringsjava/lang/Object!* 1 %˽YSYSYSYSYSYSY SY SY SY  SY  SY SY SY SYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSY SY!SY"SY #SY!$SY"%SY#&SY$'SY%(SY&)SY'*SY(+SY),SY*-SY+.SY,/SY-0SY.1SY/2SY03SY14SY25SY36SY47SY58SY69SY7:SY8;SY9SY<?SY=@SY>ASY?BSY@CSYADSYBESYCFSYDGSYEHSYFISYGJSYHKSYILSYJMSYKNSYLOSYMPSYNQSYORSYPSSYQTSYRUSYSVSYTWSYUXSYVYSYWZSYX[SYY\SYZ]SY[^SY\_SY]!SY^`SY_aSY`bSYacSYbdSYceSYdfSYegSYfhSYgiSYhjSYikSYjlSYkmSYlnSYmoSYnpSYoqSYprSYqsSYrtSYsuSYtvSYuwSYvxSYwySYxzSYy{SYz|SY{}SY|~SY}SY~SYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYS˼ YOYOYOYOYOYOYOYOYOY  OY  OY  OY OY OYOYOYOYOYOYOYOYOYOY OY!OY"OY#OY$OY%OY&OY'OY(OY 0OY!1OY"2OY#3OY$4OY%5OY&6OY'7OY(8OY)9OY*:OY+;OY,eOY?gOY@iOYApOYBqOYCrOYDsOYEtOYFuOYGvOYHwOYIxOYJyOYKzOYL{OYMOYNOYOOYPOYQOYROYSOYTOYUOYVOYWOYXOYYOYZOY[OY\OY]OY^OY_OY`OYaOYbOYcOYdOYeOYfOYgOYhOYiOYjOYk OYl!OYm#OYn%OYo0OYp1OYq2OYr3OYs4OYt5OYu6OYv@OYwAOYxBOYyPOYzQOY{UOY|`OY}aOY~bOYcOYdOYpOYqOYrOYsOYtOYuOYvOYwOYxOYOYOYOYOYOYOY OY0OY@OYPOYQOY`OYpOYqOYrOYsOYOYOYOYOYOYOYOYOYOYOYOYOYPOYQOYOYPOYOYOYOYOYOYOYOYOYOYOYOYOYOYOYqOYyOY OY%OYACOYBOYBCOYpOYz!OYz"OYOYOYOYOYOYOYOYOYOYSYSYSYSYS YOYOYOYOYOYSYSYSYSYSYSYSYSYSYSYSYSjhove/classes/edu/harvard/hul/ois/jhove/module/wave/LabelChunk.class0000644000707400001440000000141311510702106024673 0ustar garyusers2    t(Ledu/harvard/hul/ois/jhove/ModuleBase;Ledu/harvard/hul/ois/jhove/module/iff/ChunkHeader;Ljava/io/DataInputStream;)VCode readChunk&(Ledu/harvard/hul/ois/jhove/RepInfo;)Z Exceptions +edu/harvard/hul/ois/jhove/module/WaveModuleLabel  0edu/harvard/hul/ois/jhove/module/wave/LabelChunk5edu/harvard/hul/ois/jhove/module/wave/SimpleTextChunkjava/io/IOException_module&Ledu/harvard/hul/ois/jhove/ModuleBase; readTextPrope(Ledu/harvard/hul/ois/jhove/module/WaveModule;Ljava/lang/String;)Ledu/harvard/hul/ois/jhove/Property;addLabel'(Ledu/harvard/hul/ois/jhove/Property;)V!  *+,-  #*M*,N,-jhove/classes/edu/harvard/hul/ois/jhove/module/xml/0000755000707400001440000000000011510702105021472 5ustar garyusersjhove/classes/edu/harvard/hul/ois/jhove/module/xml/XhtmlProcessing.java0000644000707400001440000002566210771562756025531 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.xml; import edu.harvard.hul.ois.jhove.*; import edu.harvard.hul.ois.jhove.module.html.HtmlMetadata; import java.util.*; import org.xml.sax.Attributes; /** * Methods for processing XHTML elements in an XML document. * These are closely related in functionality to corresponding * methods in the XML module. * * @author Gary McGath * @see edu.harvard.hul.ois.jhove.module.html.HtmlDocDesc */ public final class XhtmlProcessing { /** Process an element and extract metadata */ /** Process the element to extract any available metadata. */ protected static void processElement (String localName, String qualifiedName, Attributes atts, HtmlMetadata mdata) { if ("html".equals (localName)) { processHtml (mdata, atts); } else if ("meta".equals (localName)) { processMeta (mdata, atts); } else if ("a".equals (localName)) { processA (mdata, atts); } else if ("img".equals (localName)) { processImg (mdata, atts); } else if ("frame".equals (localName)) { processFrame (mdata, atts); } else if ("script".equals (localName)) { processScript (mdata, atts); } else if ("abbr".equals (localName)) { processAbbr (mdata, atts); } else if ("title".equals (localName)) { processTitle (mdata, atts); } else if ("cite".equals (localName)) { processCite (mdata, atts); } /* Look for certain attributes in any tag. */ for (int i = 0; i < atts.getLength (); i++) { String attname = atts.getLocalName (i); String attval = atts.getValue (i); if ("lang".equals (attname) && attval != null) { mdata.addLanguage (attval); } } } /** Process metadata from an HTML tag */ private static void processHtml (HtmlMetadata mdata, Attributes atts) { String lang = null; for (int i = 0; i < atts.getLength (); i++) { String attname = atts.getLocalName (i); String attval = atts.getValue (i); if ("lang".equals (attname)) { lang = attval; } } if (lang != null) { mdata.setLanguage(lang); } } /** Process metadata from a META tag */ private static void processMeta (HtmlMetadata mdata, Attributes atts) { String name = null; String httpeq = null; String content = null; for (int i = 0; i < atts.getLength (); i++) { String attname = atts.getLocalName (i); String attval = atts.getValue (i); if ("name".equals (attname)) { name = attval; } if ("http-equiv".equals (attname)) { httpeq = attval; } if ("content".equals (attname)) { content = attval; } } if (name != null || httpeq != null || content != null) { List plist = new ArrayList (3); if (name != null) { plist.add (new Property ("Name", PropertyType.STRING, name)); } if (httpeq != null) { plist.add (new Property ("Httpequiv", PropertyType.STRING, httpeq)); } if (content != null) { plist.add (new Property ("Content", PropertyType.STRING, content)); } mdata.addMeta (new Property ("Meta", PropertyType.PROPERTY, PropertyArity.LIST, plist)); } } /** Process metadata from an A element. Only elements with an * HREF attribute are of interest here. We ignore links * to anchors. */ private static void processA (HtmlMetadata mdata, Attributes atts) { for (int i = 0; i < atts.getLength (); i++) { String attname = atts.getLocalName (i); String attval = atts.getValue (i); if ("href".equals (attname)) { String link = attval; if (link.length() > 0 && link.charAt (0) != '#') { mdata.addLink (link); } break; } } } /** Process metadata from the IMG element. */ private static void processImg (HtmlMetadata mdata, Attributes atts) { String alt = null; String longdesc = null; String src = null; int height = -1; int width = -1; for (int i = 0; i < atts.getLength (); i++) { String attname = atts.getLocalName (i); String attval = atts.getValue (i); if ("alt".equals (attname)) { alt = attval; } else if ("src".equals (attname)) { src = attval; } else if ("longdesc".equals (attname)) { longdesc = attval; } else if ("height".equals (attname)) { try { height = Integer.parseInt(attval); } catch (Exception e) {} } else if ("width".equals (attname)) { try { width = Integer.parseInt(attval); } catch (Exception e) {} } } List plist = new ArrayList (5); if (alt != null) { plist.add (new Property ("Alt", PropertyType.STRING, alt)); } if (longdesc != null) { plist.add (new Property ("Longdesc", PropertyType.STRING, longdesc)); } if (src != null) { plist.add (new Property ("Src", PropertyType.STRING, src)); } if (height >= 0) { plist.add (new Property ("Height", PropertyType.INTEGER, new Integer (height))); } if (width >= 0) { plist.add (new Property ("Width", PropertyType.INTEGER, new Integer (width))); } if (!plist.isEmpty ()) { mdata.addImage(new Property ("Image", PropertyType.PROPERTY, PropertyArity.LIST, plist)); } } /** Process metadata from the FRAME element. */ private static void processFrame (HtmlMetadata mdata, Attributes atts) { String name = null; String title = null; String src = null; String longdesc = null; int height = -1; int width = -1; for (int i = 0; i < atts.getLength (); i++) { String attname = atts.getLocalName (i); String attval = atts.getValue (i); if ("name".equals (attname)) { name = attval; } else if ("title".equals (attname)) { title = attval; } else if ("src".equals (attname)) { src = attval; } else if ("longdesc".equals (attname)) { longdesc = attval; } } List plist = new ArrayList (4); if (name != null) { plist.add (new Property ("Name", PropertyType.STRING, name)); } if (title != null) { plist.add (new Property ("Title", PropertyType.STRING, title)); } if (longdesc != null) { plist.add (new Property ("Longdesc", PropertyType.STRING, longdesc)); } if (src != null) { plist.add (new Property ("Src", PropertyType.STRING, src)); } if (!plist.isEmpty ()) { mdata.addFrame(new Property ("Frame", PropertyType.PROPERTY, PropertyArity.LIST, plist)); } } /** Process metadata from the SCRIPT element. */ private static void processScript (HtmlMetadata mdata, Attributes atts) { for (int i = 0; i < atts.getLength (); i++) { String attname = atts.getLocalName (i); String attval = atts.getValue (i); if ("type".equals (attname)) { String stype = attval; if (stype.length() > 0 ) { mdata.addScript (stype); } } } } /** Processes metadata from the ABBR element. * This will require the PCdata as well as the attributes, * so we deposit the Property temporarily in the Metadata. */ private static void processAbbr (HtmlMetadata mdata, Attributes atts) { List lst = new ArrayList (2); Property p = new Property ("abbr", PropertyType.PROPERTY, PropertyArity.LIST, lst); for (int i = 0; i < atts.getLength (); i++) { String attname = atts.getLocalName (i); String attval = atts.getValue (i); if ("title".equals (attname)) { if (attval.length() > 0 ) { lst.add (new Property ("title", PropertyType.STRING, attval)); } // Note: The PCData should be stuck at the // front of the list when we get it, as // the "abbr" property. } } mdata.setPropUnderConstruction (p); } /** Processes metadata from the TITLE element. * This will require PCData, so we deposit the Property * temporarily in the Metadata. */ private static void processTitle (HtmlMetadata mdata, Attributes atts) { Property p = new Property ("title", PropertyType.STRING, ""); // store property with placeholder value mdata.setPropUnderConstruction (p); } /** Processes metadata from the CITE element. * This will require PCData, so we deposit the Property * temporarily in the Metadata. */ private static void processCite (HtmlMetadata mdata, Attributes atts) { Property p = new Property ("cite", PropertyType.STRING, ""); // store property with placeholder value mdata.setPropUnderConstruction (p); } } jhove/classes/edu/harvard/hul/ois/jhove/module/xml/XmlDeclHandler.java0000644000707400001440000000557710771562757025232 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.xml; import java.util.*; import org.xml.sax.SAXException; import org.xml.sax.ext.DeclHandler; /** * * This implementation of DeclHandler takes care of * collecting entity declarations. * * @author Gary McGath * */ public class XmlDeclHandler implements DeclHandler { private List _intEntityDeclarations; private List _extEntityDeclarations; public XmlDeclHandler () { _intEntityDeclarations = new LinkedList (); _extEntityDeclarations = new LinkedList (); } /** * Report an element type declaration. * Does nothing. * @see org.xml.sax.ext.DeclHandler#elementDecl(java.lang.String, java.lang.String) */ public void elementDecl(String arg0, String arg1) throws SAXException { } /** * Adds internal entity declarations to the entity declarations * list in the form of a String[2], with element 0 being the * name and element 1 being the value. */ public void internalEntityDecl(String name, String value) throws SAXException { String[] decl = new String[2]; decl[0] = name; decl[1] = value; _intEntityDeclarations.add (decl); } /** * Adds external entity declarations to the entity declarations * list in the form of a String[3], with element 0 being the * name, element 1 the public ID, and 2 the system ID. */ public void externalEntityDecl(String name, String publicID, String systemID) throws SAXException { String[] decl = new String[3]; decl[0] = name; decl[1] = publicID; decl[2] = systemID; _extEntityDeclarations.add (decl); } /** Report an attribute type declaration. * Does nothing. * @see org.xml.sax.ext.DeclHandler#attributeDecl(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String) */ public void attributeDecl( String arg0, String arg1, String arg2, String arg3, String arg4) throws SAXException { } /** * Returns list of entity declarations. Each list * is an array String[2], giving the name and * value respectively. */ public List getInternalEntityDeclarations () { return _intEntityDeclarations; } /** * Returns list of entity declarations. Each list * is an array String[3], giving the name, * public ID, and system ID respectively. */ public List getExternalEntityDeclarations () { return _extEntityDeclarations; } } jhove/classes/edu/harvard/hul/ois/jhove/module/xml/XmlDeclStream.java0000644000707400001440000002423711266077014025065 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003-4 by JSTOR and the President and Fellows of Harvard College * **********************************************************************/ package edu.harvard.hul.ois.jhove.module.xml; import java.io.*; import java.util.*; /** * This class is layered under the InputSource for the XmlModule * so that it can detect an XML declaration and character references, * which aren't reported by other API's. * * This is called XmlDeclStream for historical reasons, though it's * no longer limited to that function. * * @author Gary McGath */ public class XmlDeclStream extends FilterInputStream { private static final int CR = 0x0d; // '\r' private static final int LF = 0x0a; // '\n' private StringBuffer declBuf; private StringBuffer refBuf; private boolean seenChars; private String _version; private String _encoding; private String _standalone; /* List of Integers giving character references */ private List _charRefs; /* To try to determine line ending */ protected boolean _lineEndCR; protected boolean _lineEndLF; protected boolean _lineEndCRLF; protected int _prevChar; public XmlDeclStream (InputStream strm) { super (strm); declBuf = null; seenChars = false; _charRefs = new LinkedList (); // No line end types have been discovered. _lineEndCR = false; _lineEndLF = false; _lineEndCRLF = false; _prevChar = 0; } /** * Reads the next byte of data from this input stream. * Processes bytes as it reads them. */ public int read () throws IOException { int retval = super.read (); if (retval > 0) { process (retval); } return retval; } /** * Reads up to byte.length bytes of data from this * input stream into an array of bytes. * Processes bytes as it reads them. */ public int read (byte[] b) throws IOException { int nbytes = super.read (b); for (int i = 0; i < nbytes; i++) { process ((int) b[i]); } return nbytes; } /** * Reads up to len bytes of data from this * input stream into an array of bytes. * Processes bytes as it reads them. */ public int read (byte[] b, int off, int len) throws IOException { int nbytes = super.read (b, off, len); for (int i = off; i < off + nbytes; i++) { process ((int) b[i]); } return nbytes; } /** * Returns the character references as a List * of Integers. No sorting or elimination of * duplicates is done; this is just all the * character references in the order they occurred. */ public List getCharacterReferences () { return _charRefs; } /** Accessor functions. */ /** Returns the version string. May be null (though it shouldn't * be in well-formed XML). */ public String getVersion () { return _version; } /** Returns the encoding string. May be null. */ public String getEncoding () { return _encoding; } /** Returns the standalone string. May be null. */ public String getStandalone () { return _standalone; } /* Processes each byte which comes through, looking for an XML * declaration. When it has a complete one, parses out the * parameters and makes them available. * * The XML declaration must be the first thing in the file. */ private void process (int b) { /* Determine the line ending type(s). */ checkLineEnd(b); _prevChar = b; if (!seenChars || declBuf != null) { if (declBuf == null && b == (int) '<') { declBuf = new StringBuffer ("<"); } else if (declBuf != null) { declBuf.append ((char) b); if ((char) b == '>') { processDecl (); declBuf = null; } } } if (refBuf == null && b == (int) '&') { refBuf = new StringBuffer ("&"); } else if (refBuf != null) { if (refBuf.length() == 1 && b != (int) '#') { // If & isn't followed by #, it's not a character // reference. refBuf = null; } else if (b == ';') { processRef (); refBuf = null; } else { refBuf.append ((char) b); } } seenChars = true; } /* We have the first thing to be enclosed in angle * brackets in declBuf. See if it's an XML declaration, * and if so, extract the interesting information. */ private void processDecl () { String decl = declBuf.toString (); if (!decl.startsWith ("")) { declBuf = null; } else { // get version, encoding, standalone int off; int off1 = 0; off = decl.indexOf ("version"); if (off > 0) { _version = extractParam (decl, off); off1 = off; } // Use of off1 enforces order of attributes off = decl.indexOf ("encoding", off1); if (off > 0) { _encoding = extractParam (decl, off); off1 = off; } off = decl.indexOf ("standalone", off1); if (off > 0) { _standalone = extractParam (decl, off); } } } /* We have a character reference -- or at least something * that looks vaguely like one -- in refBuf. This includes * the initial &# but not the final semicolon. * * According to the w3c documentation, the 'x' which indicates * a hexadecimal value must be lower case, but the * hexadecimal digits may be upper or lower case. */ private void processRef () { boolean isHex = (refBuf.charAt (2) == 'x'); int val = 0; // Copy refBuf to a local variable so we can make sure // it gets nulled however we return. StringBuffer refBuf1 = refBuf; refBuf = null; if (isHex) { for (int i = 3; i < refBuf1.length (); i++) { char ch = Character.toUpperCase (refBuf1.charAt (i)); if (ch >= 'A' && ch <= 'F') { val = 16 * val + ((int) ch - 'A' + 10); } else if (ch >= '0' && ch <= '9') { val = 16 * val + ((int) ch - '0'); } else { return; // invalid character in hex ref } } } else { // better be decimal for (int i = 2; i < refBuf1.length (); i++) { char ch = refBuf1.charAt (i); if (ch >= '0' && ch <= '9') { val = 10 * val + ((int) ch - '0'); } else { return; // invalid character in hex ref } } } _charRefs.add (new Integer (val)); } /* extract a parameter (after an equal sign) * from a string, after the offset off. */ private String extractParam (String str, int off) { int equIdx = str.indexOf ('=', off); if (equIdx == -1) { return null; } // The parameter may be in single or double quotes, boolean singleQuote = false; boolean doubleQuote = false; int startOff = -1; for (int i = equIdx + 1; i < str.length(); i++) { char ch = str.charAt (i); if (Character.isWhitespace(ch)) { if (startOff < 0) { continue; } else if (!singleQuote && !doubleQuote) { // white space, and not in quotes. return str.substring(startOff, i + 1); } } else if (ch == '\'' && !doubleQuote) { if (!singleQuote) { // Start of single-quoted string singleQuote = true; startOff = i + 1; } else { // End of single-quoted string return str.substring (startOff, i); } } else if (ch == '"' && !singleQuote) { if (!doubleQuote) { // Start of double-quoted string doubleQuote = true; startOff = i + 1; } else { // End of double-quoted string return str.substring (startOff, i); } } else if (startOff < 0) { // Non-whitespace character, start of unquoted string startOff = i; } } return null; // fell off end without finding a valid string } /* Accumulate information about line endings. ch is the current character, and _prevChar the one before it. */ protected void checkLineEnd (int ch) { if (ch == LF) { if (_prevChar == CR) { _lineEndCRLF = true; } else { _lineEndLF = true; } } else if (_prevChar == CR) { _lineEndCR = true; } } public String getKindOfLineEnd() { if (_lineEndCR || _lineEndLF || _lineEndCRLF) { if (_lineEndCRLF) { return "CRLF"; } if (_lineEndCR) { return "CR"; } if (_lineEndLF) { return "LF"; } } return null; } } jhove/classes/edu/harvard/hul/ois/jhove/module/xml/XmlLexicalHandler.java0000644000707400001440000000604510771562756025732 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.xml; import java.util.*; import org.xml.sax.SAXException; import org.xml.sax.ext.LexicalHandler; /** * * This implementation of LexicalHandler takes care of * comments, DTD's, entities and other stuff for XmlModule. * The caller has to make sure the LexicalHandler property * is supported by the SAX implementation, and set that * property to this class. * * @author Gary McGath * */ public class XmlLexicalHandler implements LexicalHandler { private List _comments; private Set _entityNames; public XmlLexicalHandler () { _comments = new LinkedList (); _entityNames = new HashSet (); } /** * Report the end of a CDATA section. * Does nothing. * @see org.xml.sax.ext.LexicalHandler#endCDATA() */ public void endCDATA() throws SAXException { // no action necessary } /** * Report the end of DTD declarations. * Does nothing. * @see org.xml.sax.ext.LexicalHandler#endDTD() */ public void endDTD() throws SAXException { } /** * Report the start of a CDATA section. * Does nothing. * @see org.xml.sax.ext.LexicalHandler#startCDATA() */ public void startCDATA() throws SAXException { // no action necessary } /** * Gathers comments into the comments list. * * @see org.xml.sax.ext.LexicalHandler#comment(char[], int, int) */ public void comment(char[] text, int start, int length) throws SAXException { _comments.add (String.copyValueOf (text, start, length)); } /** * Accumulates entity names into the entity set. This will be * used for determining which entities are actually used. * * @see org.xml.sax.ext.LexicalHandler#startEntity(java.lang.String) */ public void startEntity(String name) throws SAXException { _entityNames.add (name); } /** * Report the end of an entity. * Does nothing. * * @see org.xml.sax.ext.LexicalHandler#endEntity(java.lang.String) */ public void endEntity(String name) throws SAXException { // No action necessary } /** * Report the start of DTD declarations, if any. * Does nothing. * @see org.xml.sax.ext.LexicalHandler#startDTD(java.lang.String, java.lang.String, java.lang.String) */ public void startDTD(String arg0, String arg1, String arg2) throws SAXException { } /** * Returns the value of the comments list, which is * a List of Strings. */ public List getComments () { return _comments; } /** * Returns the Set of entity names. */ public Set getEntityNames () { return _entityNames; } } jhove/classes/edu/harvard/hul/ois/jhove/module/xml/XmlModuleHandler.java0000644000707400001440000003533211266076751025572 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004-2007 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.module.xml; //import java.io.*; import edu.harvard.hul.ois.jhove.*; import edu.harvard.hul.ois.jhove.module.html.HtmlMetadata; import edu.harvard.hul.ois.jhove.module.html.DTDMapper; import java.util.*; import org.xml.sax.helpers.DefaultHandler; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import org.xml.sax.SAXParseException; import org.xml.sax.Attributes; /** * * This handler does the parsing work of the XML module. * * @author Gary McGath * */ public class XmlModuleHandler extends DefaultHandler { /* List of entities String[2], { public ID, system ID} */ private List _entities; /* Map of namespaces, prefix (String) to URI (String) */ private Map _namespaces; /* List of processing instructions. Each element * is an array of two strings, giving the target * and data respectively. */ private List _processingInsts; /* List of generated Messages. */ private List _messages; /* Validity flag. */ private boolean _valid; /* Qualified name of the root element. */ private String _root; /* URI for DTD specificiation */ private String _dtdURI; /* List of schema URI's. Each element is a String[2], * consisting of the namespace URI and the schema location. */ private List _schemas; /* List of unparsed entities. Each is an array String[4]; * name, public ID, system ID and notation name * respectively. */ private List _unparsedEntities; /* Error counter. */ private int _nErrors; /* Notations list. Each is an array String[3]: * name, public ID, and system ID. */ private List _notations; /* List of all the attributes. This is used to * check on the use of unparsed entities. */ private Set _attributeVals; /* Limit on number of errors to report. */ private static final int MAXERRORS = 2000; /* XHTML flag, only for XHTML documents referred * by the HTML module. */ private boolean _xhtmlFlag; /* HTMLMetadata object; used only with XHTML documents. */ private HtmlMetadata _htmlMetadata; /* Flag set if we've seen any components. This is an indirect * way of checking if the "signature" (the XML declaration) * has been seen. */ private boolean _sigFlag; /** * Constructor. */ public XmlModuleHandler () { _xhtmlFlag = false; _htmlMetadata = null; _entities = new LinkedList (); _namespaces = new HashMap (); _processingInsts = new LinkedList (); _messages = new LinkedList (); _attributeVals = new HashSet (); _dtdURI = null; _root = null; _valid = true; _nErrors = 0; _schemas = new LinkedList (); _unparsedEntities = new LinkedList (); _notations = new LinkedList (); _sigFlag = false; } /** * Sets the value of the XHTML flag. Special properties * are extracted if this is an XHTML document. */ public void setXhtmlFlag (boolean flag) { _xhtmlFlag = flag; } /** * Returns the HTML metadata object. Will be non-null only * for a document recognized as XHTML. */ public HtmlMetadata getHtmlMetadata () { return _htmlMetadata; } /** * Looks for the first element encountered. Stores * its name as the value to be returned by getRoot, * qualified name by preference, local name if the * qualified name isn't available. */ public void startElement (String namespaceURI, String localName, String qualifiedName, Attributes atts) throws SAXException { // The first element we encounter is the root. // Save it. if (_root == null) { _sigFlag = true; if (!"".equals(qualifiedName)) { _root = qualifiedName; } else { _root = localName; } } if (atts != null) { int natts = atts.getLength (); for (int i = 0; i < natts; i++) { String name = atts.getLocalName (i); String namespace = atts.getURI (i); // namespace URI String val = atts.getValue (i); if ("http://www.w3.org/2001/XMLSchema-instance".equals (namespace)) { String[] schArr = new String[2]; if ("schemaLocation".equals (name)) { /* val should consist of two tokens, giving the * URI and the location respectively. */ String[] toks = val.split ("\\s", 2); /* Could be a length 0 or 1 array in pathological * cases, so convert it to a length-2 array. * Note that while the schemaLocation attribute * SHOULD have two white-space separated elements, * this may not be the case, so always check the * array length before referencing its elements. */ if (toks.length > 0 && toks[0] != null) { schArr[0] = toks[0].trim (); } else { schArr[0] = ""; } if (toks.length > 1 && toks[1] != null) { schArr[1] = toks[1].trim (); } else { schArr[1] = ""; } _schemas.add (schArr); } if ("noNamespaceSchemaLocation".equals (name)) { schArr[0] = "[None]"; schArr[1] = val; _schemas.add (schArr); } } // Collect all attribute values. _attributeVals.add (val); } } if (_xhtmlFlag) { if (_htmlMetadata == null) { _htmlMetadata = new HtmlMetadata (); } XhtmlProcessing.processElement (localName, qualifiedName, atts, _htmlMetadata); } } /** The only action taken here is some bookkeeping in connection * with the HTML metadata.*/ public void endElement(String namespaceURI, String localName, String qName) { if (_htmlMetadata != null) { _htmlMetadata.finishPropUnderConstruction (); } } /** Processes PCData characters. This does things only * in connection with properties under construction in * HTML metadata. */ public void characters(char[] ch, int start, int length) { if (_htmlMetadata != null && _htmlMetadata.getPropUnderConstruction () != null) { _htmlMetadata.addToPropUnderConstruction (ch, start, length); } } /** * Begin the scope of a prefix-URI Namespace mapping. * Prefixes mappings are stored in _namespaces. */ public void startPrefixMapping(String prefix, String uri) throws SAXException { //THL we want the root namespace even if it declares no prefix !!! //if (!"".equals (prefix)) { _namespaces.put(prefix, uri); //} } /** * Handles a processing instruction. Adds it to * the list that will be returned by getProcessingInstructions. * Each element of the list is an array of two Strings. Element 0 of * the array is the target, and element 1 is the data. */ public void processingInstruction(String target, String data) throws SAXException { _sigFlag = true; if (data == null) { data = ""; } String[] pi = new String[2]; pi[0] = target; pi[1] = data; _processingInsts.add (pi); } /** * Puts all notations into the notation list. A list entry * is a String[3], consisting of name, public ID, and system * ID. */ public void notationDecl (String name, String publicID, String systemID) throws SAXException { String[] notArr = new String[3]; notArr[0] = name; notArr[1] = publicID; notArr[2] = systemID; _notations.add (notArr); } /** Overrides standard resolveEntity. First looks for DTD and * entity files that are stored as resources, and uses those * if available. (Faster and more reliable than grabbing them * over the Net.) If that fails, calls the superclass's resolveEntity. * Regardless, it then looks for anything * that appears to be a DTD and puts it in the DTD URI field. * If the superclass's attempt to resolve the entity results in * an IOException, we just ignore it. * */ public InputSource resolveEntity(String publicId, String systemId) throws SAXException { // Do special-case checking for the XHTML DTD's if (!_xhtmlFlag) { if (DTDMapper.isXHTMLDTD (publicId)) { _xhtmlFlag = true; } } InputSource ent = DTDMapper.publicIDToFile(publicId); if (ent == null) { try { ent = super.resolveEntity(publicId, systemId); } catch (SAXException ee) { throw ee; } catch (Exception e) { // Depending on the JDK version, super.resolveEntity // may or may not be formally capable of throwing an IOException. // This hack allows compatibility in either case. throw new SAXException (e); } } else { // A little magic so SAX won't give up in advance on // relative URI's. ent.setSystemId ("http://hul.harvard.edu/hul"); } // Report in entity properties String[] entArr = new String[2]; entArr[0] = publicId; entArr[1] = systemId; _entities.add (entArr); if (systemId.endsWith (".dtd")) { /* Assume that the first system ID in the file with a .dtd * extension is the actual DTD */ if (_dtdURI == null) { _dtdURI = systemId; } } return ent; } /** * Picks up unparsed entity declarations, after calling the * superclass's unparsedEntityDecl, and puts their information * into the unparsed entity declaration list as an array of * four strings: [ name, publicId, systemId, notationName]. * Null values are converted into empty strings. */ public void unparsedEntityDecl (String name, String publicId, String systemId, String notationName) throws SAXException { super.unparsedEntityDecl (name, publicId, systemId, notationName); String[] info = new String[4]; info[0] = name == null ? "" : name; info[1] = publicId == null ? "" : publicId; info[2] = systemId == null ? "" : systemId; info[3] = notationName == null ? "" : notationName; _unparsedEntities.add (info); } /** * Processes a warning. We just add an InfoMessage. */ public void warning (SAXParseException e) { _messages.add (new InfoMessage (e.getMessage())); } /** * Processes a parsing exception. An ill-formed piece * of XML will get a fatalError (I think), so we can assume * that any error here indicates only invalidity. */ public void error(SAXParseException e) { _valid = false; if (_nErrors == MAXERRORS) { _messages.add (new InfoMessage ("Error messages in excess of " + MAXERRORS + " not reported")); } else if (_nErrors < MAXERRORS) { int line = e.getLineNumber(); int col = e.getColumnNumber(); _messages.add (new ErrorMessage (e.getMessage ().toString (), "Line = " + line + ", Column = " + col)); } ++_nErrors; } /** * Returns the set of attribute values. */ public Set getAttributeValues () { return _attributeVals; } /** * Returns the list of schemas. The elements of the list * are Strings, giving the URI's for the schemas. */ public List getSchemas () { return _schemas; } /** * Returns the list of unparsed entities. The elements of the * list are arrays of four Strings, giving the name, public * ID, system ID and notation name respectively. */ public List getUnparsedEntities () { return _unparsedEntities; } /** * Returns the map of prefixes to namespaces. The keys * and values are Strings. */ public Map getNamespaces () { return _namespaces; } /** * Returns the DTD URI. May be null. */ public String getDTDURI () { return _dtdURI; } /** Returns the List of processing instructions. Each element * is an array of two strings, giving the target * and data respectively. */ public List getProcessingInstructions () { return _processingInsts; } /** * Returns the list of notations. Each is an array String[3]: * name, public ID, and system ID. */ public List getNotations () { return _notations; } /** Returns the qualified name of the root element. */ public String getRoot () { return _root; } /** Returns the List of messages generated during the parse. */ public List getMessages () { return _messages; } /** Returns the validity state. If error * has been called, the return value will be false. */ public boolean isValid () { return _valid; } /** Returns true if we have seen an element or a * processing instruction, which implies that we've seen an * XML declaration. */ public boolean getSigFlag () { return _sigFlag; } } jhove/classes/edu/harvard/hul/ois/jhove/module/xml/build.xml0000644000707400001440000000205611204567750023335 0ustar garyusers XML module build file Jhove - JSTOR/Harvard Object Validation Environment Version 1.0 2004-02-03 Copyright 2004 by JSTOR and the President and Fellows of Harvard College jhove/classes/edu/harvard/hul/ois/jhove/module/xml/package.html0000644000707400001440000000056310771562756024007 0ustar garyusers Contains supporting classes for the XML-HUL module.

jhove/classes/edu/harvard/hul/ois/jhove/module/xml/XhtmlProcessing.class0000644000707400001440000001015411510702105025653 0ustar garyusers2 Jab cd Ief Igh Iij Ikl Imn Iop Iqr Ist Iu vw vx vyz {| {}~   { c c { <  <  { { { {()VCodeprocessElements(Ljava/lang/String;Ljava/lang/String;Lorg/xml/sax/Attributes;Ledu/harvard/hul/ois/jhove/module/html/HtmlMetadata;)V StackMapTable processHtmlO(Ledu/harvard/hul/ois/jhove/module/html/HtmlMetadata;Lorg/xml/sax/Attributes;)V processMetaprocessA processImg processFrame processScript processAbbr processTitle processCite KLhtml QRmeta TRa XRimg YRframe [Rscript \Rabbr ]Rtitle _Rcite `R lang name http-equivcontentjava/util/ArrayList K"edu/harvard/hul/ois/jhove/PropertyName K  HttpequivContentMeta  K href altsrclongdescheight java/lang/ExceptionwidthAltLongdescSrcHeight java/lang/IntegerWidth Image TitleFrame type 4edu/harvard/hul/ois/jhove/module/xml/XhtmlProcessingjava/lang/Objectjava/lang/String2edu/harvard/hul/ois/jhove/module/html/HtmlMetadataorg/xml/sax/Attributesjava/util/Listequals(Ljava/lang/Object;)Z getLength()I getLocalName(I)Ljava/lang/String;getValue addLanguage(Ljava/lang/String;)V setLanguage(I)V&edu/harvard/hul/ois/jhove/PropertyTypeSTRING(Ledu/harvard/hul/ois/jhove/PropertyType;O(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ljava/lang/Object;)VaddPROPERTY'edu/harvard/hul/ois/jhove/PropertyArityLIST)Ledu/harvard/hul/ois/jhove/PropertyArity;x(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ledu/harvard/hul/ois/jhove/PropertyArity;Ljava/lang/Object;)VaddMeta'(Ledu/harvard/hul/ois/jhove/Property;)VlengthcharAt(I)CaddLinkparseInt(Ljava/lang/String;)IINTEGERisEmpty()ZaddImageaddFrame addScriptsetPropUnderConstruction1IJ KLM* NOM* -,* -,w* -,f * -, U * -, D * -,3* -,"* -,*-,6,2,:,: -ɱP  3 QRM]=M>+(+:+:M,*,PS( TRMMN:6+E+:+:MN:, -oY:, Y!",#$W- Y%"-#$W Y&"#$W* Y'()*+P5 UVSSS+SS  "W XRMkM=+C+N+:,-#:-.#*/ P C YRM PMN:666+}+:+: 0  MS1  :B2  N23 46: 6 46: ~Y:, Y7",#$W- Y8"-#$W Y9"#$W  Y:;;()VCode elementDecl'(Ljava/lang/String;Ljava/lang/String;)V Exceptions'internalEntityDeclexternalEntityDecl9(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V attributeDecl](Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)VgetInternalEntityDeclarations()Ljava/util/List;getExternalEntityDeclarations java/util/LinkedList java/lang/String( )*3edu/harvard/hul/ois/jhove/module/xml/XmlDeclHandlerjava/lang/Objectorg/xml/sax/ext/DeclHandlerorg/xml/sax/SAXExceptionjava/util/Listadd(Ljava/lang/Object;)Z!    '**Y*Y %N-+S-,S*-W.":+S,S-S*W **jhove/classes/edu/harvard/hul/ois/jhove/module/xml/XmlDeclStream.class0000644000707400001440000000635211510702105025233 0ustar garyusers2 5g 4h 4ij k 4l 4m 4n 4o 4p 5q 4r 5s 5t 4u 4v 4w 4xyz { | 4} 4~  4    4    ) 6:CRI ConstantValue LF declBufLjava/lang/StringBuffer;refBuf seenCharsZ_versionLjava/lang/String; _encoding _standalone _charRefsLjava/util/List; _lineEndCR _lineEndLF _lineEndCRLF _prevChar(Ljava/io/InputStream;)VCoderead()I StackMapTable Exceptions([B)I([BII)IgetCharacterReferences()Ljava/util/List; getVersion()Ljava/lang/String; getEncoding getStandaloneprocess(I)V processDecl()V processRefy extractParam'(Ljava/lang/String;I)Ljava/lang/String; checkLineEndgetKindOfLineEnd KL <= ?@java/util/LinkedList K^ EF G@ H@ I@ J7 NO [\ NS NT AB CB DB e\java/lang/StringBuffer< K ]^ >=& O `^ X version cdencoding  standalone  java/lang/Integer K\ CRLF2edu/harvard/hul/ois/jhove/module/xml/XmlDeclStreamjava/io/FilterInputStreamjava/io/IOExceptionjava/lang/String(Ljava/lang/String;)Vappend(C)Ljava/lang/StringBuffer;lengthtoString startsWith(Ljava/lang/String;)ZendsWithindexOf(Ljava/lang/String;)I(Ljava/lang/String;I)IcharAt(I)Cjava/lang/Character toUpperCase(C)Cjava/util/Listadd(Ljava/lang/Object;)Z(II)I isWhitespace(C)Z substring(II)Ljava/lang/String;!45 6789:78;<=>=?@ABCBDBEFG@H@I@J7KLM;/*+***Y*** * NOM(* <* PQRNSM8*+ =>*+3 P QRNTMB&*+66`*+3 P  QRUVM*WXM*YXM*ZXM*[\M** * *A*<*Y$**W> ***&*Y?*8*# *;** *W*P   ]^Mj*L+ + *J>+!"=**+#>+$%=**+#>+&%= **+#P_`^M *'x<=*N*_6-P-'(6AFhAd ``= 09h0d`=:6-.-'609 h0d`=*)Y*+WP/ @ab2,cdM +=,>666`6+-+.6/ mhc+`0'"6`6;+0""6`6+06rP(  a_ e\ME. *  * **  *P fXMM5** * !* 1*2*3P jhove/classes/edu/harvard/hul/ois/jhove/module/xml/XmlLexicalHandler.class0000644000707400001440000000223611510702105026064 0ustar garyusers2: %& % '( % ) *+ ,- .-/01 _commentsLjava/util/List; _entityNamesLjava/util/Set;()VCodeendCDATA Exceptions2endDTD startCDATAcomment([CII)V startEntity(Ljava/lang/String;)V endEntitystartDTD9(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V getComments()Ljava/util/List;getEntityNames()Ljava/util/Set; java/util/LinkedList java/util/HashSet 3 456 7896edu/harvard/hul/ois/jhove/module/xml/XmlLexicalHandlerjava/lang/Objectorg/xml/sax/ext/LexicalHandlerorg/xml/sax/SAXExceptionjava/lang/String copyValueOf([CII)Ljava/lang/String;java/util/Listadd(Ljava/lang/Object;)Z java/util/Set!   '**Y*Y   *+ W *+ W   !"*#$*jhove/classes/edu/harvard/hul/ois/jhove/module/xml/XmlModuleHandler.class0000644000707400001440000001330011510702105025722 0ustar garyusers2 J I I  I  I I I I I I I I I I I I       ' ' ' ' J 1   J 9   A A A A ? _entitiesLjava/util/List; _namespacesLjava/util/Map;_processingInsts _messages_validZ_rootLjava/lang/String;_dtdURI_schemas_unparsedEntities_nErrorsI _notations_attributeValsLjava/util/Set; MAXERRORS ConstantValue _xhtmlFlag _htmlMetadata4Ledu/harvard/hul/ois/jhove/module/html/HtmlMetadata;_sigFlag()VCode setXhtmlFlag(Z)VgetHtmlMetadata6()Ledu/harvard/hul/ois/jhove/module/html/HtmlMetadata; startElementQ(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lorg/xml/sax/Attributes;)V StackMapTable Exceptions endElement9(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V characters([CII)VstartPrefixMapping'(Ljava/lang/String;Ljava/lang/String;)VprocessingInstruction notationDecl resolveEntity?(Ljava/lang/String;Ljava/lang/String;)Lorg/xml/sax/InputSource;unparsedEntityDeclK(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Vwarning"(Lorg/xml/sax/SAXParseException;)VerrorgetAttributeValues()Ljava/util/Set; getSchemas()Ljava/util/List;getUnparsedEntities getNamespaces()Ljava/util/Map; getDTDURI()Ljava/lang/String;getProcessingInstructions getNotationsgetRoot getMessagesisValid()Z getSigFlag de `R abjava/util/LinkedList KLjava/util/HashMap MN OL PLjava/util/HashSet [\ UT ST QR XY VL WL ZL cR  )http://www.w3.org/2001/XMLSchema-instancejava/lang/StringschemaLocation\s  noNamespaceSchemaLocation[None]2edu/harvard/hul/ois/jhove/module/html/HtmlMetadata e v   {|org/xml/sax/SAXExceptionjava/lang/Exception dhttp://hul.harvard.edu/hul .dtd  %edu/harvard/hul/ois/jhove/InfoMessage  d-Error messages in excess of 2000 not reported  &edu/harvard/hul/ois/jhove/ErrorMessage  java/lang/StringBuilderLine =      , Column = dx5edu/harvard/hul/ois/jhove/module/xml/XmlModuleHandler"org/xml/sax/helpers/DefaultHandlerorg/xml/sax/Attributes[Ljava/lang/String;org/xml/sax/InputSourceequals(Ljava/lang/Object;)Z getLength()I getLocalName(I)Ljava/lang/String;getURIgetValuesplit((Ljava/lang/String;I)[Ljava/lang/String;trimjava/util/Listadd java/util/Set4edu/harvard/hul/ois/jhove/module/xml/XhtmlProcessingprocessElements(Ljava/lang/String;Ljava/lang/String;Lorg/xml/sax/Attributes;Ledu/harvard/hul/ois/jhove/module/html/HtmlMetadata;)VfinishPropUnderConstructiongetPropUnderConstruction&()Ledu/harvard/hul/ois/jhove/Property;addToPropUnderConstruction java/util/Mapput8(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;/edu/harvard/hul/ois/jhove/module/html/DTDMapper isXHTMLDTD(Ljava/lang/String;)ZpublicIDToFile-(Ljava/lang/String;)Lorg/xml/sax/InputSource;(Ljava/lang/Exception;)V setSystemId(Ljava/lang/String;)VendsWithorg/xml/sax/SAXParseException getMessage getLineNumbergetColumnNumbertoStringappend-(Ljava/lang/String;)Ljava/lang/StringBuilder;(I)Ljava/lang/StringBuilder;!IJKLMNOLPLQRSTUTVLWLXYZL[\]Y^_`RabcRdef****Y*Y *Y *Y * Y *****Y*Y*Y*ghf*ijf*klf '**- *-*,66::: : \  !:   2  2"S  S  2  2"S  S* #W$ %S  S* #W* &W4* **'Y(,-*)mQ f nooopoooqq !nooop r1stf$* **muvf1**+ *+,mwxf * +,-Wr1yxf:%*,MN-+S-,S* -#Wm r1ztf.":+S,S-S*#Wr1{|fp*+.*+/N-*+,0N::1Y3-45:+S,S*#W,67**,-#&1#+2m%noo}~D 0qr1f^V*+,-8:++S,,S--SS*#Wmnooooqnooooqo nooooqnooooqo nooooqnooooqo nooooqnooooqor1f"* 9Y+:;#Wfx**Р* 9Y<;#WK*ТA+==+>>* ?Y+:@AYBCDEFDEGH#W*Y`m%Gf*f*f*f* f*f* f*f*f* f*f*jhove/classes/edu/harvard/hul/ois/jhove/module/AiffModule.class0000644000707400001440000003677111510702103023750 0ustar garyusers2#                   %       0   0   < <                   W Y       a           a     Y  W  z  W  W                ! "# $ % & '( ) *+, -. /0 1 2 3 4 5 6 7 8 9 : ; < => ? @A B C DEF G HI HJ HK HL M N OPQR S T U VWX YZ [\] [^_` [abc [def [ghi [jkl [mn [?op [qrs [tuv [wxy [z{ [|} [~   D    _ckSummer'Ledu/harvard/hul/ois/jhove/Checksummer;_cstream/Ledu/harvard/hul/ois/jhove/ChecksumInputStream;_dstreamLjava/io/DataInputStream; _metadata$Ledu/harvard/hul/ois/jhove/Property; _propListLjava/util/List; _aesMetadata,Ledu/harvard/hul/ois/jhove/AESAudioMetadata;_annotationList _midiList _saxelListbytesRemainingJsoundChunkSeenZformatVersionChunkSeeninstrumentChunkSeencommonChunkSeencommentsChunkSeen nameChunkSeenauthorChunkSeencopyrightChunkSeenmarkerChunkSeenaudioRecChunkSeenfirstSampleOffsetMarkedfileTypeI BIGENDIAN ConstantValueAIFFTYPEAIFCTYPEsigByte[INAMELjava/lang/String;RELEASEDATEFORMAT[Ljava/lang/String;COVERAGEMIMETYPE WELLFORMEDVALIDITYREPINFONOTERIGHTS()VCodeparse<(Ljava/io/InputStream;Ledu/harvard/hul/ois/jhove/RepInfo;I)I StackMapTableE# Exceptions setEndian(Z)VaddAiffProperty'(Ledu/harvard/hul/ois/jhove/Property;)V addAnnotationaddSaxeladdMidi initParsereadUnsignedInt(Ljava/io/DataInputStream;)JreadUnsignedShort(Ljava/io/DataInputStream;)IreadSignedShortread80BitDouble(Ljava/io/DataInputStream;)D read4Chars-(Ljava/io/DataInputStream;)Ljava/lang/String;AreadPascalStringtimestampToDate(J)Ljava/util/Date; getFileType()ImarkFirstSampleOffset(J)V readFileType&(Ledu/harvard/hul/ois/jhove/RepInfo;)Z readChunkRgetAESMetadata.()Ledu/harvard/hul/ois/jhove/AESAudioMetadata; dupChunkError8(Ledu/harvard/hul/ois/jhove/RepInfo;Ljava/lang/String;)VAIFF-hul1.3 B> CDAIFF 1.3, AIFF-C FDMagic number: "FORM" at byte offset 0; "AIFF"(for AIFF) or "AIFC" (for AIFF-C) at offset 8; one Form chunk containing one Common chunk and at most one Sound Data chunk (if numSampleFrames > 0); at most one instance of each of the following optional chunks: Marker, Instrument, Audio Recording, Comments, Name, Author, Copyright; all chunks required by a given profile exist in the file; all chunk structures are well-formed: a four ASCII character ID, followed by a 32 signed integer size, followed by a size byte data block (if size is odd, then the data block includes a final padding byte of value 0x00); and no data exist before the first byte of the chunk or after the last byte of the last chunkThe file is well-formedJProperties capturing the technical attributes of the audio from all chunks J@Copyright 2004-2007 by JSTOR and the President and Fellows of Harvard College. Released under the GNU Lesser General Public License. Ledu/harvard/hul/ois/jhove/AgentHarvard University Library  LFOffice for Information Systems, 90 Mt. Auburn St., Cambridge, MA 02138 +1 (617) 495-3724 !jhove-support@hulmail.harvard.edu  "edu/harvard/hul/ois/jhove/DocumentVAudio Interchange File Format: "AIFF", A Standard for Sampled Sound Files, Version 1.3  LApple Computer, Inc. $1 Infinite Loop, Cupertino, CA 95014(408) 996-1010http://www.apple.com/   1989-01-04 $edu/harvard/hul/ois/jhove/Identifier[http://developer.apple.com/documentation/QuickTime/INMAC/SOUND/imsoundmgr.30.htm#pgfId=3190  L  ! QAudio Interchange File Format AIFF-C: A revision to include compressed audio data 1991-08-26 *** DRAFT *** +edu/harvard/hul/ois/jhove/ExternalSignatureAIFF   L !AIFC.aif .aifcFor AIFF-C profile L+edu/harvard/hul/ois/jhove/InternalSignatureFORM   LFor AIFF profile L * eM D  D   "#   URI  FILE_NAME      u%edu/harvard/hul/ois/jhove/Checksummer LM-edu/harvard/hul/ois/jhove/ChecksumInputStream L  u    =>&edu/harvard/hul/ois/jhove/ErrorMessage,Document does not start with AIFF FORM Chunk L   @  f '( xy zyjava/io/EOFExceptionUnexpected EOF ( -*(Document does not contain a Common Chunk L 56 +*3AIFF-C document must contain a Format Version Chunk u java/lang/Exception  w"edu/harvard/hul/ois/jhove/Checksum   L      AIFF-C  $!   !"edu/harvard/hul/ois/jhove/Property Annotations   L %!MIDIData &!Saxels  ajava/util/LinkedList AIFFMetadata 4**edu/harvard/hul/ois/jhove/AESAudioMetadata FILE_DIGITAL 1.3 (1989-01-04) PCM  MOTHERJHOVE_validation NONE AESAudioMetadata  L )* 2* ,* .* /* 0* 3* 1* h j  /edu/harvard/hul/ois/jhove/module/aiff/ExtDouble L   java/lang/StringBuffer L   java/lang/StringMacRoman L     w mn Draft 1991-08-26+File type in Form Chunk is not AIFF or AIFC0edu/harvard/hul/ois/jhove/module/iff/ChunkHeader L   FVERFormat Version 8edu/harvard/hul/ois/jhove/module/aiff/FormatVersionChunk L APPL6edu/harvard/hul/ois/jhove/module/aiff/ApplicationChunkCOMMCommon1edu/harvard/hul/ois/jhove/module/aiff/CommonChunkSSNDSound4edu/harvard/hul/ois/jhove/module/aiff/SoundDataChunkCOMTComments3edu/harvard/hul/ois/jhove/module/aiff/CommentsChunkINST Instrument5edu/harvard/hul/ois/jhove/module/aiff/InstrumentChunkMARKMarker1edu/harvard/hul/ois/jhove/module/aiff/MarkerChunkMIDI/edu/harvard/hul/ois/jhove/module/aiff/MidiChunkName/edu/harvard/hul/ois/jhove/module/aiff/NameChunkAUTHAuthor1edu/harvard/hul/ois/jhove/module/aiff/AuthorChunk(c)  Copyright4edu/harvard/hul/ois/jhove/module/aiff/CopyrightChunkAESDAudio Recording3edu/harvard/hul/ois/jhove/module/aiff/AudioRecChunkSAXL0edu/harvard/hul/ois/jhove/module/aiff/SaxelChunkANNO5edu/harvard/hul/ois/jhove/module/aiff/AnnotationChunk%edu/harvard/hul/ois/jhove/InfoMessagejava/lang/StringBuilder Chunk type '  ! ' ignored Multiple  Chunks not permitted "_Audio Interchange File Format audio/x-aiffapplication/aiff+edu/harvard/hul/ois/jhove/module/AiffModule$edu/harvard/hul/ois/jhove/ModuleBasejava/io/InputStream!edu/harvard/hul/ois/jhove/RepInfojava/io/IOException[B*edu/harvard/hul/ois/jhove/module/iff/Chunk(Ljava/lang/String;Ljava/lang/String;[I[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Z)V#edu/harvard/hul/ois/jhove/AgentType EDUCATIONAL%Ledu/harvard/hul/ois/jhove/AgentType;:(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/AgentType;)V setAddress(Ljava/lang/String;)V setTelephonesetEmail_vendor!Ledu/harvard/hul/ois/jhove/Agent;&edu/harvard/hul/ois/jhove/DocumentTypeREPORT(Ledu/harvard/hul/ois/jhove/DocumentType;=(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/DocumentType;)V COMMERCIALsetWeb setAuthor$(Ledu/harvard/hul/ois/jhove/Agent;)VsetDate(edu/harvard/hul/ois/jhove/IdentifierTypeURL*Ledu/harvard/hul/ois/jhove/IdentifierType;?(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/IdentifierType;)V setIdentifier)(Ledu/harvard/hul/ois/jhove/Identifier;)V_specificationjava/util/Listadd(Ljava/lang/Object;)ZsetNote'edu/harvard/hul/ois/jhove/SignatureTypeFILETYPE)Ledu/harvard/hul/ois/jhove/SignatureType;*edu/harvard/hul/ois/jhove/SignatureUseTypeOPTIONAL,Ledu/harvard/hul/ois/jhove/SignatureUseType;j(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/SignatureType;Ledu/harvard/hul/ois/jhove/SignatureUseType;)V _signature EXTENSION|(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/SignatureType;Ledu/harvard/hul/ois/jhove/SignatureUseType;Ljava/lang/String;)VMAGIC MANDATORYk(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/SignatureType;Ledu/harvard/hul/ois/jhove/SignatureUseType;I)V}(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/SignatureType;Ledu/harvard/hul/ois/jhove/SignatureUseType;ILjava/lang/String;)V _bigEndian_format setFormat _mimeType setMimeType setModule%(Ledu/harvard/hul/ois/jhove/Module;)VgetUri()Ljava/lang/String;setPrimaryIdentifier getURLFlag()ZsetOtherPrimaryIdentifierTypesetPrimaryIdentifierType_je%Ledu/harvard/hul/ois/jhove/JhoveBase;#edu/harvard/hul/ois/jhove/JhoveBasegetChecksumFlag getChecksum()Ljava/util/List;size?(Ljava/io/InputStream;Ledu/harvard/hul/ois/jhove/Checksummer;)V getBufferSizegetBufferedDataStream1(Ljava/io/InputStream;I)Ljava/io/DataInputStream;readUnsignedByteB(Ljava/io/DataInputStream;Ledu/harvard/hul/ois/jhove/ModuleBase;)I(Ljava/lang/String;J)V setMessage&(Ledu/harvard/hul/ois/jhove/Message;)V setWellFormed(I)V_name setSigMatchC(Ljava/io/DataInputStream;ZLedu/harvard/hul/ois/jhove/ModuleBase;)J_nByte getWellFormed skipBytesC(Ljava/io/DataInputStream;ILedu/harvard/hul/ois/jhove/ModuleBase;)I getNBytes()JsetSizegetCRC32&edu/harvard/hul/ois/jhove/ChecksumTypeCRC32(Ledu/harvard/hul/ois/jhove/ChecksumType;=(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/ChecksumType;)V setChecksum'(Ledu/harvard/hul/ois/jhove/Checksum;)VgetMD5MD5getSHA1SHA1 setProfile setByteOrderisEmpty&edu/harvard/hul/ois/jhove/PropertyTypePROPERTY(Ledu/harvard/hul/ois/jhove/PropertyType;'edu/harvard/hul/ois/jhove/PropertyArityLIST)Ledu/harvard/hul/ois/jhove/PropertyArity;x(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ledu/harvard/hul/ois/jhove/PropertyArity;Ljava/lang/Object;)V setPropertysetAnalogDigitalFlagsetSpecificationVersionsetAudioDataEncodingclearBitrateReductionsetUse'(Ljava/lang/String;Ljava/lang/String;)V setDirectionAESAUDIOMETADATAO(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ljava/lang/Object;)VC(Ljava/io/DataInputStream;ZLedu/harvard/hul/ois/jhove/ModuleBase;)I readByteBufD(Ljava/io/DataInputStream;[BLedu/harvard/hul/ois/jhove/ModuleBase;)I([B)VtoDouble()Dappend(C)Ljava/lang/StringBuffer;toString([BLjava/lang/String;)Vjava/util/Calendar getInstance()Ljava/util/Calendar;set (IIIIII)V(II)VgetTime()Ljava/util/Date;setFirstSampleOffsetequalsL(Ledu/harvard/hul/ois/jhove/ModuleBase;Ledu/harvard/hul/ois/jhove/RepInfo;)V readHeader(Ljava/io/DataInputStream;)ZgetSizegetID{(Ledu/harvard/hul/ois/jhove/module/AiffModule;Ledu/harvard/hul/ois/jhove/module/iff/ChunkHeader;Ljava/io/DataInputStream;)V-(Ljava/lang/String;)Ljava/lang/StringBuilder;setValid!% !"#$!%!&!'()*+*,*-*.*/*0*1*2*3*4*567*89:689;68<=>?@8A@8B>CDE@8FDG@8H@8I@8 J@K@8 LMN *   YL+++*+YM YL+++ !,+",#$,%Y&'()**,+WY,M,+",-$,./**,+W0Y1234N*5-+W0Y6234N*5-+W0Y7834N*5-+W0Y983:;N*5-+W?@N*5-+W3ABN*5-+W3:BN*5-+W*COPN*D,*E2F,*G2H,*I*J,KL,M*JNO *JPQ*R*ST*STJ,UV>*WYXR*YY+*RZ[**[*S *S\]^*+*S *S\]^63*^*_6`.,aYb cd,e,*fg**^*hi*,j*i *,k:,e,aYm*ncd*o,e,aYpqd*r*s,e,aYtqd,u*R|**^*v6 :,*[xy,zY*R{|}~*R:,zY}~*RY:,zY}~*r ,1*r ,*J*C* *Y*+W* *Y*+W* *Y*+W,**l*l'*lwQ;RRSTUVRSTUVRSTUWRSTUW/BX BY=Z N[RST[+((\]^_N*C`aN *++WbaN *++WcaN *++WdaN *++WeMN**Y*Y***YJ*J*J1*J*J*J*J*J*Y*J+W*Y*Y*Y**o**s******fgN+*h\]hiN+*\]jiN+*\]klN) M*^,*WY,N-\]mnNH*YM>+*_6,W,Q  o\]pnNK0+*_=N*^-*W~**^*vWY-Q %q\]rsNE9N-pm6ie6- - -ŰtuN*rvwN/***J*naƱQxyNz_**^M*Yiei1,ʙ *r6,ʙ*r*J*J˶+aY*ncd+eQ %Z!\]zyN"MY*+N-*^Ϛ-Ј6*Yi`ei-:ʙ'*s *+ӶԻY*-*^M*sKʙY*-*^M0ʙ'*o *+۶ԻY*-*^M*oʙ** *+߶ԧY*-*^M*ʙ'* *+ԻY*-*^M*ʙ'* *+ԻY*-*^M*uʙ** *+ԧZY*-*^M*DʙY*-*^M)ʙ** *+ԧY*-*^M*ʙ** *+ԧݻY*-*^M*ʙ** *+ԧY*-*^M*ʙ** *+ԧ{Y*-*^M*eʙY*-*^MIʙY*-*^M-+YY       *nd, ,+**^*vW~**^*vW*Yi eiQ-{|3Z) \]}~N*JN;/+aYY  ,   *ncd+MNeY YFOYOOYROYMO` YOY OYOY1SYSYSYS jhove/classes/edu/harvard/hul/ois/jhove/module/AsciiModule.class0000644000707400001440000002443111510702103024121 0ustar garyusers2!" # $ % &' () *+ , -./ 01 23 45 67 8 9:; <= >? 0@ABC DEF G HI JKL MN )O P Q RSTUVWXYZ[\ M]^_ `abcdefgh Mij Mk l Rm no npq Lrs Lt u vw x y z {| V} ~ Y}   v  v   v R d} f       p} p p | p n v v |    f v d   v d  d  n Y  Y Y Y  S Y     }  S    v     v  vNAMELjava/lang/String; ConstantValueRELEASEDATE[IFORMAT[Ljava/lang/String;COVERAGEMIMETYPE WELLFORMEDVALIDITYREPINFONOTERIGHTSCRI LF controlCharMnemonics_cstream/Ledu/harvard/hul/ois/jhove/ChecksumInputStream;_dstreamLjava/io/DataInputStream; _lineEndCRZ _lineEndLF _lineEndCRLF _prevChar_controlCharMapLjava/util/Map; _withTextMD_textMD*Ledu/harvard/hul/ois/jhove/TextMDMetadata;()VCodeparse<(Ljava/io/InputStream;Ledu/harvard/hul/ois/jhove/RepInfo;I)I StackMapTableq ExceptionscheckSignaturesI(Ljava/io/File;Ljava/io/InputStream;Ledu/harvard/hul/ois/jhove/RepInfo;)V checkLineEnd(I)V ASCII-hul1.3 DAn ASCII object is well-formed if each byte is between 0x00 and 0x7F RAdditional representation information includes: line ending and control characters Copyright 2003-2007 by JSTOR and the President and Fellows of Harvard College. Released under the GNU Lesser General Public License.  edu/harvard/hul/ois/jhove/AgentHarvard University Library    FOffice for Information Systems, 90 Mt. Auburn St., Cambridge, MA 02138  +1 (617) 495-3724 !jhove-support@hulmail.harvard.edu  "edu/harvard/hul/ois/jhove/DocumentSInformation technology -- ISO 7-bit coded character set for information interchange  ISO  C1, rue de Varembe, Casa postale 56, CH-1211, Geneva 20, Switzerland+41 22 749 01 11+41 22 733 34 30  iso@iso.chhttp://www.iso.org/  1991 $edu/harvard/hul/ois/jhove/IdentifierISO/IEC 646:1991 ?   !" #${Information Systems -- Coded Character Sets 7-Bit American National Standard Code for Information Interchange (7-Bit ASCII)ANSI'1819 L Street, NW, Washington, DC 20036+1 (202) 293-8020+1 (202) 293-9287 info@ansi.orghttp://www.ansi.org/ 1986-12-30ANSI X3.4-1986 U7-Bit coded Character Set6th %1991-12ECMA-114 Rue du Rhone, CH-1204 Geneva, Switzerland+41 22 849.60.00+41 22 849.60.01helpdesk@ecma.ch"http://www.ecma-international.org/ECMA-6 bIhttp://www.ecma-international.org/publications/files/ecma-st/Ecma-006.pdf & '" () *+ ,-java/lang/String ./withtextmd=true 0$ 1 23 java/util/HashMap  (edu/harvard/hul/ois/jhove/TextMDMetadata  4 5 6 7 89 :+ ;< =>%edu/harvard/hul/ois/jhove/Checksummer-edu/harvard/hul/ois/jhove/ChecksumInputStream ? @> AB CD EF&edu/harvard/hul/ois/jhove/ErrorMessageInvalid characterjava/lang/StringBuilder Character = GH GI (0x JK) L/ M NO Pjava/lang/Integer  Q RS DEL (0x7F) java/io/EOFException TU VW"edu/harvard/hul/ois/jhove/Checksum X/Y Z[ \ ]^ _/ `[ a/ b[Zero-length file US-ASCII c d e8 f1 gjava/util/ArrayList hCRLF"edu/harvard/hul/ois/jhove/Property LineEndingsi jkl mn o p+java/util/LinkedList qrControlCharactersTextMDMetadata sk tn ASCIIMetadata uk vw%edu/harvard/hul/ois/jhove/InfoMessageNo printable characters xy z>java/io/DataInputStream { P| } ~ASCII ANSI X3.4ISO 646text/plain; charset=US-ASCII NUL (0x00) SOH (0x01) STX (0x02) ETX (0x03) EOT (0x04) ENQ (0x05) ACK (0x06) BEL (0x07) BS (0x08) TAB (0x09) LF (0x0A) VT (0x0B) FF (0x0C) CR (0x0D) SO (0x0E) SI (0x0F) DLE (0x10) DC1 (0x11) DC2 (0x12) DC3 (0x13) DC4 (0x14) NAK (0x15) SYN (0x16) ETB (0x17) CAN (0x18) EM (0x19) SUB (0x1A) ESC (0x1B) FS (0x1C) GS (0x1D) RS (0x1E) US (0x1F),edu/harvard/hul/ois/jhove/module/AsciiModule$edu/harvard/hul/ois/jhove/ModuleBasejava/util/Iteratorjava/io/InputStream!edu/harvard/hul/ois/jhove/RepInfojava/util/Listjava/io/IOException java/io/File#edu/harvard/hul/ois/jhove/JhoveBase(Ljava/lang/String;Ljava/lang/String;[I[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Z)V#edu/harvard/hul/ois/jhove/AgentType EDUCATIONAL%Ledu/harvard/hul/ois/jhove/AgentType;:(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/AgentType;)V setAddress(Ljava/lang/String;)V setTelephonesetEmail_vendor!Ledu/harvard/hul/ois/jhove/Agent;&edu/harvard/hul/ois/jhove/DocumentTypeSTANDARD(Ledu/harvard/hul/ois/jhove/DocumentType;=(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/DocumentType;)VsetFaxsetWeb setPublisher$(Ledu/harvard/hul/ois/jhove/Agent;)VsetDate(edu/harvard/hul/ois/jhove/IdentifierType*Ledu/harvard/hul/ois/jhove/IdentifierType;?(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/IdentifierType;)V setIdentifier)(Ledu/harvard/hul/ois/jhove/Identifier;)V_specificationLjava/util/List;add(Ljava/lang/Object;)Z setEditionURL_defaultParamsiterator()Ljava/util/Iterator;hasNext()Znext()Ljava/lang/Object; toLowerCase()Ljava/lang/String;equals initParse setModule%(Ledu/harvard/hul/ois/jhove/Module;)V_format setFormat _mimeType setMimeType_je%Ledu/harvard/hul/ois/jhove/JhoveBase;getChecksumFlag getChecksum()Ljava/util/List;size()I?(Ljava/io/InputStream;Ledu/harvard/hul/ois/jhove/Checksummer;)V getBufferSizegetBufferedDataStream1(Ljava/io/InputStream;I)Ljava/io/DataInputStream;_nByteJreadUnsignedByteB(Ljava/io/DataInputStream;Ledu/harvard/hul/ois/jhove/ModuleBase;)Iappend-(Ljava/lang/String;)Ljava/lang/StringBuilder;(C)Ljava/lang/StringBuilder; toHexString(I)Ljava/lang/String;toString((Ljava/lang/String;Ljava/lang/String;J)V setMessage&(Ledu/harvard/hul/ois/jhove/Message;)V setWellFormed java/util/Mapput8(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; getNBytes()JsetSize(J)VgetCRC32&edu/harvard/hul/ois/jhove/ChecksumTypeCRC32(Ledu/harvard/hul/ois/jhove/ChecksumType;=(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/ChecksumType;)V setChecksum'(Ledu/harvard/hul/ois/jhove/Checksum;)VgetMD5MD5getSHA1SHA1 setCharset _bigEndian setByte_order setByte_sizesetCharacter_size setLinebreak&edu/harvard/hul/ois/jhove/PropertyTypeSTRING(Ledu/harvard/hul/ois/jhove/PropertyType;'edu/harvard/hul/ois/jhove/PropertyArityLIST)Ledu/harvard/hul/ois/jhove/PropertyArity;x(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ledu/harvard/hul/ois/jhove/PropertyArity;Ljava/lang/Object;)VisEmptyget&(Ljava/lang/Object;)Ljava/lang/Object;TEXTMDMETADATASCALARPROPERTY setProperty'(Ledu/harvard/hul/ois/jhove/Property;)VgetBase'()Ledu/harvard/hul/ois/jhove/JhoveBase; getSigBytes(Ljava/io/InputStream;)V(Z)V_name setSigMatch!   {*   * YL+++*+YMYL++ +!"+#+$%,+&,'(,)Y*+,-*.,/WY0MY1L+2+3+4"+5+6%,+&,7(,)Y89,-*.,/WY:M,;<,=(Y>L+?+@+A"+B+C%,+&,)YDE,-,)YFG,-*.,/W *H9*HI:J$KL:MNO* *P,*Q*R*S*T*U*VYWX*YYZ[6,*\2],*^2_:*`P*`aF,bc:dYe:*fY+gh**h*` *`ijk*+*` *`ijk6* l*k*m6HnYopYqrstusvswsx*l ey:,z,{ - & *X|Y}~2W*X|Y}W*  ~6*U;:6*.X,*h,Y:,YY:,Y*l ,nYz,{*[*[**[*[Y:*R*S *ToY:*RW*[*SW*[*TW*[Y:  /W*XY:6   -*X|Y }L:   W *X|Y}L:   WY:  /W* "Y*[:/Wc,Y,YzZ[" '                Z0     >W    3 *     #% y-*\2]-*^2_-*Q*:666Y,:-&*m6   -: 6 --*BY]%6    #B E. *U *T*S*U *R    YOY OYOLYSYSYSYSLYS  LYSYSYSYSYSYSYSYSYSY SY SY SY SY SYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYS~jhove/classes/edu/harvard/hul/ois/jhove/module/BytestreamModule.class0000644000707400001440000001011011510702103025175 0ustar garyusers2jk @l @m @n @op @q @rst Auvw xy z{ |} ~ @ @ @ @ @  " $ @ @ @ @ @  .  " 2 " " @ _cstream/Ledu/harvard/hul/ois/jhove/ChecksumInputStream;_dstreamLjava/io/DataInputStream;NAMELjava/lang/String; ConstantValueRELEASEDATE[IFORMAT[Ljava/lang/String;COVERAGEMIMETYPE WELLFORMEDVALIDITYREPINFONOTERIGHTS()VCodeparse<(Ljava/io/InputStream;Ledu/harvard/hul/ois/jhove/RepInfo;I)I StackMapTable ExceptionscheckSignaturesI(Ljava/io/File;Ljava/io/InputStream;Ledu/harvard/hul/ois/jhove/RepInfo;)V BYTESTREAM1.3 JK LM NG OMAll bytestreams are well-formed QG RGThis is the default formatCopyright 2003-2007 by JSTOR and the President and Fellows of Harvard College. Released under the GNU Lesser General Public License. Uedu/harvard/hul/ois/jhove/AgentHarvard University Library UFOffice for Information Systems, 90 Mt. Auburn St., Cambridge, MA 02138 +1 (617) 495-3724 !jhove-support@hulmail.harvard.edu V M M   %edu/harvard/hul/ois/jhove/Checksummer UV-edu/harvard/hul/ois/jhove/ChecksumInputStream U BC DE java/io/EOFException %edu/harvard/hul/ois/jhove/InfoMessageZero-length file U "edu/harvard/hul/ois/jhove/Checksum  U G java/lang/String bytestreamapplication/octet-stream1edu/harvard/hul/ois/jhove/module/BytestreamModule$edu/harvard/hul/ois/jhove/ModuleBasejava/io/InputStream!edu/harvard/hul/ois/jhove/RepInfo[Bjava/io/IOException(Ljava/lang/String;Ljava/lang/String;[I[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Z)V#edu/harvard/hul/ois/jhove/AgentType EDUCATIONAL%Ledu/harvard/hul/ois/jhove/AgentType;:(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/AgentType;)V setAddress(Ljava/lang/String;)V setTelephonesetEmail_vendor!Ledu/harvard/hul/ois/jhove/Agent; initParse setModule%(Ledu/harvard/hul/ois/jhove/Module;)V_format setFormat _mimeType setMimeType_je%Ledu/harvard/hul/ois/jhove/JhoveBase;#edu/harvard/hul/ois/jhove/JhoveBasegetChecksumFlag()Z getChecksum()Ljava/util/List;java/util/Listsize()I?(Ljava/io/InputStream;Ledu/harvard/hul/ois/jhove/Checksummer;)V getBufferSizegetBufferedDataStream1(Ljava/io/InputStream;I)Ljava/io/DataInputStream;_nByteJ readByteBufD(Ljava/io/DataInputStream;[BLedu/harvard/hul/ois/jhove/ModuleBase;)IsetSize(J)V setMessage&(Ledu/harvard/hul/ois/jhove/Message;)VgetCRC32()Ljava/lang/String;&edu/harvard/hul/ois/jhove/ChecksumTypeCRC32(Ledu/harvard/hul/ois/jhove/ChecksumType;=(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/ChecksumType;)V setChecksum'(Ledu/harvard/hul/ois/jhove/Checksum;)VgetMD5MD5getSHA1SHA1_name setSigMatch1@A BCDEFGHIGHJKLMNGOMPGHQGRGSGH TGH UVWR F*    YL+++*+XYW0*,*,*2,*2:*P*F, !:"Y#:*$Y+%&**&* *'()*+* *'()6* *:"*)*+6:6,**-** ,.Y/01M,2Y34567:,2Y8569Y:,2Y:56,Z j[\]^_`[\]^_`[\]^_a[\]^_abBc3defghW."-*2-*2-*-*;<efiVWF: YOYOY O=Y>S=Y?S jhove/classes/edu/harvard/hul/ois/jhove/module/GifModule.class0000644000707400001440000004304411510702103023577 0ustar garyusers2O                  %       0   0   <                Q    T      ^ `       `  ^  j  ^  ^       y T                    !" #$ %& '( %)*+ , -./0 1 2 345 6 7 8 9 :; < = > ?@A B CD E F G H I JKL M NO %PQ %RSTUVW  XY Z 9[\ ]^_`ab cdefghijklmnop %qr %st %uvwx y z{ z|8} ~                  debug_appIdentCaseInsensZ ConstantValueNAMELjava/lang/String;RELEASEDATE[IFORMAT[Ljava/lang/String;COVERAGEMIMETYPE WELLFORMEDVALIDITYREPINFONOTERIGHTS EXT_BLOCKI!APPLICATION_EXT COMMENT_EXTGRAPHIC_CONTROL_EXT IMAGE_DESC,PLAIN_TEXT_EXTTRAILER;_sig[B _ckSummer'Ledu/harvard/hul/ois/jhove/Checksummer;_xmpProp$Ledu/harvard/hul/ois/jhove/Property;_cstream/Ledu/harvard/hul/ois/jhove/ChecksumInputStream;_dstreamLjava/io/DataInputStream;_globalColorTableFlag_globalColorTableSize _gceCounter _metadata _blocksListLjava/util/List;_numGraphicBlocks()VCodecheckSignaturesI(Ljava/io/File;Ljava/io/InputStream;Ledu/harvard/hul/ois/jhove/RepInfo;)V StackMapTable Exceptionsparse<(Ljava/io/InputStream;Ledu/harvard/hul/ois/jhove/RepInfo;I)I initParsereadSig&(Ledu/harvard/hul/ois/jhove/RepInfo;)Z readLSD readBlock readExtBlock readImageAreadAppExtensionWreadCommentExtensionreadPlainTextExtensionreadGraphicsCtlBlockreadXMP()I}~addBytePropertyL(Ljava/lang/String;I[Ljava/lang/String;)Ledu/harvard/hul/ois/jhove/Property;readUnsignedShort(Ljava/io/DataInputStream;)IGIF-hul1.3   GIF87a, GIF89a " A GIF file is well-formed if it has a header block; a sequence of properly formed control, graphic-rendering, and special purpose blocks; and a trailer blockA GIF file is valid if well-formed, has at most one global color map, and at most one graphic control extension preceding an image descriptor or a plain text extensionAdditional representation information includes: NISO Z39.87 Digital Still Image Technical Metadata, and block-specific metadata^'GIF' and 'Graphics Interchange Format' are trademarks of Compuserve Interactive Services Inc.Copyright 2003-2007 by JSTOR and the President and Fellows of Harvard College. Released under the GNU Lesser General Public License. Hedu/harvard/hul/ois/jhove/AgentHarvard University Library  HFOffice for Information Systems, 90 Mt. Auburn St., Cambridge, MA 02138 +1 (617) 495-3724 !jhove-support@hulmail.harvard.edu  "edu/harvard/hul/ois/jhove/DocumentGIF (Graphics Interchange Format): A standard defining a mechanism for the storage and transmission of raster-based graphics information  H$Compuserve Interactive Services Inc. /5000 Arlington Centre Blvd., Columbus, OS 43220(614) 457-8600http://www.compuserve.com/   1987-06-15 $edu/harvard/hul/ois/jhove/Identifier-http://www.w3.org/Graphics/GIF/spec-gif87.txt  H  F Graphics Interchange Format Version 89a .http://www.w3.org/Graphics/GIF/spec-gif89a.txt+edu/harvard/hul/ois/jhove/InternalSignatureGIF   H F87a For version 87a H89aFor version 89a+edu/harvard/hul/ois/jhove/ExternalSignature.gif   H  ?@  p          java/lang/Exception ^Ijava/util/LinkedList HI EF"edu/harvard/hul/ois/jhove/PropertyBlocks   H 9:    p%edu/harvard/hul/ois/jhove/Checksummer-edu/harvard/hul/ois/jhove/ChecksumInputStream H => _` b` f` p   "edu/harvard/hul/ois/jhove/Checksum   H      ;< GIFMetadata  D<GraphicRenderingBlocks java/lang/Integer G) H H  78 A B) C)Invalid GIF headerjava/io/EOFException&edu/harvard/hul/ois/jhove/ErrorMessage H   java/lang/String H GIF89a  GIF 89a GIF87aGIF 87ajava/util/Vector }~LogicalScreenWidthLogicalScreenHeightColorResolutionBackgroundColorIndexPixelAspectRatio java/lang/Short HGlobalColorTableFlag  {|GlobalColorTableSortFlag  GlobalColorTableSizeLogicalScreenDescriptor  pGlobalColorTable6End of file reached without encountering Trailer block  g` h`Unknown data block typejava/lang/StringBuilderType =    HUnexpected end of file j` l` n` m`Unknown extension block type+edu/harvard/hul/ois/jhove/NisoImageMetadataNisoImageMetadata   image/gif little-endian ! " # $ %&ImageLeftPositionImageTopPosition ' ( InterlaceFlag ) LocalColorTableFlag * LocalColorTableSortFlagLocalColorTableSizeImageDescriptor&Wrong application extension block sizejava/lang/StringBuffer +ApplicationIdentifier ,ApplicationAuthenticationCodeXMP Data opApplicationDataSizeApplicationExtensionCommentExtension%Wrong plain text extension block size0Plain text extension requires global color table -TextGridLeftPositionTextGridTopPosition TextGridWidthTextGridHeightCharacterCellWidthCharacterCellHeightTextForegroundColorIndexTextBackgroundColorIndex PlainTextDataPlainTextExtension.Multiple graphics control blocks for one image!Wrong graphics control block sizeDisposalMethod .  UserInputFlag / TransparencyFlag 0  DelayTimeTransparentColorIndexGraphicControlExtension 12 3 45java/io/ByteArrayInputStream,edu/harvard/hul/ois/jhove/ByteArrayXMPSourceUTF-8 H6 78 9 :;< =>$edu/harvard/hul/ois/jhove/XMPHandler ?@ AB XC DEorg/xml/sax/SAXException FENC= GH IJ$java/io/UnsupportedEncodingException K Ljava/lang/Byte HM }N*edu/harvard/hul/ois/jhove/module/GifModule$edu/harvard/hul/ois/jhove/ModuleBase java/io/Filejava/io/InputStream!edu/harvard/hul/ois/jhove/RepInfojava/io/IOException%[Ledu/harvard/hul/ois/jhove/Property;[Sjava/util/Listjava/util/ListIterator"javax/xml/parsers/SAXParserFactoryorg/xml/sax/XMLReader(Ljava/lang/String;Ljava/lang/String;[I[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Z)V#edu/harvard/hul/ois/jhove/AgentType EDUCATIONAL%Ledu/harvard/hul/ois/jhove/AgentType;:(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/AgentType;)V setAddress(Ljava/lang/String;)V setTelephonesetEmail_vendor!Ledu/harvard/hul/ois/jhove/Agent;&edu/harvard/hul/ois/jhove/DocumentTypeREPORT(Ledu/harvard/hul/ois/jhove/DocumentType;=(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/DocumentType;)V COMMERCIALsetWeb setAuthor$(Ledu/harvard/hul/ois/jhove/Agent;)VsetDate(edu/harvard/hul/ois/jhove/IdentifierTypeURL*Ledu/harvard/hul/ois/jhove/IdentifierType;?(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/IdentifierType;)V setIdentifier)(Ledu/harvard/hul/ois/jhove/Identifier;)V_specificationadd(Ljava/lang/Object;)Z setEdition'edu/harvard/hul/ois/jhove/SignatureTypeMAGIC)Ledu/harvard/hul/ois/jhove/SignatureType;*edu/harvard/hul/ois/jhove/SignatureUseType MANDATORY,Ledu/harvard/hul/ois/jhove/SignatureUseType;k(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/SignatureType;Ledu/harvard/hul/ois/jhove/SignatureUseType;I)V _signatureMANDATORY_IF_APPLICABLE}(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/SignatureType;Ledu/harvard/hul/ois/jhove/SignatureUseType;ILjava/lang/String;)V EXTENSIONOPTIONALj(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/SignatureType;Ledu/harvard/hul/ois/jhove/SignatureUseType;)V _bigEndian_je%Ledu/harvard/hul/ois/jhove/JhoveBase;#edu/harvard/hul/ois/jhove/JhoveBase getBufferSizegetBufferedDataStream1(Ljava/io/InputStream;I)Ljava/io/DataInputStream;readUnsignedByteB(Ljava/io/DataInputStream;Ledu/harvard/hul/ois/jhove/ModuleBase;)I setWellFormed(Z)V setModule%(Ledu/harvard/hul/ois/jhove/Module;)V_format setFormat _mimeType setMimeType_name setSigMatch&edu/harvard/hul/ois/jhove/PropertyTypePROPERTY(Ledu/harvard/hul/ois/jhove/PropertyType;'edu/harvard/hul/ois/jhove/PropertyArityLIST)Ledu/harvard/hul/ois/jhove/PropertyArity;x(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ledu/harvard/hul/ois/jhove/PropertyArity;Ljava/lang/Object;)V_appLedu/harvard/hul/ois/jhove/App;getChecksumFlag()Z getChecksum()Ljava/util/List;size?(Ljava/io/InputStream;Ledu/harvard/hul/ois/jhove/Checksummer;)V getWellFormed skipBytesC(Ljava/io/DataInputStream;ILedu/harvard/hul/ois/jhove/ModuleBase;)I getNBytes()JsetSize(J)VgetCRC32()Ljava/lang/String;&edu/harvard/hul/ois/jhove/ChecksumTypeCRC32(Ledu/harvard/hul/ois/jhove/ChecksumType;=(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/ChecksumType;)V setChecksum'(Ledu/harvard/hul/ois/jhove/Checksum;)VgetMD5MD5getSHA1SHA1ARRAYINTEGER(I)VO(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ljava/lang/Object;)V setProperty'(Ledu/harvard/hul/ois/jhove/Property;)V(Ljava/lang/String;J)V setMessage&(Ledu/harvard/hul/ois/jhove/Message;)V([B)Vequals setVersion setProfileSHORT(S)V/edu/harvard/hul/ois/jhove/module/gif/GifStringsGLOBAL_COLOR_TABLE_FLAGCOLOR_TABLE_SORT_FLAGvectorToPropArray9(Ljava/util/Vector;)[Ledu/harvard/hul/ois/jhove/Property;java/io/DataInputStream_nByteJappend-(Ljava/lang/String;)Ljava/lang/StringBuilder;(I)Ljava/lang/StringBuilder;toString((Ljava/lang/String;Ljava/lang/String;J)VNISOIMAGEMETADATA setByteOrdersetCompressionScheme setColorSpacesetOrientationsetBitsPerSample([I)V setImageWidthsetImageLengthINTERLACE_FLAGLOCAL_COLOR_TABLE_FLAG(C)Ljava/lang/StringBuffer;STRINGsetValidGCE_DISPOSAL_METHODGCE_USER_INPUT_FLAGGCE_TRANSPARENCY_FLAG listIterator()Ljava/util/ListIterator;hasNextnext()Ljava/lang/Object;3(Ljava/io/ByteArrayInputStream;Ljava/lang/String;)V newInstance&()Ljavax/xml/parsers/SAXParserFactory;setNamespaceAware newSAXParser()Ljavax/xml/parsers/SAXParser;javax/xml/parsers/SAXParser getXMLReader()Lorg/xml/sax/XMLReader;setContentHandler(Lorg/xml/sax/ContentHandler;)VsetErrorHandler(Lorg/xml/sax/ErrorHandler;)V(Lorg/xml/sax/InputSource;)V makeProperty&()Ledu/harvard/hul/ois/jhove/Property; getMessage startsWith(Ljava/lang/String;)Z substring(I)Ljava/lang/String;getShowRawFlagBYTE(B)VC(Ljava/io/DataInputStream;ZLedu/harvard/hul/ois/jhove/ModuleBase;)I! !" #$% & ' ()*+),-)./)01)23)45)6789:;<=>?@AB)C)D<EFG)HIJR F*    YL+++*+YM YL+++ !,+",#$,%Y&'()**,+WY,M,-.,+",#$,%Y/'()**,+W0Y1234N*5-+W0Y62789N*5-+W0Y:27;9N*5-+W?@N*5-+W*AKLJk YGOYIOYFOY8OY*OYaO:*B*,*C *CDEB6#*B*F6. -G*B*F679 -G*B*F6. -G-*H-*I2J-*K2L-*MN :-G$eOfOOOMi <NOPQRSTNOPQRST#NOPQRUVWXYJv *P,*H,*I2J,*K2L*QYRSTYUVW*SX:*Y*ZT*C[J,\]>*^Y_Y*`Y+*Yab**b*Z *CDEB*+*Z *CDEB*,c,*MN*,d6*,e6,f*Y|**B*g6 :,*bhi,jY*Yklmn*Yo:,jYpmn*YqY:,jYrmn*s T: T:*TYtVuXvSTYwxyY*z{|S*s *sS,*v}OMNPQZS[NPQZS[NPQZSTNPQZST BU=\]DVW^IJ-!*~*****z_`J=N6<*B*F6 *T:=+Y- +Y*:+:+0+6++Y- +-0M,\!NQ\a%\VWb`JYM**B>,TYxyY{|W**B6,TYxyY{|W*B*F6*~p~z`6,TYxyY{|W~6~6**`xh*B*F6 ,TYxyY {|W*B*F6 ,TYY |W,**W,*W,TYY|WTYVu*,X: *S +W*E* : 6  *  *BV *STYu X+WM hNQcSNQcS3@W NQccSd NQccSd NQccSd NQccSdXZeVWf`J*B*F=N++Y*0!",(;.*+*+++YY*N++Y* %MNSTUVMLa"jaVWg`Jw*B*F=B<60**+*+*+*+++YY*M 4VWh`J*Yz`zYMYNTY-|:------ YO***B6,TYƲxyY{|W**B6,TYDzxyY{|W**B6-**B6-*B*F6  @~z6 ,* ˶W ~z6 ,* ͶW  ~z6 ,* W6  ~6,TYϲY|W,W `xh6 **B *gWTYвVu*,X:*S+W*B*F6*B*F6**B*gWM0`NQciZ+ZVWj`J{ E*B*F= +Y*+YNY:6*B*FW-TYղ׷|W :6*B*FV-TYزuXW6ٶ'5X5M5P *6-*B*F6``6**B*gW-TY۲xyY{|WTYܲVu*-X:*S+WM$ 'cke(#VWl`J{TYM*B*F>,6 *B*F6 ,WʻTYݲ,׷|NMkVWm`J_*Yz`z**B*F= +Y*+*+Y*+Y N**B6-TYxyY{|W**B6-TYxyY{|W**B6-TYxyY{|W**B6-TYxyY{|W*B*F6-TYY|W*B*F6 -TYY |W*B*F6 -TYY |W*B*F6 -TYY |WY: *B*F6  C6 6*B*F6  W   Wɧ-TY ׷|WTYVu*-X: *S +WM7 66 NQck VWn`J9 YM*Y`Z+Y*+*B*F>+Y*+*B*F6~z6,*W~z6,*W~6,*W**B6,TYxyY{|W*B*F6 ,TYY |W*B*FWTYVu*,X: *S +WM .c%VWopJQYRLN6*B*F6*B*FW)+-+WN6-T+]h``6d6:6+:  = : 6     3T ާ6  - 3T Y: Y : ::Y: * s: :4  ) :Y :  :* s: .BC dz}BOCOOMNq ) Nqr\Nqrstuvwx9Nqrstuvwy\\z NqrUVW{|JQ0*CTY+-2|:TY+Y| OMYU}~J+*VWIJ?3 YOY OYOY1SY,SYSjhove/classes/edu/harvard/hul/ois/jhove/module/HtmlModule.class0000644000707400001440000003717411510702103024005 0ustar garyusers2%jk l mn opqrst u vwx yz {| }~      y    y    +      @   H  H  H  H H Q       Z Z        e    j l     r u x x w x u    r  e Z    e e         e    e e Z  e e e!"# $%& '( x)* '+ Q,-. / 0 1 2 3 4 5 6 l7 89 j: ;< = > j? ;@ jA ;BCD ZEFG H IJ K L MN MO P QR STUV W ZXY Z[\]^_`abc Zd Ze Zfg hijklmnopqrstNAMELjava/lang/String; ConstantValueRELEASEDATE[IFORMAT[Ljava/lang/String;COVERAGEMIMETYPE WELLFORMEDVALIDITYREPINFONOTERIGHTS_cstream/Ledu/harvard/hul/ois/jhove/ChecksumInputStream;_dstreamLjava/io/DataInputStream;_doctypeHTML_3_2IHTML_4_0_STRICTHTML_4_0_FRAMESETHTML_4_0_TRANSITIONALHTML_4_01_STRICTHTML_4_01_FRAMESETHTML_4_01_TRANSITIONALXHTML_1_0_STRICTXHTML_1_0_TRANSITIONAL XHTML_1_0_FRAMESET  XHTML_1_1  profileNames versionNames _withTextMDZ_textMD*Ledu/harvard/hul/ois/jhove/TextMDMetadata;()VCodeparse<(Ljava/io/InputStream;Ledu/harvard/hul/ois/jhove/RepInfo;I)I StackMapTableusvwsvxyz{#-x Exceptions|checkSignaturesI(Ljava/io/File;Ljava/io/InputStream;Ledu/harvard/hul/ois/jhove/RepInfo;)V}~JR checkDoctype(Ljava/util/List;)ITcseemsToBeXHTML stripQuotes&(Ljava/lang/String;)Ljava/lang/String;isXmlAvailable()ZHTML-hul1.3   HTML 3.2, HTML 4.0 Strict,HTML 4.0 Transitional, HTML 4.0 Frameset, HTML 4.01 Strict, HTML 4.01 Transitional, HTML 4.01 FramesetXHTML 1.0 Strict, XHTML 1.0 Transitional, XHTML 1.0 FramesetXHTML 1.1 An HTML file is well-formed if it meets the criteria defined in the HTML 3.2 specification (W3C Recommendation, 14-Jan-1997), the HTML 4.0 specification (W3C Recommendation, 24-Apr-1998, the HTML 4.01 specification (W3C Recommendation, 24-Dec-1999, the XHTML 1.0 specification (W3C Recommendation, 26-Jan-2000, revised 1-Aug-2002, or the XHTML 1.1 specification (W3C Recommendation, 31-May-2001OAn HTML file is valid if it is well-formed and has a valid DOCTYPE declaration.Languages, title, META tags, frames, links, scripts, images, citations, defined terms, abbreviations, entities, Unicode entity blocksCopyright 2004-2007 by JSTOR and the President and Fellows of Harvard College. Released under the GNU Lesser General Public License. : 67edu/harvard/hul/ois/jhove/AgentHarvard University Library  :FOffice for Information Systems, 90 Mt. Auburn St., Cambridge, MA 02138 +1 (617) 495-3724 !jhove-support@hulmail.harvard.edu  "edu/harvard/hul/ois/jhove/Document HTML 3.2 Reference Specification  :Word Wide Web Consortium Massachusetts Institute of Technology, Computer Science and Artificial Intelligence Laboratory, 32 Vassar Street, Room 32-G515, Cambridge, MA 02139(617) 253-2613(617) 258-5999 http://www.w3.org/   Dave Raggett   1997-01-14 $edu/harvard/hul/ois/jhove/Identifier)http://www.w3c.org/TR/REC-html32-19970114  :  y HTML 4.0 SpecificationArnaud Le Hors Ian Jacobs 1998-04-24.http://www.w3.org/TR/1998/REC-html40-19980424/HTML 4.01 Specification 1999-12-24/http://www.w3.org/TR/1999/REC-html401-19991224/GXHTML(TM) 1.0 The Extensible HyperText Markup Language (Second Edition) 01-08-2002http://www.w3.org/TR/xhtml1/# XHTML(TM) 1.1 - Module-based XHTML 31-05-2001/http://www.w3.org/TR/2001/REC-xhtml11-20010531/+edu/harvard/hul/ois/jhove/ExternalSignature.html   : .htm gh*edu/harvard/hul/ois/jhove/module/XmlModule :;       =>&edu/harvard/hul/ois/jhove/ErrorMessage3XML-HUL module required to validate XHTML documents :w    u h java/lang/String withtextmd=true  ;      89(edu/harvard/hul/ois/jhove/TextMDMetadata h  %edu/harvard/hul/ois/jhove/Checksummer-edu/harvard/hul/ois/jhove/ChecksumInputStream :    4edu/harvard/hul/ois/jhove/module/html/HtmlCharStream ISO-8859-1 :/edu/harvard/hul/ois/jhove/module/html/ParseHtml :$java/io/UnsupportedEncodingExceptionjava/lang/StringBuilderInternal error:     hDocument is empty _`DOCTYPE is not HTML/edu/harvard/hul/ois/jhove/module/html/JHOpenTag htmlheadbodytitle3Document contains no html, head, body or title tags %edu/harvard/hul/ois/jhove/InfoMessage)Not able to determine type of end of line CR LFCRLF c`JDocument has XML declaration but no DOCTYPE; probably XML rather than HTMLNUnrecognized or missing DOCTYPE declaration; validation continuing as HTML 3.2 4edu/harvard/hul/ois/jhove/module/html/Html3_2DocDescHTML 3.2 9edu/harvard/hul/ois/jhove/module/html/Html4_0FrameDocDesc4.09edu/harvard/hul/ois/jhove/module/html/Html4_0TransDocDesc:edu/harvard/hul/ois/jhove/module/html/Html4_0StrictDocDesc:edu/harvard/hul/ois/jhove/module/html/Html4_01FrameDocDesc4.01:edu/harvard/hul/ois/jhove/module/html/Html4_01TransDocDesc;edu/harvard/hul/ois/jhove/module/html/Html4_01StrictDocDesc ICode for appropriate HTML version not available yet:substituting HTML 3.2{  x  UTF  7 8 variable 14edu/harvard/hul/ois/jhove/module/html/ParseException  Parse errorLine =    , column =  :3edu/harvard/hul/ois/jhove/module/html/TokenMgrErrorTokenMgrError:   4  5     "edu/harvard/hul/ois/jhove/Checksum   :       [C*,+Y?-./*0,1W@YABCD:*E1W@YFBCD:*E1W=><JRG8HYI:d>*JK*LM*NO+,P,QYRST,U*N*V9*VW:X$YZ:[\]* *^,*_2`,*a2b,*c*d*eYfd:*LP*LgF,hi:jYk:*lY+mn**n*L *Lopq*+*L *Lopq:::rY*qst:uYv:.:,QYxYyz{|{}ST,U6~:  ,U,QYST* 6,U,QYST6  W:  XO Y:  ; :  ]! ] ]  ] 6  ,QYST,U:  ,YT*d? *d* *d  *dP* 52,QYST,Ud,QYST,: ; ;Yw    Y: *d*dY: *d*dY: *d*d~Y: *d*d`Y: *d*dBY: *d*d$Y: *d*dd*d*N ,YTY:   ,W :*d *ds*d:+*d**d*d(*d**d*dn:  : ,QYxYy{ { ¶}öT,U,: ,QYxYyŶ{ ƶ{}ST,U,ǚ 2 ,2,2$* *d:  , X,*nζ,YѲҷӶ:  ,Y ַӶY: ,Y طӶB\_wMNMN?=@#A'' LBCDEFGBCDEFGBCDEFHBCDEFH%BCDEIJKL*'M ALNO#O%?P%&"BCDEIJKMAOPOQBCDEIJKMAOPOQNQBCDEIJKMAOPOQ BCDEIJKBRAS( TT BCDEIJKTQ>OUVWX<V-*_2`-*a2b-*c:ڶSܶSݶS YOYOYO:*:666 Y,:  }v *6  6  6  D .6 2: 4  \.`O .-* O : 6 -Ut??h BYCDZ[\]):B^UV_`<{+M,+i+M,,N-i-Z:]-Z:]*-Z:*N] ]]]]]]]: D^_yz?%'aMO, Bbc`<V+M,+WN-X--YM,,:]NQMQ?/aA0d@BMbaef<>&+=+"+d" +d+?$ gh<+ WK?Hbi;< YOY OYOZYSZYS ZYSYSYSYSYSYSYSYSYSY SY SY S ZYSYSYSYSYSYSYSYSYSY SY SY Sʱjhove/classes/edu/harvard/hul/ois/jhove/module/Jpeg2000Module.class0000644000707400001440000003423311510702103024261 0ustar garyusers2]^ _ `a bcde fg hij kl mn op qr s tuv wx yz k{|}~     &     w  k      H    O      [  `       h    k   s                                           [ [                ! "# $   % &' ( )* + ,- . /  01 2 3 4 5 6 7 & 8 9 :;<=>?@NAMELjava/lang/String; ConstantValueRELEASEDATE[IFORMAT[Ljava/lang/String;COVERAGEMIMETYPE WELLFORMEDVALIDITYREPINFONOTERIGHTS_niso-Ledu/harvard/hul/ois/jhove/NisoImageMetadata; _defaultNiso_dstreamLjava/io/DataInputStream;_rafLjava/io/RandomAccessFile; _rafStream*Ledu/harvard/hul/ois/jhove/RAFInputStream; _propListLjava/util/List; codestreamsbinaryFilterPropsassociationPropsdigitalSigProps nCodestreamsInCodestreamHeaders colorSpecsuuids composLayers uuidInfosxmlList jp2HdrSeenZrreqSeen colorSpecSeenimageHeaderSeen jp2Compliant jpxCompliant curCodestream6Ledu/harvard/hul/ois/jhove/module/jpeg2000/Codestream; filterModesigByte()VCodeparse@(Ljava/io/RandomAccessFile;Ledu/harvard/hul/ois/jhove/RepInfo;)V StackMapTable?AB?ACD Exceptions getFilePos()Jseek(J)VgetDefaultNiso/()Ledu/harvard/hul/ois/jhove/NisoImageMetadata;getCurrentNiso getCodestream9(I)Ledu/harvard/hul/ois/jhove/module/jpeg2000/Codestream; getNCodestreams()IgetNCodestreamHeaders isJP2HdrSeen()ZsetNCodestreams(I)VsetNCodestreamHeaders setJP2HdrSeen(Z)V setRReqSeensetColorSpecSeensetImageHeaderSeensetJP2CompliantsetJPXCompliant addProperty'(Ledu/harvard/hul/ois/jhove/Property;)V addColorSpecaddBinaryFilterPropaddAssociationPropaddDigitalSignaturePropaddUUID addUUIDInfoaddComposLayeraddXML(Ljava/lang/String;)V read4Chars-(Ljava/io/DataInputStream;)Ljava/lang/String;readUnsignedShort(Ljava/io/DataInputStream;)IreadUnsignedInt(Ljava/io/DataInputStream;)JreadSignedLong initParse readBoxes&(Ledu/harvard/hul/ois/jhove/RepInfo;)Z#%readFileTypeBox'1 skipOverBoxt(Ledu/harvard/hul/ois/jhove/module/jpeg2000/BoxHeader;Ledu/harvard/hul/ois/jhove/RepInfo;Ljava/io/DataInputStream;)Z JPEG2000-hul1.3 MJP2 (ISO/IEC 15444-1:2000/ITU-T Rec. T.800 (200)), JPX (ISO/IEC 15444-2:2004) The required Signature and File Type box structures are the first two boxes in the file; all boxes required by a given profile exist in the file; all box structures are well-formed (a four byte unsigned integer Box Length, followed by a four byte unsigned integer Box type, followed by a eight byte unsigned integer Box Length, followed by the Box Contents); no data exist before the first byte of the first box or after the last byte of the last boxThe file is well-formedSProperties capturing the technical attributes of the JPEG 2000 image from all boxes Copyright 2004-2007 by JSTOR and the President and Fellows of Harvard College. Released under the GNU Lesser General Public License. Eedu/harvard/hul/ois/jhove/AgentHarvard University LibraryF GH IFOffice for Information Systems, 90 Mt. Auburn St., Cambridge, MA 02138 JI+1 (617) 495-3724 KI!jhove-support@hulmail.harvard.edu LI MN"edu/harvard/hul/ois/jhove/DocumentUInformation technology -- JPEG 2000 image coding system -- Part 1: Code coding systemO PQ RISO PHC1, rue de Varembe, Casa postale 56, CH-1211, Geneva 20, Switzerland+41 22 749 01 11+41 22 733 34 30 SI iso@iso.chhttp://www.iso.org/ TI UV$edu/harvard/hul/ois/jhove/IdentifierISO/IEC 15444-1:2000W zX Y Z[ 2002-07-31 \I ]C ^_MInformation technology -- JPEG 2000 image coding system -- Part 2: ExtensionsISO/IEC 15444-2:2004 2004-05-15>MIME Type Registrations for JPEG 2000 (ISO/IEC 15444) RFC 3745 `QIETFhttp://www.ietf.org aV D. Singer bHR. ClarkD. Lee2004-04#http://www.ietf.org/rfc/rfc3745.txt cXdITU-T Rec. T.800 (2002), Information technology -- JPEG 2000 image coding system: Core coding systemITU5ITU, Place des Nations, CH-1211 Geneva 20 Switzerland+41 22 730 51 11+41 22 730 6500itumail@itu.inthttp://www.itu.int/home/2002-08ITU-T Rec. T.800 (2002) X+edu/harvard/hul/ois/jhove/InternalSignature d efg hi j k+edu/harvard/hul/ois/jhove/ExternalSignature.jp2 lf mi n.jpx.jpfjp2 ofjpx p R(edu/harvard/hul/ois/jhove/RAFInputStream qrs t1 u java/io/DataInputStream v wB xI y zI {|java/util/ArrayList 6 "edu/harvard/hul/ois/jhove/PropertyJPEG2000Metadata} ~   java/io/IOException&edu/harvard/hul/ois/jhove/ErrorMessageNo JPEG 2000 header   9  I WT ST 1 @ 4  1%edu/harvard/hul/ois/jhove/Checksummer      1     JP2 IJPX  +  4 ColorSpecs  BinaryFilters  Associations DigitalSignatures UUIDs CompositingLayers   UUIDInfoBoxes D 4 4edu/harvard/hul/ois/jhove/module/jpeg2000/Codestream  Codestreams  XML  &' ()       java/lang/StringBuffer   M O Qjava/util/LinkedList  +edu/harvard/hul/ois/jhove/NisoImageMetadata big-endian I;edu/harvard/hul/ois/jhove/module/jpeg2000/TopLevelBoxHolder 0edu/harvard/hul/ois/jhove/module/jpeg2000/JP2Box 43edu/harvard/hul/ois/jhove/module/jpeg2000/BoxHeader  ftyp  _java/lang/StringBuilderExpected File Type Box, got  5edu/harvard/hul/ois/jhove/module/jpeg2000/FileTypeBox     {  ' ' java/lang/String JPEG 2000 image/jp2 image/jpx/edu/harvard/hul/ois/jhove/module/Jpeg2000Module$edu/harvard/hul/ois/jhove/ModuleBasejava/io/RandomAccessFile!edu/harvard/hul/ois/jhove/RepInfojava/util/Listjava/util/ListIterator(Ljava/lang/String;Ljava/lang/String;[I[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Z)V#edu/harvard/hul/ois/jhove/AgentType EDUCATIONAL%Ledu/harvard/hul/ois/jhove/AgentType;:(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/AgentType;)V setAddress setTelephonesetEmail_vendor!Ledu/harvard/hul/ois/jhove/Agent;&edu/harvard/hul/ois/jhove/DocumentTypeSTANDARD(Ledu/harvard/hul/ois/jhove/DocumentType;=(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/DocumentType;)VsetFaxsetWeb setAuthor$(Ledu/harvard/hul/ois/jhove/Agent;)V(edu/harvard/hul/ois/jhove/IdentifierType*Ledu/harvard/hul/ois/jhove/IdentifierType;?(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/IdentifierType;)V setIdentifier)(Ledu/harvard/hul/ois/jhove/Identifier;)VsetDate_specificationadd(Ljava/lang/Object;)ZRFC setPublisherOTHERURL'edu/harvard/hul/ois/jhove/SignatureTypeMAGIC)Ledu/harvard/hul/ois/jhove/SignatureType;*edu/harvard/hul/ois/jhove/SignatureUseType MANDATORY,Ledu/harvard/hul/ois/jhove/SignatureUseType;m([ILedu/harvard/hul/ois/jhove/SignatureType;Ledu/harvard/hul/ois/jhove/SignatureUseType;ILjava/lang/String;)V _signature EXTENSIONOPTIONALj(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/SignatureType;Ledu/harvard/hul/ois/jhove/SignatureUseType;)VFILETYPE _bigEndian_je%Ledu/harvard/hul/ois/jhove/JhoveBase;#edu/harvard/hul/ois/jhove/JhoveBase getBufferSize(Ljava/io/RandomAccessFile;I)V(Ljava/io/InputStream;)V_format setFormat _mimeType setMimeType setModule%(Ledu/harvard/hul/ois/jhove/Module;)V&edu/harvard/hul/ois/jhove/PropertyTypePROPERTY(Ledu/harvard/hul/ois/jhove/PropertyType;'edu/harvard/hul/ois/jhove/PropertyArityLIST)Ledu/harvard/hul/ois/jhove/PropertyArity;x(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ledu/harvard/hul/ois/jhove/PropertyArity;Ljava/lang/Object;)VreadUnsignedByteB(Ljava/io/DataInputStream;Ledu/harvard/hul/ois/jhove/ModuleBase;)I(Ljava/lang/String;J)V setMessage&(Ledu/harvard/hul/ois/jhove/Message;)V setWellFormed_name setSigMatch getWellFormed setPropertygetChecksumFlag getChecksum()Ljava/util/List;sizecalcRAChecksumD(Ledu/harvard/hul/ois/jhove/Checksummer;Ljava/io/RandomAccessFile;)V setChecksumsM(Ledu/harvard/hul/ois/jhove/Checksummer;Ledu/harvard/hul/ois/jhove/RepInfo;)VgetValid setProfilegetNisoisEmpty listIterator()Ljava/util/ListIterator;hasNextnext()Ljava/lang/Object; makeProperty&()Ledu/harvard/hul/ois/jhove/Property;STRINGget(I)Ljava/lang/Object;setDefaultNiso0(Ledu/harvard/hul/ois/jhove/NisoImageMetadata;)Vappend(C)Ljava/lang/StringBuffer;toString()Ljava/lang/String;C(Ljava/io/DataInputStream;ZLedu/harvard/hul/ois/jhove/ModuleBase;)IC(Ljava/io/DataInputStream;ZLedu/harvard/hul/ois/jhove/ModuleBase;)J setByteOrder(Ledu/harvard/hul/ois/jhove/module/Jpeg2000Module;Ljava/io/RandomAccessFile;Ledu/harvard/hul/ois/jhove/RepInfo;Ljava/io/DataInputStream;)VreadBoxM(Ledu/harvard/hul/ois/jhove/module/Jpeg2000Module;Ljava/io/DataInputStream;)V readHeadergetTypeequals-(Ljava/lang/String;)Ljava/lang/StringBuilder;_nByteJ(Ljava/io/RandomAccessFile;)V setBoxHeader8(Ledu/harvard/hul/ois/jhove/module/jpeg2000/BoxHeader;)VsetDataInputStream(Ljava/io/DataInputStream;)VsetRandomAccessFile4(Ledu/harvard/hul/ois/jhove/module/Jpeg2000Module;)V setRepInfo&(Ledu/harvard/hul/ois/jhove/RepInfo;)V getLength getDataLength skipBytesC(Ljava/io/DataInputStream;ILedu/harvard/hul/ois/jhove/ModuleBase;)I!%             $ x*   YL+++*+YM YN--- !-"-#$,-%,&Y'()*,+,*-,.WY/M,-%,&Y0()*,1,*-,.WY23M Y4:5$,6 Y78L,+% Y98L,+% Y:8L,+%,;,&Y<=):,**-,.WY>M Y?:@AB!CD$,%,E,&YFG):,**-,.WHYIJKLM:*N.WOYPQRS:*N.WOYTQRS:*N.WOYUQRS:*N.WOYVWRS:*N.WOYXWRS:*N.W*Y >*Z*[Y+*\ *\]^_*`Y*_ab,*c2d,*e2f,*g*hY ijkYlmn*joN*+p666 $*b*q6I. 6 ۧ:6,sYtuv,w,*xy*,z*,{,|,-}*\0*\~&,Y:*+*,* ,*** ,** ,*,,*e2:,f*** *jkYmn*o.W* *jkYmn*o.W* *jkYmn*o.W* *jkYmn*o.W* *jkYmn*o.W* *jkYmn*o.W* *jkYmn*o.W*ahY*i:*::.W*jkYmno.W* *jkYn*o.Wvrj  \!!B"8 /((((((((#$%(%r&'+ *_L rH"() *_%r*+*,+)*** -.[@**MYM,**,.W*,, /01*21*34*56*76*89*:9*;9*<9*=95 ****2>9*?@ *j+.WA@ *+.WB@ *+.WC@ *+.WD@ *+.WE@ *+.WF@ *+.WG@ *+.WHI *+.WJKH*YM>+*q6,W,  L%rMN+*%rOP+*%rQP+*%rR**Y*Y*Y*Y*Y*Y*Y*Y*Y*******Y**2**STZ6Y**p+*bM,ę,N--ǚUV%rWTY**bM,,̶͚/+sYYж,̶Ѷ*ӷuv+wY*pN-,-*b-*p-*-+-ۚIX3Y%rZ[,+ *-+݈*W%r\ YOYOYOYSYSYSYSYS  YOYOYOY OYjOYPOY OY OY OY  OY OY  OIjhove/classes/edu/harvard/hul/ois/jhove/module/JpegModule.class0000644000707400001440000007127111510702103023762 0ustar garyusers2Zfg h ij klmn op qr st uv wx y z{ | z}~        #   # #  / #           T    [ [                    y {  ~                                              !"# $ %& ' () * +, -. / 0 123 4 5 6 78 79: ; <= >? <@ AB CD E {F GH yI JK L M yN JO yP JQ RS T U V 4WX Y Z [8 [9\ ]^ _ `a bc d e f g h i  j kl  m n op q r stu v wx yz z{ | }~      @  $ ! $ $      $ W   4 4    9 9 9 9 9 9 9        N N N N +     9  9 9  9 e 9 9   r v x     ~    xC  W W x                                                     ! " # $ % & ' ()*+,-./01234NAMELjava/lang/String; ConstantValueRELEASEDATE[IFORMAT[Ljava/lang/String;COVERAGEMIMETYPE WELLFORMEDVALIDITYREPINFONOTERIGHTSjfifProfileNamespiffProfileNameexifProfileNamejpeglProfileNameminorFmtLjava/text/NumberFormat; _ckSummer'Ledu/harvard/hul/ois/jhove/Checksummer;_cstream/Ledu/harvard/hul/ois/jhove/ChecksumInputStream;_dstreamLjava/io/DataInputStream; _metadata$Ledu/harvard/hul/ois/jhove/Property; _imageProp _exifProp_xmpProp_niso-Ledu/harvard/hul/ois/jhove/NisoImageMetadata; _propListLjava/util/List; _imageList_tiling.Ledu/harvard/hul/ois/jhove/module/jpeg/Tiling; _quantTables_arithCondTables_srsList_primaryImageList _numSegmentsI _numScans_restartInterval _seenJFIFZ _seenSPIFF _seenJPEGL_reportedSigMatch _spiffDir0Ledu/harvard/hul/ois/jhove/module/jpeg/SpiffDir; _seenExif_exifProfileOK _reportedJFIF_seenSOF _commentsList _jpegExtsList _appSegsList_expList _compressSetLjava/util/Set; _capability0 _capability1sigByte_units _xDensity _yDensity()VCodecheckSignaturesI(Ljava/io/File;Ljava/io/InputStream;Ledu/harvard/hul/ois/jhove/RepInfo;)V StackMapTable356736 Exceptionsparse<(Ljava/io/InputStream;Ledu/harvard/hul/ois/jhove/RepInfo;I)I"89:readUnsignedShort(Ljava/io/DataInputStream;)IreadUnsignedInt(Ljava/io/DataInputStream;)J initParseinitNiso readHeader&(Ledu/harvard/hul/ois/jhove/RepInfo;)ZtreadAPP0&(Ledu/harvard/hul/ois/jhove/RepInfo;)VreadAPP1readAPP8readVerreadDTIreadDTTreadSRS reportAppExt'(ILedu/harvard/hul/ois/jhove/RepInfo;)VreadSOFreadDHPreadEXPreadDRIreadDQTreadDACreadJPEGExtension readComment buildCapPropI(Ledu/harvard/hul/ois/jhove/RepInfo;)Ledu/harvard/hul/ois/jhove/Property;buildTilingProp;buildExpandPropreadXMP(([B)Ledu/harvard/hul/ois/jhove/Property;<=>extractExifNisoData0(Ledu/harvard/hul/ois/jhove/NisoImageMetadata;)V skipSegment equalArray([I[I)ZJPEG-hul1.2  JPEG (ISO/IEC 10918-1:1994), JFIF 1.02, SPIFF (ISO/IEC 10918-3:1997), Exif 2.0, 2.1 (JEIDA-49-1998), and 2.2 (JEITA CP-3451), JTIP (ISO/IEC 10918-3:1997), JPEG-LS (ISO/IEC 14495) A JPEG file is well-formed if the first three bytes are 0xFFD8FF, it consists of one or more correctly formatted segments (using markers 0xC0 through 0xFE), and the data streams following RSTn and SOS markers are correctly terminatedA JPEG file is valid if well-formed; the first non-comment segment is APP0 (with identifier 0x4A46494600, indicating JFIF or JTIP), APP1 (with identifier (0x457869660000, indicating Exif), APP8 (with identifier 0x545049464600, indicating SPIFF), or JPG7 (or SOF55, indicating JPEG-LS); D8 marker occurs only at the beginning of the file; any DTT segments are preceded by DTI segments; and all DTI segment tiling type have a value of 0, 1, or 2Additional representation information includes: NISO Z39.87 Digital Still Image Technical Metadata and segment-specific metadata Copyright 2003-2007 by JSTOR and the President and Fellows of Harvard College. Released under the GNU Lesser General Public License. ?JFIF SPIFF Exif JPEG-L @ AB  CDedu/harvard/hul/ois/jhove/AgentHarvard University LibraryE FG HFOffice for Information Systems, 90 Mt. Auburn St., Cambridge, MA 02138 IJ+1 (617) 495-3724 KJ!jhove-support@hulmail.harvard.edu LJ MN"edu/harvard/hul/ois/jhove/DocumentLEric Hamilton, JPEG File Interchange Format, Version 1.02, September 1, 1992O PQ RC-Cube Microsystems SG,1778 McCarthy Boulevard, Milipitas, CA 95035+1 (408) 944-6314 TJ UV 1992-09-01 WJ$edu/harvard/hul/ois/jhove/Identifier)http://www.w3.org/Graphics/JPEG/jfif3.pdfX YZ [ \] ^8 _`ISO/IEC 10918-1:1994(E), Information technology -- Digital compression and coding of continuous-tone still images: Requirements and guidelines aQISO aGC1, rue de Varembe, Casa postale 56, CH-1211, Geneva 20, Switzerland+41 22 749 01 11+41 22 733 34 30 iso@iso.chhttp://www.iso.org bJCCITT REc. T.81 (1992 E) cZbISO/IEC 10918-3:1997(E), Digital compressionand coding of continuous-tone still-images: ExtensionsITU-T Rec. T.84 (1996 E)ISO/IEC 14495-1:1999(E), Information technology -- Lossless and near-lossless compression of continuous-tone still images: BaselineISO/IEC 14495-2:2003(E), Information technology -- Lossless and near-lossless compression of continuous-tone still images: ExtensionsJExchangeable image file format for digital still cameras: Exif Version 2.2CJapan Electronics and Information Technology Industries Associationhttp://www.jeita.or.jp/dMitsui Sumitomo Kaijo Building Annex, 11, Kanda Surugadai 3-chome, Chiyoda-ku, Tokyo 101-0062, Japan+81(03) 3518-6421+81(03) 3295-87212002-04 JEITA CP-3451 dZhttp://www.exif.org/Exif2-2.PDFnDigital Still Camera Image File Format Standard (Exchangeable image file format for Digital Still Camera:Exif)1998-12JEITA JEIDA-49-1998 http://www.exif.org/dcf-exif.PDF+edu/harvard/hul/ois/jhove/InternalSignature e fgh ij k l+edu/harvard/hul/ois/jhove/ExternalSignature.jpg mg nj o.jls*Generally used for JPEG-LS (ISO/IEC 14495) p.spf/Generally used for SPIFF (ISO/IEC 10918-3:1997) q rst uv wx  yzjava/lang/Exception7 {| }~  J  J  J 4    v%edu/harvard/hul/ois/jhove/Checksummer -edu/harvard/hul/ois/jhove/ChecksumInputStream  java/util/LinkedList "edu/harvard/hul/ois/jhove/Property JPEGMetadata     67+edu/harvard/hul/ois/jhove/NisoImageMetadata NisoImageMetadata    5&edu/harvard/hul/ois/jhove/ErrorMessagejava/lang/StringBuilderExpected marker byte 255, got              4File does not begin with SPIFF, Exif or JFIF segment | MF GF b7 L:  K: J: H: I: 9: @: >: EF A: B: C: D: N:Marker not valid in contextjava/io/EOFExceptionUnexpected end of file  java/util/ArrayListPixelAspectRatioX java/lang/Integer  DPixelAspectRatioY PixelAspectRatio  RQ RestartIntervalScans   9  7edu/harvard/hul/ois/jhove/module/jpeg/QuantizationTable  QuantizationTables 7edu/harvard/hul/ois/jhove/module/jpeg/ArithConditioningArithmeticConditioning )edu/harvard/hul/ois/jhove/module/jpeg/SRS SelectivelyRefinedScans   "edu/harvard/hul/ois/jhove/Checksum         Image J    Number  :Images  Comments   Extensions ApplicationSegments  TQ   0 2   java/util/HashSet    image/jpeg big-endian J Djava/io/IOExceptionInvalid JPEG header 01 cd)JFIF APP0 marker not at beginning of file .  J D"edu/harvard/hul/ois/jhove/Rational      D  ThumbImage %edu/harvard/hul/ois/jhove/InfoMessage,TIFF-HUL module required to report Exif data.edu/harvard/hul/ois/jhove/module/jpeg/JpegExif   !edu/harvard/hul/ois/jhove/Message   `a http://ns.adobe.com/xap/1.0/   UV %SPIFF marker not at beginning of file.edu/harvard/hul/ois/jhove/module/jpeg/SpiffDir  23  ,edu/harvard/hul/ois/jhove/module/jpeg/Tiling D D D   DTT segment without previous DTI  APP 1  DCompressionType JPGJPG1java/lang/StringBuffer  vVersion0 Version1java/lang/String   CapabilityIndicator v TilingType  VerticalScale vHorizontalScale v RefGridHeight java/lang/Long   RefGridWidth  TilingUnrecognized tiling data JExpansionSegments[Z Horizontal java/lang/Boolean |Vertical Expansionjava/io/ByteArrayInputStream ,edu/harvard/hul/ois/jhove/ByteArrayXMPSource  =    |   $edu/harvard/hul/ois/jhove/XMPHandler>   'org/xml/sax/SAXException ENC=   $java/io/UnsupportedEncodingException v D v D  ! " # $ %J & 'J ( )J * + , - . / 0v 1D 2 3 4v 5D 6 7 8 9J : ;J < =J >v ?D @ AJ B CJ D EJ F GJ H IJ J KJ L MJ N OJ P QJ R SJ Tv UD VW XYJPEGISO/IEC 10918-1:1994 Joint Photographic Experts GroupJPEG File Interchange FormatISO/IEC 10918-3:1997%Still Picture Interchange File FormatJTIPJPEG Tiled Image PyramidJPEG-LS ISO/IEC 14495+edu/harvard/hul/ois/jhove/module/JpegModule$edu/harvard/hul/ois/jhove/ModuleBase java/io/Filejava/io/InputStream!edu/harvard/hul/ois/jhove/RepInfojava/util/Listjava/util/ListIteratorjava/util/Iterator%[Ledu/harvard/hul/ois/jhove/Property;[B"javax/xml/parsers/SAXParserFactoryorg/xml/sax/XMLReader(Ljava/lang/String;Ljava/lang/String;[I[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Z)Vjava/text/NumberFormat getInstance()Ljava/text/NumberFormat;setMinimumIntegerDigits(I)V#edu/harvard/hul/ois/jhove/AgentType EDUCATIONAL%Ledu/harvard/hul/ois/jhove/AgentType;:(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/AgentType;)V setAddress(Ljava/lang/String;)V setTelephonesetEmail_vendor!Ledu/harvard/hul/ois/jhove/Agent;&edu/harvard/hul/ois/jhove/DocumentTypeWEB(Ledu/harvard/hul/ois/jhove/DocumentType;=(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/DocumentType;)V COMMERCIALsetFax setPublisher$(Ledu/harvard/hul/ois/jhove/Agent;)VsetDate(edu/harvard/hul/ois/jhove/IdentifierTypeURL*Ledu/harvard/hul/ois/jhove/IdentifierType;?(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/IdentifierType;)V setIdentifier)(Ledu/harvard/hul/ois/jhove/Identifier;)V_specificationadd(Ljava/lang/Object;)ZSTANDARDsetWebCCITTJEITA'edu/harvard/hul/ois/jhove/SignatureTypeMAGIC)Ledu/harvard/hul/ois/jhove/SignatureType;*edu/harvard/hul/ois/jhove/SignatureUseType MANDATORY,Ledu/harvard/hul/ois/jhove/SignatureUseType;m([ILedu/harvard/hul/ois/jhove/SignatureType;Ledu/harvard/hul/ois/jhove/SignatureUseType;ILjava/lang/String;)V _signature EXTENSIONOPTIONALj(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/SignatureType;Ledu/harvard/hul/ois/jhove/SignatureUseType;)V|(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/SignatureType;Ledu/harvard/hul/ois/jhove/SignatureUseType;Ljava/lang/String;)V _bigEndian_je%Ledu/harvard/hul/ois/jhove/JhoveBase;#edu/harvard/hul/ois/jhove/JhoveBase getBufferSize()IgetBufferedDataStream1(Ljava/io/InputStream;I)Ljava/io/DataInputStream;readUnsignedByteB(Ljava/io/DataInputStream;Ledu/harvard/hul/ois/jhove/ModuleBase;)I setWellFormed(Z)V setModule%(Ledu/harvard/hul/ois/jhove/Module;)V_format setFormat _mimeType setMimeType_name setSigMatchgetChecksumFlag()Z getChecksum()Ljava/util/List;size?(Ljava/io/InputStream;Ledu/harvard/hul/ois/jhove/Checksummer;)V&edu/harvard/hul/ois/jhove/PropertyTypePROPERTY(Ledu/harvard/hul/ois/jhove/PropertyType;'edu/harvard/hul/ois/jhove/PropertyArityLIST)Ledu/harvard/hul/ois/jhove/PropertyArity;x(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ledu/harvard/hul/ois/jhove/PropertyArity;Ljava/lang/Object;)VNISOIMAGEMETADATAO(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ljava/lang/Object;)Vappend-(Ljava/lang/String;)Ljava/lang/StringBuilder;(I)Ljava/lang/StringBuilder;toString()Ljava/lang/String;_nByteJ(Ljava/lang/String;J)V setMessage&(Ledu/harvard/hul/ois/jhove/Message;)VsetValid setProperty'(Ledu/harvard/hul/ois/jhove/Property;)VINTEGERisEmpty listIterator()Ljava/util/ListIterator;hasNextnext()Ljava/lang/Object;getShowRawFlag makeProperty'(Z)Ledu/harvard/hul/ois/jhove/Property;&()Ledu/harvard/hul/ois/jhove/Property; skipBytesC(Ljava/io/DataInputStream;ILedu/harvard/hul/ois/jhove/ModuleBase;)I getNBytes()JsetSize(J)VgetCRC32&edu/harvard/hul/ois/jhove/ChecksumTypeCRC32(Ledu/harvard/hul/ois/jhove/ChecksumType;=(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/ChecksumType;)V setChecksum'(Ledu/harvard/hul/ois/jhove/Checksum;)VgetMD5MD5getSHA1SHA1 setProfileappendThumbnailProps(Ljava/util/List;)VSCALARiterator()Ljava/util/Iterator;STRINGC(Ljava/io/DataInputStream;ZLedu/harvard/hul/ois/jhove/ModuleBase;)IC(Ljava/io/DataInputStream;ZLedu/harvard/hul/ois/jhove/ModuleBase;)J setByteOrdersetCompressionScheme(I)Ljava/lang/String;format(J)Ljava/lang/String; setVersionsetSamplingFrequencyUnit(II)VsetXSamplingFrequency'(Ledu/harvard/hul/ois/jhove/Rational;)VsetYSamplingFrequency setImageWidthsetImageLength setColorSpace setPixelSize(D)VisTiffAvailable readExifDatad(Ljava/io/DataInputStream;Ledu/harvard/hul/ois/jhove/JhoveBase;I)Ledu/harvard/hul/ois/jhove/RepInfo; getMessageget(I)Ljava/lang/Object; getProperty8(Ljava/lang/String;)Ledu/harvard/hul/ois/jhove/Property;getValueisExifProfileOKcharAt(I)C readByteBufD(Ljava/io/DataInputStream;[BLedu/harvard/hul/ois/jhove/ModuleBase;)I readDirEntry(Ljava/io/DataInputStream;I)V0(Ledu/harvard/hul/ois/jhove/module/JpegModule;)V+edu/harvard/hul/ois/jhove/module/jpeg/SpiffcolorSpaceToNiso(I)IcompressionTypeToNiso setTilingType setVertScale setHorScalesetRefGridHeightsetRefGridWidthaddTile(JJJJ)V(IIII)V(C)Ljava/lang/StringBuilder;setBitsPerSample([I)VsetSamplesPerPixel1edu/harvard/hul/ois/jhove/module/jpeg/JpegStringsCOMPRESSION_TYPE(C)Ljava/lang/StringBuffer;length CAPABILITY_V0 CAPABILITY_V1TILING_CAPABILITY_V1ARRAY getTilingType TILING_TYPE getVertScale getHorScaleLONGgetRefGridHeightgetRefGridWidthbuildTileListPropBOOLEAN([B)V!(Ljava/io/ByteArrayInputStream;)V newInstance&()Ljavax/xml/parsers/SAXParserFactory;setNamespaceAware newSAXParser()Ljavax/xml/parsers/SAXParser;javax/xml/parsers/SAXParser getXMLReader()Lorg/xml/sax/XMLReader;setContentHandler(Lorg/xml/sax/ContentHandler;)VsetErrorHandler(Lorg/xml/sax/ErrorHandler;)V(Lorg/xml/sax/InputSource;)V startsWith(Ljava/lang/String;)Z substring3(Ljava/io/ByteArrayInputStream;Ljava/lang/String;)V getAutoFocus setAutoFocus getBackLight setBackLight getBrightness()D setBrightness getColorTemp setColorTempgetDeviceSourcesetDeviceSourcegetDigitalCameraManufacturersetDigitalCameraManufacturergetDigitalCameraModelsetDigitalCameraModelgetExposureBiassetExposureBiasgetExposureIndexsetExposureIndexgetExposureTimesetExposureTimegetFlashsetFlashgetFlashEnergysetFlashEnergygetFlashReturnsetFlashReturn getFNumber setFNumbergetHostComputersetHostComputergetImageIdentifiersetImageIdentifiergetImageProducersetImageProducergetMeteringModesetMeteringModegetOSsetOS getOSVersion setOSVersiongetPerformanceDatasetPerformanceDatagetProcessingAgencysetProcessingAgencygetProcessingSoftwareNamesetProcessingSoftwareNamegetProcessingSoftwareVersionsetProcessingSoftwareVersiongetScannerManufacturersetScannerManufacturergetScannerModelNamesetScannerModelNamegetScannerModelNumbersetScannerModelNumbergetScannerModelSerialNosetScannerModelSerialNogetSceneIlluminantsetSceneIlluminantgetSubjectDistance()[DsetSubjectDistance([D)V!6         *   * *****YL+++ !*+"#Y$%&MY'(L+)+*+*+,+,,-.,/Y0123*4,5W#Y67&MY89N-:-;-<+-=!->?,-,,/Y@A23*4,5W#YB7&M,-,,/YCA23*4,5W#YD7&M,-,*4,5W#YE7&M,-,*4,5W#YF7&MYG9:H?IJK+,,,L./YMN2:,3/YO12:,3*4,5W#YP7&M,,,Q./YRN2:,3/YS12:,3*4,5WTYUVWXY:*Z5W[Y\]^_:*Z5W[Y`]^ab:*Z5W[Yc]^db:*Z5W*en*,*f *fghi6,*i*j6:6U. -l-*m-*n2o-*p2q-*rs#-0kE !"#$ !"#$R%& '( *t,*n2o,*p2q,*m*u*fT*fvJ,wx>*yYzu*{Y+*u|}**}*f *fghi*+*f *fghi*~Y*Y**,*YY*:*5W*6665*i*j6 6~ 6Z6*i*j6-,YY*,l*i*j6*Y`*B*;*4*-*%*,Y*,*Сף 6b *,H&,looooyooooooooo *,*,W*,*,W*Y`6*,*,W*,*,*,z*,r*,j*,b*,*,WR*,J*,B*,:*,2*Yd*, Y*:,,!:Y*:,,l,**eY:YY*5WYY*5W*Y²5W**,:*5W*ś$*YƲY*ŷ5W*YDzY*5W*ȹ_~Y:*ȹ:&:  *fζϹ5W*Yв5W*ѹ_~Y:*ѹ:&:  *fζӹ5W*YԲ5W*չX~Y:*չ::  ׹5W*Yز5W*u|**i*6 :,*}ڶ,Y*uݲ޷߶*u:,Y߶*uY:,Y߶*Y*5W* ,*** ,**,***** ,*Y:YY*x5W*::  5W*Y5W* *Y*5W* *Y*5W* *Y*5W***,5W***5W***5WhIiFIxkHp!"#)!"#)!"#$!"#$+/* ;Om B+p'@,-,,-,,-%B%=.+ :,/"C((& 01+*& 23+*& 4**~Y**************~Y*~Y*~Y*~Y*~Y*~Y*~Y*Y*~Y****5*** * 67M6=!*i*j>U. 6 :6+Y +l(+ ="""89:  YJOYFOYXOYXOYOM YJOYFOYIOYFOYON*+*rs**+ :**i 6***id*W6*i*jO-*)+Y*+**id*W**i*j6*i*j6Y*:+**i*j****`***i ***i *)*Y**Y**i*j6 *i*j6  t oY:         ~Y:  Y 5WY : * 5W***i h h*W,*i*j6*i*j6*i*j6**id*WY:       ~Y:  Y 5WY : * 5W**id*W**id*WL;;,;6m.D";;;-G ";;;<= ";;;<=O & >:^  YEOYxOYiOYfOYOYOM YhOYtOYtOYpOY:OY/ON*+ :**i 6**id*W6*i*jO,*+*rs** %+!Y"*#**id*W$Y%:*i*f&:X':  x6 6   +  () ***:  * +,*-- y66)*i*j6  ./ 6 **id*W*i*jWd:*i*0W**1**id*W]r";;;,1 ";;;?",$ &,& @:' YSOYPOYIOYFOYFOYOM*+*rs**+**i > :***i26*i*jO,-*+Y3*+**4Y*5*i*j6*i*j6Y*:+*i*j6*i*j6 **i67 * **i67 * *i*j676 **i*j6*i*j686 * *i*j6*`**i67**i67**id*WU 6;*;'";;.(";; & A:**i =*i*j>*i*j6Y*:+d6&**i*j**i*j**i*W*u".& B:qe**i =*9Y:**i*j;***i <***i =***i6>***i6?*& C:{ c**i =*+Y@*+**i6B**i67**i67**i67 *! A*(& D:UI**i =**i >**i 6**i 6**i 6*ջYB5W& EFqVCN!Y-d0`DN$Y-Ed0`DN*-5W ). GF **i >*i*j6**i 6**i 6*i*j6**id*W*k** :6   O *F*G*YHId25W*c ";6& H: **i =*i*j>**i 6**i 6*i*j6**id*W*J** :6O*F*G*b ";& I:E**i =*i*j>:~T~T*5W\&"oo"oo"oo"oo& J:"**i =***i ű& K:QE**i =*i*j>z6~6*ȻYJ5W**id*W*& L:QE**i =*i*j>z6~6*ѻYK5W**id*W*& MF A#YLd0`DN YMd0`DN*-5W******,*rs***i 6*i*j6**i 6**i 6*i*j6**id*W*** : 6    O * F*G***i 6**id*W9'.6b ".;".& N:Z**i =NYON66d(*i*j66 -PW-Q*-R5W "O & PQ/*YSN*fΙYTY*MYTU*2M-,5W*s*fΙ)YVY*:-5WCW:X*~2SY*z2SYVZ:-5WY[-:M k/ .,"*,>?"%RQ0 *M*ö\>*fΙ,Y]YS,Y]^2S,Y_Y*ö`S,YaY*öbS,YcdeY*öfgS,YhdeY*öigS,*öjSYkZ,M+Ylm+ k 2S"%TQ ~YMYn,N*:loo::YpqrY3sSYtqrY3sS,YuZ5W-%,*-rUVC MvY+w:xYy:z:{|}:~Y:M,:  :  3 ( : xY :: M,:GWXyWkXkkgX W*XYZ[\]9 W*XYZ[\^.._W*%`ao:=+*++*++*++*++*++*++*++*++*++*++*++*++*++*++*++*++*++*++*++*++*++*++*++*++*++*++*++*++*+ö+*+ŶƱ#b7$**i =**id*W& cdA$*+=**.+.  e YOYOY O WYSYSYSY SYSYSYSYSYSY SY SY SY SWYS  YOYOYOUjhove/classes/edu/harvard/hul/ois/jhove/module/PdfModule.class0000644000707400001440000014661111510702104023610 0ustar garyusers2!        !" #$ %& '( )* + ,-. /0 12 #3456 78 9 :; <= >?@ AB *C DE AF G HIJKLMNOPQR /ST #UVWXYZ[\ A]^_`abcdef ghi jk lm Qnop jq lr Vst /uvwxy `z {| c}~ e} g} g j} j m} o} o r} t}      [ [ } [ [  } }                   T                           H        z        H                H            6                         ! " # $ % & '() *+ [, [- . /0 [12 3 [4 56 7 8 9:;< 4*= [>? 8@AB C 8D EF ?GH IJKL DMNO PQR LSTUVWXY Z [\]^_` Za b Dc bde `f g h ij kl mn *o *p q r s ?tu ov ow ox oyz{ u o| o} o~ o o o o o   p    L a c  uc  *   L    Lf     c                p [      ? ?   }  H                     b       L !" $#$ b%& ' ( )* +,-. /0 t 123456789: }c ;< = Ct >? @ Gw GAB GC GD E 1 FG z HI G JK LMN O PQRST UV WX LY aZ[\ ` ]^ _`ab $cde f g hijkl }m nop qrstuvwxyz{|}~ *         1 1   C       Z     t   I    NAMELjava/lang/String; ConstantValueRELEASEDATE[IFORMAT[Ljava/lang/String;COVERAGEMIMETYPE WELLFORMEDVALIDITYREPINFONOTERIGHTS ENCRYPTEDF_TYPE0IF_TYPE1F_TTF_TYPE3F_MM1F_CID0F_CID2DEFAULT_MAX_FONTS_rafLjava/io/RandomAccessFile;_parser-Ledu/harvard/hul/ois/jhove/module/pdf/Parser;_version _metadata$Ledu/harvard/hul/ois/jhove/Property;_xmpProp_eofJ _startxref _prevxref_numFreeObjects _idProperty _objCount _numObjects _numTrailers_objectsLjava/util/Map;_xref[J_xref2[[I _xrefIsStreamZ _encrypted_docCatalogListLjava/util/List; _encryptList _docInfoList_extStreamsList _imagesList _filtersList _pagesList_type0FontsMap_type1FontsMap _mmFontsMap_type3FontsMap_trueTypeFontsMap _cid0FontsMap _cid2FontsMap _pageSeqMap_docCatDictRef5Ledu/harvard/hul/ois/jhove/module/pdf/PdfIndirectObj;_encryptDictRef_docInfoDictRef _pagesDictRef _docCatDict4Ledu/harvard/hul/ois/jhove/module/pdf/PdfDictionary; _docInfoDict _docTreeRoot3Ledu/harvard/hul/ois/jhove/module/pdf/PageTreeNode;_pageLabelDict_pageLabelRoot4Ledu/harvard/hul/ois/jhove/module/pdf/PageLabelNode;_embeddedFiles3Ledu/harvard/hul/ois/jhove/module/pdf/NameTreeNode; _destNames _encryptDict _trailerDict _viewPrefDict _outlineDict _destsDict _showFonts _showOutlines_showAnnotations _showPages _actionsExist_pdfACompliant_recursionWarned_skippedFontsReported_skippedOutlinesReported_skippedAnnotationsReported_skippedPagesReported_profile_cachedObjectStream3Ledu/harvard/hul/ois/jhove/module/pdf/ObjectStream;_cachedStreamIndex_visitedOutlineNodesLjava/util/Set;maxFonts_nFontsfontsSkippedStringoutlinesSkippedStringannotationsSkippedStringpagesSkippedStringoutlinesRecursiveStringcompressionStringscompressionValuescolorSpaceStringscolorSpaceValues()VCode resetParams Exceptionsparam(Ljava/lang/String;)V StackMapTableparse@(Ljava/io/RandomAccessFile;Ledu/harvard/hul/ois/jhove/RepInfo;)VmayBePDFACompliant()ZgetDocumentTree5()Ledu/harvard/hul/ois/jhove/module/pdf/PageTreeNode; getDocInfo6()Ledu/harvard/hul/ois/jhove/module/pdf/PdfDictionary;getEncryptionDictgetActionsExist initParse parseHeader&(Ledu/harvard/hul/ois/jhove/RepInfo;)Z`(findLastTrailer6 parseTrailer'(Ledu/harvard/hul/ois/jhove/RepInfo;Z)ZF_ readXRefInforeadXRefStreamsureadXRefTablesreadDocCatalogDict`readEncryptDictreadDocInfoDictreadDocumentTreereadPageLabelTree readXMPDatafindExternalStreams&(Ledu/harvard/hul/ois/jhove/RepInfo;)V findFiltersextractFiltersr([Ledu/harvard/hul/ois/jhove/module/pdf/Filter;Ledu/harvard/hul/ois/jhove/module/pdf/PdfStream;)Ljava/lang/String; findImagesR  nameToNiso*(Ljava/lang/String;[Ljava/lang/String;[I)I findFonts addFontToMapH(Ledu/harvard/hul/ois/jhove/module/pdf/PdfDictionary;)Ljava/lang/String;toHex&(Ljava/lang/String;)Ljava/lang/String;&(Ljava/util/Vector;)Ljava/lang/String;resolveIndirectObjectb(Ledu/harvard/hul/ois/jhove/module/pdf/PdfObject;)Ledu/harvard/hul/ois/jhove/module/pdf/PdfObject; getObject4(II)Ledu/harvard/hul/ois/jhove/module/pdf/PdfObject;BgetFile()Ljava/io/RandomAccessFile;getCatalogDictgetTrailerDictgetViewPrefDictgetOutlineDict getFontMap(I)Ljava/util/Map; getFontMaps()Ljava/util/List;getEmbeddedFiles5()Ledu/harvard/hul/ois/jhove/module/pdf/NameTreeNode;addFontsProperty(Ljava/util/List;)VaddPagesProperty6(Ljava/util/List;Ledu/harvard/hul/ois/jhove/RepInfo;)VbuildPageProperty{(Ledu/harvard/hul/ois/jhove/module/pdf/PageObject;ILedu/harvard/hul/ois/jhove/RepInfo;)Ledu/harvard/hul/ois/jhove/Property;buildPageLabelPropertyZ(Ledu/harvard/hul/ois/jhove/module/pdf/PageObject;I[I)Ledu/harvard/hul/ois/jhove/Property;buildMeasurePropertyZ(Ledu/harvard/hul/ois/jhove/module/pdf/PdfDictionary;)Ledu/harvard/hul/ois/jhove/Property;buildAnnotProperty}(Ledu/harvard/hul/ois/jhove/module/pdf/PdfDictionary;Ledu/harvard/hul/ois/jhove/RepInfo;)Ledu/harvard/hul/ois/jhove/Property;zaddDestinationx(Ledu/harvard/hul/ois/jhove/module/pdf/PdfObject;Ljava/lang/String;Ljava/util/List;Ledu/harvard/hul/ois/jhove/RepInfo;)VbuildFontPropertyH(Ljava/lang/String;Ljava/util/Map;I)Ledu/harvard/hul/ois/jhove/Property;oneFontPropListG(Ledu/harvard/hul/ois/jhove/module/pdf/PdfDictionary;I)Ljava/util/List;buildCMapDictPropertyV(Ledu/harvard/hul/ois/jhove/module/pdf/PdfStream;)Ledu/harvard/hul/ois/jhove/Property;buildCIDInfoPropertybuildEncodingDictPropertybuildFontDescriptorPropertybuildViewPrefProperty isFontSubset(Ljava/lang/String;)ZbuildOutlinesPropertybuildOutlineItemPropertyJdoOutlineStuffresolveIndirectDest9(Ledu/harvard/hul/ois/jhove/module/pdf/PdfSimpleObject;)IbuildUserPermProperty:(I[Ljava/lang/String;)Ledu/harvard/hul/ois/jhove/Property;addStringPropertyk(Ledu/harvard/hul/ois/jhove/module/pdf/PdfDictionary;Ljava/util/List;Ljava/lang/String;Ljava/lang/String;)VaddDatePropertybuildBitmaskProperty^(ILjava/lang/String;[Ljava/lang/String;Ljava/lang/String;)Ledu/harvard/hul/ois/jhove/Property;makeRectPropertyg(Ledu/harvard/hul/ois/jhove/module/pdf/PdfArray;Ljava/lang/String;)Ledu/harvard/hul/ois/jhove/Property;PDF-hul1.8  PDF 1.0-1.6; PDF/X-1 (ISO 15930-1:2001), X-1a (ISO 15930-4:2003), X-2 (ISO 15930-5:2003), and X-3 (ISO 15930-6:2003); Tagged PDF; Linearized PDF; PDF/A (ISO/CD 19005-1)  tA PDF file is well-formed if it meets the criteria defined in Chapter 3 of the PDF Reference 1.6 (5th edition, 2004)    cThis module does *not* validate data within content streams (including operators) or encrypted dataCopyright 2003-2007 by JSTOR and the President and Fellows of Harvard College. Released under the GNU Lesser General Public License. { edu/harvard/hul/ois/jhove/AgentHarvard University Library  {FOffice for Information Systems, 90 Mt. Auburn St., Cambridge, MA 02138  +1 (617) 495-3724  !jhove-support@hulmail.harvard.edu     "edu/harvard/hul/ois/jhove/Document:PDF Reference: Adobe Portable Document Format, Version 1.4  {Adobe Systems, Inc. 0345 Park Avenue, San Jose, California 95110-2704+1 (408) 536-6000+1 (408) 537-6000 http://www.adobe.com/  2001-12  3rd edition $edu/harvard/hul/ois/jhove/Identifier 0-201-75839-3  { Vhttp://partners.adobe.com/asn/acrobat/docs/File_Format_Specifications/PDFReference.pdf   ; !":PDF Reference: Adobe Portable Document Format, Version 1.52003 4th editionGhttp://partners.adobe.com/public/developer/en/pdf/PDFReference15_v6.pdf:PDF Reference: Adobe Portable Document Format, Version 1.62004-11 5th editionDhttp://partners.adobe.com/public/developer/en/pdf/PDFReference16.pdfGraphic technology -- Prepress digital data exchange -- Use of PDF -- Part 1: Complete exchange using CMYK data (PDF/X-1 and PDF/X-1a) #ISO #C1, rue de Varembe, Casa postale 56, CH-1211, Geneva 20, Switzerland+41 22 749 01 11+41 22 733 34 30 iso@iso.chhttp://www.iso.org 2001-12-06ISO 15930-1:2001 TGraphic technology -- Prepress digital data exchange -- Use of PDF -- Part 4: Complete exchange using CMYK and spot colour printing data using PDF 1.4 (PDF/X-1a) 2003-08-04ISO 15930-4:2003Graphic technology -- Prepress digital data exchange -- Use of PDF -- Part 5: Partial exchange of printing data using PDF 1.4 (PDF/X-2) 2003-08-05ISO 15930-5:2003Graphic technology -- Prepress digital data exchange -- Use of PDF -- Part 6: Complete exchange suitable for colour-managed workflows using PDF 1.4 (PDF/X-3) 2003-08-06ISO 15930-6:2003 $;+edu/harvard/hul/ois/jhove/ExternalSignature.pdf% &'( )* {++edu/harvard/hul/ois/jhove/InternalSignature%PDF-1. ,' -* {.oDocument management -- Electronic document file format for long-term preservation -- Part 1: Use of PDF (PDF/A) / 2003-11-30ISO/CD 19005-1;http://www.aiim.org/documents/standards/ISO_19005-1_(E).docjava/util/ArrayList {0 j;6edu/harvard/hul/ois/jhove/module/pdf/LinearizedProfile {12edu/harvard/hul/ois/jhove/module/pdf/TaggedProfile-edu/harvard/hul/ois/jhove/module/pdf/AProfile 233edu/harvard/hul/ois/jhove/module/pdf/AProfileLevelA 45.edu/harvard/hul/ois/jhove/module/pdf/X1Profile/edu/harvard/hul/ois/jhove/module/pdf/X1aProfile 67.edu/harvard/hul/ois/jhove/module/pdf/X2Profile.edu/harvard/hul/ois/jhove/module/pdf/X3Profile a8 _8 `8 b8 p 89 :;java/lang/StringBuffer {| <= >?@ AB CD E9 FGjava/lang/Exception | H I J K LMjava/util/HashMap 12  !2edu/harvard/hul/ois/jhove/module/pdf/FileTokenizer {N+edu/harvard/hul/ois/jhove/module/pdf/Parser {O "# PQ"edu/harvard/hul/ois/jhove/Property PDFMetadata RST UV {W %& <X d8   +) *)   0 78&edu/harvard/hul/ois/jhove/ErrorMessage!Cross reference tables are broken YX {Z [\ ]^           _`a b c d=%edu/harvard/hul/ois/jhove/Checksummer ef gh $ iObjects jSjava/lang/Integer / {k FreeObjects ,IncrementalUpdates :;DocumentCatalog <; Encryption =;Info -& >; lExternalStreams @;Filters ?;Images m  q%edu/harvard/hul/ois/jhove/InfoMessage-Too many fonts to report; some fonts omitted.java/lang/StringBuilderTotal fonts = Cn Co {p '&   qr s tu v= w xy/edu/harvard/hul/ois/jhove/module/pdf/PdfProfile z{ |9 } RS QP ZP c8 34 56 . A; B2 C2 D2 E2 F2 G2 H2 JK LK MK NK OP TP [P \P ]P ^P I2 UV WX YX f8 g8 h8 i8 m ~java/io/IOException,edu/harvard/hul/ois/jhove/module/pdf/Comment 9PDF-1. :G    !PS-Adobe-  No PDF header ~  1edu/harvard/hul/ois/jhove/module/pdf/PdfException | ^ ()%EOFNo PDF trailer,edu/harvard/hul/ois/jhove/module/pdf/Keyword startxref ",edu/harvard/hul/ois/jhove/module/pdf/Numeric X"Missing startxref keyword or valueInvalid cross-reference table ~ = .edu/harvard/hul/ois/jhove/module/pdf/PdfStream Root 3edu/harvard/hul/ois/jhove/module/pdf/PdfIndirectObj8edu/harvard/hul/ois/jhove/module/pdf/PdfInvalidException1Root entry missing in cross-ref stream dictionarytrailer4edu/harvard/hul/ois/jhove/module/pdf/DictionaryStartNo file trailer Prev4edu/harvard/hul/ois/jhove/module/pdf/PdfSimpleObject )Invalid Prev offset in trailer dictionarySize(Invalid Size entry in trailer dictionary(Size entry missing in trailer dictionary(Root entry missing in trailer dictionaryEncrypt 98 ^8Trailer dictionary Info key is not an indirect referenceIDInvalid ID in trailer-edu/harvard/hul/ois/jhove/module/pdf/PdfArrayjava/lang/String  { 6edu/harvard/hul/ois/jhove/module/pdf/StringValuedToken   S VXRefStm *Hybrid cross-reference not yet implemented   9    =3edu/harvard/hul/ois/jhove/module/pdf/CrossRefStream {  N =:edu/harvard/hul/ois/jhove/module/pdf/PdfMalformedException/Invalid object number in cross-reference stream X  =  = = Y= = Malformed cross reference streamMalformed cross-reference table 9nfIllegal operator in xref table ^No document catalog dictionary 2edu/harvard/hul/ois/jhove/module/pdf/PdfDictionary |ViewerPreferences  SinglePage PageLayout 9UseNonePageModeOutlinesLangLanguagePages PageLabelsVersion File header gives version as *, but catalog dictionary gives version as java/lang/NumberFormatException#Invalid Version in document catalogNames EmbeddedFiles1edu/harvard/hul/ois/jhove/module/pdf/NameTreeNode {Destsjava/lang/ClassCastExceptionInvalid Names dictionaryInvalid Dests dictionaryFilter)edu/harvard/hul/ois/jhove/module/pdf/NameSecurityHandlerEFFV  Algorithm 0Invalid algorithm value in encryption dictionaryLength KeyLengthStandardPR =     RevisionO OwnerStringU UserStringStandardSecurityHandlerTitle   AuthorSubjectKeywordsCreatorProducer CreationDate   ModDateTrappedUnexpected exception   9Document page tree not foundInvalid page dictionary object1edu/harvard/hul/ois/jhove/module/pdf/PageTreeNode { 2edu/harvard/hul/ois/jhove/module/pdf/PageLabelNode { |Metadata  ^  1edu/harvard/hul/ois/jhove/module/pdf/PdfXMPSource  {$edu/harvard/hul/ois/jhove/XMPHandler    org/xml/sax/SAXExceptionENC=  {$java/io/UnsupportedEncodingException"Invalid or ill-formed XMP metadatajava/util/LinkedList |   9File   9 CCrypt 9:  yFilterPipeline XObject.edu/harvard/hul/ois/jhove/module/pdf/PdfObjectSubtypeImage+edu/harvard/hul/ois/jhove/NisoImageMetadataNisoImageMetadata Sapplication/pdfWidth Height  w x  DecodeParmsK 0 ColorSpace  y z 0BitsPerComponent Intent ImageMask  Sjava/lang/Boolean {^Decode InterpolateName    [Fonts exist, but are not displayed; to display remove param value of f from the config filePdfModule.findFonts: Unexpected error in findFonts {Type0 DescendantFontsType1MMType1Type3TrueType CIDFontType0 CIDFontType20x 0 = "Improper nesting of object streams kl |1edu/harvard/hul/ois/jhove/module/pdf/ObjectStream&Invalid object number or object stream  0 Fonts Bad page labels ZPage information is not displayed; to display remove param value of p from the config file SequenceInvalid page label info   AnnotationsaAnnotations exist, but are not displayed; to display remove param value of a from the config fileInvalid Annotation listRotate UserUnit Sjava/lang/Double  {VPBBox Measure Viewport ViewportsThumb PageInvalid page dictionary = =  StInvalid page label sequenceSD C   rA   aLabel!Problem with page label structureRatioXYDistanceAreaContentsRectNMM,edu/harvard/hul/ois/jhove/module/pdf/Literal LastModifiedFFlags  No flags set APAppearanceDictionary5Annotation dictionary missing required type (S) entryGoTo ActionDest Dest DestinationRT ReplyTypeITCL CalloutLine AnnotationInvalid Annotation property0edu/harvard/hul/ois/jhove/module/pdf/Destination {   External = null  Font BaseFont CIDSystemInfo   FontSubset FirstCharLastCharFontBBoxFontDescriptor Encoding   Resources ToUnicodeCMapDictionaryCIDSystemInfosRegistryOrdering SupplementEncodingDictionary BaseEncoding DifferencesFontName  FontFile FontFile2 FontFile3 HideToolbar HideMenubar HideWindowUI FitWindow CenterWindowDisplayDocTitleNonFullScreenPageMode DirectionL2RViewAreaCropBoxViewClip PrintAreaPageClip B e8java/util/HashSet noMalformed outline dictionaryFirst Next&Outlines contain recursive references.Invalid outline dictionary itemItemParentCountChildren " ^Outlines exist, but are not displayed; to display remove param value of o from the config file  UserAccessNo permissions  SImproperly formed datePDFPortable Document Format LZWDecodeRunLengthDecode DCTDecodeCCITTFaxDecodeLab DeviceRGB DeviceCMYK DeviceGrayIndexed*edu/harvard/hul/ois/jhove/module/PdfModule$edu/harvard/hul/ois/jhove/ModuleBase.edu/harvard/hul/ois/jhove/module/pdf/Tokenizerjava/util/Listjava/io/RandomAccessFile!edu/harvard/hul/ois/jhove/RepInfojava/util/ListIterator*edu/harvard/hul/ois/jhove/module/pdf/Token[Cjava/util/Vector&edu/harvard/hul/ois/jhove/PropertyType"javax/xml/parsers/SAXParserFactoryorg/xml/sax/XMLReader/edu/harvard/hul/ois/jhove/module/pdf/PageObject+edu/harvard/hul/ois/jhove/module/pdf/Filterjava/util/Iterator.[Ledu/harvard/hul/ois/jhove/module/pdf/Filter;,edu/harvard/hul/ois/jhove/module/pdf/DocNode[Djava/util/Date(Ljava/lang/String;Ljava/lang/String;[I[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Z)V#edu/harvard/hul/ois/jhove/AgentType EDUCATIONAL%Ledu/harvard/hul/ois/jhove/AgentType;:(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/AgentType;)V setAddress setTelephonesetEmail_vendor!Ledu/harvard/hul/ois/jhove/Agent;&edu/harvard/hul/ois/jhove/DocumentTypeBOOK(Ledu/harvard/hul/ois/jhove/DocumentType;=(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/DocumentType;)V COMMERCIALsetFaxsetWeb setPublisher$(Ledu/harvard/hul/ois/jhove/Agent;)VsetDate setEdition(edu/harvard/hul/ois/jhove/IdentifierTypeISBN*Ledu/harvard/hul/ois/jhove/IdentifierType;?(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/IdentifierType;)V setIdentifier)(Ledu/harvard/hul/ois/jhove/Identifier;)VURL_specificationadd(Ljava/lang/Object;)ZSTANDARD _signature'edu/harvard/hul/ois/jhove/SignatureType EXTENSION)Ledu/harvard/hul/ois/jhove/SignatureType;*edu/harvard/hul/ois/jhove/SignatureUseTypeOPTIONAL,Ledu/harvard/hul/ois/jhove/SignatureUseType;j(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/SignatureType;Ledu/harvard/hul/ois/jhove/SignatureUseType;)VMAGIC MANDATORYk(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/SignatureType;Ledu/harvard/hul/ois/jhove/SignatureUseType;I)VRFC(I)V/(Ledu/harvard/hul/ois/jhove/module/PdfModule;)VsetTaggedProfile7(Ledu/harvard/hul/ois/jhove/module/pdf/TaggedProfile;)V setAProfile2(Ledu/harvard/hul/ois/jhove/module/pdf/AProfile;)V setX1Profile3(Ledu/harvard/hul/ois/jhove/module/pdf/X1Profile;)V toLowerCase()Ljava/lang/String;indexOf(I)Ilength()IcharAt(I)Cjava/lang/CharacterisDigit(C)Zappend(C)Ljava/lang/StringBuffer;toStringparseInt(Ljava/lang/String;)I_format setFormat _mimeType setMimeType setModule%(Ledu/harvard/hul/ois/jhove/Module;)V(Ljava/io/RandomAccessFile;)V3(Ledu/harvard/hul/ois/jhove/module/pdf/Tokenizer;)V setObjectMap(Ljava/util/Map;)VPROPERTY(Ledu/harvard/hul/ois/jhove/PropertyType;'edu/harvard/hul/ois/jhove/PropertyArityLIST)Ledu/harvard/hul/ois/jhove/PropertyArity;x(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ledu/harvard/hul/ois/jhove/PropertyArity;Ljava/lang/Object;)V()J getOffset(Ljava/lang/String;J)V setMessage&(Ledu/harvard/hul/ois/jhove/Message;)V setWellFormed(Z)V_je%Ledu/harvard/hul/ois/jhove/JhoveBase;#edu/harvard/hul/ois/jhove/JhoveBasegetChecksumFlag getChecksumsizecalcRAChecksumD(Ledu/harvard/hul/ois/jhove/Checksummer;Ljava/io/RandomAccessFile;)V setChecksumsM(Ledu/harvard/hul/ois/jhove/Checksummer;Ledu/harvard/hul/ois/jhove/RepInfo;)V setVersionINTEGERO(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ljava/lang/Object;)VisEmpty _verbosity-(Ljava/lang/String;)Ljava/lang/StringBuilder;(I)Ljava/lang/StringBuilder;'(Ljava/lang/String;Ljava/lang/String;)V setProperty'(Ledu/harvard/hul/ois/jhove/Property;)VgetPDFACompliant listIterator()Ljava/util/ListIterator; getWellFormedhasNextnext()Ljava/lang/Object;satisfiesProfileJ(Ljava/io/RandomAccessFile;Ledu/harvard/hul/ois/jhove/module/pdf/Parser;)ZgetText setProfilegetNext/(J)Ledu/harvard/hul/ois/jhove/module/pdf/Token;getValue substring(II)Ljava/lang/String;_name setSigMatch(I)Ljava/lang/String;.()Ledu/harvard/hul/ois/jhove/module/pdf/Token; toCharArray()[Cseek(J)V resetLoosescanModeequals getLongValueQ(Ljava/lang/Class;Ljava/lang/String;)Ledu/harvard/hul/ois/jhove/module/pdf/Token;getIntegerValue readObjectDef`(Ledu/harvard/hul/ois/jhove/module/pdf/Numeric;)Ledu/harvard/hul/ois/jhove/module/pdf/PdfObject;getDictgetD(Ljava/lang/String;)Ledu/harvard/hul/ois/jhove/module/pdf/PdfObject;readDictionarygetToken setEncrypted getContent()Ljava/util/Vector;(I)Ljava/lang/Object; getRawBytesSTRINGARRAY_loggerLjava/util/logging/Logger;java/util/logging/Loggerwarning disparage getMessage2()Ledu/harvard/hul/ois/jhove/module/pdf/PdfObject; getObjNumber3(Ledu/harvard/hul/ois/jhove/module/pdf/PdfStream;)VisValidinitRead getNumObjects getPrevXrefreadNextObject getObjNumisObjCompressedgetContentStreamObjNumgetContentStreamIndex getFreeCount getWSStringsetValidprintStackTracegetStringValue parseDouble(Ljava/lang/String;)D(Ledu/harvard/hul/ois/jhove/module/PdfModule;Ledu/harvard/hul/ois/jhove/module/pdf/NameTreeNode;Ledu/harvard/hul/ois/jhove/module/pdf/PdfDictionary;)VgetShowRawFlag/edu/harvard/hul/ois/jhove/module/pdf/PdfStrings ALGORITHM getIntValueUSERPERMFLAGS2USERPERMFLAGS3java/lang/ObjectgetClass()Ljava/lang/Class;java/lang/ClassgetName(Ledu/harvard/hul/ois/jhove/module/PdfModule;Ledu/harvard/hul/ois/jhove/module/pdf/PageTreeNode;Ledu/harvard/hul/ois/jhove/module/pdf/PdfDictionary;)V buildSubtree(ZI)V(Ledu/harvard/hul/ois/jhove/module/PdfModule;Ledu/harvard/hul/ois/jhove/module/pdf/PageLabelNode;Ledu/harvard/hul/ois/jhove/module/pdf/PdfDictionary;)V newInstance&()Ljavax/xml/parsers/SAXParserFactory;setNamespaceAware newSAXParser()Ljavax/xml/parsers/SAXParser;javax/xml/parsers/SAXParser getXMLReader()Lorg/xml/sax/XMLReader;M(Ledu/harvard/hul/ois/jhove/module/pdf/PdfStream;Ljava/io/RandomAccessFile;)VsetContentHandler(Lorg/xml/sax/ContentHandler;)VsetErrorHandler(Lorg/xml/sax/ErrorHandler;)V(Lorg/xml/sax/InputSource;)V makeProperty&()Ledu/harvard/hul/ois/jhove/Property; startsWith_(Ledu/harvard/hul/ois/jhove/module/pdf/PdfStream;Ljava/io/RandomAccessFile;Ljava/lang/String;)V startWalknextPageObject3()Ledu/harvard/hul/ois/jhove/module/pdf/PageObject;getContentStreamsgetFileSpecification getFilters0()[Ledu/harvard/hul/ois/jhove/module/pdf/Filter; getFilterName,(Ljava/lang/String;)Ljava/lang/StringBuffer; getNameParamiterator()Ljava/util/Iterator; getResourcesNISOIMAGEMETADATA setImageWidthsetImageLengthsetCompressionScheme elementAt setColorSpacesetBitsPerSample([I)VisTrueBOOLEAN nextDocNode0()Ledu/harvard/hul/ois/jhove/module/pdf/DocNode;getFontResources((Ljava/lang/String;Ljava/lang/String;J)V java/util/Mapput8(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; toHexStringintValue readIndex3(I)Ledu/harvard/hul/ois/jhove/module/pdf/PdfObject; setObjNumberfindNextKeyValuegetAnnotations1()Ledu/harvard/hul/ois/jhove/module/pdf/PdfArray;E(Ljava/lang/String;Z)Ledu/harvard/hul/ois/jhove/module/pdf/PdfObject;DOUBLEgetDoubleValue()D(D)VTRUELjava/lang/Boolean; getPrevKey getCurrentKey getPrevValue(I)Ljava/lang/StringBuffer; intToRoman(IZ)Ljava/lang/String; intToBase26ANNOTATIONFLAGS`(Ledu/harvard/hul/ois/jhove/module/pdf/PdfObject;Ledu/harvard/hul/ois/jhove/module/PdfModule;Z)V isIndirectgetIndirectDest8()Ledu/harvard/hul/ois/jhove/module/pdf/PdfSimpleObject;getPageDestObjNumber&(Ljava/lang/Object;)Ljava/lang/Object;values()Ljava/util/Collection;java/util/Collection FONTDESCFLAGS toRectangle()[D isUpperCase java/util/SetcontainsD(Ljava/util/Vector;)Ledu/harvard/hul/ois/jhove/module/pdf/PdfObject; parseDate()Ljava/util/Date;!_        !"#$%&'&()*)+),-&./01234567898:;<;=;>;?;@;A;B2C2D2E2F2G2H2I2JKLKMKNKOPQPRSTPUVWXYXZP[P\P]P^P_8`8a8b8c8d8e8f8g8h8i8j;klmnopqr.st[uTvwxyzB{|} {*    * YL+++*+YMYL++ +!"+#$,+%,&',(),*Y+,-.,*Y/0-.*1,2WY3M,+%,4',5),*Y60-.*1,2WY7M,+%,8',9),*Y:0-.*1,2WY;<MY=>N-?-@-A"-B-C$,-%,D',*YEF-.*1,2WYG<M,-%,H',*YIF-.*1,2WYJ<M,-%,K',*YLF-.*1,2WYM<M,-%,N',*YOF-.*1,2W*PQYRSTU2W*PVYWXYZ2WY[\M,-%,]',*Y^F-.,*Y_0-.*1,2W*`Yab*bcY*d2WeY*f:*b2WgY*h:*b2WijY*k:*b2WlmY*n:*b2WoY*p:*b2Wq*brY*s2W*btY*u2W*v*w*x*y** z~|})*v*w*x*y** z}++{L+a|*v+f|*w+o|*x+p|*y+n|V+n|=}Y~N`6+ +6-W-6 *z:  %B}C *,*2,*2,**Y*+Y*N*Y-**`Y a:*Y***,*,*6* g*,*,*Y`*7**,Y*,**6*,*,*,*,*,*,*,*,*,*,:*0*&,Y:*+*,,*¶YIJŻY*Ƿȷɹ2WYʲŻY*˷ȷɹ2WY̲ŻY*ȷɹ2W*Yβ*ͷ2W*Yв*Ϸ2W*YҲ*ѷ2W**ӹ2W***ԹYֲ*Է2W***׹Yز*׷2W***ٹYڲ*ٷ2W*w * ***z&,Y߻Y*ݶ**2W*,*,,****b:,5+:** ,ѱu# %  @!!----.}*}*}*}*}*|} ************************* * *** ** * ******************ݱ} MN6*M*M ::,v,g,N- 6*-!+*"#D-$ 2- 6 "6*-`%*+*"# *a++Y& *'M,:(:66   4 * :*%(%- OOD18  B}jMN*e7  7*):*+*,*-**'M:,2,,N-. **-e e-*,*- ++Y/***-e0***-2e):**'M:,E,4,45N-67*'M:,,8*,89* ++Y:*$'*DLO**"%.KJ.,QJc$}N:;:**)*':4E**8?:@:*ABC*DYE*F7*'YN=-4-45:G7*'N-H*0e7 ++YI***J ** KB:  F & L LMN-8*-89* DYN*F* OB:  e* 0 L( LMN-8*-8=**Ǽ *ǜDYP*F*Q*DYR*F** ABC*DYS*F** TBC**U**UV* ҶB:   CDYW*F* C* XB:  Y:  Z[:  Z:  \:] DY ^_L: M`abS_L: M`abS*YXcd ӧ: DY ^DY *F* eB:  *fgh(:+i+Yj*D;> |*+|*,|*y|*hSE"J= )\ 7MR  B$}(* *+k*+l }C** 6**)*m?M,n>oY,p:q*rs6** *t uYv*w**P*xyUz6{**P* Y|OY}OS*/ *~P*Y`˧!:++Y*M,+i+Y,j*,D< *= *2 7' =PB } RMN**)*'M,4*'YM6,8,8=6**'8=6**8-<897*'W***4-\W1*<166B$}H**`Y a******Ķ***ƶ***Ƕ***ȶ***ɶ***ʶ***˶***Ͷ***ζŧOM,+i+Y,j*,DM++YY϶,жѶҶ* `*}* DYӷ^** M,uYԷ,N*Y*-ֵ*dקEM,+i+Y,j*,DM+Y,ж*+JM*Jn` }r* *Y** ٵ*ڧQM,+i+Y,j*,DM++YY϶,жѶҶ"*C B`,} ** ۶B?N-:޶:Y-*:Y:*V::  H = %: Y-* :*: DY^AN-+i+Y-j*-DN+Y*+Vhk**hRE  B`}*Y***M,Y,N-M-:;?:: Yc:*2W.M++YY϶,жѶҶ >B*}*Y***M,@,N-4-:"?::*Wڧ$M,+i+Y,j*,Dgj*(B }% +>}Y~:6`+2::W7*:YWd  W:6*׹:,:[:  7 6% Yc:*2W)  L/&}k&*Y**M,,N-*-B:::*:? ?@:[BL:7@`Y a: Y :  Y :  Y   ɹ2W  BL:   BL:   ?:*?:*6VB:=:BL:6 6 6  Ycɹ2W  B:x:LL:'ZZ\:L::7*6   Ycɹ2WBL:  YO BL: Y cɹ2W!BL:("6 Y!#$Y%ɹ2W&BZ:f\:`Y]a:':&L:Yȹ2W Y&Ų2W(BL:("6 Y(#$Y%ɹ2W)BL: Y)cɹ2W*XBL:$*: YXcɹ2W* 2Wt=MM,+i+Y,j*.M++YY϶,жѶҶ*#$. &#!!+6-,6+6 B^*}>"6,,2+7-. }p**Y*Y*Y*Y*Y*Y*Y**+M,kN,,N-]-:M:*:*-W*%*w*+Y.*^M,+i+Y,j*M*fY/,h++Y0,*1M*M$ TPB\=} j*Y`Z*zM+BLN-M2,7i*Y+3+4W+5B:*Z:\:':$:*:*-Wا6,7*Y+3+4W7,7*Y+3+4W8,7*Y+3+4Wi9,7*Y+3+4WF:,7*Y+3+4W#;,7*Y+3+4W,NfgO S*""""" }iD}Y<=L*=>+*>: +?W+W+ }tN}Y<=L*]=>5*ƶ@6>: +?W+W+) }.+C+CA=*B+*}6 uYC*/7  *2.6:**D:E[FS**dB:?<GY?*H:EF*D*uYIJ:uYI*)*m:K'J2D  *}*}* }* }* }*}mQN+05:?DI******* ,}eY`YaL+*2W+*2W+*2W+*2W+*2W+*2W+*2W+}*}iYMN*)*L*2*MN,-2W:*)*L*6*MN,-2W:*)*L*9*MN,-2W:*)*L*8*MN,-2W:*)*L*7*MN,-2W:***L*:*MN,-2W:***L*;*MN,-2W:,+YN,2W25J_bw,BE85jjjjkk }\*Y*YO*>* *PuYQ*PW*:)*YR3ȻY`ȹ4W**:*,S:*2W*y *%Y*:+2W*,YT* N-,i,Y-j**% >%!B} `Ya: :*+U: 2W .`"YVŻY`ȷɹ2W::uYWY:+X:\:6]+*: * -Y2WM*v *$YZ:2W*-Y[*::uY\+]^L:,$Y]ŻYȷɹ2W+_^L:$Y_`aYbcɹ2W+d^Z:\:': `Y]a:  * :  eB: `Yf:  ** Zeg2W hB: *i2W Yj 2W{Yk 2W+l^:Yl#mɹ2WYn:uYo VY* V^k*k$(tBD  1 BD :2- j &*} [**p6*q6*PW6**r:}Y~:BL:WsBL:  d `6 d`6  DYt^- OuBL:  :  : v 7 wWh 7 xWNy 7 xW4z 7 {W| 7 {WY}cɰ:uY~MNF #5 t*}X`YfM+BN-L,Yc-Lɹ2W+BN-L,Yc-Lɹ2W+BN-ZW-Z\:]:6]L:bR,Y`d2W+BN-ZW-Z\:]:6]L:bR,Y`d2W+vBN-ZW-Z\:]:6]L:bR,Y`d2W+zBN-ZW-Z\:]:6]L:bR,Y`d2WYh,L2)#%#%#%#%}p »`YaN+BL:-YcLɹ2W+BL:,-Yc*U  Lɹ2W+B:-**Zg2W+B:-Y)cLɹ2W+B:-LM:Yc:-2W+B:,L6*: -2W+B:-Y#mɹ2W+zB:[**:uBL:uY7 vB:*-,+B:*-,+B:L#L:-Ycɹ2W+B:L#L:-Y cɹ2W+B:ZeZ\:':`Ya:&L:aYbc2W-Y`2WY-::uY u [DDDDI76$:*00,,D*}һY+*:Q*U*6-Y,cɹ2W-Y,ŻYȷɹ2W:6*Yȹ:-Y,ɹ2W8:-Y,cɹ2WY*D6B4*} gY:,:9:*:Y:2WûY+ ?} YN \+)B::L L:CCL:$:Y)c:-2W:\+B::L L:CCL:$:Yc:-2W 5+B:*::*:-2W '*Y#m:-2W +B:C C:L6YŻYȷ:-2W:+B:C C:L6YŻYȷ:-2W:,+B:Z-*Zg2W: 5+B:*::*:-2W+B:*:: +L#YcL:-2W $*:-2W$?*?:-2W,+B:Y#m:-2W ,+B:Y#m:-2W-vCKNu}%%%% #mm(B' %-(} +@M`YaNY-:,B:Y::*:2WFZ>Z\: 6   ]'  :*:  2W է:  Y:-2W30W -B&} ߻`YaMY,N+B:L9L:Yc*U :,2W:+B:L,L:Yc:,2W:+B:L3L6YŻYȷ:,2W:-,]`sM66667>}`YaMY,N+¶B:L,L:Y²c:,2W+öB:Yò#$Y%:,2W-eU^^hh^^hh} [`YaMY,N+ĶBL::YIJc:,2W:+BL:6*: ,2W:+BZ::? :61OYŲd:,2W:+ǶB:YDz#m:,2W+ȶB:YȲ#m:,2W+ɶB:Yɲ#m:,2W-ILNx L1 tB(((}~`Y a:Y:+ʶBN-L-L"66Yʲ#$Y%M,2W+˶BN-L-L"66Y˲#$Y%M,2W+̶BN-L-L"66Y̲#$Y%M,2W+ͶBN-L-L"66YͲ#$Y%M,2W+ζBN-L-L"66Yβ#$Y%M,2W+϶BN-L-L"66Yϲ#$Y%M,2W+жBN-L-L::YвcM,2W+ѶBN-L-L::YѲcM,2W+ӶBN-L-L::YӲcM,2W+նBN-L-L::YղcM,2W+ֶBN-L-L::YֲcM,2W+׶BN-L-L::YײcM,2W:::::::33333}^=+ +=+>ؚ++ @}; **Y۵NY:Y:*+޶B:6{Y߷:*,:  2W*B:>@ *ٚ*,Y*٧Ф::uY-1*19 AA) BD *}vN`Ya:Y:*+ĶBL: DY-^YIJc*U ɹ2W+B DY-^+B:"LLM8 DY-^+KBC:+BC:+޶BC:+޶BC:+zB*+B:  w* : Y *:   Yc ɹ2W= 6 *Y ȹ:  Y ɹ2W*+޶B:  ޻Y: Y : 6  Y 3:* *ٚ8,Y*٧"*W* ,: 2W* B:  > 3@ *ٚ*,Y*٧  ФR 2W::DY-^:DY-^Z[*Z`Zk@BBBB#>G94=)  DJ*}r*l**+M*x *,+*,2W*+Y*$M+Y,j*,+i,DLO* B }F)*#Y*+*M,, "*  } *,  }wS:+-B:LCLM:1*U : :,Ycɹ2W3   }]*U+-B:LHLM:6:,Yɹ2WDY FG *}*!*Y,ŻYȷɰY:6-(x~-2-22W 2W:Y,c.vy% %B}T3 N+:6-1OY,Ųd- t*|} YOYOYO[YSYS[Y S [YSYSYSYS YOYOYOYO[YSYSYSYSYS YOYOYOYOYOjhove/classes/edu/harvard/hul/ois/jhove/module/TiffModule.class0000644000707400001440000006530311510702104023765 0ustar garyusers2/0 1 23 4567 89 :;< => ?@ AB CD E FGH IJ KL =MNOP QR S TU VW XYZ [\ )] ^ _ `abcde fghi Ijk =lmnopqrs [tuvwxy =z{|}~ I [ [ =              `                                   `  `        `           `     b! " b # $ f % & ' d ` d( ) * + ,  -./ 01 23  4 56  7 8 9 : ;<  => ? @ A B C D E F  G "H $I &J (K *L ,M .N 0O 2P 4Q 6R 8S :T <U >V @W BX DY FZ H[ J\ L] N^ P_ R` Ta Vb Xc Zd \e ^f `g bh di f j kl m no pq r s t u v wxy z {|}~                                              NAMELjava/lang/String; ConstantValueRELEASEDATE[IFORMAT[Ljava/lang/String;COVERAGEMIMETYPE WELLFORMEDVALIDITYREPINFONOTERIGHTS_profileLjava/util/List;_exifMainProfile7Ledu/harvard/hul/ois/jhove/module/tiff/TiffProfileExif;_exifThumbnailProfile()VCodeparse@(Ljava/io/RandomAccessFile;Ledu/harvard/hul/ois/jhove/RepInfo;)V StackMapTable.. ExceptionssetByteOffsetValid(Z)V exifParseO(Ljava/io/RandomAccessFile;Ledu/harvard/hul/ois/jhove/RepInfo;)Ljava/util/List;buildProfileList checkValidity6(Ljava/util/List;Ledu/harvard/hul/ois/jhove/RepInfo;)VU(Ledu/harvard/hul/ois/jhove/module/tiff/TiffIFD;Ledu/harvard/hul/ois/jhove/RepInfo;)V reportInvalid8(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/RepInfo;)V parseIFDs6(JLedu/harvard/hul/ois/jhove/RepInfo;)Ljava/util/List;8(JLedu/harvard/hul/ois/jhove/RepInfo;ZI)Ljava/util/List; parseIFDChainc(JLedu/harvard/hul/ois/jhove/RepInfo;ILjava/util/List;Z)Ledu/harvard/hul/ois/jhove/module/tiff/IFD; initParseselectMimeTypeIndex()ITIFF-hul1.5  $TIFF 4.0, 5.0, and 6.0; TIFF/IT (ISO/DIS 12639:2003), including file types CT, LW, HC, MP, BP, BL, and FP, and conformance levels P1 and P2; TIFF/EP (ISO 12234-2:2001); Exif 2.0, 2.1 (JEIDA-49-1998), and 2.2 (JEITA CP-3451); Baseline GeoTIFF 1.0; Baseline 6.0 bilevel (known in TIFF 5.0 as Class B), grayscale (Class G), palette-color (Class P), and RGB (Class R); 6.0 extension YCbCr (Class Y); DLF Benchmark for Faithful Digital Reproductions of Monographs and Serials; TIFF-FX (RFC 2301), Class F (RFC 2306); RFC 1314; and DNG (Digital Negative) A TIFF file is well-formed if it has a big-endian or little-endian header; at least one IFD; all IFDs are 16-bit word aligned; all IFDs have at least one entry; all IFD entries are sorted in ascending order by tag number; all IFD entries specify the correct type and count; all value offsets are 16-bit word aligned; all value offsets reference locations within the file; and the final IFD is followed by an offset of 0,A TIFF file is valid if well-formed; ImageLength, ImageWidth, and PhotometricInterpretation tags are defined; strip or tile tags are defined; tag values are self-consistent (see JHOVE documentation); TileWidth and TileLength values are integral multiples of 16; and DateTime tag is properly formatted{Additional representation information includes: NISO Z39.87 Digital Still Image Technical Metadata and all other tag values Copyright 2003-2007 by JSTOR and the President and Fellows of Harvard College. Released under the GNU Lesser General Public License. edu/harvard/hul/ois/jhove/AgentHarvard University Library  FOffice for Information Systems, 90 Mt. Auburn St., Cambridge, MA 02138 +1 (617) 495-3724 !jhove-support@hulmail.harvard.edu  "edu/harvard/hul/ois/jhove/DocumentTIFF, Revision 6.0  Adobe Systems, Inc. 0345 Park Avenue, San Jose, California 95110-2704+1 (408) 536-6000+1 (408) 537-6000 http://www.adobe.com/   1992-06-03 Final $edu/harvard/hul/ois/jhove/Identifier9http://partners.adobe.com/asn/tech/tiff/specification.jsp     TIFF, Revision 5.0Aldus Corporation 1988-08-082Aldus was acquired by Adobe Systems, Inc., in 1993 "Tagged Image File Format, Rev. 4.0 1987-04-30kISO 12234-2:2001, Electronic still-picture imaging -- Removable memory -- Part 2: TIFF/EP image data format ISO C1, rue de Varembe, Casa postale 56, CH-1211, Geneva 20, Switzerland+41 22 749 01 11+41 22 733 34 30 iso@iso.chhttp://www.iso.org 2001-10-15ISO 12234-2:2001(E) kISO/DIS 12639:2003, Graphic technology -- Prepress digital data exchange -- Tag image file format for image technology (TIFF/IT) 2003-09-04ISO/DIS 12639:2003(E)FBenchmark for Faithful Digital Reproductions of Monographs and SerialsDigital Library Federation <1755 Massachusetts Ave., NW, Suite 500, Washington, DC 20036+1 (202) 939-4761+1 (202) 939-4765 dlf@clir.orghttp://www.diglib.org/ Version 12002-12,http://www.diglib.org/standards/bmarkfin.htm(Adobe PageMaker TIFF 6.0 Technical Notes 1995-09-14;http://partners.adobe.com/asn/developer/pdfs/tn/TIFFPM6.pdf$Adobe Photoshop TIFF Technical Notes 2002-03-22Ahttp://partners.adobe.com/asn/developer/pdfs/tn/TIFFphotoshop.pdf.Adobe Photoshop 6.0 File Formats Specification2000-11Version 6.0, Release 28TIFF-F Revised Specification: The Spirit of TIFF Class FCygnet Technologies 1990-04-28Cygnet is no longer in business3http://hul.harvard.edu/jhove/references.html#classf7Tag Image File Format (TIFF) -- F Profile for Facsimile IETFhttp://www.ietf.org1998-03RFC 2306 4http://hul.harvard.edu/jhove/references.html#rfc23068A File Format for the Exchange of Images in the Internet1992-04RFC 1314#http://www.ietf.org/rfc/rfc1314.txtJExchangeable image file format for digital still cameras: Exif Version 2.2CJapan Electronics and Information Technology Industries Associationhttp://www.jeita.or.jp/dMitsui Sumitomo Kaijo Building Annex, 11, Kanda Surugadai 3-chome, Chiyoda-ku, Tokyo 101-0062, Japan+81(03) 3518-6421+81(03) 3295-87212002-04 JEITA CP-3451 http://www.exif.org/Exif2-2.PDFnDigital Still Camera Image File Format Standard (Exchangeable image file format for Digital Still Camera:Exif)1998-12JEITA JEIDA-49-1998 http://www.exif.org/dcf-exif.PDF2GeoTIFF Format Specification: GeoTIFF Revision 1.0 Niles Ritter   Mike RuthGeoTIFF Working Group Version 1.8.1 1995-10-316http://remotesensing.org/geotiff/spec/geotiffhome.htmlFile Format for Internet FaxRFC 2301#http://www.ietf.org/rfc/rfc2301.txt+edu/harvard/hul/ois/jhove/InternalSignature  ,Little-endian (least significant byte first)  (Big-endian (most significant byte first)+edu/harvard/hul/ois/jhove/ExternalSignatureTIFF      .tif  .tfx For TIFF-FX  TFX      java/lang/String byteoffset=true   *     "edu/harvard/hul/ois/jhove/Property   !3edu/harvard/hul/ois/jhove/module/tiff/TiffExceptionjava/lang/StringBuilder No TIFF header: "# "$ % & ' ByteOrder () big-endian little-endian * +,No TIFF magic number: "- . /  %& %0.0 1java/util/LinkedListIFDs 2)3 45 6Number 7)java/lang/Integer 8, 9 :;)edu/harvard/hul/ois/jhove/module/tiff/IFD <=> ? @A BC D E&edu/harvard/hul/ois/jhove/ErrorMessage  FG 1edu/harvard/hul/ois/jhove/module/tiff/TiffProfile H IJ K L M   -edu/harvard/hul/ois/jhove/module/tiff/TiffIFD NO P, Q9 R      TIFFMetadata S5 TU V WX Yjava/io/IOExceptionFile is too shortZ [\] ^ _ `C%edu/harvard/hul/ois/jhove/Checksummer ab cd +,  %'%edu/harvard/hul/ois/jhove/InfoMessage Embedded Exif block is too shortjava/util/ArrayList7edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassB7edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassG7edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassP7edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassR7edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassY:edu/harvard/hul/ois/jhove/module/tiff/TiffProfileClassITBL= 1, equalsCFor PhotometricInterpretation, SamplesPerPixel must be >= 3, equals vu wu xu yu&ColorMap not defined for palette-color-For palette-color SamplesPerPixel must be 1: 0Insufficient ColorMap values for palette-color: z, {,5CellLength tag not permitted when Threshholding not 2 |u0DotRange out of range specified by BitsPerSample },)JPEGProc not defined for JPEG compression ~u)SamplesPerPixel-ExtraSamples not 1 or 3: -(BitsPerSample not 8 or 16 for CIE L*a*b* u X'XClipPathUnits not defined for ClipPath  q,Invalid DateTime length: Invalid DateTime separator:   0Invalid DateTime digit: java/lang/Exception  Premature EOFNo IFD in fileIFD offset not word-aligned: () X-edu/harvard/hul/ois/jhove/module/tiff/ExifIFD 9edu/harvard/hul/ois/jhove/module/tiff/InteroperabilityIFD0edu/harvard/hul/ois/jhove/module/tiff/GPSInfoIFD9edu/harvard/hul/ois/jhove/module/tiff/GlobalParametersIFD  ,   i X  X  X  X   ,Tagged Image File Format image/tiff image/tiff-fx image/ief+edu/harvard/hul/ois/jhove/module/TiffModule$edu/harvard/hul/ois/jhove/ModuleBasejava/util/Iteratorjava/io/RandomAccessFile!edu/harvard/hul/ois/jhove/RepInfo%[Ledu/harvard/hul/ois/jhove/Property;java/util/List&edu/harvard/hul/ois/jhove/PropertyTypejava/util/ListIterator+edu/harvard/hul/ois/jhove/NisoImageMetadata[J(Ljava/lang/String;Ljava/lang/String;[I[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Z)V#edu/harvard/hul/ois/jhove/AgentType EDUCATIONAL%Ledu/harvard/hul/ois/jhove/AgentType;:(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/AgentType;)V setAddress(Ljava/lang/String;)V setTelephonesetEmail_vendor!Ledu/harvard/hul/ois/jhove/Agent;&edu/harvard/hul/ois/jhove/DocumentTypeREPORT(Ledu/harvard/hul/ois/jhove/DocumentType;=(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/DocumentType;)V COMMERCIALsetFaxsetWeb setPublisher$(Ledu/harvard/hul/ois/jhove/Agent;)VsetDate setEdition(edu/harvard/hul/ois/jhove/IdentifierTypeURL*Ledu/harvard/hul/ois/jhove/IdentifierType;?(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/IdentifierType;)V setIdentifier)(Ledu/harvard/hul/ois/jhove/Identifier;)V_specificationadd(Ljava/lang/Object;)ZsetNoteSTANDARD NONPROFITRFCJEITAOTHER setAuthor'edu/harvard/hul/ois/jhove/SignatureTypeMAGIC)Ledu/harvard/hul/ois/jhove/SignatureType;*edu/harvard/hul/ois/jhove/SignatureUseTypeMANDATORY_IF_APPLICABLE,Ledu/harvard/hul/ois/jhove/SignatureUseType;m([ILedu/harvard/hul/ois/jhove/SignatureType;Ledu/harvard/hul/ois/jhove/SignatureUseType;ILjava/lang/String;)V _signatureFILETYPEOPTIONALj(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/SignatureType;Ledu/harvard/hul/ois/jhove/SignatureUseType;)V EXTENSION|(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/SignatureType;Ledu/harvard/hul/ois/jhove/SignatureUseType;Ljava/lang/String;)V_defaultParamsiterator()Ljava/util/Iterator;hasNext()Znext()Ljava/lang/Object; toLowerCase()Ljava/lang/String;equals setModule%(Ledu/harvard/hul/ois/jhove/Module;)V _mimeType setMimeType_format setFormatseek(J)VreadByte()Bappend-(Ljava/lang/String;)Ljava/lang/StringBuilder;(C)Ljava/lang/StringBuilder;toString(Ljava/lang/String;J)V _bigEndianSTRING(Ledu/harvard/hul/ois/jhove/PropertyType;O(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ljava/lang/Object;)VreadUnsignedShort(Ljava/io/RandomAccessFile;Z)I(I)Ljava/lang/StringBuilder;_name setSigMatch(I)Ljava/lang/String; setVersionPROPERTY'edu/harvard/hul/ois/jhove/PropertyArityLIST)Ledu/harvard/hul/ois/jhove/PropertyArity;x(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ledu/harvard/hul/ois/jhove/PropertyArity;Ljava/lang/Object;)VINTEGERsize(I)V listIterator()Ljava/util/ListIterator;_je%Ledu/harvard/hul/ois/jhove/JhoveBase;#edu/harvard/hul/ois/jhove/JhoveBasegetShowRawFlag getProperty'(Z)Ledu/harvard/hul/ois/jhove/Property; getErrors()Ljava/util/List;isEmptysetValid setMessage&(Ledu/harvard/hul/ois/jhove/Message;)V isAlreadyOKsatisfiesProfile.(Ledu/harvard/hul/ois/jhove/module/tiff/IFD;)ZgetText setProfileisFirstgetNisoImageMetadata/()Ledu/harvard/hul/ois/jhove/NisoImageMetadata;getCompressionSchemesetMainCompression isThumbnailARRAY setProperty'(Ledu/harvard/hul/ois/jhove/Property;)V getMessage getOffset()J setWellFormedjava/lang/ObjectgetClass()Ljava/lang/Class;java/lang/ClassgetNamegetChecksumFlag getChecksumcalcRAChecksumD(Ledu/harvard/hul/ois/jhove/Checksummer;Ljava/io/RandomAccessFile;)V setChecksumsM(Ledu/harvard/hul/ois/jhove/Checksummer;Ledu/harvard/hul/ois/jhove/RepInfo;)V getColorSpace getImageWidthgetImageLengthgetStripOffsets()[JgetStripByteCounts getTileWidth getTileLengthgetTileOffsetsgetTileByteCountsgetPlanarConfigurationgetSamplesPerPixellength(J)Ljava/lang/StringBuilder;getNewSubfileTypegetBitsPerSample()[IgetColormapBitCodeValuegetColormapRedValuegetColormapGreenValuegetColormapBlueValue getCellLengthgetThreshholding getDotRange getJPEGProcgetExtraSamples getClipPathgetXClipPathUnits getDateTimecharAt(I)C substring(II)Ljava/lang/String;parseInt(Ljava/lang/String;)IreadUnsignedInt(Ljava/io/RandomAccessFile;Z)JgetNextB(JLedu/harvard/hul/ois/jhove/RepInfo;Ljava/io/RandomAccessFile;Z)V(ZZ)J getVersionsetFirst setThumbnail getSubIFDs getExifIFD setTheExifIFD2(Ledu/harvard/hul/ois/jhove/module/tiff/ExifIFD;)V getGPSInfoIFDsetTheGPSInfoIFD5(Ledu/harvard/hul/ois/jhove/module/tiff/GPSInfoIFD;)VgetInteroperabilityIFDsetTheInteroperabilityIFD>(Ledu/harvard/hul/ois/jhove/module/tiff/InteroperabilityIFD;)VgetGlobalParametersIFDsetTheGlobalParametersIFD>(Ledu/harvard/hul/ois/jhove/module/tiff/GlobalParametersIFD;)V setAlreadyOK getMimeClass!   *   YL+++*+YM YN-L+++ !+"#,+$,%&,'(,)Y*+,-*.,/WY0M Y1L,+$,2&,34*.,/WY5M Y1L,+$,6&,34*.,/WY78M Y9::;<=!>?#,$,@&)YAB,:,-*.,/WYC8M,$,D&)YEB,:,-*.,/WYFM YGHL+I+J+K!+L+M#,+$,N(,O&)YP+,:,-*.,/WYQM,-$,R&)YS+,:,-*.,/WYTM,-$,U&)YV+,:,-*.,/WYWM,-$,X&,Y(*.,/WYZM Y[L,+$,\&,]4)Y^+,:,-*.,/WY_`M Ya::b#,$,c&)Yde,:,-)Yf+,:,-*.,/WYg`M,$,h&)Yie,:,-)Yj+,:,-*.,/WYk8M Yl::m#nop!,$,q&)Yrs,:,-)Yt+,:,-*.,/WYu8M,$,v&)Yws,:,-)Yx+,:,-*.,/WYyM Yz{L,+| Y}{L,+| Y~{L,+$,(,&)Y+,:,-*.,/WY`M,$,c&)Ye,:,-)Y+,:,-*.,/W YIOYIOY*OYO:Y: * /W YMOYMOYOY*O: Y : * /WY: * /WY: * /WY: * /WY: * /W***6*N-#-:**+*,*,*2,*2N:6+ *6*6I.M'YY 6*M-Y*S**6*"YY,***,:,Y*ĶŶƻY: Yɲʲ :  YͲλYѷ/W:   :   * *ֶקع/W :  3, :,Yݶާ*߹:-: , %** *  **  ** *** - S**,***,*,Yʲ-̶L:,Y,: : :,Yݶ,*0*ֶ&,Y:*+*, ,** 2*, gg P%X#N         6z*  '! 0)\  3* a*+*N6+ *6*6I.M'YY *M**6*"YY6**, N-:S:  :  3, :  ,Y ݶާI:, Y-: : :,Yݶ,-2{:#K  54!BX  *Y*߻Y/W*߻Y/W*߻Y/W*߻Y/W*߻Y/W*߻Y/W*߻Y/W*߻ Y!/W*߻"Y#/W*߻$Y%/W*߻&Y'/W*߻(Y)/W*߻*Y+/W*߻,Y-/W*߻.Y//W*߻0Y1/W*߻2Y3/W*߻4Y5/W*߻6Y7/W*߻8Y9/W*߻:Y;/W*߻Y?/W*߻@YA/W*߻BYC/W*߻DYE/W*߻FYG/W*߻HYI/W*߻JYK/W*߻LYM/W*߻NYO/W*߻PYQ/W*߻RYS/W*߻TYU/W*߻VYW/W*߻XYY/W*߻ZY[/W*߻\Y]/W*߻^Y_/W*`Ya*bYc*dYe*fYgxP+N-B-: *,h:,Y,ۧ-0%Bg+N-i6 *j,k-l7m *o,k-p7m *q,k-r: -s:   6 -t7 -u7-v:-w: mm 6  *x,k  *y,k-z6-{6  *|,k *},k 6 )*Y~ ,k*76* /7 /7a *,kէ: m *,km *,k *,k *,k q *Y ,kq *Y,k a e ma emi7xi73)*Y,k3)*Y,km3)*Y,k3)*Y,k+6 ~~ *,k-: . *,k #*Y,k #*Y,k-:-:-:-:  *,k*Y,k.x6)*Y,k++ *,k+:1,.x6. . *,k-+ *,k  }6-: -6d6.(*Y,k6%.. *,k++m *,k+:Q*Y,k:3:'   ::*Y,k66 6  666I'A; 4.'"; ;*Y,k:*Y,k![^sv=@5 @ 2 'B $$Y444 !1 !!!!!5 !0! !7# !!/ : !!  !! B"#$,Y+ݶ,۱%& *- %' 7***7:Y YY: B  YY*-:  7  ,():w5KaY-**:XY-**:BY-**:,Y-**:Y-**:*X6* * Ƨ /W:  :  66   +  /@ *-:  @  7  m* -:    \7 m* -:    \7 m* -:    \7 m* -:   +$!'  '&&&*Y>**߹L++M,ҧ**** +,vN<*߹M,3,N--6 < &- .QE YOY OYOYSYSYSYSYS jhove/classes/edu/harvard/hul/ois/jhove/module/Utf8Block.class0000644000707400001440000001534711510702104023533 0ustar garyusers2      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrs t@u/vׯwxۀyz{|O}P~ /0OPop?/0OO  P?  hh`O@  unicodeBlock-[Ledu/harvard/hul/ois/jhove/module/Utf8Block;_endI_nameLjava/lang/String;_start(IILjava/lang/String;)VCodegetEnd()IgetName()Ljava/lang/String;getStart()V    *edu/harvard/hul/ois/jhove/module/Utf8Block Basic Latin Latin-1 SupplementLatin Extended-ALatin Extended-BIPA ExtensionsSpacing Modifier LettersCombining Diacritical MarksGreek and CopticCyrillicCyrillic SupplementaryArmenianHebrewArabicSyriacThaanaNKoMandaic DevanagariBengaliGurmukhiGujaratiOriyaTamilTeluguKannada MalayalamSinhalaThaiLaoTibetanMyanmarGeorgian Hangul JamoEthiopicCherokee%Unified Canadian Aboriginal SyllabicsOghamRunicTagalogHanunooBuhidTagbanwaKhmer MongolianLimbuTai Le Khmer SymbolsBalineseBatakPhonetic ExtensionsLatin Extended AdditionalGreek ExtendedGeneral PunctuationSuperscripts and SubscriptsCurrency Symbols'Combining Diacritical Marks for SymbolsLetterlike Symbols Number FormsArrowsMathematical OperatorsMiscellaneous TechnicalControl PicturesOptical Character RecognitionEnclosed Alphanumerics Box DrawingBlock ElementsGeometric ShapesMiscellaneous SymbolsDingbats$Miscellaneous Mathematical Symbols-ASupplemental Arrows-ABraille PatternsSupplemental Arrows-B$Miscellaneous Mathematical Symbols-B#Supplemental Mathematical OperatorsLatin Extended-CCJK Radicals SupplementKangxi Radicals"Ideographic Description CharactersCJK Symbols and PunctuationHiraganaKatakanaBopomofoHangul Compatibility JamoKanbunBopomofo ExtendedKatakana Phonetic ExtensionsEnclosed CJK Letters and MonthsCJK Compatibility"CJK Unified Ideographs Extension AYijing Hexagram SymbolsCJK Unified Ideographs Yi Syllables Yi RadicalsLatin Extended-DPhags-paEthiopic Extended-AHangul SyllablesHigh SurrogatesHigh Private Use SurrogatesLow SurrogatesPrivate Use AreaCJK Compatibility IdeographsAlphabetic Presentation FormsArabic Presentation Forms-AVariation SelectorsCombining Half MarksCJK Compatibility FormsSmall Form VariantsArabic Presentation Forms-BHalfwidth and Fullwidth FormsSpecialsLinear B SyllabaryLinear B IdeogramsAegean Numbers Old ItalicGothicUgariticDeseret PhoenicianShavianOsmanyaCypriot SyllabaryBrahmi CuneiformBamum SupplementKana SupplementByzantine Musical SymbolsMusical SymbolsCounting Rod Numerals!Mathematical Alphanumeric Symbols Playing Cards%Miscellaneous Symbols and Pictographs EmoticonsTransport and Map SymbolsAlchemical Symbols"CJK Unified Ideographs Extension B"CJK Unified Ideographs Extension D'CJK Compatibility Ideographs SupplementTagsVariation Selectors Supplement Supplementary Private Use Area-A Supplementary Private Use Area-B java/lang/Object! ****-  *  *  * R FYYSYYSYY SYYO SYYP SYY SYYo SYYpSYYSY Y/SY Y0SY YSY YSY YOSYYSYYSYY@_SYY  SYY  SYY  SYY  SYY  SYY  SYY  SYY  SYY   SYY  !SYY"SYY#SYY$SYY%SYY&SY Y'SY!Y(SY"Y)SY#Y*SY$Y+SY%Y,SY&Y-SY'Y ?.SY(Y@_/SY)Y`0SY*Y1SY+Y2SY,YO3SY-YP4SY.Y5SY/Y6SY0Y7SY1Y8SY2Y9SY3Y:SY4Y  o;SY5Y p <SY6Y  =SY7Y  >SY8Y!!O?SY9Y!P!@SY:Y!!ASY;Y""BSY<Y##CSY=Y$$?DSY>Y$@$_ESY?Y$`$FSY@Y%%GSYAY%%HSYBY%%ISYCY&&JSYDY''KSYEY''LSYFY''MSYGY((NSYHY))OSYIY))PSYJY**QSYKY,`,RSYLY..SSYMY//TSYNY//USYOY00?VSYPY0@0WSYQY00XSYRY11/YSYSY101ZSYTY11[SYUY11\SYVY11]SYWY22^SYXY33_SYYY4M`SYZYMMaSY[YNbcSY\YdefSY]YghiSY^YjklSY_YmnoSY`YpqrSYaYstuSYbYvwxSYcYyz{SYdY|}~SYeYSYfYSYgYSYhYSYiYSYjYSYkYSYlYSYmYSYnYSYoYSYpYSYqYSYrYSYsYSYtYSYuYSYvYSYwYSYxYSYyYSYzYSY{Y÷SY|YƷSY}YɷSY~Y̷SYYϷSYYҷSYYշSYYطSYY۷SYY޷SYYSYYSYYSYYSYYSYYSYYSYYSYYSYYSjhove/classes/edu/harvard/hul/ois/jhove/module/Utf8Module.class0000644000707400001440000003102711510702104023717 0ustar garyusers2GH I JK LM NO PQ R STU VW XY Z[ \] ^ _`a bc de Vfg hi jk Vlm no pqr st )u v w xyz b{| V}~  s b V s s  x   L L            [  ^       x h j     p     z z z  z x    p     j  h    h  h  x  ^  ^ ^ ^         p y ^     y            p !"#$%&'()*+,-./0123456789:;<=>NAMELjava/lang/String; ConstantValueRELEASEDATE[IFORMAT[Ljava/lang/String;COVERAGEMIMETYPE WELLFORMEDVALIDITYREPINFONOTERIGHTSPOSITIONCRI LF controlCharMnemonics_cstream/Ledu/harvard/hul/ois/jhove/ChecksumInputStream;_dstreamLjava/io/DataInputStream; _lineEndCRZ _lineEndLF _lineEndCRLF _prevChar_controlCharMapLjava/util/Map; initialBytes blockMarker+Ledu/harvard/hul/ois/jhove/Utf8BlockMarker; _withTextMD_textMD*Ledu/harvard/hul/ois/jhove/TextMDMetadata;()VCodeparse<(Ljava/io/InputStream;Ledu/harvard/hul/ois/jhove/RepInfo;I)I StackMapTable?=@A=@B ExceptionsCcheckSignaturesI(Ljava/io/File;Ljava/io/InputStream;Ledu/harvard/hul/ois/jhove/RepInfo;)VDE checkLineEnd(I)V checkMark'(ILedu/harvard/hul/ois/jhove/RepInfo;)ZUTF8-hul1.5   Unicode 6.0.0 An UTF-8 object is well-formed if each character is correctly encoded as a one-to-four byte sequence, as defined in the specifications bAdditional representation information includes: number of characters and Unicode 6.0.0 code blocks  Copyright 2003-2011 by JSTOR and the President and Fellows of Harvard College. Released under the GNU Lesser General Public License. $F !edu/harvard/hul/ois/jhove/AgentHarvard University LibraryG HI $JFOffice for Information Systems, 90 Mt. Auburn St., Cambridge, MA 02138 KL+1 (617) 495-3724 ML!jhove-support@hulmail.harvard.edu NL OP"edu/harvard/hul/ois/jhove/Document!The Unicode Standard, Version 6.0Q RS $TThe Unicode Consortium UI-http://www.unicode.org/versions/Unicode6.0.0/ VLMountain View, California WXAddison-Wesley YIBoston, Massachusetts ZX2011 [L$edu/harvard/hul/ois/jhove/Identifier978-1-936213-01-6\ ]^ $_ `a bcB deInformation technology -- Universal Multiple-Octet Coded Character Set (UCS) -- Part 1: Architecture and Basic Multilingual Plane. Appendix R, Amendment 2 fSISO fIC1, rue de Varembe, Casa postale 56, CH-1211, Geneva 20, Switzerland+41 22 749 01 11+41 22 733 34 30 gL iso@iso.chhttp://www.iso.org/1991ISO/IEC 10646-1 Amendment 2 |^+UTF-8, a transformation format of ISO 10646 hS F. Yergeau iIIETFhttp://www.ietf.org/1998-01RFC 2279 h^#http://www.ietf.org/rfc/rfc2279.txt j^ kc lm? no pqjava/lang/String rswithtextmd=true te u% vA wL x yL z{     java/util/HashMap $% (edu/harvard/hul/ois/jhove/TextMDMetadata "#PAdditional representation information includes the line endings: CR, LF, or CRLF |L }~ E o  %edu/harvard/hul/ois/jhove/Checksummer-edu/harvard/hul/ois/jhove/ChecksumInputStream $    )edu/harvard/hul/ois/jhove/Utf8BlockMarker   CD &edu/harvard/hul/ois/jhove/ErrorMessage&Not valid first byte of UTF-8 encodingjava/lang/StringBuilderValue =   (0x ) s $   Not valid   byte of UTF-8 endcoding Bjava/lang/Integer $B   DEL (0x7F) ABjava/io/EOFException  "edu/harvard/hul/ois/jhove/Checksum s  $  s  s Zero-length file $L BUTF-8 L  B8 Lvariable Ljava/util/ArrayList"edu/harvard/hul/ois/jhove/Property UTF8Metadata   $  Characters java/lang/Long $ $ UnicodeBlocks  BCRLF LineEndings  ojava/util/LinkedList ControlCharactersTextMDMetadata  %edu/harvard/hul/ois/jhove/InfoMessageNo printable characters  java/io/DataInputStream $  L*UTF-8 Byte Order Mark signature is present $ %'UCS-4 little-endian encoding, not UTF-8(UTF-16 little-endian encoding, not UTF-8%UTF-16 big-endian encoding, not UTF-8text/plain; charset=UTF-8secondthirdfourth NUL (0x00) SOH (0x01) STX (0x02) ETX (0x03) EOT (0x04) ENQ (0x05) ACK (0x06) BEL (0x07) BS (0x08) TAB (0x09) LF (0x0A) VT (0x0B) FF (0x0C) CR (0x0D) SO (0x0E) SI (0x0F) DLE (0x10) DC1 (0x11) DC2 (0x12) DC3 (0x13) DC4 (0x14) NAK (0x15) SYN (0x16) ETB (0x17) CAN (0x18) EM (0x19) SUB (0x1A) ESC (0x1B) FS (0x1C) GS (0x1D) RS (0x1E) US (0x1F)+edu/harvard/hul/ois/jhove/module/Utf8Module$edu/harvard/hul/ois/jhove/ModuleBasejava/util/Iteratorjava/io/InputStream!edu/harvard/hul/ois/jhove/RepInfojava/util/Listjava/io/IOException java/io/File#edu/harvard/hul/ois/jhove/JhoveBase(Ljava/lang/String;Ljava/lang/String;[I[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Z)V#edu/harvard/hul/ois/jhove/AgentType EDUCATIONAL%Ledu/harvard/hul/ois/jhove/AgentType;:(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/AgentType;)V setAddress(Ljava/lang/String;)V setTelephonesetEmail_vendor!Ledu/harvard/hul/ois/jhove/Agent;&edu/harvard/hul/ois/jhove/DocumentTypeBOOK(Ledu/harvard/hul/ois/jhove/DocumentType;=(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/DocumentType;)V NONPROFITsetWeb setAuthor$(Ledu/harvard/hul/ois/jhove/Agent;)V COMMERCIAL setPublishersetDate(edu/harvard/hul/ois/jhove/IdentifierTypeISBN*Ledu/harvard/hul/ois/jhove/IdentifierType;?(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/IdentifierType;)V setIdentifier)(Ledu/harvard/hul/ois/jhove/Identifier;)V_specificationLjava/util/List;add(Ljava/lang/Object;)ZSTANDARDsetFaxRFCOTHERURL_defaultParamsiterator()Ljava/util/Iterator;hasNext()Znext()Ljava/lang/Object; toLowerCase()Ljava/lang/String;equals initParse_format setFormat _mimeType setMimeType setModule%(Ledu/harvard/hul/ois/jhove/Module;)VsetNote_nByteJ_je%Ledu/harvard/hul/ois/jhove/JhoveBase;getChecksumFlag getChecksum()Ljava/util/List;size()I?(Ljava/io/InputStream;Ledu/harvard/hul/ois/jhove/Checksummer;)V getBufferSizegetBufferedDataStream1(Ljava/io/InputStream;I)Ljava/io/DataInputStream;readUnsignedByteB(Ljava/io/DataInputStream;Ledu/harvard/hul/ois/jhove/ModuleBase;)I getWellFormedappend-(Ljava/lang/String;)Ljava/lang/StringBuilder;(C)Ljava/lang/StringBuilder; toHexString(I)Ljava/lang/String;toString((Ljava/lang/String;Ljava/lang/String;J)V setMessage&(Ledu/harvard/hul/ois/jhove/Message;)V setWellFormed(Z)V markBlock java/util/Mapput8(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; getNBytes()JsetSize(J)VgetCRC32&edu/harvard/hul/ois/jhove/ChecksumTypeCRC32(Ledu/harvard/hul/ois/jhove/ChecksumType;=(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/ChecksumType;)V setChecksum'(Ledu/harvard/hul/ois/jhove/Checksum;)VgetMD5MD5getSHA1SHA1 setCharset _bigEndian setByte_order setByte_sizesetCharacter_size&edu/harvard/hul/ois/jhove/PropertyTypePROPERTY(Ledu/harvard/hul/ois/jhove/PropertyType;'edu/harvard/hul/ois/jhove/PropertyArityLIST)Ledu/harvard/hul/ois/jhove/PropertyArity;x(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ledu/harvard/hul/ois/jhove/PropertyArity;Ljava/lang/Object;)V setProperty'(Ledu/harvard/hul/ois/jhove/Property;)VLONGO(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ljava/lang/Object;)VgetBlocksUsedProperty8(Ljava/lang/String;)Ledu/harvard/hul/ois/jhove/Property; setLinebreakSTRINGisEmptyget&(Ljava/lang/Object;)Ljava/lang/Object;TEXTMDMETADATASCALARgetBase'()Ledu/harvard/hul/ois/jhove/JhoveBase; getSigBytes(Ljava/io/InputStream;)V_name setSigMatch(Ljava/lang/String;J)Vreset!        !"#$%& t*   * YL+++*+YMYL+ +!,+"Y#$L+%,+&,'(,)Y*+,-*.,/WY01MY23L+4+5+67+8+9 ,+&,:(,)Y;<,-*.,/WY=>MY?@L,+"YAL+B ,+&,C(,)YDE,-,)YFG,-*.,/W'(&-*H9*HI:J$KL:MNO* *P,*Q2R,*S2T,*U* V*W*X*Y*Z*[Y\]*^Y_`6,ab* c 7:*dP*deF,fg:hYi:*jY+kl**l*d *dmno*+*d *dmno*pYqr66  : 6  *o*sO*ct* .,v6 ,w  76  . .ߣ 6  . . 6  . . 6 r .  . .T .JxYyzY{|} .~} .}}*c: , ,6     *o*sO*ct*  .,v6 ,w  .  .ixYzY{} d2}}zY{|}  .~}  .}}*c:,, M   .6 x  .~x .?~`6 [ % .~ x .?~x` .?~`6 3 - .~x .?~ x` .?~x` .?~`6  *r   -  &  *]Y  2W *]Y W   6* * Z a7B: 6*5X,*l,Y:  ,Y Y: ,Y *c ,xY,*`*`**`*`Y: ,Y YY:   /W*r:    /W*W*X *YoY: *W W*`*X W*`*Y W*`Y :   /W*]Y: 6   -*]Y L:    W *]YL:    WY² :   /W* "YòIJ*`:   /W,YǷȶ UVTU)@4*'+,-./0+,-./0+,-./1+,-./1 :2F*e'/ 0+,-.3 >4W5+,-.5n67 89* +,-.6794#4%:;<=& -*Q2R-*S2T-*U* V*:66*pYqr6* c 7Y,: %6  :   *sO*ct* .-v6 -w  76  . .ߣ 6 e . . 6 K . . 6 1 .  . . . -6 O  *sO*ct* .-v6 -w . . -: 6-*ͶΧ-dooIoJeoflo)EP +>,-?@>2(B3:;AB&E. *Z *Y*X*Z *W) CD&*V*cdO*cϔ*V.6*V.**V.Y :,*r*V.D*V.8*V.*V.xYԷN xYշN,-,*V.%*V.xYַN,-,)W6 E -F%&  YOYOYOLYSLYS LYSYSYS LYSYSYSYSYSYSYSYSYSY SY SY SY SY SYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSjhove/classes/edu/harvard/hul/ois/jhove/module/WaveModule.class0000644000707400001440000004100211510702104023765 0ustar garyusers2G # # # # # # $      #      "   #      8 # 8   A # # #  #   #      # #    [ ] #  # # # # e   #  # # #  # # #  #! " ##$% &' () |* #+, #-. #/0 #1 23 #45 e6 #78 ]9 :; [< => ? @ [A =B [C =D #E F #G H #I #J #K #L #M #N #OPQ #R S #TU #V #W #X #Y #Z[ \ ] ^ #_ $` ab  cd e fg hi jk &l |m #n #o #p #q #r #s #tu v w xy z{| #}~                     ^      & \  & _ckSummer'Ledu/harvard/hul/ois/jhove/Checksummer;_cstream/Ledu/harvard/hul/ois/jhove/ChecksumInputStream;_dstreamLjava/io/DataInputStream; _metadata$Ledu/harvard/hul/ois/jhove/Property; _propListLjava/util/List;_notes_labels _labeledText_samples _aesMetadata,Ledu/harvard/hul/ois/jhove/AESAudioMetadata;bytesRemainingJ _blockAlignI _exifInfo0Ledu/harvard/hul/ois/jhove/module/wave/ExifInfo;compressionCode numSamples sampleRateformatChunkSeenZ factChunkSeen dataChunkSeeninstrumentChunkSeen mpegChunkSeen cartChunkSeenbroadcastExtChunkSeen peakChunkSeen linkChunkSeen cueChunkSeenflagPCMWaveFormatflagWaveFormatExflagWaveFormatExtensibleflagBroadcastWavebroadcastVersionfirstSampleOffsetMarkedsigByte[INAMELjava/lang/String; ConstantValueRELEASEDATEFORMAT[Ljava/lang/String;COVERAGEMIMETYPE WELLFORMEDVALIDITYREPINFONOTERIGHTS()VCodeparse<(Ljava/io/InputStream;Ledu/harvard/hul/ois/jhove/RepInfo;I)I StackMapTable8 ExceptionsmarkFirstSampleOffset setExifInfo3(Ledu/harvard/hul/ois/jhove/module/wave/ExifInfo;)V setBlockAlign(I)V getExifInfo2()Ledu/harvard/hul/ois/jhove/module/wave/ExifInfo;getCompressionCode()I getBlockAlignaddWaveProperty'(Ledu/harvard/hul/ois/jhove/Property;)VaddLabeladdLabeledText addSampleaddNote addListInfo(Ljava/util/List;)VreadSignedLong(Ljava/io/DataInputStream;)JreadUnsignedInt readSignedInt(Ljava/io/DataInputStream;)IreadUnsignedShortreadSignedShort read4Chars-(Ljava/io/DataInputStream;)Ljava/lang/String;[setCompressionCode addSamples(J)V setSampleRatesetPCMWaveFormat(Z)VsetWaveFormatExsetWaveFormatExtensiblesetBroadcastWavesetBroadcastVersion initParse readChunk&(Ledu/harvard/hul/ois/jhove/RepInfo;)ZugetAESMetadata.()Ledu/harvard/hul/ois/jhove/AESAudioMetadata; dupChunkError8(Ledu/harvard/hul/ois/jhove/RepInfo;Ljava/lang/String;)VbuildBitmaskProperty_(ILjava/lang/String;[Ljava/lang/String;[Ljava/lang/String;)Ledu/harvard/hul/ois/jhove/Property;WAVE-hul1.3 UP VWqWAVE (WAVEFORMAT, PCMWAVEFORMAT, WAVEFORMATEX, WAVEFORMATEXTENSIBLE), Broadcast Wave Format (BWF) version 0 and 1 YW ZR [R \R|There is no published standard for WAVE files. This module regards a file as valid if it conforms to common usage practices.Copyright 2004-2007 by JSTOR and the President and Fellows of Harvard College. Released under the GNU Lesser General Public License. _edu/harvard/hul/ois/jhove/AgentHarvard University Library  _FOffice for Information Systems, 90 Mt. Auburn St., Cambridge, MA 02138 +1 (617) 495-3724 !jhove-support@hulmail.harvard.edu  Microsoft Corporation * One Microsoft Way, Redmond, WA 98052-6399+1 (800) 426-9400http://www.microsoft.com "edu/harvard/hul/ois/jhove/Document PCMWAVEFORMAT  _$edu/harvard/hul/ois/jhove/Identifierjhttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/multimed/htm/_win32_pcmwaveformat_str.asp  _   .  WAVEFORMATEXihttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/multimed/htm/_win32_waveformatex_str.aspWAVEFORMATEXTENSIBLEqhttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/multimed/htm/_win32_waveformatextensible_str.aspEuropean Broadcasting UnionOCasa postale 45, Ancienne Route 17A, CH-1218 Grand-Saconex, Geneva, Switzerland+ 41 (0)22 717 2111+ 41 (0)22 747 4000 techreview@ebu.chhttp://www.ebu.ch$Broadcast Wave Format (EBU N22-1987) ;http://www.ebu.ch/CMSimages/en/tec_doc_t3285_tcm6-10544.pdf+edu/harvard/hul/ois/jhove/ExternalSignature.wav   _ ..bwfFor BWF profile _+edu/harvard/hul/ois/jhove/InternalSignatureRIFF   _WAVE ? ` W  W   34   URI  FILE_NAME  %&    x%edu/harvard/hul/ois/jhove/Checksummer _`-edu/harvard/hul/ois/jhove/ChecksumInputStream _ '( x  )*  OP&edu/harvard/hul/ois/jhove/ErrorMessage'Document does not start with RIFF chunk _     R    56   $File type in RIFF header is not WAVE 6 java/io/EOFExceptionUnexpected end of file <6  0.  -."edu/harvard/hul/ois/jhove/PropertyLabels   _ 1. LabeledText /.Notes 2.Samples 9:  >?No Format Chunk _ java/lang/Exception  "edu/harvard/hul/ois/jhove/Checksum  !" _# $% & '" ( )" +, *{ I? + J? K? L? E? ;8 @? M8Broadcast Wave Version 0Broadcast Wave Version 1 N? , 78ListInfo - - . . .java/lang/StringBuffer _t /0 1 =6java/util/LinkedList WAVEMetadata*edu/harvard/hul/ois/jhove/AESAudioMetadata 2t FILE_DIGITAL 3OTHERJHOVE_validation 45NONE 6AESAudioMetadata 7 _8 A? B? D? C? F? G? H?0edu/harvard/hul/ois/jhove/module/iff/ChunkHeader _9 :; <Invalid chunk size =fmt Format 1edu/harvard/hul/ois/jhove/module/wave/FormatChunk _>dataData/edu/harvard/hul/ois/jhove/module/wave/DataChunk _?fact/edu/harvard/hul/ois/jhove/module/wave/FactChunknote/edu/harvard/hul/ois/jhove/module/wave/NoteChunklabl0edu/harvard/hul/ois/jhove/module/wave/LabelChunklist8edu/harvard/hul/ois/jhove/module/wave/AssocDataListChunk _@LIST3edu/harvard/hul/ois/jhove/module/wave/ListInfoChunksmpl1edu/harvard/hul/ois/jhove/module/wave/SampleChunkinst Instrument5edu/harvard/hul/ois/jhove/module/wave/InstrumentChunkmextMPEG/edu/harvard/hul/ois/jhove/module/wave/MpegChunkcartCart/edu/harvard/hul/ois/jhove/module/wave/CartChunkbextBroadcast Audio Extension7edu/harvard/hul/ois/jhove/module/wave/BroadcastExtChunklevl Peak Envelope7edu/harvard/hul/ois/jhove/module/wave/PeakEnvelopeChunklinkLink/edu/harvard/hul/ois/jhove/module/wave/LinkChunkcue Cue.edu/harvard/hul/ois/jhove/module/wave/CueChunk%edu/harvard/hul/ois/jhove/InfoMessagejava/lang/StringBuilder Chunk type ' /A ' ignored Multiple  Chunks not permitted B C Djava/lang/Integer Ex Fjava/lang/StringAudio for Windows EBU Technical Specification 3285Broadcast Wave FormatBWF audio/x-wave audio/wave+edu/harvard/hul/ois/jhove/module/WaveModule$edu/harvard/hul/ois/jhove/ModuleBasejava/io/InputStream!edu/harvard/hul/ois/jhove/RepInfojava/io/IOException*edu/harvard/hul/ois/jhove/module/iff/Chunkjava/util/List(Ljava/lang/String;Ljava/lang/String;[I[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Z)V#edu/harvard/hul/ois/jhove/AgentType EDUCATIONAL%Ledu/harvard/hul/ois/jhove/AgentType;:(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/AgentType;)V setAddress(Ljava/lang/String;)V setTelephonesetEmail_vendor!Ledu/harvard/hul/ois/jhove/Agent; COMMERCIALsetWeb&edu/harvard/hul/ois/jhove/DocumentTypeWEB(Ledu/harvard/hul/ois/jhove/DocumentType;=(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/DocumentType;)V(edu/harvard/hul/ois/jhove/IdentifierTypeURL*Ledu/harvard/hul/ois/jhove/IdentifierType;?(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/IdentifierType;)V setIdentifier)(Ledu/harvard/hul/ois/jhove/Identifier;)V setPublisher$(Ledu/harvard/hul/ois/jhove/Agent;)V_specificationadd(Ljava/lang/Object;)ZsetFaxREPORT'edu/harvard/hul/ois/jhove/SignatureType EXTENSION)Ledu/harvard/hul/ois/jhove/SignatureType;*edu/harvard/hul/ois/jhove/SignatureUseTypeOPTIONAL,Ledu/harvard/hul/ois/jhove/SignatureUseType;j(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/SignatureType;Ledu/harvard/hul/ois/jhove/SignatureUseType;)V _signature|(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/SignatureType;Ledu/harvard/hul/ois/jhove/SignatureUseType;Ljava/lang/String;)VMAGIC MANDATORYk(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/SignatureType;Ledu/harvard/hul/ois/jhove/SignatureUseType;I)V _bigEndian_format setFormat _mimeType setMimeType setModule%(Ledu/harvard/hul/ois/jhove/Module;)VgetUri()Ljava/lang/String;setPrimaryIdentifier getURLFlag()ZsetOtherPrimaryIdentifierTypesetPrimaryIdentifierType_je%Ledu/harvard/hul/ois/jhove/JhoveBase;#edu/harvard/hul/ois/jhove/JhoveBasegetChecksumFlag getChecksum()Ljava/util/List;size?(Ljava/io/InputStream;Ledu/harvard/hul/ois/jhove/Checksummer;)V getBufferSizegetBufferedDataStream1(Ljava/io/InputStream;I)Ljava/io/DataInputStream;readUnsignedByteB(Ljava/io/DataInputStream;Ledu/harvard/hul/ois/jhove/ModuleBase;)I(Ljava/lang/String;J)V setMessage&(Ledu/harvard/hul/ois/jhove/Message;)V setWellFormed_name setSigMatchequals_nByte setDurationisEmpty&edu/harvard/hul/ois/jhove/PropertyTypePROPERTY(Ledu/harvard/hul/ois/jhove/PropertyType;'edu/harvard/hul/ois/jhove/PropertyArity)Ledu/harvard/hul/ois/jhove/PropertyArity;x(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ledu/harvard/hul/ois/jhove/PropertyArity;Ljava/lang/Object;)V.edu/harvard/hul/ois/jhove/module/wave/ExifInfo buildProperty&()Ledu/harvard/hul/ois/jhove/Property; skipBytesC(Ljava/io/DataInputStream;ILedu/harvard/hul/ois/jhove/ModuleBase;)I getNBytes()JsetSizegetCRC32&edu/harvard/hul/ois/jhove/ChecksumTypeCRC32(Ledu/harvard/hul/ois/jhove/ChecksumType;=(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/ChecksumType;)V setChecksum'(Ledu/harvard/hul/ois/jhove/Checksum;)VgetMD5MD5getSHA1SHA1 setProperty setProfilesetFirstSampleOffsetC(Ljava/io/DataInputStream;ZLedu/harvard/hul/ois/jhove/ModuleBase;)JC(Ljava/io/DataInputStream;ZLedu/harvard/hul/ois/jhove/ModuleBase;)Iappend(C)Ljava/lang/StringBuffer;toString setByteOrdersetAnalogDigitalFlagsetUse'(Ljava/lang/String;Ljava/lang/String;)V setDirectionAESAUDIOMETADATAO(Ljava/lang/String;Ledu/harvard/hul/ois/jhove/PropertyType;Ljava/lang/Object;)VL(Ledu/harvard/hul/ois/jhove/ModuleBase;Ledu/harvard/hul/ois/jhove/RepInfo;)V readHeader(Ljava/io/DataInputStream;)ZgetSizegetID{(Ledu/harvard/hul/ois/jhove/module/WaveModule;Ledu/harvard/hul/ois/jhove/module/iff/ChunkHeader;Ljava/io/DataInputStream;)Vt(Ledu/harvard/hul/ois/jhove/ModuleBase;Ledu/harvard/hul/ois/jhove/module/iff/ChunkHeader;Ljava/io/DataInputStream;)V(Ledu/harvard/hul/ois/jhove/ModuleBase;Ledu/harvard/hul/ois/jhove/module/iff/ChunkHeader;Ljava/io/DataInputStream;Ledu/harvard/hul/ois/jhove/RepInfo;)V-(Ljava/lang/String;)Ljava/lang/StringBuilder;setValidgetShowRawFlagINTEGERlengthSTRING!#$,%&'()*+,-./.0.1.2.3456789:;8<6=6>?@?A?B?C?D?E?F?G?H?I?J?K?L?M8N?OPQRSTRSUPVWXRSYWZR[R\R]RS ^RS "_`a *    YL+++*+ YM,,,Y !N-"Y#$%&-,'*(-)WY* !N-"Y+$%&-,'*(-)WY, !N-"Y-$%&-,'*(-)W Y.L+/+0+12+3+4Y56!N-"Y7$%&-+'*(-)W8Y9:;<:*=)W8Y>:;?@:*=)WAYBCDE:*=)WAYFCDE:*=)W*GbcaP|*H,*I2J,*K2L,*M*N,OP,Q*NRS *NTU*V*WT*WXJ,YZ>*[Y\V*]Y+*V^_**_*W *W`ab*+*W *W`ab63*b*c6d.,eYf gh,i,*jk***blm**bn:*YmoemFq,eYr*sgh,i*m *,t:,i,eYv*sgh*w *N*wx*yz *{|Y}~*y)W*z *{|Y~*)W*z *{|Y~*)W*z *{|Y~*)W**{*)W*,eYh,i*V|**b*6 :,*_,Y*V*V:,Y*VY:,Y,** ,* ,** ,,*k***P* ***<:*'#:: ,Wu?Wu@TWucv|d&;Refghiefghiefghjefghj/KkBl((((Bm=k )k nop`a-***N*sdqra*+sta*uva*wxa*yxa*z{a *{+)W|{a *y+)W}{a *+)W~{a *+)W{a *+)Wa'*{|Y~+)Wa+*noa+*noa+*noa+*noa+*noaN/YM>+*c6 ,W,d  nota*a *Ywawa*a*a*a*a*ta*`a**Y{*Y*Yy*Y*Y** w*|Y~*{*YN*N*N*NF*N*N*{|Yò*NŹ)W*************a@MY*+N-*bϚ-Ј6*Ym`em*m +eY*sgh-:q'* *+ԶջY*-*bM*Jq'*ƙ *+ٶջY*-*bM*ƧqY*-*bM*qY*-*bMqY*-*bMqY*-*b+MqY*-*b+MqY*-*bMsq'*Ǚ *+ջY*-*bM*ǧEq'*ə *+ջY*-*bM*ɧq'*ș *+ջY*-*bM*ȧq'* *+ջY*-*bM*q'*ʙ *+ջY*-*bM*ʧq(*˙ *+ջY*-*bM*˧]q(*̙ *+ջY*-*b M*̧-+ Y Y  *sh, ,+**b*W~**b*W*Ym emd01k) noa*Na;/+eY Y ,*sgh+a*W!*W|Y,YŰY:6-<:x~ -2: 2: )Wç:|Y,.qtd% kBm`at YROYIOYFOYFOd YOY OYOYFSYSYSYSY SY!SY"S jhove/classes/edu/harvard/hul/ois/jhove/module/XmlModule.class0000644000707400001440000004663611510702104023645 0ustar garyusers2 K K K L K      K         (  K     2 K K K N K K K E E E K    E K K  K   N K K    U W K  Z K     ] K c e g i k k   i! " #$ #% #& '( )*+ w w, -. -/ -0 -12 -3456  789:; <  => -?@ABCDEF -GHI < E JK wL KM NOPQ  RS TU VW <  X Y Z <[ \] < ^_` a wb wc d eT Kf g h wi jkl m ]n op Nq r gs Nt guvw Nx Nyz E{ K| N}~ N N g N E g      w E w d     g   K   c w w K e e w w c w   w  N s   U  (  U  U  K  5 5  E E  < K L  A A A NAMELjava/lang/String; ConstantValueRELEASEDATE[IFORMAT[Ljava/lang/String;COVERAGEMIMETYPE WELLFORMEDVALIDITYREPINFONOTERIGHTS _ckSummer'Ledu/harvard/hul/ois/jhove/Checksummer;_cstream/Ledu/harvard/hul/ois/jhove/ChecksumInputStream;_dstreamLjava/io/DataInputStream; _propListLjava/util/List; _metadata$Ledu/harvard/hul/ois/jhove/Property; _xhtmlDoctype_baseURL _sigWantsDeclZ _parseFromSig _withTextMD_textMD*Ledu/harvard/hul/ois/jhove/TextMDMetadata;()VCodesetXhtmlDoctype(Ljava/lang/String;)V StackMapTable resetParams Exceptionsparamparse<(Ljava/io/InputStream;Ledu/harvard/hul/ois/jhove/RepInfo;I)I++4:4HKKPPXX checkSignaturesI(Ljava/io/File;Ljava/io/InputStream;Ledu/harvard/hul/ois/jhove/RepInfo;)V initParsenameInCollection+(Ljava/lang/String;Ljava/util/Collection;)ZintTo4DigitHex(I)Ljava/lang/String; isNotEmpty(Ljava/lang/String;)ZXML-hul1.4 QR STXML 1.0 VTAn XML file is well-formed if it meets the criteria defined in Section 2.1 of the XML specification (W3C Recommendation, 3rd edition, 2004-02-04)An XML file is valid if well-formed, and the file has an associated DTD or XML Schema and the file meets the constraints defined by that DTD or SchemaAdditional representation information includes: version, endcoding, standalone flag, DTD or schema, namespaces, notations, character references, entities, processing instructions, and commentszThis module determines well-formedness and validity using the SAX2-conforming parser specified by the invoking applicationCopyright 2004-2007 by JSTOR and the President and Fellows of Harvard College. Released under the GNU Lesser General Public License. n kiedu/harvard/hul/ois/jhove/AgentHarvard University Library  nFOffice for Information Systems, 90 Mt. Auburn St., Cambridge, MA 02138 r+1 (617) 495-3724 r!jhove-support@hulmail.harvard.edu r   "edu/harvard/hul/ois/jhove/Document4Extensible Markup Language (XML) 1.0 (Third Edition)   nWord Wide Web Consortium Massachusetts Institute of Technology, Computer Science and Artificial Intelligence Laboratory, 32 Vassar Street, Room 32-G515, Cambridge, MA 02139(617) 253-2613(617) 258-5999 rhttp://www.w3.org/ r  2004-02-04 r$edu/harvard/hul/ois/jhove/Identifierhttp://www.w3.org/TR/REC-xml  n  c SAX  http://sax.sourceforge.net/+edu/harvard/hul/ois/jhove/ExternalSignature.xml  !" #$ n% &c fN lm 'r gN hi ji () *+ , -c ./ 01 23java/lang/Stringwithtextmd=true 4 o 5T 6r 7T 8r 9:(edu/harvard/hul/ois/jhove/TextMDMetadata no \] ;< =1 >? @A%edu/harvard/hul/ois/jhove/Checksummer-edu/harvard/hul/ois/jhove/ChecksumInputStream nB ^_java/util/LinkedList bc"edu/harvard/hul/ois/jhove/Property XMLMetadataC DEF GH nI de6edu/harvard/hul/ois/jhove/module/xml/XmlLexicalHandler3edu/harvard/hul/ois/jhove/module/xml/XmlDeclHandler2edu/harvard/hul/ois/jhove/module/xml/XmlDeclStream nJorg/xml/sax/InputSource java/io/File nr KLM NOP Q) Rr S)T UV WX YZ[ \]^ _`5edu/harvard/hul/ois/jhove/module/xml/XmlModuleHandler aX bc de fg hi-http://xml.org/sax/properties/lexical-handler jkorg/xml/sax/SAXException%edu/harvard/hul/ois/jhove/InfoMessageThe XML implementation in use does not support the LexicalHandler interface. This may result in some properties not being reported. lm1http://xml.org/sax/properties/declaration-handlerThe XML implementation in use does not support the DeclHandler interface. This may result in some properties not being reported.java/lang/Exception&edu/harvard/hul/ois/jhove/ErrorMessage n) oX&http://xml.org/sax/features/validation pq,The SAX parser is not capable of validation.&http://xml.org/sax/features/namespaces+The SAX parser does not support namespaces.0http://apache.org/xml/features/validation/schema6http://java.sun.com/xml/jaxp/properties/schemaLanguage http://www.w3.org/2001/XMLSchemaThe XML implementation in use does not support schema language identification. This may result in documents specified by schemas being reported as invalid. wrjava/io/FileNotFoundExceptionFile not found nsjava/io/UTFDataFormatException t1 uN vrInvalid character encodingjava/io/IOExceptionjava/lang/StringBuilderw xyz {) |}: org/xml/sax/SAXParseException ~A ALine = | , Column = SAXException, cause = Unspecified SAXException 1 ) ? 1    j  Parser E n  r r ) r )UTF-8Encoding r )UTF * i 8 rvariable r1 ))Not able to determine type of end of line CR LFCRLF ) StandaloneDTD_URIjava/util/ArrayList n  NamespaceURISchemaLocationSchema HSchemas )Roothtml ,   PrefixURI Namespace Namespaces ?)edu/harvard/hul/ois/jhove/Utf8BlockMarkerjava/lang/Integer A  CharacterReferencesUnicodeCharRefBlocks    ? NameTypeExternal unparsedPublicIDSystemID NotationNameEntity ?InternalValue ?External parsedEntities ?TargetDataProcessingInstructionProcessingInstructions ?Notation Notations ?Comments 1 X A ?!edu/harvard/hul/ois/jhove/Message ) rTextMDMetadata E H"edu/harvard/hul/ois/jhove/Checksum )  n  )  ) 1.0L+s?*<+@L+b? *+@;swxp,*A>* *AB:C$DE:>FG* 6*H,*I2J,*K2L,*M*9*NYO9*8*P*Q$*QR,ST*UYVP*WY+*PXY*ZY[\*]Y^_`*\ab:::cYd:eYf: gY*Yh: iY j:*;kY*;lmnop*Qq:  r:  s tu:  v:wYx:*8yz{|}~: ,Y : ,Y: ,Y ,: ,Y6: ,Y/": : ,Y^: ,Y ,: *= ,*,Y,: *= ,*,YY  ,: *= ,* 6  6 ,Y Y  ,:  ,* :  2 :  "Y : : ,Y ,*Q ,*: :  C :  2*9 2: 2*9 2: *9 :!   ,,*b:  , * *9*\]Y.W:*8*8:*9 ,ħ : ,*9 ::*\]Yɲ.W*9*9:̶+*9*Ι*9ж*9Ҷӧ(*9*Ι*9ж*9Զ :,Yַ*9ק?ضٙ*9ק*ڶٙ*9ק۶ٙ *9 :*\]Yݲ.W *\]Y޲ .W Y T: :\:]:]Y2S]Y2S]Y_a.W]Y_`a:*\.W::H*\]Y.WG ,*I2J:?6 :::::::::::Y::CDE:  E:!]:""]Y S"]Y!S]Y_"a:##.W ٙ! *9!:z]Y_`a: :vY:YT::  - :!!6"".W"ϻ]Y`a::::ZY[: :!ZY[:"!!:###:$$2:%%"$2.WY:&&]Y%.W&]Y.W&]Y $2.W&]Y $2.W&]Y $2.W ]Y _`&a.W,  :###:$$$:%%2:&&oY:'']Y&.W']Y.W']Y%2.W ]Y _`'a.Wk :###:$$$:%%2:&&Y:'']Y&.W']Y.W%2']Y %2.W%2']Y %2.W ]Y _`'a.WD ]Y_` a::$ZY[:%$Y$T:&$:''k':(]:)%)2.W)]Y(2S)]Y(2S&]Y_)a.W]Y_`&a::&&Y&T:'&:(Y:)((:**2:++% +"t)]Y+.W*2)]Y *2.W*2)]Y *2.W']Y_`)a.W\']Y_`'a:*\.W*\.W*\.W*\.W*\.W*\.W*\.W:'']Y`'a:,,!*8,*K2L ,*K2L :((:)),)!* ;*9,"#*9,$ƻ]Y%&'*9a:**\*.W*PS,(Y*P)*+,*P-:**,(Y*.+,*P/Y:*,(Y*0+,,$,1*91 %(;EHJUXgpsgpgpgpgpmswy'*, z{|}~%U z{|}~tMB z{|}~ z{|}~GLP z{|}~K] z{|}~6 z{|}~E z{|}~6 ?$z{|}~z{|}~9 Cz{|}~z{|}~Nz{|}~##"b:G z{|}~y2!z{|}~39$z{|}~2(z{|}~q3*z{|}~26$  >9up. *=-*I2J-*K2L-*M2:6*3:465Y,6:6  C76  8 9: -* : -*< -6 *= ,;6 - -*@s5 @ z{|!!B uop*? pE)+@M,C,DEN*-Gs y phCAYBL=2hz~> +0`CW+A d`CW+Ds   p2**:E*Gs@opNB YOYOYOEYFSYGSEYHSYISYJSjhove/classes/edu/harvard/hul/ois/jhove/Dump.java0000644000707400001440000001004210771562727021200 0ustar garyusers/********************************************************************** * JHOVE - JSTOR/Harvard Object Validation Environment * Copyright 2004 by the President and Fellows of Harvard College * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * USA **********************************************************************/ package edu.harvard.hul.ois.jhove; import java.io.*; /** * Common methods for dump utilities. */ public class Dump { /****************************************************************** * CLASS CONSTRUCTOR. ******************************************************************/ public Dump () { } /****************************************************************** * PUBLIC CLASS METHODS. ******************************************************************/ /** * Return leading characters to pad out the byte offset to field width. * @param os Byte offset * @param width Field width * @return String of leading zeros */ protected static String leading (int os, int width) { return leading (os, width, '0'); } /** * Return leading characters to pad out the byte offset to field width. * @param os Byte offset * @param width Field width * @return String of leading zeros */ protected static String leading (long os, int width) { return leading (os, width, '0'); } /** * Return leading characters to pad out the byte offset to field width. * @param os Byte offset * @param width Field width * @param pad Padding character * @return String of leading characters */ protected static String leading (int os, int width, char pad) { return leading ((long) os, width, pad); } /** * Return leading characters to pad out the byte offset to field width. * @param os Byte offset * @param width Field width * @param pad Padding character * @return String of leading characters */ protected static String leading (long os, int width, char pad) { String ss = Long.toString (os); StringBuffer buffer = new StringBuffer (); for (int j=0; jpublic final static instances of the subclass, * within the subclass definition, as there are enumeration cases. * No other instances of an EnumerationType should ever be created, * and the only operations which should ever be performed on an * EnumerationType are assignment and equality testing. * */ public abstract class EnumerationType { /****************************************************************** * PRIVATE INSTANCE FIELDS. ******************************************************************/ /** Enumeration value. */ private String _value; /****************************************************************** * CLASS CONSTRUCTOR. ******************************************************************/ /** * Instantiate an EnumerationType object. * @param value Enumeration value */ protected EnumerationType (String value) { _value = value; } /** * Private no-argument constructor to close off the default * constructor. */ private EnumerationType () { } /****************************************************************** * PUBLIC INSTANCE METHODS. ******************************************************************/ /** * Type equality test. * @param enm Enumerated type * @return True, if equal */ public boolean equals (EnumerationType enm) { return this == enm; } /** * Return enumeration value. * @return Value */ public String toString () { return _value; } } jhove/classes/edu/harvard/hul/ois/jhove/ErrorMessage.java0000644000707400001440000000345410771562723022676 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove; /** * This class encapsulates an error message from a Module, representing * a problem in the content being analyzed. */ public class ErrorMessage extends Message { /****************************************************************** * CLASS CONSTRUCTOR. ******************************************************************/ /** * Create an ErrorMessage. * @param message Human-readable string describing the problem. */ public ErrorMessage (String message) { super (message); } /** * Create an ErrorMessage. * @param message Human-readable string describing the problem. * @param offset The offset in the file at which the problem * was detected. */ public ErrorMessage (String message, long offset) { super (message, offset); } /** * Create an ErrorMessage. * @param message Human-readable string describing the problem. */ public ErrorMessage (String message, String subMessage) { super (message, subMessage); } /** * Create an ErrorMessage. * @param message Human-readable string describing the problem. * @param subMessage Human-readable additional information. * @param offset The offset in the file at which the problem * was detected. */ public ErrorMessage (String message, String subMessage, long offset) { super (message, subMessage, offset); } } jhove/classes/edu/harvard/hul/ois/jhove/ExternalSignature.java0000644000707400001440000000324610771562732023743 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003-4 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove; /** * This class encapsulates information about external format signatures. * The value of a Signature may be either a String or a byte array * (stored as an int array to avoid signed byte problems). */ public class ExternalSignature extends Signature { /** * Creates an ExternalSignature given a string value, a type, * and a use requirement. */ public ExternalSignature (String value, SignatureType type, SignatureUseType use) { super (value, type, use); } /** * Creates an ExternalSignature given a byte array, a type, * and a use requirement. */ public ExternalSignature (int[] value, SignatureType type, SignatureUseType use) { super (value, type, use); } /** * Creates an ExternalSignature given a string value, a type, * a use requirement, and a note. */ public ExternalSignature (String value, SignatureType type, SignatureUseType use, String note) { super (value, type, use, note); } /** * Creates an ExternalSignature given a byte array, a type, * a use requirement, and a note. */ public ExternalSignature (int[] value, SignatureType type, SignatureUseType use, String note) { super (value, type, use, note); } } jhove/classes/edu/harvard/hul/ois/jhove/HandlerBase.java0000644000707400001440000005445511234624320022442 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove; import java.io.*; import java.text.*; import java.util.*; import java.util.logging.*; /** * Abstract base class for Jhove output handlers. * Output handlers should normally subclass HandlerBase. */ public abstract class HandlerBase implements OutputHandler { /****************************************************************** * PUBLIC CLASS FIELDS. ******************************************************************/ /** * A DateFormat for representing a Date in yyyy-MM-dd * (e.g., 2003-07-31) format. */ public static SynchronizedDateFormat date = new SynchronizedDateFormat ("yyyy-MM-dd"); /** * A DateFormat for representing a Date in yyyy-MM-dd HH:mm:ss z * (e.g., 2003-07-31 15:31:12 EDT) format. */ public static SynchronizedDateFormat dateTime = new SynchronizedDateFormat ("yyyy-MM-dd HH:mm:ss z"); /** * A DateFormat for representing a Date in ISO 8601 * (e.g., 2003-07-31T15:31:12-0400) format. * We subclass SimpleDateFormat to make it thread-safe. */ public static SynchronizedDateFormat iso8601 = new SynchronizedDateFormat ("yyyy-MM-dd'T'HH:mm:ssZ"); /****************************************************************** * PRIVATE INSTANCE FIELDS. ******************************************************************/ /** The application object */ protected App _app; /** The Jhove engine */ protected JhoveBase _base; /** Handler last modification date */ protected Date _date; /** Character encoding for writer */ protected String _encoding; /** Initialization value. */ protected String _init; /** List of default parameters. */ protected List _defaultParams; /** JHOVE engine. */ protected JhoveBase _je; /** Indentation level */ protected int _level; /** Handler name */ protected String _name; /** Handler note */ protected String _note; /** Handler release description. */ protected String _release; /** Handler-specific parameter. */ protected String _param; /** Copyright notice */ protected String _rights; /** Handler specification document list */ protected List _specification; /** Handler vendor */ protected Agent _vendor; /** Writer for doing output */ protected PrintWriter _writer; /** Logger for a handler class. */ protected Logger _logger; /****************************************************************** * CLASS CONSTRUCTOR. ******************************************************************/ /** * Constructors of all subclasses of HandlerBase should call * this as a super constructor. * * @param name Name of the handler * @param release Release identifier * @param date Last modification date of the handler code, * in the form of an array of three numbers. * date[0] is the year, * date[1] the month, and * date[2] the day. * @param note Additional information about the handler * (may be null) * @param rights Copyright notice for the handler */ protected HandlerBase (String name, String release, int [] date, String note, String rights) { // Though we're actually in the jhove package, all the related // action logically belongs in the handler package, so we name // this logger accordingly. _logger = Logger.getLogger ("edu.harvard.hul.ois.jhove.handler"); _logger.info ("Initializing " + name); _name = name; _release = release; _encoding = "UTF-8"; Calendar calendar = new GregorianCalendar (); calendar.set (date[0], date[1]-1, date[2]); _date = calendar.getTime (); _note = note; _rights = rights; _specification = new ArrayList (); _level = -1; } /****************************************************************** * PUBLIC INSTANCE METHODS. * * Initialization methods. ******************************************************************/ /** * Reset the handler. This needs to be called before each invocation. */ public void reset () { _level = -1; } /** * Set a a List of default parameters for the module. * * @param params A List whose elements are Strings. * May be empty. */ public void setDefaultParams (List params) { _defaultParams = params; } /** * Applies the default parameters. * Calling this clears any prior parameters. */ public void applyDefaultParams () throws Exception { resetParams (); Iterator iter = _defaultParams.iterator (); while (iter.hasNext ()) { String parm = (String) iter.next (); param (parm); } } /** Reset parameter settings. * Returns to a default state without any parameters. * The default method clears the saved parameter. */ public void resetParams () throws Exception { _param = null; } /** * Per-instantiation initialization. * The default method does nothing. */ public void init (String init) throws Exception { _init = init; } /** * Per-action initialization. * The default method does nothing. */ public void param (String param) throws Exception { _param = param; } /****************************************************************** * Accessor methods. ******************************************************************/ /** * Return the last modification date of this OutputHandler, as a * Java Date object */ public final Date getDate () { return _date; } /** * Return the OutputHandler name */ public final String getName () { return _name; } /** * Return the OutputHandler note */ public final String getNote () { return _note; } /** * Return the release identifier */ public final String getRelease () { return _release; } /** * Return the copyright information string */ public final String getRights () { return _rights; } /** * Returns a list of Document objects (one for each * specification document). The specification * list is generated by the OutputHandler, and specifications cannot * be added by callers. * * @see Document */ public final List getSpecification () { return _specification; } /** * Return the vendor information */ public final Agent getVendor () { return _vendor; } /** * Returns this handler's encoding. */ public String getEncoding () { return _encoding; } /****************************************************************** * Mutator methods. ******************************************************************/ /** * Pass the associated App object to this Module. * The App makes various services available. */ public final void setApp (App app) { _app = app; } /** * Assigns the JHOVE engine object to provide services to this handler */ public final void setBase (JhoveBase je) { _je = je; } /** * Assigns the encoding to be used by this OutputHandler */ public void setEncoding (String encoding) { _encoding = encoding; } /** * Assigns a PrintWriter to do output for this OutputHandler */ public final void setWriter (PrintWriter writer) { _writer = writer; } /****************************************************************** * Serialization methods. ******************************************************************/ /** * Callback allowing post-parse, pre-show analysis of object * representation information. * @param info Object representation information */ public void analyze (RepInfo info) { /* Do nothing, which is sufficient for most handlers. */ } /** * Callback indicating a directory is finished being processed. */ public void endDirectory () { /* Do nothing, which is sufficient for most handlers. */ } /** * Callback to give the handler the opportunity to decide whether or * not to process a file. Most handlers will always return true. * @param filepath File pathname */ public boolean okToProcess (String filepath) { return true; } /** * Outputs information about a Module */ public abstract void show (Module module); /** * Outputs the information contained in a RepInfo object */ public abstract void show (RepInfo info); /** * Outputs information about the OutputHandler specified * in the parameter */ public abstract void show (OutputHandler handler); /** * Outputs minimal information about the application */ public abstract void show (); /** * Outputs detailed information about the application, * including configuration, available modules and handlers, * etc. */ public abstract void show (App app); /** * Do the initial output. This should be in a suitable format * for including multiple files between the header and the footer. */ public abstract void showHeader (); /** * Do the final output. This should be in a suitable format * for including multiple files between the header and the footer. */ public abstract void showFooter (); /** * Close the writer after all output has been done. */ public void close () { _writer.close (); } /** * Callback indicating a new directory is being processed. * @param directory Directory path */ public void startDirectory (String directory) { /* Do nothing, which is sufficient for most handlers. */ } /****************************************************************** * PRIVATE CLASS METHODS. * * XML methods. ******************************************************************/ /** * Return the XML DOCTYPE instruction. * @param root Root element of the DTD * @param uri URI of the DTD */ protected static String doctype (String root, String uri) { return doctype (root, null, uri); } /** * Return the XML DOCTYPE instruction. * @param root Root element of the DTD * @param name Public name of the DTD * @param uri URI of the DTD */ protected static String doctype (String root, String name, String uri) { StringBuffer s = new StringBuffer (""); return s.toString (); } /** * Returns, as a String, an empty XML. * * @param tag XML tag */ protected static String element (String tag) { return "<" + tag + "/>"; } /** * Returns, as a String, an XML element with a given tag and content * * @param tag An XML tag * @param content Content string. Characters requiring * conversion to entitites will be converted. */ protected static String element (String tag, String content) { return elementStart (tag) + encodeContent (content) + elementEnd (tag); } /** * Returns, as a String, * an XML element with a given tag and attributes * * @param tag An XML tag * @param attrs An array of String[2] elements, where for each * element, attrs[i][0] is the attribute key and * attrs[i][1] is the attribute value. * Null values are skipped. */ protected static String element (String tag, String [][] attrs) { StringBuffer buffer = new StringBuffer ("<"); buffer.append (tag); for (int i=0; i"); return buffer.toString (); } /** * Returns, as a String, * an XML element with a given tag, content and attributes * * @param tag An XML tag * @param content Content string. Characters requiring * conversion to entitites will be converted. * @param attrs An array of String[2] elements, where for each * element, attrs[i][0] is the attribute key and * attrs[i][1] is the attribute value. * Null values are skipped. * */ protected static String element (String tag, String [][] attrs, String content) { StringBuffer buffer = new StringBuffer ("<"); buffer.append (tag); for (int i=0; i"); buffer.append (encodeContent (content)); buffer.append (elementEnd (tag)); return buffer.toString (); } /** * Returns, as a String, the closing tag of an element. * No checking is done that opening and closing tags match. * * @param tag An XML tag */ protected static String elementEnd (String tag) { return ""; } /** * Returns, as a String, the opening tag of an element. * * @param tag An XML tag */ protected static String elementStart (String tag) { return "<" + tag + ">"; } /** * Returns, as a String, the opening tag of an element with * specified attributes. * * @param tag An XML tag * @param attrs An array of String[2] elements, where for each * element, attrs[i][0] is the attribute key and * attrs[i][1] is the attribute value. */ protected static String elementStart (String tag, String [][] attrs) { StringBuffer buffer = new StringBuffer ("<"); buffer.append (tag); for (int i=0; i"); return buffer.toString (); } /** * Encodes a content String in XML-clean form, converting characters * to entities as necessary and removing control characters disallowed * by XML. The null string will be converted to an empty string. */ private static String encodeContent (String content) { if (content == null) { content = ""; } StringBuffer buffer = new StringBuffer (content); /* Remove disallowed control characters from the content string. */ int n = buffer.length (); for (int i=0; i -1) { buffer.insert (n+1, "amp;"); n +=5; } n = 0; while ((n = buffer.indexOf ("<", n)) > -1) { buffer.replace (n, n+1, "<"); n += 4; } n = 0; while ((n = buffer.indexOf (">", n)) > -1) { buffer.replace (n, n+1, ">"); n += 4; } return buffer.toString (); } /** * Encodes an attribute value String in XML-clean form, * converting quote characters to entities and removing control * characters disallowed by XML. */ private static String encodeValue (String value) { StringBuffer buffer = new StringBuffer (value); /* Remove disallowed control characters from the value string. */ int n = buffer.length (); for (int i=0; i -1) { // [LP] fix for invalid escaping, "" quotes were accidentally left in place. buffer.replace (n, n+1, """); n +=7; } return buffer.toString (); } /** * Return a canonical XML declaration with default encoding. */ protected static String xmlDecl () { return ""; } /** * Return a canonical XML declaration with specified encoding. */ protected static String xmlDecl (String encoding) { return ""; } /****************************************************************** * Nesting level methods. ******************************************************************/ /** * Returns a String containing a number of spaces equal * to the current indent level. */ protected static String getIndent (int level) { StringBuffer s = new StringBuffer (); for (int i=0; i 0) { buffer.append (separator); } buffer.append (Integer.toString (iarray[i])); } return buffer.toString (); } /** * Return String representation of an array of long with * space separator. */ protected static String longArray (long [] larray) { StringBuffer buffer = new StringBuffer (); for (int i=0; i 0) { buffer.append (" "); } buffer.append (Long.toString (larray[i])); } return buffer.toString (); } /** * Return String representation of an array of Rational, each evaluated * as a double, with space separator. */ protected static String rationalArray (Rational [] rarray) { StringBuffer buffer = new StringBuffer (); for (int i=0; i 0) { buffer.append (" "); } buffer.append (rarray[i].toDouble ()); } return buffer.toString (); } /** * Return String representation of an array of Rational, each as * two integers, with space separator. */ protected static String rationalArray10 (Rational [] rarray) { StringBuffer buffer = new StringBuffer (); for (int i=0; i 0) { buffer.append (" "); } buffer.append (rarray[i].getNumerator ()); buffer.append (" "); buffer.append (rarray[i].getNumerator ()); } return buffer.toString (); } /** * Return String representation of an array of double. */ protected static String doubleArray (double [] darray) { StringBuffer buffer = new StringBuffer (); for (int i=0; i 0) { buffer.append (" "); } buffer.append (Double.toString (darray[i])); } return buffer.toString (); } /* Text formatting methods. */ /* Convert a date to the dateTime format used by the * XML schema. This is ISO 8610 with a colon between * the hour and minute fields of the time zone. Unfortunately, * SimpleDateFormat generates the time zone without the * colon; this also conforms to 8601, but doesn't conform * to the schema, so we have to diddle it. */ protected String toDateTime (Date date) { String isoStr = iso8601.format (date); // We can't directly use a SimpleDateFormat, because // the 'z' field gives us the colonless time zone. int len = isoStr.length (); // Add the colon before the last two characters. return isoStr.substring (0, len - 2) + ":" + isoStr.substring (len - 2); } /** A DateFormat class to address an issue of thread safety. */ public static class SynchronizedDateFormat extends SimpleDateFormat { public SynchronizedDateFormat(String pattern) { super(pattern); } public synchronized StringBuffer format(Date date, StringBuffer toAppendTo, FieldPosition pos) { return super.format(date, toAppendTo, pos); } } } jhove/classes/edu/harvard/hul/ois/jhove/Identifier.java0000644000707400001440000000265010771562726022362 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove; /** * This class encapsulates information about an identifier * for a specification document. */ public class Identifier { private IdentifierType _type; private String _value; private String _note; /** * Create an Identifier. * @param value The text displayed for this Identifier. * @param type The type of identification. */ public Identifier (String value, IdentifierType type) { _value = value; _type = type; } /** * Create an Identifier. * @param value The text displayed for this Identifier. * @param type The type of identification. * @param note A note giving supplementary information. */ public Identifier (String value, IdentifierType type, String note) { this (value, type); _note = note; } /** * Return the identifier type. */ public IdentifierType getType () { return _type; } /** * Return the displayable string. */ public String getValue () { return _value; } /** * Return the note, which will be null if none was specified. */ public String getNote() { return _note; } } jhove/classes/edu/harvard/hul/ois/jhove/IdentifierType.java0000644000707400001440000000772610771562725023234 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove; /** * This class defines enumerated types for an Identifier of a * format specification document. * Applications will not create or modify IdentifierTypes, but will * use one of the predefined IdentifierType instances * ANSI, DDC, DOI, ECMA, HANDLE, ISO, ISBN, LC, LCCN, * NISO, PII, RFC, SICI, URI, URL, URN, or OTHER. * * @see Identifier */ public final class IdentifierType extends EnumerationType { /** * Identifier type for American National Standards Institute. */ public static final IdentifierType ANSI = new IdentifierType ("ANSI"); /** * Identifier type for Dewey Decimal Classification. */ public static final IdentifierType DDC = new IdentifierType ("DDC"); /** * Identifier type for Digital Object Identifier. */ public static final IdentifierType DOI = new IdentifierType ("DOI"); /** * Identifier type for ECMA. */ public static final IdentifierType ECMA = new IdentifierType ("ECMA"); /** * Identifier type for CNRI Handle. */ public static final IdentifierType HANDLE = new IdentifierType ("Handle"); /** * Identifier type for International Standards Organization. */ public static final IdentifierType ISO = new IdentifierType ("ISO"); /** * Identifier type for International Standard Book Number. */ public static final IdentifierType ISBN = new IdentifierType ("ISBN"); /** * Identifier type for Library of Congress classification. */ public static final IdentifierType LC = new IdentifierType ("LC"); /** * Identifier type for Library of Congress catalogue number. */ public static final IdentifierType LCCN = new IdentifierType ("LCCN"); /** * Identifier type for NISO standard number. */ public static final IdentifierType NISO = new IdentifierType ("NISO"); /** * Identifier type for Publisher Item Identifier. */ public static final IdentifierType PII = new IdentifierType ("PII"); /** * Identifier type for IETF Request for Comment. */ public static final IdentifierType RFC = new IdentifierType ("RFC"); /** * Identifier type for Serial Item and Contribution Identifier. */ public static final IdentifierType SICI = new IdentifierType ("SICI"); /** * Identifier type for Uniform Resource Identifier. */ public static final IdentifierType URI = new IdentifierType ("URI"); /** * Identifier type for Uniform Resource Locator. */ public static final IdentifierType URL = new IdentifierType ("URL"); /** * Identifier type for Uniform Resource Name. */ public static final IdentifierType URN = new IdentifierType ("URN"); /** * Identifier type for CCITT. */ public static final IdentifierType CCITT = new IdentifierType ("CCITT"); /** * Identifier type for International Telecommunication Union. */ public static final IdentifierType ITU = new IdentifierType ("ITU"); /** * Identifier type for Japan Electronics and Information Technology * Industries Association. */ public static final IdentifierType JEITA = new IdentifierType ("JEITA"); /** * Identifier type for whatever doesn't fit other categories. */ public static final IdentifierType OTHER = new IdentifierType ("Other"); /****************************************************************** * CLASS CONSTRUCTOR. ******************************************************************/ /** * Applications will never create SignatureTypes directly. **/ private IdentifierType (String value) { super (value); } } jhove/classes/edu/harvard/hul/ois/jhove/InfoMessage.java0000644000707400001440000000370310771562730022473 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove; /** * This class encapsulates an informational message from a Module, giving * information (not necessarily a problem) * about the content being analyzed or the way that Jhove * deals with it. */ public class InfoMessage extends Message { /****************************************************************** * CLASS CONSTRUCTOR. ******************************************************************/ /** * Create an InfoMessage. * @param message Human-readable string giving the information. */ public InfoMessage (String message) { super (message); } /** * Create an InfoMessage. * @param message Human-readable string giving the information. * @param offset The offset in the file relevant to the * situation being described */ public InfoMessage (String message, long offset) { super (message, offset); } /** * Create an InfoMessage. * @param message Human-readable string giving the information. * @param subMessage Human-readable additional information. */ public InfoMessage (String message, String subMessage) { super (message, subMessage); } /** * Create an InfoMessage. * @param message Human-readable string giving the information. * @param subMessage Human-readable additional information. * @param offset The offset in the file relevant to the * situation being described */ public InfoMessage (String message, String subMessage, long offset) { super (message, subMessage, offset); } } jhove/classes/edu/harvard/hul/ois/jhove/InternalSignature.java0000644000707400001440000001024110771562731023725 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove; /** * This class encapsulates information about internal format signatures. * The value of a Signature may be either a String or a byte array * (stored as an int array to avoid signed byte problems). */ public class InternalSignature extends Signature { private boolean _hasFixedOffset; private int _offset; /** * Creates an InternalSignature given a string value, a type, * and a use requirement. An InternalSignature created with * this constructor does not have a fixed byte offset. */ public InternalSignature (String value, SignatureType type, SignatureUseType use) { super (value, type, use); _hasFixedOffset = false; } /** * Creates an InternalSignature given a byte array, a type, * and a use requirement. An InternalSignature created with * this constructor does not have a fixed byte offset. */ public InternalSignature (int[] value, SignatureType type, SignatureUseType use) { super (value, type, use); _hasFixedOffset = false; } /** * Creates an InternalSignature given a string value, a type, * a use requirement, and a byte offset. An InternalSignature * created with this constructor has a fixed byte offset. */ public InternalSignature (String value, SignatureType type, SignatureUseType use, int offset) { super (value, type, use); _offset = offset; _hasFixedOffset = true; } /** * Creates an InternalSignature given a byte array, a type, * a use requirement, and a byte offset. An InternalSignature * created with this constructor has a fixed byte offset. */ public InternalSignature (int[] value, SignatureType type, SignatureUseType use, int offset) { super (value, type, use); _offset = offset; _hasFixedOffset = true; } /** * Creates an InternalSignature given a string value, a type, * a use requirement, and a note. An InternalSignature created with * this constructor does not have a fixed byte offset. */ public InternalSignature (String value, SignatureType type, SignatureUseType use, String note) { super (value, type, use, note); _hasFixedOffset = false; } /** * Creates an InternalSignature given a byte array, a type, * a use requirement, and a note. An InternalSignature created with * this constructor does not have a fixed byte offset. */ public InternalSignature (int[] value, SignatureType type, SignatureUseType use, String note) { super (value, type, use, note); _hasFixedOffset = false; } /** * Creates an InternalSignature given a string value, a type, * a use requirement, a byte offset, and a note. * An InternalSignature created with * this constructor has a fixed byte offset. */ public InternalSignature (String value, SignatureType type, SignatureUseType use, int offset, String note) { super (value, type, use, note); _offset = offset; _hasFixedOffset = true; } /** * Creates an InternalSignature given a string value, a type, * a use requirement, a byte offset, and a note. * An InternalSignature created with * this constructor has a fixed byte offset. */ public InternalSignature (int[] value, SignatureType type, SignatureUseType use, int offset, String note) { super (value, type, use, note); _offset = offset; _hasFixedOffset = true; } /** * Returns the byte offset. This value is meaningful only * if this InternalSignature has a fixed byte offset. */ public int getOffset () { return _offset; } /** * Returns true if this InternalSignature * has a fixed byte offset. */ public boolean hasFixedOffset () { return _hasFixedOffset; } } jhove/classes/edu/harvard/hul/ois/jhove/JhoveBase.java0000644000707400001440000012364511510370444022140 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2005-2007 by the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove; import edu.harvard.hul.ois.jhove.handler.*; import edu.harvard.hul.ois.jhove.module.*; import java.io.*; import java.net.*; import java.util.*; import java.util.logging.*; import javax.net.ssl.KeyManager; import javax.net.ssl.HostnameVerifier; import javax.net.ssl.HttpsURLConnection; import javax.net.ssl.SSLContext; import javax.net.ssl.SSLSession; import javax.net.ssl.SSLSocketFactory; import javax.net.ssl.TrustManager; import javax.net.ssl.X509TrustManager; import javax.xml.parsers.*; import org.xml.sax.*; import org.xml.sax.helpers.*; /** * The JHOVE engine, providing all base services necessary to build an * application. * * More than one JhoveBase may be instantiated and process files in * concurrent threads. Any one instance must not be multithreaded. */ public class JhoveBase { /****************************************************************** * PRIVATE CLASS FIELDS. ******************************************************************/ private static Date _date; private static final String _name = "JhoveBase"; private static final String _release = "1.2"; private static final int [] DATE = {2007, 5, 10}; private static final String _rights = "Copyright 2005-2007 by the President and Fellows of Harvard College"; /** JHOVE buffer size property. */ private static final String BUFFER_PROPERTY = "edu.harvard.hul.ois." + "jhove.bufferSize"; /** JHOVE configuration directory */ private static final String CONFIG_DIR = "conf"; /** JHVOE configuration file property. */ private static final String CONFIG_PROPERTY = "edu.harvard.hul.ois." + "jhove.config"; /** JHOVE default buffer size. */ private static final int DEFAULT_BUFFER = 131072; /** JHOVE default character encoding. */ private static final String DEFAULT_ENCODING = "utf-8"; /** Default temporary directory. */ private static final String DEFAULT_TEMP = "."; /** JHOVE encoding property. */ private static final String ENCODING_PROPERTY = "edu.harvard.hul.ois." + "jhove.encoding"; /** JHOVE home directory */ private static final String JHOVE_DIR = "jhove"; /** JHOVE SAX parser class property. */ private static final String SAX_PROPERTY = "edu.harvard.hul.ois.jhove." + "saxClass"; /** JHOVE temporary directory property. */ private static final String TEMPDIR_PROPERTY = "edu.harvard.hul.ois." + "jhove.tempDirectory"; /** MIX schema version property. */ private static final String MIXVSN_PROPERTY = "edu.harvard.hul.ois." + "jhove.mixvsn"; /****************************************************************** * PRIVATE INSTANCE FIELDS. ******************************************************************/ /** Flag for aborting activity. */ protected boolean _abort; /** Buffer size for buffered I/O. */ protected int _bufferSize; protected boolean _checksum; /** Configuration file pathname. */ protected String _configFile; /** Selected encoding. */ protected String _encoding; /** Associate map of configution extensions. */ protected Map _extensions; /** Ordered list of output handlers. */ protected List _handlerList; /** Map of output handlers (for fast access by name). */ protected Map _handlerMap; /** JHOVE home directory. */ protected String _jhoveHome; /** Ordered list of modules. */ protected List _moduleList; /** Map of modules (for fast access by name). */ protected Map _moduleMap; protected String _outputFile; /** SAX parser class. */ protected String _saxClass; protected boolean _showRaw; protected boolean _signature; /** Temporary directory. */ protected String _tempDir; /** MIX version. */ protected String _mixVsn; /** Number of bytes for fake signature checking. */ protected int _sigBytes; /** Directory for saving files. */ protected File _saveDir; /** Byte count for digital object */ protected long _nByte; /** Callback function to check for termination. */ Callback _callback; /** Current URL connection. */ protected URLConnection _conn; /** Thread currently parsing a document. */ protected Thread _currentThread; /** Logger for this class. */ protected Logger _logger; /** Logger resource bundle. */ protected String _logLevel; /****************************************************************** * CLASS CONSTRUCTOR. ******************************************************************/ /** * Instantiate a JhoveBase object. * @throws JhoveException If invoked with JVM lower than 1.4 */ public JhoveBase () throws JhoveException { _logger = Logger.getLogger ("edu.harvard.hul.ois.jhove"); _logger.setLevel (Level.SEVERE); /* Make sure we have a satisfactory version of Java. */ String version = System.getProperty ("java.vm.version"); if (version.compareTo ("1.4.0") < 0) { String bad = "Java 1.4 or higher is required"; _logger.severe (bad); throw new JhoveException (bad); } /* Tell any https connections to be accepted automatically. */ HttpsURLConnection.setDefaultHostnameVerifier (new NaiveHostnameVerifier()); /* Initialize the engine. */ Calendar calendar = new GregorianCalendar (); calendar.set (DATE[0], DATE[1]-1, DATE[2]); _date = calendar.getTime (); _moduleList = new ArrayList (20); _moduleMap = new TreeMap (); _handlerList = new ArrayList (); _handlerMap = new TreeMap (); _abort = false; _bufferSize = -1; _checksum = false; _showRaw = false; _signature = false; _callback = null; } /****************************************************************** * PUBLIC INSTANCE METHODS. ******************************************************************/ /** * Initialize the JHOVE engine. * @param configFile Configuration file pathname */ public void init (String configFile, String saxClass) throws JhoveException { _configFile = configFile; _saxClass = saxClass; File config = null; String err = null; // If we get an error, attempt to get through the best we can, // then throw a JhoveException with err as its message. if (_configFile != null) { config = new File (_configFile); if (!config.exists () || !config.isFile ()) { err = "Configuration file not found or " + "not readable; use -c to specify"; config = null; } if (config != null) { XMLReader parser = null; try { if (saxClass == null) { /* Use Java 1.4 methods to create default parser. */ SAXParserFactory factory = SAXParserFactory.newInstance(); factory.setNamespaceAware (true); parser = factory.newSAXParser ().getXMLReader (); } else { parser = XMLReaderFactory.createXMLReader (saxClass); } } catch (Exception e) { // If we can't get a SAX parser, we're stuck. throw new JhoveException ("SAX parser not found: " + saxClass); } _logger.info ("Using SAX parser " + parser.getClass ().getName ()); ConfigHandler configHandler = new ConfigHandler (); parser.setContentHandler (configHandler); parser.setEntityResolver(configHandler); /* Attempt to set schema awareness to avoid validation * errors. */ try { parser.setFeature("http://xml.org/sax/features/validation", true); parser.setProperty ("http://java.sun.com/xml/jaxp/" + "properties/schemaLanguage", "http://www.w3.org/2001/XMLSchema"); } catch (SAXException e) {} try { String canonicalPath = config.getCanonicalPath (); String fileURL = "file://"; if (canonicalPath.charAt (0) != '/') { fileURL += '/'; } fileURL += canonicalPath; parser.parse (fileURL); } catch (IOException e) { throw new JhoveException ("Cannot read configuration file: " + configFile); } catch (SAXException s) { throw new JhoveException ("Error parsing configuration file: " + s.getMessage ()); } /* Update the application state to reflect the configuration * file, if necessary. */ _extensions = configHandler.getExtensions (); _jhoveHome = configHandler.getJhoveHome (); _encoding = configHandler.getEncoding (); if (_encoding == null) { _encoding = getFromProperties (ENCODING_PROPERTY); if (_encoding == null) { _encoding = DEFAULT_ENCODING; } } _tempDir = configHandler.getTempDir (); if (_tempDir == null) { _tempDir = getFromProperties (TEMPDIR_PROPERTY); if (_tempDir == null) { _tempDir = DEFAULT_TEMP; } } // get the MIX version. if not specified, defaults to 2.0. _mixVsn = configHandler.getMixVsn (); if (_mixVsn == null) { _mixVsn = "2.0"; // default } // Get the maximum number of bytes to examine when doing // pseudo-signature checking _sigBytes = configHandler.getSigBytes (); // If a log level was specified in the config file, // attempt to set it, unless it was already // explicitly set. if (_logLevel == null) { _logLevel = configHandler.getLogLevel (); if (_logLevel != null) { try { _logger.setLevel (Level.parse (_logLevel)); } catch (Exception e) {} } } _bufferSize = configHandler.getBufferSize (); if (_bufferSize < 0) { String size = getFromProperties (BUFFER_PROPERTY); if (size != null) { try { _bufferSize = Integer.parseInt (size); } catch (Exception e) {} } if (_bufferSize < 0) { _bufferSize = DEFAULT_BUFFER; } } /* Retrieve the ordered lists of modules and output handlers */ List list = configHandler.getModule (); List params = configHandler.getModuleParams (); int n = list.size (); for (int i=0; idirFileOrUri is null, Does one of the following: *
    *
  • If module is non-null, provides information about the module. *
  • Otherwise if aboutHandler is non-null, * provides information about that handler. *
  • If they're both null, provides information about the * application. *
* @param app The App object for the application * @param module The module to be used * @param aboutHandler If specified, the handler about which info is requested * @param handler The handler for processing the output * @param outputFile Name of the file to which output should go * @param dirFileOrUri One or more file names or URI's to be analyzed */ public void dispatch (App app, Module module, /* String moduleParam, */ OutputHandler aboutHandler, OutputHandler handler, /*String handlerParam,*/ String outputFile, String [] dirFileOrUri) throws Exception { _abort = false; /* If no handler is specified, use the default TEXT handler. */ if (handler == null) { handler = (OutputHandler) _handlerMap.get ("text"); } handler.reset (); _outputFile = outputFile; handler.setApp (app); handler.setBase (this); handler.setWriter (makeWriter (_outputFile, _encoding)); //handler.param (handlerParam); handler.showHeader (); /* Show handler header info. */ if (dirFileOrUri == null) { if (module != null) { /* Show info about module. */ //module.param (moduleParam); module.applyDefaultParams(); module.show (handler); } else if (aboutHandler != null) { /* Show info about handler. */ handler.show (aboutHandler); } else { /* Show info about application */ app.show (handler); } } else { for (int i=0; i code || code >= 300) { throw new JhoveException ("URL not found: " + dirFileOrUri); } } catch (Exception e) { throw new JhoveException("URL not found: " + dirFileOrUri); } } lastModified = conn.getLastModified (); /* Convert the URI to a temporary file and use * for the input stream. */ try { file = connToTempFile (conn, info); if (file == null) { return false; // user aborted } isTemp = true; } catch (IOException e) { _conn = null; String msg = "cannot read URL: " + dirFileOrUri; String msg1 = e.getMessage (); if (msg1 != null) { msg += " (" + msg1 + ")"; } throw new JhoveException (msg); } if (conn instanceof HttpsURLConnection) { ((HttpsURLConnection) conn).disconnect (); } _conn = null; } else { file = new File (dirFileOrUri); } if (file.isDirectory ()) { File [] files = file.listFiles (); info = null; // free up unused RepInfo before recursing /* Sort the files in ascending order by filename. */ Arrays.sort (files); handler.startDirectory (file.getCanonicalPath ()); for (int i=0; iabort (), in which case it will delete * the temporary file and return null. */ public File connToTempFile (URLConnection conn, RepInfo info) throws IOException { File tempFile; try { tempFile = newTempFile (); } catch (IOException e) { // Throw a more meaningful exception throw new IOException ("cannot create temp file"); } OutputStream outstrm = null; DataInputStream instrm = null; if (_bufferSize > 0) { outstrm = new BufferedOutputStream (new FileOutputStream (tempFile), _bufferSize); } else { outstrm = new BufferedOutputStream (new FileOutputStream (tempFile)); } try { if (_bufferSize > 0) { instrm = new DataInputStream (new BufferedInputStream (conn.getInputStream (), _bufferSize)); } else { instrm = new DataInputStream (new BufferedInputStream (conn.getInputStream ())); } } catch (UnknownHostException e) { tempFile.delete (); throw new IOException (e.toString ()); } catch (IOException e) { // IOExceptions other than UnknownHostException tempFile.delete (); throw e; } catch (Exception e) { // Arbitrary URL's may throw unpredictable expressions; // treat them as IOExceptions tempFile.delete (); throw new IOException (e.toString ()); } Checksummer ckSummer = null; if (_checksum) { ckSummer = new Checksummer (); } _nByte = 0; int appModulo = 4000; /* Copy the connection stream to the file. While we're here, calculate the checksums. */ try { byte by; for (;;) { // Make sure other threads can get in occasionally to cancel if ((_nByte % appModulo) == 0) { Thread.yield (); if (_callback != null) { _callback.callback (1, new Long (_nByte)); } // In order to avoid doing too many callbacks, limit // the checking to a number of bytes at least 1/10 of // the bytes read so far. if (appModulo * 10 < _nByte) { appModulo = (int) (_nByte / 10); } } if (_abort) { // Asynchronous abort requested. Clean up. instrm.close (); outstrm.close (); tempFile.delete (); return null; } int ch = instrm.readUnsignedByte (); if (ckSummer != null) { ckSummer.update (ch); } by = Checksum.unsignedByteToByte (ch); _nByte++; outstrm.write (by); } } catch (EOFException e) { /* This is the normal way for detecting we're done */ } /* The caller is responsible for disconnecting conn. */ instrm.close (); outstrm.close (); /* Update RepInfo */ info.setSize (_nByte); if (ckSummer != null) { info.setChecksum (new Checksum (ckSummer.getCRC32 (), ChecksumType.CRC32)); String value = ckSummer.getMD5 (); if (value != null) { info.setChecksum (new Checksum (value, ChecksumType.MD5)); } value = ckSummer.getSHA1 (); if (value != null) { info.setChecksum (new Checksum (value, ChecksumType.SHA1)); } } return tempFile; } /** * Aborts an activity. This simply sets a flag; whether * anything is aborted depends on what activity is * happening. */ public void abort () { _abort = true; HttpsURLConnection conn = null; if (_conn instanceof HttpsURLConnection) { conn = (HttpsURLConnection) _conn; } // If we're stuck in socket I/O, then there is no way // to kill the thread cleanly. Wait a few seconds, // and if we're still not terminated, pull the plug on // the socket. try { Thread.sleep (4000); } catch (InterruptedException e) { } if (conn != null) { // This is a non-deprecated way of bringing the connection // to a screeching halt. disconnect will (we hope) close // the underlying socket, killing any hanging I/O. conn.disconnect (); } } /* Processes the file. Returns false if aborted, or if the * module is incapable of validation. This shouldn't be called * if the module doesn't have the validation feature. */ public boolean processFile (App app, Module module, /*String moduleParam,*/ boolean verbose, File file, RepInfo info) throws Exception { if (!module.hasFeature("edu.harvard.hul.ois.jhove.canValidate")) { return false; } if (_callback != null) { _callback.callback (2, info.getUri()); } module.setApp (app); module.setBase (this); module.setVerbosity (verbose ? Module.MAXIMUM_VERBOSITY : Module.MINIMUM_VERBOSITY); module.applyDefaultParams (); if (module.isRandomAccess ()) { /* Module needs random access input. */ RandomAccessFile raf = new RandomAccessFile (file, "r"); if (_signature) { module.checkSignatures (file, raf, info); } else { module.parse (raf, info); } raf.close (); } else { /* Module accepts stream input. */ InputStream stream = new FileInputStream (file); try { if (_signature) { module.checkSignatures (file, stream, info); } else { int parseIndex = module.parse (stream, info, 0); /* If parse returns non-zero, reparse with a fresh stream. */ while (parseIndex != 0) { stream.close (); stream = new FileInputStream (file); parseIndex = module.parse (stream, info, parseIndex); } } } finally { stream.close (); } } return true; // Successful processing } /** * Creates a temporary file with a unique name. * The file will be deleted when the application exits. */ public File tempFile () throws IOException { File file = null; /* If no temporary directory has been specified, use the * Java default temp directory. */ if (_tempDir == null) { file = File.createTempFile ("JHOV", ""); } else { File dir = new File (_tempDir); file = File.createTempFile ("JHOV", "", dir); } file.deleteOnExit(); return file; } /****************************************************************** * Accessor methods. ******************************************************************/ /** * Returns the abort flag. */ public boolean getAbort () { return _abort; } /** * Returns buffer size. A value of -1 signifies that the invoknig * code should assume the default buffer size. */ public int getBufferSize () { return _bufferSize; } /** * Returns the configuration file. */ public String getConfigFile () { return _configFile; } /** * Returns the engine date (the date at which * this instance was created). */ public Date getDate () { return _date; } /** * Returns the output encoding. */ public String getEncoding () { return _encoding; } /** * Return the JHOVE configuration extensions. */ public Map getExtension () { return _extensions; } /** * Return the JHOVE configuration extension by name. */ public String getExtension (String name) { return (String) _extensions.get (name); } /** * Return a handler by name. */ public OutputHandler getHandler (String name) { OutputHandler handler = null; if (name != null) { handler = (OutputHandler) _handlerMap.get (name.toLowerCase ()); } return handler; } /** Returns map of handler names to handlers. */ public Map getHandlerMap () { return _handlerMap; } /** Returns the list of handlers. */ public List getHandlerList () { return _handlerList; } /** * Returns the JHOVE home directory. */ public String getJhoveHome () { return _jhoveHome; } /** * Returns a module by name. */ public Module getModule (String name) { Module module = null; if (name != null) { module = (Module) _moduleMap.get (name.toLowerCase ()); } return module; } /** Returns the Map of module names to modules. */ public Map getModuleMap () { return _moduleMap; } /** Returns the List of modules. */ public List getModuleList () { return _moduleList; } /** * Returns the engine name. */ public String getName () { return _name; } /** * Returns the output file. */ public String getOuputFile () { return _outputFile; } /** * Returns the engine release. */ public String getRelease () { return _release; } /** * Return the engine rights statement */ public String getRights () { return _rights; } /** * Return the SAX class. */ public String getSaxClass () { return _saxClass; } /** * Return the temporary directory. */ public String getTempDirectory () { return _tempDir; } /** Return the maximum number of bytes to check, for modules that look for * an indefinitely positioned signature or check the first sigBytes bytes * in lieu of a signature */ public int getSigBytes () { return _sigBytes; } /** * Return the directory designated for saving files. * This is simply the directory most recently set by * setSaveDirectory. */ public File getSaveDirectory () { return _saveDir; } /** Returns true if checksumming is requested. */ public boolean getChecksumFlag () { return _checksum; } /** Returns true if raw output is requested. * Raw output means numeric rather than symbolic output; * its exact interpretation is up to the module, but generally * applies to named flags. */ public boolean getShowRawFlag () { return _showRaw; } /** Returns the "check signature only" flag. */ public boolean getSignatureFlag () { return _signature; } /** Returns the requested MIX schema version. */ public String getMixVersion () { return _mixVsn; } /****************************************************************** * Mutator methods. ******************************************************************/ /** * Sets the buffer size. A value of -1 signifies that the invoking * code will assume the default buffer size. */ public void setBufferSize (int bufferSize) { _bufferSize = bufferSize; } /** * Sets the output encoding. */ public void setEncoding (String encoding) { _encoding = encoding; } /** * Sets the temporary directory path. */ public void setTempDirectory (String tempDir) { _tempDir = tempDir; } /** * Sets the log level. The value should be the name of * a predefined instance of java.util.logging.Level, * e.g., "WARNING", "INFO", "ALL". This will override * the config file setting. */ public void setLogLevel (String level) { _logLevel = level; if (level != null) { try { _logger.setLevel (Level.parse (_logLevel)); } catch (Exception e) {} } } /** Sets the value to be returned by doChecksum(). */ public void setChecksumFlag (boolean checksum) { _checksum = checksum; } /** Sets the value to be returned by getShowRawFlag (), * which determines if only raw numeric values should be output. */ public void setShowRawFlag (boolean raw) { _showRaw = raw; } /** Sets the "check signature only" flag. */ public void setSignatureFlag (boolean signature) { _signature = signature; } /** * Sets the default directory for subsequent save * operations. */ public void setSaveDirectory (File dir) { _saveDir = dir; } /** * Sets the current thread for parsing. */ public void setCurrentThread (Thread t) { _currentThread = t; } /** * Resets the abort flag. This must be called at the beginning of * any activity for which the abort flag may subsequently be set. */ public void resetAbort () { _abort = false; } /****************************************************************** * PRIVATE CLASS METHODS. ******************************************************************/ /** Uses the user.home property to locate the configuration * file. The file is expected to be in the subdirectory * named by CONFIG_DIR under the home directory, and to * be named jhove.conf. Returns null * if no such file is found. */ public static String getConfigFileFromProperties () { String configFile = null; configFile = getFromProperties (CONFIG_PROPERTY); if (configFile == null) { try { String fs = System.getProperty ("file.separator"); configFile = System.getProperty ("user.home") + fs + JHOVE_DIR + fs + CONFIG_DIR + fs + "jhove.conf"; } catch (Exception e) { } } return configFile; } /** Returns the value of the property edu.harvard.hul.ois.jhove.saxClass, which should be the name of the main SAX class. Returns null if no such property has been set up. */ public static String getSaxClassFromProperties () { String saxClass = getFromProperties (SAX_PROPERTY); return saxClass; } /** Returns a named value from the properties file. */ public static String getFromProperties (String name) { String value = null; try { String fs = System.getProperty ("file.separator"); Properties props = new Properties (); String propsFile = System.getProperty ("user.home") + fs + JHOVE_DIR + fs + "jhove.properties"; FileInputStream stream = new FileInputStream (propsFile); props.load (stream); stream.close (); value = props.getProperty (name); } catch (Exception e) { } return value; } /** * Creates an output PrintWriter. * @param outputFile Output filepath. If null, writer goes to System.out. * @param encoding Character encoding. Must not be null. */ protected static PrintWriter makeWriter (String outputFile, String encoding) throws JhoveException { PrintWriter output = null; OutputStreamWriter osw = null; if (outputFile != null) { try { FileOutputStream stream = new FileOutputStream (outputFile); osw = new OutputStreamWriter (stream, encoding); output = new PrintWriter (osw); } catch (UnsupportedEncodingException u) { throw new JhoveException ("unsupported character encoding: " + encoding); } catch (FileNotFoundException e) { throw new JhoveException ("cannot open output file: " + outputFile); } } if (output == null) { try { osw = new OutputStreamWriter (System.out, encoding); } catch (UnsupportedEncodingException u) { throw new JhoveException ("unsupported character encoding: " + encoding); } output = new PrintWriter (osw); } return output; } /** * Creates a temporary file with a unique name. * The file will be deleted when the application exits. */ public File newTempFile () throws IOException { return tempFile (); } /** A HostnameVerifier for https connections that will never ask for * certificates. */ private class NaiveHostnameVerifier implements HostnameVerifier { public boolean verify(String hostname, SSLSession session) { return true; } } /** A TrustManager which should accept all certificates. */ private class RelaxedX509TrustManager implements X509TrustManager { public boolean isClientTrusted(java.security.cert.X509Certificate[] chain){ return true; } public boolean isServerTrusted(java.security.cert.X509Certificate[] chain) { return true; } public java.security.cert.X509Certificate[] getAcceptedIssuers() { return null; } public void checkClientTrusted(java.security.cert.X509Certificate[] chain) { } public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String s) { } public void checkServerTrusted(java.security.cert.X509Certificate[] chain) { } public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String s) { } } } jhove/classes/edu/harvard/hul/ois/jhove/JhoveException.java0000644000707400001440000000075410771562725023234 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove; public class JhoveException extends Exception { public JhoveException () { super (); } public JhoveException (String message) { super (message); } } jhove/classes/edu/harvard/hul/ois/jhove/MacStuff.java0000644000707400001440000000606310771562723022007 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove; import java.io.*; import java.lang.reflect.*; //import com.apple.eio.FileManager; /** * Code specific to Macintosh Java. This class consists of static * methods, and should not be instantiated. Its methods should be * called only on the Macintosh OS X platform. It requires the * package com.apple.eio.FileManager. * * @author Gary McGath * */ public class MacStuff { /** Private constructor to prevent instantiation.*/ private MacStuff () { } /** * Determines if we're running on a Macintosh, * so appropriate UI adjustments can be made. In accordance * with Apple's recommendations, this checks for the existence * of the mrj.version property rather than checking the os.name * property. */ public static boolean isMacintosh () { return (System.getProperty ("mrj.version") != null); } /** * Returns true if a file has the given file type. * This method uses FileManager in a dynamic way, so * that it will merely throw a ClassNotFound exception * if it fails. * * Currently this code isn't actually used, since the * Jhove application is specified as checking only internal * signatures. Should some future version or add-on * code wish to use it, the code should * look something like this: * *
     *           try {
     *               if (sig.getType() == SignatureType.FILETYPE &&
     *                       MacStuff.isMacintosh ()) {
     *                   if (!MacStuff.fileHasType(file, sig.getValueString())) {
     *                       info.setConsistent (false);
     *                   }    
     *               }
     *           }
     *           catch (ClassNotFoundException e) {
     *               // Mac classes missing -- can't check filetype.
     *           }
     * 
*/ public static boolean fileHasType(File file, String type) throws ClassNotFoundException { // Need to make this completely dynamic. //return type.equals (FileManager.getFileType (file)); try { if (type == null) { return false; } Class fmclass = Class.forName ("com.apple.eio.FileManager"); Class[] params = new Class[1]; params[0] = Class.forName ("java.io.File"); Object[] args = new Object[1]; args[0] = file; Method method = fmclass.getMethod ("getFileType", params); String ftype = (String) method.invoke (null, args); return (type.equals (ftype)); } catch (ClassNotFoundException e) { throw e; } catch (Exception f) { return false; } } } jhove/classes/edu/harvard/hul/ois/jhove/Message.java0000644000707400001440000001027210771562730021656 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove; /** * This class encapsulates a String to be displayed. */ public abstract class Message { /****************************************************************** * PUBLIC CLASS FIELDS. ******************************************************************/ /** Value indicating a null offset. */ public static final long NULL = -1; /****************************************************************** * PRIVATE INSTANCE FIELDS. ******************************************************************/ /** Message text. */ protected String _message; /** Additional information. */ protected String _subMessage; /** Byte offset to which message applies. */ protected long _offset; /****************************************************************** * CLASS CONSTRUCTOR. ******************************************************************/ /** * Create a Message. This constructor cannot be invoked directly, * since Message is abstract. * @param message Human-readable string. */ protected Message (String message) { init (message, null, NULL); } /** * Create a Message. This constructor cannot be invoked directly, * since Message is abstract. The second argument * adds secondary details to the primary message; * the message will typically be displayed in the * form "message:subMessage". * @param message Human-readable string. * @param subMessage Human-readable additional information. */ protected Message (String message, String subMessage) { init (message, subMessage, NULL); } /** * Create a Message. This constructor cannot be invoked directly, * since Message is abstract. The second argument * adds secondary details to the primary message; * the message will typically be displayed in the * form "message:subMessage". * @param message Human-readable string. * @param offset Byte offset associated with the message. */ protected Message (String message, long offset) { init (message, null, offset); } /** * Create a Message. This constructor cannot be invoked directly, * since Message is abstract. The second argument * adds secondary details to the primary message; * the message will typically be displayed in the * form "message:subMessage". * @param message Human-readable string. * @param subMessage Human-readable additional information. * @param offset Byte offset associated with the message. */ protected Message (String message, String subMessage, long offset) { init (message, subMessage, offset); } /** * Initialize the Message object. * @param message Human-readable string. * @param subMessage Human-readable additional information. */ private void init (String message, String subMessage, long offset) { _message = message; _subMessage = subMessage; _offset = offset; } /****************************************************************** * PUBLIC INSTANCE METHODS. * * Accessor methods. ******************************************************************/ /** * Get the message string. */ public String getMessage () { return _message; } /** * Get the submessage string. */ public String getSubMessage () { return _subMessage; } /** * Return the offset to which the information is related. */ public long getOffset () { return _offset; } } jhove/classes/edu/harvard/hul/ois/jhove/Module.java0000644000707400001440000001754510771562725021535 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003-4 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove; import java.io.*; import java.util.*; /** * Public interface for Jhove format-specific plug-in modules. * * All format modules must implement the Module interface; * usually the best way to do this will be to subclass ModuleBase. * Modules must be declared in the configuration file and present * in the Classpath to be recognized by Jhove. * * @see ModuleBase */ public interface Module { public static final int MAXIMUM_VERBOSITY = 1, MINIMUM_VERBOSITY = 2; /** * Per-instantiation initialization. * * @param init Initialization parameter. This is typically obtained * from the configuration file. */ public void init (String init) throws Exception; /** * Sets list of default parameters. * * @param params A List whose elements are Strings. * May be empty. */ public void setDefaultParams (List params); /** * Applies the default parameters. */ public void applyDefaultParams () throws Exception; /** Reset parameter settings. * Returns to a default state without any parameters. */ public void resetParams () throws Exception; /** * Per-action initialization. * May be called multiple times. * * @param param Initialization parameter. */ public void param (String param) throws Exception; /** * Pass the associated App object to this Module. * The App makes various services available. */ public void setApp (App app); /** * Pass the JHOVE engine object to this Module. */ public void setBase (JhoveBase je); /** * Set the degree of verbosity desired from the module. * * @param verbosity The requested verbosity value. */ public void setVerbosity (int verbosity); /** * Return the name of this Module. */ public String getName (); /** * Return the release identifier */ public String getRelease (); /** * Return the last modification date of the Module, as a * Java Date object */ public Date getDate (); /** * Return the vendor information */ public Agent getVendor (); /** * Return the copyright information string */ public String getRights (); /** * Return the Module note */ public String getNote (); /** * Return the array of format names supported by this Module */ public String [] getFormat (); /** * Return the array of MIME type strings for formats supported * by this Module */ public String [] getMimeType (); /** * Return details as to the specific format versions or * variants that are supported by this Module */ public String getCoverage (); /** * Return the List of Signatures recognized by this Module */ public List getSignature (); /** * Returns a list of Document objects (one for each * specification document of the format). The specification * list is generated by the Module, and specifications cannot * be added by callers. * * @see Document */ public List getSpecification (); /** * Return the string describing well-formedness criteria */ public String getWellFormedNote (); /** * Returns the RepInfo note */ public String getRepInfoNote (); /** * Returns the string describing validity criteria */ public String getValidityNote (); /** * Returns the random access flag (true if the module operates * on random access files, false if it operates on streams) */ public boolean isRandomAccess (); /** * Returns true if the module supports a given * named feature, and false if the feature is * unsupported or unknown. */ public boolean hasFeature (String feature); /** * Returns the full list of features. */ public List getFeatures (); /** * Returns the list of default parameters. */ public List getDefaultParams (); /** * Parse the content of a stream digital object and store the * results in RepInfo. * A given Module will normally implement only one of the two * parse methods, leaving the other as a stub. * * @param stream An InputStream, positioned at its beginning, * which is generated from the object to be parsed. * If multiple calls to parse are made * on the basis of a nonzero value being returned, * a new InputStream must be provided each time. * * @param info A fresh (on the first call) RepInfo object * which will be modified * to reflect the results of the parsing * If multiple calls to parse are made * on the basis of a nonzero value being returned, * the same RepInfo object should be passed with each * call. * * @param parseIndex Must be 0 in first call to parse. If * parse returns a nonzero value, it must be * called again with parseIndex * equal to that return value. */ public int parse (InputStream stream, RepInfo info, int parseIndex) throws IOException; /** * Parse the content of a random access digital object and store the * results in RepInfo. * A given Module will normally implement only one of the two * parse methods, leaving the other as a stub. * * @param file A RandomAccessFile, positioned at its beginning, * which is generated from the object to be parsed * @param info A fresh RepInfo object which will be modified * to reflect the results of the parsing */ public void parse (RandomAccessFile file, RepInfo info) throws IOException; /** * Check if the digital object conforms to this Module's * internal signature information. * * @param file A File object for the object being parsed * @param stream An InputStream, positioned at its beginning, * which is generated from the object to be parsed * @param info A fresh RepInfo object which will be modified * to reflect the results of the test */ public void checkSignatures (File file, InputStream stream, RepInfo info) throws IOException; /** * Check if the digital object conforms to this Module's * internal signature information. * * @param file A File object for the object being parsed * @param raf A RandomAccessFile, positioned at its beginning, * which is generated from the object to be parsed * @param info A fresh RepInfo object which will be modified * to reflect the results of the test */ public void checkSignatures (File file, RandomAccessFile raf, RepInfo info) throws IOException; /** * Generates information about this Module. * The format of the output depends on the OutputHandler. */ public void show (OutputHandler handler); } jhove/classes/edu/harvard/hul/ois/jhove/ModuleBase.java0000644000707400001440000013045410771562731022320 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003-4 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove; import java.io.*; import java.security.*; import java.util.*; import java.util.zip.*; import java.util.logging.*; /** * This class is an abstract implementation of the Module interface. * It contains all the methods required for a Module, but doesn't * do anything by itself. A subclass should provide a functional * implmentation of parse (InputStream stream, RepInfo info, int parseIndex) * if it is not random access, or * parse (RandomAccessFile file, RepInfo info) * if it is random access. * */ public abstract class ModuleBase implements Module { /****************************************************************** * PROTECTED INSTANCE FIELDS. ******************************************************************/ /** The application object */ protected App _app; /** Coverage information */ protected String _coverage; /** Module last modification date */ protected Date _date; /** Formats recognized by this Module */ protected String [] _format; /** Initialization value. */ protected String _init; /** List of default parameters. */ protected List _defaultParams; /** JHOVE engine. */ protected JhoveBase _je; /** MIME types supported by this Module */ protected String [] _mimeType; /** Module name */ protected String _name; /** Module note */ protected String _note; /** Module-specific parameter. */ protected String _param; /** Module release description */ protected String _release; /** RepInfo note */ protected String _repInfoNote; /** Copyright notice */ protected String _rights; /** Module Signature list */ protected List _signature; /** Module specification document list */ protected List _specification; /** Module vendor */ protected Agent _vendor; /** Well-formedness criteria */ protected String _wellFormedNote; /** Validity criteria */ protected String _validityNote; /** Random access flag */ protected boolean _isRandomAccess; /** Byte count of content object */ protected long _nByte; /** CRC32 calculated on content object */ protected CRC32 _crc32; /** MD5 digest calculated on content object */ protected MessageDigest _md5; /** SHA-1 digest calculated on content object */ protected MessageDigest _sha1; /** Flag indicating valid checksum information set */ protected boolean _checksumFinished; /** Indicator of how much data to report */ protected int _verbosity; /** Flag to indicate read routines should count the stream */ protected boolean _countStream; /** The dominant "endianness" of the Module. */ protected boolean _bigEndian; /** The list of supported features. */ protected List _features; /** Logger for a module class. */ protected Logger _logger; /****************************************************************** * CLASS CONSTRUCTOR. ******************************************************************/ /** * Constructors of all subclasses of ModuleBase should call * this as a super constructor. * * @param name Name of the module * @param release Release identifier * @param date Last modification date of the module code, * in the form of an array of three numbers. * date[0] is the year, * date[1] the month, and * date[2] the day. * @param format Array of format names supported by the module * @param coverage Details as to the specific format versions or * variants that are supported by the module * @param mimeType Array of MIME type strings for formats * supported by the module * @param wellFormedNote Brief explanation of what constitutes * well-formed content * @param validityNote Brief explanation of what constitutes * valid content * @param repInfoNote Note pertaining to RepInfo (may be null) * @param note Additional information about the module * (may be null) * @param rights Copyright notice for the module * @param isRandomAccess true if the module treats content as * random-access data, if it treats content * as stream data */ protected ModuleBase (String name, String release, int [] date, String [] format, String coverage, String [] mimeType, String wellFormedNote, String validityNote, String repInfoNote, String note, String rights, boolean isRandomAccess) { // Though we're actually in the jhove package, all the related // action logically belongs in the module package, so we name // this logger accordingly. _logger = Logger.getLogger ("edu.harvard.hul.ois.jhove.module"); _logger.info ("Initializing " + name); _name = name; _release = release; Calendar calendar = new GregorianCalendar (); calendar.set (date[0], date[1]-1, date[2]); _date = calendar.getTime (); _format = format; _coverage = coverage; _mimeType = mimeType; _signature = new ArrayList (); _specification = new ArrayList (); _wellFormedNote = wellFormedNote; _repInfoNote = repInfoNote; _validityNote = validityNote; _note = note; _rights = rights; _isRandomAccess = isRandomAccess; _verbosity = MINIMUM_VERBOSITY; initFeatures (); } /****************************************************************** * PUBLIC INSTANCE METHODS. * * Initialization methods. ******************************************************************/ /** Initializes the feature list. * This method puts the following features in the list: *
    *
  • edu.harvard.hul.ois.canValidate *
  • edu.harvard.hul.ois.canIdentify *
*/ public void initFeatures () { _features = new ArrayList (2); _features.add ("edu.harvard.hul.ois.jhove.canValidate"); _features.add ("edu.harvard.hul.ois.jhove.canCharacterize"); } /** * Per-instantiation initialization. * The default method does nothing but save its parameter. */ public void init (String init) throws Exception { _init = init; } /** * Set a a List of default parameters for the module. * * @param params A List whose elements are Strings. * May be empty. */ public void setDefaultParams (List params) { _defaultParams = params; } /** * Applies the default parameters. * Calling this clears any prior parameters. */ public void applyDefaultParams () throws Exception { resetParams (); Iterator iter = _defaultParams.iterator (); while (iter.hasNext ()) { String parm = (String) iter.next (); param (parm); } } /** Reset parameter settings. * Returns to a default state without any parameters. * The default method clears the saved parameter. */ public void resetParams () throws Exception { _param = null; } /** * Per-action initialization. May be called multiple times. * The default method does nothing but save its parameter. */ public void param (String param) throws Exception { _param = param; } /****************************************************************** * Accessor methods. ******************************************************************/ /** * Returns the App object. */ public App getApp() { return _app; } /** * Returns the JHOVE engine object. */ public JhoveBase getBase() { return _je; } /** * Returns the value of _nByte. * Meaningful only for modules that use a counted InputStream. */ public long getNByte () { return _nByte; } /** * Returns true if the dominant "endianness" of the * module, or the current file being processed, * is big-endian, otherwise false. This does not guarantee * that all numbers in the module follow the dominant endianness, * particularly as formats sometimes incorporate data stored in * a previously defined format. For some formats, e.g., TIFF, the * endianness depends on the file being processed. * * Every module must initialize the value of _bigEndian for this * function, or else assign its value when parsing a file, * to return a meaningful result. For some modules (e.g., * ASCII, endianness has no meaning. */ public boolean isBigEndian () { return _bigEndian; } /** * Return details as to the specific format versions or * variants that are supported by this module */ public final String getCoverage () { return _coverage; } /** * Return the last modification date of this Module, as a * Java Date object */ public final Date getDate () { return _date; } /** * Return the array of format names supported by this Module */ public final String [] getFormat () { return _format; } /** * Return the array of MIME type strings for formats supported * by this Module */ public final String [] getMimeType () { return _mimeType; } /** * Return the module name */ public final String getName () { return _name; } /** * Return the module note */ public final String getNote () { return _note; } /** * Return the release identifier */ public final String getRelease () { return _release; } /** * Return the RepInfo note */ public final String getRepInfoNote () { return _repInfoNote; } /** * Return the copyright information string */ public final String getRights () { return _rights; } /** * Return the List of Signatures recognized by this Module */ public final List getSignature () { return _signature; } /** * Returns a list of Document objects (one for each * specification document of the format). The specification * list is generated by the Module, and specifications cannot * be added by callers. * * @see Document */ public final List getSpecification () { return _specification; } /** * Return the vendor information */ public final Agent getVendor () { return _vendor; } /** * Return the string describing well-formedness criteria */ public final String getWellFormedNote () { return _wellFormedNote; } /** * Return the string describing validity criteria */ public final String getValidityNote () { return _validityNote; } /** * Return the random access flag (true if the module operates * on random access files, false if it operates on streams) */ public final boolean isRandomAccess () { return _isRandomAccess; } /** * Returns true if the module supports a given * named feature, and false if the feature is * unsupported or unknown. Feature names are case sensitive. * * It is recommended that features be named using package * nomenclature. The following features are, by default, * supported by the modules developed by OIS: * *
    *
  • edu.harvard.hul.ois.canValidate *
  • edu.harvard.hul.ois.canIdentify *
*/ public boolean hasFeature (String feature) { if (_features == null) { // dubious, but check it return false; } Iterator iter = _features.iterator (); while (iter.hasNext ()) { String f = (String) iter.next (); if (f.equals (feature)) { return true; } } return false; } /** * Returns the full list of features. */ public List getFeatures () { return _features; } /** * Returns the list of default parameters. */ public List getDefaultParams () { return _defaultParams; } /****************************************************************** * Mutator methods. ******************************************************************/ /** * Pass the associated App object to this Module. * The App makes various services available. */ public final void setApp (App app) { _app = app; } /** * Pass the JHOVE engine object to this Module. */ public final void setBase (JhoveBase je) { _je = je; } /** * Set the value of the validityNote property, which * briefly explains the validity criteria of this Module. */ public final void setValidityNote (String validityNote) { _validityNote = validityNote; } /** * Set the value of the CRC32 calculated for the content object. * The checksum-like functions can be set by the caller. * Setting any of these creates the assumption that the * calculation is already done, and sets the checksumFinished * flag to inhibit recalculation. */ public final void setCRC32 (CRC32 crc32) { _crc32 = crc32; _checksumFinished = true; } /** * Set the degree of verbosity desired from the module. The setting * of param can override the verbosity setting. * It does not affect whether raw data are reported or not, only * which data are reported. * * * @param verbosity The requested verbosity value. Recognized * values are Module.MINIMUM_VERBOSITY and Module.MAXIMUM_VERBOSITY. * The interpretation of the value depends on the module, and * the module may choose not to use this setting. However, * modules should treat MAXIMUM_VERBOSITY as a request for * all the data available from the module. */ public void setVerbosity (int verbosity) { _verbosity = verbosity; } /** * Sets the byte count for the content object, and sets * the checksumFinished flag. */ public final void setNByte (long nByte) { _nByte = nByte; _checksumFinished = true; } /** * Sets the MD5 calculated digest for the content object, and sets * the checksumFinished flag. */ public final void setMD5 (MessageDigest md5) { _md5 = md5; _checksumFinished = true; } /** * Sets the SHA-1 calculated digest for the content object, and sets * the checksumFinished flag. */ public final void setSHA1 (MessageDigest sha1) { _sha1 = sha1; _checksumFinished = true; } /****************************************************************** * Parsing methods. ******************************************************************/ /** * Parse the content of a stream digital object and store the * results in RepInfo. * A given Module will normally override only one of the two * parse methods; the default method does nothing. * * @param stream An InputStream, positioned at its beginning, * which is generated from the object to be parsed. * If multiple calls to parse are made * on the basis of a nonzero value being returned, * a new InputStream must be provided each time. * * @param info A fresh (on the first call) RepInfo object * which will be modified * to reflect the results of the parsing * If multiple calls to parse are made * on the basis of a nonzero value being returned, * the same RepInfo object should be passed with each * call. * * @param parseIndex Must be 0 in first call to parse. If * parse returns a nonzero value, it must be * called again with parseIndex * equal to that return value. */ public int parse (InputStream stream, RepInfo info, int parseIndex) throws IOException { return 0; } /** * Parse the content of a random access digital object and store the * results in RepInfo. * A given Module will normally override only one of the two * parse methods; the default method does nothing. * * @param file A RandomAccessFile, positioned at its beginning, * which is generated from the object to be parsed * @param info A fresh RepInfo object which will be modified * to reflect the results of the parsing */ public void parse (RandomAccessFile file, RepInfo info) throws IOException { } /** * Check if the digital object conforms to this Module's * internal signature information. * This function checks the file against the list of predefined * signatures for the module. If there are no predefined * signatures, it calls parse with the arguments passed to it. * Override this for modules that check digital signatures in * some other way. Any module for which the signature may be located * other than at the beginning of the file must override. * * @param file A File object for the object being parsed * @param stream An InputStream, positioned at its beginning, * which is generated from the object to be parsed * @param info A fresh RepInfo object which will be modified * to reflect the results of the test */ public void checkSignatures (File file, InputStream stream, RepInfo info) throws IOException { info.setFormat (_format[0]); info.setMimeType (_mimeType[0]); info.setModule (this); int sigsChecked = 0; if (_signature.size() > 0) { /* Get each of the internal sigs defined for the module * and test it. All sigs must be present. If there are * no internal signatures, this test is meaningless. */ byte[] sigBuf = new byte[1024]; stream.read(sigBuf); stream.close(); ListIterator iter = _signature.listIterator(); while (iter.hasNext ()) { Signature sig = ((Signature) iter.next ()); if (sig instanceof InternalSignature) { InternalSignature isig = (InternalSignature) sig; int[] sigValue = isig.getValue (); int offset = isig.getOffset(); boolean match = true; for (int i = 0; i < sigValue.length; i++) { if (sigBuf[offset + i] != sigValue[i]) { match = false; break; } } if (!match && isig.getUse().equals (SignatureUseType.MANDATORY)) { info.setWellFormed (false); return; } if (match) { // Only count optional signatures if they match. ++sigsChecked; } } } } if (sigsChecked == 0) { // No internal sigs defined, parse the file. int parseIndex = parse (stream, info, 0); while (parseIndex != 0) { stream.close (); stream = new FileInputStream (file); parseIndex = parse (stream, info, parseIndex); } } else if (info.getWellFormed() == RepInfo.TRUE) { info.setSigMatch(_name); } } /** * Check if the digital object conforms to this Module's * internal signature information. * * @param file A File object representing the object to be * parsed * * @param raf A RandomAccessFile, positioned at its beginning, * which is generated from the object to be parsed * * @param info A fresh RepInfo object which will be modified * to reflect the results of the test */ public void checkSignatures (File file, RandomAccessFile raf, RepInfo info) throws IOException { info.setFormat (_format[0]); info.setMimeType (_mimeType[0]); info.setModule (this); int sigsChecked = 0; /* Get each of the internal sigs defined for the module * and test it. */ ListIterator iter = _signature.listIterator(); try { while (iter.hasNext ()) { Signature sig = ((Signature) iter.next ()); if (sig instanceof InternalSignature) { InternalSignature isig = (InternalSignature) sig; /* What about non-fixed offset? */ raf.seek (isig.getOffset ()); int[] sigValue = isig.getValue (); boolean match = true; for (int i = 0; i < sigValue.length; i++) { if (readUnsignedByte (raf) != sigValue[i]) { match = false; break; } } if (!match && isig.getUse().equals (SignatureUseType.MANDATORY)) { info.setWellFormed (false); break; } if (match) { // Only count optional signatures if they match. ++sigsChecked; } } } } catch (Exception e) { // We may get here on a short file. info.setWellFormed (false); return; } // Must match at least one signature. if (sigsChecked == 0) { info.setWellFormed (false); } else if (info.getWellFormed() == RepInfo.TRUE) { info.setSigMatch(_name); } } /** * Initializes the state of the module for parsing. This should be * called early in each module's parse() method. If a module * overrides it to provide additional functionality, the module's * initParse() should call super.initParse(). */ protected void initParse () { _logger.info (_name + " called initParse"); _checksumFinished = false; _nByte = 0; _crc32 = new CRC32 (); try { _md5 = MessageDigest.getInstance ("MD5"); _sha1 = MessageDigest.getInstance ("SHA-1"); } catch (NoSuchAlgorithmException e) { } } /** * Calculates the checksums for a module that uses a * random access file. */ protected void calcRAChecksum (Checksummer ckSummer, RandomAccessFile raf) throws IOException { if (ckSummer == null) { return; } raf.seek (0); byte [] buffer = new byte[_je.getBufferSize ()]; int n = -1; try { while ((n = raf.read (buffer)) != -1) { if (n > 0) { ckSummer.update (buffer, 0, n); } } } catch (Exception e) {} } /** * Set the checksum values. * @param ckSummer Checksummer object * @param info RepInfo object */ protected void setChecksums (Checksummer ckSummer, RepInfo info) { if (ckSummer != null){ info.setChecksum (new Checksum (ckSummer.getCRC32 (), ChecksumType.CRC32)); String value = ckSummer.getMD5 (); if (value != null) { info.setChecksum (new Checksum (value, ChecksumType.MD5)); } if ((value = ckSummer.getSHA1 ()) != null) { info.setChecksum (new Checksum (value, ChecksumType.SHA1)); } } } /** * Generates information about this Module. * The format of the output depends on the OutputHandler. */ public void show (OutputHandler handler) { handler.show (this); } /****************************************************************** * PRIVATE INSTANCE METHODS. ******************************************************************/ /** * Returns the hex string representation of the CRC32 result. */ protected String getCRC32 () { return Long.toHexString (_crc32.getValue ()); } /****************************************************************** * PUBLIC INSTANCE METHODS. ******************************************************************/ /** * Returns an Property representing an integer value. * If raw output is specified for the module, returns * an INTEGER property, and labels and * index are unused. Otherwise, * returns a STRING property, with the * string being the element of labels * whose index is the index of * value in index. */ public Property addIntegerProperty( String name, int value, String[] labels, int[] index) { boolean rawOutput = _je.getShowRawFlag (); Property prop = null; if (!rawOutput) { int n = -1; for (int i = 0; i < index.length; i++) { if (value == index[i]) { n = i; break; } } if (n > -1) { prop = new Property(name, PropertyType.STRING, labels[n]); } } if (prop == null) { prop = new Property(name, PropertyType.INTEGER, new Integer(value)); } return prop; } /** * Returns an Property representing an integer value. * If raw output is specified for the module, returns * an INTEGER property, and labels and * index are unused. Otherwise, * returns a STRING property, with the * string being the element of labels * whose index is value. */ public Property addIntegerProperty (String name, int value, String [] labels) { if (!_je.getShowRawFlag ()) { try { return new Property (name, PropertyType.STRING, labels[value]); } catch (Exception e) { // fall through } } return new Property (name, PropertyType.INTEGER, new Integer (value)); } /** * Reads an unsigned byte from a DataInputStream. * @param stream Stream to read */ public static int readUnsignedByte (DataInputStream stream) throws IOException { return readUnsignedByte (stream, null); } /** * Reads an unsigned byte from a DataInputStream. * @param stream Stream to read * @param counted If non-null, module for which value of _nByte * shall be incremented appropriately */ public static int readUnsignedByte (DataInputStream stream, ModuleBase counted) throws IOException { int val = stream.readUnsignedByte(); if (counted != null) { counted._nByte++; } return val; } /** * Reads an unsigned byte from a RandomAccessFile. */ public static int readUnsignedByte (RandomAccessFile file) throws IOException { return file.readUnsignedByte (); } /** * Reads into a byte buffer from a DataInputStream. * * @param stream Stream to read from * @param buf Byte buffer to fill up * @param counted If non-null, module for which value of _nByte * shall be incremented appropriately */ public static int readByteBuf (DataInputStream stream, byte[] buf, ModuleBase counted) throws IOException { int bytesRead = stream.read (buf); if (counted != null && bytesRead > 0) { counted._nByte += bytesRead; } return bytesRead; } /** * Reads two bytes as an unsigned short value from a DataInputStream. * @param stream The stream to read from. * @param bigEndian If true, interpret the first byte as the high * byte, otherwise interpret the first byte as * the low byte. */ public static int readUnsignedShort (DataInputStream stream, boolean bigEndian) throws IOException { return readUnsignedShort (stream, bigEndian, null); } /** * Reads two bytes as an unsigned short value from a DataInputStream. * @param stream The stream to read from. * @param bigEndian If true, interpret the first byte as the high * byte, otherwise interpret the first byte as * the low byte. */ public static int readUnsignedShort (DataInputStream stream, boolean bigEndian, ModuleBase counted) throws IOException { int n = 0; if (bigEndian) { n = stream.readUnsignedShort (); } else { int b1 = stream.readUnsignedByte (); int b0 = stream.readUnsignedByte (); n = (b0 << 8) | b1; } if (counted != null) { counted._nByte += 2; } return n; } /** * Reads two bytes as an unsigned short value from a * RandomAccessFile. * * @param file The file to read from. * @param bigEndian If true, interpret the first byte as the high * byte, otherwise interpret the first byte as * the low byte. */ public static int readUnsignedShort (RandomAccessFile file, boolean bigEndian) throws IOException { int n = 0; if (bigEndian) { n = file.readUnsignedShort (); } else { int b1 = file.readUnsignedByte (); int b0 = file.readUnsignedByte (); n = (b0 << 8) | b1; } return n; } /** * Reads four bytes as an unsigned 32-bit value from a * DataInputStream. * * @param stream The stream to read from. * @param bigEndian If true, interpret the first byte as the high * byte, otherwise interpret the first byte as * the low byte. */ public static long readUnsignedInt (DataInputStream stream, boolean bigEndian) throws IOException { return readUnsignedInt (stream, bigEndian, null); } /** * Reads four bytes as an unsigned 32-bit value from a * DataInputStream. * * @param stream The stream to read from. * @param bigEndian If true, interpret the first byte as the high * byte, otherwise interpret the first byte as * the low byte. */ public static long readUnsignedInt (DataInputStream stream, boolean bigEndian, ModuleBase counted) throws IOException { long n = 0; if (bigEndian) { n = stream.readInt(); /* This is a signed value. */ if (n < 0) { //n = 2147483648L + n; n = (long) n & 0XFFFFFFFFL; } } else { long b3 = stream.readUnsignedByte (); long b2 = stream.readUnsignedByte (); long b1 = stream.readUnsignedByte (); long b0 = stream.readUnsignedByte (); n = (b0 << 24) | (b1 << 16) | (b2 << 8) | b3; } if (counted != null) { counted._nByte += 4; } return n; } /** * Reads four bytes as an unsigned 32-bit value from a * RandomAccessFile. * * @param file The file to read from. * @param bigEndian If true, interpret the first byte as the high * byte, otherwise interpret the first byte as * the low byte. */ public static long readUnsignedInt (RandomAccessFile file, boolean bigEndian) throws IOException { long n = 0; if (bigEndian) { n = file.readInt(); /* This is a signed value. */ if (n < 0) { //n = 2147483648L + n; n = (long) n & 0XFFFFFFFFL; } } else { // For efficiency, do one read rather than four byte buf[] = new byte[4]; file.read (buf); long b3 = buf[0] & 0XFFL; long b2 = buf[1] & 0XFFL; long b1 = buf[2] & 0XFFL; long b0 = buf[3] & 0XFFL; n = (b0 << 24) | (b1 << 16) | (b2 << 8) | b3; } return n; } /** * Reads eight bytes as a signed 64-bit value from a * DataInputStream. (There is no way in Java to have * an unsigned long.) * * @param stream The stream to read from. * @param bigEndian If true, interpret the first byte as the high * byte, otherwise interpret the first byte as * the low byte. */ public static long readSignedLong (DataInputStream stream, boolean bigEndian, ModuleBase counted) throws IOException { long n = 0; if (bigEndian) { n = stream.readLong(); /* This is a signed value. */ } else { long b7 = stream.readUnsignedByte (); long b6 = stream.readUnsignedByte (); long b5 = stream.readUnsignedByte (); long b4 = stream.readUnsignedByte (); long b3 = stream.readUnsignedByte (); long b2 = stream.readUnsignedByte (); long b1 = stream.readUnsignedByte (); long b0 = stream.readUnsignedByte (); n = (b0 << 56) | (b1 << 48) | (b2 << 40) | (b3 << 32) | (b4 << 24) | (b5 << 16) | (b6 << 8) | b7; } if (counted != null) { counted._nByte += 8; } return n; } public static Rational readUnsignedRational (DataInputStream stream, boolean endian) throws IOException { return readUnsignedRational (stream, endian, null); } public static Rational readUnsignedRational (DataInputStream stream, boolean endian, ModuleBase counted) throws IOException { long n = readUnsignedInt (stream, endian, counted); long d = readUnsignedInt (stream, endian, counted); return new Rational (n, d); } public static Rational readUnsignedRational (RandomAccessFile file, boolean endian) throws IOException { long n = readUnsignedInt (file, endian); long d = readUnsignedInt (file, endian); return new Rational (n, d); } public static Rational readSignedRational (DataInputStream stream, boolean endian, ModuleBase counted) throws IOException { long n = readSignedInt (stream, endian, counted); long d = readSignedInt (stream, endian, counted); return new Rational (n, d); } public static Rational readSignedRational (RandomAccessFile file, boolean endian) throws IOException { long n = readSignedInt (file, endian); long d = readSignedInt (file, endian); return new Rational (n, d); } public static int readSignedByte (RandomAccessFile file) throws IOException { return file.readByte (); } public static int readSignedShort (RandomAccessFile file, boolean endian) throws IOException { int b = readUnsignedShort (file, endian); if ((b & 0X8000) != 0) { b |= ~0XFFFF; } return b; } public static int readSignedInt (RandomAccessFile file, boolean endian) throws IOException { long b = readUnsignedInt (file, endian); if ((b & 0X80000000L) != 0) { b |= ~0XFFFFFFFFL; } return (int) b; } public static int readSignedByte (DataInputStream stream) throws IOException { return readSignedByte (stream, null); } public static int readSignedByte (DataInputStream stream, ModuleBase counted) throws IOException { int val = stream.readByte (); if (counted != null) { counted._nByte++; } return val; } public static int readSignedShort (DataInputStream stream, boolean endian) throws IOException { return readSignedShort (stream, endian, null); } public static int readSignedShort (DataInputStream stream, boolean endian, ModuleBase counted) throws IOException { int b = readUnsignedShort (stream, endian, counted); if ((b & 0X8000) != 0) { b |= ~0XFFFF; } return b; } public static int readSignedInt (DataInputStream stream, boolean endian) throws IOException { return readSignedInt (stream, endian, null); } public static int readSignedInt (DataInputStream stream, boolean endian, ModuleBase counted) throws IOException { long b = readUnsignedInt (stream, endian, counted); if ((b & 0X80000000L) != 0) { b |= ~0XFFFFFFFFL; } return (int) b; } public static float readFloat (RandomAccessFile file, boolean endian) throws IOException { float f = 0.0F; if (endian) { f = file.readFloat (); } else { // For efficiency, do one read rather than four byte buf[] = new byte[4]; file.read (buf); int b3 = buf[0] & 0XFF; int b2 = buf[1] & 0XFF; int b1 = buf[2] & 0XFF; int b0 = buf[3] & 0XFF; f = Float.intBitsToFloat (b0<<24 | b1<<16 | b2<<8 | b3); } return f; } public static float readFloat (DataInputStream stream, boolean endian, ModuleBase counted) throws IOException { float f = 0.0F; if (endian) { f = stream.readFloat (); } else { int b3 = stream.readUnsignedByte (); int b2 = stream.readUnsignedByte (); int b1 = stream.readUnsignedByte (); int b0 = stream.readUnsignedByte (); f = Float.intBitsToFloat (b0<<24 | b1<<16 | b2<<8 | b3); } if (counted != null) { counted._nByte += 4; } return f; } public static double readDouble (RandomAccessFile file, boolean endian) throws IOException { double f = 0.0F; if (endian) { f = file.readDouble (); } else { // For efficiency, do one read rather than eight byte buf[] = new byte[8]; file.read (buf); long b7 = buf[0] & 0XFFL; long b6 = buf[1] & 0XFFL; long b5 = buf[2] & 0XFFL; long b4 = buf[3] & 0XFFL; long b3 = buf[4] & 0XFFL; long b2 = buf[5] & 0XFFL; long b1 = buf[6] & 0XFFL; long b0 = buf[7] & 0XFFL; f = Double.longBitsToDouble (b0<<56 | b1<<48 | b2<<40 | b3<<32 | b4<<24 | b5<<16 | b6<< 8 | b7); } return f; } public static double readDouble (DataInputStream stream, boolean endian) throws IOException { return readDouble (stream, endian, null); } public static double readDouble (DataInputStream stream, boolean endian, ModuleBase counted) throws IOException { double f = 0.0F; if (endian) { f = stream.readDouble (); } else { long b7 = (long) stream.readUnsignedByte (); long b6 = (long) stream.readUnsignedByte (); long b5 = (long) stream.readUnsignedByte (); long b4 = (long) stream.readUnsignedByte (); long b3 = (long) stream.readUnsignedByte (); long b2 = (long) stream.readUnsignedByte (); long b1 = (long) stream.readUnsignedByte (); long b0 = (long) stream.readUnsignedByte (); f = Double.longBitsToDouble (b0<<56 | b1<<48 | b2<<40 | b3<<32 | b4<<24 | b5<<16 | b6<< 8 | b7); } if (counted != null) { counted._nByte += 8; } return f; } /* Skip over some bytes. */ public int skipBytes (DataInputStream stream, int bytesToSkip) throws IOException { return skipBytes (stream, bytesToSkip, null); } /* Skip over some bytes. */ public int skipBytes (DataInputStream stream, int bytesToSkip, ModuleBase counted) throws IOException { int n = stream.skipBytes (bytesToSkip); if (counted != null) { counted._nByte += n; } return n; } /** * A convenience method for getting a buffered DataInputStream * from a module's InputStream. If the size specified is 0 or * less, the default buffer size is used. */ public static DataInputStream getBufferedDataStream (InputStream stream, int size) { BufferedInputStream bis; if (size <= 0) { bis = new BufferedInputStream (stream); } else { bis = new BufferedInputStream (stream, size); } return new DataInputStream (bis); } /** * A utility for converting a Vector of Properties to an * Array. It can be simpler to build a Vector and then * call VectorToPropArray than to allocate an array and * drop all the Properites into the correct indices. * All the members of the Vector must be of type Property, * or a ClassCastException will be thrown. */ protected Property[] vectorToPropArray (Vector vec) { Property[] prop = new Property[vec.size ()]; for (int i = 0; i < vec.size (); i++) { prop[i] = (Property) vec.elementAt (i); } return prop; } } jhove/classes/edu/harvard/hul/ois/jhove/NisoImageMetadata.java0000644000707400001440000014234411205030252023572 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove; /** * Encapsulation of the NISO Z39.87-2002 / AIIM 20-2002 Data Dictionary -- * Technical Metadata for Digital Still Images */ public class NisoImageMetadata { /****************************************************************** * PUBLIC CLASS FIELDS. ******************************************************************/ /** 7.7.3.15 auto focus value labels. */ public static final String [] AUTOFOCUS = { "unidentified", "auto focus used", "auto focus interrupted", "near focused", "soft focus", "manual" }; /** 7.7.3.13 back light value labels. */ public static final String [] BACKLIGHT = { "front leight", "backlight 1", "backlight 2" }; /** 6.1.2 byte order value labels. */ public static final String [] BYTEORDER = { "big-endian", "little-endian" }; /** 6.2.3.1 Checksum method value labels. */ public static final String [] CHECKSUM_METHOD = { "CRC32", "MD5", "SHA-1" }; /** 6.1.4.1 Color space value labels. */ public static final String [] COLORSPACE = { "white is zero", "black is zero", "RGB", "palette color", "transparency mask", "CMYK", "YCbCr", "CIE L*a*b*", "ICC L*a*b*", "ITU L*a*b*", "CFA", "CIE Log2(L)", "CIE Log2(L)(u',v')", "LinearRaw" }; /** Index for 6.1.4.1 color space value labels. */ public static final int [] COLORSPACE_INDEX = { 0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 32803, 32844, 32845, 34892 }; /** 6.1.3.1 Compression scheme value labels. */ public static final String [] COMPRESSION_SCHEME = { "uncompressed", "CCITT 1D", "CCITT Group 3", "CCITT Group 4", /* 1-4 */ "LZW", "JPEG", "ISO JPEG", "Deflate", /* 5-8 */ "JBIG", /* 32661 */ "RLE with word alignment", /* 32771 */ "PackBits", "NeXT 2-bit encoding", "ThunderScan 4-bit encoding", /* 32773- */ "RasterPadding in CT or MP", /* 32895 */ "RLE for LW", "RLE for HC", "RLE for BL", /* 32896-8 */ "Pixar 10-bit LZW", /* 32908 */ "Pixar companded 11-bit ZIP encoding", /* 32909 */ "PKZIP-style Deflate encoding", /* 32946 */ "Kodak DCS", /* 32947 */ "SGI 32-bit Log Luminance encoding", /* 34676 */ "SGI 24-bit Log Luminance encoding", /* 34677 */ "JPEG 2000" /* 34712 */ }; /** Index for 6.1.3.1 compression scheme value labels. */ public static final int [] COMPRESSION_SCHEME_INDEX = { 1, 2, 3, 4, 5, 6, 7, 8, 32661, 32771, 32773, 32766, 32809, 32895, 32896, 32897, 32898, 32908, 32909, 32946, 32947, 34676, 34677, 34712 }; /** 6.2.5 display orientation value labels. */ public static final String [] DISPLAY_ORIENTATION = { "portrait", "landscape" }; public static final String [] EXTRA_SAMPLES = { "unspecified", "associated alpha", "unassociated alpha", "range or depth" }; /** 7.7.3.10 flash value labels. */ public static final String [] FLASH = { "yes", "no" }; /** 7.7.3.12 flash return value labels. */ public static final String [] FLASH_RETURN = { "yes", "no" }; /** 8.2.6 gray response unit value labels. */ public static final String [] GRAY_RESPONSE_UNIT = { "", "tenths of a unit", "hundredths of a unit", "thousandths of a unit", "ten-thousandths of a unit", "hundred-thousandths of a unit" }; /** 7.7.3.6 metering mode value labels. */ public static final String [] METERING_MODE = { "unidentified", "average", "center-weighted average", "spot", "multispot", "pattern", "partial" }; /** 6.2.4 orientation value labels. */ public static final String [] ORIENTATION = { "", "normal", "reflected horiz", "rotated 180 deg", "reflected vert", "left top", "rotated cw 90 deg", "Right bottom", "Rotated ccw 90 deg", "Unknown" }; /** 6.1.6 planar configuration value labels. */ public static final String [] PLANAR_CONFIGURATION = { "", "chunky", "planar" }; /** 8.1.1 sampling frequency plane value labels. */ public static final String [] SAMPLING_FREQUENCY_PLANE = { "", "camera/scanner focal plane", "object plane", "source object plane" }; /** 8.1.2 sampling frequency unit value labels. */ public static final String [] SAMPLING_FREQUENCY_UNIT = { "", "no absolute unit", "inch", "centimeter" }; /** 7.7.3.7 scene illuminant value labels. */ public static final String [] SCENE_ILLUMINANT = { "unidentified", "daylight", "fluorescent", "tungsten lamp", "flash", "standard illuminant A", "standard illuminat B", "standard illuminant C", "D55 illuminant", "D65 illuminant", "D75 illuminant" }; /** Index for 7.7.3.7 scene illuminant value labels. */ public static final int [] SCENE_ILLUMINANT_INDEX = { 0, 1, 2, 3, 10, 17, 18, 19, 20, 21, 22 }; /** 6.1.5.1 segment type value labels. */ public static final String [] SEGMENT_TYPE = { "strips", "tiles" }; /** 7.8 sensor value labels. */ public static final String [] SENSOR = { "Undefined", "MonochromeArea", "OneChipColorArea", "TwoChipColorArea", "ThreeChipColorArea", "ColorSequentialArea", "MonochromeLinear", "ColorTriLinear", "ColorSequentialLinear" }; /** 8.1.7.1 (8.1.8.1) source dimension unit. */ public static final String [] SOURCE_DIMENSION_UNIT = { "inches", "mm" }; /** 6.1.4.4 YCbCr positioning value labels. */ public static final String [] YCBCR_POSITIONING = { "", "centered", "cosited" }; /** 8.3.1 TargetType. */ public static final String [] TARGET_TYPE = { "external", "internal" }; /** Undefined value. */ public static final int NULL = -1; public static final double NILL = -1.0; /****************************************************************** * PRIVATE INSTANCE FIELDS. * * 6 Basic image parameters ******************************************************************/ /** 6.1.1 MIME type */ private String _mimeType; /** 6.1.2 Byte order */ private String _byteOrder; /** 6.1.3.1 Compression scheme */ private int _compressionScheme; /** 6.1.3.2 Compression level */ private int _compressionLevel; /** 6.1.4.1 Color space */ private int _colorSpace; /** 6.1.4.2.1 ICC profile name */ private String _profileName; /** 6.1.4.2.2 ICC profile url */ private String _profileURL; /** 6.1.4.3 YCbCr sub-sampling */ private int [] _yCbCrSubSampling; /** 6.1.4.4 YCbCr positioning */ private int _yCbCrPositioning; /** 6.1.4.5 YCbCr coefficients */ private Rational [] _yCbCrCoefficients; /** 6.1.4.6 Reference black and white */ private Rational [] _referenceBlackWhite; /** 6.1.5.1 Segment type */ private int _segmentType; /** 6.1.5.2 Strip offsets */ private long [] _stripOffsets; /** 6.1.5.3 Rows per strip */ private long _rowsPerStrip; /** 6.1.5.4 Strip byte counts */ private long [] _stripByteCounts; /** 6.1.5.5 Tile width */ private long _tileWidth; /** 6.1.5.6 Tile length */ private long _tileLength; /** 6.1.5.7 Tile offsets */ private long [] _tileOffsets; /** 6.1.5.8 Tile byte counts */ private long [] _tileByteCounts; /** 6.1.6 Planar configuration */ private int _planarConfiguration; /** 6.2.1 Image identifier */ private String _imageIdentifier; /** 6.2.1.1 Image identifier location */ private String _imageIdentifierLocation; /** 6.2.2 File size */ private long _fileSize; /** 6.2.3.1 Checksum method */ private int _checksumMethod; /** 6.2.3.2 Checksum value */ private String _checksumValue; /** 6.2.4 orientation */ private int _orientation; /** 6.2.5 Display orientation */ private int _displayOrientation; /** 6.2.6.1 X targeted display aspect ratio */ private long _xTargetedDisplayAR; /** 6.2.6.2 Y targeted display aspect ratio */ private long _yTargetedDisplayAR; /** 6.3 Preferred presentation */ private String _preferredPresentation; /****************************************************************** * 7 Image creation ******************************************************************/ /** 7.1 Source type */ private String _sourceType; /** 7.2 Source ID */ private String _sourceID; /** 7.3 Image producer */ private String _imageProducer; /** 7.4 Host computer */ private String _hostComputer; /** 7.4.1 Operating system */ private String _os; /** 7.4.2 OS version */ private String _osVersion; /** 7.5 Device source */ private String _deviceSource; /** 7.6.1.1 Scanner system manufacturer */ private String _scannerManufacturer; /** 7.6.1.2.1 Scanner model name */ private String _scannerModelName; /** 7.6.1.2.2 Scanner model number */ private String _scannerModelNumber; /** 7.6.1.2.3 Scanner model serial number */ private String _scannerModelSerialNo; /** 7.6.2.1 Scanning software */ private String _scanningSoftware; /** 7.6.2.2 Scanning software version number */ private String _scanningSoftwareVersionNo; /** 7.6.3 Pixel size (in meters) */ private double _pixelSize; /** 7.6.3.2.1 X physical scan resolution */ private double _xPhysScanResolution; /** 7.6.3.2.2 Y physical scan resolution */ private double _yPhysScanResolution; /** 7.7.1 Digital camera manufacturer */ private String _digitalCameraManufacturer; /** 7.7.2 Digital camera model */ private String _digitalCameraModel; /** 7.7.3.1 F number */ private double _fNumber; /** 7.7.3.2 Exposure time */ private double _exposureTime; /** 7.7.3.3 Brightness */ private double _brightness; /** 7.7.3.4 Exposure bias */ private double _exposureBias; /** 7.7.3.5 Subject distance */ private double [] _subjectDistance; /** 7.7.3.6 Metering mode */ private int _meteringMode; /** 7.7.3.7 Scene illuminant */ private int _sceneIlluminant; /** 7.7.3.8 Color temperature */ private double _colorTemp; /** 7.7.3.9 Focal length (in meters) */ private double _focalLength; /** 7.7.3.10 Flash */ private int _flash; /** 7.7.3.11 Flash energy */ private double _flashEnergy; /** 7.7.3.12 Flash return */ private int _flashReturn; /** 7.7.3.13 Back light */ private int _backLight; /** 7.7.3.14 Exposure index */ private double _exposureIndex; /** 7.7.3.15 Auto focus */ private int _autoFocus; /** 7.7.3.16.1 X print aspect ratio */ private double _xPrintAspectRatio; /** 7.7.3.16.2 Y print aspect ratio */ private double _yPrintAspectRatio; /** 7.8 Sensor */ private int _sensor; /** 7.9 Date/time created */ private String _dateTimeCreated; /** 7.10 Methodology */ private String _methodology; /****************************************************************** * Imaging performance assessment ******************************************************************/ /** 8.1.1 Sampling frequency plane */ private int _samplingFrequencyPlane; /** 8.1.2 Sampling frequency unit */ private int _samplingFrequencyUnit; /** 8.1.3 X sampling frequency */ private Rational _xSamplingFrequency; /** 8.1.4 Y sampling frequency */ private Rational _ySamplingFrequency; /** 8.1.5 Image width */ private long _imageWidth; /** 8.1.6 Image Length */ private long _imageLength; /** 8.1.7 Source X dimension */ private double _sourceXDimension; /** 8.1.8 Source X dimension unit */ private int _sourceXDimensionUnit; /** 8.1.9 Source Y dimension */ private double _sourceYDimension; /** 8.1.10 Source Y dimension unit */ private int _sourceYDimensionUnit; /** 8.2.1 Bits per sample */ private int [] _bitsPerSample; /** 8.2.2 Samples per pixel */ private int _samplesPerPixel; /** 8.2.3 Extra samples */ private int [] _extraSamples; /** 8.2.4.1 Colormap reference */ private String _colormapReference; /** 8.2.4.2 Colormap bit code value */ private int [] _colormapBitCodeValue; /** 8.2.4.3 Colormap red value */ private int [] _colormapRedValue; /** 8.2.4.4 Colormap green value */ private int [] _colormapGreenValue; /** 8.2.4.5 Colormap blue value */ private int [] _colormapBlueValue; /** 8.2.5 Gray response curve */ private int [] _grayResponseCurve; /** 8.2.6 Gray response unit */ private int _grayResponseUnit; /** 8.2.7.1 Whitepoint X value */ private Rational _whitePointXValue; /** 8.2.7.2 Whitepoint Y value */ private Rational _whitePointYValue; /** 8.2.8.1 Primary chromaticities Red X */ private Rational _primaryChromaticitiesRedX; /** 8.2.8.2 Primary chromaticities Red Y */ private Rational _primaryChromaticitiesRedY; /** 8.2.8.3 Primary chromaticities Green X */ private Rational _primaryChromaticitiesGreenX; /** 8.2.8.4 Primary chromaticities Green Y */ private Rational _primaryChromaticitiesGreenY; /** 8.2.8.5 Primary chromaticities Blue X */ private Rational _primaryChromaticitiesBlueX; /** 8.2.8.6 Primary chromaticities Blue Y */ private Rational _primaryChromaticitiesBlueY; /* 8.3 Target data */ /** 8.3.1 Target Type */ private int _targetType; /** 8.3.2.1 TargetIDManufacturer */ private String _targetIDManufacturer; /** 8.3.2.2 TargetIDName */ private String _targetIDName; /** 8.3.2.3 TargetIDNo */ private String _targetIDNo; /** 8.3.2.4 TargetIDMedia */ private String _targetIDMedia; /** 8.3.3 ImageData */ private String _imageData; /** 8.3.4 PerformanceData */ private String _performanceData; /** 8.3.5 Profiles */ private String _profiles; /* 9 Change history */ /** 9.1.1 DateTimeProcessed */ private String _dateTimeProcessed; /** 9.1.2 SourceData */ private String _sourceData; /** 9.1.3 ProcessingAgency */ private String _processingAgency; /** 9.1.4.1 ProcessingSoftwareName */ private String _processingSoftwareName; /** 9.1.4.2 ProcessingSoftwareVersion */ private String _processingSoftwareVersion; /** 9.1.5 ProcessingActions */ private String[] _processingActions; /* 9.2 PreviousImageMetadata -- not currently supported */ /* Data for Swing-based viewer. */ private Property _viewerData; /****************************************************************** * CLASS CONSTRUCTOR. ******************************************************************/ /** Instantiate a NisoImageMetadata object. */ public NisoImageMetadata () { _autoFocus = NULL; _backLight = NULL; _brightness = NILL; _checksumMethod = NULL; _colorSpace = NULL; _colorTemp = NILL; _compressionLevel = NULL; _compressionScheme = NULL; _dateTimeProcessed = null; _displayOrientation = NULL; _exposureBias = NILL; _exposureIndex = NILL; _exposureTime = NILL; _fileSize = NULL; _flash = NULL; _flashEnergy = NILL; _flashReturn = NULL; _fNumber = NILL; _focalLength = NILL; _grayResponseUnit = NULL; _imageData = null; _imageLength = NULL; _imageWidth = NULL; _meteringMode = NULL; _orientation = NULL; _performanceData = null; _pixelSize = NILL; _planarConfiguration = NULL; _processingActions = null; _processingAgency = null; _processingSoftwareName = null; _processingSoftwareVersion = null; _profiles = null; _rowsPerStrip = NULL; _samplesPerPixel = NULL; _samplingFrequencyPlane = NULL; _samplingFrequencyUnit = NULL; _sceneIlluminant = NULL; _segmentType = NULL; _sensor = NULL; _sourceData = null; _sourceXDimension = NILL; _sourceXDimensionUnit = NULL; _sourceYDimension = NILL; _sourceYDimensionUnit = NULL; _tileLength = NULL; _tileWidth = NULL; _targetIDManufacturer = null; _targetIDMedia = null; _targetIDName = null; _targetIDNo = null; _targetType = NULL; _xPhysScanResolution = NILL; _xPrintAspectRatio = NILL; _xSamplingFrequency = null; _xTargetedDisplayAR = NULL; _yCbCrPositioning = NULL; _yPhysScanResolution = NILL; _yPrintAspectRatio = NILL; _ySamplingFrequency = null; _yTargetedDisplayAR = NULL; _viewerData = null; } /****************************************************************** * PUBLIC INSTANCE METHODS. * * Accessor methods. ******************************************************************/ /** Get 7.7.3.15 auto focus. */ public int getAutoFocus () { return _autoFocus; } /** Get 7.7.3.13 back light. */ public int getBackLight () { return _backLight; } /** Get 8.2.1 bits per sample. */ public int [] getBitsPerSample () { return _bitsPerSample; } /** Get 7.7.3.3 Brightness. */ public double getBrightness () { return _brightness; } /** Get 6.1.2 byte order. */ public String getByteOrder () { return _byteOrder; } /** Get 6.2.3.1 Checksum method. */ public int getChecksumMethod () { return _checksumMethod; } /** Get 6.2.3.2 Checksum value. */ public String getChecksumValue () { return _checksumValue; } /** Get 8.2.4.2 colormap bit code value. */ public int [] getColormapBitCodeValue () { return _colormapBitCodeValue; } /** Get 8.2.4.5 colormap blue value. */ public int [] getColormapBlueValue () { return _colormapBlueValue; } /** Get 8.2.4.4 colormap green value. */ public int [] getColormapGreenValue () { return _colormapGreenValue; } /** Get 8.2.4.3 colormap red value. */ public int [] getColormapRedValue () { return _colormapRedValue; } /** Get 8.2.4.1 colormap reference. */ public String getColormapReference () { return _colormapReference; } /** Get 6.1.4.1 color space. */ public int getColorSpace () { return _colorSpace; } /** Get 7.7.3.8 color temperature. */ public double getColorTemp () { return _colorTemp; } /** Get 6.1.3.2 compression level. */ public int getCompressionLevel () { return _compressionLevel; } /** Get 6.1.3.1 compression scheme. */ public int getCompressionScheme () { return _compressionScheme; } /** Get 7.9 date/time created. */ public String getDateTimeCreated () { return _dateTimeCreated; } /** Get 9.1.1 DateTimeProcessed */ public String getDateTimeProcessed () { return _dateTimeProcessed; } /** Get 7.5 device source. */ public String getDeviceSource () { return _deviceSource; } /** Get 7.7.1 digital camera manufacturer. */ public String getDigitalCameraManufacturer () { return _digitalCameraManufacturer; } /** Get 7.7.2 digital camera model. */ public String getDigitalCameraModel () { return _digitalCameraModel; } /** Get 6.2.5 Display orientation. */ public int getDisplayOrientation () { return _displayOrientation; } /** Get 7.7.3.4 exposure bias. */ public double getExposureBias () { return _exposureBias; } /** Get 7.7.3.14 exposure index. */ public double getExposureIndex () { return _exposureIndex; } /** Get 7.7.3.2 exposure time. */ public double getExposureTime () { return _exposureTime; } /** Get 8.2.3 extra samples. */ public int [] getExtraSamples () { return _extraSamples; } /** Get 6.2.2 file size. */ public long getFileSize () { return _fileSize; } /** Get 7.7.3.10 flash. */ public int getFlash () { return _flash; } /** Get 7.7.3.11 flash energy. */ public double getFlashEnergy () { return _flashEnergy; } /** Get 7.7.3.12 flash return. */ public int getFlashReturn () { return _flashReturn; } /** Get 7.7.3.1 F number. */ public double getFNumber () { return _fNumber; } /** Get 7.7.3.9 focal length. */ public double getFocalLength () { return _focalLength; } /** Get 8.2.5 gray response curve. */ public int [] getGrayResponseCurve () { return _grayResponseCurve; } /** Get 8.2.6 gray response unit. */ public int getGrayResponseUnit () { return _grayResponseUnit; } /** Get 7.4 host computer. */ public String getHostComputer () { return _hostComputer; } /** Get 8.3.3 ImageData */ public String getImageData () { return _imageData; } /** Get 6.2.1 Image identifier. */ public String getImageIdentifier () { return _imageIdentifier; } /** Get 6.2.1.1 Image identifier location. */ public String getImageIdentifierLocation () { return _imageIdentifierLocation; } /** Get 8.1.6 image length. */ public long getImageLength () { return _imageLength; } /** Get 7.3 Image producer. */ public String getImageProducer () { return _imageProducer; } /** Get 8.1.5 image width. */ public long getImageWidth () { return _imageWidth; } /** Get 7.7.3.6 metering mode. */ public int getMeteringMode () { return _meteringMode; } /** Get 7.10 methodology. */ public String getMethodology () { return _methodology; } /** Get 6.1.1 MIME type. */ public String getMimeType () { return _mimeType; } /** Get 6.2.4 Orientation. */ public int getOrientation () { return _orientation; } /** Get 7.4.1 OS (operating system). */ public String getOS () { return _os; } /** Get 7.4.2 OS version. */ public String getOSVersion () { return _osVersion; } /** Get 8.3.4 PerformanceData. */ public String getPerformanceData () { return _performanceData; } /** Get 7.6.3.1 pixel size. */ public double getPixelSize () { return _pixelSize; } /** Get 6.1.6 Planar configuration. */ public int getPlanarConfiguration () { return _planarConfiguration; } /** Get 6.3 preferred presentation. */ public String getPreferredPresentation () { return _preferredPresentation; } /** Get 8.2.8.5 primary chromaticities blue X. */ public Rational getPrimaryChromaticitiesBlueX () { return _primaryChromaticitiesBlueX; } /** Get 8.2.8.6 primary chromaticities blue Y. */ public Rational getPrimaryChromaticitiesBlueY () { return _primaryChromaticitiesBlueY; } /** Get 8.2.8.3 primary chromaticities green X. */ public Rational getPrimaryChromaticitiesGreenX () { return _primaryChromaticitiesGreenX; } /** Get 8.2.8.4 primary chromaticities green Y. */ public Rational getPrimaryChromaticitiesGreenY () { return _primaryChromaticitiesGreenY; } /** Get 8.2.8.1 primary chromaticities red X. */ public Rational getPrimaryChromaticitiesRedX () { return _primaryChromaticitiesRedX; } /** Get 8.2.8.2 primary chromaticities red Y. */ public Rational getPrimaryChromaticitiesRedY () { return _primaryChromaticitiesRedY; } /** Get 9.1.5 ProcessingActions. */ public String[] getProcessingActions () { return _processingActions; } /** Get 9.1.3 ProcessingAgency. */ public String getProcessingAgency () { return _processingAgency; } /** Get 9.1.4.1 ProcessingSoftwareName */ public String getProcessingSoftwareName () { return _processingSoftwareName; } /** Get 9.1.4.2 ProcessingSoftwareVersion */ public String getProcessingSoftwareVersion () { return _processingSoftwareVersion; } /** Get 6.1.4.2.1 ICC profile name. */ public String getProfileName () { return _profileName; } /** Get 8.3.5 Profiles */ public String getProfiles () { return _profiles; } /** Get 6.1.4.2.2 ICC profile URL. */ public String getProfileURL () { return _profileURL; } /** Get 6.1.4.6 Reference black and white. */ public Rational [] getReferenceBlackWhite () { return _referenceBlackWhite; } /** Get 6.1.5.3 Rows per strip. */ public long getRowsPerStrip () { return _rowsPerStrip; } /** Get 8.2.2 samples per pixel. */ public int getSamplesPerPixel () { return _samplesPerPixel; } /** Get 8.1.1 sampling frequency plane. */ public int getSamplingFrequencyPlane () { return _samplingFrequencyPlane; } /** Get 8.1.2 sampling frequency unit. */ public int getSamplingFrequencyUnit () { return _samplingFrequencyUnit; } /** Get 7.6.1.1 scanner manufacturer. */ public String getScannerManufacturer () { return _scannerManufacturer; } /** Get 7.6.1.2.1 scanner model name. */ public String getScannerModelName () { return _scannerModelName; } /** Get 7.6.1.2.2 scanner model number. */ public String getScannerModelNumber () { return _scannerModelNumber; } /** Get 7.6.1.2.3 scanner model serial number. */ public String getScannerModelSerialNo () { return _scannerModelSerialNo; } /** Get 7.6.2.1 scanning software. */ public String getScanningSoftware () { return _scanningSoftware; } /** Get 7.6.2.2 scanning software version number. */ public String getScanningSoftwareVersionNo () { return _scanningSoftwareVersionNo; } /** Get 7.7.3.7 scene illuminant. */ public int getSceneIlluminant () { return _sceneIlluminant; } /** Get 6.1.5.1 segment type. */ public int getSegmentType () { return _segmentType; } /** Get 7.8 sensor. */ public int getSensor () { return _sensor; } /** Get 9.1.2 SourceData. */ public String getSourceData () { return _sourceData; } /** Get 7.2 source ID. */ public String getSourceID () { return _sourceID; } /** Get 7.1 Source type. */ public String getSourceType () { return _sourceType; } public double getSourceXDimension () { return _sourceXDimension; } public int getSourceXDimensionUnit () { return _sourceXDimensionUnit; } public double getSourceYDimension () { return _sourceYDimension; } public int getSourceYDimensionUnit () { return _sourceYDimensionUnit; } /** Get 6.1.5.4 Strip byte counts. */ public long [] getStripByteCounts () { return _stripByteCounts; } /** Get 6.1.5.2 Strip offsets. */ public long [] getStripOffsets () { return _stripOffsets; } /** Get 7.7.3.5 Subject distance. */ public double [] getSubjectDistance () { return _subjectDistance; } /** Get 8.3.2.1 TargetIDManufacturer */ public String getTargetIDManufacturer () { return _targetIDManufacturer; } /** Get 8.3.2.3 TargetIDMedia */ public String getTargetIDMedia () { return _targetIDMedia; } /** Get 8.3.2.2 TargetIDName */ public String getTargetIDName () { return _targetIDName; } /** Get 8.3.2.3 TargetIDNo */ public String getTargetIDNo () { return _targetIDNo; } /** Get 8.3.1 Target Type */ public int getTargetType () { return _targetType; } /** Get 6.1.5.8 Tile byte counts. */ public long [] getTileByteCounts () { return _tileByteCounts; } /** Get 6.1.5.6 Tile length. */ public long getTileLength () { return _tileLength; } /** Get 6.1.5.7 Tile offsets. */ public long [] getTileOffsets () { return _tileOffsets; } /** Get 6.1.5.5 Tile width. */ public long getTileWidth () { return _tileWidth; } /** Get 8.2.7.1 white point X value. */ public Rational getWhitePointXValue () { return _whitePointXValue; } /** Get 8.2.7.2 white point Y value. */ public Rational getWhitePointYValue () { return _whitePointYValue; } /** Get 7.7.3.16.1 X print aspect ratio. */ public double getXPrintAspectRatio () { return _xPrintAspectRatio; } /** Get 7.6.3.2.1 X physcal scanning resolution. */ public double getXPhysScanResolution () { return _xPhysScanResolution; } /** Get 8.1.3 X sampling frequency. */ public Rational getXSamplingFrequency () { return _xSamplingFrequency; } /** Get 6.2.6 X targeted display aspect ratio. */ public long getXTargetedDisplayAR () { return _xTargetedDisplayAR; } /** Get 6.1.4.5 YCbCr coefficients. */ public Rational [] getYCbCrCoefficients () { return _yCbCrCoefficients; } /** Get 6.1.4.4 YCbCr positioning. */ public int getYCbCrPositioning () { return _yCbCrPositioning; } /** Get 6.1.4.3 YCbCr subsampling. */ public int [] getYCbCrSubSampling () { return _yCbCrSubSampling; } /** Get 7.6.3.2.2 Y physcal scanning resolution. */ public double getYPhysScanResolution () { return _yPhysScanResolution; } /** Get 7.7.3.16.2 Y print aspect ratio. */ public double getYPrintAspectRatio () { return _yPrintAspectRatio; } /** Get 8.1.4 Y sampling frequency. */ public Rational getYSamplingFrequency () { return _ySamplingFrequency; } /** Get 6.2.7 Y targeted display aspect ratio. */ public long getYTargetedDisplayAR () { return _yTargetedDisplayAR; } /** Get data for Swing GUI viewer. */ public Property getViewerData () { return _viewerData; } /****************************************************************** * Mutator methods. ******************************************************************/ /** Set 7.7.3.15 auto focus. * @param focus Auto focus */ public void setAutoFocus (int focus) { _autoFocus = focus; } /** Set 7.7.3.13 back light. * @param light Back light */ public void setBackLight (int light) { _backLight = light; } /** Set 8.2.1 bits per sample. * @param bits Bits per sample */ public void setBitsPerSample (int [] bits) { _bitsPerSample = bits; } /** Set 7.7.3.3 brightness. * @param brightness Brightness */ public void setBrightness (double brightness) { _brightness = brightness; } /** Set 6.1.2 byte order. * @param order Byte order */ public void setByteOrder (String order) { _byteOrder = order; } /** Set 8.2.4.2 colormap bit code value. * @param value Bit code value */ public void setColormapBitCodeValue (int [] value) { _colormapBitCodeValue = value; } /** Set 8.2.4.4 colormap blue value. * @param value Blue value */ public void setColormapBlueValue (int [] value) { _colormapBlueValue = value; } /** Set 8.2.4.3 colormap green value. * @param value Green value */ public void setColormapGreenValue (int [] value) { _colormapGreenValue = value; } /** Set 8.2.4.2 colormap red value. * @param value Red value */ public void setColormapRedValue (int [] value) { _colormapRedValue = value; } /** Set 8.2.4.1 colormap reference. * @param reference Colormap reference */ public void setColormapReference (String reference) { _colormapReference = reference; } /** Set 6.1.4.1 color space * @param space Color space */ public void setColorSpace (int space) { _colorSpace = space; } /** Set 7.7.3.8 color temperature. * @param temp Color temperature */ public void setColorTemp (double temp) { _colorTemp = temp; } /** Set 6.1.3.2 compression level. * @param level Compression level */ public void setCompressionLevel (int level) { _compressionLevel = level; } /** Set 6.1.3.1 compression scheme. * @param scheme Compression scheme */ public void setCompressionScheme (int scheme) { _compressionScheme = scheme; } /** Set 7.9 date/time created. * TIFF dates get converted to ISO 8601 format. * @param date Date/time created */ public void setDateTimeCreated (String date) { _dateTimeCreated = make8601Valid (date); } /** Set 9.1.1 DateTimeProcessed. * TIFF dates get converted to ISO 8601 format. * @param date Date/time processed */ public void setDateTimeProcessed (String date) { _dateTimeProcessed = make8601Valid (date); } /** Set 7.5 Device source. * @param source Device source */ public void setDeviceSource (String source) { _deviceSource = source; } /** Set 7.7.1 digital camera manufacturer. * @param manufacturer Camera manufacturer */ public void setDigitalCameraManufacturer (String manufacturer) { _digitalCameraManufacturer = manufacturer; } /** Set 7.7.2 digital camera model. * @param model Camera model */ public void setDigitalCameraModel (String model) { _digitalCameraModel = model; } /** Set 6.2.5 display orientation. * @param orientation Display orientation */ public void setDisplayOrientation (int orientation) { _displayOrientation = orientation; } /** Set 7.2.3.4 exposure bias. * @param bias Exposure bias */ public void setExposureBias (double bias) { _exposureBias = bias; } /** Set 7.2.3.14 exposure index. * @param index Exposure index */ public void setExposureIndex (double index) { _exposureIndex = index; } /** Set 7.7.3.2 exposure time. * @param time Exposure time */ public void setExposureTime (double time) { _exposureTime = time; } /** Set 8.2.3 extra samples. * @param extra Extra samples */ public void setExtraSamples (int [] extra) { _extraSamples = extra; } /** Set 6.2.2 file size. * @param size File size */ public void setFileSize (long size) { _fileSize = size; } /** Set 7.7.3.1 F number. * @param f F number */ public void setFNumber (double f) { _fNumber = f; } /** Set 7.7.3.11 flash energy. * @param energy Flash energy */ public void setFlashEnergy (double energy) { _flashEnergy = energy; } /** Set 7.7.3.12 flash return. * @param ret Flash return */ public void setFlashReturn (int ret) { _flashReturn = ret; } /** Set 7.7.3.10 flash. * @param flash Flash */ public void setFlash (int flash) { _flash = flash; } /** Set 7.7.3.9 focal length (double meters). * @param length Focal length */ public void setFocalLength (double length) { _focalLength = length; } /** Set 8.2.5 gray response curve. * @param curve Gray response curve */ public void setGrayResponseCurve (int [] curve) { _grayResponseCurve = curve; } /** Set 8.2.6 gray response unit. * @param unit Gray response unit */ public void setGrayResponseUnit (int unit) { _grayResponseUnit = unit; } /** Set 7.4 host computer. * @param computer Host computer */ public void setHostComputer (String computer) { _hostComputer = computer; } /** Set 8.3.3 ImageData. * @param imageData Image Data filename or URN */ public void setImageData (String imageData) { _imageData = imageData; } /** Set 6.2.1 Image identifier. * @param identifier Image identifier */ public void setImageIdentifier (String identifier) { _imageIdentifier = identifier; } /** Set 6.2.1 Image identifier location. * @param location identifier location */ public void setImageIdentifierLocation (String location) { _imageIdentifierLocation = location; } /** Set 8.1.6 image length. * @param length Image length */ public void setImageLength (long length) { _imageLength = length; } /** Set 7.3 image producer. * @param producer Image producer */ public void setImageProducer (String producer) { _imageProducer = producer; } /** Set 8.1.5 image width. * @param width Image width */ public void setImageWidth (long width) { _imageWidth = width; } /** Set 7.7.3.6 metering mode. * @param mode Metering mode */ public void setMeteringMode (int mode) { _meteringMode = mode; } /** Set 7.10 methodology. * @param methodology Methodology */ public void setMethodology (String methodology) { _methodology = methodology; } /** Set 6.1.1 MIME type. * @param type MIME type */ public void setMimeType (String type) { _mimeType = type; } /** Set 6.2.4 orientation. * @param orientation Orientation */ public void setOrientation (int orientation) { _orientation = orientation; } /* Set 7.4.1 OS (operating system). * @param os Operating system */ public void setOS (String os) { _os = os; } /** Set 7.4.2 OS version. * @param version OS version */ public void setOSVersion (String version) { _osVersion = version; } /** Set 8.3.4 PerformanceData. * @param performanceData Performance data filename or URN */ public void setPerformanceData (String performanceData) { _performanceData = performanceData; } /** Set 7.6.3.1 pixel size. * @param size Pixel size */ public void setPixelSize (double size) { _pixelSize = size; } /** Set 6.1.6 Planar configuration. * @param configuration Planar configuration */ public void setPlanarConfiguration (int configuration) { _planarConfiguration = configuration; } /** Set 6.3 preferred presentation. * @param presentation Preferred presentation */ public void setPreferredPresentation (String presentation) { _preferredPresentation = presentation; } /** Set 8.2.8.5 primary chromaticities blue X. * @param x Blue x */ public void setPrimaryChromaticitiesBlueX (Rational x) { _primaryChromaticitiesBlueX = x; } /** Set 8.2.8.6 primary chromaticities blue Y. * @param y Blue y */ public void setPrimaryChromaticitiesBlueY (Rational y) { _primaryChromaticitiesBlueY = y; } /** Set 8.2.8.3 primary chromaticities green X. * @param x Green x */ public void setPrimaryChromaticitiesGreenX (Rational x) { _primaryChromaticitiesGreenX = x; } /** Set 8.2.8.4 primary chromaticities green Y. * @param y Green y */ public void setPrimaryChromaticitiesGreenY (Rational y) { _primaryChromaticitiesGreenY = y; } /** Set 8.2.8.1 primary chromaticities red X. * @param x Red x */ public void setPrimaryChromaticitiesRedX (Rational x) { _primaryChromaticitiesRedX = x; } /** Set 8.2.8.2 primary chromaticities red Y. * @param y Red y */ public void setPrimaryChromaticitiesRedY (Rational y) { _primaryChromaticitiesRedY = y; } /** Set 9.1.5 ProcessingActions. * @param actions Array of strings giving image processing steps */ public void setProcessingActions (String[] actions) { _processingActions = actions; } /** Set 9.1.3 ProcessingAgency. * @param processingAgency Identifier of producing organization */ public void setProcessingAgency (String processingAgency) { _processingAgency = processingAgency; } /** Set 9.1.4.1 ProcessingSoftwareName * @param name Name of the image processing software */ public void setProcessingSoftwareName (String name) { _processingSoftwareName = name; } /** Set 9.1.4.2 ProcessingSoftwareVersion * @param version Version number of the processing software */ public void setProcessingSoftwareVersion (String version) { _processingSoftwareVersion = version; } /** Set 6.1.4.1 ICC profile name. * @param name Profile name */ public void setProfileName (String name) { _profileName = name; } /** Set 8.3.5 Profiles. * @param profiles Color profile filename or URN */ public void setProfiles (String profiles) { _profiles = profiles; } /** Set 6.1.4.2 ICC profile URL. * @param URL Profile URL */ public void setProfileURL (String URL) { _profileURL = URL; } /** Set 6.1.4.6 reference black and white. * @param reference Reference */ public void setReferenceBlackWhite (Rational [] reference) { _referenceBlackWhite = reference; } /** Set 6.1.5.3 Rows per strip. * @param rows Rows per strip */ public void setRowsPerStrip (long rows) { _rowsPerStrip = rows; } /** Set 8.1.1 sampling frequency plane. * @param plane Sampling frequency plane */ public void setSamplingFrequencyPlane (int plane) { _samplingFrequencyPlane = plane; } /** Set 8.2.2 samples per pixel. * @param samples Samples per pixel */ public void setSamplesPerPixel (int samples) { _samplesPerPixel = samples; } /** Set 8.1.2 sampling frequency unit. * @param unit Sampling frequency unit */ public void setSamplingFrequencyUnit (int unit) { _samplingFrequencyUnit = unit; } /** Set 7.6.1.1 scanner manufacturer. * @param manufacturer Scanner manufacturer */ public void setScannerManufacturer (String manufacturer) { _scannerManufacturer = manufacturer; } /** Set 7.6.1.2.1 scanner model name. * @param name Scanner model name */ public void setScannerModelName (String name) { _scannerModelName = name; } /** Set 7.6.1.2.2 scanner model number. * @param number Scanner model number */ public void setScannerModelNumber (String number) { _scannerModelNumber = number; } /** Set 7.6.1.2.3 scanner model serial number. * @param number Scanner model serial number */ public void setScannerModelSerialNo (String number) { _scannerModelSerialNo = number; } /** Set 7.6.2.1 scanning software. * @param software Scanning software */ public void setScanningSoftware (String software) { _scanningSoftware = software; } /** Set 7.6.2.2 scanning software version number. * @param number Scanning software version number */ public void setScanningSoftwareVersionNo (String number) { _scanningSoftwareVersionNo = number; } /** Set 7.7.3.7 scene illuminant. * @param illuminant Scene illuminant */ public void setSceneIlluminant (int illuminant) { _sceneIlluminant = illuminant; } /** Set 7.8 sensor. * @param sensor Sensor */ public void setSensor (int sensor) { _sensor = sensor; } /** Set 9.1.2 SourceData. * @param sourceData Source data identifier */ public void setSourceData (String sourceData) { _sourceData = sourceData; } /** Set 7.2 source ID. * @param id Source ID */ public void setSourceID (String id) { _sourceID = id; } /** Set 7.1 source type. * @param type Source type */ public void setSourceType (String type) { _sourceType = type; } /** Set 8.1.7 source X dimension. * @param x X dimension */ public void setSourceXDimension (double x) { _sourceXDimension = x; } /** Set 8.1.7.1 source X dimension unit. * @param unit X dimension unit */ public void setSourceXDimensionUnit (int unit) { _sourceXDimensionUnit = unit; } /** Set 8.1.8 source Y dimension. * @param y Y dimension */ public void setSourceYDimension (double y) { _sourceYDimension = y; } /** Set 8.1.8.1 source Y dimension unit. * @param unit Y dimension unit */ public void setSourceYDimensionUnit (int unit) { _sourceYDimensionUnit = unit; } /** Set 6.1.5.4 Strip byte counts. * @param counts Byte counts */ public void setStripByteCounts (long [] counts) { _stripByteCounts = counts; } /** Set 6.1.5.2 Strip offsets. * @param offsets Strip offsets */ public void setStripOffsets (long [] offsets) { _stripOffsets = offsets; } /** Set 7.7.3.5 Subject distance * @param distance Subject distance */ public void setSubjectDistance (double [] distance) { _subjectDistance = distance; } /** Set 8.3.2.1 TargetIDManufacturer */ public void setTargetIDManufacturer (String targetIDManufacturer) { _targetIDManufacturer = targetIDManufacturer; } /** Set 8.3.2.4 TargetIDMedia */ public void setTargetIDMedia (String targetIDMedia) { _targetIDMedia = targetIDMedia; } /** Set 8.3.2.2 TargetIDName */ public void setTargetIDName (String targetIDName) { _targetIDName = targetIDName; } /** Set 8.3.2.3 TargetIDNo */ public void setTargetIDNo (String targetIDNo) { _targetIDNo = targetIDNo; } /** Set 8.3.1 TargetType */ public void setTargetType (int targetType) { _targetType = targetType; } /** Set 6.1.5.8 Tile byte counts. * @param counts Byte counts */ public void setTileByteCounts (long [] counts) { _tileByteCounts = counts; } /** Set 6.1.5.6 Tile length. * @param length Tile length */ public void setTileLength (long length) { _tileLength = length; } /** Set 6.1.5.7 Tile offsets. * @param offsets tile offsets */ public void setTileOffsets (long [] offsets) { _tileOffsets = offsets; } /** Set 6.1.5.5 Tile width. * @param width Tile width */ public void setTileWidth (long width) { _tileWidth = width; } /** Set 8.2.7.1 white point X value. * @param x White point X */ public void setWhitePointXValue (Rational x) { _whitePointXValue = x; } /** Set 8.2.7.2 white point Y value. * @param y White point Y */ public void setWhitePointYValue (Rational y) { _whitePointYValue = y; } /** Set 7.6.3.2.1 X physical scanning resolution. * @param x X physical scanning resolution */ public void setXPhysScanResolution (double x) { _xPhysScanResolution = x; } /** Set 7.7.3.16.1 X print aspect ratio. * @param x X aspect ratio */ public void setXPrintAspectRatio (double x) { _xPrintAspectRatio = x; } /** Set 8.1.3 X sampling frequency. * @param x X sampling frequency */ public void setXSamplingFrequency (Rational x) { _xSamplingFrequency = x; } /** Set 6.2.6.1 X targeted display aspect ratio. * @param x X units */ public void setXTargetedDisplayAspectRatio (long x) { _xTargetedDisplayAR = x; } /** Set 6.1.4.5 YCbCr coefficients. * @param coefficients Coefficients */ public void setYCbCrCoefficients (Rational [] coefficients) { _yCbCrCoefficients = coefficients; } /** Set 6.1.4.4 YCbCr positioning. * @param positioning Positioning */ public void setYCbCrPositioning (int positioning) { _yCbCrPositioning = positioning; } /** Set 6.1.4.3 YCbCr Sub-sampling. * @param sampling Sub-sampling */ public void setYCbCrSubSampling (int [] sampling) { _yCbCrSubSampling = sampling; } /** Set 7.6.3.2.2 Y physical scanning resolution. * @param y Y physical scanning resolution */ public void setYPhysScanResolution (double y) { _yPhysScanResolution = y; } /** Set 7.7.3.16.2 Y print aspect ratio. * @param y Y aspect ratio */ public void setYPrintAspectRatio (double y) { _yPrintAspectRatio = y; } /** Set 8.1.4 Y sampling frequency. * @param y Y sampling frequency */ public void setYSamplingFrequency (Rational y) { _ySamplingFrequency = y; } /** Set 6.2.6.2 Y targeted display aspect ratio. * @param y Y units */ public void setYTargetedDisplayAspectRatio (long y) { _yTargetedDisplayAR = y; } /** Set information for Swing GUI viewer. * @param viewerData Private data for RepTreeModel */ public void setViewerData (Property viewerData) { _viewerData = viewerData; } /* Canonicizes (canonizes? whatever) a date to ISO * 8601 format. Returns null if it can't make sense of * it. Returns the date unchanged if it's already * canonical. Initially this converts TIFF dates to ISO. */ private String make8601Valid (String date) { try { if (date.charAt (4) == ':') { // It's a TIFF date, or a good imitation of one. // TIFF dates have exact offsets, making things easy. String yr = date.substring (0, 4); String mo = date.substring (5, 7); String da = date.substring (8, 10); String hr = date.substring (11, 13); String mi = date.substring (14, 16); String se = date.substring (17, 19); return yr + "-" + mo + "-" + da + "T" + hr + ":" + mi + ":" + se; } return date; // default } catch (Exception e) { // Malformed date return null; } } } jhove/classes/edu/harvard/hul/ois/jhove/ObjectIdentifier.java0000644000707400001440000000763110771562717023515 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003-4 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove; import java.io.*; import java.util.*; /** * Module for identification of a document. "Identification" * means determining, by querying modules successively, what the format * of a document is. The Bytestream module is always queried last, * so a document will by identified as a Bytestream if all else fails. */ public class ObjectIdentifier { /****************************************************************** * PRIVATE INSTANCE FIELDS. ******************************************************************/ private List _moduleList; /****************************************************************** * CLASS CONSTRUCTOR. ******************************************************************/ public ObjectIdentifier (List moduleList) { _moduleList = moduleList; } /****************************************************************** * PUBLIC INSTANCE METHODS. * * Processing methods. * ******************************************************************/ /** * Perform identification on a file. The file is parsed by * each of the modules in the module list until one * declares that the file is well-formed. It is assumed * that there is a module in the list (normally Bytestream * at the end) which will always consider a file well-formed. */ public void identify (File file, RepInfo info, String parm, boolean verbose, boolean shortCheck) throws IOException { /****************************************************** * Go through all modules, in the order in the config * file, calling the parse method till we find one * which matches. ******************************************************/ ListIterator modIter = _moduleList.listIterator(); while (modIter.hasNext ()) { /* We need clean RepInfo for each run */ RepInfo info1; info1 = (RepInfo) info.clone (); Module mod = (Module) modIter.next (); try { if (!mod.hasFeature("edu.harvard.hul.ois.jhove.canValidate")) { continue; } if (mod.isRandomAccess ()) { RandomAccessFile raf = new RandomAccessFile (file, "r"); mod.param (parm); if (verbose) { mod.setVerbosity (Module.MAXIMUM_VERBOSITY); } if (shortCheck) { mod.checkSignatures (file, raf, info1); } else { mod.parse (raf, info1); } raf.close (); } else { InputStream stream = new FileInputStream (file); mod.param (parm); if (shortCheck) { mod.checkSignatures (file, stream, info1); } else { int parseIndex = mod.parse (stream, info1, 0); while (parseIndex != 0) { stream.close (); stream = new FileInputStream (file); parseIndex = mod.parse (stream, info1, parseIndex); } } stream.close (); } } catch (Exception e) { /* The assumption is that in trying to analyze the wrong type of file, the module may go off its track and throw an exception, so we just continue on to the next module. */ continue; } if (info1.getWellFormed () == RepInfo.TRUE) { info.copy (info1); break; } } } } jhove/classes/edu/harvard/hul/ois/jhove/OutputHandler.java0000644000707400001440000001151011234114263023051 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove; import java.io.*; import java.util.*; /** * Public interface for Jhove output handlers. * All output handlers must implement OutputHandler, and in * normal cases should subclass HandlerBase. */ public interface OutputHandler { /** * Reset the handler. This needs to be called before each invocation. */ public void reset (); /** * Callback allowing post-parse, pre-show analysis of object * representation information. * @param info Object representation information */ public void analyze (RepInfo info); /** * Callback indicating a directory is finished being processed. * Most handlers will do nothing. */ public void endDirectory (); /** * Returns the name of this handler */ public String getName (); /** * Returns release information for this handler */ public String getRelease (); /** * Returns the last modification date of this handler */ public Date getDate (); /** * Returns a List of Document objects giving the format * specification documentation * * @see Document */ public List getSpecification (); /** * Returns a List of Agent objects giving the vendor(s) * of this handler. */ public Agent getVendor (); /** * Returns this handler's note */ public String getNote (); /** * Returns this handler's copyright information */ public String getRights (); /** * Returns this handler's encoding. */ public String getEncoding (); /** * Per-instantiation initialization. * * @param init Initialization parameter. This is typically obtained * from the configuration file. */ public void init (String init) throws Exception; /** * Callback to give the handler the opportunity to decide whether or * not to process a file. Most handlers will always return true. * @param filepath File pathname */ public boolean okToProcess (String filepath); /** * Sets list of default parameters. * * @param params A List whose elements are Strings. * May be empty. */ public void setDefaultParams (List params); /** * Applies the default parameters. */ public void applyDefaultParams () throws Exception; /** Reset parameter settings. * Returns to a default state without any parameters. */ public void resetParams () throws Exception; /** * Per-action initialization. * * @param param Initialization parameter. */ public void param (String param) throws Exception; /** * Assigns an application object to provide services to this handler */ public void setApp (App app); /** * Assigns the JHOVE engine object to provide services to this handler */ public void setBase (JhoveBase je); /** * Assigns the encoding to be used by this OutputHandler */ public void setEncoding (String encoding); /** * Assigns a PrintWriter to do output for this OutputHandler */ public void setWriter (PrintWriter output); /** * Outputs information about a Module */ public void show (Module module); /** * Outputs the information contained in a RepInfo object */ public void show (RepInfo info); /** * Outputs information about the OutputHandler specified * in the parameter */ public void show (OutputHandler handler); /** * Outputs minimal information about the application */ public void show (); /** * Outputs detailed information about the application, * including configuration, available modules and handlers, * etc. */ public void show (App app); /** * Do the initial output. This should be in a suitable format * for including multiple files between the header and the footer. */ public void showHeader (); /** * Do the final output. This should be in a suitable format * for including multiple files between the header and the footer. */ public void showFooter (); /** * Do appropriate finalization after all output is complete. */ public void close (); /** * Callback indicating a new directory is being processed. * Most handlers will do nothing. * @param directory Directory path */ public void startDirectory (String directory); } jhove/classes/edu/harvard/hul/ois/jhove/Property.java0000644000707400001440000001354710771562731022127 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove; import java.util.*; /** * This class encapsulates arbitrary format-specific properties. * A Property's value can be a simple object or a structure. * If it is a simple object, it has arity SCALAR. If it is * a structure, its must be a Map, a List, a Set, or an array, * with corresponding Arity. The simple object (in the case of * arity SCALAR) or the components of the structure must have a * type corresponding to one of the enumerations given by * PropertyType. * * The components of a Property may themselves be Property * objects, allowing nested structures. * * @see PropertyType * @see PropertyArity */ public class Property { /****************************************************************** * PRIVATE INSTANCE FIELDS. ******************************************************************/ private String _name; private PropertyType _type; private PropertyArity _arity; private Object _value; /****************************************************************** * CLASS CONSTRUCTOR. ******************************************************************/ /** * Creates a Property with arity SCALAR. * * @param name The displayable name of the property * @param type The type of property * @param value The value of the property. The type of the * parameter must agree with type. */ public Property (String name, PropertyType type, Object value) { init (name, type, PropertyArity.SCALAR, value); } /** * Creates a Property with a given name, type, arity and value. * * @param name The displayable name of the property. * @param type The type of property. * @param arity The arity of the property. * @param value The value of the property. If the arity is * SCALAR, the type of this parameter must agree * with type. Otherwise, the arity * must agree with arity, and its * components must agree with type. */ public Property (String name, PropertyType type, PropertyArity arity, Object value) { init (name, type, arity, value); } private void init (String name, PropertyType type, PropertyArity arity, Object value) { /* Some limited type checking. Checking for mismatched types here may help avoid difficult chasing down of the bugs such mismatches cause. */ if (value == null) { throw new NullPointerException ("Null value for Property not permitted"); } if (arity == PropertyArity.SCALAR) { if (value instanceof List || value instanceof Map || value instanceof Set) { throw new IncompatibleClassChangeError ("Wrong class for Scalar Property"); } } else if (arity == PropertyArity.MAP) { if (!(value instanceof Map)) { throw new IncompatibleClassChangeError ("Wrong class for Map Property"); } } else if (arity == PropertyArity.SET) { if (!(value instanceof Set)) { throw new IncompatibleClassChangeError ("Wrong class for Set Property"); } } else if (arity == PropertyArity.LIST) { if (!(value instanceof List)) { throw new IncompatibleClassChangeError ("Wrong class for List Property"); } } _name = name; _type = type; _arity = arity; _value = value; } /****************************************************************** * PUBLIC INSTANCE METHODS. * * Accessor methods. ******************************************************************/ /** * Returns the arity (type of structure) of this Property. */ public PropertyArity getArity () { return _arity; } /** * Return a property by its name, regardless of its position in the * structural hierarchy of properties. * @param name Property name * @return Named property (or null) */ public Property getByName (String name) { if (_name.equals (name)) { return this; } if (!_arity.equals (PropertyArity.SCALAR) && _type.equals (PropertyType.PROPERTY)) { if (_arity.equals (PropertyArity.ARRAY)) { Property [] array = (Property []) _value; for (int i=0; iInteger, Boolean, Byte, * Character, Double, * Float, Long, and * Short, a Property with arity ARRAY is an array of primitive * Java types rather than Objects (e.g., int * rather than Integer). */ public static final PropertyArity ARRAY = new PropertyArity ("Array"); /** * An Arity corresponding to java.util.List or any of its derived classes. */ public static final PropertyArity LIST = new PropertyArity ("List"); /** * An Arity corresponding to java.util.Map or any of its derived classes. */ public static final PropertyArity MAP = new PropertyArity ("Map"); /** * An Arity corresponding to a simple object, which must be of a * type corresponding to one of the instances of * PropertyType. */ public static final PropertyArity SCALAR = new PropertyArity ("Scalar"); /** * An Arity corresponding to java.util.Set or any of its derived classes. */ public static final PropertyArity SET = new PropertyArity ("Set"); /** * Applications will never create PropertyArities directly. **/ private PropertyArity (String value) { super (value); } } jhove/classes/edu/harvard/hul/ois/jhove/PropertyPath.java0000644000707400001440000002177710771562722022750 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove; import java.util.*; /** * A description of the location of a Property in a * RepInfo object. Properties can be nested under other * properties, in lists, maps, or subproperties. This class * provides a general way to specify their location. * * For the moment, only paths by name are fully supported. * * @author Gary McGath * */ public class PropertyPath { private List pathInfo; /** * No-argument constructor. * Creates an empty path. */ public PropertyPath () { pathInfo = new LinkedList (); } /** * Cloning constructor. * This creates a new pathInfo list, whose elements * are shared with the original PropertyPath's list. */ public PropertyPath (PropertyPath path) { pathInfo = new LinkedList (); pathInfo.addAll (path.pathInfo); } /** * String array constructor. * This allows creation of a path in a common and simple * case: a hierarchy of named subproperties. It's the * equivalent of creating an empty PropertyPath and then * calling addElement successively with each of the strings * in the array. */ public PropertyPath (String[] pathArray) { pathInfo = new LinkedList (); for (int i = 0; i < pathArray.length; i++) { pathInfo.add (pathArray[i]); } } /** * Adds a property name to the path. */ public void addPropertyName (String str) { pathInfo.add (str); // Now -- how do we add a key and distinguish it from a // property name? We could define an internal type for // keys. Do that for the moment and see what that leads // to in retrieval. Alternatively, it isn't needed because // we can see that a property has arity Map. } /** * Adds a key to the path, for a property map. */ public void addPropertyKey (Object obj) { pathInfo.add (new PropertyKey (obj)); } /** * Adds an index to the path, for an indexed property. */ public void addPropertyIndex (int idx) { pathInfo.add (new Integer (idx)); } /** * Walk down the path and return the specified Property. * * @param info The RepInfo object to search * * @return The specified Property if found, otherwise null. */ public Property locateProperty (RepInfo info) { return locateProperty (info, false); } /** * Walk down the path and return the specified Property. * * @param info The RepInfo object to search * @param trace If true, write debugging information * to standard output. * * @return The specified Property if found, otherwise null. */ public Property locateProperty (RepInfo info, boolean trace) { if (pathInfo.isEmpty ()) { // An empty path can't reach any property if (trace) { System.out.println ("Empty property path"); } return null; } Object obj = pathInfo.get(0); if (!(obj instanceof String)) { // The initial qualifier must be a property name if (trace) { System.out.println ("Not a property name"); } return null; } String top = (String) obj; if (trace) { System.out.println ("Getting proprerty " + top); } Property prop = info.getProperty (top); if (prop == null) { // No property of that name in RepInfo if (trace) { System.out.println ("Property is null"); } return null; } int pathLen = pathInfo.size (); // Pass the CDR of the list to locateSubProperty. return locateSubProperty (prop, pathInfo.subList (1, pathLen), trace); } /* Recursive function for extracting a subproperty of a property. */ private Property locateSubProperty (Property property, List path, boolean trace) { // If there's nothing left of the path, we're done. if (path.isEmpty ()) { return property; } List cdr = path.subList (1, path.size()); PropertyArity arity = property.getArity (); PropertyType type = property.getType (); Object val = property.getValue (); if (trace) { System.out.println ("Property arity = " + arity + ", type = " + type); } // If the type isn't PROPERTY, then there are no subproperties. if (type != PropertyType.PROPERTY) { if (trace) { System.out.println ("Not a property, type is " + type.toString ()); } return null; } Object obj = path.get (0); if (obj instanceof String) { Iterator iter; // Iterate through the property and see if any of the elements // are Properties that match the name. String name = (String) obj; if (trace) { System.out.println ("Looking for subproperty " + name + " arity= " + arity.toString ()); } if (arity.equals (PropertyArity.SCALAR)) { // There's just one shot at matching a scalar. Property p = (Property) property.getValue (); if (p.getName().equals (name)) { return locateSubProperty (p, cdr, trace); } else { return null; } } else if (arity.equals (PropertyArity.ARRAY)) { // We know it's an array of Properties, which saves much // hair-tearing. Property[] parray = (Property []) val; for (int i = 0; i < parray.length; i++) { Property p = parray[i]; if (p.getName ().equals (name)) { return locateSubProperty (p, cdr, trace); } } return null; } else if (arity.equals (PropertyArity.LIST)) { iter = ((List) val).listIterator (); return getIteratedSubProperty (iter, name, cdr, trace); } else if (arity.equals (PropertyArity.SET)) { iter = ((Set) val).iterator (); return getIteratedSubProperty (iter, name, cdr, trace); } else if (arity.equals (PropertyArity.MAP)) { iter = ((Map) val).values().iterator(); return getIteratedSubProperty (iter, name, cdr, trace); } else { // Should never happen, but keep compiler happy //System.out.println ("Unknown arity"); return null; } } else if (obj instanceof Integer) { int idx = ((Integer) obj).intValue(); //System.out.println ("Property index = " + idx + ", arity= " + arity.toString ()); if (arity.equals (PropertyArity.LIST)) { List propList = (List) val; return locateSubProperty ((Property) propList.get (idx), cdr, trace); } else if (arity.equals (PropertyArity.ARRAY)) { Property[] propArr = (Property []) val; return locateSubProperty (propArr[idx], cdr, trace); } else { // Other arities are not indexable return null; } } else if (obj instanceof PropertyKey) { // This is applicable only to a Map. if (arity != PropertyArity.MAP) { return null; } return null; // I'm not sure this case is even meaningful } else { // We should never get here return null; } } /* Walk through an Iterator, whose elements are Properties, * and return the subproperty by path of the first element * whose name matches name. */ private Property getIteratedSubProperty (Iterator iter, String name, List path, boolean trace) { while (iter.hasNext ()) { Property p = (Property) iter.next (); if (p.getName ().equals (name)) { return locateSubProperty (p, path, trace); } } return null; } private class PropertyKey { public Object key; public PropertyKey (Object obj) { key = obj; } } } jhove/classes/edu/harvard/hul/ois/jhove/PropertyType.java0000644000707400001440000000755211267137253022766 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003-2009 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove; /** * This class defines enumerated types for an Property of * some given content. * Applications will not create or modify PropertyTypes, but will * use one of the predefined PropertyType instances * BOOLEAN, BYTE, CHARACTER, DATE, DOUBLE, FLOAT, INTEGER, * LONG, OBJECT, PROPERTY, SHORT, STRING, RATIONAL, or * NISOIMAGEMETADATA. * * @see Property */ public final class PropertyType extends EnumerationType { /** * Property type for a Boolean object, or a * boolean if the Arity is Array. */ public static final PropertyType BOOLEAN = new PropertyType ("Boolean"); /** * Property type for a Byte object, or a byte * if the Arity is Array. */ public static final PropertyType BYTE = new PropertyType ("Byte"); /** * Property type for a Character object, or a * char if the Arity is Array. */ public static final PropertyType CHARACTER = new PropertyType("Character"); /** * Property type for a Date object. */ public static final PropertyType DATE = new PropertyType ("Date"); /** * Property type for a Double object, or *a double if the Arity is Array. */ public static final PropertyType DOUBLE = new PropertyType ("Double"); /** * Property type for a Float object, or a * float if the Arity is Array. */ public static final PropertyType FLOAT = new PropertyType ("Float"); /** * Property type for an Integer object, or an * integer if the Arity is Array. */ public static final PropertyType INTEGER = new PropertyType ("Integer"); /** * Property type for a Long object, or a * long if the Arity is Array. */ public static final PropertyType LONG = new PropertyType ("Long"); /** * Property type for an Object. */ public static final PropertyType OBJECT = new PropertyType ("Object"); /** * Property type for an AESAudioMetadata. */ public static final PropertyType AESAUDIOMETADATA = new PropertyType ("AESAudioMetadata"); /** * Property type for a NisoImageMetadata. */ public static final PropertyType NISOIMAGEMETADATA = new PropertyType ("NISOImageMetadata"); /** * Property type for a TextMDMetadata. */ public static final PropertyType TEXTMDMETADATA = new PropertyType ("TextMDMetadata"); /** * Property type for a Property object. */ public static final PropertyType PROPERTY = new PropertyType ("Property"); /** * Property type for a Short object, or a * short if the Arity is Array. */ public static final PropertyType SHORT = new PropertyType ("Short"); /** * Property type for a String object. */ public static final PropertyType STRING = new PropertyType ("String"); /** * Property type for a Rational object. */ public static final PropertyType RATIONAL = new PropertyType ("Rational"); /****************************************************************** * CLASS CONSTRUCTOR. ******************************************************************/ /** * Applications will never create PropertyTypes directly. **/ private PropertyType (String value) { super (value); } } jhove/classes/edu/harvard/hul/ois/jhove/RAFInputStream.java0000644000707400001440000001712610771562722023104 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove; import java.io.*; /** * An InputStream layered on top of a RandomAccessFile. * This is useful for a Module which has requirements that * force it to use a RandomAccessFile, but is usually * accessed sequentially. * * An RAFInputStream maintains its own position information * in the file, so multiple RAFInputStreams in the same file * will work without interference. However, this class is * not thread-safe. * * @author Gary McGath * */ public class RAFInputStream extends InputStream { /* The file on which the stream is based */ private RandomAccessFile _raf; /* Size of fileBuf */ private int fileBufSize; /* Buffer for reading from the file */ private byte[] fileBuf; /* Offset for reading next byte from filebuf */ private int fileBufPos; /* Number of valid bytes in fileBuf */ private int fileBufBytes; /* Position in file for next read from RandomAccessFile */ private long fileOffset; /* EOF flag */ boolean eof; /** * Constructor with default buffer size. * The stream starts at the current position of the * RandomAccessFile. * * @param raf The file on which the * stream is to be based. */ public RAFInputStream(RandomAccessFile raf) { super(); _raf = raf; fileBufSize = 65536; // pick a size, any size init (); } /** * Constructor with buffer size. * The stream starts at the current position of the * RandomAccessFile. * * @param raf The file on which the * stream is to be based. * * @param bufferSize The buffer size to be used. * If less than or equal to 0, the * default buffer size is used. */ public RAFInputStream(RandomAccessFile raf, int bufferSize) { super(); _raf = raf; fileBufSize = (bufferSize <= 0 ? 65536 : bufferSize); init (); } private void init () { fileBufBytes = 0; fileBufPos = 0; fileBuf = new byte[fileBufSize]; try { fileOffset = _raf.getFilePointer (); } catch (IOException e) {} eof = false; } /** * Reads a single byte from the file. */ public int read() throws IOException { if (eof) { return -1; } if (fileBufPos >= fileBufBytes) { // Need to read another bufferful _raf.seek (fileOffset); fileBufBytes = _raf.read (fileBuf); fileBufPos = 0; if (fileBufBytes <= 0) { // No more in file eof = true; return -1; } else { fileOffset += fileBufBytes; } } return ((int) fileBuf[fileBufPos++] & 0XFF); } /** * Reads some number of bytes from the input stream and * stores them into the buffer array b. The number of * bytes actually read is returned as an integer. */ public int read (byte[] b) throws IOException { int bytesToRead = b.length; int bytesRead = 0; for (;;) { // See how many bytes are available in fileBuf. int fbAvail = fileBufBytes - fileBufPos; if (fbAvail <= 0) { // Need to read another bufferful _raf.seek (fileOffset); fileBufBytes = _raf.read (fileBuf); fileBufPos = 0; if (fileBufBytes <= 0) { // No more in file -- return what we have eof = true; return bytesRead; } fbAvail = fileBufBytes; fileOffset += fileBufBytes; } if (fbAvail > bytesToRead) { // We have more than enough bytes. fbAvail = bytesToRead; } for (int i = 0; i < fbAvail; i++) { b[bytesRead++] = fileBuf[fileBufPos++]; bytesToRead--; } if (bytesToRead == 0) { return bytesRead; } } } /** * Reads up to len bytes of data from the input stream * into an array of bytes. An attempt is made to read as * many as len bytes, but a smaller number may be read, * possibly zero. The number of bytes actually read is * returned as an integer. * */ public int read(byte[] b, int off, int len) throws IOException { int bytesToRead = len; int bytesRead = 0; for (;;) { // See how many bytes are available in fileBuf. int fbAvail = fileBufBytes - fileBufPos; if (fbAvail <= 0) { // Need to read another bufferful _raf.seek (fileOffset); fileBufBytes = _raf.read (fileBuf); fileBufPos = 0; if (fileBufBytes <= 0) { // No more in file -- return what we have eof = true; return bytesRead; } fbAvail = fileBufBytes; fileOffset += fileBufBytes; } if (fbAvail > bytesToRead) { // We have more than enough bytes. fbAvail = bytesToRead; } for (int i = 0; i < fbAvail; i++) { b[off + bytesRead++] = fileBuf[fileBufPos++]; bytesToRead--; } if (bytesToRead == 0) { return bytesRead; } } } /** Skips some number of bytes. * * @return The number of bytes actually skipped. */ public long skip (long n) throws IOException { // If the range of the skip lies // within the current buffer, we just adjust // the buffer offset. int bytesLeft = fileBufBytes - fileBufPos; if (bytesLeft > n) { fileBufPos += (int) n; } else { // doesn't fit within the buffer. // Set up to seek to the new position. //long curPos = _raf.getFilePointer (); if (fileOffset + n - bytesLeft > _raf.length ()) { fileOffset = _raf.length (); } //seek (curPos + n - bytesLeft); else { fileOffset += n - bytesLeft; } fileBufBytes = 0; // Invalidate current buffer } return n; } /** * Returns the RandomAccessFile object. */ public RandomAccessFile getRAF () { return _raf; } /** Positions the stream to a different point in the file. * This invalidates the buffer. */ public void seek (long offset) throws IOException { _raf.seek (offset); fileBufBytes = 0; fileBufPos = 0; eof = false; } /** Returns the current position in the file. * What is reported is the position of the byte * in the file which was last extracted from * the buffer. */ public long getFilePos () throws IOException { return _raf.getFilePointer() - (fileBufBytes - fileBufPos); } } jhove/classes/edu/harvard/hul/ois/jhove/RFC1766Lang.java0000644000707400001440000000354111205003013022004 0ustar garyusers /********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove; /** * Class encapsulating RFC-1766 language codes. */ public final class RFC1766Lang { String _langCode; /** * Constructor. * * @param str The ASCII string for the language code. */ public RFC1766Lang (String str) { _langCode = str; } /** * Returns the language code string. */ public String getLangCode () { return _langCode; } /** * Returns true if the language code * string is syntactically compliant. * The primary tag must be either a two-letter code, * the letter i, or the letter x (case insensitive); * no checking is done against registry lists. */ public boolean isSyntaxCorrect () { int i; if (_langCode == null) { return false; } char[] chrs = _langCode.toLowerCase().toCharArray(); char firstChar = '\0'; int ntags = 0; int taglength = 0; for (i = 0; i < chrs.length; i++) { char ch = chrs[i]; if (i == 0) { firstChar = ch; } if (!Character.isLetter (ch) && ch != '-') { return false; } if (ch == '-') { taglength = 0; // If this is the primary tag, do some checks if (ntags++ == 0) { if (taglength == 1) { if (firstChar != 'i' && firstChar != 'x') { return false; } else if (taglength != 2) { return false; } } } } else { taglength++; if (taglength > 8) { return false; } } } // A dangling hyphen at the end isn't allowed. if (taglength == 0) { return false; } return true; } } jhove/classes/edu/harvard/hul/ois/jhove/Rational.java0000644000707400001440000000555610771562723022056 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove; /** * This class encapsulates a number which is defined as the ratio * of two 32-bit unsigned integers, in accordance with the TIFF * specification. */ public class Rational { /****************************************************************** * PRIVATE INSTANCE FIELDS. ******************************************************************/ /** Numerator of ratio. */ private long _numerator; /** Denominator of ratio. */ private long _denominator; /****************************************************************** * CLASS CONSTRUCTOR. ******************************************************************/ /** * The arguments to this constructor are long in order to * represent all possible 32-bit unsigned integers. Parameters * greater than 2 ^ 32 - 1 are not meaningful. * @param numerator numerator of the Rational value * @param denominator denominator of the Rational value */ public Rational (long numerator, long denominator) { _numerator = numerator; _denominator = denominator; } /** * The arguments to the int constructor are treated as * 32-bit unsigned integers. * @param numerator numerator of the Rational value * @param denominator denominator of the Rational value */ public Rational (int numerator, int denominator) { _numerator = (long) numerator & 0XFFFFFFFF; _denominator = (long) denominator & 0XFFFFFFFF; } /****************************************************************** * PUBLIC INSTANCE METHODS. ******************************************************************/ /** * Returns the Numerator property. */ public long getNumerator () { return _numerator; } /** * Returns the Denominator property. */ public long getDenominator() { return _denominator; } /** * Converts to a floating-point value (numerator/denominator). * May throw an ArithmeticException. **/ public double toDouble () { return ((double) _numerator / (double) _denominator); } /** * Converts to a long value (numerator/denominator). * May throw an ArithmeticException. **/ public long toLong () { return (long) ((double) _numerator / (double) _denominator); } /** * Represents the Rational as a String in the form of * "numerator/denominator". */ public String toString () { return Long.toString (_numerator) + "/" + Long.toString (_denominator); } } jhove/classes/edu/harvard/hul/ois/jhove/RepInfo.java0000644000707400001440000003352711205030321021617 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003-2005 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove; import java.util.*; /** * This class encapsulates representation information, as defined * by ISO/IEC 14721, about a content stream. * * @see ISO/IEC * 14721 (PDF) */ public class RepInfo implements Cloneable { /****************************************************************** * PRIVATE INSTANCE FIELDS. ******************************************************************/ /** List of checksums. */ private List _checksum; /** Consistency flag. */ private boolean _consistent; /** Validity flag. A ternary variable which can have a value * of TRUE, FALSE, or UNDETERMINED. */ private int _valid; /** Values for _valid */ public final static int TRUE = 1, FALSE = 0, UNDETERMINED = -1; /** Creation date. */ private Date _created; /** External representation information. */ private RepInfo _external; /** Format identifier. */ private String _format; /** Modification date. */ private Date _lastModified; /** List of diagnostic and informative messages. */ private List _message; /** MIME media type. */ private String _mimeType; /** The module used to populate this representation information. */ private Module _module; /** List of conforming format profiles. */ private List _profile; /** List of modules for which signature matches. */ private List _sigMatch; /** Associative map of module-specific representation information. */ private Map _property; /** Object size. */ private long _size; /** Object file pathname or URI. */ private String _uri; /** Flag indicating _uri is a URL if true. */ private boolean _urlFlag; /** Well-formed flag. A ternary variable which can have a value * of TRUE, FALSE, or UNDETERMINED. */ private int _wellFormed; /** Version of format which applies. */ private String _version; /** Note. */ private String _note; /****************************************************************** * CLASS CONSTRUCTOR. ******************************************************************/ /** * Creates a RepInfo with a URI reference * * @param uri Object file pathname or URI */ public RepInfo (String uri) { init (uri); } /** * Creates a RepInfo with a URI reference and an external RepInfo. * * By default, urlFlag is false. * * @param uri Object file pathname or URI * @param external External representation information */ public RepInfo (String uri, RepInfo external) { init (uri); _external = external; } private void init (String uri) { _uri = uri; _size = -1; _wellFormed = TRUE; _consistent = true; _urlFlag = false; _valid = TRUE; _checksum = new ArrayList (); _message = new ArrayList (); _profile = new ArrayList (); _property = new TreeMap (); _sigMatch = new ArrayList (); } /****************************************************************** * PUBLIC INSTANCE METHODS. ******************************************************************/ /** * Clones the RepInfo one level deep, making fresh copies * of the checksum, message, profile, signature match, * and property fields. * The external RepInfo (if any) is not cloned, but * is attached directly to the clone. */ public Object clone () { RepInfo newri; try { newri = (RepInfo) super.clone (); } catch (CloneNotSupportedException e) { return null; // should never happen } newri._checksum = new ArrayList (_checksum); newri._message = new ArrayList(_message); newri._profile = new ArrayList (_profile); newri._sigMatch = new ArrayList (_sigMatch); newri._property = new TreeMap (_property); return (Object) newri; } /** * Copies all the information out of the parameter object. * This is a "shallow" copy; it is assumed that the parameter * object is a temporary one that will not be further modified. */ public void copy (RepInfo info) { _checksum = info._checksum; _consistent = info._consistent; _created = info._created; _external = info._external; _format = info._format; _lastModified = info._lastModified; _message = info._message; _mimeType = info._mimeType; _profile = info._profile; _property = info._property; _size = info._size; _uri = info._uri; _urlFlag = info._urlFlag; _wellFormed = info._wellFormed; _valid = info._valid; _version = info._version; _note = info._note; _module = info._module; _sigMatch = info._sigMatch; } /****************************************************************** * * Accessor methods. ******************************************************************/ /** * Returns this object's list of Checksums */ public List getChecksum () { return _checksum; } /** * Returns the creation date stored in this object. A creation * date is not automatically generated, but must be explicitly * stored. **/ public Date getCreated () { return _created; } /** * Return the format identifier */ public String getFormat () { return _format; } /** * Returns the last modified date stored in this object. A * date is not automatically generated, but must be explicitly * stored. **/ public Date getLastModified () { return _lastModified; } /** * Returns the message list stored in this object */ public List getMessage () { return _message; } /** * Returns the MIME type string stored in this object */ public String getMimeType () { return _mimeType; } /** * Return the module. */ public Module getModule () { return _module; } /** * Returns the list of profiles (Strings) stored in this object */ public List getProfile () { return _profile; } /** * Returns the Property map stored in this object. The * Property map contains key-value pairs whose key is a * String and whose value is a Property. */ public Map getProperty () { return _property; } /** * Returns a named Property from the Property map * * @param name The name of the Property. */ public Property getProperty (String name) { Property property = null; if (_property.size () > 0) { property = (Property) _property.get (name); } return property; } /** * Returns the size property stored in this object. */ public long getSize () { return _size; } /** * Returns the URI property stored in this object. */ public String getUri () { return _uri; } /** * Returns a flag which, if true, indicates * the object is a URL. */ public boolean getURLFlag () { return _urlFlag; } /** * Returns the value of the consistency flag. */ public boolean isConsistent () { return _consistent; } /** * Returns the value of the well-formed flag. * Can return TRUE, FALSE, or UNDETERMINED. */ public int getWellFormed () { return _wellFormed; } /** * Returns the value of the validity flag. * Can return TRUE, FALSE, or UNDETERMINED. */ public int getValid () { return _valid; } /** * Returns the version property stored in this object */ public String getVersion () { return _version; } /** * Returns the note property stored in this object */ public String getNote () { return _note; } /** * Returns the list of matching signatures. * JhoveBase will make this value persistent across * module invocations for a given document, so the list * returned will reflect all modules that have looked * at the document so far. */ public List getSigMatch () { return _sigMatch; } /** * Return property by name, regardless of its position in the * property hierarchy. * @param name Property name * @return Named property (or null) */ public Property getByName (String name) { Property prop = null; Collection coll = _property.values (); Iterator iter = coll.iterator (); while (iter.hasNext ()) { prop = (Property) iter.next (); if ((prop = prop.getByName (name)) != null) { break; } } return prop; } /****************************************************************** * Mutator methods. ******************************************************************/ /** * Append a Checksum object to the checksum list. */ public void setChecksum (Checksum checksum) { _checksum.add (checksum); } /** * Set the value of the consistency flag */ public void setConsistent (boolean consistent) { _consistent = consistent; } /** * Set the creation date */ public void setCreated (Date created) { _created = created; } /** * Set the format identifier */ public void setFormat (String format) { _format = format; } /** * Set the last modified date */ public void setLastModified (Date lastModified) { _lastModified = lastModified; } /** * Append a Message object to the message list */ public void setMessage (Message message) { _message.add (message); } /** * Set the MIME type string */ public void setMimeType (String mimeType) { _mimeType = mimeType; } /** * Add the module. */ public void setModule (Module module) { _module = module; } /** * Append a profile String to the profile list */ public void setProfile (String profile) { _profile.add (profile); } /** * Add a Property to the property map. The name of the Property * becomes its key in the map. */ public void setProperty (Property property) { _property.put (property.getName (), property); } /** * Set the size property */ public void setSize (long size) { _size = size; } /** * Set the flag to indicate whether this is a URL (true) * or a file (false) */ public void setURLFlag (boolean flag) { _urlFlag = flag; } /** * Set the well-formed flag * * @param wellFormed Boolean argument that maps to * an integer value: * true maps to TRUE, and false to FALSE. */ public void setWellFormed (boolean wellFormed) { _wellFormed = wellFormed ? TRUE : FALSE; if (!wellFormed) { _consistent = false; _valid = FALSE; } } /** * Set the wellFormed flag. * Setting wellFormed to false forces the consistent and * valid flags to be false as well. */ public void setWellFormed (int wellFormed) { _wellFormed = wellFormed; if (wellFormed == FALSE) { _consistent = false; _valid = FALSE; } if (wellFormed == UNDETERMINED) { _valid = UNDETERMINED; } } /** * Set the validity flag * * @param valid Boolean argument that maps to * an integer value: * true maps to TRUE, and false to FALSE. */ public void setValid (boolean valid) { _valid = valid ? TRUE : FALSE; } /** * Set the validity flag * * @param valid Permitted values are TRUE, FALSE, AND * UNDETERMINED. The effect of using * other values is undefined. */ public void setValid (int valid) { _valid = valid; } /** * Set the version string */ public void setVersion (String version) { _version = version; } /** * Set the note string */ public void setNote (String note) { _note = note; } /** Adds the name of a module, signifying that the document * signature matched the module's requirements. * JhoveBase will make this value persistent across * module invocations for a given document. */ public void setSigMatch (String modname) { _sigMatch.add (modname); } /** Adds a list of module names, signifying that the document * signature matched the module's requirements. * Any previous list is lost. * JhoveBase will make this value persistent across * module invocations for a given document. */ public void setSigMatch (List modnames) { _sigMatch = modnames; } /****************************************************************** * Serialization methods. ******************************************************************/ /** * Output the information in this object. The format and * destination of the output are determined by the * OutputHandler. */ public void show (OutputHandler handler) { handler.analyze (this); handler.show (this); } } jhove/classes/edu/harvard/hul/ois/jhove/Signature.java0000644000707400001440000001047210771562723022237 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove; /** * This class encapsulates information about format signatures, * both internal and external. * The value of a Signature may be either a String or a byte array * (stored as an int array to avoid signed byte problems). */ public abstract class Signature { private int[] _value; private String _stringValue; private SignatureType _type; private SignatureUseType _use; private String _note; /** * A Signature cannot be created directly; this constructor * can be called as the superclass constructor from a subclass. * This constructor uses a String value. */ protected Signature (String value, SignatureType type, SignatureUseType use) { this (new int[value.length ()], type, use); int len = value.length (); _stringValue = value; for (int i = 0; i < len; i++) { _value[i] = value.charAt(i); } } /** * A Signature cannot be created directly; this constructor * can be called as the superclass constructor from a subclass. * This constructor uses a byte array (stored as an int array) value. */ protected Signature (int[] value, SignatureType type, SignatureUseType use) { _value = value; _type = type; _use = use; _stringValue = null; } /** * A Signature cannot be created directly; this constructor * can be called as the superclass constructor from a subclass. * This constructor uses a String value and allows specification * of a note. */ protected Signature (String value, SignatureType type, SignatureUseType use, String note) { this (new int[value.length ()], type, use, note); int len = value.length (); for (int i = 0; i < len; i++) { _value[i] = value.charAt(i); } _stringValue = value; } /** * A Signature cannot be created directly; this constructor * can be called as the superclass constructor from a subclass. * This constructor uses a byte array (stored as an int array) value * and allows specification of a note. */ protected Signature (int[] value, SignatureType type, SignatureUseType use, String note) { this (value, type, use); _note = note; } /** * Returns the type of this Signature */ public SignatureType getType () { return _type; } /** * Returns the use requirement for this Signature */ public SignatureUseType getUse () { return _use; } /** * Returns the byte array value for this Signature. * If this Signature was constructed from a String, it * returns the characters of the String as the bytes of * the array. */ public int[] getValue () { return _value; } /** * Returns the note specified for this Signature, or null * if no note was specified. */ public String getNote () { return _note; } /** * Returns true if this Signature's value was provided as a * String, false if as an array. */ public boolean isStringValue () { return (_stringValue != null); } /** * Returns the string value of this Signature. Returns null * if this Signature was constructed with an array. */ public String getValueString () { return _stringValue; } /** * Returns the value of this Signature as a hexadecimal string. * The length of the string is twice the length of the array * or string from which this Signature was created, and all * alphabetic characters are lower case. */ public String getValueHexString () { StringBuffer valBuf = new StringBuffer ("0x"); for (int i = 0; i < _value.length; i++) { /* Make each byte exactly two digits */ int b = _value[i]; if (b < 16) { valBuf.append ('0'); } valBuf.append (Integer.toHexString (b)); } return valBuf.toString (); } } jhove/classes/edu/harvard/hul/ois/jhove/SignatureType.java0000644000707400001440000000342710771562722023102 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove; /** * This class defines enumerated types for a Signature in a module. * Applications will not create or modify SignatureTypes, but will * use one of the predefined SignatureType instances * EXTENSION, FILETYPE, or MAGIC. * * @see Signature */ public final class SignatureType extends EnumerationType { /****************************************************************** * PUBLIC STATIC INSTANCES. ******************************************************************/ /** * Signature type for a file extension, i.e., a sequence of * characters following a period character in a file name. */ public static final SignatureType EXTENSION = new SignatureType ("File extension"); /** * Signature type for a Macintosh OS file type. This applies * only to Mac OS files, and is always a four-character code. */ public static final SignatureType FILETYPE = new SignatureType ("Mac OS file type"); /** * Signature type for a "magic number" stored in the file. */ public static final SignatureType MAGIC = new SignatureType ("Magic number"); /****************************************************************** * CLASS CONSTRUCTOR. ******************************************************************/ /** * Applications will never create SignatureTypes directly. **/ private SignatureType (String value) { super (value); } } jhove/classes/edu/harvard/hul/ois/jhove/SignatureUseType.java0000644000707400001440000000337110771562730023554 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove; /** * This class defines enumerated use types for a Signature in a module. * These give information on whether a signature is required in * valid content. * Applications will not create or modify SignatureUseTypes, but will * use one of the predefined SignatureUseType instances * MANDATORY, MANDATORY_IF_APPLICABLE, or OPTIONAL. * * @see Signature */ public final class SignatureUseType extends EnumerationType { /****************************************************************** * PRIVATE CLASS FIELDS. ******************************************************************/ /** * Use type for a required signature. */ public static final SignatureUseType MANDATORY = new SignatureUseType ("Mandatory"); /** * Use type for a conditionally required signature. */ public static final SignatureUseType MANDATORY_IF_APPLICABLE = new SignatureUseType ("Mandatory if applicable"); /** * Use type for an optional signature. */ public static final SignatureUseType OPTIONAL = new SignatureUseType ("Optional"); /****************************************************************** * CLASS CONSTRUCTOR. ******************************************************************/ /** * Applications will never create SignatureUseTypes directly. **/ private SignatureUseType (String value) { super (value); } } jhove/classes/edu/harvard/hul/ois/jhove/TextMDMetadata.java0000644000707400001440000003461411265662745023114 0ustar garyuserspackage edu.harvard.hul.ois.jhove; import java.nio.charset.Charset; import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; import java.util.Locale; import java.util.Map; import java.util.Set; /** * Encapsulation of the textMD metadata for text files. * See http://www.loc.gov/standards/textMd for more information. * * @author Thomas Ledoux * */ public class TextMDMetadata { /** * textMD namespace and version */ public static final String NAMESPACE = "info:lc/xmlns/textMD-v3"; public static final String DEFAULT_LOCATION = "http://www.loc.gov/standards/textMD/textMD-v3.01a.xsd"; public static final String VERSION = "3.0"; /** * Uses enumerated values of 'big', 'little', and 'middle' endian. */ public static final String[] BYTE_ORDER = { "big", "little", "middle" }; public static final int BYTE_ORDER_BIG = 0; public static final int BYTE_ORDER_LITTLE = 1; public static final int BYTE_ORDER_MIDDLE= 2; /** * Uses enumerated values of 'CR', 'LF' and 'CR/LF' for the idenntification of the linebreak. */ public static final String[] LINEBREAK = { "CR", "LF", "CR/LF" }; public static final int LINEBREAK_CR = 0; public static final int LINEBREAK_LF = 1; public static final int LINEBREAK_CRLF = 2; /** * Array of textMD charsets unknown by java.nio.charset.Charsets */ protected static final String[] UNKNOWN_JAVA_CHARSET = new String[] { "ISO-10646-UTF-1", "ISO_646.basic:1983", "INVARIANT", "BS_4730", "NATS-SEFI", "NATS-SEFI-ADD", "NATS-DANO", "NATS-DANO-ADD", "SEN_850200_B", "SEN_850200_C", "ISO-2022-CN-EXT", "JIS_C6220-1969-jp", "JIS_C6220-1969-ro", "IT", "PT", "ES", "greek7-old", "latin-greek", "DIN_66003", "NF_Z_62-010_(1973)", "latin-greek-1", "ISO_5427", "JIS_C6226-1978", "BS_viewdata", "INIS", "INIS-8", "INIS-cyrillic", "ISO_5427:1981", "ISO_5428:1980", "GB_1988-80", "GB_2312-80", "NS_4551-1", "NS_4551-2", "NF_Z_62-010", "videotex-suppl", "PT2", "ES2", "MSZ_7795.3", "greek7", "ASMO_449", "iso-ir-90", "JIS_C6229-1984-a", "JIS_C6229-1984-b", "JIS_C6229-1984-b-add", "JIS_C6229-1984-hand", "JIS_C6229-1984-hand-add", "JIS_C6229-1984-kana", "ISO_2033-1983", "ANSI_X3.110-1983", "T.61-7bit", "ECMA-cyrillic", "CSA_Z243.4-1985-1", "CSA_Z243.4-1985-2", "CSA_Z243.4-1985-gr", "ISO_8859-6-E", "ISO_8859-6-I", "T.101-G2", "ISO_8859-8-E", "ISO_8859-8-I", "CSN_369103", "JUS_I.B1.002", "ISO_6937-2-add", "IEC_P27-1", "JUS_I.B1.003-serb", "JUS_I.B1.003-mac", "greek-ccitt", "NC_NC00-10:81", "ISO_6937-2-25", "GOST_19768-74", "ISO_8859-supp", "ISO_10367-box", "ISO-8859-10", "latin-lap", "DS_2089", "us-dk", "dk-us", "KSC5636", "ISO-10646-UCS-4", "DEC-MCS", "hp-roman8", "macintosh", "IBM038", "IBM274", "IBM275", "IBM281", "IBM290", "IBM423", "IBM851", "IBM880", "IBM891", "IBM903", "IBM904", "IBM905", "EBCDIC-AT-DE", "EBCDIC-AT-DE-A", "EBCDIC-CA-FR", "EBCDIC-DK-NO", "EBCDIC-DK-NO-A", "EBCDIC-FI-SE", "EBCDIC-FI-SE-A", "EBCDIC-FR", "EBCDIC-IT", "EBCDIC-PT", "EBCDIC-ES", "EBCDIC-ES-A", "EBCDIC-ES-S", "EBCDIC-UK", "EBCDIC-US", "UNKNOWN-8BIT", "MNEMONIC", "MNEM", "VISCII", "VIQR", "IBM00924", "UNICODE-1-1", "SCSU", "UTF-7", "CESU-8", "UNICODE-1-1-UTF-7", "ISO-8859-14", "ISO-8859-16", "Extended_UNIX_Code_Fixed_Width_for_Japanese", "ISO-10646-UCS-Basic", "ISO-10646-Unicode-Latin1", "ISO-10646-J-1", "ISO-Unicode-IBM-1268", "ISO-Unicode-IBM-1276", "ISO-Unicode-IBM-1264", "ISO-Unicode-IBM-1265", "ISO-8859-1-Windows-3.0-Latin-1", "ISO-8859-1-Windows-3.1-Latin-1", "ISO-8859-2-Windows-Latin-2", "ISO-8859-9-Windows-Latin-5", "Adobe-Standard-Encoding", "Ventura-US", "Ventura-International", "PC8-Danish-Norwegian", "PC8-Turkish", "IBM-Symbols", "HP-Legal", "HP-Pi-font", "HP-Math8", "Adobe-Symbol-Encoding", "HP-DeskTop", "Ventura-Math", "Microsoft-Publishing", "HZ-GB-2312", }; /** * Set of unknown charsets in Java */ protected static Set setOfUnknownJavaCharset; /** * Map from ISO 639/2 T to ISO 639/2 B */ protected static Map fromISO_639_2_T2B; public static final String CHARSET_ASCII = "US-ASCII"; public static final String CHARSET_UTF8 = "UTF-8"; public static final String CHARSET_ISO8859_1 = "ISO-8859-1"; /** * To represent the unknown */ public static final int NILL = -1; static { setOfUnknownJavaCharset = new HashSet(Arrays.asList(UNKNOWN_JAVA_CHARSET)); // Map to transform from the terminology code to the bibliographic one fromISO_639_2_T2B = new HashMap(); fromISO_639_2_T2B.put("sqi", "alb"); fromISO_639_2_T2B.put("hye", "arm"); fromISO_639_2_T2B.put("eus", "baq"); fromISO_639_2_T2B.put("mya", "bur"); fromISO_639_2_T2B.put("zho", "chi"); fromISO_639_2_T2B.put("ces", "cze"); fromISO_639_2_T2B.put("nld", "dut"); fromISO_639_2_T2B.put("fra", "fre"); fromISO_639_2_T2B.put("kat", "geo"); fromISO_639_2_T2B.put("deu", "ger"); fromISO_639_2_T2B.put("ell", "gre"); fromISO_639_2_T2B.put("isl", "ice"); fromISO_639_2_T2B.put("mkd", "mac"); fromISO_639_2_T2B.put("mri", "mao"); fromISO_639_2_T2B.put("msa", "may"); fromISO_639_2_T2B.put("fas", "per"); fromISO_639_2_T2B.put("ron", "rum"); fromISO_639_2_T2B.put("slk", "slo"); fromISO_639_2_T2B.put("bod", "tib"); fromISO_639_2_T2B.put("cym", "wel"); } /** charset Usage: The character set employed by the text. Controlled vocab using IANA names for character sets. Attributes: none. Contains: none. Contained by: character_info. */ private String charset; /** byte_order Usage: Byte order, primarily useful for cases where its not clear just by specifying an IANA character set. Uses enumerated values of big, little, and middle' endian. Attributes: none. Contains: none. Contained by: character_info. */ private int byte_order = NILL; /** byte_size Usage: The size of an individual byte within the expressed as a number of bits (as integer). This does not necessarily equal the character size, as a character may have more than one, or a variable number of bytes per character. Attributes: none. Contains: none. Contained by: character_info. */ private String byte_size; /** character_size Usage: The size of an individual character within the character set as a number of bytes of the size expressed in the byte_size. In the case of variable encodings, such as UTF-8 for Unicode, the character_size element should state "variable" and also identify the specific variable character set encoding in the encoding attribute. Attributes: encoding. Contains: none. Contained by: character_info. */ private String character_size; /** linebreak Usage: How line breaks are represented in current file (which may differ from how they were originally encoded). Either carriage return, line feed, or carriage return/line feed. Attributes: none. Contains: none. Contained by: character_info. */ private int linebreak = NILL; /** language Usage: Language(s) used in work. Use ISO 639-2 codes, which are enumerated in the schema as valid text values. Attributes: none. Contains: none. Contained by: textMD. */ private String language; /** markup_basis Usage: The metalanguage used to create the markup language, such as SGML, XML, GML, etc. Attributes: version. Contains: none. Contained by: textMD. */ private String markup_basis; /** version Usage: Used to record the version number (as a string) for a given piece of software, a markup language, or a schema version. */ private String markup_basis_version; /** markup_language Usage: Markup language employed on the text (i.e., the specific schema or dtd). May be a URI for schema or dtd, but not mandatory. Attributes: version. Contains: none. Contained by: textMD. */ private String markup_language; /** version Usage: Used to record the version number (as a string) for a given piece of software, a markup language, or a schema version. */ private String markup_language_version; /** * @return the charset */ public String getCharset() { return charset; } /** * @param charset the charset to set */ public void setCharset(String charset) { this.charset = toTextMDCharset(charset); } /** * @return the byte_order */ public int getByte_order() { return byte_order; } public String getByte_orderString() { if (byte_order == NILL) { return BYTE_ORDER[BYTE_ORDER_BIG]; // default !!! } return BYTE_ORDER[byte_order]; } /** * @param byte_order the byte_order to set */ public void setByte_order(int byte_order) { this.byte_order = byte_order; } /** * @return the byte_size */ public String getByte_size() { return byte_size; } /** * @param byte_size the byte_size to set */ public void setByte_size(String byte_size) { this.byte_size = byte_size; } /** * @return the character_size */ public String getCharacter_size() { return character_size; } /** * @param character_size the character_size to set */ public void setCharacter_size(String character_size) { this.character_size = character_size; } /** * @return the linebreak */ public int getLinebreak() { return linebreak; } /** * @return the linebreak in String form */ public String getLinebreakString() { if (linebreak == NILL) { return LINEBREAK[LINEBREAK_CRLF]; // default !!! } return LINEBREAK[linebreak]; } /** * @param linebreak the linebreak to set */ public void setLinebreak(int linebreak) { this.linebreak = linebreak; } /** * @return the language */ public String getLanguage() { return language; } /** * @param language the language to set */ public void setLanguage(String language) { this.language = toISO_639_2(language); } /** * @return the markup_basis */ public String getMarkup_basis() { return markup_basis; } /** * @param markup_basis the markup_basis to set */ public void setMarkup_basis(String markup_basis) { this.markup_basis = markup_basis; } /** * @return the markup_basis_version */ public String getMarkup_basis_version() { return markup_basis_version; } /** * @param markup_basis_version the markup_basis_version to set */ public void setMarkup_basis_version(String markup_basis_version) { this.markup_basis_version = markup_basis_version; } /** * @return the markup_language */ public String getMarkup_language() { return markup_language; } /** * @param markup_language the markup_language to set */ public void setMarkup_language(String markup_language) { this.markup_language = markup_language; } /** * @return the markup_language_version */ public String getMarkup_language_version() { return markup_language_version; } /** * @param markup_language_version the markup_language_version to set */ public void setMarkup_language_version(String markup_language_version) { this.markup_language_version = markup_language_version; } /** * Transform a given charset in the "authorized" list given in the textMD schema enumeration. * From the schema documentation on charset (http://www.loc.gov/standards/textMD/elementSet/index.html#element_charset). * The character set employed by the text. Controlled vocab using IANA names for character sets: * http://www.iana.org/assignments/character-sets. * The problem arises because the java Charset uses the (preferred MIME name) where textMD uses the Name ... * @param srcCharset charset from the file * @return normalized charset */ public static String toTextMDCharset(String srcCharset) { if (srcCharset == null) return null; Charset cs = null; String textMDCharset = null; try { cs = Charset.forName(srcCharset); textMDCharset = cs.name(); } catch (Exception e) { // Try a unknown one if (setOfUnknownJavaCharset.contains(srcCharset)) { textMDCharset = srcCharset; } else { // Downgrade to default textMDCharset = CHARSET_ISO8859_1; } } if (textMDCharset != null) { return textMDCharset; } else { // Downgrade to default return CHARSET_ISO8859_1; } } /** * Transform a language to the ISO_639-2 language (only enumeration allowed in textMD schema). * @param srcLang language in the file * @return normalized language in 3 letters (except qaa-qtz) */ public static String toISO_639_2(String srcLang) { if (srcLang == null) return null; if ("qaa-qtz".equals(srcLang)) return srcLang; String textMDLang = null; if (srcLang.length() == 3) { textMDLang = srcLang; } else if (srcLang.length() == 2) { try { Locale loc = new Locale(srcLang); textMDLang = loc.getISO3Language(); } catch (Exception e) { // Unknown language } } else if (srcLang.length() > 3) { // Just try with the first 2 characters try { Locale loc = new Locale(srcLang.substring(0, 2)); srcLang = loc.getISO3Language(); } catch (Exception e) { // Unknown language } } if (textMDLang != null && textMDLang.length() == 3) { // From ISO 639-2/T to ISO 639-2/B if (fromISO_639_2_T2B.containsKey(textMDLang)) { textMDLang = (String)fromISO_639_2_T2B.get(textMDLang); } return textMDLang; } return null; } } jhove/classes/edu/harvard/hul/ois/jhove/Utf8BlockMarker.java0000644000707400001440000000334210771562724023240 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove; import edu.harvard.hul.ois.jhove.module.Utf8Block; import java.util.*; /** * * @author Gary McGath * */ public class Utf8BlockMarker { private boolean[] blocksUsed; public Utf8BlockMarker () { blocksUsed = new boolean [Utf8Block.unicodeBlock.length]; } public void markBlock (int code) { for (int i=0; i= code) { blocksUsed[i] = true; break; } } } /** Returns a Property listing the blocks that have been * marked as used. If no blocks have been marked, * returns null. */ public Property getBlocksUsedProperty (String name) { List block = new ArrayList (blocksUsed.length); for (int i=0; iwrappedStream already contains a root element. * @param version The XML version. Should be null or "1.0" unless * there's a really good reason. * @param encoding The name of the character encoding. May be null. * @param standalone The value of the standalone attribute. May be null. */ public XMLWrapperStream (InputStream wrappedStream, String rootName, String version, String encoding, String standalone) { _wrappedStream = wrappedStream; xmlDecl = ""; state = DECL; strIndex = 0; if (rootName != null) { rootStart = "<" + rootName + ">"; rootEnd = ""; } else { rootStart = ""; rootEnd = ""; } } /** * Constructor. Equivalent to * XMLWrapperStream (wrappedStream, null, null, null, null) * * @param wrappedStream The stream which this stream will subsume. */ public XMLWrapperStream (InputStream wrappedStream) { this (wrappedStream, null, null, null, null); } /** * Constructor. Equivalent to * XMLWrapperStream (wrappedStream, rootName, null, null, null) * * @param wrappedStream The stream which this stream will subsume. * @param rootName The name of the root element. May be null. */ public XMLWrapperStream (InputStream wrappedStream, String rootName) { this (wrappedStream, rootName, null, null, null); } /** * Get a byte. Successive calls will return the * XML declaration, then the wrapped stream. * * @see java.io.InputStream#read() */ public int read() throws IOException { int retval; if (state == DECL) { if (strIndex >= xmlDecl.length()) { // We have finished the declaration string now. state = ROOT_START; strIndex = 0; } else { // We haven't finished returning the declaration string. return (int) xmlDecl.charAt(strIndex++); } } // Each state can fall through to the next if (state == ROOT_START) { if (strIndex >= rootStart.length()) { // We have finished the root element start now. state = CONTENT; } else { return (int) rootStart.charAt(strIndex++); } } if (state == CONTENT) { // Metadata alleged stream doesn't look remotely like metadata -- // probably looking at wrong part of file! retval = _wrappedStream.read (); if (retval == -1) { state = ROOT_END; strIndex = 0; } else { return retval; } } // Must be ROOT_END if it gets here if (strIndex >= rootEnd.length()) { // We have finished the root element end and the document now. return -1; } else { return (int) rootEnd.charAt(strIndex++); } } } jhove/classes/edu/harvard/hul/ois/jhove/XMPHandler.java0000644000707400001440000001427511225650671022240 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove; import org.xml.sax.*; /** * This class encapsulates XMP metadata within a file. It makes use * of an InputStream as a data source. * * This differs from normal XML handling in that it's necessary to * process the xpacket processing instruction in order to determine * the encoding of the XML. the processingInstruction function looks * for xpacket, and throws a special SAXException if it's necessary * to change encoding. * * We don't actually extract any information from the XMP, but * simply check it for well-formedness. By convention, XMPHandler * should be invoked on an XMPSource (TBW), which provides the * ability to recapture the InputStream from which the XMP was * obtained and put it into a property once it's verified here. * */ public class XMPHandler extends org.xml.sax.helpers.DefaultHandler { /* URI strings */ private final static String xmpBasicSchema = "http://ns.adobe.com/xap/1.0/"; private final static String xmpRightsSchema = "http://ns.adobe.com/xap/1.0/rights/"; private final static String dublinCoreSchema = "http://purl.org/dc/elements/1.1/"; private final static String adobePDFSchema = "http://ns.adobe.com/pdf/1.3/"; private final static String photoshopSchema = "http://ns.adobe.com/photoshop/1.0/"; private int curStructType; /* Values which may be assigned to curStructType */ private final static int UNASSIGNED = 0, BAG = 1, ALT = 2, SEQ = 3; private boolean pdfaCompliant; public XMPHandler () { super (); pdfaCompliant = true; // compliance is presumed till disproven } /** Returns true if no violations of PDF/A compliance have been found, * false if a problem was detected. */ public boolean isPdfaCompliant () { return pdfaCompliant; } public void processingInstruction (String target, String data) throws SAXException { if ("xpacket".equals (target)) { // We assume that the data will be non-endian (i.e., simply // a stream of bytes) unless we find a valid endian code. boolean bigEndian = false; boolean noEndian = true; // a Processing Instruction can't really have attributes, // so we have to parse the data string ourselves. The order // of the attributes is guaranteed, fortunately. int idx = data.indexOf ("begin="); idx = data.indexOf ('"', idx + 1); if (data.length () >= idx + 2) { int char1 = (int) data.charAt (idx + 1); int char2 = (int) data.charAt (idx + 2); if (char1 == 0XFF && char2 == 0XFE) { noEndian = false; bigEndian = false; } else if (char1 == 0XFE && char2 == 0XFF) { noEndian = false; bigEndian = true; } // EF BB B8 signifies UTF-8, but that's the default anyway. } // Check the bytes attribute. We don't do anything with it except // note that it isn't allowed with PDF/A. idx = data.indexOf("bytes="); if (idx > 0) { pdfaCompliant = false; } // Next find encoding, which is optional. idx = data.indexOf ("encoding="); if (idx > 0) { pdfaCompliant = false; // not allowed in PDF/A idx = data.indexOf ('"', idx + 1); int encEnd = data.indexOf ('"', idx + 1 ); String encoding = data.substring (idx + 1, encEnd); // Throw a SAXException which consists of // "ENC=,", where // endian is either 'B' (big), 'L' (little) or space (none), and // enc is the encoding attribute. // This is an expected exception, not an error. String exText = "ENC="; if (noEndian) { exText += " ,"; } else if (bigEndian) { exText += "B,"; } else { exText += "L,"; } exText += encoding; throw new SAXException (encoding); } } } /** * Catches the start of an element and, if it's one we care * about, sets state information. */ public void startElement (String namespaceURI, String localName, String rawName, Attributes atts) throws SAXException { //System.out.println (namespaceURI); // Just for debugging and placeholding if (xmpBasicSchema.equals (namespaceURI)) { if ("Bag".equals (rawName)) { curStructType = BAG; } else if ("Seq".equals (rawName)) { curStructType = SEQ; } else if ("Alt".equals (rawName)) { curStructType = ALT; } } } /** * Catches the end of an element. */ public void endElement (String namespaceURI, String localName, String rawName) throws SAXException { if (xmpBasicSchema.equals (namespaceURI)) { // Check for the end of an XMP structure if ("Bag".equals (rawName)|| "Seq".equals (rawName) || "Alt".equals (rawName)) { curStructType = UNASSIGNED; } } } /** Catch a fatal error. This is put here because the default * behavior is to report a "fatal error" to standard output, * which is harmless but scary. */ public void fatalError(SAXParseException exception) throws SAXException { } } jhove/classes/edu/harvard/hul/ois/jhove/XMPSource.java0000644000707400001440000000745710771562731022133 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove; //import java.io.InputStream; import java.io.Reader; import org.xml.sax.InputSource; import java.io.IOException; /** * Class for providing an InputSource to XMPHandler. * Only an InputSource based on a Reader is supported. * * Each module can provide its own subclass of XMPSource. * The subclass must provide a way to * reset to the beginning and reread the data when makeProperty * is called. * * @author Gary McGath * */ public abstract class XMPSource extends InputSource { /** The Reader on which the InputSource is based. */ protected Reader _reader; /** * Constructor with Reader. */ public XMPSource(Reader rdr) { super(rdr); _reader = rdr; } /** * Generates a property from the underlying data. * The beginning and ending processing instructions are * stripped out. */ public Property makeProperty () throws IOException { boolean maybePI = false; // set to true for ?xpacket partial match boolean seenStart = false; // set to true after initial xpacket resetReader (); // go back to the beginning StringBuffer textBuf = new StringBuffer (); StringBuffer xpacBuf = new StringBuffer (); for (;;) { int ch = _reader.read(); if (ch < 0) { break; } if (maybePI) { xpacBuf.append((char) ch); if (" seenStart = true; xpacBuf.setLength (0); maybePI = false; int prevCh = 0; for (;;) { ch = _reader.read (); if (ch < 0 || (prevCh == (int) '?' && ch == (int) '>')) { break; } prevCh = ch; } } else { // This is the ending xpacket. Discard it. // We're done. break; } } if (!". // Start buffering. maybePI = true; xpacBuf.append ((char) ch); } else { // Just plain text. Append it. textBuf.append ((char) ch); } } } // Some XMP's end with lots of white space, so give // it a trim before returning. return new Property ("XMP", PropertyType.STRING, textBuf.toString ().trim ()); } /** * Causes reading to begin from the start again. * Typically this means creating a new value for * _reader that will start over. */ protected abstract void resetReader (); } jhove/classes/edu/harvard/hul/ois/jhove/build.xml0000644000707400001440000000542211204567557021255 0ustar garyusers API build file Jhove - JSTOR/Harvard Object Validation Environment Version 1.0 2004-02-03 Copyright 2004 by JSTOR and the President and Fellows of Harvard College
jhove/classes/edu/harvard/hul/ois/jhove/jhoveConfig.xsd0000644000707400001440000001334311205605337022404 0ustar garyusers The JHOVE configuration file consists of the JHOVE home directory, optional temporary directory and buffer size, an unbounded, ordered set of modules, followed by an optional unbounded set of output handlers. It has a single required attribute, version, which specifies the schema version to which a configuration file conforms. JHOVE home directory. Default character encoding used by the output handlers. Optional directory in which temporary files are created. Default value is the current working directory. Optional buffer size used for buffered I/O. Defeault value is 131072. The version of the MIX schema to be used in metadata output. Default value is "0.2". The number of initial bytes to search when matching internal signatures. A module consists of a fully package qualified class name, followed by an optional initialization parameter. A class consists of the fully package qualified class name for the module. Note that the class must be found on the Java CLASSPATH at the time that JHOVE is invoked. A module initialization value is passed to the module once at the time it is first instantiated. A module parameter value that is passed to the module immediately prior to each invocation of the parse() method. An output handler consists of a fully package qualified class name. A class consists of the fully package qualified class name for the output handler. Note that the class must be found on the Java CLASSPATH at the time that JHOVE is invoked. A handler initialization value that is passed to the class at the time it is first instantiated. A handler parameter value that is passed to the module immediately prior to each invocation of the showHeader() method. Logging level. The version attribute specifies the schema version to which a configuration file conforms. jhove/classes/edu/harvard/hul/ois/jhove/package.html0000644000707400001440000000133210771562724021710 0ustar garyusers Contains the classes needed for building a JHOVE application. This package must be used with a top-level class, with one or more output handlers or viewers, and with one or more modules for specific file formats.

Related Documentation

For overviews, tutorials, examples, guides, and tool documentation, please see: jhove/classes/edu/harvard/hul/ois/jhove/viewer/0000755000707400001440000000000011510702106020707 5ustar garyusersjhove/classes/edu/harvard/hul/ois/jhove/viewer/META-INF/0000755000707400001440000000000011510702111022043 5ustar garyusersjhove/classes/edu/harvard/hul/ois/jhove/viewer/META-INF/MANIFEST.MF0000644000707400001440000000047211510702111023500 0ustar garyusersManifest-Version: 1.0 Ant-Version: Apache Ant 1.6.5 Created-By: 16.3-b01 (Sun Microsystems Inc.) Built-By: gary Built-On: 2011-01-04T15:34:16 Main-Class: JhoveView Name: JHOVE Version: 1.0 Package: Swing Viewer Rights: Copyright 2004-2006 by JSTOR and the President and Fellows of Harvard College jhove/classes/edu/harvard/hul/ois/jhove/viewer/AppInfoWindow.java0000644000707400001440000000747610771561760024335 0ustar garyusers/********************************************************************** * JhoveView - JSTOR/Harvard Object Validation Environment * Copyright 2003-2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.viewer; import java.awt.*; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; import java.util.*; import javax.swing.*; import java.io.*; import edu.harvard.hul.ois.jhove.*; /** * This window is for presenting information about the JHOVE * application. */ public class AppInfoWindow extends InfoWindow { private JTextArea texta; public AppInfoWindow (App app, JhoveBase jbase) { super ("Application Info", app, jbase); setSaveActionListener ( new ActionListener() { public void actionPerformed (ActionEvent e) { saveInfo (); } }); texta = new JTextArea (); texta.setColumns (72); JScrollPane scrollpane = new JScrollPane (texta); texta.setFont (new Font ("sansserif", Font.PLAIN, 10)); texta.setLineWrap (true); texta.setWrapStyleWord (true); // Getting Swing to accept what you want for dimensions // apparently requires setting as many dimension restrictions // as possible, and hoping it will pay attention to some // of them. scrollpane.setMinimumSize (new Dimension (240, 240)); scrollpane.setMaximumSize (new Dimension (500, 250)); scrollpane.setPreferredSize (new Dimension (500, 250)); getContentPane ().add (scrollpane, "Center"); // Add a small panel at the bottom, since on some OS's there // may be stuff near the bottom of a window which will conflict // with the scroll bar. JPanel panel = new JPanel (); panel.setMinimumSize (new Dimension (8, 8)); getContentPane ().add (panel, "South"); showApp (app, jbase); pack (); // Scroll to the top. texta.setEditable (false); texta.select (0, 0); Rectangle r = new Rectangle (0, 0, 1, 1); texta.scrollRectToVisible (r); } private void showApp (App app, JhoveBase jbase) { String appName = app.getName (); if (appName != null) { texta.append ("Name: " + appName + eol); } String rel = app.getRelease (); if (rel != null) { texta.append ("Release: " + rel); } Date dt = app.getDate (); if (dt != null) { texta.append (" " + _dateFmt.format (dt) + eol); } String configFile = jbase.getConfigFile (); if (configFile != null) { texta.append ("Configuration: " + configFile + eol); } String saxClass = jbase.getSaxClass (); if (saxClass != null) { texta.append ("SAX parser: " + saxClass + eol); } Iterator iter = jbase.getModuleMap ().keySet ().iterator (); while (iter.hasNext ()) { //Module module = jbase.getModuleMap ((String) iter.next ()); Map moduleMap = jbase.getModuleMap (); Module module = (Module) moduleMap.get ((String) iter.next ()); texta.append (" Module: " + module.getName () + " " + module.getRelease () + eol); } // Reporting Handlers makes no sense in the viewer app; skip String rights = app.getRights (); if (rights != null) { texta.append (" Rights: " + rights + eol); } } /** * Saves the information to a file */ private void saveInfo () { PrintWriter wtr = doSaveDialog (); if (wtr == null) { return; } OutputHandler handler = selectHandler (); try { handler.setWriter(wtr); handler.show(_app); wtr.close (); } catch (Exception e) { JOptionPane.showMessageDialog (this, e.getMessage(), "Error writing file", JOptionPane.ERROR_MESSAGE); } } } jhove/classes/edu/harvard/hul/ois/jhove/viewer/ConfigWindow.java0000644000707400001440000005112310771561756024177 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2004 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.viewer; import java.awt.Dimension; import java.awt.Font; import java.awt.GridLayout; import java.awt.BorderLayout; import java.awt.Color; import java.awt.event.*; import java.util.*; import java.io.*; import java.text.ParseException; import javax.swing.*; import javax.swing.table.*; //import javax.swing.border.*; import edu.harvard.hul.ois.jhove.ConfigHandler; /** * Window for high-level editing of the application's * configuration file. * * @author Gary McGath * */ public class ConfigWindow extends JDialog { private final static String tempDirDefault = ""; /* The location of the config file. */ private File _configFile; /* List of modules. An entry in the list is an * array of 2 Strings, which are the fully qualified * class and the init string respectively. */ private List _modules; /* List of handlers. This is just a list of Strings * giving the class. */ private List _handlers; private int _bufferSize; private File _homeDir; private File _tempDir; private String _encoding; /* Display components. */ private Box _mainBox; private JTable _modTable; private JTable _hanTable; private AbstractTableModel _modTableModel; private AbstractTableModel _hanTableModel; private JLabel _homeLabel; private JLabel _tempDirLabel; private NumericField _bufSizeBox; private JTextField _encodingBox; final static Color _tableColor = new Color (235, 230, 210); final static Font _pathFont = new Font ("SansSerif", Font.PLAIN, 10); final static Font _infoFont = new Font ("SansSerif", Font.PLAIN, 12); /** * Constructor. * * @param configFile The file which was opened for * configuration information, or null * to start with a clean slate. * * @param handler A ConfigHandler which has already * processed the configuration file, * or null if configFile is null. */ public ConfigWindow (JFrame parent, File configFile, ConfigHandler handler) { super (parent, "Jhove Configuration", true); setDefaultCloseOperation (WindowConstants.DISPOSE_ON_CLOSE); _configFile = configFile; if (handler != null) { _modules = handler.getModule (); _handlers = handler.getHandler (); _bufferSize = handler.getBufferSize (); String dir = handler.getJhoveHome(); if (dir != null) { _homeDir = new File (dir); } dir = handler.getTempDir(); if (dir != null) { _tempDir = new File (dir); } _encoding = handler.getEncoding (); } else { // Set up defaults _modules = new ArrayList (10); _handlers = new ArrayList (5); _bufferSize = -1; _homeDir = null; _tempDir = null; _encoding = null; } // Set up a Box container for the window top level _mainBox = Box.createVerticalBox (); getContentPane().setLayout (new BorderLayout ()); getContentPane().add (_mainBox, "Center"); _mainBox.setBorder (BorderFactory.createLineBorder(Color.BLACK)); // Keep its size reasonable, taking screen size into account java.awt.Rectangle screenRect = MainScreen.mainBounds (); int maxHeight = screenRect.height - 200; if (maxHeight > 640) { maxHeight = 640; } _mainBox.setMaximumSize (new Dimension (500, maxHeight)); _mainBox.setPreferredSize (new Dimension (400, maxHeight)); addModuleTable (); _mainBox.add(Box.createRigidArea(new Dimension(0, 6))); addHandlerTable (); addHomeDir (); addTempDir (); addEncoding (); addBufferSize (); addSaveCancel (); pack (); } /* Create a JTable of two columns which lets the * user add and delete modules, and add it to * the window. * Called by the constructor. */ private void addModuleTable () { JPanel panel = new JPanel (); panel.setLayout (new BorderLayout ()); _mainBox.add (panel); // Use an anonymous class to implement the TableModel _modTableModel = new AbstractTableModel () { public int getRowCount () { return _modules.size (); } public int getColumnCount () { return 2; } public boolean isCellEditable(int row, int col) { return true; } public Object getValueAt (int row, int column) { String[] tuple = (String []) _modules.get (row); return tuple[column]; } public void setValueAt (Object obj, int row, int column) { String[] tuple = (String []) _modules.get (row); tuple[column] = (String) obj; } }; _modTable = new JTable (_modTableModel); // _modTable.setMaximumSize(new Dimension (250, 150)); _modTable.setSelectionMode (ListSelectionModel.SINGLE_SELECTION); _modTable.setCellSelectionEnabled (true); _modTable.setBackground (_tableColor); JScrollPane modScrollPane = new JScrollPane (_modTable); TableColumnModel colMod = _modTable.getColumnModel(); colMod.getColumn(0).setHeaderValue("Class"); colMod.getColumn(1).setHeaderValue("Init"); _modTable.doLayout (); // Add a panel with the modules caption and a couple of buttons. JPanel topPanel = new JPanel (); topPanel.setLayout (new BorderLayout ()); topPanel.add (new JLabel ("Modules:"), "West"); // Squeeze the buttons over to the right JPanel rightPanel = new JPanel (); topPanel.add (rightPanel, "East"); JButton addButton = new JButton ("Add"); addButton.addActionListener ( new ActionListener () { public void actionPerformed (ActionEvent e) { addModule (); } } ); rightPanel.add (addButton); JButton delButton = new JButton ("Delete"); delButton.addActionListener ( new ActionListener () { public void actionPerformed (ActionEvent e) { deleteModule (); } } ); // Make both buttons the same size addButton.setMinimumSize (delButton.getMinimumSize ()); addButton.setPreferredSize (delButton.getPreferredSize ()); rightPanel.add (delButton); panel.add (topPanel, "North"); panel.add (modScrollPane, "Center"); } /* Create a JTable of one column which lets the * user add and delete handlers, and add it to * the window. * Called by the constructor. */ private void addHandlerTable () { JPanel panel = new JPanel (); panel.setLayout (new BorderLayout ()); _mainBox.add (panel); // Use an anonymous class to implement the TableModel _hanTableModel = new AbstractTableModel () { public int getRowCount () { return _handlers.size (); } public int getColumnCount () { return 1; } public boolean isCellEditable(int row, int col) { return true; } public Object getValueAt (int row, int column) { return _handlers.get (row); } public void setValueAt (Object obj, int row, int column) { _handlers.set (row, obj); } }; _hanTable = new JTable (_hanTableModel); _hanTable.setSelectionMode (ListSelectionModel.SINGLE_SELECTION); _hanTable.setCellSelectionEnabled (true); _hanTable.setBackground (_tableColor); JScrollPane hanScrollPane = new JScrollPane (_hanTable); TableColumnModel colMod = _hanTable.getColumnModel(); colMod.getColumn(0).setHeaderValue("Class"); _hanTable.doLayout (); // Add a panel with the modules caption and a couple of buttons. JPanel topPanel = new JPanel (); topPanel.setLayout (new BorderLayout ()); topPanel.add (new JLabel ("Handlers:"), "West"); // Squeeze the buttons over to the right JPanel rightPanel = new JPanel (); topPanel.add (rightPanel, "East"); JButton addButton = new JButton ("Add"); addButton.addActionListener ( new ActionListener () { public void actionPerformed (ActionEvent e) { addHandler (); } } ); rightPanel.add (addButton); JButton delButton = new JButton ("Delete"); delButton.addActionListener ( new ActionListener () { public void actionPerformed (ActionEvent e) { deleteHandler (); } } ); // Make both buttons the same size addButton.setMinimumSize (delButton.getMinimumSize ()); addButton.setPreferredSize (delButton.getPreferredSize ()); rightPanel.add (delButton); panel.add (topPanel, "North"); panel.add (hanScrollPane, "Center"); } /* Add a label and text edit box for the encoding */ private void addEncoding () { JPanel panel = new JPanel (); _mainBox.add (panel); panel.add (new JLabel ("Default encoding: ")); _encodingBox = new JTextField (_encoding == null ? "" : _encoding, 14); panel.add (_encodingBox); } /* Add a label and text edit box for the buffer size */ private void addBufferSize () { JPanel panel = new JPanel (); _mainBox.add (panel); panel.add (new JLabel ("Buffer size (-1 for default): ")); _bufSizeBox = new NumericField (_bufferSize); panel.add (_bufSizeBox); } /* Add a button and file path string for home directory. * A home directory is required, but there may not be one * initially. * Called by the constructor. */ private void addHomeDir () { JPanel panel = new JPanel (); _mainBox.add (panel); panel.setLayout (new GridLayout (1, 2)); JButton homeButton = new JButton ("Home directory..."); String homeText = ""; if (_homeDir != null) { homeText = _homeDir.getPath(); } _homeLabel = new JLabel(homeText); _homeLabel.setFont (_pathFont); // Standard trick for not making button take up all available space JPanel bpan = new JPanel (); //panel.add (bpan); panel.add (bpan); bpan.add (homeButton); homeButton.addActionListener ( new ActionListener () { public void actionPerformed (ActionEvent e) { chooseHomeDir (); } } ); panel.add (_homeLabel); // Both of these probably need to be class variables } /* Add a button and file path string for temporary directory. * Called by the constructor. */ private void addTempDir () { JPanel panel = new JPanel (); _mainBox.add (panel); panel.setLayout (new GridLayout (1, 2)); JButton tempDirButton = new JButton ("Temp directory..."); String tempDirText = tempDirDefault; if (_tempDir != null) { tempDirText = _tempDir.getPath(); } _tempDirLabel = new JLabel(tempDirText); _tempDirLabel.setFont (_pathFont); // Standard trick for not making button take up all available space JPanel bpan = new JPanel (); panel.add (bpan); bpan.add (tempDirButton); tempDirButton.addActionListener ( new ActionListener () { public void actionPerformed (ActionEvent e) { chooseTempDir (); } } ); panel.add (_tempDirLabel); } /* Add OK and cancel buttons, and a little information */ private void addSaveCancel () { final ConfigWindow thiscw = this; JPanel buttonPanel = new JPanel (); getContentPane().add (buttonPanel, "South"); buttonPanel.setLayout (new BorderLayout ()); JLabel changesLabel = new JLabel ("Changes take effect on relaunch"); changesLabel.setFont (_infoFont); buttonPanel.add (changesLabel, "North"); JPanel panel = new JPanel (); buttonPanel.add (panel, "Center"); panel.setLayout (new GridLayout (1, 3)); // Blank panel for positioning JPanel bpan = new JPanel (); panel.add (bpan); // Add OK button bpan = new JPanel (); JButton saveButton = new JButton ("OK"); getRootPane().setDefaultButton (saveButton); saveButton.addActionListener ( new ActionListener () { public void actionPerformed (ActionEvent e) { doSave (); } } ); bpan.add (saveButton); panel.add (bpan); // Add cancel button bpan = new JPanel (); JButton cancelButton = new JButton ("Cancel"); cancelButton.addActionListener ( new ActionListener () { public void actionPerformed (ActionEvent e) { thiscw.dispose (); } } ); // Make both buttons the same size saveButton.setMinimumSize (cancelButton.getMinimumSize ()); saveButton.setPreferredSize (cancelButton.getPreferredSize ()); bpan.add (cancelButton); panel.add (bpan); } /* Carry out the action of the "Save" button. */ private void doSave () { // Splitting off the output to a ConfigFileWriter class // makes sense. try { // Update values from the editing components try { _bufSizeBox.commitEdit (); } catch (ParseException e) { return; // refuse to save if value is invalid } Object bufSizeValue = _bufSizeBox.getValue (); _bufferSize = ((Long) _bufSizeBox.getValue ()).intValue (); _encoding = _encodingBox.getText (); // *** Writes to temp file for debugging //ConfigWriter cw = new ConfigWriter (new File (_homeDir, "temp")); ConfigWriter cw = new ConfigWriter (_configFile, this); cw.writeFile (_modules, _handlers, _homeDir, _tempDir, _encoding, _bufferSize); } catch (IOException e) { JOptionPane.showMessageDialog(this, e.getMessage (), "Can't create config", JOptionPane.ERROR_MESSAGE); } // Close the window dispose (); } /* Choose the home directory. Since there must be one, * there is no "default" button. */ private void chooseHomeDir () { JFileChooser chooser = new JFileChooser (); if (_homeDir != null) { chooser.setCurrentDirectory (_homeDir); } chooser.setDialogTitle ("Select Home Directory"); chooser.setFileSelectionMode (JFileChooser.DIRECTORIES_ONLY); if (chooser.showOpenDialog (this) == JFileChooser.APPROVE_OPTION) { _homeDir = chooser.getSelectedFile(); _homeLabel.setText (_homeDir.getPath ()); } } /* Choose the temp directory. Allow a "default" selection. */ private void chooseTempDir () { final JFileChooser chooser = new JFileChooser (); if (_homeDir != null) { chooser.setCurrentDirectory (_tempDir); } chooser.setDialogTitle ("Select Temporary Directory"); // Create a custom panel so we can add the Default button. JPanel accessory = new JPanel (); accessory.setPreferredSize(new Dimension (160, 40)); JButton defaultButton = new JButton ("System Default"); defaultButton.addActionListener ( new ActionListener () { public void actionPerformed (ActionEvent e) { // Exit the dialog and clear _tempDir _tempDir = null; _tempDirLabel.setText (tempDirDefault); chooser.cancelSelection (); } } ); accessory.add (defaultButton); chooser.setAccessory (accessory); chooser.setFileSelectionMode (JFileChooser.DIRECTORIES_ONLY); if (chooser.showOpenDialog (this) == JFileChooser.APPROVE_OPTION) { _tempDir = chooser.getSelectedFile(); _tempDirLabel.setText (_tempDir.getPath ()); } } /* Add a blank item for a new module */ private void addModule () { ListSelectionModel ls = _modTable.getSelectionModel (); int selRow = ls.getMinSelectionIndex(); // If there's no selection, append to the end if (selRow < 0) { selRow = _modules.size (); } String[] tuple = new String[2]; tuple[0] = ""; // class tuple[1] = null; // init _modules.add (selRow, tuple); _modTableModel.fireTableRowsInserted(selRow, selRow); } /* Delete the selected module line */ private void deleteModule () { ListSelectionModel ls = _modTable.getSelectionModel (); int selRow = ls.getMinSelectionIndex(); if (selRow < 0) { return; // no selection } _modules.remove (selRow); _modTableModel.fireTableRowsDeleted (selRow, selRow); } /* Add a blank item for a new handler */ private void addHandler () { ListSelectionModel ls = _hanTable.getSelectionModel (); int selRow = ls.getMinSelectionIndex(); // If there's no selection, append to the end if (selRow < 0) { selRow = _handlers.size (); } _handlers.add (selRow, ""); _hanTableModel.fireTableRowsInserted(selRow, selRow); } /* Delete the selected handler line */ private void deleteHandler () { ListSelectionModel ls = _hanTable.getSelectionModel (); int selRow = ls.getMinSelectionIndex(); if (selRow < 0) { return; // no selection } _handlers.remove (selRow); _hanTableModel.fireTableRowsDeleted (selRow, selRow); } /* When the user chooses to close and save, or just save, * we come here. * * @param configFile The location to save the file, or none * if a simple "save" was selected. If * configFile is non-null, it becomes the * new default location. */ private void saveConfig (File configFile) { if (configFile != null) { _configFile = configFile; } // _configFile may be null. In that case we must put up // a dialog to select the config file here, and exit the function // if the user cancels. try { FileOutputStream ostrm = new FileOutputStream (configFile); } catch (IOException e) { JOptionPane.showMessageDialog (this, e.getMessage(), "Error saving config", JOptionPane.ERROR_MESSAGE); } } private File doConfigFileDialog () { JFileChooser chooser = new JFileChooser (); chooser.setFileSelectionMode (JFileChooser.DIRECTORIES_ONLY); if (chooser.showOpenDialog (this) == JFileChooser.APPROVE_OPTION) { return chooser.getSelectedFile(); } return null; // placeholder } } jhove/classes/edu/harvard/hul/ois/jhove/viewer/ConfigWriter.java0000644000707400001440000001544610771561757024215 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College * **********************************************************************/ package edu.harvard.hul.ois.jhove.viewer; import java.io.*; import java.util.*; import javax.swing.*; /** * * Class to write out configuration information to the configuration file. * To minimize the chance of getting into a bad state, it writes to a * temporary file, then replaces the old config file with that file, * rather than directly overwriting the existing file. * * @author Gary McGath * */ public class ConfigWriter { private PrintWriter _confOut; private File _tempFile; private File _confFile; ConfigWindow _parent; /** * Constructor. * Creates a temporary file for writing and creates an OutputStreamWriter * to write to it. If there is already a file located by * file, it will not be replaced or overwritten * until writeFile has successfully written out * the temporary file. * * @param file Location of the configuration file * * @param parent The ConfigWindow which invoked this instance */ public ConfigWriter (File file, ConfigWindow parent) throws IOException { _confFile = file; _parent = parent; // Set up a temporary file to write to. String path = file.getParent(); _tempFile = File.createTempFile ("jho", ".conf", new File (path)); //_tempFile.createNewFile(); FileOutputStream ostrm = new FileOutputStream (_tempFile); OutputStreamWriter osw = new OutputStreamWriter (ostrm, "UTF-8"); _confOut = new PrintWriter (osw); } /** * Writes out the content of the file to the temporary file, * then deletes the existing configuration file (as specified * by the constructor parameter) and renames the temporary file * to the configuration file. * * If the temporary file can't be written, or the configuration * file can't be replaced, a warning dialog is put up and the * configuration file remains unchanged. */ public void writeFile (List modules, List handlers, File homeDir, File tempDir, String encoding, int bufferSize) throws IOException { writeHead (); // Write out the modules ListIterator iter = modules.listIterator (); while (iter.hasNext ()) { String[] tuple = (String []) iter.next (); String clas = tuple[0]; String init = tuple[1]; // The class must be non-null, but init may be null. // If the class is empty, it's a user error (probably // clicked "Add" and then lost track of it). Don't // write it out. if (!"".equals (clas)) { _confOut.println (" "); _confOut.println (" " + encodeContent (clas) + ""); if (init != null && init.length () > 0) { _confOut.println (" " + encodeContent (init) + ""); } _confOut.println (" "); } } // Write out the handlers iter = handlers.listIterator (); while (iter.hasNext ()) { String handler = (String) iter.next (); _confOut.println (" "); _confOut.println (" " + encodeContent (handler) + ""); _confOut.println (" "); } // Write the buffer size if not default if (bufferSize > 0) { _confOut.println (" " + bufferSize + ""); } // Write out the encoding if (encoding != null && encoding.length() > 0) { _confOut.println (" " + encodeContent (encoding) + ""); } // Write the home and temp directories. Home must always be valid. _confOut.println (" " + encodeContent (homeDir.getPath ()) + ""); if (tempDir != null) { _confOut.println (" " + encodeContent (tempDir.getPath ()) + ""); } writeTail (); _confOut.close (); // Replace the old file with the new. if (_confFile.exists () && !_confFile.delete ()) { JOptionPane.showMessageDialog(_parent, "Can't replace old config file", "Error", JOptionPane.ERROR_MESSAGE); _tempFile.delete (); } else { _tempFile.renameTo (_confFile); } } /* Write the fixed lines which begin the config file */ private void writeHead () throws IOException { _confOut.println(""); _confOut.println(""); } /* Write out the fixed end of the config file */ private void writeTail () throws IOException { _confOut.println(""); } /** * Encodes a content String in XML-clean form, converting characters * to entities as necessary. The null string will be * converted to an empty string. */ private static String encodeContent (String content) { if (content == null) { content = ""; } StringBuffer buffer = new StringBuffer (content); int n = 0; while ((n = buffer.indexOf ("&", n)) > -1) { buffer.insert (n+1, "amp;"); n +=5; } n = 0; while ((n = buffer.indexOf ("<", n)) > -1) { buffer.replace (n, n+1, "<"); n += 4; } n = 0; while ((n = buffer.indexOf (">", n)) > -1) { buffer.replace (n, n+1, ">"); n += 4; } return buffer.toString (); } } jhove/classes/edu/harvard/hul/ois/jhove/viewer/InfoWindow.java0000644000707400001440000002265710771561757023700 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.viewer; import java.awt.HeadlessException; import java.util.*; import java.io.*; import java.awt.Dimension; import java.awt.Toolkit; import java.awt.event.KeyEvent; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; import java.text.SimpleDateFormat; import javax.swing.*; import edu.harvard.hul.ois.jhove.*; /** * An abstract superclass for windows that display information * and can be saved to a file. * * @author Gary McGath */ public abstract class InfoWindow extends JFrame { protected App _app; private JhoveBase _base; private JMenuItem _saveItem; private JMenuItem _closeItem; private JComboBox _handlerBox; private JComboBox _encodingBox; private static String _lastEncoding; private static String _lastHandler; protected static final String eol = System.getProperty("line.separator"); private static final String[] encodings = { "UTF-8", "ISO-8859-1", "Cp1252", "MacRoman"}; protected SimpleDateFormat _dateFmt; /** * * Constructor. * The window is created with a File menu that has * "Save as" and "Close" items. * * @param title Window title. Will be truncated to 32 characters. * @param app The associated App object. * @param base The associated JhoveBase object. * * @throws java.awt.HeadlessException */ public InfoWindow(String title, App app, JhoveBase base) throws HeadlessException { super(title); // Avoid silly window titles from excessively long URI's if (title.length () > 32) { setTitle(title.substring(0,29) + "..."); } _app = app; _base = base; JMenuBar menuBar = new JMenuBar (); JMenu fileMenu = new JMenu ("File"); menuBar.add (fileMenu); _saveItem = new JMenuItem ("Save as..."); fileMenu.add (_saveItem); _closeItem = new JMenuItem ("Close"); fileMenu.add (_closeItem); // Make mnemonic control-W, command-W, or whatever-W _closeItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_W, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask())); _closeItem.addActionListener (new ActionListener() { public void actionPerformed (ActionEvent e) { closeFromMenu (); } }); setDefaultCloseOperation (JFrame.HIDE_ON_CLOSE); setJMenuBar (menuBar); _dateFmt = new SimpleDateFormat ("yyyy-MM-dd"); } /** Sets the ActionListener for the "Save as" menu item. * Subclasses need to call this with an appropriate * ActionListener in order to make the menu item * functional. */ protected void setSaveActionListener (ActionListener listener) { _saveItem.addActionListener (listener); } /** Puts up a dialog to save the file. * If the user requests a file, deletes any old file * with the same name, creates the new file, and * returns a PrintWriter to the file. * The save dialog is customized with two * JComboBoxes. One lets the user * select a character encoding, which is used by * the PrintWriter; the other lets the user * choose an OutputHandler to control the output * format (e.g., text or HTML). * The encodings shown in a JComboBox are * UTF-8, ISO-8859-1, Cp1252, MacRoman, and * the default encoding for the locale (if different * from the above), but the user can type in other * encodings. If an unknown encoding is selected, * an error dialog will be displayed. * OutputHandlers other than the ones known * to the application can't be specified (what would * the application do with them?) */ protected PrintWriter doSaveDialog () { JFileChooser saver = new JFileChooser (); // On Mac OS, make packages and .apps opaque. JhoveWindow.makeChooserOpaque (saver); File lastDir = _base.getSaveDirectory (); if (lastDir != null) { saver.setCurrentDirectory(lastDir); } // Create a custom panel so we can set options. JPanel accessory = new JPanel (); accessory.setPreferredSize(new Dimension (180, 120)); // Build list of handlers into a popup menu Vector handlerItems = new Vector (10); java.util.List handlerList = _base.getHandlerList (); Iterator iter = handlerList.iterator (); while (iter.hasNext ()) { OutputHandler han = (OutputHandler) iter.next (); handlerItems.add (han.getName ()); } _handlerBox = new JComboBox(handlerItems); _handlerBox.setSize (120, 20); accessory.add (new JLabel ("Choose output handler")); if (_lastHandler != null) { _handlerBox.setSelectedItem (_lastHandler); } accessory.add (_handlerBox); // Build a list of encodings into a popup menu. // The default encoding must be the first. Vector encItems = new Vector (5); String defEnc = _base.getEncoding (); if (defEnc != null) { encItems.add (defEnc); } for (int i = 0; i < encodings.length; i++) { String enc = encodings[i]; if (!enc.equals (defEnc)) { encItems.add (enc); } } _encodingBox = new JComboBox (encItems); if (_lastEncoding != null) { _encodingBox.setSelectedItem (_lastEncoding); } _encodingBox.setSize (120, 20); _encodingBox.setEditable (true); // Let user type in any encoding accessory.add (new JLabel ("Select encoding")); accessory.add (_encodingBox); saver.setAccessory(accessory); saver.setDialogTitle("Save information to file"); int retval = saver.showSaveDialog (this); if (retval == JFileChooser.APPROVE_OPTION) { FileOutputStream os = null; File file = null; try { _base.setSaveDirectory (saver.getCurrentDirectory ()); file = saver.getSelectedFile(); if (file.exists ()) { int opt = JOptionPane.showConfirmDialog (this, "That file already exists. Replace?", "Replace", JOptionPane.OK_CANCEL_OPTION); if (opt != JOptionPane.OK_OPTION) { return null; } // User requested replacement. Delete the old file. if (!file.delete ()) { JOptionPane.showMessageDialog(this, "Could not delete file", "File not deleted", JOptionPane.ERROR_MESSAGE); return null; } } file.createNewFile(); String encoding = (String) _encodingBox.getSelectedItem(); os = new FileOutputStream (file); OutputStreamWriter writer = new OutputStreamWriter (os, encoding); return new PrintWriter (writer); } catch (UnsupportedEncodingException e) { JOptionPane.showMessageDialog(this, "Unknown encoding ", "File not saved", JOptionPane.ERROR_MESSAGE); // Get rid of the file try { if (os != null) { os.close (); } file.delete (); } catch (Exception f) {} return null; } catch (IOException e) { JOptionPane.showMessageDialog(this, e.getMessage (), "File not saved", JOptionPane.ERROR_MESSAGE); // Get rid of the file try { if (os != null) { os.close (); } file.delete (); } catch (Exception f) {} return null; } } return null; } /** Sets up the OutputHandler from the JComboBox * and returns it. Subclasses should call * selectHandler to obtain an * OutputHandler with which to produce data. */ protected OutputHandler selectHandler () { int modidx = _handlerBox.getSelectedIndex (); _lastHandler = (String) _handlerBox.getSelectedItem (); OutputHandler handler = (OutputHandler) _base.getHandlerMap().get (_lastHandler.toLowerCase ()); _lastEncoding = (String) _encodingBox.getSelectedItem (); handler.setEncoding (_lastEncoding); handler.setApp (_app); handler.setBase (_base); return handler; } /** * Handler for the "Close" menu item. * Simply hides the window without deleting it. */ protected void closeFromMenu () { hide (); } } jhove/classes/edu/harvard/hul/ois/jhove/viewer/JhoveWindow.java0000644000707400001440000007345611205605417024044 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003-2005 by JSTOR and the President and Fellows of Harvard College * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * USA **********************************************************************/ package edu.harvard.hul.ois.jhove.viewer; import java.awt.Container; import java.awt.Color; //import java.awt.Cursor; import java.awt.Toolkit; import java.awt.event.*; import java.awt.dnd.*; import java.awt.datatransfer.*; import java.io.*; import java.util.*; import java.net.*; import java.util.logging.*; import javax.swing.*; import edu.harvard.hul.ois.jhove.*; import javax.xml.parsers.*; import org.xml.sax.*; import org.xml.sax.helpers.*; /** * Main window of JHoveViewer application. */ public class JhoveWindow extends JFrame implements Callback, DropTargetListener { private App _app; private JhoveBase _base; private AppInfoWindow _appInfoWin; private ModuleInfoWindow _moduleInfoWin; private JMenu _moduleSubmenu; private JMenuItem _openFileItem; private JMenuItem _openURLItem; private JMenuItem _closeAllItem; private ButtonGroup _moduleGroup; private String syncStr = ""; // object just for synchronizing private boolean _rawOutput; private boolean _doChecksum; private ProgressWindow _progWind; private ConfigWindow _configWind; private PrefsWindow _prefsWindow; private File _lastDir; private String _selectedModule; private ActionListener _moduleMenuListener; private JPanel logo; private ViewHandler _viewHandler; // Initial position for view windows. // Stagger them by adding an increment each time. private static int viewWinXPos = 24; private static int viewWinYPos = 24; // Original positions for cyclying back to. private static final int viewWinOrigXPos = 24; private static final int viewWinOrigYPos = 24; private static final int viewWinXInc = 25; private static final int viewWinYInc = 22; private static final int appInfoWinXPos = 50; private static final int appInfoWinYPos = 45; private static final int moduleInfoWinXPos = 100; private static final int moduleInfoWinYPos = 90; /** Logger for a module class. */ protected Logger _logger; /* Static instance of InvisibleFilenameFilter */ private final InvisibleFilenameFilter invisibleFilter = new JhoveWindow.InvisibleFilenameFilter (); public JhoveWindow (App app, JhoveBase base) { super ("Jhove"); _logger = Logger.getLogger ("edu.harvard.hul.ois.jhove.viewer"); _app = app; _base = base; _moduleMenuListener = new ActionListener () { public void actionPerformed (ActionEvent e) { _selectedModule = e.getActionCommand (); } }; _lastDir = null; _moduleGroup = new ButtonGroup (); addMenus (); Container rootPane = getContentPane (); //rootPane.setLayout (new GridLayout (4, 2)); setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE); // Define a Comparator function for Modules Comparator modListComparator = new Comparator () { public int compare (Object o1, Object o2) { Module m1 = (Module) o1; Module m2 = (Module) o2; String name1 = m1.getName (); String name2 = m2.getName (); return String.CASE_INSENSITIVE_ORDER.compare (name1, name2); } }; // Build combo box of available modules Vector moduleItems = new Vector (10); java.util.List moduleList = base.getModuleList (); // Clone the list so we can display it in sorted order // without munging the app's preferred order java.util.List menuModuleList = new ArrayList (moduleList.size ()); menuModuleList.addAll(moduleList); Collections.sort (menuModuleList, modListComparator); Iterator iter = menuModuleList.iterator (); moduleItems.add ("(None selected)"); JRadioButtonMenuItem modItem = null; String itemName = null; while (iter.hasNext ()) { Module mod = (Module) iter.next (); itemName = mod.getName (); modItem = new JRadioButtonMenuItem (itemName); modItem.setActionCommand (itemName); modItem.addActionListener (_moduleMenuListener); _moduleSubmenu.add (modItem); _moduleGroup.add (modItem); //moduleItems.add (mod.getName ()); } logo = new JPanel (); // Add the image, which should be in jhove-logo.gif in // the viewer directory URL logoURL = JhoveWindow.class.getResource("jhove-logo.gif"); if (logoURL != null) { ImageIcon icn = new ImageIcon (logoURL); icn.setDescription ("Jhove logo"); setNormalBackground (); JLabel logoLabel = new JLabel (icn); logo.add (logoLabel); } // Allow files to be dragged to the logo pane. DropTarget dt = new DropTarget (logo, this); rootPane.add (logo); pack (); // Set up a companion progress window. This will // be hidden and displayed as needed. ActionListener listener = new ActionListener () { public void actionPerformed (ActionEvent e) { _base.abort (); } }; _progWind = new ProgressWindow (listener); // Set up a Handler which is tailored to this application. _viewHandler = new ViewHandler(this, _app, _base); } /** * Set up the menu bar and menus. */ final private void addMenus () { final JhoveWindow jthis = this; JMenuBar menuBar = new JMenuBar (); JMenu fileMenu = new JMenu ("File"); menuBar.add (fileMenu); _openFileItem = new JMenuItem ("Open file..."); fileMenu.add (_openFileItem); // The following allows accelerator modifier keys to be set which are // appropriate to the host OS _openFileItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask())); _openFileItem.addActionListener ( new ActionListener () { public void actionPerformed (ActionEvent e) { pickAndAnalyzeFile (); } } ); _openURLItem = new JMenuItem ("Open URL..."); fileMenu.add (_openURLItem); _openURLItem.addActionListener ( new ActionListener () { public void actionPerformed (ActionEvent e) { pickAndAnalyzeURL (); } } ); _closeAllItem = new JMenuItem ("Close all document windows"); fileMenu.add (_closeAllItem); // Action listeners are added by document windows if (!MacStuff.isMacintosh ()) { // Token attempt at Mac friendliness: the Exit item // in the File menu is redundant under OS X JMenuItem quitItem = new JMenuItem ("Exit"); fileMenu.add (quitItem); quitItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Q, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask())); quitItem.addActionListener ( new ActionListener () { public void actionPerformed (ActionEvent e) { System.exit (0); } } ); } JMenu editMenu = new JMenu ("Edit"); menuBar.add (editMenu); _moduleSubmenu = new JMenu ("Select module"); editMenu.add (_moduleSubmenu); JRadioButtonMenuItem noModuleItem = new JRadioButtonMenuItem ("(Any)"); noModuleItem.setActionCommand (""); noModuleItem.setSelected (true); noModuleItem.addActionListener (_moduleMenuListener); _moduleSubmenu.add (noModuleItem); _moduleGroup.add (noModuleItem); _selectedModule = ""; // Modules will be added later JMenuItem editConfigItem = new JMenuItem ("Edit configuration..."); editMenu.add (editConfigItem); editConfigItem.addActionListener ( new ActionListener () { public void actionPerformed (ActionEvent e) { openConfigWindow (); } } ); JMenuItem prefItem = new JMenuItem ("Preferences..."); editMenu.add (prefItem); prefItem.addActionListener ( new ActionListener () { public void actionPerformed (ActionEvent e) { if (_prefsWindow == null) { _prefsWindow = new PrefsWindow (jthis); _prefsWindow.setLocation (180, 160); _prefsWindow.pack (); } _prefsWindow.saveAndShow (); } } ); JMenu helpMenu = new JMenu ("Help"); menuBar.add (helpMenu); JMenuItem aboutModuleItem = new JMenuItem ("About module..."); helpMenu.add (aboutModuleItem); aboutModuleItem.addActionListener ( new ActionListener () { public void actionPerformed (ActionEvent e) { showModuleInfo (); } } ); JMenuItem aboutAppItem = new JMenuItem ("About Jhove..."); helpMenu.add (aboutAppItem); aboutAppItem.addActionListener ( new ActionListener () { public void actionPerformed (ActionEvent e) { showAppInfo (); } } ); setJMenuBar (menuBar); } /** Set the normal background color. */ private void setNormalBackground () { logo.setBackground (new Color (180, 255, 255)); } /** Set the background color for drag-over. */ private void setDragBackground () { logo.setBackground (new Color (180, 240, 140)); } /** * Here we let the user pick a file, then analyze it. */ public void pickAndAnalyzeFile () { // Only one thread can be associated with a JhoveBase. // Make sure we can't have concurrent threads. _openFileItem.setEnabled (false); _openURLItem.setEnabled (false); File file = null; synchronized (syncStr) { JFileChooser chooser = new JFileChooser (); makeChooserOpaque (chooser); if (_lastDir != null) { chooser.setCurrentDirectory (_lastDir); } chooser.setDialogTitle ("Pick a file to analyze"); int ok = chooser.showOpenDialog (this); if (ok == JFileChooser.APPROVE_OPTION) { file = chooser.getSelectedFile (); _lastDir = chooser.getCurrentDirectory (); ParseThread thr = new ParseThread (this); thr.setFile (file); thr.setModule (getSelectedModule ()); thr.start (); _base.setCurrentThread (thr); } else { _openFileItem.setEnabled (true); _openURLItem.setEnabled (true); return; } } } /** * Makes a JFileChooser dialog treat packages and applications * as opaque entities. Has no effect on other platforms. */ public static void makeChooserOpaque (JFileChooser chooser) { // Apple TN 2042 LIES; we need to set both properties. chooser.putClientProperty ("JFileChooser.appBundleIsTraversable", "never"); chooser.putClientProperty ("JFileChooser.packageIsTraversable", "never"); } /** * This method does the actual work of pickAndAnalyzeFile, * called from a thread so it can run asynchronously. */ public void pickAndAnalyzeFile1 (File file, Module module) { String name = file.getName (); _base.resetAbort (); _progWind.setDocName (name, false); _progWind.setProgressState (ProgressWindow.PROCESSING, false); _progWind.setByteCount (-1, true); _progWind.show (); // RepInfo info = new RepInfo (name); try { List files = new ArrayList(1); files.add (file); openAndParse (files, module); } catch (ThreadDeath d) { _openFileItem.setEnabled (true); _openURLItem.setEnabled (true); throw d; } _openFileItem.setEnabled (true); _openURLItem.setEnabled (true); } /** This is called to analyze a List of files. */ public void pickAndAnalyzeFileList1 (List files, Module module) { if (files.isEmpty ()) { return; } // Set up progress window for the first file File file = (File) files.get (0); String name = file.getName (); _base.resetAbort (); _progWind.setDocName (name, false); _progWind.setProgressState (ProgressWindow.PROCESSING, false); _progWind.setByteCount (-1, true); _progWind.show (); try { openAndParse (files, module); } catch (ThreadDeath d) { _openFileItem.setEnabled (true); _openURLItem.setEnabled (true); throw d; } _openFileItem.setEnabled (true); _openURLItem.setEnabled (true); } /** * This method opens a directory, recursing through multiple * levels if possible, and feeding individual files to * pickAndAnalyzeFile1. */ public void analyzeDirectory (File file, Module module) { // Construct list, excluding files that start with "." String[] subfiles = file.list (invisibleFilter); if (subfiles != null) { // Walk through the directory for (int i = 0; i < subfiles.length; i++) { File subfile = new File (file, subfiles[i]); if (subfile != null) { if (subfile.isDirectory ()) { // Recurse through subdirectories analyzeDirectory (subfile, module); } else { pickAndAnalyzeFile1 (subfile, module); } } } } } /* Here we let the user pick a URL, then analyze it. */ public void pickAndAnalyzeURL () { // There are multithreading issues which haven't been resolved. // Rather than do a serious rewrite of the code, it's sufficient // to make sure there can't be more than one file being processed // at a time. _openFileItem.setEnabled (false); _openURLItem.setEnabled (false); String uri = null; synchronized (syncStr) { String urlStr = (String)JOptionPane.showInputDialog( this, "Choose a URL to analyze", "Select URL", JOptionPane.PLAIN_MESSAGE, null, null, "http://"); if (urlStr == null) { _openFileItem.setEnabled (true); _openURLItem.setEnabled (true); return; // user cancelled } uri = urlStr.trim (); } ParseThread thr = new ParseThread (this); thr.setURI (uri); thr.setModule (getSelectedModule ()); thr.start (); } /** * This method does the actual work of pickAndAnalyzeURL, * called from a thread so it can run asynchronously. */ public void pickAndAnalyzeURL1 (String uri, Module module) { _progWind.setDocName (uri.toString (), false); _progWind.setProgressState (ProgressWindow.DOWNLOADING, false); _progWind.setContentLength (0, false); _progWind.setByteCount (0, true); _progWind.show (); try { _base.dispatch (_app, module, null, // AboutHandler _viewHandler, null, // output file new String[] {uri}); } catch (Exception e) { reportError ("Error processing URL", e.getMessage ()); } _progWind.hide (); _openFileItem.setEnabled (true); _openURLItem.setEnabled (true); } /** * Implementation of Callback.callback. * * @param selector 1 signifies update of byte count. * 2 signifies change of URI. * Other values result in no action. * @param parm If selector = 1, * must be a Long that evaluates to the number of * bytes processed to date. * If selector = 2, must be a String naming * the object being processed. Will be truncated * at the left if longer than 64 characters. */ public int callback (int selector, Object parm) { switch (selector) { case 1: long bytecnt = ((Long)parm).longValue (); _progWind.setByteCount (bytecnt, true); break; case 2: String name = (String) parm; if (name.length() > 48) { name = "..." + name.substring (name.length() - 48, name.length()); } _progWind.setDocName(name, true); break; default: break; } return 0; } /** * Sets the raw output flag. If set to true, raw * numeric values are displayed; if false, explanatory * text may be substituted. */ public void setRawOutput (boolean rawOutput) { _rawOutput = rawOutput; } /** * Sets the checksum flag. If set to true, checksums are reported. */ public void setDoChecksum (boolean checksum) { _doChecksum = checksum; } private void openAndParse (List files, /* RepInfo info,*/ Module module) { InputStream stream = null; long lastModified = 0; // Turn a list of files into an array of strings. String[] paths = new String[files.size()]; Iterator iter = files.iterator (); for (int i = 0; iter.hasNext (); i++) { File fil = (File) iter.next (); paths[i] = fil.getAbsolutePath (); if (!fil.exists ()) { _progWind.hide (); return; // shouldn't happen -- we just picked it! } if (!fil.canRead ()) { _progWind.hide (); reportError ("File not readable", fil.getName ()); return; } } _base.setShowRawFlag (_rawOutput); _base.setChecksumFlag (_doChecksum); /* With the new defaults for the PDF module being maximum information, it no longer makes sense to set maximum verbosity, since that would make all parameter settings ineffective. In fact, verbosity may be a kludge now that the config file handles parameters. */ // if (module != null) { // module.setVerbosity (Module.MAXIMUM_VERBOSITY); // // A problem (which I think we've always had): // // If no particular module is specified, we don't // // set its verbosity as we should. // } /****************************************************** * Parse formatted object. ******************************************************/ try { _base.dispatch (_app, module, null, // AboutHandler _viewHandler, null, // output file paths); } catch (Exception e) { // Do SOMETHING useful here. _logger.warning(e.toString ()); } _progWind.hide (); } /* Open a configuration dialog */ private void openConfigWindow () { String configFile = _base.getConfigFile (); ConfigHandler configHandler = new ConfigHandler (); XMLReader parser = null; String saxClass = _base.getSaxClass (); try { if (saxClass != null) { parser = XMLReaderFactory.createXMLReader (saxClass); } else { SAXParserFactory factory = SAXParserFactory.newInstance(); factory.setNamespaceAware (true); parser = factory.newSAXParser ().getXMLReader (); } // Need to do this carefully to keep all parsers happy File config = new File (configFile); String canonicalPath = config.getCanonicalPath (); String fileURL = "file://"; if (canonicalPath.charAt (0) != '/') { fileURL += '/'; } fileURL += canonicalPath; parser.setContentHandler (configHandler); parser.setEntityResolver (configHandler); parser.setFeature ("http://xml.org/sax/features/validation", true); parser.parse (fileURL); } catch (IOException e) { reportError ("Config Error", "Cannot read configuration file"); return; } catch (SAXException e) { reportError ("Config Error", "SAX parser not found: " + saxClass); return; } catch (ParserConfigurationException e) { reportError ("Config Error", "ParserConfigurationException"); } ConfigWindow confWin = new ConfigWindow (this, new File (configFile), configHandler); confWin.setLocation (120, 40); confWin.show (); } private void showModuleInfo () { Module module = getSelectedModule (); if (_moduleInfoWin == null) { _moduleInfoWin = new ModuleInfoWindow (_app, _base, module); _moduleInfoWin.setLocation (moduleInfoWinXPos, moduleInfoWinYPos); } else { _moduleInfoWin.showModule (module); } _moduleInfoWin.show (); } private void showAppInfo () { if (_appInfoWin == null) { _appInfoWin = new AppInfoWindow (_app, _base); _appInfoWin.setLocation (appInfoWinXPos, appInfoWinYPos); } _appInfoWin.show (); } private Module getSelectedModule () { if (_selectedModule.equals ("")) { return null; } return (Module) _base.getModuleMap().get (_selectedModule.toLowerCase ()); } private void reportError (String title, String msg) { synchronized (syncStr) { JOptionPane.showMessageDialog (this, msg, title, JOptionPane.ERROR_MESSAGE); } } /* DropTargetListener methods. */ /** * Invoked when the drag enters the component. * Accepts the drag if it's a file which is being * dragged, and changes the background color to give * visual feedback. */ public void dragEnter (DropTargetDragEvent dtde) { DataFlavor[] flavors = dtde.getCurrentDataFlavors (); if (dataFlavorOK (flavors)) { setDragBackground (); dtde.acceptDrag (dtde.getDropAction ()); } else { dtde.rejectDrag (); } } /** * Invoked when the drag leaves the component. * Restores the default background color. */ public void dragExit (DropTargetEvent dte) { setNormalBackground (); } /** * Does nothing. */ public void dragOver (DropTargetDragEvent dtde) { } /** * Called when the thingy is dropped on the component. * This causes the file to be opened. The default background color * will be restored; theoretically this should already * have happened, but Windows appears to require it be * done here. */ public void drop (DropTargetDropEvent dtde) { DataFlavor[] flavors = dtde.getCurrentDataFlavors (); if (dataFlavorOK (flavors)) { dtde.acceptDrop (dtde.getDropAction ()); // Now get the file(s) and open it (them) Transferable thingy = dtde.getTransferable (); try { List fileList = (List) thingy.getTransferData (DataFlavor.javaFileListFlavor); ParseThread thr = new ParseThread (this); thr.setFileList (fileList); thr.setModule (getSelectedModule ()); thr.start (); _base.setCurrentThread (thr); dtde.dropComplete (true); } catch (Exception e) { // Really shouldn't happen dtde.dropComplete (false); return; } } else { dtde.rejectDrop (); } setNormalBackground (); } /** * Called if the drop action changes during the drag * (e.g., by changing the modifier keys). Does nothing, * as we treat copy and move identically. */ public void dropActionChanged (DropTargetDragEvent dtde) { } /** Returns the "Close all document windows" menu item. * This allows document windows to add themselves as * listeners. */ protected JMenuItem getCloseAllItem () { return _closeAllItem; } /* Called to see if the DropTargetEvent's data flavor is OK */ private boolean dataFlavorOK (DataFlavor[] flavors) { boolean haveFileFlavor = false; for (int i = 0; i < flavors.length; i++) { if (flavors[i].isFlavorJavaFileListType()) { return true; } } return false; } /** * A local class for creating threads. */ class ParseThread extends Thread { private JhoveWindow _win; private String _uri; private File _file; private List _fileList; private Module _module; /** Constructor. */ protected ParseThread (JhoveWindow win) { _win = win; } /** The method invoked by running the thread. * Analyzes the URI, file, or file list provided * to this thread object. */ public void run () { _base.resetAbort(); try { if (_uri != null) { _win.pickAndAnalyzeURL1 (_uri, _module); } else if (_file != null) { if (_file.isDirectory ()) { analyzeDirectory (_file, _module); } else { _win.pickAndAnalyzeFile1 (_file, _module); } } else if (_fileList != null) { _win.pickAndAnalyzeFileList1 (_fileList, _module); } _base.setCurrentThread (null); } catch (ThreadDeath d) { _progWind.hide (); throw d; } } /** Designates a URI to parse. * Only one of setURI, setFile, and setFileList should * be called for a given thread. */ protected void setURI (String uri) { _uri = uri; } /** Designates a file to parse. * Only one of setURI, setFile, and setFileList should * be called for a given thread. */ protected void setFile (File file) { _file = file; } /** Designates a list of files to parse sequentially. * Only one of setURI, setFile, and setFileList should * be called for a given thread. */ protected void setFileList (List fileList) { _fileList = fileList; } /** * Set the module. This is called at the start of * thread setup, in case the user changes the module * selection while the thread's running. */ protected void setModule (Module module) { _module = module; } } /** * Class to filter out filenames that start with a period. * These are "invisible" file names, at least under Unix, * and generally shouldn't be included when walking through * a directory. */ protected class InvisibleFilenameFilter implements FilenameFilter { public boolean accept (File dir, String name) { return (!name.startsWith (".")); } } } jhove/classes/edu/harvard/hul/ois/jhove/viewer/MainScreen.java0000644000707400001440000000366010771561757023632 0ustar garyusers/********************************************************************** * Jhove - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College * **********************************************************************/ package edu.harvard.hul.ois.jhove.viewer; import java.awt.*; /** * Static methods for positioning windows on the main screen. * * @author Gary McGath * */ public class MainScreen { /** * Private constructor to prevent instantiation */ private MainScreen () { } /** * Center the window on the main screen. */ public static void centerWindow (Window win) { Rectangle devBounds = mainBounds (); Rectangle winBounds = win.getBounds (); int lmargin = (devBounds.width - winBounds.width) / 2; int tmargin = (devBounds.height - winBounds.height) / 2; // Don't go off the edge if (lmargin < 0) { lmargin = 0; } if (tmargin < 0) { tmargin = 0; } win.setLocation (lmargin, tmargin); } /** * Center the window at the top of the main screen. */ public static void centerTopWindow (Window win) { Rectangle devBounds = mainBounds (); Rectangle winBounds = win.getBounds (); int lmargin = (devBounds.width - winBounds.width) / 2; // Don't go off the edge if (lmargin < 0) { lmargin = 0; } win.setLocation (lmargin, 0); } /** * Returns the bounds of the main monitor device. */ public static Rectangle mainBounds () { GraphicsEnvironment ge = GraphicsEnvironment. getLocalGraphicsEnvironment(); GraphicsDevice dev = ge.getDefaultScreenDevice(); GraphicsConfiguration conf = dev.getDefaultConfiguration (); return conf.getBounds (); } } jhove/classes/edu/harvard/hul/ois/jhove/viewer/ModuleInfoWindow.java0000644000707400001440000002426510771561760025035 0ustar garyusers/********************************************************************** * JhoveView - JSTOR/Harvard Object Validation Environment * Copyright 2003 by JSTOR and the President and Fellows of Harvard College **********************************************************************/ package edu.harvard.hul.ois.jhove.viewer; import java.awt.Font; import java.awt.Dimension; import java.awt.Rectangle; import java.io.*; import java.util.*; import javax.swing.*; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; import edu.harvard.hul.ois.jhove.*; /** * This window is for presenting information about the selected * module. If no module is selected, a brief message is * put into the window. */ public class ModuleInfoWindow extends InfoWindow{ private JTextArea texta; private int _level; private Module _module; /** * Constructor. * * @param app The associated App object. * @param base The associated JhoveBase object. * @param module The Module whose information is to be presented. */ public ModuleInfoWindow (App app, JhoveBase base, Module module) { super ("Module Info", app, base); _module = module; setSaveActionListener ( new ActionListener() { public void actionPerformed (ActionEvent e) { saveInfo (); } }); texta = new JTextArea (); texta.setColumns (72); JScrollPane scrollpane = new JScrollPane (texta); texta.setFont (new Font ("sansserif", Font.PLAIN, 10)); texta.setLineWrap (true); texta.setWrapStyleWord (true); // Getting Swing to accept what you want for dimensions // apparently requires setting as many dimension restrictions // as possible, and hoping it will pay attention to some // of them. scrollpane.setMinimumSize (new Dimension (240, 240)); scrollpane.setMaximumSize (new Dimension (600, 500)); scrollpane.setPreferredSize (new Dimension (600, 500)); getContentPane ().add (scrollpane, "Center"); // Add a small panel at the bottom, since on some OS's there // may be stuff near the bottom of a window which will conflict // with the scroll bar. JPanel panel = new JPanel (); panel.setMinimumSize (new Dimension (8, 8)); getContentPane ().add (panel, "South"); showModule (module); pack (); } /** Formats and presents the module information in * the window. */ public void showModule (Module module) { _module = module; if (module == null) { texta.setText ("(No module selected)"); } else { _level = 0; texta.setText (""); String margin = getIndent (++_level); texta.append (margin + "Module: " + module.getName () + eol); texta.append (margin + "Release: " + module.getRelease () + eol); texta.append (margin + "Date: " + _dateFmt.format (module.getDate ()) + eol); String [] ss = module.getFormat (); if (ss.length > 0) { texta.append (margin + "Format: " + ss[0]); for (int i = 1; i < ss.length; i++) { texta.append (", " + ss[i]); } texta.append (eol); } String s = module.getCoverage (); if (s != null) { texta.append (margin + "Coverage: " + s + eol); } ss = module.getMimeType (); if (ss.length > 0) { texta.append (margin + "MIMEtype: " + ss[0]); for (int i=1; i

/"< —,W5#|B6sA."?A)G9/~+_#C= /"%?" A+2?^A|2ÿ-*"NkfE< ^Gx"PTTLRJ*fTrT,TbE*TQABe*+QCe*Fe * Ee*'Qـ)il4+gFw{ 6ƴXk0Ƕ$⩴OkiM jzC>{@ y;4fAoo;bbWMBݾ g=)@{7}==g x g`ػG-lC݁=.;zAԧt߁D<1{Ƶ$@Tg&3ZzgR{ Bζ#4^lצr=>*9jhp i;+dQ\J$#zoag(MpZOfh\M`ZcuRKNLOFT4P(fd*<_M޶l[4M Ըi$"lo qS\ l*I(>NEڌ9Zx~Pqž%>٥5Y)kjXp1kSuS Hv]`S!m"U(UsѳN-/?ԛP'4)UDٰ2MrtI'gin,4gVZ ~eUPoJj$%+CU]l*)V3kRn+%K;7b wUR`Ūl>۔r> i=eŢܲh$"+<ydzZeY-#ۜNl>j |k`fA5{r{zrm=@_M3m֠7ru6[{Ɇ9'z򈵻|pT{K=8\L|lKxHDE8bZ:W G NF}!CmF{Wg* 媠\vG'>WKd'?쓗G} ȓub>qĔ=!~DZmm,HE'Aw.#z$Ď{CFcyO4H$C)-bqt˗x4]2m%^)M;NgqjΗ{Hb62 LkI#]$Fu/񈖌8g-z<=Ԍ_|q]5y -R{x45Y},eBQ*T󓣉cٯcz Og~-=ΫZ p) Mz`O k.$đd"8VGc1;--De,1Ӛ&`0obk-s)!9Oʜ5!=Mf?B[.f>$V˛_x_I\Q9]h<{03ﭛdN۰--UMe/֫}_>y'ޭٱ3&rբw2To4ŝѸM{|7@IblGl *8E ^BkKo(O,@ -2dq}xeAOU W ZK^_"u$f$|\PƲ@F cْ*?6u4ʪ\-kڬLrE\-댲A.efi-ɁG4)DŽ"azPmhֲ4,mzX6u:GκQQzLz8 Ay |f^Q~TGR8bo`)pj֓c5sV4ts.Bϻ7E1羱;,:mSnڍEmLTN\*O{Si/Gx%Stdbؿ0Uɘ.`m[sL*ʞFLtJpN iDYV{Ԟ!Y[^+ϔF)#H#5e2Djei!;L+1+YEjr2kYK.&Qsma:\Eg1lj:e6{~$a'/d@;NcFnH~`6Rs3*c>.kY\GIY@ōtD7уzHòv:.;YI.z'ĉGŧO<$VO<">8 z>I yt^xL慯Wyͼ-v^xK ߧҏ'y<, 4/edu/harvard/hul/ois/jhove/Utf8BlockMarker.classTRQ=730IP! QP@JU5 Y y9P'X @bn ~o@)H*UvO?N>^)p'2ȨCBZ;?:$\U5~^Nt/! #n!( \:\*Lck̚L3 gtkim=4\\ {퉕-˺ֳZܶ|$3REmAu+-Z,h eCpiVрF *¸UAch(m3 [3 fG0*#b g0JV1Q!pv8ɰ-O-IJ^ ClL.ULePY3IT=*"Q cY"]"eBL", кHfa,<.;ob%O\ijcC=-#ƢQVv)_VqS8vznzj&NOg݃k@|%}\kQ"%څU| BaXmz SQAQZ?P'(BVԙd09z*#o p(PK F|$>6"+ƒ0edu/harvard/hul/ois/jhove/XMLWrapperStream.classT[SVlYˆKMLB(!mmBzMcv[[pI*GȔ'KЙfڙ>3J;mwe8zݳ߮~{n"ׇq̫X`8dX,:#%L2/WT.5)ƥcʌxQo *edu/harvard/hul/ois/jhove/XMPHandler.classT[sV˖8$ -(ƘKJ16@cV%Kj~ \b~F+2\'G!u ,:[ 6D;& \xʿ.a;kRW./?¹ȲMg9pAM DUV%L4Лu'gupzy8FA^*ΦL' o2Vo4M?t9E7q?:pĿU 9"ߞaMC [ AKdܻ0 1V럢 nWŕQ,䭻}}IO~OGE8S}y/Fr0}D/vpx:R^yG?Õ(q\d"$^&ζ!?N%fiMNF& 6T-|# pp:U-5w/q@SF%rb]%\-dq|-|*/d;Hm9'Rmdf11(63+Lmn+)edu/harvard/hul/ois/jhove/XMPSource.classTRA=C6dY0\"\4nq "/ll( }}W4TIPMvk3=0 -TJ ~nV{KEe뎰*h+=p(CGțx_VLVJ9xrPQU+r(!v|g>{C0>wC[G+}M4R|xR0&JB6ʦ*.}7')Bŧ.ióGu+ʘz]x.arC"\X0$~BPK H|$>"edu/harvard/hul/ois/jhove/handler/PK G|$>=Ȣ 4edu/harvard/hul/ois/jhove/handler/AuditHandler.class xSerI^- M1@Rz j(BMѼpxxzuUk/Y=[^cOW{IҀ?x;dxFgݰ+2|W:ߐya /"÷yxxI{ʦ2# ^@~셟O=D/x~2)aohd_7X5ɴ7xxѷxxѷxx};K%?d Lށy w~CHَH DBN]L*Qb,/B2eqT7chU {'y 0DG҆qSei&Z+k2)SU=!Hۚts.JַKW.oDp 1vĢ1k[ [}ڌa5q2fS#kÝڷ "ǜ+ȇt$jFKFQs11^M4&xdi4Fr„B5״it㠚ܬ&#iш75#lTNe;MxM]ʤѧRq"g9NR7U@vr :SY*-7hTw2Kά;ɏ4+J%%\,)J|tlԈ̮ڈR,;mI ])m"HU2E^اgЕMMq >p_`4i36 Qh+ZDO1.yhXݬ  ՠ(&F&e4ɚAS)Ք$&j*I jNI͒Kj)6әj@l2ےсAS7w 4lf[I$~eMbYi2t]UI\KZTږlShOi>Klk-ImHFxkb%\* \- ~Y+GŻ7-n["n;aGOR3N]g!gjkp-%n\'p=SµO L:0NKGu+g.V_GuM&EQc$Iy]$^*W *5{k"sv2 H9q}j4 BnLqYx.G|@E7&| ;b!bD p?d:ӱun 7+&]s!^WRsx5g[}|LRCNlκ SC ٤,=k6!rh2GZ;)@&LڇmZ4W p&Dj v dhUSmҍnDHZyk0F\mx;NwZO;+Zl<}[4E͸hFVj*hFJsM2jpze}pW9䞤.xk} )vŤ2W3uԾ\=-QI˭j ^\U9=6R C7XgᘷL jkO)j֙4zUuʳ W:&I5m.2m,&EXzdV$HTM$4f/8H{gA2{f2J'o%%X ʎ>YEY4x2ʃeD]CyY5l2uL+.>T\CEZIi9\{0/:.(%tZ_0{ݽ b) p?(I%eM{uli*u; \Q|eJP'^/O} L^եOyN5qp?PK F|$>Ð9<3edu/harvard/hul/ois/jhove/handler/TextHandler.class} x[},_eC$Nl! %1xKQl-#Y(--@ZPvi)'ֲC}e)P(sftOOofΜ9sfHy$D*Y␸JJGF5I%)!Q"͢i6t9OHyR>[!>0X쁇J4iQii4JGKSirTxҁ6JӑΠR)ҙTJHgSi<,x>-PiA+UdK HJdKJQpcҒlJ: NGj2*QH*SQ-R>5J1Jh@;#V`SJ(c cqH@NkRXz|taUTRkԃt-HO:-h2+QiJT:JQTalJ^ TڈtI(b~:J?Ot*Nf JSz~A_4LlY89Hyv>]Iot!1!8߶R"H/ҥH/HҕTC.<l1·kgQz7PF7cJ7#J"Ѥmv c@݆x#x&!HcG#݅#kTG_7@*=!0>ǣ1i|B@;>HH|#=%=/| ^ƷWU|{ ^Ƿ7MVc]Mza&}#'|Iac |I3i&}&}sK9XTFvb]M^M&@eAE&HMVjx=RYH=T4_ 4P4j(6>|Az*O@F|m!7kTnr[#c9+ᑏWaX*GPCkr0[1w}JPk'K>*S9B*H(cTSy멼'e?HD#=?AS*tOf|Oϩ|O%W8CvKgS,5z.>PcT RBL>`V*_T%TeTAW`WbUTAG* abTTT 0oFz oE:BmHSyۨ|;rB;E廑C{C} }axʏb1 ʏ#}O"}O#}"}#}/"}/#}ʯ"}ʯ#}o"}o#}"}#@O*#* VH?HM/~I _#;n{-ҽT!@*"L0 SEARECJClȡJ.UB*i!",FzUEzUGzU*UTFZCZK iUDzU6PiU1hJ+6|Se9TY* ]EcG HTY%ua*!k҃t-UHO:TCO4J8U IT!ғ#r U~BRTFT"NϩrU~A_RWT9*gBWS~)hʹ+jRXBp}pvogvk<Y,H,/T\l"]m[Pk"Ѿ`\ cyաh-K;cPK0 Րp8~(3RtC[ C݃k{gG±'ͮXYrZu Xr@fe4/ wPF/6D{C3ZBuk"p0_ YجʞP?H"c9XT u dZrLX2cuk1(SFX`iH<5Bn brׄ1bF@d6fnb("6P|`pO0>3eLbiFB&) scu{d-,2ñ TS.H_p ӈl œ7%m0iB`w0L;p{ ʷUZ9$K^qs[S~j04e iв p<}f{B"P ? b@NЗY&E`8'%TIB68>gluK;L? Ee`UNu8-!3PHר,0.CzEEnYkxx=(>!whMp7?rY |YȹUMpڸޜ9ȿzֶ?XP,:Ԇz{#b2λ* b,zCX?zeXiKC0Dս.}+ EoC CX8 Y F7iub,R6Yaゅ 5ߺ)f7/ {B 9?XW.S.7sz܅3-ZP6ἃt L؟WDG}poшrh\\+W)WkteHFouʟtZϺrrܠܨ+7)0x~`$ -Gtf`%tVe4lC^Tes]+ەrܮQ3 bPԕ5]W ׄ{L8>+Q2M] at /-7P覀05kBI,C؊GtQ1]<< 据<<+(BARЕsS%DW^J(E,%ed!B0{b]ye[pĐXD" ,ƀq+oʛ؂@Kn @.>">+(B-wGgԕJP]y_&F6QUFYtCDgjXG9`L]|F|VW>F|=ztm;c8_ 'Xk,~Pxn)MD@L ,{32>JWEbI0`T2+7? ]B;* }?m457+ߠA;N9*.ilVy1Q2Q@Џ I@#ue=LG9z5(~bt[Bg񮵡X5G"u)i#J04{dM+UI ω몄 C4u! ǘ*\VЇ(U fH?RSנİfѬkj@ȽZ94b Ml-(OsVŻ01F"ɚP d(Ҧ싵OOXՇn\l'q;p&Dۈ\ke550s,!̗xǁODY~XIc!:$~_S']Q(&iiXDХtub΂M`(|o\|{[&a+ p ]AZk.Ťń؊ <ξQ)CQWuގQG۫hpUWe`ta~tY%m&Ll:#n6b|RfX83Aհ&èVA΃\mL#6:Wca1۹> 1H|i ֜+]YEWAhQ%^:{k{hZ __0 ND걌C+^1f60f^'NNj'[QM\ %uK;k*a׵a]=eQm8@Sojj,uf28U |Z`5ը[cpmk2hfT Q2;k]x&ɉ578D5jQ&9}0C1l [d iĕb+c1X0{q]]]xf=ꁞ:A]õfTԑvf8^E-6i;(Y B;d !vYxc.3d>LHF`1:1fɞ GMgڃb|B;w8 06 TEQ@&,a{s@DrGjá^kj;UɲpmUM-M͝-][2p"p`JQwFP 9I,Ʀ%Ox˂H8|i&~˷ 9.*҇XF9OW7W7z" -3e)z왢lɘGY1NHWOa*ވloǸ? :VWE[W3ZTV5KiĘik{_fg\$ *wm =ZZbmmx՟))k l/_y:OB5k-?&b왈-`AԨl1Ynw\ճ1JǨP58KU`d>Fy.m&M?PCg[SM rPJd 22o|s!V;pӶ06E.#b0: nJ#+ۂўlj de .aii"'cPweɗQ +dy& `H,#f=im{9&\lVr|5+:>Ub0څD!?(ؾLkΗk08%iL# ,ih8?%D#kQV浘2>=hge'uz={W6-XwД ,9FVaTq;.X[S!*LƲj#rk6Db { KoE5$d#6Dڎc4Fz(X$tu0+ L\L!F݁Q*w{/Xv_B@~3%n6XdKDx(zl$䙭Ӈr0Viz?@xJ01lsZEX'EwadD-{eރ["KlOqiu}ߪ{}x Ca&$ދ%ò׷`RZe2aguh&]y57$\Ì!ͱaq)ʂϞ0$jdLP;t^L w*;YfV3}A&Oh1E }d,<~DfɷPv ofK xLk VC~dt13oyvMu{Ue[]Sce=th0b DVdÉCI(?ӯs ̉3"lGb4_?`M~.*_ s1twEy\ǑГ̀!jg/"ԁ˪fS/;݄:7C[0@0Dg25͈3bYh73#bpO*U 仔N Bgj5n• Ymxc۔S,h[ ⌗'|̂L`S[*+[2'=\_׊wm*ZJeKKehsʺ{BӠ %y#WAc]kStkMCM[eue[%bk#Z:mU{u]7^)Ϳq'V`hKk#./dU-ljAM77U贺ƶ$75.DӒ#kP˚ZڰZ0$\z@Mk U... {E2qÜԺ͔#G5/|l7#ke!1i1 ^\ إ#9&|U Vj0=qB߻0n ΋% K IIe7a^sbPa2݈ SqgoW HEXM fr,̼Ի~ˁW`zĴ\1lBy;xt*+_/ԼC5c!Xf#J #y/ ޘbfyigkղ0YX]s&7}o|676WVՠg50KMځMMlW,ӆD_=QS@&5g>^A+aFͭnhK~k64uu41bus V:wi~u5}\>I:K*ՏΙwX++[:k떶s-IsseM7fI7ՋGjjmo脅lYS5I)t-u K//NQ?Z%6ݹuS88 ]psS;tX1>sy8Ns>rC;-XsM 6aMn r%ջz;NsVk6eiGE oB*= ,K9Ym(t3=5`lh1rĹp>-p{O L n.pΖFc5TVU_l1 ?8+ۚj[* ib ]h46p!y,oUFxeCs=ƪNE5|::InXfu[.43ΔC9L7o6(qc.:VLS{ ,uHu YNc9is! 3fܜI94 -L5A8U;9ͥ?a%hwph G9l`*675X$,O0b'$ K[Iv2!̳oh@j{;ul#f1B&I)#d N09L!S!ƲLGYrz@iRL',p<NI2Z P|R!-1P wGȢ^fTwX0x<yC{oonZjIUv@j86 Hx<'Y{șx;|vY5knRw"-޿++e.ź9Cd #s@vVRU0˼ dXش4oVh-RRزB$wa>ַ Z MvQswj]Lw !;ݤXMJ! ^.` pвQKo>t&𝗐陎A!3 +y9Ђdj+'ae2Bq?Htx/0\xQ,(9I*4U >*^O{2t;go` @du7Ik D}skƞTq }$*0T'`:7h A#ilQs o? Z8:R-0EIfLY[R&N2a7)2iB hd.R]Zʧf)R>feЂY 5ژfxQXmwdbaYC|n`rceVnJJh'B22jc) Kp*7!(x 1DcY6{@=՜o&Q(d 0{Ko I;ƛntԒU'M>B<>dc1IJ}ن #dO\4Uyd{6xds6It.9Mfk}w2y7q3v%*M͞J[2PC vF3vÀUx?GS4< >h`-PMDV%F5\]#rb\i2_Gllk 3׈iv%Cz(1>l>ڤz|J>#>k,(coTݴ}y  }5҅Ffʬ6L!of2ͩ<ĉ d}e[S!m,vD$&j>19yc<͛e,7<>0]3H)dM^55Ǩ $0·<'Gan{Lb,X)a[\KH[_eZeAp)$;w7$v% GN8:!hupy,_*hO*_6^qg(%gMIh!r!܌R,}AGʔJu4 kY$$}{d1غ6!o>=dt|oȡ"tϛсf[^rEV L{# sg..Cѥ{7k Ķ &P}aNPW ]`P depkiiN2)V6F! EB@Td B O /_<_ӎ^.|4YQ8$  FX\rYBQjr1|pea\Yr0&5y,|YrŰKM,y̰0>5y|pb2zX< >g/ &',aaɜÒ/HM@/%<,LMM>><_K>~j4@`:&OO ߗϒIb$  Y({ -W-]( xɎ)⃶ 0~k}xވP&.ۅr?!g>-]-eyˍz^yų s0~r{}٬^=~xr#_MvC/2K x8 1cIdpc X (@ (XԮJ2hhfkِ5כ5=ޫI!]W;d^҂٦5P5Dj8M 4 4a&Lф5a&52lAq8+S2dj4n?;Ʃ40_CrɌUL'E|/Xa -H l]h]dܠmCܠڠ١۠GA+m%n* ZcֺABCr |KN2Cn/5`м+6v^Bà55VV.+-F׻blFWl =چmqŶڰmvv9RKa`YE! ֌,x"uo]±,x? ?p2d Ӊc ?I[\O"kxjɞ-vAL1 ¼j&D9Ah&/$RSbaf^rqJ>, Bb0gL *+H4{&qd鳋ȮS?Mf {ś{q/NFIocI !Hp֌B ݗdc3cXɯ hO_fZʐvf2! =vMqܹwh9pߎ0߁FjyJoiv[~h>C'޵%r>r>r>rw﹗˾^NSWP#R$P<»f"O~Anrp) ؁Μ5qp9jd"#/Rƞ[B}%8XWJ<g 諆yJpͰGhƟlusX*7aX1Z1lkn[l[b5d} v)f ?_м4 L{>Wxgn6x6+_s{=Gy/f`v> Jgd$wv]q){WCҔ85<35}em]9lrt@:GS2U1VŁUL3^ 挏];mi'wT6#7mSܠ?A== tn3l_Ai z zlnslsݠ٠?GrbS^-;*|o=dqf7Y(̬(-Cha'Ch>GM0:Oblݟ^^nt~iiK,aT9r4i)dۍ~rN96˜\$9|+) @D O>ᝢ=$á .T3C XSߌB )¨߱(Z$nFwrP/䠮NAN8lxv74&8<4E.pЈAou=g["ɿŖH;?>Nd{[jP۾9KlX`eg`em烱,*mh*Z\Mw92v;/A:E9x(olʱy9c.б9CDv*}!}8F|~&x ^ ~ ^ ~ ^߈p?v-H9v- hrZh;vu>sَPw3c;/SOjp|ӽ2[U6p:tbUba.xhC;Z9phY+phYh?tP㜡7ȥ"E"W[bY`믋aha]Vú,:e:vXW?>vD.#ADn#n>g|>pß茏c~ ѵ6U6w8 (sIB?qR*IT|w>)gEq3~/G:__Uc?LB@H$gLgHB|cYDMAV7FYg ѓ!~HJ,scǗyie̮Gī>˫sU)~՜W [dS+/yw%w'.L'l%ЋE0LEX4`vPqw⇁`E2F!h/6u%?f"$))1Z 2edu/harvard/hul/ois/jhove/handler/XmlHandler.class |]E8>eܬ//Rڤ{iJ[tKIҤa+kHB.* *BЂ EEqGQ܀.3s}wOOzޙsΜ9s朹g{#B28,4Sg iDĔb>A) .e2L3e+/p9*M R4e5S`Oe:hI(zF LوEmx9=PRf&|83x)ЁYlt+Saɔs1=)]L۞Szr>>HG+R2P * v2eWrrS."b\}X~L/b!L`ʕL0H2*L?F#L$>\2:LC/agSL)7LٍML)[r+UnC"GrVt'St)w3 S`z/S>yL?krEBOS闐xy){1Ly‡!<>uǔ Q ^c]_Ň'$SƔLS0i|&S3L6U:y%2 })R>CW)?D1/?JŻ3')?u_0 Lɔ_%=ʛ Lo;>A)ʟ:L Sۿ2oL;)mÔw1=ȔCf *k*1uUl/*S5R2ƙ`j(`Iy]ifjSypQKj)r^%ԅE(.TPNA"SNɘ.j=KKAerpفe+l%UApUL=%A&MXk0]*%NdlU[0mzLOL7R өz0gaz6tU4C͘S,^Pu+UQR^ҟP;zS/LHT豋1bzS߇^ˇzWLULS?ULE^)^0FMx-Ltz{BR;NxPbݘރ0uSeg9eꗱ!a0Sa~|xb=_ac8SL}O1~0}[L}o3YLcw0}/Q%~ӗ ˫L>S_cL?fO0)^~יso`/+Ld1 SL?ag-|+SԿ3O;xy/zzL#ILa*3Ma?i41- 0MgZ!ӊV%L+ŴiImiV2 Sic0˴qgsm">T3mG1m2Sv4Sv Ә6b:i31Ŵ٘a\L1m>e꘶i"1=i'`z"NbL[OL[iӖbia*i+a%1]ŴS0mbZ3ikv*S ^Zi1m6bFNǶg2,Lf&mƴif/[iL;i1 ôzv>>ᥟiLdv|Lۅ0BL/bŘ^´K1iL.2CLodڇ1>ULg՘~i]uLӮg t#vcznLimLY4]Li03G{r/^>Li_`%ϴe=ȴ6ĴieWgWӞdטӾδo0Ӟf7-},Nf=Ǵ0yӾ˴ ӾǴW}ƴ0L~̴0L^gϙ $~ɴ_1Miao;i`'ia[L+ƴ3L'f;L{d!f 3J1*3021JeM0Zh!E3Zh)e&-g4hV1j0:ѱct<h5I'(LTFatadtfts|Fetu.d8F1fxFO`DFObdF3ZF]2F3ѕ62SmbՌat-2F[]in`t#mYMs0vF;2ѭXNFeKzy1}3}a*|40} /?`'OO)KDY]߼L"eMfgfweznzD r=2]Yu˚շHa kWlmlMDZV.ktڲu-kVK`S+.3qBgOI1mi@!%sh 'ۿ-C"GMkv ޖ۞똽mkvr۳{{9la@LokfsWwIE`@LOGWHQK(\`W#R"S@e{{8S["ql\lπD"[0!=#m%rL ,4>DI \n g>f:;sK'fL, rs?5;BPgaskOf`pEpBlh͉>;zs ;pm_77k_蛔P[p$RoA,EjkGEm0}X-a \2|/]MWZ;6g2DfFtH 5vàI͉",U3O"%v^6ӗ΂#V[P lf3׃Lulߖ\_w=[Rl΀/oDd(٩o7}H<<]{ T:[Ztʻ0`"4=i!oUunF:mkUz5us[w&6~;u C3 v}8#RދkK,Z:p |Hq3d{`:ZZs܋Xi@rh|Q]~KEH:˂Ng[ol+Va$wwk;v옵c\ٰϝ kXgvv F}XPGiY{(GoT7,tAÊZ485{)It:{8Rv*Ͷll媣 ǬgQXחɨY|zȆW: W!s| Yjr+|@LA]"QU_^ŲXcsvbêtSm Q'Eb]].~|]70s28&GNW ץ+.ћ2E%|h|]a X-btIUS:]Iot]}A ͙^\?y^vGuvdcȖ,8)TgWc8]gwKtIq6:ޕ-Tg׊:Sqή;fZFٍG1b8{F"s+At=7: d/l e|34\pJn˭x /+=otOz78]y^%RRP]Y[sg&X`yYsfU(L"pvh~&R(if)5s7n gA?4-Nܞ]_f7tF}u"[߃\}`Y,7ػisǽXY,p[$`z͙5OgC stB'c>+^wNΆ9.$hx0ϙ'F=ו"XWKJ)HmA]}Xg0`/qf}|u#T_D.ƒ\w/L|NyrJXoK"1{m؎ξ]ەkʹðޏƋ |Z95l/O[憾-ut6ufF\=NXAGt(BT"ĺ,t7%]6l[[cv_y¿y}$gC?`r;ׂ׉0:{ 6[CnWuD }c,o`fٔيJk4fYN&V@8lq[|:q;y=p,2c3@83OsvÁ2E;]K;{2\ϳe:{ݚ Ӫ_gn +h ((mm|E[[r}g^wbIDw t}2&\Z8c_|M/ z-#}ϞkZNǫث:Mliv{g{V"՞ɘ;/[ +͎ !J"לP!^~dl:P[{ evoƞ1-`rgV9mm(wAe?Aef9g; O._۹΃!s3!*nՏtes]b2.VTR%4hȠch7݃KHvͷWؖ>ŸMlgoq[g|>m3e4 74aqwRggqsf\v [fb=ƮΞ nܴfA3ŚٞT[H&γ2<f,ǽgB;f&l$JMmȂO~p |&(* JX:{qaϦٻ| HC=pV(5XTevU&jKC357,09uic W#aB[2% "k!Wb+[lWPԛ6k=v@)c^bmnbm!\p`hpZ9mN< g#WL:_@_,b" 56yxiC/bI&aa j#oҊl3n"/CI{ƯכϚjn|1qSqka\'nʝiv7Ml+aN-v5lKNΔȄвMz)DC*]Ԍ171{ȍXe^rh)zfm۱z> x*gkIO=>6'Zxd /ނlahm7M*i\;z=?ħp6,ej:_1-*ۗGƷ@,e[%c/]2 K eŧkRG]hu;+^-\ܹsĕ*VEwX%#̩l;6c72;;|g|.Pg*rs#;*c@ph>Ͷsî:3Cl1t<̩%X9yoXGbp錘01fZs3FT٫':M"c"\9 .5aSveRg) _Y Ě1{n6]yqv(]v+Lf=oۂSܶ~#XZmN­Ca[Mf=mf6$Av Z#vd`^Gh3 @n`٪"\H1uG%&"joKjlt-B"\05+LCcؙ7"4-|gPИ cJyѰeXa9o rwY p? v{i9 Q̪b#EyAX%P ΁^t58$/ߑ0f/] mVGٞqbQѕHHr#CӸOFZo7/iZu|ajsV m+q"> -]Pڸfu}H {K;kcƮ^9TiEe)5kMt l<&d=,\?~o~7DȶyLl1%5jػ}JМ ۡ@z-8mr\hOUaN)' $o;;]w!s8V 5A>` 3Q8ݎO1#˘#_Jou8h|h.ofDVa1ea9!4o[;K躬c#Ky-ϸ^Yanq}mmQo-]+)kkxki:OٔA{D5Wp|o 28f-"ry`^Nt?)3qEҭ~ٺ6cnlYyYkzЎ蝬_ڸ&UԺlck|P߄=JScK+Evmc| L׎ {EN'Vx؝ܲ P׭~K֬iZ;ʒ6JWaee0m|/D]޴he+HiZz@YjYkYf]+vJF,alL2_Sɷf 2yz4$yz*QwV}zʒ|JM 2\{Q^_#MUfD*=9[KnY$&j?3Q흝=c Iu9|SIwyH @2c E2C@ '`ׁw$?#56WR @(=Zo1_4mT,VpC$y"FA%!P#J ̋wq`gyN/unImĒ`qVIL)%瓰Fq$8J֝uܨđX8c[RNCtz mX ga:CZDWڧ}Bi_1sR\3ғb:hR׶ؒ&`A[P8>v!a_à&_n5{q+ԋ(ؑ^n2'7 FtgU*Õ+ux}guһ!Fr>VdZbv8b|X]f.|+r/@Nv<"X$ڜ"3#$*L55Ұsnm gؒJt5Yl{Ҟʀ\r-cV \%Sfu3LH3ܒ%wYҕmt亏~%#Np#w_@;׊gǭpbD +٢03-\!l$J '.0E&TOLYb+\|N>86H@7ÕgXfonVZЉ-& ^r"zoL9=!&o0^ ʰZ *͗ex]ˎ B?W(jYjUf 4K/Lsu>tbHsg#(@836IQ6`dį'B\<0mXO٤G+sᅵ=HblrV_Yq#%<jI&$?O1ms 1w ہO'ֈR,lL)gM͙el<=Clxf|7ȇq8W"7K89@0p #a>N,$-S=_:x ;Dj)r2WBuȃ8x:HV"sA}KO-^}_է`&L. fX05B0a4o(]Rɨ>H5M6mecP@z{b"ǚf.T/¥0+e" ~  VN.VrClƒp;ܜm$<RX8W}^_ wĿ([\{HQ1eW Cс7cͳ UpUZZsyq`OȸmMyViQL&?6_91X`ZI7g"sCd:Li wGW%*̧ Gȉrr37uZkXwB]JHC5'x}q,0#hs峆\R|}a!M/z!~!{}_|PPIّ(oRs?NUC@cPx~xki9gB#]2>?Oa꿰EhⱨCy||3Ox~/ޓ#cn?-إܡ{#\LVŮAtYSb4ا;aTU Ri>Pi!Qx*HTOTj '-J*5Riu׿l4vMbD_SJp%_ r] %>♩}Rsbtn~K uq.1T}ORyCZ?*?%MND~HK J'|V~,Kx*5KK~#J'`WZc'cga*$E凩(DZ1#?>N ʏ dpxcY.c0xxStc~èp4LI{A2ewrĤ_Ueye;D ..A-Ôpq3ܑLJ68$MJdRy5`movz΀qf| @q$ dmDlG:bj74@uoM C,uH6bs^rVݾ<;Cp.׃?҃8Xg h\W OFP8%piŒV/O< 借  ( ׼h7:tf^V;7D΍h*Զ('vs[:XyX{}2*M fI ȭv.ھY=t3u{x 锑:GH E{!Onl ;23m DWx lt} |4}~!/c})+k_8ʅp$MယCS yzhR`!i4ݯ Ur,=h)*7KhqrʒB}upݟNnT}#A_[{ 7=_ Vt?=(XjxO.}+ƈ^T@YC뵯 Eއ1|u^̖GW 1nXޠL&on͖R*޳;L*% Y7klhA/'?LAx!V,Z`&gaAL]$N=2,d`N$DOoڃ܁Ӹ=u&I7 f ۡϺa@; #-1CBp^y)a8y@ ~qN`,s|Hzjy%7RGr77nfc 4Ҩ.1Ӥ(6W~dOê4f@@hȺ9[ߠym|0?R_ R73o2Wa8y@+D+JC[fET,UP[p*XӪ*^J 'y`1"KUe0Fk|3,L@(Ml?na[Ccucgj o!‚8Ga7c # hX6;FF=z8Hp$jb1~_,&MHMVOIM*O Ӣhx c,D4jAz4UEWYVeItaxexVˣYMUY]e%jXUP2"XI x1Ɔja?Zx\)~U4REc*3{9;Mbp:v6^pB H;gS988!88-M{ 4[&+:F o1n:X>7qrx /6у|HjvvgpX*$EpZx,J"|fMïum҉ GD2v4"$L\,X]2} UTm2uf8~")DpAo*EKYN2Bbo_r`O'$pB >4d( V.$pz}({"\@uĹ<a8y@d*E8! [+M%tK+T鼀Z//Ox%+]־ R0,QyE3?rW%u1>*`ȯ r`؇G ~_׏kHd@/C:D/x7bWG?ƼQs85\ O&cE҃+3 m/f6'%q]W'."2f#}j(vnRݐ!I̺gdlw:'{S@+Mlt><=n Ücx Qt({Az/{QePXzr]d~(glx@?g)#5A|ӇhL]b}/câhAatS\t܊Lnw9Bb_ AK G0J[~xWsc-?H^5sr||Ye/A{E=Q< { SCғ%7{֞q{is _MQnۀWzȋ`HB?C|݂=T(pJD.E^ڰѶa_>E> Xn ؍Kl!xax/D#bt #P_F- &#|9TXDWYɍEՖWU }g6pHƮEއjF~柣0|+ FJs4,k4<&G#LA{-P{?g&\x?`A93wst&cd u1/`!z2{C"[brJ0O'wX;]̖dQѬ{VErmrUqU,zUu5_ub`[~a)f>$ߪSaq Nƶ[I Z/I0] jRI#EG!r!P,(kd)ESb8>h"EV8scbYp0h`C9y8X`p`D#x#Au0+#cJxb'e=],LʅNE1K0Lʥ'2L مX?x#UUXHJ8>\Ş ަ)$?r>Q)5dXY+IT[Wp_`i H/OZ_ǯůԤ_n`Xor|\а0)i*c%>@pđ}+0GS=t)AydsrOD,N_bZ3ǤS{HSRҤ<Lyܣ3#lIR),ө.k⌼op"+xS%w2*0ީ*V`LD}2822kFehUS  w2xX+骱qf]ReeaR^I'O@B 7NF+S=_'}r8a/O+JWO`CHp1vxC!IHjLN'A2.) I*)/()C=TN ^-O=1E9ۀy\vC z {5CrCꌮqdy>2)Y+vf4rUESMǬf56[zz>3}>سRE7xR>{pƧP3ύŏY:(9Ǵ).e-N[-]fzc[Vg Fb^O`x{%@rkmz0{ rLON'QNwHڝU".+Z_|kKP ĸP"B/vHx ~!Ro$|(cT)RU/QI!)Rc_ ;I}X?Wc#W&YÇq18K\&V$Fg']>Ҁщ \wz8\̔ī@,H] o>.Exs5T'@T*v;)%`b|u~)J|ɗo5gCepm* *wl}'fq@Z>Ũ`<'?ȍ0@n2 mӆF0Jk;%k5BɐRs \.CfYGV+LwȤa2$r UQe0X@Pl >D*FU~XZN*F_OTJ-G12ae@FKaTש2S%!>(1tV|TVf)󄱪l q uηrrS γp;y]nu(&V{YXs^,??c|D<(ps/-$Ũk.JqV!Rx~qW:lpo0ԳoQ`aK9,N 8r3G9r3G9r3G9r3FnhfgYD(p+ڦU+R(ʱBH paImO디w;jSʐ:5A~7 IF<]p7 nO,ɏL gW7R봔F/)Z/ 7ΙQr4Hk0Mi%ŗԱPC93R+']w݄_ fXBoc A?ˬmb```d1e1\g``6 l 96lC~|H \n6bؕY1H \ f}b|IXHfA,\|eݑG73C^23Jq21JO=@z9'l %8+'PK G|$>(edu/harvard/hul/ois/jhove/handler/audit/PK F|$>>ĽSh8edu/harvard/hul/ois/jhove/handler/audit/AuditCount.classmJ@I4MS{;fZ)ݨ M͗r#( ϴVI`sfs3ϯб]C;RvU_Cc:Sc`#}O$OOɘA 34gLF'8edu/harvard/hul/ois/jhove/handler/audit/AuditState.classR]oQ=-RJъV‚6&%i5ieo`qKMlhb|Gn m)3{;s ŪW42$ELKʔ:, 74PaЛV ]>˽|k?bH6=Cb1b$J[S0F[o뼷ɷ]A-WzXHvهn1m<=-OzP$FT($V(nXm9d fuUs\.` 5 #c2p0T=:r߶:גNvPPԳ][|`;DY,J]hUJvՉ(uz=fDLrUIiq5:4搻j[;A&1!Vhfp Ĕ~1%y-E:!`fi DƘQwDߔ=wd,яŌ2Iez F65q gJ'QO"P2ȇ,w#.U \r=yt2d}I%\eʌtKy@3PK :9 +)edu/harvard/hul/ois/jhove/jhoveConfig.xsdXߏ8~߿b.OJ=ppBp{}5@Mlj;q39"{af<3|Շ$*ͥh{F ?އ닫_u7|}{Ԃx`1]#\I0PηrR|xl{^D&BPٕ.Ʊ\jS(8nu9RL,U.:0a5Ǹ;xeC)t?KgЗOE/}\6oR|rk_>ݍ2S S34>Q7"gԗ\/5 tY hJ|)Kcc3FIjp  %v 2,dؕl)Aj꘠4&kYF2AK[d.SͿY3't 45ZTLd*B W0Idƨk0n v-?B UP$bay%d$\6C;g3mk|9첵f9NjQNVƟZv_.HU*x@l#! QU/;\`nwr6n#*}_K\2d'LPV]Qm ]?ft;tVgl7l 0oRU?knMY9Z~FmwPwase]_ PK F|$>!edu/harvard/hul/ois/jhove/module/PK F|$>qdo=1edu/harvard/hul/ois/jhove/module/AiffModule.class; x\UܙL^tt/}-f_6l,L%^g^ig tasQDU JaqAqEŅEqEf2Y:g{gM`x? p6^%*^ULUP.RJ?]Wg\0 ?績Zkr}#P_(/\0WƼQ/x73-<:exogbwxw8=<~UL0W.~PŇT|gQ*~U~u'>OqOs O3Ν_ ׿d_qk>a2S.؆) ya/qOQ.0oLe.^Www_\*[*xGw=? >҈psY D  obU\*>Tq">+ z;CXb5Fl 'C5`fWtYow%`='bF72LtJH#ke1jњF#a+ #@'X=0ce:-x"LC53CuȬPo YNz4d&-N(`12RzZy:to}I[2U#H^q0r@R<,g a텃ĩ 20 RI6Ҵe{cpցjpq8Cn),rdK,& XIB!UubhFNޘ,%7#qZ9MAc~z-R@JΘۯjsju B39JᔊlDOau/QMJ3D5) H|vEʵQE^2}պU+OZJ^U<90@tbPjڐ&k5qP|a7K;Ej*I3F&#ú,Zd4K7i9d6i'#EM|I\agPT\Z7)c5ht$ZRӣ[]["Fڵeukjj)V'kj[m0jDk4eMfu֮%<"{|a{@[tkL(x[}ζ-5L}ꕵ})+*+dܪk6\C]܁pfz:'(坈= @?`ۡ]IH kVY^^7vxtjiNL%Ӵ8!/ɎBwin1{4q8;JibX TU^M'(3嶟LKtƼ?'Rx@Đ&F(M!M<H ]?o|5-n}[|Gåx&+c<=}tx58 wM.Og.ExFSRs(L>RYz JnlF, &-Yumҿįį5&~kw,^{ cp!%9mS[s@Ƽ%b0)tsVv“V]k4`̕R-T'ȶED<{AHihraUK7?M&$Uğ5WfoxYWYNcz[J۹x'MIz:[QGQW#}So)ߚx[YxGeL.^N5< E8\wHb;1[U,'D@MwӢxE%Q]#4~njSh)^Kނfjd8L5&/%m>R|˙ MPl;aVMf⤋_ys#:N!%W>tAұ.uSoiMSFlM2NlT*̵g]9e^;ʔϵac&sI1c%x~de2۴zֶ)h s0|ds&`(ڣYF(,) l@WQח %|=Mg&(EKaQĘ֒o;* Bck -~f˂IYQ٘mYر!gx,5qdwIOǿEzl,ljzz,L##L4SAe\q3 >E9 %&J@]fFMV1#FKoz:#A>׃g6 ?0[JCfSGeO[f\X{dB XҥSo[:h Š vl/?:oe68 (qrC}bO%#Sm;wхHZ,G_3srm}K>>ɀnhkO`oi]vciCe63j?8KDUg$ G)`3)sOĒ?{Os.坺 hV"f+&Yu4\3iIey6B.fc{2OO`r qմoY*k\۲bM~!ӝS;ڛ:SA-yA 2#/ `}&1MyI2F6;{"F( &*f'X#@V?j]K!ӈm&bzv~+-Lv {SA`̴)-6_Sb#I_d҅WYWQ#4 S'Wc E" F-ݾM~[P01Z^_<e d F䯐VڿU`PC~+H]jln|ê4/asFbg RJSV@֓j m]ty,𴑋_yџ.9I\ [wKp6eoi{Y%노HbYDKxY`vKe]岮JjZvҮWj\C|aNέ,Rݞa0az5`cf˝n3r6l'ECr\CǝOHy + ɱ"ȭM4|`[S6lr< |JA~ >a8F:aaQN4 t< g¢M:8KMf.z䕐S⬾OAґqb'ywٛ>^l'a`9 9ha:>xAp#띒E7L@Da8h"w#,:> aI *B z'qH'2u3R  \d?9(Ky!pG׏hf2Jw] >63m *5k8 L%Խ~8NFn'!$ çl ـWML )yxh^A7XLޛOMx+%?X\p*ء` (a5~0! 5o^_Bn;p߆EZ1݁ ?Hˣd9hsy*,vN u8(PW L u('@Ɔz RB0\Mv ^9`g:;@`K}B (_Splܘ/s#7[Rj 3t|G붞eXtyh*6.\"\ŝ\\ Eԋ}bpH).Ϸsh讣;t7l28 \>+rEr[)wa6/H$ax8u۹:+Kd#.vS32`s@ FmJcdAc`wU\gWI.:/:H 퇺# Ps,øMVu7Zf*A^g—q..q^B͠yٚrlߩ*Vu {} L$gJR籃lYlѻ3;U'ɖy,#}1_y7Y="dp1͘{_XG} 2 k~0*0%@,#״$KNٕ',%8Ox)zbj$ %%"KW}z}$92#rIe~_гF/},BQЯ%g3BkCo;@Cw=/3IiYȿ ɿcov1 v % %탘t%C3le^ʨ^7edѺӢ5}^!i9oBB'#oF_$]YC'DϻBBxO"?GA03Cp[ѹ\>UU=j0+ŨQiRq:'U,Rf3LJFCJ΋,"*X.S|/xV^2N9%\Ο_b]lZ1Bh?.;6~?lOۦ^#m4"L̬mmVQ# kJ ЭD_)2edu/harvard/hul/ois/jhove/module/AsciiModule.class9 X[368>Aqb!-G!)D$aM]GҤ-ېZ%[6}?^%SFl2VHtϰj k$:.Xm&۸Hp Jz7.&'̵G۽(1tA9vq>{S!vcPbH<(ĐH|,{YY$KH$H8|QG=ƚcy`0-.`Rb۴xF]xO0Ic nepĝ傐M<,ƞ==υ0BEC×`_ヵt2܁PMSp<} n_ C8G(h ,?:&v: XF<'lbúxn==Aۍ<EDs!OD;NvĭD<ڟ"t #h- '#CD4U{t(qܪYRh:ȌpS4QN糹zcѸGis:(ޑuDXڛktxziFX-uPu2A!zYbol+h<!ԛ:揄)j+u.ױE&F9-|Q0?Fb&PD%L8.ApІCqFQJ/M `<MZ|9ڣ1k(ЄF;VDMWQc(9=A_M(b~7ã:ChMh&Zi32OXX@"9lEi̾c}Veͺuuf8!d[G=HI2$ea0q7F#V2x6ҕM$O[ɔdx#cPڬk&L2{hz2ьͩzɋĉ0a5Xjn+fShZI*Q+f}٬snwNWCh6bGM%vMCHKm'j/jXXCZx9?Q*g1VyͦƦ:oWWb0uq@F׊-mw6A+R=V2֤J!ri,˪PN.z:T*̀ɅJW̃t"^ey&mb}]}YPۨr. SQ+9魥p7oon =KPCMc5w_\E'mqTjJb/&MAvnNQ{(TטMd暦K8UcJ 9qgJxvmQSjUTOvΘTLk}5ՌDtKltQ&EE&k/F5K{83MPub.Q'ap/s=tR^C'aJO~.[y51C];u)WaO*ś ]z]xD+tt1|yd2&{EدgLtqHj"[ ],^2TqLT,#C&g1 nժ颟=B)&,6`;$@43;"VK&Fdz.ً-ꢺ8*i"ag31Rӑ1+bwE[杻۷ZHcH8A('gܳ93aPޤ {'Ř.n影2/v6Jq.ۡlLG;X(Ԏ5;g֊2sʨ::;\=p+"eEt(Q7)b+hbNֺmD8[ =VE4@]z[o{89ƸO~Ҷ rV&Qo hFE(G:=vr$TD͎{=q:ެD\%*vEVqJ+W8RuTNDFct}MG _"ce?%\8H>36IJsUu"**k/y/CG.}_sĿ+a9ETr׶wuzT>yZ e\(梽O?zQ+Y@3COaQ]'Ǐ$pށ6<Ք;=eg'v dn"zsHΧyf>i#>qL qq1cl'YFRTE/Ks >%Ooxz^$6o\cTKzS#V?͕.;, G"%TPu>҈57Ϣ%ieYyREhCT'fub?w^^D qJzUE4e4=fIMEf~3xptnw:K\:hg.k0= sz YvQ譖.{V%!ut`JޒYڊ5ep/<|Ϛ1B:#A9"vwkeryT9 Kzn]waJ=I7L Kn{g qhsnV,֮=K/au rwҤT~2e6/z$)+Oyl&ʹ}JfOrm+FdpMۍKUmHwJ8n/7_3]eգ ,飌?h_7i4.]4fljKb= zr~{)Sxx8{\G8?Og Q@Qe-5jqnïrD1B Jr5?_o>Ul{!}T(\PyVa!& o?6pN(̛" Mt'aY02XJceVUTSP2LIXסmJTd`Cq-U32-(Q1PCMYpPi^7(JViNY'ya-YUƎ \We$53ݠfڥfZLٙm }ɜ-@IyמsY#Q8 tܜ݈ g@)ZWd`_x0_1Bp "4D3p$QE=#"y3cd[ 9M§; e "")UO ![#a8zUk*pXIixÞ)Ф JWg m*a8Nq@NteMX**/彏tC55Efj\zb>4JIc,]yppy,Ƴ-w%PDw>&uSǧwh&{|4eRy!^O &xS/nJsZ b_= T^> sW-Bkk3:>o7hOh}Q< .jzNA xX)X^*xAV@t;3Λސqm/@T+u#~Ιv-2UR+8 .Z0.Ԗp:Aa,uf]q7g8<ݹ׬%E`ywTTKJ5/ ' |qiC!I{{<,T%e:1  ]j#jXB%.BP=r_^/0֭]9MIG z fA Kh夨A԰dIXJi‹DH/]Or-OMW/UlC\M.0b.jǪgWlVU0q5iSp&T5 YZPP?l.8)'g5e?nq:os],gtdBnY;NZ= !x>͕㏃Ѱe@b}&_\trqRnj[U('χUZH4gU4 < -Ӿr;B!ZB g|$r `x$;]@~vX, d0 ` A,Ai#4>Ge|`EEƗ.1LpW .3F0Np +o,1Epm\m|`=k\k:2~Dj?!O^_PK F|$>#PH7edu/harvard/hul/ois/jhove/module/BytestreamModule.classWW%9u@5MR/Yٖ)r%%E `ҳ|i l`C(Ì24re(#J>@N [{OGm-0y%+y)*(),cJ&܎i7qWj ^Y nZƛp'w1t7C0f[6F߾ ;eˍMx{،{Y>>FY)x([X>'I}ifhϰ2s2>!_E_JVQY H}zqJ/}eӗ7J#)r6+5}Jy߰n闊9# 2> 򹒥笃YX I9Op8$1E k/fD #$DB@"9J@8̊aCáD>b4?eǢ|Dc,47'`3$8{(&\X}O[=ƅ-(rݡv9n驣Ma2f{mtM5"D2(;2NH*n$!tѝas'e·L&D,PzUËUQ#* 5~Ƨ-QmvLw"_̊[Y6 FI_kRhi1MKc1ݒpP0]42e'јҶ(lEβ)A:''شibzIr.-ZXJ(6Z76R"W* jl3t8R;@ΘŒaM^qREsl딄`tbs癣jj%.mW5y\$ݥ Έ.-zzoP(NKX٫ٮm۵ۿo3̸v[* u 9 {>n HYVWSU|M׹`7CmQ]<{!KزpȊ"O佢IJ?R1!?y?OU #g_I W; ֿ įS[bk\ƚ&)_76쳊)S4~ϺPGIş񔊿0 =߸5jyȢ#a^(P7˧,aykޥeS"6Au": z9$m{|~.ph1(x^HL(sPt?Lͷ̌+%5Xj.GsOi _%RI(A0ϑ tM\:_t$yWhk"#ҶrUC w౬du1vD,}r^Fu1/3ª}ASw!:y$mT-R J6@W X04 QvqSS]P2OƱ >iFɺ%XX;LlWkݺlT/Cl&{>궮j,wB }}hܿ9k#۩U&4Kn>ѭ$ze; '_o@#7 o npG˄:Ϗ|7*Cۈ#hvx$O,p5F< eMgc4'=gqZ5x:=k+ӳutK$d_:{:*XEKkW# Ҁ(o\s?]hZ 1ps`s9-'V8hƎΥXӂ@:ql"ƎS!@ V\xf@vp\x%5w-]gНSAo"DK:+Ŷ9l`c;VVٔ.v%.a TY>=$:DY p.eT$/G1@8IZZ7Va|_藑'5[Ye0Y-3 *[^]/쩶E+ z3m@YwұF~2tѤ=1ܘtxnS:<~3ፄ+TPK F|$>T9 $F0edu/harvard/hul/ois/jhove/module/GifModule.class; x[ѳ$'ٖ(r\N$|F`[R'-l=JdIHr. z%-B[H -^.O}4fX!vvvvfv'~`U 泛yn- {ޠ7*V2{jfoco@9{n Tػn"WaG{+Nݥv{Az~HfVؤ}}+q"v}}RaRا x¦dv0,efA 4a"# {)3 {\fU46/Coߠo۷}'[J,@f?T؏'fS3 i5̞UY{o wD?τUfy7Z`/_ ؿ "3 {y:3 3ssF$Mߣ35\yn[IUU> hWz.T";d*Hg—b7/Sy ?_Nbh/ W {«SZ]A o"Vp55kV, ›Sv7fjPs 5*2-0Ml%nNo).jRr_nzW^bOWҳ_>Medbw*|E ߭UU T>D*VxPG>1WV# *掝noȽ]Πis=AD 6oOOG?zwm y{ЋȋlAE_;%x y=E ( VvkƱ@| l7FCƽcZcۘ6/!I5c}hE%&O3ɸg8eT>2".LYݾv]H@B Tz8LwŐg<0bq є|El# Bv0@5і {2#F1҉CI-c gOS37g"v!ˣ-HV3j0)i<.¬jXe<Ϝ=pd@*wA[uZ8ǵ34 %c3CS8&''Ȱ挎8c!gzp4GQ]ծɨzg t&bp(v&hBӉ&63 /L? yL:ǣ3ќzD@F0$81} N-c%(6Y :Zb8% 8cd[$cp; q `JK Epx)8{=>sך ;C$Na ;;X$4Оtq -vJTJ2cN1C)@Fzj!zQl"kp2>52hP<4:tnjZfsr/Mi>=D]@:q"[uamTkpka 9A"&wnsvk d٥Eob(rv##X&4l+ LQ\z"(K<JB"C@?IԤFP"'={bh"dC-0>Gzgٴz՚ *(:p*gu5ε׹֬_V=Wb"C G[oH р??s 2f״8N*6ql͆Bq!5>Nv'1$C uj"5Y.Ϯe)Ga.$ 뚚8$.׆In\f& e޵u]x,468pa826RIDjfתu*-J)z<4D㣍743FC#7$&e.NcYT8%%6 df\ ԕ Z0U NO *?EQ_b8yCO0!h_& RJgah@Tʿ5-T٥2?ÿ!o[,o{XYP?bN'Sz["rhRU :0O R5,0:H %2W QP/dk?ǟ'Q~ESTG'abN9⫪iտl DelʆT7wS/0C\/T2Q%/CMMl3Z3V&TNiT14OdZ\e]WLȪHfgT&i6VDOD/(6Kfw~vfw+G=0&ҒU*T45Ʉa+?JdrT W5eXNo֜m׆1 :vNQḦEv1V1z8k d[0PPyPqA-즀ȭJU<$ylHȡK|.v gp>ᩒJY4Aڳ5*-"tn ٳ4w`¤$Bs<BɱVdaGiΟ_LCZQ1986ugPx;{{['BaaG[DZJ2U:-u>vT i9&U Sf_Y>W|P"tQQ#dkY0UrƚE ۈP2\Z(Q У HMPF}DH7( HVTBG*o| m<ٶJ4𬡌̞KX;](j5*6F,i,mV-%%c$O ]e~*]*]JnUe;6Uj:pkN=8nL6;s_rm*uI[U#]edI`s:MMZm)2=7DXk 􈷒r(R2d+^#+v톈eD^[f\CAb0yXjgOwnzlb]EEW-_ڲmm.d'6S\ct"IE$bc0` ܏Ivw+-dJa͟ķ:5_E<{CIK"^T]F"$L(F\NҶ~\3PK_giBM)sbn`/G ) eBޡXn٥YG0W{)\WiCJ0V0eSɈE /`q]sY$=_Y#̓e.(ftvc⡂Cv0aeb/tU F;rpV:^N-%M%t fTKջ^Y۳}-(t ^U×Ekg*&K r6S."Z8)U`S-ŷLHzI_uypt"#ٞq0OCqz᱒ Scӕ~o_G?}.`M%cLU13Wgy"_*bc%eL?Jx٠>.}m?3ZhtľPs[gfmzQrbB!֬ƃgFa0ŌDiKN)e3^}YR0'mʹ,Pv2v/q#/H/̃ؿ(`E^ߌad~]^~M__5y_o}iw}Mlxna2tيٖ~;Xxv xyC9Ykc6>l)0db3,2iSP>`iv٪R`K:= jNSh昂ӰGLX: ,K SpQ)X1`x VNCu jjA>MJAì'6 VM)Xűuf1d0 gdF7<`2LpYPt0u~v=c5=b]0Z;&l(րPNBkm=Rm{鑂I0HBHFQ>Hkl.0twM8ܺ.ccpMV{)ޮnzIA$:}(ESU<^xB<AC``Y̼2ٕ2OfD5&c (|vg`[4Ff2Ȍd [s˸_EIYkO|?`6ۧp[4f{3!x-cp R ) )3PhZ|'IXV[wZ\aM HP@ dGaAf##f"uki*PQc` ] >%"7Бh)7iOADG[Lӓ0O8LSz`0L< QRfxjM N8Lԓa28 >I)8DkZNa2қޟ8Svv7HŮYYvDL[Ys3 |p5ai@{5>zHjkH-F$\Ojn&j@ ~ &NiuRnCuYv o6`Rpwz{3Ĕ;,C!$E Y$%2h 3 SӒXHcălIX+\E8#8Q݁K?N߄ԃ.PM kc' D!O`S)ܗ)v/ Ut7|mnO}l wǞEG߁ғ$ la*_3IiI$I!iJӢ}0_^A欹Y|Xˌձ _lT"iNø̩^a׏L.tX >=Ϻ|eJ]<2bO zDτ"OfX$\SEMGv[R,@q|)ffeGLjmO-St<)Ye8{|5;duQ785!fm:w_D0"eG3B_s#!zyxS)Me6XoU*QtJU/"Jfp7+^+z(x ri+ aoAC0#gֲ`nqyN6>s7HbUU9 S6%4).{iř0L &13+>J哾+ c{3J,Yw  v,Yfy\Y*vL\J՗a)wҕIE2+_3|51|:@5 г$ #`ǟVqOK E%88 !F]TlriQ{8 OdT-}l92Vb\៉c&/.X ,:/J痥UYbE.HeŐ,:,R RYADE\aX<e*x^R)K3׃ 43ʳ5o@kxDFܲ 2H68mD+FɰgڞY9k(fX #?ڍSLr0c~َ罿d#2Bjoih.5RT(G)kuϳE2K*3Ѐƣ+Ph~|8Ώ (t%Ǡ2$ u7̯Kd 5t욜\1aqѩb9Nv}>RQUw0*A2> HUw? :1|77?PK F|$>|>1edu/harvard/hul/ois/jhove/module/HtmlModule.class; x[ѳ$'9qDKC-1DGáym%dt$1}))=\ZCZz^3$YJl}ε3+ Ik_aLfaUXڨvb +,` K)찝ݠWS)Ծ(vnqIao&η( {NP;}[a![i^ }M8!iۊG Ž*c CaW'I}Ja TgYMs }egwi\!A*۔̎;`;;AԻz3ԻzPAR}̾B_%S#Ek̾}1}oDm}zߥ2 v~Ȟ$S$G22{a)d/+دe72~~Op=K?s$O 3*9FwCaTؿo=OR_ً ކFO+%ZvF8S8Wzs̭ NmHe+epG^$sGqUwP b8`@Kp'Y /u𥼌>.pe|9]\+P~!_D KQJe~fU:;_B4Br= vWx -$zWGz5׈Qo7Λf<r]A+L2oQx+ۦvo#mGrw8*t8x'nz'ɻZ=4+>n< '} FP+*(Z yaǐ‡|_V# *|L)<& ,]͝m zMX &bph$#z8i0{:ښ{܇ Ǡ(-ݻz!l߉]ǞblkE_LMu}H4'b>ʠ&kFA=IkxAe'GdW0 T2i9d@b| תlcfW`5 [,ɂ{Иm!1("zz}BZdiV,p(ㆳ|Gڈ4Qkw K@X nOFJ WЇ2$­a&K`'4jrB !Gq2X#CIJ+ `3!`8gónjB# W@KLvuvb [@qCq-:m7 a-6trA24Loڥu8#p(uF$nT_FvKYèIqUucz TF~# A{9eبx m:Zsr0Cpڭ裃Pp|Ҭy7f~ U^{Yְizxrl,K\Jb N/7[TV_ &X1UƭߦwJ`(dHc jT_*odN=#IL66X~ɄA>3#h8:< ĤfqH}01!c}Q3(Dl0Y7a7YSlltw}#ĘСCՇꫣ z+/VACчqm*JgZNjIZ3޸L#Ơ"o€3 Hr C|pD淩#vYK2G>Xb\eZ"d*G ܓ \ҎcFO!zhp0*`JIM[#F#QTI[ 6<.\]Ah 2D&։`}AңNw˞v0;R]6l- &}xM^qqA4##i{v0GB%q\ufSfs4DB~XSܲq#'͂$2ATe~XP2vNg VVAC$\1.8Dv˦-?ĠH@@͸EUv1"ތhQ*1?&0"ñ6sycʉs?k3_to޿zT~3+J%J\PaɢJVɦJ2&)sH`ݸyUf'!X7 ¶ѦJ"UZLy%iUZ"9eTJetLc!oK3m>VHGjo fX b;K*]'rm箭lŞԴޭ]55m]x`>tv.jҭ.0jҸush܄3Ζ9^]-],]JʬYWX}5ھZؾڴ}ufժt A ja<2t+ҿ=w汘.9}oj=#M ^L:;g9x6cUt˾2[x2ZԻpٓev9EY0/~}ƺWs!fAEg>]ֺ` g4 a%Q֢ z:G"16wJ8l7'r ^nʦwLjӶf沠-gFiiWOG/9W='QӼwB%OA%g҃9M=ʾƱkÓ*5|'ɒ'Qwf6{!sq|-g*F,\R(Vƚ0o&iii`Q8=ewf//$|XLR' %y]!Iil1v} Z|AcHOX룘Pܓ7.,8PJD4K+ ]hGk'~h3KaN54/ ̄ўFQXDVȎ*St-hAdZvHda}e@*[~zZ/He漄^&X[A6d3+ r<62Znq3&lcYЗ/1J"j {x=taiW ;wU(hML Q~ҫČ*p$3LglaP.; 2cxbvq7u4B~όٺP"M%ف4wc?0Z7G̱uN6Q3]uJ"sa/+Bŋ$r[M/{ԙ?!]vaOі \: >PKցE"D;D`6L),e+'bӅK9 o dڄ[P?VFs&c`k_ MLٙ+ñ38.f~$%9x+ixi\Ҝ㲜8^3. }%~V](ڋb+:v *_598^3^q+sU8v=86gq]θՐZ&6ǚs32ؠ!^t2'i,N4؜SqڝgtJ~i(9K:V9yA UV3w Ea4\ ]%qjqJjq{RVPH鳸])t@U= P{}s 1&VfuXCfslb s'0Efl 4_gSe,[Y.ϲ\17˕i: -ǡ'#% A ~]1,vmqϲ$x. ؑD#ӕnʽ2;Pݫ=ǡ7}n)Jv p)DIgqYN^z }>++R P*-gL: եZt#")WE3`C |BSux)9 !G7R@e9 RdNE:cIXYY5gc>yb? &]q8NBO8RRjlS~^GZ&P_oy]Q)Sn#xc@jt2z(mn}K}n&ܘ|Λ]#yKtfћϕ9œ-ykp)x+M\;~ށxrO;' |W =C$|,"eUygrLxgDLo?rS$ς?|e);?!3݃Fܿ zC> s"GD)m f(b?673pb?>7b?y6Su&鹱kfN~fn DCsULWN̮Ul+p -)k>uRpoks:BUz{'@po T Ή򗥻OEh li9/!p v3A2 n=o~h1Ncq<9UL6 _+S0Q^ GE.)z6Tx/1R47]S]$Jt}{s&SOfq?塞4Q,f[+b`w[6;#NjyhωOZ, :.hZ-%>jع7S4\(+_KKO2k^"3VmYZl.vm;C##\άg`-(y8eCfW:*_vj/A/A̺dXp)v.]% \ikסJaI&CvOjt ٲ ,<7 Oo'>a^z4W/> /b *Otn,@sA:mSTHǽ.ٱ:B~IUYfYh/|2xMR&]Ƣ[O՛V_OX\VlZ]ֲE.KYqoqZ\(hEnAZQpϤ7wL꾩M}EF䙛< .nE<-Z @"a~2'kdܟ Jhȗdx y"ëk[jfn9]%q~~0˫D d,"[C85edu/harvard/hul/ois/jhove/module/Jpeg2000Module.class `Tqe B{9vssEBX$,lv= h[kV֢TVl!Fﻵj}j:&,țf͛7of{N<4ԈV_cWʨ1'_F[2:78$a@m܎A'Ⰼ!a# 10Ɲ&d8Kƫ52]wNfVwxW\p;xIƛrWm2_eC;yxw3e{dWd0 _ƏȸWƏ1a?}>#|GSNXf 8CL| xXƤc2>#2>ɬGT)n<3N؊~ W.sE}k/pe !*&er;N؎exK (㏜spS~lf~õ߲E_wN_bx^#2io8i|_,2ƍe2' 2chE>C;uR\8%Q@CEL%dQDspq3Xq.sL.KbW\,IE\$qK\Ih"&.b:]əf& VdyR )V Օˢtk읳Maib.h~?B$Rlk(/%Nja&9|B6=QݤHDٸdj5DZjct,V2c|9ɨFS2m,ڝIJXc"-QY9Đ_ E,mC8;u0qmxD'ZtnݙcK]DL[-@c%B<ɱA=LI~Ҝ]/ll^=$V~"%JosZS]oQt_SJ-!ti[%מܥԕ*G *D մU66S#*eǴC fB:-zHT}6'S=0 *ԁp"J㺚\A=⨭zh0>&`035):iisa┍cPX4mͷ_dАPpT(w6DﱌbvBRT"dMhw\ >-jqDX,*;j@4<< ^DaP'ILH8͐!d ޠȀߚdX%e;Om PLPLAs†ASxCX G)?KEzEic`ӂFU谑]>s+ԶxڐOD pp4$ikPjkW(bW%˪u+zj)-L8PKD"LאZ XaM&V*M#?¾İ1ǍK.㙲teGsbʲq^x"Uy(+Q6zjM*D:ܯ%bJet!{kWpFJz6rѢjF]^RV3PjmZ[n5k7DP<ܹsgJE6 .d^v@wι$6+xܫ-b+ NOrOm"a '谧>kJ187[6T-T/EXw/3Cw郔X1wG]-j򺥊R\F'*osO${6"46 N(brJߌbԏ _y9"$2RɸN0n$&}e^q {cԭiyv9:+;">F_|܋W|Y+ 3YOt /¼h4PMFrp)u`f4sL߶LM~ϔ^y-e8{TVoYf.8ŃDsƆoG{C+ ҝV!g3L{bzl_C׫P8Dl D28TWܿRsrwOC{SCWrD/9 OsӼZYXa+$C< sibΐ8_YzK&7홿hf\JsMh+Q_:AҳbCIOnѿRy*. 7ѳȟ/^m,a = ٭lc6v^Lz8%[3VtD{ ?h;/inAљNg޼mM=ѡ8"ms' \*gBL/;p52c,g]ϼ(ޒ -ෂtR\!d2cH|[:::s&删gC47['wMAGNω&6a$2[Q Bv'S.bpf)mHzKTW+X7`4/ [~CҦ{l&Sǯ8H5:d`\%S߄m1ga)׵UG"׀Nm3:P&I ;/h<@JXpͣ'NFFVX>BAl `nIT"v}||0M?頻۾2);7YI/U7A8hΟ4N}Y33 :E<:Ok.-3 [q0wD3x7x ko+)jel<7N̈́oׯJh7 |%7}!3#"_*^o%̃`rR3}= J{r 4|i31j;mNw΃_o`1,‹;j ᥌  Aϧ-2і6[lwm}̀5x݀|N т‚yh3`^lA,@ŀe, 5 S5 # hlb̅.1 y`s参%dc(G5kfAQkkN\305/ gGaAx6Yp6uhΡ׹Rpu>u.H…nO’^EP2I(sʓ.{<#P!`!Ғѥ*Ku.5PVTVls-塋mIXf ]l`VNgbܮU4ţp P.'E&:&Z*؋5d dk.0 @ͩZFat(lZǠ^"z{buue5Y=s7iOC,ރ`1.,Ū$l); [{˩A!$umWo K˫Ik:$ez1mGa{+8 ã"mcng--˧rHy.$bp2<;Yvb/8lc >턘i}bl3Æwmx'Z)L3ޝxd34L0~8x_&S?f?qƏf2>`1jjfV8("b]hYdEA<;`Wfק諲oJ/N1E$M_JktVJ;LftnQֿ`BKه!5ĥƢ/ Wy*L\wNZI\YՔk$\Mjʵw׺\OZ,\Lڀo"x=-D>AډJcx[곥aAlw&yLWrTt;n &5-^Bg{W|{_xk<}00 ymz\`;. 7ynzQ6GkxQ1" %חJz/T(|u7M$||H~c=ticC g8^ /?NP{ nv՞Ob~⸋SK$g3đgː!iːp7o^7H8yy_t\tn>|Kv<"Qwɧ{+m蕋:;zE*QET:T:  q;PK F|$>*D:4r1edu/harvard/hul/ois/jhove/module/JpegModule.class| |H7(q9|w!#QNE^JlHrsCQ$ "'5(PP#ͮVf߼y7ofWY-;Y=Cdp,# B,' nY2GYdAIx|"<"JdVIY\[1A TiȐIl vSLC`:@řx,>gK+ًυىl+yP̑\|pb|KX$X,U&JbJx$`%/\.KeB+*X#%[*`DE\.d%5HEZԀFYt#C>@JKUVUlF$kQBY\SnSdуx,zD*c6ㅸA;r`؍, X "IbX{6fTs,aC<pr)gYM<Ap.x/ċdWV:S4I@>D%񥨅$r|X ktx-RCkTx$n6$n77!YwXB~x [D mķ o~'Gy@p,e ލ6r6ٲx,+VZ]׉!VDdq@`q/?28䃲GQY| RU|Z xV,ϡE* w+ /K$bW%VYU*!) $o x{_![YIu|K_!|EqJ#8 C#@uCa@DHdVILD A*4&!!(SLE0 AF0L 8,A0A̲d-)<ˬ@f2+XJ(auUլlwzpo_DɄ?+==*%RcUMUYey asu}cmy%kGD_YXZWmUSsjjaU%W׸*]M|W]u= VC]K5)I^kk|j I uIL]aJhuj:AnKwK R2Fm7z=_(}G`_ѡz78#ζ UO%hwݼoml+=aO"K {ZNɬ1Iwp/4<*RnrsWV4}%1TK53E'GJlh^j J+ө7q~Gi9LɳS H-/%-`H'daJ˭w0pS$; `VANyTમ>,oZZ@0}FsnŢURLl34dMjiOh6GOw7Ah -*<&ǭ%x=ݞu"ނBXې}Io--+UkxJ̬Vt^/z( qE]TO1jn-{j=\x'RRȩaQ6{/aC qq]Y.H!Rb $@+@~XJJ22Y`MHn4Jn cY0@r}`򆆂6[)Wc !=-J*\FI/!+ŗww-CHts.5n5襪Re1A++eB1x~JVc ٺ_gkGqf|q;w@$K Vm[!ka:ko$i[,18~)=0F4J5;>)׭\<Bxgy0 euueAXv@F];g yE }RҏUL>UU(,XXYXVpaIVà0(pbd8%GQ^A.BG*Wed@5*xESY\2hr5S.u;d,Tcl |A!H0% 3#[gBy.,:@.my% ps[8vL(@7/Q<<9*:td F֩>V{(0}ئj+,:tZy:;-r{UGg8LOs[[}y:na$t4ΞV5Tw)^` CC7Ѥz;NG4,ptn :: Bߤ/R"wENqM6||8ZELP b]s4'î/[ᨁT~5"6Yj|^j" q)m[CQX6kK;QalBߧ( gƑgy;SB6A B+*U(2J@e**PX :8jyu=A ruA_k-w/PARZ8?Yt'y|%fZ`'` ~s;._oГh l : J!q1.-(,(r--)*r-4 "T yXψ*HJ+r5T1ɟWp:Zj lYX,iH7 Y9%Dn99g { d4ł"\Tvu(SB0nPX'vNT Mg뱣v-g$z=dq4Ɔ6JGi8Fa ‚,$zFmb)La4oָ|Pؙ,Msp;KaEmP"LU#.P؅"mdnHaTJ?frB?P2)~ѿAmū+l$z:>J]. ]#]P* Fx v5 F跊0u0g Z <`JqtfH*(G{ Pص:VmeP ݤtH0! 0!HDJJ 3~8qA$/=W`HBPK+BPG; K,CBGPʱAJuB%jH/&Eê d TaxRv"LCQv'kf)F 1]5Ҏ}NЎf͊0GI^(@K#q%O+t?XۉN& >(?w-~}R0q^'H~?pW( 5;F7xx[=GjNr؝.ݭ{ؽcFh|QX?Ab)~-Ga{S46DCqMܩ A+$ {= ? eK^3oR ^ A1LD5(B2R˻;A}[)7LW PĞT1צx'VÊ*)B:Z$41+ߠna >cShƅw}[B1BE gPnbn 'lhw={?g,gy/s yv^@wVK0X}^fCa*h&oe+j:ѧ8Kh-iogK_^a*q Gn 7SSNdI?i S ·rdo)m"V*]h@~dm=*\b}d@?>g>9oA0ހmQ/% ` ro-ZVrE4ۭJ;}xӰ#۶6tk ۏ/ vG:buav%^T/\a:~&P8D s ΁ט(%/ }g$O4k]řbq&ҘIPhUWZ&3Ysv PKD@xwA~/Jc*&i؆$T!@gh3bt @Fȉ IӼVk܁W6-VLVSbR M1M0MLɊ)Ŕ:5t :jPb+4Sbd)\dF6wu<嫍^~UG(&;{oVt+Z.b=Aow0MXar(%t ,ثL!`i.2lA\,9|,`υsҊVyH+E|-beXZ㰴KcʼnH+G,U`KUXR,-Ò K˱tjT:,cK'cKn,5h+pUi;pn , |4tv́s0r, zܕ1օ䈎SFU~my02vZF\ `.|p1p)Lt`c!r¹psIq1MYc =2A#C 4aXE8{^ k@~=l_Cs-wgwյ52G~45ʇLߦNc%JU81Z^XȩYG騐}]x'~3epcUN0bU劊&W}]y  h4Fx`VwpXQzB&L~z\?61O"UU`c燞4$jjp0jfmU }XisF@J~9W4c |O4mX1[\:̄׭"9RS*u~GܸԴe-_ǐ7 +{+BZv q2׎MX?kim L-UA@ P\F8}W7ezuH!n݋ƌx )<oPV'+koQS?JӾ[rƘ\,1MYͿ͉ܽ,gX!@c҂\KMbiiu.蓩?FjkdPZΕFzto[o,ĕO0bR4MҦ 747T5c))Ѣ1Z b5.w1-tZhfo!vAj*X GQG1{U|m-5A/Wp@#$s$"֯y3QF_M;1Թ0Zw~?ޣaikZZ%_L8L6: }nԠ/lF&A.5^5rN8-y#2Ҋ#6aq{\Ѵ2Bq+ ء4X O?eW[ g^C WuYy!L_CV I^?6Q()oď ˛`yqVgv75ꖎkƿ ,ײ|4 ?NB.57.hm`H1jLJyүUwM.~T2=;HYٻ9P<9~~ &d n#&N`x\Y/'2L_B,5X*L[=j,\w}<Ŀ#!G#C}##F>RiVيV [ŕssAdfę"0c` BFAԩiƭd:>h !c'pcL|[{|+&E9j;K_մU5헣+}-?ڴgf om<:#H*@x@#wB*%`.X5bf%櫌$+lt&BTOb)F,*Qg?r|IȦ!atӢIH~v Yl,?RsIș~t=09HB$8s'S>͆' Zfb @2rlIƒR9uҤ@(ԳtPXa]գEB񨬇'!p,-{dzlq7BnڏtJ!!=W7ⷱӱKك6Pa7cQ!0i>73WIc:5Gyq v|m RJ8ôΨzfwt8d }IJEx@06b2*-6Iv'"LW {11&&JA!b2 ϐ* TxP-;8L1nF{(ki*@lIG(k!I/svP)Lx~1):);:䡸Ȱd! , zTQ4Őb6$lLq,ɞdvVSIfOb`I4#BnЊ]1?$#7AZ: 2\\BL63._*p8x$KTtb/'fSo! [-sڭ9Z0G+11Ic hvI>Dj$a=D .D^ɔäC ȯ(Ek?2r8j)8Ÿ6{RLHG}X0')fU訛Q}mQepdFn`H)|T. eN'՝s^R&[$ޏ&X5F޴:9t&,1ܩ()> |6&K| H^m`s0GVEYSU,M섐 vf oI϶i [.zI(BsR:a#7M<s@&ǭ¤Ke{[C6K:ͳ@ҌVAR#]6X"vߓP Qa qnr4 I ZQ!w /T/b#S2>b9Xrr gHl۸)n}G-`vdLzD˅8R3|Ʀ1HB*\~%>.{,O0Ltb!I|)2MýΗa2JQtMɖ-+3ke* Vb"EWCcK6wy.ѶVӊi]dn>N0ٚRpZ FSGfզ*x<:c#kS pKaxmoݱ)V|)FSomdwb&Bn @bNbX ~lUTs~OKx:]Gq=Z8 "/OCfj[~&}͂(n<ǒr,f$N{96iev&O{|Rtfu⬎Y#ÙcJO&'LeL>W˳ &;cSc}CL6Dl @zG=jUD*'9a*ˍǧq>hQP'-OGWtR>aOS:ܚ^=?H^:iF}^ 4<]X=L V?,8|nI"s1t y,qmlv=)MHb.Nb1#Zqb1i ͋ʆgqG6Ma~Ɇ `q>ZHIhIzA|"G4rpua :RD0ԺdͼV䴙aVeg|3? AL(~h)Ϙ(& m54$D}HL̅mʍV[ -6/(^QayVaTuFԴ "Uƾ2֕I몌9ATxhꧫ'eYEnL7O+rk &f^XSK!"z5-HA~? B?~Z k4W$b~[i+j"\tm>2% ?w.ӈ-2)z\VI]5k~:HUmZIHEkey B&TxO}uЮhk]iF$M' kk)=n= ڐ~mpH42 [f2v~z 6Mb f]aErmvq7týRp`pBe `tcsTf0L[GPDag?#B,)L ~.D+ <(i@wDHݚN/ LBEeI`2ѼHe zR[H/\M/&0[r3jrǿ&7qMwzڱ Z%a$|§rDIJ۲ ?Du8E^@ e$cvr^ 8ez9+2.~A"BtU5 5z-b"׀QmMjkn==BotSЎ8wD-nM5BwǷ+BoDbEo.F]1z'z+Bz{c{#}1}z?1Q"t1#e0B``>}У1ʣ @OƘ}XrAbi&N4) RZ'-o0_߷giG$2 kzP+sY<gd?Lw&@K>h"žl9}LDT|RWꛙ &GĔ O6)w3KOMOfswNq7is:} HNhD%N HIsÙ=L#VM2WA,GVh/PK F|$>V"fHY0edu/harvard/hul/ois/jhove/module/PdfModule.class `T8>ݼCVIp$@4&Ը$ YI1phZѪjbUT-VѶZw}_^ 33$෿?$3o|s{o?COF.7|Qc4c17a< ܘȍZ1 Af@|d?0pc*Ӹtn`\ Ql1n&7kfƌ+qta۸ 1/ap7u̸O.6nč|od܌y_?9`ʌNlof܎OwӝŌZ̾{u?͌+70gxgƿo?q71xX_`G|`DA>4q~f?I1Рԡi``b`aߑL}cA:db( 1 0& s (b(dL2 &bp(h 'bp'c0)LE L+4f3sN4 Y$naª3pܜ99[\|c,f)7s0?C,Ky.0Of7brLWS%3rnk*f3YƳܬaf-7Jnz?6U\Kgqs-µ<2:377@f3<-̌yFs vm~3A'V."pw3Oc b L7y!7/`<cy .R . \ܼ;_Uܼ?pkeL_1}7oW-7qfn~pVn~;qv6ܼ lfܼrq`zCs|$(7󙏛}7n&O"0Oaٷ1؇`>pn>qyn 2s7_Cn1_揹77_6_񛯚,C^|O4mfbSnoW~ov[?;fOkܐf#XfOH1'7POi>GO@syG"i9A?DK]XL`0gϯ@Y~ P+[6V:V21FbPa`+[Òn8PX0{<&`<['pkNdI~mu2&c3­)ܚNZ~kUBnq+ĭV1f"vYܚíܚǭnn-V)[` pT4H[n1k)&~ǭrLW5˪?`eZjBXmkp c:jnp[:[jV#jfX ,bznv5nqV[|fnp+co`܊r|nmVjnŸՉp[qnus[[[۸[r"n}[3ܺį]f]ʭˀ/prb֕"՘w ĭken]ǭr#­u_*`p+vbbmܺ;Ҭ;-wqnXn˭cn 7˭ļ0n=ʭǸ8-n==Jpk/ }z[3z[w=n}[~rGz[`}dDf~*L,n-0?,IIs nɭ6ֻi3UX%䴇/X%gMXsO{h$s'w2@^*8<cY opqVJԥ [Т?tcG<wKaюp[lfJuг wpg:]w*C"'I*7Nd$̨p; !pW=UzgjT(Y*dzģ02/M_c': 4&A4Unc#ܦ`)Ɓ@ 2iOftqF*)7}0k2(z*a0rvފFlCp`LQ2ַnƘZV cr鎭@=u(3TAĺ.ֶ%ⱓ"HPFlh@5;ͯ:.Lh ӇsI2dFA!:*u),8;j c?-Y9<`k= `5b2fJ9XZ1#]XG\?T ! VLz#8(/ Raּ+ J&Y*gdc `dÒ^4w<+93[TiwKӁ[bg#94(% Q0ـj_¶*ZjON4jSa 0 xGHv@9t^2{ݮcLwbi=ߜIYp=i( oS۔g AEpfX`nں3J3Cf, BЬ`~UC]pּs t̙!?-sDlo<'L(-+eM"-8ޢ`5Py+zF Dଅ3g ͚n> ˃ƃ[#mmvhv#x5f;D p'dcE% аIjʯ>6N:Fg;5(ɞ4dW0`=$^霝FԨf@sQ5J2e>3FY.#lvA,aGEʬygz | P{{m̛ +P2uQ b H.]7ЅHZ"f6;k ^ >kb1F5٬-dʱ!-o4oYdY-f|Ђ !pe%̀o][/B,<.!km:ӄRNbm^o3f9\[Z'>QVח"cPA%0X Nϰj j0Šm`=gcpbPVkt lD 6aЊA\9yv#:W~QR4"DfKB F(emv.G߁$?qeCHx2!,ژf_dWjv %FI˾RZd|L*cJe2 5Ps&>ɝf8>;vEmv; DkM4.L?f9nl1'Vu`3 (f7F}e8MW+xf7FHtFɂ,<4ӵ=خ0{c|X/Hwhq0>UG6E l-#tneWR2Y0 LՍH7G 2 4%NL*LEYCVCUeJBk\XAn(nvp[zTThU9 ;RgNY ಽ((Wmvkٝl5`C^h渋MI8qmPEZf"T_G3a7A4FUs#f@Cad<&n ^ݏVkґb&&=W,i e>5׸F"|z`-#XAw8Up`WLPehC BNp1` j `k׹lm ͑)M6{BexZ Oe @Ym˜ {p Xq,WxFQƫG)5 JLu^ jf J7En sQpCP$ :١!ge l # OBx LHXq/tc)2-=YҶY>b@4Eh!e`j6{ i_YۦThmg6ۇU3 NňkW 5<㭄z=0~V ZnD֎Hs^頙n9#Ͱ䲆u͉+C ؽ9-=x+Hn0& 4^#!qV5س6Ϟcy}kWmADx-,R#4,=D g#'h2'=OlCU"1c/'0}ϪYj!2q Wʬ6{f~{foSpl[{[q<,@fGzFr\U`-^;< ǓGL0.LcsElE3sf/%ҀL8_bcQrPlooN)Տn Td dAvsmoVY_c<& jܩg?@&pF:*/hKw"63ַ,EXQ]xٕa0<(w6[ߎ.voX!ki;2҅۠й;$4lI[KcHi%ĶrgMr10~:zqЀ`LwGZᮁJ J6W]:6F7&bZHb%g]KAM lB_b}> H9[I jBWD`F Ū q{KMz6}N2i ;>\CIۄT\ٱ٬ ɑ2m&2Rø+}'Ďma%ۄbB:)r-gU;\U[7T z_2&E86;m_&S^ {RW \cM;7sAݼ#msq*b=hs@rY ftilm2M[;ګ YΣ VX\BgXH1О6g@cc !pwWܴd2<ڧ`2>S(IJNs&.ʤ,ϠzD; ~¬*x#e@Jb6vZm TM5^ <6U2. -)n 4lQ4L62, V!  c,$q<.8-AT#ғi,5”54^mr7UotmRF *Ec)dz;#rI4i,P |϶ fpXgc9hsa=mG3>?f5D4Ɨ>*\U!}?l{[w¿rj۝~TpcY?"0Г1(5YsY݌ĉe |3abHyo:8aW7q=$cAg2>qDA)o@TTMGlLۺJ[P%.G̬ow,`C3IOW!mճ, BS,,ovBxįx;lgKm=BcBr_Ab>lm#..Aw9/%7.3v5᠞ ' EDYbMMV5/o@l>dBp;QĆցU'(N%"fIV״9R|)+񖊛X.6xo !פUFjǫ0KȀcSo;nUrk$u!f԰Q'am哟7'3 ϪW-}eΞLvrbI8Fkj+RV[nT<},RߢѕU_ë'ʝ]I ijh2 F-!ISK+Hg?Keh,\?ERJp 7ٔbu55Ua &Q>lWL;eJ)ҹ? U KkA 3\j@ũLJᦛ(sq_ x ye:ee+ nӎ={ N"WyVcem; ) +ݪ nÄE#C5a?5Ix%0kʖW R׊7|JA2N R7w𝜔f4dn?GO ~ϵ9#m"UǶFʅ?[,UF1D:ı< 5n|3'o3F] P%#:F<ٌ))cp[r3̊\Ƌ&,V(9Km2q;(na5J:~GB~*1uu|]~VD߄һbH.=ng[H"j \e9u gc; ֥ۻǴj}חW,b`ubLZ-r6(:1p )qhG>oP3ȭG];]|W7yة|$Ql\@ :Ԥqy Gp^x^%t 1gķ8x:ܒgǰ5+|}j>@Җ]u{quU+j$&/fj#fYu3@:K,(D~g y2 K)!_9n϶<^3 G&RYNlpB~GKǻ e VtVd}A'),@wC#/tH5틳SĽ6)?eb$xm31PZ^-dIbo~$mũÊv:-(:MC m7ք@cһc?x>*Q:pYCꎝ_fo8R1P{I+0y5GSxGV5UՔ-l,(k,S;xSJ:ig?[#/"Oq%]Tqk*u=!Q<ɊrHإuuՕeB.lv5ftU I7VEݪՕ*i(0|a UP)3>{fLQrPyOb U}X{ChtD-]Q4 c䮉jǡ?w^cr%NJ|@K 6~ؑu1i[[{ǦH\M+*KS_Pj"?pfh\]'ԏl7-RyȉQD%ky~{ ~8B܄O= i|[r?3<4Hg&гQNZφt' [s"x@ U\/)*^%*>UŧLKU*PqxWJŧgZ5*UqRg^oqJWx~תx*_U|Uqy*xUܢ∊7x[UU ?6c"T Dbe>/۟f%v(O{H>6;d% $0;7A G'Ș=d>X=K&Ԉ $ ( 'f dJQV Ӌم}h/ % .#3e 2)2[#khshynG%l8?p۰ S-#K`~Sa~`~2_({)%] 1*p {eY6tU I1 I1Ԥ6u W#gͮ# }q/Y-X6{M9uQ=r;L7 }伵Y^C6@}ym^R s[KMk܀0$K-QhB+`&H>ҎL2vrU` r +]@N7}قV a!>.t?L!SBQ2f631~ {\\_& XYx}QuaV8A>w¬¬X203^!R}{k'y}ɽ$X3$$Y<0ho/`A/w_AL^b;m/~LL"Sr2}A8JBR('\ " r>]OArX\b}䆵PZ(^rr3u UAki@k@N-ko#_#; w!a=qAw%ݻ8>#rɽ{n>TPg" pO;KcC}.2x! ^yzyq{}z vC- a`zo 31J};T)Jvq3gV"?K||7`}|9ha/^C9G(q~o1_:@NP~"3a/'kx[dzk~dPfq xxp:x ooo[mowew[]oHD?3BsH~/ Krm_*&-&{ Gg~T X?!WrHSo2w` P?)OU(.E Iy=#rWq~h?!ӯf5L,DcL2z uYH-3%iLr'fB 390f34Gr Jr.D/]+!L߬u[,)uȱ?cgd1+pt9X@C{'ه1:\18W1x0xw1xC@   ~Lç  21`|4< Fc0;x 4Rt,BjK?7%:?ٴBꢤ̥ Mo5_KyIUn)zNI6P]d b z"` zRK*dQe\bYYiD=Q4o6|7N,|C76t:C!FW$t* pPK8d:{:E@!\G`=?AC$z+=Iɥ3_4KgG\ȅoh(+ʹʹ :,I;ʔdBсg zP.M1aM2L&h դ/o \Aѓfܣd\^ Mǝa(s&&-H0f NNY{{isf_ȡ } 5Ijt4.^LSHVnaӂL( k,x~zj);{в]X{Z/}0X`.{xkk!n u+50b~B;_r|KljU X-It CPK} sz':AkpH{FA!nOͪ3 ;i<,{s{}fbh=aVzzn^8Ruu$X5 3eK JX55??@&]Nk7.{?ƃ9tmi"bNrFt+M'٥=Ǽcg Hg[dSP'醆@,4 '}%` /^Y龗D  w:dl̡#&hT*SYBG"} ?9 BiU_ӷ|)"~G@&5BF3}7xka|B*O:L@f7\;jFC7D{ ·~RC2QO@LezbZeTY;4qK6 TݩG|YMH|ckꄦUw)X( i (A;죱E{i' `1~}vaV\:_ yd< n'F|{{¶Ds% t$0袝9gDB$2ձsukP5Պ}fg,+{@EL^R+ / {  "E:& r .D,a6I7"}à}CCdL4h4Irك)lwò 59FhtoGY K Ϥ^\b(?h:.)r4&.nёCb!iWU9Qg'79ZKBXq%ːKH 0C!X=w&6l$4CZ wU`킆RSHϡ$s08@ {@^uvd@RK&JuC#bG&zuPۃLO-dŧ&fdOEX.'3ɩd) fjsiڽ}>+g7!7jX8 Mȸ#9 PGTxL>&_hsl(p7T*n?kI#2~rԦ2yry SnLjF=ɎiI)B[ҟ"D;}Xɔ LvU䄢f}QS9(yxEC pdo[ Ge d`spTs&׆IGР.<8R*%jh%PL2]f .{\1>qSr_ǔ%3|c!$ YV~A{B9ӕe4O6M<&P1V Op8OOSYJt1Scr22̻IZviV/}t_iVA^f +A%MsK8egpT!u bFϢ*#_$s,+ͲR=Ͳ7ClUg&in5$#Ih1|^^s-$: Z0ȋ%W`ۀv}R9HA?0iy%=ݢ#]%y0+'A2 1LKn>k8d =ll\ItC$=9'5Rs~?9?ԜOj΋??9?hK>2IjW j:J5M^ ?%A Gd2 R^x@~Q>@-"TorZпo o}#%A%#*  n&q; N8AK\z <[Y wzLtT\ w&Ib&H;k @Khm[~-ֆȟAu :D/Y` s) DfY$z@EVV\K!Ɛc3"{TL"#+kp׀:ӟdSL6!y_ x, qGF[Hb=P޾ h$h A >DbEsɢ;{ɌRB0\Bbo"aTA$K>&z0ܜ!_NNm9ySliIg8%ǧa?K&dDwsc =ŐS`]PgLELQj- 0\rL59ˁ-3^OVP\݂hR(AQ<7FvGdk'6~9cJ<@Y;i K9orćGI.l>AyGI.<w(֦^pX \NMRûCr4#1w5I@U /U@JW=i` ا!2>`hLե>-OMhy%YyYh"GF iiv`U  hcفlܪF7'/vc%`I,$+qjBAa%@`z,p mkWo(Ka溝df-}@Oh@0/ipVyٷo&&̨$vD/95>U&a`UWA pCJo'IvRI>}y{))ͦfJs@.N4I' 'mZŊSI&660X| G@ <<Ѯ+Xyk:i:z UсtLGt<\V @I7<̾qJ`3y7WS8{xq/N H3r=N&'dKi}L m'$9C[x'?P<Ϗ2SFӃ"Cdfܣ809 FCB~"cwjG#hzVʹTBPU /5 P MAB ]dJuB뺋9 QY`졹_K@rbI8ճ,i5t yHo6>!"L\OJe`}65}YEY"C 0[ǹF )t5^-7hŖ B~F m§:YyQ klaɀdK#pyJ]&zɣ9d:Tks*PU9d}*rdc*'hdT1W)z>sM7M>iAy@dmjC&T">6 ~*2mZ9){ rb} ‚ rqB.1TE<MB\Ckvo4r~]@fa_Wvðxٹ6eXzv ڝHh0AP`8$Gt1@@o(a@.z9Z&N~ZL:!-}0ٙNh*&ܡv-rq98X^&5uʎ(h)KcFz*-]xY/i((ȳ&-GE3ُ4_a 8hT[`2]Uu0 ~MmQȱM|Q OV.9Te]V=b&+k 0͆Lee<|ʆ OʥS6=a:k0 Ed|4kX'dlx+\nX!~4"VBZ*UtDnlv ,??D7 k}V7/]$(6;ήv;"sQs "K1@3R=brq:5R8շw[Ob"(-ƣ΋D =ytGk*EYcκRVnsڀ^o*9_2ia#0~=Ud 'Y]?F;eICE h2JYbȇ J x?0ӑy.7uvnu#qU3LmI[8qU(`'-py%^Iws:YBz[@/-{?&h[zρ! m+sk}Rfc.^Rmnm.%rϩLFHXܘ׵v?/>KH9ңdXEha2Ahߚݒ}58 %d!0$c7 T/N2pA]61SjD^l"Uyǀ iCBl rt_)ʱI!=}ѭR5JjqjЮWxB+R*1 >9u zmof`7PtTdG+,đ`k_A݄8!AUI[;`JoP N0#E'`M.\&' )܄^2s[{+y}[<\oIKM  sJ v2: szr Y]7!M AĝvSĘG] M uyjr@llIw&9JZ+$ :Y@ ]} {]tIteWrCv%@+pA7:$ &yp^8xxMxƇ{`E BE'y7p\9<'#N˓F֩NSSZ YV?$c{7}Cz D_ɇ*n?GF q6NHʵ34bRW"=Gc7#܏ɔ~299(QBr)i6\fNΑ1#(^ 5:Sx촜|PO6[G~X8;@wO'(RպO^ t},w72EK٣ ﴀqi>M ~ׇrXl+>Q#lf s$V?Y| 5+$1‘>}ILaǷOH N~A;E^Ih?dPݒ̠_7+2,Y)-d7EK>,ٍE~WnA9A* "r9' $h|p|9C)xo1d-[ 2IqK"htISV< j=/ϥ^ö(i&DyWZE;be磌,J,xZCW9+9Y ?qOS'Uઈ.6׻BǞTt|/xx{T2ŵO՘g A=:0aHT_{I.n<>:7 xb&_P,骂<ȣ,0Q+p&*pů Rr9Ww]^FHa*E,x1C"}}/xA[q0"GGymM>\fzbˏ{DbcH;K+\UOkpi<\>Kõɧp_/Qou*i#RzkNWl14|}Ȇo~z7l֧7|kȆoz÷7 ]RGCAPOAiRB_#WD_?٤fkDRж@AT /lEV=x*RȭET4x,UVߛnv;̾0D~W{}% Q`V9Gdž&"2~Z6T (Hyq£ܸnBR5xm* Ӆ`2a|)갡)hri<oޅ؆TǠEsMȌ1&M?`8O~&qn7D`J%e07?&n+dqBcw:E#NSht<!.uӲD>HHk4śe(TLcrm 7u{`ťj5Py1{93rSXl/pJeF29kk#6 :PӋp3~jV 8iCסB&gPmɗMog2U50AR]4|TcgEF[LꝓG 4 D'@w/o9 xT/1 KJ*8rJERD"@s. vd9TB%H\RJ&~}8i'MQ7zWo:#3qbG1WN<e?;̨o ðz^w,(rj-j1edu/harvard/hul/ois/jhove/module/TiffModule.class} |;^Ƕl+α؎;v#QTֶY2zz=p -(.WK)҃hhfWv\'9;͛7ofwՇ !5a*9ʤb՘pVyg9kk8['Ga8[.d$]9ۈyg͘ R6q9yK8kCv:8 ^Y7=إol;;Lv\%-boe>9s9,\ws8,Yή,Y 9l/g8}gWs6;8{'gݜrv gr>8 gÜ}88(gC'94g g89[9I9;9 ~qv9l8 gG9K(X&{d_e}M%ײPcs1l:C%a[9ٷ9T@>~~O3~/0QPٯؓX5o[=g0yVaWTr/#g9L*/rLW7?Tr7{ aϗǰ+U,; Tcgc JlO"SM6%% )d@XȒ7$?U$ LUR,<.idcy@^H9*+5OU;ɉI&Vx.Po T"EZ%TU/-îaI: T:`Vc* VB.RdW:VaRV .URTJ5R-[V+RJ3A}R&k0Yu^.]H4Gr(*eT *ǼQoTiM*]yJaޢ%T|J|J/ܫoQi 旨 6cޮ ;TZyJk0Ri旪nG{U*m*݀vn|J1Si+;UTUچ[Tځ*|J1J{1t*݁_;1r ^0ǘaI6`7.2cǥFt%QLb1d/&Kx&Wsm\z;w¢ťws=\z/ҵEåjϥp\>̥^ǥ \(>ƥc܈'1>ͥp &.݌-\\ Υ;t'Bg1`~78\p^̿KX2SQAc\zK_Q4J:Ht\:H_UC̿Ǥ8|1yG1L70&&&;|7'ps\!~ĥ+O駔-U|ʞx4\GIvS$mШA^e^J2Z;{)ɻl&"s[Kw&۽-}]PT!bK35y}EDM{{Ӯhd 9rL>`-]@/Jjh3C^_4P94c"{H`4dTƃXH-@9ޡ/JQ\v! ;W <&bltם|İ[X5Hٰׅ BXoYwE},4g*F߈Z/ZƮF491#0`"Jm@)q:F|JNOUt#@dR{}#H? Ez\~)CHO`ʞV_ދ?9Hܲoa,1 `cj(@䒝.eJyϰ G5 !D0~Ld* <7" >>#hkmMt2G3(1S9!΀4HyY:GţaԸ`, ˋ!oF o8`K ,x bFhwY.&\_ ^_QNGxW/tV6{{ڵr=F0]:1\o^on*ۻfl2s2U-Zj,-])0s u::[eKxukk׮)5TԈF][6@Oo2"b8(zɞpd_'A>V`w KL&@=7H(M6tYuoژu,7F47hݣV_0>40қ/!E*=\#C1Lj}JwI[#iM'k t0$c5J5zg18F@ !P96/BxsF|lΊY L@P(FC@- h UO%jq~lӵN6#<*7+ۃ,8G Pё!  Šs\8ia1lk6,X1Xq$fEꁈt`Xf/B fk'Ch( bMT[ X:#F4t@.-lAW7`@vK~fv֮XӐZ=0F%vZ Yp#0QF4g%4EFDCqݫ-=)тԙZfsЛ(A|. 09"oتAMF@u~-"fTh,=n8!K/~G}M4zVpd^.{Uz{Bo8^.7  B5;YKWׯn(֮v6iab= qk5 &AzV(N?f!T"=IDZoc oLWhҋӔTƣwokGa$=FDb/E>}*wMCU55zw}UUU:A4/8^P<>⩬ܷo_G+58ƿIwUV8VtV.8 h`d8L WtAӅU쎍(?5_˨W4Uߚ"ܚtN n FaDa-15kUCIan2+GQ08z}\ UuZ-mE#zwQtB@w GYCR`a{RMP!&4K, 5(zQ}9؟tb>}$Gv5W^4?. n^UWW@zm#Ul a(Tz5TŔjl2%*p\" :1]mLXT=ze MԔp%&FĊUKMQkUkݸa/X  W&ĉ\_ݰza?4 4l@; P a.`b#rI)֮u5WI G +"(8Gx%gr(,P\DuyP|su," m'H܈h5NG5LǺICpܟ+GxvW@CPd:n0Ƴ8`j 1LR $]kWA5fpn?pKiQ3EH'iE@87L ]W ɥVx-aAE $AZK/ۤw|?M4AWKU.'eIнޖ^b5%Uz5j;Ú?Bg5Mq5TZ,+7 `=_K0[3 ҤѢ3%NDI-*BDRtOlMJhAm^\R 5}]ceME&.M^Hb8EȋXDΧf8MsM^"/d]^/Sদ /7=E߄uD̍м?||>&hrUBWW`yQ'4DƸpN @ڕi*v$̭͐)M75@ް YE&W׻=FJkRE:y5rm*Cra +Ǿk5#S_QR: cM^/_ih%FM(7ir3V[X!%+f1h4m"$ZM}WJ?+oK`60W MFQ&wȝ&wKQUHU$O/K%8Mِ{孚 .>M^f Zx$CD+NML\ߢW ]8ҷM,?XMltx'k_hlEh`+g%5?ٴ!MH?I29aѨi g<"x֘1az{7 쑻υw׹B^s7sEsziܴxon:'\Do~۶~.4f}bך3ƲBp9WhZ7n? 6YJ֞ j>M>p2o,uG١ږCk;;CkdYv6++Bܱ鬌zG Śl08-?p$|pr|EB!9ɻ1كqwa %,8b{ťaOS!0jE&D`0+;6I()MxvlgSZa#l|dOAp*\v&_Ϸ^xJ>,T(qN>NU`{֝P 3 [N'ǗzXn>+7ϷeSN Fnn= h؏l}SšK7PmP4c_h?7p$ǣplćۣqyΝx2QǺho5!H V|oR]Wƕ!9PMR&d?&p<+&Pj;Kc:jJqZ1p ^Kpu YV&^F0f}CFXyj4m8HۼOGb=6͗&nj?Mؠ#q$>߁J(ݲ, "Ku9[ vX&oV+/w x厦PpZjw•8Wҗ^n ]#E: g_ܜkk5}TqZo|7y$+j MvyդnkkI8*|m RVBwF졧yK /)}P0~ wSWޯ9B]kXF42"DC뿞j |7Vq|#>)J?5no[Vy-|0!dōwʙf=h zmm CvQM FIIŒ7nSiO3l4EYh.3מB7I4`Mǜ|uc!~&qfzy2 Qm. [_²Z65z;;!_>`(aao@AIf*Tt"$ k./vHlo6ɎwޮX/b[ ?hh!|̪̎ΎV/nJ0䝽[h|MoeK=!4hoj},C׭1Aa;ouWcWWqc[ >2;:\rwB iK\|[m֗f+vY듖-=b_) S/Gd ISKBqChψoɫos.M=170y ңa&okMꓗ&uE+xv `QK&mɏ)k-ءBES* QTӰoz֟ȳt A7E #ltb,MA. MkK^9'<66sWs= Si~ cX*2μ rahƣ,m}=gߧXKNsy6r`,C/3n`wتЫ3LI[f1AJwIe21cEsicpO:cۜ΀r- FieWIBH!YHM"VgP>okw@6?P3yMcd9;^-B՗Ulr'ށL2}:>Z|;3;Zo:$ڶѶO>grUY#oMQY3!Hƈa#&`3$i %ig{vZ{fU\J0 YSɍu*#`.Ep25:FbSg:Q$}3?;j\ ۧAaw }WRw=StΠkNKK'x;dL9e}Rk\|o_1AO&}ȕikGnQr :5pv2(5;!(%,>##U yh=AP,( rY&&+=}޾c䋹_J/;3> 9LcdQo#|08/+c($M!cȃ=s||x|5dx8A)SGc}#[(䛀-H/ANoCwN~B1SϜ/O+89Lua8 {4WKaDܗrCӼ#gz93{9rv/W}m.2SҼT/O:0YNP =<.r"e2]FTF))F#?B>zObr<,|O.(ж}`ꂥyMr)ɼ ACLMeX?II~ѼILKz,C` !lvL3LJ,G߁ ?±l""YtA\΢KŬUP+(V݈sM=28О^(vxvHR^#* ʵ+L xRZ~M!4QT@.P aipsF;-p ]9'H+k oٮbrJR.3VZ0:DZ0324__*|Y|]7 ',-9FKөJ@]",|E )g!mQ[yH]CmAޏ%NMt-X9Ns.$ubT8sIV:Ds.);D s aM0gPn{cS>Bz\o3]F/WPx$#>`ȅKaK -q*l)H`[[&DBPY6SBIG")N8etd:s4 N>Y~Ա:HCSN"eJҼ<-@\̛&!HD)>Ez4=@$ܳp s=yxp^q2އDƯƬ "iQ4&O.O%l'*2eKݒǰa':(DqW:VJu=}yR<dd²oYAN,c=[L>RVv:\ G4H &r@NL'XA{x=(m|%ˇ"OP┿ c:0B._8[N^AFqHQA4Z0N^L~oޡ';\wxw̛1ڕρ=l md6do.źSD,KPTw}Cĥ` b Kq\h'.rܣ J#&  YYa%ddlW+Q:~߿-cJGS=?n?NLXĥi,8I.S6Ne&Ҳ dbkdE%դ.*;Fl[e8ώLŤbR[d AvYqHDra,;G&W Q6ܛb[@2N VSd4uX"5KҒ(O|H-}Ru=}rED<ϑG kTPK F|$>fGr 0edu/harvard/hul/ois/jhove/module/Utf8Block.class |y:$O !c HFZI @B2l|awzvWBv}߆w$NLm.HMM'MZ]Ӻa-֨oy׼f3cl3Kuui_R7 TfEe/|+7o|_#xk_'z|7QMw %x"_(E_,%_*e_.VJ #xa|@|P|C GGJ𽂏 Oj ~ ~7 >.!M#G n ~X m>!#xRpWpOT@02b` RUsXQ8.Σ*gJqގavzbhy?ƄJ$N 'T|*<&>xCꂵ}OT΋QgyJCa'1r^>b%jJIOc|G]p!`|C弉&jUZ5f[lթ:>b*Q 8g5Y׎z1+x 6^7dŲ ӟ4Xg"tzvH›:^,X3//trc񝜕f fcαoq,W>Θ~oڮ;w[هq+3*o+0G7x}BM,0FQ >|^Kj8W/같Ɛ]U]Jl6Ʋc%-[h XRڝisӜ-KQ1öCV&c%#8ͨogæ?;|˚0L7fy)MƳhX{tqoMMoFScn%L5q c3*QoMbFmMĎN$q]4VRLڎr,>t]3YæcN$&6χL>;beT+M7izՃLba1I^f#aބmg njވqv5pf[7ZQ/47xi5UN* ]w)Νm,/iᡂ&aTSK5ZS\h,X2o:M>#¾2FM5/X4ZbfgS]?hl?j٪1ˋf*oZٟ{' =ӫhQAN[m {)/Ɲ\ٸSLvtac"YE-?o,;[ZP+3 ,!UFQ8begϑGt>6͠u܊i\q+W}p4-&xzc aW)LۼJx(.QҢeԷ'1mO[ECT/[shXދmV^ 39 14 ٘XQZNA9|KtnO 4%M)Cר4gzʎezIl: uM:7}#\ktj{:F\Agw/R}Wল| 7_.bbGgOII'MW}^etʷ^㱒H7/Z6Iu֘lmIsxf'1M?\9˪qcSS֢sg9=DڙlNl`h&;h %Ҵ)/70F4Η`Ӳ3D#Fzd \MtѬ DcD]\K잁p=Ӳ;ִHt-Ln `蠦 > 4|J`]iDIW10 F G`q Ip#8!7O`jHC 0G f V n'4 wp'w5}  !x!8Q8 &4 p4|>&Hj|>Fj8|>Ii|fRf3Y4|' i  Od4<_/d5< '_Lix; i ߄o n8 n]=}[5|? M n##c??4/#- gCˏ'SOEYAs EAKKܣ%x j[ܧ r)Z jxN!- a- -LC@*]21edu/harvard/hul/ois/jhove/module/Utf8Module.class: x[ѳ+I~r(!d[v$,ۉ/,;g[AĔr(h&$%C -"+m'[z}!gI8&wwfgfgfggvgjemF;l%7ˬVQ.KpuX̺l3Uf!l;e_NBfa;aptY? ,J21 Y!]%6Lȝ$yW>Fdv5~̮!wZ]'I 2{#=2D$odvnDpOhh=+9}Xf{@}Qv?5#jR 5!:`;{G$ \n>F'=Ξ Ğr{Xbfh&]&0dJ|J$(OK3=,R9j>/}Af_$K^" I̾F|]b W|-m}ľGJ~~ ُ؏p7 J4~)_њ&ߑ2#ٟQ&??_xdWfu'1ySfI2s B3s[%nsah4"sI2Qq!xE 〗y!͋P fw"H%2_ 2w||ϒR/&2?[\y2_)bȼTe2/G2y̽2yW|keFkeNu2_/%~/d`m42Pww+cxeHF8xǍذ@hlnĎo0kjhu2}&!msco-P;[}́@gH,hmj#hA$jo :m XГNh`077 l냉x7ݽ)#T6JNF*chr@b^{L CFP0ݑ,4/ldX47#Bm9&,d0;Wbeh(\ƣF41t''轲%RGee"FQݻ@hAKFfT:E7O aXK6NP8I?h:@/>P aRx3%~ԋ%Gcv@1`6)z<wCFCW~tg/k0I_`JhL_Ud$ވH,ln38@ ,y݆yXrWgZRWYW]|JayאųVK{ -v鱘/#ZOýZ/*5$&Ihz$FpJ k19z0~0R4^׌{}ްpd8ΠD iI> AlQv:-><؃:%DMm+9h=H2?`hUU5*6;:R5FPiB$vhhD,Z)4o8AyCk֬RnzmjE{hO ;7)l9[`w׏0X]mۉvFԓ 'G$Aynbև5[p$e胩rm]bTh$rIF#Y->[VfEe^ֻD[nfM*r'5<4H҃h"cDVެ6ؐ6.DevmV>uka9SamZDlxHI'hgjĢt0ujښU*jjUZMܳw9A8 &u(a1jYhkުU4C5r,"ibbӌd8r9BL  MZHOa<Qr5؉~^.їQFBecRhEk֑$\}GdnC;0RW1>QqP }tKIn|* aB;m} EGz7*|FWw*l)Ul,f1+(l Rc4ŠL ;à2QH`1,5̌tR5dû _Y7ߣ=F+8H.toR\6O7~ \l>3)l~+A᷑睞1L$[&1]ך0"Z_42̢k^DmG1XprGc2Z}v~5wbXkU~ݖ(."sV=  S&# 0FP"7&)R\U>L˯i*Qe/lmM=?Y Sv~c $[TC EÈ mz2~cӉ^&S9DŽ?FhORQ(e)N_2iYUnO&1L fW|LO*)~tJ+|?>h>n $O3Sz6' l̵˟c ' ,A+qoSS ?C>z$Nք6jCsn iYpg+KfXҳJkK%ʾbH_f+"Գ a`ͥ<Or-@dHLHWdH{ҹ)W2^؏w 2sy)XBm@4}]܍:] UU l(: P#N@XMj 7gA1^Kz&1x)M&Oc7+-8 M$0Pm51U^aH0*Zx q} Yboluˤ _)v0e9tcaJ9&SNp̬ -b8$SG2"l$ٌ3|fFS6y1/徧2szɛ5U}Ebf4ٙa~#sdol賕ΊY>L2gP7k΄s`FK-L$D'>(G߄vbYVKf}ַ]q (iKk[k{G[SSdFcރHrΰ1@;2Ÿv&,IbgN=3[g6qsIdU}f-m/Djh G"'[dXh0)9 sccB]ʹRD #ߩAxLcKOMo4NbY$q1k\4͉]z/tɯyU)u3蠞9o*WnH" /ȑ $7a;dfEF }??Ub'3hMEօ Sv_Es^Nf}}z2(&a=BlμRdGtQ#OK^ߞ)MbMK)nAX|LiT .)6!QmbfAHdIϨVnʦQgRMf\˭ŢB,H2g 03RLюnQ ~3Z¶_S=kɆylLxf7I~t<_Ұ`pϋ曝Cw|E i`;v% ((G,̾0MX5;,eB|kJ_2JXks 5 d m4x6S/Y6K&m_4Q!HS+GT[;c:m7~KJFdl…9pªWGѻ|/` E2b~ ;KK=V(9O؞'X7JU1UA*[A)9cP8Eee4iXPZvN;.㰤E05KMeiV^9cp9"?\] ( cP6i>GFx'רS*jTm֔kQ2u^7)}? I$}JkߤMSrrƠєkMcundŸ(06uY#t/K#|uu6- -jk\j-=4#륖4t(Hr*uʹ[JMm=48 rv+,r5Ra赯: EFB;uiBZwR&`YH5;Beni< RNqp!~pVi&QJ0$-Kǿlu^vX#Q4p;{e@vڱݵlC.^C JHa.uE`*Pt_p&fn+NH4,9ƒk:M܉ivԑ yzMEswZ 4\#ln2hS,w;Ӱܒ-Nӥ<cn9sJid󅖈>zFIF7cpiTZLW9s4Fhf S*q-.z26vXD`k v֊‹&BLιPN"nmƥH#k I:ed˰0=IW~/vpv;Oepkȕ?\Gv leHrX8DÜƹeHCZJk܉-6Gxm:V.E9jti !{po>DЇnQLbީ}iS1h"f~!Bݟ4ɂ'Κ4<(OC0Spe=R?1!}K'Sc<oqxᶻf#oO0"x§lEmB{!Ar4[N8Q_?M&Hm5!Li•=ZjadY䱩Կ'*<="[p勺'cݠ5L{QЩΘug.;c=REQֽ̺\j{v'hs+ӊOR]XYԋ52{LuNk4zUWP@Jx %0Ļ4l> ~Ebb^hy'"$.4Bb1'.ȝ \macXV>ǚ#VۼppztT,.t%Bȧ[ho)QL[*@rH?kȈ7"_! y6?oFg5^lndmTo`FZNvi=e?qZ}ꌃ<J-4X@{.Ya(`EV v L-kx!ހ-0X5Mc@o&`μg!Kö= sOb3q{e< <`Ȫ~??ٛ 5CBJCyꏃ!II0$? ԟa+?VV]%W櫿VQS-ﰝBVU\SK+տa@; `V"_.V?؞ۥk.S_G n3?PK F|$>)>=B1edu/harvard/hul/ois/jhove/module/WaveModule.class;xfOirl/`zs/`TNHҭ+N!@$bIR|TF ޝq??O{o޼y̞|S0ƚ] |@!*U`S*>J8ǝ>!'8^ <@ TO+ ѼO)0C+iQ3 SEpRNJqx΁'i)*&"× |E*57RD; |W)}~(Ïq~Z?;R *[B!ɚ 9j RyjS= :xe,8srq[8٥P沓])"'.ʋRZ dPዜR,V!.2j-/`Vr JjE5רu61tΕZWxtü VuT+F'o멵AMfomm%|;uG_d;i"kjR( N]M-{*TtRѥn=^j)|/O>*^MKd~}˨x-M ~N; ^p]D!6`aPT+I.HB 0*ƨ(1*2O83 TRW**&F_';ٷF_-795 V9f_d? 2~NͷN+6$Yj]p;.ɞ{^ɞ- ̏8?wT6';E~t] [8A(2~I# (կuR1$}NX;E#PxR P)S2&B!# l]Oԏуz_?GF}1t &Sb񨡇1K{1oO.د6=F+qݏX;3 1e ;X"t" ‘&A#-l>PX顱! 8A9Dll\jc@8{ #C0xaP`kȱB(Oqnkp(X n `p"koinG#dp$㭣^ .V2e@*2³BcHfHf?C~0C #x8tzx4p|PAâb3C8H!\%[6ܺcFܫG~ԔX`e/rt6{\nH=+0FIkez0wm}XwxPfv{w!x}nl:;:h ;l"Ϯ}؁*TQُ`S1 h )4c uTJz>֧ Y( 9w2(?JB4Z8S3M rTxhx$tSE噛 Iε2,bd uTvHPsm&巈Sv'Ba7mTر!},&4kJ+;ߋyUu^4 %i dq&H4nqȆV : x&,gLI)FV s\^eٜS!*s|JiPʭ!vvWD{ 6JL>Y"t,˩YQ?1&vG [a`IPK%iM KFd94CA˷)ݵX^ЭB?v *M[љgtmgܝwe:NX3@h^4OXk_kTT =*\JkQ#jhhc` 6j5 ~ܩX Pg봾QD55F%1 kC0`;BN1}ƢCH صh`d4554lb68|G m(.Fڍ`02"n}si[4llݴ~V- PӦڭ0Ƕ׏ׅl2ux*zYF /+$ԯa~}z Ҏp.-FB1x6'AưD4xA `k!McC!Q`IeuʿͿP@??Ą1x#3#7YQI=vZXɔ( u1]AWac aɞH"nhDv665nvEcC5®5Zx ~EIqiIܸYkjll3a۠ +CQ`L XRckOt-{Φƭ[6Wϛ_ P?24_ߴe@|(a uca`էWx ѰE'ux2&RǑBdX8BP~s1L-ioWg*pM忇*.W`&*#9?aQ/*tcϫo4w {{<*'GQ=@W <8_/_PKeUbyyy p9&sg$PaTC$I*J B'Eٌ9&۶nbm4j$Tmr ZUV%E*R%'S1dK*ZFI-TB.fm;EIfS9ysq0u κSW `KACq ZBYSE(~%ӉW*di*RYZ2RNqmBz*;DL&VڬV&KTiT…53b[a%<BZNRTUjU: nɿ ?/K*-CR) BETSݤ0 x  ]-̈HoUmvU!۝'l&ZXJC.#áF(B!U֘ߕ=E+a&ȴcDd'w޳6<'`09S3mofs,b|['<}hcS$=I`Bev'NOz[U[GR8(/Oas@bs~D[澴9>h1XMfٓҊ#Qi0nVzSX { )V*/~A?][TAɌ7cNÔ+52,vu!ef3;P A[Z(Yh,Iף,n],r3@؏m`}Cx}ZC敖2Wd'kRDC!ivN5f;ҢCVic.{R̮(G0- JY^Zz0XwURWcSEkKW'n,smgR{c"JWmn>Ν?ӛ,%t ~78Z93(6R$mlk;bcJc00z<а'H@(Θ;zS=²#yD[.1{UdTdK@HNdt) b5bv桛-F0Aa 8)4GOnY1W4{pM-軪: e s4f_SG%2?P[N@H>|.͢{@JQs~R|  zYT~B㊄Nb){!x["j9a9s(G,,_rz9 #|HЙyYd8klX+ -吽mxgD)cwws#&*n>#٣WXWgqJ#$#BP3ʊ;xľqR2G`csXFF#4};ec{2egm(p4pokfɎWBTg-X$ [6`W3:O_E=f[ynYLD<m7lw42ޣ {:ܻ轼0hGh{zQ:^}5~ S}Uƪ/wbbvr,uKi2| \|IS*bSLb+r9]4SgXϵ`-f:]U*M%ծ$[ZU}-8˧X9xk\+Ƶqj\l ;Z3Ŵivvg ;:wf%5IVQl@\frmdwR/v vҘdMծjSlS4t\[ض)}@ &еs]4sL)ֆvgEH;]27QTCJut9 z#O|Mh~p;2a ee!2őaweߟ?BPbJ[dVe+ ˰rbت%ZJJ/0'.cv aL2X2(+r`ZK_="2l^QkK< )|\oW` 8h´tq <>f'?l,rkqrWU`p8+eźzb]7 YFZޟV,#Wݞ& &:ۏ~\3OӠ~l>u欨ǎC4ziP?1Fxډg'}4;.\Qeu)诎2ǻ}J?~bxJqK"+᭰g*oˮw½ nː b>k0HoO!ED֜`w;-r Wv6wdiߛ}0}ՎlUN`J<$ռ&ݜH7N7#{oUʧJ(t*T]{tHTfahOO#$gEsI-|a}F٣F*NRSwQ$OQ4Rq;wPaxuE}a_ {WZ3QV MܰF˯L7nTۯff8k \_//H?oUF}s}W%Vfqq}']I |03 \?KfORz'᧮A?O~_Z+ 5>Ml[]S$z֟ĶK!Y$]~~>7$,s=q) 'ٳ22-O_wMKO/60@`?9n*nW )SUե |G @?5.+ -|Y+)"$o}ӠBItXP L"|>k:cG+s8^? #B̎c)'zpDX#b1([VfŊ+W,+ʒ╳p[y2 G)YRXKA뽟9 N)-BOEhPK F|$>O,{#M0edu/harvard/hul/ois/jhove/module/XmlModule.class{ |TN^&/ۄL%{ @f3 K$ Lf ֥֥Z*nj5Z[mնv*ιB~߻{==W>|9?QU4v.{1zYe I=eg D6i{lLeY=Gﯨyz@_TWU4;l7T^U7iTmzFS^Ww]7P"DG*1EwT4s4.*ٯhzMw==@?ڡ_WtwzSaRٿi?v~ogG:JcPasFnp Mp9(\VFs O& g,s\<;tL;e^>[c|.=|o v~_DXbKybaz2^N z,rW{W*|ʫp%.b3TZ.õ|3֩L:KgZU^ *UylT&vB%^(\bn$BM*oVxϳý%omv7Swʷa?;zO*F.TEv]/Vy/!i.zt<0֎v=x/=hη*q.~;4+HQ7LAT.c/#)?B]Ncʯ*0V_OƵ*N *?t: :*>U~o%׹M%oW*ګ}3߅nwޣ*W~Z?h۾`0)!-{0Ȩ Ca?4( m8ݶ_zuͭ r/ZӼz#NWk;ZiZ@~C}{\k%R[7njocٽm2X`x+oW*v5}FHwvAϠbHpDȞ(n Tlp:o( ۜ7*"ۃh MC 1ݤΡpoC;{ F!csk [& F;``Ȩ ۼ ;wy}PtV-NԵ^7|&QXQ 'Y!#-NmawF@ˇ҃ⶸڿv{ |p˜5=@'^1/ab s&Q])sM_&(tbRU1̋ P~Mn*Ã(8u^*G̣x3t 2Dlߨ|>Ǡd$xa|"L?X o2~EF k}(P +5vkXk7G˗il uo; ҃:rzC]W ; #r gw6^cx4l3rV/wz4"0=n,ܺjt0=V\8 T.[lYeٲE nN+I`{rrV;; t{amCg (鴡st1B1v;%b`|dsF)O|EݾAr9wxPN /GN|nX"NrЀa;`f7+A/'0!$K(`Hb㶸5 <GݐĒzw;%YRV[2$ Cwvr{j޾ip|N紵7ӂzz] CB\̍(G=A M (v7~#jB n25Lc;^袛^iMTG+Vׄ6" OݡяX.wVv ./uָ^OQlv.\ M2̫9%˝UO/r\l+5@d,480F^_%D9 5& X@LRƕCaT18l25(^8 sP(RD&4Ag25[nέFd;د,acpk#Mww fh` }/л5lОKFJ[/FʱwW ҹ@LF#l&Sj +W(Z"pF٪իWk"t \v*ߵ<D)!r18ǣ&f¢< N?n{kEkmMPOy)fgkBs41uc&D7& s-B!Py(06ppsCb8eN,/ 4X"bb&n&Zv)Ry5PiXh=2kM,5Q)Pp>ehb{Y@X;~MTOg8ZAt+)i EX#bN:Lq& OePvJ+)o.f f$JSu)7k" 7dT"EhbUD&6MP< Xubbf@3Wl5C}pHE7Uy*Xq`= Zř`ZbGC+Ѩ&ѬMGJ#mczfE[nq".ą"E\Nq UeQ,5X.=W}HSnbd Ჾ(bFDq+)ݐ2K#7 n-oO(F0ecz`bi% ͍S1`Q4+n,0B0Q  g\IˠR4< <0,Z:/]T t=xPǡ/"`eMbL"aF*d!%eĀAiYKE'^{Nh('!1O{ 㓑2,gy'a"dUU <4/R"mw $D ǧ:̚+Sts /ZxjVɜc=$xBU..;/1$ቬ.gd\rC#,XҢN14M) b";|SoPc#Qls³&&^Ŋإ!e ˉL@`D&>NyQ\e89 ATt7l.2{?IC<]CԽV\a&7P&>%nc&nf* QKYhVq&>KivzAD?G)3\kiQhN8H]<0w0!S)5 yЊN[ÁAI71G/<#}D״j~}hbgB5;7G--k`н,~ SdStCKLs/5'Ta I&emX!coK$, $?#QE#;Dڢub"68 Us9sz_n;(J^w DwAk䋅И "\EFēxJ<ctl]^D _<:XASz5mԚ3ZK'ݚ%IUȠɛYM$xV|xuR!A^G;IHi~92I@cr:kYSI,mhF6z>sB)-^'^$jš*g_K0y˚&^^E&% eεg W~[):J&/ۢZX bِ"~>>;^.~ wEf(doۦvzt`6O0!irvⓖs9en PFtJk[肉l5#T#KHL%.FF|=omsډW;9l"I>L2m:oAΧ)Sf,Kݰ=rw15 \f:Ę=d=0ki7|@_*vkNw r&ܓdJE4"I.]v.k05&`{0>ysw9a<[,m } 4쟟зc~:,ضJ.-fwѻz1|o;;>-v016G:Hsbbq2 Ñ5٣PpD 1#y%U\rf3sG!Q"&XX8-JK"Ա$KKǠQ4ţ⧠s*V2k[>NJX9F N/3KYL`6~N]}2r~,lQo\K_.f` g-=E ǯE -0#g6d"p>\ԆJl8a]>Ra>/ۻؐnjYcra8Sڇ`=MG{a60xj])z ƽo۪lDڬ8ZRM(An4uBT#; ֽ04m 8c %8e쟏C yQKpƅ>]̕\̥A710J>} }R0c&_#@ &aA4]C}t- R1؅ ]!@%؆&"[OѕCphhp|LW å^jFO8 sp]COpKqOGSh E 'h _w &LʆS?q3𼻡o/D8nq:ۢꩇo;E`(3ܵu D'I'h#@t|eGpXKU1>dU"<_V$dK8PI'\zaX%:BfG.mǓRȄĿOTּD1v"BQf5&A <rhR03l&<ӄL rxjbpː[ƞgClKYϚR-)e;BexЖ[+#<!R(`h4W‹.|U< Z)56 y=/2 fˮ,=e]Y%AKfYxxՕg;o{kF l|7o CI罉r 4^hja8KqXXƁ6 C$0·]݁IVOO) v{ Q+?42Cq~AiBjˢ,\䚩/pDmLJl&,W~-oMˑߚ_z$\ y= bdqAϕi-C1slԪ<4n+"GO̕\3ksf.0\ZϮ|=ژ'4T|j l{lu!BSc$R7 M} [ZH9Mfc~0C/Hس/9_*=?AJ/%„kq\B]j+ؒשwE"QZ/d){1}(2Z ӑJ2-їc,8XAp.SEyr t9044KTO S:)"Q.KEEQ}8@B*$R}iK ,M18xT/Mxqs|pjo?Esp䒊 Ib|qJ⸴ \\J4˜&9ɇgE]t1(g'wϢYBm gc(]HX-sr@l&0OjL+,%p94+\:1>oKMҀ,Ez~j9/֋ђ%z-CiP4%X$bbE +NXqJ⸴Xq,SL^HjM؜bN; YIdf0̊fYQ\ 0; m(@s9C\[Q6_a l}+N]f3`tAZEze$#:3,P>@ #4##l[JpbXJPZC[+SKQVaf<0)z+Op% .3i\ܪdx4=+({o{ײrS >/^k&|7m<p|?-2a+sk(RGbU:{ ]a)# 1}TaSv®TUGa®Nݬ=xצ3LV58~Z]Gd0gQp(zl8d끙̝.R'l}jrO6noiLqd&;UI|!%(pyqX'[I)쳤Eaȑ\=5tl꧌f5W3iؙ1#lr@0qS\$sU>qNS<A8E[+JvKt ܍@6o{LJp%:ڂ@ǁyG2Kqw (OcPijjo6;JfEv s4ȟgݏ.yN#,Gޒ7e̲X2-\V鲉[JS#le2Vu**RU=i,/%~̳dgu[^J{Rp\E^ʬ'ǟt.v@ڽfvlUv{]g 0=ck;JFٺҲ<{YeeYHjʷy= 8d۴& yQ*+`GcBQюg%hF ׺Ap`?˼;E.AQ!v6R;4zm*.'#bbA 9bCDfUoH]'TQ.ؙAvIya5[SPLJ_bcrvQXkG ?=Vnb2}rrY-z}Eo:Jczj<O}!r;l掔lIXv\Vae۞[$Am)H5 PK G|$>&edu/harvard/hul/ois/jhove/module/aiff/PK F|$>Y_nm7edu/harvard/hul/ois/jhove/module/aiff/AiffStrings.class]J@|mbmVo"BDdMbJCTC-P t(EτUk h4ga+R͘[q6;"qz*6`twXb+ "yC6pwʆ Jk2e"$UDP!tNYLb4IB|,AY_+O-reIeԕH?<ԆWl!;edu/harvard/hul/ois/jhove/module/aiff/AnnotationChunk.class]kAid~Dmid@jEU46 ;i6&f6Q%F-I\ؙ9睙o?}pUXp ᒍ6p1` Xa㦍[ #M'%⾈}J:< z wC?H4[ioͶ ТDXWz`md? ڕQM5C<=:BճqۅKXv; ha8d]Ū5M2* FfƔuB-LNx\CZW YQ1䋥3;Br2:P;03/$$QۢKߖ,6qkֶ1 -^/r\Yݖ:=h3o8ee 0sh@_yMrz}aYRELҼT>V#&f>"{.%赈~PK F|$>D\ <edu/harvard/hul/ois/jhove/module/aiff/ApplicationChunk.classVmWE~6M-HSm|km !t֪IEmjx1EJ$Ymv=Eߎ=ꝥX93w}33Ϣ832+}9AfWBiQx#7"һ[v #j1fy긮lnDPMe*9y5eS ' mltc{Zٔcuڵl0LtZ!%ۙ3~[-mڱ$CV`pW@%Z5'3~xYVjSOE(q9*0D[U8n8Eba_m6 | |;Vv\bYmU(;mjT! Ѡx XxS< IKr<{ wΉ *l '}plO-P`W,PgGY0zd;4En;Va`9pa*P6_v,ۙ@ 'Y ~/ '}]+"~ bզ2Md(OƑm_zEYMFLS>sdfw/h T].WJ Z߄O3~YίɪtD]D|xӈG[veծՙUnG4 {99z hpS~a0 mWuPYiJaBf۶:#CR)KrJ̈́ʴ_Zׯ'X_(/KxHX)cЏ`0JzsAГ`: /%.bڝ/w{qj1 8W8'|fwkl9J"Q/h_9^,s\Hps$9&8RT oi_PK F|$>E`9edu/harvard/hul/ois/jhove/module/aiff/AudioRecChunk.classU[Oa=-n[ +"Bj X @kt-x0b&c`˚&{33g|p9 [뭨xpF}!u [Q -Rq:qr'ྀ &ԊjN2 R%T%M5RQҦ\|~ &4UU6fp=.[jҴlʩJf.:7c )M ^2(hXh}є72r5'9^US*".⑈Lj1DHxB4vI꺦ga>)uMWJoWW Z!Mxj%L@\DS"1fEa1킮Un0tؔ'^H##`N<,W"Xd?rْ8 a:3K?l&d #%ֽH@g4~k;&7K$(B,?;\{#=}xG[ĵѵ3Ggt,Eѹݵ{&}wm7OD\UzsPK G|$>bOz7edu/harvard/hul/ois/jhove/module/aiff/AuthorChunk.classPMK@}iXGo޴*^#R Ջ} fk <:{||~~{#+нTZL ۜ _Qϴ,L#2/%M|~ێfpҴZr.m6[rä ]]{w*;~&)w)8(+5qc$5WR`6Z^Pp"axY!P{`trz1ncEPK F|$>g\.T 9edu/harvard/hul/ois/jhove/module/aiff/CommentsChunk.classUSU.d͆i][*RWR%MK0LB1E ِnL6_7; *gSx&XBhvr9u$1*U~M c|vՍگE|xõCW›oK@TD̋I0-xqxYEky/=Nf\3LÞ`J٪ʛZ92*Fբt5jrs4ؘl|ռ3kYIlhjXfkqTSvY׊ ¤|$: Jꥸ"C)[[3jAXt»)bI ֚^ ˬ-a_,C|$cehXer"FAv¨؜|MFdúsk.;" fG—ql!$ 0-?5 p<on>|=Hkt77edu/harvard/hul/ois/jhove/module/aiff/CommonChunk.classWwciA`'!qNƖAD]ˆ%kHZvʄI3MڦipKI(ED99wFrNO%ws{^׋o~l ㈆{~4]n1=ڌ /f9y14X GYq b8^|]Rm1r(~qsŭ5=1*kX`8тpR{؂، 1_P>A"bxQ3<2| `$ç> 1|^ _`x _bx ~YW4|U.˶= $Y wpX9V)v,,X1y2q913FrenJ3F HŲ\n)PG+h!B 62hv:5Ǎ1ұhw _S?0ϋ% O+XWHΰmO:$(hxzlZ8 Jtu <7<·u,;::3:uϑw]祒p1  [vx816 /m w EDѰwH˟9a)P:y,^(9'</₎ %"LSL C8^QONIz(|5 vW:~W7l,Ya+\qcZz{!&RqzƉ #]9 ; m4 m=#qy'-kǀdHTD( sV6m2l|y|Uw) }R²=室 + @e% b#믉_#nB54''YL!c{:?gR\kĔjS3SS3Q*xj:>E+$cӤl*=bzN%Z ` ݐ/V70la7TxmRכObbzo )j3JJQG͒T@u] ֊:ctq):#7&AtH¾As'=^J *k vmgyNyNxHec ˽1+Em+h+a}X#vPO5.V:1-p !rD*R60{FۯubqBkmcXi(zz9j<%z#gV@%>W;!FFTP;KUѲkT+E078 jr":h c'Vڛ^!dlaнr~3HY_zz*!U/ij{jߝjuϞ?M[jV4L"j--=z6F% T35ZH W$X/6ԴmڪLod nQ{P` hUpk(B[+xs7=:HtSl z[f;%l]DB%J:V=".ҤWNZC`m8MXl.']=LX2Sb6a;B2vul_( bzH@H`h-[~C*x[]={zFCh{ h0aR;U0E&`05U?A!x?(1C E{Qz%Muik>ҵtmѦPzQ_hsp8MȾtT >|G`<eĿMj ڢ*izDU_Gme7)y/W=XPK G|$>X~:edu/harvard/hul/ois/jhove/module/aiff/CopyrightChunk.classPMK@}iXGo޴*-"H<(T/l[lX7AWy?%  # G" )0<յvg/{3vlsRmIF?BNRet~LW=2siق;&m_Mn\Afr`P Llu\1NVjq/?ڝ|Z2ƚ+)0[r]"Ů!|zF~b:Y{kPK F|$>$5edu/harvard/hul/ois/jhove/module/aiff/ExtDouble.classEPJQ=w&s'G;j5 و+ (D8]Jn\4$"@u.KAt.UߢoQJ1fһ8s c00o o̟NX $u<ԑbj˞#}ɠ XkMmeξdlye|:{ Ja~mڑ%9&>㱉[lwe,jG^x; WZ"ĭJѐ|=1-*[^/8YjP6"T&*Irw`[(¿`xkTS@Q~Rq@"Rz?>+}BX״uqLQj?C琳w2CK_|^)<,+DSCO)cc,(/d~cYPK F|$>4>edu/harvard/hul/ois/jhove/module/aiff/FormatVersionChunk.classT[o0=Ҧ )u\ ]o0^&vCtTeLfq۔6b/BC/HĊ89>/.$a⢎Ky,jj I\u:n͛:r: l v6̷h;Rh9Vtn6weury3՝3jt VsP>gjq@p-NV"ȏ{5V w:n8& OPXBD%eTG}qHz=&:MUՉrϱ=&Vg,(Y$ " Ȏ&HyvV R%@=.%e !$vWTr7= 6[= c]洨f;qB@tM3R#ɟC }96M Q*W@>F11'#U*rg|Zh+c_%>!!b[\/PK F|$>']Rڳ@edu/harvard/hul/ois/jhove/module/aiff/InstrumentChunk$Loop.classUSQ=OBL~)"j&j!m20ᬲ*..8hrb}]w׷V8_&}2&bJB2xC *fDŜ yKx~(⩈eaI?Nm`ZrA4|kM'0ð0UGWՒZ6uX>2ԃrZ2TU5˩êĊUk?B%Mˬ2/YCӴw B ["di[ &#]-VAݬئULӄgv8`7bEu )0/NtCQkx )"qwV*F9ܼ!-$H*@ Kb.zDͲ ;Vp|g`R{N<_eu>ͼ51HWՏiI,%RV63W< n3|`Ht֡KWeWC#jz ;edu/harvard/hul/ois/jhove/module/aiff/InstrumentChunk.classVSU]f˫EEAm@ u V(/a5 ԂK/dAJ:/,Yr m^pЯ 5bX6KO/pyU8K vШ.~tbC\,mT}F[vY/Hnr[YI=Њ@tjq^(bˑV\ljԗ>EceЊ8{W`}`(:Hx*T{c:&19.SHSxR3D2ݑ2i_=C4ӫ:3et;zJB kĎ;5bFߨ7keb)hk<|'Wx~ >ՕB`atW8[Eޟ!S3͌ {yYY |T{AFP}Nh/PK F|$>|^7edu/harvard/hul/ois/jhove/module/aiff/MarkerChunk.classUnU]'dKҴz)%&&bv[3'qf8j+O/^jAT#_1[sk^{Ǐ?M0Ë昑㬊^UD\\+x#71qCŐ4xKrs#b7# ޕ{1pK"βyi;y"c-&zU]oKvVSF6&OV_ۖ0-/;B]}Ip-{NNc/ 3 1 `5 gMN2 }QʊFI-% jaj492.#a9<>P@a$Hu=yb7c7}鷤.i< w%U<`8 oU-O:AɻM[& ʭm sM"YmIgx!4"a&UD ޅ45TډR.s_?<,A)21qK4k]\4kf3p?7I+ӴekG_LAr& LjXQ+A).p8& 2 0 PK F|$>nHP5edu/harvard/hul/ois/jhove/module/aiff/MidiChunk.classTNQ]-S//xhH5 *@N;tLS^$Fd h8۬}Y?~}:p'cP)5VÙ✎\"t\#:Fuzl Ҫo 2+5snJsõUifrX;kTC),kbSkΊ@,S6ZaDiЂrNM'_⋁($U"bs[%t$ F8&@$0qU5Ajmw=̦inc.,Hc`vB( e𣏕 7![!A;A߯V_iZ񍆋ePd-/"+V02a8{B*,G˄ٱ_f%1uqt-4Ghw hgdƷUd2˄d Ͽ*Uj +a/RЬ aYęb9؆Y۝z@C( DRAB?Tb:]]YymG-_mv5edu/harvard/hul/ois/jhove/module/aiff/NameChunk.classPJ@}iZGo޴*^#ԃBxm5Ɇ5ʃ?JDuv,{'S p[1F1g@,2* Xt0]O.ͲP>^Ƨ7L%|]V"=|PfNr!xZkíO7"&!s.$lL/-%- LdړHj:xkPK F|$>Ze6edu/harvard/hul/ois/jhove/module/aiff/SaxelChunk.classTKSP=MU *]IQ*K0)")&'󬢯JnUjڊe֞RY2<6 .b cu+v  "ȉXzP)Ҹ ,VXl;Y+{UaZ}l&%{~]ˍ>T> =Ǐ|9Ǫ!sXV_rX\l4/CQWk G5l9]&Sd,5@{|Ye6T*uPX^1UrTTXԜ > [ϲVpxC]wF|a׳=_ w< nXhaV=<sa.uAZcO{[а.N/ :edu/harvard/hul/ois/jhove/module/aiff/SoundDataChunk.classTNA=R?@(jm BڢKfwKOH $}(L,Mvvιwι1QaLU0CA!?|C@XBD R<8|$ 79ŻQS.aZ}3;o)ՔjmkemehnSbj2Ubz>N $5HUZԖ*̩45'XTD/ Q3hI4f4?In2#*c&BXkt2r2fXXMq ˪QPRQD銗RNös)j,՜Y34nĜ%ϐ2Vᡞ#K0V3P"o*>-sRAWzQ'5 @026A/ % `$К#оCVUTHWNJqE,qκQ8)9آ>Fݡv<4Hl:3]]#h8fNfc#ׅ))ngͽ2VnNNT<%$Hndg=Lb]mŽ6v[ M# \ E\bH}Fwt/{BX ?>'B:omH؇rMi ;3^X gvѷ~Fm`!aCMξ>/W`PK G|$>P5edu/harvard/hul/ois/jhove/module/aiff/TextChunk.classTKOQn;taED+"`|PZ0 rLi4@\qИqƀC\3&> Djb;OĄF.s#ٺD$(ŀ:".-_|n,)7 ἑFVQsKT3_Vs暮ZclvF7&[5+wtns'bŢ$t 2qS}CQ ń5 zF/Zy(m'i}b+.e$/bA1$#K2. 48 C{D^6d4YUpwCF2F0*&nCg 5cx"ac66?T,>%1XGd/vQ4';(GO*=pTi!|:tpECN/.˩k=U{ `}^NYwvA+;1J+Cw5L2ڗ)Fb,xPzN0YFzA ܴt ^ (}[`Ǻ'r,q,"oddT6jHypM>%edu/harvard/hul/ois/jhove/module/gif/PK F|$>GX5edu/harvard/hul/ois/jhove/module/gif/GifStrings.class[S@O Db^/Q,Ći3:i-iM*/8?帛9}o?` #0 )XA0]ܗKcO3R}`T ؕRtQ7rz=oF^K=WT`~lu-͵f>Z d:F. y`"BCP}ߌJl*r)RZ| mQ; .Q gQmnU7?߿e[.kX.|X lek,S!'M,OĹsq.{*\ Y8 `'ޘ;,&*ɨhۡø;ĦM*DžMlBKbgt) !'NDɉg,}AsUxShx"EȢ‚_c>zLXlC~>YJmEP/ k,?T%'Ԏ,kv\;>b]DkѦVU]/q,E 5#Xd嶅|,q,b˥HW]PR2 O͟ 0PLD:a~d $H R=0,YKGPZK4]`< 2L`Zd{oPK G|$>&edu/harvard/hul/ois/jhove/module/html/PK F|$>n,66edu/harvard/hul/ois/jhove/module/html/CharStream.classePMO@B VD?%^ 4!iiv%eKm(l ^޾yo< 7.2r09^Ƞ9ޅ6R w 1NL#\ TXEo"T?*>X3pzAڋ^!yg4A&bu{RlORŏ4#9fb!w jF{8#mid`TpZr+'Eʵe3)d)@(2>CàS =C!^#fN<5X;!f[{l85edu/harvard/hul/ois/jhove/module/html/DTDMapper.classuTKsV=`$Xq?y|Swx]xGÆ"J>Cesæ2 *CpROh0zJjJ w.,vTiF_c,wr|T2Us QCut3W4`wuv,YMݹJ/6MU ZȦƷ([]cHz(niX^Ks#o8j뛊UC×T D1?l<*y4O4\vAMn&';+i^[uI74ɥZC3xBBcs+j:-7Hu]Nv5^%OndjUbUPm1R}W }'OV j ^$EDB^*0 *mбM\_qq M D!<#X |c ;IiN4K_>QlIiə7d1&6 'x*F#)C%. C#Cx511SĤ#ⴼKǘ,1fcn;o l?bf&sXIO_J=D{8d*D]E)V &z1's~RG C8ݧ $:edu/harvard/hul/ois/jhove/module/html/Html3_2DocDesc.classW |c,;:!p$9N#qH؎rmZXuEZ9q(ZZz@7%B(r~μ}Z*6?f}3̛t &Xχ ,B$|Z!@ BSH4A aAZtv!,E8 !Cp8a QG#p,RG8DeQBa9B NB8nSNCEX͞NG8La-B?:9oF6""lB8@C،pFG؂pk^: ^` L $R&VI4BaT#d!G( #BaaN]!bKv#\p𦐸 #-W moGx•W!],⽜Y|Y\C,>#,>1#|Gd)fq kY|gY|u,> ,K,+,z_cq=77!܌GUXb?om,[,ۃpG l%*bdf[e FWdFjL>cױ<Z!eh3R5T,2Yp)gjVhΚVYr;T+mR+]v2m´ٕ+*Y+m]$XV)3Quf9z.-d}XkMgBW[ Y y2[HNm,ӫ\H8a(9C(ZBPW Ĕa. y)Ս˳ޡ q {L Fca`_+ ps<+r&2wz0 g<3) T#fR7aYOz3˵ɃsQ2rJD"Y-5Nšɚ1c"1se+feu7Jir%&_l*l`_2Qs2S[IQ 0.ARԞfXS*3ݤ= ½ V<1c1pɒAF~+A'{uO-]2RG-Y)A-NB#x!$;A + ?G@BZ/[b[#K;2)+Mff2mKh$ c`Z\̵Gr(r %aZ̔Y  (5NQLK3. M8WQtML& B&,*wzP֧z34A%0Y*T) >0CݒSїȯc1&{M>O+_r^δ24IkHy'R. OӜQꏴ,w;IH fEҌ&_ erTr)gY`cJE2)˧ƮǢQ.E\i395Q @e"aT\< 3gk9c:md+&6L֘3vf$?Ԋ%^i Y -in0D/Q7JP n,; OSx,T|I^3 W,qJ%xی<UhlSfZ"m{9jJSpv6-PyGP!4mb(G8<*Ym0s}l8 .Aک5c{J ,N0 x xn#v_X*)eraiXP?oy{6 'Ó(_XX<96G ?$?,!)wdJF^'VM5,G3l,gq?_?q;6KeY'|;U I}i`Qӵ{tRM-k|"ѣcO<#⥨V/mҢщm@~8˖-s7{x:9<8E}8zHq~=Ƞae8*ĸ%0qX-48}Ľ>=*ד= NtGW,wG|]*grDkzGKcH:j-fcgىkI {q[h=*w1=*itrFpBFL մc m&b^:5ԡp,;54GU0 rx Yt^9EXRUsL\xH9>S36LD"JW:pJl✸<f؏JyHr{~-uz~tҵFLyLL﫹!sCڒo  !kZgY\y\04uw [Uu'u3+j정4:4?w#V:Lj*6Ngڙj+/ Z+VuޱEZ;T_:w+9Znnl"VyطJ9I* 0T_;*Lݮb'!-/ƗߨtlTRkS.nuzU\>{NkQŜBoo_s@)W@}f+X7}{ J-p֮\9X;c*k).eIVaN].u:xH7!c )/[ N2)1٭c)w4]k3.P P}woxҿ:U.NT.JP_t.SlӍlz;>M1F)ѭ%#$]`$(mHK*F0PoEۮU!N\$i?W\o.4ٹ{!cp慠wW{$ p uPZ>6<ͤ\WWŇU[Q1V8Ya2HKU|"ڟOOGyxMmo.,4$qE:6" ^6x-LU|`U\hI=5ϳ//2~*U 2=ÔQ mUq;Wi&ڹY>j[[Mvtze֫bRdv_URUqkUV߬ofBTi^|DB>_.Hum;#E^"A PGmz~=*A7PK F|$>_ <8edu/harvard/hul/ois/jhove/module/html/Html4DocDesc.classWxӍ-0Y:qظQ,$m8as6E{+iݞ BB('+rHo{=!yn{}v^g?杞|'`i[I ‡>"| O"|jç>Y!| $|y6M^·"|[C~S!D¯~ze<gC;?/^~ (@р"Fk""E2)6,ZPh(栘bViCbP,䵣Qb(4vq,(Cq<PbXd8EćDх"nH8E(@*gXb (֡X,g8Ź(6Eq>(6ľGq&EI1(y-zCFyZ0.cH;Fq,vql4^6*VMiNdmé \&] ജ'ȁUUv҃F-'Pch\s*5ݲy 5E5n&i_M0ga Ǭ)[hB(AQE3dyFwKɋ/n1(`V.d,{_xS /SK膭=l\8)հUu]/0U: B :U`*^Y-Re+F.fl"gҗ wlw\fI#OfS ^ HRc4I:+9Gڣܢ-)0 U ipA٦&6-d/˟d '4|"ǫHs<:N9}kR\KDF>󎝟K͜&-nV+!ΚԌ[Ym l+c8; /8x}@("G"ӵ~Pw,#rgbǎO}D^vr*YB%ȃy? qk_p/9?|u _L%S=ܣR~ ?24xJ#^I"%oSJ%N%R%Jޭ=Jޫ}JޯJ>$5X)Ra~~J$@< _4@nǡ!cl\g =6ꍙlROfc&ڨ7776Zf/Ax.cV6ncc? }p^X8 1,)X%$Y5!Uۧ]?Vn?K q pNll,M2$iL?YS`{ MƐWaZ# za _yuNr#T ĦaOPgW*jn7K/U1ۘay}[o%3A*vUP闩sװk>)}Ǒϓ |g |K*5pW.{[ 1:YW)}OLbC, <}ApU9Vm'dѷو:p-CPymTo]򕘒%5SQ>k|fFͮ3{K J2,}YzN(W-*?7nEk(_T'x8s{ztw]lԯ)?׫w8|{X{M0o }x7ü>aW&/ԞYcPK F|$>j \>edu/harvard/hul/ois/jhove/module/html/Html4StrictDocDesc.classW x~c-'&$r0 .cb A1J$'}=)-=1-In]z}7y{Xh>yof3yb5 `tX|ŇP|GP|kQ|'y O4Ϡ,ϡY͞twlv[F{G֚һsVlRHTdŔъo~/Vjrg*,Gx'136%iuʥp@+D@ͪnԵOW U*F~_Pia*lP)COlq͵f[ҏWOK=UŞxx]DAɌZ>3 J%IŜfYW6IX4Sh]!KFE/6͜eN+ж4*R\)i cԓ@ȣI@4(IDQ"epBI@"p*8e^% RḆ6\XͬN9MTMs9ti3@%@1(3/M- (*i:m ujLluMv+N9šS<*|:Ieu#et)K N''|hlJM0OU}J񗍔s9f#I*0a;MPKZ.HXԙf24-&ݜ@*Rc9*x4*dy(')dƥd9p-+μNȐ̎)=pr&,RJZ=L۸9eYi+n;"p'bݑm wTiJ9[T}/uV̈́/h$`RޤXSfzs}H~ׇ7RDJ?osi;ǬIRh`X?|+MgAlmFJeL6A_JĄl9 XIKcCD >so ͸o&r>;[κ̑@L^▛- FѹNč\ by0*2f|?O{'35c'd9X:{Eβa8)v.IZg.ϵGY#cFU R}Pj=/ +K?f &o$_Oz=<*7ȋAzf::|JU'5OP<RDXc>ointVxekgfh'PUzɰ$$գI6ǐcD}iQ?-OEXoж@.'M%rCx2en9[V2vC$DCbi-9 ɽ/tƼG8H]]5?*A3SgbQޚiF]zVr!IVeAѓR}bHgW8- ܤ=,rTWo;S y:H)ϕ<)7J9$R^ 尔#RJI$W +$pkS ed>cQeզ8[:)=QOa6Wv2E# %.'1<&#:8T]%̬Xc21q̍'Us‰ֆv?Bu˰GK9Ux7aUMÕF+jJ/7qEz$\h0xx|8yċK~!*ܧnu/>$Oj4F+!;lEye~CNrն8VTbj}xO傒r(S.pXmn;UWPQQ_oi\'ȩq?I(&18!Ӿ{nTaN 933qy(2jKo to0 2`W+Ġ<=r=c-.-UCxPFMv_$*ԫkkr~_tl8 ΎYqpV gSfj?~+|̪#DRZ RҖ(eIr`? F.|c Q[1\]ZutY͗v,fcgw|WiSﲊC.)*Aϫ⺫7óCA)wI[=r|G6'=߭0=nU^Wposk8 r4\ip$l7+<-=V6rFܭ"%RC'ڔ3D>Kg_-jn3 ^/^⼠K-}"XPW/i/ԩvO\2LUPmpQEDkiJ1Ӣq@z-M$5T$ PK F|$>K&:edu/harvard/hul/ois/jhove/module/html/Html4TFDocDesc.classX `ޞ/phQETHv(EDҀ$;dvg Djk*U{i+U{Wڻ^w]m{sdvDw'^zQq@&MIhFhAH!"LBІ0AkROTif  "# A8!0YG"p4ߘ9j&tGg342Li.8E= s8&#C8a>'",BXp O{Kʟ#*73V#&kyL>uB؀&~F8\G9<0ج΃B aB("lf_F؂ TPE5!F؊ a #\p1%"\fYoAx+@*Ax;;މp-|»CnB=EV|}!܎p>A!|N>Q!|nO ܃p/}G$ Ex!AxS!|3e/|_@"—Gx_A*“_C:7-o#|Ix {Gx##JU4`OUv)7Z۴?^'7H1|+--7l]nmEEyыJ(|otج*k:LtFNYdz, -6J:UL8ū5}U=7DeP"+9,׫Փluj[^ǨWϒmu9u})Ôz!^XAEtTAoBCѬIg╢nY)넮z B$_F-Y"qxI?i'[N2=h4 3d_-K^ ڼ@&8cɐnz`Zolʆup Y*q;+q+~ы4F҈Pp;EK#!hJ л^P+|9+\cvO,K_bx*>.6@q vo{.'ǢANn`ϐqMPNG$mgEmg{;&xf;5\/ԖMAՁ>;J]TIra|=5+H]&^$ڢ-^3^"Y 㽨d=?{٠ɵu9ژsG>rny{gP\&tЂPs5[aU} lIMDDuZOAr4|~|\W+SYt"[hUC/H%XˌuZᡂX pʎ!.|GWBtSF EHxgʶ&]fw}Yv]gw}A/ʣ%y.W1'ɍ&f2\=.,+cUv?j9U$5ps4KiLdgQwx{\{֣>qyx׽#1HpFqFq[FR6(|'wDvB{>";'@edu/harvard/hul/ois/jhove/module/html/Html4_01FrameDocDesc.classPMK@mbcc~<RTX=)'Y$M&_*ZQķ9(= {wزQCBFn XԝfK6 M]If?d,Ǚb_D!x#q8{`&t`ў ^ؘsumjsσڄ +Aedu/harvard/hul/ois/jhove/module/html/Html4_01StrictDocDesc.classy|ǟ7yHF'B $t dw23}==UT{_{߭/ۊeIԶ;><3y!fiۀ739EnFz Hz/~~K#iT> IOb^IcܧS=Lm}XG$}T%}B'%}Jҧ%}FҳP>%}A%}Iҗ%}Es*k.L-IߖIߕ=IKHIHifǰ/_~ ?KJCE/ة @(h)@ L-@+3,)MR)QR-)X)x)NDNNځy@0Sp*X,t)ΐb1R^35TaA.JZ**Zn޷6RvRFir۵b._陖iibu }L'j_b&OaM#rSӡbOFֱF/Io{b4HIqX8+9#ڞbKE+,x rsHR9ā]Ȳܠ-ڬ<׷+Dʨ+W0|V$j&oX:WԢr 7J +)֊-r*goJ=XBXtRkF rHc&_PyG"~.)6 ᠈MA,;_`]N (V(Ū8 ,~1uSZjxxڅKF|.Pi{(Sjm/ئih`!}k ZMy۴te댰͚.rHYFvMh5s˕u~e-ʅj"F-*P1B?b\,V$EFlN-/~ U6_~:2FF@-v80o~<&8P13:ڬg׏?i;әޕh)SLKB? R_lOK˽Rqxک/V\x/Ux:ej\,g+Skx zwr5aIԓiG쥕S*R\xQNO_qUZtttin k.T)nRX1YqKlQ䙇i>?f/Z|V $=w6 ŬbNTE[q␢XTt=ŒE_1P5g8qf' Aa.4-y$&'bwJ_ZMY[B;hKѵu*oTImֶ1jtKy2Mv;TKnWVkmjLHZ,֦mu>k WFo%J PK F|$>c l=edu/harvard/hul/ois/jhove/module/html/Html4_01TFDocDesc.class x硕$Q H # $ $Ʊm!ki%ҊnM}$iSzq"BC+}ݦ5q-[wJzwKz&0^}NJzP)IO>~w> | 8 O> |</_ | : %ے#黒Gi'~H?„K ?~KW~GQO%E_%M?O_c)H !)R(RIBHe *E#nJ1O&)Kb ѽHX,a E&(ܲ_ietAѴ˽5yV F&+aq3,F.b3C{ yنk`; t;nZK/N]n`Hp=UmuRv,G9<26ʺi9SaxQvkNU\/LX٬*b17777a t <`#Wkv-kksra+3QTIw"`%qD(s`Z1"Jw Ŵ3౴^"Xre`pO*ޣBfp3כ݆hyDXΪYt1(ۼ-"3dEiZ\ƭP^GUpu52N;*eq2_Uq z\KvʗKZM<#6<:F)ij ZE_G+