You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by gg...@apache.org on 2023/05/14 14:11:23 UTC
[commons-imaging] 07/07: Simpler parser construction
This is an automated email from the ASF dual-hosted git repository.
ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-imaging.git
commit 95e7a328e628b6085840583801942324cc76612a
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Sun May 14 10:11:00 2023 -0400
Simpler parser construction
No need to duplicate specifying the default byte order.
---
.../org/apache/commons/imaging/ImageParser.java | 9 ++++++++
.../commons/imaging/common/BinaryFileParser.java | 2 +-
.../imaging/formats/bmp/BmpImageParser.java | 2 +-
.../imaging/formats/dcx/DcxImageParser.java | 2 +-
.../imaging/formats/gif/GifImageParser.java | 2 +-
.../imaging/formats/icns/IcnsImageParser.java | 5 -----
.../imaging/formats/ico/IcoImageParser.java | 2 +-
.../imaging/formats/jpeg/JpegImageParser.java | 5 -----
.../commons/imaging/formats/jpeg/JpegUtils.java | 2 +-
.../imaging/formats/jpeg/exif/ExifRewriter.java | 2 +-
.../imaging/formats/jpeg/iptc/IptcParser.java | 2 +-
.../imaging/formats/jpeg/xmp/JpegRewriter.java | 2 +-
.../imaging/formats/jpeg/xmp/JpegXmpParser.java | 2 +-
.../imaging/formats/pcx/PcxImageParser.java | 2 +-
.../imaging/formats/pnm/PnmImageParser.java | 3 ++-
.../imaging/formats/psd/PsdImageParser.java | 5 -----
.../imaging/formats/rgbe/RgbeImageParser.java | 5 -----
.../imaging/formats/tiff/TiffImageParser.java | 1 +
.../imaging/formats/wbmp/WbmpImageParser.java | 1 +
.../imaging/formats/xbm/XbmImageParser.java | 9 ++++----
.../imaging/formats/xpm/XpmImageParser.java | 25 +++++++++++-----------
.../commons/imaging/icc/IccProfileParser.java | 2 +-
22 files changed, 43 insertions(+), 49 deletions(-)
diff --git a/src/main/java/org/apache/commons/imaging/ImageParser.java b/src/main/java/org/apache/commons/imaging/ImageParser.java
index 1ae7beac..48028ed5 100644
--- a/src/main/java/org/apache/commons/imaging/ImageParser.java
+++ b/src/main/java/org/apache/commons/imaging/ImageParser.java
@@ -23,6 +23,7 @@ import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.io.StringWriter;
+import java.nio.ByteOrder;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@@ -121,6 +122,14 @@ public abstract class ImageParser<T extends ImagingParameters<T>> extends Binary
);
}
+ public ImageParser() {
+ // defaults to big endian
+ }
+
+ public ImageParser(ByteOrder byteOrder) {
+ super(byteOrder);
+ }
+
/**
* Indicates whether the ImageParser implementation can accept
* the specified file based on its extension.
diff --git a/src/main/java/org/apache/commons/imaging/common/BinaryFileParser.java b/src/main/java/org/apache/commons/imaging/common/BinaryFileParser.java
index e23f991f..007ad25a 100644
--- a/src/main/java/org/apache/commons/imaging/common/BinaryFileParser.java
+++ b/src/main/java/org/apache/commons/imaging/common/BinaryFileParser.java
@@ -28,7 +28,7 @@ public class BinaryFileParser {
private static final Logger LOGGER = Logger.getLogger(BinaryFileParser.class.getName());
/**
- * Default ByteOrder for parsers.
+ * The default {@link ByteOrder} for parsers is {@link ByteOrder#BIG_ENDIAN}.
*/
private ByteOrder byteOrder = ByteOrder.BIG_ENDIAN;
diff --git a/src/main/java/org/apache/commons/imaging/formats/bmp/BmpImageParser.java b/src/main/java/org/apache/commons/imaging/formats/bmp/BmpImageParser.java
index 82df3632..c49b7c82 100644
--- a/src/main/java/org/apache/commons/imaging/formats/bmp/BmpImageParser.java
+++ b/src/main/java/org/apache/commons/imaging/formats/bmp/BmpImageParser.java
@@ -64,7 +64,7 @@ public class BmpImageParser extends ImageParser<BmpImagingParameters> {
private static final int BITMAP_INFO_HEADER_SIZE = 40;
public BmpImageParser() {
- super.setByteOrder(ByteOrder.LITTLE_ENDIAN);
+ super(ByteOrder.LITTLE_ENDIAN);
}
@Override
diff --git a/src/main/java/org/apache/commons/imaging/formats/dcx/DcxImageParser.java b/src/main/java/org/apache/commons/imaging/formats/dcx/DcxImageParser.java
index 532fd5e3..ad1c317c 100644
--- a/src/main/java/org/apache/commons/imaging/formats/dcx/DcxImageParser.java
+++ b/src/main/java/org/apache/commons/imaging/formats/dcx/DcxImageParser.java
@@ -67,7 +67,7 @@ public class DcxImageParser extends ImageParser<PcxImagingParameters> {
private static final String[] ACCEPTED_EXTENSIONS = ImageFormats.DCX.getExtensions();
public DcxImageParser() {
- super.setByteOrder(ByteOrder.LITTLE_ENDIAN);
+ super(ByteOrder.LITTLE_ENDIAN);
}
@Override
diff --git a/src/main/java/org/apache/commons/imaging/formats/gif/GifImageParser.java b/src/main/java/org/apache/commons/imaging/formats/gif/GifImageParser.java
index 30ee7bc8..7d40354a 100644
--- a/src/main/java/org/apache/commons/imaging/formats/gif/GifImageParser.java
+++ b/src/main/java/org/apache/commons/imaging/formats/gif/GifImageParser.java
@@ -114,7 +114,7 @@ public class GifImageParser extends ImageParser<GifImagingParameters> implements
}
public GifImageParser() {
- super.setByteOrder(ByteOrder.LITTLE_ENDIAN);
+ super(ByteOrder.LITTLE_ENDIAN);
}
private int convertColorTableSize(final int tableSize) {
diff --git a/src/main/java/org/apache/commons/imaging/formats/icns/IcnsImageParser.java b/src/main/java/org/apache/commons/imaging/formats/icns/IcnsImageParser.java
index 227615eb..920f6329 100644
--- a/src/main/java/org/apache/commons/imaging/formats/icns/IcnsImageParser.java
+++ b/src/main/java/org/apache/commons/imaging/formats/icns/IcnsImageParser.java
@@ -25,7 +25,6 @@ import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
-import java.nio.ByteOrder;
import java.util.ArrayList;
import java.util.List;
@@ -100,10 +99,6 @@ public class IcnsImageParser extends ImageParser<IcnsImagingParameters> {
private static final String[] ACCEPTED_EXTENSIONS = ImageFormats.ICNS.getExtensions();
- public IcnsImageParser() {
- super.setByteOrder(ByteOrder.BIG_ENDIAN);
- }
-
@Override
public boolean dumpImageFile(final PrintWriter pw, final ByteSource byteSource)
throws ImageReadException, IOException {
diff --git a/src/main/java/org/apache/commons/imaging/formats/ico/IcoImageParser.java b/src/main/java/org/apache/commons/imaging/formats/ico/IcoImageParser.java
index fef55082..3e469d50 100644
--- a/src/main/java/org/apache/commons/imaging/formats/ico/IcoImageParser.java
+++ b/src/main/java/org/apache/commons/imaging/formats/ico/IcoImageParser.java
@@ -234,7 +234,7 @@ public class IcoImageParser extends ImageParser<IcoImagingParameters> {
private static final String[] ACCEPTED_EXTENSIONS = ImageFormats.ICO.getExtensions();
public IcoImageParser() {
- super.setByteOrder(ByteOrder.LITTLE_ENDIAN);
+ super(ByteOrder.LITTLE_ENDIAN);
}
@Override
diff --git a/src/main/java/org/apache/commons/imaging/formats/jpeg/JpegImageParser.java b/src/main/java/org/apache/commons/imaging/formats/jpeg/JpegImageParser.java
index 0b2c4a6d..08a897f8 100644
--- a/src/main/java/org/apache/commons/imaging/formats/jpeg/JpegImageParser.java
+++ b/src/main/java/org/apache/commons/imaging/formats/jpeg/JpegImageParser.java
@@ -23,7 +23,6 @@ import java.awt.Dimension;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.PrintWriter;
-import java.nio.ByteOrder;
import java.nio.charset.StandardCharsets;
import java.text.NumberFormat;
import java.util.ArrayList;
@@ -74,10 +73,6 @@ public class JpegImageParser extends ImageParser<JpegImagingParameters> implemen
return startsWith(segment.getSegmentData(), JpegConstants.EXIF_IDENTIFIER_CODE);
}
- public JpegImageParser() {
- setByteOrder(ByteOrder.BIG_ENDIAN);
- }
-
private byte[] assembleSegments(final List<App2Segment> segments) throws ImageReadException {
try {
return assembleSegments(segments, false);
diff --git a/src/main/java/org/apache/commons/imaging/formats/jpeg/JpegUtils.java b/src/main/java/org/apache/commons/imaging/formats/jpeg/JpegUtils.java
index 19a0e2a2..d7f4f3f7 100644
--- a/src/main/java/org/apache/commons/imaging/formats/jpeg/JpegUtils.java
+++ b/src/main/java/org/apache/commons/imaging/formats/jpeg/JpegUtils.java
@@ -123,7 +123,7 @@ public class JpegUtils extends BinaryFileParser {
}
public JpegUtils() {
- setByteOrder(ByteOrder.BIG_ENDIAN);
+ super(ByteOrder.BIG_ENDIAN);
}
public void dumpJFIF(final ByteSource byteSource) throws ImageReadException,
diff --git a/src/main/java/org/apache/commons/imaging/formats/jpeg/exif/ExifRewriter.java b/src/main/java/org/apache/commons/imaging/formats/jpeg/exif/ExifRewriter.java
index ee76448d..16132d1d 100644
--- a/src/main/java/org/apache/commons/imaging/formats/jpeg/exif/ExifRewriter.java
+++ b/src/main/java/org/apache/commons/imaging/formats/jpeg/exif/ExifRewriter.java
@@ -139,7 +139,7 @@ public class ExifRewriter extends BinaryFileParser {
* byte order of EXIF segment.
*/
public ExifRewriter(final ByteOrder byteOrder) {
- setByteOrder(byteOrder);
+ super(byteOrder);
}
private JFIFPieces analyzeJFIF(final ByteSource byteSource) throws ImageReadException, IOException {
diff --git a/src/main/java/org/apache/commons/imaging/formats/jpeg/iptc/IptcParser.java b/src/main/java/org/apache/commons/imaging/formats/jpeg/iptc/IptcParser.java
index 3bbc16f3..2ec6355a 100644
--- a/src/main/java/org/apache/commons/imaging/formats/jpeg/iptc/IptcParser.java
+++ b/src/main/java/org/apache/commons/imaging/formats/jpeg/iptc/IptcParser.java
@@ -72,7 +72,7 @@ public class IptcParser extends BinaryFileParser {
private static final byte[] CHARACTER_ESCAPE_SEQUENCE = {'\u001B', '%', 'G'};
public IptcParser() {
- setByteOrder(ByteOrder.BIG_ENDIAN);
+ super(ByteOrder.BIG_ENDIAN);
}
private Charset findCharset(final byte[] codedCharset) {
diff --git a/src/main/java/org/apache/commons/imaging/formats/jpeg/xmp/JpegRewriter.java b/src/main/java/org/apache/commons/imaging/formats/jpeg/xmp/JpegRewriter.java
index afc4df1c..419d3a02 100644
--- a/src/main/java/org/apache/commons/imaging/formats/jpeg/xmp/JpegRewriter.java
+++ b/src/main/java/org/apache/commons/imaging/formats/jpeg/xmp/JpegRewriter.java
@@ -175,7 +175,7 @@ public class JpegRewriter extends BinaryFileParser {
* extension.
*/
public JpegRewriter() {
- setByteOrder(JPEG_BYTE_ORDER);
+ super(JPEG_BYTE_ORDER);
}
protected JFIFPieces analyzeJFIF(final ByteSource byteSource) throws ImageReadException, IOException {
diff --git a/src/main/java/org/apache/commons/imaging/formats/jpeg/xmp/JpegXmpParser.java b/src/main/java/org/apache/commons/imaging/formats/jpeg/xmp/JpegXmpParser.java
index 38e2d471..bad2ec34 100644
--- a/src/main/java/org/apache/commons/imaging/formats/jpeg/xmp/JpegXmpParser.java
+++ b/src/main/java/org/apache/commons/imaging/formats/jpeg/xmp/JpegXmpParser.java
@@ -28,7 +28,7 @@ import org.apache.commons.imaging.formats.jpeg.JpegConstants;
public class JpegXmpParser extends BinaryFileParser {
public JpegXmpParser() {
- setByteOrder(ByteOrder.BIG_ENDIAN);
+ super(ByteOrder.BIG_ENDIAN);
}
public boolean isXmpJpegSegment(final byte[] segmentData) {
diff --git a/src/main/java/org/apache/commons/imaging/formats/pcx/PcxImageParser.java b/src/main/java/org/apache/commons/imaging/formats/pcx/PcxImageParser.java
index 6c8f81a7..3d12714f 100644
--- a/src/main/java/org/apache/commons/imaging/formats/pcx/PcxImageParser.java
+++ b/src/main/java/org/apache/commons/imaging/formats/pcx/PcxImageParser.java
@@ -158,7 +158,7 @@ public class PcxImageParser extends ImageParser<PcxImagingParameters> {
private static final String[] ACCEPTED_EXTENSIONS = ImageFormats.PCX.getExtensions();
public PcxImageParser() {
- super.setByteOrder(ByteOrder.LITTLE_ENDIAN);
+ super(ByteOrder.LITTLE_ENDIAN);
}
@Override
diff --git a/src/main/java/org/apache/commons/imaging/formats/pnm/PnmImageParser.java b/src/main/java/org/apache/commons/imaging/formats/pnm/PnmImageParser.java
index 6b023caa..9cb164d5 100644
--- a/src/main/java/org/apache/commons/imaging/formats/pnm/PnmImageParser.java
+++ b/src/main/java/org/apache/commons/imaging/formats/pnm/PnmImageParser.java
@@ -41,6 +41,7 @@ import org.apache.commons.imaging.common.bytesource.ByteSource;
import org.apache.commons.imaging.palette.PaletteFactory;
public class PnmImageParser extends ImageParser<PnmImagingParameters> {
+
private static final String DEFAULT_EXTENSION = ImageFormats.PNM.getDefaultExtension();
private static final String[] ACCEPTED_EXTENSIONS = {
ImageFormats.PAM.getDefaultExtension(),
@@ -51,7 +52,7 @@ public class PnmImageParser extends ImageParser<PnmImagingParameters> {
};
public PnmImageParser() {
- super.setByteOrder(ByteOrder.LITTLE_ENDIAN);
+ super(ByteOrder.LITTLE_ENDIAN);
}
@Override
diff --git a/src/main/java/org/apache/commons/imaging/formats/psd/PsdImageParser.java b/src/main/java/org/apache/commons/imaging/formats/psd/PsdImageParser.java
index 69ee873e..7e80d574 100644
--- a/src/main/java/org/apache/commons/imaging/formats/psd/PsdImageParser.java
+++ b/src/main/java/org/apache/commons/imaging/formats/psd/PsdImageParser.java
@@ -29,7 +29,6 @@ import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
-import java.nio.ByteOrder;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
@@ -69,10 +68,6 @@ public class PsdImageParser extends ImageParser<PsdImagingParameters> implements
public static final int IMAGE_RESOURCE_ID_XMP = 0x0424;
public static final String BLOCK_NAME_XMP = "XMP";
- public PsdImageParser() {
- super.setByteOrder(ByteOrder.BIG_ENDIAN);
- }
-
@Override
public boolean dumpImageFile(final PrintWriter pw, final ByteSource byteSource)
throws ImageReadException, IOException {
diff --git a/src/main/java/org/apache/commons/imaging/formats/rgbe/RgbeImageParser.java b/src/main/java/org/apache/commons/imaging/formats/rgbe/RgbeImageParser.java
index 99791719..fdfd7199 100644
--- a/src/main/java/org/apache/commons/imaging/formats/rgbe/RgbeImageParser.java
+++ b/src/main/java/org/apache/commons/imaging/formats/rgbe/RgbeImageParser.java
@@ -27,7 +27,6 @@ import java.awt.image.DataBuffer;
import java.awt.image.DataBufferFloat;
import java.awt.image.Raster;
import java.io.IOException;
-import java.nio.ByteOrder;
import java.util.ArrayList;
import org.apache.commons.imaging.ImageFormat;
@@ -43,10 +42,6 @@ import org.apache.commons.imaging.common.bytesource.ByteSource;
*/
public class RgbeImageParser extends ImageParser<RgbeImagingParameters> {
- public RgbeImageParser() {
- setByteOrder(ByteOrder.BIG_ENDIAN);
- }
-
@Override
protected String[] getAcceptedExtensions() {
return ImageFormats.RGBE.getExtensions();
diff --git a/src/main/java/org/apache/commons/imaging/formats/tiff/TiffImageParser.java b/src/main/java/org/apache/commons/imaging/formats/tiff/TiffImageParser.java
index 7dea294a..6fdf7ff7 100644
--- a/src/main/java/org/apache/commons/imaging/formats/tiff/TiffImageParser.java
+++ b/src/main/java/org/apache/commons/imaging/formats/tiff/TiffImageParser.java
@@ -65,6 +65,7 @@ import org.apache.commons.imaging.formats.tiff.photometricinterpreters.Photometr
import org.apache.commons.imaging.formats.tiff.write.TiffImageWriterLossy;
public class TiffImageParser extends ImageParser<TiffImagingParameters> implements XmpEmbeddable<TiffImagingParameters> {
+
private static final String DEFAULT_EXTENSION = ImageFormats.TIFF.getDefaultExtension();
private static final String[] ACCEPTED_EXTENSIONS = ImageFormats.TIFF.getExtensions();
diff --git a/src/main/java/org/apache/commons/imaging/formats/wbmp/WbmpImageParser.java b/src/main/java/org/apache/commons/imaging/formats/wbmp/WbmpImageParser.java
index b7c098c5..9fcbe858 100644
--- a/src/main/java/org/apache/commons/imaging/formats/wbmp/WbmpImageParser.java
+++ b/src/main/java/org/apache/commons/imaging/formats/wbmp/WbmpImageParser.java
@@ -41,6 +41,7 @@ import org.apache.commons.imaging.common.ImageMetadata;
import org.apache.commons.imaging.common.bytesource.ByteSource;
public class WbmpImageParser extends ImageParser<WbmpImagingParameters> {
+
static class WbmpHeader {
final int typeField;
final byte fixHeaderField;
diff --git a/src/main/java/org/apache/commons/imaging/formats/xbm/XbmImageParser.java b/src/main/java/org/apache/commons/imaging/formats/xbm/XbmImageParser.java
index 2f0a9203..2b68415c 100644
--- a/src/main/java/org/apache/commons/imaging/formats/xbm/XbmImageParser.java
+++ b/src/main/java/org/apache/commons/imaging/formats/xbm/XbmImageParser.java
@@ -48,9 +48,10 @@ import org.apache.commons.imaging.common.ImageMetadata;
import org.apache.commons.imaging.common.bytesource.ByteSource;
public class XbmImageParser extends ImageParser<XbmImagingParameters> {
+
private static class XbmHeader {
- final int width;
final int height;
+ final int width;
int xHot = -1;
int yHot = -1;
@@ -71,15 +72,15 @@ public class XbmImageParser extends ImageParser<XbmImagingParameters> {
}
}
}
+
private static class XbmParseResult {
- XbmHeader xbmHeader;
BasicCParser cParser;
+ XbmHeader xbmHeader;
}
+ private static final String[] ACCEPTED_EXTENSIONS = ImageFormats.XBM.getExtensions();
private static final String DEFAULT_EXTENSION = ImageFormats.XBM.getDefaultExtension();
- private static final String[] ACCEPTED_EXTENSIONS = ImageFormats.XBM.getExtensions();
-
private static int parseCIntegerLiteral(final String value) {
if (value.startsWith("0")) {
if (value.length() >= 2) {
diff --git a/src/main/java/org/apache/commons/imaging/formats/xpm/XpmImageParser.java b/src/main/java/org/apache/commons/imaging/formats/xpm/XpmImageParser.java
index cec09f22..3e935e3f 100644
--- a/src/main/java/org/apache/commons/imaging/formats/xpm/XpmImageParser.java
+++ b/src/main/java/org/apache/commons/imaging/formats/xpm/XpmImageParser.java
@@ -53,15 +53,16 @@ import org.apache.commons.imaging.palette.PaletteFactory;
import org.apache.commons.imaging.palette.SimplePalette;
public class XpmImageParser extends ImageParser<XpmImagingParameters> {
+
private static class PaletteEntry {
- int index;
- boolean haveColor = false;
int colorArgb;
- boolean haveGray = false;
+ int gray4LevelArgb;
int grayArgb;
+ boolean haveColor = false;
+ boolean haveGray = false;
boolean haveGray4Level = false;
- int gray4LevelArgb;
boolean haveMono = false;
+ int index;
int monoArgb;
int getBestARGB() {
@@ -80,16 +81,17 @@ public class XpmImageParser extends ImageParser<XpmImagingParameters> {
return 0x00000000;
}
}
+
private static class XpmHeader {
- final int width;
final int height;
- final int numColors;
final int numCharsPerPixel;
+ final int numColors;
+ final Map<Object, PaletteEntry> palette = new HashMap<>();
+ final int width;
int xHotSpot = -1;
- int yHotSpot = -1;
final boolean xpmExt;
- final Map<Object, PaletteEntry> palette = new HashMap<>();
+ int yHotSpot = -1;
XpmHeader(final int width, final int height, final int numColors,
final int numCharsPerPixel, final int xHotSpot, final int yHotSpot, final boolean xpmExt) {
@@ -116,15 +118,14 @@ public class XpmImageParser extends ImageParser<XpmImagingParameters> {
}
}
private static class XpmParseResult {
- XpmHeader xpmHeader;
BasicCParser cParser;
+ XpmHeader xpmHeader;
}
- private static final String DEFAULT_EXTENSION = ImageFormats.XPM.getDefaultExtension();
-
private static final String[] ACCEPTED_EXTENSIONS = ImageFormats.XPM.getExtensions();
-
private static Map<String, Integer> colorNames;
+ private static final String DEFAULT_EXTENSION = ImageFormats.XPM.getDefaultExtension();
+
private static final char[] WRITE_PALETTE = { ' ', '.', 'X', 'o', 'O', '+',
'@', '#', '$', '%', '&', '*', '=', '-', ';', ':', '>', ',', '<',
'1', '2', '3', '4', '5', '6', '7', '8', '9', '0', 'q', 'w', 'e',
diff --git a/src/main/java/org/apache/commons/imaging/icc/IccProfileParser.java b/src/main/java/org/apache/commons/imaging/icc/IccProfileParser.java
index 559aea3e..3f2f8447 100644
--- a/src/main/java/org/apache/commons/imaging/icc/IccProfileParser.java
+++ b/src/main/java/org/apache/commons/imaging/icc/IccProfileParser.java
@@ -39,7 +39,7 @@ public class IccProfileParser extends BinaryFileParser {
private static final Logger LOGGER = Logger.getLogger(IccProfileParser.class.getName());
public IccProfileParser() {
- this.setByteOrder(ByteOrder.BIG_ENDIAN);
+ super(ByteOrder.BIG_ENDIAN);
}
public IccProfileInfo getICCProfileInfo(final byte[] bytes) {