foray-commit Mailing List for FOray (Page 11)
Modular XSL-FO Implementation for Java.
Status: Alpha
Brought to you by:
victormote
You can subscribe to this list here.
| 2006 |
Jan
|
Feb
|
Mar
(139) |
Apr
(98) |
May
(250) |
Jun
(394) |
Jul
(84) |
Aug
(13) |
Sep
(420) |
Oct
(186) |
Nov
(1) |
Dec
(3) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2007 |
Jan
(108) |
Feb
(202) |
Mar
(291) |
Apr
(247) |
May
(374) |
Jun
(227) |
Jul
(231) |
Aug
(60) |
Sep
(31) |
Oct
(45) |
Nov
(18) |
Dec
|
| 2008 |
Jan
(38) |
Feb
(71) |
Mar
(142) |
Apr
|
May
(59) |
Jun
(6) |
Jul
(10) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
| 2009 |
Jan
(12) |
Feb
(4) |
Mar
(88) |
Apr
(121) |
May
(17) |
Jun
(30) |
Jul
|
Aug
(5) |
Sep
|
Oct
(1) |
Nov
|
Dec
|
| 2010 |
Jan
(11) |
Feb
(76) |
Mar
(11) |
Apr
|
May
(11) |
Jun
|
Jul
|
Aug
(44) |
Sep
(14) |
Oct
(7) |
Nov
|
Dec
|
| 2011 |
Jan
|
Feb
|
Mar
|
Apr
|
May
(9) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(10) |
Nov
|
Dec
|
| 2012 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
(3) |
Jul
(4) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
| 2016 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(168) |
| 2017 |
Jan
(77) |
Feb
(11) |
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
| 2018 |
Jan
|
Feb
|
Mar
(1) |
Apr
(6) |
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
| 2019 |
Jan
|
Feb
(88) |
Mar
(118) |
Apr
(1) |
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
| 2020 |
Jan
|
Feb
|
Mar
|
Apr
|
May
(6) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(141) |
| 2021 |
Jan
(170) |
Feb
(20) |
Mar
|
Apr
|
May
|
Jun
|
Jul
(1) |
Aug
|
Sep
|
Oct
(62) |
Nov
(189) |
Dec
(162) |
| 2022 |
Jan
(201) |
Feb
(118) |
Mar
(8) |
Apr
|
May
(2) |
Jun
(47) |
Jul
(19) |
Aug
(14) |
Sep
(3) |
Oct
|
Nov
(28) |
Dec
(235) |
| 2023 |
Jan
(112) |
Feb
(23) |
Mar
(2) |
Apr
(2) |
May
|
Jun
(1) |
Jul
|
Aug
(70) |
Sep
(92) |
Oct
(20) |
Nov
(1) |
Dec
(1) |
| 2024 |
Jan
|
Feb
|
Mar
(1) |
Apr
(1) |
May
(14) |
Jun
(11) |
Jul
(1) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
| 2025 |
Jan
(10) |
Feb
(29) |
Mar
|
Apr
(162) |
May
(245) |
Jun
(83) |
Jul
|
Aug
(1) |
Sep
|
Oct
|
Nov
|
Dec
|
|
From: <vic...@us...> - 2025-05-07 16:29:16
|
Revision: 13628
http://sourceforge.net/p/foray/code/13628
Author: victormote
Date: 2025-05-07 16:28:56 +0000 (Wed, 07 May 2025)
Log Message:
-----------
Add tests for basic single-attribute "space-" properties.
Modified Paths:
--------------
trunk/foray/foray-fotree/src/main/java/org/foray/fotree/fo/datatype/DtSpace.java
trunk/foray/foray-fotree/src/main/java/org/foray/fotree/fo/prop/AbstractRelativeSpace.java
trunk/foray/foray-fotree/src/test/java/org/foray/fotree/fo/prop/RelativeSpaceTests.java
trunk/foray/foray-fotree/src/test/java/org/foray/fotree/fo/prop/SpaceAfterTests.java
trunk/foray/foray-fotree/src/test/java/org/foray/fotree/fo/prop/SpaceBeforeTests.java
trunk/foray/foray-fotree/src/test/java/org/foray/fotree/fo/prop/SpaceEndTests.java
trunk/foray/foray-fotree/src/test/java/org/foray/fotree/fo/prop/SpaceStartTests.java
Modified: trunk/foray/foray-fotree/src/main/java/org/foray/fotree/fo/datatype/DtSpace.java
===================================================================
--- trunk/foray/foray-fotree/src/main/java/org/foray/fotree/fo/datatype/DtSpace.java 2025-05-07 12:21:33 UTC (rev 13627)
+++ trunk/foray/foray-fotree/src/main/java/org/foray/fotree/fo/datatype/DtSpace.java 2025-05-07 16:28:56 UTC (rev 13628)
@@ -34,6 +34,7 @@
import org.foray.fotree.fo.PvKeywordFo;
import org.foray.fotree.fo.expression.Expr;
import org.foray.fotree.value.PropertyValue;
+import org.foray.primitive.StringUtils;
import org.axsl.value.Conditionality;
@@ -45,6 +46,50 @@
*/
public class DtSpace extends Datatype {
+ /**
+ * Enumeration of the components or subtypes of a "space" property.
+ */
+ public enum Component {
+
+ /** The "minimum" component. */
+ MINIMUM("minimum"),
+
+ /** The "optimum" component. */
+ OPTIMUM("optimum"),
+
+ /** The "maximum" component. */
+ MAXIMUM("maximum"),
+
+ /** The "precedence" component. */
+ PRECEDENCE("precedence"),
+
+ /** The "conditionality" component. */
+ CONDITIONALITY("conditionality"),
+
+ /** The short form, indicating no component. */
+ SHORT_FORM(StringUtils.EMPTY_STRING);
+
+ /** The extension used to specify this component. */
+ private String extension;
+
+ /**
+ * Constructor.
+ * @param extension The extension used to specify this component.
+ */
+ Component(final String extension) {
+ this.extension = extension;
+ }
+
+ /**
+ * Returns the extension used to specify this component.
+ * @return The extension used to specify this component.
+ */
+ public String getExtension() {
+ return this.extension;
+ }
+
+ }
+
/** Constant indicating the numeric weight assigned to precedence of
* "force". */
public static final int PRECEDENCE_FORCE = Integer.MAX_VALUE;
@@ -285,8 +330,7 @@
* for the subPropertyName given.
* @throws PropertyException If the subPropertyName is not valid.
*/
- public boolean addComponent(final String subPropertyName,
- final PropertyValue value) throws PropertyException {
+ public boolean addComponent(final String subPropertyName, final PropertyValue value) throws PropertyException {
if ("conditionality".equals(subPropertyName)) {
if (value instanceof PvKeywordFo) {
final PvKeywordFo keyword = (PvKeywordFo) value;
@@ -304,7 +348,7 @@
return false;
}
if ("minimum".equals(subPropertyName)) {
- this.setLengthMaximum(value);
+ this.setLengthMinimum(value);
return true;
} else if ("optimum".equals(subPropertyName)) {
this.setLengthOptimum(value);
Modified: trunk/foray/foray-fotree/src/main/java/org/foray/fotree/fo/prop/AbstractRelativeSpace.java
===================================================================
--- trunk/foray/foray-fotree/src/main/java/org/foray/fotree/fo/prop/AbstractRelativeSpace.java 2025-05-07 12:21:33 UTC (rev 13627)
+++ trunk/foray/foray-fotree/src/main/java/org/foray/fotree/fo/prop/AbstractRelativeSpace.java 2025-05-07 16:28:56 UTC (rev 13628)
@@ -45,16 +45,38 @@
import org.axsl.value.RelativeCompass;
/**
- * Abstract superclass for the "space-before", "space-after", "space-start", and
- * "space-end" properties.
+ * Abstract superclass for the "space-before", "space-after", "space-start", and "space-end" properties.
*/
public abstract class AbstractRelativeSpace extends AbstractFoProperty {
+ /** The initial (default) value of the "minimum" component of a "space-" property. */
+ public static final byte INITIAL_MINIMUM = 0;
+
+ /** The initial (default) value of the "optimum" component of a "space-" property. */
+ public static final byte INITIAL_OPTIMUM = 0;
+
+ /** The initial (default) value of the "maximum" component of a "space-" property. */
+ public static final byte INITIAL_MAXIMUM = 0;
+
+ /** The initial (default) value of the "maximum" component of a "space-" property. */
+ public static final Conditionality INITIAL_CONDITIONALITY = Conditionality.DISCARD;
+
+ /** The initial (default) value of the "maximum" component of a "space-" property. */
+ public static final byte INITIAL_PRECEDENCE = 0;
+
+
+
/** Array of valid keywords. */
private static final FoKeyword[] VALID_KEYWORDS = {
FoKeyword.INHERIT,
};
+ /** Array of valid keywords. */
+ private static final FoKeyword[] VALID_KEYWORDS_CONDITIONALITY = {
+ FoKeyword.DISCARD,
+ FoKeyword.RETAIN,
+ };
+
/** The PropertyValue instance that contains this property's value. */
private PropertyValue value;
@@ -123,8 +145,7 @@
/**
* Returns the value of this property.
* @param context An object that knows how to resolve FO context issues.
- * @param subProperty The length-range for the property needed (MINIMUM,
- * OPTIMUM, OR MAXIMUM).
+ * @param subProperty The length-range for the property needed (MINIMUM, OPTIMUM, OR MAXIMUM).
* @param fobj The FO for which this value is needed.
* @return The value of this property.
*/
@@ -173,8 +194,7 @@
/**
* Returns the inherited value of this property.
* @param context An object that knows how to resolve FO context issues.
- * @param subProperty The length-range for the property needed (MINIMUM,
- * OPTIMUM, OR MAXIMUM).
+ * @param subProperty The length-range for the property needed (MINIMUM, OPTIMUM, OR MAXIMUM).
* @param fobj The FO for which this value is needed.
* @return The inherited value of this property.
*/
@@ -281,31 +301,27 @@
}
/**
- * Returns the default (initial) value for the numeric component of this
- * property.
+ * Returns the default (initial) value for the numeric component of this property.
* @return The initial value of the numeric component of this property.
*/
public static int getValueNoInstance() {
- return 0;
+ return INITIAL_OPTIMUM;
}
/**
- * Returns the default (initial) value for the conditionality component of
- * this property.
- * @return The initial value of the conditionality component of this
- * property.
+ * Returns the default (initial) value for the conditionality component of this property.
+ * @return The initial value of the conditionality component of this property.
*/
public static Conditionality getConditionalityNoInstance() {
- return Conditionality.DISCARD;
+ return INITIAL_CONDITIONALITY;
}
/**
- * Returns the default (initial) value for the precedence component of this
- * property.
+ * Returns the default (initial) value for the precedence component of this property.
* @return The initial value of the precedence component of this property.
*/
public static short getPrecedenceNoInstance() {
- return 0;
+ return INITIAL_PRECEDENCE;
}
@Override
@@ -316,32 +332,25 @@
/**
* Adds a component value to the compound value.
* @param fobj The FoObj to which this property belongs.
- * @param propertyFullName The full name of the property, including both
- * the base and the sub-property name.
+ * @param propertyFullName The full name of the property, including both the base and the sub-property name.
* @param attributeValue The value of the component.
- * @return True if the component was successfully added, false if the
- * pre-existing value is not the correct type.
+ * @return True if the component was successfully added, false if the pre-existing value is not the correct type.
* @throws PropertyException If the input is not valid.
*/
- public boolean addComponent(final FoObj fobj,
- final String propertyFullName, final String attributeValue)
+ public boolean addComponent(final FoObj fobj, final String propertyFullName, final String attributeValue)
throws PropertyException {
if (! (value() instanceof DtSpace)) {
return false;
}
DtSpace spaceDT = (DtSpace) value();
- final String subPropertyName = Property.getSubPropertyName(
- propertyFullName);
- spaceDT = createOrAddSpace(spaceDT, attributeValue, subPropertyName,
- propertyFullName);
+ final String subPropertyName = Property.getSubPropertyName(propertyFullName);
+ spaceDT = createOrAddSpace(spaceDT, attributeValue, subPropertyName, propertyFullName);
return true;
}
/**
- * Creates or adds the Space property value so that components can be added
- * to it.
- * @param inputSpaceDT The existing Space object. If it is null, it will be
- * created.
+ * Creates or adds the Space property value so that components can be added to it.
+ * @param inputSpaceDT The existing Space object. If it is null, it will be created.
* @param value The unparsed attribute value.
* @param subPropertyName The subproperty portion of the property name.
* @param propertyFullName The full name of the property.
@@ -355,13 +364,13 @@
final DtLength length = DtLength.ZERO_LENGTH;
spaceDT = new DtSpace(length, length, length, FoKeyword.DISCARD, new DtInteger(0));
}
- final PropertyValue pv = this.standardParse(value, null);
- if (pv.canEvalLength()) {
- final boolean componentAdded = spaceDT.addComponent(subPropertyName,
- pv);
- if (! componentAdded) {
- throw unexpectedValue(value);
- }
+ final FoKeyword[] validKeywords = "conditionality".equals(subPropertyName) ?
+ VALID_KEYWORDS_CONDITIONALITY :
+ null;
+ final PropertyValue pv = this.standardParse(value, validKeywords);
+ final boolean componentAdded = spaceDT.addComponent(subPropertyName, pv);
+ if (! componentAdded) {
+ throw unexpectedValue(value);
}
return spaceDT;
}
Modified: trunk/foray/foray-fotree/src/test/java/org/foray/fotree/fo/prop/RelativeSpaceTests.java
===================================================================
--- trunk/foray/foray-fotree/src/test/java/org/foray/fotree/fo/prop/RelativeSpaceTests.java 2025-05-07 12:21:33 UTC (rev 13627)
+++ trunk/foray/foray-fotree/src/test/java/org/foray/fotree/fo/prop/RelativeSpaceTests.java 2025-05-07 16:28:56 UTC (rev 13628)
@@ -32,7 +32,10 @@
import org.foray.fotree.FoObj;
import org.foray.fotree.LengthRange;
import org.foray.fotree.PropertyException;
+import org.foray.fotree.fo.datatype.DtSpace;
+import org.axsl.value.Conditionality;
+
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.fail;
import org.junit.jupiter.api.Test;
@@ -44,18 +47,47 @@
implements CmpLengthTests {
@Override
- protected abstract AbstractRelativeSpace createProperty(String attributeValue) throws PropertyException;
+ protected AbstractRelativeSpace createProperty(final String attributeValue) throws PropertyException {
+ return createProperty(DtSpace.Component.SHORT_FORM, attributeValue);
+ }
/**
+ * Parses an attribute value and returns the property value created or updated.
+ * @param fullPropertyName The full name of the property being parsed.
+ * This property can have components.
+ * @param attributeValue The attribute value to be parsed.
+ * @return The newly-created or updated Property.
+ * @throws PropertyException For errors during parsing.
+ */
+ protected abstract AbstractRelativeSpace createProperty(String fullPropertyName, String attributeValue)
+ throws PropertyException;
+
+ /**
+ * Creates or updates a property from its component specification.
+ * @param component The component specified as part of the full property name.
+ * @param attributeValue The attribute value to be parsed.
+ * @return The newly-created or updated Property.
+ */
+ protected AbstractRelativeSpace createProperty(final DtSpace.Component component, final String attributeValue)
+ throws PropertyException {
+ final StringBuilder builder = new StringBuilder(25);
+ builder.append(this.getPropertyId().getAttributeName());
+ if (component != DtSpace.Component.SHORT_FORM) {
+ builder.append(".");
+ }
+ builder.append(component.getExtension());
+ final String fullPropertyName = builder.toString();
+ return createProperty(fullPropertyName, attributeValue);
+ }
+
+ /**
* Retrieves the property value from the property.
* @param property The property whose value should be retrieved.
* @param testFobj The parent FO for the property.
* @return The value of the property.
*/
- private int getPropertyValue(final AbstractRelativeSpace property,
- final FoObj testFobj) {
- final int testLength = property.getValue(STD_FO_CONTEXT,
- LengthRange.OPTIMUM, testFobj);
+ private int getPropertyValue(final AbstractRelativeSpace property, final FoObj testFobj) {
+ final int testLength = property.getValue(STD_FO_CONTEXT, LengthRange.OPTIMUM, testFobj);
return testLength;
}
@@ -82,4 +114,130 @@
}
}
+ /**
+ * Test of setting the minimum value only.
+ * @throws PropertyException Not expected here.
+ */
+ @Test
+ public void testSettingMinimumOnly() throws PropertyException {
+ final FoObj testFobj = makeTestFObj();
+ final AbstractRelativeSpace property = createProperty(DtSpace.Component.MINIMUM, "3.5pt");
+
+ final int min = property.getValue(STD_FO_CONTEXT, LengthRange.MINIMUM, testFobj);
+ assertEquals(3500, min);
+ final int opt = property.getValue(STD_FO_CONTEXT, LengthRange.OPTIMUM, testFobj);
+ assertEquals(AbstractRelativeSpace.INITIAL_OPTIMUM, opt);
+ final int max = property.getValue(STD_FO_CONTEXT, LengthRange.MAXIMUM, testFobj);
+ assertEquals(AbstractRelativeSpace.INITIAL_MAXIMUM, max);
+ final Conditionality conditionality = property.getConditionality();
+ assertEquals(AbstractRelativeSpace.INITIAL_CONDITIONALITY, conditionality);
+ final int precedence = property.getPrecedence();
+ assertEquals(AbstractRelativeSpace.INITIAL_PRECEDENCE, precedence);
+ }
+
+ /**
+ * Test of setting the optimum value only.
+ * @throws PropertyException Not expected here.
+ */
+ @Test
+ public void testSettingOptimumOnly() throws PropertyException {
+ final FoObj testFobj = makeTestFObj();
+ final AbstractRelativeSpace property = createProperty(DtSpace.Component.OPTIMUM, "18pt");
+
+ final int min = property.getValue(STD_FO_CONTEXT, LengthRange.MINIMUM, testFobj);
+ assertEquals(AbstractRelativeSpace.INITIAL_MINIMUM, min);
+ final int opt = property.getValue(STD_FO_CONTEXT, LengthRange.OPTIMUM, testFobj);
+ assertEquals(18000, opt);
+ final int max = property.getValue(STD_FO_CONTEXT, LengthRange.MAXIMUM, testFobj);
+ assertEquals(AbstractRelativeSpace.INITIAL_MAXIMUM, max);
+ final Conditionality conditionality = property.getConditionality();
+ assertEquals(AbstractRelativeSpace.INITIAL_CONDITIONALITY, conditionality);
+ final int precedence = property.getPrecedence();
+ assertEquals(AbstractRelativeSpace.INITIAL_PRECEDENCE, precedence);
+ }
+
+ /**
+ * Test of setting the maximum value only.
+ * @throws PropertyException Not expected here.
+ */
+ @Test
+ public void testSettingMaximumOnly() throws PropertyException {
+ final FoObj testFobj = makeTestFObj();
+ final AbstractRelativeSpace property = createProperty(DtSpace.Component.MAXIMUM, "22.5pt");
+
+ final int min = property.getValue(STD_FO_CONTEXT, LengthRange.MINIMUM, testFobj);
+ assertEquals(AbstractRelativeSpace.INITIAL_MINIMUM, min);
+ final int opt = property.getValue(STD_FO_CONTEXT, LengthRange.OPTIMUM, testFobj);
+ assertEquals(AbstractRelativeSpace.INITIAL_OPTIMUM, opt);
+ final int max = property.getValue(STD_FO_CONTEXT, LengthRange.MAXIMUM, testFobj);
+ assertEquals(22500, max);
+ final Conditionality conditionality = property.getConditionality();
+ assertEquals(AbstractRelativeSpace.INITIAL_CONDITIONALITY, conditionality);
+ final int precedence = property.getPrecedence();
+ assertEquals(AbstractRelativeSpace.INITIAL_PRECEDENCE, precedence);
+ }
+
+ /**
+ * Test of setting the conditionality value only.
+ * @throws PropertyException Not expected here.
+ */
+ @Test
+ public void testSettingConditionalityOnly() throws PropertyException {
+ final FoObj testFobj = makeTestFObj();
+ final AbstractRelativeSpace property = createProperty(DtSpace.Component.CONDITIONALITY, "retain");
+
+ final int min = property.getValue(STD_FO_CONTEXT, LengthRange.MINIMUM, testFobj);
+ assertEquals(AbstractRelativeSpace.INITIAL_MINIMUM, min);
+ final int opt = property.getValue(STD_FO_CONTEXT, LengthRange.OPTIMUM, testFobj);
+ assertEquals(AbstractRelativeSpace.INITIAL_OPTIMUM, opt);
+ final int max = property.getValue(STD_FO_CONTEXT, LengthRange.MAXIMUM, testFobj);
+ assertEquals(AbstractRelativeSpace.INITIAL_MAXIMUM, max);
+ final Conditionality conditionality = property.getConditionality();
+ assertEquals(Conditionality.RETAIN, conditionality);
+ final int precedence = property.getPrecedence();
+ assertEquals(AbstractRelativeSpace.INITIAL_PRECEDENCE, precedence);
+ }
+
+ /**
+ * Test of setting the precedence value only.
+ * @throws PropertyException Not expected here.
+ */
+ @Test
+ public void testSettingPrecedenceOnly() throws PropertyException {
+ final FoObj testFobj = makeTestFObj();
+ final AbstractRelativeSpace property = createProperty(DtSpace.Component.PRECEDENCE, "5");
+
+ final int min = property.getValue(STD_FO_CONTEXT, LengthRange.MINIMUM, testFobj);
+ assertEquals(AbstractRelativeSpace.INITIAL_MINIMUM, min);
+ final int opt = property.getValue(STD_FO_CONTEXT, LengthRange.OPTIMUM, testFobj);
+ assertEquals(AbstractRelativeSpace.INITIAL_OPTIMUM, opt);
+ final int max = property.getValue(STD_FO_CONTEXT, LengthRange.MAXIMUM, testFobj);
+ assertEquals(AbstractRelativeSpace.INITIAL_MAXIMUM, max);
+ final Conditionality conditionality = property.getConditionality();
+ assertEquals(AbstractRelativeSpace.INITIAL_CONDITIONALITY, conditionality);
+ final int precedence = property.getPrecedence();
+ assertEquals(5, precedence);
+ }
+
+ /**
+ * Test of setting the short-form value only.
+ * @throws PropertyException Not expected here.
+ */
+ @Test
+ public void testSettingShortFormOnly() throws PropertyException {
+ final FoObj testFobj = makeTestFObj();
+ final AbstractRelativeSpace property = createProperty(DtSpace.Component.SHORT_FORM, "11pt");
+
+ final int min = property.getValue(STD_FO_CONTEXT, LengthRange.MINIMUM, testFobj);
+ assertEquals(11000, min);
+ final int opt = property.getValue(STD_FO_CONTEXT, LengthRange.OPTIMUM, testFobj);
+ assertEquals(11000, opt);
+ final int max = property.getValue(STD_FO_CONTEXT, LengthRange.MAXIMUM, testFobj);
+ assertEquals(11000, max);
+ final Conditionality conditionality = property.getConditionality();
+ assertEquals(AbstractRelativeSpace.INITIAL_CONDITIONALITY, conditionality);
+ final int precedence = property.getPrecedence();
+ assertEquals(AbstractRelativeSpace.INITIAL_PRECEDENCE, precedence);
+ }
+
}
Modified: trunk/foray/foray-fotree/src/test/java/org/foray/fotree/fo/prop/SpaceAfterTests.java
===================================================================
--- trunk/foray/foray-fotree/src/test/java/org/foray/fotree/fo/prop/SpaceAfterTests.java 2025-05-07 12:21:33 UTC (rev 13627)
+++ trunk/foray/foray-fotree/src/test/java/org/foray/fotree/fo/prop/SpaceAfterTests.java 2025-05-07 16:28:56 UTC (rev 13628)
@@ -43,8 +43,9 @@
}
@Override
- protected PdSpaceAfter createProperty(final String attributeValue) throws PropertyException {
- final PdSpaceAfter property = new PdSpaceAfter("", attributeValue);
+ protected PdSpaceAfter createProperty(final String fullPropertyName, final String attributeValue)
+ throws PropertyException {
+ final PdSpaceAfter property = new PdSpaceAfter(fullPropertyName, attributeValue);
return property;
}
Modified: trunk/foray/foray-fotree/src/test/java/org/foray/fotree/fo/prop/SpaceBeforeTests.java
===================================================================
--- trunk/foray/foray-fotree/src/test/java/org/foray/fotree/fo/prop/SpaceBeforeTests.java 2025-05-07 12:21:33 UTC (rev 13627)
+++ trunk/foray/foray-fotree/src/test/java/org/foray/fotree/fo/prop/SpaceBeforeTests.java 2025-05-07 16:28:56 UTC (rev 13628)
@@ -43,8 +43,9 @@
}
@Override
- protected PdSpaceBefore createProperty(final String attributeValue) throws PropertyException {
- final PdSpaceBefore property = new PdSpaceBefore("", attributeValue);
+ protected PdSpaceBefore createProperty(final String fullPropertyName, final String attributeValue)
+ throws PropertyException {
+ final PdSpaceBefore property = new PdSpaceBefore(fullPropertyName, attributeValue);
return property;
}
Modified: trunk/foray/foray-fotree/src/test/java/org/foray/fotree/fo/prop/SpaceEndTests.java
===================================================================
--- trunk/foray/foray-fotree/src/test/java/org/foray/fotree/fo/prop/SpaceEndTests.java 2025-05-07 12:21:33 UTC (rev 13627)
+++ trunk/foray/foray-fotree/src/test/java/org/foray/fotree/fo/prop/SpaceEndTests.java 2025-05-07 16:28:56 UTC (rev 13628)
@@ -43,8 +43,9 @@
}
@Override
- protected PdSpaceEnd createProperty(final String attributeValue) throws PropertyException {
- final PdSpaceEnd property = new PdSpaceEnd("", attributeValue);
+ protected PdSpaceEnd createProperty(final String fullPropertyName, final String attributeValue)
+ throws PropertyException {
+ final PdSpaceEnd property = new PdSpaceEnd(fullPropertyName, attributeValue);
return property;
}
Modified: trunk/foray/foray-fotree/src/test/java/org/foray/fotree/fo/prop/SpaceStartTests.java
===================================================================
--- trunk/foray/foray-fotree/src/test/java/org/foray/fotree/fo/prop/SpaceStartTests.java 2025-05-07 12:21:33 UTC (rev 13627)
+++ trunk/foray/foray-fotree/src/test/java/org/foray/fotree/fo/prop/SpaceStartTests.java 2025-05-07 16:28:56 UTC (rev 13628)
@@ -43,8 +43,9 @@
}
@Override
- protected PdSpaceStart createProperty(final String attributeValue) throws PropertyException {
- final PdSpaceStart property = new PdSpaceStart("", attributeValue);
+ protected PdSpaceStart createProperty(final String fullPropertyName, final String attributeValue)
+ throws PropertyException {
+ final PdSpaceStart property = new PdSpaceStart(fullPropertyName, attributeValue);
return property;
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <vic...@us...> - 2025-05-07 12:22:01
|
Revision: 13627
http://sourceforge.net/p/foray/code/13627
Author: victormote
Date: 2025-05-07 12:21:33 +0000 (Wed, 07 May 2025)
Log Message:
-----------
Fix some recently revealed Checkstyle complaints.
Modified Paths:
--------------
trunk/foray/foray-common/src/main/java/org/foray/common/ComparablePlus.java
trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/BaseAxisTableHandler.java
trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/BaseCoordTableHandler.java
trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/BaseMinMaxTableHandler.java
trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/BaseScriptTableHandler.java
trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/BaseTableHandler.java
trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/BaseValuesTableHandler.java
trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/Cmap00TableHandler.java
trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/Cmap04TableHandler.java
trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/Cmap06TableHandler.java
trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/Cmap12TableHandler.java
trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/CmapTableHandler.java
trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/Coverage01TableHandler.java
trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/Coverage02TableHandler.java
trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/FeatureListTableHandler.java
trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/FeatureTableHandler.java
trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/GsubLookup04x01Handler.java
trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/GsubTableHandler.java
trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/HeadTableHandler.java
trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/HheaTableHandler.java
trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/HmtxTableHandler.java
trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/Kern00TableHandler.java
trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/Kern02TableHandler.java
trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/KernTableHandler.java
trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/LangSysTableHandler.java
trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/LookupListTableHandler.java
trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/LookupTableHandler.java
trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/MaxpTableHandler.java
trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/NameTableHandler.java
trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/Os2TableHandler.java
trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/PcltTableHandler.java
trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/PostTableHandler.java
trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/ScriptListTableHandler.java
trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/ScriptTableHandler.java
trunk/foray/foray-fotree/src/main/java/org/foray/fotree/value/PropertyValue.java
trunk/foray/foray-xml/src/main/java/org/foray/xml/StaxEventIteratorReader.java
Modified: trunk/foray/foray-common/src/main/java/org/foray/common/ComparablePlus.java
===================================================================
--- trunk/foray/foray-common/src/main/java/org/foray/common/ComparablePlus.java 2025-05-07 11:50:05 UTC (rev 13626)
+++ trunk/foray/foray-common/src/main/java/org/foray/common/ComparablePlus.java 2025-05-07 12:21:33 UTC (rev 13627)
@@ -38,7 +38,7 @@
* @param o The object to be compared to this.
* @return True if and only if this is equal to {@code o}.
*/
- default boolean isEqualTo(T o) {
+ default boolean isEqualTo(final T o) {
return compareTo(o) == 0;
}
@@ -47,7 +47,7 @@
* @param o The object to be compared to this.
* @return True if and only if this is NOT equal to {@code o}.
*/
- default boolean isNotEqualTo(T o) {
+ default boolean isNotEqualTo(final T o) {
return compareTo(o) != 0;
}
@@ -56,7 +56,7 @@
* @param o The object to be compared to this.
* @return True if and only if this is greater than {@code o}.
*/
- default boolean isGreaterThan(T o) {
+ default boolean isGreaterThan(final T o) {
return compareTo(o) > 0;
}
@@ -65,7 +65,7 @@
* @param o The object to be compared to this.
* @return True if and only if this is greater than or equal to {@code o}.
*/
- default boolean isGreaterThanOrEqualTo(T o) {
+ default boolean isGreaterThanOrEqualTo(final T o) {
return compareTo(o) >= 0;
}
@@ -74,7 +74,7 @@
* @param o The object to be compared to this.
* @return True if and only if this is less than {@code o}.
*/
- default boolean isLessThan(T o) {
+ default boolean isLessThan(final T o) {
return compareTo(o) < 0;
}
@@ -83,7 +83,7 @@
* @param o The object to be compared to this.
* @return True if and only if this is less than or equal to {@code o}.
*/
- default boolean isLessThanOrEqualTo(T o) {
+ default boolean isLessThanOrEqualTo(final T o) {
return compareTo(o) <= 0;
}
Modified: trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/BaseAxisTableHandler.java
===================================================================
--- trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/BaseAxisTableHandler.java 2025-05-07 11:50:05 UTC (rev 13626)
+++ trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/BaseAxisTableHandler.java 2025-05-07 12:21:33 UTC (rev 13627)
@@ -36,20 +36,20 @@
*/
public interface BaseAxisTableHandler extends FontContentHandler {
- default void baseTagListOffset(short value) { return; }
- default void baseScriptListOffset(short value) { return; }
+ default void baseTagListOffset(final short value) { return; }
+ default void baseScriptListOffset(final short value) { return; }
// ********** Base Tag List Subtable **********
- default void baseTagCount(short value) { return; }
- default void baselineTag(String value) { return; }
+ default void baseTagCount(final short value) { return; }
+ default void baselineTag(final String value) { return; }
// ********** Base Script List Subtable **********
- default void baseScriptCount(short value) { return; }
+ default void baseScriptCount(final short value) { return; }
- default void baseScriptTag(String value) { return; }
- default void baseScriptOffset(short value) { return; }
+ default void baseScriptTag(final String value) { return; }
+ default void baseScriptOffset(final short value) { return; }
default BaseScriptTableHandler startScriptTable() { return null; }
}
Modified: trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/BaseCoordTableHandler.java
===================================================================
--- trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/BaseCoordTableHandler.java 2025-05-07 11:50:05 UTC (rev 13626)
+++ trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/BaseCoordTableHandler.java 2025-05-07 12:21:33 UTC (rev 13627)
@@ -36,11 +36,11 @@
*/
public interface BaseCoordTableHandler extends FontContentHandler {
- default void format(short value) { return; }
- default void coordinate(short value) { return; }
+ default void format(final short value) { return; }
+ default void coordinate(final short value) { return; }
- default void referenceGlyph(short value) { return; }
- default void baseCoordPoint(short value) { return; }
+ default void referenceGlyph(final short value) { return; }
+ default void baseCoordPoint(final short value) { return; }
default DeviceTableHandler startDeviceTable() { return null; }
default VariationIndexTableHandler startVariationIndexTable() { return null; }
Modified: trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/BaseMinMaxTableHandler.java
===================================================================
--- trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/BaseMinMaxTableHandler.java 2025-05-07 11:50:05 UTC (rev 13626)
+++ trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/BaseMinMaxTableHandler.java 2025-05-07 12:21:33 UTC (rev 13627)
@@ -36,19 +36,19 @@
*/
public interface BaseMinMaxTableHandler extends FontContentHandler {
- default void minCoordOffset(short value) { return; }
+ default void minCoordOffset(final short value) { return; }
default BaseCoordTableHandler startMinCoordTable() { return null; }
- default void maxCoordOffset(short value) { return; }
+ default void maxCoordOffset(final short value) { return; }
default BaseCoordTableHandler startMaxCoordTable() { return null; }
- default void featMinMaxCount(short value) { return; }
+ default void featMinMaxCount(final short value) { return; }
- default void featureTag(String value) { return; }
+ default void featureTag(final String value) { return; }
- default void featureMinCoordOffset(short value) { return; }
+ default void featureMinCoordOffset(final short value) { return; }
default BaseCoordTableHandler startFeatureMinCoordTable() { return null; }
- default void featureMaxCoordOffset(short value) { return; }
+ default void featureMaxCoordOffset(final short value) { return; }
default BaseCoordTableHandler startFeatureMaxCoordTable() { return null; }
}
Modified: trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/BaseScriptTableHandler.java
===================================================================
--- trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/BaseScriptTableHandler.java 2025-05-07 11:50:05 UTC (rev 13626)
+++ trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/BaseScriptTableHandler.java 2025-05-07 12:21:33 UTC (rev 13627)
@@ -36,12 +36,12 @@
*/
public interface BaseScriptTableHandler extends FontContentHandler {
- default void baseValuesOffset(short value) { return; }
- default void defaultMinMaxOffset(short value) { return; }
- default void baseLangSysCount(short value) { return; }
+ default void baseValuesOffset(final short value) { return; }
+ default void defaultMinMaxOffset(final short value) { return; }
+ default void baseLangSysCount(final short value) { return; }
- default void baseLangSysTag(String value) { return; }
- default void minMaxOffset(short value) { return; }
+ default void baseLangSysTag(final String value) { return; }
+ default void minMaxOffset(final short value) { return; }
default BaseMinMaxTableHandler startMinMaxTable() { return null; }
default BaseValuesTableHandler startValuesTable() { return null; }
Modified: trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/BaseTableHandler.java
===================================================================
--- trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/BaseTableHandler.java 2025-05-07 11:50:05 UTC (rev 13626)
+++ trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/BaseTableHandler.java 2025-05-07 12:21:33 UTC (rev 13627)
@@ -36,16 +36,16 @@
*/
public interface BaseTableHandler extends FontContentHandler {
- default void majorVersion(int value) { return; }
- default void minorVersion(int value) { return; }
+ default void majorVersion(final int value) { return; }
+ default void minorVersion(final int value) { return; }
/* BASE Table Header, Version 1.0. */
- default void horizAxisOffset(short value) { return; }
- default void vertAxisOffset(short value) { return; }
+ default void horizAxisOffset(final short value) { return; }
+ default void vertAxisOffset(final short value) { return; }
/* BASE Table Header, Version 1.1. */
- default void itemVarStoreOffset(long value) { return; }
+ default void itemVarStoreOffset(final long value) { return; }
Modified: trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/BaseValuesTableHandler.java
===================================================================
--- trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/BaseValuesTableHandler.java 2025-05-07 11:50:05 UTC (rev 13626)
+++ trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/BaseValuesTableHandler.java 2025-05-07 12:21:33 UTC (rev 13627)
@@ -36,8 +36,8 @@
*/
public interface BaseValuesTableHandler extends FontContentHandler {
- default void defaultBaselineIndex(short value) { return; }
- default void baseCoordCount(short value) { return; }
- default void baseCoordOffset(short value) { return; }
+ default void defaultBaselineIndex(final short value) { return; }
+ default void baseCoordCount(final short value) { return; }
+ default void baseCoordOffset(final short value) { return; }
default BaseCoordTableHandler startCoordTable() { return null; }
}
Modified: trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/Cmap00TableHandler.java
===================================================================
--- trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/Cmap00TableHandler.java 2025-05-07 11:50:05 UTC (rev 13626)
+++ trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/Cmap00TableHandler.java 2025-05-07 12:21:33 UTC (rev 13627)
@@ -37,11 +37,11 @@
*/
public interface Cmap00TableHandler extends FontContentHandler {
- default void format(@Unsigned short value) { return; }
- default void length(@Unsigned int value) { return; }
- default void language(@Unsigned int value) { return; }
+ default void format(final @Unsigned short value) { return; }
+ default void length(final @Unsigned int value) { return; }
+ default void language(final @Unsigned int value) { return; }
/* Being the same value, implementations will probably want to use only one of either glyphId or glyphIdArray. */
- default void glyphId(@Unsigned byte value) { return; }
- default void glyphIdArray(@Unsigned byte[] value) { return; }
+ default void glyphId(final @Unsigned byte value) { return; }
+ default void glyphIdArray(final @Unsigned byte[] value) { return; }
}
Modified: trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/Cmap04TableHandler.java
===================================================================
--- trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/Cmap04TableHandler.java 2025-05-07 11:50:05 UTC (rev 13626)
+++ trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/Cmap04TableHandler.java 2025-05-07 12:21:33 UTC (rev 13627)
@@ -37,30 +37,30 @@
*/
public interface Cmap04TableHandler extends FontContentHandler {
- default void format(@Unsigned short value) { return; }
- default void length(@Unsigned short value) { return; }
- default void language(@Unsigned short value) { return; }
- default void segCountX2(@Unsigned short value) { return; }
- default void searchRange(@Unsigned short value) { return; }
- default void entrySelector(@Unsigned short value) { return; }
- default void rangeShift(@Unsigned short value) { return; }
+ default void format(final @Unsigned short value) { return; }
+ default void length(final @Unsigned short value) { return; }
+ default void language(final @Unsigned short value) { return; }
+ default void segCountX2(final @Unsigned short value) { return; }
+ default void searchRange(final @Unsigned short value) { return; }
+ default void entrySelector(final @Unsigned short value) { return; }
+ default void rangeShift(final @Unsigned short value) { return; }
/* Being the same data, implementations will typically need only one of either 1. endCode or 2. endCodeArray. */
- default void endCode(@Unsigned short value) { return; }
- default void endCodeArray(@Unsigned short[] value) { return; }
+ default void endCode(final @Unsigned short value) { return; }
+ default void endCodeArray(final @Unsigned short[] value) { return; }
/* Being the same data, implementations will typically need only one of either 1. startCode or 2. startCodeArray. */
- default void startCode(@Unsigned short value) { return; }
- default void startCodeArray(@Unsigned short[] value) { return; }
+ default void startCode(final @Unsigned short value) { return; }
+ default void startCodeArray(final @Unsigned short[] value) { return; }
/* Being the same data, implementations will typically need only one of either 1. idDelta or 2. idDeltaArray. */
- default void idDelta(short value) { return; }
- default void idDeltaArray(short[] value) { return; }
+ default void idDelta(final short value) { return; }
+ default void idDeltaArray(final short[] value) { return; }
/* Being the same data, implementations will typically need only one of either 1. idRangeOffset or
* 2. idRangeOffsetArray. */
- default void idRangeOffset(@Unsigned short value) { return; }
- default void idRangeOffsetArray(@Unsigned short[] value) { return; }
+ default void idRangeOffset(final @Unsigned short value) { return; }
+ default void idRangeOffsetArray(final @Unsigned short[] value) { return; }
/**
* Handles the raw glyph Id array for the entire subtable (not just a single segment).
@@ -69,7 +69,7 @@
* Being the same data, implementations will typically need only one or the other.
* @param value The raw glyph Id array.
*/
- default void glyphIdArray(@Unsigned short[] value) { return; }
+ default void glyphIdArray(final @Unsigned short[] value) { return; }
/**
* Handles the computed glyph Id array for a single segment of non-contiguous elements.
@@ -78,6 +78,6 @@
* @param value The computed glyph Ids for each element in a non-contiguous segment.
* This will be null for a segment of contiguous elements.
*/
- default void computedGlyphIdArray(@Unsigned short[][] value) { return; }
+ default void computedGlyphIdArray(final @Unsigned short[][] value) { return; }
}
Modified: trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/Cmap06TableHandler.java
===================================================================
--- trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/Cmap06TableHandler.java 2025-05-07 11:50:05 UTC (rev 13626)
+++ trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/Cmap06TableHandler.java 2025-05-07 12:21:33 UTC (rev 13627)
@@ -37,13 +37,13 @@
*/
public interface Cmap06TableHandler extends FontContentHandler {
- default void format(@Unsigned short value) { return; }
- default void length(@Unsigned short value) { return; }
- default void language(@Unsigned short value) { return; }
- default void firstCode(@Unsigned short value) { return; }
- default void entryCount(@Unsigned short value) { return; }
+ default void format(final @Unsigned short value) { return; }
+ default void length(final @Unsigned short value) { return; }
+ default void language(final @Unsigned short value) { return; }
+ default void firstCode(final @Unsigned short value) { return; }
+ default void entryCount(final @Unsigned short value) { return; }
/* Being the same data, implementations likely need only of of 1. glyphId or 2. glyphIdArray. */
- default void glyphId(@Unsigned short value) { return; }
- default void glyphIdArray(@Unsigned short[] value) { return; }
+ default void glyphId(final @Unsigned short value) { return; }
+ default void glyphIdArray(final @Unsigned short[] value) { return; }
}
Modified: trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/Cmap12TableHandler.java
===================================================================
--- trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/Cmap12TableHandler.java 2025-05-07 11:50:05 UTC (rev 13626)
+++ trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/Cmap12TableHandler.java 2025-05-07 12:21:33 UTC (rev 13627)
@@ -37,12 +37,12 @@
*/
public interface Cmap12TableHandler extends FontContentHandler {
- default void format(@Unsigned short value) { return; }
- default void length(@Unsigned int value) { return; }
- default void language(@Unsigned int value) { return; }
- default void numGroups(@Unsigned int value) { return; }
+ default void format(final @Unsigned short value) { return; }
+ default void length(final @Unsigned int value) { return; }
+ default void language(final @Unsigned int value) { return; }
+ default void numGroups(final @Unsigned int value) { return; }
- default void startCharCode(@Unsigned int value) { return; }
- default void endCharCode(@Unsigned int value) { return; }
- default void startGlyphID(@Unsigned int value) { return; }
+ default void startCharCode(final @Unsigned int value) { return; }
+ default void endCharCode(final @Unsigned int value) { return; }
+ default void startGlyphID(final @Unsigned int value) { return; }
}
Modified: trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/CmapTableHandler.java
===================================================================
--- trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/CmapTableHandler.java 2025-05-07 11:50:05 UTC (rev 13626)
+++ trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/CmapTableHandler.java 2025-05-07 12:21:33 UTC (rev 13627)
@@ -37,17 +37,17 @@
*/
public interface CmapTableHandler extends FontContentHandler {
- default void version(@Unsigned short value) { return; }
- default void numTables(@Unsigned short value) { return; }
+ default void version(final @Unsigned short value) { return; }
+ default void numTables(final @Unsigned short value) { return; }
/* Encoding record. */
- default void platformID(@Unsigned short value) { return; }
- default void encodingID(@Unsigned short value) { return; }
- default void subtableOffset(@Unsigned int value) { return; }
+ default void platformID(final @Unsigned short value) { return; }
+ default void encodingID(final @Unsigned short value) { return; }
+ default void subtableOffset(final @Unsigned int value) { return; }
/* Read and return the subtable format. This is actually part of the subtable, but most clients will want to know
* which subtable format they are parsing before they start parsing it. */
- default void subtableFormat(@Unsigned short value) { return; }
+ default void subtableFormat(final @Unsigned short value) { return; }
default Cmap00TableHandler startCmap00Table() { return null; }
default Cmap04TableHandler startCmap04Table() { return null; }
@@ -59,6 +59,6 @@
* throw an exception, etc.
* @param value The numeric subtable format.
*/
- default void unsupportedSubtableFormat(@Unsigned short value) { return; }
+ default void unsupportedSubtableFormat(final @Unsigned short value) { return; }
}
Modified: trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/Coverage01TableHandler.java
===================================================================
--- trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/Coverage01TableHandler.java 2025-05-07 11:50:05 UTC (rev 13626)
+++ trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/Coverage01TableHandler.java 2025-05-07 12:21:33 UTC (rev 13627)
@@ -36,10 +36,10 @@
*/
public interface Coverage01TableHandler extends FontContentHandler {
- default void format(short value) { return; }
- default void glyphCount(short value) { return; }
+ default void format(final short value) { return; }
+ default void glyphCount(final short value) { return; }
/* The content being the same, client code probably wants only one of glyphId or glyphIdArray. */
- default void glyphId(short value) { return; }
- default void glyphIdArray(short[] value) { return; }
+ default void glyphId(final short value) { return; }
+ default void glyphIdArray(final short[] value) { return; }
}
Modified: trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/Coverage02TableHandler.java
===================================================================
--- trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/Coverage02TableHandler.java 2025-05-07 11:50:05 UTC (rev 13626)
+++ trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/Coverage02TableHandler.java 2025-05-07 12:21:33 UTC (rev 13627)
@@ -36,12 +36,12 @@
*/
public interface Coverage02TableHandler extends FontContentHandler {
- default void format(short value) { return; }
- default void rangeCount(short value) { return; }
+ default void format(final short value) { return; }
+ default void rangeCount(final short value) { return; }
- default void startGlyphID(short value) { return; }
- default void endGlyphID(short value) { return; }
- default void startCoverageIndex(short value) { return; }
+ default void startGlyphID(final short value) { return; }
+ default void endGlyphID(final short value) { return; }
+ default void startCoverageIndex(final short value) { return; }
/* TODO: Complete this. */
Modified: trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/FeatureListTableHandler.java
===================================================================
--- trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/FeatureListTableHandler.java 2025-05-07 11:50:05 UTC (rev 13626)
+++ trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/FeatureListTableHandler.java 2025-05-07 12:21:33 UTC (rev 13627)
@@ -36,10 +36,10 @@
*/
public interface FeatureListTableHandler extends FontContentHandler {
- default void featureCount(short value) { return; }
+ default void featureCount(final short value) { return; }
- default void featureTag(String value) { return; }
- default void featureOffset(short value) { return; }
+ default void featureTag(final String value) { return; }
+ default void featureOffset(final short value) { return; }
default FeatureTableHandler startFeatureTable() { return null; }
Modified: trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/FeatureTableHandler.java
===================================================================
--- trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/FeatureTableHandler.java 2025-05-07 11:50:05 UTC (rev 13626)
+++ trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/FeatureTableHandler.java 2025-05-07 12:21:33 UTC (rev 13627)
@@ -36,12 +36,12 @@
*/
public interface FeatureTableHandler extends FontContentHandler {
- default void featureParamsOffset(short value) { return; }
- default void lookupIndexCount(short value) { return; }
+ default void featureParamsOffset(final short value) { return; }
+ default void lookupIndexCount(final short value) { return; }
/* The data being the same, most applications will want to use only one of either lookupListIndex or
* lookupListIndexes. */
- default void lookupListIndex(short value) { return; }
- default void lookupListIndexes(short[] value) { return; }
+ default void lookupListIndex(final short value) { return; }
+ default void lookupListIndexes(final short[] value) { return; }
}
Modified: trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/GsubLookup04x01Handler.java
===================================================================
--- trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/GsubLookup04x01Handler.java 2025-05-07 11:50:05 UTC (rev 13626)
+++ trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/GsubLookup04x01Handler.java 2025-05-07 12:21:33 UTC (rev 13627)
@@ -38,20 +38,20 @@
*/
public interface GsubLookup04x01Handler extends FontContentHandler {
- default void format(@Unsigned short value) { return; }
- default void coverageOffset(@Unsigned short value) { return; }
+ default void format(final @Unsigned short value) { return; }
+ default void coverageOffset(final @Unsigned short value) { return; }
- default void ligatureSetCount(@Unsigned short value) { return; }
- default void ligatureSetOffset(@Unsigned short value) { return; }
+ default void ligatureSetCount(final @Unsigned short value) { return; }
+ default void ligatureSetOffset(final @Unsigned short value) { return; }
default Coverage01TableHandler startCoverage01Table() { return null; }
default Coverage02TableHandler startCoverage02Table() { return null; }
- default void ligatureCount(@Unsigned short value) { return; }
- default void ligatureOffset(@Unsigned short value) { return; }
+ default void ligatureCount(final @Unsigned short value) { return; }
+ default void ligatureOffset(final @Unsigned short value) { return; }
- default void ligatureGlyph(@Unsigned short value) { return; }
- default void componentCount(@Unsigned short value) { return; }
- default void componentGlyphID(@Unsigned short value) { return; }
+ default void ligatureGlyph(final @Unsigned short value) { return; }
+ default void componentCount(final @Unsigned short value) { return; }
+ default void componentGlyphID(final @Unsigned short value) { return; }
}
Modified: trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/GsubTableHandler.java
===================================================================
--- trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/GsubTableHandler.java 2025-05-07 11:50:05 UTC (rev 13626)
+++ trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/GsubTableHandler.java 2025-05-07 12:21:33 UTC (rev 13627)
@@ -38,14 +38,14 @@
*/
public interface GsubTableHandler extends FontContentHandler {
- default void majorVersion(@Unsigned short value) { return; }
- default void minorVersion(@Unsigned short value) { return; }
+ default void majorVersion(final @Unsigned short value) { return; }
+ default void minorVersion(final @Unsigned short value) { return; }
- default void scriptListOffset(@Unsigned short value) { return; }
- default void featureListOffset(@Unsigned short value) { return; }
- default void lookupListOffset(@Unsigned short value) { return; }
+ default void scriptListOffset(final @Unsigned short value) { return; }
+ default void featureListOffset(final @Unsigned short value) { return; }
+ default void lookupListOffset(final @Unsigned short value) { return; }
- default void featureVariationsOffset(@Unsigned int value) { return; }
+ default void featureVariationsOffset(final @Unsigned int value) { return; }
default ScriptListTableHandler startScriptList() { return null; }
default FeatureListTableHandler startFeatureList() { return null; }
Modified: trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/HeadTableHandler.java
===================================================================
--- trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/HeadTableHandler.java 2025-05-07 11:50:05 UTC (rev 13626)
+++ trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/HeadTableHandler.java 2025-05-07 12:21:33 UTC (rev 13627)
@@ -38,26 +38,26 @@
*/
public interface HeadTableHandler extends FontContentHandler {
- default void majorVersion(short value) { return; }
+ default void majorVersion(final short value) { return; }
/* Head Table, Version 1.0. */
- default void minorVersion(int value) { return; }
- default void fontRevision(BigDecimal value) { return; }
- default void checksumAdjustment(long value) { return; }
- default void magicNumber(long value) { return; }
- default void flags(int value) { return; }
- default void unitsPerEm(int value) { return; }
- default void created(long value) { return; }
- default void modifed(long value) { return; }
+ default void minorVersion(final int value) { return; }
+ default void fontRevision(final BigDecimal value) { return; }
+ default void checksumAdjustment(final long value) { return; }
+ default void magicNumber(final long value) { return; }
+ default void flags(final int value) { return; }
+ default void unitsPerEm(final int value) { return; }
+ default void created(final long value) { return; }
+ default void modifed(final long value) { return; }
- default void xMin(short value) { return; }
- default void yMin(short value) { return; }
- default void xMax(short value) { return; }
- default void yMax(short value) { return; }
+ default void xMin(final short value) { return; }
+ default void yMin(final short value) { return; }
+ default void xMax(final short value) { return; }
+ default void yMax(final short value) { return; }
- default void macStyle(int value) { return; }
- default void lowestRecPPEM(int value) { return; }
- default void fontDirectionHint(short value) { return; }
- default void indexToLocFormat(short value) { return; }
- default void glyphDataFormat(short value) { return; }
+ default void macStyle(final int value) { return; }
+ default void lowestRecPPEM(final int value) { return; }
+ default void fontDirectionHint(final short value) { return; }
+ default void indexToLocFormat(final short value) { return; }
+ default void glyphDataFormat(final short value) { return; }
}
Modified: trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/HheaTableHandler.java
===================================================================
--- trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/HheaTableHandler.java 2025-05-07 11:50:05 UTC (rev 13626)
+++ trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/HheaTableHandler.java 2025-05-07 12:21:33 UTC (rev 13627)
@@ -39,20 +39,20 @@
public interface HheaTableHandler extends FontContentHandler {
/* Hhea Table, Version 1.0. */
- default void majorVersion(@Unsigned short value) { return; }
- default void minorVersion(@Unsigned short value) { return; }
+ default void majorVersion(final @Unsigned short value) { return; }
+ default void minorVersion(final @Unsigned short value) { return; }
- default void ascender(short value) { return; }
- default void descender(short value) { return; }
- default void lineGap(short value) { return; }
- default void advanceWidthMax(@Unsigned short value) { return; }
- default void minLeftSideBearing(short value) { return; }
- default void minRightSideBearing(short value) { return; }
- default void xMaxExtent(short value) { return; }
- default void caretSlopeRise(short value) { return; }
- default void caretSlopeRun(short value) { return; }
- default void caretOffset(short value) { return; }
+ default void ascender(final short value) { return; }
+ default void descender(final short value) { return; }
+ default void lineGap(final short value) { return; }
+ default void advanceWidthMax(final @Unsigned short value) { return; }
+ default void minLeftSideBearing(final short value) { return; }
+ default void minRightSideBearing(final short value) { return; }
+ default void xMaxExtent(final short value) { return; }
+ default void caretSlopeRise(final short value) { return; }
+ default void caretSlopeRun(final short value) { return; }
+ default void caretOffset(final short value) { return; }
- default void metricDataFormat(short value) { return; }
- default void numberOfHMetrics(@Unsigned short value) { return; }
+ default void metricDataFormat(final short value) { return; }
+ default void numberOfHMetrics(final @Unsigned short value) { return; }
}
Modified: trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/HmtxTableHandler.java
===================================================================
--- trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/HmtxTableHandler.java 2025-05-07 11:50:05 UTC (rev 13626)
+++ trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/HmtxTableHandler.java 2025-05-07 12:21:33 UTC (rev 13627)
@@ -54,9 +54,9 @@
*/
int getNumberOfHMetrics();
- default void advanceWidth(@Unsigned short value) { return; }
- default void lsb(short value) { return; }
+ default void advanceWidth(final @Unsigned short value) { return; }
+ default void lsb(final short value) { return; }
- default void leftSideBearing(short value) { return; }
- default void leftSideBearings(short[] value) { return; }
+ default void leftSideBearing(final short value) { return; }
+ default void leftSideBearings(final short[] value) { return; }
}
Modified: trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/Kern00TableHandler.java
===================================================================
--- trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/Kern00TableHandler.java 2025-05-07 11:50:05 UTC (rev 13626)
+++ trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/Kern00TableHandler.java 2025-05-07 12:21:33 UTC (rev 13627)
@@ -36,16 +36,16 @@
*/
public interface Kern00TableHandler extends FontContentHandler {
- default void version(short value) { return; }
- default void length(short value) { return; }
- default void coverage(short value) { return; }
+ default void version(final short value) { return; }
+ default void length(final short value) { return; }
+ default void coverage(final short value) { return; }
- default void nPairs(short value) { return; }
- default void searchRange(short value) { return; }
- default void entrySelector(short value) { return; }
- default void rangeShift(short value) { return; }
+ default void nPairs(final short value) { return; }
+ default void searchRange(final short value) { return; }
+ default void entrySelector(final short value) { return; }
+ default void rangeShift(final short value) { return; }
- default void left(short value) { return; }
- default void right(short value) { return; }
- default void value(short value) { return; }
+ default void left(final short value) { return; }
+ default void right(final short value) { return; }
+ default void value(final short value) { return; }
}
Modified: trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/Kern02TableHandler.java
===================================================================
--- trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/Kern02TableHandler.java 2025-05-07 11:50:05 UTC (rev 13626)
+++ trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/Kern02TableHandler.java 2025-05-07 12:21:33 UTC (rev 13627)
@@ -36,9 +36,9 @@
*/
public interface Kern02TableHandler extends FontContentHandler {
- default void version(short value) { return; }
- default void length(short value) { return; }
- default void coverage(short value) { return; }
+ default void version(final short value) { return; }
+ default void length(final short value) { return; }
+ default void coverage(final short value) { return; }
/* TODO: Complete this. */
Modified: trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/KernTableHandler.java
===================================================================
--- trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/KernTableHandler.java 2025-05-07 11:50:05 UTC (rev 13626)
+++ trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/KernTableHandler.java 2025-05-07 12:21:33 UTC (rev 13627)
@@ -36,8 +36,8 @@
*/
public interface KernTableHandler extends FontContentHandler {
- default void version(short value) { return; }
- default void nTables(short value) { return; }
+ default void version(final short value) { return; }
+ default void nTables(final short value) { return; }
default Kern00TableHandler startKern00Table() { return null; }
default Kern02TableHandler startKern02Table() { return null; }
Modified: trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/LangSysTableHandler.java
===================================================================
--- trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/LangSysTableHandler.java 2025-05-07 11:50:05 UTC (rev 13626)
+++ trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/LangSysTableHandler.java 2025-05-07 12:21:33 UTC (rev 13627)
@@ -38,11 +38,11 @@
*/
public interface LangSysTableHandler extends FontContentHandler {
- default void lookupOrderOffset(@Unsigned short value) { return; }
- default void requiredFeatureIndex(@Unsigned short value) { return; }
- default void featureIndexCount(@Unsigned short value) { return; }
+ default void lookupOrderOffset(final @Unsigned short value) { return; }
+ default void requiredFeatureIndex(final @Unsigned short value) { return; }
+ default void featureIndexCount(final @Unsigned short value) { return; }
- default void featureIndex(@Unsigned short value) { return; }
- default void featureIndexes(@Unsigned short[] value) { return; }
+ default void featureIndex(final @Unsigned short value) { return; }
+ default void featureIndexes(final @Unsigned short[] value) { return; }
}
Modified: trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/LookupListTableHandler.java
===================================================================
--- trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/LookupListTableHandler.java 2025-05-07 11:50:05 UTC (rev 13626)
+++ trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/LookupListTableHandler.java 2025-05-07 12:21:33 UTC (rev 13627)
@@ -36,8 +36,8 @@
*/
public interface LookupListTableHandler extends FontContentHandler {
- default void lookupCount(short value) { return; }
- default void lookupOffset(short value) { return; }
+ default void lookupCount(final short value) { return; }
+ default void lookupOffset(final short value) { return; }
default LookupTableHandler startLookupTable() { return null; }
}
Modified: trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/LookupTableHandler.java
===================================================================
--- trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/LookupTableHandler.java 2025-05-07 11:50:05 UTC (rev 13626)
+++ trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/LookupTableHandler.java 2025-05-07 12:21:33 UTC (rev 13627)
@@ -36,11 +36,11 @@
*/
public interface LookupTableHandler extends FontContentHandler {
- default void lookupType(LookupTableParser.LookupType value) { return; }
- default void lookupFlag(short value) { return; }
- default void subTableCount(short value) { return; }
- default void subtableOffset(short value) { return; }
- default void markFilteringSet(short value) { return; }
+ default void lookupType(final LookupTableParser.LookupType value) { return; }
+ default void lookupFlag(final short value) { return; }
+ default void subTableCount(final short value) { return; }
+ default void subtableOffset(final short value) { return; }
+ default void markFilteringSet(final short value) { return; }
default GsubLookup01x01Handler startGsubLookup01x01() { return null; }
default GsubLookup01x02Handler startGsubLookup01x02() { return null; }
Modified: trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/MaxpTableHandler.java
===================================================================
--- trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/MaxpTableHandler.java 2025-05-07 11:50:05 UTC (rev 13626)
+++ trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/MaxpTableHandler.java 2025-05-07 12:21:33 UTC (rev 13627)
@@ -38,21 +38,21 @@
*/
public interface MaxpTableHandler extends FontContentHandler {
- default void majorVersion(@Unsigned short version) { return; }
- default void minorVersion(@Unsigned short version) { return; }
- default void numGlyphs(@Unsigned short version) { return; }
+ default void majorVersion(final @Unsigned short version) { return; }
+ default void minorVersion(final @Unsigned short version) { return; }
+ default void numGlyphs(final @Unsigned short version) { return; }
- default void maxPoints(@Unsigned short version) { return; }
- default void maxContours(@Unsigned short version) { return; }
- default void maxCompositePoints(@Unsigned short version) { return; }
- default void maxCompositeContours(@Unsigned short version) { return; }
- default void maxZones(@Unsigned short version) { return; }
- default void maxTwilightPoints(@Unsigned short version) { return; }
- default void maxStorage(@Unsigned short version) { return; }
- default void maxFunctionDefs(@Unsigned short version) { return; }
- default void maxInstructionDefs(@Unsigned short version) { return; }
- default void maxStackElements(@Unsigned short version) { return; }
- default void maxSizeOfInstructions(@Unsigned short version) { return; }
- default void maxComponentElements(@Unsigned short version) { return; }
- default void maxComponentDepth(@Unsigned short version) { return; }
+ default void maxPoints(final @Unsigned short version) { return; }
+ default void maxContours(final @Unsigned short version) { return; }
+ default void maxCompositePoints(final @Unsigned short version) { return; }
+ default void maxCompositeContours(final @Unsigned short version) { return; }
+ default void maxZones(final @Unsigned short version) { return; }
+ default void maxTwilightPoints(final @Unsigned short version) { return; }
+ default void maxStorage(final @Unsigned short version) { return; }
+ default void maxFunctionDefs(final @Unsigned short version) { return; }
+ default void maxInstructionDefs(final @Unsigned short version) { return; }
+ default void maxStackElements(final @Unsigned short version) { return; }
+ default void maxSizeOfInstructions(final @Unsigned short version) { return; }
+ default void maxComponentElements(final @Unsigned short version) { return; }
+ default void maxComponentDepth(final @Unsigned short version) { return; }
}
Modified: trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/NameTableHandler.java
===================================================================
--- trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/NameTableHandler.java 2025-05-07 11:50:05 UTC (rev 13626)
+++ trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/NameTableHandler.java 2025-05-07 12:21:33 UTC (rev 13627)
@@ -38,23 +38,23 @@
*/
public interface NameTableHandler extends FontContentHandler {
- default void version(@Unsigned short value) { return; }
- default void count(@Unsigned short value) { return; }
- default void storageOffset(@Unsigned short value) { return; }
+ default void version(final @Unsigned short value) { return; }
+ default void count(final @Unsigned short value) { return; }
+ default void storageOffset(final @Unsigned short value) { return; }
/* Name record. */
- default void platformId(@Unsigned short value) { return; }
- default void encodingId(@Unsigned short value) { return; }
- default void languageId(@Unsigned short value) { return; }
- default void nameId(@Unsigned short value) { return; }
- default void nameRecordByteLength(@Unsigned short value) { return; }
- default void stringOffset(@Unsigned short value) { return; }
- default void name(String value) { return; }
+ default void platformId(final @Unsigned short value) { return; }
+ default void encodingId(final @Unsigned short value) { return; }
+ default void languageId(final @Unsigned short value) { return; }
+ default void nameId(final @Unsigned short value) { return; }
+ default void nameRecordByteLength(final @Unsigned short value) { return; }
+ default void stringOffset(final @Unsigned short value) { return; }
+ default void name(final String value) { return; }
- default void langTagCount(@Unsigned short value) { return; }
+ default void langTagCount(final @Unsigned short value) { return; }
/* LangTagRecord. */
- default void langTagRecordLength(@Unsigned short value) { return; }
- default void langTagRecordOffset(@Unsigned short value) { return; }
- default void langTag(String value) { return; }
+ default void langTagRecordLength(final @Unsigned short value) { return; }
+ default void langTagRecordOffset(final @Unsigned short value) { return; }
+ default void langTag(final String value) { return; }
}
Modified: trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/Os2TableHandler.java
===================================================================
--- trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/Os2TableHandler.java 2025-05-07 11:50:05 UTC (rev 13626)
+++ trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/Os2TableHandler.java 2025-05-07 12:21:33 UTC (rev 13627)
@@ -36,55 +36,55 @@
*/
public interface Os2TableHandler extends FontContentHandler {
- default void version(short value) { return; }
+ default void version(final short value) { return; }
/* OS/2 Table, Version 0. */
- default void xAvgCharWidth(short value) { return; }
- default void usWeightClass(int value) { return; }
- default void usWidthClass(int version) { return; }
- default void fsType(int value) { return; }
- default void ySubscriptXSize(short value) { return; }
- default void ySubscriptYSize(short value) { return; }
- default void ySubscriptXOffset(short value) { return; }
- default void ySubscriptYOffset(short value) { return; }
- default void ySuperscriptXSize(short value) { return; }
- default void ySuperscriptYSize(short value) { return; }
- default void ySuperscriptXOffset(short value) { return; }
- default void ySuperscriptYOffset(short value) { return; }
- default void yStrikeoutSize(short value) { return; }
- default void yStrikeoutPosition(short value) { return; }
- default void sFamilyClass(short value) { return; }
- default void panose(byte[] value) { return; }
- default void ulUnicodeRange1(long value) { return; }
- default void ulUnicodeRange2(long value) { return; }
- default void ulUnicodeRange3(long value) { return; }
- default void ulUnicodeRange4(long value) { return; }
- default void achVendID(String value) { return; }
- default void fsSelection(int value) { return; }
- default void usFirstCharIndex(int value) { return; }
- default void usLastCharIndex(int value) { return; }
- default void sTypoAscender(short value) { return; }
- default void sTypoDescender(short value) { return; }
- default void sTypoLineGap(short value) { return; }
- default void usWinAscent(int value) { return; }
- default void usWinDescent(int value) { return; }
+ default void xAvgCharWidth(final short value) { return; }
+ default void usWeightClass(final int value) { return; }
+ default void usWidthClass(final int version) { return; }
+ default void fsType(final int value) { return; }
+ default void ySubscriptXSize(final short value) { return; }
+ default void ySubscriptYSize(final short value) { return; }
+ default void ySubscriptXOffset(final short value) { return; }
+ default void ySubscriptYOffset(final short value) { return; }
+ default void ySuperscriptXSize(final short value) { return; }
+ default void ySuperscriptYSize(final short value) { return; }
+ default void ySuperscriptXOffset(final short value) { return; }
+ default void ySuperscriptYOffset(final short value) { return; }
+ default void yStrikeoutSize(final short value) { return; }
+ default void yStrikeoutPosition(final short value) { return; }
+ default void sFamilyClass(final short value) { return; }
+ default void panose(final byte[] value) { return; }
+ default void ulUnicodeRange1(final long value) { return; }
+ default void ulUnicodeRange2(final long value) { return; }
+ default void ulUnicodeRange3(final long value) { return; }
+ default void ulUnicodeRange4(final long value) { return; }
+ default void achVendID(final String value) { return; }
+ default void fsSelection(final int value) { return; }
+ default void usFirstCharIndex(final int value) { return; }
+ default void usLastCharIndex(final int value) { return; }
+ default void sTypoAscender(final short value) { return; }
+ default void sTypoDescender(final short value) { return; }
+ default void sTypoLineGap(final short value) { return; }
+ default void usWinAscent(final int value) { return; }
+ default void usWinDescent(final int value) { return; }
/* OS/2 Table, Version 1. */
- default void ulCodePageRange1(long value) { return; }
- default void ulCodePageRange2(long value) { return; }
+ default void ulCodePageRange1(final long value) { return; }
+ default void ulCodePageRange2(final long value) { return; }
/* OS/2 Table, Version 2. Versions 3 & 4 are the same as Version 2. */
- default void sxHeight(short value) { return; }
- default void sCapHeight(short value) { return; }
- default void usDefaultChar(int value) { return; }
- default void usBreakChar(int value) { return; }
- default void usMaxContext(int value) { return; }
+ default void sxHeight(final short value) { return; }
+ default void sCapHeight(final short value) { return; }
+ default void usDefaultChar(final int value) { return; }
+ default void usBreakChar(final int value) { return; }
+ default void usMaxContext(final int value) { return; }
/* OS/2 Table, Version 5. */
- default void usLowerOpticalPointSize(int value) { return; }
- default void usUpperOpticalPointSize(int value) { return; }
+ default void usLowerOpticalPointSize(final int value) { return; }
+ default void usUpperOpticalPointSize(final int value) { return; }
}
Modified: trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/PcltTableHandler.java
===================================================================
--- trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/PcltTableHandler.java 2025-05-07 11:50:05 UTC (rev 13626)
+++ trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/PcltTableHandler.java 2025-05-07 12:21:33 UTC (rev 13627)
@@ -36,22 +36,22 @@
*/
public interface PcltTableHandler extends FontContentHandler {
- default void majorVersion(int value) { return; }
+ default void majorVersion(final int value) { return; }
/* PCLT Table, Version 1.0. */
- default void minorVersion(int value) { return; }
- default void fontNumber(long value) { return; }
+ default void minorVersion(final int value) { return; }
+ default void fontNumber(final long value) { return; }
- default void pitch(int value) { return; }
- default void xHeight(int value) { return; }
- default void style(int value) { return; }
- default void typeFamily(int value) { return; }
- default void capHeight(int value) { return; }
- default void symbolSet(int value) { return; }
- default void typeface(String value) { return; }
- default void characterComplement(String value) { return; }
- default void fileName(String value) { return; }
- default void strokeWeight(byte value) { return; }
- default void widthType(byte value) { return; }
- default void serifStyle(short value) { return; }
+ default void pitch(final int value) { return; }
+ default void xHeight(final int value) { return; }
+ default void style(final int value) { return; }
+ default void typeFamily(final int value) { return; }
+ default void capHeight(final int value) { return; }
+ default void symbolSet(final int value) { return; }
+ default void typeface(final String value) { return; }
+ default void characterComplement(final String value) { return; }
+ default void fileName(final String value) { return; }
+ default void strokeWeight(final byte value) { return; }
+ default void widthType(final byte value) { return; }
+ default void serifStyle(final short value) { return; }
}
Modified: trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/PostTableHandler.java
===================================================================
--- trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/PostTableHandler.java 2025-05-07 11:50:05 UTC (rev 13626)
+++ trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/PostTableHandler.java 2025-05-07 12:21:33 UTC (rev 13627)
@@ -38,19 +38,19 @@
*/
public interface PostTableHandler extends FontContentHandler {
- default void majorVersion(short value) { return; }
- default void minorVersion(short value) { return; }
+ default void majorVersion(final short value) { return; }
+ default void minorVersion(final short value) { return; }
- default void italicAngle(BigDecimal value) { return; }
- default void underlinePosition(short value) { return; }
- default void underlineThickness(short value) { return; }
- default void isFixedPitch(int value) { return; }
- default void minMemType42(int value) { return; }
- default void maxMemType42(int value) { return; }
- default void minMemType1(int value) { return; }
- default void maxMemType1(int value) { return; }
+ default void italicAngle(final BigDecimal value) { return; }
+ default void underlinePosition(final short value) { return; }
+ default void underlineThickness(final short value) { return; }
+ default void isFixedPitch(final int value) { return; }
+ default void minMemType42(final int value) { return; }
+ default void maxMemType42(final int value) { return; }
+ default void minMemType1(final int value) { return; }
+ default void maxMemType1(final int value) { return; }
- default void numGlyphs(short value) { return; }
- default void glyphNameIndex(short value) { return; }
- default void glyphName(String value) { return; }
+ default void numGlyphs(final short value) { return; }
+ default void glyphNameIndex(final short value) { return; }
+ default void glyphName(final String value) { return; }
}
Modified: trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/ScriptListTableHandler.java
===================================================================
--- trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/ScriptListTableHandler.java 2025-05-07 11:50:05 UTC (rev 13626)
+++ trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/ScriptListT...
[truncated message content] |
|
From: <vic...@us...> - 2025-05-07 11:50:26
|
Revision: 13626
http://sourceforge.net/p/foray/code/13626
Author: victormote
Date: 2025-05-07 11:50:05 +0000 (Wed, 07 May 2025)
Log Message:
-----------
Based on recent fix to FoKeyword, reactivate tests.
Modified Paths:
--------------
trunk/foray/foray-fotree/src/test/java/org/foray/fotree/fo/prop/RelativeSpaceTests.java
Modified: trunk/foray/foray-fotree/src/test/java/org/foray/fotree/fo/prop/RelativeSpaceTests.java
===================================================================
--- trunk/foray/foray-fotree/src/test/java/org/foray/fotree/fo/prop/RelativeSpaceTests.java 2025-05-07 11:42:01 UTC (rev 13625)
+++ trunk/foray/foray-fotree/src/test/java/org/foray/fotree/fo/prop/RelativeSpaceTests.java 2025-05-07 11:50:05 UTC (rev 13626)
@@ -35,7 +35,6 @@
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.fail;
-import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
/**
@@ -74,7 +73,6 @@
* Test of a value with an invalid keyword.
*/
@Test
- @Disabled
public void testInvalidKeyword() {
try {
createProperty("bogus");
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <vic...@us...> - 2025-05-07 11:42:26
|
Revision: 13625
http://sourceforge.net/p/foray/code/13625
Author: victormote
Date: 2025-05-07 11:42:01 +0000 (Wed, 07 May 2025)
Log Message:
-----------
Add test class for binary search in FoKeyword. Fix bug found there.
Modified Paths:
--------------
trunk/foray/foray-fotree/src/main/java/org/foray/fotree/fo/FoKeyword.java
Added Paths:
-----------
trunk/foray/foray-fotree/src/test/java/org/foray/fotree/fo/FoKeywordTests.java
Modified: trunk/foray/foray-fotree/src/main/java/org/foray/fotree/fo/FoKeyword.java
===================================================================
--- trunk/foray/foray-fotree/src/main/java/org/foray/fotree/fo/FoKeyword.java 2025-05-07 11:18:18 UTC (rev 13624)
+++ trunk/foray/foray-fotree/src/main/java/org/foray/fotree/fo/FoKeyword.java 2025-05-07 11:42:01 UTC (rev 13625)
@@ -28,6 +28,8 @@
package org.foray.fotree.fo;
+import org.foray.primitive.StringUtils;
+
/**
* An enumeration of the XSL-FO property value keywords.
* Because this list of enumerated items is searched using a binary search, it must be maintained in strict ASCII
@@ -902,7 +904,7 @@
int low = 0;
int high = VALUES.length - 1;
int mid;
- while (low != high) {
+ while (low < high) {
mid = (low + high) / 2;
final int comparison = text.compareTo(VALUES[mid].text);
if (comparison == 0) {
@@ -923,4 +925,25 @@
return null;
}
+ /**
+ * Command-line application that checks the ordering of the items.
+ * @param args The command-line args. There are none.
+ */
+ public static void main(final String[] args) {
+ final FoKeyword[] keywords = FoKeyword.VALUES;
+ String previous = StringUtils.EMPTY_STRING;
+ for (int index = 0; index < keywords.length; index ++) {
+ final FoKeyword keyword = keywords[index];
+ if (keyword.text.compareTo(previous) <= 0) {
+ /* CheckStyle: Allow System.out.print...() in main method. */
+ System.out.println("Keyword out of order: " + keyword.text);
+ /* CheckStyle: Allow System.exit() in main method. */
+ System.exit(0);
+ }
+ previous = keyword.text;
+ }
+ /* CheckStyle: Allow System.out.print...() in main method. */
+ System.out.println("Enum is properly ordered.");
+ }
+
}
Added: trunk/foray/foray-fotree/src/test/java/org/foray/fotree/fo/FoKeywordTests.java
===================================================================
--- trunk/foray/foray-fotree/src/test/java/org/foray/fotree/fo/FoKeywordTests.java (rev 0)
+++ trunk/foray/foray-fotree/src/test/java/org/foray/fotree/fo/FoKeywordTests.java 2025-05-07 11:42:01 UTC (rev 13625)
@@ -0,0 +1,64 @@
+/*
+ * Copyright 2025 The FOray Project.
+ * http://www.foray.org
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * This work is in part derived from the following work(s), used with the
+ * permission of the licensor:
+ * Apache FOP, licensed by the Apache Software Foundation
+ *
+ */
+
+/*
+ * $LastChangedRevision$
+ * $LastChangedDate$
+ * $LastChangedBy$
+ */
+
+package org.foray.fotree.fo;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import org.junit.jupiter.api.Test;
+
+/**
+ * Tests of {@link FoKeyword}, especially its binary search.
+ */
+public class FoKeywordTests {
+
+ /**
+ * Test of binary search, looking for the first item.
+ */
+ @Test
+ public void testFirstItem() {
+ assertEquals(FoKeyword.NUM_NEGATIVE_180, FoKeyword.xslValueOf("-180"));
+ }
+
+ /**
+ * Test of binary search, looking for the last item.
+ */
+ @Test
+ public void testLastItem() {
+ assertEquals(FoKeyword.XX_SMALL, FoKeyword.xslValueOf("xx-small"));
+ }
+
+ /**
+ * Test of binary search, looking for the last item.
+ */
+ @Test
+ public void testNonexistentItem() {
+ assertNull(FoKeyword.xslValueOf("bogus"));
+ }
+
+}
Property changes on: trunk/foray/foray-fotree/src/test/java/org/foray/fotree/fo/FoKeywordTests.java
___________________________________________________________________
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev
\ No newline at end of property
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <vic...@us...> - 2025-05-07 11:18:38
|
Revision: 13624
http://sourceforge.net/p/foray/code/13624
Author: victormote
Date: 2025-05-07 11:18:18 +0000 (Wed, 07 May 2025)
Log Message:
-----------
Add exception comment for use of System.out.println in main methods.
Modified Paths:
--------------
trunk/foray/foray-00-dev/config/checkstyle/checkstyle-config.xml
Modified: trunk/foray/foray-00-dev/config/checkstyle/checkstyle-config.xml
===================================================================
--- trunk/foray/foray-00-dev/config/checkstyle/checkstyle-config.xml 2025-05-06 20:41:02 UTC (rev 13623)
+++ trunk/foray/foray-00-dev/config/checkstyle/checkstyle-config.xml 2025-05-07 11:18:18 UTC (rev 13624)
@@ -43,6 +43,13 @@
<property name="influenceFormat" value="1"/>
</module>
+ <!-- Allow System.out.print... when marked as being in a main method. -->
+ <module name="SuppressWithNearbyCommentFilter">
+ <property name="commentFormat" value="CheckStyle: Allow System.out.print...\(\) in main method."/>
+ <property name="idFormat" value="RestrictSystemOutPrint"/>
+ <property name="influenceFormat" value="1"/>
+ </module>
+
<!-- Allow FOP reference when explicitly flagged as necessary. -->
<module name="SuppressWithNearbyCommentFilter">
<property name="commentFormat" value="CheckStyle: FOP Reference is necessary."/>
@@ -330,6 +337,7 @@
</module>
<module name="RegexpSinglelineJava">
+ <property name="id" value="RestrictDumpStackTrace"/>
<property name="ignoreComments" value="true"/>
<property name="format" value="printStackTrace"/>
<property name="message" value="Do not dump a stacktrace, except in void main(String[])."/>
@@ -336,6 +344,7 @@
</module>
<module name="RegexpSinglelineJava">
+ <property name="id" value="RestrictSystemOutPrint"/>
<property name="ignoreComments" value="true"/>
<property name="format" value=" System.out.print"/>
<property name="message" value="Use logging instead of System.out, except in void
@@ -343,6 +352,7 @@
</module>
<module name="RegexpSinglelineJava">
+ <property name="id" value="RestrictSystemErrPrint"/>
<property name="ignoreComments" value="true"/>
<property name="format" value=" System.err.print"/>
<property name="message" value="Use logging instead of System.err, except in void
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <vic...@us...> - 2025-05-06 20:41:20
|
Revision: 13623
http://sourceforge.net/p/foray/code/13623
Author: victormote
Date: 2025-05-06 20:41:02 +0000 (Tue, 06 May 2025)
Log Message:
-----------
Make exception handling for parsing of TrueType fonts more consistent.
Modified Paths:
--------------
trunk/foray/foray-font/src/main/java/org/foray/font/config/ConfigGenerator.java
trunk/foray/foray-font/src/main/java/org/foray/font/format/FontParser.java
trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeCollection.java
trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeCollectionLister.java
trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeSingle.java
Modified: trunk/foray/foray-font/src/main/java/org/foray/font/config/ConfigGenerator.java
===================================================================
--- trunk/foray/foray-font/src/main/java/org/foray/font/config/ConfigGenerator.java 2025-05-06 20:19:51 UTC (rev 13622)
+++ trunk/foray/foray-font/src/main/java/org/foray/font/config/ConfigGenerator.java 2025-05-06 20:41:02 UTC (rev 13623)
@@ -242,7 +242,7 @@
* @param dirName The location of the directory.
* @param filter The filter that should be used to decide which files should be processed.
*/
- public void processDirectory(final String dirName, final FilenameFilter filter) throws IOException {
+ public void processDirectory(final String dirName, final FilenameFilter filter) throws IOException, FontException {
if (dirName.toUpperCase().equals("SYSTEM")) {
final List<String> systemDirectories = this.getSystemFontDirectories();
for (String systemDirectory : systemDirectories) {
@@ -288,7 +288,7 @@
* Process one file.
* @param file The file to process.
*/
- private void processFile(final File file) throws IOException {
+ private void processFile(final File file) throws IOException, FontException {
if (! file.isFile()) {
return;
}
@@ -337,7 +337,7 @@
* @param file The physical file being read.
* @param fontFile The font file to process.
*/
- private void processFontFile(final File file, final FontContent fontFile) throws IOException {
+ private void processFontFile(final File file, final FontContent fontFile) throws IOException, FontException {
if (fontFile == null) {
return;
}
@@ -370,7 +370,7 @@
* @param file The physical file being read.
* @param fontFile The TrueType font file to process.
*/
- private void processTTFFile(final File file, final TrueTypeContainer fontFile) throws IOException {
+ private void processTTFFile(final File file, final TrueTypeContainer fontFile) throws IOException, FontException {
final TrueTypeFont[] ttfFonts;
if (fontFile instanceof TrueTypeCollection) {
final TrueTypeCollection ttc = (TrueTypeCollection) fontFile;
@@ -516,7 +516,7 @@
for (String arg : args) {
try {
config.processDirectory(arg, ConfigGenerator.getDefaultFilter());
- } catch (final IOException e) {
+ } catch (final IOException | FontException e) {
/* CheckStyle: Allow System.exit() in main method. */
System.exit(1);
}
Modified: trunk/foray/foray-font/src/main/java/org/foray/font/format/FontParser.java
===================================================================
--- trunk/foray/foray-font/src/main/java/org/foray/font/format/FontParser.java 2025-05-06 20:19:51 UTC (rev 13622)
+++ trunk/foray/foray-font/src/main/java/org/foray/font/format/FontParser.java 2025-05-06 20:41:02 UTC (rev 13623)
@@ -201,9 +201,10 @@
* the file's contents.
* @return A FontFile instance that knows how to read this files contents,
* or null this is not a recognized font file format.
- * @throws FontException For errors reading content.
+ * @throws IOException For I/O errors reading the content.
+ * @throws FontException For unexpected errors in the font content.
*/
- public FontContent parseFontFile() throws FontException {
+ public FontContent parseFontFile() throws IOException, FontException {
if (this.fontFileCreated == true) {
return this.fontFile;
}
Modified: trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeCollection.java
===================================================================
--- trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeCollection.java 2025-05-06 20:19:51 UTC (rev 13622)
+++ trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeCollection.java 2025-05-06 20:41:02 UTC (rev 13623)
@@ -39,8 +39,9 @@
import org.foray.fontParse.ttfHandler.TrueTypeFontHandler;
import org.foray.fontParse.ttfHandler.TtcHeaderHandler;
+import org.axsl.font.FontException;
+
import org.checkerframework.checker.signedness.qual.Unsigned;
-import org.slf4j.LoggerFactory;
import java.io.IOException;
@@ -71,21 +72,10 @@
* Constructor.
* @param reader The reader which encapsulates the file.
*/
- public TrueTypeCollection(final FontParser reader) {
+ public TrueTypeCollection(final FontParser reader) throws IOException, FontException {
super(reader);
- try {
- readFile(reader.getRandomInput());
- } catch (final IOException e) {
- LoggerFactory.getLogger(getClass()).error(e.getMessage());
- }
- }
- /**
- * Parse the basics of the font file.
- * @param raInput The input being parsed.
- * @throws IOException For I/O Error.
- */
- protected void readFile(final TtfRandomAccessInput raInput) throws IOException {
+ final TtfRandomAccessInput raInput = reader.getRandomInput();
final ParserKit<TtcHeader, TtcHeaderHandler> parserKit = TtcHeader.createContentHandler();
final TtcHeaderParser parser = new TtcHeaderParser();
/* Start parsing at the very beginning of the file. */
@@ -153,8 +143,7 @@
return this.fonts[index];
}
}
- throw new IOException(
- "Name does not exist in the TrueType collection: " + fontName);
+ return null;
}
}
Modified: trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeCollectionLister.java
===================================================================
--- trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeCollectionLister.java 2025-05-06 20:19:51 UTC (rev 13622)
+++ trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeCollectionLister.java 2025-05-06 20:41:02 UTC (rev 13623)
@@ -75,7 +75,7 @@
* @param fontName (Optional) The name of the font for which detailed information should be displayed.
* @throws FontException For errors reading the content.
*/
- public void listTTCContents(final String urlPath, final String fontName) throws FontException {
+ public void listTTCContents(final String urlPath, final String fontName) throws IOException, FontException {
/* TODO: This output should go to a specified PrintStream, not to a Logger. */
final Logger logger = LoggerFactory.getLogger(this.getClass());
logger.info("TTF Reader, listing contents of ttc file.");
@@ -230,7 +230,12 @@
final FontServer4a fontServer = new FontServer4a();
final TrueTypeCollectionLister app = new TrueTypeCollectionLister(fontServer);
- app.listTTCContents(inputURL, fontName);
+ try {
+ app.listTTCContents(inputURL, fontName);
+ } catch (final IOException | FontException e) {
+ /* CheckStyle: Allow System.exit() in main method. */
+ System.exit(1);
+ }
}
}
Modified: trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeSingle.java
===================================================================
--- trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeSingle.java 2025-05-06 20:19:51 UTC (rev 13622)
+++ trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeSingle.java 2025-05-06 20:41:02 UTC (rev 13623)
@@ -34,12 +34,12 @@
import org.foray.fontParse.ttfHandler.TableDirectoryHandler;
import org.foray.fontParse.ttfHandler.TrueTypeFontHandler;
-import org.slf4j.LoggerFactory;
+import org.axsl.font.FontException;
import java.io.IOException;
/**
- * Class representing a TrueType file containing one TrueType font.
+ * A file containing a single TrueType font.
*/
public class TrueTypeSingle extends TrueTypeContainer {
@@ -54,16 +54,12 @@
* @param reader The FontFileReader instance that encapsulates the
* physical TTF file.
*/
- public TrueTypeSingle(final FontParser reader) {
+ public TrueTypeSingle(final FontParser reader) throws IOException, FontException {
super(reader);
- try {
- final ParserKit<TableDirectory, TableDirectoryHandler> parserKit = TableDirectory.createContentHandler();
- final TableDirectoryParser parser = new TableDirectoryParser();
- parser.parse(reader.getRandomInput(), 0, parserKit.getHandler());
- this.tableDirectory = parserKit.getTable();
- } catch (final IOException e) {
- LoggerFactory.getLogger(getClass()).error(e.getMessage());
- }
+ final ParserKit<TableDirectory, TableDirectoryHandler> parserKit = TableDirectory.createContentHandler();
+ final TableDirectoryParser parser = new TableDirectoryParser();
+ parser.parse(reader.getRandomInput(), 0, parserKit.getHandler());
+ this.tableDirectory = parserKit.getTable();
}
/**
@@ -70,12 +66,16 @@
* Returns the font, parsing it if needed.
* @return The parsed font instance.
*/
- public TrueTypeFont getTrueTypeFont() throws IOException {
+ public TrueTypeFont getTrueTypeFont() throws FontException {
if (this.font == null) {
final ParserKit<TrueTypeFont, TrueTypeFontHandler> kit =
TrueTypeFont.createContentHandler(this, this.tableDirectory);
final TrueTypeFontParser parser = new TrueTypeFontParser();
- parser.parse(this.getReader().getRandomInput(), 0, kit.getHandler());
+ try {
+ parser.parse(this.getReader().getRandomInput(), 0, kit.getHandler());
+ } catch (final IOException e) {
+ throw new FontException(e);
+ }
this.font = kit.getTable();
}
return this.font;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <vic...@us...> - 2025-05-06 20:20:08
|
Revision: 13622
http://sourceforge.net/p/foray/code/13622
Author: victormote
Date: 2025-05-06 20:19:51 +0000 (Tue, 06 May 2025)
Log Message:
-----------
Rename methods for clarity.
Modified Paths:
--------------
trunk/foray/foray-font/src/main/java/org/foray/font/FsTrueTypeFont.java
trunk/foray/foray-font/src/main/java/org/foray/font/config/ConfigGenerator.java
trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeCollection.java
trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeCollectionLister.java
trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeSingle.java
trunk/foray/foray-font/src/test/java/org/foray/font/FsTrueTypeFontTests.java
trunk/foray/foray-font/src/test/java/org/foray/font/ttf/TrueTypeCollectionParserTests.java
trunk/foray/foray-font/src/test/java/org/foray/font/ttf/TrueTypeFontParserTests.java
trunk/foray/foray-font/src/test/java/org/foray/font/ttf/table/OtfLookupGsubTests.java
Modified: trunk/foray/foray-font/src/main/java/org/foray/font/FsTrueTypeFont.java
===================================================================
--- trunk/foray/foray-font/src/main/java/org/foray/font/FsTrueTypeFont.java 2025-05-06 19:22:58 UTC (rev 13621)
+++ trunk/foray/foray-font/src/main/java/org/foray/font/FsTrueTypeFont.java 2025-05-06 20:19:51 UTC (rev 13622)
@@ -106,10 +106,10 @@
try {
if (ttfFile instanceof TrueTypeCollection) {
final TrueTypeCollection ttc = (TrueTypeCollection) ttfFile;
- this.ttf = ttc.getTTFFont(fontName);
+ this.ttf = ttc.getTrueTypeFont(fontName);
} else {
final TrueTypeSingle single = (TrueTypeSingle) ttfFile;
- this.ttf = single.getTTFFont();
+ this.ttf = single.getTrueTypeFont();
}
} catch (final IOException e) {
LoggerFactory.getLogger(getClass()).error(e.getMessage());
Modified: trunk/foray/foray-font/src/main/java/org/foray/font/config/ConfigGenerator.java
===================================================================
--- trunk/foray/foray-font/src/main/java/org/foray/font/config/ConfigGenerator.java 2025-05-06 19:22:58 UTC (rev 13621)
+++ trunk/foray/foray-font/src/main/java/org/foray/font/config/ConfigGenerator.java 2025-05-06 20:19:51 UTC (rev 13622)
@@ -374,15 +374,15 @@
final TrueTypeFont[] ttfFonts;
if (fontFile instanceof TrueTypeCollection) {
final TrueTypeCollection ttc = (TrueTypeCollection) fontFile;
- final String[] fontNames = ttc.getChildFontNames();
+ final String[] fontNames = ttc.getFontNames();
ttfFonts = new TrueTypeFont[fontNames.length];
for (int index = 0; index < fontNames.length; index ++) {
- ttfFonts[index] = ttc.getTTFFont(null);
+ ttfFonts[index] = ttc.getTrueTypeFont(null);
}
} else {
final TrueTypeSingle single = (TrueTypeSingle) fontFile;
ttfFonts = new TrueTypeFont[1];
- ttfFonts[0] = single.getTTFFont();
+ ttfFonts[0] = single.getTrueTypeFont();
}
for (int i = 0; i < ttfFonts.length; i++) {
final TrueTypeFont ttfFont = ttfFonts[i];
Modified: trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeCollection.java
===================================================================
--- trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeCollection.java 2025-05-06 19:22:58 UTC (rev 13621)
+++ trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeCollection.java 2025-05-06 20:19:51 UTC (rev 13622)
@@ -124,7 +124,7 @@
* @return An array of the names of the child fonts.
* @throws IOException For I/O Error.
*/
- public String[] getChildFontNames() throws IOException {
+ public String[] getFontNames() throws IOException {
return this.fontNames;
}
@@ -135,7 +135,7 @@
* @return The font named by {@code fontName}, or null if not found.
* @throws IOException For errors parsing the font.
*/
- public TrueTypeFont getTTFFont(final String fontName) throws IOException {
+ public TrueTypeFont getTrueTypeFont(final String fontName) throws IOException {
if (fontName == null) {
return null;
}
Modified: trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeCollectionLister.java
===================================================================
--- trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeCollectionLister.java 2025-05-06 19:22:58 UTC (rev 13621)
+++ trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeCollectionLister.java 2025-05-06 20:19:51 UTC (rev 13622)
@@ -105,12 +105,12 @@
logger.info("This is a TrueType collection file with "
+ ttcFile.numFonts() + " fonts");
logger.info("Containing the following fonts: ");
- final String[] fontList = ttcFile.getChildFontNames();
+ final String[] fontList = ttcFile.getFontNames();
for (int i = 0; i < fontList.length; i++) {
logger.info(" " + fontList[i]);
}
} else {
- final TrueTypeFont ttfFont = ttcFile.getTTFFont(fontName);
+ final TrueTypeFont ttfFont = ttcFile.getTrueTypeFont(fontName);
printStuff(ttfFont, logger);
}
} catch (final IOException e) {
Modified: trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeSingle.java
===================================================================
--- trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeSingle.java 2025-05-06 19:22:58 UTC (rev 13621)
+++ trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeSingle.java 2025-05-06 20:19:51 UTC (rev 13622)
@@ -70,7 +70,7 @@
* Returns the font, parsing it if needed.
* @return The parsed font instance.
*/
- public TrueTypeFont getTTFFont() throws IOException {
+ public TrueTypeFont getTrueTypeFont() throws IOException {
if (this.font == null) {
final ParserKit<TrueTypeFont, TrueTypeFontHandler> kit =
TrueTypeFont.createContentHandler(this, this.tableDirectory);
Modified: trunk/foray/foray-font/src/test/java/org/foray/font/FsTrueTypeFontTests.java
===================================================================
--- trunk/foray/foray-font/src/test/java/org/foray/font/FsTrueTypeFontTests.java 2025-05-06 19:22:58 UTC (rev 13621)
+++ trunk/foray/foray-font/src/test/java/org/foray/font/FsTrueTypeFontTests.java 2025-05-06 20:19:51 UTC (rev 13622)
@@ -63,7 +63,7 @@
final FontContent fontContent = parser.parseFontFile();
assertTrue(fontContent instanceof TrueTypeSingle);
final TrueTypeSingle content = (TrueTypeSingle) fontContent;
- final TrueTypeFont font = content.getTTFFont();
+ final TrueTypeFont font = content.getTrueTypeFont();
assertNotNull(font);
assertEquals("DejaVu Serif", font.getFontName());
Modified: trunk/foray/foray-font/src/test/java/org/foray/font/ttf/TrueTypeCollectionParserTests.java
===================================================================
--- trunk/foray/foray-font/src/test/java/org/foray/font/ttf/TrueTypeCollectionParserTests.java 2025-05-06 19:22:58 UTC (rev 13621)
+++ trunk/foray/foray-font/src/test/java/org/foray/font/ttf/TrueTypeCollectionParserTests.java 2025-05-06 20:19:51 UTC (rev 13622)
@@ -67,7 +67,7 @@
assertTrue(fontContent instanceof TrueTypeCollection);
final TrueTypeCollection ttc = (TrueTypeCollection) fontContent;
- final String[] fontList = ttc.getChildFontNames();
+ final String[] fontList = ttc.getFontNames();
/* From observation in Fontlab 8.4. */
assertEquals(4, fontList.length);
assertEquals("Selwk A", fontList[0]);
@@ -76,7 +76,7 @@
assertEquals("Selwk D", fontList[3]);
/* Pick one file to test the metrics. */
- final TrueTypeFont ttfFont = ttc.getTTFFont("Selwk C");
+ final TrueTypeFont ttfFont = ttc.getTrueTypeFont("Selwk C");
assertNotNull(ttfFont);
/* The following values were obtained by opening the TTF file (not the TTC) in FontLab Studio 5.0.4. */
Modified: trunk/foray/foray-font/src/test/java/org/foray/font/ttf/TrueTypeFontParserTests.java
===================================================================
--- trunk/foray/foray-font/src/test/java/org/foray/font/ttf/TrueTypeFontParserTests.java 2025-05-06 19:22:58 UTC (rev 13621)
+++ trunk/foray/foray-font/src/test/java/org/foray/font/ttf/TrueTypeFontParserTests.java 2025-05-06 20:19:51 UTC (rev 13622)
@@ -84,7 +84,7 @@
final FontContent fontContent = parser.parseFontFile();
assertTrue(fontContent instanceof TrueTypeSingle);
final TrueTypeSingle ttfSingle = (TrueTypeSingle) fontContent;
- final TrueTypeFont ttfFont = ttfSingle.getTTFFont();
+ final TrueTypeFont ttfFont = ttfSingle.getTrueTypeFont();
return ttfFont;
}
@@ -156,7 +156,7 @@
final FontContent fontContent = parser.parseFontFile();
assertTrue(fontContent instanceof TrueTypeSingle);
final TrueTypeSingle ttfSingle = (TrueTypeSingle) fontContent;
- final TrueTypeFont ttfFont = ttfSingle.getTTFFont();
+ final TrueTypeFont ttfFont = ttfSingle.getTrueTypeFont();
assertNotNull(ttfFont);
/* Delegate assertions to a method that can be shared with other classes. */
@@ -216,7 +216,7 @@
final FontContent fontContent = parser.parseFontFile();
assertTrue(fontContent instanceof TrueTypeSingle);
final TrueTypeSingle ttfSingle = (TrueTypeSingle) fontContent;
- final TrueTypeFont ttfFont = ttfSingle.getTTFFont();
+ final TrueTypeFont ttfFont = ttfSingle.getTrueTypeFont();
assertNotNull(ttfFont);
/* Delegate assertions to a method that can be shared with other classes. */
@@ -240,7 +240,7 @@
final FontContent fontContent = parser.parseFontFile();
assertTrue(fontContent instanceof TrueTypeSingle);
final TrueTypeSingle ttfSingle = (TrueTypeSingle) fontContent;
- final TrueTypeFont ttfFont = ttfSingle.getTTFFont();
+ final TrueTypeFont ttfFont = ttfSingle.getTrueTypeFont();
assertNotNull(ttfFont);
final BaseTable baseTable = ttfFont.getBaseTable();
Modified: trunk/foray/foray-font/src/test/java/org/foray/font/ttf/table/OtfLookupGsubTests.java
===================================================================
--- trunk/foray/foray-font/src/test/java/org/foray/font/ttf/table/OtfLookupGsubTests.java 2025-05-06 19:22:58 UTC (rev 13621)
+++ trunk/foray/foray-font/src/test/java/org/foray/font/ttf/table/OtfLookupGsubTests.java 2025-05-06 20:19:51 UTC (rev 13622)
@@ -84,7 +84,7 @@
final FontContent fontContent = parser.parseFontFile();
assertTrue(fontContent instanceof TrueTypeSingle);
final TrueTypeSingle ttfSingle = (TrueTypeSingle) fontContent;
- OtfLookupGsubTests.ttfFont = ttfSingle.getTTFFont();
+ OtfLookupGsubTests.ttfFont = ttfSingle.getTrueTypeFont();
assertNotNull(ttfFont);
OtfLookupGsubTests.orthography = null;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <vic...@us...> - 2025-05-06 19:23:22
|
Revision: 13621
http://sourceforge.net/p/foray/code/13621
Author: victormote
Date: 2025-05-06 19:22:58 +0000 (Tue, 06 May 2025)
Log Message:
-----------
Remove another troublesome method, replacing it with using the listing of font names.
Modified Paths:
--------------
trunk/foray/foray-font/src/main/java/org/foray/font/config/ConfigGenerator.java
trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeCollection.java
trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeContainer.java
trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeSingle.java
trunk/foray/foray-font/src/test/java/org/foray/font/FsTrueTypeFontTests.java
Modified: trunk/foray/foray-font/src/main/java/org/foray/font/config/ConfigGenerator.java
===================================================================
--- trunk/foray/foray-font/src/main/java/org/foray/font/config/ConfigGenerator.java 2025-05-06 19:14:19 UTC (rev 13620)
+++ trunk/foray/foray-font/src/main/java/org/foray/font/config/ConfigGenerator.java 2025-05-06 19:22:58 UTC (rev 13621)
@@ -374,15 +374,16 @@
final TrueTypeFont[] ttfFonts;
if (fontFile instanceof TrueTypeCollection) {
final TrueTypeCollection ttc = (TrueTypeCollection) fontFile;
- ttfFonts = ttc.getTTFFonts();
+ final String[] fontNames = ttc.getChildFontNames();
+ ttfFonts = new TrueTypeFont[fontNames.length];
+ for (int index = 0; index < fontNames.length; index ++) {
+ ttfFonts[index] = ttc.getTTFFont(null);
+ }
} else {
final TrueTypeSingle single = (TrueTypeSingle) fontFile;
ttfFonts = new TrueTypeFont[1];
ttfFonts[0] = single.getTTFFont();
}
- if (ttfFonts == null) {
- return;
- }
for (int i = 0; i < ttfFonts.length; i++) {
final TrueTypeFont ttfFont = ttfFonts[i];
final ConfiguredFont configFile = new ConfiguredFont();
Modified: trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeCollection.java
===================================================================
--- trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeCollection.java 2025-05-06 19:14:19 UTC (rev 13620)
+++ trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeCollection.java 2025-05-06 19:22:58 UTC (rev 13621)
@@ -157,22 +157,4 @@
"Name does not exist in the TrueType collection: " + fontName);
}
- @Override
- public TrueTypeFont[] getTTFFonts() throws IOException {
-// final TrueTypeFont[] fontArray = new TrueTypeFont[numFonts()];
-// for (int i = 0; i < numFonts(); i++) {
-// if (this.fonts[i] == null) {
-// final TableDirectory tableDir = this.tableDirectories[i];
-// try {
-// this.fonts[i] = TrueTypeFont.parse(this, tableDir);
-// } catch (final IOException e) {
-// throw new RuntimeException(e);
-// }
-// }
-// fontArray[i] = this.fonts[i];
-// }
-// return fontArray;
- return null;
- }
-
}
Modified: trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeContainer.java
===================================================================
--- trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeContainer.java 2025-05-06 19:14:19 UTC (rev 13620)
+++ trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeContainer.java 2025-05-06 19:22:58 UTC (rev 13621)
@@ -33,8 +33,6 @@
import org.axsl.font.Font;
-import java.io.IOException;
-
/**
* Class representing a TrueType file.
* This file is distinct from the TrueType font or fonts which may be contained
@@ -84,12 +82,6 @@
}
/**
- * Return an array of all TTFFont instances in this file.
- * @return An array of all TTFFont instances in this file.
- */
- public abstract TrueTypeFont[] getTTFFonts() throws IOException;
-
- /**
* Returns the format of this file.
* @return The format of this file.
*/
Modified: trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeSingle.java
===================================================================
--- trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeSingle.java 2025-05-06 19:14:19 UTC (rev 13620)
+++ trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeSingle.java 2025-05-06 19:22:58 UTC (rev 13621)
@@ -81,11 +81,4 @@
return this.font;
}
- @Override
- public TrueTypeFont[] getTTFFonts() throws IOException {
- final TrueTypeFont[] returnArray = new TrueTypeFont[1];
- returnArray[0] = getTTFFont();
- return returnArray;
- }
-
}
Modified: trunk/foray/foray-font/src/test/java/org/foray/font/FsTrueTypeFontTests.java
===================================================================
--- trunk/foray/foray-font/src/test/java/org/foray/font/FsTrueTypeFontTests.java 2025-05-06 19:14:19 UTC (rev 13620)
+++ trunk/foray/foray-font/src/test/java/org/foray/font/FsTrueTypeFontTests.java 2025-05-06 19:22:58 UTC (rev 13621)
@@ -39,6 +39,7 @@
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
import org.junit.jupiter.api.Test;
import java.io.FileInputStream;
@@ -60,9 +61,8 @@
assertEquals(Font.Format.TRUETYPE, parser.getFontFormat());
final FontContent fontContent = parser.parseFontFile();
- assertEquals(TrueTypeSingle.class, fontContent.getClass());
+ assertTrue(fontContent instanceof TrueTypeSingle);
final TrueTypeSingle content = (TrueTypeSingle) fontContent;
- assertEquals(1, content.getTTFFonts().length);
final TrueTypeFont font = content.getTTFFont();
assertNotNull(font);
assertEquals("DejaVu Serif", font.getFontName());
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <vic...@us...> - 2025-05-06 19:14:38
|
Revision: 13620
http://sourceforge.net/p/foray/code/13620
Author: victormote
Date: 2025-05-06 19:14:19 +0000 (Tue, 06 May 2025)
Log Message:
-----------
Parse the font names in the collection when the collection is first created, so that they can be used to lookup and create as needed.
Modified Paths:
--------------
trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeCollection.java
Modified: trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeCollection.java
===================================================================
--- trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeCollection.java 2025-05-06 18:55:59 UTC (rev 13619)
+++ trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeCollection.java 2025-05-06 19:14:19 UTC (rev 13620)
@@ -59,7 +59,12 @@
/** The TTCHeader instance that represents this files TTC Header table. */
private TtcHeader ttcHeader;
- /** The fonts parsed from {@link #tableDirectories}. Each is null until it has been parsed. */
+ /** The names of the fonts, parsed from {@link #ttcHeader}.
+ * This array is parallel to the array in {@link ttcHeader} and to {@link #fonts}.
+ * By parsing just the names until more is needed, we hope to avoid parsing the fonts that are not needed. */
+ private String[] fontNames;
+
+ /** The fonts parsed from {@link #ttcHeader}. Each is null until it has been parsed. */
private TrueTypeFont[] fonts;
/**
@@ -86,9 +91,23 @@
/* Start parsing at the very beginning of the file. */
parser.parse(raInput, 0, parserKit.getHandler());
this.ttcHeader = parserKit.getTable();
+ final int qtyFonts = this.ttcHeader.getNumDirectories();
/* Don't parse them until needed, but create the array in which to store the fonts when they are parsed. */
- this.fonts = new TrueTypeFont[this.ttcHeader.getNumDirectories()];
+ this.fonts = new TrueTypeFont[qtyFonts];
+
+ /* Parse just the names from each file so that they can be used to lookup. */
+ this.fontNames = new String[qtyFonts];
+ for (int index = 0; index < qtyFonts; index ++) {
+ final TableDirectory tableDir = this.ttcHeader.getTableDirectory(index);
+ // Get the "name" table
+ final @Unsigned int offset = tableDir.getTableOffset("name");
+ final ParserKit<NameTable, NameTableHandler> parseKit = NameTable.createContentHandler();
+ final NameTableParser nameParser = new NameTableParser();
+ nameParser.parse(this.getReader().getRandomInput(), offset, parseKit.getHandler());
+ final NameTable nameTable = parseKit.getTable();
+ this.fontNames[index] = nameTable.getFullName();
+ }
}
/**
@@ -106,19 +125,7 @@
* @throws IOException For I/O Error.
*/
public String[] getChildFontNames() throws IOException {
- final String[] fontNames = new String[numFonts()];
- for (int i = 0; i < numFonts(); i++) {
- final TableDirectory tableDir = this.ttcHeader.getTableDirectory(i);
- // Get the "name" table
- final @Unsigned int offset = tableDir.getTableOffset("name");
- final ParserKit<NameTable, NameTableHandler> parseKit = NameTable.createContentHandler();
- final NameTableParser parser = new NameTableParser();
- parser.parse(this.getReader().getRandomInput(), offset, parseKit.getHandler());
- final NameTable nameTable = parseKit.getTable();
-
- fontNames[i] = nameTable.getFullName();
- }
- return fontNames;
+ return this.fontNames;
}
/**
@@ -132,25 +139,18 @@
if (fontName == null) {
return null;
}
- for (int i = 0; i < numFonts(); i++) {
- final TableDirectory tableDir = this.ttcHeader.getTableDirectory(i);
- // Get the "name" table
- final @Unsigned int tableOffset = tableDir.getTableOffset("name");
- final ParserKit<NameTable, NameTableHandler> parseKit = NameTable.createContentHandler();
- final NameTableParser parser = new NameTableParser();
- parser.parse(this.getReader().getRandomInput(), tableOffset, parseKit.getHandler());
- final NameTable nameTable = parseKit.getTable();
-
- if (nameTable.getFullName().equals(fontName)) {
- if (this.fonts[i] == null) {
+ for (int index = 0; index < numFonts(); index ++) {
+ if (this.fontNames[index].equals(fontName)) {
+ if (this.fonts[index] == null) {
+ final TableDirectory tableDir = this.ttcHeader.getTableDirectory(index);
final ParserKit<TrueTypeFont, TrueTypeFontHandler> kit =
TrueTypeFont.createContentHandler(this, tableDir);
final TrueTypeFontParser ttfParser = new TrueTypeFontParser();
/* The offset is not important here. It is provided for each table during parsing. */
ttfParser.parse(this.getReader().getRandomInput(), -1, kit.getHandler());
- this.fonts[i] = kit.getTable();
+ this.fonts[index] = kit.getTable();
}
- return this.fonts[i];
+ return this.fonts[index];
}
}
throw new IOException(
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <vic...@us...> - 2025-05-06 18:56:17
|
Revision: 13619
http://sourceforge.net/p/foray/code/13619
Author: victormote
Date: 2025-05-06 18:55:59 +0000 (Tue, 06 May 2025)
Log Message:
-----------
Remove duplicate instance variable.
Modified Paths:
--------------
trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeCollection.java
Modified: trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeCollection.java
===================================================================
--- trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeCollection.java 2025-05-06 18:42:26 UTC (rev 13618)
+++ trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeCollection.java 2025-05-06 18:55:59 UTC (rev 13619)
@@ -62,9 +62,6 @@
/** The fonts parsed from {@link #tableDirectories}. Each is null until it has been parsed. */
private TrueTypeFont[] fonts;
- /** TODO: Remove this. */
- private TtfRandomAccessInput raInput;
-
/**
* Constructor.
* @param reader The reader which encapsulates the file.
@@ -71,7 +68,6 @@
*/
public TrueTypeCollection(final FontParser reader) {
super(reader);
- this.raInput = reader.getRandomInput();
try {
readFile(reader.getRandomInput());
} catch (final IOException e) {
@@ -117,7 +113,7 @@
final @Unsigned int offset = tableDir.getTableOffset("name");
final ParserKit<NameTable, NameTableHandler> parseKit = NameTable.createContentHandler();
final NameTableParser parser = new NameTableParser();
- parser.parse(this.raInput, offset, parseKit.getHandler());
+ parser.parse(this.getReader().getRandomInput(), offset, parseKit.getHandler());
final NameTable nameTable = parseKit.getTable();
fontNames[i] = nameTable.getFullName();
@@ -142,7 +138,7 @@
final @Unsigned int tableOffset = tableDir.getTableOffset("name");
final ParserKit<NameTable, NameTableHandler> parseKit = NameTable.createContentHandler();
final NameTableParser parser = new NameTableParser();
- parser.parse(this.raInput, tableOffset, parseKit.getHandler());
+ parser.parse(this.getReader().getRandomInput(), tableOffset, parseKit.getHandler());
final NameTable nameTable = parseKit.getTable();
if (nameTable.getFullName().equals(fontName)) {
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <vic...@us...> - 2025-05-06 18:42:44
|
Revision: 13618
http://sourceforge.net/p/foray/code/13618
Author: victormote
Date: 2025-05-06 18:42:26 +0000 (Tue, 06 May 2025)
Log Message:
-----------
Handle one difference between TrueTypeCollection and TrueTypeSingle with casting instead of awkward method.
Modified Paths:
--------------
trunk/foray/foray-font/src/main/java/org/foray/font/FsTrueTypeFont.java
trunk/foray/foray-font/src/main/java/org/foray/font/config/ConfigGenerator.java
trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeCollection.java
trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeContainer.java
trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeSingle.java
trunk/foray/foray-font/src/test/java/org/foray/font/FsTrueTypeFontTests.java
trunk/foray/foray-font/src/test/java/org/foray/font/ttf/TrueTypeFontParserTests.java
trunk/foray/foray-font/src/test/java/org/foray/font/ttf/table/OtfLookupGsubTests.java
Modified: trunk/foray/foray-font/src/main/java/org/foray/font/FsTrueTypeFont.java
===================================================================
--- trunk/foray/foray-font/src/main/java/org/foray/font/FsTrueTypeFont.java 2025-05-06 17:46:25 UTC (rev 13617)
+++ trunk/foray/foray-font/src/main/java/org/foray/font/FsTrueTypeFont.java 2025-05-06 18:42:26 UTC (rev 13618)
@@ -32,8 +32,10 @@
import org.foray.common.data.BoundingBoxShort;
import org.foray.common.data.BoundingBoxUtils;
import org.foray.font.config.RegisteredFontContent;
+import org.foray.font.ttf.TrueTypeCollection;
import org.foray.font.ttf.TrueTypeContainer;
import org.foray.font.ttf.TrueTypeFont;
+import org.foray.font.ttf.TrueTypeSingle;
import org.foray.font.ttf.TtfSubSetFile;
import org.axsl.font.Font;
@@ -102,7 +104,13 @@
getRegisteredFontContent().createFontFileReader().parseFontFile();
final String fontName = getRegisteredFontContent().getTTCName();
try {
- this.ttf = ttfFile.getTTFFont(fontName);
+ if (ttfFile instanceof TrueTypeCollection) {
+ final TrueTypeCollection ttc = (TrueTypeCollection) ttfFile;
+ this.ttf = ttc.getTTFFont(fontName);
+ } else {
+ final TrueTypeSingle single = (TrueTypeSingle) ttfFile;
+ this.ttf = single.getTTFFont();
+ }
} catch (final IOException e) {
LoggerFactory.getLogger(getClass()).error(e.getMessage());
}
Modified: trunk/foray/foray-font/src/main/java/org/foray/font/config/ConfigGenerator.java
===================================================================
--- trunk/foray/foray-font/src/main/java/org/foray/font/config/ConfigGenerator.java 2025-05-06 17:46:25 UTC (rev 13617)
+++ trunk/foray/foray-font/src/main/java/org/foray/font/config/ConfigGenerator.java 2025-05-06 18:42:26 UTC (rev 13618)
@@ -31,8 +31,10 @@
import org.foray.font.FontServer4a;
import org.foray.font.format.FontContent;
import org.foray.font.format.FontParser;
+import org.foray.font.ttf.TrueTypeCollection;
import org.foray.font.ttf.TrueTypeContainer;
import org.foray.font.ttf.TrueTypeFont;
+import org.foray.font.ttf.TrueTypeSingle;
import org.foray.font.type1.Type1Font;
import org.axsl.font.FontException;
@@ -240,7 +242,7 @@
* @param dirName The location of the directory.
* @param filter The filter that should be used to decide which files should be processed.
*/
- public void processDirectory(final String dirName, final FilenameFilter filter) {
+ public void processDirectory(final String dirName, final FilenameFilter filter) throws IOException {
if (dirName.toUpperCase().equals("SYSTEM")) {
final List<String> systemDirectories = this.getSystemFontDirectories();
for (String systemDirectory : systemDirectories) {
@@ -286,7 +288,7 @@
* Process one file.
* @param file The file to process.
*/
- private void processFile(final File file) {
+ private void processFile(final File file) throws IOException {
if (! file.isFile()) {
return;
}
@@ -335,7 +337,7 @@
* @param file The physical file being read.
* @param fontFile The font file to process.
*/
- private void processFontFile(final File file, final FontContent fontFile) {
+ private void processFontFile(final File file, final FontContent fontFile) throws IOException {
if (fontFile == null) {
return;
}
@@ -368,8 +370,16 @@
* @param file The physical file being read.
* @param fontFile The TrueType font file to process.
*/
- private void processTTFFile(final File file, final TrueTypeContainer fontFile) {
- final TrueTypeFont[] ttfFonts = fontFile.getTTFFonts();
+ private void processTTFFile(final File file, final TrueTypeContainer fontFile) throws IOException {
+ final TrueTypeFont[] ttfFonts;
+ if (fontFile instanceof TrueTypeCollection) {
+ final TrueTypeCollection ttc = (TrueTypeCollection) fontFile;
+ ttfFonts = ttc.getTTFFonts();
+ } else {
+ final TrueTypeSingle single = (TrueTypeSingle) fontFile;
+ ttfFonts = new TrueTypeFont[1];
+ ttfFonts[0] = single.getTTFFont();
+ }
if (ttfFonts == null) {
return;
}
@@ -503,7 +513,12 @@
final FontServer4a fontServer = new FontServer4a();
final ConfigGenerator config = new ConfigGenerator(fontServer);
for (String arg : args) {
- config.processDirectory(arg, ConfigGenerator.getDefaultFilter());
+ try {
+ config.processDirectory(arg, ConfigGenerator.getDefaultFilter());
+ } catch (final IOException e) {
+ /* CheckStyle: Allow System.exit() in main method. */
+ System.exit(1);
+ }
}
try {
config.write(file);
Modified: trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeCollection.java
===================================================================
--- trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeCollection.java 2025-05-06 17:46:25 UTC (rev 13617)
+++ trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeCollection.java 2025-05-06 18:42:26 UTC (rev 13618)
@@ -125,7 +125,13 @@
return fontNames;
}
- @Override
+ /**
+ * Returns the font, from this collection, for a given font name, parsing it if necessary.
+ * @param fontName The name of the font to be returned.
+ * This should be the "full name".
+ * @return The font named by {@code fontName}, or null if not found.
+ * @throws IOException For errors parsing the font.
+ */
public TrueTypeFont getTTFFont(final String fontName) throws IOException {
if (fontName == null) {
return null;
@@ -132,7 +138,6 @@
}
for (int i = 0; i < numFonts(); i++) {
final TableDirectory tableDir = this.ttcHeader.getTableDirectory(i);
-// final int fontOffset = this.ttcHeader.getDirectoryOffset(i);
// Get the "name" table
final @Unsigned int tableOffset = tableDir.getTableOffset("name");
final ParserKit<NameTable, NameTableHandler> parseKit = NameTable.createContentHandler();
@@ -157,7 +162,7 @@
}
@Override
- public TrueTypeFont[] getTTFFonts() {
+ public TrueTypeFont[] getTTFFonts() throws IOException {
// final TrueTypeFont[] fontArray = new TrueTypeFont[numFonts()];
// for (int i = 0; i < numFonts(); i++) {
// if (this.fonts[i] == null) {
Modified: trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeContainer.java
===================================================================
--- trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeContainer.java 2025-05-06 17:46:25 UTC (rev 13617)
+++ trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeContainer.java 2025-05-06 18:42:26 UTC (rev 13618)
@@ -84,20 +84,10 @@
}
/**
- * Returns the TTFFont instance, if any, for a given font name.
- * @param fontName The name of the font that is sought in this file.
- * (This is ignored for TrueType singleton files, but is needed to find the
- * correct font in a TrueType collection).
- * @return The TTFFont instance for fontName.
- * @throws IOException For I/O Error.
- */
- public abstract TrueTypeFont getTTFFont(String fontName) throws IOException;
-
- /**
* Return an array of all TTFFont instances in this file.
* @return An array of all TTFFont instances in this file.
*/
- public abstract TrueTypeFont[] getTTFFonts();
+ public abstract TrueTypeFont[] getTTFFonts() throws IOException;
/**
* Returns the format of this file.
Modified: trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeSingle.java
===================================================================
--- trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeSingle.java 2025-05-06 17:46:25 UTC (rev 13617)
+++ trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeSingle.java 2025-05-06 18:42:26 UTC (rev 13618)
@@ -67,31 +67,24 @@
}
/**
- * {@inheritDoc}
- * @param fontName This parameter is ignored. There is only one font in a
- * TTFFileSingle, and it is returned regardless of fontName.
+ * Returns the font, parsing it if needed.
+ * @return The parsed font instance.
*/
- @Override
- public TrueTypeFont getTTFFont(final String fontName) {
+ public TrueTypeFont getTTFFont() throws IOException {
if (this.font == null) {
- try {
- final ParserKit<TrueTypeFont, TrueTypeFontHandler> kit =
- TrueTypeFont.createContentHandler(this, this.tableDirectory);
- final TrueTypeFontParser parser = new TrueTypeFontParser();
- parser.parse(this.getReader().getRandomInput(), 0, kit.getHandler());
- this.font = kit.getTable();
- } catch (final IOException e) {
- /* TODO: Move the parsing to another method. */
- throw new IllegalStateException(e);
- }
+ final ParserKit<TrueTypeFont, TrueTypeFontHandler> kit =
+ TrueTypeFont.createContentHandler(this, this.tableDirectory);
+ final TrueTypeFontParser parser = new TrueTypeFontParser();
+ parser.parse(this.getReader().getRandomInput(), 0, kit.getHandler());
+ this.font = kit.getTable();
}
return this.font;
}
@Override
- public TrueTypeFont[] getTTFFonts() {
+ public TrueTypeFont[] getTTFFonts() throws IOException {
final TrueTypeFont[] returnArray = new TrueTypeFont[1];
- returnArray[0] = getTTFFont(null);
+ returnArray[0] = getTTFFont();
return returnArray;
}
Modified: trunk/foray/foray-font/src/test/java/org/foray/font/FsTrueTypeFontTests.java
===================================================================
--- trunk/foray/foray-font/src/test/java/org/foray/font/FsTrueTypeFontTests.java 2025-05-06 17:46:25 UTC (rev 13617)
+++ trunk/foray/foray-font/src/test/java/org/foray/font/FsTrueTypeFontTests.java 2025-05-06 18:42:26 UTC (rev 13618)
@@ -63,7 +63,7 @@
assertEquals(TrueTypeSingle.class, fontContent.getClass());
final TrueTypeSingle content = (TrueTypeSingle) fontContent;
assertEquals(1, content.getTTFFonts().length);
- final TrueTypeFont font = content.getTTFFont("bogus");
+ final TrueTypeFont font = content.getTTFFont();
assertNotNull(font);
assertEquals("DejaVu Serif", font.getFontName());
Modified: trunk/foray/foray-font/src/test/java/org/foray/font/ttf/TrueTypeFontParserTests.java
===================================================================
--- trunk/foray/foray-font/src/test/java/org/foray/font/ttf/TrueTypeFontParserTests.java 2025-05-06 17:46:25 UTC (rev 13617)
+++ trunk/foray/foray-font/src/test/java/org/foray/font/ttf/TrueTypeFontParserTests.java 2025-05-06 18:42:26 UTC (rev 13618)
@@ -84,7 +84,7 @@
final FontContent fontContent = parser.parseFontFile();
assertTrue(fontContent instanceof TrueTypeSingle);
final TrueTypeSingle ttfSingle = (TrueTypeSingle) fontContent;
- final TrueTypeFont ttfFont = ttfSingle.getTTFFont(null);
+ final TrueTypeFont ttfFont = ttfSingle.getTTFFont();
return ttfFont;
}
@@ -156,7 +156,7 @@
final FontContent fontContent = parser.parseFontFile();
assertTrue(fontContent instanceof TrueTypeSingle);
final TrueTypeSingle ttfSingle = (TrueTypeSingle) fontContent;
- final TrueTypeFont ttfFont = ttfSingle.getTTFFont(null);
+ final TrueTypeFont ttfFont = ttfSingle.getTTFFont();
assertNotNull(ttfFont);
/* Delegate assertions to a method that can be shared with other classes. */
@@ -216,7 +216,7 @@
final FontContent fontContent = parser.parseFontFile();
assertTrue(fontContent instanceof TrueTypeSingle);
final TrueTypeSingle ttfSingle = (TrueTypeSingle) fontContent;
- final TrueTypeFont ttfFont = ttfSingle.getTTFFont(null);
+ final TrueTypeFont ttfFont = ttfSingle.getTTFFont();
assertNotNull(ttfFont);
/* Delegate assertions to a method that can be shared with other classes. */
@@ -240,7 +240,7 @@
final FontContent fontContent = parser.parseFontFile();
assertTrue(fontContent instanceof TrueTypeSingle);
final TrueTypeSingle ttfSingle = (TrueTypeSingle) fontContent;
- final TrueTypeFont ttfFont = ttfSingle.getTTFFont(null);
+ final TrueTypeFont ttfFont = ttfSingle.getTTFFont();
assertNotNull(ttfFont);
final BaseTable baseTable = ttfFont.getBaseTable();
Modified: trunk/foray/foray-font/src/test/java/org/foray/font/ttf/table/OtfLookupGsubTests.java
===================================================================
--- trunk/foray/foray-font/src/test/java/org/foray/font/ttf/table/OtfLookupGsubTests.java 2025-05-06 17:46:25 UTC (rev 13617)
+++ trunk/foray/foray-font/src/test/java/org/foray/font/ttf/table/OtfLookupGsubTests.java 2025-05-06 18:42:26 UTC (rev 13618)
@@ -84,7 +84,7 @@
final FontContent fontContent = parser.parseFontFile();
assertTrue(fontContent instanceof TrueTypeSingle);
final TrueTypeSingle ttfSingle = (TrueTypeSingle) fontContent;
- OtfLookupGsubTests.ttfFont = ttfSingle.getTTFFont(null);
+ OtfLookupGsubTests.ttfFont = ttfSingle.getTTFFont();
assertNotNull(ttfFont);
OtfLookupGsubTests.orthography = null;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <vic...@us...> - 2025-05-06 17:46:44
|
Revision: 13617
http://sourceforge.net/p/foray/code/13617
Author: victormote
Date: 2025-05-06 17:46:25 +0000 (Tue, 06 May 2025)
Log Message:
-----------
Fix computation of offset in the TrueTypeFontParser, which was causing errors in TrueType Collections.
Modified Paths:
--------------
trunk/foray/foray-font/src/test/java/org/foray/font/ttf/TrueTypeCollectionParserTests.java
trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttf/TrueTypeFontParser.java
Modified: trunk/foray/foray-font/src/test/java/org/foray/font/ttf/TrueTypeCollectionParserTests.java
===================================================================
--- trunk/foray/foray-font/src/test/java/org/foray/font/ttf/TrueTypeCollectionParserTests.java 2025-05-06 17:39:40 UTC (rev 13616)
+++ trunk/foray/foray-font/src/test/java/org/foray/font/ttf/TrueTypeCollectionParserTests.java 2025-05-06 17:46:25 UTC (rev 13617)
@@ -38,7 +38,6 @@
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertTrue;
-import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import java.io.IOException;
@@ -56,7 +55,6 @@
* @throws FontException Not expected here.
*/
@Test
- @Disabled
public void test01() throws IOException, FontException {
final String path = "/source-windows-classic-samples/Selwk.ttc";
final InputStream inputStream = getClass().getResourceAsStream(path);
Modified: trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttf/TrueTypeFontParser.java
===================================================================
--- trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttf/TrueTypeFontParser.java 2025-05-06 17:39:40 UTC (rev 13616)
+++ trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttf/TrueTypeFontParser.java 2025-05-06 17:46:25 UTC (rev 13617)
@@ -68,7 +68,9 @@
throws IOException {
input.seek(offset);
/* Note that, unlike most of the other parsers in this package, the parameter "offset" here is ignored.
- * All of the parsing of the tables is done using offsets provided by the "handler". */
+ * All of the parsing of the tables is done using offsets provided by the "handler". The offsets stored in the
+ * font for the various tables are always relative to the **file**, not to the **font**, so there is no need
+ * to add an adjustment for the offset to the beginning of the font. */
@@ -84,7 +86,7 @@
final HeadTableHandler tableHandler = handler.startHeadTable();
if (tableHandler != null) {
final HeadTableParser tableParser = new HeadTableParser();
- tableParser.parse(input, offset + tableOffset, tableHandler);
+ tableParser.parse(input, tableOffset, tableHandler);
}
}
}
@@ -97,7 +99,7 @@
final MaxpTableHandler tableHandler = handler.startMaxpTable();
if (tableHandler != null) {
final MaxpTableParser tableParser = new MaxpTableParser();
- tableParser.parse(input, offset + tableOffset, tableHandler);
+ tableParser.parse(input, tableOffset, tableHandler);
}
}
}
@@ -110,7 +112,7 @@
final NameTableHandler tableHandler = handler.startNameTable();
if (tableHandler != null) {
final NameTableParser tableParser = new NameTableParser();
- tableParser.parse(input, offset + tableOffset, tableHandler);
+ tableParser.parse(input, tableOffset, tableHandler);
}
}
}
@@ -123,7 +125,7 @@
final CmapTableHandler tableHandler = handler.startCmapTable();
if (tableHandler != null) {
final CmapTableParser tableParser = new CmapTableParser();
- tableParser.parse(input, offset + tableOffset, tableHandler);
+ tableParser.parse(input, tableOffset, tableHandler);
}
}
}
@@ -136,7 +138,7 @@
final HheaTableHandler tableHandler = handler.startHheaTable();
if (tableHandler != null) {
final HheaTableParser tableParser = new HheaTableParser();
- tableParser.parse(input, offset + tableOffset, tableHandler);
+ tableParser.parse(input, tableOffset, tableHandler);
}
}
}
@@ -155,7 +157,7 @@
final HmtxTableHandler tableHandler = handler.startHmtxTable();
if (tableHandler != null) {
final HmtxTableParser tableParser = new HmtxTableParser();
- tableParser.parse(input, offset + tableOffset, tableHandler);
+ tableParser.parse(input, tableOffset, tableHandler);
}
}
}
@@ -167,7 +169,7 @@
final PostTableHandler tableHandler = handler.startPostTable();
if (tableHandler != null) {
final PostTableParser tableParser = new PostTableParser();
- tableParser.parse(input, offset + tableOffset, tableHandler);
+ tableParser.parse(input, tableOffset, tableHandler);
}
}
}
@@ -179,7 +181,7 @@
final Os2TableHandler tableHandler = handler.startOs2Table();
if (tableHandler != null) {
final Os2TableParser tableParser = new Os2TableParser();
- tableParser.parse(input, offset + tableOffset, tableHandler);
+ tableParser.parse(input, tableOffset, tableHandler);
}
}
}
@@ -198,7 +200,7 @@
final CvtTableHandler tableHandler = handler.startCvtTable();
if (tableHandler != null) {
final CvtTableParser tableParser = new CvtTableParser();
- tableParser.parse(input, offset + tableOffset, tableHandler);
+ tableParser.parse(input, tableOffset, tableHandler);
}
}
}
@@ -210,7 +212,7 @@
final FpgmTableHandler tableHandler = handler.startFpgmTable();
if (tableHandler != null) {
final FpgmTableParser tableParser = new FpgmTableParser();
- tableParser.parse(input, offset + tableOffset, tableHandler);
+ tableParser.parse(input, tableOffset, tableHandler);
}
}
}
@@ -222,7 +224,7 @@
final LocaTableHandler tableHandler = handler.startLocaTable();
if (tableHandler != null) {
final LocaTableParser tableParser = new LocaTableParser();
- tableParser.parse(input, offset + tableOffset, tableHandler);
+ tableParser.parse(input, tableOffset, tableHandler);
}
}
}
@@ -235,7 +237,7 @@
final GlyfTableHandler tableHandler = handler.startGlyfTable();
if (tableHandler != null) {
final GlyfTableParser tableParser = new GlyfTableParser();
- tableParser.parse(input, offset + tableOffset, tableHandler);
+ tableParser.parse(input, tableOffset, tableHandler);
}
}
}
@@ -247,7 +249,7 @@
final PrepTableHandler tableHandler = handler.startPrepTable();
if (tableHandler != null) {
final PrepTableParser tableParser = new PrepTableParser();
- tableParser.parse(input, offset + tableOffset, tableHandler);
+ tableParser.parse(input, tableOffset, tableHandler);
}
}
}
@@ -259,7 +261,7 @@
final GaspTableHandler tableHandler = handler.startGaspTable();
if (tableHandler != null) {
final GaspTableParser tableParser = new GaspTableParser();
- tableParser.parse(input, offset + tableOffset, tableHandler);
+ tableParser.parse(input, tableOffset, tableHandler);
}
}
}
@@ -278,7 +280,7 @@
final CffTableHandler tableHandler = handler.startCffTable();
if (tableHandler != null) {
final CffTableParser tableParser = new CffTableParser();
- tableParser.parse(input, offset + tableOffset, tableHandler);
+ tableParser.parse(input, tableOffset, tableHandler);
}
}
}
@@ -290,7 +292,7 @@
final Cff2TableHandler tableHandler = handler.startCff2Table();
if (tableHandler != null) {
final Cff2TableParser tableParser = new Cff2TableParser();
- tableParser.parse(input, offset + tableOffset, tableHandler);
+ tableParser.parse(input, tableOffset, tableHandler);
}
}
}
@@ -302,7 +304,7 @@
final VorgTableHandler tableHandler = handler.startVorgTable();
if (tableHandler != null) {
final VorgTableParser tableParser = new VorgTableParser();
- tableParser.parse(input, offset + tableOffset, tableHandler);
+ tableParser.parse(input, tableOffset, tableHandler);
}
}
}
@@ -320,7 +322,7 @@
final BaseTableHandler tableHandler = handler.startBaseTable();
if (tableHandler != null) {
final BaseTableParser tableParser = new BaseTableParser();
- tableParser.parse(input, offset + tableOffset, tableHandler);
+ tableParser.parse(input, tableOffset, tableHandler);
}
}
}
@@ -332,7 +334,7 @@
final GdefTableHandler tableHandler = handler.startGdefTable();
if (tableHandler != null) {
final GdefTableParser tableParser = new GdefTableParser();
- tableParser.parse(input, offset + tableOffset, tableHandler);
+ tableParser.parse(input, tableOffset, tableHandler);
}
}
}
@@ -344,7 +346,7 @@
final GposTableHandler tableHandler = handler.startGposTable();
if (tableHandler != null) {
final GposTableParser tableParser = new GposTableParser();
- tableParser.parse(input, offset + tableOffset, tableHandler);
+ tableParser.parse(input, tableOffset, tableHandler);
}
}
}
@@ -356,7 +358,7 @@
final GsubTableHandler tableHandler = handler.startGsubTable();
if (tableHandler != null) {
final GsubTableParser tableParser = new GsubTableParser();
- tableParser.parse(input, offset + tableOffset, tableHandler);
+ tableParser.parse(input, tableOffset, tableHandler);
}
}
}
@@ -368,7 +370,7 @@
final JstfTableHandler tableHandler = handler.startJstfTable();
if (tableHandler != null) {
final JstfTableParser tableParser = new JstfTableParser();
- tableParser.parse(input, offset + tableOffset, tableHandler);
+ tableParser.parse(input, tableOffset, tableHandler);
}
}
}
@@ -380,7 +382,7 @@
final MathTableHandler tableHandler = handler.startMathTable();
if (tableHandler != null) {
final MathTableParser tableParser = new MathTableParser();
- tableParser.parse(input, offset + tableOffset, tableHandler);
+ tableParser.parse(input, tableOffset, tableHandler);
}
}
}
@@ -398,7 +400,7 @@
final PcltTableHandler tableHandler = handler.startPcltTable();
if (tableHandler != null) {
final PcltTableParser tableParser = new PcltTableParser();
- tableParser.parse(input, offset + tableOffset, tableHandler);
+ tableParser.parse(input, tableOffset, tableHandler);
}
}
}
@@ -410,7 +412,7 @@
final KernTableHandler tableHandler = handler.startKernTable();
if (tableHandler != null) {
final KernTableParser tableParser = new KernTableParser();
- tableParser.parse(input, offset + tableOffset, tableHandler);
+ tableParser.parse(input, tableOffset, tableHandler);
}
}
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <vic...@us...> - 2025-05-06 17:39:59
|
Revision: 13616
http://sourceforge.net/p/foray/code/13616
Author: victormote
Date: 2025-05-06 17:39:40 +0000 (Tue, 06 May 2025)
Log Message:
-----------
Parse and store the table directories for each font in the TtcHeader. Once those have been parsed, we don't care about the offsets to each font any more
Modified Paths:
--------------
trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeCollection.java
trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TtcHeader.java
trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttf/TtcHeaderParser.java
trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/TtcHeaderHandler.java
Modified: trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeCollection.java
===================================================================
--- trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeCollection.java 2025-05-06 17:13:44 UTC (rev 13615)
+++ trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeCollection.java 2025-05-06 17:39:40 UTC (rev 13616)
@@ -32,12 +32,10 @@
import org.foray.font.format.FontParser;
import org.foray.font.ttf.table.NameTable;
import org.foray.fontParse.ttf.NameTableParser;
-import org.foray.fontParse.ttf.TableDirectoryParser;
import org.foray.fontParse.ttf.TrueTypeFontParser;
import org.foray.fontParse.ttf.TtcHeaderParser;
import org.foray.fontParse.ttf.TtfRandomAccessInput;
import org.foray.fontParse.ttfHandler.NameTableHandler;
-import org.foray.fontParse.ttfHandler.TableDirectoryHandler;
import org.foray.fontParse.ttfHandler.TrueTypeFontHandler;
import org.foray.fontParse.ttfHandler.TtcHeaderHandler;
@@ -61,9 +59,6 @@
/** The TTCHeader instance that represents this files TTC Header table. */
private TtcHeader ttcHeader;
- /** Collection of TTFTableDirectory entries. There should be one entry for each logical font in the TTC file. */
- private TableDirectory[] tableDirectories;
-
/** The fonts parsed from {@link #tableDirectories}. Each is null until it has been parsed. */
private TrueTypeFont[] fonts;
@@ -96,17 +91,6 @@
parser.parse(raInput, 0, parserKit.getHandler());
this.ttcHeader = parserKit.getTable();
- this.tableDirectories = new TableDirectory[this.ttcHeader.getNumDirectories()];
- for (int i = 0; i < this.ttcHeader.getNumDirectories(); i++) {
- final ParserKit<TableDirectory, TableDirectoryHandler> tableDirectoryParserKit =
- TableDirectory.createContentHandler();
- final TableDirectoryParser tableDirectoryParser = new TableDirectoryParser();
- tableDirectoryParser.parse(raInput, this.ttcHeader.getDirectoryOffset(i),
- tableDirectoryParserKit.getHandler());
- final TableDirectory tableDir = tableDirectoryParserKit.getTable();
- this.tableDirectories[i] = tableDir;
- }
-
/* Don't parse them until needed, but create the array in which to store the fonts when they are parsed. */
this.fonts = new TrueTypeFont[this.ttcHeader.getNumDirectories()];
}
@@ -117,7 +101,7 @@
* @return The number of fonts in this file.
*/
public int numFonts() {
- return this.tableDirectories.length;
+ return this.ttcHeader.getNumDirectories();
}
/**
@@ -128,7 +112,7 @@
public String[] getChildFontNames() throws IOException {
final String[] fontNames = new String[numFonts()];
for (int i = 0; i < numFonts(); i++) {
- final TableDirectory tableDir = this.tableDirectories[i];
+ final TableDirectory tableDir = this.ttcHeader.getTableDirectory(i);
// Get the "name" table
final @Unsigned int offset = tableDir.getTableOffset("name");
final ParserKit<NameTable, NameTableHandler> parseKit = NameTable.createContentHandler();
@@ -147,8 +131,8 @@
return null;
}
for (int i = 0; i < numFonts(); i++) {
- final TableDirectory tableDir = this.tableDirectories[i];
- final int fontOffset = this.ttcHeader.getDirectoryOffset(i);
+ final TableDirectory tableDir = this.ttcHeader.getTableDirectory(i);
+// final int fontOffset = this.ttcHeader.getDirectoryOffset(i);
// Get the "name" table
final @Unsigned int tableOffset = tableDir.getTableOffset("name");
final ParserKit<NameTable, NameTableHandler> parseKit = NameTable.createContentHandler();
@@ -161,7 +145,8 @@
final ParserKit<TrueTypeFont, TrueTypeFontHandler> kit =
TrueTypeFont.createContentHandler(this, tableDir);
final TrueTypeFontParser ttfParser = new TrueTypeFontParser();
- ttfParser.parse(this.getReader().getRandomInput(), fontOffset, kit.getHandler());
+ /* The offset is not important here. It is provided for each table during parsing. */
+ ttfParser.parse(this.getReader().getRandomInput(), -1, kit.getHandler());
this.fonts[i] = kit.getTable();
}
return this.fonts[i];
Modified: trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TtcHeader.java
===================================================================
--- trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TtcHeader.java 2025-05-06 17:13:44 UTC (rev 13615)
+++ trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TtcHeader.java 2025-05-06 17:39:40 UTC (rev 13616)
@@ -28,6 +28,7 @@
package org.foray.font.ttf;
+import org.foray.fontParse.ttfHandler.TableDirectoryHandler;
import org.foray.fontParse.ttfHandler.TtcHeaderHandler;
import org.checkerframework.checker.signedness.qual.Unsigned;
@@ -43,20 +44,31 @@
private final class ContentHandler implements TtcHeaderHandler {
/** The table instance being created. */
- private TtcHeader table;
+ private TtcHeader header;
+ /** The index to the table directory currently being built. */
+ private int tableDirectoryIndex = -1;
+
/**
* Constructor.
- * @param table The table instance being created.
+ * @param header The table instance being created.
*/
- private ContentHandler(final TtcHeader table) {
- this.table = table;
+ private ContentHandler(final TtcHeader header) {
+ this.header = header;
}
@Override
- public void tableDirectoryOffsets(final @Unsigned int[] value) {
- this.table.dirOffsets = value;
+ public void numFonts(final @Unsigned int value) {
+ this.header.tableDirectories = new TableDirectory[value];
}
+
+ @Override
+ public TableDirectoryHandler startTableDirectory() {
+ final ParserKit<TableDirectory, TableDirectoryHandler> kit = TableDirectory.createContentHandler();
+ this.tableDirectoryIndex ++;
+ this.header.tableDirectories[this.tableDirectoryIndex] = kit.getTable();
+ return kit.getHandler();
+ }
}
@@ -68,8 +80,8 @@
- /** Offsets to the directories. */
- private @Unsigned int[] dirOffsets = null;
+ /** Collection of TTFTableDirectory entries. There should be one entry for each logical font in the TTC file. */
+ private TableDirectory[] tableDirectories;
/**
* Creates a table instance and a content handler for that instance.
@@ -86,21 +98,16 @@
* @return The number of directories.
*/
public int getNumDirectories() {
- return this.dirOffsets.length;
+ return this.tableDirectories.length;
}
/**
- * Return the offset to a specific directory.
- * @param directoryIndex The directory index.
- * @return The offset to the directory.
+ * Return the table directory at a specific index.
+ * @param index The directory index.
+ * @return The table directory at {@code index}.
*/
- public int getDirectoryOffset(final int directoryIndex) {
- if (this.dirOffsets == null
- || directoryIndex < 0
- || directoryIndex >= this.dirOffsets.length) {
- return Integer.MIN_VALUE;
- }
- return this.dirOffsets[directoryIndex];
+ public TableDirectory getTableDirectory(final int index) {
+ return this.tableDirectories[index];
}
}
Modified: trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttf/TtcHeaderParser.java
===================================================================
--- trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttf/TtcHeaderParser.java 2025-05-06 17:13:44 UTC (rev 13615)
+++ trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttf/TtcHeaderParser.java 2025-05-06 17:39:40 UTC (rev 13616)
@@ -29,6 +29,7 @@
package org.foray.fontParse.ttf;
import org.foray.fontParse.TableParser;
+import org.foray.fontParse.ttfHandler.TableDirectoryHandler;
import org.foray.fontParse.ttfHandler.TtcHeaderHandler;
import org.checkerframework.checker.signedness.qual.Unsigned;
@@ -74,6 +75,14 @@
handler.dsigTag(input.read_uint32()); // 4 bytes, 4 total
handler.dsigLength(input.read_uint32()); // 4 bytes, 8 total
handler.dsigOffset(input.read_uint32()); // 4 bytes, 12 total
+
+
+ /* Now parse the table directories. */
+ for (int index = 0; index < numFonts; index ++) {
+ final TableDirectoryHandler tdHandler = handler.startTableDirectory();
+ final TableDirectoryParser tdParser = new TableDirectoryParser();
+ tdParser.parse(input, tableDirectoryOffsets[index], tdHandler);
+ }
}
}
Modified: trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/TtcHeaderHandler.java
===================================================================
--- trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/TtcHeaderHandler.java 2025-05-06 17:13:44 UTC (rev 13615)
+++ trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/TtcHeaderHandler.java 2025-05-06 17:39:40 UTC (rev 13616)
@@ -50,4 +50,6 @@
default void dsigLength(final @Unsigned int value) { return; }
default void dsigOffset(final @Unsigned int value) { return; }
+ default TableDirectoryHandler startTableDirectory() { return null; }
+
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <vic...@us...> - 2025-05-06 17:14:01
|
Revision: 13615
http://sourceforge.net/p/foray/code/13615
Author: victormote
Date: 2025-05-06 17:13:44 +0000 (Tue, 06 May 2025)
Log Message:
-----------
Add method to get table offsets from the handler instead of re-parsing them. Remove re-parsing code.
Modified Paths:
--------------
trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeFont.java
trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttf/TrueTypeFontParser.java
trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/TrueTypeFontHandler.java
Modified: trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeFont.java
===================================================================
--- trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeFont.java 2025-05-06 16:58:52 UTC (rev 13614)
+++ trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeFont.java 2025-05-06 17:13:44 UTC (rev 13615)
@@ -120,7 +120,13 @@
this.font = font;
}
+
@Override
+ public int getTableOffset(final String tableTag) {
+ return this.font.tableDirectory.getTableOffset(tableTag);
+ }
+
+ @Override
public HeadTableHandler startHeadTable() {
if (this.font.headTable == null) {
final ParserKit<HeadTable, HeadTableHandler> kit = HeadTable.createContentHandler();
Modified: trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttf/TrueTypeFontParser.java
===================================================================
--- trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttf/TrueTypeFontParser.java 2025-05-06 16:58:52 UTC (rev 13614)
+++ trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttf/TrueTypeFontParser.java 2025-05-06 17:13:44 UTC (rev 13615)
@@ -53,72 +53,25 @@
import org.foray.fontParse.ttfHandler.PcltTableHandler;
import org.foray.fontParse.ttfHandler.PostTableHandler;
import org.foray.fontParse.ttfHandler.PrepTableHandler;
-import org.foray.fontParse.ttfHandler.TableDirectoryHandler;
import org.foray.fontParse.ttfHandler.TrueTypeFontHandler;
import org.foray.fontParse.ttfHandler.VorgTableHandler;
-import org.checkerframework.checker.signedness.qual.Unsigned;
-
import java.io.IOException;
/**
- * Parses a True.
+ * Parses a TrueTypeFont.
*/
public class TrueTypeFontParser extends TableParser<TrueTypeFontHandler> {
- /**
- * The handler of events from the parser.
- */
- private final class ContentHandler implements TableDirectoryHandler {
-
- @Override
- public void tableTags(final String[] value) {
- tableTags = value;
- }
-
- @Override
- public void offsets(final @Unsigned int[] value) {
- offsets = value;
- }
- }
-
- /** The table tags parsed from the TableDirectory. */
- private String[] tableTags;
-
- /** The table offsets parsed from the TableDirectory. */
- private @Unsigned int[] offsets;
-
- /**
- * Retrieve the table offset for a given table tag.
- * A HashMap would be easier, but presents unboxing problems when looking for a table that isn't there.
- * @param tableTag The table tag for which the offset is needed.
- * @return The offset to table {@code tableTag}, or -1 if no such table exists.
- */
- private int getTableOffset(final String tableTag) {
- for (int index = 0; index < this.tableTags.length; index ++) {
- if (tableTags[index].equals(tableTag)) {
- return this.offsets[index];
- }
- }
- return -1;
- }
-
-
-
@Override
public void parse(final TtfRandomAccessInput input, final int offset, final TrueTypeFontHandler handler)
throws IOException {
input.seek(offset);
+ /* Note that, unlike most of the other parsers in this package, the parameter "offset" here is ignored.
+ * All of the parsing of the tables is done using offsets provided by the "handler". */
- /* First parse the Table Directory to get the tags and offsets for the tables. */
- final TableDirectoryHandler tableDirectoryHandler = new ContentHandler();
- final TableDirectoryParser tableDirectoryParser = new TableDirectoryParser();
- tableDirectoryParser.parse(input, offset, tableDirectoryHandler);
-
-
-
/* The order is somewhat important here. */
/* BEGIN REQUIRED TABLES ************************************************************************************ */
@@ -126,7 +79,7 @@
/* Read the Font Header first. */
{
- final int tableOffset = getTableOffset("head");
+ final int tableOffset = handler.getTableOffset("head");
if (tableOffset > -1) {
final HeadTableHandler tableHandler = handler.startHeadTable();
if (tableHandler != null) {
@@ -139,7 +92,7 @@
/* Then the Maximum Profile, so general sizes are known. */
{
- final int tableOffset = getTableOffset("maxp");
+ final int tableOffset = handler.getTableOffset("maxp");
if (tableOffset > -1) {
final MaxpTableHandler tableHandler = handler.startMaxpTable();
if (tableHandler != null) {
@@ -152,7 +105,7 @@
/* The NAME table needs to be read before the CMAP. */
{
- final int tableOffset = getTableOffset("name");
+ final int tableOffset = handler.getTableOffset("name");
if (tableOffset > -1) {
final NameTableHandler tableHandler = handler.startNameTable();
if (tableHandler != null) {
@@ -165,7 +118,7 @@
/* Then the CMAP, so that glyph indexes can be computed. */
{
- final int tableOffset = getTableOffset("cmap");
+ final int tableOffset = handler.getTableOffset("cmap");
if (tableOffset > -1) {
final CmapTableHandler tableHandler = handler.startCmapTable();
if (tableHandler != null) {
@@ -178,7 +131,7 @@
/* Read the Horizontal Header before the Horizontal Metrics. */
{
- final int tableOffset = getTableOffset("hhea");
+ final int tableOffset = handler.getTableOffset("hhea");
if (tableOffset > -1) {
final HheaTableHandler tableHandler = handler.startHheaTable();
if (tableHandler != null) {
@@ -197,7 +150,7 @@
{
- final int tableOffset = getTableOffset("hmtx");
+ final int tableOffset = handler.getTableOffset("hmtx");
if (tableOffset > -1) {
final HmtxTableHandler tableHandler = handler.startHmtxTable();
if (tableHandler != null) {
@@ -209,7 +162,7 @@
{
- final int tableOffset = getTableOffset("post");
+ final int tableOffset = handler.getTableOffset("post");
if (tableOffset > -1) {
final PostTableHandler tableHandler = handler.startPostTable();
if (tableHandler != null) {
@@ -221,7 +174,7 @@
{
- final int tableOffset = getTableOffset("OS/2");
+ final int tableOffset = handler.getTableOffset("OS/2");
if (tableOffset > -1) {
final Os2TableHandler tableHandler = handler.startOs2Table();
if (tableHandler != null) {
@@ -240,7 +193,7 @@
{
- final int tableOffset = getTableOffset("cvt");
+ final int tableOffset = handler.getTableOffset("cvt");
if (tableOffset > -1) {
final CvtTableHandler tableHandler = handler.startCvtTable();
if (tableHandler != null) {
@@ -252,7 +205,7 @@
{
- final int tableOffset = getTableOffset("fpgm");
+ final int tableOffset = handler.getTableOffset("fpgm");
if (tableOffset > -1) {
final FpgmTableHandler tableHandler = handler.startFpgmTable();
if (tableHandler != null) {
@@ -264,7 +217,7 @@
{
- final int tableOffset = getTableOffset("loca");
+ final int tableOffset = handler.getTableOffset("loca");
if (tableOffset > -1) {
final LocaTableHandler tableHandler = handler.startLocaTable();
if (tableHandler != null) {
@@ -277,7 +230,7 @@
/* glyf must be parsed after hmtx and loca. */
{
- final int tableOffset = getTableOffset("glyf");
+ final int tableOffset = handler.getTableOffset("glyf");
if (tableOffset > -1) {
final GlyfTableHandler tableHandler = handler.startGlyfTable();
if (tableHandler != null) {
@@ -289,7 +242,7 @@
{
- final int tableOffset = getTableOffset("prep");
+ final int tableOffset = handler.getTableOffset("prep");
if (tableOffset > -1) {
final PrepTableHandler tableHandler = handler.startPrepTable();
if (tableHandler != null) {
@@ -301,7 +254,7 @@
{
- final int tableOffset = getTableOffset("gasp");
+ final int tableOffset = handler.getTableOffset("gasp");
if (tableOffset > -1) {
final GaspTableHandler tableHandler = handler.startGaspTable();
if (tableHandler != null) {
@@ -320,7 +273,7 @@
{
- final int tableOffset = getTableOffset("CFF");
+ final int tableOffset = handler.getTableOffset("CFF");
if (tableOffset > -1) {
final CffTableHandler tableHandler = handler.startCffTable();
if (tableHandler != null) {
@@ -332,7 +285,7 @@
{
- final int tableOffset = getTableOffset("CFF2");
+ final int tableOffset = handler.getTableOffset("CFF2");
if (tableOffset > -1) {
final Cff2TableHandler tableHandler = handler.startCff2Table();
if (tableHandler != null) {
@@ -344,7 +297,7 @@
{
- final int tableOffset = getTableOffset("VORG");
+ final int tableOffset = handler.getTableOffset("VORG");
if (tableOffset > -1) {
final VorgTableHandler tableHandler = handler.startVorgTable();
if (tableHandler != null) {
@@ -362,7 +315,7 @@
{
- final int tableOffset = getTableOffset("BASE");
+ final int tableOffset = handler.getTableOffset("BASE");
if (tableOffset > -1) {
final BaseTableHandler tableHandler = handler.startBaseTable();
if (tableHandler != null) {
@@ -374,7 +327,7 @@
{
- final int tableOffset = getTableOffset("GDEF");
+ final int tableOffset = handler.getTableOffset("GDEF");
if (tableOffset > -1) {
final GdefTableHandler tableHandler = handler.startGdefTable();
if (tableHandler != null) {
@@ -386,7 +339,7 @@
{
- final int tableOffset = getTableOffset("GPOS");
+ final int tableOffset = handler.getTableOffset("GPOS");
if (tableOffset > -1) {
final GposTableHandler tableHandler = handler.startGposTable();
if (tableHandler != null) {
@@ -398,7 +351,7 @@
{
- final int tableOffset = getTableOffset("GSUB");
+ final int tableOffset = handler.getTableOffset("GSUB");
if (tableOffset > -1) {
final GsubTableHandler tableHandler = handler.startGsubTable();
if (tableHandler != null) {
@@ -410,7 +363,7 @@
{
- final int tableOffset = getTableOffset("JSTF");
+ final int tableOffset = handler.getTableOffset("JSTF");
if (tableOffset > -1) {
final JstfTableHandler tableHandler = handler.startJstfTable();
if (tableHandler != null) {
@@ -422,7 +375,7 @@
{
- final int tableOffset = getTableOffset("MATH");
+ final int tableOffset = handler.getTableOffset("MATH");
if (tableOffset > -1) {
final MathTableHandler tableHandler = handler.startMathTable();
if (tableHandler != null) {
@@ -440,7 +393,7 @@
{
- final int tableOffset = getTableOffset("PCLT");
+ final int tableOffset = handler.getTableOffset("PCLT");
if (tableOffset > -1) {
final PcltTableHandler tableHandler = handler.startPcltTable();
if (tableHandler != null) {
@@ -452,7 +405,7 @@
{
- final int tableOffset = getTableOffset("kern");
+ final int tableOffset = handler.getTableOffset("kern");
if (tableOffset > -1) {
final KernTableHandler tableHandler = handler.startKernTable();
if (tableHandler != null) {
Modified: trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/TrueTypeFontHandler.java
===================================================================
--- trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/TrueTypeFontHandler.java 2025-05-06 16:58:52 UTC (rev 13614)
+++ trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/TrueTypeFontHandler.java 2025-05-06 17:13:44 UTC (rev 13615)
@@ -36,6 +36,13 @@
*/
public interface TrueTypeFontHandler extends FontContentHandler {
+ /**
+ * For a given table tag, returns the offset to that table.
+ * @param tableTag The tag ("head", "name", etc.) of the table for which the offset is needed.
+ * @return The offset, in bytes, to the {@code tableTag} table, or -1 if the table does not exist.
+ */
+ int getTableOffset(String tableTag);
+
default HeadTableHandler startHeadTable() { return null; }
default MaxpTableHandler startMaxpTable() { return null; }
default NameTableHandler startNameTable() { return null; }
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <vic...@us...> - 2025-05-06 16:59:10
|
Revision: 13614
http://sourceforge.net/p/foray/code/13614
Author: victormote
Date: 2025-05-06 16:58:52 +0000 (Tue, 06 May 2025)
Log Message:
-----------
Minor cleanup.
Modified Paths:
--------------
trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TableRecord.java
Modified: trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TableRecord.java
===================================================================
--- trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TableRecord.java 2025-05-06 12:27:24 UTC (rev 13613)
+++ trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TableRecord.java 2025-05-06 16:58:52 UTC (rev 13614)
@@ -28,6 +28,8 @@
package org.foray.font.ttf;
+import org.checkerframework.checker.signedness.qual.Unsigned;
+
/**
* A TrueType or OpenType Offset Table Record.
* This stores the offset and length of one table in the font.
@@ -40,14 +42,12 @@
/** The tag for the table. */
private String tag;
- /** The offset from the beginning of the file, in bytes, of this table entry.
- * This should be an unsigned integer, but no such creature exists in Java. */
- private int offset;
+ /** The offset from the beginning of the file, in bytes, of this table entry. */
+ private @Unsigned int offset;
/**
- * The length, in bytes, of this table entry.
- * This should be an unsigned integer, but no such creature exists in Java. */
- private int length;
+ * The length, in bytes, of this table entry. */
+ private @Unsigned int length;
/**
* Constructor.
@@ -55,32 +55,12 @@
* @param offset The offset.
* @param length The length.
*/
- public TableRecord(final String tag, final int offset, final int length) {
+ public TableRecord(final String tag, final @Unsigned int offset, final @Unsigned int length) {
this.tag = tag;
this.offset = offset;
this.length = length;
}
-// /**
-// * Constructor.
-// * @param raInput The input being parsed.
-// * @return The parsed entry.
-// * @throws IOException For i/o errors when parsing the entry.
-// */
-// public static TableRecord parse(final RandomAccessInput raInput)
-// throws IOException {
-// final TableRecord entry = new TableRecord();
-// /* Read the 4-byte table identifier. */
-// entry.tag = raInput.readString(RoTable.ULONG_BYTES, StandardCharsets.ISO_8859_1);
-// /* Skip the checkSum. */
-// raInput.skipBytes(RoTable.ULONG_BYTES);
-// /* Read the offset to the table. */
-// entry.offset = (int) raInput.readUnsignedInt();
-// /* Read the length of the table. */
-// entry.length = (int) raInput.readUnsignedInt();
-// return entry;
-// }
-
/**
* Return this table's tag name.
* @return this table's tag name.
@@ -90,10 +70,8 @@
}
/**
- * Returns the offset from the beginning of the file, in bytes, of this
- * table entry.
- * @return The offset from the beginning of the file, in bytes, of this
- * table entry.
+ * Returns the offset from the beginning of the file, in bytes, of this table entry.
+ * @return The offset from the beginning of the file, in bytes, of this table entry.
*/
public int getOffset() {
return this.offset;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <vic...@us...> - 2025-05-06 12:27:45
|
Revision: 13613
http://sourceforge.net/p/foray/code/13613
Author: victormote
Date: 2025-05-06 12:27:24 +0000 (Tue, 06 May 2025)
Log Message:
-----------
Convert general TrueTypeFont parsing to new scheme. Disabled a TTC test temporarily.
Modified Paths:
--------------
trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TableDirectory.java
trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeCollection.java
trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeFont.java
trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeSingle.java
trunk/foray/foray-font/src/test/java/org/foray/font/ttf/TrueTypeCollectionParserTests.java
Modified: trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TableDirectory.java
===================================================================
--- trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TableDirectory.java 2025-05-05 23:16:25 UTC (rev 13612)
+++ trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TableDirectory.java 2025-05-06 12:27:24 UTC (rev 13613)
@@ -122,37 +122,6 @@
return new ParserKit<TableDirectory, TableDirectoryHandler>(table, handler);
}
-
-// /**
-// * Parse a Table Directory from the appropriate offset.
-// * Create the HashMap entries using the table name as the key and the appropriate TTFDirTabEntry as the value.
-// * @param raInput The input being parsed.
-// * @param fileOffset The offset to the specific font in {@code container} that should be parsed (remember that a
-// * TTF font file can contain more than one TTF font.
-// * @return The parsed instance.
-// * @throws IOException For I/O error.
-// */
-// public static TableDirectory parse(final RandomAccessInput raInput, final long fileOffset) throws IOException {
-// final TableDirectory directory = new TableDirectory();
-// raInput.seek(fileOffset);
-// /* Skip sfnt version (format version). */
-// raInput.skipBytes(RoTable.FIXED_BYTES);
-// /* Read the number of tables. */
-// final int numberOfTables = raInput.readUnsignedShort();
-// /* Skip the searchRange. */
-// raInput.skipBytes(RoTable.USHORT_BYTES);
-// /* Skip the entrySelector. */
-// raInput.skipBytes(RoTable.USHORT_BYTES);
-// /* Skip the rangeShift. */
-// raInput.skipBytes(RoTable.USHORT_BYTES);
-//
-// for (int i = 0; i < numberOfTables; i++) {
-// final TableRecord entry = TableRecord.parse(raInput);
-// directory.entries.put(entry.getTag(), entry);
-// }
-// return directory;
-// }
-
/**
* Return the index to the table directory entry for a given table name.
* @param tableName The name of the table whose table directory entry is sought.
Modified: trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeCollection.java
===================================================================
--- trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeCollection.java 2025-05-05 23:16:25 UTC (rev 13612)
+++ trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeCollection.java 2025-05-06 12:27:24 UTC (rev 13613)
@@ -33,10 +33,12 @@
import org.foray.font.ttf.table.NameTable;
import org.foray.fontParse.ttf.NameTableParser;
import org.foray.fontParse.ttf.TableDirectoryParser;
+import org.foray.fontParse.ttf.TrueTypeFontParser;
import org.foray.fontParse.ttf.TtcHeaderParser;
import org.foray.fontParse.ttf.TtfRandomAccessInput;
import org.foray.fontParse.ttfHandler.NameTableHandler;
import org.foray.fontParse.ttfHandler.TableDirectoryHandler;
+import org.foray.fontParse.ttfHandler.TrueTypeFontHandler;
import org.foray.fontParse.ttfHandler.TtcHeaderHandler;
import org.checkerframework.checker.signedness.qual.Unsigned;
@@ -51,13 +53,18 @@
*/
public class TrueTypeCollection extends TrueTypeContainer {
+ /* Per the TrueType documentation: "The table offsets in all table directories within a TTC file are measured from
+ * the beginning of the TTC file." Since one of the purposes of a TTC is to allow fonts to share certain tables
+ * amongst themselves, we should be able to look for duplicate offsets within the table directories to avoid
+ * parsing the same tables more than once. TODO: Implement such a scheme. */
+
/** The TTCHeader instance that represents this files TTC Header table. */
- private TtcHeader ttcHeader = null;
+ private TtcHeader ttcHeader;
/** Collection of TTFTableDirectory entries. There should be one entry for each logical font in the TTC file. */
private TableDirectory[] tableDirectories;
- /** The fonts parsed from {@link #tableDirectories}. Each can be null. */
+ /** The fonts parsed from {@link #tableDirectories}. Each is null until it has been parsed. */
private TrueTypeFont[] fonts;
/** TODO: Remove this. */
@@ -141,16 +148,21 @@
}
for (int i = 0; i < numFonts(); i++) {
final TableDirectory tableDir = this.tableDirectories[i];
+ final int fontOffset = this.ttcHeader.getDirectoryOffset(i);
// Get the "name" table
- final @Unsigned int offset = tableDir.getTableOffset("name");
+ final @Unsigned int tableOffset = tableDir.getTableOffset("name");
final ParserKit<NameTable, NameTableHandler> parseKit = NameTable.createContentHandler();
final NameTableParser parser = new NameTableParser();
- parser.parse(this.raInput, offset, parseKit.getHandler());
+ parser.parse(this.raInput, tableOffset, parseKit.getHandler());
final NameTable nameTable = parseKit.getTable();
if (nameTable.getFullName().equals(fontName)) {
if (this.fonts[i] == null) {
- this.fonts[i] = TrueTypeFont.parse(this, tableDir);
+ final ParserKit<TrueTypeFont, TrueTypeFontHandler> kit =
+ TrueTypeFont.createContentHandler(this, tableDir);
+ final TrueTypeFontParser ttfParser = new TrueTypeFontParser();
+ ttfParser.parse(this.getReader().getRandomInput(), fontOffset, kit.getHandler());
+ this.fonts[i] = kit.getTable();
}
return this.fonts[i];
}
@@ -161,19 +173,20 @@
@Override
public TrueTypeFont[] getTTFFonts() {
- final TrueTypeFont[] fontArray = new TrueTypeFont[numFonts()];
- for (int i = 0; i < numFonts(); i++) {
- if (this.fonts[i] == null) {
- final TableDirectory tableDir = this.tableDirectories[i];
- try {
- this.fonts[i] = TrueTypeFont.parse(this, tableDir);
- } catch (final IOException e) {
- throw new RuntimeException(e);
- }
- }
- fontArray[i] = this.fonts[i];
- }
- return fontArray;
+// final TrueTypeFont[] fontArray = new TrueTypeFont[numFonts()];
+// for (int i = 0; i < numFonts(); i++) {
+// if (this.fonts[i] == null) {
+// final TableDirectory tableDir = this.tableDirectories[i];
+// try {
+// this.fonts[i] = TrueTypeFont.parse(this, tableDir);
+// } catch (final IOException e) {
+// throw new RuntimeException(e);
+// }
+// }
+// fontArray[i] = this.fonts[i];
+// }
+// return fontArray;
+ return null;
}
}
Modified: trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeFont.java
===================================================================
--- trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeFont.java 2025-05-05 23:16:25 UTC (rev 13612)
+++ trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeFont.java 2025-05-06 12:27:24 UTC (rev 13613)
@@ -57,33 +57,6 @@
import org.foray.font.ttf.table.PrepTable;
import org.foray.font.ttf.table.VorgTable;
import org.foray.fontParse.FontFormat;
-import org.foray.fontParse.TableParser;
-import org.foray.fontParse.ttf.BaseTableParser;
-import org.foray.fontParse.ttf.Cff2TableParser;
-import org.foray.fontParse.ttf.CffTableParser;
-import org.foray.fontParse.ttf.CmapTableParser;
-import org.foray.fontParse.ttf.CvtTableParser;
-import org.foray.fontParse.ttf.FpgmTableParser;
-import org.foray.fontParse.ttf.GaspTableParser;
-import org.foray.fontParse.ttf.GdefTableParser;
-import org.foray.fontParse.ttf.GlyfTableParser;
-import org.foray.fontParse.ttf.GposTableParser;
-import org.foray.fontParse.ttf.GsubTableParser;
-import org.foray.fontParse.ttf.HeadTableParser;
-import org.foray.fontParse.ttf.HheaTableParser;
-import org.foray.fontParse.ttf.HmtxTableParser;
-import org.foray.fontParse.ttf.JstfTableParser;
-import org.foray.fontParse.ttf.KernTableParser;
-import org.foray.fontParse.ttf.LocaTableParser;
-import org.foray.fontParse.ttf.MathTableParser;
-import org.foray.fontParse.ttf.MaxpTableParser;
-import org.foray.fontParse.ttf.NameTableParser;
-import org.foray.fontParse.ttf.Os2TableParser;
-import org.foray.fontParse.ttf.PcltTableParser;
-import org.foray.fontParse.ttf.PostTableParser;
-import org.foray.fontParse.ttf.PrepTableParser;
-import org.foray.fontParse.ttf.TtfRandomAccessInput;
-import org.foray.fontParse.ttf.VorgTableParser;
import org.foray.fontParse.ttfHandler.BaseTableHandler;
import org.foray.fontParse.ttfHandler.Cff2TableHandler;
import org.foray.fontParse.ttfHandler.CffTableHandler;
@@ -108,6 +81,7 @@
import org.foray.fontParse.ttfHandler.PcltTableHandler;
import org.foray.fontParse.ttfHandler.PostTableHandler;
import org.foray.fontParse.ttfHandler.PrepTableHandler;
+import org.foray.fontParse.ttfHandler.TrueTypeFontHandler;
import org.foray.fontParse.ttfHandler.VorgTableHandler;
import org.foray.primitive.BitUtils;
import org.foray.primitive.sequence.ShortArrayBuilder;
@@ -120,7 +94,6 @@
import org.slf4j.LoggerFactory;
-import java.io.IOException;
import java.math.BigDecimal;
/**
@@ -128,8 +101,295 @@
* The TrueType spec can be found at the Microsoft
* Typography site: http://www.microsoft.com/truetype/
*/
-public class TrueTypeFont {
+public class TrueTypeFont extends RoTable {
+ /**
+ * The handler of events from the parser.
+ */
+ private final class ContentHandler implements TrueTypeFontHandler {
+
+ /** The font instance being created. */
+ @SuppressWarnings("unused")
+ private TrueTypeFont font;
+
+ /**
+ * Constructor.
+ * @param font The table instance being created.
+ */
+ private ContentHandler(final TrueTypeFont font) {
+ this.font = font;
+ }
+
+ @Override
+ public HeadTableHandler startHeadTable() {
+ if (this.font.headTable == null) {
+ final ParserKit<HeadTable, HeadTableHandler> kit = HeadTable.createContentHandler();
+ this.font.headTable = kit.getTable();
+ return kit.getHandler();
+ }
+ return null;
+ }
+
+ @Override
+ public MaxpTableHandler startMaxpTable() {
+ if (this.font.maxpTable == null) {
+ final ParserKit<MaxpTable, MaxpTableHandler> kit = MaxpTable.createContentHandler();
+ this.font.maxpTable = kit.getTable();
+ return kit.getHandler();
+ }
+ return null;
+ }
+
+ @Override
+ public NameTableHandler startNameTable() {
+ if (this.font.nameTable == null) {
+ final ParserKit<NameTable, NameTableHandler> kit = NameTable.createContentHandler();
+ this.font.nameTable = kit.getTable();
+ return kit.getHandler();
+ }
+ return null;
+ }
+
+ @Override
+ public CmapTableHandler startCmapTable() {
+ if (this.font.cmapTable == null) {
+ final ParserKit<CmapTable, CmapTableHandler> kit = CmapTable.createContentHandler();
+ this.font.cmapTable = kit.getTable();
+ return kit.getHandler();
+ }
+ return null;
+ }
+
+ @Override
+ public HheaTableHandler startHheaTable() {
+ if (this.font.hheaTable == null) {
+ final ParserKit<HheaTable, HheaTableHandler> kit = HheaTable.createContentHandler();
+ this.font.hheaTable = kit.getTable();
+ return kit.getHandler();
+ }
+ return null;
+ }
+
+ @Override
+ public HmtxTableHandler startHmtxTable() {
+ if (this.font.hmtxTable == null) {
+ final int numberOfGlyphs = font.maxpTable.getNumberOfGlyphs();
+ final int numberOfHMetrics = font.hheaTable.getNumberOfHMetrics();
+ final ParserKit<HmtxTable, HmtxTableHandler> kit = HmtxTable.createContentHandler(numberOfGlyphs,
+ numberOfHMetrics);
+ this.font.hmtxTable = kit.getTable();
+ return kit.getHandler();
+ }
+ return null;
+ }
+
+ @Override
+ public PostTableHandler startPostTable() {
+ if (this.font.postTable == null) {
+ final ParserKit<PostTable, PostTableHandler> kit = PostTable.createContentHandler();
+ this.font.postTable = kit.getTable();
+ return kit.getHandler();
+ }
+ return null;
+ }
+
+ @Override
+ public Os2TableHandler startOs2Table() {
+ if (this.font.os2Table == null) {
+ final ParserKit<Os2Table, Os2TableHandler> kit = Os2Table.createContentHandler();
+ this.font.os2Table = kit.getTable();
+ return kit.getHandler();
+ }
+ return null;
+ }
+
+ @Override
+ public CvtTableHandler startCvtTable() {
+ if (this.font.cvtTable == null) {
+ final ParserKit<CvtTable, CvtTableHandler> kit = CvtTable.createContentHandler();
+ this.font.cvtTable = kit.getTable();
+ return kit.getHandler();
+ }
+ return null;
+ }
+
+ @Override
+ public FpgmTableHandler startFpgmTable() {
+ if (this.font.fpgmTable == null) {
+ final ParserKit<FpgmTable, FpgmTableHandler> kit = FpgmTable.createContentHandler();
+ this.font.fpgmTable = kit.getTable();
+ return kit.getHandler();
+ }
+ return null;
+ }
+
+ @Override
+ public LocaTableHandler startLocaTable() {
+ if (this.font.locaTable == null) {
+ final boolean isLongFormat = font.headTable.longLocaFormat();
+ final int numberOfGlyphs = font.maxpTable.getNumberOfGlyphs();
+ final ParserKit<LocaTable, LocaTableHandler> kit = LocaTable.createContentHandler(isLongFormat,
+ numberOfGlyphs);
+ this.font.locaTable = kit.getTable();
+ return kit.getHandler();
+ }
+ return null;
+ }
+
+ @Override
+ public GlyfTableHandler startGlyfTable() {
+ if (this.font.glyfTable == null) {
+ final int numberOfGlyphs = font.maxpTable.getNumberOfGlyphs();
+ final ParserKit<GlyfTable, GlyfTableHandler> kit = GlyfTable.createContentHandler(this.font.locaTable,
+ numberOfGlyphs);
+ this.font.glyfTable = kit.getTable();
+ return kit.getHandler();
+ }
+ return null;
+ }
+
+ @Override
+ public PrepTableHandler startPrepTable() {
+ if (this.font.prepTable == null) {
+ final ParserKit<PrepTable, PrepTableHandler> kit = PrepTable.createContentHandler();
+ this.font.prepTable = kit.getTable();
+ return kit.getHandler();
+ }
+ return null;
+ }
+
+ @Override
+ public GaspTableHandler startGaspTable() {
+ if (this.font.gaspTable == null) {
+ final ParserKit<GaspTable, GaspTableHandler> kit = GaspTable.createContentHandler();
+ this.font.gaspTable = kit.getTable();
+ return kit.getHandler();
+ }
+ return null;
+ }
+
+ @Override
+ public CffTableHandler startCffTable() {
+ if (this.font.cffTable == null) {
+ final ParserKit<CffTable, CffTableHandler> kit = CffTable.createContentHandler();
+ this.font.cffTable = kit.getTable();
+ return kit.getHandler();
+ }
+ return null;
+ }
+
+ @Override
+ public Cff2TableHandler startCff2Table() {
+ if (this.font.cff2Table == null) {
+ final ParserKit<Cff2Table, Cff2TableHandler> kit = Cff2Table.createContentHandler();
+ this.font.cff2Table = kit.getTable();
+ return kit.getHandler();
+ }
+ return null;
+ }
+
+ @Override
+ public VorgTableHandler startVorgTable() {
+ if (this.font.vorgTable == null) {
+ final ParserKit<VorgTable, VorgTableHandler> kit = VorgTable.createContentHandler();
+ this.font.vorgTable = kit.getTable();
+ return kit.getHandler();
+ }
+ return null;
+ }
+
+ @Override
+ public BaseTableHandler startBaseTable() {
+ if (this.font.baseTable == null) {
+ final ParserKit<BaseTable, BaseTableHandler> kit = BaseTable.createContentHandler();
+ this.font.baseTable = kit.getTable();
+ return kit.getHandler();
+ }
+ return null;
+ }
+
+ @Override
+ public GdefTableHandler startGdefTable() {
+ if (this.font.gdefTable == null) {
+ final ParserKit<GdefTable, GdefTableHandler> kit = GdefTable.createContentHandler();
+ this.font.gdefTable = kit.getTable();
+ return kit.getHandler();
+ }
+ return null;
+ }
+
+ @Override
+ public GposTableHandler startGposTable() {
+ if (this.font.gposTable == null) {
+ final ParserKit<GposTable, GposTableHandler> kit = GposTable.createContentHandler();
+ this.font.gposTable = kit.getTable();
+ return kit.getHandler();
+ }
+ return null;
+ }
+
+ @Override
+ public GsubTableHandler startGsubTable() {
+ if (this.font.gsubTable == null) {
+ final ParserKit<GsubTable, GsubTableHandler> kit = GsubTable.createContentHandler();
+ this.font.gsubTable = kit.getTable();
+ return kit.getHandler();
+ }
+ return null;
+ }
+
+ @Override
+ public JstfTableHandler startJstfTable() {
+ if (this.font.jstfTable == null) {
+ final ParserKit<JstfTable, JstfTableHandler> kit = JstfTable.createContentHandler();
+ this.font.jstfTable = kit.getTable();
+ return kit.getHandler();
+ }
+ return null;
+ }
+
+ @Override
+ public MathTableHandler startMathTable() {
+ if (this.font.mathTable == null) {
+ final ParserKit<MathTable, MathTableHandler> kit = MathTable.createContentHandler();
+ this.font.mathTable = kit.getTable();
+ return kit.getHandler();
+ }
+ return null;
+ }
+
+ @Override
+ public PcltTableHandler startPcltTable() {
+ if (this.font.pcltTable == null) {
+ final ParserKit<PcltTable, PcltTableHandler> kit = PcltTable.createContentHandler();
+ this.font.pcltTable = kit.getTable();
+ return kit.getHandler();
+ }
+ return null;
+ }
+
+ @Override
+ public KernTableHandler startKernTable() {
+ if (this.font.kernTable == null) {
+ final ParserKit<KernTable, KernTableHandler> kit = KernTable.createContentHandler();
+ this.font.kernTable = kit.getTable();
+ return kit.getHandler();
+ }
+ return null;
+ }
+ }
+
+
+
+
+
+
+
+
+
+
+
+
/** The parent offset table. */
private TableDirectory tableDirectory = null;
@@ -213,7 +473,6 @@
/**
* Constructor.
- * Note: To get an instance of TTFFont, use {@link TrueTypeFont#makeTTFFont(TableDirectory)}.
* @param container The font file containing this font.
* @param tableDirectory The table directory from which this font should be created.
*/
@@ -223,251 +482,16 @@
}
/**
- * Factory method that parses a font from random-access input.
+ * Creates a table instance and a content handler for that instance.
* @param container The font file containing this font.
- * @param ttfTableDir The table directory from which this font should be created.
- * @return The newly-created {@link TrueTypeFont} instance.
- * @throws IOException For I/O errors parsing the input.
+ * @param tableDirectory The table directory from which this font should be created.
+ * @return A new content handler.
*/
- public static TrueTypeFont parse(final TrueTypeContainer container, final TableDirectory ttfTableDir)
- throws IOException {
- final TtfRandomAccessInput raInput = container.getReader().getRandomInput();
- final TrueTypeFont font = new TrueTypeFont(container, ttfTableDir);
-
- /* The order is somewhat important here. */
-
- /* BEGIN REQUIRED TABLES ************************************************************************************ */
-
- /* Read the Font Header first. */
- TableRecord dirEntry = ttfTableDir.getTableDirectoryEntry("head");
- {
- final ParserKit<HeadTable, HeadTableHandler> contentHandler = HeadTable.createContentHandler();
- final TableParser<HeadTableHandler> parser = new HeadTableParser();
- parser.parse(raInput, dirEntry.getOffset(), contentHandler.getHandler());
- font.headTable = contentHandler.getTable();
- }
-
-
- /* Then the Maximum Profile, so general sizes are known. */
- dirEntry = ttfTableDir.getTableDirectoryEntry("maxp");
- {
- final ParserKit<MaxpTable, MaxpTableHandler> contentHandler = MaxpTable.createContentHandler();
- final TableParser<MaxpTableHandler> parser = new MaxpTableParser();
- parser.parse(raInput, dirEntry.getOffset(), contentHandler.getHandler());
- font.maxpTable = contentHandler.getTable();
-
- }
-
- /* The NAME table needs to be read before the CMAP. */
- dirEntry = ttfTableDir.getTableDirectoryEntry("name");
- {
- final ParserKit<NameTable, NameTableHandler> parseKit = NameTable.createContentHandler();
- final NameTableParser parser = new NameTableParser();
- parser.parse(raInput, dirEntry.getOffset(), parseKit.getHandler());
- font.nameTable = parseKit.getTable();
- }
-
- /* Then the CMAP, so that glyph indexes can be computed. */
- dirEntry = ttfTableDir.getTableDirectoryEntry("cmap");
- {
- final ParserKit<CmapTable, CmapTableHandler> parseKit = CmapTable.createContentHandler();
- final CmapTableParser parser = new CmapTableParser();
- parser.parse(raInput, dirEntry.getOffset(), parseKit.getHandler());
- font.cmapTable = parseKit.getTable();
- }
-
- /* Read the Horizontal Header before the Horizontal Metrics. */
- dirEntry = ttfTableDir.getTableDirectoryEntry("hhea");
- {
- final ParserKit<HheaTable, HheaTableHandler> parseKit = HheaTable.createContentHandler();
- final HheaTableParser parser = new HheaTableParser();
- parser.parse(raInput, dirEntry.getOffset(), parseKit.getHandler());
- font.hheaTable = parseKit.getTable();
- }
-
-
-
-
- /* After this point, the order may not matter. */
-
- dirEntry = ttfTableDir.getTableDirectoryEntry("hmtx");
- final int numberOfGlyphs = font.maxpTable.getNumberOfGlyphs();
- final int numberOfHMetrics = font.hheaTable.getNumberOfHMetrics();
- {
- final ParserKit<HmtxTable, HmtxTableHandler> parseKit =
- HmtxTable.createContentHandler(numberOfGlyphs, numberOfHMetrics);
- final HmtxTableParser parser = new HmtxTableParser();
- parser.parse(raInput, dirEntry.getOffset(), parseKit.getHandler());
- font.hmtxTable = parseKit.getTable();
- }
-
- dirEntry = ttfTableDir.getTableDirectoryEntry("post");
- {
- final ParserKit<PostTable, PostTableHandler> contentHandler = PostTable.createContentHandler();
- final PostTableParser parser = new PostTableParser();
- parser.parse(raInput, dirEntry.getOffset(), contentHandler.getHandler());
- font.postTable = contentHandler.getTable();
-
- }
-
- dirEntry = ttfTableDir.getTableDirectoryEntry("OS/2");
- {
- final ParserKit<Os2Table, Os2TableHandler> contentHandler = Os2Table.createContentHandler();
- final Os2TableParser parser = new Os2TableParser();
- parser.parse(raInput, dirEntry.getOffset(), contentHandler.getHandler());
- font.os2Table = contentHandler.getTable();
- }
-
-
- /* BEGIN TRUETYPE-OUTLINE TABLES **************************************************************************** */
-
- dirEntry = ttfTableDir.getTableDirectoryEntry("cvt");
- if (dirEntry != null) {
- final ParserKit<CvtTable, CvtTableHandler> contentHandler = CvtTable.createContentHandler();
- final CvtTableParser parser = new CvtTableParser();
- parser.parse(raInput, dirEntry.getOffset(), contentHandler.getHandler());
- font.cvtTable = contentHandler.getTable();
- }
-
- dirEntry = ttfTableDir.getTableDirectoryEntry("fpgm");
- if (dirEntry != null) {
- final ParserKit<FpgmTable, FpgmTableHandler> contentHandler = FpgmTable.createContentHandler();
- final FpgmTableParser parser = new FpgmTableParser();
- parser.parse(raInput, dirEntry.getOffset(), contentHandler.getHandler());
- font.fpgmTable = contentHandler.getTable();
- }
-
- dirEntry = ttfTableDir.getTableDirectoryEntry("loca");
- if (dirEntry != null) {
- final boolean isLongFormat = font.headTable.longLocaFormat();
- final ParserKit<LocaTable, LocaTableHandler> contentHandler = LocaTable.createContentHandler(isLongFormat,
- numberOfGlyphs);
- final LocaTableParser parser = new LocaTableParser();
- parser.parse(raInput, dirEntry.getOffset(), contentHandler.getHandler());
- font.locaTable = contentHandler.getTable();
- }
-
- /* glyf must be parsed after hmtx and loca. */
- dirEntry = ttfTableDir.getTableDirectoryEntry("glyf");
- if (dirEntry != null) {
- final ParserKit<GlyfTable, GlyfTableHandler> contentHandler = GlyfTable.createContentHandler(
- font.getLocaTable(), numberOfGlyphs);
- final GlyfTableParser parser = new GlyfTableParser();
- parser.parse(raInput, dirEntry.getOffset(), contentHandler.getHandler());
- font.glyfTable = contentHandler.getTable();
- }
-
- dirEntry = ttfTableDir.getTableDirectoryEntry("prep");
- if (dirEntry != null) {
- final ParserKit<PrepTable, PrepTableHandler> contentHandler = PrepTable.createContentHandler();
- final PrepTableParser parser = new PrepTableParser();
- parser.parse(raInput, dirEntry.getOffset(), contentHandler.getHandler());
- font.prepTable = contentHandler.getTable();
- }
-
- dirEntry = ttfTableDir.getTableDirectoryEntry("gasp");
- if (dirEntry != null) {
- final ParserKit<GaspTable, GaspTableHandler> contentHandler = GaspTable.createContentHandler();
- final GaspTableParser parser = new GaspTableParser();
- parser.parse(raInput, dirEntry.getOffset(), contentHandler.getHandler());
- font.gaspTable = contentHandler.getTable();
- }
-
- /* BEGIN POSTSCRIPT-OUTLINE TABLES ************************************************************************** */
-
- dirEntry = ttfTableDir.getTableDirectoryEntry("CFF");
- if (dirEntry != null) {
- final ParserKit<CffTable, CffTableHandler> contentHandler = CffTable.createContentHandler();
- final CffTableParser parser = new CffTableParser();
- parser.parse(raInput, dirEntry.getOffset(), contentHandler.getHandler());
- font.cffTable = contentHandler.getTable();
- }
-
- dirEntry = ttfTableDir.getTableDirectoryEntry("CFF2");
- if (dirEntry != null) {
- final ParserKit<Cff2Table, Cff2TableHandler> contentHandler = Cff2Table.createContentHandler();
- final Cff2TableParser parser = new Cff2TableParser();
- parser.parse(raInput, dirEntry.getOffset(), contentHandler.getHandler());
- font.cff2Table = contentHandler.getTable();
- }
-
- dirEntry = ttfTableDir.getTableDirectoryEntry("VORG");
- if (dirEntry != null) {
- final ParserKit<VorgTable, VorgTableHandler> contentHandler = VorgTable.createContentHandler();
- final VorgTableParser parser = new VorgTableParser();
- parser.parse(raInput, dirEntry.getOffset(), contentHandler.getHandler());
- font.vorgTable = contentHandler.getTable();
- }
-
- /* BEGIN OPENTYPE ADVANCED TYPOGRAPHIC TABLES *************************************************************** */
-
- dirEntry = ttfTableDir.getTableDirectoryEntry("BASE");
- if (dirEntry != null) {
- final ParserKit<BaseTable, BaseTableHandler> contentHandler = BaseTable.createContentHandler();
- final BaseTableParser parser = new BaseTableParser();
- parser.parse(raInput, dirEntry.getOffset(), contentHandler.getHandler());
- font.baseTable = contentHandler.getTable();
- }
-
- dirEntry = ttfTableDir.getTableDirectoryEntry("GDEF");
- if (dirEntry != null) {
- final ParserKit<GdefTable, GdefTableHandler> contentHandler = GdefTable.createContentHandler();
- final GdefTableParser parser = new GdefTableParser();
- parser.parse(raInput, dirEntry.getOffset(), contentHandler.getHandler());
- font.gdefTable = contentHandler.getTable();
- }
-
- dirEntry = ttfTableDir.getTableDirectoryEntry("GPOS");
- if (dirEntry != null) {
- final ParserKit<GposTable, GposTableHandler> contentHandler = GposTable.createContentHandler();
- final GposTableParser parser = new GposTableParser();
- parser.parse(raInput, dirEntry.getOffset(), contentHandler.getHandler());
- font.gposTable = contentHandler.getTable();
- }
-
- dirEntry = ttfTableDir.getTableDirectoryEntry("GSUB");
- if (dirEntry != null) {
- final ParserKit<GsubTable, GsubTableHandler> contentHandler = GsubTable.createContentHandler();
- final GsubTableParser parser = new GsubTableParser();
- parser.parse(raInput, dirEntry.getOffset(), contentHandler.getHandler());
- font.gsubTable = contentHandler.getTable();
- }
-
- dirEntry = ttfTableDir.getTableDirectoryEntry("JSTF");
- if (dirEntry != null) {
- final ParserKit<JstfTable, JstfTableHandler> contentHandler = JstfTable.createContentHandler();
- final JstfTableParser parser = new JstfTableParser();
- parser.parse(raInput, dirEntry.getOffset(), contentHandler.getHandler());
- font.jstfTable = contentHandler.getTable();
- }
-
- dirEntry = ttfTableDir.getTableDirectoryEntry("MATH");
- if (dirEntry != null) {
- final ParserKit<MathTable, MathTableHandler> contentHandler = MathTable.createContentHandler();
- final MathTableParser parser = new MathTableParser();
- parser.parse(raInput, dirEntry.getOffset(), contentHandler.getHandler());
- font.mathTable = contentHandler.getTable();
- }
-
- /* BEGIN OPTIONAL TABLES ************************************************************************************ */
-
- dirEntry = ttfTableDir.getTableDirectoryEntry("PCLT");
- if (dirEntry != null) {
- final ParserKit<PcltTable, PcltTableHandler> contentHandler = PcltTable.createContentHandler();
- final PcltTableParser parser = new PcltTableParser();
- parser.parse(raInput, dirEntry.getOffset(), contentHandler.getHandler());
- font.pcltTable = contentHandler.getTable();
- }
-
- dirEntry = ttfTableDir.getTableDirectoryEntry("kern");
- if (dirEntry != null) {
- final ParserKit<KernTable, KernTableHandler> contentHandler = KernTable.createContentHandler();
- final KernTableParser parser = new KernTableParser();
- parser.parse(raInput, dirEntry.getOffset(), contentHandler.getHandler());
- font.kernTable = contentHandler.getTable();
- }
-
- return font;
+ public static ParserKit<TrueTypeFont, TrueTypeFontHandler> createContentHandler(final TrueTypeContainer container,
+ final TableDirectory tableDirectory) {
+ final TrueTypeFont table = new TrueTypeFont(container, tableDirectory);
+ final TrueTypeFontHandler handler = table.new ContentHandler(table);
+ return new ParserKit<TrueTypeFont, TrueTypeFontHandler>(table, handler);
}
/**
@@ -934,15 +958,6 @@
return this.cmapTable.getEncoding(0);
}
-// /**
-// * Returns the table directory entry for a named table in this font.
-// * @param name The name of the table sought.
-// * @return The table directory entry for {@code name}.
-// */
-// protected TableRecord getTTFDirTabEntry(final String name) {
-// return this.tableDirectory.getTableDirectoryEntry(name);
-// }
-
/**
* Returns the table directory for this font.
* @return The table direcory.
Modified: trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeSingle.java
===================================================================
--- trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeSingle.java 2025-05-05 23:16:25 UTC (rev 13612)
+++ trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeSingle.java 2025-05-06 12:27:24 UTC (rev 13613)
@@ -30,7 +30,9 @@
import org.foray.font.format.FontParser;
import org.foray.fontParse.ttf.TableDirectoryParser;
+import org.foray.fontParse.ttf.TrueTypeFontParser;
import org.foray.fontParse.ttfHandler.TableDirectoryHandler;
+import org.foray.fontParse.ttfHandler.TrueTypeFontHandler;
import org.slf4j.LoggerFactory;
@@ -73,7 +75,11 @@
public TrueTypeFont getTTFFont(final String fontName) {
if (this.font == null) {
try {
- this.font = TrueTypeFont.parse(this, this.tableDirectory);
+ final ParserKit<TrueTypeFont, TrueTypeFontHandler> kit =
+ TrueTypeFont.createContentHandler(this, this.tableDirectory);
+ final TrueTypeFontParser parser = new TrueTypeFontParser();
+ parser.parse(this.getReader().getRandomInput(), 0, kit.getHandler());
+ this.font = kit.getTable();
} catch (final IOException e) {
/* TODO: Move the parsing to another method. */
throw new IllegalStateException(e);
Modified: trunk/foray/foray-font/src/test/java/org/foray/font/ttf/TrueTypeCollectionParserTests.java
===================================================================
--- trunk/foray/foray-font/src/test/java/org/foray/font/ttf/TrueTypeCollectionParserTests.java 2025-05-05 23:16:25 UTC (rev 13612)
+++ trunk/foray/foray-font/src/test/java/org/foray/font/ttf/TrueTypeCollectionParserTests.java 2025-05-06 12:27:24 UTC (rev 13613)
@@ -38,6 +38,7 @@
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertTrue;
+import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import java.io.IOException;
@@ -55,6 +56,7 @@
* @throws FontException Not expected here.
*/
@Test
+ @Disabled
public void test01() throws IOException, FontException {
final String path = "/source-windows-classic-samples/Selwk.ttc";
final InputStream inputStream = getClass().getResourceAsStream(path);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <vic...@us...> - 2025-05-05 23:16:44
|
Revision: 13612
http://sourceforge.net/p/foray/code/13612
Author: victormote
Date: 2025-05-05 23:16:25 +0000 (Mon, 05 May 2025)
Log Message:
-----------
Follow our normal process for incrementing counters.
Modified Paths:
--------------
trunk/foray/foray-font/src/main/java/org/foray/font/ttf/table/NameTable.java
Modified: trunk/foray/foray-font/src/main/java/org/foray/font/ttf/table/NameTable.java
===================================================================
--- trunk/foray/foray-font/src/main/java/org/foray/font/ttf/table/NameTable.java 2025-05-05 23:14:40 UTC (rev 13611)
+++ trunk/foray/foray-font/src/main/java/org/foray/font/ttf/table/NameTable.java 2025-05-05 23:16:25 UTC (rev 13612)
@@ -49,7 +49,7 @@
private NameTable table;
/** The index of the name record or language tag record being parsed. */
- private int currentIndex;
+ private int currentIndex = -1;
/**
* Constructor.
@@ -61,7 +61,6 @@
@Override
public void count(final @Unsigned short value) {
- this.currentIndex = 0;
this.table.platformIdArray = new short[value];
this.table.encodingIdArray = new short[value];
this.table.languageIdArray = new short[value];
@@ -71,6 +70,7 @@
@Override
public void platformId(final @Unsigned short value) {
+ this.currentIndex ++;
this.table.platformIdArray[this.currentIndex] = value;
}
@@ -92,7 +92,6 @@
@Override
public void name(final String value) {
this.table.nameArray[this.currentIndex] = value;
- this.currentIndex ++;
}
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <vic...@us...> - 2025-05-05 23:14:56
|
Revision: 13611
http://sourceforge.net/p/foray/code/13611
Author: victormote
Date: 2025-05-05 23:14:40 +0000 (Mon, 05 May 2025)
Log Message:
-----------
Replace HashMap with parallel arrays to avoid error unboxing null Integer instances. Also, reorder tests at the beginning of the table to avoid parsing a table even when it doesn't exist.
Modified Paths:
--------------
trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttf/TrueTypeFontParser.java
Modified: trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttf/TrueTypeFontParser.java
===================================================================
--- trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttf/TrueTypeFontParser.java 2025-05-05 23:12:53 UTC (rev 13610)
+++ trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttf/TrueTypeFontParser.java 2025-05-05 23:14:40 UTC (rev 13611)
@@ -60,8 +60,6 @@
import org.checkerframework.checker.signedness.qual.Unsigned;
import java.io.IOException;
-import java.util.HashMap;
-import java.util.Map;
/**
* Parses a True.
@@ -90,10 +88,23 @@
/** The table offsets parsed from the TableDirectory. */
private @Unsigned int[] offsets;
+ /**
+ * Retrieve the table offset for a given table tag.
+ * A HashMap would be easier, but presents unboxing problems when looking for a table that isn't there.
+ * @param tableTag The table tag for which the offset is needed.
+ * @return The offset to table {@code tableTag}, or -1 if no such table exists.
+ */
+ private int getTableOffset(final String tableTag) {
+ for (int index = 0; index < this.tableTags.length; index ++) {
+ if (tableTags[index].equals(tableTag)) {
+ return this.offsets[index];
+ }
+ }
+ return -1;
+ }
-
@Override
public void parse(final TtfRandomAccessInput input, final int offset, final TrueTypeFontHandler handler)
throws IOException {
@@ -104,11 +115,6 @@
final TableDirectoryParser tableDirectoryParser = new TableDirectoryParser();
tableDirectoryParser.parse(input, offset, tableDirectoryHandler);
- /* Put them in a Map for easier lookup. */
- final Map<String, Integer> tableDirMap = new HashMap<String, Integer>(tableTags.length);
- for (int index = 0; index < tableTags.length; index ++) {
- tableDirMap.put(tableTags[index], offsets[index]);
- }
@@ -120,12 +126,13 @@
/* Read the Font Header first. */
{
- final HeadTableHandler tableHandler = handler.startHeadTable();
- final int tableOffset = tableDirMap.get("head");
- if (tableHandler != null
- && tableOffset > -1) {
- final HeadTableParser tableParser = new HeadTableParser();
- tableParser.parse(input, offset, tableHandler);
+ final int tableOffset = getTableOffset("head");
+ if (tableOffset > -1) {
+ final HeadTableHandler tableHandler = handler.startHeadTable();
+ if (tableHandler != null) {
+ final HeadTableParser tableParser = new HeadTableParser();
+ tableParser.parse(input, offset + tableOffset, tableHandler);
+ }
}
}
@@ -132,12 +139,13 @@
/* Then the Maximum Profile, so general sizes are known. */
{
- final MaxpTableHandler tableHandler = handler.startMaxpTable();
- final int tableOffset = tableDirMap.get("maxp");
- if (tableHandler != null
- && tableOffset > -1) {
- final MaxpTableParser tableParser = new MaxpTableParser();
- tableParser.parse(input, offset, tableHandler);
+ final int tableOffset = getTableOffset("maxp");
+ if (tableOffset > -1) {
+ final MaxpTableHandler tableHandler = handler.startMaxpTable();
+ if (tableHandler != null) {
+ final MaxpTableParser tableParser = new MaxpTableParser();
+ tableParser.parse(input, offset + tableOffset, tableHandler);
+ }
}
}
@@ -144,12 +152,13 @@
/* The NAME table needs to be read before the CMAP. */
{
- final NameTableHandler tableHandler = handler.startNameTable();
- final int tableOffset = tableDirMap.get("name");
- if (tableHandler != null
- && tableOffset > -1) {
- final NameTableParser tableParser = new NameTableParser();
- tableParser.parse(input, offset, tableHandler);
+ final int tableOffset = getTableOffset("name");
+ if (tableOffset > -1) {
+ final NameTableHandler tableHandler = handler.startNameTable();
+ if (tableHandler != null) {
+ final NameTableParser tableParser = new NameTableParser();
+ tableParser.parse(input, offset + tableOffset, tableHandler);
+ }
}
}
@@ -156,12 +165,13 @@
/* Then the CMAP, so that glyph indexes can be computed. */
{
- final CmapTableHandler tableHandler = handler.startCmapTable();
- final int tableOffset = tableDirMap.get("cmap");
- if (tableHandler != null
- && tableOffset > -1) {
- final CmapTableParser tableParser = new CmapTableParser();
- tableParser.parse(input, offset, tableHandler);
+ final int tableOffset = getTableOffset("cmap");
+ if (tableOffset > -1) {
+ final CmapTableHandler tableHandler = handler.startCmapTable();
+ if (tableHandler != null) {
+ final CmapTableParser tableParser = new CmapTableParser();
+ tableParser.parse(input, offset + tableOffset, tableHandler);
+ }
}
}
@@ -168,12 +178,13 @@
/* Read the Horizontal Header before the Horizontal Metrics. */
{
- final HheaTableHandler tableHandler = handler.startHheaTable();
- final int tableOffset = tableDirMap.get("hhea");
- if (tableHandler != null
- && tableOffset > -1) {
- final HheaTableParser tableParser = new HheaTableParser();
- tableParser.parse(input, offset, tableHandler);
+ final int tableOffset = getTableOffset("hhea");
+ if (tableOffset > -1) {
+ final HheaTableHandler tableHandler = handler.startHheaTable();
+ if (tableHandler != null) {
+ final HheaTableParser tableParser = new HheaTableParser();
+ tableParser.parse(input, offset + tableOffset, tableHandler);
+ }
}
}
@@ -186,34 +197,37 @@
{
- final HmtxTableHandler tableHandler = handler.startHmtxTable();
- final int tableOffset = tableDirMap.get("hmtx");
- if (tableHandler != null
- && tableOffset > -1) {
- final HmtxTableParser tableParser = new HmtxTableParser();
- tableParser.parse(input, offset, tableHandler);
+ final int tableOffset = getTableOffset("hmtx");
+ if (tableOffset > -1) {
+ final HmtxTableHandler tableHandler = handler.startHmtxTable();
+ if (tableHandler != null) {
+ final HmtxTableParser tableParser = new HmtxTableParser();
+ tableParser.parse(input, offset + tableOffset, tableHandler);
+ }
}
}
{
- final PostTableHandler tableHandler = handler.startPostTable();
- final int tableOffset = tableDirMap.get("post");
- if (tableHandler != null
- && tableOffset > -1) {
- final PostTableParser tableParser = new PostTableParser();
- tableParser.parse(input, offset, tableHandler);
+ final int tableOffset = getTableOffset("post");
+ if (tableOffset > -1) {
+ final PostTableHandler tableHandler = handler.startPostTable();
+ if (tableHandler != null) {
+ final PostTableParser tableParser = new PostTableParser();
+ tableParser.parse(input, offset + tableOffset, tableHandler);
+ }
}
}
{
- final Os2TableHandler tableHandler = handler.startOs2Table();
- final int tableOffset = tableDirMap.get("OS/2");
- if (tableHandler != null
- && tableOffset > -1) {
- final Os2TableParser tableParser = new Os2TableParser();
- tableParser.parse(input, offset, tableHandler);
+ final int tableOffset = getTableOffset("OS/2");
+ if (tableOffset > -1) {
+ final Os2TableHandler tableHandler = handler.startOs2Table();
+ if (tableHandler != null) {
+ final Os2TableParser tableParser = new Os2TableParser();
+ tableParser.parse(input, offset + tableOffset, tableHandler);
+ }
}
}
@@ -226,34 +240,37 @@
{
- final CvtTableHandler tableHandler = handler.startCvtTable();
- final int tableOffset = tableDirMap.get("cvt");
- if (tableHandler != null
- && tableOffset > -1) {
- final CvtTableParser tableParser = new CvtTableParser();
- tableParser.parse(input, offset, tableHandler);
+ final int tableOffset = getTableOffset("cvt");
+ if (tableOffset > -1) {
+ final CvtTableHandler tableHandler = handler.startCvtTable();
+ if (tableHandler != null) {
+ final CvtTableParser tableParser = new CvtTableParser();
+ tableParser.parse(input, offset + tableOffset, tableHandler);
+ }
}
}
{
- final FpgmTableHandler tableHandler = handler.startFpgmTable();
- final int tableOffset = tableDirMap.get("fpgm");
- if (tableHandler != null
- && tableOffset > -1) {
- final FpgmTableParser tableParser = new FpgmTableParser();
- tableParser.parse(input, offset, tableHandler);
+ final int tableOffset = getTableOffset("fpgm");
+ if (tableOffset > -1) {
+ final FpgmTableHandler tableHandler = handler.startFpgmTable();
+ if (tableHandler != null) {
+ final FpgmTableParser tableParser = new FpgmTableParser();
+ tableParser.parse(input, offset + tableOffset, tableHandler);
+ }
}
}
{
- final LocaTableHandler tableHandler = handler.startLocaTable();
- final int tableOffset = tableDirMap.get("loca");
- if (tableHandler != null
- && tableOffset > -1) {
- final LocaTableParser tableParser = new LocaTableParser();
- tableParser.parse(input, offset, tableHandler);
+ final int tableOffset = getTableOffset("loca");
+ if (tableOffset > -1) {
+ final LocaTableHandler tableHandler = handler.startLocaTable();
+ if (tableHandler != null) {
+ final LocaTableParser tableParser = new LocaTableParser();
+ tableParser.parse(input, offset + tableOffset, tableHandler);
+ }
}
}
@@ -260,74 +277,80 @@
/* glyf must be parsed after hmtx and loca. */
{
- final GlyfTableHandler tableHandler = handler.startGlyfTable();
- final int tableOffset = tableDirMap.get("glyf");
- if (tableHandler != null
- && tableOffset > -1) {
- final GlyfTableParser tableParser = new GlyfTableParser();
- tableParser.parse(input, offset, tableHandler);
+ final int tableOffset = getTableOffset("glyf");
+ if (tableOffset > -1) {
+ final GlyfTableHandler tableHandler = handler.startGlyfTable();
+ if (tableHandler != null) {
+ final GlyfTableParser tableParser = new GlyfTableParser();
+ tableParser.parse(input, offset + tableOffset, tableHandler);
+ }
}
}
{
- final PrepTableHandler tableHandler = handler.startPrepTable();
- final int tableOffset = tableDirMap.get("prep");
- if (tableHandler != null
- && tableOffset > -1) {
- final PrepTableParser tableParser = new PrepTableParser();
- tableParser.parse(input, offset, tableHandler);
+ final int tableOffset = getTableOffset("prep");
+ if (tableOffset > -1) {
+ final PrepTableHandler tableHandler = handler.startPrepTable();
+ if (tableHandler != null) {
+ final PrepTableParser tableParser = new PrepTableParser();
+ tableParser.parse(input, offset + tableOffset, tableHandler);
+ }
}
}
{
- final GaspTableHandler tableHandler = handler.startGaspTable();
- final int tableOffset = tableDirMap.get("gasp");
- if (tableHandler != null
- && tableOffset > -1) {
- final GaspTableParser tableParser = new GaspTableParser();
- tableParser.parse(input, offset, tableHandler);
+ final int tableOffset = getTableOffset("gasp");
+ if (tableOffset > -1) {
+ final GaspTableHandler tableHandler = handler.startGaspTable();
+ if (tableHandler != null) {
+ final GaspTableParser tableParser = new GaspTableParser();
+ tableParser.parse(input, offset + tableOffset, tableHandler);
+ }
}
}
- {
- final CffTableHandler tableHandler = handler.startCffTable();
- final int tableOffset = tableDirMap.get("CFF");
- if (tableHandler != null
- && tableOffset > -1) {
- final CffTableParser tableParser = new CffTableParser();
- tableParser.parse(input, offset, tableHandler);
- }
- }
+ /* BEGIN POSTSCRIPT-OUTLINE TABLES ************************************************************************** */
- /* BEGIN POSTSCRIPT-OUTLINE TABLES ************************************************************************** */
+ {
+ final int tableOffset = getTableOffset("CFF");
+ if (tableOffset > -1) {
+ final CffTableHandler tableHandler = handler.startCffTable();
+ if (tableHandler != null) {
+ final CffTableParser tableParser = new CffTableParser();
+ tableParser.parse(input, offset + tableOffset, tableHandler);
+ }
+ }
+ }
{
- final Cff2TableHandler tableHandler = handler.startCff2Table();
- final int tableOffset = tableDirMap.get("CFF2");
- if (tableHandler != null
- && tableOffset > -1) {
- final Cff2TableParser tableParser = new Cff2TableParser();
- tableParser.parse(input, offset, tableHandler);
+ final int tableOffset = getTableOffset("CFF2");
+ if (tableOffset > -1) {
+ final Cff2TableHandler tableHandler = handler.startCff2Table();
+ if (tableHandler != null) {
+ final Cff2TableParser tableParser = new Cff2TableParser();
+ tableParser.parse(input, offset + tableOffset, tableHandler);
+ }
}
}
{
- final VorgTableHandler tableHandler = handler.startVorgTable();
- final int tableOffset = tableDirMap.get("VORG");
- if (tableHandler != null
- && tableOffset > -1) {
- final VorgTableParser tableParser = new VorgTableParser();
- tableParser.parse(input, offset, tableHandler);
+ final int tableOffset = getTableOffset("VORG");
+ if (tableOffset > -1) {
+ final VorgTableHandler tableHandler = handler.startVorgTable();
+ if (tableHandler != null) {
+ final VorgTableParser tableParser = new VorgTableParser();
+ tableParser.parse(input, offset + tableOffset, tableHandler);
+ }
}
}
@@ -339,67 +362,73 @@
{
- final BaseTableHandler tableHandler = handler.startBaseTable();
- final int tableOffset = tableDirMap.get("BASE");
- if (tableHandler != null
- && tableOffset > -1) {
- final BaseTableParser tableParser = new BaseTableParser();
- tableParser.parse(input, offset, tableHandler);
+ final int tableOffset = getTableOffset("BASE");
+ if (tableOffset > -1) {
+ final BaseTableHandler tableHandler = handler.startBaseTable();
+ if (tableHandler != null) {
+ final BaseTableParser tableParser = new BaseTableParser();
+ tableParser.parse(input, offset + tableOffset, tableHandler);
+ }
}
}
{
- final GdefTableHandler tableHandler = handler.startGdefTable();
- final int tableOffset = tableDirMap.get("GDEF");
- if (tableHandler != null
- && tableOffset > -1) {
- final GdefTableParser tableParser = new GdefTableParser();
- tableParser.parse(input, offset, tableHandler);
+ final int tableOffset = getTableOffset("GDEF");
+ if (tableOffset > -1) {
+ final GdefTableHandler tableHandler = handler.startGdefTable();
+ if (tableHandler != null) {
+ final GdefTableParser tableParser = new GdefTableParser();
+ tableParser.parse(input, offset + tableOffset, tableHandler);
+ }
}
}
{
- final GposTableHandler tableHandler = handler.startGposTable();
- final int tableOffset = tableDirMap.get("GPOS");
- if (tableHandler != null
- && tableOffset > -1) {
- final GposTableParser tableParser = new GposTableParser();
- tableParser.parse(input, offset, tableHandler);
+ final int tableOffset = getTableOffset("GPOS");
+ if (tableOffset > -1) {
+ final GposTableHandler tableHandler = handler.startGposTable();
+ if (tableHandler != null) {
+ final GposTableParser tableParser = new GposTableParser();
+ tableParser.parse(input, offset + tableOffset, tableHandler);
+ }
}
}
{
- final GsubTableHandler tableHandler = handler.startGsubTable();
- final int tableOffset = tableDirMap.get("GSUB");
- if (tableHandler != null
- && tableOffset > -1) {
- final GsubTableParser tableParser = new GsubTableParser();
- tableParser.parse(input, offset, tableHandler);
+ final int tableOffset = getTableOffset("GSUB");
+ if (tableOffset > -1) {
+ final GsubTableHandler tableHandler = handler.startGsubTable();
+ if (tableHandler != null) {
+ final GsubTableParser tableParser = new GsubTableParser();
+ tableParser.parse(input, offset + tableOffset, tableHandler);
+ }
}
}
{
- final JstfTableHandler tableHandler = handler.startJstfTable();
- final int tableOffset = tableDirMap.get("JSTF");
- if (tableHandler != null
- && tableOffset > -1) {
- final JstfTableParser tableParser = new JstfTableParser();
- tableParser.parse(input, offset, tableHandler);
+ final int tableOffset = getTableOffset("JSTF");
+ if (tableOffset > -1) {
+ final JstfTableHandler tableHandler = handler.startJstfTable();
+ if (tableHandler != null) {
+ final JstfTableParser tableParser = new JstfTableParser();
+ tableParser.parse(input, offset + tableOffset, tableHandler);
+ }
}
}
{
- final MathTableHandler tableHandler = handler.startMathTable();
- final int tableOffset = tableDirMap.get("MATH");
- if (tableHandler != null
- && tableOffset > -1) {
- final MathTableParser tableParser = new MathTableParser();
- tableParser.parse(input, offset, tableHandler);
+ final int tableOffset = getTableOffset("MATH");
+ if (tableOffset > -1) {
+ final MathTableHandler tableHandler = handler.startMathTable();
+ if (tableHandler != null) {
+ final MathTableParser tableParser = new MathTableParser();
+ tableParser.parse(input, offset + tableOffset, tableHandler);
+ }
}
}
@@ -411,23 +440,25 @@
{
- final PcltTableHandler tableHandler = handler.startPcltTable();
- final int tableOffset = tableDirMap.get("PCLT");
- if (tableHandler != null
- && tableOffset > -1) {
- final PcltTableParser tableParser = new PcltTableParser();
- tableParser.parse(input, offset, tableHandler);
+ final int tableOffset = getTableOffset("PCLT");
+ if (tableOffset > -1) {
+ final PcltTableHandler tableHandler = handler.startPcltTable();
+ if (tableHandler != null) {
+ final PcltTableParser tableParser = new PcltTableParser();
+ tableParser.parse(input, offset + tableOffset, tableHandler);
+ }
}
}
{
- final KernTableHandler tableHandler = handler.startKernTable();
- final int tableOffset = tableDirMap.get("kern");
- if (tableHandler != null
- && tableOffset > -1) {
- final KernTableParser tableParser = new KernTableParser();
- tableParser.parse(input, offset, tableHandler);
+ final int tableOffset = getTableOffset("kern");
+ if (tableOffset > -1) {
+ final KernTableHandler tableHandler = handler.startKernTable();
+ if (tableHandler != null) {
+ final KernTableParser tableParser = new KernTableParser();
+ tableParser.parse(input, offset + tableOffset, tableHandler);
+ }
}
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <vic...@us...> - 2025-05-05 23:13:11
|
Revision: 13610
http://sourceforge.net/p/foray/code/13610
Author: victormote
Date: 2025-05-05 23:12:53 +0000 (Mon, 05 May 2025)
Log Message:
-----------
Fix use of wrong method.
Modified Paths:
--------------
trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttf/NameTableParser.java
Modified: trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttf/NameTableParser.java
===================================================================
--- trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttf/NameTableParser.java 2025-05-05 18:19:01 UTC (rev 13609)
+++ trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttf/NameTableParser.java 2025-05-05 23:12:53 UTC (rev 13610)
@@ -157,8 +157,8 @@
final long bookmark = input.getOffset();
final long stringAbsoluteOffset = offset + storageOffset + langTagRecordOffset;
input.seek(stringAbsoluteOffset);
- final String name = input.readString(langTagRecordLength, StandardCharsets.UTF_16BE);
- handler.name(name);
+ final String langTag = input.readString(langTagRecordLength, StandardCharsets.UTF_16BE);
+ handler.langTag(langTag);
input.seek(bookmark);
}
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <vic...@us...> - 2025-05-05 18:19:18
|
Revision: 13609
http://sourceforge.net/p/foray/code/13609
Author: victormote
Date: 2025-05-05 18:19:01 +0000 (Mon, 05 May 2025)
Log Message:
-----------
Add parser and handler for the font itself.
Added Paths:
-----------
trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttf/TrueTypeFontParser.java
trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/TrueTypeFontHandler.java
Added: trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttf/TrueTypeFontParser.java
===================================================================
--- trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttf/TrueTypeFontParser.java (rev 0)
+++ trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttf/TrueTypeFontParser.java 2025-05-05 18:19:01 UTC (rev 13609)
@@ -0,0 +1,436 @@
+/*
+ * Copyright 2025 The FOray Project.
+ * http://www.foray.org
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * This work is in part derived from the following work(s), used with the
+ * permission of the licensor:
+ * Apache FOP, licensed by the Apache Software Foundation
+ *
+ */
+
+/*
+ * $LastChangedRevision$
+ * $LastChangedDate$
+ * $LastChangedBy$
+ */
+
+package org.foray.fontParse.ttf;
+
+import org.foray.fontParse.TableParser;
+import org.foray.fontParse.ttfHandler.BaseTableHandler;
+import org.foray.fontParse.ttfHandler.Cff2TableHandler;
+import org.foray.fontParse.ttfHandler.CffTableHandler;
+import org.foray.fontParse.ttfHandler.CmapTableHandler;
+import org.foray.fontParse.ttfHandler.CvtTableHandler;
+import org.foray.fontParse.ttfHandler.FpgmTableHandler;
+import org.foray.fontParse.ttfHandler.GaspTableHandler;
+import org.foray.fontParse.ttfHandler.GdefTableHandler;
+import org.foray.fontParse.ttfHandler.GlyfTableHandler;
+import org.foray.fontParse.ttfHandler.GposTableHandler;
+import org.foray.fontParse.ttfHandler.GsubTableHandler;
+import org.foray.fontParse.ttfHandler.HeadTableHandler;
+import org.foray.fontParse.ttfHandler.HheaTableHandler;
+import org.foray.fontParse.ttfHandler.HmtxTableHandler;
+import org.foray.fontParse.ttfHandler.JstfTableHandler;
+import org.foray.fontParse.ttfHandler.KernTableHandler;
+import org.foray.fontParse.ttfHandler.LocaTableHandler;
+import org.foray.fontParse.ttfHandler.MathTableHandler;
+import org.foray.fontParse.ttfHandler.MaxpTableHandler;
+import org.foray.fontParse.ttfHandler.NameTableHandler;
+import org.foray.fontParse.ttfHandler.Os2TableHandler;
+import org.foray.fontParse.ttfHandler.PcltTableHandler;
+import org.foray.fontParse.ttfHandler.PostTableHandler;
+import org.foray.fontParse.ttfHandler.PrepTableHandler;
+import org.foray.fontParse.ttfHandler.TableDirectoryHandler;
+import org.foray.fontParse.ttfHandler.TrueTypeFontHandler;
+import org.foray.fontParse.ttfHandler.VorgTableHandler;
+
+import org.checkerframework.checker.signedness.qual.Unsigned;
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Parses a True.
+ */
+public class TrueTypeFontParser extends TableParser<TrueTypeFontHandler> {
+
+ /**
+ * The handler of events from the parser.
+ */
+ private final class ContentHandler implements TableDirectoryHandler {
+
+ @Override
+ public void tableTags(final String[] value) {
+ tableTags = value;
+ }
+
+ @Override
+ public void offsets(final @Unsigned int[] value) {
+ offsets = value;
+ }
+ }
+
+ /** The table tags parsed from the TableDirectory. */
+ private String[] tableTags;
+
+ /** The table offsets parsed from the TableDirectory. */
+ private @Unsigned int[] offsets;
+
+
+
+
+
+ @Override
+ public void parse(final TtfRandomAccessInput input, final int offset, final TrueTypeFontHandler handler)
+ throws IOException {
+ input.seek(offset);
+
+ /* First parse the Table Directory to get the tags and offsets for the tables. */
+ final TableDirectoryHandler tableDirectoryHandler = new ContentHandler();
+ final TableDirectoryParser tableDirectoryParser = new TableDirectoryParser();
+ tableDirectoryParser.parse(input, offset, tableDirectoryHandler);
+
+ /* Put them in a Map for easier lookup. */
+ final Map<String, Integer> tableDirMap = new HashMap<String, Integer>(tableTags.length);
+ for (int index = 0; index < tableTags.length; index ++) {
+ tableDirMap.put(tableTags[index], offsets[index]);
+ }
+
+
+
+
+ /* The order is somewhat important here. */
+
+ /* BEGIN REQUIRED TABLES ************************************************************************************ */
+
+
+ /* Read the Font Header first. */
+ {
+ final HeadTableHandler tableHandler = handler.startHeadTable();
+ final int tableOffset = tableDirMap.get("head");
+ if (tableHandler != null
+ && tableOffset > -1) {
+ final HeadTableParser tableParser = new HeadTableParser();
+ tableParser.parse(input, offset, tableHandler);
+ }
+ }
+
+
+ /* Then the Maximum Profile, so general sizes are known. */
+ {
+ final MaxpTableHandler tableHandler = handler.startMaxpTable();
+ final int tableOffset = tableDirMap.get("maxp");
+ if (tableHandler != null
+ && tableOffset > -1) {
+ final MaxpTableParser tableParser = new MaxpTableParser();
+ tableParser.parse(input, offset, tableHandler);
+ }
+ }
+
+
+ /* The NAME table needs to be read before the CMAP. */
+ {
+ final NameTableHandler tableHandler = handler.startNameTable();
+ final int tableOffset = tableDirMap.get("name");
+ if (tableHandler != null
+ && tableOffset > -1) {
+ final NameTableParser tableParser = new NameTableParser();
+ tableParser.parse(input, offset, tableHandler);
+ }
+ }
+
+
+ /* Then the CMAP, so that glyph indexes can be computed. */
+ {
+ final CmapTableHandler tableHandler = handler.startCmapTable();
+ final int tableOffset = tableDirMap.get("cmap");
+ if (tableHandler != null
+ && tableOffset > -1) {
+ final CmapTableParser tableParser = new CmapTableParser();
+ tableParser.parse(input, offset, tableHandler);
+ }
+ }
+
+
+ /* Read the Horizontal Header before the Horizontal Metrics. */
+ {
+ final HheaTableHandler tableHandler = handler.startHheaTable();
+ final int tableOffset = tableDirMap.get("hhea");
+ if (tableHandler != null
+ && tableOffset > -1) {
+ final HheaTableParser tableParser = new HheaTableParser();
+ tableParser.parse(input, offset, tableHandler);
+ }
+ }
+
+
+
+
+ /* Except where noted, the order doesn't matter as much starting here. */
+
+
+
+
+ {
+ final HmtxTableHandler tableHandler = handler.startHmtxTable();
+ final int tableOffset = tableDirMap.get("hmtx");
+ if (tableHandler != null
+ && tableOffset > -1) {
+ final HmtxTableParser tableParser = new HmtxTableParser();
+ tableParser.parse(input, offset, tableHandler);
+ }
+ }
+
+
+ {
+ final PostTableHandler tableHandler = handler.startPostTable();
+ final int tableOffset = tableDirMap.get("post");
+ if (tableHandler != null
+ && tableOffset > -1) {
+ final PostTableParser tableParser = new PostTableParser();
+ tableParser.parse(input, offset, tableHandler);
+ }
+ }
+
+
+ {
+ final Os2TableHandler tableHandler = handler.startOs2Table();
+ final int tableOffset = tableDirMap.get("OS/2");
+ if (tableHandler != null
+ && tableOffset > -1) {
+ final Os2TableParser tableParser = new Os2TableParser();
+ tableParser.parse(input, offset, tableHandler);
+ }
+ }
+
+
+
+
+ /* BEGIN TRUETYPE-OUTLINE TABLES **************************************************************************** */
+
+
+
+
+ {
+ final CvtTableHandler tableHandler = handler.startCvtTable();
+ final int tableOffset = tableDirMap.get("cvt");
+ if (tableHandler != null
+ && tableOffset > -1) {
+ final CvtTableParser tableParser = new CvtTableParser();
+ tableParser.parse(input, offset, tableHandler);
+ }
+ }
+
+
+ {
+ final FpgmTableHandler tableHandler = handler.startFpgmTable();
+ final int tableOffset = tableDirMap.get("fpgm");
+ if (tableHandler != null
+ && tableOffset > -1) {
+ final FpgmTableParser tableParser = new FpgmTableParser();
+ tableParser.parse(input, offset, tableHandler);
+ }
+ }
+
+
+ {
+ final LocaTableHandler tableHandler = handler.startLocaTable();
+ final int tableOffset = tableDirMap.get("loca");
+ if (tableHandler != null
+ && tableOffset > -1) {
+ final LocaTableParser tableParser = new LocaTableParser();
+ tableParser.parse(input, offset, tableHandler);
+ }
+ }
+
+
+ /* glyf must be parsed after hmtx and loca. */
+ {
+ final GlyfTableHandler tableHandler = handler.startGlyfTable();
+ final int tableOffset = tableDirMap.get("glyf");
+ if (tableHandler != null
+ && tableOffset > -1) {
+ final GlyfTableParser tableParser = new GlyfTableParser();
+ tableParser.parse(input, offset, tableHandler);
+ }
+ }
+
+
+ {
+ final PrepTableHandler tableHandler = handler.startPrepTable();
+ final int tableOffset = tableDirMap.get("prep");
+ if (tableHandler != null
+ && tableOffset > -1) {
+ final PrepTableParser tableParser = new PrepTableParser();
+ tableParser.parse(input, offset, tableHandler);
+ }
+ }
+
+
+ {
+ final GaspTableHandler tableHandler = handler.startGaspTable();
+ final int tableOffset = tableDirMap.get("gasp");
+ if (tableHandler != null
+ && tableOffset > -1) {
+ final GaspTableParser tableParser = new GaspTableParser();
+ tableParser.parse(input, offset, tableHandler);
+ }
+ }
+
+
+ {
+ final CffTableHandler tableHandler = handler.startCffTable();
+ final int tableOffset = tableDirMap.get("CFF");
+ if (tableHandler != null
+ && tableOffset > -1) {
+ final CffTableParser tableParser = new CffTableParser();
+ tableParser.parse(input, offset, tableHandler);
+ }
+ }
+
+
+
+
+
+ /* BEGIN POSTSCRIPT-OUTLINE TABLES ************************************************************************** */
+
+
+
+ {
+ final Cff2TableHandler tableHandler = handler.startCff2Table();
+ final int tableOffset = tableDirMap.get("CFF2");
+ if (tableHandler != null
+ && tableOffset > -1) {
+ final Cff2TableParser tableParser = new Cff2TableParser();
+ tableParser.parse(input, offset, tableHandler);
+ }
+ }
+
+
+ {
+ final VorgTableHandler tableHandler = handler.startVorgTable();
+ final int tableOffset = tableDirMap.get("VORG");
+ if (tableHandler != null
+ && tableOffset > -1) {
+ final VorgTableParser tableParser = new VorgTableParser();
+ tableParser.parse(input, offset, tableHandler);
+ }
+ }
+
+
+
+ /* BEGIN OPENTYPE ADVANCED TYPOGRAPHIC TABLES *************************************************************** */
+
+
+
+
+ {
+ final BaseTableHandler tableHandler = handler.startBaseTable();
+ final int tableOffset = tableDirMap.get("BASE");
+ if (tableHandler != null
+ && tableOffset > -1) {
+ final BaseTableParser tableParser = new BaseTableParser();
+ tableParser.parse(input, offset, tableHandler);
+ }
+ }
+
+
+ {
+ final GdefTableHandler tableHandler = handler.startGdefTable();
+ final int tableOffset = tableDirMap.get("GDEF");
+ if (tableHandler != null
+ && tableOffset > -1) {
+ final GdefTableParser tableParser = new GdefTableParser();
+ tableParser.parse(input, offset, tableHandler);
+ }
+ }
+
+
+ {
+ final GposTableHandler tableHandler = handler.startGposTable();
+ final int tableOffset = tableDirMap.get("GPOS");
+ if (tableHandler != null
+ && tableOffset > -1) {
+ final GposTableParser tableParser = new GposTableParser();
+ tableParser.parse(input, offset, tableHandler);
+ }
+ }
+
+
+ {
+ final GsubTableHandler tableHandler = handler.startGsubTable();
+ final int tableOffset = tableDirMap.get("GSUB");
+ if (tableHandler != null
+ && tableOffset > -1) {
+ final GsubTableParser tableParser = new GsubTableParser();
+ tableParser.parse(input, offset, tableHandler);
+ }
+ }
+
+
+ {
+ final JstfTableHandler tableHandler = handler.startJstfTable();
+ final int tableOffset = tableDirMap.get("JSTF");
+ if (tableHandler != null
+ && tableOffset > -1) {
+ final JstfTableParser tableParser = new JstfTableParser();
+ tableParser.parse(input, offset, tableHandler);
+ }
+ }
+
+
+ {
+ final MathTableHandler tableHandler = handler.startMathTable();
+ final int tableOffset = tableDirMap.get("MATH");
+ if (tableHandler != null
+ && tableOffset > -1) {
+ final MathTableParser tableParser = new MathTableParser();
+ tableParser.parse(input, offset, tableHandler);
+ }
+ }
+
+
+
+ /* BEGIN OPTIONAL TABLES ************************************************************************************ */
+
+
+
+
+ {
+ final PcltTableHandler tableHandler = handler.startPcltTable();
+ final int tableOffset = tableDirMap.get("PCLT");
+ if (tableHandler != null
+ && tableOffset > -1) {
+ final PcltTableParser tableParser = new PcltTableParser();
+ tableParser.parse(input, offset, tableHandler);
+ }
+ }
+
+
+ {
+ final KernTableHandler tableHandler = handler.startKernTable();
+ final int tableOffset = tableDirMap.get("kern");
+ if (tableHandler != null
+ && tableOffset > -1) {
+ final KernTableParser tableParser = new KernTableParser();
+ tableParser.parse(input, offset, tableHandler);
+ }
+ }
+
+ }
+
+}
Property changes on: trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttf/TrueTypeFontParser.java
___________________________________________________________________
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev
\ No newline at end of property
Added: trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/TrueTypeFontHandler.java
===================================================================
--- trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/TrueTypeFontHandler.java (rev 0)
+++ trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/TrueTypeFontHandler.java 2025-05-05 18:19:01 UTC (rev 13609)
@@ -0,0 +1,64 @@
+/*
+ * Copyright 2025 The FOray Project.
+ * http://www.foray.org
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * This work is in part derived from the following work(s), used with the
+ * permission of the licensor:
+ * Apache FOP, licensed by the Apache Software Foundation
+ *
+ */
+
+/*
+ * $LastChangedRevision$
+ * $LastChangedDate$
+ * $LastChangedBy$
+ */
+
+package org.foray.fontParse.ttfHandler;
+
+import org.foray.fontParse.FontContentHandler;
+import org.foray.fontParse.ttf.TrueTypeFontParser;
+
+/**
+ * Implementations catch and handle the output from {@link TrueTypeFontParser}.
+ */
+public interface TrueTypeFontHandler extends FontContentHandler {
+
+ default HeadTableHandler startHeadTable() { return null; }
+ default MaxpTableHandler startMaxpTable() { return null; }
+ default NameTableHandler startNameTable() { return null; }
+ default CmapTableHandler startCmapTable() { return null; }
+ default HheaTableHandler startHheaTable() { return null; }
+ default HmtxTableHandler startHmtxTable() { return null; }
+ default PostTableHandler startPostTable() { return null; }
+ default Os2TableHandler startOs2Table() { return null; }
+ default CvtTableHandler startCvtTable() { return null; }
+ default FpgmTableHandler startFpgmTable() { return null; }
+ default LocaTableHandler startLocaTable() { return null; }
+ default GlyfTableHandler startGlyfTable() { return null; }
+ default PrepTableHandler startPrepTable() { return null; }
+ default GaspTableHandler startGaspTable() { return null; }
+ default CffTableHandler startCffTable() { return null; }
+ default Cff2TableHandler startCff2Table() { return null; }
+ default VorgTableHandler startVorgTable() { return null; }
+ default BaseTableHandler startBaseTable() { return null; }
+ default GdefTableHandler startGdefTable() { return null; }
+ default GposTableHandler startGposTable() { return null; }
+ default GsubTableHandler startGsubTable() { return null; }
+ default JstfTableHandler startJstfTable() { return null; }
+ default MathTableHandler startMathTable() { return null; }
+ default PcltTableHandler startPcltTable() { return null; }
+ default KernTableHandler startKernTable() { return null; }
+}
Property changes on: trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/TrueTypeFontHandler.java
___________________________________________________________________
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev
\ No newline at end of property
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <vic...@us...> - 2025-05-05 17:31:59
|
Revision: 13608
http://sourceforge.net/p/foray/code/13608
Author: victormote
Date: 2025-05-05 17:31:42 +0000 (Mon, 05 May 2025)
Log Message:
-----------
Add methods for the table record fields to be returned as arrays by type.
Modified Paths:
--------------
trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttf/TableDirectoryParser.java
trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/TableDirectoryHandler.java
Modified: trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttf/TableDirectoryParser.java
===================================================================
--- trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttf/TableDirectoryParser.java 2025-05-05 12:41:51 UTC (rev 13607)
+++ trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttf/TableDirectoryParser.java 2025-05-05 17:31:42 UTC (rev 13608)
@@ -40,7 +40,6 @@
*/
public class TableDirectoryParser extends TableParser<TableDirectoryHandler> {
-
@Override
public void parse(final TtfRandomAccessInput input, final int offset, final TableDirectoryHandler handler)
throws IOException {
@@ -53,12 +52,33 @@
handler.entrySelector(input.read_uint16()); // 2 bytes, total 10
handler.rangeShift(input.read_uint16()); // 2 bytes, total 12
+ final String[] tableTags = new String[numTables];
+ final @Unsigned int[] checksums = new @Unsigned int[numTables];
+ final @Unsigned int[] offsets = new @Unsigned int[numTables];
+ final @Unsigned int[] lengths = new @Unsigned int[numTables];
+
for (int index = 0; index < numTables; index ++) { // *** Restart Count ***
- handler.tableTag(input.read_Tag()); // 4 bytes, total 4
- handler.checksum(input.read_uint32()); // 4 bytes, total 8
- handler.offset(input.read_Offset32()); // 4 bytes, total 12
- handler.length(input.read_uint32()); // 4 bytes, total 16
+ final String tableTag = input.read_Tag(); // 4 bytes, total 4
+ handler.tableTag(tableTag);
+ tableTags[index] = tableTag;
+
+ final @Unsigned int checksum = input.read_uint32(); // 4 bytes, total 8
+ handler.checksum(checksum);
+ checksums[index] = checksum;
+
+ final @Unsigned int tableRecordOffset = input.read_uint32(); // 4 bytes, total 12
+ handler.offset(tableRecordOffset);
+ offsets[index] = tableRecordOffset;
+
+ final @Unsigned int length = input.read_uint32(); // 4 bytes, total 16
+ handler.length(length);
+ lengths[index] = length;
}
+
+ handler.tableTags(tableTags);
+ handler.checksums(checksums);
+ handler.offsets(offsets);
+ handler.lengths(lengths);
}
}
Modified: trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/TableDirectoryHandler.java
===================================================================
--- trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/TableDirectoryHandler.java 2025-05-05 12:41:51 UTC (rev 13607)
+++ trunk/foray/foray-font-parse/src/main/java/org/foray/fontParse/ttfHandler/TableDirectoryHandler.java 2025-05-05 17:31:42 UTC (rev 13608)
@@ -38,14 +38,19 @@
*/
public interface TableDirectoryHandler extends FontContentHandler {
- default void sfntVersion(@Unsigned int value) { return; }
- default void numTables(@Unsigned short value) { return; }
- default void searchRange(@Unsigned short value) { return; }
- default void entrySelector(@Unsigned short value) { return; }
- default void rangeShift(@Unsigned short value) { return; }
+ default void sfntVersion(final @Unsigned int value) { return; }
+ default void numTables(final @Unsigned short value) { return; }
+ default void searchRange(final @Unsigned short value) { return; }
+ default void entrySelector(final @Unsigned short value) { return; }
+ default void rangeShift(final @Unsigned short value) { return; }
- default void tableTag(String value) { return; }
- default void checksum(@Unsigned int value) { return; }
- default void offset(@Unsigned int value) { return; }
- default void length(@Unsigned int value) { return; }
+ default void tableTag(final String value) { return; }
+ default void checksum(final @Unsigned int value) { return; }
+ default void offset(final @Unsigned int value) { return; }
+ default void length(final @Unsigned int value) { return; }
+
+ default void tableTags(final String[] value) { return; }
+ default void checksums(final @Unsigned int[] value) { return; }
+ default void offsets(final @Unsigned int[] value) { return; }
+ default void lengths(final @Unsigned int[] value) { return; }
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <vic...@us...> - 2025-05-05 12:42:09
|
Revision: 13607
http://sourceforge.net/p/foray/code/13607
Author: victormote
Date: 2025-05-05 12:41:51 +0000 (Mon, 05 May 2025)
Log Message:
-----------
Fix incorrect return type.
Modified Paths:
--------------
trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeCollection.java
trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TtcHeader.java
Modified: trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeCollection.java
===================================================================
--- trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeCollection.java 2025-05-05 12:18:11 UTC (rev 13606)
+++ trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeCollection.java 2025-05-05 12:41:51 UTC (rev 13607)
@@ -94,7 +94,7 @@
final ParserKit<TableDirectory, TableDirectoryHandler> tableDirectoryParserKit =
TableDirectory.createContentHandler();
final TableDirectoryParser tableDirectoryParser = new TableDirectoryParser();
- tableDirectoryParser.parse(raInput, (int) this.ttcHeader.getDirectoryOffset(i),
+ tableDirectoryParser.parse(raInput, this.ttcHeader.getDirectoryOffset(i),
tableDirectoryParserKit.getHandler());
final TableDirectory tableDir = tableDirectoryParserKit.getTable();
this.tableDirectories[i] = tableDir;
Modified: trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TtcHeader.java
===================================================================
--- trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TtcHeader.java 2025-05-05 12:18:11 UTC (rev 13606)
+++ trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TtcHeader.java 2025-05-05 12:41:51 UTC (rev 13607)
@@ -43,7 +43,6 @@
private final class ContentHandler implements TtcHeaderHandler {
/** The table instance being created. */
- @SuppressWarnings("unused")
private TtcHeader table;
/**
@@ -95,11 +94,11 @@
* @param directoryIndex The directory index.
* @return The offset to the directory.
*/
- public long getDirectoryOffset(final int directoryIndex) {
+ public int getDirectoryOffset(final int directoryIndex) {
if (this.dirOffsets == null
|| directoryIndex < 0
|| directoryIndex >= this.dirOffsets.length) {
- return Long.MIN_VALUE;
+ return Integer.MIN_VALUE;
}
return this.dirOffsets[directoryIndex];
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <vic...@us...> - 2025-05-05 12:18:28
|
Revision: 13606
http://sourceforge.net/p/foray/code/13606
Author: victormote
Date: 2025-05-05 12:18:11 +0000 (Mon, 05 May 2025)
Log Message:
-----------
Convert TableDirectory to new parsing scheme.
Modified Paths:
--------------
trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TableDirectory.java
trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TableRecord.java
trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeCollection.java
trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeFont.java
trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeSingle.java
trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TtfSubSetFile.java
Modified: trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TableDirectory.java
===================================================================
--- trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TableDirectory.java 2025-05-05 10:35:06 UTC (rev 13605)
+++ trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TableDirectory.java 2025-05-05 12:18:11 UTC (rev 13606)
@@ -28,11 +28,9 @@
package org.foray.font.ttf;
-import org.foray.common.RandomAccessInput;
+import org.foray.fontParse.ttfHandler.TableDirectoryHandler;
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.Map;
+import org.checkerframework.checker.signedness.qual.Unsigned;
/**
* A TrueType or OpenType Offset Table, the very first item in the content of a font.
@@ -43,8 +41,64 @@
* If the file is a TrueType collection of some sort, the offset to the Offset Table for each font is indicated in the
* TTCHeader.
*/
-public final class TableDirectory {
+public final class TableDirectory extends RoTable {
+ /**
+ * The handler of events from the parser.
+ */
+ private final class ContentHandler implements TableDirectoryHandler {
+
+ /** The table instance being created. */
+ private TableDirectory table;
+
+ /** The current index. */
+ private int currentIndex = -1;
+
+ /** The current tag. */
+ private String currentTag;
+
+ /** The current offset. */
+ private int currentOffset;
+
+ /**
+ * Constructor.
+ * @param table The table instance being created.
+ */
+ private ContentHandler(final TableDirectory table) {
+ this.table = table;
+ }
+
+ @Override
+ public void numTables(final @Unsigned short value) {
+ this.table.tableRecord = new TableRecord[value];
+ }
+
+ @Override
+ public void tableTag(final String value) {
+ this.currentIndex ++;
+ this.currentTag = value;
+ }
+
+ @Override
+ public void offset(final @Unsigned int value) {
+ this.currentOffset = value;
+ }
+
+ @Override
+ public void length(final @Unsigned int value) {
+ this.table.tableRecord[this.currentIndex] = new TableRecord(this.currentTag, this.currentOffset, value);
+ }
+ }
+
+
+
+
+
+
+
+
+
+
/** Constant indicating the sfnt version for the table directory. */
public static final int TTF_FILE_SFNT_VERSION_1 = 0x10000;
@@ -55,48 +109,90 @@
/** Constant indicating the size of the table directory itself, in bytes. */
public static final byte OFFSET_TABLE_SIZE = 12;
- /** Map of the table directory entries. The key is the table name and the
- * value is the TTFTableDirEntry for the table of that name. */
- private Map<String, TableRecord> entries = new HashMap<String, TableRecord>();
+ /** The table records. */
+ private TableRecord[] tableRecord;
/**
- * Parse a Table Directory from the appropriate offset.
- * Create the HashMap entries using the table name as the key and the appropriate TTFDirTabEntry as the value.
- * @param raInput The input being parsed.
- * @param fileOffset The offset to the specific font in {@code container} that should be parsed (remember that a
- * TTF font file can contain more than one TTF font.
- * @return The parsed instance.
- * @throws IOException For I/O error.
+ * Creates a table instance and a content handler for that instance.
+ * @return A new content handler.
*/
- public static TableDirectory parse(final RandomAccessInput raInput, final long fileOffset) throws IOException {
- final TableDirectory directory = new TableDirectory();
- raInput.seek(fileOffset);
- /* Skip sfnt version (format version). */
- raInput.skipBytes(RoTable.FIXED_BYTES);
- /* Read the number of tables. */
- final int numberOfTables = raInput.readUnsignedShort();
- /* Skip the searchRange. */
- raInput.skipBytes(RoTable.USHORT_BYTES);
- /* Skip the entrySelector. */
- raInput.skipBytes(RoTable.USHORT_BYTES);
- /* Skip the rangeShift. */
- raInput.skipBytes(RoTable.USHORT_BYTES);
+ public static ParserKit<TableDirectory, TableDirectoryHandler> createContentHandler() {
+ final TableDirectory table = new TableDirectory();
+ final TableDirectoryHandler handler = table.new ContentHandler(table);
+ return new ParserKit<TableDirectory, TableDirectoryHandler>(table, handler);
+ }
- for (int i = 0; i < numberOfTables; i++) {
- final TableRecord entry = TableRecord.parse(raInput);
- directory.entries.put(entry.getTag(), entry);
+
+// /**
+// * Parse a Table Directory from the appropriate offset.
+// * Create the HashMap entries using the table name as the key and the appropriate TTFDirTabEntry as the value.
+// * @param raInput The input being parsed.
+// * @param fileOffset The offset to the specific font in {@code container} that should be parsed (remember that a
+// * TTF font file can contain more than one TTF font.
+// * @return The parsed instance.
+// * @throws IOException For I/O error.
+// */
+// public static TableDirectory parse(final RandomAccessInput raInput, final long fileOffset) throws IOException {
+// final TableDirectory directory = new TableDirectory();
+// raInput.seek(fileOffset);
+// /* Skip sfnt version (format version). */
+// raInput.skipBytes(RoTable.FIXED_BYTES);
+// /* Read the number of tables. */
+// final int numberOfTables = raInput.readUnsignedShort();
+// /* Skip the searchRange. */
+// raInput.skipBytes(RoTable.USHORT_BYTES);
+// /* Skip the entrySelector. */
+// raInput.skipBytes(RoTable.USHORT_BYTES);
+// /* Skip the rangeShift. */
+// raInput.skipBytes(RoTable.USHORT_BYTES);
+//
+// for (int i = 0; i < numberOfTables; i++) {
+// final TableRecord entry = TableRecord.parse(raInput);
+// directory.entries.put(entry.getTag(), entry);
+// }
+// return directory;
+// }
+
+ /**
+ * Return the index to the table directory entry for a given table name.
+ * @param tableName The name of the table whose table directory entry is sought.
+ * @return The index to the table directory entry for {@code tableName}.
+ */
+ protected int getTableDirectoryIndex(final String tableName) {
+ for (int index = 0; index < this.tableRecord.length; index ++) {
+ if (this.tableRecord[index].getTag().equals(tableName)) {
+ return index;
+ }
}
- return directory;
+ return -1;
}
/**
+ * Return the offset for a given table name.
+ * @param tableName The name of the table whose offset is sought.
+ * @return The for {@code tableName}, or -1 if not found.
+ */
+ protected @Unsigned int getTableOffset(final String tableName) {
+ final int index = getTableDirectoryIndex(tableName);
+ if (index < 0) {
+ return -1;
+ } else {
+ return this.tableRecord[index].getOffset();
+ }
+ }
+
+ /**
* Return the table directory entry for a given table name.
- * @param tableName The name of the table whose table directory entry is
- * sought.
+ * @param tableName The name of the table whose table directory entry is sought.
* @return The table directory entry for {@code tableName}.
*/
protected TableRecord getTableDirectoryEntry(final String tableName) {
- return this.entries.get(tableName);
+ final int index = getTableDirectoryIndex(tableName);
+ if (index < 0) {
+ return null;
+ } else {
+ return this.tableRecord[index];
+ }
}
}
Modified: trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TableRecord.java
===================================================================
--- trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TableRecord.java 2025-05-05 10:35:06 UTC (rev 13605)
+++ trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TableRecord.java 2025-05-05 12:18:11 UTC (rev 13606)
@@ -28,11 +28,6 @@
package org.foray.font.ttf;
-import org.foray.common.RandomAccessInput;
-
-import java.io.IOException;
-import java.nio.charset.StandardCharsets;
-
/**
* A TrueType or OpenType Offset Table Record.
* This stores the offset and length of one table in the font.
@@ -56,24 +51,36 @@
/**
* Constructor.
- * @param raInput The input being parsed.
- * @return The parsed entry.
- * @throws IOException For i/o errors when parsing the entry.
+ * @param tag The tag.
+ * @param offset The offset.
+ * @param length The length.
*/
- public static TableRecord parse(final RandomAccessInput raInput)
- throws IOException {
- final TableRecord entry = new TableRecord();
- /* Read the 4-byte table identifier. */
- entry.tag = raInput.readString(RoTable.ULONG_BYTES, StandardCharsets.ISO_8859_1);
- /* Skip the checkSum. */
- raInput.skipBytes(RoTable.ULONG_BYTES);
- /* Read the offset to the table. */
- entry.offset = (int) raInput.readUnsignedInt();
- /* Read the length of the table. */
- entry.length = (int) raInput.readUnsignedInt();
- return entry;
+ public TableRecord(final String tag, final int offset, final int length) {
+ this.tag = tag;
+ this.offset = offset;
+ this.length = length;
}
+// /**
+// * Constructor.
+// * @param raInput The input being parsed.
+// * @return The parsed entry.
+// * @throws IOException For i/o errors when parsing the entry.
+// */
+// public static TableRecord parse(final RandomAccessInput raInput)
+// throws IOException {
+// final TableRecord entry = new TableRecord();
+// /* Read the 4-byte table identifier. */
+// entry.tag = raInput.readString(RoTable.ULONG_BYTES, StandardCharsets.ISO_8859_1);
+// /* Skip the checkSum. */
+// raInput.skipBytes(RoTable.ULONG_BYTES);
+// /* Read the offset to the table. */
+// entry.offset = (int) raInput.readUnsignedInt();
+// /* Read the length of the table. */
+// entry.length = (int) raInput.readUnsignedInt();
+// return entry;
+// }
+
/**
* Return this table's tag name.
* @return this table's tag name.
Modified: trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeCollection.java
===================================================================
--- trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeCollection.java 2025-05-05 10:35:06 UTC (rev 13605)
+++ trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeCollection.java 2025-05-05 12:18:11 UTC (rev 13606)
@@ -32,11 +32,14 @@
import org.foray.font.format.FontParser;
import org.foray.font.ttf.table.NameTable;
import org.foray.fontParse.ttf.NameTableParser;
+import org.foray.fontParse.ttf.TableDirectoryParser;
import org.foray.fontParse.ttf.TtcHeaderParser;
import org.foray.fontParse.ttf.TtfRandomAccessInput;
import org.foray.fontParse.ttfHandler.NameTableHandler;
+import org.foray.fontParse.ttfHandler.TableDirectoryHandler;
import org.foray.fontParse.ttfHandler.TtcHeaderHandler;
+import org.checkerframework.checker.signedness.qual.Unsigned;
import org.slf4j.LoggerFactory;
import java.io.IOException;
@@ -88,8 +91,12 @@
this.tableDirectories = new TableDirectory[this.ttcHeader.getNumDirectories()];
for (int i = 0; i < this.ttcHeader.getNumDirectories(); i++) {
- final TableDirectory tableDir =
- TableDirectory.parse(raInput, this.ttcHeader.getDirectoryOffset(i));
+ final ParserKit<TableDirectory, TableDirectoryHandler> tableDirectoryParserKit =
+ TableDirectory.createContentHandler();
+ final TableDirectoryParser tableDirectoryParser = new TableDirectoryParser();
+ tableDirectoryParser.parse(raInput, (int) this.ttcHeader.getDirectoryOffset(i),
+ tableDirectoryParserKit.getHandler());
+ final TableDirectory tableDir = tableDirectoryParserKit.getTable();
this.tableDirectories[i] = tableDir;
}
@@ -116,13 +123,12 @@
for (int i = 0; i < numFonts(); i++) {
final TableDirectory tableDir = this.tableDirectories[i];
// Get the "name" table
- final TableRecord tableDirEntry
- = tableDir.getTableDirectoryEntry("name");
+ final @Unsigned int offset = tableDir.getTableOffset("name");
final ParserKit<NameTable, NameTableHandler> parseKit = NameTable.createContentHandler();
final NameTableParser parser = new NameTableParser();
- parser.parse(this.raInput, tableDirEntry.getOffset(), parseKit.getHandler());
+ parser.parse(this.raInput, offset, parseKit.getHandler());
+ final NameTable nameTable = parseKit.getTable();
- final NameTable nameTable = parseKit.getTable();
fontNames[i] = nameTable.getFullName();
}
return fontNames;
@@ -136,15 +142,12 @@
for (int i = 0; i < numFonts(); i++) {
final TableDirectory tableDir = this.tableDirectories[i];
// Get the "name" table
- final TableRecord tableDirEntry
- = tableDir.getTableDirectoryEntry("name");
- this.getReader().getRandomInput().seek(tableDirEntry.getOffset());
-
+ final @Unsigned int offset = tableDir.getTableOffset("name");
final ParserKit<NameTable, NameTableHandler> parseKit = NameTable.createContentHandler();
final NameTableParser parser = new NameTableParser();
- parser.parse(this.raInput, tableDirEntry.getOffset(), parseKit.getHandler());
+ parser.parse(this.raInput, offset, parseKit.getHandler());
+ final NameTable nameTable = parseKit.getTable();
- final NameTable nameTable = parseKit.getTable();
if (nameTable.getFullName().equals(fontName)) {
if (this.fonts[i] == null) {
this.fonts[i] = TrueTypeFont.parse(this, tableDir);
Modified: trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeFont.java
===================================================================
--- trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeFont.java 2025-05-05 10:35:06 UTC (rev 13605)
+++ trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeFont.java 2025-05-05 12:18:11 UTC (rev 13606)
@@ -934,13 +934,21 @@
return this.cmapTable.getEncoding(0);
}
+// /**
+// * Returns the table directory entry for a named table in this font.
+// * @param name The name of the table sought.
+// * @return The table directory entry for {@code name}.
+// */
+// protected TableRecord getTTFDirTabEntry(final String name) {
+// return this.tableDirectory.getTableDirectoryEntry(name);
+// }
+
/**
- * Returns the table directory entry for a named table in this font.
- * @param name The name of the table sought.
- * @return The table directory entry for {@code name}.
+ * Returns the table directory for this font.
+ * @return The table direcory.
*/
- protected TableRecord getTTFDirTabEntry(final String name) {
- return this.tableDirectory.getTableDirectoryEntry(name);
+ public TableDirectory getTableDirectory() {
+ return this.tableDirectory;
}
/**
Modified: trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeSingle.java
===================================================================
--- trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeSingle.java 2025-05-05 10:35:06 UTC (rev 13605)
+++ trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeSingle.java 2025-05-05 12:18:11 UTC (rev 13606)
@@ -29,6 +29,8 @@
package org.foray.font.ttf;
import org.foray.font.format.FontParser;
+import org.foray.fontParse.ttf.TableDirectoryParser;
+import org.foray.fontParse.ttfHandler.TableDirectoryHandler;
import org.slf4j.LoggerFactory;
@@ -53,7 +55,10 @@
public TrueTypeSingle(final FontParser reader) {
super(reader);
try {
- this.tableDirectory = TableDirectory.parse(reader.getRandomInput(), 0);
+ final ParserKit<TableDirectory, TableDirectoryHandler> parserKit = TableDirectory.createContentHandler();
+ final TableDirectoryParser parser = new TableDirectoryParser();
+ parser.parse(reader.getRandomInput(), 0, parserKit.getHandler());
+ this.tableDirectory = parserKit.getTable();
} catch (final IOException e) {
LoggerFactory.getLogger(getClass()).error(e.getMessage());
}
Modified: trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TtfSubSetFile.java
===================================================================
--- trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TtfSubSetFile.java 2025-05-05 10:35:06 UTC (rev 13605)
+++ trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TtfSubSetFile.java 2025-05-05 12:18:11 UTC (rev 13606)
@@ -910,8 +910,7 @@
*/
private TableRecord getEntry(final String tableName,
final boolean requiredTable) {
- final TableRecord entry = this.ttfFont.getTTFDirTabEntry(
- tableName);
+ final TableRecord entry = this.ttfFont.getTableDirectory().getTableDirectoryEntry(tableName);
if (entry == null && requiredTable) {
LoggerFactory.getLogger(getClass()).error(TtfSubSetFile.TTF_MESSAGE + "Can't find " + tableName + " table");
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <vic...@us...> - 2025-05-05 10:35:23
|
Revision: 13605
http://sourceforge.net/p/foray/code/13605
Author: victormote
Date: 2025-05-05 10:35:06 +0000 (Mon, 05 May 2025)
Log Message:
-----------
Unentangle TableDirectory from the TrueTypeContainer font instance.
Modified Paths:
--------------
trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TableDirectory.java
trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeCollection.java
trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeFont.java
trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeSingle.java
trunk/foray/foray-font/src/test/java/org/foray/font/ttf/TrueTypeFontTests.java
Modified: trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TableDirectory.java
===================================================================
--- trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TableDirectory.java 2025-05-05 10:03:32 UTC (rev 13604)
+++ trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TableDirectory.java 2025-05-05 10:35:06 UTC (rev 13605)
@@ -55,25 +55,13 @@
/** Constant indicating the size of the table directory itself, in bytes. */
public static final byte OFFSET_TABLE_SIZE = 12;
- /** The parent container. */
- private TrueTypeContainer container = null;
-
/** Map of the table directory entries. The key is the table name and the
* value is the TTFTableDirEntry for the table of that name. */
private Map<String, TableRecord> entries = new HashMap<String, TableRecord>();
/**
- * Constructor suitable for parsing an existing Table Directory.
- * @param container The font parent container.
- */
- private TableDirectory(final TrueTypeContainer container) {
- this.container = container;
- }
-
- /**
* Parse a Table Directory from the appropriate offset.
* Create the HashMap entries using the table name as the key and the appropriate TTFDirTabEntry as the value.
- * @param container The font parent container.
* @param raInput The input being parsed.
* @param fileOffset The offset to the specific font in {@code container} that should be parsed (remember that a
* TTF font file can contain more than one TTF font.
@@ -80,9 +68,8 @@
* @return The parsed instance.
* @throws IOException For I/O error.
*/
- public static TableDirectory parse(final TrueTypeContainer container, final RandomAccessInput raInput,
- final long fileOffset) throws IOException {
- final TableDirectory directory = new TableDirectory(container);
+ public static TableDirectory parse(final RandomAccessInput raInput, final long fileOffset) throws IOException {
+ final TableDirectory directory = new TableDirectory();
raInput.seek(fileOffset);
/* Skip sfnt version (format version). */
raInput.skipBytes(RoTable.FIXED_BYTES);
@@ -112,12 +99,4 @@
return this.entries.get(tableName);
}
- /**
- * Returns the parent TTFFile.
- * @return The parent TTFFile.
- */
- public TrueTypeContainer getTTFFile() {
- return this.container;
- }
-
}
Modified: trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeCollection.java
===================================================================
--- trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeCollection.java 2025-05-05 10:03:32 UTC (rev 13604)
+++ trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeCollection.java 2025-05-05 10:35:06 UTC (rev 13605)
@@ -89,7 +89,7 @@
this.tableDirectories = new TableDirectory[this.ttcHeader.getNumDirectories()];
for (int i = 0; i < this.ttcHeader.getNumDirectories(); i++) {
final TableDirectory tableDir =
- TableDirectory.parse(this, raInput, this.ttcHeader.getDirectoryOffset(i));
+ TableDirectory.parse(raInput, this.ttcHeader.getDirectoryOffset(i));
this.tableDirectories[i] = tableDir;
}
@@ -147,7 +147,7 @@
final NameTable nameTable = parseKit.getTable();
if (nameTable.getFullName().equals(fontName)) {
if (this.fonts[i] == null) {
- this.fonts[i] = TrueTypeFont.parse(tableDir, this.getReader().getRandomInput());
+ this.fonts[i] = TrueTypeFont.parse(this, tableDir);
}
return this.fonts[i];
}
@@ -163,7 +163,7 @@
if (this.fonts[i] == null) {
final TableDirectory tableDir = this.tableDirectories[i];
try {
- this.fonts[i] = TrueTypeFont.parse(tableDir, this.getReader().getRandomInput());
+ this.fonts[i] = TrueTypeFont.parse(this, tableDir);
} catch (final IOException e) {
throw new RuntimeException(e);
}
Modified: trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeFont.java
===================================================================
--- trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeFont.java 2025-05-05 10:03:32 UTC (rev 13604)
+++ trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeFont.java 2025-05-05 10:35:06 UTC (rev 13605)
@@ -208,25 +208,31 @@
/** The (optional) "PCLT" table instance. */
private PcltTable pcltTable = null;
+ /** The font file containing this font. */
+ private TrueTypeContainer container;
+
/**
* Constructor.
* Note: To get an instance of TTFFont, use {@link TrueTypeFont#makeTTFFont(TableDirectory)}.
+ * @param container The font file containing this font.
* @param tableDirectory The table directory from which this font should be created.
*/
- TrueTypeFont(final TableDirectory tableDirectory) {
+ TrueTypeFont(final TrueTypeContainer container, final TableDirectory tableDirectory) {
+ this.container = container;
this.tableDirectory = tableDirectory;
}
/**
* Factory method that parses a font from random-access input.
+ * @param container The font file containing this font.
* @param ttfTableDir The table directory from which this font should be created.
- * @param raInput The input that should be parsed.
* @return The newly-created {@link TrueTypeFont} instance.
* @throws IOException For I/O errors parsing the input.
*/
- public static TrueTypeFont parse(final TableDirectory ttfTableDir, final TtfRandomAccessInput raInput)
+ public static TrueTypeFont parse(final TrueTypeContainer container, final TableDirectory ttfTableDir)
throws IOException {
- final TrueTypeFont font = new TrueTypeFont(ttfTableDir);
+ final TtfRandomAccessInput raInput = container.getReader().getRandomInput();
+ final TrueTypeFont font = new TrueTypeFont(container, ttfTableDir);
/* The order is somewhat important here. */
@@ -950,7 +956,7 @@
* @return The related TTFFile.
*/
public TrueTypeContainer getTTFFile() {
- return this.tableDirectory.getTTFFile();
+ return this.container;
}
/**
Modified: trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeSingle.java
===================================================================
--- trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeSingle.java 2025-05-05 10:03:32 UTC (rev 13604)
+++ trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeSingle.java 2025-05-05 10:35:06 UTC (rev 13605)
@@ -53,7 +53,7 @@
public TrueTypeSingle(final FontParser reader) {
super(reader);
try {
- this.tableDirectory = TableDirectory.parse(this, reader.getRandomInput(), 0);
+ this.tableDirectory = TableDirectory.parse(reader.getRandomInput(), 0);
} catch (final IOException e) {
LoggerFactory.getLogger(getClass()).error(e.getMessage());
}
@@ -68,7 +68,7 @@
public TrueTypeFont getTTFFont(final String fontName) {
if (this.font == null) {
try {
- this.font = TrueTypeFont.parse(this.tableDirectory, getReader().getRandomInput());
+ this.font = TrueTypeFont.parse(this, this.tableDirectory);
} catch (final IOException e) {
/* TODO: Move the parsing to another method. */
throw new IllegalStateException(e);
Modified: trunk/foray/foray-font/src/test/java/org/foray/font/ttf/TrueTypeFontTests.java
===================================================================
--- trunk/foray/foray-font/src/test/java/org/foray/font/ttf/TrueTypeFontTests.java 2025-05-05 10:03:32 UTC (rev 13604)
+++ trunk/foray/foray-font/src/test/java/org/foray/font/ttf/TrueTypeFontTests.java 2025-05-05 10:35:06 UTC (rev 13605)
@@ -55,7 +55,7 @@
final HeadTable headTable = Mockito.mock(HeadTable.class);
Mockito.when(headTable.unitsPerEm()).thenReturn(2048);
- final TrueTypeFont out = new TrueTypeFont(null);
+ final TrueTypeFont out = new TrueTypeFont(null, null);
out.setHeadTable(headTable);
short actual = out.convertFunitsToMillipoints(550);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <vic...@us...> - 2025-05-05 10:03:50
|
Revision: 13604
http://sourceforge.net/p/foray/code/13604
Author: victormote
Date: 2025-05-05 10:03:32 +0000 (Mon, 05 May 2025)
Log Message:
-----------
Unentangle TableDirectory from the parsed font instance. Let the containers manage that relationship.
Modified Paths:
--------------
trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TableDirectory.java
trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeCollection.java
trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeFont.java
trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeSingle.java
Modified: trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TableDirectory.java
===================================================================
--- trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TableDirectory.java 2025-05-05 09:29:49 UTC (rev 13603)
+++ trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TableDirectory.java 2025-05-05 10:03:32 UTC (rev 13604)
@@ -62,9 +62,6 @@
* value is the TTFTableDirEntry for the table of that name. */
private Map<String, TableRecord> entries = new HashMap<String, TableRecord>();
- /** The parent TTFFont instance. */
- private TrueTypeFont ttfFont;
-
/**
* Constructor suitable for parsing an existing Table Directory.
* @param container The font parent container.
@@ -116,26 +113,6 @@
}
/**
- * Parses the font described by this table directory and stores the parsed instance in this for retrieval with
- * {@link #getTTFFont()}.
- * @throws IOException For I/O errors during parsing.
- */
- public void parseFont() throws IOException {
- if (this.ttfFont != null) {
- return;
- }
- this.ttfFont = TrueTypeFont.parse(this, this.container.getReader().getRandomInput());
- }
-
- /**
- * Returns the TTFFont related to this table directory.
- * @return The TTFFont related to this table directory.
- */
- public TrueTypeFont getTTFFont() {
- return this.ttfFont;
- }
-
- /**
* Returns the parent TTFFile.
* @return The parent TTFFile.
*/
Modified: trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeCollection.java
===================================================================
--- trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeCollection.java 2025-05-05 09:29:49 UTC (rev 13603)
+++ trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeCollection.java 2025-05-05 10:03:32 UTC (rev 13604)
@@ -51,10 +51,12 @@
/** The TTCHeader instance that represents this files TTC Header table. */
private TtcHeader ttcHeader = null;
- /** Collection of TTFTableDirectory entries. There should be one entry for
- * each logical font in the TTC file. */
+ /** Collection of TTFTableDirectory entries. There should be one entry for each logical font in the TTC file. */
private TableDirectory[] tableDirectories;
+ /** The fonts parsed from {@link #tableDirectories}. Each can be null. */
+ private TrueTypeFont[] fonts;
+
/** TODO: Remove this. */
private TtfRandomAccessInput raInput;
@@ -90,6 +92,9 @@
TableDirectory.parse(this, raInput, this.ttcHeader.getDirectoryOffset(i));
this.tableDirectories[i] = tableDir;
}
+
+ /* Don't parse them until needed, but create the array in which to store the fonts when they are parsed. */
+ this.fonts = new TrueTypeFont[this.ttcHeader.getNumDirectories()];
}
/**
@@ -140,14 +145,11 @@
parser.parse(this.raInput, tableDirEntry.getOffset(), parseKit.getHandler());
final NameTable nameTable = parseKit.getTable();
-
-
-
-// final NameTable nameTable = NameTable.parse(this.raInput, tableDirEntry.getOffset(),
-// tableDirEntry.getLength());
if (nameTable.getFullName().equals(fontName)) {
- tableDir.parseFont();
- return tableDir.getTTFFont();
+ if (this.fonts[i] == null) {
+ this.fonts[i] = TrueTypeFont.parse(tableDir, this.getReader().getRandomInput());
+ }
+ return this.fonts[i];
}
}
throw new IOException(
@@ -158,8 +160,15 @@
public TrueTypeFont[] getTTFFonts() {
final TrueTypeFont[] fontArray = new TrueTypeFont[numFonts()];
for (int i = 0; i < numFonts(); i++) {
- final TableDirectory tableDir = this.tableDirectories[i];
- fontArray[i] = tableDir.getTTFFont();
+ if (this.fonts[i] == null) {
+ final TableDirectory tableDir = this.tableDirectories[i];
+ try {
+ this.fonts[i] = TrueTypeFont.parse(tableDir, this.getReader().getRandomInput());
+ } catch (final IOException e) {
+ throw new RuntimeException(e);
+ }
+ }
+ fontArray[i] = this.fonts[i];
}
return fontArray;
}
Modified: trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeFont.java
===================================================================
--- trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeFont.java 2025-05-05 09:29:49 UTC (rev 13603)
+++ trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeFont.java 2025-05-05 10:03:32 UTC (rev 13604)
@@ -226,9 +226,6 @@
*/
public static TrueTypeFont parse(final TableDirectory ttfTableDir, final TtfRandomAccessInput raInput)
throws IOException {
- if (ttfTableDir.getTTFFont() != null) {
- return ttfTableDir.getTTFFont();
- }
final TrueTypeFont font = new TrueTypeFont(ttfTableDir);
/* The order is somewhat important here. */
Modified: trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeSingle.java
===================================================================
--- trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeSingle.java 2025-05-05 09:29:49 UTC (rev 13603)
+++ trunk/foray/foray-font/src/main/java/org/foray/font/ttf/TrueTypeSingle.java 2025-05-05 10:03:32 UTC (rev 13604)
@@ -42,6 +42,9 @@
/** The child table directory for this font file. */
private TableDirectory tableDirectory;
+ /** The font parsed from {@link #tableDirectory}. Null until parsed. */
+ private TrueTypeFont font;
+
/**
* Constructor. Parses the passed file and returns it as an object.
* @param reader The FontFileReader instance that encapsulates the
@@ -63,19 +66,21 @@
*/
@Override
public TrueTypeFont getTTFFont(final String fontName) {
- try {
- this.tableDirectory.parseFont();
- } catch (final IOException e) {
- /* TODO: Move the parsing to another method. */
- throw new IllegalStateException(e);
+ if (this.font == null) {
+ try {
+ this.font = TrueTypeFont.parse(this.tableDirectory, getReader().getRandomInput());
+ } catch (final IOException e) {
+ /* TODO: Move the parsing to another method. */
+ throw new IllegalStateException(e);
+ }
}
- return this.tableDirectory.getTTFFont();
+ return this.font;
}
@Override
public TrueTypeFont[] getTTFFonts() {
final TrueTypeFont[] returnArray = new TrueTypeFont[1];
- returnArray[0] = this.tableDirectory.getTTFFont();
+ returnArray[0] = getTTFFont(null);
return returnArray;
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|