Mercurial > repos > deepakjadmin > mayatool3_test2
comparison bin/SDFilesToHTML.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: SDFilesToHTML.pl,v $ | |
4 # $Date: 2015/02/28 20:46:20 $ | |
5 # $Revision: 1.50 $ | |
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 File::Spec; | |
34 use Text::ParseWords; | |
35 use Benchmark; | |
36 use Cwd; | |
37 use FileUtil; | |
38 use SDFileUtil; | |
39 use TextUtil; | |
40 use HTMLUtil; | |
41 | |
42 my($ScriptName, %Options, $StartTime, $EndTime, $TotalTime); | |
43 | |
44 # Autoflush STDOUT | |
45 $| = 1; | |
46 | |
47 # Starting message... | |
48 $ScriptName = basename($0); | |
49 print "\n$ScriptName: Starting...\n\n"; | |
50 $StartTime = new Benchmark; | |
51 | |
52 # Get the options and setup script... | |
53 SetupScriptUsage(); | |
54 if ($Options{help} || @ARGV < 1) { | |
55 die GetUsageFromPod("$FindBin::Bin/$ScriptName"); | |
56 } | |
57 | |
58 my(@SDFilesList); | |
59 @SDFilesList = ExpandFileNames(\@ARGV, "sdf sd"); | |
60 | |
61 #Make sure appropriate mode specific option values are specified... | |
62 print "Processing options...\n"; | |
63 my(%OptionsInfo); | |
64 ProcessOptions(); | |
65 | |
66 # Collect information about SD files... | |
67 print "Checking input SD file(s)...\n"; | |
68 my(%SDFilesInfo); | |
69 RetrieveSDFilesInfo(); | |
70 SetupMultipleTablesAndMiscInfo(); | |
71 | |
72 # Generate output files... | |
73 my($FileIndex); | |
74 if (@SDFilesList > 1) { | |
75 print "\nProcessing SD files...\n"; | |
76 } | |
77 for $FileIndex (0 .. $#SDFilesList) { | |
78 if ($SDFilesInfo{FileOkay}[$FileIndex]) { | |
79 print "\nProcessing file $SDFilesList[$FileIndex]...\n"; | |
80 GenerateHTMLTable($FileIndex); | |
81 } | |
82 } | |
83 print "\n$ScriptName:Done...\n\n"; | |
84 | |
85 $EndTime = new Benchmark; | |
86 $TotalTime = timediff ($EndTime, $StartTime); | |
87 print "Total time: ", timestr($TotalTime), "\n"; | |
88 | |
89 ############################################################################### | |
90 | |
91 # Generate HTML table(s)... | |
92 sub GenerateHTMLTable { | |
93 my($Index) = @_; | |
94 | |
95 if ($SDFilesInfo{MultipleHTMLTables}[$Index]) { | |
96 GenerateMultipleHTMLTables($Index); | |
97 } | |
98 else { | |
99 GenerateOneHTMLTable($Index); | |
100 } | |
101 } | |
102 | |
103 # Generate one HTML table... | |
104 sub GenerateOneHTMLTable { | |
105 my($Index) = @_; | |
106 my($SDFile, $TopHTMLDir, $HTMLFile, $StartCmpdNum, $EndCmpdNum, $CSSFile, $CSSRef, $CSSFilePath, $TableNum); | |
107 | |
108 $HTMLFile = $SDFilesInfo{HTMLRoot}[$Index] . ".html"; | |
109 $SDFile = $SDFilesList[$Index]; | |
110 | |
111 # Setup data directories... | |
112 ($TopHTMLDir) = SetupDataDirs($Index); | |
113 | |
114 # Setup stylesheet file... | |
115 $CSSRef = ""; | |
116 if ($Options{stylesheet} =~ /^new$/i) { | |
117 $CSSFile = $SDFilesInfo{HTMLRoot}[$Index] . ".css"; $CSSRef = ".\/" . "$CSSFile"; | |
118 $CSSFilePath = "$TopHTMLDir" . "\/" . $CSSFile; | |
119 GenerateStyleSheetFile($CSSFilePath); | |
120 } | |
121 elsif ($Options{stylesheet} =~ /^old$/i) { | |
122 $CSSRef = $Options{stylesheetname}; | |
123 } | |
124 | |
125 # Set HTML file location... | |
126 $HTMLFile = "$TopHTMLDir" . "\/" . $HTMLFile; | |
127 | |
128 print "Generating HTML file $HTMLFile...\n"; | |
129 open HTMLFILE, ">$HTMLFile" or die "Error: Can't open $HTMLFile: $! \n"; | |
130 open SDFILE, "$SDFile" or die "Error: Can't open $SDFile: $! \n"; | |
131 | |
132 # Write out HTML page header... | |
133 print HTMLFILE SetupHTMLPageHeader($SDFilesInfo{HTMLTitle}[$Index], $CSSRef, $OptionsInfo{TopHTMLDirStrViewerJSFileRef}); | |
134 | |
135 if ($OptionsInfo{StrViewerJSFileRef}) { | |
136 print HTMLFILE SetupStrViewerJSInitCmd($OptionsInfo{StrViewerType}, $OptionsInfo{TopHTMLDirStrViewerCodeBase}); | |
137 } | |
138 | |
139 # Setup page title... | |
140 if ($OptionsInfo{TitleDisplay}) { | |
141 print HTMLFILE SetupHTMLPageTitle($SDFilesInfo{HTMLTitle}[$Index]); | |
142 } | |
143 else { | |
144 print HTMLFILE SetupHTMLEmptyLines(1); | |
145 } | |
146 | |
147 # Start the table... | |
148 print HTMLFILE SetupHTMLAlignmentBegin("center"); | |
149 print HTMLFILE SetupHTMLTableHeader($OptionsInfo{TableBorder}, $OptionsInfo{TableCellPadding}, $OptionsInfo{TableCellSpacing}); | |
150 | |
151 # Generate table rows... | |
152 $StartCmpdNum = 1; | |
153 $EndCmpdNum = $SDFilesInfo{CmpdCount}[$Index]; | |
154 $TableNum = 1; | |
155 GenerateTableRows($Index, $TableNum, $StartCmpdNum, $EndCmpdNum, \*SDFILE, \*HTMLFILE); | |
156 | |
157 # Finish up the table... | |
158 print HTMLFILE SetupHTMLTableEnd(); | |
159 print HTMLFILE SetupHTMLAlignmentEnd("center"); | |
160 | |
161 # Write out HTML page end... | |
162 print HTMLFILE SetupHTMLPageEnd($OptionsInfo{FooterMsg}); | |
163 | |
164 close HTMLFILE; | |
165 close SDFILE; | |
166 } | |
167 | |
168 # Generate multiple tables... | |
169 sub GenerateMultipleHTMLTables { | |
170 my($Index) = @_; | |
171 my($TopHTMLDir, $SubHTMLDir, $SDFile, $HTMLFile, $TableNum, $TableCount, $TableIndex, $TableStartCmpdNum, $TableEndCmpdNum, $PrintMsg, $CSSFile, $CSSRef, $CSSFilePath, $NewStyleSheet, $StrViewerCodeBase, $StrViewerJSFileRef); | |
172 | |
173 # Open SD file... | |
174 $SDFile = $SDFilesList[$Index]; | |
175 open SDFILE, "$SDFile" or die "Error: Can't open $SDFile: $! \n"; | |
176 | |
177 # Set up data directories to hold various html files... | |
178 ($TopHTMLDir, $SubHTMLDir) = SetupDataDirs($Index); | |
179 | |
180 # Create stylesheet file... | |
181 $CSSRef = ""; | |
182 $NewStyleSheet = 0; | |
183 if ($Options{stylesheet} =~ /^new$/i) { | |
184 $NewStyleSheet = 1; | |
185 $CSSFile = $SDFilesInfo{HTMLRoot}[$Index] . ".css"; | |
186 $CSSFilePath = "$TopHTMLDir" . "\/" . $CSSFile; | |
187 GenerateStyleSheetFile($CSSFilePath); | |
188 } | |
189 elsif ($Options{stylesheet} =~ /^old$/i) { | |
190 $CSSRef = $Options{stylesheetname}; | |
191 } | |
192 | |
193 $PrintMsg = 1; | |
194 # Generate HTML files for all the tables... | |
195 $TableCount = $SDFilesInfo{TableCount}[$Index]; | |
196 for $TableNum (1 .. $TableCount) { | |
197 $TableIndex = $TableNum - 1; | |
198 $HTMLFile = ${$SDFilesInfo{TableHTMLFiles}[$Index]}[$TableIndex]; | |
199 $TableStartCmpdNum = ${$SDFilesInfo{TableStartCmpdNum}[$Index]}[$TableIndex]; | |
200 $TableEndCmpdNum = ${$SDFilesInfo{TableEndCmpdNum}[$Index]}[$TableIndex]; | |
201 | |
202 # Setup file name... | |
203 if ($TableNum == 1) { | |
204 $HTMLFile = "$TopHTMLDir" . "\/" . $HTMLFile; | |
205 print "Generating HTML file $HTMLFile...\n"; | |
206 } | |
207 else { | |
208 $HTMLFile = "$SubHTMLDir" . "\/" . $HTMLFile; | |
209 if ($PrintMsg) { | |
210 $PrintMsg = 0; | |
211 if ($TableCount == 2) { | |
212 print "Generating HTML file $HTMLFile...\n"; | |
213 } | |
214 else { | |
215 print "Generating ", ($TableCount - 1), " other HTML files: $SubHTMLDir\/$SDFilesInfo{HTMLRoot}[$Index]\*.html...\n"; | |
216 } | |
217 } | |
218 } | |
219 # Setup stylesheet reference... | |
220 if ($NewStyleSheet) { | |
221 $CSSRef = ($TableNum == 1) ? ".\/" : "..\/"; | |
222 $CSSRef .= $CSSFile; | |
223 } | |
224 | |
225 open HTMLFILE, ">$HTMLFile" or die "Error: Can't open $HTMLFile: $! \n"; | |
226 # Write out HTML page header... | |
227 $StrViewerJSFileRef = ($TableNum == 1) ? $OptionsInfo{TopHTMLDirStrViewerJSFileRef} : $OptionsInfo{SubHTMLDirStrViewerJSFileRef}; | |
228 print HTMLFILE SetupHTMLPageHeader($SDFilesInfo{HTMLTitle}[$Index], $CSSRef, $StrViewerJSFileRef); | |
229 | |
230 if ($OptionsInfo{StrViewerJSFileRef}) { | |
231 $StrViewerCodeBase = ($TableNum == 1) ? $OptionsInfo{TopHTMLDirStrViewerCodeBase} : $OptionsInfo{SubHTMLDirStrViewerCodeBase}; | |
232 print HTMLFILE SetupStrViewerJSInitCmd($OptionsInfo{StrViewerType}, $StrViewerCodeBase); | |
233 } | |
234 | |
235 # Set up the navigation links for this table... | |
236 if ($OptionsInfo{NavLinksAtTop}) { | |
237 WriteNavigationLinks($Index, $TableNum, \*HTMLFILE); | |
238 } | |
239 # Setup page title... | |
240 if ($OptionsInfo{TitleDisplay}) { | |
241 print HTMLFILE SetupHTMLPageTitle($SDFilesInfo{HTMLTitle}[$Index]); | |
242 } | |
243 else { | |
244 print HTMLFILE SetupHTMLEmptyLines(1); | |
245 } | |
246 | |
247 # Start the table... | |
248 print HTMLFILE SetupHTMLAlignmentBegin("center"); | |
249 print HTMLFILE SetupHTMLTableHeader($OptionsInfo{TableBorder}, $OptionsInfo{TableCellPadding}, $OptionsInfo{TableCellSpacing}); | |
250 | |
251 # Generate table content... | |
252 GenerateTableRows($Index, $TableNum, $TableStartCmpdNum, $TableEndCmpdNum, \*SDFILE, \*HTMLFILE); | |
253 | |
254 # Finish up the table... | |
255 print HTMLFILE SetupHTMLTableEnd(); | |
256 print HTMLFILE SetupHTMLAlignmentEnd("center"); | |
257 | |
258 # Set up the navigation links for this table... | |
259 if ($OptionsInfo{NavLinksAtBottom}) { | |
260 print HTMLFILE SetupHTMLEmptyLines(1); | |
261 WriteNavigationLinks($Index, $TableNum, \*HTMLFILE); | |
262 } | |
263 | |
264 # Write out HTML page end... | |
265 print HTMLFILE SetupHTMLPageEnd($OptionsInfo{FooterMsg}); | |
266 close HTMLFILE; | |
267 } | |
268 close SDFILE; | |
269 | |
270 } | |
271 | |
272 # Generate table content... | |
273 sub GenerateTableRows { | |
274 my($Index, $TableNum, $StartCmpdNum, $EndCmpdNum, $SDFileRef, $HTMLFileRef) = @_; | |
275 | |
276 if ($OptionsInfo{StructuresOnlyMode}) { | |
277 WriteRowStructures($Index, $TableNum, $StartCmpdNum, $EndCmpdNum, $SDFileRef, $HTMLFileRef); | |
278 } | |
279 else { | |
280 WriteColLabels($Index, $SDFileRef, $HTMLFileRef); | |
281 WriteRowValues($Index, $TableNum, $StartCmpdNum, $EndCmpdNum, $SDFileRef, $HTMLFileRef); | |
282 } | |
283 } | |
284 | |
285 # Create stylesheet file... | |
286 sub GenerateStyleSheetFile { | |
287 my($CSSFile) = @_; | |
288 print "Generating stylesheet file $CSSFile...\n"; | |
289 open CSSFILE, ">$CSSFile" or die "Error: Can't open $CSSFile: $! \n"; | |
290 print CSSFILE SetupHTMLStyleSheetTags(); | |
291 close CSSFILE; | |
292 } | |
293 | |
294 # Write out table header using column labels... | |
295 sub WriteColLabels { | |
296 my($Index, $SDFileRef, $HTMLFileRef) = @_; | |
297 | |
298 my(@ColLabels, $Label); | |
299 print $HTMLFileRef $SDFilesInfo{TableRowHeaderTags}; | |
300 | |
301 # Write out structure label... | |
302 $Label = "Structure"; | |
303 print $HTMLFileRef SetupHTMLTableRowHeaderValue($Label); | |
304 | |
305 # Write out field values.. | |
306 @ColLabels = @{$SDFilesInfo{SpecifiedDataFieldLabels}[$Index]}; | |
307 for $Label (@ColLabels) { | |
308 print $HTMLFileRef SetupHTMLTableRowHeaderValue($Label); | |
309 } | |
310 print $HTMLFileRef $SDFilesInfo{RowEndTags}; | |
311 } | |
312 | |
313 # Write out the rows value... | |
314 sub WriteRowValues { | |
315 my($Index, $TableNum, $StartCmpdNum, $EndCmpdNum, $SDFileRef, $HTMLFileRef) = @_; | |
316 my($BackgroundColor, $FontColor, $RowNum, $CmpdNum, $CmpdString, @CmpdLines, $Label, %DataFieldValues, $Value); | |
317 | |
318 $RowNum = 0; | |
319 for $CmpdNum ($StartCmpdNum .. $EndCmpdNum) { | |
320 $RowNum++; | |
321 $CmpdString = ReadCmpdString($SDFileRef); | |
322 if ($OptionsInfo{ShadeRowsStatus}) { | |
323 print $HTMLFileRef ($RowNum % 2) ? $SDFilesInfo{BgFilledOddRowHeaderTags} : $SDFilesInfo{BgFilledEvenRowHeaderTags}; | |
324 } | |
325 else { | |
326 print $HTMLFileRef $SDFilesInfo{RowHeaderTags}; | |
327 } | |
328 @CmpdLines = split "\n", $CmpdString; | |
329 %DataFieldValues = GetCmpdDataHeaderLabelsAndValues(\@CmpdLines); | |
330 | |
331 # Setup structure column... | |
332 SetupStructureColumn($Index, $TableNum, $RowNum, $CmpdString, $CmpdNum, $HTMLFileRef); | |
333 # Write out field values.. | |
334 for $Label (@{$SDFilesInfo{SpecifiedDataFieldLabels}[$Index]}) { | |
335 $Value = (IsNotEmpty($DataFieldValues{$Label})) ? $DataFieldValues{$Label} : ""; | |
336 $BackgroundColor = ""; $FontColor = ""; | |
337 if ($OptionsInfo{HighlightStatus}) { | |
338 if (exists($OptionsInfo{SpecifiedHighlightDataFieldLabelsMap}{$Label})) { | |
339 ($BackgroundColor, $FontColor) = GetValueHighlightColors($Label, $Value); | |
340 } | |
341 } | |
342 print $HTMLFileRef SetupHTMLTableRowDataValue($Value, $BackgroundColor, $FontColor); | |
343 } | |
344 print $HTMLFileRef $SDFilesInfo{RowEndTags}; | |
345 } | |
346 } | |
347 | |
348 # Write only structures... | |
349 sub WriteRowStructures { | |
350 my($Index, $TableNum, $StartCmpdNum, $EndCmpdNum, $SDFileRef, $HTMLFileRef) = @_; | |
351 my($CmpdNum, $CmpdString, $StartRowFlag, $ColNum, $RowNum, $RowBgColor, $RowStartTags, $ColumnHeaderTags, $ColumnEndTags, $CmpdDataFieldValue, $CmpdHTMLFileRef, $Value); | |
352 | |
353 $StartRowFlag = 1; $ColNum = 0; $RowNum = 0; | |
354 $ColumnHeaderTags = SetupHTMLTableColumnHeader(); | |
355 $ColumnEndTags = SetupHTMLTableColumnEnd(); | |
356 | |
357 if ($OptionsInfo{StructuresOnlyMode} && !$OptionsInfo{TableBorder} && ($OptionsInfo{OddRowsShadeColor} =~ /^(#ffffff|white)$/i)) { | |
358 print $HTMLFileRef SetupHTMLTableRowHeader($OptionsInfo{RowHAlignment}, $OptionsInfo{TableHeaderRowColor}, $OptionsInfo{RowVAlignment}); | |
359 $Value = SetupHTMLTableRowDataValue(""); | |
360 print $HTMLFileRef InsertHTMLTags($Value, "colspan", "$OptionsInfo{StrTableCols}"); | |
361 print $HTMLFileRef $SDFilesInfo{RowEndTags}; | |
362 } | |
363 | |
364 for $CmpdNum ($StartCmpdNum .. $EndCmpdNum) { | |
365 $CmpdString = ReadCmpdString($SDFileRef); | |
366 if ($StartRowFlag) { | |
367 $StartRowFlag = 0; | |
368 $RowNum++; | |
369 if ($OptionsInfo{ShadeRowsStatus}) { | |
370 print $HTMLFileRef ($RowNum % 2) ? $SDFilesInfo{BgFilledOddRowHeaderTags} : $SDFilesInfo{BgFilledEvenRowHeaderTags}; | |
371 } | |
372 else { | |
373 print $HTMLFileRef $SDFilesInfo{RowHeaderTags}; | |
374 } | |
375 } | |
376 $ColNum++; | |
377 | |
378 $CmpdDataFieldValue = ""; | |
379 if ($OptionsInfo{CmpdDataField}) { | |
380 my($CmpdDataField, @CmpdLines, %DataFieldValues); | |
381 $CmpdDataField = $OptionsInfo{CmpdDataField}; | |
382 @CmpdLines = split "\n", $CmpdString; | |
383 %DataFieldValues = GetCmpdDataHeaderLabelsAndValues(\@CmpdLines); | |
384 if (exists($DataFieldValues{$CmpdDataField}) && length($DataFieldValues{$CmpdDataField})) { | |
385 $CmpdDataFieldValue = $DataFieldValues{$CmpdDataField}; | |
386 if ($OptionsInfo{CmpdDataFieldLabel} =~ /^yes$/i) { | |
387 $CmpdDataFieldValue = "${CmpdDataField}: ${CmpdDataFieldValue}"; | |
388 } | |
389 # Make sure it's not to looong... | |
390 if (length($CmpdDataFieldValue) > 30) { | |
391 $CmpdDataFieldValue = substr($CmpdDataFieldValue, 0, 30) . "..."; | |
392 } | |
393 } | |
394 } | |
395 if ($CmpdDataFieldValue) { | |
396 $RowBgColor = ""; | |
397 if ($OptionsInfo{ShadeRowsStatus}) { | |
398 $RowBgColor = ($RowNum % 2) ? $OptionsInfo{OddRowsShadeColor} : $OptionsInfo{EvenRowsShadeColor}; | |
399 } | |
400 $RowStartTags = SetupHTMLTableRowHeader($OptionsInfo{CmpdDataFieldAlignment}, $RowBgColor, "middle"); | |
401 # Start a new table in current column... | |
402 print $HTMLFileRef $ColumnHeaderTags; | |
403 print $HTMLFileRef SetupHTMLAlignmentBegin("center"); | |
404 print $HTMLFileRef SetupHTMLTableHeader(0, 0, 0); | |
405 | |
406 if ($OptionsInfo{CmpdDataFieldPosition} =~ /^top$/i ) { | |
407 # Add an empty row... | |
408 print $HTMLFileRef $RowStartTags; | |
409 print $HTMLFileRef SetupHTMLTableRowDataValue(""); | |
410 print $HTMLFileRef $SDFilesInfo{RowEndTags}; | |
411 | |
412 # Display the label value... | |
413 print $HTMLFileRef $RowStartTags; | |
414 $CmpdHTMLFileRef = SetupCompoundSummaryFileAndLink($Index, $TableNum, $CmpdString, $CmpdNum); | |
415 $Value = SetupHTMLHRef("$CmpdDataFieldValue", $CmpdHTMLFileRef, "Compound Summary"); | |
416 print $HTMLFileRef SetupHTMLTableRowDataValue($Value); | |
417 print $HTMLFileRef $SDFilesInfo{RowEndTags}; | |
418 } | |
419 # Display the structure... | |
420 print $HTMLFileRef SetupHTMLTableRowHeader("center", $RowBgColor, "middle"); | |
421 SetupStructureDisplay($Index, $TableNum, $RowNum, $CmpdString, $CmpdNum, $HTMLFileRef); | |
422 print $HTMLFileRef $SDFilesInfo{RowEndTags}; | |
423 | |
424 if ($OptionsInfo{CmpdDataFieldPosition} =~ /^bottom$/i ) { | |
425 # Display the label value... | |
426 print $HTMLFileRef $RowStartTags; | |
427 $CmpdHTMLFileRef = SetupCompoundSummaryFileAndLink($Index, $TableNum, $CmpdString, $CmpdNum); | |
428 $Value = SetupHTMLHRef("$CmpdDataFieldValue", $CmpdHTMLFileRef, "Compound Summary"); | |
429 print $HTMLFileRef SetupHTMLTableRowDataValue($Value); | |
430 print $HTMLFileRef $SDFilesInfo{RowEndTags}; | |
431 | |
432 # Add an empty row... | |
433 print $HTMLFileRef $RowStartTags; | |
434 print $HTMLFileRef SetupHTMLTableRowDataValue(""); | |
435 print $HTMLFileRef $SDFilesInfo{RowEndTags}; | |
436 } | |
437 | |
438 print $HTMLFileRef SetupHTMLTableEnd(); | |
439 print $HTMLFileRef SetupHTMLAlignmentEnd("center"); | |
440 print $HTMLFileRef $ColumnEndTags; | |
441 } | |
442 else { | |
443 SetupStructureDisplay($Index, $TableNum, $RowNum, $CmpdString, $CmpdNum, $HTMLFileRef); | |
444 } | |
445 | |
446 if ($ColNum == $OptionsInfo{StrTableCols}) { | |
447 # Finish up the current row and get ready for starting a new row... | |
448 print $HTMLFileRef $SDFilesInfo{RowEndTags}; | |
449 $ColNum = 0; | |
450 $StartRowFlag = 1; | |
451 } | |
452 } | |
453 if (!$StartRowFlag) { | |
454 # Finish up an existing row... | |
455 my($ColIndex, $Value); | |
456 $Value = ""; | |
457 for $ColIndex ($ColNum .. ($OptionsInfo{StrTableCols} - 1) ) { | |
458 print $HTMLFileRef SetupHTMLTableRowDataValue($Value); | |
459 } | |
460 print $HTMLFileRef $SDFilesInfo{RowEndTags}; | |
461 } | |
462 } | |
463 | |
464 # Setup structure column... | |
465 sub SetupStructureColumn { | |
466 my($Index, $TableNum, $RowNum, $CmpdString, $CmpdNum, $HTMLFileRef) = @_; | |
467 | |
468 if ($OptionsInfo{DisplayStructure}) { | |
469 SetupStructureDisplay($Index, $TableNum, $RowNum, $CmpdString, $CmpdNum, $HTMLFileRef); | |
470 } | |
471 else { | |
472 SetupStructureLink($Index, $TableNum, $RowNum, $CmpdString, $CmpdNum, $HTMLFileRef); | |
473 } | |
474 } | |
475 | |
476 # Setup structure display for compound summary page... | |
477 sub SetupStructureDisplayForCmpdSummaryPage { | |
478 my($Index, $CmpdString, $CmpdNum, $HTMLFileRef) = @_; | |
479 my($TableNum, $RowNum); | |
480 | |
481 # Use table num 0 to force usage of "../mol" prefix for all MOL file references. Row num | |
482 # doesn't matter... | |
483 $TableNum = 0; | |
484 $RowNum = 1; | |
485 | |
486 $OptionsInfo{SettingUpCmpdSummaryPage} = 1; | |
487 | |
488 # Setup size and bgcolor parameters for linking structures... | |
489 $OptionsInfo{StrViewerParams}{width} = $OptionsInfo{StrLinkWidth}; | |
490 $OptionsInfo{StrViewerParams}{height} = $OptionsInfo{StrLinkHeight}; | |
491 $OptionsInfo{StrViewerParams}{bgcolor} = $OptionsInfo{StrLinkBgColorSpecified}; | |
492 | |
493 SetupStructureDisplay($Index, $TableNum, $RowNum, $CmpdString, $CmpdNum, $HTMLFileRef); | |
494 | |
495 # Reset size and bgcolor parameters back to displaying structures in tables... | |
496 $OptionsInfo{StrViewerParams}{width} = $OptionsInfo{StrWidth}; | |
497 $OptionsInfo{StrViewerParams}{height} = $OptionsInfo{StrHeight}; | |
498 $OptionsInfo{StrViewerParams}{bgcolor} = $OptionsInfo{StrBgColorSpecified} ? $OptionsInfo{StrBgColorSpecified} : ""; | |
499 | |
500 $OptionsInfo{SettingUpCmpdSummaryPage} = 0; | |
501 } | |
502 | |
503 | |
504 # Setup structure column display... | |
505 sub SetupStructureDisplay { | |
506 my($Index, $TableNum, $RowNum, $CmpdString, $CmpdNum, $HTMLFileRef) = @_; | |
507 my($Nothing); | |
508 | |
509 STRVIEWERTYPE: { | |
510 if ($OptionsInfo{StrViewerType} =~ /^JME$/i) { SetupJMEDisplay($Index, $TableNum, $RowNum, $CmpdString, $CmpdNum, $HTMLFileRef); last STRVIEWERTYPE; } | |
511 if ($OptionsInfo{StrViewerType} =~ /^Jmol$/i) { SetupJmolDisplay($Index, $TableNum, $RowNum, $CmpdString, $CmpdNum, $HTMLFileRef); last STRVIEWERTYPE; } | |
512 if ($OptionsInfo{StrViewerType} =~ /^Chime$/i) { SetupChimeDisplay($Index, $TableNum, $RowNum, $CmpdString, $CmpdNum, $HTMLFileRef); last STRVIEWERTYPE; } | |
513 if ($OptionsInfo{StrViewerType} =~ /^(Chem3DActiveX|ChemDrawActiveX|ChemDrawPlugIn)$/i) { SetupCambridgeSoftDisplay($OptionsInfo{StrViewerType}, $Index, $TableNum, $RowNum, $CmpdString, $CmpdNum, $HTMLFileRef); last STRVIEWERTYPE; } | |
514 if ($OptionsInfo{StrViewerType} =~ /^MarvinView$/i) { SetupMarvinDisplay($Index, $TableNum, $RowNum, $CmpdString, $CmpdNum, $HTMLFileRef); last STRVIEWERTYPE; } | |
515 if ($OptionsInfo{StrViewerType} =~ /^ViewerActiveX$/i) { SetupViewerAccelrysActiveXDisplay($Index, $TableNum, $RowNum, $CmpdString, $CmpdNum, $HTMLFileRef); last STRVIEWERTYPE; } | |
516 $Nothing = 1; | |
517 } | |
518 } | |
519 | |
520 # Setup JME display... | |
521 sub SetupJMEDisplay { | |
522 my($Index, $TableNum, $RowNum, $CmpdString, $CmpdNum, $HTMLFileRef) = @_; | |
523 my($MolString, $AppletBGColor, $Value, $ValueTag, $AppletName, $StrViewerCodeBase); | |
524 | |
525 $Value = ""; | |
526 ($MolString) = split "$SDFilesInfo{MolEndTag}", $CmpdString; | |
527 if (IsNotEmpty($MolString)) { | |
528 $AppletBGColor = SetupStructureBGColor($RowNum); | |
529 $MolString .= "$SDFilesInfo{MolEndTag}"; | |
530 | |
531 # JME viewer doesn't appear to support "bgcolor" param. So, always use white background for | |
532 # structure cell... | |
533 $AppletName = "JME" . $CmpdNum; | |
534 $OptionsInfo{StrViewerParams}{name} = $AppletName; | |
535 if (!$OptionsInfo{SettingUpCmpdSummaryPage}) { | |
536 if (!$OptionsInfo{StrBgColorSpecified}) { | |
537 $OptionsInfo{StrViewerParams}{bgcolor} = $AppletBGColor; | |
538 } | |
539 } | |
540 $StrViewerCodeBase = ($TableNum == 1) ? $OptionsInfo{TopHTMLDirStrViewerCodeBase} : $OptionsInfo{SubHTMLDirStrViewerCodeBase}; | |
541 $Value = SetupStrViewerJMEApplet($MolString, $StrViewerCodeBase, \%{$OptionsInfo{StrViewerParams}}); | |
542 $ValueTag = SetupHTMLTableRowDataValue($Value, $SDFilesInfo{White}); | |
543 } | |
544 else { | |
545 $ValueTag = SetupHTMLTableRowDataValue($Value); | |
546 } | |
547 if ($OptionsInfo{SettingUpCmpdSummaryPage}) { | |
548 $ValueTag = InsertHTMLTags($ValueTag, ("class", "box")); | |
549 } | |
550 print $HTMLFileRef $ValueTag; | |
551 } | |
552 | |
553 # Setup Marvin display... | |
554 sub SetupMarvinDisplay { | |
555 my($Index, $TableNum, $RowNum, $CmpdString, $CmpdNum, $HTMLFileRef) = @_; | |
556 my($MolString, $AppletBGColor, $Value, $ValueTag, $AppletName, $StrViewerCodeBase); | |
557 | |
558 $Value = ""; | |
559 ($MolString) = split "$SDFilesInfo{MolEndTag}", $CmpdString; | |
560 if (IsNotEmpty($MolString)) { | |
561 $AppletBGColor = SetupStructureBGColor($RowNum); | |
562 $MolString .= "$SDFilesInfo{MolEndTag}"; | |
563 | |
564 $AppletName = "MView" . $CmpdNum; | |
565 $OptionsInfo{StrViewerParams}{name} = $AppletName; | |
566 if (!$OptionsInfo{SettingUpCmpdSummaryPage}) { | |
567 if (!$OptionsInfo{StrBgColorSpecified}) { | |
568 $OptionsInfo{StrViewerParams}{bgcolor} = $AppletBGColor; | |
569 } | |
570 } | |
571 $StrViewerCodeBase = ($TableNum == 1) ? $OptionsInfo{TopHTMLDirStrViewerCodeBase} : $OptionsInfo{SubHTMLDirStrViewerCodeBase}; | |
572 $Value = SetupStrViewerMarvinViewApplet($MolString, $StrViewerCodeBase, \%{$OptionsInfo{StrViewerParams}}); | |
573 $ValueTag = SetupHTMLTableRowDataValue($Value); | |
574 } | |
575 else { | |
576 $ValueTag = SetupHTMLTableRowDataValue($Value); | |
577 } | |
578 if ($OptionsInfo{SettingUpCmpdSummaryPage}) { | |
579 $ValueTag = InsertHTMLTags($ValueTag, ("class", "box")); | |
580 } | |
581 print $HTMLFileRef $ValueTag; | |
582 } | |
583 | |
584 # Setup Jmol display... | |
585 sub SetupJmolDisplay { | |
586 my($Index, $TableNum, $RowNum, $CmpdString, $CmpdNum, $HTMLFileRef) = @_; | |
587 my($MolString, $AppletBGColor, $Value, $ValueTag, $AppletName, $StrViewerCodeBase); | |
588 | |
589 $Value = ""; $ValueTag = ""; | |
590 ($MolString) = split "$SDFilesInfo{MolEndTag}", $CmpdString; | |
591 if (IsNotEmpty($MolString)) { | |
592 $AppletBGColor = SetupStructureBGColor($RowNum); | |
593 $MolString .= "$SDFilesInfo{MolEndTag}"; | |
594 | |
595 # Make sure MolName line is not empty; otherwise, JMol doesn't display structure... | |
596 my(@MolLines) = split "\n", $MolString; | |
597 if (IsEmpty($MolLines[0])) { | |
598 $MolLines[0] = "Cmpd${CmpdNum}"; | |
599 $MolString = join "\n", @MolLines; | |
600 } | |
601 | |
602 # Setup the applet... | |
603 $AppletName = "Jmol" . $CmpdNum; | |
604 $OptionsInfo{StrViewerParams}{name} = $AppletName; | |
605 if (!$OptionsInfo{SettingUpCmpdSummaryPage}) { | |
606 if (!$OptionsInfo{StrBgColorSpecified}) { | |
607 $OptionsInfo{StrViewerParams}{bgcolor} = $AppletBGColor; | |
608 } | |
609 } | |
610 $StrViewerCodeBase = ($TableNum == 1) ? $OptionsInfo{TopHTMLDirStrViewerCodeBase} : $OptionsInfo{SubHTMLDirStrViewerCodeBase}; | |
611 $Value = SetupStrViewerJmolApplet($MolString, $StrViewerCodeBase, \%{$OptionsInfo{StrViewerParams}}); | |
612 $ValueTag = SetupHTMLTableRowDataValue($Value); | |
613 } | |
614 else { | |
615 $ValueTag = SetupHTMLTableRowDataValue($Value); | |
616 } | |
617 if ($OptionsInfo{SettingUpCmpdSummaryPage}) { | |
618 $ValueTag = InsertHTMLTags($ValueTag, ("class", "box")); | |
619 } | |
620 print $HTMLFileRef $ValueTag; | |
621 } | |
622 | |
623 # Setup Chime display... | |
624 sub SetupChimeDisplay { | |
625 my($Index, $TableNum, $RowNum, $CmpdString, $CmpdNum, $HTMLFileRef) = @_; | |
626 my($MolString, $BGColor, $Value, $ValueTag, $MolFileRef); | |
627 | |
628 $Value = ""; | |
629 ($MolString) = split "$SDFilesInfo{MolEndTag}", $CmpdString; | |
630 if (IsNotEmpty($MolString)) { | |
631 $BGColor = SetupStructureBGColor($RowNum); | |
632 $MolString .= "$SDFilesInfo{MolEndTag}"; | |
633 # Write out MOL file... | |
634 $MolFileRef = SetupMOLFile($Index, $TableNum, $MolString, $CmpdNum); | |
635 # Setup the applet... | |
636 if (!$OptionsInfo{SettingUpCmpdSummaryPage}) { | |
637 if (!$OptionsInfo{StrBgColorSpecified}) { | |
638 $OptionsInfo{StrViewerParams}{bgcolor} = $BGColor; | |
639 } | |
640 } | |
641 $Value = SetupStrViewerChimePlugIn($MolFileRef, \%{$OptionsInfo{StrViewerParams}}); | |
642 $ValueTag = SetupHTMLTableRowDataValue($Value); | |
643 } | |
644 else { | |
645 $ValueTag = SetupHTMLTableRowDataValue($Value); | |
646 } | |
647 if ($OptionsInfo{SettingUpCmpdSummaryPage}) { | |
648 $ValueTag = InsertHTMLTags($ValueTag, ("class", "box")); | |
649 } | |
650 print $HTMLFileRef $ValueTag; | |
651 } | |
652 | |
653 # Setup displays for various viewers available from CambridgeSoft... | |
654 sub SetupCambridgeSoftDisplay { | |
655 my($ViewerType, $Index, $TableNum, $RowNum, $CmpdString, $CmpdNum, $HTMLFileRef) = @_; | |
656 my($MolString, $BGColor, $Value, $ValueTag, $MolFileRef, $Name); | |
657 | |
658 $Value = ""; | |
659 ($MolString) = split "$SDFilesInfo{MolEndTag}", $CmpdString; | |
660 if (IsNotEmpty($MolString)) { | |
661 $BGColor = SetupStructureBGColor($RowNum); | |
662 $MolString .= "$SDFilesInfo{MolEndTag}"; | |
663 # Write out MOL file... | |
664 $MolFileRef = SetupMOLFile($Index, $TableNum, $MolString, $CmpdNum); | |
665 # Setup the viewer... | |
666 $Name = "CS" . $CmpdNum; | |
667 if ($ViewerType =~ /^Chem3DActiveX$/) { | |
668 # Use white background for Chem3D and cell; otherwise, it doesn't look good: | |
669 # cell size is larger than Chem3D window size and different colors don't work | |
670 $BGColor = $SDFilesInfo{White}; | |
671 $OptionsInfo{StrViewerParams}{name} = $Name; | |
672 if (!$OptionsInfo{SettingUpCmpdSummaryPage}) { | |
673 if (!$OptionsInfo{StrBgColorSpecified}) { | |
674 $OptionsInfo{StrViewerParams}{bgcolor} = $BGColor; | |
675 } | |
676 } | |
677 $Value = SetupStrViewerChem3DActiveX($MolFileRef, \%{$OptionsInfo{StrViewerParams}}); | |
678 $ValueTag = SetupHTMLTableRowDataValue($Value, $BGColor); | |
679 } | |
680 elsif ($ViewerType =~ /^ChemDrawActiveX$/i) { | |
681 # BGColor is not supported. So, make it all white... | |
682 $BGColor = $SDFilesInfo{White}; | |
683 $OptionsInfo{StrViewerParams}{name} = $Name; | |
684 if (!$OptionsInfo{SettingUpCmpdSummaryPage}) { | |
685 if (!$OptionsInfo{StrBgColorSpecified}) { | |
686 $OptionsInfo{StrViewerParams}{bgcolor} = $BGColor; | |
687 } | |
688 } | |
689 $Value = SetupStrViewerChemDrawActiveX($MolFileRef, \%{$OptionsInfo{StrViewerParams}}); | |
690 $ValueTag = SetupHTMLTableRowDataValue($Value, $BGColor); | |
691 } | |
692 elsif ($ViewerType =~ /^ChemDrawPlugIn$/i) { | |
693 # BGColor is not supported. So, make it all white... | |
694 $BGColor = $SDFilesInfo{White}; | |
695 if (!$OptionsInfo{SettingUpCmpdSummaryPage}) { | |
696 if (!$OptionsInfo{StrBgColorSpecified}) { | |
697 $OptionsInfo{StrViewerParams}{bgcolor} = $BGColor; | |
698 } | |
699 } | |
700 $Value = SetupStrViewerChemDrawPlugIn($MolFileRef, \%{$OptionsInfo{StrViewerParams}}); | |
701 $ValueTag = SetupHTMLTableRowDataValue($Value, $BGColor); | |
702 } | |
703 } | |
704 else { | |
705 $ValueTag = SetupHTMLTableRowDataValue($Value); | |
706 } | |
707 if ($OptionsInfo{SettingUpCmpdSummaryPage}) { | |
708 $ValueTag = InsertHTMLTags($ValueTag, ("class", "box")); | |
709 } | |
710 print $HTMLFileRef $ValueTag; | |
711 } | |
712 | |
713 # Setup Accelrys Viewer ActiveX display... | |
714 sub SetupViewerAccelrysActiveXDisplay { | |
715 my($Index, $TableNum, $RowNum, $CmpdString, $CmpdNum, $HTMLFileRef) = @_; | |
716 my($MolString, $BGColor, $Value, $ValueTag, $Name, $MolFileRef); | |
717 | |
718 $Value = ""; | |
719 ($MolString) = split "$SDFilesInfo{MolEndTag}", $CmpdString; | |
720 if (IsNotEmpty($MolString)) { | |
721 $BGColor = SetupStructureBGColor($RowNum); | |
722 $MolString .= "$SDFilesInfo{MolEndTag}"; | |
723 # Write out MOL file. Accelrys ActiveX viewer doesn't load mol files with relative path names. | |
724 # So, set up a complete path name for now; however, it may lead to issues during web | |
725 # deployment. | |
726 my($CompletePath) = 1; | |
727 $MolFileRef = SetupMOLFile($Index, $TableNum, $MolString, $CmpdNum, $CompletePath); | |
728 # Setup the viewer... | |
729 $Name = "ViewerActiveX" . $CmpdNum; | |
730 if (!$OptionsInfo{SettingUpCmpdSummaryPage}) { | |
731 if (!$OptionsInfo{StrBgColorSpecified}) { | |
732 $OptionsInfo{StrViewerParams}{bgcolor} = $BGColor; | |
733 } | |
734 } | |
735 $OptionsInfo{StrViewerParams}{name} = $Name; | |
736 $Value = SetupStrViewerAccelrysActiveX($MolFileRef, \%{$OptionsInfo{StrViewerParams}}); | |
737 $ValueTag = SetupHTMLTableRowDataValue($Value); | |
738 } | |
739 else { | |
740 $ValueTag = SetupHTMLTableRowDataValue($Value); | |
741 } | |
742 if ($OptionsInfo{SettingUpCmpdSummaryPage}) { | |
743 $ValueTag = InsertHTMLTags($ValueTag, ("class", "box")); | |
744 } | |
745 print $HTMLFileRef $ValueTag; | |
746 } | |
747 | |
748 | |
749 # Setup structure background color... | |
750 sub SetupStructureBGColor { | |
751 my($RowNum) = @_; | |
752 my($BGColor); | |
753 | |
754 $BGColor = ""; | |
755 if ($OptionsInfo{ShadeRowsStatus}) { | |
756 $BGColor = ($RowNum % 2) ? $OptionsInfo{OddRowsShadeColor} : $OptionsInfo{EvenRowsShadeColor}; | |
757 } | |
758 else { | |
759 $BGColor = $SDFilesInfo{White}; | |
760 } | |
761 return $BGColor; | |
762 } | |
763 | |
764 # Setup MDL MOL file... | |
765 sub SetupMOLFile { | |
766 my($Index, $TableNum, $MolString, $CmpdNum, $CompletePath); | |
767 my($SubMolDir, $MolFileName, $MolFile, $MolFileRef); | |
768 | |
769 $CompletePath = ""; | |
770 if (@_ == 5) { | |
771 ($Index, $TableNum, $MolString, $CmpdNum, $CompletePath) = @_; | |
772 } | |
773 else { | |
774 ($Index, $TableNum, $MolString, $CmpdNum) = @_; | |
775 } | |
776 | |
777 $SubMolDir = $SDFilesInfo{SubMolDir}[$Index]; | |
778 $MolFileName = $SDFilesInfo{HTMLRoot}[$Index] . "Cmpd" . $CmpdNum . ".mol"; | |
779 $MolFile = $SubMolDir . "\/" . $MolFileName; | |
780 | |
781 open MOLFILE, ">$MolFile" or die "Error: Can't open $MolFile: $! \n"; | |
782 print MOLFILE "$MolString\n"; | |
783 close MOLFILE; | |
784 | |
785 if ($CompletePath) { | |
786 my($CWD, $NewCWD); | |
787 $CWD = cwd(); | |
788 $NewCWD = ConvertCygwinPath($CWD); | |
789 $MolFileRef = $NewCWD . "\/" . $SDFilesInfo{TopHTMLDir}[$Index] . "\/mol\/$MolFileName" ; | |
790 } | |
791 else { | |
792 $MolFileRef = ($TableNum == 1) ? ".\/mol\/$MolFileName" : "..\/mol\/$MolFileName"; | |
793 } | |
794 | |
795 return $MolFileRef; | |
796 } | |
797 | |
798 # Setup a link to structure and other available information... | |
799 sub SetupStructureLink { | |
800 my($Index, $TableNum, $RowNum, $CmpdString, $CmpdNum, $HTMLFileRef) = @_; | |
801 my($CmpdHTMLFileRef, $Value); | |
802 | |
803 $CmpdHTMLFileRef = SetupCompoundSummaryFileAndLink($Index, $TableNum, $CmpdString, $CmpdNum); | |
804 | |
805 if ($Options{strlinktype} =~ /^button$/i) { | |
806 $Value = SetupHTMLButtonRef("View", $CmpdHTMLFileRef); | |
807 } | |
808 else { | |
809 $Value = SetupHTMLHRef("View", $CmpdHTMLFileRef); | |
810 } | |
811 print $HTMLFileRef SetupHTMLTableRowDataValue($Value); | |
812 } | |
813 | |
814 # Setup HTML compound summary file and link... | |
815 sub SetupCompoundSummaryFileAndLink { | |
816 my($Index, $TableNum, $CmpdString, $CmpdNum) = @_; | |
817 my($CmpdHTMLFile, $CmpdHTMLFileName, $CmpdHTMLFileRef, $CSSRef, @CmpdLines, $Label, @DataFieldLabels, %DataFieldValues, $Value, $Tag); | |
818 | |
819 # Setup compound file names... | |
820 $CmpdHTMLFileName = $SDFilesInfo{HTMLRoot}[$Index] . "Cmpd" . $CmpdNum . ".html"; | |
821 $CmpdHTMLFile = $SDFilesInfo{SubHTMLDir}[$Index] . "\/" . $CmpdHTMLFileName; | |
822 | |
823 # Setup stylesheet reference.... | |
824 $CSSRef = ""; | |
825 if ($Options{stylesheet} =~ /^old$/i) { | |
826 $CSSRef = $Options{stylesheetname}; | |
827 } | |
828 else { | |
829 $CSSRef = "..\/" . $SDFilesInfo{HTMLRoot}[$Index] . ".css"; | |
830 } | |
831 | |
832 # Write out compound data in a new HTML file. For summary page, usage of even and odd row shade color | |
833 # is reversed: it causes structure background to be white by default... | |
834 open CMPDHTMLFILE, ">$CmpdHTMLFile" or die "Error: Can't open $CmpdHTMLFile: $! \n"; | |
835 print CMPDHTMLFILE SetupHTMLPageHeader($OptionsInfo{StrLinkTitle}, $CSSRef, $OptionsInfo{SubHTMLDirStrViewerJSFileRef}); | |
836 | |
837 if ($OptionsInfo{StrViewerJSFileRef}) { | |
838 print CMPDHTMLFILE SetupStrViewerJSInitCmd($OptionsInfo{StrViewerType}, $OptionsInfo{SubHTMLDirStrViewerCodeBase}); | |
839 } | |
840 | |
841 if ($OptionsInfo{StrLinkTitleDisplay}) { | |
842 print CMPDHTMLFILE SetupHTMLPageTitle($OptionsInfo{StrLinkTitle}, "center"); | |
843 } | |
844 else { | |
845 print CMPDHTMLFILE SetupHTMLEmptyLines(1); | |
846 } | |
847 print CMPDHTMLFILE SetupHTMLAlignmentBegin("center"); | |
848 | |
849 # Setup structure display ... | |
850 print CMPDHTMLFILE SetupHTMLTableHeader(0, 5, 2); | |
851 | |
852 print CMPDHTMLFILE SetupHTMLTableRowHeader("center", "#ffffff", "middle"); | |
853 | |
854 SetupStructureDisplayForCmpdSummaryPage($Index, $CmpdString, $CmpdNum, \*CMPDHTMLFILE); | |
855 print CMPDHTMLFILE $SDFilesInfo{RowEndTags}; | |
856 | |
857 if ($Options{strlinkmode} =~ /^plain$/i) { | |
858 print CMPDHTMLFILE SetupHTMLTableRowHeader("center", $OptionsInfo{StrLinkShadeColor}); | |
859 $Tag = SetupHTMLTableRowDataValue(""); | |
860 print CMPDHTMLFILE $Tag; | |
861 print CMPDHTMLFILE $SDFilesInfo{RowEndTags}; | |
862 } | |
863 | |
864 print CMPDHTMLFILE SetupHTMLTableRowHeader("left", "", "middle"); | |
865 # Start a new table with two columns, one each for data field labels and values, in | |
866 # current column... | |
867 print CMPDHTMLFILE SetupHTMLTableColumnHeader(); | |
868 print CMPDHTMLFILE SetupHTMLAlignmentBegin("left"); | |
869 print CMPDHTMLFILE SetupHTMLTableHeader(0, 5, 2); | |
870 | |
871 # Setup table for other available data... | |
872 my($CmpdRowHeaderTags); | |
873 $CmpdRowHeaderTags = SetupHTMLTableRowHeader("left", "", "middle"); | |
874 | |
875 @CmpdLines = split "\n", $CmpdString; | |
876 | |
877 @DataFieldLabels = GetCmpdDataHeaderLabels(\@CmpdLines); | |
878 %DataFieldValues = GetCmpdDataHeaderLabelsAndValues(\@CmpdLines); | |
879 | |
880 my($LabelWrapLength, $ValueWrapLength, $LabelColWidth); | |
881 $LabelWrapLength = 30; $ValueWrapLength = 60; $LabelColWidth = 40; | |
882 | |
883 for $Label (@DataFieldLabels) { | |
884 $Value = $DataFieldValues{$Label}; | |
885 $Label .= ":"; | |
886 if ($Label && (length($Label) > $LabelWrapLength)) { | |
887 $Label = WrapText($Label, $LabelWrapLength, "<br>"); | |
888 } | |
889 print CMPDHTMLFILE $CmpdRowHeaderTags; | |
890 if ($Options{strlinkmode} =~ /^plain$/i) { | |
891 $Tag = SetupHTMLTableRowDataValue($Label, "", "", 1); | |
892 } | |
893 else { | |
894 $Tag = SetupHTMLTableRowDataValue($Label, $OptionsInfo{StrLinkShadeColor}); | |
895 } | |
896 $Tag = InsertHTMLTags($Tag, "width", "$LabelColWidth"); | |
897 print CMPDHTMLFILE $Tag; | |
898 | |
899 if ($Value && (length($Value) >=$ValueWrapLength) && $Value !~ /a href/i) { | |
900 $Value =~ s/(\r\n)|(\r)|\n//g; | |
901 $Value = WrapText($Value, $ValueWrapLength, "<br>"); | |
902 } | |
903 $Tag = SetupHTMLTableRowDataValue($Value); | |
904 print CMPDHTMLFILE $Tag; | |
905 print CMPDHTMLFILE $SDFilesInfo{RowEndTags}; | |
906 } | |
907 | |
908 # Finish up table holding numerical data... | |
909 print CMPDHTMLFILE SetupHTMLTableEnd(); | |
910 print CMPDHTMLFILE SetupHTMLAlignmentEnd("left"); | |
911 print CMPDHTMLFILE SetupHTMLTableColumnEnd(); | |
912 print CMPDHTMLFILE $SDFilesInfo{RowEndTags}; | |
913 | |
914 # Finish up main table... | |
915 print CMPDHTMLFILE SetupHTMLTableEnd(); | |
916 print CMPDHTMLFILE SetupHTMLAlignmentEnd("center"); | |
917 | |
918 if ($OptionsInfo{StrLinkNavigation} && ($SDFilesInfo{CmpdCount}[$Index] > 1) ) { | |
919 print CMPDHTMLFILE SetupHTMLEmptyLines(1); | |
920 WriteCompoundSummaryNavigationLinks($Index, $TableNum, $CmpdNum, \*CMPDHTMLFILE); | |
921 } | |
922 | |
923 print CMPDHTMLFILE SetupHTMLPageEnd($OptionsInfo{FooterMsg}); | |
924 close CMPDHTMLFILE; | |
925 | |
926 # Add a link to compound's HTML file in table cell... | |
927 $CmpdHTMLFileRef = ($TableNum == 1) ? ".\/html\/" : ".\/"; | |
928 $CmpdHTMLFileRef .= $CmpdHTMLFileName; | |
929 | |
930 return $CmpdHTMLFileRef; | |
931 } | |
932 | |
933 # Write navigation link information for compound summary page... | |
934 sub WriteCompoundSummaryNavigationLinks { | |
935 my($Index, $CurTableNum, $CurCmpdNum, $CmpdHTMLFileRef) = @_; | |
936 my($FirstTableNum, $CurTableIndex, $FirstCmpdNum, $LastCmpdNum, $PreviousCmpdNum, $NextCmpdNum, $HTMLFile, $HTMLRefFile, $HTMLRefValue); | |
937 | |
938 $FirstTableNum = 1; | |
939 $FirstCmpdNum = 1; | |
940 | |
941 $CurTableIndex = $CurTableNum - 1; | |
942 | |
943 if ($SDFilesInfo{MultipleHTMLTables}[$Index]) { | |
944 my($FirstTableIndex, $LastTableNum, $LastTableIndex); | |
945 $FirstTableIndex = $FirstTableNum - 1; | |
946 $LastTableNum = $SDFilesInfo{TableCount}[$Index]; $LastTableIndex = $LastTableNum - 1; | |
947 $LastCmpdNum = ${$SDFilesInfo{TableEndCmpdNum}[$Index]}[$LastTableIndex]; | |
948 } | |
949 else { | |
950 $LastCmpdNum = $SDFilesInfo{CmpdCount}[$Index]; | |
951 } | |
952 | |
953 $PreviousCmpdNum = ($CurCmpdNum == $FirstCmpdNum) ? 0 : ($CurCmpdNum - 1); | |
954 $NextCmpdNum = ($CurCmpdNum == $LastCmpdNum) ? 0 : ($CurCmpdNum + 1); | |
955 | |
956 my($InactiveLinkNumColor, $InactiveLinkFontBold) = ("#8e2323", "1"); | |
957 my($LinkTextColor, $LinkBGColor, $LinkFontBold) = ("", "", "0"); | |
958 my($BorderWidth, $CellPadding, $CellSpacing) = (0, 2, 2); | |
959 | |
960 # Start link table... | |
961 print $CmpdHTMLFileRef SetupHTMLAlignmentBegin("center"); | |
962 print $CmpdHTMLFileRef SetupHTMLDivBegin("tablenav"); | |
963 print $CmpdHTMLFileRef SetupHTMLTableHeader($BorderWidth, $CellPadding, $CellSpacing); | |
964 print $CmpdHTMLFileRef $SDFilesInfo{RowHeaderTags}; | |
965 | |
966 print $CmpdHTMLFileRef SetupHTMLTableRowDataValue("Compounds: "); | |
967 | |
968 # Setup a link to first compound... | |
969 if ($CurCmpdNum != $FirstCmpdNum) { | |
970 $HTMLFile = $SDFilesInfo{HTMLRoot}[$Index] . "Cmpd" . $FirstCmpdNum . ".html"; | |
971 $HTMLRefFile = "./${HTMLFile}"; | |
972 $HTMLRefValue = SetupHTMLHRef("First", $HTMLRefFile, "First Compound"); | |
973 print $CmpdHTMLFileRef SetupHTMLTableRowDataValue($HTMLRefValue, $LinkBGColor, $LinkTextColor, $LinkFontBold); | |
974 } | |
975 | |
976 # Setup a link to previous compund | |
977 if ($PreviousCmpdNum) { | |
978 $HTMLFile = $SDFilesInfo{HTMLRoot}[$Index] . "Cmpd" . $PreviousCmpdNum . ".html"; | |
979 $HTMLRefFile = "./${HTMLFile}"; | |
980 $HTMLRefValue = SetupHTMLHRef("Previous", $HTMLRefFile, "Previous Compound"); | |
981 print $CmpdHTMLFileRef SetupHTMLTableRowDataValue($HTMLRefValue, $LinkBGColor, $LinkTextColor, $LinkFontBold); | |
982 } | |
983 | |
984 # Setup a link to compound table... | |
985 if ($SDFilesInfo{MultipleHTMLTables}[$Index]) { | |
986 $HTMLFile = ${$SDFilesInfo{TableHTMLFiles}[$Index]}[$CurTableIndex]; | |
987 } | |
988 else { | |
989 $HTMLFile = $SDFilesInfo{HTMLRoot}[$Index] . ".html"; | |
990 } | |
991 $HTMLRefFile = (($CurTableNum == $FirstTableNum) ? "../" : "./") . $HTMLFile; | |
992 $HTMLRefValue = SetupHTMLHRef("Table", $HTMLRefFile, "Table With This Compound"); | |
993 print $CmpdHTMLFileRef SetupHTMLTableRowDataValue($HTMLRefValue, $LinkBGColor, $LinkTextColor, $LinkFontBold); | |
994 | |
995 # Setup a link to next compound... | |
996 if ($NextCmpdNum) { | |
997 $HTMLFile = $SDFilesInfo{HTMLRoot}[$Index] . "Cmpd" . $NextCmpdNum . ".html"; | |
998 $HTMLRefFile = "./${HTMLFile}"; | |
999 $HTMLRefValue = SetupHTMLHRef("Next", $HTMLRefFile, "Next Compound"); | |
1000 print $CmpdHTMLFileRef SetupHTMLTableRowDataValue($HTMLRefValue, $LinkBGColor, $LinkTextColor, $LinkFontBold); | |
1001 } | |
1002 | |
1003 # Setup a link to last compund | |
1004 if ($CurCmpdNum != $LastCmpdNum) { | |
1005 $HTMLFile = $SDFilesInfo{HTMLRoot}[$Index] . "Cmpd" . $LastCmpdNum . ".html"; | |
1006 $HTMLRefFile = "./${HTMLFile}"; | |
1007 $HTMLRefValue = SetupHTMLHRef("Last", $HTMLRefFile, "Last Compound"); | |
1008 print $CmpdHTMLFileRef SetupHTMLTableRowDataValue($HTMLRefValue, $LinkBGColor, $LinkTextColor, $LinkFontBold); | |
1009 } | |
1010 | |
1011 # Setup current table info text.... | |
1012 print $CmpdHTMLFileRef SetupHTMLTableRowDataValue(" "); | |
1013 print $CmpdHTMLFileRef SetupHTMLTableRowDataValue(" "); | |
1014 print $CmpdHTMLFileRef SetupHTMLTableRowDataValue("Showing $CurCmpdNum of $LastCmpdNum"); | |
1015 | |
1016 print $CmpdHTMLFileRef $SDFilesInfo{RowEndTags}; | |
1017 | |
1018 # End link table... | |
1019 print $CmpdHTMLFileRef SetupHTMLTableEnd(); | |
1020 print $CmpdHTMLFileRef SetupHTMLDivEnd(); | |
1021 print $CmpdHTMLFileRef SetupHTMLAlignmentEnd("center"); | |
1022 } | |
1023 | |
1024 # Setup navigation link information for each table. | |
1025 # | |
1026 # All table sets besides first and last have these links: FirstTable, Previous, Current-1,Current,Current+1, Next, and LastTable | |
1027 # First set: Current, Next, and LastTable | |
1028 # Last set: FirstTable, Previous and Current. | |
1029 # | |
1030 sub WriteNavigationLinks { | |
1031 my($Index, $CurTableNum, $HTMLFileRef) = @_; | |
1032 my($TableNum, $StartTableNum, $EndTableNum, $TableIndex, $BorderWidth, $CellPadding, $CellSpacing,$HTMLFile, $HTMLRefFile, $RelativeFileDir, $HTMLRefValue, $FirstTableNum, $FirstTableIndex, $LastTableNum, $LastTableIndex, $TableStartCmpdNum, $TableEndCmpdNum, $LastCmpdNum, $BGColor, $LinksOffSet); | |
1033 | |
1034 $LinksOffSet = 10; | |
1035 | |
1036 $FirstTableNum = 1; $FirstTableIndex = $FirstTableNum - 1; | |
1037 $LastTableNum = $SDFilesInfo{TableCount}[$Index]; $LastTableIndex = $LastTableNum - 1; | |
1038 $LastCmpdNum = ${$SDFilesInfo{TableEndCmpdNum}[$Index]}[$LastTableIndex]; | |
1039 | |
1040 # Figure out which links to display for a particular table... | |
1041 $StartTableNum = $CurTableNum - $LinksOffSet + 1; | |
1042 $StartTableNum = ($StartTableNum < $FirstTableNum) ? $FirstTableNum : $StartTableNum; | |
1043 if ($CurTableNum < $LinksOffSet) { | |
1044 $EndTableNum = $LinksOffSet; | |
1045 } | |
1046 else { | |
1047 $EndTableNum = $CurTableNum + $LinksOffSet - 1; | |
1048 } | |
1049 $EndTableNum = ($EndTableNum > $LastTableNum) ? $LastTableNum : $EndTableNum; | |
1050 | |
1051 my($InactiveLinkNumColor, $InactiveLinkFontBold) = ("#8e2323", "1"); | |
1052 my($LinkTextColor, $LinkBGColor, $LinkFontBold) = ("", "", "1"); | |
1053 | |
1054 # Start link table... | |
1055 $BorderWidth = 0; $CellPadding = 2; $CellSpacing = 2; | |
1056 print $HTMLFileRef SetupHTMLAlignmentBegin("center"); | |
1057 print $HTMLFileRef SetupHTMLDivBegin("tablenav"); | |
1058 print $HTMLFileRef SetupHTMLTableHeader($BorderWidth, $CellPadding, $CellSpacing); | |
1059 print $HTMLFileRef $SDFilesInfo{RowHeaderTags}; | |
1060 | |
1061 if ($OptionsInfo{NavLinksTableInfo} && $OptionsInfo{NavLinksCmpdInfo}) { | |
1062 print $HTMLFileRef SetupHTMLTableRowDataValue("Showing table $CurTableNum of $LastTableNum"); | |
1063 print $HTMLFileRef SetupHTMLTableRowDataValue(" "); | |
1064 print $HTMLFileRef SetupHTMLTableRowDataValue(" "); | |
1065 } | |
1066 | |
1067 print $HTMLFileRef SetupHTMLTableRowDataValue("Tables: "); | |
1068 # Setup a link to first table... | |
1069 if ($StartTableNum != $FirstTableNum) { | |
1070 $HTMLFile = ${$SDFilesInfo{TableHTMLFiles}[$Index]}[$FirstTableIndex]; | |
1071 $HTMLRefFile = GetRelativeFileDir($CurTableNum, $FirstTableNum, $FirstTableNum) . $HTMLFile; | |
1072 $TableStartCmpdNum = ${$SDFilesInfo{TableStartCmpdNum}[$Index]}[$FirstTableIndex]; | |
1073 $TableEndCmpdNum = ${$SDFilesInfo{TableEndCmpdNum}[$Index]}[$FirstTableIndex]; | |
1074 $HTMLRefValue = SetupHTMLHRef("First", $HTMLRefFile, "First Table Containing Compounds $TableStartCmpdNum To $TableEndCmpdNum"); | |
1075 print $HTMLFileRef SetupHTMLTableRowDataValue($HTMLRefValue, $LinkBGColor, $LinkTextColor, $LinkFontBold); | |
1076 } | |
1077 | |
1078 # Setup link to previous table... | |
1079 if ($CurTableNum != $FirstTableNum) { | |
1080 my($PreviousTableNum, $PreviousTableIndex); | |
1081 $PreviousTableNum = $CurTableNum - 1; $PreviousTableIndex = $PreviousTableNum - 1; | |
1082 $HTMLFile = ${$SDFilesInfo{TableHTMLFiles}[$Index]}[$PreviousTableIndex]; | |
1083 $HTMLRefFile = GetRelativeFileDir($CurTableNum, $PreviousTableNum, $FirstTableNum) . $HTMLFile; | |
1084 $TableStartCmpdNum = ${$SDFilesInfo{TableStartCmpdNum}[$Index]}[$PreviousTableIndex]; | |
1085 $TableEndCmpdNum = ${$SDFilesInfo{TableEndCmpdNum}[$Index]}[$PreviousTableIndex]; | |
1086 $HTMLRefValue = SetupHTMLHRef("Previous", $HTMLRefFile, "Previous Table Containing Compounds $TableStartCmpdNum To $TableEndCmpdNum"); | |
1087 print $HTMLFileRef SetupHTMLTableRowDataValue($HTMLRefValue, $LinkBGColor, $LinkTextColor, $LinkFontBold); | |
1088 } | |
1089 | |
1090 for $TableNum ($StartTableNum .. $EndTableNum) { | |
1091 $TableIndex = $TableNum - 1; | |
1092 $HTMLFile = ${$SDFilesInfo{TableHTMLFiles}[$Index]}[$TableIndex]; | |
1093 if ($TableNum == $CurTableNum) { | |
1094 print $HTMLFileRef SetupHTMLTableRowDataValue($TableNum, $LinkBGColor, $InactiveLinkNumColor, $InactiveLinkFontBold); | |
1095 } | |
1096 else { | |
1097 # Setup the link... | |
1098 my($RefTitle); | |
1099 $TableStartCmpdNum = ${$SDFilesInfo{TableStartCmpdNum}[$Index]}[$TableIndex]; | |
1100 $TableEndCmpdNum = ${$SDFilesInfo{TableEndCmpdNum}[$Index]}[$TableIndex]; | |
1101 $RefTitle = AddNumberSuffix($TableNum) . " Table Containing Compounds $TableStartCmpdNum To $TableEndCmpdNum"; | |
1102 $HTMLRefFile = GetRelativeFileDir($CurTableNum, $TableNum, $FirstTableNum) . $HTMLFile; | |
1103 $HTMLRefValue = SetupHTMLHRef($TableNum, $HTMLRefFile, $RefTitle); | |
1104 print $HTMLFileRef SetupHTMLTableRowDataValue($HTMLRefValue); | |
1105 } | |
1106 } | |
1107 | |
1108 # Setup link to next table... | |
1109 if ($CurTableNum != $LastTableNum) { | |
1110 my($NextTableNum, $NextTableIndex); | |
1111 $NextTableNum = $CurTableNum + 1; $NextTableIndex = $NextTableNum - 1; | |
1112 $HTMLFile = ${$SDFilesInfo{TableHTMLFiles}[$Index]}[$NextTableIndex]; | |
1113 $HTMLRefFile = GetRelativeFileDir($CurTableNum, $NextTableNum, $FirstTableNum) . $HTMLFile; | |
1114 $TableStartCmpdNum = ${$SDFilesInfo{TableStartCmpdNum}[$Index]}[$NextTableIndex]; | |
1115 $TableEndCmpdNum = ${$SDFilesInfo{TableEndCmpdNum}[$Index]}[$NextTableIndex]; | |
1116 $HTMLRefValue = SetupHTMLHRef("Next", $HTMLRefFile, "Next Table Containing Compounds $TableStartCmpdNum To $TableEndCmpdNum"); | |
1117 print $HTMLFileRef SetupHTMLTableRowDataValue($HTMLRefValue, $LinkBGColor, $LinkTextColor, $LinkFontBold); | |
1118 } | |
1119 | |
1120 # Setup link to last table... | |
1121 if ($EndTableNum != $LastTableNum) { | |
1122 $HTMLFile = ${$SDFilesInfo{TableHTMLFiles}[$Index]}[$LastTableIndex]; | |
1123 $HTMLRefFile = GetRelativeFileDir($CurTableNum, $LastTableNum, $FirstTableNum) . $HTMLFile; | |
1124 $TableStartCmpdNum = ${$SDFilesInfo{TableStartCmpdNum}[$Index]}[$LastTableIndex]; | |
1125 $TableEndCmpdNum = ${$SDFilesInfo{TableEndCmpdNum}[$Index]}[$LastTableIndex]; | |
1126 $HTMLRefValue = SetupHTMLHRef("Last", $HTMLRefFile, "Last Table Containing Compounds $TableStartCmpdNum To $TableEndCmpdNum"); | |
1127 print $HTMLFileRef SetupHTMLTableRowDataValue($HTMLRefValue, $LinkBGColor, $LinkTextColor, $LinkFontBold); | |
1128 } | |
1129 # Setup current table info text.... | |
1130 print $HTMLFileRef SetupHTMLTableRowDataValue(" "); | |
1131 print $HTMLFileRef SetupHTMLTableRowDataValue(" "); | |
1132 $TableStartCmpdNum = ${$SDFilesInfo{TableStartCmpdNum}[$Index]}[$CurTableNum - 1]; | |
1133 $TableEndCmpdNum = ${$SDFilesInfo{TableEndCmpdNum}[$Index]}[$CurTableNum - 1]; | |
1134 if ($OptionsInfo{NavLinksCmpdInfo}) { | |
1135 print $HTMLFileRef SetupHTMLTableRowDataValue("Showing compounds $TableStartCmpdNum to $TableEndCmpdNum of $LastCmpdNum"); | |
1136 } | |
1137 else { | |
1138 print $HTMLFileRef SetupHTMLTableRowDataValue("Showing table $CurTableNum of $LastTableNum"); | |
1139 } | |
1140 | |
1141 print $HTMLFileRef $SDFilesInfo{RowEndTags}; | |
1142 # End link table... | |
1143 print $HTMLFileRef SetupHTMLTableEnd(); | |
1144 print $HTMLFileRef SetupHTMLDivEnd(); | |
1145 print $HTMLFileRef SetupHTMLAlignmentEnd("center"); | |
1146 } | |
1147 | |
1148 # Generate relative directory path... | |
1149 sub GetRelativeFileDir { | |
1150 my($FromTableNum, $ToTableNum, $FirstTableNum) = @_; | |
1151 my($RelativeFileDir) = ""; | |
1152 | |
1153 if ($FromTableNum == $FirstTableNum) { | |
1154 $RelativeFileDir = ($ToTableNum == $FirstTableNum) ? ".\/" : ".\/html\/"; | |
1155 } | |
1156 else { | |
1157 $RelativeFileDir = ($ToTableNum == $FirstTableNum) ? "..\/" : ".\/"; | |
1158 } | |
1159 return $RelativeFileDir; | |
1160 } | |
1161 | |
1162 # Based on hightlight stype, return appropriate colors for background or text... | |
1163 sub GetValueHighlightColors { | |
1164 my($Label, $Value) = @_; | |
1165 my($DataType, $Criterion, $CriterionValue, $BgColor, $FontColor, $ValueOk, $Nothing); | |
1166 | |
1167 $BgColor = ""; $FontColor = ""; | |
1168 $DataType = $OptionsInfo{SpecifiedHighlightDataFieldTypesMap}{$Label}; | |
1169 $Criterion = $OptionsInfo{SpecifiedHighlightDataFieldCriteriaMap}{$Label}; | |
1170 $CriterionValue = $OptionsInfo{SpecifiedHighlightDataFieldValueMap}{$Label}; | |
1171 | |
1172 $ValueOk = 0; | |
1173 if ($DataType =~ /^numeric$/i) { | |
1174 NUMSWITCH: { | |
1175 if ($Criterion =~ /^ge$/i) { $ValueOk = ($Value >= $CriterionValue) ? 1 : 0; last NUMSWITCH; } | |
1176 if ($Criterion =~ /^le$/i) { $ValueOk = ($Value <= $CriterionValue) ? 1 : 0; last NUMSWITCH; } | |
1177 if ($Criterion =~ /^eq$/i) { $ValueOk = ($Value == $CriterionValue) ? 1 : 0; last NUMSWITCH; } | |
1178 $Nothing = 1; | |
1179 } | |
1180 } | |
1181 else { | |
1182 TEXTSWITCH: { | |
1183 if ($Criterion =~ /^ge$/i) { $ValueOk = ($Value ge $CriterionValue) ? 1 : 0; last TEXTSWITCH; } | |
1184 if ($Criterion =~ /^le$/i) { $ValueOk = ($Value le $CriterionValue) ? 1 : 0; last TEXTSWITCH; } | |
1185 if ($Criterion =~ /^eq$/i) { $ValueOk = ($Value eq $CriterionValue) ? 1 : 0; last TEXTSWITCH; } | |
1186 $Nothing = 1; | |
1187 } | |
1188 } | |
1189 $BgColor = $ValueOk ? $OptionsInfo{ValueOkColor} : $OptionsInfo{ValueNotOkColor}; | |
1190 if ($Options{highlightstyle} =~ /^text$/i) { | |
1191 $BgColor = ""; | |
1192 $FontColor = $ValueOk ? $OptionsInfo{ValueOkColor} : $OptionsInfo{ValueNotOkColor}; | |
1193 } | |
1194 return ($BgColor, $FontColor); | |
1195 } | |
1196 | |
1197 #Make sure appropriate mode specific option values are specified... | |
1198 sub ProcessOptions { | |
1199 | |
1200 %OptionsInfo = (); | |
1201 | |
1202 $OptionsInfo{TitleDisplay} = ($Options{titledisplay} =~ /^yes$/i) ? 1 : 0; | |
1203 | |
1204 $OptionsInfo{RowHAlignment} = "left"; $OptionsInfo{RowVAlignment} = "middle"; | |
1205 if (exists($Options{align})) { | |
1206 my (@AlignValues) = split ",", $Options{align}; | |
1207 if (@AlignValues == 2) { | |
1208 $OptionsInfo{RowHAlignment} = $AlignValues[0]; | |
1209 $OptionsInfo{RowVAlignment} = $AlignValues[1]; | |
1210 } | |
1211 elsif (@AlignValues == 1) { | |
1212 $OptionsInfo{RowHAlignment} = $AlignValues[0]; | |
1213 } | |
1214 else { | |
1215 die "Error: Invalid number of values, ", scalar(@AlignValues) , ", specified by \"-a --align\" option.\nIt must contain only one or two values.\n"; | |
1216 } | |
1217 if ($OptionsInfo{RowHAlignment} !~ /^(left|center|right)$/i) { | |
1218 die "Error: The horizontal alignment value specified, $Options{align}, for option \"-a --align\" is not valid. Allowed values: left, center, or right\n"; | |
1219 } | |
1220 if ($OptionsInfo{RowVAlignment} !~ /^(top|middle|bottom)$/i) { | |
1221 die "Error: The horizontal alignment value specified, $Options{align}, for option \"-a --align\" is not valid. Allowed values: top, middle, or bottom\n"; | |
1222 } | |
1223 } | |
1224 | |
1225 $OptionsInfo{TableHeaderRowHAlignment} = "center"; $OptionsInfo{TableHeaderRowVAlignment} = "middle"; | |
1226 if (exists($Options{headeralign})) { | |
1227 my (@AlignValues) = split ",", $Options{headeralign}; | |
1228 if (@AlignValues == 2) { | |
1229 $OptionsInfo{TableHeaderRowHAlignment} = $AlignValues[0]; | |
1230 $OptionsInfo{TableHeaderRowVAlignment} = $AlignValues[1]; | |
1231 } | |
1232 elsif (@AlignValues == 1) { | |
1233 $OptionsInfo{TableHeaderRowHAlignment} = $AlignValues[0]; | |
1234 } | |
1235 else { | |
1236 die "Error: Invalid number of values, ", scalar(@AlignValues) , ", specified by \"--headeralign\" option.\nIt must contain only one or two value.\n"; | |
1237 } | |
1238 if ($OptionsInfo{TableHeaderRowHAlignment} !~ /^(left|center|right)$/i) { | |
1239 die "Error: The horizontal alignment value specified, $Options{headeralign}, for option \"--headeralign\" is not valid. Allowed values: left, center, or right\n"; | |
1240 } | |
1241 if ($OptionsInfo{TableHeaderRowVAlignment} !~ /^(top|middle|bottom)$/i) { | |
1242 die "Error: The horizontal alignment value specified, $Options{headeralign}, for option \"-a --headeralign\" is not valid. Allowed values: top, middle, or bottom\n"; | |
1243 } | |
1244 } | |
1245 | |
1246 if (exists($Options{border})) { | |
1247 $OptionsInfo{TableBorder} = $Options{border}; | |
1248 } | |
1249 else { | |
1250 $OptionsInfo{TableBorder} = ($Options{mode} =~ /^(plain|highlight)$/i) || $Options{mode} =~ /^structuresonly$/i ? 1 : 0; | |
1251 } | |
1252 $OptionsInfo{TableCellPadding} = $Options{cellpadding}; | |
1253 $OptionsInfo{TableCellSpacing} = $Options{cellspacing}; | |
1254 $OptionsInfo{FooterMsg} = $Options{footer} ? $Options{footer} : ""; | |
1255 | |
1256 if ($Options{headercolor}) { | |
1257 $OptionsInfo{TableHeaderRowColor} = $Options{headercolor}; | |
1258 } | |
1259 else { | |
1260 $OptionsInfo{TableHeaderRowColor} = ($Options{mode} =~ /^plain$/i) ? "" : "#e0e9eb"; | |
1261 } | |
1262 | |
1263 $OptionsInfo{NavLinksAtBottom} = 1; $OptionsInfo{NavLinksAtTop} = 0; | |
1264 if ($Options{displaylinks} =~ /^(both|top)$/i) { | |
1265 $OptionsInfo{NavLinksAtTop} = 1; | |
1266 } | |
1267 $OptionsInfo{NavLinksTableInfo} = 1; $OptionsInfo{NavLinksCmpdInfo} = 0; | |
1268 if ($Options{displaylinksinfo} =~ /^both$/i) { | |
1269 $OptionsInfo{NavLinksCmpdInfo} = 1; | |
1270 $OptionsInfo{NavLinksTableInfo} = 1; | |
1271 } | |
1272 elsif ($Options{displaylinksinfo} =~ /^compound$/i) { | |
1273 $OptionsInfo{NavLinksCmpdInfo} = 1; | |
1274 $OptionsInfo{NavLinksTableInfo} = 0; | |
1275 } | |
1276 | |
1277 if ($Options{stylesheet} =~ /^old$/i ) { | |
1278 if (!$Options{stylesheetname}) { | |
1279 die "Error: No stylesheet name specified using \"--stylesheetname\" option: It is required for \"old\" value of \"-s --stylesheet\" option. \n"; | |
1280 } | |
1281 } | |
1282 | |
1283 my(@ColorValues); | |
1284 $OptionsInfo{ShadeRowsStatus} = 0; | |
1285 $OptionsInfo{OddRowsShadeColor} = "#ffffff"; | |
1286 $OptionsInfo{EvenRowsShadeColor} = "#e0e9eb"; | |
1287 if ($Options{shadecolor}) { | |
1288 # Make sure only one value is specified... | |
1289 @ColorValues = split ",", $Options{shadecolor}; | |
1290 if (@ColorValues == 2) { | |
1291 $OptionsInfo{OddRowsShadeColor} = $ColorValues[0]; | |
1292 $OptionsInfo{EvenRowsShadeColor} = $ColorValues[1]; | |
1293 } | |
1294 else { | |
1295 die "Error: Invalid number of values, ", scalar(@ColorValues) , ", specified by \"--shadecolor\" option.\nIt must contain only two value.\n"; | |
1296 } | |
1297 } | |
1298 if ($Options{mode} =~ /^(shade|shadedhighlight|shadedstructuresonly)$/i) { | |
1299 $OptionsInfo{ShadeRowsStatus} = 1; | |
1300 } | |
1301 | |
1302 $OptionsInfo{SettingUpCmpdSummaryPage} = 0; | |
1303 $OptionsInfo{StrLinkShadeColor} = (exists $Options{strlinkshadecolor}) ? $Options{strlinkshadecolor} : "#e0e9eb"; | |
1304 $OptionsInfo{DisplayStructure} = ($Options{structure} =~ /^display$/i) ? 1 : 0; | |
1305 $OptionsInfo{StrViewerType} = $Options{strviewertype}; | |
1306 $OptionsInfo{StrLinkNavigation} = ($Options{strlinknavigation} =~ /^yes$/i) ? 1 : 0; | |
1307 $OptionsInfo{StrLinkTitleDisplay} = ($Options{strlinktitledisplay} =~ /^yes$/i) ? 1 : 0; | |
1308 $OptionsInfo{StrLinkTitle} = (exists($Options{strlinktitle}) && length($Options{strlinktitle})) ? "$Options{strlinktitle}" : "Compound Summary"; | |
1309 | |
1310 my($StrViewerEmbedUsingJS) = (($Options{strviewerembed} =~ /^javascript$/i) && ($OptionsInfo{StrViewerType} =~ /^(Jmol|MarvinView|ChemDrawPlugIn|ChemDrawActiveX|Chem3DActiveX)$/i )) ? 1 : 0; | |
1311 | |
1312 $OptionsInfo{StrTableRows} = 6; $OptionsInfo{StrTableCols} = 4; | |
1313 if ($Options{strtablesize}) { | |
1314 my(@StrTableSizeValues) = split ",", $Options{strtablesize}; | |
1315 if (@StrTableSizeValues == 2) { | |
1316 $OptionsInfo{StrTableRows} = $StrTableSizeValues[0]; | |
1317 $OptionsInfo{StrTableCols} = $StrTableSizeValues[1]; | |
1318 if (!IsPositiveInteger($OptionsInfo{StrTableRows})) { | |
1319 die "Error: The first value specified, $OptionsInfo{StrTableRows}, for option \"--strtablesize\" is not valid: Allowed integer values: > 0.\n"; | |
1320 } | |
1321 if (!IsPositiveInteger($OptionsInfo{StrTableCols})) { | |
1322 die "Error: The first value specified, $OptionsInfo{StrTableCols}, for option \"--strtablesize\" is not valid: Allowed integer values: > 0.\n"; | |
1323 } | |
1324 } | |
1325 else { | |
1326 die "Error: Invalid number of values, ", scalar(@StrTableSizeValues), ", specified by \"--strtablesize\" option.\nIt must contain only two value for structuresonly \"-m --mode\" option.\n"; | |
1327 } | |
1328 } | |
1329 | |
1330 # Setup applet information... | |
1331 $OptionsInfo{StrViewerCodeBase} = GetMayaChemToolsLibDirName() . "/Jmol"; | |
1332 $OptionsInfo{TopHTMLDirStrViewerCodeBase} = $OptionsInfo{StrViewerCodeBase}; | |
1333 $OptionsInfo{SubHTMLDirStrViewerCodeBase} = $OptionsInfo{StrViewerCodeBase}; | |
1334 | |
1335 my($StrViewerAppletArchive, $StrViewerAppletCode) = SetupDefaultAppletArchiveAndCode($OptionsInfo{StrViewerType}); | |
1336 if ($Options{strviewerconfig}) { | |
1337 my(@StrViewerConfigParts) = split ",", $Options{strviewerconfig}; | |
1338 if (@StrViewerConfigParts >=1 && @StrViewerConfigParts <= 3) { | |
1339 if (@StrViewerConfigParts == 3) { | |
1340 $OptionsInfo{StrViewerCodeBase} = $StrViewerConfigParts[0]; | |
1341 $StrViewerAppletArchive = $StrViewerConfigParts[1]; | |
1342 $StrViewerAppletCode = $StrViewerConfigParts[2]; | |
1343 } | |
1344 elsif (@StrViewerConfigParts == 2) { | |
1345 $OptionsInfo{StrViewerCodeBase} = $StrViewerConfigParts[0]; | |
1346 $StrViewerAppletArchive = $StrViewerConfigParts[1]; | |
1347 my($AppletArchive, $AppletCode) = SetupDefaultAppletArchiveAndCode($OptionsInfo{StrViewerType}); | |
1348 $StrViewerAppletCode = $AppletCode; | |
1349 } | |
1350 else { | |
1351 $OptionsInfo{StrViewerCodeBase} = $StrViewerConfigParts[0]; | |
1352 ($StrViewerAppletArchive, $StrViewerAppletCode) = SetupDefaultAppletArchiveAndCode($OptionsInfo{StrViewerType}); | |
1353 } | |
1354 } | |
1355 else { | |
1356 die "Error: Invalid number of values, ", scalar(@StrViewerConfigParts), ", specified by \"--strviewerconfig\" option.\nNumver of allowed values:1 to 3 \n"; | |
1357 } | |
1358 } | |
1359 else { | |
1360 if ($OptionsInfo{StrViewerType} =~ /^(JME|MarvinView)$/i ) { | |
1361 die "Error: No codebase specified using \"--strviewerconfig\" option for $OptionsInfo{StrViewerType} structure viewer\n"; | |
1362 } | |
1363 if ($StrViewerEmbedUsingJS && $OptionsInfo{StrViewerType} !~ /^Jmol$/i) { | |
1364 die "Error: No codebase specified using \"--strviewerconfig\" option for javascript value of \"--strviewerembed\" option for $OptionsInfo{StrViewerType} structure viewer \n"; | |
1365 } | |
1366 } | |
1367 | |
1368 if (-d $OptionsInfo{StrViewerCodeBase}) { | |
1369 # Change local code base direcrory name to a relative directory name based on the | |
1370 # current directory containing SD file; otherwise, Java applets and JavaScripts don't | |
1371 # get loaded into Firefox and Chrome browsers. | |
1372 # | |
1373 # For top and sub HTML directories, add prefix "../" and "../../" to relative path... | |
1374 $OptionsInfo{StrViewerCodeBase} = File::Spec->abs2rel($OptionsInfo{StrViewerCodeBase}, Cwd::cwd()); | |
1375 | |
1376 $OptionsInfo{TopHTMLDirStrViewerCodeBase} = "../" . $OptionsInfo{StrViewerCodeBase}; | |
1377 $OptionsInfo{SubHTMLDirStrViewerCodeBase} = "../../" . $OptionsInfo{StrViewerCodeBase}; | |
1378 } | |
1379 | |
1380 # Setup structure viewer parameter information... | |
1381 %{$OptionsInfo{StrViewerParams}} = (); | |
1382 if ($Options{strviewerparams}) { | |
1383 my(@ParamsSplit, @ParamPairSplit, $ParamPair); | |
1384 #@ParamsSplit = split " ", $Options{strviewerparams}; | |
1385 @ParamsSplit = quotewords(" ", 0, $Options{strviewerparams}); | |
1386 for $ParamPair (@ParamsSplit) { | |
1387 @ParamPairSplit = split "=", $ParamPair; | |
1388 if (@ParamPairSplit == 2) { | |
1389 $OptionsInfo{StrViewerParams}{$ParamPairSplit[0]} = $ParamPairSplit[1]; | |
1390 } | |
1391 else { | |
1392 die "Error: Invalid value, $ParamPair, specified by \"--strviewerparams\" option.\nValid values: name=value\n"; | |
1393 } | |
1394 } | |
1395 } | |
1396 | |
1397 if ($OptionsInfo{StrViewerType} =~ /^(JME|Jmol|MarvinView)$/i ) { | |
1398 $OptionsInfo{StrViewerParams}{name} = $StrViewerAppletCode; | |
1399 $OptionsInfo{StrViewerParams}{archive} = $StrViewerAppletArchive; | |
1400 $OptionsInfo{StrViewerParams}{code} = $StrViewerAppletCode; | |
1401 } | |
1402 $OptionsInfo{StrWidth} = exists($OptionsInfo{StrViewerParams}{width}) ? $OptionsInfo{StrViewerParams}{width} : 250; | |
1403 $OptionsInfo{StrViewerParams}{width} = $OptionsInfo{StrWidth}; | |
1404 $OptionsInfo{StrHeight} = exists($OptionsInfo{StrViewerParams}{height}) ? $OptionsInfo{StrViewerParams}{height} : 170; | |
1405 $OptionsInfo{StrViewerParams}{height} = $OptionsInfo{StrHeight}; | |
1406 | |
1407 $OptionsInfo{StrLinkWidth} = 500; | |
1408 if (exists($OptionsInfo{StrViewerParams}{strlinkwidth})) { | |
1409 $OptionsInfo{StrLinkWidth} = $OptionsInfo{StrViewerParams}{strlinkwidth}; | |
1410 $OptionsInfo{StrViewerParams}{strlinkwidth} = ""; | |
1411 } | |
1412 $OptionsInfo{StrLinkHeight} = 295; | |
1413 if (exists($OptionsInfo{StrViewerParams}{strlinkheight})) { | |
1414 $OptionsInfo{StrLinkHeight} = $OptionsInfo{StrViewerParams}{strlinkheight}; | |
1415 $OptionsInfo{StrViewerParams}{strlinkheight} = ""; | |
1416 } | |
1417 | |
1418 $OptionsInfo{StrBgColorSpecified} = ""; | |
1419 if (exists($OptionsInfo{StrViewerParams}{bgcolor})) { | |
1420 $OptionsInfo{StrBgColorSpecified} = $OptionsInfo{StrViewerParams}{bgcolor}; | |
1421 } | |
1422 | |
1423 $OptionsInfo{StrLinkBgColorSpecified} = "#ffffff"; | |
1424 if (exists($OptionsInfo{StrViewerParams}{strlinkbgcolor})) { | |
1425 $OptionsInfo{StrLinkBgColorSpecified} = $OptionsInfo{StrViewerParams}{strlinkbgcolor}; | |
1426 $OptionsInfo{StrViewerParams}{strlinkbgcolor} = ""; | |
1427 } | |
1428 | |
1429 # Setup Java Script usage... | |
1430 $OptionsInfo{StrViewerJSFileRef} = ""; | |
1431 $OptionsInfo{TopHTMLDirStrViewerJSFileRef} = ""; | |
1432 $OptionsInfo{SubHTMLDirStrViewerJSFileRef} = ""; | |
1433 | |
1434 if ($StrViewerEmbedUsingJS) { | |
1435 my ($StrViewerJSFileName) = ""; | |
1436 if ($Options{strviewerjsfile}) { | |
1437 $StrViewerJSFileName = $Options{strviewerjsfile}; | |
1438 } | |
1439 else { | |
1440 if ($OptionsInfo{StrViewerType} =~ /^Jmol$/i) { | |
1441 $StrViewerJSFileName = "Jmol.js"; | |
1442 } | |
1443 elsif ($OptionsInfo{StrViewerType} =~ /^MarvinView$/i) { | |
1444 $StrViewerJSFileName = "marvin.js"; | |
1445 } | |
1446 elsif ($OptionsInfo{StrViewerType} =~ /^(ChemDrawPlugIn|ChemDrawActiveX)$/i) { | |
1447 $StrViewerJSFileName = "chemdraw.js"; | |
1448 } | |
1449 elsif ($OptionsInfo{StrViewerType} =~ /^Chem3DActiveX$/i) { | |
1450 $StrViewerJSFileName = "chem3d.js"; | |
1451 } | |
1452 } | |
1453 if ($StrViewerJSFileName) { | |
1454 $OptionsInfo{StrViewerParams}{usejavascript} = $StrViewerJSFileName; | |
1455 $OptionsInfo{StrViewerJSFileRef} = "$OptionsInfo{StrViewerCodeBase}" . "\/" . "$StrViewerJSFileName"; | |
1456 $OptionsInfo{TopHTMLDirStrViewerJSFileRef} = "$OptionsInfo{TopHTMLDirStrViewerCodeBase}" . "\/" . "$StrViewerJSFileName"; | |
1457 $OptionsInfo{SubHTMLDirStrViewerJSFileRef} = "$OptionsInfo{SubHTMLDirStrViewerCodeBase}" . "\/" . "$StrViewerJSFileName"; | |
1458 } | |
1459 } | |
1460 | |
1461 # Check any other user specified parametrs applicable to all structure viewers... | |
1462 | |
1463 $OptionsInfo{StructuresOnlyMode} = 0; | |
1464 $OptionsInfo{MaxCmpdsPerTable} = ($Options{structure} =~ /^display$/i) ? 15 : 50; | |
1465 if (exists $Options{numcmpds}) { | |
1466 $OptionsInfo{MaxCmpdsPerTable} = $Options{numcmpds}; | |
1467 } | |
1468 if ($Options{mode} =~ /^(structuresonly|shadedstructuresonly)$/i) { | |
1469 $OptionsInfo{MaxCmpdsPerTable} = ($OptionsInfo{MaxCmpdsPerTable} > 0) ? ($OptionsInfo{StrTableRows} * $OptionsInfo{StrTableCols}) : 0; | |
1470 $OptionsInfo{StructuresOnlyMode} = 1; | |
1471 } | |
1472 $OptionsInfo{CmpdDataField} = ""; | |
1473 $OptionsInfo{CmpdDataFieldLabel} = "no"; | |
1474 $OptionsInfo{CmpdDataFieldPosition} = "bottom"; | |
1475 $OptionsInfo{CmpdDataFieldAlignment} = "center"; | |
1476 if (exists($Options{cmpddatafield}) && length($Options{cmpddatafield})) { | |
1477 my (@CmpdDataFieldValues) = split ",", $Options{cmpddatafield}; | |
1478 if (@CmpdDataFieldValues == 1) { | |
1479 $OptionsInfo{CmpdDataField} = $CmpdDataFieldValues[0]; | |
1480 } | |
1481 elsif (@CmpdDataFieldValues == 2) { | |
1482 $OptionsInfo{CmpdDataField} = $CmpdDataFieldValues[0]; | |
1483 $OptionsInfo{CmpdDataFieldLabel} = $CmpdDataFieldValues[1]; | |
1484 } | |
1485 elsif (@CmpdDataFieldValues == 3) { | |
1486 $OptionsInfo{CmpdDataField} = $CmpdDataFieldValues[0]; | |
1487 $OptionsInfo{CmpdDataFieldLabel} = $CmpdDataFieldValues[1]; | |
1488 $OptionsInfo{CmpdDataFieldPosition} = $CmpdDataFieldValues[2]; | |
1489 } | |
1490 elsif (@CmpdDataFieldValues == 4) { | |
1491 $OptionsInfo{CmpdDataField} = $CmpdDataFieldValues[0]; | |
1492 $OptionsInfo{CmpdDataFieldLabel} = $CmpdDataFieldValues[1]; | |
1493 $OptionsInfo{CmpdDataFieldPosition} = $CmpdDataFieldValues[2]; | |
1494 $OptionsInfo{CmpdDataFieldAlignment} = $CmpdDataFieldValues[3]; | |
1495 } | |
1496 else { | |
1497 die "Error: Invalid number of values, ", scalar(@CmpdDataFieldValues) , ", specified by \"--cmpddatafield\" option.\nIt must contain only one, two, three, or four values.\n"; | |
1498 } | |
1499 if ($OptionsInfo{CmpdDataFieldLabel} !~ /^(yes|no)$/ ) { | |
1500 die "Error: The label value specified, $Options{cmpddatafield}, for option \"--cmpddatafield\" is not valid. Allowed values: yes or no\n"; | |
1501 } | |
1502 if ($OptionsInfo{CmpdDataFieldPosition} !~ /^(top|bottom)$/ ) { | |
1503 die "Error: The position value specified, $Options{cmpddatafield}, for option \"--cmpddatafield\" is not valid. Allowed values: top or bottom\n"; | |
1504 } | |
1505 if ($OptionsInfo{CmpdDataFieldAlignment} !~ /^(left|center|right)$/ ) { | |
1506 die "Error: The alignment value specified, $Options{cmpddatafield}, for option \"--cmpddatafield\" is not valid. Allowed values: left, center, or right\n"; | |
1507 } | |
1508 } | |
1509 | |
1510 # Process data fields to be displayed in tables... | |
1511 $OptionsInfo{SpecifiedDataFields} = exists($Options{datafields}) ? $Options{datafields} : "All"; | |
1512 | |
1513 $OptionsInfo{ValueOkColor} = ""; $OptionsInfo{ValueNotOkColor} = ""; $OptionsInfo{HighlightStatus} = 0; | |
1514 if ($Options{mode} =~ /^(highlight|shadedhighlight)$/i) { | |
1515 my($HighlightMode, $HighlightBy); | |
1516 $HighlightMode = $Options{mode}; $HighlightBy = $Options{highlightby}; | |
1517 | |
1518 $OptionsInfo{HighlightStatus} = 1; | |
1519 $OptionsInfo{ValueOkColor} = "#0fff0f"; | |
1520 $OptionsInfo{ValueNotOkColor} = "#ff0f0f"; | |
1521 if ($Options{highlightstyle} =~ /^text$/i) { | |
1522 $OptionsInfo{ValueOkColor} = "#0fbb0f"; | |
1523 $OptionsInfo{ValueNotOkColor} = "#ff0f0f"; | |
1524 } | |
1525 if ($Options{highlightcolor}) { | |
1526 # Make sure two values are specified... | |
1527 @ColorValues = split ",", $Options{highlightcolor}; | |
1528 if (@ColorValues == 2) { | |
1529 $OptionsInfo{ValueOkColor} = $ColorValues[0]; | |
1530 $OptionsInfo{ValueNotOkColor} = $ColorValues[1]; | |
1531 } | |
1532 else { | |
1533 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"; | |
1534 } | |
1535 } | |
1536 if (!$Options{highlight}) { | |
1537 die "Error: Specify columns to be highlighted using \"--hightlight\" option\n"; | |
1538 } | |
1539 # Retrieve quartet values from "hightlight" option... | |
1540 my(@HighlightValueQuartets); | |
1541 | |
1542 @HighlightValueQuartets = (); | |
1543 @HighlightValueQuartets = split ",", $Options{highlight}; | |
1544 if ((@HighlightValueQuartets % 4)) { | |
1545 die "Error: Quartets not found in values specified using \"--highlight\" option for $HighlightMode \"-m --mode\"\n"; | |
1546 } | |
1547 # Process quartets... | |
1548 my($Index, $Label, $DataType, $Criterion, $Value); | |
1549 | |
1550 @{$OptionsInfo{SpecifiedHighlightDataFieldLabels}} = (); | |
1551 %{$OptionsInfo{SpecifiedHighlightDataFieldLabelsMap}} = (); | |
1552 %{$OptionsInfo{SpecifiedHighlightDataFieldTypesMap}} = (); | |
1553 %{$OptionsInfo{SpecifiedHighlightDataFieldCriteriaMap}} = (); | |
1554 %{$OptionsInfo{SpecifiedHighlightDataFieldValueMap}} = (); | |
1555 | |
1556 for ($Index = 0; $Index < @HighlightValueQuartets; $Index = $Index + 4) { | |
1557 $Label = $HighlightValueQuartets[$Index]; | |
1558 $DataType = $HighlightValueQuartets[$Index + 1]; | |
1559 $Criterion = $HighlightValueQuartets[$Index + 2]; | |
1560 $Value = $HighlightValueQuartets[$Index + 3]; | |
1561 if ($DataType !~ /^(numeric|text)$/i) { | |
1562 die "Error: Invalid column data type, $DataType, specified in quartet, \"$Label,$DataType,$Criterion,$Value\", using \"--hightlight\" option: Valid values: numeric or text\n"; | |
1563 } | |
1564 if ($Criterion !~ /^(eq|le|ge)$/i) { | |
1565 die "Error: Invalid criterion value, $Criterion, specified in quartet, \"$Label,$DataType,$Criterion,$Value\", using \"--hightlight\" option: Valid values: le, ge, or eq\n"; | |
1566 } | |
1567 if ($DataType =~ /^numeric$/i) { | |
1568 if (!IsFloat($Value)) { | |
1569 die "Error: Invalid criterion value, $Value, specified in quartet, \"$Label,$DataType,$Criterion,$Value\", using \"--hightlight\" option: Numeric value required for numeric data type\n"; | |
1570 } | |
1571 } | |
1572 if (exists($OptionsInfo{SpecifiedHighlightDataFieldLabelsMap}{$Label})) { | |
1573 die "Error: Invalid field label value, $Label, in quartet, \"$Label,$DataType,$Criterion,$Value\", using \"--hightlight\" option: Multiple occurences of label. \n"; | |
1574 } | |
1575 push @{$OptionsInfo{SpecifiedHighlightDataFieldLabels}}, $Label; | |
1576 $OptionsInfo{SpecifiedHighlightDataFieldLabelsMap}{$Label} = $Label; | |
1577 $OptionsInfo{SpecifiedHighlightDataFieldTypesMap}{$Label} = $DataType; | |
1578 $OptionsInfo{SpecifiedHighlightDataFieldCriteriaMap}{$Label} = $Criterion; | |
1579 $OptionsInfo{SpecifiedHighlightDataFieldValueMap}{$Label} = $Value; | |
1580 } | |
1581 } | |
1582 } | |
1583 | |
1584 # Set up default archive and code values for a specific applet... | |
1585 sub SetupDefaultAppletArchiveAndCode { | |
1586 my($ViewerType) = @_; | |
1587 my($Archive, $Code, $Nothing); | |
1588 | |
1589 STRVIEWERTYPE: { | |
1590 if ($OptionsInfo{StrViewerType} =~ /^JME$/i) { $Archive = "JME.jar"; $Code = "JME"; last STRVIEWERTYPE; } | |
1591 if ($OptionsInfo{StrViewerType} =~ /^Jmol$/i) {$Archive = "JmolApplet.jar"; $Code = "JmolApplet"; last STRVIEWERTYPE; } | |
1592 if ($OptionsInfo{StrViewerType} =~ /^MarvinView$/i) { $Archive = "marvin.jar"; $Code = "MView"; last STRVIEWERTYPE; } | |
1593 $Nothing = 1; | |
1594 } | |
1595 return ($Archive, $Code); | |
1596 } | |
1597 | |
1598 # Retrieve information about input SD files... | |
1599 sub RetrieveSDFilesInfo { | |
1600 my($SDFile, $FileDir, $FileName, $HTMLFile, $CSSFile, $HTMLRoot, $HTMLTitle, $FileExt, $Index, $TopHTMLDir); | |
1601 | |
1602 %SDFilesInfo = (); | |
1603 | |
1604 @{$SDFilesInfo{FileOkay}} = (); | |
1605 @{$SDFilesInfo{CmpdCount}} = (); | |
1606 @{$SDFilesInfo{SpecifiedDataFieldLabels}} = (); | |
1607 | |
1608 @{$SDFilesInfo{HTMLRoot}} = (); | |
1609 @{$SDFilesInfo{HTMLTitle}} = (); | |
1610 @{$SDFilesInfo{MultipleHTMLTables}} = (); | |
1611 | |
1612 @{$SDFilesInfo{TopHTMLDir}} = (); | |
1613 @{$SDFilesInfo{SubHTMLDir}} = (); | |
1614 @{$SDFilesInfo{SubMolDir}} = (); | |
1615 | |
1616 | |
1617 FILELIST: for $Index (0 .. $#SDFilesList) { | |
1618 $SDFile = $SDFilesList[$Index]; | |
1619 | |
1620 $SDFilesInfo{FileOkay}[$Index] = 0; | |
1621 $SDFilesInfo{CmpdCount}[$Index] = 0; | |
1622 $SDFilesInfo{HTMLRoot}[$Index] = ""; | |
1623 $SDFilesInfo{HTMLTitle}[$Index] = ""; | |
1624 $SDFilesInfo{MultipleHTMLTables}[$Index] = 0; | |
1625 $SDFilesInfo{TopHTMLDir}[$Index] = ""; | |
1626 $SDFilesInfo{SubHTMLDir}[$Index] = ""; | |
1627 $SDFilesInfo{SubMolDir}[$Index] = ""; | |
1628 | |
1629 @{$SDFilesInfo{SpecifiedDataFieldLabels}[$Index]} = (); | |
1630 | |
1631 if (!(-e $SDFile)) { | |
1632 warn "Warning: Ignoring file $SDFile: It doesn't exist\n"; | |
1633 next FILELIST; | |
1634 } | |
1635 if (!CheckFileType($SDFile, "sd sdf")) { | |
1636 warn "Warning: Ignoring file $SDFile: It's not a SD file\n"; | |
1637 next FILELIST; | |
1638 } | |
1639 ($FileDir, $FileName, $FileExt) = ParseFileName($SDFile); | |
1640 | |
1641 if (!open SDFILE, "$SDFile") { | |
1642 warn "Warning: Ignoring file $SDFile: Couldn't open it: $! \n"; | |
1643 next FILELIST; | |
1644 } | |
1645 # Count number of compounds and collect all possible data field labels... | |
1646 my($CmpdCount, $CmpdString, @DataFieldLabels, @CommonDataFieldLabels); | |
1647 $CmpdCount = 0; | |
1648 @DataFieldLabels = (); | |
1649 @CommonDataFieldLabels = (); | |
1650 if ($OptionsInfo{SpecifiedDataFields} =~ /^(All|Common)$/i ) { | |
1651 my($DataFieldLabelsRef, $CommonDataFieldLabelsRef); | |
1652 ($CmpdCount, $DataFieldLabelsRef, $CommonDataFieldLabelsRef) = GetAllAndCommonCmpdDataHeaderLabels(\*SDFILE); | |
1653 push @DataFieldLabels, @{$DataFieldLabelsRef}; | |
1654 push @CommonDataFieldLabels, @{$CommonDataFieldLabelsRef}; | |
1655 } | |
1656 else { | |
1657 while ($CmpdString = ReadCmpdString(\*SDFILE)) { | |
1658 $CmpdCount++; | |
1659 } | |
1660 } | |
1661 close SDFILE; | |
1662 | |
1663 $FileDir = ""; $FileName = ""; $FileExt = ""; | |
1664 ($FileDir, $FileName, $FileExt) = ParseFileName($SDFile); | |
1665 $HTMLRoot = $FileName; | |
1666 if ($Options{root} && (@SDFilesList == 1)) { | |
1667 my ($RootFileDir, $RootFileName, $RootFileExt) = ParseFileName($Options{root}); | |
1668 if ($RootFileName && $RootFileExt) { | |
1669 $HTMLRoot = $RootFileName; | |
1670 } | |
1671 else { | |
1672 $HTMLRoot = $Options{root}; | |
1673 } | |
1674 } | |
1675 $HTMLTitle = $HTMLRoot; | |
1676 if ($Options{title} && (@SDFilesList == 1)) { | |
1677 $HTMLTitle = $Options{title}; | |
1678 } | |
1679 $HTMLFile = lc($HTMLRoot) . "-html"; | |
1680 if (!$Options{overwrite}) { | |
1681 if (-d $HTMLFile) { | |
1682 warn "Warning: Ignoring file $SDFile: The directory $HTMLFile already exists\n"; | |
1683 next FILELIST; | |
1684 } | |
1685 } | |
1686 $SDFilesInfo{FileOkay}[$Index] = 1; | |
1687 $SDFilesInfo{CmpdCount}[$Index] = $CmpdCount; | |
1688 $SDFilesInfo{HTMLRoot}[$Index] = "$HTMLRoot"; | |
1689 $SDFilesInfo{HTMLTitle}[$Index] = "$HTMLTitle"; | |
1690 if ($OptionsInfo{MaxCmpdsPerTable} == 0 || $CmpdCount <= $OptionsInfo{MaxCmpdsPerTable}) { | |
1691 $SDFilesInfo{MultipleHTMLTables}[$Index] = 0; | |
1692 } | |
1693 else { | |
1694 $SDFilesInfo{MultipleHTMLTables}[$Index] = 1; | |
1695 } | |
1696 if ($OptionsInfo{SpecifiedDataFields} =~ /^All$/i ) { | |
1697 push @{$SDFilesInfo{SpecifiedDataFieldLabels}[$Index]}, @DataFieldLabels; | |
1698 } | |
1699 elsif ($OptionsInfo{SpecifiedDataFields} =~ /^Common$/i) { | |
1700 push @{$SDFilesInfo{SpecifiedDataFieldLabels}[$Index]}, @CommonDataFieldLabels; | |
1701 } | |
1702 else { | |
1703 push @{$SDFilesInfo{SpecifiedDataFieldLabels}[$Index]}, split(",", $OptionsInfo{SpecifiedDataFields}); | |
1704 } | |
1705 | |
1706 # Setup HTML data directories paths... | |
1707 $TopHTMLDir = lc($SDFilesInfo{HTMLRoot}[$Index]) . "-html"; | |
1708 $SDFilesInfo{TopHTMLDir}[$Index] = "$TopHTMLDir"; | |
1709 $SDFilesInfo{SubHTMLDir}[$Index] = "$TopHTMLDir\/html"; | |
1710 $SDFilesInfo{SubMolDir}[$Index] = "$TopHTMLDir\/mol"; | |
1711 } | |
1712 } | |
1713 | |
1714 # Setup information... | |
1715 sub SetupMultipleTablesAndMiscInfo { | |
1716 SetupMultipleTablesInfo(); | |
1717 SetupMiscInfo(); | |
1718 } | |
1719 | |
1720 # Setup navigation link information for multiple tables... | |
1721 sub SetupMultipleTablesInfo { | |
1722 my($Index, $LinesPerTable); | |
1723 | |
1724 $LinesPerTable = $OptionsInfo{MaxCmpdsPerTable}; | |
1725 | |
1726 @{$SDFilesInfo{TableCount}} = (); | |
1727 @{$SDFilesInfo{TableHTMLFiles}} = (); | |
1728 @{$SDFilesInfo{TableStartCmpdNum}} = (); | |
1729 @{$SDFilesInfo{TableEndCmpdNum}} = (); | |
1730 | |
1731 for $Index (0 .. $#SDFilesList) { | |
1732 $SDFilesInfo{TableCount}[$Index] = 1; | |
1733 @{$SDFilesInfo{TableHTMLFiles}[$Index]} = (); | |
1734 @{$SDFilesInfo{TableStartCmpdNum}[$Index]} = (); | |
1735 @{$SDFilesInfo{TableEndCmpdNum}[$Index]} = (); | |
1736 | |
1737 if ($SDFilesInfo{FileOkay}[$Index]) { | |
1738 if ($SDFilesInfo{MultipleHTMLTables}[$Index]) { | |
1739 my($TableIndex, $TotalLines, $TableCount, $TableStartLineNum, $TableEndLineNum, $Name); | |
1740 | |
1741 $TotalLines = $SDFilesInfo{CmpdCount}[$Index]; | |
1742 $TableCount = ($TotalLines % $LinesPerTable) ? (int($TotalLines/$LinesPerTable) + 1) : ($TotalLines/$LinesPerTable); | |
1743 $SDFilesInfo{TableCount}[$Index] = $TableCount; | |
1744 for $TableIndex (1 .. $TableCount) { | |
1745 $TableStartLineNum = ($TableIndex - 1) * $LinesPerTable + 1; | |
1746 $TableEndLineNum = ($TableIndex == $TableCount) ? $TotalLines : ($TableIndex * $LinesPerTable); | |
1747 push @{$SDFilesInfo{TableStartCmpdNum}[$Index]}, $TableStartLineNum; | |
1748 push @{$SDFilesInfo{TableEndCmpdNum}[$Index]}, $TableEndLineNum; | |
1749 | |
1750 # Setup HTML file names for all the tables... | |
1751 $Name = "Cmpd" . "$TableStartLineNum" . "To" . "$TableEndLineNum"; | |
1752 if ($TableIndex == 1) { | |
1753 $Name = ""; | |
1754 } | |
1755 $Name = $SDFilesInfo{HTMLRoot}[$Index] . $Name . ".html"; | |
1756 push @{$SDFilesInfo{TableHTMLFiles}[$Index]}, $Name; | |
1757 } | |
1758 #print "$SDFilesList[$Index]: $TableCount - @{$SDFilesInfo{TableStartCmpdNum}[$Index]} - @{$SDFilesInfo{TableEndCmpdNum}[$Index]} - @{$SDFilesInfo{TableHTMLFiles}[$Index]}\n"; | |
1759 } | |
1760 } | |
1761 } | |
1762 } | |
1763 | |
1764 # Setup HTML tags and other information... | |
1765 sub SetupMiscInfo { | |
1766 $SDFilesInfo{RowHeaderTags} = ""; | |
1767 $SDFilesInfo{RowEndTags} = ""; | |
1768 $SDFilesInfo{BgFilledOddRowHeaderTags} = ""; | |
1769 $SDFilesInfo{BgFilledEvenRowHeaderTags} = ""; | |
1770 $SDFilesInfo{TableRowHeaderTags} = ""; | |
1771 | |
1772 $SDFilesInfo{RowHeaderTags} = SetupHTMLTableRowHeader($OptionsInfo{RowHAlignment}, "", $OptionsInfo{RowVAlignment}); | |
1773 $SDFilesInfo{RowEndTags} = SetupHTMLTableRowEnd(); | |
1774 | |
1775 if ($OptionsInfo{ShadeRowsStatus}) { | |
1776 $SDFilesInfo{BgFilledOddRowHeaderTags} = SetupHTMLTableRowHeader($OptionsInfo{RowHAlignment}, $OptionsInfo{OddRowsShadeColor}, $OptionsInfo{RowVAlignment}); | |
1777 $SDFilesInfo{BgFilledEvenRowHeaderTags} = SetupHTMLTableRowHeader($OptionsInfo{RowHAlignment}, $OptionsInfo{EvenRowsShadeColor}, $OptionsInfo{RowVAlignment}); | |
1778 } | |
1779 | |
1780 $SDFilesInfo{TableRowHeaderTags} = SetupHTMLTableRowHeader($OptionsInfo{TableHeaderRowHAlignment}, $OptionsInfo{TableHeaderRowColor}, $OptionsInfo{TableHeaderRowVAlignment}); | |
1781 | |
1782 $SDFilesInfo{MolEndTag} = "M END"; | |
1783 $SDFilesInfo{White} = qq(#ffffff); | |
1784 } | |
1785 | |
1786 # Setup various data directories to hold HTML and other related files... | |
1787 sub SetupDataDirs { | |
1788 my($Index) = @_; | |
1789 my($TopHTMLDir, $SubHTMLDir, $SubMolDir, $CreateTopHTMLDir, $CreateSubHTMLDir, $CreateSubMolDir); | |
1790 | |
1791 $TopHTMLDir = $SDFilesInfo{TopHTMLDir}[$Index]; | |
1792 $SubHTMLDir = $SDFilesInfo{SubHTMLDir}[$Index]; | |
1793 $SubMolDir = $SDFilesInfo{SubMolDir}[$Index]; | |
1794 | |
1795 # Clean up existing directories... | |
1796 if (-d $TopHTMLDir) { | |
1797 unlink "<$TopHTMLDir/*.html>"; | |
1798 unlink "<$TopHTMLDir/*.css>"; | |
1799 } | |
1800 if (-d $SubHTMLDir) { | |
1801 unlink "<$SubHTMLDir/*.html>"; | |
1802 } | |
1803 if (-d $SubMolDir) { | |
1804 unlink "<$SubMolDir/*.mol>"; | |
1805 } | |
1806 | |
1807 # What directories need to be created... | |
1808 $CreateTopHTMLDir = (-d $TopHTMLDir) ? 0 : 1; | |
1809 $CreateSubHTMLDir = (-d $SubHTMLDir) ? 0 : 1; | |
1810 $CreateSubMolDir = 0; | |
1811 if ($OptionsInfo{StrViewerType} =~ /^(Jmol|Chime|Chem3DActiveX|ChemDrawActiveX|ChemDrawPlugIn|ViewerActiveX)$/i) { | |
1812 $CreateSubMolDir = (-d $SubMolDir) ? 0 : 1; | |
1813 } | |
1814 | |
1815 # Create appropriate directories... | |
1816 if ($CreateTopHTMLDir) { | |
1817 mkdir $TopHTMLDir or die "Couldn't mkdir $TopHTMLDir: $! \n"; | |
1818 } | |
1819 if ($CreateSubHTMLDir) { | |
1820 mkdir $SubHTMLDir or die "Error: Couldn't mkdir $SubHTMLDir: $! \n"; | |
1821 } | |
1822 else { | |
1823 unlink <$SubHTMLDir/*.html>; | |
1824 } | |
1825 if ($CreateSubMolDir) { | |
1826 mkdir $SubMolDir or die "Error: Couldn't mkdir $SubMolDir: $! \n"; | |
1827 } | |
1828 return ($TopHTMLDir, $SubHTMLDir, $SubMolDir); | |
1829 } | |
1830 | |
1831 # Setup script usage and retrieve command line arguments specified using various options... | |
1832 sub SetupScriptUsage { | |
1833 | |
1834 # Retrieve all the options... | |
1835 %Options = (); | |
1836 | |
1837 $Options{mode} = "shade"; | |
1838 $Options{highlightstyle} = "background"; | |
1839 | |
1840 $Options{cellpadding} = 2; | |
1841 $Options{cellspacing} = 1; | |
1842 | |
1843 $Options{displaylinks} = "both"; | |
1844 $Options{displaylinksinfo} = "both"; | |
1845 $Options{stylesheet} = "new"; | |
1846 | |
1847 $Options{structure} = "display"; | |
1848 $Options{strlinktype} = "href"; | |
1849 $Options{strlinkmode} = "plain"; | |
1850 $Options{strlinknavigation} = "yes"; | |
1851 $Options{strlinktitledisplay} = "no"; | |
1852 | |
1853 $Options{strviewertype} = "Jmol"; | |
1854 $Options{strviewerembed} = "direct"; | |
1855 | |
1856 $Options{titledisplay} = "yes"; | |
1857 | |
1858 if (!GetOptions(\%Options, "align|a=s", "border|b=i", "cellpadding=i", "cellspacing=i", "cmpddatafield|c=s", "datafields=s", "footer=s", "displaylinks|d=s", "displaylinksinfo=s", "help|h", "headeralign=s", "headercolor=s", "highlight=s", "highlightcolor=s", "highlightstyle=s", "mode|m=s", "numcmpds|n=i", "overwrite|o", "root|r=s", "shadecolor=s", "stylesheet=s", "stylesheetname=s", "structure|s=s", "strlinkmode=s", "strlinknavigation=s", "strlinkshadecolor=s", "strlinktitle=s", "strlinktitledisplay=s", "strlinktype=s", "strviewertype=s", "strviewerconfig=s", "strviewerparams=s", "strviewerembed=s", "strviewerjsfile=s", "strtablesize=s", "title|t=s", "titledisplay=s", "workingdir|w=s")) { | |
1859 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"; | |
1860 } | |
1861 | |
1862 if ($Options{workingdir}) { | |
1863 if (! -d $Options{workingdir}) { | |
1864 die "Error: The value specified, $Options{workingdir}, for option \"-w --workingdir\" is not a directory name.\n"; | |
1865 } | |
1866 chdir $Options{workingdir} or die "Error: Couldn't chdir $Options{workingdir}: $! \n"; | |
1867 } | |
1868 if ($Options{displaylinks} !~ /^(top|bottom|both)$/i) { | |
1869 die "Error: The value specified, $Options{displaylinks}, for option \"-d --displaylinks\" is not valid. Allowed values: top, bottom, or both\n"; | |
1870 } | |
1871 if ($Options{displaylinksinfo} !~ /^(compound|table|both)$/i) { | |
1872 die "Error: The value specified, $Options{displaylinksinfo}, for option \"--displaylinksinfo\" is not valid. Allowed values: compound, table, or both\n"; | |
1873 } | |
1874 if ($Options{highlightstyle} !~ /^(background|text)$/i) { | |
1875 die "Error: The value specified, $Options{highlightstyle}, for option \"--highlightstyle\" is not valid. Allowed values: background or text\n"; | |
1876 } | |
1877 if ($Options{mode} !~ /^(plain|shade|highlight|shadedhighlight|structuresonly|shadedstructuresonly)$/i) { | |
1878 die "Error: The value specified, $Options{mode}, for option \"-m --mode\" is not valid. Allowed values: plain, shade, hightlight, shadedhighlight, structuresonly, or shadedstructuresonly\n"; | |
1879 } | |
1880 if ($Options{stylesheet} !~ /^(old|new|none)$/i) { | |
1881 die "Error: The value specified, $Options{stylesheet}, for option \"-s --stylesheet\" is not valid. Allowed values: old, new, or none\n"; | |
1882 } | |
1883 if ($Options{structure} !~ /^(display|link)$/i) { | |
1884 die "Error: The value specified, $Options{structure}, for option \"-s --structure\" is not valid. Allowed values: display or link\n"; | |
1885 } | |
1886 if ($Options{strlinkmode} !~ /^(plain|shade)$/i) { | |
1887 die "Error: The value specified, $Options{strlinkmode}, for option \"--strlinkmode\" is not valid. Allowed values: plain or shade\n"; | |
1888 } | |
1889 if ($Options{strlinktype} !~ /^(href|button)$/i) { | |
1890 die "Error: The value specified, $Options{strlinktype}, for option \"--strlinktype\" is not valid. Allowed values: href or button\n"; | |
1891 } | |
1892 if ($Options{strlinknavigation} !~ /^(yes|no)$/i) { | |
1893 die "Error: The value specified, $Options{strlinknavigation}, for option \"--strlinknavigation\" is not valid. Allowed values: yes or no\n"; | |
1894 } | |
1895 if ($Options{strlinktitledisplay} !~ /^(yes|no)$/i) { | |
1896 die "Error: The value specified, $Options{strlinktitledisplay}, for option \"--strlinktitledisplay\" is not valid. Allowed values: yes or no\n"; | |
1897 } | |
1898 if ($Options{strviewertype} !~ /^(JME|Jmol|Chime|MarvinView|ChemDrawPlugIn|Chem3DActiveX|ChemDrawActiveX|ViewerActiveX)$/i) { | |
1899 die "Error: The value specified, $Options{strviewertype}, for option \"--strviewertype\" is not valid. Allowed values: Chem3DActiveX, ChemDrawActiveX, ChemDrawPlugIn, Chime, JME, Jmol, MarvinView, or ViewerActiveX.\n"; | |
1900 } | |
1901 if ($Options{strviewerembed} !~ /^(direct|javascript)$/i) { | |
1902 die "Error: The value specified, $Options{strviewerembed}, for option \"--strviewerembed\" is not valid. Allowed values: direct or javascript \n"; | |
1903 } | |
1904 if (exists $Options{numcmpds} && $Options{numcmpds} < 0) { | |
1905 die "Error: The value specified, $Options{numcmpds}, for option \"-n --numcmpds\" is not valid. Allowed values: >= 0 \n"; | |
1906 } | |
1907 if ($Options{titledisplay} !~ /^(yes|no)$/i) { | |
1908 die "Error: The value specified, $Options{titledisplay}, for option \"--titledisplay\" is not valid. Allowed values: yes or no\n"; | |
1909 } | |
1910 if (exists($Options{border})) { | |
1911 if ($Options{border} < 0) { | |
1912 die "Error: The value specified, $Options{border}, for option \"--border\" is not valid. Allowed values: >= 0 \n"; | |
1913 } | |
1914 } | |
1915 if ($Options{cellpadding} < 0) { | |
1916 die "Error: The value specified, $Options{cellpadding}, for option \"--cellpadding\" is not valid. Allowed values: >= 0 \n"; | |
1917 } | |
1918 if ($Options{cellspacing} < 0) { | |
1919 die "Error: The value specified, $Options{cellspacing}, for option \"--cellspacing\" is not valid. Allowed values: >= 0 \n"; | |
1920 } | |
1921 } | |
1922 | |
1923 __END__ | |
1924 | |
1925 =head1 NAME | |
1926 | |
1927 SDFilesToHTML.pl - Generate HTML table file(s) from SDFile(s) | |
1928 | |
1929 =head1 SYNOPSIS | |
1930 | |
1931 SDFilesToHTML.pl SDFiles(s)... | |
1932 | |
1933 SDFilesToHTML.pl [B<-a, --align> left | center | right,[top | middle | bottom]] [B<-b, --border> borderwidth] [B<--cellpadding> padding] | |
1934 [B<--cellspacing> spacing] [B<--cmpddatafield> "fieldlabel,[label,position,alignment]"] [B<--datafields> "fieldlabel,[fieldlabel]..." | Common | All] | |
1935 [B<--footer> string] [B<-d, --displaylinks> top | bottom | both] [B<--displaylinksinfo> compound | table | both] [B<-h, --help>] | |
1936 [B<--headeralign> left | center | right,[top | middle | bottom]] [B<--headercolor> "#RRGGBB"] | |
1937 [B<--highlight> "fieldlabel,datatype,criterion,value,[fieldlabel,datatype,criterion,value,...]"] | |
1938 [B<--highlightcolor> "#RRGGBB,#RRGGBB"] [B<--highlightstyle> text | background] | |
1939 [B<-m, --mode> plain | shade | highlight | shadedhighlight | structuresonly | shadedstructuresonly] | |
1940 [B<-n, --numcmpds> number] [B<-o, --overwrite>] [B<-r, --root> rootname] [B<-s, --structure> display | link] | |
1941 [B<--strlinkmode> plain | shaded] [B<--strlinknavigation> yes | no] | |
1942 [B<--strlinkshadecolor> "#RRGGBB"] [B<--strlinktitle> string] [B<--strlinktitledisplay> yes | no] [B<--strlinktype> href | button] | |
1943 [B<--strviewertype> Chem3DActiveX | ChemDrawActiveX | ChemDrawPlugIn | Chime | JME | Jmol | MarvinView | ViewerActiveX] | |
1944 [B<--strviewerconfig> codebase[,archive,code]] [B<--strviewerparams> "name=value [name=value ...]"] | |
1945 [B<--strviewerembed> direct | javascript] [B<--strviewerjsfile> javascriptfilename] | |
1946 [B<--strtablesize> "numrows,numcols"] [B<--stylesheet> old | new | none] | |
1947 [B<--stylesheetname> filename] [B<--shadecolor> "#RRGGBB,#RRGGBB"] [B<-t, --title> string] [B<--titledisplay> yes | no] | |
1948 [B<-w, --workingdir> dirname] SDFiles(s)... | |
1949 | |
1950 =head1 DESCRIPTION | |
1951 | |
1952 Generate HTML file(s) from I<SDFile(s)>. The HTML file(s) contain data tables | |
1953 and appropriate navigational links to view other tables; navigational links are also | |
1954 provided on compound HTML pages. These files can be generated for local viewing or | |
1955 deployment on a web server. A variety of options are provided to control style and | |
1956 appearance of tables. And for viewing structures, options are available to use any one of | |
1957 these viewers: Chem3DActiveX, ChemDrawActiveX, ChemDrawPlugIn, Chime, Jmol, JME, | |
1958 MarvinView, or ViewerActiveX. Jmol is the default structure viewer and it is also distributed | |
1959 along with this package; however, to use any other supported viewers, make sure it's available | |
1960 in your environment. | |
1961 | |
1962 Multiple I<SDFile(s)> names are separated by space. The valid file extensions are | |
1963 I<.sdf> and I<.sd>. All other file names are ignored. All the SD files in a current directory can | |
1964 be specified either by I<*.sdf> or the current directory name. | |
1965 | |
1966 =head1 OPTIONS | |
1967 | |
1968 =over 4 | |
1969 | |
1970 =item B<-a, --align> I<left | center | right,[top | middle | bottom]> | |
1971 | |
1972 Horizontal and vertical alignment for table rows except for header row which is specified | |
1973 using B<--headeralign> option. Possible horizontal alignment values: I<left, center, or right>. | |
1974 Possible vertical alignment values: I<top, middle, or bottom>. | |
1975 | |
1976 Default values: I<left,middle> | |
1977 | |
1978 =item B<-b, --border> I<borderwidth> | |
1979 | |
1980 Table border width. Default value: 1 for I<plain> and I<highlight> mode; 0 for I<shade> | |
1981 and I<shadedhightlight> mode. Zero indicates no border. | |
1982 | |
1983 =item B<--cellpadding> I<padding> | |
1984 | |
1985 Table cell padding. Default value: I<2>. | |
1986 | |
1987 =item B<--cellspacing> I<spacing> | |
1988 | |
1989 Table cell spacing. Default value: I<1>. | |
1990 | |
1991 =item B<--cmpddatafield> I<fieldlabel,[label,position,alignment]> | |
1992 | |
1993 This value is mode specific. It indicates data field value to be displayed with the structure along | |
1994 with its label, position and alignment during I<structuresonly | shadedstructuresonly> value of B<-m, --mode> | |
1995 option. Possible values: feldlabel - valid data field label; label - yes or no; position - I<top or bottom>; alignment | |
1996 - I<left, center, or right>. Default: I<none,no,bottom,center>. Example: | |
1997 | |
1998 MolWt,no,bottom,middle | |
1999 | |
2000 B<--cmpddatafield> option value is also linked to compound summary page. | |
2001 | |
2002 =item B<--datafields> I<"fieldlabel,[fieldlabel]..." | Common | All> | |
2003 | |
2004 Data fields to display in HTML table(s). Possible values: list of comma separated data field | |
2005 labels, data fields common to all records, or all data fields. Default value: I<All>. | |
2006 Examples: | |
2007 | |
2008 ALogP,MolWeight,EC50 | |
2009 "MolWeight,PSA" | |
2010 | |
2011 =item B<--footer> I<string> | |
2012 | |
2013 Text string to be included at bottom of each HTML file. Default: none. | |
2014 | |
2015 =item B<-d --displaylinks> I<top | bottom | both> | |
2016 | |
2017 Specify where to display navigation links in each HTML file for accessing all other HTML | |
2018 files. Possible values: I<top, bottom, or both>. Default: I<both>. This option is | |
2019 only valid during multiple HTML files generation for an input file. | |
2020 | |
2021 =item B<--displaylinksinfo> I<compound | table | both> | |
2022 | |
2023 Control display of additional information along with navigational links: Showing compound | |
2024 n of m is displyed for compound and showing table n of m for table. Possible values: I<compound | |
2025 | table | both>. Default: I<both>. This option is only valid during multiple HTML files generation. | |
2026 | |
2027 =item B<-h, --help> | |
2028 | |
2029 Print this help message. | |
2030 | |
2031 =item B<--headeralign> I<left | center | right,[top | middle | bottom> | |
2032 | |
2033 Horizontal and vertical alignment for table header rows. Possible horizontal alignment | |
2034 values: I<left, center, or right>. Possible vertical alignment values: I<top, middle, or bottom>. | |
2035 | |
2036 Default values: I<center,middle> | |
2037 | |
2038 =item B<--headercolor> I<#RRGGBB> | |
2039 | |
2040 Color used to fill background of table header row containing column labels | |
2041 represented as a hexadecimal string. Default value: None for B<-m, --mode> option | |
2042 value of I<plain> and I<#ccccff>, light blue, for others. | |
2043 | |
2044 =item B<--highlight> I<"fieldlabel,datatype,criterion,value,[fieldlabel,datatype,criterion,value,...]"> | |
2045 | |
2046 Highlighting methodology used to highlight various SDFile(s) data field values in | |
2047 HTML file(s). Same set of quartets values are applied to all SDFile(s). | |
2048 | |
2049 Input text contains these quartets: I<fieldlabel,datatype,criterion,value,...>. | |
2050 Possible datatype values: I<numeric or text>. Possible criterion values: I<le, ge, or eq>. | |
2051 Examples: | |
2052 | |
2053 "MolWt,numeric,le,450" | |
2054 "MolWt,numeric,le,450,LogP,numeric,le,5" | |
2055 Name,text,eq,Aspirin | |
2056 | |
2057 =item B<--highlightcolor> I<"#RRGGBB,#RRGGBB"> | |
2058 | |
2059 Colors used to highlight column values during I<highlight> and I<shadedhightlight> | |
2060 mode represented as hexadecimal strings. | |
2061 | |
2062 For B<--highlighstyle> option values of I<text> and I<background>, these colors represent | |
2063 text or background colors respectively. For a specific column, first color string is used for | |
2064 values which meet criterion indicated by B<--highlight> option; the second color is used for | |
2065 rest of the values. | |
2066 | |
2067 Default values for I<background> B<--highlightstyle>: I<"#0fff0f,#ff0f0f">. And default values for | |
2068 I<text> B<--highlightstyle>: I<"#0fbb0f,#ff0f0f">. Hexadecimal strings for both B<--highlightstyle> | |
2069 colors correspond to I<reddish> and I<greenish>. | |
2070 | |
2071 =item B<--highlightstyle> I<text | background> | |
2072 | |
2073 This value is mode specific. It indicates highlight style used to differentiate column | |
2074 values which meet a specified criterion in B<--highlight> option. Possible values: I<text or | |
2075 background>. Default: I<background>. | |
2076 | |
2077 =item B<-m, --mode> I<plain | shade | highlight | shadedhighlight | structuresonly | shadedstructuresonly> | |
2078 | |
2079 Specify how to generate HTML table(s): plain tables with line borders, background of | |
2080 alternate rows filled with a specified color, column values highlighted using a specified | |
2081 criteria, combination of previous two styles, tables containing only structures, or tables | |
2082 containing only structures with filled background of alternate rows. | |
2083 | |
2084 Possible values: I<plain, shade, highlight, shadedhighlight, structuresonly, or | |
2085 shadedstructuresonly>. Default: I<shade>. | |
2086 | |
2087 =item B<-n, --numcmpds> I<number> | |
2088 | |
2089 Maximum number of compounds per table. Default value: I<15> for tables with structures and | |
2090 I<50> for tables with links to structures. Use 0 to put all compounds into one table. For SDFile(s) | |
2091 with more than maximum number of specified compounds, multiple HTML tables, with appropriate | |
2092 navigation links, are created. | |
2093 | |
2094 =item B<-o, --overwrite> | |
2095 | |
2096 Overwrite existing files. | |
2097 | |
2098 =item B<-r, --root> I<rootname> | |
2099 | |
2100 New file or directory name is generated using the root: <root>.html or <root>-html. | |
2101 Default new file name: <InitialSDFileName>.html. Default directory name: | |
2102 <InitialSDFileName>-html. | |
2103 | |
2104 For SDFile(s) with more than maximum number of specified compounds per table, | |
2105 this directory tree is generated using <Name> where <Name> corresponds to <root> | |
2106 or <InitialSDFileName>: Top dir - <Name>-html; Sub dirs - html and mols. <Top dir> contains | |
2107 <Name>.html and <Name>.css files and <sub dir> html conatins various | |
2108 <Name>Lines<Start>To<End>.html files; <sub dir> mols is created as needed and contains | |
2109 MOL files. | |
2110 | |
2111 This option is ignored for multiple input files. | |
2112 | |
2113 =item B<-s, --structure> I<display | link> | |
2114 | |
2115 Structure display control: display structures in a table column or set up a link for each | |
2116 structure which opens up a new HTML page containing structure and other appropriate | |
2117 information. Possible values: I<display or link>. Default value: I<display> | |
2118 | |
2119 =item B<--strlinkmode> I<plain | shaded> | |
2120 | |
2121 Specify how to display compound HTML page: plain or background of data field | |
2122 field labels is filled with a specified color. Possible values: I<plain or shad>. | |
2123 Default value: I<plane>. | |
2124 | |
2125 Structure viewer background color is white. Use B<--strviewerparams> option to change | |
2126 default behavior of structure viewers. | |
2127 | |
2128 =item B<--strlinknavigation> I<yes | no> | |
2129 | |
2130 Display navigation links to other compounds in compound HTML page. Possible values: | |
2131 I<yes or no>. Default value: I<yes>. | |
2132 | |
2133 =item B<--strlinkshadecolor> I<"#RRGGBB"> | |
2134 | |
2135 This value is B<--strlinkmode> specific. For I<shade> value of B<--strlinkmode> option, it | |
2136 represents colors used to fill background of data field labels. | |
2137 | |
2138 Default value: I<"#e0e9eb"> - it's a very light blue color. | |
2139 | |
2140 =item B<--strlinktitle> I<string> | |
2141 | |
2142 Title for compound HTML page. Default value: I<Compound Summary>. | |
2143 | |
2144 =item B<--strlinktitledisplay> I<yes | no> | |
2145 | |
2146 Display title for compound HTML page. Possible values: I<yes or no>. Default value: I<no>. | |
2147 | |
2148 =item B<--strlinktype> I<href | button> | |
2149 | |
2150 Type of structure link. Possible values: I<href or button>. Default: I<href>. | |
2151 | |
2152 =item B<--strviewertype> I<Chem3DActiveX | ChemDrawActiveX | ChemDrawPlugIn | Chime | JME | Jmol | MarvinView | ViewerActiveX> | |
2153 | |
2154 Structure viewer supported for viewing structures. Possible values: I<Chem3DActiveX, | |
2155 ChemDrawActiveX, ChemDrawPlugIn, Chime, JME, Jmol, MarvinView, or ViewerActiveX>. | |
2156 Default value: I<Jmol>. | |
2157 | |
2158 Assuming you have access to one of these viewers on your machine, you are all set | |
2159 to use this script. Otherwise, visit one of these web sites to download and install | |
2160 your favorite viewer: | |
2161 | |
2162 accelrys.com: Viewer ActiveX 5.0 | |
2163 cambridgesoft.com: Chem3DActiveX 8.0, ChemDrawActiveX 8.0, | |
2164 ChemDrawPlugIn | |
2165 chemaxon.com: MarvinView applet | |
2166 mdli.com: Chime plug-in | |
2167 jmol.sourceforge.net: JmolApplet V10 | |
2168 molinspiration.com: JME applet | |
2169 | |
2170 The default viewer, JmolApplet V10, is distributed with MayaChemTools package. | |
2171 Earlier versions of JmolApplet are not supported: due to applet security issues related to | |
2172 reading files, this script uses in-line loading of MOL files and this option doesn't exist in | |
2173 earlier version of JmolApplet. | |
2174 | |
2175 =item B<--strviewerconfig> I<codebase[,archive,code]> | |
2176 | |
2177 Configuration information for structure viewers. This option is only valid for structure | |
2178 viewers which are applets: Jmol, JME and MarvinView. For other viewer types available via | |
2179 B<--strviewertype> option - MDL Chime, ChemDrawActiveX, ChemDrawPlugIn, and | |
2180 Chem3DActiveX - this value is ignored. | |
2181 | |
2182 Input text format: I<codebase[,archive,code]>. For an applet viewer, I<codebase> must be | |
2183 specified; I<archive> and I<code> values are optional. Here are default I<archive> and | |
2184 I<codebase> values for various applets: Jmol - JmolApplet, JmolApplet.jar; JME - JME, JME.jar; | |
2185 MarvinView: MView, marvin.jar | |
2186 | |
2187 For local deployment of HTML files, I<codebase> must correspond to a complete path to | |
2188 the local directory containing appropriate I<archive> file and the complete path is converted | |
2189 into appropriate relative path during generation of HTML files. | |
2190 | |
2191 By default, I<codebase> value of <this script dir>/../lib/Jmol is used for I<Jmol> applet viewer, and | |
2192 HTML file(s) are generated for local deployment; however, you can specify any supported | |
2193 applet viewer and generate HTML file(s) for deploying on a web server. | |
2194 | |
2195 For deploying the HTML file(s) on a web server, specify a valid I<codebase> directory name | |
2196 relative to <WWWRootDir>. Example when JME archive file, JME.jar, is available in | |
2197 I</jme> directory on the web server: | |
2198 | |
2199 /jme | |
2200 | |
2201 For local deployment of HTML file(s), specify a complete I<codebase> directory name. | |
2202 Example when JmolApplet archive file, JmolApplet.jar, is present in <JMOLROOT> directory: | |
2203 | |
2204 <JMOLROOT> | |
2205 | |
2206 In addition to I<codebase>, you can also specify I<archive> file name. Example for web | |
2207 deployment: | |
2208 | |
2209 "/jme,JME.jar" | |
2210 "/jme" | |
2211 | |
2212 Example for local deployment: | |
2213 | |
2214 "<JMEROOT>,JME.jar" | |
2215 "<JMEROOT>" | |
2216 | |
2217 =item B<--strviewerparams> I<"name=value [name=value ...]"> | |
2218 | |
2219 Parameters name and value pairs for structure viewers. These name and value pairs | |
2220 are used to control the appearance and behavior of structure viewers in tables and | |
2221 compound HTML page during I<link> value for B<-s --structure> option. | |
2222 | |
2223 The parameter names, along with their values, are just passed to each structure viewer | |
2224 in appropriate format without checking their validity. Check documentation of appropriate | |
2225 structure viewers to figure out valid parameter names. | |
2226 | |
2227 Input text format: I<name=value name=value ...> Example: | |
2228 | |
2229 "width=250 height=170" | |
2230 | |
2231 Default for all structure viewers: I<width=250 height=170> for displaying structures in | |
2232 tables, and I<strlinkwidth=500 strlinkheight=295> for compound HTML page during I<link> value | |
2233 for B<-s --structure> option. | |
2234 | |
2235 Default background color for all structure viewers: same as B<--shadecolor> value for | |
2236 displaying structures in tables and I<strlinkbgcolor=#ffffff> for compound HTML page; | |
2237 however, explicit specification of background color in this option overrides default value. | |
2238 To use black background for structures in tables and compound HTML page, specify I<bgcolor=#000000> | |
2239 and I<strlinkbgcolor=#000000> respectively. Keep this in mind: Some structure viewers | |
2240 don't appear to support background color parameter. | |
2241 | |
2242 Additional structure viewer specific default values: | |
2243 | |
2244 Chem3DActiveX: "displaytype=Ball&Stick rotationbars=false | |
2245 moviecontroller=false" | |
2246 ChemDrawActiveX: "ViewOnly=1 ShrinkToFit=1 ShowToolsWhenVisible=1" | |
2247 ChemDrawPlugIn: "type=chemical/x-mdl-molfile ViewOnly=1 | |
2248 ShrinkToFit=1 ShowToolsWhenVisible=1" | |
2249 Chime: "display2d=true" | |
2250 JME: "options=depict" | |
2251 Jmol: "progressbar=true progresscolor=#0000ff boxbgcolor=#000000 | |
2252 boxfgcolor=#ffffff script="select *; set frank off; | |
2253 wireframe on; spacefill off"" | |
2254 MarvinView: "navmode=zoom" | |
2255 ViewerActiveX:"Mouse=4 Convert2Dto3D=0" | |
2256 | |
2257 Try overriding default values or specify additional valid parameter/value pairs to get desired | |
2258 results. Example for using CPK rendering scheme with Jmol viewer: | |
2259 | |
2260 "script="select *; set frank off; wireframe off; spacefill on"" | |
2261 | |
2262 =item B<--strviewerembed> I<direct | javascript> | |
2263 | |
2264 Specify how to embed structure viewers in HTML pages. Possible values: I<direct> - use applet/object | |
2265 tags to emded structure viewer; I<javascript> - use vendor supplied java scripts. Default value: | |
2266 direct. | |
2267 | |
2268 This option only applies to these vieweres: I<Chem3DActiveX, ChemDrawActiveX, ChemDrawPlugIn, | |
2269 Jmol, and MarvinView>. | |
2270 | |
2271 For marvin.js to work correctly on your browser, you may need to set I<marvin_jvm=builtin> or | |
2272 I<marvin_jvm=plugin> using B<--strviewerparams> option. Additionally, MarvinView - at least | |
2273 in my hands - also has problems during usage of JavaScript for local deployment; however, it | |
2274 does work via web server. | |
2275 | |
2276 As far as I can tell, Jmol.js supplied with Jmol10 release has these issues: jmolSetAppletColor | |
2277 doesn't support background color; jmolInitialize disables relative specification of codebase | |
2278 directroy which works okay. So, use Jmol.js supplied with MayaChemTools. | |
2279 | |
2280 =item B<--strviewerjsfile> I<java script file name> | |
2281 | |
2282 Name of vendor supplied java script file. Default values: Chem3DActiveX: I<chem3d.js>; ChemDrawActiveX, | |
2283 and ChemDrawPlugIn: I<chemdraw.js>; Jmol: I<Jmol.js>, MarvinView: I<marvin.js>. | |
2284 | |
2285 Directory location for these files is specified via I<codebase> value of B<--strviewerconfig> option. | |
2286 | |
2287 =item B<--strtablesize> I<"numrows,numcols"> | |
2288 | |
2289 This option is only valid for I<structuresonly> and I<shadedstructuresonly> modes. And it indicates | |
2290 maximum number of rows and columns per structure table. Default value:I<6,4>. | |
2291 | |
2292 =item B<--stylesheet> I<old | new | none> | |
2293 | |
2294 Controls usage of stylesheet for newly generated HTML file(s). Possible values: I<old, | |
2295 new, or none>. Default value: I<new>. | |
2296 | |
2297 Stylesheet file contains various properties which control appearance of HTML pages: | |
2298 type, size, and color of fonts; background color; and so on. | |
2299 | |
2300 For I<old> value, an existing stylesheet file specified by B<--stylesheetname> option is | |
2301 used for each HTML file; no new stylesheet file is created. This option is quite handy | |
2302 for deploying HTML file(s) on a web server: assuming you specify a valid stylesheet | |
2303 file location relative to your WWWRoot, a reference to this stylesheet is added to each | |
2304 HTML file. For local deployment of HTML file(s), a complete path to a local stylesheet | |
2305 is fine as well. | |
2306 | |
2307 For I<create> value, a new stylesheet is created and reference to this local stylesheet | |
2308 is added to each HTML file. Use option B<--stylesheetname> to specify name. | |
2309 | |
2310 For I<none> value, stylesheet usage is completely ignored. | |
2311 | |
2312 =item B<--stylesheetname> I<filename> | |
2313 | |
2314 Stylesheet file name to be used in conjunction with B<-s --stylesheet> option. It is only | |
2315 valid for I<old> value of B<-s --stylesheet> option. Specify a valid stylesheet file location | |
2316 relative to your WWWRoot and a reference to this stylesheet is added to each HTML | |
2317 file. Example: I<"/stylesheets/MyStyleSheet.css">. Or a complete path name to a local | |
2318 stylesheet file. | |
2319 | |
2320 For I<create> value of B<-s --stylesheet> option, a new stylesheet file is created using | |
2321 B<-r --root> option. And value of B<--stylesheetname> is simply ignored. | |
2322 | |
2323 =item B<--shadecolor> I<"#RRGGBB,#RRGGBB"> | |
2324 | |
2325 Colors used to fill background of rows during I<shade> and I<shadedhightlight> mode | |
2326 represented as a pair of hexadecimal string; the first and second color values | |
2327 are used for odd and even number rows respectively. | |
2328 | |
2329 Default value: I<"#ffffff,#e0e9eb"> - it's white and very light blue for odd and even number rows. | |
2330 | |
2331 =item B<-t, --title> I<string> | |
2332 | |
2333 Title for HTML table(s). Default value: I<SDFileName>. This option is ignored for | |
2334 multiple input files. And B<-r --root> option is used to generate appropriate | |
2335 titles. | |
2336 | |
2337 =item B<--titledisplay> I<yes | no> | |
2338 | |
2339 Display title for HTML table(s). Possible values: I<yes or no>. Default value: I<yes>. | |
2340 | |
2341 =item B<-w, --workingdir> I<dirname> | |
2342 | |
2343 Location of working directory. Default: current directory. | |
2344 | |
2345 =back | |
2346 | |
2347 =head1 EXAMPLES | |
2348 | |
2349 HTML table file(s), containing structures, can be used in two different ways: browsing on a | |
2350 local machine or deployment via a web server. By default, HTML file(s) are created for viewing | |
2351 on a local machine using Jmol viewer through a browser; however, you can specify any | |
2352 supported applet viewer and generate HTML file(s) for deploying on a web server. | |
2353 | |
2354 First two sets of examples show generation of HTML file(s) using different applet viewers | |
2355 and a variety of options for local browsing; last set deals with web deployment. | |
2356 | |
2357 B<Local deployment: Usage of default JMol viewer distributed with MayaChemTools:> | |
2358 | |
2359 To generate HTML tables with structure display using JMol viewer, rows background filled | |
2360 with white and light blue colors, navigation links on top and botton of each page, type: | |
2361 | |
2362 % SDFilesToHTML.pl -o Sample1.sdf | |
2363 | |
2364 To generate HTML tables with structure display using JMol viewer, rows background filled | |
2365 with white and light blue colors, navigation links on top and botton of each page, and | |
2366 only containing MolWeight and Mol_ID SD data fields, type: | |
2367 | |
2368 % SDFilesToHTML.pl --datafields "MolWeight,Mol_ID" -o Sample1.sdf | |
2369 | |
2370 To generate HTML tables with CPK structure display using JMol viewer, rows | |
2371 background filled with white and light blue colors, navigation links on top and botton of | |
2372 each page, type: | |
2373 | |
2374 % SDFilesToHTML.pl --strviewerparams "script=\"select *; set frank off; | |
2375 wireframe off; spacefill on\"" -o Sample1.sdf | |
2376 | |
2377 To generate HTML tables with structure display using JMol viewer and black background, rows | |
2378 background filled with light golden and greyish colors, navigation links on top and botton of | |
2379 each page, 10 rows in each table, greyish header row color, and cell spacing of 1, type: | |
2380 | |
2381 % SDFilesToHTML.pl -o -n 10 --headeralign "center" --headercolor | |
2382 "#a1a1a1" --shadecolor "#fafad2,#d1d1d1" --cellspacing 1 | |
2383 --strviewerparams "bgcolor=#000000" Sample1.sdf | |
2384 | |
2385 To highlight molecular weight values using specified highlight criteria and fill in default background | |
2386 colors, type: | |
2387 | |
2388 % SDFilesToHTML.pl -n 10 --highlight "MolWeight,numeric,le,450" | |
2389 --highlightstyle background -m shadedhighlight -o Sample1.sdf | |
2390 | |
2391 To highlight molecular weight values using specified highlight criteria, color the text using | |
2392 default colors, and add a footer message in every page, type: | |
2393 | |
2394 % SDFilesToHTML.pl -n 4 --highlight "MolWeight,numeric,le,500" | |
2395 --highlightstyle text -m shadedhighlight -o | |
2396 --footer "Copyright (C) MayaChemTools" --cellspacing 1 Sample1.sdf | |
2397 | |
2398 To generate tables containing only structures, type: | |
2399 | |
2400 % SDFilesToHTML.pl -d both -m shadedstructuresonly --strtablesize "6,4" | |
2401 --cellspacing 1 -b 1 -o Sample1.sdf | |
2402 | |
2403 To generate tables containing only structures with molecular weight displayed above the | |
2404 structure, type: | |
2405 | |
2406 % SDFilesToHTML.pl -d both -m shadedstructuresonly --strtablesize "6,4" | |
2407 --cmpddatafield "MolWeight,no,top,center" --cellspacing 1 -b 1 | |
2408 -o Sample1.sdf | |
2409 | |
2410 To generate tables containing links to structures and highlight molecular weight data field values | |
2411 using specified highlight criteria , type: | |
2412 | |
2413 % SDFilesToHTML.pl -n 4 --footer "Copyright (C) MayaChemTools" | |
2414 --highlight "MolWeight,numeric,le,450" --highlightstyle background | |
2415 -d both -m shadedhighlight -s link --strlinktype button | |
2416 -o Sample1.sdf | |
2417 | |
2418 B<Local deployment: Usage of other structure viewers:> | |
2419 | |
2420 % SDFilesToHTML.pl --strviewertype MarvinView --strviewerconfig | |
2421 "<Marvin dir path>" -o Sample1.sdf | |
2422 | |
2423 % SDFilesToHTML.pl -o -n 10 --headeralign "center" --headercolor | |
2424 "#a1a1a1" --shadecolor "#fafad2,#d1d1d1" --cellspacing 1 | |
2425 --strviewerparams "bgcolor=#000000" --strviewertype Chime | |
2426 Sample1.sdf | |
2427 | |
2428 % SDFilesToHTML.pl -n 10 --highlight "MolWeight,numeric,le,450" | |
2429 --highlightstyle background -m shadedhighlight --strviewertype | |
2430 Chime -o Sample1.sdf | |
2431 | |
2432 % SDFilesToHTML.pl -d both -m shadedstructuresonly --strtablesize "6,4" | |
2433 --cellspacing 1 -b 1 -strviewertype JME -strviewerconfig "<JME dir | |
2434 path>" -o Sample1.sdf | |
2435 | |
2436 B<Web deployment: Usage of different structure viewers and options:> | |
2437 | |
2438 For deploying HTML file(s) on a web server, specify a valid I<codebase> directory name | |
2439 relative to <WWWRootDir>. In addition to I<codebase>, you can also specify I<archive> file | |
2440 name. | |
2441 | |
2442 % SDFilesToHTML.pl -m plain -s display --strviewertype Jmol | |
2443 -strviewerconfig "/jmol" -n 5 -d both -r PlainTable -t "Example | |
2444 using Jmol: Plain Table" -o Sample1.sdf | |
2445 | |
2446 % SDFilesToHTML.pl -n 5 -m shade -s display -strviewertype JME | |
2447 -strviewerconfig "/jme,JME.jar" -r ShadeTable -t "Example using JME: | |
2448 Shaded Table" -o Sample.sdf | |
2449 | |
2450 % SDFilesToHTML.pl -n 5 --highlight "MolWeight,numeric,le,450" | |
2451 --highlightstyle background -d both -m shadedhighlight -s display | |
2452 -strviewertype MarvinView -strviewerconfig "/marvin" -r | |
2453 ShadedHightlightTable -t "Example using MarvinView: Shaded and | |
2454 Highlighted Table" -o Sample.sdf | |
2455 | |
2456 % SDFilesToHTML.pl -n 4 --highlight "MolWeight,numeric,le,450" -s link | |
2457 --strlinktype href --strviewertype ChemDrawPlugIn --highlightstyle | |
2458 background -m shadedhighlight -t "Example using ChemDrawPlugIn: | |
2459 Shaded and Highlighted Table" -r ShadedHightlightTable -o Sample1.sdf | |
2460 | |
2461 =head1 AUTHOR | |
2462 | |
2463 Manish Sud <msud@san.rr.com> | |
2464 | |
2465 =head1 SEE ALSO | |
2466 | |
2467 FilterSDFiles.pl, InfoSDFiles.pl, SplitSDFiles.pl, MergeTextFilesWithSD.pl | |
2468 | |
2469 =head1 COPYRIGHT | |
2470 | |
2471 Copyright (C) 2015 Manish Sud. All rights reserved. | |
2472 | |
2473 This file is part of MayaChemTools. | |
2474 | |
2475 MayaChemTools is free software; you can redistribute it and/or modify it under | |
2476 the terms of the GNU Lesser General Public License as published by the Free | |
2477 Software Foundation; either version 3 of the License, or (at your option) | |
2478 any later version. | |
2479 | |
2480 =cut |