summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/context/third/handlecsv/t-handlecsv-tools.lua
blob: 87806a9a03d4dd1766d1fdedfff137949eeb6098 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
-- %D \module
-- %D   [     file=t-handlecsv-tools.lua,
-- %D      version=2015.07.08,
-- %D        title=HandleCSV tools,
-- %D     subtitle=CSV file analysis,
-- %D       author=Jaroslav Hajtmar,
-- %D         date=\currentdate,
-- %D    copyright=Jaroslav Hajtmar,
-- %D      license=GNU General Public License]
-- 
-- %C Copyright (C) 2015  Jaroslav Hajtmar
-- %C
-- %C This program is free software: you can redistribute it and/or modify
-- %C it under the terms of the GNU General Public License as published by
-- %C the Free Software Foundation, either version 3 of the License, or
-- %C (at your option) any later version.
-- %C
-- %C This program is distributed in the hope that it will be useful,
-- %C but WITHOUT ANY WARRANTY; without even the implied warranty of
-- %C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-- %C GNU General Public License for more details.
-- %C
-- %C You should have received a copy of the GNU General Public License
-- %C along with this program.  If not, see <http://www.gnu.org/licenses/>.


-- use a feature that is part of the /texmf-dist/tex/context/base/util-prs.lua

thirddata = thirddata or { }

thirddata = thirddata or { }

thirddata.handlecsv = thirddata.handlecsv or { -- next global variables

}


-- Initialize global variables etc.


-- Utility and documentation function and macros

function thirddata.handlecsv.csvreport(anyfilename) -- Listing report informations about opening a CSV file
	local actualopenfile=thirddata.handlecsv.gCurrentlyProcessedCSVFile
	thirddata.handlecsv.opencsvfile(anyfilename)
 	local coldelim = thirddata.handlecsv.gUserCSVSeparator or ""
	local quot = thirddata.handlecsv.gUserCSVQuoter or ""
	local currcoldelim = thirddata.handlecsv.gCSVSeparator or ""
	local currquot = thirddata.handlecsv.gCSVQuoter or ""
	infomakra=[[\crlf ]]
	for i = 1, thirddata.handlecsv.gNumCols do 	-- for all fields in header
		local makroname=[[{\bf\backslash ]]..thirddata.handlecsv.tmn(thirddata.handlecsv.gColumnNames[i])..[[}]]
		  headercolnames = [[{\bf\backslash c]]..thirddata.handlecsv.ar2colnum(i)..[[}=]]..makroname..[[, ]]
			infomakra=infomakra..headercolnames -- list generating
	  end -- for i=1, #gCSV
		-- Kvůli nastavení na zač.
	infomakra=infomakra..'\\par'   -- infomakra=infomakra..'\par'  -- closing of opened group
local string2print=[[\title{Current CSV file report}
Input CSV file: {\bf ]]..'\\csvfilename'..[[} \crlf
Existing header of CSV file (ie first no data line) : {\tt ]]..tostring(thirddata.handlecsv.gCSVHeader)..[[}\crlf
Settings default CSV separator (see Lua variable {\tt gUserCSVSeparator}) :  ]]..coldelim..[[\crlf
Settings default CSV field "quoter" (see Lua variable {\tt gUserCSVQuoter}) :  ]]..quot..[[\crlf
Settings current CSV separator :  ]]..currcoldelim..[[\crlf
Settings current CSV field "quoter" :  ]]..currquot..[[\crlf
Current settings of delimiters and quoters:    {\tt ]]..currquot..[[field1]]..currquot..currcoldelim..currquot..[[field2]]..currquot..currcoldelim..currquot..[[field3]]..currquot..currcoldelim..[[ } ... etc.\crlf
Using hooks (default is off) : {\tt ]]..tostring(thirddata.handlecsv.gUseHooks)..[[}\crlf
Number of columns in a table:  {\bf]]..'\\numcols'..[[}\crlf
Number of rows in the table:  {\bf ]]..'\\numrows'..[[}\crlf
Macros supplying columns data in each row of table:  ]]..infomakra..[[
\crlf
Additional predefined macros: \crlf
{\bf\backslash csvfilename} -- name of open CSV file ({\bf]]..'\\csvfilename'..[[})\crlf
{\bf\backslash numcols} -- number of table columns ({\bf]]..'\\numcols'..[[})\crlf
{\bf\backslash numrows} -- number of table lines ({\bf]]..'\\numrows'..[[})\crlf
{\bf\backslash numline} -- number of the currently loaded row (for use in print reports) \crlf
{\bf\backslash lineno} -- serial number of the actual loaded line of CSV table \crlf
{\bf\backslash csvreport} -- prints the report on file open \crlf
{\bf\backslash printline} -- lists the current CSV row table in a condensed form \crlf
{\bf\backslash printall} -- CSV output table in a condensed form \crlf
{\bf\backslash setfiletoscan}\{{\it filename}\} -- setting of name of CSV file\crlf
{\bf\backslash opencsvfile}{\{\it filename}\} -- open CSV table\crlf
{\bf\backslash setheader} -- set a header flag\crlf
{\bf\backslash resetheader} -- unset a header flag\crlf
{\bf\backslash nextrow} -- next row of CSV table (with test of EOF)\crlf
{\bf\backslash setsep}{\{\it delimiter}\} -- set delimiter of columns\crlf
{\bf\backslash resetsep} -- unset to default values\crlf
{\bf\backslash setld}\{{\it delimiter}\} -- set left quoter\crlf
{\bf\backslash resetld} -- unset left quoter to default values\crlf
{\bf\backslash setrd}\{{\it delimiter}\} -- set right quoter\crlf
{\bf\backslash resetrd} -- unset right quoter to default values\crlf
{\bf\backslash blinehook} -- begin line hook macro (process before first column value of each row)\crlf
{\bf\backslash elinehook} -- end line hook macro (process after last column value of each row)\crlf
{\bf\backslash bfilehook} -- begin file hook macro (process before whole file processing)\crlf
{\bf\backslash efilehook} -- end file hook macro (process after whole file processing)\crlf
\vfill\break ]]
thirddata.handlecsv.string2context(string2print)
thirddata.handlecsv.opencsvfile(actualopenfile)
end -- thirddata.handlecsv.csvreport()

