From 81b7791db2092776ad1ec9d30beb410835700b96 Mon Sep 17 00:00:00 2001 From: Koji Onishi Date: Tue, 30 Mar 2021 04:09:21 +0900 Subject: [PATCH 1/4] add xlsx documents with irregular structure as fixture --- .../converted_from_google_sheet.xlsx | Bin 0 -> 4604 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 test/fixtures/magic/application/vnd.openxmlformats-officedocument.spreadsheetml.sheet/converted_from_google_sheet.xlsx diff --git a/test/fixtures/magic/application/vnd.openxmlformats-officedocument.spreadsheetml.sheet/converted_from_google_sheet.xlsx b/test/fixtures/magic/application/vnd.openxmlformats-officedocument.spreadsheetml.sheet/converted_from_google_sheet.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..465104156ace2b38ea7fd69eb44ec3bb0fb59f92 GIT binary patch literal 4604 zcmai12RNMT*44Y2Ve~FK(R=h7CAuJbH@YBt^xh()1R;VTgox3i8={AZBm_~S9Sji! z(f=8__eT8poV(|lnQxxw`_{bg+V5U_ZCy=FEHX4aJUld8z5DuTmx2m;9pJ`q?``An z?BV3|?+Zb`0C%_iQ45bQ0V3S*;0?g-S!Yu!uo9W&sI~xLp3Q^y;e$ay@t4r|8e-1D z=nU>da)(>P9=;7fm2JTxEbA~*>>%>GZ3`B_mS=4yr$pq0byT0Kd0LOhaUHd2)w|ZR zYn#EAWiXQa$=#+JMlv_%g@{%^)DbT+l|pZnx`2IQ9gdlc zxww0#H4)t)N^qc%Pj@8298F<+gni&RUs;a(Qcp(r1id#bQaBMKPArT2HG*qWP4QG3 zU*e2rZ>C?reejc2{|s3lI=xQ!^(LjD{N$DbYAk1~-qv1gw9?hY#ly9Aj>1MqL&L>HL(~0VRQh{*yZS&J9DIHFFTQ?JnLg~% z%|sMlV7&#p>j`P_Gb?7zY^a#>FsLsOX3>r!kiZyw<|zklc;9SUG?NT3kc&{ys)E89 zlF6SNkj5C0hOcB3wrLIY9S7~GVIZTsEa$R{ zU{1L%)m|E2Q51xf-i91d@p&>+K-=hIOxl87GMR8ob8dkBGH-hf*|*VP;_UkxF2##r zJ0Xa#Xw4SmR;DzgNAaY@){7zY(Vm$5w8Q5&6H7%B&z?GN9P#zK3d*K^lz997S{caz zl;O}3hULl;6Dtn>YxD`dj3ES&jcSS2-k-F0CwMJ) zlZxh?CQhS{pR_grJ`vKHDYNz$TG#u&XC1`Bf2@(rD%F;C4Bge5l_k?=%Uz z1VA|R;D9)R;PmmBc#%!jXpa&GYqe6K8w2b1`{~CiMe|+DZ{LMr2A^o-YSDu|zRhTQd%a;@xMsTq{ux8e`K+BP*gZtE$dSdt3S&_?PFT1z zZRkY@H8wChNyNz&Vr2pXQ7qXEE{LA&`J4x$N2F!PWUnMweg%_!ciCMdt+rPb!pM*U z^R&h$Wb_a)lW+=CPzEYwA5knzck62fCM%{glDn%uw7Vmm@ihZJRnXBZ_n=6GsYP1C zF?t{|8k|@H<%8CNKmvJODRI#tuK5+#oh;~>Qbug}j?ΞH$4~7H1^V?bG@I1_28t z&2y$H^CBGiWl-Zp2aPdiSMXnKvSkaj3qc_?;ZgD`g67jc6lb$9YH*&@0Gd3jWhVBd z0;1;VU7DIEO)Wwjdx9}r5f=O*jZp`tt#YIYH>XMZ*0}|z?f@t8md(njiKo$}8=>J1 z?sIbFjf~THV48(xYeRDV_H_YO4(#ANu)i1 zZ?ft4;%hV7K5+923SoY-ahiGFfnX^wPSw`{?j%5~6*WmEwYuAc))V|(pysSDCj1ld z9y)~JeA7w(;8NPWBCj2S+*Z$^4}+{pHx6Ih8}W>;)-y1G8?p9<3-`KN%d)s%rsADD zPP_YQVn2c?2o1uk)vfruOe%T0=t%_qtvI?GMoMfYi)?M=$}p&J>)~S0!(4w_mf*#s z8IWe(t2oj5Bokax2Aw3HrpEVN%dZ-vC+YP=BnmXxL@JGm7c`9zEeDk6>rwCa1b?I< z-ohDd7XJQxBoD!pi$>{6RgSntT&uW^PoWgV$aYkb0cObiOFX0i=wbrNzXu243I!833-o6AO@LR?*&VL43Vm%>eb6sX3FR*8|db6vD^{^El-p%V4nix zgDE%?E7)Q5%M09(_S339^7Ot^MeoHBt3O6ag&%0rmS+xPuMB^8oE7+}Q!Bb;ar6`} z`oqsa?^=GiLW_k`m|M$Z{*37UnNDJf$x#)YqmQ8#O6JKS^d-qy)aH;?s>L7uCZOUv zX*X*qK!%`onMA9@&SnP+WVV3C&fNaw?GJUtoDvW$)~^gL|#&Z!-``!G-&+DmZrJXj->KkmKjK|_po zpWC8wg6XreO=i_s87Dg-Q-hK%=~;KGB2!IaFha?jKMWmmb7Dg^cbz%c4yKeh6Ss<# z`X%3%t&nZ4i8q8H6O4;DLQfdjfb0ch|JW0OzY>n>iMF1et{3JIs);m*pje$zDdpLy z^h6`j!&l|pHRa6^p!EiR&36`<7EOc02ikidroA2lm=lyIl`Re>=R#oT%N6grE8v07 zTB=azTh|1>5I8qb2ZjYdd8@vJDICe=%EW^E-9B@USFUo}y>dpy#4|*75LA(&|4wuC zt&Tf3jt&7rgz&Ym**XvIt)HY!5S6XPpATKwiJL(B;;}YKirxXRkZO1|;hP9s^v(NR zJaZp>eWE@#4t?->?d)0&+r;WkNMv$6^8nH?UQS0^OjeK>f zUi(priD#eXs_NJI#RuH-4ujCP3S%(|UYtCS#Y-Z2ksFk?OX$UvT)ZDTg)Zdo(&MtJg`AR%D;P6SKhJAKDRuhAwv z5}7#>X5w6vQX^IO)Mk|??xCAGE7ZDH_K9t`)Ak!M?ozRwaY%`1IeAgOb(YsL=4Rc# z?)_Ao7aD05DE1<{|4G3MqepwqT3ixF7=q8 zl=2Z~P9>wEY-vw_5~Fb#CW^5vYPi8Vl8+{ge^M<%20`j>%I07MFaut$*w&T(Jg z%O<(-l_0wtF~idaC1&|D=NDa@oBAn)kJ1l!LrW_k1=<3C*f8-t?f15ZkgvgM&?oj= zWzY!qOnEtAoYp;P_v*R$B?huR6y;ublG;Xv%c}Y>Nk3)#n4H+$#?T)S8BzL$~QDuGqgQ-HvP{ft#^Hoo_I zVdo2In6ydTMZG@rEM$TqH^TWp{hOJRr-!eDhp&}kpqGP>1*&H24TiLlr{VXRXDM z+>(2%tf24>DlYKUHzHB?vAuG%;*Z>|JHxES+g7B7FH;ohKTh4%P#0u|xPWSFm&Kml z7T*$`V_K&4y2b5p6dJ|aBESXAd@_eCnx@%vXzhK=xzD`#Z$v8C@>VTnR zkfHsarY{eNsA>Ao_`BKqD$3>A@E`Oy8z b{Wy|`|5Dz%n%FofbOPin7b%6eF82I?t!YDr literal 0 HcmV?d00001 From 1a8245185694d7892a3edcd2f9eaac24fa9d553c Mon Sep 17 00:00:00 2001 From: Koji Onishi Date: Tue, 30 Mar 2021 04:12:13 +0900 Subject: [PATCH 2/4] seek wider areas for [Content_Types].xml to magicmatch ms xlsx --- data/custom.xml | 2 +- lib/marcel/tables.rb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/data/custom.xml b/data/custom.xml index 4766f15..dcca413 100644 --- a/data/custom.xml +++ b/data/custom.xml @@ -55,7 +55,7 @@ - + diff --git a/lib/marcel/tables.rb b/lib/marcel/tables.rb index 2b3c2a2..a3d89ac 100644 --- a/lib/marcel/tables.rb +++ b/lib/marcel/tables.rb @@ -2164,7 +2164,7 @@ module Marcel ['application/vnd.ms-powerpoint', [[0..8, "\320\317\021\340\241\261\032\341", [[1152..4096, "P\000o\000w\000e\000r\000P\000o\000i\000n\000t\000 D\000o\000c\000u\000m\000e\000n\000t"]]]]], ['application/vnd.openxmlformats-officedocument.presentationml.presentation', [[0, "PK\003\004", [[30, '[Content_Types].xml', [[0..4096, 'ppt/']]], [30, '_rels/.rels', [[0..4096, 'ppt/']]]]]]], ['application/vnd.ms-excel', [[2080, 'Microsoft Excel 5.0 Worksheet'], [2080, 'Foglio di lavoro Microsoft Exce'], [2114, 'Biff5'], [2121, 'Biff5'], [0..8, "\320\317\021\340\241\261\032\341", [[1152..4096, "W\000o\000r\000k\000b\000o\000o\000k"]]]]], - ['application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', [[0, "PK\003\004", [[30, '[Content_Types].xml', [[0..4096, 'xl/']]], [30, '_rels/.rels', [[0..4096, 'xl/']]]]]]], + ['application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', [[0, "PK\003\004", [[30..4096, '[Content_Types].xml', [[0..4096, 'xl/']]], [30, '_rels/.rels', [[0..4096, 'xl/']]]]]]], ['application/x-dbf', [[0, "(?s)^[\\\\002\\\\003\\\\060\\\\061\\\\062\\\\103\\\\143\\\\203\\\\213\\\\313\\\\365\\\\345\\\\373].[\\\\001-\\\\014][\\\\001-\\\\037].{4}(?:.[^\\\\000]|[\\\\101-\\\\377].)(?:[^\\\\000\\\\001].|.[^\\\\000]).{31}(?<=[\\\\000][^\\\\000]{0,10})[A-Z@+]"]]], ['image/x-tga', [[1, "\001\001\000\000", [[8, ".*[\\\\124\\\\122\\\\125\\\\105\\\\126\\\\111\\\\123\\\\111\\\\117\\\\116\\\\055\\\\130\\\\106\\\\111\\\\114\\\\105\\\\056\\\\000]"]]], [1, "\000\002\000\000", [[8, ".*[\\\\124\\\\122\\\\125\\\\105\\\\126\\\\111\\\\123\\\\111\\\\117\\\\116\\\\055\\\\130\\\\106\\\\111\\\\114\\\\105\\\\056\\\\000]"]]], [1, "\000\003\000\000", [[8, ".*[\\\\124\\\\122\\\\125\\\\105\\\\126\\\\111\\\\123\\\\111\\\\117\\\\116\\\\055\\\\130\\\\106\\\\111\\\\114\\\\105\\\\056\\\\000]"]]]]], ['application/x-endnote-refer', [[0..50, '%A ', [[0..1000, "\n%D ", [[0..1000, "\n%T "]]]]]]], From 1409843d4c5bae01fcc26d2f362c646defcfc7cd Mon Sep 17 00:00:00 2001 From: Koji Onishi Date: Tue, 30 Mar 2021 02:52:22 +0900 Subject: [PATCH 3/4] add office documents that have irregular structure as fixture --- .../converted_from_google_slide.pptx | Bin 0 -> 32093 bytes .../converted_from_google_doc.docx | Bin 0 -> 6081 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 test/fixtures/magic/application/vnd.openxmlformats-officedocument.presentationml.presentation/converted_from_google_slide.pptx create mode 100644 test/fixtures/magic/application/vnd.openxmlformats-officedocument.wordprocessingml.document/converted_from_google_doc.docx diff --git a/test/fixtures/magic/application/vnd.openxmlformats-officedocument.presentationml.presentation/converted_from_google_slide.pptx b/test/fixtures/magic/application/vnd.openxmlformats-officedocument.presentationml.presentation/converted_from_google_slide.pptx new file mode 100644 index 0000000000000000000000000000000000000000..c41668942895da77d37d0be3265a9d84f9e99b1a GIT binary patch literal 32093 zcmeF3Rcu^Q)}_tN%yt|zGjq($cA1%(Ic8>NX2;CT%*-(}W6Yi;{r@v9&8Rh_p2x0- z(z&}%J=`PRZ!PV$tK_9X!O(!9prC+k6ucFI{^^DGdu?auMDJu~Y;F9HcSbrlYpV-@ zlG})-BplWfd^_BVb%?&E zAI3`2E6XaE6@F|rgJQh(T=AXRe5C+2Xp{K+#}%Z+^U!1nC9qg1?1b5Rg-*2_&}^(o z>X7x-rT&q|JgATmj$j{!h38k2j*JSzO^exQ1^x$2taU_-L zm&g+N@-H#(q5Xz~Y@|Mwihx_C&@#2TyNH>3AHoo`grI&j1pvcNs6d%ACiGMwB!zTR zw05Qmn4dNt`J5(xMVm-$F{%eKNeAxX3w>@Vgv$F@w~cioJUqdTUtw zy%D-MtW-2`F}nB$+3~v6HEoq?ybQw;@%U_Lt7$c#^ul!=o{HzqS6+^C1NFE#GG4*v zOpRW>p3n|(pOt2m%#G)>cognVITl{kwb)|z0 zY$T;Xi1#@XtgjN_%3soiWOd)1UUsoLyl?LJXYUfky0dwFyl#&%A$QmcYbBmeL+C%B zFPX1@)nDoIKCeY#l6}PF@PEEHS8oWIgXsF)-A^CM>H545>hkm1_bhXqr(J)`BnGxA zFtqDYG|u=2bb2$cfJcUufo92q5i2CKCty1|Ahbmw2!h|@Y~*=OFkCLk<=Y&LNE6f! zO(=N|bV*VMzF`>ogZZ+-Tx^`FlcBIylY=n51r#bqtB&1dx1DuDnaL1yJPHh8afyoV zfb}(;WM+B==nLekcO-51%F|J*njE=PZD}e?ArlJU!XrNyu6!cDhYrj}> z8@D{`SJRbWBNUBsTDyL*t+3e4aT!)MaXl=Kr;+9c2K*SHN%=_U%qPnJtLXW|R0y$j zaKCsX_YW*yt28P%q4RU#S}RD9>d)+jUyx?&1~n(S2JgQeb?F_kZP=T1>jY+8%;83g zJ#E^~W!Q=TiYt#m}daj zOGt)}GscU7KJR=N%c-9bW1tUHZV7>juBz+9tiK52CTPCcLrcq{ly2*$vf}d!9H<`P=MM z5=_>qE-cO(qMD&^L7J9ygh%}gzs1gUFvi0xMIx+8asMqguH-H(FkJhT)Tpi zT42!WedCR9#fD8{m?@?W05>|t_PL!Xp0sA-u^9OkBzsHFX+$j8;{#+YD*F=eMO6>KF6(MxCJ5<0%jt7>n7 znS(tsq8%KEYL+Y+UY<8#%^jiMVp5A>IC6}SSwYQc&=wK@i$iIJtHk=1pV5Ylq}YDT zYVLE@>FHpWtJ~h3TV;?bRjGa2V6{Grw;`ojXBrG9z!%=0wRx~nZ)c3TeZk~35%@mE zVk0%gsEwD`2$JeWuWkx7DRepA_*sU`Q}U=-Khxwv_rgCNcGo+}Q>=gW0ep&2bK{Jg z+wO^rV}0?%E9_;6lZ0^c?SLg4@Qx`j1qt=IAd;Q{4g_S63j`$p{{nTU{~hWy>yn$f zvdG;Vae)Bg#vS#;{r;QhP{R-CnMcjru2a=I*P4Uy zIIGi{x(GdjKql%=_nMuTMSp<4LuK2&WX^Vq-qG7#>wop@4Zd2bmmTA&7<`Lx!rR0* zJg?ion!P=%OSktG_H78pr(pFLy~@M1AY*}7#~8k1!8+}%ELOne-Dyh6RO&fAT5x->vQ+YmS5yM@AKtg zLG`(t@$UD}llm>6_c??Gvg_yNm`}Htr)Tz@&*%QHuwI(GdC>g1&T&`MwjU-IAHw!W)TbUDqykb0McFZen4$8YLkzsSWXE7uc=TTsM3+`FxbOEhmHt;V$(YMYwMDTm9&OP^Q!UM}w zRSc6z_0idN`cb1$D~34q$!^J(YGp>>%iyRG)NqLLk;&xwNhDXzY{tz+HgU1i<5BU?ov;3<-K_y@frW&yFs^3i00*-_LpxjkL)J|+1J`2 z&Np3R-B+_$1~EEn(??rrn3F54h#Q<4Mi(cZ!r1G}N}@L99Z}Q_^msi6e4}B9A@3}~ z`jl1v5hPQ?;xO-wi#I-zN=SPLD8wpt(P)xE{;;X_$*w-oMS70zcU1HVzC#{jfrAeH z9Y#~D`}N{!{y5kH^DvfL9?beWz&u4P)6G(Ma*2mHKLgtYIXq{#truWtV<}SO816iK z^)QmZGYacWhAKpUGXSui-{E|Qv%fP_+Vja)RdTFqSCS1?Fgq={(7ifu2?EQmPeCEb zFi0zIm(CTd$o5947MWv#c;eyQ%7A0!{zPG78kod z$#hd5q`4G)aG?1?7h1$fSKnzo(B*ry*NX5wAwR8M@M@Vp$04Tl=DM6n>7hm zE4{k$h6apvy6%}Zs@T>FJY`EdXx^$PxTS4#x2@ad2=LQFsl_<=9FfI_3bctMn;?`o zlrR124hrQ)sDh^Zc^Apa27Ac($47;dyroRX^xe4`M|fczr_2O|MKiMwob;5GWw2A#tx43|8(&W1FxZN zv&V+SCwN74%sU%Hs`*&u68App;%CLKZi^@&)j%3ZtP<~X-YG=*veflx#VZj~NHHFs zRVe5O7K}`U10T}=Y!bX58NY11jBc-*8WBIc06*ou+{Rbf zOW}^GbNgw{jUWx+AF{cpL_Xp1c4E*}Y_9bt)yWVkig9iXu#Spz8Ij0Co9s1T>M2JT zl@_)*hr;tK)H-w(@JcPxzJQ<(n`R~Yf;;Dn170UnpBZ>WG4ra&KmI^ zC3*O}PjNZ#?5~t=W$*4ZIx+Q6G;RENY7=9l=DUo0JO|M+RREvDa>ZQi$$uGG@z)az z@MLup(RAZpS*WMeJJjG7_UBhpi+yu!w4=2lJ#bb-ea%CR*W1RG?kACb%SH|Ua667M z0JT91GThnSde_VWf=hnNyUz$mU_@%WMzLH&jHq=(C^4B@(( zeJunWZ$I{BEPp*&c@AB3=Sq4yp_9RFQ$eU*QB_TB0R|7vYUH)>3V8wwb)^QaCwV5f zQ`=U-1%R@P{Vp4<$2_^i24t$nY7~?Udl6)hH?#)nAIGGobPuaL@e}p(2a?;`FYe;= z&_%5gL~%4xS;RDPyQad{VwlL=7#3HkU`u6X519uBcafb-7G@Hv(SCKvoH`P-A_kZ=DjkD}GF6ew79{ zl1367<0yP3K0U7se5lSnZxzKekGZKDpjE@B@X;hjz$`e2!@i?Sj-MQd2xk=5q~BMz zfm*r`2cuFZoy?OK->kRG6lP3?0$o!s1yuF;-B4IPvZg*DOyizvgp=i1Q@M)KAKntQ znm9FOewc*>^bFZIc_A7H7g$6sydPEb!?6$F+3Hn3)uKOWAi-x}Gi3Md0@I63hadfd zybjdl3FvndiXg{|^xts=dAYlS1cGn!&F}Yxpv@(bj>pWhpT&^(!jd-v4$^13*L4~j z)D-CN_ua*qp}^reOS{$^gKzc~4FQIyB?>xpM+^#4v}piO#Die50EXY2ttWs%EY_+6 zXW@gRFt^P+#QEMz$CgXizok4E9E@vG0U9d5r4h|2w(B@kUJb6Rr zi~~e6b4})m1MzqmEqPOB-hsg5G)4`Ag5?B8E`PTI{uq~hBGv3t9uD}=%(xsCR47*4 zZ-NiDSTD26?x#{Ru=se+@X@Des9P+(MfyZ_x#brOB8v@ER=K&Hw*ph)=d2w+KLLxf*R7V8zq4><%aA9u& zHMWEp)%`iqN&i^ayf{`BXT6(w-^+25fL$a=6;SMD-_I4F^vHqw6vPO+PmW%PQ3GI+ zg;Y-YHkqcinO)#BjmHPgUl4!J;)|I$S>5kD{R;fA&Vult&qB${+{pO94&m?muh?a& zUO23AA$j|E1&Dp3u7XkIIdhrYW}HaRF_8WO4y36ee<>${>+n{KhYx;Y+JIwT(pckN z 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 literal 0 HcmV?d00001 diff --git a/test/fixtures/magic/application/vnd.openxmlformats-officedocument.wordprocessingml.document/converted_from_google_doc.docx b/test/fixtures/magic/application/vnd.openxmlformats-officedocument.wordprocessingml.document/converted_from_google_doc.docx new file mode 100644 index 0000000000000000000000000000000000000000..b829fc86641078173fd00e5d7c5002bb036499b4 GIT binary patch literal 6081 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 VEbtn*fa?}v0z|L36=uH*{}1vij9vf$ literal 0 HcmV?d00001 From 4379fe303d86e667b60924ba5d890ddc3610ceda Mon Sep 17 00:00:00 2001 From: Koji Onishi Date: Tue, 30 Mar 2021 03:16:51 +0900 Subject: [PATCH 4/4] seek wider areas for [Content_Types].xml to magicmatch office documents --- data/custom.xml | 6 +++--- lib/marcel/tables.rb | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/data/custom.xml b/data/custom.xml index dcca413..64264d1 100644 --- a/data/custom.xml +++ b/data/custom.xml @@ -23,7 +23,7 @@ - + @@ -39,7 +39,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/lib/marcel/tables.rb b/lib/marcel/tables.rb index a3d89ac..0b6270f 100644 --- a/lib/marcel/tables.rb +++ b/lib/marcel/tables.rb @@ -2160,11 +2160,11 @@ module Marcel ['audio/mpeg', [[0, "\377\362"], [0, "\377\363"], [0, "\377\364"], [0, "\377\365"], [0, "\377\366"], [0, "\377\367"], [0, "\377\372"], [0, "\377\373"], [0, "\377\374"], [0, "\377\375"], [0, "\377\377"], [0, 'ID3']]], ['application/pdf', [[0, '%PDF-'], [0, "\357\273\277%PDF-"]]], ['application/msword', [[0..8, "\320\317\021\340\241\261\032\341", [[546, 'jbjb'], [546, 'bjbj']]]]], - ['application/vnd.openxmlformats-officedocument.wordprocessingml.document', [[0, "PK\003\004", [[30, '[Content_Types].xml', [[0..4096, 'word/']]], [30, '_rels/.rels', [[0..4096, 'word/']]]]]]], + ['application/vnd.openxmlformats-officedocument.wordprocessingml.document', [[0, "PK\003\004", [[30..65536, '[Content_Types].xml', [[0..4096, 'word/']]], [30, '_rels/.rels', [[0..4096, 'word/']]]]]]], ['application/vnd.ms-powerpoint', [[0..8, "\320\317\021\340\241\261\032\341", [[1152..4096, "P\000o\000w\000e\000r\000P\000o\000i\000n\000t\000 D\000o\000c\000u\000m\000e\000n\000t"]]]]], - ['application/vnd.openxmlformats-officedocument.presentationml.presentation', [[0, "PK\003\004", [[30, '[Content_Types].xml', [[0..4096, 'ppt/']]], [30, '_rels/.rels', [[0..4096, 'ppt/']]]]]]], + ['application/vnd.openxmlformats-officedocument.presentationml.presentation', [[0, "PK\003\004", [[30..65536, '[Content_Types].xml', [[0..4096, 'ppt/']]], [30, '_rels/.rels', [[0..4096, 'ppt/']]]]]]], ['application/vnd.ms-excel', [[2080, 'Microsoft Excel 5.0 Worksheet'], [2080, 'Foglio di lavoro Microsoft Exce'], [2114, 'Biff5'], [2121, 'Biff5'], [0..8, "\320\317\021\340\241\261\032\341", [[1152..4096, "W\000o\000r\000k\000b\000o\000o\000k"]]]]], - ['application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', [[0, "PK\003\004", [[30..4096, '[Content_Types].xml', [[0..4096, 'xl/']]], [30, '_rels/.rels', [[0..4096, 'xl/']]]]]]], + ['application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', [[0, "PK\003\004", [[30..65536, '[Content_Types].xml', [[0..4096, 'xl/']]], [30, '_rels/.rels', [[0..4096, 'xl/']]]]]]], ['application/x-dbf', [[0, "(?s)^[\\\\002\\\\003\\\\060\\\\061\\\\062\\\\103\\\\143\\\\203\\\\213\\\\313\\\\365\\\\345\\\\373].[\\\\001-\\\\014][\\\\001-\\\\037].{4}(?:.[^\\\\000]|[\\\\101-\\\\377].)(?:[^\\\\000\\\\001].|.[^\\\\000]).{31}(?<=[\\\\000][^\\\\000]{0,10})[A-Z@+]"]]], ['image/x-tga', [[1, "\001\001\000\000", [[8, ".*[\\\\124\\\\122\\\\125\\\\105\\\\126\\\\111\\\\123\\\\111\\\\117\\\\116\\\\055\\\\130\\\\106\\\\111\\\\114\\\\105\\\\056\\\\000]"]]], [1, "\000\002\000\000", [[8, ".*[\\\\124\\\\122\\\\125\\\\105\\\\126\\\\111\\\\123\\\\111\\\\117\\\\116\\\\055\\\\130\\\\106\\\\111\\\\114\\\\105\\\\056\\\\000]"]]], [1, "\000\003\000\000", [[8, ".*[\\\\124\\\\122\\\\125\\\\105\\\\126\\\\111\\\\123\\\\111\\\\117\\\\116\\\\055\\\\130\\\\106\\\\111\\\\114\\\\105\\\\056\\\\000]"]]]]], ['application/x-endnote-refer', [[0..50, '%A ', [[0..1000, "\n%D ", [[0..1000, "\n%T "]]]]]]],