m-database.mkiv /size: 4861 b    last modification: 2020-07-01 14:35
1%D \module
2%D   [       file=m-database,
3%D        version=2010.08.04,
4%D          title=\CONTEXT\ Modules,
5%D       subtitle=Database Thingies,
6%D         author=Hans Hagen,
7%D           date=\currentdate,
8%D      copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
9
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 For Mojca.
15
16\registerctxluafile{m-database}{}
17
18\unprotect
19
20\definenamespace
21  [db]
22  [type=module,
23   comment=database module,
24   version=1,
25   name=database,
26   parent=db,
27   setup=yes,
28   command=yes]
29
30\setupdatabase
31  [\c!separator={,},
32   \c!quotechar=,
33   \c!commentchar=,
34   \c!strip=\v!no,
35   \c!before=,
36   \c!after=,
37   \c!first=,
38   \c!last=,
39   \c!left=,
40   \c!right=]
41
42% \let\currentdatabase\empty \the\everypresetdatabase % or just:
43
44\setupdatabase
45  [\c!separator={,}]
46
47\def\module_database_process#1#2#3%
48  {\edef\currentdatabasetype{#1}%
49   \edef\currentdatabase    {#2}%
50   \edef\currentdatabasename{#3}%
51   \ifx\currentdatabasename\empty
52     \let\currentdatabasename\currentdatabase
53     \let\currentdatabase\empty
54   \fi
55   \ctxlua{moduledata.database.csv.process {
56     name        = "\currentdatabase",
57     type        = "\currentdatabasetype",
58     database    = "\currentdatabasename",
59     strip       = "\databaseparameter\c!strip",
60     separator   = \!!bs\databaseparameter\c!separator  \!!es,
61     quotechar   = \!!bs\databaseparameter\c!quotechar  \!!es,
62     commentchar = \!!bs\databaseparameter\c!commentchar\!!es,
63     setups      = \!!bs\databaseparameter\c!setups     \!!es,
64     before      = \!!bs\databaseparameter\c!before     \!!es,
65     after       = \!!bs\databaseparameter\c!after      \!!es,
66     first       = \!!bs\databaseparameter\c!first      \!!es,
67     last        = \!!bs\databaseparameter\c!last       \!!es,
68     left        = \!!bs\databaseparameter\c!left       \!!es,
69     right       = \!!bs\databaseparameter\c!right      \!!es,
70     command     = \!!bs\databaseparameter\c!command    \!!es,
71     catcodes    = \number\catcodetable
72  }}}
73
74\unexpanded\def\processdatabasebuffer{\dodoubleempty\module_database_process_buffer}
75\unexpanded\def\processdatabasefile  {\dodoubleempty\module_database_process_file}
76
77\def\module_database_process_buffer[#1][#2]{\module_database_process{buffer}{#1}{#2}}
78\def\module_database_process_file  [#1][#2]{\module_database_process{file}  {#1}{#2}}
79
80% for old times sake:
81
82\unexpanded\def\defineseparatedlist {\dodoubleempty\module_database_separated_list_define}
83\unexpanded\def\processseparatedfile{\dodoubleempty\module_database_separated_list_process}
84
85\def\module_database_separated_list_define[#1][#2]%
86  {\definedatabase[#1][#2]%
87   \setuvalue{\e!start#1}{\grabbufferdatadirect{#1}{\e!start#1}{\e!stop#1}}%
88   \setuvalue{\e!stop#1}{\processdatabasebuffer[#1][#1]}}
89
90\def\module_database_separated_list_process[#1][#2]%
91  {\processdatabasefile[#1][#2]}
92
93\unexpanded\def\startseparatedlist[#1]% to be interfaced
94  {\unexpanded\def\stopseparatedlist{\processdatabasebuffer[#1][#1]}%
95   \grabbufferdatadirect{#1}{startseparatedlist}{stopseparatedlist}}
96
97\let\setupseparatedlist\setupdatabase
98
99\protect
100
101\continueifinputfile{m-database.mkiv}
102
103\starttext
104
105% m-database.txt
106%
107% 1,2,3,4,5
108% 6,7,8,"9,x",0
109% A,B,C,D
110% E,,F
111% G
112
113\definedatabase[test]
114
115\setupdatabase
116  [test]
117  [separator={,},
118   quotechar={"},
119   before={<},
120   after={>},
121   first={\endgraf[},
122   last={]\endgraf},
123   left={ (},
124   right={) }]
125
126\startbuffer[testbuffer]
1271,2,3,4,5
1286,7,8,"9,x",0
129A,B,C,D
130E,,F
131G
132\stopbuffer
133
134\processdatabasebuffer[test][testbuffer]
135
136\processdatabasefile[test][m-database.txt]
137
138\defineseparatedlist
139  [CSV]
140  [separator={,},
141   before=\bTABLE,after=\eTABLE,
142   first=\bTR,last=\eTR,
143   left=\bTD,right=\eTD]
144
145% \startseparatedlist[CSV]
146% a,b,c
147% d,e,f
148% \stopseparatedlist
149
150\startCSV
151a,b,c
152d,e,f
153\stopCSV
154
155\defineseparatedlist
156  [CSV]
157  [separator={,+},quotechar={"'},commentchar=\letterhash,
158   before={\starttabulate[|l|l|l|]},after=\stoptabulate,
159   first=\NC,last=\NR,
160   left=,right=\NC]
161
162\startCSV
163#a,b,"c,d"
164a,b,"c,d"
165a,'b,c',d
166"a,b"+c+d
167\stopCSV
168
169\defineseparatedlist
170  [CSV]
171  [separator=space,
172   first=\NC,last=\NR,
173   left=,right=\NC,
174   before={\starttabulate[|l|l|l|]},after=\stoptabulate]
175
176\startCSV
177a b c
178d e f
179\stopCSV
180
181\startsetups csv:unix
182  \catcode\hashasciicode\commentcatcode
183\stopsetups
184
185\defineseparatedlist
186  [CSV]
187  [setups=csv:unix,
188   separator={,},
189   first=\NC,last=\NR,
190   left=,right=\NC,
191   before={\starttabulate[|l|l|l|]},after=\stoptabulate]
192
193\processseparatedfile[CSV][m-database.txt]
194
195\defineseparatedlist[CSV]
196  [separator=comma,
197   before=\bTABLE, after=\eTABLE,
198   first=\bTR, last=\eTR,
199   left=\bTD, right=\eTD]
200
201\startCSV
202a,b,c,č
203d,e,f,š
204\stopCSV
205
206\startseparatedlist[CSV]
207a,b,c,č
208d,e,f,š
209\stopseparatedlist
210
211\stoptext
212