summaryrefslogtreecommitdiff
path: root/tex/context/base/node-ini.mkiv
blob: 787259316667e177bbeb0141d7ef714aaa7e8c9a (plain)
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
%D \module
%D   [       file=node-ini,
%D        version=2006.08.20,
%D          title=\CONTEXT\ Node Macros,
%D       subtitle=Initialization,
%D         author=Hans Hagen,
%D           date=\currentdate,
%D      copyright=PRAGMA]
%C
%C This module is part of the \CONTEXT\ macro||package and is
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.

\writestatus{loading}{ConTeXt Node Support / Initialization}

\unprotect

\newcount\filterstate \filterstate\plusone

\registerctxluafile{node-ini}{1.001}
\registerctxluafile{node-dir}{1.001}
\registerctxluafile{node-aux}{1.001}
\registerctxluafile{node-tst}{1.001}
\registerctxluafile{node-tra}{1.001} % we might split it off (module)
\registerctxluafile{node-seq}{1.001} % we might generalize this one
\registerctxluafile{node-tsk}{1.001}
\registerctxluafile{node-tex}{1.001}
\registerctxluafile{node-res}{1.001}
\registerctxluafile{node-pro}{1.001}
\registerctxluafile{node-shp}{1.001}
\registerctxluafile{node-ser}{1.001}
\registerctxluafile{node-ext}{1.001}
\registerctxluafile{node-inj}{1.001} % we might split it off
\registerctxluafile{node-typ}{1.001} % experimental

\newtoks \attributesresetlist

\ifdefined \v!global \else \def\v!global{global} \fi % for metatex

\unexpanded\def\defineattribute
  {\dodoubleempty\dodefineattribute}

\def\dodefineattribute[#1][#2]% alternatively we can let lua do the housekeeping
  {\expandafter\newattribute\csname @attr@#1\endcsname
   \expandafter        \xdef\csname :attr:#1\endcsname{\number\lastallocatedattribute}%
   \ctxlua{attributes.define("#1",\number\lastallocatedattribute)}%
  %\writestatus\m!systems{defining attribute #1 with number \number\lastallocatedattribute}%
   \doifnotinset\v!global{#2}{\appendetoks\csname @attr@#1\endcsname\attributeunsetvalue\to\attributesresetlist}}

\unexpanded\def\definesystemattribute
  {\dodoubleempty\dodefinesystemattribute}

\def\dodefinesystemattribute[#1][#2]% alternatively we can let lua do the housekeeping
  {\scratchcounter\ctxlua{tex.print(attributes.private("#1"))}\relax
   \global\expandafter\attributedef\csname @attr@#1\endcsname\scratchcounter
          \expandafter        \xdef\csname :attr:#1\endcsname{\number\scratchcounter}%
  %\writestatus\m!systems{defining system attribute #1 with number \number\scratchcounter}%
   \doifnotinset\v!global{#2}{\appendetoks\csname @attr@#1\endcsname\attributeunsetvalue\to\attributesresetlist}}

% expandable so we can \edef them for speed

\def\dosetattribute#1#2{\csname @attr@#1\endcsname#2\relax}
\def\doresetattribute#1{\csname @attr@#1\endcsname\attributeunsetvalue}
\def\dogetattribute  #1{\number\csname @attr@#1\endcsname}
\def\dogetattributeid#1{\csname :attr:#1\endcsname}

\let\dompattribute\gobbletwoarguments

\def\resetallattributes{\the\attributesresetlist}

\newcount\shownodescounter

\def\shownextnodes     {\afterassignment\doshownodes\shownextnodescounter}
\def\showflatnodes     {\afterassignment\doshownodes\showflatnodescounter}
\def\doshownextnodes   {\ctxlua{texio.write_nl('log',nodes.serializebox(\number\shownodescounter,false,true))}}
\def\doshowflatnodes   {\ctxlua{texio.write_nl('log',nodes.serializebox(\number\shownodescounter,true, true))}}
\def\visualizenextnodes{\dowithnextbox{\ctxlua{nodes.visualizebox(\number\nextbox,false,true)}}}
\def\visualizeflatnodes{\dowithnextbox{\ctxlua{nodes.visualizebox(\number\nextbox,true,true)}}}

\unexpanded\def\starttracingnodes[#1]{\ctxlua{nodes.tracers.characters.start("#1")}}
\unexpanded\def\stoptracingnodes     {\ctxlua{nodes.tracers.characters.stop()}}

% \starttext
%     \starttracingnodes[characters]
%         \input tufte \par
%         \input tufte \par
%     \stoptracingnodes
% \stoptext

\protect \endinput