1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16\registerctxluafile{mdatabase}{}
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
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
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]
94 {\unexpanded\def\stopseparatedlist{\processdatabasebuffer[#1][#1]}
95 \grabbufferdatadirect{#1}{startseparatedlist}{stopseparatedlist}}
96
97\let\setupseparatedlist\setupdatabase
98
99\protect
100
101\continueifinputfile{mdatabase.mkiv}
102
103\starttext
104
105
106
107
108
109
110
111
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][mdatabase.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
146
147
148
149
150\startCSV
151a,b,c
152d,e,f
153\stopCSV
154
155\defineseparatedlist
156 [CSV]
157 [separator={,},quotechar={"},commentchar=\letterhash,
158 before={\starttabulate[lll]},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"cd
167\stopCSV
168
169\defineseparatedlist
170 [CSV]
171 [separator=space,
172 first=\NC,last=\NR,
173 left=,right=\NC,
174 before={\starttabulate[lll]},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[lll]},after=\stoptabulate]
192
193\processseparatedfile[CSV][mdatabase.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 |