0
|
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
|