Merge
authorprr
Mon, 04 Dec 2017 10:12:46 -0800
changeset 48270 f27aad5782da
parent 48269 40afd72303e9 (diff)
parent 48056 ee64cb4455a9 (current diff)
child 48271 95f173494fe9
Merge
test/langtools/tools/javac/6302184/T6302184.java
test/langtools/tools/javac/6302184/T6302184.out
--- a/src/java.desktop/macosx/classes/sun/lwawt/macosx/LWCToolkit.java	Mon Dec 04 19:10:15 2017 +0100
+++ b/src/java.desktop/macosx/classes/sun/lwawt/macosx/LWCToolkit.java	Mon Dec 04 10:12:46 2017 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -502,30 +502,18 @@
         }
     }
 
-    /**
-     * Determines which modifier key is the appropriate accelerator
-     * key for menu shortcuts.
-     * <p>
-     * Menu shortcuts, which are embodied in the
-     * {@code MenuShortcut} class, are handled by the
-     * {@code MenuBar} class.
-     * <p>
-     * By default, this method returns {@code Event.CTRL_MASK}.
-     * Toolkit implementations should override this method if the
-     * <b>Control</b> key isn't the correct key for accelerators.
-     * @return    the modifier mask on the {@code Event} class
-     *                 that is used for menu shortcuts on this toolkit.
-     * @see       java.awt.MenuBar
-     * @see       java.awt.MenuShortcut
-     * @since     1.1
-     */
     @Override
-    @SuppressWarnings("deprecation")
+    @Deprecated(since = "10")
     public int getMenuShortcutKeyMask() {
         return Event.META_MASK;
     }
 
     @Override
