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/info-xref.elc
;ELC ;;; Compiled by mockbuild@buildfarm01-new.corp.cloudlinux.com on Tue Nov 11 12:48:25 2025 ;;; from file /builddir/build/BUILD/emacs-24.3/lisp/info-xref.el ;;; in Emacs version 24.3.1 ;;; with all optimizations. ;;; This file uses dynamic docstrings, first added in Emacs 19.29. ;;; This file does not contain utf-8 non-ASCII characters, ;;; and so can be loaded in Emacs versions earlier than 23. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (require 'info) #@101 Return non-nil if FILENAME is an Emacs lock file. A lock file is ".#foo.txt" etc per `lock-buffer'. (defalias 'info-xref-lock-file-p #[(filename) "\301\302\"\207" [filename string-match "\\(\\`\\|\\/\\)\\.#"] 3 (#$ . 569)]) #@259 Return t if FILENAME is an info subfile. If removing the last "-<NUM>" from the filename gives a file which exists, then consider FILENAME a subfile. This is an imperfect test, probably ought to open up the purported top file and see what subfiles it says. (defalias 'info-xref-subfile-p #[(filename) "\301\302\"\205\303\304\305\"\304\306\"P!\207" [filename string-match "\\`\\(\\([^-]*-\\)*[^-]*\\)-[0-9]+\\(.*\\)\\'" file-exists-p match-string 1 3] 5 (#$ . 801)]) #@425 Evaluate BODY in a buffer containing the contents of FILENAME. If FILENAME is already in a buffer then that's used, otherwise a temporary buffer. The current implementation uses `insert-file-contents' rather than `find-file-noselect' so as not to be held up by queries about local variables or possible weirdness in a major mode. `lm-with-file' does a similar thing, but it sets `emacs-lisp-mode' which is not wanted here. (defalias 'info-xref-with-file '(macro . #[(filename &rest body) "\302\303D\304\305\306 BBD\307BB\310\311\312\313\314D\315BBFE\207" [filename body let* info-xref-with-file--filename info-xref-with-file--body lambda nil ((info-xref-with-file--existing (find-buffer-visiting info-xref-with-file--filename))) if info-xref-with-file--existing (with-current-buffer info-xref-with-file--existing (save-excursion (funcall info-xref-with-file--body))) with-temp-buffer insert-file-contents ((funcall info-xref-with-file--body))] 8 (#$ . 1280)])) (byte-code "\300\301\302\303#\210\300\301\304\305#\207" [put info-xref-with-file edebug-form-spec t lisp-indent-function 1] 4) #@43 Name of the buffer for info-xref results. (defconst info-xref-output-buffer "*info-xref results*" (#$ . 2377)) #@62 Count of good cross references, during info-xref processing. (defvar info-xref-good 0 (#$ . 2494)) #@61 Count of bad cross references, during info-xref processing. (defvar info-xref-bad 0 (#$ . 2599)) #@69 Count of unavailable cross references, during info-xref processing. (defvar info-xref-unavail 0 (#$ . 2702)) #@106 A heading string, during info-xref processing. This is shown if there's an error, but not if successful. (defvar info-xref-output-heading "" (#$ . 2818)) #@160 The current buffer's filename, during info-xref processing. When looking at file contents in a temp buffer there's no `buffer-file-name', hence this variable. (defvar info-xref-filename nil (#$ . 2979)) #@280 Info files found or not found, during info-xref processing. Key is "(foo)" etc and value nil or t according to whether info manual "(foo)" exists or not. This is used to suppress duplicate messages about foo not being available. (Duplicates within one top-level file that is.) (defvar info-xref-xfile-alist nil (#$ . 3189)) (defvar info-xref-in-progress nil) #@288 Run BODY with an info-xref output buffer. This is meant to nest, so you can wrap it around a set of different info-xref checks and have them write to the one output buffer created by the outermost `info-xref-with-output', with an overall good/bad count summary inserted at the very end. (defalias 'info-xref-with-output '(macro . #[(&rest body) "\301\302\303\304BB\305BBB\207" [body save-excursion (unless info-xref-in-progress (display-buffer (get-buffer-create info-xref-output-buffer)) (set-buffer info-xref-output-buffer) (setq buffer-read-only nil) (fundamental-mode) (erase-buffer) (insert ";; info-xref output -*- mode: compilation -*-\n\n") (compilation-mode) (setq info-xref-good 0 info-xref-bad 0 info-xref-unavail 0 info-xref-xfile-alist nil)) let ((info-xref-in-progress t) (info-xref-output-heading "")) ((unless info-xref-in-progress (info-xref-output "done, %d good, %d bad, %d unavailable" info-xref-good info-xref-bad info-xref-unavail)))] 5 (#$ . 3557)])) (put 'info-xref-with-output 'edebug-form-spec t) #@71 Emit a `format'-ed message FMT+ARGS to the `info-xref-output-buffer'. (defalias 'info-xref-output #[(fmt &rest args) "rq\210\212db\210\305\n\306\307 \f#\310\261\210*\311\312\313!)\207" [info-xref-output-buffer inhibit-read-only info-xref-output-heading fmt args t apply format "\n" "" sit-for 0] 5 (#$ . 4587)]) (put 'info-xref-output 'byte-compile-format-like t) #@168 Emit a `format'-ed error FMT+ARGS to the `info-xref-output-buffer'. The error is attributed to `info-xref-filename' and the current buffer's line and column of point. (defalias 'info-xref-output-error #[(fmt &rest args) "\303\304\305P \306e\307 \"TiT\n&\207" [fmt info-xref-filename args apply info-xref-output "%s:%s:%s: " count-lines line-beginning-position] 7 (#$ . 4962)]) (put 'info-xref-output-error 'byte-compile-format-like t) #@52 Return t if it's possible to go to the given NODE. (defalias 'info-xref-goto-node-p #[(node) "p\212\302 \303\216\304\305\306\217p\232\204\307 \210,\207" [oldbuf #1=#:wconfig current-window-configuration ((set-window-configuration #1#)) nil (byte-code "\301\302\303!\205\f\303q\210\304\"\210\305\207" [node Info-goto-node get-buffer "*info*" "xref - temporary" t] 4) ((error)) kill-buffer] 3 (#$ . 5405)]) (defalias 'info-xref-check-node #[(node) "\306\307\310\311\211%\312\313\"\204\314\315\"\207\316\317\"\211\320\230\203&\314\321\"\202f\322 \n\"\204A\323 ! B\nB \204@\314\324 \"\210)\322 \n\"A\204P\fT\211\202f\323!\203] T\211\202fT\314\325\")\207" [node file info-xref-xfile-alist found info-xref-unavail info-xref-good replace-regexp-in-string "[ \n][ \n ]*\\| [ \n ]+" " " t string-match "\\`([^)]*)" info-xref-output-error "no `(file)' part at start of node: %s\n" match-string 0 "()" "empty filename part: %s" assoc info-xref-goto-node-p "not available to check: %s\n (this reported once per file)" "no such node: %s" info-xref-bad] 7]) #@1169 Check external references in FILENAME, an info document. Interactively from an `Info-mode' or `texinfo-mode' buffer the current info file is the default. Results are shown in a `compilation-mode' buffer. The format is a bit rough, but there shouldn't be many problems normally. The file:line:column: is the info document, but of course normally any correction should be made in the original .texi file. Finding the right place in the .texi is a manual process. When a target info file doesn't exist there's obviously no way to validate node references within it. A message is given for missing target files once per source document. It could be simply that you don't have the target installed, or it could be a mistake in the reference. Indirect info files are understood, just pass the top-level foo.info to `info-xref-check' and it traverses all sub-files. Compressed info files are accepted too as usual for `Info-mode'. "makeinfo" checks references internal to an info document, but not external references, which makes it rather easy for mistakes to creep in or node name changes to go unnoticed. `Info-validate' doesn't check external references either. (defalias 'info-xref-check #[(filename) "\301C!\207" [filename info-xref-check-list] 2 (#$ . 6495) (list (let* ((default-filename (cond ((eq major-mode 'Info-mode) Info-current-file) ((eq major-mode 'texinfo-mode) (save-excursion (goto-char (point-min)) (if (re-search-forward "^@setfilename[ ]+\\([^ \n]+\\)[ ]*" (line-beginning-position 100) t) (expand-file-name (match-string 1))))))) (prompt (if default-filename (format "Info file (%s): " default-filename) "Info file: "))) (read-file-name prompt nil default-filename t)))]) #@527 Check external references in all info documents in the info path. `Info-directory-list' and `Info-additional-directory-list' are the info paths. See `info-xref-check' for how each file is checked. The search for "all" info files is rather permissive, since info files don't necessarily have a ".info" extension and in particular the Emacs manuals normally don't. If you have a source code directory in `Info-directory-list' then a lot of extraneous files might be read. This will be time consuming but should be harmless. (defalias 'info-xref-check-all #[nil "\300\301 !\207" [info-xref-check-list info-xref-all-info-files] 2 (#$ . 8204) nil]) #@309 Return a list of all available info files. Only top level files are returned, subfiles are excluded. Since info files don't have to have a .info suffix, all files in the relevant directories are considered, which might mean a lot of extraneous things if for instance a source code directory is in the path. (defalias 'info-xref-all-info-files #[nil "\302 \210\303\304\305\306\307 \"\"\"\207" [Info-directory-list Info-additional-directory-list info-initialize apply nconc mapcar #[(dir) "\304\305 \306\307#\304\211\203; @\310\n!\2034\311\312\n\"\2044\313\n!\2044\314\n!\2044\315\n!\2044\nB A\211\204*\237)\207" [result dir name --dolist-tail-- nil directory-files t "\\`[^.]" file-exists-p string-match "\\.te?xi\\'" backup-file-name-p file-directory-p info-xref-subfile-p] 5] append] 7 (#$ . 8859)]) #@63 Check external references in info documents in FILENAME-LIST. (defalias 'info-xref-check-list #[(filename-list) "\212\204%\306\307 !!\210 q\210\310\311 \210\312 \210\313c\210\314 \210\315\211\315\310'\316\317()\310*\211+\203\275+@*\310'\320\321*\"(\320\322*\"\310,-\323\216-\203_\324 ,\325\326-\"\210\327\330!.r.q\210\331\216\332*!\210eb\210\333\334\310\316#\203\257\335*!/\336\337!\203\253\340\341\342!/\"*\327\330!0r0q\210\343\216\332*!\210\344 \210,\310y\210\202\201)\202\262\344 \210.+A\211+\2045,?\205\311\345\346 \f $)\207" [info-xref-in-progress info-xref-output-buffer buffer-read-only info-xref-good info-xref-bad info-xref-unavail display-buffer get-buffer-create nil fundamental-mode erase-buffer ";; info-xref output -*- mode: compilation -*-\n\n" compilation-mode 0 t "" format "Info file %s\n" "Looking at %s" ((byte-code "\203 \203\302\303 \"\210\202\302\304!\210\304\207" [#1=#:with-temp-message #2=#:current-message message #3="%s" nil] 3)) current-message message #3# generate-new-buffer " *temp*" ((byte-code "\301!\203\n\302!\210\301\207" [#4=#:temp-buffer buffer-name kill-buffer] 2)) info-insert-file-contents search-forward "\nIndirect:\n" file-name-directory looking-at "\\(.*\\): [0-9]+\n" expand-file-name match-string 1 ((byte-code "\301!\203\n\302!\210\301\207" [#5=#:temp-buffer buffer-name kill-buffer] 2)) info-xref-check-buffer info-xref-output "done, %d good, %d bad, %d unavailable" info-xref-xfile-alist info-xref-output-heading filename-list info-xref-filename --dolist-tail-- #2# #1# #4# dir #5#] 6 (#$ . 9684)]) #@122 Check external references in the info file in the current buffer. This should be the raw file contents, not `Info-mode'. (defalias 'info-xref-check-buffer #[nil "eb\210\300\301\302\303#\205\212\304\224b\210\305\306\304!!\210)\202\207" [re-search-forward "\\*[Nn]ote[ \n ]+[^:]*:[ \n ]+\\(\\(([^)]*)\\)[^.,]+\\)[.,]" nil t 1 info-xref-check-node match-string] 4 (#$ . 11300)]) #@320 Check info references in all customize groups and variables. Info references can be in `custom-manual' or `info-link' entries of the `custom-links' for a variable. Any `custom-load' autoloads in variables are loaded in order to get full link information. This will be a lot of Lisp packages and can take a long time. (defalias 'info-xref-check-all-custom #[nil "\212\204%\306\307 !!\210 q\210\310\311 \210\312 \210\313c\210\314 \210\315\211\315\310\316\317\320\321!\210\322\323!\210\322\324!\210\325\326!\204?\310\325\327!\204H\310\330\331!\210\320\332!\210\330\333!\210*?\205`\320\334 \f $)\207" [info-xref-in-progress info-xref-output-buffer buffer-read-only info-xref-good info-xref-bad info-xref-unavail display-buffer get-buffer-create nil fundamental-mode erase-buffer ";; info-xref output -*- mode: compilation -*-\n\n" compilation-mode 0 t "" info-xref-output "Loading custom-load autoloads ..." require cus-start cus-load boundp viper-mode gnus-registry-install mapatoms #[(symbol) "\304N\305\211\2057\n@\2119\203\306\307\310\217\210\202/\311 \"\204/\311\312 ! \"\204/\313\314\315\217\210\nA\211\204\n\305*\207" [symbol load --dolist-tail-- load-history custom-loads nil cause (require load) ((error (info-xref-output "Symbol `%s': cannot require '%s: %s" symbol load cause))) assoc locate-library err (load load) ((error (byte-code "\303\304 \305\n!$\207" [symbol load err info-xref-output "Symbol `%s': cannot load \"%s\": %s" error-message-string] 6)))] 4] "\nChecking custom-links references ..." #[(symbol) "\306N\307\211\205Q\n@\211@\310>\203I \211A@)\311=\203& \211AA)\312 \211A@)!\2037\fT\202I T\313\314\315\316\" \211A@)$\210\nA\211\204\n\307*\207" [symbol link --dolist-tail-- x info-xref-good info-xref-bad custom-links nil (custom-manual info-link) :tag info-xref-goto-node-p info-xref-output "Symbol `%s' (file %s): cannot goto node: %s" symbol-file defvar] 7] "done, %d good, %d bad, %d unavailable" info-xref-xfile-alist info-xref-output-heading] 6 (#$ . 11687) nil]) #@794 Check docstring info node references in source files. The given files are searched for docstring hyperlinks like Info node `(elisp)Documentation Tips' and those links checked by attempting to visit the target nodes as per `info-xref-check' does. Interactively filenames are read as a wildcard pattern like "foo*.el", with the current file as a default. Usually this will be lisp sources, but anything with such hyperlinks can be checked, including the Emacs .c sources (or the etc/DOC file of all builtins). Because info node hyperlinks are found by a simple regexp search in the files, the Lisp code checked doesn't have to be loaded, and links can be in the file commentary or elsewhere too. Even .elc files can usually be checked successfully if you don't have the sources handy. (defalias 'info-xref-docstrings #[(filename-list) "\306\307!\210\212\204)\310\311 !!\210 q\210\312\313 \210\314 \210\315c\210\316 \210\317\211\317\312\320\321\312\211\203\200@\312\322 \323!\211!\203`r!q\210\212 \210*\202v\324\325!\"r\"q\210\326\216\327!\210 \210++A\211\2049,?\205\214\330\331 \f $)\207" [info-xref-in-progress info-xref-output-buffer buffer-read-only info-xref-good info-xref-bad info-xref-unavail require help-mode display-buffer get-buffer-create nil fundamental-mode erase-buffer ";; info-xref output -*- mode: compilation -*-\n\n" compilation-mode 0 t "" #[nil "eb\210\302\303\304#\205.\305\306!\212\306\224b\210\307\310 \"\204*\307\311 \"\204&\312 P\313 !\210*\202\207" [help-xref-info-regexp node re-search-forward nil t match-string 2 string-match "%" "\\`(" "(emacs)" info-xref-check-node] 4] find-buffer-visiting generate-new-buffer " *temp*" ((byte-code "\301!\203\n\302!\210\301\207" [#1=#:temp-buffer buffer-name kill-buffer] 2)) insert-file-contents info-xref-output "done, %d good, %d bad, %d unavailable" info-xref-xfile-alist info-xref-output-heading filename-list info-xref-filename --dolist-tail-- info-xref-with-file--filename info-xref-with-file--body info-xref-with-file--existing #1#] 6 (#$ . 13741) (let* ((default (and buffer-file-name (file-relative-name buffer-file-name))) (prompt (if default (format "Filename with wildcards (%s): " default) "Filename with wildcards: ")) (pattern (read-file-name prompt nil default)) (filename-list (file-expand-wildcards pattern t)) newlist) (setq filename-list (let ((--dolist-tail-- filename-list) file) (while --dolist-tail-- (setq file (car --dolist-tail--)) (or (info-xref-lock-file-p file) (file-directory-p file) (setq newlist (cons file newlist))) (setq --dolist-tail-- (cdr --dolist-tail--))) (setq file nil) (nreverse newlist))) (if filename-list nil (error "No files: %S" pattern)) (list filename-list))]) (provide 'info-xref)