Mercurial > repos > deepakjadmin > mayatool3_test2
comparison bin/TextFilesToHTML.pl @ 0:4816e4a8ae95 draft default tip
Uploaded
author | deepakjadmin |
---|---|
date | Wed, 20 Jan 2016 09:23:18 -0500 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:4816e4a8ae95 |
---|---|
1 #!/usr/bin/perl -w | |
2 # | |
3 # $RCSfile: TextFilesToHTML.pl,v $ | |
4 # $Date: 2015/02/28 20:46:21 $ | |
5 # $Revision: 1.41 $ | |
6 # | |
7 # Author: Manish Sud <msud@san.rr.com> | |
8 # | |
9 # Copyright (C) 2015 Manish Sud. All rights reserved. | |
10 # | |
11 # This file is part of MayaChemTools. | |
12 # | |
13 # MayaChemTools is free software; you can redistribute it and/or modify it under | |
14 # the terms of the GNU Lesser General Public License as published by the Free | |
15 # Software Foundation; either version 3 of the License, or (at your option) any | |
16 # later version. | |
17 # | |
18 # MayaChemTools is distributed in the hope that it will be useful, but without | |
19 # any warranty; without even the implied warranty of merchantability of fitness | |
20 # for a particular purpose. See the GNU Lesser General Public License for more | |
21 # details. | |
22 # | |
23 # You should have received a copy of the GNU Lesser General Public License | |
24 # along with MayaChemTools; if not, see <http://www.gnu.org/licenses/> or | |
25 # write to the Free Software Foundation Inc., 59 Temple Place, Suite 330, | |
26 # Boston, MA, 02111-1307, USA. | |
27 # | |
28 | |
29 use strict; | |
30 use FindBin; use lib "$FindBin::Bin/../lib"; | |
31 use Getopt::Long; | |
32 use File::Basename; | |
33 use Text::ParseWords; | |
34 use Benchmark; | |
35 use FileUtil; | |
36 use TextUtil; | |
37 use HTMLUtil; | |
38 | |
39 my($ScriptName, %Options, $StartTime, $EndTime, $TotalTime); | |
40 | |
41 # Autoflush STDOUT | |
42 $| = 1; | |
43 | |
44 # Starting message... | |
45 $ScriptName = basename($0); | |
46 print "\n$ScriptName: Starting...\n\n"; | |
47 $StartTime = new Benchmark; | |
48 | |
49 # Get the options and setup script... | |
50 SetupScriptUsage(); | |
51 if ($Options{help} || @ARGV < 1) { | |
52 die GetUsageFromPod("$FindBin::Bin/$ScriptName"); | |
53 } | |
54 | |
55 my(@TextFilesList); | |
56 @TextFilesList = ExpandFileNames(\@ARGV, "csv tsv"); | |
57 | |
58 print "Processing options...\n"; | |
59 my(%OptionsInfo); | |
60 ProcessOptions(); | |
61 | |
62 print "Checking input text file(s)...\n"; | |
63 my(%TextFilesInfo); | |
64 RetrieveTextFilesInfo(); | |
65 SetupCoulmnsTablesAndMiscInfo(); | |
66 | |
67 # Generate output files... | |
68 my($FileIndex); | |
69 if (@TextFilesList > 1) { | |
70 print "\nProcessing text files...\n"; | |
71 } | |
72 for $FileIndex (0 .. $#TextFilesList) { | |
73 if ($TextFilesInfo{FileOkay}[$FileIndex]) { | |
74 print "\nProcessing file $TextFilesList[$FileIndex]...\n"; | |
75 GenerateHTMLTable($FileIndex); | |
76 } | |
77 } | |
78 print "\n$ScriptName:Done...\n\n"; | |
79 | |
80 $EndTime = new Benchmark; | |
81 $TotalTime = timediff ($EndTime, $StartTime); | |
82 print "Total time: ", timestr($TotalTime), "\n"; | |
83 | |
84 ############################################################################### | |
85 | |
86 # Generate HTML table(s)... | |
87 sub GenerateHTMLTable { | |
88 my($Index) = @_; | |
89 | |
90 if ($TextFilesInfo{MultipleHTMLTables}[$Index]) { | |
91 GenerateMultipleHTMLTable($Index); | |
92 } | |
93 else { | |
94 GenerateOneHTMLTable($Index); | |
95 } | |
96 } | |
97 | |
98 # Generate one table... | |
99 sub GenerateOneHTMLTable { | |
100 my($Index) = @_; | |
101 my($TextFile, $TopHTMLDir, $HTMLFile, $Line, $StartRowNum, $EndRowNum, $CSSFile, $CSSFilePath, $CSSRef); | |
102 | |
103 $HTMLFile = $TextFilesInfo{HTMLRoot}[$Index] . ".html"; | |
104 $TextFile = $TextFilesList[$Index]; | |
105 | |
106 # Setup data directories... | |
107 ($TopHTMLDir) = SetupDataDirs($Index); | |
108 | |
109 # Setup stylesheet file... | |
110 $CSSRef = ""; | |
111 if ($Options{stylesheet} =~ /^new$/i) { | |
112 $CSSFile = $TextFilesInfo{HTMLRoot}[$Index] . ".css"; $CSSRef = ".\/" . "$CSSFile"; | |
113 $CSSFilePath = "$TopHTMLDir" . "\/" . $CSSFile; | |
114 GenerateStyleSheetFile($CSSFilePath); | |
115 } | |
116 elsif ($Options{stylesheet} =~ /^old$/i) { | |
117 $CSSRef = $Options{stylesheetname}; | |
118 } | |
119 # Set HTML file location... | |
120 $HTMLFile = "$TopHTMLDir" . "\/" . $HTMLFile; | |
121 | |
122 print "Generating HTML file $HTMLFile...\n"; | |
123 open HTMLFILE, ">$HTMLFile" or die "Error: Can't open $HTMLFile: $! \n"; | |
124 open TEXTFILE, "$TextFile" or die "Error: Can't open $TextFile: $! \n"; | |
125 | |
126 # Write out HTML page header... | |
127 print HTMLFILE SetupHTMLPageHeader($TextFilesInfo{HTMLTitle}[$Index], $CSSRef); | |
128 if ($OptionsInfo{TitleDisplay}) { | |
129 print HTMLFILE SetupHTMLPageTitle($TextFilesInfo{HTMLTitle}[$Index]); | |
130 } | |
131 else { | |
132 print HTMLFILE SetupHTMLEmptyLines(1); | |
133 } | |
134 | |
135 # Start the table... | |
136 print HTMLFILE SetupHTMLAlignmentBegin("center"); | |
137 print HTMLFILE SetupHTMLTableHeader($OptionsInfo{TableBorder}, $OptionsInfo{TableCellPadding}, $OptionsInfo{TableCellSpacing}); | |
138 | |
139 WriteColLabels($Index, \*TEXTFILE, \*HTMLFILE); | |
140 | |
141 # Skip the labels and write out all the other rows... | |
142 $Line = <TEXTFILE>; | |
143 $StartRowNum = 1; | |
144 $EndRowNum = $TextFilesInfo{LineCount}[$Index]; | |
145 WriteRowValues($Index, $StartRowNum, $EndRowNum, \*TEXTFILE, \*HTMLFILE); | |
146 | |
147 # Finish up the table... | |
148 print HTMLFILE SetupHTMLTableEnd(); | |
149 print HTMLFILE SetupHTMLAlignmentEnd("center"); | |
150 | |
151 # Write out HTML page end... | |
152 print HTMLFILE SetupHTMLPageEnd($OptionsInfo{Footer}); | |
153 | |
154 close HTMLFILE; | |
155 close TEXTFILE; | |
156 } | |
157 | |
158 # Generate multiple tables... | |
159 sub GenerateMultipleHTMLTable { | |
160 my($Index) = @_; | |
161 my($TopHTMLDir, $SubHTMLDir, $TextFile, $HTMLFile, $TableNum, $TableCount, $TableIndex, $TableStartLineNum, $TableEndLineNum, $Line, $InSubHTMLDir, $PrintMsg, $CSSFile, $CSSFilePath, $CSSRef, $NewStyleSheet); | |
162 | |
163 # Open text file and skip over label line... | |
164 $TextFile = $TextFilesList[$Index]; | |
165 open TEXTFILE, "$TextFile" or die "Error: Can't open $TextFile: $! \n"; | |
166 $Line = <TEXTFILE>; | |
167 | |
168 # Set up data directories to hold various html files... | |
169 ($TopHTMLDir, $SubHTMLDir) = SetupDataDirs($Index); | |
170 | |
171 # Create stylesheet file... | |
172 $CSSRef = ""; | |
173 $NewStyleSheet = 0; | |
174 if ($Options{stylesheet} =~ /^new$/i) { | |
175 $NewStyleSheet = 1; | |
176 $CSSFile = $TextFilesInfo{HTMLRoot}[$Index] . ".css"; | |
177 $CSSFilePath = "$TopHTMLDir" . "\/" . $CSSFile; | |
178 GenerateStyleSheetFile($CSSFilePath); | |
179 } | |
180 elsif ($Options{stylesheet} =~ /^old$/i) { | |
181 $CSSRef = $Options{stylesheetname}; | |
182 } | |
183 | |
184 $PrintMsg = 1; | |
185 # Generate HTML files for all the tables... | |
186 $TableCount = $TextFilesInfo{TableCount}[$Index]; | |
187 for $TableNum (1 .. $TableCount) { | |
188 $TableIndex = $TableNum - 1; | |
189 $HTMLFile = ${$TextFilesInfo{TableHTMLFiles}[$Index]}[$TableIndex]; | |
190 $TableStartLineNum = ${$TextFilesInfo{TableStartLineNum}[$Index]}[$TableIndex]; | |
191 $TableEndLineNum = ${$TextFilesInfo{TableEndLineNum}[$Index]}[$TableIndex]; | |
192 | |
193 # Setup file name... | |
194 if ($TableNum == 1) { | |
195 $HTMLFile = "$TopHTMLDir" . "\/" . $HTMLFile; | |
196 print "Generating HTML file $HTMLFile...\n"; | |
197 } | |
198 else { | |
199 $HTMLFile = "$SubHTMLDir" . "\/" . $HTMLFile; | |
200 if ($PrintMsg) { | |
201 $PrintMsg = 0; | |
202 if ($TableCount == 2) { | |
203 print "Generating HTML file $HTMLFile...\n"; | |
204 } | |
205 else { | |
206 print "Generating ", ($TableCount - 1), " other HTML files: $SubHTMLDir\/$TextFilesInfo{HTMLRoot}[$Index]\*.html...\n"; | |
207 } | |
208 } | |
209 } | |
210 # Setup stylesheet reference... | |
211 if ($NewStyleSheet) { | |
212 $CSSRef = ($TableNum == 1) ? ".\/" : "..\/"; | |
213 $CSSRef .= $CSSFile; | |
214 } | |
215 | |
216 open HTMLFILE, ">$HTMLFile" or die "Error: Can't open $HTMLFile: $! \n"; | |
217 # Write out HTML page header... | |
218 print HTMLFILE SetupHTMLPageHeader($TextFilesInfo{HTMLTitle}[$Index], $CSSRef); | |
219 | |
220 # Set up the navigation links for this table... | |
221 if ($OptionsInfo{NavLinksAtTop}) { | |
222 WriteNavigationLinks($Index, $TableNum, \*HTMLFILE); | |
223 } | |
224 # Setup page title... | |
225 if ($OptionsInfo{TitleDisplay}) { | |
226 print HTMLFILE SetupHTMLPageTitle($TextFilesInfo{HTMLTitle}[$Index]); | |
227 } | |
228 else { | |
229 print HTMLFILE SetupHTMLEmptyLines(1); | |
230 } | |
231 | |
232 # Start the table... | |
233 print HTMLFILE SetupHTMLAlignmentBegin("center"); | |
234 print HTMLFILE SetupHTMLTableHeader($OptionsInfo{TableBorder}, $OptionsInfo{TableCellPadding}, $OptionsInfo{TableCellSpacing}); | |
235 | |
236 WriteColLabels($Index, \*TEXTFILE, \*HTMLFILE); | |
237 | |
238 # Write out appropriate row data for this table... | |
239 WriteRowValues($Index, $TableStartLineNum, $TableEndLineNum, \*TEXTFILE, \*HTMLFILE); | |
240 | |
241 # Finish up the table... | |
242 print HTMLFILE SetupHTMLTableEnd(); | |
243 print HTMLFILE SetupHTMLAlignmentEnd("center"); | |
244 | |
245 # Set up the navigation links for this table... | |
246 if ($OptionsInfo{NavLinksAtBottom}) { | |
247 print HTMLFILE SetupHTMLEmptyLines(1); | |
248 WriteNavigationLinks($Index, $TableNum, \*HTMLFILE); | |
249 } | |
250 | |
251 # Write out HTML page end... | |
252 print HTMLFILE SetupHTMLPageEnd($OptionsInfo{Footer}); | |
253 close HTMLFILE; | |
254 } | |
255 close TEXTFILE; | |
256 | |
257 } | |
258 | |
259 # Create stylesheet file... | |
260 sub GenerateStyleSheetFile { | |
261 my($CSSFile) = @_; | |
262 print "Generating stylesheet file $CSSFile...\n"; | |
263 open CSSFILE, ">$CSSFile" or die "Error: Can't open $CSSFile: $! \n"; | |
264 print CSSFILE SetupHTMLStyleSheetTags(); | |
265 close CSSFILE; | |
266 } | |
267 | |
268 # Write out table header using column labels... | |
269 sub WriteColLabels { | |
270 my($Index, $TextFileRef, $HTMLFileRef) = @_; | |
271 my(@ColLabels, $Label); | |
272 | |
273 print $HTMLFileRef $TextFilesInfo{TableRowHeaderTags}; | |
274 | |
275 @ColLabels = @{$TextFilesInfo{ColLabels}[$Index]}; | |
276 for $Label (@ColLabels) { | |
277 print $HTMLFileRef SetupHTMLTableRowHeaderValue($Label); | |
278 } | |
279 print $HTMLFileRef $TextFilesInfo{RowEndTags}; | |
280 } | |
281 | |
282 #Write out the rows value... | |
283 sub WriteRowValues { | |
284 my($Index, $StartRowNum, $EndRowNum, $TextFileRef, $HTMLFileRef) = @_; | |
285 my($ColNum, $BackgroundColor, $FontColor, $LineCount, $Line, @RowValues, $Value, $InDelim, $LastColNum); | |
286 | |
287 $InDelim = $TextFilesInfo{InDelim}[$Index]; | |
288 $LastColNum = @{$TextFilesInfo{ColLabels}[$Index]} - 1; | |
289 | |
290 for $LineCount ($StartRowNum .. $EndRowNum) { | |
291 $Line = GetTextLine($TextFileRef); | |
292 | |
293 if ($OptionsInfo{ShadeRowsStatus}) { | |
294 print $HTMLFileRef ($LineCount % 2) ? $TextFilesInfo{BgFilledOddRowHeaderTags} : $TextFilesInfo{BgFilledEvenRowHeaderTags}; | |
295 } | |
296 else { | |
297 print $HTMLFileRef $TextFilesInfo{RowHeaderTags}; | |
298 } | |
299 @RowValues = quotewords($InDelim, 0, $Line); | |
300 for $ColNum (0 .. $LastColNum) { | |
301 $Value = ($ColNum <= $#RowValues) ? $RowValues[$ColNum] : ""; | |
302 $BackgroundColor = ""; $FontColor = ""; | |
303 if ($OptionsInfo{HighlightStatus}) { | |
304 if (exists($TextFilesInfo{HightlightColNumMap}[$Index]{$ColNum})) { | |
305 ($BackgroundColor, $FontColor) = GetValueHighlightColors($Index, $ColNum, $Value); | |
306 } | |
307 } | |
308 print $HTMLFileRef SetupHTMLTableRowDataValue($Value, $BackgroundColor, $FontColor); | |
309 } | |
310 print $HTMLFileRef $TextFilesInfo{RowEndTags}; | |
311 } | |
312 } | |
313 | |
314 # Setup navigation link information for each table. | |
315 # | |
316 # All table sets besides first and last have these links: FirstTable, Previous, Current-1,Current,Current+1, Next, and LastTable | |
317 # First set: Current, Next, and LastTable | |
318 # Last set: FirstTable, Previous and Current. | |
319 # | |
320 sub WriteNavigationLinks { | |
321 my($Index, $CurTableNum, $HTMLFileRef) = @_; | |
322 my($TableNum, $StartTableNum, $EndTableNum, $TableIndex, $BorderWidth, $CellPadding, $CellSpacing,$HTMLFile, $HTMLRefFile, $RelativeFileDir, $HTMLRefValue, $FirstTableNum, $FirstTableIndex, $LastTableNum, $LastTableIndex, $TableStartLineNum, $TableEndLineNum, $LastLineNum, $BGColor, $LinksOffSet); | |
323 | |
324 $LinksOffSet = 10; | |
325 | |
326 $FirstTableNum = 1; $FirstTableIndex = $FirstTableNum - 1; | |
327 $LastTableNum = $TextFilesInfo{TableCount}[$Index]; $LastTableIndex = $LastTableNum - 1; | |
328 $LastLineNum = ${$TextFilesInfo{TableEndLineNum}[$Index]}[$LastTableIndex]; | |
329 | |
330 # Figure out which links to display for a particular table... | |
331 $StartTableNum = $CurTableNum - $LinksOffSet + 1; | |
332 $StartTableNum = ($StartTableNum < $FirstTableNum) ? $FirstTableNum : $StartTableNum; | |
333 if ($CurTableNum < $LinksOffSet) { | |
334 $EndTableNum = $LinksOffSet; | |
335 } | |
336 else { | |
337 $EndTableNum = $CurTableNum + $LinksOffSet - 1; | |
338 } | |
339 $EndTableNum = ($EndTableNum > $LastTableNum) ? $LastTableNum : $EndTableNum; | |
340 | |
341 my($InactiveLinkNumColor, $InactiveLinkFontBold) = ("#8e2323", "1"); | |
342 my($LinkTextColor, $LinkBGColor, $LinkFontBold) = ("", "", "1"); | |
343 | |
344 # Start link table... | |
345 $BorderWidth = 0; $CellPadding = 2; $CellSpacing = 2; | |
346 print $HTMLFileRef SetupHTMLAlignmentBegin("center"); | |
347 print $HTMLFileRef SetupHTMLDivBegin("tablenav"); | |
348 print $HTMLFileRef SetupHTMLTableHeader($BorderWidth, $CellPadding, $CellSpacing); | |
349 print $HTMLFileRef $TextFilesInfo{RowHeaderTags}; | |
350 | |
351 if ($OptionsInfo{NavLinksTableInfo} && $OptionsInfo{NavLinksLineInfo}) { | |
352 print $HTMLFileRef SetupHTMLTableRowDataValue("Showing table $CurTableNum of $LastTableNum"); | |
353 print $HTMLFileRef SetupHTMLTableRowDataValue(" "); | |
354 print $HTMLFileRef SetupHTMLTableRowDataValue(" "); | |
355 } | |
356 | |
357 print $HTMLFileRef SetupHTMLTableRowDataValue("Tables: "); | |
358 # Setup a link to first table... | |
359 if ($StartTableNum != $FirstTableNum) { | |
360 $HTMLFile = ${$TextFilesInfo{TableHTMLFiles}[$Index]}[$FirstTableIndex]; | |
361 $HTMLRefFile = GetRelativeFileDir($CurTableNum, $FirstTableNum, $FirstTableNum) . $HTMLFile; | |
362 $TableStartLineNum = ${$TextFilesInfo{TableStartLineNum}[$Index]}[$FirstTableIndex]; | |
363 $TableEndLineNum = ${$TextFilesInfo{TableEndLineNum}[$Index]}[$FirstTableIndex]; | |
364 $HTMLRefValue = SetupHTMLHRef("First", $HTMLRefFile, "First Table Containing Lines $TableStartLineNum To $TableEndLineNum"); | |
365 print $HTMLFileRef SetupHTMLTableRowDataValue($HTMLRefValue, $LinkBGColor, $LinkTextColor, $LinkFontBold); | |
366 } | |
367 | |
368 # Setup link to previous table... | |
369 if ($CurTableNum != $FirstTableNum) { | |
370 my($PreviousTableNum, $PreviousTableIndex); | |
371 $PreviousTableNum = $CurTableNum - 1; $PreviousTableIndex = $PreviousTableNum - 1; | |
372 $HTMLFile = ${$TextFilesInfo{TableHTMLFiles}[$Index]}[$PreviousTableIndex]; | |
373 $HTMLRefFile = GetRelativeFileDir($CurTableNum, $PreviousTableNum, $FirstTableNum) . $HTMLFile; | |
374 $TableStartLineNum = ${$TextFilesInfo{TableStartLineNum}[$Index]}[$PreviousTableIndex]; | |
375 $TableEndLineNum = ${$TextFilesInfo{TableEndLineNum}[$Index]}[$PreviousTableIndex]; | |
376 $HTMLRefValue = SetupHTMLHRef("Previous", $HTMLRefFile, "Previous Table Containing Lines $TableStartLineNum To $TableEndLineNum"); | |
377 print $HTMLFileRef SetupHTMLTableRowDataValue($HTMLRefValue, $LinkBGColor, $LinkTextColor, $LinkFontBold); | |
378 } | |
379 | |
380 for $TableNum ($StartTableNum .. $EndTableNum) { | |
381 $TableIndex = $TableNum - 1; | |
382 $HTMLFile = ${$TextFilesInfo{TableHTMLFiles}[$Index]}[$TableIndex]; | |
383 if ($TableNum == $CurTableNum) { | |
384 print $HTMLFileRef SetupHTMLTableRowDataValue($TableNum, $LinkBGColor, $InactiveLinkNumColor, $InactiveLinkFontBold); | |
385 } | |
386 else { | |
387 # Setup the link... | |
388 my($RefTitle); | |
389 $TableStartLineNum = ${$TextFilesInfo{TableStartLineNum}[$Index]}[$TableIndex]; | |
390 $TableEndLineNum = ${$TextFilesInfo{TableEndLineNum}[$Index]}[$TableIndex]; | |
391 $RefTitle = AddNumberSuffix($TableNum) . " Table Containing Lines $TableStartLineNum To $TableEndLineNum"; | |
392 $HTMLRefFile = GetRelativeFileDir($CurTableNum, $TableNum, $FirstTableNum) . $HTMLFile; | |
393 $HTMLRefValue = SetupHTMLHRef($TableNum, $HTMLRefFile, $RefTitle); | |
394 print $HTMLFileRef SetupHTMLTableRowDataValue($HTMLRefValue); | |
395 } | |
396 } | |
397 | |
398 # Setup link to next table... | |
399 if ($CurTableNum != $LastTableNum) { | |
400 my($NextTableNum, $NextTableIndex); | |
401 $NextTableNum = $CurTableNum + 1; $NextTableIndex = $NextTableNum - 1; | |
402 $HTMLFile = ${$TextFilesInfo{TableHTMLFiles}[$Index]}[$NextTableIndex]; | |
403 $HTMLRefFile = GetRelativeFileDir($CurTableNum, $NextTableNum, $FirstTableNum) . $HTMLFile; | |
404 $TableStartLineNum = ${$TextFilesInfo{TableStartLineNum}[$Index]}[$NextTableIndex]; | |
405 $TableEndLineNum = ${$TextFilesInfo{TableEndLineNum}[$Index]}[$NextTableIndex]; | |
406 $HTMLRefValue = SetupHTMLHRef("Next", $HTMLRefFile, "Next Table Containing Lines $TableStartLineNum To $TableEndLineNum"); | |
407 print $HTMLFileRef SetupHTMLTableRowDataValue($HTMLRefValue, $LinkBGColor, $LinkTextColor, $LinkFontBold); | |
408 } | |
409 | |
410 # Setup link to last table... | |
411 if ($EndTableNum != $LastTableNum) { | |
412 $HTMLFile = ${$TextFilesInfo{TableHTMLFiles}[$Index]}[$LastTableIndex]; | |
413 $HTMLRefFile = GetRelativeFileDir($CurTableNum, $LastTableNum, $FirstTableNum) . $HTMLFile; | |
414 $TableStartLineNum = ${$TextFilesInfo{TableStartLineNum}[$Index]}[$LastTableIndex]; | |
415 $TableEndLineNum = ${$TextFilesInfo{TableEndLineNum}[$Index]}[$LastTableIndex]; | |
416 $HTMLRefValue = SetupHTMLHRef("Last", $HTMLRefFile, "Last Table Containing Lines $TableStartLineNum To $TableEndLineNum"); | |
417 print $HTMLFileRef SetupHTMLTableRowDataValue($HTMLRefValue, $LinkBGColor, $LinkTextColor, $LinkFontBold); | |
418 } | |
419 # Setup current table info text.... | |
420 print $HTMLFileRef SetupHTMLTableRowDataValue(" "); | |
421 print $HTMLFileRef SetupHTMLTableRowDataValue(" "); | |
422 $TableStartLineNum = ${$TextFilesInfo{TableStartLineNum}[$Index]}[$CurTableNum - 1]; | |
423 $TableEndLineNum = ${$TextFilesInfo{TableEndLineNum}[$Index]}[$CurTableNum - 1]; | |
424 if ($OptionsInfo{NavLinksLineInfo}) { | |
425 print $HTMLFileRef SetupHTMLTableRowDataValue("Showing lines $TableStartLineNum to $TableEndLineNum of $LastLineNum"); | |
426 } | |
427 else { | |
428 print $HTMLFileRef SetupHTMLTableRowDataValue("Showing table $CurTableNum of $LastTableNum"); | |
429 } | |
430 | |
431 print $HTMLFileRef $TextFilesInfo{RowEndTags}; | |
432 # End link table... | |
433 print $HTMLFileRef SetupHTMLTableEnd(); | |
434 print $HTMLFileRef SetupHTMLDivEnd(); | |
435 print $HTMLFileRef SetupHTMLAlignmentEnd("center"); | |
436 } | |
437 | |
438 # Generate relative directory path... | |
439 sub GetRelativeFileDir { | |
440 my($FromTableNum, $ToTableNum, $FirstTableNum) = @_; | |
441 my($RelativeFileDir) = ""; | |
442 | |
443 if ($FromTableNum == $FirstTableNum) { | |
444 $RelativeFileDir = ($ToTableNum == $FirstTableNum) ? ".\/" : ".\/html\/"; | |
445 } | |
446 else { | |
447 $RelativeFileDir = ($ToTableNum == $FirstTableNum) ? "..\/" : ".\/"; | |
448 } | |
449 return $RelativeFileDir; | |
450 } | |
451 | |
452 # Based on hightlight stype, return appropriate colors for background or text... | |
453 sub GetValueHighlightColors { | |
454 my($FileIndex, $ColNum, $Value) = @_; | |
455 my($DataType, $Criterion, $CriterionValue, $BgColor, $FontColor, $ValueOk, $Nothing); | |
456 | |
457 $BgColor = ""; $FontColor = ""; | |
458 $DataType = ${$TextFilesInfo{HightlightDataMap}[$FileIndex]{$ColNum}}[0]; | |
459 $Criterion = ${$TextFilesInfo{HightlightDataMap}[$FileIndex]{$ColNum}}[1]; | |
460 $CriterionValue = ${$TextFilesInfo{HightlightDataMap}[$FileIndex]{$ColNum}}[2]; | |
461 | |
462 $ValueOk = 0; | |
463 if ($DataType =~ /^numeric$/i) { | |
464 NUMSWITCH: { | |
465 if ($Criterion =~ /^ge$/i) { $ValueOk = ($Value >= $CriterionValue) ? 1 : 0; last NUMSWITCH; } | |
466 if ($Criterion =~ /^le$/i) { $ValueOk = ($Value <= $CriterionValue) ? 1 : 0; last NUMSWITCH; } | |
467 if ($Criterion =~ /^eq$/i) { $ValueOk = ($Value == $CriterionValue) ? 1 : 0; last NUMSWITCH; } | |
468 $Nothing = 1; | |
469 } | |
470 } | |
471 else { | |
472 TEXTSWITCH: { | |
473 if ($Criterion =~ /^ge$/i) { $ValueOk = ($Value ge $CriterionValue) ? 1 : 0; last TEXTSWITCH; } | |
474 if ($Criterion =~ /^le$/i) { $ValueOk = ($Value le $CriterionValue) ? 1 : 0; last TEXTSWITCH; } | |
475 if ($Criterion =~ /^eq$/i) { $ValueOk = ($Value eq $CriterionValue) ? 1 : 0; last TEXTSWITCH; } | |
476 $Nothing = 1; | |
477 } | |
478 } | |
479 $BgColor = $ValueOk ? $OptionsInfo{ValueOkColor} : $OptionsInfo{ValueNotOkColor}; | |
480 if ($Options{highlightstyle} =~ /^text$/i) { | |
481 $BgColor = ""; | |
482 $FontColor = $ValueOk ? $OptionsInfo{ValueOkColor} : $OptionsInfo{ValueNotOkColor}; | |
483 } | |
484 return ($BgColor, $FontColor); | |
485 } | |
486 | |
487 # Setup columns, tables and other information... | |
488 sub SetupCoulmnsTablesAndMiscInfo { | |
489 SetupColumnsToHighlightInfo(); | |
490 SetupMultipleTablesInfo(); | |
491 SetupHTMLTagsInfo(); | |
492 } | |
493 | |
494 # Setup columns to highlight information... | |
495 sub SetupColumnsToHighlightInfo { | |
496 my($ColID, $DataType, $Criterion, $Value, $Index, $ColNum, $ColLabel, $ColIndex); | |
497 | |
498 @{$TextFilesInfo{HightlightColNumMap}} = (); | |
499 @{$TextFilesInfo{HightlightDataMap}} = (); | |
500 | |
501 for $Index (0 .. $#TextFilesList) { | |
502 %{$TextFilesInfo{HightlightColNumMap}[$Index]} = (); | |
503 %{$TextFilesInfo{HightlightDataMap}[$Index]} = (); | |
504 if ($TextFilesInfo{FileOkay}[$Index]) { | |
505 SPECIFIEDCOLS: for $ColIndex (0 .. $#{$OptionsInfo{SpecifiedColIds}}) { | |
506 $ColID = $OptionsInfo{SpecifiedColIds}[$ColIndex]; | |
507 $DataType = $OptionsInfo{SpecifiedColDataTypes}[$ColIndex]; | |
508 $Criterion = $OptionsInfo{SpecifiedColCriteria}[$ColIndex]; | |
509 $Value = $OptionsInfo{SpecifiedColValues}[$ColIndex]; | |
510 if (!$OptionsInfo{HighlightStatus}) { | |
511 next SPECIFIEDCOLS; | |
512 } | |
513 if ($Options{highlightby} =~ /^colnum$/i) { | |
514 $ColNum = $ColID; | |
515 if ($ColNum > 0 && $ColNum <= $TextFilesInfo{ColCount}[$Index]) { | |
516 $ColNum -= 1; | |
517 } | |
518 else { | |
519 warn "Warning: Ignoring column number, $ColID, specifed in quartet, \"$ColID,$DataType,$Criterion,$Value\", using \"--highlight\" option for $TextFilesList[$Index]: it doesn't exists \n"; | |
520 next SPECIFIEDCOLS; | |
521 } | |
522 } | |
523 else { | |
524 $ColLabel = $ColID; | |
525 if (exists($TextFilesInfo{ColLabelToNumMap}[$Index]{$ColLabel})) { | |
526 $ColNum = $TextFilesInfo{ColLabelToNumMap}[$Index]{$ColLabel}; | |
527 } else { | |
528 warn "Warning: Ignoring column label, $ColID, specifed in quartet, \"$ColID,$DataType,$Criterion,$Value\", using \"--highlight\" option for $TextFilesList[$Index]: it doesn't exists \n"; | |
529 next SPECIFIEDCOLS; | |
530 } | |
531 } | |
532 $TextFilesInfo{HightlightColNumMap}[$Index]{$ColNum} = $ColNum; | |
533 @{$TextFilesInfo{HightlightDataMap}[$Index]{$ColNum}} =(); | |
534 push @{$TextFilesInfo{HightlightDataMap}[$Index]{$ColNum}}, ($DataType, $Criterion, $Value); | |
535 } | |
536 } | |
537 } | |
538 } | |
539 | |
540 # Setup navigation link information for multiple tables... | |
541 sub SetupMultipleTablesInfo { | |
542 my($Index, $LinesPerTable); | |
543 | |
544 $LinesPerTable = $Options{numrows}; | |
545 @{$TextFilesInfo{TableCount}} = (); | |
546 @{$TextFilesInfo{TableHTMLFiles}} = (); | |
547 @{$TextFilesInfo{TableStartLineNum}} = (); | |
548 @{$TextFilesInfo{TableEndLineNum}} = (); | |
549 | |
550 for $Index (0 .. $#TextFilesList) { | |
551 $TextFilesInfo{TableCount}[$Index] = 1; | |
552 @{$TextFilesInfo{TableHTMLFiles}[$Index]} = (); | |
553 @{$TextFilesInfo{TableStartLineNum}[$Index]} = (); | |
554 @{$TextFilesInfo{TableEndLineNum}[$Index]} = (); | |
555 | |
556 if ($TextFilesInfo{FileOkay}[$Index]) { | |
557 if ($TextFilesInfo{MultipleHTMLTables}[$Index]) { | |
558 my($TableIndex, $TotalLines, $TableCount, $TableStartLineNum, $TableEndLineNum, $Name); | |
559 | |
560 $TotalLines = $TextFilesInfo{LineCount}[$Index]; | |
561 $TableCount = ($TotalLines % $LinesPerTable) ? (int($TotalLines/$LinesPerTable) + 1) : ($TotalLines/$LinesPerTable); | |
562 $TextFilesInfo{TableCount}[$Index] = $TableCount; | |
563 for $TableIndex (1 .. $TableCount) { | |
564 $TableStartLineNum = ($TableIndex - 1) * $LinesPerTable + 1; | |
565 $TableEndLineNum = ($TableIndex == $TableCount) ? $TotalLines : ($TableIndex * $LinesPerTable); | |
566 push @{$TextFilesInfo{TableStartLineNum}[$Index]}, $TableStartLineNum; | |
567 push @{$TextFilesInfo{TableEndLineNum}[$Index]}, $TableEndLineNum; | |
568 | |
569 # Setup HTML file names for all the tables... | |
570 $Name = "Lines" . "$TableStartLineNum" . "To" . "$TableEndLineNum"; | |
571 if ($TableIndex == 1) { | |
572 $Name = ""; | |
573 } | |
574 $Name = $TextFilesInfo{HTMLRoot}[$Index] . $Name . ".html"; | |
575 push @{$TextFilesInfo{TableHTMLFiles}[$Index]}, $Name; | |
576 } | |
577 #print "$TextFilesList[$Index]: $TableCount - @{$TextFilesInfo{TableStartLineNum}[$Index]} - @{$TextFilesInfo{TableEndLineNum}[$Index]} - @{$TextFilesInfo{TableHTMLFiles}[$Index]}\n"; | |
578 } | |
579 } | |
580 } | |
581 } | |
582 | |
583 # Setup HTML tags information... | |
584 sub SetupHTMLTagsInfo { | |
585 # Setup row tags... | |
586 $TextFilesInfo{RowHeaderTags} = ""; | |
587 $TextFilesInfo{RowEndTags} = ""; | |
588 $TextFilesInfo{BgFilledOddRowHeaderTags} = ""; | |
589 $TextFilesInfo{BgFilledEvenRowHeaderTags} = ""; | |
590 $TextFilesInfo{TableRowHeaderTags} = ""; | |
591 | |
592 $TextFilesInfo{RowHeaderTags} = SetupHTMLTableRowHeader($OptionsInfo{RowHAlignment}, "", $OptionsInfo{RowVAlignment}); | |
593 $TextFilesInfo{RowEndTags} = SetupHTMLTableRowEnd(); | |
594 | |
595 if ($OptionsInfo{ShadeRowsStatus}) { | |
596 $TextFilesInfo{BgFilledOddRowHeaderTags} = SetupHTMLTableRowHeader($OptionsInfo{RowHAlignment}, $OptionsInfo{OddRowsShadeColor}, $OptionsInfo{RowVAlignment}); | |
597 $TextFilesInfo{BgFilledEvenRowHeaderTags} = SetupHTMLTableRowHeader($OptionsInfo{RowHAlignment}, $OptionsInfo{EvenRowsShadeColor}, $OptionsInfo{RowVAlignment}); | |
598 } | |
599 | |
600 $TextFilesInfo{TableRowHeaderTags} = SetupHTMLTableRowHeader($OptionsInfo{TableHeaderRowHAlignment}, $OptionsInfo{TableHeaderRowColor}, $OptionsInfo{TableHeaderRowVAlignment}); | |
601 | |
602 } | |
603 | |
604 #Make sure appropriate mode specific option values are specified... | |
605 sub ProcessOptions { | |
606 | |
607 %OptionsInfo = (); | |
608 | |
609 $OptionsInfo{RowHAlignment} = "left"; $OptionsInfo{RowVAlignment} = "middle"; | |
610 if (exists($Options{align})) { | |
611 my (@AlignValues) = split ",", $Options{align}; | |
612 if (@AlignValues == 2) { | |
613 $OptionsInfo{RowHAlignment} = $AlignValues[0]; | |
614 $OptionsInfo{RowVAlignment} = $AlignValues[1]; | |
615 } | |
616 elsif (@AlignValues == 1) { | |
617 $OptionsInfo{RowHAlignment} = $AlignValues[0]; | |
618 } | |
619 else { | |
620 die "Error: Invalid number of values, ", scalar(@AlignValues) , ", specified by \"-a --align\" option.\nIt must contain only one or two value.\n"; | |
621 } | |
622 if ($OptionsInfo{RowHAlignment} !~ /^(left|center|right)$/i) { | |
623 die "Error: The horizontal alignment value specified, $Options{align}, for option \"-a --align\" is not valid. Allowed values: left, center, or right\n"; | |
624 } | |
625 if ($OptionsInfo{RowVAlignment} !~ /^(top|middle|bottom)$/i) { | |
626 die "Error: The horizontal alignment value specified, $Options{align}, for option \"-a --align\" is not valid. Allowed values: top, middle, or bottom\n"; | |
627 } | |
628 } | |
629 | |
630 $OptionsInfo{TableHeaderRowHAlignment} = "center"; $OptionsInfo{TableHeaderRowVAlignment} = "middle"; | |
631 if (exists($Options{headeralign})) { | |
632 my (@AlignValues) = split ",", $Options{headeralign}; | |
633 if (@AlignValues == 2) { | |
634 $OptionsInfo{TableHeaderRowHAlignment} = $AlignValues[0]; | |
635 $OptionsInfo{TableHeaderRowVAlignment} = $AlignValues[1]; | |
636 } | |
637 elsif (@AlignValues == 1) { | |
638 $OptionsInfo{TableHeaderRowHAlignment} = $AlignValues[0]; | |
639 } | |
640 else { | |
641 die "Error: Invalid number of values, ", scalar(@AlignValues) , ", specified by \"--headeralign\" option.\nIt must contain only one or two value.\n"; | |
642 } | |
643 if ($OptionsInfo{TableHeaderRowHAlignment} !~ /^(left|center|right)$/i) { | |
644 die "Error: The horizontal alignment value specified, $Options{headeralign}, for option \"--headeralign\" is not valid. Allowed values: left, center, or right\n"; | |
645 } | |
646 if ($OptionsInfo{TableHeaderRowVAlignment} !~ /^(top|middle|bottom)$/i) { | |
647 die "Error: The horizontal alignment value specified, $Options{headeralign}, for option \"-a --headeralign\" is not valid. Allowed values: top, middle, or bottom\n"; | |
648 } | |
649 } | |
650 | |
651 $OptionsInfo{TitleDisplay} = ($Options{titledisplay} =~ /^yes$/i) ? 1 : 0; | |
652 | |
653 if (exists($Options{border})) { | |
654 $OptionsInfo{TableBorder} = $Options{border}; | |
655 } | |
656 else { | |
657 $OptionsInfo{TableBorder} = ($Options{mode} =~ /^(plain|highlight)$/i) ? 1 : 0; | |
658 } | |
659 $OptionsInfo{TableCellPadding} = $Options{cellpadding}; | |
660 $OptionsInfo{TableCellSpacing} = $Options{cellspacing}; | |
661 $OptionsInfo{Footer} = $Options{footer} ? $Options{footer} : ""; | |
662 | |
663 if ($Options{headercolor}) { | |
664 $OptionsInfo{TableHeaderRowColor} = $Options{headercolor}; | |
665 } | |
666 else { | |
667 $OptionsInfo{TableHeaderRowColor} = ($Options{mode} =~ /^plain$/i) ? "" : "#ccccff"; | |
668 } | |
669 | |
670 $OptionsInfo{NavLinksAtBottom} = 1; $OptionsInfo{NavLinksAtTop} = 0; | |
671 if ($Options{displaylinks} =~ /^(both|top)$/i) { | |
672 $OptionsInfo{NavLinksAtTop} = 1; | |
673 } | |
674 $OptionsInfo{NavLinksTableInfo} = 1; $OptionsInfo{NavLinksLineInfo} = 0; | |
675 if ($Options{displaylinksinfo} =~ /^both$/i) { | |
676 $OptionsInfo{NavLinksLineInfo} = 1; | |
677 $OptionsInfo{NavLinksTableInfo} = 1; | |
678 } | |
679 elsif ($Options{displaylinksinfo} =~ /^line$/i) { | |
680 $OptionsInfo{NavLinksLineInfo} = 1; | |
681 $OptionsInfo{NavLinksTableInfo} = 0; | |
682 } | |
683 | |
684 if ($Options{stylesheet} =~ /^old$/i ) { | |
685 if (!$Options{stylesheetname}) { | |
686 die "Error: No stylesheet name specified using \"--stylesheetname\" option: It is required for \"old\" value of \"-s --stylesheet\" option. \n"; | |
687 } | |
688 } | |
689 | |
690 my(@ColorValues); | |
691 $OptionsInfo{OddRowsShadeColor} = ""; $OptionsInfo{EvenRowsShadeColor} = ""; $OptionsInfo{ShadeRowsStatus} = 0; | |
692 if ($Options{mode} =~ /^(shade|shadedhighlight)$/i) { | |
693 $OptionsInfo{OddRowsShadeColor} = "#ffffff"; | |
694 $OptionsInfo{EvenRowsShadeColor} = "#e0e0eb"; | |
695 $OptionsInfo{ShadeRowsStatus} = 1; | |
696 if ($Options{shadecolor}) { | |
697 # Make sure only two value are specified... | |
698 @ColorValues = split ",", $Options{shadecolor}; | |
699 if (@ColorValues == 2) { | |
700 $OptionsInfo{OddRowsShadeColor} = $ColorValues[0]; | |
701 $OptionsInfo{EvenRowsShadeColor} = $ColorValues[1]; | |
702 } | |
703 else { | |
704 die "Error: Invalid number of values, ", scalar(@ColorValues) , ", specified by \"--shadecolor\" option.\nIt must contain only two values.\n"; | |
705 } | |
706 } | |
707 } | |
708 $OptionsInfo{ValueOkColor} = ""; $OptionsInfo{ValueNotOkColor} = ""; $OptionsInfo{HighlightStatus} = 0; | |
709 if ($Options{mode} =~ /^(highlight|shadedhighlight)$/i) { | |
710 my($HighlightMode, $HighlightBy); | |
711 $HighlightMode = $Options{mode}; $HighlightBy = $Options{highlightby}; | |
712 | |
713 $OptionsInfo{HighlightStatus} = 1; | |
714 $OptionsInfo{ValueOkColor} = "#0fff0f"; | |
715 $OptionsInfo{ValueNotOkColor} = "#ff0f0f"; | |
716 if ($Options{highlightstyle} =~ /^text$/i) { | |
717 $OptionsInfo{ValueOkColor} = "#0fbb0f"; | |
718 $OptionsInfo{ValueNotOkColor} = "#ff0f0f"; | |
719 } | |
720 if ($Options{highlightcolor}) { | |
721 # Make sure two values are specified... | |
722 @ColorValues = split ",", $Options{highlightcolor}; | |
723 if (@ColorValues == 2) { | |
724 $OptionsInfo{ValueOkColor} = $ColorValues[0]; | |
725 $OptionsInfo{ValueNotOkColor} = $ColorValues[1]; | |
726 } | |
727 else { | |
728 die "Error: Invalid number of values, ", scalar(@ColorValues), ", specified by \"--highlightcolor\" option.\nIt must contain only two value for $HighlightMode value specified using \"-m --mode\" option.\n"; | |
729 } | |
730 } | |
731 if (!$Options{highlight}) { | |
732 die "Error: Specify columns to be highlighted using \"--hightlight\" option\n"; | |
733 } | |
734 # Retrieve quartet values from "hightlight" option... | |
735 my(@HighlightValueQuartets); | |
736 | |
737 @HighlightValueQuartets = (); | |
738 @HighlightValueQuartets = split ",", $Options{highlight}; | |
739 if ((@HighlightValueQuartets % 4)) { | |
740 die "Error: Quartets not found in values specified using \"--highlight\" option for $HighlightMode \"-m --mode\"\n"; | |
741 } | |
742 # Process quartets... | |
743 my($Index, $Col, $DataType, $Criterion, $Value); | |
744 | |
745 @{$OptionsInfo{SpecifiedColIds}} = (); | |
746 @{$OptionsInfo{SpecifiedColDataTypes}} = (); | |
747 @{$OptionsInfo{SpecifiedColCriteria}} = (); | |
748 @{$OptionsInfo{SpecifiedColValues}} = (); | |
749 for ($Index = 0; $Index < @HighlightValueQuartets; $Index = $Index + 4) { | |
750 $Col = $HighlightValueQuartets[$Index]; | |
751 $DataType = $HighlightValueQuartets[$Index + 1]; | |
752 $Criterion = $HighlightValueQuartets[$Index + 2]; | |
753 $Value = $HighlightValueQuartets[$Index + 3]; | |
754 if ($Options{highlightby} =~ /^colnum$/i ) { | |
755 if (!IsPositiveInteger($Col)) { | |
756 die "Error: Invalid column id, $Col, specified in quartet, \"$Col,$DataType,$Criterion,$Value\", using \"--hightlight\" option: It must be an integer value > 0 for $HighlightMode \"-m --mode\" and $HighlightBy \"--highlightby\" option values.\n"; | |
757 } | |
758 } | |
759 if ($DataType !~ /^(numeric|text)$/i) { | |
760 die "Error: Invalid column data type, $DataType, specified in quartet, \"$Col,$DataType,$Criterion,$Value\", using \"--hightlight\" option: Valid values: numeric or text\n"; | |
761 } | |
762 if ($Criterion !~ /^(eq|le|ge)$/i) { | |
763 die "Error: Invalid criterion value, $Criterion, specified in quartet, \"$Col,$DataType,$Criterion,$Value\", using \"--hightlight\" option: Valid values: le, ge, or eq\n"; | |
764 } | |
765 if ($DataType =~ /^numeric$/i) { | |
766 if (!IsFloat($Value)) { | |
767 die "Error: Invalid criterion value, $Value, specified in quartet, \"$Col,$DataType,$Criterion,$Value\", using \"--hightlight\" option: numeric value required for numeric data type\n"; | |
768 } | |
769 } | |
770 push @{$OptionsInfo{SpecifiedColIds}}, $Col; | |
771 push @{$OptionsInfo{SpecifiedColDataTypes}}, $DataType; | |
772 push @{$OptionsInfo{SpecifiedColCriteria}}, $Criterion; | |
773 push @{$OptionsInfo{SpecifiedColValues}}, $Value; | |
774 } | |
775 } | |
776 } | |
777 | |
778 # Retrieve information about input text files... | |
779 sub RetrieveTextFilesInfo { | |
780 my($LineCount, $TextFile, $FileDir, $FileName, $HTMLFile, $CSSFile, $HTMLRoot, $HTMLTitle, $FileExt, $Index, $ColIndex, $ColNum, $ColLabel, $LinesCount, $InDelim, $Line, @LineWords, @ColLabels, $TopHTMLDir); | |
781 | |
782 %TextFilesInfo = (); | |
783 | |
784 @{$TextFilesInfo{FileOkay}} = (); | |
785 @{$TextFilesInfo{ColCount}} = (); | |
786 @{$TextFilesInfo{ColLabels}} = (); | |
787 @{$TextFilesInfo{ColLabelToNumMap}} = (); | |
788 @{$TextFilesInfo{LineCount}} = (); | |
789 @{$TextFilesInfo{InDelim}} = (); | |
790 | |
791 @{$TextFilesInfo{HTMLRoot}} = (); | |
792 @{$TextFilesInfo{HTMLTitle}} = (); | |
793 @{$TextFilesInfo{MultipleHTMLTables}} = (); | |
794 | |
795 @{$TextFilesInfo{TopHTMLDir}} = (); | |
796 @{$TextFilesInfo{SubHTMLDir}} = (); | |
797 | |
798 FILELIST: for $Index (0 .. $#TextFilesList) { | |
799 $TextFile = $TextFilesList[$Index]; | |
800 | |
801 $TextFilesInfo{FileOkay}[$Index] = 0; | |
802 $TextFilesInfo{ColCount}[$Index] = 0; | |
803 $TextFilesInfo{LineCount}[$Index] = 0; | |
804 $TextFilesInfo{InDelim}[$Index] = ""; | |
805 $TextFilesInfo{HTMLRoot}[$Index] = ""; | |
806 $TextFilesInfo{HTMLTitle}[$Index] = ""; | |
807 $TextFilesInfo{MultipleHTMLTables}[$Index] = 0; | |
808 | |
809 @{$TextFilesInfo{ColLabels}[$Index]} = (); | |
810 %{$TextFilesInfo{ColLabelToNumMap}[$Index]} = (); | |
811 | |
812 if (!(-e $TextFile)) { | |
813 warn "Warning: Ignoring file $TextFile: It doesn't exist\n"; | |
814 next FILELIST; | |
815 } | |
816 if (!CheckFileType($TextFile, "csv tsv")) { | |
817 warn "Warning: Ignoring file $TextFile: It's not a csv or tsv file\n"; | |
818 next FILELIST; | |
819 } | |
820 ($FileDir, $FileName, $FileExt) = ParseFileName($TextFile); | |
821 if ($FileExt =~ /^tsv$/i) { | |
822 $InDelim = "\t"; | |
823 } | |
824 else { | |
825 $InDelim = "\,"; | |
826 if ($Options{indelim} !~ /^(comma|semicolon)$/i) { | |
827 warn "Warning: Ignoring file $TextFile: The value specified, $Options{indelim}, for option \"--indelim\" is not valid for csv files\n"; | |
828 next FILELIST; | |
829 } | |
830 if ($Options{indelim} =~ /^semicolon$/i) { | |
831 $InDelim = "\;"; | |
832 } | |
833 } | |
834 | |
835 if (!open TEXTFILE, "$TextFile") { | |
836 warn "Warning: Ignoring file $TextFile: Couldn't open it: $! \n"; | |
837 next FILELIST; | |
838 } | |
839 | |
840 $Line = GetTextLine(\*TEXTFILE); | |
841 @ColLabels = quotewords($InDelim, 0, $Line); | |
842 $LineCount = 0; | |
843 while (<TEXTFILE>) { | |
844 $LineCount++; | |
845 } | |
846 close TEXTFILE; | |
847 | |
848 $FileDir = ""; $FileName = ""; $FileExt = ""; | |
849 ($FileDir, $FileName, $FileExt) = ParseFileName($TextFile); | |
850 $HTMLRoot = $FileName; | |
851 if ($Options{root} && (@TextFilesList == 1)) { | |
852 my ($RootFileDir, $RootFileName, $RootFileExt) = ParseFileName($Options{root}); | |
853 if ($RootFileName && $RootFileExt) { | |
854 $HTMLRoot = $RootFileName; | |
855 } | |
856 else { | |
857 $HTMLRoot = $Options{root}; | |
858 } | |
859 } | |
860 $HTMLTitle = $HTMLRoot; | |
861 if ($Options{title} && (@TextFilesList == 1)) { | |
862 $HTMLTitle = $Options{title}; | |
863 } | |
864 $HTMLFile = lc($HTMLRoot) . "-html"; | |
865 if (!$Options{overwrite}) { | |
866 if (-d $HTMLFile) { | |
867 warn "Warning: Ignoring file $TextFile: The directory $HTMLFile already exists\n"; | |
868 next FILELIST; | |
869 } | |
870 } | |
871 | |
872 $TextFilesInfo{FileOkay}[$Index] = 1; | |
873 $TextFilesInfo{InDelim}[$Index] = $InDelim; | |
874 $TextFilesInfo{HTMLRoot}[$Index] = "$HTMLRoot"; | |
875 $TextFilesInfo{HTMLTitle}[$Index] = "$HTMLTitle"; | |
876 | |
877 $TextFilesInfo{ColCount}[$Index] = @ColLabels; | |
878 push @{$TextFilesInfo{ColLabels}[$Index]}, @ColLabels; | |
879 for $ColNum (0 .. $#ColLabels) { | |
880 $ColLabel = $ColLabels[$ColNum]; | |
881 $TextFilesInfo{ColLabelToNumMap}[$Index]{$ColLabel} = $ColNum; | |
882 } | |
883 $TextFilesInfo{LineCount}[$Index] = $LineCount; | |
884 | |
885 if ($Options{numrows} == 0 || $LineCount <= $Options{numrows}) { | |
886 $TextFilesInfo{MultipleHTMLTables}[$Index] = 0; | |
887 } | |
888 else { | |
889 $TextFilesInfo{MultipleHTMLTables}[$Index] = 1; | |
890 } | |
891 # Setup HTML data directories paths... | |
892 $TopHTMLDir = lc($TextFilesInfo{HTMLRoot}[$Index]) . "-html"; | |
893 $TextFilesInfo{TopHTMLDir}[$Index] = "$TopHTMLDir"; | |
894 $TextFilesInfo{SubHTMLDir}[$Index] = "$TopHTMLDir\/html"; | |
895 } | |
896 } | |
897 | |
898 # Setup various data directories to hold HTML and other related files... | |
899 sub SetupDataDirs { | |
900 my($Index) = @_; | |
901 my($TopHTMLDir, $SubHTMLDir, $CreateTopHTMLDir, $CreateSubHTMLDir); | |
902 | |
903 $TopHTMLDir = $TextFilesInfo{TopHTMLDir}[$Index]; | |
904 $SubHTMLDir = $TextFilesInfo{SubHTMLDir}[$Index]; | |
905 | |
906 # Clean up existing directories... | |
907 if (-d $TopHTMLDir) { | |
908 unlink "<$TopHTMLDir/*.html>"; | |
909 unlink "<$TopHTMLDir/*.css>"; | |
910 } | |
911 if (-d $SubHTMLDir) { | |
912 unlink "<$SubHTMLDir/*.html>"; | |
913 } | |
914 # What directories need to be created... | |
915 $CreateTopHTMLDir = (-d $TopHTMLDir) ? 0 : 1; | |
916 | |
917 $CreateSubHTMLDir = 0; | |
918 if ($TextFilesInfo{MultipleHTMLTables}[$Index]) { | |
919 $CreateSubHTMLDir = (-d $SubHTMLDir) ? 0 : 1; | |
920 } | |
921 | |
922 # Create appropriate directories... | |
923 if ($CreateTopHTMLDir) { | |
924 mkdir $TopHTMLDir or die "Couldn't mkdir $TopHTMLDir: $! \n"; | |
925 } | |
926 if ($CreateSubHTMLDir) { | |
927 mkdir $SubHTMLDir or die "Error: Couldn't mkdir $SubHTMLDir: $! \n"; | |
928 } | |
929 else { | |
930 unlink <$SubHTMLDir/*.html>; | |
931 } | |
932 return ($TopHTMLDir, $SubHTMLDir); | |
933 } | |
934 | |
935 # Setup script usage and retrieve command line arguments specified using various options... | |
936 sub SetupScriptUsage { | |
937 | |
938 # Retrieve all the options... | |
939 %Options = (); | |
940 $Options{indelim} = "comma"; | |
941 $Options{numrows} = 50; | |
942 | |
943 $Options{mode} = "shade"; | |
944 $Options{highlightby} = "colnum"; | |
945 $Options{highlightstyle} = "background"; | |
946 | |
947 $Options{cellpadding} = 2; | |
948 $Options{cellspacing} = 1; | |
949 | |
950 $Options{displaylinks} = "both"; | |
951 $Options{displaylinksinfo} = "both"; | |
952 $Options{stylesheet} = "new"; | |
953 | |
954 $Options{titledisplay} = "yes"; | |
955 | |
956 if (!GetOptions(\%Options, "align|a=s", "border|b=i", "cellpadding=i", "cellspacing=i", "color|c=s", "footer=s", "displaylinks|d=s", "displaylinksinfo=s", "help|h", "headeralign=s", "headercolor=s", "highlight=s", "highlightby=s", "highlightcolor=s", "highlightstyle=s", "indelim=s", "mode|m=s", "numrows|n=i", "overwrite|o", "root|r=s", "shadecolor=s", "stylesheet=s", "stylesheetname=s", "title|t=s", "titledisplay=s", "workingdir|w=s")) { | |
957 die "\nTo get a list of valid options and their values, use \"$ScriptName -h\" or\n\"perl -S $ScriptName -h\" command and try again...\n"; | |
958 } | |
959 | |
960 if ($Options{workingdir}) { | |
961 if (! -d $Options{workingdir}) { | |
962 die "Error: The value specified, $Options{workingdir}, for option \"-w --workingdir\" is not a directory name.\n"; | |
963 } | |
964 chdir $Options{workingdir} or die "Error: Couldn't chdir $Options{workingdir}: $! \n"; | |
965 } | |
966 if ($Options{displaylinks} !~ /^(top|bottom|both)$/i) { | |
967 die "Error: The value specified, $Options{displaylinks}, for option \"-d --displaylinks\" is not valid. Allowed values: top, bottom, or both\n"; | |
968 } | |
969 if ($Options{displaylinksinfo} !~ /^(line|table|both)$/i) { | |
970 die "Error: The value specified, $Options{displaylinksinfo}, for option \"--displaylinksinfo\" is not valid. Allowed values: line, table, or both\n"; | |
971 } | |
972 if ($Options{indelim} !~ /^(comma|semicolon)$/i) { | |
973 die "Error: The value specified, $Options{indelim}, for option \"--indelim\" is not valid. Allowed values: comma or semicolon\n"; | |
974 } | |
975 if ($Options{highlightby} !~ /^(colnum|collabel)$/i) { | |
976 die "Error: The value specified, $Options{highlightby}, for option \"--highlightby\" is not valid. Allowed values: colnum or collabel\n"; | |
977 } | |
978 if ($Options{highlightstyle} !~ /^(background|text)$/i) { | |
979 die "Error: The value specified, $Options{highlightstyle}, for option \"--highlightstyle\" is not valid. Allowed values: background or text\n"; | |
980 } | |
981 if ($Options{mode} !~ /^(plain|shade|highlight|shadedhighlight)$/i) { | |
982 die "Error: The value specified, $Options{mode}, for option \"-m --mode\" is not valid. Allowed values: plain, shade, hightlight, or shadedhighlight\n"; | |
983 } | |
984 if ($Options{stylesheet} !~ /^(old|new|none)$/i) { | |
985 die "Error: The value specified, $Options{stylesheet}, for option \"-s --stylesheet\" is not valid. Allowed values: old, new, or none\n"; | |
986 } | |
987 if ($Options{numrows} < 0) { | |
988 die "Error: The value specified, $Options{numrows}, for option \"-n --numrows\" is not valid. Allowed values: >= 0 \n"; | |
989 } | |
990 if ($Options{titledisplay} !~ /^(yes|no)$/i) { | |
991 die "Error: The value specified, $Options{titledisplay}, for option \"--titledisplay\" is not valid. Allowed values: yes or no\n"; | |
992 } | |
993 if (exists($Options{border})) { | |
994 if ($Options{border} < 0) { | |
995 die "Error: The value specified, $Options{border}, for option \"--border\" is not valid. Allowed values: >= 0 \n"; | |
996 } | |
997 } | |
998 if ($Options{cellpadding} < 0) { | |
999 die "Error: The value specified, $Options{cellpadding}, for option \"--cellpadding\" is not valid. Allowed values: >= 0 \n"; | |
1000 } | |
1001 if ($Options{cellspacing} < 0) { | |
1002 die "Error: The value specified, $Options{cellspacing}, for option \"--cellspacing\" is not valid. Allowed values: >= 0 \n"; | |
1003 } | |
1004 } | |
1005 | |
1006 __END__ | |
1007 | |
1008 =head1 NAME | |
1009 | |
1010 TextFilesToHTML.pl - Generate HTML table file(s) from TextFile(s) | |
1011 | |
1012 =head1 SYNOPSIS | |
1013 | |
1014 TextFilesToHTML.pl ... TextFile(s)... | |
1015 | |
1016 TextFilesToHTML.pl [B<-a, --align> left | center | right,[top | middle | bottom]] [B<-b, --border> borderwidth] [B<--cellpadding> padding] | |
1017 [B<--cellspacing> spacing] [B<--footer> string] [B<-d, --displaylinks> top | bottom | both] | |
1018 [B<--displaylinksinfo> line | table | both] [B<-h, --help>] | |
1019 [B<--headeralign> left | center | right,[top | middle | bottom]] [B<--headercolor> "#RRGGBB"] | |
1020 [B<--highlight> "fieldlabel,datatype,criterion,value,[fieldlabel,datatype,criterion,value,]..."] | |
1021 [B<--highlightby> colnum | collabel] [B<--highlightcolor> "#RRGGBB,#RRGGBB"] | |
1022 [B<--highlightstyle> text | background] [B<--indelim> comma | semicolon] [B<-m, --mode> plain | shade | highlight | shadedhighlight] | |
1023 [B<-n, --numrows> number] [B<-o, --overwrite>] [B<-r, --root> rootname] | |
1024 [B<--stylesheet> old | new | none] [B<--stylesheetname> filename] [B< --shadecolor> "#RRGGBB,#RRGGBB"] | |
1025 [B<-t, --title> string] [B<--titledisplay> yes | no] [B<-w, --workingdir> dirname] TextFile(s)... | |
1026 | |
1027 =head1 DESCRIPTION | |
1028 | |
1029 Generate HTML file(s) from I<TextFile(s)>. The HTML file(s) contain data tables and appropriate | |
1030 navigational links to view other tables. These files can be generated for local viewing or | |
1031 deployment on a web server. A variety of options are provided to control style and | |
1032 appearence of tables. | |
1033 | |
1034 Multiple I<TextFile(s)> names are separated by spaces. The valid file extensions are I<.csv> and | |
1035 I<.tsv> for comma/semicolon and tab delimited text files respectively. All other file names | |
1036 are ignored. All the text files in a current directory can be specified by I<*.csv>, | |
1037 I<*.tsv>, or the current directory name. The B<--indelim> option determines the | |
1038 format of I<TextFile(s)>. Any file which doesn't correspond to the format indicated | |
1039 by B<--indelim> option is ignored. | |
1040 | |
1041 =head1 OPTIONS | |
1042 | |
1043 =over 4 | |
1044 | |
1045 =item B<-a, --align> I<left | center | right,[top | middle | bottom]> | |
1046 | |
1047 Horizontal and vertical alignment for table rows except for header row which is specified | |
1048 using B<--headeralign> option. Possible horizontal alignment values: I<left, center, or right>. | |
1049 Possible vertical alignment values: I<top, middle, or bottom>. | |
1050 | |
1051 Default values: I<left,middle> | |
1052 | |
1053 =item B<-b, --border> I<borderwidth> | |
1054 | |
1055 Table border width. Default value: 1 for I<plain> and I<highlight> mode; 0 for I<shade> | |
1056 and I<shadedhightlight> mode. Zero indicates no border. | |
1057 | |
1058 =item B<--cellpadding> I<padding> | |
1059 | |
1060 Table cell padding. Default value: I<2>. | |
1061 | |
1062 =item B<--cellspacing> I<spacing> | |
1063 | |
1064 Table cell spacing. Default value: I<1>. | |
1065 | |
1066 =item B<--footer> I<string> | |
1067 | |
1068 Text string to be included at bottom of each HTML file. Default: none. | |
1069 | |
1070 =item B<-d, --displaylinks> I<top | bottom | both> | |
1071 | |
1072 Specify where to display navigation links in each HTML file for accessing all other HTML | |
1073 files. Possible values: I<top, bottom, or both>. Default value: I<both>. This option is | |
1074 only valid during multiple HTML files generation for an input file. | |
1075 | |
1076 =item B<--displaylinksinfo> I<line | table | both> | |
1077 | |
1078 Control display of additional information along with navigational links: Showing line | |
1079 n of m is displyed for line and showing table n of m for table. Possible values: I<line | |
1080 | table | both>. Default: I<both>. This option is only valid during multiple HTML files generation. | |
1081 | |
1082 =item B<-h, --help> | |
1083 | |
1084 Print this help message | |
1085 | |
1086 =item B<--headeralign> I<left | center | right,[top | middle | bottom]> | |
1087 | |
1088 Horizontal and vertical alignment for table header rows. Possible horizontal alignment | |
1089 values: I<left, center, or right>. Possible vertical alignment values: I<top, middle, or bottom>. | |
1090 | |
1091 Default values: I<center,middle> | |
1092 | |
1093 =item B<--headercolor> I<"#RRGGBB"> | |
1094 | |
1095 Color used to fill background of table header row containing column labels | |
1096 represented as a hexadecimal string. None for B<-m, --mode> option value | |
1097 of I<plain> and I<#ccccff>, light blue, for others. | |
1098 | |
1099 =item B<--highlight> I<"fieldlabel,datatype,criterion,value,[fieldlabel,datatype,criterion,value,]..."> | |
1100 | |
1101 This value is mode specific. It specifies how to highlight various column values | |
1102 for each text file. Same set of quartets values are applied to all I<TextFile(s)>. | |
1103 | |
1104 For I<highlightbycolnum> mode, input text format contains these quartets: | |
1105 I<colnum,datatype,criterion,value,...>. Possible datatype values: I<numeric or text>. | |
1106 Possible criterion values: I<le, ge, or eq>. Examples: "1,numeric,le,450>" or | |
1107 "2,numeric,ge,150,6,numeric,le,10". | |
1108 | |
1109 For I<highlightbycollabel> mode, input text format contains these quartets: | |
1110 I<collabel,datatype,criterion,value,...>. | |
1111 | |
1112 =item B<--highlightby> I<colnum | collabel> | |
1113 | |
1114 This value is mode specific. It indicates how columns to be highlighted are specified | |
1115 using B<--hightlight> option. Possible values: I<colnum or collabel>. Default value: I<colnum>. | |
1116 | |
1117 =item B<--highlightcolor> I<"#RRGGBB,#RRGGBB"> | |
1118 | |
1119 Colors used to highlight column values during I<highlight> and I<shadedhightlight> | |
1120 mode represented as hexadecimal strings. | |
1121 | |
1122 For B<--highlighstyle> option values of I<text> and I<background>, these colors represent | |
1123 text or background colors respectively. For a specific column, first color string is used for | |
1124 values which meet criterion indicated by B<--highlight> option; the second color is used | |
1125 for rest of the values. | |
1126 | |
1127 Default values for I<background> B<--highlightstyle>: I<#0fff0f,#ff0f0f>. And default values for | |
1128 I<text> B<--highlightstyle>: I<#0fbb0f,#ff0f0f>. Hexadecimal strings for both B<--highlightstyle> | |
1129 colors correspond to I<reddish> and I<greenish>. | |
1130 | |
1131 =item B<--highlightstyle> I<text | background> | |
1132 | |
1133 This value is mode specific. It indicates highlight style used to differentiate column | |
1134 values which pass a specified criterion from others. Possible values: I<text or | |
1135 background>. Default: I<background>. | |
1136 | |
1137 =item B<--indelim> I<comma | semicolon> | |
1138 | |
1139 Input delimiter for CSV I<TextFile(s)>. Possible values: I<comma or semicolon>. | |
1140 Default value: I<comma>. For TSV files, this option is ignored and I<tab> is used as a | |
1141 delimiter. | |
1142 | |
1143 =item B<-m, --mode> I<plain | shade | highlight | shadedhighlight> | |
1144 | |
1145 Specify how to generate HTML table(s): plain tables with line borders, background of | |
1146 alternate rows filled with a specified color, column values hightlighted using a specified | |
1147 criteria, or combination of previous two styles. | |
1148 | |
1149 Possible values: I<plain, shade, highlight, or shadedhighlight>. Default: I<shade>. | |
1150 | |
1151 =item B<-n, --numrows> I<number> | |
1152 | |
1153 Maximum number of rows per table. Default value: I<100>. Use 0 to put all rows into | |
1154 one table. For I<TextFile(s)> with more than maximum number of specified rows, | |
1155 multiple HTML tables, with appropriate navigation links, are created. | |
1156 | |
1157 =item B<-o, --overwrite> | |
1158 | |
1159 Overwrite existing files. | |
1160 | |
1161 =item B<-r, --root> I<rootname> | |
1162 | |
1163 New file or directory name is generated using the root: <root>.html or <root>-html. | |
1164 Default new file name: <InitialTextFileName>.html. Default directory name: | |
1165 <InitialTextFileName>-html. | |
1166 | |
1167 For I<TextFile(s)> with more than maximum number of rows specified per table, | |
1168 this directory tree is generated using <Name> where <Name> corresponds to <root> | |
1169 or <InitialTextFileName>:Top dir - <Name>-html; Sub dirs - html and mols. <Top dir> contains | |
1170 <Name>.html and <Name>.css files and <sub dir> html conatins various | |
1171 <Name>Lines<Start>To<End>.html files; <sub dir> mols is created as needed and contains | |
1172 | |
1173 This option is ignored for multiple input files. | |
1174 | |
1175 =item B<--stylesheet> I<old | new | none> | |
1176 | |
1177 Controls usage of stylesheet for newly generated HTML file(s). Possible values: I<old, | |
1178 new, or none>. Default value: I<new>. | |
1179 | |
1180 Stylesheet file contains various properties which control apperance of HTML pages: | |
1181 type, size, and color of fonts; background color; and so on. | |
1182 | |
1183 For I<old> value, an existing stylesheet file specified by B<--stylesheetname> option is | |
1184 used for each HTML file; no new stylesheet file is created. This option is quite handy | |
1185 for deploying HTML file(s) on a web server: assuming you specify a valid stylesheet | |
1186 file location relative to your WWWRoot, a reference to this stylesheet is added to each | |
1187 HTML file. For local deployment of HTML file(s), a complete path to a local stylesheet | |
1188 is fine as well. | |
1189 | |
1190 For I<create> value, a new stylesheet is created and reference to this local stylesheet | |
1191 is added to each HTML file. Use option B<--stylesheetname> to specify name. | |
1192 | |
1193 For I<none> value, stylesheet usage is completely ignored. | |
1194 | |
1195 =item B<--stylesheetname> I<filename> | |
1196 | |
1197 Stylesheet file name to be used in conjunction with B<-s --stylesheet> option. It is only | |
1198 valid for I<old> value of B<-s --stylesheet> option. Specify a valid stylesheet file location | |
1199 relative to your WWWRoot and a reference to this stylesheet is added to each HTML | |
1200 file. Example: "/stylesheets/MyStyleSheet.css". Or a complete path name to a local | |
1201 stylesheet file. | |
1202 | |
1203 For I<create> value of B<-s --stylesheet> option, a new stylesheet file is created using | |
1204 B<-r --root> option. And value of B<--stylesheetname> is simply ignored. | |
1205 | |
1206 =item B< --shadecolor> I<"#RRGGBB,#RRGGBB"> | |
1207 | |
1208 Colors used to fill background of rows during I<shade> and I<shadedhightlight> mode | |
1209 represented as a pair of hexadecimal string; the first and second color values | |
1210 are used for odd and even number rows respectively. | |
1211 | |
1212 Default value: I<"#ffffff,#e0e9eb"> - it's white and very light blue for odd and even number rows. | |
1213 | |
1214 =item B<-t, --title> I<string> | |
1215 | |
1216 Title for HTML table(s). Default value: <TextFileName>. For multiple input files, | |
1217 B<-r --root> option is used to generate appropriate titles. | |
1218 | |
1219 =item B<--titledisplay> I<yes | no> | |
1220 | |
1221 Display title for HTML table(s). Possible values: I<yes or no>. Default value: I<yes>. | |
1222 | |
1223 =item B<-w, --workingdir> I<dirname> | |
1224 | |
1225 Location of working directory. Default: current directory. | |
1226 | |
1227 =back | |
1228 | |
1229 =head1 EXAMPLES | |
1230 | |
1231 To generate HTML tables with rows background filled with white and greyish colors and | |
1232 navigation links on top and botton of each page, type: | |
1233 | |
1234 % TextFilesToHTML.pl -o Sample1.csv | |
1235 | |
1236 To generate HTML tables with rows background filled with golden and greyish colors, | |
1237 navigation links on top and botton of each page, 10 rows in each table, greyish header | |
1238 row color, and cell spacing of 1, type: | |
1239 | |
1240 % TextFilesToHTML.pl -o -n 10 --headeralign "center" --headercolor | |
1241 "#a1a1a1" --shadecolor "#ddd700,#d1d1d1" --cellspacing 1 | |
1242 Sample1.csv | |
1243 | |
1244 To generate plain HTML tables with 10 rows in each table and navigation links only at | |
1245 the bottom, type: | |
1246 | |
1247 % TextFilesToHTML.pl -o -n 10 --displaylinks bottom -m plain | |
1248 Sample1.csv | |
1249 | |
1250 To highlight values in column 3 using specified highlight criteria and fill in default background | |
1251 colors, type: | |
1252 | |
1253 % TextFilesToHTML.pl -n 10 --highlight "3,numeric,le,450" | |
1254 --highlightby colnum --highlightstyle background -m | |
1255 shadedhighlight -o Sample1.csv | |
1256 | |
1257 To highlight values in column MolWeight using specified highlight criteria, color the text using | |
1258 default colors, and add a footer message in every page, type: | |
1259 | |
1260 % TextFilesToHTML.pl -n 4 --highlight "MolWeight,numeric,le,500" | |
1261 --highlightby collabel --highlightstyle text -m shadedhighlight -o | |
1262 --footer "Copyright (C) MayaChemTools" --cellspacing 1 Sample1.csv | |
1263 | |
1264 =head1 AUTHOR | |
1265 | |
1266 Manish Sud <msud@san.rr.com> | |
1267 | |
1268 =head1 SEE ALSO | |
1269 | |
1270 JoinTextFiles.pl, MergeTextFilesWithSD.pl, ModifyTextFilesFormat.pl, SplitTextFiles.pl, SortTextFiles.pl | |
1271 | |
1272 =head1 COPYRIGHT | |
1273 | |
1274 Copyright (C) 2015 Manish Sud. All rights reserved. | |
1275 | |
1276 This file is part of MayaChemTools. | |
1277 | |
1278 MayaChemTools is free software; you can redistribute it and/or modify it under | |
1279 the terms of the GNU Lesser General Public License as published by the Free | |
1280 Software Foundation; either version 3 of the License, or (at your option) | |
1281 any later version. | |
1282 | |
1283 =cut |