+    public int getMenuShortcutKeyMaskEx() {
+        return InputEvent.META_DOWN_MASK;
+    }
+
+    @Override
     public Image getImage(final String filename) {
         final Image nsImage = checkForNSImage(filename);
         if (nsImage != null) {
--- a/src/java.desktop/share/classes/java/awt/MenuBar.java	Mon Dec 04 19:10:15 2017 +0100
+++ b/src/java.desktop/share/classes/java/awt/MenuBar.java	Mon Dec 04 10:12:46 2017 -0800
@@ -377,7 +377,6 @@
      * keydown).  Returns true if there is an associated
      * keyboard event.
      */
-    @SuppressWarnings("deprecation")
     boolean handleShortcut(KeyEvent e) {
         // Is it a key event?
         int id = e.getID();
@@ -386,8 +385,8 @@
         }
 
         // Is the accelerator modifier key pressed?
-        int accelKey = Toolkit.getDefaultToolkit().getMenuShortcutKeyMask();
-        if ((e.getModifiers() & accelKey) == 0) {
+        int accelKey = Toolkit.getDefaultToolkit().getMenuShortcutKeyMaskEx();
+        if ((e.getModifiersEx() & accelKey) == 0) {
             return false;
         }
 
--- a/src/java.desktop/share/classes/java/awt/MenuShortcut.java	Mon Dec 04 19:10:15 2017 +0100
+++ b/src/java.desktop/share/classes/java/awt/MenuShortcut.java	Mon Dec 04 10:12:46 2017 -0800
@@ -24,6 +24,7 @@
  */
 package java.awt;
 
+import java.awt.event.InputEvent;
 import java.awt.event.KeyEvent;
 
 /**
@@ -51,7 +52,7 @@
  * only work if the current keyboard layout produces a corresponding letter.
  * <p>
  * The accelerator key is platform-dependent and may be obtained
- * via {@link Toolkit#getMenuShortcutKeyMask}.
+ * via {@link Toolkit#getMenuShortcutKeyMaskEx()}.
  *
  * @author Thomas Ball
  * @since 1.1
@@ -180,16 +181,15 @@
      * @return a string representation of this MenuShortcut.
      * @since 1.1
      */
-    @SuppressWarnings("deprecation")
     public String toString() {
         int modifiers = 0;
         if (!GraphicsEnvironment.isHeadless()) {
-            modifiers = Toolkit.getDefaultToolkit().getMenuShortcutKeyMask();
+            modifiers = Toolkit.getDefaultToolkit().getMenuShortcutKeyMaskEx();
         }
         if (usesShiftModifier()) {
-            modifiers |= Event.SHIFT_MASK;
+            modifiers |= InputEvent.SHIFT_DOWN_MASK;
         }
-        return KeyEvent.getKeyModifiersText(modifiers) + "+" +
+        return InputEvent.getModifiersExText(modifiers) + "+" +
                KeyEvent.getKeyText(key);
     }
 
--- a/src/java.desktop/share/classes/java/awt/Toolkit.java	Mon Dec 04 19:10:15 2017 +0100
+++ b/src/java.desktop/share/classes/java/awt/Toolkit.java	Mon Dec 04 10:12:46 2017 -0800
@@ -29,7 +29,23 @@
 import java.awt.dnd.DragGestureListener;
 import java.awt.dnd.DragGestureRecognizer;
 import java.awt.dnd.DragSource;
-import java.awt.event.*;
+import java.awt.event.AWTEventListener;
+import java.awt.event.AWTEventListenerProxy;
+import java.awt.event.ActionEvent;
+import java.awt.event.AdjustmentEvent;
+import java.awt.event.ComponentEvent;
+import java.awt.event.ContainerEvent;
+import java.awt.event.FocusEvent;
+import java.awt.event.HierarchyEvent;
+import java.awt.event.InputEvent;
+import java.awt.event.InputMethodEvent;
+import java.awt.event.InvocationEvent;
+import java.awt.event.ItemEvent;
+import java.awt.event.KeyEvent;
+import java.awt.event.MouseEvent;
+import java.awt.event.PaintEvent;
+import java.awt.event.TextEvent;
+import java.awt.event.WindowEvent;
 import java.awt.im.InputMethodHighlight;
 import java.awt.image.ColorModel;
 import java.awt.image.ImageObserver;
@@ -40,15 +56,22 @@
 import java.io.File;
 import java.io.FileInputStream;
 import java.net.URL;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.EventListener;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.MissingResourceException;
 import java.util.Properties;
 import java.util.ResourceBundle;
-import java.util.StringTokenizer;
+import java.util.ServiceLoader;
+import java.util.Set;
 import java.util.WeakHashMap;
+import java.util.stream.Collectors;
+
+import javax.accessibility.AccessibilityProvider;
 
 import sun.awt.AWTAccessor;
 import sun.awt.AWTPermissions;
@@ -57,14 +80,6 @@
 import sun.awt.PeerEvent;
 import sun.awt.SunToolkit;
 
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-import java.util.Arrays;
-import java.util.ServiceLoader;
-import java.util.Set;
-import java.util.stream.Collectors;
-import javax.accessibility.AccessibilityProvider;
-
 /**
  * This class is the abstract superclass of all actual
  * implementations of the Abstract Window Toolkit. Subclasses of
@@ -1065,9 +1080,11 @@
      * @see       java.awt.GraphicsEnvironment#isHeadless
      * @see       java.awt.MenuBar
      * @see       java.awt.MenuShortcut
+     * @deprecated It is recommended that extended modifier keys and
+     *             {@link #getMenuShortcutKeyMaskEx()} be used instead
      * @since     1.1
      */
-    @SuppressWarnings("deprecation")
+    @Deprecated(since = "10")
     public int getMenuShortcutKeyMask() throws HeadlessException {
         GraphicsEnvironment.checkHeadless();
 
@@ -1075,6 +1092,32 @@
     }
 
     /**
+     * Determines which extended modifier key is the appropriate accelerator
+     * key for menu shortcuts.
+     * <p>
+     * Menu shortcuts, which are embodied in the {@code MenuShortcut} class, are
+     * handled by the {@code MenuBar} class.
+     * <p>
+     * By default, this method returns {@code InputEvent.CTRL_DOWN_MASK}.
+     * Toolkit implementations should override this method if the
+     * <b>Control</b> key isn't the correct key for accelerators.
+     *
+     * @return the modifier mask on the {@code InputEvent} class that is used
+     *         for menu shortcuts on this toolkit
+     * @throws HeadlessException if GraphicsEnvironment.isHeadless() returns
+     *         true
+     * @see java.awt.GraphicsEnvironment#isHeadless
+     * @see java.awt.MenuBar
+     * @see java.awt.MenuShortcut
+     * @since 10
+     */
+    public int getMenuShortcutKeyMaskEx() throws HeadlessException {
+        GraphicsEnvironment.checkHeadless();
+
+        return InputEvent.CTRL_DOWN_MASK;
+    }
+
+    /**
      * Returns whether the given locking key on the keyboard is currently in
      * its "on" state.
      * Valid key codes are
--- a/src/java.desktop/share/classes/java/awt/doc-files/AWTThreadIssues.html	Mon Dec 04 19:10:15 2017 +0100
+++ b/src/java.desktop/share/classes/java/awt/doc-files/AWTThreadIssues.html	Mon Dec 04 10:12:46 2017 -0800
@@ -1,5 +1,11 @@
+<!doctype html>
+<html lang="en">
+<head>
+  <meta charset="utf-8"/>
+  <title>AWT Threading Issues</title>
+</head>
 <!--
- Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved.
+ Copyright (c) 2002, 2017, Oracle and/or its affiliates. All rights reserved.
  DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 
  This code is free software; you can redistribute it and/or modify it
@@ -23,16 +29,11 @@
  questions.
 -->
 
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-<title></title>
-</head>
-<body bgcolor=white>
+<body>
 
-<h1 align=center>AWT Threading Issues</h1>
+<h1>AWT Threading Issues</h1>
 
-<a name="ListenersThreads"></a>
+<a id="ListenersThreads"></a>
 <h2>Listeners and threads</h2>
 
 Unless otherwise noted all AWT listeners are notified on the event
@@ -41,7 +42,7 @@
 <br>For example, if a key listeners is added from another key listener, the
 newly added listener is only notified on subsequent key events.
 
-<a name="Autoshutdown"></a>
+<a id="Autoshutdown"></a>
 <h2>Auto-shutdown</h2>
 
 According to
@@ -53,7 +54,7 @@
 one of two things happens:
 <ul>
   <li> All the threads that are not daemon threads terminate.
-  <li> Some thread invokes the <code>exit</code> method of class 
+  <li> Some thread invokes the <code>exit</code> method of class
   <code>Runtime</code> or class <code>System</code>, and the exit
   operation is permitted by the security manager.
 </ul>
@@ -84,13 +85,15 @@
        posted to the <code>EventQueue</code> can be coalesced) are
        dispatched:
        <ul>
-           <li> Sequentially.
-           <dl><dd> That is, it is not permitted that several events from
+           <li>
+           <dl><dt>Sequentially.
+             <dd> That is, it is not permitted that several events from
 	        this queue are dispatched simultaneously. </dd></dl>
-           <li> In the same order as they are enqueued.
-           <dl><dd> That is, if <code>AWTEvent</code>&nbsp;A is enqueued
+           <li>
+           <dl><dt>In the same order as they are enqueued.
+             <dd> That is, if <code>AWTEvent</code>&nbsp;A is enqueued
 	        to the <code>EventQueue</code> before
-		<code>AWTEvent</code>&nbsp;B then event B will not be 
+		<code>AWTEvent</code>&nbsp;B then event B will not be
                 dispatched before event A.</dd></dl>
        </ul>
   <li> There is at least one alive non-daemon thread while there is at
@@ -98,7 +101,7 @@
        application (see
        <a href="../Component.html#isDisplayable()"><code>Component.isDisplayable</code></a>).
 </ul>
-The implications of the third restriction are as follows: 
+The implications of the third restriction are as follows:
 <ul>
   <li> The JVM will exit if some thread invokes the <code>exit</code>
   method of class <code>Runtime</code> or class <code>System</code>
@@ -108,8 +111,8 @@
   displayable component.
 </ul>
 It depends on the implementation if and when the non-daemon helper
-threads are terminated once all components are made undisplayable. 
-The implementation-specific details are given below. 
+threads are terminated once all components are made undisplayable.
+The implementation-specific details are given below.
 
 <h3>
 Implementation-dependent behavior.
@@ -147,7 +150,7 @@
 </ul>
 Note, that while an application following these recommendations will
 exit cleanly under normal conditions, it is not guaranteed that it
-will exit cleanly in all cases. Two examples: 
+will exit cleanly in all cases. Two examples:
 <ul>
   <li> Other packages can create displayable components for internal
        needs and never make them undisplayable. See
@@ -156,7 +159,7 @@
 <a href="http://bugs.sun.com/view_bug.do?bug_id=4671025">
 4671025</a>, and
 <a href="http://bugs.sun.com/view_bug.do?bug_id=4465537">
-4465537</a>. 
+4465537</a>.
   <li> Both Microsoft Windows and X11 allow an application to send native
        events to windows that belong to another application. With this
        feature it is possible to write a malicious program that will
@@ -165,10 +168,10 @@
 </ul>
 On the other hand, if you require the JVM to continue running even after
 the application has made all components undisplayable you should start a
-non-daemon thread that blocks forever. 
+non-daemon thread that blocks forever.
 
 <pre>
-        <...>
+        &lt;...&gt;
         Runnable r = new Runnable() {
             public void run() {
                 Object o = new Object();
@@ -183,7 +186,7 @@
         Thread t = new Thread(r);
         t.setDaemon(false);
         t.start();
-        <...>
+        &lt;...&gt;
 </pre>
 
 <cite>The Java&trade; Virtual Machine Specification</cite>
--- a/src/java.desktop/share/classes/java/awt/doc-files/DesktopProperties.html	Mon Dec 04 19:10:15 2017 +0100
+++ b/src/java.desktop/share/classes/java/awt/doc-files/DesktopProperties.html	Mon Dec 04 10:12:46 2017 -0800
@@ -1,5 +1,11 @@
+<!doctype html>
+<html lang="en">
+<head>
+  <meta charset="utf-8"/>
+  <title>AWT Desktop Properties</title>
+</head>
 <!--
- Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved.
+ Copyright (c) 2005, 2017, Oracle and/or its affiliates. All rights reserved.
  DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 
  This code is free software; you can redistribute it and/or modify it
@@ -23,14 +29,9 @@
  questions.
 -->
 
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-<title></title>
-</head>
-<body bgcolor=white>
+<body>
 
-<h1 align=center>AWT Desktop Properties</h1>
+<h1>AWT Desktop Properties</h1>
 
 The following refers to standard AWT desktop properties that
 may be obtained via the
@@ -76,7 +77,7 @@
 </table>
 
 <h2>Desktop Font Rendering Hints</h2>
-<b>Desktop Property: <A name="awt.font.desktophints">"awt.font.desktophints"</A></b>
+<b>Desktop Property: <a id="awt.font.desktophints">"awt.font.desktophints"</A></b>
 <p>
 Modern desktops support various forms of text antialiasing (font smoothing).
 <p>
@@ -116,7 +117,7 @@
 using a <a href="../../beans/PropertyChangeListener.html">
 <code>PropertyChangeListener</code></a> :
 <pre><code>
-tk.addPropertyChangeListener("awt.font.desktophints", pcl); 
+tk.addPropertyChangeListener("awt.font.desktophints", pcl);
 </code></pre>
 Listening for changes is recommended as users can, on rare occasions,
 reconfigure a desktop environment whilst applications are running
@@ -194,7 +195,7 @@
 and dynamic updates will not be available. This is a typical behaviour if
 the JDK does not recognise the desktop environment, or it is one which
 has no such settings. The <b>Headless</b> toolkit is one such example.
-Therefore it is important to test against null before using the map. 
+Therefore it is important to test against null before using the map.
 <br><br>
 <li>If non-null the value will be a <code>Map</code> of
 <code>RenderingHints</code> such that every key is an instance of
@@ -229,7 +230,7 @@
 the per-device property name.
 </ul>
 <h2>Mouse Functionality</h2>
-<b>Desktop Property: <A name="sun.awt.enableExtraMouseButtons">"sun.awt.enableExtraMouseButtons"</A></b>
+<b>Desktop Property: <a id="sun.awt.enableExtraMouseButtons">"sun.awt.enableExtraMouseButtons"</A></b>
 <p>
 This property determines if events from extra mouse buttons (if they are exist and are
 enabled by the underlying operating system) are allowed to be processed and posted into
@@ -245,7 +246,7 @@
 Current value could also be queried using getDesktopProperty("sun.awt.enableExtraMouseButtons")
 method.
 <br>
-If the property is set to {@code true} then 
+If the property is set to {@code true} then
 <ul>
 <li> it is still legal to create {@code MouseEvent} objects with
 standard buttons and, if the mouse has more
@@ -256,13 +257,13 @@
 and {@code Robot.mouseRelease()} methods and, if the mouse has more then three buttons,
 it is also legal to use masks for existing extended mouse buttons.
 That way, if there are more then three buttons on the mouse then it is allowed to
-use button masks corresponding to the buttons 
+use button masks corresponding to the buttons
 in the range from 1 up to {@link java.awt.MouseInfo#getNumberOfButtons() getNumberOfButtons()}
 </ul>
 <br>
-If the property is set to {@code false} then 
+If the property is set to {@code false} then
 <ul>
-<li> it is legal to create {@code MouseEvent} objects with standard buttons 
+<li> it is legal to create {@code MouseEvent} objects with standard buttons
 only: {@code NOBUTTON}, {@code BUTTON1}, {@code BUTTON2} and
 {@code BUTTON3}
 <li> it is legal to use standard button masks only:
--- a/src/java.desktop/share/classes/java/awt/doc-files/FocusSpec.html	Mon Dec 04 19:10:15 2017 +0100
+++ b/src/java.desktop/share/classes/java/awt/doc-files/FocusSpec.html	Mon Dec 04 10:12:46 2017 -0800
@@ -1,5 +1,11 @@
+<!doctype html>
+<html lang="en">
+<head>
+  <meta charset="utf-8"/>
+  <title>The AWT Focus Subsystem</title>
+</head>
 <!--
- Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved.
+ Copyright (c) 2001, 2017, Oracle and/or its affiliates. All rights reserved.
  DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 
  This code is free software; you can redistribute it and/or modify it
@@ -23,15 +29,8 @@
  questions.
 -->
 
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-
-<html>
-    <head>
-       <title>The AWT Focus Subsystem</title>
-    </head>
-
-    <body bgcolor="white">
-      <h1 align=center>The AWT Focus Subsystem</h1>
+    <body>
+      <h1>The AWT Focus Subsystem</h1>
 
     <p>
       Prior to Java 2 Standard Edition, JDK 1.4, the AWT focus subsystem
@@ -57,8 +56,8 @@
       determining the "opposite" Component involved in the focus or
       activation change. For example, when a Component received a FOCUS_LOST
       event, it had no way of knowing which Component was gaining
-      focus. Since Microsoft Windows provides this functionality for free, 
-      developers migrating from Microsoft Windows C/C++ or Visual Basic to 
+      focus. Since Microsoft Windows provides this functionality for free,
+      developers migrating from Microsoft Windows C/C++ or Visual Basic to
       Java had been frustrated by the omission.
     <p>
       To address these and other deficiencies, we have designed a new focus
@@ -101,7 +100,7 @@
       <li><a href=#Incompatibilities>Incompatibilities with Previous Releases</a>
      </ul>
 
-      <a name="Overview"></a>
+      <a id="Overview"></a>
       <h3>Overview of KeyboardFocusManager</h3>
     <p>
       The focus model is centralized around a single class,
@@ -160,7 +159,7 @@
           define new focus cycle but only modifies the order by which its
           children are traversed "forward" and "backward". Focus traversal
           policy provider can be set using
-          <code>setFocusTraversalPolicyProvider</code> on the Container. 
+          <code>setFocusTraversalPolicyProvider</code> on the Container.
     </ol>
 
     <p>
@@ -180,7 +179,7 @@
       descendants.
 
      <p>
-     Here is an example:<br> <img src="FocusCycle.gif" align=middle 
+     Here is an example:<br> <img src="FocusCycle.gif"
      alt="Three groups as described below: ABCF BDE and DGH. "><br>
 
      <p>Assume the following:
@@ -193,7 +192,7 @@
         <li><b>G</b>, <b>H</b>, <b>E</b>, and <b>F</b> are all
             <code>Component</code>s.
       </ul>
-  
+
      There are a total of three focus cycle roots in this example:
 
       <ol>
@@ -213,7 +212,7 @@
 implementation in the <code>DefaultKeyboardFocusManager</code> class.
 
 
-<a name="BrowserContexts"></a>
+<a id="BrowserContexts"></a>
 <h3>KeyboardFocusManager and Browser Contexts</h3>
 <p>
 Some browsers partition applets in different code bases into separate
@@ -229,7 +228,7 @@
 owner, focused Window, or active Window, per ClassLoader.
 
 
-<a name="KeyEventDispatcher"></a>
+<a id="KeyEventDispatcher"></a>
 <h3>KeyEventDispatcher and KeyEventPostProcessor</h3>
 <p>
 While the user's KeyEvents should generally be delivered to the focus
@@ -272,7 +271,7 @@
 KeyEventPostProcessor, and similar restrictions apply to its use in
 that capacity.
 
-<a name="FocusEventAndWindowEvent"></a>
+<a id="FocusEventAndWindowEvent"></a>
 <h3>FocusEvent and WindowEvent</h3>
 <p>
 The AWT defines the following six event types central to the focus
@@ -296,7 +295,7 @@
         not a Frame or Dialog) when it is no longer the active Window.
   </ol>
 
-<a name="EventDelivery"></a>
+<a id="EventDelivery"></a>
 <h3>Event Delivery</h3>
 <p>
 If the focus is not in java application and the user clicks on a focusable
@@ -347,7 +346,7 @@
 and VetoableChangeListener</a>.
 
 
-<a name="OppositeComponents"></a>
+<a id="OppositeComponents"></a>
 <h3>Opposite Components and Windows</h3>
 <p>
 Each event includes information about the "opposite" Component or
@@ -371,7 +370,7 @@
 using the opposite Component of a focus change that occurred within a
 top-level Window.
 
-<a name="TemporaryFocusEvents"></a>
+<a id="TemporaryFocusEvents"></a>
 <h3>Temporary FocusEvents</h3>
 <p>
 <code>FOCUS_GAINED</code> and <code>FOCUS_LOST</code> events are
@@ -380,7 +379,7 @@
 Temporary <code>FOCUS_LOST</code> events are sent when a Component is
 losing the focus, but will regain the focus shortly. These events
 can be useful when focus changes are used as triggers for validation
-of data. For instance, a text Component may want to commit its 
+of data. For instance, a text Component may want to commit its
 contents when the user begins interacting with another Component,
 and can accomplish this by responding to <code>FOCUS_LOST</code> events.
 However, if the <code>FocusEvent</code> received is temporary,
@@ -402,8 +401,8 @@
 When a Component receives a temporary <code>FOCUS_LOST</code> event,
 the event's opposite Component (if any) may receive a temporary
 <code>FOCUS_GAINED</code> event, but could also receive a permanent
-<code>FOCUS_GAINED</code> event. Showing a Menu or PopupMenu, or 
-clicking or dragging a Scrollbar, should generate a temporary 
+<code>FOCUS_GAINED</code> event. Showing a Menu or PopupMenu, or
+clicking or dragging a Scrollbar, should generate a temporary
 <code>FOCUS_GAINED</code> event. Changing the focused Window,
 however, will yield a permanent <code>FOCUS_GAINED</code> event
 for the new focus owner.
@@ -416,7 +415,7 @@
 Components. This method is not intended for general use, but exists
 instead as a hook for lightweight Component libraries, such as Swing.
 
-<a name="FocusTraversal"></a>
+<a id="FocusTraversal"></a>
 <h3>Focus Traversal</h3>
 <p>
 Each Component defines its own Set of focus traversal keys for a given
@@ -428,11 +427,11 @@
 recursively inherits a Set from its parent, and ultimately from a
 context-wide default set on the current <code>KeyboardFocusManager</code>.
 <p>
-Using the <code>AWTKeyStroke</code> API, client code can specify 
-on which of two specific KeyEvents, <code>KEY_PRESSED</code> or 
+Using the <code>AWTKeyStroke</code> API, client code can specify
+on which of two specific KeyEvents, <code>KEY_PRESSED</code> or
 <code>KEY_RELEASED</code>, the focus traversal operation will occur.
 Regardless of which KeyEvent is specified, however, all KeyEvents
-related to the focus traversal key, including the associated 
+related to the focus traversal key, including the associated
 <code>KEY_TYPED</code> event, will be consumed, and will not be
 dispatched to any Component. It is a runtime error to specify a
 <code>KEY_TYPED</code> event as mapping to a focus traversal operation,
@@ -475,7 +474,7 @@
 normal focus traversal. Thus, the current
 <code>KeyboardFocusManager</code> maintains a reference to the
 "current" focus cycle root, which is global across all contexts. The
-current focus cycle root is used to resolve the ambiguity.  
+current focus cycle root is used to resolve the ambiguity.
 <p>
 For up-cycle traversal, the focus owner is set to the current focus
 owner's focus cycle root, and the current focus cycle root is set to
@@ -491,10 +490,10 @@
 root, then no focus traversal operation occurs.
 
 
-<a name="FocusTraversalPolicy"></a>
+<a id="FocusTraversalPolicy"></a>
 <h3>FocusTraversalPolicy</h3>
 <p>
-  
+
 A <code>FocusTraversalPolicy</code> defines the order in which Components within
 a particular focus cycle root or focus traversal policy provider are
 traversed. Instances of <code>FocusTraversalPolicy</code> can be shared across
@@ -524,7 +523,7 @@
   </ol>
 
 <p>
-A <code>FocusTraversalPolicy</code> may optionally provide an 
+A <code>FocusTraversalPolicy</code> may optionally provide an
 algorithm for the following:
   <blockquote>
   Given a Window, the "initial" Component in that Window. The initial
@@ -551,7 +550,7 @@
 ancestor. Top-levels initialize their focus traversal policies using the context
 default policy. The context default policy is established by using
 KeyboardFocusManager.  <code>setDefaultFocusTraversalPolicy</code>.
-  
+
 <p>
 AWT provides two standard <code>FocusTraversalPolicy</code>
 implementations for use by client code.
@@ -573,14 +572,14 @@
     <li><code>DefaultFocusTraversalPolicy</code>: A subclass of
         <code>ContainerOrderFocusTraversalPolicy</code> which redefines
         the fitness test.  If client code has explicitly set the
-        focusability of a Component by either overriding 
+        focusability of a Component by either overriding
         <code>Component.isFocusTraversable()</code> or
         <code>Component.isFocusable()</code>, or by calling
-        <code>Component.setFocusable(boolean)</code>, then a 
+        <code>Component.setFocusable(boolean)</code>, then a
         <code>DefaultFocusTraversalPolicy</code> behaves exactly
         like a <code>ContainerOrderFocusTraversalPolicy</code>. If,
         however, the Component is relying on default focusability, then a
-        <code>DefaultFocusTraversalPolicy</code> will reject all 
+        <code>DefaultFocusTraversalPolicy</code> will reject all
         Components with non-focusable peers.
         <br>
         The focusability of a peer is implementation-dependent. Sun
@@ -627,7 +626,7 @@
   </ol>
 <p>
 The figure below shows an implicit focus transfer:
-<br><img src="ImplicitFocusTransfer.gif" align=middle alt="Implicit focus transfer."><br>
+<br><img src="ImplicitFocusTransfer.gif" alt="Implicit focus transfer."><br>
 
 Assume the following:
  <ul>
@@ -653,7 +652,7 @@
 All other applications, including pure AWT applications, will use
 <code>DefaultFocusTraversalPolicy</code> by default.
 
-<a name="FocusTraversalPolicyProviders"></a>
+<a id="FocusTraversalPolicyProviders"></a>
 <h3>Focus Traversal Policy Providers</h3>
 <p>
   A Container that isn't a focus cycle root has an option to provide a
@@ -674,7 +673,7 @@
   If focus traversal policy provider property is set on a focus cycle root, it
   isn't considered a focus traversal policy provider and behaves just like any
   other focus cycle root.
-  
+
 <p>
   The main difference between focus cycle roots and focus traversal policy
   providers is that the latter allow focus to enter and leave them just as all other
@@ -740,7 +739,7 @@
         </ul>
   </ul>
 
-<a name="ProgrammaticTraversal"></a>
+<a id="ProgrammaticTraversal"></a>
 <h3>Programmatic Traversal</h3>
 <p>
 In addition to user-initiated focus traversal, client code can
@@ -811,7 +810,7 @@
 unchanged.
 
 
-<a name="Focusability"></a>
+<a id="Focusability"></a>
 <h3>Focusability</h3>
 <p>
 A focusable Component can become the focus owner ("focusability") and
@@ -825,7 +824,7 @@
 change this default by calling Component.setFocusable(boolean).
 
 
-<a name="FocusableWindows"></a>
+<a id="FocusableWindows"></a>
 <h3>Focusable Windows</h3>
 <p>
 To support palette windows and input methods, client code can prevent
@@ -877,7 +876,7 @@
 all such focus change requests will fail. In this case, the global
 focus owner will be cleared and the focused Window will remain unchanged.
 
-<a name="RequestingFocus"></a>
+<a id="RequestingFocus"></a>
 <h3>Requesting Focus</h3>
 
 <p>
@@ -949,7 +948,7 @@
 a temporary state.
 See <a href="#TemporaryFocusEvents">Temporary FocusEvents</a>
 
-<a name="FocusAndPropertyChangeListener"></a>
+<a id="FocusAndPropertyChangeListener"></a>
 <h3>Focus and PropertyChangeListener</h3>
 <p>
 Client code can listen to changes in context-wide focus state, or to
@@ -957,7 +956,7 @@
 PropertyChangeListeners.
 <p>
 The <code>KeyboardFocusManager</code> supports the following properties:
-  
+
   <ol>
     <li><code>focusOwner</code>: the focus owner
     <li><code>focusedWindow</code>: the focused Window
@@ -977,7 +976,7 @@
 <p>
 A <code>PropertyChangeListener</code> installed on the current
 <code>KeyboardFocusManager</code> will only see these changes within
-the <code>KeyboardFocusManager</code>'s context, even though the 
+the <code>KeyboardFocusManager</code>'s context, even though the
 focus owner, focused Window, active Window, and current focus cycle
 root comprise the global focus state shared by all contexts.
 We believe this is less intrusive than requiring client code to pass
@@ -1001,7 +1000,7 @@
 following focus-related properties:
 
   <ol>
-    <li><code>downCycleFocusTraversalKeys</code>: the Container's Set of 
+    <li><code>downCycleFocusTraversalKeys</code>: the Container's Set of
         <code>DOWN_CYCLE_TRAVERSAL_KEYS</code>
     <li><code>focusTraversalPolicy</code>: the Container's focus
         traversal policy
@@ -1020,10 +1019,10 @@
 <code>focusCycleRoot</code> property.
 A Window is always a focus cycle root; this property cannot change.
 <p>
-<a name="FocusAndVetoableChangeListener"></a>
+<a id="FocusAndVetoableChangeListener"></a>
 <h3>Focus and VetoableChangeListener</h3>
 <p>
-The <code>KeyboardFocusManager</code> also supports 
+The <code>KeyboardFocusManager</code> also supports
 <code>VetoableChangeListener</code>s for the following properties:
 
   <ol>
@@ -1054,13 +1053,13 @@
 <code>KeyboardFocusManager</code> is free to attempt to
 dispatch this event and it is the responsibility of the
 <code>VetoableChangeListener</code> to veto it as well. In addition,
-during processing of the <code>FOCUS_GAINED</code> event, the 
+during processing of the <code>FOCUS_GAINED</code> event, the
 <code>KeyboardFocusManager</code> may attempt to resync the global
 focus state by synthesizing another <code>FOCUS_LOST</code> event.
 This event must be vetoed just as the first <code>FOCUS_LOST</code> event was.
 <p>
-A <code>KeyboardFocusManager</code> may not hold any locks while 
-notifying <code>PropertyChangeListener</code>s of a state change. 
+A <code>KeyboardFocusManager</code> may not hold any locks while
+notifying <code>PropertyChangeListener</code>s of a state change.
 This requirement is relaxed for <code>VetoableChangeListeners</code>,
 however. Therefore, client-definied <code>VetoableChangeListener</code>s
 should avoid acquiring additional locks inside
@@ -1089,13 +1088,13 @@
 vetoed focus changes and recovery attempts.
 
 
-<a name="ZOrder"></a>
+<a id="ZOrder"></a>
 <h3>Z-Order</h3>
 <p>
 On some native windowing systems, the Z-order of a Window can affect
-its focused or active (if applicable) state. On Microsoft Windows, the 
-top-most Window is naturally the focused Window as well. However, on 
-Solaris, many window managers use a point-to-focus model that ignores 
+its focused or active (if applicable) state. On Microsoft Windows, the
+top-most Window is naturally the focused Window as well. However, on
+Solaris, many window managers use a point-to-focus model that ignores
 Z-order in determining the focused Window.
 
 When focusing or activating Windows, the AWT adheres to the UI
@@ -1114,8 +1113,8 @@
 Microsoft Windows and Solaris is as follows:
   <ul>
      <li><code>Window.toFront()</code>:<br>
-        <b>Microsoft Windows</b>: The Window is moved to front, if possible. 
-        While we will always be able to move this Window in front of other 
+        <b>Microsoft Windows</b>: The Window is moved to front, if possible.
+        While we will always be able to move this Window in front of other
         Windows in the same VM, Windows 98 and Windows 2000 do not allow an
         application to bring any of its windows to the front unless one
         of that application's windows is already in the foreground. In
@@ -1129,15 +1128,15 @@
         window manager, the focused Window will remain unchanged.
 
      <li><code>Window.toBack()</code>:<br>
-        <b>Microsoft Windows</b>: The Window is moved to back. Note however 
-        that Microsoft Windows insists that an owned Window always be in 
-        front of all of its recursive owners. Thus, after the completion of 
-        this operation, the Window may not be the lowest Java Window in the 
-        Z-order. If the Window, or any of its owners, was the focused Window, 
+        <b>Microsoft Windows</b>: The Window is moved to back. Note however
+        that Microsoft Windows insists that an owned Window always be in
+        front of all of its recursive owners. Thus, after the completion of
+        this operation, the Window may not be the lowest Java Window in the
+        Z-order. If the Window, or any of its owners, was the focused Window,
         then the focused Window is reset to the top-most Window in the VM.
       <br>
-        <b>Solaris</b>: The Window is moved to back. Like Microsoft Windows, 
-        some window managers insist than an owned Window always be in front 
+        <b>Solaris</b>: The Window is moved to back. Like Microsoft Windows,
+        some window managers insist than an owned Window always be in front
         of all of its recursive owners. Thus, after the completion of this
         operation, the Window may not be the lowest Java Window in the
         Z-order. If the Window was the focused Window, it will lose
@@ -1156,7 +1155,7 @@
 
      <li><code>Window.hide()/Window.setVisible(false)/Window.dispose()/
     Frame.setState(ICONIFIED)</code>:<br>
-        <b>Microsoft Windows</b>: If the Window was the focused Window, the focused 
+        <b>Microsoft Windows</b>: If the Window was the focused Window, the focused
         Window is reset to a window chosen by the OS, or to no window. The
         window may be in a native application, or a Java application in
         another VM.
@@ -1169,7 +1168,7 @@
         application in another VM.
   </ul>
 
-<a name="ReplacingDefaultKeyboardFocusManager"></a>
+<a id="ReplacingDefaultKeyboardFocusManager"></a>
 <h3>Replacing DefaultKeyboardFocusManager</h3>
 <p>
 <code>KeyboardFocusManager</code>s are pluggable at the browser context
@@ -1238,7 +1237,7 @@
           heavyweight Container, not the focus owner.
       <li>A <code>FOCUS_LOST</code> event must be retargeted to the focus
           owner. Again, this is necessary because the peer layer is
-          unaware of lightweight Components. 
+          unaware of lightweight Components.
       <li>A <code>WINDOW_LOST_FOCUS</code> event must be retargeted to
           the focused Window. The implementation of the Window class
           may cause the native focused Window to differ from the Java
@@ -1269,7 +1268,7 @@
           to set the global focus owner to a non-focusable Component.
       <li>If the <code>KeyboardFocusManager</code> attempts
           to set the global focused Window to a non-focusable Window.
-      <li>If the change is rejected by an installed 
+      <li>If the change is rejected by an installed
           <code>VetoableChangeListener</code>.
     </ul>
 <p>
@@ -1302,13 +1301,13 @@
           recent focus owner.
       <li>The <code>KeyboardFocusManager</code> must ensure that the
           opposite Component or Window are as accurate as the native
-          windowing platform permits. For example, the 
+          windowing platform permits. For example, the
           <code>KeyboardFocusManager</code> may need to
           retarget the opposite Component to a lightweight child of the
           heavyweight initially specified by the peer layer.
           <br>
           If the peer layer states that the opposite Component or Window is
-          <code>null</code>, it is acceptable for the 
+          <code>null</code>, it is acceptable for the
           <code>KeyboardFocusManager</code> to propagate
           this value. <code>null</code> indicates that it is highly
           probably that no other Component or Window was involved
@@ -1325,7 +1324,7 @@
           events.
     </ul>
 
-<a name="Incompatibilities"></a>
+<a id="Incompatibilities"></a>
 <h3>Incompatibilities with Previous Releases</h3>
   <p><b>Cross-platform changes:</b>
     <ol>
@@ -1343,7 +1342,7 @@
       <li>KeyListeners installed on <code>Component</code>s
           will no longer see <code>KeyEvent</code>s that map to focus
           traversal operations, and
-          <code>Component.handleEvent()</code> will no longer be invoked 
+          <code>Component.handleEvent()</code> will no longer be invoked
           for such events. Previously, AWT Components saw these events
           and had an opportunity to consume them before AWT
           initiated focus traversal. Code that requires this
@@ -1352,7 +1351,7 @@
           itself. Alternately, the code can use an
           <code>AWTEventListener</code> or
           <code>KeyEventDispatcher</code> to pre-listen to all
-          <code>KeyEvent</code>s. 
+          <code>KeyEvent</code>s.
     </ol>
   <p><b>Changes specific to Microsoft Windows:</b>
     <ol>
--- a/src/java.desktop/share/classes/java/awt/doc-files/Modality.html	Mon Dec 04 19:10:15 2017 +0100
+++ b/src/java.desktop/share/classes/java/awt/doc-files/Modality.html	Mon Dec 04 10:12:46 2017 -0800
@@ -1,5 +1,11 @@
+<!doctype html>
+<html lang="en">
+<head>
+  <meta charset="utf-8"/>
+  <title>The AWT Modality</title>
+</head>
 <!--
- Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved.
+ Copyright (c) 2005, 2017, Oracle and/or its affiliates. All rights reserved.
  DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 
  This code is free software; you can redistribute it and/or modify it
@@ -23,19 +29,9 @@
  questions.
 -->
 
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-
-<html>
-
-<head>
+<body>
 
-    <title>The AWT Modality</title>
-
-</head>
-
-<body bgcolor="white">
-
-    <h1 align="center">The AWT Modality</h1>
+    <h1>The AWT Modality</h1>
 
     <p>
       This document, together with the API documentation for modality-related
@@ -53,7 +49,7 @@
       <li><a href="#Examples">Examples</a></li>
     </ul>
 
-    <a name="Definitions"></a>
+    <a id="Definitions"></a>
     <h3>Definitions</h3>
 
     <p>
@@ -63,7 +59,7 @@
       Every window belongs to some document &mdash; its root can be found as
       the closest ancestor window without an owner.
     </p><p>
-      <a name="ModalBlocked"></a>
+      <a id="ModalBlocked"></a>
       <u>Modal blocked window</u> - a window, that:
       </p><ul>
         <li>doesn't receive any user input events
@@ -73,7 +69,7 @@
       <blockquote>
         <hr>
           <b>Warning!</b> Some window managers allow users to change the window
-          Z-order in an arbitrary way &mdash; in that case the last requirement 
+          Z-order in an arbitrary way &mdash; in that case the last requirement
           may not be met.
         <hr>
       </blockquote>
@@ -87,7 +83,7 @@
       then all its owned windows and child components are also excluded.
     </p><p>
       <u>Scope of blocking (SB)</u> - the set of windows (instances of
-      <code>java.awt.Window</code> and all derived classes) that are blocked by 
+      <code>java.awt.Window</code> and all derived classes) that are blocked by
       the modal dialog while it is visible.
      <blockquote><hr>
       <b>Note</b>: Everywhere in this document the notion of "window" is equal
@@ -95,7 +91,7 @@
       an instance of <code>java.awt.Window</code> or any descendant class.
       <hr></blockquote>
 
-    <a name="ModalityTypes"></a>
+    <a id="ModalityTypes"></a>
     <h3>Modality types</h3>
 
     <p>
@@ -159,7 +155,7 @@
       dialog may have no effect until it is hidden and then shown again.
       <hr></blockquote>
 
-    <a name="ShowHideBlocking"></a>
+    <a id="ShowHideBlocking"></a>
     <h3>Show/hide blocking</h3>
 
     <p>
@@ -171,7 +167,7 @@
     </p><p>
       <u>Showing the modal dialog: "M"</u><br>
       When modal dialog M is shown, all the visible windows fall into one of
-      three distinct groups: 
+      three distinct groups:
       <ul>
       <li>Blockers of M (modal dialogs that block M and
       either are in M's child hierarchy, or are not blocked by M, or have
@@ -260,11 +256,11 @@
       If M was blocked by any other modal dialog, for example, "N",
       it becomes unblocked and
       is removed from N's blocked windows list. Then, all the windows and dialogs
-      blocked by M become unblocked, and after that the same checks 
+      blocked by M become unblocked, and after that the same checks
       (as in Showing the modal dialog: "M")
       are performed for each of them in the order they were initially shown.
 
-    <a name="ModalExclusion"></a>
+    <a id="ModalExclusion"></a>
     </p><h3>Modal exclusion</h3>
 
     <p>
@@ -290,7 +286,7 @@
         may have no effect until it is hidden and then shown again.
     </blockquote>
 
-    <a name="Related"></a>
+    <a id="Related"></a>
     <h3>Related AWT features</h3>
 
     <p>
@@ -333,21 +329,21 @@
       </li></ol>
       If the modal dialog to be hidden does not have focus, the active window remains
       unchanged.
-    
-    <a name="Security"></a>
+
+    <a id="Security"></a>
     <h3>Security</h3>
 
     <p>
       A special <code>AWTPermission</code>, <code>"toolkitModality"</code>,
       is required to show toolkit-modal
-      dialogs. This would prevent, for example, blocking a browser or 
+      dialogs. This would prevent, for example, blocking a browser or
       Java Web Start (JWS) by modal dialogs shown from applets.
     </p><p>
       The same permission is required to exclude a window from toolkit modality.
       This would prevent, for example, a dialog shown from an applet not to be
       blocked by a browser's or JWS's modal dialog.
 
-    <a name="PlatformSupport"></a>
+    <a id="PlatformSupport"></a>
     </p><h3>Platform support</h3>
 
     <p>
@@ -366,18 +362,18 @@
 	  and a window is marked as E-excluded, this has no effect.
       </li></ul>
 
-    <a name="Compatibility"></a>
+    <a id="Compatibility"></a>
     <h3>Compatibility</h3>
 
     <p>
       The default modality type is application-modal. It is used by the API
-      calls: <code>Dialog.setModal(true)</code>, 
+      calls: <code>Dialog.setModal(true)</code>,
       <code>Dialog(owner, true)</code>, etc. Prior to JDK 6
       the default type was toolkit-modal,
       but the only distinction between application- and toolkit-modality is for
       applets and applications launched from Java Web Start.
 
-    <a name="Examples"></a>
+    <a id="Examples"></a>
     </p><h3>Examples</h3>
 
     <table border="0">
@@ -429,7 +425,7 @@
 	      it's in the same application<br>
           <li>D<sub>i</sub> is shown<br>
           <li>D<sub>i</sub> becomes blocked by D<sub>ii</sub> &mdash; it's its owner<br>
-          <li>D<sub>iii</sub> remains unblocked &mdash; it blocks D<sub>ii</sub> and 
+          <li>D<sub>iii</sub> remains unblocked &mdash; it blocks D<sub>ii</sub> and
 	      D<sub>ii</sub> blocks D<sub>i</sub><br>
 	  </ol>
           <br>
--- a/src/java.desktop/share/classes/javax/imageio/metadata/doc-files/bmp_metadata.html	Mon Dec 04 19:10:15 2017 +0100
+++ b/src/java.desktop/share/classes/javax/imageio/metadata/doc-files/bmp_metadata.html	Mon Dec 04 10:12:46 2017 -0800
@@ -1,8 +1,11 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<html>
+<!doctype html>
+<html lang="en">
 <head>
+  <meta charset="utf-8"/>
+  <title>BMP Metadata Format Specification</title>
+</head>
 <!--
-Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved.
+Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved.
 DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 
 This code is free software; you can redistribute it and/or modify it
@@ -26,13 +29,8 @@
 questions.
 -->
 
-<title>BMP Metadata Format Specification</title>
-</head>
-
 <body>
-<center><h1>
-BMP Metadata Format Specification
-</h1></center>
+<h1>BMP Metadata Format Specification</h1>
 
 The XML schema for the native image metadata format is as follows:
 
@@ -108,7 +106,7 @@
 	&lt;/xsd:element&gt;
 
         &lt;!-- Color space  --&gt;
-        &lt;xsd:element name="ColorSpaceType" type="xsd:unsignedInt" 
+        &lt;xsd:element name="ColorSpaceType" type="xsd:unsignedInt"
 		     minOccurs="0"/&gt;
 
 	&lt;!-- CIE XYZ for the LCS_CALIBRATED_RGB color space --&gt;
--- a/src/java.desktop/share/classes/javax/imageio/metadata/doc-files/gif_metadata.html	Mon Dec 04 19:10:15 2017 +0100
+++ b/src/java.desktop/share/classes/javax/imageio/metadata/doc-files/gif_metadata.html	Mon Dec 04 10:12:46 2017 -0800
@@ -1,8 +1,11 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<html>
+<!doctype html>
+<html lang="en">
 <head>
+  <meta charset="utf-8"/>
+  <title>GIF Metadata Format Specification</title>
+</head>
 <!--
-Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
+Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
 DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 
 This code is free software; you can redistribute it and/or modify it
@@ -26,18 +29,11 @@
 questions.
 -->
 
-<title>GIF Metadata Format Specification</title>
-</head>
-
-<body bgcolor="white">
+<body>
 
-<center><h1>
-GIF Metadata Format Specification
-</h1></center>
-<a name="gif_stream_metadata_format"></a>
-<center><h2>
-GIF Stream Metadata Format Specification
-</h2></center>
+<h1>GIF Metadata Format Specification</h1>
+<a id="gif_stream_metadata_format"></a>
+<h2>GIF Stream Metadata Format Specification</h2>
 
 <p>
 
@@ -59,7 +55,7 @@
 <pre>
 &lt;!DOCTYPE "javax_imageio_gif_stream_1.0" [
 
-  &lt;!ELEMENT "javax_imageio_gif_stream_1.0" (Version?, 
+  &lt;!ELEMENT "javax_imageio_gif_stream_1.0" (Version?,
     LogicalScreenDescriptor?, GlobalColorTable?)&gt;
 
     &lt;!ELEMENT "Version" EMPTY&gt;
@@ -98,7 +94,7 @@
       &lt;!-- The global color table --&gt;
       &lt;!-- Min children: 2 --&gt;
       &lt;!-- Max children: 256 --&gt;
-      &lt;!ATTLIST "GlobalColorTable" "sizeOfGlobalColorTable" ("2" | 
+      &lt;!ATTLIST "GlobalColorTable" "sizeOfGlobalColorTable" ("2" |
         "4" | "8" | "16" | "32" | "64" | "128" | "256") #REQUIRED&gt;
         &lt;!-- The number of entries in the global color table --&gt;
       &lt;!ATTLIST "GlobalColorTable" "backgroundColorIndex" #CDATA
@@ -135,10 +131,8 @@
           &lt;!-- Max value: 255 (inclusive) --&gt;
 ]&gt;
 </pre>
-<a name="gif_image_metadata_format"></a>
-<center><h2>
-GIF Image Metadata Format Specification
-</h2></center>
+<a id="gif_image_metadata_format"></a>
+<h2>GIF Image Metadata Format Specification</h2>
 <p>
 
 The GIF image metadata format encodes the image descriptor, local
@@ -180,8 +174,8 @@
 <pre>
 &lt;!DOCTYPE "javax_imageio_gif_image_1.0" [
 
-  &lt;!ELEMENT "javax_imageio_gif_image_1.0" (ImageDescriptor?, 
-    LocalColorTable?, GraphicControlExtension?, PlainTextExtension?, 
+  &lt;!ELEMENT "javax_imageio_gif_image_1.0" (ImageDescriptor?,
+    LocalColorTable?, GraphicControlExtension?, PlainTextExtension?,
     ApplicationExtensions?, CommentExtensions?)&gt;
 
     &lt;!ELEMENT "ImageDescriptor" EMPTY&gt;
@@ -214,7 +208,7 @@
       &lt;!-- The local color table --&gt;
       &lt;!-- Min children: 2 --&gt;
       &lt;!-- Max children: 256 --&gt;
-      &lt;!ATTLIST "LocalColorTable" "sizeOfLocalColorTable" ("2" | 
+      &lt;!ATTLIST "LocalColorTable" "sizeOfLocalColorTable" ("2" |
         "4" | "8" | "16" | "32" | "64" | "128" | "256") #REQUIRED&gt;
         &lt;!-- The number of entries in the local color table --&gt;
       &lt;!ATTLIST "LocalColorTable" "sortFlag" ("TRUE" | "FALSE")
@@ -246,13 +240,13 @@
 
     &lt;!ELEMENT "GraphicControlExtension" EMPTY&gt;
       &lt;!-- A graphic control extension --&gt;
-      &lt;!ATTLIST "GraphicControlExtension" "disposalMethod" ("none" | 
-        "doNotDispose" | "restoreToBackgroundColor" | 
-        "restoreToPrevious" | "undefinedDisposalMethod4" | 
-        "undefinedDisposalMethod5" | "undefinedDisposalMethod6" | 
+      &lt;!ATTLIST "GraphicControlExtension" "disposalMethod" ("none" |
+        "doNotDispose" | "restoreToBackgroundColor" |
+        "restoreToPrevious" | "undefinedDisposalMethod4" |
+        "undefinedDisposalMethod5" | "undefinedDisposalMethod6" |
         "undefinedDisposalMethod7") #REQUIRED&gt;
         &lt;!-- The disposal method for this frame --&gt;
-      &lt;!ATTLIST "GraphicControlExtension" "userInputFlag" ("TRUE" | 
+      &lt;!ATTLIST "GraphicControlExtension" "userInputFlag" ("TRUE" |
         "FALSE") #REQUIRED&gt;
         &lt;!-- True if the frame should be advanced based on user input --&gt;
       &lt;!ATTLIST "GraphicControlExtension" "transparentColorFlag" (
@@ -350,8 +344,7 @@
 </pre>
 
 <p>
-<a name="mapping"></a>
-<center>
+<a id="mapping"></a>
 <table border=1>
 <caption><b>Mapping of Standard to GIF Native Stream Metadata</b></caption>
 <tr>
@@ -399,9 +392,7 @@
 <td>/Version@value</td>
 </tr>
 </table>
-</center>
 
-<center>
 <table border=1>
 <caption><b>Mapping of Standard to GIF Native Image Metadata</b></caption>
 <tr>
@@ -443,7 +434,6 @@
 "TRUE")</td>
 </tr>
 </table>
-</center>
 
 </body>
 </html>
--- a/src/java.desktop/share/classes/javax/imageio/metadata/doc-files/jpeg_metadata.html	Mon Dec 04 19:10:15 2017 +0100
+++ b/src/java.desktop/share/classes/javax/imageio/metadata/doc-files/jpeg_metadata.html	Mon Dec 04 10:12:46 2017 -0800
@@ -1,8 +1,11 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<html>
+<!doctype html>
+<html lang="en">
 <head>
+  <meta charset="utf-8"/>
+  <title>JPEG Metadata Format Specification and Usage Notes</title>
+</head>
 <!--
-Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
+Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
 DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 
 This code is free software; you can redistribute it and/or modify it
@@ -26,14 +29,9 @@
 questions.
 -->
 
-<title>JPEG Metadata Format Specification and Usage Notes</title>
-</head>
+<body>
 
-<body bgcolor="white">
-
-<center><h1>
-JPEG Metadata Format Specification and Usage Notes
-</h1></center>
+<h1>JPEG Metadata Format Specification and Usage Notes</h1>
 
 <p>
 <a href=#metadata>JPEG Metadata</a><br>
@@ -46,11 +44,11 @@
 <a href=#image>Image Metadata DTD</a><br>
 <a href=#stream>Stream Metadata DTD</a>
 <p>
-<b>NOTE</b>: It is important to call <code>dispose()</code> 
-on the JPEG reader and writer objects when they are no longer needed, as 
-they consume significant native resources which are not adequately recovered 
-by garbage collection.  Both reader and writer call <code>dispose()</code> 
-in their finalizers, but those finalizers may not be called before the native 
+<b>NOTE</b>: It is important to call <code>dispose()</code>
+on the JPEG reader and writer objects when they are no longer needed, as
+they consume significant native resources which are not adequately recovered
+by garbage collection.  Both reader and writer call <code>dispose()</code>
+in their finalizers, but those finalizers may not be called before the native
 code has exhausted native memory.
 
 <p>
@@ -58,45 +56,45 @@
 The JPEG writer does not support replacing pixels.
 
 <h2>
-<a name=metadata>JPEG Metadata</a>
+<a id=metadata>JPEG Metadata</a>
 </h2>
 JPEG metadata consists of the data contained in marker segments in a JPEG
 stream.  The image metadata object returned from a read describes the
-contents of the marker segments between the <code>SOI</code> marker and 
-the <code>EOI</code> marker for that image.  The image metadata object 
-passed into a write determines the contents of the stream between the 
-<code>SOI</code> marker and the <code>EOI</code> marker for that image, 
+contents of the marker segments between the <code>SOI</code> marker and
+the <code>EOI</code> marker for that image.  The image metadata object
+passed into a write determines the contents of the stream between the
+<code>SOI</code> marker and the <code>EOI</code> marker for that image,
 subject to the controls in any <code>ImageWriteParam</code>.
 
 <p>
-Stream metadata is used only for tables-only images found (or to be 
-placed) at the beginning of a stream containing abbreviated images.  
-Tables-only images are not treated as images and do not consume an 
+Stream metadata is used only for tables-only images found (or to be
+placed) at the beginning of a stream containing abbreviated images.
+Tables-only images are not treated as images and do not consume an
 image index.  The stream metadata object returned from a read describes the
-contents of the marker segments between the <code>SOI</code> marker and 
-the <code>EOI</code> marker for the single tables-only image at the 
-beginning of the stream, if one is present.  If no tables-only image is 
-present at the front of the stream, the <code>getStreamMetadata</code> 
-method of <code>ImageReader</code> returns <code>null</code>.  If 
-stream metadata is provided to the writer, a single tables-only image 
-containing the tables from the stream metadata object will be written at 
+contents of the marker segments between the <code>SOI</code> marker and
+the <code>EOI</code> marker for the single tables-only image at the
+beginning of the stream, if one is present.  If no tables-only image is
+present at the front of the stream, the <code>getStreamMetadata</code>
+method of <code>ImageReader</code> returns <code>null</code>.  If
+stream metadata is provided to the writer, a single tables-only image
+containing the tables from the stream metadata object will be written at
 the beginning of the stream.  If the stream metadata object contains no
 tables, default tables will be written.  As the sole purpose of stream
-metadata is for specifying tables-only images at the front of abbreviated 
-streams, the stream metadata argument is useful only on the 
-<code>ImageWriter.prepareWriteSequence</code> method.  It is ignored on all 
+metadata is for specifying tables-only images at the front of abbreviated
+streams, the stream metadata argument is useful only on the
+<code>ImageWriter.prepareWriteSequence</code> method.  It is ignored on all
 other methods.
 
-<p> 
-The <code>ImageWriter.getDefaultStreamMetadata</code> method returns an 
-object containing the tables from the <code>ImageWriteParam</code> argument, 
-if it is a <code>JPEGImageWriteParam</code> and contains tables.  Otherwise, 
+<p>
+The <code>ImageWriter.getDefaultStreamMetadata</code> method returns an
+object containing the tables from the <code>ImageWriteParam</code> argument,
+if it is a <code>JPEGImageWriteParam</code> and contains tables.  Otherwise,
 the returned object will contain default tables.
 
-<p>The <code>ImageWriter.getDefaultImageMetadata</code> method returns a 
-metadata object containing <b>no</b> tables if the 
-<code>ImageWriteParam</code> argument contains tables.  Otherwise the 
-returned metadata object will contain default visually lossless tables.  
+<p>The <code>ImageWriter.getDefaultImageMetadata</code> method returns a
+metadata object containing <b>no</b> tables if the
+<code>ImageWriteParam</code> argument contains tables.  Otherwise the
+returned metadata object will contain default visually lossless tables.
 Of course, only a <code>JPEGImageWriteParam</code> may contain tables.
 
 <p>
@@ -105,59 +103,59 @@
 metadata will.
 
 <h2>
-<a name=abbrev>Abbreviated Streams</a>
+<a id=abbrev>Abbreviated Streams</a>
 </h2>
-Both the reader and the writer retain their tables from one operation to the 
-next, thus permitting the use of abbreviated streams quite naturally, with a 
-few minor restrictions:  
+Both the reader and the writer retain their tables from one operation to the
+next, thus permitting the use of abbreviated streams quite naturally, with a
+few minor restrictions:
 <ol>
-  <li> Abbreviated streams may contain only one tables-only image, which must 
+  <li> Abbreviated streams may contain only one tables-only image, which must
        come first in the stream.  Subsequent tables-only images will cause
        undefined behavior.</li>
   <li> Abbreviated streams must be read fully and in order.  No random access
-       is allowed, in either direction.  The same image may be read multiple 
+       is allowed, in either direction.  The same image may be read multiple
        times.  If a call is made with an image index that is not the same as
        or one greater than the most recent call (or 0 if no calls have been
        made), then an <code>IllegalArgumentException</code> is thrown.</li>
 </ol>
-These restrictions mean that streams may contain abbreviated images 
+These restrictions mean that streams may contain abbreviated images
 interspersed with images containing tables.  As required by JPEG, any tables
 appearing in the stream override previous tables, regardless of the source
-of the previous tables.  
+of the previous tables.
 
 <p>
 Note that once a tables-only image has been read, it's contents is available
 as stream metadata from the reader until either another tables-only image
 is read from another stream or the reader is reset.  Changing the input does
 not reset the stream metadata.  This is useful for reading the tables from
-one file, then changing the input to read an abbreviated stream containing 
+one file, then changing the input to read an abbreviated stream containing
 a sequence of images.  The tables will be used automatically, and will remain
 available as "stream" metadata.
 
 <p>
-Abbreviated streams are written using the sequence methods of 
-<code>ImageWriter</code>.  Stream metadata is used to write a tables-only 
+Abbreviated streams are written using the sequence methods of
+<code>ImageWriter</code>.  Stream metadata is used to write a tables-only
 image at the beginning of the stream, and the tables are set up for use, using
-<code>ImageWriter.prepareWriteSequence</code>.  If no stream metadata is 
-supplied to <code>ImageWriter.prepareWriteSequence</code>, then no 
+<code>ImageWriter.prepareWriteSequence</code>.  If no stream metadata is
+supplied to <code>ImageWriter.prepareWriteSequence</code>, then no
 tables-only image is written.  If stream metadata containing no tables is
 supplied to <code>ImageWriter.prepareWriteSequence</code>, then a tables-only
 image containing default visually lossless tables is written.
 
 <h2>
-<a name=tables>Sources of Tables</a>
+<a id=tables>Sources of Tables</a>
 </h2>
 <p>
-Images are written with tables if tables are present in their metadata objects 
+Images are written with tables if tables are present in their metadata objects
 or without them if no tables are present in their metadata objects.  If no
-metadata object is present then the tables are written.  The tables used for 
-compression are taken from one of the following sources, which are consulted 
-in order: 
+metadata object is present then the tables are written.  The tables used for
+compression are taken from one of the following sources, which are consulted
+in order:
 <ol>
   <li> If there is an <code>ImageWriteParam</code> and the compression mode is
        set to <code>EXPLICIT</code>, default tables constructed using the
-       quality setting are used.  They are written only if the metadata 
-       contains tables or if there is no metadata, but they replace the 
+       quality setting are used.  They are written only if the metadata
+       contains tables or if there is no metadata, but they replace the
        tables in the metadata.</li>
   <li> If there is an <code>ImageWriteParam</code> and the compression mode is
        set to <code>DEFAULT</code>, default visually lossles tables are used.
@@ -176,39 +174,39 @@
   </li>
 </ol>
 
-This ordering implements the design intention that tables should be included 
-in <code>JPEGImageWriteParam</code>s only as a means of specifying tables 
+This ordering implements the design intention that tables should be included
+in <code>JPEGImageWriteParam</code>s only as a means of specifying tables
 when no other source is available, and this can occur only when writing to an
-abbreviated stream without tables using known non-standard tables for 
+abbreviated stream without tables using known non-standard tables for
 compression.
 
 <p>
-When reading, tables in a <code>JPEGImageReadParam</code> are consulted only 
-if tables have not been set by any previous read.  Tables set from a 
-<code>JPEGImageReadParam</code> are overridden by any tables present in the 
+When reading, tables in a <code>JPEGImageReadParam</code> are consulted only
+if tables have not been set by any previous read.  Tables set from a
+<code>JPEGImageReadParam</code> are overridden by any tables present in the
 stream being read.
 
 <p>
-Note that if no image metadata object is specified for a particular image, a 
+Note that if no image metadata object is specified for a particular image, a
 default object is used, which includes default tables.
 
 <h2>
-<a name=color>Colorspace Transformations and Conventional Markers</a>
+<a id=color>Colorspace Transformations and Conventional Markers</a>
 </h2>
 Colorspace transformations are controlled by the destination type for
 both reading and writing of images.  When <code>Raster</code>s are
-read, no colorspace transformation is performed, and any destination type 
-is ignored.  A warning is sent to any listeners if a destination type is 
-specified in this case.  When <code>Raster</code>s are written, any 
+read, no colorspace transformation is performed, and any destination type
+is ignored.  A warning is sent to any listeners if a destination type is
+specified in this case.  When <code>Raster</code>s are written, any
 destination type is used to interpret the bands.  This might result in a
-JFIF or Adobe header being written, or different component ids being written 
-to the frame and scan headers.  If values present in a metadata object do not 
-match the destination type, the destination type is used and a warning is sent 
+JFIF or Adobe header being written, or different component ids being written
+to the frame and scan headers.  If values present in a metadata object do not
+match the destination type, the destination type is used and a warning is sent
 to any listeners.
 
 <p>
 
-<a name=optcolor><b>Optional ColorSpace support:</b></a>
+<a id=optcolor><b>Optional ColorSpace support:</b></a>
 Handling of PhotoYCC (YCC), PhotoYCCA (YCCA), RGBA and YCbCrA color spaces
 by the standard plugin, as described below, is dependent on capabilities
 of the libraries used to interpret the JPEG data. Thus all consequential
@@ -219,7 +217,7 @@
 When writing, an Exception may be thrown if no suitable conversion
 can be applied before encoding.
 But where the support for these color spaces is available, the behavior
-must be as documented. 
+must be as documented.
 <p>
 
 When reading, the contents of the stream are interpreted by the usual
@@ -232,7 +230,7 @@
        the YCbCr is converted to RGB according to the formulas given in the
        JFIF spec, and the ICC profile is assumed to refer to the resulting RGB
        space.
-  <li> If an Adobe <code>APP14</code> marker segment is present, the 
+  <li> If an Adobe <code>APP14</code> marker segment is present, the
        colorspace is determined by consulting the <code>transform</code> flag.
        The <code>transform</code> flag takes one of three values:
     <ul>
@@ -242,7 +240,7 @@
       <li> 1 - The image is encoded as YCbCr (implicitly converted from RGB
            on encoding).
 
-      <li> 0 - Unknown.  3-channel images are assumed to be RGB, 4-channel 
+      <li> 0 - Unknown.  3-channel images are assumed to be RGB, 4-channel
            images are assumed to be CMYK.
     </ul>
   <li> If neither marker segment is present, the following procedure is
@@ -253,9 +251,9 @@
        YCbCr. Subject to the availability of the
        <a href=#optcolor>optional color space support</a>
        described above, if these values are 1-4 for a 4-channel image,
-       then the image is assumed to be YCbCrA. 
-       If these values are > 4, they are checked 
-       against the ASCII codes for 'R', 'G', 'B', 'A', 'C', 'c'.  These can 
+       then the image is assumed to be YCbCrA.
+       If these values are > 4, they are checked
+       against the ASCII codes for 'R', 'G', 'B', 'A', 'C', 'c'.  These can
        encode the following colorspaces:
        <p>
        <br>RGB
@@ -263,28 +261,28 @@
        <br>YCC (as 'Y','C','c'), assumed to be PhotoYCC
        <br>YCCA (as 'Y','C','c','A'), assumed to be PhotoYCCA
        <p>
-       Otherwise, 3-channel subsampled images are assumed to be YCbCr, 
-       3-channel non-subsampled images are assumed to be RGB, 4-channel 
+       Otherwise, 3-channel subsampled images are assumed to be YCbCr,
+       3-channel non-subsampled images are assumed to be RGB, 4-channel
        subsampled images are assumed to be YCCK, and 4-channel, non-subsampled
        images are assumed to be CMYK.
 
   <li> All other images are declared uninterpretable and an exception is
-       thrown if an attempt is made to read one as a 
-       <code>BufferedImage</code>.  Such an image may be read only as a 
+       thrown if an attempt is made to read one as a
+       <code>BufferedImage</code>.  Such an image may be read only as a
        <code>Raster</code>.  If an image is interpretable but there is no Java
-       <code>ColorSpace</code> available corresponding to the encoded 
-       colorspace (<i>e.g.</i> YCbCr), then 
+       <code>ColorSpace</code> available corresponding to the encoded
+       colorspace (<i>e.g.</i> YCbCr), then
        <code>ImageReader.getRawImageType</code> will return <code>null</code>.
 </ul>
 
-Once an encoded colorspace is determined, then the target colorspace is 
+Once an encoded colorspace is determined, then the target colorspace is
 determined as follows:
 
 <ul>
   <li> If a destination type is not set, then the following default
-       transformations take place after upsampling: YCbCr (and YCbCrA) images 
+       transformations take place after upsampling: YCbCr (and YCbCrA) images
        are converted to RGB (and RGBA) using the conversion provided by the
-       underlying IJG library and either the built-in sRGB 
+       underlying IJG library and either the built-in sRGB
        <code>ColorSpace</code> or a custom RGB <code>ColorSpace</code> object
        based on an embedded ICC profile is used to create the output
        <code>ColorModel</code>.  PhotoYCC and PhotoYCCA images are not
@@ -292,16 +290,16 @@
 
   <li> If a destination image or type is set, it is used as follows:
        If the IJG library provides an appropriate conversion, it is used.
-       Otherwise the default library conversion is followed by a colorspace 
+       Otherwise the default library conversion is followed by a colorspace
        conversion in Java.</li>
 
-  <li> Bands are selected AFTER any library colorspace conversion.  If a 
-       subset of either source or destination bands is used, then the default 
+  <li> Bands are selected AFTER any library colorspace conversion.  If a
+       subset of either source or destination bands is used, then the default
        library conversions are used with no further conversion in Java,
        regardless of any destination type.</li>
 
-  <li> An exception is thrown if an attempt is made to read an image in an 
-       unsupported jpeg colorspace as a <code>BufferedImage</code> 
+  <li> An exception is thrown if an attempt is made to read an image in an
+       unsupported jpeg colorspace as a <code>BufferedImage</code>
        (<i>e.g.</i> CMYK).  Such images may be read as
        <code>Raster</code>s.  If an image colorspace is unsupported or
        uninterpretable, then <code>ImageReader.getImageTypes</code> will
@@ -315,26 +313,26 @@
 follows:
 
 <p>
-If a subset of the source bands is to be written, no color conversion is 
-performed.  Any destination, if set, must match the number of bands that will 
-be written, and serves as an interpretation of the selected bands, rather than 
-a conversion request.  This behavior is identical to that for 
-<code>Raster</code>s.  If all the bands are to be written and an image 
-(as opposed to a <code>Raster</code>) is being written, any destination type 
+If a subset of the source bands is to be written, no color conversion is
+performed.  Any destination, if set, must match the number of bands that will
+be written, and serves as an interpretation of the selected bands, rather than
+a conversion request.  This behavior is identical to that for
+<code>Raster</code>s.  If all the bands are to be written and an image
+(as opposed to a <code>Raster</code>) is being written, any destination type
 is ignored and a warning is sent to any listeners.
 
 <p>
-If a destination type is used and any aspect of the metadata object, if there 
-is one, is not compatible with that type, the destination type is used, the 
-metadata written is modified from that provided, and a warning is sent to 
-listeners.  This includes the <code>app0JFIF</code> and 
-<code>app14Adobe</code> nodes.  The component ids in the <code>sof</code> and 
-<code>sos</code> nodes are not modified, however, as unless a 
+If a destination type is used and any aspect of the metadata object, if there
+is one, is not compatible with that type, the destination type is used, the
+metadata written is modified from that provided, and a warning is sent to
+listeners.  This includes the <code>app0JFIF</code> and
+<code>app14Adobe</code> nodes.  The component ids in the <code>sof</code> and
+<code>sos</code> nodes are not modified, however, as unless a
 <code>app0JFIF</code> node is present, any values may be used.
 <p>
 
-When a full image is written, a destination colorspace will be 
-chosen based on the image contents and the metadata settings, according to 
+When a full image is written, a destination colorspace will be
+chosen based on the image contents and the metadata settings, according to
 the following algorithm:
 
 <p>
@@ -351,9 +349,9 @@
        channels by half both vertically and horizontally, and written with a
        JFIF <code>APP0</code> marker segment.  If the <code>ColorSpace</code>
        of the image is based on an <code>ICCProfile</code> (it is an instance
-       of <code>ICC_ColorSpace</code>, but is not one of the standard built-in 
-       <code>ColorSpaces</code>), then that profile is embedded in an 
-       <code>APP2</code> marker segment.  As required by JFIF, the 
+       of <code>ICC_ColorSpace</code>, but is not one of the standard built-in
+       <code>ColorSpaces</code>), then that profile is embedded in an
+       <code>APP2</code> marker segment.  As required by JFIF, the
        component ids in the frame and scan headers are set to 1, 2, and 3.
 
 
@@ -361,7 +359,7 @@
         described above,
        RGBA images are converted to YCbCrA, subsampled in the
        chrominance channels by half both vertically and horizontally, and
-       written without any special marker segments.  The component ids 
+       written without any special marker segments.  The component ids
        in the frame and scan headers are set to 1, 2, 3, and 4.
 
   <li> Subject to the <a href=#optcolor>optional library support</a>
@@ -378,16 +376,16 @@
 <p>
 
 If a metadata object is specified, then the number of channels in the
-frame and scan headers must always match the number of bands to be 
-written, or an exception is thrown.  <code>app0JFIF</code> and 
-<code>app14Adobe</code> nodes may appear in the same metadata object only 
-if the <code>app14Adobe</code> node indicates YCbCr, and the component ids 
-are JFIF compatible (0-2).  The various image types are processed in the 
+frame and scan headers must always match the number of bands to be
+written, or an exception is thrown.  <code>app0JFIF</code> and
+<code>app14Adobe</code> nodes may appear in the same metadata object only
+if the <code>app14Adobe</code> node indicates YCbCr, and the component ids
+are JFIF compatible (0-2).  The various image types are processed in the
 following ways:
 
 <br>
 
-(All multi-channel images are subsampled according to the sampling factors 
+(All multi-channel images are subsampled according to the sampling factors
 in the frame header node of the metadata object, regardless of color space.)
 
 <ul>
@@ -395,10 +393,10 @@
     <ul>
       <li> If an <code>app0JFIF</code> node is present in the metadata object,
            a JFIF <code>APP0</code> marker segment is written.
-      <li> If an <code>app14Adobe</code> node is present in the metadata 
+      <li> If an <code>app14Adobe</code> node is present in the metadata
            object, it is checked for validity (<code>transform</code> must be
            <code>UNKNOWN</code>) and written.
-      <li> If neither node is present in the metadata object, no special 
+      <li> If neither node is present in the metadata object, no special
            marker segment is written.
     </ul>
 
@@ -412,14 +410,14 @@
            <code>UNKNOWN</code>) and written.  If <code>transform</code> is
            not <code>UNKNOWN</code>, a warning is sent to listeners and the
            correct transform is written.
-      <li> If neither node is present in the metadata object, no special 
+      <li> If neither node is present in the metadata object, no special
            marker segment is written.
     </ul>
 
   <li> RGB Images:
     <ul>
       <li> If an <code>app0JFIF</code> node is present in the metadata object,
-           the image is converted to YCbCr and written with a JFIF 
+           the image is converted to YCbCr and written with a JFIF
            <code>APP0</code> marker segment.  If the <code>ColorSpace</code>
            of the image is based on a non-standard ICC Profile, then that
            profile is embedded in an <code>APP2</code> marker segment.  If the
@@ -439,7 +437,7 @@
 
       <li> If neither node is present, the component ids in the frame
            header are consulted.  If these indicate a colorspace as described
-           above, then the image is converted to that colorspace if possible.  
+           above, then the image is converted to that colorspace if possible.
            If the component ids do not indicate a colorspace, then the
            sampling factors are consulted.  If the image is to be subsampled,
            it is converted to YCbCr first.  If the image is not to be
@@ -459,7 +457,7 @@
            object, the image is written with an Adobe <code>APP14</code> marker
            segment.  No colorspace conversion is performed.  Component ids
            are written just as they appear in the frame and scan  headers.
-           The color transform must be <code>UNKNOWN</code>.  If it is 
+           The color transform must be <code>UNKNOWN</code>.  If it is
            not, a warning is sent to listeners.
 
       <li> If no <code>app14Adobe</code> node is present, the component ids in
@@ -509,16 +507,16 @@
 </ul>
 
 <h2>
-<a name=thumbs>Thumbnail Images</a>
+<a id=thumbs>Thumbnail Images</a>
 </h2>
 Thumbnails are supported by the use of JFIF and JFIF extension marker segments.
-Thumbnails provided on the write methods determine the thumbnails that will be 
-included.  <code>app0JFIF</code> and <code>app0JFXX</code> nodes present in 
-the metadata do not contain any thumbnail pixel data.  However, the kinds of 
-thumbnails written depend on the contents of the metadata object, as follows.  
-Any thumbnail which is to be written as an indexed or RGB image and which is 
-larger than 255 by 255 will be clipped, not scaled, to 255 by 255.  Thumbnails 
-written as JPEG images may be any size.  A warning is sent to any listeners 
+Thumbnails provided on the write methods determine the thumbnails that will be
+included.  <code>app0JFIF</code> and <code>app0JFXX</code> nodes present in
+the metadata do not contain any thumbnail pixel data.  However, the kinds of
+thumbnails written depend on the contents of the metadata object, as follows.
+Any thumbnail which is to be written as an indexed or RGB image and which is
+larger than 255 by 255 will be clipped, not scaled, to 255 by 255.  Thumbnails
+written as JPEG images may be any size.  A warning is sent to any listeners
 whenever a thumbnail is clipped.
 <ul>
   <li> If there is a single thumbnail, it is processed as follows:
@@ -534,14 +532,14 @@
           <li> If the first <code>app0JFXX</code> node present in the metadata
                contains another thumbnail form (RGB or JPEG), the palette
                image is expanded to RGB and the indicated thumbnail form is
-               written.  
+               written.
         </ul>
 
       <li> If the thumbnail image is an RGB image, it is processed as follows:
         <ul>
           <li> If no <code>app0JFXX</code> node is present in the metadata,
                the thumbnail is written as part of the JFIF <code>APP0</code>
-               marker segment. 
+               marker segment.
           <li> If the first <code>app0JFXX</code> node present in the metadata
                contains a <code>JFIFthumbRGB</code> element, an
                RGB thumbnail is written in a JFXX <code>APP0</code> marker
@@ -561,7 +559,7 @@
         <ul>
           <li> If no <code>app0JFXX</code> node is present in the metadata,
                the thumbnail is expanded to RGB and written as part of the
-               JFIF <code>APP0</code> marker segment. 
+               JFIF <code>APP0</code> marker segment.
           <li> If the first <code>app0JFXX</code> node present in the metadata
                contains a <code>JFIFthumbRGB</code> element, the thumbnail is
                expanded to RGB and written in a separate <code>JFXX</code> RGB
@@ -587,50 +585,50 @@
        sequence as the thumbnail.  <i>I.e.</i> the first
        <code>app0JFXX</code> node applies to the first thumbnail, the second
        node to the second thumbnail, and so on.  If there are fewer
-       <code>app0JFXX</code> nodes in the metadata than thumbnails, then 
+       <code>app0JFXX</code> nodes in the metadata than thumbnails, then
        those thumbnails are considered to have no matching
        <code>app0JFXX</code> node.  An RGB thumbnail with no matching
        <code>app0JFXX</code> node is written in a JFXX <code>APP0</code> marker
        segment.  A grayscale thumbnail with no matching
-       <code>app0JFXX</code> node is written as a JPEG image to a JFXX 
+       <code>app0JFXX</code> node is written as a JPEG image to a JFXX
        <code>APP0</code> marker segment.
 </ul>
 <p>
 
 Note that as the only mechanism for storing thumbnails is via the
-JFIF or JFIF extension marker segments, only grayscale or RGB images 
-may have thumbnails.  If thumbnails are present when writing any other type 
+JFIF or JFIF extension marker segments, only grayscale or RGB images
+may have thumbnails.  If thumbnails are present when writing any other type
 of image, the thumbnails are ignored and a warning is sent to any warning
 listeners.
 
 <h2>
-<a name=prog>Progressive Encoding</a>
+<a id=prog>Progressive Encoding</a>
 </h2>
 
 Progressive encoding must be enabled on the <code>ImageWriteParam</code>
 passed in to a write operation, or the image will be written sequentially,
-regardless of the scan headers included in the metadata object.  If 
+regardless of the scan headers included in the metadata object.  If
 progressive encoding is enabled and set to copy from metadata, then
-the sequence of scan headers from the metadata is used to write the 
-image.  If progressive encoding is enabled and set to use a default, 
-then the scans in the metadata are ignored and a default set of scans 
+the sequence of scan headers from the metadata is used to write the
+image.  If progressive encoding is enabled and set to use a default,
+then the scans in the metadata are ignored and a default set of scans
 is used.  Progressive encoding always forces optimized Huffman tables to
 be used.  Any Huffman tables present in the metadata will be ignored,
 and a warning will be sent to any warning listeners.
 
 If Huffman-table optimization is requested on the <code>ImageWriteParam</code>,
-all Huffman tables in the metadata or in the <code>ImageWriteParam</code> 
-itself are ignored, and a warning will be sent to any warning listeners if 
+all Huffman tables in the metadata or in the <code>ImageWriteParam</code>
+itself are ignored, and a warning will be sent to any warning listeners if
 any such tables are present.
 
 <h2>
-<a name=tree>Native Metadata Format Tree Structure and Editing</a>
+<a id=tree>Native Metadata Format Tree Structure and Editing</a>
 </h2>
 
 The DTDs below describe just the trees of metadata objects actually returned
-by the <code>IIOMetadata</code> object.  They do not include nodes 
-corresponding to <code>SOI</code>, <code>EOI</code>, or <code>RST</code> 
-markers, as these parsing delimiters do not carry any meaningful metadata.  
+by the <code>IIOMetadata</code> object.  They do not include nodes
+corresponding to <code>SOI</code>, <code>EOI</code>, or <code>RST</code>
+markers, as these parsing delimiters do not carry any meaningful metadata.
 <p>
 
 The first node is always a <code>JPEGvariety</code> node.  In the
@@ -659,60 +657,60 @@
 
 <p>
 
-On reading, <code>JFXX</code> and <code>app2ICC</code> nodes occur as 
+On reading, <code>JFXX</code> and <code>app2ICC</code> nodes occur as
 children of an <code>app0JFIF</code> node.
-This is true regardless of where the JFXX <code>APP0</code> and 
-<code>APP2</code> marker segments actually occur in the stream.  The ordering 
-of nodes within the <code>markerSequence</code> node corresponds to the 
+This is true regardless of where the JFXX <code>APP0</code> and
+<code>APP2</code> marker segments actually occur in the stream.  The ordering
+of nodes within the <code>markerSequence</code> node corresponds to the
 ordering of marker segments found in the JPEG stream.
 <p>
-On writing, any <code>JFXX</code> and <code>app2ICC</code> nodes must 
-occur as children of an <code>app0JFIF</code> node, itself a child of a 
+On writing, any <code>JFXX</code> and <code>app2ICC</code> nodes must
+occur as children of an <code>app0JFIF</code> node, itself a child of a
 <code>JPEGvariety</code> node, which must always be the first node.
 (If the stream is not to be JFIF compliant, no <code>app0JFIF</code> node
 should be provided, and the <code>JPEGvariety</code> node should have no
-children.)  Any 
-JFIF <code>APP0</code>, JFXX <code>APP0</code>, and <code>APP2</code> marker 
-segments are written first, followed by all Adobe <code>APP14</code>, 
-<code>APPn</code>, <code>COM</code> and unknown segments in the 
-order in which their corresponding nodes appear in the 
-<code>markerSequence</code> node, followed by <code>DQT</code> (and 
-<code>DHT</code> for non-progressive writes) marker segments, followed by the 
+children.)  Any
+JFIF <code>APP0</code>, JFXX <code>APP0</code>, and <code>APP2</code> marker
+segments are written first, followed by all Adobe <code>APP14</code>,
+<code>APPn</code>, <code>COM</code> and unknown segments in the
+order in which their corresponding nodes appear in the
+<code>markerSequence</code> node, followed by <code>DQT</code> (and
+<code>DHT</code> for non-progressive writes) marker segments, followed by the
 <code>SOF</code> and <code>SOS</code> marker segments.  For progressive writes
-using metadata to control progression, the <code>SOS</code> segments are used 
-in the order in which their corresponding nodes occur in the 
+using metadata to control progression, the <code>SOS</code> segments are used
+in the order in which their corresponding nodes occur in the
 <code>markerSequence</code> node.
 <p>
 
-The <code>reset</code>, <code>mergeTree</code> and <code>setFromTree</code> 
+The <code>reset</code>, <code>mergeTree</code> and <code>setFromTree</code>
 operations have the following semantics for the JPEG plug-in metadata object:
 
-<p> <code>reset</code> - A call to <code>reset</code> will restore the 
-metadata object to the same state it had immediately after creation, whether 
-this came about from reading a stream or by obtaining a default object from 
-the <code>ImageWriter</code>.  This is true regardless of how many times the 
+<p> <code>reset</code> - A call to <code>reset</code> will restore the
+metadata object to the same state it had immediately after creation, whether
+this came about from reading a stream or by obtaining a default object from
+the <code>ImageWriter</code>.  This is true regardless of how many times the
 metadata object has been modified since creation.
 
 <p> <code>mergeTree</code> - Native Format
-<br> The <code>mergeTree</code> operation accepts valid trees conforming to 
-the DTD below, and merges the nodes using the following ordering rules.  In 
-all cases, only data present in the new node is changed in a corresponding 
-existing node, if any.  This means that nodes cannot be removed using 
-<code>mergeTree</code>.  To remove nodes, use <code>setFromTree</code>.  The 
+<br> The <code>mergeTree</code> operation accepts valid trees conforming to
+the DTD below, and merges the nodes using the following ordering rules.  In
+all cases, only data present in the new node is changed in a corresponding
+existing node, if any.  This means that nodes cannot be removed using
+<code>mergeTree</code>.  To remove nodes, use <code>setFromTree</code>.  The
 tree must consist of <code>IIOMetadataNode</code>s.
 <ul>
   <li> <code>app0JFIF</code>
         <ul>
-          <li> If an <code>app0JFIF</code> node already exists, the contents 
-               of the new one modify the existing one. 
+          <li> If an <code>app0JFIF</code> node already exists, the contents
+               of the new one modify the existing one.
           <li> If there is no such node, a new one is created and inserted in
                the appropriate position.
-        </ul>    
+        </ul>
   <li> <code>dqt</code>
         <ul>
           <li> If there already exist <code>dqt</code> nodes in the sequence,
                then each table in the node replaces the first table, in any
-               <code>dqt</code> node, with the same table id.  
+               <code>dqt</code> node, with the same table id.
           <li> If none of the existing <code>dqt</code> nodes contain a table
                with the same id, then the table is added to the last existing
                <code>dqt</code> node.
@@ -720,10 +718,10 @@
                created and added as follows:
             <ul>
               <li> If there are <code>dht</code> nodes, the new
-                   <code>dqt</code> node is inserted before the first one.  
+                   <code>dqt</code> node is inserted before the first one.
               <li> If there are no <code>dht</code> nodes, the new
                    <code>dqt</code> node is inserted  before an
-                   <code>sof</code> node, if there is one. 
+                   <code>sof</code> node, if there is one.
               <li> If there is no <code>sof</code> node, the new
                    <code>dqt</code> node is inserted before the first
                    <code>sos</code> node, if there is one.
@@ -747,7 +745,7 @@
                    last <code>dqt</code> node.
               <li> If there are no <code>dqt</code> nodes, the new
                    <code>dht</code> node is inserted before an
-                   <code>sof</code> node, if there is one. 
+                   <code>sof</code> node, if there is one.
               <li> If there is no <code>sof</code> node, the new
                    <code>dht</code> node is inserted before the first
                    <code>sos</code> node, if there is one.
@@ -757,7 +755,7 @@
         </ul>
   <li> <code>dri</code>
         <ul>
-          <li> If there already exists a <code>dri</code> node, the restart 
+          <li> If there already exists a <code>dri</code> node, the restart
                interval value is updated.
           <li> If there is no <code>dri</code> node, then a new one is created
                and added as follows:
@@ -785,11 +783,11 @@
         </ul>
   <li> <code>app14Adobe</code>
         <ul>
-          <li> If there already exists an <code>app14Adobe</code> node, then 
+          <li> If there already exists an <code>app14Adobe</code> node, then
                its attributes are updated from the node.
-          <li> If there is no <code>app14Adobe</code> node, then a new one is 
+          <li> If there is no <code>app14Adobe</code> node, then a new one is
                created and  added as follows:
-            <ul> 
+            <ul>
               <li> The new <code>app14Adobe</code> node is inserted after the
                    last <code>unknown</code> node, if there are any.
               <li> If there are no <code>unknown</code> nodes, the new
@@ -838,13 +836,13 @@
 
 <p> <code>mergeTree</code> - Standard Format
 <br>
-The <code>mergeTree</code> operation, when given a tree in the standard 
+The <code>mergeTree</code> operation, when given a tree in the standard
 format, will modify the native tree in the following ways:
 <ul>
    <li> <code>Chroma</code> - The <code>ColorSpaceType</code> subnode of a
         <code>Chroma</code> node may change the target colorspace of the
         compressed image.  The selection of a new colorspace can cause a number
-        of changes, in keeping with the algorithms described above: 
+        of changes, in keeping with the algorithms described above:
         <code>app0JFIF</code> and <code>app14Adobe</code> nodes may be added
         or removed, subsampling may be added or removed, component ids may
         be changed, and <code>sof</code> and <code>sos</code> nodes will be
@@ -871,17 +869,17 @@
 
 <p> <code>setFromTree</code> - Native Format
 <br>
-The <code>setFromTree</code> operation, when given a tree in the native 
-format described below, will simply replace the existing tree in its entirety 
+The <code>setFromTree</code> operation, when given a tree in the native
+format described below, will simply replace the existing tree in its entirety
 with the new one.  The tree must consist of <code>IIOMetadataNode</code>s.
 
 <p> <code>setFromTree</code> - Standard Format
 <br>
-The <code>setFromTree</code> operation, when given a tree in the standard 
+The <code>setFromTree</code> operation, when given a tree in the standard
 format, performs a <code>reset</code> followed by a merge of the new tree.
 
 <h2>
-<a name=image>Image Metadata DTD</a>
+<a id=image>Image Metadata DTD</a>
 </h2>
 
 <pre>
@@ -891,39 +889,39 @@
 
     &lt;!ELEMENT "JPEGvariety" (app0JFIF)&gt;
       &lt;!-- A node grouping all marker segments specific to the variety of
-              stream being read/written (e.g. JFIF) - may be empty --&gt; 
+              stream being read/written (e.g. JFIF) - may be empty --&gt;
 
       &lt;!ELEMENT "app0JFIF" (JFXX?, app2ICC?)&gt;
         &lt;!ATTLIST "app0JFIF" "majorVersion" #CDATA "1"&gt;
-          &lt;!-- The major JFIF version number --&gt; 
+          &lt;!-- The major JFIF version number --&gt;
           &lt;!-- Data type: Integer --&gt;
           &lt;!-- Min value: 0 (inclusive) --&gt;
           &lt;!-- Max value: 255 (inclusive) --&gt;
         &lt;!ATTLIST "app0JFIF" "minorVersion" #CDATA "2"&gt;
-          &lt;!-- The minor JFIF version number --&gt; 
+          &lt;!-- The minor JFIF version number --&gt;
           &lt;!-- Data type: Integer --&gt;
           &lt;!-- Min value: 0 (inclusive) --&gt;
           &lt;!-- Max value: 255 (inclusive) --&gt;
         &lt;!ATTLIST "app0JFIF" "resUnits" ("0" | "1" | "2") "0"&gt;
-          &lt;!-- The resolution units for Xdensisty and Ydensity (0 = no 
-               units, just aspect ratio; 1 = dots/inch; 2 = dots/cm) --&gt; 
+          &lt;!-- The resolution units for Xdensisty and Ydensity (0 = no
+               units, just aspect ratio; 1 = dots/inch; 2 = dots/cm) --&gt;
         &lt;!ATTLIST "app0JFIF" "Xdensity" #CDATA "1"&gt;
-          &lt;!-- The horizontal density or aspect ratio numerator --&gt; 
+          &lt;!-- The horizontal density or aspect ratio numerator --&gt;
           &lt;!-- Data type: Integer --&gt;
           &lt;!-- Min value: 1 (inclusive) --&gt;
           &lt;!-- Max value: 65535 (inclusive) --&gt;
         &lt;!ATTLIST "app0JFIF" "Ydensity" #CDATA "1"&gt;
-          &lt;!-- The vertical density or aspect ratio denominator --&gt; 
+          &lt;!-- The vertical density or aspect ratio denominator --&gt;
           &lt;!-- Data type: Integer --&gt;
           &lt;!-- Min value: 1 (inclusive) --&gt;
           &lt;!-- Max value: 65535 (inclusive) --&gt;
         &lt;!ATTLIST "app0JFIF" "thumbWidth" #CDATA "0"&gt;
-          &lt;!-- The width of the thumbnail, or 0 if there isn't one --&gt; 
+          &lt;!-- The width of the thumbnail, or 0 if there isn't one --&gt;
           &lt;!-- Data type: Integer --&gt;
           &lt;!-- Min value: 0 (inclusive) --&gt;
           &lt;!-- Max value: 255 (inclusive) --&gt;
         &lt;!ATTLIST "app0JFIF" "thumbHeight" #CDATA "0"&gt;
-          &lt;!-- The height of the thumbnail, or 0 if there isn't one --&gt; 
+          &lt;!-- The height of the thumbnail, or 0 if there isn't one --&gt;
           &lt;!-- Data type: Integer --&gt;
           &lt;!-- Min value: 0 (inclusive) --&gt;
           &lt;!-- Max value: 255 (inclusive) --&gt;
@@ -931,233 +929,233 @@
         &lt;!ELEMENT "JFXX" (app0JFXX)*&gt;
           &lt;!-- Min children: 1 --&gt;
 
-        &lt;!ELEMENT "app0JFXX" (JFIFthumbJPEG | JFIFthumbPalette | 
+        &lt;!ELEMENT "app0JFXX" (JFIFthumbJPEG | JFIFthumbPalette |
           JFIFthumbRGB)&gt;
-          &lt;!-- A JFIF extension marker segment --&gt; 
+          &lt;!-- A JFIF extension marker segment --&gt;
           &lt;!ATTLIST "app0JFXX" "extensionCode" ("16" | "17" | "19")
              #IMPLIED&gt;
-            &lt;!-- The JFXX extension code identifying thumbnail type: (16 = 
-                 JPEG, 17 = indexed, 19 = RGB --&gt; 
+            &lt;!-- The JFXX extension code identifying thumbnail type: (16 =
+                 JPEG, 17 = indexed, 19 = RGB --&gt;
 
           &lt;!ELEMENT "JFIFthumbJPEG" (markerSequence?)&gt;
-            &lt;!-- A JFIF thumbnail in JPEG format (no JFIF segments 
-                 permitted) --&gt; 
+            &lt;!-- A JFIF thumbnail in JPEG format (no JFIF segments
+                 permitted) --&gt;
 
           &lt;!ELEMENT "JFIFthumbPalette" EMPTY&gt;
-            &lt;!-- A JFIF thumbnail as an RGB indexed image --&gt; 
+            &lt;!-- A JFIF thumbnail as an RGB indexed image --&gt;
             &lt;!ATTLIST "JFIFthumbPalette" "thumbWidth" #CDATA #IMPLIED&gt;
-              &lt;!-- The width of the thumbnail --&gt; 
+              &lt;!-- The width of the thumbnail --&gt;
               &lt;!-- Data type: Integer --&gt;
               &lt;!-- Min value: 0 (inclusive) --&gt;
               &lt;!-- Max value: 255 (inclusive) --&gt;
             &lt;!ATTLIST "JFIFthumbPalette" "thumbHeight" #CDATA #IMPLIED&gt;
-              &lt;!-- The height of the thumbnail --&gt; 
+              &lt;!-- The height of the thumbnail --&gt;
               &lt;!-- Data type: Integer --&gt;
               &lt;!-- Min value: 0 (inclusive) --&gt;
               &lt;!-- Max value: 255 (inclusive) --&gt;
 
           &lt;!ELEMENT "JFIFthumbRGB" EMPTY&gt;
-            &lt;!-- A JFIF thumbnail as an RGB image --&gt; 
+            &lt;!-- A JFIF thumbnail as an RGB image --&gt;
             &lt;!ATTLIST "JFIFthumbRGB" "thumbWidth" #CDATA #IMPLIED&gt;
-              &lt;!-- The width of the thumbnail --&gt; 
+              &lt;!-- The width of the thumbnail --&gt;
               &lt;!-- Data type: Integer --&gt;
               &lt;!-- Min value: 0 (inclusive) --&gt;
               &lt;!-- Max value: 255 (inclusive) --&gt;
             &lt;!ATTLIST "JFIFthumbRGB" "thumbHeight" #CDATA #IMPLIED&gt;
-              &lt;!-- The height of the thumbnail --&gt; 
+              &lt;!-- The height of the thumbnail --&gt;
               &lt;!-- Data type: Integer --&gt;
               &lt;!-- Min value: 0 (inclusive) --&gt;
               &lt;!-- Max value: 255 (inclusive) --&gt;
 
         &lt;!ELEMENT "app2ICC" EMPTY&gt;
-          &lt;!-- An ICC profile APP2 marker segment --&gt; 
+          &lt;!-- An ICC profile APP2 marker segment --&gt;
           &lt;!-- Optional User object: java.awt.color.ICC_Profile --&gt;
 
-    &lt;!ELEMENT "markerSequence" (dqt | dht | dri | com | unknown | 
+    &lt;!ELEMENT "markerSequence" (dqt | dht | dri | com | unknown |
       app14Adobe | sof | sos)*&gt;
-      &lt;!-- A node grouping all non-jfif marker segments --&gt; 
+      &lt;!-- A node grouping all non-jfif marker segments --&gt;
 
       &lt;!ELEMENT "dqt" (dqtable)*&gt;
-        &lt;!-- A Define Quantization Table(s) marker segment --&gt; 
+        &lt;!-- A Define Quantization Table(s) marker segment --&gt;
         &lt;!-- Min children: 1 --&gt;
         &lt;!-- Max children: 4 --&gt;
 
         &lt;!ELEMENT "dqtable" EMPTY&gt;
-          &lt;!-- A single quantization table --&gt; 
+          &lt;!-- A single quantization table --&gt;
           &lt;!-- User object: javax.imageio.plugins.jpeg.JPEGQTable --&gt;
           &lt;!ATTLIST "dqtable" "elementPrecision" #CDATA "0"&gt;
-            &lt;!-- The number of bits in each table element (0 = 8, 1 = 16) 
-                 --&gt; 
+            &lt;!-- The number of bits in each table element (0 = 8, 1 = 16)
+                 --&gt;
             &lt;!-- Data type: Integer --&gt;
           &lt;!ATTLIST "dqtable" "qtableId" ("0" | "1" | "2" | "3") #REQUIRED&gt;
 
       &lt;!ELEMENT "dht" (dhtable)*&gt;
-        &lt;!-- A Define Huffman Table(s) marker segment --&gt; 
+        &lt;!-- A Define Huffman Table(s) marker segment --&gt;
         &lt;!-- Min children: 1 --&gt;
         &lt;!-- Max children: 4 --&gt;
 
         &lt;!ELEMENT "dhtable" EMPTY&gt;
-          &lt;!-- A single Huffman table --&gt; 
+          &lt;!-- A single Huffman table --&gt;
           &lt;!-- User object: javax.imageio.plugins.jpeg.JPEGHuffmanTable --&gt;
           &lt;!ATTLIST "dhtable" "class" ("0" | "1") #REQUIRED&gt;
-            &lt;!-- Indicates whether this is a DC (0) or an AC (1) table --&gt; 
+            &lt;!-- Indicates whether this is a DC (0) or an AC (1) table --&gt;
           &lt;!ATTLIST "dhtable" "htableId" ("0" | "1" | "2" | "3") #REQUIRED&gt;
-            &lt;!-- The table id --&gt; 
+            &lt;!-- The table id --&gt;
 
       &lt;!ELEMENT "dri" EMPTY&gt;
-        &lt;!-- A Define Restart Interval marker segment --&gt; 
+        &lt;!-- A Define Restart Interval marker segment --&gt;
         &lt;!ATTLIST "dri" "interval" #CDATA #REQUIRED&gt;
-          &lt;!-- The restart interval in MCUs --&gt; 
+          &lt;!-- The restart interval in MCUs --&gt;
           &lt;!-- Data type: Integer --&gt;
           &lt;!-- Min value: 0 (inclusive) --&gt;
           &lt;!-- Max value: 65535 (inclusive) --&gt;
 
       &lt;!ELEMENT "com" EMPTY&gt;
-        &lt;!-- A Comment marker segment. The user object contains the actual 
-             bytes. --&gt; 
+        &lt;!-- A Comment marker segment. The user object contains the actual
+             bytes. --&gt;
         &lt;!-- User object: array of [B --&gt;
         &lt;!-- Min length: 1 --&gt;
         &lt;!-- Max length: 65533 --&gt;
         &lt;!ATTLIST "com" "comment" #CDATA #IMPLIED&gt;
-          &lt;!-- The comment as a string (used only if user object is null) 
-               --&gt; 
+          &lt;!-- The comment as a string (used only if user object is null)
+               --&gt;
           &lt;!-- Data type: String --&gt;
 
       &lt;!ELEMENT "unknown" EMPTY&gt;
-        &lt;!-- An unrecognized marker segment. The user object contains the 
-             data not including length. --&gt; 
+        &lt;!-- An unrecognized marker segment. The user object contains the
+             data not including length. --&gt;
         &lt;!-- User object: array of [B --&gt;
         &lt;!-- Min length: 1 --&gt;
         &lt;!-- Max length: 65533 --&gt;
         &lt;!ATTLIST "unknown" "MarkerTag" #CDATA #REQUIRED&gt;
-          &lt;!-- The tag identifying this marker segment --&gt; 
+          &lt;!-- The tag identifying this marker segment --&gt;
           &lt;!-- Data type: Integer --&gt;
           &lt;!-- Min value: 0 (inclusive) --&gt;
           &lt;!-- Max value: 255 (inclusive) --&gt;
 
       &lt;!ELEMENT "app14Adobe" EMPTY&gt;
-        &lt;!-- An Adobe APP14 marker segment --&gt; 
+        &lt;!-- An Adobe APP14 marker segment --&gt;
         &lt;!ATTLIST "app14Adobe" "version" #CDATA "100"&gt;
-          &lt;!-- The version of Adobe APP14 marker segment --&gt; 
+          &lt;!-- The version of Adobe APP14 marker segment --&gt;
           &lt;!-- Data type: Integer --&gt;
           &lt;!-- Min value: 100 (inclusive) --&gt;
           &lt;!-- Max value: 255 (inclusive) --&gt;
         &lt;!ATTLIST "app14Adobe" "flags0" #CDATA "0"&gt;
-          &lt;!-- The flags0 variable of an APP14 marker segment --&gt; 
+          &lt;!-- The flags0 variable of an APP14 marker segment --&gt;
           &lt;!-- Data type: Integer --&gt;
           &lt;!-- Min value: 0 (inclusive) --&gt;
           &lt;!-- Max value: 65535 (inclusive) --&gt;
         &lt;!ATTLIST "app14Adobe" "flags1" #CDATA "0"&gt;
-          &lt;!-- The flags1 variable of an APP14 marker segment --&gt; 
+          &lt;!-- The flags1 variable of an APP14 marker segment --&gt;
           &lt;!-- Data type: Integer --&gt;
           &lt;!-- Min value: 0 (inclusive) --&gt;
           &lt;!-- Max value: 65535 (inclusive) --&gt;
         &lt;!ATTLIST "app14Adobe" "transform" ("0" | "1" | "2") #REQUIRED&gt;
-          &lt;!-- The color transform applied to the image (0 = Unknown, 1 = 
-               YCbCr, 2 = YCCK) --&gt; 
+          &lt;!-- The color transform applied to the image (0 = Unknown, 1 =
+               YCbCr, 2 = YCCK) --&gt;
 
       &lt;!ELEMENT "sof" (componentSpec)*&gt;
-        &lt;!-- A Start Of Frame marker segment --&gt; 
+        &lt;!-- A Start Of Frame marker segment --&gt;
         &lt;!-- Min children: 1 --&gt;
         &lt;!-- Max children: 4 --&gt;
         &lt;!ATTLIST "sof" "process" ("0" | "1" | "2") #IMPLIED&gt;
-          &lt;!-- The JPEG process (0 = Baseline sequential, 1 = Extended 
-               sequential, 2 = Progressive) --&gt; 
+          &lt;!-- The JPEG process (0 = Baseline sequential, 1 = Extended
+               sequential, 2 = Progressive) --&gt;
         &lt;!ATTLIST "sof" "samplePrecision" #CDATA "8"&gt;
-          &lt;!-- The number of bits per sample --&gt; 
+          &lt;!-- The number of bits per sample --&gt;
           &lt;!-- Data type: Integer --&gt;
         &lt;!ATTLIST "sof" "numLines" #CDATA #IMPLIED&gt;
-          &lt;!-- The number of lines in the image --&gt; 
+          &lt;!-- The number of lines in the image --&gt;
           &lt;!-- Data type: Integer --&gt;
           &lt;!-- Min value: 0 (inclusive) --&gt;
           &lt;!-- Max value: 65535 (inclusive) --&gt;
         &lt;!ATTLIST "sof" "samplesPerLine" #CDATA #IMPLIED&gt;
-          &lt;!-- The number of samples per line --&gt; 
+          &lt;!-- The number of samples per line --&gt;
           &lt;!-- Data type: Integer --&gt;
           &lt;!-- Min value: 0 (inclusive) --&gt;
           &lt;!-- Max value: 65535 (inclusive) --&gt;
         &lt;!ATTLIST "sof" "numFrameComponents" ("1" | "2" | "3" | "4")
            #IMPLIED&gt;
-          &lt;!-- The number of components in the image --&gt; 
+          &lt;!-- The number of components in the image --&gt;
 
         &lt;!ELEMENT "componentSpec" EMPTY&gt;
-          &lt;!-- A component specification for a frame --&gt; 
+          &lt;!-- A component specification for a frame --&gt;
           &lt;!ATTLIST "componentSpec" "componentId" #CDATA #REQUIRED&gt;
-            &lt;!-- The id for this component --&gt; 
+            &lt;!-- The id for this component --&gt;
             &lt;!-- Data type: Integer --&gt;
             &lt;!-- Min value: 0 (inclusive) --&gt;
             &lt;!-- Max value: 255 (inclusive) --&gt;
           &lt;!ATTLIST "componentSpec" "HsamplingFactor" #CDATA #REQUIRED&gt;
-            &lt;!-- The horizontal sampling factor for this component --&gt; 
+            &lt;!-- The horizontal sampling factor for this component --&gt;
             &lt;!-- Data type: Integer --&gt;
             &lt;!-- Min value: 1 (inclusive) --&gt;
             &lt;!-- Max value: 255 (inclusive) --&gt;
           &lt;!ATTLIST "componentSpec" "VsamplingFactor" #CDATA #REQUIRED&gt;
-            &lt;!-- The vertical sampling factor for this component --&gt; 
+            &lt;!-- The vertical sampling factor for this component --&gt;
             &lt;!-- Data type: Integer --&gt;
             &lt;!-- Min value: 1 (inclusive) --&gt;
             &lt;!-- Max value: 255 (inclusive) --&gt;
-          &lt;!ATTLIST "componentSpec" "QtableSelector" ("0" | "1" | "2" | 
+          &lt;!ATTLIST "componentSpec" "QtableSelector" ("0" | "1" | "2" |
             "3") #REQUIRED&gt;
-            &lt;!-- The quantization table to use for this component --&gt; 
+            &lt;!-- The quantization table to use for this component --&gt;
 
       &lt;!ELEMENT "sos" (scanComponentSpec)*&gt;
-        &lt;!-- A Start Of Scan marker segment --&gt; 
+        &lt;!-- A Start Of Scan marker segment --&gt;
         &lt;!-- Min children: 1 --&gt;
         &lt;!-- Max children: 4 --&gt;
         &lt;!ATTLIST "sos" "numScanComponents" ("1" | "2" | "3" | "4")
            #REQUIRED&gt;
-          &lt;!-- The number of components in the scan --&gt; 
+          &lt;!-- The number of components in the scan --&gt;
         &lt;!ATTLIST "sos" "startSpectralSelection" #CDATA "0"&gt;
-          &lt;!-- The first spectral band included in this scan --&gt; 
+          &lt;!-- The first spectral band included in this scan --&gt;
           &lt;!-- Data type: Integer --&gt;
           &lt;!-- Min value: 0 (inclusive) --&gt;
           &lt;!-- Max value: 63 (inclusive) --&gt;
         &lt;!ATTLIST "sos" "endSpectralSelection" #CDATA "63"&gt;
-          &lt;!-- The last spectral band included in this scan --&gt; 
+          &lt;!-- The last spectral band included in this scan --&gt;
           &lt;!-- Data type: Integer --&gt;
           &lt;!-- Min value: 0 (inclusive) --&gt;
           &lt;!-- Max value: 63 (inclusive) --&gt;
         &lt;!ATTLIST "sos" "approxHigh" #CDATA "0"&gt;
-          &lt;!-- The highest bit position included in this scan --&gt; 
+          &lt;!-- The highest bit position included in this scan --&gt;
           &lt;!-- Data type: Integer --&gt;
           &lt;!-- Min value: 0 (inclusive) --&gt;
           &lt;!-- Max value: 15 (inclusive) --&gt;
         &lt;!ATTLIST "sos" "approxLow" #CDATA "0"&gt;
-          &lt;!-- The lowest bit position included in this scan --&gt; 
+          &lt;!-- The lowest bit position included in this scan --&gt;
           &lt;!-- Data type: Integer --&gt;
           &lt;!-- Min value: 0 (inclusive) --&gt;
           &lt;!-- Max value: 15 (inclusive) --&gt;
 
         &lt;!ELEMENT "scanComponentSpec" EMPTY&gt;
-          &lt;!-- A component specification for a scan --&gt; 
+          &lt;!-- A component specification for a scan --&gt;
           &lt;!ATTLIST "scanComponentSpec" "componentSelector" #CDATA
              #REQUIRED&gt;
-            &lt;!-- The id of this component --&gt; 
+            &lt;!-- The id of this component --&gt;
             &lt;!-- Data type: Integer --&gt;
             &lt;!-- Min value: 0 (inclusive) --&gt;
             &lt;!-- Max value: 255 (inclusive) --&gt;
-          &lt;!ATTLIST "scanComponentSpec" "dcHuffTable" ("0" | "1" | "2" | 
+          &lt;!ATTLIST "scanComponentSpec" "dcHuffTable" ("0" | "1" | "2" |
             "3") #REQUIRED&gt;
-            &lt;!-- The huffman table to use for encoding DC coefficients --&gt; 
-          &lt;!ATTLIST "scanComponentSpec" "acHuffTable" ("0" | "1" | "2" | 
+            &lt;!-- The huffman table to use for encoding DC coefficients --&gt;
+          &lt;!ATTLIST "scanComponentSpec" "acHuffTable" ("0" | "1" | "2" |
             "3") #REQUIRED&gt;
-            &lt;!-- The huffman table to use for encoding AC coefficients --&gt; 
+            &lt;!-- The huffman table to use for encoding AC coefficients --&gt;
 ]&gt;
 </pre>
 
 <h2>
-<a name=stream>Stream Metadata DTD</a>
+<a id=stream>Stream Metadata DTD</a>
 </h2>
 
 <pre>
 &lt;!DOCTYPE "javax_imageio_jpeg_stream_1.0" [
   &lt;!ELEMENT "javax_imageio_jpeg_stream_1.0" (dqt |
-                      dht | 
-                      dri | 
-                      com | 
+                      dht |
+                      dri |
+                      com |
                       unknown)*&gt;
-   
+
   &lt;!-- All elements are as defined above for image metadata --&gt;
 ]&gt;
 </pre>
--- a/src/java.desktop/share/classes/javax/imageio/metadata/doc-files/png_metadata.html	Mon Dec 04 19:10:15 2017 +0100
+++ b/src/java.desktop/share/classes/javax/imageio/metadata/doc-files/png_metadata.html	Mon Dec 04 10:12:46 2017 -0800
@@ -1,8 +1,11 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<html>
+<!doctype html>
+<html lang="en">
 <head>
+  <meta charset="utf-8"/>
+  <title>PNG Metadata Format Specification</title>
+</head>
 <!--
-Copyright (c) 2000, 2005, Oracle and/or its affiliates. All rights reserved.
+Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
 DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 
 This code is free software; you can redistribute it and/or modify it
@@ -26,14 +29,9 @@
 questions.
 -->
 
-<title>PNG Metadata Format Specification</title>
-</head>
+<body>
 
-<body bgcolor="white">
-
-<center><h1>
-PNG Metadata Format Specification
-</h1></center>
+<h1>PNG Metadata Format Specification</h1>
 
 <p>
 
@@ -59,7 +57,7 @@
 type set in the metadata is "Palette", palette color will be used.
 
 <p>
- 
+
 If no metadata is supplied when encoding an image, the header is
 initialized from the image being encoded, and no optional chunks are
 included.
@@ -85,7 +83,7 @@
 The child nodes of the <code>bKGD</code>, <code>sBIT</code>, and
 <code>tRNS</code> chunks must match the image's color type.
 
-<p> 
+<p>
 
 Certain chunks may meaningfully appear multiple times in a PNG file,
 in particular the text-related chunks.  In order to simplify the
@@ -104,8 +102,8 @@
 <pre>
 &lt;!DOCTYPE "javax_imageio_png_1.0" [
 
-  &lt;!ELEMENT "javax_imageio_png_1.0" (IHDR?, PLTE?, bKGD?, cHRM?, 
-    gAMA?, hIST?, iCCP?, iTXt?, pHYS?, sBIT?, sPLT?, sRGB?, tEXt?, 
+  &lt;!ELEMENT "javax_imageio_png_1.0" (IHDR?, PLTE?, bKGD?, cHRM?,
+    gAMA?, hIST?, iCCP?, iTXt?, pHYS?, sBIT?, sPLT?, sRGB?, tEXt?,
     tIME?, tRNS?, zTXt?, UnknownChunks?)&gt;
 
     &lt;!ELEMENT "IHDR" EMPTY&gt;
@@ -123,7 +121,7 @@
       &lt;!ATTLIST "IHDR" "bitDepth" ("1" | "2" | "4" | "8" | "16")
          #REQUIRED&gt;
         &lt;!-- The bit depth of the image samples --&gt;
-      &lt;!ATTLIST "IHDR" "colorType" ("Grayscale" | "RGB" | "Palette" | 
+      &lt;!ATTLIST "IHDR" "colorType" ("Grayscale" | "RGB" | "Palette" |
         "GrayAlpha" | "RGBAlpha") #REQUIRED&gt;
         &lt;!-- The color type of the image --&gt;
       &lt;!ATTLIST "IHDR" "compressionMethod" ("deflate") #REQUIRED&gt;
@@ -318,7 +316,7 @@
       &lt;!ATTLIST "pHYS" "unitSpecifier" ("unknown" | "meter") #REQUIRED&gt;
         &lt;!-- The unit specifier for this chunk (i.e., meters) --&gt;
 
-    &lt;!ELEMENT "sBIT" (sBIT_Grayscale | sBIT_GrayAlpha | sBIT_RGB | 
+    &lt;!ELEMENT "sBIT" (sBIT_Grayscale | sBIT_GrayAlpha | sBIT_RGB |
       sBIT_RGBAlpha | sBIT_Palette)&gt;
       &lt;!-- The sBIT chunk, containing significant bit information --&gt;
 
@@ -437,8 +435,8 @@
 
     &lt;!ELEMENT "sRGB" EMPTY&gt;
       &lt;!-- The sRGB chunk, containing rendering intent information --&gt;
-      &lt;!ATTLIST "sRGB" "renderingIntent" ("Perceptual" | 
-        "Relative colorimetric" | "Saturation" | 
+      &lt;!ATTLIST "sRGB" "renderingIntent" ("Perceptual" |
+        "Relative colorimetric" | "Saturation" |
         "Absolute colorimetric") #REQUIRED&gt;
         &lt;!-- The rendering intent --&gt;
 
--- a/src/java.desktop/share/classes/javax/imageio/metadata/doc-files/standard_metadata.html	Mon Dec 04 19:10:15 2017 +0100
+++ b/src/java.desktop/share/classes/javax/imageio/metadata/doc-files/standard_metadata.html	Mon Dec 04 10:12:46 2017 -0800
@@ -1,8 +1,11 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<html>
+<!doctype html>
+<html lang="en">
 <head>
+  <meta charset="utf-8"/>
+  <title>Standard Metadata Format Specification</title>
+</head>
 <!--
-Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
+Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
 DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 
 This code is free software; you can redistribute it and/or modify it
@@ -26,14 +29,9 @@
 questions.
 -->
 
-<title>Standard Metadata Format Specification</title>
-</head>
+<body>
 
-<body bgcolor="white">
-
-<center><h1>
-Standard (Plug-in Neutral) Metadata Format Specification
-</h1></center>
+<h1>Standard (Plug-in Neutral) Metadata Format Specification</h1>
 
 <p> The plug-in neutral "javax_imageio_1.0" format consists
 of a root node named "javax_imageio_1.0" which has child
@@ -44,355 +42,355 @@
 <pre>
 &lt;!DOCTYPE "javax_imageio_1.0" [
 
-  &lt;!ELEMENT "javax_imageio_1.0" (Chroma?, Compression?, Data?, Dimension?, 
+  &lt;!ELEMENT "javax_imageio_1.0" (Chroma?, Compression?, Data?, Dimension?,
     Document?, Text?, Transparency?)&gt;
 
-    &lt;!ELEMENT "Chroma" (ColorSpaceType?, NumChannels?, Gamma?, 
+    &lt;!ELEMENT "Chroma" (ColorSpaceType?, NumChannels?, Gamma?,
       BlackIsZero?, Palette?, BackgroundIndex?, BackgroundColor?)&gt;
-      &lt;!-- Chroma (color) information --&gt; 
+      &lt;!-- Chroma (color) information --&gt;
 
       &lt;!ELEMENT "ColorSpaceType" EMPTY&gt;
-        &lt;!-- The raw color space of the image --&gt; 
-        &lt;!ATTLIST "ColorSpaceType" "name" ("XYZ" | "Lab" | "Luv" | 
-          "YCbCr" | "Yxy" | "YCCK" | "PhotoYCC" | "RGB" | "GRAY" | "HSV" | 
-          "HLS" | "CMYK" | "CMY" | "2CLR" | "3CLR" | "4CLR" | "5CLR" | 
-          "6CLR" | "7CLR" | "8CLR" | "9CLR" | "ACLR" | "BCLR" | "CCLR" | 
+        &lt;!-- The raw color space of the image --&gt;
+        &lt;!ATTLIST "ColorSpaceType" "name" ("XYZ" | "Lab" | "Luv" |
+          "YCbCr" | "Yxy" | "YCCK" | "PhotoYCC" | "RGB" | "GRAY" | "HSV" |
+          "HLS" | "CMYK" | "CMY" | "2CLR" | "3CLR" | "4CLR" | "5CLR" |
+          "6CLR" | "7CLR" | "8CLR" | "9CLR" | "ACLR" | "BCLR" | "CCLR" |
           "DCLR" | "ECLR" | "FCLR") #REQUIRED&gt;
 
       &lt;!ELEMENT "NumChannels" EMPTY&gt;
-        &lt;!-- The number of channels in the raw image, including alpha --&gt; 
+        &lt;!-- The number of channels in the raw image, including alpha --&gt;
         &lt;!ATTLIST "NumChannels" "value" #CDATA #REQUIRED&gt;
           &lt;!-- Data type: List of Integer --&gt;
 
       &lt;!ELEMENT "Gamma" EMPTY&gt;
-        &lt;!-- The image gamma --&gt; 
+        &lt;!-- The image gamma --&gt;
         &lt;!ATTLIST "Gamma" "value" #CDATA #REQUIRED&gt;
           &lt;!-- Data type: Float --&gt;
 
       &lt;!ELEMENT "BlackIsZero" EMPTY&gt;
-        &lt;!-- True if smaller values represent darker shades --&gt; 
+        &lt;!-- True if smaller values represent darker shades --&gt;
         &lt;!ATTLIST "BlackIsZero" "value" ("TRUE" | "FALSE") "TRUE"&gt;
 
       &lt;!ELEMENT "Palette" (PaletteEntry)*&gt;
-        &lt;!-- Palette-color information --&gt; 
+        &lt;!-- Palette-color information --&gt;
 
         &lt;!ELEMENT "PaletteEntry" EMPTY&gt;
-          &lt;!-- A palette entry --&gt; 
+          &lt;!-- A palette entry --&gt;
           &lt;!ATTLIST "PaletteEntry" "index" #CDATA #REQUIRED&gt;
-            &lt;!-- The index of the palette entry --&gt; 
+            &lt;!-- The index of the palette entry --&gt;
             &lt;!-- Data type: Integer --&gt;
           &lt;!ATTLIST "PaletteEntry" "red" #CDATA #REQUIRED&gt;
-            &lt;!-- The red value for the palette entry --&gt; 
+            &lt;!-- The red value for the palette entry --&gt;
             &lt;!-- Data type: Integer --&gt;
           &lt;!ATTLIST "PaletteEntry" "green" #CDATA #REQUIRED&gt;
-            &lt;!-- The green value for the palette entry --&gt; 
+            &lt;!-- The green value for the palette entry --&gt;
             &lt;!-- Data type: Integer --&gt;
           &lt;!ATTLIST "PaletteEntry" "blue" #CDATA #REQUIRED&gt;
-            &lt;!-- The blue value for the palette entry --&gt; 
+            &lt;!-- The blue value for the palette entry --&gt;
             &lt;!-- Data type: Integer --&gt;
           &lt;!ATTLIST "PaletteEntry" "alpha" #CDATA "255"&gt;
-            &lt;!-- The alpha value for the palette entry --&gt; 
+            &lt;!-- The alpha value for the palette entry --&gt;
             &lt;!-- Data type: Integer --&gt;
 
       &lt;!ELEMENT "BackgroundIndex" EMPTY&gt;
-        &lt;!-- A palette index to be used as a background --&gt; 
+        &lt;!-- A palette index to be used as a background --&gt;
         &lt;!ATTLIST "BackgroundIndex" "value" #CDATA #REQUIRED&gt;
           &lt;!-- Data type: Integer --&gt;
 
       &lt;!ELEMENT "BackgroundColor" EMPTY&gt;
-        &lt;!-- An RGB triple to be used as a background --&gt; 
+        &lt;!-- An RGB triple to be used as a background --&gt;
         &lt;!ATTLIST "BackgroundColor" "red" #CDATA #REQUIRED&gt;
-          &lt;!-- The red background value --&gt; 
+          &lt;!-- The red background value --&gt;
           &lt;!-- Data type: Integer --&gt;
         &lt;!ATTLIST "BackgroundColor" "green" #CDATA #REQUIRED&gt;
-          &lt;!-- The green background value --&gt; 
+          &lt;!-- The green background value --&gt;
           &lt;!-- Data type: Integer --&gt;
         &lt;!ATTLIST "BackgroundColor" "blue" #CDATA #REQUIRED&gt;
-          &lt;!-- The blue background value --&gt; 
+          &lt;!-- The blue background value --&gt;
           &lt;!-- Data type: Integer --&gt;
 
-    &lt;!ELEMENT "Compression" (CompressionTypeName?, Lossless?, 
+    &lt;!ELEMENT "Compression" (CompressionTypeName?, Lossless?,
       NumProgressiveScans?, BitRate?)&gt;
-      &lt;!-- Compression information --&gt; 
+      &lt;!-- Compression information --&gt;
 
       &lt;!ELEMENT "CompressionTypeName" EMPTY&gt;
-        &lt;!-- The name of the compression scheme in use --&gt; 
+        &lt;!-- The name of the compression scheme in use --&gt;
         &lt;!ATTLIST "CompressionTypeName" "value" #CDATA #REQUIRED&gt;
           &lt;!-- Data type: String --&gt;
 
       &lt;!ELEMENT "Lossless" EMPTY&gt;
-        &lt;!-- True if the compression scheme is lossless --&gt; 
+        &lt;!-- True if the compression scheme is lossless --&gt;
         &lt;!ATTLIST "Lossless" "value" ("TRUE" | "FALSE") "TRUE"&gt;
 
       &lt;!ELEMENT "NumProgressiveScans" EMPTY&gt;
-        &lt;!-- The number of progressive scans used in the image encoding --&gt; 
+        &lt;!-- The number of progressive scans used in the image encoding --&gt;
         &lt;!ATTLIST "NumProgressiveScans" "value" #CDATA #REQUIRED&gt;
           &lt;!-- Data type: Integer --&gt;
 
       &lt;!ELEMENT "BitRate" EMPTY&gt;
-        &lt;!-- The estimated bit rate of the compression scheme --&gt; 
+        &lt;!-- The estimated bit rate of the compression scheme --&gt;
         &lt;!ATTLIST "BitRate" "value" #CDATA #REQUIRED&gt;
           &lt;!-- Data type: Float --&gt;
 
-    &lt;!ELEMENT "Data" (PlanarConfiguration?, SampleFormat?, BitsPerSample?, 
+    &lt;!ELEMENT "Data" (PlanarConfiguration?, SampleFormat?, BitsPerSample?,
       SignificantBitsPerSample?, SampleMSB?)&gt;
-      &lt;!-- Information on the image layout --&gt; 
+      &lt;!-- Information on the image layout --&gt;
 
       &lt;!ELEMENT "PlanarConfiguration" EMPTY&gt;
-        &lt;!-- The organization of image samples in the stream --&gt; 
-        &lt;!ATTLIST "PlanarConfiguration" "value" ("PixelInterleaved" | 
+        &lt;!-- The organization of image samples in the stream --&gt;
+        &lt;!ATTLIST "PlanarConfiguration" "value" ("PixelInterleaved" |
           "PlaneInterleaved" | "LineInterleaved" | "TileInterleaved")
            #REQUIRED&gt;
 
       &lt;!ELEMENT "SampleFormat" EMPTY&gt;
-        &lt;!-- The numeric format of image samples --&gt; 
-        &lt;!ATTLIST "SampleFormat" "value" ("SignedIntegral" | 
+        &lt;!-- The numeric format of image samples --&gt;
+        &lt;!ATTLIST "SampleFormat" "value" ("SignedIntegral" |
           "UnsignedIntegral" | "Real" | "Index") #REQUIRED&gt;
 
       &lt;!ELEMENT "BitsPerSample" EMPTY&gt;
-        &lt;!-- The number of bits per sample --&gt; 
+        &lt;!-- The number of bits per sample --&gt;
         &lt;!ATTLIST "BitsPerSample" "value" #CDATA #REQUIRED&gt;
-          &lt;!-- A list of integers, one per channel --&gt; 
+          &lt;!-- A list of integers, one per channel --&gt;
           &lt;!-- Data type: List of Integer --&gt;
           &lt;!-- Min length: 1 --&gt;
 
       &lt;!ELEMENT "SignificantBitsPerSample" EMPTY&gt;
-        &lt;!-- The number of significant bits per sample --&gt; 
+        &lt;!-- The number of significant bits per sample --&gt;
         &lt;!ATTLIST "SignificantBitsPerSample" "value" #CDATA #REQUIRED&gt;
-          &lt;!-- A list of integers, one per channel --&gt; 
+          &lt;!-- A list of integers, one per channel --&gt;
           &lt;!-- Data type: List of Integer --&gt;
           &lt;!-- Min length: 1 --&gt;
 
       &lt;!ELEMENT "SampleMSB" EMPTY&gt;
-        &lt;!-- The position of the most significant bit of each sample --&gt; 
+        &lt;!-- The position of the most significant bit of each sample --&gt;
         &lt;!ATTLIST "SampleMSB" "value" #CDATA #REQUIRED&gt;
-          &lt;!-- A list of integers, one per channel --&gt; 
+          &lt;!-- A list of integers, one per channel --&gt;
           &lt;!-- Data type: List of Integer --&gt;
           &lt;!-- Min length: 1 --&gt;
 
-    &lt;!ELEMENT "Dimension" (PixelAspectRatio?, ImageOrientation?, 
-      HorizontalPixelSize?, VerticalPixelSize?, 
-      HorizontalPhysicalPixelSpacing?, VerticalPhysicalPixelSpacing?, 
-      HorizontalPosition?, VerticalPosition?, HorizontalPixelOffset?, 
+    &lt;!ELEMENT "Dimension" (PixelAspectRatio?, ImageOrientation?,
+      HorizontalPixelSize?, VerticalPixelSize?,
+      HorizontalPhysicalPixelSpacing?, VerticalPhysicalPixelSpacing?,
+      HorizontalPosition?, VerticalPosition?, HorizontalPixelOffset?,
       VerticalPixelOffset?, HorizontalScreenSize?, VerticalScreenSize?)&gt;
-      &lt;!-- Dimension information --&gt; 
+      &lt;!-- Dimension information --&gt;
 
       &lt;!ELEMENT "PixelAspectRatio" EMPTY&gt;
-        &lt;!-- The width of a pixel divided by its height --&gt; 
+        &lt;!-- The width of a pixel divided by its height --&gt;
         &lt;!ATTLIST "PixelAspectRatio" "value" #CDATA #REQUIRED&gt;
           &lt;!-- Data type: Float --&gt;
 
       &lt;!ELEMENT "ImageOrientation" EMPTY&gt;
-        &lt;!-- The desired orientation of the image in terms of flips and 
-             counter-clockwise rotations --&gt; 
-        &lt;!ATTLIST "ImageOrientation" "value" ("Normal" | "Rotate90" | 
-          "Rotate180" | "Rotate270" | "FlipH" | "FlipV" | 
+        &lt;!-- The desired orientation of the image in terms of flips and
+             counter-clockwise rotations --&gt;
+        &lt;!ATTLIST "ImageOrientation" "value" ("Normal" | "Rotate90" |
+          "Rotate180" | "Rotate270" | "FlipH" | "FlipV" |
           "FlipHRotate90" | "FlipVRotate90") #REQUIRED&gt;
 
       &lt;!ELEMENT "HorizontalPixelSize" EMPTY&gt;
-        &lt;!-- The width of a pixel, in millimeters, as it should be rendered 
-             on media --&gt; 
+        &lt;!-- The width of a pixel, in millimeters, as it should be rendered
+             on media --&gt;
         &lt;!ATTLIST "HorizontalPixelSize" "value" #CDATA #REQUIRED&gt;
           &lt;!-- Data type: Float --&gt;
 
       &lt;!ELEMENT "VerticalPixelSize" EMPTY&gt;
-        &lt;!-- The height of a pixel, in millimeters, as it should be 
-             rendered on media --&gt; 
+        &lt;!-- The height of a pixel, in millimeters, as it should be
+             rendered on media --&gt;
         &lt;!ATTLIST "VerticalPixelSize" "value" #CDATA #REQUIRED&gt;
           &lt;!-- Data type: Float --&gt;
 
       &lt;!ELEMENT "HorizontalPhysicalPixelSpacing" EMPTY&gt;
-        &lt;!-- The horizontal distance in the subject of the image, in 
-             millimeters, represented by one pixel at the center of the 
-             image --&gt; 
+        &lt;!-- The horizontal distance in the subject of the image, in
+             millimeters, represented by one pixel at the center of the
+             image --&gt;
         &lt;!ATTLIST "HorizontalPhysicalPixelSpacing" "value" #CDATA #REQUIRED&gt;
           &lt;!-- Data type: Float --&gt;
 
       &lt;!ELEMENT "VerticalPhysicalPixelSpacing" EMPTY&gt;
-        &lt;!-- The vertical distance in the subject of the image, in 
-             millimeters, represented by one pixel at the center of the 
-             image --&gt; 
+        &lt;!-- The vertical distance in the subject of the image, in
+             millimeters, represented by one pixel at the center of the
+             image --&gt;
         &lt;!ATTLIST "VerticalPhysicalPixelSpacing" "value" #CDATA #REQUIRED&gt;
           &lt;!-- Data type: Float --&gt;
 
       &lt;!ELEMENT "HorizontalPosition" EMPTY&gt;
-        &lt;!-- The horizontal position, in millimeters, where the image 
-             should be rendered on media --&gt; 
+        &lt;!-- The horizontal position, in millimeters, where the image
+             should be rendered on media --&gt;
         &lt;!ATTLIST "HorizontalPosition" "value" #CDATA #REQUIRED&gt;
           &lt;!-- Data type: Float --&gt;
 
       &lt;!ELEMENT "VerticalPosition" EMPTY&gt;
-        &lt;!-- The vertical position, in millimeters, where the image should 
-             be rendered on media --&gt; 
+        &lt;!-- The vertical position, in millimeters, where the image should
+             be rendered on media --&gt;
         &lt;!ATTLIST "VerticalPosition" "value" #CDATA #REQUIRED&gt;
           &lt;!-- Data type: Float --&gt;
 
       &lt;!ELEMENT "HorizontalPixelOffset" EMPTY&gt;
-        &lt;!-- The horizontal position, in pixels, where the image should be 
-             rendered onto a raster display --&gt; 
+        &lt;!-- The horizontal position, in pixels, where the image should be
+             rendered onto a raster display --&gt;
         &lt;!ATTLIST "HorizontalPixelOffset" "value" #CDATA #REQUIRED&gt;
           &lt;!-- Data type: Integer --&gt;
 
       &lt;!ELEMENT "VerticalPixelOffset" EMPTY&gt;
-        &lt;!-- The vertical position, in pixels, where the image should be 
-             rendered onto a raster display --&gt; 
+        &lt;!-- The vertical position, in pixels, where the image should be
+             rendered onto a raster display --&gt;
         &lt;!ATTLIST "VerticalPixelOffset" "value" #CDATA #REQUIRED&gt;
           &lt;!-- Data type: Integer --&gt;
 
       &lt;!ELEMENT "HorizontalScreenSize" EMPTY&gt;
-        &lt;!-- The width, in pixels, of the raster display into which the 
-             image should be rendered --&gt; 
+        &lt;!-- The width, in pixels, of the raster display into which the
+             image should be rendered --&gt;
         &lt;!ATTLIST "HorizontalScreenSize" "value" #CDATA #REQUIRED&gt;
           &lt;!-- Data type: Integer --&gt;
 
       &lt;!ELEMENT "VerticalScreenSize" EMPTY&gt;
-        &lt;!-- The height, in pixels, of the raster display into which the 
-             image should be rendered --&gt; 
+        &lt;!-- The height, in pixels, of the raster display into which the
+             image should be rendered --&gt;
         &lt;!ATTLIST "VerticalScreenSize" "value" #CDATA #REQUIRED&gt;
           &lt;!-- Data type: Integer --&gt;
 
-    &lt;!ELEMENT "Document" (FormatVersion?, SubimageInterpretation?, 
+    &lt;!ELEMENT "Document" (FormatVersion?, SubimageInterpretation?,
       ImageCreationTime?, ImageModificationTime?)&gt;
-      &lt;!-- Document information --&gt; 
+      &lt;!-- Document information --&gt;
 
       &lt;!ELEMENT "FormatVersion" EMPTY&gt;
-        &lt;!-- The version of the format used by the stream --&gt; 
+        &lt;!-- The version of the format used by the stream --&gt;
         &lt;!ATTLIST "FormatVersion" "value" #CDATA #REQUIRED&gt;
           &lt;!-- Data type: String --&gt;
 
       &lt;!ELEMENT "SubimageInterpretation" EMPTY&gt;
-        &lt;!-- The interpretation of this image in relation to the other 
-             images stored in the same stream --&gt; 
-        &lt;!ATTLIST "SubimageInterpretation" "value" ("Standalone" | 
-          "SinglePage" | "FullResolution" | "ReducedResolution" | 
-          "PyramidLayer" | "Preview" | "VolumeSlice" | "ObjectView" | 
-          "Panorama" | "AnimationFrame" | "TransparencyMask" | 
+        &lt;!-- The interpretation of this image in relation to the other
+             images stored in the same stream --&gt;
+        &lt;!ATTLIST "SubimageInterpretation" "value" ("Standalone" |
+          "SinglePage" | "FullResolution" | "ReducedResolution" |
+          "PyramidLayer" | "Preview" | "VolumeSlice" | "ObjectView" |
+          "Panorama" | "AnimationFrame" | "TransparencyMask" |
           "CompositingLayer" | "SpectralSlice" | "Unknown") #REQUIRED&gt;
 
       &lt;!ELEMENT "ImageCreationTime" EMPTY&gt;
-        &lt;!-- The time of image creation --&gt; 
+        &lt;!-- The time of image creation --&gt;
         &lt;!ATTLIST "ImageCreationTime" "year" #CDATA #REQUIRED&gt;
-          &lt;!-- The full year (e.g., 1967, not 67) --&gt; 
+          &lt;!-- The full year (e.g., 1967, not 67) --&gt;
           &lt;!-- Data type: Integer --&gt;
         &lt;!ATTLIST "ImageCreationTime" "month" #CDATA #REQUIRED&gt;
-          &lt;!-- The month, with January = 1 --&gt; 
+          &lt;!-- The month, with January = 1 --&gt;
           &lt;!-- Data type: Integer --&gt;
           &lt;!-- Min value: 1 (inclusive) --&gt;
           &lt;!-- Max value: 12 (inclusive) --&gt;
         &lt;!ATTLIST "ImageCreationTime" "day" #CDATA #REQUIRED&gt;
-          &lt;!-- The day of the month --&gt; 
+          &lt;!-- The day of the month --&gt;
           &lt;!-- Data type: Integer --&gt;
           &lt;!-- Min value: 1 (inclusive) --&gt;
           &lt;!-- Max value: 31 (inclusive) --&gt;
         &lt;!ATTLIST "ImageCreationTime" "hour" #CDATA "0"&gt;
-          &lt;!-- The hour from 0 to 23 --&gt; 
+          &lt;!-- The hour from 0 to 23 --&gt;
           &lt;!-- Data type: Integer --&gt;
           &lt;!-- Min value: 0 (inclusive) --&gt;
           &lt;!-- Max value: 23 (inclusive) --&gt;
         &lt;!ATTLIST "ImageCreationTime" "minute" #CDATA "0"&gt;
-          &lt;!-- The minute from 0 to 59 --&gt; 
+          &lt;!-- The minute from 0 to 59 --&gt;
           &lt;!-- Data type: Integer --&gt;
           &lt;!-- Min value: 0 (inclusive) --&gt;
           &lt;!-- Max value: 59 (inclusive) --&gt;
         &lt;!ATTLIST "ImageCreationTime" "second" #CDATA "0"&gt;
-          &lt;!-- The second from 0 to 60 (60 = leap second) --&gt; 
+          &lt;!-- The second from 0 to 60 (60 = leap second) --&gt;
           &lt;!-- Data type: Integer --&gt;
           &lt;!-- Min value: 0 (inclusive) --&gt;
           &lt;!-- Max value: 60 (inclusive) --&gt;
 
       &lt;!ELEMENT "ImageModificationTime" EMPTY&gt;
-        &lt;!-- The time of the last image modification --&gt; 
+        &lt;!-- The time of the last image modification --&gt;
         &lt;!ATTLIST "ImageModificationTime" "year" #CDATA #REQUIRED&gt;
-          &lt;!-- The full year (e.g., 1967, not 67) --&gt; 
+          &lt;!-- The full year (e.g., 1967, not 67) --&gt;
           &lt;!-- Data type: Integer --&gt;
         &lt;!ATTLIST "ImageModificationTime" "month" #CDATA #REQUIRED&gt;
-          &lt;!-- The month, with January = 1 --&gt; 
+          &lt;!-- The month, with January = 1 --&gt;
           &lt;!-- Data type: Integer --&gt;
           &lt;!-- Min value: 1 (inclusive) --&gt;
           &lt;!-- Max value: 12 (inclusive) --&gt;
         &lt;!ATTLIST "ImageModificationTime" "day" #CDATA #REQUIRED&gt;
-          &lt;!-- The day of the month --&gt; 
+          &lt;!-- The day of the month --&gt;
           &lt;!-- Data type: Integer --&gt;
           &lt;!-- Min value: 1 (inclusive) --&gt;
           &lt;!-- Max value: 31 (inclusive) --&gt;
         &lt;!ATTLIST "ImageModificationTime" "hour" #CDATA "0"&gt;
-          &lt;!-- The hour from 0 to 23 --&gt; 
+          &lt;!-- The hour from 0 to 23 --&gt;
           &lt;!-- Data type: Integer --&gt;
           &lt;!-- Min value: 0 (inclusive) --&gt;
           &lt;!-- Max value: 23 (inclusive) --&gt;
         &lt;!ATTLIST "ImageModificationTime" "minute" #CDATA "0"&gt;
-          &lt;!-- The minute from 0 to 59 --&gt; 
+          &lt;!-- The minute from 0 to 59 --&gt;
           &lt;!-- Data type: Integer --&gt;
           &lt;!-- Min value: 0 (inclusive) --&gt;
           &lt;!-- Max value: 59 (inclusive) --&gt;
         &lt;!ATTLIST "ImageModificationTime" "second" #CDATA "0"&gt;
-          &lt;!-- The second from 0 to 60 (60 = leap second) --&gt; 
+          &lt;!-- The second from 0 to 60 (60 = leap second) --&gt;
           &lt;!-- Data type: Integer --&gt;
           &lt;!-- Min value: 0 (inclusive) --&gt;
           &lt;!-- Max value: 60 (inclusive) --&gt;
 
     &lt;!ELEMENT "Text" (TextEntry)*&gt;
-      &lt;!-- Text information --&gt; 
+      &lt;!-- Text information --&gt;
 
       &lt;!ELEMENT "TextEntry" EMPTY&gt;
-        &lt;!-- A text entry --&gt; 
+        &lt;!-- A text entry --&gt;
         &lt;!ATTLIST "TextEntry" "keyword" #CDATA #IMPLIED&gt;
-          &lt;!-- A keyword associated with the text entry --&gt; 
+          &lt;!-- A keyword associated with the text entry --&gt;
           &lt;!-- Data type: String --&gt;
         &lt;!ATTLIST "TextEntry" "value" #CDATA #REQUIRED&gt;
-          &lt;!-- the text entry --&gt; 
+          &lt;!-- the text entry --&gt;
           &lt;!-- Data type: String --&gt;
         &lt;!ATTLIST "TextEntry" "language" #CDATA #IMPLIED&gt;
-          &lt;!-- The language of the text --&gt; 
+          &lt;!-- The language of the text --&gt;
           &lt;!-- Data type: String --&gt;
         &lt;!ATTLIST "TextEntry" "encoding" #CDATA #IMPLIED&gt;
-          &lt;!-- The encoding of the text --&gt; 
+          &lt;!-- The encoding of the text --&gt;
           &lt;!-- Data type: String --&gt;
-        &lt;!ATTLIST "TextEntry" "compression" ("none" | "lzw" | "zip" | 
+        &lt;!ATTLIST "TextEntry" "compression" ("none" | "lzw" | "zip" |
           "bzip" | "other") "none"&gt;
-          &lt;!-- The method used to compress the text --&gt; 
+          &lt;!-- The method used to compress the text --&gt;
 
-    &lt;!ELEMENT "Transparency" (Alpha?, TransparentIndex?, 
+    &lt;!ELEMENT "Transparency" (Alpha?, TransparentIndex?,
       TransparentColor?, TileTransparencies?, TileOpacities?)&gt;
-      &lt;!-- Transparency information --&gt; 
+      &lt;!-- Transparency information --&gt;
 
       &lt;!ELEMENT "Alpha" EMPTY&gt;
-        &lt;!-- The type of alpha information contained in the image --&gt; 
-        &lt;!ATTLIST "Alpha" "value" ("none" | "premultiplied" | 
+        &lt;!-- The type of alpha information contained in the image --&gt;
+        &lt;!ATTLIST "Alpha" "value" ("none" | "premultiplied" |
           "nonpremultiplied") "none"&gt;
 
       &lt;!ELEMENT "TransparentIndex" EMPTY&gt;
-        &lt;!-- A palette index to be treated as transparent --&gt; 
+        &lt;!-- A palette index to be treated as transparent --&gt;
         &lt;!ATTLIST "TransparentIndex" "value" #CDATA #REQUIRED&gt;
           &lt;!-- Data type: Integer --&gt;
 
       &lt;!ELEMENT "TransparentColor" EMPTY&gt;
-        &lt;!-- An RGB color to be treated as transparent --&gt; 
+        &lt;!-- An RGB color to be treated as transparent --&gt;
         &lt;!ATTLIST "TransparentColor" "value" #CDATA #REQUIRED&gt;
           &lt;!-- Data type: List of Integer --&gt;
 
       &lt;!ELEMENT "TileTransparencies" (TransparentTile)*&gt;
-        &lt;!-- A list of completely transparent tiles --&gt; 
+        &lt;!-- A list of completely transparent tiles --&gt;
 
         &lt;!ELEMENT "TransparentTile" EMPTY&gt;
-          &lt;!-- The index of a completely transparent tile --&gt; 
+          &lt;!-- The index of a completely transparent tile --&gt;
           &lt;!ATTLIST "TransparentTile" "x" #CDATA #REQUIRED&gt;
-            &lt;!-- The tile's X index --&gt; 
+            &lt;!-- The tile's X index --&gt;
             &lt;!-- Data type: Integer --&gt;
           &lt;!ATTLIST "TransparentTile" "y" #CDATA #REQUIRED&gt;
-            &lt;!-- The tile's Y index --&gt; 
+            &lt;!-- The tile's Y index --&gt;
             &lt;!-- Data type: Integer --&gt;
 
       &lt;!ELEMENT "TileOpacities" (OpaqueTile)*&gt;
-        &lt;!-- A list of completely opaque tiles --&gt; 
+        &lt;!-- A list of completely opaque tiles --&gt;
 
         &lt;!ELEMENT "OpaqueTile" EMPTY&gt;
-          &lt;!-- The index of a completely opaque tile --&gt; 
+          &lt;!-- The index of a completely opaque tile --&gt;
           &lt;!ATTLIST "OpaqueTile" "x" #CDATA #REQUIRED&gt;
-            &lt;!-- The tile's X index --&gt; 
+            &lt;!-- The tile's X index --&gt;
             &lt;!-- Data type: Integer --&gt;
           &lt;!ATTLIST "OpaqueTile" "y" #CDATA #REQUIRED&gt;
-            &lt;!-- The tile's Y index --&gt; 
+            &lt;!-- The tile's Y index --&gt;
             &lt;!-- Data type: Integer --&gt;
 ]&gt;
 </pre>
--- a/src/java.desktop/share/classes/javax/imageio/metadata/doc-files/tiff_metadata.html	Mon Dec 04 19:10:15 2017 +0100
+++ b/src/java.desktop/share/classes/javax/imageio/metadata/doc-files/tiff_metadata.html	Mon Dec 04 10:12:46 2017 -0800
@@ -1,8 +1,11 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<html>
+<!doctype html>
+<html lang="en">
 <head>
+    <meta charset="utf-8"/>
+    <title>TIFF Metadata Format Specification and Usage Notes</title>
+</head>
 <!--
-Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
 DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 
 This code is free software; you can redistribute it and/or modify it
@@ -26,66 +29,47 @@
 questions.
 -->
 
-<title>TIFF Metadata Format Specification and Usage Notes</title>
-</head>
-
-<body bgcolor="white">
+<body>
 
-<center><h1>
-TIFF Metadata Format Specification and Usage Notes
-</h1></center>
+<h1>TIFF Metadata Format Specification and Usage Notes</h1>
 
-    <p>
-<a href="#Reading">Reading Images</a><br/>
-<font size="-1">
+<a href="#Reading">Reading Images</a>
 <ul>
 <li><a href="#ColorConversionRead">Color Conversion</a></li>
 <li><a href="#ColorSpacesRead">Color Spaces</a></li>
 <li><a href="#ICCProfilesRead">ICC Profiles</a></li>
 <li><a href="#MetadataIssuesRead">Metadata Issues</a>
-<font size="-2">
 <ul>
 <li><a href="#MapNativeStandard">Native to Standard Metadata Mapping</a></li>
 </ul>
-</font>
 </li>
 <li><a href="#ExifRead">Reading Exif Images</a>
-<font size="-2">
 <ul>
 <li><a href="#ExifReadTIFF">Reading Uncompressed Exif Images</a></li>
 <li><a href="#ExifReadJPEG">Reading Compressed Exif Images</a></li>
 </ul>
-</font>
 </li>
 </ul>
-</font>
 <a href="#Writing">Writing Images</a><br/>
-<font size="-1">
 <ul>
 <li><a href="#Compression">Compression</a></li>
 <li><a href="#ColorConversionWrite">Color Conversion</a></li>
 <li><a href="#ICCProfilesWrite">ICC Profiles</a></li>
-<li><a href="#MetadataIssuesWrite">Metadata Issues</a></li>
-<font size="-2">
+<li><a href="#MetadataIssuesWrite">Metadata Issues</a>
 <ul>
 <li><a href="#MapStandardNative">Standard to Native Metadata Mapping</a></li>
 </ul>
-</font>
 <li><a href="#ExifWrite">Writing Exif Images</a>
-<font size="-2">
 <ul>
 <li><a href="#ExifWriteTIFF">Writing Uncompressed Exif Images</a></li>
 <li><a href="#ExifWriteJPEG">Writing Compressed Exif Images</a></li>
 </ul>
-</font>
 </li>
 </ul>
-</font>
 <a href="#StreamMetadata">Native Stream Metadata Format</a><br/>
 <a href="#ImageMetadata">Native Image Metadata Format</a>
-</p>
 
-<h3><a name="Reading"/>Reading Images</h3>
+<h3><a id="Reading">Reading Images</a></h3>
 
 TIFF images are read by an <a href="../../ImageReader.html">ImageReader</a>
 which may be controlled by its public interface as well as via a supplied
@@ -95,14 +79,14 @@
 
 <!-- Table? -->
 
-<h4><a name="ColorConversionRead"/>Color Conversion</h4>
+<h4><a id="ColorConversionRead">Color Conversion</a></h4>
 
 <p>If the source image data
 have photometric type CIE L*a*b* or YCbCr, and the destination color space
 type is RGB, then the source image data will be automatically converted to
 RGB using an internal color converter.</p>
 
-<h4><a name="ColorSpacesRead"/>Color Spaces</h4>
+<h4><a id="ColorSpacesRead">Color Spaces</a></h4>
 
 The raw color space assigned by default, i.e., in the absence of a
 user-supplied <a href="../../ImageTypeSpecifier.html">ImageTypeSpecifier</a>,
@@ -112,7 +96,7 @@
 <li>A color space created from the <a href="#ICCProfilesRead">ICC Profile</a>
 metadata field if it is present and compatible with the image data
 layout.</li>
-<a name="nonICCProfile"><li>sRGB if the image is monochrome/bilevel
+<li><a id="nonICCProfile"></a>sRGB if the image is monochrome/bilevel
 (a two-level color map is created internally).</li>
 <li>sRGB if the image is palette-color.</li>
 <li>Linear RGB if the image has three samples per pixel, has photometric type
@@ -136,7 +120,7 @@
 sample.</li>
 </ul>
 
-<p><a name="DefaultCMYK"/>The normalized color coordinate transformations
+<p><a id="DefaultCMYK"></a>The normalized color coordinate transformations
 used for the default CMYK color space are defined as follows:
 
 <ul>
@@ -160,9 +144,8 @@
 </pre>
 </li>
 </ul>
-</p>
 
-<p><a name="GenericCS"/>The generic color space used when no other color space
+<p><a id="GenericCS"></a>The generic color space used when no other color space
 can be inferred is provided merely to enable the data to be loaded. It is not
 intended to provide accurate conversions of any kind.</p>
 
@@ -171,7 +154,7 @@
 supplied to the reader and should be derived from a color space which is correct
 for the data in question.</p>
 
-<h4><a name="ICCProfilesRead"/>ICC Profiles</h4>
+<h4><a id="ICCProfilesRead">ICC Profiles</a></h4>
 
 If an ICC profile is contained in the image metadata
 (<a href="../../plugins/tiff/BaselineTIFFTagSet.html">
@@ -203,7 +186,6 @@
 <code>ImageReadParam.setDestinationType</code>.</li>
 <li>Pass the parameter object to the appropriate <code>read</code> method.</li>
 </ol>
-</p>
 
 <p>If the inferred color space not based on the ICC Profile field is compatible
 with the ICC profile-based color space, then a second
@@ -214,7 +196,7 @@
 more than one type, the first one will be based on the ICC profile and the
 second on the inferred color space.</p>
 
-<h4><a name="MetadataIssuesRead"/>Metadata Issues</h4>
+<h4><a id="MetadataIssuesRead">Metadata Issues</a></h4>
 
 By default all recognized fields in the TIFF image file directory (IFD) are
 loaded into the native image metadata object. Which fields are loaded may be
@@ -244,7 +226,7 @@
 object returned by the TIFF reader using the
 <code>TIFFDirectory.createFromMetadata</code> method.</p>
 
-<h5><a name="MapNativeStandard"/>
+<h5><a id="MapNativeStandard"></a>
 Mapping of TIFF Native Image Metadata to the Standard Metadata Format</h5>
 
 The derivation of standard metadata format
@@ -252,7 +234,6 @@
 elements from <a href="#ImageMetadata">TIFF native image metadata</a> is given
 in the following table.
 
-<p>
 <table border="1">
 <tr>
 <th>Standard Metadata Element</th>
@@ -261,9 +242,9 @@
 <tr>
 <td>/Chroma/ColorSpaceType@name</td>
 <td>PhotometricInterpretation: WhiteIsZero, BlackIsZero, TransparencyMask =
-"GRAY"; RGB, PaletteColor => "RGB"; CMYK => "CMYK";
-YCbCr => "YCbCr";
-CIELab, ICCLab => "Lab".</td>
+"GRAY"; RGB, PaletteColor =&gt; "RGB"; CMYK =&gt; "CMYK";
+YCbCr =&gt; "YCbCr";
+CIELab, ICCLab =&gt; "Lab".</td>
 </tr>
 <tr>
 <td>/Chroma/NumChannels@value</td>
@@ -271,7 +252,7 @@
 </tr>
 <tr>
 <td>/Chroma/BlackIsZero@value</td>
-<td>"TRUE" <=> PhotometricInterpretation => WhiteIsZero</td>
+<td>"TRUE" &lt;=&gt; PhotometricInterpretation =&gt; WhiteIsZero</td>
 </tr>
 <tr>
 <td>/Chroma/Palette</td>
@@ -279,28 +260,28 @@
 </tr>
 <tr>
 <td>/Compression/CompressionTypeName@value</td>
-<td>Compression: Uncompressed => "none"; CCITT 1D => "CCITT
+<td>Compression: Uncompressed =&gt; "none"; CCITT 1D =&gt; "CCITT
 RLE";
-Group 3 Fax => "CCITT T.4"; Group 4 Fax => "CCITT T.6";
-LZW => "LZW";
-JPEG => "Old JPEG"; New JPEG => "JPEG"; Zlib =>> "ZLib"; PackBits =>
+Group 3 Fax =&gt; "CCITT T.4"; Group 4 Fax =&gt; "CCITT T.6";
+LZW =&gt; "LZW";
+JPEG =&gt; "Old JPEG"; New JPEG =&gt; "JPEG"; Zlib =&gt;&gt; "ZLib"; PackBits =&gt;
 "PackBits";
-Deflate => "Deflate"; Exif JPEG => "JPEG".</td>
+Deflate =&gt; "Deflate"; Exif JPEG =&gt; "JPEG".</td>
 </tr>
 <tr>
 <td>/Compression/Lossless@value</td>
-<td>Compression: JPEG or New JPEG => "FALSE"; otherwise "TRUE".</td>
+<td>Compression: JPEG or New JPEG =&gt; "FALSE"; otherwise "TRUE".</td>
 </tr>
 <tr>
 <td>/Data/PlanarConfiguration@value</td>
-<td>Chunky => "PixelInterleaved"; Planar => "PlaneInterleaved".</td>
+<td>Chunky =&gt; "PixelInterleaved"; Planar =&gt; "PlaneInterleaved".</td>
 </tr>
 <tr>
 <td>/Data/SampleFormat@value</td>
-<td>PhotometricInterpretation PaletteColor => "Index";
-SampleFormat unsigned integer data => "UnsignedIntegral";
-SampleFormat two's complement signed integer data => "SignedIntegral";
-SampleFormat IEEE floating point data => "Real";
+<td>PhotometricInterpretation PaletteColor =&gt; "Index";
+SampleFormat unsigned integer data =&gt; "UnsignedIntegral";
+SampleFormat two's complement signed integer data =&gt; "SignedIntegral";
+SampleFormat IEEE floating point data =&gt; "Real";
 otherwise element not emitted.
 </td>
 </tr>
@@ -310,8 +291,8 @@
 </tr>
 <tr>
 <td>/Data/SampleMSB@value</td>
-<td>FillOrder: left-to-right => space-separated list of BitsPerSample-1;
-right-to-left => space-separated list of 0s.</td>
+<td>FillOrder: left-to-right =&gt; space-separated list of BitsPerSample-1;
+right-to-left =&gt; space-separated list of 0s.</td>
 </tr>
 <tr>
 <td>/Dimension/PixelAspectRatio@value</td>
@@ -343,9 +324,9 @@
 </tr>
 <tr>
 <td>/Document/SubimageInterpretation@value</td>
-<td>NewSubFileType: transparency => "TransparencyMask";
-reduced-resolution => "ReducedResolution";
-single page => "SinglePage".</td>
+<td>NewSubFileType: transparency =&gt; "TransparencyMask";
+reduced-resolution =&gt; "ReducedResolution";
+single page =&gt; "SinglePage".</td>
 </tr>
 <tr>
 <td>/Document/ImageCreationTime@value</td>
@@ -357,24 +338,23 @@
 Artist, HostComputer, InkNames, Copyright:
 /Text/TextEntry@keyword = field name,
 /Text/TextEntry@value = field value.<br>
-Example: TIFF Software field => /Text/TextEntry@keyword = "Software",
+Example: TIFF Software field =&gt; /Text/TextEntry@keyword = "Software",
 /Text/TextEntry@value = Name and version number of the software package(s)
 used to create the image.</td>
 </tr>
 <tr>
 <td>/Transparency/Alpha@value</td>
-<td>ExtraSamples: associated alpha => "premultiplied";
-unassociated alpha => "nonpremultiplied".</td>
+<td>ExtraSamples: associated alpha =&gt; "premultiplied";
+unassociated alpha =&gt; "nonpremultiplied".</td>
 </tr>
 </table>
-</p>
 
-<h4><a name="ExifRead"/>Reading Exif Images</h4>
+<h4><a id="ExifRead">Reading Exif Images</a></h4>
 
 The TIFF reader may be used to read an uncompressed Exif image or the
-contents of the <tt>APP1</tt> marker segment of a compressed Exif image.
+contents of the <code>APP1</code> marker segment of a compressed Exif image.
 
-<h5><a name="ExifReadTIFF"/>Reading Uncompressed Exif Images</h5>
+<h5><a id="ExifReadTIFF">Reading Uncompressed Exif Images</a></h5>
 
 An uncompressed Exif image is a one- or two-page uncompressed TIFF image
 with a specific ordering of its IFD and image data content. Each pixel
@@ -406,12 +386,12 @@
 stream and not as a thumbnail, i.e.,
 <code>tiffReader.hasThumbnails(0)</code> will return <code>false</code>.
 
-<h5><a name="ExifReadJPEG"/>Reading Compressed Exif Images</h5>
+<h5><a id="ExifReadJPEG">Reading Compressed Exif Images</a></h5>
 
 A compressed Exif image is a 3-band ISO/IEC 10918-1 baseline DCT JPEG stream
-with an inserted <tt>APP1</tt> marker segment. The parameters of the marker
+with an inserted <code>APP1</code> marker segment. The parameters of the marker
 segment after the length are the 6-byte sequence
-<code>{'E',&nbsp;'x',&nbsp;'i',&nbsp;'f',&nbsp;0x00,&nbsp;0x00}</code></code>
+<code>{'E',&nbsp;'x',&nbsp;'i',&nbsp;'f',&nbsp;0x00,&nbsp;0x00}</code>
 followed by a complete TIFF stream. The embedded TIFF stream contains a primary
 IFD describing the JPEG image optionally followed by a thumbnail IFD and
 compressed or uncompressed thumbnail image data. Note that the embedded TIFF
@@ -419,12 +399,12 @@
 nor any descriptive fields which duplicate information found in the JPEG
 stream itself.
 
-<p>The parameter content of the <tt>APP1</tt> marker segment may be obtained
+<p>The parameter content of the <code>APP1</code> marker segment may be obtained
 from the user object of the associated <code>Node</code> in a
-<tt>javax_imageio_jpeg_image_1.0</tt> native image metadata tree extracted
+<code>javax_imageio_jpeg_image_1.0</code> native image metadata tree extracted
 from the image metadata object returned by the JPEG reader. This APP1 Exif
 node will be a child of the node named "markerSequence" and will
-have name <tt>unknown</tt> and an attribute named <tt>MarkerTag</tt> with
+have name <code>unknown</code> and an attribute named <code>MarkerTag</code> with
 integral value <code>0xE1</code> (<code>String</code> value
 <code>"225"</code>). The user object of this node will be a byte array
 which starts with the six bytes <code>{'E', 'x', 'i', 'f', '0', '0'}</code>.
@@ -472,9 +452,8 @@
 images. Calling <code>tiffReader.read(0,&nbsp;readParam)</code> will throw
 an exception as the primary image in the embedded TIFF stream is always
 empty; the primary image should be obtained using the JPEG reader itself.
-</p>
 
-<h3><a name="Writing"/>Writing Images</h3>
+<h3><a id="Writing">Writing Images</a></h3>
 
 TIFF images are written by a <a href="../../ImageWriter.html">ImageWriter</a> which may be
 controlled by its public interface as well as via a supplied
@@ -482,7 +461,7 @@
 by the <code>getDefaultWriteParam()</code> method of the TIFF <code>ImageWriter</code>,
 the <code>canWriteTiles()</code> and <code>canWriteCompressed()</code> methods
 will return <code>true</code>; the <code>canOffsetTiles()</code> and
-<code>canWriteProgressive()</code> methods will return <code>false</code>.</p>
+<code>canWriteProgressive()</code> methods will return <code>false</code>.
 
 The TIFF writer supports many optional capabilities including writing tiled
 images, inserting images, writing or inserting empty images, and replacing image
@@ -497,12 +476,12 @@
 compression is being used and strips are being written, the number of
 rows per strip is rounded to a multiple of 8 times the maximum MCU over
 both dimensions.</p>
- 
+
  <!-- <h4>Supported Image Types</h4> -->
 
 <!-- Table? -->
 
-<h4><a name="Compression"/>Compression</h4>
+<h4><a id="Compression">Compression</a></h4>
 
 The compression type may be set via the <code>setCompressionType()</code> method of
 the <code>ImageWriteParam</code> after setting the compression mode to
@@ -592,21 +571,21 @@
 
 <p> If ZLib/Deflate or JPEG compression is used, the compression quality
 may be set. For ZLib/Deflate the supplied floating point quality value is
-rescaled to the range <tt>[1,&nbsp;9]</tt> and truncated to an integer
+rescaled to the range <code>[1,&nbsp;9]</code> and truncated to an integer
 to derive the Deflate compression level. For JPEG the floating point
 quality value is passed directly to the JPEG writer plug-in which
 interprets it in the usual way.</p>
 
-<h4><a name="ColorConversionWrite"/>Color Conversion</h4>
+<h4><a id="ColorConversionWrite">Color Conversion</a></h4>
 
 <p>If the source image data
 color space type is RGB, and the destination photometric type is CIE L*a*b* or
 YCbCr, then the source image data will be automatically converted from
 RGB using an internal color converter.</p>
 
-<h4><a name="ICCProfilesWrite"/>ICC Profiles</h4>
+<h4><a id="ICCProfilesWrite">ICC Profiles</a></h4>
 
-An <tt>ICC Profile</tt> field will be written if either:
+An <code>ICC Profile</code> field will be written if either:
 <ul>
 <li>one is present in the native image metadata
 <a href="../IIOMetadata.html">IIOMetadata</a> instance supplied to the writer,
@@ -614,50 +593,50 @@
 <li>the <a href="../../../../java/awt/color/ColorSpace.html">ColorSpace</a>
 of the destination <code>ImageTypeSpecifier</code> is an instance of
 <code>ICC_ColorSpace</code> which is not one of the standard
-color spaces defined by the <tt>CS_*</tt> constants in the
+color spaces defined by the <code>CS_*</code> constants in the
 <code>ColorSpace</code> class. The destination type is set via
 <code>ImageWriteParam.setDestinationType(ImageTypeSpecifier)</code> and defaults
 to the <code>ImageTypeSpecifier</code> of the image being written.
 </li>
 </ul>
 
-<h4><a name="MetadataIssuesWrite"/>Metadata Issues</h4>
+<h4><a id="MetadataIssuesWrite">Metadata Issues</a></h4>
 
 Some behavior of the writer is affected by or may affect the contents of
 the image metadata which may be supplied by the user.
 
-<p>For bilevel images, the <tt>FillOrder</tt>, and <tt>T4Options</tt>
+<p>For bilevel images, the <code>FillOrder</code>, and <code>T4Options</code>
 fields affect the output data. The data will be filled right-to-left if
-<tt>FillOrder</tt> is present with a value of 2
+<code>FillOrder</code> is present with a value of 2
 (<code>BaselineTIFFTagSet.FILL_ORDER_RIGHT_TO_LEFT</code>)
-and will be filled left-to-right otherwise. The value of <tt>T4Options</tt>
+and will be filled left-to-right otherwise. The value of <code>T4Options</code>
 specifies whether the data should be 1D- or 2D-encoded and whether EOL
 padding should be used.</p>
 
-<p>For all images the value of the <tt>RowsPerStrip</tt> field is used
+<p>For all images the value of the <code>RowsPerStrip</code> field is used
 to the set the number of rows per strip if the image is not tiled. The
 default number of rows per strip is either 8 or the number of rows which
 would fill no more than 8 kilobytes, whichever is larger.</p>
 
-<p>For all images the tile dimensions may be set using the <tt>TileWidth</tt>
-and <tt>TileLength</tt> field values if the tiling mode is
+<p>For all images the tile dimensions may be set using the <code>TileWidth</code>
+and <code>TileLength</code> field values if the tiling mode is
 <code>ImageWriteParam.MODE_COPY_FROM_METADATA</code>. If this mode
 is set but the fields are not, their respective default values are the image
 width and height.</p>
 
-<p>When using JPEG-in-TIFF compression, a <tt>JPEGTables</tt> field will be
+<p>When using JPEG-in-TIFF compression, a <code>JPEGTables</code> field will be
 written to the IFD and abbreviated JPEG streams to each strip or tile if and
-only if a <tt>JPEGTables</tt> field is contained in the metadata object
-provided to the writer. If the contents of the <tt>JPEGTables</tt> field is
+only if a <code>JPEGTables</code> field is contained in the metadata object
+provided to the writer. If the contents of the <code>JPEGTables</code> field is
 a valid tables-only JPEG stream, then it will be used; otherwise the contents
 of the field will be replaced with default visually lossless tables. If no
-such <tt>JPEGTables</tt> field is present in the metadata, then no
-<tt>JPEGTables</tt> field will be written to the output and each strip or
+such <code>JPEGTables</code> field is present in the metadata, then no
+<code>JPEGTables</code> field will be written to the output and each strip or
 tile will be written as a separate, self-contained JPEG stream.</p>
 
 <p>When using Deflate/ZLib or LZW compression, if the image has 8 bits per
 sample, a horizontal differencing predictor will be used if the
-<tt>Predictor</tt> field is present with a value of 2
+<code>Predictor</code> field is present with a value of 2
 (<code>BaselineTIFFTagSet.PREDICTOR_HORIZONTAL_DIFFERENCING</code>).
 If prediction is so requested but the image does not have
 8 bits per sample the field will be reset to have the value 1
@@ -667,30 +646,30 @@
 <p>Some fields may be added or modified:
 
 <ul>
-<li><tt>PhotometricInterpretation</tt> if not present.</li>
-<li><tt>PlanarConfiguration</tt> if this field is present with value
-<tt>Planar</tt> is is reset to <tt>Chunky</tt>.</li>
-<li><tt>Compression</tt> always.</li>
-<li><tt>BitsPerSample</tt> if the image is not bilevel.</li>
-<li><tt>SamplesPerPixel</tt> always.</li>
-<li><tt>ExtraSamples</tt> if an alpha channel is present.</li>
-<li><tt>SampleFormat</tt> if not present and the data are 16- or 32-bit
+<li><code>PhotometricInterpretation</code> if not present.</li>
+<li><code>PlanarConfiguration</code> if this field is present with value
+<code>Planar</code> is is reset to <code>Chunky</code>.</li>
+<li><code>Compression</code> always.</li>
+<li><code>BitsPerSample</code> if the image is not bilevel.</li>
+<li><code>SamplesPerPixel</code> always.</li>
+<li><code>ExtraSamples</code> if an alpha channel is present.</li>
+<li><code>SampleFormat</code> if not present and the data are 16- or 32-bit
 integers or floating point.</li>
-<li><tt>ColorMap</tt> if the <tt>PhotometricInterpretation</tt> is
-<tt>RGBPalette</tt>.</li>
-<li><tt>ImageWidth</tt> and <tt>ImageLength</tt> always.</li>
-<li><tt>TileWidth</tt>, <tt>TileLength</tt>, <tt>TileOffsets</tt>, and
-<tt>TileByteCounts</tt> if a tiled image is being written.</li>
-<li><tt>RowsPerStrip</tt>, <tt>StripOffsets</tt>, and <tt>StripByteCounts</tt>
+<li><code>ColorMap</code> if the <code>PhotometricInterpretation</code> is
+<code>RGBPalette</code>.</li>
+<li><code>ImageWidth</code> and <code>ImageLength</code> always.</li>
+<li><code>TileWidth</code>, <code>TileLength</code>, <code>TileOffsets</code>, and
+<code>TileByteCounts</code> if a tiled image is being written.</li>
+<li><code>RowsPerStrip</code>, <code>StripOffsets</code>, and <code>StripByteCounts</code>
 if a tiled image is <i>not</i> being written.</li>
-<li><tt>XResolution</tt>, <tt>YResolution</tt>, and <tt>ResolutionUnit</tt>
+<li><code>XResolution</code>, <code>YResolution</code>, and <code>ResolutionUnit</code>
 if none of these is present.</li>
-<li><tt>YCbCrSubsampling</tt> and <tt>YCbCrPositioning</tt> if the
+<li><code>YCbCrSubsampling</code> and <code>YCbCrPositioning</code> if the
 photometric interpretation is YCbCr and the compression type is not JPEG
 (only [1,&nbsp;1] subsampling and cosited positioning are supported for
 non-JPEG YCbCr output).</li>
-<li><tt>YCbCrSubsampling</tt>, <tt>YCbCrPositioning</tt>, and
-<tt>ReferenceBlackWhite</tt>: if the compression type is JPEG and the color
+<li><code>YCbCrSubsampling</code>, <code>YCbCrPositioning</code>, and
+<code>ReferenceBlackWhite</code>: if the compression type is JPEG and the color
 space is RGB these will be reset to [2,&nbsp;2] centered subsampling with no
 headroom/footroom (0:255,128:255,128:255).</li>
 </ul>
@@ -698,24 +677,23 @@
 <p>Some fields may be removed:
 
 <ul>
-<li><tt>BitsPerSample</tt> if the image is bilevel.</li>
-<li><tt>ExtraSamples</tt> if the image does not have an alpha channel.</li>
-<li><tt>ColorMap</tt> if the photometric interpretation is not
-<tt>RGBPalette</tt>.</li>
-<li><tt>TileWidth</tt>, <tt>TileLength</tt>, <tt>TileOffsets</tt>, and
-<tt>TileByteCounts</tt> if tiling <i>is not</i> being used.</li>
-<li><tt>RowsPerStrip</tt>, <tt>StripOffsets</tt>, and <tt>StripByteCounts</tt>
+<li><code>BitsPerSample</code> if the image is bilevel.</li>
+<li><code>ExtraSamples</code> if the image does not have an alpha channel.</li>
+<li><code>ColorMap</code> if the photometric interpretation is not
+<code>RGBPalette</code>.</li>
+<li><code>TileWidth</code>, <code>TileLength</code>, <code>TileOffsets</code>, and
+<code>TileByteCounts</code> if tiling <i>is not</i> being used.</li>
+<li><code>RowsPerStrip</code>, <code>StripOffsets</code>, and <code>StripByteCounts</code>
 if tiling <i>is</i> being used.</li>
-<li><tt>YCbCrSubsampling</tt>, <tt>YCbCrPositioning</tt>, and
-<tt>ReferenceBlackWhite</tt> if the compression type is JPEG and the
+<li><code>YCbCrSubsampling</code>, <code>YCbCrPositioning</code>, and
+<code>ReferenceBlackWhite</code> if the compression type is JPEG and the
 color space is grayscale.</li>
-<li><tt>JPEGProc</tt>, <tt>JPEGInterchangeFormat</tt>,
-<tt>JPEGInterchangeFormatLength</tt>, <tt>JPEGRestartInterval</tt>,
-<tt>JPEGLosslessPredictors</tt>, <tt>JPEGPointTransforms</tt>,
-<tt>JPEGQTables</tt>, <tt>JPEGDCTables</tt>, and
-<tt>JPEGACTables</tt> if the compression type is JPEG.</li>
+<li><code>JPEGProc</code>, <code>JPEGInterchangeFormat</code>,
+<code>JPEGInterchangeFormatLength</code>, <code>JPEGRestartInterval</code>,
+<code>JPEGLosslessPredictors</code>, <code>JPEGPointTransforms</code>,
+<code>JPEGQTables</code>, <code>JPEGDCTables</code>, and
+<code>JPEGACTables</code> if the compression type is JPEG.</li>
 </ul>
-</p>
 
 <p>Other fields present in the supplied metadata are uninterpreted and will
 be written as supplied.</p>
@@ -735,7 +713,7 @@
 <code>IIOMetadata</code> object so obtained may then be passed to the TIFF
 writer.</p>
 
-<h5><a name="MapStandardNative"/>
+<h5><a id="MapStandardNative"></a>
 Mapping of the Standard Metadata Format to TIFF Native Image Metadata</h5>
 
 The derivation of <a href="#ImageMetadata">TIFF native image metadata</a>
@@ -743,7 +721,6 @@
 <a href="standard_metadata.html">javax_imageio_1.0</a> is
 given in the following table.
 
-<p>
 <table border="1">
 <tr>
 <th>TIFF Field</th>
@@ -754,10 +731,10 @@
 PhotometricInterpretation
 </td>
 <td>/Chroma/ColorSpaceType@name: "GRAY" and /Chroma/BlackIsZero@value = "FALSE"
-=> WhiteIsZero; "GRAY" and /Document/SubimageInterpretation@value =
-"TransparencyMask" => TransparencyMask; "RGB" and /Chroma/Palette present =>
-PaletteColor; "GRAY" => BlackIsZero; "RGB" => RGB; "YCbCr" => YCbCr;
-"CMYK" => CMYK; "Lab" => CIELab.</td>
+=&gt; WhiteIsZero; "GRAY" and /Document/SubimageInterpretation@value =
+"TransparencyMask" =&gt; TransparencyMask; "RGB" and /Chroma/Palette present =&gt;
+PaletteColor; "GRAY" =&gt; BlackIsZero; "RGB" =&gt; RGB; "YCbCr" =&gt; YCbCr;
+"CMYK" =&gt; CMYK; "Lab" =&gt; CIELab.</td>
 </tr>
 <tr>
 <td>SamplesPerPixel</td>
@@ -769,21 +746,21 @@
 </tr>
 <tr>
 <td>Compression</td>
-<td>/Compression/CompressionTypeName@value: "none" => Uncompressed;
-"CCITT RLE" => CCITT 1D; "CCITT T.4" => Group 3 Fax; "CCITT T.6" => Group 4
-Fax; "LZW" => LZW; "Old JPEG" => JPEG; "JPEG" => New JPEG; "ZLib" => ZLib;
-"PackBits" => PackBits; "Deflate" => Deflate.</td>
+<td>/Compression/CompressionTypeName@value: "none" =&gt; Uncompressed;
+"CCITT RLE" =&gt; CCITT 1D; "CCITT T.4" =&gt; Group 3 Fax; "CCITT T.6" =&gt; Group 4
+Fax; "LZW" =&gt; LZW; "Old JPEG" =&gt; JPEG; "JPEG" =&gt; New JPEG; "ZLib" =&gt; ZLib;
+"PackBits" =&gt; PackBits; "Deflate" =&gt; Deflate.</td>
 </tr>
 <tr>
 <td>PlanarConfiguration</td>
-<td>/Data/PlanarConfiguration@value: "PixelInterleaved" => Chunky;
-"PlaneInterleaved" => Planar.</td>
+<td>/Data/PlanarConfiguration@value: "PixelInterleaved" =&gt; Chunky;
+"PlaneInterleaved" =&gt; Planar.</td>
 </tr>
 <tr>
 <td>SampleFormat</td>
-<td>/Data/SampleFormat@value: "SignedIntegral" => two's complement signed
-integer data; "UnsignedIntegral" => unsigned integer data; "Real" =>
-IEEE floating point data; "Index" => unsigned integer data.
+<td>/Data/SampleFormat@value: "SignedIntegral" =&gt; two's complement signed
+integer data; "UnsignedIntegral" =&gt; unsigned integer data; "Real" =&gt;
+IEEE floating point data; "Index" =&gt; unsigned integer data.
 </td>
 </tr>
 <tr>
@@ -792,8 +769,8 @@
 </tr>
 <tr>
 <td>FillOrder</td>
-<td>/Data/SampleMSB@value: if all values in space-separated list are 0s =>
-right-to-left; otherwise => left-to-right.
+<td>/Data/SampleMSB@value: if all values in space-separated list are 0s =&gt;
+right-to-left; otherwise =&gt; left-to-right.
 </td>
 </tr>
 <tr>
@@ -826,9 +803,9 @@
 </tr>
 <tr>
 <td>NewSubFileType</td>
-<td>/Document/SubimageInterpretation@value: "TransparencyMask" =>
-transparency mask; "ReducedResolution" => reduced-resolution;
-"SinglePage" => single page.</td>
+<td>/Document/SubimageInterpretation@value: "TransparencyMask" =&gt;
+transparency mask; "ReducedResolution" =&gt; reduced-resolution;
+"SinglePage" =&gt; single page.</td>
 </tr>
 <tr>
 <td>DateTime</td>
@@ -843,29 +820,28 @@
 </tr>
 <tr>
 <td>ExtraSamples</td>
-<td>/Transparency/Alpha@value: "premultiplied" => associated alpha, count 1;
-"nonpremultiplied" => unassociated alpha, count 1.</td>
+<td>/Transparency/Alpha@value: "premultiplied" =&gt; associated alpha, count 1;
+"nonpremultiplied" =&gt; unassociated alpha, count 1.</td>
 </tr>
 <tr>
 <td></td>
 <td></td>
 </tr>
 </table>
-</p>
 
-<h4><a name="ExifWrite"/>Writing Exif Images</h4>
+<h4><a id="ExifWrite">Writing Exif Images</a></h4>
 
 The TIFF writer may be used to write an uncompressed Exif image or the
-contents of the <tt>APP1</tt> marker segment of a compressed Exif image.
+contents of the <code>APP1</code> marker segment of a compressed Exif image.
 
-<h5><a name="ExifWriteTIFF"/>Writing Uncompressed Exif Images</h5>
+<h5><a id="ExifWriteTIFF">Writing Uncompressed Exif Images</a></h5>
 
 When writing a sequence of images each image is normally recorded as
 {IFD,&nbsp;IFD Value,&nbsp;Image Data}. The Exif specification requires
 that an uncompressed Exif image be structured as follows:
 
+<a id="ExifStructure"></a>
 <ol>
-<a name="ExifStructure"/>
 <li>Image File Header</li>
 <li>Primary IFD</li>
 <li>Primary IFD Value</li>
@@ -925,9 +901,9 @@
     }
 </code></pre>
 
-<h5><a name="ExifWriteJPEG"/>Writing Compressed Exif Images</h5>
+<h5><a id="ExifWriteJPEG">Writing Compressed Exif Images</a></h5>
 
-The structure of the embedded TIFF stream in the <tt>APP1</tt> segment of a
+The structure of the embedded TIFF stream in the <code>APP1</code> segment of a
 compressed Exif image is identical to the <a href="#ExifStructure">
 uncompressed Exif image structure</a> except that there are no primary
 image data, i.e., the primary IFD does not refer to any image data.
@@ -1013,7 +989,7 @@
     Node tree = jpegImageMetadata.getAsTree(nativeFormat);
     NodeList children = tree.getChildNodes();
     int numChildren = children.getLength();
-    for (int i = 0; i < numChildren; i++) {
+    for (int i = 0; i &lt; numChildren; i++) {
         Node child = children.item(i);
         if (child.getNodeName().equals("markerSequence")) {
             child.appendChild(app1Node);
@@ -1032,7 +1008,7 @@
 and written to the JPEG stream when the primary image is written using
 the JPEG writer.
 
-<h3><a name="StreamMetadata"/>Stream Metadata</h3>
+<h3><a id="StreamMetadata">Stream Metadata</a></h3>
 
 The DTD for the TIFF native stream metadata format is as follows:
 
@@ -1042,14 +1018,14 @@
   &lt;!ELEMENT "javax_imageio_tiff_stream_1.0" (ByteOrder)>
 
     &lt;!ELEMENT "ByteOrder" EMPTY&gt;
-      &lt;!-- The stream byte order --&gt; 
+      &lt;!-- The stream byte order --&gt;
       &lt;!ATTLIST "ByteOrder" "value" #CDATA #REQUIRED&gt;
-        &lt;!-- One of "BIG_ENDIAN" or "LITTLE_ENDIAN" --&gt; 
+        &lt;!-- One of "BIG_ENDIAN" or "LITTLE_ENDIAN" --&gt;
         &lt;!-- Data type: String --&gt;
 ]&gt;
 </pre>
 
-<h3><a name="ImageMetadata"/>Image Metadata</h3>
+<h3><a id="ImageMetadata">Image Metadata</a></h3>
 
 The DTD for the TIFF native image metadata format is as follows:
 
@@ -1059,140 +1035,140 @@
   &lt;!ELEMENT "javax_imageio_tiff_image_1.0" (TIFFIFD)*&gt;
 
     &lt;!ELEMENT "TIFFIFD" (TIFFField | TIFFIFD)*&gt;
-      &lt;!-- An IFD (directory) containing fields --&gt; 
+      &lt;!-- An IFD (directory) containing fields --&gt;
       &lt;!ATTLIST "TIFFIFD" "tagSets" #CDATA #REQUIRED&gt;
         &lt;!-- Data type: String --&gt;
       &lt;!ATTLIST "TIFFIFD" "parentTagNumber" #CDATA #IMPLIED&gt;
-        &lt;!-- The tag number of the field pointing to this IFD --&gt; 
+        &lt;!-- The tag number of the field pointing to this IFD --&gt;
         &lt;!-- Data type: Integer --&gt;
       &lt;!ATTLIST "TIFFIFD" "parentTagName" #CDATA #IMPLIED&gt;
-        &lt;!-- A mnemonic name for the field pointing to this IFD, if known 
-             --&gt; 
+        &lt;!-- A mnemonic name for the field pointing to this IFD, if known
+             --&gt;
         &lt;!-- Data type: String --&gt;
 
       &lt;!ELEMENT "TIFFField" (TIFFBytes | TIFFAsciis |
         TIFFShorts | TIFFSShorts | TIFFLongs | TIFFSLongs |
         TIFFRationals | TIFFSRationals |
         TIFFFloats | TIFFDoubles | TIFFUndefined)&gt;
-        &lt;!-- A field containing data --&gt; 
+        &lt;!-- A field containing data --&gt;
         &lt;!ATTLIST "TIFFField" "number" #CDATA #REQUIRED&gt;
-          &lt;!-- The tag number asociated with the field --&gt; 
+          &lt;!-- The tag number asociated with the field --&gt;
           &lt;!-- Data type: String --&gt;
         &lt;!ATTLIST "TIFFField" "name" #CDATA #IMPLIED&gt;
-          &lt;!-- A mnemonic name associated with the field, if known --&gt; 
+          &lt;!-- A mnemonic name associated with the field, if known --&gt;
           &lt;!-- Data type: String --&gt;
 
         &lt;!ELEMENT "TIFFBytes" (TIFFByte)*&gt;
-          &lt;!-- A sequence of TIFFByte nodes --&gt; 
+          &lt;!-- A sequence of TIFFByte nodes --&gt;
 
           &lt;!ELEMENT "TIFFByte" EMPTY&gt;
-            &lt;!-- An integral value between 0 and 255 --&gt; 
+            &lt;!-- An integral value between 0 and 255 --&gt;
             &lt;!ATTLIST "TIFFByte" "value" #CDATA #IMPLIED&gt;
-              &lt;!-- The value --&gt; 
+              &lt;!-- The value --&gt;
               &lt;!-- Data type: String --&gt;
             &lt;!ATTLIST "TIFFByte" "description" #CDATA #IMPLIED&gt;
-              &lt;!-- A description, if available --&gt; 
+              &lt;!-- A description, if available --&gt;
               &lt;!-- Data type: String --&gt;
 
         &lt;!ELEMENT "TIFFAsciis" (TIFFAscii)*&gt;
-          &lt;!-- A sequence of TIFFAscii nodes --&gt; 
+          &lt;!-- A sequence of TIFFAscii nodes --&gt;
 
           &lt;!ELEMENT "TIFFAscii" EMPTY&gt;
-            &lt;!-- A String value --&gt; 
+            &lt;!-- A String value --&gt;
             &lt;!ATTLIST "TIFFAscii" "value" #CDATA #IMPLIED&gt;
-              &lt;!-- The value --&gt; 
+              &lt;!-- The value --&gt;
               &lt;!-- Data type: String --&gt;
 
         &lt;!ELEMENT "TIFFShorts" (TIFFShort)*&gt;
-          &lt;!-- A sequence of TIFFShort nodes --&gt; 
+          &lt;!-- A sequence of TIFFShort nodes --&gt;
 
           &lt;!ELEMENT "TIFFShort" EMPTY&gt;
-            &lt;!-- An integral value between 0 and 65535 --&gt; 
+            &lt;!-- An integral value between 0 and 65535 --&gt;
             &lt;!ATTLIST "TIFFShort" "value" #CDATA #IMPLIED&gt;
-              &lt;!-- The value --&gt; 
+              &lt;!-- The value --&gt;
               &lt;!-- Data type: String --&gt;
             &lt;!ATTLIST "TIFFShort" "description" #CDATA #IMPLIED&gt;
-              &lt;!-- A description, if available --&gt; 
+              &lt;!-- A description, if available --&gt;
               &lt;!-- Data type: String --&gt;
 
         &lt;!ELEMENT "TIFFSShorts" (TIFFSShort)*&gt;
-          &lt;!-- A sequence of TIFFSShort nodes --&gt; 
+          &lt;!-- A sequence of TIFFSShort nodes --&gt;
 
           &lt;!ELEMENT "TIFFSShort" EMPTY&gt;
-            &lt;!-- An integral value between -32768 and 32767 --&gt; 
+            &lt;!-- An integral value between -32768 and 32767 --&gt;
             &lt;!ATTLIST "TIFFSShort" "value" #CDATA #IMPLIED&gt;
-              &lt;!-- The value --&gt; 
+              &lt;!-- The value --&gt;
               &lt;!-- Data type: String --&gt;
             &lt;!ATTLIST "TIFFSShort" "description" #CDATA #IMPLIED&gt;
-              &lt;!-- A description, if available --&gt; 
+              &lt;!-- A description, if available --&gt;
               &lt;!-- Data type: String --&gt;
 
         &lt;!ELEMENT "TIFFLongs" (TIFFLong)*&gt;
-          &lt;!-- A sequence of TIFFLong nodes --&gt; 
+          &lt;!-- A sequence of TIFFLong nodes --&gt;
 
           &lt;!ELEMENT "TIFFLong" EMPTY&gt;
-            &lt;!-- An integral value between 0 and 4294967295 --&gt; 
+            &lt;!-- An integral value between 0 and 4294967295 --&gt;
             &lt;!ATTLIST "TIFFLong" "value" #CDATA #IMPLIED&gt;
-              &lt;!-- The value --&gt; 
+              &lt;!-- The value --&gt;
               &lt;!-- Data type: String --&gt;
             &lt;!ATTLIST "TIFFLong" "description" #CDATA #IMPLIED&gt;
-              &lt;!-- A description, if available --&gt; 
+              &lt;!-- A description, if available --&gt;
               &lt;!-- Data type: String --&gt;
 
         &lt;!ELEMENT "TIFFSLongs" (TIFFSLong)*&gt;
-          &lt;!-- A sequence of TIFFSLong nodes --&gt; 
+          &lt;!-- A sequence of TIFFSLong nodes --&gt;
 
           &lt;!ELEMENT "TIFFSLong" EMPTY&gt;
-            &lt;!-- An integral value between -2147483648 and 2147482647 --&gt; 
+            &lt;!-- An integral value between -2147483648 and 2147482647 --&gt;
             &lt;!ATTLIST "TIFFSLong" "value" #CDATA #IMPLIED&gt;
-              &lt;!-- The value --&gt; 
+              &lt;!-- The value --&gt;
               &lt;!-- Data type: String --&gt;
             &lt;!ATTLIST "TIFFSLong" "description" #CDATA #IMPLIED&gt;
-              &lt;!-- A description, if available --&gt; 
+              &lt;!-- A description, if available --&gt;
               &lt;!-- Data type: String --&gt;
 
         &lt;!ELEMENT "TIFFRationals" (TIFFRational)*&gt;
-          &lt;!-- A sequence of TIFFRational nodes --&gt; 
+          &lt;!-- A sequence of TIFFRational nodes --&gt;
 
           &lt;!ELEMENT "TIFFRational" EMPTY&gt;
-            &lt;!-- A rational value consisting of an unsigned numerator and 
-                 denominator --&gt; 
+            &lt;!-- A rational value consisting of an unsigned numerator and
+                 denominator --&gt;
             &lt;!ATTLIST "TIFFRational" "value" #CDATA #IMPLIED&gt;
-              &lt;!-- The numerator and denominator, separated by a slash --&gt; 
+              &lt;!-- The numerator and denominator, separated by a slash --&gt;
               &lt;!-- Data type: String --&gt;
 
         &lt;!ELEMENT "TIFFSRationals" (TIFFSRational)*&gt;
-          &lt;!-- A sequence of TIFFSRational nodes --&gt; 
+          &lt;!-- A sequence of TIFFSRational nodes --&gt;
 
           &lt;!ELEMENT "TIFFSRational" EMPTY&gt;
-            &lt;!-- A rational value consisting of a signed numerator and 
-                 denominator --&gt; 
+            &lt;!-- A rational value consisting of a signed numerator and
+                 denominator --&gt;
             &lt;!ATTLIST "TIFFSRational" "value" #CDATA #IMPLIED&gt;
-              &lt;!-- The numerator and denominator, separated by a slash --&gt; 
+              &lt;!-- The numerator and denominator, separated by a slash --&gt;
               &lt;!-- Data type: String --&gt;
 
         &lt;!ELEMENT "TIFFFloats" (TIFFFloat)*&gt;
-          &lt;!-- A sequence of TIFFFloat nodes --&gt; 
+          &lt;!-- A sequence of TIFFFloat nodes --&gt;
 
           &lt;!ELEMENT "TIFFFloat" EMPTY&gt;
-            &lt;!-- A single-precision floating-point value --&gt; 
+            &lt;!-- A single-precision floating-point value --&gt;
             &lt;!ATTLIST "TIFFFloat" "value" #CDATA #IMPLIED&gt;
-              &lt;!-- The value --&gt; 
+              &lt;!-- The value --&gt;
               &lt;!-- Data type: String --&gt;
 
         &lt;!ELEMENT "TIFFDoubles" (TIFFDouble)*&gt;
-          &lt;!-- A sequence of TIFFDouble nodes --&gt; 
+          &lt;!-- A sequence of TIFFDouble nodes --&gt;
 
           &lt;!ELEMENT "TIFFDouble" EMPTY&gt;
-            &lt;!-- A double-precision floating-point value --&gt; 
+            &lt;!-- A double-precision floating-point value --&gt;
             &lt;!ATTLIST "TIFFDouble" "value" #CDATA #IMPLIED&gt;
-              &lt;!-- The value --&gt; 
+              &lt;!-- The value --&gt;
               &lt;!-- Data type: String --&gt;
 
         &lt;!ELEMENT "TIFFUndefined" EMPTY&gt;
-          &lt;!-- Uninterpreted byte data --&gt; 
+          &lt;!-- Uninterpreted byte data --&gt;
           &lt;!ATTLIST "TIFFUndefined" "value" #CDATA #IMPLIED&gt;
-            &lt;!-- A list of comma-separated byte values --&gt; 
+            &lt;!-- A list of comma-separated byte values --&gt;
             &lt;!-- Data type: String --&gt;
 ]&gt;
 </pre>
--- a/src/java.desktop/share/classes/javax/imageio/metadata/doc-files/wbmp_metadata.html	Mon Dec 04 19:10:15 2017 +0100
+++ b/src/java.desktop/share/classes/javax/imageio/metadata/doc-files/wbmp_metadata.html	Mon Dec 04 10:12:46 2017 -0800
@@ -1,8 +1,11 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<html>
+<!doctype html>
+<html lang="en">
 <head>
+  <meta charset="utf-8"/>
+  <title>WBMP Metadata Format Specification</title>
+</head>
 <!--
-Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved.
+Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved.
 DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 
 This code is free software; you can redistribute it and/or modify it
@@ -26,13 +29,8 @@
 questions.
 -->
 
-<title>WBMP Metadata Format Specification</title>
-</head>
-
 <body>
-<center><h1>
-WBMP Metadata Format Specification
-</h1></center>
+<h1>WBMP Metadata Format Specification</h1>
 
 The XML schema for the native image metadata format is as follows:
 
--- a/src/java.desktop/share/classes/javax/imageio/package-info.java	Mon Dec 04 19:10:15 2017 +0100
+++ b/src/java.desktop/share/classes/javax/imageio/package-info.java	Mon Dec 04 10:12:46 2017 -0800
@@ -113,7 +113,7 @@
  *
  * <h2> Standard Plug-in Notes</h2>
  *
- * <h3><a name="gif_plugin_notes">Standard plug-in for GIF image format</a></h3>
+ * <h3><a id="gif_plugin_notes">Standard plug-in for GIF image format</a></h3>
  * ImageIO provides {@code ImageReader} and {@code ImageWriter}plug-ins for the
  * <a href="http://www.w3.org/Graphics/GIF/spec-gif89a.txt"> Graphics
  * Interchange Format (GIF)</a> image format. These are the "standard" GIF
--- a/src/java.desktop/share/classes/javax/imageio/spi/IIORegistry.java	Mon Dec 04 19:10:15 2017 +0100
+++ b/src/java.desktop/share/classes/javax/imageio/spi/IIORegistry.java	Mon Dec 04 10:12:46 2017 -0800
@@ -56,46 +56,24 @@
 import java.util.ServiceConfigurationError;
 
 /**
- * A registry for service provider instances.  Service provider
- * classes may be detected at run time by means of meta-information in
- * the JAR files containing them.  The intent is that it be relatively
- * inexpensive to load and inspect all available service provider
- * classes.  These classes may them be used to locate and instantiate
+ * A registry for Image I/O service provider instances.  Service provider
+ * classes may be discovered at runtime by the mechanisms documented in
+ * {@link java.util.ServiceLoader ServiceLoader}.
+ *
+ * The intent is that it be relatively inexpensive to load and inspect
+ * all available Image I/O service provider classes.
+ * These classes may then be used to locate and instantiate
  * more heavyweight classes that will perform actual work, in this
  * case instances of {@code ImageReader},
  * {@code ImageWriter}, {@code ImageTranscoder},
  * {@code ImageInputStream}, and {@code ImageOutputStream}.
  *
- * Service providers found from the Java platform are automatically
+ * Service providers included in the Java runtime are automatically
  * loaded as soon as this class is instantiated.
  *
  * <p> When the {@code registerApplicationClasspathSpis} method
- * is called, service provider instances declared in the
- * meta-information section of JAR files on the application class path
- * are loaded.  To declare a service provider, a {@code services}
- * subdirectory is placed within the {@code META-INF} directory
- * that is present in every JAR file.  This directory contains a file
- * for each service provider interface that has one or more
- * implementation classes present in the JAR file.  For example, if
- * the JAR file contained a class named
- * {@code com.mycompany.imageio.MyFormatReaderSpi} which
- * implements the {@code ImageReaderSpi} interface, the JAR file
- * would contain a file named:
- *
- * <pre>
- * META-INF/services/javax.imageio.spi.ImageReaderSpi
- * </pre>
- *
- * containing the line:
- *
- * <pre>
- * com.mycompany.imageio.MyFormatReaderSpi
- * </pre>
- *
- * <p> The service provider classes are intended to be lightweight
- * and quick to load.  Implementations of these interfaces
- * should avoid complex dependencies on other classes and on
- * native code.
+ * is called, additional service provider instances will be discovered
+ * using {@link java.util.ServiceLoader ServiceLoader}.
  *
  * <p> It is also possible to manually add service providers not found
  * automatically, as well as to remove those that are using the
@@ -103,9 +81,8 @@
  * the application may customize the contents of the registry as it
  * sees fit.
  *
- * <p> For more details on declaring service providers, and the JAR
- * format in general, see the
- * <a href="{@docRoot}/../specs/jar/jar.html">JAR File Specification</a>.
+ * <p> For information on how to create and deploy service providers,
+ * refer to the documentation on {@link java.util.ServiceLoader ServiceLoader}
  */
 public final class IIORegistry extends ServiceRegistry {
 
--- a/src/java.desktop/share/classes/javax/imageio/spi/ServiceRegistry.java	Mon Dec 04 19:10:15 2017 +0100
+++ b/src/java.desktop/share/classes/javax/imageio/spi/ServiceRegistry.java	Mon Dec 04 10:12:46 2017 -0800
@@ -39,19 +39,13 @@
 import java.util.ServiceLoader;
 
 /**
- * A registry for service provider instances.
- *
- * <p> A <i>service</i> is a well-known set of interfaces and (usually
- * abstract) classes.  A <i>service provider</i> is a specific
- * implementation of a service.  The classes in a provider typically
- * implement the interface or subclass the class defined by the
- * service itself.
+ * A registry for service provider instances for Image I/O service types.
  *
  * <p> Service providers are stored in one or more <i>categories</i>,
- * each of which is defined by a class of interface (described by a
+ * each of which is defined by a class or interface (described by a
  * {@code Class} object) that all of its members must implement.
  *
- * <p>The set of categories supported is limited
+ * <p>The set of categories supported by this class is limited
  * to the following standard Image I/O service types:
  *
  * <ul>
@@ -63,9 +57,10 @@
  * </ul>
  *
  * <p>An attempt to load a provider that is not a subtype of one of the
- * above types will result in {@code IllegalArgumentException}. For
- * a general mechanism to load service providers, see
- * {@link java.util.ServiceLoader ServiceLoader}.
+ * above types will result in {@code IllegalArgumentException}.
+ * <p> For the general mechanism to load service providers, see
+ * {@link java.util.ServiceLoader ServiceLoader}, which is
+ * the underlying standard mechanism used by this class.
  *
  * <p> Only a single instance of a given leaf class (that is, the
  * actual class returned by {@code getClass()}, as opposed to any
@@ -80,24 +75,7 @@
  * the previous instance.  In practice, service provider objects are
  * usually singletons so this behavior is appropriate.
  *
- * <p> To declare a service provider, a {@code services}
- * subdirectory is placed within the {@code META-INF} directory
- * that is present in every JAR file.  This directory contains a file
- * for each service provider interface that has one or more
- * implementation classes present in the JAR file.  For example, if
- * the JAR file contained a class named
- * {@code com.mycompany.mypkg.GreenImageReaderProvider} which implements the
- * {@code javax.imageio.spi.ImageReaderSpi} interface, the JAR file
- * would contain a file named: <pre>
- * META-INF/services/javax.imageio.spi.ImageReaderSpi</pre>
- *
- * containing the line:
- *
- * <pre>
- * com.mycompany.mypkg.GreenImageReaderProvider
- * </pre>
- *
- * <p> The service provider classes should be to be lightweight and
+ * <p> The service provider classes should be lightweight and
  * quick to load.  Implementations of these interfaces should avoid
  * complex dependencies on other classes and on native code. The usual
  * pattern for more complex services is to register a lightweight
@@ -106,9 +84,8 @@
  * <p> An application may customize the contents of a registry as it
  * sees fit, so long as it has the appropriate runtime permission.
  *
- * <p> For more details on declaring service providers, and the JAR
- * format in general, see the
- * <a href="{@docRoot}/../specs/jar/jar.html">JAR File Specification</a>.
+ * <p> For information on how to create and deploy service providers,
+ * refer to the documentation on {@link java.util.ServiceLoader ServiceLoader}
  *
  * @see RegisterableService
  * @see java.util.ServiceLoader
--- a/src/java.desktop/share/classes/javax/print/attribute/package-info.java	Mon Dec 04 19:10:15 2017 +0100
+++ b/src/java.desktop/share/classes/javax/print/attribute/package-info.java	Mon Dec 04 10:12:46 2017 -0800
@@ -80,7 +80,7 @@
  * attribute category, and the {@code Copies} instance represents the attribute
  * value.
  *
- * <h4><a name="role"></a>Attribute Roles</h4>
+ * <h4><a id="role"></a>Attribute Roles</h4>
  * When submitting a print job to a printer, the client provides the attributes
  * describing the characteristics of the print data, such as the document name,
  * and how the print data should be printed, such as double-sided, five copies.
--- a/src/java.desktop/share/classes/javax/swing/package-info.java	Mon Dec 04 19:10:15 2017 +0100
+++ b/src/java.desktop/share/classes/javax/swing/package-info.java	Mon Dec 04 10:12:46 2017 -0800
@@ -32,7 +32,7 @@
  * <em>The Java Tutorial</em>. For other resources, see
  * <a href="#related">Related Documentation</a>.
  *
- * <h2><a name="threading">Swing's Threading Policy</a></h2>
+ * <h2><a id="threading">Swing's Threading Policy</a></h2>
  * In general Swing is not thread safe. All Swing components and related
  * classes, unless otherwise documented, must be accessed on the event
  * dispatching thread.
@@ -110,7 +110,7 @@
  * href="http://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html">
  * Concurrency in Swing</a>.
  *
- * <h2><a name="related">Related Documentation</a></h2>
+ * <h2><a id="related">Related Documentation</a></h2>
  * For overviews, tutorials, examples, guides, and other documentation,
  * please see:
  * <ul>
--- a/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicComboPopup.java	Mon Dec 04 19:10:15 2017 +0100
+++ b/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicComboPopup.java	Mon Dec 04 10:12:46 2017 -0800
@@ -530,7 +530,6 @@
      */
     protected JList<Object> createList() {
         return new JList<Object>( comboBox.getModel() ) {
-            @SuppressWarnings("deprecation")
             public void processMouseEvent(MouseEvent e)  {
                 if (BasicGraphicsUtils.isMenuShortcutKeyDown(e))  {
                     // Fix for 4234053. Filter out the Control Key from the list.
@@ -538,7 +537,7 @@
                     Toolkit toolkit = Toolkit.getDefaultToolkit();
                     MouseEvent newEvent = new MouseEvent(
                                        (Component)e.getSource(), e.getID(), e.getWhen(),
-                                       e.getModifiers() ^ toolkit.getMenuShortcutKeyMask(),
+                                       e.getModifiersEx() ^ toolkit.getMenuShortcutKeyMaskEx(),
                                        e.getX(), e.getY(),
                                        e.getXOnScreen(), e.getYOnScreen(),
                                        e.getClickCount(),
--- a/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicFileChooserUI.java	Mon Dec 04 19:10:15 2017 +0100
+++ b/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicFileChooserUI.java	Mon Dec 04 10:12:46 2017 -0800
@@ -1134,6 +1134,7 @@
                 boolean isTrav = (selectedFile != null && chooser.isTraversable(selectedFile));
                 boolean isDirSelEnabled = chooser.isDirectorySelectionEnabled();
                 boolean isFileSelEnabled = chooser.isFileSelectionEnabled();
+                @SuppressWarnings("deprecation")
                 boolean isCtrl = (e != null && (e.getModifiers() &
                             Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()) != 0);
 
--- a/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicGraphicsUtils.java	Mon Dec 04 19:10:15 2017 +0100
+++ b/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicGraphicsUtils.java	Mon Dec 04 10:12:46 2017 -0800
@@ -382,10 +382,9 @@
         return c.getComponentOrientation().isLeftToRight();
     }
 
-    @SuppressWarnings("deprecation")
     static boolean isMenuShortcutKeyDown(InputEvent event) {
-        return (event.getModifiers() &
-                Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()) != 0;
+        return (event.getModifiersEx() &
+                Toolkit.getDefaultToolkit().getMenuShortcutKeyMaskEx()) != 0;
     }
 
     /**
--- a/src/java.desktop/share/classes/javax/swing/plaf/multi/doc-files/multi_tsc.html	Mon Dec 04 19:10:15 2017 +0100
+++ b/src/java.desktop/share/classes/javax/swing/plaf/multi/doc-files/multi_tsc.html	Mon Dec 04 10:12:46 2017 -0800
@@ -1,16 +1,37 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
-<HTML>
-<HEAD>
-<TITLE>Using the Multiplexing Look and Feel</TITLE>
-</HEAD>
+<!doctype html>
+<html lang="en">
+<head>
+  <meta charset="utf-8"/>
+  <title>Using the Multiplexing Look and Feel</title>
+</head>
+<!--
+ Copyright (c) 1998, 2017, Oracle and/or its affiliates. All rights reserved.
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ This code is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License version 2 only, as
+ published by the Free Software Foundation.  Oracle designates this
+ particular file as subject to the "Classpath" exception as provided
+ by Oracle in the LICENSE file that accompanied this code.
 
-<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
+ This code is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ version 2 for more details (a copy is included in the LICENSE file that
+ accompanied this code).
 
-<b>
-<font size=+3>
-Using the Multiplexing Look and Feel
-</font>
-</b>
+ You should have received a copy of the GNU General Public License version
+ 2 along with this work; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+
+ Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ or visit www.oracle.com if you need additional information or have any
+ questions.
+-->
+
+<body>
+
+<h1>Using the Multiplexing Look and Feel</h1>
 
 <blockquote>
 <hr>
@@ -18,8 +39,8 @@
 <i>
 This document is based on an article
 originally published in
-<a href="http://www.oracle.com/technetwork/java/javase/tech/articles-jsp-139072.html" target="_top"><em>The Swing
-Connection</em></a>.
+<a href="http://www.oracle.com/technetwork/java/javase/tech/articles-jsp-139072.html"
+   target="_top"><em>The Swing Connection</em></a>.
 </i>
 </p>
 <hr>
@@ -31,10 +52,10 @@
 (called the <em>default</em> look and feel)
 with one or more <em>auxiliary</em> look and feels.
 For example, you could
-simultaneously provide text-to-speech and Braille outputs, 
-in addition to the ordinary visual output that a Swing-based 
+simultaneously provide text-to-speech and Braille outputs,
+in addition to the ordinary visual output that a Swing-based
 application generates,
-by adding 
+by adding
 two auxiliary look and feels (one for text-to-speech,
 the other for Braille)
 to the default look and feel.
@@ -62,169 +83,160 @@
 </ul>
 
 <p>
-Before reading further, you should be familiar 
+Before reading further, you should be familiar
 with the concept of pluggable look and feels.
 For basic information, see
-<a href="https://docs.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html">How to Set the Look and Feel</a>,
-a section in 
-<em>The Java Tutorial</em>.
+<a href="https://docs.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html">
+  How to Set the Look and Feel</a>, a section in <em>The Java Tutorial</em>.
 For architectural details, you can read
 <a
-href="http://www.oracle.com/technetwork/java/architecture-142923.html#pluggable">Pluggable look-and-feel architecture</a>, a section within
+href="http://www.oracle.com/technetwork/java/architecture-142923.html#pluggable">
+  Pluggable look-and-feel architecture</a>, a section within
 a <em>Swing Connection</em> article.
 </p>
 
-<p> 
-<a name="overview"></a>
-<hr width=100% align=LEFT size=2>
-<b>
-<font color="#000080" size="+2">Overview</font>
-</b>
-
+<p>
+<a id="overview"></a>
+<hr>
+  <h2>Overview</h2>
 
 <p>
 
-The classes in the 
+The classes in the
 <code>javax.swing.plaf.multi</code> package
-implement a 
+implement a
 <i>multiplexing look and feel</i>.
-A multiplexing look and feel transparently creates -- and 
+A multiplexing look and feel transparently creates -- and
 simultaneously supports -- UI objects from several different look and feels
 in response to a component requesting its UI object
 (with the <code>getUI</code> method).
 
 <p>
-Without a multiplexing look and feel, a 
-developer who wanted to enhance a particular look and feel would 
-need to extend the classes supporting that look and feel. For example, to 
-add text-to-speech support to the Java look and feel without using a multiplexing 
+Without a multiplexing look and feel, a
+developer who wanted to enhance a particular look and feel would
+need to extend the classes supporting that look and feel. For example, to
+add text-to-speech support to the Java look and feel without using a multiplexing
 look and feel, the developer would need to create a group of
 classes that extend those of
-the Java look and feel, and add text-to-speech support to the new classes. 
+the Java look and feel, and add text-to-speech support to the new classes.
 If the developer also wanted to add text-to-speech support to other look
-and feels, 
-such as Motif or Windows, the developers would need to create subclasses 
+and feels,
+such as Motif or Windows, the developers would need to create subclasses
 of those classes as well.
 </p>
 
 <p>
-This approach has at least two shortcomings: 
-<ul type="DISC">
-  <li>First, each subclass must use what is 
-      essentially a copy of the same code, potentially creating a difficult 
+This approach has at least two shortcomings:
+<ul>
+  <li>First, each subclass must use what is
+      essentially a copy of the same code, potentially creating a difficult
       support situation for the developer.<br></li>
-  <li>Second, and more significantly for the 
+  <li>Second, and more significantly for the
       end user, some application developers might force a
-      particular look and feel to be used. When this approach is used, 
+      particular look and feel to be used. When this approach is used,
       the end user can't even use the enhanced look and feel.</li>
 </ul>
 
 <p>
-A multiplexing look and feel 
-both these problems simultaneously because it allows multiple look 
+A multiplexing look and feel
+both these problems simultaneously because it allows multiple look
 and feels to be combined.
-The first problem (having to use what amounts to a second copy of the same 
-code) is solved because the developer can create a specialized look 
+The first problem (having to use what amounts to a second copy of the same
+code) is solved because the developer can create a specialized look
 and feel that can then be combined with other look and feels.
 </p>
 
 <p>
-The second problem (having to force the use of 
-a particular look and feel) is solved because a specialized look and feel 
-can be used with whatever default look and feel the 
+The second problem (having to force the use of
+a particular look and feel) is solved because a specialized look and feel
+can be used with whatever default look and feel the
 application may have locked in place.
 </p>
 
 <p>
-The default multiplexing look and feel implementation, 
+The default multiplexing look and feel implementation,
 represented by the <code>MultiLookAndFeel</code> class
 in the <code>javax.swing.plaf.multi</code> package,
-is called (unsurprisingly) 
+is called (unsurprisingly)
 the Multiplexing look and feel.
 
-<p> 
-<a name="howtouse"></a>
-<hr width=100% align=LEFT size=2>
-<b>
-<font color="#000080" size="+2">How to Use Auxiliary Look and Feels</font>
-</b>
-
+<p>
+<a id="howtouse"></a>
+<hr>
+  <h2>How to Use Auxiliary Look and Feels</h2>
 
 <p>
-It's easy to use auxiliary look and feels with Swing. To instruct 
-Swing to use the Multiplexing look and feel, all an application 
+It's easy to use auxiliary look and feels with Swing. To instruct
+Swing to use the Multiplexing look and feel, all an application
 has to do is modify the <code>$JDKHOME/conf/swing.properties</code>
 file to include a definition of the <code>swing.auxiliarylaf</code>
 property. Swing treats the <code>swing.auxiliarylaf</code>
 property as a comma-separated list of <code>LookAndFeel</code>
-subclasses that specify what auxiliary look and feels should be 
-used in addition to the default look and feel. If at least one valid 
+subclasses that specify what auxiliary look and feels should be
+used in addition to the default look and feel. If at least one valid
 <code>LookAndFeel</code>
 subclass is specified in the <code>swing.auxiliarylaf</code>
-property, Swing automatically uses the Multiplexing look and feel 
+property, Swing automatically uses the Multiplexing look and feel
 to load and support the default and auxiliary look and feels.
 </p>
 
 <p>
-For example, let's assume that an application 
-makes use of a look and feel that supports text-to-speech feedback, and also 
+For example, let's assume that an application
+makes use of a look and feel that supports text-to-speech feedback, and also
 uses an look and feel that adds support for a device
 that emits perfume.
 Let's assume that the text-to-speech
-look and feel is named <code>com.myco.TextTalkerLookAndFeel</code>, 
+look and feel is named <code>com.myco.TextTalkerLookAndFeel</code>,
 and the look and feel that adds support for perfume
 is named <code>com.smellco.OlfactoryLookAndFeel</code>.
 </p>
 
 <p>
-To tell Swing to use both these look and feels 
--- and to use a default look and feel at the same time -- your application 
+To tell Swing to use both these look and feels
+-- and to use a default look and feel at the same time -- your application
 could simply add the following line to the <code>$JDKHOME/conf/swing.properties</code> file:
 </p>
 
 <p>
-<code>&nbsp;&nbsp;&nbsp; 
+<code>&nbsp;&nbsp;&nbsp;
               swing.auxiliarylaf=com.myco.TextTalkerLookAndFeel,<br>
               &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; com.smellco.OlfactoryLookAndFeel</code>
 </p>
 
 <p>
-This statement tells Swing to obtain a component's UI from the Multiplexing 
-look and feel automatically, instead of obtaining it directly from 
-the default look and feel. The resulting multiplexing UI is a small 
-delegate that obtains and maintains UIs from the default and auxiliary 
-look and feels. As a result, when a method is invoked in a multiplexing 
-UI object, the multiplexing UI invokes the same method on each 
+This statement tells Swing to obtain a component's UI from the Multiplexing
+look and feel automatically, instead of obtaining it directly from
+the default look and feel. The resulting multiplexing UI is a small
+delegate that obtains and maintains UIs from the default and auxiliary
+look and feels. As a result, when a method is invoked in a multiplexing
+UI object, the multiplexing UI invokes the same method on each
 of the UIs obtained from the default and auxiliary look and feels.
 </p>
 
-<p> 
-<a name="howtowrite"></a>
-<hr width=100% align=LEFT size=2>
-<b>
-<font color="#000080" size="+2">Tips for Writing an Auxiliary Look and Feel</font>
-</b>
-
+<p>
+<a id="howtowrite"></a>
+<hr>
+  <h2>Tips for Writing an Auxiliary Look and Feel</h2>
 
 <p>
 An auxiliary look and feel is like any other look and feel,
-except that it doesn't have to provide the complete support 
-that a default look and feel must. For 
-example, an auxiliary look and feel that supports just text-to-speech feedback 
-doesn't need to provide any code for painting. 
+except that it doesn't have to provide the complete support
+that a default look and feel must. For
+example, an auxiliary look and feel that supports just text-to-speech feedback
+doesn't need to provide any code for painting.
 Also, it might not need to support all components --
 <code>JSeparator</code>s, for example, might be ignored.
 
 <p>
 Auxiliary look and feels tend to be simple,
-so developing one can be easier than developing a visual 
+so developing one can be easier than developing a visual
 look and feel.
-The developer can concentrate solely 
-on providing the specialized functionality. 
+The developer can concentrate solely
+on providing the specialized functionality.
 
 <p>
-Because the primary purpose of an auxiliary look and feel is to enhance the 
-default look and feel, auxiliary look and feels tend 
+Because the primary purpose of an auxiliary look and feel is to enhance the
+default look and feel, auxiliary look and feels tend
 be nonvisual. Since an auxiliary look and feel is a genuine
 look and feel, however, there is nothing to prevent it
 from rendering information on the display.
@@ -234,29 +246,26 @@
 Just like for any other look and feel, you
 implement an auxiliary look and feel
 by writing a subclass of <code>javax.swing.LookAndFeel</code>
-and creating subclasses of the 
+and creating subclasses of the
 <code><em>Foo</em>UI</code> classes defined in
 the <code>javax.swing.plaf</code> package.
 </p>
 
-<p> 
-<br>
-<a name="dosanddonts">
-<font color="#000080" size="+1"><b>Dos and Don'ts</b></font> 
+<a id="dosanddonts">
+  <h3>Dos and Don'ts</h3>
 </a>
-</p>
 
 <p>
-The following paragraphs provide some general recommendations for developing 
+The following paragraphs provide some general recommendations for developing
 auxiliary look and feels.
 </p>
 
 <p>
-<font color="#000080"><b>Use the <code>installUI</code> method
+<h4>Use the <code>installUI</code> method
 to perform all initialization,
 and the <code>uninstallUI</code> method
-to perform all cleanup.</b></font>
-</p>
+to perform all cleanup.</h4>
+
 <blockquote>
 The <code>installUI</code> and <code>uninstallUI</code>
 methods are invoked when a component's look and feel is set.
@@ -265,142 +274,134 @@
 Similarly, the <code>uninstallUI</code> method
 lets the previous UI object remove its listeners.
 </blockquote>
-            <p> <font color="#000080"><b>Don't extend 
-              visual look and feels.</b></font></p>
+            <h4><b>Don't extend visual look and feels.</b></h4>
 <blockquote>
-               We recommended that you <i>don't</i> implement 
-                UI classes of an auxiliary look and feel as subclasses of the 
-                UI classes of a visual look and feel. Why not? Because they might 
-                accidentally inherit code that installs listeners on a component 
-                object or renders the component on the display. As a result, 
-                your auxiliary look and feel would compete with the default look 
+               We recommended that you <i>don't</i> implement
+                UI classes of an auxiliary look and feel as subclasses of the
+                UI classes of a visual look and feel. Why not? Because they might
+                accidentally inherit code that installs listeners on a component
+                object or renders the component on the display. As a result,
+                your auxiliary look and feel would compete with the default look
                 and feel rather than cooperating with it.<br>
                 <br>
-                Instead, we recommend that the UI classes of an auxiliary look 
-                and feel directly extend the abstract UI classes in the <code>javax.swing.plaf</code> 
-                package. By using this strategy, the developer of an auxiliary 
+                Instead, we recommend that the UI classes of an auxiliary look
+                and feel directly extend the abstract UI classes in the <code>javax.swing.plaf</code>
+                package. By using this strategy, the developer of an auxiliary
                 look and feel can avoid competing with the default look and feel.
 </blockquote>
-            <p> <font color="#000080"><b>Override all UI-specific methods
-	    your UI classes inherit.</b></font>
-	    </p>
+            <h4><b>Override all UI-specific methods your UI classes inherit.</b></h4>
+
 <blockquote>
-               We recommend that each UI class of 
-                an auxiliary look and feel override the methods 
+               We recommend that each UI class of
+                an auxiliary look and feel override the methods
 		defined in the <code>javax.swing.plaf</code>
                 UI classes it descends from
-		The reasons for this recommendation are similar 
+		The reasons for this recommendation are similar
                 to those for not extending a visual look and feel.
                 For example, the <code>ComponentUI</code>
                 class, from which all UI classes descend,
 		provides a default implementation for the <code>update</code>
                 method. This default implementation paints on the display
-		if the 
-                component is opaque. If a UI class from a non-visual auxiliary 
-                look and feel does not override this method, all 
+		if the
+                component is opaque. If a UI class from a non-visual auxiliary
+                look and feel does not override this method, all
                 opaque components appear as blank areas on the screen!
 </blockquote>
-            <p> 
+
+<a id="uidefaults"></a>
+  <h3>Extending UIDefaults</h3>
 
-<br>
-<a name="uidefaults">
-<font color="#000080" size="+1"><b>Extending UIDefaults</b></font> 
-</a>
-
-            <p>In many cases, you 
-              might want an auxiliary look and feel to be &quot;incomplete.&quot; That 
-              is, you might not need to support the complete set 
+            <p>In many cases, you
+              might want an auxiliary look and feel to be &quot;incomplete.&quot; That
+              is, you might not need to support the complete set
               of components.
-            For example, an auxiliary look and feel might choose 
-	    to provide a <code>ButtonUI</code> subclass but no 
+            For example, an auxiliary look and feel might choose
+	    to provide a <code>ButtonUI</code> subclass but no
               <code>LabelUI</code> subclass.
-	     This 
-              option is allowed, and the multiplexing look and feel gracefully 
+	     This
+              option is allowed, and the multiplexing look and feel gracefully
               handles such situations.</p>
-            <p>By default, however, Swing issues an error message when it asks 
-              a look and feel for a UI object and the look and feel does not 
-              support that UI. This message can be annoying, especially to auxiliary 
-              look-and-feel developers who don't want to support a particular 
+            <p>By default, however, Swing issues an error message when it asks
+              a look and feel for a UI object and the look and feel does not
+              support that UI. This message can be annoying, especially to auxiliary
+              look-and-feel developers who don't want to support a particular
               component.</p>
-            <p>Fortunately, you can prevent this error 
-              message by creating a subclass of the <code>UIDefaults</code> 
-              class and returning an instance of it from the 
+            <p>Fortunately, you can prevent this error
+              message by creating a subclass of the <code>UIDefaults</code>
+              class and returning an instance of it from the
 	      <code>getDefaults</code> method
 	      of your <code>LookAndFeel</code> class.
 	      For example:
 	      </p>
-            <p><code>public class MyAuxLookAndFeel 
+            <p><code>public class MyAuxLookAndFeel
               extends LookAndFeel {<br>
-                  ...<br>
-                  public UIDefaults getDefaults() {<br>
-                      <b>UIDefaults table = <br>
-              &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
+                  ...<br>
+                  public UIDefaults getDefaults() {<br>
+                      <b>UIDefaults table = <br>
+              &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
               new MyAuxUIDefaults();<br>
-              </b>        Object[] uiDefaults = {<br>
-                        &quot;ButtonUI&quot;, &quot;MyAuxButtonUI&quot;,<br>
-                        ...<br>
-                      }<br>
-                      table.putDefaults(uiDefaults);<br>
-                      return table;<br>
-                  }<br>
+              </b>        Object[] uiDefaults = {<br>
+                        &quot;ButtonUI&quot;, &quot;MyAuxButtonUI&quot;,<br>
+                        ...<br>
+                      }<br>
+                      table.putDefaults(uiDefaults);<br>
+                      return table;<br>
+                  }<br>
               }<br>
               <br>
               <b>class MyAuxUIDefaults extends UIDefaults {<br>
-                  protected void getUIError(String msg) {<br>
-                      //System.err.println<br>
-              &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp;&nbsp; (&quot;An 
+                  protected void getUIError(String msg) {<br>
+                      //System.err.println<br>
+              &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp;&nbsp; (&quot;An
               annoying message!&quot;);<br>
-                  }<br>
+                  }<br>
               }</b></code></p>
 
 <p>
-In the preceding example, an auxiliary look and feel named <code>MyAux</code> 
-              creates a <code>UIDefaults</code> subclass 
-              that overrides the <code>getUIError</code> 
-              method. The <code>getUIError</code> 
-              method is the method that is invoked when Swing cannot find a UI 
-              object in a look and feel. By merely doing nothing in this method, 
+In the preceding example, an auxiliary look and feel named <code>MyAux</code>
+              creates a <code>UIDefaults</code> subclass
+              that overrides the <code>getUIError</code>
+              method. The <code>getUIError</code>
+              method is the method that is invoked when Swing cannot find a UI
+              object in a look and feel. By merely doing nothing in this method,
               you can avoid the error message.</p>
-            <p> 
+            <p>
 
-<br>
-<a name="defaultui">
-<b><font color="#000080" size="+1">Examining Other UI Objects</font></b> 
-</a>
+<a id="defaultui"></a>
+<h3>Examining Other UI Objects</h3>
 
-            <p>In 
-              rare instances, a UI object from an auxiliary look and feel 
-              may be interested in the default UI object used by the component. In 
-              these cases, the UI object from auxiliary look and feel can obtain 
+            <p>In
+              rare instances, a UI object from an auxiliary look and feel
+              may be interested in the default UI object used by the component. In
+              these cases, the UI object from auxiliary look and feel can obtain
               the UI from a component by calling its <code>getUI</code>
-              method. The returned UI is an instance of one of the multiplexing 
-              look and feel UI classes (for example, <code>MultiButtonUI</code>). 
-              The UI object from the auxiliary look and feel can call the <code>getUIs</code> 
-              method of the returned object to obtain an array containing a complete list 
-              of all UI objects handled by the multiplexing UI. The first element 
+              method. The returned UI is an instance of one of the multiplexing
+              look and feel UI classes (for example, <code>MultiButtonUI</code>).
+              The UI object from the auxiliary look and feel can call the <code>getUIs</code>
+              method of the returned object to obtain an array containing a complete list
+              of all UI objects handled by the multiplexing UI. The first element
               is guaranteed to be the UI created from the default look and feel.
 	      </p>
 
-<p> 
-<a name="implementation"></a>
-<hr width=100% align=LEFT size=2>
-<font color="#000080" size="+2"><b>How the Multiplexing Look and Feel
-Is Implemented</b></font> 
+<p>
+<a id="implementation"></a>
+<hr>
+<h2>How the Multiplexing Look and Feel Is Implemented</h2>
 
 <p>
 The Multiplexing look and feel
 (represented by
 <code>javax.swing.plaf.multi.MultiLookAndFeel</code>)
-is meant to be transparent to 
-all developers and users. It should &quot;just work&quot; -- and 
-              it is used only when the user tells Swing to use an auxiliary look 
+is meant to be transparent to
+all developers and users. It should &quot;just work&quot; -- and
+              it is used only when the user tells Swing to use an auxiliary look
               and feel.</p>
 
             <p>
-              When the Multiplexing look and 
-              feel is in use, the type of the UI object 
-	      associated with each component 
-	      depends on whether 
+              When the Multiplexing look and
+              feel is in use, the type of the UI object
+	      associated with each component
+	      depends on whether
 	      any of the auxiliary look and feels currently in use
 	      support the component.
 	      If so, the component's UI object is
@@ -408,81 +409,80 @@
 	      If only the default look and feel supports the component,
 	      then the component gets
               a UI object from the default look and feel,
-	      just as if no auxiliary look and feels were installed. 
+	      just as if no auxiliary look and feels were installed.
 
 	      <p>
 	      A multiplexing UI object
               obtains and maintains UI objects
 	      from the default and auxiliary look
 	      and feels,
-              referring to these UIs in the following manner: 
+              referring to these UIs in the following manner:
 
-<ul type="DISC">
-              <li> The UI object from the default look 
-                and feel is always the first to be created. After that, a UI object 
-                is created from each auxiliary look and feel in the order 
-                they are specified in the <code>swing.auxiliarylaf</code> 
+<ul>
+              <li> The UI object from the default look
+                and feel is always the first to be created. After that, a UI object
+                is created from each auxiliary look and feel in the order
+                they are specified in the <code>swing.auxiliarylaf</code>
                 property.<br><br></li>
 
-              <li> When a method that requests information 
-                from a UI object is invoked, the multiplexing UI object 
-		invokes the method on all the UI objects, but returns 
+              <li> When a method that requests information
+                from a UI object is invoked, the multiplexing UI object
+		invokes the method on all the UI objects, but returns
                 only the results from the UI for the default look and feel.
-                For example, when the <code>getPreferredSize</code> 
-                method is invoked on a multiplexing UI, the UI returns only the 
-                results of invoking <code>getPreferredSize</code> 
+                For example, when the <code>getPreferredSize</code>
+                method is invoked on a multiplexing UI, the UI returns only the
+                results of invoking <code>getPreferredSize</code>
                 on the UI obtained from the default look and feel.
 		The <code>getPreferredSize</code> method
 		is also invoked on the UI object for each auxiliary look and feel,
 		but the return values are ignored.
                 <br><br></li>
 
-              <li> When a method that does not request information 
-                from the UI object is invoked, the multiplexing UI object 
+              <li> When a method that does not request information
+                from the UI object is invoked, the multiplexing UI object
                 invokes that method on all UIs --
 		on the UI object obtained from the default look
 		and feel
                 and on all the UIs obtained from the auxiliary look and feels,
-		as well. 
-                For example, invoking the <code>installUI</code> 
-                method on a multiplexing UI causes the multiplexing UI to invoke 
-                <code>installUI</code> 
-                on the UI obtained from the default look and feel and the UIs obtained from 
+		as well.
+                For example, invoking the <code>installUI</code>
+                method on a multiplexing UI causes the multiplexing UI to invoke
+                <code>installUI</code>
+                on the UI obtained from the default look and feel and the UIs obtained from
                 the auxiliary factories.</li>
             </ul>
-            <p> In all cases, the UI object obtained from 
-              the default look and feel is acted upon first, and then the auxiliary 
-              look and feels are acted upon in the order they are specified in 
-              the <code>swing.auxiliarylaf</code> 
+            <p> In all cases, the UI object obtained from
+              the default look and feel is acted upon first, and then the auxiliary
+              look and feels are acted upon in the order they are specified in
+              the <code>swing.auxiliarylaf</code>
               property.
 </p>
 
-<p> 
+<p>
 
-<a name="custom"></a>
-<hr width=100% align=LEFT size=2>
-<font color="#000080" size="+2"><b>How to Provide a Custom Multiplexing Look
-and Feel</b></font> 
+<a id="custom"></a>
+<hr>
+<h2>How to Provide a Custom Multiplexing Look and Feel</h2>
 
-            <p>While 
-              we hope the behavior of the Multiplexing look and feel is 
-              flexible enough not to require an alternative multiplexing look 
-              and feel, Swing allows the user to specify another multiplexing look 
+            <p>While
+              we hope the behavior of the Multiplexing look and feel is
+              flexible enough not to require an alternative multiplexing look
+              and feel, Swing allows the user to specify another multiplexing look
               and feel to use.
 </p>
 
-            <p> To do that, all the user has to do is modify 
-              the <code>$JDKHOME/conf/swing.properties</code> 
-              file to include a definition of the <code>swing.plaf.multiplexinglaf</code> 
-              property. Swing then treats the <code>swing.plaf.multiplexinglaf</code> 
-              property as a <code>LookAndFeel</code> 
+            <p> To do that, all the user has to do is modify
+              the <code>$JDKHOME/conf/swing.properties</code>
+              file to include a definition of the <code>swing.plaf.multiplexinglaf</code>
+              property. Swing then treats the <code>swing.plaf.multiplexinglaf</code>
+              property as a <code>LookAndFeel</code>
               subclass that supports multiplexing.
 </p>
-            <p> For example, if a user has a multiplexing 
-              look and feel represented by <code>com.myco.SuperMultiLookAndFeel</code> 
-              that is a better match for their needs than the Multiplexing 
-              look and feel 
-	      (<code>javax.swing.plaf.multi.MultiLookAndFeel</code>), 
+            <p> For example, if a user has a multiplexing
+              look and feel represented by <code>com.myco.SuperMultiLookAndFeel</code>
+              that is a better match for their needs than the Multiplexing
+              look and feel
+	      (<code>javax.swing.plaf.multi.MultiLookAndFeel</code>),
               the user could include the following line in <code>$JDKHOME/conf/swing.properties</code>:
 </p>
 
@@ -491,12 +491,12 @@
 </p>
 
 <p>
-This statement instructs Swing to use <code>com.myco.SuperMultiLookAndFeel</code> 
-instead of <code>javax.swing.plaf.multi.MultiLookAndFeel</code>. But 
-if you use this kind of statement, be careful, because the suppliers 
-of auxiliary look and feels will most likely have developed and 
+This statement instructs Swing to use <code>com.myco.SuperMultiLookAndFeel</code>
+instead of <code>javax.swing.plaf.multi.MultiLookAndFeel</code>. But
+if you use this kind of statement, be careful, because the suppliers
+of auxiliary look and feels will most likely have developed and
 tested against our Multiplexing look and feel.
 </p>
 
-</BODY>
-</HTML>
+</body>
+</html>
--- a/src/java.desktop/share/classes/javax/swing/plaf/nimbus/doc-files/properties.html	Mon Dec 04 19:10:15 2017 +0100
+++ b/src/java.desktop/share/classes/javax/swing/plaf/nimbus/doc-files/properties.html	Mon Dec 04 10:12:46 2017 -0800
@@ -1,8 +1,34 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
+<!doctype html>
+<html lang="en">
 <head>
-<title></title>
+  <meta charset="utf-8"/>
+  <title>Nimbus colors</title>
 </head>
+<!--
+ Copyright (c) 2005, 2017, Oracle and/or its affiliates. All rights reserved.
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ This code is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License version 2 only, as
+ published by the Free Software Foundation.  Oracle designates this
+ particular file as subject to the "Classpath" exception as provided
+ by Oracle in the LICENSE file that accompanied this code.
+
+ This code is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ version 2 for more details (a copy is included in the LICENSE file that
+ accompanied this code).
+
+ You should have received a copy of the GNU General Public License version
+ 2 along with this work; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+
+ Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ or visit www.oracle.com if you need additional information or have any
+ questions.
+-->
+
 <body>
 <h1 id="primaryColors">Primary Colors</h1>
 <table summary="Nimbus primary colors">
--- a/src/java.desktop/share/classes/javax/swing/plaf/synth/doc-files/componentProperties.html	Mon Dec 04 19:10:15 2017 +0100
+++ b/src/java.desktop/share/classes/javax/swing/plaf/synth/doc-files/componentProperties.html	Mon Dec 04 10:12:46 2017 -0800
@@ -1,8 +1,11 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<html>
+<!doctype html>
+<html lang="en">
 <head>
+  <meta charset="utf-8"/>
+  <title>Component Specific Properties</title>
+</head>
 <!--
-Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
+Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved.
 DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 
 This code is free software; you can redistribute it and/or modify it
@@ -24,16 +27,17 @@
 Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 or visit www.oracle.com if you need additional information or have any
 questions.
+-->
 
--->
-</head>
 <body bgcolor="white">
 <h3>Component Specific Properties</h3>
 <p> The look, and to some degree the feel of Synth
-can be customized by way of component specific properties.
-These properties are accessed from <a
-				    href="../SynthStyle.html">SynthStyle#get</a>. Refer to <a href="synthFileFormat.html#e.property">synth file format</a> for examples of how to specify these properties in a synth configuration file.</p>
-    <p>
+  can be customized by way of component specific properties.
+  These properties are accessed from <a
+      href="../SynthStyle.html">SynthStyle#get</a>. Refer to <a
+      href="synthFileFormat.html#e.property">synth file format</a> for examples
+  of how to specify these properties in a synth configuration file.</p>
+<p>
       This file specifies the expected class type each of the values
       are to take. The behavior of supplying the wrong type is
       unspecified: typically a <code>ClassCastException</code> is
@@ -66,7 +70,7 @@
   </tbody>
 </table>
 <br>
-<h4><a name="JButton">JButton</a></h4>
+<h4><a id="JButton">JButton</a></h4>
 <p> JButton paints text using the TEXT_FOREGROUND ColorType. In addition
 to the <a href="#buttonProperties">Button 	properties</a>, JButton
 supports the following property: </p>
@@ -89,7 +93,7 @@
   </tbody>
 </table>
 <br>
-<h4><a name="JCheckBox">JCheckBox</a></h4>
+<h4><a id="JCheckBox">JCheckBox</a></h4>
 <p> JCheckBox paints text using the TEXT_FOREGROUND ColorType. In
 addition to the <a href="#buttonProperties">Button 	properties</a>,
 JCheckBox supports the following property: </p>
@@ -111,7 +115,7 @@
   </tbody>
 </table>
 <br>
-<h4><a name="JComboBox">JComboBox</a></h4>
+<h4><a id="JComboBox">JComboBox</a></h4>
 <p> JComboBox is a composite component that consists of the following
 child Components: </p>
 <table border="1" summary="JComboBox child components">
@@ -144,7 +148,7 @@
     <tr>
       <td>ComboBox.renderer</td>
       <td>Component 	 </td>
-      <td>The renderer used for the JComboBox. This is ONLY set if 	
+      <td>The renderer used for the JComboBox. This is ONLY set if
 the renderer is a UIResource. 	</td>
     </tr>
     <tr>
@@ -279,7 +283,7 @@
       <td style="vertical-align: top;">Icon used by the button that creates a new
           folder.
       </td>
-    </tr>          
+    </tr>
     <tr>
       <td style="vertical-align: top;">FileChooser.upFolderIcon<br>
       </td>
@@ -301,7 +305,7 @@
       <td style="vertical-align: top;">Icon used by the button that navigates to the
           current user's home directory.
       </td>
-    </tr>          
+    </tr>
     <tr>
       <td style="vertical-align: top;">FileChooser.detailsViewIcon<br>
       </td>
@@ -312,7 +316,7 @@
       <td style="vertical-align: top;">Icon used by the button that toggles the
           detailed files list view.
       </td>
-    </tr>             
+    </tr>
     <tr>
       <td style="vertical-align: top;">FileChooser.listViewIcon<br>
       </td>
@@ -324,7 +328,7 @@
           regular files list view, showing only an icon and the name of each
           file and directory.
       </td>
-    </tr>          
+    </tr>
     <tr>
       <td style="vertical-align: top;">FileChooser.viewMenuIcon<br>
       </td>
@@ -339,7 +343,7 @@
   </tbody>
 </table>
 <br>
-<h4><a name="JInternalFrame"></a>JInternalFrame</h4>
+<h4><a id="JInternalFrame"></a>JInternalFrame</h4>
 <h5>JInternalFrame Specific Properties</h5>
 <table cellpadding="2" cellspacing="2" border="1" summary="JInternalFrame specific properties"
  style="text-align: left; width: 100%;">
@@ -369,7 +373,7 @@
   </tbody>
 </table>
 <br>
-<h4><a name="JInternalFrameTitlePane"></a>JInternalFrameTitlePane</h4>
+<h4><a id="JInternalFrameTitlePane"></a>JInternalFrameTitlePane</h4>
 <p>JInternalFrameTitlePane is the control bar located at the top of the
 internal frame similar to that found in a frame.<br>
 </p>
@@ -469,7 +473,7 @@
   </tbody>
 </table>
 <br>
-<h4><a name="JList">JList</a></h4>
+<h4><a id="JList">JList</a></h4>
 <p> JList's sets the name of the renderer to List.renderer.       JList
 supports the following properties: </p>
 <h5>JList Specific Properties</h5>
@@ -486,7 +490,7 @@
       <td>Boolean</td>
       <td>true 	 </td>
       <td>If true the renderers state is not updated, and the 	    text
-colors come from JList's getSelectionBackground and 	
+colors come from JList's getSelectionBackground and
 getSelectionForeground methods. If false, the renderer's 	    state is
 updated and the colors will instead come from the 	    Style. 	</td>
     </tr>
@@ -508,7 +512,7 @@
   </tbody>
 </table>
 <br>
-<h4><a name="menuProperties">Menu Properties</a></h4>
+<h4><a id="menuProperties">Menu Properties</a></h4>
 <p> The Menu classes (JCheckBoxMenuItem, JMenu, JMenuItem, and
 JRadioButtonMenuItem) all support the same set of properties and behave
 similarly.       Each component consists of two Regions: the region
@@ -536,7 +540,7 @@
       <td>prefix.arrowIcon</td>
       <td>Icon</td>
       <td>null 	 </td>
-      <td>Icon drawn to the right of the text (or left when the 	
+      <td>Icon drawn to the right of the text (or left when the
 ComponentOrientation is right to left) of the text. This 	    is
 typically only defined for JMenu. 	</td>
     </tr>
@@ -544,7 +548,7 @@
       <td>prefix.checkIcon</td>
       <td>Icon</td>
       <td>null 	 </td>
-      <td>Icon drawn to the left of the text (or right when the 	
+      <td>Icon drawn to the left of the text (or right when the
 ComponentOrientation is right to left) of the text. This 	    is
 typically only defined for JCheckBoxMenuItem and 	 JRadioButtonMenuItem
 to provide the check or radio button. 	</td>
@@ -561,7 +565,7 @@
       <td>prefix.textIconGap</td>
       <td>Integer</td>
       <td>4 	 </td>
-      <td>Padding between the icon and text. Refer to the javadoc for 
+      <td>Padding between the icon and text. Refer to the javadoc for
 <code>javax.swing.AbstractButton#setIconTextGap(int)</code> for details of how
 this is used. </td>
     </tr>
@@ -593,7 +597,7 @@
   </tbody>
 </table>
 <br>
-<h4><a name="JOptionPane">JOptionPane</a></h4>
+<h4><a id="JOptionPane">JOptionPane</a></h4>
 <p> JOptionPane is a composite component and may consist of numerous child
 components, they are: OptionPane.button, OptionPane.label,
 OptionPane.comboBox, OptionPane.scrollPane, OptionPane.list,
@@ -623,7 +627,7 @@
       <td>OptionPane.buttonOrientation</td>
       <td>Integer 	 </td>
       <td>SwingConstants.CENTER 	 </td>
-      <td>How the buttons should be layed out, one of 	
+      <td>How the buttons should be layed out, one of
 SwingConstants.LEFT, SwingConstants.RIGHT or 	    SwingConstants.CENTER
 (this will be flipped when in a 	    right to left locale). 	</td>
     </tr>
@@ -709,7 +713,7 @@
   </tbody>
 </table>
 <br>
-<h4><a name="JProgressBar"></a>JProgressBar<br>
+<h4><a id="JProgressBar"></a>JProgressBar<br>
 </h4>
 <h5>JProgressBar Specific Properties<br>
 </h5>
@@ -749,7 +753,7 @@
     </tr>
   </tbody>
 </table>
-<h4><a name="JRadioButton">JRadioButton</a></h4>
+<h4><a id="JRadioButton">JRadioButton</a></h4>
 <p> JRadioButton paints text using the TEXT_FOREGROUND ColorType. In
 addition to the <a href="#buttonProperties">Button 	properties</a>,
 JRadioButton supports the following property: </p>
@@ -771,7 +775,7 @@
   </tbody>
 </table>
 <br>
-<h4><a name="JScrollBar">JScrollBar</a></h4>
+<h4><a id="JScrollBar">JScrollBar</a></h4>
 <p> JScrollBar is a composite component that consists of the following
 child Components: </p>
 <table border="1" summary="JScrollBar child components">
@@ -841,7 +845,7 @@
   </tbody>
 </table>
 <br>
-<h4><a name="Separator">Separators</a></h4>
+<h4><a id="Separator">Separators</a></h4>
 <p> All of the separator classes, JSeparator, JPopupMenu.Separator and
 JToolBar.Separator use the same property: </p>
 <table border="1" summary="Separator classes common properties">
@@ -856,7 +860,7 @@
       <td>Separator.thickness</td>
       <td>Integer</td>
       <td>2 	 </td>
-      <td>Preferred width, for vertically aligned separators, or 	
+      <td>Preferred width, for vertically aligned separators, or
 preferred height for horizontally aligned separators. The 	 resulting
 preferred size will include the Insets. </td>
     </tr>
@@ -875,20 +879,21 @@
       <td>ToolBar.separatorSize</td>
       <td>Dimension</td>
       <td>null 	 </td>
-      <td>The value of this is passed to the <code>javax.swing.JToolBar$Separator#setSeparatorSize(java.awt.Dimension)</code>
-method. If unspecified <code>setSeparatorSize</code> is 	    not
-invoked. </td>
-    </tr>
+    <td>The value of this is passed to the
+      <code>javax.swing.JToolBar$Separator#setSeparatorSize(java.awt.Dimension)</code>
+      method. If unspecified <code>setSeparatorSize</code> is not invoked.
+    </td>
+  </tr>
   </tbody>
 </table>
 <br>
-<h4><a name="JScrollPane">JScrollPane</a></h4>
-<p> 
+<h4><a id="JScrollPane">JScrollPane</a></h4>
+<p>
       JScrollPane is unique in that it provides a method for setting
       the Border around the JViewport with JViewport throwing an
       IllegalArgumentException from <code>setBorder</code>. To
       accommodate this a special border is installed on the
-      <code>JScrollPane</code> that uses the 
+      <code>JScrollPane</code> that uses the
       insets from the key
       <code>ScrollPane.viewportBorderInsets</code>. The
       <code>SynthPainter</code> method
@@ -913,7 +918,7 @@
   </tbody>
 </table>
 <br>
-<h4><a name="JSplitPane">JSplitPane</a></h4>
+<h4><a id="JSplitPane">JSplitPane</a></h4>
 <p> JSplitPane is a composite component that will contain a divider and
 potentially two buttons, if setOneTouchExpandable(true) has been
 invoked. The two buttons will be named:
@@ -950,7 +955,7 @@
       <td>SplitPane.oneTouchExpandable</td>
       <td>Boolean</td>
       <td>null 	 </td>
-      <td>If non null, the value of this is passed to 	
+      <td>If non null, the value of this is passed to
 setOneTouchExpandable. 	</td>
     </tr>
     <tr>
@@ -962,7 +967,7 @@
   </tbody>
 </table>
 <br>
-<h4><a name="JSlider"></a>JSlider</h4>
+<h4><a id="JSlider"></a>JSlider</h4>
 <h5>JSlider Specific Properties</h5>
 <table cellpadding="2" cellspacing="2" border="1" summary="JSlider specific properties"
  style="text-align: left; width: 100%;">
@@ -1022,7 +1027,7 @@
   </tbody>
 </table>
 <br>
-<h4><a name="JTabbedPane"></a>JTabbedPane</h4>
+<h4><a id="JTabbedPane"></a>JTabbedPane</h4>
 <h5>JTabbedPane Specific Properties</h5>
 <table cellpadding="2" cellspacing="2" border="1" summary="JTabbedPane specific properties"
  style="text-align: left; width: 100%;">
@@ -1084,8 +1089,8 @@
   </tbody>
 </table>
 <br>
-<h4><a name="JTable">JTable</a></h4>
-<p> JTable sets the name of the renderer to Table.cellRenderer.      
+<h4><a id="JTable">JTable</a></h4>
+<p> JTable sets the name of the renderer to Table.cellRenderer.
 JTable supports the following properties: </p>
 <h5>JTable Specific Properties</h5>
 <table border="1" summary="JTable specific properties">
@@ -1108,7 +1113,7 @@
       <td>Boolean</td>
       <td>true 	 </td>
       <td>If true the renderers state is not updated, and the 	    text
-colors come from JTable's getSelectionBackground and 	   
+colors come from JTable's getSelectionBackground and
 getSelectionForeground methods. If false, the renderer's 	    state is
 updated and the colors will instead come from the 	    Style. 	</td>
     </tr>
@@ -1116,7 +1121,7 @@
       <td>Table.rendererUseUIBorder</td>
       <td>Boolean</td>
       <td>true 	 </td>
-      <td>If true setBorder on the renderer will succeed 	   
+      <td>If true setBorder on the renderer will succeed
 regardless of the border passed in, otherwise setBorder on 	    the
 renderer will only succeed if it is a Synth Border. 	</td>
     </tr>
@@ -1129,7 +1134,7 @@
   </tbody>
 </table>
 <br>
-<h4><a name="JTree">JTree</a></h4>
+<h4><a id="JTree">JTree</a></h4>
 <p> JTree sets the name of the renderer to Tree.renderer, the name of
 the editor is Tree.cellEditor.</p>
 <h5>JTree Specific Properties</h5>
@@ -1151,7 +1156,7 @@
       <td>Tree.drawHorizontalLines</td>
       <td>Boolean</td>
       <td>true 	 </td>
-      <td>If true nodes have a horizontal connecting them to the 	
+      <td>If true nodes have a horizontal connecting them to the
 leading edge of their parent. 	</td>
     </tr>
     <tr>
@@ -1198,7 +1203,7 @@
       <td>Tree.scrollsOnExpand</td>
       <td>Boolean</td>
       <td>true 	 </td>
-      <td>Whether or not the JTree should scroll when a node is 	
+      <td>Whether or not the JTree should scroll when a node is
 expanded. </td>
     </tr>
     <tr>
@@ -1212,7 +1217,7 @@
     </tr>
   </tbody>
 </table>
-<h4><a name="JToggleButton">JToggleButton</a></h4>
+<h4><a id="JToggleButton">JToggleButton</a></h4>
 <p> JToggleButton paints text using the TEXT_FOREGROUND ColorType. In
 addition to the <a href="#buttonProperties">Button 	properties</a>,
 JToggleButton supports the following property: </p>
@@ -1234,7 +1239,7 @@
   </tbody>
 </table>
 <br>
-<h4><a name="buttonProperties">Button Properties</a></h4>
+<h4><a id="buttonProperties">Button Properties</a></h4>
 <p> Each of the Button classes (JButton, JCheckBox, JRadioButton,
 JToggleButton and SynthArrowButton) support a similar set of properties.
 These properties are: </p>
@@ -1250,23 +1255,29 @@
       <td>prefix.contentAreaFilled</td>
       <td>Integer</td>
       <td>true 	 </td>
-      <td>Refer to the javadoc of <code>javax.swing.AbstractButton#contentAreaFilled(boolean)</code> 	    for details
-of how this is used. It is up to the Painter 	    to properly honor this
-property. 	</td>
-    </tr>
+    <td>Refer to the javadoc of
+      <code>javax.swing.AbstractButton#contentAreaFilled(boolean)</code>
+      for details of how this is used. It is up to the Painter to properly honor
+      this property.
+    </td>
+  </tr>
     <tr>
       <td>prefix.iconTextGap</td>
       <td>Integer</td>
-      <td>If 	    unspecified, JButton.setIconTextGap is not invoked. 	</td>
-      <td>Padding between the icon and text. Refer to the javadoc of <code>javax.swing.AbstractButton#setIconTextGap(int)</code> 	    for details of how
-this is used. 	</td>
+      <td>If unspecified, JButton.setIconTextGap is not invoked.</td>
+      <td>Padding between the icon and text. Refer to the javadoc of
+        <code>javax.swing.AbstractButton#setIconTextGap(int)</code>
+        for details of how this is used.
+      </td>
     </tr>
     <tr>
       <td>prefix.margin</td>
       <td>Insets</td>
       <td>Empty Insets (0, 0, 0, 0) 	 </td>
-      <td>Margin for the JButton. Refer to the javadoc of <code>javax.swing.AbstractButton#setMargin(java.awt.Insets)</code> 	    for details
-of how the margin is used. 	</td>
+      <td>Margin for the JButton. Refer to the javadoc of
+        <code>javax.swing.AbstractButton#setMargin(java.awt.Insets)</code> for
+        details of how the margin is used.
+      </td>
     </tr>
     <tr>
       <td>prefix.textShiftOffset</td>
@@ -1281,7 +1292,7 @@
 <p> <code>Prefix</code> is one of: Button, CheckBox, RadioButton or
 JToggleButton.<br>
 </p>
-<h4><a name="textProperties"></a>Text Properties<br>
+<h4><a id="textProperties"></a>Text Properties<br>
 </h4>
 <table cellpadding="2" cellspacing="2" border="1" summary="Text properties"
  style="text-align: left; width: 100%;">
--- a/src/java.desktop/share/classes/javax/swing/plaf/synth/doc-files/synthFileFormat.html	Mon Dec 04 19:10:15 2017 +0100
+++ b/src/java.desktop/share/classes/javax/swing/plaf/synth/doc-files/synthFileFormat.html	Mon Dec 04 10:12:46 2017 -0800
@@ -1,7 +1,33 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-  <head>
-    <title>Synth File Format</title>
+<!doctype html>
+<html lang="en">
+<head>
+  <meta charset="utf-8"/>
+  <title>Synth File Format</title>
+<!--
+ Copyright (c) 1998, 2017, Oracle and/or its affiliates. All rights reserved.
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ This code is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License version 2 only, as
+ published by the Free Software Foundation.  Oracle designates this
+ particular file as subject to the "Classpath" exception as provided
+ by Oracle in the LICENSE file that accompanied this code.
+
+ This code is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ version 2 for more details (a copy is included in the LICENSE file that
+ accompanied this code).
+
+ You should have received a copy of the GNU General Public License version
+ 2 along with this work; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+
+ Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ or visit www.oracle.com if you need additional information or have any
+ questions.
+-->
+
   <style type="text/css">
 div.dtd-fragment {
     width: 100%;
@@ -19,14 +45,17 @@
   </head>
 
   <body>
-    <h2><a name="file">File Format</a></h2>
+    <h2><a id="file">File Format</a></h2>
     <p>
       Synth's file format (<a href="synth.dtd">dtd</a>)
       allows for specifying all the pieces
       necessary to create your own look and feel. A synth file is
-      loaded by way of the <A HREF="../../../../../javax/swing/plaf/synth/SynthLookAndFeel.html#load(java.io.InputStream,%20java.lang.Class)">SynthLookAndFeel.load(InputStream, Class)</a> or
-      <a href="../../../../../javax/swing/plaf/synth/SynthLookAndFeel.html#load(java.net.URL)">SynthLookAndFeel.load(URL)</a> methods.
-      The following example uses the <code>load</code> method to configure 
+      loaded by way of the <A
+        HREF="../../../../../javax/swing/plaf/synth/SynthLookAndFeel.html#load(java.io.InputStream,%20java.lang.Class)">
+      SynthLookAndFeel.load(InputStream, Class)</a> or
+      <a href="../../../../../javax/swing/plaf/synth/SynthLookAndFeel.html#load(java.net.URL)">
+        SynthLookAndFeel.load(URL)</a> methods.
+      The following example uses the <code>load</code> method to configure
       a <code>SynthLookAndFeel</code> and sets it as the current look
       and feel:
     </p>
@@ -51,8 +80,10 @@
       </pre>
     </div>
     <p>
-      The method <a href="../../../../../javax/swing/plaf/synth/SynthLookAndFeel.html#load(java.net.URL)">SynthLookAndFeel.load(URL)</a> can be
-      used, for instance, to load a look and feel from any of the following:
+      The method <a
+        href="../../../../../javax/swing/plaf/synth/SynthLookAndFeel.html#load(java.net.URL)">
+      SynthLookAndFeel.load(URL)</a> can be used, for instance, to load a look
+      and feel from any of the following:
     </p>
     <ul>
       <li>File, e.g. <code>file:///C:/java/synth/laf/laf.xml</code></li>
@@ -70,7 +101,7 @@
     <h3>The synth element</h3>
 <div class="dtd-fragment">
 <pre class="dtd-fragment">
-&lt;!ELEMENT <a name="e.synth">synth</a> ((<a href="#ee.beansPersistance">%beansPersistance;</a>) | <a href="#e.style">style</a> | <a href="#e.bind">bind</a> | <a href="#e.font">font</a> | <a href="#e.color">color</a> |
+&lt;!ELEMENT <a id="e.synth">synth</a> ((<a href="#ee.beansPersistance">%beansPersistance;</a>) | <a href="#e.style">style</a> | <a href="#e.bind">bind</a> | <a href="#e.font">font</a> | <a href="#e.color">color</a> |
                  <a href="#e.imagePainter">imagePainter</a> | <a href="#e.imageIcon">imageIcon</a> | <a href="#e.defaultsProperty">defaultsProperty</a>)*>
 &lt;!ATTLIST synth
           <a href="#synth.version">version</a>              CDATA          #IMPLIED
@@ -78,7 +109,7 @@
 </pre>
 </div>
     <p><em>Attribute definitions</em></p>
-    <dl><dt><a name="synth.version"><samp>version</samp></a></dt>
+    <dl><dt><a id="synth.version"><samp>version</samp></a></dt>
 	<dd>File format version, should be 1</dd>
     </dl>
     <p>
@@ -86,11 +117,11 @@
       elements that make up a SynthLookAndFeel definition.
     </p>
 
-      
+
     <h3>The style element</h3>
 <div class="dtd-fragment">
 <pre class="dtd-fragment">
-&lt;!ELEMENT <a name="e.style">style</a> (<a href="#e.property">property</a> | <a href="#e.defaultsProperty">defaultsProperty</a> | <a href="#e.state">state</a> | <a href="#e.font">font</a> | <a href="#e.graphicsUtils">graphicsUtils</a> |
+&lt;!ELEMENT <a id="e.style">style</a> (<a href="#e.property">property</a> | <a href="#e.defaultsProperty">defaultsProperty</a> | <a href="#e.state">state</a> | <a href="#e.font">font</a> | <a href="#e.graphicsUtils">graphicsUtils</a> |
                  <a href="#e.insets">insets</a> | <a href="#e.painter">painter</a> | <a href="#e.imagePainter">imagePainter</a> | <a href="#e.opaque">opaque</a> | (<a href="#ee.beansPersistance">%beansPersistance;</a>) |
                  <a href="#e.imageIcon">imageIcon</a>)*>
 &lt;!ATTLIST style
@@ -101,9 +132,9 @@
 </div>
     <p><em>Attribute definitions</em></p>
     <dl>
-      <dt><a name="style.id"><samp>id</samp></a></dt>
+      <dt><a id="style.id"><samp>id</samp></a></dt>
       <dd>Unique identifier for the style.</dd>
-      <dt><a name="style.clone"><samp>clone</samp></a></dt>
+      <dt><a id="style.clone"><samp>clone</samp></a></dt>
       <dd>Identifier of a previously defined style that is copied
 	    and used for the new style. This provides a convenient
 	    mechanism for overriding only a portion of an existing
@@ -144,7 +175,7 @@
     <h3>The state element</h3>
 <div class="dtd-fragment">
 <pre class="dtd-fragment">
-&lt;!ELEMENT <a name="e.state">state</a> (<a href="#e.color">color</a> | <a href="#e.font">font</a> | <a href="#e.painter">painter</a> | <a href="#e.imagePainter">imagePainter</a> | (<a href="#ee.beansPersistance">%beansPersistance;</a>) |
+&lt;!ELEMENT <a id="e.state">state</a> (<a href="#e.color">color</a> | <a href="#e.font">font</a> | <a href="#e.painter">painter</a> | <a href="#e.imagePainter">imagePainter</a> | (<a href="#ee.beansPersistance">%beansPersistance;</a>) |
                  <a href="#e.property">property</a> |  <a href="#e.imageIcon">imageIcon</a>)*>
 &lt;!ATTLIST state
           <a href="#state.id">id</a>              ID             #IMPLIED
@@ -156,19 +187,19 @@
 </div>
     <p><em>Attribute definitions</em></p>
     <dl>
-      <dt><a name="state.id"><samp>id</samp></a></dt>
+      <dt><a id="state.id"><samp>id</samp></a></dt>
       <dd>Unique identifier for the state.</dd>
-      <dt><a name="state.clone"><samp>clone</samp></a></dt>
+      <dt><a id="state.clone"><samp>clone</samp></a></dt>
       <dd>Identifier of a previously defined state that is copied
 	and used for the new state.</dd>
-      <dt><a name="state.value"><samp>value</samp></a></dt>
+      <dt><a id="state.value"><samp>value</samp></a></dt>
       <dd>Identifies the state of the Component the properties are to apply
 	to. This is a list of: ENABLED,
 	MOUSE_OVER, PRESSED, DISABLED, FOCUSED, SELECTED or
 	DEFAULT. Multiple states should
 	be separated by 'and.' If you do not specify a value, the
 	contents apply to all states.
-      <dt><a name="state.idref"><samp>idref</samp></a></dt>
+      <dt><a id="state.idref"><samp>idref</samp></a></dt>
       <dd>Indicates this state should be the same as a previously
 	    defined state. This is useful for multiple styles that
 	    wish to share the same visual properties for a particular
@@ -212,7 +243,7 @@
     <p>
       State <code>one</code> is used when the Component is SELECTED
       and PRESSED, and state <code>two</code> when the Component is
-      SELECTED. If the state of the Component 
+      SELECTED. If the state of the Component
       contains at least SELECTED and PRESSED, state <code>one</code> will be
       chosen, otherwise if the state is SELECTED, but not does not
       contain PRESSED, state <code>two</code> will be used.
@@ -220,7 +251,7 @@
     <h3>The font element</h3>
 <div class="dtd-fragment">
 <pre class="dtd-fragment">
-&lt;!ELEMENT <a name="e.font">font</a> EMPTY>
+&lt;!ELEMENT <a id="e.font">font</a> EMPTY>
 &lt;!ATTLIST font
           <a href="#font.id">id</a>              ID             #IMPLIED
           <a href="#font.idref">clone</a>           IDREF          #IMPLIED
@@ -232,18 +263,18 @@
 </div>
     <p><em>Attribute definitions</em></p>
     <dl>
-      <dt><a name="font.id"><samp>id</samp></a></dt>
+      <dt><a id="font.id"><samp>id</samp></a></dt>
       <dd>Unique identifier for the Font.</dd>
-      <dt><a name="font.idref"><samp>idref</samp></a></dt>
+      <dt><a id="font.idref"><samp>idref</samp></a></dt>
       <dd>Identifier of a previously defined font.</dd>
-      <dt><a name="font.name"><samp>name</samp></a></dt>
+      <dt><a id="font.name"><samp>name</samp></a></dt>
       <dd>Name of the font.
-      <dt><a name="font.style"><samp>style</samp></a></dt>
+      <dt><a id="font.style"><samp>style</samp></a></dt>
       <dd>Style of the font. This is a list of the styles defined by
 	Font separated by spaces: PLAIN, BOLD or ITALIC. If
 	unspecified PLAIN is used.
       </dd>
-      <dt><a name="font.size"><samp>size</samp></a></dt>
+      <dt><a id="font.size"><samp>size</samp></a></dt>
       <dd>Size of the font, in pixels</dd>
     </dl>
     <p>
@@ -289,7 +320,7 @@
     <h3>The color element</h3>
 <div class="dtd-fragment">
 <pre class="dtd-fragment">
-&lt;!ELEMENT <a name="e.color">color</a> EMPTY>
+&lt;!ELEMENT <a id="e.color">color</a> EMPTY>
 &lt;!ATTLIST color
           <a href="#color.id">id</a>              ID             #IMPLIED
           <a href="#color.idref">idref</a>           IDREF          #IMPLIED
@@ -300,11 +331,11 @@
 </div>
     <p><em>Attribute definitions</em></p>
     <dl>
-      <dt><a name="color.id"><samp>id</samp></a></dt>
+      <dt><a id="color.id"><samp>id</samp></a></dt>
       <dd>Unique identifier for the color.</dd>
-      <dt><a name="color.idref"><samp>idref</samp></a></dt>
+      <dt><a id="color.idref"><samp>idref</samp></a></dt>
       <dd>Identifier of a previously defined color.</dd>
-      <dt><a name="color.type"><samp>type</samp></a></dt>
+      <dt><a id="color.type"><samp>type</samp></a></dt>
       <dd>Describes where this color should be used. This is
 	    typically one of the constants defined by ColorType:
 	    FOREGROUND, BACKGROUND, TEXT_FOREGROUND, TEXT_BACKGROUND
@@ -314,12 +345,12 @@
 	    is useful for subclasses of synth that define additional
 	    color types.
       </dd>
-      <dt><a name="color.value"><samp>value</samp></a></dt>
+      <dt><a id="color.value"><samp>value</samp></a></dt>
       <dd>
-        Value for the color. This accepts the following forms. 
+        Value for the color. This accepts the following forms.
         <ul>
           <li>The name of a constant in the <code>Color</code> class,
-            for example <code> RED</code>. 
+            for example <code> RED</code>.
           <li>A hex value of the form <code>#RRGGBB</code> where
             <code>RR</code> gives the red component, <code>GG</code>
             the green component and <code>BB</code> the blue
@@ -329,7 +360,7 @@
             <code>#AARRGGBB</code>. This is useful for alpha values
             other than <code>0xFF</code>. The form
             <code>#ARRGGBB</code> is equivalent to
-            <code>#0ARRGGBB</code>. 
+            <code>#0ARRGGBB</code>.
         </ul>
       </dd>
     </dl>
@@ -366,7 +397,7 @@
     <h3>The property element</h3>
 <div class="dtd-fragment">
 <pre class="dtd-fragment">
-&lt;!ELEMENT <a name="e.property">property</a> EMPTY>
+&lt;!ELEMENT <a id="e.property">property</a> EMPTY>
 &lt;!ATTLIST property
           <a href="#property.key">key</a>               CDATA                                             #REQUIRED
           <a href="#property.type">type</a>              (idref|boolean|dimension|insets|integer|string)          "idref"
@@ -376,11 +407,11 @@
 </div>
     <p><em>Attribute definitions</em></p>
     <dl>
-      <dt><a name="property.key"><samp>key</samp></a></dt>
+      <dt><a id="property.key"><samp>key</samp></a></dt>
       <dd>Name of the property.</dd>
-      <dt><a name="property.type"><samp>type</samp></a></dt>
+      <dt><a id="property.type"><samp>type</samp></a></dt>
       <dd>Indicates the type of the property.</dd>
-      <dt><a name="property.value"><samp>value</samp></a></dt>
+      <dt><a id="property.value"><samp>value</samp></a></dt>
       <dd>Value for the property. For boolean properties this will be
 	be true or false, for integer properties this will be a
 	valid integer, for dimensions this will be the width and
@@ -438,7 +469,7 @@
 </div>
 <div class="dtd-fragment">
 <pre class="dtd-fragment">
-&lt;!ELEMENT <a name="e.defaultsProperty">defaultsProperty</a> EMPTY>
+&lt;!ELEMENT <a id="e.defaultsProperty">defaultsProperty</a> EMPTY>
 &lt;!ATTLIST defaultsProperty
           <a href="#defaultsProperty.key">key</a>               CDATA                                             #REQUIRED
           <a href="#defaultsProperty.type">type</a>              (idref|boolean|dimension|insets|integer|string)   "idref"
@@ -448,11 +479,11 @@
 </div>
     <p><em>Attribute definitions</em></p>
     <dl>
-      <dt><a name="defaultsProperty.key"><samp>key</samp></a></dt>
+      <dt><a id="defaultsProperty.key"><samp>key</samp></a></dt>
       <dd>Name of the property.</dd>
-      <dt><a name="defaultsProperty.type"><samp>type</samp></a></dt>
+      <dt><a id="defaultsProperty.type"><samp>type</samp></a></dt>
       <dd>Indicates the type of the property.</dd>
-      <dt><a name="defaultsProperty.value"><samp>value</samp></a></dt>
+      <dt><a id="defaultsProperty.value"><samp>value</samp></a></dt>
       <dd>Value for the property. For boolean properties this will be
 	true or false, for integer properties this will be a
 	valid integer, for dimensions this will be the width and
@@ -488,7 +519,7 @@
     <h3>The graphicsUtils element</h3>
 <div class="dtd-fragment">
 <pre class="dtd-fragment">
-&lt;!ELEMENT <a name="e.graphicsUtils">graphicsUtils</a> EMPTY>
+&lt;!ELEMENT <a id="e.graphicsUtils">graphicsUtils</a> EMPTY>
 &lt;!ATTLIST graphicsUtils
           <a href="#graphicsUtils.idref">idref</a>           IDREF             #REQUIRED
 &gt;
@@ -496,7 +527,7 @@
 </div>
     <p><em>Attribute definitions</em></p>
     <dl>
-      <dt><a name="graphicsUtils.idref"><samp>idref</samp></a></dt>
+      <dt><a id="graphicsUtils.idref"><samp>idref</samp></a></dt>
       <dd>Identifer of a previously defined SynthGraphicsUtils object
 	that is to be used as the SynthGraphicsUtils for the current
 	<a href="#e.style">style</a>.</dd>
@@ -520,7 +551,7 @@
     <h3>The insets element</h3>
 <div class="dtd-fragment">
 <pre class="dtd-fragment">
-&lt;!ELEMENT <a name="e.insets">insets</a> EMPTY>
+&lt;!ELEMENT <a id="e.insets">insets</a> EMPTY>
 &lt;!ATTLIST insets
           <a href="#insets.id">id</a>           ID             #IMPLIED
           <a href="#insets.idref">idref</a>        IDREF          #IMPLIED
@@ -533,17 +564,17 @@
 </div>
     <p><em>Attribute definitions</em></p>
     <dl>
-      <dt><a name="insets.id"><samp>id</samp></a></dt>
+      <dt><a id="insets.id"><samp>id</samp></a></dt>
       <dd>Unique identifier for the Insets.</dd>
-      <dt><a name="insets.idref"><samp>idref</samp></a></dt>
+      <dt><a id="insets.idref"><samp>idref</samp></a></dt>
       <dd>Identifier of a previously defined Insets.</dd>
-      <dt><a name="insets.top"><samp>top</samp></a></dt>
+      <dt><a id="insets.top"><samp>top</samp></a></dt>
       <dd>Top component of the Insets.</dd>
-      <dt><a name="insets.bottom"><samp>bottom</samp></a></dt>
+      <dt><a id="insets.bottom"><samp>bottom</samp></a></dt>
       <dd>Bottom component of the Insets.</dd>
-      <dt><a name="insets.left"><samp>left</samp></a></dt>
+      <dt><a id="insets.left"><samp>left</samp></a></dt>
       <dd>Left component of the Insets.</dd>
-      <dt><a name="insets.right"><samp>right</samp></a></dt>
+      <dt><a id="insets.right"><samp>right</samp></a></dt>
       <dd>Right component of the Insets.</dd>
     </dl>
     <p>
@@ -564,7 +595,7 @@
     <h3>The bind element</h3>
 <div class="dtd-fragment">
 <pre class="dtd-fragment">
-&lt;!ELEMENT <a name="e.bind">bind</a> EMPTY>
+&lt;!ELEMENT <a id="e.bind">bind</a> EMPTY>
 &lt;!ATTLIST bind
           <a href="#bind.style">style</a>        IDREF             #REQUIRED
           <a href="#bind.type">type</a>         (name|region)     #REQUIRED
@@ -574,12 +605,12 @@
 </div>
     <p><em>Attribute definitions</em></p>
     <dl>
-      <dt><a name="bind.style"><samp>style</samp></a></dt>
+      <dt><a id="bind.style"><samp>style</samp></a></dt>
       <dd>Unique identifier of a previously defined style.</dd>
-      <dt><a name="bind.type"><samp>type</samp></a></dt>
+      <dt><a id="bind.type"><samp>type</samp></a></dt>
       <dd>One of name or region. For type name component.getName() is used,
 	otherwise the name of the Region is used.</dd>
-      <dt><a name="bind.key"><samp>key</samp></a></dt>
+      <dt><a id="bind.key"><samp>key</samp></a></dt>
       <dd>Regular expression applied to the name of the Component, or the
 	name of the Region, depending upon the value of
 	<a href="#bind.type">type</a>.</dd>
@@ -673,7 +704,7 @@
     <h3>The painter element</h3>
 <div class="dtd-fragment">
 <pre class="dtd-fragment">
-&lt;!ELEMENT <a name="e.painter">painter</a> EMPTY>
+&lt;!ELEMENT <a id="e.painter">painter</a> EMPTY>
 &lt;!ATTLIST painter
           <a href="#painter.idref">idref</a>                 IDREF          #IMPLIED
           <a href="#painter.method">method</a>                CDATA          #IMPLIED
@@ -683,9 +714,9 @@
 </div>
     <p><em>Attribute definitions</em></p>
     <dl>
-      <dt><a name="painter.idref"><samp>idref</samp></a></dt>
+      <dt><a id="painter.idref"><samp>idref</samp></a></dt>
       <dd>Identifier of a previously defined SynthPainter.</dd>
-      <dt><a name="painter.method"><samp>method</samp></a></dt>
+      <dt><a id="painter.method"><samp>method</samp></a></dt>
       <dd>Identifies the SynthPainter method this is to be used for. The name
 	corresponds to the method name of a paint method in SynthPainter
 	with the paint prefix dropped, the remainder is case
@@ -694,7 +725,7 @@
 	'buttonBackground' or 'buttonbackground'. If this is
 	not specified the painter is used for all methods that don't have a
 	a specific painter for them.</dd>
-      <dt><a name="painter.direction"><samp>direction</samp></a></dt>
+      <dt><a id="painter.direction"><samp>direction</samp></a></dt>
       <dd>Identifies the direction, or orientation, this painter is to be
 	used for. This is only useful for the SynthPainter methods that take
 	a direction or orientation. If this is not specified the painter is
@@ -787,7 +818,7 @@
     <h3>The imagePainter element</h3>
 <div class="dtd-fragment">
 <pre class="dtd-fragment">
-&lt;!ELEMENT <a name="e.imagePainter">imagePainter</a> EMPTY>
+&lt;!ELEMENT <a id="e.imagePainter">imagePainter</a> EMPTY>
 &lt;!ATTLIST imagePainter
           <a href="#imagePainter.id">id</a>                    ID             #IMPLIED
           <a href="#imagePainter.method">method</a>                CDATA          #IMPLIED
@@ -803,9 +834,9 @@
 </div>
     <p><em>Attribute definitions</em></p>
     <dl>
-      <dt><a name="imagePainter.id"><samp>id</samp></a></dt>
+      <dt><a id="imagePainter.id"><samp>id</samp></a></dt>
       <dd>Unique identifier for the imagePainter.</dd>
-      <dt><a name="imagePainter.method"><samp>method</samp></a></dt>
+      <dt><a id="imagePainter.method"><samp>method</samp></a></dt>
       <dd>Identifies the SynthPainter method this is to be used for. The name
 	corresponds to the method name of a paint method in SynthPainter
 	with the paint prefix dropped, the remainder is case
@@ -814,29 +845,29 @@
 	'buttonBackground' or 'buttonbackground'. If this is
 	not specified the painter is used for all methods that don't have a
 	a specific painter for them.</dd>
-      <dt><a name="imagePainter.direction"><samp>direction</samp></a></dt>
+      <dt><a id="imagePainter.direction"><samp>direction</samp></a></dt>
       <dd>Identifies the direction, or orientation, this image is to be
 	used for. This is only useful for the SynthPainter methods that take
 	a direction or orientation. If this is not specified the image is
 	used for all directions.</dd>
-      <dt><a name="imagePainter.path"><samp>path</samp></a></dt>
+      <dt><a id="imagePainter.path"><samp>path</samp></a></dt>
       <dd>Path to the image. Path to the image.  If SynthLookAndFeel.load is
     passed a Class this will use the Class method getResource (with with the
     Class suplied to the load method). If load is passed a URL this will use the
     URL constructor URL(context, path) to resolve the path.</dd>
-      <dt><a name="imagePainter.sourceInsets"><samp>sourceInsets</samp></a></dt>
+      <dt><a id="imagePainter.sourceInsets"><samp>sourceInsets</samp></a></dt>
       <dd>Insets on the source image. This is top, left, bottom, right with
 	each component separated by a space.</dd>
-      <dt><a name="imagePainter.destinationInsets"><samp>destinationInsets</samp></a></dt>
+      <dt><a id="imagePainter.destinationInsets"><samp>destinationInsets</samp></a></dt>
       <dd>Insets of the destination image. This is top, left, bottom, right with
 	each component separated by a space. If not specified the
 	<a href="#imagePainter.sourceInsets">sourceInsets</a> are used.</dd>
-      <dt><a name="imagePainter.painterCenter"><samp>paintCenter</samp></a></dt>
+      <dt><a id="imagePainter.painterCenter"><samp>paintCenter</samp></a></dt>
       <dd>Whether or not the center of the image should be drawn.</dd>
-      <dt><a name="imagePainter.stretch"><samp>stretch</samp></a></dt>
+      <dt><a id="imagePainter.stretch"><samp>stretch</samp></a></dt>
       <dd>Whether or not the north, south, east and west components of the
 	resulting image should be scaled or tiled.</dd>
-      <dt><a name="imagePainter.center"><samp>center</samp></a></dt>
+      <dt><a id="imagePainter.center"><samp>center</samp></a></dt>
       <dd>Whether or not the image is centered.</dd>
     </dl>
     <p>
@@ -844,7 +875,7 @@
       painter for the current style or state that will render using
       the specified image.  ImagePainter offers two distinct rendering
       modes.  The first mode is used to center an image in the space
-      provided.  This is 
+      provided.  This is
       commonly used in rendering decorations on top of a widget, for
       example, to specify an arrow for a scroll button use the center
       mode. The following example illustrates this:
@@ -878,12 +909,12 @@
       Refer to the description of the <a href="#e.painter">painter</a>
       element for details as to the precedence in choosing a painter and to
       understand how identical painters are handled.
-	
+
 
     <h3>The imageIcon element</h3>
 <div class="dtd-fragment">
 <pre class="dtd-fragment">
-&lt;!ELEMENT <a name="e.imageIcon">imageIcon</a> EMPTY>
+&lt;!ELEMENT <a id="e.imageIcon">imageIcon</a> EMPTY>
 &lt;!ATTLIST imageIcon
           <a href="#imageIcon.id">id</a>                    ID             #REQUIRED
           <a href="#imageIcon.path">path</a>                  CDATA          #REQUIRED
@@ -892,9 +923,9 @@
 </div>
     <p><em>Attribute definitions</em></p>
     <dl>
-      <dt><a name="imageIcon.id"><samp>id</samp></a></dt>
+      <dt><a id="imageIcon.id"><samp>id</samp></a></dt>
       <dd>Unique identifier for the imageIcon.</dd>
-      <dt><a name="imageIcon.path"><samp>path</samp></a></dt>
+      <dt><a id="imageIcon.path"><samp>path</samp></a></dt>
       <dd>Path to the image. This uses the Class method
 	getResource to resolve the path, with the Class supplied to
 	SynthLookAndFeel.load.</dd>
@@ -917,7 +948,7 @@
    <h3>The opaque element</h3>
 <div class="dtd-fragment">
 <pre class="dtd-fragment">
-&lt;!ELEMENT <a name="e.opaque">opaque</a> EMPTY>
+&lt;!ELEMENT <a id="e.opaque">opaque</a> EMPTY>
 &lt;!ATTLIST opaque
           <a href="#opaque.value">value</a>              (true|false)   "true"
 &gt;
@@ -925,7 +956,7 @@
 </div>
     <p><em>Attribute definitions</em></p>
     <dl>
-      <dt><a name="opaque.value"><samp>id</samp></a></dt>
+      <dt><a id="opaque.value"><samp>id</samp></a></dt>
       <dd>Whether or not the style should be opaque, if unspecified the style
 	is opaque.</dd>
     </dl>
@@ -945,12 +976,14 @@
     </pre>
 </div>
 
-    <h3><a name="ee.beansPersistance">The beansPersistance entity</a></h3>
+    <h3><a id="ee.beansPersistance">The beansPersistance entity</a></h3>
     <p>
       Beans persistance can be used to embed any Object. This is
       typically used for embedding your own Painters, but can be used
       for other arbritrary objects as well. Refer to <a
-							href="http://www.oracle.com/technetwork/java/persistence3-139471.html">http://www.oracle.com/technetwork/java/persistence3-139471.html</a> for details on beans persistance.
+        href="http://www.oracle.com/technetwork/java/persistence3-139471.html">
+      http://www.oracle.com/technetwork/java/persistence3-139471.html</a>
+      for details on beans persistance.
 
 
     <h3>Backing Style</h3>
--- a/src/java.desktop/share/classes/sun/awt/HToolkit.java	Mon Dec 04 19:10:15 2017 +0100
+++ b/src/java.desktop/share/classes/sun/awt/HToolkit.java	Mon Dec 04 10:12:46 2017 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -130,12 +130,19 @@
     }
 
     @Override
+    @Deprecated(since = "10")
     public int getMenuShortcutKeyMask()
         throws HeadlessException {
         throw new HeadlessException();
     }
 
     @Override
+    public int getMenuShortcutKeyMaskEx()
+        throws HeadlessException {
+        throw new HeadlessException();
+    }
+
+    @Override
     public boolean getLockingKeyState(int keyCode)
         throws UnsupportedOperationException {
         throw new HeadlessException();
--- a/src/java.desktop/share/classes/sun/awt/HeadlessToolkit.java	Mon Dec 04 19:10:15 2017 +0100
+++ b/src/java.desktop/share/classes/sun/awt/HeadlessToolkit.java	Mon Dec 04 10:12:46 2017 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -31,6 +31,7 @@
 import java.awt.dnd.DragGestureRecognizer;
 import java.awt.dnd.DragSource;
 import java.awt.event.AWTEventListener;
+import java.awt.event.InputEvent;
 import java.awt.font.TextAttribute;
 import java.awt.im.InputMethodHighlight;
 import java.awt.image.ColorModel;
@@ -128,12 +129,19 @@
     }
 
     @Override
+    @Deprecated(since = "10")
     public int getMenuShortcutKeyMask()
         throws HeadlessException {
         throw new HeadlessException();
     }
 
     @Override
+    public int getMenuShortcutKeyMaskEx()
+        throws HeadlessException {
+        throw new HeadlessException();
+    }
+
+    @Override
     public boolean getLockingKeyState(int keyCode)
         throws UnsupportedOperationException {
         throw new HeadlessException();
--- a/src/java.desktop/share/classes/sun/print/RasterPrinterJob.java	Mon Dec 04 19:10:15 2017 +0100
+++ b/src/java.desktop/share/classes/sun/print/RasterPrinterJob.java	Mon Dec 04 10:12:46 2017 -0800
@@ -886,12 +886,45 @@
         }
    }
 
-   protected PageFormat getPageFormatFromAttributes() {
-       if (attributes == null || attributes.isEmpty()) {
+    protected PageFormat getPageFormatFromAttributes() {
+        if (attributes == null || attributes.isEmpty()) {
             return null;
         }
-        return attributeToPageFormat(getPrintService(), this.attributes);
-   }
+
+        PageFormat newPf = attributeToPageFormat(
+            getPrintService(), attributes);
+        PageFormat oldPf = null;
+        Pageable pageable = getPageable();
+        if ((pageable != null) &&
+            (pageable instanceof OpenBook) &&
+            ((oldPf = pageable.getPageFormat(0)) != null)) {
+            // If orientation, media, imageable area attributes are not in
+            // "attributes" set, then use respective values of the existing
+            // page format "oldPf".
+            if (attributes.get(OrientationRequested.class) == null) {
+                newPf.setOrientation(oldPf.getOrientation());
+            }
+
+            Paper newPaper = newPf.getPaper();
+            Paper oldPaper = oldPf.getPaper();
+            boolean oldPaperValWasSet = false;
+            if (attributes.get(MediaSizeName.class) == null) {
+                newPaper.setSize(oldPaper.getWidth(), oldPaper.getHeight());
+                oldPaperValWasSet = true;
+            }
+            if (attributes.get(MediaPrintableArea.class) == null) {
+                newPaper.setImageableArea(
+                    oldPaper.getImageableX(), oldPaper.getImageableY(),
+                    oldPaper.getImageableWidth(),
+                    oldPaper.getImageableHeight());
+                oldPaperValWasSet = true;
+            }
+            if (oldPaperValWasSet) {
+                newPf.setPaper(newPaper);
+            }
+        }
+        return newPf;
+    }
 
 
    /**
--- a/src/jdk.accessibility/windows/native/jabswitch/jabswitch.cpp	Mon Dec 04 19:10:15 2017 +0100
+++ b/src/jdk.accessibility/windows/native/jabswitch/jabswitch.cpp	Mon Dec 04 10:12:46 2017 -0800
@@ -206,6 +206,7 @@
          len - 1 > sizeof(tempPath) - sizeof(acc_props2) ) {
         printf("The USERPROFILE environment variable is too long.\n");
         printf("It must be no longer than 233 characters.\n");
+        free(profilePath);
         return 123;
      }
     path[0] = 0;
--- a/test/jdk/java/awt/Toolkit/Headless/HeadlessToolkit.java	Mon Dec 04 19:10:15 2017 +0100
+++ b/test/jdk/java/awt/Toolkit/Headless/HeadlessToolkit.java	Mon Dec 04 10:12:46 2017 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -118,6 +118,15 @@
 
         exceptions = false;
         try {
+            int km = tk.getMenuShortcutKeyMaskEx();
+        } catch (HeadlessException e) {
+            exceptions = true;
+        }
+        if (!exceptions)
+            throw new RuntimeException("HeadlessException did not occur when expected");
+
+        exceptions = false;
+        try {
             boolean state = tk.getLockingKeyState(KeyEvent.VK_CAPS_LOCK);
         } catch (HeadlessException e) {
             exceptions = true;
--- a/test/jdk/java/awt/print/PageFormat/WrongPaperPrintingTest.java	Mon Dec 04 19:10:15 2017 +0100
+++ b/test/jdk/java/awt/print/PageFormat/WrongPaperPrintingTest.java	Mon Dec 04 10:12:46 2017 -0800
@@ -22,9 +22,8 @@
  */
 
 /* @test
-   @bug 8167102
+   @bug 8167102 8181659
    @summary PrintRequestAttributeSet breaks page size set using PageFormat
-   @ignore Exclude the test until 8167102 is resolved by a new reassessed fix
    @run main/manual WrongPaperPrintingTest
  */