1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69\unprotect
70
71
72
73\setupxml
74 [\c!entities=\v!yes]
75
76
77
78\defineregister
79 [texmacro]
80
81\definesorting
82 [texcommand]
83 [texcommands]
84 [\v!none]
85
86\setupsorting
87 [texcommand]
88 [\c!command=\showsetupinlist,
89 \c!criterium=\setupparameter\c!criterium]
90
91\pushmacro\setuptext
92
93\ifcase\contextlmtxmode \else \pushoverloadmode \let\setuptext\setuptext \popoverloadmode \fi
94
95\defineframedtext
96 [setuptext]
97 [\c!width=\hsize,
98 \c!height=\v!fit,
99 \c!align=\v!right,
100 \c!offset=0.75\emwidth]
101
102\popmacro\setuptext
103
104\installcorenamespace{interfacesetup}
105
106\installsetuponlycommandhandler \??interfacesetup {setup}
107
108\setupsetup
109 [\c!before=,
110 \c!after=,
111 \c!command=\setup,
112 \c!criterium=\v!used]
113
114
115
116\unexpanded\def\setupnumfont {}
117\unexpanded\def\setuptxtfont {}
118\unexpanded\def\setupintfont {\WORD}
119\unexpanded\def\setupvarfont {\sl}
120\unexpanded\def\setupoptfont {\sl}
121\unexpanded\def\setupalwcolor{}
122\unexpanded\def\setupoptcolor{darkgray}
123
124\unexpanded\def\setupvarword#1{\detokenize{#1}}
125\unexpanded\def\setupintword#1{\WORD{\detokenize{#1}}}
126\unexpanded\def\setuptxtword#1{\detokenize{#1}}
127
128\unexpanded\def\cmd_internal_value#1
129 {\dontleavehmode
130 \begingroup
131 \setupintfont{#1}
132 \endgroup}
133
134\unexpanded\def\cmd_text_value#1
135 {\dontleavehmode
136 \begingroup
137 \setupvarfont{#1}
138 \endgroup}
139
140\unexpanded\def\cmd_command_value#1
141 {\begingroup
142 \setupvarfont{#1}
143 \endgroup}
144
145
146
147\let\currentSETUPfullname\s!unknown
148
149\startxmlsetups xml:setups:assemblename
150 \doifelse {\xmlatt{#1}{type}} {environment} {
151 \doifsomethingelse {\xmlatt{#1}{begin}} {
152 \edef\currentSETUPprefix{\xmllastatt}
153 } {
154 \let\currentSETUPprefix\e!start
155 }
156 } {
157 \let\currentSETUPprefix\empty
158 }
159 \edef\currentSETUPname{\xmlatt{#1}{name}}
160 \doifelsenothing {\xmlatt{#1}{variant}} {
161 \let\currentSETUPvariant\empty
162 } {
163 \def\currentSETUPvariant{:\xmllastatt}
164 }
165 \edef\currentSETUPfullname {
166 \currentSETUPprefix
167 \currentSETUPname
168 \currentSETUPvariant
169 }
170\stopxmlsetups
171
172\startxmlsetups xml:setups:assemblename:instance
173 \doifelse {\xmlatt{#1}{type}} {environment} {
174 \doifsomethingelse {\xmlatt{#1}{begin}} {
175 \edef\currentSETUPprefix{\xmllastatt}
176 } {
177 \let\currentSETUPprefix\e!start
178 }
179 } {
180 \let\currentSETUPprefix\empty
181 }
182 \edef\currentSETUPname{\xmlatt{#1}{name}}
183 \doifelsenothing {\xmlatt{#1}{variant}} {
184 \let\currentSETUPvariant\empty
185 } {
186 \def\currentSETUPvariant{:\xmllastatt}
187 }
188 \edef\currentSETUPfullname {
189 \currentSETUPprefix
190 \currentSETUPname
191 \currentSETUPvariant
192 }
193\stopxmlsetups
194
195\startxmlsetups xml:setups:register
196 \doifcommon {\xmlatt{#1}{variant}} {instance,instance:assignment,instance:ownnumber,instance:argument} {
197 \def\docommand##1{
198 \xmlsetup{#1}{xml:setups:assemblename:instance}
199 \expanded{\texcommand[\currentSETUPfullname:##1]{{#1}{##1}}}
200 }
201 \processcommacommand[\clf_getinstances{#1}]\docommand
202 }
203 \xmlsetup{#1}{xml:setups:assemblename}
204 \expanded{\texcommand[\currentSETUPfullname]{{#1}{}}}
205\stopxmlsetups
206
207\startluacode
208
209 local find, gsub = string.find, string.gsub
210
211 local xmlcollected = xml.collected
212 local xmlcount = xml.count
213 local xmlfirst = xml.first
214
215 local lxmlgetid = lxml.getid
216 local lxmlflush = lxml.flush
217
218 local context = context
219
220 local setupvarword = context.formatted.setupvarword
221 local setupintword = context.formatted.setupintword
222 local setuptxtword = context.formatted.setuptxtword
223
224 local getsetupstring = interfaces.getsetupstring
225
226
227
228
229 local setups = moduledata.setups or { }
230 moduledata.setups = setups
231 local definitions = { }
232 setups.definitions = definitions
233
234 local report = logs.reporter("command setup")
235 local report_known = logs.reporter("command setup","known")
236
237 function xml.functions.setups_define(id)
238 local x = lxmlgetid(id)
239 for c in xmlcollected(x,"cd:interface/cd:define") do
240 definitions[c.at.name] = c
241 end
242 for c in xmlcollected(x,"cd:interface/cd:interface") do
243 c.at.file = c.__f__
244 c.at["xmlns:cd"] = nil
245
246 end
247
248 local interface = interfaces.currentinterface or "en"
249
250 if interface ~= "en" then
251
252 local constants = interfaces.complete.constants
253 local variables = interfaces.complete.variables
254 local commands = interfaces.complete.commands
255 local elements = interfaces.complete.elements
256
257 local function replace(pattern,attribute,one,two,three)
258 for e in xmlcollected(x,pattern) do
259 local a = e.at
260 local t = a[attribute]
261 if t then
262 local c = one[t] or (two and two[t]) or (three and three[t])
263 if c then
264 local v = c[interface]
265 if v then
266 a[attribute] = v
267 end
268 end
269 end
270 end
271 end
272
273 replace('cd:command', 'name', commands, elements, variables)
274 replace('cd:string', 'value', commands, elements)
275 replace('cd:variable' , 'value', variables)
276
277 replace('cd:parameter', 'name', constants)
278 replace('cd:constant', 'type', variables)
279 replace('cd:constant', 'default', variables)
280 replace('cd:variable', 'type', variables)
281 replace('cd:inherit', 'name', commands, elements)
282
283 replace('cd:instances/cd:constant', 'value', variables)
284 end
285
286 if tex.modes["setups:save"] and environment.currentrun == 1 then
287
288
289
290 local filename = "context-" .. interface .. ".xml"
291 local xmlroot = x
292 local xmlblob = tostring(xmlroot)
293 io.savedata(filename,xmlblob)
294 xmlroot = xml.load(filename)
295
296 local definitions = { }
297 for e in xml.collected(xmlroot,"cd:interface/cd:define") do
298 definitions[e.at.name] = e.dt
299 end
300 local function resolve(root)
301 for e in xmlcollected(root,"*") do
302 if e.tg == "resolve" then
303 local name = e.at.name or ""
304 local resolved = definitions[name]
305 if resolved then
306 e.__p__.dt[e.ni] = resolved
307 resolve(resolved)
308
309 else
310 report("unable to resolve: %a",name)
311 end
312 end
313 end
314 end
315 resolve(xmlroot)
316 for e in xml.collected(xmlroot,"cd:interface/cd:define") do
317 e.__p__.dt[e.ni] = ""
318 end
319
320 xml.delete(xmlroot,"/cd:interface/cd:interface[@file='i-common-definitions.xml']")
321
322 xmlblob = xml.tostring(xmlroot)
323 io.savedata(filename,xmlblob)
324 xmlroot = xml.load(filename)
325
326 local spacer = utilities.strings.newrepeater(" ")
327 local function simplify(dt,n)
328 local nt, nn = { }, 0
329 for i=1,#dt do
330 local d = dt[i]
331 if d.special then
332
333 elseif type(d) ~= "string" then
334 d.dt = simplify(d.dt,n+1)
335 nn = nn + 1 nt[nn] = "\n" .. spacer[n]
336 nn = nn + 1 nt[nn] = d
337 nn = nn + 1 nt[nn] = "\n" .. spacer[n-1]
338 end
339 end
340 return nn == 0 and "" or nt
341 end
342 xmlroot.dt = simplify(xmlroot.dt,0)
343
344 xmlblob = "<?xml version='1.0'?>\n<!-- expanded and compacted i-context.xml -->\n" .. xml.tostring(xmlroot)
345 xmlblob = gsub(xmlblob,"\n *\n","\n")
346 io.savedata(filename,xmlblob)
347 end
348 end
349
350 function moduledata.setups.resolved(name)
351 lxmlflush(definitions[name])
352 end
353
354 function xml.finalizers.s_count(collected)
355 local n = 0
356 for i=1,#collected do
357 local c = collected[i]
358 local tg = c.tg
359 if tg == "resolve" then
360 local d = definitions[c.at.name]
361 n = n + xmlcount(d,"/*")
362 elseif tg == "delimiter" then
363
364 else
365 n = n + 1
366 end
367 end
368 context(n)
369 end
370
371 local function getinstances(id)
372 local t = { }
373 local x = lxmlgetid(id)
374 local r = xmlfirst(x,"/instances/resolve")
375 if r then
376 local x = setups.definitions[r.at.name]
377 for c in xmlcollected(x,"constant") do
378 t[#t+1] = c.at.value
379 end
380 else
381 for c in xmlcollected(x,"/instances/constant") do
382 t[#t+1] = c.at.value
383 end
384 end
385 return t
386 end
387
388 interfaces.implement {
389 name = "getsetupstring",
390 actions = function(s)
391 local g = getsetupstring(s)
392 if not find(s,"^cd:") then
393 setuptxtword(g)
394 elseif find(s,"%-.$") then
395 setupvarword(g)
396 else
397 setupintword(g)
398 end
399 end,
400 overload = true,
401 arguments = "string",
402 }
403
404 interfaces.implement {
405 name = "rawsetupstring",
406 actions = { getsetupstring, context },
407 overload = true,
408 arguments = "string",
409 }
410
411 interfaces.implement {
412 name = "getinstances",
413 actions = { getinstances, function(t) context("%,t",t) end },
414 overload = true,
415 arguments = { "string" },
416 }
417
418 local trace = false trackers.register("setups.trace", function(v) trace = v end)
419
420 if trace and structures then
421 local synonyms = structures.synonyms
422 if synonyms then
423 local collected = synonyms.collected
424 if collected then
425 local texcommand = collected.texcommand
426 if texcommand then
427 local entries = texcommand.entries
428 if entries then
429 local t = { }
430 local n = #entries
431 for i=1,n do
432 t[i] = entries[i].definition.tag
433 end
434 table.sort(t)
435 for i=1,n do
436 report_known(t[i])
437 end
438 end
439 end
440 end
441 end
442 end
443\stopluacode
444
445
446
447
448
449
450
451
452
453
454\startxmlsetups xml:setups:interfacefile
455 \loadsetups[\xmlatt{#1}{filename}]
456\stopxmlsetups
457
458\startxmlsetups xml:setups:basics
459 \xmlincludeoptions{#1}{interfacefileinclude}{filename}{recurse,basename}
460 \xmlsetsetup{#1}{*}{xml:setups:*}
461 \xmlfunction{#1}{setupsdefine}
462\stopxmlsetups
463
464\xmlregisterdocumentsetup{setups}{xml:setups:basics}
465
466\let\loadedsetups\empty
467
468\unexpanded\def\loadsetups
469 {\dosingleempty\cmd_load_setups}
470
471\def\cmd_load_setups[#1]
472 {\edef\m_cmd_asked_setups{#1}
473 \doifnotmode{nosetupmain}{\def\m_cmd_asked_setups{icontext.xml}}
474 \ifx\m_cmd_asked_setups\empty \else
475 \doonlyonce{setups:#1}
476 {\doglobal\prependtocommalist{setups:#1}\loadedsetups
477 \edef\currentloadedsetup{#1}
478 \doiffileexistselse{#1}
479 {\xmlloadonly{setups:#1}{#1}{setups}}
480 {\xmlloadonly{setups:#1}{#1.xml}{setups}}
481
482 \xmlfilter{setups:#1}{interfacecommandcommand(xml:setups:register)}}
483 \fi}
484
485\newconstant \c_cmd_kind
486\newconditional\c_cmd_doing_line
487\newconditional\c_cmd_measuring
488\newconditional\c_cmd_show_setup
489\newcount \c_cmd_current_argument
490\newcount \c_cmd_maximum_argument
491\newdimen \d_cmd_current_width
492\let \m_cmd_current_hash \empty
493\let \m_cmd_current_file \empty
494
495
496
497\unexpanded\def\basicsetup{\c_cmd_kind\zerocount\cmd_show_setup}
498\unexpanded\def\shortsetup{\c_cmd_kind\plusone \cmd_show_setup}
499
500\unexpanded\def\showsetup {\c_cmd_kind\plustwo \cmd_show_setup}
501
502\ifcase\contextlmtxmode \else
503 \pushoverloadmode
504 \unexpanded\def\setup{\c_cmd_kind\plustwo\cmd_show_setup}
505 \popoverloadmode
506\fi
507
508\unexpanded\def\showsetupinlist#1#2#3
509 {
510 \edef\m_cmd_instance{\secondoftwoarguments#3}
511 \c_cmd_kind\plustwo
512 \xmlsetup{\firstoftwoarguments#3}{xml:setups:typeset}
513 \let\m_cmd_instance\empty
514 \par}
515
516\unexpanded\def\showsetupnameonly#1#2#3
517 {\edef\m_cmd_instance{\secondoftwoarguments#3}
518 \c_cmd_kind\plustwo
519 \xmlsetup{\firstoftwoarguments#3}{xml:setups:assemblename}
520 \let\m_cmd_instance\empty
521 \texescape\currentSETUPfullname}
522
523\installtextracker
524 {cmd.showsetup}
525 {\settrue\c_cmd_show_setup}
526 {\setfalse\c_cmd_show_setup}
527
528\unexpanded\def\cmd_show_setup
529 {\doifelsenextoptionalcs\cmd_show_setup_yes\cmd_show_setup_nop}
530
531\def\cmd_show_setup_yes[#1]
532 {\cmd_show_setup_nop{#1}}
533
534\def\cmd_show_setup_nop#1
535 {\begingroup
536 \registersort[texcommand][#1]
537 \ifconditional\c_cmd_show_setup
538 \writestatus{setup}{#1 \rawsynonymname{texcommand}{#1}}
539 \fi
540 \startelement[setup][name=#1]
541 \startelement[noexport][comment={setup definition #1}]
542 \edef\cmd_id{\rawsynonymname{texcommand}{#1}}
543 \ifx\cmd_id\empty
544 missing: #1
545 \else
546 \ifx\m_cmd_instance\empty
547 \edef\m_cmd_instance{\expandafter\secondoftwoarguments\cmd_id}
548 \fi
549 \xmlsetup{\expandafter\firstoftwoarguments\cmd_id}{xml:setups:typeset}
550 \let\m_cmd_instance\empty
551 \fi
552 \stopelement
553 \stopelement
554 \endgroup}
555
556\unexpanded\def\placesetup {\placelistofsorts[texcommand][\c!criterium=\v!used]}
557\unexpanded\def\placeallsetups{\placelistofsorts[texcommand][\c!criterium=\v!all ]}
558
559
560
561\let\placeeverysetup\placeallsetups
562
563\unexpanded\def\cmd_show_setup_list_basic#1#2#3
564 {\NC\tttf#2\NC\basicsetup[#2]\NC\NR}
565
566\unexpanded\def\placeeverysetupname
567 {\placelistofsorts
568 [texcommand]
569 [\c!before={\starttabulate[]},
570 \c!after=\stoptabulate,
571 \c!criterium=\v!all,
572 \c!command=\cmd_show_setup_list_basic]}
573
574
575
576\startxmlsetups xml:setups:typeset
577 \doifelsenothing {#1} {
578 \xmlsetup{#1}{xml:setups:typeset:nop}
579 } {
580 \xmlsetup{#1}{xml:setups:typeset:yes}
581 }
582\stopxmlsetups
583
584\startxmlsetups xml:setups:typeset:nop
585 \blank
586 {\tttf MISSING SETUP}
587 \blank
588\stopxmlsetups
589
590\startxmlsetups xml:setups:make:string
591 \xmlatt{#1}{value}
592\stopxmlsetups
593
594\startxmlsetups xml:setups:make:instance
595 \ifx\m_cmd_instance\empty
596 \setupintfont{\xmlatt{#1}{value}}
597 \else
598 \m_cmd_instance
599 \fi
600\stopxmlsetups
601
602\startxmlsetups xml:setups:make:variable
603 \setupintfont{\xmlatt{#1}{value}}
604\stopxmlsetups
605
606\let\m_cmd_current_hash\empty
607\let\m_cmd_current_file\empty
608\let\m_cmd_font \empty
609\let\m_cmd_name \empty
610\let\m_cmd_start \empty
611\let\m_cmd_stop \empty
612\let\m_cmd_instance \empty
613
614\startxmlsetups xml:setups:make:prepare
615 \edef\m_cmd_current_hash{\xmlatt{#1}{hash}}
616 \xdef\m_cmd_current_file{\xmlatt{#1}{file}}
617 \xmldoifelseempty{#1}{sequence} {
618 \edef\m_cmd_name{\xmlatt{#1}{name}}
619 } {
620 \edef\m_cmd_name{\xmlfilter{#1}{sequence(stringvariableinstance)command(xml:setups:make:*)}}
621 }
622 \doifelse {\xmlatt{#1}{type}} {environment} {
623 \doifsomethingelse {\xmlatt{#1}{begin}} {
624 \edef\m_cmd_start{\xmllastatt}
625 } {
626 \let\m_cmd_start\e!start
627 }
628 \doifsomethingelse {\xmlatt{#1}{end}} {
629 \edef\m_cmd_stop{\xmllastatt}
630 } {
631 \let\m_cmd_stop\e!stop
632 }
633 } {
634 \let\m_cmd_start\empty
635 \let\m_cmd_stop \empty
636 }
637 \doifelse {\xmlatt{#1}{generated}} {yes} {
638 \let\m_cmd_font\ttsl
639 } {
640 \let\m_cmd_font\relax
641 }
642\stopxmlsetups
643
644\startsetups xml:setups:make:start
645 \bgroup
646 \settrue\c_cmd_doing_line
647 \m_cmd_font
648 \letterbackslash
649 \m_cmd_start
650 \m_cmd_name
651 \ignorespaces
652 \egroup
653\stopsetups
654
655\startsetups xml:setups:make:stop
656 \ifx\m_cmd_stop\empty \else
657 \bgroup
658 \settrue\c_cmd_doing_line
659 \hskip.5em\unknown\hskip.5em
660 \m_cmd_font
661 \letterbackslash
662 \m_cmd_stop
663 \m_cmd_name
664 \ignorespaces
665 \egroup
666 \fi
667\stopsetups
668
669\startxmlsetups xml:setups:typeset:line
670 \ttbf
671 \nohyphens
672 \xmlsetup{#1}{xml:setups:make:prepare}
673 \directsetup{xml:setups:make:start}
674 \xmldoif{#1}{arguments} {
675 \bgroup
676 \settrue\c_cmd_doing_line
677 \global\c_cmd_current_argument\zerocount
678 \ignorespaces
679 \xmlfilter{#1}{argumentstext()}
680 \egroup
681 }
682 \directsetup{xml:setups:make:stop}
683\stopxmlsetups
684
685\startxmlsetups xml:setups:typeset:raw
686 \nohyphens
687 \veryraggedright
688 \global\c_cmd_current_argument\zerocount
689 \global\c_cmd_maximum_argument0\xmlfilter{#1}{arguments*scount()}\relax
690 \xmlsetup{#1}{xml:setups:make:prepare}
691 \ttbf
692 \directsetup{xml:setups:make:start}
693 \xmldoif{#1}{arguments} {
694 \settrue\c_cmd_doing_line
695 \bgroup
696 \tttf
697 \global\c_cmd_current_argument\zerocount
698 \ignorespaces
699 \xmlfilter{#1}{argumentstext()}
700 \egroup
701 }
702 \directsetup{xml:setups:make:stop}
703\stopxmlsetups
704
705\startxmlsetups xml:setups:typeset:detail
706 \xmldoif{#1}{arguments} {
707 \bgroup
708 \setfalse\c_cmd_doing_line
709 \global\c_cmd_current_argument\zerocount
710
711
712 \blank[\v!samepage,\v!medium]
713 \switchtobodyfont[\v!small]
714 \ignorespaces\xmlfilter{#1}{argumentstext()}\endgraf
715 \egroup
716 }
717\stopxmlsetups
718
719\startxmlsetups xml:setups:instance
720 \doifelse {\xmltag{#1}} {resolve} {
721 \ctxlua{lxml.command(moduledata.setups.definitions['\xmlatt{#1}{name}'],"constant","xml:setups:instance")}
722 } {
723 \xmlatt{#1}{value}\enskip
724 }
725\stopxmlsetups
726
727\startxmlsetups xml:setups:typeset:instances
728 \ifx\m_cmd_instance\empty
729 \xmldoif{#1}{instances} {
730
731 \blank[\v!samepage,\v!medium]
732 {\ttbf instances:}
733 \enspace
734 \xmlfilter{#1}{instances(constantresolve)command(xml:setups:instance)}
735 \removeunwantedspaces
736 }
737 \fi
738\stopxmlsetups
739
740\startsetups xml:setups:start
741 \csname\e!start setuptext\endcsname
742\stopsetups
743
744\startsetups xml:setups:stop
745 \csname\e!stop setuptext\endcsname
746\stopsetups
747
748\startxmlsetups xml:setups:typeset:yes
749 \forgetparskip
750 \glet\m_cmd_current_file\empty
751 \ifcase\c_cmd_kind
752 \xmlsetup{#1}{xml:setups:typeset:line}
753 \or
754 \directsetup{xml:setups:start}
755 \xmlsetup{#1}{xml:setups:typeset:raw}
756 \directsetup{xml:setups:stop}
757 \or
758 \directsetup{xml:setups:start}
759 \xmlsetup{#1}{xml:setups:typeset:raw}
760 \endgraf
761 \xmlsetup{#1}{xml:setups:typeset:detail}
762 \endgraf
763 \xmlsetup{#1}{xml:setups:typeset:instances}
764 \directsetup{xml:setups:stop}
765 \fi
766 \glet\m_cmd_current_file\empty
767\stopxmlsetups
768
769\startsetups xml:setups:overlay:file
770 \vbox to \overlayheight \bgroup
771 \infofont
772 \vfill
773 \scratchdimen.5\exheight
774 \hbox to \overlaywidth \bgroup
775 \strut
776 \hss
777 \m_cmd_current_file
778 \hskip\dimexpr\scratchdimen\strutdp\relax
779 \egroup
780 \vskip\scratchdimen
781 \egroup
782\stopsetups
783
784\defineoverlay
785 [setupfilename]
786 [\directsetup{xml:setups:overlay:file}]
787
788\startxmlsetups xml:setups:resolve
789 \ignorespaces
790 \ctxlua{moduledata.setups.resolved('\xmlatt{#1}{name}')}
791\stopxmlsetups
792
793
794
795\startxmlsetups xml:setups:define
796 \ignorespaces\xmlflush{#1}
797\stopxmlsetups
798
799\startxmlsetups xml:setups:sequence
800 \ignorespaces\xmlflush{#1}
801\stopxmlsetups
802
803\startxmlsetups xml:setups:string
804 \xmlatt{#1}{value}\ignorespaces
805\stopxmlsetups
806
807\startxmlsetups xml:setups:delimiter
808 \ifconditional\c_cmd_doing_line
809 \kern.5\emwidth
810 \letterbackslash\xmlatt{#1}{name}
811 \fi
812 \ignorespaces
813\stopxmlsetups
814
815\startxmlsetups xml:setups:csname \show_setup_component{#1}{csname} \stopxmlsetups
816\startxmlsetups xml:setups:content \show_setup_component{#1}{content} \stopxmlsetups
817\startxmlsetups xml:setups:position \show_setup_component{#1}{position} \stopxmlsetups
818\startxmlsetups xml:setups:index \show_setup_component{#1}{index} \stopxmlsetups
819\startxmlsetups xml:setups:text \show_setup_component{#1}{text} \stopxmlsetups
820\startxmlsetups xml:setups:apply \show_setup_component{#1}{apply} \stopxmlsetups
821\startxmlsetups xml:setups:template \show_setup_component{#1}{template} \stopxmlsetups
822\startxmlsetups xml:setups:triplet \show_setup_component{#1}{triplet} \stopxmlsetups
823\startxmlsetups xml:setups:angles \show_setup_component{#1}{angles} \stopxmlsetups
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838\unexpanded\def\show_setup_component#1#2
839 {\ifconditional\c_cmd_doing_line
840 \getvalue{showsetup#2}{#1}
841 \else
842 \simpleSETUPargument{#2}
843 \fi}
844
845
846
847\unexpanded\def\cmd_column_one_start
848 {\bgroup
849 \scratchdimen2\emwidth
850 \advance\leftskip \scratchdimen
851 \noindent\llap{\hbox to \scratchdimen{\show_setup_number\hss}}
852 \strut}
853
854\unexpanded\def\cmd_column_one_stop
855 {\endgraf
856 \egroup}
857
858\unexpanded\def\cmd_column_two_start#1#2
859 {\bgroup
860 \scratchdimen2.5\emwidth
861 \advance\hangindent\dimexpr\d_cmd_current_width\scratchdimen\relax
862 \noindent \hbox to \hangindent{#1\hss\hbox to \scratchdimen{\hss#2\hss}}
863 \strut}
864
865\unexpanded\def\cmd_column_two_stop
866 {\endgraf
867 \egroup}
868
869\startxmlsetups xml:setups:assignments
870 \ifconditional\c_cmd_doing_line
871 \ifcase\c_cmd_kind
872 \expandafter\show_setup_line
873 \else
874 \expandafter\show_setup_any
875 \fi{#1}{assignment\xmlattdef{#1}{delimiters}{brackets}}
876 \else
877 \global\d_cmd_current_width\zeropoint
878 \setbox\scratchbox\vbox\bgroup
879 \settrue\c_cmd_measuring
880 \xmlall{#1}{(parameterresolve)}
881 \egroup
882 \global\d_cmd_current_width\themaxboxwidth\scratchbox\relax
883 \cmd_column_one_start
884 \ignorespaces
885 \xmldoifelse {#1} {(parameterinheritresolve)} {
886 \xmlflush{#1}
887 } {
888 \unknown
889 }
890 \cmd_column_one_stop
891
892 \blank[\v!samepage,\v!medium]
893 \ignorespaces
894 \fi
895\stopxmlsetups
896
897\startxmlsetups xml:setups:keywords
898 \ifconditional\c_cmd_doing_line
899 \ifcase\c_cmd_kind
900 \expandafter\show_setup_line
901 \else
902 \expandafter\show_setup_any
903 \fi{#1}{\xmlattdef{#1}{delimiters}{brackets}}
904 \else
905 \cmd_column_one_start
906 \ignorespaces
907 \xmlflush{#1}
908 \cmd_column_one_stop
909
910 \blank[\v!samepage,\v!medium]
911 \ignorespaces
912 \fi
913\stopxmlsetups
914
915\startxmlsetups xml:setups:parameter
916 \ifconditional\c_cmd_measuring
917 \getsetupstring{\xmlatt{#1}{name}}\par
918 \else
919 \cmd_column_two_start{\getsetupstring{\xmlatt{#1}{name}}}{=}
920 \ignorespaces
921 \xmlflush{#1}
922 \doifmode{interface:setup:defaults} {
923 \ifx\m_cmd_current_hash\empty \else
924 \begingroup
925
926 \let\emwidth \relax
927 \let\exheight\relax
928 \edef\temp{\csname named\m_cmd_current_hash parameter\endcsname\empty{\xmlatt{#1}{name}}}
929 \ifx\temp\empty \else
930 =\space
931 \detokenize\expandafter{\temp}
932 \fi
933 \endgroup
934 \fi
935 }
936 \cmd_column_two_stop
937 \fi
938 \ignorespaces
939\stopxmlsetups
940
941
942\xmlmapvalue{setups:method}{range} {:}
943\xmlmapvalue{setups:method}{apply} {>}
944\xmlmapvalue{setups:method}{factor}{*}
945\xmlmapvalue{setups:method}{none} {}
946
947\startxmlsetups xml:setups:constant:value
948 \getsetupstring{\xmlatt{#1}{type}}
949\stopxmlsetups
950
951\definebar
952 [cmdunderbar]
953 [\v!underbar]
954 [\c!foregroundcolor=,
955 \c!foregroundstyle=,
956 \c!color=]
957
958\startxmlsetups xml:setups:constant
959 \doifelsemode {setupspassone} {
960 } {
961 \doifsomethingelse{\xmlatt{#1}{prefix}} {
962 \getsetupstring{\xmllastatt}
963 \xmlmappedvalue{setups:method}{\xmlatt{#1}{method}}{none}
964 } {
965 \doif {\xmlatt{#1}{default}} {yes} {
966 \cmd_underbar
967 }
968 }
969 {\getsetupstring{\xmlatt{#1}{type}}}
970 \space
971 \ignorespaces
972 }
973\stopxmlsetups
974
975\startxmlsetups xml:setups:variable
976 \doifelsemode {setupspassone} {
977 \expanded{\setupintfont{\xmlatt{#1}{value}}}\ignorespaces
978 } {
979 \getsetupstring{\xmlatt{#1}{value}}
980 \space
981 \ignorespaces
982 }
983\stopxmlsetups
984
985\startxmlsetups xml:setups:inherit
986
987 \rawsetupstring{cd:inherits}:
988 \enspace
989 \letterbackslash
990 \xmlatt{#1}{name}
991
992 \ignorespaces
993\stopxmlsetups
994
995\unexpanded\def\simpleSETUPargument#1
996 {\cmd_column_one_start
997 \cmd_internal_value{#1}
998 \cmd_column_one_stop
999
1000 \blank[\v!samepage,\v!medium]
1001 \ignorespaces}
1002
1003
1004
1005\unexpanded\def\show_setup_any#1#2
1006 {\bgroup
1007 \global\advance\c_cmd_current_argument\plusone
1008 \doifelse{\xmlatt{#1}{optional}}{yes}\donetrue\donefalse
1009 \setbox0=\hbox
1010 {\ifdone\sl\fi
1011 \doifelse{\xmlatt{#1}{list}}{yes}
1012 {\getsetupstring{cd:#2l}}
1013 {\getsetupstring{cd:#2s}}}
1014 \setbox2=\hbox to \wd0
1015 {\hss
1016 \ifcase\c_cmd_kind\else
1017 \ifcase\c_cmd_maximum_argument \relax
1018 \or
1019 \raise1.25\exheight\hbox
1020 {\txx *}
1021 \else
1022 \raise1.25\exheight\hbox
1023 {\txx\the\c_cmd_current_argument}
1024 \fi
1025 \fi
1026 \hss}
1027 \setbox4=\hbox to \wd0
1028 {\hss
1029 \ifdone
1030 \lower2\exheight\hbox
1031 \bgroup
1032 \txx
1033 \getsetupstring{cd:optional}
1034 \egroup
1035 \hss
1036 \fi}
1037 \ht2\ht\strutbox
1038 \dp4\dp\strutbox
1039 \hskip.5\emwidth
1040 \wd0\zeropoint
1041 \box0
1042 \wd2\zeropoint
1043 \box2
1044 \box4
1045 \egroup
1046 \ignorespaces}
1047
1048\unexpanded\def\show_setup_line#1#2
1049 {\kern.5\emwidth
1050 \getsetupstring{cd:#2s}
1051 \ignorespaces}
1052
1053\unexpanded\def\show_setup_number
1054 {\global\advance\c_cmd_current_argument\plusone
1055 \hbox to 2\emwidth
1056 {\ifcase\c_cmd_maximum_argument \relax
1057 \or*\else\the\c_cmd_current_argument
1058 \fi
1059 \hss}}
1060
1061
1062
1063\unexpanded\def\setupEQsymbol
1064 {.\lower.25\exheight\hpack{=}.}
1065
1066\unexpanded\def\setupAPPLYsymbol
1067 {..\lower.25\exheight\hpack{=>}..}
1068
1069
1070
1071\unexpanded\def\show_setup_csname #1{\show_setup_any{#1}{noargument}}
1072\unexpanded\def\show_setup_content #1{\show_setup_any{#1}{content}}
1073\unexpanded\def\show_setup_position #1{\show_setup_any{#1}{position}}
1074\unexpanded\def\show_setup_index #1{\show_setup_any{#1}{index}}
1075\unexpanded\def\show_setup_text #1{\show_setup_any{#1}{textual}}
1076\unexpanded\def\show_setup_apply #1{\show_setup_any{#1}{apply}}
1077\unexpanded\def\show_setup_template #1{\show_setup_any{#1}{template}}
1078\unexpanded\def\show_setup_triplet #1{\show_setup_any{#1}{triplet}}
1079\unexpanded\def\show_setup_angles #1{\show_setup_any{#1}{angle}}
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099\definetype[parametercommand]
1100\definetype[parameterkey]
1101\definetype[parametervalue] [\c!space=\v!on]
1102
1103\setuptype [parametercommand] [\c!color=darkmagenta]
1104\setuptype [parametervalue] [\c!color=darkyellow]
1105
1106\startxmlsetups xml:setups:parameters:value
1107 \edef\currentsetupparameterkey {\xmlatt{#1}{name}}
1108 \edef\currentsetupparametervalue{\begincsname named\currentsetupparametercategory parameter\endcsname\currentsetupparameterinstance\currentsetupparameterkey}
1109 \ifx\currentsetupparameterinstance\empty
1110 \expanded {
1111 \NC \parameterkey {\currentsetupparameterkey}
1112 \NC \parametervalue{\detokenize\expandafter{\currentsetupparametervalue}}
1113 \NC \NR
1114 }
1115 \else\ifx\currentsetupparametervalue\empty
1116 \else
1117 \edef\currentsetupparameterdefault{\begincsname named\currentsetupparametercategory parameter\endcsname\empty\currentsetupparameterkey}
1118 \ifx\currentsetupparametervalue\currentsetupparameterdefault
1119
1120 \else
1121 \expanded {
1122 \NC \parameterkey {\currentsetupparameterkey}
1123 \NC \parametervalue{\detokenize\expandafter{\currentsetupparametervalue}}
1124 \NC \NR
1125 }
1126 \fi
1127 \fi\fi
1128\stopxmlsetups
1129
1130\startxmlsetups xml:setups:parameters:values
1131 \blank[\v!big,\v!samepage]
1132 \expanded {
1133 \parametercommand {
1134 \currentsetupparametercommand
1135 \space:\space
1136 \ifx\currentsetupparameterinstance\empty
1137 defaults
1138 \else
1139 \currentsetupparameterinstance
1140 \fi
1141 }
1142 }
1143 \blank[\v!big,\v!samepage]
1144 \starttabulate[lpl]
1145
1146 \xmlall
1147 {#1}
1148 {interfacecommand[@name==\currentsetupparametercommand or @handler==\currentsetupparametercommand]argumentsassignmentsparametercommand(xml:setups:parameters:value)}
1149 \ifnum\noftabulaterows = \zerocount
1150 \NC \parameterkey{no specific settings} \NC \NC \NR
1151 \fi
1152 \stoptabulate
1153\stopxmlsetups
1154
1155\starttexdefinition showrootvalues [#1]
1156 \edef\currentsetupparametercategory{#1}
1157 \edef\currentsetupparametercommand{setup#1}
1158 \let\currentsetupparameterinstance\empty
1159 \xmlsetup{\loadedsetups}{xml:setups:parameters:values}
1160\stoptexdefinition
1161
1162\starttexdefinition showinstancevalues [#1]#2[#3]
1163 \edef\currentsetupparametercategory{#1}
1164 \edef\currentsetupparametercommand{setup#1}
1165 \edef\currentsetupparameterinstance{#3}
1166 \xmlsetup{\loadedsetups}{xml:setups:parameters:values}
1167\stoptexdefinition
1168
1169
1170
1171\unexpanded\def\cmdinternal#1
1172 {{\tttf\getsetupstring{#1}}}
1173
1174\let\cmdbasicsetup\basicsetup
1175\let\cmdshortsetup\shortsetup
1176\let\cmdfullsetup \showsetup
1177
1178\unexpanded\def\cmd_with_instance#1#2#3
1179 {\edef\m_cmd_instance{#3}
1180 #1{#2}
1181 \let\m_cmd_instance\empty}
1182
1183\unexpanded\def\cmdbasicsetupinstance{\cmd_with_instance\cmdbasicsetup}
1184\unexpanded\def\cmdshortsetupinstance{\cmd_with_instance\cmdshortsetup}
1185\unexpanded\def\cmdfullsetupinstance {\cmd_with_instance\cmdfullsetup }
1186
1187
1188
1189\definefloat
1190 [definition]
1191
1192\setupcaption
1193 [definition]
1194 [align=flushright]
1195
1196\unexpanded\def\showdefinition
1197 {\doifelsenextoptional\cmd_show_definition_yes\cmd_show_definition_nop}
1198
1199\unexpanded\def\cmd_show_definition_nop#1
1200 {\cmd_show_definition_yes[#1]}
1201
1202\unexpanded\def\cmd_show_definition_yes[#1]
1203 {\placedefinition[here][definition:#1]{\tex{#1}}{\showsetup{#1}}}
1204
1205\unexpanded\def\definition[#1]
1206 {\begingroup
1207 \getcommalistsize[#1]
1208 \scratchcounter\zerocount
1209 \def\dodefinition##1
1210 {\advance\scratchcounter\plusone
1211 \ifnum\scratchcounter=\commalistsize
1212 \in{and}[definition:##1]
1213 \else\ifnum\scratchcounter=\plusone
1214 \in{definition}[definition:##1]\space
1215 \else
1216 \in{, }[definition:##1]\space
1217 \fi\fi}
1218 \processcommalist[#1]\dodefinition
1219 \endgroup}
1220
1221\protect \endinput
1222 |