sections, replaced by headings. This commit replaces only a small fraction of them. More will be done progressively in other commits.
This is an automated email from the ASF dual-hosted git repository.
desruisseaux pushed a commit to branch geoapi-4.0
in repository https://gitbox.apache.org/repos/asf/sis.git
commit 2c9e4aa65442f443e326a980325b3d580c67ff95
Author: Martin Desruisseaux <ma...@geomatys.com>
AuthorDate: Tue Apr 18 20:18:21 2023 +0200
Reduce the use of <div class="note"> sections, replaced by headings.
This commit replaces only a small fraction of them.
More will be done progressively in other commits.
---
.../java/org/apache/sis/gui/coverage/GridView.java | 25 ++++++++--------
.../sis/gui/coverage/ImagePropertyExplorer.java | 8 +++---
.../org/apache/sis/gui/dataset/ExpandableList.java | 5 ++--
.../org/apache/sis/gui/map/GestureFollower.java | 4 +--
.../java/org/apache/sis/gui/map/StatusBar.java | 12 ++++----
.../gui/referencing/RecentReferenceSystems.java | 19 +++++++------
.../apache/sis/coverage/grid/DomainLinearizer.java | 6 ++--
.../apache/sis/coverage/grid/GridCoverage2D.java | 5 ++--
.../sis/coverage/grid/GridCoverageBuilder.java | 12 ++++----
.../apache/sis/coverage/grid/GridDerivation.java | 33 +++++++++++-----------
.../org/apache/sis/coverage/grid/GridExtent.java | 14 ++++-----
.../org/apache/sis/coverage/grid/GridGeometry.java | 18 ++++++------
.../apache/sis/coverage/grid/GridRoundingMode.java | 8 +++---
.../apache/sis/coverage/grid/PixelTranslation.java | 24 ++++++++--------
.../sis/coverage/grid/ResampledGridCoverage.java | 6 ++--
.../main/java/org/apache/sis/portrayal/Canvas.java | 13 +++++----
.../internal/storage/inflater/CopyFromBytes.java | 12 ++++----
.../apache/sis/internal/storage/inflater/LZW.java | 12 ++++----
.../apache/sis/storage/geotiff/GeoTiffStore.java | 14 ++++-----
.../sis/storage/geotiff/ImageMetadataBuilder.java | 6 ++--
.../org/apache/sis/internal/netcdf/Convention.java | 32 ++++++++++-----------
.../org/apache/sis/internal/netcdf/Decoder.java | 6 ++--
.../apache/sis/internal/netcdf/GridMapping.java | 5 ++--
.../org/apache/sis/internal/netcdf/Linearizer.java | 6 ++--
.../org/apache/sis/internal/netcdf/Variable.java | 24 ++++++++--------
.../apache/sis/storage/netcdf/AttributeNames.java | 24 ++++++++--------
.../apache/sis/storage/netcdf/MetadataReader.java | 3 +-
.../sis/internal/sql/feature/TableAnalyzer.java | 5 ++--
.../apache/sis/internal/stream/DeferredStream.java | 6 ++--
.../sis/internal/storage/MetadataBuilder.java | 18 ++++++------
.../sis/internal/storage/ResourceOnFileSystem.java | 14 ++++-----
.../apache/sis/internal/storage/StoreMetadata.java | 18 ++++++------
.../sis/internal/storage/TiledGridCoverage.java | 6 ++--
.../apache/sis/internal/storage/io/Markable.java | 10 +++----
.../org/apache/sis/internal/storage/io/Region.java | 12 ++++----
.../internal/storage/io/RewindableLineReader.java | 5 ++--
.../org/apache/sis/internal/storage/wkt/Store.java | 4 +--
.../main/java/org/apache/sis/storage/DataSet.java | 6 ++--
.../sis/storage/DataStoreContentException.java | 4 +--
.../org/apache/sis/storage/DataStoreProvider.java | 21 ++++++--------
.../org/apache/sis/storage/DataStoreRegistry.java | 6 ++--
.../main/java/org/apache/sis/storage/Resource.java | 5 ++--
.../org/apache/sis/storage/StorageConnector.java | 4 +--
.../org/apache/sis/storage/WritableAggregate.java | 5 ++--
.../org/apache/sis/storage/WritableFeatureSet.java | 6 ++--
.../storage/aggregate/AggregatedFeatureSet.java | 9 +++---
.../storage/gpx/GroupAsPolylineOperation.java | 3 +-
.../storage/xml/stream/FormattedWriter.java | 6 ++--
.../storage/xml/stream/StaxStreamReader.java | 12 ++++----
49 files changed, 269 insertions(+), 272 deletions(-)
diff --git a/application/sis-javafx/src/main/java/org/apache/sis/gui/coverage/GridView.java b/application/sis-javafx/src/main/java/org/apache/sis/gui/coverage/GridView.java
index a08938a9a2..4e870e46ea 100644
--- a/application/sis-javafx/src/main/java/org/apache/sis/gui/coverage/GridView.java
+++ b/application/sis-javafx/src/main/java/org/apache/sis/gui/coverage/GridView.java
@@ -141,9 +141,9 @@ public class GridView extends Control {
* This size includes the {@linkplain #cellSpacing cell spacing}.
* It shall be a number strictly greater than zero.
*
- * <div class="note"><b>API note:</b>
+ * <h4>API note</h4>
* We do not provide getter/setter for this property; use {@link DoubleProperty#set(double)}
- * directly instead. We omit the "Property" suffix for making this operation more natural.</div>
+ * directly instead. We omit the "Property" suffix for making this operation more natural.
*/
public final DoubleProperty headerWidth;
@@ -152,9 +152,9 @@ public class GridView extends Control {
* This size includes the {@linkplain #cellSpacing cell spacing}.
* It shall be a number strictly greater than zero.
*
- * <div class="note"><b>API note:</b>
+ * <h4>API note</h4>
* We do not provide getter/setter for this property; use {@link DoubleProperty#set(double)}
- * directly instead. We omit the "Property" suffix for making this operation more natural.</div>
+ * directly instead. We omit the "Property" suffix for making this operation more natural.
*/
public final DoubleProperty cellWidth;
@@ -162,9 +162,9 @@ public class GridView extends Control {
* Height of all rows in the grid.
* It shall be a number strictly greater than zero.
*
- * <div class="note"><b>API note:</b>
+ * <h4>API note</h4>
* We do not provide getter/setter for this property; use {@link DoubleProperty#set(double)}
- * directly instead. We omit the "Property" suffix for making this operation more natural.</div>
+ * directly instead. We omit the "Property" suffix for making this operation more natural.
*/
public final DoubleProperty cellHeight;
@@ -173,18 +173,18 @@ public class GridView extends Control {
* There is no property for vertical cell spacing because increasing the
* {@linkplain #cellHeight cell height} should be sufficient.
*
- * <div class="note"><b>API note:</b>
+ * <h4>API note</h4>
* We do not provide getter/setter for this property; use {@link DoubleProperty#set(double)}
- * directly instead. We omit the "Property" suffix for making this operation more natural.</div>
+ * directly instead. We omit the "Property" suffix for making this operation more natural.
*/
public final DoubleProperty cellSpacing;
/**
* The background color of row and column headers.
*
- * <div class="note"><b>API note:</b>
+ * <h4>API note</h4>
* We do not provide getter/setter for this property; use {@link ObjectProperty#set(Object)}
- * directly instead. We omit the "Property" suffix for making this operation more natural.</div>
+ * directly instead. We omit the "Property" suffix for making this operation more natural.
*/
public final ObjectProperty<Paint> headerBackground;
@@ -550,8 +550,9 @@ public class GridView extends Control {
* if an error occurred during {@link RenderedImage#getTile(int, int)} invocation.
* The returned bounds are zero-based (may not be the bounds in image coordinates).
*
- * <div class="note"><b>Note:</b> we use AWT rectangle instead of JavaFX rectangle
- * because generally we use AWT for everything related to {@link RenderedImage}.</div>
+ * <h4>Design note</h4>
+ * We use AWT rectangle instead of JavaFX rectangle
+ * because generally we use AWT for everything related to {@link RenderedImage}.
*
* @param tileX <var>x</var> coordinates of the tile for which to get the bounds.
* @param tileY <var>y</var> coordinates of the tile for which to get the bounds.
diff --git a/application/sis-javafx/src/main/java/org/apache/sis/gui/coverage/ImagePropertyExplorer.java b/application/sis-javafx/src/main/java/org/apache/sis/gui/coverage/ImagePropertyExplorer.java
index 0a5b24b8ab..6320fb3d8d 100644
--- a/application/sis-javafx/src/main/java/org/apache/sis/gui/coverage/ImagePropertyExplorer.java
+++ b/application/sis-javafx/src/main/java/org/apache/sis/gui/coverage/ImagePropertyExplorer.java
@@ -81,9 +81,9 @@ public class ImagePropertyExplorer extends Widget {
* The root image to describe. This image will be the root of a tree;
* children will be image {@linkplain RenderedImage#getSources() sources}.
*
- * <div class="note"><b>API note:</b>
+ * <h4>API note</h4>
* We do not provide getter/setter for this property; use {@link ObjectProperty#set(Object)}
- * directly instead. We omit the "Property" suffix for making this operation more natural.</div>
+ * directly instead. We omit the "Property" suffix for making this operation more natural.
*/
public final ObjectProperty<RenderedImage> image;
@@ -138,9 +138,9 @@ public class ImagePropertyExplorer extends Widget {
* when the {@link #image} change. This is done for allowing the garbage collector to reclaim memory.
* The content is reset to {@link #image} properties when {@code updateOnChange} become {@code true} again.
*
- * <div class="note"><b>API note:</b>
+ * <h4>API note</h4>
* We do not provide getter/setter for this property; use {@link BooleanProperty#set(boolean)}
- * directly instead. We omit the "Property" suffix for making this operation more natural.</div>
+ * directly instead. We omit the "Property" suffix for making this operation more natural.
*/
public final BooleanProperty updateOnChange;
diff --git a/application/sis-javafx/src/main/java/org/apache/sis/gui/dataset/ExpandableList.java b/application/sis-javafx/src/main/java/org/apache/sis/gui/dataset/ExpandableList.java
index 0537ba6636..ba3bd19aba 100644
--- a/application/sis-javafx/src/main/java/org/apache/sis/gui/dataset/ExpandableList.java
+++ b/application/sis-javafx/src/main/java/org/apache/sis/gui/dataset/ExpandableList.java
@@ -124,11 +124,12 @@ final class ExpandableList extends TransformationList<Feature,Feature>
* Removes the expanded rows. This method does not fire change event;
* it is caller's responsibility to perform those tasks.
*
- * <div class="note"><b>Note:</b> we return {@code null} instead of an empty list if
+ * <h4>Design note</h4>
+ * We return {@code null} instead of an empty list if
* there are no removed elements because we want to force callers to perform a null check.
* The reason is that if there was no expansion rows, then {@link #indexOfExpanded} has an
* invalid value and using that value in {@link #nextRemove(int, List)} may be dangerous.
- * A {@link NullPointerException} would intercept that error sooner.</div>
+ * A {@link NullPointerException} would intercept that error sooner.
*
* @return the removed rows, or {@code null} if none.
*/
diff --git a/application/sis-javafx/src/main/java/org/apache/sis/gui/map/GestureFollower.java b/application/sis-javafx/src/main/java/org/apache/sis/gui/map/GestureFollower.java
index 275a84f0d0..7e418f8218 100644
--- a/application/sis-javafx/src/main/java/org/apache/sis/gui/map/GestureFollower.java
+++ b/application/sis-javafx/src/main/java/org/apache/sis/gui/map/GestureFollower.java
@@ -251,12 +251,12 @@ public class GestureFollower extends CanvasFollower implements EventHandler<Mous
* Invoked after the source "objective to display" transform has been updated.
* This implementation adjusts the cursor position for compensating the relative change in mouse position.
*
- * <div class="note"><b>Details:</b>
+ * <h4>Details</h4>
* If the map moved in the {@linkplain #source source} canvas without a change of mouse cursor position
* (for example if the user navigates using the keyboard), then the mouse position changed relatively to
* the map, so the cursor position on the {@linkplain #target target} canvas needs to be updated accordingly.
* This is a temporary change applied until the next {@link MouseEvent} gives us new mouse coordinates relative
- * to the map.</div>
+ * to the map.
*/
@Override
protected void transformedSource(final TransformChangeEvent event) {
diff --git a/application/sis-javafx/src/main/java/org/apache/sis/gui/map/StatusBar.java b/application/sis-javafx/src/main/java/org/apache/sis/gui/map/StatusBar.java
index 27c3df7629..234a81d9ba 100644
--- a/application/sis-javafx/src/main/java/org/apache/sis/gui/map/StatusBar.java
+++ b/application/sis-javafx/src/main/java/org/apache/sis/gui/map/StatusBar.java
@@ -245,9 +245,9 @@ public class StatusBar extends Widget implements EventHandler<MouseEvent> {
* when this {@code StatusBar} is <em>not</em> associated to a {@link MapCanvas}
* (for example it may be used with a {@link org.apache.sis.gui.coverage.GridView} instead).</p>
*
- * <div class="note"><b>API note:</b>
+ * <h4>API note</h4>
* We do not provide getter/setter for this property; use {@link ObjectProperty#set(Object)}
- * directly instead. We omit the "Property" suffix for making this operation more natural.</div>
+ * directly instead. We omit the "Property" suffix for making this operation more natural.
*
* @see MapCanvas#getObjectiveCRS()
* @see MapCanvas#getObjectiveToDisplay()
@@ -259,9 +259,9 @@ public class StatusBar extends Widget implements EventHandler<MouseEvent> {
* This is initially the <cite>objective CRS</cite>, but may become different
* if the user selects another reference system through contextual menu.
*
- * <div class="note"><b>API note:</b>
+ * <h4>API note</h4>
* We do not provide getter method for this property; use {@link ReadOnlyObjectProperty#get()}
- * directly instead. We omit the "Property" suffix for making this operation more natural.</div>
+ * directly instead. We omit the "Property" suffix for making this operation more natural.
*
* @see #position
*/
@@ -430,9 +430,9 @@ public class StatusBar extends Widget implements EventHandler<MouseEvent> {
* The property value may be {@code null} if there are no sample values to format.
* If non-null, the text provided by this object will appear at the right of the coordinates.
*
- * <div class="note"><b>API note:</b>
+ * <h4>API note</h4>
* We do not provide getter/setter for this property; use {@link ObjectProperty#set(Object)}
- * directly instead. We omit the "Property" suffix for making this operation more natural.</div>
+ * directly instead. We omit the "Property" suffix for making this operation more natural.
*/
public final ObjectProperty<ValuesUnderCursor> sampleValuesProvider;
diff --git a/application/sis-javafx/src/main/java/org/apache/sis/gui/referencing/RecentReferenceSystems.java b/application/sis-javafx/src/main/java/org/apache/sis/gui/referencing/RecentReferenceSystems.java
index 319bac2f60..be35de2eea 100644
--- a/application/sis-javafx/src/main/java/org/apache/sis/gui/referencing/RecentReferenceSystems.java
+++ b/application/sis-javafx/src/main/java/org/apache/sis/gui/referencing/RecentReferenceSystems.java
@@ -114,8 +114,9 @@ public class RecentReferenceSystems {
* A pseudo-reference system for the "Other…" choice. We use a null value because {@link ChoiceBox}
* seems to insist for inserting a null value in the items list when we remove the selected item.
*
- * <div class="note"><b>Maintenance note:</b> if this field is changed to a non-null value,
- * search also for usages of {@code Object::nonNull} predicate.</div>
+ * <h4>Maintenance note</h4>
+ * If this field is changed to a non-null value,
+ * search also for usages of {@code Object::nonNull} predicate.
*/
static final ReferenceSystem OTHER = null;
@@ -129,9 +130,9 @@ public class RecentReferenceSystems {
* The area of interest, or {@code null} if none. This is used for filtering the reference systems added by
* {@code addAlternatives(…)} and for providing some guidance to user when {@link CRSChooser} is shown.
*
- * <div class="note"><b>API note:</b>
+ * <h4>API note</h4>
* We do not provide getter/setter for this property; use {@link ObjectProperty#set(Object)}
- * directly instead. We omit the "Property" suffix for making this operation more natural.</div>
+ * directly instead. We omit the "Property" suffix for making this operation more natural.
*/
public final ObjectProperty<Envelope> areaOfInterest;
@@ -144,9 +145,9 @@ public class RecentReferenceSystems {
* The comparison criterion for considering two reference systems as a duplication.
* The default value is {@link ComparisonMode#ALLOW_VARIANT}, i.e. axis orders are ignored.
*
- * <div class="note"><b>API note:</b>
+ * <h4>API note</h4>
* We do not provide getter/setter for this property; use {@link ObjectProperty#set(Object)}
- * directly instead. We omit the "Property" suffix for making this operation more natural.</div>
+ * directly instead. We omit the "Property" suffix for making this operation more natural.
*/
public final ObjectProperty<ComparisonMode> duplicationCriterion;
@@ -237,11 +238,11 @@ public class RecentReferenceSystems {
* A filtered view of {@link #referenceSystems} without the {@link #OTHER} item.
* This is the list returned to users by public API, but otherwise it is not used by this class.
*
- * <div class="note"><b>Design note:</b>
- * the {@link #OTHER} item needs to exist in the list used internally by this class because those lists
+ * <h4>Design notes</h4>
+ * The {@link #OTHER} item needs to exist in the list used internally by this class because those lists
* are used directly by controls like {@code ChoiceBox<ReferenceSystem>}, with the {@link #OTHER} value
* handled in a special way by {@link ObjectStringConverter} for making the "Other…" item present in the
- * list of choices. But since {@link #OTHER} is not a real CRS, we want to hide that trick to users.</div>
+ * list of choices. But since {@link #OTHER} is not a real CRS, we want to hide that trick to users.
*
* <p>This list is lazily created when first needed,
* because it depends on {@link #referenceSystems} which is itself lazily created.</p>
diff --git a/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/DomainLinearizer.java b/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/DomainLinearizer.java
index c60e25efd8..a9fb085af1 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/DomainLinearizer.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/DomainLinearizer.java
@@ -206,10 +206,10 @@ public class DomainLinearizer {
* after a linear "grid to CRS" approximation has been computed by the <cite>Least Mean Squares</cite> method.
* Subclasses can override this method for example in order to scale the conversion by some arbitrary factor.
*
- * <div class="note"><b>Tip:</b>
- * scales (if desired) should be applied <em>before</em> {@code gridToCRS}, i.e. on grid coordinates.
+ * <h4>Tip</h4>
+ * Scales (if desired) should be applied <em>before</em> {@code gridToCRS}, i.e. on grid coordinates.
* Scales applied after the transform (i.e. on "real world" coordinates) may give unexpected results
- * if the conversion contains a rotation.</div>
+ * if the conversion contains a rotation.
*
* @param gridToCRS an approximation of the "grid to CRS" conversion computed by {@code DomainLinearizer}.
* @return the approximation to use for creating a new {@link GridGeometry}. Should be linear.
diff --git a/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridCoverage2D.java b/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridCoverage2D.java
index 7bbcd934b1..9dd2045456 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridCoverage2D.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridCoverage2D.java
@@ -69,8 +69,8 @@ import org.opengis.coverage.PointOutsideCoverageException;
* The only restriction is that the {@linkplain GridGeometry#getExtent() grid extent} has a
* {@linkplain GridExtent#getSize(int) size} equals to 1 in all dimensions except two of them.
*
- * <div class="note"><b>Example:</b>
- * a remote sensing image may be valid only over some time range
+ * <h2>Example</h2>
+ * A remote sensing image may be valid only over some time range
* (the temporal period of the satellite passing over observed area).
* Envelopes for such grid coverage can have three dimensions:
* the two usual ones (horizontal extent along <var>x</var> and <var>y</var>),
@@ -78,7 +78,6 @@ import org.opengis.coverage.PointOutsideCoverageException;
* This "two-dimensional" grid coverage can have any number of columns along <var>x</var> axis
* and any number of rows along <var>y</var> axis, but only one plan along <var>t</var> axis.
* This single plan can have a lower bound (the start time) and an upper bound (the end time).
- * </div>
*
* <h2>Image size and location</h2>
* The {@linkplain RenderedImage#getWidth() image width} and {@linkplain RenderedImage#getHeight() height}
diff --git a/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridCoverageBuilder.java b/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridCoverageBuilder.java
index c495a84f89..f0fd0b1218 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridCoverageBuilder.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridCoverageBuilder.java
@@ -214,16 +214,16 @@ public class GridCoverageBuilder {
* use row indices increasing in the opposite direction (toward down).
* This effect can be compensated by invoking <code>{@linkplain #flipGridAxis(int) flipGridAxis}(1)</code>.
*
- * <div class="note"><b>Design note:</b>
+ * <p>{@code GridCoverageBuilder} provides method only for flipping axes.
+ * If more sophisticated operations is desired (for example a rotation),
+ * then {@link #setDomain(GridGeometry)} should be used instead of this method.</p>
+ *
+ * <h5>Design note</h5>
* {@code GridCoverageBuilder} does not flip the <var>y</var> axis by default because not all
* file formats have row indices increasing toward down. A counter-example is the netCDF format.
* Even if we consider that the majority of images have <var>y</var> axis flipped, things become
* less obvious when considering data in more than two dimensions. Having the same default policy
- * (no flipping) for all dimensions make problem analysis easier.</div>
- *
- * {@code GridCoverageBuilder} provides method only for flipping axes.
- * If more sophisticated operations is desired (for example a rotation),
- * then {@link #setDomain(GridGeometry)} should be used instead of this method.
+ * (no flipping) for all dimensions make problem analysis easier.
*
* <h4>Default implementation</h4>
* The default implementation creates a new {@link GridGeometry} from the given envelope
diff --git a/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridDerivation.java b/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridDerivation.java
index 006247c392..3e15f4cbb8 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridDerivation.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridDerivation.java
@@ -296,10 +296,11 @@ public class GridDerivation {
* For example if subsampling is 2, then a margin of 6 cells specified with this method will result
* in a margin of 3 cells in the grid extent computed by the {@link #build()} method.
*
- * <div class="note"><b>Use case:</b>
- * if the caller wants to apply bilinear interpolations in an image, (s)he will need 1 more pixel on each image border.
- * If the caller wants to apply bi-cubic interpolations, (s)he will need 2 more pixels on each image border.</div>
+ * <h4>Use case</h4>
+ * If the caller wants to apply bilinear interpolations in an image, (s)he will need 1 more pixel on each image border.
+ * If the caller wants to apply bi-cubic interpolations, (s)he will need 2 more pixels on each image border.
*
+ * <h4>Default values</h4>
* If this method is never invoked, the default value is zero for all dimensions.
* If this method is invoked too late, an {@link IllegalStateException} is thrown.
* If the {@code cellCounts} array length is shorter than the grid dimension,
@@ -956,8 +957,8 @@ public class GridDerivation {
* to a single point. Dimensions can be left unspecified either by assigning to {@code slicePoint} a CRS
* without those dimensions, or by assigning the NaN value to some coordinates.
*
- * <div class="note"><b>Example:</b>
- * if the {@linkplain GridGeometry#getCoordinateReferenceSystem() coordinate reference system} of base grid geometry has
+ * <h4>Example</h4>
+ * If the {@linkplain GridGeometry#getCoordinateReferenceSystem() coordinate reference system} of base grid geometry has
* (<var>longitude</var>, <var>latitude</var>, <var>time</var>) axes, then a (<var>longitude</var>, <var>latitude</var>)
* slice at time <var>t</var> can be created with one of the following two positions:
* <ul>
@@ -965,9 +966,9 @@ public class GridDerivation {
* <li>A one-dimensional position with (<var>t</var>) coordinate and the coordinate reference system set to
* {@linkplain org.apache.sis.referencing.CRS#getTemporalComponent(CoordinateReferenceSystem) the temporal component}
* of the grid geometry CRS.</li>
- * </ul></div>
+ * </ul>
*
- * <p>Notes:</p>
+ * <h4>Usage notes</h4>
* <ul>
* <li>This method can be invoked after {@link #subgrid(Envelope, double...)}, but not before.</li>
* <li>If a non-default rounding mode is desired, it should be {@linkplain #rounding(GridRoundingMode) specified}
@@ -1216,14 +1217,14 @@ public class GridDerivation {
* This method returns the {s₀, s₁, s₂} values while {@link #getSubsamplingOffsets()}
* returns the {t₀, t₁, t₂} values. All subsampling values are strictly positive integers.
*
- * <div class="note"><b>Application to iterations</b><br>
+ * <p>This method can be invoked after {@link #build()} for getting additional information.
+ * If {@link #subgrid(GridExtent, int...)} has been invoked, then this method returns the
+ * values that were given in the {@code subsampling} argument.</p>
+ *
+ * <h4>Application to iterations</h4>
* Iteration over {@code areaOfInterest} grid coordinates with a stride Δ<var>x</var>=1
* corresponds to an iteration in {@link #base} grid coordinates with a stride of Δ<var>x′</var>=s₀,
- * a stride Δ<var>y</var>=1 corresponds to a stride Δ<var>y′</var>=s₁, <i>etc.</i></div>
- *
- * This method can be invoked after {@link #build()} for getting additional information.
- * If {@link #subgrid(GridExtent, int...)} has been invoked, then this method returns the
- * values that were given in the {@code subsampling} argument.
+ * a stride Δ<var>y</var>=1 corresponds to a stride Δ<var>y′</var>=s₁, <i>etc.</i>
*
* @return an <em>estimation</em> of the strides for accessing cells along each axis of {@link #base} grid.
* @throws IllegalStateException if the subsampling factors are not integers. It may happen if the derived
@@ -1259,8 +1260,8 @@ public class GridDerivation {
* If a {@link #chunkSize} has been specified, then the subsampling will be a divisor of that size.
* This is necessary for avoiding a drift of subsampled pixel coordinates computed from tile coordinates.
*
- * <div class="note"><b>Drift example:</b>
- * if the tile size is 16 pixels and the subsampling is 3, then the subsampled tile size is ⌊16/3⌋ = 5 pixels.
+ * <h4>Drift example</h4>
+ * If the tile size is 16 pixels and the subsampling is 3, then the subsampled tile size is ⌊16/3⌋ = 5 pixels.
* Pixel coordinates for each tile is as below:
*
* <table class="sis">
@@ -1276,7 +1277,7 @@ public class GridDerivation {
* for a regular progression of those pixel coordinates. For {@code GridCoverageResource} implementations,
* it would require to read the last row of tile #2 and insert those data as the first row of tile #3.
* It does not only make implementations much more difficult, but also hurts performance because fetching
- * a single tile would actually require the "physical" reading of 2 or more tiles.</div>
+ * a single tile would actually require the "physical" reading of 2 or more tiles.
*
* @param scale the scale factor to round.
* @param dimension the dimension of the scale factor to round.
diff --git a/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridExtent.java b/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridExtent.java
index 99da3df96e..e5098872c7 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridExtent.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridExtent.java
@@ -1506,17 +1506,17 @@ public class GridExtent implements GridEnvelope, LenientComparable, Serializable
* accordingly (this is often equivalent to dividing high coordinates by the periods too, but a difference
* of one cell may exist).
*
- * <div class="note"><b>Note:</b>
+ * <h4>Usage note</h4>
* If the "real world" envelope computed from grid extent needs to stay approximately the same, then the
* {@linkplain GridGeometry#getGridToCRS grid to CRS} transform needs to compensate the subsampling with
* a pre-multiplication of each grid coordinates by {@code periods}.
* However, the envelope computed that way may become <em>larger</em> after subsampling, not smaller.
* This effect can be understood intuitively if we consider that cells become larger after subsampling,
* which implies that accurate representation of the same envelope may require fractional cells on some
- * grid borders.</div>
+ * grid borders.
*
- * This method does not reduce the number of dimensions of the grid extent.
- * For dimensionality reduction, see {@link #selectDimensions(int[])}.
+ * <p>This method does not reduce the number of dimensions of the grid extent.
+ * For dimensionality reduction, see {@link #selectDimensions(int[])}.</p>
*
* <h4>Number of arguments</h4>
* The {@code periods} array length should be equal to the {@linkplain #getDimension() number of dimensions}.
@@ -1701,9 +1701,9 @@ public class GridExtent implements GridEnvelope, LenientComparable, Serializable
* The returned extent has the same {@linkplain #getSize(int) size} than this extent,
* i.e. both low and high grid coordinates are displaced by the same amount of cells.
*
- * <div class="note"><b>Example:</b>
- * for an extent (x: [0…10], y: [2…4], z: [0…1]) and a translation {-2, 2},
- * the resulting extent would be (x: [-2…8], y: [4…6], z: [0…1]).</div>
+ * <h4>Example</h4>
+ * For an extent (x: [0…10], y: [2…4], z: [0…1]) and a translation {-2, 2},
+ * the resulting extent would be (x: [-2…8], y: [4…6], z: [0…1]).
*
* <h4>Number of arguments</h4>
* The {@code translation} array length should be equal to the {@linkplain #getDimension() number of dimensions}.
diff --git a/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridGeometry.java b/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridGeometry.java
index 1f3f6207b8..6258fd011c 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridGeometry.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridGeometry.java
@@ -416,10 +416,10 @@ public class GridGeometry implements LenientComparable, Serializable {
* smallest values (closest to negative infinity).</li>
* </ul>
*
- * <div class="note"><b>API note:</b>
- * there is no default value for {@code anchor} because experience shows that images shifted by ½ pixel
+ * <h4>API note</h4>
+ * There is no default value for {@code anchor} because experience shows that images shifted by ½ pixel
* (with pixels that may be tens of kilometres large) is a recurrent problem. We want to encourage developers
- * to always think about wether their <cite>grid to CRS</cite> transform is mapping pixel corner or center.</div>
+ * to always think about wether their <cite>grid to CRS</cite> transform is mapping pixel corner or center.
*
* <div class="warning"><b>Upcoming API generalization:</b>
* the {@code extent} type of this method may be changed to {@code GridEnvelope} interface in a future Apache SIS version.
@@ -849,10 +849,10 @@ public class GridGeometry implements LenientComparable, Serializable {
* with inclusive lower coordinates and <strong>exclusive</strong> upper coordinates.</li>
* </ul>
*
- * <div class="note"><b>API note:</b>
- * there is no default value for {@code anchor} because experience shows that images shifted by ½ pixel
+ * <h4>API note</h4>
+ * There is no default value for {@code anchor} because experience shows that images shifted by ½ pixel
* (with pixels that may be tens of kilometres large) is a recurrent problem. We want to encourage developers
- * to always think about wether the desired <cite>grid to CRS</cite> transform shall map pixel corner or center.</div>
+ * to always think about wether the desired <cite>grid to CRS</cite> transform shall map pixel corner or center.
*
* @param anchor the cell part to map (center or corner).
* @return the conversion from grid coordinates to "real world" coordinates (never {@code null}).
@@ -1013,10 +1013,10 @@ public class GridGeometry implements LenientComparable, Serializable {
* This is computed from the {@linkplain #getEnvelope() envelope} if the coordinate reference system
* contains an horizontal component such as a geographic or projected CRS.
*
- * <div class="note"><b>API note:</b>
- * this method does not throw {@link IncompleteGridGeometryException} because the geographic extent
+ * <h4>API note</h4>
+ * This method does not throw {@link IncompleteGridGeometryException} because the geographic extent
* may be absent even with a complete grid geometry. Grid geometries are not required to have a
- * spatial component on Earth surface; a raster could be a vertical profile for example.</div>
+ * spatial component on Earth surface; a raster could be a vertical profile for example.
*
* @return the geographic bounding box in "real world" coordinates.
*/
diff --git a/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridRoundingMode.java b/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridRoundingMode.java
index 4816855682..53996d5e82 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridRoundingMode.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridRoundingMode.java
@@ -39,14 +39,14 @@ public enum GridRoundingMode {
* farthest from an integer value in order to keep unchanged the two values that are closer to integers.</li>
* </ol>
*
- * <div class="note"><b>Example:</b>
- * the [<var>low</var> … <var>high</var>] range may be slightly larger than desired in some rounding error situations.
+ * <h4>Example</h4>
+ * The [<var>low</var> … <var>high</var>] range may be slightly larger than desired in some rounding error situations.
* For example if <var>low</var> before rounding was 1.49999 and <var>high</var> before rounding was 2.50001, then the
* range after rounding will be [1…3] while the expected size is actually only 2 pixels. This {@code NEAREST} rounding
* mode detects those rounding issues by comparing the <var>size</var> before and after rounding. In this example, the
* size is 2.00002 pixels, which is closer to an integer value than the <var>low</var> and <var>high</var> values.
- * Consequently, this {@code NEAREST} mode will rather adjust <var>low</var> or <var>high</var> (depending which one is
- * farthest from integer values) in order to keep <var>size</var> at its closest integer value, which is 2.</div>
+ * Consequently, this {@code NEAREST} mode will rather adjust <var>low</var> or <var>high</var> (depending which
+ * one is farthest from integer values) in order to keep <var>size</var> at its closest integer value, which is 2.
*/
NEAREST,
diff --git a/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/PixelTranslation.java b/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/PixelTranslation.java
index 37738d40be..25c7447fb3 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/PixelTranslation.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/PixelTranslation.java
@@ -220,17 +220,17 @@ public final class PixelTranslation extends Static implements Serializable {
* This method concatenates −½, 0 or +½ translations on <em>all</em> dimensions before the given transform.
* If the two given conventions are the same, then this method returns the given transform unchanged.
*
- * <div class="note"><b>Example:</b>
- * if a given {@code gridToCRS} transform was mapping the <em>cell corner</em> to "real world" coordinates, then a call to
+ * <p>If the given {@code gridToCRS} is null, then this method ignores all other arguments and returns {@code null}.
+ * Otherwise {@code current} and {@code desired} arguments must be non-null.</p>
+ *
+ * <h4>Example</h4>
+ * If a given {@code gridToCRS} transform was mapping the <em>cell corner</em> to "real world" coordinates, then a call to
* <code>translate(gridToCRS, {@link PixelInCell#CELL_CORNER CELL_CORNER}, {@link PixelInCell#CELL_CENTER CELL_CENTER})</code>
* will return a new transform performing the following steps: first convert grid coordinates from <var>cell center</var>
* convention ({@code desired}) to <var>cell corner</var> convention ({@code current}), then concatenate the given
* {@code gridToCRS} transform which was designed for the <em>cell corner</em> convention.
* The above-cited <var>cell center</var> → <var>cell corner</var> conversion is done by translating the grid coordinates
- * by +½, because the grid coordinates (0,0) relative to cell center is (½,½) relative to cell corner.</div>
- *
- * If the given {@code gridToCRS} is null, then this method ignores all other arguments and returns {@code null}.
- * Otherwise {@code current} and {@code desired} arguments must be non-null.
+ * by +½, because the grid coordinates (0,0) relative to cell center is (½,½) relative to cell corner.
*
* @param gridToCRS a math transform from <cite>pixel</cite> coordinates to any CRS, or {@code null}.
* @param current the pixel orientation of the given {@code gridToCRS} transform.
@@ -270,14 +270,14 @@ public final class PixelTranslation extends Static implements Serializable {
* This method concatenates −½, 0 or +½ translations on <em>two</em> dimensions before the given transform.
* The given transform can have any number of input and output dimensions, but only two of them will be converted.
*
- * <div class="note"><b>Example:</b>
- * if a given {@code gridToCRS} transform was mapping the upper-left corner to "real world" coordinates, then a call to
+ * <p>If the given {@code gridToCRS} is null, then this method ignores all other arguments and returns {@code null}.
+ * Otherwise {@code current} and {@code desired} arguments must be non-null.</p>
+ *
+ * <h4>Example</h4>
+ * If a given {@code gridToCRS} transform was mapping the upper-left corner to "real world" coordinates, then a call to
* <code>translate(gridToCRS, {@link PixelOrientation#UPPER_LEFT UPPER_LEFT}, {@link PixelOrientation#CENTER CENTER}, 0, 1)</code>
* will return a new transform translating grid coordinates by +0.5 before to apply the given {@code gridToCRS} transform.
- * See example in above {@link #translate(MathTransform, PixelInCell, PixelInCell) translate} method for more details.</div>
- *
- * If the given {@code gridToCRS} is null, then this method ignores all other arguments and returns {@code null}.
- * Otherwise {@code current} and {@code desired} arguments must be non-null.
+ * See example in above {@link #translate(MathTransform, PixelInCell, PixelInCell) translate} method for more details.
*
* @param gridToCRS a math transform from <cite>pixel</cite> coordinates to any CRS, or {@code null}.
* @param current the pixel orientation of the given {@code gridToCRS} transform.
diff --git a/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/ResampledGridCoverage.java b/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/ResampledGridCoverage.java
index 997b357e3b..977db7019e 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/ResampledGridCoverage.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/ResampledGridCoverage.java
@@ -484,13 +484,13 @@ final class ResampledGridCoverage extends DerivedGridCoverage {
/**
* Computes a target grid extent by transforming the source grid extent.
*
- * <div class="note"><b>Note on rounding mode:</b>
- * calculation of source envelope should use {@link GridRoundingMode#ENCLOSING} for making sure that we include
+ * <h4>Note on rounding mode</h4>
+ * Calculation of source envelope should use {@link GridRoundingMode#ENCLOSING} for making sure that we include
* all needed data. On the opposite, calculation of target envelope should use {@link GridRoundingMode#CONTAINED}
* for making sure that we interpolate only values where data are available. However, such "fully contained" mode
* is often overly strict because a very small rounding error can cause the lost of an image row or column,
* while using extrapolations for those values produce no perceptible errors. Consequently, this method uses
- * {@link GridRoundingMode#NEAREST} as a compromise.</div>
+ * {@link GridRoundingMode#NEAREST} as a compromise.
*
* @param source the source grid extent to transform.
* @param cornerToCRS transform from source grid corners to target CRS.
diff --git a/core/sis-portrayal/src/main/java/org/apache/sis/portrayal/Canvas.java b/core/sis-portrayal/src/main/java/org/apache/sis/portrayal/Canvas.java
index 1c0eb58c8e..5826f0b8f1 100644
--- a/core/sis-portrayal/src/main/java/org/apache/sis/portrayal/Canvas.java
+++ b/core/sis-portrayal/src/main/java/org/apache/sis/portrayal/Canvas.java
@@ -449,16 +449,17 @@ public class Canvas extends Observable implements Localized {
* spherical coordinate systems. The coordinate system may have a wraparound axis for
* some "exotic" display devices (e.g. planetarium dome).
*
- * <div class="note"><b>Usage note:</b> invoking this method is rarely needed. It is sufficient
- * to said that a display CRS exists at least conceptually, and that we define a conversion from
- * the objective CRS to that display CRS. This method may be useful when the subclasses may be
- * something else than {@link PlanarCanvas}, in which case the caller may want more information
- * about the geometry of the display device.</div>
- *
* <p>Note that the {@link CRS#findOperation CRS.findOperation(…)} static method can generally
* not handle this display CRS. To apply coordinate operations on display coordinates,
* {@link #getObjectiveToDisplay()} transform must be inverted and used.</p>
*
+ * <h4>Usage note</h4>
+ * Invoking this method is rarely needed.
+ * It is sufficient to said that a display CRS exists at least conceptually,
+ * and that we define a conversion from the objective CRS to that display CRS.
+ * This method may be useful when the subclasses may be something else than {@link PlanarCanvas},
+ * in which case the caller may want more information about the geometry of the display device.
+ *
* @return the Coordinate Reference System of the display device.
*
* @see #getObjectiveCRS()
diff --git a/storage/sis-geotiff/src/main/java/org/apache/sis/internal/storage/inflater/CopyFromBytes.java b/storage/sis-geotiff/src/main/java/org/apache/sis/internal/storage/inflater/CopyFromBytes.java
index 833b2fa1d3..6b5a854019 100644
--- a/storage/sis-geotiff/src/main/java/org/apache/sis/internal/storage/inflater/CopyFromBytes.java
+++ b/storage/sis-geotiff/src/main/java/org/apache/sis/internal/storage/inflater/CopyFromBytes.java
@@ -62,11 +62,11 @@ abstract class CopyFromBytes extends Inflater {
* Number of pixels per primitive element.
* Always 1 except for multi-pixels packed images.
*
- * <div class="note"><b>Note:</b>
- * this is "pixels per element", not "samples per element", because the value of this field shall be 1
+ * <h4>Design note</h4>
+ * This is "pixels per element", not "samples per element", because the value of this field shall be 1
* in the {@link java.awt.image.SinglePixelPackedSampleModel} case (by contrast a "samples per element"
* would have a value greater than 1). But this field can nevertheless be understood as a "samples per
- * element" value where only one band is considered at a time.</div>
+ * element" value where only one band is considered at a time.
*/
private final int pixelsPerElement;
@@ -186,12 +186,12 @@ abstract class CopyFromBytes extends Inflater {
* Skips the number of chunks specified by the {@link #skipAfterChunks} array at the given index.
* This method tries to move by incrementing the buffer position.
*
- * <div class="note"><b>Design note:</b>
- * we do not use {@link ChannelDataInput#seek(long)} because the displacement is usually small.
+ * <h4>Design note</h4>
+ * We do not use {@link ChannelDataInput#seek(long)} because the displacement is usually small.
* Changing the buffer position is sufficient in the majority of cases. If not, then it should
* be okay to fill the buffer with next data (instead of doing a seek operation) because there
* is usually few remaining values to skip. Performance of this method is important, so we try
- * to avoid overhead.</div>
+ * to avoid overhead.
*
* @param skipIndex index in {@code skipAfterChunks} array.
* @return new {@code skipIndex} value.
diff --git a/storage/sis-geotiff/src/main/java/org/apache/sis/internal/storage/inflater/LZW.java b/storage/sis-geotiff/src/main/java/org/apache/sis/internal/storage/inflater/LZW.java
index dc397bf37b..465fa7323b 100644
--- a/storage/sis-geotiff/src/main/java/org/apache/sis/internal/storage/inflater/LZW.java
+++ b/storage/sis-geotiff/src/main/java/org/apache/sis/internal/storage/inflater/LZW.java
@@ -85,10 +85,10 @@ final class LZW extends CompressionChannel {
* The position is chosen for leaving {@value #MAX_CODE_SIZE} bits for storing the length before
* the offset value.
*
- * <div class="note"><b>Rational:</b>
- * even in the worst case scenario where the same byte is always appended to the sequence,
+ * <h4>Rational</h4>
+ * Even in the worst case scenario where the same byte is always appended to the sequence,
* the maximal length cannot exceeded the dictionary size because a {@link #CLEAR_CODE}
- * will be emitted when the dictionary is full.</div>
+ * will be emitted when the dictionary is full.
*/
private static final int LOWEST_OFFSET_BIT = MAX_CODE_SIZE;
@@ -104,10 +104,10 @@ final class LZW extends CompressionChannel {
* It makes possible to use the extra size for growing a string up to that amount of bytes
* without copying it.
*
- * <div class="note"><b>Note:</b>
- * doing allocations only by blocks of 2² = 4 bytes may seem a waste of memory, but actually
+ * <h4>Performance note</h4>
+ * Doing allocations only by blocks of 2² = 4 bytes may seem a waste of memory, but actually
* it reduces memory usage a lot (almost a factor 4) because of the copies avoided.
- * We tried with alignment values 1, 2, 3 and found that 2 seems optimal.</div>
+ * We tried with alignment values 1, 2, 3 and found that 2 seems optimal.
*/
private static final int STRING_ALIGNMENT = 2;
diff --git a/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/GeoTiffStore.java b/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/GeoTiffStore.java
index 218f2bb4f1..4858494bfa 100644
--- a/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/GeoTiffStore.java
+++ b/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/GeoTiffStore.java
@@ -107,8 +107,9 @@ public class GeoTiffStore extends DataStore implements Aggregate {
* Defined as a namespace for use as the scope of children resources (the images).
* This is created when first needed.
*
- * <div class="note"><b>Design note:</b> we do not create this field in the constructor because
- * its creation invokes the user-overrideable {@link #customize(int, GenericName)} method.</div>
+ * <h4>Design note</h4>
+ * We do not create this field in the constructor because its creation invokes
+ * the user-overrideable {@link #customize(int, GenericName)} method.
*
* @see #namespace()
*/
@@ -169,16 +170,15 @@ public class GeoTiffStore extends DataStore implements Aggregate {
/**
* Creates a new GeoTIFF store as a component of a larger data store.
+ * If the {@code hidden} parameter is {@code true}, some metadata that would normally be
+ * provided in this {@code GeoTiffStore} will be provided by individual components instead.
*
- * <div class="note"><b>Example:</b>
+ * <h4>Example</h4>
* A Landsat data set is a collection of files in a directory or ZIP file,
* which includes more than 10 GeoTIFF files (one image per band or product for a scene).
* {@link org.apache.sis.storage.landsat.LandsatStore} is a data store opening the Landsat
* metadata file as the main file, then opening each band/product using a GeoTIFF data store.
- * Those bands/products are components of the Landsat data store.</div>
- *
- * If the {@code hidden} parameter is {@code true}, some metadata that would normally be provided
- * in this {@code GeoTiffStore} will be provided by individual components instead.
+ * Those bands/products are components of the Landsat data store.
*
* @param parent the parent that contains this new GeoTIFF store component, or {@code null} if none.
* @param provider the factory that created this {@code DataStore} instance, or {@code null} if unspecified.
diff --git a/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/ImageMetadataBuilder.java b/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/ImageMetadataBuilder.java
index 4e697a90e0..5ec77cc3c6 100644
--- a/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/ImageMetadataBuilder.java
+++ b/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/ImageMetadataBuilder.java
@@ -35,10 +35,10 @@ import static javax.imageio.plugins.tiff.BaselineTIFFTagSet.*;
* Fields in the class are used only for information purposes; they do not
* have incidence on the way Apache SIS will handle the GeoTIFF image.
*
- * <div class="note"><b>Note:</b>
- * if those fields become useful to {@link ImageFileDirectory} in a future version,
+ * <h4>API note</h4>
+ * If those fields become useful to {@link ImageFileDirectory} in a future version,
* we can move them into that class. Otherwise keeping those fields here allow to
- * discard them (which save a little bit of space) when no longer needed.</div>
+ * discard them (which save a little bit of space) when no longer needed.
*
* @author Martin Desruisseaux (Geomatys)
* @version 1.4
diff --git a/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/Convention.java b/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/Convention.java
index e3cf89b6e3..72cdc7cd69 100644
--- a/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/Convention.java
+++ b/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/Convention.java
@@ -293,8 +293,10 @@ public class Convention {
* not the same than the dimensions of the localization grid. In such case, the names returned by this method
* are used for mapping the raster dimensions to the localization grid dimensions.
*
- * <div class="note"><b>Example:</b>
- * consider the following netCDF file (simplified):
+ * <p>This feature is an extension to CF-conventions.</p>
+ *
+ * <h4>Example</h4>
+ * Consider the following netCDF file (simplified):
*
* <pre class="text">
* dimensions:
@@ -324,9 +326,7 @@ public class Convention {
* <cite>"Name of dimension 1"</cite> respectively, then we can associate the same dimension <strong>names</strong>
* to all those variables: namely {@code "Line grids"} and {@code "Pixel grids"}. Using those names, we deduce that
* the {@code (data_y, data_x)} dimensions in the {@code SST} variable are mapped to the {@code (grid_y, grid_x)}
- * dimensions in the localization grid.</div>
- *
- * This feature is an extension to CF-conventions.
+ * dimensions in the localization grid.
*
* @param dataOrAxis the variable for which to get the attribute-specified name of the dimension.
* @param index zero-based index of the dimension for which to get the name.
@@ -381,12 +381,12 @@ public class Convention {
* For each string in the set, {@link Decoder#findNode(String)} is invoked and the return value
* (if non-null) is given to {@link #projection(Node)} until a non-null map is obtained.
*
- * <div class="note"><b>API note:</b>
- * this method name is singular because even if a set is returned, in the end only one value is used.</div>
- *
- * The default implementation returns the value of {@link CF#GRID_MAPPING} attribute, or an empty set
+ * <p>The default implementation returns the value of {@link CF#GRID_MAPPING} attribute, or an empty set
* if the given variable does not contain that attribute. Subclasses may override for example if grid
- * mapping information are hard-coded in a particular node for a specific product.
+ * mapping information are hard-coded in a particular node for a specific product.</p>
+ *
+ * <h4>API note</h4>
+ * This method name is singular because even if a set is returned, in the end only one value is used.
*
* @param data the variable for which to get the grid mapping node.
* @return name of nodes that may contain the grid mapping, or an empty set if none.
@@ -545,13 +545,13 @@ public class Convention {
* pseudo-projection, the "projected" CRS is actually a {@link GeographicCRS} instance.
* The returned transform, if non-null, shall map cell corners.
*
- * <div class="note"><b>API notes:</b>
+ * <p>The default implementation returns {@code null}.</p>
+ *
+ * <h4>API notes</h4>
* <ul>
* <li>We do not provide a {@link ProjectedCRS} argument because of the {@code "latitude_longitude"} special case.</li>
* <li>Base CRS axis order is (latitude, longitude) for increasing the chances to have a CRS identified by EPSG.</li>
- * </ul></div>
- *
- * The default implementation returns {@code null}.
+ * </ul>
*
* @param node the same node than the one given to {@link #projection(Node)}.
* @param baseToCRS conversion from (latitude, longitude) in degrees to the projected CRS.
@@ -567,8 +567,8 @@ public class Convention {
* netCDF file. The default implementation returns <cite>"Unknown datum based upon the GRS 1980 ellipsoid"</cite>.
* Note that the GRS 1980 ellipsoid is close to WGS 84 ellipsoid.
*
- * <div class="note"><b>Maintenance note:</b>
- * if this default is changed, search also for "GRS 1980" strings in {@link CRSBuilder} class.</div>
+ * <h4>Maintenance note</h4>
+ * If this default is changed, search also for "GRS 1980" strings in {@link CRSBuilder} class.
*
* @param spherical whether to restrict the ellipsoid to a sphere.
* @return information about geodetic objects to use if no explicit information is found in the file.
diff --git a/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/Decoder.java b/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/Decoder.java
index a07c219491..4eced70bd9 100644
--- a/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/Decoder.java
+++ b/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/Decoder.java
@@ -137,10 +137,10 @@ public abstract class Decoder extends ReferencingFactoryContainer {
* grids only between variables using the exact same list of dimensions.
* This {@code localizationGrids} cache allows to cover other cases.
*
- * <div class="note"><b>Example:</b>
- * a netCDF file may have a variable with (<var>longitude</var>, <var>latitude</var>) dimensions and another
+ * <h4>Example</h4>
+ * A netCDF file may have a variable with (<var>longitude</var>, <var>latitude</var>) dimensions and another
* variable with (<var>longitude</var>, <var>latitude</var>, <var>depth</var>) dimensions, with both variables
- * using the same localization grid for the (<var>longitude</var>, <var>latitude</var>) part.</div>
+ * using the same localization grid for the (<var>longitude</var>, <var>latitude</var>) part.
*
* @see GridCacheKey#cached(Decoder)
*/
diff --git a/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/GridMapping.java b/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/GridMapping.java
index e8d2634f4e..2e4beb2b7d 100644
--- a/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/GridMapping.java
+++ b/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/GridMapping.java
@@ -96,8 +96,9 @@ final class GridMapping {
* This CRS may have been constructed from Well Known Text or EPSG codes declared in {@code "spatial_ref"},
* {@code "ESRI_pe_string"} or {@code "EPSG_code"} attributes.
*
- * <div class="note"><b>Note:</b> this come from different information than the one used by {@link CRSBuilder},
- * which creates CRS by inspection of coordinate system axes.</div>
+ * <h4>Usage note</h4>
+ * This come from different information than the one used by {@link CRSBuilder},
+ * which creates CRS by inspection of coordinate system axes.
*/
final CoordinateReferenceSystem crs;
diff --git a/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/Linearizer.java b/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/Linearizer.java
index 14a7dbfae8..62ab908285 100644
--- a/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/Linearizer.java
+++ b/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/Linearizer.java
@@ -98,10 +98,10 @@ public final class Linearizer {
* <li>Otherwise the point is in the middle of the image.</li>
* </ul>
*
- * <div class="note"><b>Rational:</b>
- * the intent is to increase the chances to get the Polar Stereographic projection for images close to pole.
+ * <h4>Rational</h4>
+ * The intent is to increase the chances to get the Polar Stereographic projection for images close to pole.
* This is necessary because longitude values may become far from central meridian at latitudes such as 88°,
- * causing the Transverse Mercator projection to produce NaN numbers.</div>
+ * causing the Transverse Mercator projection to produce NaN numbers.
*/
UNIVERSAL;
diff --git a/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/Variable.java b/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/Variable.java
index c02d4b896a..6d9055cd91 100644
--- a/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/Variable.java
+++ b/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/Variable.java
@@ -478,10 +478,10 @@ public abstract class Variable extends Node {
/**
* Returns {@code true} if this variable should be considered as a list of strings.
*
- * <div class="note"><b>Maintenance note:</b>
- * the implementation of this method is inlined in some places, when the code already
+ * <h4>Maintenance note</h4>
+ * The implementation of this method is inlined in some places, when the code already
* has the {@link DataType} value at hand. If this implementation is modified, search
- * for {@link #STRING_DIMENSION} usages.</div>
+ * for {@link #STRING_DIMENSION} usages.
*
* @see #STRING_DIMENSION
*/
@@ -819,19 +819,19 @@ public abstract class Variable extends Node {
* In ISO 19123 terminology, {@link Dimension#length()} on each dimension give the upper corner
* of the grid envelope plus one. The lower corner is always (0, 0, …, 0).
*
- * <div class="note"><b>Usage:</b>
- * this information is used for completing ISO 19115 metadata, providing a default implementation of
- * {@link Convention#roleOf(Variable)} method or for building string representation of this variable
- * among others. Those tasks are mostly for information purpose, except if {@code Variable} subclass
- * failed to create a grid and we must rely on {@link #findGrid(GridAdjustment)} default implementation.
- * For actual georeferencing, use {@link #getGridGeometry()} instead.</div>
- *
- * If {@link #findGrid(GridAdjustment)} returns a non-null value, then the list returned by this method should
+ * <p>If {@link #findGrid(GridAdjustment)} returns a non-null value, then the list returned by this method should
* contain all dimensions returned by {@link Grid#getDimensions()}. It may contain more dimension however.
* Those additional dimensions can be considered as bands. Furthermore, the dimensions of the {@code Grid}
* may have a different {@linkplain Dimension#length() length} than the dimensions returned by this method.
* If such length mismatch exists, then {@link #getGridGeometry()} will concatenate a scale factor to
- * the "grid to CRS" transform.
+ * the "grid to CRS" transform.</p>
+ *
+ * <h4>Usage</h4>
+ * This information is used for completing ISO 19115 metadata, providing a default implementation of
+ * {@link Convention#roleOf(Variable)} method or for building string representation of this variable
+ * among others. Those tasks are mostly for information purpose, except if {@code Variable} subclass
+ * failed to create a grid and we must rely on {@link #findGrid(GridAdjustment)} default implementation.
+ * For actual georeferencing, use {@link #getGridGeometry()} instead.
*
* @return all dimensions of this variable, in netCDF order (reverse of "natural" order).
*
diff --git a/storage/sis-netcdf/src/main/java/org/apache/sis/storage/netcdf/AttributeNames.java b/storage/sis-netcdf/src/main/java/org/apache/sis/storage/netcdf/AttributeNames.java
index b84fc1cb77..34a9e1dfad 100644
--- a/storage/sis-netcdf/src/main/java/org/apache/sis/storage/netcdf/AttributeNames.java
+++ b/storage/sis-netcdf/src/main/java/org/apache/sis/storage/netcdf/AttributeNames.java
@@ -188,12 +188,12 @@ public class AttributeNames {
* <tr><td>{@link AttributeNames#INSTRUMENT INSTRUMENT}</td> <td>{@code "instrument"}</td> <td>{@code "instrument_vocabulary"}</td></tr>
* </table>
*
- * <div class="note"><b>Note:</b>
+ * <h2>Departure from conventions</h2>
* The member names in this class are upper-cases because they should be considered as constants.
* For example, {@code AttributeNames.KEYWORD.TEXT} maps exactly to the {@code "keywords"} string
* and nothing else. A lower-case {@code text} member name could be misleading since it would
* suggest that the field contains the actual text value rather than the key by which the value
- * is identified in a netCDF file.</div>
+ * is identified in a netCDF file.
*
* @author Martin Desruisseaux (Geomatys)
* @version 0.8
@@ -352,11 +352,11 @@ public class AttributeNames {
* {@link Metadata#getResourceLineages() resourceLineage} /
* {@link Lineage#getStatement() statement}</li></ul>
*
- * <div class="note"><b>Note:</b>
- * located in "{@link Metadata#getDataQualityInfo() dataQualityInfo} /
+ * <h4>Departure from convention</h4>
+ * Located in "{@link Metadata#getDataQualityInfo() dataQualityInfo} /
* {@link org.opengis.metadata.quality.DataQuality#getLineage() lineage}" instead of "{@code resourceLineage}"
* in {@code UnidataDD2MI.xsl} file (retrieved in 2017).
- * See <a href="https://issues.apache.org/jira/browse/SIS-361">SIS-361</a>.</div>
+ * See <a href="https://issues.apache.org/jira/browse/SIS-361">SIS-361</a>.
*
* @see <a href="http://wiki.esipfed.org/index.php/Attribute_Convention_for_Data_Discovery#history">ESIP reference</a>
*/
@@ -370,11 +370,11 @@ public class AttributeNames {
* {@link Lineage#getSources() source} /
* {@link Source#getDescription() description}</li></ul>
*
- * <div class="note"><b>Note:</b>
- * located in "{@link Metadata#getDataQualityInfo() dataQualityInfo} /
+ * <h4>Departure from convention</h4>
+ * Located in "{@link Metadata#getDataQualityInfo() dataQualityInfo} /
* {@link org.opengis.metadata.quality.DataQuality#getLineage() lineage}" instead of "{@code resourceLineage}"
* in {@code UnidataDD2MI.xsl} file (retrieved in 2017).
- * See <a href="https://issues.apache.org/jira/browse/SIS-361">SIS-361</a>.</div>
+ * See <a href="https://issues.apache.org/jira/browse/SIS-361">SIS-361</a>.
*
* @see <a href="http://wiki.esipfed.org/index.php/Attribute_Convention_for_Data_Discovery#source">ESIP reference</a>
*
@@ -582,12 +582,12 @@ public class AttributeNames {
* <td> {@link Role#PUBLISHER}</td>
* </tr></table>
*
- * <div class="note"><b>Note:</b>
+ * <h2>Departure from conventions</h2>
* The member names in this class are upper-cases because they should be considered as constants.
* For example, {@code AttributeNames.CREATOR.EMAIL} maps exactly to the {@code "creator_email"} string
* and nothing else. A lower-case {@code email} member name could be misleading since it would suggest
* that the field contains the actual name value rather than the key by which the value is identified
- * in a netCDF file.</div>
+ * in a netCDF file.
*
* @author Martin Desruisseaux (Geomatys)
* @version 0.8
@@ -912,12 +912,12 @@ public class AttributeNames {
* <td >{@link DimensionNameType#TIME}</td>
* </tr></table>
*
- * <div class="note"><b>Note:</b>
+ * <h2>Departure from conventions</h2>
* The member names in this class are upper-cases because they should be considered as constants.
* For example, {@code AttributeNames.LATITUDE.MINIMUM} maps exactly to the {@code "geospatial_lat_min"}
* string and nothing else. A lower-case {@code minimum} member name could be misleading since it would
* suggest that the field contains the actual latitude value rather than the key by which the value is
- * identified in a netCDF file.</div>
+ * identified in a netCDF file.
*
* @author Martin Desruisseaux (Geomatys)
* @version 0.3
diff --git a/storage/sis-netcdf/src/main/java/org/apache/sis/storage/netcdf/MetadataReader.java b/storage/sis-netcdf/src/main/java/org/apache/sis/storage/netcdf/MetadataReader.java
index 690a381421..a87e24607b 100644
--- a/storage/sis-netcdf/src/main/java/org/apache/sis/storage/netcdf/MetadataReader.java
+++ b/storage/sis-netcdf/src/main/java/org/apache/sis/storage/netcdf/MetadataReader.java
@@ -137,9 +137,8 @@ final class MetadataReader extends MetadataBuilder {
/**
* The character to use for quoting strings in a comma-separated list. Quoted strings may contain comma.
*
- * <div class="note"><b>Example:</b>
+ * <h4>Example</h4>
* John Doe, Jane Lee, "L J Smith, Jr."
- * </div>
*/
private static final char QUOTE = '"';
diff --git a/storage/sis-sqlstore/src/main/java/org/apache/sis/internal/sql/feature/TableAnalyzer.java b/storage/sis-sqlstore/src/main/java/org/apache/sis/internal/sql/feature/TableAnalyzer.java
index 6cea2807b3..6790559af6 100644
--- a/storage/sis-sqlstore/src/main/java/org/apache/sis/internal/sql/feature/TableAnalyzer.java
+++ b/storage/sis-sqlstore/src/main/java/org/apache/sis/internal/sql/feature/TableAnalyzer.java
@@ -85,9 +85,10 @@ final class TableAnalyzer extends FeatureAnalyzer {
* method arguments with a name ending by {@code "Pattern"}. Note that not all arguments are pattern; please
* checks carefully {@link DatabaseMetaData} javadoc for each method.
*
- * <div class="note"><b>Example:</b> if a method expects an argument named {@code tableNamePattern},
+ * <h4>Example</h4>
+ * If a method expects an argument named {@code tableNamePattern},
* then that argument value should be escaped. But if the argument name is only {@code tableName},
- * then the value should not be escaped.</div>
+ * then the value should not be escaped.
*/
private String escape(final String pattern) {
return SQLUtilities.escape(pattern, analyzer.escape);
diff --git a/storage/sis-sqlstore/src/main/java/org/apache/sis/internal/stream/DeferredStream.java b/storage/sis-sqlstore/src/main/java/org/apache/sis/internal/stream/DeferredStream.java
index fe05095cbb..e805c5e731 100644
--- a/storage/sis-sqlstore/src/main/java/org/apache/sis/internal/stream/DeferredStream.java
+++ b/storage/sis-sqlstore/src/main/java/org/apache/sis/internal/stream/DeferredStream.java
@@ -29,14 +29,14 @@ import org.apache.sis.util.collection.BackingStoreException;
* The source stream is implemented by a {@link Spliterator} created by {@link #createSourceIterator()}.
* The call to that method is deferred until a terminal operation is invoked.
*
- * <div class="note"><b>Example:</b>
- * if a stream can count its elements efficiently (e.g. using a {@code COUNT} query on SQL databases),
+ * <h2>Example</h2>
+ * If a stream can count its elements efficiently (e.g. using a {@code COUNT} query on SQL databases),
* a {@code DeferredStream} subclass can override the {@link #count()} method for running the count query
* instead of counting elements of the stream manually.
*
* <p>Deferred streams are also useful with intermediate operations. For example, a subclass can override
* the {@link #skip(long)} and {@link #limit(long)} methods for modifying the SQL query with addition of
- * {@code OFFSET} and {@code FETCH NEXT} clauses before the worker stream is created.</p></div>
+ * {@code OFFSET} and {@code FETCH NEXT} clauses before the worker stream is created.</p>
*
* @author Alexis Manin (Geomatys)
* @author Martin Desruisseaux (Geomatys)
diff --git a/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/MetadataBuilder.java b/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/MetadataBuilder.java
index 8e2ca357be..d9e5ec14a3 100644
--- a/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/MetadataBuilder.java
+++ b/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/MetadataBuilder.java
@@ -2498,16 +2498,14 @@ parse: for (int i = 0; i < length;) {
/**
* Adds a description of a particular sample value.
+ * ISO 19115 range elements are approximately equivalent to
+ * {@code org.apache.sis.coverage.Category} in the {@code sis-coverage} module.
* Storage location is:
*
* <ul>
* <li>{@code metadata/contentInfo/rangeElementDescription}</li>
* </ul>
*
- * <div class="note"><b>Note:</b>
- * ISO 19115 range elements are approximately equivalent to
- * {@code org.apache.sis.coverage.Category} in the {@code sis-coverage} module.</div>
- *
* @param name designation associated with a set of range elements, or {@code null} if none.
* @param definition description of a set of specific range elements, or {@code null} if none.
*/
@@ -2928,9 +2926,9 @@ parse: for (int i = 0; i < length;) {
* <li>{@code metadata/resourceLineage/source/scope/levelDescription/features}</li>
* </ul>
*
- * <div class="note"><b>Example:</b>
- * if a Landsat image uses the "GTOPO30" digital elevation model, then it can declare the source
- * with "GTOPO30" description, {@link ScopeCode#MODEL} and feature "Digital Elevation Model".</div>
+ * <h4>Example</h4>
+ * If a Landsat image uses the "GTOPO30" digital elevation model, then it can declare the source
+ * with "GTOPO30" description, {@link ScopeCode#MODEL} and feature "Digital Elevation Model".
*
* @param description a detailed description of the level of the source data, or {@code null} if none.
* @param level hierarchical level of the source (e.g. model), or {@code null} if unspecified.
@@ -2969,10 +2967,10 @@ parse: for (int i = 0; i < length;) {
* <li>{@code metadata/resourceLineage/source/sourceSpatialResolution}</li>
* </ul>
*
- * <div class="note"><b>Example:</b>
- * if a {@code FeatureSet} is the aggregation of two other {@code FeatureSet} resources,
+ * <h4>Example</h4>
+ * If a {@code FeatureSet} is the aggregation of two other {@code FeatureSet} resources,
* then this method can be invoked twice with the metadata of each source {@code FeatureSet}.
- * If the aggregated data are features, then {@code level} should be {@link ScopeCode#FEATURE}.</div>
+ * If the aggregated data are features, then {@code level} should be {@link ScopeCode#FEATURE}.
*
* @param metadata the metadata of the source, or {@code null} if none.
* @param level hierarchical level of the source (e.g. feature). Should not be null.
diff --git a/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/ResourceOnFileSystem.java b/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/ResourceOnFileSystem.java
index 419ab377ec..8b0e699d45 100644
--- a/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/ResourceOnFileSystem.java
+++ b/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/ResourceOnFileSystem.java
@@ -47,8 +47,13 @@ public interface ResourceOnFileSystem extends Resource {
* There is no guarantee that all files are in the same directory or that each file is used exclusively
* by this data source (e.g. no guarantee that modifying or deleting a file will not impact other resources).
*
- * <div class="note"><b>Example:</b>
- * a resources created for a GRIB file may use the following component files:
+ * <p>This method should return paths to files only.
+ * It should not return paths to directories.
+ * The caller should verify that all paths are regular files;
+ * non-existent paths should be omitted.</p>
+ *
+ * <h4>Example</h4>
+ * A resources created for a GRIB file may use the following component files:
* <ul>
* <li>The main GRIB file.</li>
* <li>If managed by the UCAR library, two auxiliary files next to the main GRIB file:
@@ -57,11 +62,6 @@ public interface ResourceOnFileSystem extends Resource {
* <li>Eventually a GRIB table file. This table may be located in a path unrelated to
* to the path of the main file and may be shared by many resources.</li>
* </ul>
- * </div>
- *
- * This method should return paths to files only. It should not return paths to directories.
- * The caller should verify that all paths are regular files;
- * non-existent paths should be omitted.
*
* @return files used by this resource. Should never be {@code null}.
* @throws DataStoreException if an error on the file system prevent the creation of the list.
diff --git a/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/StoreMetadata.java b/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/StoreMetadata.java
index aa01a0c70b..9d4688bbaa 100644
--- a/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/StoreMetadata.java
+++ b/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/StoreMetadata.java
@@ -63,20 +63,20 @@ public @interface StoreMetadata {
* The "main" file is the file that users specify when opening the dataset.
* The returned array should <em>not</em> include the suffixes of auxiliary files.
*
- * <div class="note"><b>Example:</b>
- * GeoTIFF data are contained in files with the {@code ".tif"} or {@code ".tiff"} suffix,
- * sometimes accompanied by auxiliary files with {@code ".prj"} and {@code ".tfw"} suffixes.
- * This method should return an array containing only {@code "tif"} or {@code "tiff"} strings,
- * without the leading dot.</div>
- *
- * The suffixes are case-insensitive (no need to declare both lower-case and upper-case variants)
- * and shall not contain the leading dot. The first element in the list is the preferred suffix
- * to use for new files.
+ * <p>The suffixes are case-insensitive (no need to declare both lower-case and upper-case variants)
+ * and shall not contain the leading dot.
+ * The first element in the list is the preferred suffix to use for new files.</p>
*
* <p>The same suffixes may be used by many different formats. For example, the {@code ".xml"} suffix
* is used for files in many mutually incompatible formats. Consequently, the file suffixes shall not
* be used as format identifiers.</p>
*
+ * <h4>Example</h4>
+ * GeoTIFF data are contained in files with the {@code ".tif"} or {@code ".tiff"} suffix,
+ * sometimes accompanied by auxiliary files with {@code ".prj"} and {@code ".tfw"} suffixes.
+ * This method should return an array containing only {@code "tif"} or {@code "tiff"} strings,
+ * without the leading dot.
+ *
* @return the filename suffixes, case insensitive. Never null but can be empty.
*/
String[] fileSuffixes() default {};
diff --git a/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/TiledGridCoverage.java b/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/TiledGridCoverage.java
index 9416d47465..5ce747eafb 100644
--- a/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/TiledGridCoverage.java
+++ b/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/TiledGridCoverage.java
@@ -334,12 +334,12 @@ public abstract class TiledGridCoverage extends GridCoverage {
* {@link MultiPixelPackedSampleModel} which packs many pixels in a single bank element.
* This value is a power of 2 according {@code MultiPixelPackedSampleModel} specification.
*
- * <div class="note"><b>Note:</b>
- * this is "pixels per element", not "samples per element". It makes a difference in the
+ * <h4>Design note</h4>
+ * This is "pixels per element", not "samples per element". It makes a difference in the
* {@link java.awt.image.SinglePixelPackedSampleModel} case, for which this method returns 1
* (by contrast a "samples per element" would give a value greater than 1).
* But this value can nevertheless be understood as a "samples per element" value
- * where only one band is considered at a time.</div>
+ * where only one band is considered at a time.
*
* @return number of pixels in a single bank element. Usually 1.
*
diff --git a/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/io/Markable.java b/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/io/Markable.java
index 01b1abaa15..c1170e8aaa 100644
--- a/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/io/Markable.java
+++ b/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/io/Markable.java
@@ -23,16 +23,14 @@ import java.io.IOException;
* Stream reader or writer capable to mark its current position and reset to that position later.
* The stream shall support nested marks.
*
- * <div class="note"><b>Use case:</b>
- * this interface can be used when we need to move to a previously marked position, but we do not know how many nested
+ * <h2>Use case</h2>
+ * This interface can be used when we need to move to a previously marked position, but we do not know how many nested
* {@code mark()} method calls may have been performed (typically because the stream has been used by arbitrary code).
* We can compare {@link #getStreamPosition()} value after {@link #reset()} method calls with the expected position.
- * </div>
*
- * <div class="note"><b>Design note:</b>
- * an alternative could be to support the {@code seek(long)} method. But using marks instead allows the stream
+ * <h2>Design note</h2>
+ * An alternative could be to support the {@code seek(long)} method. But using marks instead allows the stream
* to invalidate the marks if needed (for example when {@link ChannelData#setStreamPosition(long)} is invoked).
- * </div>
*
* @author Martin Desruisseaux (Geomatys)
* @version 1.2
diff --git a/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/io/Region.java b/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/io/Region.java
index a8723adbdc..05785987b8 100644
--- a/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/io/Region.java
+++ b/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/io/Region.java
@@ -137,15 +137,15 @@ public final class Region {
* The strides are computed automatically at construction time, but this method can be invoked in some rare cases
* where those values need to be modified (example: for adapting to the layout of netCDF "unlimited" variable).
*
- * <div class="note"><b>Example:</b>
- * in a cube of dimension 10×10×10, the number of values between indices (0,0,1) and (0,0,2) is 100.
+ * <p>This method is the only one in this {@link Region} class to use a count of bytes
+ * instead of a count of sample values.</p>
+ *
+ * <h4>Example</h4>
+ * In a cube of dimension 10×10×10, the number of values between indices (0,0,1) and (0,0,2) is 100.
* If the values type is {@code float}, invoking {@code setAdditionalByteOffset(1, 12)} will increase
* this value to 103 (computed as 100 + 12/{@value Float#BYTES}).
* {@link HyperRectangleReader} will still read only the requested 100 values,
- * but will skip 3 more values when moving from plane 1 to plane 2.</div>
- *
- * This method is the only one in this {@link Region} class to use a count of bytes instead of a count
- * of sample values.
+ * but will skip 3 more values when moving from plane 1 to plane 2.
*
* @param dimension dimension for which to increase the stride.
* @param skip additional number of <strong>bytes</strong> to skip after we finished reading
diff --git a/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/io/RewindableLineReader.java b/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/io/RewindableLineReader.java
index d9d1d633ea..d916c07cf1 100644
--- a/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/io/RewindableLineReader.java
+++ b/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/io/RewindableLineReader.java
@@ -52,8 +52,9 @@ public final class RewindableLineReader extends LineNumberReader {
/**
* The input stream, or {@code null} if this reader cannot rewind anymore.
*
- * <div class="note"><b>Note:</b> we do not use the more generic {@link java.io.InputStream} class
- * because this whole {@code RewindableLineReader} class is useless if we cannot seek in this stream.</div>
+ * <h4>Design note</h4>
+ * We do not use the more generic {@link java.io.InputStream} class
+ * because this whole {@code RewindableLineReader} class is useless if we cannot seek in this stream.
*/
private InputStreamAdapter input;
diff --git a/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/wkt/Store.java b/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/wkt/Store.java
index 9baaaf1774..31a77fef26 100644
--- a/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/wkt/Store.java
+++ b/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/wkt/Store.java
@@ -42,9 +42,9 @@ import org.apache.sis.util.CharSequences;
/**
* A data store which creates data objects from a WKT definition.
*
- * <div class="note"><b>Note:</b>
+ * <h4>Design note</h4>
* this class differs from {@link org.apache.sis.internal.storage.PRJDataStore} in that
- * the file containing WKT definition is the main file, not an auxiliary file.</div>
+ * the file containing WKT definition is the main file, not an auxiliary file.
*
* @author Martin Desruisseaux (Geomatys)
* @version 1.4
diff --git a/storage/sis-storage/src/main/java/org/apache/sis/storage/DataSet.java b/storage/sis-storage/src/main/java/org/apache/sis/storage/DataSet.java
index 8e7b76e84a..231f6ac17f 100644
--- a/storage/sis-storage/src/main/java/org/apache/sis/storage/DataSet.java
+++ b/storage/sis-storage/src/main/java/org/apache/sis/storage/DataSet.java
@@ -27,11 +27,11 @@ import org.opengis.geometry.Envelope;
* grid geometries or sample dimensions, depending on the {@code DataSet} subtype.
* The actual values are provided by methods defined in {@code DataSet} subtypes.
*
- * <div class="note"><b>Example:</b>
- * the features contained in a {@code DataSet} could be all bridges in a city. A {@code DataSet} can be associated to
+ * <h2>Example</h2>
+ * The features contained in a {@code DataSet} could be all bridges in a city. A {@code DataSet} can be associated to
* one {@code FeatureType} which specifies that all bridges shall have {@code "construction date"} and {@code "height"}
* attributes, and an arbitrary number of {@code Feature} instances which contains the actual values for all bridges in
- * the dataset.</div>
+ * the dataset.
*
* <h2>Metadata</h2>
* Datasets should have {@link #getMetadata() metadata} /
diff --git a/storage/sis-storage/src/main/java/org/apache/sis/storage/DataStoreContentException.java b/storage/sis-storage/src/main/java/org/apache/sis/storage/DataStoreContentException.java
index ef52d8b6f2..0411bd62c3 100644
--- a/storage/sis-storage/src/main/java/org/apache/sis/storage/DataStoreContentException.java
+++ b/storage/sis-storage/src/main/java/org/apache/sis/storage/DataStoreContentException.java
@@ -24,11 +24,11 @@ import java.util.Locale;
* It may be for example a logical inconsistency, or a reference not found,
* or an unsupported file format version, <i>etc.</i>
*
- * <div class="note"><b>Note:</b>
+ * <h2>Usage note</h2>
* exceptions that are caused by {@link java.io.IOException} or {@link java.sql.SQLException}
* should generally be wrapped by another type of {@link DataStoreException}, unless the data
* store can determine that the error was caused by a problem with the stream content rather
- * than some I/O problems.</div>
+ * than some I/O problems.
*
* @author Martin Desruisseaux (Geomatys)
* @version 0.8
diff --git a/storage/sis-storage/src/main/java/org/apache/sis/storage/DataStoreProvider.java b/storage/sis-storage/src/main/java/org/apache/sis/storage/DataStoreProvider.java
index 56ad65df44..05e485bafc 100644
--- a/storage/sis-storage/src/main/java/org/apache/sis/storage/DataStoreProvider.java
+++ b/storage/sis-storage/src/main/java/org/apache/sis/storage/DataStoreProvider.java
@@ -99,15 +99,15 @@ public abstract class DataStoreProvider {
* set to {@code true}, then the {@code open(…)} method may create files, a directory or a database at the given
* location.</p>
*
- * <div class="note"><b>Relationship with standard file open options</b>
- * <p>For data stores on file systems, a <code>{@value} = true</code> parameter value is equivalent to opening a file
+ * <h4>Relationship with standard file open options</h4>
+ * For data stores on file systems, a <code>{@value} = true</code> parameter value is equivalent to opening a file
* with {@link java.nio.file.StandardOpenOption#CREATE} and {@link java.nio.file.StandardOpenOption#APPEND APPEND}.
* The other file standard options like {@link java.nio.file.StandardOpenOption#CREATE_NEW CREATE_NEW} and
* {@link java.nio.file.StandardOpenOption#TRUNCATE_EXISTING TRUNCATE_EXISTING} should not be accessible through
* this {@value} parameter. The reason is that {@link ParameterValueGroup} may be used for storing parameters
* permanently (for example in a configuration file or in a database) for reopening the same {@link DataStore}
* many times. File options designed for being used only once like {@code CREATE_NEW} and {@code TRUNCATE_EXISTING}
- * are incompatible with this usage.</p></div>
+ * are incompatible with this usage.
*
* @see #LOCATION
* @see #getOpenParameters()
@@ -125,13 +125,11 @@ public abstract class DataStoreProvider {
* This name is used in some warnings or exception messages.
* It may contain any characters, including white spaces
* (i.e. this short name is <strong>not</strong> a format identifier).
+ * For a more comprehensive format name, see {@link #getFormat()}.
*
- * <div class="note"><b>Examples:</b>
+ * <h4>Examples</h4>
* {@code "CSV"}, {@code "GeoTIFF"}, {@code "GML"}, {@code "GPX"}, {@code "JPEG"}, {@code "JPEG 2000"},
* {@code "NetCDF"}, {@code "PNG"}, {@code "Shapefile"}.
- * </div>
- *
- * For a more comprehensive format name, see {@link #getFormat()}.
*
* @return a short name or abbreviation for the data format.
*
@@ -197,8 +195,8 @@ public abstract class DataStoreProvider {
* Those parameters will be recognized by the default {@code DataStoreProvider} methods and used whenever a
* {@link StorageConnector} is required.</p>
*
- * <div class="note"><b>Alternative:</b>
- * the main differences between the use of {@code StorageConnector} and parameters are:
+ * <h4>Alternative</h4>
+ * The main differences between the use of {@code StorageConnector} and parameters are:
* <ul class="verbose">
* <li>{@code StorageConnector} is designed for use with file or stream of unknown format;
* the format is automatically detected. By contrast, the use of parameters require to
@@ -207,7 +205,7 @@ public abstract class DataStoreProvider {
* and provide fine grain control over the store general behavior such as caching,
* time-outs, encoding, <i>etc</i>.</li>
* <li>Parameters can more easily be serialized in XML or configuration files.</li>
- * </ul></div>
+ * </ul>
*
* @return description of the parameters required or accepted for opening a {@link DataStore}.
*
@@ -236,14 +234,13 @@ public abstract class DataStoreProvider {
* only that there appears to be a reasonable chance of success based on a brief inspection of the
* {@linkplain StorageConnector#getStorage() storage object} or contents.
*
- * <div class="note"><b>Note for implementers</b>:
+ * <h4>Note for implementers</h4>
* Implementations are responsible for restoring the storage object to its original position
* on return of this method. Implementers can use the mark/reset mechanism for this purpose.
* Marks are available as {@link java.nio.ByteBuffer#mark()}, {@link java.io.InputStream#mark(int)}
* and {@link javax.imageio.stream.ImageInputStream#mark()}.
* Alternatively, the {@link #probeContent(StorageConnector, Class, Prober)}
* helper method manages automatically the marks for a set of known types.
- * </div>
*
* @param connector information about the storage (URL, stream, JDBC connection, <i>etc</i>).
* @return a {@linkplain ProbeResult#isSupported() supported} status if the given storage
diff --git a/storage/sis-storage/src/main/java/org/apache/sis/storage/DataStoreRegistry.java b/storage/sis-storage/src/main/java/org/apache/sis/storage/DataStoreRegistry.java
index 5ccaaabd59..9f850b5f31 100644
--- a/storage/sis-storage/src/main/java/org/apache/sis/storage/DataStoreRegistry.java
+++ b/storage/sis-storage/src/main/java/org/apache/sis/storage/DataStoreRegistry.java
@@ -34,9 +34,9 @@ import org.apache.sis.util.ArraysExt;
* Storage objects are typically {@link java.io.File} or {@link javax.sql.DataSource} instances, but can also
* be any other objects documented in the {@link StorageConnector} class.
*
- * <div class="note"><b>API note:</b>
- * this class is package-private for now in order to get more experience about what could be a good API.
- * This class may become public in a future SIS version.</div>
+ * <h2>API note</h2>
+ * This class is package-private for now in order to get more experience about what could be a good API.
+ * This class may become public in a future SIS version.
*
* <h2>Thread safety</h2>
* The same {@code DataStoreRegistry} instance can be safely used by many threads without synchronization
diff --git a/storage/sis-storage/src/main/java/org/apache/sis/storage/Resource.java b/storage/sis-storage/src/main/java/org/apache/sis/storage/Resource.java
index 155d005114..e690817941 100644
--- a/storage/sis-storage/src/main/java/org/apache/sis/storage/Resource.java
+++ b/storage/sis-storage/src/main/java/org/apache/sis/storage/Resource.java
@@ -36,13 +36,12 @@ import org.apache.sis.storage.event.StoreListener;
* instance of {@link Aggregate}. The {@linkplain Aggregate#components() components} of an aggregate can be
* themselves other aggregates, thus forming a tree.</p>
*
- * <div class="note"><b>Relationship with ISO 19115:</b>
- * this type is closely related to the {@code DS_Resource} type defined by ISO 19115.
+ * <h2>Relationship with ISO 19115</h2>
+ * This type is closely related to the {@code DS_Resource} type defined by ISO 19115.
* The Apache SIS type differs from the ISO type by being more closely related to data extraction,
* as can be seen from the checked {@link DataStoreException} thrown by most methods.
* Convenience methods for frequently requested information – for example {@link DataSet#getEnvelope()} – were added.
* The sub-types performing the actual data extraction – for example {@link FeatureSet} – are specific to Apache SIS.
- * </div>
*
* @author Johann Sorel (Geomatys)
* @version 1.0
diff --git a/storage/sis-storage/src/main/java/org/apache/sis/storage/StorageConnector.java b/storage/sis-storage/src/main/java/org/apache/sis/storage/StorageConnector.java
index 759331e2a1..24b225c09a 100644
--- a/storage/sis-storage/src/main/java/org/apache/sis/storage/StorageConnector.java
+++ b/storage/sis-storage/src/main/java/org/apache/sis/storage/StorageConnector.java
@@ -920,12 +920,12 @@ public class StorageConnector implements Serializable {
* {@link #getStorageAs(Class)} return value in the same state as they found it. This method is
* only for handling the cases where using a view has an indirect impact on another view.</p>
*
- * <div class="note"><b>Rational:</b>
+ * <h4>Rational</h4>
* {@link DataStoreProvider#probeContent(StorageConnector)} contract requires that implementers reset the
* input stream themselves. However if {@link ChannelDataInput} or {@link InputStreamReader} has been used,
* then the user performed a call to {@link ChannelDataInput#reset()} (for instance), which did not reset
* the underlying input stream. So we need to perform the missing {@link InputStream#reset()} here, then
- * synchronize the {@code ChannelDataInput} position accordingly.</div>
+ * synchronize the {@code ChannelDataInput} position accordingly.
*
* @param c container of the view to reset, or {@code null} if none.
* @return {@code true} if the given view, after reset, is valid.
diff --git a/storage/sis-storage/src/main/java/org/apache/sis/storage/WritableAggregate.java b/storage/sis-storage/src/main/java/org/apache/sis/storage/WritableAggregate.java
index b19fcf3f4a..bac0307b04 100644
--- a/storage/sis-storage/src/main/java/org/apache/sis/storage/WritableAggregate.java
+++ b/storage/sis-storage/src/main/java/org/apache/sis/storage/WritableAggregate.java
@@ -38,12 +38,11 @@ public interface WritableAggregate extends Aggregate {
* <li>{@link org.opengis.metadata.Metadata}</li>
* </ul>
*
- * <div class="note"><b>Warning:</b>
- * copying information between stores may produce differences in many aspects.
+ * <h4>Data transformation</h4>
+ * Copying information between stores may produce differences in many aspects.
* The range of changes depends both on the original {@link Resource} structure
* and the target {@code Resource} structure. If the differences are too large,
* then this {@code Aggregate} may throw an exception.
- * </div>
*
* @param resource the resource to copy in this {@code Aggregate}.
* @return the effectively added resource. May be {@code resource} itself if it has been added verbatim.
diff --git a/storage/sis-storage/src/main/java/org/apache/sis/storage/WritableFeatureSet.java b/storage/sis-storage/src/main/java/org/apache/sis/storage/WritableFeatureSet.java
index 0754e06940..be9abaf8f7 100644
--- a/storage/sis-storage/src/main/java/org/apache/sis/storage/WritableFeatureSet.java
+++ b/storage/sis-storage/src/main/java/org/apache/sis/storage/WritableFeatureSet.java
@@ -65,11 +65,11 @@ public interface WritableFeatureSet extends FeatureSet {
* After successful insertion, the new features may appear after the features already present
* but not necessarily; ordering is {@link DataStore} specific.
*
- * <div class="note"><b>API note:</b>
- * this method expects an {@link Iterator} rather than a {@link Stream} for easing
+ * <h4>API note</h4>
+ * This method expects an {@link Iterator} rather than a {@link Stream} for easing
* inter-operability with various API. Implementing a custom {@link Iterator} requires less effort
* than implementing a {@link Stream}. On the other side if the user has a {@link Stream},
- * obtaining an {@link Iterator} can be done by a call to {@link Stream#iterator()}.</div>
+ * obtaining an {@link Iterator} can be done by a call to {@link Stream#iterator()}.
*
* @param features feature instances to insert or copy in this {@code FeatureSet}.
* @throws IllegalFeatureTypeException if a feature given by the iterator is not of the type expected by this {@code FeatureSet}.
diff --git a/storage/sis-storage/src/main/java/org/apache/sis/storage/aggregate/AggregatedFeatureSet.java b/storage/sis-storage/src/main/java/org/apache/sis/storage/aggregate/AggregatedFeatureSet.java
index 6f6450f292..a1f0fd5964 100644
--- a/storage/sis-storage/src/main/java/org/apache/sis/storage/aggregate/AggregatedFeatureSet.java
+++ b/storage/sis-storage/src/main/java/org/apache/sis/storage/aggregate/AggregatedFeatureSet.java
@@ -122,15 +122,16 @@ abstract class AggregatedFeatureSet extends AbstractFeatureSet {
* This method tries to find a CRS common to all feature sets.
* If no common CRS can be found, then the envelope is absent.
*
- * <div class="note"><b>Implementation note:</b>
- * this method is final because overriding it would invalidate the unwrapping of other {@code AggregatedFeatureSet} instances.
- * If we wish to allow overrides in a future version, we would need to revisit {@link #getEnvelopes(List)} first.</div>
- *
* @return union of envelopes from all dependencies.
* @throws DataStoreException if an error occurred while computing the envelope.
*/
@Override
public final Optional<Envelope> getEnvelope() throws DataStoreException {
+ /*
+ * This method is final because overriding it would invalidate the unwrapping
+ * of other `AggregatedFeatureSet` instances. If we wish to allow overrides
+ * in a future version, we would need to revisit `getEnvelopes(List)` first.
+ */
synchronized (getSynchronizationLock()) {
if (!isEnvelopeComputed) {
final List<Envelope> envelopes = new ArrayList<>();
diff --git a/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/storage/gpx/GroupAsPolylineOperation.java b/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/storage/gpx/GroupAsPolylineOperation.java
index 8277244ea7..6303da7ccc 100644
--- a/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/storage/gpx/GroupAsPolylineOperation.java
+++ b/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/storage/gpx/GroupAsPolylineOperation.java
@@ -41,7 +41,7 @@ import org.opengis.feature.AttributeType;
* This base class expects a sequence of {@code Point} or {@code Polyline} instances as input.
* The single (Multi){@code Polyline} instance is re-computed every time this property is requested.
*
- * <div class="note"><b>Examples:</b>
+ * <h2>Examples</h2>
* <p><i>Polylines created from points:</i>
* a boat that record it's position every hour.
* The list of all positions is stored in an attribute with [0 … ∞] multiplicity.
@@ -53,7 +53,6 @@ import org.opengis.feature.AttributeType;
* The list of all tracks is stored in an attribute with [0 … ∞] multiplicity.
* This class will extract each track and create a polyline as a new attribute.
* Any change applied to the tracks will be visible on the polyline.</p>
- * </div>
*
* @author Johann Sorel (Geomatys)
* @author Martin Desruisseaux (Geomatys)
diff --git a/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/storage/xml/stream/FormattedWriter.java b/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/storage/xml/stream/FormattedWriter.java
index af97b7c499..35585bd14e 100644
--- a/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/storage/xml/stream/FormattedWriter.java
+++ b/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/storage/xml/stream/FormattedWriter.java
@@ -25,14 +25,14 @@ import org.apache.sis.internal.xml.StreamWriterDelegate;
/**
* Adds indentation to a XML output.
*
- * <div class="note"><b>Design note:</b>
- * an alternative approach would have been to provide {@code startIdentation()} and {@code endIndentation()}
+ * <h2>Design note</h2>
+ * An alternative approach would have been to provide {@code startIdentation()} and {@code endIndentation()}
* convenience methods in {@link StaxStreamWriter}, and let subclasses perform their own formatting. It would
* reduce the need to try to guess some formatting aspects (e.g. whether to format on a single line or not).
* However, that approach does not integrate very well with JAXB. The {@code Marshaller.JAXB_FORMATTED_OUTPUT}
* property seems to be ignored when marshalling a fragment using {@code XMLStreamWriter}.
* Even if that property was supported, we found no way to tell to JAXB to begin the indentation at some level
- * (for taking in account the indentation of the elements containing the fragment to marshal with JAXB).</div>
+ * (for taking in account the indentation of the elements containing the fragment to marshal with JAXB).
*
* @author Martin Desruisseaux (Geomatys)
* @version 0.8
diff --git a/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/storage/xml/stream/StaxStreamReader.java b/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/storage/xml/stream/StaxStreamReader.java
index c72a202f02..54721897ce 100644
--- a/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/storage/xml/stream/StaxStreamReader.java
+++ b/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/storage/xml/stream/StaxStreamReader.java
@@ -415,9 +415,9 @@ public abstract class StaxStreamReader extends StaxStreamIO implements XMLStream
* <li>{@code Infinity} — a {@link Double#valueOf(String)} specific value.</li>
* </ul>
*
- * <div class="note"><b>Note:</b>
- * this method duplicates {@link javax.xml.bind.DatatypeConverter#parseDouble(String)} work,
- * but avoid synchronization or volatile field cost of {@code DatatypeConverter}.</div>
+ * <h4>Implementation note</h4>
+ * This method duplicates {@link javax.xml.bind.DatatypeConverter#parseDouble(String)} work,
+ * but avoid synchronization or volatile field cost of {@code DatatypeConverter}.
*
* @param value the text to parse.
* @return the floating point value for the given text.
@@ -447,10 +447,10 @@ parse: switch (value.length()) {
* {@link Boolean#parseBoolean(String)} with one extension: the "0" value is considered
* as {@code false} and the "1" value as {@code true}.
*
- * <div class="note"><b>Note:</b>
- * this method duplicates {@link javax.xml.bind.DatatypeConverter#parseBoolean(String)} work
+ * <h4>Implementation note</h4>
+ * This method duplicates {@link javax.xml.bind.DatatypeConverter#parseBoolean(String)} work
* (except for its behavior in case of invalid value), but avoid synchronization or volatile
- * field cost of {@code DatatypeConverter}.</div>
+ * field cost of {@code DatatypeConverter}.
*
* @param value the string value to parse as a boolean.
* @return true if the boolean is equal to "true" or "1".