%D \module %D [ file=s-inf-01, %D version=2009.07.09, %D title=\CONTEXT\ Style File, %D subtitle=Information 1 (\MKII/\MKIV\ usage), %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. %D Some day I will generalize this table mechanism. This list is only %D right when run in the minimals as my machine might have more files. %D %D Als, the remaining tex code can proably be lua also which is more %D consistent. %D %D \starttyping %D context auto:s-inf-01 %D context auto:s-inf-01 --basepath=t:/texmf/tex/context/base %D \stoptyping % \enabletrackers[context.*] \startluacode local format, gsub, find, match = string.format, string.gsub, string.find, string.match local setmetatableindex = table.setmetatableindex local list = { } local size = { } local comp = { } local nope = setmetatableindex("number") local omit = { "char%-def%.lua", "mult%-def%.lua", "mult%-..%.mkii", "mult%-m..%.mkii", } local skip = { "prag%-.*%.tex", "docs%-.*.tex", "list%-.*%.tex", "test%-.*%.tex", "demo%-.*%.tex", "opti%-.*%.tex", "chrt%-.*%.tex", ".*%-old", ".*%-obs", ".*%-tst", "supp%-.*%.tex", "colo%-pan.tex", ".*test.*" } local types = { "tex", "mkii", "mkiv", "mkvi", "lua", "mkxl", "mklx", "lmt" -- "mpiv" } local patterns = { "^([a-z][a-z][a-z][a-z])%-[a-z0-9%-]+%.[a-z]+", "^([xms])%-[a-z0-9%-]+%.[a-z]+", } local function collect(list,suffix,n) local path = document.arguments.basepath or file.dirname(resolvers.find_file("context.mkiv"),".") local pattern = path .. "/*." .. suffix .. "$" -- avoid bla.tex~ local texfiles = dir.glob(pattern) for i=1,#texfiles do local name = texfiles[i] local base = file.basename(name) for p=1,#patterns do local category = match(base,patterns[p]) if category and lfs.isfile(name) then local okay = true for s=1,#skip do if find(base,skip[s]) then okay = false break end end if okay then local lm = list[category] local sm = size[category] local cm = comp[category] if not lm then lm = setmetatableindex("number") sm = setmetatableindex("number") cm = setmetatableindex("number") list[category] = lm size[category] = sm comp[category] = cm end lm[n] = lm[n] + 1 local done = true for o=1,#omit do if find(base,omit[o]) then done = false break end end local data = io.loaddata(name) if data then if suffix == "lua" or suffix == "lmt" then data = gsub(data,"%-%-%[%[.-%]%]%-%-","") data = gsub(data,"%-%-.-[\n\r]","") else data = gsub(data,"%%.-[\n\r]","") end data = gsub(data,"%s","") else logs.report("error","unknown file %a",name) data = "" end sm[n+#types] = sm[n+#types] + #data if done then sm[n] = sm[n] + #data else cm[n] = cm[n] + 1 end end end end end end local function prepare(what) if next(list) then -- already loaded else for i=1,#types do collect(list,types[i],i) end end local max, what = 0, (what == "size" and size) or list for k, v in table.sortedpairs(what) do for i=1,7 do if v[i] > max then max = v[i] end end end return max, what, function(n) return (max == 0 and 0) or (n == 0 and 0) or n/max end end local f_norm = string.formatters["%0.3f"] function document.context_state_1(what) local max, what, norm = prepare(what) context.starttabulate { "|Tl|T|T|T|T|T|T|T|T|" } context.NC() context("category") context.NC() for i=1,#types do local n, m = 0, 0 for k, v in next, list do local nn = what[k][i] local mm = what[k][i+#types] n = n + nn m = m + (mm or nn) end context.Top(types[i],norm(max),n,m) context.NC() end -- context.NC() context.NR() context.HL() for k, v in table.sortedpairs(what) do local c = what == size and comp[k] or nope context.NC() context(k) context.NC() for i=1,#types do context.Bar(types[i],v[i],c[i],f_norm(norm(v[i]))) context.NC() end context.NR() end context.stoptabulate() end function document.context_state_2(what) local max, what, norm = prepare(what) for k, v in table.sortedpairs(what) do local c = (what == size and comp[k]) or nope context.StartUp(k) for i=1,#types do context.Up(types[i],f_norm(norm(v[i]))) end context.StopUp() end end \stopluacode \definecolor[bar:tex] [middlegreen] \definecolor[bar:mkii][middleblue] \definecolor[bar:mkiv][middlered] \definecolor[bar:mkvi][middleyellow] \definecolor[bar:mkxl][middlemagenta] \definecolor[bar:mklx][middlecyan] \definecolor[bar:lua] [middlegray] \definecolor[bar:lmt] [middleorange] \newcount\UpCounter \starttexdefinition Top #what#fraction#total#bigones \hbox to 7em{\hss#total}% \enspace \hbox to 4em{{{\bf#what}\ifnum#total=#bigones\else\ifnum#bigones>0~#bigones\rlap{~+}\fi\fi\hss}}% \stoptexdefinition \starttexdefinition Bar #color#size#nobigones#fraction \ifcase#size\else \hbox to 7em{\hss\ifcase#nobigones\else\llap{-~}\fi#size}% \enspace \blackrule[color=bar:#color,width=#fraction\dimexpr 20em\relax,height=.8\strutht]% % \quad % \quad \fi \stoptexdefinition \starttexdefinition StartUp #name \def\UpName{#name}% \dontleavehmode\framed[frame=off,align={middle,low},height=18em]\bgroup \stoptexdefinition \starttexdefinition StopUp \par\nointerlineskip\blackrule[height=1pt,width=7em,depth=0pt,color=darkgray] \par\tttf\strut\UpName\par \egroup \ifnum\UpCounter=17 \par \UpCounter\zerocount \else \kern1em \advance\UpCounter\plusone \fi \stoptexdefinition \starttexdefinition Up #color#width % \scratchdimen#width\dimexpr 16em\relax \scratchdimen#width\dimexpr 40em\relax \ifdim\scratchdimen=\zeropoint \kern1em \else\ifdim\scratchdimen>13em \blackrule[color=bar:#color,height=15em,width=1em]% \hskip-1.1em \blackrule[color=white,height=14em,width=1.2em]% \hskip-1.1em \blackrule[color=bar:#color,height=13em,width=1em]% \else \ifdim\scratchdimen<\onepoint \scratchdimen\onepoint \fi \blackrule[color=bar:#color,height=\scratchdimen,width=1em]% \fi\fi \stoptexdefinition \starttexdefinition Show #title#how#what \startTEXpage[offset=1em,width=fit] \hbox{\tttf\strut\currentdate~-~#title} \blank[line] \ctxlua{document.context_state_\number#how("#what")} \stopTEXpage \stoptexdefinition % \continueifinputfile{s-inf-01.mkvi} \starttext \Show {The number of files used in ConTeXt (base modules and styles).} {1}{number} \Show {The size of (core) files used in ConTeXt (- : large data files excluded; + : large data files included; comment and spaces removed)} {1}{size} \Show {The relative number of files used in ConTeXt (tex, mkii, mkiv, mkvi, mkxl, mklx, lua, lmt).} {2}{number} \Show {The relative size of files used in ConTeXt (tex, mkii, mkiv, mkvi, mkxl, mklx, lua, lmt).} {2}{size} \stoptext