PNG  IHDRX cHRMz&u0`:pQ<bKGD pHYsodtIME MeqIDATxw]Wug^Qd˶ 6`!N:!@xI~)%7%@Bh&`lnjVF29gΨ4E$|>cɚ{gk= %,a KX%,a KX%,a KX%,a KX%,a KX%,a KX%, b` ǟzeאfp]<!SJmɤY޲ڿ,%c ~ع9VH.!Ͳz&QynֺTkRR.BLHi٪:l;@(!MԴ=žI,:o&N'Kù\vRmJ雵֫AWic H@" !: Cé||]k-Ha oݜ:y F())u]aG7*JV@J415p=sZH!=!DRʯvɱh~V\}v/GKY$n]"X"}t@ xS76^[bw4dsce)2dU0 CkMa-U5tvLƀ~mlMwfGE/-]7XAƟ`׮g ewxwC4\[~7@O-Q( a*XGƒ{ ՟}$_y3tĐƤatgvێi|K=uVyrŲlLӪuܿzwk$m87k( `múcE)"@rK( z4$D; 2kW=Xb$V[Ru819קR~qloѱDyįݎ*mxw]y5e4K@ЃI0A D@"BDk_)N\8͜9dz"fK0zɿvM /.:2O{ Nb=M=7>??Zuo32 DLD@D| &+֎C #B8ַ`bOb $D#ͮҪtx]%`ES`Ru[=¾!@Od37LJ0!OIR4m]GZRJu$‡c=%~s@6SKy?CeIh:[vR@Lh | (BhAMy=݃  G"'wzn޺~8ԽSh ~T*A:xR[ܹ?X[uKL_=fDȊ؂p0}7=D$Ekq!/t.*2ʼnDbŞ}DijYaȲ(""6HA;:LzxQ‘(SQQ}*PL*fc\s `/d'QXW, e`#kPGZuŞuO{{wm[&NBTiiI0bukcA9<4@SӊH*؎4U/'2U5.(9JuDfrޱtycU%j(:RUbArLֺN)udA':uGQN"-"Is.*+k@ `Ojs@yU/ H:l;@yyTn}_yw!VkRJ4P)~y#)r,D =ě"Q]ci'%HI4ZL0"MJy 8A{ aN<8D"1#IJi >XjX֔#@>-{vN!8tRݻ^)N_╗FJEk]CT՟ YP:_|H1@ CBk]yKYp|og?*dGvzنzӴzjֺNkC~AbZƷ`.H)=!QͷVTT(| u78y֮}|[8-Vjp%2JPk[}ԉaH8Wpqhwr:vWª<}l77_~{s۴V+RCģ%WRZ\AqHifɤL36: #F:p]Bq/z{0CU6ݳEv_^k7'>sq*+kH%a`0ԣisqにtү04gVgW΂iJiS'3w.w}l6MC2uԯ|>JF5`fV5m`Y**Db1FKNttu]4ccsQNnex/87+}xaUW9y>ͯ骵G{䩓Գ3+vU}~jJ.NFRD7<aJDB1#ҳgSb,+CS?/ VG J?|?,2#M9}B)MiE+G`-wo߫V`fio(}S^4e~V4bHOYb"b#E)dda:'?}׮4繏`{7Z"uny-?ǹ;0MKx{:_pÚmFמ:F " .LFQLG)Q8qN q¯¯3wOvxDb\. BKD9_NN &L:4D{mm o^tֽ:q!ƥ}K+<"m78N< ywsard5+вz~mnG)=}lYݧNj'QJS{S :UYS-952?&O-:W}(!6Mk4+>A>j+i|<<|;ر^߉=HE|V#F)Emm#}/"y GII웻Jі94+v뾧xu~5C95~ūH>c@덉pʃ1/4-A2G%7>m;–Y,cyyaln" ?ƻ!ʪ<{~h~i y.zZB̃/,雋SiC/JFMmBH&&FAbϓO^tubbb_hZ{_QZ-sύodFgO(6]TJA˯#`۶ɟ( %$&+V'~hiYy>922 Wp74Zkq+Ovn錄c>8~GqܲcWꂎz@"1A.}T)uiW4="jJ2W7mU/N0gcqܗOO}?9/wìXžΏ0 >֩(V^Rh32!Hj5`;O28؇2#ݕf3 ?sJd8NJ@7O0 b־?lldщ̡&|9C.8RTWwxWy46ah嘦mh٤&l zCy!PY?: CJyв]dm4ǜҐR޻RլhX{FƯanшQI@x' ao(kUUuxW_Ñ줮[w8 FRJ(8˼)_mQ _!RJhm=!cVmm ?sFOnll6Qk}alY}; "baӌ~M0w,Ggw2W:G/k2%R,_=u`WU R.9T"v,<\Ik޽/2110Ӿxc0gyC&Ny޽JҢrV6N ``یeA16"J³+Rj*;BϜkZPJaÍ<Jyw:NP8/D$ 011z֊Ⱳ3ι֘k1V_"h!JPIΣ'ɜ* aEAd:ݺ>y<}Lp&PlRfTb1]o .2EW\ͮ]38؋rTJsǏP@芎sF\> P^+dYJLbJ C-xϐn> ι$nj,;Ǖa FU *择|h ~izť3ᤓ`K'-f tL7JK+vf2)V'-sFuB4i+m+@My=O҈0"|Yxoj,3]:cо3 $#uŘ%Y"y죯LebqtҢVzq¼X)~>4L׶m~[1_k?kxֺQ`\ |ٛY4Ѯr!)N9{56(iNq}O()Em]=F&u?$HypWUeB\k]JɩSع9 Zqg4ZĊo oMcjZBU]B\TUd34ݝ~:7ڶSUsB0Z3srx 7`:5xcx !qZA!;%͚7&P H<WL!džOb5kF)xor^aujƍ7 Ǡ8/p^(L>ὴ-B,{ۇWzֺ^k]3\EE@7>lYBȝR.oHnXO/}sB|.i@ɥDB4tcm,@ӣgdtJ!lH$_vN166L__'Z)y&kH;:,Y7=J 9cG) V\hjiE;gya~%ks_nC~Er er)muuMg2;֫R)Md) ,¶ 2-wr#F7<-BBn~_(o=KO㭇[Xv eN_SMgSҐ BS헃D%g_N:/pe -wkG*9yYSZS.9cREL !k}<4_Xs#FmҶ:7R$i,fi!~' # !6/S6y@kZkZcX)%5V4P]VGYq%H1!;e1MV<!ϐHO021Dp= HMs~~a)ަu7G^];git!Frl]H/L$=AeUvZE4P\.,xi {-~p?2b#amXAHq)MWǾI_r`S Hz&|{ +ʖ_= (YS(_g0a03M`I&'9vl?MM+m~}*xT۲(fY*V4x@29s{DaY"toGNTO+xCAO~4Ϳ;p`Ѫ:>Ҵ7K 3}+0 387x\)a"/E>qpWB=1 ¨"MP(\xp߫́A3+J] n[ʼnӼaTbZUWb={~2ooKױӰp(CS\S筐R*JغV&&"FA}J>G֐p1ٸbk7 ŘH$JoN <8s^yk_[;gy-;߉DV{c B yce% aJhDȶ 2IdйIB/^n0tNtџdcKj4϶v~- CBcgqx9= PJ) dMsjpYB] GD4RDWX +h{y`,3ꊕ$`zj*N^TP4L:Iz9~6s) Ga:?y*J~?OrMwP\](21sZUD ?ܟQ5Q%ggW6QdO+\@ ̪X'GxN @'4=ˋ+*VwN ne_|(/BDfj5(Dq<*tNt1х!MV.C0 32b#?n0pzj#!38}޴o1KovCJ`8ŗ_"]] rDUy޲@ Ȗ-;xџ'^Y`zEd?0„ DAL18IS]VGq\4o !swV7ˣι%4FѮ~}6)OgS[~Q vcYbL!wG3 7띸*E Pql8=jT\꘿I(z<[6OrR8ºC~ډ]=rNl[g|v TMTղb-o}OrP^Q]<98S¤!k)G(Vkwyqyr޽Nv`N/e p/~NAOk \I:G6]4+K;j$R:Mi #*[AȚT,ʰ,;N{HZTGMoּy) ]%dHء9Պ䠬|<45,\=[bƟ8QXeB3- &dҩ^{>/86bXmZ]]yޚN[(WAHL$YAgDKp=5GHjU&99v簪C0vygln*P)9^͞}lMuiH!̍#DoRBn9l@ xA/_v=ȺT{7Yt2N"4!YN`ae >Q<XMydEB`VU}u]嫇.%e^ánE87Mu\t`cP=AD/G)sI"@MP;)]%fH9'FNsj1pVhY&9=0pfuJ&gޤx+k:!r˭wkl03׼Ku C &ѓYt{.O.zҏ z}/tf_wEp2gvX)GN#I ݭ߽v/ .& и(ZF{e"=V!{zW`, ]+LGz"(UJp|j( #V4, 8B 0 9OkRrlɱl94)'VH9=9W|>PS['G(*I1==C<5"Pg+x'K5EMd؞Af8lG ?D FtoB[je?{k3zQ vZ;%Ɠ,]E>KZ+T/ EJxOZ1i #T<@ I}q9/t'zi(EMqw`mYkU6;[t4DPeckeM;H}_g pMww}k6#H㶏+b8雡Sxp)&C $@'b,fPߑt$RbJ'vznuS ~8='72_`{q纶|Q)Xk}cPz9p7O:'|G~8wx(a 0QCko|0ASD>Ip=4Q, d|F8RcU"/KM opKle M3#i0c%<7׿p&pZq[TR"BpqauIp$ 8~Ĩ!8Սx\ւdT>>Z40ks7 z2IQ}ItԀ<-%S⍤};zIb$I 5K}Q͙D8UguWE$Jh )cu4N tZl+[]M4k8֦Zeq֮M7uIqG 1==tLtR,ƜSrHYt&QP윯Lg' I,3@P'}'R˪e/%-Auv·ñ\> vDJzlӾNv5:|K/Jb6KI9)Zh*ZAi`?S {aiVDԲuy5W7pWeQJk֤#5&V<̺@/GH?^τZL|IJNvI:'P=Ϛt"¨=cud S Q.Ki0 !cJy;LJR;G{BJy޺[^8fK6)=yʊ+(k|&xQ2`L?Ȓ2@Mf 0C`6-%pKpm')c$׻K5[J*U[/#hH!6acB JA _|uMvDyk y)6OPYjœ50VT K}cǻP[ $:]4MEA.y)|B)cf-A?(e|lɉ#P9V)[9t.EiQPDѠ3ϴ;E:+Օ t ȥ~|_N2,ZJLt4! %ա]u {+=p.GhNcŞQI?Nd'yeh n7zi1DB)1S | S#ًZs2|Ɛy$F SxeX{7Vl.Src3E℃Q>b6G ўYCmtկ~=K0f(=LrAS GN'ɹ9<\!a`)֕y[uՍ[09` 9 +57ts6}b4{oqd+J5fa/,97J#6yν99mRWxJyѡyu_TJc`~W>l^q#Ts#2"nD1%fS)FU w{ܯ R{ ˎ󅃏џDsZSQS;LV;7 Od1&1n$ N /.q3~eNɪ]E#oM~}v֯FڦwyZ=<<>Xo稯lfMFV6p02|*=tV!c~]fa5Y^Q_WN|Vs 0ҘދU97OI'N2'8N֭fgg-}V%y]U4 峧p*91#9U kCac_AFңĪy뚇Y_AiuYyTTYЗ-(!JFLt›17uTozc. S;7A&&<ԋ5y;Ro+:' *eYJkWR[@F %SHWP 72k4 qLd'J "zB6{AC0ƁA6U.'F3:Ȅ(9ΜL;D]m8ڥ9}dU "v!;*13Rg^fJyShyy5auA?ɩGHRjo^]׽S)Fm\toy 4WQS@mE#%5ʈfFYDX ~D5Ϡ9tE9So_aU4?Ѽm%&c{n>.KW1Tlb}:j uGi(JgcYj0qn+>) %\!4{LaJso d||u//P_y7iRJ߬nHOy) l+@$($VFIQ9%EeKʈU. ia&FY̒mZ=)+qqoQn >L!qCiDB;Y<%} OgBxB!ØuG)WG9y(Ą{_yesuZmZZey'Wg#C~1Cev@0D $a@˲(.._GimA:uyw֬%;@!JkQVM_Ow:P.s\)ot- ˹"`B,e CRtaEUP<0'}r3[>?G8xU~Nqu;Wm8\RIkբ^5@k+5(By'L&'gBJ3ݶ!/㮻w҅ yqPWUg<e"Qy*167΃sJ\oz]T*UQ<\FԎ`HaNmڜ6DysCask8wP8y9``GJ9lF\G g's Nn͵MLN֪u$| /|7=]O)6s !ĴAKh]q_ap $HH'\1jB^s\|- W1:=6lJBqjY^LsPk""`]w)󭃈,(HC ?䔨Y$Sʣ{4Z+0NvQkhol6C.婧/u]FwiVjZka&%6\F*Ny#8O,22+|Db~d ~Çwc N:FuuCe&oZ(l;@ee-+Wn`44AMK➝2BRՈt7g*1gph9N) *"TF*R(#'88pm=}X]u[i7bEc|\~EMn}P瘊J)K.0i1M6=7'_\kaZ(Th{K*GJyytw"IO-PWJk)..axӝ47"89Cc7ĐBiZx 7m!fy|ϿF9CbȩV 9V-՛^pV̌ɄS#Bv4-@]Vxt-Z, &ֺ*diؠ2^VXbs֔Ìl.jQ]Y[47gj=幽ex)A0ip׳ W2[ᎇhuE^~q흙L} #-b۸oFJ_QP3r6jr+"nfzRJTUqoaۍ /$d8Mx'ݓ= OՃ| )$2mcM*cЙj}f };n YG w0Ia!1Q.oYfr]DyISaP}"dIӗթO67jqR ҊƐƈaɤGG|h;t]䗖oSv|iZqX)oalv;۩meEJ\!8=$4QU4Xo&VEĊ YS^E#d,yX_> ۘ-e\ "Wa6uLĜZi`aD9.% w~mB(02G[6y.773a7 /=o7D)$Z 66 $bY^\CuP. (x'"J60׿Y:Oi;F{w佩b+\Yi`TDWa~|VH)8q/=9!g߆2Y)?ND)%?Ǐ`k/sn:;O299yB=a[Ng 3˲N}vLNy;*?x?~L&=xyӴ~}q{qE*IQ^^ͧvü{Huu=R|>JyUlZV, B~/YF!Y\u_ݼF{_C)LD]m {H 0ihhadd nUkf3oٺCvE\)QJi+֥@tDJkB$1!Đr0XQ|q?d2) Ӣ_}qv-< FŊ߫%roppVBwü~JidY4:}L6M7f٬F "?71<2#?Jyy4뷢<_a7_=Q E=S1И/9{+93֮E{ǂw{))?maÆm(uLE#lïZ  ~d];+]h j?!|$F}*"4(v'8s<ŏUkm7^7no1w2ؗ}TrͿEk>p'8OB7d7R(A 9.*Mi^ͳ; eeUwS+C)uO@ =Sy]` }l8^ZzRXj[^iUɺ$tj))<sbDJfg=Pk_{xaKo1:-uyG0M ԃ\0Lvuy'ȱc2Ji AdyVgVh!{]/&}}ċJ#%d !+87<;qN޼Nفl|1N:8ya  8}k¾+-$4FiZYÔXk*I&'@iI99)HSh4+2G:tGhS^繿 Kتm0 вDk}֚+QT4;sC}rՅE,8CX-e~>G&'9xpW,%Fh,Ry56Y–hW-(v_,? ; qrBk4-V7HQ;ˇ^Gv1JVV%,ik;D_W!))+BoS4QsTM;gt+ndS-~:11Sgv!0qRVh!"Ȋ(̦Yl.]PQWgٳE'`%W1{ndΗBk|Ž7ʒR~,lnoa&:ü$ 3<a[CBݮwt"o\ePJ=Hz"_c^Z.#ˆ*x z̝grY]tdkP*:97YľXyBkD4N.C_[;F9`8& !AMO c `@BA& Ost\-\NX+Xp < !bj3C&QL+*&kAQ=04}cC!9~820G'PC9xa!w&bo_1 Sw"ܱ V )Yl3+ס2KoXOx]"`^WOy :3GO0g;%Yv㐫(R/r (s } u B &FeYZh0y> =2<Ϟc/ -u= c&׭,.0"g"7 6T!vl#sc>{u/Oh Bᾈ)۴74]x7 gMӒ"d]U)}" v4co[ ɡs 5Gg=XR14?5A}D "b{0$L .\4y{_fe:kVS\\O]c^W52LSBDM! C3Dhr̦RtArx4&agaN3Cf<Ԉp4~ B'"1@.b_/xQ} _߃҉/gٓ2Qkqp0շpZ2fԫYz< 4L.Cyυι1t@鎫Fe sYfsF}^ V}N<_`p)alٶ "(XEAVZ<)2},:Ir*#m_YӼ R%a||EƼIJ,,+f"96r/}0jE/)s)cjW#w'Sʯ5<66lj$a~3Kʛy 2:cZ:Yh))+a߭K::N,Q F'qB]={.]h85C9cr=}*rk?vwV렵ٸW Rs%}rNAkDv|uFLBkWY YkX מ|)1!$#3%y?pF<@<Rr0}: }\J [5FRxY<9"SQdE(Q*Qʻ)q1E0B_O24[U'],lOb ]~WjHޏTQ5Syu wq)xnw8~)c 쫬gٲߠ H% k5dƝk> kEj,0% b"vi2Wس_CuK)K{n|>t{P1򨾜j>'kEkƗBg*H%'_aY6Bn!TL&ɌOb{c`'d^{t\i^[uɐ[}q0lM˕G:‚4kb祔c^:?bpg… +37stH:0}en6x˟%/<]BL&* 5&fK9Mq)/iyqtA%kUe[ڛKN]Ě^,"`/ s[EQQm?|XJ߅92m]G.E΃ח U*Cn.j_)Tѧj̿30ڇ!A0=͜ar I3$C^-9#|pk!)?7.x9 @OO;WƝZBFU keZ75F6Tc6"ZȚs2y/1 ʵ:u4xa`C>6Rb/Yм)^=+~uRd`/|_8xbB0?Ft||Z\##|K 0>>zxv8۴吅q 8ĥ)"6>~\8:qM}#͚'ĉ#p\׶ l#bA?)|g g9|8jP(cr,BwV (WliVxxᡁ@0Okn;ɥh$_ckCgriv}>=wGzβ KkBɛ[˪ !J)h&k2%07δt}!d<9;I&0wV/ v 0<H}L&8ob%Hi|޶o&h1L|u֦y~󛱢8fٲUsւ)0oiFx2}X[zVYr_;N(w]_4B@OanC?gĦx>мgx>ΛToZoOMp>40>V Oy V9iq!4 LN,ˢu{jsz]|"R޻&'ƚ{53ўFu(<٪9:΋]B;)B>1::8;~)Yt|0(pw2N%&X,URBK)3\zz&}ax4;ǟ(tLNg{N|Ǽ\G#C9g$^\}p?556]/RP.90 k,U8/u776s ʪ_01چ|\N 0VV*3H鴃J7iI!wG_^ypl}r*jɤSR 5QN@ iZ#1ٰy;_\3\BQQ x:WJv츟ٯ$"@6 S#qe딇(/P( Dy~TOϻ<4:-+F`0||;Xl-"uw$Цi󼕝mKʩorz"mϺ$F:~E'ҐvD\y?Rr8_He@ e~O,T.(ފR*cY^m|cVR[8 JҡSm!ΆԨb)RHG{?MpqrmN>߶Y)\p,d#xۆWY*,l6]v0h15M˙MS8+EdI='LBJIH7_9{Caз*Lq,dt >+~ّeʏ?xԕ4bBAŚjﵫ!'\Ը$WNvKO}ӽmSşذqsOy?\[,d@'73'j%kOe`1.g2"e =YIzS2|zŐƄa\U,dP;jhhhaxǶ?КZ՚.q SE+XrbOu%\GتX(H,N^~]JyEZQKceTQ]VGYqnah;y$cQahT&QPZ*iZ8UQQM.qo/T\7X"u?Mttl2Xq(IoW{R^ ux*SYJ! 4S.Jy~ BROS[V|žKNɛP(L6V^|cR7i7nZW1Fd@ Ara{詑|(T*dN]Ko?s=@ |_EvF]׍kR)eBJc" MUUbY6`~V޴dJKß&~'d3i WWWWWW
Current Directory: /usr/share/doc/lua-socket
Viewing File: /usr/share/doc/lua-socket/mime.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <meta name="description" content="LuaSocket: MIME support"> <meta name="keywords" content="Lua, LuaSocket, MIME, Library, Support"> <title>LuaSocket: MIME module</title> <link rel="stylesheet" href="reference.css" type="text/css"> </head> <body> <!-- header +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ --> <div class=header> <hr> <center> <table summary="LuaSocket logo"> <tr><td align=center><a href="http://www.lua.org"> <img width=128 height=128 border=0 alt="LuaSocket" src="luasocket.png"> </a></td></tr> <tr><td align=center valign=top>Network support for the Lua language </td></tr> </table> <p class=bar> <a href="index.html">home</a> &middot; <a href="index.html#download">download</a> &middot; <a href="installation.html">installation</a> &middot; <a href="introduction.html">introduction</a> &middot; <a href="reference.html">reference</a> </p> </center> <hr> </div> <!-- mime +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ --> <h2 id=mime>MIME</h2> <p> The <tt>mime</tt> namespace offers filters that apply and remove common content transfer encodings, such as Base64 and Quoted-Printable. It also provides functions to break text into lines and change the end-of-line convention. MIME is described mainly in <a href="http://www.ietf.org/rfc/rfc2045.txt">RFC 2045</a>, <a href="http://www.ietf.org/rfc/rfc2046.txt">2046</a>, <a href="http://www.ietf.org/rfc/rfc2047.txt">2047</a>, <a href="http://www.ietf.org/rfc/rfc2047.txt">2048</a>, and <a href="http://www.ietf.org/rfc/rfc2048.txt">2049</a>. </p> <p> All functionality provided by the MIME module follows the ideas presented in <a href="http://lua-users.org/wiki/FiltersSourcesAndSinks"> LTN012, Filters sources and sinks</a>. </p> <p> To obtain the <tt>mime</tt> namespace, run: </p> <pre class=example> -- loads the MIME module and everything it requires local mime = require("mime") </pre> <!-- High-level +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ --> <h3 id=high>High-level filters</h3> <!-- normalize ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ --> <p class=name id="normalize"> mime.<b>normalize(</b>[marker]<b>)</b> </p> <p class=description> Converts most common end-of-line markers to a specific given marker. </p> <p class=parameters> <tt>Marker</tt> is the new marker. It defaults to CRLF, the canonic end-of-line marker defined by the MIME standard. </p> <p class=return> The function returns a filter that performs the conversion. </p> <p class=note> Note: There is no perfect solution to this problem. Different end-of-line markers are an evil that will probably plague developers forever. This function, however, will work perfectly for text created with any of the most common end-of-line markers, i.e. the Mac OS (CR), the Unix (LF), or the DOS (CRLF) conventions. Even if the data has mixed end-of-line markers, the function will still work well, although it doesn't guarantee that the number of empty lines will be correct. </p> <!-- decode +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ --> <p class=name id="decode"> mime.<b>decode(</b>"base64"<b>)</b><br> mime.<b>decode(</b>"quoted-printable"<b>)</b> </p> <p class=description> Returns a filter that decodes data from a given transfer content encoding. </p> <!-- encode +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ --> <p class=name id="encode"> mime.<b>encode(</b>"base64"<b>)</b><br> mime.<b>encode(</b>"quoted-printable" [, mode]<b>)</b> </p> <p class=description> Returns a filter that encodes data according to a given transfer content encoding. </p> <p class=parameters> In the Quoted-Printable case, the user can specify whether the data is textual or binary, by passing the <tt>mode</tt> strings "<tt>text</tt>" or "<tt>binary</tt>". <tt>Mode</tt> defaults to "<tt>text</tt>". </p> <p class=note> Although both transfer content encodings specify a limit for the line length, the encoding filters do <em>not</em> break text into lines (for added flexibility). Below is a filter that converts binary data to the Base64 transfer content encoding and breaks it into lines of the correct size. </p> <pre class=example> base64 = ltn12.filter.chain( mime.encode("base64"), mime.wrap("base64") ) </pre> <p class=note> Note: Text data <em>has</em> to be converted to canonic form <em>before</em> being encoded. </p> <pre class=example> base64 = ltn12.filter.chain( mime.normalize(), mime.encode("base64"), mime.wrap("base64") ) </pre> <!-- stuff +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ --> <p class=name id="stuff"> mime.<b>stuff()</b><br> </p> <p class=description> Creates and returns a filter that performs stuffing of SMTP messages. </p> <p class=note> Note: The <a href=smtp.html#send><tt>smtp.send</tt></a> function uses this filter automatically. You don't need to chain it with your source, or apply it to your message body. </p> <!-- wrap +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ --> <p class=name id="wrap"> mime.<b>wrap(</b>"text" [, length]<b>)</b><br> mime.<b>wrap(</b>"base64"<b>)</b><br> mime.<b>wrap(</b>"quoted-printable"<b>)</b> </p> <p class=description> Returns a filter that breaks data into lines. </p> <p class=parameters> The "<tt>text</tt>" line-wrap filter simply breaks text into lines by inserting CRLF end-of-line markers at appropriate positions. <tt>Length</tt> defaults 76. The "<tt>base64</tt>" line-wrap filter works just like the default "<tt>text</tt>" line-wrap filter with default length. The function can also wrap "<tt>quoted-printable</tt>" lines, taking care not to break lines in the middle of an escaped character. In that case, the line length is fixed at 76. </p> <p class=note> For example, to create an encoding filter for the Quoted-Printable transfer content encoding of text data, do the following: </p> <pre class=example> qp = ltn12.filter.chain( mime.normalize(), mime.encode("quoted-printable"), mime.wrap("quoted-printable") ) </pre> <p class=note> Note: To break into lines with a different end-of-line convention, apply a normalization filter after the line break filter. </p> <!-- Low-level ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ --> <h3 id=low>Low-level filters</h3> <!-- b64 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ --> <p class=name id="b64"> A, B = mime.<b>b64(</b>C [, D]<b>)</b> </p> <p class=description> Low-level filter to perform Base64 encoding. </p> <p class=description> <tt>A</tt> is the encoded version of the largest prefix of <tt>C..D</tt> that can be encoded unambiguously. <tt>B</tt> has the remaining bytes of <tt>C..D</tt>, <em>before</em> encoding. If <tt>D</tt> is <tt><b>nil</b></tt>, <tt>A</tt> is padded with the encoding of the remaining bytes of <tt>C</tt>. </p> <p class=note> Note: The simplest use of this function is to encode a string into it's Base64 transfer content encoding. Notice the extra parenthesis around the call to <tt>mime.b64</tt>, to discard the second return value. </p> <pre class=example> print((mime.b64("diego:password"))) --&gt; ZGllZ286cGFzc3dvcmQ= </pre> <!-- dot +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ --> <p class=name id="dot"> A, n = mime.<b>dot(</b>m [, B]<b>)</b> </p> <p class=description> Low-level filter to perform SMTP stuffing and enable transmission of messages containing the sequence "CRLF.CRLF". </p> <p class=parameters> <tt>A</tt> is the stuffed version of <tt>B</tt>. '<tt>n</tt>' gives the number of characters from the sequence CRLF seen in the end of <tt>B</tt>. '<tt>m</tt>' should tell the same, but for the previous chunk. </p> <p class=note>Note: The message body is defined to begin with an implicit CRLF. Therefore, to stuff a message correctly, the first <tt>m</tt> should have the value 2. </p> <pre class=example> print((string.gsub(mime.dot(2, ".\r\nStuffing the message.\r\n.\r\n."), "\r\n", "\\n"))) --&gt; ..\nStuffing the message.\n..\n.. </pre> <p class=note> Note: The <a href=smtp.html#send><tt>smtp.send</tt></a> function uses this filter automatically. You don't need to apply it again. </p> <!-- eol ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ --> <p class=name id="eol"> A, B = mime.<b>eol(</b>C [, D, marker]<b>)</b> </p> <p class=description> Low-level filter to perform end-of-line marker translation. For each chunk, the function needs to know if the last character of the previous chunk could be part of an end-of-line marker or not. This is the context the function receives besides the chunk. An updated version of the context is returned after each new chunk. </p> <p class=parameters> <tt>A</tt> is the translated version of <tt>D</tt>. <tt>C</tt> is the ASCII value of the last character of the previous chunk, if it was a candidate for line break, or 0 otherwise. <tt>B</tt> is the same as <tt>C</tt>, but for the current chunk. <tt>Marker</tt> gives the new end-of-line marker and defaults to CRLF. </p> <pre class=example> -- translates the end-of-line marker to UNIX unix = mime.eol(0, dos, "\n") </pre> <!-- qp ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ --> <p class=name id="qp"> A, B = mime.<b>qp(</b>C [, D, marker]<b>)</b> </p> <p class=description> Low-level filter to perform Quoted-Printable encoding. </p> <p class=parameters> <tt>A</tt> is the encoded version of the largest prefix of <tt>C..D</tt> that can be encoded unambiguously. <tt>B</tt> has the remaining bytes of <tt>C..D</tt>, <em>before</em> encoding. If <tt>D</tt> is <tt><b>nil</b></tt>, <tt>A</tt> is padded with the encoding of the remaining bytes of <tt>C</tt>. Throughout encoding, occurrences of CRLF are replaced by the <tt>marker</tt>, which itself defaults to CRLF. </p> <p class=note> Note: The simplest use of this function is to encode a string into it's Quoted-Printable transfer content encoding. Notice the extra parenthesis around the call to <tt>mime.qp</tt>, to discard the second return value. </p> <pre class=example> print((mime.qp("ma��"))) --&gt; ma=E7=E3= </pre> <!-- qpwrp ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ --> <p class=name id="qpwrp"> A, m = mime.<b>qpwrp(</b>n [, B, length]<b>)</b> </p> <p class=description> Low-level filter to break Quoted-Printable text into lines. </p> <p class=parameters> <tt>A</tt> is a copy of <tt>B</tt>, broken into lines of at most <tt>length</tt> bytes (defaults to 76). '<tt>n</tt>' should tell how many bytes are left for the first line of <tt>B</tt> and '<tt>m</tt>' returns the number of bytes left in the last line of <tt>A</tt>. </p> <p class=note> Note: Besides breaking text into lines, this function makes sure the line breaks don't fall in the middle of an escaped character combination. Also, this function only breaks lines that are bigger than <tt>length</tt> bytes. </p> <!-- unb64 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ --> <p class=name id="unb64"> A, B = mime.<b>unb64(</b>C [, D]<b>)</b> </p> <p class=description> Low-level filter to perform Base64 decoding. </p> <p class=parameters> <tt>A</tt> is the decoded version of the largest prefix of <tt>C..D</tt> that can be decoded unambiguously. <tt>B</tt> has the remaining bytes of <tt>C..D</tt>, <em>before</em> decoding. If <tt>D</tt> is <tt><b>nil</b></tt>, <tt>A</tt> is the empty string and <tt>B</tt> returns whatever couldn't be decoded. </p> <p class=note> Note: The simplest use of this function is to decode a string from it's Base64 transfer content encoding. Notice the extra parenthesis around the call to <tt>mime.unqp</tt>, to discard the second return value. </p> <pre class=example> print((mime.unb64("ZGllZ286cGFzc3dvcmQ="))) --&gt; diego:password </pre> <!-- unqp +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ --> <p class=name id="unqp"> A, B = mime.<b>unqp(</b>C [, D]<b>)</b> </p> <p class=description> Low-level filter to remove the Quoted-Printable transfer content encoding from data. </p> <p class=parameters> <tt>A</tt> is the decoded version of the largest prefix of <tt>C..D</tt> that can be decoded unambiguously. <tt>B</tt> has the remaining bytes of <tt>C..D</tt>, <em>before</em> decoding. If <tt>D</tt> is <tt><b>nil</b></tt>, <tt>A</tt> is augmented with the encoding of the remaining bytes of <tt>C</tt>. </p> <p class=note> Note: The simplest use of this function is to decode a string from it's Quoted-Printable transfer content encoding. Notice the extra parenthesis around the call to <tt>mime.unqp</tt>, to discard the second return value. </p> <pre class=example> print((mime.qp("ma=E7=E3="))) --&gt; ma�� </pre> <!-- wrp ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ --> <p class=name id="wrp"> A, m = mime.<b>wrp(</b>n [, B, length]<b>)</b> </p> <p class=description> Low-level filter to break text into lines with CRLF marker. Text is assumed to be in the <a href=#normalize><tt>normalize</tt></a> form. </p> <p class=parameters> <tt>A</tt> is a copy of <tt>B</tt>, broken into lines of at most <tt>length</tt> bytes (defaults to 76). '<tt>n</tt>' should tell how many bytes are left for the first line of <tt>B</tt> and '<tt>m</tt>' returns the number of bytes left in the last line of <tt>A</tt>. </p> <p class=note> Note: This function only breaks lines that are bigger than <tt>length</tt> bytes. The resulting line length does not include the CRLF marker. </p> <!-- footer +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ --> <div class=footer> <hr> <center> <p class=bar> <a href="index.html">home</a> &middot; <a href="index.html#down">download</a> &middot; <a href="installation.html">installation</a> &middot; <a href="introduction.html">introduction</a> &middot; <a href="reference.html">reference</a> </p> <p> <small> Last modified by Diego Nehab on <br> Thu Apr 20 00:25:44 EDT 2006 </small> </p> </center> </div> </body> </html>