1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16\registerctxluafile{mspreadsheet}{}
17
18\unprotect
19
20
21
22\installcorenamespace{spreadsheet}
23
24\installcommandhandler \??spreadsheet {spreadsheet} \??spreadsheet
25
26\appendtoks
27 \ctxlua{moduledata.spreadsheets.setup{
28 period = \!!bs\spreadsheetparameter\c!period\!!es,
29 comma = \!!bs\spreadsheetparameter\c!comma\!!es,
30 split = \!!bs\spreadsheetparameter\c!split\!!es,
31 }}
32\to \everysetupspreadsheet
33
34\setupspreadsheet
35 [
36
37 \c!split=\v!no]
38
39\unexpanded\def\resetspreadsheet
40 {\dosingleempty\module_spreadsheet_reset}
41
42\unexpanded\def\module_spreadsheet_reset[#1]
43 {\ctxlua{moduledata.spreadsheets.reset("#1")}}
44
45\unexpanded\def\startspreadsheet
46 {\dosingleempty\module_spreadsheet_start}
47
48\unexpanded\def\module_spreadsheet_start[#1]
49 {\pushmacro\currentspreadsheet
50 \edef\currentspreadsheet{#1}
51 \checkspreadsheetparent
52 \edef\m_spreadsheet_period{\spreadsheetparameter\c!period}
53 \edef\m_spreadsheet_comma {\spreadsheetparameter\c!comma}
54 \ctxlua{moduledata.spreadsheets.start("#1", {
55 period = \!!bs\detokenize\expandafter{\m_spreadsheet_period}\!!es,
56 comma = \!!bs\detokenize\expandafter{\m_spreadsheet_comma}\!!es,
57 split = \!!bs\spreadsheetparameter\c!split\!!es,
58 })}}
59
60\unexpanded\def\stopspreadsheet
61 {\ctxlua{moduledata.spreadsheets.stop()}
62 \popmacro\currentspreadsheet}
63
64\unexpanded\def\showspreadsheet
65 {\dosingleempty\module_spreadsheet_show}
66
67\unexpanded\def\module_spreadsheet_show[#1]
68 {\ctxlua{moduledata.spreadsheets.tocontext("#1")}}
69
70\unexpanded\def\inspectspreadsheet
71 {\dosingleempty\module_spreadsheet_inspect}
72
73\unexpanded\def\module_spreadsheet_inspect[#1]
74 {\ctxlua{moduledata.spreadsheets.inspect("#1")}}
75
76\unexpanded\def\setspreadsheet
77 {\dosingleempty\module_spreadsheet_set}
78
79\unexpanded\def\module_spreadsheet_set[#1]#2#3#4
80 {\ctxlua{moduledata.spreadsheets.set("#1",\number#2,\number#3,"#4")}}
81
82\unexpanded\def\getspreadsheet
83 {\dosingleempty\module_spreadsheet_get}
84
85\unexpanded\def\module_spreadsheet_get[#1]#2#3#4
86 {\ctxlua{moduledata.spreadsheets.get("#1",\number#2,\number#3,"#4")}}
87
88\unexpanded\def\doifelsespreadsheetcell
89 {\dosingleempty\module_spreadsheet_doifelse_cell}
90
91\let\doifspreadsheetcellelse\doifelsespreadsheetcell
92
93\unexpanded\def\module_spreadsheet_doifelse_cell[#1]#2#3
94 {\ctxlua{moduledata.spreadsheets.doifelsecell("#1",\number#2,\number#3)}}
95
96\ifdefined\tblrow
97
98 \def\TABLEsetspreadsheet#1{\ctxlua{moduledata.spreadsheets.set("",\number\tblrow+1,\number\tblcol,\!!bs#1\!!es)}}
99 \def\TABLEgetspreadsheet#1{\ctxlua{moduledata.spreadsheets.get("",\number\tblrow+1,\number\tblcol,\!!bs#1\!!es)}}
100
101\else
102
103 \def\TABLEsetspreadsheet#1{\ctxlua{moduledata.spreadsheets.set("",\number\c_tabl_ntb_row+1,\number\c_tabl_ntb_col,\!!bs#1\!!es)}}
104 \def\TABLEgetspreadsheet#1{\ctxlua{moduledata.spreadsheets.get("",\number\c_tabl_ntb_row+1,\number\c_tabl_ntb_col,\!!bs#1\!!es)}}
105
106\fi
107
108\appendtoks
109 \module_spreadsheet_reset[\currentspreadsheet]
110 \let\setspr\TABLEsetspreadsheet
111 \let\getspr\TABLEgetspreadsheet
112\to \everyTABLEpass
113
114\unexpanded\def\startspreadsheettable
115 {\dodoubleempty\module_spreadsheet_start_table}
116
117\unexpanded\def\module_spreadsheet_start_table[#1][#2]
118 {\bgroup
119 \let\startrow \module_spreadsheet_row_start
120 \let\stoprow \module_spreadsheet_row_stop
121 \let\startcell\module_spreadsheet_cell_start
122 \let\stopcell \module_spreadsheet_cell_stop
123 \doifelseassignment{#1}
124 {\module_spreadsheet_start
125 \directsetup{spreadsheet:before:\currentspreadsheet}
126 \bTABLE[\c!align=\v!flushright,#1]}
127 {\module_spreadsheet_start[#1]
128 \directsetup{spreadsheet:before:\currentspreadsheet}
129 \bTABLE[\c!align=\v!flushright,#2]}}
130
131\unexpanded\def\stopspreadsheettable
132 {\eTABLE
133 \directsetup{spreadsheet:after:\currentspreadsheet}
134 \stopspreadsheet
135 \egroup}
136
137\unexpanded\def\module_spreadsheet_row_start{\bTR}
138\unexpanded\def\module_spreadsheet_row_stop {\eTR}
139
140\unexpanded\def\module_spreadsheet_cell_start
141 {\doifelsenextoptional\module_spreadsheet_cell_start_yes\module_spreadsheet_cell_start_nop}
142
143\unexpanded\def\module_spreadsheet_cell_start_yes[#1]#2\stopcell
144 {\bTD[#1]\getspr{#2}\eTD}
145
146\unexpanded\def\module_spreadsheet_cell_start_nop#1\stopcell
147 {\bTD\getspr{#1}\eTD}
148
149\let\module_spreadsheet_cell_stop\relax
150
151\protect
152
153\continueifinputfile{mspreadsheet.mkiv}
154
155\starttext
156
157\bTABLE[align=middle]
158 \bTR
159 \bTD \getspr{100} \eTD \bTD test \setspr{30} \eTD
160 \eTR
161 \bTR
162 \bTD \getspr{20} \eTD \bTD \getspr{43} \eTD
163 \eTR
164 \bTR
165 \bTD \getspr{A[1] A[2]} \eTD
166 \bTD \getspr{B1 B2} \eTD
167 \eTR
168 \bTR
169 \bTD[nx=2] \bf \getspr{(A[3] B[3]) 100} \eTD
170 \eTR
171 \bTR
172 \bTD[nx=2] \bf \getspr{string.format("\letterpercent0.3f",(A[3] B[3]) 100)} \eTD
173 \eTR
174 \bTR
175 \bTD[nx=2] \bf \getspr{fmt("@0.3f",(sum(A,1,2)) 10)} \eTD
176 \eTR
177\eTABLE
178
179\setupspreadsheet[mysheet]
180
181\startspreadsheet[mysheet]
182
183\bTABLE[align=middle]
184 \bTR
185 \bTD \getspr{100} \eTD \bTD test \setspr{30} \eTD
186 \eTR
187 \bTR
188 \bTD \getspr{20} \eTD \bTD \getspr{43.5} \eTD
189 \eTR
190 \bTR
191 \bTD \getspr{A[1] A[2]} \eTD
192 \bTD \getspr{B[1] B[2]} \eTD
193 \eTR
194 \bTR
195 \bTD[nx=2] \bf \getspr{A[3] B[3]} \eTD
196 \eTR
197\eTABLE
198
199\stopspreadsheet
200
201\blank
202
203\setupspreadsheet[test][period={{\bf\middlered .}},comma={{\bf\middlegreen ,}},split=yes]
204
205\startspreadsheettable[test]
206 \startrow
207 \startcell 123456.78 \stopcell
208 \startcell 1234567.89 \stopcell
209 \startcell A[1] B[1] \stopcell
210 \stoprow
211\stopspreadsheettable
212
213\blank
214
215
216
217
218\doifelsespreadsheetcell[mysheet]{1}{2}{YES}{NOP}
219\doifelsespreadsheetcell[myshoot]{1}{2}{YES}{NOP}
220
221\stoptext
222 |