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/emacs/24.3/lisp
Viewing File: /usr/share/emacs/24.3/lisp/htmlfontify.elc
;ELC ;;; Compiled by mockbuild@buildfarm01-new.corp.cloudlinux.com on Tue Nov 11 12:48:19 2025 ;;; from file /builddir/build/BUILD/emacs-24.3/lisp/htmlfontify.el ;;; in Emacs version 24.3.1 ;;; with all optimizations. ;;; This file contains utf-8 non-ASCII characters, ;;; and so cannot be loaded into Emacs 22 or earlier. (and (boundp 'emacs-version) (< (aref emacs-version (1- (length emacs-version))) ?A) (string-lessp emacs-version "23") (error "`%s' was compiled for Emacs 23 or later" #$)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (byte-code "\300\301!\210\300\302!\210\300\303!\210\300\304!\207" [require faces custom font-lock cus-edit] 2) (defconst htmlfontify-version 0.21) #@57 The generator meta tag for this version of htmlfontify. (defconst hfy-meta-tags (format "<meta name=\"generator\" content=\"emacs %s; htmlfontify %0.2f\" />" emacs-version htmlfontify-version) (#$ . 701)) #@1768 Copy and convert buffers and files to HTML, adding hyperlinks between files (driven by etags) if requested. Interactive functions: `htmlfontify-buffer' `htmlfontify-run-etags' `htmlfontify-copy-and-link-dir' `htmlfontify-load-rgb-file' `htmlfontify-unload-rgb-file' In order to: fontify a file you have open: \[htmlfontify-buffer] prepare the etags map for a directory: \[htmlfontify-run-etags] copy a directory, fontifying as you go: \[htmlfontify-copy-and-link-dir] The following might be useful when running non-windowed or in batch mode: (note that they shouldn't be necessary - we have a built in map) load an X11 style rgb.txt file: \[htmlfontify-load-rgb-file] unload the current rgb.txt file: \[htmlfontify-unload-rgb-file] And here's a programmatic example: (defun rtfm-build-page-header (file style) (format "#define TEMPLATE red+black.html #define DEBUG 1 #include <build/menu-dirlist|>\n html-css-url := /css/red+black.css title := rtfm.etla.org ( %s / src/%s ) bodytag := head <=STYLESHEET;\n %s STYLESHEET main-title := rtfm / %s / src/%s\n main-content <=MAIN_CONTENT;\n" rtfm-section file style rtfm-section file)) (defun rtfm-build-page-footer (file) "\nMAIN_CONTENT\n") (defun rtfm-build-source-docs (section srcdir destdir) (interactive "s section[eg- emacs / p4-blame]:\nD source-dir: \nD output-dir: ") (require 'htmlfontify) (hfy-load-tags-cache srcdir) (let ((hfy-page-header 'rtfm-build-page-header) (hfy-page-footer 'rtfm-build-page-footer) (rtfm-section section) (hfy-index-file "index")) (htmlfontify-run-etags srcdir) (htmlfontify-copy-and-link-dir srcdir destdir ".src" ".html"))) (defconst htmlfontify-manual "Htmlfontify Manual" (#$ . 914)) (byte-code "\302\303\304\305\306\307\310\311\312\313& \210\314\315\316\317\306\303\320\321\322\323& \210\314\324\304\325\306\303\320\326\322\327& \210\314\330\331\332\306\303\320\333\322\334& \210\314\335\336\337\306\303\320\340\322\341& \210\314\342\343\344\306\303\320\345\322\346& \210\314\347\350\351\306\303\320\352\322\353& \210\314\354\304\355\306\303\320\356\322\357& \210\314\360\361\362\306\303\320\363\322\364& \210\314\365\366\367\306\303\320\370\322\371& \210\314\372\373\374\306\303\320\375\322\376& \210\314\377\201@\201A\306\303\320\201B\322\201C& \210\201D\201E\201F\304#\210\201G\304\211\203\342 @\201EN\203\333\201FN\204\333\201H\201F\201EN#\210 A\211\204\272*\201I\201E\201F\201J#\210\314\201F\201K\201L\306\303\320\201M\322\201N& \210\201D\201O\201P\304#\210\201G\304\211\203F @\201ON\203?\201PN\204?\201H\201P\201ON#\210 A\211\204*\201I\201O\201P\201Q#\210\314\201P\304\201R\306\303\320\201S\201T\201U\322\201V& \210\314\201W\304\201X\306\303\320\201Y\322\201Z& \210\314\201[\201\\\201]\306\303\320\201^\322\201_& \210\314\201`\201a\201b\306\303\320\201c\322\201d& \207" [prop --dolist-tail-- custom-declare-group htmlfontify nil "Convert buffers and files to HTML." :group applications :link (variable-link htmlfontify-manual) :prefix "hfy-" custom-declare-variable hfy-page-header 'hfy-default-header "Function called to build the header of the HTML source.\nThis is called with two arguments (the filename relative to the top\nlevel source directory being etag'd and fontified), and a string containing\nthe <style>...</style> text to embed in the document.\nIt should return a string that will be used as the header for the\nhtmlfontified version of the source file.\n\nSee also `hfy-page-footer'." :tag "page-header" :type (function) hfy-split-index "Whether or not to split the index `hfy-index-file' alphabetically.\nIf non-nil, the index is split on the first letter of each tag.\nUseful when the index would otherwise be large and take\na long time to render or be difficult to navigate." "split-index" (boolean) hfy-page-footer 'hfy-default-footer "As `hfy-page-header', but generates the output footer.\nIt takes only one argument, the filename." "page-footer" (function) hfy-extn ".html" "File extension used for output files." "extension" (string) hfy-src-doc-link-style "text-decoration: underline;" "String to add to the '<style> a' variant of an htmlfontify CSS class." "src-doc-link-style" (string) hfy-src-doc-link-unstyle " text-decoration: none;" "Regex to remove from the <style> a variant of an htmlfontify CSS class." "src-doc-link-unstyle" (string) hfy-link-extn "File extension used for href links.\nUseful where the htmlfontify output files are going to be processed\nagain, with a resulting change in file extension. If nil, then any\ncode using this should fall back to `hfy-extn'." "link-extension" (choice string (const nil)) hfy-link-style-fun 'hfy-link-style-string "Function to customize the appearance of hyperlinks.\nSet this to a function, which will be called with one argument\n(a \"{ foo: bar; ...}\" CSS style-string) - it should return a copy of\nits argument, altered so as to make any changes you want made for text which\nis a hyperlink, in addition to being in the class to which that style would\nnormally be applied." "link-style-function" (function) hfy-index-file "hfy-index" "Name (sans extension) of the tag definition index file produced during\nfontification-and-hyperlinking." "index-file" (string) hfy-instance-file "hfy-instance" "Name (sans extension) of the tag usage index file produced during\nfontification-and-hyperlinking." "instance-file" (string) hfy-html-quote-regex "\\([<\"&>]\\)" "Regex to match (with a single back-reference per match) strings in HTML\nwhich should be quoted with `hfy-html-quote' (and `hfy-html-quote-map')\nto make them safe." "html-quote-regex" (regexp) defvaralias hfy-init-kludge-hooks hfy-init-kludge-hook (saved-value saved-variable-comment) put make-obsolete-variable "23.2" '(hfy-kludge-cperl-mode) "List of functions to call when starting `htmlfontify-buffer' to do any\nkludging necessary to get highlighting modes to behave as you want, even\nwhen not running under a window system." "init-kludge-hooks" (hook) hfy-post-html-hooks hfy-post-html-hook "24.3" "List of functions to call after creating and filling the HTML buffer.\nThese functions will be called with the HTML buffer as the current buffer." "post-html-hooks" :options (set-auto-mode) (hook) hfy-default-face-def "Fallback `defface' specification for the face 'default, used when\n`hfy-display-class' has been set (the normal htmlfontify way of extracting\npotentially non-current face information doesn't necessarily work for\n'default).\n\nExample: I customize this to:\n\n((t :background \"black\" :foreground \"white\" :family \"misc-fixed\"))" "default-face-definition" (alist) hfy-etag-regex (concat ".*" "" "\\([^\n]+\\)" "" "\\([0-9]+\\)" "," "\\([0-9]+\\)$" "\\|" ".*[0-9]+,[0-9]+$") "Regex used to parse an etags entry: must have 3 subexps, corresponding,\nin order, to:\n\n 1 - The tag\n 2 - The line\n 3 - The char (point) at which the tag occurs." "etag-regex" (regexp) hfy-html-quote-map '(("\"" "&quot;") ("<" "&lt;") ("&" "&amp;") (">" "&gt;")) "Alist of char -> entity mappings used to make the text HTML-safe." "html-quote-map" (alist :key-type (string))] 13) (defconst hfy-e2x-etags-cmd "for src in `find . -type f`;\ndo\n ETAGS=%s;\n case ${src} in\n *.ad[absm]|*.[CFHMSacfhlmpsty]|*.def|*.in[cs]|*.s[as]|*.src|*.cc|\\\n *.hh|*.[chy]++|*.[ch]pp|*.[chy]xx|*.pdb|*.[ch]s|*.[Cc][Oo][Bb]|\\\n *.[eh]rl|*.f90|*.for|*.java|*.[cem]l|*.clisp|*.lisp|*.[Ll][Ss][Pp]|\\\n [Mm]akefile*|*.pas|*.[Pp][LlMm]|*.psw|*.lm|*.pc|*.prolog|*.oak|\\\n *.p[sy]|*.sch|*.scheme|*.[Ss][Cc][Mm]|*.[Ss][Mm]|*.bib|*.cl[os]|\\\n *.ltx|*.sty|*.TeX|*.tex|*.texi|*.texinfo|*.txi|*.x[bp]m|*.yy|\\\n *.[Ss][Qq][Ll])\n ${ETAGS} -o- ${src};\n ;;\n *)\n FTYPE=`file ${src}`;\n case ${FTYPE} in\n *script*text*)\n ${ETAGS} -o- ${src};\n ;;\n *text*)\n SHEBANG=`head -n1 ${src} | grep '#!' -c`;\n if [ ${SHEBANG} -eq 1 ];\n then\n ${ETAGS} -o- ${src};\n fi;\n ;;\n esac;\n ;;\n esac;\ndone;") (defconst hfy-etags-cmd-alist-default (byte-code "\301B\302B\207" [hfy-e2x-etags-cmd "emacs etags" (("exuberant ctags" . "%s -R -f -"))] 2)) (byte-code "\300\301\302\303\304\305\306\307\310\311& \210\300\312\313\314\304\305\306\315\310\316& \210\300\317\320\321\304\305\306\322\310\323& \210\300\324\325\326\304\305\306\327\310\330& \207" [custom-declare-variable hfy-etags-cmd-alist hfy-etags-cmd-alist-default "Alist of possible shell commands that will generate etags output that\n`htmlfontify' can use. '%s' will be replaced by `hfy-etags-bin'." :group htmlfontify :tag "etags-cmd-alist" :type (alist :key-type (string) :value-type (string)) hfy-etags-bin "etags" "Location of etags binary (we begin by assuming it's in your path).\n\nNote that if etags is not in your path, you will need to alter the shell\ncommands in `hfy-etags-cmd-alist'." "etags-bin" (file) hfy-shell-file-name "/bin/sh" "Shell (Bourne or compatible) to invoke for complex shell operations." "shell-file-name" (file) hfy-ignored-properties '(read-only intangible modification-hooks insert-in-front-hooks insert-behind-hooks point-entered point-left) "Properties to omit when copying a fontified buffer for HTML transformation." "ignored-properties" (repeat symbol)] 10) #@64 Return a string indicating which flavor of etags we are using. (defalias 'hfy-which-etags #[nil "\302\303P!\304\305 \"\203\306\202\304\307 \"\205\310)\207" [hfy-etags-bin v shell-command-to-string " --version" string-match "exube" "exuberant ctags" "GNU E" "emacs etags"] 3 (#$ . 10494)]) (byte-code "\304\305\306\307\310\311\312\313\314\315C \316\211\203( @\317\312\n@\nAFB A\211\204*\320)B& \210\304\321\322\323\310\311\312\324\314\325& \210\304\326\327\330\310\311\312\331\314\332& \210\304\333\316\334\314\335\310\311\312\336\337\340& \210\304\341\342\343\314\344\310\311\312\345& \207" [clist hfy-etags-cmd-alist C --dolist-tail-- custom-declare-variable hfy-etags-cmd (cdr (assoc (hfy-which-etags) hfy-etags-cmd-alist)) "The etags equivalent command to run in a source directory to generate a tags\nfile for the whole source tree from there on down. The command should emit\nthe etags output on stdout.\n\nTwo canned commands are provided - they drive Emacs's etags and\nexuberant-ctags' etags respectively." :group htmlfontify :tag "etags-command" :type (string) nil const choice hfy-istext-command "file %s | sed -e 's@^[^:]*:[ ]*@@'" "Command to run with the name of a file, to see whether it is a text file\nor not. The command should emit a string containing the word 'text' if\nthe file is a text file, and a string not containing 'text' otherwise." "istext-command" (string) hfy-find-cmd "find . -type f \\! -name \\*~ \\! -name \\*.flc \\! -path \\*/CVS/\\*" "Find command used to harvest a list of files to attempt to fontify." "find-command" (string) hfy-display-class "Display class to use to determine which display class to use when\ncalculating a face's attributes. This is useful when, for example, you\nare running Emacs on a tty or in batch mode, and want htmlfontify to have\naccess to the face spec you would use if you were connected to an X display.\n\nSome valid class specification elements are:\n\n '(class color)\n '(class grayscale)\n '(background dark)\n '(background light)\n '(type x-toolkit)\n '(type tty)\n '(type motif)\n '(type lucid)\nMultiple values for a tag may be combined, to indicate that any one or more\nof these values in the specification key constitutes a match, eg:\n\n'((class color grayscale) (type tty)) would match any of:\n\n '((class color))\n '((class grayscale))\n '((class color grayscale))\n '((class color foo))\n '((type tty))\n '((type tty) (class color))\n\nand so on." (alist :key-type (symbol) :value-type (symbol)) "display-class" :options ((type (choice (const :tag "X11" x-toolkit) (const :tag "Terminal" tty) (const :tag "Lucid Toolkit" lucid) (const :tag "Motif Toolkit" motif))) (class (choice (const :tag "Color" color) (const :tag "Grayscale" grayscale))) (background (choice (const :tag "Dark" dark) (const :tag "Bright" light)))) hfy-optimisations (list 'keep-overlays) "Optimizations to turn on: So far, the following have been implemented:\n\n merge-adjacent-tags: If two (or more) span tags are adjacent, identical and\n separated by nothing more than whitespace, they will\n be merged into one span.\n zap-comment-links : Suppress hyperlinking of tags found in comments.\n zap-string-links : Suppress hyperlinking of tags found in strings.\n div-wrapper : Add <div class=\"default\"> </div> tags around the\n output.\n keep-overlays : More of a bell (or possibly whistle) than an\n optimization - If on, preserve overlay highlighting\n (cf ediff or goo-font-lock) as well as basic faces.\n\n body-text-only : Emit only body-text. In concrete terms,\n 1. Suppress calls to `hfy-page-header'and\n `hfy-page-footer'\n 2. Pretend that `div-wrapper' option above is\n turned off\n 3. Don't enclose output in <pre> </pre> tags\n And the following are planned but not yet available:\n\n kill-context-leak : Suppress hyperlinking between files highlighted by\n different modes.\n\nNote: like compiler optimizations, these optimize the _output_ of the code,\nnot the processing of the source itself, and are therefore likely to slow\nhtmlfontify down, at least a little. Except for skip-refontification,\nwhich can never slow you down, but may result in incomplete fontification." (set (const :tag "merge-adjacent-tags" merge-adjacent-tags) (const :tag "zap-comment-links" zap-comment-links) (const :tag "zap-string-links" zap-string-links) (const :tag "skip-refontification" skip-refontification) (const :tag "kill-context-leak" kill-context-leak) (const :tag "div-wrapper" div-wrapper) (const :tag "keep-overlays" keep-overlays) (const :tag "body-text-only" body-text-only)) "optimizations"] 14) #@294 Alist of the form: (("/src/dir/0" . tag-hash0) ("/src/dir/1" tag-hash1) ...) Each tag hash entry then contains entries of the form: "tag_string" => (("file/name.ext" line char) ... ) ie an alist mapping (relative) file paths to line and character offsets. See also `hfy-load-tags-cache'. (defvar hfy-tags-cache nil (#$ . 15422)) #@149 Alist of the form (("/src/dir" . (tag0 tag1 tag2)) ... ) where the tags are stored in descending order of length. See also `hfy-load-tags-cache'. (defvar hfy-tags-sortl nil (#$ . 15763)) #@262 Alist of the form (("/src/dir" . tag-rmap-hash)) where tag-rmap-hash has entries of the form: "tag_string" => ( "file/name.ext" line char ) Unlike `hfy-tags-cache' these are the locations of occurrences of tagged items, not the locations of their definitions. (defvar hfy-tags-rmap nil (#$ . 15959)) #@862 An assoc representing/describing an Emacs face. Properties may be repeated, in which case later properties should be treated as if they were inherited from a 'parent' font. (For some properties, only the first encountered value is of any importance, for others the values might be cumulative, and for others they might be cumulative in a complex way.) Some examples: (hfy-face-to-style 'default) => (("background" . "rgb(0, 0, 0)") ("color" . "rgb(255, 255, 255)") ("font-style" . "normal") ("font-weight" . "500") ("font-stretch" . "normal") ("font-family" . "misc-fixed") ("font-size" . "13pt") ("text-decoration" . "none")) (hfy-face-to-style 'Info-title-3-face) => (("font-weight" . "700") ("font-family" . "helv") ("font-size" . "120%") ("text-decoration" . "none"))  (defvar hfy-style-assoc 'please-ignore-this-line (#$ . 16267)) #@216 An assoc with elements of the form (face-name style-name . style-string): '((default "default" . "{background: black; color: white}") (font-lock-string-face "string" . "{color: rgb(64,224,208)}")) (defvar hfy-sheet-assoc 'please-ignore-this-line (#$ . 17198)) #@1090 An assoc of (point . FACE-SYMBOL) or (point . DEFFACE-LIST) and (point . 'end) elements, in descending order of point value (ie from the file's end to its beginning). The map is in reverse order because inserting a <style> tag (or any other string) at `point' invalidates the map for all entries with a greater value of point. By traversing the map from greatest to least point, we still invalidate the map as we go, but only those points we have already dealt with (and therefore no longer care about) will be invalid at any time. '((64820 . end) (64744 . font-lock-comment-face) (64736 . end) (64722 . font-lock-string-face) (64630 . end) (64623 . font-lock-string-face) (64449 . end) (64446 . font-lock-keyword-face) (64406 . end) (64395 . font-lock-constant-face) (64393 . end) (64386 . font-lock-keyword-face) (64379 . end) ;; big similar section elided. You get the idea. (4285 . font-lock-constant-face) (4285 . end) (4221 . font-lock-comment-face) (4221 . end) (4197 . font-lock-constant-face) (4197 . end) (1 . font-lock-comment-face)) (defvar hfy-facemap-assoc 'please-ignore-this-line (#$ . 17484)) #@52 An alist of derived fonts resulting from overlays. (defvar hfy-tmpfont-stack nil (#$ . 18644)) (defconst hfy-hex-regex "[0-9A-Fa-f]") (defconst hfy-triplet-regex (byte-code "\301\211\302\301\211\302\301\211\302\260\f\207" [hfy-hex-regex "\\(" "\\)"] 12)) #@68 Return the intersection (using `eq') of two lists SET-A and SET-B. (defalias 'hfy-interq #[(set-a set-b) "\305\211 \203 @ A \f>\203 \nB\202\n+\207" [set-a elt interq sa set-b nil] 3 (#$ . 18908)]) #@187 Where COLOUR is a color name or #XXXXXX style triplet, return a list of three (16 bit) rgb values for said color. If a window system is unavailable, calls `hfy-fallback-colour-values'. (defalias 'hfy-colour-vals #[(colour) "\303 \"\203\f\304\305\306\"\207\n\203\307\310!\203\310 !\207\311 !\207\312 !\207" [hfy-triplet-regex colour window-system string-match mapcar #[(x) "\302\303 \"\304\"\305_\207" [x colour string-to-number match-string 16 257] 4] (1 2 3) fboundp color-values x-color-values hfy-fallback-colour-values] 3 (#$ . 19125)]) (defvar hfy-cperl-mode-kludged-p nil) #@119 CPerl mode does its damnedest not to do some of its fontification when not in a windowing system - try to trick it... (defalias 'hfy-kludge-cperl-mode #[nil "?\205 \204\303\304\305!\210\306)\306\211\207" [hfy-cperl-mode-kludged-p window-system cperl-syntaxify-by-font-lock htmlfontify require cperl-mode t] 2 (#$ . 19719)]) #@23 Is option SYMBOL set. (defalias 'hfy-opt #[(symbol) " >\207" [symbol hfy-optimisations] 2 (#$ . 20057)]) #@144 Default value for `hfy-page-header'. FILE is the name of the file. STYLE is the inline CSS stylesheet (or tag referring to an external sheet). (defalias 'hfy-default-header #[(file style) "\302\303 #\207" [file style format "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\"\n\"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <title>%s</title>\n%s\n <script type=\"text/javascript\"><!--\n // this function is needed to work around\n // a bug in IE related to element attributes\n function hasClass(obj)\n {\n var result = false;\n if (obj.getAttributeNode(\"class\") != null)\n {\n result = obj.getAttributeNode(\"class\").value;\n }\n return result;\n }\n\n function stripe(id)\n {\n // the flag we'll use to keep track of\n // whether the current row is odd or even\n var even = false;\n\n // if arguments are provided to specify the colors\n // of the even & odd rows, then use the them;\n // otherwise use the following defaults:\n var evenColor = arguments[1] ? arguments[1] : \"#fff\";\n var oddColor = arguments[2] ? arguments[2] : \"#ddd\";\n\n // obtain a reference to the desired table\n // if no such table exists, abort\n var table = document.getElementById(id);\n if (! table) { return; }\n\n // by definition, tables can have more than one tbody\n // element, so we'll have to get the list of child\n // &lt;tbody&gt;s\n var tbodies = table.getElementsByTagName(\"tbody\");\n\n // and iterate through them...\n for (var h = 0; h < tbodies.length; h++)\n {\n // find all the &lt;tr&gt; elements...\n var trs = tbodies[h].getElementsByTagName(\"tr\");\n\n // ... and iterate through them\n for (var i = 0; i < trs.length; i++)\n {\n // avoid rows that have a class attribute\n // or backgroundColor style\n if (! hasClass(trs[i]) &&\n ! trs[i].style.backgroundColor)\n {\n // get all the cells in this row...\n var tds = trs[i].getElementsByTagName(\"td\");\n\n // and iterate through them...\n for (var j = 0; j < tds.length; j++)\n {\n var mytd = tds[j];\n\n // avoid cells that have a class attribute\n // or backgroundColor style\n if (! hasClass(mytd) &&\n ! mytd.style.backgroundColor)\n {\n mytd.style.backgroundColor =\n even ? evenColor : oddColor;\n }\n }\n }\n // flip from odd to even, or vice-versa\n even = ! even;\n }\n }\n }\n\n function toggle_invis( name )\n {\n var filter =\n { acceptNode:\n function( node )\n { var classname = node.id;\n if( classname )\n { var classbase = classname.substr( 0, name.length );\n if( classbase == name ) { return NodeFilter.FILTER_ACCEPT; } }\n return NodeFilter.FILTER_SKIP; } };\n var walker = document.createTreeWalker( document.body ,\n NodeFilter.SHOW_ELEMENT ,\n filter ,\n false );\n while( walker.nextNode() )\n {\n var e = walker.currentNode;\n if( e.style.display == \"none\" ) { e.style.display = \"inline\"; }\n else { e.style.display = \"none\"; }\n }\n }\n--> </script>\n </head>\n <body onload=\"stripe('index'); return true;\">\n"] 4 (#$ . 20170)]) #@105 Default value for `hfy-page-footer'. FILE is the name of the file being rendered, in case it is needed. (defalias 'hfy-default-footer #[(_file) "\300\207" ["\n </body>\n</html>\n"] 1 (#$ . 24169)]) #@198 Replace the end of a CSS style declaration STYLE-STRING with the contents of the variable `hfy-src-doc-link-style', removing text matching the regex `hfy-src-doc-link-unstyle' first, if necessary. (defalias 'hfy-link-style-string #[(style-string) "\303 \"\203\304\305\306\307 $\303\n \"\204%\303\310 \"\203%\304\n\306\307 $\311P\207 \207" [hfy-src-doc-link-unstyle style-string hfy-src-doc-link-style string-match replace-match "" fixed-case literal "} *$" " }"] 5 (#$ . 24374)]) #@306 Takes a COLOUR name (string) and return a CSS rgb(R, G, B) triplet string. Uses the definition of "white" to map the numbers to the 0-255 range, so if you've redefined white, (esp. if you've redefined it to have a triplet member lower than that of the color you are processing) strange things may happen. (defalias 'hfy-triplet #[(colour) "\303\304\305\306!\"\303\307\305!\" \205\310\311\312\303\313\314\"#*\207" [colour rgb16 white mapcar #[(I) "\301T!\207" [I float] 2] hfy-colour-vals "white" #[(I) "\301T!\207" [I float] 2] apply format "#%02x%02x%02x" #[(X) " 8\n8\245\303_\207" [X rgb16 white 255] 3] (0 1 2)] 6 (#$ . 24867)]) (defalias 'hfy-family #[(family) "\301BC\207" [family "font-family"] 2]) (defalias 'hfy-bgcol #[(colour) "\301\302!BC\207" [colour "background" hfy-triplet] 3]) (defalias 'hfy-colour #[(colour) "\301\302!BC\207" [colour "color" hfy-triplet] 3]) (defalias 'hfy-width #[(width) "\301\302!BC\207" [width "font-stretch" symbol-name] 3]) #@34 Font scaling from Emacs to HTML. (custom-declare-variable 'hfy-font-zoom 1.05 '(#$ . 25852) :type 'float :group 'htmlfontify) #@186 Derive a CSS font-size specifier from an Emacs font :height attribute HEIGHT. Does not cope with the case where height is a function to be applied to the height of the underlying font. (defalias 'hfy-size #[(height) "\302!\203\303\304\305 _\306_\"B\202\"\250\205\"\303\304\307 _\310\245\"BC\207" [height hfy-font-zoom floatp "font-size" format "%d%%" 100 "%dpt" 10] 5 (#$ . 25985)]) #@162 Derive a font-style CSS specifier from the Emacs :slant attribute SLANT: CSS does not define the reverse-* styles, so just maps those to the regular specifiers. (defalias 'hfy-slant #[(slant) "\301\302\236A\206 \303BC\207" [slant "font-style" ((italic . "italic") (reverse-italic . "italic") (oblique . "oblique") (reverse-oblique . "oblique")) "normal"] 3 (#$ . 26383)]) #@77 Derive a font-weight CSS specifier from an Emacs weight spec symbol WEIGHT. (defalias 'hfy-weight #[(weight) "\301\302\236ABC\207" [weight "font-weight" ((ultra-bold . "900") (extra-bold . "800") (bold . "700") (semi-bold . "600") (normal . "500") (semi-light . "400") (light . "300") (extra-light . "200") (ultra-light . "100"))] 3 (#$ . 26763)]) (defalias 'hfy-box-to-border-assoc #[(spec) "\205<@\211A@)\304 \305\"\203\306\nB\2022\304 \307\"\203(\310\nB\2022\304 \311\"\2052\312\nB\313\211AA)!*B\207" [spec x val tag eql :color "colour" :width "width" :style "style" hfy-box-to-border-assoc] 4]) (defalias 'hfy-box-to-style #[(spec) "\304!\305\306 \"A\305\307 \"A\n\205\310\305\306 \"AB\311\312\313\305\314 \"A\206'\315\"B\316\317 \320\"\2035\321\202A\317 \322\"\203@\323\202A\324BE+\207" [spec css col s hfy-box-to-border-assoc assoc "colour" "style" "border-color" "border-width" format "%dpx" "width" 1 "border-style" eql released-button "outset" pressed-button "inset" "solid"] 7]) #@67 Derive CSS border-* attributes from the Emacs :box attribute BOX. (defalias 'hfy-box #[(box) "\205&\250\203\301\302\303\"BC\207;\203\304\302\305\"BC\207<\205&\306!\207" [box "border-width" format "%dpx" "border" "solid %s 1px" hfy-box-to-style] 4 (#$ . 27785)]) #@143 Derive CSS text-decoration specifiers from various Emacs font attributes. TAG is an Emacs font attribute key (eg :underline). VAL is ignored. (defalias 'hfy-decor #[(tag _val) "\301\302\"\203 \303\304B\202$\301\305\"\203\303\306B\202$\301\307\"\205$\303\310BC\207" [tag eql :underline "text-decoration" "underline" :overline "overline" :strike-through "line-through"] 3 (#$ . 28067)]) #@94 This text should be invisible. Do something in CSS to make that happen. VAL is ignored here. (defalias 'hfy-invisible #[(&optional _val) "\300\207" [(("display" . "none"))] 1 (#$ . 28467)]) #@149 Return a `defface' style alist of possible specifications for FACE. Entries resulting from customization (`custom-set-faces') will take precedence. (defalias 'hfy-combined-face-spec #[(face) "\303\205 \205\n\304=\205 \n\305N\n\306N#\207" [hfy-display-class hfy-default-face-def face append default saved-face face-defface-spec] 5 (#$ . 28664)]) #@888 Return the face attributes for FACE. If CLASS is set, it must be a `defface' alist key [see below], in which case the first face specification returned by `hfy-combined-face-spec' which *doesn't* clash with CLASS is returned. (A specification with a class of t is considered to match any class you specify - this matches Emacs's behavior when deciding on which face attributes to use, to the best of my understanding). If CLASS is nil, then you just get whatever `face-attr-construct' returns, ie the current specification in effect for FACE. *NOTE*: This function forces any face that is not 'default and which has no :inherit property to inherit from 'default (this is because 'default is magical in that Emacs's fonts behave as if they inherit implicitly from 'default, but no such behavior exists in HTML/CSS). See also `hfy-display-class' for details of valid values for CLASS. (defalias 'hfy-face-attr-for-class #[(face &optional class) "\203\335\306 !\307\211\211\310\307\203\310@\211@AA\307\211\211\211\211\311\203\252\204\252@A@A\211<\203g\202jC\312=\204y \313>\203\311\202? \236A\203?\314 \236A\"\211\203\241G\\\202?\312\315\202? V\203\300\f\210 \210\210\202\303\210.\202\n\205\330\n@<\203\327\n@\202\330\n.\2020\316 !\307\317>\204\361\202/\203-@A@\211 \317=\203;\203\320\230\204 BB*\211AA)\211\204\366*!\321!>\204? \322=\203D!\202K\323!\321\322D\")\207" [class face face-match face-score face-attrs face-class hfy-combined-face-spec nil -1 0 t (t default) hfy-interq -10 face-attr-construct :background "SystemWindow" :inherit default append face-specn face-props score next x val key cel cbuf new-spec spec b a face-spec] 8 (#$ . 29023)]) #@404 The guts of `hfy-face-to-style': FN should be a `defface' font spec, as returned by `face-attr-construct' or `hfy-face-attr-for-class'. Note that this function does not get font-sizes right if they are based on inherited modifiers (via the :inherit) attribute, and any other modifiers that are cumulative if they appear multiple times need to be merged by the user - `hfy-flatten-style' should do this. (defalias 'hfy-face-to-style-i #[(fn) "\205?@\211A@)\211AA)\306\211\211&\211'\307=\203[&<\203.&\2021&C\211(\306)\211*\203W*@)\310\n\311\312)+\"!\"*A\211*\204=+\2024&\2053\313'\314\"\203o\315&!\2023\313'\316\"\203~\317&!\2023\313'\320\"\203\215\321&!\2023\313'\322\"\203\234\323&!\2023\313'\324\"\203\253\325&!\2023\313'\326\"\203\272\327&!\2023\313'\330\"\203\311\331&!\2023\313'\332\"\203\330\333&!\2023\313'\334\"\203\351\335'&\"\2023\313'\336\"\203\372\335'&\"\2023\313'\337\"\203 \335'&\"\2023\313'\340\"\203\341&!\2023\313'\342\"\203(\321\343!\2023\313'\344\"\2053\323\345!\311 ! \f\244\n\244.\207" [fn x parent this that next nil :inherit append hfy-face-to-style-i hfy-face-attr-for-class eql :family hfy-family :width hfy-width :weight hfy-weight :slant hfy-slant :foreground hfy-colour :background hfy-bgcol :box hfy-box :height hfy-size :underline hfy-decor :overline :strike-through :invisible hfy-invisible :bold bold :italic italic val key vs v --dolist-tail-- hfy-display-class] 7 (#$ . 30859)]) #@129 Convert SPEC, a CSS font-size specifier, to an Emacs :height attribute value. Used while merging multiple font-size attributes. (defalias 'hfy-size-to-int #[(spec) "\301\302\"\203/\303\304\"\305\230\203\306\303\307\"!\310\245\2022\303\304\"\311\230\2052\306\303\307\"!\312_\2022\306!C\207" [spec string-match "\\([0-9]+\\)\\(%\\|pt\\)" match-string 2 "%" string-to-number 1 100.0 "pt" 10] 4 (#$ . 32373)]) #@276 Take STYLE (see `hfy-face-to-style-i', `hfy-face-to-style') and merge any multiple attributes appropriately. Currently only font-size is merged down to a single occurrence - others may need special handling, but I haven't encountered them yet. Returns a `hfy-style-assoc'. (defalias 'hfy-flatten-style #[(style) "\306\307C\310\211\f\310\211\203C@\211@\311\230\2035 \204(\n\312 A!\244\313\314 A\"\203:\315\202: C\244A\211\204*\316\317\n\"\320 \203U\321 !\202X \322_!\244,\207" [r x m n style css 0 1 nil "font-size" hfy-size-to-int string-match "pt" t apply * hfy-size round 1.0 --dolist-tail--] 5 (#$ . 32798)]) (defalias 'hfy-face-resolve-face #[(fn) "\302!\203 \303 \"\2079\203\302J!\203\303J \"\207\304\207" [fn hfy-display-class facep hfy-face-attr-for-class nil] 3]) #@210 Take FN, a font or `defface' style font specification, (as returned by `face-attr-construct' or `hfy-face-attr-for-class') and return a `hfy-style-assoc'. See also `hfy-face-to-style-i', `hfy-flatten-style'. (defalias 'hfy-face-to-style #[(fn) "\303!\304\305 !!\306\307\n\"\204\n\310\244\n*\207" [fn face-def final-style hfy-face-resolve-face hfy-flatten-style hfy-face-to-style-i assoc "text-decoration" (("text-decoration" . "none"))] 3 (#$ . 33618)]) #@70 Render a font symbol or `defface' font spec FN into a name (string). (defalias 'hfy-face-or-def-to-name #[(fn) "<\204\n\306\307\"\207\306\307\"\310 \n\"\311>\211A@) A \2045\306\312\nG\"  B\211\nB\306\313 \206<\314 #,\207" [fn key hfy-tmpfont-stack entry x base format "%s" assoc :inherit "%04d" "%s-%s" default tag] 5 (#$ . 34085)]) #@72 Strip the boring bits from a font-name FN and return a CSS style name. (defalias 'hfy-css-name #[(fn) "\302!\303\304 \"\204\303\305 \"\204\303\306 \"\203.\307\310 \"\303\311 \"\203*\307\310 \" \202/ )\207" [fn face-name hfy-face-or-def-to-name string-match "font-lock-\\(.*\\)" "cperl-\\(.*\\)" "^[Ii]nfo-\\(.*\\)" match-string 1 "\\(.*\\)-face\\'"] 3 (#$ . 34443)]) #@74 Default handler for mapping faces to styles. See also `hfy-face-to-css'. (defalias 'hfy-face-to-css-default #[(fn) "\304!\305\306\307 \"\310!\311\312\313\314 \"\"+B\207" [fn css-list seen css-text hfy-face-to-style nil mapcar #[(E) "@\205@ \235?\205@ B\302\303@A#\207" [E seen format " %s: %s; "] 4] hfy-css-name format "{%s}" apply concat] 6 (#$ . 34827)]) #@330 Handler for mapping faces to styles. The signature of the handler is of the form (lambda (FN) ...). FN is a font or `defface' specification (cf `face-attr-construct'). The handler should return a cons cell of the form (STYLE-NAME . STYLE-SPEC). The default handler is `hfy-face-to-css-default'. See also `hfy-face-to-style'. (defvar hfy-face-to-css 'hfy-face-to-css-default (#$ . 35207)) (byte-code "\300\301\302\303!\203\f\303\202 \304\"\207" [defalias hfy-prop-invisible-p fboundp invisible-p #[(prop) "\302=\203\n \206 >\206 \236\207" [buffer-invisibility-spec prop t] 2 "Is text property PROP an active invisibility property?"]] 4) #@77 Return a list of (start-point . end-point) cons cells of invisible regions. (defalias 'hfy-find-invisible-ranges #[nil "\212\304\211\211\211eb\305\n!\203\n\306\ndW\203C \2031\305\n!\204;\304\nB B\202;\305\n!\203;\n\306\307\n!\211\202 \203MdB B -\207" [s i p invisible nil invisible-p t next-char-property-change] 5 (#$ . 35863)]) #@187 Generate a CSS style name for an invisible section of the buffer. POINT is the point inside the invisible region. MAP is the invisibility map as returned by `hfy-find-invisible-ranges'. (defalias 'hfy-invisible-name #[(point map) "\305 \305\211\203* @\f\n@Y\203#\f\nAW\203#\306\307\n@\nA# A\211\204\n*)\207" [name map range --dolist-tail-- point nil format "invisible-%S-%S"] 5 (#$ . 36225)]) #@181 Find face in effect at point P. If overlays are to be considered (see `hfy-optimisations') then this may return a `defface' style list of face properties instead of a face symbol. (defalias 'hfy-face-at #[(p) "\306\211\307\310\"\306\211\311!3\f\203S\f<\203S\312\f@!\203S\f\3064\2115\203M5@\2114<\203=4\nB\202C\3134\nBB5A\2115\204,*\f@\306\314\315!\203b\316!\2113\204j\f\206f \202f \203t 3B33\2373\f\203\f3\3066\2115\203O5@6\3176>\2117A@)\2118\203\254\3208!\203\254\321\322\nBB)\3106>\206\270\3236>\2117A@)\2119<\204\3479;\203\322\3249!\202\3249\211: =\204\343\313:\nBB)\202E9\203E\3129@!\2039@\211;\203\3249!\313\nBB9A9)\202\347\306\211;9@<\203[9@A<\204C9\2117@@)9\2117@A);9A9\202\2379\2117@@)9@A@;9A9\202\2379A<\203}9@9\2117A@);9\2117AA)9\202\2379<\203\2319A<\204\2319@9A;\3069\202\237\325\3269\"\210\327\330\"\203\252\331\202/\327\332\"\203\265\333\202/\327\334\"\203\300\335\202/\327\336\"\203\313\337\202/\327\340\"\203\326\341\202/\327\342\"\203\341\343\202/\327\344\"\203\354\345\202/\327\346\"\203\367\347\202/\327\350\"\203\351\202/\327\352\"\203 \353\202/\327\354\"\203\355\202/\327\356\"\203#\357\202/\327\360\"\203.\361\202/\211 >\204A B;\nBB*\202\347)5A\2115\204\212*\n\203e\n\f<\203^\f\202a\362\f!\244\202f\f.\207" [p text-props extra-props prop-seen face-name base-face nil get-text-property face text-properties-at facep :inherit hfy-opt keep-overlays hfy-overlay-props-at invisible hfy-prop-invisible-p :invisible t font-lock-face intern error "Eh... another format! fprops=%s" eql family :family width :width height :height weight :weight slant :slant underline :underline overline :overline strike-through :strike-through box :box foreground-color :foreground background-color :background bold :bold italic :italic face-attr-construct overlay-data f --dolist-tail-- P x iprops fprops this-face v] 8 (#$ . 36636)]) #@91 Grab overlay properties at point P. The plists are returned in descending priority order. (defalias 'hfy-overlay-props-at #[(p) "\301\302\303\304!\"\305\"\207" [p sort mapcar overlay-properties overlays-at #[(A B) "\303>\211A@)\206\f\304\303\n>\211A@)\206\304V\207" [A x B priority 0] 4]] 5 (#$ . 38665)]) #@207 Trawl the current buffer, construct and return a `hfy-sheet-assoc'. If `hfy-user-sheet-assoc' is currently bound then use it to collect new styles discovered during this run. Otherwise create a new assoc. (defalias 'hfy-compile-stylesheet #[nil "e\305\306\300!\205 \212 b\210 dW\2035\307 !\211\203-\310\n \"\204-\n\f\n!B B\311 !\211\202)\310\312 \"\204E\312\f\312!B B\306\300!\203M  +\207" [hfy-user-sheet-assoc style fn pt hfy-face-to-css nil boundp hfy-face-at assoc next-char-property-change default] 5 (#$ . 38985)]) #@277 `font-lock' doesn't like to say it's been fontified when in batch mode, but we want to know if we should fontify or raw copy, so in batch mode we check for non-default face properties. Otherwise we test variable `font-lock-mode' and variable `font-lock-fontified' for truth. (defalias 'hfy-fontified-p #[nil "\205+ \203*e\305\212 b\210 dW\203&\n\204&\306 !\307 !\211\202)\n*\207\f\207" [font-lock-fontified noninteractive face-name pt font-lock-mode nil hfy-face-at next-char-property-change] 3 (#$ . 39531)]) #@386 Where FACE-MAP is a `hfy-facemap-assoc' for the current buffer, this function merges adjacent style blocks which are of the same value and are separated by nothing more interesting than whitespace. <span class="foo">narf</span> <span class="foo">brain</span> (as interpreted from FACE-MAP) would become: <span class="foo">narf brain</span> Returns a modified copy of FACE-MAP. (defalias 'hfy-merge-adjacent-spans #[(face-map) "\306\211\211\211\211\211\211\211\n \f\211 \203\231 AAA@  AA@\n \211A@) @ \f \f A A\232\203\203\212\n@b\210\307\310 @\311#)\204\203\f\211AA)\f \fAAA@ \fAA@\n\f\211A@)\f@\202> B\n B  >\211 A\211 \204 \237\211. \207" [face-map reduced-map span-start span-stop last-stop last-start nil re-search-forward "[^ \n ]" t first-stop first-start map-buf tmp-map x] 10 (#$ . 40060)]) #@66 Compile and return a `hfy-facemap-assoc' for the current buffer. (defalias 'hfy-compile-face-map #[nil "e\214~\210e) Z\306\211\306\212b\210dW\203P\307!\211\2039 \203. \310B\fB B\fB\311\202E \203C \310B\fB\306\312!\n\\\202\f\203i\f\211@A)\310=\204ideZT\310B\fB)\313\314!\203v\315\f!\202w\f.\207" [pt pt-narrow offset fn map prev-tag nil hfy-face-at end t next-char-property-change hfy-opt merge-adjacent-tags hfy-merge-adjacent-spans x] 3 (#$ . 40929)]) #@280 Generate a buffer to hold the HTML output. The filename of this buffer is derived from the source (current) buffer's variable `buffer-file-name', if it is set, plus `hfy-extn'. Otherwise a plausible filename is constructed from `default-directory', `buffer-name' and `hfy-extn'. (defalias 'hfy-buffer #[nil "\305 P\304 \306 !r q\210\n\203\nP\202+\307\310\311 \"\203)\312\313 \"\202* ! ,\207" [hfy-extn name src buf buffer-file-name buffer-name get-buffer-create expand-file-name string-match "^.*/\\([^/]*\\)\\'" match-string 1] 4 (#$ . 41425)]) #@43 Get a CSS style name for FACE from STYLE. (defalias 'hfy-lookup #[(face style) "\303 \"\211A@)\207" [face style x assoc] 4 (#$ . 41988)]) #@114 Copy, alter and return a STYLE-STRING to make it suitable for a hyperlink. Uses `hfy-link-style-fun' to do this. (defalias 'hfy-link-style #[(style-string) "\302!\203\n !\207 \207" [hfy-link-style-fun style-string functionp] 2 (#$ . 42135)]) #@57 Return the inline CSS style sheet for FILE as a string. (defalias 'hfy-sprintf-stylesheet #[(css file) "\306\307\310\311 \236\211AA)\"\312\313\314\315 \"\"\316\260\f \")\207" [hfy-meta-tags css x stylesheet hfy-page-header file "\n<style type=\"text/css\"><!-- \n" format "body %s\n" default apply concat mapcar #[(style) "\302\303\211A@)\211AA)\211A@)\304\211AA)!%\207" [style x format "span.%s %s\nspan.%s a %s\n" hfy-link-style] 8] " --></style>\n"] 9 (#$ . 42386)]) #@104 Mark dangerous ["<>] characters with the `hfy-quoteme' property. See also `hfy-html-dekludge-buffer'. (defalias 'hfy-html-enkludge-buffer #[nil "\212eb\210\301\302\303#\205\304\305\224`\306\303$\210\202)\207" [hfy-html-quote-regex re-search-forward nil t put-text-property 0 hfy-quoteme] 5 (#$ . 42878)]) #@61 Map CHAR-STRING to an HTML safe string (entity) if need be. (defalias 'hfy-html-quote #[(char-string) "\303 \"\211A@)\206 \207" [char-string hfy-html-quote-map x assoc] 4 (#$ . 43195)]) #@137 Transform all dangerous characters marked with the `hfy-quoteme' property using `hfy-html-quote'. See also `hfy-html-enkludge-buffer'. (defalias 'hfy-html-dekludge-buffer #[nil "\212eb\210\301\302\303#\205\304\305\224\306\"\203\307\310\311\312!!!\210\202)\207" [hfy-html-quote-regex re-search-forward nil t get-text-property 0 hfy-quoteme replace-match hfy-html-quote match-string 1] 4 (#$ . 43392)]) #@133 Bind variables according to VARLIST and eval BODY restoring buffer state. Do not record undo information during evaluation of BODY. (defalias 'hfy-save-buffer-state '(macro . #[(varlist &rest body) "\303\304!\305\306 \307B\310B\"\311\nB\312\313BBF)\207" [modified varlist body make-symbol "modified" let* append ((buffer-modified-p)) ((buffer-undo-list t) (inhibit-read-only t) (inhibit-point-motion-hooks t) (inhibit-modification-hooks t) deactivate-mark buffer-file-name buffer-file-truename) progn unless ((restore-buffer-modified-p nil))] 6 (#$ . 43808)])) (byte-code "\300\301\302\303#\210\300\301\304\305#\207" [put hfy-save-buffer-state lisp-indent-function 1 edebug-form-spec let] 4) #@77 Tag trailing whitespace with a hfy property if it is currently highlighted. (defalias 'hfy-mark-trailing-whitespace #[nil "\205<\306\212eb\210\307 \306\211\306\211\310\211\310\311\312\310\306#\2032\313\314\224\314\225\315\306$\210\202\n?\205:\316\310!.\n\207" [show-trailing-whitespace inhibit-read-only #1=#:modified buffer-undo-list inhibit-point-motion-hooks inhibit-modification-hooks t buffer-modified-p nil re-search-forward "[ ]+$" put-text-property 0 hfy-show-trailing-whitespace restore-buffer-modified-p deactivate-mark buffer-file-name buffer-file-truename] 6 (#$ . 44509)]) #@52 Undo the effect of `hfy-mark-trailing-whitespace'. (defalias 'hfy-unmark-trailing-whitespace #[nil "\205(\306 \307\211\307\211\310\211\f \310\311ed\312#\210 ?\205&\313\310!.\207" [show-trailing-whitespace #1=#:modified buffer-undo-list inhibit-read-only inhibit-point-motion-hooks inhibit-modification-hooks buffer-modified-p t nil remove-text-properties (hfy-show-trailing-whitespace) restore-buffer-modified-p deactivate-mark buffer-file-name buffer-file-truename] 5 (#$ . 45120)]) #@128 Default handler to begin a span of text. Insert "<span class="STYLE" ...>". See `hfy-begin-span-handler' for more information. (defalias 'hfy-begin-span #[(style text-block text-id text-begins-block-p) "\203\n\304\305 \"c\210 \203\304\306\n $\202\304\307\n\"c\207" [text-begins-block-p text-block style text-id format "<span onclick=\"toggle_invis('%s');\">…</span>" "<span class=\"%s\" id=\"%s-%d\">" "<span class=\"%s\">"] 5 (#$ . 45624)]) #@108 Default handler to end a span of text. Insert "</span>". See `hfy-end-span-handler' for more information. (defalias 'hfy-end-span #[nil "\300c\207" ["</span>"] 1 (#$ . 46082)]) #@1082 Handler to begin a span of text. The signature of the handler is (lambda (STYLE TEXT-BLOCK TEXT-ID TEXT-BEGINS-BLOCK-P) ...). The handler must insert appropriate tags to begin a span of text. STYLE is the name of the style that begins at point. It is derived from the face attributes as part of `hfy-face-to-css' callback. The other arguments TEXT-BLOCK, TEXT-ID, TEXT-BEGINS-BLOCK-P are non-nil only if the buffer contains invisible text. TEXT-BLOCK is a string that identifies a single chunk of visible or invisible text of which the current position is a part. For visible portions, it's value is "nil". For invisible portions, it's value is computed as part of `hfy-invisible-name'. TEXT-ID marks a unique position within a block. It is set to value of `point' at the current buffer position. TEXT-BEGINS-BLOCK-P is a boolean and is non-nil if the current span also begins a invisible portion of text. An implementation can use TEXT-BLOCK, TEXT-ID, TEXT-BEGINS-BLOCK-P to implement fold/unfold-on-mouse-click like behaviour. The default handler is `hfy-begin-span'. (defvar hfy-begin-span-handler 'hfy-begin-span (#$ . 46268)) #@186 Handler to end a span of text. The signature of the handler is (lambda () ...). The handler must insert appropriate tags to end a span of text. The default handler is `hfy-end-span'. (defvar hfy-end-span-handler 'hfy-end-span (#$ . 47417)) #@131 Implement the guts of `htmlfontify-buffer'. SRCDIR, if set, is the directory being htmlfontified. FILE, if set, is the file name. (defalias 'hfy-fontify-buffer #[(&optional srcdir file) "\203\306!\307 \310\211\310\211\311ed\"@A\205 \312 BA\205)\313 CA\203VD\203VBeU\203CCdU\204V\314BC\"\315 \316\317#\210\315 \320\321#\210\322 \210\323 \324 \325 \326 \210 \203m\327 !\210\330 ed#\210 q\210\331edE#\210\332@\333\"@\310F\203\234G\203\234\334G\"\210\335G\"\210\336 \210\337\340\f\"\210 \310H\211I\203AI@\211H@HA\310JK\211Lb\210\341L\342\"\206\317\341L\343\"JK\344=\203\337M \210\2027\203\375G\203\375J\203\375\331``T\345#\210\346L\211T\343\347$\210N\350K\n\"\f\205\351\352\353L\f\"\"\f\205L\f\205L\f\236$\210J\2037\331``T\354#\2037\346L\211T\343\347$\210+IA\211I\204\256*\203\346G\203\346\355e\310\211OPLQ\356L\357\"\211L\203\203\341L\357\"\211P\203WLb\210\331L\211T\360#\210\361P\362Qc\210\202WeL\356LQ\"\211L\203\345\341LQ\"\211P\203\206Lb\210\331L\211TQ\310D#\210\363Q\355\"\203\324\341L\364\"\211O\203\307\351\365O\"c\210\351\366P\"c\210\343Q\202\206\363Q\343\"\203\206\367c\210\355Q\202\206,\370 \210\371\372!\204eb\210\373\nG\"c\210\371\374!\203\375c\210\376c\210db\210\377c\210\371\374!\203\201Sc\210RG!c\210\201T\201U!\210\201V\310!\210 .\207" [srcdir html-buffer css-sheet css-map invis-ranges rovl directory-file-name hfy-buffer nil overlays-in region-beginning region-end make-overlay overlay-put priority 1000 face region hfy-mark-trailing-whitespace hfy-compile-stylesheet hfy-compile-face-map hfy-find-invisible-ranges hfy-unmark-trailing-whitespace delete-overlay copy-to-buffer remove-text-properties sort #[(A B) "\303\304!>\211A@)\206\305\303\304\n!>\211A@)\206\305V\207" [A x B priority overlay-properties 0] 5] hfy-mark-tag-names hfy-mark-tag-hrefs hfy-html-enkludge-buffer message "invis-ranges:\n%S" get-text-property hfy-linkp hfy-endl end (hfy-endl nil) put-text-property t hfy-lookup format "%s" hfy-invisible-name (hfy-endl nil) hfy-link next-single-property-change hfy-anchor (hfy-anchor nil) "<a name=\"" "\"></a>" eql hfy-inst "<a name=\"%s\"></a>" "<a href=\"%s\">" "</a>" hfy-html-dekludge-buffer hfy-opt body-text-only hfy-sprintf-stylesheet div-wrapper "<div class=\"default\">" "\n<pre>" "</pre>\n" orig-ovls mark-active rmin rmax transient-mark-mode hfy-ignored-properties buffer-invisibility-spec file point-face --dolist-tail-- move-link fn pt hfy-end-span-handler hfy-begin-span-handler rr pr lp hfy-page-footer "</div>" run-hooks hfy-post-html-hook set-buffer-modified-p] 8 (#$ . 47666)]) #@197 Take a STRING and return a fontified version of it. It is assumed that STRING has text properties that allow it to be fontified. This is a simple convenience wrapper around `htmlfontify-buffer'. (defalias 'htmlfontify-string #[(string) "\304!\305\301\306\"\307\310!r\nq\210\311\216 c\210\312 \210\313 -\207" [hfy-optimisations hfy-optimisations-1 #1=#:temp-buffer string copy-sequence add-to-list skip-refontification generate-new-buffer " *temp*" ((byte-code "\301!\203\n\302!\210\301\207" [#1# buffer-name kill-buffer] 2)) htmlfontify-buffer buffer-string] 3 (#$ . 50348)]) #@59 Try to force font-locking even when it is optimized away. (defalias 'hfy-force-fontification #[nil "\306\307!\210\310\311!\210\312\300!\203\204\313  \204-\314\315\n #\210\f\205, \205?\316ed\317#\207\314\320\321 \2066\322 #\210\f\205?\323 \207" [font-lock-cache-position noninteractive window-system major-mode font-lock-defaults font-lock-mode run-hooks hfy-init-kludge-hook require font-lock boundp make-marker message "hfy interactive mode (%S %S)" font-lock-fontify-region nil "hfy batch mode (%s:%S)" buffer-file-name buffer-name font-lock-fontify-buffer] 4 (#$ . 50938)]) #@629 Create a new buffer, named for the current buffer + a .html extension, containing an inline CSS-stylesheet and formatted CSS-markup HTML that reproduces the look of the current Emacs buffer as closely as possible. Dangerous characters in the existing buffer are turned into HTML entities, so you should even be able to do HTML-within-HTML fontified display. You should, however, note that random control or eight-bit characters such as ^L ( ) or ¤ (\244) won't get mapped yet. If the SRCDIR and FILE arguments are set, lookup etags derived entries in the `hfy-tags-cache' and add HTML anchors and hyperlinks as appropriate. (defalias 'htmlfontify-buffer #[(&optional srcdir file) "\204\302 \206 \303 \304\305\"\203\306\307\"\310\311!\204#\212\312 \210)\313\314!\2030\315\316 \"!\207\316 \"\207" [file srcdir buffer-file-name buffer-name string-match "/\\([^/]*\\)\\'" match-string 1 hfy-opt skip-refontification hfy-force-fontification called-interactively-p any switch-to-buffer hfy-fontify-buffer] 4 (#$ . 51534) nil]) #@85 Return a list of files under DIRECTORY. Strips any leading "./" from each filename. (defalias 'hfy-list-files #[(directory) "\302!\210\303\304\305\306 !!\"\207" [directory hfy-find-cmd cd mapcar #[(F) "\301\302\"\203\f\303\304\"\207\207" [F string-match "^./\\(.*\\)" match-string 1] 3] split-string shell-command-to-string] 5 (#$ . 52579)]) #@217 Return everything preceding the last "/" from a relative filename FILE, on the assumption that this will produce a relative directory name. Hardly bombproof, but good enough in the context in which it is being used. (defalias 'hfy-dirname #[(file) "\302!\303\304 \"\205\305\306 \")\207" [file f directory-file-name string-match "^\\(.*\\)/" match-string 1] 3 (#$ . 52933)]) #@37 Approx. equivalent of mkdir -p DIR. (defalias 'hfy-make-directory #[(dir) "\301!\203\302!\205\303\207\304\303\"\207" [dir file-exists-p file-directory-p t make-directory] 3 (#$ . 53317)]) #@68 Is SRCDIR/FILE text? Uses `hfy-istext-command' to determine this. (defalias 'hfy-text-p #[(srcdir file) "\305\306\307 \n\"!\"\310 !\311\312\f\"*\207" [hfy-istext-command file srcdir cmd rsp format shell-quote-argument expand-file-name shell-command-to-string string-match "text"] 6 (#$ . 53518)]) #@209 Open FILE in SRCDIR - if fontified, write a fontified copy to DSTDIR adding an extension of `hfy-extn'. Fontification is actually done by `htmlfontify-buffer'. If the buffer is not fontified, just copy it. (defalias 'hfy-copy-and-fontify-file #[(srcdir dstdir file) "\306\211\211\307 !\210r\310\f!\211q\210 \311\fQ\312\313\n!!\210\314\315!\204&\316 \210\317 \2042\320 \f\"\203H\321 \f\"\211q\210\322\nP!\210\323!\210\202f\324\n!\203^\325\n!\204^\326\n\327\330\n!\331\"\"\210\332\333 !\n\334#\210\323 !,\207" [html source target srcdir file dstdir nil cd find-file-noselect "/" hfy-make-directory hfy-dirname hfy-opt skip-refontification hfy-force-fontification hfy-fontified-p hfy-text-p hfy-fontify-buffer write-file kill-buffer file-exists-p file-writable-p set-file-modes logior file-modes 128 copy-file buffer-file-name overwrite hfy-extn] 6 (#$ . 53826)]) #@86 List of etags tags that have definitions in this FILE. CACHE-HASH is the tags cache. (defalias 'hfy-tags-for-file #[(cache-hash file) "\302 \203 \303\304 \"\210)\207" [tag-list cache-hash nil maphash #[(K V) "\304 \"\205\f\n B\211\207" [file V K tag-list assoc] 3]] 3 (#$ . 54710)]) #@122 Mark tags in FILE (lookup SRCDIR in `hfy-tags-cache') with the `hfy-anchor' property, with a value of "tag.line-number". (defalias 'hfy-mark-tag-names #[(srcdir file) "\306 \"\211\211A@)\211\205\307\310\311\f \"\"*\207" [srcdir hfy-tags-cache cache-entry x cache-hash file assoc mapcar #[(TAG) "\302\303\304 \"\"\207" [TAG cache-hash mapcar #[(TLIST) " @\230\205% \211A@) AA@\306\307 # \310\fT\311\f\\\312 $+\207" [file TLIST x line chr TAG format "%s.%d" put-text-property 2 hfy-anchor link] 6] gethash] 5] hfy-tags-for-file] 6 (#$ . 55006)]) #@195 Return a "../" stub of the appropriate length for the current source tree depth, as determined from FILE (a filename). START is the offset at which to start looking for the / character in FILE. (defalias 'hfy-relstub #[(file &optional start) "\303\304\305 \n#\211\203\nT\306P\202)\207" [c file start "" string-match "/" "../"] 4 (#$ . 55572)]) #@556 Return an href stub for a tag href in THIS-FILE. If DEF-FILES (list of files containing definitions for the tag in question) contains only one entry, the href should link straight to that file. Otherwise, the link should be to the index file. We are not yet concerned with the file extensions/tag line number and so on at this point. If `hfy-split-index' is set, and the href wil be to an index file rather than a source file, append a .X to `hfy-index-file', where X is the uppercased first character of TAG. See also `hfy-relstub', `hfy-index-file'. (defalias 'hfy-href-stub #[(this-file def-files tag) "\305! G\306U\203 @\202\n\204 \202 \307\f\310\306O\226QP\207" [this-file def-files hfy-split-index hfy-index-file tag hfy-relstub 1 "." 0] 6 (#$ . 55933)]) #@299 Return a relative href to the tag in question, based on THIS-FILE `hfy-link-extn' `hfy-extn' DEF-FILES TAG and TAG-MAP THIS-FILE is the current source file DEF-FILES is a list of file containing possible link endpoints for TAG TAG is the tag in question TAG-MAP is the entry in `hfy-tags-cache'. (defalias 'hfy-href #[(this-file def-files tag tag-map) "\306 \n# \206\n\f\307\n G\310U\205#\311\312\313\314 @ \"\211 A@)\"P\260\207" [this-file def-files tag hfy-link-extn hfy-extn tag-map hfy-href-stub "#" 1 "." format "%d" assoc x] 11 (#$ . 56713)]) #@106 Return a regex that matches STRING as the first `match-string', with non word characters on either side. (defalias 'hfy-word-regex #[(string) "\301\302!\303Q\207" [string "[^$A-Za-z_0-9]\\(" regexp-quote "\\)[^A-Za-z_0-9]"] 3 (#$ . 57276)]) #@371 Mark href start points with the `hfy-link' prop (value: href string). Mark href end points with the `hfy-endl' prop (value t). Avoid overlapping links, and mark links in descending length of tag name in order to prevent subtags from usurping supertags, (eg "term" for "terminal"). SRCDIR is the directory being "published". FILE is the specific file we are rendering. (defalias 'hfy-mark-tag-hrefs #[(srcdir file) "\306 \"\306\n\"\306 \"\307\310!\307\311!\312\211\211\211 \211\211A@)\211\205S\211A@)\211\205S\211A@)\211 \205S\313\314 \". \207" [srcdir hfy-tags-cache hfy-tags-sortl hfy-tags-rmap case-fold-search tags-rmap assoc hfy-opt zap-comment-links zap-string-links nil mapcar #[(TAG) "\306\211\306\211\306\211\306\211 !\306\211\"#\306$\307%!&\310%'\"(\311\312(\")eb\210\313%\306\314#\205\361`\315\224S\211 b\210\316&!\203\353\317\224\317\225*\204]+\205`\320!\211!<\203s\321!>\211,A@)!\322 T\323\324$\204\353*\203\211!\325=\204\353+\203\225!\326=\204\353\327 $\310%-\"\".$E\211#\"B\"\330\331%$#\332\211T\333 $\210\334%\"-#\210\335.)%($\332\211T\336\n$\210\332 \211T\337\324$\210\332 T\323\324$\210 b\210\2023.\207" [start stop href name case-fold-search tmp-point nil hfy-word-regex gethash mapcar car search-forward NOERROR 0 looking-at 1 hfy-face-at :inherit text-property-any hfy-linkp t font-lock-comment-face font-lock-string-face line-number-at-pos format "%s.%d" put-text-property hfy-inst puthash hfy-href hfy-link hfy-endl maybe-start face-at rmap-entry rnew-elt rmap-line TAG tag-regex cache-hash tag-map tag-files no-comment no-strings x tags-rmap file] 6] tags-list cache-hash no-strings no-comment rmap-cache list-cache cache-entry x] 10 (#$ . 57525)]) #@69 Return `shell-file-name', or "/bin/sh" if it is a non-Bourne shell. (defalias 'hfy-shell #[nil "\302\303\"\203 \207 \206\304\207" [shell-file-name hfy-shell-file-name string-match "\\<bash\\>\\|\\<sh\\>\\|\\<dash\\>" "/bin/sh"] 3 (#$ . 59313)]) #@67 Run `hfy-etags-cmd' on SRCDIR, then call `hfy-parse-tags-buffer'. (defalias 'hfy-load-tags-cache #[(srcdir) "\306\307!\310 \"\311 \312 !\210\313 \f\"\210\314 \f\"+\207" [hfy-etags-cmd hfy-etags-bin shell-file-name etags-command etags-buffer srcdir get-buffer-create "*hfy-tags*" format hfy-shell cd shell-command hfy-parse-tags-buffer] 4 (#$ . 59569)]) #@121 Parse a BUFFER containing etags formatted output, loading the `hfy-tags-cache' and `hfy-tags-sortl' entries for SRCDIR. (defalias 'hfy-parse-tags-buffer #[(srcdir buffer) "\306 \"\306\n\"\306 \"\307\211\211\211\211\211\211\211\211 !\"#$%#\203=#\211&A@)!\202J\310\311\312\"!!D D\313!!\210%\203a%\211&A@)\"\202n\310\311\312\"\"\"D D\313\"!\210r'q\210eb\210\314\315!\203\346\316y\317U\203\346\314\320!\203{\316y\317U\203{\321\316!\314(!\203{\316y\317U\203{\321\316!\211G\317U\204\231\322\323\321\324!!!\322\323\321\325!!!\326\"\"\fE\211B\327\"#\210\202\231)\330\331\"\"\210\332 \333\" $\203$A \240\210\202\n D\nB G.\f\207" [srcdir hfy-tags-cache hfy-tags-sortl hfy-tags-rmap etags-file new-entry assoc nil make-hash-table :test equal clrhash looking-at "^\f" 1 0 "^\\(.+\\),\\([0-9]+\\)$" match-string round string-to-number 2 3 gethash puthash maphash #[(K _V) " B\211\207" [K tags-list] 2] sort #[(A B) "G GW\207" [B A] 2] tag-point tag-line tag-string hash-entry tags-list trmap-hash cache-hash trmap-cache tlist-cache cache-entry x buffer hfy-etag-regex] 13 (#$ . 59933)]) #@477 Prepare a tags index buffer for SRCDIR. `hfy-tags-cache' must already have an entry for SRCDIR for this to work. `hfy-page-header', `hfy-page-footer', `hfy-link-extn' and `hfy-extn' all play a part here. If STUB is set, prepare an (appropriately named) index buffer specifically for entries beginning with STUB. If MAP is set, use that instead of `hfy-tags-cache'. FILENAME is the name of the file being indexed. DSTDIR is the output directory, where files will be written. (defalias 'hfy-prepare-index-i #[(srcdir dstdir filename &optional stub map) "\306 \206\n\"\307\211 \f\203\310\fP\202\311 Q\307\211 \205 \211!A@)\211\205\312!\211\205\313\314\"\210\315\316\"q\210\317 \210\" \320\"c\210\321c\210\307#\211$\203\347$@#\307%\322#\"\307&\211$\203\335$@&\f\203\222\323\324\fP#\"\203\324&@&\211!A@)'(\325\326#%\230\203\257\327\202\265\325\330#\211#()\206\275 (\211)\206\306 #'\211&\nc\210#%*$A\211$\204+$A\211$\204h*\331c\210* !c\210+\203\373\332+!\210\333!\210-\207" [srcdir map hfy-tags-cache filename stub hfy-extn assoc nil "." "" get-buffer-create maphash #[(K _V) " B\211\207" [K tag-list] 2] sort string< erase-buffer "<!-- CSS -->" "<table class=\"index\">\n" gethash string-match "^" format " <tr> \n <td>%s</td> \n <td><a href=\"%s%s\">%s</a></td> \n <td><a href=\"%s%s#%s.%d\">%d</a></td>\n </tr> \n" "&nbsp;" "<a name=\"%s\">%s</a>" "</table>\n" cd set-visited-file-name index-buf index-file tag-list cache-hash cache-entry x hfy-page-header TAG --dolist-tail-- tag-started DEF line file hfy-link-extn hfy-page-footer dstdir] 12 (#$ . 61107)]) #@141 Return a list of index buffer(s), as determined by `hfy-split-index'. SRCDIR and DSTDIR are the source and output directories respectively. (defalias 'hfy-prepare-index #[(srcdir dstdir) "\204\f\306 \n \307$C\207\307\211\211\310 \f\" \f \2031 \211A@)\211\f\2031\311\312\f\"\210 ,\207" [hfy-split-index srcdir dstdir hfy-index-file hfy-tags-cache cache-entry hfy-prepare-index-i nil assoc maphash #[(K _V) "\306\307O\226\211\n\235?\205 \nB\310 \f $ B\211 )\207" [K stub stub-list srcdir dstdir hfy-index-file 0 1 hfy-prepare-index-i index-list] 6] index-list cache-hash stub-list x] 7 (#$ . 62873)]) #@298 Prepare the counterpart(s) to the index buffer(s) - a list of buffers with the same structure, but listing (and linking to) instances of tags (as opposed to their definitions). SRCDIR and DSTDIR are the source and output directories respectively. See also `hfy-prepare-index', `hfy-split-index'. (defalias 'hfy-prepare-tag-map #[(srcdir dstdir) "\204 \306 \n \307\f%C\207\307\211\211\310 \f\" \f \2032 \211A@)\211\f\2032\311\312\f\"\210 ,\207" [hfy-split-index srcdir dstdir hfy-instance-file hfy-tags-rmap cache-entry hfy-prepare-index-i nil assoc maphash #[(K _V) "\306\307O\226\211\n\235?\205 \nB\310 \f  %\nB\211\n)\207" [K stub stub-list srcdir dstdir hfy-instance-file 0 1 hfy-prepare-index-i hfy-tags-rmap index-list] 7] index-list cache-hash stub-list x] 7 (#$ . 63501)]) #@158 Internal function - strips definitions of tags from the instance map. SRCDIR is the directory being "published". See also `hfy-tags-cache', `hfy-tags-rmap'. (defalias 'hfy-subtract-maps #[(srcdir) "\306\211\211\211\307 \"\211A@)\307 \"\211A@)\307\f\"\211A@)\f  \306\211\205\231@\310 \"\310\f\"\311\312\"\306\306\211\203\205@\211@\211A@)D\235\204|BA\211\204`*\313\f#\210A\211\2046\306. \207" [srcdir hfy-tags-cache x hfy-tags-rmap hfy-tags-sortl taglist nil assoc gethash mapcar #[(P) "@\211A@)D\207" [P x] 3] puthash rev-map fwd-map exc-list def-list old-list new-list TAG --dolist-tail-- P] 10 (#$ . 64312)]) #@66 Load the etags cache for SRCDIR. See also `hfy-load-tags-cache'. (defalias 'htmlfontify-run-etags #[(srcdir) "\301\302!!\207" [srcdir hfy-load-tags-cache directory-file-name] 3 (#$ . 65011) "D source directory: "]) (defalias 'hfy-save-kill-buffers #[(buffer-list &optional dstdir) "\304\211\205+\n@\211q\210 \203\305 !\203\306 !\210\307 \210\310 !\210\nA\211\204\304*\207" [buffer-list B --dolist-tail-- dstdir nil file-directory-p cd save-buffer kill-buffer] 3]) #@202 Trawl SRCDIR and write fontified-and-hyperlinked output in DSTDIR. F-EXT and L-EXT specify values for `hfy-extn' and `hfy-link-extn'. You may also want to set `hfy-page-header' and `hfy-page-footer'. (defalias 'htmlfontify-copy-and-link-dir #[(srcdir dstdir &optional f-ext l-ext) "\306!\306 !\307\310\n\" \206\311\f\206\311\2041\312\313!\210\314!\210\310\n\"\315\211A@)!\210\316 !\210\317!\211\320\211\203d@\321 #\210A\211\204O*\322!\210\323\324 \" \"\210\323\325 \" \",\207" [srcdir dstdir hfy-tags-rmap f-ext l-ext hfy-link-extn directory-file-name "SETME: list of source files, relative to srcdir" assoc ".html" message "autoload of tags cache" hfy-load-tags-cache clrhash hfy-make-directory hfy-list-files nil hfy-copy-and-fontify-file hfy-subtract-maps hfy-save-kill-buffers hfy-prepare-index hfy-prepare-tag-map hfy-extn tr-cache source-files x file --dolist-tail--] 5 (#$ . 65495) "D source directory: \nD output directory: "]) #@76 Return the expected location of the htmlfontify specific init/custom file. (defalias 'hfy-initfile #[nil "\301\302!\206\303\304\305\")\207" [file getenv "HFY_INITFILE" ".hfy.el" expand-file-name "~"] 3 (#$ . 66487)]) (defalias 'hfy-init-progn 'progn) (defalias 'hfy-save-initvar #[(sym) "\301\302\303\"!\210\304J!\210\301\305!\207" [sym princ format "(setq %s\n '" pp ")\n"] 4]) #@61 Save the htmlfontify settings to the htmlfontify init file. (defalias 'htmlfontify-save-initfile #[nil "\303\304 \305 \306\"\212\307\310!\210`\311\312!\210\313\314\315\"\210\311\316!\210\317`\303#\210)\320 +\207" [start-pos custom-file standard-output nil hfy-initfile find-file-noselect nowarn custom-save-delete hfy-init-progn princ "(hfy-init-progn\n;;auto-generated, only one copy allowed\n" mapc hfy-save-initvar (auto-mode-alist interpreter-mode-alist) ")\n" indent-region custom-save-all] 4 (#$ . 66878) nil]) #@49 Load the htmlfontify specific init/custom file. (defalias 'htmlfontify-load-initfile #[nil "\301 \302\303\304\211$)\207" [file hfy-initfile load NOERROR nil] 5 (#$ . 67406) nil]) #@199 Load an X11 style rgb.txt FILE. Search `hfy-rgb-load-path' if FILE is not specified. Loads the variable `hfy-rgb-txt-colour-map', which is used by `hfy-fallback-colour-values'. (fn &optional FILE) (autoload 'htmlfontify-load-rgb-file "hfy-cmap" '(#$ . 67594) t nil) #@85 Use a fallback method for obtaining the rgb values for a color. (fn COLOUR-STRING) (autoload 'hfy-fallback-colour-values "hfy-cmap" '(#$ . 67867) nil nil) (provide 'htmlfontify)