geomerative 0.4.3-java → 2.1.0-java
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/.gitignore +2 -0
- data/.mvn/extensions.xml +1 -1
- data/.mvn/wrapper/maven-wrapper.properties +1 -1
- data/CHANGELOG.md +19 -1
- data/COPYING.md +1 -1
- data/README.md +2 -2
- data/Rakefile +2 -15
- data/docs/_config.yml +8 -0
- data/docs/_includes/head.html +7 -6
- data/docs/_includes/header.html +6 -6
- data/docs/_includes/icon-github.svg +3 -1
- data/docs/_includes/icon-twitter.svg +3 -1
- data/docs/_includes/navigation.html +24 -0
- data/docs/_sass/_base.scss +79 -79
- data/docs/_sass/_layout.scss +137 -137
- data/docs/_sass/_syntax-highlighting.scss +64 -64
- data/docs/index.html +18 -18
- data/examples/README.md +1 -1
- data/examples/data/bot1.svg +1 -1
- data/examples/data/lion.svg +156 -156
- data/examples/data/ruby.svg +1 -1
- data/examples/jruby_merge.rb +1 -1
- data/examples/{f_agent.rb → library/f_agent/f_agent.rb} +0 -0
- data/examples/{font_agent.rb → library/font_agent/font_agent.rb} +2 -1
- data/examples/text_on_geomerative_path.rb +3 -2
- data/examples/typo_deform.rb +2 -2
- data/examples/typo_extra_bright.rb +1 -1
- data/geomerative.gemspec +3 -6
- data/lib/geomerative/version.rb +1 -1
- data/lib/geomerative.jar +0 -0
- data/lib/geomerative.rb +10 -10
- data/mvnw +234 -0
- data/mvnw.cmd +145 -0
- data/pom.rb +14 -16
- data/pom.xml +13 -19
- data/src/geomerative/FastRClip.java +2050 -2334
- data/src/geomerative/RClip.java +2237 -2539
- data/src/geomerative/RClosest.java +33 -31
- data/src/geomerative/RCommand.java +1750 -1758
- data/src/geomerative/RContour.java +290 -292
- data/src/geomerative/RFont.java +277 -246
- data/src/geomerative/RG.java +722 -727
- data/src/geomerative/RGeomElem.java +967 -962
- data/src/geomerative/RGroup.java +508 -467
- data/src/geomerative/RMatrix.java +304 -289
- data/src/geomerative/RMesh.java +241 -229
- data/src/geomerative/RPath.java +924 -926
- data/src/geomerative/RPoint.java +391 -391
- data/src/geomerative/RPolygon.java +1017 -1013
- data/src/geomerative/RRectangle.java +43 -52
- data/src/geomerative/RSVG.java +480 -516
- data/src/geomerative/RShape.java +1767 -1777
- data/src/geomerative/RStrip.java +173 -176
- data/src/geomerative/RStyle.java +197 -194
- data/src/module-info.java +4 -0
- data/src/org/apache/batik/svggen/font/Font.java +141 -142
- data/src/org/apache/batik/svggen/font/Glyph.java +102 -71
- data/src/org/apache/batik/svggen/font/Point.java +12 -12
- data/src/org/apache/batik/svggen/font/RandomAccessFileEmulator.java +14 -12
- data/src/org/apache/batik/svggen/font/table/ClassDef.java +12 -12
- data/src/org/apache/batik/svggen/font/table/ClassDefFormat1.java +27 -24
- data/src/org/apache/batik/svggen/font/table/ClassDefFormat2.java +20 -17
- data/src/org/apache/batik/svggen/font/table/CmapFormat.java +43 -43
- data/src/org/apache/batik/svggen/font/table/CmapFormat0.java +33 -26
- data/src/org/apache/batik/svggen/font/table/CmapFormat2.java +25 -20
- data/src/org/apache/batik/svggen/font/table/CmapFormat4.java +106 -96
- data/src/org/apache/batik/svggen/font/table/CmapFormat6.java +36 -32
- data/src/org/apache/batik/svggen/font/table/CmapIndexEntry.java +69 -49
- data/src/org/apache/batik/svggen/font/table/CmapTable.java +50 -50
- data/src/org/apache/batik/svggen/font/table/Coverage.java +19 -19
- data/src/org/apache/batik/svggen/font/table/CoverageFormat1.java +30 -27
- data/src/org/apache/batik/svggen/font/table/CoverageFormat2.java +26 -24
- data/src/org/apache/batik/svggen/font/table/CvtTable.java +16 -16
- data/src/org/apache/batik/svggen/font/table/Device.java +32 -32
- data/src/org/apache/batik/svggen/font/table/DirectoryEntry.java +39 -39
- data/src/org/apache/batik/svggen/font/table/Feature.java +26 -23
- data/src/org/apache/batik/svggen/font/table/FeatureList.java +37 -35
- data/src/org/apache/batik/svggen/font/table/FeatureRecord.java +22 -22
- data/src/org/apache/batik/svggen/font/table/FeatureTags.java +4 -3
- data/src/org/apache/batik/svggen/font/table/FpgmTable.java +9 -9
- data/src/org/apache/batik/svggen/font/table/GlyfCompositeComp.java +134 -132
- data/src/org/apache/batik/svggen/font/table/GlyfCompositeDescript.java +123 -122
- data/src/org/apache/batik/svggen/font/table/GlyfDescript.java +44 -44
- data/src/org/apache/batik/svggen/font/table/GlyfSimpleDescript.java +110 -109
- data/src/org/apache/batik/svggen/font/table/GlyfTable.java +46 -46
- data/src/org/apache/batik/svggen/font/table/GlyphDescription.java +25 -13
- data/src/org/apache/batik/svggen/font/table/GposTable.java +26 -23
- data/src/org/apache/batik/svggen/font/table/GsubTable.java +85 -82
- data/src/org/apache/batik/svggen/font/table/HeadTable.java +131 -131
- data/src/org/apache/batik/svggen/font/table/HheaTable.java +80 -80
- data/src/org/apache/batik/svggen/font/table/HmtxTable.java +50 -49
- data/src/org/apache/batik/svggen/font/table/KernSubtable.java +29 -27
- data/src/org/apache/batik/svggen/font/table/KernSubtableFormat0.java +35 -32
- data/src/org/apache/batik/svggen/font/table/KernSubtableFormat2.java +28 -26
- data/src/org/apache/batik/svggen/font/table/KernTable.java +36 -31
- data/src/org/apache/batik/svggen/font/table/KerningPair.java +27 -23
- data/src/org/apache/batik/svggen/font/table/LangSys.java +28 -26
- data/src/org/apache/batik/svggen/font/table/LangSysRecord.java +22 -22
- data/src/org/apache/batik/svggen/font/table/Ligature.java +24 -24
- data/src/org/apache/batik/svggen/font/table/LigatureSet.java +24 -24
- data/src/org/apache/batik/svggen/font/table/LigatureSubst.java +9 -9
- data/src/org/apache/batik/svggen/font/table/LigatureSubstFormat1.java +30 -30
- data/src/org/apache/batik/svggen/font/table/LocaTable.java +37 -37
- data/src/org/apache/batik/svggen/font/table/Lookup.java +41 -40
- data/src/org/apache/batik/svggen/font/table/LookupList.java +34 -34
- data/src/org/apache/batik/svggen/font/table/LookupSubtableFactory.java +7 -5
- data/src/org/apache/batik/svggen/font/table/MaxpTable.java +96 -96
- data/src/org/apache/batik/svggen/font/table/NameRecord.java +64 -65
- data/src/org/apache/batik/svggen/font/table/NameTable.java +33 -33
- data/src/org/apache/batik/svggen/font/table/Os2Table.java +196 -196
- data/src/org/apache/batik/svggen/font/table/Panose.java +14 -12
- data/src/org/apache/batik/svggen/font/table/PostTable.java +338 -338
- data/src/org/apache/batik/svggen/font/table/PrepTable.java +9 -9
- data/src/org/apache/batik/svggen/font/table/Program.java +15 -15
- data/src/org/apache/batik/svggen/font/table/RangeRecord.java +26 -25
- data/src/org/apache/batik/svggen/font/table/Script.java +38 -38
- data/src/org/apache/batik/svggen/font/table/ScriptList.java +42 -42
- data/src/org/apache/batik/svggen/font/table/ScriptRecord.java +22 -22
- data/src/org/apache/batik/svggen/font/table/ScriptTags.java +2 -1
- data/src/org/apache/batik/svggen/font/table/SingleSubst.java +15 -16
- data/src/org/apache/batik/svggen/font/table/SingleSubstFormat1.java +33 -33
- data/src/org/apache/batik/svggen/font/table/SingleSubstFormat2.java +32 -32
- data/src/org/apache/batik/svggen/font/table/Table.java +171 -170
- data/src/org/apache/batik/svggen/font/table/TableDirectory.java +55 -55
- data/src/org/apache/batik/svggen/font/table/TableFactory.java +92 -93
- metadata +18 -19
- data/.travis.yml +0 -10
- data/calculate_torsional_angle.rb +0 -17
|
@@ -21,140 +21,141 @@ import java.io.ByteArrayInputStream;
|
|
|
21
21
|
import java.util.ArrayList;
|
|
22
22
|
|
|
23
23
|
/**
|
|
24
|
-
* Glyph description for composite glyphs.
|
|
24
|
+
* Glyph description for composite glyphs. Composite glyphs are made up of one
|
|
25
25
|
* or more simple glyphs, usually with some sort of transformation applied to
|
|
26
26
|
* each.
|
|
27
27
|
*
|
|
28
|
-
* @version $Id: GlyfCompositeDescript.java,v 1.5 2004/08/18 07:15:20 vhardy Exp
|
|
28
|
+
* @version $Id: GlyfCompositeDescript.java,v 1.5 2004/08/18 07:15:20 vhardy Exp
|
|
29
|
+
* $
|
|
29
30
|
* @author <a href="mailto:david@steadystate.co.uk">David Schweinsberg</a>
|
|
30
31
|
*/
|
|
31
32
|
public class GlyfCompositeDescript extends GlyfDescript {
|
|
32
33
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
}
|
|
34
|
+
private final ArrayList<GlyfCompositeComp> components;
|
|
35
|
+
|
|
36
|
+
public GlyfCompositeDescript(GlyfTable parentTable,
|
|
37
|
+
ByteArrayInputStream bais) {
|
|
38
|
+
super(parentTable, (short) -1, bais);
|
|
39
|
+
this.components = new ArrayList<>();
|
|
40
|
+
|
|
41
|
+
// Get all of the composite components
|
|
42
|
+
GlyfCompositeComp comp;
|
|
43
|
+
int firstIndex = 0;
|
|
44
|
+
int firstContour = 0;
|
|
45
|
+
do {
|
|
46
|
+
comp = new GlyfCompositeComp(firstIndex, firstContour, bais);
|
|
47
|
+
components.add(comp);
|
|
48
|
+
|
|
49
|
+
GlyphDescription desc;
|
|
50
|
+
desc = parentTable.getDescription(comp.getGlyphIndex());
|
|
51
|
+
if (desc != null) {
|
|
52
|
+
firstIndex += desc.getPointCount();
|
|
53
|
+
firstContour += desc.getContourCount();
|
|
54
|
+
}
|
|
55
|
+
} while ((comp.getFlags() & GlyfCompositeComp.MORE_COMPONENTS) != 0);
|
|
56
|
+
|
|
57
|
+
// Are there hinting intructions to read?
|
|
58
|
+
if ((comp.getFlags() & GlyfCompositeComp.WE_HAVE_INSTRUCTIONS) != 0) {
|
|
59
|
+
readInstructions(bais, (bais.read() << 8 | bais.read()));
|
|
60
60
|
}
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
return 0;
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
@Override
|
|
73
|
-
public byte getFlags(int i) {
|
|
74
|
-
GlyfCompositeComp c = getCompositeComp(i);
|
|
75
|
-
if (c != null) {
|
|
76
|
-
GlyphDescription gd = parentTable.getDescription(c.getGlyphIndex());
|
|
77
|
-
return gd.getFlags(i - c.getFirstIndex());
|
|
78
|
-
}
|
|
79
|
-
return 0;
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
@Override
|
|
83
|
-
public short getXCoordinate(int i) {
|
|
84
|
-
GlyfCompositeComp c = getCompositeComp(i);
|
|
85
|
-
if (c != null) {
|
|
86
|
-
GlyphDescription gd = parentTable.getDescription(c.getGlyphIndex());
|
|
87
|
-
int n = i - c.getFirstIndex();
|
|
88
|
-
int x = gd.getXCoordinate(n);
|
|
89
|
-
int y = gd.getYCoordinate(n);
|
|
90
|
-
short x1 = (short) c.scaleX(x, y);
|
|
91
|
-
x1 += c.getXTranslate();
|
|
92
|
-
return x1;
|
|
93
|
-
}
|
|
94
|
-
return 0;
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
@Override
|
|
98
|
-
public short getYCoordinate(int i) {
|
|
99
|
-
GlyfCompositeComp c = getCompositeComp(i);
|
|
100
|
-
if (c != null) {
|
|
101
|
-
GlyphDescription gd = parentTable.getDescription(c.getGlyphIndex());
|
|
102
|
-
int n = i - c.getFirstIndex();
|
|
103
|
-
int x = gd.getXCoordinate(n);
|
|
104
|
-
int y = gd.getYCoordinate(n);
|
|
105
|
-
short y1 = (short) c.scaleY(x, y);
|
|
106
|
-
y1 += c.getYTranslate();
|
|
107
|
-
return y1;
|
|
108
|
-
}
|
|
109
|
-
return 0;
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
@Override
|
|
113
|
-
public boolean isComposite() {
|
|
114
|
-
return true;
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
@Override
|
|
118
|
-
public int getPointCount() {
|
|
119
|
-
GlyfCompositeComp c = (GlyfCompositeComp) components.get(components.size()-1);
|
|
120
|
-
return c.getFirstIndex() + parentTable.getDescription(c.getGlyphIndex()).getPointCount();
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
@Override
|
|
64
|
+
public int getEndPtOfContours(int i) {
|
|
65
|
+
GlyfCompositeComp c = getCompositeCompEndPt(i);
|
|
66
|
+
if (c != null) {
|
|
67
|
+
GlyphDescription gd = parentTable.getDescription(c.getGlyphIndex());
|
|
68
|
+
return gd.getEndPtOfContours(i - c.getFirstContour()) + c.getFirstIndex();
|
|
121
69
|
}
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
70
|
+
return 0;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
@Override
|
|
74
|
+
public byte getFlags(int i) {
|
|
75
|
+
GlyfCompositeComp c = getCompositeComp(i);
|
|
76
|
+
if (c != null) {
|
|
77
|
+
GlyphDescription gd = parentTable.getDescription(c.getGlyphIndex());
|
|
78
|
+
return gd.getFlags(i - c.getFirstIndex());
|
|
127
79
|
}
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
80
|
+
return 0;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
@Override
|
|
84
|
+
public short getXCoordinate(int i) {
|
|
85
|
+
GlyfCompositeComp c = getCompositeComp(i);
|
|
86
|
+
if (c != null) {
|
|
87
|
+
GlyphDescription gd = parentTable.getDescription(c.getGlyphIndex());
|
|
88
|
+
int n = i - c.getFirstIndex();
|
|
89
|
+
int x = gd.getXCoordinate(n);
|
|
90
|
+
int y = gd.getYCoordinate(n);
|
|
91
|
+
short x1 = (short) c.scaleX(x, y);
|
|
92
|
+
x1 += c.getXTranslate();
|
|
93
|
+
return x1;
|
|
131
94
|
}
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
95
|
+
return 0;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
@Override
|
|
99
|
+
public short getYCoordinate(int i) {
|
|
100
|
+
GlyfCompositeComp c = getCompositeComp(i);
|
|
101
|
+
if (c != null) {
|
|
102
|
+
GlyphDescription gd = parentTable.getDescription(c.getGlyphIndex());
|
|
103
|
+
int n = i - c.getFirstIndex();
|
|
104
|
+
int x = gd.getXCoordinate(n);
|
|
105
|
+
int y = gd.getYCoordinate(n);
|
|
106
|
+
short y1 = (short) c.scaleY(x, y);
|
|
107
|
+
y1 += c.getYTranslate();
|
|
108
|
+
return y1;
|
|
135
109
|
}
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
110
|
+
return 0;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
@Override
|
|
114
|
+
public boolean isComposite() {
|
|
115
|
+
return true;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
@Override
|
|
119
|
+
public int getPointCount() {
|
|
120
|
+
GlyfCompositeComp c = (GlyfCompositeComp) components.get(components.size() - 1);
|
|
121
|
+
return c.getFirstIndex() + parentTable.getDescription(c.getGlyphIndex()).getPointCount();
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
@Override
|
|
125
|
+
public int getContourCount() {
|
|
126
|
+
GlyfCompositeComp c = (GlyfCompositeComp) components.get(components.size() - 1);
|
|
127
|
+
return c.getFirstContour() + parentTable.getDescription(c.getGlyphIndex()).getContourCount();
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
public int getComponentIndex(int i) {
|
|
131
|
+
return ((GlyfCompositeComp) components.get(i)).getFirstIndex();
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
public int getComponentCount() {
|
|
135
|
+
return components.size();
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
protected GlyfCompositeComp getCompositeComp(int i) {
|
|
139
|
+
GlyfCompositeComp c;
|
|
140
|
+
for (Object component : components) {
|
|
141
|
+
c = (GlyfCompositeComp) component;
|
|
142
|
+
GlyphDescription gd = parentTable.getDescription(c.getGlyphIndex());
|
|
143
|
+
if (c.getFirstIndex() <= i && i < (c.getFirstIndex() + gd.getPointCount())) {
|
|
144
|
+
return c;
|
|
145
|
+
}
|
|
147
146
|
}
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
147
|
+
return null;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
protected GlyfCompositeComp getCompositeCompEndPt(int i) {
|
|
151
|
+
GlyfCompositeComp c;
|
|
152
|
+
for (Object component : components) {
|
|
153
|
+
c = (GlyfCompositeComp) component;
|
|
154
|
+
GlyphDescription gd = parentTable.getDescription(c.getGlyphIndex());
|
|
155
|
+
if (c.getFirstContour() <= i && i < (c.getFirstContour() + gd.getContourCount())) {
|
|
156
|
+
return c;
|
|
157
|
+
}
|
|
159
158
|
}
|
|
159
|
+
return null;
|
|
160
|
+
}
|
|
160
161
|
}
|
|
@@ -25,55 +25,55 @@ import java.io.ByteArrayInputStream;
|
|
|
25
25
|
*/
|
|
26
26
|
public abstract class GlyfDescript extends Program implements GlyphDescription {
|
|
27
27
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
28
|
+
// flags
|
|
29
|
+
public static final byte onCurve = 0x01;
|
|
30
|
+
public static final byte xShortVector = 0x02;
|
|
31
|
+
public static final byte yShortVector = 0x04;
|
|
32
|
+
public static final byte repeat = 0x08;
|
|
33
|
+
public static final byte xDual = 0x10;
|
|
34
|
+
public static final byte yDual = 0x20;
|
|
35
35
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
36
|
+
protected GlyfTable parentTable;
|
|
37
|
+
private final int numberOfContours;
|
|
38
|
+
private final short xMin;
|
|
39
|
+
private final short yMin;
|
|
40
|
+
private final short xMax;
|
|
41
|
+
private final short yMax;
|
|
42
42
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
43
|
+
protected GlyfDescript(GlyfTable parentTable, short numberOfContours, ByteArrayInputStream bais) {
|
|
44
|
+
this.parentTable = parentTable;
|
|
45
|
+
this.numberOfContours = numberOfContours;
|
|
46
|
+
xMin = (short) (bais.read() << 8 | bais.read());
|
|
47
|
+
yMin = (short) (bais.read() << 8 | bais.read());
|
|
48
|
+
xMax = (short) (bais.read() << 8 | bais.read());
|
|
49
|
+
yMax = (short) (bais.read() << 8 | bais.read());
|
|
50
|
+
}
|
|
51
51
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
52
|
+
public int getNumberOfContours() {
|
|
53
|
+
return numberOfContours;
|
|
54
|
+
}
|
|
55
55
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
56
|
+
@Override
|
|
57
|
+
public short getXMaximum() {
|
|
58
|
+
return xMax;
|
|
59
|
+
}
|
|
60
60
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
61
|
+
@Override
|
|
62
|
+
public short getXMinimum() {
|
|
63
|
+
return xMin;
|
|
64
|
+
}
|
|
65
65
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
66
|
+
@Override
|
|
67
|
+
public short getYMaximum() {
|
|
68
|
+
return yMax;
|
|
69
|
+
}
|
|
70
70
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
71
|
+
/**
|
|
72
|
+
*
|
|
73
|
+
* @return
|
|
74
|
+
*/
|
|
75
|
+
@Override
|
|
76
|
+
public short getYMinimum() {
|
|
77
|
+
return yMin;
|
|
78
|
+
}
|
|
79
79
|
}
|
|
@@ -25,69 +25,70 @@ import java.io.ByteArrayInputStream;
|
|
|
25
25
|
*/
|
|
26
26
|
public class GlyfSimpleDescript extends GlyfDescript {
|
|
27
27
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
public GlyfSimpleDescript(GlyfTable parentTable, short numberOfContours, ByteArrayInputStream bais) {
|
|
35
|
-
|
|
36
|
-
super(parentTable, numberOfContours, bais);
|
|
37
|
-
|
|
38
|
-
// Simple glyph description
|
|
39
|
-
endPtsOfContours = new int[numberOfContours];
|
|
40
|
-
for (int i = 0; i < numberOfContours; i++) {
|
|
41
|
-
endPtsOfContours[i] = (bais.read()<<8 | bais.read());
|
|
42
|
-
}
|
|
28
|
+
private final int[] endPtsOfContours;
|
|
29
|
+
private final byte[] flags;
|
|
30
|
+
private final short[] xCoordinates;
|
|
31
|
+
private final short[] yCoordinates;
|
|
32
|
+
private final int count;
|
|
43
33
|
|
|
44
|
-
|
|
45
|
-
count = endPtsOfContours[numberOfContours-1] + 1;
|
|
46
|
-
flags = new byte[count];
|
|
47
|
-
xCoordinates = new short[count];
|
|
48
|
-
yCoordinates = new short[count];
|
|
34
|
+
public GlyfSimpleDescript(GlyfTable parentTable, short numberOfContours, ByteArrayInputStream bais) {
|
|
49
35
|
|
|
50
|
-
|
|
51
|
-
readInstructions(bais, instructionCount);
|
|
52
|
-
readFlags(count, bais);
|
|
53
|
-
readCoords(count, bais);
|
|
54
|
-
}
|
|
36
|
+
super(parentTable, numberOfContours, bais);
|
|
55
37
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
38
|
+
// Simple glyph description
|
|
39
|
+
endPtsOfContours = new int[numberOfContours];
|
|
40
|
+
for (int i = 0; i < numberOfContours; i++) {
|
|
41
|
+
endPtsOfContours[i] = (bais.read() << 8 | bais.read());
|
|
59
42
|
}
|
|
60
43
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
44
|
+
// The last end point index reveals the total number of points
|
|
45
|
+
count = endPtsOfContours[numberOfContours - 1] + 1;
|
|
46
|
+
flags = new byte[count];
|
|
47
|
+
xCoordinates = new short[count];
|
|
48
|
+
yCoordinates = new short[count];
|
|
49
|
+
|
|
50
|
+
int instructionCount = (bais.read() << 8 | bais.read());
|
|
51
|
+
readInstructions(bais, instructionCount);
|
|
52
|
+
readFlags(count, bais);
|
|
53
|
+
readCoords(count, bais);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
@Override
|
|
57
|
+
public int getEndPtOfContours(int i) {
|
|
58
|
+
return endPtsOfContours[i];
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
@Override
|
|
62
|
+
public byte getFlags(int i) {
|
|
63
|
+
return flags[i];
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
@Override
|
|
67
|
+
public short getXCoordinate(int i) {
|
|
68
|
+
return xCoordinates[i];
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
@Override
|
|
72
|
+
public short getYCoordinate(int i) {
|
|
73
|
+
return yCoordinates[i];
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
@Override
|
|
77
|
+
public boolean isComposite() {
|
|
78
|
+
return false;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
@Override
|
|
82
|
+
public int getPointCount() {
|
|
83
|
+
return count;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
@Override
|
|
87
|
+
public int getContourCount() {
|
|
88
|
+
return getNumberOfContours();
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/*
|
|
91
92
|
public int getComponentIndex(int c) {
|
|
92
93
|
return 0;
|
|
93
94
|
}
|
|
@@ -95,61 +96,61 @@ public class GlyfSimpleDescript extends GlyfDescript {
|
|
|
95
96
|
public int getComponentCount() {
|
|
96
97
|
return 1;
|
|
97
98
|
}
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
}
|
|
110
|
-
} else {
|
|
111
|
-
if ((flags[i] & xShortVector) != 0) {
|
|
112
|
-
x += (short) -((short) bais.read());
|
|
113
|
-
} else {
|
|
114
|
-
x += (short)(bais.read()<<8 | bais.read());
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
xCoordinates[i] = x;
|
|
99
|
+
*/
|
|
100
|
+
/**
|
|
101
|
+
* The table is stored as relative values, but we'll store them as absolutes
|
|
102
|
+
*/
|
|
103
|
+
private void readCoords(int count, ByteArrayInputStream bais) {
|
|
104
|
+
short x = 0;
|
|
105
|
+
short y = 0;
|
|
106
|
+
for (int i = 0; i < count; i++) {
|
|
107
|
+
if ((flags[i] & xDual) != 0) {
|
|
108
|
+
if ((flags[i] & xShortVector) != 0) {
|
|
109
|
+
x += (short) bais.read();
|
|
118
110
|
}
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
}
|
|
125
|
-
} else {
|
|
126
|
-
if ((flags[i] & yShortVector) != 0) {
|
|
127
|
-
y += (short) -((short) bais.read());
|
|
128
|
-
} else {
|
|
129
|
-
y += (short)(bais.read()<<8 | bais.read());
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
yCoordinates[i] = y;
|
|
111
|
+
} else {
|
|
112
|
+
if ((flags[i] & xShortVector) != 0) {
|
|
113
|
+
x += (short) -((short) bais.read());
|
|
114
|
+
} else {
|
|
115
|
+
x += (short) (bais.read() << 8 | bais.read());
|
|
133
116
|
}
|
|
117
|
+
}
|
|
118
|
+
xCoordinates[i] = x;
|
|
134
119
|
}
|
|
135
120
|
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
121
|
+
for (int i = 0; i < count; i++) {
|
|
122
|
+
if ((flags[i] & yDual) != 0) {
|
|
123
|
+
if ((flags[i] & yShortVector) != 0) {
|
|
124
|
+
y += (short) bais.read();
|
|
125
|
+
}
|
|
126
|
+
} else {
|
|
127
|
+
if ((flags[i] & yShortVector) != 0) {
|
|
128
|
+
y += (short) -((short) bais.read());
|
|
129
|
+
} else {
|
|
130
|
+
y += (short) (bais.read() << 8 | bais.read());
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
yCoordinates[i] = y;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
/**
|
|
138
|
+
* The flags are run-length encoded
|
|
139
|
+
*/
|
|
140
|
+
private void readFlags(int flagCount, ByteArrayInputStream bais) {
|
|
141
|
+
try {
|
|
142
|
+
for (int index = 0; index < flagCount; index++) {
|
|
143
|
+
flags[index] = (byte) bais.read();
|
|
144
|
+
if ((flags[index] & repeat) != 0) {
|
|
145
|
+
int repeats = bais.read();
|
|
146
|
+
for (int i = 1; i <= repeats; i++) {
|
|
147
|
+
flags[index + i] = flags[index];
|
|
148
|
+
}
|
|
149
|
+
index += repeats;
|
|
153
150
|
}
|
|
151
|
+
}
|
|
152
|
+
} catch (ArrayIndexOutOfBoundsException e) {
|
|
153
|
+
System.out.println("error: array index out of bounds");
|
|
154
154
|
}
|
|
155
|
+
}
|
|
155
156
|
}
|