summaryrefslogtreecommitdiff
path: root/tex/context/modules/mkiv/m-database.mkiv
diff options
context:
space:
mode:
Diffstat (limited to 'tex/context/modules/mkiv/m-database.mkiv')
-rw-r--r--tex/context/modules/mkiv/m-database.mkiv211
1 files changed, 211 insertions, 0 deletions
diff --git a/tex/context/modules/mkiv/m-database.mkiv b/tex/context/modules/mkiv/m-database.mkiv
new file mode 100644
index 000000000..cc7dd3d72
--- /dev/null
+++ b/tex/context/modules/mkiv/m-database.mkiv
@@ -0,0 +1,211 @@
+%D \module
+%D [ file=m-database,
+%D version=2010.08.04,
+%D title=\CONTEXT\ Modules,
+%D subtitle=Database Thingies,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+%D For Mojca.
+
+\registerctxluafile{m-database}{1.001}
+
+\unprotect
+
+\definenamespace
+ [db]
+ [type=module,
+ comment=database module,
+ version=1,
+ name=database,
+ parent=db,
+ setup=yes,
+ command=yes]
+
+\setupdatabase
+ [\c!separator={,},
+ \c!quotechar=,
+ \c!commentchar=,
+ \c!strip=\v!no,
+ \c!before=,
+ \c!after=,
+ \c!first=,
+ \c!last=,
+ \c!left=,
+ \c!right=]
+
+% \let\currentdatabase\empty \the\everypresetdatabase % or just:
+
+\setupdatabase
+ [\c!separator={,}]
+
+\def\module_database_process#1#2#3%
+ {\edef\currentdatabasetype{#1}%
+ \edef\currentdatabase {#2}%
+ \edef\currentdatabasename{#3}%
+ \ifx\currentdatabasename\empty
+ \let\currentdatabasename\currentdatabase
+ \let\currentdatabase\empty
+ \fi
+ \ctxlua{moduledata.database.csv.process {
+ name = "\currentdatabase",
+ type = "\currentdatabasetype",
+ database = "\currentdatabasename",
+ strip = "\databaseparameter\c!strip",
+ separator = \!!bs\databaseparameter\c!separator \!!es,
+ quotechar = \!!bs\databaseparameter\c!quotechar \!!es,
+ commentchar = \!!bs\databaseparameter\c!commentchar\!!es,
+ setups = \!!bs\databaseparameter\c!setups \!!es,
+ before = \!!bs\databaseparameter\c!before \!!es,
+ after = \!!bs\databaseparameter\c!after \!!es,
+ first = \!!bs\databaseparameter\c!first \!!es,
+ last = \!!bs\databaseparameter\c!last \!!es,
+ left = \!!bs\databaseparameter\c!left \!!es,
+ right = \!!bs\databaseparameter\c!right \!!es,
+ command = \!!bs\databaseparameter\c!command \!!es,
+ catcodes = \number\catcodetable
+ }}}
+
+\unexpanded\def\processdatabasebuffer{\dodoubleempty\module_database_process_buffer}
+\unexpanded\def\processdatabasefile {\dodoubleempty\module_database_process_file}
+
+\def\module_database_process_buffer[#1][#2]{\module_database_process{buffer}{#1}{#2}}
+\def\module_database_process_file [#1][#2]{\module_database_process{file} {#1}{#2}}
+
+% for old times sake:
+
+\unexpanded\def\defineseparatedlist {\dodoubleempty\module_database_separated_list_define}
+\unexpanded\def\processseparatedfile{\dodoubleempty\module_database_separated_list_process}
+
+\def\module_database_separated_list_define[#1][#2]%
+ {\definedatabase[#1][#2]%
+ \setuvalue{\e!start#1}{\grabbufferdatadirect{#1}{\e!start#1}{\e!stop#1}}%
+ \setuvalue{\e!stop#1}{\processdatabasebuffer[#1][#1]}}
+
+\def\module_database_separated_list_process[#1][#2]%
+ {\processdatabasefile[#1][#2]}
+
+\unexpanded\def\startseparatedlist[#1]% to be interfaced
+ {\unexpanded\def\stopseparatedlist{\processdatabasebuffer[#1][#1]}%
+ \grabbufferdatadirect{#1}{startseparatedlist}{stopseparatedlist}}
+
+\let\setupseparatedlist\setupdatabase
+
+\protect
+
+\continueifinputfile{m-database.mkiv}
+
+\starttext
+
+% m-database.txt
+%
+% 1,2,3,4,5
+% 6,7,8,"9,x",0
+% A,B,C,D
+% E,,F
+% G
+
+\definedatabase[test]
+
+\setupdatabase
+ [test]
+ [separator={,},
+ quotechar={"},
+ before={<},
+ after={>},
+ first={\endgraf[},
+ last={]\endgraf},
+ left={ (},
+ right={) }]
+
+\startbuffer[testbuffer]
+1,2,3,4,5
+6,7,8,"9,x",0
+A,B,C,D
+E,,F
+G
+\stopbuffer
+
+\processdatabasebuffer[test][testbuffer]
+
+\processdatabasefile[test][m-database.txt]
+
+\defineseparatedlist
+ [CSV]
+ [separator={,},
+ before=\bTABLE,after=\eTABLE,
+ first=\bTR,last=\eTR,
+ left=\bTD,right=\eTD]
+
+% \startseparatedlist[CSV]
+% a,b,c
+% d,e,f
+% \stopseparatedlist
+
+\startCSV
+a,b,c
+d,e,f
+\stopCSV
+
+\defineseparatedlist
+ [CSV]
+ [separator={,+},quotechar={"'},commentchar=\letterhash,
+ before={\starttabulate[|l|l|l|]},after=\stoptabulate,
+ first=\NC,last=\NR,
+ left=,right=\NC]
+
+\startCSV
+#a,b,"c,d"
+a,b,"c,d"
+a,'b,c',d
+"a,b"+c+d
+\stopCSV
+
+\defineseparatedlist
+ [CSV]
+ [separator=space,
+ first=\NC,last=\NR,
+ left=,right=\NC,
+ before={\starttabulate[|l|l|l|]},after=\stoptabulate]
+
+\startCSV
+a b c
+d e f
+\stopCSV
+
+\startsetups csv:unix
+ \catcode\hashasciicode\commentcatcode
+\stopsetups
+
+\defineseparatedlist
+ [CSV]
+ [setups=csv:unix,
+ separator={,},
+ first=\NC,last=\NR,
+ left=,right=\NC,
+ before={\starttabulate[|l|l|l|]},after=\stoptabulate]
+
+\processseparatedfile[CSV][m-database.txt]
+
+\defineseparatedlist[CSV]
+ [separator=comma,
+ before=\bTABLE, after=\eTABLE,
+ first=\bTR, last=\eTR,
+ left=\bTD, right=\eTD]
+
+\startCSV
+a,b,c,č
+d,e,f,š
+\stopCSV
+
+\startseparatedlist[CSV]
+a,b,c,č
+d,e,f,š
+\stopseparatedlist
+
+\stoptext