Merge branch 'develop' into bug/JAL-4238_PAEs_not_being_shown_in_JalviewJS
authorBen Soares <b.soares@dundee.ac.uk>
Thu, 23 Nov 2023 15:24:50 +0000 (15:24 +0000)
committerBen Soares <b.soares@dundee.ac.uk>
Thu, 23 Nov 2023 15:24:50 +0000 (15:24 +0000)
133 files changed:
build.gradle
examples/AlphaFold/pae-example.jvp [new file with mode: 0644]
gradle.properties
j11lib/Jmol-NO_LOG4J-16.1.43.jar [moved from j8lib/Jmol-NO_LOG4J-14.31.53.jar with 59% similarity]
j11lib/intervalstore-v1.1.jar [deleted file]
j11lib/intervalstore-v1.2.jar [new file with mode: 0644]
j11lib/miglayout-core-4.2.jar [moved from j8lib/miglayout-4.0-swing.jar with 54% similarity]
j11lib/miglayout-swing-4.2.jar [new file with mode: 0644]
j8lib/Jmol-NO_LOG4J-16.1.43.jar [moved from j11lib/Jmol-NO_LOG4J-14.31.53.jar with 59% similarity]
j8lib/intervalstore-v1.1.jar [deleted file]
j8lib/intervalstore-v1.2.jar [new file with mode: 0644]
j8lib/miglayout-core-4.2.jar [moved from j11lib/miglayout-4.0-swing.jar with 54% similarity]
j8lib/miglayout-swing-4.2.jar [new file with mode: 0644]
src/jalview/bin/Commands.java
src/jalview/bin/Jalview.java
src/jalview/bin/JalviewJS2.java
src/jalview/bin/argparser/ArgParser.java
src/jalview/gui/AnnotationLabels.java
src/jalview/gui/AppJmol.java
src/jalview/gui/CrossRefAction.java
src/jalview/gui/Desktop.java
src/jalview/gui/JvSwingUtils.java
src/jalview/gui/PCAPanel.java
src/jalview/gui/SeqPanel.java
src/jalview/gui/SequenceFetcher.java
src/jalview/gui/StructureChooser.java
src/jalview/gui/StructureViewerBase.java
src/jalview/gui/WsPreferences.java
src/jalview/io/HTMLOutput.java
src/jalview/io/JalviewFileFilter.java
src/jalview/io/JalviewFileView.java
src/jalview/structure/StructureSelectionManager.java
src/jalview/util/IdUtils.java [new file with mode: 0644]
src/jalview/util/Platform.java
src/jalview/util/StringUtils.java
src/jalview/ws/DBRefFetcher.java
src/jalview/ws/datamodel/alphafold/MappableContactMatrix.java
src/jalview/ws/jws2/AbstractJabaCalcWorker.java
src/jalview/ws/jws2/MsaWSThread.java
swingjs/SwingJS-site.zip
swingjs/differences.txt
swingjs/j2s.core.jar [new file with mode: 0644]
swingjs/net.sf.j2s.core-j11.jar
swingjs/net.sf.j2s.core.jar
swingjs/timestamp
swingjs/ver/3.2.10-j11/SwingJS-site.zip [deleted file]
swingjs/ver/3.2.10-j11/net.sf.j2s.core-j11.jar [deleted file]
swingjs/ver/3.2.10-j11/timestamp [deleted file]
swingjs/ver/3.2.10/DEV_NOTES.txt [deleted file]
swingjs/ver/3.2.10/SwingJS-site.zip [deleted file]
swingjs/ver/3.2.10/_j2sclasslist.txt [deleted file]
swingjs/ver/3.2.10/differences.txt [deleted file]
swingjs/ver/3.2.10/net.sf.j2s.core.jar [deleted file]
swingjs/ver/3.2.10/timestamp [deleted file]
swingjs/ver/3.2.5/DEV_NOTES.txt [deleted file]
swingjs/ver/3.2.5/_j2sclasslist.txt [deleted file]
swingjs/ver/3.2.5/differences.txt [deleted file]
swingjs/ver/3.2.5/net.sf.j2s.core.jar [deleted file]
swingjs/ver/3.2.5/timestamp [deleted file]
swingjs/ver/3.2.7/DEV_NOTES.txt [deleted file]
swingjs/ver/3.2.7/SwingJS-site.zip [deleted file]
swingjs/ver/3.2.7/_j2sclasslist.txt [deleted file]
swingjs/ver/3.2.7/net.sf.j2s.core.jar [deleted file]
swingjs/ver/3.2.7/timestamp [deleted file]
swingjs/ver/3.2.8/DEV_NOTES.txt [deleted file]
swingjs/ver/3.2.8/SwingJS-site.zip [deleted file]
swingjs/ver/3.2.8/_j2sclasslist.txt [deleted file]
swingjs/ver/3.2.8/net.sf.j2s.core.jar [deleted file]
swingjs/ver/3.2.8/timestamp [deleted file]
swingjs/ver/3.2.9-j11/DEV_NOTES.txt [deleted file]
swingjs/ver/3.2.9-j11/SwingJS-site.zip [deleted file]
swingjs/ver/3.2.9-j11/_j2sclasslist.txt [deleted file]
swingjs/ver/3.2.9-j11/differences.txt [deleted file]
swingjs/ver/3.2.9-j11/net.sf.j2s.core-j11.jar [deleted file]
swingjs/ver/3.2.9-j11/timestamp [deleted file]
swingjs/ver/3.2.9/DEV_NOTES.txt [deleted file]
swingjs/ver/3.2.9/SwingJS-site.zip [deleted file]
swingjs/ver/3.2.9/_j2sclasslist.txt [deleted file]
swingjs/ver/3.2.9/differences.txt [deleted file]
swingjs/ver/3.2.9/net.sf.j2s.core.jar [deleted file]
swingjs/ver/3.2.9/timestamp [deleted file]
swingjs/ver/3.3.1-j11/SwingJS-site.zip
swingjs/ver/3.3.1-j11/net.sf.j2s.core-j11.jar
swingjs/ver/3.3.1-j11/timestamp
swingjs/ver/3.3.1/SwingJS-site.zip
swingjs/ver/3.3.1/differences.txt
swingjs/ver/3.3.1/net.sf.j2s.core.jar
swingjs/ver/3.3.1/timestamp
swingjs/ver/5.0.1/DEV_NOTES.txt [moved from swingjs/ver/3.2.10-j11/DEV_NOTES.txt with 100% similarity]
swingjs/ver/5.0.1/Jmol-j2s-site.zip [new file with mode: 0644]
swingjs/ver/5.0.1/SwingJS-site.zip [moved from swingjs/ver/3.2.5/SwingJS-site.zip with 55% similarity]
swingjs/ver/5.0.1/_j2sclasslist.txt [moved from swingjs/ver/3.2.10-j11/_j2sclasslist.txt with 100% similarity]
swingjs/ver/5.0.1/differences.txt [moved from swingjs/ver/3.2.10-j11/differences.txt with 82% similarity]
swingjs/ver/5.0.1/j2s.core.jar [new file with mode: 0644]
swingjs/ver/5.0.1/timestamp [new file with mode: 0644]
swingjs/ver/pre-long/DEV_NOTES.txt [deleted file]
swingjs/ver/pre-long/README-pre-long.txt [deleted file]
swingjs/ver/pre-long/SwingJS-site.zip [deleted file]
swingjs/ver/pre-long/_j2sclasslist.txt [deleted file]
swingjs/ver/pre-long/differences.txt [deleted file]
swingjs/ver/pre-long/net.sf.j2s.core.jar [deleted file]
swingjs/ver/pre-long/timestamp [deleted file]
test/jalview/datamodel/features/FeatureStoreTest.java
test/jalview/gui/JvSwingUtilsTest.java
test/jalview/gui/PopupMenuTest.java
test/jalview/io/vcf/VCFLoaderTest.java
test/jalview/util/StringUtilsTest.java
tools/closure-compiler-v20230802.jar [new file with mode: 0644]
tools/closure_compiler.jar [deleted file]
utils/jalviewjs/_j2sclasslist.txt
utils/jalviewjs/chromium_test/jalview_bin_Jalview-stderr.html
utils/jalviewjs/classlists/.gitkeep [new file with mode: 0644]
utils/jalviewjs/classlists/jalview.txt [deleted file]
utils/jalviewjs/classlists/jvexamplefile.txt [deleted file]
utils/jalviewjs/coretemplate.html
utils/jalviewjs/libjs/Jmol-SwingJS-16.1.40.zip [new file with mode: 0644]
utils/jalviewjs/libjs/VARNA-site.zip [deleted file]
utils/jalviewjs/libjs/intervalstore-1.2-site.zip [new file with mode: 0644]
utils/jalviewjs/libjs/intervalstore-site.zip [deleted file]
utils/jalviewjs/libjs/jmol-app.zip [deleted file]
utils/jalviewjs/libjs/varna-3.93-site.zip [new file with mode: 0644]
utils/jalviewjs/site-resources/examples/AF-P00221-F1-model_v4.pdb [new file with mode: 0644]
utils/jalviewjs/site-resources/examples/AF-P00221-F1-predicted_aligned_error_v4.json [new file with mode: 0644]
utils/jalviewjs/site-resources/examples/exampleFile_2_7.jar [new file with mode: 0644]
utils/jalviewjs/site-resources/examples/pae-example.jvp [new file with mode: 0644]
utils/jalviewjs/site-resources/favicon.svg [new file with mode: 0644]
utils/jalviewjs/site-resources/images/jalview_logo_small.svg [new file with mode: 0644]
utils/jalviewjs/site-resources/images/jv.gif [new file with mode: 0644]
utils/jalviewjs/site-resources/jalview_bin_Jalview-corenamespace.html [new file with mode: 0644]
utils/jalviewjs/site-resources/jalview_bin_Jalview-namespace.html [new file with mode: 0644]
utils/jalviewjs/site-resources/jalview_bin_JalviewJS_core.html
utils/jalviewjs/some_commands.txt [new file with mode: 0644]
utils/jalviewjs/template.html

index 3b81404..1475cdb 100644 (file)
@@ -563,6 +563,7 @@ ext {
   }
   jalviewjsTransferSiteLibDir = string("${jalviewjsBuildDir}/tmp/${jalviewjs_site_dir}_lib")
   jalviewjsTransferSiteSwingJsDir = string("${jalviewjsBuildDir}/tmp/${jalviewjs_site_dir}_swingjs")
+  jalviewjsTransferSiteMergeDir = string("${jalviewjsBuildDir}/tmp/${jalviewjs_site_dir}_merge")
   jalviewjsTransferSiteCoreDir = string("${jalviewjsBuildDir}/tmp/${jalviewjs_site_dir}_core")
   jalviewjsJalviewCoreHtmlFile = string("")
   jalviewjsJalviewCoreName = string(jalviewjs_core_name)
@@ -3418,13 +3419,27 @@ task jalviewjsTransferUnzipSwingJs {
 
 
 task jalviewjsTransferUnzipLib {
-  def zipFiles = fileTree(dir: "${jalviewDir}/${jalviewjs_libjs_dir}", include: "*.zip")
+  def zipFiles = fileTree(dir: "${jalviewDir}/${jalviewjs_libjs_dir}", include: "*.zip").sort()
 
   doLast {
     zipFiles.each { file_zip -> 
       copy {
         from zipTree(file_zip)
         into "${jalviewDir}/${jalviewjsTransferSiteLibDir}"
+
+        // The following replace() is needed due to a mismatch in Jmol calls to
+        // colorPtToFFRGB$javajs_util_T3d when only colorPtToFFRGB$javajs_util_T3 is defined
+        // in the SwingJS.zip (github or the one distributed with JSmol)
+        if (file_zip.getName().startsWith("Jmol-SwingJS")) {
+          filter { line ->
+            def l = ""
+            while(!line.equals(l)) {
+              line = line.replace('colorPtToFFRGB$javajs_util_T3d', 'colorPtToFFRGB$javajs_util_T3')
+              l = line
+            }
+            return line
+          }
+        }
       }
     }
   }
@@ -3435,8 +3450,8 @@ task jalviewjsTransferUnzipLib {
 
 
 task jalviewjsTransferUnzipAllLibs {
-  dependsOn jalviewjsTransferUnzipSwingJs
   dependsOn jalviewjsTransferUnzipLib
+  dependsOn jalviewjsTransferUnzipSwingJs
 }
 
 
@@ -3479,7 +3494,8 @@ task jalviewjsEclipseSetup {
 
 task jalviewjsSyncAllLibs (type: Sync) {
   dependsOn jalviewjsTransferUnzipAllLibs
-  def inputFiles = fileTree(dir: "${jalviewDir}/${jalviewjsTransferSiteLibDir}")
+  def inputFiles = []
+  inputFiles += fileTree(dir: "${jalviewDir}/${jalviewjsTransferSiteLibDir}")
   inputFiles += fileTree(dir: "${jalviewDir}/${jalviewjsTransferSiteSwingJsDir}")
   def outputDir = "${jalviewDir}/${jalviewjsSiteDir}"
 
@@ -3494,7 +3510,7 @@ task jalviewjsSyncAllLibs (type: Sync) {
     include "**"
   }
 
-  // should this be exclude really ?
+  // should this be exclude really ? No, swingjs dir should be transferred last (and overwrite)
   duplicatesStrategy "INCLUDE"
 
   outputs.files outputFiles
@@ -3686,6 +3702,71 @@ DEBUG: ${eclipseDebug}
 }
 
 
+task jalviewjsTranserSiteMergeLibDirs (type: Sync) {
+  dependsOn jalviewjsTransferUnzipAllLibs
+  dependsOn jalviewjsTransferUnzipSwingJs
+  dependsOn jalviewjsTranspile
+
+  def inputFiles = fileTree(dir: "${jalviewDir}/${jalviewjsTransferSiteLibDir}")
+  // merge swingjs lib last
+  inputFiles += fileTree(dir: "${jalviewDir}/${jalviewjsTransferSiteSwingJsDir}")
+
+  def outputDir = "${jalviewDir}/${jalviewjsTransferSiteMergeDir}"
+
+  from inputFiles
+  into outputDir
+  def outputFiles = []
+  rename { filename ->
+    outputFiles += "${outputDir}/${filename}"
+    null
+  }
+
+  exclude "**/*.html"
+  exclude "**/*.htm"
+
+  // should this be exclude really ? No, swingjs dir should be transferred last (and overwrite)
+  duplicatesStrategy "INCLUDE"
+
+  outputs.files outputFiles
+  inputs.files inputFiles
+}
+
+
+task jalviewjsTranserSiteMergeSwingDir (type: Sync) {
+  dependsOn jalviewjsTransferUnzipAllLibs
+  dependsOn jalviewjsTransferUnzipSwingJs
+  dependsOn jalviewjsTranspile
+
+  // merge jalview files very last
+  def inputFiles = fileTree(dir: "${jalviewDir}/${jalviewjsTransferSiteJsDir}")
+
+  def outputDir = "${jalviewDir}/${jalviewjsTransferSiteMergeDir}"
+
+  from inputFiles
+  into outputDir
+  def outputFiles = []
+  rename { filename ->
+    outputFiles += "${outputDir}/${filename}"
+    null
+  }
+  preserve {
+    include "**"
+  }
+
+  // should this be exclude really ? No, jalview dir should be transferred last (and overwrite)
+  duplicatesStrategy "INCLUDE"
+
+  outputs.files outputFiles
+  inputs.files inputFiles
+}
+
+
+task jalviewjsTranserSiteMergeDirs {
+  dependsOn jalviewjsTranserSiteMergeLibDirs
+  dependsOn jalviewjsTranserSiteMergeSwingDir
+}
+
+
 def jalviewjsCallCore(String name, FileCollection list, String prefixFile, String suffixFile, String jsfile, String zjsfile, File logOutFile, Boolean logOutConsole) {
 
   def stdout = new ByteArrayOutputStream()
@@ -3700,6 +3781,7 @@ def jalviewjsCallCore(String name, FileCollection list, String prefixFile, Strin
 
   def coreTop = file(prefixFile)
   def coreBottom = file(suffixFile)
+  def missingFiles = []
   coreFile.getParentFile().mkdirs()
   coreFile.createNewFile()
   coreFile.write( coreTop.getText("UTF-8") )
@@ -3713,6 +3795,7 @@ def jalviewjsCallCore(String name, FileCollection list, String prefixFile, Strin
       msg = "...file '"+f.getPath()+"' does not exist, skipping"
       println(msg)
       logOutFile.append(msg+"\n")
+      missingFiles += f
     }
   }
   coreFile.append( coreBottom.getText("UTF-8") )
@@ -3727,7 +3810,7 @@ def jalviewjsCallCore(String name, FileCollection list, String prefixFile, Strin
     classpath = files(["${jalviewDir}/${jalviewjs_closure_compiler}"])
     main = "com.google.javascript.jscomp.CommandLineRunner"
     jvmArgs = [ "-Dfile.encoding=UTF-8" ]
-    args = [ "--compilation_level", "SIMPLE_OPTIMIZATIONS", "--warning_level", "QUIET", "--charset", "UTF-8", "--js", jsfile, "--js_output_file", zjsfile ]
+    args = [ "--compilation_level", jalviewjs_closure_compiler_optimization_level, "--warning_level", "QUIET", "--charset", "UTF-8", "--js", jsfile, "--js_output_file", zjsfile ]
     maxHeapSize = "2g"
 
     msg = "\nRunning '"+commandLine.join(' ')+"'\n"
@@ -3755,6 +3838,11 @@ def jalviewjsCallCore(String name, FileCollection list, String prefixFile, Strin
     }
   }
   msg = "--"
+  if (missingFiles.size() > 0) {
+    msg += "\n!!! These files were listed but missing:\n"
+    missingFiles.each { file -> msg += "!!!  " + file.getPath() + "\n" }
+    msg = "--"
+  }
   println(msg)
   logOutFile.append(msg+"\n")
 }
@@ -3763,13 +3851,12 @@ def jalviewjsCallCore(String name, FileCollection list, String prefixFile, Strin
 task jalviewjsBuildAllCores {
   group "JalviewJS"
   description "Build the core js lib closures listed in the classlists dir"
-  dependsOn jalviewjsTranspile
-  dependsOn jalviewjsTransferUnzipSwingJs
+  dependsOn jalviewjsTranserSiteMergeDirs
 
-  def j2sDir = "${jalviewDir}/${jalviewjsTransferSiteJsDir}/${jalviewjs_j2s_subdir}"
-  def swingJ2sDir = "${jalviewDir}/${jalviewjsTransferSiteSwingJsDir}/${jalviewjs_j2s_subdir}"
-  def libJ2sDir = "${jalviewDir}/${jalviewjsTransferSiteLibDir}/${jalviewjs_j2s_subdir}"
-  def jsDir = "${jalviewDir}/${jalviewjsTransferSiteSwingJsDir}/${jalviewjs_js_subdir}"
+  def j2sDir = "${jalviewDir}/${jalviewjsTransferSiteMergeDir}/${jalviewjs_j2s_subdir}"
+  def swingJ2sDir = "${jalviewDir}/${jalviewjsTransferSiteMergeDir}/${jalviewjs_j2s_subdir}"
+  def libJ2sDir = "${jalviewDir}/${jalviewjsTransferSiteMergeDir}/${jalviewjs_j2s_subdir}"
+  def jsDir = "${jalviewDir}/${jalviewjsTransferSiteMergeDir}/${jalviewjs_js_subdir}"
   def outputDir = "${jalviewDir}/${jalviewjsTransferSiteCoreDir}/${jalviewjs_j2s_subdir}/core"
   def prefixFile = "${jsDir}/core/coretop2.js"
   def suffixFile = "${jsDir}/core/corebottom2.js"
@@ -3830,19 +3917,6 @@ task jalviewjsBuildAllCores {
     outputs.file(zjsfile)
   }
   
-  // _stevesoft core. add any cores without a classlist here (and the inputs and outputs)
-  def stevesoftClasslistName = "_stevesoft"
-  def stevesoftClasslist = [
-    'jsfile': "${outputDir}/core${stevesoftClasslistName}.js",
-    'zjsfile': "${outputDir}/core${stevesoftClasslistName}.z.js",
-    'list': fileTree(dir: j2sDir, include: "com/stevesoft/pat/**/*.js"),
-    'name': stevesoftClasslistName
-  ]
-  jalviewjsCoreClasslists += stevesoftClasslist
-  inputs.files(stevesoftClasslist['list'])
-  outputs.file(stevesoftClasslist['jsfile'])
-  outputs.file(stevesoftClasslist['zjsfile'])
-
   // _all core
   def allClasslistName = "_all"
   def allJsFiles = fileTree(dir: j2sDir, include: "**/*.js")
@@ -3919,6 +3993,7 @@ def jalviewjsPublishCoreTemplate(String coreName, String templateName, File inpu
 
 task jalviewjsPublishCoreTemplates {
   dependsOn jalviewjsBuildAllCores
+
   def inputFileName = "${jalviewDir}/${j2s_coretemplate_html}"
   def inputFile = file(inputFileName)
   def outputDir = "${jalviewDir}/${jalviewjsTransferSiteCoreDir}"
@@ -3943,6 +4018,7 @@ task jalviewjsPublishCoreTemplates {
 task jalviewjsSyncCore (type: Sync) {
   dependsOn jalviewjsBuildAllCores
   dependsOn jalviewjsPublishCoreTemplates
+
   def inputFiles = fileTree(dir: "${jalviewDir}/${jalviewjsTransferSiteCoreDir}")
   def outputDir = "${jalviewDir}/${jalviewjsSiteDir}"
 
@@ -3962,8 +4038,18 @@ task jalviewjsSyncCore (type: Sync) {
 
 
 // this Copy version of TransferSiteJs will delete anything else in the target dir
+task jalviewjsCopyTransferSiteMergeDir(type: Copy) {
+  dependsOn jalviewjsTranserSiteMergeDirs
+
+  from "${jalviewDir}/${jalviewjsTransferSiteMergeDir}"
+  into "${jalviewDir}/${jalviewjsSiteDir}"
+}
+
+
+// this Copy version of TransferSiteJs will delete anything else in the target dir
 task jalviewjsCopyTransferSiteJs(type: Copy) {
   dependsOn jalviewjsTranspile
+
   from "${jalviewDir}/${jalviewjsTransferSiteJsDir}"
   into "${jalviewDir}/${jalviewjsSiteDir}"
 }
@@ -3994,7 +4080,7 @@ jalviewjsSyncBuildProperties.mustRunAfter jalviewjsSyncTransferSiteJs
 task jalviewjsPrepareSite {
   group "JalviewJS"
   description "Prepares the website folder including unzipping files and copying resources"
-  dependsOn jalviewjsSyncAllLibs
+  //dependsOn jalviewjsSyncAllLibs // now using jalviewjsCopyTransferSiteMergeDir
   dependsOn jalviewjsSyncResources
   dependsOn jalviewjsSyncSiteResources
   dependsOn jalviewjsSyncBuildProperties
@@ -4005,7 +4091,7 @@ task jalviewjsPrepareSite {
 task jalviewjsBuildSite {
   group "JalviewJS"
   description "Builds the whole website including transpiled code"
-  dependsOn jalviewjsCopyTransferSiteJs
+  dependsOn jalviewjsCopyTransferSiteMergeDir
   dependsOn jalviewjsPrepareSite
 }
 
@@ -4335,12 +4421,14 @@ task jalviewjsLaunchTest {
       execStdout = stdout
       execStderr = stderr
     }
-    def execArgs = [
+    // macOS not running properly with timeout arguments
+    def execArgs = macOS ? [] : [
+      "--virtual-time-budget=${timeoutms}",
+    ]
+    execArgs += [
       "--no-sandbox", // --no-sandbox IS USED BY THE THORIUM APPIMAGE ON THE BUILDSERVER
       "--headless=new",
       "--disable-gpu",
-      "--timeout=${timeoutms}",
-      "--virtual-time-budget=${timeoutms}",
       "--user-data-dir=${jalviewDirAbsolutePath}/${jalviewjsBuildDir}/${jalviewjs_chromium_user_dir}",
       "--profile-directory=${jalviewjs_chromium_profile_name}",
       "--allow-file-access-from-files",
diff --git a/examples/AlphaFold/pae-example.jvp b/examples/AlphaFold/pae-example.jvp
new file mode 100644 (file)
index 0000000..ae1d8b3
Binary files /dev/null and b/examples/AlphaFold/pae-example.jvp differ
index 79fb11d..d9d7427 100644 (file)
@@ -259,15 +259,16 @@ j2s_coretemplate_html = utils/jalviewjs/coretemplate.html
 jalviewjs_j2s_transpile_stdout = j2s-transpile.out
 #jalviewjs_j2s_stderr = j2s-transpile.err # all going into out
 jalviewjs_j2s_to_console = true
-jalviewjs_closure_compiler = tools/closure_compiler.jar
+jalviewjs_closure_compiler = tools/closure-compiler-v20230802.jar
+jalviewjs_closure_compiler_optimization_level = SIMPLE_OPTIMIZATIONS
 jalviewjs_j2s_closure_stdout = j2s-closure.out
 
 # for checking jalviewjs launches okay
 jalviewjs_chromium_binary = ~/buildtools/chromium/chrome
-jalviewjs_macos_chromium_binary = /Applications/Chromium.app/Contents/MacOS/Chromium
+jalviewjs_macos_chromium_binary = ~/buildtools/chromium/Google Chrome for Testing.app/Contents/MacOS/Google Chrome for Testing
 jalviewjs_chromium_user_dir = chromium
-jalviewjs_chromium_idle_timeout = 10
-jalviewjs_chromium_overall_timeout = 40
+jalviewjs_chromium_idle_timeout = 8
+jalviewjs_chromium_overall_timeout = 15
 jalviewjs_chromium_profile_name = BUILD
 jalviewjs_stderr_launch = utils/jalviewjs/chromium_test/jalview_bin_Jalview-stderr.html
 jalviewjs_desktop_init_string = JALVIEWJS: CREATED DESKTOP
similarity index 59%
rename from j8lib/Jmol-NO_LOG4J-14.31.53.jar
rename to j11lib/Jmol-NO_LOG4J-16.1.43.jar
index ff69d31..b3770af 100644 (file)
Binary files a/j8lib/Jmol-NO_LOG4J-14.31.53.jar and b/j11lib/Jmol-NO_LOG4J-16.1.43.jar differ
diff --git a/j11lib/intervalstore-v1.1.jar b/j11lib/intervalstore-v1.1.jar
deleted file mode 100644 (file)
index 668b543..0000000
Binary files a/j11lib/intervalstore-v1.1.jar and /dev/null differ
diff --git a/j11lib/intervalstore-v1.2.jar b/j11lib/intervalstore-v1.2.jar
new file mode 100644 (file)
index 0000000..fdd0ee7
Binary files /dev/null and b/j11lib/intervalstore-v1.2.jar differ
similarity index 54%
rename from j8lib/miglayout-4.0-swing.jar
rename to j11lib/miglayout-core-4.2.jar
index 7b6a22c..eff5670 100644 (file)
Binary files a/j8lib/miglayout-4.0-swing.jar and b/j11lib/miglayout-core-4.2.jar differ
diff --git a/j11lib/miglayout-swing-4.2.jar b/j11lib/miglayout-swing-4.2.jar
new file mode 100644 (file)
index 0000000..25307d8
Binary files /dev/null and b/j11lib/miglayout-swing-4.2.jar differ
similarity index 59%
rename from j11lib/Jmol-NO_LOG4J-14.31.53.jar
rename to j8lib/Jmol-NO_LOG4J-16.1.43.jar
index bc3c77f..b3770af 100644 (file)
Binary files a/j11lib/Jmol-NO_LOG4J-14.31.53.jar and b/j8lib/Jmol-NO_LOG4J-16.1.43.jar differ
diff --git a/j8lib/intervalstore-v1.1.jar b/j8lib/intervalstore-v1.1.jar
deleted file mode 100644 (file)
index 668b543..0000000
Binary files a/j8lib/intervalstore-v1.1.jar and /dev/null differ
diff --git a/j8lib/intervalstore-v1.2.jar b/j8lib/intervalstore-v1.2.jar
new file mode 100644 (file)
index 0000000..fdd0ee7
Binary files /dev/null and b/j8lib/intervalstore-v1.2.jar differ
similarity index 54%
rename from j11lib/miglayout-4.0-swing.jar
rename to j8lib/miglayout-core-4.2.jar
index 7b6a22c..eff5670 100644 (file)
Binary files a/j11lib/miglayout-4.0-swing.jar and b/j8lib/miglayout-core-4.2.jar differ
diff --git a/j8lib/miglayout-swing-4.2.jar b/j8lib/miglayout-swing-4.2.jar
new file mode 100644 (file)
index 0000000..25307d8
Binary files /dev/null and b/j8lib/miglayout-swing-4.2.jar differ
index 475eba2..b451ac1 100644 (file)
@@ -75,6 +75,8 @@ import jalview.structure.StructureSelectionManager;
 import jalview.util.ColorUtils;
 import jalview.util.FileUtils;
 import jalview.util.HttpUtils;
+import jalview.util.IdUtils;
+import jalview.util.IdUtils.IdType;
 import jalview.util.ImageMaker;
 import jalview.util.ImageMaker.TYPE;
 import jalview.util.MessageManager;
@@ -216,7 +218,7 @@ public class Commands
     if (avm.containsArg(Arg.APPEND) || avm.containsArg(Arg.OPEN))
     {
       commandArgsProvided = true;
-      final long progress = System.currentTimeMillis();
+      final long progress = IdUtils.newId(IdType.PROGRESS);
 
       boolean first = true;
       boolean progressBarSet = false;
@@ -489,8 +491,9 @@ public class Commands
         }
       }
       if (progressBarSet && desktop != null)
+      {
         desktop.setProgressBar(null, progress);
-
+      }
     }
 
     // open the structure (from same PDB file or given PDBfile)
@@ -655,30 +658,36 @@ public class Commands
             }
             continue;
           }
-          try
+
+          /**
+           * @j2sIgnore no Thread.sleep(long)
+           */
           {
-            long tries = 1000;
-            while (structureViewer.isBusy() && tries > 0)
+            try
             {
-              Thread.sleep(25);
-              if (structureViewer.isBusy())
+              int tries = 1000;
+              while (structureViewer.isBusy() && tries > 0)
               {
-                tries--;
-                Console.debug(
-                        "Waiting for viewer for " + structureFilepath);
+                Thread.sleep(25);
+                if (structureViewer.isBusy())
+                {
+                  tries--;
+                  Console.debug(
+                          "Waiting for viewer for " + structureFilepath);
+                }
               }
-            }
-            if (tries == 0 && structureViewer.isBusy())
+              if (tries == 0 && structureViewer.isBusy())
+              {
+                addWarn("Gave up waiting for structure viewer to load file '"
+                        + structureFile
+                        + "'. Something may have gone wrong.");
+              }
+            } catch (Exception x)
             {
-              addWarn("Gave up waiting for structure viewer to load file '"
-                      + structureFile
-                      + "'. Something may have gone wrong.");
+              addError("Exception whilst waiting for structure viewer "
+                      + structureFilepath, x);
+              isError = true;
             }
-          } catch (Exception x)
-          {
-            addError("Exception whilst waiting for structure viewer "
-                    + structureFilepath, x);
-            isError = true;
           }
 
           // add StructureViewer to svMap list
index e343b0f..d0a8be3 100755 (executable)
@@ -40,6 +40,7 @@ import java.security.PermissionCollection;
 import java.security.Permissions;
 import java.security.Policy;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Locale;
@@ -100,6 +101,8 @@ import jalview.schemes.ColourSchemeI;
 import jalview.schemes.ColourSchemeProperty;
 import jalview.util.ChannelProperties;
 import jalview.util.HttpUtils;
+import jalview.util.IdUtils;
+import jalview.util.IdUtils.IdType;
 import jalview.util.LaunchUtils;
 import jalview.util.MessageManager;
 import jalview.util.Platform;
@@ -206,7 +209,7 @@ public class Jalview implements JalviewObjectI
     public void addFetcher(final AlignFrame af,
             final Vector<String> dasSources)
     {
-      final long id = System.currentTimeMillis();
+      final long id = IdUtils.newId(IdType.PROGRESS);
       queued++;
       final FeatureFetcher us = this;
       new Thread(new Runnable()
@@ -307,6 +310,10 @@ public class Jalview implements JalviewObjectI
     {
       System.setSecurityManager(null);
     }
+    else
+    {
+      setJ2sInfo();
+    }
 
     if (args == null || args.length == 0 || (args.length == 1
             && (args[0] == null || args[0].length() == 0)))
@@ -553,9 +560,8 @@ public class Jalview implements JalviewObjectI
       if (aparser.contains("help") || aparser.contains("h"))
       {
         /*
-         * Now using new usage statement.
-        showUsage();
-        */
+         * Now using new usage statement. showUsage();
+         */
         Console.outPrintln(Arg.usage());
         Jalview.exit(null, ExitCode.OK);
       }
@@ -657,8 +663,8 @@ public class Jalview implements JalviewObjectI
       setLookAndFeel();
 
     /*
-     * configure 'full' SO model if preferences say to, else use the default (full SO)
-     * - as JS currently doesn't have OBO parsing, it must use 'Lite' version
+     * configure 'full' SO model if preferences say to, else use the default (full
+     * SO) - as JS currently doesn't have OBO parsing, it must use 'Lite' version
      */
     boolean soDefault = !Platform.isJS();
     if (Cache.getDefault("USE_FULL_SO", soDefault))
@@ -837,36 +843,40 @@ public class Jalview implements JalviewObjectI
     }
 
     // Run Commands from cli
-    cmds = new Commands(argparser, headlessArg);
-    cmds.processArgs();
-    boolean commandsSuccess = cmds.argsWereParsed();
-
-    if (commandsSuccess)
+    boolean commandsSuccess = false;
+    if (!(argparser.isMixedStyle() || argparser.isOldStyle()))
     {
-      if (headlessArg)
+      cmds = new Commands(argparser, headlessArg);
+      cmds.processArgs();
+      commandsSuccess = cmds.argsWereParsed();
+
+      if (commandsSuccess)
       {
-        if (argparser.getBoolean(Arg.NOQUIT))
+        if (headlessArg)
         {
-          Console.warn(
-                  "Completed " + Arg.HEADLESS.getName() + " commands, but "
-                          + Arg.NOQUIT + " is set so not quitting!");
-        }
-        else
-        {
-          Jalview.exit("Successfully completed commands in headless mode",
-                  ExitCode.OK);
+          if (argparser.getBoolean(Arg.NOQUIT))
+          {
+            Console.warn("Completed " + Arg.HEADLESS.getName()
+                    + " commands, but " + Arg.NOQUIT
+                    + " is set so not quitting!");
+          }
+          else
+          {
+            Jalview.exit("Successfully completed commands in headless mode",
+                    ExitCode.OK);
+          }
         }
+        Console.info("Successfully completed commands");
       }
-      Console.info("Successfully completed commands");
-    }
-    else
-    {
-      if (headlessArg)
+      else
       {
-        Jalview.exit("Error when running Commands in headless mode",
-                ExitCode.ERROR_RUNNING_COMMANDS);
+        if (headlessArg)
+        {
+          Jalview.exit("Error when running Commands in headless mode",
+                  ExitCode.ERROR_RUNNING_COMMANDS);
+        }
+        Console.warn("Error when running commands");
       }
-      Console.warn("Error when running commands");
     }
 
     // Check if JVM and compile version might cause problems and log if it
@@ -907,7 +917,7 @@ public class Jalview implements JalviewObjectI
         desktop.setProgressBar(
                 MessageManager
                         .getString("status.processing_commandline_args"),
-                progress = System.currentTimeMillis());
+                progress = IdUtils.newId(IdType.PROGRESS));
       }
       Console.outPrintln("CMD [-open " + file + "] executed successfully!");
 
@@ -1556,13 +1566,10 @@ public class Jalview implements JalviewObjectI
             ChannelProperties.getProperty("app_name"));
     System.setProperty("apple.laf.useScreenMenuBar", "true");
     /*
-     * broken native LAFs on (ARM?) macbooks
-    set = setQuaquaLookAndFeel();
-    if ((!set) || !UIManager.getLookAndFeel().getClass().toString()
-            .toLowerCase(Locale.ROOT).contains("quaqua"))
-    {
-      set = setVaquaLookAndFeel();
-    }
+     * broken native LAFs on (ARM?) macbooks set = setQuaquaLookAndFeel(); if
+     * ((!set) || !UIManager.getLookAndFeel().getClass().toString()
+     * .toLowerCase(Locale.ROOT).contains("quaqua")) { set = setVaquaLookAndFeel();
+     * }
      */
     set = setFlatLookAndFeel();
     return set;
@@ -1581,49 +1588,50 @@ public class Jalview implements JalviewObjectI
   }
 
   /*
-  private static void showUsage()
-  {
-    jalview.bin.Console.outPrintln(
-            "Usage: jalview -open [FILE] [OUTPUT_FORMAT] [OUTPUT_FILE]\n\n"
-                    + "-nodisplay\tRun Jalview without User Interface.\n"
-                    + "-props FILE\tUse the given Jalview properties file instead of users default.\n"
-                    + "-colour COLOURSCHEME\tThe colourscheme to be applied to the alignment\n"
-                    + "-annotations FILE\tAdd precalculated annotations to the alignment.\n"
-                    + "-tree FILE\tLoad the given newick format tree file onto the alignment\n"
-                    + "-features FILE\tUse the given file to mark features on the alignment.\n"
-                    + "-fasta FILE\tCreate alignment file FILE in Fasta format.\n"
-                    + "-clustal FILE\tCreate alignment file FILE in Clustal format.\n"
-                    + "-pfam FILE\tCreate alignment file FILE in PFAM format.\n"
-                    + "-msf FILE\tCreate alignment file FILE in MSF format.\n"
-                    + "-pileup FILE\tCreate alignment file FILE in Pileup format\n"
-                    + "-pir FILE\tCreate alignment file FILE in PIR format.\n"
-                    + "-blc FILE\tCreate alignment file FILE in BLC format.\n"
-                    + "-json FILE\tCreate alignment file FILE in JSON format.\n"
-                    + "-jalview FILE\tCreate alignment file FILE in Jalview format.\n"
-                    + "-png FILE\tCreate PNG image FILE from alignment.\n"
-                    + "-svg FILE\tCreate SVG image FILE from alignment.\n"
-                    + "-html FILE\tCreate HTML file from alignment.\n"
-                    + "-biojsMSA FILE\tCreate BioJS MSA Viewer HTML file from alignment.\n"
-                    + "-imgMap FILE\tCreate HTML file FILE with image map of PNG image.\n"
-                    + "-eps FILE\tCreate EPS file FILE from alignment.\n"
-                    + "-questionnaire URL\tQueries the given URL for information about any Jalview user questionnaires.\n"
-                    + "-noquestionnaire\tTurn off questionnaire check.\n"
-                    + "-nonews\tTurn off check for Jalview news.\n"
-                    + "-nousagestats\tTurn off analytics tracking for this session.\n"
-                    + "-sortbytree OR -nosortbytree\tEnable or disable sorting of the given alignment by the given tree\n"
-                    // +
-                    // "-setprop PROPERTY=VALUE\tSet the given Jalview property,
-                    // after all other properties files have been read\n\t
-                    // (quote the 'PROPERTY=VALUE' pair to ensure spaces are
-                    // passed in correctly)"
-                    + "-jabaws URL\tSpecify URL for Jabaws services (e.g. for a local installation).\n"
-                    + "-fetchfrom nickname\tQuery nickname for features for the alignments and display them.\n"
-                    + "-groovy FILE\tExecute groovy script in FILE, after all other arguments have been processed (if FILE is the text 'STDIN' then the file will be read from STDIN)\n"
-                    + "-jvmmempc=PERCENT\tOnly available with standalone executable jar or jalview.bin.Launcher. Limit maximum heap size (memory) to PERCENT% of total physical memory detected. This defaults to 90 if total physical memory can be detected. See https://www.jalview.org/help/html/memory.html for more details.\n"
-                    + "-jvmmemmax=MAXMEMORY\tOnly available with standalone executable jar or jalview.bin.Launcher. Limit maximum heap size (memory) to MAXMEMORY. MAXMEMORY can be specified in bytes, kilobytes(k), megabytes(m), gigabytes(g) or if you're lucky enough, terabytes(t). This defaults to 32g if total physical memory can be detected, or to 8g if total physical memory cannot be detected. See https://www.jalview.org/help/html/memory.html for more details.\n"
-                    + "\n~Read documentation in Application or visit https://www.jalview.org for description of Features and Annotations file~\n\n");
-  }
-  */
+   * private static void showUsage() { jalview.bin.Console.outPrintln(
+   * "Usage: jalview -open [FILE] [OUTPUT_FORMAT] [OUTPUT_FILE]\n\n" +
+   * "-nodisplay\tRun Jalview without User Interface.\n" +
+   * "-props FILE\tUse the given Jalview properties file instead of users default.\n"
+   * + "-colour COLOURSCHEME\tThe colourscheme to be applied to the alignment\n" +
+   * "-annotations FILE\tAdd precalculated annotations to the alignment.\n" +
+   * "-tree FILE\tLoad the given newick format tree file onto the alignment\n" +
+   * "-features FILE\tUse the given file to mark features on the alignment.\n" +
+   * "-fasta FILE\tCreate alignment file FILE in Fasta format.\n" +
+   * "-clustal FILE\tCreate alignment file FILE in Clustal format.\n" +
+   * "-pfam FILE\tCreate alignment file FILE in PFAM format.\n" +
+   * "-msf FILE\tCreate alignment file FILE in MSF format.\n" +
+   * "-pileup FILE\tCreate alignment file FILE in Pileup format\n" +
+   * "-pir FILE\tCreate alignment file FILE in PIR format.\n" +
+   * "-blc FILE\tCreate alignment file FILE in BLC format.\n" +
+   * "-json FILE\tCreate alignment file FILE in JSON format.\n" +
+   * "-jalview FILE\tCreate alignment file FILE in Jalview format.\n" +
+   * "-png FILE\tCreate PNG image FILE from alignment.\n" +
+   * "-svg FILE\tCreate SVG image FILE from alignment.\n" +
+   * "-html FILE\tCreate HTML file from alignment.\n" +
+   * "-biojsMSA FILE\tCreate BioJS MSA Viewer HTML file from alignment.\n" +
+   * "-imgMap FILE\tCreate HTML file FILE with image map of PNG image.\n" +
+   * "-eps FILE\tCreate EPS file FILE from alignment.\n" +
+   * "-questionnaire URL\tQueries the given URL for information about any Jalview user questionnaires.\n"
+   * + "-noquestionnaire\tTurn off questionnaire check.\n" +
+   * "-nonews\tTurn off check for Jalview news.\n" +
+   * "-nousagestats\tTurn off analytics tracking for this session.\n" +
+   * "-sortbytree OR -nosortbytree\tEnable or disable sorting of the given alignment by the given tree\n"
+   * // + // "-setprop PROPERTY=VALUE\tSet the given Jalview property, // after
+   * all other properties files have been read\n\t // (quote the 'PROPERTY=VALUE'
+   * pair to ensure spaces are // passed in correctly)" +
+   * "-jabaws URL\tSpecify URL for Jabaws services (e.g. for a local installation).\n"
+   * +
+   * "-fetchfrom nickname\tQuery nickname for features for the alignments and display them.\n"
+   * +
+   * "-groovy FILE\tExecute groovy script in FILE, after all other arguments have been processed (if FILE is the text 'STDIN' then the file will be read from STDIN)\n"
+   * +
+   * "-jvmmempc=PERCENT\tOnly available with standalone executable jar or jalview.bin.Launcher. Limit maximum heap size (memory) to PERCENT% of total physical memory detected. This defaults to 90 if total physical memory can be detected. See https://www.jalview.org/help/html/memory.html for more details.\n"
+   * +
+   * "-jvmmemmax=MAXMEMORY\tOnly available with standalone executable jar or jalview.bin.Launcher. Limit maximum heap size (memory) to MAXMEMORY. MAXMEMORY can be specified in bytes, kilobytes(k), megabytes(m), gigabytes(g) or if you're lucky enough, terabytes(t). This defaults to 32g if total physical memory can be detected, or to 8g if total physical memory cannot be detected. See https://www.jalview.org/help/html/memory.html for more details.\n"
+   * +
+   * "\n~Read documentation in Application or visit https://www.jalview.org for description of Features and Annotations file~\n\n"
+   * ); }
+   */
 
   private static void startUsageStats(final Desktop desktop)
   {
@@ -2091,4 +2099,105 @@ public class Jalview implements JalviewObjectI
     }
   }
 
+  /**
+   * To be populated by Info={} hash set by instantiating JalviewJS
+   */
+  private Map<String, String> j2sInfo = null;
+
+  /**
+   * The non-j2s_-prefixed parameters to store
+   */
+  private final String[] j2sSavedKeys = { "main", "core", "width", "height",
+      "serverURL", "j2sPath", "console" };
+
+  /**
+   * The prefix for non-named keys in the Info={} block
+   */
+  private static final String j2sParameterPrefix = "j2s_";
+
+  /**
+   * The Info key name for namespacing (query string parameters, class and id
+   * values)
+   */
+  private static final String j2sNamespaceKey = j2sParameterPrefix
+          + "namespace";
+
+  /**
+   * Get a value passed in from the Info={} hash. key should NOT use the
+   * namespace prefix.
+   * 
+   * @param key
+   *          key name without the j2s_ namespace in the Info={} hash.
+   * @return value value from the Info={} hash.
+   */
+  public String getJ2sInfoValue(String key)
+  {
+    if (j2sInfo == null || key == null)
+    {
+      return null;
+    }
+    String j2sKey = Arrays.asList(j2sSavedKeys).contains(key) ? key
+            : j2sParameterPrefix + key;
+    return j2sInfo.get(j2sKey);
+  }
+
+  /**
+   * Get and save parameters and values from the Info={} hash.
+   */
+  public void setJ2sInfo()
+  {
+    if (!Platform.isJS())
+    {
+      return;
+    }
+    j2sInfo = new HashMap<>();
+    String key = null;
+    String val = null;
+    /**
+     * @j2sNative if (J2S.thisApplet.__Info !== undefined) {
+     * 
+     *            Object.entries(J2S.thisApplet.__Info).forEach( entry => {
+     * 
+     *            key = entry[0];
+     * 
+     *            val = entry[1];
+     */
+    if (key != null && (key.startsWith(j2sParameterPrefix)
+            || Arrays.asList(j2sSavedKeys).contains(key)))
+    {
+      j2sInfo.put(key, val);
+
+      if (key.equals(j2sNamespaceKey))
+      {
+        setJ2sNamespace(val);
+      }
+    }
+    /**
+     * @j2sNative }
+     * 
+     *            );
+     * 
+     *            }
+     */
+  }
+
+  /**
+   * Namespace (if set) by JalviewJS
+   */
+  private String j2sNamespace = null;
+
+  private void setJ2sNamespace(String ns)
+  {
+    if (!Platform.isJS())
+    {
+      return;
+    }
+    Console.outPrintln("j2sNamespace set to '" + ns + "'");
+    j2sNamespace = ns;
+  }
+
+  public String getJ2sNamespace()
+  {
+    return j2sNamespace;
+  }
 }
index b0a9ba0..579cfbb 100644 (file)
  */
 package jalview.bin;
 
-import jalview.util.Platform;
-
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 
 import javax.swing.Timer;
 
+import jalview.util.Platform;
+
 /**
  * Entry point for JalviewJS development.
  * 
@@ -44,8 +44,7 @@ public class JalviewJS2
      * @j2sNative
      * 
      *            J2S.thisApplet.__Info.args =
-     *            ["open","examples/uniref50.fa","features",
-     *            "examples/exampleFeatures.txt"];
+     *            ["--open","examples/exampleFile_2_7.jar"];
      */
   }
 
index 155f69e..43082e3 100644 (file)
@@ -194,6 +194,15 @@ public class ArgParser
    */
   private boolean allStructures = false;
 
+  /**
+   * flag to say whether to ignore or reject non-string values args with a value
+   * e.g., --wrap=hello
+   * 
+   * Default is false (i.e. reject non-string args that have a value. It is set
+   * to true for JalviewJS in Platform.getURLCommandArguments().
+   */
+  private static boolean ignoreNonStringValues = false;
+
   protected static final Map<String, Arg> argMap;
 
   protected Map<String, ArgValuesMap> linkedArgs = new HashMap<>();
@@ -469,11 +478,20 @@ public class ArgParser
         }
         if (!a.hasOption(Opt.STRING) && equalPos > -1)
         {
-          // set --argname=value when arg does not accept values
-          Console.error("Argument '" + a.argString()
-                  + "' does not expect a value (given as '" + arg
-                  + "').  Ignoring.");
-          continue;
+          if (getIgnoreNonStringValues())
+          {
+            // delete equals sign and value
+            val = null;
+            arg = arg.substring(0, equalPos);
+          }
+          else
+          {
+            // set --argname=value when arg does not accept values
+            Console.error("Argument '" + a.argString()
+                    + "' does not expect a value (given as '" + arg
+                    + "').  Ignoring.");
+            continue;
+          }
         }
         if (!a.hasOption(Opt.LINKED) && linkedId != null)
         {
@@ -1290,4 +1308,13 @@ public class ArgParser
     this.currentStructureFilename = s;
   }
 
+  public static boolean getIgnoreNonStringValues()
+  {
+    return ignoreNonStringValues;
+  }
+
+  public static void setIgnoreNonStringValues(boolean b)
+  {
+    ignoreNonStringValues = b;
+  }
 }
\ No newline at end of file
index 6b98944..1c1602c 100755 (executable)
@@ -65,6 +65,8 @@ import jalview.datamodel.SequenceI;
 import jalview.io.FileFormat;
 import jalview.io.FormatAdapter;
 import jalview.util.Comparison;
+import jalview.util.IdUtils;
+import jalview.util.IdUtils.IdType;
 import jalview.util.MessageManager;
 import jalview.util.Platform;
 
@@ -565,7 +567,7 @@ public class AnnotationLabels extends JPanel
                         MessageManager.formatMessage(
                                 "action.clustering_matrix_for",
                                 cm.getAnnotDescr(), 5f),
-                        progBar = System.currentTimeMillis());
+                        progBar = IdUtils.newId(IdType.PROGRESS));
                 cm.setGroupSet(GroupSet.makeGroups(cm, true));
                 cm.randomlyReColourGroups();
                 cm.transferGroupColorsTo(alignmentAnnotation);
index 0aa4878..0f2a00e 100644 (file)
@@ -357,11 +357,15 @@ public class AppJmol extends StructureViewerBase
     {
       try
       {
-        Console.debug("Waiting around for jmb notify.");
         waitTotal += waitFor;
-
-        // Thread.sleep() throws an exception in JS
-        Thread.sleep(waitFor);
+        /**
+         * @j2sIgnore no Thread.sleep()
+         */
+        {
+          Console.debug("Waiting around for jmb notify.");
+          // Thread.sleep() throws an exception in JS
+          Thread.sleep(waitFor);
+        }
       } catch (Exception e)
       {
       }
index 93a4006..9580ef8 100644 (file)
  */
 package jalview.gui;
 
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
 import jalview.analysis.AlignmentUtils;
 import jalview.analysis.CrossRef;
 import jalview.api.AlignmentViewPanel;
@@ -37,18 +43,14 @@ import jalview.ext.ensembl.EnsemblMap;
 import jalview.io.gff.SequenceOntologyI;
 import jalview.structure.StructureSelectionManager;
 import jalview.util.DBRefUtils;
+import jalview.util.IdUtils;
+import jalview.util.IdUtils.IdType;
 import jalview.util.MapList;
 import jalview.util.MappingUtils;
 import jalview.util.MessageManager;
 import jalview.viewmodel.seqfeatures.FeatureRendererModel;
 import jalview.ws.SequenceFetcher;
 
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
 /**
  * Factory constructor and runnable for discovering and displaying
  * cross-references for a set of aligned sequences
@@ -76,10 +78,10 @@ public class CrossRefAction implements Runnable
   @Override
   public void run()
   {
-    final long sttime = System.currentTimeMillis();
+    final long id = IdUtils.newId(IdType.PROGRESS);
     alignFrame.setProgressBar(MessageManager.formatMessage(
             "status.searching_for_sequences_from", new Object[]
-            { source }), sttime);
+            { source }), id);
     try
     {
       AlignmentI alignment = alignFrame.getViewport().getAlignment();
@@ -237,7 +239,7 @@ public class CrossRefAction implements Runnable
     {
       alignFrame.setProgressBar(MessageManager.formatMessage(
               "status.finished_searching_for_sequences_from", new Object[]
-              { source }), sttime);
+              { source }), id);
     }
   }
 
index 35c7818..ad989af 100644 (file)
@@ -141,6 +141,8 @@ import jalview.structure.StructureSelectionManager;
 import jalview.urls.IdOrgSettings;
 import jalview.util.BrowserLauncher;
 import jalview.util.ChannelProperties;
+import jalview.util.IdUtils;
+import jalview.util.IdUtils.IdType;
 import jalview.util.ImageMaker.TYPE;
 import jalview.util.LaunchUtils;
 import jalview.util.MessageManager;
@@ -448,8 +450,8 @@ public class Desktop extends jalview.jbgui.GDesktop
       if (LaunchUtils.getJavaVersion() >= 11)
       {
         /*
-         * Send this message to stderr as the warning that follows (due to
-         * reflection) also goes to stderr.
+         * Send this message to stderr as the warning that follows (due to reflection)
+         * also goes to stderr.
          */
         jalview.bin.Console.errPrintln(
                 "Linux platform only! You may have the following warning next: \"WARNING: An illegal reflective access operation has occurred\"\nThis is expected and cannot be avoided, sorry about that.");
@@ -549,12 +551,10 @@ public class Desktop extends jalview.jbgui.GDesktop
             Platform.isJS() ? desktop.getDesktopManager()
                     : new DefaultDesktopManager()));
     /*
-    (Platform.isWindowsAndNotJS() ? new DefaultDesktopManager()
-            : Platform.isAMacAndNotJS()
-                    ? new AquaInternalFrameManager(
-                            desktop.getDesktopManager())
-                    : desktop.getDesktopManager())));
-                    */
+     * (Platform.isWindowsAndNotJS() ? new DefaultDesktopManager() :
+     * Platform.isAMacAndNotJS() ? new AquaInternalFrameManager(
+     * desktop.getDesktopManager()) : desktop.getDesktopManager())));
+     */
 
     Rectangle dims = getLastKnownDimensions("");
     if (dims != null)
@@ -656,6 +656,103 @@ public class Desktop extends jalview.jbgui.GDesktop
 
     if (Platform.isJS())
     {
+      final String ns = Jalview.getInstance().getJ2sNamespace();
+      if (ns != null)
+      {
+        final String jalviewjsDesktopElementId = "testApplet_LayeredPaneUI_10_8div";
+        final String nsc = ns + (ns.length() > 0 ? ":" : "");
+        final String nsu = ns + (ns.length() > 0 ? "_" : "");
+        final String splashId = nsc + "jalviewjsSplash";
+        final String splashClassActive = nsu + "jalviewjsSplashActive";
+        final String splashClassInactive = nsu + "jalviewjsSplashInactive";
+        final String splashClassHidden = nsu + "jalviewjsSplashHidden";
+        final String j2s_overflow = Jalview.getInstance()
+                .getJ2sInfoValue("overflow");
+        /**
+         * @j2sNative // splash element disappearance
+         * 
+         *            var splashElement = document.getElementById(splashId);
+         * 
+         *            if (splashElement !== undefined) {
+         * 
+         *            splashElement.classList.remove(splashClassActive);
+         * 
+         *            splashElement.classList.add(splashClassInactive);
+         * 
+         *            function sleep(ms) {
+         * 
+         *            return new Promise(resolve => setTimeout(resolve, ms));
+         * 
+         *            }
+         * 
+         *            async function hideSplash() {
+         * 
+         *            await sleep(5000);
+         * 
+         *            splashElement.classList.add(splashClassHidden);
+         * 
+         *            }
+         * 
+         *            hideSplash();
+         * 
+         *            }
+         * 
+         *            // overflow setting
+         * 
+         *            async function changeVisibility() {
+         * 
+         *            var desktopElement = null;
+         * 
+         *            var timeCount = 0;
+         * 
+         *            var setCount = 0;
+         * 
+         *            var stayedSetCount = 0;
+         * 
+         *            while ((desktopElement == null || setCount < 5) &&
+         *            timeCount < 50 && stayedSetCount < 5) {
+         * 
+         *            await sleep(100);
+         * 
+         *            if (desktopElement == null) {
+         * 
+         *            desktopElement =
+         *            document.getElementById(jalviewjsDesktopElementId);
+         * 
+         *            }
+         * 
+         *            if (desktopElement !== undefined && desktopElement !==
+         *            null) {
+         * 
+         *            if (desktopElement.style.overflow == "hidden") {
+         * 
+         *            desktopElement.style.overflow = "visible";
+         * 
+         *            setCount++;
+         * 
+         *            stayedSetCount = 0;
+         * 
+         *            } else {
+         * 
+         *            stayedSetCount++;
+         * 
+         *            }
+         * 
+         *            }
+         * 
+         *            timeCount++;
+         * 
+         *            }
+         * 
+         *            }
+         * 
+         *            if (new String(j2s_overflow).substring(0,4) === "true") {
+         * 
+         *            changeVisibility();
+         * 
+         *            }
+         */
+      }
       // used for jalviewjsTest
       jalview.bin.Console.info("JALVIEWJS: CREATED DESKTOP");
     }
@@ -759,11 +856,12 @@ public class Desktop extends jalview.jbgui.GDesktop
         @Override
         public void run()
         {
-          long now = System.currentTimeMillis();
+          long progressId = IdUtils.newId(IdType.PROGRESS);
           Desktop.instance.setProgressBar(
-                  MessageManager.getString("status.refreshing_news"), now);
+                  MessageManager.getString("status.refreshing_news"),
+                  progressId);
           jvnews.refreshNews();
-          Desktop.instance.setProgressBar(null, now);
+          Desktop.instance.setProgressBar(null, progressId);
           jvnews.showNews();
         }
       }).start();
@@ -1285,7 +1383,7 @@ public class Desktop extends jalview.jbgui.GDesktop
       }
     }
     evt.dropComplete(success); // need this to ensure input focus is properly
-                               // transfered to any new windows created
+    // transfered to any new windows created
   }
 
   /**
@@ -1970,7 +2068,8 @@ public class Desktop extends jalview.jbgui.GDesktop
           // TODO: refactor to Jalview desktop session controller action.
           setProgressBar(MessageManager.formatMessage(
                   "label.saving_jalview_project", new Object[]
-                  { chosenFile.getName() }), chosenFile.hashCode());
+                  { chosenFile.getName() }),
+                  IdUtils.newId(IdType.PROGRESS, chosenFile));
           Cache.setProperty("LAST_DIRECTORY", chosenFile.getParent());
           // TODO catch and handle errors for savestate
           // TODO prevent user from messing with the Desktop whilst we're saving
@@ -2004,7 +2103,7 @@ public class Desktop extends jalview.jbgui.GDesktop
                     MessageManager.getString("label.couldnt_save_project"),
                     JvOptionPane.WARNING_MESSAGE);
           }
-          setProgressBar(null, chosenFile.hashCode());
+          setProgressBar(null, IdUtils.newId(IdType.PROGRESS, chosenFile));
         }
       }).start();
     }
@@ -2039,8 +2138,8 @@ public class Desktop extends jalview.jbgui.GDesktop
     JalviewFileChooser chooser = new JalviewFileChooser(
             Cache.getProperty("LAST_DIRECTORY"), suffix, desc,
             "Jalview Project", true, BackupFiles.getEnabled()); // last two
-                                                                // booleans:
-                                                                // allFiles,
+    // booleans:
+    // allFiles,
     // allowBackupFiles
     chooser.setFileView(new JalviewFileView());
     chooser.setDialogTitle(MessageManager.getString("label.restore_state"));
@@ -3122,7 +3221,7 @@ public class Desktop extends jalview.jbgui.GDesktop
           {
             progress.setProgressBar(MessageManager
                     .formatMessage("status.opening_params", new Object[]
-                    { url }), this.hashCode());
+                    { url }), IdUtils.newId(IdType.PROGRESS, this));
           }
           jalview.util.BrowserLauncher.openURL(url);
         } catch (Exception ex)
@@ -3137,7 +3236,8 @@ public class Desktop extends jalview.jbgui.GDesktop
         }
         if (progress != null)
         {
-          progress.setProgressBar(null, this.hashCode());
+          progress.setProgressBar(null,
+                  IdUtils.newId(IdType.PROGRESS, this));
         }
       }
     }).start();
index e7f992d..f0fd3a8 100644 (file)
@@ -70,22 +70,48 @@ public final class JvSwingUtils
   {
     Objects.requireNonNull(ttext,
             "Tootip text to format must not be null!");
-    ttext = ttext.trim();
+    if (enclose)
+    {
+      ttext = ttext.trim();
+    }
     boolean maxLengthExceeded = false;
 
-    if (ttext.contains("<br>"))
+    boolean hasBr = false;
+    for (String br : new String[] { "<br>", "<br/>" })
     {
-      String[] htmllines = ttext.split("<br>");
-      for (String line : htmllines)
+      if (ttext.contains(br))
       {
-        maxLengthExceeded = line.length() > 60;
-        if (maxLengthExceeded)
+        hasBr = true;
+        String[] htmllines = ttext.split(br);
+        StringBuilder sb = new StringBuilder();
+        for (String line : htmllines)
         {
-          break;
+          if (enclose)
+          {
+            line = line.replaceAll("\\s+", " ");
+            line = line.trim();
+          }
+          if (line.length() == 0 || line.equals(" "))
+          {
+            continue;
+          }
+          String linetext = line.replaceAll("<[^>]+>", "");
+          maxLengthExceeded = linetext.length() > 60;
+          if (sb.length() > 0)
+          {
+            sb.append(br);
+          }
+          sb.append(line);
         }
+        ttext = sb.toString();
       }
     }
-    else
+    if (enclose)
+    {
+      ttext = ttext.replaceAll("\\s+", " ");
+      ttext = ttext.trim();
+    }
+    if (!hasBr)
     {
       maxLengthExceeded = ttext.length() > 60;
     }
@@ -101,7 +127,7 @@ public final class JvSwingUtils
             // + "<style> p.ttip {width:350px;margin:-14px 0px -14px
             // 0px;padding:2px;overflow-wrap:break-word;}"
             // + "</style><p class=\"ttip\">"
-            + ttext + " </div>"
+            + ttext + "</div>"
             // + "</p>"
             + ((enclose ? "</html>" : ""));
   }
index 576f3b2..44a65ba 100644 (file)
@@ -52,6 +52,8 @@ import jalview.gui.JalviewColourChooser.ColourChooserListener;
 import jalview.io.exceptions.ImageOutputException;
 import jalview.jbgui.GPCAPanel;
 import jalview.math.RotatableMatrix.Axis;
+import jalview.util.IdUtils;
+import jalview.util.IdUtils.IdType;
 import jalview.util.ImageMaker;
 import jalview.util.MessageManager;
 import jalview.viewmodel.AlignmentViewport;
@@ -174,7 +176,7 @@ public class PCAPanel extends GPCAPanel
   public void run()
   {
     working = true;
-    long progId = System.currentTimeMillis();
+    long progId = IdUtils.newId(IdType.PROGRESS);
     IProgressIndicator progress = this;
     String message = MessageManager.getString("label.pca_recalculating");
     if (getParent() == null)
@@ -419,6 +421,7 @@ public class PCAPanel extends GPCAPanel
     }
   }
 
+  @Override
   public void makePCAImage(ImageMaker.TYPE type)
   {
     int width = getRotatableCanvas().getWidth();
index 2caea17..bf36325 100644 (file)
@@ -1188,7 +1188,7 @@ public class SeqPanel extends JPanel
       }
       if (unshownFeatures > 0)
       {
-        tooltipText.append("<br/>").append("... ").append("<i>")
+        tooltipText.append("<br/>... <i>")
                 .append(MessageManager.formatMessage(
                         "label.features_not_shown", unshownFeatures))
                 .append("</i>");
index 137655f..77bac76 100755 (executable)
@@ -55,6 +55,8 @@ import jalview.fts.service.uniprot.UniprotFTSPanel;
 import jalview.io.FileFormatI;
 import jalview.io.gff.SequenceOntologyI;
 import jalview.util.DBRefUtils;
+import jalview.util.IdUtils;
+import jalview.util.IdUtils.IdType;
 import jalview.util.MessageManager;
 import jalview.util.Platform;
 import jalview.ws.seqfetcher.DbSourceProxy;
@@ -571,7 +573,7 @@ public class SequenceFetcher extends JPanel implements Runnable
                 "status.fetching_sequence_queries_from", new String[]
                 { Integer.valueOf(nqueries).toString(),
                     proxy.getDbName() }),
-                Thread.currentThread().hashCode());
+                IdUtils.newId(IdType.PROGRESS, Thread.currentThread()));
         if (proxy.getMaximumQueryCount() == 1)
         {
           /*
@@ -667,7 +669,7 @@ public class SequenceFetcher extends JPanel implements Runnable
       }
       guiWindow.setProgressBar(
               MessageManager.getString("status.finshed_querying"),
-              Thread.currentThread().hashCode());
+              IdUtils.newId(IdType.PROGRESS, Thread.currentThread()));
     }
     guiWindow
             .setProgressBar(
@@ -675,7 +677,7 @@ public class SequenceFetcher extends JPanel implements Runnable
                             ? MessageManager
                                     .getString("status.parsing_results")
                             : MessageManager.getString("status.processing"),
-                    Thread.currentThread().hashCode());
+                    IdUtils.newId(IdType.PROGRESS, Thread.currentThread()));
     // process results
     while (presult.size() > 0)
     {
@@ -683,7 +685,8 @@ public class SequenceFetcher extends JPanel implements Runnable
               preferredFeatureColours);
     }
     // only remove visual delay after we finished parsing.
-    guiWindow.setProgressBar(null, Thread.currentThread().hashCode());
+    guiWindow.setProgressBar(null,
+            IdUtils.newId(IdType.PROGRESS, Thread.currentThread()));
     if (nextFetch.size() > 0)
     {
       StringBuffer sb = new StringBuffer();
index 666ff74..21b380d 100644 (file)
@@ -78,6 +78,8 @@ import jalview.jbgui.GStructureChooser;
 import jalview.structure.StructureImportSettings.TFType;
 import jalview.structure.StructureMapping;
 import jalview.structure.StructureSelectionManager;
+import jalview.util.IdUtils;
+import jalview.util.IdUtils.IdType;
 import jalview.util.MessageManager;
 import jalview.util.Platform;
 import jalview.util.StringUtils;
@@ -308,7 +310,7 @@ public class StructureChooser extends GStructureChooser
    */
   public void promptForTDBFetch(boolean ignoreGui)
   {
-    final long progressId = System.currentTimeMillis();
+    final long progressId = IdUtils.newId(IdType.PROGRESS);
 
     // final action after prompting and discovering db refs
     final Runnable strucDiscovery = new Runnable()
@@ -1249,7 +1251,7 @@ public class StructureChooser extends GStructureChooser
 
     final String progress = MessageManager
             .getString("label.working_ellipsis");
-    setProgressBar(progress, progress.hashCode());
+    setProgressBar(progress, IdUtils.newId(IdType.PROGRESS, progress));
     Runnable viewStruc = new Runnable()
     {
       @Override
@@ -1354,7 +1356,8 @@ public class StructureChooser extends GStructureChooser
           @Override
           public void run()
           {
-            setProgressBar("Complete.", progress.hashCode());
+            setProgressBar("Complete.",
+                    IdUtils.newId(IdType.PROGRESS, progress));
             closeAction(preferredHeight);
             mainFrame.dispose();
           }
index bd757e8..1f39b54 100644 (file)
@@ -66,6 +66,8 @@ import jalview.schemes.ColourSchemes;
 import jalview.structure.StructureMapping;
 import jalview.structures.models.AAStructureBindingModel;
 import jalview.util.BrowserLauncher;
+import jalview.util.IdUtils;
+import jalview.util.IdUtils.IdType;
 import jalview.util.MessageManager;
 import jalview.ws.dbsources.EBIAlfaFold;
 import jalview.ws.dbsources.Pdb;
@@ -226,11 +228,13 @@ public abstract class StructureViewerBase extends GStructureViewer
    * 
    * @return TRUE if the view is NOT being coloured by the alignment colours.
    */
+  @Override
   public boolean isColouredByViewer()
   {
     return !getBinding().isColourBySequence();
   }
 
+  @Override
   public String getViewId()
   {
     if (viewId == null)
@@ -393,6 +397,7 @@ public abstract class StructureViewerBase extends GStructureViewer
     }
   }
 
+  @Override
   public abstract ViewerType getViewerType();
 
   /**
@@ -1185,7 +1190,7 @@ public abstract class StructureViewerBase extends GStructureViewer
   {
     // TODO would rather have startProgress/stopProgress as the
     // IProgressIndicator interface
-    long tm = random.nextLong();
+    long tm = IdUtils.newId(IdType.PROGRESS);
     if (progressBar != null)
     {
       progressBar.setProgressBar(msg, tm);
@@ -1280,8 +1285,7 @@ public abstract class StructureViewerBase extends GStructureViewer
     EBIAlfaFold afclient = new EBIAlfaFold();
     AlignmentI pdbseq = null;
     String pdbid = processingEntry.getId();
-    long handle = System.currentTimeMillis()
-            + Thread.currentThread().hashCode();
+    long handle = IdUtils.newId(IdType.PROGRESS);
 
     /*
      * Write 'fetching PDB' progress on AlignFrame as we are not yet visible
@@ -1358,6 +1362,7 @@ public abstract class StructureViewerBase extends GStructureViewer
    * 
    * @return
    */
+  @Override
   public File saveSession()
   {
     if (getBinding() == null)
index e37f77c..ea3dd0d 100644 (file)
@@ -39,6 +39,8 @@ import javax.swing.table.TableCellRenderer;
 
 import jalview.bin.Cache;
 import jalview.jbgui.GWsPreferences;
+import jalview.util.IdUtils;
+import jalview.util.IdUtils.IdType;
 import jalview.util.MessageManager;
 import jalview.ws.jws2.Jws2Discoverer;
 import jalview.ws.rest.RestServiceDescription;
@@ -614,7 +616,7 @@ public class WsPreferences extends GWsPreferences
         @Override
         public void run()
         {
-          long ct = System.currentTimeMillis();
+          long ct = IdUtils.newId(IdType.PROGRESS);
           Desktop.instance.setProgressBar(MessageManager
                   .getString("status.refreshing_web_service_menus"), ct);
           if (lastrefresh != update)
index 0b541e2..711c465 100644 (file)
@@ -35,6 +35,8 @@ import jalview.datamodel.AlignmentExportData;
 import jalview.gui.AlignmentPanel;
 import jalview.gui.IProgressIndicator;
 import jalview.io.exceptions.ImageOutputException;
+import jalview.util.IdUtils;
+import jalview.util.IdUtils.IdType;
 import jalview.util.MessageManager;
 
 public abstract class HTMLOutput implements Runnable
@@ -68,7 +70,7 @@ public abstract class HTMLOutput implements Runnable
     this.ap = ap;
     this.pIndicator = ap.alignFrame;
     this.description = desc;
-    this.pSessionId = System.currentTimeMillis();
+    this.pSessionId = IdUtils.newId(IdType.PROGRESS);
   }
 
   /**
index 5e9a242..d9d609c 100755 (executable)
@@ -126,22 +126,44 @@ public class JalviewFileFilter extends FileFilter
     return false;
   }
 
-  public String getExtension(File f)
+  public static String getExtension(File f)
   {
-    if (f != null)
+    if (f == null)
+    {
+      return "";
+    }
+    String ext = getExtension(f.getName(), true, true);
+    return ext;
+  }
+
+  public static String getExtension(String filename, boolean ignoreGz,
+          boolean emptyStringForNoExtension)
+  {
+    if (filename == null)
     {
-      String filename = f.getName();
-      int i = filename.lastIndexOf('.');
+      return emptyStringForNoExtension ? "" : null;
+    }
+    int i = filename.lastIndexOf('.');
 
-      if ((i > 0) && (i < (filename.length() - 1)))
+    // i>0 as we don't consider a file ".hidden" to be an extension of "hidden"
+    // i<(filename.length()-1) since we don't consider a file "hi." to have an
+    // extension
+    if (i > 0 && i < (filename.length() - 1))
+    {
+      String ext = filename.substring(i + 1).toLowerCase(Locale.ROOT);
+      if (ignoreGz && ext.equals("gz"))
       {
-        return filename.substring(i + 1).toLowerCase(Locale.ROOT);
+        // don't allow .gz all the way down! (only one in fact)
+        return getExtension(filename.substring(0, i), false,
+                emptyStringForNoExtension);
+      }
+      else
+      {
+        return ext;
       }
-
-      ;
     }
 
-    return "";
+    return emptyStringForNoExtension ? "" : null;
   }
 
   public void addExtension(String extension)
index 5996781..d010013 100755 (executable)
  */
 package jalview.io;
 
-import java.util.Locale;
-
-import jalview.util.MessageManager;
-
 import java.io.File;
 import java.net.URL;
 import java.util.HashMap;
 import java.util.Iterator;
+import java.util.Locale;
 import java.util.Map;
 
 import javax.swing.Icon;
 import javax.swing.ImageIcon;
 import javax.swing.filechooser.FileView;
 
+import jalview.util.MessageManager;
+
 public class JalviewFileView extends FileView
 {
   private static Map<String, String> extensions;
@@ -131,16 +130,13 @@ public class JalviewFileView extends FileView
    */
   public static String getExtension(File f)
   {
-    String ext = null;
-    String s = f.getName();
-    int i = s.lastIndexOf('.');
-
-    if ((i > 0) && (i < (s.length() - 1)))
+    // don't set an icon for folders (that's flatlaf's job!)
+    if (f.isDirectory())
     {
-      ext = s.substring(i + 1).toLowerCase(Locale.ROOT);
+      return null;
     }
-
-    return ext;
+    // ignore .gz and want null for no extension
+    return JalviewFileFilter.getExtension(f.getName(), true, false);
   }
 
   /**
index ec3e0a0..0356828 100644 (file)
@@ -54,6 +54,8 @@ import jalview.io.AppletFormatAdapter;
 import jalview.io.DataSourceType;
 import jalview.io.StructureFile;
 import jalview.structure.StructureImportSettings.TFType;
+import jalview.util.IdUtils;
+import jalview.util.IdUtils.IdType;
 import jalview.util.MappingUtils;
 import jalview.util.MessageManager;
 import jalview.util.Platform;
@@ -437,7 +439,7 @@ public class StructureSelectionManager
           IProgressIndicator progress, TFType tft, String paeFilename,
           boolean doXferSettings)
   {
-    long progressSessionId = System.currentTimeMillis() * 3;
+    long progressSessionId = IdUtils.newId(IdType.PROGRESS);
 
     /**
      * do we extract and transfer annotation from 3D data ?
diff --git a/src/jalview/util/IdUtils.java b/src/jalview/util/IdUtils.java
new file mode 100644 (file)
index 0000000..38ea260
--- /dev/null
@@ -0,0 +1,95 @@
+package jalview.util;
+
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+import jalview.bin.Console;
+
+public class IdUtils
+{
+  /**
+   * id generating tools avoiding Random.nextLong() for JalviewJS. Avoids
+   * collisions.
+   */
+
+  public static enum IdType
+  {
+    GENERAL, PROGRESS;
+  }
+
+  private static int count = 0;
+
+  private static Map<IdType, Set<Long>> typeMap = new HashMap<>();
+
+  static
+  {
+    for (IdType t : IdType.values())
+    {
+      typeMap.put(t, new HashSet<>());
+    }
+  }
+
+  public static long newId()
+  {
+    return newId(IdType.GENERAL, null);
+  }
+
+  public static long newId(IdType t)
+  {
+    return newId(t, null);
+  }
+
+  public static long newId(IdType t, Object o)
+  {
+    Set<Long> idSet = typeMap.get(t);
+    long newId = 0;
+    if (o == null)
+    {
+      // get a new hashCode -- not tied to an object.
+      // Adding Integer.MAX_VALUE should avoid collisions with object generated
+      // Ids.
+      newId = Integer.MAX_VALUE + t.hashCode() + System.currentTimeMillis()
+              + count;
+      while (idSet.contains(newId))
+      {
+        newId += count;
+      }
+    }
+    else
+    {
+      // generate the hashcode tied to this object for this type
+      newId = t.hashCode() + o.hashCode();
+      if (idSet.contains(newId))
+      {
+        Console.debug("Using an existing id for Type " + t.name()
+                + " and object " + o.toString() + ": '" + newId + "'");
+      }
+      else
+      {
+        idSet.add(newId);
+      }
+    }
+    count++;
+    return newId;
+  }
+
+  public static void NOTremoveId(IdType t, Object o)
+  {
+    if (o == null)
+    {
+      return;
+    }
+    Set<Long> idSet = typeMap.get(t);
+    long id = t.hashCode() + o.hashCode();
+    idSet.remove(id);
+  }
+
+  public static void NOTremoveId(IdType t, long id)
+  {
+    Set<Long> idSet = typeMap.get(t);
+    idSet.remove(id);
+  }
+
+}
index 7998ec8..87e308e 100644 (file)
@@ -38,6 +38,7 @@ import javax.swing.SwingUtilities;
 import org.json.simple.parser.JSONParser;
 import org.json.simple.parser.ParseException;
 
+import jalview.bin.argparser.ArgParser;
 import jalview.javascript.json.JSON;
 
 /**
@@ -624,38 +625,133 @@ public class Platform
     {
       jalview.bin.Console.outPrintln(
               "Platform adding known access-control-allow-origin * for domain "
-                      + domain);
-      /**
-       * @j2sNative
-       * 
-       *            J2S.addDirectDatabaseCall(domain);
-       */
+                      + domain);/**
+                                 * @j2sNative
+                                 * 
+                                 *            J2S.addDirectDatabaseCall(domain);
+                                 */
     }
 
   }
 
   public static void getURLCommandArguments()
   {
-    try
-    {
-      /**
-       * Retrieve the first query field as command arguments to Jalview. Include
-       * only if prior to "?j2s" or "&j2s" or "#". Assign the applet's
-       * __Info.args element to this value.
-       * 
-       * @j2sNative var a =
-       *            decodeURI((document.location.href.replace("&","?").split("?j2s")[0]
-       *            + "?").split("?")[1].split("#")[0]); a &&
-       *            (jalview.bin.Console.outPrintln("URL arguments detected were
-       *            "+a)) && (J2S.thisApplet.__Info.urlargs = a.split(" "));
-       *            (!J2S.thisApplet.__Info.args || J2S.thisApplet.__Info.args
-       *            == "" || J2S.thisApplet.__Info.args == "??") &&
-       *            (J2S.thisApplet.__Info.args = a) &&
-       *            (jalview.bin.Console.outPrintln("URL arguments were passed
-       *            to J2S main."));
-       */
-    } catch (Throwable t)
+
+    // setting ArgParser.ignoreNonStringValues allows non-string args to be
+    // set with, e.g., --wrap=hello
+    // which might be necessary for a querystring, plus we don't have access
+    // to Arg.hasOption(Opt.STRING)
+    if (Platform.isJS())
     {
+      ArgParser.setIgnoreNonStringValues(true);
+      try
+      {
+
+        String ns = null;
+
+        // extra spaces between lines of javascript to avoid eclipse comment
+        // munging into one line
+
+        /**
+         * Retrieve the first query field as command arguments to Jalview.
+         * Include only if prior to "?j2s" or "&j2s" or "#". Assign the applet's
+         * __Info.args element to this value.
+         * 
+         * if a namespace has been given in Info={...}. Use this namespace to
+         * find arguments and values in the querystring parameters. Arguments
+         * that do not take a value do not need to have a value in the
+         * querystring. If they do they will be ignored. Note, this means you
+         * cannot do 'debug=false' instead of 'nodebug'. If querystringnamepsace
+         * is an empty string ("") then no colon (":") will be expected.
+         * 
+         * if namespace is not defined then use the old style single first
+         * parameter for arguments
+         *
+         * @j2sNative var namespace = J2S.thisApplet.__Info.j2s_namespace;
+         * 
+         *            if (namespace === undefined)
+         * 
+         *            {
+         * 
+         *            System.out.println("No namespace given");
+         * 
+         *            var a =
+         *            decodeURI((document.location.href.replace("&","?").split("?j2s")[0]
+         *            + "?").split("?")[1].split("#")[0]);
+         * 
+         *            a && (System.out.println("URL arguments detected were
+         *            "+a)) && (J2S.thisApplet.__Info.urlargs = a.split(" "));
+         * 
+         *            (!J2S.thisApplet.__Info.args || J2S.thisApplet.__Info.args
+         *            == "" || J2S.thisApplet.__Info.args == "??") &&
+         *            (J2S.thisApplet.__Info.args = a) &&
+         *            (System.out.println("URL arguments were passed to J2S
+         *            main."));
+         * 
+         *            }
+         * 
+         *            else // namespace is defined
+         * 
+         *            {
+         * 
+         *            ns = "";
+         * 
+         *            var nsc = "";
+         * 
+         *            if (namespace) {
+         * 
+         *            ns = namespace;
+         * 
+         *            nsc = ns + ":";
+         * 
+         *            }
+         * 
+         *            System.out.println("Querystring namespace is '" + nsc +
+         *            "'");
+         * 
+         *            var qsParams = new
+         *            URLSearchParams(window.location.search);
+         * 
+         *            var qsargs = [];
+         * 
+         *            for (var param of qsParams) {
+         * 
+         *            var key = param[0];
+         * 
+         *            var val = param[1];
+         * 
+         *            if (key.startsWith(nsc)) {
+         * 
+         *            var arg = key.substring(nsc.length);
+         * 
+         *            qsargs.push("--" + arg + "=" + val);
+         * 
+         *            System.out.println("Setting arg '"+arg+"' to '"+val+"'");
+         * 
+         *            }
+         * 
+         *            }
+         * 
+         *            qsargs && (System.out.println("URL parameters detected
+         *            were "+qsargs.join(" "))) &&
+         *            (J2S.thisApplet.__Info.urlargs = qsargs);
+         * 
+         *            (!J2S.thisApplet.__Info.args || J2S.thisApplet.__Info.args
+         *            == "" || J2S.thisApplet.__Info.args == "??") &&
+         *            (J2S.thisApplet.__Info.args = qsargs.join(" ")) &&
+         *            (System.out.println("URL parameters were passed to J2S
+         *            main."));
+         * 
+         *            }
+         */
+      } catch (Throwable t)
+      {
+        /**
+         * @j2sNative System.err.println("Problem looking for arguments");
+         *            console.log("Problem looking for arguments");
+         *            console.log(t);
+         */
+      }
     }
   }
 
@@ -689,4 +785,5 @@ public class Platform
   {
     return CONSOLEWIDTH;
   }
-}
+
+}
\ No newline at end of file
index 89bc36d..cc51d07 100644 (file)
@@ -25,14 +25,9 @@ import java.net.URLEncoder;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Locale;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
 
 public class StringUtils
 {
-  private static final Pattern DELIMITERS_PATTERN = Pattern
-          .compile(".*='[^']*(?!')");
-
   private static final char PERCENT = '%';
 
   private static final boolean DEBUG = false;
@@ -145,6 +140,7 @@ public class StringUtils
    * Parses the input string into components separated by the delimiter. Unlike
    * String.split(), this method will ignore occurrences of the delimiter which
    * are nested within single quotes in name-value pair values, e.g. a='b,c'.
+   * New implementation to avoid Pattern for jalviewjs.
    * 
    * @param input
    * @param delimiter
@@ -153,70 +149,54 @@ public class StringUtils
   public static String[] separatorListToArray(String input,
           String delimiter)
   {
-    int seplen = delimiter.length();
-    if (input == null || input.equals("") || input.equals(delimiter))
+    if (input == null
+            // these two shouldn't return null (one or two "" respectively)
+            || input.equals("") || input.equals(delimiter))
     {
       return null;
     }
-    List<String> jv = new ArrayList<>();
-    int cp = 0, pos, escape;
-    boolean wasescaped = false, wasquoted = false;
-    String lstitem = null;
-    while ((pos = input.indexOf(delimiter, cp)) >= cp)
+
+    final char escapeChar = '\\';
+    final char quoteChar = '\'';
+    int ilength = input.length();
+    int dlength = delimiter.length();
+    List<String> values = new ArrayList<>();
+
+    boolean escape = false;
+    boolean inquote = false;
+
+    int start = 0;
+    for (int i = 0; i < ilength; i++)
     {
-      escape = (pos > 0 && input.charAt(pos - 1) == '\\') ? -1 : 0;
-      if (wasescaped || wasquoted)
+      if (!escape && !inquote && ilength >= i + dlength
+              && input.substring(i, i + dlength).equals(delimiter))
       {
-        // append to previous pos
-        jv.set(jv.size() - 1, lstitem = lstitem + delimiter
-                + input.substring(cp, pos + escape));
+        // found a delimiter
+        values.add(input.substring(start, i));
+        i += dlength;
+        start = i;
+        continue;
       }
-      else
+      char c = input.charAt(i);
+      if (c == escapeChar)
       {
-        jv.add(lstitem = input.substring(cp, pos + escape));
+        escape = !escape;
+        continue;
       }
-      cp = pos + seplen;
-      wasescaped = escape == -1;
-      // last separator may be in an unmatched quote
-      wasquoted = DELIMITERS_PATTERN.matcher(lstitem).matches();
-    }
-    if (cp < input.length())
-    {
-      String c = input.substring(cp);
-      if (wasescaped || wasquoted)
+      if (escape)
       {
-        // append final separator
-        jv.set(jv.size() - 1, lstitem + delimiter + c);
+        escape = false;
+        continue;
       }
-      else
+      if (c == quoteChar)
       {
-        if (!c.equals(delimiter))
-        {
-          jv.add(c);
-        }
+        inquote = !inquote;
       }
     }
-    if (jv.size() > 0)
-    {
-      String[] v = jv.toArray(new String[jv.size()]);
-      jv.clear();
-      if (DEBUG)
-      {
-        jalview.bin.Console.errPrintln("Array from '" + delimiter
-                + "' separated List:\n" + v.length);
-        for (int i = 0; i < v.length; i++)
-        {
-          jalview.bin.Console.errPrintln("item " + i + " '" + v[i] + "'");
-        }
-      }
-      return v;
-    }
-    if (DEBUG)
-    {
-      jalview.bin.Console.errPrintln(
-              "Empty Array from '" + delimiter + "' separated List");
-    }
-    return null;
+    // add the last value
+    values.add(input.substring(start, ilength));
+
+    return values.toArray(new String[values.size()]);
   }
 
   /**
@@ -597,14 +577,20 @@ public class StringUtils
 
   public static int indexOfFirstWhitespace(String text)
   {
-    int index = -1;
-    Pattern pat = Pattern.compile("\\s");
-    Matcher m = pat.matcher(text);
-    if (m.find())
+    // Rewritten to not use regex for Jalviewjs. Probably more efficient this
+    // way anyway.
+    if (text == null)
     {
-      index = m.start();
+      return -1;
+    }
+    for (int i = 0; i < text.length(); i++)
+    {
+      if (Character.isWhitespace(text.charAt(i)))
+      {
+        return i;
+      }
     }
-    return index;
+    return -1;
   }
 
   /*
index d108d4d..d4e34e7 100644 (file)
  */
 package jalview.ws;
 
-import java.util.Locale;
-
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Enumeration;
 import java.util.HashMap;
 import java.util.Hashtable;
 import java.util.List;
+import java.util.Locale;
 import java.util.Map;
-import java.util.StringTokenizer;
 import java.util.Vector;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
@@ -49,6 +47,8 @@ import jalview.gui.FeatureSettings;
 import jalview.gui.IProgressIndicator;
 import jalview.gui.OOMWarning;
 import jalview.util.DBRefUtils;
+import jalview.util.IdUtils;
+import jalview.util.IdUtils.IdType;
 import jalview.util.MessageManager;
 import jalview.ws.seqfetcher.DbSourceProxy;
 import uk.ac.ebi.picr.model.UPEntry;
@@ -286,12 +286,12 @@ public class DBRefFetcher implements Runnable
       throw new Error(MessageManager
               .getString("error.implementation_error_must_init_dbsources"));
     }
-    long startTime = System.currentTimeMillis();
+    long progressId = IdUtils.newId(IdType.PROGRESS);
     if (progressWindow != null)
     {
       progressWindow.setProgressBar(
               MessageManager.getString("status.fetching_db_refs"),
-              startTime);
+              progressId);
     }
     try
     {
@@ -484,7 +484,7 @@ public class DBRefFetcher implements Runnable
     {
       progressWindow.setProgressBar(
               MessageManager.getString("label.dbref_search_completed"),
-              startTime);
+              progressId);
     }
 
     for (FetchFinishedListenerI listener : listeners)
index c299a4d..3fc7094 100644 (file)
@@ -452,7 +452,7 @@ public abstract class MappableContactMatrix<T extends MappableContactMatrix<T>>
       /**
        * @return the mcolumn'th position in the matrixRange window on the matrix
        */
-      private int locateInRange(int mcolumn)
+      protected int locateInRange(int mcolumn)
       {
 
         int h = 0, p = 0;
index 2da8dd3..d1a226e 100644 (file)
  */
 package jalview.ws.jws2;
 
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import compbio.data.sequence.FastaSequence;
+import compbio.metadata.Argument;
+import compbio.metadata.ChunkHolder;
+import compbio.metadata.JobStatus;
+import compbio.metadata.JobSubmissionException;
+import compbio.metadata.Option;
+import compbio.metadata.ResultNotAvailableException;
 import jalview.analysis.AlignSeq;
 import jalview.analysis.SeqsetUtils;
 import jalview.api.AlignViewportI;
@@ -33,25 +45,14 @@ import jalview.gui.AlignFrame;
 import jalview.gui.IProgressIndicator;
 import jalview.gui.IProgressIndicatorHandler;
 import jalview.schemes.ResidueProperties;
+import jalview.util.IdUtils;
+import jalview.util.IdUtils.IdType;
 import jalview.workers.AlignCalcWorker;
 import jalview.ws.jws2.dm.AAConSettings;
 import jalview.ws.jws2.dm.JabaWsParamSet;
 import jalview.ws.jws2.jabaws2.Jws2Instance;
 import jalview.ws.params.WsParamSetI;
 
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import compbio.data.sequence.FastaSequence;
-import compbio.metadata.Argument;
-import compbio.metadata.ChunkHolder;
-import compbio.metadata.JobStatus;
-import compbio.metadata.JobSubmissionException;
-import compbio.metadata.Option;
-import compbio.metadata.ResultNotAvailableException;
-
 public abstract class AbstractJabaCalcWorker extends AlignCalcWorker
 {
 
@@ -219,7 +220,7 @@ public abstract class AbstractJabaCalcWorker extends AlignCalcWorker
       if (guiProgress != null)
       {
         guiProgress.setProgressBar("JABA " + getServiceActionText(),
-                progressId = System.currentTimeMillis());
+                progressId = IdUtils.newId(IdType.PROGRESS));
       }
       rslt = submitToService(seqs);
       if (guiProgress != null)
index 611aa79..f6e3104 100644 (file)
  */
 package jalview.ws.jws2;
 
+import java.util.ArrayList;
+import java.util.Hashtable;
+import java.util.List;
+import java.util.Map;
+import java.util.Vector;
+
+import javax.swing.JInternalFrame;
+
+import compbio.data.msa.MsaWS;
+import compbio.metadata.Argument;
+import compbio.metadata.ChunkHolder;
+import compbio.metadata.JobStatus;
+import compbio.metadata.Preset;
 import jalview.analysis.AlignSeq;
 import jalview.bin.Console;
 import jalview.datamodel.Alignment;
@@ -33,6 +46,8 @@ import jalview.gui.AlignFrame;
 import jalview.gui.Desktop;
 import jalview.gui.SplitFrame;
 import jalview.gui.WebserviceInfo;
+import jalview.util.IdUtils;
+import jalview.util.IdUtils.IdType;
 import jalview.util.MessageManager;
 import jalview.ws.AWsJob;
 import jalview.ws.JobStateSummary;
@@ -40,20 +55,6 @@ import jalview.ws.WSClientI;
 import jalview.ws.jws2.dm.JabaWsParamSet;
 import jalview.ws.params.WsParamSetI;
 
-import java.util.ArrayList;
-import java.util.Hashtable;
-import java.util.List;
-import java.util.Map;
-import java.util.Vector;
-
-import javax.swing.JInternalFrame;
-
-import compbio.data.msa.MsaWS;
-import compbio.metadata.Argument;
-import compbio.metadata.ChunkHolder;
-import compbio.metadata.JobStatus;
-import compbio.metadata.Preset;
-
 class MsaWSThread extends AWS2Thread implements WSClientI
 {
   boolean submitGaps = false; // pass sequences including gaps to alignment
@@ -783,7 +784,7 @@ class MsaWSThread extends AWS2Thread implements WSClientI
   @Override
   public void parseResult()
   {
-    long progbar = System.currentTimeMillis();
+    long progbar = IdUtils.newId(IdType.PROGRESS);
     wsInfo.setProgressBar(
             MessageManager.getString("status.collecting_job_results"),
             progbar);
index f6fdabe..08b1c33 100644 (file)
Binary files a/swingjs/SwingJS-site.zip and b/swingjs/SwingJS-site.zip differ
index c9ec027..773c193 100644 (file)
@@ -1,6 +1,7 @@
 java2script/SwingJS Notes
 =========================
 
+updated 3/11/2023 -- adds support for Java Regex Matcher.start/end(groupID) and .start/end(groupName)
 updated 12/31/2020 -- full support for 64-bit long
 updated 12/6/2020 -- note about restrictions on long, including BitSet and Scanner
 updated 3/21/2020 -- adds note about HashMap, Hashtable, and HashSet iterator ordering
@@ -1468,7 +1469,8 @@ Formatter/Regex limitations
 Some browsers cannot process Regex "look-behind" process such as (?<=\W)
 java.util.regex.Matcher and Pattern use JavaScript's RegExp object rather than
 the native Java object. These are not identical. Only flags /igm are supported.
-Matcher.start(groupID) is not supported.
+Matcher.start(groupID)/.end(groupID) is supported.
+(x*)? failure returns null, not empty string.
 
 java.util.Formatter will function correctly for all standard %... patterns.
 
diff --git a/swingjs/j2s.core.jar b/swingjs/j2s.core.jar
new file mode 100644 (file)
index 0000000..e6f92de
Binary files /dev/null and b/swingjs/j2s.core.jar differ
index 53e50c6..5f2af74 100644 (file)
Binary files a/swingjs/net.sf.j2s.core-j11.jar and b/swingjs/net.sf.j2s.core-j11.jar differ
index ced2ae7..dd10a49 100644 (file)
Binary files a/swingjs/net.sf.j2s.core.jar and b/swingjs/net.sf.j2s.core.jar differ
index 204bf8d..4b48c4a 100644 (file)
@@ -1 +1 @@
-20210728172208 
+20231117083556 
diff --git a/swingjs/ver/3.2.10-j11/SwingJS-site.zip b/swingjs/ver/3.2.10-j11/SwingJS-site.zip
deleted file mode 100644 (file)
index f12fcb1..0000000
Binary files a/swingjs/ver/3.2.10-j11/SwingJS-site.zip and /dev/null differ
diff --git a/swingjs/ver/3.2.10-j11/net.sf.j2s.core-j11.jar b/swingjs/ver/3.2.10-j11/net.sf.j2s.core-j11.jar
deleted file mode 100644 (file)
index a999edf..0000000
Binary files a/swingjs/ver/3.2.10-j11/net.sf.j2s.core-j11.jar and /dev/null differ
diff --git a/swingjs/ver/3.2.10-j11/timestamp b/swingjs/ver/3.2.10-j11/timestamp
deleted file mode 100644 (file)
index 39964d7..0000000
+++ /dev/null
@@ -1 +0,0 @@
-20201222130550 
diff --git a/swingjs/ver/3.2.10/DEV_NOTES.txt b/swingjs/ver/3.2.10/DEV_NOTES.txt
deleted file mode 100644 (file)
index 751d81c..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-This is sources/net.sf.j2s.java.core/dist/DEV_NOTES.txt
-
-_j2sclasslist.txt 
-
-the list of .js files concatenated into coreswingjs.js and minified to coreswingjs.z.js
-
-
-SwingJS-site.zip
-
-the full site directory for SwingJS including all files not in the test/ directory.
diff --git a/swingjs/ver/3.2.10/SwingJS-site.zip b/swingjs/ver/3.2.10/SwingJS-site.zip
deleted file mode 100644 (file)
index f12fcb1..0000000
Binary files a/swingjs/ver/3.2.10/SwingJS-site.zip and /dev/null differ
diff --git a/swingjs/ver/3.2.10/_j2sclasslist.txt b/swingjs/ver/3.2.10/_j2sclasslist.txt
deleted file mode 100644 (file)
index 076f300..0000000
+++ /dev/null
@@ -1,412 +0,0 @@
-java/applet/Applet.js
-java/applet/AppletContext.js
-java/applet/AppletStub.js
-java/applet/JSApplet.js
-java/awt/ActiveEvent.js
-java/awt/Adjustable.js
-java/awt/AWTEvent.js
-java/awt/AWTEventMulticaster.js
-java/awt/AWTKeyStroke.js
-java/awt/BasicStroke.js
-java/awt/BorderLayout.js
-java/awt/Button.js
-java/awt/Color.js
-java/awt/color/ColorSpace.js
-java/awt/Component.js
-java/awt/ComponentOrientation.js
-java/awt/ContainerOrderFocusTraversalPolicy.js
-java/awt/Container.js
-java/awt/Cursor.js
-java/awt/DefaultFocusTraversalPolicy.js
-java/awt/DefaultKeyboardFocusManager.js
-java/awt/Dialog.js
-java/awt/Dimension.js
-java/awt/dnd/peer/DropTargetPeer.js
-java/awt/event/ActionListener.js
-java/awt/event/AdjustmentEvent.js
-java/awt/event/AdjustmentListener.js
-java/awt/event/AWTEventListener.js
-java/awt/event/ComponentAdapter.js
-java/awt/event/ComponentEvent.js
-java/awt/event/ComponentListener.js
-java/awt/event/ContainerListener.js
-java/awt/event/FocusEvent.js
-java/awt/event/FocusListener.js
-java/awt/event/HierarchyBoundsListener.js
-java/awt/event/HierarchyListener.js
-java/awt/event/InputEvent.js
-java/awt/event/InputMethodListener.js
-java/awt/event/InvocationEvent.js
-java/awt/event/ItemEvent.js
-java/awt/event/ItemListener.js
-java/awt/event/KeyListener.js
-java/awt/event/MouseEvent.js
-java/awt/event/MouseListener.js
-java/awt/event/MouseMotionListener.js
-java/awt/event/MouseWheelListener.js
-java/awt/event/TextListener.js
-java/awt/event/WindowAdapter.js
-java/awt/event/WindowEvent.js
-java/awt/event/WindowFocusListener.js
-java/awt/event/WindowListener.js
-java/awt/event/WindowStateListener.js
-java/awt/EventDispatchThread.js
-java/awt/EventFilter.js
-java/awt/EventQueue.js
-java/awt/EventQueueItem.js
-java/awt/FlowLayout.js
-java/awt/FocusTraversalPolicy.js
-java/awt/Font.js
-java/awt/font/FontRenderContext.js
-java/awt/FontMetrics.js
-java/awt/Frame.js
-java/awt/geom/AffineTransform.js
-java/awt/geom/Dimension2D.js
-java/awt/geom/Path2D.js
-java/awt/geom/PathIterator.js
-java/awt/geom/Point2D.js
-java/awt/geom/Rectangle2D.js
-java/awt/geom/RectangularShape.js
-java/awt/geom/RectIterator.js
-java/awt/GraphicsCallback.js
-java/awt/GraphicsConfiguration.js
-java/awt/GraphicsDevice.js
-java/awt/GraphicsEnvironment.js
-java/awt/Image.js
-java/awt/image/ImageObserver.js
-java/awt/Insets.js
-java/awt/ItemSelectable.js
-java/awt/JSComponent.js
-java/awt/JSDialog.js
-java/awt/JSFrame.js
-java/awt/JSPanel.js
-java/awt/KeyboardFocusManager.js
-java/awt/KeyEventDispatcher.js
-java/awt/KeyEventPostProcessor.js
-java/awt/Label.js
-java/awt/LayoutManager.js
-java/awt/LayoutManager2.js
-java/awt/LightweightDispatcher.js
-java/awt/Paint.js
-java/awt/Panel.js
-java/awt/peer/ComponentPeer.js
-java/awt/peer/ContainerPeer.js
-java/awt/peer/FramePeer.js
-java/awt/peer/KeyboardFocusManagerPeer.js
-java/awt/peer/LightweightPeer.js
-java/awt/peer/WindowPeer.js
-java/awt/Point.js
-java/awt/Queue.js
-java/awt/Rectangle.js
-java/awt/RenderingHints.js
-java/awt/Scrollbar.js
-java/awt/ScrollPane.js
-java/awt/Shape.js
-java/awt/Stroke.js
-java/awt/TextArea.js
-java/awt/TextComponent.js
-java/awt/TextField.js
-java/awt/Toolkit.js
-java/awt/Transparency.js
-java/awt/Window.js
-java/beans/ChangeListenerMap.js
-java/beans/PropertyChangeEvent.js
-java/beans/PropertyChangeListener.js
-java/beans/PropertyChangeSupport.js
-java/lang/AbstractStringBuilder.js
-java/lang/Class.js
-java/lang/Enum.js
-java/lang/Iterable.js
-java/lang/reflect/Constructor.js
-java/lang/reflect/Method.js
-java/lang/StringBuffer.js
-java/lang/StringBuilder.js
-java/lang/Thread.js
-java/lang/ThreadGroup.js
-java/math/RoundingMode.js
-java/net/URL.js
-java/net/URLStreamHandlerFactory.js
-java/net/HttpURLConnection.js
-java/net/URLStreamHandler.js
-javax/net/ssl/HttpsUrlConnection.js
-java/text/CharacterIterator.js
-java/text/DecimalFormat.js
-java/text/DecimalFormatSymbols.js
-java/text/DigitList.js
-java/text/FieldPosition.js
-java/text/Format.js
-java/text/NumberFormat.js
-java/util/AbstractCollection.js
-java/util/AbstractList.js
-java/util/AbstractMap.js
-java/util/AbstractSequentialList.js
-java/util/AbstractSet.js
-java/util/ArrayList.js
-java/util/Arrays.js
-java/util/Collection.js
-java/util/Collections.js
-java/util/Comparator.js
-java/util/Deque.js
-java/util/Dictionary.js
-java/util/Enumeration.js
-java/util/EventListener.js
-java/util/EventObject.js
-java/util/HashMap.js
-java/util/HashSet.js
-java/util/Hashtable.js
-java/util/IdentityHashMap.js
-java/util/Iterator.js
-java/util/LinkedHashMap.js
-java/util/LinkedList.js
-java/util/List.js
-java/util/ListResourceBundle.js
-java/util/Locale.js
-java/util/Map.js
-java/util/Objects.js
-java/util/Queue.js
-java/util/Random.js
-java/util/RandomAccess.js
-java/util/ResourceBundle.js
-java/util/Set.js
-java/util/TimSort.js
-java/util/Vector.js
-javajs/api/JSFunction.js
-javajs/util/AjaxURLConnection.js
-javajs/util/AjaxURLStreamHandlerFactory.js
-javajs/util/AU.js
-javajs/util/JSThread.js
-javajs/util/Lst.js
-javajs/util/PT.js
-javajs/util/Rdr.js
-javajs/util/SB.js
-javax/swing/AbstractAction.js
-javax/swing/AbstractButton.js
-javax/swing/AbstractListModel.js
-javax/swing/Action.js
-javax/swing/ActionMap.js
-javax/swing/AncestorNotifier.js
-javax/swing/ArrayTable.js
-javax/swing/border/AbstractBorder.js
-javax/swing/border/BevelBorder.js
-javax/swing/border/Border.js
-javax/swing/border/CompoundBorder.js
-javax/swing/border/EmptyBorder.js
-javax/swing/border/EtchedBorder.js
-javax/swing/border/LineBorder.js
-javax/swing/border/TitledBorder.js
-javax/swing/BorderFactory.js
-javax/swing/BoundedRangeModel.js
-javax/swing/BoxLayout.js
-javax/swing/ButtonGroup.js
-javax/swing/ButtonModel.js
-javax/swing/ClientPropertyKey.js
-javax/swing/ComboBoxModel.js
-javax/swing/DefaultBoundedRangeModel.js
-javax/swing/DefaultButtonModel.js
-javax/swing/DefaultComboBoxModel.js
-javax/swing/DefaultSingleSelectionModel.js
-javax/swing/DropMode.js
-javax/swing/event/AncestorEvent.js
-javax/swing/event/AncestorListener.js
-javax/swing/event/CaretEvent.js
-javax/swing/event/CaretListener.js
-javax/swing/event/ChangeEvent.js
-javax/swing/event/ChangeListener.js
-javax/swing/event/DocumentEvent.js
-javax/swing/event/DocumentListener.js
-javax/swing/event/EventListenerList.js
-javax/swing/event/ListDataEvent.js
-javax/swing/event/ListDataListener.js
-javax/swing/event/UndoableEditEvent.js
-javax/swing/event/UndoableEditListener.js
-javax/swing/FocusManager.js
-javax/swing/InternalFrameFocusTraversalPolicy.js
-javax/swing/LayoutComparator.js
-javax/swing/LayoutFocusTraversalPolicy.js
-javax/swing/SortingFocusTraversalPolicy.js
-javax/swing/SwingContainerOrderFocusTraversalPolicy.js
-javax/swing/SwingDefaultFocusTraversalPolicy.js
-javax/swing/Icon.js
-javax/swing/ImageIcon.js
-javax/swing/InputMap.js
-javax/swing/JApplet.js
-javax/swing/JButton.js
-javax/swing/JCheckBox.js
-javax/swing/JCheckBoxMenuItem.js
-javax/swing/JComboBox.js
-javax/swing/JComponent.js
-javax/swing/JFrame.js
-javax/swing/JLabel.js
-javax/swing/JLayeredPane.js
-javax/swing/JMenu.js
-javax/swing/JMenuBar.js
-javax/swing/JMenuItem.js
-javax/swing/JPanel.js
-javax/swing/JPopupMenu.js
-javax/swing/JRadioButtonMenuItem.js
-javax/swing/JRootPane.js
-javax/swing/JScrollBar.js
-javax/swing/JScrollPane.js
-javax/swing/JSeparator.js
-javax/swing/JTextArea.js
-javax/swing/JTextField.js
-javax/swing/JToggleButton.js
-javax/swing/JViewport.js
-javax/swing/KeyboardManager.js
-javax/swing/KeyStroke.js
-javax/swing/ListModel.js
-javax/swing/LookAndFeel.js
-javax/swing/MenuElement.js
-javax/swing/MutableComboBoxModel.js
-javax/swing/plaf/ActionMapUIResource.js
-javax/swing/plaf/basic/BasicBorders.js
-javax/swing/plaf/BorderUIResource.js
-javax/swing/plaf/ColorUIResource.js
-javax/swing/plaf/ComponentUI.js
-javax/swing/plaf/DimensionUIResource.js
-javax/swing/plaf/FontUIResource.js
-javax/swing/plaf/InputMapUIResource.js
-javax/swing/plaf/InsetsUIResource.js
-javax/swing/plaf/UIResource.js
-javax/swing/RepaintManager.js
-javax/swing/RootPaneContainer.js
-javax/swing/Scrollable.js
-javax/swing/ScrollPaneConstants.js
-javax/swing/ScrollPaneLayout.js
-javax/swing/SingleSelectionModel.js
-javax/swing/SizeRequirements.js
-javax/swing/SwingConstants.js
-javax/swing/SwingPaintEventDispatcher.js
-javax/swing/SwingUtilities.js
-javax/swing/text/AbstractDocument.js
-javax/swing/text/AttributeSet.js
-javax/swing/text/Caret.js
-javax/swing/text/DefaultCaret.js
-javax/swing/text/DefaultEditorKit.js
-javax/swing/text/Document.js
-javax/swing/text/EditorKit.js
-javax/swing/text/Element.js
-javax/swing/text/GapContent.js
-javax/swing/text/GapVector.js
-javax/swing/text/JTextComponent.js
-javax/swing/text/MutableAttributeSet.js
-javax/swing/text/PlainDocument.js
-javax/swing/text/PlainView.js
-javax/swing/text/Position.js
-javax/swing/text/Segment.js
-javax/swing/text/SegmentCache.js
-javax/swing/text/SimpleAttributeSet.js
-javax/swing/text/Style.js
-javax/swing/text/StyleConstants.js
-javax/swing/text/StyleContext.js
-javax/swing/text/TabExpander.js
-javax/swing/text/TextAction.js
-javax/swing/text/Utilities.js
-javax/swing/text/View.js
-javax/swing/tree/TreeNode.js
-javax/swing/UIDefaults.js
-javax/swing/UIManager.js
-javax/swing/undo/AbstractUndoableEdit.js
-javax/swing/undo/CompoundEdit.js
-javax/swing/undo/UndoableEdit.js
-javax/swing/ViewportLayout.js
-javax/swing/WindowConstants.js
-sun/awt/AppContext.js
-sun/awt/AWTAutoShutdown.js
-sun/awt/CausedFocusEvent.js
-sun/awt/ComponentFactory.js
-sun/awt/KeyboardFocusManagerPeerProvider.js
-sun/awt/MostRecentKeyValue.js
-sun/awt/MostRecentThreadAppContext.js
-sun/awt/PaintEventDispatcher.js
-sun/awt/PostEventQueue.js
-sun/awt/RequestFocusController.js
-sun/awt/SunToolkit.js
-sun/awt/WindowClosingListener.js
-sun/awt/WindowClosingSupport.js
-sun/awt/image/DataStealer.js
-sun/awt/image/IntegerComponentRaster.js
-sun/awt/image/IntegerInterleavedRaster.js
-sun/awt/image/SunWritableRaster.js
-sun/font/FontDesignMetrics.js
-sun/swing/DefaultLookup.js
-sun/swing/SwingLazyValue.js
-sun/text/resources/FormatData.js
-sun/text/resources/en/FormatData_en.js
-sun/util/resources/LocaleData.js
-sun/util/locale/BaseLocale.js
-sun/util/locale/LocaleUtils.js
-sun/util/locale/provider/LocaleProviderAdapter.js
-sun/util/locale/provider/LocaleDataMetaInfo.js
-swingjs/a2s/A2SContainer.js
-swingjs/a2s/A2SEvent.js
-swingjs/a2s/A2SListener.js
-swingjs/a2s/Applet.js
-swingjs/a2s/Button.js
-swingjs/a2s/Label.js
-swingjs/a2s/Panel.js
-swingjs/a2s/Scrollbar.js
-swingjs/a2s/ScrollPane.js
-swingjs/a2s/TextArea.js
-swingjs/a2s/TextField.js
-swingjs/api/Interface.js
-swingjs/api/js/DOMNode.js
-swingjs/api/js/HTML5CanvasContext2D.js
-swingjs/api/js/JSInterface.js
-swingjs/jquery/JQueryUI.js
-swingjs/JSApp.js
-swingjs/JSAppletThread.js
-swingjs/JSAppletViewer.js
-swingjs/JSFocusPeer.js
-swingjs/JSFontMetrics.js
-swingjs/JSFrameViewer.js
-swingjs/JSGraphics2D.js
-swingjs/JSGraphicsConfiguration.js
-swingjs/JSGraphicsEnvironment.js
-swingjs/JSImage.js
-swingjs/JSImagekit.js
-swingjs/JSMouse.js
-swingjs/JSNullComponentPeer.js
-swingjs/JSScreenDevice.js
-swingjs/JSThreadGroup.js
-swingjs/JSToolkit.js
-swingjs/JSUtil.js
-swingjs/plaf/ButtonListener.js
-swingjs/plaf/DefaultMenuLayout.js
-swingjs/plaf/HTML5LookAndFeel.js
-swingjs/plaf/JSAppletUI.js
-swingjs/plaf/JSButtonUI.js
-swingjs/plaf/JSCheckBoxMenuItemUI.js
-swingjs/plaf/JSCheckBoxUI.js
-swingjs/plaf/JSComboBoxUI.js
-swingjs/plaf/JSComponentUI.js
-swingjs/plaf/JSEventHandler.js
-swingjs/plaf/JSFrameUI.js
-swingjs/plaf/JSGraphicsUtils.js
-swingjs/plaf/JSLabelUI.js
-swingjs/plaf/JSLayeredPaneUI.js
-swingjs/plaf/JSLightweightUI.js
-swingjs/plaf/JSMenuBarUI.js
-swingjs/plaf/JSMenuItemUI.js
-swingjs/plaf/JSMenuUI.js
-swingjs/plaf/JSPanelUI.js
-swingjs/plaf/JSPopupMenuSeparatorUI.js
-swingjs/plaf/JSPopupMenuUI.js
-swingjs/plaf/JSRadioButtonMenuItemUI.js
-swingjs/plaf/JSRadioButtonUI.js
-swingjs/plaf/JSRootPaneUI.js
-swingjs/plaf/JSScrollBarUI.js
-swingjs/plaf/JSScrollPaneUI.js
-swingjs/plaf/JSSeparatorUI.js
-swingjs/plaf/JSSliderUI.js
-swingjs/plaf/JSTextAreaUI.js
-swingjs/plaf/JSTextFieldUI.js
-swingjs/plaf/JSTextUI.js
-swingjs/plaf/JSTextViewUI.js
-swingjs/plaf/JSViewportUI.js
-swingjs/plaf/JSWindowUI.js
-swingjs/plaf/LazyActionMap.js
-swingjs/plaf/Resizer.js
-swingjs/plaf/TextListener.js
-
-
diff --git a/swingjs/ver/3.2.10/differences.txt b/swingjs/ver/3.2.10/differences.txt
deleted file mode 100644 (file)
index 60f5fcc..0000000
+++ /dev/null
@@ -1,1541 +0,0 @@
-Notes
-=====
-
----IMPORTANT CHARACTER SET NOTE---
-
-It is critical that all development work in Java2Script 
-be done in UTF-8. This means:
-
-- making sure your Eclipse project is set up for UTF-8 (not the Eclipse default?)
-- making sure your server can serve up UTF-8 by default for any browser-loaded files
-- making sure you don't edit a Java2Script class file or one of the site .js files
-    using a non-UTF-8 editor. It may replace non-Latin characters with "?" or garbage.
-- making sure that your web pages are delivered with proper headings indicating HTML5 and UTF-8
-
-<!DOCTYPE html>
-<html>
-<head>
-<meta charset="utf-8">
-
-Note that the DOCTYPE tag is critical for some browsers to switch into HTML5 mode. (MSIE?)
-
-
-
-  
-In particular, the Mandarin character ç§˜ (mi; "secret") is used extensively throughout
-the SwingJS class files to distinguish j2s-specific fields and methods that must not 
-ever be shadowed or overridden by subclasses. For example, we see in java.lang.Thread.java:
-
-               public static JSThread ç§˜thisThread;
-
-----------------------------------
-
-
-updated 12/6/2020 -- note about restrictions on long, including BitSet and Scanner
-updated 3/21/2020 -- adds note about HashMap, Hashtable, and HashSet iterator ordering
-updated 3/20/2020 -- adds note about interning, new String("xxx"), and "xxx"
-updated 2/26/2020 -- adds Graphics.setClip issue
-updated 12/22/19 -- additional issues
-updated 11/03/19 -- adds information about File.exists() and points to src/javajs/async
-updated 10/26/19 -- adds information about File.createTempFile()
-updated 8/16/19 -- minor typos and added summary paragraph
-updated 7/19/19 -- clarification that AWT and Swing classes are supported directly
-updated 5/13/19 -- Mandarin U+79D8 reserved character; Missing Math methods; int and long
-updated 5/10/19 -- adds a section on static issues in multi-(duplicate)-applet pages
-updated 1/4/19 -- nio
-updated 9/15/18 -- adds integer 1/0 == Infinity
-updated 7/24/18 -- most classes replaced with https://github.com/frohoff/jdk8u-jdk
-updated 6/5/17 -- reserved package name "window"
-updated 3/11/17 -- myClass.getField
-updated 3/7/17 -- overloading of JSplitPane.setDividerLocation
-updated 3/2/17 -- more indication of classes not implemented (KeyListener)
-
-=============================================================================
-SwingJS and OpenJDK 8+
-=============================================================================
-
-SwingJS implements a wide range of the Java language in JavaScript. The base
-version for this implementation is OpenJDK8. some classes are implemented using 
-older source code, and there are some missing methods. For the most part, this is 
-no real problem. You can add or modify any java class just be adding it as source
-in your project. Or (preferably) you can contact me, and I can get it into the 
-distribution. Or (even more preferably) you can do that via a patch submission. 
-
-=================
-DESIGN PHILOSOPHY
-=================
-
-The java2script/SwingJS design goal is to recreate a recognizable, easily debuggable
-equivalent in JavaScript for as much of Java as practical. This means, for example, 
-that one can call in JavaScript 
-
-  new java.util.Hashtable()
-  
-and for all practical purposes it will appear that Java is running.
-
-
-Method and Field Disambiguation
--------------------------------
-
-SwingJS has no problem with the overloading of methods, for example:
-
-  public void print(int b);
-  public void print(float b);
-
-JavaScript does not allow overloading of methods, and the common practice in
-Java of naming a field the same as a method -- isAllowed and isAllowed() -- is
-not possible in JavaScript. As a result, SwingJS implements "fully-qualified" 
-method names using "$" parameter type separation. Thus, these methods in SwingJS
-will be referred to as print$I and print$F. The rules for this encoding are
-relatively simple: 
-
-1. The seven primitive types in Java are encoded $I (int), $L (long), $F (float), 
-$D (double), $B (byte) $Z (boolean), and $H (short). 
-
-2. String and Object are encoded as $S and $O, respectively.
-
-3. "java_lang_" is dropped for all other classes in the java.lang package (as in Java).
-   For example:  $StringBuffer, not $java_lang_StringBuffer
-
-4. All other classes are encoded as 
-
- "$" + Class.getName().replace(".","_")
-
-For example, in Java we see:
-
-  public void equals(Object o) {...}
-
-Whereas in SwingJS we have:
-
-  Clazz.newMeth(C$, 'equals$O', function (o) {...}
-
-And 
-
- this.getContentPane().add(bar, "North");
-
-becomes
-
- this.getContentPane$().add$java_awt_Component$O(bar, "North");
-
-5. Arrays are indicated with appended "A" for each level. So
-
-  setDataVector(Object[][] dataVector, Object[] columnIdentifiers)
-  
-becomes
-
-  setDataVector$OAA$OA(dataVector, columnIdentifiers)
-
-(It is recognized that this design does introduce a bit of ambiguity, in that
- in principal there could be user class named XA and X in the same package,
- and methods a(X[]) and a(XA) in the same class that cannot be distinguished.
- The benefit of this simple system, however, triumphed over the unlikelyhood
- of that scenario.) The transpiler could be set to flag this possibility.
-
-6. Constructors are prepended with "c$". So 
-
-  public JLabel(String text) {...}
-  
-becomes:
-
-  Clazz.newMeth(C$, 'c$$S', function (text) {...});
-
-Field disambiguation involves prepending. In Java, a class and its subclass 
-can both have the same field name, such as 
-
- boolean visible;
-When this happens, it is called "shadowing", and though not recommended, Java allows
-it. The Java2Script transpiler will prepend such shadowing fields with "$" so that the
-subclass instance has both "visible" (for use in its methods inherited from its
-superclass) and "$visible" (for its own methods). Thus, we might see in Java:
-
-  this.visible = super.visible;
-  
-while in SwingJS we will see:
-
-  this.$visible=this.visible;
-
-since JavaScript does not have the "super" keyword.
-
-
-
-Parameterless methods such as toString() are appended with "$" to become toString$().
-The one exception to this rule is private methods, which are saved in (truly) private 
-array in the class (and are not accessible by reflection). Private parameterless 
-methods retain their simple Java name, since they cannot conflict with field names.
-
-This renaming of methods has a few consequences, which are discussed more fully below.
-See particularly the section on "qualified field and method names", where it is described
-how you can use packages or classes or interfaces with ".api.js" in them to represent JavaScript
-objects for which all method names are to be left unqualified. Note that it is not 
-possible to cherry-pick methods to be unqualified; only full packages, classes or 
-interfaces can hold this status.
-
-The swingjs.api.js package in particular contains a number of useful interfaces that
-you can import into your project for JavaScript-specific capabilities.
-
-
-Applet vs. Application
-----------------------
-
-One of the very cool aspects of SwingJS is that it doesn't particularly matter if a browser-based
-Java app is an "applet" or an "application". We don't need JNLP (Java Network Launch Protocol) 
-because now we can just start up any Java application in a browser just as easily as any applet.
-The associative array that passes information to the SwingJS applet (information that formerly
-might have been part of the APPLET tag, such as width, height, and codebase, always referred to 
-in our writing as "the Info array") allows the option to specify the JApplet/Applet "code" 
-class or the application "main" class. Either one will run just fine.
-
-
-Performance
------------
-
-Obviously, there are limitations. One is performance, but we have seen reproducible 
-performance at 1/6 - 1/3 the speed of Java. Achieving this performance may require
-some refactoring of the Java to make it more efficient in both Java and JavaScript. 
-"for" loops need to be more carefully crafted; use of "new" and "instanceof" need to be
-minimized in critical areas. Note that method overloading -- that is, the same method name
-with different parameters, such as read(int) and read(byte) -- is no longer any problem. 
-  
-
-Threads
--------
-
-Although there is only a single thread in JavaScript, meaning Thread.wait(), Thread.sleep(int) and 
-Thread.notify() cannot be reproduced, we have found that this is not a serious limitation. 
-For example, javax.swing.Timer() works perfectly in JavaScript. All it means is that threads 
-that use sleep(int) or notify() must be refactored to allow Timer-like callbacks. That is, 
-they must allow full exit and re-entry of Thread.run(), not the typical while/sleep motif. 
-
-The key is to create a state-based run() that can be exited and re-entered in JavaScript.
-
-
-Static fields
--------------
-
-Final static primitive "constant" fields (String, boolean, int, etc.) such as 
-
-static final int TEST = 3;
-static final String MY_STRING = "my " + "string";
-
-are converted to their primitive form automatically by the Eclipse Java compiler 
-and do not appear in the JavaScript by their names. 
-
-Other static fields are properties of their class and can be used as expected.
-
-Note, however, that SwingJS runs all "Java" code on a page in a common "jvm" 
-(like older versions of Java). So, like the older Java schema, the JavaScript 
-equivalents of both applets and applications will share all of their static 
-fields and methods. This includes java.lang.System. 
-
-Basically, SwingJS implementations of Java run in a browser page-based sandbox 
-instead of an applet-specific one.
-
-In general, this is no problem. But if we are to implement pages with 
-multiple applets present, we must be sure to only have static references 
-that are "final" or specifically meant to be shared in a JavaScript 
-environment only (since they will not be shared in Java).
-
-A simple solution, if static non-constant references are needed, is to attach the 
-field to Thread.currentThread.threadGroup(), which is an applet-specific reference.
-Be sure, if you do this, that you use explicit setters and getters:
-
-For example, 
-
-private static String myvar;
-
-...
-
-public void setMyVar(String x) {
-  ThreadGroup g = Thread.currentThread().threadGroup();
-  /**
-   * @j2sNative g._myvar = x;
-   * 
-   */
-   {
-     myvar = x;
-   }
-}
-
-public String getMyVar() {
-  ThreadGroup g = Thread.currentThread().threadGroup();
-  /**
-   * @j2sNative return g._myvar || null;
-   * 
-   */
-   {
-     return myvar;
-   }
-}
- in Java will get and set x the same in JavaScript and in Java. 
-A convenient way to do this in general is to supply a singleton class with
-explicitly private-only constructors and then refer to it in Java and in JavaScript
-instead of using static field, referring to myclass.getIntance().xxx instead of 
-myclass.xxx in Java (and JavaScript). 
-
-This was done extensively in the Jalview project. See jalview.bin.Instance.
-
-
-Helper Packages -- swingjs/ and javajs/
----------------------------------------
-
-The SwingJS library is the swingjs/ package. There are interfaces that may be of assistance
-in swingjs/api, but other than that, it is not recommended that developers access classes in 
-this package. The "public" nature of their methods is really an internal necessity.
-
-In addition to swingjs/, though, there are several useful classes in the javajs/ package
-that could be very useful. This package is a stand-alone package that can be 
-cloned in any Java project that also would be great to have in any JavaScript project
--- SwingJS-related or not. Functionality ranges from reading and writing various file 
-formats, including PDF, BMP, PNG, GIF, JPG, JSON, ZIP, and CompoundDocument formats.
-
-A variety of highly efficient three- and four-dimensional point, vector, matrix, and 
-quaternion classes are included, as they were developed for JSmol and inherited from that
-project. 
-
-Of particular interest should be javajs/async/, which includes
-
-javajs.async.Async
-javajs.async.AsyncColorChooser
-javajs.async.AsyncDialog
-javajs.async.AsyncFileChooser
-
-See javajs.async.Async JavaDoc comments for a full description of 
-these useful classes.
-
-
-Modal Dialogs
--------------
-
-Although true modal dialogs are not possible with only one thread, a functional equivalent -- 
-asynchronous modal dialogs -- is relatively easy to set up. All the JOptionPane dialogs will
-return PropertyChangeEvents to signal that they have been disposed of and containing the results. 
-See below and classes in the javajs.async package.
-
-
-Native calls
-------------
-
-Native calls in Java are calls to operating system methods that are not in Java. JavaScript
-has no access to these, of course, and they must all be replaced by JavaScript equivalents.
-Fortunately, they are not common, and those that are present in Java (for example, in calculating
-checksums in ZIP file creation) are at a low enough level that most developers do not utilize them
-or do not even have access to them. All native calls in Java classes have been replaced by 
-Java equivalents.
-
-
-Swing GUI Peers and UIClasses
------------------------------
-
-One of the biggest adaptations introduced in SwingJS is in the area of the graphical 
-user interface. The issue here is complex but workable. In Java there are two background 
-concepts -- the Component "peer" (one per "heavy-weight" component, such as a Frame) and the 
-component "uiClass" (one per component, such as JButton or JTextField).
-
-Peers are native objects of the operating system. These are the virtual buttons and text areas
-that the user is interacting with at a very base level. Their events are being passed on to 
-Java or the browser by the operating system. UI classes provide a consistent "look and feel" 
-for these native objects, rendering them onto the native window canvas and handling all 
-user-generated events. They paint the borders, the backgrounds, the highlights, of every 
-control you see in Java. There is one-to-one correspondence of Swing classes and UI classes. 
-Setting the Look and Feel for a project amounts to selecting the directory from which to draw 
-these UI classes. The UI classes can be found in the javax.swing.plaf ("platform look and feel") 
-package.
-
-Early on in the development of SwingJS, we decided not to fully reproduce the painfully detailed 
-bit-by-bit painting of controls as is done in Java. Instead, we felt it was wiser to utilize the standard
-HTML5 UI capabilities as much as possible, using DIV, and INPUT especially, with extensive use
-of CSS and sometimes jQuery (menus, and sliders, for example). Thus, we have created a new 
-set of UIs -- the "HTML5 Look and Feel". These classes can be found in swingjs.plaf. Besides being
-more adaptable, this approach allows far more versatility to SwingJS developers, allowing them
-to modify the GUI to suit their needs if desired.
-
-In SwingJS, since we have no access to native peers except through the browser DOM,
-it seemed logical to merge the peer and UI idea. So instead of having one peer per heavy-weight control and
-one UI class instance for each control type, we just have one UI class instance per control, and
-that UI class instance is what is being referred to when a "peer" is notified. 
-
-In some ways this is a throw back to when all of Swing's components were subclasses of
-specific AWT components such as Button and List. These "heavy-weight components" all had their 
-own individual native peers and thus automatically took on the look and feel provided by the OS. 
-Later Swing versions implemented full look and feel for all peers, leaving only JDialog, JFrame,
-and a few other classes to have native peers. But in SwingJS we have again a 1:1 map of component
-and UI class/peer instance.
-
-The origin of most issues (read "bugs") in relation to the GUI will probably be found in the
-swingjs.plaf JSxxxxUI.java code.
-
-  
-Swing-only Components -- no longer an issue
--------------------------------------------
-
-Swing was introduced into Java well after the Java Abstract Window Toolkit (AWT) was well
-established. As such, its designers chose to allow AWT controls such as Button and List to be used 
-alongside their Swing counterparts JButton and JList. Reading the code, it is clear that this 
-design choice posed a huge headache for Swing class developers. 
-
-For SwingJS, we decided from the beginning NOT to allow this mixed-mode programming and 
-instead to require that all components be Swing components. 
-
-However, this is no longer an issue. All AWT components in SwingJS are now subclasses of 
-javax.swing.JComponent. So far, we have found no problem with this.
-
-The a2s Adapter Package
------------------------
-
-Originally, we thought that we would restrict ourselves to JApplets only. That is, only
-Swing-based applets. But as we worked, we discovered that there are a lot of great 
-applets out there that are pre-Swing pure-AWT java.applet.Applet applets. Our problem was 
-that we also wanted it to be possible to quickly adapt these applets to JavaScript as well.
-The solution turned out to be simple: Write a package (a2s) that recreates the interface for 
-non-Swing components as subclasses of Swing components. Thus, a2s.Button subclasses javax.swing.JButton
-but also accepts all of the methods of java.awt.Button. This works amazingly well, with a few
-special adaptations to the core javax.swing to be "AWT-aware." All AWT components now subclass 
-a2s components, which in turn subclass JComponents. So no changes in code are necessary. We have
-successfully transpiled over 500 applets using this strategy. (Kind of surprising, actually, that
-the original Java developers did not see that option. But we have a hindsight advantage here.)
-
-
-Working with Files
-==================
-
-Simple String file names are not optimal for passing information about
-read files within SwingJS applications. 
-All work with files should either use Path or File objects exclusively. 
-These objects, after a file is read or checked for existence, will already 
-contain the file byte[] data. Doing something like this:
-
-File f = File("./test.dat");
-boolean isOK = f.exists();
-
-will load f with its byte[] data, if the file exists. 
-
-But if after that, we use:
-
-File f2 = new File(f.getAbsolutePath());
-
-f2 will not contain that data. Such copying should be done as:
-
-File f2 = new File(f);
-
-in which case, the byte[] data will be transferred.
-
-
-SwingJS uses the following criteria to determine if File.exists() returns true:
-
-(1) if this File object has been used directly to read data, or 
-(2) if reading data using this File object is successful.
-
-Note that you cannot check to see if a file exists before input or if it 
-was actually written or if it already exists prior to writing in SwingJS.  
-
-Thus, you should check each use of file.exists() carefully, and if necessary, provide a J2sNative 
-block that gives an appropriate "OK" message, for example:
-
-(/** @j2sNative 1 ? false : */ outputfile.exits())
-
-or 
-
-(/** @j2sNative 1 ? true : */ inputfile.exits())
-
-Temporary files can be created in SwingJS. SwingJS will maintain a pseudo-filesystem for files 
-created with File.createTempFile(). This is useful in that closure of writing to a temporary file 
-does not generate a pseudo-download to the user's machine.
-
-
-UNIMPLEMENTED CLASSES BY DESIGN
-===============================
-
-The SwingJS implementation of the following classes are present 
-in a way that gracefully bypasses their functionality:
-
-accessibility
-security
-serialization
-
-
-
-TODO LIST FOR UNIMPLEMENTED CLASSES
-===================================
-
-JEditorPane (minimal implementation) - DONE 12/2018; some issues still
-JSplitPane - DONE 8/2018
-JTabbedPane - DONE 10/2018
-JTree - done 12/2019
-
-
-MINOR ISSUES--required some rewriting/refactoring by Bob and Udo  
-================================================================
-
-Thread.currentThread() == dispatchThread
-
-
-MINOR ISSUES--requiring some rewriting/refactoring outside of SwingJS  
-=====================================================================
-
-See below for a full discussion.
-
-Restrictions on long
-Restriction on BitSet and Scanner
-HashMap, Hashtable, and HashSet iterator ordering
-interning, new String("xxx") vs "xxx"
-Names with "$" and "_"
-positive integers do not add to give negative numbers
-ArrayIndexOutOfBounds
-java.awt.Color
-native methods
-javax.swing.JFileDialog
-key focus
-LookAndFeel and UI Classes
-System.exit(0) does not stop all processes
-list cell renderers must be JComponents
-myClass.getField not implemented
-"window" and other reserved JavaScript names
-reserved field and method names
-qualified field and method names
-missing Math methods
-Component.getGraphics(), Graphics.dispose()
-Graphics.setClip()
-
-MAJOR ISSUES--for Bob and Udo within SwingJS
-============================================
-
-fonts
-OS-dependent classes
-AWT component peers
-some aspects of reflection
-
-MAJOR ISSUES--to be resolved by implementers
-============================================
-
-fonts
-threads
-modal dialogs
-image loading
-BigDecimal not fully implemented 
-no format internationalization
-no winding rules
-text-related field implementation
-Formatter/Regex limitations
-integer 1/0 == Infinity
-
-======================================================================== 
-
-DISCUSS
-=======
-
-Table row/col sorter needs checking after removal of java.text.Collator references
-
-I had to move all of SunHints class to RenderingHints, or the 
-two classes could not be loaded. Shouldn't be a problem, I think. The sun classes are
-not accessible to developers in Java anyway, since they are generally package private.
-
-========================================================================== 
-
-//////////////////////////////////////////////////////////////////////////////
-
-UNIMPLEMENTED CLASSES
-=====================
-
-accessibility
--------------
-
-All Accessibility handling has been commented out to save the download footprint.
-This removes the need for sun.misc.SharedSecrets as well. 
-Nothing says we could not implement accessibility. We just didn't.
-
-
-security
---------
-
-All JavaScript security is handled by the browser natively. 
-Thus, Java security checking is no longer necessary, and 
-java.security.AccessController has been simplified to work without
-native security checking.
-
-Note that private methods in a class are REALLY private. 
-
-
-serialization
--------------
-
-All serialization has been removed. It was never very useful for Swing anyway, 
-because one needs exactly the same Java version to save and restore serialized objects.
-
-
-keyboard accelerators and mnemonics
------------------------------------
-
-This work was completed in the spring of 2019. Note that in a browser, some 
-key strokes, particularly CTRL-keys, are not available. Bummer.
-
-
-MINOR ISSUES--required some rewriting/refactoring by Bob and Udo  
-================================================================
-
-
-Thread.currentThread() == dispatchThread
-----------------------------------------
-
-changed to JSToolkit.isDispatchThread()
-
-
-MINOR ISSUES--requiring some rewriting/refactoring outside of SwingJS  
-=====================================================================
-
-restrictions on long
---------------------
-
-Java's 64-bit long type is not supported in JavaScript. There is no Int64Array in JavaScript,
-and 0x20000000000000 + 1 evaluates to 0x20000000000000, not 0x20000000000001. 
-(Likewise, -0x20000000000000 - 1 is left unchanged.) 
-
-The largest "integer" value in JavaScript is 9007199254740991 (9.007199254740991E13, or 0x1FFFFFFFFFFFFFF).
-Effectively, you get to use only 53 bits of the long, not 64. Trying to set a long larger than
-0x1FFFFFFFFFFFFFF or smaller than -0x1FFFFFFFFFFFFFF will result in a NumberFormatException.
-
-The transpiler handles conversion to long the same as Java for all cases other than from double. 
-
-For small double values, there is no problem, and, in fact, this is a known trick used to round 
-doubles and floats toward zero:
-
-double d;
-d = (long) 3.8;
-assert(d == 3);
-d = (long) -3.8;
-assert(d == -3);
-
-SwingJS will evaluate (long) d as 0 for d > 9007199254740991 
-or d < -9007199254740991, same as Java returns for Double.NaN.
-So, in Java we have:
-
-               assert(((long) Double.NaN) == 0);
-               assert(((int) Double.NaN) == 0);
-               assert(((long) Float.NaN) == 0);
-               assert(((int) Float.NaN) == 0);
-
-and also, in JavaScript only, we also have:
-
-               double d = 0x2000000000000L;
-               assert(((long) d) == 0);
-
-
-restrictions on BitSet and Scanner
-----------------------------------
-
-Because of the issue of long being only 53 bits, any time a method returns a long value, considerations must
-be made as to whether this will work in JavaScript. In particular, BitSet and Scanner have issues. 
-
-In SwingJS, java.util.BitSet has been implemented as a 32-bit integer-based bitset. This was no problem in
-Java 6, but starting with Java 7, a method was added to BitSet that allows for the extraction of the 
-underlying long[] word data. This is not work in JavaScript. Instead, SwingJS java.util.Bitset.toLongArray() will deliver 
-32-bit int[] data.
-
-SwingJS Scanner has hasNextLong() and nextLong(), and although it will scan through long numbers,
-Scanner will choke on long numbers greater than the JavaScript 53-bit limit. hasNextLong() will 
-return false, and nextLong() will throw an InputMismatchException triggered by the NumberFormatException
-thrown by Long.parseLong(). 
-
-
-HashMap, Hashtable, and HashSet iterator ordering
--------------------------------------------------
-
-In Java, iterators for HashMap, Hashtable, and HashSet do not guarantee any particular order. 
-From the HashMap documentation for Java 8:
-
-       This class makes no guarantees as to the order of the map; in particular, it does not 
-       guarantee that the order will remain constant over time.
-Likewise, for HashSet (because it is simply a convenience method for HashMap<Object,PRESENT>:
-
-       [HashSet] makes no guarantees as to the iteration order of the set.
-
-JavaScript's Map object is different. It is basically a LinkedHashMap, so it guarantees iteration
-in order of object addition.
-
-Starting with java2script 3.2.9.v1, these classes use the JavaScript Map object rather than hash codes
-whenever all keys are strictly of JavaScript typeof "string". If any key is introduced that is not a string, the
-implementation falls back to using hash codes, the same as Java. 
-
-Note strings created using new String("xxxx") are NOT typeof "string"; they are typeof "object".
-
-The result is significantly faster performance (3-12 x faster) than originally, and up to 3 x faster
-performance in JavaScript than in Java itself. Right. Faster than Java. 
-
-The JavaScript Map implementation is implemented UNLESS the constructor used is the one that
-specifies both initial capacity and load factor in their constructor. Thus, 
-
-new Hashtable()
-new HashMap()
-new HashMap(16)
-new HashSet()
-
-all use the JavaScript Map. But
-
-new Hashtable(11, 0.75f)
-new HashMap(16, 0.75f)
-new HashSet(16, 0.75f)
-
-do not. 
-
-This design allows for opting out of the JavaScript Map use in order to retain the exact behavior of 
-iterators in JavaScript as in Java.
-
-
-interning, new String("xxx") vs "xxx"
--------------------------------------
-
-Note that the following are true in JavaScript:
-
-typeof new String("xxxx") == "object"
-typeof "xxxx" == "string"
-var s = "x";typeof ("xxx" + s) == "string"
-
-There is no equivalence to this behavior in Java, where a String is a String is a String.
-
-Be aware that SwingJS does not always create a JavaScript String object using JavaScript's 
-new String(...) constructor. It only does this for Java new String("xxxx") or new String(new String()). 
-
-In all other cases, new String(...) (in Java) results in a simple "xxxx" string in JavaScript. 
-That is, it will be JavaScript typeof "string", not typeof "object". 
-
-The reason for this design is that several classes in the Java core use toString() 
-methods that return new String(), and those classes that do that would cause a JavaScript error
-if implicitly stringified if new String() returned a JavaScript String object. 
-
-This is fine in JavaScript
-
-test1 = function() { return { toString:function(){ return "OK" } } }
-"testing" + new test1()
->> "testingOK"
-
-But for whatever reason in JavaScript:
-
-test2 = function() { return { toString:function(){ return new String("OK") } } }
-"testing" + new test2()
->> Uncaught TypeError: Cannot convert object to primitive value
-
-The lesson here is never to use 
-
-  return new String("...");
-
-in a Java toString() method. In Java it will be fine; in JavaScript it will also be fine as long as
-that method is never called in JavaScript implicitly in the context of string concatenation.
-
-A note about interning. Consider the following six Java constructions, where we have a == "x";
-
-"xxx"
-"xx" + "x"
-new String("xxx").intern()
-
-new String("xxx")
-"xx" + a.toString()
-"xx" + a
-
-All six of these will return java.lang.String for .getClass().getName().
-However, the first three are String literals, while the last three are String objects. 
-Thus:
-        "xxx" == "xxx"
-        "xxx" == "xx" + "x"
-        "xxx" == new String("xxx").intern()
-
-but none of the other three are equivalent to "xxx" or each other:
-
-              "xxx" != new String("xxx")
-              "xxx" != "xx" + a.toString()
-              "xxx" != "xx" + a
-  new String("xxx") != new String("xxx") 
-           "xx" + a != new String("xxx") 
-
-etc.
-
-As in Java, in SwingJS, all of the following Java assertions pass as true:
-
-               assert("xxx" == "xx" + "x"); 
-               assert("xxx" == ("xx" + a).intern()); 
-               assert("xxx" === new String("xxx").intern()); 
-               
-and both of these do as well:
-
-               assert(new String("xxx") != "xxx"); 
-               assert(new String("xxx") != new String("xxx")); 
-
-But the following two fail to assert true:
-
-        assert("xxx" != "xx" + a);
-        assert("xxx" != "xx" + a.toString());
-
-because in JavaScript, both of these right-side expressions evaluate to a simple "interned" string.
-
-In Java, however, these assertions are true because Java implicitly "boxes" String 
-concatentaion as a String object, not a literal. 
-
-Most of us know not to generally use == with Strings unless they are explicitly interned. 
-Where this problem may arise, though, is in IdentityHashMap, which compares objects using 
-System.identityHashCode(), which is not the same for different objects or their string literal equivalents.
-
-My recommendation, if you need to use IdentityHashMap with strings is to always use an explicit String.intern()
-for any keys -- unless you really want to keep every string as separate keys even if they are the same sequence, 
-in which case, use new String(). This will work in Java and in  JavaScript.
-
-Be aware when working with strings that come from SwingJS and are being used by other JavaScript modules
-that those that are String objects will return "object" for the JavaScript typeof operator, not "string".
-
-The easy way to ensure this is no problem is to concatenate strings with "" to force immediate interning:
-
-  var x = aJavaObject.getString() + "";
-
-unless you are certain that the string is being returned is a raw JavaScript string.   
-
-Names with "$" and "_"
-----------------------
-
-For the most part, this should be no problem. 
-
-Note that the use of $ and _ in Java field names has always been discouraged:
-[https://docs.oracle.com/javase/tutorial/java/nutsandbolts/variables.html]
-
-       You may find some situations where auto-generated names will contain the dollar sign, 
-       but your variable names should always avoid using it. A similar convention 
-       exists for the underscore character; while it's technically legal to begin your 
-       variable's name with "_", this practice is discouraged.
-
-Some impacts of transpiling method names with full qualification:
-
-1) SwingJS will introduce fields that start with $ or _. These will not conflict
-   if the above convention is followed.
-   
-2) Fields that have the same Java name as a method are not an issue. 
-
-3) Fields that have a Java name with $ that matches a transpiled method name, 
-   such as toString$, will need to be refactored in Java to not have that name collision.
-   
-4) Fields in a subclass that have the same name as private fields in a superclass
-   represent a name collision, because the superclass method needs to call its private
-   field even if invoked from a subclass. The solution was to modify the subclass field
-   name using one or more prepended $.
-   
-5) Use of Class.getDeclaredMethods() reflection will return Method objects having the transpiled 
-   name, not the Java name. This could require some j2sNative adjustment 
-   to strip the $... parameters from the name if that is needed. 
-
-6) Use of Method.getParameterTypes() should work fine, provided class names
-   do not contain "_". This is because the transpiler converts "." to "_" when
-   creating the fully qualified JavaScript name.
-
-
-positive integers do not add to give negative numbers
------------------------------------------------------
-
-In Java, the following is true:
-
-  2000000000 + 2000000000 == -294967296
-
-But in SwingJS, that will be 4000000000. So, for example, the following
-strategy will fail in SwingJS:
-
-               int newLength = lineBuf.length * 2;
-               if (newLength < 0) {
-                       newLength = Integer.MAX_VALUE;
-               }
-
-"-1" in JavaScript is not 0xFFFFFFFF.
-
-And one must take care to not compare a negative number with a 32-bit mask. So
-
-(b & 0xFF000000) == 0xFF000000
-
-is true in Java for (int) b = -1, but is false in JavaScript, because 0xFF000000 is 4278190080, 
-while (-1 & 0xFF000000) is, strangely enough, -16777216, and, in fact, 
-
-(0xFF000000 & 0xFF000000) != 0xFF000000
-
-because -16777216 is not 4278190080.
-
-The fix is that one must compare similar operations:
-
-if ((b & 0xFF000000) == (0xFF000000 & 0xFF000000)) .....
-
-Importantly, the JavaScript Int32Array does behave properly. From 
-the Firefox developer console:
-
->> x = new Int32Array(1)
-<- Int32Array(1) [ 0 ]
->> x[0] = 4000000000
-<- 4000000000
->> x[0]
-<- -294967296
-
-Notice that, perhaps unexpectedly, the following two constructs produce 
-different results in JavaScript:
-
-x = new Int32Array(1);
-b = x[0] = 4000000000;
-
-(b will be 4000000000)
-
-and
-
-x = new Int32Array(1);
-x[0] = 4000000000;
-b = x[0];
-
-(b will be -294967296)
-
-
-SwingJS leverages array typing to handle all byte and short arithmetic so as
-to ensure that any byte or short operation in JavaScript does give the same 
-result in Java. The design decision to not also do this with integer math was
-a trade-off between performance and handling edge cases.
-
-
-ArrayIndexOutOfBounds
----------------------
-
-You cannot implicitly throw an ArrayIndexOutOfBoundsException in JavaScript.
-JavaScript will simply return "undefined", not throw an Exception. So:
-
-boolean notAGoodIdeaIsOutOfBounds(String[] sa, int i) {
-  try {
-     return (sa[i] == sa[i]);
-  } catch (ArrayIndexOutOfBoundsException e) {
-       return false;
-  }
-}
-
-will work in Java but not in JavaScript. Code should not depend upon this sort 
-of trap anyway, if you ask me. 
-
-Throwable vs Error vs Exception
--------------------------------
-
-True JavaScript errors are trapped as Throwable, whereas you can still trap
-Error and Exception as well. So if you want to be sure to catch any JavaScript
-error, use try{}catch (Throwable t){}, not try{}catch (Exception e){}. 
-
-j
-ava.awt.Color
---------------
-
-ColorSpace: only "support" CS_sRGB.
-
- TODO -- any volunteers??
-
-javax.swing.JFileDialog
------------------------
-
-HTML5 cannot expose a file reading directory structure. But you certainly 
-can still do file reading and writing. It just works a little differently.
-It's a simple modification:
-
-               b = new JButton("FileOpenDialog");
-               b.addActionListener(new ActionListener() {
-
-                       @Override
-                       public void actionPerformed(ActionEvent e) {
-                               JFileChooser fc = new JFileChooser();
-                               Test_Dialog.this.onDialogReturn(fc.showOpenDialog(Test_Dialog.this));
-                               // Java will wait until the dialog is closed, then enter the onDialogReturn method.
-                               // JavaScript will exit with NaN immediately, and then call back with its actual value
-                               // asynchronously.
-                       }
-
-               });
-       
-               public void onDialogReturn(int value) {
-                       if (value != Math.floor(value))
-                               return; // in JavaScript, this will be NaN, indicating the dialog has been opened
-                       // If we are here, the dialog has closed, in both Java and JavaScript.
-                       System.out.println("int value is " + value);
-               }
-
-
-       @Override
-       public void propertyChange(PropertyChangeEvent event) {
-               Object val = event.getNewValue();
-               String name = event.getPropertyName();
-               System.out.println(name);
-               switch (event.getSource().getClass().getName()) {
-               case "javax.swing.JOptionPane":
-                       switch (name) {
-                       case "inputValue":
-                               onDialogReturn(val);
-                               return;
-                       case "value":
-                               if (val instanceof Integer)
-                                       onDialogReturn(((Integer) val).intValue());
-                               else
-                                       onDialogReturn(val);
-                               return;
-                       }
-                       break;
-               case "javax.swing.ColorChooserDialog":
-                       switch (name) {
-                       case "SelectedColor":
-                               onDialogReturn(val);
-                               return;
-                       }
-                       break;
-               case "javax.swing.JFileChooser":
-                       switch (name) {
-                       case "SelectedFile":
-                               File file = (File) val;
-                               byte[] array = (val == null ? null : /** @j2sNative file.秘bytes || */
-                                               null);
-                               onDialogReturn("fileName is '" + file.getName() + "'\n\n" + new String(array));
-                               return;
-                       }
-                       break;
-               }
-               System.out.println(
-                               event.getSource().getClass().getName() + " " + event.getPropertyName() + ": " + event.getNewValue());
-       }
-
-
-Developers are encouraged to create a separate class that handles general calls to JFileDialog. 
-An example class can be found in the SwingJS distribution as 
-
-/sources/net.sf.j2s.java.core/src/javajs/async/AsyncFileChooser.java.
-
-
-javax.swing.JOptionPane dialogs
--------------------------------
-
-For this action to work, the parentComponent must implement
-propertyChangeListener, and any call to JOptionPanel should allow for
-an asynchronous response, meaning that there is no actionable code following the
-call to the dialog opening. 
-
-In addition, for compatibility with the Java version, implementation should
-wrap the call to getConfirmDialog or getOptionDialog in a method call to
-handle the Java:
-
-onDialogReturn(JOptionPane.showConfirmDialog(parentFrame,
-messageOrMessagePanel, "title", JOptionPane.OK_CANCEL_OPTION));
-
-Then parentFrame.propertyChange(event) should also call onDialogReturn.
-
-This will then work in both Java and JavaScript.
-
-Note that there is an int and an Object version of onDialogReturn().
-
-
-In JavaScript:
-
-The initial return from JOptionPane.showConfirmDialog and showMessageDialog
-will be (SwingJS) JDialog.ASYNCHRONOUS_INTEGER (NaN), testable as an impossible 
-Java int value using ret != -(-ret) if the parent implements PropertyChangeListener, or -1
-(CLOSE_OPTION) if not.
-
-For showOptionDialog (which returns Object) or showInputDialog (which returns
-String), the initial return will be (SwingJS) JDialog.ASYNCHRONOUS_OBJECT, testable as
-((Object) ret) instanceof javax.swing.plaf.UIResource if the parent implements
-PropertyChangeListeneer, or null if not.
-
-The second return will be the desired return.
-
-In Java:
-
-The initial return will be the one and only modal final return.
-
-
-
-For full compatibility, The calling method must not continue beyond this
-call.
-
-All of the standard Java events associated with Components are also
-available.
-
-Certain fall back mechanisms are possible, where onReturn does not exist, but
-only for the following cases:
-
-
-For showMessageDialog, for WARNING_MESSAGE and ERROR_MESSAGE, a simple
-JavaScript alert() is used, returning 0 (OK_OPTION) or -1 (CLOSED_OPTION).
-
-For showInputDialog, if the message is a string, a simple JavaScript prompt()
-with input box is used, returning the entered string or null.
-
-For showConfirmDialog, a simple JavaScript confirm() is used, in which case:
-
-for YES_NO_OPTION: YES_OPTION or NO_OPTION
-
-for YES_NO_CANCEL_OPTION: YES_OPTION or CANCEL_OPTION
-
-for OK_CANCEL_OPTION or any other: OK_OPTION or CANCEL_OPTION
-
-Note that you should implement a response for CLOSED_OPTION for
-showConfirmDialog. For other dialogs, a null return indicates the dialog was
-closed, just as for Java.
-
-Developers are encouraged to create a separate class that handles general calls. 
-An example class can be found in the SwingJS distribution as src/javajs/async/AsyncDialog.java.
-Very simple modifications to the Java allows asynchronous operation using AsyncDialog. Here
-is a simple "do you want to close this frame" example, where you can see that what we have
-done is to set the reply into an ActionListener that is defined in the constructor of 
-the AsyncDisplay object:
-
-// Original:
-//
-//     private void promptQuit() {
-//             int sel = JOptionPane.showConfirmDialog(null, PROMPT_EXIT, NAME, JOptionPane.YES_NO_OPTION);
-//             switch (sel) {
-//             case JOptionPane.YES_OPTION:
-//                     resultsTab.clean();
-//                     seqs.dispose();
-//                     if (fromMain) {
-//                             System.exit(0);
-//                     }
-//                     break;
-//             }
-//     }
-
-       private void promptQuitAsync() {
-               new AsyncDialog(new ActionListener() {
-
-                       @Override
-                       public void actionPerformed(ActionEvent e) {
-                           int sel = ((AsyncDialog)e.getSource()).getOption();
-                               switch (sel) {
-                               case JOptionPane.YES_OPTION:
-                                       resultsTab.clean();
-                                       seqs.dispose();
-                                       if (fromMain) {
-                                               System.exit(0);
-                                       }
-                                       break;
-                               }
-                       }}).showConfirmDialog(null, PROMPT_EXIT, NAME, JOptionPane.YES_NO_OPTION);
-       }
-
-Very simple! 
-
-
-native methods
---------------
-
-The J2S compiler ignores all static native method declarations.
-Anything of this nature needs to be implemented in JavaScript if it is needed,
-using j2sNative blocks:
-
-/**
- * @j2sNative
- *
- *    var putYourJavaScriptCodeHere
- *
- */
- Note that if you follow that directly with a {...} block, then 
- the javadoc code will run in JavaScript, and the {...} code will run in Java.
-key Focus
----------
-
-As of June, 2019, the keyboard focus manager is fully implemented. 
-The one catch is that JTextPane and JTextArea, which already consume
-VK_TAB in Java, cannot use CTRL-TAB to continue a tabbing cycle around
-the components in a window. Instead, CTRL-TAB is absorbed by the browser. 
-
-
-LookAndFeel and UI Classes
---------------------------
-
-SwingJS implements the native browser look and feel as swingjs.plaf.HTML5LookAndFeel. 
-There are small differences between all look and feels -- MacOS, Windows, SwingJS.
-
-Expert developers know how to coerce changes in the UI by subclassing the UI for a 
-component. This probably will not work in SwingJS. 
-
-Note that LookAndFeel in Java usually determines canvas size in a Frame because 
-different operating systems (Mac OS vs Windows vs HTML5) will have 
-different edge sizes on their frames. If you want to ensure a component size, 
-use getContentPane().setPreferredSize().
-
-
-System.exit(0) does not stop all processes
-------------------------------------------
-
-Although System.ext(int) has been implemented in JavaScript, it just closes the 
-frames, stops all pending javax.swing.Timer objects in the queue, and runs any 
-threads added using Runtime.getRuntime().addShutdownHook(Thread).
-It may not stop all "threads." So don't rely on that.
-Applications are responsible for shutting down prior to executing System.exit(0). 
-
-
-myClass.getField not implemented
---------------------------------
-
-java.lang.reflect.Field is implemented minimally. It is not
-certain that Field.getDeclaringClass() will work. If you just want a 
-value of a field, you can do this:
-
-/**
- *@j2sNative
- *
- * return myClass[name]
- */   
-
-But that is not a java.lang.reflection.Field object.
-
-
-"window" and other reserved JavaScript names
---------------------------------------------
-
-No reserved top-level JavaScript name is allowed for a package name. So, for example, 
-one must rename packages such as "window" or "document" to names such as "win" or "doc".
-
-reserved field and method names
--------------------------------
-
-In order to minimize the chance of added SwingJS field and method names colliding with ones 
-developers might use in subclassing Java classes, we have added U+79D8 (first character of Mandarin 
-"secret") to the characters already disrecommended by Java documentation ("$" and "_"). The only problem
-would be if you use that character followed by certain English words in certain classes. For example
-\u79D8canvas for JComponents (in java.awt.JSComponent) and \u79D8byte (in java.io.File).
-
-qualified field and method names
---------------------------------
-
-Method names in SwingJS are fully qualified, meaning two methods with the same Java name but different
-parameters, such as write(int) and write(double), must not have the same name in JavaScript. (In this
-case, we will have write$I and write$D.) However, in certain cases it may be desirable to leave the
-method names unqualified. In particular, when an interface actually represents a JavaScript object, 
-the transpiler can leave a method name unqualified. The default situation for this is a class name 
-includes ".api.js" (case-sensitive). This means that any method in any class in a package js within 
-a package api, or any private interface js that has an outer interface api, will have all-unqualified
-methods. An example of this is swingjs.plaf.JSComboPopupList, which needs to communicate with a jQuery 
-object directly using the following interface:
-
-       private interface api {
-
-               interface js extends JQueryObject {
-
-                       abstract js j2sCB(Object options);
-
-                       abstract Object[] j2sCB(String method);
-
-                       abstract Object[] j2sCB(String method, Object o);
-
-                       abstract Object[] j2sCB(String method, int i);
-
-                       abstract int j2sCB(String OPTION, String name);
-
-               }
-       }
-
-Notice that all these variants of j2sCB() will call the same method in JavaScript by design.
-
-
-missing Math methods
---------------------
-
-java.lang.Math is worked out, but some methods are missing, either because they
-involve long integer value that are inaccessible in JavaScript, or because I just
-didn't implement them. This is a result of continued Java development. 
-It is easy enough to add these methods if you have the source. They go into j2sClazz.js, 
-which is combined with other initial libraries into swingjs2.js by build_site.xml
-
-
-Component.getGraphics(), Graphics.dispose()
--------------------------------------------
-
-Use of component.getGraphics() is discouraged in Java and in SwingJS. 
-Specifically in SwingJS, any call to component.getGraphics() or 
-BufferedImage.createGraphics() or Graphics.create(...) should be matched with graphics.dispose(), 
-particularly when it is called outside the context of a paint(Graphics)
-call from the system. 
-
-If you see your graphics scrolling down the page with each repaint, 
-look for where you have used Component.getGraphics() and not Graphics.dispose().
-For example, this will definitely NOT work in SwingJS:
-
-  this.paint(getGraphics())
-  
-and really should not work in Java, either, as it is technically a resource memory leak.
-
-Instead, if you really do not want to use repaint(), use this:
-
-  Graphics g = getGraphics();
-  paint(g);
-  g.dispose();
-
-
-
-Graphics.setClip()
-------------------
-
-The HTML5 canvas.clip() method is permanent. You can only reset the clip using
-save/restore. This is different from Java, where you can temporarily change it using
-
-  Shape oldClip = Graphics.getClip();
-  Graphics.setClip(newClip);
-   ...
-  Graphics.setClip(oldClip); 
-
-If you need to do something like this, you must schedule the paints
-to not have overlapping clip needs.
-
-
-MAJOR ISSUES--for Bob and Udo within SwingJS
-============================================
-
-fonts
------
-
-Fonts and FontMetrics will all be handled in JavaScript. Font matching will 
-not be exact, and composite (drawn) fonts will not be supported. 
-
-SwingJS handles calls such as font.getFontMetrics(g).stringWidth("xxx") by 
-creating a <div> containing that text, placing it in an obscure location on 
-the page, and reading div.getBoundingClientRect(). This is a VERY precise
-value, but can be a pixel or two off from what Java reports for the same font.
-OS-dependent classes
---------------------
-
-Static classes such as:
-
-   java.awt.Toolkit
-   java.awt.GraphicsEnvironment
-   
-   
-which are created using Class.forName are implemented using classes in the swingjs package.
-
-AWTAccessor is not implemented. 
-
-   
-AWT component peers and component "ui" user interfaces
-------------------------------------------------------
-
-ComponentPeer is a class that represents a native AWT component.
-Components with such peers are called "heavy-weight" components.
-They are expected to do the dirty work of graphics drawing. 
-
-Java Swing implements peers only for JApplet, JDialog, JFrame, and JWindow. 
-References to such objects have been removed, but clearly there must be 
-some connection to similar DOM objects, even for "light-weight" components. 
-
-
-  
-MAJOR ISSUES--to be resolved by implementers
-============================================
-
-fonts
------
-
-Glyph/composite/outline fonts are not supported.
-   
-
-
-threads
--------
-
-Thread locking and synchronization are not relevant to JavaScript.
-Thus, anything requiring "notify.." or "waitFor.." could be a serious issue.
-All threading must be "faked" in JavaScript. Specifically not available is:
-
-  Thread.sleep()
-  
-javax.swing.AbstractButton#doClick(pressTime) will not work, as it requires Thread.sleep();
-    
-However, java.lang.Thread itself is implemented and used extensively. 
-
-Methods thread.start() and thread.run() both work fine. 
-
-For simple applications that use Thread.sleep() just to have a delay, as in a frame rate, for 
-example, one can use javax.swing.Timer instead. That is fully implemented. 
-
-Likewise, java.util.Timer can be replaced with no loss of performance with javax.Swing.Timer.
-Note that java.util.TimerTask is implemented, but it can also be replaced by an implementation of Runnable.
-
-task = new TimerTask(){....};
-t = new java.util.Timer();
-t.schedule(task, 0, 1);
-
-becomes
-
-task = new TimerTask(){....}; // or task = new Runnable() {...}
-t = new javax.swing.Timer(1, new ActionListener() {
-       @Override
-       public void actionPerformed(ActionEvent e) {
-               task.run();
-       }
-};
-t.setInitialDelay(0); // not particularly necessary
-t.start();
-
-In addition, SwingJS provides swingjs.JSThread, which can be subclassed
-if desired. This class allows simple 
-
-  while(!interrupted()){
-       wait()
-       ...
-  }  
-
-action through an asynchronous function run1(mode). For example:
-
-       protected void run1(int mode) {
-               try {
-                       while (true)
-                               switch (mode) {
-                               case INIT:
-                                       // once-through stuff here
-                                       mode = LOOP;
-                                       break;
-                               case LOOP:
-                                       if (!doDispatch || isInterrupted()) {
-                                               mode = DONE;
-                                       } else {
-                                               Runnable r = new Runnable() {
-                                                       public void run() {
-                                                               // put the loop code here
-                                                       }
-                                               };
-                                               dispatchAndReturn(r);
-                                               if (isJS)
-                                                       return;
-                                       }
-                                       break;
-                               // add more cases as needed
-                               case DONE:
-                                       // finish up here
-                                       if (isInterrupted())
-                                               return;
-                                       // or here
-                                       break;
-                               }
-               } finally {
-                       // stuff here to be executed after each loop in JS or at the end in Java
-               }
-       }
-
-image loading
--------------
-- All image loading in SwingJS is synchronous. A MediaTracker call will immediately return "complete".
-  However, it still may take one system clock tick to fully load images. Thus, it is recommended that
-  images be preloaded in the static block of the applet if it is necessary that they be available in init().
-  This is only an issue if you are trying to access the pixel buffer of the image in JavaScript. 
-  
-- Applet.getImage(path, name) will return null if the image does not exist. 
-
-- BufferedImage: only "support" imageType RGB and ARGB
-
-  -BH: This is a temporary edit, just to get us started. Certainly GRAY will be needed
-
-
-BigInteger and BigDecimal
--------------------------
-
-java.math.BigInteger is fully supported; java.math.BigDecimal is roughed 
-in and not fully tested (07/2019). 
-
-Both classes present significant issues for JavaScript, as they are based in 
-Java's 64-bit long for all their operations. Here is the JavaDoc note I added
-to BigInteger:
-
- * SwingJS note: Because of the limitations of JavaScript with regard
- * to long-integer bit storage as a double, this implementation drops
- * the integer storage bit length to 24, giving 48 for long and leaving
- * the last 16 bits clear for the exponent of the double number. This should
- * not affect performance significantly. It does increase the storage 
- * size by about 33%. By bringing an "int" to 3 bytes, we can easily construct
- * and use byte[] data intended for the original BitSet.  
-
-"Easily" may be a bit strong there. This was a serious challenge.
-
-BigDecimal seems to run normally, but in order to do that, my hack involves
-reducing the size of an integer that is allowed to be stored as such and not
-in byte[] as a BigInteger. I'm sure there is a performance hit, but it does work.
-
-no format internationalization
-------------------------------
-
-For now, just en for number and date formatters
-
-no winding rules
-----------------
-
-  When filling a graphic, only nonzero winding rule is implemented in HTML5 Canvas2D.
-
-
-
-text-related field implementation
----------------------------------
-
-Text fields are:
-
-JTextField   (JavaScript <input type="text">)
-JTextArea    (JavaScript <textarea>)
-JTextPane    (JavaScript <div>)
-JEditorPane  (JavaScript <div>)
-
-For the initial implementation, we don't implement infinite undo/redo, and the abstract 
-document model is much less elaborate. Only PlainDocument (in the form of JSPlainDocument)
-is implemented. The Document returned by JTextField.getDocument() is a javax.swing.text.Document.
-
-All scrolling is handled by HTML5. javax.swing.AutoScroller is not implemented.
-public static methods .stop, .isRunning, .processMouseDragged require true Java threading
-and so are not implmented. javax.swing.text.View and its subclasses are not implemented. 
-
-The JS document model does not allow two text fields to address the same underlying document. 
-
-JavaScript is slightly different from Java in that the field value is changed asynchronously after
-the keypressed event, so Java actions that are keyed to KEY_PRESSED may not pick up the new 
-key value even after SwingUtilities.invokeLater() is called. Thus, key pressed actions may need
-to be recorded after a key released event instead. 
-
-Formatter/Regex limitations
----------------------------
-
-Some browsers cannot process Regex "look-behind" process such as (?<=\W)
-java.util.regex.Matcher and Pattern use JavaScript's RegExp object rather than
-the native Java object. These are not identical. Only flags /igm are supported.
-Matcher.start(groupID) is not supported.
-
-java.util.Formatter will function correctly for all standard %... patterns.
-
-integer 1/0 == Infinity
------------------------
-
-1/0 in Java throws "java.lang.ArithmeticException: / by zero", but in JavaScript is just Infinity. 
-
-
-Summary
--------
-
-These are all the known limitations of SwingJS. We have not found any of these limitations
-to be show-stoppers. The primary issue for newcomers to SwingJS is having the source code.
-You must check that source code for all your library jar files is available or, if you
-choose, you will need to decompile those classes. We have used decompilation on some projects,
-and it works just fine. So, technically, all we really need are JAR/class files. But the 
-source is by far superior. It's generally prettier, and it has the license information that
-may or may not be present with the JAR or class files. Use class files at your own risk.
-
-Bob Hanson
-2019.08.16
-
-
-Additional Issues
------------------
-
-Annotation is working for classes, methods, and fields (12/22/19). Method reflection, however,
-is limited. Interfaces do not expose their methods, as the transpiler does not actually transpile
-the interfaces themselves. And method reflection only includes annotated methods.
-
-java.util.concurrent is not fully elaborated. This package is rewritten to not actually use the
-memory handling capabilities of concurrency, which JavaScript does not have access to.
-
-System.getProperties() just returns a minimal set of properties.
-
-
diff --git a/swingjs/ver/3.2.10/net.sf.j2s.core.jar b/swingjs/ver/3.2.10/net.sf.j2s.core.jar
deleted file mode 100644 (file)
index 30390e0..0000000
Binary files a/swingjs/ver/3.2.10/net.sf.j2s.core.jar and /dev/null differ
diff --git a/swingjs/ver/3.2.10/timestamp b/swingjs/ver/3.2.10/timestamp
deleted file mode 100644 (file)
index bd4382b..0000000
+++ /dev/null
@@ -1 +0,0 @@
-20201222130056 
diff --git a/swingjs/ver/3.2.5/DEV_NOTES.txt b/swingjs/ver/3.2.5/DEV_NOTES.txt
deleted file mode 100644 (file)
index 751d81c..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-This is sources/net.sf.j2s.java.core/dist/DEV_NOTES.txt
-
-_j2sclasslist.txt 
-
-the list of .js files concatenated into coreswingjs.js and minified to coreswingjs.z.js
-
-
-SwingJS-site.zip
-
-the full site directory for SwingJS including all files not in the test/ directory.
diff --git a/swingjs/ver/3.2.5/_j2sclasslist.txt b/swingjs/ver/3.2.5/_j2sclasslist.txt
deleted file mode 100644 (file)
index 076f300..0000000
+++ /dev/null
@@ -1,412 +0,0 @@
-java/applet/Applet.js
-java/applet/AppletContext.js
-java/applet/AppletStub.js
-java/applet/JSApplet.js
-java/awt/ActiveEvent.js
-java/awt/Adjustable.js
-java/awt/AWTEvent.js
-java/awt/AWTEventMulticaster.js
-java/awt/AWTKeyStroke.js
-java/awt/BasicStroke.js
-java/awt/BorderLayout.js
-java/awt/Button.js
-java/awt/Color.js
-java/awt/color/ColorSpace.js
-java/awt/Component.js
-java/awt/ComponentOrientation.js
-java/awt/ContainerOrderFocusTraversalPolicy.js
-java/awt/Container.js
-java/awt/Cursor.js
-java/awt/DefaultFocusTraversalPolicy.js
-java/awt/DefaultKeyboardFocusManager.js
-java/awt/Dialog.js
-java/awt/Dimension.js
-java/awt/dnd/peer/DropTargetPeer.js
-java/awt/event/ActionListener.js
-java/awt/event/AdjustmentEvent.js
-java/awt/event/AdjustmentListener.js
-java/awt/event/AWTEventListener.js
-java/awt/event/ComponentAdapter.js
-java/awt/event/ComponentEvent.js
-java/awt/event/ComponentListener.js
-java/awt/event/ContainerListener.js
-java/awt/event/FocusEvent.js
-java/awt/event/FocusListener.js
-java/awt/event/HierarchyBoundsListener.js
-java/awt/event/HierarchyListener.js
-java/awt/event/InputEvent.js
-java/awt/event/InputMethodListener.js
-java/awt/event/InvocationEvent.js
-java/awt/event/ItemEvent.js
-java/awt/event/ItemListener.js
-java/awt/event/KeyListener.js
-java/awt/event/MouseEvent.js
-java/awt/event/MouseListener.js
-java/awt/event/MouseMotionListener.js
-java/awt/event/MouseWheelListener.js
-java/awt/event/TextListener.js
-java/awt/event/WindowAdapter.js
-java/awt/event/WindowEvent.js
-java/awt/event/WindowFocusListener.js
-java/awt/event/WindowListener.js
-java/awt/event/WindowStateListener.js
-java/awt/EventDispatchThread.js
-java/awt/EventFilter.js
-java/awt/EventQueue.js
-java/awt/EventQueueItem.js
-java/awt/FlowLayout.js
-java/awt/FocusTraversalPolicy.js
-java/awt/Font.js
-java/awt/font/FontRenderContext.js
-java/awt/FontMetrics.js
-java/awt/Frame.js
-java/awt/geom/AffineTransform.js
-java/awt/geom/Dimension2D.js
-java/awt/geom/Path2D.js
-java/awt/geom/PathIterator.js
-java/awt/geom/Point2D.js
-java/awt/geom/Rectangle2D.js
-java/awt/geom/RectangularShape.js
-java/awt/geom/RectIterator.js
-java/awt/GraphicsCallback.js
-java/awt/GraphicsConfiguration.js
-java/awt/GraphicsDevice.js
-java/awt/GraphicsEnvironment.js
-java/awt/Image.js
-java/awt/image/ImageObserver.js
-java/awt/Insets.js
-java/awt/ItemSelectable.js
-java/awt/JSComponent.js
-java/awt/JSDialog.js
-java/awt/JSFrame.js
-java/awt/JSPanel.js
-java/awt/KeyboardFocusManager.js
-java/awt/KeyEventDispatcher.js
-java/awt/KeyEventPostProcessor.js
-java/awt/Label.js
-java/awt/LayoutManager.js
-java/awt/LayoutManager2.js
-java/awt/LightweightDispatcher.js
-java/awt/Paint.js
-java/awt/Panel.js
-java/awt/peer/ComponentPeer.js
-java/awt/peer/ContainerPeer.js
-java/awt/peer/FramePeer.js
-java/awt/peer/KeyboardFocusManagerPeer.js
-java/awt/peer/LightweightPeer.js
-java/awt/peer/WindowPeer.js
-java/awt/Point.js
-java/awt/Queue.js
-java/awt/Rectangle.js
-java/awt/RenderingHints.js
-java/awt/Scrollbar.js
-java/awt/ScrollPane.js
-java/awt/Shape.js
-java/awt/Stroke.js
-java/awt/TextArea.js
-java/awt/TextComponent.js
-java/awt/TextField.js
-java/awt/Toolkit.js
-java/awt/Transparency.js
-java/awt/Window.js
-java/beans/ChangeListenerMap.js
-java/beans/PropertyChangeEvent.js
-java/beans/PropertyChangeListener.js
-java/beans/PropertyChangeSupport.js
-java/lang/AbstractStringBuilder.js
-java/lang/Class.js
-java/lang/Enum.js
-java/lang/Iterable.js
-java/lang/reflect/Constructor.js
-java/lang/reflect/Method.js
-java/lang/StringBuffer.js
-java/lang/StringBuilder.js
-java/lang/Thread.js
-java/lang/ThreadGroup.js
-java/math/RoundingMode.js
-java/net/URL.js
-java/net/URLStreamHandlerFactory.js
-java/net/HttpURLConnection.js
-java/net/URLStreamHandler.js
-javax/net/ssl/HttpsUrlConnection.js
-java/text/CharacterIterator.js
-java/text/DecimalFormat.js
-java/text/DecimalFormatSymbols.js
-java/text/DigitList.js
-java/text/FieldPosition.js
-java/text/Format.js
-java/text/NumberFormat.js
-java/util/AbstractCollection.js
-java/util/AbstractList.js
-java/util/AbstractMap.js
-java/util/AbstractSequentialList.js
-java/util/AbstractSet.js
-java/util/ArrayList.js
-java/util/Arrays.js
-java/util/Collection.js
-java/util/Collections.js
-java/util/Comparator.js
-java/util/Deque.js
-java/util/Dictionary.js
-java/util/Enumeration.js
-java/util/EventListener.js
-java/util/EventObject.js
-java/util/HashMap.js
-java/util/HashSet.js
-java/util/Hashtable.js
-java/util/IdentityHashMap.js
-java/util/Iterator.js
-java/util/LinkedHashMap.js
-java/util/LinkedList.js
-java/util/List.js
-java/util/ListResourceBundle.js
-java/util/Locale.js
-java/util/Map.js
-java/util/Objects.js
-java/util/Queue.js
-java/util/Random.js
-java/util/RandomAccess.js
-java/util/ResourceBundle.js
-java/util/Set.js
-java/util/TimSort.js
-java/util/Vector.js
-javajs/api/JSFunction.js
-javajs/util/AjaxURLConnection.js
-javajs/util/AjaxURLStreamHandlerFactory.js
-javajs/util/AU.js
-javajs/util/JSThread.js
-javajs/util/Lst.js
-javajs/util/PT.js
-javajs/util/Rdr.js
-javajs/util/SB.js
-javax/swing/AbstractAction.js
-javax/swing/AbstractButton.js
-javax/swing/AbstractListModel.js
-javax/swing/Action.js
-javax/swing/ActionMap.js
-javax/swing/AncestorNotifier.js
-javax/swing/ArrayTable.js
-javax/swing/border/AbstractBorder.js
-javax/swing/border/BevelBorder.js
-javax/swing/border/Border.js
-javax/swing/border/CompoundBorder.js
-javax/swing/border/EmptyBorder.js
-javax/swing/border/EtchedBorder.js
-javax/swing/border/LineBorder.js
-javax/swing/border/TitledBorder.js
-javax/swing/BorderFactory.js
-javax/swing/BoundedRangeModel.js
-javax/swing/BoxLayout.js
-javax/swing/ButtonGroup.js
-javax/swing/ButtonModel.js
-javax/swing/ClientPropertyKey.js
-javax/swing/ComboBoxModel.js
-javax/swing/DefaultBoundedRangeModel.js
-javax/swing/DefaultButtonModel.js
-javax/swing/DefaultComboBoxModel.js
-javax/swing/DefaultSingleSelectionModel.js
-javax/swing/DropMode.js
-javax/swing/event/AncestorEvent.js
-javax/swing/event/AncestorListener.js
-javax/swing/event/CaretEvent.js
-javax/swing/event/CaretListener.js
-javax/swing/event/ChangeEvent.js
-javax/swing/event/ChangeListener.js
-javax/swing/event/DocumentEvent.js
-javax/swing/event/DocumentListener.js
-javax/swing/event/EventListenerList.js
-javax/swing/event/ListDataEvent.js
-javax/swing/event/ListDataListener.js
-javax/swing/event/UndoableEditEvent.js
-javax/swing/event/UndoableEditListener.js
-javax/swing/FocusManager.js
-javax/swing/InternalFrameFocusTraversalPolicy.js
-javax/swing/LayoutComparator.js
-javax/swing/LayoutFocusTraversalPolicy.js
-javax/swing/SortingFocusTraversalPolicy.js
-javax/swing/SwingContainerOrderFocusTraversalPolicy.js
-javax/swing/SwingDefaultFocusTraversalPolicy.js
-javax/swing/Icon.js
-javax/swing/ImageIcon.js
-javax/swing/InputMap.js
-javax/swing/JApplet.js
-javax/swing/JButton.js
-javax/swing/JCheckBox.js
-javax/swing/JCheckBoxMenuItem.js
-javax/swing/JComboBox.js
-javax/swing/JComponent.js
-javax/swing/JFrame.js
-javax/swing/JLabel.js
-javax/swing/JLayeredPane.js
-javax/swing/JMenu.js
-javax/swing/JMenuBar.js
-javax/swing/JMenuItem.js
-javax/swing/JPanel.js
-javax/swing/JPopupMenu.js
-javax/swing/JRadioButtonMenuItem.js
-javax/swing/JRootPane.js
-javax/swing/JScrollBar.js
-javax/swing/JScrollPane.js
-javax/swing/JSeparator.js
-javax/swing/JTextArea.js
-javax/swing/JTextField.js
-javax/swing/JToggleButton.js
-javax/swing/JViewport.js
-javax/swing/KeyboardManager.js
-javax/swing/KeyStroke.js
-javax/swing/ListModel.js
-javax/swing/LookAndFeel.js
-javax/swing/MenuElement.js
-javax/swing/MutableComboBoxModel.js
-javax/swing/plaf/ActionMapUIResource.js
-javax/swing/plaf/basic/BasicBorders.js
-javax/swing/plaf/BorderUIResource.js
-javax/swing/plaf/ColorUIResource.js
-javax/swing/plaf/ComponentUI.js
-javax/swing/plaf/DimensionUIResource.js
-javax/swing/plaf/FontUIResource.js
-javax/swing/plaf/InputMapUIResource.js
-javax/swing/plaf/InsetsUIResource.js
-javax/swing/plaf/UIResource.js
-javax/swing/RepaintManager.js
-javax/swing/RootPaneContainer.js
-javax/swing/Scrollable.js
-javax/swing/ScrollPaneConstants.js
-javax/swing/ScrollPaneLayout.js
-javax/swing/SingleSelectionModel.js
-javax/swing/SizeRequirements.js
-javax/swing/SwingConstants.js
-javax/swing/SwingPaintEventDispatcher.js
-javax/swing/SwingUtilities.js
-javax/swing/text/AbstractDocument.js
-javax/swing/text/AttributeSet.js
-javax/swing/text/Caret.js
-javax/swing/text/DefaultCaret.js
-javax/swing/text/DefaultEditorKit.js
-javax/swing/text/Document.js
-javax/swing/text/EditorKit.js
-javax/swing/text/Element.js
-javax/swing/text/GapContent.js
-javax/swing/text/GapVector.js
-javax/swing/text/JTextComponent.js
-javax/swing/text/MutableAttributeSet.js
-javax/swing/text/PlainDocument.js
-javax/swing/text/PlainView.js
-javax/swing/text/Position.js
-javax/swing/text/Segment.js
-javax/swing/text/SegmentCache.js
-javax/swing/text/SimpleAttributeSet.js
-javax/swing/text/Style.js
-javax/swing/text/StyleConstants.js
-javax/swing/text/StyleContext.js
-javax/swing/text/TabExpander.js
-javax/swing/text/TextAction.js
-javax/swing/text/Utilities.js
-javax/swing/text/View.js
-javax/swing/tree/TreeNode.js
-javax/swing/UIDefaults.js
-javax/swing/UIManager.js
-javax/swing/undo/AbstractUndoableEdit.js
-javax/swing/undo/CompoundEdit.js
-javax/swing/undo/UndoableEdit.js
-javax/swing/ViewportLayout.js
-javax/swing/WindowConstants.js
-sun/awt/AppContext.js
-sun/awt/AWTAutoShutdown.js
-sun/awt/CausedFocusEvent.js
-sun/awt/ComponentFactory.js
-sun/awt/KeyboardFocusManagerPeerProvider.js
-sun/awt/MostRecentKeyValue.js
-sun/awt/MostRecentThreadAppContext.js
-sun/awt/PaintEventDispatcher.js
-sun/awt/PostEventQueue.js
-sun/awt/RequestFocusController.js
-sun/awt/SunToolkit.js
-sun/awt/WindowClosingListener.js
-sun/awt/WindowClosingSupport.js
-sun/awt/image/DataStealer.js
-sun/awt/image/IntegerComponentRaster.js
-sun/awt/image/IntegerInterleavedRaster.js
-sun/awt/image/SunWritableRaster.js
-sun/font/FontDesignMetrics.js
-sun/swing/DefaultLookup.js
-sun/swing/SwingLazyValue.js
-sun/text/resources/FormatData.js
-sun/text/resources/en/FormatData_en.js
-sun/util/resources/LocaleData.js
-sun/util/locale/BaseLocale.js
-sun/util/locale/LocaleUtils.js
-sun/util/locale/provider/LocaleProviderAdapter.js
-sun/util/locale/provider/LocaleDataMetaInfo.js
-swingjs/a2s/A2SContainer.js
-swingjs/a2s/A2SEvent.js
-swingjs/a2s/A2SListener.js
-swingjs/a2s/Applet.js
-swingjs/a2s/Button.js
-swingjs/a2s/Label.js
-swingjs/a2s/Panel.js
-swingjs/a2s/Scrollbar.js
-swingjs/a2s/ScrollPane.js
-swingjs/a2s/TextArea.js
-swingjs/a2s/TextField.js
-swingjs/api/Interface.js
-swingjs/api/js/DOMNode.js
-swingjs/api/js/HTML5CanvasContext2D.js
-swingjs/api/js/JSInterface.js
-swingjs/jquery/JQueryUI.js
-swingjs/JSApp.js
-swingjs/JSAppletThread.js
-swingjs/JSAppletViewer.js
-swingjs/JSFocusPeer.js
-swingjs/JSFontMetrics.js
-swingjs/JSFrameViewer.js
-swingjs/JSGraphics2D.js
-swingjs/JSGraphicsConfiguration.js
-swingjs/JSGraphicsEnvironment.js
-swingjs/JSImage.js
-swingjs/JSImagekit.js
-swingjs/JSMouse.js
-swingjs/JSNullComponentPeer.js
-swingjs/JSScreenDevice.js
-swingjs/JSThreadGroup.js
-swingjs/JSToolkit.js
-swingjs/JSUtil.js
-swingjs/plaf/ButtonListener.js
-swingjs/plaf/DefaultMenuLayout.js
-swingjs/plaf/HTML5LookAndFeel.js
-swingjs/plaf/JSAppletUI.js
-swingjs/plaf/JSButtonUI.js
-swingjs/plaf/JSCheckBoxMenuItemUI.js
-swingjs/plaf/JSCheckBoxUI.js
-swingjs/plaf/JSComboBoxUI.js
-swingjs/plaf/JSComponentUI.js
-swingjs/plaf/JSEventHandler.js
-swingjs/plaf/JSFrameUI.js
-swingjs/plaf/JSGraphicsUtils.js
-swingjs/plaf/JSLabelUI.js
-swingjs/plaf/JSLayeredPaneUI.js
-swingjs/plaf/JSLightweightUI.js
-swingjs/plaf/JSMenuBarUI.js
-swingjs/plaf/JSMenuItemUI.js
-swingjs/plaf/JSMenuUI.js
-swingjs/plaf/JSPanelUI.js
-swingjs/plaf/JSPopupMenuSeparatorUI.js
-swingjs/plaf/JSPopupMenuUI.js
-swingjs/plaf/JSRadioButtonMenuItemUI.js
-swingjs/plaf/JSRadioButtonUI.js
-swingjs/plaf/JSRootPaneUI.js
-swingjs/plaf/JSScrollBarUI.js
-swingjs/plaf/JSScrollPaneUI.js
-swingjs/plaf/JSSeparatorUI.js
-swingjs/plaf/JSSliderUI.js
-swingjs/plaf/JSTextAreaUI.js
-swingjs/plaf/JSTextFieldUI.js
-swingjs/plaf/JSTextUI.js
-swingjs/plaf/JSTextViewUI.js
-swingjs/plaf/JSViewportUI.js
-swingjs/plaf/JSWindowUI.js
-swingjs/plaf/LazyActionMap.js
-swingjs/plaf/Resizer.js
-swingjs/plaf/TextListener.js
-
-
diff --git a/swingjs/ver/3.2.5/differences.txt b/swingjs/ver/3.2.5/differences.txt
deleted file mode 100644 (file)
index 60f5fcc..0000000
+++ /dev/null
@@ -1,1541 +0,0 @@
-Notes
-=====
-
----IMPORTANT CHARACTER SET NOTE---
-
-It is critical that all development work in Java2Script 
-be done in UTF-8. This means:
-
-- making sure your Eclipse project is set up for UTF-8 (not the Eclipse default?)
-- making sure your server can serve up UTF-8 by default for any browser-loaded files
-- making sure you don't edit a Java2Script class file or one of the site .js files
-    using a non-UTF-8 editor. It may replace non-Latin characters with "?" or garbage.
-- making sure that your web pages are delivered with proper headings indicating HTML5 and UTF-8
-
-<!DOCTYPE html>
-<html>
-<head>
-<meta charset="utf-8">
-
-Note that the DOCTYPE tag is critical for some browsers to switch into HTML5 mode. (MSIE?)
-
-
-
-  
-In particular, the Mandarin character ç§˜ (mi; "secret") is used extensively throughout
-the SwingJS class files to distinguish j2s-specific fields and methods that must not 
-ever be shadowed or overridden by subclasses. For example, we see in java.lang.Thread.java:
-
-               public static JSThread ç§˜thisThread;
-
-----------------------------------
-
-
-updated 12/6/2020 -- note about restrictions on long, including BitSet and Scanner
-updated 3/21/2020 -- adds note about HashMap, Hashtable, and HashSet iterator ordering
-updated 3/20/2020 -- adds note about interning, new String("xxx"), and "xxx"
-updated 2/26/2020 -- adds Graphics.setClip issue
-updated 12/22/19 -- additional issues
-updated 11/03/19 -- adds information about File.exists() and points to src/javajs/async
-updated 10/26/19 -- adds information about File.createTempFile()
-updated 8/16/19 -- minor typos and added summary paragraph
-updated 7/19/19 -- clarification that AWT and Swing classes are supported directly
-updated 5/13/19 -- Mandarin U+79D8 reserved character; Missing Math methods; int and long
-updated 5/10/19 -- adds a section on static issues in multi-(duplicate)-applet pages
-updated 1/4/19 -- nio
-updated 9/15/18 -- adds integer 1/0 == Infinity
-updated 7/24/18 -- most classes replaced with https://github.com/frohoff/jdk8u-jdk
-updated 6/5/17 -- reserved package name "window"
-updated 3/11/17 -- myClass.getField
-updated 3/7/17 -- overloading of JSplitPane.setDividerLocation
-updated 3/2/17 -- more indication of classes not implemented (KeyListener)
-
-=============================================================================
-SwingJS and OpenJDK 8+
-=============================================================================
-
-SwingJS implements a wide range of the Java language in JavaScript. The base
-version for this implementation is OpenJDK8. some classes are implemented using 
-older source code, and there are some missing methods. For the most part, this is 
-no real problem. You can add or modify any java class just be adding it as source
-in your project. Or (preferably) you can contact me, and I can get it into the 
-distribution. Or (even more preferably) you can do that via a patch submission. 
-
-=================
-DESIGN PHILOSOPHY
-=================
-
-The java2script/SwingJS design goal is to recreate a recognizable, easily debuggable
-equivalent in JavaScript for as much of Java as practical. This means, for example, 
-that one can call in JavaScript 
-
-  new java.util.Hashtable()
-  
-and for all practical purposes it will appear that Java is running.
-
-
-Method and Field Disambiguation
--------------------------------
-
-SwingJS has no problem with the overloading of methods, for example:
-
-  public void print(int b);
-  public void print(float b);
-
-JavaScript does not allow overloading of methods, and the common practice in
-Java of naming a field the same as a method -- isAllowed and isAllowed() -- is
-not possible in JavaScript. As a result, SwingJS implements "fully-qualified" 
-method names using "$" parameter type separation. Thus, these methods in SwingJS
-will be referred to as print$I and print$F. The rules for this encoding are
-relatively simple: 
-
-1. The seven primitive types in Java are encoded $I (int), $L (long), $F (float), 
-$D (double), $B (byte) $Z (boolean), and $H (short). 
-
-2. String and Object are encoded as $S and $O, respectively.
-
-3. "java_lang_" is dropped for all other classes in the java.lang package (as in Java).
-   For example:  $StringBuffer, not $java_lang_StringBuffer
-
-4. All other classes are encoded as 
-
- "$" + Class.getName().replace(".","_")
-
-For example, in Java we see:
-
-  public void equals(Object o) {...}
-
-Whereas in SwingJS we have:
-
-  Clazz.newMeth(C$, 'equals$O', function (o) {...}
-
-And 
-
- this.getContentPane().add(bar, "North");
-
-becomes
-
- this.getContentPane$().add$java_awt_Component$O(bar, "North");
-
-5. Arrays are indicated with appended "A" for each level. So
-
-  setDataVector(Object[][] dataVector, Object[] columnIdentifiers)
-  
-becomes
-
-  setDataVector$OAA$OA(dataVector, columnIdentifiers)
-
-(It is recognized that this design does introduce a bit of ambiguity, in that
- in principal there could be user class named XA and X in the same package,
- and methods a(X[]) and a(XA) in the same class that cannot be distinguished.
- The benefit of this simple system, however, triumphed over the unlikelyhood
- of that scenario.) The transpiler could be set to flag this possibility.
-
-6. Constructors are prepended with "c$". So 
-
-  public JLabel(String text) {...}
-  
-becomes:
-
-  Clazz.newMeth(C$, 'c$$S', function (text) {...});
-
-Field disambiguation involves prepending. In Java, a class and its subclass 
-can both have the same field name, such as 
-
- boolean visible;
-When this happens, it is called "shadowing", and though not recommended, Java allows
-it. The Java2Script transpiler will prepend such shadowing fields with "$" so that the
-subclass instance has both "visible" (for use in its methods inherited from its
-superclass) and "$visible" (for its own methods). Thus, we might see in Java:
-
-  this.visible = super.visible;
-  
-while in SwingJS we will see:
-
-  this.$visible=this.visible;
-
-since JavaScript does not have the "super" keyword.
-
-
-
-Parameterless methods such as toString() are appended with "$" to become toString$().
-The one exception to this rule is private methods, which are saved in (truly) private 
-array in the class (and are not accessible by reflection). Private parameterless 
-methods retain their simple Java name, since they cannot conflict with field names.
-
-This renaming of methods has a few consequences, which are discussed more fully below.
-See particularly the section on "qualified field and method names", where it is described
-how you can use packages or classes or interfaces with ".api.js" in them to represent JavaScript
-objects for which all method names are to be left unqualified. Note that it is not 
-possible to cherry-pick methods to be unqualified; only full packages, classes or 
-interfaces can hold this status.
-
-The swingjs.api.js package in particular contains a number of useful interfaces that
-you can import into your project for JavaScript-specific capabilities.
-
-
-Applet vs. Application
-----------------------
-
-One of the very cool aspects of SwingJS is that it doesn't particularly matter if a browser-based
-Java app is an "applet" or an "application". We don't need JNLP (Java Network Launch Protocol) 
-because now we can just start up any Java application in a browser just as easily as any applet.
-The associative array that passes information to the SwingJS applet (information that formerly
-might have been part of the APPLET tag, such as width, height, and codebase, always referred to 
-in our writing as "the Info array") allows the option to specify the JApplet/Applet "code" 
-class or the application "main" class. Either one will run just fine.
-
-
-Performance
------------
-
-Obviously, there are limitations. One is performance, but we have seen reproducible 
-performance at 1/6 - 1/3 the speed of Java. Achieving this performance may require
-some refactoring of the Java to make it more efficient in both Java and JavaScript. 
-"for" loops need to be more carefully crafted; use of "new" and "instanceof" need to be
-minimized in critical areas. Note that method overloading -- that is, the same method name
-with different parameters, such as read(int) and read(byte) -- is no longer any problem. 
-  
-
-Threads
--------
-
-Although there is only a single thread in JavaScript, meaning Thread.wait(), Thread.sleep(int) and 
-Thread.notify() cannot be reproduced, we have found that this is not a serious limitation. 
-For example, javax.swing.Timer() works perfectly in JavaScript. All it means is that threads 
-that use sleep(int) or notify() must be refactored to allow Timer-like callbacks. That is, 
-they must allow full exit and re-entry of Thread.run(), not the typical while/sleep motif. 
-
-The key is to create a state-based run() that can be exited and re-entered in JavaScript.
-
-
-Static fields
--------------
-
-Final static primitive "constant" fields (String, boolean, int, etc.) such as 
-
-static final int TEST = 3;
-static final String MY_STRING = "my " + "string";
-
-are converted to their primitive form automatically by the Eclipse Java compiler 
-and do not appear in the JavaScript by their names. 
-
-Other static fields are properties of their class and can be used as expected.
-
-Note, however, that SwingJS runs all "Java" code on a page in a common "jvm" 
-(like older versions of Java). So, like the older Java schema, the JavaScript 
-equivalents of both applets and applications will share all of their static 
-fields and methods. This includes java.lang.System. 
-
-Basically, SwingJS implementations of Java run in a browser page-based sandbox 
-instead of an applet-specific one.
-
-In general, this is no problem. But if we are to implement pages with 
-multiple applets present, we must be sure to only have static references 
-that are "final" or specifically meant to be shared in a JavaScript 
-environment only (since they will not be shared in Java).
-
-A simple solution, if static non-constant references are needed, is to attach the 
-field to Thread.currentThread.threadGroup(), which is an applet-specific reference.
-Be sure, if you do this, that you use explicit setters and getters:
-
-For example, 
-
-private static String myvar;
-
-...
-
-public void setMyVar(String x) {
-  ThreadGroup g = Thread.currentThread().threadGroup();
-  /**
-   * @j2sNative g._myvar = x;
-   * 
-   */
-   {
-     myvar = x;
-   }
-}
-
-public String getMyVar() {
-  ThreadGroup g = Thread.currentThread().threadGroup();
-  /**
-   * @j2sNative return g._myvar || null;
-   * 
-   */
-   {
-     return myvar;
-   }
-}
- in Java will get and set x the same in JavaScript and in Java. 
-A convenient way to do this in general is to supply a singleton class with
-explicitly private-only constructors and then refer to it in Java and in JavaScript
-instead of using static field, referring to myclass.getIntance().xxx instead of 
-myclass.xxx in Java (and JavaScript). 
-
-This was done extensively in the Jalview project. See jalview.bin.Instance.
-
-
-Helper Packages -- swingjs/ and javajs/
----------------------------------------
-
-The SwingJS library is the swingjs/ package. There are interfaces that may be of assistance
-in swingjs/api, but other than that, it is not recommended that developers access classes in 
-this package. The "public" nature of their methods is really an internal necessity.
-
-In addition to swingjs/, though, there are several useful classes in the javajs/ package
-that could be very useful. This package is a stand-alone package that can be 
-cloned in any Java project that also would be great to have in any JavaScript project
--- SwingJS-related or not. Functionality ranges from reading and writing various file 
-formats, including PDF, BMP, PNG, GIF, JPG, JSON, ZIP, and CompoundDocument formats.
-
-A variety of highly efficient three- and four-dimensional point, vector, matrix, and 
-quaternion classes are included, as they were developed for JSmol and inherited from that
-project. 
-
-Of particular interest should be javajs/async/, which includes
-
-javajs.async.Async
-javajs.async.AsyncColorChooser
-javajs.async.AsyncDialog
-javajs.async.AsyncFileChooser
-
-See javajs.async.Async JavaDoc comments for a full description of 
-these useful classes.
-
-
-Modal Dialogs
--------------
-
-Although true modal dialogs are not possible with only one thread, a functional equivalent -- 
-asynchronous modal dialogs -- is relatively easy to set up. All the JOptionPane dialogs will
-return PropertyChangeEvents to signal that they have been disposed of and containing the results. 
-See below and classes in the javajs.async package.
-
-
-Native calls
-------------
-
-Native calls in Java are calls to operating system methods that are not in Java. JavaScript
-has no access to these, of course, and they must all be replaced by JavaScript equivalents.
-Fortunately, they are not common, and those that are present in Java (for example, in calculating
-checksums in ZIP file creation) are at a low enough level that most developers do not utilize them
-or do not even have access to them. All native calls in Java classes have been replaced by 
-Java equivalents.
-
-
-Swing GUI Peers and UIClasses
------------------------------
-
-One of the biggest adaptations introduced in SwingJS is in the area of the graphical 
-user interface. The issue here is complex but workable. In Java there are two background 
-concepts -- the Component "peer" (one per "heavy-weight" component, such as a Frame) and the 
-component "uiClass" (one per component, such as JButton or JTextField).
-
-Peers are native objects of the operating system. These are the virtual buttons and text areas
-that the user is interacting with at a very base level. Their events are being passed on to 
-Java or the browser by the operating system. UI classes provide a consistent "look and feel" 
-for these native objects, rendering them onto the native window canvas and handling all 
-user-generated events. They paint the borders, the backgrounds, the highlights, of every 
-control you see in Java. There is one-to-one correspondence of Swing classes and UI classes. 
-Setting the Look and Feel for a project amounts to selecting the directory from which to draw 
-these UI classes. The UI classes can be found in the javax.swing.plaf ("platform look and feel") 
-package.
-
-Early on in the development of SwingJS, we decided not to fully reproduce the painfully detailed 
-bit-by-bit painting of controls as is done in Java. Instead, we felt it was wiser to utilize the standard
-HTML5 UI capabilities as much as possible, using DIV, and INPUT especially, with extensive use
-of CSS and sometimes jQuery (menus, and sliders, for example). Thus, we have created a new 
-set of UIs -- the "HTML5 Look and Feel". These classes can be found in swingjs.plaf. Besides being
-more adaptable, this approach allows far more versatility to SwingJS developers, allowing them
-to modify the GUI to suit their needs if desired.
-
-In SwingJS, since we have no access to native peers except through the browser DOM,
-it seemed logical to merge the peer and UI idea. So instead of having one peer per heavy-weight control and
-one UI class instance for each control type, we just have one UI class instance per control, and
-that UI class instance is what is being referred to when a "peer" is notified. 
-
-In some ways this is a throw back to when all of Swing's components were subclasses of
-specific AWT components such as Button and List. These "heavy-weight components" all had their 
-own individual native peers and thus automatically took on the look and feel provided by the OS. 
-Later Swing versions implemented full look and feel for all peers, leaving only JDialog, JFrame,
-and a few other classes to have native peers. But in SwingJS we have again a 1:1 map of component
-and UI class/peer instance.
-
-The origin of most issues (read "bugs") in relation to the GUI will probably be found in the
-swingjs.plaf JSxxxxUI.java code.
-
-  
-Swing-only Components -- no longer an issue
--------------------------------------------
-
-Swing was introduced into Java well after the Java Abstract Window Toolkit (AWT) was well
-established. As such, its designers chose to allow AWT controls such as Button and List to be used 
-alongside their Swing counterparts JButton and JList. Reading the code, it is clear that this 
-design choice posed a huge headache for Swing class developers. 
-
-For SwingJS, we decided from the beginning NOT to allow this mixed-mode programming and 
-instead to require that all components be Swing components. 
-
-However, this is no longer an issue. All AWT components in SwingJS are now subclasses of 
-javax.swing.JComponent. So far, we have found no problem with this.
-
-The a2s Adapter Package
------------------------
-
-Originally, we thought that we would restrict ourselves to JApplets only. That is, only
-Swing-based applets. But as we worked, we discovered that there are a lot of great 
-applets out there that are pre-Swing pure-AWT java.applet.Applet applets. Our problem was 
-that we also wanted it to be possible to quickly adapt these applets to JavaScript as well.
-The solution turned out to be simple: Write a package (a2s) that recreates the interface for 
-non-Swing components as subclasses of Swing components. Thus, a2s.Button subclasses javax.swing.JButton
-but also accepts all of the methods of java.awt.Button. This works amazingly well, with a few
-special adaptations to the core javax.swing to be "AWT-aware." All AWT components now subclass 
-a2s components, which in turn subclass JComponents. So no changes in code are necessary. We have
-successfully transpiled over 500 applets using this strategy. (Kind of surprising, actually, that
-the original Java developers did not see that option. But we have a hindsight advantage here.)
-
-
-Working with Files
-==================
-
-Simple String file names are not optimal for passing information about
-read files within SwingJS applications. 
-All work with files should either use Path or File objects exclusively. 
-These objects, after a file is read or checked for existence, will already 
-contain the file byte[] data. Doing something like this:
-
-File f = File("./test.dat");
-boolean isOK = f.exists();
-
-will load f with its byte[] data, if the file exists. 
-
-But if after that, we use:
-
-File f2 = new File(f.getAbsolutePath());
-
-f2 will not contain that data. Such copying should be done as:
-
-File f2 = new File(f);
-
-in which case, the byte[] data will be transferred.
-
-
-SwingJS uses the following criteria to determine if File.exists() returns true:
-
-(1) if this File object has been used directly to read data, or 
-(2) if reading data using this File object is successful.
-
-Note that you cannot check to see if a file exists before input or if it 
-was actually written or if it already exists prior to writing in SwingJS.  
-
-Thus, you should check each use of file.exists() carefully, and if necessary, provide a J2sNative 
-block that gives an appropriate "OK" message, for example:
-
-(/** @j2sNative 1 ? false : */ outputfile.exits())
-
-or 
-
-(/** @j2sNative 1 ? true : */ inputfile.exits())
-
-Temporary files can be created in SwingJS. SwingJS will maintain a pseudo-filesystem for files 
-created with File.createTempFile(). This is useful in that closure of writing to a temporary file 
-does not generate a pseudo-download to the user's machine.
-
-
-UNIMPLEMENTED CLASSES BY DESIGN
-===============================
-
-The SwingJS implementation of the following classes are present 
-in a way that gracefully bypasses their functionality:
-
-accessibility
-security
-serialization
-
-
-
-TODO LIST FOR UNIMPLEMENTED CLASSES
-===================================
-
-JEditorPane (minimal implementation) - DONE 12/2018; some issues still
-JSplitPane - DONE 8/2018
-JTabbedPane - DONE 10/2018
-JTree - done 12/2019
-
-
-MINOR ISSUES--required some rewriting/refactoring by Bob and Udo  
-================================================================
-
-Thread.currentThread() == dispatchThread
-
-
-MINOR ISSUES--requiring some rewriting/refactoring outside of SwingJS  
-=====================================================================
-
-See below for a full discussion.
-
-Restrictions on long
-Restriction on BitSet and Scanner
-HashMap, Hashtable, and HashSet iterator ordering
-interning, new String("xxx") vs "xxx"
-Names with "$" and "_"
-positive integers do not add to give negative numbers
-ArrayIndexOutOfBounds
-java.awt.Color
-native methods
-javax.swing.JFileDialog
-key focus
-LookAndFeel and UI Classes
-System.exit(0) does not stop all processes
-list cell renderers must be JComponents
-myClass.getField not implemented
-"window" and other reserved JavaScript names
-reserved field and method names
-qualified field and method names
-missing Math methods
-Component.getGraphics(), Graphics.dispose()
-Graphics.setClip()
-
-MAJOR ISSUES--for Bob and Udo within SwingJS
-============================================
-
-fonts
-OS-dependent classes
-AWT component peers
-some aspects of reflection
-
-MAJOR ISSUES--to be resolved by implementers
-============================================
-
-fonts
-threads
-modal dialogs
-image loading
-BigDecimal not fully implemented 
-no format internationalization
-no winding rules
-text-related field implementation
-Formatter/Regex limitations
-integer 1/0 == Infinity
-
-======================================================================== 
-
-DISCUSS
-=======
-
-Table row/col sorter needs checking after removal of java.text.Collator references
-
-I had to move all of SunHints class to RenderingHints, or the 
-two classes could not be loaded. Shouldn't be a problem, I think. The sun classes are
-not accessible to developers in Java anyway, since they are generally package private.
-
-========================================================================== 
-
-//////////////////////////////////////////////////////////////////////////////
-
-UNIMPLEMENTED CLASSES
-=====================
-
-accessibility
--------------
-
-All Accessibility handling has been commented out to save the download footprint.
-This removes the need for sun.misc.SharedSecrets as well. 
-Nothing says we could not implement accessibility. We just didn't.
-
-
-security
---------
-
-All JavaScript security is handled by the browser natively. 
-Thus, Java security checking is no longer necessary, and 
-java.security.AccessController has been simplified to work without
-native security checking.
-
-Note that private methods in a class are REALLY private. 
-
-
-serialization
--------------
-
-All serialization has been removed. It was never very useful for Swing anyway, 
-because one needs exactly the same Java version to save and restore serialized objects.
-
-
-keyboard accelerators and mnemonics
------------------------------------
-
-This work was completed in the spring of 2019. Note that in a browser, some 
-key strokes, particularly CTRL-keys, are not available. Bummer.
-
-
-MINOR ISSUES--required some rewriting/refactoring by Bob and Udo  
-================================================================
-
-
-Thread.currentThread() == dispatchThread
-----------------------------------------
-
-changed to JSToolkit.isDispatchThread()
-
-
-MINOR ISSUES--requiring some rewriting/refactoring outside of SwingJS  
-=====================================================================
-
-restrictions on long
---------------------
-
-Java's 64-bit long type is not supported in JavaScript. There is no Int64Array in JavaScript,
-and 0x20000000000000 + 1 evaluates to 0x20000000000000, not 0x20000000000001. 
-(Likewise, -0x20000000000000 - 1 is left unchanged.) 
-
-The largest "integer" value in JavaScript is 9007199254740991 (9.007199254740991E13, or 0x1FFFFFFFFFFFFFF).
-Effectively, you get to use only 53 bits of the long, not 64. Trying to set a long larger than
-0x1FFFFFFFFFFFFFF or smaller than -0x1FFFFFFFFFFFFFF will result in a NumberFormatException.
-
-The transpiler handles conversion to long the same as Java for all cases other than from double. 
-
-For small double values, there is no problem, and, in fact, this is a known trick used to round 
-doubles and floats toward zero:
-
-double d;
-d = (long) 3.8;
-assert(d == 3);
-d = (long) -3.8;
-assert(d == -3);
-
-SwingJS will evaluate (long) d as 0 for d > 9007199254740991 
-or d < -9007199254740991, same as Java returns for Double.NaN.
-So, in Java we have:
-
-               assert(((long) Double.NaN) == 0);
-               assert(((int) Double.NaN) == 0);
-               assert(((long) Float.NaN) == 0);
-               assert(((int) Float.NaN) == 0);
-
-and also, in JavaScript only, we also have:
-
-               double d = 0x2000000000000L;
-               assert(((long) d) == 0);
-
-
-restrictions on BitSet and Scanner
-----------------------------------
-
-Because of the issue of long being only 53 bits, any time a method returns a long value, considerations must
-be made as to whether this will work in JavaScript. In particular, BitSet and Scanner have issues. 
-
-In SwingJS, java.util.BitSet has been implemented as a 32-bit integer-based bitset. This was no problem in
-Java 6, but starting with Java 7, a method was added to BitSet that allows for the extraction of the 
-underlying long[] word data. This is not work in JavaScript. Instead, SwingJS java.util.Bitset.toLongArray() will deliver 
-32-bit int[] data.
-
-SwingJS Scanner has hasNextLong() and nextLong(), and although it will scan through long numbers,
-Scanner will choke on long numbers greater than the JavaScript 53-bit limit. hasNextLong() will 
-return false, and nextLong() will throw an InputMismatchException triggered by the NumberFormatException
-thrown by Long.parseLong(). 
-
-
-HashMap, Hashtable, and HashSet iterator ordering
--------------------------------------------------
-
-In Java, iterators for HashMap, Hashtable, and HashSet do not guarantee any particular order. 
-From the HashMap documentation for Java 8:
-
-       This class makes no guarantees as to the order of the map; in particular, it does not 
-       guarantee that the order will remain constant over time.
-Likewise, for HashSet (because it is simply a convenience method for HashMap<Object,PRESENT>:
-
-       [HashSet] makes no guarantees as to the iteration order of the set.
-
-JavaScript's Map object is different. It is basically a LinkedHashMap, so it guarantees iteration
-in order of object addition.
-
-Starting with java2script 3.2.9.v1, these classes use the JavaScript Map object rather than hash codes
-whenever all keys are strictly of JavaScript typeof "string". If any key is introduced that is not a string, the
-implementation falls back to using hash codes, the same as Java. 
-
-Note strings created using new String("xxxx") are NOT typeof "string"; they are typeof "object".
-
-The result is significantly faster performance (3-12 x faster) than originally, and up to 3 x faster
-performance in JavaScript than in Java itself. Right. Faster than Java. 
-
-The JavaScript Map implementation is implemented UNLESS the constructor used is the one that
-specifies both initial capacity and load factor in their constructor. Thus, 
-
-new Hashtable()
-new HashMap()
-new HashMap(16)
-new HashSet()
-
-all use the JavaScript Map. But
-
-new Hashtable(11, 0.75f)
-new HashMap(16, 0.75f)
-new HashSet(16, 0.75f)
-
-do not. 
-
-This design allows for opting out of the JavaScript Map use in order to retain the exact behavior of 
-iterators in JavaScript as in Java.
-
-
-interning, new String("xxx") vs "xxx"
--------------------------------------
-
-Note that the following are true in JavaScript:
-
-typeof new String("xxxx") == "object"
-typeof "xxxx" == "string"
-var s = "x";typeof ("xxx" + s) == "string"
-
-There is no equivalence to this behavior in Java, where a String is a String is a String.
-
-Be aware that SwingJS does not always create a JavaScript String object using JavaScript's 
-new String(...) constructor. It only does this for Java new String("xxxx") or new String(new String()). 
-
-In all other cases, new String(...) (in Java) results in a simple "xxxx" string in JavaScript. 
-That is, it will be JavaScript typeof "string", not typeof "object". 
-
-The reason for this design is that several classes in the Java core use toString() 
-methods that return new String(), and those classes that do that would cause a JavaScript error
-if implicitly stringified if new String() returned a JavaScript String object. 
-
-This is fine in JavaScript
-
-test1 = function() { return { toString:function(){ return "OK" } } }
-"testing" + new test1()
->> "testingOK"
-
-But for whatever reason in JavaScript:
-
-test2 = function() { return { toString:function(){ return new String("OK") } } }
-"testing" + new test2()
->> Uncaught TypeError: Cannot convert object to primitive value
-
-The lesson here is never to use 
-
-  return new String("...");
-
-in a Java toString() method. In Java it will be fine; in JavaScript it will also be fine as long as
-that method is never called in JavaScript implicitly in the context of string concatenation.
-
-A note about interning. Consider the following six Java constructions, where we have a == "x";
-
-"xxx"
-"xx" + "x"
-new String("xxx").intern()
-
-new String("xxx")
-"xx" + a.toString()
-"xx" + a
-
-All six of these will return java.lang.String for .getClass().getName().
-However, the first three are String literals, while the last three are String objects. 
-Thus:
-        "xxx" == "xxx"
-        "xxx" == "xx" + "x"
-        "xxx" == new String("xxx").intern()
-
-but none of the other three are equivalent to "xxx" or each other:
-
-              "xxx" != new String("xxx")
-              "xxx" != "xx" + a.toString()
-              "xxx" != "xx" + a
-  new String("xxx") != new String("xxx") 
-           "xx" + a != new String("xxx") 
-
-etc.
-
-As in Java, in SwingJS, all of the following Java assertions pass as true:
-
-               assert("xxx" == "xx" + "x"); 
-               assert("xxx" == ("xx" + a).intern()); 
-               assert("xxx" === new String("xxx").intern()); 
-               
-and both of these do as well:
-
-               assert(new String("xxx") != "xxx"); 
-               assert(new String("xxx") != new String("xxx")); 
-
-But the following two fail to assert true:
-
-        assert("xxx" != "xx" + a);
-        assert("xxx" != "xx" + a.toString());
-
-because in JavaScript, both of these right-side expressions evaluate to a simple "interned" string.
-
-In Java, however, these assertions are true because Java implicitly "boxes" String 
-concatentaion as a String object, not a literal. 
-
-Most of us know not to generally use == with Strings unless they are explicitly interned. 
-Where this problem may arise, though, is in IdentityHashMap, which compares objects using 
-System.identityHashCode(), which is not the same for different objects or their string literal equivalents.
-
-My recommendation, if you need to use IdentityHashMap with strings is to always use an explicit String.intern()
-for any keys -- unless you really want to keep every string as separate keys even if they are the same sequence, 
-in which case, use new String(). This will work in Java and in  JavaScript.
-
-Be aware when working with strings that come from SwingJS and are being used by other JavaScript modules
-that those that are String objects will return "object" for the JavaScript typeof operator, not "string".
-
-The easy way to ensure this is no problem is to concatenate strings with "" to force immediate interning:
-
-  var x = aJavaObject.getString() + "";
-
-unless you are certain that the string is being returned is a raw JavaScript string.   
-
-Names with "$" and "_"
-----------------------
-
-For the most part, this should be no problem. 
-
-Note that the use of $ and _ in Java field names has always been discouraged:
-[https://docs.oracle.com/javase/tutorial/java/nutsandbolts/variables.html]
-
-       You may find some situations where auto-generated names will contain the dollar sign, 
-       but your variable names should always avoid using it. A similar convention 
-       exists for the underscore character; while it's technically legal to begin your 
-       variable's name with "_", this practice is discouraged.
-
-Some impacts of transpiling method names with full qualification:
-
-1) SwingJS will introduce fields that start with $ or _. These will not conflict
-   if the above convention is followed.
-   
-2) Fields that have the same Java name as a method are not an issue. 
-
-3) Fields that have a Java name with $ that matches a transpiled method name, 
-   such as toString$, will need to be refactored in Java to not have that name collision.
-   
-4) Fields in a subclass that have the same name as private fields in a superclass
-   represent a name collision, because the superclass method needs to call its private
-   field even if invoked from a subclass. The solution was to modify the subclass field
-   name using one or more prepended $.
-   
-5) Use of Class.getDeclaredMethods() reflection will return Method objects having the transpiled 
-   name, not the Java name. This could require some j2sNative adjustment 
-   to strip the $... parameters from the name if that is needed. 
-
-6) Use of Method.getParameterTypes() should work fine, provided class names
-   do not contain "_". This is because the transpiler converts "." to "_" when
-   creating the fully qualified JavaScript name.
-
-
-positive integers do not add to give negative numbers
------------------------------------------------------
-
-In Java, the following is true:
-
-  2000000000 + 2000000000 == -294967296
-
-But in SwingJS, that will be 4000000000. So, for example, the following
-strategy will fail in SwingJS:
-
-               int newLength = lineBuf.length * 2;
-               if (newLength < 0) {
-                       newLength = Integer.MAX_VALUE;
-               }
-
-"-1" in JavaScript is not 0xFFFFFFFF.
-
-And one must take care to not compare a negative number with a 32-bit mask. So
-
-(b & 0xFF000000) == 0xFF000000
-
-is true in Java for (int) b = -1, but is false in JavaScript, because 0xFF000000 is 4278190080, 
-while (-1 & 0xFF000000) is, strangely enough, -16777216, and, in fact, 
-
-(0xFF000000 & 0xFF000000) != 0xFF000000
-
-because -16777216 is not 4278190080.
-
-The fix is that one must compare similar operations:
-
-if ((b & 0xFF000000) == (0xFF000000 & 0xFF000000)) .....
-
-Importantly, the JavaScript Int32Array does behave properly. From 
-the Firefox developer console:
-
->> x = new Int32Array(1)
-<- Int32Array(1) [ 0 ]
->> x[0] = 4000000000
-<- 4000000000
->> x[0]
-<- -294967296
-
-Notice that, perhaps unexpectedly, the following two constructs produce 
-different results in JavaScript:
-
-x = new Int32Array(1);
-b = x[0] = 4000000000;
-
-(b will be 4000000000)
-
-and
-
-x = new Int32Array(1);
-x[0] = 4000000000;
-b = x[0];
-
-(b will be -294967296)
-
-
-SwingJS leverages array typing to handle all byte and short arithmetic so as
-to ensure that any byte or short operation in JavaScript does give the same 
-result in Java. The design decision to not also do this with integer math was
-a trade-off between performance and handling edge cases.
-
-
-ArrayIndexOutOfBounds
----------------------
-
-You cannot implicitly throw an ArrayIndexOutOfBoundsException in JavaScript.
-JavaScript will simply return "undefined", not throw an Exception. So:
-
-boolean notAGoodIdeaIsOutOfBounds(String[] sa, int i) {
-  try {
-     return (sa[i] == sa[i]);
-  } catch (ArrayIndexOutOfBoundsException e) {
-       return false;
-  }
-}
-
-will work in Java but not in JavaScript. Code should not depend upon this sort 
-of trap anyway, if you ask me. 
-
-Throwable vs Error vs Exception
--------------------------------
-
-True JavaScript errors are trapped as Throwable, whereas you can still trap
-Error and Exception as well. So if you want to be sure to catch any JavaScript
-error, use try{}catch (Throwable t){}, not try{}catch (Exception e){}. 
-
-j
-ava.awt.Color
---------------
-
-ColorSpace: only "support" CS_sRGB.
-
- TODO -- any volunteers??
-
-javax.swing.JFileDialog
------------------------
-
-HTML5 cannot expose a file reading directory structure. But you certainly 
-can still do file reading and writing. It just works a little differently.
-It's a simple modification:
-
-               b = new JButton("FileOpenDialog");
-               b.addActionListener(new ActionListener() {
-
-                       @Override
-                       public void actionPerformed(ActionEvent e) {
-                               JFileChooser fc = new JFileChooser();
-                               Test_Dialog.this.onDialogReturn(fc.showOpenDialog(Test_Dialog.this));
-                               // Java will wait until the dialog is closed, then enter the onDialogReturn method.
-                               // JavaScript will exit with NaN immediately, and then call back with its actual value
-                               // asynchronously.
-                       }
-
-               });
-       
-               public void onDialogReturn(int value) {
-                       if (value != Math.floor(value))
-                               return; // in JavaScript, this will be NaN, indicating the dialog has been opened
-                       // If we are here, the dialog has closed, in both Java and JavaScript.
-                       System.out.println("int value is " + value);
-               }
-
-
-       @Override
-       public void propertyChange(PropertyChangeEvent event) {
-               Object val = event.getNewValue();
-               String name = event.getPropertyName();
-               System.out.println(name);
-               switch (event.getSource().getClass().getName()) {
-               case "javax.swing.JOptionPane":
-                       switch (name) {
-                       case "inputValue":
-                               onDialogReturn(val);
-                               return;
-                       case "value":
-                               if (val instanceof Integer)
-                                       onDialogReturn(((Integer) val).intValue());
-                               else
-                                       onDialogReturn(val);
-                               return;
-                       }
-                       break;
-               case "javax.swing.ColorChooserDialog":
-                       switch (name) {
-                       case "SelectedColor":
-                               onDialogReturn(val);
-                               return;
-                       }
-                       break;
-               case "javax.swing.JFileChooser":
-                       switch (name) {
-                       case "SelectedFile":
-                               File file = (File) val;
-                               byte[] array = (val == null ? null : /** @j2sNative file.秘bytes || */
-                                               null);
-                               onDialogReturn("fileName is '" + file.getName() + "'\n\n" + new String(array));
-                               return;
-                       }
-                       break;
-               }
-               System.out.println(
-                               event.getSource().getClass().getName() + " " + event.getPropertyName() + ": " + event.getNewValue());
-       }
-
-
-Developers are encouraged to create a separate class that handles general calls to JFileDialog. 
-An example class can be found in the SwingJS distribution as 
-
-/sources/net.sf.j2s.java.core/src/javajs/async/AsyncFileChooser.java.
-
-
-javax.swing.JOptionPane dialogs
--------------------------------
-
-For this action to work, the parentComponent must implement
-propertyChangeListener, and any call to JOptionPanel should allow for
-an asynchronous response, meaning that there is no actionable code following the
-call to the dialog opening. 
-
-In addition, for compatibility with the Java version, implementation should
-wrap the call to getConfirmDialog or getOptionDialog in a method call to
-handle the Java:
-
-onDialogReturn(JOptionPane.showConfirmDialog(parentFrame,
-messageOrMessagePanel, "title", JOptionPane.OK_CANCEL_OPTION));
-
-Then parentFrame.propertyChange(event) should also call onDialogReturn.
-
-This will then work in both Java and JavaScript.
-
-Note that there is an int and an Object version of onDialogReturn().
-
-
-In JavaScript:
-
-The initial return from JOptionPane.showConfirmDialog and showMessageDialog
-will be (SwingJS) JDialog.ASYNCHRONOUS_INTEGER (NaN), testable as an impossible 
-Java int value using ret != -(-ret) if the parent implements PropertyChangeListener, or -1
-(CLOSE_OPTION) if not.
-
-For showOptionDialog (which returns Object) or showInputDialog (which returns
-String), the initial return will be (SwingJS) JDialog.ASYNCHRONOUS_OBJECT, testable as
-((Object) ret) instanceof javax.swing.plaf.UIResource if the parent implements
-PropertyChangeListeneer, or null if not.
-
-The second return will be the desired return.
-
-In Java:
-
-The initial return will be the one and only modal final return.
-
-
-
-For full compatibility, The calling method must not continue beyond this
-call.
-
-All of the standard Java events associated with Components are also
-available.
-
-Certain fall back mechanisms are possible, where onReturn does not exist, but
-only for the following cases:
-
-
-For showMessageDialog, for WARNING_MESSAGE and ERROR_MESSAGE, a simple
-JavaScript alert() is used, returning 0 (OK_OPTION) or -1 (CLOSED_OPTION).
-
-For showInputDialog, if the message is a string, a simple JavaScript prompt()
-with input box is used, returning the entered string or null.
-
-For showConfirmDialog, a simple JavaScript confirm() is used, in which case:
-
-for YES_NO_OPTION: YES_OPTION or NO_OPTION
-
-for YES_NO_CANCEL_OPTION: YES_OPTION or CANCEL_OPTION
-
-for OK_CANCEL_OPTION or any other: OK_OPTION or CANCEL_OPTION
-
-Note that you should implement a response for CLOSED_OPTION for
-showConfirmDialog. For other dialogs, a null return indicates the dialog was
-closed, just as for Java.
-
-Developers are encouraged to create a separate class that handles general calls. 
-An example class can be found in the SwingJS distribution as src/javajs/async/AsyncDialog.java.
-Very simple modifications to the Java allows asynchronous operation using AsyncDialog. Here
-is a simple "do you want to close this frame" example, where you can see that what we have
-done is to set the reply into an ActionListener that is defined in the constructor of 
-the AsyncDisplay object:
-
-// Original:
-//
-//     private void promptQuit() {
-//             int sel = JOptionPane.showConfirmDialog(null, PROMPT_EXIT, NAME, JOptionPane.YES_NO_OPTION);
-//             switch (sel) {
-//             case JOptionPane.YES_OPTION:
-//                     resultsTab.clean();
-//                     seqs.dispose();
-//                     if (fromMain) {
-//                             System.exit(0);
-//                     }
-//                     break;
-//             }
-//     }
-
-       private void promptQuitAsync() {
-               new AsyncDialog(new ActionListener() {
-
-                       @Override
-                       public void actionPerformed(ActionEvent e) {
-                           int sel = ((AsyncDialog)e.getSource()).getOption();
-                               switch (sel) {
-                               case JOptionPane.YES_OPTION:
-                                       resultsTab.clean();
-                                       seqs.dispose();
-                                       if (fromMain) {
-                                               System.exit(0);
-                                       }
-                                       break;
-                               }
-                       }}).showConfirmDialog(null, PROMPT_EXIT, NAME, JOptionPane.YES_NO_OPTION);
-       }
-
-Very simple! 
-
-
-native methods
---------------
-
-The J2S compiler ignores all static native method declarations.
-Anything of this nature needs to be implemented in JavaScript if it is needed,
-using j2sNative blocks:
-
-/**
- * @j2sNative
- *
- *    var putYourJavaScriptCodeHere
- *
- */
- Note that if you follow that directly with a {...} block, then 
- the javadoc code will run in JavaScript, and the {...} code will run in Java.
-key Focus
----------
-
-As of June, 2019, the keyboard focus manager is fully implemented. 
-The one catch is that JTextPane and JTextArea, which already consume
-VK_TAB in Java, cannot use CTRL-TAB to continue a tabbing cycle around
-the components in a window. Instead, CTRL-TAB is absorbed by the browser. 
-
-
-LookAndFeel and UI Classes
---------------------------
-
-SwingJS implements the native browser look and feel as swingjs.plaf.HTML5LookAndFeel. 
-There are small differences between all look and feels -- MacOS, Windows, SwingJS.
-
-Expert developers know how to coerce changes in the UI by subclassing the UI for a 
-component. This probably will not work in SwingJS. 
-
-Note that LookAndFeel in Java usually determines canvas size in a Frame because 
-different operating systems (Mac OS vs Windows vs HTML5) will have 
-different edge sizes on their frames. If you want to ensure a component size, 
-use getContentPane().setPreferredSize().
-
-
-System.exit(0) does not stop all processes
-------------------------------------------
-
-Although System.ext(int) has been implemented in JavaScript, it just closes the 
-frames, stops all pending javax.swing.Timer objects in the queue, and runs any 
-threads added using Runtime.getRuntime().addShutdownHook(Thread).
-It may not stop all "threads." So don't rely on that.
-Applications are responsible for shutting down prior to executing System.exit(0). 
-
-
-myClass.getField not implemented
---------------------------------
-
-java.lang.reflect.Field is implemented minimally. It is not
-certain that Field.getDeclaringClass() will work. If you just want a 
-value of a field, you can do this:
-
-/**
- *@j2sNative
- *
- * return myClass[name]
- */   
-
-But that is not a java.lang.reflection.Field object.
-
-
-"window" and other reserved JavaScript names
---------------------------------------------
-
-No reserved top-level JavaScript name is allowed for a package name. So, for example, 
-one must rename packages such as "window" or "document" to names such as "win" or "doc".
-
-reserved field and method names
--------------------------------
-
-In order to minimize the chance of added SwingJS field and method names colliding with ones 
-developers might use in subclassing Java classes, we have added U+79D8 (first character of Mandarin 
-"secret") to the characters already disrecommended by Java documentation ("$" and "_"). The only problem
-would be if you use that character followed by certain English words in certain classes. For example
-\u79D8canvas for JComponents (in java.awt.JSComponent) and \u79D8byte (in java.io.File).
-
-qualified field and method names
---------------------------------
-
-Method names in SwingJS are fully qualified, meaning two methods with the same Java name but different
-parameters, such as write(int) and write(double), must not have the same name in JavaScript. (In this
-case, we will have write$I and write$D.) However, in certain cases it may be desirable to leave the
-method names unqualified. In particular, when an interface actually represents a JavaScript object, 
-the transpiler can leave a method name unqualified. The default situation for this is a class name 
-includes ".api.js" (case-sensitive). This means that any method in any class in a package js within 
-a package api, or any private interface js that has an outer interface api, will have all-unqualified
-methods. An example of this is swingjs.plaf.JSComboPopupList, which needs to communicate with a jQuery 
-object directly using the following interface:
-
-       private interface api {
-
-               interface js extends JQueryObject {
-
-                       abstract js j2sCB(Object options);
-
-                       abstract Object[] j2sCB(String method);
-
-                       abstract Object[] j2sCB(String method, Object o);
-
-                       abstract Object[] j2sCB(String method, int i);
-
-                       abstract int j2sCB(String OPTION, String name);
-
-               }
-       }
-
-Notice that all these variants of j2sCB() will call the same method in JavaScript by design.
-
-
-missing Math methods
---------------------
-
-java.lang.Math is worked out, but some methods are missing, either because they
-involve long integer value that are inaccessible in JavaScript, or because I just
-didn't implement them. This is a result of continued Java development. 
-It is easy enough to add these methods if you have the source. They go into j2sClazz.js, 
-which is combined with other initial libraries into swingjs2.js by build_site.xml
-
-
-Component.getGraphics(), Graphics.dispose()
--------------------------------------------
-
-Use of component.getGraphics() is discouraged in Java and in SwingJS. 
-Specifically in SwingJS, any call to component.getGraphics() or 
-BufferedImage.createGraphics() or Graphics.create(...) should be matched with graphics.dispose(), 
-particularly when it is called outside the context of a paint(Graphics)
-call from the system. 
-
-If you see your graphics scrolling down the page with each repaint, 
-look for where you have used Component.getGraphics() and not Graphics.dispose().
-For example, this will definitely NOT work in SwingJS:
-
-  this.paint(getGraphics())
-  
-and really should not work in Java, either, as it is technically a resource memory leak.
-
-Instead, if you really do not want to use repaint(), use this:
-
-  Graphics g = getGraphics();
-  paint(g);
-  g.dispose();
-
-
-
-Graphics.setClip()
-------------------
-
-The HTML5 canvas.clip() method is permanent. You can only reset the clip using
-save/restore. This is different from Java, where you can temporarily change it using
-
-  Shape oldClip = Graphics.getClip();
-  Graphics.setClip(newClip);
-   ...
-  Graphics.setClip(oldClip); 
-
-If you need to do something like this, you must schedule the paints
-to not have overlapping clip needs.
-
-
-MAJOR ISSUES--for Bob and Udo within SwingJS
-============================================
-
-fonts
------
-
-Fonts and FontMetrics will all be handled in JavaScript. Font matching will 
-not be exact, and composite (drawn) fonts will not be supported. 
-
-SwingJS handles calls such as font.getFontMetrics(g).stringWidth("xxx") by 
-creating a <div> containing that text, placing it in an obscure location on 
-the page, and reading div.getBoundingClientRect(). This is a VERY precise
-value, but can be a pixel or two off from what Java reports for the same font.
-OS-dependent classes
---------------------
-
-Static classes such as:
-
-   java.awt.Toolkit
-   java.awt.GraphicsEnvironment
-   
-   
-which are created using Class.forName are implemented using classes in the swingjs package.
-
-AWTAccessor is not implemented. 
-
-   
-AWT component peers and component "ui" user interfaces
-------------------------------------------------------
-
-ComponentPeer is a class that represents a native AWT component.
-Components with such peers are called "heavy-weight" components.
-They are expected to do the dirty work of graphics drawing. 
-
-Java Swing implements peers only for JApplet, JDialog, JFrame, and JWindow. 
-References to such objects have been removed, but clearly there must be 
-some connection to similar DOM objects, even for "light-weight" components. 
-
-
-  
-MAJOR ISSUES--to be resolved by implementers
-============================================
-
-fonts
------
-
-Glyph/composite/outline fonts are not supported.
-   
-
-
-threads
--------
-
-Thread locking and synchronization are not relevant to JavaScript.
-Thus, anything requiring "notify.." or "waitFor.." could be a serious issue.
-All threading must be "faked" in JavaScript. Specifically not available is:
-
-  Thread.sleep()
-  
-javax.swing.AbstractButton#doClick(pressTime) will not work, as it requires Thread.sleep();
-    
-However, java.lang.Thread itself is implemented and used extensively. 
-
-Methods thread.start() and thread.run() both work fine. 
-
-For simple applications that use Thread.sleep() just to have a delay, as in a frame rate, for 
-example, one can use javax.swing.Timer instead. That is fully implemented. 
-
-Likewise, java.util.Timer can be replaced with no loss of performance with javax.Swing.Timer.
-Note that java.util.TimerTask is implemented, but it can also be replaced by an implementation of Runnable.
-
-task = new TimerTask(){....};
-t = new java.util.Timer();
-t.schedule(task, 0, 1);
-
-becomes
-
-task = new TimerTask(){....}; // or task = new Runnable() {...}
-t = new javax.swing.Timer(1, new ActionListener() {
-       @Override
-       public void actionPerformed(ActionEvent e) {
-               task.run();
-       }
-};
-t.setInitialDelay(0); // not particularly necessary
-t.start();
-
-In addition, SwingJS provides swingjs.JSThread, which can be subclassed
-if desired. This class allows simple 
-
-  while(!interrupted()){
-       wait()
-       ...
-  }  
-
-action through an asynchronous function run1(mode). For example:
-
-       protected void run1(int mode) {
-               try {
-                       while (true)
-                               switch (mode) {
-                               case INIT:
-                                       // once-through stuff here
-                                       mode = LOOP;
-                                       break;
-                               case LOOP:
-                                       if (!doDispatch || isInterrupted()) {
-                                               mode = DONE;
-                                       } else {
-                                               Runnable r = new Runnable() {
-                                                       public void run() {
-                                                               // put the loop code here
-                                                       }
-                                               };
-                                               dispatchAndReturn(r);
-                                               if (isJS)
-                                                       return;
-                                       }
-                                       break;
-                               // add more cases as needed
-                               case DONE:
-                                       // finish up here
-                                       if (isInterrupted())
-                                               return;
-                                       // or here
-                                       break;
-                               }
-               } finally {
-                       // stuff here to be executed after each loop in JS or at the end in Java
-               }
-       }
-
-image loading
--------------
-- All image loading in SwingJS is synchronous. A MediaTracker call will immediately return "complete".
-  However, it still may take one system clock tick to fully load images. Thus, it is recommended that
-  images be preloaded in the static block of the applet if it is necessary that they be available in init().
-  This is only an issue if you are trying to access the pixel buffer of the image in JavaScript. 
-  
-- Applet.getImage(path, name) will return null if the image does not exist. 
-
-- BufferedImage: only "support" imageType RGB and ARGB
-
-  -BH: This is a temporary edit, just to get us started. Certainly GRAY will be needed
-
-
-BigInteger and BigDecimal
--------------------------
-
-java.math.BigInteger is fully supported; java.math.BigDecimal is roughed 
-in and not fully tested (07/2019). 
-
-Both classes present significant issues for JavaScript, as they are based in 
-Java's 64-bit long for all their operations. Here is the JavaDoc note I added
-to BigInteger:
-
- * SwingJS note: Because of the limitations of JavaScript with regard
- * to long-integer bit storage as a double, this implementation drops
- * the integer storage bit length to 24, giving 48 for long and leaving
- * the last 16 bits clear for the exponent of the double number. This should
- * not affect performance significantly. It does increase the storage 
- * size by about 33%. By bringing an "int" to 3 bytes, we can easily construct
- * and use byte[] data intended for the original BitSet.  
-
-"Easily" may be a bit strong there. This was a serious challenge.
-
-BigDecimal seems to run normally, but in order to do that, my hack involves
-reducing the size of an integer that is allowed to be stored as such and not
-in byte[] as a BigInteger. I'm sure there is a performance hit, but it does work.
-
-no format internationalization
-------------------------------
-
-For now, just en for number and date formatters
-
-no winding rules
-----------------
-
-  When filling a graphic, only nonzero winding rule is implemented in HTML5 Canvas2D.
-
-
-
-text-related field implementation
----------------------------------
-
-Text fields are:
-
-JTextField   (JavaScript <input type="text">)
-JTextArea    (JavaScript <textarea>)
-JTextPane    (JavaScript <div>)
-JEditorPane  (JavaScript <div>)
-
-For the initial implementation, we don't implement infinite undo/redo, and the abstract 
-document model is much less elaborate. Only PlainDocument (in the form of JSPlainDocument)
-is implemented. The Document returned by JTextField.getDocument() is a javax.swing.text.Document.
-
-All scrolling is handled by HTML5. javax.swing.AutoScroller is not implemented.
-public static methods .stop, .isRunning, .processMouseDragged require true Java threading
-and so are not implmented. javax.swing.text.View and its subclasses are not implemented. 
-
-The JS document model does not allow two text fields to address the same underlying document. 
-
-JavaScript is slightly different from Java in that the field value is changed asynchronously after
-the keypressed event, so Java actions that are keyed to KEY_PRESSED may not pick up the new 
-key value even after SwingUtilities.invokeLater() is called. Thus, key pressed actions may need
-to be recorded after a key released event instead. 
-
-Formatter/Regex limitations
----------------------------
-
-Some browsers cannot process Regex "look-behind" process such as (?<=\W)
-java.util.regex.Matcher and Pattern use JavaScript's RegExp object rather than
-the native Java object. These are not identical. Only flags /igm are supported.
-Matcher.start(groupID) is not supported.
-
-java.util.Formatter will function correctly for all standard %... patterns.
-
-integer 1/0 == Infinity
------------------------
-
-1/0 in Java throws "java.lang.ArithmeticException: / by zero", but in JavaScript is just Infinity. 
-
-
-Summary
--------
-
-These are all the known limitations of SwingJS. We have not found any of these limitations
-to be show-stoppers. The primary issue for newcomers to SwingJS is having the source code.
-You must check that source code for all your library jar files is available or, if you
-choose, you will need to decompile those classes. We have used decompilation on some projects,
-and it works just fine. So, technically, all we really need are JAR/class files. But the 
-source is by far superior. It's generally prettier, and it has the license information that
-may or may not be present with the JAR or class files. Use class files at your own risk.
-
-Bob Hanson
-2019.08.16
-
-
-Additional Issues
------------------
-
-Annotation is working for classes, methods, and fields (12/22/19). Method reflection, however,
-is limited. Interfaces do not expose their methods, as the transpiler does not actually transpile
-the interfaces themselves. And method reflection only includes annotated methods.
-
-java.util.concurrent is not fully elaborated. This package is rewritten to not actually use the
-memory handling capabilities of concurrency, which JavaScript does not have access to.
-
-System.getProperties() just returns a minimal set of properties.
-
-
diff --git a/swingjs/ver/3.2.5/net.sf.j2s.core.jar b/swingjs/ver/3.2.5/net.sf.j2s.core.jar
deleted file mode 100644 (file)
index 057eacd..0000000
Binary files a/swingjs/ver/3.2.5/net.sf.j2s.core.jar and /dev/null differ
diff --git a/swingjs/ver/3.2.5/timestamp b/swingjs/ver/3.2.5/timestamp
deleted file mode 100644 (file)
index 10cfe48..0000000
+++ /dev/null
@@ -1 +0,0 @@
-20201219175119 
diff --git a/swingjs/ver/3.2.7/DEV_NOTES.txt b/swingjs/ver/3.2.7/DEV_NOTES.txt
deleted file mode 100644 (file)
index 751d81c..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-This is sources/net.sf.j2s.java.core/dist/DEV_NOTES.txt
-
-_j2sclasslist.txt 
-
-the list of .js files concatenated into coreswingjs.js and minified to coreswingjs.z.js
-
-
-SwingJS-site.zip
-
-the full site directory for SwingJS including all files not in the test/ directory.
diff --git a/swingjs/ver/3.2.7/SwingJS-site.zip b/swingjs/ver/3.2.7/SwingJS-site.zip
deleted file mode 100644 (file)
index dd6765a..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Unexpected error.  File contents could not be restored from local history during undo/redo.
\ No newline at end of file
diff --git a/swingjs/ver/3.2.7/_j2sclasslist.txt b/swingjs/ver/3.2.7/_j2sclasslist.txt
deleted file mode 100644 (file)
index e98f45d..0000000
+++ /dev/null
@@ -1,408 +0,0 @@
-java/applet/Applet.js
-java/applet/AppletContext.js
-java/applet/AppletStub.js
-java/applet/JSApplet.js
-java/awt/ActiveEvent.js
-java/awt/Adjustable.js
-java/awt/AWTEvent.js
-java/awt/AWTEventMulticaster.js
-java/awt/AWTKeyStroke.js
-java/awt/BasicStroke.js
-java/awt/BorderLayout.js
-java/awt/Button.js
-java/awt/Color.js
-java/awt/color/ColorSpace.js
-java/awt/Component.js
-java/awt/ComponentOrientation.js
-java/awt/ContainerOrderFocusTraversalPolicy.js
-java/awt/Container.js
-java/awt/Cursor.js
-java/awt/DefaultFocusTraversalPolicy.js
-java/awt/DefaultKeyboardFocusManager.js
-java/awt/Dialog.js
-java/awt/Dimension.js
-java/awt/dnd/peer/DropTargetPeer.js
-java/awt/event/ActionListener.js
-java/awt/event/AdjustmentEvent.js
-java/awt/event/AdjustmentListener.js
-java/awt/event/AWTEventListener.js
-java/awt/event/ComponentAdapter.js
-java/awt/event/ComponentEvent.js
-java/awt/event/ComponentListener.js
-java/awt/event/ContainerListener.js
-java/awt/event/FocusEvent.js
-java/awt/event/FocusListener.js
-java/awt/event/HierarchyBoundsListener.js
-java/awt/event/HierarchyListener.js
-java/awt/event/InputEvent.js
-java/awt/event/InputMethodListener.js
-java/awt/event/InvocationEvent.js
-java/awt/event/ItemEvent.js
-java/awt/event/ItemListener.js
-java/awt/event/KeyListener.js
-java/awt/event/MouseEvent.js
-java/awt/event/MouseListener.js
-java/awt/event/MouseMotionListener.js
-java/awt/event/MouseWheelListener.js
-java/awt/event/TextListener.js
-java/awt/event/WindowAdapter.js
-java/awt/event/WindowEvent.js
-java/awt/event/WindowFocusListener.js
-java/awt/event/WindowListener.js
-java/awt/event/WindowStateListener.js
-java/awt/EventDispatchThread.js
-java/awt/EventFilter.js
-java/awt/EventQueue.js
-java/awt/EventQueueItem.js
-java/awt/FlowLayout.js
-java/awt/FocusTraversalPolicy.js
-java/awt/Font.js
-java/awt/font/FontRenderContext.js
-java/awt/FontMetrics.js
-java/awt/Frame.js
-java/awt/geom/AffineTransform.js
-java/awt/geom/Dimension2D.js
-java/awt/geom/Path2D.js
-java/awt/geom/PathIterator.js
-java/awt/geom/Point2D.js
-java/awt/geom/Rectangle2D.js
-java/awt/geom/RectangularShape.js
-java/awt/geom/RectIterator.js
-java/awt/GraphicsCallback.js
-java/awt/GraphicsConfiguration.js
-java/awt/GraphicsDevice.js
-java/awt/GraphicsEnvironment.js
-java/awt/Image.js
-java/awt/image/ImageObserver.js
-java/awt/Insets.js
-java/awt/ItemSelectable.js
-java/awt/JSComponent.js
-java/awt/JSDialog.js
-java/awt/JSFrame.js
-java/awt/JSPanel.js
-java/awt/KeyboardFocusManager.js
-java/awt/KeyEventDispatcher.js
-java/awt/KeyEventPostProcessor.js
-java/awt/Label.js
-java/awt/LayoutManager.js
-java/awt/LayoutManager2.js
-java/awt/LightweightDispatcher.js
-java/awt/Paint.js
-java/awt/Panel.js
-java/awt/peer/ComponentPeer.js
-java/awt/peer/ContainerPeer.js
-java/awt/peer/FramePeer.js
-java/awt/peer/KeyboardFocusManagerPeer.js
-java/awt/peer/LightweightPeer.js
-java/awt/peer/WindowPeer.js
-java/awt/Point.js
-java/awt/Queue.js
-java/awt/Rectangle.js
-java/awt/RenderingHints.js
-java/awt/Scrollbar.js
-java/awt/ScrollPane.js
-java/awt/Shape.js
-java/awt/Stroke.js
-java/awt/TextArea.js
-java/awt/TextComponent.js
-java/awt/TextField.js
-java/awt/Toolkit.js
-java/awt/Transparency.js
-java/awt/Window.js
-java/beans/ChangeListenerMap.js
-java/beans/PropertyChangeEvent.js
-java/beans/PropertyChangeListener.js
-java/beans/PropertyChangeSupport.js
-java/lang/AbstractStringBuilder.js
-java/lang/Class.js
-java/lang/Enum.js
-java/lang/Iterable.js
-java/lang/reflect/Constructor.js
-java/lang/reflect/Method.js
-java/lang/StringBuffer.js
-java/lang/StringBuilder.js
-java/lang/Thread.js
-java/lang/ThreadGroup.js
-java/math/RoundingMode.js
-java/net/URL.js
-java/net/URLStreamHandlerFactory.js
-java/net/HttpURLConnection.js
-java/net/URLStreamHandler.js
-javax/net/ssl/HttpsUrlConnection.js
-java/text/CharacterIterator.js
-java/text/DecimalFormat.js
-java/text/DecimalFormatSymbols.js
-java/text/DigitList.js
-java/text/FieldPosition.js
-java/text/Format.js
-java/text/NumberFormat.js
-java/util/AbstractCollection.js
-java/util/AbstractList.js
-java/util/AbstractMap.js
-java/util/AbstractSequentialList.js
-java/util/AbstractSet.js
-java/util/ArrayList.js
-java/util/Arrays.js
-java/util/Collection.js
-java/util/Collections.js
-java/util/Comparator.js
-java/util/Deque.js
-java/util/Dictionary.js
-java/util/Enumeration.js
-java/util/EventListener.js
-java/util/EventObject.js
-java/util/HashMap.js
-java/util/HashSet.js
-java/util/Hashtable.js
-java/util/IdentityHashMap.js
-java/util/Iterator.js
-java/util/LinkedHashMap.js
-java/util/LinkedList.js
-java/util/List.js
-java/util/ListResourceBundle.js
-java/util/Locale.js
-java/util/Map.js
-java/util/Objects.js
-java/util/Queue.js
-java/util/Random.js
-java/util/RandomAccess.js
-java/util/ResourceBundle.js
-java/util/Set.js
-java/util/TimSort.js
-java/util/Vector.js
-javajs/api/JSFunction.js
-javajs/util/AjaxURLConnection.js
-javajs/util/AjaxURLStreamHandlerFactory.js
-javajs/util/AU.js
-javajs/util/JSThread.js
-javajs/util/Lst.js
-javajs/util/PT.js
-javajs/util/Rdr.js
-javajs/util/SB.js
-javax/swing/AbstractAction.js
-javax/swing/AbstractButton.js
-javax/swing/AbstractListModel.js
-javax/swing/Action.js
-javax/swing/ActionMap.js
-javax/swing/AncestorNotifier.js
-javax/swing/ArrayTable.js
-javax/swing/border/AbstractBorder.js
-javax/swing/border/BevelBorder.js
-javax/swing/border/Border.js
-javax/swing/border/CompoundBorder.js
-javax/swing/border/EmptyBorder.js
-javax/swing/border/EtchedBorder.js
-javax/swing/border/LineBorder.js
-javax/swing/border/TitledBorder.js
-javax/swing/BorderFactory.js
-javax/swing/BoundedRangeModel.js
-javax/swing/BoxLayout.js
-javax/swing/ButtonGroup.js
-javax/swing/ButtonModel.js
-javax/swing/ClientPropertyKey.js
-javax/swing/ComboBoxModel.js
-javax/swing/DefaultBoundedRangeModel.js
-javax/swing/DefaultButtonModel.js
-javax/swing/DefaultComboBoxModel.js
-javax/swing/DefaultSingleSelectionModel.js
-javax/swing/DropMode.js
-javax/swing/event/AncestorEvent.js
-javax/swing/event/AncestorListener.js
-javax/swing/event/CaretEvent.js
-javax/swing/event/CaretListener.js
-javax/swing/event/ChangeEvent.js
-javax/swing/event/ChangeListener.js
-javax/swing/event/DocumentEvent.js
-javax/swing/event/DocumentListener.js
-javax/swing/event/EventListenerList.js
-javax/swing/event/ListDataEvent.js
-javax/swing/event/ListDataListener.js
-javax/swing/event/UndoableEditEvent.js
-javax/swing/event/UndoableEditListener.js
-javax/swing/FocusManager.js
-javax/swing/InternalFrameFocusTraversalPolicy.js
-javax/swing/LayoutComparator.js
-javax/swing/LayoutFocusTraversalPolicy.js
-javax/swing/SortingFocusTraversalPolicy.js
-javax/swing/SwingContainerOrderFocusTraversalPolicy.js
-javax/swing/SwingDefaultFocusTraversalPolicy.js
-javax/swing/Icon.js
-javax/swing/ImageIcon.js
-javax/swing/InputMap.js
-javax/swing/JApplet.js
-javax/swing/JButton.js
-javax/swing/JCheckBox.js
-javax/swing/JCheckBoxMenuItem.js
-javax/swing/JComboBox.js
-javax/swing/JComponent.js
-javax/swing/JFrame.js
-javax/swing/JLabel.js
-javax/swing/JLayeredPane.js
-javax/swing/JMenu.js
-javax/swing/JMenuBar.js
-javax/swing/JMenuItem.js
-javax/swing/JPanel.js
-javax/swing/JPopupMenu.js
-javax/swing/JRadioButtonMenuItem.js
-javax/swing/JRootPane.js
-javax/swing/JScrollBar.js
-javax/swing/JScrollPane.js
-javax/swing/JSeparator.js
-javax/swing/JTextArea.js
-javax/swing/JTextField.js
-javax/swing/JToggleButton.js
-javax/swing/JViewport.js
-javax/swing/KeyboardManager.js
-javax/swing/KeyStroke.js
-javax/swing/ListModel.js
-javax/swing/LookAndFeel.js
-javax/swing/MenuElement.js
-javax/swing/MutableComboBoxModel.js
-javax/swing/plaf/ActionMapUIResource.js
-javax/swing/plaf/basic/BasicBorders.js
-javax/swing/plaf/BorderUIResource.js
-javax/swing/plaf/ColorUIResource.js
-javax/swing/plaf/ComponentUI.js
-javax/swing/plaf/DimensionUIResource.js
-javax/swing/plaf/FontUIResource.js
-javax/swing/plaf/InputMapUIResource.js
-javax/swing/plaf/InsetsUIResource.js
-javax/swing/plaf/UIResource.js
-javax/swing/RepaintManager.js
-javax/swing/RootPaneContainer.js
-javax/swing/Scrollable.js
-javax/swing/ScrollPaneConstants.js
-javax/swing/ScrollPaneLayout.js
-javax/swing/SingleSelectionModel.js
-javax/swing/SizeRequirements.js
-javax/swing/SwingConstants.js
-javax/swing/SwingPaintEventDispatcher.js
-javax/swing/SwingUtilities.js
-javax/swing/text/AbstractDocument.js
-javax/swing/text/AttributeSet.js
-javax/swing/text/Caret.js
-javax/swing/text/DefaultCaret.js
-javax/swing/text/DefaultEditorKit.js
-javax/swing/text/Document.js
-javax/swing/text/EditorKit.js
-javax/swing/text/Element.js
-javax/swing/text/GapContent.js
-javax/swing/text/GapVector.js
-javax/swing/text/JTextComponent.js
-javax/swing/text/MutableAttributeSet.js
-javax/swing/text/PlainDocument.js
-javax/swing/text/PlainView.js
-javax/swing/text/Position.js
-javax/swing/text/Segment.js
-javax/swing/text/SegmentCache.js
-javax/swing/text/SimpleAttributeSet.js
-javax/swing/text/Style.js
-javax/swing/text/StyleConstants.js
-javax/swing/text/StyleContext.js
-javax/swing/text/TabExpander.js
-javax/swing/text/TextAction.js
-javax/swing/text/Utilities.js
-javax/swing/text/View.js
-javax/swing/tree/TreeNode.js
-javax/swing/UIDefaults.js
-javax/swing/UIManager.js
-javax/swing/undo/AbstractUndoableEdit.js
-javax/swing/undo/CompoundEdit.js
-javax/swing/undo/UndoableEdit.js
-javax/swing/ViewportLayout.js
-javax/swing/WindowConstants.js
-sun/awt/AppContext.js
-sun/awt/AWTAutoShutdown.js
-sun/awt/CausedFocusEvent.js
-sun/awt/ComponentFactory.js
-sun/awt/KeyboardFocusManagerPeerProvider.js
-sun/awt/MostRecentKeyValue.js
-sun/awt/MostRecentThreadAppContext.js
-sun/awt/PaintEventDispatcher.js
-sun/awt/PostEventQueue.js
-sun/awt/RequestFocusController.js
-sun/awt/SunToolkit.js
-sun/awt/WindowClosingListener.js
-sun/awt/WindowClosingSupport.js
-sun/awt/image/DataStealer.js
-sun/awt/image/IntegerComponentRaster.js
-sun/awt/image/IntegerInterleavedRaster.js
-sun/awt/image/SunWritableRaster.js
-sun/font/FontDesignMetrics.js
-sun/swing/DefaultLookup.js
-sun/swing/SwingLazyValue.js
-sun/text/resources/FormatData.js
-sun/text/resources/FormatData_en.js
-sun/util/resources/LocaleData.js
-swingjs/a2s/A2SContainer.js
-swingjs/a2s/A2SEvent.js
-swingjs/a2s/A2SListener.js
-swingjs/a2s/Applet.js
-swingjs/a2s/Button.js
-swingjs/a2s/Label.js
-swingjs/a2s/Panel.js
-swingjs/a2s/Scrollbar.js
-swingjs/a2s/ScrollPane.js
-swingjs/a2s/TextArea.js
-swingjs/a2s/TextField.js
-swingjs/api/Interface.js
-swingjs/api/js/DOMNode.js
-swingjs/api/js/HTML5CanvasContext2D.js
-swingjs/api/js/JSInterface.js
-swingjs/jquery/JQueryUI.js
-swingjs/JSApp.js
-swingjs/JSAppletThread.js
-swingjs/JSAppletViewer.js
-swingjs/JSFocusPeer.js
-swingjs/JSFontMetrics.js
-swingjs/JSFrameViewer.js
-swingjs/JSGraphics2D.js
-swingjs/JSGraphicsConfiguration.js
-swingjs/JSGraphicsEnvironment.js
-swingjs/JSImage.js
-swingjs/JSImagekit.js
-swingjs/JSMouse.js
-swingjs/JSNullComponentPeer.js
-swingjs/JSScreenDevice.js
-swingjs/JSThreadGroup.js
-swingjs/JSToolkit.js
-swingjs/JSUtil.js
-swingjs/plaf/ButtonListener.js
-swingjs/plaf/DefaultMenuLayout.js
-swingjs/plaf/HTML5LookAndFeel.js
-swingjs/plaf/JSAppletUI.js
-swingjs/plaf/JSButtonUI.js
-swingjs/plaf/JSCheckBoxMenuItemUI.js
-swingjs/plaf/JSCheckBoxUI.js
-swingjs/plaf/JSComboBoxUI.js
-swingjs/plaf/JSComponentUI.js
-swingjs/plaf/JSEventHandler.js
-swingjs/plaf/JSFrameUI.js
-swingjs/plaf/JSGraphicsUtils.js
-swingjs/plaf/JSLabelUI.js
-swingjs/plaf/JSLayeredPaneUI.js
-swingjs/plaf/JSLightweightUI.js
-swingjs/plaf/JSMenuBarUI.js
-swingjs/plaf/JSMenuItemUI.js
-swingjs/plaf/JSMenuUI.js
-swingjs/plaf/JSPanelUI.js
-swingjs/plaf/JSPopupMenuSeparatorUI.js
-swingjs/plaf/JSPopupMenuUI.js
-swingjs/plaf/JSRadioButtonMenuItemUI.js
-swingjs/plaf/JSRadioButtonUI.js
-swingjs/plaf/JSRootPaneUI.js
-swingjs/plaf/JSScrollBarUI.js
-swingjs/plaf/JSScrollPaneUI.js
-swingjs/plaf/JSSeparatorUI.js
-swingjs/plaf/JSSliderUI.js
-swingjs/plaf/JSTextAreaUI.js
-swingjs/plaf/JSTextFieldUI.js
-swingjs/plaf/JSTextUI.js
-swingjs/plaf/JSTextViewUI.js
-swingjs/plaf/JSViewportUI.js
-swingjs/plaf/JSWindowUI.js
-swingjs/plaf/LazyActionMap.js
-swingjs/plaf/Resizer.js
-swingjs/plaf/TextListener.js
-
-
diff --git a/swingjs/ver/3.2.7/net.sf.j2s.core.jar b/swingjs/ver/3.2.7/net.sf.j2s.core.jar
deleted file mode 100644 (file)
index dd8bbf2..0000000
Binary files a/swingjs/ver/3.2.7/net.sf.j2s.core.jar and /dev/null differ
diff --git a/swingjs/ver/3.2.7/timestamp b/swingjs/ver/3.2.7/timestamp
deleted file mode 100644 (file)
index e49e2f5..0000000
+++ /dev/null
@@ -1 +0,0 @@
-20200205074936 
diff --git a/swingjs/ver/3.2.8/DEV_NOTES.txt b/swingjs/ver/3.2.8/DEV_NOTES.txt
deleted file mode 100644 (file)
index 751d81c..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-This is sources/net.sf.j2s.java.core/dist/DEV_NOTES.txt
-
-_j2sclasslist.txt 
-
-the list of .js files concatenated into coreswingjs.js and minified to coreswingjs.z.js
-
-
-SwingJS-site.zip
-
-the full site directory for SwingJS including all files not in the test/ directory.
diff --git a/swingjs/ver/3.2.8/SwingJS-site.zip b/swingjs/ver/3.2.8/SwingJS-site.zip
deleted file mode 100644 (file)
index dd6765a..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Unexpected error.  File contents could not be restored from local history during undo/redo.
\ No newline at end of file
diff --git a/swingjs/ver/3.2.8/_j2sclasslist.txt b/swingjs/ver/3.2.8/_j2sclasslist.txt
deleted file mode 100644 (file)
index 076f300..0000000
+++ /dev/null
@@ -1,412 +0,0 @@
-java/applet/Applet.js
-java/applet/AppletContext.js
-java/applet/AppletStub.js
-java/applet/JSApplet.js
-java/awt/ActiveEvent.js
-java/awt/Adjustable.js
-java/awt/AWTEvent.js
-java/awt/AWTEventMulticaster.js
-java/awt/AWTKeyStroke.js
-java/awt/BasicStroke.js
-java/awt/BorderLayout.js
-java/awt/Button.js
-java/awt/Color.js
-java/awt/color/ColorSpace.js
-java/awt/Component.js
-java/awt/ComponentOrientation.js
-java/awt/ContainerOrderFocusTraversalPolicy.js
-java/awt/Container.js
-java/awt/Cursor.js
-java/awt/DefaultFocusTraversalPolicy.js
-java/awt/DefaultKeyboardFocusManager.js
-java/awt/Dialog.js
-java/awt/Dimension.js
-java/awt/dnd/peer/DropTargetPeer.js
-java/awt/event/ActionListener.js
-java/awt/event/AdjustmentEvent.js
-java/awt/event/AdjustmentListener.js
-java/awt/event/AWTEventListener.js
-java/awt/event/ComponentAdapter.js
-java/awt/event/ComponentEvent.js
-java/awt/event/ComponentListener.js
-java/awt/event/ContainerListener.js
-java/awt/event/FocusEvent.js
-java/awt/event/FocusListener.js
-java/awt/event/HierarchyBoundsListener.js
-java/awt/event/HierarchyListener.js
-java/awt/event/InputEvent.js
-java/awt/event/InputMethodListener.js
-java/awt/event/InvocationEvent.js
-java/awt/event/ItemEvent.js
-java/awt/event/ItemListener.js
-java/awt/event/KeyListener.js
-java/awt/event/MouseEvent.js
-java/awt/event/MouseListener.js
-java/awt/event/MouseMotionListener.js
-java/awt/event/MouseWheelListener.js
-java/awt/event/TextListener.js
-java/awt/event/WindowAdapter.js
-java/awt/event/WindowEvent.js
-java/awt/event/WindowFocusListener.js
-java/awt/event/WindowListener.js
-java/awt/event/WindowStateListener.js
-java/awt/EventDispatchThread.js
-java/awt/EventFilter.js
-java/awt/EventQueue.js
-java/awt/EventQueueItem.js
-java/awt/FlowLayout.js
-java/awt/FocusTraversalPolicy.js
-java/awt/Font.js
-java/awt/font/FontRenderContext.js
-java/awt/FontMetrics.js
-java/awt/Frame.js
-java/awt/geom/AffineTransform.js
-java/awt/geom/Dimension2D.js
-java/awt/geom/Path2D.js
-java/awt/geom/PathIterator.js
-java/awt/geom/Point2D.js
-java/awt/geom/Rectangle2D.js
-java/awt/geom/RectangularShape.js
-java/awt/geom/RectIterator.js
-java/awt/GraphicsCallback.js
-java/awt/GraphicsConfiguration.js
-java/awt/GraphicsDevice.js
-java/awt/GraphicsEnvironment.js
-java/awt/Image.js
-java/awt/image/ImageObserver.js
-java/awt/Insets.js
-java/awt/ItemSelectable.js
-java/awt/JSComponent.js
-java/awt/JSDialog.js
-java/awt/JSFrame.js
-java/awt/JSPanel.js
-java/awt/KeyboardFocusManager.js
-java/awt/KeyEventDispatcher.js
-java/awt/KeyEventPostProcessor.js
-java/awt/Label.js
-java/awt/LayoutManager.js
-java/awt/LayoutManager2.js
-java/awt/LightweightDispatcher.js
-java/awt/Paint.js
-java/awt/Panel.js
-java/awt/peer/ComponentPeer.js
-java/awt/peer/ContainerPeer.js
-java/awt/peer/FramePeer.js
-java/awt/peer/KeyboardFocusManagerPeer.js
-java/awt/peer/LightweightPeer.js
-java/awt/peer/WindowPeer.js
-java/awt/Point.js
-java/awt/Queue.js
-java/awt/Rectangle.js
-java/awt/RenderingHints.js
-java/awt/Scrollbar.js
-java/awt/ScrollPane.js
-java/awt/Shape.js
-java/awt/Stroke.js
-java/awt/TextArea.js
-java/awt/TextComponent.js
-java/awt/TextField.js
-java/awt/Toolkit.js
-java/awt/Transparency.js
-java/awt/Window.js
-java/beans/ChangeListenerMap.js
-java/beans/PropertyChangeEvent.js
-java/beans/PropertyChangeListener.js
-java/beans/PropertyChangeSupport.js
-java/lang/AbstractStringBuilder.js
-java/lang/Class.js
-java/lang/Enum.js
-java/lang/Iterable.js
-java/lang/reflect/Constructor.js
-java/lang/reflect/Method.js
-java/lang/StringBuffer.js
-java/lang/StringBuilder.js
-java/lang/Thread.js
-java/lang/ThreadGroup.js
-java/math/RoundingMode.js
-java/net/URL.js
-java/net/URLStreamHandlerFactory.js
-java/net/HttpURLConnection.js
-java/net/URLStreamHandler.js
-javax/net/ssl/HttpsUrlConnection.js
-java/text/CharacterIterator.js
-java/text/DecimalFormat.js
-java/text/DecimalFormatSymbols.js
-java/text/DigitList.js
-java/text/FieldPosition.js
-java/text/Format.js
-java/text/NumberFormat.js
-java/util/AbstractCollection.js
-java/util/AbstractList.js
-java/util/AbstractMap.js
-java/util/AbstractSequentialList.js
-java/util/AbstractSet.js
-java/util/ArrayList.js
-java/util/Arrays.js
-java/util/Collection.js
-java/util/Collections.js
-java/util/Comparator.js
-java/util/Deque.js
-java/util/Dictionary.js
-java/util/Enumeration.js
-java/util/EventListener.js
-java/util/EventObject.js
-java/util/HashMap.js
-java/util/HashSet.js
-java/util/Hashtable.js
-java/util/IdentityHashMap.js
-java/util/Iterator.js
-java/util/LinkedHashMap.js
-java/util/LinkedList.js
-java/util/List.js
-java/util/ListResourceBundle.js
-java/util/Locale.js
-java/util/Map.js
-java/util/Objects.js
-java/util/Queue.js
-java/util/Random.js
-java/util/RandomAccess.js
-java/util/ResourceBundle.js
-java/util/Set.js
-java/util/TimSort.js
-java/util/Vector.js
-javajs/api/JSFunction.js
-javajs/util/AjaxURLConnection.js
-javajs/util/AjaxURLStreamHandlerFactory.js
-javajs/util/AU.js
-javajs/util/JSThread.js
-javajs/util/Lst.js
-javajs/util/PT.js
-javajs/util/Rdr.js
-javajs/util/SB.js
-javax/swing/AbstractAction.js
-javax/swing/AbstractButton.js
-javax/swing/AbstractListModel.js
-javax/swing/Action.js
-javax/swing/ActionMap.js
-javax/swing/AncestorNotifier.js
-javax/swing/ArrayTable.js
-javax/swing/border/AbstractBorder.js
-javax/swing/border/BevelBorder.js
-javax/swing/border/Border.js
-javax/swing/border/CompoundBorder.js
-javax/swing/border/EmptyBorder.js
-javax/swing/border/EtchedBorder.js
-javax/swing/border/LineBorder.js
-javax/swing/border/TitledBorder.js
-javax/swing/BorderFactory.js
-javax/swing/BoundedRangeModel.js
-javax/swing/BoxLayout.js
-javax/swing/ButtonGroup.js
-javax/swing/ButtonModel.js
-javax/swing/ClientPropertyKey.js
-javax/swing/ComboBoxModel.js
-javax/swing/DefaultBoundedRangeModel.js
-javax/swing/DefaultButtonModel.js
-javax/swing/DefaultComboBoxModel.js
-javax/swing/DefaultSingleSelectionModel.js
-javax/swing/DropMode.js
-javax/swing/event/AncestorEvent.js
-javax/swing/event/AncestorListener.js
-javax/swing/event/CaretEvent.js
-javax/swing/event/CaretListener.js
-javax/swing/event/ChangeEvent.js
-javax/swing/event/ChangeListener.js
-javax/swing/event/DocumentEvent.js
-javax/swing/event/DocumentListener.js
-javax/swing/event/EventListenerList.js
-javax/swing/event/ListDataEvent.js
-javax/swing/event/ListDataListener.js
-javax/swing/event/UndoableEditEvent.js
-javax/swing/event/UndoableEditListener.js
-javax/swing/FocusManager.js
-javax/swing/InternalFrameFocusTraversalPolicy.js
-javax/swing/LayoutComparator.js
-javax/swing/LayoutFocusTraversalPolicy.js
-javax/swing/SortingFocusTraversalPolicy.js
-javax/swing/SwingContainerOrderFocusTraversalPolicy.js
-javax/swing/SwingDefaultFocusTraversalPolicy.js
-javax/swing/Icon.js
-javax/swing/ImageIcon.js
-javax/swing/InputMap.js
-javax/swing/JApplet.js
-javax/swing/JButton.js
-javax/swing/JCheckBox.js
-javax/swing/JCheckBoxMenuItem.js
-javax/swing/JComboBox.js
-javax/swing/JComponent.js
-javax/swing/JFrame.js
-javax/swing/JLabel.js
-javax/swing/JLayeredPane.js
-javax/swing/JMenu.js
-javax/swing/JMenuBar.js
-javax/swing/JMenuItem.js
-javax/swing/JPanel.js
-javax/swing/JPopupMenu.js
-javax/swing/JRadioButtonMenuItem.js
-javax/swing/JRootPane.js
-javax/swing/JScrollBar.js
-javax/swing/JScrollPane.js
-javax/swing/JSeparator.js
-javax/swing/JTextArea.js
-javax/swing/JTextField.js
-javax/swing/JToggleButton.js
-javax/swing/JViewport.js
-javax/swing/KeyboardManager.js
-javax/swing/KeyStroke.js
-javax/swing/ListModel.js
-javax/swing/LookAndFeel.js
-javax/swing/MenuElement.js
-javax/swing/MutableComboBoxModel.js
-javax/swing/plaf/ActionMapUIResource.js
-javax/swing/plaf/basic/BasicBorders.js
-javax/swing/plaf/BorderUIResource.js
-javax/swing/plaf/ColorUIResource.js
-javax/swing/plaf/ComponentUI.js
-javax/swing/plaf/DimensionUIResource.js
-javax/swing/plaf/FontUIResource.js
-javax/swing/plaf/InputMapUIResource.js
-javax/swing/plaf/InsetsUIResource.js
-javax/swing/plaf/UIResource.js
-javax/swing/RepaintManager.js
-javax/swing/RootPaneContainer.js
-javax/swing/Scrollable.js
-javax/swing/ScrollPaneConstants.js
-javax/swing/ScrollPaneLayout.js
-javax/swing/SingleSelectionModel.js
-javax/swing/SizeRequirements.js
-javax/swing/SwingConstants.js
-javax/swing/SwingPaintEventDispatcher.js
-javax/swing/SwingUtilities.js
-javax/swing/text/AbstractDocument.js
-javax/swing/text/AttributeSet.js
-javax/swing/text/Caret.js
-javax/swing/text/DefaultCaret.js
-javax/swing/text/DefaultEditorKit.js
-javax/swing/text/Document.js
-javax/swing/text/EditorKit.js
-javax/swing/text/Element.js
-javax/swing/text/GapContent.js
-javax/swing/text/GapVector.js
-javax/swing/text/JTextComponent.js
-javax/swing/text/MutableAttributeSet.js
-javax/swing/text/PlainDocument.js
-javax/swing/text/PlainView.js
-javax/swing/text/Position.js
-javax/swing/text/Segment.js
-javax/swing/text/SegmentCache.js
-javax/swing/text/SimpleAttributeSet.js
-javax/swing/text/Style.js
-javax/swing/text/StyleConstants.js
-javax/swing/text/StyleContext.js
-javax/swing/text/TabExpander.js
-javax/swing/text/TextAction.js
-javax/swing/text/Utilities.js
-javax/swing/text/View.js
-javax/swing/tree/TreeNode.js
-javax/swing/UIDefaults.js
-javax/swing/UIManager.js
-javax/swing/undo/AbstractUndoableEdit.js
-javax/swing/undo/CompoundEdit.js
-javax/swing/undo/UndoableEdit.js
-javax/swing/ViewportLayout.js
-javax/swing/WindowConstants.js
-sun/awt/AppContext.js
-sun/awt/AWTAutoShutdown.js
-sun/awt/CausedFocusEvent.js
-sun/awt/ComponentFactory.js
-sun/awt/KeyboardFocusManagerPeerProvider.js
-sun/awt/MostRecentKeyValue.js
-sun/awt/MostRecentThreadAppContext.js
-sun/awt/PaintEventDispatcher.js
-sun/awt/PostEventQueue.js
-sun/awt/RequestFocusController.js
-sun/awt/SunToolkit.js
-sun/awt/WindowClosingListener.js
-sun/awt/WindowClosingSupport.js
-sun/awt/image/DataStealer.js
-sun/awt/image/IntegerComponentRaster.js
-sun/awt/image/IntegerInterleavedRaster.js
-sun/awt/image/SunWritableRaster.js
-sun/font/FontDesignMetrics.js
-sun/swing/DefaultLookup.js
-sun/swing/SwingLazyValue.js
-sun/text/resources/FormatData.js
-sun/text/resources/en/FormatData_en.js
-sun/util/resources/LocaleData.js
-sun/util/locale/BaseLocale.js
-sun/util/locale/LocaleUtils.js
-sun/util/locale/provider/LocaleProviderAdapter.js
-sun/util/locale/provider/LocaleDataMetaInfo.js
-swingjs/a2s/A2SContainer.js
-swingjs/a2s/A2SEvent.js
-swingjs/a2s/A2SListener.js
-swingjs/a2s/Applet.js
-swingjs/a2s/Button.js
-swingjs/a2s/Label.js
-swingjs/a2s/Panel.js
-swingjs/a2s/Scrollbar.js
-swingjs/a2s/ScrollPane.js
-swingjs/a2s/TextArea.js
-swingjs/a2s/TextField.js
-swingjs/api/Interface.js
-swingjs/api/js/DOMNode.js
-swingjs/api/js/HTML5CanvasContext2D.js
-swingjs/api/js/JSInterface.js
-swingjs/jquery/JQueryUI.js
-swingjs/JSApp.js
-swingjs/JSAppletThread.js
-swingjs/JSAppletViewer.js
-swingjs/JSFocusPeer.js
-swingjs/JSFontMetrics.js
-swingjs/JSFrameViewer.js
-swingjs/JSGraphics2D.js
-swingjs/JSGraphicsConfiguration.js
-swingjs/JSGraphicsEnvironment.js
-swingjs/JSImage.js
-swingjs/JSImagekit.js
-swingjs/JSMouse.js
-swingjs/JSNullComponentPeer.js
-swingjs/JSScreenDevice.js
-swingjs/JSThreadGroup.js
-swingjs/JSToolkit.js
-swingjs/JSUtil.js
-swingjs/plaf/ButtonListener.js
-swingjs/plaf/DefaultMenuLayout.js
-swingjs/plaf/HTML5LookAndFeel.js
-swingjs/plaf/JSAppletUI.js
-swingjs/plaf/JSButtonUI.js
-swingjs/plaf/JSCheckBoxMenuItemUI.js
-swingjs/plaf/JSCheckBoxUI.js
-swingjs/plaf/JSComboBoxUI.js
-swingjs/plaf/JSComponentUI.js
-swingjs/plaf/JSEventHandler.js
-swingjs/plaf/JSFrameUI.js
-swingjs/plaf/JSGraphicsUtils.js
-swingjs/plaf/JSLabelUI.js
-swingjs/plaf/JSLayeredPaneUI.js
-swingjs/plaf/JSLightweightUI.js
-swingjs/plaf/JSMenuBarUI.js
-swingjs/plaf/JSMenuItemUI.js
-swingjs/plaf/JSMenuUI.js
-swingjs/plaf/JSPanelUI.js
-swingjs/plaf/JSPopupMenuSeparatorUI.js
-swingjs/plaf/JSPopupMenuUI.js
-swingjs/plaf/JSRadioButtonMenuItemUI.js
-swingjs/plaf/JSRadioButtonUI.js
-swingjs/plaf/JSRootPaneUI.js
-swingjs/plaf/JSScrollBarUI.js
-swingjs/plaf/JSScrollPaneUI.js
-swingjs/plaf/JSSeparatorUI.js
-swingjs/plaf/JSSliderUI.js
-swingjs/plaf/JSTextAreaUI.js
-swingjs/plaf/JSTextFieldUI.js
-swingjs/plaf/JSTextUI.js
-swingjs/plaf/JSTextViewUI.js
-swingjs/plaf/JSViewportUI.js
-swingjs/plaf/JSWindowUI.js
-swingjs/plaf/LazyActionMap.js
-swingjs/plaf/Resizer.js
-swingjs/plaf/TextListener.js
-
-
diff --git a/swingjs/ver/3.2.8/net.sf.j2s.core.jar b/swingjs/ver/3.2.8/net.sf.j2s.core.jar
deleted file mode 100644 (file)
index feb8ed3..0000000
Binary files a/swingjs/ver/3.2.8/net.sf.j2s.core.jar and /dev/null differ
diff --git a/swingjs/ver/3.2.8/timestamp b/swingjs/ver/3.2.8/timestamp
deleted file mode 100644 (file)
index b833ece..0000000
+++ /dev/null
@@ -1 +0,0 @@
-20200220124544 
diff --git a/swingjs/ver/3.2.9-j11/DEV_NOTES.txt b/swingjs/ver/3.2.9-j11/DEV_NOTES.txt
deleted file mode 100644 (file)
index 751d81c..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-This is sources/net.sf.j2s.java.core/dist/DEV_NOTES.txt
-
-_j2sclasslist.txt 
-
-the list of .js files concatenated into coreswingjs.js and minified to coreswingjs.z.js
-
-
-SwingJS-site.zip
-
-the full site directory for SwingJS including all files not in the test/ directory.
diff --git a/swingjs/ver/3.2.9-j11/SwingJS-site.zip b/swingjs/ver/3.2.9-j11/SwingJS-site.zip
deleted file mode 100644 (file)
index dd6765a..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Unexpected error.  File contents could not be restored from local history during undo/redo.
\ No newline at end of file
diff --git a/swingjs/ver/3.2.9-j11/_j2sclasslist.txt b/swingjs/ver/3.2.9-j11/_j2sclasslist.txt
deleted file mode 100644 (file)
index 076f300..0000000
+++ /dev/null
@@ -1,412 +0,0 @@
-java/applet/Applet.js
-java/applet/AppletContext.js
-java/applet/AppletStub.js
-java/applet/JSApplet.js
-java/awt/ActiveEvent.js
-java/awt/Adjustable.js
-java/awt/AWTEvent.js
-java/awt/AWTEventMulticaster.js
-java/awt/AWTKeyStroke.js
-java/awt/BasicStroke.js
-java/awt/BorderLayout.js
-java/awt/Button.js
-java/awt/Color.js
-java/awt/color/ColorSpace.js
-java/awt/Component.js
-java/awt/ComponentOrientation.js
-java/awt/ContainerOrderFocusTraversalPolicy.js
-java/awt/Container.js
-java/awt/Cursor.js
-java/awt/DefaultFocusTraversalPolicy.js
-java/awt/DefaultKeyboardFocusManager.js
-java/awt/Dialog.js
-java/awt/Dimension.js
-java/awt/dnd/peer/DropTargetPeer.js
-java/awt/event/ActionListener.js
-java/awt/event/AdjustmentEvent.js
-java/awt/event/AdjustmentListener.js
-java/awt/event/AWTEventListener.js
-java/awt/event/ComponentAdapter.js
-java/awt/event/ComponentEvent.js
-java/awt/event/ComponentListener.js
-java/awt/event/ContainerListener.js
-java/awt/event/FocusEvent.js
-java/awt/event/FocusListener.js
-java/awt/event/HierarchyBoundsListener.js
-java/awt/event/HierarchyListener.js
-java/awt/event/InputEvent.js
-java/awt/event/InputMethodListener.js
-java/awt/event/InvocationEvent.js
-java/awt/event/ItemEvent.js
-java/awt/event/ItemListener.js
-java/awt/event/KeyListener.js
-java/awt/event/MouseEvent.js
-java/awt/event/MouseListener.js
-java/awt/event/MouseMotionListener.js
-java/awt/event/MouseWheelListener.js
-java/awt/event/TextListener.js
-java/awt/event/WindowAdapter.js
-java/awt/event/WindowEvent.js
-java/awt/event/WindowFocusListener.js
-java/awt/event/WindowListener.js
-java/awt/event/WindowStateListener.js
-java/awt/EventDispatchThread.js
-java/awt/EventFilter.js
-java/awt/EventQueue.js
-java/awt/EventQueueItem.js
-java/awt/FlowLayout.js
-java/awt/FocusTraversalPolicy.js
-java/awt/Font.js
-java/awt/font/FontRenderContext.js
-java/awt/FontMetrics.js
-java/awt/Frame.js
-java/awt/geom/AffineTransform.js
-java/awt/geom/Dimension2D.js
-java/awt/geom/Path2D.js
-java/awt/geom/PathIterator.js
-java/awt/geom/Point2D.js
-java/awt/geom/Rectangle2D.js
-java/awt/geom/RectangularShape.js
-java/awt/geom/RectIterator.js
-java/awt/GraphicsCallback.js
-java/awt/GraphicsConfiguration.js
-java/awt/GraphicsDevice.js
-java/awt/GraphicsEnvironment.js
-java/awt/Image.js
-java/awt/image/ImageObserver.js
-java/awt/Insets.js
-java/awt/ItemSelectable.js
-java/awt/JSComponent.js
-java/awt/JSDialog.js
-java/awt/JSFrame.js
-java/awt/JSPanel.js
-java/awt/KeyboardFocusManager.js
-java/awt/KeyEventDispatcher.js
-java/awt/KeyEventPostProcessor.js
-java/awt/Label.js
-java/awt/LayoutManager.js
-java/awt/LayoutManager2.js
-java/awt/LightweightDispatcher.js
-java/awt/Paint.js
-java/awt/Panel.js
-java/awt/peer/ComponentPeer.js
-java/awt/peer/ContainerPeer.js
-java/awt/peer/FramePeer.js
-java/awt/peer/KeyboardFocusManagerPeer.js
-java/awt/peer/LightweightPeer.js
-java/awt/peer/WindowPeer.js
-java/awt/Point.js
-java/awt/Queue.js
-java/awt/Rectangle.js
-java/awt/RenderingHints.js
-java/awt/Scrollbar.js
-java/awt/ScrollPane.js
-java/awt/Shape.js
-java/awt/Stroke.js
-java/awt/TextArea.js
-java/awt/TextComponent.js
-java/awt/TextField.js
-java/awt/Toolkit.js
-java/awt/Transparency.js
-java/awt/Window.js
-java/beans/ChangeListenerMap.js
-java/beans/PropertyChangeEvent.js
-java/beans/PropertyChangeListener.js
-java/beans/PropertyChangeSupport.js
-java/lang/AbstractStringBuilder.js
-java/lang/Class.js
-java/lang/Enum.js
-java/lang/Iterable.js
-java/lang/reflect/Constructor.js
-java/lang/reflect/Method.js
-java/lang/StringBuffer.js
-java/lang/StringBuilder.js
-java/lang/Thread.js
-java/lang/ThreadGroup.js
-java/math/RoundingMode.js
-java/net/URL.js
-java/net/URLStreamHandlerFactory.js
-java/net/HttpURLConnection.js
-java/net/URLStreamHandler.js
-javax/net/ssl/HttpsUrlConnection.js
-java/text/CharacterIterator.js
-java/text/DecimalFormat.js
-java/text/DecimalFormatSymbols.js
-java/text/DigitList.js
-java/text/FieldPosition.js
-java/text/Format.js
-java/text/NumberFormat.js
-java/util/AbstractCollection.js
-java/util/AbstractList.js
-java/util/AbstractMap.js
-java/util/AbstractSequentialList.js
-java/util/AbstractSet.js
-java/util/ArrayList.js
-java/util/Arrays.js
-java/util/Collection.js
-java/util/Collections.js
-java/util/Comparator.js
-java/util/Deque.js
-java/util/Dictionary.js
-java/util/Enumeration.js
-java/util/EventListener.js
-java/util/EventObject.js
-java/util/HashMap.js
-java/util/HashSet.js
-java/util/Hashtable.js
-java/util/IdentityHashMap.js
-java/util/Iterator.js
-java/util/LinkedHashMap.js
-java/util/LinkedList.js
-java/util/List.js
-java/util/ListResourceBundle.js
-java/util/Locale.js
-java/util/Map.js
-java/util/Objects.js
-java/util/Queue.js
-java/util/Random.js
-java/util/RandomAccess.js
-java/util/ResourceBundle.js
-java/util/Set.js
-java/util/TimSort.js
-java/util/Vector.js
-javajs/api/JSFunction.js
-javajs/util/AjaxURLConnection.js
-javajs/util/AjaxURLStreamHandlerFactory.js
-javajs/util/AU.js
-javajs/util/JSThread.js
-javajs/util/Lst.js
-javajs/util/PT.js
-javajs/util/Rdr.js
-javajs/util/SB.js
-javax/swing/AbstractAction.js
-javax/swing/AbstractButton.js
-javax/swing/AbstractListModel.js
-javax/swing/Action.js
-javax/swing/ActionMap.js
-javax/swing/AncestorNotifier.js
-javax/swing/ArrayTable.js
-javax/swing/border/AbstractBorder.js
-javax/swing/border/BevelBorder.js
-javax/swing/border/Border.js
-javax/swing/border/CompoundBorder.js
-javax/swing/border/EmptyBorder.js
-javax/swing/border/EtchedBorder.js
-javax/swing/border/LineBorder.js
-javax/swing/border/TitledBorder.js
-javax/swing/BorderFactory.js
-javax/swing/BoundedRangeModel.js
-javax/swing/BoxLayout.js
-javax/swing/ButtonGroup.js
-javax/swing/ButtonModel.js
-javax/swing/ClientPropertyKey.js
-javax/swing/ComboBoxModel.js
-javax/swing/DefaultBoundedRangeModel.js
-javax/swing/DefaultButtonModel.js
-javax/swing/DefaultComboBoxModel.js
-javax/swing/DefaultSingleSelectionModel.js
-javax/swing/DropMode.js
-javax/swing/event/AncestorEvent.js
-javax/swing/event/AncestorListener.js
-javax/swing/event/CaretEvent.js
-javax/swing/event/CaretListener.js
-javax/swing/event/ChangeEvent.js
-javax/swing/event/ChangeListener.js
-javax/swing/event/DocumentEvent.js
-javax/swing/event/DocumentListener.js
-javax/swing/event/EventListenerList.js
-javax/swing/event/ListDataEvent.js
-javax/swing/event/ListDataListener.js
-javax/swing/event/UndoableEditEvent.js
-javax/swing/event/UndoableEditListener.js
-javax/swing/FocusManager.js
-javax/swing/InternalFrameFocusTraversalPolicy.js
-javax/swing/LayoutComparator.js
-javax/swing/LayoutFocusTraversalPolicy.js
-javax/swing/SortingFocusTraversalPolicy.js
-javax/swing/SwingContainerOrderFocusTraversalPolicy.js
-javax/swing/SwingDefaultFocusTraversalPolicy.js
-javax/swing/Icon.js
-javax/swing/ImageIcon.js
-javax/swing/InputMap.js
-javax/swing/JApplet.js
-javax/swing/JButton.js
-javax/swing/JCheckBox.js
-javax/swing/JCheckBoxMenuItem.js
-javax/swing/JComboBox.js
-javax/swing/JComponent.js
-javax/swing/JFrame.js
-javax/swing/JLabel.js
-javax/swing/JLayeredPane.js
-javax/swing/JMenu.js
-javax/swing/JMenuBar.js
-javax/swing/JMenuItem.js
-javax/swing/JPanel.js
-javax/swing/JPopupMenu.js
-javax/swing/JRadioButtonMenuItem.js
-javax/swing/JRootPane.js
-javax/swing/JScrollBar.js
-javax/swing/JScrollPane.js
-javax/swing/JSeparator.js
-javax/swing/JTextArea.js
-javax/swing/JTextField.js
-javax/swing/JToggleButton.js
-javax/swing/JViewport.js
-javax/swing/KeyboardManager.js
-javax/swing/KeyStroke.js
-javax/swing/ListModel.js
-javax/swing/LookAndFeel.js
-javax/swing/MenuElement.js
-javax/swing/MutableComboBoxModel.js
-javax/swing/plaf/ActionMapUIResource.js
-javax/swing/plaf/basic/BasicBorders.js
-javax/swing/plaf/BorderUIResource.js
-javax/swing/plaf/ColorUIResource.js
-javax/swing/plaf/ComponentUI.js
-javax/swing/plaf/DimensionUIResource.js
-javax/swing/plaf/FontUIResource.js
-javax/swing/plaf/InputMapUIResource.js
-javax/swing/plaf/InsetsUIResource.js
-javax/swing/plaf/UIResource.js
-javax/swing/RepaintManager.js
-javax/swing/RootPaneContainer.js
-javax/swing/Scrollable.js
-javax/swing/ScrollPaneConstants.js
-javax/swing/ScrollPaneLayout.js
-javax/swing/SingleSelectionModel.js
-javax/swing/SizeRequirements.js
-javax/swing/SwingConstants.js
-javax/swing/SwingPaintEventDispatcher.js
-javax/swing/SwingUtilities.js
-javax/swing/text/AbstractDocument.js
-javax/swing/text/AttributeSet.js
-javax/swing/text/Caret.js
-javax/swing/text/DefaultCaret.js
-javax/swing/text/DefaultEditorKit.js
-javax/swing/text/Document.js
-javax/swing/text/EditorKit.js
-javax/swing/text/Element.js
-javax/swing/text/GapContent.js
-javax/swing/text/GapVector.js
-javax/swing/text/JTextComponent.js
-javax/swing/text/MutableAttributeSet.js
-javax/swing/text/PlainDocument.js
-javax/swing/text/PlainView.js
-javax/swing/text/Position.js
-javax/swing/text/Segment.js
-javax/swing/text/SegmentCache.js
-javax/swing/text/SimpleAttributeSet.js
-javax/swing/text/Style.js
-javax/swing/text/StyleConstants.js
-javax/swing/text/StyleContext.js
-javax/swing/text/TabExpander.js
-javax/swing/text/TextAction.js
-javax/swing/text/Utilities.js
-javax/swing/text/View.js
-javax/swing/tree/TreeNode.js
-javax/swing/UIDefaults.js
-javax/swing/UIManager.js
-javax/swing/undo/AbstractUndoableEdit.js
-javax/swing/undo/CompoundEdit.js
-javax/swing/undo/UndoableEdit.js
-javax/swing/ViewportLayout.js
-javax/swing/WindowConstants.js
-sun/awt/AppContext.js
-sun/awt/AWTAutoShutdown.js
-sun/awt/CausedFocusEvent.js
-sun/awt/ComponentFactory.js
-sun/awt/KeyboardFocusManagerPeerProvider.js
-sun/awt/MostRecentKeyValue.js
-sun/awt/MostRecentThreadAppContext.js
-sun/awt/PaintEventDispatcher.js
-sun/awt/PostEventQueue.js
-sun/awt/RequestFocusController.js
-sun/awt/SunToolkit.js
-sun/awt/WindowClosingListener.js
-sun/awt/WindowClosingSupport.js
-sun/awt/image/DataStealer.js
-sun/awt/image/IntegerComponentRaster.js
-sun/awt/image/IntegerInterleavedRaster.js
-sun/awt/image/SunWritableRaster.js
-sun/font/FontDesignMetrics.js
-sun/swing/DefaultLookup.js
-sun/swing/SwingLazyValue.js
-sun/text/resources/FormatData.js
-sun/text/resources/en/FormatData_en.js
-sun/util/resources/LocaleData.js
-sun/util/locale/BaseLocale.js
-sun/util/locale/LocaleUtils.js
-sun/util/locale/provider/LocaleProviderAdapter.js
-sun/util/locale/provider/LocaleDataMetaInfo.js
-swingjs/a2s/A2SContainer.js
-swingjs/a2s/A2SEvent.js
-swingjs/a2s/A2SListener.js
-swingjs/a2s/Applet.js
-swingjs/a2s/Button.js
-swingjs/a2s/Label.js
-swingjs/a2s/Panel.js
-swingjs/a2s/Scrollbar.js
-swingjs/a2s/ScrollPane.js
-swingjs/a2s/TextArea.js
-swingjs/a2s/TextField.js
-swingjs/api/Interface.js
-swingjs/api/js/DOMNode.js
-swingjs/api/js/HTML5CanvasContext2D.js
-swingjs/api/js/JSInterface.js
-swingjs/jquery/JQueryUI.js
-swingjs/JSApp.js
-swingjs/JSAppletThread.js
-swingjs/JSAppletViewer.js
-swingjs/JSFocusPeer.js
-swingjs/JSFontMetrics.js
-swingjs/JSFrameViewer.js
-swingjs/JSGraphics2D.js
-swingjs/JSGraphicsConfiguration.js
-swingjs/JSGraphicsEnvironment.js
-swingjs/JSImage.js
-swingjs/JSImagekit.js
-swingjs/JSMouse.js
-swingjs/JSNullComponentPeer.js
-swingjs/JSScreenDevice.js
-swingjs/JSThreadGroup.js
-swingjs/JSToolkit.js
-swingjs/JSUtil.js
-swingjs/plaf/ButtonListener.js
-swingjs/plaf/DefaultMenuLayout.js
-swingjs/plaf/HTML5LookAndFeel.js
-swingjs/plaf/JSAppletUI.js
-swingjs/plaf/JSButtonUI.js
-swingjs/plaf/JSCheckBoxMenuItemUI.js
-swingjs/plaf/JSCheckBoxUI.js
-swingjs/plaf/JSComboBoxUI.js
-swingjs/plaf/JSComponentUI.js
-swingjs/plaf/JSEventHandler.js
-swingjs/plaf/JSFrameUI.js
-swingjs/plaf/JSGraphicsUtils.js
-swingjs/plaf/JSLabelUI.js
-swingjs/plaf/JSLayeredPaneUI.js
-swingjs/plaf/JSLightweightUI.js
-swingjs/plaf/JSMenuBarUI.js
-swingjs/plaf/JSMenuItemUI.js
-swingjs/plaf/JSMenuUI.js
-swingjs/plaf/JSPanelUI.js
-swingjs/plaf/JSPopupMenuSeparatorUI.js
-swingjs/plaf/JSPopupMenuUI.js
-swingjs/plaf/JSRadioButtonMenuItemUI.js
-swingjs/plaf/JSRadioButtonUI.js
-swingjs/plaf/JSRootPaneUI.js
-swingjs/plaf/JSScrollBarUI.js
-swingjs/plaf/JSScrollPaneUI.js
-swingjs/plaf/JSSeparatorUI.js
-swingjs/plaf/JSSliderUI.js
-swingjs/plaf/JSTextAreaUI.js
-swingjs/plaf/JSTextFieldUI.js
-swingjs/plaf/JSTextUI.js
-swingjs/plaf/JSTextViewUI.js
-swingjs/plaf/JSViewportUI.js
-swingjs/plaf/JSWindowUI.js
-swingjs/plaf/LazyActionMap.js
-swingjs/plaf/Resizer.js
-swingjs/plaf/TextListener.js
-
-
diff --git a/swingjs/ver/3.2.9-j11/differences.txt b/swingjs/ver/3.2.9-j11/differences.txt
deleted file mode 100644 (file)
index 46e49ec..0000000
+++ /dev/null
@@ -1,1484 +0,0 @@
-Notes
-=====
-
----IMPORTANT CHARACTER SET NOTE---
-
-It is critical that all development work in Java2Script 
-be done in UTF-8. This means:
-
-- making sure your Eclipse project is set up for UTF-8 (not the Eclipse default?)
-- making sure your server can serve up UTF-8 by default for any browser-loaded files
-- making sure you don't edit a Java2Script class file or one of the site .js files
-    using a non-UTF-8 editor. It may replace non-Latin characters with "?" or garbage.
-- making sure that your web pages are delivered with proper headings indicating HTML5 and UTF-8
-
-<!DOCTYPE html>
-<html>
-<head>
-<meta charset="utf-8">
-
-Note that the DOCTYPE tag is critical for some browsers to switch into HTML5 mode. (MSIE?)
-
-
-
-  
-In particular, the Mandarin character ç§˜ (mi; "secret") is used extensively throughout
-the SwingJS class files to distinguish j2s-specific fields and methods that must not 
-ever be shadowed or overridden by subclasses. For example, we see in java.lang.Thread.java:
-
-               public static JSThread ç§˜thisThread;
-
-----------------------------------
-
-
-updated 3/21/2020 -- adds note about HashMap, Hashtable, and HashSet iterator ordering
-updated 3/20/2020 -- adds note about interning, new String("xxx"), and "xxx"
-updated 2/26/2020 -- adds Graphics.setClip issue
-updated 12/22/19 -- additional issues
-updated 11/03/19 -- adds information about File.exists() and points to src/javajs/async
-updated 10/26/19 -- adds information about File.createTempFile()
-updated 8/16/19 -- minor typos and added summary paragraph
-updated 7/19/19 -- clarification that AWT and Swing classes are supported directly
-updated 5/13/19 -- Mandarin U+79D8 reserved character; Missing Math methods; int and long
-updated 5/10/19 -- adds a section on static issues in multi-(duplicate)-applet pages
-updated 1/4/19 -- nio
-updated 9/15/18 -- adds integer 1/0 == Infinity
-updated 7/24/18 -- most classes replaced with https://github.com/frohoff/jdk8u-jdk
-updated 6/5/17 -- reserved package name "window"
-updated 3/11/17 -- myClass.getField
-updated 3/7/17 -- overloading of JSplitPane.setDividerLocation
-updated 3/2/17 -- more indication of classes not implemented (KeyListener)
-
-=============================================================================
-SwingJS and OpenJDK 8+
-=============================================================================
-
-SwingJS implements a wide range of the Java language in JavaScript. The base
-version for this implementation is OpenJDK8. some classes are implemented using 
-older source code, and there are some missing methods. For the most part, this is 
-no real problem. You can add or modify any java class just be adding it as source
-in your project. Or (preferably) you can contact me, and I can get it into the 
-distribution. Or (even more preferably) you can do that via a patch submission. 
-
-=================
-DESIGN PHILOSOPHY
-=================
-
-The java2script/SwingJS design goal is to recreate a recognizable, easily debuggable
-equivalent in JavaScript for as much of Java as practical. This means, for example, 
-that one can call in JavaScript 
-
-  new java.util.Hashtable()
-  
-and for all practical purposes it will appear that Java is running.
-
-
-Method and Field Disambiguation
--------------------------------
-
-SwingJS has no problem with the overloading of methods, for example:
-
-  public void print(int b);
-  public void print(float b);
-
-JavaScript does not allow overloading of methods, and the common practice in
-Java of naming a field the same as a method -- isAllowed and isAllowed() -- is
-not possible in JavaScript. As a result, SwingJS implements "fully-qualified" 
-method names using "$" parameter type separation. Thus, these methods in SwingJS
-will be referred to as print$I and print$F. The rules for this encoding are
-relatively simple: 
-
-1. The seven primitive types in Java are encoded $I (int), $L (long), $F (float), 
-$D (double), $B (byte) $Z (boolean), and $H (short). 
-
-2. String and Object are encoded as $S and $O, respectively.
-
-3. "java_lang_" is dropped for all other classes in the java.lang package (as in Java).
-   For example:  $StringBuffer, not $java_lang_StringBuffer
-
-4. All other classes are encoded as 
-
- "$" + Class.getName().replace(".","_")
-
-For example, in Java we see:
-
-  public void equals(Object o) {...}
-
-Whereas in SwingJS we have:
-
-  Clazz.newMeth(C$, 'equals$O', function (o) {...}
-
-And 
-
- this.getContentPane().add(bar, "North");
-
-becomes
-
- this.getContentPane$().add$java_awt_Component$O(bar, "North");
-
-5. Arrays are indicated with appended "A" for each level. So
-
-  setDataVector(Object[][] dataVector, Object[] columnIdentifiers)
-  
-becomes
-
-  setDataVector$OAA$OA(dataVector, columnIdentifiers)
-
-(It is recognized that this design does introduce a bit of ambiguity, in that
- in principal there could be user class named XA and X in the same package,
- and methods a(X[]) and a(XA) in the same class that cannot be distinguished.
- The benefit of this simple system, however, triumphed over the unlikelyhood
- of that scenario.) The transpiler could be set to flag this possibility.
-
-6. Constructors are prepended with "c$". So 
-
-  public JLabel(String text) {...}
-  
-becomes:
-
-  Clazz.newMeth(C$, 'c$$S', function (text) {...});
-
-Field disambiguation involves prepending. In Java, a class and its subclass 
-can both have the same field name, such as 
-
- boolean visible;
-When this happens, it is called "shadowing", and though not recommended, Java allows
-it. The Java2Script transpiler will prepend such shadowing fields with "$" so that the
-subclass instance has both "visible" (for use in its methods inherited from its
-superclass) and "$visible" (for its own methods). Thus, we might see in Java:
-
-  this.visible = super.visible;
-  
-while in SwingJS we will see:
-
-  this.$visible=this.visible;
-
-since JavaScript does not have the "super" keyword.
-
-
-
-Parameterless methods such as toString() are appended with "$" to become toString$().
-The one exception to this rule is private methods, which are saved in (truly) private 
-array in the class (and are not accessible by reflection). Private parameterless 
-methods retain their simple Java name, since they cannot conflict with field names.
-
-This renaming of methods has a few consequences, which are discussed more fully below.
-See particularly the section on "qualified field and method names", where it is described
-how you can use packages or classes or interfaces with ".api.js" in them to represent JavaScript
-objects for which all method names are to be left unqualified. Note that it is not 
-possible to cherry-pick methods to be unqualified; only full packages, classes or 
-interfaces can hold this status.
-
-The swingjs.api.js package in particular contains a number of useful interfaces that
-you can import into your project for JavaScript-specific capabilities.
-
-
-Applet vs. Application
-----------------------
-
-One of the very cool aspects of SwingJS is that it doesn't particularly matter if a browser-based
-Java app is an "applet" or an "application". We don't need JNLP (Java Network Launch Protocol) 
-because now we can just start up any Java application in a browser just as easily as any applet.
-The associative array that passes information to the SwingJS applet (information that formerly
-might have been part of the APPLET tag, such as width, height, and codebase, always referred to 
-in our writing as "the Info array") allows the option to specify the JApplet/Applet "code" 
-class or the application "main" class. Either one will run just fine.
-
-
-Performance
------------
-
-Obviously, there are limitations. One is performance, but we have seen reproducible 
-performance at 1/6 - 1/3 the speed of Java. Achieving this performance may require
-some refactoring of the Java to make it more efficient in both Java and JavaScript. 
-"for" loops need to be more carefully crafted; use of "new" and "instanceof" need to be
-minimized in critical areas. Note that method overloading -- that is, the same method name
-with different parameters, such as read(int) and read(byte) -- is no longer any problem. 
-  
-
-Threads
--------
-
-Although there is only a single thread in JavaScript, meaning Thread.wait(), Thread.sleep(int) and 
-Thread.notify() cannot be reproduced, we have found that this is not a serious limitation. 
-For example, javax.swing.Timer() works perfectly in JavaScript. All it means is that threads 
-that use sleep(int) or notify() must be refactored to allow Timer-like callbacks. That is, 
-they must allow full exit and re-entry of Thread.run(), not the typical while/sleep motif. 
-
-The key is to create a state-based run() that can be exited and re-entered in JavaScript.
-
-
-Static fields
--------------
-
-Final static primitive "constant" fields (String, boolean, int, etc.) such as 
-
-static final int TEST = 3;
-static final String MY_STRING = "my " + "string";
-
-are converted to their primitive form automatically by the Eclipse Java compiler 
-and do not appear in the JavaScript by their names. 
-
-Other static fields are properties of their class and can be used as expected.
-
-Note, however, that SwingJS runs all "Java" code on a page in a common "jvm" 
-(like older versions of Java). So, like the older Java schema, the JavaScript 
-equivalents of both applets and applications will share all of their static 
-fields and methods. This includes java.lang.System. 
-
-Basically, SwingJS implementations of Java run in a browser page-based sandbox 
-instead of an applet-specific one.
-
-In general, this is no problem. But if we are to implement pages with 
-multiple applets present, we must be sure to only have static references 
-that are "final" or specifically meant to be shared in a JavaScript 
-environment only (since they will not be shared in Java).
-
-A simple solution, if static non-constant references are needed, is to attach the 
-field to Thread.currentThread.threadGroup(), which is an applet-specific reference.
-Be sure, if you do this, that you use explicit setters and getters:
-
-For example, 
-
-private static String myvar;
-
-...
-
-public void setMyVar(String x) {
-  ThreadGroup g = Thread.currentThread().threadGroup();
-  /**
-   * @j2sNative g._myvar = x;
-   * 
-   */
-   {
-     myvar = x;
-   }
-}
-
-public String getMyVar() {
-  ThreadGroup g = Thread.currentThread().threadGroup();
-  /**
-   * @j2sNative return g._myvar || null;
-   * 
-   */
-   {
-     return myvar;
-   }
-}
- in Java will get and set x the same in JavaScript and in Java. 
-A convenient way to do this in general is to supply a singleton class with
-explicitly private-only constructors and then refer to it in Java and in JavaScript
-instead of using static field, referring to myclass.getIntance().xxx instead of 
-myclass.xxx in Java (and JavaScript). 
-
-This was done extensively in the Jalview project. See jalview.bin.Instance.
-
-
-Helper Packages -- swingjs/ and javajs/
----------------------------------------
-
-The SwingJS library is the swingjs/ package. There are interfaces that may be of assistance
-in swingjs/api, but other than that, it is not recommended that developers access classes in 
-this package. The "public" nature of their methods is really an internal necessity.
-
-In addition to swingjs/, though, there are several useful classes in the javajs/ package
-that could be very useful. This package is a stand-alone package that can be 
-cloned in any Java project that also would be great to have in any JavaScript project
--- SwingJS-related or not. Functionality ranges from reading and writing various file 
-formats, including PDF, BMP, PNG, GIF, JPG, JSON, ZIP, and CompoundDocument formats.
-
-A variety of highly efficient three- and four-dimensional point, vector, matrix, and 
-quaternion classes are included, as they were developed for JSmol and inherited from that
-project. 
-
-Of particular interest should be javajs/async/, which includes
-
-javajs.async.Async
-javajs.async.AsyncColorChooser
-javajs.async.AsyncDialog
-javajs.async.AsyncFileChooser
-
-See javajs.async.Async JavaDoc comments for a full description of 
-these useful classes.
-
-
-Modal Dialogs
--------------
-
-Although true modal dialogs are not possible with only one thread, a functional equivalent -- 
-asynchronous modal dialogs -- is relatively easy to set up. All the JOptionPane dialogs will
-return PropertyChangeEvents to signal that they have been disposed of and containing the results. 
-See below and classes in the javajs.async package.
-
-
-Native calls
-------------
-
-Native calls in Java are calls to operating system methods that are not in Java. JavaScript
-has no access to these, of course, and they must all be replaced by JavaScript equivalents.
-Fortunately, they are not common, and those that are present in Java (for example, in calculating
-checksums in ZIP file creation) are at a low enough level that most developers do not utilize them
-or do not even have access to them. All native calls in Java classes have been replaced by 
-Java equivalents.
-
-
-Swing GUI Peers and UIClasses
------------------------------
-
-One of the biggest adaptations introduced in SwingJS is in the area of the graphical 
-user interface. The issue here is complex but workable. In Java there are two background 
-concepts -- the Component "peer" (one per "heavy-weight" component, such as a Frame) and the 
-component "uiClass" (one per component, such as JButton or JTextField).
-
-Peers are native objects of the operating system. These are the virtual buttons and text areas
-that the user is interacting with at a very base level. Their events are being passed on to 
-Java or the browser by the operating system. UI classes provide a consistent "look and feel" 
-for these native objects, rendering them onto the native window canvas and handling all 
-user-generated events. They paint the borders, the backgrounds, the highlights, of every 
-control you see in Java. There is one-to-one correspondence of Swing classes and UI classes. 
-Setting the Look and Feel for a project amounts to selecting the directory from which to draw 
-these UI classes. The UI classes can be found in the javax.swing.plaf ("platform look and feel") 
-package.
-
-Early on in the development of SwingJS, we decided not to fully reproduce the painfully detailed 
-bit-by-bit painting of controls as is done in Java. Instead, we felt it was wiser to utilize the standard
-HTML5 UI capabilities as much as possible, using DIV, and INPUT especially, with extensive use
-of CSS and sometimes jQuery (menus, and sliders, for example). Thus, we have created a new 
-set of UIs -- the "HTML5 Look and Feel". These classes can be found in swingjs.plaf. Besides being
-more adaptable, this approach allows far more versatility to SwingJS developers, allowing them
-to modify the GUI to suit their needs if desired.
-
-In SwingJS, since we have no access to native peers except through the browser DOM,
-it seemed logical to merge the peer and UI idea. So instead of having one peer per heavy-weight control and
-one UI class instance for each control type, we just have one UI class instance per control, and
-that UI class instance is what is being referred to when a "peer" is notified. 
-
-In some ways this is a throw back to when all of Swing's components were subclasses of
-specific AWT components such as Button and List. These "heavy-weight components" all had their 
-own individual native peers and thus automatically took on the look and feel provided by the OS. 
-Later Swing versions implemented full look and feel for all peers, leaving only JDialog, JFrame,
-and a few other classes to have native peers. But in SwingJS we have again a 1:1 map of component
-and UI class/peer instance.
-
-The origin of most issues (read "bugs") in relation to the GUI will probably be found in the
-swingjs.plaf JSxxxxUI.java code.
-
-  
-Swing-only Components -- no longer an issue
--------------------------------------------
-
-Swing was introduced into Java well after the Java Abstract Window Toolkit (AWT) was well
-established. As such, its designers chose to allow AWT controls such as Button and List to be used 
-alongside their Swing counterparts JButton and JList. Reading the code, it is clear that this 
-design choice posed a huge headache for Swing class developers. 
-
-For SwingJS, we decided from the beginning NOT to allow this mixed-mode programming and 
-instead to require that all components be Swing components. 
-
-However, this is no longer an issue. All AWT components in SwingJS are now subclasses of 
-javax.swing.JComponent. So far, we have found no problem with this.
-
-The a2s Adapter Package
------------------------
-
-Originally, we thought that we would restrict ourselves to JApplets only. That is, only
-Swing-based applets. But as we worked, we discovered that there are a lot of great 
-applets out there that are pre-Swing pure-AWT java.applet.Applet applets. Our problem was 
-that we also wanted it to be possible to quickly adapt these applets to JavaScript as well.
-The solution turned out to be simple: Write a package (a2s) that recreates the interface for 
-non-Swing components as subclasses of Swing components. Thus, a2s.Button subclasses javax.swing.JButton
-but also accepts all of the methods of java.awt.Button. This works amazingly well, with a few
-special adaptations to the core javax.swing to be "AWT-aware." All AWT components now subclass 
-a2s components, which in turn subclass JComponents. So no changes in code are necessary. We have
-successfully transpiled over 500 applets using this strategy. (Kind of surprising, actually, that
-the original Java developers did not see that option. But we have a hindsight advantage here.)
-
-
-Working with Files
-==================
-
-Simple String file names are not optimal for passing information about
-read files within SwingJS applications. 
-All work with files should either use Path or File objects exclusively. 
-These objects, after a file is read or checked for existence, will already 
-contain the file byte[] data. Doing something like this:
-
-File f = File("./test.dat");
-boolean isOK = f.exists();
-
-will load f with its byte[] data, if the file exists. 
-
-But if after that, we use:
-
-File f2 = new File(f.getAbsolutePath());
-
-f2 will not contain that data. Such copying should be done as:
-
-File f2 = new File(f);
-
-in which case, the byte[] data will be transferred.
-
-
-SwingJS uses the following criteria to determine if File.exists() returns true:
-
-(1) if this File object has been used directly to read data, or 
-(2) if reading data using this File object is successful.
-
-Note that you cannot check to see if a file exists before input or if it 
-was actually written or if it already exists prior to writing in SwingJS.  
-
-Thus, you should check each use of file.exists() carefully, and if necessary, provide a J2sNative 
-block that gives an appropriate "OK" message, for example:
-
-(/** @j2sNative 1 ? false : */ outputfile.exits())
-
-or 
-
-(/** @j2sNative 1 ? true : */ inputfile.exits())
-
-Temporary files can be created in SwingJS. SwingJS will maintain a pseudo-filesystem for files 
-created with File.createTempFile(). This is useful in that closure of writing to a temporary file 
-does not generate a pseudo-download to the user's machine.
-
-
-UNIMPLEMENTED CLASSES BY DESIGN
-===============================
-
-The SwingJS implementation of the following classes are present 
-in a way that gracefully bypasses their functionality:
-
-accessibility
-security
-serialization
-
-
-
-TODO LIST FOR UNIMPLEMENTED CLASSES
-===================================
-
-JEditorPane (minimal implementation) - DONE 12/2018; some issues still
-JSplitPane - DONE 8/2018
-JTabbedPane - DONE 10/2018
-JTree - done 12/2019
-
-
-MINOR ISSUES--required some rewriting/refactoring by Bob and Udo  
-================================================================
-
-Thread.currentThread() == dispatchThread
-
-
-MINOR ISSUES--requiring some rewriting/refactoring outside of SwingJS  
-=====================================================================
-
-See below for a full discussion.
-
-HashMap, Hashtable, and HashSet iterator ordering
-interning, new String("xxx") vs "xxx"
-Names with "$" and "_"
-positive integers do not add to give negative numbers
-ArrayIndexOutOfBounds
-java.awt.Color
-native methods
-javax.swing.JFileDialog
-key focus
-LookAndFeel and UI Classes
-System.exit(0) does not stop all processes
-list cell renderers must be JComponents
-myClass.getField not implemented
-"window" and other reserved JavaScript names
-reserved field and method names
-qualified field and method names
-missing Math methods
-Component.getGraphics(), Graphics.dispose()
-Graphics.setClip()
-
-MAJOR ISSUES--for Bob and Udo within SwingJS
-============================================
-
-fonts
-OS-dependent classes
-AWT component peers
-some aspects of reflection
-
-MAJOR ISSUES--to be resolved by implementers
-============================================
-
-fonts
-threads
-modal dialogs
-image loading
-BigDecimal not fully implemented 
-no format internationalization
-no winding rules
-text-related field implementation
-Formatter/Regex limitations
-integer 1/0 == Infinity
-
-======================================================================== 
-
-DISCUSS
-=======
-
-Table row/col sorter needs checking after removal of java.text.Collator references
-
-I had to move all of SunHints class to RenderingHints, or the 
-two classes could not be loaded. Shouldn't be a problem, I think. The sun classes are
-not accessible to developers in Java anyway, since they are generally package private.
-
-========================================================================== 
-
-//////////////////////////////////////////////////////////////////////////////
-
-UNIMPLEMENTED CLASSES
-=====================
-
-accessibility
--------------
-
-All Accessibility handling has been commented out to save the download footprint.
-This removes the need for sun.misc.SharedSecrets as well. 
-Nothing says we could not implement accessibility. We just didn't.
-
-
-security
---------
-
-All JavaScript security is handled by the browser natively. 
-Thus, Java security checking is no longer necessary, and 
-java.security.AccessController has been simplified to work without
-native security checking.
-
-Note that private methods in a class are REALLY private. 
-
-
-serialization
--------------
-
-All serialization has been removed. It was never very useful for Swing anyway, 
-because one needs exactly the same Java version to save and restore serialized objects.
-
-
-keyboard accelerators and mnemonics
------------------------------------
-
-This work was completed in the spring of 2019. Note that in a browser, some 
-key strokes, particularly CTRL-keys, are not available. Bummer.
-
-
-MINOR ISSUES--required some rewriting/refactoring by Bob and Udo  
-================================================================
-
-
-Thread.currentThread() == dispatchThread
-----------------------------------------
-
-changed to JSToolkit.isDispatchThread()
-
-
-MINOR ISSUES--requiring some rewriting/refactoring outside of SwingJS  
-=====================================================================
-
-HashMap, Hashtable, and HashSet iterator ordering
--------------------------------------------------
-
-In Java, iterators for HashMap, Hashtable, and HashSet do not guarantee any particular order. 
-From the HashMap documentation for Java 8:
-
-       This class makes no guarantees as to the order of the map; in particular, it does not 
-       guarantee that the order will remain constant over time.
-Likewise, for HashSet (because it is simply a convenience method for HashMap<Object,PRESENT>:
-
-       [HashSet] makes no guarantees as to the iteration order of the set.
-
-JavaScript's Map object is different. It is basically a LinkedHashMap, so it guarantees iteration
-in order of object addition.
-
-Starting with java2script 3.2.9.v1, these classes use the JavaScript Map object rather than hash codes
-whenever all keys are strictly of JavaScript typeof "string". If any key is introduced that is not a string, the
-implementation falls back to using hash codes, the same as Java. 
-
-Note strings created using new String("xxxx") are NOT typeof "string"; they are typeof "object".
-
-The result is significantly faster performance (3-12 x faster) than originally, and up to 3 x faster
-performance in JavaScript than in Java itself. Right. Faster than Java. 
-
-The JavaScript Map implementation is implemented UNLESS the constructor used is the one that
-specifies both initial capacity and load factor in their constructor. Thus, 
-
-new Hashtable()
-new HashMap()
-new HashMap(16)
-new HashSet()
-
-all use the JavaScript Map. But
-
-new Hashtable(11, 0.75f)
-new HashMap(16, 0.75f)
-new HashSet(16, 0.75f)
-
-do not. 
-
-This design allows for opting out of the JavaScript Map use in order to retain the exact behavior of 
-iterators in JavaScript as in Java.
-
-
-interning, new String("xxx") vs "xxx"
--------------------------------------
-
-Note that the following are true in JavaScript:
-
-typeof new String("xxxx") == "object"
-typeof "xxxx" == "string"
-var s = "x";typeof ("xxx" + s) == "string"
-
-There is no equivalence to this behavior in Java, where a String is a String is a String.
-
-Be aware that SwingJS does not always create a JavaScript String object using JavaScript's 
-new String(...) constructor. It only does this for Java new String("xxxx") or new String(new String()). 
-
-In all other cases, new String(...) (in Java) results in a simple "xxxx" string in JavaScript. 
-That is, it will be JavaScript typeof "string", not typeof "object". 
-
-The reason for this design is that several classes in the Java core use toString() 
-methods that return new String(), and those classes that do that would cause a JavaScript error
-if implicitly stringified if new String() returned a JavaScript String object. 
-
-This is fine in JavaScript
-
-test1 = function() { return { toString:function(){ return "OK" } } }
-"testing" + new test1()
->> "testingOK"
-
-But for whatever reason in JavaScript:
-
-test2 = function() { return { toString:function(){ return new String("OK") } } }
-"testing" + new test2()
->> Uncaught TypeError: Cannot convert object to primitive value
-
-The lesson here is never to use 
-
-  return new String("...");
-
-in a Java toString() method. In Java it will be fine; in JavaScript it will also be fine as long as
-that method is never called in JavaScript implicitly in the context of string concatenation.
-
-A note about interning. Consider the following six Java constructions, where we have a == "x";
-
-"xxx"
-"xx" + "x"
-new String("xxx").intern()
-
-new String("xxx")
-"xx" + a.toString()
-"xx" + a
-
-All six of these will return java.lang.String for .getClass().getName().
-However, the first three are String literals, while the last three are String objects. 
-Thus:
-        "xxx" == "xxx"
-        "xxx" == "xx" + "x"
-        "xxx" == new String("xxx").intern()
-
-but none of the other three are equivalent to "xxx" or each other:
-
-              "xxx" != new String("xxx")
-              "xxx" != "xx" + a.toString()
-              "xxx" != "xx" + a
-  new String("xxx") != new String("xxx") 
-           "xx" + a != new String("xxx") 
-
-etc.
-
-As in Java, in SwingJS, all of the following Java assertions pass as true:
-
-               assert("xxx" == "xx" + "x"); 
-               assert("xxx" == ("xx" + a).intern()); 
-               assert("xxx" === new String("xxx").intern()); 
-               
-and both of these do as well:
-
-               assert(new String("xxx") != "xxx"); 
-               assert(new String("xxx") != new String("xxx")); 
-
-But the following two fail to assert true:
-
-        assert("xxx" != "xx" + a);
-        assert("xxx" != "xx" + a.toString());
-
-because in JavaScript, both of these right-side expressions evaluate to a simple "interned" string.
-
-In Java, however, these assertions are true because Java implicitly "boxes" String 
-concatentaion as a String object, not a literal. 
-
-Most of us know not to generally use == with Strings unless they are explicitly interned. 
-Where this problem may arise, though, is in IdentityHashMap, which compares objects using 
-System.identityHashCode(), which is not the same for different objects or their string literal equivalents.
-
-My recommendation, if you need to use IdentityHashMap with strings is to always use an explicit String.intern()
-for any keys -- unless you really want to keep every string as separate keys even if they are the same sequence, 
-in which case, use new String(). This will work in Java and in  JavaScript.
-
-Be aware when working with strings that come from SwingJS and are being used by other JavaScript modules
-that those that are String objects will return "object" for the JavaScript typeof operator, not "string".
-
-The easy way to ensure this is no problem is to concatenate strings with "" to force immediate interning:
-
-  var x = aJavaObject.getString() + "";
-
-unless you are certain that the string is being returned is a raw JavaScript string.   
-
-Names with "$" and "_"
-----------------------
-
-For the most part, this should be no problem. 
-
-Note that the use of $ and _ in Java field names has always been discouraged:
-[https://docs.oracle.com/javase/tutorial/java/nutsandbolts/variables.html]
-
-       You may find some situations where auto-generated names will contain the dollar sign, 
-       but your variable names should always avoid using it. A similar convention 
-       exists for the underscore character; while it's technically legal to begin your 
-       variable's name with "_", this practice is discouraged.
-
-Some impacts of transpiling method names with full qualification:
-
-1) SwingJS will introduce fields that start with $ or _. These will not conflict
-   if the above convention is followed.
-   
-2) Fields that have the same Java name as a method are not an issue. 
-
-3) Fields that have a Java name with $ that matches a transpiled method name, 
-   such as toString$, will need to be refactored in Java to not have that name collision.
-   
-4) Fields in a subclass that have the same name as private fields in a superclass
-   represent a name collision, because the superclass method needs to call its private
-   field even if invoked from a subclass. The solution was to modify the subclass field
-   name using one or more prepended $.
-   
-5) Use of Class.getDeclaredMethods() reflection will return Method objects having the transpiled 
-   name, not the Java name. This could require some j2sNative adjustment 
-   to strip the $... parameters from the name if that is needed. 
-
-6) Use of Method.getParameterTypes() should work fine, provided class names
-   do not contain "_". This is because the transpiler converts "." to "_" when
-   creating the fully qualified JavaScript name.
-
-
-positive integers do not add to give negative numbers
------------------------------------------------------
-
-In Java, the following is true:
-
-  2000000000 + 2000000000 == -294967296
-
-But in SwingJS, that will be 4000000000. So, for example, the following
-strategy will fail in SwingJS:
-
-               int newLength = lineBuf.length * 2;
-               if (newLength < 0) {
-                       newLength = Integer.MAX_VALUE;
-               }
-
-"-1" in JavaScript is not 0xFFFFFFFF.
-
-And one must take care to not compare a negative number with a 32-bit mask. So
-
-(b & 0xFF000000) == 0xFF000000
-
-is true in Java for (int) b = -1, but is false in JavaScript, because 0xFF000000 is 4278190080, 
-while (-1 & 0xFF000000) is, strangely enough, -16777216, and, in fact, 
-
-(0xFF000000 & 0xFF000000) != 0xFF000000
-
-because -16777216 is not 4278190080.
-
-The fix is that one must compare similar operations:
-
-if ((b & 0xFF000000) == (0xFF000000 & 0xFF000000)) .....
-
-Importantly, the JavaScript Int32Array does behave properly. From 
-the Firefox developer console:
-
->> x = new Int32Array(1)
-<- Int32Array(1) [ 0 ]
->> x[0] = 4000000000
-<- 4000000000
->> x[0]
-<- -294967296
-
-Notice that, perhaps unexpectedly, the following two constructs produce 
-different results in JavaScript:
-
-x = new Int32Array(1);
-b = x[0] = 4000000000;
-
-(b will be 4000000000)
-
-and
-
-x = new Int32Array(1);
-x[0] = 4000000000;
-b = x[0];
-
-(b will be -294967296)
-
-
-SwingJS leverages array typing to handle all byte and short arithmetic so as
-to ensure that any byte or short operation in JavaScript does give the same 
-result in Java. The design decision to not also do this with integer math was
-a trade-off between performance and handling edge cases.
-
-
-ArrayIndexOutOfBounds
----------------------
-
-You cannot implicitly throw an ArrayIndexOutOfBoundsException in JavaScript.
-JavaScript will simply return "undefined", not throw an Exception. So:
-
-boolean notAGoodIdeaIsOutOfBounds(String[] sa, int i) {
-  try {
-     return (sa[i] == sa[i]);
-  } catch (ArrayIndexOutOfBoundsException e) {
-       return false;
-  }
-}
-
-will work in Java but not in JavaScript. Code should not depend upon this sort 
-of trap anyway, if you ask me. 
-
-Throwable vs Error vs Exception
--------------------------------
-
-True JavaScript errors are trapped as Throwable, whereas you can still trap
-Error and Exception as well. So if you want to be sure to catch any JavaScript
-error, use try{}catch (Throwable t){}, not try{}catch (Exception e){}. 
-
-j
-ava.awt.Color
---------------
-
-ColorSpace: only "support" CS_sRGB.
-
- TODO -- any volunteers??
-
-javax.swing.JFileDialog
------------------------
-
-HTML5 cannot expose a file reading directory structure. But you certainly 
-can still do file reading and writing. It just works a little differently.
-It's a simple modification:
-
-               b = new JButton("FileOpenDialog");
-               b.addActionListener(new ActionListener() {
-
-                       @Override
-                       public void actionPerformed(ActionEvent e) {
-                               JFileChooser fc = new JFileChooser();
-                               Test_Dialog.this.onDialogReturn(fc.showOpenDialog(Test_Dialog.this));
-                               // Java will wait until the dialog is closed, then enter the onDialogReturn method.
-                               // JavaScript will exit with NaN immediately, and then call back with its actual value
-                               // asynchronously.
-                       }
-
-               });
-       
-               public void onDialogReturn(int value) {
-                       if (value != Math.floor(value))
-                               return; // in JavaScript, this will be NaN, indicating the dialog has been opened
-                       // If we are here, the dialog has closed, in both Java and JavaScript.
-                       System.out.println("int value is " + value);
-               }
-
-
-       @Override
-       public void propertyChange(PropertyChangeEvent event) {
-               Object val = event.getNewValue();
-               String name = event.getPropertyName();
-               System.out.println(name);
-               switch (event.getSource().getClass().getName()) {
-               case "javax.swing.JOptionPane":
-                       switch (name) {
-                       case "inputValue":
-                               onDialogReturn(val);
-                               return;
-                       case "value":
-                               if (val instanceof Integer)
-                                       onDialogReturn(((Integer) val).intValue());
-                               else
-                                       onDialogReturn(val);
-                               return;
-                       }
-                       break;
-               case "javax.swing.ColorChooserDialog":
-                       switch (name) {
-                       case "SelectedColor":
-                               onDialogReturn(val);
-                               return;
-                       }
-                       break;
-               case "javax.swing.JFileChooser":
-                       switch (name) {
-                       case "SelectedFile":
-                               File file = (File) val;
-                               byte[] array = (val == null ? null : /** @j2sNative file.秘bytes || */
-                                               null);
-                               onDialogReturn("fileName is '" + file.getName() + "'\n\n" + new String(array));
-                               return;
-                       }
-                       break;
-               }
-               System.out.println(
-                               event.getSource().getClass().getName() + " " + event.getPropertyName() + ": " + event.getNewValue());
-       }
-
-
-Developers are encouraged to create a separate class that handles general calls to JFileDialog. 
-An example class can be found in the SwingJS distribution as 
-
-/sources/net.sf.j2s.java.core/src/javajs/async/AsyncFileChooser.java.
-
-
-javax.swing.JOptionPane dialogs
--------------------------------
-
-For this action to work, the parentComponent must implement
-propertyChangeListener, and any call to JOptionPanel should allow for
-an asynchronous response, meaning that there is no actionable code following the
-call to the dialog opening. 
-
-In addition, for compatibility with the Java version, implementation should
-wrap the call to getConfirmDialog or getOptionDialog in a method call to
-handle the Java:
-
-onDialogReturn(JOptionPane.showConfirmDialog(parentFrame,
-messageOrMessagePanel, "title", JOptionPane.OK_CANCEL_OPTION));
-
-Then parentFrame.propertyChange(event) should also call onDialogReturn.
-
-This will then work in both Java and JavaScript.
-
-Note that there is an int and an Object version of onDialogReturn().
-
-
-In JavaScript:
-
-The initial return from JOptionPane.showConfirmDialog and showMessageDialog
-will be (SwingJS) JDialog.ASYNCHRONOUS_INTEGER (NaN), testable as an impossible 
-Java int value using ret != -(-ret) if the parent implements PropertyChangeListener, or -1
-(CLOSE_OPTION) if not.
-
-For showOptionDialog (which returns Object) or showInputDialog (which returns
-String), the initial return will be (SwingJS) JDialog.ASYNCHRONOUS_OBJECT, testable as
-((Object) ret) instanceof javax.swing.plaf.UIResource if the parent implements
-PropertyChangeListeneer, or null if not.
-
-The second return will be the desired return.
-
-In Java:
-
-The initial return will be the one and only modal final return.
-
-
-
-For full compatibility, The calling method must not continue beyond this
-call.
-
-All of the standard Java events associated with Components are also
-available.
-
-Certain fall back mechanisms are possible, where onReturn does not exist, but
-only for the following cases:
-
-
-For showMessageDialog, for WARNING_MESSAGE and ERROR_MESSAGE, a simple
-JavaScript alert() is used, returning 0 (OK_OPTION) or -1 (CLOSED_OPTION).
-
-For showInputDialog, if the message is a string, a simple JavaScript prompt()
-with input box is used, returning the entered string or null.
-
-For showConfirmDialog, a simple JavaScript confirm() is used, in which case:
-
-for YES_NO_OPTION: YES_OPTION or NO_OPTION
-
-for YES_NO_CANCEL_OPTION: YES_OPTION or CANCEL_OPTION
-
-for OK_CANCEL_OPTION or any other: OK_OPTION or CANCEL_OPTION
-
-Note that you should implement a response for CLOSED_OPTION for
-showConfirmDialog. For other dialogs, a null return indicates the dialog was
-closed, just as for Java.
-
-Developers are encouraged to create a separate class that handles general calls. 
-An example class can be found in the SwingJS distribution as src/javajs/async/AsyncDialog.java.
-Very simple modifications to the Java allows asynchronous operation using AsyncDialog. Here
-is a simple "do you want to close this frame" example, where you can see that what we have
-done is to set the reply into an ActionListener that is defined in the constructor of 
-the AsyncDisplay object:
-
-// Original:
-//
-//     private void promptQuit() {
-//             int sel = JOptionPane.showConfirmDialog(null, PROMPT_EXIT, NAME, JOptionPane.YES_NO_OPTION);
-//             switch (sel) {
-//             case JOptionPane.YES_OPTION:
-//                     resultsTab.clean();
-//                     seqs.dispose();
-//                     if (fromMain) {
-//                             System.exit(0);
-//                     }
-//                     break;
-//             }
-//     }
-
-       private void promptQuitAsync() {
-               new AsyncDialog(new ActionListener() {
-
-                       @Override
-                       public void actionPerformed(ActionEvent e) {
-                           int sel = ((AsyncDialog)e.getSource()).getOption();
-                               switch (sel) {
-                               case JOptionPane.YES_OPTION:
-                                       resultsTab.clean();
-                                       seqs.dispose();
-                                       if (fromMain) {
-                                               System.exit(0);
-                                       }
-                                       break;
-                               }
-                       }}).showConfirmDialog(null, PROMPT_EXIT, NAME, JOptionPane.YES_NO_OPTION);
-       }
-
-Very simple! 
-
-
-native methods
---------------
-
-The J2S compiler ignores all static native method declarations.
-Anything of this nature needs to be implemented in JavaScript if it is needed,
-using j2sNative blocks:
-
-/**
- * @j2sNative
- *
- *    var putYourJavaScriptCodeHere
- *
- */
- Note that if you follow that directly with a {...} block, then 
- the javadoc code will run in JavaScript, and the {...} code will run in Java.
-key Focus
----------
-
-As of June, 2019, the keyboard focus manager is fully implemented. 
-The one catch is that JTextPane and JTextArea, which already consume
-VK_TAB in Java, cannot use CTRL-TAB to continue a tabbing cycle around
-the components in a window. Instead, CTRL-TAB is absorbed by the browser. 
-
-
-LookAndFeel and UI Classes
---------------------------
-
-SwingJS implements the native browser look and feel as swingjs.plaf.HTML5LookAndFeel. 
-There are small differences between all look and feels -- MacOS, Windows, SwingJS.
-
-Expert developers know how to coerce changes in the UI by subclassing the UI for a 
-component. This probably will not work in SwingJS. 
-
-Note that LookAndFeel in Java usually determines canvas size in a Frame because 
-different operating systems (Mac OS vs Windows vs HTML5) will have 
-different edge sizes on their frames. If you want to ensure a component size, 
-use getContentPane().setPreferredSize().
-
-
-System.exit(0) does not stop all processes
-------------------------------------------
-
-Although System.ext(int) has been implemented in JavaScript, it just closes the 
-frames, stops all pending javax.swing.Timer objects in the queue, and runs any 
-threads added using Runtime.getRuntime().addShutdownHook(Thread).
-It may not stop all "threads." So don't rely on that.
-Applications are responsible for shutting down prior to executing System.exit(0). 
-
-
-myClass.getField not implemented
---------------------------------
-
-java.lang.reflect.Field is implemented minimally. It is not
-certain that Field.getDeclaringClass() will work. If you just want a 
-value of a field, you can do this:
-
-/**
- *@j2sNative
- *
- * return myClass[name]
- */   
-
-But that is not a java.lang.reflection.Field object.
-
-
-"window" and other reserved JavaScript names
---------------------------------------------
-
-No reserved top-level JavaScript name is allowed for a package name. So, for example, 
-one must rename packages such as "window" or "document" to names such as "win" or "doc".
-
-reserved field and method names
--------------------------------
-
-In order to minimize the chance of added SwingJS field and method names colliding with ones 
-developers might use in subclassing Java classes, we have added U+79D8 (first character of Mandarin 
-"secret") to the characters already disrecommended by Java documentation ("$" and "_"). The only problem
-would be if you use that character followed by certain English words in certain classes. For example
-\u79D8canvas for JComponents (in java.awt.JSComponent) and \u79D8byte (in java.io.File).
-
-qualified field and method names
---------------------------------
-
-Method names in SwingJS are fully qualified, meaning two methods with the same Java name but different
-parameters, such as write(int) and write(double), must not have the same name in JavaScript. (In this
-case, we will have write$I and write$D.) However, in certain cases it may be desirable to leave the
-method names unqualified. In particular, when an interface actually represents a JavaScript object, 
-the transpiler can leave a method name unqualified. The default situation for this is a class name 
-includes ".api.js" (case-sensitive). This means that any method in any class in a package js within 
-a package api, or any private interface js that has an outer interface api, will have all-unqualified
-methods. An example of this is swingjs.plaf.JSComboPopupList, which needs to communicate with a jQuery 
-object directly using the following interface:
-
-       private interface api {
-
-               interface js extends JQueryObject {
-
-                       abstract js j2sCB(Object options);
-
-                       abstract Object[] j2sCB(String method);
-
-                       abstract Object[] j2sCB(String method, Object o);
-
-                       abstract Object[] j2sCB(String method, int i);
-
-                       abstract int j2sCB(String OPTION, String name);
-
-               }
-       }
-
-Notice that all these variants of j2sCB() will call the same method in JavaScript by design.
-
-
-missing Math methods
---------------------
-
-java.lang.Math is worked out, but some methods are missing, either because they
-involve long integer value that are inaccessible in JavaScript, or because I just
-didn't implement them. This is a result of continued Java development. 
-It is easy enough to add these methods if you have the source. They go into j2sClazz.js, 
-which is combined with other initial libraries into swingjs2.js by build_site.xml
-
-
-Component.getGraphics(), Graphics.dispose()
--------------------------------------------
-
-Use of component.getGraphics() is discouraged in Java and in SwingJS. 
-Specifically in SwingJS, any call to component.getGraphics() or 
-BufferedImage.createGraphics() or Graphics.create(...) should be matched with graphics.dispose(), 
-particularly when it is called outside the context of a paint(Graphics)
-call from the system. 
-
-If you see your graphics scrolling down the page with each repaint, 
-look for where you have used Component.getGraphics() and not Graphics.dispose().
-For example, this will definitely NOT work in SwingJS:
-
-  this.paint(getGraphics())
-  
-and really should not work in Java, either, as it is technically a resource memory leak.
-
-Instead, if you really do not want to use repaint(), use this:
-
-  Graphics g = getGraphics();
-  paint(g);
-  g.dispose();
-
-
-
-Graphics.setClip()
-------------------
-
-The HTML5 canvas.clip() method is permanent. You can only reset the clip using
-save/restore. This is different from Java, where you can temporarily change it using
-
-  Shape oldClip = Graphics.getClip();
-  Graphics.setClip(newClip);
-   ...
-  Graphics.setClip(oldClip); 
-
-If you need to do something like this, you must schedule the paints
-to not have overlapping clip needs.
-
-
-MAJOR ISSUES--for Bob and Udo within SwingJS
-============================================
-
-fonts
------
-
-Fonts and FontMetrics will all be handled in JavaScript. Font matching will 
-not be exact, and composite (drawn) fonts will not be supported. 
-
-SwingJS handles calls such as font.getFontMetrics(g).stringWidth("xxx") by 
-creating a <div> containing that text, placing it in an obscure location on 
-the page, and reading div.getBoundingClientRect(). This is a VERY precise
-value, but can be a pixel or two off from what Java reports for the same font.
-OS-dependent classes
---------------------
-
-Static classes such as:
-
-   java.awt.Toolkit
-   java.awt.GraphicsEnvironment
-   
-   
-which are created using Class.forName are implemented using classes in the swingjs package.
-
-AWTAccessor is not implemented. 
-
-   
-AWT component peers and component "ui" user interfaces
-------------------------------------------------------
-
-ComponentPeer is a class that represents a native AWT component.
-Components with such peers are called "heavy-weight" components.
-They are expected to do the dirty work of graphics drawing. 
-
-Java Swing implements peers only for JApplet, JDialog, JFrame, and JWindow. 
-References to such objects have been removed, but clearly there must be 
-some connection to similar DOM objects, even for "light-weight" components. 
-
-
-  
-MAJOR ISSUES--to be resolved by implementers
-============================================
-
-fonts
------
-
-Glyph/composite/outline fonts are not supported.
-   
-
-
-threads
--------
-
-Thread locking and synchronization are not relevant to JavaScript.
-Thus, anything requiring "notify.." or "waitFor.." could be a serious issue.
-All threading must be "faked" in JavaScript. Specifically not available is:
-
-  Thread.sleep()
-  
-javax.swing.AbstractButton#doClick(pressTime) will not work, as it requires Thread.sleep();
-    
-However, java.lang.Thread itself is implemented and used extensively. 
-
-Methods thread.start() and thread.run() both work fine. 
-
-For simple applications that use Thread.sleep() just to have a delay, as in a frame rate, for 
-example, one can use javax.swing.Timer instead. That is fully implemented. 
-
-Likewise, java.util.Timer can be replaced with no loss of performance with javax.Swing.Timer.
-Note that java.util.TimerTask is implemented, but it can also be replaced by an implementation of Runnable.
-
-task = new TimerTask(){....};
-t = new java.util.Timer();
-t.schedule(task, 0, 1);
-
-becomes
-
-task = new TimerTask(){....}; // or task = new Runnable() {...}
-t = new javax.swing.Timer(1, new ActionListener() {
-       @Override
-       public void actionPerformed(ActionEvent e) {
-               task.run();
-       }
-};
-t.setInitialDelay(0); // not particularly necessary
-t.start();
-
-In addition, SwingJS provides swingjs.JSThread, which can be subclassed
-if desired. This class allows simple 
-
-  while(!interrupted()){
-       wait()
-       ...
-  }  
-
-action through an asynchronous function run1(mode). For example:
-
-       protected void run1(int mode) {
-               try {
-                       while (true)
-                               switch (mode) {
-                               case INIT:
-                                       // once-through stuff here
-                                       mode = LOOP;
-                                       break;
-                               case LOOP:
-                                       if (!doDispatch || isInterrupted()) {
-                                               mode = DONE;
-                                       } else {
-                                               Runnable r = new Runnable() {
-                                                       public void run() {
-                                                               // put the loop code here
-                                                       }
-                                               };
-                                               dispatchAndReturn(r);
-                                               if (isJS)
-                                                       return;
-                                       }
-                                       break;
-                               // add more cases as needed
-                               case DONE:
-                                       // finish up here
-                                       if (isInterrupted())
-                                               return;
-                                       // or here
-                                       break;
-                               }
-               } finally {
-                       // stuff here to be executed after each loop in JS or at the end in Java
-               }
-       }
-
-image loading
--------------
-- All image loading in SwingJS is synchronous. A MediaTracker call will immediately return "complete".
-  However, it still may take one system clock tick to fully load images. Thus, it is recommended that
-  images be preloaded in the static block of the applet if it is necessary that they be available in init().
-  This is only an issue if you are trying to access the pixel buffer of the image in JavaScript. 
-  
-- Applet.getImage(path, name) will return null if the image does not exist. 
-
-- BufferedImage: only "support" imageType RGB and ARGB
-
-  -BH: This is a temporary edit, just to get us started. Certainly GRAY will be needed
-
-
-BigInteger and BigDecimal
--------------------------
-
-java.math.BigInteger is fully supported; java.math.BigDecimal is roughed 
-in and not fully tested (07/2019). 
-
-Both classes present significant issues for JavaScript, as they are based in 
-Java's 64-bit long for all their operations. Here is the JavaDoc note I added
-to BigInteger:
-
- * SwingJS note: Because of the limitations of JavaScript with regard
- * to long-integer bit storage as a double, this implementation drops
- * the integer storage bit length to 24, giving 48 for long and leaving
- * the last 16 bits clear for the exponent of the double number. This should
- * not affect performance significantly. It does increase the storage 
- * size by about 33%. By bringing an "int" to 3 bytes, we can easily construct
- * and use byte[] data intended for the original BitSet.  
-
-"Easily" may be a bit strong there. This was a serious challenge.
-
-BigDecimal seems to run normally, but in order to do that, my hack involves
-reducing the size of an integer that is allowed to be stored as such and not
-in byte[] as a BigInteger. I'm sure there is a performance hit, but it does work.
-
-no format internationalization
-------------------------------
-
-For now, just en for number and date formatters
-
-no winding rules
-----------------
-
-  When filling a graphic, only nonzero winding rule is implemented in HTML5 Canvas2D.
-
-
-
-text-related field implementation
----------------------------------
-
-Text fields are:
-
-JTextField   (JavaScript <input type="text">)
-JTextArea    (JavaScript <textarea>)
-JTextPane    (JavaScript <div>)
-JEditorPane  (JavaScript <div>)
-
-For the initial implementation, we don't implement infinite undo/redo, and the abstract 
-document model is much less elaborate. Only PlainDocument (in the form of JSPlainDocument)
-is implemented. The Document returned by JTextField.getDocument() is a javax.swing.text.Document.
-
-All scrolling is handled by HTML5. javax.swing.AutoScroller is not implemented.
-public static methods .stop, .isRunning, .processMouseDragged require true Java threading
-and so are not implmented. javax.swing.text.View and its subclasses are not implemented. 
-
-The JS document model does not allow two text fields to address the same underlying document. 
-
-JavaScript is slightly different from Java in that the field value is changed asynchronously after
-the keypressed event, so Java actions that are keyed to KEY_PRESSED may not pick up the new 
-key value even after SwingUtilities.invokeLater() is called. Thus, key pressed actions may need
-to be recorded after a key released event instead. 
-
-Formatter/Regex limitations
----------------------------
-
-Some browsers cannot process Regex "look-behind" process such as (?<=\W)
-java.util.regex.Matcher and Pattern use JavaScript's RegExp object rather than
-the native Java object. These are not identical. Only flags /igm are supported.
-Matcher.start(groupID) is not supported.
-
-java.util.Formatter will function correctly for all standard %... patterns.
-
-integer 1/0 == Infinity
------------------------
-
-1/0 in Java throws "java.lang.ArithmeticException: / by zero", but in JavaScript is just Infinity. 
-
-
-Summary
--------
-
-These are all the known limitations of SwingJS. We have not found any of these limitations
-to be show-stoppers. The primary issue for newcomers to SwingJS is having the source code.
-You must check that source code for all your library jar files is available or, if you
-choose, you will need to decompile those classes. We have used decompilation on some projects,
-and it works just fine. So, technically, all we really need are JAR/class files. But the 
-source is by far superior. It's generally prettier, and it has the license information that
-may or may not be present with the JAR or class files. Use class files at your own risk.
-
-Bob Hanson
-2019.08.16
-
-
-Additional Issues
------------------
-
-Annotation is working for classes, methods, and fields (12/22/19). Method reflection, however,
-is limited. Interfaces do not expose their methods, as the transpiler does not actually transpile
-the interfaces themselves. And method reflection only includes annotated methods.
-
-java.util.concurrent is not fully elaborated. This package is rewritten to not actually use the
-memory handling capabilities of concurrency, which JavaScript does not have access to.
-
-System.getProperties() just returns a minimal set of properties.
-
-
diff --git a/swingjs/ver/3.2.9-j11/net.sf.j2s.core-j11.jar b/swingjs/ver/3.2.9-j11/net.sf.j2s.core-j11.jar
deleted file mode 100644 (file)
index 8cae046..0000000
Binary files a/swingjs/ver/3.2.9-j11/net.sf.j2s.core-j11.jar and /dev/null differ
diff --git a/swingjs/ver/3.2.9-j11/timestamp b/swingjs/ver/3.2.9-j11/timestamp
deleted file mode 100644 (file)
index 7a0c426..0000000
+++ /dev/null
@@ -1 +0,0 @@
-20201127032339 
diff --git a/swingjs/ver/3.2.9/DEV_NOTES.txt b/swingjs/ver/3.2.9/DEV_NOTES.txt
deleted file mode 100644 (file)
index 751d81c..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-This is sources/net.sf.j2s.java.core/dist/DEV_NOTES.txt
-
-_j2sclasslist.txt 
-
-the list of .js files concatenated into coreswingjs.js and minified to coreswingjs.z.js
-
-
-SwingJS-site.zip
-
-the full site directory for SwingJS including all files not in the test/ directory.
diff --git a/swingjs/ver/3.2.9/SwingJS-site.zip b/swingjs/ver/3.2.9/SwingJS-site.zip
deleted file mode 100644 (file)
index 73853d4..0000000
Binary files a/swingjs/ver/3.2.9/SwingJS-site.zip and /dev/null differ
diff --git a/swingjs/ver/3.2.9/_j2sclasslist.txt b/swingjs/ver/3.2.9/_j2sclasslist.txt
deleted file mode 100644 (file)
index 076f300..0000000
+++ /dev/null
@@ -1,412 +0,0 @@
-java/applet/Applet.js
-java/applet/AppletContext.js
-java/applet/AppletStub.js
-java/applet/JSApplet.js
-java/awt/ActiveEvent.js
-java/awt/Adjustable.js
-java/awt/AWTEvent.js
-java/awt/AWTEventMulticaster.js
-java/awt/AWTKeyStroke.js
-java/awt/BasicStroke.js
-java/awt/BorderLayout.js
-java/awt/Button.js
-java/awt/Color.js
-java/awt/color/ColorSpace.js
-java/awt/Component.js
-java/awt/ComponentOrientation.js
-java/awt/ContainerOrderFocusTraversalPolicy.js
-java/awt/Container.js
-java/awt/Cursor.js
-java/awt/DefaultFocusTraversalPolicy.js
-java/awt/DefaultKeyboardFocusManager.js
-java/awt/Dialog.js
-java/awt/Dimension.js
-java/awt/dnd/peer/DropTargetPeer.js
-java/awt/event/ActionListener.js
-java/awt/event/AdjustmentEvent.js
-java/awt/event/AdjustmentListener.js
-java/awt/event/AWTEventListener.js
-java/awt/event/ComponentAdapter.js
-java/awt/event/ComponentEvent.js
-java/awt/event/ComponentListener.js
-java/awt/event/ContainerListener.js
-java/awt/event/FocusEvent.js
-java/awt/event/FocusListener.js
-java/awt/event/HierarchyBoundsListener.js
-java/awt/event/HierarchyListener.js
-java/awt/event/InputEvent.js
-java/awt/event/InputMethodListener.js
-java/awt/event/InvocationEvent.js
-java/awt/event/ItemEvent.js
-java/awt/event/ItemListener.js
-java/awt/event/KeyListener.js
-java/awt/event/MouseEvent.js
-java/awt/event/MouseListener.js
-java/awt/event/MouseMotionListener.js
-java/awt/event/MouseWheelListener.js
-java/awt/event/TextListener.js
-java/awt/event/WindowAdapter.js
-java/awt/event/WindowEvent.js
-java/awt/event/WindowFocusListener.js
-java/awt/event/WindowListener.js
-java/awt/event/WindowStateListener.js
-java/awt/EventDispatchThread.js
-java/awt/EventFilter.js
-java/awt/EventQueue.js
-java/awt/EventQueueItem.js
-java/awt/FlowLayout.js
-java/awt/FocusTraversalPolicy.js
-java/awt/Font.js
-java/awt/font/FontRenderContext.js
-java/awt/FontMetrics.js
-java/awt/Frame.js
-java/awt/geom/AffineTransform.js
-java/awt/geom/Dimension2D.js
-java/awt/geom/Path2D.js
-java/awt/geom/PathIterator.js
-java/awt/geom/Point2D.js
-java/awt/geom/Rectangle2D.js
-java/awt/geom/RectangularShape.js
-java/awt/geom/RectIterator.js
-java/awt/GraphicsCallback.js
-java/awt/GraphicsConfiguration.js
-java/awt/GraphicsDevice.js
-java/awt/GraphicsEnvironment.js
-java/awt/Image.js
-java/awt/image/ImageObserver.js
-java/awt/Insets.js
-java/awt/ItemSelectable.js
-java/awt/JSComponent.js
-java/awt/JSDialog.js
-java/awt/JSFrame.js
-java/awt/JSPanel.js
-java/awt/KeyboardFocusManager.js
-java/awt/KeyEventDispatcher.js
-java/awt/KeyEventPostProcessor.js
-java/awt/Label.js
-java/awt/LayoutManager.js
-java/awt/LayoutManager2.js
-java/awt/LightweightDispatcher.js
-java/awt/Paint.js
-java/awt/Panel.js
-java/awt/peer/ComponentPeer.js
-java/awt/peer/ContainerPeer.js
-java/awt/peer/FramePeer.js
-java/awt/peer/KeyboardFocusManagerPeer.js
-java/awt/peer/LightweightPeer.js
-java/awt/peer/WindowPeer.js
-java/awt/Point.js
-java/awt/Queue.js
-java/awt/Rectangle.js
-java/awt/RenderingHints.js
-java/awt/Scrollbar.js
-java/awt/ScrollPane.js
-java/awt/Shape.js
-java/awt/Stroke.js
-java/awt/TextArea.js
-java/awt/TextComponent.js
-java/awt/TextField.js
-java/awt/Toolkit.js
-java/awt/Transparency.js
-java/awt/Window.js
-java/beans/ChangeListenerMap.js
-java/beans/PropertyChangeEvent.js
-java/beans/PropertyChangeListener.js
-java/beans/PropertyChangeSupport.js
-java/lang/AbstractStringBuilder.js
-java/lang/Class.js
-java/lang/Enum.js
-java/lang/Iterable.js
-java/lang/reflect/Constructor.js
-java/lang/reflect/Method.js
-java/lang/StringBuffer.js
-java/lang/StringBuilder.js
-java/lang/Thread.js
-java/lang/ThreadGroup.js
-java/math/RoundingMode.js
-java/net/URL.js
-java/net/URLStreamHandlerFactory.js
-java/net/HttpURLConnection.js
-java/net/URLStreamHandler.js
-javax/net/ssl/HttpsUrlConnection.js
-java/text/CharacterIterator.js
-java/text/DecimalFormat.js
-java/text/DecimalFormatSymbols.js
-java/text/DigitList.js
-java/text/FieldPosition.js
-java/text/Format.js
-java/text/NumberFormat.js
-java/util/AbstractCollection.js
-java/util/AbstractList.js
-java/util/AbstractMap.js
-java/util/AbstractSequentialList.js
-java/util/AbstractSet.js
-java/util/ArrayList.js
-java/util/Arrays.js
-java/util/Collection.js
-java/util/Collections.js
-java/util/Comparator.js
-java/util/Deque.js
-java/util/Dictionary.js
-java/util/Enumeration.js
-java/util/EventListener.js
-java/util/EventObject.js
-java/util/HashMap.js
-java/util/HashSet.js
-java/util/Hashtable.js
-java/util/IdentityHashMap.js
-java/util/Iterator.js
-java/util/LinkedHashMap.js
-java/util/LinkedList.js
-java/util/List.js
-java/util/ListResourceBundle.js
-java/util/Locale.js
-java/util/Map.js
-java/util/Objects.js
-java/util/Queue.js
-java/util/Random.js
-java/util/RandomAccess.js
-java/util/ResourceBundle.js
-java/util/Set.js
-java/util/TimSort.js
-java/util/Vector.js
-javajs/api/JSFunction.js
-javajs/util/AjaxURLConnection.js
-javajs/util/AjaxURLStreamHandlerFactory.js
-javajs/util/AU.js
-javajs/util/JSThread.js
-javajs/util/Lst.js
-javajs/util/PT.js
-javajs/util/Rdr.js
-javajs/util/SB.js
-javax/swing/AbstractAction.js
-javax/swing/AbstractButton.js
-javax/swing/AbstractListModel.js
-javax/swing/Action.js
-javax/swing/ActionMap.js
-javax/swing/AncestorNotifier.js
-javax/swing/ArrayTable.js
-javax/swing/border/AbstractBorder.js
-javax/swing/border/BevelBorder.js
-javax/swing/border/Border.js
-javax/swing/border/CompoundBorder.js
-javax/swing/border/EmptyBorder.js
-javax/swing/border/EtchedBorder.js
-javax/swing/border/LineBorder.js
-javax/swing/border/TitledBorder.js
-javax/swing/BorderFactory.js
-javax/swing/BoundedRangeModel.js
-javax/swing/BoxLayout.js
-javax/swing/ButtonGroup.js
-javax/swing/ButtonModel.js
-javax/swing/ClientPropertyKey.js
-javax/swing/ComboBoxModel.js
-javax/swing/DefaultBoundedRangeModel.js
-javax/swing/DefaultButtonModel.js
-javax/swing/DefaultComboBoxModel.js
-javax/swing/DefaultSingleSelectionModel.js
-javax/swing/DropMode.js
-javax/swing/event/AncestorEvent.js
-javax/swing/event/AncestorListener.js
-javax/swing/event/CaretEvent.js
-javax/swing/event/CaretListener.js
-javax/swing/event/ChangeEvent.js
-javax/swing/event/ChangeListener.js
-javax/swing/event/DocumentEvent.js
-javax/swing/event/DocumentListener.js
-javax/swing/event/EventListenerList.js
-javax/swing/event/ListDataEvent.js
-javax/swing/event/ListDataListener.js
-javax/swing/event/UndoableEditEvent.js
-javax/swing/event/UndoableEditListener.js
-javax/swing/FocusManager.js
-javax/swing/InternalFrameFocusTraversalPolicy.js
-javax/swing/LayoutComparator.js
-javax/swing/LayoutFocusTraversalPolicy.js
-javax/swing/SortingFocusTraversalPolicy.js
-javax/swing/SwingContainerOrderFocusTraversalPolicy.js
-javax/swing/SwingDefaultFocusTraversalPolicy.js
-javax/swing/Icon.js
-javax/swing/ImageIcon.js
-javax/swing/InputMap.js
-javax/swing/JApplet.js
-javax/swing/JButton.js
-javax/swing/JCheckBox.js
-javax/swing/JCheckBoxMenuItem.js
-javax/swing/JComboBox.js
-javax/swing/JComponent.js
-javax/swing/JFrame.js
-javax/swing/JLabel.js
-javax/swing/JLayeredPane.js
-javax/swing/JMenu.js
-javax/swing/JMenuBar.js
-javax/swing/JMenuItem.js
-javax/swing/JPanel.js
-javax/swing/JPopupMenu.js
-javax/swing/JRadioButtonMenuItem.js
-javax/swing/JRootPane.js
-javax/swing/JScrollBar.js
-javax/swing/JScrollPane.js
-javax/swing/JSeparator.js
-javax/swing/JTextArea.js
-javax/swing/JTextField.js
-javax/swing/JToggleButton.js
-javax/swing/JViewport.js
-javax/swing/KeyboardManager.js
-javax/swing/KeyStroke.js
-javax/swing/ListModel.js
-javax/swing/LookAndFeel.js
-javax/swing/MenuElement.js
-javax/swing/MutableComboBoxModel.js
-javax/swing/plaf/ActionMapUIResource.js
-javax/swing/plaf/basic/BasicBorders.js
-javax/swing/plaf/BorderUIResource.js
-javax/swing/plaf/ColorUIResource.js
-javax/swing/plaf/ComponentUI.js
-javax/swing/plaf/DimensionUIResource.js
-javax/swing/plaf/FontUIResource.js
-javax/swing/plaf/InputMapUIResource.js
-javax/swing/plaf/InsetsUIResource.js
-javax/swing/plaf/UIResource.js
-javax/swing/RepaintManager.js
-javax/swing/RootPaneContainer.js
-javax/swing/Scrollable.js
-javax/swing/ScrollPaneConstants.js
-javax/swing/ScrollPaneLayout.js
-javax/swing/SingleSelectionModel.js
-javax/swing/SizeRequirements.js
-javax/swing/SwingConstants.js
-javax/swing/SwingPaintEventDispatcher.js
-javax/swing/SwingUtilities.js
-javax/swing/text/AbstractDocument.js
-javax/swing/text/AttributeSet.js
-javax/swing/text/Caret.js
-javax/swing/text/DefaultCaret.js
-javax/swing/text/DefaultEditorKit.js
-javax/swing/text/Document.js
-javax/swing/text/EditorKit.js
-javax/swing/text/Element.js
-javax/swing/text/GapContent.js
-javax/swing/text/GapVector.js
-javax/swing/text/JTextComponent.js
-javax/swing/text/MutableAttributeSet.js
-javax/swing/text/PlainDocument.js
-javax/swing/text/PlainView.js
-javax/swing/text/Position.js
-javax/swing/text/Segment.js
-javax/swing/text/SegmentCache.js
-javax/swing/text/SimpleAttributeSet.js
-javax/swing/text/Style.js
-javax/swing/text/StyleConstants.js
-javax/swing/text/StyleContext.js
-javax/swing/text/TabExpander.js
-javax/swing/text/TextAction.js
-javax/swing/text/Utilities.js
-javax/swing/text/View.js
-javax/swing/tree/TreeNode.js
-javax/swing/UIDefaults.js
-javax/swing/UIManager.js
-javax/swing/undo/AbstractUndoableEdit.js
-javax/swing/undo/CompoundEdit.js
-javax/swing/undo/UndoableEdit.js
-javax/swing/ViewportLayout.js
-javax/swing/WindowConstants.js
-sun/awt/AppContext.js
-sun/awt/AWTAutoShutdown.js
-sun/awt/CausedFocusEvent.js
-sun/awt/ComponentFactory.js
-sun/awt/KeyboardFocusManagerPeerProvider.js
-sun/awt/MostRecentKeyValue.js
-sun/awt/MostRecentThreadAppContext.js
-sun/awt/PaintEventDispatcher.js
-sun/awt/PostEventQueue.js
-sun/awt/RequestFocusController.js
-sun/awt/SunToolkit.js
-sun/awt/WindowClosingListener.js
-sun/awt/WindowClosingSupport.js
-sun/awt/image/DataStealer.js
-sun/awt/image/IntegerComponentRaster.js
-sun/awt/image/IntegerInterleavedRaster.js
-sun/awt/image/SunWritableRaster.js
-sun/font/FontDesignMetrics.js
-sun/swing/DefaultLookup.js
-sun/swing/SwingLazyValue.js
-sun/text/resources/FormatData.js
-sun/text/resources/en/FormatData_en.js
-sun/util/resources/LocaleData.js
-sun/util/locale/BaseLocale.js
-sun/util/locale/LocaleUtils.js
-sun/util/locale/provider/LocaleProviderAdapter.js
-sun/util/locale/provider/LocaleDataMetaInfo.js
-swingjs/a2s/A2SContainer.js
-swingjs/a2s/A2SEvent.js
-swingjs/a2s/A2SListener.js
-swingjs/a2s/Applet.js
-swingjs/a2s/Button.js
-swingjs/a2s/Label.js
-swingjs/a2s/Panel.js
-swingjs/a2s/Scrollbar.js
-swingjs/a2s/ScrollPane.js
-swingjs/a2s/TextArea.js
-swingjs/a2s/TextField.js
-swingjs/api/Interface.js
-swingjs/api/js/DOMNode.js
-swingjs/api/js/HTML5CanvasContext2D.js
-swingjs/api/js/JSInterface.js
-swingjs/jquery/JQueryUI.js
-swingjs/JSApp.js
-swingjs/JSAppletThread.js
-swingjs/JSAppletViewer.js
-swingjs/JSFocusPeer.js
-swingjs/JSFontMetrics.js
-swingjs/JSFrameViewer.js
-swingjs/JSGraphics2D.js
-swingjs/JSGraphicsConfiguration.js
-swingjs/JSGraphicsEnvironment.js
-swingjs/JSImage.js
-swingjs/JSImagekit.js
-swingjs/JSMouse.js
-swingjs/JSNullComponentPeer.js
-swingjs/JSScreenDevice.js
-swingjs/JSThreadGroup.js
-swingjs/JSToolkit.js
-swingjs/JSUtil.js
-swingjs/plaf/ButtonListener.js
-swingjs/plaf/DefaultMenuLayout.js
-swingjs/plaf/HTML5LookAndFeel.js
-swingjs/plaf/JSAppletUI.js
-swingjs/plaf/JSButtonUI.js
-swingjs/plaf/JSCheckBoxMenuItemUI.js
-swingjs/plaf/JSCheckBoxUI.js
-swingjs/plaf/JSComboBoxUI.js
-swingjs/plaf/JSComponentUI.js
-swingjs/plaf/JSEventHandler.js
-swingjs/plaf/JSFrameUI.js
-swingjs/plaf/JSGraphicsUtils.js
-swingjs/plaf/JSLabelUI.js
-swingjs/plaf/JSLayeredPaneUI.js
-swingjs/plaf/JSLightweightUI.js
-swingjs/plaf/JSMenuBarUI.js
-swingjs/plaf/JSMenuItemUI.js
-swingjs/plaf/JSMenuUI.js
-swingjs/plaf/JSPanelUI.js
-swingjs/plaf/JSPopupMenuSeparatorUI.js
-swingjs/plaf/JSPopupMenuUI.js
-swingjs/plaf/JSRadioButtonMenuItemUI.js
-swingjs/plaf/JSRadioButtonUI.js
-swingjs/plaf/JSRootPaneUI.js
-swingjs/plaf/JSScrollBarUI.js
-swingjs/plaf/JSScrollPaneUI.js
-swingjs/plaf/JSSeparatorUI.js
-swingjs/plaf/JSSliderUI.js
-swingjs/plaf/JSTextAreaUI.js
-swingjs/plaf/JSTextFieldUI.js
-swingjs/plaf/JSTextUI.js
-swingjs/plaf/JSTextViewUI.js
-swingjs/plaf/JSViewportUI.js
-swingjs/plaf/JSWindowUI.js
-swingjs/plaf/LazyActionMap.js
-swingjs/plaf/Resizer.js
-swingjs/plaf/TextListener.js
-
-
diff --git a/swingjs/ver/3.2.9/differences.txt b/swingjs/ver/3.2.9/differences.txt
deleted file mode 100644 (file)
index 60f5fcc..0000000
+++ /dev/null
@@ -1,1541 +0,0 @@
-Notes
-=====
-
----IMPORTANT CHARACTER SET NOTE---
-
-It is critical that all development work in Java2Script 
-be done in UTF-8. This means:
-
-- making sure your Eclipse project is set up for UTF-8 (not the Eclipse default?)
-- making sure your server can serve up UTF-8 by default for any browser-loaded files
-- making sure you don't edit a Java2Script class file or one of the site .js files
-    using a non-UTF-8 editor. It may replace non-Latin characters with "?" or garbage.
-- making sure that your web pages are delivered with proper headings indicating HTML5 and UTF-8
-
-<!DOCTYPE html>
-<html>
-<head>
-<meta charset="utf-8">
-
-Note that the DOCTYPE tag is critical for some browsers to switch into HTML5 mode. (MSIE?)
-
-
-
-  
-In particular, the Mandarin character ç§˜ (mi; "secret") is used extensively throughout
-the SwingJS class files to distinguish j2s-specific fields and methods that must not 
-ever be shadowed or overridden by subclasses. For example, we see in java.lang.Thread.java:
-
-               public static JSThread ç§˜thisThread;
-
-----------------------------------
-
-
-updated 12/6/2020 -- note about restrictions on long, including BitSet and Scanner
-updated 3/21/2020 -- adds note about HashMap, Hashtable, and HashSet iterator ordering
-updated 3/20/2020 -- adds note about interning, new String("xxx"), and "xxx"
-updated 2/26/2020 -- adds Graphics.setClip issue
-updated 12/22/19 -- additional issues
-updated 11/03/19 -- adds information about File.exists() and points to src/javajs/async
-updated 10/26/19 -- adds information about File.createTempFile()
-updated 8/16/19 -- minor typos and added summary paragraph
-updated 7/19/19 -- clarification that AWT and Swing classes are supported directly
-updated 5/13/19 -- Mandarin U+79D8 reserved character; Missing Math methods; int and long
-updated 5/10/19 -- adds a section on static issues in multi-(duplicate)-applet pages
-updated 1/4/19 -- nio
-updated 9/15/18 -- adds integer 1/0 == Infinity
-updated 7/24/18 -- most classes replaced with https://github.com/frohoff/jdk8u-jdk
-updated 6/5/17 -- reserved package name "window"
-updated 3/11/17 -- myClass.getField
-updated 3/7/17 -- overloading of JSplitPane.setDividerLocation
-updated 3/2/17 -- more indication of classes not implemented (KeyListener)
-
-=============================================================================
-SwingJS and OpenJDK 8+
-=============================================================================
-
-SwingJS implements a wide range of the Java language in JavaScript. The base
-version for this implementation is OpenJDK8. some classes are implemented using 
-older source code, and there are some missing methods. For the most part, this is 
-no real problem. You can add or modify any java class just be adding it as source
-in your project. Or (preferably) you can contact me, and I can get it into the 
-distribution. Or (even more preferably) you can do that via a patch submission. 
-
-=================
-DESIGN PHILOSOPHY
-=================
-
-The java2script/SwingJS design goal is to recreate a recognizable, easily debuggable
-equivalent in JavaScript for as much of Java as practical. This means, for example, 
-that one can call in JavaScript 
-
-  new java.util.Hashtable()
-  
-and for all practical purposes it will appear that Java is running.
-
-
-Method and Field Disambiguation
--------------------------------
-
-SwingJS has no problem with the overloading of methods, for example:
-
-  public void print(int b);
-  public void print(float b);
-
-JavaScript does not allow overloading of methods, and the common practice in
-Java of naming a field the same as a method -- isAllowed and isAllowed() -- is
-not possible in JavaScript. As a result, SwingJS implements "fully-qualified" 
-method names using "$" parameter type separation. Thus, these methods in SwingJS
-will be referred to as print$I and print$F. The rules for this encoding are
-relatively simple: 
-
-1. The seven primitive types in Java are encoded $I (int), $L (long), $F (float), 
-$D (double), $B (byte) $Z (boolean), and $H (short). 
-
-2. String and Object are encoded as $S and $O, respectively.
-
-3. "java_lang_" is dropped for all other classes in the java.lang package (as in Java).
-   For example:  $StringBuffer, not $java_lang_StringBuffer
-
-4. All other classes are encoded as 
-
- "$" + Class.getName().replace(".","_")
-
-For example, in Java we see:
-
-  public void equals(Object o) {...}
-
-Whereas in SwingJS we have:
-
-  Clazz.newMeth(C$, 'equals$O', function (o) {...}
-
-And 
-
- this.getContentPane().add(bar, "North");
-
-becomes
-
- this.getContentPane$().add$java_awt_Component$O(bar, "North");
-
-5. Arrays are indicated with appended "A" for each level. So
-
-  setDataVector(Object[][] dataVector, Object[] columnIdentifiers)
-  
-becomes
-
-  setDataVector$OAA$OA(dataVector, columnIdentifiers)
-
-(It is recognized that this design does introduce a bit of ambiguity, in that
- in principal there could be user class named XA and X in the same package,
- and methods a(X[]) and a(XA) in the same class that cannot be distinguished.
- The benefit of this simple system, however, triumphed over the unlikelyhood
- of that scenario.) The transpiler could be set to flag this possibility.
-
-6. Constructors are prepended with "c$". So 
-
-  public JLabel(String text) {...}
-  
-becomes:
-
-  Clazz.newMeth(C$, 'c$$S', function (text) {...});
-
-Field disambiguation involves prepending. In Java, a class and its subclass 
-can both have the same field name, such as 
-
- boolean visible;
-When this happens, it is called "shadowing", and though not recommended, Java allows
-it. The Java2Script transpiler will prepend such shadowing fields with "$" so that the
-subclass instance has both "visible" (for use in its methods inherited from its
-superclass) and "$visible" (for its own methods). Thus, we might see in Java:
-
-  this.visible = super.visible;
-  
-while in SwingJS we will see:
-
-  this.$visible=this.visible;
-
-since JavaScript does not have the "super" keyword.
-
-
-
-Parameterless methods such as toString() are appended with "$" to become toString$().
-The one exception to this rule is private methods, which are saved in (truly) private 
-array in the class (and are not accessible by reflection). Private parameterless 
-methods retain their simple Java name, since they cannot conflict with field names.
-
-This renaming of methods has a few consequences, which are discussed more fully below.
-See particularly the section on "qualified field and method names", where it is described
-how you can use packages or classes or interfaces with ".api.js" in them to represent JavaScript
-objects for which all method names are to be left unqualified. Note that it is not 
-possible to cherry-pick methods to be unqualified; only full packages, classes or 
-interfaces can hold this status.
-
-The swingjs.api.js package in particular contains a number of useful interfaces that
-you can import into your project for JavaScript-specific capabilities.
-
-
-Applet vs. Application
-----------------------
-
-One of the very cool aspects of SwingJS is that it doesn't particularly matter if a browser-based
-Java app is an "applet" or an "application". We don't need JNLP (Java Network Launch Protocol) 
-because now we can just start up any Java application in a browser just as easily as any applet.
-The associative array that passes information to the SwingJS applet (information that formerly
-might have been part of the APPLET tag, such as width, height, and codebase, always referred to 
-in our writing as "the Info array") allows the option to specify the JApplet/Applet "code" 
-class or the application "main" class. Either one will run just fine.
-
-
-Performance
------------
-
-Obviously, there are limitations. One is performance, but we have seen reproducible 
-performance at 1/6 - 1/3 the speed of Java. Achieving this performance may require
-some refactoring of the Java to make it more efficient in both Java and JavaScript. 
-"for" loops need to be more carefully crafted; use of "new" and "instanceof" need to be
-minimized in critical areas. Note that method overloading -- that is, the same method name
-with different parameters, such as read(int) and read(byte) -- is no longer any problem. 
-  
-
-Threads
--------
-
-Although there is only a single thread in JavaScript, meaning Thread.wait(), Thread.sleep(int) and 
-Thread.notify() cannot be reproduced, we have found that this is not a serious limitation. 
-For example, javax.swing.Timer() works perfectly in JavaScript. All it means is that threads 
-that use sleep(int) or notify() must be refactored to allow Timer-like callbacks. That is, 
-they must allow full exit and re-entry of Thread.run(), not the typical while/sleep motif. 
-
-The key is to create a state-based run() that can be exited and re-entered in JavaScript.
-
-
-Static fields
--------------
-
-Final static primitive "constant" fields (String, boolean, int, etc.) such as 
-
-static final int TEST = 3;
-static final String MY_STRING = "my " + "string";
-
-are converted to their primitive form automatically by the Eclipse Java compiler 
-and do not appear in the JavaScript by their names. 
-
-Other static fields are properties of their class and can be used as expected.
-
-Note, however, that SwingJS runs all "Java" code on a page in a common "jvm" 
-(like older versions of Java). So, like the older Java schema, the JavaScript 
-equivalents of both applets and applications will share all of their static 
-fields and methods. This includes java.lang.System. 
-
-Basically, SwingJS implementations of Java run in a browser page-based sandbox 
-instead of an applet-specific one.
-
-In general, this is no problem. But if we are to implement pages with 
-multiple applets present, we must be sure to only have static references 
-that are "final" or specifically meant to be shared in a JavaScript 
-environment only (since they will not be shared in Java).
-
-A simple solution, if static non-constant references are needed, is to attach the 
-field to Thread.currentThread.threadGroup(), which is an applet-specific reference.
-Be sure, if you do this, that you use explicit setters and getters:
-
-For example, 
-
-private static String myvar;
-
-...
-
-public void setMyVar(String x) {
-  ThreadGroup g = Thread.currentThread().threadGroup();
-  /**
-   * @j2sNative g._myvar = x;
-   * 
-   */
-   {
-     myvar = x;
-   }
-}
-
-public String getMyVar() {
-  ThreadGroup g = Thread.currentThread().threadGroup();
-  /**
-   * @j2sNative return g._myvar || null;
-   * 
-   */
-   {
-     return myvar;
-   }
-}
- in Java will get and set x the same in JavaScript and in Java. 
-A convenient way to do this in general is to supply a singleton class with
-explicitly private-only constructors and then refer to it in Java and in JavaScript
-instead of using static field, referring to myclass.getIntance().xxx instead of 
-myclass.xxx in Java (and JavaScript). 
-
-This was done extensively in the Jalview project. See jalview.bin.Instance.
-
-
-Helper Packages -- swingjs/ and javajs/
----------------------------------------
-
-The SwingJS library is the swingjs/ package. There are interfaces that may be of assistance
-in swingjs/api, but other than that, it is not recommended that developers access classes in 
-this package. The "public" nature of their methods is really an internal necessity.
-
-In addition to swingjs/, though, there are several useful classes in the javajs/ package
-that could be very useful. This package is a stand-alone package that can be 
-cloned in any Java project that also would be great to have in any JavaScript project
--- SwingJS-related or not. Functionality ranges from reading and writing various file 
-formats, including PDF, BMP, PNG, GIF, JPG, JSON, ZIP, and CompoundDocument formats.
-
-A variety of highly efficient three- and four-dimensional point, vector, matrix, and 
-quaternion classes are included, as they were developed for JSmol and inherited from that
-project. 
-
-Of particular interest should be javajs/async/, which includes
-
-javajs.async.Async
-javajs.async.AsyncColorChooser
-javajs.async.AsyncDialog
-javajs.async.AsyncFileChooser
-
-See javajs.async.Async JavaDoc comments for a full description of 
-these useful classes.
-
-
-Modal Dialogs
--------------
-
-Although true modal dialogs are not possible with only one thread, a functional equivalent -- 
-asynchronous modal dialogs -- is relatively easy to set up. All the JOptionPane dialogs will
-return PropertyChangeEvents to signal that they have been disposed of and containing the results. 
-See below and classes in the javajs.async package.
-
-
-Native calls
-------------
-
-Native calls in Java are calls to operating system methods that are not in Java. JavaScript
-has no access to these, of course, and they must all be replaced by JavaScript equivalents.
-Fortunately, they are not common, and those that are present in Java (for example, in calculating
-checksums in ZIP file creation) are at a low enough level that most developers do not utilize them
-or do not even have access to them. All native calls in Java classes have been replaced by 
-Java equivalents.
-
-
-Swing GUI Peers and UIClasses
------------------------------
-
-One of the biggest adaptations introduced in SwingJS is in the area of the graphical 
-user interface. The issue here is complex but workable. In Java there are two background 
-concepts -- the Component "peer" (one per "heavy-weight" component, such as a Frame) and the 
-component "uiClass" (one per component, such as JButton or JTextField).
-
-Peers are native objects of the operating system. These are the virtual buttons and text areas
-that the user is interacting with at a very base level. Their events are being passed on to 
-Java or the browser by the operating system. UI classes provide a consistent "look and feel" 
-for these native objects, rendering them onto the native window canvas and handling all 
-user-generated events. They paint the borders, the backgrounds, the highlights, of every 
-control you see in Java. There is one-to-one correspondence of Swing classes and UI classes. 
-Setting the Look and Feel for a project amounts to selecting the directory from which to draw 
-these UI classes. The UI classes can be found in the javax.swing.plaf ("platform look and feel") 
-package.
-
-Early on in the development of SwingJS, we decided not to fully reproduce the painfully detailed 
-bit-by-bit painting of controls as is done in Java. Instead, we felt it was wiser to utilize the standard
-HTML5 UI capabilities as much as possible, using DIV, and INPUT especially, with extensive use
-of CSS and sometimes jQuery (menus, and sliders, for example). Thus, we have created a new 
-set of UIs -- the "HTML5 Look and Feel". These classes can be found in swingjs.plaf. Besides being
-more adaptable, this approach allows far more versatility to SwingJS developers, allowing them
-to modify the GUI to suit their needs if desired.
-
-In SwingJS, since we have no access to native peers except through the browser DOM,
-it seemed logical to merge the peer and UI idea. So instead of having one peer per heavy-weight control and
-one UI class instance for each control type, we just have one UI class instance per control, and
-that UI class instance is what is being referred to when a "peer" is notified. 
-
-In some ways this is a throw back to when all of Swing's components were subclasses of
-specific AWT components such as Button and List. These "heavy-weight components" all had their 
-own individual native peers and thus automatically took on the look and feel provided by the OS. 
-Later Swing versions implemented full look and feel for all peers, leaving only JDialog, JFrame,
-and a few other classes to have native peers. But in SwingJS we have again a 1:1 map of component
-and UI class/peer instance.
-
-The origin of most issues (read "bugs") in relation to the GUI will probably be found in the
-swingjs.plaf JSxxxxUI.java code.
-
-  
-Swing-only Components -- no longer an issue
--------------------------------------------
-
-Swing was introduced into Java well after the Java Abstract Window Toolkit (AWT) was well
-established. As such, its designers chose to allow AWT controls such as Button and List to be used 
-alongside their Swing counterparts JButton and JList. Reading the code, it is clear that this 
-design choice posed a huge headache for Swing class developers. 
-
-For SwingJS, we decided from the beginning NOT to allow this mixed-mode programming and 
-instead to require that all components be Swing components. 
-
-However, this is no longer an issue. All AWT components in SwingJS are now subclasses of 
-javax.swing.JComponent. So far, we have found no problem with this.
-
-The a2s Adapter Package
------------------------
-
-Originally, we thought that we would restrict ourselves to JApplets only. That is, only
-Swing-based applets. But as we worked, we discovered that there are a lot of great 
-applets out there that are pre-Swing pure-AWT java.applet.Applet applets. Our problem was 
-that we also wanted it to be possible to quickly adapt these applets to JavaScript as well.
-The solution turned out to be simple: Write a package (a2s) that recreates the interface for 
-non-Swing components as subclasses of Swing components. Thus, a2s.Button subclasses javax.swing.JButton
-but also accepts all of the methods of java.awt.Button. This works amazingly well, with a few
-special adaptations to the core javax.swing to be "AWT-aware." All AWT components now subclass 
-a2s components, which in turn subclass JComponents. So no changes in code are necessary. We have
-successfully transpiled over 500 applets using this strategy. (Kind of surprising, actually, that
-the original Java developers did not see that option. But we have a hindsight advantage here.)
-
-
-Working with Files
-==================
-
-Simple String file names are not optimal for passing information about
-read files within SwingJS applications. 
-All work with files should either use Path or File objects exclusively. 
-These objects, after a file is read or checked for existence, will already 
-contain the file byte[] data. Doing something like this:
-
-File f = File("./test.dat");
-boolean isOK = f.exists();
-
-will load f with its byte[] data, if the file exists. 
-
-But if after that, we use:
-
-File f2 = new File(f.getAbsolutePath());
-
-f2 will not contain that data. Such copying should be done as:
-
-File f2 = new File(f);
-
-in which case, the byte[] data will be transferred.
-
-
-SwingJS uses the following criteria to determine if File.exists() returns true:
-
-(1) if this File object has been used directly to read data, or 
-(2) if reading data using this File object is successful.
-
-Note that you cannot check to see if a file exists before input or if it 
-was actually written or if it already exists prior to writing in SwingJS.  
-
-Thus, you should check each use of file.exists() carefully, and if necessary, provide a J2sNative 
-block that gives an appropriate "OK" message, for example:
-
-(/** @j2sNative 1 ? false : */ outputfile.exits())
-
-or 
-
-(/** @j2sNative 1 ? true : */ inputfile.exits())
-
-Temporary files can be created in SwingJS. SwingJS will maintain a pseudo-filesystem for files 
-created with File.createTempFile(). This is useful in that closure of writing to a temporary file 
-does not generate a pseudo-download to the user's machine.
-
-
-UNIMPLEMENTED CLASSES BY DESIGN
-===============================
-
-The SwingJS implementation of the following classes are present 
-in a way that gracefully bypasses their functionality:
-
-accessibility
-security
-serialization
-
-
-
-TODO LIST FOR UNIMPLEMENTED CLASSES
-===================================
-
-JEditorPane (minimal implementation) - DONE 12/2018; some issues still
-JSplitPane - DONE 8/2018
-JTabbedPane - DONE 10/2018
-JTree - done 12/2019
-
-
-MINOR ISSUES--required some rewriting/refactoring by Bob and Udo  
-================================================================
-
-Thread.currentThread() == dispatchThread
-
-
-MINOR ISSUES--requiring some rewriting/refactoring outside of SwingJS  
-=====================================================================
-
-See below for a full discussion.
-
-Restrictions on long
-Restriction on BitSet and Scanner
-HashMap, Hashtable, and HashSet iterator ordering
-interning, new String("xxx") vs "xxx"
-Names with "$" and "_"
-positive integers do not add to give negative numbers
-ArrayIndexOutOfBounds
-java.awt.Color
-native methods
-javax.swing.JFileDialog
-key focus
-LookAndFeel and UI Classes
-System.exit(0) does not stop all processes
-list cell renderers must be JComponents
-myClass.getField not implemented
-"window" and other reserved JavaScript names
-reserved field and method names
-qualified field and method names
-missing Math methods
-Component.getGraphics(), Graphics.dispose()
-Graphics.setClip()
-
-MAJOR ISSUES--for Bob and Udo within SwingJS
-============================================
-
-fonts
-OS-dependent classes
-AWT component peers
-some aspects of reflection
-
-MAJOR ISSUES--to be resolved by implementers
-============================================
-
-fonts
-threads
-modal dialogs
-image loading
-BigDecimal not fully implemented 
-no format internationalization
-no winding rules
-text-related field implementation
-Formatter/Regex limitations
-integer 1/0 == Infinity
-
-======================================================================== 
-
-DISCUSS
-=======
-
-Table row/col sorter needs checking after removal of java.text.Collator references
-
-I had to move all of SunHints class to RenderingHints, or the 
-two classes could not be loaded. Shouldn't be a problem, I think. The sun classes are
-not accessible to developers in Java anyway, since they are generally package private.
-
-========================================================================== 
-
-//////////////////////////////////////////////////////////////////////////////
-
-UNIMPLEMENTED CLASSES
-=====================
-
-accessibility
--------------
-
-All Accessibility handling has been commented out to save the download footprint.
-This removes the need for sun.misc.SharedSecrets as well. 
-Nothing says we could not implement accessibility. We just didn't.
-
-
-security
---------
-
-All JavaScript security is handled by the browser natively. 
-Thus, Java security checking is no longer necessary, and 
-java.security.AccessController has been simplified to work without
-native security checking.
-
-Note that private methods in a class are REALLY private. 
-
-
-serialization
--------------
-
-All serialization has been removed. It was never very useful for Swing anyway, 
-because one needs exactly the same Java version to save and restore serialized objects.
-
-
-keyboard accelerators and mnemonics
------------------------------------
-
-This work was completed in the spring of 2019. Note that in a browser, some 
-key strokes, particularly CTRL-keys, are not available. Bummer.
-
-
-MINOR ISSUES--required some rewriting/refactoring by Bob and Udo  
-================================================================
-
-
-Thread.currentThread() == dispatchThread
-----------------------------------------
-
-changed to JSToolkit.isDispatchThread()
-
-
-MINOR ISSUES--requiring some rewriting/refactoring outside of SwingJS  
-=====================================================================
-
-restrictions on long
---------------------
-
-Java's 64-bit long type is not supported in JavaScript. There is no Int64Array in JavaScript,
-and 0x20000000000000 + 1 evaluates to 0x20000000000000, not 0x20000000000001. 
-(Likewise, -0x20000000000000 - 1 is left unchanged.) 
-
-The largest "integer" value in JavaScript is 9007199254740991 (9.007199254740991E13, or 0x1FFFFFFFFFFFFFF).
-Effectively, you get to use only 53 bits of the long, not 64. Trying to set a long larger than
-0x1FFFFFFFFFFFFFF or smaller than -0x1FFFFFFFFFFFFFF will result in a NumberFormatException.
-
-The transpiler handles conversion to long the same as Java for all cases other than from double. 
-
-For small double values, there is no problem, and, in fact, this is a known trick used to round 
-doubles and floats toward zero:
-
-double d;
-d = (long) 3.8;
-assert(d == 3);
-d = (long) -3.8;
-assert(d == -3);
-
-SwingJS will evaluate (long) d as 0 for d > 9007199254740991 
-or d < -9007199254740991, same as Java returns for Double.NaN.
-So, in Java we have:
-
-               assert(((long) Double.NaN) == 0);
-               assert(((int) Double.NaN) == 0);
-               assert(((long) Float.NaN) == 0);
-               assert(((int) Float.NaN) == 0);
-
-and also, in JavaScript only, we also have:
-
-               double d = 0x2000000000000L;
-               assert(((long) d) == 0);
-
-
-restrictions on BitSet and Scanner
-----------------------------------
-
-Because of the issue of long being only 53 bits, any time a method returns a long value, considerations must
-be made as to whether this will work in JavaScript. In particular, BitSet and Scanner have issues. 
-
-In SwingJS, java.util.BitSet has been implemented as a 32-bit integer-based bitset. This was no problem in
-Java 6, but starting with Java 7, a method was added to BitSet that allows for the extraction of the 
-underlying long[] word data. This is not work in JavaScript. Instead, SwingJS java.util.Bitset.toLongArray() will deliver 
-32-bit int[] data.
-
-SwingJS Scanner has hasNextLong() and nextLong(), and although it will scan through long numbers,
-Scanner will choke on long numbers greater than the JavaScript 53-bit limit. hasNextLong() will 
-return false, and nextLong() will throw an InputMismatchException triggered by the NumberFormatException
-thrown by Long.parseLong(). 
-
-
-HashMap, Hashtable, and HashSet iterator ordering
--------------------------------------------------
-
-In Java, iterators for HashMap, Hashtable, and HashSet do not guarantee any particular order. 
-From the HashMap documentation for Java 8:
-
-       This class makes no guarantees as to the order of the map; in particular, it does not 
-       guarantee that the order will remain constant over time.
-Likewise, for HashSet (because it is simply a convenience method for HashMap<Object,PRESENT>:
-
-       [HashSet] makes no guarantees as to the iteration order of the set.
-
-JavaScript's Map object is different. It is basically a LinkedHashMap, so it guarantees iteration
-in order of object addition.
-
-Starting with java2script 3.2.9.v1, these classes use the JavaScript Map object rather than hash codes
-whenever all keys are strictly of JavaScript typeof "string". If any key is introduced that is not a string, the
-implementation falls back to using hash codes, the same as Java. 
-
-Note strings created using new String("xxxx") are NOT typeof "string"; they are typeof "object".
-
-The result is significantly faster performance (3-12 x faster) than originally, and up to 3 x faster
-performance in JavaScript than in Java itself. Right. Faster than Java. 
-
-The JavaScript Map implementation is implemented UNLESS the constructor used is the one that
-specifies both initial capacity and load factor in their constructor. Thus, 
-
-new Hashtable()
-new HashMap()
-new HashMap(16)
-new HashSet()
-
-all use the JavaScript Map. But
-
-new Hashtable(11, 0.75f)
-new HashMap(16, 0.75f)
-new HashSet(16, 0.75f)
-
-do not. 
-
-This design allows for opting out of the JavaScript Map use in order to retain the exact behavior of 
-iterators in JavaScript as in Java.
-
-
-interning, new String("xxx") vs "xxx"
--------------------------------------
-
-Note that the following are true in JavaScript:
-
-typeof new String("xxxx") == "object"
-typeof "xxxx" == "string"
-var s = "x";typeof ("xxx" + s) == "string"
-
-There is no equivalence to this behavior in Java, where a String is a String is a String.
-
-Be aware that SwingJS does not always create a JavaScript String object using JavaScript's 
-new String(...) constructor. It only does this for Java new String("xxxx") or new String(new String()). 
-
-In all other cases, new String(...) (in Java) results in a simple "xxxx" string in JavaScript. 
-That is, it will be JavaScript typeof "string", not typeof "object". 
-
-The reason for this design is that several classes in the Java core use toString() 
-methods that return new String(), and those classes that do that would cause a JavaScript error
-if implicitly stringified if new String() returned a JavaScript String object. 
-
-This is fine in JavaScript
-
-test1 = function() { return { toString:function(){ return "OK" } } }
-"testing" + new test1()
->> "testingOK"
-
-But for whatever reason in JavaScript:
-
-test2 = function() { return { toString:function(){ return new String("OK") } } }
-"testing" + new test2()
->> Uncaught TypeError: Cannot convert object to primitive value
-
-The lesson here is never to use 
-
-  return new String("...");
-
-in a Java toString() method. In Java it will be fine; in JavaScript it will also be fine as long as
-that method is never called in JavaScript implicitly in the context of string concatenation.
-
-A note about interning. Consider the following six Java constructions, where we have a == "x";
-
-"xxx"
-"xx" + "x"
-new String("xxx").intern()
-
-new String("xxx")
-"xx" + a.toString()
-"xx" + a
-
-All six of these will return java.lang.String for .getClass().getName().
-However, the first three are String literals, while the last three are String objects. 
-Thus:
-        "xxx" == "xxx"
-        "xxx" == "xx" + "x"
-        "xxx" == new String("xxx").intern()
-
-but none of the other three are equivalent to "xxx" or each other:
-
-              "xxx" != new String("xxx")
-              "xxx" != "xx" + a.toString()
-              "xxx" != "xx" + a
-  new String("xxx") != new String("xxx") 
-           "xx" + a != new String("xxx") 
-
-etc.
-
-As in Java, in SwingJS, all of the following Java assertions pass as true:
-
-               assert("xxx" == "xx" + "x"); 
-               assert("xxx" == ("xx" + a).intern()); 
-               assert("xxx" === new String("xxx").intern()); 
-               
-and both of these do as well:
-
-               assert(new String("xxx") != "xxx"); 
-               assert(new String("xxx") != new String("xxx")); 
-
-But the following two fail to assert true:
-
-        assert("xxx" != "xx" + a);
-        assert("xxx" != "xx" + a.toString());
-
-because in JavaScript, both of these right-side expressions evaluate to a simple "interned" string.
-
-In Java, however, these assertions are true because Java implicitly "boxes" String 
-concatentaion as a String object, not a literal. 
-
-Most of us know not to generally use == with Strings unless they are explicitly interned. 
-Where this problem may arise, though, is in IdentityHashMap, which compares objects using 
-System.identityHashCode(), which is not the same for different objects or their string literal equivalents.
-
-My recommendation, if you need to use IdentityHashMap with strings is to always use an explicit String.intern()
-for any keys -- unless you really want to keep every string as separate keys even if they are the same sequence, 
-in which case, use new String(). This will work in Java and in  JavaScript.
-
-Be aware when working with strings that come from SwingJS and are being used by other JavaScript modules
-that those that are String objects will return "object" for the JavaScript typeof operator, not "string".
-
-The easy way to ensure this is no problem is to concatenate strings with "" to force immediate interning:
-
-  var x = aJavaObject.getString() + "";
-
-unless you are certain that the string is being returned is a raw JavaScript string.   
-
-Names with "$" and "_"
-----------------------
-
-For the most part, this should be no problem. 
-
-Note that the use of $ and _ in Java field names has always been discouraged:
-[https://docs.oracle.com/javase/tutorial/java/nutsandbolts/variables.html]
-
-       You may find some situations where auto-generated names will contain the dollar sign, 
-       but your variable names should always avoid using it. A similar convention 
-       exists for the underscore character; while it's technically legal to begin your 
-       variable's name with "_", this practice is discouraged.
-
-Some impacts of transpiling method names with full qualification:
-
-1) SwingJS will introduce fields that start with $ or _. These will not conflict
-   if the above convention is followed.
-   
-2) Fields that have the same Java name as a method are not an issue. 
-
-3) Fields that have a Java name with $ that matches a transpiled method name, 
-   such as toString$, will need to be refactored in Java to not have that name collision.
-   
-4) Fields in a subclass that have the same name as private fields in a superclass
-   represent a name collision, because the superclass method needs to call its private
-   field even if invoked from a subclass. The solution was to modify the subclass field
-   name using one or more prepended $.
-   
-5) Use of Class.getDeclaredMethods() reflection will return Method objects having the transpiled 
-   name, not the Java name. This could require some j2sNative adjustment 
-   to strip the $... parameters from the name if that is needed. 
-
-6) Use of Method.getParameterTypes() should work fine, provided class names
-   do not contain "_". This is because the transpiler converts "." to "_" when
-   creating the fully qualified JavaScript name.
-
-
-positive integers do not add to give negative numbers
------------------------------------------------------
-
-In Java, the following is true:
-
-  2000000000 + 2000000000 == -294967296
-
-But in SwingJS, that will be 4000000000. So, for example, the following
-strategy will fail in SwingJS:
-
-               int newLength = lineBuf.length * 2;
-               if (newLength < 0) {
-                       newLength = Integer.MAX_VALUE;
-               }
-
-"-1" in JavaScript is not 0xFFFFFFFF.
-
-And one must take care to not compare a negative number with a 32-bit mask. So
-
-(b & 0xFF000000) == 0xFF000000
-
-is true in Java for (int) b = -1, but is false in JavaScript, because 0xFF000000 is 4278190080, 
-while (-1 & 0xFF000000) is, strangely enough, -16777216, and, in fact, 
-
-(0xFF000000 & 0xFF000000) != 0xFF000000
-
-because -16777216 is not 4278190080.
-
-The fix is that one must compare similar operations:
-
-if ((b & 0xFF000000) == (0xFF000000 & 0xFF000000)) .....
-
-Importantly, the JavaScript Int32Array does behave properly. From 
-the Firefox developer console:
-
->> x = new Int32Array(1)
-<- Int32Array(1) [ 0 ]
->> x[0] = 4000000000
-<- 4000000000
->> x[0]
-<- -294967296
-
-Notice that, perhaps unexpectedly, the following two constructs produce 
-different results in JavaScript:
-
-x = new Int32Array(1);
-b = x[0] = 4000000000;
-
-(b will be 4000000000)
-
-and
-
-x = new Int32Array(1);
-x[0] = 4000000000;
-b = x[0];
-
-(b will be -294967296)
-
-
-SwingJS leverages array typing to handle all byte and short arithmetic so as
-to ensure that any byte or short operation in JavaScript does give the same 
-result in Java. The design decision to not also do this with integer math was
-a trade-off between performance and handling edge cases.
-
-
-ArrayIndexOutOfBounds
----------------------
-
-You cannot implicitly throw an ArrayIndexOutOfBoundsException in JavaScript.
-JavaScript will simply return "undefined", not throw an Exception. So:
-
-boolean notAGoodIdeaIsOutOfBounds(String[] sa, int i) {
-  try {
-     return (sa[i] == sa[i]);
-  } catch (ArrayIndexOutOfBoundsException e) {
-       return false;
-  }
-}
-
-will work in Java but not in JavaScript. Code should not depend upon this sort 
-of trap anyway, if you ask me. 
-
-Throwable vs Error vs Exception
--------------------------------
-
-True JavaScript errors are trapped as Throwable, whereas you can still trap
-Error and Exception as well. So if you want to be sure to catch any JavaScript
-error, use try{}catch (Throwable t){}, not try{}catch (Exception e){}. 
-
-j
-ava.awt.Color
---------------
-
-ColorSpace: only "support" CS_sRGB.
-
- TODO -- any volunteers??
-
-javax.swing.JFileDialog
------------------------
-
-HTML5 cannot expose a file reading directory structure. But you certainly 
-can still do file reading and writing. It just works a little differently.
-It's a simple modification:
-
-               b = new JButton("FileOpenDialog");
-               b.addActionListener(new ActionListener() {
-
-                       @Override
-                       public void actionPerformed(ActionEvent e) {
-                               JFileChooser fc = new JFileChooser();
-                               Test_Dialog.this.onDialogReturn(fc.showOpenDialog(Test_Dialog.this));
-                               // Java will wait until the dialog is closed, then enter the onDialogReturn method.
-                               // JavaScript will exit with NaN immediately, and then call back with its actual value
-                               // asynchronously.
-                       }
-
-               });
-       
-               public void onDialogReturn(int value) {
-                       if (value != Math.floor(value))
-                               return; // in JavaScript, this will be NaN, indicating the dialog has been opened
-                       // If we are here, the dialog has closed, in both Java and JavaScript.
-                       System.out.println("int value is " + value);
-               }
-
-
-       @Override
-       public void propertyChange(PropertyChangeEvent event) {
-               Object val = event.getNewValue();
-               String name = event.getPropertyName();
-               System.out.println(name);
-               switch (event.getSource().getClass().getName()) {
-               case "javax.swing.JOptionPane":
-                       switch (name) {
-                       case "inputValue":
-                               onDialogReturn(val);
-                               return;
-                       case "value":
-                               if (val instanceof Integer)
-                                       onDialogReturn(((Integer) val).intValue());
-                               else
-                                       onDialogReturn(val);
-                               return;
-                       }
-                       break;
-               case "javax.swing.ColorChooserDialog":
-                       switch (name) {
-                       case "SelectedColor":
-                               onDialogReturn(val);
-                               return;
-                       }
-                       break;
-               case "javax.swing.JFileChooser":
-                       switch (name) {
-                       case "SelectedFile":
-                               File file = (File) val;
-                               byte[] array = (val == null ? null : /** @j2sNative file.秘bytes || */
-                                               null);
-                               onDialogReturn("fileName is '" + file.getName() + "'\n\n" + new String(array));
-                               return;
-                       }
-                       break;
-               }
-               System.out.println(
-                               event.getSource().getClass().getName() + " " + event.getPropertyName() + ": " + event.getNewValue());
-       }
-
-
-Developers are encouraged to create a separate class that handles general calls to JFileDialog. 
-An example class can be found in the SwingJS distribution as 
-
-/sources/net.sf.j2s.java.core/src/javajs/async/AsyncFileChooser.java.
-
-
-javax.swing.JOptionPane dialogs
--------------------------------
-
-For this action to work, the parentComponent must implement
-propertyChangeListener, and any call to JOptionPanel should allow for
-an asynchronous response, meaning that there is no actionable code following the
-call to the dialog opening. 
-
-In addition, for compatibility with the Java version, implementation should
-wrap the call to getConfirmDialog or getOptionDialog in a method call to
-handle the Java:
-
-onDialogReturn(JOptionPane.showConfirmDialog(parentFrame,
-messageOrMessagePanel, "title", JOptionPane.OK_CANCEL_OPTION));
-
-Then parentFrame.propertyChange(event) should also call onDialogReturn.
-
-This will then work in both Java and JavaScript.
-
-Note that there is an int and an Object version of onDialogReturn().
-
-
-In JavaScript:
-
-The initial return from JOptionPane.showConfirmDialog and showMessageDialog
-will be (SwingJS) JDialog.ASYNCHRONOUS_INTEGER (NaN), testable as an impossible 
-Java int value using ret != -(-ret) if the parent implements PropertyChangeListener, or -1
-(CLOSE_OPTION) if not.
-
-For showOptionDialog (which returns Object) or showInputDialog (which returns
-String), the initial return will be (SwingJS) JDialog.ASYNCHRONOUS_OBJECT, testable as
-((Object) ret) instanceof javax.swing.plaf.UIResource if the parent implements
-PropertyChangeListeneer, or null if not.
-
-The second return will be the desired return.
-
-In Java:
-
-The initial return will be the one and only modal final return.
-
-
-
-For full compatibility, The calling method must not continue beyond this
-call.
-
-All of the standard Java events associated with Components are also
-available.
-
-Certain fall back mechanisms are possible, where onReturn does not exist, but
-only for the following cases:
-
-
-For showMessageDialog, for WARNING_MESSAGE and ERROR_MESSAGE, a simple
-JavaScript alert() is used, returning 0 (OK_OPTION) or -1 (CLOSED_OPTION).
-
-For showInputDialog, if the message is a string, a simple JavaScript prompt()
-with input box is used, returning the entered string or null.
-
-For showConfirmDialog, a simple JavaScript confirm() is used, in which case:
-
-for YES_NO_OPTION: YES_OPTION or NO_OPTION
-
-for YES_NO_CANCEL_OPTION: YES_OPTION or CANCEL_OPTION
-
-for OK_CANCEL_OPTION or any other: OK_OPTION or CANCEL_OPTION
-
-Note that you should implement a response for CLOSED_OPTION for
-showConfirmDialog. For other dialogs, a null return indicates the dialog was
-closed, just as for Java.
-
-Developers are encouraged to create a separate class that handles general calls. 
-An example class can be found in the SwingJS distribution as src/javajs/async/AsyncDialog.java.
-Very simple modifications to the Java allows asynchronous operation using AsyncDialog. Here
-is a simple "do you want to close this frame" example, where you can see that what we have
-done is to set the reply into an ActionListener that is defined in the constructor of 
-the AsyncDisplay object:
-
-// Original:
-//
-//     private void promptQuit() {
-//             int sel = JOptionPane.showConfirmDialog(null, PROMPT_EXIT, NAME, JOptionPane.YES_NO_OPTION);
-//             switch (sel) {
-//             case JOptionPane.YES_OPTION:
-//                     resultsTab.clean();
-//                     seqs.dispose();
-//                     if (fromMain) {
-//                             System.exit(0);
-//                     }
-//                     break;
-//             }
-//     }
-
-       private void promptQuitAsync() {
-               new AsyncDialog(new ActionListener() {
-
-                       @Override
-                       public void actionPerformed(ActionEvent e) {
-                           int sel = ((AsyncDialog)e.getSource()).getOption();
-                               switch (sel) {
-                               case JOptionPane.YES_OPTION:
-                                       resultsTab.clean();
-                                       seqs.dispose();
-                                       if (fromMain) {
-                                               System.exit(0);
-                                       }
-                                       break;
-                               }
-                       }}).showConfirmDialog(null, PROMPT_EXIT, NAME, JOptionPane.YES_NO_OPTION);
-       }
-
-Very simple! 
-
-
-native methods
---------------
-
-The J2S compiler ignores all static native method declarations.
-Anything of this nature needs to be implemented in JavaScript if it is needed,
-using j2sNative blocks:
-
-/**
- * @j2sNative
- *
- *    var putYourJavaScriptCodeHere
- *
- */
- Note that if you follow that directly with a {...} block, then 
- the javadoc code will run in JavaScript, and the {...} code will run in Java.
-key Focus
----------
-
-As of June, 2019, the keyboard focus manager is fully implemented. 
-The one catch is that JTextPane and JTextArea, which already consume
-VK_TAB in Java, cannot use CTRL-TAB to continue a tabbing cycle around
-the components in a window. Instead, CTRL-TAB is absorbed by the browser. 
-
-
-LookAndFeel and UI Classes
---------------------------
-
-SwingJS implements the native browser look and feel as swingjs.plaf.HTML5LookAndFeel. 
-There are small differences between all look and feels -- MacOS, Windows, SwingJS.
-
-Expert developers know how to coerce changes in the UI by subclassing the UI for a 
-component. This probably will not work in SwingJS. 
-
-Note that LookAndFeel in Java usually determines canvas size in a Frame because 
-different operating systems (Mac OS vs Windows vs HTML5) will have 
-different edge sizes on their frames. If you want to ensure a component size, 
-use getContentPane().setPreferredSize().
-
-
-System.exit(0) does not stop all processes
-------------------------------------------
-
-Although System.ext(int) has been implemented in JavaScript, it just closes the 
-frames, stops all pending javax.swing.Timer objects in the queue, and runs any 
-threads added using Runtime.getRuntime().addShutdownHook(Thread).
-It may not stop all "threads." So don't rely on that.
-Applications are responsible for shutting down prior to executing System.exit(0). 
-
-
-myClass.getField not implemented
---------------------------------
-
-java.lang.reflect.Field is implemented minimally. It is not
-certain that Field.getDeclaringClass() will work. If you just want a 
-value of a field, you can do this:
-
-/**
- *@j2sNative
- *
- * return myClass[name]
- */   
-
-But that is not a java.lang.reflection.Field object.
-
-
-"window" and other reserved JavaScript names
---------------------------------------------
-
-No reserved top-level JavaScript name is allowed for a package name. So, for example, 
-one must rename packages such as "window" or "document" to names such as "win" or "doc".
-
-reserved field and method names
--------------------------------
-
-In order to minimize the chance of added SwingJS field and method names colliding with ones 
-developers might use in subclassing Java classes, we have added U+79D8 (first character of Mandarin 
-"secret") to the characters already disrecommended by Java documentation ("$" and "_"). The only problem
-would be if you use that character followed by certain English words in certain classes. For example
-\u79D8canvas for JComponents (in java.awt.JSComponent) and \u79D8byte (in java.io.File).
-
-qualified field and method names
---------------------------------
-
-Method names in SwingJS are fully qualified, meaning two methods with the same Java name but different
-parameters, such as write(int) and write(double), must not have the same name in JavaScript. (In this
-case, we will have write$I and write$D.) However, in certain cases it may be desirable to leave the
-method names unqualified. In particular, when an interface actually represents a JavaScript object, 
-the transpiler can leave a method name unqualified. The default situation for this is a class name 
-includes ".api.js" (case-sensitive). This means that any method in any class in a package js within 
-a package api, or any private interface js that has an outer interface api, will have all-unqualified
-methods. An example of this is swingjs.plaf.JSComboPopupList, which needs to communicate with a jQuery 
-object directly using the following interface:
-
-       private interface api {
-
-               interface js extends JQueryObject {
-
-                       abstract js j2sCB(Object options);
-
-                       abstract Object[] j2sCB(String method);
-
-                       abstract Object[] j2sCB(String method, Object o);
-
-                       abstract Object[] j2sCB(String method, int i);
-
-                       abstract int j2sCB(String OPTION, String name);
-
-               }
-       }
-
-Notice that all these variants of j2sCB() will call the same method in JavaScript by design.
-
-
-missing Math methods
---------------------
-
-java.lang.Math is worked out, but some methods are missing, either because they
-involve long integer value that are inaccessible in JavaScript, or because I just
-didn't implement them. This is a result of continued Java development. 
-It is easy enough to add these methods if you have the source. They go into j2sClazz.js, 
-which is combined with other initial libraries into swingjs2.js by build_site.xml
-
-
-Component.getGraphics(), Graphics.dispose()
--------------------------------------------
-
-Use of component.getGraphics() is discouraged in Java and in SwingJS. 
-Specifically in SwingJS, any call to component.getGraphics() or 
-BufferedImage.createGraphics() or Graphics.create(...) should be matched with graphics.dispose(), 
-particularly when it is called outside the context of a paint(Graphics)
-call from the system. 
-
-If you see your graphics scrolling down the page with each repaint, 
-look for where you have used Component.getGraphics() and not Graphics.dispose().
-For example, this will definitely NOT work in SwingJS:
-
-  this.paint(getGraphics())
-  
-and really should not work in Java, either, as it is technically a resource memory leak.
-
-Instead, if you really do not want to use repaint(), use this:
-
-  Graphics g = getGraphics();
-  paint(g);
-  g.dispose();
-
-
-
-Graphics.setClip()
-------------------
-
-The HTML5 canvas.clip() method is permanent. You can only reset the clip using
-save/restore. This is different from Java, where you can temporarily change it using
-
-  Shape oldClip = Graphics.getClip();
-  Graphics.setClip(newClip);
-   ...
-  Graphics.setClip(oldClip); 
-
-If you need to do something like this, you must schedule the paints
-to not have overlapping clip needs.
-
-
-MAJOR ISSUES--for Bob and Udo within SwingJS
-============================================
-
-fonts
------
-
-Fonts and FontMetrics will all be handled in JavaScript. Font matching will 
-not be exact, and composite (drawn) fonts will not be supported. 
-
-SwingJS handles calls such as font.getFontMetrics(g).stringWidth("xxx") by 
-creating a <div> containing that text, placing it in an obscure location on 
-the page, and reading div.getBoundingClientRect(). This is a VERY precise
-value, but can be a pixel or two off from what Java reports for the same font.
-OS-dependent classes
---------------------
-
-Static classes such as:
-
-   java.awt.Toolkit
-   java.awt.GraphicsEnvironment
-   
-   
-which are created using Class.forName are implemented using classes in the swingjs package.
-
-AWTAccessor is not implemented. 
-
-   
-AWT component peers and component "ui" user interfaces
-------------------------------------------------------
-
-ComponentPeer is a class that represents a native AWT component.
-Components with such peers are called "heavy-weight" components.
-They are expected to do the dirty work of graphics drawing. 
-
-Java Swing implements peers only for JApplet, JDialog, JFrame, and JWindow. 
-References to such objects have been removed, but clearly there must be 
-some connection to similar DOM objects, even for "light-weight" components. 
-
-
-  
-MAJOR ISSUES--to be resolved by implementers
-============================================
-
-fonts
------
-
-Glyph/composite/outline fonts are not supported.
-   
-
-
-threads
--------
-
-Thread locking and synchronization are not relevant to JavaScript.
-Thus, anything requiring "notify.." or "waitFor.." could be a serious issue.
-All threading must be "faked" in JavaScript. Specifically not available is:
-
-  Thread.sleep()
-  
-javax.swing.AbstractButton#doClick(pressTime) will not work, as it requires Thread.sleep();
-    
-However, java.lang.Thread itself is implemented and used extensively. 
-
-Methods thread.start() and thread.run() both work fine. 
-
-For simple applications that use Thread.sleep() just to have a delay, as in a frame rate, for 
-example, one can use javax.swing.Timer instead. That is fully implemented. 
-
-Likewise, java.util.Timer can be replaced with no loss of performance with javax.Swing.Timer.
-Note that java.util.TimerTask is implemented, but it can also be replaced by an implementation of Runnable.
-
-task = new TimerTask(){....};
-t = new java.util.Timer();
-t.schedule(task, 0, 1);
-
-becomes
-
-task = new TimerTask(){....}; // or task = new Runnable() {...}
-t = new javax.swing.Timer(1, new ActionListener() {
-       @Override
-       public void actionPerformed(ActionEvent e) {
-               task.run();
-       }
-};
-t.setInitialDelay(0); // not particularly necessary
-t.start();
-
-In addition, SwingJS provides swingjs.JSThread, which can be subclassed
-if desired. This class allows simple 
-
-  while(!interrupted()){
-       wait()
-       ...
-  }  
-
-action through an asynchronous function run1(mode). For example:
-
-       protected void run1(int mode) {
-               try {
-                       while (true)
-                               switch (mode) {
-                               case INIT:
-                                       // once-through stuff here
-                                       mode = LOOP;
-                                       break;
-                               case LOOP:
-                                       if (!doDispatch || isInterrupted()) {
-                                               mode = DONE;
-                                       } else {
-                                               Runnable r = new Runnable() {
-                                                       public void run() {
-                                                               // put the loop code here
-                                                       }
-                                               };
-                                               dispatchAndReturn(r);
-                                               if (isJS)
-                                                       return;
-                                       }
-                                       break;
-                               // add more cases as needed
-                               case DONE:
-                                       // finish up here
-                                       if (isInterrupted())
-                                               return;
-                                       // or here
-                                       break;
-                               }
-               } finally {
-                       // stuff here to be executed after each loop in JS or at the end in Java
-               }
-       }
-
-image loading
--------------
-- All image loading in SwingJS is synchronous. A MediaTracker call will immediately return "complete".
-  However, it still may take one system clock tick to fully load images. Thus, it is recommended that
-  images be preloaded in the static block of the applet if it is necessary that they be available in init().
-  This is only an issue if you are trying to access the pixel buffer of the image in JavaScript. 
-  
-- Applet.getImage(path, name) will return null if the image does not exist. 
-
-- BufferedImage: only "support" imageType RGB and ARGB
-
-  -BH: This is a temporary edit, just to get us started. Certainly GRAY will be needed
-
-
-BigInteger and BigDecimal
--------------------------
-
-java.math.BigInteger is fully supported; java.math.BigDecimal is roughed 
-in and not fully tested (07/2019). 
-
-Both classes present significant issues for JavaScript, as they are based in 
-Java's 64-bit long for all their operations. Here is the JavaDoc note I added
-to BigInteger:
-
- * SwingJS note: Because of the limitations of JavaScript with regard
- * to long-integer bit storage as a double, this implementation drops
- * the integer storage bit length to 24, giving 48 for long and leaving
- * the last 16 bits clear for the exponent of the double number. This should
- * not affect performance significantly. It does increase the storage 
- * size by about 33%. By bringing an "int" to 3 bytes, we can easily construct
- * and use byte[] data intended for the original BitSet.  
-
-"Easily" may be a bit strong there. This was a serious challenge.
-
-BigDecimal seems to run normally, but in order to do that, my hack involves
-reducing the size of an integer that is allowed to be stored as such and not
-in byte[] as a BigInteger. I'm sure there is a performance hit, but it does work.
-
-no format internationalization
-------------------------------
-
-For now, just en for number and date formatters
-
-no winding rules
-----------------
-
-  When filling a graphic, only nonzero winding rule is implemented in HTML5 Canvas2D.
-
-
-
-text-related field implementation
----------------------------------
-
-Text fields are:
-
-JTextField   (JavaScript <input type="text">)
-JTextArea    (JavaScript <textarea>)
-JTextPane    (JavaScript <div>)
-JEditorPane  (JavaScript <div>)
-
-For the initial implementation, we don't implement infinite undo/redo, and the abstract 
-document model is much less elaborate. Only PlainDocument (in the form of JSPlainDocument)
-is implemented. The Document returned by JTextField.getDocument() is a javax.swing.text.Document.
-
-All scrolling is handled by HTML5. javax.swing.AutoScroller is not implemented.
-public static methods .stop, .isRunning, .processMouseDragged require true Java threading
-and so are not implmented. javax.swing.text.View and its subclasses are not implemented. 
-
-The JS document model does not allow two text fields to address the same underlying document. 
-
-JavaScript is slightly different from Java in that the field value is changed asynchronously after
-the keypressed event, so Java actions that are keyed to KEY_PRESSED may not pick up the new 
-key value even after SwingUtilities.invokeLater() is called. Thus, key pressed actions may need
-to be recorded after a key released event instead. 
-
-Formatter/Regex limitations
----------------------------
-
-Some browsers cannot process Regex "look-behind" process such as (?<=\W)
-java.util.regex.Matcher and Pattern use JavaScript's RegExp object rather than
-the native Java object. These are not identical. Only flags /igm are supported.
-Matcher.start(groupID) is not supported.
-
-java.util.Formatter will function correctly for all standard %... patterns.
-
-integer 1/0 == Infinity
------------------------
-
-1/0 in Java throws "java.lang.ArithmeticException: / by zero", but in JavaScript is just Infinity. 
-
-
-Summary
--------
-
-These are all the known limitations of SwingJS. We have not found any of these limitations
-to be show-stoppers. The primary issue for newcomers to SwingJS is having the source code.
-You must check that source code for all your library jar files is available or, if you
-choose, you will need to decompile those classes. We have used decompilation on some projects,
-and it works just fine. So, technically, all we really need are JAR/class files. But the 
-source is by far superior. It's generally prettier, and it has the license information that
-may or may not be present with the JAR or class files. Use class files at your own risk.
-
-Bob Hanson
-2019.08.16
-
-
-Additional Issues
------------------
-
-Annotation is working for classes, methods, and fields (12/22/19). Method reflection, however,
-is limited. Interfaces do not expose their methods, as the transpiler does not actually transpile
-the interfaces themselves. And method reflection only includes annotated methods.
-
-java.util.concurrent is not fully elaborated. This package is rewritten to not actually use the
-memory handling capabilities of concurrency, which JavaScript does not have access to.
-
-System.getProperties() just returns a minimal set of properties.
-
-
diff --git a/swingjs/ver/3.2.9/net.sf.j2s.core.jar b/swingjs/ver/3.2.9/net.sf.j2s.core.jar
deleted file mode 100644 (file)
index ce22a3e..0000000
Binary files a/swingjs/ver/3.2.9/net.sf.j2s.core.jar and /dev/null differ
diff --git a/swingjs/ver/3.2.9/timestamp b/swingjs/ver/3.2.9/timestamp
deleted file mode 100644 (file)
index 5232ef4..0000000
+++ /dev/null
@@ -1 +0,0 @@
-20201219150605 
index dafdec9..18cd88a 100644 (file)
Binary files a/swingjs/ver/3.3.1-j11/SwingJS-site.zip and b/swingjs/ver/3.3.1-j11/SwingJS-site.zip differ
index 53e50c6..5f2af74 100644 (file)
Binary files a/swingjs/ver/3.3.1-j11/net.sf.j2s.core-j11.jar and b/swingjs/ver/3.3.1-j11/net.sf.j2s.core-j11.jar differ
index f6fdabe..08b1c33 100644 (file)
Binary files a/swingjs/ver/3.3.1/SwingJS-site.zip and b/swingjs/ver/3.3.1/SwingJS-site.zip differ
index c9ec027..773c193 100644 (file)
@@ -1,6 +1,7 @@
 java2script/SwingJS Notes
 =========================
 
+updated 3/11/2023 -- adds support for Java Regex Matcher.start/end(groupID) and .start/end(groupName)
 updated 12/31/2020 -- full support for 64-bit long
 updated 12/6/2020 -- note about restrictions on long, including BitSet and Scanner
 updated 3/21/2020 -- adds note about HashMap, Hashtable, and HashSet iterator ordering
@@ -1468,7 +1469,8 @@ Formatter/Regex limitations
 Some browsers cannot process Regex "look-behind" process such as (?<=\W)
 java.util.regex.Matcher and Pattern use JavaScript's RegExp object rather than
 the native Java object. These are not identical. Only flags /igm are supported.
-Matcher.start(groupID) is not supported.
+Matcher.start(groupID)/.end(groupID) is supported.
+(x*)? failure returns null, not empty string.
 
 java.util.Formatter will function correctly for all standard %... patterns.
 
index ced2ae7..dd10a49 100644 (file)
Binary files a/swingjs/ver/3.3.1/net.sf.j2s.core.jar and b/swingjs/ver/3.3.1/net.sf.j2s.core.jar differ
index 204bf8d..a15f0c4 100644 (file)
@@ -1 +1 @@
-20210728172208 
+20230831104534 
diff --git a/swingjs/ver/5.0.1/Jmol-j2s-site.zip b/swingjs/ver/5.0.1/Jmol-j2s-site.zip
new file mode 100644 (file)
index 0000000..faff6c6
Binary files /dev/null and b/swingjs/ver/5.0.1/Jmol-j2s-site.zip differ
similarity index 55%
rename from swingjs/ver/3.2.5/SwingJS-site.zip
rename to swingjs/ver/5.0.1/SwingJS-site.zip
index 73853d4..b80c529 100644 (file)
Binary files a/swingjs/ver/3.2.5/SwingJS-site.zip and b/swingjs/ver/5.0.1/SwingJS-site.zip differ
similarity index 82%
rename from swingjs/ver/3.2.10-j11/differences.txt
rename to swingjs/ver/5.0.1/differences.txt
index 60f5fcc..773c193 100644 (file)
@@ -1,10 +1,30 @@
-Notes
-=====
+java2script/SwingJS Notes
+=========================
+
+updated 3/11/2023 -- adds support for Java Regex Matcher.start/end(groupID) and .start/end(groupName)
+updated 12/31/2020 -- full support for 64-bit long
+updated 12/6/2020 -- note about restrictions on long, including BitSet and Scanner
+updated 3/21/2020 -- adds note about HashMap, Hashtable, and HashSet iterator ordering
+updated 3/20/2020 -- adds note about interning, new String("xxx"), and "xxx"
+updated 2/26/2020 -- adds Graphics.setClip issue
+updated 12/22/19 -- additional issues
+updated 11/03/19 -- adds information about File.exists() and points to src/javajs/async
+updated 10/26/19 -- adds information about File.createTempFile()
+updated 8/16/19 -- minor typos and added summary paragraph
+updated 7/19/19 -- clarification that AWT and Swing classes are supported directly
+updated 5/13/19 -- Mandarin U+79D8 reserved character; Missing Math methods; int and long
+updated 5/10/19 -- adds a section on static issues in multi-(duplicate)-applet pages
+updated 1/4/19 -- nio
+updated 9/15/18 -- adds integer 1/0 == Infinity
+updated 7/24/18 -- most classes replaced with https://github.com/frohoff/jdk8u-jdk
+updated 6/5/17 -- reserved package name "window"
+updated 3/11/17 -- myClass.getField
+updated 3/7/17 -- overloading of JSplitPane.setDividerLocation
+updated 3/2/17 -- more indication of classes not implemented (KeyListener)
 
 ---IMPORTANT CHARACTER SET NOTE---
 
-It is critical that all development work in Java2Script 
-be done in UTF-8. This means:
+It is critical that all development work in Java2Script be done in UTF-8. This means:
 
 - making sure your Eclipse project is set up for UTF-8 (not the Eclipse default?)
 - making sure your server can serve up UTF-8 by default for any browser-loaded files
@@ -20,8 +40,6 @@ be done in UTF-8. This means:
 Note that the DOCTYPE tag is critical for some browsers to switch into HTML5 mode. (MSIE?)
 
 
-
-  
 In particular, the Mandarin character ç§˜ (mi; "secret") is used extensively throughout
 the SwingJS class files to distinguish j2s-specific fields and methods that must not 
 ever be shadowed or overridden by subclasses. For example, we see in java.lang.Thread.java:
@@ -31,24 +49,6 @@ ever be shadowed or overridden by subclasses. For example, we see in java.lang.T
 ----------------------------------
 
 
-updated 12/6/2020 -- note about restrictions on long, including BitSet and Scanner
-updated 3/21/2020 -- adds note about HashMap, Hashtable, and HashSet iterator ordering
-updated 3/20/2020 -- adds note about interning, new String("xxx"), and "xxx"
-updated 2/26/2020 -- adds Graphics.setClip issue
-updated 12/22/19 -- additional issues
-updated 11/03/19 -- adds information about File.exists() and points to src/javajs/async
-updated 10/26/19 -- adds information about File.createTempFile()
-updated 8/16/19 -- minor typos and added summary paragraph
-updated 7/19/19 -- clarification that AWT and Swing classes are supported directly
-updated 5/13/19 -- Mandarin U+79D8 reserved character; Missing Math methods; int and long
-updated 5/10/19 -- adds a section on static issues in multi-(duplicate)-applet pages
-updated 1/4/19 -- nio
-updated 9/15/18 -- adds integer 1/0 == Infinity
-updated 7/24/18 -- most classes replaced with https://github.com/frohoff/jdk8u-jdk
-updated 6/5/17 -- reserved package name "window"
-updated 3/11/17 -- myClass.getField
-updated 3/7/17 -- overloading of JSplitPane.setDividerLocation
-updated 3/2/17 -- more indication of classes not implemented (KeyListener)
 
 =============================================================================
 SwingJS and OpenJDK 8+
@@ -73,11 +73,38 @@ that one can call in JavaScript
   
 and for all practical purposes it will appear that Java is running.
 
+The goal of java2script/SwingJS is NOT to reproduce Java byte code processing in a 
+browser. We leave that task and its own issues to others. Here, instead, we have a 
+working JavaScript version of the Java classes along with runtime assistance in the
+j2sClazz.js library. This design has several advantages:
+
+ 1) It leads to much smaller downloads, since the class loader can dynamically load
+    code at the class level. 
+    
+ 2) It allow the browser to use its own optimizations and features, not to ignore those. 
+    This leads to huge performance gains and in many cases much simpler coding.
+ 3) It allows for in-browser debugging and analysis. 
+ 4) It allows for code switching between Java and JavaScript. Working Java code 
+    can be annotated (@j2sNative, @j2sAlias, @j2sIgnore) in a fashion that 
+    allows the code to run slightly differently in a Java than a JavaScript environment.
+    For example:
+    
+       int delayMS = /** @j2sNative 10 ||*/2;
+    
+    will read "var delayMS = 10 || 2;"  (i.e. 10) in JavaScript but read by the Java
+    compiler as "int delayMS = 2". 
+    
+ 5) Just generally, it allows for a much more integrated environment. JavaScript on
+    the page can call into any SwingJS program, and, likewise, any SwingJS code can 
+    access anything on the page.    
+
 
 Method and Field Disambiguation
 -------------------------------
 
-SwingJS has no problem with the overloading of methods, for example:
+This is no problem. SwingJS has no problem with the overloading of methods, for example:
 
   public void print(int b);
   public void print(float b);
@@ -139,8 +166,9 @@ becomes:
 
   Clazz.newMeth(C$, 'c$$S', function (text) {...});
 
-Field disambiguation involves prepending. In Java, a class and its subclass 
-can both have the same field name, such as 
+Field disambiguation involves prepending. 
+
+In Java, a class and its subclass can both have the same field name, such as 
 
  boolean visible;
  
@@ -157,8 +185,6 @@ while in SwingJS we will see:
 
 since JavaScript does not have the "super" keyword.
 
-
-
 Parameterless methods such as toString() are appended with "$" to become toString$().
 The one exception to this rule is private methods, which are saved in (truly) private 
 array in the class (and are not accessible by reflection). Private parameterless 
@@ -167,9 +193,8 @@ methods retain their simple Java name, since they cannot conflict with field nam
 This renaming of methods has a few consequences, which are discussed more fully below.
 See particularly the section on "qualified field and method names", where it is described
 how you can use packages or classes or interfaces with ".api.js" in them to represent JavaScript
-objects for which all method names are to be left unqualified. Note that it is not 
-possible to cherry-pick methods to be unqualified; only full packages, classes or 
-interfaces can hold this status.
+objects for which all method names are to be left unqualified, and how individual methods
+can have more than one name using @j2sAlias. 
 
 The swingjs.api.js package in particular contains a number of useful interfaces that
 you can import into your project for JavaScript-specific capabilities.
@@ -195,8 +220,7 @@ performance at 1/6 - 1/3 the speed of Java. Achieving this performance may requi
 some refactoring of the Java to make it more efficient in both Java and JavaScript. 
 "for" loops need to be more carefully crafted; use of "new" and "instanceof" need to be
 minimized in critical areas. Note that method overloading -- that is, the same method name
-with different parameters, such as read(int) and read(byte) -- is no longer any problem. 
-  
+with different parameters, such as read(int) and read(byte) -- is no longer any problem.   
 
 Threads
 -------
@@ -209,6 +233,10 @@ they must allow full exit and re-entry of Thread.run(), not the typical while/sl
 
 The key is to create a state-based run() that can be exited and re-entered in JavaScript.
 
+The javajs.async package can be added to any Java program to provide Java+JavaScript asynchronous
+classes, including AsyncColorChooser, AsyncDialog, AsyncFileChooser, and AsyncSwingWorker. All
+of these classes work just as well in Java as in JavaScript. There is no need to run them 
+only when in JavaScript.
 
 Static fields
 -------------
@@ -284,7 +312,8 @@ Helper Packages -- swingjs/ and javajs/
 
 The SwingJS library is the swingjs/ package. There are interfaces that may be of assistance
 in swingjs/api, but other than that, it is not recommended that developers access classes in 
-this package. The "public" nature of their methods is really an internal necessity.
+this package. The "public" nature of their methods is really an internal necessity. Most access 
+to this package in working Java should be via the swingjs.api.JSUtilI interface.
 
 In addition to swingjs/, though, there are several useful classes in the javajs/ package
 that could be very useful. This package is a stand-alone package that can be 
@@ -324,26 +353,31 @@ has no access to these, of course, and they must all be replaced by JavaScript e
 Fortunately, they are not common, and those that are present in Java (for example, in calculating
 checksums in ZIP file creation) are at a low enough level that most developers do not utilize them
 or do not even have access to them. All native calls in Java classes have been replaced by 
-Java equivalents.
+Java or JavaScript equivalents.
 
 
 Swing GUI Peers and UIClasses
 -----------------------------
 
 One of the biggest adaptations introduced in SwingJS is in the area of the graphical 
-user interface. The issue here is complex but workable. In Java there are two background 
-concepts -- the Component "peer" (one per "heavy-weight" component, such as a Frame) and the 
-component "uiClass" (one per component, such as JButton or JTextField).
+user interface. Basically, what we have is a Java Swing "LookAndFeel" customized for HTML.
+
+The issue here is complex but workable. In Java there are two background concepts -- the 
+Component "peer" (one per "heavy-weight" component, such as a Frame) and the 
+component "uiClass" (one per component, such as BasicButtonUI or BasicTextFieldUI).
 
 Peers are native objects of the operating system. These are the virtual buttons and text areas
-that the user is interacting with at a very base level. Their events are being passed on to 
-Java or the browser by the operating system. UI classes provide a consistent "look and feel" 
-for these native objects, rendering them onto the native window canvas and handling all 
-user-generated events. They paint the borders, the backgrounds, the highlights, of every 
-control you see in Java. There is one-to-one correspondence of Swing classes and UI classes. 
-Setting the Look and Feel for a project amounts to selecting the directory from which to draw 
-these UI classes. The UI classes can be found in the javax.swing.plaf ("platform look and feel") 
-package.
+that the user is interacting with at a very base level. They are chunks of low-level code that
+paint the screen to give the illusion that you really are pressing a button or typing text 
+ot the screen. Their events are being passed on to Java or the browser by the operating system. 
+
+UI classes provide a consistent "look and feel" for these native objects, rendering them onto 
+the native window canvas and handling all user-generated events. They paint the borders, 
+the backgrounds, the highlights, of every control you see in Java. There is one-to-one 
+correspondence of Swing classes and UI classes. Setting the Look and Feel for a project amounts 
+to selecting the directory from which to draw these UI classes. Java's UI class interfaces can
+be found in the javax.swing.plaf ("platform look and feel") package. Individual look and feel
+implementations are found in sun.plaf.basic, sun.plaf.metal, and other such specialized packages.
 
 Early on in the development of SwingJS, we decided not to fully reproduce the painfully detailed 
 bit-by-bit painting of controls as is done in Java. Instead, we felt it was wiser to utilize the standard
@@ -378,10 +412,11 @@ alongside their Swing counterparts JButton and JList. Reading the code, it is cl
 design choice posed a huge headache for Swing class developers. 
 
 For SwingJS, we decided from the beginning NOT to allow this mixed-mode programming and 
-instead to require that all components be Swing components. 
-
-However, this is no longer an issue. All AWT components in SwingJS are now subclasses of 
-javax.swing.JComponent. So far, we have found no problem with this.
+instead to require that all components be Swing components. However, this is not really an
+issue. We have reconfigured the class relationships a bit. In SwingJS, all AWT components
+are now subclasses of javax.swing.JComponent. While this might seem error prone, so far we have 
+found no problem with this arrangement. It's a little surprising to me that the original developers
+of Swing did not think of this.
 
  
 The a2s Adapter Package
@@ -395,37 +430,23 @@ that we also wanted it to be possible to quickly adapt these applets to JavaScri
 The solution turned out to be simple: Write a package (a2s) that recreates the interface for 
 non-Swing components as subclasses of Swing components. Thus, a2s.Button subclasses javax.swing.JButton
 but also accepts all of the methods of java.awt.Button. This works amazingly well, with a few
-special adaptations to the core javax.swing to be "AWT-aware." All AWT components now subclass 
-a2s components, which in turn subclass JComponents. So no changes in code are necessary. We have
-successfully transpiled over 500 applets using this strategy. (Kind of surprising, actually, that
-the original Java developers did not see that option. But we have a hindsight advantage here.)
+special adaptations to the core javax.swing to be "AWT-aware." 
 
+Then, to tie it all togeter, all AWT components such as java.awt.Button now subclass their respective
+a2s components, which in turn subclass JComponents. So no changes in code are necessary. We have
+successfully transpiled over 500 applets using this strategy. 
 
 Working with Files
 ==================
 
 Simple String file names are not optimal for passing information about
-read files within SwingJS applications. 
+files read by SwingJS applications. That is because just peeking at a file 
+in SwingJS will load its entire byte[] data. 
  
-All work with files should either use Path or File objects exclusively. 
+Optimally, all work with files should either use Path or File objects exclusively. 
 These objects, after a file is read or checked for existence, will already 
-contain the file byte[] data. Doing something like this:
-
-File f = File("./test.dat");
-boolean isOK = f.exists();
-
-will load f with its byte[] data, if the file exists. 
-
-But if after that, we use:
-
-File f2 = new File(f.getAbsolutePath());
-
-f2 will not contain that data. Such copying should be done as:
-
-File f2 = new File(f);
-
-in which case, the byte[] data will be transferred.
-
+contain the file byte[] data. The string name can be used alone, since SwingJS will
+cache the files itself and not reload them -- just as the browser normally does.
 
 SwingJS uses the following criteria to determine if File.exists() returns true:
 
@@ -446,7 +467,13 @@ or
 
 Temporary files can be created in SwingJS. SwingJS will maintain a pseudo-filesystem for files 
 created with File.createTempFile(). This is useful in that closure of writing to a temporary file 
-does not generate a pseudo-download to the user's machine.
+does not generate a pseudo-download to the user's machine. Temporary files will be placed in the 
+"/TEMP/" directory, as seen from the running Java program. Any file written to this directory will
+simply be stored in memory; files written to any other directory, when closed, will appear to the 
+user as a download, often involving a "What do you want to do with this file" dialog. 
+
+
+See below for details relating to each of the subjects below:
 
 
 UNIMPLEMENTED CLASSES BY DESIGN
@@ -464,10 +491,9 @@ serialization
 TODO LIST FOR UNIMPLEMENTED CLASSES
 ===================================
 
-JEditorPane (minimal implementation) - DONE 12/2018; some issues still
-JSplitPane - DONE 8/2018
-JTabbedPane - DONE 10/2018
-JTree - done 12/2019
+none as of 2020.12.31. Source code for classes and methods missing
+from Java 8 or from Java 9+ can be inserted by any developer along 
+with their running code source, and they should run.  
 
 
 MINOR ISSUES--required some rewriting/refactoring by Bob and Udo  
@@ -481,12 +507,10 @@ MINOR ISSUES--requiring some rewriting/refactoring outside of SwingJS
 
 See below for a full discussion.
 
-Restrictions on long
-Restriction on BitSet and Scanner
+primitive type restrictions - int, long, and float
 HashMap, Hashtable, and HashSet iterator ordering
 interning, new String("xxx") vs "xxx"
 Names with "$" and "_"
-positive integers do not add to give negative numbers
 ArrayIndexOutOfBounds
 java.awt.Color
 native methods
@@ -499,7 +523,6 @@ myClass.getField not implemented
 "window" and other reserved JavaScript names
 reserved field and method names
 qualified field and method names
-missing Math methods
 Component.getGraphics(), Graphics.dispose()
 Graphics.setClip()
 
@@ -518,12 +541,10 @@ fonts
 threads
 modal dialogs
 image loading
-BigDecimal not fully implemented 
 no format internationalization
-no winding rules
+Graphics2D: missing winding rules
 text-related field implementation
 Formatter/Regex limitations
-integer 1/0 == Infinity
 
 ======================================================================== 
 
@@ -532,10 +553,6 @@ DISCUSS
 
 Table row/col sorter needs checking after removal of java.text.Collator references
 
-I had to move all of SunHints class to RenderingHints, or the 
-two classes could not be loaded. Shouldn't be a problem, I think. The sun classes are
-not accessible to developers in Java anyway, since they are generally package private.
-
 ========================================================================== 
 
 //////////////////////////////////////////////////////////////////////////////
@@ -589,58 +606,88 @@ changed to JSToolkit.isDispatchThread()
 MINOR ISSUES--requiring some rewriting/refactoring outside of SwingJS  
 =====================================================================
 
-restrictions on long
---------------------
+primitive restrictions - int, long, and float
+---------------------------------------------
 
-Java's 64-bit long type is not supported in JavaScript. There is no Int64Array in JavaScript,
-and 0x20000000000000 + 1 evaluates to 0x20000000000000, not 0x20000000000001. 
-(Likewise, -0x20000000000000 - 1 is left unchanged.) 
+int
 
-The largest "integer" value in JavaScript is 9007199254740991 (9.007199254740991E13, or 0x1FFFFFFFFFFFFFF).
-Effectively, you get to use only 53 bits of the long, not 64. Trying to set a long larger than
-0x1FFFFFFFFFFFFFF or smaller than -0x1FFFFFFFFFFFFFF will result in a NumberFormatException.
+For performance reasons, int addition and multiplication do not by default overflow to 
+negative values. Instead, they just get bigger. Java code that relies on overflow to 
+negative values should be surrounded by ()|0 -- an OR with integer 0:
 
-The transpiler handles conversion to long the same as Java for all cases other than from double. 
 
-For small double values, there is no problem, and, in fact, this is a known trick used to round 
-doubles and floats toward zero:
+int bigI, bigJ;
+...
 
-double d;
-d = (long) 3.8;
-assert(d == 3);
-d = (long) -3.8;
-assert(d == -3);
+bigI = (bigI + bigJ)|0;
 
-SwingJS will evaluate (long) d as 0 for d > 9007199254740991 
-or d < -9007199254740991, same as Java returns for Double.NaN.
-So, in Java we have:
+bigI = (bigI + 1)|0;   //instead of bigI++
 
-               assert(((long) Double.NaN) == 0);
-               assert(((int) Double.NaN) == 0);
-               assert(((long) Float.NaN) == 0);
-               assert(((int) Float.NaN) == 0);
 
-and also, in JavaScript only, we also have:
+Thus, in Java, the following is true:
 
-               double d = 0x2000000000000L;
-               assert(((long) d) == 0);
+  2000000000 + 2000000000 == -294967296
 
+But in SwingJS, that will be 4000000000. So, for example, the following
+strategy will fail in SwingJS:
 
-restrictions on BitSet and Scanner
-----------------------------------
+               int newLength = lineBuf.length * 2;
+               if (newLength < 0) {
+                       newLength = Integer.MAX_VALUE;
+               }
+
+This is because, generally, "-1" in JavaScript is not 0xFFFFFFFF. The simple ()|0 takes
+caes of this:
 
-Because of the issue of long being only 53 bits, any time a method returns a long value, considerations must
-be made as to whether this will work in JavaScript. In particular, BitSet and Scanner have issues. 
+               int newLength = (lineBuf.length * 2)|0;
+               if (newLength < 0) {
+                       newLength = Integer.MAX_VALUE;
+               }
 
-In SwingJS, java.util.BitSet has been implemented as a 32-bit integer-based bitset. This was no problem in
-Java 6, but starting with Java 7, a method was added to BitSet that allows for the extraction of the 
-underlying long[] word data. This is not work in JavaScript. Instead, SwingJS java.util.Bitset.toLongArray() will deliver 
-32-bit int[] data.
+JavaScript does process bitwise operators & | ^ ~ properly for int values. There is no issue using
+these operations. 
 
-SwingJS Scanner has hasNextLong() and nextLong(), and although it will scan through long numbers,
-Scanner will choke on long numbers greater than the JavaScript 53-bit limit. hasNextLong() will 
-return false, and nextLong() will throw an InputMismatchException triggered by the NumberFormatException
-thrown by Long.parseLong(). 
+Note that int 1/0 in Java throws "java.lang.ArithmeticException: / by zero", but in JavaScript is just Infinity. 
+
+Importantly, the JavaScript Int32Array does behave properly. From the Firefox developer console:
+
+>> x = new Int32Array(1)
+<- Int32Array(1) [ 0 ]
+>> x[0] = 4000000000
+<- 4000000000
+>> x[0]
+<- -294967296
+
+Notice that, perhaps unexpectedly, the following two constructs produce 
+different results in JavaScript:
+
+x = new Int32Array(1);
+b = x[0] = 4000000000;
+
+(b will be 4000000000)
+
+and
+
+x = new Int32Array(1);
+x[0] = 4000000000;
+b = x[0];
+
+(b will be -294967296)
+
+
+SwingJS leverages array typing to handle all byte and short arithmetic so as
+to ensure that any byte or short operation in JavaScript does give the same 
+result in Java. 
+
+long
+
+Java's 64-bit long type is fully supported, starting with java2script 3.3.1 (2020.12.31)
+The transpiler handles all conversions to and from long appropriately. See the discussion
+at https://github.com/BobHanson/java2script/issues/202 for how this is done.
+
+float
+
+SwingJS does not distinguish between float and double. Everything is double.
 
 
 HashMap, Hashtable, and HashSet iterator ordering
@@ -663,10 +710,8 @@ Starting with java2script 3.2.9.v1, these classes use the JavaScript Map object
 whenever all keys are strictly of JavaScript typeof "string". If any key is introduced that is not a string, the
 implementation falls back to using hash codes, the same as Java. 
 
-Note strings created using new String("xxxx") are NOT typeof "string"; they are typeof "object".
-
 The result is significantly faster performance (3-12 x faster) than originally, and up to 3 x faster
-performance in JavaScript than in Java itself. Right. Faster than Java. 
+performance in JavaScript than in Java itself. That is not a misprint. Faster than Java. 
 
 The JavaScript Map implementation is implemented UNLESS the constructor used is the one that
 specifies both initial capacity and load factor in their constructor. Thus, 
@@ -709,7 +754,7 @@ The reason for this design is that several classes in the Java core use toString
 methods that return new String(), and those classes that do that would cause a JavaScript error
 if implicitly stringified if new String() returned a JavaScript String object. 
 
-This is fine in JavaScript
+This is fine in JavaScript:
 
 test1 = function() { return { toString:function(){ return "OK" } } }
 "testing" + new test1()
@@ -766,12 +811,12 @@ and both of these do as well:
                assert(new String("xxx") != "xxx"); 
                assert(new String("xxx") != new String("xxx")); 
 
-But the following two fail to assert true:
+But the following two fail to assert true in SwingJS:
 
         assert("xxx" != "xx" + a);
         assert("xxx" != "xx" + a.toString());
 
-because in JavaScript, both of these right-side expressions evaluate to a simple "interned" string.
+because, in JavaScript, both of these right-side expressions evaluate to a simple "interned" string.
 
 In Java, however, these assertions are true because Java implicitly "boxes" String 
 concatentaion as a String object, not a literal. 
@@ -782,7 +827,7 @@ System.identityHashCode(), which is not the same for different objects or their
 
 My recommendation, if you need to use IdentityHashMap with strings is to always use an explicit String.intern()
 for any keys -- unless you really want to keep every string as separate keys even if they are the same sequence, 
-in which case, use new String(). This will work in Java and in  JavaScript.
+in which case, use new String(). This will work in Java and in JavaScript.
 
 Be aware when working with strings that come from SwingJS and are being used by other JavaScript modules
 that those that are String objects will return "object" for the JavaScript typeof operator, not "string".
@@ -793,6 +838,7 @@ The easy way to ensure this is no problem is to concatenate strings with "" to f
 
 unless you are certain that the string is being returned is a raw JavaScript string.   
 
+
 Names with "$" and "_"
 ----------------------
 
@@ -830,71 +876,6 @@ Some impacts of transpiling method names with full qualification:
    creating the fully qualified JavaScript name.
 
 
-positive integers do not add to give negative numbers
------------------------------------------------------
-
-In Java, the following is true:
-
-  2000000000 + 2000000000 == -294967296
-
-But in SwingJS, that will be 4000000000. So, for example, the following
-strategy will fail in SwingJS:
-
-               int newLength = lineBuf.length * 2;
-               if (newLength < 0) {
-                       newLength = Integer.MAX_VALUE;
-               }
-
-"-1" in JavaScript is not 0xFFFFFFFF.
-
-And one must take care to not compare a negative number with a 32-bit mask. So
-
-(b & 0xFF000000) == 0xFF000000
-
-is true in Java for (int) b = -1, but is false in JavaScript, because 0xFF000000 is 4278190080, 
-while (-1 & 0xFF000000) is, strangely enough, -16777216, and, in fact, 
-
-(0xFF000000 & 0xFF000000) != 0xFF000000
-
-because -16777216 is not 4278190080.
-
-The fix is that one must compare similar operations:
-
-if ((b & 0xFF000000) == (0xFF000000 & 0xFF000000)) .....
-
-Importantly, the JavaScript Int32Array does behave properly. From 
-the Firefox developer console:
-
->> x = new Int32Array(1)
-<- Int32Array(1) [ 0 ]
->> x[0] = 4000000000
-<- 4000000000
->> x[0]
-<- -294967296
-
-Notice that, perhaps unexpectedly, the following two constructs produce 
-different results in JavaScript:
-
-x = new Int32Array(1);
-b = x[0] = 4000000000;
-
-(b will be 4000000000)
-
-and
-
-x = new Int32Array(1);
-x[0] = 4000000000;
-b = x[0];
-
-(b will be -294967296)
-
-
-SwingJS leverages array typing to handle all byte and short arithmetic so as
-to ensure that any byte or short operation in JavaScript does give the same 
-result in Java. The design decision to not also do this with integer math was
-a trade-off between performance and handling edge cases.
-
-
 ArrayIndexOutOfBounds
 ---------------------
 
@@ -912,6 +893,7 @@ boolean notAGoodIdeaIsOutOfBounds(String[] sa, int i) {
 will work in Java but not in JavaScript. Code should not depend upon this sort 
 of trap anyway, if you ask me. 
 
+
 Throwable vs Error vs Exception
 -------------------------------
 
@@ -919,8 +901,7 @@ True JavaScript errors are trapped as Throwable, whereas you can still trap
 Error and Exception as well. So if you want to be sure to catch any JavaScript
 error, use try{}catch (Throwable t){}, not try{}catch (Exception e){}. 
 
-j
-ava.awt.Color
+java.awt.Color
 --------------
 
 ColorSpace: only "support" CS_sRGB.
@@ -1008,7 +989,9 @@ An example class can be found in the SwingJS distribution as
 javax.swing.JOptionPane dialogs
 -------------------------------
 
-For this action to work, the parentComponent must implement
+For a full discussion of modal dialogs, see the javajs.asyc.AsyncDialog.java discussion.
+
+For this action to work, the parent component must implement
 propertyChangeListener, and any call to JOptionPanel should allow for
 an asynchronous response, meaning that there is no actionable code following the
 call to the dialog opening. 
@@ -1047,11 +1030,9 @@ The initial return will be the one and only modal final return.
 
 
 
-For full compatibility, The calling method must not continue beyond this
-call.
+For full compatibility, The calling method must not continue beyond this call.
 
-All of the standard Java events associated with Components are also
-available.
+All of the standard Java events associated with Components are also available.
 
 Certain fall back mechanisms are possible, where onReturn does not exist, but
 only for the following cases:
@@ -1133,7 +1114,7 @@ using j2sNative blocks:
  */
  
  Note that if you follow that directly with a {...} block, then 
- the javadoc code will run in JavaScript, and the {...} code will run in Java.
+ only the javadoc code will run in JavaScript, and only the {...} code will run in Java.
  
  
 key Focus
@@ -1192,6 +1173,7 @@ But that is not a java.lang.reflection.Field object.
 No reserved top-level JavaScript name is allowed for a package name. So, for example, 
 one must rename packages such as "window" or "document" to names such as "win" or "doc".
 
+
 reserved field and method names
 -------------------------------
 
@@ -1201,6 +1183,7 @@ developers might use in subclassing Java classes, we have added U+79D8 (first ch
 would be if you use that character followed by certain English words in certain classes. For example
 \u79D8canvas for JComponents (in java.awt.JSComponent) and \u79D8byte (in java.io.File).
 
+
 qualified field and method names
 --------------------------------
 
@@ -1208,10 +1191,25 @@ Method names in SwingJS are fully qualified, meaning two methods with the same J
 parameters, such as write(int) and write(double), must not have the same name in JavaScript. (In this
 case, we will have write$I and write$D.) However, in certain cases it may be desirable to leave the
 method names unqualified. In particular, when an interface actually represents a JavaScript object, 
-the transpiler can leave a method name unqualified. The default situation for this is a class name 
-includes ".api.js" (case-sensitive). This means that any method in any class in a package js within 
-a package api, or any private interface js that has an outer interface api, will have all-unqualified
-methods. An example of this is swingjs.plaf.JSComboPopupList, which needs to communicate with a jQuery 
+the transpiler can leave a method name unqualified. 
+
+You can implement a simple name for a method using the @j2sAlias annoation in the javadoc for the 
+method involved. For example:
+
+
+/**
+ * @j2sAlias read
+ *
+ */
+public void read(byte[] buf, int pos, int len) {...}
+
+will allow the method to be accesible either as "read" or "read$BA$I$I" in JavaScript. 
+
+
+The default situation for this is a class name includes ".api.js" (case-sensitive). 
+This means that any method in any class in a package js within a package api, or any private interface js 
+that has an outer interface api, will have all-unqualified methods. An example of this is 
+swingjs.plaf.JSComboPopupList, which needs to communicate with a jQuery 
 object directly using the following interface:
 
        private interface api {
@@ -1234,24 +1232,13 @@ object directly using the following interface:
 Notice that all these variants of j2sCB() will call the same method in JavaScript by design.
 
 
-missing Math methods
---------------------
-
-java.lang.Math is worked out, but some methods are missing, either because they
-involve long integer value that are inaccessible in JavaScript, or because I just
-didn't implement them. This is a result of continued Java development. 
-It is easy enough to add these methods if you have the source. They go into j2sClazz.js, 
-which is combined with other initial libraries into swingjs2.js by build_site.xml
-
-
 Component.getGraphics(), Graphics.dispose()
 -------------------------------------------
 
 Use of component.getGraphics() is discouraged in Java and in SwingJS. 
 Specifically in SwingJS, any call to component.getGraphics() or 
 BufferedImage.createGraphics() or Graphics.create(...) should be matched with graphics.dispose(), 
-particularly when it is called outside the context of a paint(Graphics)
-call from the system. 
+particularly when it is called outside the context of a paint(Graphics) call from the system. 
 
 If you see your graphics scrolling down the page with each repaint, 
 look for where you have used Component.getGraphics() and not Graphics.dispose().
@@ -1280,8 +1267,7 @@ save/restore. This is different from Java, where you can temporarily change it u
    ...
   Graphics.setClip(oldClip); 
 
-If you need to do something like this, you must schedule the paints
-to not have overlapping clip needs.
+If you need to do something like this, you must schedule the paints to not have overlapping clip needs.
 
 
 MAJOR ISSUES--for Bob and Udo within SwingJS
@@ -1306,11 +1292,10 @@ Static classes such as:
 
    java.awt.Toolkit
    java.awt.GraphicsEnvironment
-   
-   
+      
 which are created using Class.forName are implemented using classes in the swingjs package.
 
-AWTAccessor is not implemented. 
+sun.awt.AWTAccessor is not implemented. 
 
    
 AWT component peers and component "ui" user interfaces
@@ -1324,7 +1309,6 @@ Java Swing implements peers only for JApplet, JDialog, JFrame, and JWindow.
 References to such objects have been removed, but clearly there must be 
 some connection to similar DOM objects, even for "light-weight" components. 
 
-
   
 MAJOR ISSUES--to be resolved by implementers
 ============================================
@@ -1419,6 +1403,7 @@ action through an asynchronous function run1(mode). For example:
                }
        }
 
+
 image loading
 -------------
 - All image loading in SwingJS is synchronous. A MediaTracker call will immediately return "complete".
@@ -1436,36 +1421,19 @@ image loading
 BigInteger and BigDecimal
 -------------------------
 
-java.math.BigInteger is fully supported; java.math.BigDecimal is roughed 
-in and not fully tested (07/2019). 
+java.math.BigInteger and java.math.BigDecimal are fully supported. 
 
-Both classes present significant issues for JavaScript, as they are based in 
-Java's 64-bit long for all their operations. Here is the JavaDoc note I added
-to BigInteger:
-
- * SwingJS note: Because of the limitations of JavaScript with regard
- * to long-integer bit storage as a double, this implementation drops
- * the integer storage bit length to 24, giving 48 for long and leaving
- * the last 16 bits clear for the exponent of the double number. This should
- * not affect performance significantly. It does increase the storage 
- * size by about 33%. By bringing an "int" to 3 bytes, we can easily construct
- * and use byte[] data intended for the original BitSet.  
-
-"Easily" may be a bit strong there. This was a serious challenge.
-
-BigDecimal seems to run normally, but in order to do that, my hack involves
-reducing the size of an integer that is allowed to be stored as such and not
-in byte[] as a BigInteger. I'm sure there is a performance hit, but it does work.
 
 no format internationalization
 ------------------------------
 
-For now, just en for number and date formatters
+For now, just "en" for number and date formatters
 
-no winding rules
-----------------
 
-  When filling a graphic, only nonzero winding rule is implemented in HTML5 Canvas2D.
+missing winding rules
+---------------------
+
+When filling a graphic, only nonzero winding rule is implemented in HTML5 Canvas2D.
 
 
 
@@ -1494,21 +1462,54 @@ the keypressed event, so Java actions that are keyed to KEY_PRESSED may not pick
 key value even after SwingUtilities.invokeLater() is called. Thus, key pressed actions may need
 to be recorded after a key released event instead. 
 
+
 Formatter/Regex limitations
 ---------------------------
 
 Some browsers cannot process Regex "look-behind" process such as (?<=\W)
 java.util.regex.Matcher and Pattern use JavaScript's RegExp object rather than
 the native Java object. These are not identical. Only flags /igm are supported.
-Matcher.start(groupID) is not supported.
+Matcher.start(groupID)/.end(groupID) is supported.
+(x*)? failure returns null, not empty string.
 
 java.util.Formatter will function correctly for all standard %... patterns.
 
-integer 1/0 == Infinity
------------------------
+In addition, JavaScript does not implement some of the more arcane POSIX {...} formats. 
+From java.util.regex.Pattern.java, we find the listing of conversions SwingJS does use:
+
+               "\\p{javaWhitespace}","\\s",
+               "\\p{javaDigit}","\\d",
+               "\\p{Lower}", "[a-z]",
+               "\\p{Upper}", "[A-Z]",
+               "\\p{ASCII}", "[\u0000-\u007F]",
+               "\\p{Alpha}", "[A-Za-z]",
+               "\\p{Digit}", "[0-9]",
+               "\\p{Alnum}", "[A-Za-z0-9]",
+               "\\p{Punct}", "[!\"#$%&'\\(\\)\\*\\+,-./:;<=>?@\\[\\\\\\]^_`{\\|}~]",
+               "\\p{Graph}", "[A-Za-z0-9]!\"#$%&'\\(\\)\\*\\+,-./:;<=>?@\\[\\\\\\]^_`{\\|}~]",
+               "\\p{Print}", "[A-Za-z0-9]!\"#$%&'\\(\\)\\*\\+,-./:;<=>?@\\[\\\\\\]^_`{\\|}~]",
+               "\\p{Blank}", "[ \t]",
+               "\\p{Cntrl}", "[\u0000-\u001F\u007F]",
+               "\\p{XDigit}", "[0-9a-fA-F]",
+               "\\p{Space}", "[ \t\n\u000B\f\r]",
+               "\\p{javaLowerCase}", "[a-z]",
+               "\\p{javaUpperCase}", "[A-Z]",
+               "\\p{Sc}", "[\u0024\u00A2\u00A3\u00A4\u00A5\u058F\u060B\u07FE\u07FF\u09F2\u09F3\u09FB\u0AF1\u0BF9\u0E3F\u20A0\u20A1\u20A2\u20A3\u20A4\u20A5\u20A6\u20A7\u20A8\u20A9\u20AA\u20AB\u20AC\u20AD\u20AE\u20AF\u20B0\u20B1\u20B2\u20B3\u20B4\u20B5\u20B6\u20B7\u20B8\u20B9\u20BA\u20BB\u20BC\u20BD\u20BE\u20BF\uA838\uFDFC\uFE69\uFF04\uFFE0\uFFE1\uFFE5\uFFE6]"
+
+Java's \Q \E quoting is handled appropriately.
 
-1/0 in Java throws "java.lang.ArithmeticException: / by zero", but in JavaScript is just Infinity. 
+Additional Issues
+-----------------
+
+Method reflection is limited. Fields and methods do not retain public or default characteristics. 
+(This could be easily adapted, though.) Interfaces do not expose their methods, as the transpiler does not 
+actually transpile the interfaces themselves unless they contain default methods. 
+And method reflection only includes annotated methods.
+
+java.util.concurrent is not fully elaborated. This package is rewritten to not actually use the
+memory handling capabilities of concurrency, which JavaScript does not have access to.
+
+System.getProperties() just returns a minimal set of properties.
 
 
 Summary
@@ -1523,19 +1524,5 @@ source is by far superior. It's generally prettier, and it has the license infor
 may or may not be present with the JAR or class files. Use class files at your own risk.
 
 Bob Hanson
-2019.08.16
-
-
-Additional Issues
------------------
-
-Annotation is working for classes, methods, and fields (12/22/19). Method reflection, however,
-is limited. Interfaces do not expose their methods, as the transpiler does not actually transpile
-the interfaces themselves. And method reflection only includes annotated methods.
-
-java.util.concurrent is not fully elaborated. This package is rewritten to not actually use the
-memory handling capabilities of concurrency, which JavaScript does not have access to.
-
-System.getProperties() just returns a minimal set of properties.
 
 
diff --git a/swingjs/ver/5.0.1/j2s.core.jar b/swingjs/ver/5.0.1/j2s.core.jar
new file mode 100644 (file)
index 0000000..e6f92de
Binary files /dev/null and b/swingjs/ver/5.0.1/j2s.core.jar differ
diff --git a/swingjs/ver/5.0.1/timestamp b/swingjs/ver/5.0.1/timestamp
new file mode 100644 (file)
index 0000000..4b48c4a
--- /dev/null
@@ -0,0 +1 @@
+20231117083556 
diff --git a/swingjs/ver/pre-long/DEV_NOTES.txt b/swingjs/ver/pre-long/DEV_NOTES.txt
deleted file mode 100644 (file)
index 751d81c..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-This is sources/net.sf.j2s.java.core/dist/DEV_NOTES.txt
-
-_j2sclasslist.txt 
-
-the list of .js files concatenated into coreswingjs.js and minified to coreswingjs.z.js
-
-
-SwingJS-site.zip
-
-the full site directory for SwingJS including all files not in the test/ directory.
diff --git a/swingjs/ver/pre-long/README-pre-long.txt b/swingjs/ver/pre-long/README-pre-long.txt
deleted file mode 100644 (file)
index e0c6163..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-This directory holds 3.2.9 transpiler and runtime tagged previous 
-to the transpiler fix for boxed number direct manipulation:
-
-Long L = Long.valueOf(3);
-L++;
-L /= 2;
-L += 10;
-L = L / 5;
-
-etc. 
-
-These assignments are not made properly and fail. 
-
-In addition, this runtime does not handle Long properly and also had an issue with Short.equals(Object)
-
-just saving this and will probably delete it. 
-
diff --git a/swingjs/ver/pre-long/SwingJS-site.zip b/swingjs/ver/pre-long/SwingJS-site.zip
deleted file mode 100644 (file)
index 73853d4..0000000
Binary files a/swingjs/ver/pre-long/SwingJS-site.zip and /dev/null differ
diff --git a/swingjs/ver/pre-long/_j2sclasslist.txt b/swingjs/ver/pre-long/_j2sclasslist.txt
deleted file mode 100644 (file)
index 076f300..0000000
+++ /dev/null
@@ -1,412 +0,0 @@
-java/applet/Applet.js
-java/applet/AppletContext.js
-java/applet/AppletStub.js
-java/applet/JSApplet.js
-java/awt/ActiveEvent.js
-java/awt/Adjustable.js
-java/awt/AWTEvent.js
-java/awt/AWTEventMulticaster.js
-java/awt/AWTKeyStroke.js
-java/awt/BasicStroke.js
-java/awt/BorderLayout.js
-java/awt/Button.js
-java/awt/Color.js
-java/awt/color/ColorSpace.js
-java/awt/Component.js
-java/awt/ComponentOrientation.js
-java/awt/ContainerOrderFocusTraversalPolicy.js
-java/awt/Container.js
-java/awt/Cursor.js
-java/awt/DefaultFocusTraversalPolicy.js
-java/awt/DefaultKeyboardFocusManager.js
-java/awt/Dialog.js
-java/awt/Dimension.js
-java/awt/dnd/peer/DropTargetPeer.js
-java/awt/event/ActionListener.js
-java/awt/event/AdjustmentEvent.js
-java/awt/event/AdjustmentListener.js
-java/awt/event/AWTEventListener.js
-java/awt/event/ComponentAdapter.js
-java/awt/event/ComponentEvent.js
-java/awt/event/ComponentListener.js
-java/awt/event/ContainerListener.js
-java/awt/event/FocusEvent.js
-java/awt/event/FocusListener.js
-java/awt/event/HierarchyBoundsListener.js
-java/awt/event/HierarchyListener.js
-java/awt/event/InputEvent.js
-java/awt/event/InputMethodListener.js
-java/awt/event/InvocationEvent.js
-java/awt/event/ItemEvent.js
-java/awt/event/ItemListener.js
-java/awt/event/KeyListener.js
-java/awt/event/MouseEvent.js
-java/awt/event/MouseListener.js
-java/awt/event/MouseMotionListener.js
-java/awt/event/MouseWheelListener.js
-java/awt/event/TextListener.js
-java/awt/event/WindowAdapter.js
-java/awt/event/WindowEvent.js
-java/awt/event/WindowFocusListener.js
-java/awt/event/WindowListener.js
-java/awt/event/WindowStateListener.js
-java/awt/EventDispatchThread.js
-java/awt/EventFilter.js
-java/awt/EventQueue.js
-java/awt/EventQueueItem.js
-java/awt/FlowLayout.js
-java/awt/FocusTraversalPolicy.js
-java/awt/Font.js
-java/awt/font/FontRenderContext.js
-java/awt/FontMetrics.js
-java/awt/Frame.js
-java/awt/geom/AffineTransform.js
-java/awt/geom/Dimension2D.js
-java/awt/geom/Path2D.js
-java/awt/geom/PathIterator.js
-java/awt/geom/Point2D.js
-java/awt/geom/Rectangle2D.js
-java/awt/geom/RectangularShape.js
-java/awt/geom/RectIterator.js
-java/awt/GraphicsCallback.js
-java/awt/GraphicsConfiguration.js
-java/awt/GraphicsDevice.js
-java/awt/GraphicsEnvironment.js
-java/awt/Image.js
-java/awt/image/ImageObserver.js
-java/awt/Insets.js
-java/awt/ItemSelectable.js
-java/awt/JSComponent.js
-java/awt/JSDialog.js
-java/awt/JSFrame.js
-java/awt/JSPanel.js
-java/awt/KeyboardFocusManager.js
-java/awt/KeyEventDispatcher.js
-java/awt/KeyEventPostProcessor.js
-java/awt/Label.js
-java/awt/LayoutManager.js
-java/awt/LayoutManager2.js
-java/awt/LightweightDispatcher.js
-java/awt/Paint.js
-java/awt/Panel.js
-java/awt/peer/ComponentPeer.js
-java/awt/peer/ContainerPeer.js
-java/awt/peer/FramePeer.js
-java/awt/peer/KeyboardFocusManagerPeer.js
-java/awt/peer/LightweightPeer.js
-java/awt/peer/WindowPeer.js
-java/awt/Point.js
-java/awt/Queue.js
-java/awt/Rectangle.js
-java/awt/RenderingHints.js
-java/awt/Scrollbar.js
-java/awt/ScrollPane.js
-java/awt/Shape.js
-java/awt/Stroke.js
-java/awt/TextArea.js
-java/awt/TextComponent.js
-java/awt/TextField.js
-java/awt/Toolkit.js
-java/awt/Transparency.js
-java/awt/Window.js
-java/beans/ChangeListenerMap.js
-java/beans/PropertyChangeEvent.js
-java/beans/PropertyChangeListener.js
-java/beans/PropertyChangeSupport.js
-java/lang/AbstractStringBuilder.js
-java/lang/Class.js
-java/lang/Enum.js
-java/lang/Iterable.js
-java/lang/reflect/Constructor.js
-java/lang/reflect/Method.js
-java/lang/StringBuffer.js
-java/lang/StringBuilder.js
-java/lang/Thread.js
-java/lang/ThreadGroup.js
-java/math/RoundingMode.js
-java/net/URL.js
-java/net/URLStreamHandlerFactory.js
-java/net/HttpURLConnection.js
-java/net/URLStreamHandler.js
-javax/net/ssl/HttpsUrlConnection.js
-java/text/CharacterIterator.js
-java/text/DecimalFormat.js
-java/text/DecimalFormatSymbols.js
-java/text/DigitList.js
-java/text/FieldPosition.js
-java/text/Format.js
-java/text/NumberFormat.js
-java/util/AbstractCollection.js
-java/util/AbstractList.js
-java/util/AbstractMap.js
-java/util/AbstractSequentialList.js
-java/util/AbstractSet.js
-java/util/ArrayList.js
-java/util/Arrays.js
-java/util/Collection.js
-java/util/Collections.js
-java/util/Comparator.js
-java/util/Deque.js
-java/util/Dictionary.js
-java/util/Enumeration.js
-java/util/EventListener.js
-java/util/EventObject.js
-java/util/HashMap.js
-java/util/HashSet.js
-java/util/Hashtable.js
-java/util/IdentityHashMap.js
-java/util/Iterator.js
-java/util/LinkedHashMap.js
-java/util/LinkedList.js
-java/util/List.js
-java/util/ListResourceBundle.js
-java/util/Locale.js
-java/util/Map.js
-java/util/Objects.js
-java/util/Queue.js
-java/util/Random.js
-java/util/RandomAccess.js
-java/util/ResourceBundle.js
-java/util/Set.js
-java/util/TimSort.js
-java/util/Vector.js
-javajs/api/JSFunction.js
-javajs/util/AjaxURLConnection.js
-javajs/util/AjaxURLStreamHandlerFactory.js
-javajs/util/AU.js
-javajs/util/JSThread.js
-javajs/util/Lst.js
-javajs/util/PT.js
-javajs/util/Rdr.js
-javajs/util/SB.js
-javax/swing/AbstractAction.js
-javax/swing/AbstractButton.js
-javax/swing/AbstractListModel.js
-javax/swing/Action.js
-javax/swing/ActionMap.js
-javax/swing/AncestorNotifier.js
-javax/swing/ArrayTable.js
-javax/swing/border/AbstractBorder.js
-javax/swing/border/BevelBorder.js
-javax/swing/border/Border.js
-javax/swing/border/CompoundBorder.js
-javax/swing/border/EmptyBorder.js
-javax/swing/border/EtchedBorder.js
-javax/swing/border/LineBorder.js
-javax/swing/border/TitledBorder.js
-javax/swing/BorderFactory.js
-javax/swing/BoundedRangeModel.js
-javax/swing/BoxLayout.js
-javax/swing/ButtonGroup.js
-javax/swing/ButtonModel.js
-javax/swing/ClientPropertyKey.js
-javax/swing/ComboBoxModel.js
-javax/swing/DefaultBoundedRangeModel.js
-javax/swing/DefaultButtonModel.js
-javax/swing/DefaultComboBoxModel.js
-javax/swing/DefaultSingleSelectionModel.js
-javax/swing/DropMode.js
-javax/swing/event/AncestorEvent.js
-javax/swing/event/AncestorListener.js
-javax/swing/event/CaretEvent.js
-javax/swing/event/CaretListener.js
-javax/swing/event/ChangeEvent.js
-javax/swing/event/ChangeListener.js
-javax/swing/event/DocumentEvent.js
-javax/swing/event/DocumentListener.js
-javax/swing/event/EventListenerList.js
-javax/swing/event/ListDataEvent.js
-javax/swing/event/ListDataListener.js
-javax/swing/event/UndoableEditEvent.js
-javax/swing/event/UndoableEditListener.js
-javax/swing/FocusManager.js
-javax/swing/InternalFrameFocusTraversalPolicy.js
-javax/swing/LayoutComparator.js
-javax/swing/LayoutFocusTraversalPolicy.js
-javax/swing/SortingFocusTraversalPolicy.js
-javax/swing/SwingContainerOrderFocusTraversalPolicy.js
-javax/swing/SwingDefaultFocusTraversalPolicy.js
-javax/swing/Icon.js
-javax/swing/ImageIcon.js
-javax/swing/InputMap.js
-javax/swing/JApplet.js
-javax/swing/JButton.js
-javax/swing/JCheckBox.js
-javax/swing/JCheckBoxMenuItem.js
-javax/swing/JComboBox.js
-javax/swing/JComponent.js
-javax/swing/JFrame.js
-javax/swing/JLabel.js
-javax/swing/JLayeredPane.js
-javax/swing/JMenu.js
-javax/swing/JMenuBar.js
-javax/swing/JMenuItem.js
-javax/swing/JPanel.js
-javax/swing/JPopupMenu.js
-javax/swing/JRadioButtonMenuItem.js
-javax/swing/JRootPane.js
-javax/swing/JScrollBar.js
-javax/swing/JScrollPane.js
-javax/swing/JSeparator.js
-javax/swing/JTextArea.js
-javax/swing/JTextField.js
-javax/swing/JToggleButton.js
-javax/swing/JViewport.js
-javax/swing/KeyboardManager.js
-javax/swing/KeyStroke.js
-javax/swing/ListModel.js
-javax/swing/LookAndFeel.js
-javax/swing/MenuElement.js
-javax/swing/MutableComboBoxModel.js
-javax/swing/plaf/ActionMapUIResource.js
-javax/swing/plaf/basic/BasicBorders.js
-javax/swing/plaf/BorderUIResource.js
-javax/swing/plaf/ColorUIResource.js
-javax/swing/plaf/ComponentUI.js
-javax/swing/plaf/DimensionUIResource.js
-javax/swing/plaf/FontUIResource.js
-javax/swing/plaf/InputMapUIResource.js
-javax/swing/plaf/InsetsUIResource.js
-javax/swing/plaf/UIResource.js
-javax/swing/RepaintManager.js
-javax/swing/RootPaneContainer.js
-javax/swing/Scrollable.js
-javax/swing/ScrollPaneConstants.js
-javax/swing/ScrollPaneLayout.js
-javax/swing/SingleSelectionModel.js
-javax/swing/SizeRequirements.js
-javax/swing/SwingConstants.js
-javax/swing/SwingPaintEventDispatcher.js
-javax/swing/SwingUtilities.js
-javax/swing/text/AbstractDocument.js
-javax/swing/text/AttributeSet.js
-javax/swing/text/Caret.js
-javax/swing/text/DefaultCaret.js
-javax/swing/text/DefaultEditorKit.js
-javax/swing/text/Document.js
-javax/swing/text/EditorKit.js
-javax/swing/text/Element.js
-javax/swing/text/GapContent.js
-javax/swing/text/GapVector.js
-javax/swing/text/JTextComponent.js
-javax/swing/text/MutableAttributeSet.js
-javax/swing/text/PlainDocument.js
-javax/swing/text/PlainView.js
-javax/swing/text/Position.js
-javax/swing/text/Segment.js
-javax/swing/text/SegmentCache.js
-javax/swing/text/SimpleAttributeSet.js
-javax/swing/text/Style.js
-javax/swing/text/StyleConstants.js
-javax/swing/text/StyleContext.js
-javax/swing/text/TabExpander.js
-javax/swing/text/TextAction.js
-javax/swing/text/Utilities.js
-javax/swing/text/View.js
-javax/swing/tree/TreeNode.js
-javax/swing/UIDefaults.js
-javax/swing/UIManager.js
-javax/swing/undo/AbstractUndoableEdit.js
-javax/swing/undo/CompoundEdit.js
-javax/swing/undo/UndoableEdit.js
-javax/swing/ViewportLayout.js
-javax/swing/WindowConstants.js
-sun/awt/AppContext.js
-sun/awt/AWTAutoShutdown.js
-sun/awt/CausedFocusEvent.js
-sun/awt/ComponentFactory.js
-sun/awt/KeyboardFocusManagerPeerProvider.js
-sun/awt/MostRecentKeyValue.js
-sun/awt/MostRecentThreadAppContext.js
-sun/awt/PaintEventDispatcher.js
-sun/awt/PostEventQueue.js
-sun/awt/RequestFocusController.js
-sun/awt/SunToolkit.js
-sun/awt/WindowClosingListener.js
-sun/awt/WindowClosingSupport.js
-sun/awt/image/DataStealer.js
-sun/awt/image/IntegerComponentRaster.js
-sun/awt/image/IntegerInterleavedRaster.js
-sun/awt/image/SunWritableRaster.js
-sun/font/FontDesignMetrics.js
-sun/swing/DefaultLookup.js
-sun/swing/SwingLazyValue.js
-sun/text/resources/FormatData.js
-sun/text/resources/en/FormatData_en.js
-sun/util/resources/LocaleData.js
-sun/util/locale/BaseLocale.js
-sun/util/locale/LocaleUtils.js
-sun/util/locale/provider/LocaleProviderAdapter.js
-sun/util/locale/provider/LocaleDataMetaInfo.js
-swingjs/a2s/A2SContainer.js
-swingjs/a2s/A2SEvent.js
-swingjs/a2s/A2SListener.js
-swingjs/a2s/Applet.js
-swingjs/a2s/Button.js
-swingjs/a2s/Label.js
-swingjs/a2s/Panel.js
-swingjs/a2s/Scrollbar.js
-swingjs/a2s/ScrollPane.js
-swingjs/a2s/TextArea.js
-swingjs/a2s/TextField.js
-swingjs/api/Interface.js
-swingjs/api/js/DOMNode.js
-swingjs/api/js/HTML5CanvasContext2D.js
-swingjs/api/js/JSInterface.js
-swingjs/jquery/JQueryUI.js
-swingjs/JSApp.js
-swingjs/JSAppletThread.js
-swingjs/JSAppletViewer.js
-swingjs/JSFocusPeer.js
-swingjs/JSFontMetrics.js
-swingjs/JSFrameViewer.js
-swingjs/JSGraphics2D.js
-swingjs/JSGraphicsConfiguration.js
-swingjs/JSGraphicsEnvironment.js
-swingjs/JSImage.js
-swingjs/JSImagekit.js
-swingjs/JSMouse.js
-swingjs/JSNullComponentPeer.js
-swingjs/JSScreenDevice.js
-swingjs/JSThreadGroup.js
-swingjs/JSToolkit.js
-swingjs/JSUtil.js
-swingjs/plaf/ButtonListener.js
-swingjs/plaf/DefaultMenuLayout.js
-swingjs/plaf/HTML5LookAndFeel.js
-swingjs/plaf/JSAppletUI.js
-swingjs/plaf/JSButtonUI.js
-swingjs/plaf/JSCheckBoxMenuItemUI.js
-swingjs/plaf/JSCheckBoxUI.js
-swingjs/plaf/JSComboBoxUI.js
-swingjs/plaf/JSComponentUI.js
-swingjs/plaf/JSEventHandler.js
-swingjs/plaf/JSFrameUI.js
-swingjs/plaf/JSGraphicsUtils.js
-swingjs/plaf/JSLabelUI.js
-swingjs/plaf/JSLayeredPaneUI.js
-swingjs/plaf/JSLightweightUI.js
-swingjs/plaf/JSMenuBarUI.js
-swingjs/plaf/JSMenuItemUI.js
-swingjs/plaf/JSMenuUI.js
-swingjs/plaf/JSPanelUI.js
-swingjs/plaf/JSPopupMenuSeparatorUI.js
-swingjs/plaf/JSPopupMenuUI.js
-swingjs/plaf/JSRadioButtonMenuItemUI.js
-swingjs/plaf/JSRadioButtonUI.js
-swingjs/plaf/JSRootPaneUI.js
-swingjs/plaf/JSScrollBarUI.js
-swingjs/plaf/JSScrollPaneUI.js
-swingjs/plaf/JSSeparatorUI.js
-swingjs/plaf/JSSliderUI.js
-swingjs/plaf/JSTextAreaUI.js
-swingjs/plaf/JSTextFieldUI.js
-swingjs/plaf/JSTextUI.js
-swingjs/plaf/JSTextViewUI.js
-swingjs/plaf/JSViewportUI.js
-swingjs/plaf/JSWindowUI.js
-swingjs/plaf/LazyActionMap.js
-swingjs/plaf/Resizer.js
-swingjs/plaf/TextListener.js
-
-
diff --git a/swingjs/ver/pre-long/differences.txt b/swingjs/ver/pre-long/differences.txt
deleted file mode 100644 (file)
index 60f5fcc..0000000
+++ /dev/null
@@ -1,1541 +0,0 @@
-Notes
-=====
-
----IMPORTANT CHARACTER SET NOTE---
-
-It is critical that all development work in Java2Script 
-be done in UTF-8. This means:
-
-- making sure your Eclipse project is set up for UTF-8 (not the Eclipse default?)
-- making sure your server can serve up UTF-8 by default for any browser-loaded files
-- making sure you don't edit a Java2Script class file or one of the site .js files
-    using a non-UTF-8 editor. It may replace non-Latin characters with "?" or garbage.
-- making sure that your web pages are delivered with proper headings indicating HTML5 and UTF-8
-
-<!DOCTYPE html>
-<html>
-<head>
-<meta charset="utf-8">
-
-Note that the DOCTYPE tag is critical for some browsers to switch into HTML5 mode. (MSIE?)
-
-
-
-  
-In particular, the Mandarin character ç§˜ (mi; "secret") is used extensively throughout
-the SwingJS class files to distinguish j2s-specific fields and methods that must not 
-ever be shadowed or overridden by subclasses. For example, we see in java.lang.Thread.java:
-
-               public static JSThread ç§˜thisThread;
-
-----------------------------------
-
-
-updated 12/6/2020 -- note about restrictions on long, including BitSet and Scanner
-updated 3/21/2020 -- adds note about HashMap, Hashtable, and HashSet iterator ordering
-updated 3/20/2020 -- adds note about interning, new String("xxx"), and "xxx"
-updated 2/26/2020 -- adds Graphics.setClip issue
-updated 12/22/19 -- additional issues
-updated 11/03/19 -- adds information about File.exists() and points to src/javajs/async
-updated 10/26/19 -- adds information about File.createTempFile()
-updated 8/16/19 -- minor typos and added summary paragraph
-updated 7/19/19 -- clarification that AWT and Swing classes are supported directly
-updated 5/13/19 -- Mandarin U+79D8 reserved character; Missing Math methods; int and long
-updated 5/10/19 -- adds a section on static issues in multi-(duplicate)-applet pages
-updated 1/4/19 -- nio
-updated 9/15/18 -- adds integer 1/0 == Infinity
-updated 7/24/18 -- most classes replaced with https://github.com/frohoff/jdk8u-jdk
-updated 6/5/17 -- reserved package name "window"
-updated 3/11/17 -- myClass.getField
-updated 3/7/17 -- overloading of JSplitPane.setDividerLocation
-updated 3/2/17 -- more indication of classes not implemented (KeyListener)
-
-=============================================================================
-SwingJS and OpenJDK 8+
-=============================================================================
-
-SwingJS implements a wide range of the Java language in JavaScript. The base
-version for this implementation is OpenJDK8. some classes are implemented using 
-older source code, and there are some missing methods. For the most part, this is 
-no real problem. You can add or modify any java class just be adding it as source
-in your project. Or (preferably) you can contact me, and I can get it into the 
-distribution. Or (even more preferably) you can do that via a patch submission. 
-
-=================
-DESIGN PHILOSOPHY
-=================
-
-The java2script/SwingJS design goal is to recreate a recognizable, easily debuggable
-equivalent in JavaScript for as much of Java as practical. This means, for example, 
-that one can call in JavaScript 
-
-  new java.util.Hashtable()
-  
-and for all practical purposes it will appear that Java is running.
-
-
-Method and Field Disambiguation
--------------------------------
-
-SwingJS has no problem with the overloading of methods, for example:
-
-  public void print(int b);
-  public void print(float b);
-
-JavaScript does not allow overloading of methods, and the common practice in
-Java of naming a field the same as a method -- isAllowed and isAllowed() -- is
-not possible in JavaScript. As a result, SwingJS implements "fully-qualified" 
-method names using "$" parameter type separation. Thus, these methods in SwingJS
-will be referred to as print$I and print$F. The rules for this encoding are
-relatively simple: 
-
-1. The seven primitive types in Java are encoded $I (int), $L (long), $F (float), 
-$D (double), $B (byte) $Z (boolean), and $H (short). 
-
-2. String and Object are encoded as $S and $O, respectively.
-
-3. "java_lang_" is dropped for all other classes in the java.lang package (as in Java).
-   For example:  $StringBuffer, not $java_lang_StringBuffer
-
-4. All other classes are encoded as 
-
- "$" + Class.getName().replace(".","_")
-
-For example, in Java we see:
-
-  public void equals(Object o) {...}
-
-Whereas in SwingJS we have:
-
-  Clazz.newMeth(C$, 'equals$O', function (o) {...}
-
-And 
-
- this.getContentPane().add(bar, "North");
-
-becomes
-
- this.getContentPane$().add$java_awt_Component$O(bar, "North");
-
-5. Arrays are indicated with appended "A" for each level. So
-
-  setDataVector(Object[][] dataVector, Object[] columnIdentifiers)
-  
-becomes
-
-  setDataVector$OAA$OA(dataVector, columnIdentifiers)
-
-(It is recognized that this design does introduce a bit of ambiguity, in that
- in principal there could be user class named XA and X in the same package,
- and methods a(X[]) and a(XA) in the same class that cannot be distinguished.
- The benefit of this simple system, however, triumphed over the unlikelyhood
- of that scenario.) The transpiler could be set to flag this possibility.
-
-6. Constructors are prepended with "c$". So 
-
-  public JLabel(String text) {...}
-  
-becomes:
-
-  Clazz.newMeth(C$, 'c$$S', function (text) {...});
-
-Field disambiguation involves prepending. In Java, a class and its subclass 
-can both have the same field name, such as 
-
- boolean visible;
-When this happens, it is called "shadowing", and though not recommended, Java allows
-it. The Java2Script transpiler will prepend such shadowing fields with "$" so that the
-subclass instance has both "visible" (for use in its methods inherited from its
-superclass) and "$visible" (for its own methods). Thus, we might see in Java:
-
-  this.visible = super.visible;
-  
-while in SwingJS we will see:
-
-  this.$visible=this.visible;
-
-since JavaScript does not have the "super" keyword.
-
-
-
-Parameterless methods such as toString() are appended with "$" to become toString$().
-The one exception to this rule is private methods, which are saved in (truly) private 
-array in the class (and are not accessible by reflection). Private parameterless 
-methods retain their simple Java name, since they cannot conflict with field names.
-
-This renaming of methods has a few consequences, which are discussed more fully below.
-See particularly the section on "qualified field and method names", where it is described
-how you can use packages or classes or interfaces with ".api.js" in them to represent JavaScript
-objects for which all method names are to be left unqualified. Note that it is not 
-possible to cherry-pick methods to be unqualified; only full packages, classes or 
-interfaces can hold this status.
-
-The swingjs.api.js package in particular contains a number of useful interfaces that
-you can import into your project for JavaScript-specific capabilities.
-
-
-Applet vs. Application
-----------------------
-
-One of the very cool aspects of SwingJS is that it doesn't particularly matter if a browser-based
-Java app is an "applet" or an "application". We don't need JNLP (Java Network Launch Protocol) 
-because now we can just start up any Java application in a browser just as easily as any applet.
-The associative array that passes information to the SwingJS applet (information that formerly
-might have been part of the APPLET tag, such as width, height, and codebase, always referred to 
-in our writing as "the Info array") allows the option to specify the JApplet/Applet "code" 
-class or the application "main" class. Either one will run just fine.
-
-
-Performance
------------
-
-Obviously, there are limitations. One is performance, but we have seen reproducible 
-performance at 1/6 - 1/3 the speed of Java. Achieving this performance may require
-some refactoring of the Java to make it more efficient in both Java and JavaScript. 
-"for" loops need to be more carefully crafted; use of "new" and "instanceof" need to be
-minimized in critical areas. Note that method overloading -- that is, the same method name
-with different parameters, such as read(int) and read(byte) -- is no longer any problem. 
-  
-
-Threads
--------
-
-Although there is only a single thread in JavaScript, meaning Thread.wait(), Thread.sleep(int) and 
-Thread.notify() cannot be reproduced, we have found that this is not a serious limitation. 
-For example, javax.swing.Timer() works perfectly in JavaScript. All it means is that threads 
-that use sleep(int) or notify() must be refactored to allow Timer-like callbacks. That is, 
-they must allow full exit and re-entry of Thread.run(), not the typical while/sleep motif. 
-
-The key is to create a state-based run() that can be exited and re-entered in JavaScript.
-
-
-Static fields
--------------
-
-Final static primitive "constant" fields (String, boolean, int, etc.) such as 
-
-static final int TEST = 3;
-static final String MY_STRING = "my " + "string";
-
-are converted to their primitive form automatically by the Eclipse Java compiler 
-and do not appear in the JavaScript by their names. 
-
-Other static fields are properties of their class and can be used as expected.
-
-Note, however, that SwingJS runs all "Java" code on a page in a common "jvm" 
-(like older versions of Java). So, like the older Java schema, the JavaScript 
-equivalents of both applets and applications will share all of their static 
-fields and methods. This includes java.lang.System. 
-
-Basically, SwingJS implementations of Java run in a browser page-based sandbox 
-instead of an applet-specific one.
-
-In general, this is no problem. But if we are to implement pages with 
-multiple applets present, we must be sure to only have static references 
-that are "final" or specifically meant to be shared in a JavaScript 
-environment only (since they will not be shared in Java).
-
-A simple solution, if static non-constant references are needed, is to attach the 
-field to Thread.currentThread.threadGroup(), which is an applet-specific reference.
-Be sure, if you do this, that you use explicit setters and getters:
-
-For example, 
-
-private static String myvar;
-
-...
-
-public void setMyVar(String x) {
-  ThreadGroup g = Thread.currentThread().threadGroup();
-  /**
-   * @j2sNative g._myvar = x;
-   * 
-   */
-   {
-     myvar = x;
-   }
-}
-
-public String getMyVar() {
-  ThreadGroup g = Thread.currentThread().threadGroup();
-  /**
-   * @j2sNative return g._myvar || null;
-   * 
-   */
-   {
-     return myvar;
-   }
-}
- in Java will get and set x the same in JavaScript and in Java. 
-A convenient way to do this in general is to supply a singleton class with
-explicitly private-only constructors and then refer to it in Java and in JavaScript
-instead of using static field, referring to myclass.getIntance().xxx instead of 
-myclass.xxx in Java (and JavaScript). 
-
-This was done extensively in the Jalview project. See jalview.bin.Instance.
-
-
-Helper Packages -- swingjs/ and javajs/
----------------------------------------
-
-The SwingJS library is the swingjs/ package. There are interfaces that may be of assistance
-in swingjs/api, but other than that, it is not recommended that developers access classes in 
-this package. The "public" nature of their methods is really an internal necessity.
-
-In addition to swingjs/, though, there are several useful classes in the javajs/ package
-that could be very useful. This package is a stand-alone package that can be 
-cloned in any Java project that also would be great to have in any JavaScript project
--- SwingJS-related or not. Functionality ranges from reading and writing various file 
-formats, including PDF, BMP, PNG, GIF, JPG, JSON, ZIP, and CompoundDocument formats.
-
-A variety of highly efficient three- and four-dimensional point, vector, matrix, and 
-quaternion classes are included, as they were developed for JSmol and inherited from that
-project. 
-
-Of particular interest should be javajs/async/, which includes
-
-javajs.async.Async
-javajs.async.AsyncColorChooser
-javajs.async.AsyncDialog
-javajs.async.AsyncFileChooser
-
-See javajs.async.Async JavaDoc comments for a full description of 
-these useful classes.
-
-
-Modal Dialogs
--------------
-
-Although true modal dialogs are not possible with only one thread, a functional equivalent -- 
-asynchronous modal dialogs -- is relatively easy to set up. All the JOptionPane dialogs will
-return PropertyChangeEvents to signal that they have been disposed of and containing the results. 
-See below and classes in the javajs.async package.
-
-
-Native calls
-------------
-
-Native calls in Java are calls to operating system methods that are not in Java. JavaScript
-has no access to these, of course, and they must all be replaced by JavaScript equivalents.
-Fortunately, they are not common, and those that are present in Java (for example, in calculating
-checksums in ZIP file creation) are at a low enough level that most developers do not utilize them
-or do not even have access to them. All native calls in Java classes have been replaced by 
-Java equivalents.
-
-
-Swing GUI Peers and UIClasses
------------------------------
-
-One of the biggest adaptations introduced in SwingJS is in the area of the graphical 
-user interface. The issue here is complex but workable. In Java there are two background 
-concepts -- the Component "peer" (one per "heavy-weight" component, such as a Frame) and the 
-component "uiClass" (one per component, such as JButton or JTextField).
-
-Peers are native objects of the operating system. These are the virtual buttons and text areas
-that the user is interacting with at a very base level. Their events are being passed on to 
-Java or the browser by the operating system. UI classes provide a consistent "look and feel" 
-for these native objects, rendering them onto the native window canvas and handling all 
-user-generated events. They paint the borders, the backgrounds, the highlights, of every 
-control you see in Java. There is one-to-one correspondence of Swing classes and UI classes. 
-Setting the Look and Feel for a project amounts to selecting the directory from which to draw 
-these UI classes. The UI classes can be found in the javax.swing.plaf ("platform look and feel") 
-package.
-
-Early on in the development of SwingJS, we decided not to fully reproduce the painfully detailed 
-bit-by-bit painting of controls as is done in Java. Instead, we felt it was wiser to utilize the standard
-HTML5 UI capabilities as much as possible, using DIV, and INPUT especially, with extensive use
-of CSS and sometimes jQuery (menus, and sliders, for example). Thus, we have created a new 
-set of UIs -- the "HTML5 Look and Feel". These classes can be found in swingjs.plaf. Besides being
-more adaptable, this approach allows far more versatility to SwingJS developers, allowing them
-to modify the GUI to suit their needs if desired.
-
-In SwingJS, since we have no access to native peers except through the browser DOM,
-it seemed logical to merge the peer and UI idea. So instead of having one peer per heavy-weight control and
-one UI class instance for each control type, we just have one UI class instance per control, and
-that UI class instance is what is being referred to when a "peer" is notified. 
-
-In some ways this is a throw back to when all of Swing's components were subclasses of
-specific AWT components such as Button and List. These "heavy-weight components" all had their 
-own individual native peers and thus automatically took on the look and feel provided by the OS. 
-Later Swing versions implemented full look and feel for all peers, leaving only JDialog, JFrame,
-and a few other classes to have native peers. But in SwingJS we have again a 1:1 map of component
-and UI class/peer instance.
-
-The origin of most issues (read "bugs") in relation to the GUI will probably be found in the
-swingjs.plaf JSxxxxUI.java code.
-
-  
-Swing-only Components -- no longer an issue
--------------------------------------------
-
-Swing was introduced into Java well after the Java Abstract Window Toolkit (AWT) was well
-established. As such, its designers chose to allow AWT controls such as Button and List to be used 
-alongside their Swing counterparts JButton and JList. Reading the code, it is clear that this 
-design choice posed a huge headache for Swing class developers. 
-
-For SwingJS, we decided from the beginning NOT to allow this mixed-mode programming and 
-instead to require that all components be Swing components. 
-
-However, this is no longer an issue. All AWT components in SwingJS are now subclasses of 
-javax.swing.JComponent. So far, we have found no problem with this.
-
-The a2s Adapter Package
------------------------
-
-Originally, we thought that we would restrict ourselves to JApplets only. That is, only
-Swing-based applets. But as we worked, we discovered that there are a lot of great 
-applets out there that are pre-Swing pure-AWT java.applet.Applet applets. Our problem was 
-that we also wanted it to be possible to quickly adapt these applets to JavaScript as well.
-The solution turned out to be simple: Write a package (a2s) that recreates the interface for 
-non-Swing components as subclasses of Swing components. Thus, a2s.Button subclasses javax.swing.JButton
-but also accepts all of the methods of java.awt.Button. This works amazingly well, with a few
-special adaptations to the core javax.swing to be "AWT-aware." All AWT components now subclass 
-a2s components, which in turn subclass JComponents. So no changes in code are necessary. We have
-successfully transpiled over 500 applets using this strategy. (Kind of surprising, actually, that
-the original Java developers did not see that option. But we have a hindsight advantage here.)
-
-
-Working with Files
-==================
-
-Simple String file names are not optimal for passing information about
-read files within SwingJS applications. 
-All work with files should either use Path or File objects exclusively. 
-These objects, after a file is read or checked for existence, will already 
-contain the file byte[] data. Doing something like this:
-
-File f = File("./test.dat");
-boolean isOK = f.exists();
-
-will load f with its byte[] data, if the file exists. 
-
-But if after that, we use:
-
-File f2 = new File(f.getAbsolutePath());
-
-f2 will not contain that data. Such copying should be done as:
-
-File f2 = new File(f);
-
-in which case, the byte[] data will be transferred.
-
-
-SwingJS uses the following criteria to determine if File.exists() returns true:
-
-(1) if this File object has been used directly to read data, or 
-(2) if reading data using this File object is successful.
-
-Note that you cannot check to see if a file exists before input or if it 
-was actually written or if it already exists prior to writing in SwingJS.  
-
-Thus, you should check each use of file.exists() carefully, and if necessary, provide a J2sNative 
-block that gives an appropriate "OK" message, for example:
-
-(/** @j2sNative 1 ? false : */ outputfile.exits())
-
-or 
-
-(/** @j2sNative 1 ? true : */ inputfile.exits())
-
-Temporary files can be created in SwingJS. SwingJS will maintain a pseudo-filesystem for files 
-created with File.createTempFile(). This is useful in that closure of writing to a temporary file 
-does not generate a pseudo-download to the user's machine.
-
-
-UNIMPLEMENTED CLASSES BY DESIGN
-===============================
-
-The SwingJS implementation of the following classes are present 
-in a way that gracefully bypasses their functionality:
-
-accessibility
-security
-serialization
-
-
-
-TODO LIST FOR UNIMPLEMENTED CLASSES
-===================================
-
-JEditorPane (minimal implementation) - DONE 12/2018; some issues still
-JSplitPane - DONE 8/2018
-JTabbedPane - DONE 10/2018
-JTree - done 12/2019
-
-
-MINOR ISSUES--required some rewriting/refactoring by Bob and Udo  
-================================================================
-
-Thread.currentThread() == dispatchThread
-
-
-MINOR ISSUES--requiring some rewriting/refactoring outside of SwingJS  
-=====================================================================
-
-See below for a full discussion.
-
-Restrictions on long
-Restriction on BitSet and Scanner
-HashMap, Hashtable, and HashSet iterator ordering
-interning, new String("xxx") vs "xxx"
-Names with "$" and "_"
-positive integers do not add to give negative numbers
-ArrayIndexOutOfBounds
-java.awt.Color
-native methods
-javax.swing.JFileDialog
-key focus
-LookAndFeel and UI Classes
-System.exit(0) does not stop all processes
-list cell renderers must be JComponents
-myClass.getField not implemented
-"window" and other reserved JavaScript names
-reserved field and method names
-qualified field and method names
-missing Math methods
-Component.getGraphics(), Graphics.dispose()
-Graphics.setClip()
-
-MAJOR ISSUES--for Bob and Udo within SwingJS
-============================================
-
-fonts
-OS-dependent classes
-AWT component peers
-some aspects of reflection
-
-MAJOR ISSUES--to be resolved by implementers
-============================================
-
-fonts
-threads
-modal dialogs
-image loading
-BigDecimal not fully implemented 
-no format internationalization
-no winding rules
-text-related field implementation
-Formatter/Regex limitations
-integer 1/0 == Infinity
-
-======================================================================== 
-
-DISCUSS
-=======
-
-Table row/col sorter needs checking after removal of java.text.Collator references
-
-I had to move all of SunHints class to RenderingHints, or the 
-two classes could not be loaded. Shouldn't be a problem, I think. The sun classes are
-not accessible to developers in Java anyway, since they are generally package private.
-
-========================================================================== 
-
-//////////////////////////////////////////////////////////////////////////////
-
-UNIMPLEMENTED CLASSES
-=====================
-
-accessibility
--------------
-
-All Accessibility handling has been commented out to save the download footprint.
-This removes the need for sun.misc.SharedSecrets as well. 
-Nothing says we could not implement accessibility. We just didn't.
-
-
-security
---------
-
-All JavaScript security is handled by the browser natively. 
-Thus, Java security checking is no longer necessary, and 
-java.security.AccessController has been simplified to work without
-native security checking.
-
-Note that private methods in a class are REALLY private. 
-
-
-serialization
--------------
-
-All serialization has been removed. It was never very useful for Swing anyway, 
-because one needs exactly the same Java version to save and restore serialized objects.
-
-
-keyboard accelerators and mnemonics
------------------------------------
-
-This work was completed in the spring of 2019. Note that in a browser, some 
-key strokes, particularly CTRL-keys, are not available. Bummer.
-
-
-MINOR ISSUES--required some rewriting/refactoring by Bob and Udo  
-================================================================
-
-
-Thread.currentThread() == dispatchThread
-----------------------------------------
-
-changed to JSToolkit.isDispatchThread()
-
-
-MINOR ISSUES--requiring some rewriting/refactoring outside of SwingJS  
-=====================================================================
-
-restrictions on long
---------------------
-
-Java's 64-bit long type is not supported in JavaScript. There is no Int64Array in JavaScript,
-and 0x20000000000000 + 1 evaluates to 0x20000000000000, not 0x20000000000001. 
-(Likewise, -0x20000000000000 - 1 is left unchanged.) 
-
-The largest "integer" value in JavaScript is 9007199254740991 (9.007199254740991E13, or 0x1FFFFFFFFFFFFFF).
-Effectively, you get to use only 53 bits of the long, not 64. Trying to set a long larger than
-0x1FFFFFFFFFFFFFF or smaller than -0x1FFFFFFFFFFFFFF will result in a NumberFormatException.
-
-The transpiler handles conversion to long the same as Java for all cases other than from double. 
-
-For small double values, there is no problem, and, in fact, this is a known trick used to round 
-doubles and floats toward zero:
-
-double d;
-d = (long) 3.8;
-assert(d == 3);
-d = (long) -3.8;
-assert(d == -3);
-
-SwingJS will evaluate (long) d as 0 for d > 9007199254740991 
-or d < -9007199254740991, same as Java returns for Double.NaN.
-So, in Java we have:
-
-               assert(((long) Double.NaN) == 0);
-               assert(((int) Double.NaN) == 0);
-               assert(((long) Float.NaN) == 0);
-               assert(((int) Float.NaN) == 0);
-
-and also, in JavaScript only, we also have:
-
-               double d = 0x2000000000000L;
-               assert(((long) d) == 0);
-
-
-restrictions on BitSet and Scanner
-----------------------------------
-
-Because of the issue of long being only 53 bits, any time a method returns a long value, considerations must
-be made as to whether this will work in JavaScript. In particular, BitSet and Scanner have issues. 
-
-In SwingJS, java.util.BitSet has been implemented as a 32-bit integer-based bitset. This was no problem in
-Java 6, but starting with Java 7, a method was added to BitSet that allows for the extraction of the 
-underlying long[] word data. This is not work in JavaScript. Instead, SwingJS java.util.Bitset.toLongArray() will deliver 
-32-bit int[] data.
-
-SwingJS Scanner has hasNextLong() and nextLong(), and although it will scan through long numbers,
-Scanner will choke on long numbers greater than the JavaScript 53-bit limit. hasNextLong() will 
-return false, and nextLong() will throw an InputMismatchException triggered by the NumberFormatException
-thrown by Long.parseLong(). 
-
-
-HashMap, Hashtable, and HashSet iterator ordering
--------------------------------------------------
-
-In Java, iterators for HashMap, Hashtable, and HashSet do not guarantee any particular order. 
-From the HashMap documentation for Java 8:
-
-       This class makes no guarantees as to the order of the map; in particular, it does not 
-       guarantee that the order will remain constant over time.
-Likewise, for HashSet (because it is simply a convenience method for HashMap<Object,PRESENT>:
-
-       [HashSet] makes no guarantees as to the iteration order of the set.
-
-JavaScript's Map object is different. It is basically a LinkedHashMap, so it guarantees iteration
-in order of object addition.
-
-Starting with java2script 3.2.9.v1, these classes use the JavaScript Map object rather than hash codes
-whenever all keys are strictly of JavaScript typeof "string". If any key is introduced that is not a string, the
-implementation falls back to using hash codes, the same as Java. 
-
-Note strings created using new String("xxxx") are NOT typeof "string"; they are typeof "object".
-
-The result is significantly faster performance (3-12 x faster) than originally, and up to 3 x faster
-performance in JavaScript than in Java itself. Right. Faster than Java. 
-
-The JavaScript Map implementation is implemented UNLESS the constructor used is the one that
-specifies both initial capacity and load factor in their constructor. Thus, 
-
-new Hashtable()
-new HashMap()
-new HashMap(16)
-new HashSet()
-
-all use the JavaScript Map. But
-
-new Hashtable(11, 0.75f)
-new HashMap(16, 0.75f)
-new HashSet(16, 0.75f)
-
-do not. 
-
-This design allows for opting out of the JavaScript Map use in order to retain the exact behavior of 
-iterators in JavaScript as in Java.
-
-
-interning, new String("xxx") vs "xxx"
--------------------------------------
-
-Note that the following are true in JavaScript:
-
-typeof new String("xxxx") == "object"
-typeof "xxxx" == "string"
-var s = "x";typeof ("xxx" + s) == "string"
-
-There is no equivalence to this behavior in Java, where a String is a String is a String.
-
-Be aware that SwingJS does not always create a JavaScript String object using JavaScript's 
-new String(...) constructor. It only does this for Java new String("xxxx") or new String(new String()). 
-
-In all other cases, new String(...) (in Java) results in a simple "xxxx" string in JavaScript. 
-That is, it will be JavaScript typeof "string", not typeof "object". 
-
-The reason for this design is that several classes in the Java core use toString() 
-methods that return new String(), and those classes that do that would cause a JavaScript error
-if implicitly stringified if new String() returned a JavaScript String object. 
-
-This is fine in JavaScript
-
-test1 = function() { return { toString:function(){ return "OK" } } }
-"testing" + new test1()
->> "testingOK"
-
-But for whatever reason in JavaScript:
-
-test2 = function() { return { toString:function(){ return new String("OK") } } }
-"testing" + new test2()
->> Uncaught TypeError: Cannot convert object to primitive value
-
-The lesson here is never to use 
-
-  return new String("...");
-
-in a Java toString() method. In Java it will be fine; in JavaScript it will also be fine as long as
-that method is never called in JavaScript implicitly in the context of string concatenation.
-
-A note about interning. Consider the following six Java constructions, where we have a == "x";
-
-"xxx"
-"xx" + "x"
-new String("xxx").intern()
-
-new String("xxx")
-"xx" + a.toString()
-"xx" + a
-
-All six of these will return java.lang.String for .getClass().getName().
-However, the first three are String literals, while the last three are String objects. 
-Thus:
-        "xxx" == "xxx"
-        "xxx" == "xx" + "x"
-        "xxx" == new String("xxx").intern()
-
-but none of the other three are equivalent to "xxx" or each other:
-
-              "xxx" != new String("xxx")
-              "xxx" != "xx" + a.toString()
-              "xxx" != "xx" + a
-  new String("xxx") != new String("xxx") 
-           "xx" + a != new String("xxx") 
-
-etc.
-
-As in Java, in SwingJS, all of the following Java assertions pass as true:
-
-               assert("xxx" == "xx" + "x"); 
-               assert("xxx" == ("xx" + a).intern()); 
-               assert("xxx" === new String("xxx").intern()); 
-               
-and both of these do as well:
-
-               assert(new String("xxx") != "xxx"); 
-               assert(new String("xxx") != new String("xxx")); 
-
-But the following two fail to assert true:
-
-        assert("xxx" != "xx" + a);
-        assert("xxx" != "xx" + a.toString());
-
-because in JavaScript, both of these right-side expressions evaluate to a simple "interned" string.
-
-In Java, however, these assertions are true because Java implicitly "boxes" String 
-concatentaion as a String object, not a literal. 
-
-Most of us know not to generally use == with Strings unless they are explicitly interned. 
-Where this problem may arise, though, is in IdentityHashMap, which compares objects using 
-System.identityHashCode(), which is not the same for different objects or their string literal equivalents.
-
-My recommendation, if you need to use IdentityHashMap with strings is to always use an explicit String.intern()
-for any keys -- unless you really want to keep every string as separate keys even if they are the same sequence, 
-in which case, use new String(). This will work in Java and in  JavaScript.
-
-Be aware when working with strings that come from SwingJS and are being used by other JavaScript modules
-that those that are String objects will return "object" for the JavaScript typeof operator, not "string".
-
-The easy way to ensure this is no problem is to concatenate strings with "" to force immediate interning:
-
-  var x = aJavaObject.getString() + "";
-
-unless you are certain that the string is being returned is a raw JavaScript string.   
-
-Names with "$" and "_"
-----------------------
-
-For the most part, this should be no problem. 
-
-Note that the use of $ and _ in Java field names has always been discouraged:
-[https://docs.oracle.com/javase/tutorial/java/nutsandbolts/variables.html]
-
-       You may find some situations where auto-generated names will contain the dollar sign, 
-       but your variable names should always avoid using it. A similar convention 
-       exists for the underscore character; while it's technically legal to begin your 
-       variable's name with "_", this practice is discouraged.
-
-Some impacts of transpiling method names with full qualification:
-
-1) SwingJS will introduce fields that start with $ or _. These will not conflict
-   if the above convention is followed.
-   
-2) Fields that have the same Java name as a method are not an issue. 
-
-3) Fields that have a Java name with $ that matches a transpiled method name, 
-   such as toString$, will need to be refactored in Java to not have that name collision.
-   
-4) Fields in a subclass that have the same name as private fields in a superclass
-   represent a name collision, because the superclass method needs to call its private
-   field even if invoked from a subclass. The solution was to modify the subclass field
-   name using one or more prepended $.
-   
-5) Use of Class.getDeclaredMethods() reflection will return Method objects having the transpiled 
-   name, not the Java name. This could require some j2sNative adjustment 
-   to strip the $... parameters from the name if that is needed. 
-
-6) Use of Method.getParameterTypes() should work fine, provided class names
-   do not contain "_". This is because the transpiler converts "." to "_" when
-   creating the fully qualified JavaScript name.
-
-
-positive integers do not add to give negative numbers
------------------------------------------------------
-
-In Java, the following is true:
-
-  2000000000 + 2000000000 == -294967296
-
-But in SwingJS, that will be 4000000000. So, for example, the following
-strategy will fail in SwingJS:
-
-               int newLength = lineBuf.length * 2;
-               if (newLength < 0) {
-                       newLength = Integer.MAX_VALUE;
-               }
-
-"-1" in JavaScript is not 0xFFFFFFFF.
-
-And one must take care to not compare a negative number with a 32-bit mask. So
-
-(b & 0xFF000000) == 0xFF000000
-
-is true in Java for (int) b = -1, but is false in JavaScript, because 0xFF000000 is 4278190080, 
-while (-1 & 0xFF000000) is, strangely enough, -16777216, and, in fact, 
-
-(0xFF000000 & 0xFF000000) != 0xFF000000
-
-because -16777216 is not 4278190080.
-
-The fix is that one must compare similar operations:
-
-if ((b & 0xFF000000) == (0xFF000000 & 0xFF000000)) .....
-
-Importantly, the JavaScript Int32Array does behave properly. From 
-the Firefox developer console:
-
->> x = new Int32Array(1)
-<- Int32Array(1) [ 0 ]
->> x[0] = 4000000000
-<- 4000000000
->> x[0]
-<- -294967296
-
-Notice that, perhaps unexpectedly, the following two constructs produce 
-different results in JavaScript:
-
-x = new Int32Array(1);
-b = x[0] = 4000000000;
-
-(b will be 4000000000)
-
-and
-
-x = new Int32Array(1);
-x[0] = 4000000000;
-b = x[0];
-
-(b will be -294967296)
-
-
-SwingJS leverages array typing to handle all byte and short arithmetic so as
-to ensure that any byte or short operation in JavaScript does give the same 
-result in Java. The design decision to not also do this with integer math was
-a trade-off between performance and handling edge cases.
-
-
-ArrayIndexOutOfBounds
----------------------
-
-You cannot implicitly throw an ArrayIndexOutOfBoundsException in JavaScript.
-JavaScript will simply return "undefined", not throw an Exception. So:
-
-boolean notAGoodIdeaIsOutOfBounds(String[] sa, int i) {
-  try {
-     return (sa[i] == sa[i]);
-  } catch (ArrayIndexOutOfBoundsException e) {
-       return false;
-  }
-}
-
-will work in Java but not in JavaScript. Code should not depend upon this sort 
-of trap anyway, if you ask me. 
-
-Throwable vs Error vs Exception
--------------------------------
-
-True JavaScript errors are trapped as Throwable, whereas you can still trap
-Error and Exception as well. So if you want to be sure to catch any JavaScript
-error, use try{}catch (Throwable t){}, not try{}catch (Exception e){}. 
-
-j
-ava.awt.Color
---------------
-
-ColorSpace: only "support" CS_sRGB.
-
- TODO -- any volunteers??
-
-javax.swing.JFileDialog
------------------------
-
-HTML5 cannot expose a file reading directory structure. But you certainly 
-can still do file reading and writing. It just works a little differently.
-It's a simple modification:
-
-               b = new JButton("FileOpenDialog");
-               b.addActionListener(new ActionListener() {
-
-                       @Override
-                       public void actionPerformed(ActionEvent e) {
-                               JFileChooser fc = new JFileChooser();
-                               Test_Dialog.this.onDialogReturn(fc.showOpenDialog(Test_Dialog.this));
-                               // Java will wait until the dialog is closed, then enter the onDialogReturn method.
-                               // JavaScript will exit with NaN immediately, and then call back with its actual value
-                               // asynchronously.
-                       }
-
-               });
-       
-               public void onDialogReturn(int value) {
-                       if (value != Math.floor(value))
-                               return; // in JavaScript, this will be NaN, indicating the dialog has been opened
-                       // If we are here, the dialog has closed, in both Java and JavaScript.
-                       System.out.println("int value is " + value);
-               }
-
-
-       @Override
-       public void propertyChange(PropertyChangeEvent event) {
-               Object val = event.getNewValue();
-               String name = event.getPropertyName();
-               System.out.println(name);
-               switch (event.getSource().getClass().getName()) {
-               case "javax.swing.JOptionPane":
-                       switch (name) {
-                       case "inputValue":
-                               onDialogReturn(val);
-                               return;
-                       case "value":
-                               if (val instanceof Integer)
-                                       onDialogReturn(((Integer) val).intValue());
-                               else
-                                       onDialogReturn(val);
-                               return;
-                       }
-                       break;
-               case "javax.swing.ColorChooserDialog":
-                       switch (name) {
-                       case "SelectedColor":
-                               onDialogReturn(val);
-                               return;
-                       }
-                       break;
-               case "javax.swing.JFileChooser":
-                       switch (name) {
-                       case "SelectedFile":
-                               File file = (File) val;
-                               byte[] array = (val == null ? null : /** @j2sNative file.秘bytes || */
-                                               null);
-                               onDialogReturn("fileName is '" + file.getName() + "'\n\n" + new String(array));
-                               return;
-                       }
-                       break;
-               }
-               System.out.println(
-                               event.getSource().getClass().getName() + " " + event.getPropertyName() + ": " + event.getNewValue());
-       }
-
-
-Developers are encouraged to create a separate class that handles general calls to JFileDialog. 
-An example class can be found in the SwingJS distribution as 
-
-/sources/net.sf.j2s.java.core/src/javajs/async/AsyncFileChooser.java.
-
-
-javax.swing.JOptionPane dialogs
--------------------------------
-
-For this action to work, the parentComponent must implement
-propertyChangeListener, and any call to JOptionPanel should allow for
-an asynchronous response, meaning that there is no actionable code following the
-call to the dialog opening. 
-
-In addition, for compatibility with the Java version, implementation should
-wrap the call to getConfirmDialog or getOptionDialog in a method call to
-handle the Java:
-
-onDialogReturn(JOptionPane.showConfirmDialog(parentFrame,
-messageOrMessagePanel, "title", JOptionPane.OK_CANCEL_OPTION));
-
-Then parentFrame.propertyChange(event) should also call onDialogReturn.
-
-This will then work in both Java and JavaScript.
-
-Note that there is an int and an Object version of onDialogReturn().
-
-
-In JavaScript:
-
-The initial return from JOptionPane.showConfirmDialog and showMessageDialog
-will be (SwingJS) JDialog.ASYNCHRONOUS_INTEGER (NaN), testable as an impossible 
-Java int value using ret != -(-ret) if the parent implements PropertyChangeListener, or -1
-(CLOSE_OPTION) if not.
-
-For showOptionDialog (which returns Object) or showInputDialog (which returns
-String), the initial return will be (SwingJS) JDialog.ASYNCHRONOUS_OBJECT, testable as
-((Object) ret) instanceof javax.swing.plaf.UIResource if the parent implements
-PropertyChangeListeneer, or null if not.
-
-The second return will be the desired return.
-
-In Java:
-
-The initial return will be the one and only modal final return.
-
-
-
-For full compatibility, The calling method must not continue beyond this
-call.
-
-All of the standard Java events associated with Components are also
-available.
-
-Certain fall back mechanisms are possible, where onReturn does not exist, but
-only for the following cases:
-
-
-For showMessageDialog, for WARNING_MESSAGE and ERROR_MESSAGE, a simple
-JavaScript alert() is used, returning 0 (OK_OPTION) or -1 (CLOSED_OPTION).
-
-For showInputDialog, if the message is a string, a simple JavaScript prompt()
-with input box is used, returning the entered string or null.
-
-For showConfirmDialog, a simple JavaScript confirm() is used, in which case:
-
-for YES_NO_OPTION: YES_OPTION or NO_OPTION
-
-for YES_NO_CANCEL_OPTION: YES_OPTION or CANCEL_OPTION
-
-for OK_CANCEL_OPTION or any other: OK_OPTION or CANCEL_OPTION
-
-Note that you should implement a response for CLOSED_OPTION for
-showConfirmDialog. For other dialogs, a null return indicates the dialog was
-closed, just as for Java.
-
-Developers are encouraged to create a separate class that handles general calls. 
-An example class can be found in the SwingJS distribution as src/javajs/async/AsyncDialog.java.
-Very simple modifications to the Java allows asynchronous operation using AsyncDialog. Here
-is a simple "do you want to close this frame" example, where you can see that what we have
-done is to set the reply into an ActionListener that is defined in the constructor of 
-the AsyncDisplay object:
-
-// Original:
-//
-//     private void promptQuit() {
-//             int sel = JOptionPane.showConfirmDialog(null, PROMPT_EXIT, NAME, JOptionPane.YES_NO_OPTION);
-//             switch (sel) {
-//             case JOptionPane.YES_OPTION:
-//                     resultsTab.clean();
-//                     seqs.dispose();
-//                     if (fromMain) {
-//                             System.exit(0);
-//                     }
-//                     break;
-//             }
-//     }
-
-       private void promptQuitAsync() {
-               new AsyncDialog(new ActionListener() {
-
-                       @Override
-                       public void actionPerformed(ActionEvent e) {
-                           int sel = ((AsyncDialog)e.getSource()).getOption();
-                               switch (sel) {
-                               case JOptionPane.YES_OPTION:
-                                       resultsTab.clean();
-                                       seqs.dispose();
-                                       if (fromMain) {
-                                               System.exit(0);
-                                       }
-                                       break;
-                               }
-                       }}).showConfirmDialog(null, PROMPT_EXIT, NAME, JOptionPane.YES_NO_OPTION);
-       }
-
-Very simple! 
-
-
-native methods
---------------
-
-The J2S compiler ignores all static native method declarations.
-Anything of this nature needs to be implemented in JavaScript if it is needed,
-using j2sNative blocks:
-
-/**
- * @j2sNative
- *
- *    var putYourJavaScriptCodeHere
- *
- */
- Note that if you follow that directly with a {...} block, then 
- the javadoc code will run in JavaScript, and the {...} code will run in Java.
-key Focus
----------
-
-As of June, 2019, the keyboard focus manager is fully implemented. 
-The one catch is that JTextPane and JTextArea, which already consume
-VK_TAB in Java, cannot use CTRL-TAB to continue a tabbing cycle around
-the components in a window. Instead, CTRL-TAB is absorbed by the browser. 
-
-
-LookAndFeel and UI Classes
---------------------------
-
-SwingJS implements the native browser look and feel as swingjs.plaf.HTML5LookAndFeel. 
-There are small differences between all look and feels -- MacOS, Windows, SwingJS.
-
-Expert developers know how to coerce changes in the UI by subclassing the UI for a 
-component. This probably will not work in SwingJS. 
-
-Note that LookAndFeel in Java usually determines canvas size in a Frame because 
-different operating systems (Mac OS vs Windows vs HTML5) will have 
-different edge sizes on their frames. If you want to ensure a component size, 
-use getContentPane().setPreferredSize().
-
-
-System.exit(0) does not stop all processes
-------------------------------------------
-
-Although System.ext(int) has been implemented in JavaScript, it just closes the 
-frames, stops all pending javax.swing.Timer objects in the queue, and runs any 
-threads added using Runtime.getRuntime().addShutdownHook(Thread).
-It may not stop all "threads." So don't rely on that.
-Applications are responsible for shutting down prior to executing System.exit(0). 
-
-
-myClass.getField not implemented
---------------------------------
-
-java.lang.reflect.Field is implemented minimally. It is not
-certain that Field.getDeclaringClass() will work. If you just want a 
-value of a field, you can do this:
-
-/**
- *@j2sNative
- *
- * return myClass[name]
- */   
-
-But that is not a java.lang.reflection.Field object.
-
-
-"window" and other reserved JavaScript names
---------------------------------------------
-
-No reserved top-level JavaScript name is allowed for a package name. So, for example, 
-one must rename packages such as "window" or "document" to names such as "win" or "doc".
-
-reserved field and method names
--------------------------------
-
-In order to minimize the chance of added SwingJS field and method names colliding with ones 
-developers might use in subclassing Java classes, we have added U+79D8 (first character of Mandarin 
-"secret") to the characters already disrecommended by Java documentation ("$" and "_"). The only problem
-would be if you use that character followed by certain English words in certain classes. For example
-\u79D8canvas for JComponents (in java.awt.JSComponent) and \u79D8byte (in java.io.File).
-
-qualified field and method names
---------------------------------
-
-Method names in SwingJS are fully qualified, meaning two methods with the same Java name but different
-parameters, such as write(int) and write(double), must not have the same name in JavaScript. (In this
-case, we will have write$I and write$D.) However, in certain cases it may be desirable to leave the
-method names unqualified. In particular, when an interface actually represents a JavaScript object, 
-the transpiler can leave a method name unqualified. The default situation for this is a class name 
-includes ".api.js" (case-sensitive). This means that any method in any class in a package js within 
-a package api, or any private interface js that has an outer interface api, will have all-unqualified
-methods. An example of this is swingjs.plaf.JSComboPopupList, which needs to communicate with a jQuery 
-object directly using the following interface:
-
-       private interface api {
-
-               interface js extends JQueryObject {
-
-                       abstract js j2sCB(Object options);
-
-                       abstract Object[] j2sCB(String method);
-
-                       abstract Object[] j2sCB(String method, Object o);
-
-                       abstract Object[] j2sCB(String method, int i);
-
-                       abstract int j2sCB(String OPTION, String name);
-
-               }
-       }
-
-Notice that all these variants of j2sCB() will call the same method in JavaScript by design.
-
-
-missing Math methods
---------------------
-
-java.lang.Math is worked out, but some methods are missing, either because they
-involve long integer value that are inaccessible in JavaScript, or because I just
-didn't implement them. This is a result of continued Java development. 
-It is easy enough to add these methods if you have the source. They go into j2sClazz.js, 
-which is combined with other initial libraries into swingjs2.js by build_site.xml
-
-
-Component.getGraphics(), Graphics.dispose()
--------------------------------------------
-
-Use of component.getGraphics() is discouraged in Java and in SwingJS. 
-Specifically in SwingJS, any call to component.getGraphics() or 
-BufferedImage.createGraphics() or Graphics.create(...) should be matched with graphics.dispose(), 
-particularly when it is called outside the context of a paint(Graphics)
-call from the system. 
-
-If you see your graphics scrolling down the page with each repaint, 
-look for where you have used Component.getGraphics() and not Graphics.dispose().
-For example, this will definitely NOT work in SwingJS:
-
-  this.paint(getGraphics())
-  
-and really should not work in Java, either, as it is technically a resource memory leak.
-
-Instead, if you really do not want to use repaint(), use this:
-
-  Graphics g = getGraphics();
-  paint(g);
-  g.dispose();
-
-
-
-Graphics.setClip()
-------------------
-
-The HTML5 canvas.clip() method is permanent. You can only reset the clip using
-save/restore. This is different from Java, where you can temporarily change it using
-
-  Shape oldClip = Graphics.getClip();
-  Graphics.setClip(newClip);
-   ...
-  Graphics.setClip(oldClip); 
-
-If you need to do something like this, you must schedule the paints
-to not have overlapping clip needs.
-
-
-MAJOR ISSUES--for Bob and Udo within SwingJS
-============================================
-
-fonts
------
-
-Fonts and FontMetrics will all be handled in JavaScript. Font matching will 
-not be exact, and composite (drawn) fonts will not be supported. 
-
-SwingJS handles calls such as font.getFontMetrics(g).stringWidth("xxx") by 
-creating a <div> containing that text, placing it in an obscure location on 
-the page, and reading div.getBoundingClientRect(). This is a VERY precise
-value, but can be a pixel or two off from what Java reports for the same font.
-OS-dependent classes
---------------------
-
-Static classes such as:
-
-   java.awt.Toolkit
-   java.awt.GraphicsEnvironment
-   
-   
-which are created using Class.forName are implemented using classes in the swingjs package.
-
-AWTAccessor is not implemented. 
-
-   
-AWT component peers and component "ui" user interfaces
-------------------------------------------------------
-
-ComponentPeer is a class that represents a native AWT component.
-Components with such peers are called "heavy-weight" components.
-They are expected to do the dirty work of graphics drawing. 
-
-Java Swing implements peers only for JApplet, JDialog, JFrame, and JWindow. 
-References to such objects have been removed, but clearly there must be 
-some connection to similar DOM objects, even for "light-weight" components. 
-
-
-  
-MAJOR ISSUES--to be resolved by implementers
-============================================
-
-fonts
------
-
-Glyph/composite/outline fonts are not supported.
-   
-
-
-threads
--------
-
-Thread locking and synchronization are not relevant to JavaScript.
-Thus, anything requiring "notify.." or "waitFor.." could be a serious issue.
-All threading must be "faked" in JavaScript. Specifically not available is:
-
-  Thread.sleep()
-  
-javax.swing.AbstractButton#doClick(pressTime) will not work, as it requires Thread.sleep();
-    
-However, java.lang.Thread itself is implemented and used extensively. 
-
-Methods thread.start() and thread.run() both work fine. 
-
-For simple applications that use Thread.sleep() just to have a delay, as in a frame rate, for 
-example, one can use javax.swing.Timer instead. That is fully implemented. 
-
-Likewise, java.util.Timer can be replaced with no loss of performance with javax.Swing.Timer.
-Note that java.util.TimerTask is implemented, but it can also be replaced by an implementation of Runnable.
-
-task = new TimerTask(){....};
-t = new java.util.Timer();
-t.schedule(task, 0, 1);
-
-becomes
-
-task = new TimerTask(){....}; // or task = new Runnable() {...}
-t = new javax.swing.Timer(1, new ActionListener() {
-       @Override
-       public void actionPerformed(ActionEvent e) {
-               task.run();
-       }
-};
-t.setInitialDelay(0); // not particularly necessary
-t.start();
-
-In addition, SwingJS provides swingjs.JSThread, which can be subclassed
-if desired. This class allows simple 
-
-  while(!interrupted()){
-       wait()
-       ...
-  }  
-
-action through an asynchronous function run1(mode). For example:
-
-       protected void run1(int mode) {
-               try {
-                       while (true)
-                               switch (mode) {
-                               case INIT:
-                                       // once-through stuff here
-                                       mode = LOOP;
-                                       break;
-                               case LOOP:
-                                       if (!doDispatch || isInterrupted()) {
-                                               mode = DONE;
-                                       } else {
-                                               Runnable r = new Runnable() {
-                                                       public void run() {
-                                                               // put the loop code here
-                                                       }
-                                               };
-                                               dispatchAndReturn(r);
-                                               if (isJS)
-                                                       return;
-                                       }
-                                       break;
-                               // add more cases as needed
-                               case DONE:
-                                       // finish up here
-                                       if (isInterrupted())
-                                               return;
-                                       // or here
-                                       break;
-                               }
-               } finally {
-                       // stuff here to be executed after each loop in JS or at the end in Java
-               }
-       }
-
-image loading
--------------
-- All image loading in SwingJS is synchronous. A MediaTracker call will immediately return "complete".
-  However, it still may take one system clock tick to fully load images. Thus, it is recommended that
-  images be preloaded in the static block of the applet if it is necessary that they be available in init().
-  This is only an issue if you are trying to access the pixel buffer of the image in JavaScript. 
-  
-- Applet.getImage(path, name) will return null if the image does not exist. 
-
-- BufferedImage: only "support" imageType RGB and ARGB
-
-  -BH: This is a temporary edit, just to get us started. Certainly GRAY will be needed
-
-
-BigInteger and BigDecimal
--------------------------
-
-java.math.BigInteger is fully supported; java.math.BigDecimal is roughed 
-in and not fully tested (07/2019). 
-
-Both classes present significant issues for JavaScript, as they are based in 
-Java's 64-bit long for all their operations. Here is the JavaDoc note I added
-to BigInteger:
-
- * SwingJS note: Because of the limitations of JavaScript with regard
- * to long-integer bit storage as a double, this implementation drops
- * the integer storage bit length to 24, giving 48 for long and leaving
- * the last 16 bits clear for the exponent of the double number. This should
- * not affect performance significantly. It does increase the storage 
- * size by about 33%. By bringing an "int" to 3 bytes, we can easily construct
- * and use byte[] data intended for the original BitSet.  
-
-"Easily" may be a bit strong there. This was a serious challenge.
-
-BigDecimal seems to run normally, but in order to do that, my hack involves
-reducing the size of an integer that is allowed to be stored as such and not
-in byte[] as a BigInteger. I'm sure there is a performance hit, but it does work.
-
-no format internationalization
-------------------------------
-
-For now, just en for number and date formatters
-
-no winding rules
-----------------
-
-  When filling a graphic, only nonzero winding rule is implemented in HTML5 Canvas2D.
-
-
-
-text-related field implementation
----------------------------------
-
-Text fields are:
-
-JTextField   (JavaScript <input type="text">)
-JTextArea    (JavaScript <textarea>)
-JTextPane    (JavaScript <div>)
-JEditorPane  (JavaScript <div>)
-
-For the initial implementation, we don't implement infinite undo/redo, and the abstract 
-document model is much less elaborate. Only PlainDocument (in the form of JSPlainDocument)
-is implemented. The Document returned by JTextField.getDocument() is a javax.swing.text.Document.
-
-All scrolling is handled by HTML5. javax.swing.AutoScroller is not implemented.
-public static methods .stop, .isRunning, .processMouseDragged require true Java threading
-and so are not implmented. javax.swing.text.View and its subclasses are not implemented. 
-
-The JS document model does not allow two text fields to address the same underlying document. 
-
-JavaScript is slightly different from Java in that the field value is changed asynchronously after
-the keypressed event, so Java actions that are keyed to KEY_PRESSED may not pick up the new 
-key value even after SwingUtilities.invokeLater() is called. Thus, key pressed actions may need
-to be recorded after a key released event instead. 
-
-Formatter/Regex limitations
----------------------------
-
-Some browsers cannot process Regex "look-behind" process such as (?<=\W)
-java.util.regex.Matcher and Pattern use JavaScript's RegExp object rather than
-the native Java object. These are not identical. Only flags /igm are supported.
-Matcher.start(groupID) is not supported.
-
-java.util.Formatter will function correctly for all standard %... patterns.
-
-integer 1/0 == Infinity
------------------------
-
-1/0 in Java throws "java.lang.ArithmeticException: / by zero", but in JavaScript is just Infinity. 
-
-
-Summary
--------
-
-These are all the known limitations of SwingJS. We have not found any of these limitations
-to be show-stoppers. The primary issue for newcomers to SwingJS is having the source code.
-You must check that source code for all your library jar files is available or, if you
-choose, you will need to decompile those classes. We have used decompilation on some projects,
-and it works just fine. So, technically, all we really need are JAR/class files. But the 
-source is by far superior. It's generally prettier, and it has the license information that
-may or may not be present with the JAR or class files. Use class files at your own risk.
-
-Bob Hanson
-2019.08.16
-
-
-Additional Issues
------------------
-
-Annotation is working for classes, methods, and fields (12/22/19). Method reflection, however,
-is limited. Interfaces do not expose their methods, as the transpiler does not actually transpile
-the interfaces themselves. And method reflection only includes annotated methods.
-
-java.util.concurrent is not fully elaborated. This package is rewritten to not actually use the
-memory handling capabilities of concurrency, which JavaScript does not have access to.
-
-System.getProperties() just returns a minimal set of properties.
-
-
diff --git a/swingjs/ver/pre-long/net.sf.j2s.core.jar b/swingjs/ver/pre-long/net.sf.j2s.core.jar
deleted file mode 100644 (file)
index ce22a3e..0000000
Binary files a/swingjs/ver/pre-long/net.sf.j2s.core.jar and /dev/null differ
diff --git a/swingjs/ver/pre-long/timestamp b/swingjs/ver/pre-long/timestamp
deleted file mode 100644 (file)
index 5232ef4..0000000
+++ /dev/null
@@ -1 +0,0 @@
-20201219150605 
index b0a1ac8..31800b6 100644 (file)
@@ -25,14 +25,14 @@ import static org.testng.Assert.assertFalse;
 import static org.testng.Assert.assertSame;
 import static org.testng.Assert.assertTrue;
 
-import jalview.datamodel.SequenceFeature;
-
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Set;
 
 import org.testng.annotations.Test;
 
+import jalview.datamodel.SequenceFeature;
+
 public class FeatureStoreTest
 {
 
@@ -105,6 +105,26 @@ public class FeatureStoreTest
   }
 
   @Test(groups = "Functional")
+  public void testFindFeatures_colocated()
+  {
+    FeatureStore fs = new FeatureStore();
+    SequenceFeature sf1 = new SequenceFeature("domain", "Cath", 10, 50, Float.NaN,
+            null);
+    fs.addFeature(sf1);
+    SequenceFeature sf2 = new SequenceFeature("domain", "Pfam", 10, 50, Float.NaN,
+            null);
+    fs.addFeature(sf2);
+    List<SequenceFeature> features = fs.findOverlappingFeatures(1,  100);
+    
+    /*
+     * check co-located features are returned in the order they were added
+     */
+    assertEquals(features.size(), 2);
+    assertSame(features.get(0), sf1);
+    assertSame(features.get(1), sf2);
+  }
+  
+   @Test(groups = "Functional")
   public void testFindFeatures_mixed()
   {
     FeatureStore fs = new FeatureStore();
index e6f4041..4bc889b 100644 (file)
@@ -20,8 +20,8 @@
  */
 package jalview.gui;
 
-import static org.testng.AssertJUnit.assertEquals;
-import static org.testng.AssertJUnit.assertFalse;
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertFalse;
 
 import javax.swing.JScrollBar;
 
@@ -65,7 +65,7 @@ public class JvSwingUtilsTest
      * operating range is 25 - 425 (400 wide) so value 125 is a quarter of this
      * range
      */
-    assertEquals(125, JvSwingUtils.getScrollValueForProportion(sb, 0.25f));
+    assertEquals(JvSwingUtils.getScrollValueForProportion(sb, 0.25f), 125);
   }
 
   /**
@@ -76,19 +76,26 @@ public class JvSwingUtilsTest
   public void testWrapTooltip_shortText()
   {
     String tip = "hello world";
-    assertEquals(tip, JvSwingUtils.wrapTooltip(false, tip));
-    assertEquals("<html>" + tip + "</html>",
-            JvSwingUtils.wrapTooltip(true, tip));
+    assertEquals(JvSwingUtils.wrapTooltip(false, tip), tip,
+            "Text was not kept the same");
+    assertEquals(JvSwingUtils.wrapTooltip(true, tip),
+            "<html>" + tip + "</html>",
+            "Text was not simply wrapped in HTML");
 
     tip = "012345678901234567890123456789012345678901234567890123456789"; // 60
-    assertEquals(tip, JvSwingUtils.wrapTooltip(false, tip));
-    assertEquals("<html>" + tip + "</html>",
-            JvSwingUtils.wrapTooltip(true, tip));
+    assertEquals(JvSwingUtils.wrapTooltip(false, tip), tip,
+            "Text was not kept the same");
+    assertEquals(JvSwingUtils.wrapTooltip(true, tip),
+            "<html>" + tip + "</html>",
+            "Text was not simply wrapped in HTML");
 
     tip = "0123456789012345678901234567890123456789012345678901234567890"; // 61
-    assertFalse(tip.equals(JvSwingUtils.wrapTooltip(false, tip)));
-    assertFalse(("<html>" + tip + "</html>")
-            .equals(JvSwingUtils.wrapTooltip(true, tip)));
+    assertFalse(tip.equals(JvSwingUtils.wrapTooltip(false, tip)),
+            "Text is the same when it should be shortened/wrapped over lines");
+    assertFalse(
+            ("<html>" + tip + "</html>")
+                    .equals(JvSwingUtils.wrapTooltip(true, tip)),
+            "Text is only wrapped in HTML tags when it should be shortened/wrapped over lines");
   }
 
   /**
@@ -99,10 +106,21 @@ public class JvSwingUtilsTest
   @Test(groups = { "Functional" })
   public void testWrapTooltip_multilineShortText()
   {
+    // <br>
     String tip = "Now is the winter of our discontent<br>Made glorious summer by this sun of York";
-    assertEquals(tip, JvSwingUtils.wrapTooltip(false, tip));
-    assertEquals("<html>" + tip + "</html>",
-            JvSwingUtils.wrapTooltip(true, tip));
+    assertEquals(JvSwingUtils.wrapTooltip(false, tip), tip,
+            "Text was not kept the same");
+    assertEquals(JvSwingUtils.wrapTooltip(true, tip),
+            "<html>" + tip + "</html>",
+            "Text was not simply wrapped in HTML");
+
+    // <br/>
+    tip = "Now is the winter of our discontent<br/>Made glorious summer by this sun of York";
+    assertEquals(JvSwingUtils.wrapTooltip(false, tip), tip,
+            "Text was not kept the same");
+    assertEquals(JvSwingUtils.wrapTooltip(true, tip),
+            "<html>" + tip + "</html>",
+            "Text was not simply wrapped in HTML");
   }
 
   /**
@@ -112,11 +130,14 @@ public class JvSwingUtilsTest
   @Test(groups = { "Functional" })
   public void testWrapTooltip_longText()
   {
+    // 76 characters > 60
     String tip = "Now is the winter of our discontent made glorious summer by this sun of York";
     String expected = "<style> div.ttip {width:350px;white-space:pre-wrap;padding:2px;overflow-wrap:break-word;}</style>"
-            + "<div class=\"ttip\">" + tip + " </div>";
-    assertEquals("<html>" + expected + "</html>",
-            JvSwingUtils.wrapTooltip(true, tip));
-    assertEquals(expected, JvSwingUtils.wrapTooltip(false, tip));
+            + "<div class=\"ttip\">" + tip + "</div>";
+    assertEquals(JvSwingUtils.wrapTooltip(true, tip),
+            "<html>" + expected + "</html>",
+            "Text was not wrapped in HTML with styling and div");
+    assertEquals(JvSwingUtils.wrapTooltip(false, tip), expected,
+            "Text was not just styled with div");
   }
 }
index 7636bda..0859566 100644 (file)
@@ -199,9 +199,8 @@ public class PopupMenuTest
     testee.configureReferenceAnnotationsMenu(menu, seqs);
     assertTrue(menu.isEnabled());
     String s = MessageManager.getString("label.add_annotations_for");
-    String expected = "<html><style> div.ttip {width:350px;white-space:pre-wrap;padding:2px;overflow-wrap:break-word;}</style>"
-            + "<div class=\"ttip\">" + s
-            + "<br/>Jmol/secondary structure<br/>PDB/Temp </div></html>";
+    String expected = "<html>" + s
+            + "<br/>Jmol/secondary structure<br/>PDB/Temp</html>";
     assertEquals(expected, menu.getToolTipText());
   }
 
@@ -223,9 +222,8 @@ public class PopupMenuTest
     testee.configureReferenceAnnotationsMenu(menu, seqs);
     assertTrue(menu.isEnabled());
     String s = MessageManager.getString("label.add_annotations_for");
-    String expected = "<html><style> div.ttip {width:350px;white-space:pre-wrap;padding:2px;overflow-wrap:break-word;}</style>"
-            + "<div class=\"ttip\">" + s
-            + "<br/>Jmol/secondary structure<br/>PDB/Temp </div></html>";
+    String expected = "<html>" + s
+            + "<br/>Jmol/secondary structure<br/>PDB/Temp</html>";
     assertEquals(expected, menu.getToolTipText());
   }
 
index 2b418de..ca10b55 100644 (file)
@@ -25,6 +25,16 @@ import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertNull;
 import static org.testng.Assert.assertTrue;
 
+import java.io.File;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.List;
+import java.util.Map;
+
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.BeforeTest;
+import org.testng.annotations.Test;
+
 import jalview.bin.Cache;
 import jalview.bin.Console;
 import jalview.datamodel.AlignmentI;
@@ -41,16 +51,6 @@ import jalview.io.FileLoader;
 import jalview.io.gff.Gff3Helper;
 import jalview.util.MapList;
 
-import java.io.File;
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.util.List;
-import java.util.Map;
-
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.BeforeTest;
-import org.testng.annotations.Test;
-
 public class VCFLoaderTest
 {
   private static final float DELTA = 0.00001f;
@@ -140,10 +140,24 @@ public class VCFLoaderTest
             .getSequenceFeatures();
     SequenceFeatures.sortFeatures(geneFeatures, true);
     assertEquals(geneFeatures.size(), 5);
+
     SequenceFeature sf = geneFeatures.get(0);
     assertEquals(sf.getFeatureGroup(), "VCF");
     assertEquals(sf.getBegin(), 2);
     assertEquals(sf.getEnd(), 2);
+    assertEquals(sf.getType(), SEQUENCE_VARIANT);
+    assertEquals(sf.getScore(), 0f);
+    assertEquals(Float.parseFloat((String) sf.getValue("AF")), 5.0e-03,
+            DELTA);
+    assertEquals(sf.getValue("AC_Female"), "12");
+    // malformed float for AF_AFR is ignored (JAL-3375)
+    assertNull(sf.getValue("AC_AFR"));
+    assertEquals(sf.getValue(Gff3Helper.ALLELES), "A,T");
+
+    sf = geneFeatures.get(1);
+    assertEquals(sf.getFeatureGroup(), "VCF");
+    assertEquals(sf.getBegin(), 2);
+    assertEquals(sf.getEnd(), 2);
     assertEquals(sf.getScore(), 0f);
     assertEquals(sf.getValue("AF"), "4.0e-03");
     assertEquals(sf.getValue("AF_AFR"), "2.3e-4");
@@ -156,28 +170,17 @@ public class VCFLoaderTest
     // malformed integer for AC_Female is ignored (JAL-3375)
     assertNull(sf.getValue("AC_Female"));
 
-    sf = geneFeatures.get(1);
-    assertEquals(sf.getFeatureGroup(), "VCF");
-    assertEquals(sf.getBegin(), 2);
-    assertEquals(sf.getEnd(), 2);
-    assertEquals(sf.getType(), SEQUENCE_VARIANT);
-    assertEquals(sf.getScore(), 0f);
-    assertEquals(Float.parseFloat((String) sf.getValue("AF")), 5.0e-03,
-            DELTA);
-    assertEquals(sf.getValue("AC_Female"), "12");
-    // malformed float for AF_AFR is ignored (JAL-3375)
-    assertNull(sf.getValue("AC_AFR"));
-    assertEquals(sf.getValue(Gff3Helper.ALLELES), "A,T");
-
     sf = geneFeatures.get(2);
     assertEquals(sf.getFeatureGroup(), "VCF");
     assertEquals(sf.getBegin(), 4);
     assertEquals(sf.getEnd(), 4);
     assertEquals(sf.getType(), SEQUENCE_VARIANT);
     assertEquals(sf.getScore(), 0f);
-    assertEquals(Float.parseFloat((String) sf.getValue("AF")), 2.0e-03,
+    assertEquals(Float.parseFloat((String) sf.getValue("AF")), 3.0e-03,
             DELTA);
-    assertEquals(sf.getValue(Gff3Helper.ALLELES), "G,C");
+    assertEquals(sf.getValue(Gff3Helper.ALLELES), "G,GA");
+    assertNull(sf.getValue("ID")); // '.' is ignored
+    assertNull(sf.getValue("FILTER")); // '.' is ignored
 
     sf = geneFeatures.get(3);
     assertEquals(sf.getFeatureGroup(), "VCF");
@@ -185,11 +188,9 @@ public class VCFLoaderTest
     assertEquals(sf.getEnd(), 4);
     assertEquals(sf.getType(), SEQUENCE_VARIANT);
     assertEquals(sf.getScore(), 0f);
-    assertEquals(Float.parseFloat((String) sf.getValue("AF")), 3.0e-03,
+    assertEquals(Float.parseFloat((String) sf.getValue("AF")), 2.0e-03,
             DELTA);
-    assertEquals(sf.getValue(Gff3Helper.ALLELES), "G,GA");
-    assertNull(sf.getValue("ID")); // '.' is ignored
-    assertNull(sf.getValue("FILTER")); // '.' is ignored
+    assertEquals(sf.getValue(Gff3Helper.ALLELES), "G,C");
 
     sf = geneFeatures.get(4);
     assertEquals(sf.getFeatureGroup(), "VCF");
@@ -207,24 +208,26 @@ public class VCFLoaderTest
     List<SequenceFeature> transcriptFeatures = al.getSequenceAt(1)
             .getSequenceFeatures();
     assertEquals(transcriptFeatures.size(), 3);
+    
     sf = transcriptFeatures.get(0);
     assertEquals(sf.getFeatureGroup(), "VCF");
     assertEquals(sf.getBegin(), 2);
     assertEquals(sf.getEnd(), 2);
     assertEquals(sf.getType(), SEQUENCE_VARIANT);
     assertEquals(sf.getScore(), 0f);
-    assertEquals(Float.parseFloat((String) sf.getValue("AF")), 2.0e-03,
+    assertEquals(Float.parseFloat((String) sf.getValue("AF")), 3.0e-03,
             DELTA);
-    assertEquals(sf.getValue(Gff3Helper.ALLELES), "G,C");
+    assertEquals(sf.getValue(Gff3Helper.ALLELES), "G,GA");
+    
     sf = transcriptFeatures.get(1);
     assertEquals(sf.getFeatureGroup(), "VCF");
     assertEquals(sf.getBegin(), 2);
     assertEquals(sf.getEnd(), 2);
     assertEquals(sf.getType(), SEQUENCE_VARIANT);
     assertEquals(sf.getScore(), 0f);
-    assertEquals(Float.parseFloat((String) sf.getValue("AF")), 3.0e-03,
+    assertEquals(Float.parseFloat((String) sf.getValue("AF")), 2.0e-03,
             DELTA);
-    assertEquals(sf.getValue(Gff3Helper.ALLELES), "G,GA");
+    assertEquals(sf.getValue(Gff3Helper.ALLELES), "G,C");
 
     /*
      * verify SNP variant feature(s) computed and added to protein
@@ -430,7 +433,7 @@ public class VCFLoaderTest
             DELTA);
 
     /*
-     * variant A/C at 45051611 maps to T/G at gene position 24
+     * variant A/T at 45051611 maps to T/A at gene position 24
      */
     sf = geneFeatures.get(3);
     assertEquals(sf.getFeatureGroup(), "VCF");
@@ -438,12 +441,12 @@ public class VCFLoaderTest
     assertEquals(sf.getEnd(), 24);
     assertEquals(sf.getType(), SEQUENCE_VARIANT);
     assertEquals(sf.getScore(), 0f);
-    assertEquals(sf.getValue(Gff3Helper.ALLELES), "T,G");
-    assertEquals(Float.parseFloat((String) sf.getValue("AF")), 4.0e-03,
+    assertEquals(sf.getValue(Gff3Helper.ALLELES), "T,A");
+    assertEquals(Float.parseFloat((String) sf.getValue("AF")), 5.0e-03,
             DELTA);
 
     /*
-     * variant A/T at 45051611 maps to T/A at gene position 24
+     * variant A/C at 45051611 maps to T/G at gene position 24
      */
     sf = geneFeatures.get(4);
     assertEquals(sf.getFeatureGroup(), "VCF");
@@ -451,8 +454,8 @@ public class VCFLoaderTest
     assertEquals(sf.getEnd(), 24);
     assertEquals(sf.getType(), SEQUENCE_VARIANT);
     assertEquals(sf.getScore(), 0f);
-    assertEquals(sf.getValue(Gff3Helper.ALLELES), "T,A");
-    assertEquals(Float.parseFloat((String) sf.getValue("AF")), 5.0e-03,
+    assertEquals(sf.getValue(Gff3Helper.ALLELES), "T,G");
+    assertEquals(Float.parseFloat((String) sf.getValue("AF")), 4.0e-03,
             DELTA);
 
     /*
@@ -574,8 +577,8 @@ public class VCFLoaderTest
     assertEquals(sf.getBegin(), 13);
     assertEquals(sf.getEnd(), 13);
     assertEquals(sf.getScore(), 0f);
-    assertEquals(Float.parseFloat((String) sf.getValue("AF")), 0.5f, DELTA);
-    assertEquals(sf.getValue("alleles"), "C,T");
+    assertEquals(Float.parseFloat((String) sf.getValue("AF")), 0.4f, DELTA);
+    assertEquals(sf.getValue("alleles"), "C,G");
     map = (Map) sf.getValue("CSQ");
     assertEquals(map.size(), 9);
 
@@ -583,8 +586,8 @@ public class VCFLoaderTest
     assertEquals(sf.getBegin(), 13);
     assertEquals(sf.getEnd(), 13);
     assertEquals(sf.getScore(), 0f);
-    assertEquals(Float.parseFloat((String) sf.getValue("AF")), 0.4f, DELTA);
-    assertEquals(sf.getValue("alleles"), "C,G");
+    assertEquals(Float.parseFloat((String) sf.getValue("AF")), 0.5f, DELTA);
+    assertEquals(sf.getValue("alleles"), "C,T");
     map = (Map) sf.getValue("CSQ");
     assertEquals(map.size(), 9);
 
@@ -592,8 +595,8 @@ public class VCFLoaderTest
     assertEquals(sf.getBegin(), 17);
     assertEquals(sf.getEnd(), 17);
     assertEquals(sf.getScore(), 0f);
-    assertEquals(Float.parseFloat((String) sf.getValue("AF")), 0.7f, DELTA);
-    assertEquals(sf.getValue("alleles"), "A,G");
+    assertEquals(Float.parseFloat((String) sf.getValue("AF")), 0.6f, DELTA);
+    assertEquals(sf.getValue("alleles"), "A,AC");
     map = (Map) sf.getValue("CSQ");
     assertEquals(map.size(), 9);
 
@@ -601,8 +604,8 @@ public class VCFLoaderTest
     assertEquals(sf.getBegin(), 17);
     assertEquals(sf.getEnd(), 17); // insertion
     assertEquals(sf.getScore(), 0f);
-    assertEquals(Float.parseFloat((String) sf.getValue("AF")), 0.6f, DELTA);
-    assertEquals(sf.getValue("alleles"), "A,AC");
+    assertEquals(Float.parseFloat((String) sf.getValue("AF")), 0.7f, DELTA);
+    assertEquals(sf.getValue("alleles"), "A,G");
     map = (Map) sf.getValue("CSQ");
     assertEquals(map.size(), 9);
 
@@ -631,8 +634,9 @@ public class VCFLoaderTest
     assertEquals(sf.getBegin(), 11);
     assertEquals(sf.getEnd(), 11);
     assertEquals(sf.getScore(), 0f);
-    assertEquals(Float.parseFloat((String) sf.getValue("AF")), 0.7f, DELTA);
-    assertEquals(sf.getValue("alleles"), "A,G");
+    assertEquals(Float.parseFloat((String) sf.getValue("AF")), 0.6f, DELTA);
+    assertEquals(sf.getValue("alleles"), "A,AC");
+    map = (Map) sf.getValue("CSQ");
     assertEquals(map.size(), 9);
     assertEquals(sf.getValueAsString("CSQ", "Feature"), "transcript3");
 
@@ -640,8 +644,9 @@ public class VCFLoaderTest
     assertEquals(sf.getBegin(), 11);
     assertEquals(sf.getEnd(), 11);
     assertEquals(sf.getScore(), 0f);
-    assertEquals(Float.parseFloat((String) sf.getValue("AF")), 0.6f, DELTA);
-    assertEquals(sf.getValue("alleles"), "A,AC");
+    assertEquals(Float.parseFloat((String) sf.getValue("AF")), 0.7f, DELTA);
+    assertEquals(sf.getValue("alleles"), "A,G");
+    map = (Map) sf.getValue("CSQ");
     assertEquals(map.size(), 9);
     assertEquals(sf.getValueAsString("CSQ", "Feature"), "transcript3");
 
@@ -692,8 +697,9 @@ public class VCFLoaderTest
     assertEquals(sf.getBegin(), 7);
     assertEquals(sf.getEnd(), 7);
     assertEquals(sf.getScore(), 0f);
-    assertEquals(Float.parseFloat((String) sf.getValue("AF")), 0.5f, DELTA);
-    assertEquals(sf.getValue("alleles"), "C,T");
+    assertEquals(Float.parseFloat((String) sf.getValue("AF")), 0.4f, DELTA);
+    assertEquals(sf.getValue("alleles"), "C,G");
+    map = (Map) sf.getValue("CSQ");
     assertEquals(map.size(), 9);
     assertEquals(sf.getValueAsString("CSQ", "Feature"), "transcript4");
 
@@ -701,8 +707,9 @@ public class VCFLoaderTest
     assertEquals(sf.getBegin(), 7);
     assertEquals(sf.getEnd(), 7);
     assertEquals(sf.getScore(), 0f);
-    assertEquals(Float.parseFloat((String) sf.getValue("AF")), 0.4f, DELTA);
-    assertEquals(sf.getValue("alleles"), "C,G");
+    assertEquals(Float.parseFloat((String) sf.getValue("AF")), 0.5f, DELTA);
+    assertEquals(sf.getValue("alleles"), "C,T");
+    map = (Map) sf.getValue("CSQ");
     assertEquals(map.size(), 9);
     assertEquals(sf.getValueAsString("CSQ", "Feature"), "transcript4");
 
@@ -710,8 +717,9 @@ public class VCFLoaderTest
     assertEquals(sf.getBegin(), 11);
     assertEquals(sf.getEnd(), 11);
     assertEquals(sf.getScore(), 0f);
-    assertEquals(Float.parseFloat((String) sf.getValue("AF")), 0.7f, DELTA);
-    assertEquals(sf.getValue("alleles"), "A,G");
+    assertEquals(Float.parseFloat((String) sf.getValue("AF")), 0.6f, DELTA);
+    assertEquals(sf.getValue("alleles"), "A,AC");
+    map = (Map) sf.getValue("CSQ");
     assertEquals(map.size(), 9);
     assertEquals(sf.getValueAsString("CSQ", "Feature"), "transcript4");
 
@@ -719,8 +727,9 @@ public class VCFLoaderTest
     assertEquals(sf.getBegin(), 11);
     assertEquals(sf.getEnd(), 11);
     assertEquals(sf.getScore(), 0f);
-    assertEquals(Float.parseFloat((String) sf.getValue("AF")), 0.6f, DELTA);
-    assertEquals(sf.getValue("alleles"), "A,AC");
+    assertEquals(Float.parseFloat((String) sf.getValue("AF")), 0.7f, DELTA);
+    assertEquals(sf.getValue("alleles"), "A,G");
+    map = (Map) sf.getValue("CSQ");
     assertEquals(map.size(), 9);
     assertEquals(sf.getValueAsString("CSQ", "Feature"), "transcript4");
   }
index 22324fc..1f8e451 100644 (file)
@@ -24,8 +24,6 @@ import static org.testng.AssertJUnit.assertEquals;
 import static org.testng.AssertJUnit.assertNull;
 import static org.testng.AssertJUnit.assertTrue;
 
-import jalview.gui.JvOptionPane;
-
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
@@ -33,6 +31,8 @@ import java.util.List;
 import org.testng.annotations.BeforeClass;
 import org.testng.annotations.Test;
 
+import jalview.gui.JvOptionPane;
+
 public class StringUtilsTest
 {
 
@@ -121,6 +121,25 @@ public class StringUtilsTest
      */
     assertEquals("[abc='|'d, ef, g]", Arrays.toString(
             StringUtils.separatorListToArray("abc='|'d|ef|g", "|")));
+
+    /*
+     * edge cases
+     */
+    assertEquals("[abc=';'d, ef, g, key='val;ue;key2=what]",
+            Arrays.toString(StringUtils.separatorListToArray(
+                    "abc=';'d;ef;g;key='val;ue;key2=what", ";")));
+    assertEquals("[hello\\world, jello'\\world', mello'wo\\'rld']",
+            Arrays.toString(StringUtils.separatorListToArray(
+                    "hello\\world;jello'\\world';mello'wo\\'rld'", ";")));
+    // this next one checks that an escaped single quote doesn't end a quoted
+    // section so the following separator is treated as part of the quoted text,
+    // not as a separator.
+    assertEquals("[hello\\world, jello'\\world', mello'wo\\'r;ld']",
+            Arrays.toString(StringUtils.separatorListToArray(
+                    "hello\\world;jello'\\world';mello'wo\\'r;ld'", ";")));
+    assertEquals("[hello\\;jello, mello\\;';'w, world]",
+            Arrays.toString(StringUtils.separatorListToArray(
+                    "hello\\;jello;mello\\;';'w;world", ";")));
   }
 
   @Test(groups = { "Functional" })
diff --git a/tools/closure-compiler-v20230802.jar b/tools/closure-compiler-v20230802.jar
new file mode 100644 (file)
index 0000000..2a0cba4
Binary files /dev/null and b/tools/closure-compiler-v20230802.jar differ
diff --git a/tools/closure_compiler.jar b/tools/closure_compiler.jar
deleted file mode 100644 (file)
index 53037b0..0000000
Binary files a/tools/closure_compiler.jar and /dev/null differ
index e35111e..65d0302 100644 (file)
-java/applet/Applet.js
+com/github/reinert/jjschema/Attributes.js
+com/stevesoft/pat/AmpersandRule.js
+com/stevesoft/pat/Any.js
+com/stevesoft/pat/BackG.js
+com/stevesoft/pat/BackMatch.js
+com/stevesoft/pat/BackRefRule.js
+com/stevesoft/pat/Backup.js
+com/stevesoft/pat/BasicStringBufferLike.js
+com/stevesoft/pat/Bits.js
+com/stevesoft/pat/Boundary.js
+com/stevesoft/pat/Bracket.js
+com/stevesoft/pat/Branch.js
+com/stevesoft/pat/CaseMgr.js
+com/stevesoft/pat/ChangeRule.js
+com/stevesoft/pat/CodeRule.js
+com/stevesoft/pat/Ctrl.js
+com/stevesoft/pat/Custom.js
+com/stevesoft/pat/CustomEndpoint.js
+com/stevesoft/pat/DirFileRegex.js
+com/stevesoft/pat/DotMulti.js
+com/stevesoft/pat/End.js
+com/stevesoft/pat/FastBracket.js
+com/stevesoft/pat/FastChar.js
+com/stevesoft/pat/FastMulti.js
+com/stevesoft/pat/FileRegex.js
+com/stevesoft/pat/Group.js
+com/stevesoft/pat/LeftRule.js
+com/stevesoft/pat/Multi.js
+com/stevesoft/pat/MultiMin.js
+com/stevesoft/pat/Multi_stage2.js
+com/stevesoft/pat/NUnicodeAlpha.js
+com/stevesoft/pat/NUnicodeCurrency.js
+com/stevesoft/pat/NUnicodeDigit.js
+com/stevesoft/pat/NUnicodeMath.js
+com/stevesoft/pat/NUnicodePunct.js
+com/stevesoft/pat/NUnicodeW.js
+com/stevesoft/pat/NUnicodeWhite.js
+com/stevesoft/pat/NoPattern.js
+com/stevesoft/pat/NonDirFileRegex.js
+com/stevesoft/pat/NotImplementedError.js
+com/stevesoft/pat/NullPattern.js
+com/stevesoft/pat/NullRule.js
+com/stevesoft/pat/Or.js
+com/stevesoft/pat/OrMark.js
+com/stevesoft/pat/PartialBuffer.js
+com/stevesoft/pat/Pattern.js
+com/stevesoft/pat/PatternSub.js
+com/stevesoft/pat/PopRule.js
+com/stevesoft/pat/Prop.js
+com/stevesoft/pat/Pthings.js
+com/stevesoft/pat/PushRule.js
+com/stevesoft/pat/RBuffer.js
+com/stevesoft/pat/Range.js
+com/stevesoft/pat/RegOpt.js
+com/stevesoft/pat/RegRes.js
+com/stevesoft/pat/RegSyntax.js
+com/stevesoft/pat/RegSyntaxError.js
+com/stevesoft/pat/Regex.js
+com/stevesoft/pat/RegexReader.js
+com/stevesoft/pat/RegexTokenizer.js
+com/stevesoft/pat/RegexWriter.js
+com/stevesoft/pat/ReplaceRule.js
+com/stevesoft/pat/Replacer.js
+com/stevesoft/pat/RightRule.js
+com/stevesoft/pat/Rthings.js
+com/stevesoft/pat/RuleHolder.js
+com/stevesoft/pat/Skip.js
+com/stevesoft/pat/Skip2.js
+com/stevesoft/pat/SkipBMH.js
+com/stevesoft/pat/Skipped.js
+com/stevesoft/pat/SpecialRule.js
+com/stevesoft/pat/Start.js
+com/stevesoft/pat/StrPos.js
+com/stevesoft/pat/StringBufferLike.js
+com/stevesoft/pat/StringLike.js
+com/stevesoft/pat/StringRule.js
+com/stevesoft/pat/SubMark.js
+com/stevesoft/pat/TransPat.js
+com/stevesoft/pat/Transformer.js
+com/stevesoft/pat/UniValidator.js
+com/stevesoft/pat/UnicodeAlpha.js
+com/stevesoft/pat/UnicodeCurrency.js
+com/stevesoft/pat/UnicodeDigit.js
+com/stevesoft/pat/UnicodeLower.js
+com/stevesoft/pat/UnicodeMath.js
+com/stevesoft/pat/UnicodePunct.js
+com/stevesoft/pat/UnicodeUpper.js
+com/stevesoft/pat/UnicodeW.js
+com/stevesoft/pat/UnicodeWhite.js
+com/stevesoft/pat/Validator.js
+com/stevesoft/pat/WantMoreTextReplaceRule.js
+com/stevesoft/pat/lookAhead.js
+com/stevesoft/pat/oneChar.js
+com/stevesoft/pat/parsePerl.js
+com/stevesoft/pat/patInf.js
+com/stevesoft/pat/patInt.js
+com/stevesoft/pat/wrap/CharArrayBufferWrap.js
+com/stevesoft/pat/wrap/CharArrayWrap.js
+com/stevesoft/pat/wrap/RandomAccessFileWrap.js
+com/stevesoft/pat/wrap/StringBufferWrap.js
+com/stevesoft/pat/wrap/StringWrap.js
+com/stevesoft/pat/wrap/WriterWrap.js
+core/package.js
+ext/edu/ucsf/rbvi/strucviz2/ChimUtils.js
+ext/edu/ucsf/rbvi/strucviz2/ChimeraChain.js
+ext/edu/ucsf/rbvi/strucviz2/ChimeraManager.js
+ext/edu/ucsf/rbvi/strucviz2/ChimeraModel.js
+ext/edu/ucsf/rbvi/strucviz2/ChimeraResidue.js
+ext/edu/ucsf/rbvi/strucviz2/ChimeraStructuralObject.js
+ext/edu/ucsf/rbvi/strucviz2/ChimeraTreeModel.js
+ext/edu/ucsf/rbvi/strucviz2/StructureManager.js
+ext/edu/ucsf/rbvi/strucviz2/StructureSettings.js
+ext/edu/ucsf/rbvi/strucviz2/port/ListenerThreads.js
+ext/vamsas/IRegistry.js
+ext/vamsas/IRegistryService.js
+ext/vamsas/IRegistryServiceLocator.js
+ext/vamsas/Jpred.js
+ext/vamsas/JpredService.js
+ext/vamsas/JpredServiceLocator.js
+ext/vamsas/JpredSoapBindingStub.js
+ext/vamsas/MuscleWS.js
+ext/vamsas/MuscleWSService.js
+ext/vamsas/MuscleWSServiceLocator.js
+ext/vamsas/MuscleWSSoapBindingStub.js
+ext/vamsas/RegistryServiceSoapBindingStub.js
+ext/vamsas/SeqSearchI.js
+ext/vamsas/SeqSearchServiceLocator.js
+ext/vamsas/SeqSearchServiceService.js
+ext/vamsas/SeqSearchServiceSoapBindingStub.js
+ext/vamsas/ServiceHandle.js
+ext/vamsas/ServiceHandles.js
+intervalstore/api/IntervalI.js
+intervalstore/api/IntervalStoreI.js
+intervalstore/impl/BinarySearcher.js
+intervalstore/impl/IntervalStore.js
+intervalstore/impl/NCList.js
+intervalstore/impl/NCNode.js
+jalview/analysis/AAFrequency.js
+jalview/analysis/AlignSeq.js
+jalview/analysis/AlignmentAnnotationUtils.js
+jalview/analysis/AlignmentSorter.js
+jalview/analysis/AlignmentUtils.js
+jalview/analysis/AnnotationSorter.js
+jalview/analysis/AverageDistanceEngine.js
+jalview/analysis/AverageDistanceTree.js
+jalview/analysis/CodingUtils.js
+jalview/analysis/CodonComparator.js
+jalview/analysis/Conservation.js
+jalview/analysis/CrossRef.js
+jalview/analysis/Dna.js
+jalview/analysis/Finder.js
+jalview/analysis/GeneticCodeI.js
+jalview/analysis/GeneticCodes.js
+jalview/analysis/Grouping.js
+jalview/analysis/NJTree.js
+jalview/analysis/PCA.js
+jalview/analysis/ParseProperties.js
+jalview/analysis/Rna.js
+jalview/analysis/SecStrConsensus.js
+jalview/analysis/SeqsetUtils.js
+jalview/analysis/SequenceIdMatcher.js
+jalview/analysis/StructureFrequency.js
+jalview/analysis/TreeBuilder.js
+jalview/analysis/TreeEngine.js
+jalview/analysis/TreeModel.js
+jalview/analysis/WUSSParseException.js
+jalview/analysis/scoremodels/DistanceScoreModel.js
+jalview/analysis/scoremodels/FeatureDistanceModel.js
+jalview/analysis/scoremodels/PIDModel.js
+jalview/analysis/scoremodels/ScoreMatrix.js
+jalview/analysis/scoremodels/ScoreModels.js
+jalview/analysis/scoremodels/SimilarityParams.js
+jalview/analysis/scoremodels/SimilarityScoreModel.js
+jalview/analysis/scoremodels/SmithWatermanModel.js
+jalview/analytics/Plausible.js
+jalview/api/AlignCalcManagerI.js
+jalview/api/AlignCalcWorkerI.js
+jalview/api/AlignExportSettingsI.js
+jalview/api/AlignViewControllerGuiI.js
+jalview/api/AlignViewControllerI.js
+jalview/api/AlignViewportI.js
+jalview/api/AlignmentColsCollectionI.js
+jalview/api/AlignmentRowsCollectionI.js
+jalview/api/AlignmentViewPanel.js
+jalview/api/BuildDetailsI.js
+jalview/api/ComplexAlignFile.js
+jalview/api/DBRefEntryI.js
+jalview/api/FeatureColourI.js
+jalview/api/FeatureRenderer.js
+jalview/api/FeatureSettingsControllerI.js
+jalview/api/FeatureSettingsModelI.js
+jalview/api/FeaturesDisplayedI.js
+jalview/api/FeaturesSourceI.js
+jalview/api/FinderI.js
+jalview/api/OOMHandlerI.js
+jalview/api/RendererListenerI.js
+jalview/api/RotatableCanvasI.js
+jalview/api/SequenceRenderer.js
+jalview/api/SequenceStructureBinding.js
+jalview/api/SiftsClientI.js
+jalview/api/SplitContainerI.js
+jalview/api/StructureSelectionManagerProvider.js
+jalview/api/ViewStyleI.js
+jalview/api/analysis/PairwiseScoreModelI.js
+jalview/api/analysis/ScoreModelI.js
+jalview/api/analysis/SimilarityParamsI.js
+jalview/api/structures/JalviewStructureDisplayI.js
+jalview/appletgui/APopupMenu.js
+jalview/appletgui/AlignFrame.js
+jalview/appletgui/AlignViewport.js
+jalview/appletgui/AlignmentPanel.js
+jalview/appletgui/AnnotationColourChooser.js
+jalview/appletgui/AnnotationColumnChooser.js
+jalview/appletgui/AnnotationLabels.js
+jalview/appletgui/AnnotationPanel.js
+jalview/appletgui/AnnotationRowFilter.js
+jalview/appletgui/AppletJmol.js
+jalview/appletgui/AppletJmolBinding.js
+jalview/appletgui/CutAndPasteTransfer.js
+jalview/appletgui/EditNameDialog.js
+jalview/appletgui/EmbmenuFrame.js
+jalview/appletgui/ExtJmol.js
+jalview/appletgui/FeatureColourChooser.js
+jalview/appletgui/FeatureRenderer.js
+jalview/appletgui/FeatureSettings.js
+jalview/appletgui/Finder.js
+jalview/appletgui/FontChooser.js
+jalview/appletgui/IdCanvas.js
+jalview/appletgui/IdPanel.js
+jalview/appletgui/IdwidthAdjuster.js
+jalview/appletgui/JVDialog.js
+jalview/appletgui/OverviewCanvas.js
+jalview/appletgui/OverviewPanel.js
+jalview/appletgui/PCAPanel.js
+jalview/appletgui/PaintRefresher.js
+jalview/appletgui/PairwiseAlignPanel.js
+jalview/appletgui/RedundancyPanel.js
+jalview/appletgui/RotatableCanvas.js
+jalview/appletgui/ScalePanel.js
+jalview/appletgui/SeqCanvas.js
+jalview/appletgui/SeqPanel.js
+jalview/appletgui/SequenceRenderer.js
+jalview/appletgui/SliderPanel.js
+jalview/appletgui/SplitFrame.js
+jalview/appletgui/TitledPanel.js
+jalview/appletgui/Tooltip.js
+jalview/appletgui/TreeCanvas.js
+jalview/appletgui/TreePanel.js
+jalview/appletgui/UserDefinedColours.js
+jalview/bin/ArgsParser.js
+jalview/bin/BuildDetails.js
+jalview/bin/Cache.js
+jalview/bin/Commands.js
+jalview/bin/Console.js
+jalview/bin/GetMemory.js
+jalview/bin/HiDPISetting.js
+jalview/bin/Jalview.js
+jalview/bin/JalviewJS2.js
+jalview/bin/JalviewLite.js
+jalview/bin/JalviewLiteURLRetrieve.js
+jalview/bin/JalviewTaskbar.js
+jalview/bin/Launcher.js
+jalview/bin/MemorySetting.js
+jalview/bin/ScreenInfo.js
+jalview/bin/argparser/Arg.js
+jalview/bin/argparser/ArgParser.js
+jalview/bin/argparser/ArgValue.js
+jalview/bin/argparser/ArgValues.js
+jalview/bin/argparser/ArgValuesMap.js
+jalview/bin/argparser/BootstrapArgs.js
+jalview/bin/argparser/SubVals.js
+jalview/bin/groovy/JalviewObject.js
+jalview/bin/groovy/JalviewObjectI.js
+jalview/commands/ChangeCaseCommand.js
+jalview/commands/CommandI.js
+jalview/commands/EditCommand.js
+jalview/commands/OrderCommand.js
+jalview/commands/RemoveGapColCommand.js
+jalview/commands/RemoveGapsCommand.js
+jalview/commands/SlideSequencesCommand.js
+jalview/commands/TrimRegionCommand.js
+jalview/controller/AlignViewController.js
+jalview/controller/FeatureSettingsController.js
+jalview/controller/FeatureSettingsControllerGuiI.js
+jalview/datamodel/ASequence.js
+jalview/datamodel/ASequenceI.js
+jalview/datamodel/AlignExportSettingsAdapter.js
+jalview/datamodel/AlignedCodon.js
+jalview/datamodel/AlignedCodonFrame.js
+jalview/datamodel/Alignment.js
+jalview/datamodel/AlignmentAnnotation.js
+jalview/datamodel/AlignmentExportData.js
+jalview/datamodel/AlignmentI.js
+jalview/datamodel/AlignmentOrder.js
+jalview/datamodel/AlignmentView.js
+jalview/datamodel/AllColsCollection.js
+jalview/datamodel/AllColsIterator.js
+jalview/datamodel/AllRowsCollection.js
+jalview/datamodel/AllRowsIterator.js
+jalview/datamodel/AnnotatedCollectionI.js
+jalview/datamodel/Annotation.js
+jalview/datamodel/BinaryNode.js
+jalview/datamodel/BinarySequence.js
+jalview/datamodel/CigarArray.js
+jalview/datamodel/CigarBase.js
+jalview/datamodel/CigarCigar.js
+jalview/datamodel/CigarSimple.js
+jalview/datamodel/ColumnSelection.js
+jalview/datamodel/ContactListI.js
+jalview/datamodel/ContactListImpl.js
+jalview/datamodel/ContactListProviderI.js
+jalview/datamodel/ContactMapHolder.js
+jalview/datamodel/ContactMapHolderI.js
+jalview/datamodel/ContactMatrix.js
+jalview/datamodel/ContactMatrixI.js
+jalview/datamodel/ContactRange.js
+jalview/datamodel/ContiguousI.js
+jalview/datamodel/DBRefEntry.js
+jalview/datamodel/DBRefSource.js
+jalview/datamodel/FeatureProperties.js
+jalview/datamodel/FloatContactMatrix.js
+jalview/datamodel/GeneLociI.js
+jalview/datamodel/GeneLocus.js
+jalview/datamodel/GraphLine.js
+jalview/datamodel/GroupSet.js
+jalview/datamodel/GroupSetHolder.js
+jalview/datamodel/GroupSetI.js
+jalview/datamodel/HiddenColumns.js
+jalview/datamodel/HiddenColumnsCursor.js
+jalview/datamodel/HiddenCursorPosition.js
+jalview/datamodel/HiddenSequences.js
+jalview/datamodel/IncompleteCodonException.js
+jalview/datamodel/MappedFeatures.js
+jalview/datamodel/Mapping.js
+jalview/datamodel/MappingType.js
+jalview/datamodel/NodeTransformI.js
+jalview/datamodel/PDBEntry.js
+jalview/datamodel/Point.js
+jalview/datamodel/Profile.js
+jalview/datamodel/ProfileI.js
+jalview/datamodel/Profiles.js
+jalview/datamodel/ProfilesI.js
+jalview/datamodel/Provenance.js
+jalview/datamodel/ProvenanceEntry.js
+jalview/datamodel/Range.js
+jalview/datamodel/RangeElementsIterator.js
+jalview/datamodel/RangeIterator.js
+jalview/datamodel/ResidueCount.js
+jalview/datamodel/RnaViewerModel.js
+jalview/datamodel/SearchResultMatchI.js
+jalview/datamodel/SearchResults.js
+jalview/datamodel/SearchResultsI.js
+jalview/datamodel/SecondaryStructureAnnotation.js
+jalview/datamodel/SeqCigar.js
+jalview/datamodel/SeqDistanceContactMatrix.js
+jalview/datamodel/Sequence.js
+jalview/datamodel/SequenceCollectionI.js
+jalview/datamodel/SequenceCursor.js
+jalview/datamodel/SequenceDummy.js
+jalview/datamodel/SequenceFeature.js
+jalview/datamodel/SequenceGroup.js
+jalview/datamodel/SequenceI.js
+jalview/datamodel/SequenceNode.js
+jalview/datamodel/SequencePoint.js
+jalview/datamodel/StartRegionIterator.js
+jalview/datamodel/StructureViewerModel.js
+jalview/datamodel/VisibleColsCollection.js
+jalview/datamodel/VisibleContigsIterator.js
+jalview/datamodel/VisibleRowsCollection.js
+jalview/datamodel/VisibleRowsIterator.js
+jalview/datamodel/annotations/AlphaFoldAnnotationRowBuilder.js
+jalview/datamodel/annotations/AnnotationRowBuilder.js
+jalview/datamodel/features/FeatureAttributeType.js
+jalview/datamodel/features/FeatureAttributes.js
+jalview/datamodel/features/FeatureLocationI.js
+jalview/datamodel/features/FeatureMatcher.js
+jalview/datamodel/features/FeatureMatcherI.js
+jalview/datamodel/features/FeatureMatcherSet.js
+jalview/datamodel/features/FeatureMatcherSetI.js
+jalview/datamodel/features/FeatureSource.js
+jalview/datamodel/features/FeatureSourceI.js
+jalview/datamodel/features/FeatureSources.js
+jalview/datamodel/features/FeatureStore.js
+jalview/datamodel/features/SequenceFeatures.js
+jalview/datamodel/features/SequenceFeaturesI.js
+jalview/exceptions/JalviewException.js
+jalview/ext/android/ContainerHelpers.js
+jalview/ext/android/SparseDoubleArray.js
+jalview/ext/android/SparseIntArray.js
+jalview/ext/android/SparseShortArray.js
+jalview/ext/ensembl/EnsemblCdna.js
+jalview/ext/ensembl/EnsemblCds.js
+jalview/ext/ensembl/EnsemblData.js
+jalview/ext/ensembl/EnsemblFeatures.js
+jalview/ext/ensembl/EnsemblGene.js
+jalview/ext/ensembl/EnsemblGenome.js
+jalview/ext/ensembl/EnsemblGenomes.js
+jalview/ext/ensembl/EnsemblInfo.js
+jalview/ext/ensembl/EnsemblLookup.js
+jalview/ext/ensembl/EnsemblMap.js
+jalview/ext/ensembl/EnsemblProtein.js
+jalview/ext/ensembl/EnsemblRestClient.js
+jalview/ext/ensembl/EnsemblSeqProxy.js
+jalview/ext/ensembl/EnsemblSequenceFetcher.js
+jalview/ext/ensembl/EnsemblSymbol.js
+jalview/ext/ensembl/EnsemblXref.js
+jalview/ext/ensembl/Species.js
+jalview/ext/htsjdk/HtsContigDb.js
+jalview/ext/htsjdk/VCFReader.js
+jalview/ext/jmol/JalviewJmolBinding.js
+jalview/ext/jmol/JmolCommands.js
+jalview/ext/jmol/JmolParser.js
+jalview/ext/paradise/Annotate3D.js
+jalview/ext/pymol/PymolCommands.js
+jalview/ext/pymol/PymolManager.js
+jalview/ext/rbvi/chimera/ChimeraCommands.js
+jalview/ext/rbvi/chimera/ChimeraListener.js
+jalview/ext/rbvi/chimera/ChimeraXCommands.js
+jalview/ext/rbvi/chimera/ChimeraXManager.js
+jalview/ext/rbvi/chimera/JalviewChimeraBinding.js
+jalview/ext/so/SequenceOntology.js
+jalview/ext/varna/JalviewVarnaBinding.js
+jalview/ext/varna/RnaModel.js
+jalview/ext/varna/VarnaCommands.js
+jalview/fts/api/FTSData.js
+jalview/fts/api/FTSDataColumnI.js
+jalview/fts/api/FTSRestClientI.js
+jalview/fts/api/GFTSPanelI.js
+jalview/fts/api/StructureFTSRestClientI.js
+jalview/fts/core/DecimalFormatTableCellRenderer.js
+jalview/fts/core/FTSDataColumnPreferences.js
+jalview/fts/core/FTSRestClient.js
+jalview/fts/core/FTSRestRequest.js
+jalview/fts/core/FTSRestResponse.js
+jalview/fts/core/GFTSPanel.js
+jalview/fts/service/alphafold/AlphafoldRestClient.js
+jalview/fts/service/pdb/PDBFTSPanel.js
+jalview/fts/service/pdb/PDBFTSRestClient.js
+jalview/fts/service/threedbeacons/TDB_FTSData.js
+jalview/fts/service/threedbeacons/TDBeaconsFTSPanel.js
+jalview/fts/service/threedbeacons/TDBeaconsFTSRestClient.js
+jalview/fts/service/uniprot/UniProtFTSRestClient.js
+jalview/fts/service/uniprot/UniprotFTSPanel.js
+jalview/gui/APQHandlers.js
+jalview/gui/AlignExportOptions.js
+jalview/gui/AlignFrame.js
+jalview/gui/AlignViewport.js
+jalview/gui/AlignmentPanel.js
+jalview/gui/AnnotationChooser.js
+jalview/gui/AnnotationColourChooser.js
+jalview/gui/AnnotationColumnChooser.js
+jalview/gui/AnnotationExporter.js
+jalview/gui/AnnotationLabels.js
+jalview/gui/AnnotationPanel.js
+jalview/gui/AnnotationRowFilter.js
+jalview/gui/AppJmol.js
+jalview/gui/AppJmolBinding.js
+jalview/gui/AppVarna.js
+jalview/gui/AppVarnaBinding.js
+jalview/gui/AssociatePdbFileWithSeq.js
+jalview/gui/BlogReader.js
+jalview/gui/CalculationChooser.js
+jalview/gui/ChimeraViewFrame.js
+jalview/gui/ChimeraXViewFrame.js
+jalview/gui/ColourMenuHelper.js
+jalview/gui/ComboBoxTooltipRenderer.js
+jalview/gui/Console.js
+jalview/gui/CrossRefAction.js
+jalview/gui/CutAndPasteHtmlTransfer.js
+jalview/gui/CutAndPasteTransfer.js
+jalview/gui/Desktop.js
+jalview/gui/EditNameDialog.js
+jalview/gui/FeatureEditor.js
+jalview/gui/FeatureRenderer.js
+jalview/gui/FeatureSettings.js
+jalview/gui/FeatureTypeSettings.js
+jalview/gui/Finder.js
+jalview/gui/FontChooser.js
+jalview/gui/Help.js
+jalview/gui/IProgressIndicator.js
+jalview/gui/IProgressIndicatorHandler.js
+jalview/gui/IdCanvas.js
+jalview/gui/IdPanel.js
+jalview/gui/IdwidthAdjuster.js
+jalview/gui/ImageExporter.js
+jalview/gui/JDatabaseTree.js
+jalview/gui/JalviewBooleanRadioButtons.js
+jalview/gui/JalviewChangeSupport.js
+jalview/gui/JalviewChimeraBindingModel.js
+jalview/gui/JalviewChimeraXBindingModel.js
+jalview/gui/JalviewColourChooser.js
+jalview/gui/JalviewDialog.js
+jalview/gui/JvOptionPane.js
+jalview/gui/JvSwingUtils.js
+jalview/gui/LineartOptions.js
+jalview/gui/MenuChooser.js
+jalview/gui/OOMWarning.js
+jalview/gui/OptsAndParamsPage.js
+jalview/gui/OptsParametersContainerI.js
+jalview/gui/OverviewCanvas.js
+jalview/gui/OverviewPanel.js
+jalview/gui/PCAPanel.js
+jalview/gui/PaintRefresher.js
+jalview/gui/PairwiseAlignPanel.js
+jalview/gui/PopupMenu.js
+jalview/gui/Preferences.js
+jalview/gui/ProgressBar.js
+jalview/gui/ProgressPanel.js
+jalview/gui/PromptUserConfig.js
+jalview/gui/PymolBindingModel.js
+jalview/gui/PymolViewer.js
+jalview/gui/QuitHandler.js
+jalview/gui/RedundancyPanel.js
+jalview/gui/RestInputParamEditDialog.js
+jalview/gui/RestServiceEditorPane.js
+jalview/gui/RotatableCanvas.js
+jalview/gui/ScalePanel.js
+jalview/gui/SeqCanvas.js
+jalview/gui/SeqPanel.js
+jalview/gui/SequenceFetcher.js
+jalview/gui/SequenceRenderer.js
+jalview/gui/Slider.js
+jalview/gui/SliderPanel.js
+jalview/gui/SplashScreen.js
+jalview/gui/SplitFrame.js
+jalview/gui/StructureChooser.js
+jalview/gui/StructureViewer.js
+jalview/gui/StructureViewerBase.js
+jalview/gui/TextColourChooser.js
+jalview/gui/TreeCanvas.js
+jalview/gui/TreePanel.js
+jalview/gui/UserDefinedColours.js
+jalview/gui/UserQuestionnaireCheck.js
+jalview/gui/VamsasApplication.js
+jalview/gui/ViewSelectionMenu.js
+jalview/gui/WebserviceInfo.js
+jalview/gui/WsJobParameters.js
+jalview/gui/WsParamSetManager.js
+jalview/gui/WsPreferences.js
+jalview/gui/structurechooser/PDBStructureChooserQuerySource.js
+jalview/gui/structurechooser/StructureChooserQuerySource.js
+jalview/gui/structurechooser/TDBResultAnalyser.js
+jalview/gui/structurechooser/ThreeDBStructureChooserQuerySource.js
+jalview/httpserver/AbstractRequestHandler.js
+jalview/httpserver/HttpServer.js
+jalview/io/AMSAFile.js
+jalview/io/AlignFile.js
+jalview/io/AlignmentFileReaderI.js
+jalview/io/AlignmentFileWriterI.js
+jalview/io/AlignmentProperties.js
+jalview/io/AnnotationFile.js
+jalview/io/AppletFormatAdapter.js
+jalview/io/BLCFile.js
+jalview/io/BackupFilenameFilter.js
+jalview/io/BackupFilenameParts.js
+jalview/io/BackupFiles.js
+jalview/io/BackupFilesPresetEntry.js
+jalview/io/BioJsHTMLOutput.js
+jalview/io/ClustalFile.js
+jalview/io/DBRefFile.js
+jalview/io/DataSourceType.js
+jalview/io/EMBLLikeFlatFile.js
+jalview/io/EmblFlatFile.js
+jalview/io/FastaFile.js
+jalview/io/FeaturesFile.js
+jalview/io/FileFormat.js
+jalview/io/FileFormatException.js
+jalview/io/FileFormatI.js
+jalview/io/FileFormats.js
+jalview/io/FileLoader.js
+jalview/io/FileParse.js
+jalview/io/FormatAdapter.js
+jalview/io/GenBankFile.js
+jalview/io/HTMLOutput.js
+jalview/io/HtmlFile.js
+jalview/io/HtmlSvgOutput.js
+jalview/io/IdentifyFile.js
+jalview/io/InputStreamParser.js
+jalview/io/IntKeyStringValueEntry.js
+jalview/io/JPredFile.js
+jalview/io/JSONFile.js
+jalview/io/JalviewFileChooser.js
+jalview/io/JalviewFileFilter.js
+jalview/io/JalviewFileView.js
+jalview/io/JnetAnnotationMaker.js
+jalview/io/MSFfile.js
+jalview/io/ModellerDescription.js
+jalview/io/NewickFile.js
+jalview/io/PContactPredictionFile.js
+jalview/io/PDBFeatureSettings.js
+jalview/io/PIRFile.js
+jalview/io/PfamFile.js
+jalview/io/PhylipFile.js
+jalview/io/PileUpfile.js
+jalview/io/RnamlFile.js
+jalview/io/ScoreMatrixFile.js
+jalview/io/SequenceAnnotationReport.js
+jalview/io/SimpleBlastFile.js
+jalview/io/StockholmFile.js
+jalview/io/StructureFile.js
+jalview/io/TCoffeeScoreFile.js
+jalview/io/VamsasAppDatastore.js
+jalview/io/WSWUBlastClient.js
+jalview/io/cache/AppCache.js
+jalview/io/cache/JvCacheableInputBox.js
+jalview/io/exceptions/ImageOutputException.js
+jalview/io/gff/ExonerateHelper.js
+jalview/io/gff/Gff2Helper.js
+jalview/io/gff/Gff3Helper.js
+jalview/io/gff/GffConstants.js
+jalview/io/gff/GffHelperBase.js
+jalview/io/gff/GffHelperFactory.js
+jalview/io/gff/GffHelperI.js
+jalview/io/gff/InterProScanHelper.js
+jalview/io/gff/SequenceOntologyFactory.js
+jalview/io/gff/SequenceOntologyI.js
+jalview/io/gff/SequenceOntologyLite.js
+jalview/io/packed/DataProvider.js
+jalview/io/packed/JalviewDataset.js
+jalview/io/packed/ParsePackedSet.js
+jalview/io/packed/SimpleDataProvider.js
+jalview/io/vamsas/Datasetsequence.js
+jalview/io/vamsas/DatastoreItem.js
+jalview/io/vamsas/DatastoreRegistry.js
+jalview/io/vamsas/Dbref.js
+jalview/io/vamsas/LocalDocSyncObject.js
+jalview/io/vamsas/Rangetype.js
+jalview/io/vamsas/Sequencefeature.js
+jalview/io/vamsas/Sequencemapping.js
+jalview/io/vamsas/Tree.js
+jalview/io/vcf/VCFLoader.js
+jalview/javascript/JSFunctionExec.js
+jalview/javascript/JalviewLiteJsApi.js
+jalview/javascript/JsCallBack.js
+jalview/javascript/JsSelectionSender.js
+jalview/javascript/MouseOverListener.js
+jalview/javascript/MouseOverStructureListener.js
+jalview/javascript/json/JSON.js
+jalview/javascript/web/Client.js
+jalview/javascript/web/ClientResponse.js
+jalview/javascript/web/WebResource.js
+jalview/jbgui/FilterOption.js
+jalview/jbgui/GAlignFrame.js
+jalview/jbgui/GAlignmentPanel.js
+jalview/jbgui/GCutAndPasteHtmlTransfer.js
+jalview/jbgui/GCutAndPasteTransfer.js
+jalview/jbgui/GDesktop.js
+jalview/jbgui/GFinder.js
+jalview/jbgui/GFontChooser.js
+jalview/jbgui/GPCAPanel.js
+jalview/jbgui/GPairwiseAlignPanel.js
+jalview/jbgui/GPreferences.js
+jalview/jbgui/GRestInputParamEditDialog.js
+jalview/jbgui/GRestServiceEditorPane.js
+jalview/jbgui/GRnaStructureViewer.js
+jalview/jbgui/GSequenceLink.js
+jalview/jbgui/GSliderPanel.js
+jalview/jbgui/GSplitFrame.js
+jalview/jbgui/GStructureChooser.js
+jalview/jbgui/GStructureViewer.js
+jalview/jbgui/GTreePanel.js
+jalview/jbgui/GUserDefinedColours.js
+jalview/jbgui/GWebserviceInfo.js
+jalview/jbgui/GWsPreferences.js
+jalview/json/binding/biojs/BioJSReleasePojo.js
+jalview/json/binding/biojs/BioJSRepositoryPojo.js
+jalview/json/binding/biojson/v1/AlignmentAnnotationPojo.js
+jalview/json/binding/biojson/v1/AlignmentPojo.js
+jalview/json/binding/biojson/v1/AnnotationDisplaySettingPojo.js
+jalview/json/binding/biojson/v1/AnnotationPojo.js
+jalview/json/binding/biojson/v1/ColourSchemeMapper.js
+jalview/json/binding/biojson/v1/SequenceFeaturesPojo.js
+jalview/json/binding/biojson/v1/SequenceGrpPojo.js
+jalview/json/binding/biojson/v1/SequencePojo.js
+jalview/log/JLogger.js
+jalview/log/JLoggerI.js
+jalview/log/JLoggerLog4j.js
+jalview/log/JalviewAppender.js
+jalview/math/AlignmentDimension.js
+jalview/math/Matrix.js
+jalview/math/MatrixI.js
+jalview/math/RotatableMatrix.js
+jalview/math/SparseMatrix.js
+jalview/project/Jalview2XML.js
+jalview/renderer/AnnotationRenderer.js
+jalview/renderer/AnnotationRendererFactory.js
+jalview/renderer/AwtRenderPanelI.js
+jalview/renderer/ContactGeometry.js
+jalview/renderer/ContactMapRenderer.js
+jalview/renderer/OverviewRenderer.js
+jalview/renderer/OverviewResColourFinder.js
+jalview/renderer/ResidueColourFinder.js
+jalview/renderer/ResidueShader.js
+jalview/renderer/ResidueShaderI.js
+jalview/renderer/ScaleRenderer.js
+jalview/renderer/api/AnnotationRendererFactoryI.js
+jalview/renderer/api/AnnotationRowRendererI.js
+jalview/renderer/seqfeatures/FeatureColourFinder.js
+jalview/renderer/seqfeatures/FeatureRenderer.js
+jalview/rest/RestHandler.js
+jalview/schemes/AnnotationColourGradient.js
+jalview/schemes/BlossomColourScheme.js
+jalview/schemes/Blosum62ColourScheme.js
+jalview/schemes/BuriedColourScheme.js
+jalview/schemes/ClustalxColourScheme.js
+jalview/schemes/ColourSchemeI.js
+jalview/schemes/ColourSchemeLoader.js
+jalview/schemes/ColourSchemeProperty.js
+jalview/schemes/ColourSchemes.js
+jalview/schemes/Consensus.js
+jalview/schemes/CovariationColourScheme.js
+jalview/schemes/FeatureColour.js
+jalview/schemes/FeatureSettingsAdapter.js
+jalview/schemes/FlowerColourScheme.js
+jalview/schemes/FollowerColourScheme.js
+jalview/schemes/HelixColourScheme.js
+jalview/schemes/HydrophobicColourScheme.js
+jalview/schemes/IdColourScheme.js
+jalview/schemes/JalviewColourScheme.js
+jalview/schemes/NucleotideAmbiguityColourScheme.js
+jalview/schemes/NucleotideColourScheme.js
+jalview/schemes/OceanColourScheme.js
+jalview/schemes/PIDColourScheme.js
+jalview/schemes/PurinePyrimidineColourScheme.js
+jalview/schemes/RNAHelicesColour.js
+jalview/schemes/RNAHelicesColourChooser.js
+jalview/schemes/RNAInteractionColourScheme.js
+jalview/schemes/ResidueColourScheme.js
+jalview/schemes/ResidueProperties.js
+jalview/schemes/ScoreColourScheme.js
+jalview/schemes/StrandColourScheme.js
+jalview/schemes/SunsetColourScheme.js
+jalview/schemes/TCoffeeColourScheme.js
+jalview/schemes/TaylorColourScheme.js
+jalview/schemes/TurnColourScheme.js
+jalview/schemes/UserColourScheme.js
+jalview/schemes/ZappoColourScheme.js
+jalview/structure/AlignmentViewPanelListener.js
+jalview/structure/AtomSpec.js
+jalview/structure/AtomSpecModel.js
+jalview/structure/CommandListener.js
+jalview/structure/SecondaryStructureListener.js
+jalview/structure/SelectionListener.js
+jalview/structure/SelectionSource.js
+jalview/structure/SequenceListener.js
+jalview/structure/StructureCommand.js
+jalview/structure/StructureCommandI.js
+jalview/structure/StructureCommandsBase.js
+jalview/structure/StructureCommandsI.js
+jalview/structure/StructureImportSettings.js
+jalview/structure/StructureListener.js
+jalview/structure/StructureMapping.js
+jalview/structure/StructureMappingcommandSet.js
+jalview/structure/StructureSelectionManager.js
+jalview/structure/VamsasListener.js
+jalview/structure/VamsasSource.js
+jalview/structures/models/AAStructureBindingModel.js
+jalview/structures/models/SequenceStructureBindingModel.js
+jalview/urls/CustomUrlProvider.js
+jalview/urls/IdOrgSettings.js
+jalview/urls/IdentifiersUrlProvider.js
+jalview/urls/UrlLinkDisplay.js
+jalview/urls/UrlLinkTableModel.js
+jalview/urls/UrlProvider.js
+jalview/urls/UrlProviderImpl.js
+jalview/urls/api/UrlProviderFactoryI.js
+jalview/urls/api/UrlProviderI.js
+jalview/urls/applet/AppletUrlProviderFactory.js
+jalview/urls/desktop/DesktopUrlProviderFactory.js
+jalview/util/AWTConsole.js
+jalview/util/ArrayUtils.js
+jalview/util/BrowserLauncher.js
+jalview/util/CaseInsensitiveString.js
+jalview/util/ChannelProperties.js
+jalview/util/ColorUtils.js
+jalview/util/Comparison.js
+jalview/util/DBRefUtils.js
+jalview/util/DnaUtils.js
+jalview/util/FileUtils.js
+jalview/util/Format.js
+jalview/util/GroupUrlLink.js
+jalview/util/HttpUtils.js
+jalview/util/IdUtils.js
+jalview/util/ImageMaker.js
+jalview/util/IntRangeComparator.js
+jalview/util/JSONUtils.js
+jalview/util/LaunchUtils.js
+jalview/util/LinkedIdentityHashSet.js
+jalview/util/Log4j.js
+jalview/util/MapList.js
+jalview/util/MapUtils.js
+jalview/util/MappingUtils.js
+jalview/util/MathUtils.js
+jalview/util/MessageManager.js
+jalview/util/ParseHtmlBodyAndLinks.js
+jalview/util/Platform.js
+jalview/util/QuickSort.js
+jalview/util/ReverseListIterator.js
+jalview/util/SetUtils.js
+jalview/util/ShiftList.js
+jalview/util/ShortcutKeyMaskExWrapper.js
+jalview/util/ShortcutKeyMaskExWrapper11.js
+jalview/util/ShortcutKeyMaskExWrapper8.js
+jalview/util/ShortcutKeyMaskExWrapperI.js
+jalview/util/SparseCount.js
+jalview/util/StringUtils.js
+jalview/util/TableSorter.js
+jalview/util/UrlConstants.js
+jalview/util/UrlLink.js
+jalview/util/dialogrunner/DialogRunnerI.js
+jalview/util/imagemaker/BitmapImageSizing.js
+jalview/util/jarInputStreamProvider.js
+jalview/util/matcher/Condition.js
+jalview/util/matcher/Matcher.js
+jalview/util/matcher/MatcherI.js
+jalview/viewmodel/AlignmentViewport.js
+jalview/viewmodel/OverviewDimensions.js
+jalview/viewmodel/OverviewDimensionsHideHidden.js
+jalview/viewmodel/OverviewDimensionsShowHidden.js
+jalview/viewmodel/PCAModel.js
+jalview/viewmodel/ViewportListenerI.js
+jalview/viewmodel/ViewportProperties.js
+jalview/viewmodel/ViewportRanges.js
+jalview/viewmodel/annotationfilter/AnnotationFilterParameter.js
+jalview/viewmodel/seqfeatures/FeatureRendererModel.js
+jalview/viewmodel/seqfeatures/FeatureRendererSettings.js
+jalview/viewmodel/seqfeatures/FeatureSettingsModel.js
+jalview/viewmodel/seqfeatures/FeaturesDisplayed.js
+jalview/viewmodel/styles/ViewStyle.js
+jalview/workers/AlignCalcManager.js
+jalview/workers/AlignCalcWorker.js
+jalview/workers/AlignmentAnnotationFactory.js
+jalview/workers/AnnotationProviderI.js
+jalview/workers/AnnotationWorker.js
+jalview/workers/ColumnCounterSetWorker.js
+jalview/workers/ComplementConsensusThread.js
+jalview/workers/ConsensusThread.js
+jalview/workers/ConservationThread.js
+jalview/workers/FeatureSetCounterI.js
+jalview/workers/StrucConsensusThread.js
+jalview/ws/AWSThread.js
+jalview/ws/AWsJob.js
+jalview/ws/DBRefFetcher.js
+jalview/ws/HttpClientUtils.js
+jalview/ws/JobStateSummary.js
+jalview/ws/SequenceFetcher.js
+jalview/ws/SequenceFetcherFactory.js
+jalview/ws/WSClient.js
+jalview/ws/WSClientI.js
+jalview/ws/WSMenuEntryProviderI.js
+jalview/ws/datamodel/MappableContactMatrixI.js
+jalview/ws/datamodel/alphafold/MappableContactMatrix.js
+jalview/ws/datamodel/alphafold/PAEContactMatrix.js
+jalview/ws/dbsources/EBIAlfaFold.js
+jalview/ws/dbsources/EbiFileRetrievedProxy.js
+jalview/ws/dbsources/EmblCdsSource.js
+jalview/ws/dbsources/EmblFlatfileSource.js
+jalview/ws/dbsources/EmblSource.js
+jalview/ws/dbsources/EmblXmlSource.js
+jalview/ws/dbsources/GeneDbSource.js
+jalview/ws/dbsources/Pdb.js
+jalview/ws/dbsources/Pfam.js
+jalview/ws/dbsources/PfamFull.js
+jalview/ws/dbsources/PfamSeed.js
+jalview/ws/dbsources/Rfam.js
+jalview/ws/dbsources/RfamFull.js
+jalview/ws/dbsources/RfamSeed.js
+jalview/ws/dbsources/TDBeacons.js
+jalview/ws/dbsources/Uniprot.js
+jalview/ws/dbsources/UniprotName.js
+jalview/ws/dbsources/Xfam.js
+jalview/ws/ebi/EBIFetchClient.js
+jalview/ws/io/mime/HttpContentHandler.js
+jalview/ws/io/mime/JalviewMimeContentHandler.js
+jalview/ws/io/mime/MimeTypes.js
+jalview/ws/jws1/Annotate3D.js
+jalview/ws/jws1/Discoverer.js
+jalview/ws/jws1/JPredClient.js
+jalview/ws/jws1/JPredThread.js
+jalview/ws/jws1/JWS1Thread.js
+jalview/ws/jws1/MsaWSClient.js
+jalview/ws/jws1/MsaWSThread.js
+jalview/ws/jws1/SeqSearchWSClient.js
+jalview/ws/jws1/SeqSearchWSThread.js
+jalview/ws/jws1/WS1Client.js
+jalview/ws/jws1/WSJob.js
+jalview/ws/jws2/AAConClient.js
+jalview/ws/jws2/AADisorderClient.js
+jalview/ws/jws2/AWS2Thread.js
+jalview/ws/jws2/AbstractJabaCalcWorker.js
+jalview/ws/jws2/JWs2Job.js
+jalview/ws/jws2/JabaParamStore.js
+jalview/ws/jws2/JabaPreset.js
+jalview/ws/jws2/JabaWsServerQuery.js
+jalview/ws/jws2/JabawsCalcWorker.js
+jalview/ws/jws2/JabawsMsaInterfaceAlignCalcWorker.js
+jalview/ws/jws2/Jws2Client.js
+jalview/ws/jws2/Jws2Discoverer.js
+jalview/ws/jws2/MsaWSClient.js
+jalview/ws/jws2/MsaWSThread.js
+jalview/ws/jws2/ParameterUtils.js
+jalview/ws/jws2/RNAalifoldClient.js
+jalview/ws/jws2/SequenceAnnotationWSClient.js
+jalview/ws/jws2/dm/AAConSettings.js
+jalview/ws/jws2/dm/JabaOption.js
+jalview/ws/jws2/dm/JabaParameter.js
+jalview/ws/jws2/dm/JabaValueConstrain.js
+jalview/ws/jws2/dm/JabaWsParamSet.js
+jalview/ws/jws2/jabaws2/Jws2Instance.js
+jalview/ws/jws2/jabaws2/Jws2InstanceFactory.js
+jalview/ws/params/ArgumentI.js
+jalview/ws/params/AutoCalcSetting.js
+jalview/ws/params/InvalidArgumentException.js
+jalview/ws/params/OptionI.js
+jalview/ws/params/ParamDatastoreI.js
+jalview/ws/params/ParamManager.js
+jalview/ws/params/ParameterI.js
+jalview/ws/params/ValueConstrainI.js
+jalview/ws/params/WsParamSetI.js
+jalview/ws/params/simple/BooleanOption.js
+jalview/ws/params/simple/IntegerParameter.js
+jalview/ws/params/simple/Option.js
+jalview/ws/params/simple/Parameter.js
+jalview/ws/params/simple/StringChoiceParameter.js
+jalview/ws/rest/AlignmentProcessor.js
+jalview/ws/rest/HttpResultSet.js
+jalview/ws/rest/InputType.js
+jalview/ws/rest/NoValidInputDataException.js
+jalview/ws/rest/RestClient.js
+jalview/ws/rest/RestJob.js
+jalview/ws/rest/RestJobThread.js
+jalview/ws/rest/RestServiceDescription.js
+jalview/ws/rest/params/Alignment.js
+jalview/ws/rest/params/AnnotationFile.js
+jalview/ws/rest/params/JobConstant.js
+jalview/ws/rest/params/SeqGroupIndexVector.js
+jalview/ws/rest/params/SeqIdVector.js
+jalview/ws/rest/params/SeqVector.js
+jalview/ws/rest/params/Tree.js
+jalview/ws/seqfetcher/ASequenceFetcher.js
+jalview/ws/seqfetcher/DbSourceProxy.js
+jalview/ws/seqfetcher/DbSourceProxyImpl.js
+jalview/ws/sifts/MappingOutputPojo.js
+jalview/ws/sifts/SiftsClient.js
+jalview/ws/sifts/SiftsException.js
+jalview/ws/sifts/SiftsSettings.js
+jalview/ws/uimodel/AlignAnalysisUIText.js
+jalview/ws/utils/UrlDownloadClient.js
+jalview/xml/binding/embl/EntrySetType.js
+jalview/xml/binding/embl/EntryType.js
+jalview/xml/binding/embl/ObjectFactory.js
+jalview/xml/binding/embl/ROOT.js
+jalview/xml/binding/embl/XrefType.js
+jalview/xml/binding/jalview/AlcodonFrame.js
+jalview/xml/binding/jalview/Annotation.js
+jalview/xml/binding/jalview/AnnotationColourScheme.js
+jalview/xml/binding/jalview/AnnotationElement.js
+jalview/xml/binding/jalview/DoubleMatrix.js
+jalview/xml/binding/jalview/DoubleVector.js
+jalview/xml/binding/jalview/Feature.js
+jalview/xml/binding/jalview/FeatureMatcher.js
+jalview/xml/binding/jalview/FeatureMatcherSet.js
+jalview/xml/binding/jalview/FilterBy.js
+jalview/xml/binding/jalview/JalviewModel.js
+jalview/xml/binding/jalview/JalviewUserColours.js
+jalview/xml/binding/jalview/MapListType.js
+jalview/xml/binding/jalview/MapOnAMatrixType.js
+jalview/xml/binding/jalview/Mapping.js
+jalview/xml/binding/jalview/MatrixType.js
+jalview/xml/binding/jalview/NoValueColour.js
+jalview/xml/binding/jalview/ObjectFactory.js
+jalview/xml/binding/jalview/PcaDataType.js
+jalview/xml/binding/jalview/Pdbentry.js
+jalview/xml/binding/jalview/Property.js
+jalview/xml/binding/jalview/Sequence.js
+jalview/xml/binding/jalview/SequenceSet.js
+jalview/xml/binding/jalview/SequenceType.js
+jalview/xml/binding/jalview/ThresholdType.js
+jalview/xml/binding/jalview/VAMSAS.js
+jalview/xml/binding/jalview/WebServiceParameterSet.js
+jalview/xml/binding/jalview/package-info.js
+jalview/xml/binding/sifts/Alignment.js
+jalview/xml/binding/sifts/EntityType.js
+jalview/xml/binding/sifts/Entry.js
+jalview/xml/binding/sifts/ObjectFactory.js
+jalview/xml/binding/sifts/package-info.js
+jalview/xml/binding/uniprot/CitationType.js
+jalview/xml/binding/uniprot/CofactorType.js
+jalview/xml/binding/uniprot/CommentType.js
+jalview/xml/binding/uniprot/ConsortiumType.js
+jalview/xml/binding/uniprot/DbReferenceType.js
+jalview/xml/binding/uniprot/Entry.js
+jalview/xml/binding/uniprot/EventType.js
+jalview/xml/binding/uniprot/EvidenceType.js
+jalview/xml/binding/uniprot/EvidencedStringType.js
+jalview/xml/binding/uniprot/FeatureType.js
+jalview/xml/binding/uniprot/GeneLocationType.js
+jalview/xml/binding/uniprot/GeneNameType.js
+jalview/xml/binding/uniprot/GeneType.js
+jalview/xml/binding/uniprot/ImportedFromType.js
+jalview/xml/binding/uniprot/InteractantType.js
+jalview/xml/binding/uniprot/IsoformType.js
+jalview/xml/binding/uniprot/KeywordType.js
+jalview/xml/binding/uniprot/LocationType.js
+jalview/xml/binding/uniprot/MoleculeType.js
+jalview/xml/binding/uniprot/NameListType.js
+jalview/xml/binding/uniprot/ObjectFactory.js
+jalview/xml/binding/uniprot/OrganismNameType.js
+jalview/xml/binding/uniprot/OrganismType.js
+jalview/xml/binding/uniprot/PersonType.js
+jalview/xml/binding/uniprot/PhysiologicalReactionType.js
+jalview/xml/binding/uniprot/PositionType.js
+jalview/xml/binding/uniprot/PropertyType.js
+jalview/xml/binding/uniprot/ProteinExistenceType.js
+jalview/xml/binding/uniprot/ProteinType.js
+jalview/xml/binding/uniprot/ReactionType.js
+jalview/xml/binding/uniprot/ReferenceType.js
+jalview/xml/binding/uniprot/SequenceType.js
+jalview/xml/binding/uniprot/SourceDataType.js
+jalview/xml/binding/uniprot/SourceType.js
+jalview/xml/binding/uniprot/StatusType.js
+jalview/xml/binding/uniprot/SubcellularLocationType.js
+jalview/xml/binding/uniprot/Uniprot.js
+jalview/xml/binding/uniprot/package-info.js
 java/applet/AppletContext.js
 java/applet/AppletStub.js
 java/applet/JSApplet.js
-java/awt/ActiveEvent.js
-java/awt/Adjustable.js
 java/awt/AWTEvent.js
 java/awt/AWTEventMulticaster.js
 java/awt/AWTKeyStroke.js
+java/awt/ActiveEvent.js
+java/awt/Adjustable.js
+java/awt/AlphaComposite.js
 java/awt/BasicStroke.js
 java/awt/BorderLayout.js
-java/awt/Button.js
+java/awt/CardLayout.js
 java/awt/Color.js
-java/awt/color/ColorSpace.js
 java/awt/Component.js
 java/awt/ComponentOrientation.js
-java/awt/ContainerOrderFocusTraversalPolicy.js
+java/awt/Composite.js
 java/awt/Container.js
+java/awt/ContainerOrderFocusTraversalPolicy.js
 java/awt/Cursor.js
 java/awt/DefaultFocusTraversalPolicy.js
 java/awt/DefaultKeyboardFocusManager.js
-java/awt/Dialog.js
 java/awt/Dimension.js
+java/awt/EventDispatchThread.js
+java/awt/EventFilter.js
+java/awt/EventQueue.js
+java/awt/EventQueueItem.js
+java/awt/FlowLayout.js
+java/awt/FocusTraversalPolicy.js
+java/awt/Font.js
+java/awt/FontMetrics.js
+java/awt/Graphics.js
+java/awt/Graphics2D.js
+java/awt/GraphicsCallback.js
+java/awt/GraphicsConfiguration.js
+java/awt/GraphicsDevice.js
+java/awt/GraphicsEnvironment.js
+java/awt/GridBagConstraints.js
+java/awt/GridBagLayout.js
+java/awt/GridBagLayoutInfo.js
+java/awt/GridLayout.js
+java/awt/Image.js
+java/awt/Insets.js
+java/awt/ItemSelectable.js
+java/awt/JSComponent.js
+java/awt/JSDialog.js
+java/awt/JSFrame.js
+java/awt/JSPanel.js
+java/awt/KeyEventDispatcher.js
+java/awt/KeyEventPostProcessor.js
+java/awt/KeyboardFocusManager.js
+java/awt/LayoutManager.js
+java/awt/LayoutManager2.js
+java/awt/LightweightDispatcher.js
+java/awt/Paint.js
+java/awt/Point.js
+java/awt/Queue.js
+java/awt/Rectangle.js
+java/awt/RenderingHints.js
+java/awt/SentEvent.js
+java/awt/Shape.js
+java/awt/Stroke.js
+java/awt/Taskbar.js
+java/awt/TextComponent.js
+java/awt/Toolkit.js
+java/awt/Transparency.js
+java/awt/VKCollection.js
+java/awt/Window.js
+java/awt/color/ColorSpace.js
+java/awt/datatransfer/ClipboardOwner.js
+java/awt/datatransfer/FlavorMap.js
+java/awt/datatransfer/FlavorTable.js
+java/awt/datatransfer/SystemFlavorMap.js
+java/awt/dnd/DropTarget.js
+java/awt/dnd/DropTargetContext.js
+java/awt/dnd/DropTargetListener.js
 java/awt/dnd/peer/DropTargetPeer.js
+java/awt/event/AWTEventListener.js
+java/awt/event/ActionEvent.js
 java/awt/event/ActionListener.js
 java/awt/event/AdjustmentEvent.js
 java/awt/event/AdjustmentListener.js
-java/awt/event/AWTEventListener.js
 java/awt/event/ComponentAdapter.js
 java/awt/event/ComponentEvent.js
 java/awt/event/ComponentListener.js
+java/awt/event/ContainerEvent.js
 java/awt/event/ContainerListener.js
+java/awt/event/FocusAdapter.js
 java/awt/event/FocusEvent.js
 java/awt/event/FocusListener.js
 java/awt/event/HierarchyBoundsListener.js
@@ -39,10 +1118,15 @@ java/awt/event/InputMethodListener.js
 java/awt/event/InvocationEvent.js
 java/awt/event/ItemEvent.js
 java/awt/event/ItemListener.js
+java/awt/event/KeyAdapter.js
+java/awt/event/KeyEvent.js
 java/awt/event/KeyListener.js
+java/awt/event/MouseAdapter.js
 java/awt/event/MouseEvent.js
 java/awt/event/MouseListener.js
+java/awt/event/MouseMotionAdapter.js
 java/awt/event/MouseMotionListener.js
+java/awt/event/MouseWheelEvent.js
 java/awt/event/MouseWheelListener.js
 java/awt/event/TextListener.js
 java/awt/event/WindowAdapter.js
@@ -50,131 +1134,254 @@ java/awt/event/WindowEvent.js
 java/awt/event/WindowFocusListener.js
 java/awt/event/WindowListener.js
 java/awt/event/WindowStateListener.js
-java/awt/EventDispatchThread.js
-java/awt/EventFilter.js
-java/awt/EventQueue.js
-java/awt/EventQueueItem.js
-java/awt/FlowLayout.js
-java/awt/FocusTraversalPolicy.js
-java/awt/Font.js
 java/awt/font/FontRenderContext.js
-java/awt/FontMetrics.js
-java/awt/Frame.js
+java/awt/font/TextAttribute.js
 java/awt/geom/AffineTransform.js
 java/awt/geom/Dimension2D.js
 java/awt/geom/Path2D.js
 java/awt/geom/PathIterator.js
 java/awt/geom/Point2D.js
+java/awt/geom/RectIterator.js
 java/awt/geom/Rectangle2D.js
 java/awt/geom/RectangularShape.js
-java/awt/geom/RectIterator.js
-java/awt/GraphicsCallback.js
-java/awt/GraphicsConfiguration.js
-java/awt/GraphicsDevice.js
-java/awt/GraphicsEnvironment.js
+java/awt/image/BufferedImage.js
+java/awt/image/ColorModel.js
+java/awt/image/DataBuffer.js
+java/awt/image/DataBufferInt.js
+java/awt/image/DirectColorModel.js
+java/awt/image/ImageConsumer.js
 java/awt/image/ImageObserver.js
-java/awt/Insets.js
-java/awt/ItemSelectable.js
-java/awt/JSComponent.js
-java/awt/JSDialog.js
-java/awt/JSFrame.js
-java/awt/JSPanel.js
-java/awt/KeyboardFocusManager.js
-java/awt/KeyEventDispatcher.js
-java/awt/KeyEventPostProcessor.js
-java/awt/Label.js
-java/awt/LayoutManager.js
-java/awt/LayoutManager2.js
-java/awt/LightweightDispatcher.js
-java/awt/Paint.js
-java/awt/Panel.js
+java/awt/image/PackedColorModel.js
+java/awt/image/Raster.js
+java/awt/image/RenderedImage.js
+java/awt/image/SampleModel.js
+java/awt/image/SinglePixelPackedSampleModel.js
+java/awt/image/WritableRaster.js
 java/awt/peer/ComponentPeer.js
 java/awt/peer/ContainerPeer.js
 java/awt/peer/FramePeer.js
 java/awt/peer/KeyboardFocusManagerPeer.js
 java/awt/peer/LightweightPeer.js
 java/awt/peer/WindowPeer.js
-java/awt/Point.js
-java/awt/Queue.js
-java/awt/Rectangle.js
-java/awt/RenderingHints.js
-java/awt/Scrollbar.js
-java/awt/ScrollPane.js
-java/awt/Shape.js
-java/awt/Stroke.js
-java/awt/TextArea.js
-java/awt/TextComponent.js
-java/awt/TextField.js
-java/awt/Toolkit.js
-java/awt/Transparency.js
-java/awt/Window.js
+java/awt/print/Printable.js
 java/beans/ChangeListenerMap.js
 java/beans/PropertyChangeEvent.js
 java/beans/PropertyChangeListener.js
 java/beans/PropertyChangeSupport.js
+java/io/BufferedInputStream.js
+java/io/BufferedWriter.js
+java/io/DataInput.js
+java/io/DataInputStream.js
+java/io/File.js
+java/io/FileOutputStream.js
+java/io/FileReader.js
+java/io/FileSystem.js
+java/io/FilenameFilter.js
+java/io/FilterInputStream.js
+java/io/FilterOutputStream.js
+java/io/InputStream.js
+java/io/InputStreamReader.js
+java/io/ObjectStreamField.js
+java/io/OutputStreamWriter.js
+java/io/PrintStream.js
+java/io/StringWriter.js
+java/io/Writer.js
 java/lang/AbstractStringBuilder.js
+java/lang/ApplicationShutdownHooks.js
 java/lang/Class.js
 java/lang/Enum.js
 java/lang/Iterable.js
-java/lang/reflect/Constructor.js
-java/lang/reflect/Method.js
+java/lang/Runtime.js
+java/lang/Shutdown.js
 java/lang/StringBuffer.js
 java/lang/StringBuilder.js
 java/lang/Thread.js
 java/lang/ThreadGroup.js
-java/math/RoundingMode.js
+java/lang/ThreadLocal.js
+java/lang/ref/ReferenceQueue.js
+java/lang/reflect/AccessibleObject.js
+java/lang/reflect/AnnotatedElement.js
+java/lang/reflect/Constructor.js
+java/lang/reflect/Method.js
+java/math/BigDecimal.js
+java/math/BigInteger.js
+java/math/MathContext.js
+java/net/ContentHandler.js
+java/net/HttpURLConnection.js
+java/net/URI.js
 java/net/URL.js
+java/net/URLConnection.js
+java/net/URLEncoder.js
+java/net/URLStreamHandler.js
 java/net/URLStreamHandlerFactory.js
+java/net/UnknownHostException.js
+java/nio/file/FileSystem.js
+java/nio/file/FileSystems.js
+java/nio/file/Path.js
+java/nio/file/Watchable.js
+java/nio/file/spi/FileSystemProvider.js
+java/security/AccessController.js
+java/security/PrivilegedAction.js
+java/security/PrivilegedExceptionAction.js
 java/text/CharacterIterator.js
-java/text/DecimalFormat.js
-java/text/DecimalFormatSymbols.js
-java/text/DigitList.js
-java/text/FieldPosition.js
-java/text/Format.js
-java/text/NumberFormat.js
+java/text/DateFormat.js
+java/text/DateFormatSymbols.js
+java/text/MessageFormat.js
+java/text/SimpleDateFormat.js
+java/text/spi/BreakIteratorProvider.js
+java/text/spi/CollatorProvider.js
+java/text/spi/DateFormatProvider.js
+java/text/spi/DateFormatSymbolsProvider.js
+java/text/spi/DecimalFormatSymbolsProvider.js
+java/text/spi/NumberFormatProvider.js
 java/util/AbstractCollection.js
 java/util/AbstractList.js
 java/util/AbstractMap.js
+java/util/AbstractQueue.js
 java/util/AbstractSequentialList.js
 java/util/AbstractSet.js
+java/util/ArrayDeque.js
 java/util/ArrayList.js
 java/util/Arrays.js
+java/util/BitSet.js
+java/util/Calendar.js
 java/util/Collection.js
 java/util/Collections.js
 java/util/Comparator.js
 java/util/Deque.js
 java/util/Dictionary.js
+java/util/EnumMap.js
+java/util/EnumSet.js
 java/util/Enumeration.js
 java/util/EventListener.js
 java/util/EventObject.js
+java/util/Formatter.js
+java/util/GregorianCalendar.js
 java/util/HashMap.js
 java/util/HashSet.js
 java/util/Hashtable.js
 java/util/IdentityHashMap.js
 java/util/Iterator.js
+java/util/JumboEnumSet.js
 java/util/LinkedHashMap.js
+java/util/LinkedHashSet.js
 java/util/LinkedList.js
 java/util/List.js
-java/util/ListResourceBundle.js
+java/util/ListIterator.js
 java/util/Locale.js
 java/util/Map.js
+java/util/NavigableMap.js
+java/util/NavigableSet.js
 java/util/Objects.js
+java/util/Properties.js
+java/util/PropertyResourceBundle.js
 java/util/Queue.js
 java/util/Random.js
 java/util/RandomAccess.js
-java/util/ResourceBundle.js
+java/util/RegularEnumSet.js
+java/util/ServiceLoader.js
 java/util/Set.js
+java/util/SortedMap.js
+java/util/SortedSet.js
+java/util/Spliterator.js
+java/util/StringTokenizer.js
 java/util/TimSort.js
+java/util/TimeZone.js
+java/util/TreeMap.js
+java/util/TreeSet.js
 java/util/Vector.js
-javajs/api/JSFunction.js
+java/util/WeakHashMap.js
+java/util/concurrent/AbstractExecutorService.js
+java/util/concurrent/BlockingQueue.js
+java/util/concurrent/Callable.js
+java/util/concurrent/Executor.js
+java/util/concurrent/ExecutorService.js
+java/util/concurrent/Executors.js
+java/util/concurrent/Future.js
+java/util/concurrent/FutureTask.js
+java/util/concurrent/LinkedBlockingQueue.js
+java/util/concurrent/RejectedExecutionHandler.js
+java/util/concurrent/RunnableFuture.js
+java/util/concurrent/Semaphore.js
+java/util/concurrent/ThreadFactory.js
+java/util/concurrent/ThreadPoolExecutor.js
+java/util/concurrent/TimeUnit.js
+java/util/concurrent/locks/AbstractOwnableSynchronizer.js
+java/util/concurrent/locks/AbstractQueuedSynchronizer.js
+java/util/concurrent/locks/Condition.js
+java/util/concurrent/locks/Lock.js
+java/util/concurrent/locks/ReadWriteLock.js
+java/util/concurrent/locks/ReentrantLock.js
+java/util/concurrent/locks/ReentrantReadWriteLock.js
+java/util/function/BiConsumer.js
+java/util/function/BiFunction.js
+java/util/function/BinaryOperator.js
+java/util/function/Consumer.js
+java/util/function/Function.js
+java/util/function/Supplier.js
+java/util/jar/JarEntry.js
+java/util/jar/JarInputStream.js
+java/util/regex/Pattern.js
+java/util/spi/CalendarDataProvider.js
+java/util/spi/CurrencyNameProvider.js
+java/util/spi/LocaleNameProvider.js
+java/util/spi/TimeZoneNameProvider.js
+java/util/stream/AbstractPipeline.js
+java/util/stream/BaseStream.js
+java/util/stream/Collector.js
+java/util/stream/Collectors.js
+java/util/stream/PipelineHelper.js
+java/util/stream/ReduceOps.js
+java/util/stream/ReferencePipeline.js
+java/util/stream/Sink.js
+java/util/stream/Stream.js
+java/util/stream/StreamOpFlag.js
+java/util/stream/StreamShape.js
+java/util/stream/StreamSupport.js
+java/util/stream/TerminalOp.js
+java/util/stream/TerminalSink.js
+java/util/zip/CRC32.js
+java/util/zip/Inflater.js
+java/util/zip/InflaterInputStream.js
+java/util/zip/ZipConstants.js
+java/util/zip/ZipEntry.js
+java/util/zip/ZipInputStream.js
+javajs/api/BytePoster.js
+javajs/api/GenericCifDataParser.js
+javajs/api/GenericLineReader.js
+javajs/api/GenericOutputChannel.js
+javajs/api/JSONEncodable.js
+javajs/async/SwingJSUtils.js
+javajs/util/A4d.js
 javajs/util/AjaxURLConnection.js
+javajs/util/AjaxURLStreamHandler.js
 javajs/util/AjaxURLStreamHandlerFactory.js
-javajs/util/AU.js
+javajs/util/BS.js
+javajs/util/Base64.js
+javajs/util/CU.js
+javajs/util/CifDataParser.js
+javajs/util/DF.js
+javajs/util/Encoding.js
 javajs/util/JSThread.js
+javajs/util/LimitedLineReader.js
 javajs/util/Lst.js
+javajs/util/M3.js
+javajs/util/M34.js
+javajs/util/M34d.js
+javajs/util/M3d.js
+javajs/util/M4d.js
+javajs/util/OC.js
+javajs/util/P3d.js
+javajs/util/P3i.js
+javajs/util/P4d.js
 javajs/util/PT.js
+javajs/util/Rdr.js
 javajs/util/SB.js
-javax/net/ssl/HttpsUrlConnection.js
+javajs/util/T3d.js
+javajs/util/T3i.js
+javajs/util/T4d.js
+javajs/util/V3d.js
+javax/net/ssl/HttpsURLConnection.js
 javax/swing/AbstractAction.js
 javax/swing/AbstractButton.js
 javax/swing/AbstractListModel.js
@@ -182,98 +1389,171 @@ javax/swing/Action.js
 javax/swing/ActionMap.js
 javax/swing/AncestorNotifier.js
 javax/swing/ArrayTable.js
-javax/swing/border/AbstractBorder.js
-javax/swing/border/BevelBorder.js
-javax/swing/border/Border.js
-javax/swing/border/CompoundBorder.js
-javax/swing/border/EmptyBorder.js
-javax/swing/border/EtchedBorder.js
-javax/swing/border/LineBorder.js
+javax/swing/Autoscroller.js
 javax/swing/BorderFactory.js
 javax/swing/BoundedRangeModel.js
 javax/swing/BoxLayout.js
 javax/swing/ButtonGroup.js
 javax/swing/ButtonModel.js
+javax/swing/CellRendererPane.js
 javax/swing/ClientPropertyKey.js
+javax/swing/ComboBoxEditor.js
 javax/swing/ComboBoxModel.js
+javax/swing/ComponentInputMap.js
 javax/swing/DefaultBoundedRangeModel.js
 javax/swing/DefaultButtonModel.js
 javax/swing/DefaultComboBoxModel.js
+javax/swing/DefaultDesktopManager.js
+javax/swing/DefaultListCellRenderer.js
+javax/swing/DefaultListSelectionModel.js
+javax/swing/DefaultRowSorter.js
 javax/swing/DefaultSingleSelectionModel.js
+javax/swing/DesktopManager.js
 javax/swing/DropMode.js
-javax/swing/event/AncestorEvent.js
-javax/swing/event/AncestorListener.js
-javax/swing/event/CaretEvent.js
-javax/swing/event/CaretListener.js
-javax/swing/event/ChangeEvent.js
-javax/swing/event/ChangeListener.js
-javax/swing/event/DocumentEvent.js
-javax/swing/event/DocumentListener.js
-javax/swing/event/EventListenerList.js
-javax/swing/event/ListDataEvent.js
-javax/swing/event/ListDataListener.js
-javax/swing/event/UndoableEditEvent.js
-javax/swing/event/UndoableEditListener.js
 javax/swing/FocusManager.js
-javax/swing/InternalFrameFocusTraversalPolicy.js
-javax/swing/LayoutComparator.js
-javax/swing/LayoutFocusTraversalPolicy.js
-javax/swing/SortingFocusTraversalPolicy.js
-javax/swing/SwingContainerOrderFocusTraversalPolicy.js
-javax/swing/SwingDefaultFocusTraversalPolicy.js
+javax/swing/Icon.js
+javax/swing/ImageIcon.js
 javax/swing/InputMap.js
+javax/swing/InternalFrameFocusTraversalPolicy.js
 javax/swing/JApplet.js
 javax/swing/JButton.js
 javax/swing/JCheckBox.js
 javax/swing/JCheckBoxMenuItem.js
 javax/swing/JComboBox.js
 javax/swing/JComponent.js
+javax/swing/JDesktopPane.js
+javax/swing/JDialog.js
+javax/swing/JFileChooser.js
 javax/swing/JFrame.js
+javax/swing/JInternalFrame.js
 javax/swing/JLabel.js
 javax/swing/JLayeredPane.js
+javax/swing/JList.js
 javax/swing/JMenu.js
 javax/swing/JMenuBar.js
 javax/swing/JMenuItem.js
+javax/swing/JOptionPane.js
 javax/swing/JPanel.js
 javax/swing/JPopupMenu.js
+javax/swing/JProgressBar.js
 javax/swing/JRadioButtonMenuItem.js
 javax/swing/JRootPane.js
 javax/swing/JScrollBar.js
 javax/swing/JScrollPane.js
 javax/swing/JSeparator.js
+javax/swing/JTabbedPane.js
+javax/swing/JTable.js
 javax/swing/JTextArea.js
 javax/swing/JTextField.js
 javax/swing/JToggleButton.js
+javax/swing/JToolTip.js
 javax/swing/JViewport.js
-javax/swing/KeyboardManager.js
+javax/swing/JWindow.js
 javax/swing/KeyStroke.js
+javax/swing/KeyboardManager.js
+javax/swing/LayoutComparator.js
+javax/swing/LayoutFocusTraversalPolicy.js
+javax/swing/ListCellRenderer.js
 javax/swing/ListModel.js
+javax/swing/ListSelectionModel.js
 javax/swing/LookAndFeel.js
 javax/swing/MenuElement.js
+javax/swing/MenuSelectionManager.js
 javax/swing/MutableComboBoxModel.js
-javax/swing/plaf/ActionMapUIResource.js
-javax/swing/plaf/basic/BasicBorders.js
-javax/swing/plaf/BorderUIResource.js
-javax/swing/plaf/ColorUIResource.js
-javax/swing/plaf/ComponentUI.js
-javax/swing/plaf/DimensionUIResource.js
-javax/swing/plaf/FontUIResource.js
-javax/swing/plaf/InputMapUIResource.js
-javax/swing/plaf/InsetsUIResource.js
-javax/swing/plaf/UIResource.js
+javax/swing/Popup.js
+javax/swing/PopupFactory.js
 javax/swing/RepaintManager.js
 javax/swing/RootPaneContainer.js
-javax/swing/Scrollable.js
+javax/swing/RowSorter.js
 javax/swing/ScrollPaneConstants.js
 javax/swing/ScrollPaneLayout.js
+javax/swing/Scrollable.js
 javax/swing/SingleSelectionModel.js
 javax/swing/SizeRequirements.js
+javax/swing/SortOrder.js
+javax/swing/SortingFocusTraversalPolicy.js
+javax/swing/Spring.js
+javax/swing/SpringLayout.js
 javax/swing/SwingConstants.js
+javax/swing/SwingContainerOrderFocusTraversalPolicy.js
+javax/swing/SwingDefaultFocusTraversalPolicy.js
 javax/swing/SwingPaintEventDispatcher.js
 javax/swing/SwingUtilities.js
+javax/swing/Timer.js
+javax/swing/ToolTipManager.js
+javax/swing/TransferHandler.js
+javax/swing/UIDefaults.js
+javax/swing/UIManager.js
+javax/swing/ViewportLayout.js
+javax/swing/WindowConstants.js
+javax/swing/border/AbstractBorder.js
+javax/swing/border/BevelBorder.js
+javax/swing/border/Border.js
+javax/swing/border/CompoundBorder.js
+javax/swing/border/EmptyBorder.js
+javax/swing/border/EtchedBorder.js
+javax/swing/border/LineBorder.js
+javax/swing/border/TitledBorder.js
+javax/swing/event/AncestorEvent.js
+javax/swing/event/AncestorListener.js
+javax/swing/event/CaretEvent.js
+javax/swing/event/CaretListener.js
+javax/swing/event/CellEditorListener.js
+javax/swing/event/ChangeEvent.js
+javax/swing/event/ChangeListener.js
+javax/swing/event/DocumentEvent.js
+javax/swing/event/DocumentListener.js
+javax/swing/event/EventListenerList.js
+javax/swing/event/HyperlinkListener.js
+javax/swing/event/InternalFrameAdapter.js
+javax/swing/event/InternalFrameEvent.js
+javax/swing/event/InternalFrameListener.js
+javax/swing/event/ListDataEvent.js
+javax/swing/event/ListDataListener.js
+javax/swing/event/ListSelectionEvent.js
+javax/swing/event/ListSelectionListener.js
+javax/swing/event/MenuEvent.js
+javax/swing/event/MenuKeyListener.js
+javax/swing/event/MenuListener.js
+javax/swing/event/MouseInputListener.js
+javax/swing/event/RowSorterEvent.js
+javax/swing/event/RowSorterListener.js
+javax/swing/event/SwingPropertyChangeSupport.js
+javax/swing/event/TableColumnModelEvent.js
+javax/swing/event/TableColumnModelListener.js
+javax/swing/event/TableModelEvent.js
+javax/swing/event/TableModelListener.js
+javax/swing/event/UndoableEditEvent.js
+javax/swing/event/UndoableEditListener.js
+javax/swing/filechooser/FileFilter.js
+javax/swing/filechooser/FileView.js
+javax/swing/plaf/ActionMapUIResource.js
+javax/swing/plaf/BorderUIResource.js
+javax/swing/plaf/ColorUIResource.js
+javax/swing/plaf/ComponentInputMapUIResource.js
+javax/swing/plaf/ComponentUI.js
+javax/swing/plaf/DimensionUIResource.js
+javax/swing/plaf/FontUIResource.js
+javax/swing/plaf/InputMapUIResource.js
+javax/swing/plaf/InsetsUIResource.js
+javax/swing/plaf/UIResource.js
+javax/swing/plaf/basic/BasicBorders.js
+javax/swing/plaf/basic/BasicGraphicsUtils.js
+javax/swing/table/AbstractTableModel.js
+javax/swing/table/DefaultTableCellRenderer.js
+javax/swing/table/DefaultTableColumnModel.js
+javax/swing/table/DefaultTableModel.js
+javax/swing/table/JTableHeader.js
+javax/swing/table/TableCellRenderer.js
+javax/swing/table/TableColumn.js
+javax/swing/table/TableColumnModel.js
+javax/swing/table/TableModel.js
+javax/swing/table/TableRowSorter.js
 javax/swing/text/AbstractDocument.js
 javax/swing/text/AttributeSet.js
+javax/swing/text/BoxView.js
 javax/swing/text/Caret.js
+javax/swing/text/CompositeView.js
 javax/swing/text/DefaultCaret.js
 javax/swing/text/DefaultEditorKit.js
 javax/swing/text/Document.js
@@ -296,65 +1576,409 @@ javax/swing/text/TabExpander.js
 javax/swing/text/TextAction.js
 javax/swing/text/Utilities.js
 javax/swing/text/View.js
+javax/swing/text/WrappedPlainView.js
 javax/swing/tree/TreeNode.js
-javax/swing/UIDefaults.js
-javax/swing/UIManager.js
 javax/swing/undo/AbstractUndoableEdit.js
 javax/swing/undo/CompoundEdit.js
 javax/swing/undo/UndoableEdit.js
-javax/swing/ViewportLayout.js
-javax/swing/WindowConstants.js
-sun/awt/AppContext.js
+javax/xml/bind/ContextFinder.js
+javax/xml/bind/GetPropertyAction.js
+javax/xml/bind/JAXBContext.js
+javax/xml/bind/JAXBContextFactory.js
+javax/xml/bind/JAXBElement.js
+javax/xml/bind/ModuleUtil.js
+javax/xml/bind/ServiceLoaderUtil.js
+javax/xml/bind/Unmarshaller.js
+javax/xml/bind/ValidationEventHandler.js
+javax/xml/bind/annotation/adapters/CollapsedStringAdapter.js
+javax/xml/bind/annotation/adapters/XmlAdapter.js
+javax/xml/bind/helpers/AbstractUnmarshallerImpl.js
+javax/xml/bind/helpers/DefaultValidationEventHandler.js
+javax/xml/datatype/XMLGregorianCalendar.js
+javax/xml/namespace/QName.js
+javax/xml/stream/XMLInputFactory.js
+javax/xml/stream/XMLStreamConstants.js
+javax/xml/stream/XMLStreamReader.js
+mc_view/AppletPDBCanvas.js
+mc_view/AppletPDBViewer.js
+mc_view/Atom.js
+mc_view/Bond.js
+mc_view/MCMatrix.js
+mc_view/PDBCanvas.js
+mc_view/PDBChain.js
+mc_view/PDBfile.js
+mc_view/Residue.js
+mc_view/Zsort.js
+net/miginfocom/layout/AC.js
+net/miginfocom/layout/AnimSpec.js
+net/miginfocom/layout/BoundSize.js
+net/miginfocom/layout/CC.js
+net/miginfocom/layout/ComponentWrapper.js
+net/miginfocom/layout/ConstraintParser.js
+net/miginfocom/layout/ContainerWrapper.js
+net/miginfocom/layout/DimConstraint.js
+net/miginfocom/layout/Grid.js
+net/miginfocom/layout/LC.js
+net/miginfocom/layout/LayoutUtil.js
+net/miginfocom/layout/LinkHandler.js
+net/miginfocom/layout/PlatformDefaults.js
+net/miginfocom/layout/ResizeConstraint.js
+net/miginfocom/layout/UnitValue.js
+net/miginfocom/swing/MigLayout.js
+net/miginfocom/swing/SwingComponentWrapper.js
+net/miginfocom/swing/SwingContainerWrapper.js
+org/apache/xerces/jaxp/datatype/XMLGregorianCalendarImpl.js
+org/jibble/epsgraphics/EpsDocument.js
+org/jibble/epsgraphics/EpsException.js
+org/jibble/epsgraphics/EpsGraphics2D.js
+org/jmol/adapter/readers/cif/CifReader.js
+org/jmol/adapter/readers/cif/MMCifReader.js
+org/jmol/adapter/readers/pdb/PdbReader.js
+org/jmol/adapter/smarter/Atom.js
+org/jmol/adapter/smarter/AtomIterator.js
+org/jmol/adapter/smarter/AtomSetCollection.js
+org/jmol/adapter/smarter/AtomSetCollectionReader.js
+org/jmol/adapter/smarter/AtomSetObject.js
+org/jmol/adapter/smarter/Bond.js
+org/jmol/adapter/smarter/Resolver.js
+org/jmol/adapter/smarter/SmarterJmolAdapter.js
+org/jmol/adapter/smarter/Structure.js
+org/jmol/adapter/smarter/StructureIterator.js
+org/jmol/api/AtomIndexIterator.js
+org/jmol/api/EventManager.js
+org/jmol/api/FontManager.js
+org/jmol/api/GenericFileInterface.js
+org/jmol/api/GenericMouseInterface.js
+org/jmol/api/GenericPlatform.js
+org/jmol/api/Interface.js
+org/jmol/api/JmolAdapter.js
+org/jmol/api/JmolAdapterAtomIterator.js
+org/jmol/api/JmolAdapterStructureIterator.js
+org/jmol/api/JmolCallbackListener.js
+org/jmol/api/JmolGraphicsInterface.js
+org/jmol/api/JmolMeasurementClient.js
+org/jmol/api/JmolRendererInterface.js
+org/jmol/api/JmolRepaintManager.js
+org/jmol/api/JmolScriptEvaluator.js
+org/jmol/api/JmolScriptFunction.js
+org/jmol/api/JmolScriptManager.js
+org/jmol/api/JmolSelectionListener.js
+org/jmol/api/JmolStatusListener.js
+org/jmol/api/JmolViewer.js
+org/jmol/api/PlatformViewer.js
+org/jmol/api/SymmetryInterface.js
+org/jmol/api/Translator.js
+org/jmol/atomdata/AtomDataServer.js
+org/jmol/atomdata/RadiusData.js
+org/jmol/awt/AwtFile.js
+org/jmol/awt/AwtFont.js
+org/jmol/awt/Display.js
+org/jmol/awt/Image.js
+org/jmol/awt/Mouse.js
+org/jmol/awt/Platform.js
+org/jmol/bspt/Bspf.js
+org/jmol/bspt/Bspt.js
+org/jmol/bspt/CubeIterator.js
+org/jmol/bspt/Element.js
+org/jmol/bspt/Leaf.js
+org/jmol/bspt/Node.js
+org/jmol/c/CBK.js
+org/jmol/c/FIL.js
+org/jmol/c/PAL.js
+org/jmol/c/STER.js
+org/jmol/c/STR.js
+org/jmol/c/VDW.js
+org/jmol/dssx/Bridge.js
+org/jmol/dssx/DSSP.js
+org/jmol/g3d/CylinderRenderer.js
+org/jmol/g3d/G3DRenderer.js
+org/jmol/g3d/Graphics3D.js
+org/jmol/g3d/HermiteRenderer.js
+org/jmol/g3d/LineRenderer.js
+org/jmol/g3d/Pixelator.js
+org/jmol/g3d/Platform3D.js
+org/jmol/g3d/PrecisionRenderer.js
+org/jmol/g3d/SphereRenderer.js
+org/jmol/g3d/TextRenderer.js
+org/jmol/g3d/TextString.js
+org/jmol/g3d/TriangleRenderer.js
+org/jmol/i18n/GT.js
+org/jmol/i18n/Language.js
+org/jmol/i18n/Resource.js
+org/jmol/io/FileReader.js
+org/jmol/modelset/Atom.js
+org/jmol/modelset/AtomCollection.js
+org/jmol/modelset/AtomIteratorWithinModel.js
+org/jmol/modelset/Bond.js
+org/jmol/modelset/BondCollection.js
+org/jmol/modelset/BondIterator.js
+org/jmol/modelset/BondIteratorSelected.js
+org/jmol/modelset/Chain.js
+org/jmol/modelset/Group.js
+org/jmol/modelset/HBond.js
+org/jmol/modelset/LabelToken.js
+org/jmol/modelset/Measurement.js
+org/jmol/modelset/MeasurementData.js
+org/jmol/modelset/MeasurementPending.js
+org/jmol/modelset/Model.js
+org/jmol/modelset/ModelLoader.js
+org/jmol/modelset/ModelSet.js
+org/jmol/modelset/Orientation.js
+org/jmol/modelset/Structure.js
+org/jmol/modelset/Text.js
+org/jmol/modelset/TickInfo.js
+org/jmol/modelsetbio/AlphaMonomer.js
+org/jmol/modelsetbio/AlphaPolymer.js
+org/jmol/modelsetbio/AminoMonomer.js
+org/jmol/modelsetbio/AminoPolymer.js
+org/jmol/modelsetbio/BioModel.js
+org/jmol/modelsetbio/BioModelSet.js
+org/jmol/modelsetbio/BioPolymer.js
+org/jmol/modelsetbio/BioResolver.js
+org/jmol/modelsetbio/Helix.js
+org/jmol/modelsetbio/Monomer.js
+org/jmol/modelsetbio/ProteinStructure.js
+org/jmol/modelsetbio/Sheet.js
+org/jmol/modelsetbio/Turn.js
+org/jmol/render/BallsRenderer.js
+org/jmol/render/BbcageRenderer.js
+org/jmol/render/CageRenderer.js
+org/jmol/render/FontLineShapeRenderer.js
+org/jmol/render/FrankRenderer.js
+org/jmol/render/HoverRenderer.js
+org/jmol/render/LabelsRenderer.js
+org/jmol/render/MeasuresRenderer.js
+org/jmol/render/RepaintManager.js
+org/jmol/render/ShapeRenderer.js
+org/jmol/render/SticksRenderer.js
+org/jmol/render/TextRenderer.js
+org/jmol/render/UccageRenderer.js
+org/jmol/renderbio/BioShapeRenderer.js
+org/jmol/renderbio/CartoonRenderer.js
+org/jmol/renderbio/RocketsRenderer.js
+org/jmol/renderbio/StrandsRenderer.js
+org/jmol/script/ContextToken.js
+org/jmol/script/SV.js
+org/jmol/script/ScriptCompiler.js
+org/jmol/script/ScriptContext.js
+org/jmol/script/ScriptError.js
+org/jmol/script/ScriptEval.js
+org/jmol/script/ScriptExpr.js
+org/jmol/script/ScriptFlowContext.js
+org/jmol/script/ScriptFunction.js
+org/jmol/script/ScriptManager.js
+org/jmol/script/ScriptMathProcessor.js
+org/jmol/script/ScriptParam.js
+org/jmol/script/ScriptQueueThread.js
+org/jmol/script/ScriptTokenParser.js
+org/jmol/script/T.js
+org/jmol/scriptext/CmdExt.js
+org/jmol/scriptext/MathExt.js
+org/jmol/scriptext/ScriptExt.js
+org/jmol/shape/AtomShape.js
+org/jmol/shape/Balls.js
+org/jmol/shape/Bbcage.js
+org/jmol/shape/Echo.js
+org/jmol/shape/FontLineShape.js
+org/jmol/shape/Frank.js
+org/jmol/shape/Hover.js
+org/jmol/shape/Labels.js
+org/jmol/shape/Measures.js
+org/jmol/shape/Mesh.js
+org/jmol/shape/Shape.js
+org/jmol/shape/Sticks.js
+org/jmol/shape/TextShape.js
+org/jmol/shape/Uccage.js
+org/jmol/shapebio/BioShape.js
+org/jmol/shapebio/BioShapeCollection.js
+org/jmol/shapebio/Cartoon.js
+org/jmol/shapebio/Rockets.js
+org/jmol/symmetry/Symmetry.js
+org/jmol/symmetry/SymmetryInfo.js
+org/jmol/symmetry/UnitCell.js
+org/jmol/thread/HoverWatcherThread.js
+org/jmol/thread/JmolThread.js
+org/jmol/thread/TimeoutThread.js
+org/jmol/util/BSUtil.js
+org/jmol/util/BoxInfo.js
+org/jmol/util/C.js
+org/jmol/util/ColorEncoder.js
+org/jmol/util/CommandHistory.js
+org/jmol/util/DefaultLogger.js
+org/jmol/util/Edge.js
+org/jmol/util/Elements.js
+org/jmol/util/Escape.js
+org/jmol/util/Font.js
+org/jmol/util/GData.js
+org/jmol/util/Geodesic.js
+org/jmol/util/Int2IntHash.js
+org/jmol/util/Int2IntHashEntry.js
+org/jmol/util/Logger.js
+org/jmol/util/LoggerInterface.js
+org/jmol/util/MeshSurface.js
+org/jmol/util/Node.js
+org/jmol/util/Normix.js
+org/jmol/util/Point3fi.js
+org/jmol/util/Rectangle.js
+org/jmol/util/Rgb16.js
+org/jmol/util/Shader.js
+org/jmol/util/SimpleEdge.js
+org/jmol/util/SimpleNode.js
+org/jmol/util/SimpleUnitCell.js
+org/jmol/util/TempArray.js
+org/jmol/viewer/ActionManager.js
+org/jmol/viewer/AnimationManager.js
+org/jmol/viewer/ColorManager.js
+org/jmol/viewer/FileManager.js
+org/jmol/viewer/Gesture.js
+org/jmol/viewer/GlobalSettings.js
+org/jmol/viewer/JC.js
+org/jmol/viewer/JmolStateCreator.js
+org/jmol/viewer/ModelManager.js
+org/jmol/viewer/MotionPoint.js
+org/jmol/viewer/MouseState.js
+org/jmol/viewer/SelectionManager.js
+org/jmol/viewer/ShapeManager.js
+org/jmol/viewer/StateCreator.js
+org/jmol/viewer/StateManager.js
+org/jmol/viewer/StatusManager.js
+org/jmol/viewer/TransformManager.js
+org/jmol/viewer/Viewer.js
+org/jmol/viewer/binding/Binding.js
+org/jmol/viewer/binding/JmolBinding.js
+org/json/CDL.js
+org/json/Cookie.js
+org/json/CookieList.js
+org/json/HTTP.js
+org/json/HTTPTokener.js
+org/json/JSONArray.js
+org/json/JSONException.js
+org/json/JSONML.js
+org/json/JSONObject.js
+org/json/JSONPointer.js
+org/json/JSONPointerException.js
+org/json/JSONPropertyIgnore.js
+org/json/JSONPropertyName.js
+org/json/JSONString.js
+org/json/JSONStringer.js
+org/json/JSONTokener.js
+org/json/JSONWriter.js
+org/json/Property.js
+org/json/XML.js
+org/json/XMLTokener.js
+org/json/simple/ItemList.js
+org/json/simple/JSONArray.js
+org/json/simple/JSONAware.js
+org/json/simple/JSONObject.js
+org/json/simple/JSONStreamAware.js
+org/json/simple/JSONValue.js
+org/json/simple/parser/ContainerFactory.js
+org/json/simple/parser/ContentHandler.js
+org/json/simple/parser/JSONParser.js
+org/json/simple/parser/ParseException.js
+org/json/simple/parser/Yylex.js
+org/json/simple/parser/Yytoken.js
+org/stackoverflowusers/file/WindowsShortcut.js
+org/xml/sax/AttributeList.js
+org/xml/sax/Attributes.js
+org/xml/sax/ContentHandler.js
+org/xml/sax/InputSource.js
+org/xml/sax/Parser.js
+org/xml/sax/XMLReader.js
+org/xml/sax/ext/Attributes2.js
 sun/awt/AWTAutoShutdown.js
+sun/awt/AppContext.js
 sun/awt/CausedFocusEvent.js
 sun/awt/ComponentFactory.js
-sun/awt/KeyboardFocusManagerPeerProvider.js
+sun/awt/EventQueueItem.js
 sun/awt/MostRecentKeyValue.js
 sun/awt/MostRecentThreadAppContext.js
 sun/awt/PaintEventDispatcher.js
 sun/awt/PostEventQueue.js
 sun/awt/RequestFocusController.js
+sun/awt/SunGraphicsCallback.js
 sun/awt/SunToolkit.js
-sun/awt/WindowClosingListener.js
-sun/awt/WindowClosingSupport.js
+sun/awt/image/DataStealer.js
+sun/awt/image/IntegerComponentRaster.js
+sun/awt/image/IntegerInterleavedRaster.js
+sun/awt/image/SunWritableRaster.js
+sun/font/AttributeValues.js
+sun/font/EAttribute.js
 sun/font/FontDesignMetrics.js
+sun/java2d/StateTrackable.js
+sun/java2d/StateTrackableDelegate.js
 sun/swing/DefaultLookup.js
+sun/swing/StringUIClientPropertyKey.js
 sun/swing/SwingLazyValue.js
-sun/text/resources/FormatData.js
-sun/text/resources/FormatData_en.js
-sun/util/resources/LocaleData.js
-swingjs/a2s/A2SContainer.js
-swingjs/a2s/A2SEvent.js
-swingjs/a2s/A2SListener.js
-swingjs/a2s/Applet.js
-swingjs/a2s/Button.js
-swingjs/a2s/Label.js
-swingjs/a2s/Panel.js
-swingjs/a2s/Scrollbar.js
-swingjs/a2s/ScrollPane.js
-swingjs/a2s/TextArea.js
-swingjs/a2s/TextField.js
-swingjs/api/Interface.js
-swingjs/api/js/DOMNode.js
-swingjs/api/js/HTML5CanvasContext2D.js
-swingjs/api/js/JSInterface.js
-swingjs/jquery/JQueryUI.js
+sun/swing/SwingUtilities2.js
+sun/swing/UIAction.js
+sun/swing/UIClientPropertyKey.js
+sun/swing/table/DefaultTableCellHeaderRenderer.js
+sun/text/resources/en/FormatData_en_GB.js
+sun/util/calendar/AbstractCalendar.js
+sun/util/calendar/BaseCalendar.js
+sun/util/calendar/CalendarDate.js
+sun/util/calendar/CalendarSystem.js
+sun/util/calendar/CalendarUtils.js
+sun/util/calendar/Gregorian.js
+sun/util/calendar/ZoneInfo.js
+sun/util/calendar/ZoneInfoFile.js
+sun/util/locale/BaseLocale.js
+sun/util/locale/LanguageTag.js
+sun/util/locale/LocaleUtils.js
+sun/util/locale/provider/AvailableLanguageTags.js
+sun/util/locale/provider/CalendarDataProviderImpl.js
+sun/util/locale/provider/CalendarDataUtility.js
+sun/util/locale/provider/CalendarProviderImpl.js
+sun/util/locale/provider/DateFormatProviderImpl.js
+sun/util/locale/provider/LocaleResources.js
+sun/util/locale/provider/LocaleServiceProviderPool.js
+sun/util/spi/CalendarProvider.js
 swingjs/JSApp.js
 swingjs/JSAppletThread.js
 swingjs/JSAppletViewer.js
+swingjs/JSDummyApplet.js
+swingjs/JSFileSystem.js
 swingjs/JSFocusPeer.js
 swingjs/JSFontMetrics.js
 swingjs/JSFrameViewer.js
 swingjs/JSGraphics2D.js
 swingjs/JSGraphicsConfiguration.js
 swingjs/JSGraphicsEnvironment.js
+swingjs/JSImage.js
+swingjs/JSImagekit.js
+swingjs/JSKeyEvent.js
+swingjs/JSMenuManager.js
 swingjs/JSMouse.js
-swingjs/JSNullComponentPeer.js
 swingjs/JSScreenDevice.js
 swingjs/JSThreadGroup.js
 swingjs/JSToolkit.js
 swingjs/JSUtil.js
+swingjs/api/Interface.js
+swingjs/api/JSUtilI.js
+swingjs/api/js/DOMNode.js
+swingjs/api/js/HTML5Applet.js
+swingjs/api/js/HTML5Canvas.js
+swingjs/api/js/HTML5CanvasContext2D.js
+swingjs/api/js/JSFunction.js
+swingjs/api/js/JSInterface.js
+swingjs/jquery/JQueryUI.js
+swingjs/json/JSON.js
+swingjs/jzlib/Adler32.js
+swingjs/jzlib/CRC32.js
+swingjs/jzlib/Checksum.js
+swingjs/jzlib/InfBlocks.js
+swingjs/jzlib/InfCodes.js
+swingjs/jzlib/InfTree.js
+swingjs/jzlib/Inflate.js
+swingjs/jzlib/Inflater.js
+swingjs/jzlib/InflaterInputStream.js
+swingjs/jzlib/ZStream.js
+swingjs/plaf/BasicComboBoxEditor.js
+swingjs/plaf/BasicComboBoxRenderer.js
+swingjs/plaf/BasicHTML.js
 swingjs/plaf/ButtonListener.js
+swingjs/plaf/CellHolder.js
 swingjs/plaf/DefaultMenuLayout.js
 swingjs/plaf/HTML5LookAndFeel.js
 swingjs/plaf/JSAppletUI.js
@@ -362,19 +1986,26 @@ swingjs/plaf/JSButtonUI.js
 swingjs/plaf/JSCheckBoxMenuItemUI.js
 swingjs/plaf/JSCheckBoxUI.js
 swingjs/plaf/JSComboBoxUI.js
+swingjs/plaf/JSComboPopupList.js
 swingjs/plaf/JSComponentUI.js
+swingjs/plaf/JSDesktopIconUI.js
+swingjs/plaf/JSDesktopPaneUI.js
 swingjs/plaf/JSEventHandler.js
 swingjs/plaf/JSFrameUI.js
 swingjs/plaf/JSGraphicsUtils.js
+swingjs/plaf/JSInternalFrameUI.js
 swingjs/plaf/JSLabelUI.js
 swingjs/plaf/JSLayeredPaneUI.js
 swingjs/plaf/JSLightweightUI.js
+swingjs/plaf/JSListUI.js
 swingjs/plaf/JSMenuBarUI.js
 swingjs/plaf/JSMenuItemUI.js
 swingjs/plaf/JSMenuUI.js
 swingjs/plaf/JSPanelUI.js
 swingjs/plaf/JSPopupMenuSeparatorUI.js
 swingjs/plaf/JSPopupMenuUI.js
+swingjs/plaf/JSPopupUI.js
+swingjs/plaf/JSProgressBarUI.js
 swingjs/plaf/JSRadioButtonMenuItemUI.js
 swingjs/plaf/JSRadioButtonUI.js
 swingjs/plaf/JSRootPaneUI.js
@@ -382,14 +2013,64 @@ swingjs/plaf/JSScrollBarUI.js
 swingjs/plaf/JSScrollPaneUI.js
 swingjs/plaf/JSSeparatorUI.js
 swingjs/plaf/JSSliderUI.js
+swingjs/plaf/JSTabbedPaneUI.js
+swingjs/plaf/JSTableHeaderUI.js
+swingjs/plaf/JSTableUI.js
 swingjs/plaf/JSTextAreaUI.js
 swingjs/plaf/JSTextFieldUI.js
 swingjs/plaf/JSTextUI.js
-swingjs/plaf/JSTextViewUI.js
+swingjs/plaf/JSToolTipUI.js
 swingjs/plaf/JSViewportUI.js
 swingjs/plaf/JSWindowUI.js
 swingjs/plaf/LazyActionMap.js
 swingjs/plaf/Resizer.js
 swingjs/plaf/TextListener.js
-
-
+swingjs/xml/JSJAXBClass.js
+swingjs/xml/JSJAXBContext.js
+swingjs/xml/JSJAXBContextFactory.js
+swingjs/xml/JSJAXBField.js
+swingjs/xml/JSJAXBUnmarshaller.js
+swingjs/xml/JSSAXAttributes.js
+swingjs/xml/JSSAXParser.js
+swingjs/xml/JSXMLGregorianCalendarImpl.js
+swingjs/xml/JSXMLInputFactory.js
+swingjs/xml/JSXMLStreamReader.js
+swingjs/xml/JSXMLStreamReader.jscore/package.js
+uk/ac/ebi/picr/model/CrossReference.js
+uk/ac/ebi/picr/model/CrossReference_Helper.js
+uk/ac/ebi/picr/model/UPEntry.js
+uk/ac/ebi/picr/model/UPEntry_Helper.js
+uk/ac/ebi/www/Data.js
+uk/ac/ebi/www/InputParams.js
+uk/ac/ebi/www/WSFile.js
+uk/ac/ebi/www/WSWUBlast.js
+uk/ac/ebi/www/WSWUBlastService.js
+uk/ac/ebi/www/WSWUBlastServiceLocator.js
+uk/ac/ebi/www/WSWUBlastSoapBindingStub.js
+uk/ac/ebi/www/picr/AccessionMappingService/AccessionMapperBindingStub.js
+uk/ac/ebi/www/picr/AccessionMappingService/AccessionMapperInterface.js
+uk/ac/ebi/www/picr/AccessionMappingService/AccessionMapperService.js
+uk/ac/ebi/www/picr/AccessionMappingService/AccessionMapperServiceLocator.js
+vamsas/IMsaWS.js
+vamsas/objects/simple/Alignment.js
+vamsas/objects/simple/Alignment_Helper.js
+vamsas/objects/simple/JpredResult.js
+vamsas/objects/simple/JpredResult_Helper.js
+vamsas/objects/simple/MsaResult.js
+vamsas/objects/simple/MsaResult_Helper.js
+vamsas/objects/simple/Msfalignment.js
+vamsas/objects/simple/Msfalignment_Helper.js
+vamsas/objects/simple/Object.js
+vamsas/objects/simple/Object_Helper.js
+vamsas/objects/simple/Result.js
+vamsas/objects/simple/Result_Helper.js
+vamsas/objects/simple/Secstructpred.js
+vamsas/objects/simple/Secstructpred_Helper.js
+vamsas/objects/simple/SeqSearchResult.js
+vamsas/objects/simple/SeqSearchResult_Helper.js
+vamsas/objects/simple/Sequence.js
+vamsas/objects/simple/SequenceSet.js
+vamsas/objects/simple/SequenceSet_Helper.js
+vamsas/objects/simple/Sequence_Helper.js
+vamsas/objects/simple/WsJobId.js
+vamsas/objects/simple/WsJobId_Helper.js
index bf7a678..dbe6ef4 100644 (file)
@@ -15,16 +15,13 @@ Info = {
        serverURL: 'https://chemapps.stolaf.edu/jmol/jsmol/php/jsmol.php',
        j2sPath: 'swingjs/j2s',
        console: window.console,
-       allowjavascript: true
+       allowjavascript: true,
+  namespace: ""
 }
 </script>
 </head>
 <body>
 <script>
-// we define console.err because swingjs2.js calls it instead of console.error
-window.console.err = function() {
-       this.error.apply(this,arguments);
-}
 SwingJS.getApplet('testApplet', Info)
 getClassList = function(){J2S._saveFile('_j2sclasslist.txt', Clazz.ClassFilesLoaded.sort().join('\n'))}
 </script>
diff --git a/utils/jalviewjs/classlists/.gitkeep b/utils/jalviewjs/classlists/.gitkeep
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/utils/jalviewjs/classlists/jalview.txt b/utils/jalviewjs/classlists/jalview.txt
deleted file mode 100644 (file)
index 5d60006..0000000
+++ /dev/null
@@ -1,791 +0,0 @@
-jalview/analysis/AAFrequency.js
-jalview/analysis/AlignSeq.js
-jalview/analysis/AlignmentAnnotationUtils.js
-jalview/analysis/AlignmentUtils.js
-jalview/analysis/AnnotationSorter.js
-jalview/analysis/Conservation.js
-jalview/analysis/CrossRef.js
-jalview/analysis/NJTree.js
-jalview/analysis/SeqsetUtils.js
-jalview/analysis/TreeBuilder.js
-jalview/analysis/TreeModel.js
-jalview/analysis/scoremodels/DistanceScoreModel.js
-jalview/analysis/scoremodels/FeatureDistanceModel.js
-jalview/analysis/scoremodels/PIDModel.js
-jalview/analysis/scoremodels/ScoreMatrix.js
-jalview/analysis/scoremodels/ScoreModels.js
-jalview/analysis/scoremodels/SimilarityParams.js
-jalview/analysis/scoremodels/SimilarityScoreModel.js
-jalview/api/AlignCalcManagerI.js
-jalview/api/AlignCalcWorkerI.js
-jalview/api/AlignViewControllerGuiI.js
-jalview/api/AlignViewControllerI.js
-jalview/api/AlignViewportI.js
-jalview/api/AlignmentViewPanel.js
-jalview/api/BuildDetailsI.js
-jalview/api/FeatureColourI.js
-jalview/api/FeatureRenderer.js
-jalview/api/FeaturesDisplayedI.js
-jalview/api/OOMHandlerI.js
-jalview/api/SequenceRenderer.js
-jalview/api/StructureSelectionManagerProvider.js
-jalview/api/ViewStyleI.js
-jalview/api/analysis/PairwiseScoreModelI.js
-jalview/api/analysis/ScoreModelI.js
-jalview/api/analysis/SimilarityParamsI.js
-jalview/bin/ArgsParser.js
-jalview/bin/BuildDetails.js
-jalview/bin/Cache.js
-jalview/bin/Jalview.js
-jalview/bin/JalviewJS2.js
-jalview/controller/AlignViewController.js
-jalview/datamodel/ASequence.js
-jalview/datamodel/ASequenceI.js
-jalview/datamodel/Alignment.js
-jalview/datamodel/AlignmentAnnotation.js
-jalview/datamodel/AlignmentI.js
-jalview/datamodel/AlignmentView.js
-jalview/datamodel/AnnotatedCollectionI.js
-jalview/datamodel/Annotation.js
-jalview/datamodel/BinaryNode.js
-jalview/datamodel/CigarArray.js
-jalview/datamodel/CigarBase.js
-jalview/datamodel/CigarSimple.js
-jalview/datamodel/ColumnSelection.js
-jalview/datamodel/ContiguousI.js
-jalview/datamodel/DBRefSource.js
-jalview/datamodel/HiddenColumns.js
-jalview/datamodel/HiddenColumnsCursor.js
-jalview/datamodel/HiddenCursorPosition.js
-jalview/datamodel/HiddenSequences.js
-jalview/datamodel/PDBEntry.js
-jalview/datamodel/Profile.js
-jalview/datamodel/ProfileI.js
-jalview/datamodel/Profiles.js
-jalview/datamodel/ProfilesI.js
-jalview/datamodel/Range.js
-jalview/datamodel/RangeIterator.js
-jalview/datamodel/ResidueCount.js
-jalview/datamodel/SearchResults.js
-jalview/datamodel/SearchResultsI.js
-jalview/datamodel/SeqCigar.js
-jalview/datamodel/Sequence.js
-jalview/datamodel/SequenceCollectionI.js
-jalview/datamodel/SequenceCursor.js
-jalview/datamodel/SequenceFeature.js
-jalview/datamodel/SequenceGroup.js
-jalview/datamodel/SequenceI.js
-jalview/datamodel/SequenceNode.js
-jalview/datamodel/features/FeatureLocationI.js
-jalview/datamodel/features/FeatureMatcher.js
-jalview/datamodel/features/FeatureMatcherI.js
-jalview/datamodel/features/FeatureMatcherSet.js
-jalview/datamodel/features/FeatureMatcherSetI.js
-jalview/datamodel/features/FeatureStore.js
-jalview/datamodel/features/RangeComparator.js
-jalview/datamodel/features/SequenceFeatures.js
-jalview/datamodel/features/SequenceFeaturesI.js
-jalview/gui/AlignFrame.js
-jalview/gui/AlignViewport.js
-jalview/gui/AlignmentPanel.js
-jalview/gui/AnnotationLabels.js
-jalview/gui/AnnotationPanel.js
-jalview/gui/CalculationChooser.js
-jalview/gui/ColourMenuHelper.js
-jalview/gui/ComboBoxTooltipRenderer.js
-jalview/gui/Desktop.js
-jalview/gui/FeatureRenderer.js
-jalview/gui/IProgressIndicator.js
-jalview/gui/IdCanvas.js
-jalview/gui/IdPanel.js
-jalview/gui/IdwidthAdjuster.js
-jalview/gui/JalviewChangeSupport.js
-jalview/gui/JvSwingUtils.js
-jalview/gui/PaintRefresher.js
-jalview/gui/PopupMenu.js
-jalview/gui/Preferences.js
-jalview/gui/ProgressBar.js
-jalview/gui/ScalePanel.js
-jalview/gui/SeqCanvas.js
-jalview/gui/SeqPanel.js
-jalview/gui/SequenceRenderer.js
-jalview/gui/TreeCanvas.js
-jalview/gui/TreePanel.js
-jalview/gui/ViewSelectionMenu.js
-jalview/io/AlignFile.js
-jalview/io/AlignmentFileReaderI.js
-jalview/io/AlignmentFileWriterI.js
-jalview/io/AppletFormatAdapter.js
-jalview/io/DataSourceType.js
-jalview/io/FileFormat.js
-jalview/io/FileFormatI.js
-jalview/io/FileFormats.js
-jalview/io/FileLoader.js
-jalview/io/FileParse.js
-jalview/io/IdentifyFile.js
-jalview/io/PIRFile.js
-jalview/io/ScoreMatrixFile.js
-jalview/io/SequenceAnnotationReport.js
-jalview/javascript/log4j/ConsoleAppender.js
-jalview/javascript/log4j/Layout.js
-jalview/javascript/log4j/Level.js
-jalview/javascript/log4j/Logger.js
-jalview/javascript/log4j/Priority.js
-jalview/javascript/log4j/SimpleLayout.js
-jalview/javascript/log4j/spi/OptionHandler.js
-jalview/jbgui/GAlignFrame.js
-jalview/jbgui/GAlignmentPanel.js
-jalview/jbgui/GDesktop.js
-jalview/jbgui/GPreferences.js
-jalview/jbgui/GTreePanel.js
-jalview/math/Matrix.js
-jalview/math/MatrixI.js
-jalview/project/Jalview2XML.js
-jalview/renderer/AnnotationRenderer.js
-jalview/renderer/AwtRenderPanelI.js
-jalview/renderer/ResidueColourFinder.js
-jalview/renderer/ResidueShader.js
-jalview/renderer/ResidueShaderI.js
-jalview/renderer/ScaleRenderer.js
-jalview/renderer/seqfeatures/FeatureRenderer.js
-jalview/schemes/Blosum62ColourScheme.js
-jalview/schemes/BuriedColourScheme.js
-jalview/schemes/ClustalxColourScheme.js
-jalview/schemes/ColourSchemeI.js
-jalview/schemes/ColourSchemeProperty.js
-jalview/schemes/ColourSchemes.js
-jalview/schemes/Consensus.js
-jalview/schemes/FeatureColour.js
-jalview/schemes/HelixColourScheme.js
-jalview/schemes/HydrophobicColourScheme.js
-jalview/schemes/JalviewColourScheme.js
-jalview/schemes/NucleotideColourScheme.js
-jalview/schemes/PIDColourScheme.js
-jalview/schemes/PurinePyrimidineColourScheme.js
-jalview/schemes/RNAHelicesColour.js
-jalview/schemes/ResidueColourScheme.js
-jalview/schemes/ResidueProperties.js
-jalview/schemes/ScoreColourScheme.js
-jalview/schemes/StrandColourScheme.js
-jalview/schemes/TCoffeeColourScheme.js
-jalview/schemes/TaylorColourScheme.js
-jalview/schemes/TurnColourScheme.js
-jalview/schemes/ZappoColourScheme.js
-jalview/structure/CommandListener.js
-jalview/structure/SelectionListener.js
-jalview/structure/SelectionSource.js
-jalview/structure/SequenceListener.js
-jalview/structure/StructureImportSettings.js
-jalview/structure/StructureSelectionManager.js
-jalview/structure/VamsasSource.js
-jalview/urls/CustomUrlProvider.js
-jalview/urls/IdOrgSettings.js
-jalview/urls/IdentifiersUrlProvider.js
-jalview/urls/UrlLinkDisplay.js
-jalview/urls/UrlLinkTableModel.js
-jalview/urls/UrlProvider.js
-jalview/urls/UrlProviderImpl.js
-jalview/urls/api/UrlProviderFactoryI.js
-jalview/urls/api/UrlProviderI.js
-jalview/urls/desktop/DesktopUrlProviderFactory.js
-jalview/util/ColorUtils.js
-jalview/util/Comparison.js
-jalview/util/DBRefUtils.js
-jalview/util/Format.js
-jalview/util/MessageManager.js
-jalview/util/Platform.js
-jalview/util/QuickSort.js
-jalview/util/StringUtils.js
-jalview/util/UrlLink.js
-jalview/util/jarInputStreamProvider.js
-jalview/util/matcher/Condition.js
-jalview/util/matcher/Matcher.js
-jalview/util/matcher/MatcherI.js
-jalview/viewmodel/AlignmentViewport.js
-jalview/viewmodel/ViewportListenerI.js
-jalview/viewmodel/ViewportProperties.js
-jalview/viewmodel/ViewportRanges.js
-jalview/viewmodel/seqfeatures/FeatureRendererModel.js
-jalview/viewmodel/seqfeatures/FeatureRendererSettings.js
-jalview/viewmodel/seqfeatures/FeaturesDisplayed.js
-jalview/viewmodel/styles/ViewStyle.js
-jalview/workers/AlignCalcManager.js
-jalview/workers/AlignCalcWorker.js
-jalview/workers/ConsensusThread.js
-jalview/workers/ConservationThread.js
-jalview/ws/sifts/SiftsSettings.js
-jalview/xml/binding/jalview/Annotation.js
-jalview/xml/binding/jalview/AnnotationElement.js
-jalview/xml/binding/jalview/Feature.js
-jalview/xml/binding/jalview/FeatureMatcher.js
-jalview/xml/binding/jalview/FeatureMatcherSet.js
-jalview/xml/binding/jalview/FilterBy.js
-jalview/xml/binding/jalview/JalviewModel.js
-jalview/xml/binding/jalview/NoValueColour.js
-jalview/xml/binding/jalview/Pdbentry.js
-jalview/xml/binding/jalview/Sequence.js
-jalview/xml/binding/jalview/SequenceSet.js
-jalview/xml/binding/jalview/SequenceType.js
-jalview/xml/binding/jalview/VAMSAS.js
-jalview/xml/binding/jalview/WebServiceParameterSet.js
-java/applet/AppletContext.js
-java/applet/AppletStub.js
-java/applet/JSApplet.js
-java/awt/AWTEvent.js
-java/awt/AWTEventMulticaster.js
-java/awt/AWTKeyStroke.js
-java/awt/ActiveEvent.js
-java/awt/Adjustable.js
-java/awt/AlphaComposite.js
-java/awt/BasicStroke.js
-java/awt/BorderLayout.js
-java/awt/Color.js
-java/awt/Component.js
-java/awt/ComponentOrientation.js
-java/awt/Composite.js
-java/awt/Container.js
-java/awt/ContainerOrderFocusTraversalPolicy.js
-java/awt/Cursor.js
-java/awt/DefaultFocusTraversalPolicy.js
-java/awt/DefaultKeyboardFocusManager.js
-java/awt/Dialog.js
-java/awt/Dimension.js
-java/awt/EventDispatchThread.js
-java/awt/EventFilter.js
-java/awt/EventQueue.js
-java/awt/EventQueueItem.js
-java/awt/FlowLayout.js
-java/awt/FocusTraversalPolicy.js
-java/awt/Font.js
-java/awt/FontMetrics.js
-java/awt/GraphicsCallback.js
-java/awt/GraphicsConfiguration.js
-java/awt/GraphicsDevice.js
-java/awt/GraphicsEnvironment.js
-java/awt/GridLayout.js
-java/awt/Image.js
-java/awt/Insets.js
-java/awt/ItemSelectable.js
-java/awt/JSComponent.js
-java/awt/JSDialog.js
-java/awt/JSFrame.js
-java/awt/JSPanel.js
-java/awt/KeyEventDispatcher.js
-java/awt/KeyEventPostProcessor.js
-java/awt/KeyboardFocusManager.js
-java/awt/LayoutManager.js
-java/awt/LayoutManager2.js
-java/awt/LightweightDispatcher.js
-java/awt/Paint.js
-java/awt/Point.js
-java/awt/Queue.js
-java/awt/Rectangle.js
-java/awt/RenderingHints.js
-java/awt/SentEvent.js
-java/awt/Shape.js
-java/awt/Stroke.js
-java/awt/Toolkit.js
-java/awt/Transparency.js
-java/awt/VKCollection.js
-java/awt/Window.js
-java/awt/color/ColorSpace.js
-java/awt/datatransfer/ClipboardOwner.js
-java/awt/datatransfer/FlavorMap.js
-java/awt/datatransfer/FlavorTable.js
-java/awt/datatransfer/SystemFlavorMap.js
-java/awt/dnd/DropTarget.js
-java/awt/dnd/DropTargetContext.js
-java/awt/dnd/DropTargetListener.js
-java/awt/dnd/peer/DropTargetPeer.js
-java/awt/event/AWTEventListener.js
-java/awt/event/ActionEvent.js
-java/awt/event/ActionListener.js
-java/awt/event/AdjustmentEvent.js
-java/awt/event/AdjustmentListener.js
-java/awt/event/ComponentAdapter.js
-java/awt/event/ComponentEvent.js
-java/awt/event/ComponentListener.js
-java/awt/event/ContainerEvent.js
-java/awt/event/ContainerListener.js
-java/awt/event/FocusAdapter.js
-java/awt/event/FocusEvent.js
-java/awt/event/FocusListener.js
-java/awt/event/HierarchyBoundsListener.js
-java/awt/event/HierarchyListener.js
-java/awt/event/InputEvent.js
-java/awt/event/InputMethodListener.js
-java/awt/event/InvocationEvent.js
-java/awt/event/ItemEvent.js
-java/awt/event/ItemListener.js
-java/awt/event/KeyAdapter.js
-java/awt/event/KeyEvent.js
-java/awt/event/KeyListener.js
-java/awt/event/MouseAdapter.js
-java/awt/event/MouseEvent.js
-java/awt/event/MouseListener.js
-java/awt/event/MouseMotionAdapter.js
-java/awt/event/MouseMotionListener.js
-java/awt/event/MouseWheelListener.js
-java/awt/event/TextListener.js
-java/awt/event/WindowAdapter.js
-java/awt/event/WindowEvent.js
-java/awt/event/WindowFocusListener.js
-java/awt/event/WindowListener.js
-java/awt/event/WindowStateListener.js
-java/awt/font/FontRenderContext.js
-java/awt/geom/AffineTransform.js
-java/awt/geom/Dimension2D.js
-java/awt/geom/Path2D.js
-java/awt/geom/PathIterator.js
-java/awt/geom/Point2D.js
-java/awt/geom/RectIterator.js
-java/awt/geom/Rectangle2D.js
-java/awt/geom/RectangularShape.js
-java/awt/image/BufferedImage.js
-java/awt/image/ColorModel.js
-java/awt/image/DataBuffer.js
-java/awt/image/DataBufferInt.js
-java/awt/image/DirectColorModel.js
-java/awt/image/ImageObserver.js
-java/awt/image/PackedColorModel.js
-java/awt/image/Raster.js
-java/awt/image/RenderedImage.js
-java/awt/image/SampleModel.js
-java/awt/image/SinglePixelPackedSampleModel.js
-java/awt/image/WritableRaster.js
-java/awt/peer/ComponentPeer.js
-java/awt/peer/ContainerPeer.js
-java/awt/peer/FramePeer.js
-java/awt/peer/KeyboardFocusManagerPeer.js
-java/awt/peer/LightweightPeer.js
-java/awt/peer/WindowPeer.js
-java/awt/print/Printable.js
-java/beans/ChangeListenerMap.js
-java/beans/PropertyChangeEvent.js
-java/beans/PropertyChangeListener.js
-java/beans/PropertyChangeSupport.js
-java/io/BufferedInputStream.js
-java/io/BufferedReader.js
-java/io/ByteArrayInputStream.js
-java/io/Closeable.js
-java/io/File.js
-java/io/FileDescriptor.js
-java/io/FileInputStream.js
-java/io/FileReader.js
-java/io/FileSystem.js
-java/io/FilterInputStream.js
-java/io/InputStream.js
-java/io/InputStreamReader.js
-java/io/PushbackInputStream.js
-java/io/Reader.js
-java/lang/AbstractStringBuilder.js
-java/lang/AutoCloseable.js
-java/lang/Class.js
-java/lang/Enum.js
-java/lang/Iterable.js
-java/lang/Readable.js
-java/lang/Runtime.js
-java/lang/StringBuffer.js
-java/lang/StringBuilder.js
-java/lang/Thread.js
-java/lang/ThreadGroup.js
-java/lang/reflect/Constructor.js
-java/lang/reflect/Method.js
-java/math/BigDecimal.js
-java/math/BigInteger.js
-java/math/MathContext.js
-java/math/RoundingMode.js
-java/net/HttpURLConnection.js
-java/net/MalformedURLException.js
-java/net/URL.js
-java/net/URLConnection.js
-java/net/URLDecoder.js
-java/net/URLStreamHandler.js
-java/net/URLStreamHandlerFactory.js
-java/nio/Bits.js
-java/nio/Buffer.js
-java/nio/ByteBuffer.js
-java/nio/ByteOrder.js
-java/nio/CharBuffer.js
-java/nio/HeapByteBuffer.js
-java/nio/HeapCharBuffer.js
-java/nio/charset/Charset.js
-java/nio/charset/CharsetDecoder.js
-java/nio/charset/CoderResult.js
-java/nio/charset/CodingErrorAction.js
-java/security/AccessControlContext.js
-java/security/AccessController.js
-java/security/PrivilegedAction.js
-java/security/PrivilegedExceptionAction.js
-java/text/AttributedCharacterIterator.js
-java/text/CharacterIterator.js
-java/text/DateFormat.js
-java/text/DateFormatSymbols.js
-java/text/DecimalFormat.js
-java/text/DecimalFormatSymbols.js
-java/text/DigitList.js
-java/text/FieldPosition.js
-java/text/Format.js
-java/text/MessageFormat.js
-java/text/NumberFormat.js
-java/text/SimpleDateFormat.js
-java/util/AbstractCollection.js
-java/util/AbstractList.js
-java/util/AbstractMap.js
-java/util/AbstractQueue.js
-java/util/AbstractSequentialList.js
-java/util/AbstractSet.js
-java/util/ArrayDeque.js
-java/util/ArrayList.js
-java/util/Arrays.js
-java/util/BitSet.js
-java/util/Calendar.js
-java/util/Collection.js
-java/util/Collections.js
-java/util/Comparator.js
-java/util/Deque.js
-java/util/Dictionary.js
-java/util/DualPivotQuicksort.js
-java/util/Enumeration.js
-java/util/EventListener.js
-java/util/EventObject.js
-java/util/GregorianCalendar.js
-java/util/HashMap.js
-java/util/HashSet.js
-java/util/Hashtable.js
-java/util/IdentityHashMap.js
-java/util/Iterator.js
-java/util/LinkedHashMap.js
-java/util/LinkedList.js
-java/util/List.js
-java/util/ListIterator.js
-java/util/ListResourceBundle.js
-java/util/Locale.js
-java/util/Map.js
-java/util/NavigableMap.js
-java/util/NavigableSet.js
-java/util/Objects.js
-java/util/Properties.js
-java/util/PropertyResourceBundle.js
-java/util/Queue.js
-java/util/RandomAccess.js
-java/util/ResourceBundle.js
-java/util/Set.js
-java/util/SortedMap.js
-java/util/SortedSet.js
-java/util/StringTokenizer.js
-java/util/TimSort.js
-java/util/TimeZone.js
-java/util/TreeMap.js
-java/util/TreeSet.js
-java/util/Vector.js
-java/util/concurrent/AbstractExecutorService.js
-java/util/concurrent/BlockingQueue.js
-java/util/concurrent/ConcurrentHashMap.js
-java/util/concurrent/ConcurrentMap.js
-java/util/concurrent/Executor.js
-java/util/concurrent/ExecutorService.js
-java/util/concurrent/Executors.js
-java/util/concurrent/LinkedBlockingQueue.js
-java/util/concurrent/RejectedExecutionHandler.js
-java/util/concurrent/Semaphore.js
-java/util/concurrent/ThreadFactory.js
-java/util/concurrent/ThreadPoolExecutor.js
-java/util/concurrent/TimeUnit.js
-java/util/concurrent/atomic/AtomicBoolean.js
-java/util/concurrent/atomic/AtomicInteger.js
-java/util/concurrent/locks/AbstractOwnableSynchronizer.js
-java/util/concurrent/locks/AbstractQueuedSynchronizer.js
-java/util/concurrent/locks/Condition.js
-java/util/concurrent/locks/Lock.js
-java/util/concurrent/locks/ReadWriteLock.js
-java/util/concurrent/locks/ReentrantLock.js
-java/util/concurrent/locks/ReentrantReadWriteLock.js
-java/util/jar/JarEntry.js
-java/util/jar/JarInputStream.js
-java/util/logging/Level.js
-java/util/logging/Logger.js
-java/util/regex/MatchResult.js
-java/util/regex/Matcher.js
-java/util/regex/Pattern.js
-java/util/zip/CRC32.js
-java/util/zip/Inflater.js
-java/util/zip/InflaterInputStream.js
-java/util/zip/ZipConstants.js
-java/util/zip/ZipEntry.js
-java/util/zip/ZipInputStream.js
-javajs/api/GenericLineReader.js
-javajs/api/JSFunction.js
-javajs/api/JSONEncodable.js
-javajs/util/AU.js
-javajs/util/AjaxURLConnection.js
-javajs/util/AjaxURLStreamHandler.js
-javajs/util/AjaxURLStreamHandlerFactory.js
-javajs/util/Encoding.js
-javajs/util/JSThread.js
-javajs/util/Lst.js
-javajs/util/PT.js
-javajs/util/Rdr.js
-javajs/util/SB.js
-javax/swing/AbstractAction.js
-javax/swing/AbstractButton.js
-javax/swing/AbstractListModel.js
-javax/swing/Action.js
-javax/swing/ActionMap.js
-javax/swing/AncestorNotifier.js
-javax/swing/ArrayTable.js
-javax/swing/BorderFactory.js
-javax/swing/BoundedRangeModel.js
-javax/swing/BoxLayout.js
-javax/swing/ButtonGroup.js
-javax/swing/ButtonModel.js
-javax/swing/ClientPropertyKey.js
-javax/swing/ComboBoxModel.js
-javax/swing/ComponentInputMap.js
-javax/swing/DefaultBoundedRangeModel.js
-javax/swing/DefaultButtonModel.js
-javax/swing/DefaultComboBoxModel.js
-javax/swing/DefaultDesktopManager.js
-javax/swing/DefaultListCellRenderer.js
-javax/swing/DefaultSingleSelectionModel.js
-javax/swing/DesktopManager.js
-javax/swing/InputMap.js
-javax/swing/JApplet.js
-javax/swing/JButton.js
-javax/swing/JCheckBox.js
-javax/swing/JCheckBoxMenuItem.js
-javax/swing/JComboBox.js
-javax/swing/JComponent.js
-javax/swing/JDesktopPane.js
-javax/swing/JDialog.js
-javax/swing/JFrame.js
-javax/swing/JInternalFrame.js
-javax/swing/JLabel.js
-javax/swing/JLayeredPane.js
-javax/swing/JMenu.js
-javax/swing/JMenuBar.js
-javax/swing/JMenuItem.js
-javax/swing/JPanel.js
-javax/swing/JPopupMenu.js
-javax/swing/JProgressBar.js
-javax/swing/JRadioButton.js
-javax/swing/JRadioButtonMenuItem.js
-javax/swing/JRootPane.js
-javax/swing/JScrollBar.js
-javax/swing/JScrollPane.js
-javax/swing/JSeparator.js
-javax/swing/JTabbedPane.js
-javax/swing/JToggleButton.js
-javax/swing/JToolTip.js
-javax/swing/JViewport.js
-javax/swing/JWindow.js
-javax/swing/KeyStroke.js
-javax/swing/KeyboardManager.js
-javax/swing/ListCellRenderer.js
-javax/swing/ListModel.js
-javax/swing/LookAndFeel.js
-javax/swing/MenuElement.js
-javax/swing/MenuSelectionManager.js
-javax/swing/MutableComboBoxModel.js
-javax/swing/Popup.js
-javax/swing/PopupFactory.js
-javax/swing/RepaintManager.js
-javax/swing/RootPaneContainer.js
-javax/swing/ScrollPaneConstants.js
-javax/swing/ScrollPaneLayout.js
-javax/swing/Scrollable.js
-javax/swing/SingleSelectionModel.js
-javax/swing/SizeRequirements.js
-javax/swing/SwingConstants.js
-javax/swing/SwingPaintEventDispatcher.js
-javax/swing/SwingUtilities.js
-javax/swing/Timer.js
-javax/swing/ToolTipManager.js
-javax/swing/UIDefaults.js
-javax/swing/UIManager.js
-javax/swing/ViewportLayout.js
-javax/swing/WindowConstants.js
-javax/swing/border/AbstractBorder.js
-javax/swing/border/BevelBorder.js
-javax/swing/border/Border.js
-javax/swing/border/EmptyBorder.js
-javax/swing/border/EtchedBorder.js
-javax/swing/border/LineBorder.js
-javax/swing/border/TitledBorder.js
-javax/swing/event/AncestorEvent.js
-javax/swing/event/AncestorListener.js
-javax/swing/event/ChangeEvent.js
-javax/swing/event/ChangeListener.js
-javax/swing/event/EventListenerList.js
-javax/swing/event/InternalFrameAdapter.js
-javax/swing/event/InternalFrameEvent.js
-javax/swing/event/InternalFrameListener.js
-javax/swing/event/ListDataListener.js
-javax/swing/event/MenuKeyListener.js
-javax/swing/event/MenuListener.js
-javax/swing/event/TableModelListener.js
-javax/swing/plaf/ActionMapUIResource.js
-javax/swing/plaf/BorderUIResource.js
-javax/swing/plaf/ColorUIResource.js
-javax/swing/plaf/ComponentInputMapUIResource.js
-javax/swing/plaf/ComponentUI.js
-javax/swing/plaf/DimensionUIResource.js
-javax/swing/plaf/FontUIResource.js
-javax/swing/plaf/InsetsUIResource.js
-javax/swing/plaf/UIResource.js
-javax/swing/plaf/basic/BasicBorders.js
-javax/swing/table/AbstractTableModel.js
-javax/swing/table/TableModel.js
-javax/xml/bind/ContextFinder.js
-javax/xml/bind/GetPropertyAction.js
-javax/xml/bind/JAXBContext.js
-javax/xml/bind/JAXBContextFactory.js
-javax/xml/bind/JAXBElement.js
-javax/xml/bind/ModuleUtil.js
-javax/xml/bind/ServiceLoaderUtil.js
-javax/xml/bind/Unmarshaller.js
-javax/xml/bind/ValidationEventHandler.js
-javax/xml/bind/annotation/adapters/CollapsedStringAdapter.js
-javax/xml/bind/annotation/adapters/XmlAdapter.js
-javax/xml/bind/helpers/AbstractUnmarshallerImpl.js
-javax/xml/bind/helpers/DefaultValidationEventHandler.js
-javax/xml/datatype/XMLGregorianCalendar.js
-javax/xml/namespace/QName.js
-javax/xml/stream/XMLInputFactory.js
-javax/xml/stream/XMLStreamReader.js
-org/apache/xerces/jaxp/datatype/XMLGregorianCalendarImpl.js
-org/json/simple/parser/JSONParser.js
-org/json/simple/parser/ParseException.js
-org/json/simple/parser/Yylex.js
-org/xml/sax/AttributeList.js
-org/xml/sax/Attributes.js
-org/xml/sax/ContentHandler.js
-org/xml/sax/InputSource.js
-org/xml/sax/Parser.js
-org/xml/sax/XMLReader.js
-org/xml/sax/ext/Attributes2.js
-sun/awt/AWTAccessor.js
-sun/awt/AWTAutoShutdown.js
-sun/awt/AppContext.js
-sun/awt/CausedFocusEvent.js
-sun/awt/ComponentFactory.js
-sun/awt/EventQueueItem.js
-sun/awt/KeyboardFocusManagerPeerProvider.js
-sun/awt/MostRecentKeyValue.js
-sun/awt/MostRecentThreadAppContext.js
-sun/awt/PaintEventDispatcher.js
-sun/awt/PostEventQueue.js
-sun/awt/RequestFocusController.js
-sun/awt/SunGraphicsCallback.js
-sun/awt/SunToolkit.js
-sun/awt/WindowClosingListener.js
-sun/awt/WindowClosingSupport.js
-sun/awt/image/DataStealer.js
-sun/awt/image/IntegerComponentRaster.js
-sun/awt/image/IntegerInterleavedRaster.js
-sun/awt/image/SunWritableRaster.js
-sun/font/FontDesignMetrics.js
-sun/java2d/StateTrackable.js
-sun/java2d/StateTrackableDelegate.js
-sun/nio/cs/ArrayDecoder.js
-sun/nio/cs/HistoricallyNamedCharset.js
-sun/nio/cs/StandardCharsets.js
-sun/nio/cs/ThreadLocalCoders.js
-sun/nio/cs/UTF_8.js
-sun/nio/cs/Unicode.js
-sun/swing/DefaultLookup.js
-sun/swing/SwingLazyValue.js
-sun/swing/UIAction.js
-sun/text/resources/FormatData.js
-sun/text/resources/FormatData_en.js
-sun/util/calendar/AbstractCalendar.js
-sun/util/calendar/BaseCalendar.js
-sun/util/calendar/CalendarDate.js
-sun/util/calendar/CalendarSystem.js
-sun/util/calendar/CalendarUtils.js
-sun/util/calendar/Gregorian.js
-sun/util/calendar/ZoneInfo.js
-sun/util/resources/LocaleData.js
-swingjs/JSApp.js
-swingjs/JSApplet.js
-swingjs/JSAppletThread.js
-swingjs/JSAppletViewer.js
-swingjs/JSCharSet.js
-swingjs/JSFocusPeer.js
-swingjs/JSFontMetrics.js
-swingjs/JSFrameViewer.js
-swingjs/JSGraphics2D.js
-swingjs/JSGraphicsConfiguration.js
-swingjs/JSGraphicsEnvironment.js
-swingjs/JSKeyEvent.js
-swingjs/JSMenuManager.js
-swingjs/JSMouse.js
-swingjs/JSScreenDevice.js
-swingjs/JSThreadGroup.js
-swingjs/JSToolkit.js
-swingjs/JSUtil.js
-swingjs/a2s/Dialog.js
-swingjs/api/Interface.js
-swingjs/api/js/DOMNode.js
-swingjs/api/js/HTML5CanvasContext2D.js
-swingjs/api/js/JSInterface.js
-swingjs/jquery/JQueryUI.js
-swingjs/jzlib/Adler32.js
-swingjs/jzlib/CRC32.js
-swingjs/jzlib/Checksum.js
-swingjs/jzlib/InfBlocks.js
-swingjs/jzlib/InfCodes.js
-swingjs/jzlib/InfTree.js
-swingjs/jzlib/Inflate.js
-swingjs/jzlib/Inflater.js
-swingjs/jzlib/InflaterInputStream.js
-swingjs/jzlib/ZStream.js
-swingjs/plaf/ButtonListener.js
-swingjs/plaf/DefaultMenuLayout.js
-swingjs/plaf/HTML5LookAndFeel.js
-swingjs/plaf/JSAppletUI.js
-swingjs/plaf/JSButtonUI.js
-swingjs/plaf/JSCheckBoxMenuItemUI.js
-swingjs/plaf/JSCheckBoxUI.js
-swingjs/plaf/JSComboBoxUI.js
-swingjs/plaf/JSComponentUI.js
-swingjs/plaf/JSDesktopIconUI.js
-swingjs/plaf/JSDesktopPaneUI.js
-swingjs/plaf/JSEventHandler.js
-swingjs/plaf/JSFrameUI.js
-swingjs/plaf/JSGraphicsUtils.js
-swingjs/plaf/JSInternalFrameUI.js
-swingjs/plaf/JSLabelUI.js
-swingjs/plaf/JSLayeredPaneUI.js
-swingjs/plaf/JSLightweightUI.js
-swingjs/plaf/JSMenuBarUI.js
-swingjs/plaf/JSMenuItemUI.js
-swingjs/plaf/JSMenuUI.js
-swingjs/plaf/JSPanelUI.js
-swingjs/plaf/JSPopupMenuSeparatorUI.js
-swingjs/plaf/JSPopupMenuUI.js
-swingjs/plaf/JSPopupUI.js
-swingjs/plaf/JSProgressBarUI.js
-swingjs/plaf/JSRadioButtonMenuItemUI.js
-swingjs/plaf/JSRadioButtonUI.js
-swingjs/plaf/JSRootPaneUI.js
-swingjs/plaf/JSScrollBarUI.js
-swingjs/plaf/JSScrollPaneUI.js
-swingjs/plaf/JSSeparatorUI.js
-swingjs/plaf/JSSliderUI.js
-swingjs/plaf/JSTabbedPaneUI.js
-swingjs/plaf/JSToolTipUI.js
-swingjs/plaf/JSViewportUI.js
-swingjs/plaf/JSWindowUI.js
-swingjs/plaf/LazyActionMap.js
-swingjs/plaf/Resizer.js
-swingjs/xml/JSJAXBClass.js
-swingjs/xml/JSJAXBContext.js
-swingjs/xml/JSJAXBContextFactory.js
-swingjs/xml/JSJAXBField.js
-swingjs/xml/JSJAXBUnmarshaller.js
-swingjs/xml/JSSAXAttributes.js
-swingjs/xml/JSSAXParser.js
-swingjs/xml/JSXMLGregorianCalendarImpl.js
-swingjs/xml/JSXMLInputFactory.js
-swingjs/xml/JSXMLStreamReader.js
diff --git a/utils/jalviewjs/classlists/jvexamplefile.txt b/utils/jalviewjs/classlists/jvexamplefile.txt
deleted file mode 100644 (file)
index fd38213..0000000
+++ /dev/null
@@ -1,1031 +0,0 @@
-com/stevesoft/pat/Boundary.js
-com/stevesoft/pat/Start.js
-intervalstore/api/IntervalI.js
-intervalstore/api/IntervalStoreI.js
-intervalstore/impl/BinarySearcher.js
-intervalstore/impl/IntervalStore.js
-intervalstore/impl/NCList.js
-intervalstore/impl/NCNode.js
-jalview/bin/JalviewTaskbar.js
-jalview/datamodel/AlignedCodonFrame.js
-jalview/ext/ensembl/EnsemblFeatures.js
-jalview/ext/ensembl/EnsemblLookup.js
-jalview/ext/ensembl/EnsemblSymbol.js
-jalview/ext/ensembl/EnsemblXref.js
-jalview/ext/ensembl/Species.js
-jalview/fts/api/StructureFTSRestClientI.js
-jalview/fts/service/threedbeacons/TDBeaconsFTSRestClient.js
-jalview/gui/APQHandlers.js
-jalview/gui/CrossRefAction.js
-jalview/gui/CutAndPasteTransfer.js
-jalview/gui/JvOptionPane.js
-jalview/gui/SplashScreen.js
-jalview/gui/structurechooser/PDBStructureChooserQuerySource.js
-jalview/gui/structurechooser/StructureChooserQuerySource.js
-jalview/gui/structurechooser/TDBResultAnalyser.js
-jalview/gui/structurechooser/ThreeDBStructureChooserQuerySource.js
-jalview/io/gff/SequenceOntologyFactory.js
-jalview/io/gff/SequenceOntologyI.js
-jalview/io/gff/SequenceOntologyLite.js
-jalview/jbgui/FilterOption.js
-jalview/jbgui/GCutAndPasteTransfer.js
-jalview/structure/AtomSpecModel.js
-jalview/structure/StructureCommand.js
-jalview/structure/StructureCommandI.js
-jalview/structure/StructureCommandsBase.js
-jalview/structure/StructureCommandsI.js
-jalview/util/ChannelProperties.js
-jalview/util/HttpUtils.js
-jalview/util/IntRangeComparator.js
-jalview/util/JSONUtils.js
-jalview/util/ShortcutKeyMaskExWrapper.js
-jalview/util/ShortcutKeyMaskExWrapper8.js
-jalview/util/ShortcutKeyMaskExWrapperI.js
-jalview/ws/SequenceFetcherFactory.js
-jalview/ws/dbsources/EBIAlfaFold.js
-jalview/ws/dbsources/EmblFlatfileSource.js
-jalview/ws/utils/UrlDownloadClient.js
-jalview/xml/binding/uniprot/InteractantType.js
-jalview/xml/binding/uniprot/MoleculeType.js
-jalview/xml/binding/uniprot/ReactionType.js
-java/applet/AppletContext.js
-java/applet/AppletStub.js
-java/applet/JSApplet.js
-java/awt/AWTEvent.js
-java/awt/AWTEventMulticaster.js
-java/awt/AWTKeyStroke.js
-java/awt/ActiveEvent.js
-java/awt/Adjustable.js
-java/awt/AlphaComposite.js
-java/awt/BasicStroke.js
-java/awt/BorderLayout.js
-java/awt/CardLayout.js
-java/awt/Color.js
-java/awt/Component.js
-java/awt/ComponentOrientation.js
-java/awt/Composite.js
-java/awt/Container.js
-java/awt/ContainerOrderFocusTraversalPolicy.js
-java/awt/Cursor.js
-java/awt/DefaultFocusTraversalPolicy.js
-java/awt/DefaultKeyboardFocusManager.js
-java/awt/Desktop.js
-java/awt/Dialog.js
-java/awt/Dimension.js
-java/awt/EventDispatchThread.js
-java/awt/EventFilter.js
-java/awt/EventQueue.js
-java/awt/EventQueueItem.js
-java/awt/FlowLayout.js
-java/awt/FocusTraversalPolicy.js
-java/awt/Font.js
-java/awt/FontMetrics.js
-java/awt/GraphicsCallback.js
-java/awt/GraphicsConfiguration.js
-java/awt/GraphicsDevice.js
-java/awt/GraphicsEnvironment.js
-java/awt/GridBagConstraints.js
-java/awt/GridBagLayout.js
-java/awt/GridBagLayoutInfo.js
-java/awt/GridLayout.js
-java/awt/Image.js
-java/awt/Insets.js
-java/awt/ItemSelectable.js
-java/awt/JSComponent.js
-java/awt/JSDialog.js
-java/awt/JSFrame.js
-java/awt/JSPanel.js
-java/awt/KeyEventDispatcher.js
-java/awt/KeyEventPostProcessor.js
-java/awt/KeyboardFocusManager.js
-java/awt/LayoutManager.js
-java/awt/LayoutManager2.js
-java/awt/LightweightDispatcher.js
-java/awt/Paint.js
-java/awt/Point.js
-java/awt/Queue.js
-java/awt/Rectangle.js
-java/awt/RenderingHints.js
-java/awt/SentEvent.js
-java/awt/Shape.js
-java/awt/Stroke.js
-java/awt/Taskbar.js
-java/awt/TextComponent.js
-java/awt/Toolkit.js
-java/awt/Transparency.js
-java/awt/VKCollection.js
-java/awt/Window.js
-java/awt/color/ColorSpace.js
-java/awt/datatransfer/ClipboardOwner.js
-java/awt/datatransfer/FlavorMap.js
-java/awt/datatransfer/FlavorTable.js
-java/awt/datatransfer/SystemFlavorMap.js
-java/awt/dnd/DropTarget.js
-java/awt/dnd/DropTargetContext.js
-java/awt/dnd/DropTargetListener.js
-java/awt/dnd/peer/DropTargetPeer.js
-java/awt/event/AWTEventListener.js
-java/awt/event/ActionEvent.js
-java/awt/event/ActionListener.js
-java/awt/event/AdjustmentEvent.js
-java/awt/event/AdjustmentListener.js
-java/awt/event/ComponentAdapter.js
-java/awt/event/ComponentEvent.js
-java/awt/event/ComponentListener.js
-java/awt/event/ContainerEvent.js
-java/awt/event/ContainerListener.js
-java/awt/event/FocusAdapter.js
-java/awt/event/FocusEvent.js
-java/awt/event/FocusListener.js
-java/awt/event/HierarchyBoundsListener.js
-java/awt/event/HierarchyEvent.js
-java/awt/event/HierarchyListener.js
-java/awt/event/InputEvent.js
-java/awt/event/InputMethodListener.js
-java/awt/event/InvocationEvent.js
-java/awt/event/ItemEvent.js
-java/awt/event/ItemListener.js
-java/awt/event/KeyAdapter.js
-java/awt/event/KeyEvent.js
-java/awt/event/KeyListener.js
-java/awt/event/MouseAdapter.js
-java/awt/event/MouseEvent.js
-java/awt/event/MouseListener.js
-java/awt/event/MouseMotionAdapter.js
-java/awt/event/MouseMotionListener.js
-java/awt/event/MouseWheelEvent.js
-java/awt/event/MouseWheelListener.js
-java/awt/event/TextListener.js
-java/awt/event/WindowAdapter.js
-java/awt/event/WindowEvent.js
-java/awt/event/WindowFocusListener.js
-java/awt/event/WindowListener.js
-java/awt/event/WindowStateListener.js
-java/awt/font/FontRenderContext.js
-java/awt/font/TextAttribute.js
-java/awt/geom/AffineTransform.js
-java/awt/geom/Dimension2D.js
-java/awt/geom/Path2D.js
-java/awt/geom/PathIterator.js
-java/awt/geom/Point2D.js
-java/awt/geom/RectIterator.js
-java/awt/geom/Rectangle2D.js
-java/awt/geom/RectangularShape.js
-java/awt/image/BufferedImage.js
-java/awt/image/ColorModel.js
-java/awt/image/DataBuffer.js
-java/awt/image/DataBufferInt.js
-java/awt/image/DirectColorModel.js
-java/awt/image/ImageConsumer.js
-java/awt/image/ImageObserver.js
-java/awt/image/ImageProducer.js
-java/awt/image/PackedColorModel.js
-java/awt/image/PixelGrabber.js
-java/awt/image/Raster.js
-java/awt/image/RenderedImage.js
-java/awt/image/SampleModel.js
-java/awt/image/SinglePixelPackedSampleModel.js
-java/awt/image/WritableRaster.js
-java/awt/peer/ComponentPeer.js
-java/awt/peer/ContainerPeer.js
-java/awt/peer/DialogPeer.js
-java/awt/peer/FramePeer.js
-java/awt/peer/KeyboardFocusManagerPeer.js
-java/awt/peer/LightweightPeer.js
-java/awt/peer/WindowPeer.js
-java/awt/print/Printable.js
-java/beans/ChangeListenerMap.js
-java/beans/PropertyChangeEvent.js
-java/beans/PropertyChangeListener.js
-java/beans/PropertyChangeSupport.js
-java/io/BufferedInputStream.js
-java/io/BufferedReader.js
-java/io/BufferedWriter.js
-java/io/ByteArrayInputStream.js
-java/io/ByteArrayOutputStream.js
-java/io/Closeable.js
-java/io/DataInput.js
-java/io/DataInputStream.js
-java/io/File.js
-java/io/FileDescriptor.js
-java/io/FileInputStream.js
-java/io/FileOutputStream.js
-java/io/FileReader.js
-java/io/FileSystem.js
-java/io/FilenameFilter.js
-java/io/FilterInputStream.js
-java/io/FilterOutputStream.js
-java/io/InputStream.js
-java/io/InputStreamReader.js
-java/io/ObjectStreamField.js
-java/io/OutputStream.js
-java/io/OutputStreamWriter.js
-java/io/PrintStream.js
-java/io/Reader.js
-java/io/StringReader.js
-java/io/StringWriter.js
-java/io/Writer.js
-java/lang/AbstractStringBuilder.js
-java/lang/AutoCloseable.js
-java/lang/Class.js
-java/lang/Enum.js
-java/lang/Iterable.js
-java/lang/Readable.js
-java/lang/Runtime.js
-java/lang/StringBuffer.js
-java/lang/StringBuilder.js
-java/lang/Thread.js
-java/lang/ThreadGroup.js
-java/lang/ThreadLocal.js
-java/lang/ref/ReferenceQueue.js
-java/lang/reflect/AccessibleObject.js
-java/lang/reflect/AnnotatedElement.js
-java/lang/reflect/Constructor.js
-java/lang/reflect/Method.js
-java/math/BigDecimal.js
-java/math/BigInteger.js
-java/math/MathContext.js
-java/math/RoundingMode.js
-java/net/ContentHandler.js
-java/net/HttpURLConnection.js
-java/net/URI.js
-java/net/URL.js
-java/net/URLConnection.js
-java/net/URLStreamHandler.js
-java/net/URLStreamHandlerFactory.js
-java/net/UnknownHostException.js
-java/nio/file/FileSystem.js
-java/nio/file/FileSystems.js
-java/nio/file/Path.js
-java/nio/file/Watchable.js
-java/nio/file/spi/FileSystemProvider.js
-java/security/AccessController.js
-java/security/PrivilegedAction.js
-java/security/PrivilegedExceptionAction.js
-java/text/AttributedCharacterIterator.js
-java/text/CharacterIterator.js
-java/text/DateFormat.js
-java/text/DateFormatSymbols.js
-java/text/DecimalFormat.js
-java/text/DecimalFormatSymbols.js
-java/text/DigitList.js
-java/text/FieldPosition.js
-java/text/Format.js
-java/text/MessageFormat.js
-java/text/NumberFormat.js
-java/text/SimpleDateFormat.js
-java/text/spi/BreakIteratorProvider.js
-java/text/spi/CollatorProvider.js
-java/text/spi/DateFormatProvider.js
-java/text/spi/DateFormatSymbolsProvider.js
-java/text/spi/DecimalFormatSymbolsProvider.js
-java/text/spi/NumberFormatProvider.js
-java/util/AbstractCollection.js
-java/util/AbstractList.js
-java/util/AbstractMap.js
-java/util/AbstractQueue.js
-java/util/AbstractSequentialList.js
-java/util/AbstractSet.js
-java/util/ArrayDeque.js
-java/util/ArrayList.js
-java/util/Arrays.js
-java/util/BitSet.js
-java/util/Calendar.js
-java/util/Collection.js
-java/util/Collections.js
-java/util/ComparableTimSort.js
-java/util/Comparator.js
-java/util/Deque.js
-java/util/Dictionary.js
-java/util/DualPivotQuicksort.js
-java/util/Enumeration.js
-java/util/EventListener.js
-java/util/EventObject.js
-java/util/Formatter.js
-java/util/GregorianCalendar.js
-java/util/HashMap.js
-java/util/HashSet.js
-java/util/Hashtable.js
-java/util/IdentityHashMap.js
-java/util/Iterator.js
-java/util/LinkedHashMap.js
-java/util/LinkedHashSet.js
-java/util/LinkedList.js
-java/util/List.js
-java/util/ListIterator.js
-java/util/Locale.js
-java/util/Map.js
-java/util/NavigableMap.js
-java/util/NavigableSet.js
-java/util/Objects.js
-java/util/Properties.js
-java/util/PropertyResourceBundle.js
-java/util/Queue.js
-java/util/Random.js
-java/util/RandomAccess.js
-java/util/RandomAccessSubList.js
-java/util/ResourceBundle.js
-java/util/ServiceLoader.js
-java/util/Set.js
-java/util/SortedMap.js
-java/util/SortedSet.js
-java/util/Stack.js
-java/util/StringTokenizer.js
-java/util/SubList.js
-java/util/TimSort.js
-java/util/TimeZone.js
-java/util/TreeMap.js
-java/util/TreeSet.js
-java/util/Vector.js
-java/util/WeakHashMap.js
-java/util/concurrent/AbstractExecutorService.js
-java/util/concurrent/BlockingQueue.js
-java/util/concurrent/ConcurrentHashMap.js
-java/util/concurrent/ConcurrentMap.js
-java/util/concurrent/Executor.js
-java/util/concurrent/ExecutorService.js
-java/util/concurrent/Executors.js
-java/util/concurrent/LinkedBlockingQueue.js
-java/util/concurrent/RejectedExecutionHandler.js
-java/util/concurrent/Semaphore.js
-java/util/concurrent/ThreadFactory.js
-java/util/concurrent/ThreadPoolExecutor.js
-java/util/concurrent/TimeUnit.js
-java/util/concurrent/atomic/AtomicInteger.js
-java/util/concurrent/locks/AbstractOwnableSynchronizer.js
-java/util/concurrent/locks/AbstractQueuedSynchronizer.js
-java/util/concurrent/locks/Condition.js
-java/util/concurrent/locks/Lock.js
-java/util/concurrent/locks/ReadWriteLock.js
-java/util/concurrent/locks/ReentrantLock.js
-java/util/concurrent/locks/ReentrantReadWriteLock.js
-java/util/jar/JarEntry.js
-java/util/jar/JarInputStream.js
-java/util/regex/MatchResult.js
-java/util/regex/Matcher.js
-java/util/regex/Pattern.js
-java/util/spi/CalendarDataProvider.js
-java/util/spi/CurrencyNameProvider.js
-java/util/spi/LocaleNameProvider.js
-java/util/spi/LocaleServiceProvider.js
-java/util/spi/TimeZoneNameProvider.js
-java/util/zip/CRC32.js
-java/util/zip/Inflater.js
-java/util/zip/InflaterInputStream.js
-java/util/zip/ZipConstants.js
-java/util/zip/ZipEntry.js
-java/util/zip/ZipInputStream.js
-javajs/api/BytePoster.js
-javajs/api/GenericCifDataParser.js
-javajs/api/GenericLineReader.js
-javajs/api/GenericOutputChannel.js
-javajs/api/JSONEncodable.js
-javajs/util/A4.js
-javajs/util/AU.js
-javajs/util/AjaxURLConnection.js
-javajs/util/AjaxURLStreamHandler.js
-javajs/util/AjaxURLStreamHandlerFactory.js
-javajs/util/BS.js
-javajs/util/Base64.js
-javajs/util/CU.js
-javajs/util/CifDataParser.js
-javajs/util/DF.js
-javajs/util/Encoding.js
-javajs/util/JSThread.js
-javajs/util/LimitedLineReader.js
-javajs/util/Lst.js
-javajs/util/M3.js
-javajs/util/M34.js
-javajs/util/M4.js
-javajs/util/OC.js
-javajs/util/P3.js
-javajs/util/P3i.js
-javajs/util/P4.js
-javajs/util/PT.js
-javajs/util/Rdr.js
-javajs/util/SB.js
-javajs/util/T3.js
-javajs/util/T3i.js
-javajs/util/T4.js
-javajs/util/V3.js
-javax/net/ssl/HttpsURLConnection.js
-javax/swing/AbstractAction.js
-javax/swing/AbstractButton.js
-javax/swing/AbstractListModel.js
-javax/swing/Action.js
-javax/swing/ActionMap.js
-javax/swing/AncestorNotifier.js
-javax/swing/ArrayTable.js
-javax/swing/Autoscroller.js
-javax/swing/BorderFactory.js
-javax/swing/BoundedRangeModel.js
-javax/swing/BoxLayout.js
-javax/swing/ButtonGroup.js
-javax/swing/ButtonModel.js
-javax/swing/CellRendererPane.js
-javax/swing/ClientPropertyKey.js
-javax/swing/ComboBoxEditor.js
-javax/swing/ComboBoxModel.js
-javax/swing/ComponentInputMap.js
-javax/swing/DefaultBoundedRangeModel.js
-javax/swing/DefaultButtonModel.js
-javax/swing/DefaultComboBoxModel.js
-javax/swing/DefaultDesktopManager.js
-javax/swing/DefaultListCellRenderer.js
-javax/swing/DefaultListSelectionModel.js
-javax/swing/DefaultRowSorter.js
-javax/swing/DefaultSingleSelectionModel.js
-javax/swing/DesktopManager.js
-javax/swing/DropMode.js
-javax/swing/FocusManager.js
-javax/swing/Icon.js
-javax/swing/ImageIcon.js
-javax/swing/InputMap.js
-javax/swing/InternalFrameFocusTraversalPolicy.js
-javax/swing/JApplet.js
-javax/swing/JButton.js
-javax/swing/JCheckBox.js
-javax/swing/JCheckBoxMenuItem.js
-javax/swing/JComboBox.js
-javax/swing/JComponent.js
-javax/swing/JDesktopPane.js
-javax/swing/JDialog.js
-javax/swing/JFrame.js
-javax/swing/JInternalFrame.js
-javax/swing/JLabel.js
-javax/swing/JLayeredPane.js
-javax/swing/JList.js
-javax/swing/JMenu.js
-javax/swing/JMenuBar.js
-javax/swing/JMenuItem.js
-javax/swing/JOptionPane.js
-javax/swing/JPanel.js
-javax/swing/JPopupMenu.js
-javax/swing/JProgressBar.js
-javax/swing/JRadioButtonMenuItem.js
-javax/swing/JRootPane.js
-javax/swing/JScrollBar.js
-javax/swing/JScrollPane.js
-javax/swing/JSeparator.js
-javax/swing/JTabbedPane.js
-javax/swing/JTable.js
-javax/swing/JTextArea.js
-javax/swing/JTextField.js
-javax/swing/JToggleButton.js
-javax/swing/JToolTip.js
-javax/swing/JViewport.js
-javax/swing/JWindow.js
-javax/swing/KeyStroke.js
-javax/swing/KeyboardManager.js
-javax/swing/LayoutComparator.js
-javax/swing/LayoutFocusTraversalPolicy.js
-javax/swing/ListCellRenderer.js
-javax/swing/ListModel.js
-javax/swing/ListSelectionModel.js
-javax/swing/LookAndFeel.js
-javax/swing/MenuElement.js
-javax/swing/MenuSelectionManager.js
-javax/swing/MutableComboBoxModel.js
-javax/swing/Popup.js
-javax/swing/PopupFactory.js
-javax/swing/RepaintManager.js
-javax/swing/RootPaneContainer.js
-javax/swing/RowSorter.js
-javax/swing/ScrollPaneConstants.js
-javax/swing/ScrollPaneLayout.js
-javax/swing/Scrollable.js
-javax/swing/SingleSelectionModel.js
-javax/swing/SizeRequirements.js
-javax/swing/SortOrder.js
-javax/swing/SortingFocusTraversalPolicy.js
-javax/swing/SwingConstants.js
-javax/swing/SwingContainerOrderFocusTraversalPolicy.js
-javax/swing/SwingDefaultFocusTraversalPolicy.js
-javax/swing/SwingPaintEventDispatcher.js
-javax/swing/SwingUtilities.js
-javax/swing/Timer.js
-javax/swing/ToolTipManager.js
-javax/swing/TransferHandler.js
-javax/swing/UIDefaults.js
-javax/swing/UIManager.js
-javax/swing/ViewportLayout.js
-javax/swing/WindowConstants.js
-javax/swing/border/AbstractBorder.js
-javax/swing/border/BevelBorder.js
-javax/swing/border/Border.js
-javax/swing/border/CompoundBorder.js
-javax/swing/border/EmptyBorder.js
-javax/swing/border/EtchedBorder.js
-javax/swing/border/LineBorder.js
-javax/swing/event/AncestorEvent.js
-javax/swing/event/AncestorListener.js
-javax/swing/event/CaretEvent.js
-javax/swing/event/CaretListener.js
-javax/swing/event/CellEditorListener.js
-javax/swing/event/ChangeEvent.js
-javax/swing/event/ChangeListener.js
-javax/swing/event/DocumentEvent.js
-javax/swing/event/DocumentListener.js
-javax/swing/event/EventListenerList.js
-javax/swing/event/HyperlinkListener.js
-javax/swing/event/InternalFrameAdapter.js
-javax/swing/event/InternalFrameEvent.js
-javax/swing/event/InternalFrameListener.js
-javax/swing/event/ListDataEvent.js
-javax/swing/event/ListDataListener.js
-javax/swing/event/ListSelectionEvent.js
-javax/swing/event/ListSelectionListener.js
-javax/swing/event/MenuEvent.js
-javax/swing/event/MenuKeyListener.js
-javax/swing/event/MenuListener.js
-javax/swing/event/MouseInputListener.js
-javax/swing/event/RowSorterEvent.js
-javax/swing/event/RowSorterListener.js
-javax/swing/event/SwingPropertyChangeSupport.js
-javax/swing/event/TableColumnModelEvent.js
-javax/swing/event/TableColumnModelListener.js
-javax/swing/event/TableModelEvent.js
-javax/swing/event/TableModelListener.js
-javax/swing/event/UndoableEditEvent.js
-javax/swing/event/UndoableEditListener.js
-javax/swing/plaf/ActionMapUIResource.js
-javax/swing/plaf/BorderUIResource.js
-javax/swing/plaf/ColorUIResource.js
-javax/swing/plaf/ComponentInputMapUIResource.js
-javax/swing/plaf/ComponentUI.js
-javax/swing/plaf/DimensionUIResource.js
-javax/swing/plaf/FontUIResource.js
-javax/swing/plaf/InputMapUIResource.js
-javax/swing/plaf/InsetsUIResource.js
-javax/swing/plaf/UIResource.js
-javax/swing/plaf/basic/BasicBorders.js
-javax/swing/plaf/basic/BasicGraphicsUtils.js
-javax/swing/table/AbstractTableModel.js
-javax/swing/table/DefaultTableCellRenderer.js
-javax/swing/table/DefaultTableColumnModel.js
-javax/swing/table/DefaultTableModel.js
-javax/swing/table/JTableHeader.js
-javax/swing/table/TableCellRenderer.js
-javax/swing/table/TableColumn.js
-javax/swing/table/TableColumnModel.js
-javax/swing/table/TableModel.js
-javax/swing/table/TableRowSorter.js
-javax/swing/text/AbstractDocument.js
-javax/swing/text/AttributeSet.js
-javax/swing/text/BoxView.js
-javax/swing/text/Caret.js
-javax/swing/text/CompositeView.js
-javax/swing/text/DefaultCaret.js
-javax/swing/text/DefaultEditorKit.js
-javax/swing/text/Document.js
-javax/swing/text/EditorKit.js
-javax/swing/text/Element.js
-javax/swing/text/GapContent.js
-javax/swing/text/GapVector.js
-javax/swing/text/JTextComponent.js
-javax/swing/text/MutableAttributeSet.js
-javax/swing/text/PlainDocument.js
-javax/swing/text/PlainView.js
-javax/swing/text/Position.js
-javax/swing/text/Segment.js
-javax/swing/text/SegmentCache.js
-javax/swing/text/SimpleAttributeSet.js
-javax/swing/text/Style.js
-javax/swing/text/StyleConstants.js
-javax/swing/text/StyleContext.js
-javax/swing/text/TabExpander.js
-javax/swing/text/TextAction.js
-javax/swing/text/Utilities.js
-javax/swing/text/View.js
-javax/swing/text/WrappedPlainView.js
-javax/swing/tree/TreeNode.js
-javax/swing/undo/AbstractUndoableEdit.js
-javax/swing/undo/CompoundEdit.js
-javax/swing/undo/UndoableEdit.js
-javax/xml/bind/ContextFinder.js
-javax/xml/bind/GetPropertyAction.js
-javax/xml/bind/JAXBContext.js
-javax/xml/bind/JAXBContextFactory.js
-javax/xml/bind/JAXBElement.js
-javax/xml/bind/ModuleUtil.js
-javax/xml/bind/ServiceLoaderUtil.js
-javax/xml/bind/Unmarshaller.js
-javax/xml/bind/ValidationEventHandler.js
-javax/xml/bind/annotation/adapters/CollapsedStringAdapter.js
-javax/xml/bind/annotation/adapters/XmlAdapter.js
-javax/xml/bind/helpers/AbstractUnmarshallerImpl.js
-javax/xml/bind/helpers/DefaultValidationEventHandler.js
-javax/xml/datatype/XMLGregorianCalendar.js
-javax/xml/namespace/QName.js
-javax/xml/stream/XMLInputFactory.js
-javax/xml/stream/XMLStreamConstants.js
-javax/xml/stream/XMLStreamReader.js
-net/miginfocom/layout/AC.js
-net/miginfocom/layout/AnimSpec.js
-net/miginfocom/layout/BoundSize.js
-net/miginfocom/layout/CC.js
-net/miginfocom/layout/ComponentWrapper.js
-net/miginfocom/layout/ConstraintParser.js
-net/miginfocom/layout/ContainerWrapper.js
-net/miginfocom/layout/DimConstraint.js
-net/miginfocom/layout/Grid.js
-net/miginfocom/layout/LC.js
-net/miginfocom/layout/LayoutUtil.js
-net/miginfocom/layout/LinkHandler.js
-net/miginfocom/layout/PlatformDefaults.js
-net/miginfocom/layout/ResizeConstraint.js
-net/miginfocom/layout/UnitValue.js
-net/miginfocom/swing/MigLayout.js
-net/miginfocom/swing/SwingComponentWrapper.js
-net/miginfocom/swing/SwingContainerWrapper.js
-org/apache/xerces/jaxp/datatype/XMLGregorianCalendarImpl.js
-org/jmol/adapter/readers/cif/CifReader.js
-org/jmol/adapter/readers/cif/MMCifReader.js
-org/jmol/adapter/readers/pdb/PdbReader.js
-org/jmol/adapter/smarter/Atom.js
-org/jmol/adapter/smarter/AtomIterator.js
-org/jmol/adapter/smarter/AtomSetCollection.js
-org/jmol/adapter/smarter/AtomSetCollectionReader.js
-org/jmol/adapter/smarter/AtomSetObject.js
-org/jmol/adapter/smarter/Bond.js
-org/jmol/adapter/smarter/BondIterator.js
-org/jmol/adapter/smarter/Resolver.js
-org/jmol/adapter/smarter/SmarterJmolAdapter.js
-org/jmol/adapter/smarter/Structure.js
-org/jmol/adapter/smarter/StructureIterator.js
-org/jmol/api/AtomIndexIterator.js
-org/jmol/api/EventManager.js
-org/jmol/api/FontManager.js
-org/jmol/api/GenericFileInterface.js
-org/jmol/api/GenericMouseInterface.js
-org/jmol/api/GenericPlatform.js
-org/jmol/api/Interface.js
-org/jmol/api/JmolAdapter.js
-org/jmol/api/JmolAdapterAtomIterator.js
-org/jmol/api/JmolAdapterBondIterator.js
-org/jmol/api/JmolAdapterStructureIterator.js
-org/jmol/api/JmolCallbackListener.js
-org/jmol/api/JmolFilesReaderInterface.js
-org/jmol/api/JmolGraphicsInterface.js
-org/jmol/api/JmolMeasurementClient.js
-org/jmol/api/JmolRendererInterface.js
-org/jmol/api/JmolRepaintManager.js
-org/jmol/api/JmolScriptEvaluator.js
-org/jmol/api/JmolScriptFunction.js
-org/jmol/api/JmolScriptManager.js
-org/jmol/api/JmolSelectionListener.js
-org/jmol/api/JmolStatusListener.js
-org/jmol/api/JmolViewer.js
-org/jmol/api/PlatformViewer.js
-org/jmol/api/SymmetryInterface.js
-org/jmol/api/Translator.js
-org/jmol/atomdata/AtomDataServer.js
-org/jmol/atomdata/RadiusData.js
-org/jmol/awt/AwtFile.js
-org/jmol/awt/AwtFont.js
-org/jmol/awt/Display.js
-org/jmol/awt/Image.js
-org/jmol/awt/Mouse.js
-org/jmol/awt/Platform.js
-org/jmol/bspt/Bspf.js
-org/jmol/bspt/Bspt.js
-org/jmol/bspt/CubeIterator.js
-org/jmol/bspt/Element.js
-org/jmol/bspt/Leaf.js
-org/jmol/bspt/Node.js
-org/jmol/c/CBK.js
-org/jmol/c/FIL.js
-org/jmol/c/PAL.js
-org/jmol/c/STER.js
-org/jmol/c/STR.js
-org/jmol/c/VDW.js
-org/jmol/dssx/Bridge.js
-org/jmol/dssx/DSSP.js
-org/jmol/g3d/CylinderRenderer.js
-org/jmol/g3d/G3DRenderer.js
-org/jmol/g3d/Graphics3D.js
-org/jmol/g3d/HermiteRenderer.js
-org/jmol/g3d/LineRenderer.js
-org/jmol/g3d/Pixelator.js
-org/jmol/g3d/Platform3D.js
-org/jmol/g3d/PrecisionRenderer.js
-org/jmol/g3d/SphereRenderer.js
-org/jmol/g3d/TextRenderer.js
-org/jmol/g3d/TextString.js
-org/jmol/g3d/TriangleRenderer.js
-org/jmol/i18n/GT.js
-org/jmol/i18n/Language.js
-org/jmol/i18n/Resource.js
-org/jmol/io/FileReader.js
-org/jmol/io/FilesReader.js
-org/jmol/modelset/Atom.js
-org/jmol/modelset/AtomCollection.js
-org/jmol/modelset/AtomIteratorWithinModel.js
-org/jmol/modelset/Bond.js
-org/jmol/modelset/BondCollection.js
-org/jmol/modelset/BondIterator.js
-org/jmol/modelset/BondIteratorSelected.js
-org/jmol/modelset/Chain.js
-org/jmol/modelset/Group.js
-org/jmol/modelset/HBond.js
-org/jmol/modelset/LabelToken.js
-org/jmol/modelset/Measurement.js
-org/jmol/modelset/MeasurementData.js
-org/jmol/modelset/MeasurementPending.js
-org/jmol/modelset/Model.js
-org/jmol/modelset/ModelLoader.js
-org/jmol/modelset/ModelSet.js
-org/jmol/modelset/Orientation.js
-org/jmol/modelset/Structure.js
-org/jmol/modelset/Text.js
-org/jmol/modelset/TickInfo.js
-org/jmol/modelsetbio/AlphaMonomer.js
-org/jmol/modelsetbio/AlphaPolymer.js
-org/jmol/modelsetbio/AminoMonomer.js
-org/jmol/modelsetbio/AminoPolymer.js
-org/jmol/modelsetbio/BioModel.js
-org/jmol/modelsetbio/BioModelSet.js
-org/jmol/modelsetbio/BioPolymer.js
-org/jmol/modelsetbio/BioResolver.js
-org/jmol/modelsetbio/Helix.js
-org/jmol/modelsetbio/Monomer.js
-org/jmol/modelsetbio/ProteinStructure.js
-org/jmol/modelsetbio/Sheet.js
-org/jmol/modelsetbio/Turn.js
-org/jmol/render/BallsRenderer.js
-org/jmol/render/BbcageRenderer.js
-org/jmol/render/CageRenderer.js
-org/jmol/render/FontLineShapeRenderer.js
-org/jmol/render/FrankRenderer.js
-org/jmol/render/HoverRenderer.js
-org/jmol/render/LabelsRenderer.js
-org/jmol/render/MeasuresRenderer.js
-org/jmol/render/RepaintManager.js
-org/jmol/render/ShapeRenderer.js
-org/jmol/render/SticksRenderer.js
-org/jmol/render/TextRenderer.js
-org/jmol/render/UccageRenderer.js
-org/jmol/renderbio/BioShapeRenderer.js
-org/jmol/renderbio/CartoonRenderer.js
-org/jmol/renderbio/RocketsRenderer.js
-org/jmol/renderbio/StrandsRenderer.js
-org/jmol/script/ContextToken.js
-org/jmol/script/SV.js
-org/jmol/script/ScriptCompiler.js
-org/jmol/script/ScriptContext.js
-org/jmol/script/ScriptError.js
-org/jmol/script/ScriptEval.js
-org/jmol/script/ScriptExpr.js
-org/jmol/script/ScriptFlowContext.js
-org/jmol/script/ScriptFunction.js
-org/jmol/script/ScriptManager.js
-org/jmol/script/ScriptMathProcessor.js
-org/jmol/script/ScriptParam.js
-org/jmol/script/ScriptQueueThread.js
-org/jmol/script/ScriptTokenParser.js
-org/jmol/script/T.js
-org/jmol/scriptext/CmdExt.js
-org/jmol/scriptext/MathExt.js
-org/jmol/scriptext/ScriptExt.js
-org/jmol/shape/AtomShape.js
-org/jmol/shape/Balls.js
-org/jmol/shape/Bbcage.js
-org/jmol/shape/Echo.js
-org/jmol/shape/FontLineShape.js
-org/jmol/shape/Frank.js
-org/jmol/shape/Hover.js
-org/jmol/shape/Labels.js
-org/jmol/shape/Measures.js
-org/jmol/shape/Mesh.js
-org/jmol/shape/Shape.js
-org/jmol/shape/Sticks.js
-org/jmol/shape/TextShape.js
-org/jmol/shape/Uccage.js
-org/jmol/shapebio/BioShape.js
-org/jmol/shapebio/BioShapeCollection.js
-org/jmol/shapebio/Cartoon.js
-org/jmol/shapebio/Rockets.js
-org/jmol/symmetry/Symmetry.js
-org/jmol/symmetry/SymmetryInfo.js
-org/jmol/symmetry/UnitCell.js
-org/jmol/thread/HoverWatcherThread.js
-org/jmol/thread/JmolThread.js
-org/jmol/thread/TimeoutThread.js
-org/jmol/util/BSUtil.js
-org/jmol/util/BoxInfo.js
-org/jmol/util/C.js
-org/jmol/util/ColorEncoder.js
-org/jmol/util/CommandHistory.js
-org/jmol/util/DefaultLogger.js
-org/jmol/util/Edge.js
-org/jmol/util/Elements.js
-org/jmol/util/Escape.js
-org/jmol/util/Font.js
-org/jmol/util/GData.js
-org/jmol/util/Geodesic.js
-org/jmol/util/Int2IntHash.js
-org/jmol/util/Int2IntHashEntry.js
-org/jmol/util/Logger.js
-org/jmol/util/LoggerInterface.js
-org/jmol/util/MeshSurface.js
-org/jmol/util/Node.js
-org/jmol/util/Normix.js
-org/jmol/util/Point3fi.js
-org/jmol/util/Rectangle.js
-org/jmol/util/Rgb16.js
-org/jmol/util/Shader.js
-org/jmol/util/SimpleEdge.js
-org/jmol/util/SimpleNode.js
-org/jmol/util/SimpleUnitCell.js
-org/jmol/util/TempArray.js
-org/jmol/viewer/ActionManager.js
-org/jmol/viewer/AnimationManager.js
-org/jmol/viewer/ColorManager.js
-org/jmol/viewer/FileManager.js
-org/jmol/viewer/Gesture.js
-org/jmol/viewer/GlobalSettings.js
-org/jmol/viewer/JC.js
-org/jmol/viewer/ModelManager.js
-org/jmol/viewer/MotionPoint.js
-org/jmol/viewer/MouseState.js
-org/jmol/viewer/SelectionManager.js
-org/jmol/viewer/ShapeManager.js
-org/jmol/viewer/StateManager.js
-org/jmol/viewer/StatusManager.js
-org/jmol/viewer/TransformManager.js
-org/jmol/viewer/Viewer.js
-org/jmol/viewer/binding/Binding.js
-org/jmol/viewer/binding/JmolBinding.js
-org/json/simple/parser/ParseException.js
-org/xml/sax/AttributeList.js
-org/xml/sax/Attributes.js
-org/xml/sax/ContentHandler.js
-org/xml/sax/InputSource.js
-org/xml/sax/Parser.js
-org/xml/sax/XMLReader.js
-org/xml/sax/ext/Attributes2.js
-sun/awt/AWTAutoShutdown.js
-sun/awt/AppContext.js
-sun/awt/CausedFocusEvent.js
-sun/awt/ComponentFactory.js
-sun/awt/EventQueueItem.js
-sun/awt/MostRecentKeyValue.js
-sun/awt/MostRecentThreadAppContext.js
-sun/awt/PaintEventDispatcher.js
-sun/awt/PostEventQueue.js
-sun/awt/RequestFocusController.js
-sun/awt/SunGraphicsCallback.js
-sun/awt/SunToolkit.js
-sun/awt/image/DataStealer.js
-sun/awt/image/IntegerComponentRaster.js
-sun/awt/image/IntegerInterleavedRaster.js
-sun/awt/image/OffScreenImageSource.js
-sun/awt/image/SunWritableRaster.js
-sun/font/AttributeValues.js
-sun/font/EAttribute.js
-sun/font/FontDesignMetrics.js
-sun/java2d/StateTrackable.js
-sun/java2d/StateTrackableDelegate.js
-sun/net/www/MessageHeader.js
-sun/swing/DefaultLookup.js
-sun/swing/StringUIClientPropertyKey.js
-sun/swing/SwingLazyValue.js
-sun/swing/SwingUtilities2.js
-sun/swing/UIAction.js
-sun/swing/UIClientPropertyKey.js
-sun/swing/table/DefaultTableCellHeaderRenderer.js
-sun/text/resources/FormatData.js
-sun/text/resources/en/FormatData_en.js
-sun/text/resources/en/FormatData_en_GB.js
-sun/text/resources/en/FormatData_en_US.js
-sun/util/calendar/AbstractCalendar.js
-sun/util/calendar/BaseCalendar.js
-sun/util/calendar/CalendarDate.js
-sun/util/calendar/CalendarSystem.js
-sun/util/calendar/CalendarUtils.js
-sun/util/calendar/Gregorian.js
-sun/util/calendar/ZoneInfo.js
-sun/util/calendar/ZoneInfoFile.js
-sun/util/locale/BaseLocale.js
-sun/util/locale/LanguageTag.js
-sun/util/locale/LocaleUtils.js
-sun/util/locale/provider/AuxLocaleProviderAdapter.js
-sun/util/locale/provider/AvailableLanguageTags.js
-sun/util/locale/provider/CalendarDataProviderImpl.js
-sun/util/locale/provider/CalendarDataUtility.js
-sun/util/locale/provider/CalendarProviderImpl.js
-sun/util/locale/provider/DateFormatProviderImpl.js
-sun/util/locale/provider/JRELocaleProviderAdapter.js
-sun/util/locale/provider/LocaleDataMetaInfo.js
-sun/util/locale/provider/LocaleProviderAdapter.js
-sun/util/locale/provider/LocaleResources.js
-sun/util/locale/provider/LocaleServiceProviderPool.js
-sun/util/locale/provider/ResourceBundleBasedAdapter.js
-sun/util/locale/provider/SPILocaleProviderAdapter.js
-sun/util/resources/LocaleData.js
-sun/util/resources/ParallelListResourceBundle.js
-sun/util/spi/CalendarProvider.js
-swingjs/JSApp.js
-swingjs/JSAppletThread.js
-swingjs/JSAppletViewer.js
-swingjs/JSDummyApplet.js
-swingjs/JSFileSystem.js
-swingjs/JSFocusPeer.js
-swingjs/JSFontMetrics.js
-swingjs/JSFrameViewer.js
-swingjs/JSGraphics2D.js
-swingjs/JSGraphicsConfiguration.js
-swingjs/JSGraphicsEnvironment.js
-swingjs/JSImage.js
-swingjs/JSImagekit.js
-swingjs/JSKeyEvent.js
-swingjs/JSMenuManager.js
-swingjs/JSMouse.js
-swingjs/JSScreenDevice.js
-swingjs/JSThreadGroup.js
-swingjs/JSToolkit.js
-swingjs/JSUtil.js
-swingjs/a2s/A2SContainer.js
-swingjs/a2s/Dialog.js
-swingjs/api/Interface.js
-swingjs/api/JSUtilI.js
-swingjs/api/js/DOMNode.js
-swingjs/api/js/HTML5Canvas.js
-swingjs/api/js/HTML5CanvasContext2D.js
-swingjs/api/js/JSFunction.js
-swingjs/api/js/JSInterface.js
-swingjs/jquery/JQueryUI.js
-swingjs/json/JSON.js
-swingjs/jzlib/Adler32.js
-swingjs/jzlib/CRC32.js
-swingjs/jzlib/Checksum.js
-swingjs/jzlib/InfBlocks.js
-swingjs/jzlib/InfCodes.js
-swingjs/jzlib/InfTree.js
-swingjs/jzlib/Inflate.js
-swingjs/jzlib/Inflater.js
-swingjs/jzlib/InflaterInputStream.js
-swingjs/jzlib/ZStream.js
-swingjs/plaf/BasicComboBoxEditor.js
-swingjs/plaf/BasicComboBoxRenderer.js
-swingjs/plaf/BasicHTML.js
-swingjs/plaf/ButtonListener.js
-swingjs/plaf/CellHolder.js
-swingjs/plaf/DefaultMenuLayout.js
-swingjs/plaf/HTML5LookAndFeel.js
-swingjs/plaf/JSAppletUI.js
-swingjs/plaf/JSButtonUI.js
-swingjs/plaf/JSCheckBoxMenuItemUI.js
-swingjs/plaf/JSCheckBoxUI.js
-swingjs/plaf/JSComboBoxUI.js
-swingjs/plaf/JSComboPopupList.js
-swingjs/plaf/JSComponentUI.js
-swingjs/plaf/JSDesktopIconUI.js
-swingjs/plaf/JSDesktopPaneUI.js
-swingjs/plaf/JSDialogUI.js
-swingjs/plaf/JSEventHandler.js
-swingjs/plaf/JSFrameUI.js
-swingjs/plaf/JSGraphicsUtils.js
-swingjs/plaf/JSInternalFrameUI.js
-swingjs/plaf/JSLabelUI.js
-swingjs/plaf/JSLayeredPaneUI.js
-swingjs/plaf/JSLightweightUI.js
-swingjs/plaf/JSListUI.js
-swingjs/plaf/JSMenuBarUI.js
-swingjs/plaf/JSMenuItemUI.js
-swingjs/plaf/JSMenuUI.js
-swingjs/plaf/JSOptionPaneUI.js
-swingjs/plaf/JSPanelUI.js
-swingjs/plaf/JSPopupMenuSeparatorUI.js
-swingjs/plaf/JSPopupMenuUI.js
-swingjs/plaf/JSPopupUI.js
-swingjs/plaf/JSProgressBarUI.js
-swingjs/plaf/JSRadioButtonMenuItemUI.js
-swingjs/plaf/JSRadioButtonUI.js
-swingjs/plaf/JSRootPaneUI.js
-swingjs/plaf/JSScrollBarUI.js
-swingjs/plaf/JSScrollPaneUI.js
-swingjs/plaf/JSSeparatorUI.js
-swingjs/plaf/JSSliderUI.js
-swingjs/plaf/JSTabbedPaneUI.js
-swingjs/plaf/JSTableHeaderUI.js
-swingjs/plaf/JSTableUI.js
-swingjs/plaf/JSTextAreaUI.js
-swingjs/plaf/JSTextFieldUI.js
-swingjs/plaf/JSTextUI.js
-swingjs/plaf/JSToolTipUI.js
-swingjs/plaf/JSViewportUI.js
-swingjs/plaf/JSWindowUI.js
-swingjs/plaf/LazyActionMap.js
-swingjs/plaf/Resizer.js
-swingjs/plaf/TextListener.js
-swingjs/xml/JSJAXBClass.js
-swingjs/xml/JSJAXBContext.js
-swingjs/xml/JSJAXBContextFactory.js
-swingjs/xml/JSJAXBField.js
-swingjs/xml/JSJAXBUnmarshaller.js
-swingjs/xml/JSSAXAttributes.js
-swingjs/xml/JSSAXParser.js
-swingjs/xml/JSXMLGregorianCalendarImpl.js
-swingjs/xml/JSXMLInputFactory.js
-swingjs/xml/JSXMLStreamReader.js
index 7d802f2..fc73c18 100644 (file)
@@ -15,7 +15,8 @@ Info = {
        serverURL: 'https://chemapps.stolaf.edu/jmol/jsmol/php/jsmol.php',
        j2sPath: 'swingjs/j2s',
        console:'sysoutdiv',
-       allowjavascript: true
+       allowjavascript: true,
+  namespace: ""
 }
 </script>
 </head>
diff --git a/utils/jalviewjs/libjs/Jmol-SwingJS-16.1.40.zip b/utils/jalviewjs/libjs/Jmol-SwingJS-16.1.40.zip
new file mode 100644 (file)
index 0000000..ca35779
Binary files /dev/null and b/utils/jalviewjs/libjs/Jmol-SwingJS-16.1.40.zip differ
diff --git a/utils/jalviewjs/libjs/VARNA-site.zip b/utils/jalviewjs/libjs/VARNA-site.zip
deleted file mode 100644 (file)
index 9a65123..0000000
Binary files a/utils/jalviewjs/libjs/VARNA-site.zip and /dev/null differ
diff --git a/utils/jalviewjs/libjs/intervalstore-1.2-site.zip b/utils/jalviewjs/libjs/intervalstore-1.2-site.zip
new file mode 100644 (file)
index 0000000..9631d13
Binary files /dev/null and b/utils/jalviewjs/libjs/intervalstore-1.2-site.zip differ
diff --git a/utils/jalviewjs/libjs/intervalstore-site.zip b/utils/jalviewjs/libjs/intervalstore-site.zip
deleted file mode 100644 (file)
index b3f899d..0000000
Binary files a/utils/jalviewjs/libjs/intervalstore-site.zip and /dev/null differ
diff --git a/utils/jalviewjs/libjs/jmol-app.zip b/utils/jalviewjs/libjs/jmol-app.zip
deleted file mode 100644 (file)
index 65732a4..0000000
Binary files a/utils/jalviewjs/libjs/jmol-app.zip and /dev/null differ
diff --git a/utils/jalviewjs/libjs/varna-3.93-site.zip b/utils/jalviewjs/libjs/varna-3.93-site.zip
new file mode 100644 (file)
index 0000000..731b50b
Binary files /dev/null and b/utils/jalviewjs/libjs/varna-3.93-site.zip differ
diff --git a/utils/jalviewjs/site-resources/examples/AF-P00221-F1-model_v4.pdb b/utils/jalviewjs/site-resources/examples/AF-P00221-F1-model_v4.pdb
new file mode 100644 (file)
index 0000000..82570c2
--- /dev/null
@@ -0,0 +1,1149 @@
+HEADER                                            01-JUN-22                     
+TITLE     ALPHAFOLD MONOMER V2.0 PREDICTION FOR FERREDOXIN-1, CHLOROPLASTIC     
+TITLE    2 (P00221)                                                             
+COMPND    MOL_ID: 1;                                                            
+COMPND   2 MOLECULE: FERREDOXIN-1, CHLOROPLASTIC;                               
+COMPND   3 CHAIN: A                                                             
+SOURCE    MOL_ID: 1;                                                            
+SOURCE   2 ORGANISM_SCIENTIFIC: SPINACIA OLERACEA;                              
+SOURCE   3 ORGANISM_TAXID: 3562                                                 
+REMARK   1                                                                      
+REMARK   1 REFERENCE 1                                                          
+REMARK   1  AUTH   JOHN JUMPER, RICHARD EVANS, ALEXANDER PRITZEL, TIM GREEN,    
+REMARK   1  AUTH 2 MICHAEL FIGURNOV, OLAF RONNEBERGER, KATHRYN TUNYASUVUNAKOOL, 
+REMARK   1  AUTH 3 RUSS BATES, AUGUSTIN ZIDEK, ANNA POTAPENKO, ALEX BRIDGLAND,  
+REMARK   1  AUTH 4 CLEMENS MEYER, SIMON A A KOHL, ANDREW J BALLARD,             
+REMARK   1  AUTH 5 ANDREW COWIE, BERNARDINO ROMERA-PAREDES, STANISLAV NIKOLOV,  
+REMARK   1  AUTH 6 RISHUB JAIN, JONAS ADLER, TREVOR BACK, STIG PETERSEN,        
+REMARK   1  AUTH 7 DAVID REIMAN, ELLEN CLANCY, MICHAL ZIELINSKI,                
+REMARK   1  AUTH 8 MARTIN STEINEGGER, MICHALINA PACHOLSKA, TAMAS BERGHAMMER,    
+REMARK   1  AUTH 9 DAVID SILVER, ORIOL VINYALS, ANDREW W SENIOR,                
+REMARK   1  AUTH10 KORAY KAVUKCUOGLU, PUSHMEET KOHLI, DEMIS HASSABIS            
+REMARK   1  TITL   HIGHLY ACCURATE PROTEIN STRUCTURE PREDICTION WITH ALPHAFOLD  
+REMARK   1  REF    NATURE                        V. 596   583 2021              
+REMARK   1  REFN                   ISSN 0028-0836                               
+REMARK   1  PMID   34265844                                                     
+REMARK   1  DOI    10.1038/s41586-021-03819-2                                   
+REMARK   1                                                                      
+REMARK   1 DISCLAIMERS                                                          
+REMARK   1 ALPHAFOLD DATA, COPYRIGHT (2021) DEEPMIND TECHNOLOGIES LIMITED. THE  
+REMARK   1 INFORMATION PROVIDED IS THEORETICAL MODELLING ONLY AND CAUTION SHOULD
+REMARK   1 BE EXERCISED IN ITS USE. IT IS PROVIDED "AS-IS" WITHOUT ANY WARRANTY 
+REMARK   1 OF ANY KIND, WHETHER EXPRESSED OR IMPLIED. NO WARRANTY IS GIVEN THAT 
+REMARK   1 USE OF THE INFORMATION SHALL NOT INFRINGE THE RIGHTS OF ANY THIRD    
+REMARK   1 PARTY. THE INFORMATION IS NOT INTENDED TO BE A SUBSTITUTE FOR        
+REMARK   1 PROFESSIONAL MEDICAL ADVICE, DIAGNOSIS, OR TREATMENT, AND DOES NOT   
+REMARK   1 CONSTITUTE MEDICAL OR OTHER PROFESSIONAL ADVICE. IT IS AVAILABLE FOR 
+REMARK   1 ACADEMIC AND COMMERCIAL PURPOSES, UNDER CC-BY 4.0 LICENCE.           
+DBREF  XXXX A    1   147  UNP    P00221   FER1_SPIOL       1    147             
+SEQRES   1 A  147  MET ALA ALA THR THR THR THR MET MET GLY MET ALA THR          
+SEQRES   2 A  147  THR PHE VAL PRO LYS PRO GLN ALA PRO PRO MET MET ALA          
+SEQRES   3 A  147  ALA LEU PRO SER ASN THR GLY ARG SER LEU PHE GLY LEU          
+SEQRES   4 A  147  LYS THR GLY SER ARG GLY GLY ARG MET THR MET ALA ALA          
+SEQRES   5 A  147  TYR LYS VAL THR LEU VAL THR PRO THR GLY ASN VAL GLU          
+SEQRES   6 A  147  PHE GLN CYS PRO ASP ASP VAL TYR ILE LEU ASP ALA ALA          
+SEQRES   7 A  147  GLU GLU GLU GLY ILE ASP LEU PRO TYR SER CYS ARG ALA          
+SEQRES   8 A  147  GLY SER CYS SER SER CYS ALA GLY LYS LEU LYS THR GLY          
+SEQRES   9 A  147  SER LEU ASN GLN ASP ASP GLN SER PHE LEU ASP ASP ASP          
+SEQRES  10 A  147  GLN ILE ASP GLU GLY TRP VAL LEU THR CYS ALA ALA TYR          
+SEQRES  11 A  147  PRO VAL SER ASP VAL THR ILE GLU THR HIS LYS GLU GLU          
+SEQRES  12 A  147  GLU LEU THR ALA                                              
+CRYST1    1.000    1.000    1.000  90.00  90.00  90.00 P 1           1          
+ORIGX1      1.000000  0.000000  0.000000        0.00000                         
+ORIGX2      0.000000  1.000000  0.000000        0.00000                         
+ORIGX3      0.000000  0.000000  1.000000        0.00000                         
+SCALE1      1.000000  0.000000  0.000000        0.00000                         
+SCALE2      0.000000  1.000000  0.000000        0.00000                         
+SCALE3      0.000000  0.000000  1.000000        0.00000                         
+MODEL        1                                                                  
+ATOM      1  N   MET A   1     -39.014   9.370 -46.392  1.00 56.42           N  
+ATOM      2  CA  MET A   1     -38.101   9.939 -47.404  1.00 56.42           C  
+ATOM      3  C   MET A   1     -37.586  11.272 -46.873  1.00 56.42           C  
+ATOM      4  CB  MET A   1     -38.814  10.144 -48.758  1.00 56.42           C  
+ATOM      5  O   MET A   1     -38.287  12.259 -47.001  1.00 56.42           O  
+ATOM      6  CG  MET A   1     -39.336   8.853 -49.398  1.00 56.42           C  
+ATOM      7  SD  MET A   1     -40.197   9.160 -50.960  1.00 56.42           S  
+ATOM      8  CE  MET A   1     -40.798   7.495 -51.352  1.00 56.42           C  
+ATOM      9  N   ALA A   2     -36.441  11.282 -46.191  1.00 52.97           N  
+ATOM     10  CA  ALA A   2     -35.633  12.474 -45.908  1.00 52.97           C  
+ATOM     11  C   ALA A   2     -34.298  11.969 -45.346  1.00 52.97           C  
+ATOM     12  CB  ALA A   2     -36.323  13.418 -44.914  1.00 52.97           C  
+ATOM     13  O   ALA A   2     -34.277  11.276 -44.333  1.00 52.97           O  
+ATOM     14  N   ALA A   3     -33.226  12.210 -46.094  1.00 60.41           N  
+ATOM     15  CA  ALA A   3     -31.889  11.705 -45.836  1.00 60.41           C  
+ATOM     16  C   ALA A   3     -31.203  12.519 -44.731  1.00 60.41           C  
+ATOM     17  CB  ALA A   3     -31.119  11.774 -47.162  1.00 60.41           C  
+ATOM     18  O   ALA A   3     -31.166  13.746 -44.800  1.00 60.41           O  
+ATOM     19  N   THR A   4     -30.639  11.836 -43.738  1.00 75.74           N  
+ATOM     20  CA  THR A   4     -29.713  12.408 -42.759  1.00 75.74           C  
+ATOM     21  C   THR A   4     -28.288  12.255 -43.286  1.00 75.74           C  
+ATOM     22  CB  THR A   4     -29.885  11.755 -41.378  1.00 75.74           C  
+ATOM     23  O   THR A   4     -27.767  11.154 -43.439  1.00 75.74           O  
+ATOM     24  CG2 THR A   4     -31.086  12.351 -40.643  1.00 75.74           C  
+ATOM     25  OG1 THR A   4     -30.133  10.370 -41.494  1.00 75.74           O  
+ATOM     26  N   THR A   5     -27.675  13.384 -43.629  1.00 73.15           N  
+ATOM     27  CA  THR A   5     -26.292  13.499 -44.093  1.00 73.15           C  
+ATOM     28  C   THR A   5     -25.312  13.322 -42.938  1.00 73.15           C  
+ATOM     29  CB  THR A   5     -26.068  14.866 -44.758  1.00 73.15           C  
+ATOM     30  O   THR A   5     -25.357  14.052 -41.950  1.00 73.15           O  
+ATOM     31  CG2 THR A   5     -26.638  14.892 -46.177  1.00 73.15           C  
+ATOM     32  OG1 THR A   5     -26.727  15.872 -44.019  1.00 73.15           O  
+ATOM     33  N   THR A   6     -24.420  12.351 -43.099  1.00 67.00           N  
+ATOM     34  CA  THR A   6     -23.256  12.052 -42.263  1.00 67.00           C  
+ATOM     35  C   THR A   6     -22.177  13.123 -42.448  1.00 67.00           C  
+ATOM     36  CB  THR A   6     -22.698  10.685 -42.709  1.00 67.00           C  
+ATOM     37  O   THR A   6     -21.684  13.305 -43.560  1.00 67.00           O  
+ATOM     38  CG2 THR A   6     -21.659  10.094 -41.760  1.00 67.00           C  
+ATOM     39  OG1 THR A   6     -23.744   9.744 -42.826  1.00 67.00           O  
+ATOM     40  N   THR A   7     -21.772  13.797 -41.371  1.00 68.61           N  
+ATOM     41  CA  THR A   7     -20.586  14.668 -41.358  1.00 68.61           C  
+ATOM     42  C   THR A   7     -19.461  13.943 -40.633  1.00 68.61           C  
+ATOM     43  CB  THR A   7     -20.860  16.037 -40.714  1.00 68.61           C  
+ATOM     44  O   THR A   7     -19.570  13.644 -39.447  1.00 68.61           O  
+ATOM     45  CG2 THR A   7     -19.727  17.030 -40.983  1.00 68.61           C  
+ATOM     46  OG1 THR A   7     -22.024  16.606 -41.266  1.00 68.61           O  
+ATOM     47  N   MET A   8     -18.394  13.636 -41.369  1.00 67.08           N  
+ATOM     48  CA  MET A   8     -17.144  13.096 -40.846  1.00 67.08           C  
+ATOM     49  C   MET A   8     -16.195  14.248 -40.479  1.00 67.08           C  
+ATOM     50  CB  MET A   8     -16.487  12.177 -41.894  1.00 67.08           C  
+ATOM     51  O   MET A   8     -15.835  15.048 -41.336  1.00 67.08           O  
+ATOM     52  CG  MET A   8     -17.331  10.945 -42.243  1.00 67.08           C  
+ATOM     53  SD  MET A   8     -16.394   9.671 -43.131  1.00 67.08           S  
+ATOM     54  CE  MET A   8     -17.646   8.366 -43.244  1.00 67.08           C  
+ATOM     55  N   MET A   9     -15.749  14.292 -39.227  1.00 67.60           N  
+ATOM     56  CA  MET A   9     -14.502  14.928 -38.780  1.00 67.60           C  
+ATOM     57  C   MET A   9     -13.861  13.880 -37.856  1.00 67.60           C  
+ATOM     58  CB  MET A   9     -14.779  16.249 -38.030  1.00 67.60           C  
+ATOM     59  O   MET A   9     -14.491  13.455 -36.899  1.00 67.60           O  
+ATOM     60  CG  MET A   9     -14.778  17.512 -38.909  1.00 67.60           C  
+ATOM     61  SD  MET A   9     -16.392  18.248 -39.302  1.00 67.60           S  
+ATOM     62  CE  MET A   9     -15.832  19.839 -39.972  1.00 67.60           C  
+ATOM     63  N   GLY A  10     -12.709  13.281 -38.147  1.00 61.80           N  
+ATOM     64  CA  GLY A  10     -11.450  13.942 -38.472  1.00 61.80           C  
+ATOM     65  C   GLY A  10     -10.628  14.061 -37.186  1.00 61.80           C  
+ATOM     66  O   GLY A  10     -10.470  15.160 -36.672  1.00 61.80           O  
+ATOM     67  N   MET A  11     -10.169  12.933 -36.630  1.00 68.90           N  
+ATOM     68  CA  MET A  11      -9.299  12.907 -35.449  1.00 68.90           C  
+ATOM     69  C   MET A  11      -7.849  12.748 -35.907  1.00 68.90           C  
+ATOM     70  CB  MET A  11      -9.730  11.809 -34.464  1.00 68.90           C  
+ATOM     71  O   MET A  11      -7.453  11.704 -36.420  1.00 68.90           O  
+ATOM     72  CG  MET A  11     -11.105  12.118 -33.862  1.00 68.90           C  
+ATOM     73  SD  MET A  11     -11.617  10.959 -32.571  1.00 68.90           S  
+ATOM     74  CE  MET A  11     -13.085  11.820 -31.949  1.00 68.90           C  
+ATOM     75  N   ALA A  12      -7.081  13.827 -35.776  1.00 61.95           N  
+ATOM     76  CA  ALA A  12      -5.652  13.854 -36.038  1.00 61.95           C  
+ATOM     77  C   ALA A  12      -4.907  13.176 -34.879  1.00 61.95           C  
+ATOM     78  CB  ALA A  12      -5.228  15.317 -36.228  1.00 61.95           C  
+ATOM     79  O   ALA A  12      -4.921  13.666 -33.754  1.00 61.95           O  
+ATOM     80  N   THR A  13      -4.245  12.056 -35.156  1.00 68.99           N  
+ATOM     81  CA  THR A  13      -3.341  11.386 -34.216  1.00 68.99           C  
+ATOM     82  C   THR A  13      -1.956  12.025 -34.298  1.00 68.99           C  
+ATOM     83  CB  THR A  13      -3.259   9.881 -34.519  1.00 68.99           C  
+ATOM     84  O   THR A  13      -1.209  11.795 -35.252  1.00 68.99           O  
+ATOM     85  CG2 THR A  13      -4.580   9.169 -34.230  1.00 68.99           C  
+ATOM     86  OG1 THR A  13      -2.949   9.691 -35.883  1.00 68.99           O  
+ATOM     87  N   THR A  14      -1.594  12.836 -33.308  1.00 70.93           N  
+ATOM     88  CA  THR A  14      -0.216  13.297 -33.105  1.00 70.93           C  
+ATOM     89  C   THR A  14       0.611  12.185 -32.464  1.00 70.93           C  
+ATOM     90  CB  THR A  14      -0.162  14.578 -32.257  1.00 70.93           C  
+ATOM     91  O   THR A  14       0.535  11.946 -31.263  1.00 70.93           O  
+ATOM     92  CG2 THR A  14      -0.412  15.813 -33.121  1.00 70.93           C  
+ATOM     93  OG1 THR A  14      -1.151  14.557 -31.254  1.00 70.93           O  
+ATOM     94  N   PHE A  15       1.408  11.510 -33.290  1.00 65.35           N  
+ATOM     95  CA  PHE A  15       2.501  10.634 -32.877  1.00 65.35           C  
+ATOM     96  C   PHE A  15       3.608  11.463 -32.206  1.00 65.35           C  
+ATOM     97  CB  PHE A  15       3.057   9.914 -34.122  1.00 65.35           C  
+ATOM     98  O   PHE A  15       4.233  12.301 -32.856  1.00 65.35           O  
+ATOM     99  CG  PHE A  15       2.510   8.521 -34.363  1.00 65.35           C  
+ATOM    100  CD1 PHE A  15       3.308   7.404 -34.051  1.00 65.35           C  
+ATOM    101  CD2 PHE A  15       1.222   8.331 -34.900  1.00 65.35           C  
+ATOM    102  CE1 PHE A  15       2.824   6.103 -34.272  1.00 65.35           C  
+ATOM    103  CE2 PHE A  15       0.737   7.028 -35.118  1.00 65.35           C  
+ATOM    104  CZ  PHE A  15       1.538   5.915 -34.805  1.00 65.35           C  
+ATOM    105  N   VAL A  16       3.879  11.206 -30.924  1.00 69.16           N  
+ATOM    106  CA  VAL A  16       5.053  11.728 -30.209  1.00 69.16           C  
+ATOM    107  C   VAL A  16       6.105  10.614 -30.129  1.00 69.16           C  
+ATOM    108  CB  VAL A  16       4.685  12.247 -28.804  1.00 69.16           C  
+ATOM    109  O   VAL A  16       5.853   9.591 -29.492  1.00 69.16           O  
+ATOM    110  CG1 VAL A  16       5.923  12.780 -28.066  1.00 69.16           C  
+ATOM    111  CG2 VAL A  16       3.664  13.390 -28.891  1.00 69.16           C  
+ATOM    112  N   PRO A  17       7.283  10.760 -30.762  1.00 68.00           N  
+ATOM    113  CA  PRO A  17       8.367   9.795 -30.622  1.00 68.00           C  
+ATOM    114  C   PRO A  17       9.140  10.019 -29.310  1.00 68.00           C  
+ATOM    115  CB  PRO A  17       9.225   9.974 -31.876  1.00 68.00           C  
+ATOM    116  O   PRO A  17       9.602  11.122 -29.017  1.00 68.00           O  
+ATOM    117  CG  PRO A  17       9.023  11.444 -32.246  1.00 68.00           C  
+ATOM    118  CD  PRO A  17       7.616  11.776 -31.748  1.00 68.00           C  
+ATOM    119  N   LYS A  18       9.303   8.946 -28.527  1.00 66.26           N  
+ATOM    120  CA  LYS A  18      10.091   8.895 -27.284  1.00 66.26           C  
+ATOM    121  C   LYS A  18      11.603   8.938 -27.597  1.00 66.26           C  
+ATOM    122  CB  LYS A  18       9.671   7.623 -26.519  1.00 66.26           C  
+ATOM    123  O   LYS A  18      12.047   8.200 -28.480  1.00 66.26           O  
+ATOM    124  CG  LYS A  18      10.240   7.480 -25.097  1.00 66.26           C  
+ATOM    125  CD  LYS A  18       9.583   6.288 -24.372  1.00 66.26           C  
+ATOM    126  CE  LYS A  18      10.233   6.032 -23.003  1.00 66.26           C  
+ATOM    127  NZ  LYS A  18       9.415   5.123 -22.151  1.00 66.26           N  
+ATOM    128  N   PRO A  19      12.415   9.751 -26.894  1.00 67.49           N  
+ATOM    129  CA  PRO A  19      13.861   9.796 -27.100  1.00 67.49           C  
+ATOM    130  C   PRO A  19      14.553   8.556 -26.510  1.00 67.49           C  
+ATOM    131  CB  PRO A  19      14.326  11.109 -26.464  1.00 67.49           C  
+ATOM    132  O   PRO A  19      14.304   8.164 -25.370  1.00 67.49           O  
+ATOM    133  CG  PRO A  19      13.292  11.364 -25.367  1.00 67.49           C  
+ATOM    134  CD  PRO A  19      12.006  10.748 -25.916  1.00 67.49           C  
+ATOM    135  N   GLN A  20      15.431   7.942 -27.305  1.00 60.48           N  
+ATOM    136  CA  GLN A  20      16.304   6.832 -26.914  1.00 60.48           C  
+ATOM    137  C   GLN A  20      17.501   7.354 -26.101  1.00 60.48           C  
+ATOM    138  CB  GLN A  20      16.795   6.101 -28.179  1.00 60.48           C  
+ATOM    139  O   GLN A  20      18.190   8.279 -26.531  1.00 60.48           O  
+ATOM    140  CG  GLN A  20      15.684   5.314 -28.899  1.00 60.48           C  
+ATOM    141  CD  GLN A  20      16.153   4.671 -30.206  1.00 60.48           C  
+ATOM    142  NE2 GLN A  20      15.459   3.669 -30.698  1.00 60.48           N  
+ATOM    143  OE1 GLN A  20      17.131   5.056 -30.823  1.00 60.48           O  
+ATOM    144  N   ALA A  21      17.770   6.744 -24.944  1.00 63.79           N  
+ATOM    145  CA  ALA A  21      18.982   6.983 -24.163  1.00 63.79           C  
+ATOM    146  C   ALA A  21      20.168   6.174 -24.736  1.00 63.79           C  
+ATOM    147  CB  ALA A  21      18.708   6.618 -22.698  1.00 63.79           C  
+ATOM    148  O   ALA A  21      19.989   4.997 -25.060  1.00 63.79           O  
+ATOM    149  N   PRO A  22      21.377   6.755 -24.859  1.00 69.72           N  
+ATOM    150  CA  PRO A  22      22.566   6.021 -25.281  1.00 69.72           C  
+ATOM    151  C   PRO A  22      23.206   5.223 -24.125  1.00 69.72           C  
+ATOM    152  CB  PRO A  22      23.510   7.080 -25.849  1.00 69.72           C  
+ATOM    153  O   PRO A  22      23.093   5.618 -22.961  1.00 69.72           O  
+ATOM    154  CG  PRO A  22      23.172   8.319 -25.020  1.00 69.72           C  
+ATOM    155  CD  PRO A  22      21.677   8.173 -24.730  1.00 69.72           C  
+ATOM    156  N   PRO A  23      23.908   4.114 -24.428  1.00 54.38           N  
+ATOM    157  CA  PRO A  23      24.531   3.259 -23.429  1.00 54.38           C  
+ATOM    158  C   PRO A  23      25.875   3.820 -22.933  1.00 54.38           C  
+ATOM    159  CB  PRO A  23      24.677   1.898 -24.119  1.00 54.38           C  
+ATOM    160  O   PRO A  23      26.640   4.425 -23.680  1.00 54.38           O  
+ATOM    161  CG  PRO A  23      24.928   2.278 -25.575  1.00 54.38           C  
+ATOM    162  CD  PRO A  23      24.106   3.552 -25.758  1.00 54.38           C  
+ATOM    163  N   MET A  24      26.130   3.557 -21.647  1.00 54.35           N  
+ATOM    164  CA  MET A  24      27.420   3.347 -20.972  1.00 54.35           C  
+ATOM    165  C   MET A  24      28.663   3.269 -21.879  1.00 54.35           C  
+ATOM    166  CB  MET A  24      27.288   2.023 -20.174  1.00 54.35           C  
+ATOM    167  O   MET A  24      28.665   2.495 -22.828  1.00 54.35           O  
+ATOM    168  CG  MET A  24      26.918   0.804 -21.048  1.00 54.35           C  
+ATOM    169  SD  MET A  24      26.336  -0.675 -20.187  1.00 54.35           S  
+ATOM    170  CE  MET A  24      25.725  -1.615 -21.619  1.00 54.35           C  
+ATOM    171  N   MET A  25      29.736   3.994 -21.521  1.00 57.94           N  
+ATOM    172  CA  MET A  25      31.137   3.522 -21.443  1.00 57.94           C  
+ATOM    173  C   MET A  25      32.107   4.684 -21.139  1.00 57.94           C  
+ATOM    174  CB  MET A  25      31.622   2.799 -22.721  1.00 57.94           C  
+ATOM    175  O   MET A  25      32.029   5.750 -21.737  1.00 57.94           O  
+ATOM    176  CG  MET A  25      31.249   1.303 -22.751  1.00 57.94           C  
+ATOM    177  SD  MET A  25      32.392   0.111 -22.025  1.00 57.94           S  
+ATOM    178  CE  MET A  25      31.287  -1.331 -22.097  1.00 57.94           C  
+ATOM    179  N   ALA A  26      33.075   4.375 -20.269  1.00 54.08           N  
+ATOM    180  CA  ALA A  26      34.419   4.952 -20.157  1.00 54.08           C  
+ATOM    181  C   ALA A  26      34.587   6.408 -19.664  1.00 54.08           C  
+ATOM    182  CB  ALA A  26      35.161   4.695 -21.477  1.00 54.08           C  
+ATOM    183  O   ALA A  26      34.390   7.367 -20.397  1.00 54.08           O  
+ATOM    184  N   ALA A  27      35.151   6.570 -18.462  1.00 53.27           N  
+ATOM    185  CA  ALA A  27      36.600   6.774 -18.296  1.00 53.27           C  
+ATOM    186  C   ALA A  27      36.923   7.323 -16.892  1.00 53.27           C  
+ATOM    187  CB  ALA A  27      37.186   7.717 -19.361  1.00 53.27           C  
+ATOM    188  O   ALA A  27      36.566   8.443 -16.539  1.00 53.27           O  
+ATOM    189  N   LEU A  28      37.655   6.530 -16.107  1.00 53.66           N  
+ATOM    190  CA  LEU A  28      38.425   7.000 -14.954  1.00 53.66           C  
+ATOM    191  C   LEU A  28      39.713   7.659 -15.466  1.00 53.66           C  
+ATOM    192  CB  LEU A  28      38.781   5.786 -14.071  1.00 53.66           C  
+ATOM    193  O   LEU A  28      40.328   7.138 -16.401  1.00 53.66           O  
+ATOM    194  CG  LEU A  28      37.589   5.186 -13.302  1.00 53.66           C  
+ATOM    195  CD1 LEU A  28      37.835   3.706 -13.007  1.00 53.66           C  
+ATOM    196  CD2 LEU A  28      37.377   5.913 -11.974  1.00 53.66           C  
+ATOM    197  N   PRO A  29      40.194   8.715 -14.795  1.00 58.78           N  
+ATOM    198  CA  PRO A  29      41.602   8.685 -14.429  1.00 58.78           C  
+ATOM    199  C   PRO A  29      41.873   9.128 -12.988  1.00 58.78           C  
+ATOM    200  CB  PRO A  29      42.333   9.560 -15.447  1.00 58.78           C  
+ATOM    201  O   PRO A  29      41.378  10.136 -12.487  1.00 58.78           O  
+ATOM    202  CG  PRO A  29      41.267  10.542 -15.933  1.00 58.78           C  
+ATOM    203  CD  PRO A  29      39.944  10.041 -15.343  1.00 58.78           C  
+ATOM    204  N   SER A  30      42.752   8.344 -12.369  1.00 56.77           N  
+ATOM    205  CA  SER A  30      43.668   8.691 -11.289  1.00 56.77           C  
+ATOM    206  C   SER A  30      44.260  10.093 -11.456  1.00 56.77           C  
+ATOM    207  CB  SER A  30      44.853   7.710 -11.388  1.00 56.77           C  
+ATOM    208  O   SER A  30      44.618  10.444 -12.576  1.00 56.77           O  
+ATOM    209  OG  SER A  30      44.410   6.372 -11.553  1.00 56.77           O  
+ATOM    210  N   ASN A  31      44.463  10.832 -10.357  1.00 63.36           N  
+ATOM    211  CA  ASN A  31      45.768  11.393  -9.957  1.00 63.36           C  
+ATOM    212  C   ASN A  31      45.614  12.475  -8.859  1.00 63.36           C  
+ATOM    213  CB  ASN A  31      46.575  11.969 -11.150  1.00 63.36           C  
+ATOM    214  O   ASN A  31      45.147  13.575  -9.115  1.00 63.36           O  
+ATOM    215  CG  ASN A  31      48.038  12.187 -10.869  1.00 63.36           C  
+ATOM    216  ND2 ASN A  31      48.645  13.181 -11.465  1.00 63.36           N  
+ATOM    217  OD1 ASN A  31      48.677  11.424 -10.167  1.00 63.36           O  
+ATOM    218  N   THR A  32      46.108  12.141  -7.664  1.00 54.93           N  
+ATOM    219  CA  THR A  32      47.033  12.944  -6.839  1.00 54.93           C  
+ATOM    220  C   THR A  32      46.662  14.357  -6.373  1.00 54.93           C  
+ATOM    221  CB  THR A  32      48.407  12.958  -7.522  1.00 54.93           C  
+ATOM    222  O   THR A  32      46.634  15.313  -7.138  1.00 54.93           O  
+ATOM    223  CG2 THR A  32      49.533  13.643  -6.754  1.00 54.93           C  
+ATOM    224  OG1 THR A  32      48.804  11.616  -7.640  1.00 54.93           O  
+ATOM    225  N   GLY A  33      46.630  14.511  -5.043  1.00 56.81           N  
+ATOM    226  CA  GLY A  33      46.861  15.785  -4.352  1.00 56.81           C  
+ATOM    227  C   GLY A  33      46.065  15.890  -3.048  1.00 56.81           C  
+ATOM    228  O   GLY A  33      44.940  16.353  -3.052  1.00 56.81           O  
+ATOM    229  N   ARG A  34      46.548  15.344  -1.926  1.00 51.39           N  
+ATOM    230  CA  ARG A  34      47.347  16.091  -0.932  1.00 51.39           C  
+ATOM    231  C   ARG A  34      46.556  17.221  -0.246  1.00 51.39           C  
+ATOM    232  CB  ARG A  34      48.669  16.563  -1.577  1.00 51.39           C  
+ATOM    233  O   ARG A  34      46.625  18.359  -0.678  1.00 51.39           O  
+ATOM    234  CG  ARG A  34      49.687  17.235  -0.641  1.00 51.39           C  
+ATOM    235  CD  ARG A  34      51.028  17.363  -1.388  1.00 51.39           C  
+ATOM    236  NE  ARG A  34      51.769  18.586  -1.017  1.00 51.39           N  
+ATOM    237  NH1 ARG A  34      52.138  19.415  -3.144  1.00 51.39           N  
+ATOM    238  NH2 ARG A  34      52.886  20.539  -1.376  1.00 51.39           N  
+ATOM    239  CZ  ARG A  34      52.256  19.499  -1.846  1.00 51.39           C  
+ATOM    240  N   SER A  35      45.935  16.919   0.896  1.00 52.75           N  
+ATOM    241  CA  SER A  35      46.165  17.685   2.132  1.00 52.75           C  
+ATOM    242  C   SER A  35      45.643  16.922   3.348  1.00 52.75           C  
+ATOM    243  CB  SER A  35      45.559  19.093   2.142  1.00 52.75           C  
+ATOM    244  O   SER A  35      44.482  16.532   3.418  1.00 52.75           O  
+ATOM    245  OG  SER A  35      46.184  19.813   3.193  1.00 52.75           O  
+ATOM    246  N   LEU A  36      46.551  16.717   4.298  1.00 54.39           N  
+ATOM    247  CA  LEU A  36      46.304  16.287   5.668  1.00 54.39           C  
+ATOM    248  C   LEU A  36      45.699  17.458   6.468  1.00 54.39           C  
+ATOM    249  CB  LEU A  36      47.669  15.857   6.250  1.00 54.39           C  
+ATOM    250  O   LEU A  36      45.882  18.612   6.085  1.00 54.39           O  
+ATOM    251  CG  LEU A  36      48.251  14.564   5.636  1.00 54.39           C  
+ATOM    252  CD1 LEU A  36      49.779  14.610   5.598  1.00 54.39           C  
+ATOM    253  CD2 LEU A  36      47.826  13.347   6.457  1.00 54.39           C  
+ATOM    254  N   PHE A  37      45.088  17.134   7.612  1.00 44.45           N  
+ATOM    255  CA  PHE A  37      44.546  18.027   8.653  1.00 44.45           C  
+ATOM    256  C   PHE A  37      43.172  18.655   8.386  1.00 44.45           C  
+ATOM    257  CB  PHE A  37      45.574  19.069   9.126  1.00 44.45           C  
+ATOM    258  O   PHE A  37      43.037  19.649   7.684  1.00 44.45           O  
+ATOM    259  CG  PHE A  37      46.672  18.475   9.975  1.00 44.45           C  
+ATOM    260  CD1 PHE A  37      46.537  18.487  11.374  1.00 44.45           C  
+ATOM    261  CD2 PHE A  37      47.807  17.891   9.383  1.00 44.45           C  
+ATOM    262  CE1 PHE A  37      47.529  17.909  12.182  1.00 44.45           C  
+ATOM    263  CE2 PHE A  37      48.793  17.299  10.191  1.00 44.45           C  
+ATOM    264  CZ  PHE A  37      48.654  17.310  11.590  1.00 44.45           C  
+ATOM    265  N   GLY A  38      42.148  18.114   9.055  1.00 51.45           N  
+ATOM    266  CA  GLY A  38      40.809  18.702   9.051  1.00 51.45           C  
+ATOM    267  C   GLY A  38      39.759  17.914   9.827  1.00 51.45           C  
+ATOM    268  O   GLY A  38      38.642  17.756   9.355  1.00 51.45           O  
+ATOM    269  N   LEU A  39      40.101  17.397  11.010  1.00 53.14           N  
+ATOM    270  CA  LEU A  39      39.106  16.944  11.979  1.00 53.14           C  
+ATOM    271  C   LEU A  39      38.278  18.162  12.408  1.00 53.14           C  
+ATOM    272  CB  LEU A  39      39.855  16.323  13.184  1.00 53.14           C  
+ATOM    273  O   LEU A  39      38.760  18.950  13.219  1.00 53.14           O  
+ATOM    274  CG  LEU A  39      38.945  15.700  14.261  1.00 53.14           C  
+ATOM    275  CD1 LEU A  39      38.463  14.317  13.825  1.00 53.14           C  
+ATOM    276  CD2 LEU A  39      39.703  15.548  15.581  1.00 53.14           C  
+ATOM    277  N   LYS A  40      37.055  18.331  11.893  1.00 55.15           N  
+ATOM    278  CA  LYS A  40      36.002  19.040  12.632  1.00 55.15           C  
+ATOM    279  C   LYS A  40      34.601  18.850  12.045  1.00 55.15           C  
+ATOM    280  CB  LYS A  40      36.336  20.541  12.825  1.00 55.15           C  
+ATOM    281  O   LYS A  40      34.255  19.392  11.007  1.00 55.15           O  
+ATOM    282  CG  LYS A  40      36.486  20.839  14.329  1.00 55.15           C  
+ATOM    283  CD  LYS A  40      36.888  22.288  14.604  1.00 55.15           C  
+ATOM    284  CE  LYS A  40      37.055  22.473  16.118  1.00 55.15           C  
+ATOM    285  NZ  LYS A  40      36.893  23.892  16.514  1.00 55.15           N  
+ATOM    286  N   THR A  41      33.795  18.171  12.861  1.00 41.56           N  
+ATOM    287  CA  THR A  41      32.403  18.503  13.207  1.00 41.56           C  
+ATOM    288  C   THR A  41      31.346  18.529  12.107  1.00 41.56           C  
+ATOM    289  CB  THR A  41      32.314  19.804  14.033  1.00 41.56           C  
+ATOM    290  O   THR A  41      31.192  19.512  11.393  1.00 41.56           O  
+ATOM    291  CG2 THR A  41      32.717  19.566  15.486  1.00 41.56           C  
+ATOM    292  OG1 THR A  41      33.159  20.815  13.533  1.00 41.56           O  
+ATOM    293  N   GLY A  42      30.462  17.530  12.182  1.00 47.00           N  
+ATOM    294  CA  GLY A  42      29.032  17.754  11.987  1.00 47.00           C  
+ATOM    295  C   GLY A  42      28.445  17.043  10.783  1.00 47.00           C  
+ATOM    296  O   GLY A  42      28.078  17.695   9.811  1.00 47.00           O  
+ATOM    297  N   SER A  43      28.259  15.725  10.890  1.00 57.62           N  
+ATOM    298  CA  SER A  43      27.234  15.042  10.101  1.00 57.62           C  
+ATOM    299  C   SER A  43      25.874  15.578  10.557  1.00 57.62           C  
+ATOM    300  CB  SER A  43      27.340  13.519  10.262  1.00 57.62           C  
+ATOM    301  O   SER A  43      25.264  15.073  11.497  1.00 57.62           O  
+ATOM    302  OG  SER A  43      26.536  12.901   9.284  1.00 57.62           O  
+ATOM    303  N   ARG A  44      25.433  16.692   9.964  1.00 48.74           N  
+ATOM    304  CA  ARG A  44      24.026  17.087   9.983  1.00 48.74           C  
+ATOM    305  C   ARG A  44      23.314  16.088   9.082  1.00 48.74           C  
+ATOM    306  CB  ARG A  44      23.838  18.537   9.498  1.00 48.74           C  
+ATOM    307  O   ARG A  44      23.161  16.338   7.893  1.00 48.74           O  
+ATOM    308  CG  ARG A  44      24.181  19.584  10.566  1.00 48.74           C  
+ATOM    309  CD  ARG A  44      23.943  20.990  10.000  1.00 48.74           C  
+ATOM    310  NE  ARG A  44      24.103  22.036  11.031  1.00 48.74           N  
+ATOM    311  NH1 ARG A  44      24.420  23.811   9.606  1.00 48.74           N  
+ATOM    312  NH2 ARG A  44      24.371  24.163  11.808  1.00 48.74           N  
+ATOM    313  CZ  ARG A  44      24.298  23.326  10.811  1.00 48.74           C  
+ATOM    314  N   GLY A  45      22.942  14.941   9.651  1.00 54.92           N  
+ATOM    315  CA  GLY A  45      21.943  14.067   9.052  1.00 54.92           C  
+ATOM    316  C   GLY A  45      20.707  14.916   8.788  1.00 54.92           C  
+ATOM    317  O   GLY A  45      20.055  15.372   9.729  1.00 54.92           O  
+ATOM    318  N   GLY A  46      20.470  15.234   7.517  1.00 56.22           N  
+ATOM    319  CA  GLY A  46      19.290  15.960   7.089  1.00 56.22           C  
+ATOM    320  C   GLY A  46      18.082  15.105   7.425  1.00 56.22           C  
+ATOM    321  O   GLY A  46      17.857  14.083   6.789  1.00 56.22           O  
+ATOM    322  N   ARG A  47      17.340  15.497   8.460  1.00 59.12           N  
+ATOM    323  CA  ARG A  47      15.985  15.004   8.686  1.00 59.12           C  
+ATOM    324  C   ARG A  47      15.154  15.527   7.518  1.00 59.12           C  
+ATOM    325  CB  ARG A  47      15.463  15.511  10.043  1.00 59.12           C  
+ATOM    326  O   ARG A  47      14.759  16.689   7.545  1.00 59.12           O  
+ATOM    327  CG  ARG A  47      16.134  14.809  11.232  1.00 59.12           C  
+ATOM    328  CD  ARG A  47      15.638  15.409  12.554  1.00 59.12           C  
+ATOM    329  NE  ARG A  47      15.842  14.475  13.678  1.00 59.12           N  
+ATOM    330  NH1 ARG A  47      15.577  15.970  15.401  1.00 59.12           N  
+ATOM    331  NH2 ARG A  47      15.792  13.792  15.848  1.00 59.12           N  
+ATOM    332  CZ  ARG A  47      15.742  14.751  14.966  1.00 59.12           C  
+ATOM    333  N   MET A  48      14.995  14.716   6.472  1.00 61.00           N  
+ATOM    334  CA  MET A  48      13.955  14.929   5.468  1.00 61.00           C  
+ATOM    335  C   MET A  48      12.645  14.935   6.259  1.00 61.00           C  
+ATOM    336  CB  MET A  48      13.972  13.794   4.424  1.00 61.00           C  
+ATOM    337  O   MET A  48      12.292  13.938   6.883  1.00 61.00           O  
+ATOM    338  CG  MET A  48      15.235  13.736   3.546  1.00 61.00           C  
+ATOM    339  SD  MET A  48      15.199  14.753   2.043  1.00 61.00           S  
+ATOM    340  CE  MET A  48      16.717  14.196   1.226  1.00 61.00           C  
+ATOM    341  N   THR A  49      12.020  16.099   6.400  1.00 59.24           N  
+ATOM    342  CA  THR A  49      10.679  16.179   6.974  1.00 59.24           C  
+ATOM    343  C   THR A  49       9.741  15.592   5.931  1.00 59.24           C  
+ATOM    344  CB  THR A  49      10.298  17.632   7.300  1.00 59.24           C  
+ATOM    345  O   THR A  49       9.546  16.231   4.899  1.00 59.24           O  
+ATOM    346  CG2 THR A  49      11.093  18.174   8.491  1.00 59.24           C  
+ATOM    347  OG1 THR A  49      10.578  18.472   6.202  1.00 59.24           O  
+ATOM    348  N   MET A  50       9.240  14.383   6.175  1.00 79.45           N  
+ATOM    349  CA  MET A  50       8.248  13.734   5.314  1.00 79.45           C  
+ATOM    350  C   MET A  50       6.986  14.593   5.291  1.00 79.45           C  
+ATOM    351  CB  MET A  50       7.968  12.300   5.803  1.00 79.45           C  
+ATOM    352  O   MET A  50       6.570  15.102   6.342  1.00 79.45           O  
+ATOM    353  CG  MET A  50       9.249  11.454   5.922  1.00 79.45           C  
+ATOM    354  SD  MET A  50      10.398  11.565   4.519  1.00 79.45           S  
+ATOM    355  CE  MET A  50       9.469  10.566   3.342  1.00 79.45           C  
+ATOM    356  N   ALA A  51       6.433  14.841   4.104  1.00 91.56           N  
+ATOM    357  CA  ALA A  51       5.160  15.536   4.012  1.00 91.56           C  
+ATOM    358  C   ALA A  51       4.064  14.578   4.487  1.00 91.56           C  
+ATOM    359  CB  ALA A  51       4.934  16.057   2.588  1.00 91.56           C  
+ATOM    360  O   ALA A  51       4.138  13.378   4.254  1.00 91.56           O  
+ATOM    361  N   ALA A  52       3.057  15.098   5.181  1.00 95.10           N  
+ATOM    362  CA  ALA A  52       1.871  14.329   5.528  1.00 95.10           C  
+ATOM    363  C   ALA A  52       0.669  14.971   4.846  1.00 95.10           C  
+ATOM    364  CB  ALA A  52       1.720  14.232   7.050  1.00 95.10           C  
+ATOM    365  O   ALA A  52       0.546  16.202   4.833  1.00 95.10           O  
+ATOM    366  N   TYR A  53      -0.188  14.132   4.283  1.00 97.39           N  
+ATOM    367  CA  TYR A  53      -1.379  14.542   3.561  1.00 97.39           C  
+ATOM    368  C   TYR A  53      -2.631  14.015   4.246  1.00 97.39           C  
+ATOM    369  CB  TYR A  53      -1.295  14.063   2.112  1.00 97.39           C  
+ATOM    370  O   TYR A  53      -2.649  12.923   4.824  1.00 97.39           O  
+ATOM    371  CG  TYR A  53      -0.123  14.633   1.337  1.00 97.39           C  
+ATOM    372  CD1 TYR A  53      -0.064  16.014   1.061  1.00 97.39           C  
+ATOM    373  CD2 TYR A  53       0.915  13.789   0.904  1.00 97.39           C  
+ATOM    374  CE1 TYR A  53       1.043  16.549   0.370  1.00 97.39           C  
+ATOM    375  CE2 TYR A  53       2.005  14.315   0.189  1.00 97.39           C  
+ATOM    376  OH  TYR A  53       3.177  16.206  -0.686  1.00 97.39           O  
+ATOM    377  CZ  TYR A  53       2.085  15.698  -0.057  1.00 97.39           C  
+ATOM    378  N   LYS A  54      -3.713  14.787   4.142  1.00 97.92           N  
+ATOM    379  CA  LYS A  54      -5.016  14.377   4.650  1.00 97.92           C  
+ATOM    380  C   LYS A  54      -5.618  13.329   3.715  1.00 97.92           C  
+ATOM    381  CB  LYS A  54      -5.909  15.611   4.825  1.00 97.92           C  
+ATOM    382  O   LYS A  54      -5.936  13.620   2.562  1.00 97.92           O  
+ATOM    383  CG  LYS A  54      -7.288  15.203   5.350  1.00 97.92           C  
+ATOM    384  CD  LYS A  54      -8.208  16.406   5.570  1.00 97.92           C  
+ATOM    385  CE  LYS A  54      -9.594  15.814   5.820  1.00 97.92           C  
+ATOM    386  NZ  LYS A  54     -10.628  16.809   6.166  1.00 97.92           N  
+ATOM    387  N   VAL A  55      -5.860  12.135   4.243  1.00 98.15           N  
+ATOM    388  CA  VAL A  55      -6.557  11.056   3.540  1.00 98.15           C  
+ATOM    389  C   VAL A  55      -7.974  10.942   4.088  1.00 98.15           C  
+ATOM    390  CB  VAL A  55      -5.793   9.728   3.658  1.00 98.15           C  
+ATOM    391  O   VAL A  55      -8.179  10.772   5.287  1.00 98.15           O  
+ATOM    392  CG1 VAL A  55      -6.529   8.611   2.905  1.00 98.15           C  
+ATOM    393  CG2 VAL A  55      -4.379   9.849   3.078  1.00 98.15           C  
+ATOM    394  N   THR A  56      -8.963  11.042   3.201  1.00 98.06           N  
+ATOM    395  CA  THR A  56     -10.382  10.840   3.522  1.00 98.06           C  
+ATOM    396  C   THR A  56     -10.857   9.534   2.899  1.00 98.06           C  
+ATOM    397  CB  THR A  56     -11.229  12.021   3.029  1.00 98.06           C  
+ATOM    398  O   THR A  56     -10.897   9.411   1.675  1.00 98.06           O  
+ATOM    399  CG2 THR A  56     -12.694  11.910   3.457  1.00 98.06           C  
+ATOM    400  OG1 THR A  56     -10.691  13.223   3.538  1.00 98.06           O  
+ATOM    401  N   LEU A  57     -11.231   8.556   3.721  1.00 97.93           N  
+ATOM    402  CA  LEU A  57     -11.762   7.276   3.261  1.00 97.93           C  
+ATOM    403  C   LEU A  57     -13.282   7.270   3.401  1.00 97.93           C  
+ATOM    404  CB  LEU A  57     -11.137   6.102   4.023  1.00 97.93           C  
+ATOM    405  O   LEU A  57     -13.824   7.414   4.498  1.00 97.93           O  
+ATOM    406  CG  LEU A  57      -9.604   6.057   4.017  1.00 97.93           C  
+ATOM    407  CD1 LEU A  57      -9.154   4.961   4.979  1.00 97.93           C  
+ATOM    408  CD2 LEU A  57      -9.026   5.793   2.628  1.00 97.93           C  
+ATOM    409  N   VAL A  58     -13.974   7.069   2.286  1.00 97.35           N  
+ATOM    410  CA  VAL A  58     -15.422   6.854   2.250  1.00 97.35           C  
+ATOM    411  C   VAL A  58     -15.656   5.351   2.371  1.00 97.35           C  
+ATOM    412  CB  VAL A  58     -16.030   7.460   0.973  1.00 97.35           C  
+ATOM    413  O   VAL A  58     -15.510   4.614   1.396  1.00 97.35           O  
+ATOM    414  CG1 VAL A  58     -17.543   7.222   0.892  1.00 97.35           C  
+ATOM    415  CG2 VAL A  58     -15.764   8.969   0.880  1.00 97.35           C  
+ATOM    416  N   THR A  59     -15.952   4.893   3.589  1.00 95.76           N  
+ATOM    417  CA  THR A  59     -16.236   3.481   3.891  1.00 95.76           C  
+ATOM    418  C   THR A  59     -17.751   3.230   3.931  1.00 95.76           C  
+ATOM    419  CB  THR A  59     -15.582   3.017   5.210  1.00 95.76           C  
+ATOM    420  O   THR A  59     -18.518   4.176   4.129  1.00 95.76           O  
+ATOM    421  CG2 THR A  59     -14.139   3.486   5.406  1.00 95.76           C  
+ATOM    422  OG1 THR A  59     -16.328   3.444   6.325  1.00 95.76           O  
+ATOM    423  N   PRO A  60     -18.223   1.973   3.824  1.00 93.95           N  
+ATOM    424  CA  PRO A  60     -19.646   1.644   3.973  1.00 93.95           C  
+ATOM    425  C   PRO A  60     -20.249   2.051   5.329  1.00 93.95           C  
+ATOM    426  CB  PRO A  60     -19.727   0.125   3.778  1.00 93.95           C  
+ATOM    427  O   PRO A  60     -21.447   2.308   5.424  1.00 93.95           O  
+ATOM    428  CG  PRO A  60     -18.502  -0.202   2.926  1.00 93.95           C  
+ATOM    429  CD  PRO A  60     -17.465   0.794   3.430  1.00 93.95           C  
+ATOM    430  N   THR A  61     -19.423   2.125   6.377  1.00 93.58           N  
+ATOM    431  CA  THR A  61     -19.835   2.493   7.744  1.00 93.58           C  
+ATOM    432  C   THR A  61     -19.868   4.013   7.954  1.00 93.58           C  
+ATOM    433  CB  THR A  61     -18.892   1.824   8.760  1.00 93.58           C  
+ATOM    434  O   THR A  61     -20.513   4.499   8.884  1.00 93.58           O  
+ATOM    435  CG2 THR A  61     -19.376   1.916  10.208  1.00 93.58           C  
+ATOM    436  OG1 THR A  61     -18.794   0.446   8.473  1.00 93.58           O  
+ATOM    437  N   GLY A  62     -19.193   4.778   7.094  1.00 94.71           N  
+ATOM    438  CA  GLY A  62     -19.093   6.232   7.173  1.00 94.71           C  
+ATOM    439  C   GLY A  62     -17.763   6.772   6.649  1.00 94.71           C  
+ATOM    440  O   GLY A  62     -16.882   6.026   6.217  1.00 94.71           O  
+ATOM    441  N   ASN A  63     -17.609   8.092   6.708  1.00 96.32           N  
+ATOM    442  CA  ASN A  63     -16.379   8.757   6.288  1.00 96.32           C  
+ATOM    443  C   ASN A  63     -15.406   8.851   7.463  1.00 96.32           C  
+ATOM    444  CB  ASN A  63     -16.692  10.140   5.700  1.00 96.32           C  
+ATOM    445  O   ASN A  63     -15.789   9.303   8.544  1.00 96.32           O  
+ATOM    446  CG  ASN A  63     -17.540  10.089   4.443  1.00 96.32           C  
+ATOM    447  ND2 ASN A  63     -17.931  11.230   3.930  1.00 96.32           N  
+ATOM    448  OD1 ASN A  63     -17.876   9.053   3.900  1.00 96.32           O  
+ATOM    449  N   VAL A  64     -14.155   8.471   7.230  1.00 96.72           N  
+ATOM    450  CA  VAL A  64     -13.058   8.595   8.197  1.00 96.72           C  
+ATOM    451  C   VAL A  64     -11.926   9.410   7.586  1.00 96.72           C  
+ATOM    452  CB  VAL A  64     -12.579   7.229   8.721  1.00 96.72           C  
+ATOM    453  O   VAL A  64     -11.695   9.368   6.379  1.00 96.72           O  
+ATOM    454  CG1 VAL A  64     -13.699   6.502   9.475  1.00 96.72           C  
+ATOM    455  CG2 VAL A  64     -12.073   6.308   7.614  1.00 96.72           C  
+ATOM    456  N   GLU A  65     -11.240  10.184   8.417  1.00 97.27           N  
+ATOM    457  CA  GLU A  65     -10.158  11.069   7.996  1.00 97.27           C  
+ATOM    458  C   GLU A  65      -8.942  10.836   8.885  1.00 97.27           C  
+ATOM    459  CB  GLU A  65     -10.580  12.544   8.087  1.00 97.27           C  
+ATOM    460  O   GLU A  65      -9.082  10.760  10.105  1.00 97.27           O  
+ATOM    461  CG  GLU A  65     -11.793  12.919   7.220  1.00 97.27           C  
+ATOM    462  CD  GLU A  65     -12.090  14.428   7.259  1.00 97.27           C  
+ATOM    463  OE1 GLU A  65     -12.737  14.962   6.328  1.00 97.27           O  
+ATOM    464  OE2 GLU A  65     -11.555  15.162   8.124  1.00 97.27           O  
+ATOM    465  N   PHE A  66      -7.760  10.764   8.282  1.00 97.26           N  
+ATOM    466  CA  PHE A  66      -6.496  10.629   9.002  1.00 97.26           C  
+ATOM    467  C   PHE A  66      -5.343  11.282   8.228  1.00 97.26           C  
+ATOM    468  CB  PHE A  66      -6.227   9.152   9.318  1.00 97.26           C  
+ATOM    469  O   PHE A  66      -5.514  11.745   7.096  1.00 97.26           O  
+ATOM    470  CG  PHE A  66      -5.916   8.288   8.116  1.00 97.26           C  
+ATOM    471  CD1 PHE A  66      -6.950   7.869   7.260  1.00 97.26           C  
+ATOM    472  CD2 PHE A  66      -4.589   7.912   7.842  1.00 97.26           C  
+ATOM    473  CE1 PHE A  66      -6.648   7.086   6.138  1.00 97.26           C  
+ATOM    474  CE2 PHE A  66      -4.301   7.123   6.719  1.00 97.26           C  
+ATOM    475  CZ  PHE A  66      -5.329   6.696   5.873  1.00 97.26           C  
+ATOM    476  N   GLN A  67      -4.179  11.379   8.868  1.00 97.06           N  
+ATOM    477  CA  GLN A  67      -2.956  11.909   8.265  1.00 97.06           C  
+ATOM    478  C   GLN A  67      -2.069  10.753   7.812  1.00 97.06           C  
+ATOM    479  CB  GLN A  67      -2.216  12.791   9.282  1.00 97.06           C  
+ATOM    480  O   GLN A  67      -1.722   9.900   8.621  1.00 97.06           O  
+ATOM    481  CG  GLN A  67      -2.870  14.168   9.471  1.00 97.06           C  
+ATOM    482  CD  GLN A  67      -2.617  15.130   8.310  1.00 97.06           C  
+ATOM    483  NE2 GLN A  67      -3.041  16.369   8.415  1.00 97.06           N  
+ATOM    484  OE1 GLN A  67      -2.023  14.822   7.296  1.00 97.06           O  
+ATOM    485  N   CYS A  68      -1.678  10.750   6.541  1.00 96.89           N  
+ATOM    486  CA  CYS A  68      -0.785   9.744   5.979  1.00 96.89           C  
+ATOM    487  C   CYS A  68       0.507  10.417   5.495  1.00 96.89           C  
+ATOM    488  CB  CYS A  68      -1.514   9.024   4.848  1.00 96.89           C  
+ATOM    489  O   CYS A  68       0.426  11.353   4.691  1.00 96.89           O  
+ATOM    490  SG  CYS A  68      -0.529   7.626   4.233  1.00 96.89           S  
+ATOM    491  N   PRO A  69       1.686   9.979   5.966  1.00 96.13           N  
+ATOM    492  CA  PRO A  69       2.965  10.376   5.385  1.00 96.13           C  
+ATOM    493  C   PRO A  69       3.059  10.022   3.894  1.00 96.13           C  
+ATOM    494  CB  PRO A  69       4.031   9.646   6.202  1.00 96.13           C  
+ATOM    495  O   PRO A  69       2.423   9.075   3.431  1.00 96.13           O  
+ATOM    496  CG  PRO A  69       3.341   9.355   7.533  1.00 96.13           C  
+ATOM    497  CD  PRO A  69       1.900   9.098   7.105  1.00 96.13           C  
+ATOM    498  N   ASP A  70       3.862  10.775   3.150  1.00 95.31           N  
+ATOM    499  CA  ASP A  70       4.097  10.590   1.715  1.00 95.31           C  
+ATOM    500  C   ASP A  70       4.979   9.375   1.372  1.00 95.31           C  
+ATOM    501  CB  ASP A  70       4.626  11.908   1.117  1.00 95.31           C  
+ATOM    502  O   ASP A  70       5.054   8.980   0.211  1.00 95.31           O  
+ATOM    503  CG  ASP A  70       5.987  12.427   1.615  1.00 95.31           C  
+ATOM    504  OD1 ASP A  70       6.517  11.955   2.643  1.00 95.31           O  
+ATOM    505  OD2 ASP A  70       6.474  13.421   1.023  1.00 95.31           O  
+ATOM    506  N   ASP A  71       5.604   8.754   2.375  1.00 94.63           N  
+ATOM    507  CA  ASP A  71       6.423   7.538   2.284  1.00 94.63           C  
+ATOM    508  C   ASP A  71       5.790   6.291   2.905  1.00 94.63           C  
+ATOM    509  CB  ASP A  71       7.794   7.794   2.915  1.00 94.63           C  
+ATOM    510  O   ASP A  71       6.451   5.257   3.023  1.00 94.63           O  
+ATOM    511  CG  ASP A  71       7.780   8.101   4.432  1.00 94.63           C  
+ATOM    512  OD1 ASP A  71       6.756   8.595   4.958  1.00 94.63           O  
+ATOM    513  OD2 ASP A  71       8.850   7.917   5.064  1.00 94.63           O  
+ATOM    514  N   VAL A  72       4.521   6.368   3.303  1.00 96.39           N  
+ATOM    515  CA  VAL A  72       3.788   5.250   3.902  1.00 96.39           C  
+ATOM    516  C   VAL A  72       2.587   4.904   3.030  1.00 96.39           C  
+ATOM    517  CB  VAL A  72       3.399   5.565   5.359  1.00 96.39           C  
+ATOM    518  O   VAL A  72       1.912   5.785   2.494  1.00 96.39           O  
+ATOM    519  CG1 VAL A  72       2.631   4.412   6.015  1.00 96.39           C  
+ATOM    520  CG2 VAL A  72       4.644   5.803   6.226  1.00 96.39           C  
+ATOM    521  N   TYR A  73       2.308   3.608   2.885  1.00 97.16           N  
+ATOM    522  CA  TYR A  73       1.112   3.164   2.183  1.00 97.16           C  
+ATOM    523  C   TYR A  73      -0.148   3.576   2.939  1.00 97.16           C  
+ATOM    524  CB  TYR A  73       1.123   1.648   1.976  1.00 97.16           C  
+ATOM    525  O   TYR A  73      -0.243   3.427   4.158  1.00 97.16           O  
+ATOM    526  CG  TYR A  73       2.229   1.135   1.080  1.00 97.16           C  
+ATOM    527  CD1 TYR A  73       2.374   1.637  -0.229  1.00 97.16           C  
+ATOM    528  CD2 TYR A  73       3.085   0.120   1.546  1.00 97.16           C  
+ATOM    529  CE1 TYR A  73       3.349   1.092  -1.083  1.00 97.16           C  
+ATOM    530  CE2 TYR A  73       4.086  -0.398   0.707  1.00 97.16           C  
+ATOM    531  OH  TYR A  73       5.159  -0.437  -1.427  1.00 97.16           O  
+ATOM    532  CZ  TYR A  73       4.211   0.083  -0.611  1.00 97.16           C  
+ATOM    533  N   ILE A  74      -1.162   4.016   2.196  1.00 97.32           N  
+ATOM    534  CA  ILE A  74      -2.444   4.457   2.757  1.00 97.32           C  
+ATOM    535  C   ILE A  74      -3.081   3.376   3.644  1.00 97.32           C  
+ATOM    536  CB  ILE A  74      -3.377   4.895   1.606  1.00 97.32           C  
+ATOM    537  O   ILE A  74      -3.637   3.709   4.688  1.00 97.32           O  
+ATOM    538  CG1 ILE A  74      -2.829   6.201   0.985  1.00 97.32           C  
+ATOM    539  CG2 ILE A  74      -4.829   5.089   2.081  1.00 97.32           C  
+ATOM    540  CD1 ILE A  74      -3.557   6.658  -0.283  1.00 97.32           C  
+ATOM    541  N   LEU A  75      -2.996   2.097   3.253  1.00 97.32           N  
+ATOM    542  CA  LEU A  75      -3.491   0.988   4.074  1.00 97.32           C  
+ATOM    543  C   LEU A  75      -2.756   0.893   5.419  1.00 97.32           C  
+ATOM    544  CB  LEU A  75      -3.370  -0.336   3.297  1.00 97.32           C  
+ATOM    545  O   LEU A  75      -3.410   0.764   6.448  1.00 97.32           O  
+ATOM    546  CG  LEU A  75      -3.830  -1.569   4.103  1.00 97.32           C  
+ATOM    547  CD1 LEU A  75      -5.321  -1.507   4.427  1.00 97.32           C  
+ATOM    548  CD2 LEU A  75      -3.589  -2.855   3.318  1.00 97.32           C  
+ATOM    549  N   ASP A  76      -1.426   0.966   5.415  1.00 96.85           N  
+ATOM    550  CA  ASP A  76      -0.616   0.805   6.626  1.00 96.85           C  
+ATOM    551  C   ASP A  76      -0.880   1.951   7.612  1.00 96.85           C  
+ATOM    552  CB  ASP A  76       0.879   0.737   6.259  1.00 96.85           C  
+ATOM    553  O   ASP A  76      -1.127   1.718   8.793  1.00 96.85           O  
+ATOM    554  CG  ASP A  76       1.297  -0.492   5.437  1.00 96.85           C  
+ATOM    555  OD1 ASP A  76       0.500  -1.449   5.279  1.00 96.85           O  
+ATOM    556  OD2 ASP A  76       2.448  -0.496   4.954  1.00 96.85           O  
+ATOM    557  N   ALA A  77      -0.930   3.189   7.113  1.00 97.02           N  
+ATOM    558  CA  ALA A  77      -1.268   4.351   7.930  1.00 97.02           C  
+ATOM    559  C   ALA A  77      -2.718   4.300   8.459  1.00 97.02           C  
+ATOM    560  CB  ALA A  77      -0.990   5.601   7.091  1.00 97.02           C  
+ATOM    561  O   ALA A  77      -2.984   4.738   9.576  1.00 97.02           O  
+ATOM    562  N   ALA A  78      -3.660   3.734   7.697  1.00 96.98           N  
+ATOM    563  CA  ALA A  78      -5.030   3.524   8.164  1.00 96.98           C  
+ATOM    564  C   ALA A  78      -5.096   2.479   9.296  1.00 96.98           C  
+ATOM    565  CB  ALA A  78      -5.907   3.134   6.966  1.00 96.98           C  
+ATOM    566  O   ALA A  78      -5.784   2.704  10.294  1.00 96.98           O  
+ATOM    567  N   GLU A  79      -4.355   1.370   9.179  1.00 96.34           N  
+ATOM    568  CA  GLU A  79      -4.269   0.340  10.223  1.00 96.34           C  
+ATOM    569  C   GLU A  79      -3.676   0.893  11.530  1.00 96.34           C  
+ATOM    570  CB  GLU A  79      -3.420  -0.861   9.754  1.00 96.34           C  
+ATOM    571  O   GLU A  79      -4.181   0.578  12.610  1.00 96.34           O  
+ATOM    572  CG  GLU A  79      -4.108  -1.783   8.732  1.00 96.34           C  
+ATOM    573  CD  GLU A  79      -3.284  -3.051   8.418  1.00 96.34           C  
+ATOM    574  OE1 GLU A  79      -3.872  -4.098   8.069  1.00 96.34           O  
+ATOM    575  OE2 GLU A  79      -2.032  -3.064   8.516  1.00 96.34           O  
+ATOM    576  N   GLU A  80      -2.645   1.742  11.453  1.00 96.41           N  
+ATOM    577  CA  GLU A  80      -2.038   2.387  12.630  1.00 96.41           C  
+ATOM    578  C   GLU A  80      -3.024   3.294  13.384  1.00 96.41           C  
+ATOM    579  CB  GLU A  80      -0.792   3.193  12.224  1.00 96.41           C  
+ATOM    580  O   GLU A  80      -3.022   3.332  14.617  1.00 96.41           O  
+ATOM    581  CG  GLU A  80       0.406   2.289  11.887  1.00 96.41           C  
+ATOM    582  CD  GLU A  80       1.729   3.052  11.682  1.00 96.41           C  
+ATOM    583  OE1 GLU A  80       2.773   2.363  11.584  1.00 96.41           O  
+ATOM    584  OE2 GLU A  80       1.738   4.305  11.717  1.00 96.41           O  
+ATOM    585  N   GLU A  81      -3.921   3.959  12.656  1.00 96.03           N  
+ATOM    586  CA  GLU A  81      -4.999   4.785  13.211  1.00 96.03           C  
+ATOM    587  C   GLU A  81      -6.222   3.957  13.663  1.00 96.03           C  
+ATOM    588  CB  GLU A  81      -5.372   5.865  12.183  1.00 96.03           C  
+ATOM    589  O   GLU A  81      -7.202   4.499  14.179  1.00 96.03           O  
+ATOM    590  CG  GLU A  81      -4.228   6.871  11.949  1.00 96.03           C  
+ATOM    591  CD  GLU A  81      -3.940   7.779  13.159  1.00 96.03           C  
+ATOM    592  OE1 GLU A  81      -2.749   8.015  13.467  1.00 96.03           O  
+ATOM    593  OE2 GLU A  81      -4.909   8.301  13.761  1.00 96.03           O  
+ATOM    594  N   GLY A  82      -6.176   2.629  13.504  1.00 95.60           N  
+ATOM    595  CA  GLY A  82      -7.244   1.709  13.898  1.00 95.60           C  
+ATOM    596  C   GLY A  82      -8.432   1.674  12.932  1.00 95.60           C  
+ATOM    597  O   GLY A  82      -9.535   1.291  13.331  1.00 95.60           O  
+ATOM    598  N   ILE A  83      -8.230   2.085  11.679  1.00 95.50           N  
+ATOM    599  CA  ILE A  83      -9.231   2.035  10.612  1.00 95.50           C  
+ATOM    600  C   ILE A  83      -9.098   0.700   9.877  1.00 95.50           C  
+ATOM    601  CB  ILE A  83      -9.074   3.233   9.652  1.00 95.50           C  
+ATOM    602  O   ILE A  83      -8.067   0.407   9.277  1.00 95.50           O  
+ATOM    603  CG1 ILE A  83      -9.211   4.584  10.396  1.00 95.50           C  
+ATOM    604  CG2 ILE A  83     -10.104   3.132   8.508  1.00 95.50           C  
+ATOM    605  CD1 ILE A  83      -8.733   5.786   9.571  1.00 95.50           C  
+ATOM    606  N   ASP A  84     -10.168  -0.092   9.890  1.00 94.24           N  
+ATOM    607  CA  ASP A  84     -10.205  -1.381   9.200  1.00 94.24           C  
+ATOM    608  C   ASP A  84     -10.549  -1.202   7.713  1.00 94.24           C  
+ATOM    609  CB  ASP A  84     -11.178  -2.321   9.928  1.00 94.24           C  
+ATOM    610  O   ASP A  84     -11.539  -0.552   7.355  1.00 94.24           O  
+ATOM    611  CG  ASP A  84     -11.042  -3.785   9.495  1.00 94.24           C  
+ATOM    612  OD1 ASP A  84      -9.917  -4.187   9.126  1.00 94.24           O  
+ATOM    613  OD2 ASP A  84     -12.060  -4.507   9.597  1.00 94.24           O  
+ATOM    614  N   LEU A  85      -9.721  -1.779   6.844  1.00 95.31           N  
+ATOM    615  CA  LEU A  85      -9.887  -1.774   5.393  1.00 95.31           C  
+ATOM    616  C   LEU A  85      -9.721  -3.190   4.843  1.00 95.31           C  
+ATOM    617  CB  LEU A  85      -8.858  -0.835   4.736  1.00 95.31           C  
+ATOM    618  O   LEU A  85      -8.950  -3.975   5.389  1.00 95.31           O  
+ATOM    619  CG  LEU A  85      -9.108   0.669   4.905  1.00 95.31           C  
+ATOM    620  CD1 LEU A  85      -8.027   1.422   4.120  1.00 95.31           C  
+ATOM    621  CD2 LEU A  85     -10.483   1.074   4.361  1.00 95.31           C  
+ATOM    622  N   PRO A  86     -10.389  -3.532   3.730  1.00 95.42           N  
+ATOM    623  CA  PRO A  86     -10.244  -4.851   3.138  1.00 95.42           C  
+ATOM    624  C   PRO A  86      -8.841  -5.013   2.532  1.00 95.42           C  
+ATOM    625  CB  PRO A  86     -11.374  -4.946   2.111  1.00 95.42           C  
+ATOM    626  O   PRO A  86      -8.372  -4.173   1.763  1.00 95.42           O  
+ATOM    627  CG  PRO A  86     -11.584  -3.496   1.676  1.00 95.42           C  
+ATOM    628  CD  PRO A  86     -11.302  -2.709   2.954  1.00 95.42           C  
+ATOM    629  N   TYR A  87      -8.162  -6.112   2.867  1.00 95.33           N  
+ATOM    630  CA  TYR A  87      -6.882  -6.503   2.275  1.00 95.33           C  
+ATOM    631  C   TYR A  87      -6.713  -8.026   2.268  1.00 95.33           C  
+ATOM    632  CB  TYR A  87      -5.712  -5.822   3.004  1.00 95.33           C  
+ATOM    633  O   TYR A  87      -7.380  -8.757   2.997  1.00 95.33           O  
+ATOM    634  CG  TYR A  87      -5.512  -6.249   4.446  1.00 95.33           C  
+ATOM    635  CD1 TYR A  87      -6.110  -5.500   5.471  1.00 95.33           C  
+ATOM    636  CD2 TYR A  87      -4.725  -7.375   4.771  1.00 95.33           C  
+ATOM    637  CE1 TYR A  87      -5.940  -5.864   6.816  1.00 95.33           C  
+ATOM    638  CE2 TYR A  87      -4.543  -7.740   6.121  1.00 95.33           C  
+ATOM    639  OH  TYR A  87      -4.908  -7.275   8.447  1.00 95.33           O  
+ATOM    640  CZ  TYR A  87      -5.141  -6.975   7.145  1.00 95.33           C  
+ATOM    641  N   SER A  88      -5.795  -8.518   1.431  1.00 95.57           N  
+ATOM    642  CA  SER A  88      -5.434  -9.941   1.392  1.00 95.57           C  
+ATOM    643  C   SER A  88      -3.943 -10.141   1.117  1.00 95.57           C  
+ATOM    644  CB  SER A  88      -6.310 -10.676   0.368  1.00 95.57           C  
+ATOM    645  O   SER A  88      -3.199 -10.545   2.006  1.00 95.57           O  
+ATOM    646  OG  SER A  88      -6.017 -12.057   0.398  1.00 95.57           O  
+ATOM    647  N   CYS A  89      -3.477  -9.800  -0.090  1.00 96.40           N  
+ATOM    648  CA  CYS A  89      -2.105 -10.079  -0.525  1.00 96.40           C  
+ATOM    649  C   CYS A  89      -1.047  -9.091   0.003  1.00 96.40           C  
+ATOM    650  CB  CYS A  89      -2.078 -10.126  -2.061  1.00 96.40           C  
+ATOM    651  O   CYS A  89       0.110  -9.476   0.141  1.00 96.40           O  
+ATOM    652  SG  CYS A  89      -2.555  -8.587  -2.908  1.00 96.40           S  
+ATOM    653  N   ARG A  90      -1.422  -7.821   0.245  1.00 94.02           N  
+ATOM    654  CA  ARG A  90      -0.526  -6.698   0.627  1.00 94.02           C  
+ATOM    655  C   ARG A  90       0.710  -6.514  -0.275  1.00 94.02           C  
+ATOM    656  CB  ARG A  90      -0.131  -6.770   2.116  1.00 94.02           C  
+ATOM    657  O   ARG A  90       1.730  -6.002   0.162  1.00 94.02           O  
+ATOM    658  CG  ARG A  90      -1.330  -6.752   3.072  1.00 94.02           C  
+ATOM    659  CD  ARG A  90      -0.886  -6.724   4.543  1.00 94.02           C  
+ATOM    660  NE  ARG A  90      -0.436  -5.388   5.006  1.00 94.02           N  
+ATOM    661  NH1 ARG A  90      -1.367  -5.440   7.122  1.00 94.02           N  
+ATOM    662  NH2 ARG A  90      -0.231  -3.687   6.539  1.00 94.02           N  
+ATOM    663  CZ  ARG A  90      -0.662  -4.856   6.201  1.00 94.02           C  
+ATOM    664  N   ALA A  91       0.620  -6.942  -1.531  1.00 94.91           N  
+ATOM    665  CA  ALA A  91       1.715  -6.879  -2.502  1.00 94.91           C  
+ATOM    666  C   ALA A  91       1.319  -6.138  -3.791  1.00 94.91           C  
+ATOM    667  CB  ALA A  91       2.198  -8.313  -2.759  1.00 94.91           C  
+ATOM    668  O   ALA A  91       1.973  -6.305  -4.815  1.00 94.91           O  
+ATOM    669  N   GLY A  92       0.197  -5.405  -3.778  1.00 95.29           N  
+ATOM    670  CA  GLY A  92      -0.312  -4.705  -4.964  1.00 95.29           C  
+ATOM    671  C   GLY A  92      -0.662  -5.630  -6.139  1.00 95.29           C  
+ATOM    672  O   GLY A  92      -0.607  -5.203  -7.286  1.00 95.29           O  
+ATOM    673  N   SER A  93      -0.968  -6.904  -5.875  1.00 95.82           N  
+ATOM    674  CA  SER A  93      -1.162  -7.949  -6.897  1.00 95.82           C  
+ATOM    675  C   SER A  93      -2.557  -8.589  -6.878  1.00 95.82           C  
+ATOM    676  CB  SER A  93      -0.066  -9.004  -6.751  1.00 95.82           C  
+ATOM    677  O   SER A  93      -2.790  -9.600  -7.539  1.00 95.82           O  
+ATOM    678  OG  SER A  93      -0.122  -9.627  -5.475  1.00 95.82           O  
+ATOM    679  N   CYS A  94      -3.487  -8.025  -6.105  1.00 96.09           N  
+ATOM    680  CA  CYS A  94      -4.852  -8.518  -5.947  1.00 96.09           C  
+ATOM    681  C   CYS A  94      -5.857  -7.358  -5.846  1.00 96.09           C  
+ATOM    682  CB  CYS A  94      -4.925  -9.441  -4.715  1.00 96.09           C  
+ATOM    683  O   CYS A  94      -5.490  -6.248  -5.466  1.00 96.09           O  
+ATOM    684  SG  CYS A  94      -4.602  -8.674  -3.091  1.00 96.09           S  
+ATOM    685  N   SER A  95      -7.134  -7.636  -6.121  1.00 94.83           N  
+ATOM    686  CA  SER A  95      -8.246  -6.672  -6.091  1.00 94.83           C  
+ATOM    687  C   SER A  95      -8.809  -6.374  -4.699  1.00 94.83           C  
+ATOM    688  CB  SER A  95      -9.391  -7.203  -6.962  1.00 94.83           C  
+ATOM    689  O   SER A  95      -9.620  -5.465  -4.558  1.00 94.83           O  
+ATOM    690  OG  SER A  95      -9.674  -8.556  -6.635  1.00 94.83           O  
+ATOM    691  N   SER A  96      -8.403  -7.102  -3.656  1.00 96.73           N  
+ATOM    692  CA  SER A  96      -9.071  -7.016  -2.346  1.00 96.73           C  
+ATOM    693  C   SER A  96      -8.940  -5.653  -1.669  1.00 96.73           C  
+ATOM    694  CB  SER A  96      -8.566  -8.115  -1.415  1.00 96.73           C  
+ATOM    695  O   SER A  96      -9.832  -5.247  -0.934  1.00 96.73           O  
+ATOM    696  OG  SER A  96      -8.599  -9.362  -2.083  1.00 96.73           O  
+ATOM    697  N   CYS A  97      -7.849  -4.928  -1.939  1.00 96.99           N  
+ATOM    698  CA  CYS A  97      -7.617  -3.576  -1.423  1.00 96.99           C  
+ATOM    699  C   CYS A  97      -8.096  -2.475  -2.397  1.00 96.99           C  
+ATOM    700  CB  CYS A  97      -6.152  -3.458  -0.943  1.00 96.99           C  
+ATOM    701  O   CYS A  97      -7.664  -1.325  -2.301  1.00 96.99           O  
+ATOM    702  SG  CYS A  97      -4.885  -3.197  -2.230  1.00 96.99           S  
+ATOM    703  N   ALA A  98      -8.963  -2.818  -3.361  1.00 97.36           N  
+ATOM    704  CA  ALA A  98      -9.425  -1.886  -4.382  1.00 97.36           C  
+ATOM    705  C   ALA A  98     -10.331  -0.784  -3.816  1.00 97.36           C  
+ATOM    706  CB  ALA A  98     -10.109  -2.632  -5.533  1.00 97.36           C  
+ATOM    707  O   ALA A  98     -11.282  -1.016  -3.056  1.00 97.36           O  
+ATOM    708  N   GLY A  99     -10.048   0.433  -4.263  1.00 97.46           N  
+ATOM    709  CA  GLY A  99     -10.836   1.628  -4.033  1.00 97.46           C  
+ATOM    710  C   GLY A  99     -10.931   2.494  -5.286  1.00 97.46           C  
+ATOM    711  O   GLY A  99     -10.322   2.208  -6.318  1.00 97.46           O  
+ATOM    712  N   LYS A 100     -11.693   3.583  -5.179  1.00 97.48           N  
+ATOM    713  CA  LYS A 100     -11.872   4.572  -6.243  1.00 97.48           C  
+ATOM    714  C   LYS A 100     -11.452   5.956  -5.767  1.00 97.48           C  
+ATOM    715  CB  LYS A 100     -13.329   4.539  -6.736  1.00 97.48           C  
+ATOM    716  O   LYS A 100     -12.020   6.488  -4.813  1.00 97.48           O  
+ATOM    717  CG  LYS A 100     -13.491   5.175  -8.122  1.00 97.48           C  
+ATOM    718  CD  LYS A 100     -13.015   4.215  -9.220  1.00 97.48           C  
+ATOM    719  CE  LYS A 100     -13.097   4.892 -10.581  1.00 97.48           C  
+ATOM    720  NZ  LYS A 100     -12.581   4.009 -11.651  1.00 97.48           N  
+ATOM    721  N   LEU A 101     -10.480   6.555  -6.442  1.00 98.00           N  
+ATOM    722  CA  LEU A 101     -10.034   7.917  -6.186  1.00 98.00           C  
+ATOM    723  C   LEU A 101     -11.112   8.913  -6.636  1.00 98.00           C  
+ATOM    724  CB  LEU A 101      -8.694   8.134  -6.908  1.00 98.00           C  
+ATOM    725  O   LEU A 101     -11.552   8.899  -7.784  1.00 98.00           O  
+ATOM    726  CG  LEU A 101      -8.023   9.486  -6.604  1.00 98.00           C  
+ATOM    727  CD1 LEU A 101      -7.683   9.622  -5.119  1.00 98.00           C  
+ATOM    728  CD2 LEU A 101      -6.736   9.603  -7.417  1.00 98.00           C  
+ATOM    729  N   LYS A 102     -11.550   9.788  -5.728  1.00 97.25           N  
+ATOM    730  CA  LYS A 102     -12.512  10.864  -6.019  1.00 97.25           C  
+ATOM    731  C   LYS A 102     -11.840  12.201  -6.250  1.00 97.25           C  
+ATOM    732  CB  LYS A 102     -13.526  11.002  -4.876  1.00 97.25           C  
+ATOM    733  O   LYS A 102     -12.257  12.950  -7.128  1.00 97.25           O  
+ATOM    734  CG  LYS A 102     -14.434   9.786  -4.730  1.00 97.25           C  
+ATOM    735  CD  LYS A 102     -15.290   9.533  -5.983  1.00 97.25           C  
+ATOM    736  CE  LYS A 102     -16.151   8.365  -5.566  1.00 97.25           C  
+ATOM    737  NZ  LYS A 102     -17.104   7.824  -6.558  1.00 97.25           N  
+ATOM    738  N   THR A 103     -10.846  12.521  -5.431  1.00 97.23           N  
+ATOM    739  CA  THR A 103     -10.115  13.788  -5.480  1.00 97.23           C  
+ATOM    740  C   THR A 103      -8.674  13.581  -5.033  1.00 97.23           C  
+ATOM    741  CB  THR A 103     -10.760  14.876  -4.599  1.00 97.23           C  
+ATOM    742  O   THR A 103      -8.389  12.680  -4.242  1.00 97.23           O  
+ATOM    743  CG2 THR A 103     -12.205  15.212  -4.970  1.00 97.23           C  
+ATOM    744  OG1 THR A 103     -10.772  14.484  -3.250  1.00 97.23           O  
+ATOM    745  N   GLY A 104      -7.786  14.450  -5.517  1.00 96.90           N  
+ATOM    746  CA  GLY A 104      -6.362  14.432  -5.196  1.00 96.90           C  
+ATOM    747  C   GLY A 104      -5.527  13.596  -6.163  1.00 96.90           C  
+ATOM    748  O   GLY A 104      -5.995  13.183  -7.224  1.00 96.90           O  
+ATOM    749  N   SER A 105      -4.273  13.379  -5.785  1.00 96.43           N  
+ATOM    750  CA  SER A 105      -3.296  12.592  -6.526  1.00 96.43           C  
+ATOM    751  C   SER A 105      -2.557  11.644  -5.589  1.00 96.43           C  
+ATOM    752  CB  SER A 105      -2.295  13.511  -7.229  1.00 96.43           C  
+ATOM    753  O   SER A 105      -2.205  11.997  -4.463  1.00 96.43           O  
+ATOM    754  OG  SER A 105      -2.957  14.297  -8.205  1.00 96.43           O  
+ATOM    755  N   LEU A 106      -2.292  10.442  -6.086  1.00 96.86           N  
+ATOM    756  CA  LEU A 106      -1.520   9.412  -5.404  1.00 96.86           C  
+ATOM    757  C   LEU A 106      -0.552   8.757  -6.385  1.00 96.86           C  
+ATOM    758  CB  LEU A 106      -2.467   8.422  -4.704  1.00 96.86           C  
+ATOM    759  O   LEU A 106      -0.781   8.781  -7.594  1.00 96.86           O  
+ATOM    760  CG  LEU A 106      -3.499   7.707  -5.601  1.00 96.86           C  
+ATOM    761  CD1 LEU A 106      -2.954   6.439  -6.261  1.00 96.86           C  
+ATOM    762  CD2 LEU A 106      -4.687   7.329  -4.721  1.00 96.86           C  
+ATOM    763  N   ASN A 107       0.526   8.195  -5.855  1.00 96.33           N  
+ATOM    764  CA  ASN A 107       1.431   7.322  -6.585  1.00 96.33           C  
+ATOM    765  C   ASN A 107       1.070   5.875  -6.232  1.00 96.33           C  
+ATOM    766  CB  ASN A 107       2.887   7.696  -6.242  1.00 96.33           C  
+ATOM    767  O   ASN A 107       0.990   5.544  -5.053  1.00 96.33           O  
+ATOM    768  CG  ASN A 107       3.876   6.848  -7.026  1.00 96.33           C  
+ATOM    769  ND2 ASN A 107       4.879   7.421  -7.639  1.00 96.33           N  
+ATOM    770  OD1 ASN A 107       3.724   5.652  -7.147  1.00 96.33           O  
+ATOM    771  N   GLN A 108       0.851   5.033  -7.238  1.00 96.30           N  
+ATOM    772  CA  GLN A 108       0.638   3.596  -7.060  1.00 96.30           C  
+ATOM    773  C   GLN A 108       1.542   2.769  -7.982  1.00 96.30           C  
+ATOM    774  CB  GLN A 108      -0.859   3.247  -7.159  1.00 96.30           C  
+ATOM    775  O   GLN A 108       1.148   1.707  -8.437  1.00 96.30           O  
+ATOM    776  CG  GLN A 108      -1.502   3.575  -8.521  1.00 96.30           C  
+ATOM    777  CD  GLN A 108      -2.982   3.206  -8.556  1.00 96.30           C  
+ATOM    778  NE2 GLN A 108      -3.791   3.933  -9.297  1.00 96.30           N  
+ATOM    779  OE1 GLN A 108      -3.439   2.281  -7.899  1.00 96.30           O  
+ATOM    780  N   ASP A 109       2.751   3.249  -8.280  1.00 95.43           N  
+ATOM    781  CA  ASP A 109       3.690   2.600  -9.209  1.00 95.43           C  
+ATOM    782  C   ASP A 109       4.161   1.215  -8.715  1.00 95.43           C  
+ATOM    783  CB  ASP A 109       4.913   3.512  -9.438  1.00 95.43           C  
+ATOM    784  O   ASP A 109       4.617   0.395  -9.511  1.00 95.43           O  
+ATOM    785  CG  ASP A 109       4.617   4.854 -10.128  1.00 95.43           C  
+ATOM    786  OD1 ASP A 109       3.605   4.956 -10.855  1.00 95.43           O  
+ATOM    787  OD2 ASP A 109       5.438   5.792  -9.950  1.00 95.43           O  
+ATOM    788  N   ASP A 110       4.030   0.942  -7.412  1.00 95.52           N  
+ATOM    789  CA  ASP A 110       4.407  -0.331  -6.780  1.00 95.52           C  
+ATOM    790  C   ASP A 110       3.375  -1.455  -7.009  1.00 95.52           C  
+ATOM    791  CB  ASP A 110       4.657  -0.098  -5.274  1.00 95.52           C  
+ATOM    792  O   ASP A 110       3.621  -2.619  -6.677  1.00 95.52           O  
+ATOM    793  CG  ASP A 110       5.966   0.649  -4.958  1.00 95.52           C  
+ATOM    794  OD1 ASP A 110       6.852   0.728  -5.839  1.00 95.52           O  
+ATOM    795  OD2 ASP A 110       6.114   1.101  -3.799  1.00 95.52           O  
+ATOM    796  N   GLN A 111       2.209  -1.136  -7.576  1.00 95.77           N  
+ATOM    797  CA  GLN A 111       1.164  -2.108  -7.889  1.00 95.77           C  
+ATOM    798  C   GLN A 111       1.426  -2.838  -9.223  1.00 95.77           C  
+ATOM    799  CB  GLN A 111      -0.197  -1.401  -7.809  1.00 95.77           C  
+ATOM    800  O   GLN A 111       2.146  -2.355 -10.092  1.00 95.77           O  
+ATOM    801  CG  GLN A 111      -0.557  -0.609  -9.080  1.00 95.77           C  
+ATOM    802  CD  GLN A 111      -1.216  -1.439 -10.160  1.00 95.77           C  
+ATOM    803  NE2 GLN A 111      -1.048  -1.083 -11.412  1.00 95.77           N  
+ATOM    804  OE1 GLN A 111      -1.871  -2.431  -9.882  1.00 95.77           O  
+ATOM    805  N   SER A 112       0.819  -4.013  -9.414  1.00 95.91           N  
+ATOM    806  CA  SER A 112       0.989  -4.844 -10.623  1.00 95.91           C  
+ATOM    807  C   SER A 112      -0.301  -5.497 -11.139  1.00 95.91           C  
+ATOM    808  CB  SER A 112       2.064  -5.908 -10.363  1.00 95.91           C  
+ATOM    809  O   SER A 112      -0.243  -6.378 -11.997  1.00 95.91           O  
+ATOM    810  OG  SER A 112       1.715  -6.728  -9.258  1.00 95.91           O  
+ATOM    811  N   PHE A 113      -1.456  -5.108 -10.600  1.00 96.54           N  
+ATOM    812  CA  PHE A 113      -2.754  -5.725 -10.874  1.00 96.54           C  
+ATOM    813  C   PHE A 113      -3.638  -4.888 -11.808  1.00 96.54           C  
+ATOM    814  CB  PHE A 113      -3.449  -5.969  -9.533  1.00 96.54           C  
+ATOM    815  O   PHE A 113      -4.209  -5.446 -12.740  1.00 96.54           O  
+ATOM    816  CG  PHE A 113      -4.826  -6.586  -9.647  1.00 96.54           C  
+ATOM    817  CD1 PHE A 113      -5.977  -5.778  -9.594  1.00 96.54           C  
+ATOM    818  CD2 PHE A 113      -4.953  -7.970  -9.864  1.00 96.54           C  
+ATOM    819  CE1 PHE A 113      -7.245  -6.353  -9.781  1.00 96.54           C  
+ATOM    820  CE2 PHE A 113      -6.224  -8.544 -10.040  1.00 96.54           C  
+ATOM    821  CZ  PHE A 113      -7.370  -7.734 -10.005  1.00 96.54           C  
+ATOM    822  N   LEU A 114      -3.754  -3.582 -11.555  1.00 96.33           N  
+ATOM    823  CA  LEU A 114      -4.530  -2.651 -12.371  1.00 96.33           C  
+ATOM    824  C   LEU A 114      -3.795  -2.350 -13.678  1.00 96.33           C  
+ATOM    825  CB  LEU A 114      -4.811  -1.339 -11.609  1.00 96.33           C  
+ATOM    826  O   LEU A 114      -2.580  -2.128 -13.664  1.00 96.33           O  
+ATOM    827  CG  LEU A 114      -5.566  -1.484 -10.278  1.00 96.33           C  
+ATOM    828  CD1 LEU A 114      -5.686  -0.117  -9.598  1.00 96.33           C  
+ATOM    829  CD2 LEU A 114      -6.978  -2.038 -10.461  1.00 96.33           C  
+ATOM    830  N   ASP A 115      -4.537  -2.316 -14.779  1.00 95.81           N  
+ATOM    831  CA  ASP A 115      -4.045  -1.814 -16.062  1.00 95.81           C  
+ATOM    832  C   ASP A 115      -4.138  -0.277 -16.155  1.00 95.81           C  
+ATOM    833  CB  ASP A 115      -4.740  -2.552 -17.222  1.00 95.81           C  
+ATOM    834  O   ASP A 115      -4.715   0.390 -15.292  1.00 95.81           O  
+ATOM    835  CG  ASP A 115      -6.260  -2.373 -17.259  1.00 95.81           C  
+ATOM    836  OD1 ASP A 115      -6.710  -1.214 -17.147  1.00 95.81           O  
+ATOM    837  OD2 ASP A 115      -6.958  -3.399 -17.427  1.00 95.81           O  
+ATOM    838  N   ASP A 116      -3.526   0.293 -17.196  1.00 95.50           N  
+ATOM    839  CA  ASP A 116      -3.459   1.746 -17.387  1.00 95.50           C  
+ATOM    840  C   ASP A 116      -4.860   2.374 -17.523  1.00 95.50           C  
+ATOM    841  CB  ASP A 116      -2.604   2.074 -18.629  1.00 95.50           C  
+ATOM    842  O   ASP A 116      -5.105   3.445 -16.968  1.00 95.50           O  
+ATOM    843  CG  ASP A 116      -1.114   1.697 -18.533  1.00 95.50           C  
+ATOM    844  OD1 ASP A 116      -0.602   1.477 -17.414  1.00 95.50           O  
+ATOM    845  OD2 ASP A 116      -0.464   1.626 -19.607  1.00 95.50           O  
+ATOM    846  N   ASP A 117      -5.798   1.689 -18.191  1.00 95.97           N  
+ATOM    847  CA  ASP A 117      -7.170   2.175 -18.378  1.00 95.97           C  
+ATOM    848  C   ASP A 117      -7.895   2.256 -17.022  1.00 95.97           C  
+ATOM    849  CB  ASP A 117      -7.946   1.263 -19.356  1.00 95.97           C  
+ATOM    850  O   ASP A 117      -8.546   3.255 -16.706  1.00 95.97           O  
+ATOM    851  CG  ASP A 117      -7.475   1.293 -20.823  1.00 95.97           C  
+ATOM    852  OD1 ASP A 117      -6.917   2.320 -21.273  1.00 95.97           O  
+ATOM    853  OD2 ASP A 117      -7.742   0.304 -21.550  1.00 95.97           O  
+ATOM    854  N   GLN A 118      -7.733   1.243 -16.167  1.00 95.95           N  
+ATOM    855  CA  GLN A 118      -8.296   1.236 -14.820  1.00 95.95           C  
+ATOM    856  C   GLN A 118      -7.694   2.341 -13.938  1.00 95.95           C  
+ATOM    857  CB  GLN A 118      -8.072  -0.139 -14.175  1.00 95.95           C  
+ATOM    858  O   GLN A 118      -8.418   3.018 -13.196  1.00 95.95           O  
+ATOM    859  CG  GLN A 118      -8.974  -1.221 -14.782  1.00 95.95           C  
+ATOM    860  CD  GLN A 118      -8.649  -2.616 -14.256  1.00 95.95           C  
+ATOM    861  NE2 GLN A 118      -9.591  -3.531 -14.310  1.00 95.95           N  
+ATOM    862  OE1 GLN A 118      -7.585  -2.911 -13.733  1.00 95.95           O  
+ATOM    863  N   ILE A 119      -6.381   2.557 -14.014  1.00 95.94           N  
+ATOM    864  CA  ILE A 119      -5.715   3.648 -13.290  1.00 95.94           C  
+ATOM    865  C   ILE A 119      -6.273   5.004 -13.743  1.00 95.94           C  
+ATOM    866  CB  ILE A 119      -4.185   3.555 -13.468  1.00 95.94           C  
+ATOM    867  O   ILE A 119      -6.622   5.828 -12.893  1.00 95.94           O  
+ATOM    868  CG1 ILE A 119      -3.648   2.296 -12.749  1.00 95.94           C  
+ATOM    869  CG2 ILE A 119      -3.489   4.820 -12.927  1.00 95.94           C  
+ATOM    870  CD1 ILE A 119      -2.194   1.970 -13.109  1.00 95.94           C  
+ATOM    871  N   ASP A 120      -6.433   5.212 -15.051  1.00 95.31           N  
+ATOM    872  CA  ASP A 120      -6.968   6.446 -15.636  1.00 95.31           C  
+ATOM    873  C   ASP A 120      -8.439   6.689 -15.269  1.00 95.31           C  
+ATOM    874  CB  ASP A 120      -6.807   6.404 -17.167  1.00 95.31           C  
+ATOM    875  O   ASP A 120      -8.857   7.827 -15.036  1.00 95.31           O  
+ATOM    876  CG  ASP A 120      -5.413   6.806 -17.671  1.00 95.31           C  
+ATOM    877  OD1 ASP A 120      -4.601   7.318 -16.863  1.00 95.31           O  
+ATOM    878  OD2 ASP A 120      -5.219   6.767 -18.908  1.00 95.31           O  
+ATOM    879  N   GLU A 121      -9.235   5.628 -15.130  1.00 95.80           N  
+ATOM    880  CA  GLU A 121     -10.590   5.729 -14.590  1.00 95.80           C  
+ATOM    881  C   GLU A 121     -10.610   6.136 -13.105  1.00 95.80           C  
+ATOM    882  CB  GLU A 121     -11.328   4.398 -14.751  1.00 95.80           C  
+ATOM    883  O   GLU A 121     -11.679   6.453 -12.576  1.00 95.80           O  
+ATOM    884  CG  GLU A 121     -11.754   4.046 -16.178  1.00 95.80           C  
+ATOM    885  CD  GLU A 121     -12.500   2.701 -16.216  1.00 95.80           C  
+ATOM    886  OE1 GLU A 121     -12.871   2.292 -17.337  1.00 95.80           O  
+ATOM    887  OE2 GLU A 121     -12.804   2.158 -15.117  1.00 95.80           O  
+ATOM    888  N   GLY A 122      -9.472   6.089 -12.407  1.00 96.68           N  
+ATOM    889  CA  GLY A 122      -9.322   6.431 -10.994  1.00 96.68           C  
+ATOM    890  C   GLY A 122      -9.406   5.234 -10.048  1.00 96.68           C  
+ATOM    891  O   GLY A 122      -9.763   5.408  -8.883  1.00 96.68           O  
+ATOM    892  N   TRP A 123      -9.153   4.012 -10.521  1.00 97.54           N  
+ATOM    893  CA  TRP A 123      -8.994   2.858  -9.633  1.00 97.54           C  
+ATOM    894  C   TRP A 123      -7.672   2.934  -8.869  1.00 97.54           C  
+ATOM    895  CB  TRP A 123      -9.129   1.551 -10.415  1.00 97.54           C  
+ATOM    896  O   TRP A 123      -6.649   3.372  -9.397  1.00 97.54           O  
+ATOM    897  CG  TRP A 123     -10.508   1.316 -10.946  1.00 97.54           C  
+ATOM    898  CD1 TRP A 123     -10.933   1.429 -12.224  1.00 97.54           C  
+ATOM    899  CD2 TRP A 123     -11.663   0.864 -10.196  1.00 97.54           C  
+ATOM    900  CE2 TRP A 123     -12.768   0.728 -11.092  1.00 97.54           C  
+ATOM    901  CE3 TRP A 123     -11.848   0.503  -8.847  1.00 97.54           C  
+ATOM    902  NE1 TRP A 123     -12.268   1.104 -12.322  1.00 97.54           N  
+ATOM    903  CH2 TRP A 123     -14.168  -0.071  -9.301  1.00 97.54           C  
+ATOM    904  CZ2 TRP A 123     -14.017   0.281 -10.651  1.00 97.54           C  
+ATOM    905  CZ3 TRP A 123     -13.088   0.024  -8.408  1.00 97.54           C  
+ATOM    906  N   VAL A 124      -7.702   2.521  -7.603  1.00 97.69           N  
+ATOM    907  CA  VAL A 124      -6.526   2.522  -6.731  1.00 97.69           C  
+ATOM    908  C   VAL A 124      -6.454   1.262  -5.883  1.00 97.69           C  
+ATOM    909  CB  VAL A 124      -6.448   3.804  -5.877  1.00 97.69           C  
+ATOM    910  O   VAL A 124      -7.473   0.789  -5.379  1.00 97.69           O  
+ATOM    911  CG1 VAL A 124      -7.683   4.047  -4.996  1.00 97.69           C  
+ATOM    912  CG2 VAL A 124      -5.210   3.798  -4.974  1.00 97.69           C  
+ATOM    913  N   LEU A 125      -5.241   0.754  -5.667  1.00 97.68           N  
+ATOM    914  CA  LEU A 125      -4.957  -0.262  -4.655  1.00 97.68           C  
+ATOM    915  C   LEU A 125      -4.387   0.384  -3.389  1.00 97.68           C  
+ATOM    916  CB  LEU A 125      -4.015  -1.318  -5.253  1.00 97.68           C  
+ATOM    917  O   LEU A 125      -3.219   0.760  -3.345  1.00 97.68           O  
+ATOM    918  CG  LEU A 125      -4.623  -2.132  -6.411  1.00 97.68           C  
+ATOM    919  CD1 LEU A 125      -3.751  -3.353  -6.675  1.00 97.68           C  
+ATOM    920  CD2 LEU A 125      -6.037  -2.660  -6.139  1.00 97.68           C  
+ATOM    921  N   THR A 126      -5.194   0.488  -2.327  1.00 97.06           N  
+ATOM    922  CA  THR A 126      -4.805   1.192  -1.084  1.00 97.06           C  
+ATOM    923  C   THR A 126      -3.589   0.575  -0.390  1.00 97.06           C  
+ATOM    924  CB  THR A 126      -5.959   1.229  -0.072  1.00 97.06           C  
+ATOM    925  O   THR A 126      -2.879   1.260   0.343  1.00 97.06           O  
+ATOM    926  CG2 THR A 126      -7.185   1.967  -0.612  1.00 97.06           C  
+ATOM    927  OG1 THR A 126      -6.354  -0.084   0.255  1.00 97.06           O  
+ATOM    928  N   CYS A 127      -3.331  -0.709  -0.647  1.00 97.42           N  
+ATOM    929  CA  CYS A 127      -2.204  -1.459  -0.111  1.00 97.42           C  
+ATOM    930  C   CYS A 127      -0.864  -1.216  -0.823  1.00 97.42           C  
+ATOM    931  CB  CYS A 127      -2.584  -2.945  -0.063  1.00 97.42           C  
+ATOM    932  O   CYS A 127       0.151  -1.718  -0.353  1.00 97.42           O  
+ATOM    933  SG  CYS A 127      -3.025  -3.847  -1.584  1.00 97.42           S  
+ATOM    934  N   ALA A 128      -0.858  -0.487  -1.940  1.00 97.30           N  
+ATOM    935  CA  ALA A 128       0.342  -0.134  -2.701  1.00 97.30           C  
+ATOM    936  C   ALA A 128       0.251   1.307  -3.243  1.00 97.30           C  
+ATOM    937  CB  ALA A 128       0.563  -1.184  -3.800  1.00 97.30           C  
+ATOM    938  O   ALA A 128       0.688   1.587  -4.356  1.00 97.30           O  
+ATOM    939  N   ALA A 129      -0.375   2.209  -2.478  1.00 97.44           N  
+ATOM    940  CA  ALA A 129      -0.588   3.601  -2.863  1.00 97.44           C  
+ATOM    941  C   ALA A 129      -0.025   4.568  -1.815  1.00 97.44           C  
+ATOM    942  CB  ALA A 129      -2.084   3.835  -3.097  1.00 97.44           C  
+ATOM    943  O   ALA A 129      -0.355   4.454  -0.633  1.00 97.44           O  
+ATOM    944  N   TYR A 130       0.757   5.545  -2.273  1.00 97.59           N  
+ATOM    945  CA  TYR A 130       1.282   6.666  -1.493  1.00 97.59           C  
+ATOM    946  C   TYR A 130       0.526   7.955  -1.831  1.00 97.59           C  
+ATOM    947  CB  TYR A 130       2.766   6.887  -1.792  1.00 97.59           C  
+ATOM    948  O   TYR A 130       0.332   8.262  -3.014  1.00 97.59           O  
+ATOM    949  CG  TYR A 130       3.642   5.689  -1.525  1.00 97.59           C  
+ATOM    950  CD1 TYR A 130       4.092   5.418  -0.220  1.00 97.59           C  
+ATOM    951  CD2 TYR A 130       4.018   4.858  -2.593  1.00 97.59           C  
+ATOM    952  CE1 TYR A 130       4.939   4.315   0.018  1.00 97.59           C  
+ATOM    953  CE2 TYR A 130       4.871   3.771  -2.360  1.00 97.59           C  
+ATOM    954  OH  TYR A 130       6.175   2.438  -0.877  1.00 97.59           O  
+ATOM    955  CZ  TYR A 130       5.341   3.495  -1.060  1.00 97.59           C  
+ATOM    956  N   PRO A 131       0.116   8.759  -0.840  1.00 97.30           N  
+ATOM    957  CA  PRO A 131      -0.506  10.047  -1.109  1.00 97.30           C  
+ATOM    958  C   PRO A 131       0.539  11.065  -1.596  1.00 97.30           C  
+ATOM    959  CB  PRO A 131      -1.145  10.449   0.217  1.00 97.30           C  
+ATOM    960  O   PRO A 131       1.600  11.222  -1.000  1.00 97.30           O  
+ATOM    961  CG  PRO A 131      -0.204   9.834   1.255  1.00 97.30           C  
+ATOM    962  CD  PRO A 131       0.289   8.550   0.593  1.00 97.30           C  
+ATOM    963  N   VAL A 132       0.222  11.798  -2.668  1.00 96.81           N  
+ATOM    964  CA  VAL A 132       1.050  12.914  -3.184  1.00 96.81           C  
+ATOM    965  C   VAL A 132       0.378  14.270  -2.919  1.00 96.81           C  
+ATOM    966  CB  VAL A 132       1.374  12.695  -4.679  1.00 96.81           C  
+ATOM    967  O   VAL A 132       0.996  15.328  -3.028  1.00 96.81           O  
+ATOM    968  CG1 VAL A 132       2.296  13.775  -5.265  1.00 96.81           C  
+ATOM    969  CG2 VAL A 132       2.081  11.350  -4.904  1.00 96.81           C  
+ATOM    970  N   SER A 133      -0.902  14.247  -2.553  1.00 97.27           N  
+ATOM    971  CA  SER A 133      -1.684  15.384  -2.082  1.00 97.27           C  
+ATOM    972  C   SER A 133      -2.727  14.906  -1.075  1.00 97.27           C  
+ATOM    973  CB  SER A 133      -2.367  16.078  -3.271  1.00 97.27           C  
+ATOM    974  O   SER A 133      -2.875  13.706  -0.846  1.00 97.27           O  
+ATOM    975  OG  SER A 133      -3.466  15.337  -3.781  1.00 97.27           O  
+ATOM    976  N   ASP A 134      -3.532  15.828  -0.547  1.00 97.85           N  
+ATOM    977  CA  ASP A 134      -4.774  15.451   0.127  1.00 97.85           C  
+ATOM    978  C   ASP A 134      -5.661  14.666  -0.852  1.00 97.85           C  
+ATOM    979  CB  ASP A 134      -5.511  16.692   0.653  1.00 97.85           C  
+ATOM    980  O   ASP A 134      -5.862  15.101  -1.993  1.00 97.85           O  
+ATOM    981  CG  ASP A 134      -4.764  17.462   1.748  1.00 97.85           C  
+ATOM    982  OD1 ASP A 134      -3.760  16.944   2.289  1.00 97.85           O  
+ATOM    983  OD2 ASP A 134      -5.228  18.582   2.059  1.00 97.85           O  
+ATOM    984  N   VAL A 135      -6.160  13.504  -0.425  1.00 98.07           N  
+ATOM    985  CA  VAL A 135      -6.908  12.562  -1.274  1.00 98.07           C  
+ATOM    986  C   VAL A 135      -8.220  12.141  -0.627  1.00 98.07           C  
+ATOM    987  CB  VAL A 135      -6.091  11.312  -1.675  1.00 98.07           C  
+ATOM    988  O   VAL A 135      -8.335  12.030   0.594  1.00 98.07           O  
+ATOM    989  CG1 VAL A 135      -5.014  11.631  -2.711  1.00 98.07           C  
+ATOM    990  CG2 VAL A 135      -5.441  10.610  -0.483  1.00 98.07           C  
+ATOM    991  N   THR A 136      -9.223  11.870  -1.461  1.00 98.25           N  
+ATOM    992  CA  THR A 136     -10.474  11.218  -1.045  1.00 98.25           C  
+ATOM    993  C   THR A 136     -10.658   9.925  -1.824  1.00 98.25           C  
+ATOM    994  CB  THR A 136     -11.687  12.134  -1.231  1.00 98.25           C  
+ATOM    995  O   THR A 136     -10.713   9.961  -3.053  1.00 98.25           O  
+ATOM    996  CG2 THR A 136     -12.981  11.516  -0.704  1.00 98.25           C  
+ATOM    997  OG1 THR A 136     -11.481  13.335  -0.524  1.00 98.25           O  
+ATOM    998  N   ILE A 137     -10.770   8.794  -1.127  1.00 98.15           N  
+ATOM    999  CA  ILE A 137     -10.848   7.453  -1.721  1.00 98.15           C  
+ATOM   1000  C   ILE A 137     -12.115   6.751  -1.223  1.00 98.15           C  
+ATOM   1001  CB  ILE A 137      -9.566   6.638  -1.412  1.00 98.15           C  
+ATOM   1002  O   ILE A 137     -12.339   6.636  -0.019  1.00 98.15           O  
+ATOM   1003  CG1 ILE A 137      -8.301   7.361  -1.938  1.00 98.15           C  
+ATOM   1004  CG2 ILE A 137      -9.665   5.225  -2.021  1.00 98.15           C  
+ATOM   1005  CD1 ILE A 137      -6.979   6.732  -1.486  1.00 98.15           C  
+ATOM   1006  N   GLU A 138     -12.942   6.256  -2.141  1.00 97.71           N  
+ATOM   1007  CA  GLU A 138     -13.987   5.281  -1.814  1.00 97.71           C  
+ATOM   1008  C   GLU A 138     -13.362   3.901  -1.649  1.00 97.71           C  
+ATOM   1009  CB  GLU A 138     -15.074   5.228  -2.894  1.00 97.71           C  
+ATOM   1010  O   GLU A 138     -12.675   3.424  -2.547  1.00 97.71           O  
+ATOM   1011  CG  GLU A 138     -16.048   6.406  -2.812  1.00 97.71           C  
+ATOM   1012  CD  GLU A 138     -17.186   6.332  -3.843  1.00 97.71           C  
+ATOM   1013  OE1 GLU A 138     -18.056   7.229  -3.819  1.00 97.71           O  
+ATOM   1014  OE2 GLU A 138     -17.132   5.539  -4.811  1.00 97.71           O  
+ATOM   1015  N   THR A 139     -13.601   3.255  -0.514  1.00 97.28           N  
+ATOM   1016  CA  THR A 139     -13.034   1.937  -0.204  1.00 97.28           C  
+ATOM   1017  C   THR A 139     -14.076   0.835  -0.396  1.00 97.28           C  
+ATOM   1018  CB  THR A 139     -12.429   1.934   1.206  1.00 97.28           C  
+ATOM   1019  O   THR A 139     -15.247   1.124  -0.642  1.00 97.28           O  
+ATOM   1020  CG2 THR A 139     -11.402   3.054   1.384  1.00 97.28           C  
+ATOM   1021  OG1 THR A 139     -13.421   2.119   2.185  1.00 97.28           O  
+ATOM   1022  N   HIS A 140     -13.661  -0.432  -0.277  1.00 96.39           N  
+ATOM   1023  CA  HIS A 140     -14.538  -1.603  -0.441  1.00 96.39           C  
+ATOM   1024  C   HIS A 140     -15.145  -1.709  -1.851  1.00 96.39           C  
+ATOM   1025  CB  HIS A 140     -15.606  -1.662   0.670  1.00 96.39           C  
+ATOM   1026  O   HIS A 140     -16.324  -2.018  -2.011  1.00 96.39           O  
+ATOM   1027  CG  HIS A 140     -15.077  -1.596   2.078  1.00 96.39           C  
+ATOM   1028  CD2 HIS A 140     -15.161  -2.594   3.008  1.00 96.39           C  
+ATOM   1029  ND1 HIS A 140     -14.502  -0.509   2.702  1.00 96.39           N  
+ATOM   1030  CE1 HIS A 140     -14.233  -0.849   3.973  1.00 96.39           C  
+ATOM   1031  NE2 HIS A 140     -14.637  -2.104   4.205  1.00 96.39           N  
+ATOM   1032  N   LYS A 141     -14.343  -1.427  -2.885  1.00 96.60           N  
+ATOM   1033  CA  LYS A 141     -14.799  -1.389  -4.283  1.00 96.60           C  
+ATOM   1034  C   LYS A 141     -14.374  -2.602  -5.115  1.00 96.60           C  
+ATOM   1035  CB  LYS A 141     -14.393  -0.053  -4.928  1.00 96.60           C  
+ATOM   1036  O   LYS A 141     -14.487  -2.563  -6.334  1.00 96.60           O  
+ATOM   1037  CG  LYS A 141     -14.998   1.193  -4.269  1.00 96.60           C  
+ATOM   1038  CD  LYS A 141     -16.530   1.125  -4.307  1.00 96.60           C  
+ATOM   1039  CE  LYS A 141     -17.134   2.518  -4.171  1.00 96.60           C  
+ATOM   1040  NZ  LYS A 141     -18.414   2.601  -4.901  1.00 96.60           N  
+ATOM   1041  N   GLU A 142     -13.924  -3.684  -4.479  1.00 96.32           N  
+ATOM   1042  CA  GLU A 142     -13.527  -4.922  -5.170  1.00 96.32           C  
+ATOM   1043  C   GLU A 142     -14.646  -5.481  -6.065  1.00 96.32           C  
+ATOM   1044  CB  GLU A 142     -13.081  -5.962  -4.127  1.00 96.32           C  
+ATOM   1045  O   GLU A 142     -14.396  -5.836  -7.216  1.00 96.32           O  
+ATOM   1046  CG  GLU A 142     -12.740  -7.315  -4.775  1.00 96.32           C  
+ATOM   1047  CD  GLU A 142     -11.996  -8.269  -3.833  1.00 96.32           C  
+ATOM   1048  OE1 GLU A 142     -11.043  -8.932  -4.314  1.00 96.32           O  
+ATOM   1049  OE2 GLU A 142     -12.308  -8.303  -2.623  1.00 96.32           O  
+ATOM   1050  N   GLU A 143     -15.886  -5.507  -5.571  1.00 94.50           N  
+ATOM   1051  CA  GLU A 143     -17.037  -5.992  -6.344  1.00 94.50           C  
+ATOM   1052  C   GLU A 143     -17.321  -5.120  -7.574  1.00 94.50           C  
+ATOM   1053  CB  GLU A 143     -18.293  -6.039  -5.459  1.00 94.50           C  
+ATOM   1054  O   GLU A 143     -17.719  -5.636  -8.608  1.00 94.50           O  
+ATOM   1055  CG  GLU A 143     -18.186  -7.036  -4.293  1.00 94.50           C  
+ATOM   1056  CD  GLU A 143     -19.479  -7.151  -3.462  1.00 94.50           C  
+ATOM   1057  OE1 GLU A 143     -19.496  -7.995  -2.535  1.00 94.50           O  
+ATOM   1058  OE2 GLU A 143     -20.454  -6.411  -3.736  1.00 94.50           O  
+ATOM   1059  N   GLU A 144     -17.087  -3.807  -7.491  1.00 94.46           N  
+ATOM   1060  CA  GLU A 144     -17.305  -2.878  -8.607  1.00 94.46           C  
+ATOM   1061  C   GLU A 144     -16.183  -2.972  -9.654  1.00 94.46           C  
+ATOM   1062  CB  GLU A 144     -17.495  -1.458  -8.031  1.00 94.46           C  
+ATOM   1063  O   GLU A 144     -16.438  -2.761 -10.833  1.00 94.46           O  
+ATOM   1064  CG  GLU A 144     -17.913  -0.390  -9.064  1.00 94.46           C  
+ATOM   1065  CD  GLU A 144     -18.100   1.020  -8.460  1.00 94.46           C  
+ATOM   1066  OE1 GLU A 144     -18.119   2.007  -9.229  1.00 94.46           O  
+ATOM   1067  OE2 GLU A 144     -18.266   1.162  -7.219  1.00 94.46           O  
+ATOM   1068  N   LEU A 145     -14.961  -3.332  -9.244  1.00 92.47           N  
+ATOM   1069  CA  LEU A 145     -13.836  -3.560 -10.158  1.00 92.47           C  
+ATOM   1070  C   LEU A 145     -13.966  -4.881 -10.934  1.00 92.47           C  
+ATOM   1071  CB  LEU A 145     -12.540  -3.538  -9.326  1.00 92.47           C  
+ATOM   1072  O   LEU A 145     -13.418  -5.020 -12.024  1.00 92.47           O  
+ATOM   1073  CG  LEU A 145     -11.241  -3.708 -10.137  1.00 92.47           C  
+ATOM   1074  CD1 LEU A 145     -11.015  -2.586 -11.148  1.00 92.47           C  
+ATOM   1075  CD2 LEU A 145     -10.056  -3.706  -9.173  1.00 92.47           C  
+ATOM   1076  N   THR A 146     -14.643  -5.869 -10.347  1.00 89.15           N  
+ATOM   1077  CA  THR A 146     -14.746  -7.238 -10.883  1.00 89.15           C  
+ATOM   1078  C   THR A 146     -16.092  -7.555 -11.542  1.00 89.15           C  
+ATOM   1079  CB  THR A 146     -14.414  -8.279  -9.802  1.00 89.15           C  
+ATOM   1080  O   THR A 146     -16.254  -8.661 -12.066  1.00 89.15           O  
+ATOM   1081  CG2 THR A 146     -12.952  -8.206  -9.357  1.00 89.15           C  
+ATOM   1082  OG1 THR A 146     -15.195  -8.107  -8.642  1.00 89.15           O  
+ATOM   1083  N   ALA A 147     -17.037  -6.611 -11.517  1.00 87.34           N  
+ATOM   1084  CA  ALA A 147     -18.352  -6.709 -12.156  1.00 87.34           C  
+ATOM   1085  C   ALA A 147     -18.301  -6.389 -13.658  1.00 87.34           C  
+ATOM   1086  CB  ALA A 147     -19.326  -5.786 -11.410  1.00 87.34           C  
+ATOM   1087  O   ALA A 147     -19.040  -7.071 -14.409  1.00 87.34           O  
+ATOM   1088  OXT ALA A 147     -17.582  -5.437 -14.021  1.00 87.34           O  
+TER    1089      ALA A 147                                                      
+ENDMDL                                                                          
+END                                                                             
\ No newline at end of file
diff --git a/utils/jalviewjs/site-resources/examples/AF-P00221-F1-predicted_aligned_error_v4.json b/utils/jalviewjs/site-resources/examples/AF-P00221-F1-predicted_aligned_error_v4.json
new file mode 100644 (file)
index 0000000..fb021a8
--- /dev/null
@@ -0,0 +1 @@
+[{"predicted_aligned_error":[[0,1,4,4,6,7,9,14,15,16,16,15,14,15,18,17,20,18,19,19,21,21,21,24,25,25,24,26,27,26,27,28,30,29,29,29,29,29,29,29,29,30,30,30,30,30,30,30,29,31,30,31,31,31,31,30,30,30,29,30,30,30,30,30,30,31,30,30,31,31,30,31,30,31,30,31,31,30,31,31,30,31,30,30,31,30,30,28,28,31,31,31,30,29,31,30,30,31,31,31,31,31,30,31,30,31,31,30,30,31,30,30,30,31,30,31,30,30,31,30,31,31,30,31,30,31,30,31,30,31,31,31,30,31,30,30,31,30,30,30,30,31,29,30,31,29,30],[3,0,1,3,4,6,6,8,11,13,14,15,12,14,17,16,18,19,19,19,19,21,22,24,26,24,25,26,26,27,29,28,30,29,29,29,30,30,30,31,30,31,31,31,31,31,31,31,30,31,31,31,31,31,31,30,31,30,31,30,30,30,30,30,30,31,30,31,31,31,30,30,30,31,31,30,31,31,30,30,31,31,30,30,31,30,31,29,28,31,30,31,29,28,31,30,31,31,31,31,31,30,30,31,31,31,31,31,30,31,30,30,31,31,30,30,30,31,31,31,31,31,31,31,30,31,30,30,31,30,30,30,30,31,31,30,31,30,31,31,31,31,30,30,31,29,29],[6,3,0,1,3,5,5,6,8,10,13,13,12,14,17,16,18,19,20,21,19,21,22,23,26,24,24,27,26,27,28,28,30,29,29,30,30,30,30,30,29,30,30,31,31,31,31,31,30,31,31,31,31,31,31,31,31,30,30,30,30,31,30,30,30,31,31,31,31,31,30,31,31,31,31,31,31,31,31,30,31,31,31,30,31,30,31,30,28,31,30,31,29,28,31,30,31,31,31,31,31,30,30,31,30,31,30,31,30,31,30,30,31,31,30,30,30,30,31,31,31,31,31,31,30,31,30,30,31,31,31,31,31,31,31,30,31,30,31,31,31,31,30,30,31,30,30],[6,6,3,0,1,4,4,5,5,7,10,10,11,12,16,16,17,17,17,18,17,18,18,20,22,22,21,24,25,26,27,26,29,28,28,29,29,30,29,30,28,30,29,30,30,30,30,30,30,31,30,30,30,31,31,31,30,30,30,29,30,30,30,30,30,30,30,30,30,30,29,30,30,30,31,30,30,30,30,30,30,30,30,29,31,30,30,28,26,31,28,31,27,28,31,30,31,31,31,30,31,30,29,30,30,30,30,30,30,30,30,29,30,31,29,30,30,30,31,30,30,30,30,31,30,31,30,30,31,30,30,30,30,30,30,30,31,30,31,31,31,30,30,30,31,29,29],[6,6,7,3,0,1,3,4,5,5,7,9,10,10,13,14,17,16,17,18,16,18,18,21,22,21,21,24,24,26,27,26,28,27,27,28,30,30,29,30,27,29,28,30,29,30,30,30,30,31,30,30,30,30,31,31,30,30,30,29,30,30,29,30,30,30,30,30,30,30,29,30,29,30,30,30,30,30,30,30,30,29,30,29,31,30,30,28,26,31,27,30,26,28,31,30,30,30,30,30,30,30,29,30,29,30,30,30,30,30,30,29,30,31,29,30,30,30,31,30,30,30,30,30,30,30,29,29,31,30,30,30,30,30,30,30,30,29,30,30,30,30,29,30,31,29,29],[7,6,7,7,3,0,1,4,4,6,5,7,9,9,12,13,16,16,17,17,16,17,18,20,22,21,21,24,24,26,27,27,28,27,27,28,29,30,29,30,27,29,28,30,29,30,30,30,30,30,30,30,30,30,31,30,30,30,30,29,30,30,30,30,30,30,30,30,30,30,29,30,29,31,30,30,30,30,30,30,30,29,30,29,31,30,30,28,25,31,27,30,26,28,31,30,30,31,31,30,30,30,29,30,29,30,30,30,30,30,30,29,30,31,29,30,30,30,31,30,30,30,30,30,30,31,29,30,31,30,30,30,30,30,30,30,30,30,30,31,30,30,30,30,31,29,29],[8,5,6,7,7,3,0,1,5,5,5,5,7,8,11,13,15,16,17,17,15,17,18,19,21,20,21,23,24,26,27,26,28,27,26,28,29,29,29,30,28,29,28,30,29,29,30,30,30,31,30,30,30,31,30,30,30,31,30,29,30,30,30,30,30,30,30,30,30,30,29,30,29,31,30,30,30,30,31,30,30,29,30,29,31,30,30,29,26,31,28,30,27,29,31,30,30,31,31,31,31,30,30,31,30,30,30,30,30,30,30,29,30,31,30,30,30,30,31,30,31,30,30,30,30,31,29,30,31,30,30,31,30,31,30,30,31,30,30,30,31,30,29,30,31,29,30],[10,7,6,5,6,5,3,0,1,4,5,6,6,7,11,12,15,19,18,16,17,17,19,19,21,20,21,24,24,26,27,26,27,26,26,28,29,29,29,30,28,29,29,29,30,29,30,30,29,30,30,30,30,31,30,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,31,30,30,30,30,30,30,30,30,30,30,31,30,30,30,27,31,27,31,28,29,31,30,31,30,31,31,31,30,30,31,30,30,30,30,30,30,30,29,30,31,30,30,30,30,30,31,31,31,30,31,29,31,30,29,30,30,31,30,30,30,31,30,31,30,30,30,31,30,30,30,31,29,30],[13,9,7,5,5,6,6,3,0,2,4,6,5,6,9,10,12,12,16,15,17,16,17,18,20,20,21,23,23,25,27,26,27,26,26,27,29,29,29,29,27,29,29,30,29,30,30,30,30,30,30,30,30,31,30,30,31,31,30,30,30,31,30,30,30,30,30,30,30,30,29,30,30,30,30,30,30,30,31,30,30,30,30,30,31,30,30,29,27,31,28,31,28,29,30,30,31,30,31,31,31,31,30,31,30,31,30,30,30,30,29,29,31,31,30,31,31,31,30,31,31,31,30,31,29,31,30,28,30,30,30,31,30,31,31,30,31,31,30,31,31,30,30,31,31,29,30],[15,12,9,7,5,6,6,5,3,0,1,4,4,5,7,8,10,11,14,14,15,15,17,18,21,20,21,22,23,24,26,26,28,27,27,28,29,29,30,30,28,29,29,30,30,30,30,30,30,30,30,30,30,31,31,31,31,31,30,30,30,31,30,30,30,30,30,30,30,30,30,30,30,31,31,30,30,30,30,30,30,30,31,30,31,30,30,30,27,31,28,31,29,29,31,30,31,31,31,31,31,31,30,31,30,31,30,30,30,30,31,29,31,31,30,30,31,31,31,30,31,31,30,31,30,31,29,30,30,30,31,30,31,31,31,31,31,30,31,31,31,31,30,31,31,30,29],[19,15,12,10,8,6,6,7,6,3,0,2,5,5,7,7,10,12,14,15,17,14,17,18,20,20,20,23,22,23,25,24,26,24,24,26,29,28,29,29,27,29,29,29,29,30,30,29,30,30,30,30,31,31,30,31,30,31,30,30,31,31,30,30,31,30,30,30,31,30,30,30,30,30,30,30,30,30,31,30,30,30,30,30,31,30,30,30,28,31,28,31,28,30,30,31,31,31,31,31,30,31,30,31,30,30,30,30,30,30,30,29,31,31,30,31,31,30,30,31,31,31,31,31,29,31,30,29,30,31,30,30,30,31,30,31,30,31,30,31,31,30,30,31,31,30,30],[21,17,14,12,10,7,6,7,7,6,3,0,1,3,5,6,7,7,11,12,15,15,16,18,20,18,19,21,21,22,24,25,26,25,25,27,29,28,29,29,27,29,29,29,30,30,30,30,30,31,30,30,30,31,30,31,30,31,31,30,30,31,30,30,30,30,30,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,31,30,31,30,30,30,28,31,27,31,28,29,31,30,31,31,31,30,31,31,30,31,29,31,29,31,29,29,31,29,30,31,30,30,30,31,31,30,31,31,30,31,30,30,30,30,30,30,30,30,30,30,30,31,31,30,31,30,31,31,30,31,31,30,30],[21,17,15,15,12,10,8,6,6,7,7,3,0,1,5,5,6,7,9,12,12,13,15,17,18,18,18,20,20,21,23,22,25,23,22,26,28,28,29,28,27,28,27,28,28,29,28,29,29,30,30,30,30,31,30,31,30,31,30,30,30,31,30,30,30,30,30,30,30,30,28,29,30,30,30,29,30,30,30,29,30,30,30,29,31,30,30,29,27,31,27,30,28,29,31,30,30,30,31,30,30,30,29,30,29,30,29,30,29,29,30,28,31,31,30,30,30,30,30,30,31,30,30,30,29,30,29,29,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,31,30,30,30],[22,19,16,16,14,13,10,8,6,7,6,9,4,0,1,5,5,5,7,9,9,11,12,15,17,17,16,17,19,20,23,21,24,23,22,25,29,27,29,29,26,28,27,28,29,29,29,29,30,30,30,30,30,31,30,31,30,31,31,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,29,30,30,30,30,30,29,30,29,30,30,30,30,28,31,26,30,28,30,31,30,30,30,31,30,30,31,30,31,29,30,29,30,30,28,30,28,31,31,30,30,30,30,31,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,31,31,30,31],[26,23,21,22,20,17,14,14,9,7,7,6,7,3,0,1,4,5,6,8,8,10,12,16,20,17,16,18,19,20,21,20,23,23,21,26,27,28,28,28,27,28,27,29,28,30,29,28,30,29,30,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,29,29,29,28,29,30,30,30,28,29,30,30,30,29,30,30,29,30,30,30,30,28,30,26,30,28,29,30,31,30,30,31,30,30,31,30,30,29,30,29,30,29,28,30,28,30,31,30,30,30,30,30,30,30,30,30,30,29,30,29,29,30,29,30,30,30,30,29,30,30,30,30,30,30,31,30,30,30,30,30],[25,24,21,22,21,20,17,16,13,8,7,7,7,6,3,0,1,4,5,6,6,9,10,12,17,17,17,18,18,19,19,20,24,21,20,25,26,27,27,28,26,28,27,28,28,29,29,29,29,30,30,29,30,30,30,30,30,31,30,30,30,30,30,30,30,30,30,29,29,30,28,29,30,30,30,28,29,30,30,29,29,29,30,30,30,30,30,30,29,31,27,30,29,30,30,30,30,31,31,31,30,31,30,30,30,30,29,30,30,29,30,29,31,31,30,31,31,30,31,31,31,31,30,30,30,30,29,30,30,30,30,30,29,30,30,30,30,30,30,30,30,31,30,30,31,30,30],[26,23,21,22,22,20,17,17,15,10,9,6,6,6,4,2,0,1,3,4,6,6,9,11,15,15,15,17,18,19,18,20,22,21,20,25,27,25,26,28,25,28,26,28,27,28,29,29,29,30,30,30,30,31,30,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,29,30,31,30,30,30,29,31,30,31,30,30,30,28,30,28,30,30,29,30,30,30,30,30,30,30,31,30,30,30,31,30,30,30,29,31,29,30,31,30,30,30,31,31,30,30,30,30,30,30,30,29,29,30,30,30,30,30,30,30,30,30,30,30,31,30,30,30,30,31,30,30],[27,25,23,25,23,23,21,20,19,13,11,8,5,6,4,5,2,0,1,4,4,6,6,8,11,13,13,18,18,19,18,18,22,20,20,24,27,25,27,26,24,27,27,28,27,29,29,29,29,30,30,30,30,31,30,31,30,31,30,30,30,31,30,30,30,30,30,29,30,30,29,29,30,30,30,30,30,30,31,30,30,30,30,30,31,30,30,30,29,31,27,30,29,30,31,30,30,30,31,31,31,31,30,31,30,31,30,31,30,29,30,29,31,31,31,31,31,31,31,31,31,31,31,30,30,30,30,29,30,31,30,30,30,31,30,31,30,31,30,31,31,31,30,30,30,30,31],[25,23,22,23,21,20,18,18,18,14,13,11,8,6,5,4,4,1,0,1,3,4,5,6,9,11,13,14,16,18,18,19,21,20,20,24,26,25,27,27,25,27,26,28,27,28,28,29,29,30,30,29,29,30,30,30,30,31,30,30,30,31,30,30,30,30,30,30,30,29,28,30,30,30,30,30,30,30,30,29,30,29,31,30,30,30,30,30,28,30,28,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,30,29,30,30,30,31,30,30,31,31,31,30,31,30,30,30,29,30,29,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30],[27,25,24,24,25,24,23,21,22,17,16,14,9,8,6,6,5,5,3,0,1,3,5,7,8,10,12,12,16,14,18,17,21,20,19,23,25,25,25,26,23,27,25,28,26,28,28,28,30,30,30,30,30,31,31,30,31,30,30,30,30,31,31,30,31,30,30,30,30,30,28,30,31,31,31,29,30,30,30,29,30,30,30,30,31,31,31,31,30,30,27,30,30,30,31,31,31,31,31,31,31,30,30,31,30,31,29,31,30,29,31,30,30,31,31,31,31,31,31,31,30,31,31,31,31,31,30,29,30,30,30,29,30,30,30,30,31,30,31,31,31,31,30,30,31,31,30],[26,25,25,26,25,24,23,22,22,20,19,17,14,12,7,7,6,5,5,3,0,1,5,6,8,8,10,11,16,17,17,21,22,20,21,24,26,26,26,25,23,27,26,28,27,29,29,30,30,30,30,30,30,31,30,31,30,31,30,30,30,31,30,31,31,30,30,30,31,30,29,30,30,30,30,30,31,31,31,30,31,31,31,30,31,31,30,31,29,30,29,31,30,30,31,31,31,31,31,31,30,31,30,31,30,30,30,30,30,29,30,30,30,31,31,31,31,31,30,31,31,31,31,30,30,30,30,30,31,30,30,30,30,30,30,31,30,31,30,31,31,31,30,30,31,31,31],[26,24,23,25,25,23,24,22,21,20,18,17,14,12,11,8,6,5,5,5,1,0,1,4,6,7,8,8,12,14,15,17,20,19,18,23,25,23,25,25,23,27,27,27,27,28,28,28,29,30,29,28,29,31,30,31,30,31,30,30,30,31,30,31,31,30,30,29,30,29,28,30,30,30,30,29,30,30,30,29,31,30,31,30,31,30,30,30,29,31,29,30,30,30,30,30,30,30,30,31,30,30,30,30,30,30,29,30,30,29,30,30,30,31,31,30,30,31,30,30,31,30,30,30,29,30,28,29,29,30,30,29,30,30,30,31,30,31,30,30,30,30,30,30,30,30,30],[28,26,26,26,24,24,23,22,22,20,19,17,16,14,14,10,6,6,5,4,4,1,0,1,4,6,8,7,10,12,13,15,18,17,16,22,24,23,24,23,23,25,25,27,26,28,28,28,29,30,29,29,29,30,30,31,30,31,30,30,30,31,31,31,31,30,30,29,30,29,28,30,30,30,30,29,30,30,30,29,31,30,31,30,31,30,30,30,30,30,29,30,30,31,30,30,30,31,31,31,30,31,30,30,30,30,30,30,30,29,30,30,30,31,31,30,30,31,30,30,31,30,31,30,30,30,30,29,29,30,30,30,30,30,30,31,30,31,30,31,31,30,30,30,31,31,31],[28,28,26,28,27,27,26,24,24,22,23,20,20,19,18,15,10,7,6,6,6,7,3,0,1,6,7,7,7,9,11,15,16,16,16,21,24,24,24,24,23,26,24,27,25,27,28,28,28,30,29,29,29,31,29,31,30,31,30,30,30,31,30,31,31,30,30,29,30,29,26,29,28,30,29,28,30,30,30,30,30,30,31,30,31,31,29,30,30,30,28,30,30,31,31,30,31,31,31,31,30,31,30,31,30,29,29,30,30,28,30,29,30,30,30,30,31,31,30,30,31,30,30,30,29,30,30,29,30,29,30,29,30,30,29,31,30,31,30,31,31,31,30,31,30,30,30],[28,28,27,29,29,28,27,27,27,24,25,21,21,20,21,19,13,10,8,7,7,7,5,2,0,1,7,6,6,8,8,12,14,14,14,19,22,22,23,22,21,23,22,25,24,27,27,27,27,29,28,29,29,30,29,30,30,31,30,30,30,30,30,30,31,30,29,28,29,29,27,29,30,30,30,28,30,30,30,30,30,30,30,30,31,30,29,30,30,30,28,30,30,30,30,30,30,30,31,31,30,30,30,30,29,30,29,30,29,28,30,29,31,31,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,29,29,30,30,30,30,30,29,30,30,30,30,30,31,30,30],[29,29,28,29,29,28,28,28,28,26,28,24,23,23,23,21,15,14,12,8,8,7,7,7,4,0,1,5,5,6,6,8,10,11,12,17,20,21,22,21,20,22,23,24,25,27,27,28,29,30,30,29,30,30,29,31,30,31,30,30,30,31,30,30,31,30,29,29,30,30,28,30,30,30,30,29,30,30,30,29,30,30,30,30,31,31,29,30,30,30,28,30,30,30,30,31,31,31,31,31,30,30,30,31,30,30,30,31,30,29,30,30,30,31,30,30,31,31,31,30,31,30,30,30,30,30,30,29,30,30,30,29,29,30,29,30,30,30,30,30,31,30,30,30,31,30,31],[30,30,29,30,29,29,29,29,28,27,28,25,24,26,23,23,18,19,14,11,8,7,7,6,7,4,0,1,5,6,6,7,9,11,12,15,18,20,20,21,20,22,23,24,25,26,27,28,29,30,29,29,29,30,30,30,30,31,30,30,30,31,30,30,30,30,28,30,30,29,28,30,30,30,30,29,30,30,30,30,31,30,30,30,31,30,29,31,30,30,28,30,30,30,30,30,31,31,31,30,30,30,30,30,29,30,30,30,30,29,30,30,30,31,30,29,30,31,30,30,30,30,30,30,30,30,30,29,30,30,29,29,29,29,29,30,30,30,30,30,31,31,31,31,31,30,31],[30,30,30,30,31,30,30,29,29,28,28,26,27,25,25,25,20,22,16,12,10,8,6,7,7,9,4,0,1,5,5,7,8,10,12,17,17,19,20,21,20,22,23,24,24,26,27,28,28,30,30,30,30,30,30,31,30,31,31,30,30,31,30,30,31,30,30,30,30,30,27,30,30,31,30,29,30,30,30,30,30,30,30,30,31,30,30,30,30,31,29,30,30,30,31,31,30,31,30,31,30,31,31,30,30,30,30,31,30,29,31,30,31,31,30,30,31,31,30,30,30,31,30,30,30,31,29,29,30,30,30,30,30,30,30,31,30,31,30,30,31,30,30,30,30,30,31],[29,29,28,29,29,28,27,26,27,26,26,24,24,24,23,23,19,20,17,15,12,10,8,7,7,6,6,2,0,1,4,6,7,9,9,14,17,18,18,19,20,21,24,24,23,25,27,28,28,30,29,27,30,30,29,31,30,31,30,30,30,31,30,30,30,30,29,29,29,29,28,29,30,29,30,29,29,30,30,28,30,29,30,30,30,30,29,30,29,30,28,29,30,30,30,30,29,30,30,30,30,30,31,30,30,30,29,30,30,30,30,30,31,30,30,30,30,30,30,30,31,30,30,29,29,30,28,28,29,30,30,28,30,30,29,30,30,31,29,30,30,30,30,30,30,30,30],[30,29,29,30,30,30,30,29,29,28,27,27,26,26,26,24,23,23,20,19,14,13,11,7,7,7,6,5,3,0,2,6,6,7,7,11,14,17,17,17,18,20,21,22,23,24,26,27,27,30,28,29,30,30,30,31,31,31,31,30,30,31,30,31,31,31,29,30,30,30,29,30,30,30,31,30,30,30,31,30,31,30,31,31,31,30,30,31,30,31,29,30,30,30,31,30,31,31,30,31,30,30,30,30,30,30,30,31,30,30,31,30,31,31,31,30,31,31,30,30,30,31,30,30,30,30,30,30,29,30,29,28,30,30,30,31,30,30,30,31,31,31,30,31,31,30,30],[28,29,28,29,29,29,28,27,28,27,25,25,25,25,24,24,21,22,19,17,15,14,12,11,8,8,7,6,5,2,0,1,4,7,7,8,11,14,15,15,16,19,19,21,21,23,26,27,29,30,29,29,31,31,30,31,30,31,31,31,31,31,31,31,31,31,30,30,30,30,29,30,31,31,31,30,31,31,31,30,31,31,31,31,31,31,30,30,30,31,29,31,30,31,31,31,31,31,31,31,30,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,30,31,30,30,31,31,31,31,31,30,31,30,31,30,31,31,31,31,31,31,31,31],[30,30,29,30,30,30,30,30,30,28,29,27,28,28,28,27,24,26,22,20,17,18,18,15,14,8,7,7,7,6,2,0,1,5,6,8,8,11,13,13,16,19,20,21,21,23,26,25,27,29,28,28,30,30,29,30,30,31,30,30,30,31,30,31,30,30,29,29,29,29,28,29,30,30,30,30,30,30,31,30,31,30,30,31,31,30,30,30,30,31,30,30,30,30,30,31,30,31,31,31,29,30,30,31,30,29,29,30,31,30,31,31,31,31,31,31,31,31,30,31,30,30,30,30,30,31,30,30,30,29,30,28,29,30,29,30,29,30,30,30,30,30,30,30,31,31,31],[30,30,30,30,30,30,30,29,30,30,29,29,28,28,27,27,24,26,22,21,19,19,18,17,16,12,9,7,7,6,6,3,0,2,4,6,7,8,9,11,16,19,20,20,21,22,25,25,28,29,28,28,30,30,29,30,30,31,31,30,30,31,31,31,30,30,29,30,30,29,28,29,30,30,31,29,30,30,31,29,31,30,31,30,31,30,30,30,30,31,30,30,31,30,30,31,31,31,31,30,29,30,30,30,30,29,29,31,30,29,31,31,31,31,31,30,31,31,30,30,30,30,31,29,30,30,30,29,30,30,29,30,29,30,29,30,29,30,30,31,30,31,30,31,31,31,31],[30,31,30,31,31,31,31,30,31,30,30,29,30,29,30,28,27,29,25,23,21,21,20,21,21,17,13,10,8,7,7,6,3,0,1,5,7,7,8,9,13,16,20,19,20,21,23,25,26,29,28,28,29,30,29,30,31,31,31,30,31,31,31,31,30,31,29,30,29,29,27,30,31,30,31,29,30,30,31,30,31,31,31,31,31,30,30,30,30,31,29,31,30,30,31,31,30,31,30,30,30,31,30,31,30,30,29,31,30,29,31,30,31,31,31,31,31,31,30,30,31,31,31,29,31,30,30,29,30,29,30,29,30,29,29,30,29,30,31,31,31,31,30,30,31,31,31],[30,30,30,31,31,30,30,30,31,30,30,29,30,29,29,28,27,30,26,27,24,23,23,22,21,17,15,12,10,7,8,7,7,4,0,1,6,7,8,9,12,15,17,18,21,20,23,24,27,29,26,27,29,30,29,30,31,31,31,30,30,30,30,30,29,30,28,29,28,28,27,29,30,30,30,29,29,30,31,29,30,29,30,30,31,30,30,31,31,30,30,31,31,30,30,31,31,31,31,31,29,30,30,30,30,29,29,31,29,29,31,30,31,31,31,31,31,31,30,30,30,31,31,29,31,30,30,28,30,29,29,28,29,29,29,30,30,30,30,31,31,31,31,31,31,31,31],[31,30,30,31,31,31,31,31,31,31,31,30,30,30,30,30,28,29,26,25,23,24,24,24,24,21,17,15,12,9,8,7,6,6,3,0,1,5,7,7,9,12,14,16,18,17,21,22,25,28,25,27,28,29,29,30,30,30,30,30,30,30,30,30,30,30,29,29,27,28,25,29,29,30,30,28,28,30,30,28,30,29,30,30,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,29,29,28,30,30,28,31,30,31,31,30,30,30,31,30,30,30,30,30,29,30,30,30,29,29,27,29,28,29,29,29,30,30,30,30,30,30,30,30,30,30,30,30],[31,31,30,31,31,31,31,31,31,30,31,30,31,31,31,30,30,30,27,26,25,25,25,25,25,21,19,20,15,12,10,8,8,8,8,3,0,2,7,6,9,9,10,13,16,16,18,20,25,27,25,28,29,30,28,30,30,30,30,30,30,30,30,30,30,30,28,28,26,26,25,29,29,29,30,26,27,30,30,27,29,29,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,30,29,29,29,30,30,28,28,30,28,28,30,30,31,30,30,30,31,30,30,29,30,31,30,28,30,31,30,29,29,28,29,28,29,29,29,30,29,30,30,30,30,31,30,30,30,31,30],[30,30,30,31,31,31,31,31,31,30,31,30,30,30,30,30,29,30,28,27,27,27,26,27,27,24,22,21,19,17,14,11,9,9,8,8,3,0,2,7,6,7,8,11,15,16,18,19,24,27,25,26,28,29,27,30,29,30,30,29,30,30,30,29,29,29,28,29,26,25,24,27,28,27,29,26,27,28,29,25,28,28,29,29,30,30,28,29,29,29,28,29,29,29,29,29,30,29,29,29,27,29,29,29,28,27,27,30,28,27,30,29,30,30,30,29,30,30,28,29,29,30,30,26,29,28,29,27,27,26,27,26,28,28,27,29,27,29,30,30,30,30,30,30,30,30,29],[31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,29,30,27,28,26,26,26,28,29,25,24,24,20,20,16,15,11,9,7,8,8,3,0,2,8,6,7,9,11,12,14,15,19,24,22,26,25,26,27,28,29,29,30,28,29,29,27,29,28,29,26,27,24,24,22,26,28,27,28,27,25,28,29,27,28,29,29,30,29,28,29,30,29,29,28,29,29,28,29,30,26,29,29,28,27,28,27,28,27,28,24,28,28,26,29,29,30,29,30,29,29,30,29,28,28,28,29,28,28,29,26,27,27,25,27,25,25,25,26,28,28,28,29,28,29,29,30,30,29,30,30],[30,30,30,30,30,30,30,30,31,29,31,29,30,30,30,29,28,29,26,27,25,25,25,26,27,23,23,25,20,20,16,16,14,11,9,8,7,7,3,0,1,5,6,7,9,11,13,15,20,22,25,26,27,29,27,29,28,30,29,29,30,30,29,29,27,28,26,26,22,24,24,26,28,27,28,26,25,28,28,25,28,28,28,29,28,29,27,28,29,28,28,28,29,28,29,29,28,29,29,29,27,30,28,28,28,26,26,29,28,27,30,29,29,29,29,30,30,29,30,29,30,29,29,27,29,28,28,28,27,26,26,26,26,25,27,28,27,29,29,29,29,29,29,30,29,30,29],[31,30,30,31,31,30,30,31,31,30,31,30,30,30,30,30,28,30,28,27,27,27,27,29,29,25,25,27,23,22,21,21,17,13,11,11,9,7,7,3,0,2,7,6,8,10,12,13,18,23,21,23,24,25,24,28,27,29,29,29,29,29,28,26,27,27,25,26,21,22,22,25,27,25,27,25,23,27,29,25,28,28,28,29,28,29,27,29,29,28,28,28,28,29,28,29,28,28,27,28,26,28,26,26,26,24,24,28,28,26,29,28,29,29,29,30,29,29,27,28,29,28,28,24,27,26,28,24,26,25,24,24,24,24,24,26,24,28,27,29,28,29,30,29,29,30,30],[30,30,30,31,30,30,30,30,31,30,31,30,30,30,30,30,29,30,28,27,28,28,27,28,28,26,26,25,23,23,22,21,18,16,13,12,11,8,8,9,4,0,2,5,6,7,9,12,15,19,19,22,26,26,24,28,27,29,29,29,29,29,28,27,26,26,25,26,22,21,21,24,26,25,27,25,23,27,28,24,28,27,28,28,28,28,27,29,29,28,28,28,29,29,29,29,28,29,27,29,26,29,28,26,28,24,25,29,28,26,29,29,30,30,30,30,30,30,28,29,30,29,29,26,28,25,27,25,25,25,24,24,26,26,26,28,25,28,26,29,29,29,29,30,29,30,30],[31,30,30,31,31,31,31,31,31,31,31,30,31,31,31,30,30,30,30,28,29,28,28,29,29,28,27,27,24,23,23,22,20,19,15,16,14,10,9,8,6,3,0,2,6,7,9,11,13,16,19,20,23,26,25,28,28,29,29,29,29,29,28,27,26,27,24,25,21,20,21,22,27,25,28,25,22,26,29,26,27,28,28,29,29,29,27,30,30,29,28,28,29,29,29,29,29,28,27,29,26,28,28,25,27,24,24,28,28,26,29,29,30,30,29,29,30,30,28,28,29,28,29,24,28,25,28,26,26,24,24,23,26,25,25,26,24,28,27,29,28,29,30,29,29,30,29],[31,31,31,31,31,31,31,31,31,30,31,30,31,31,31,30,30,31,30,29,30,29,28,28,29,29,28,28,25,25,24,23,22,20,17,19,17,11,10,8,7,7,3,0,2,6,7,9,10,14,17,18,23,26,22,27,25,29,27,29,29,29,28,25,26,24,23,23,19,19,19,20,25,23,26,24,22,26,28,25,26,28,27,28,27,28,25,29,29,28,26,26,28,28,28,29,27,28,27,28,25,27,28,26,27,24,23,28,27,25,28,28,29,29,29,30,29,29,26,28,29,28,29,26,27,27,27,25,26,23,23,22,24,24,25,26,23,28,27,28,28,28,29,29,28,29,29],[31,30,30,31,31,31,30,31,31,30,31,31,31,31,31,30,30,30,30,29,30,29,29,30,29,29,29,28,26,26,25,24,23,22,19,19,19,14,11,9,9,8,8,3,0,1,5,7,8,11,13,18,20,24,22,25,26,27,27,28,28,28,27,25,25,25,22,21,18,16,18,19,25,21,25,23,20,26,26,25,26,27,26,28,26,28,27,29,29,28,26,26,28,29,28,28,28,27,26,27,22,26,26,22,25,22,22,27,26,25,28,28,29,29,28,29,29,28,25,27,27,26,29,22,27,23,27,25,25,21,20,21,22,22,21,23,20,27,25,28,27,29,29,29,28,29,29],[31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,30,31,29,29,30,29,29,29,29,29,28,28,27,27,26,25,24,23,20,21,21,16,13,11,10,8,9,7,2,0,2,6,6,7,11,14,17,22,22,24,25,26,24,27,26,26,26,24,24,24,20,20,16,14,15,18,24,21,24,22,19,24,25,23,24,25,24,27,25,27,25,28,28,27,27,26,28,28,27,27,26,27,24,27,24,26,26,23,25,24,22,26,27,25,27,28,29,29,28,28,29,28,27,28,28,26,28,24,26,24,26,26,25,21,18,20,21,21,23,24,21,26,23,27,27,27,28,28,27,29,29],[31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,30,30,30,30,30,29,30,28,27,26,27,25,26,22,24,24,20,18,15,13,11,10,9,8,3,0,2,5,7,8,11,12,18,18,23,22,26,24,26,25,25,22,23,22,21,17,16,14,12,14,16,21,19,24,21,17,22,24,23,21,24,24,26,24,26,25,27,26,26,25,24,28,27,25,26,23,25,23,25,21,24,23,21,23,21,21,25,25,22,25,26,27,27,26,27,26,25,25,25,24,24,25,22,24,23,24,24,23,18,14,17,17,17,19,21,21,25,24,26,26,25,27,26,26,27,27],[31,30,30,31,31,31,31,31,31,30,31,31,31,31,31,30,30,30,30,29,29,29,29,29,30,28,28,29,27,26,27,27,25,26,22,24,25,20,20,16,15,12,11,10,7,7,3,0,2,4,6,9,11,15,14,21,21,24,21,25,25,23,22,21,21,17,14,14,10,10,12,14,19,16,20,19,15,20,22,20,19,22,21,25,23,25,25,25,26,25,25,24,26,26,25,26,24,24,22,25,22,23,22,19,19,17,18,23,21,21,24,26,27,25,27,26,27,25,25,27,26,23,24,22,22,23,23,22,19,17,14,15,16,15,18,21,22,23,20,25,24,24,27,26,24,27,27],[30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,29,29,29,29,29,29,29,29,28,27,27,28,27,27,24,26,25,22,24,18,18,14,12,10,10,7,6,2,0,1,4,7,9,12,13,17,20,22,20,22,23,22,21,21,16,16,14,11,9,6,9,11,17,14,20,17,14,17,20,19,17,20,21,23,20,22,21,22,24,21,20,20,21,23,20,22,22,20,18,22,20,21,18,15,16,16,15,19,19,19,19,20,22,20,22,23,22,21,22,24,22,20,20,19,19,20,22,19,17,12,11,12,12,13,14,18,19,20,18,22,21,18,21,22,22,21,23],[30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,30,29,29,28,28,28,29,29,28,28,28,27,26,26,27,26,26,24,27,26,23,23,21,19,17,14,13,9,9,7,6,3,0,2,4,6,8,10,14,14,18,16,19,19,18,15,14,11,11,10,7,9,4,7,10,12,11,15,12,12,13,18,15,13,20,13,19,16,19,20,23,24,20,21,18,21,22,21,21,21,19,16,20,13,16,11,12,11,10,12,15,17,18,16,21,21,18,23,21,22,20,18,22,22,16,19,14,15,15,20,16,11,13,9,9,7,7,10,10,12,17,14,20,20,19,20,20,19,21,21],[30,29,29,29,30,29,30,29,30,29,30,29,29,29,30,30,29,30,29,29,29,28,28,29,29,28,28,28,26,27,25,27,26,26,24,25,26,24,23,21,19,18,17,16,12,9,9,7,4,2,0,1,3,5,5,7,6,10,11,10,10,10,8,8,6,5,4,3,4,4,5,5,5,5,7,6,5,6,8,7,6,8,7,9,8,10,10,13,15,11,12,11,13,15,11,12,11,10,8,11,9,9,8,9,8,7,8,9,10,10,11,12,15,10,14,12,13,13,11,12,13,9,10,9,9,7,10,9,7,7,5,5,6,6,7,7,8,9,8,11,11,11,12,13,10,14,14],[29,29,29,29,29,29,29,29,29,29,29,30,29,28,29,29,28,29,28,28,28,27,26,27,27,28,28,26,26,25,25,25,25,24,23,24,23,22,21,20,18,18,17,16,13,10,7,7,5,3,1,0,1,1,2,3,3,4,5,6,7,6,4,4,3,3,2,2,2,2,2,3,3,3,4,4,3,4,4,4,3,5,4,5,4,5,5,7,7,4,6,5,7,7,7,7,5,5,5,4,4,4,3,4,3,3,4,4,5,5,5,6,7,6,6,7,6,6,6,7,6,5,5,5,4,4,5,4,4,3,2,3,2,2,2,3,4,4,4,5,6,6,5,7,6,6,6],[27,28,29,29,29,29,29,28,29,28,28,28,29,29,29,28,27,29,27,26,26,26,26,27,26,27,26,26,25,24,25,24,24,24,23,24,24,23,21,23,18,17,16,16,12,9,7,5,4,3,1,1,0,1,1,1,2,2,3,4,4,3,2,2,2,1,1,1,1,1,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3,4,3,4,4,4,3,4,4,4,3,4,3,3,3,2,2,2,2,2,2,2,2,3,3,3,3,4,4,3,4,4,4,4,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,3,3,3,4,4,4,4,5,4],[28,29,28,28,29,28,28,28,28,27,28,28,28,27,28,28,27,28,27,27,27,27,27,28,27,27,26,25,26,26,25,24,24,25,22,22,23,21,18,21,16,17,16,17,13,11,9,5,5,3,2,1,1,0,1,1,1,2,2,3,3,2,2,2,2,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,1,2,1,2,1,1,1,2,2,2,2,3,3,3,3,3,3],[27,27,27,28,28,28,28,28,28,28,28,27,28,27,28,28,27,29,27,28,27,27,26,27,26,27,26,26,25,25,24,23,25,24,21,23,23,22,21,22,20,19,18,18,13,11,10,6,5,3,2,1,1,1,0,1,1,1,2,2,3,2,2,1,1,1,1,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,2,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,2,2,2,3,3,3,3,3,4],[28,28,28,28,28,28,28,27,27,27,27,28,28,27,27,27,26,28,26,26,26,26,26,26,25,27,26,25,26,25,25,25,24,24,23,24,23,21,19,21,18,17,16,17,13,12,10,7,5,3,2,2,1,1,1,0,1,1,1,2,2,2,2,1,1,1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,2,3,3,2,2,2,2,2,1,1,1,2,2,2,2,2,2,3,3,2,3,3,2,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,2,2,2,3,3,3,3,3],[29,29,29,29,29,29,29,29,29,29,29,29,29,28,29,29,28,29,28,27,27,27,27,28,28,28,27,27,27,27,27,25,26,26,23,25,24,23,22,23,20,19,19,19,15,13,12,8,6,4,3,2,2,1,1,1,0,1,2,2,2,2,2,1,1,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,2,2,2,2,3,3,3,3,3],[27,27,28,28,29,28,28,28,28,28,27,28,28,28,28,28,27,27,27,26,26,27,26,27,26,27,26,26,26,25,25,25,25,25,23,25,24,23,22,22,20,19,18,18,15,13,11,8,6,5,4,3,2,2,1,1,1,0,1,1,2,2,2,1,2,2,2,2,2,3,3,3,2,2,2,2,2,2,2,3,2,3,2,2,2,2,2,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,1,1,1,2,2,2,3,3,3,3,4],[28,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,28,26,27,28,28,27,28,28,28,27,28,27,27,26,27,26,24,26,25,24,23,23,21,20,19,19,15,15,13,10,8,7,5,4,3,3,2,2,2,1,0,1,3,2,2,2,3,3,4,4,4,4,5,5,3,3,3,4,4,3,3,4,4,4,3,3,2,3,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,4,3,4,4,5,4,4,5,4,4,5,5,5,5,4,4,4,4,3,4,3,3,3,3,3,4,3,4,3,3,3,2,2,2,2,2,3,4,3,4,4,5,5],[28,28,28,29,29,29,29,29,29,29,29,28,29,29,29,28,28,28,28,27,27,27,27,27,27,28,27,27,27,27,26,26,27,25,24,26,25,25,24,24,22,21,20,20,17,16,14,11,9,7,6,6,5,5,4,3,2,1,1,0,1,2,3,3,3,4,5,5,6,5,5,6,4,3,3,4,4,4,4,5,5,5,4,5,3,3,4,5,5,5,5,4,5,5,4,4,3,3,3,3,4,4,4,5,5,4,5,4,5,5,4,5,4,4,5,5,5,5,5,5,6,4,4,4,3,4,3,4,4,5,4,5,5,4,3,3,3,3,2,3,4,5,4,5,4,5,5],[28,28,28,29,29,29,29,28,28,29,28,28,29,29,28,28,28,27,28,27,27,28,28,27,27,28,28,27,28,27,28,27,27,26,25,26,27,26,25,24,23,22,21,21,18,18,15,13,12,10,10,9,9,7,6,5,4,3,4,1,0,1,3,4,5,7,10,9,11,11,11,10,7,6,5,7,7,6,7,9,7,8,7,6,6,6,6,7,8,8,9,7,7,6,6,6,5,4,5,5,6,6,7,8,10,8,9,9,9,10,8,8,7,7,7,8,8,7,8,9,8,7,5,6,5,6,6,8,8,9,8,10,12,7,7,6,5,4,4,4,5,5,6,6,6,5,6],[29,29,29,29,29,29,29,29,29,29,29,29,30,29,29,29,29,29,28,28,27,28,27,28,28,28,28,28,28,28,27,27,27,27,25,26,26,26,25,24,22,22,20,20,18,17,14,12,9,10,7,6,6,4,4,3,2,3,2,2,1,0,1,3,2,4,5,6,7,7,8,8,6,5,5,7,5,5,6,7,5,7,5,5,5,6,7,8,10,10,10,9,9,10,8,7,6,7,8,7,7,6,7,8,7,6,8,8,8,10,10,9,9,8,9,8,9,9,7,7,8,7,7,7,7,7,8,9,6,6,7,7,7,5,5,4,4,5,4,5,7,5,5,7,7,7,8],[28,28,28,29,29,28,29,28,28,28,28,28,28,28,29,29,28,29,28,28,27,28,27,28,28,28,27,28,27,26,27,27,26,26,25,25,26,24,23,23,21,21,20,19,17,15,13,10,8,7,7,4,4,3,2,3,2,2,3,2,3,1,0,1,2,2,4,3,5,5,5,5,4,4,4,5,3,4,4,4,3,4,3,4,4,5,5,7,6,7,7,5,6,6,6,6,4,4,5,5,4,4,5,5,5,4,6,5,7,7,6,6,7,7,7,7,7,7,6,6,6,5,5,4,5,5,5,5,4,4,4,5,6,4,4,3,2,3,3,5,5,5,5,6,5,6,8],[27,28,28,28,28,28,29,28,28,28,28,28,28,28,28,29,28,28,28,26,27,27,27,27,26,28,27,26,27,26,27,26,26,25,24,25,25,24,24,23,20,21,20,20,16,15,13,10,7,5,4,3,3,2,2,2,1,2,2,2,3,1,1,0,1,1,2,2,3,3,4,3,3,3,3,3,2,3,3,3,2,3,2,3,3,4,3,4,5,4,6,5,5,5,5,4,3,3,4,3,3,3,3,3,4,4,4,4,5,5,5,6,5,6,6,5,5,5,5,5,5,4,4,4,3,4,3,3,3,3,3,4,3,2,3,2,2,3,3,3,3,4,4,4,4,5,5],[28,28,28,28,28,28,28,28,28,28,28,28,28,27,28,28,28,28,28,28,27,27,26,27,27,28,27,26,26,26,25,25,25,25,23,24,24,23,21,22,19,20,19,18,15,14,12,9,7,5,3,2,2,2,2,2,1,2,2,2,3,2,2,1,0,1,1,2,2,2,3,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,2,3,3,2,2,2,2,2,3,3,3,4,4,4,4,4,4],[27,27,28,28,29,29,29,28,28,29,28,28,28,29,28,28,28,28,28,26,26,27,27,26,27,27,26,26,26,26,26,25,26,25,22,26,25,25,23,20,20,20,17,18,16,13,10,7,5,4,2,2,1,1,1,1,1,2,2,3,3,2,2,1,1,0,1,1,1,2,2,2,2,1,2,2,2,1,2,2,2,2,2,2,2,3,3,3,4,3,3,3,4,4,3,3,3,3,2,2,3,2,2,2,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,3,3,3,3,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,3,3,3,4,4,4,4,4],[27,28,28,29,28,28,28,28,26,27,27,27,28,27,27,27,27,27,26,26,26,26,26,26,26,27,26,26,26,25,25,24,25,23,22,24,23,24,22,20,18,19,17,17,14,12,10,7,5,4,2,2,1,2,2,2,2,3,3,3,4,3,2,2,1,1,0,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,4,4,4,4,4,4,3,4,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,3,3,3,4,4,4,4,4,5,5],[27,27,28,29,29,29,28,28,28,28,28,28,29,29,28,28,27,28,27,26,26,26,26,27,27,27,26,26,26,24,25,25,25,24,22,25,25,24,23,21,20,19,17,18,13,11,9,6,5,4,2,1,1,1,2,2,2,3,3,4,3,3,2,2,2,1,1,0,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,4,3,3,4,3,3,3,3,3,3,3,2,2,2,3,3,3,3,3,3,3,4,3,4,4,3,4,4,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,4,4,4,5,5],[27,27,27,28,28,28,28,27,27,27,27,27,28,28,27,28,27,28,27,26,27,27,27,26,26,27,26,26,26,25,25,25,25,24,21,25,23,23,21,21,19,18,15,15,12,10,8,7,5,5,2,1,1,2,2,2,2,3,3,4,3,3,3,2,2,1,1,1,0,1,2,2,1,2,2,2,1,2,2,2,2,2,2,3,2,3,3,3,3,3,3,2,3,4,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,3,3,3,3,3,3,4,4,3,3,3,3,3,2,2,2,2,2,2,1,1,2,2,2,2,2,2,3,3,3,4,3,4,4,4,4,5],[27,27,28,28,28,28,29,26,26,28,26,27,27,27,27,28,27,28,27,27,25,25,25,24,23,25,25,24,24,24,25,23,24,23,21,22,23,23,21,21,18,17,15,15,12,10,9,7,5,4,3,2,2,3,2,3,3,4,4,5,4,5,3,3,3,3,2,2,1,0,1,2,2,2,2,2,2,2,3,3,3,4,3,4,3,4,3,4,4,3,3,3,3,4,4,4,4,3,3,3,3,4,4,4,3,3,2,3,3,3,3,3,4,3,4,4,4,4,3,4,5,3,4,3,3,3,3,2,2,2,2,2,2,3,3,3,3,4,4,4,4,4,5,5,4,5,5],[28,27,28,28,28,28,28,27,27,28,27,28,28,28,28,29,28,28,28,27,27,27,27,26,26,27,27,27,27,27,27,26,26,26,23,25,26,25,23,22,20,18,16,15,13,10,9,7,5,6,2,2,2,2,2,3,3,4,4,4,5,5,4,3,3,2,2,1,1,1,0,1,2,2,2,2,2,2,2,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,4,3,3,3,3,3,3,2,3,3,4,4,4,4,5,4,4,4,4,4,3,3,3,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,4,4,5,5,4,5,5],[27,26,27,28,28,28,28,27,28,27,28,27,28,28,28,28,28,28,27,26,25,26,26,26,26,27,26,27,27,25,26,25,24,24,21,25,24,23,22,22,18,18,16,15,13,11,9,7,5,4,2,2,2,2,2,2,2,2,2,3,3,3,3,2,2,2,2,2,1,1,1,0,1,1,1,1,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,2,2,2,2,2,2,2,3,2,2,3,3,3,3,2,3,3,2,2,2,2,2,2,2,1,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,4],[29,29,29,30,30,30,30,29,29,29,29,29,29,29,29,29,29,29,28,27,26,28,27,27,26,26,26,25,27,24,26,25,26,23,21,25,25,24,21,22,19,19,17,16,14,12,9,7,5,4,2,2,2,2,1,2,2,2,2,3,3,3,2,2,2,2,2,1,1,1,1,1,0,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,2,2,2,2,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3],[27,27,27,28,28,28,28,27,27,27,27,26,27,27,27,27,26,28,26,25,25,25,25,25,24,25,24,25,25,24,25,23,24,23,21,22,24,22,21,21,19,18,17,18,14,12,11,7,5,4,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,1,1,2,1,1,1,0,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3],[28,29,29,29,30,29,29,28,29,29,29,29,30,30,29,29,28,28,28,27,27,27,27,27,27,27,27,27,26,25,27,25,26,25,22,25,25,23,22,24,21,20,18,17,15,12,10,7,5,4,3,2,2,2,2,2,2,2,2,3,3,3,2,2,2,2,2,2,2,2,2,1,1,1,0,1,1,1,1,1,1,1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,2,2,2,1,2,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4],[26,28,28,29,29,29,29,28,27,29,28,28,29,29,28,29,28,28,28,27,27,28,28,27,26,27,27,27,28,26,27,26,26,25,23,25,23,26,23,24,20,20,18,19,15,13,10,7,5,4,2,2,2,2,1,2,2,2,2,3,3,2,2,2,2,2,2,1,2,2,1,1,1,1,1,0,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3],[27,26,26,27,27,27,27,26,27,26,27,26,27,27,28,28,26,28,27,25,26,27,26,27,27,26,26,26,26,26,26,25,26,26,22,25,25,24,22,22,21,19,18,17,15,12,9,7,5,5,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,1,2,2,2,1,1,1,1,1,0,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,2,2,3,3,2,2,2,2,1,1,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3],[28,27,27,29,28,28,28,28,28,28,28,27,28,28,28,28,27,29,27,26,26,27,26,27,26,26,25,27,26,26,27,26,26,25,23,25,25,23,23,23,20,20,19,17,14,12,11,7,6,4,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,1,2,1,2,2,2,1,1,1,1,1,1,0,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,2,3,3,2,2,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,4],[29,28,29,29,29,29,28,28,28,29,27,28,28,28,29,29,29,29,28,27,27,28,27,26,27,28,27,26,27,26,27,25,27,26,23,24,24,25,23,24,21,21,19,18,16,14,12,8,6,4,3,2,2,2,2,2,2,2,2,3,3,3,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,0,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,3,2,2,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4],[26,27,27,28,28,28,28,28,27,28,27,27,28,28,28,28,28,28,28,26,27,28,28,27,27,28,27,27,28,27,27,26,27,27,24,26,24,26,23,24,22,20,20,17,16,14,10,7,6,5,3,2,2,2,2,2,2,2,2,3,3,3,3,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,0,1,1,1,2,2,2,2,2,2,2,2,2,3,3,3,2,2,3,2,3,3,3,3,3,3,2,2,2,3,3,3,3,3,3,3,3,4,3,3,4,3,3,3,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,3,3,3,3,3,3,4],[28,28,28,29,29,28,29,28,28,28,28,28,29,28,28,29,28,29,28,26,28,28,28,27,27,28,27,26,28,27,27,27,27,26,23,25,25,24,23,23,22,20,19,18,15,13,10,7,7,5,3,3,3,3,3,3,3,3,3,4,4,3,3,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,0,1,1,2,2,2,2,3,3,2,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,4,3,3,4,4,4,4,4,4,4,4,4,4,4,3,3,3,2,2,3,3,2,3,3,3,3,3,3,3,2,3,3,3,3,4,4,4,5,5],[28,28,28,28,28,27,28,28,29,29,29,28,28,29,29,29,28,28,28,26,28,28,28,28,28,28,28,28,29,27,28,28,28,26,25,27,27,27,24,23,21,20,19,18,15,13,11,9,7,4,4,3,3,3,3,3,2,3,3,4,4,3,3,2,2,2,2,2,2,3,3,3,3,2,2,2,1,1,1,1,1,0,1,1,2,2,2,3,3,3,4,4,4,3,3,3,3,3,3,4,4,4,5,5,5,4,4,4,5,4,5,5,5,4,5,5,5,5,5,5,5,5,4,4,3,3,3,4,3,3,3,4,4,4,4,3,3,3,3,3,3,3,4,4,5,5,5],[28,27,28,28,28,28,28,27,28,28,27,28,29,29,28,28,27,29,28,25,27,28,27,26,26,28,26,27,27,26,27,27,26,26,24,26,26,25,25,23,22,20,19,19,15,13,12,10,8,5,4,3,3,3,3,3,2,2,2,3,4,3,3,2,2,2,3,3,3,3,3,3,2,2,2,2,2,1,1,2,1,1,0,1,1,2,2,2,3,3,3,3,3,3,3,2,2,2,3,3,3,3,4,3,3,3,3,3,4,4,4,4,3,3,4,4,4,4,4,4,4,3,3,3,2,2,2,3,3,3,3,3,4,3,3,3,3,3,2,2,3,3,3,4,3,4,4],[28,28,28,28,28,28,29,28,27,29,28,28,28,28,28,28,28,28,29,26,28,28,27,26,27,27,27,27,28,26,28,26,26,26,24,25,25,25,23,24,20,20,17,17,14,14,10,9,8,7,6,4,4,4,4,4,3,4,4,4,5,4,4,3,3,3,3,4,4,5,5,4,3,3,2,3,3,2,2,2,2,1,1,0,1,1,2,2,3,3,4,3,4,3,3,2,2,3,3,3,4,4,5,5,5,4,5,4,5,5,4,4,4,4,4,5,4,4,5,5,5,4,3,3,3,3,3,3,4,4,5,5,5,4,4,4,3,3,2,3,3,3,4,4,4,4,5],[28,29,29,29,29,30,29,28,29,29,29,29,30,29,29,29,28,30,28,26,27,27,27,28,27,28,27,28,27,27,28,27,26,27,24,25,27,24,24,24,22,20,20,18,16,14,13,10,8,5,5,4,3,4,3,3,2,3,2,3,4,3,3,2,3,3,3,3,4,3,4,3,3,2,2,2,2,2,2,2,2,2,1,1,0,1,1,1,2,2,3,3,3,2,2,2,2,2,2,3,3,3,4,3,4,4,3,4,4,4,4,4,3,3,4,4,4,3,3,4,4,3,3,3,2,3,2,3,3,3,4,3,4,3,3,3,3,3,2,2,3,2,3,4,3,4,4],[28,28,28,27,28,27,28,28,28,27,28,27,25,27,26,27,26,26,26,24,25,26,25,26,26,27,25,25,26,25,27,26,26,26,24,26,25,24,23,23,21,20,18,17,14,13,11,9,7,5,4,4,4,3,3,3,2,2,2,3,3,3,3,3,3,3,3,3,4,4,4,3,3,2,2,2,2,2,2,3,2,2,2,1,1,0,1,1,2,2,2,2,2,2,2,2,1,2,2,3,3,3,4,4,4,4,4,4,4,3,3,3,3,3,3,4,4,3,3,5,4,4,3,3,2,2,2,2,3,3,4,4,4,4,3,3,2,2,2,2,2,2,3,3,3,4,4],[27,27,27,27,28,27,28,27,28,28,27,28,28,28,29,28,28,27,28,25,26,26,26,26,26,27,26,26,27,25,28,26,26,25,23,26,28,25,24,24,21,21,19,19,16,14,12,9,8,6,6,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,4,3,4,4,4,3,3,3,2,2,2,2,2,3,3,3,2,2,1,1,0,1,2,2,2,2,2,2,2,2,2,3,3,3,3,4,5,5,4,4,3,4,3,4,3,3,3,3,4,4,4,4,4,4,4,4,3,3,2,3,2,3,3,3,4,4,5,4,3,3,3,3,2,2,3,2,3,3,3,4,4],[26,27,28,27,28,27,27,26,27,28,26,28,27,27,27,27,27,26,27,23,25,26,24,24,24,26,27,24,27,25,26,26,27,23,23,25,25,26,23,24,20,21,17,17,15,14,11,9,8,6,5,5,5,4,4,3,3,3,3,3,4,4,4,4,4,4,4,4,5,5,4,4,3,3,2,3,3,2,3,4,3,4,3,2,2,1,1,0,2,2,2,3,3,6,3,3,2,2,3,3,3,4,4,5,5,4,4,3,4,3,3,3,3,3,4,5,5,4,4,5,4,4,3,3,3,2,2,3,3,3,5,5,5,4,4,4,3,3,3,3,3,3,3,4,3,4,4],[28,26,26,27,28,27,27,26,26,26,25,26,26,27,27,27,26,26,26,22,25,26,24,25,26,26,25,25,26,24,26,24,26,24,20,25,23,26,23,23,20,20,17,17,14,13,11,9,7,7,6,5,5,5,4,4,4,4,3,4,4,4,4,4,5,4,5,4,4,3,3,3,2,2,2,2,3,3,3,4,4,3,3,3,2,2,1,1,0,1,1,1,2,2,2,1,2,2,2,3,3,4,5,6,4,3,3,3,3,2,3,2,2,3,3,3,4,3,3,5,4,4,3,2,2,2,2,2,2,2,4,3,5,6,4,4,3,3,2,2,3,2,3,4,3,3,4],[27,28,28,29,29,29,29,28,28,27,28,28,28,29,29,28,28,27,28,25,26,27,26,25,26,26,27,24,27,25,27,26,27,26,23,25,25,26,24,25,22,21,19,18,16,14,12,9,8,5,5,4,3,4,3,4,3,4,4,5,4,4,4,4,4,4,4,3,3,3,3,3,2,2,2,2,3,3,3,3,3,3,3,3,2,2,2,1,1,0,1,1,2,2,2,2,2,2,3,3,4,4,4,4,4,3,3,2,3,2,2,2,2,2,4,4,5,4,3,5,4,4,3,2,2,2,2,2,2,2,3,3,4,4,3,4,3,3,3,3,3,3,4,4,4,4,5],[27,28,28,28,28,28,28,27,27,27,26,27,28,28,28,27,26,26,26,24,25,25,25,25,25,26,26,25,27,25,26,26,26,25,24,26,26,26,24,25,20,21,19,18,17,16,13,10,9,5,6,4,4,5,4,5,4,5,4,5,5,6,6,5,5,5,5,4,4,4,3,3,2,3,2,2,3,3,3,3,4,4,3,3,3,3,2,2,2,1,0,1,2,2,2,2,2,3,3,3,4,5,6,5,4,4,3,2,3,2,2,2,2,2,3,3,4,4,3,4,5,4,3,2,2,2,2,2,2,3,4,4,5,5,4,4,4,4,3,3,3,3,4,5,4,5,6],[28,28,28,29,29,29,29,29,29,29,29,29,29,29,29,29,28,30,28,26,27,27,27,28,28,29,28,27,27,27,29,26,28,27,26,27,27,27,25,25,21,21,19,18,17,15,12,10,8,6,6,5,5,5,4,5,4,4,4,5,5,6,5,5,5,4,5,4,4,4,3,3,2,2,2,2,3,4,3,3,4,4,4,3,3,3,2,2,2,1,1,0,1,2,2,2,2,2,3,3,3,4,5,5,4,4,3,2,2,2,2,2,2,2,2,3,3,3,3,4,4,4,3,2,2,2,2,2,2,3,4,4,5,5,4,5,3,4,3,3,3,3,4,5,3,4,4],[27,28,27,28,28,28,28,27,27,27,26,27,28,28,28,27,26,27,27,23,25,26,25,25,26,27,27,25,26,25,27,25,26,26,23,25,25,25,23,25,20,19,18,17,14,12,11,9,7,6,5,4,4,5,4,4,4,4,5,6,5,6,5,5,5,5,5,4,4,3,3,3,3,3,2,3,3,3,3,4,4,4,4,4,3,3,3,2,2,2,2,1,0,1,2,2,2,2,3,3,3,5,5,5,4,4,3,3,2,2,2,2,2,3,3,3,4,3,3,4,4,4,3,3,2,2,2,2,3,3,4,4,5,5,4,4,4,4,3,3,3,3,3,4,3,3,4],[29,28,28,28,29,28,28,28,28,28,28,28,29,29,29,28,27,28,27,26,27,27,27,26,27,27,27,27,27,26,27,25,26,25,22,27,25,26,25,23,19,19,17,18,14,13,11,9,8,7,6,5,5,5,4,4,3,3,3,4,4,4,4,4,4,4,5,5,5,4,3,3,3,3,2,3,3,3,3,4,4,4,3,4,3,3,2,2,1,2,1,1,1,0,1,2,2,1,2,2,3,3,4,5,4,3,3,3,2,2,2,2,2,2,2,3,3,3,3,4,3,3,2,2,2,2,2,2,2,3,4,4,5,5,4,3,3,2,3,2,2,2,2,2,2,3,3],[28,29,29,28,29,29,29,27,28,28,27,28,28,28,28,29,27,29,28,25,25,27,25,25,25,26,26,26,26,25,26,25,26,26,22,25,26,24,24,22,20,19,17,17,14,13,12,9,8,7,6,5,5,4,4,4,3,3,3,4,4,4,4,4,4,4,5,5,5,5,5,5,3,3,3,3,3,3,4,4,4,4,3,3,2,2,2,2,2,2,2,2,1,1,0,1,2,1,2,2,3,3,4,5,4,4,4,3,3,3,3,2,2,3,3,3,3,4,3,4,4,3,2,2,2,2,2,3,3,4,4,5,5,5,4,3,3,3,2,2,2,2,2,3,3,4,4],[27,27,28,28,29,29,29,27,28,28,28,28,28,29,29,28,27,27,27,24,26,26,24,24,25,26,26,24,25,24,26,23,25,24,22,23,24,24,21,22,19,19,16,16,12,12,9,7,6,5,4,4,4,3,3,3,2,2,2,3,3,3,3,3,3,3,3,3,4,3,3,3,2,2,2,2,2,2,2,3,3,3,2,2,2,3,2,2,2,2,2,2,2,6,1,0,1,1,1,2,2,3,3,3,3,3,3,2,3,3,2,2,2,2,2,3,3,2,2,3,3,2,2,2,2,1,2,2,2,2,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,3,3],[28,28,28,28,28,28,28,28,28,27,28,28,28,29,28,28,27,28,27,28,26,27,26,27,27,26,26,26,27,26,27,26,26,25,22,26,25,26,23,23,20,18,15,14,13,12,10,9,7,6,4,3,3,3,3,2,2,2,3,3,4,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,3,3,3,3,3,3,3,3,2,2,2,1,1,2,2,1,2,1,1,1,0,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,2,2,2,1,1,1,2,2,2,2,3,2,3,3,3,2,2,2,2,2,2,2,2,2,2,3,3],[28,28,28,28,28,28,29,27,28,28,28,26,28,28,28,28,26,27,27,26,25,25,25,25,25,26,24,24,26,24,26,24,25,24,21,23,24,23,21,21,19,18,17,16,13,12,10,8,7,5,5,4,3,3,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,2,1,1,0,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,2,2,2,2,3,3,3,2,2,1,1,2,2,2,2,2,2,2,3,3],[27,27,27,28,28,28,28,27,28,28,27,26,28,27,28,27,26,28,26,26,24,25,25,25,25,25,24,25,26,25,26,25,24,25,21,24,25,22,21,22,19,18,18,17,14,14,12,10,8,6,5,4,3,3,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,3,4,3,2,2,2,2,3,2,2,4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,0,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,2,2,2,3,3,3,3,3,2,2,1,1,1,2,2,2,2,2,2,3,4],[28,27,27,28,28,28,28,27,27,27,28,26,27,27,28,28,26,27,26,26,25,26,25,25,25,25,24,25,26,25,27,24,25,25,22,24,25,22,22,22,19,18,17,17,13,12,10,8,6,5,4,3,2,2,2,2,2,2,2,2,3,3,2,2,2,2,3,2,3,3,3,3,2,2,2,2,2,2,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,0,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,1,1,1,1,2,2,2,2,2,2,2,2,1,1,1,1,1,2,2,2,2,2,2,2,3],[27,26,26,27,27,28,27,28,29,28,28,27,28,28,28,28,27,29,28,27,26,27,27,27,28,28,26,26,27,27,26,26,27,27,23,26,26,24,22,23,20,19,17,17,14,13,11,9,7,4,3,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,3,2,2,3,3,2,2,2,3,2,2,2,3,3,3,2,2,2,2,2,3,3,3,3,2,2,2,2,2,2,1,1,1,0,1,1,1,1,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,2,2,2,2,2,2,3,3],[27,26,27,28,28,27,28,27,27,27,27,27,28,28,28,27,27,27,27,26,25,26,26,26,26,26,26,25,26,26,27,25,26,25,22,24,25,23,22,22,20,19,17,17,15,13,11,8,7,6,4,3,2,2,2,2,2,2,2,3,3,3,3,3,2,2,3,3,3,3,3,3,2,2,2,3,3,2,3,3,3,4,3,3,2,3,3,3,3,3,3,3,3,3,2,3,2,2,1,1,1,0,1,1,2,2,2,2,3,3,2,3,3,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,2,2,2,3,3,2,3,4],[27,27,27,27,28,28,28,27,27,28,28,28,28,27,28,28,27,28,28,28,27,27,27,27,27,27,27,26,26,27,26,26,26,26,23,24,24,23,23,23,21,20,17,17,16,12,11,8,8,5,4,3,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,4,4,3,3,4,5,4,5,3,4,4,4,4,5,5,5,5,4,5,5,3,4,3,2,2,2,1,1,0,1,1,2,2,3,3,3,4,4,4,4,4,3,4,3,3,3,3,2,2,2,3,3,4,3,3,2,2,2,2,2,2,2,2,2,2,3,2,3,4,3,3,4,4],[28,28,28,29,29,29,29,29,29,29,29,28,29,29,29,29,28,29,28,27,26,28,27,28,28,28,27,27,27,27,27,27,27,26,24,26,25,24,23,22,21,20,20,18,18,14,12,9,6,4,4,4,2,3,2,2,3,3,4,4,5,4,3,4,3,4,4,3,3,2,3,3,3,3,3,3,4,4,4,4,5,4,4,4,3,5,4,5,4,4,4,3,4,4,4,4,3,3,3,2,1,1,1,0,1,1,2,2,2,3,3,3,3,3,3,3,3,3,2,3,3,2,3,2,3,3,3,3,2,2,2,1,2,2,2,2,2,2,3,5,3,4,4,4,4,5,5],[27,27,28,28,28,28,28,28,28,29,28,28,28,28,28,28,28,27,28,27,27,27,27,26,27,27,27,25,27,26,26,26,25,25,22,24,24,24,22,21,19,18,17,17,15,13,12,8,8,5,4,3,2,2,2,2,2,3,3,4,4,4,3,3,3,3,3,2,2,2,2,2,2,2,2,3,3,3,3,3,4,4,4,4,3,4,3,3,3,3,3,2,3,3,3,3,3,2,2,2,2,2,1,1,0,1,1,2,2,2,2,3,3,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,1,2,2,2,2,1,2,2,2,2,3,3,3,4,4,3,4,5],[27,26,26,28,28,28,28,28,28,28,28,27,28,28,28,28,27,28,26,27,26,26,26,26,26,27,25,26,26,26,26,26,26,26,24,25,25,23,23,23,22,20,19,20,15,13,12,8,7,5,4,3,2,2,2,3,3,3,3,4,4,4,3,3,3,3,3,3,3,2,2,3,2,2,3,3,3,3,3,4,3,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,1,1,0,1,1,2,2,2,2,2,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,3,3,3,3,3,4,4,3,4,5],[26,26,26,26,26,26,26,26,25,27,26,27,26,27,26,26,27,26,27,26,26,27,27,26,26,27,26,26,27,26,26,25,25,25,23,24,24,24,23,21,21,19,17,18,14,12,11,8,6,5,3,3,2,2,2,2,2,3,3,4,4,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,0,1,1,2,2,2,2,2,2,2,3,2,2,2,3,2,2,2,2,2,2,1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,3,4,4],[28,28,29,29,29,29,29,28,29,29,29,29,29,29,29,29,28,29,28,27,27,27,27,28,27,28,28,26,26,27,27,26,27,27,24,26,26,25,23,23,21,20,19,19,15,14,12,9,7,5,3,3,3,3,3,3,3,3,3,4,5,4,4,4,4,3,3,4,3,2,2,3,2,2,3,3,3,4,3,4,4,4,4,4,4,3,3,3,3,2,2,2,2,3,3,3,3,3,3,3,2,3,2,2,2,1,1,0,1,2,1,2,2,2,3,3,3,3,2,3,3,3,2,2,2,3,2,2,2,2,2,2,2,2,2,3,3,3,4,3,4,3,4,4,3,4,4],[26,26,26,26,27,26,27,26,26,27,26,26,27,27,27,26,27,26,25,25,24,25,25,25,26,25,26,24,26,26,24,25,24,24,22,24,24,24,22,23,22,20,18,17,15,13,11,9,7,5,3,3,2,3,3,3,3,3,4,4,5,4,4,4,3,4,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,5,4,4,3,4,3,3,3,3,2,2,2,2,2,3,2,3,3,3,2,3,3,2,2,2,1,1,0,1,1,2,2,2,3,3,3,3,2,3,3,3,3,2,2,2,2,2,2,2,2,2,2,3,2,3,2,3,3,3,3,3,4,4,4,4,5],[25,26,26,27,28,27,28,27,26,27,26,27,27,28,27,27,25,25,25,24,25,26,26,25,25,26,26,25,26,25,27,25,25,25,22,24,26,25,23,22,20,19,17,17,14,12,11,8,6,5,4,3,3,4,3,4,3,4,4,5,5,5,4,4,4,3,4,3,3,3,3,3,2,2,2,3,3,3,4,4,4,4,4,3,3,3,3,3,3,2,2,2,2,2,2,3,2,3,3,3,3,4,3,3,2,2,2,1,1,0,1,1,2,2,2,3,3,3,2,3,4,3,3,3,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,5],[29,29,29,29,29,28,29,28,28,29,28,28,29,29,29,29,27,29,27,26,27,27,26,28,27,27,27,27,27,26,27,26,26,26,23,26,26,24,23,23,20,19,18,18,15,13,11,9,7,5,4,4,4,5,4,4,3,4,4,5,6,6,5,5,4,4,4,4,3,3,3,3,2,3,3,3,3,4,3,4,5,4,4,4,4,4,3,3,3,2,2,2,2,2,2,3,3,2,3,3,3,3,4,4,3,3,2,2,2,1,0,1,1,1,1,2,2,2,2,3,3,3,2,3,2,2,2,2,2,2,3,3,4,4,4,4,4,4,4,3,4,3,3,3,3,4,4],[26,26,26,27,27,26,27,27,27,27,27,27,27,27,28,27,26,26,26,22,25,26,26,25,25,26,27,25,26,24,25,25,25,24,22,24,24,24,22,22,18,18,16,16,13,11,10,8,7,5,4,4,4,5,4,4,4,4,4,6,6,6,5,5,4,4,4,4,3,3,3,3,3,3,3,3,3,4,3,4,4,4,4,4,3,4,3,3,3,2,2,2,2,2,2,3,3,3,3,3,3,4,4,4,3,3,2,2,2,1,1,0,1,2,2,2,2,2,2,3,3,3,3,2,2,2,2,2,2,2,3,3,4,4,4,4,4,4,3,3,3,3,3,4,3,4,4],[28,28,28,28,28,28,29,28,28,28,28,29,28,28,29,28,28,29,27,25,27,26,26,26,26,27,27,26,27,25,26,25,26,25,23,25,25,24,23,24,20,20,17,17,14,13,11,8,7,5,5,4,4,4,4,4,3,3,3,4,4,4,4,4,4,4,4,4,4,3,3,3,3,2,2,3,4,3,3,4,4,4,4,3,3,3,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,3,3,3,3,2,2,2,2,2,1,1,0,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,3,3,4,4,3,3,3,2,2,2,2,2,2,2,2,3,3],[28,29,29,29,29,29,29,28,29,28,29,29,29,29,29,29,27,30,28,27,28,27,27,28,28,29,27,28,27,27,28,27,27,27,24,27,28,25,26,26,22,21,19,18,15,13,11,9,7,5,5,4,3,4,3,3,2,3,3,3,4,4,3,3,3,3,4,3,3,3,3,3,2,2,2,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,3,3,3,2,2,2,2,2,2,1,1,1,0,1,1,1,1,1,2,2,2,1,1,1,2,2,2,2,2,3,3,3,3,3,3,3,2,2,2,2,2,3,3,2,3,4],[28,28,28,28,29,28,28,27,27,27,26,27,28,28,28,28,28,27,27,26,26,27,27,26,26,27,27,26,28,27,27,26,27,25,23,25,25,24,22,21,20,18,16,16,13,12,11,8,8,6,5,4,4,4,4,4,3,4,3,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,4,4,3,4,4,4,4,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,2,2,2,2,2,2,2,1,1,0,1,1,1,1,1,2,2,2,2,2,2,2,2,2,3,3,3,4,4,3,3,3,3,2,3,2,2,3,3,3,3,5],[28,27,28,28,28,28,28,27,27,29,27,28,29,29,28,28,28,28,27,27,27,28,28,27,27,27,28,27,28,29,28,27,27,27,24,26,25,26,23,23,21,19,18,17,14,12,10,9,7,6,5,5,4,5,3,4,3,3,4,4,4,4,4,4,4,4,5,4,4,4,4,4,3,3,3,4,4,4,4,4,5,5,4,4,3,3,3,3,3,3,3,2,2,2,2,3,2,3,2,2,2,2,3,3,3,3,3,2,2,3,2,2,2,1,1,0,1,1,1,1,1,2,2,2,2,2,3,3,2,3,3,3,4,3,3,3,3,3,3,3,3,3,4,3,3,3,4],[29,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,27,27,28,27,27,26,27,27,27,27,27,27,26,26,26,23,25,25,24,22,22,20,19,17,16,14,12,11,8,7,6,5,4,4,4,4,3,3,3,3,3,4,4,3,4,4,4,4,4,4,4,4,4,3,3,3,4,4,4,4,4,4,4,4,4,4,3,3,4,3,3,3,3,3,2,3,3,2,2,2,2,2,2,3,3,3,3,3,2,2,3,2,2,2,1,1,1,0,1,1,1,1,1,1,2,2,2,2,3,2,3,3,3,3,3,3,3,2,2,3,3,2,3,3,3,2,3,4],[29,29,29,29,29,29,29,29,29,29,29,29,30,30,29,30,29,30,29,28,28,29,28,29,28,29,28,28,29,28,29,26,27,28,24,28,26,25,25,25,22,21,21,19,14,12,10,9,6,5,4,3,3,3,3,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,3,3,3,3,3,3,3,3,2,3,2,3,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,0,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,3,3],[27,27,27,28,28,28,28,27,28,28,28,29,29,29,29,29,28,29,28,27,27,28,27,28,27,28,28,28,27,28,28,27,28,28,25,27,27,25,26,24,22,20,19,18,15,13,11,8,7,5,4,3,3,3,2,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,1,2,1,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,0,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3],[28,27,28,28,28,28,28,28,28,28,28,28,29,28,29,29,28,29,28,28,27,28,28,28,27,28,27,27,28,27,26,27,27,27,24,26,25,25,23,22,21,20,18,17,15,12,11,8,7,5,4,4,3,3,3,3,3,3,3,3,4,4,3,4,4,4,4,3,4,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,3,3,3,3,3,3,3,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,0,1,1,1,2,2,2,2,2,2,2,3,3,3,3,2,2,2,2,2,3,2,3,3,3,2,3,4],[28,28,28,28,29,29,29,28,29,28,28,28,29,29,28,29,27,28,28,27,27,27,27,27,26,27,26,27,26,27,26,26,26,25,23,24,24,23,22,21,20,19,18,17,14,12,11,8,7,5,5,4,4,3,3,3,2,3,3,3,3,3,3,3,3,3,4,4,4,3,4,4,3,3,3,3,4,3,4,4,4,4,4,3,3,3,3,4,3,3,3,3,3,2,2,3,2,2,2,2,1,2,2,2,2,2,2,2,2,3,2,2,2,2,1,1,1,1,1,1,0,1,1,1,2,2,3,3,2,3,3,3,3,3,2,2,2,2,2,2,2,3,3,3,2,3,4],[29,28,28,28,29,28,29,29,30,29,29,28,29,29,29,29,28,29,28,28,28,28,27,28,29,28,28,28,28,28,29,28,27,28,25,27,27,26,25,24,23,21,21,20,17,15,13,10,8,6,4,4,3,3,3,3,2,3,3,4,4,4,4,3,4,3,3,3,3,3,4,3,3,2,2,3,3,3,3,3,4,4,3,3,3,3,2,3,3,3,3,3,3,2,2,2,2,2,1,1,2,2,2,2,2,2,3,2,3,3,3,3,2,2,2,2,1,1,1,1,1,0,1,1,1,2,2,3,2,2,3,3,3,3,2,2,2,2,2,2,2,2,3,3,2,3,4],[28,28,28,29,29,29,29,28,29,29,28,28,29,29,29,28,28,29,28,26,26,27,27,27,26,27,26,27,27,27,27,26,26,27,24,27,27,24,24,23,21,21,19,19,14,13,10,7,6,4,3,3,3,3,2,2,2,2,2,3,3,3,3,3,3,3,3,2,2,2,3,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,2,2,2,2,2,1,2,2,2,2,1,1,1,2,1,1,1,1,1,1,0,1,1,1,1,2,1,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,3,3],[26,26,26,27,27,27,27,26,27,26,27,26,27,27,27,27,26,28,26,25,25,25,25,26,26,26,25,26,26,25,26,25,25,26,22,25,26,23,23,22,21,18,18,18,14,13,11,8,7,4,3,3,3,3,2,2,2,2,3,3,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,1,1,1,0,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3],[29,29,29,29,30,29,30,29,30,29,29,29,29,29,30,29,27,29,28,27,27,27,27,27,27,28,27,26,27,25,27,24,26,25,22,24,26,24,22,25,19,20,18,16,13,12,9,6,6,3,3,2,2,2,2,2,2,2,2,3,3,3,3,2,2,2,2,2,2,2,2,2,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,1,1,1,1,1,1,2,2,2,2,2,2,1,2,2,2,2,1,1,2,2,2,1,1,2,2,1,1,1,0,1,1,1,1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,3,3],[26,26,26,27,27,27,27,26,25,27,26,26,28,27,27,27,26,28,26,25,25,25,25,24,25,25,25,25,25,24,26,23,24,23,21,23,24,22,22,21,19,17,17,16,14,13,11,8,7,4,3,3,2,2,2,2,2,2,2,3,3,3,3,3,3,3,2,2,2,2,2,2,1,1,1,1,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,0,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3],[28,28,28,29,29,28,28,28,28,28,28,27,28,28,29,28,28,28,27,26,26,27,26,26,26,25,25,25,26,25,25,25,25,24,21,24,24,25,23,21,19,20,17,17,15,13,10,8,6,5,3,3,2,2,2,2,2,2,3,3,4,3,3,3,3,2,3,2,2,2,2,2,1,1,1,2,2,2,2,3,3,3,2,3,2,2,2,2,2,2,2,1,2,2,2,2,1,1,1,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,0,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3],[27,28,28,29,29,29,29,28,29,27,28,28,28,29,29,29,27,28,27,26,26,26,26,26,26,26,26,26,26,25,25,25,25,25,22,24,24,23,24,22,21,19,18,17,14,13,10,8,6,4,3,3,2,3,2,2,2,3,3,3,3,4,3,3,3,3,3,3,2,2,2,2,2,1,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,3,3,3,2,2,1,2,2,2,2,2,2,2,3,3,3,3,2,3,3,3,2,2,1,1,1,0,1,1,2,2,2,3,2,2,2,2,2,2,2,2,3,3,3,3,4],[26,26,26,27,27,27,27,26,26,26,26,25,27,26,26,27,25,28,26,26,25,25,24,25,25,25,25,25,25,24,24,24,25,23,21,23,24,22,22,21,20,19,18,18,15,13,11,8,6,4,3,2,2,2,2,2,2,3,3,3,4,4,3,3,2,2,2,2,2,2,2,2,1,1,2,2,2,2,2,2,3,4,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,3,3,2,2,3,3,2,2,2,1,1,1,1,0,1,1,1,2,2,2,2,2,2,2,2,3,2,3,3,3,3,4],[28,27,28,28,29,28,28,26,28,27,27,28,28,28,29,29,28,28,28,26,27,28,27,27,26,28,27,27,27,26,27,25,25,25,23,25,26,23,22,21,19,18,17,17,13,11,9,6,5,4,2,2,1,2,2,2,2,2,2,3,3,3,3,2,2,2,2,2,1,1,1,1,1,1,1,1,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,0,1,1,1,1,1,2,2,2,2,2,2,2,3,3,2,3,3],[28,27,27,28,28,28,27,27,28,27,27,26,28,26,27,27,26,28,26,27,27,26,25,27,26,27,25,26,25,25,26,26,24,25,23,24,25,23,23,22,21,19,17,17,13,11,9,6,5,4,2,2,1,2,2,2,2,3,3,3,4,3,3,3,2,2,2,1,2,1,2,1,1,1,2,2,2,2,2,2,2,3,3,3,3,3,2,3,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,1,1,1,2,2,2,2,2,2,2,3,3,3,3,2,2,3,2,2,2,2,2,2,1,1,1,0,1,1,1,2,2,2,2,2,3,2,2,3,3,3,3,4],[26,26,26,26,27,27,27,27,27,28,28,28,27,28,28,28,28,28,28,28,27,27,27,26,26,27,26,26,26,25,26,26,26,25,23,24,24,24,24,23,21,20,17,18,15,12,11,8,7,5,3,2,2,2,2,2,2,3,3,3,4,4,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,2,2,2,2,2,3,2,2,2,1,2,2,2,2,2,3,3,3,3,3,3,3,2,3,3,3,2,2,2,2,2,2,1,1,1,0,1,3,2,2,2,2,2,3,3,3,3,4,3,4,4],[26,26,26,26,26,27,27,26,26,27,26,26,26,27,26,27,26,27,27,26,24,26,25,24,25,26,25,24,25,25,25,24,24,24,22,22,22,22,22,21,20,18,17,16,13,12,9,7,6,4,3,2,1,1,1,2,2,2,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3,3,4,3,4,3,4,4,3,3,3,3,4,3,4,3,3,2,2,2,2,2,3,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,2,2,2,2,1,1,1,0,1,1,1,2,2,2,3,3,4,4,4,4,4,5],[26,27,28,28,27,27,28,26,26,26,27,27,27,27,27,28,26,28,26,27,26,26,25,25,24,26,26,26,24,26,25,24,24,23,21,23,24,23,20,21,18,17,16,16,13,11,10,6,5,4,2,2,1,1,1,1,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,2,3,2,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,1,1,1,1,2,2,2,2,3,3,3,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,1,1,1,0,1,1,1,2,2,2,2,3,3,3,3,3,4],[26,26,27,29,29,28,29,27,28,28,28,28,28,28,28,28,26,29,27,27,25,26,26,26,26,26,25,25,25,25,26,24,24,24,20,24,24,22,21,21,20,19,17,18,13,12,12,7,6,4,3,2,1,2,1,1,1,2,2,2,3,2,2,2,2,2,2,2,2,2,3,3,3,2,2,3,3,2,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,2,2,2,2,1,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,1,0,1,1,1,2,2,2,3,3,3,3,3,4],[27,27,28,28,28,28,28,28,28,28,28,27,27,27,27,28,26,28,27,27,25,26,26,26,26,26,25,25,25,25,26,25,25,25,22,24,23,21,21,21,18,18,16,16,13,11,10,7,6,4,3,2,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,3,3,3,3,2,3,3,2,2,2,2,1,1,1,1,1,1,1,2,2,2,2,2,2,3,2,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,0,1,1,1,2,2,2,2,2,2,3,3],[27,27,27,28,28,28,28,28,29,28,28,28,28,28,28,28,27,29,28,26,27,27,27,27,27,28,26,26,26,26,26,25,25,26,22,24,25,23,21,22,19,19,17,18,14,13,11,8,7,4,3,2,2,2,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,2,2,2,2,2,2,3,2,3,2,2,2,2,2,2,1,1,1,1,1,1,1,2,2,2,2,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,0,1,1,1,1,2,2,2,2,3,3],[28,27,27,27,27,27,28,27,27,28,27,27,28,28,28,28,26,27,27,26,26,27,26,27,26,27,26,25,26,25,26,25,25,25,23,24,25,22,21,22,19,18,17,18,14,12,10,8,6,5,3,3,2,2,2,1,1,2,1,2,2,2,2,2,2,2,2,2,3,3,3,3,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,1,1,1,1,2,2,2,2,2,2,2,2,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,0,1,1,2,2,2,2,2,3,3],[28,27,28,29,29,28,28,28,28,29,29,28,29,29,29,29,28,29,28,27,27,27,27,28,28,29,28,28,28,27,28,27,27,27,24,27,27,25,25,24,21,20,19,18,15,14,13,10,9,6,5,4,3,3,2,2,2,1,2,2,3,3,3,3,3,3,4,4,4,4,4,4,4,3,2,3,3,3,3,4,4,4,2,3,2,2,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,3,3,3,3,4,3,4,3,3,3,3,3,2,2,2,2,3,3,3,3,3,3,3,2,2,2,1,1,0,2,2,2,2,3,3,3,4],[27,27,28,27,28,27,28,28,28,28,28,28,28,28,29,29,27,27,27,26,26,27,27,27,27,27,26,27,27,26,27,26,26,26,23,27,26,25,24,23,21,20,18,19,15,14,12,10,7,6,5,4,4,3,3,3,2,2,3,3,3,3,3,3,3,3,3,3,4,4,4,3,3,3,2,3,3,3,3,3,3,4,3,3,2,2,3,3,3,3,3,4,3,3,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,3,4,3,3,3,3,3,3,3,3,3,3,3,2,2,2,3,3,3,3,3,4,4,3,3,2,2,1,1,0,1,2,2,2,3,3,4],[27,26,27,28,28,28,28,28,28,28,28,27,29,28,29,29,27,28,27,27,27,28,27,28,27,27,26,27,27,26,28,27,26,27,24,26,27,24,24,25,21,20,19,20,15,13,12,11,9,8,8,6,5,5,3,3,3,2,3,4,3,3,3,3,3,3,4,4,5,5,5,4,3,3,3,3,3,3,3,4,4,3,3,3,2,2,3,3,3,3,4,3,3,3,2,2,2,2,2,2,2,2,3,4,4,5,3,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,2,2,3,2,3,3,3,4,4,4,5,4,4,3,2,3,1,1,0,1,2,2,2,2,3],[27,28,28,28,28,28,29,28,28,29,29,29,29,29,30,29,29,29,29,26,28,28,28,27,28,29,29,27,28,28,28,28,28,28,26,27,28,25,25,24,23,21,21,21,16,15,15,12,8,8,6,4,5,4,3,3,3,3,3,3,3,3,3,3,4,4,4,6,5,5,4,5,4,3,3,3,4,3,3,4,4,4,3,3,3,3,3,2,4,4,4,4,3,3,2,2,4,2,2,2,3,3,3,4,4,4,4,3,4,4,4,3,2,2,3,3,3,2,3,3,3,3,2,2,2,3,3,3,3,4,4,4,5,4,4,3,3,2,2,2,1,0,1,1,1,2,2],[27,26,26,27,27,26,27,27,27,28,27,27,27,28,28,28,26,28,26,25,26,27,26,26,27,27,27,27,26,25,26,26,25,25,24,26,26,24,24,22,21,20,19,19,15,15,14,11,9,7,7,6,7,7,6,6,4,4,4,4,4,4,5,5,6,6,6,6,6,6,5,5,4,4,3,4,5,4,4,4,5,4,4,3,3,3,3,3,3,3,4,3,3,3,2,2,3,2,3,3,4,3,5,5,6,5,5,5,5,4,4,4,3,3,3,5,4,4,3,4,3,4,3,3,3,3,3,4,5,5,6,6,7,6,6,4,3,3,2,3,2,1,0,1,1,2,3],[27,27,27,27,27,27,28,27,27,28,28,27,28,28,28,28,26,28,27,24,27,27,27,27,28,28,27,28,27,26,27,27,26,27,25,27,26,25,25,23,22,22,21,23,18,16,17,14,11,10,10,8,7,7,6,4,4,4,4,4,4,5,5,5,6,7,6,8,7,6,6,7,5,4,4,5,6,5,5,5,6,5,4,4,3,4,4,3,4,3,4,3,3,3,3,3,3,3,3,3,3,3,4,5,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,5,5,6,6,6,5,4,4,3,3,3,3,1,1,0,1,2,2],[27,28,28,28,29,28,29,28,29,29,29,30,29,29,30,30,28,29,29,25,28,28,28,28,29,30,29,28,28,28,28,28,28,28,27,28,28,26,27,26,24,22,22,22,18,15,15,12,11,11,9,7,6,7,7,6,4,4,4,5,5,6,5,6,5,7,7,8,8,6,7,7,5,5,4,6,6,5,5,6,6,6,5,5,4,4,4,4,4,4,6,4,4,3,3,3,3,3,3,3,5,4,5,5,5,6,4,6,5,5,5,4,3,3,3,3,3,4,3,4,3,3,2,5,3,6,5,5,7,5,7,5,7,6,6,5,5,4,4,3,2,2,2,1,0,1,2],[27,27,28,29,29,28,28,27,28,28,28,28,29,28,29,29,28,29,28,27,27,28,27,27,28,28,28,28,27,28,28,28,27,28,26,27,28,25,26,26,24,22,22,22,19,17,18,14,13,10,9,7,8,8,8,8,5,5,5,6,7,7,7,9,7,7,8,8,8,7,8,8,7,7,5,7,7,7,7,7,7,7,7,7,5,6,6,5,6,7,6,6,5,6,3,5,5,3,4,4,4,5,6,8,6,7,5,5,6,6,5,5,5,4,5,5,5,4,4,5,5,4,3,4,3,5,5,5,6,7,7,6,7,7,6,6,5,4,5,4,3,3,4,2,1,0,1],[26,25,26,26,27,27,27,27,27,28,27,28,26,27,27,28,28,28,28,25,28,27,27,27,27,28,28,27,28,26,28,27,28,28,27,27,28,27,26,26,24,24,23,23,22,22,21,17,19,16,18,14,17,17,14,14,12,11,10,13,13,13,12,16,14,15,15,14,15,14,14,14,10,11,9,11,14,14,10,12,14,13,14,14,9,10,9,8,9,11,10,7,7,6,4,7,6,5,7,8,8,10,13,14,12,12,11,9,10,10,7,9,5,6,7,9,7,6,7,8,8,8,5,6,5,7,10,8,10,12,13,13,16,17,12,12,9,8,8,6,6,6,4,5,2,1,0]],"max_predicted_aligned_error":31.75}]
\ No newline at end of file
diff --git a/utils/jalviewjs/site-resources/examples/exampleFile_2_7.jar b/utils/jalviewjs/site-resources/examples/exampleFile_2_7.jar
new file mode 100644 (file)
index 0000000..7cd9d77
Binary files /dev/null and b/utils/jalviewjs/site-resources/examples/exampleFile_2_7.jar differ
diff --git a/utils/jalviewjs/site-resources/examples/pae-example.jvp b/utils/jalviewjs/site-resources/examples/pae-example.jvp
new file mode 100644 (file)
index 0000000..605bb15
Binary files /dev/null and b/utils/jalviewjs/site-resources/examples/pae-example.jvp differ
diff --git a/utils/jalviewjs/site-resources/favicon.svg b/utils/jalviewjs/site-resources/favicon.svg
new file mode 100644 (file)
index 0000000..dbd550d
--- /dev/null
@@ -0,0 +1 @@
+<svg enable-background="new 0 0 595.238 595.238" viewBox="0 0 85.33334 85.03162" xmlns="http://www.w3.org/2000/svg"><g fill="#009ddc"><path d="m41.359375 67.466797v2.310547c0 1.568934-.325813 2.114634-.511719 2.298828-.185905.184194-.571623.359375-1.560547.359375-.862493 0-1.166971-.177707-1.615234-.59375s-.951574-1.190805-1.537109-2.203125l-1.009766-1.746094-9.507812 5.597656.80664 1.660157c.09877.203242.208902.403299.31836.603515h4.863281c-.21436-.254657-.41854-.517168-.607422-.791015l2.865234-1.685547c.352225.507078.58997 1.033962 1.087891 1.496094.406826.377583.891961.711149 1.433594.980468h6.111328c.413731-.213955.809161-.482368 1.166015-.835937 1.228619-1.217309 1.697266-3.001506 1.697266-5.140625v-2.310547zm7.585937 0v2.416015c0 2.635185-.575569 4.505007-1.535156 5.871094h4.484375c.68566-1.710547 1.050781-3.681339 1.050781-5.871094v-2.416015z"/><path d="m68.458984 42.208984c-.490203 0-.971429.02425-1.443359.06641v4.011718c.463751-.04588.93958-.07813 1.443359-.07813 3.500777 0 5.759933.841497 7.654297 3.076172v-5.146484c-2.225726-1.310123-4.818118-1.929688-7.654297-1.929688zm-.01758 6.449219c-.490843 0-.967865.0662-1.425781.179688v4.230468c.206361-.265056.615372-.410156 1.425781-.410156.816133 0 1.258111.134932 1.6875.412109.429389.277179.910451.782248 1.460938 1.744141l1.03125 1.804688 3.492187-2.181641v-4.716797l-2.240234 1.400391c-.467283-.54922-.981605-1.029566-1.574219-1.41211-1.142805-.737702-2.493206-1.050781-3.857422-1.050781zm-1.425781 6.001953v4.738282c.52435.253032 1.074902.500955 1.6875.761718l.0059.002 1.900391.794922c2.306016.961155 4.142125 1.911384 5.503906 2.927735v-4.742188c-1.21089-.668863-2.531521-1.28031-3.96289-1.876953h-.002l-1.878907-.785156-.0078-.0039-.0039-.002c-1.572843-.670423-2.58412-1.220357-3-1.589843-.103505-.09196-.181792-.161288-.242187-.22461zm0 8.53711v4.269531h-.171873l.736328.308594c1.724336.741076 3.004962 1.337069 3.625 1.8125.622979.477685.677735.537575.677734 1.261718 0 .430479-.110521.670124-.572265 1.003907-.461745.333782-1.337477.652343-2.580078.652343-3.045292 0-4.345247-1.26882-5.785157-3.5625l-.925781-1.476562h-.333984l-9.277344 5.222656.886719 1.714844c.239082.462545.5116.910242.800781 1.349609h5.308594c-.535932-.497236-1.028114-1.024909-1.451172-1.595703l2.771484-1.558594c1.096768 1.311815 2.47402 2.448714 4.173829 3.154297h7.617187c.402982-.18443.784558-.402224 1.138672-.658203 1.331187-.962278 2.228517-2.550154 2.228515-4.246094 0-1.80647-.970575-3.459007-2.24414-4.435547-1.273565-.976539-2.757101-1.574492-4.498047-2.322265l-.0078-.0039-1.90625-.796875h-.002c-.07398-.03062-.135978-.06297-.208984-.09375z"/></g><g fill="#c1d82f"><path d="m51.703125 43.056641v7.746093h-2.757813v9.1875h4v-16.933593zm-10.34375 7.746093v9.1875h4v-9.1875z"/><path d="m60.621094 44.433594c-3.251584 2.120822-5.261719 5.56981-5.261719 9.544922 0 2.284696.508449 4.297101 1.408203 6.011718h3.853516v-1.285156c-.816822-1.213228-1.261719-2.657515-1.261719-4.726562 0-1.652803.430107-3.135593 1.261719-4.353516z"/></g><path d="m32.057495 32.052265h20.91173v20.911402h-20.91173z" fill="#0084a9"/><g stroke-width="6.118289" transform="matrix(.16344439 0 0 .16344439 -6.339681 -6.269563)"><path d="m38.788 38.359.035 324.03h64.364v-259.669h357.138l-64.37-64.361z" fill="#ad208e"/><path d="m202.144 201.678h357.136l-61.647-61.637h-357.152v222.272h61.663z" fill="#f78e1e"/><path d="m560.882 558.607-.034-324.033h-64.347v259.686l-358.64-.024 64.364 64.359z" fill="#009ddc"/><path d="m395.688 395.282h-356.784l61.631 61.647h356.794v-222.283h-61.641z" fill="#c1d82f"/></g><g stroke-width="11.239007" transform="matrix(.18019416 0 0 .17573708 7.013441 2.85734)"><path d="m243.8 381.4c0 43.6-25.6 63.5-62.9 63.5-33.7 0-53.2-17.4-63.2-38.5l34.3-20.7c6.6 11.7 12.6 21.6 27.1 21.6 13.8 0 22.6-5.4 22.6-26.5v-143.1h42.1z"/><path d="m343.4 444.9c-39.1 0-64.4-18.6-76.7-43l34.3-19.8c9 14.7 20.8 25.6 41.5 25.6 17.4 0 28.6-8.7 28.6-20.8 0-14.4-11.4-19.5-30.7-28l-10.5-4.5c-30.4-12.9-50.5-29.2-50.5-63.5 0-31.6 24.1-55.6 61.6-55.6 26.8 0 46 9.3 59.8 33.7l-32.8 21c-7.2-12.9-15-18-27.1-18-12.3 0-20.1 7.8-20.1 18 0 12.6 7.8 17.7 25.9 25.6l10.5 4.5c35.8 15.3 55.9 31 55.9 66.2 0 37.8-29.8 58.6-69.7 58.6z"/></g></svg>
\ No newline at end of file
diff --git a/utils/jalviewjs/site-resources/images/jalview_logo_small.svg b/utils/jalviewjs/site-resources/images/jalview_logo_small.svg
new file mode 100644 (file)
index 0000000..494aafc
--- /dev/null
@@ -0,0 +1 @@
+<svg enable-background="new 0 0 595.238 595.238" viewBox="0 0 85.33334 85.03162" xmlns="http://www.w3.org/2000/svg"><g stroke-width="6.118289" transform="matrix(.16344439 0 0 .16344439 0 -.301719)"><path d="m196.13701 197.95102h127.944v127.942h-127.944z" fill="#0084a9"/><g transform="translate(-38.788 -36.512996)"><path d="m38.788 38.359.035 324.03h64.364v-259.669h357.138l-64.37-64.361z" fill="#ad208e"/><path d="m202.144 201.678h357.136l-61.647-61.637h-357.152v222.272h61.663z" fill="#f78e1e"/><path d="m560.882 558.607-.034-324.033h-64.347v259.686l-358.64-.024 64.364 64.359z" fill="#009ddc"/><path d="m395.688 395.282h-356.784l61.631 61.647h356.794v-222.283h-61.641z" fill="#c1d82f"/></g></g></svg>
\ No newline at end of file
diff --git a/utils/jalviewjs/site-resources/images/jv.gif b/utils/jalviewjs/site-resources/images/jv.gif
new file mode 100644 (file)
index 0000000..f5cca49
Binary files /dev/null and b/utils/jalviewjs/site-resources/images/jv.gif differ
diff --git a/utils/jalviewjs/site-resources/jalview_bin_Jalview-corenamespace.html b/utils/jalviewjs/site-resources/jalview_bin_Jalview-corenamespace.html
new file mode 100644 (file)
index 0000000..fbe7ad2
--- /dev/null
@@ -0,0 +1,64 @@
+<!DOCTYPE html>
+<html>
+<head>
+<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
+<title>SwingJS test Jalview</title><meta charset="utf-8" />
+<script src="swingjs/swingjs2.js"></script>
+<script>
+if (!self.SwingJS)alert('swingjs2.js was not found. It needs to be in swingjs folder in the same directory as ' + document.location.href)
+Info = {
+  code: null,
+  main: "jalview.bin.JalviewJS2",
+  core: "_jalview",
+  width: 850,
+  height: 550,
+  readyFunction: null,
+  serverURL: 'https://chemapps.stolaf.edu/jmol/jsmol/php/jsmol.php',
+  j2sPath: 'swingjs/j2s',
+  console:'sysoutdiv',
+  allowjavascript: true,
+  // all j2s_... values can be accessed in Jalview.getInstance().getJSInfoValue(key)
+  j2s_namespace: "jv",
+  j2s_overflow: true
+}
+</script>
+<style>
+@keyframes rotation {
+  from {
+    transform: rotate(0deg);
+  }
+  to {
+    transform: rotate(360deg);
+  }
+}
+.jv_jalviewjsSplashRotate {
+  animation: rotation 6s infinite cubic-bezier(0.4, 0.6, 0.6, 0.4);
+}
+.jv_jalviewjsSplashActive {
+  display: visible;
+  opacity: 100%;
+}
+.jv_jalviewjsSplashInactive {
+  opacity: 0%;
+  transition: opacity 1s;
+}
+.jv_jalviewjsSplashHidden {
+  display: none;
+}
+</style>
+</head>
+<body>
+<script>
+SwingJS.getApplet('testApplet', Info);
+getClassList = function(){J2S._saveFile('_j2sclasslist.txt', Clazz.ClassFilesLoaded.sort().join('\n'))};
+</script>
+<div style="position:absolute;left:10px;top:10px;width:640px;height:1200px;">
+<div id="sysoutdiv" contentEditable="true" style="padding: 5px; border: 1px solid green; width: 100%; height: 95%; overflow: auto; font-family: 'Fira Mono', monospace; font-size: 8pt;">
+<div id="jv:jalviewjsSplash" class="jv_jalviewjsSplashRotate jv_jalviewjsSplashActive" style="position: absolute; right: 1rem; top: 1rem; z-index: 1000;">
+<img style="width; 2rem; height: 2rem;" src="images/jalview_logo_small.svg" />
+</div>
+</div>
+This is System.out. <a href="javascript:testApplet._clearConsole()">clear it</a>  <a href='javascript:J2S.getProfile()'>start/stop profiling</a><br>see <a href=___j2sflags.htm>___j2sflags.htm</a> for SwingJS URL command-line options<br><a href="javascript:getClassList()">get _j2sClassList.txt</a>
+</div>
+</body>
+</html>
diff --git a/utils/jalviewjs/site-resources/jalview_bin_Jalview-namespace.html b/utils/jalviewjs/site-resources/jalview_bin_Jalview-namespace.html
new file mode 100644 (file)
index 0000000..779c967
--- /dev/null
@@ -0,0 +1,64 @@
+<!DOCTYPE html>
+<html>
+<head>
+<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
+<title>SwingJS test Jalview</title><meta charset="utf-8" />
+<script src="swingjs/swingjs2.js"></script>
+<script>
+if (!self.SwingJS)alert('swingjs2.js was not found. It needs to be in swingjs folder in the same directory as ' + document.location.href)
+Info = {
+  code: null,
+  main: "jalview.bin.Jalview",
+  core: "NONE",
+  width: 850,
+  height: 550,
+  readyFunction: null,
+  serverURL: 'https://chemapps.stolaf.edu/jmol/jsmol/php/jsmol.php',
+  j2sPath: 'swingjs/j2s',
+  console:'sysoutdiv',
+  allowjavascript: true,
+  // all j2s_... values can be accessed in Jalview.getInstance().getJSInfoValue(key)
+  j2s_namespace: "jv",
+  j2s_overflow: true
+}
+</script>
+<style>
+@keyframes rotation {
+  from {
+    transform: rotate(0deg);
+  }
+  to {
+    transform: rotate(360deg);
+  }
+}
+.jv_jalviewjsSplashRotate {
+  animation: rotation 6s infinite cubic-bezier(0.4, 0.6, 0.6, 0.4);
+}
+.jv_jalviewjsSplashActive {
+  display: visible;
+  opacity: 100%;
+}
+.jv_jalviewjsSplashInactive {
+  opacity: 0%;
+  transition: opacity 1s;
+}
+.jv_jalviewjsSplashHidden {
+  display: none;
+}
+</style>
+</head>
+<body>
+<script>
+SwingJS.getApplet('testApplet', Info);
+getClassList = function(){J2S._saveFile('_j2sclasslist.txt', Clazz.ClassFilesLoaded.sort().join('\n'))};
+</script>
+<div style="position:absolute;left:10px;top:10px;width:640px;height:1200px;">
+<div id="sysoutdiv" contentEditable="true" style="padding: 5px; border: 1px solid green; width: 100%; height: 95%; overflow: auto; font-family: 'Fira Mono', monospace; font-size: 8pt;">
+<div id="jv:jalviewjsSplash" class="jv_jalviewjsSplashRotate jv_jalviewjsSplashActive" style="position: absolute; right: 1rem; top: 1rem; z-index: 1000;">
+<img style="width; 2rem; height: 2rem;" src="images/jalview_logo_small.svg" />
+</div>
+</div>
+This is System.out. <a href="javascript:testApplet._clearConsole()">clear it</a>  <a href='javascript:J2S.getProfile()'>start/stop profiling</a><br>see <a href=___j2sflags.htm>___j2sflags.htm</a> for SwingJS URL command-line options<br><a href="javascript:getClassList()">get _j2sClassList.txt</a>
+</div>
+</body>
+</html>
index 27fd9a4..7ca150e 100644 (file)
@@ -16,7 +16,8 @@ Info = {
        serverURL: 'https://chemapps.stolaf.edu/jmol/jsmol/php/jsmol.php',
        j2sPath: 'swingjs/j2s',
        console:'sysoutdiv',
-       allowjavascript: true
+       allowjavascript: true,
+  namespace: ""
 }
 </script>
 </head>
diff --git a/utils/jalviewjs/some_commands.txt b/utils/jalviewjs/some_commands.txt
new file mode 100644 (file)
index 0000000..b7a122c
--- /dev/null
@@ -0,0 +1,19 @@
+java -Xmx2g -Dfile.encoding=UTF-8 -Duser.country=GB -Duser.language=en -Duser.variant -cp ./tools/closure-compiler-v20230802.jar com.google.javascript.jscomp.CommandLineRunner --compilation_level ADVANCED --warning_level QUIET --charset UTF-8 --js='./build/jalviewjs/site/swingjs/**.js' --js='!**/DatabaseReaction.js' --js='!**/FileTime.js' --js='!**/ChoiceFormat.js' --js='!**/TableView.js' --js='!**/JSVApplet.js' --js='!**/NativeMDLReactionReader.js' --js='!**/AsyncCallback.js' --js='!**/_ES6/jsutil.js' --js='!**/org/jmol/inchi/InChIJS.js' --js='!**/j2s/swingjs/JSUtil2.js' --js='!**/j2s/core/*.js' --js='!**/js/core/*' --js_output_file ./coreall-advanced.z.js > errors.txt
+
+grep JSC_UNDEFINED_VARIABLE errors.txt  | perl -n -e 'm/.* variable (\S+) is undeclared/ && print "var $1;\n";'  > externs.txt
+
+java -Xmx2g -Dfile.encoding=UTF-8 -Duser.country=GB -Duser.language=en -Duser.variant -cp ./tools/closure-compiler-v20230802.jar com.google.javascript.jscomp.CommandLineRunner --compilation_level ADVANCED --warning_level QUIET --charset UTF-8 --js='./build/jalviewjs/site/swingjs/**.js' --js='!**/DatabaseReaction.js' --js='!**/FileTime.js' --js='!**/ChoiceFormat.js' --js='!**/TableView.js' --js='!**/JSVApplet.js' --js='!**/NativeMDLReactionReader.js' --js='!**/AsyncCallback.js' --js='!**/_ES6/jsutil.js' --js='!**/org/jmol/inchi/InChIJS.js' --js='!**/j2s/swingjs/JSUtil2.js' --js='!**/j2s/core/*.js' --js='!**/js/core/*' --js_output_file ./coreall-advanced.z.js --externs=./externs.txt
+
+java -Xmx2g -Dfile.encoding=UTF-8 -Duser.country=GB -Duser.language=en -Duser.variant -cp ./tools/closure-compiler-v20230802.jar com.google.javascript.jscomp.CommandLineRunner --compilation_level SIMPLE --warning_level QUIET --charset UTF-8 --js='./build/jalviewjs/site/swingjs/**.js' --js='!**/DatabaseReaction.js' --js='!**/FileTime.js' --js='!**/ChoiceFormat.js' --js='!**/TableView.js' --js='!**/JSVApplet.js' --js='!**/NativeMDLReactionReader.js' --js='!**/AsyncCallback.js' --js='!**/_ES6/jsutil.js' --js='!**/org/jmol/inchi/InChIJS.js' --js='!**/j2s/swingjs/JSUtil2.js' --js='!**/j2s/core/*.js' --js='!**/js/core/*' --js_output_file ./coreall-simple.z.js --externs=./externs.txt
+
+cat ./build/jalviewjs/site/swingjs/j2s/com/actelion/research/chem/io/NativeMDLReactionReader.js ./build/jalviewjs/site/swingjs/j2s/com/actelion/research/chem/reaction/DatabaseReaction.js ./build/jalviewjs/site/swingjs/j2s/java/nio/file/attribute/FileTime.js ./build/jalviewjs/site/swingjs/j2s/java/text/ChoiceFormat.js ./build/jalviewjs/site/swingjs/j2s/javax/swing/text/html/TableView.js ./build/jalviewjs/site/swingjs/j2s/jme/js/AsyncCallback.js ./build/jalviewjs/site/swingjs/j2s/jspecview/appletjs/JSVApplet.js > problems1.js
+
+cat ./build/jalviewjs/site/swingjs/j2s/resources/_ES6/jsutil.js ./build/jalviewjs/site/swingjs/j2s/_ES6/jsutil.js ./build/jalviewjs/site/swingjs/j2s/org/jmol/inchi/InChIJS.js ./build/jalviewjs/site/swingjs/j2s/swingjs/JSUtil2.js > problems2.js
+
+cat ./build/jalviewjs/site/swingjs/js/core/coretop2.js ./coreall-simple.z.js ./problems1.js ./problems2.js ./build/jalviewjs/site/swingjs/js/core/corebottom2.js > ./build/jalviewjs/site/swingjs/j2s/core/coreall.z.js
+
+
+--
+
+
+perl -p -i -e 's/colorPtToFFRGB\$javajs_util_T3d/colorPtToFFRGB\$javajs_util_T3/' $(grep -rl 'colorPtToFFRGB$javajs_util_T3d' ./build/jalviewjs/site/swingjs/j2s/)
index 7c20d44..e7fb5e9 100644 (file)
@@ -15,7 +15,8 @@ Info = {
        serverURL: 'https://chemapps.stolaf.edu/jmol/jsmol/php/jsmol.php',
        j2sPath: 'swingjs/j2s',
        console:'sysoutdiv',
-       allowjavascript: true
+       allowjavascript: true,
+  namespace: ""
 }
 </script>
 </head>