Mercurial > repos > deepakjadmin > mayatool3_test2
comparison lib/HTMLUtil.pm @ 0:4816e4a8ae95 draft default tip
Uploaded
| author | deepakjadmin |
|---|---|
| date | Wed, 20 Jan 2016 09:23:18 -0500 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| -1:000000000000 | 0:4816e4a8ae95 |
|---|---|
| 1 package HTMLUtil; | |
| 2 # | |
| 3 # $RCSfile: HTMLUtil.pm,v $ | |
| 4 # $Date: 2015/02/28 20:47:17 $ | |
| 5 # $Revision: 1.42 $ | |
| 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 Exporter; | |
| 31 | |
| 32 use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS); | |
| 33 | |
| 34 @ISA = qw(Exporter); | |
| 35 @EXPORT = qw(InsertHTMLTags SetupHTMLAlignmentBegin SetupHTMLAlignmentEnd SetupHTMLButtonRef SetupHTMLDivBegin SetupHTMLDivEnd SetupHTMLEmptyLines SetupHTMLPageHeader SetupHTMLHRef SetupHTMLPageEnd SetupHTMLPageTitle SetupHTMLStyleSheetTags SetupHTMLTableHeader SetupHTMLTableEnd SetupHTMLTableColumnHeader SetupHTMLTableColumnEnd SetupHTMLTableRowHeader SetupHTMLTableRowEnd SetupHTMLTableRowHeaderValue SetupHTMLTableRowDataValue SetupJavaScriptCmds SetupStrViewerJSInitCmd SetupStrViewerJMEApplet SetupStrViewerJmolApplet SetupStrViewerChimePlugIn SetupStrViewerChem3DActiveX SetupStrViewerChemDrawActiveX SetupStrViewerChemDrawPlugIn SetupStrViewerMarvinViewApplet SetupStrViewerAccelrysActiveX); | |
| 36 @EXPORT_OK = qw(); | |
| 37 | |
| 38 %EXPORT_TAGS = (all => [@EXPORT, @EXPORT_OK]); | |
| 39 | |
| 40 # Default window size for various supported structure viewers... | |
| 41 my($StrViewerWidth, $StrViewerHeight) = (250, 170); | |
| 42 | |
| 43 # Insert specfied tags into existing tag string... | |
| 44 sub InsertHTMLTags { | |
| 45 my($Tag, %TagsMap) = @_; | |
| 46 my($NewTag, $TagName, $TagValue, $TagPart1, $TagPart2); | |
| 47 | |
| 48 $NewTag = $Tag; $TagPart1 = ""; $TagPart2 = ""; | |
| 49 ($TagPart1) = $Tag =~ /^(.*?)>/; | |
| 50 | |
| 51 if ($TagPart1 && length($TagPart1)) { | |
| 52 $TagPart2 = $Tag; | |
| 53 $TagPart2 =~ s/^(.*?)>//; | |
| 54 if ($TagPart2 && length($TagPart2)) { | |
| 55 for $TagName (keys %TagsMap) { | |
| 56 $TagValue = $TagsMap{$TagName}; | |
| 57 $TagPart1 .= qq( $TagName="$TagValue" ); | |
| 58 } | |
| 59 $NewTag = "${TagPart1}>${TagPart2}"; | |
| 60 } | |
| 61 } | |
| 62 | |
| 63 return $NewTag; | |
| 64 } | |
| 65 | |
| 66 sub SetupHTMLAlignmentBegin { | |
| 67 my($AlignmentTag, $Alignment); | |
| 68 | |
| 69 $Alignment = (@_ == 1) ? $_[0] : "left"; | |
| 70 $AlignmentTag = qq(<$Alignment>\n); | |
| 71 | |
| 72 return $AlignmentTag; | |
| 73 } | |
| 74 | |
| 75 sub SetupHTMLAlignmentEnd { | |
| 76 my($AlignmentTag, $Alignment); | |
| 77 | |
| 78 $Alignment = (@_ == 1) ? $_[0] : "left"; | |
| 79 $AlignmentTag = qq(</$Alignment>\n); | |
| 80 | |
| 81 return $AlignmentTag; | |
| 82 } | |
| 83 | |
| 84 # Setup a button reference... | |
| 85 sub SetupHTMLButtonRef { | |
| 86 my($ButtonLabel, $RefFile, $ButtonTags); | |
| 87 | |
| 88 ($ButtonLabel, $RefFile) = @_; | |
| 89 | |
| 90 $ButtonTags = qq(<input type="button" value="$ButtonLabel" onClick="document.location='$RefFile'">); | |
| 91 return $ButtonTags; | |
| 92 } | |
| 93 | |
| 94 sub SetupHTMLDivBegin { | |
| 95 my($Id) = @_; | |
| 96 my($DivTag); | |
| 97 | |
| 98 $DivTag = qq(<div id="$Id">\n); | |
| 99 | |
| 100 return $DivTag; | |
| 101 } | |
| 102 | |
| 103 sub SetupHTMLDivEnd { | |
| 104 my($DivTag); | |
| 105 | |
| 106 $DivTag = qq(</div>\n); | |
| 107 | |
| 108 return $DivTag; | |
| 109 } | |
| 110 sub SetupHTMLEmptyLines { | |
| 111 my($LineCount, $Index, $EmptyLineTags); | |
| 112 | |
| 113 $LineCount = 1; | |
| 114 $EmptyLineTags = qq(<p> </p>); | |
| 115 ($LineCount) = @_; | |
| 116 if ($LineCount > 1) { | |
| 117 for $Index (2 .. $LineCount) { | |
| 118 $EmptyLineTags .= qq(<p> </p>); | |
| 119 } | |
| 120 } | |
| 121 return $EmptyLineTags; | |
| 122 } | |
| 123 | |
| 124 # Setup HTML page header... | |
| 125 sub SetupHTMLPageHeader { | |
| 126 my($HeaderTitle, $Stylesheet, $JavaScript, $PageHeader); | |
| 127 | |
| 128 $HeaderTitle = ""; $Stylesheet = ""; $JavaScript = ""; | |
| 129 if (@_ == 3) { | |
| 130 ($HeaderTitle, $Stylesheet, $JavaScript) = @_; | |
| 131 } | |
| 132 elsif (@_ == 2) { | |
| 133 ($HeaderTitle, $Stylesheet) = @_; | |
| 134 } | |
| 135 else { | |
| 136 ($HeaderTitle) = @_; | |
| 137 } | |
| 138 $PageHeader = qq(<html>\n); | |
| 139 $PageHeader .= qq(<head>\n); | |
| 140 $PageHeader .= qq(<title>$HeaderTitle</title>\n); | |
| 141 $PageHeader .= qq(<meta http-equiv="content-type" content="text/html;charset=utf-8">\n); | |
| 142 if ($Stylesheet) { | |
| 143 $PageHeader .= qq(<link rel="stylesheet" type="text/css" href="$Stylesheet">\n); | |
| 144 } | |
| 145 if ($JavaScript) { | |
| 146 $PageHeader .= qq(<script src="$JavaScript"></script>\n); | |
| 147 } | |
| 148 $PageHeader .= <<ENDPAGEHEADER; | |
| 149 </head> | |
| 150 <body> | |
| 151 <p> </p> | |
| 152 ENDPAGEHEADER | |
| 153 | |
| 154 return $PageHeader; | |
| 155 } | |
| 156 | |
| 157 # Setup page title... | |
| 158 sub SetupHTMLPageTitle { | |
| 159 my($Title, $Alignment, $PageTitle); | |
| 160 | |
| 161 $Alignment = "center"; | |
| 162 if (@_ == 2) { | |
| 163 ($Title, $Alignment) = @_; | |
| 164 } | |
| 165 else { | |
| 166 ($Title) = @_; | |
| 167 } | |
| 168 | |
| 169 $PageTitle=<<ENDPAGETITLE; | |
| 170 <$Alignment> | |
| 171 <h3>$Title</h3> | |
| 172 </$Alignment> | |
| 173 ENDPAGETITLE | |
| 174 | |
| 175 return $PageTitle; | |
| 176 } | |
| 177 | |
| 178 # Setup HTML page end... | |
| 179 sub SetupHTMLPageEnd { | |
| 180 my($PageEnd, $Footer); | |
| 181 | |
| 182 $Footer = ""; | |
| 183 if (@_ == 1) { | |
| 184 ($Footer) = @_; | |
| 185 } | |
| 186 if ($Footer) { | |
| 187 $Footer = qq(<span class="Footer">$Footer</span>); | |
| 188 } | |
| 189 $PageEnd=<<ENDPAGE; | |
| 190 <center> | |
| 191 <p> </p> | |
| 192 $Footer | |
| 193 </center> | |
| 194 </body> | |
| 195 </html> | |
| 196 ENDPAGE | |
| 197 | |
| 198 return $PageEnd; | |
| 199 } | |
| 200 | |
| 201 # Setup HTML link tags... | |
| 202 sub SetupHTMLHRef { | |
| 203 my($Value, $RefFile, $HRef, $Title); | |
| 204 | |
| 205 $Title = ""; | |
| 206 if (@_ == 3) { | |
| 207 ($Value, $RefFile, $Title) = @_; | |
| 208 } | |
| 209 else { | |
| 210 ($Value, $RefFile) = @_; | |
| 211 } | |
| 212 | |
| 213 $HRef = qq(<a href="$RefFile"); | |
| 214 if ($Title) { | |
| 215 $HRef .= qq( title="$Title"); | |
| 216 } | |
| 217 $HRef .= qq(>$Value</a>); | |
| 218 return $HRef; | |
| 219 } | |
| 220 | |
| 221 # | |
| 222 sub SetupHTMLStyleSheetTags { | |
| 223 my($StyleSheetTags); | |
| 224 | |
| 225 $StyleSheetTags=<<ENDSTYLESHEET; | |
| 226 body | |
| 227 { | |
| 228 background-color: #ffffff; | |
| 229 font-family: Verdana, Arial, Helvetica, sans-serif; | |
| 230 font-size: 11px; | |
| 231 } | |
| 232 p | |
| 233 { | |
| 234 font-family: Verdana, Arial, Helvetica, sans-serif; | |
| 235 font-size: 11px; | |
| 236 } | |
| 237 h1 | |
| 238 { | |
| 239 font-family: Verdana, Arial, Helvetica, sans-serif; | |
| 240 font-size: 25px; | |
| 241 font-weight: bold; | |
| 242 color: #0054aa; | |
| 243 } | |
| 244 h2 | |
| 245 { | |
| 246 font-family: Verdana, Arial, Helvetica, sans-serif; | |
| 247 font-size: 18px; | |
| 248 font-weight: bold; | |
| 249 color: #0054aa; | |
| 250 } | |
| 251 h3 | |
| 252 { | |
| 253 font-family: Verdana, Arial, Helvetica, sans-serif; | |
| 254 font-size: 14px; | |
| 255 font-weight: bold; | |
| 256 color: #0054aa; | |
| 257 } | |
| 258 b | |
| 259 { | |
| 260 font-weight: bold; | |
| 261 } | |
| 262 td | |
| 263 { | |
| 264 font-family: Verdana, Arial, Helvetica, sans-serif; | |
| 265 font-size: 11px; | |
| 266 } | |
| 267 th | |
| 268 { | |
| 269 font-family: Verdana, Arial, Helvetica, sans-serif; | |
| 270 font-size: 11px; | |
| 271 color: #0054aa; | |
| 272 font-weight: bold; | |
| 273 } | |
| 274 .box { | |
| 275 border-color: #000000; | |
| 276 border-style: solid; | |
| 277 border-top-width: 1px; | |
| 278 border-bottom-width: 1px; | |
| 279 border-left-width: 1px; | |
| 280 border-right-width: 1px; | |
| 281 } | |
| 282 a | |
| 283 { | |
| 284 color: #0000bb; | |
| 285 text-decoration: none; | |
| 286 font-family: Verdana, Arial, Helvetica, sans-serif; | |
| 287 font-size: 11px; | |
| 288 } | |
| 289 a:hover | |
| 290 { | |
| 291 color: #ff0000; | |
| 292 } | |
| 293 #tablenav { | |
| 294 font-family: Verdana, Arial, Helvetica, sans-serif; | |
| 295 font-size: 11px; | |
| 296 } | |
| 297 #tablenav td | |
| 298 { | |
| 299 font-family: Verdana, Arial, Helvetica, sans-serif; | |
| 300 font-size: 11px; | |
| 301 } | |
| 302 #tablenav th | |
| 303 { | |
| 304 font-family: Verdana, Arial, Helvetica, sans-serif; | |
| 305 font-size: 11px; | |
| 306 font-weight: bold; | |
| 307 } | |
| 308 #tablenav a | |
| 309 { | |
| 310 color: #0000bb; | |
| 311 text-decoration: none; | |
| 312 font-family: Verdana, Arial, Helvetica, sans-serif; | |
| 313 font-size: 11px; | |
| 314 } | |
| 315 #tablenav a:hover | |
| 316 { | |
| 317 color: #ff0000; | |
| 318 } | |
| 319 .footer | |
| 320 { | |
| 321 font-family: Arial, Verdana, Helvetica, sans-serif; | |
| 322 font-size: 9px; | |
| 323 color: #888888; | |
| 324 } | |
| 325 ENDSTYLESHEET | |
| 326 | |
| 327 return $StyleSheetTags; | |
| 328 } | |
| 329 | |
| 330 # Setup HTML table header... | |
| 331 sub SetupHTMLTableHeader { | |
| 332 my($TableHeader, $BorderWidth, $CellPadding, $CellSpacing, $Width, $Height); | |
| 333 | |
| 334 $BorderWidth = 1; $CellPadding = 2; $CellSpacing = 0; $Width = ""; $Height = ""; | |
| 335 if (@_ == 5) { | |
| 336 ($BorderWidth, $CellPadding, $CellSpacing, $Width, $Height) = @_; | |
| 337 } | |
| 338 elsif (@_ == 4) { | |
| 339 ($BorderWidth, $CellPadding, $CellSpacing, $Width) = @_; | |
| 340 } | |
| 341 elsif (@_ == 3) { | |
| 342 ($BorderWidth, $CellPadding, $CellSpacing) = @_; | |
| 343 } | |
| 344 elsif (@_ == 2) { | |
| 345 ($BorderWidth, $CellPadding) = @_; | |
| 346 } | |
| 347 elsif (@_ = 1) { | |
| 348 ($BorderWidth) = @_; | |
| 349 } | |
| 350 $TableHeader = qq(<table border=$BorderWidth cellpadding=$CellPadding cellspacing=$CellSpacing); | |
| 351 if ($Width) { | |
| 352 $TableHeader .= qq( width=$Width); | |
| 353 } | |
| 354 if ($Height) { | |
| 355 $TableHeader .= qq( height=$Height); | |
| 356 } | |
| 357 $TableHeader .= qq(>\n); | |
| 358 | |
| 359 return $TableHeader; | |
| 360 } | |
| 361 | |
| 362 # Setup HTML table end... | |
| 363 sub SetupHTMLTableEnd { | |
| 364 my($TableEnd); | |
| 365 | |
| 366 $TableEnd=<<ENDTABLE; | |
| 367 </table> | |
| 368 ENDTABLE | |
| 369 | |
| 370 return $TableEnd; | |
| 371 } | |
| 372 | |
| 373 # Setup HTML table column header... | |
| 374 sub SetupHTMLTableColumnHeader { | |
| 375 my($BgColor, $Width, $ColumnHeader); | |
| 376 | |
| 377 $BgColor = ""; $Width = ""; | |
| 378 if (@_ == 1) { | |
| 379 ($BgColor) = @_; | |
| 380 } | |
| 381 elsif (@_ == 2) { | |
| 382 ($BgColor, $Width) = @_; | |
| 383 } | |
| 384 $ColumnHeader = qq(<td); | |
| 385 if ($BgColor) { | |
| 386 $ColumnHeader .= qq( bgcolor="$BgColor") | |
| 387 } | |
| 388 if ($Width) { | |
| 389 $ColumnHeader .= qq( width="$Width") | |
| 390 } | |
| 391 $ColumnHeader .= qq(>); | |
| 392 return $ColumnHeader; | |
| 393 } | |
| 394 | |
| 395 # Setup HTML table column end... | |
| 396 sub SetupHTMLTableColumnEnd { | |
| 397 my($ColumnEnd); | |
| 398 | |
| 399 $ColumnEnd = qq(</td>); | |
| 400 return $ColumnEnd; | |
| 401 } | |
| 402 | |
| 403 # Setup HTML table row header... | |
| 404 sub SetupHTMLTableRowHeader { | |
| 405 my($RowHeader, $HAlignment, $BgColor, $VAlignment); | |
| 406 | |
| 407 $HAlignment = "center"; $BgColor = ""; $VAlignment = "top"; | |
| 408 if (@_ == 3) { | |
| 409 ($HAlignment, $BgColor, $VAlignment) = @_; | |
| 410 } | |
| 411 elsif (@_ == 2) { | |
| 412 ($HAlignment, $BgColor) = @_; | |
| 413 } | |
| 414 elsif (@_ == 1) { | |
| 415 ($HAlignment) = @_; | |
| 416 } | |
| 417 if ($BgColor) { | |
| 418 $RowHeader = qq(<tr bgcolor="$BgColor" align="$HAlignment" valign="$VAlignment">); | |
| 419 } | |
| 420 else { | |
| 421 $RowHeader = qq(<tr align="$HAlignment" valign="$VAlignment">); | |
| 422 } | |
| 423 | |
| 424 return $RowHeader; | |
| 425 } | |
| 426 | |
| 427 # Setup HTML table row end... | |
| 428 sub SetupHTMLTableRowEnd { | |
| 429 my($RowEnd); | |
| 430 | |
| 431 $RowEnd = qq(</tr>\n); | |
| 432 return $RowEnd; | |
| 433 } | |
| 434 | |
| 435 # Setup HTML table header values... | |
| 436 sub SetupHTMLTableRowHeaderValue { | |
| 437 my($HeaderValue, $Value); | |
| 438 | |
| 439 $Value = ""; | |
| 440 if (@_ >= 1) { | |
| 441 ($Value) = @_; | |
| 442 } | |
| 443 if (defined $Value && length $Value) { | |
| 444 $HeaderValue = qq(<th>$Value</th>); | |
| 445 } | |
| 446 else { | |
| 447 $HeaderValue = qq(<th> </th>); | |
| 448 } | |
| 449 return $HeaderValue; | |
| 450 } | |
| 451 | |
| 452 # Setup HTML table row data values... | |
| 453 sub SetupHTMLTableRowDataValue { | |
| 454 my($RowValues, $Value, $BgColor, $FontColor, $FontBold, $FontBoldTag1, $FontBoldTag2); | |
| 455 | |
| 456 $Value = ""; $BgColor = ""; $FontColor = ""; $FontBold = ""; | |
| 457 if (@_ == 1) { | |
| 458 ($Value) = @_; | |
| 459 } | |
| 460 elsif (@_ == 2) { | |
| 461 ($Value, $BgColor) = @_; | |
| 462 } | |
| 463 elsif (@_ == 3) { | |
| 464 ($Value, $BgColor, $FontColor) = @_; | |
| 465 } | |
| 466 elsif (@_ == 4) { | |
| 467 ($Value, $BgColor, $FontColor, $FontBold) = @_; | |
| 468 } | |
| 469 if (!(defined $Value && length $Value)) { | |
| 470 $Value = qq( ); | |
| 471 } | |
| 472 $FontBoldTag1 = ""; $FontBoldTag2 = ""; | |
| 473 if ($FontBold) { | |
| 474 $FontBoldTag1 = qq(<b>); | |
| 475 $FontBoldTag2 = qq(</b>); | |
| 476 } | |
| 477 if ($BgColor || $FontColor) { | |
| 478 my ($BgColorTag, $FontTag1, $FontTag2); | |
| 479 | |
| 480 $BgColorTag = ""; | |
| 481 if ($BgColor) { | |
| 482 $BgColorTag = qq( bgcolor="$BgColor"); | |
| 483 } | |
| 484 $FontTag1 = ""; $FontTag2 = ""; | |
| 485 if ($FontColor) { | |
| 486 $FontTag1 = qq(<font color="$FontColor">); | |
| 487 $FontTag2 = qq(</font>); | |
| 488 } | |
| 489 if ($FontBold) { | |
| 490 $RowValues = "<td" . $BgColorTag . ">" . $FontBoldTag1 . $FontTag1 . "$Value" . $FontTag2 . $FontBoldTag2 . "</td>"; | |
| 491 } | |
| 492 else { | |
| 493 $RowValues = "<td" . $BgColorTag . ">" . $FontTag1 . "$Value" . $FontTag2 . "</td>"; | |
| 494 } | |
| 495 } | |
| 496 elsif ($FontBold) { | |
| 497 $RowValues = "<td>" . $FontBoldTag1 . "$Value" . $FontBoldTag2 . "</td>"; | |
| 498 } | |
| 499 else { | |
| 500 $RowValues = qq(<td>$Value</td>); | |
| 501 } | |
| 502 return $RowValues; | |
| 503 } | |
| 504 | |
| 505 # Setup Java scripts command... | |
| 506 sub SetupJavaScriptCmds { | |
| 507 my(@JSCmdList) = @_; | |
| 508 my($JSTags, $JSCmd); | |
| 509 | |
| 510 $JSTags = qq(<script>\n); | |
| 511 for $JSCmd (@JSCmdList) { | |
| 512 $JSTags .= qq($JSCmd\n); | |
| 513 } | |
| 514 $JSTags .= qq(</script>\n); | |
| 515 | |
| 516 return $JSTags; | |
| 517 } | |
| 518 | |
| 519 # Setup Java script initialize command... | |
| 520 sub SetupStrViewerJSInitCmd { | |
| 521 my($StrViewerType, $CodeBase) = @_; | |
| 522 my($JSTag); | |
| 523 | |
| 524 $JSTag = ""; | |
| 525 if ($StrViewerType eq "Jmol") { | |
| 526 $JSTag = qq(<script>jmolInitialize("$CodeBase", "JmolApplet.jar");</script>\n); | |
| 527 } | |
| 528 elsif ($StrViewerType eq "ChemDrawPlugIn" || $StrViewerType eq "ChemDrawActiveX") { | |
| 529 $JSTag = qq(<script>cd_includeWrapperFile("$CodeBase/");</script>\n); | |
| 530 } | |
| 531 elsif ($StrViewerType eq "Chem3DActiveX") { | |
| 532 } | |
| 533 return $JSTag; | |
| 534 } | |
| 535 | |
| 536 | |
| 537 # Setup Jmol applet... | |
| 538 sub SetupStrViewerJmolApplet { | |
| 539 my($MolString, $CodeBase, $ParamsMapRef, %ParamsMap, $AppletTags, $JavaScriptTags, $ReturnTags, $Name, $Code, $Archive, $Width, $Height, $ParamName, $ParamValue, $JSFileName, $UseJavaScript); | |
| 540 my($ProgressBar, $ProgressColor, $BoxMessage, $BoxFgColor, $BoxBgColor, $BgColor, $JMolScript); | |
| 541 | |
| 542 $AppletTags = ""; $JavaScriptTags = ""; $ReturnTags = ""; | |
| 543 $ParamsMapRef = ""; %ParamsMap = (); | |
| 544 $Name = "Jmol"; $Code = "JmolApplet"; $Archive = "JmolApplet.jar"; $Width = $StrViewerWidth; $Height = $StrViewerHeight; | |
| 545 $ProgressBar = "true"; $ProgressColor = "#0000ff"; $BgColor = "#000000"; | |
| 546 $BoxMessage = "Setting up JmolApplet..."; $BoxFgColor = "#000000"; $BoxBgColor = "#ffffff"; | |
| 547 $UseJavaScript = 0; $JSFileName = ""; | |
| 548 $JMolScript = "select *; set frank off; wireframe on; spacefill off"; | |
| 549 | |
| 550 PARAMS: { | |
| 551 if (@_ == 3) { ($MolString, $CodeBase, $ParamsMapRef) = @_; last PARAMS; } | |
| 552 ($MolString, $CodeBase) = @_; | |
| 553 } | |
| 554 | |
| 555 if ($ParamsMapRef) { | |
| 556 %ParamsMap = %$ParamsMapRef; | |
| 557 if (exists $ParamsMap{usejavascript} ) { $JSFileName = $ParamsMap{usejavascript}; $UseJavaScript = 1; $ParamsMap{usejavascript} = ""; } | |
| 558 if (exists $ParamsMap{name} ) { $Name = $ParamsMap{name}; $ParamsMap{name} = ""; } | |
| 559 if (exists $ParamsMap{code} ) { $Code = $ParamsMap{code}; $ParamsMap{code} = ""; } | |
| 560 # if (exists $ParamsMap{archive} ) { $Archive = $ParamsMap{archive}; $ParamsMap{archive} = ""; } | |
| 561 if (exists $ParamsMap{archive} ) { $ParamsMap{archive} = ""; } | |
| 562 if (exists $ParamsMap{height} ) { $Height = $ParamsMap{height}; $ParamsMap{height} = ""; } | |
| 563 if (exists $ParamsMap{width} ) { $Width = $ParamsMap{width}; $ParamsMap{width} = ""; } | |
| 564 if (exists $ParamsMap{progressbar} ) { $ProgressBar = $ParamsMap{progressbar}; $ParamsMap{progressbar} = ""; } | |
| 565 if (exists $ParamsMap{progresscolor} ) { $ProgressColor = $ParamsMap{progresscolor}; $ParamsMap{progresscolor} = ""; } | |
| 566 if (exists $ParamsMap{boxmessage} ) { $BoxMessage = $ParamsMap{boxmessage}; $ParamsMap{boxmessage} = ""; } | |
| 567 if (exists $ParamsMap{script} ) { $JMolScript = $ParamsMap{script}; $ParamsMap{script} = ""; } | |
| 568 if (exists $ParamsMap{bgcolor}) { | |
| 569 $BgColor = $ParamsMap{bgcolor}; | |
| 570 if (length($BgColor)) { | |
| 571 if ($BgColor =~ /black/i || $BgColor =~ /#000000/ ) { | |
| 572 $BoxFgColor = "#ffffff"; | |
| 573 $BoxBgColor = "#000000"; | |
| 574 } | |
| 575 } | |
| 576 } | |
| 577 if (exists $ParamsMap{boxbgcolor} ) { $BoxBgColor = $ParamsMap{boxbgcolor}; $ParamsMap{boxbgcolor} = ""; } | |
| 578 if (exists $ParamsMap{boxfgcolor} ) { $BoxFgColor = $ParamsMap{boxfgcolor}; $ParamsMap{boxfgcolor} = ""; } | |
| 579 } | |
| 580 | |
| 581 $MolString =~ s/(\r\n)|(\r)|(\n)/|/g; | |
| 582 if ($UseJavaScript) { | |
| 583 $JavaScriptTags = qq(\n<script>\n); | |
| 584 my($Size) = ($Width > $Height ) ? $Width : $Height; | |
| 585 $JavaScriptTags .= qq(var $Name = \n); | |
| 586 my(@MolLines) = split /\|/, $MolString; | |
| 587 my($LineIndex); | |
| 588 $JavaScriptTags .= qq("$MolLines[0]\\n"); | |
| 589 for $LineIndex (1 .. $#MolLines) { | |
| 590 $JavaScriptTags .= qq( + \n"$MolLines[$LineIndex]\\n"); | |
| 591 } | |
| 592 $JavaScriptTags .= qq(;\n); | |
| 593 $JavaScriptTags .= qq(jmolSetAppletColor("$BgColor", "$BoxBgColor", "$BoxFgColor", "$ProgressColor");\n); | |
| 594 # "set frank off turns" off JMol logo. For wireframe display; use wireframe on; spacefill off... | |
| 595 # $JavaScriptTags .= qq(jmolAppletInline($Size, $Name);\n); | |
| 596 $JavaScriptTags .= qq(jmolAppletInline([$Width,$Height], $Name, \"$JMolScript\");\n); | |
| 597 $JavaScriptTags .= qq(</script>\n); | |
| 598 $ReturnTags = $JavaScriptTags; | |
| 599 } | |
| 600 else { | |
| 601 # Setup applet header... | |
| 602 $AppletTags = qq(\n<applet name="$Name" id="$Name" code="$Code" archive="$Archive" codebase="$CodeBase" width="$Width" height="$Height">\n); | |
| 603 | |
| 604 # Setup molecule data... | |
| 605 $AppletTags .= qq(<param name="loadInline" value="$MolString">\n); | |
| 606 | |
| 607 # Setup prograss bar... | |
| 608 $AppletTags .= qq(<param name="progressbar" value="$ProgressBar">\n<param name="progresscolor" value="$ProgressColor">\n<param name="boxmessage" value="$BoxMessage">\n<param name="boxbgcolor" value="$BoxBgColor">\n<param name="boxfgcolor" value="$BoxFgColor">\n); | |
| 609 | |
| 610 # "set frank off turns" off JMol logo. For wireframe display; use wireframe on; spacefill off... | |
| 611 $AppletTags .= qq(<param name="script" value="$JMolScript">); | |
| 612 | |
| 613 #Setup other parameters... | |
| 614 for $ParamName (sort keys %ParamsMap) { | |
| 615 $ParamValue = $ParamsMap{$ParamName}; | |
| 616 if (length $ParamValue) { | |
| 617 $AppletTags .= qq(<param name="$ParamName" value="$ParamValue">\n); | |
| 618 } | |
| 619 } | |
| 620 #Finish it up... | |
| 621 $AppletTags .= qq(</applet>\n); | |
| 622 $ReturnTags = $AppletTags; | |
| 623 } | |
| 624 return $ReturnTags; | |
| 625 } | |
| 626 | |
| 627 # Setup JME applet... | |
| 628 sub SetupStrViewerJMEApplet { | |
| 629 my($MolString, $CodeBase, $ParamsMapRef, %ParamsMap, $AppletTags, $Name, $Code, $Archive, $Width, $Height, $ParamName, $ParamValue); | |
| 630 my($Options); | |
| 631 | |
| 632 $AppletTags = ""; $ParamsMapRef = ""; %ParamsMap = (); | |
| 633 $Name = "JME"; $Code = "JME"; $Archive = "JME.jar"; $Width = $StrViewerWidth; $Height = $StrViewerHeight; | |
| 634 $Options = "depict"; | |
| 635 | |
| 636 if (@_ == 3) { | |
| 637 ($MolString, $CodeBase, $ParamsMapRef) = @_; | |
| 638 } | |
| 639 else { | |
| 640 ($MolString, $CodeBase) = @_; | |
| 641 } | |
| 642 $MolString =~ s/(\r\n)|(\r)|(\n)/|/g; | |
| 643 | |
| 644 if ($ParamsMapRef) { | |
| 645 %ParamsMap = %$ParamsMapRef; | |
| 646 if (exists $ParamsMap{name} ) { $Name = $ParamsMap{name}; $ParamsMap{name} = ""; } | |
| 647 if (exists $ParamsMap{code} ) { $Code = $ParamsMap{code}; $ParamsMap{code} = ""; } | |
| 648 if (exists $ParamsMap{archive} ) { $Archive = $ParamsMap{archive}; $ParamsMap{archive} = ""; } | |
| 649 if (exists $ParamsMap{height} ) { $Height = $ParamsMap{height}; $ParamsMap{height} = ""; } | |
| 650 if (exists $ParamsMap{width} ) { $Width = $ParamsMap{width}; $ParamsMap{width} = ""; } | |
| 651 if (exists $ParamsMap{options} ) { $Options = $ParamsMap{options}; $ParamsMap{options} = ""; } | |
| 652 } | |
| 653 | |
| 654 # Setup applet header... | |
| 655 $AppletTags = qq(\n<applet name="$Name" id="$Name" code="$Code" archive="$Archive" codebase="$CodeBase" width="$Width" height="$Height">\n); | |
| 656 | |
| 657 # Setup molecule data... | |
| 658 $AppletTags .= qq(<param name="mol" value="$MolString">\n<param name="options" value="$Options">\n); | |
| 659 | |
| 660 #Setup other parameters... | |
| 661 for $ParamName (sort keys %ParamsMap) { | |
| 662 $ParamValue = $ParamsMap{$ParamName}; | |
| 663 if (length $ParamValue) { | |
| 664 $AppletTags .= qq(<param name="$ParamName" value="$ParamValue">\n); | |
| 665 } | |
| 666 } | |
| 667 | |
| 668 #Finish it up... | |
| 669 $AppletTags .= qq(</applet>\n); | |
| 670 | |
| 671 return $AppletTags; | |
| 672 } | |
| 673 | |
| 674 # Setup MarvinView applet... | |
| 675 sub SetupStrViewerMarvinViewApplet { | |
| 676 my($MolString, $CodeBase, $ParamsMapRef, %ParamsMap, $AppletTags, $JavaScriptTags, $ReturnTags, $Name, $Code, $Archive, $Width, $Height, $ParamName, $NavMode, $ParamValue, $JSFileName, $UseJavaScript, $MarvinJVM); | |
| 677 | |
| 678 $AppletTags = ""; $JavaScriptTags = ""; $ReturnTags = ""; | |
| 679 $ParamsMapRef = ""; %ParamsMap = (); | |
| 680 $Name = "MView"; $Code = "MView"; $Archive = "marvin.jar"; $Width = $StrViewerWidth; $Height = $StrViewerHeight; | |
| 681 $NavMode = "zoom"; | |
| 682 $UseJavaScript = 0; $JSFileName = ""; $MarvinJVM = ""; | |
| 683 | |
| 684 if (@_ == 3) { | |
| 685 ($MolString, $CodeBase, $ParamsMapRef) = @_; | |
| 686 } | |
| 687 else { | |
| 688 ($MolString, $CodeBase) = @_; | |
| 689 } | |
| 690 | |
| 691 if ($ParamsMapRef) { | |
| 692 %ParamsMap = %$ParamsMapRef; | |
| 693 if (exists $ParamsMap{usejavascript} ) { $JSFileName = $ParamsMap{usejavascript}; $UseJavaScript = 1; $ParamsMap{usejavascript} = ""; } | |
| 694 if (exists $ParamsMap{marvin_jvm} ) { $MarvinJVM = $ParamsMap{marvin_jvm}; $ParamsMap{marvin_jvm} = ""; } | |
| 695 if (exists $ParamsMap{name} ) { $Name = $ParamsMap{name}; $ParamsMap{name} = ""; } | |
| 696 if (exists $ParamsMap{code} ) { $Code = $ParamsMap{code}; $ParamsMap{code} = ""; } | |
| 697 if (exists $ParamsMap{archive} ) { $Archive = $ParamsMap{archive}; $ParamsMap{archive} = ""; } | |
| 698 if (exists $ParamsMap{height} ) { $Height = $ParamsMap{height}; $ParamsMap{height} = ""; } | |
| 699 if (exists $ParamsMap{width} ) { $Width = $ParamsMap{width}; $ParamsMap{width} = ""; } | |
| 700 if (exists $ParamsMap{bgcolor}) { | |
| 701 $ParamsMap{background} = "$ParamsMap{bgcolor}"; | |
| 702 $ParamsMap{molbg} = "$ParamsMap{bgcolor}"; | |
| 703 $ParamsMap{bgcolor} = ""; | |
| 704 } | |
| 705 if (exists $ParamsMap{navmode}) { | |
| 706 $NavMode = $ParamsMap{navmode}; | |
| 707 $ParamsMap{navmode} = ""; | |
| 708 } | |
| 709 } | |
| 710 $MolString =~ s/(\r\n)|(\r)|(\n)/\\/g; | |
| 711 if ($UseJavaScript) { | |
| 712 $JavaScriptTags = qq(\n<script>\n); | |
| 713 $JavaScriptTags .= qq(var marvin_name = "$Name";\n); | |
| 714 $JavaScriptTags .= qq(var marvin_jvm = "$MarvinJVM";\n); | |
| 715 | |
| 716 $JavaScriptTags .= qq(mview_begin("$CodeBase", $Width, $Height);\n); | |
| 717 | |
| 718 $JavaScriptTags .= qq(var $Name = \n); | |
| 719 my(@MolLines) = split /\\/, $MolString; | |
| 720 my($LineIndex); | |
| 721 $JavaScriptTags .= qq("$MolLines[0]\\n"); | |
| 722 for $LineIndex (1 .. $#MolLines) { | |
| 723 $JavaScriptTags .= qq( + \n"$MolLines[$LineIndex]\\n"); | |
| 724 } | |
| 725 $JavaScriptTags .= qq(;\n); | |
| 726 $JavaScriptTags .= qq(mview_param("mol", $Name);\n); | |
| 727 | |
| 728 $JavaScriptTags .= qq(mview_param("navmode", "$NavMode");\n); | |
| 729 | |
| 730 for $ParamName (sort keys %ParamsMap) { | |
| 731 $ParamValue = $ParamsMap{$ParamName}; | |
| 732 if (length $ParamValue) { | |
| 733 $JavaScriptTags .= qq(mview_param("$ParamName", "$ParamValue");\n); | |
| 734 } | |
| 735 } | |
| 736 $JavaScriptTags .= qq(mview_end();\n); | |
| 737 $JavaScriptTags .= qq(</script>\n); | |
| 738 $ReturnTags = $JavaScriptTags; | |
| 739 } | |
| 740 else { | |
| 741 # Setup applet header... | |
| 742 $AppletTags = qq(\n<applet name="$Name" id="$Name" code="$Code" archive="$Archive" codebase="$CodeBase" width="$Width" height="$Height">\n); | |
| 743 | |
| 744 # Setup molecule data... | |
| 745 $AppletTags .= qq(<param name="mol" value="$MolString">\n); | |
| 746 | |
| 747 $AppletTags .= qq(<param name="navmode" value="$NavMode">\n); | |
| 748 | |
| 749 #Setup other parameters... | |
| 750 for $ParamName (sort keys %ParamsMap) { | |
| 751 $ParamValue = $ParamsMap{$ParamName}; | |
| 752 if (length $ParamValue) { | |
| 753 $AppletTags .= qq(<param name="$ParamName" value="$ParamValue">\n); | |
| 754 } | |
| 755 } | |
| 756 $AppletTags .= qq(</applet>\n); | |
| 757 $ReturnTags = $AppletTags; | |
| 758 } | |
| 759 return $ReturnTags; | |
| 760 } | |
| 761 | |
| 762 # Setup MDL chime plug-in... | |
| 763 sub SetupStrViewerChimePlugIn { | |
| 764 my($MolFile, $ParamsMapRef, %ParamsMap, $Width, $Height, $ParamName, $ParamValue, $PlugInTags); | |
| 765 my($Display2D); | |
| 766 | |
| 767 $PlugInTags = ""; $ParamsMapRef = ""; %ParamsMap = (); | |
| 768 $Width = $StrViewerWidth; $Height = $StrViewerHeight; | |
| 769 $Display2D = "true"; | |
| 770 | |
| 771 if (@_ == 2) { | |
| 772 ($MolFile, $ParamsMapRef) = @_; | |
| 773 } | |
| 774 else { | |
| 775 ($MolFile) = @_; | |
| 776 } | |
| 777 | |
| 778 if ($ParamsMapRef) { | |
| 779 %ParamsMap = %$ParamsMapRef; | |
| 780 if (exists $ParamsMap{height} ) { $Height = $ParamsMap{height}; $ParamsMap{height} = ""; } | |
| 781 if (exists $ParamsMap{width} ) { $Width = $ParamsMap{width}; $ParamsMap{width} = ""; } | |
| 782 if (exists $ParamsMap{display2d} ) { $Display2D = $ParamsMap{display2d}; $ParamsMap{display2d} = ""; } | |
| 783 } | |
| 784 # Start plug-in tag... | |
| 785 $PlugInTags = qq(<embed src="$MolFile" width="$Width" height="$Height" display2d="$Display2D"); | |
| 786 | |
| 787 #Setup other parameters... | |
| 788 for $ParamName (sort keys %ParamsMap) { | |
| 789 $ParamValue = $ParamsMap{$ParamName}; | |
| 790 if (length $ParamValue) { | |
| 791 $PlugInTags .= qq( $ParamName="$ParamValue"); | |
| 792 } | |
| 793 } | |
| 794 | |
| 795 # Finish it off... | |
| 796 $PlugInTags .= qq( >); | |
| 797 | |
| 798 return $PlugInTags; | |
| 799 } | |
| 800 | |
| 801 # Setup Accelrys ViewerActiveX controls... | |
| 802 sub SetupStrViewerAccelrysActiveX { | |
| 803 my($MolFile, $ParamsMapRef, %ParamsMap, $ActiveXTags, $Name, $Width, $Height, $ParamName, $ParamValue); | |
| 804 my($ClassId, $Convert2DTo3D, $Style, $Mouse); | |
| 805 | |
| 806 $ActiveXTags = ""; $ParamsMapRef = ""; %ParamsMap = (); | |
| 807 $Name = "ViewerActiveX"; $Width = $StrViewerWidth; $Height = $StrViewerHeight; | |
| 808 $ClassId = "clsid:90690CB6-BC07-11D4-AEF7-0050DA948176"; | |
| 809 $Convert2DTo3D = "0"; | |
| 810 $Mouse = 4; | |
| 811 | |
| 812 if (@_ == 2) { | |
| 813 ($MolFile, $ParamsMapRef) = @_; | |
| 814 } | |
| 815 else { | |
| 816 ($MolFile) = @_; | |
| 817 } | |
| 818 | |
| 819 if ($ParamsMapRef) { | |
| 820 %ParamsMap = %$ParamsMapRef; | |
| 821 if (exists $ParamsMap{classid} ) { $ClassId = $ParamsMap{classid}; $ParamsMap{classid} = ""; } | |
| 822 if (exists $ParamsMap{name} ) { $Name = $ParamsMap{name}; $ParamsMap{name} = ""; } | |
| 823 if (exists $ParamsMap{height} ) { $Height = $ParamsMap{height}; $ParamsMap{height} = ""; } | |
| 824 if (exists $ParamsMap{width} ) { $Width = $ParamsMap{width}; $ParamsMap{width} = ""; } | |
| 825 if (exists $ParamsMap{Convert2Dto3D} ) { $Convert2DTo3D = $ParamsMap{Convert2Dto3D}; $ParamsMap{Convert2Dto3D} = ""; } | |
| 826 if (exists $ParamsMap{Mouse} ) { $Mouse = $ParamsMap{Mouse}; $ParamsMap{Mouse} = ""; } | |
| 827 if (exists $ParamsMap{bgcolor} ) { | |
| 828 my($BgColor) = $ParamsMap{bgcolor}; | |
| 829 $ParamsMap{bgcolor} = ""; | |
| 830 # Get OLE color value: &aabbggrr& | |
| 831 # Set it to white for now... | |
| 832 $BgColor = "16777215"; | |
| 833 $ParamsMap{BackColor} = "$BgColor"; | |
| 834 } | |
| 835 } | |
| 836 $Style = qq(style="height: ) . $Height . qq(px; width: ) . $Width . qq(px"); | |
| 837 | |
| 838 # Setup object header... | |
| 839 $ActiveXTags = qq(\n<object id="$Name" classid="$ClassId" $Style>\n); | |
| 840 | |
| 841 # Setup molecule data... | |
| 842 $ActiveXTags .= qq(<param name="Source" value="$MolFile">\n<param name="Mouse" value="$Mouse">\n<param name="Convert2Dto3D" value="$Convert2DTo3D">\n); | |
| 843 | |
| 844 #Setup other parameters... | |
| 845 for $ParamName (sort keys %ParamsMap) { | |
| 846 $ParamValue = $ParamsMap{$ParamName}; | |
| 847 if (length $ParamValue) { | |
| 848 $ActiveXTags .= qq(<param name="$ParamName" value="$ParamValue">\n); | |
| 849 } | |
| 850 } | |
| 851 | |
| 852 # Finish it off... | |
| 853 $ActiveXTags .= qq(</object>\n); | |
| 854 | |
| 855 return $ActiveXTags; | |
| 856 } | |
| 857 | |
| 858 # Setup Chem3D ActiveX 8.0 control... | |
| 859 sub SetupStrViewerChem3DActiveX { | |
| 860 my($MolFile, $ParamsMapRef, %ParamsMap, $ActiveXTags, $JavaScriptTags, $ReturnTags, $Name, $Width, $Height, $ParamName, $ParamValue); | |
| 861 my($ClassId, $Style, $DisplayType, $RotationBars, $MovieController, $JSFileName, $UseJavaScript); | |
| 862 | |
| 863 $ActiveXTags = ""; $JavaScriptTags = ""; $ReturnTags = ""; | |
| 864 $ParamsMapRef = ""; %ParamsMap = (); | |
| 865 $Name = "Chem3D"; $Width = $StrViewerWidth; $Height = $StrViewerHeight; | |
| 866 $ClassId = "clsid:B7A6B8E4-3E8B-4D18-8F8F-B4057EFC784B"; | |
| 867 $DisplayType = "Ball&Stick"; | |
| 868 $RotationBars = "false"; | |
| 869 $MovieController = "false"; | |
| 870 | |
| 871 if (@_ == 2) { | |
| 872 ($MolFile, $ParamsMapRef) = @_; | |
| 873 } | |
| 874 else { | |
| 875 ($MolFile) = @_; | |
| 876 } | |
| 877 | |
| 878 if ($ParamsMapRef) { | |
| 879 %ParamsMap = %$ParamsMapRef; | |
| 880 if (exists $ParamsMap{usejavascript} ) { $JSFileName = $ParamsMap{usejavascript}; $UseJavaScript = 1; $ParamsMap{usejavascript} = ""; } | |
| 881 if (exists $ParamsMap{classid} ) { $ClassId = $ParamsMap{classid}; $ParamsMap{classid} = ""; } | |
| 882 if (exists $ParamsMap{name} ) { $Name = $ParamsMap{name}; $ParamsMap{name} = ""; } | |
| 883 if (exists $ParamsMap{height} ) { $Height = $ParamsMap{height}; $ParamsMap{height} = ""; } | |
| 884 if (exists $ParamsMap{width} ) { $Width = $ParamsMap{width}; $ParamsMap{width} = ""; } | |
| 885 if (exists $ParamsMap{displaytype} ) { $DisplayType = $ParamsMap{displaytype}; $ParamsMap{displaytype} = ""; } | |
| 886 if (exists $ParamsMap{rotationbars} ) { $RotationBars = $ParamsMap{rotationbars}; $ParamsMap{rotationbars} = ""; } | |
| 887 if (exists $ParamsMap{moviecontroller} ) { $MovieController = $ParamsMap{moviecontroller}; $ParamsMap{moviecontroller} = ""; } | |
| 888 } | |
| 889 $Style = qq(style="height: ) . $Height . qq(px; width: ) . $Width . qq(px"); | |
| 890 | |
| 891 if ($UseJavaScript) { | |
| 892 #Setup parameters... | |
| 893 my($Params) = ""; | |
| 894 for $ParamName (sort keys %ParamsMap) { | |
| 895 $ParamValue = $ParamsMap{$ParamName}; | |
| 896 if (length $ParamValue) { | |
| 897 $Params .= qq( $ParamName='$ParamValue'); | |
| 898 } | |
| 899 } | |
| 900 $JavaScriptTags = qq(\n<script>\n); | |
| 901 $JavaScriptTags .= qq(c3d_insert3dStr("name='$Name' src='$MolFile' width='$Width' height='$Height' displaytype='$DisplayType' rotation_bars_visible='$RotationBars' movie_controller_visible='$MovieController' $Params");\n); | |
| 902 $JavaScriptTags .= qq(</script>\n); | |
| 903 $ReturnTags = $JavaScriptTags; | |
| 904 } | |
| 905 else { | |
| 906 # Setup object header... | |
| 907 $ActiveXTags = qq(\n<object id="$Name" classid="$ClassId" $Style>\n); | |
| 908 | |
| 909 # Setup molecule data... | |
| 910 $ActiveXTags .= qq(<param name="src" value="$MolFile">\n<param name="displaytype" value="$DisplayType">\n<param name="rotationbars" value="$RotationBars">\n<param name="moviecontroller" value="$MovieController">\n); | |
| 911 | |
| 912 #Setup other parameters... | |
| 913 for $ParamName (sort keys %ParamsMap) { | |
| 914 $ParamValue = $ParamsMap{$ParamName}; | |
| 915 if (length $ParamValue) { | |
| 916 $ActiveXTags .= qq(<param name="$ParamName" value="$ParamValue">\n); | |
| 917 } | |
| 918 } | |
| 919 $ActiveXTags .= qq(</object>\n); | |
| 920 $ReturnTags = $ActiveXTags; | |
| 921 } | |
| 922 return $ReturnTags; | |
| 923 } | |
| 924 | |
| 925 # Setup ChemDraw ActiveX 8.0 control... | |
| 926 # Problems: "bgcolor" parameter doesn't work. | |
| 927 sub SetupStrViewerChemDrawActiveX { | |
| 928 my($MolFile, $ParamsMapRef, %ParamsMap, $ActiveXTags, $JavaScriptTags, $ReturnTags, $Name, $Width, $Height, $ParamName, $ParamValue); | |
| 929 my($ClassId, $Style, $ViewOnly, $ShrinkToFit, $ShowToolsWhenVisible, $JSFileName, $UseJavaScript); | |
| 930 | |
| 931 $ActiveXTags = ""; $JavaScriptTags = ""; $ReturnTags = ""; | |
| 932 $ParamsMapRef = ""; %ParamsMap = (); | |
| 933 $Name = "ChemDraw"; $Width = $StrViewerWidth; $Height = $StrViewerHeight; | |
| 934 $ClassId = "clsid:51A649C4-3E3D-4557-9BD8-B14C0AD44B0C"; | |
| 935 $ViewOnly = "1"; $JavaScriptTags = ""; | |
| 936 $ShrinkToFit = "1"; | |
| 937 $ShowToolsWhenVisible = "1"; | |
| 938 | |
| 939 if (@_ == 2) { | |
| 940 ($MolFile, $ParamsMapRef) = @_; | |
| 941 } | |
| 942 else { | |
| 943 ($MolFile) = @_; | |
| 944 } | |
| 945 | |
| 946 if ($ParamsMapRef) { | |
| 947 %ParamsMap = %$ParamsMapRef; | |
| 948 if (exists $ParamsMap{usejavascript} ) { $JSFileName = $ParamsMap{usejavascript}; $UseJavaScript = 1; $ParamsMap{usejavascript} = ""; } | |
| 949 if (exists $ParamsMap{classid} ) { $ClassId = $ParamsMap{classid}; $ParamsMap{classid} = ""; } | |
| 950 if (exists $ParamsMap{name} ) { $Name = $ParamsMap{name}; $ParamsMap{name} = ""; } | |
| 951 if (exists $ParamsMap{height} ) { $Height = $ParamsMap{height}; $ParamsMap{height} = ""; } | |
| 952 if (exists $ParamsMap{width} ) { $Width = $ParamsMap{width}; $ParamsMap{width} = ""; } | |
| 953 if (exists $ParamsMap{ViewOnly} ) { $ViewOnly = $ParamsMap{ViewOnly}; $ParamsMap{ViewOnly} = ""; } | |
| 954 if (exists $ParamsMap{ShrinkToFit} ) { $ShrinkToFit = $ParamsMap{ShrinkToFit}; $ParamsMap{ShrinkToFit} = ""; } | |
| 955 if (exists $ParamsMap{ShowToolsWhenVisible} ) { $ShowToolsWhenVisible = $ParamsMap{ShowToolsWhenVisible}; $ParamsMap{ShowToolsWhenVisible} = ""; } | |
| 956 } | |
| 957 if ($UseJavaScript) { | |
| 958 #Setup parameter... | |
| 959 my($Params) = ""; | |
| 960 for $ParamName (sort keys %ParamsMap) { | |
| 961 $ParamValue = $ParamsMap{$ParamName}; | |
| 962 if (length $ParamValue) { | |
| 963 $Params .= qq( $ParamName='$ParamValue'); | |
| 964 } | |
| 965 } | |
| 966 $JavaScriptTags = qq(\n<script>\n); | |
| 967 $JavaScriptTags .= qq(cd_insertObjectStr("name='$Name' src='$MolFile' width='$Width' height='$Height' shrinktofit='$ShrinkToFit' viewonly='$ViewOnly' $Params");\n); | |
| 968 $JavaScriptTags .= qq(</script>\n); | |
| 969 $ReturnTags = $JavaScriptTags; | |
| 970 } | |
| 971 else { | |
| 972 $Style = qq(style="height: ) . $Height . qq(px; width: ) . $Width . qq(px"); | |
| 973 | |
| 974 # Setup object header... | |
| 975 $ActiveXTags = qq(\n<object id="$Name" classid="$ClassId" $Style>\n); | |
| 976 | |
| 977 # Setup molecule data... | |
| 978 $ActiveXTags .= qq(<param name="SourceURL" value="$MolFile">\n<param name="ShrinkToFit" value="$ShrinkToFit">\n<param name="ViewOnly" value="$ViewOnly">\n<param name="ShowToolsWhenVisible" value="$ShowToolsWhenVisible">\n); | |
| 979 | |
| 980 #Setup other parameters... | |
| 981 for $ParamName (sort keys %ParamsMap) { | |
| 982 $ParamValue = $ParamsMap{$ParamName}; | |
| 983 if (length $ParamValue) { | |
| 984 $ActiveXTags .= qq(<param name="$ParamName" value="$ParamValue">\n); | |
| 985 } | |
| 986 } | |
| 987 $ActiveXTags .= qq(</object>\n); | |
| 988 $ReturnTags = $ActiveXTags; | |
| 989 } | |
| 990 return $ReturnTags; | |
| 991 } | |
| 992 | |
| 993 # Setup ChemDraw plug-in used for Netscape browsers... | |
| 994 # Problems: "bgcolor" parameter doesn't work. | |
| 995 sub SetupStrViewerChemDrawPlugIn { | |
| 996 my($MolFile, $Name, $ParamsMapRef, %ParamsMap, $Width, $Height, $ParamName, $ParamValue, $PlugInTags, $JavaScriptTags, $ReturnTags,); | |
| 997 my($MimeType, $ViewOnly, $ShrinkToFit, $ShowToolsWhenVisible, $JSFileName, $UseJavaScript); | |
| 998 | |
| 999 $Name = "ChemDraw"; $PlugInTags = ""; $ParamsMapRef = ""; %ParamsMap = (); | |
| 1000 $Width = $StrViewerWidth; $Height = $StrViewerHeight; | |
| 1001 $MimeType = "chemical/x-mdl-molfile"; | |
| 1002 $ViewOnly = "1"; | |
| 1003 $ShrinkToFit = "1"; | |
| 1004 $ShowToolsWhenVisible = "1"; $JavaScriptTags = ""; | |
| 1005 | |
| 1006 if (@_ == 2) { | |
| 1007 ($MolFile, $ParamsMapRef) = @_; | |
| 1008 } | |
| 1009 else { | |
| 1010 ($MolFile) = @_; | |
| 1011 } | |
| 1012 | |
| 1013 if ($ParamsMapRef) { | |
| 1014 %ParamsMap = %$ParamsMapRef; | |
| 1015 if (exists $ParamsMap{usejavascript} ) { $JSFileName = $ParamsMap{usejavascript}; $UseJavaScript = 1; $ParamsMap{usejavascript} = ""; } | |
| 1016 if (exists $ParamsMap{height} ) { $Height = $ParamsMap{height}; $ParamsMap{height} = ""; } | |
| 1017 if (exists $ParamsMap{width} ) { $Width = $ParamsMap{width}; $ParamsMap{width} = ""; } | |
| 1018 if (exists $ParamsMap{type} ) { $MimeType = $ParamsMap{type}; $ParamsMap{type} = ""; } | |
| 1019 if (exists $ParamsMap{viewonly} ) { $ViewOnly = $ParamsMap{viewonly}; $ParamsMap{viewonly} = ""; } | |
| 1020 if (exists $ParamsMap{shrinktofit} ) { $ShrinkToFit = $ParamsMap{shrinktofit}; $ParamsMap{shrinktofit} = ""; } | |
| 1021 if (exists $ParamsMap{showtoolswhenvisible} ) { $ShowToolsWhenVisible = $ParamsMap{showtoolswhenvisible}; $ParamsMap{showtoolswhenvisible} = ""; } | |
| 1022 } | |
| 1023 if ($UseJavaScript) { | |
| 1024 $JavaScriptTags = qq(\n<script>\n); | |
| 1025 $JavaScriptTags .= qq(cd_insertObjectStr("name='$Name' src='$MolFile' type='$MimeType' width='$Width' height='$Height' shrinktofit='$ShrinkToFit' viewonly='$ViewOnly'");\n); | |
| 1026 $JavaScriptTags .= qq(</script>\n); | |
| 1027 $ReturnTags = $JavaScriptTags; | |
| 1028 } | |
| 1029 else { | |
| 1030 # Start plug-in tag... | |
| 1031 $PlugInTags = qq(<embed src="$MolFile" width="$Width" height="$Height" type="$MimeType" viewonly="$ViewOnly" shrinktofit="$ShrinkToFit" showtoolswhenvisible=''$ShowToolsWhenVisible"); | |
| 1032 | |
| 1033 #Setup other parameters... | |
| 1034 for $ParamName (sort keys %ParamsMap) { | |
| 1035 $ParamValue = $ParamsMap{$ParamName}; | |
| 1036 if (length $ParamValue) { | |
| 1037 $PlugInTags .= qq(" $ParamName"="$ParamValue"); | |
| 1038 } | |
| 1039 } | |
| 1040 # Finish it off... | |
| 1041 $PlugInTags .= qq( >); | |
| 1042 $ReturnTags = $PlugInTags; | |
| 1043 } | |
| 1044 | |
| 1045 return $ReturnTags; | |
| 1046 } | |
| 1047 | |
| 1048 | |
| 1049 1; | |
| 1050 | |
| 1051 __END__ | |
| 1052 | |
| 1053 =head1 NAME | |
| 1054 | |
| 1055 HTMLUtil | |
| 1056 | |
| 1057 =head1 SYNOPSIS | |
| 1058 | |
| 1059 use HTMLUtil; | |
| 1060 | |
| 1061 use HTMLUtil qw(:all); | |
| 1062 | |
| 1063 =head1 DESCRIPTION | |
| 1064 | |
| 1065 B<HTMLUtil> module provides the following functions: | |
| 1066 | |
| 1067 InsertHTMLTags, SetupHTMLAlignmentBegin, SetupHTMLAlignmentEnd, | |
| 1068 SetupHTMLButtonRef, SetupHTMLDivBegin, SetupHTMLDivEnd, SetupHTMLEmptyLines, | |
| 1069 SetupHTMLHRef, SetupHTMLPageEnd, SetupHTMLPageHeader, SetupHTMLPageTitle, | |
| 1070 SetupHTMLStyleSheetTags, SetupHTMLTableColumnEnd, SetupHTMLTableColumnHeader, | |
| 1071 SetupHTMLTableEnd, SetupHTMLTableHeader, SetupHTMLTableRowDataValue, | |
| 1072 SetupHTMLTableRowEnd, SetupHTMLTableRowHeader, SetupHTMLTableRowHeaderValue, | |
| 1073 SetupJavaScriptCmds, SetupStrViewerAccelrysActiveX, SetupStrViewerChem3DActiveX, | |
| 1074 SetupStrViewerChemDrawActiveX, SetupStrViewerChemDrawPlugIn, | |
| 1075 SetupStrViewerChimePlugIn, SetupStrViewerJMEApplet, SetupStrViewerJSInitCmd, | |
| 1076 SetupStrViewerJmolApplet, SetupStrViewerMarvinViewApplet | |
| 1077 | |
| 1078 =head2 FUNCTIONS | |
| 1079 | |
| 1080 =over 4 | |
| 1081 | |
| 1082 =item B<InsertHTMLTags> | |
| 1083 | |
| 1084 $NewTag = InsertHTMLTags($Tag, @TagsNameValue); | |
| 1085 | |
| 1086 Inserts tag name and value pair from I<TagsNameValue> into a exisiting I<Tag> as I<TagName = "TagValue"> | |
| 1087 and returns B<NewTag> string. | |
| 1088 | |
| 1089 =item B<SetupHTMLAlignmentBegin> | |
| 1090 | |
| 1091 $AlignmentTag = SetupHTMLAlignmentBegin([$Alignment]); | |
| 1092 | |
| 1093 Returns an alignment begin tag string. Possible I<Alignment> values: I<left, center, or right>. | |
| 1094 Default: I<left>. | |
| 1095 | |
| 1096 =item B<SetupHTMLAlignmentEnd> | |
| 1097 | |
| 1098 $AlignmentTag = SetupHTMLAlignmentBegin([$Alignment]); | |
| 1099 | |
| 1100 Returns an alignment end tag string. | |
| 1101 | |
| 1102 =item B<SetupHTMLButtonRef> | |
| 1103 | |
| 1104 $ButtonTag = SetupHTMLButtonRef($ButtonLabel, $FileName); | |
| 1105 | |
| 1106 Returns a button tag string for associating B<onClick> button event of a button with label I<ButtonLabel> | |
| 1107 to open a file I<FileName>. | |
| 1108 | |
| 1109 =item B<SetupHTMLDivBegin> | |
| 1110 | |
| 1111 $DivTag = SetupHTMLDivBegin($ID); | |
| 1112 | |
| 1113 Returns a div begin tag string for div I<ID>. | |
| 1114 | |
| 1115 =item B<SetupHTMLDivEnd> | |
| 1116 | |
| 1117 $DivTag = SetupHTMLDivEnd(); | |
| 1118 | |
| 1119 Returns a div end tag string. | |
| 1120 | |
| 1121 =item B<SetupHTMLTableEnd> | |
| 1122 | |
| 1123 $TableEndTag = SetupHTMLTableEnd(); | |
| 1124 | |
| 1125 Returns a table end tag string. | |
| 1126 | |
| 1127 =item B<SetupHTMLEmptyLines> | |
| 1128 | |
| 1129 $EmptyLineTags = SetupHTMLEmptyLines([$LineCount]); | |
| 1130 | |
| 1131 Returns an empty lines tag string for empty I<LineCount>. Default line count: I<1>. | |
| 1132 | |
| 1133 =item B<SetupHTMLPageHeader> | |
| 1134 | |
| 1135 $PageHeaderTag = SetupHTMLPageHeader($HeaderTitle, [$Stylesheet, | |
| 1136 $JavaScript]); | |
| 1137 | |
| 1138 Returns a page header tag string using I<HeaderTitle> and using optionally specifed | |
| 1139 values for I<Stylesheet> and I<JavaScript>. | |
| 1140 | |
| 1141 =item B<SetupHTMLHRef> | |
| 1142 | |
| 1143 $HRef = SetupHTMLHRef($Label, $URL, [$Title]); | |
| 1144 | |
| 1145 Returns a HRef tag string for setting up a URL with I<Label> and I<URL> with optional I<Title>. | |
| 1146 | |
| 1147 =item B<SetupHTMLPageEnd> | |
| 1148 | |
| 1149 $PageEndTag = SetupHTMLPageEnd([$FooterMsg]); | |
| 1150 | |
| 1151 Returns a page end tag string conating optional I<FooterMsg>. | |
| 1152 | |
| 1153 =item B<SetupHTMLPageTitle> | |
| 1154 | |
| 1155 $PageTitleTag = SetupHTMLPageTitle($Title, [$Alignment]); | |
| 1156 | |
| 1157 Returns a page title tag string with optional alignment. Valid alignment value: I<left, center, right> | |
| 1158 Default alignment: I<center>. | |
| 1159 | |
| 1160 =item B<SetupHTMLStyleSheetTags> | |
| 1161 | |
| 1162 $StyleSheetTags = SetupHTMLStyleSheetTags(); | |
| 1163 | |
| 1164 Returns a default style sheet tag string to be used for HTML files generated by MayaChemTools. | |
| 1165 | |
| 1166 =item B<SetupHTMLTableHeader> | |
| 1167 | |
| 1168 $TableHeaderTags = SetupHTMLTableHeader([$BorderWidth, | |
| 1169 $CellPadding, $CellSpacing, $Width, $Height]); | |
| 1170 | |
| 1171 Returns a table header tag string containing specified values for I<BorderWidth, CellPadding, CellSpacing, | |
| 1172 Width, and Height>. Default values: I<BorderWidth = 1; CellPadding = 2; CellSpacing = 0; Width = NotUsed; | |
| 1173 Height = NotUsed>. | |
| 1174 | |
| 1175 =item <SetupHTMLTableEnd> | |
| 1176 | |
| 1177 $TableEndTag = SetupHTMLTableEnd(); | |
| 1178 | |
| 1179 Returns a table end tag string. | |
| 1180 | |
| 1181 =item B<SetupHTMLTableColumnHeader> | |
| 1182 | |
| 1183 $ColumnHeaderTag = SetupHTMLTableColumnHeader([$BgColor, $Width]); | |
| 1184 | |
| 1185 Returns a table column header tag string containing specified values for I<BgColor, Width>. Default | |
| 1186 values: I<BgColor = NotUsed; Width = NotUsed>. | |
| 1187 | |
| 1188 =item B<SetupHTMLTableColumnEnd> | |
| 1189 | |
| 1190 $ColumnEndTag = SetupHTMLTableColumnEnd(); | |
| 1191 | |
| 1192 Returns a table column end tag string. | |
| 1193 | |
| 1194 =item B<SetupHTMLTableRowHeader> | |
| 1195 | |
| 1196 $RowHeaderTag = SetupHTMLTableRowHeader([$HAlignment, $BgColor, | |
| 1197 $VAlignment]); | |
| 1198 | |
| 1199 Returns a table row header tag string containing specified values for I<HAlignment, BgColor, and VAlignment>. | |
| 1200 Default values: I<HAlignment = center; $BgColor = NotUsed; $VAlignment = top>. | |
| 1201 | |
| 1202 =item B<SetupHTMLTableRowEnd> | |
| 1203 | |
| 1204 $RowEndTag = SetupHTMLTableRowEnd(); | |
| 1205 | |
| 1206 Returns a table row end tag string. | |
| 1207 | |
| 1208 =item B<SetupHTMLTableRowHeaderValue> | |
| 1209 | |
| 1210 $HeaderValueTag = SetupHTMLTableRowHeaderValue([$Value]); | |
| 1211 | |
| 1212 Returns a table header row tag string using specifed I<Value>. Default value: I<EmptySpace>. | |
| 1213 | |
| 1214 =item B<SetupHTMLTableRowDataValue> | |
| 1215 | |
| 1216 $RowValueTag = SetupHTMLTableRowDataValue([$Value, $BgColor, | |
| 1217 $FontColor, $FontBold]); | |
| 1218 | |
| 1219 Returns a table row column value tag string using specified values for I<Value, BgColor, | |
| 1220 FontColor, and FontBold>. Default values: I<Value = EmptySpace; BgColor = NotUsed; | |
| 1221 FontColor = NotUsed; $FontBold = NotUsed>. | |
| 1222 | |
| 1223 =item B<SetupJavaScriptCmds> | |
| 1224 | |
| 1225 $JSTag = SetupJavaScriptCmds(@JSCmdList); | |
| 1226 | |
| 1227 Returns a Java script tag string using java script commands specified in I<JSCmdList>. | |
| 1228 | |
| 1229 =item B<SetupStrViewerJSInitCmd> | |
| 1230 | |
| 1231 $JSTag = SetupStrViewerJSInitCmd($StrViewerType, $CodeBase); | |
| 1232 | |
| 1233 Returns a Java script command tag string for intializing structure viewers with specified I<CodeBase> | |
| 1234 location for viewers to be invoked as Java Applets. Supported values for I<StrViewerType>: I<Jmol, | |
| 1235 ChemDrawPlugIn, ChemDrawActiveX, Chem3DActiveX>. | |
| 1236 | |
| 1237 =item B<SetupStrViewerJMEApplet> | |
| 1238 | |
| 1239 $JMEAppletTag = SetupStrViewerJMEApplet($MolString, $CodeBase, | |
| 1240 [{param => "value"}]); | |
| 1241 | |
| 1242 Returns a JME tag string for displaying molecule using I<MolString> along with valid optional applet | |
| 1243 parameters specified as name and value pairs. Defaul JME parameter values: I<name = JME; id = JME; | |
| 1244 width = 250; height = 170>. | |
| 1245 | |
| 1246 =item B<SetupStrViewerJmolApplet> | |
| 1247 | |
| 1248 $JmolAppletTag = SetupStrViewerJmolApplet($MolString, $CodeBase, | |
| 1249 [{param => "value"}]); | |
| 1250 | |
| 1251 Returns a JMol tag string for displaying molecule using I<MolString> along with valid optional applet | |
| 1252 parameters specified as name and value pairs. Defaul JMol parameter values: I<name = Jmol; id = Jmol; | |
| 1253 width = 250; height = 170; progressbar = true; progresscolor = 0000ff; bgcolor = 000000; JMolScript = | |
| 1254 select *; set frank off; wireframe on; spacefill off>. | |
| 1255 | |
| 1256 =item B<SetupStrViewerMarvinViewApplet> | |
| 1257 | |
| 1258 $MarvinAppletTag = SetupStrViewerMarvinViewApplet($MolString, | |
| 1259 $CodeBase, [{param => "value"}]); | |
| 1260 | |
| 1261 Returns a MarvinView tag string for displaying molecule using I<MolString> along with valid optional applet | |
| 1262 parameters specified as name and value pairs. Defaul MarvinView parameter values: I<name = MView; id = MView; | |
| 1263 width = 250; height = 170; navmode = zoom>. | |
| 1264 | |
| 1265 =item B<SetupStrViewerChimePlugIn> | |
| 1266 | |
| 1267 $ChimePlugInTag = SetupStrViewerChimePlugIn($MolFile, | |
| 1268 [{param => "value"}]); | |
| 1269 | |
| 1270 Returns a MDL Chime tag string for displaying molecule using I<MolFile> along with valid optional | |
| 1271 parameters specified as name and value pairs. Defaul Chime parameter values: I<width = 250; height = 170; | |
| 1272 display2d = true>. | |
| 1273 | |
| 1274 =item B<SetupStrViewerChem3DActiveX> | |
| 1275 | |
| 1276 $ChemDraw3DActiveXTags = SetupStrViewerChemDrawActiveX($MolFile, | |
| 1277 [{param => "value"}]); | |
| 1278 | |
| 1279 Returns a CambridgeSoft Chem3D tag string for displaying molecule using I<MolFile> along with valid optional | |
| 1280 parameters specified as name and value pairs. Defaul Chime parameter values: I<width = 250; height = 170; | |
| 1281 displaytype = BallAndStick; rotationbars = false; moviecontroller = false>. | |
| 1282 | |
| 1283 =item B<SetupStrViewerChemDrawActiveX> | |
| 1284 | |
| 1285 $ChemDrawActiveXTags = SetupStrViewerChem3DActiveX($MolFile, | |
| 1286 [{param => "value"}]); | |
| 1287 | |
| 1288 Returns a CambridgeSoft ChemDraw ActiveX tag string for displaying molecule using I<MolFile> along with valid optional | |
| 1289 parameters specified as name and value pairs. Defaul ChemDraw ActiveX parameter values: I<width = 250; height = 170; | |
| 1290 ViewOnly = 1; ShrinkToFit = 1; ShowToolsWhenVisible = 1>. | |
| 1291 | |
| 1292 =item B<SetupStrViewerChemDrawPlugIn> | |
| 1293 | |
| 1294 $ChemDrawPlugInTag = SetupStrViewerChemDrawPlugIn($MolFile, | |
| 1295 [{param => "value"}]); | |
| 1296 | |
| 1297 Returns a CambridgeSoft ChemDraw PlugIn tag string for displaying molecule using I<MolFile> along with valid optional | |
| 1298 parameters specified as name and value pairs. Defaul ChemDraw PlugIn parameter values: I<width = 250; height = 170; | |
| 1299 ViewOnly = 1; ShrinkToFit = 1; ShowToolsWhenVisible = 1>. | |
| 1300 | |
| 1301 =item B<SetupStrViewerAccelrysActiveX> | |
| 1302 | |
| 1303 $AccelrysActiveXTags = SetupStrViewerAccelrysActiveX($MolFile, | |
| 1304 [{param => "value"}]); | |
| 1305 | |
| 1306 Returns a Accelrys ViewerActiveX tag string for displaying molecule using I<MolFile> along with valid optional | |
| 1307 parameters specified as name and value pairs. Defaul ViewerActiveX parameter values: I<width = 250; height = 170; | |
| 1308 Convert2Dto3D = 0; Mouse = 4>. | |
| 1309 | |
| 1310 =back | |
| 1311 | |
| 1312 =head1 AUTHOR | |
| 1313 | |
| 1314 Manish Sud <msud@san.rr.com> | |
| 1315 | |
| 1316 =head1 COPYRIGHT | |
| 1317 | |
| 1318 Copyright (C) 2015 Manish Sud. All rights reserved. | |
| 1319 | |
| 1320 This file is part of MayaChemTools. | |
| 1321 | |
| 1322 MayaChemTools is free software; you can redistribute it and/or modify it under | |
| 1323 the terms of the GNU Lesser General Public License as published by the Free | |
| 1324 Software Foundation; either version 3 of the License, or (at your option) | |
| 1325 any later version. | |
| 1326 | |
| 1327 =cut |
