summaryrefslogtreecommitdiff
path: root/tex/context/base/s-inf-01.tex
diff options
context:
space:
mode:
Diffstat (limited to 'tex/context/base/s-inf-01.tex')
-rw-r--r--tex/context/base/s-inf-01.tex203
1 files changed, 203 insertions, 0 deletions
diff --git a/tex/context/base/s-inf-01.tex b/tex/context/base/s-inf-01.tex
new file mode 100644
index 000000000..a2a693ae2
--- /dev/null
+++ b/tex/context/base/s-inf-01.tex
@@ -0,0 +1,203 @@
+%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 / Hans Hagen \& Ton Otten}]
+%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.
+
+\startluacode
+ local format, gsub, find, match = string.format, string.gsub, string.find, string.match
+ local texsprint, ctxcatcodes = tex.sprint, tex.ctxcatcodes
+
+ local list, size, comp, used, nope = { }, { }, { }, { mkii = { }, mkiv = { } }, { 0, 0, 0, 0 }
+
+ local omit = {
+ "char%-def%.lua",
+ "mult%-def%.lua", "mult%-..%.tex", "mult%-m..%.tex",
+ }
+ local skip = {
+ "prag%-.*%.tex", "docs%-.*.tex", "list%-.*%.tex", "test%-.*%.tex", "demo%-.*%.tex",
+ "opti%-.*%.tex", "chrt%-.*%.tex",
+ }
+ local types = {
+ "tex", "mkii", "mkiv", "lua"
+ }
+
+ local function collect(list,suffix,n)
+ local path = file.dirname(resolvers.find_file("context.tex"),".")
+ local pattern = path .. "/*." .. suffix
+ local texfiles = dir.glob(pattern)
+ for _, name in ipairs(texfiles) do
+ local base = file.basename(name)
+ local category = match(base,"^([a-z][a-z][a-z][a-z])%-[a-z0-9]+%.[a-z]+")
+ 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, sm, cm = list[category], size[category], comp[category]
+ if not lm then
+ lm, sm, cm = { 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0 }
+ list[category], size[category], comp[category] = lm, sm, 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 suffix == "lua" then
+ data = gsub(data,"%-%-%[%[.-%]%]%-%-","")
+ data = gsub(data,"%-%-.-[\n\r]","")
+ else
+ data = gsub(data,"%%.-[\n\r]","")
+ end
+ data = gsub(data,"%s","")
+ sm[n+4] = sm[n+4] + #data
+ if done then
+ sm[n] = sm[n] + #data
+ else
+ cm[n] = cm[n] + 1
+ end
+ end
+ end
+ end
+ end
+
+ local function prepare(what)
+ if next(list) then
+ -- already loaded
+ else
+ for k, v in ipairs(types) do
+ collect(list,v,k)
+ end
+ for category, _ in pairs(list) do
+ pattern ="{"..category.."%-"
+ for suffix, t in pairs(used) do
+ local data = io.loaddata(resolvers.find_file("context."..suffix))
+ if find(data,pattern) then
+ t[category] = true
+ end
+ end
+ end
+ end
+ local max, what = 0, (what == "size" and size) or list
+ for k, v in table.sortedpairs(what) do
+ for i=1,4 do if v[i] > max then max = v[i] end end
+ end
+ return max, what, function(n) return n/max end
+ end
+
+ function document.context_state_1(what)
+ local max, what, norm = prepare(what)
+ texsprint(ctxcatcodes,"\\starttabulate[|Tc|T|T|T|T|]")
+ texsprint(ctxcatcodes,"\\NC category\\NC")
+ for i, t in ipairs(types) do
+ local n, m = 0, 0
+ for k, v in pairs(list) do
+ local nn, mm = what[k][i], what[k][i+4]
+ n = n + nn
+ m = m + (mm or nn)
+ end
+ texsprint(ctxcatcodes,format("\\Top{%s}{%s}{%s}{%s}\\NC",t,norm(max),n,m))
+ end
+ texsprint(ctxcatcodes,"\\NC\\NR\\HL")
+ for k, v in table.sortedpairs(what) do
+ local c = (what == size and comp[k]) or nope
+ local cat = format("%s~%s~~%s",(used.mkii[k] and "ii") or "~~",(used.mkiv[k] and "iv") or "~~",k)
+ texsprint(ctxcatcodes,"\\NC",cat,"\\NC")
+ for i, t in ipairs(types) do
+ texsprint(ctxcatcodes,format("\\Bar{%s}{%s}{%s}{%s}\\NC",t,v[i],c[i],norm(v[i])))
+ end
+ texsprint(ctxcatcodes,"\\NR")
+ end
+ texsprint(ctxcatcodes,"\\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
+ texsprint(ctxcatcodes,format("\\StartUp{%s}",k))
+ for i, t in ipairs(types) do
+ texsprint(ctxcatcodes,format("\\Up{%s}{%s}",t,norm(v[i])))
+ end
+ texsprint(ctxcatcodes,"\\StopUp")
+ end
+ end
+
+\stopluacode
+
+\definecolor[bar:tex] [middlegreen]
+\definecolor[bar:mkii][middleblue]
+\definecolor[bar:mkiv][middlered]
+\definecolor[bar:lua] [middlegray]
+
+\def\Top#1#2#3#4%
+ {\hbox to 5em{\hss#3}%
+ \enspace
+ \hbox to #2\dimexpr 20em\relax{#1\ifnum#3=#4\else~#4\rlap{~+}\fi\hss}}
+
+\def\Bar#1#2#3#4%
+ {\ifcase#2\else
+ \hbox to 5em{\hss\ifcase#3\else\llap{-~}\fi#2}%
+ \enspace
+ \blackrule[color=bar:#1,width=#4\dimexpr 20em\relax,height=.8\strutht]%
+ \fi}
+
+\newcount\UpCounter
+
+\def\StartUp#1%
+ {\dontleavehmode\framed[frame=off,align={middle,low},height=18em]\bgroup
+ \def\StopUp
+ {\par\nointerlineskip\blackrule[height=1pt,width=4em,depth=0pt,color=darkgray]%
+ \par\tttf\strut#1\par
+ \egroup
+ \ifnum\UpCounter=17 \par \UpCounter\zerocount\else \kern1em \advance\UpCounter\plusone \fi}}
+
+\def\Up#1#2%
+ {\scratchdimen#2\dimexpr 16em\relax
+ \ifdim\scratchdimen=\zeropoint
+ \kern1em
+ \else
+ \ifdim\scratchdimen<\onepoint \scratchdimen\onepoint \fi
+ \blackrule[color=bar:#1,height=\scratchdimen,width=1em]%
+ \fi}
+
+\def\Show#1#2#3%
+ {\startTEXpage[offset=1em,width=fit]
+ \hbox{\tttf\strut\currentdate~-~#1}
+ \ctxlua{document.context_state_\number#2("#3")}
+ \stopTEXpage}
+
+% \doifnotmode{demo}{\endinput}
+
+\starttext
+ \Show
+ {The number of files used in ConTeXt (modules and styles are excluded).}
+ {1}{number}
+ \Show
+ {The size of (core) files used in ConTeXt (- indicates exclusion of large data files; + indicates inclusion of large data files; comment and spaces removed.)}
+ {1}{size}
+ \Show
+ {The relative number of files used in ConTeXt (tex, mkii, mkiv, lua).}
+ {2}{number}
+ \Show
+ {The relative size of files used in ConTeXt (tex, mkii, mkiv, lua).}
+ {2}{size}
+\stoptext