m-spreadsheet.mkiv /size: 6304 b    last modification: 2020-07-01 14:35
1%D \module
2%D   [       file=m-spreadsheet,
3%D        version=2011.02.21,
4%D          title=\CONTEXT\ Extra Modules,
5%D       subtitle=Spreadsheets,
6%D         author=Hans Hagen,
7%D           date=\currentdate,
8%D      copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
9%C
10%C This module is part of the \CONTEXT\ macro||package and is
11%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
12%C details.
13
14%D This is an experimental follow up on discussion on the mailing list.
15
16\registerctxluafile{m-spreadsheet}{}
17
18\unprotect
19
20% todo: get(...) set(..) ctx(...)
21
22\installcorenamespace{spreadsheet}
23
24\installcommandhandler \??spreadsheet {spreadsheet} \??spreadsheet
25
26\appendtoks
27   \ctxlua{moduledata.spreadsheets.setup{ % global !
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  [%\c!comma=,
36   %\c!period=,
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 % quick and dirty
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{m-spreadsheet.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{4+3} \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{4+3.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% \showspreadsheet
216% \showspreadsheet[mysheet]
217
218\doifelsespreadsheetcell[mysheet]{1}{2}{YES}{NOP}
219\doifelsespreadsheetcell[myshoot]{1}{2}{YES}{NOP}
220
221\stoptext
222