function thirddata.handlecsv.xprintline() -- lists the current CSV row table (needed to define macro \printline)
	for i=1,thirddata.handlecsv.gNumCols do
      context([[\csvcell]]..'['..i..','..thirddata.handlecsv.gCurrentLinePointer..']'..thirddata.handlecsv.gCSVSeparator..[[ ]])
   end
end


function thirddata.handlecsv.xprintall() -- lists all the csv table (necessary to define macros \printall)
--  http://www.pragma-ade.nl/general/manuals/hybrid.pdf
 thirddata.handlecsv.opencsvfile()
 local basespec = {
	framecolor = "blue",
	split="yes",
	align= "middle",
	style = "sans",
	offset="2pt",
	}
 context.bTABLE(basespec)
 		 for i=1, thirddata.handlecsv.gNumRows do
      	context.bTR()
		  for j=1,thirddata.handlecsv.gNumCols do
  			context.bTD()
        	context([[\csvcell]]..'['..j..','..i..']') -- Writing real values ...
        	-- context(thirddata.handlecsv.gTableRows[j][i]..' ') -- Writing real values ...
        	context.eTD()
		  end
			context.eTR()
		end -- of for
context.eTABLE()
end



-- ConTeXt source:
local string2print=[[%

% CSV file report. Syntax: \csvreport or \csvreport{filename}.
\def\csvreport{\dosingleempty\docsvreport}%
\def\docsvreport[#1]{\dosinglegroupempty\dodocsvreport}%
\def\dodocsvreport#1{\iffirstargument\ctxlua{thirddata.handlecsv.csvreport("#1")}\else\ctxlua{thirddata.handlecsv.csvreport()}\fi}%

%\def\xprintline{\ctxlua{context(thirddata.handlecsv.printline())}}


% Původní verze:
% \def\xprintall{\ctxlua{context(thirddata.handlecsv.xprintall())}}

\def\printline{\dorecurse{\numcols}{\csvcell[\recurselevel,\linepointer], }\crlf}


\def\printall{%
\setuppapersize[A3,landscape][A3,landscape]
\catcode`\#=12 %CSV file contains # characters (i.e. TeX problematic character)
\switchtobodyfont[10pt]
\setupTABLE[background=color,backgroundcolor=yellow]
\setupTABLE[row][first][background=color,backgroundcolor=lightgray]
\bTABLE[offset=2pt, split=yes]
 \dorecurse{\numexpr(\numrows+1)}
 {\bTR
   \dorecurse{\numcols}
	 {\bTD \csvcell[\currentTABLEcolumn,\currentTABLErow-1] \eTD}
 \eTR}
\eTABLE
}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Complete listing macros and commands that can be used (to keep track of all defined macros):
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \csvreport,  \csvreport{<filename>}
% \printline
% \printall
 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
]]

-- write definitions into ConTeXt:
thirddata.handlecsv.string2context(string2print)