geomerative 1.1.0-java → 2.0.0-java

Sign up to get free protection for your applications and to get access to all the features.
Files changed (116) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -1
  3. data/.mvn/extensions.xml +1 -1
  4. data/.mvn/wrapper/maven-wrapper.properties +1 -1
  5. data/CHANGELOG.md +3 -0
  6. data/COPYING.md +1 -1
  7. data/README.md +0 -1
  8. data/Rakefile +2 -15
  9. data/docs/_includes/header.html +6 -6
  10. data/docs/_includes/icon-github.svg +3 -1
  11. data/docs/_includes/icon-twitter.svg +3 -1
  12. data/docs/_includes/navigation.html +18 -18
  13. data/docs/_sass/_base.scss +79 -79
  14. data/docs/_sass/_layout.scss +137 -137
  15. data/docs/_sass/_syntax-highlighting.scss +64 -64
  16. data/docs/index.html +18 -18
  17. data/examples/data/bot1.svg +1 -1
  18. data/examples/data/lion.svg +156 -156
  19. data/examples/data/ruby.svg +1 -1
  20. data/geomerative.gemspec +1 -2
  21. data/lib/geomerative/version.rb +1 -1
  22. data/mvnw +234 -0
  23. data/mvnw.cmd +145 -0
  24. data/pom.rb +14 -13
  25. data/pom.xml +14 -13
  26. data/src/geomerative/FastRClip.java +2149 -2156
  27. data/src/geomerative/RClip.java +2237 -2539
  28. data/src/geomerative/RClosest.java +33 -31
  29. data/src/geomerative/RCommand.java +1750 -1758
  30. data/src/geomerative/RContour.java +290 -292
  31. data/src/geomerative/RFont.java +277 -246
  32. data/src/geomerative/RG.java +722 -727
  33. data/src/geomerative/RGeomElem.java +967 -960
  34. data/src/geomerative/RGroup.java +508 -467
  35. data/src/geomerative/RMatrix.java +304 -289
  36. data/src/geomerative/RMesh.java +241 -229
  37. data/src/geomerative/RPath.java +924 -925
  38. data/src/geomerative/RPoint.java +391 -391
  39. data/src/geomerative/RPolygon.java +998 -988
  40. data/src/geomerative/RRectangle.java +43 -52
  41. data/src/geomerative/RSVG.java +480 -516
  42. data/src/geomerative/RShape.java +1767 -1777
  43. data/src/geomerative/RStrip.java +173 -176
  44. data/src/geomerative/RStyle.java +197 -194
  45. data/src/org/apache/batik/svggen/font/Font.java +141 -142
  46. data/src/org/apache/batik/svggen/font/Glyph.java +102 -71
  47. data/src/org/apache/batik/svggen/font/Point.java +12 -12
  48. data/src/org/apache/batik/svggen/font/RandomAccessFileEmulator.java +14 -12
  49. data/src/org/apache/batik/svggen/font/table/ClassDef.java +12 -12
  50. data/src/org/apache/batik/svggen/font/table/ClassDefFormat1.java +27 -24
  51. data/src/org/apache/batik/svggen/font/table/ClassDefFormat2.java +20 -17
  52. data/src/org/apache/batik/svggen/font/table/CmapFormat.java +43 -43
  53. data/src/org/apache/batik/svggen/font/table/CmapFormat0.java +33 -26
  54. data/src/org/apache/batik/svggen/font/table/CmapFormat2.java +25 -20
  55. data/src/org/apache/batik/svggen/font/table/CmapFormat4.java +106 -96
  56. data/src/org/apache/batik/svggen/font/table/CmapFormat6.java +36 -32
  57. data/src/org/apache/batik/svggen/font/table/CmapIndexEntry.java +69 -49
  58. data/src/org/apache/batik/svggen/font/table/CmapTable.java +50 -50
  59. data/src/org/apache/batik/svggen/font/table/Coverage.java +19 -19
  60. data/src/org/apache/batik/svggen/font/table/CoverageFormat1.java +30 -27
  61. data/src/org/apache/batik/svggen/font/table/CoverageFormat2.java +26 -24
  62. data/src/org/apache/batik/svggen/font/table/CvtTable.java +16 -16
  63. data/src/org/apache/batik/svggen/font/table/Device.java +32 -32
  64. data/src/org/apache/batik/svggen/font/table/DirectoryEntry.java +39 -39
  65. data/src/org/apache/batik/svggen/font/table/Feature.java +26 -23
  66. data/src/org/apache/batik/svggen/font/table/FeatureList.java +37 -35
  67. data/src/org/apache/batik/svggen/font/table/FeatureRecord.java +22 -22
  68. data/src/org/apache/batik/svggen/font/table/FeatureTags.java +4 -3
  69. data/src/org/apache/batik/svggen/font/table/FpgmTable.java +9 -9
  70. data/src/org/apache/batik/svggen/font/table/GlyfCompositeComp.java +134 -132
  71. data/src/org/apache/batik/svggen/font/table/GlyfCompositeDescript.java +123 -122
  72. data/src/org/apache/batik/svggen/font/table/GlyfDescript.java +44 -44
  73. data/src/org/apache/batik/svggen/font/table/GlyfSimpleDescript.java +110 -109
  74. data/src/org/apache/batik/svggen/font/table/GlyfTable.java +46 -46
  75. data/src/org/apache/batik/svggen/font/table/GlyphDescription.java +25 -13
  76. data/src/org/apache/batik/svggen/font/table/GposTable.java +26 -23
  77. data/src/org/apache/batik/svggen/font/table/GsubTable.java +85 -82
  78. data/src/org/apache/batik/svggen/font/table/HeadTable.java +131 -131
  79. data/src/org/apache/batik/svggen/font/table/HheaTable.java +80 -80
  80. data/src/org/apache/batik/svggen/font/table/HmtxTable.java +50 -49
  81. data/src/org/apache/batik/svggen/font/table/KernSubtable.java +29 -27
  82. data/src/org/apache/batik/svggen/font/table/KernSubtableFormat0.java +35 -32
  83. data/src/org/apache/batik/svggen/font/table/KernSubtableFormat2.java +28 -26
  84. data/src/org/apache/batik/svggen/font/table/KernTable.java +36 -31
  85. data/src/org/apache/batik/svggen/font/table/KerningPair.java +27 -23
  86. data/src/org/apache/batik/svggen/font/table/LangSys.java +28 -26
  87. data/src/org/apache/batik/svggen/font/table/LangSysRecord.java +22 -22
  88. data/src/org/apache/batik/svggen/font/table/Ligature.java +24 -24
  89. data/src/org/apache/batik/svggen/font/table/LigatureSet.java +24 -24
  90. data/src/org/apache/batik/svggen/font/table/LigatureSubst.java +9 -9
  91. data/src/org/apache/batik/svggen/font/table/LigatureSubstFormat1.java +30 -30
  92. data/src/org/apache/batik/svggen/font/table/LocaTable.java +37 -37
  93. data/src/org/apache/batik/svggen/font/table/Lookup.java +41 -40
  94. data/src/org/apache/batik/svggen/font/table/LookupList.java +34 -34
  95. data/src/org/apache/batik/svggen/font/table/LookupSubtableFactory.java +7 -5
  96. data/src/org/apache/batik/svggen/font/table/MaxpTable.java +96 -96
  97. data/src/org/apache/batik/svggen/font/table/NameRecord.java +64 -65
  98. data/src/org/apache/batik/svggen/font/table/NameTable.java +33 -33
  99. data/src/org/apache/batik/svggen/font/table/Os2Table.java +196 -196
  100. data/src/org/apache/batik/svggen/font/table/Panose.java +14 -12
  101. data/src/org/apache/batik/svggen/font/table/PostTable.java +338 -338
  102. data/src/org/apache/batik/svggen/font/table/PrepTable.java +9 -9
  103. data/src/org/apache/batik/svggen/font/table/Program.java +15 -15
  104. data/src/org/apache/batik/svggen/font/table/RangeRecord.java +26 -25
  105. data/src/org/apache/batik/svggen/font/table/Script.java +38 -38
  106. data/src/org/apache/batik/svggen/font/table/ScriptList.java +42 -42
  107. data/src/org/apache/batik/svggen/font/table/ScriptRecord.java +22 -22
  108. data/src/org/apache/batik/svggen/font/table/ScriptTags.java +2 -1
  109. data/src/org/apache/batik/svggen/font/table/SingleSubst.java +15 -16
  110. data/src/org/apache/batik/svggen/font/table/SingleSubstFormat1.java +33 -33
  111. data/src/org/apache/batik/svggen/font/table/SingleSubstFormat2.java +32 -32
  112. data/src/org/apache/batik/svggen/font/table/Table.java +171 -170
  113. data/src/org/apache/batik/svggen/font/table/TableDirectory.java +55 -55
  114. data/src/org/apache/batik/svggen/font/table/TableFactory.java +92 -93
  115. metadata +10 -11
  116. data/.travis.yml +0 -9
@@ -21,140 +21,141 @@ import java.io.ByteArrayInputStream;
21
21
  import java.util.ArrayList;
22
22
 
23
23
  /**
24
- * Glyph description for composite glyphs. Composite glyphs are made up of one
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
- private final ArrayList<GlyfCompositeComp> components;
34
-
35
- public GlyfCompositeDescript(GlyfTable parentTable,
36
- ByteArrayInputStream bais) {
37
- super(parentTable, (short) -1, bais);
38
- this.components = new ArrayList<>();
39
-
40
- // Get all of the composite components
41
- GlyfCompositeComp comp;
42
- int firstIndex = 0;
43
- int firstContour = 0;
44
- do {
45
- comp = new GlyfCompositeComp(firstIndex, firstContour, bais);
46
- components.add(comp);
47
-
48
- GlyphDescription desc;
49
- desc = parentTable.getDescription(comp.getGlyphIndex());
50
- if (desc != null) {
51
- firstIndex += desc.getPointCount();
52
- firstContour += desc.getContourCount();
53
- }
54
- } while ((comp.getFlags() & GlyfCompositeComp.MORE_COMPONENTS) != 0);
55
-
56
- // Are there hinting intructions to read?
57
- if ((comp.getFlags() & GlyfCompositeComp.WE_HAVE_INSTRUCTIONS) != 0) {
58
- readInstructions(bais, (bais.read()<<8 | bais.read()));
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
- @Override
63
- public int getEndPtOfContours(int i) {
64
- GlyfCompositeComp c = getCompositeCompEndPt(i);
65
- if (c != null) {
66
- GlyphDescription gd = parentTable.getDescription(c.getGlyphIndex());
67
- return gd.getEndPtOfContours(i - c.getFirstContour()) + c.getFirstIndex();
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
- @Override
124
- public int getContourCount() {
125
- GlyfCompositeComp c = (GlyfCompositeComp) components.get(components.size()-1);
126
- return c.getFirstContour() + parentTable.getDescription(c.getGlyphIndex()).getContourCount();
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
- public int getComponentIndex(int i) {
130
- return ((GlyfCompositeComp)components.get(i)).getFirstIndex();
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
- public int getComponentCount() {
134
- return components.size();
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
- protected GlyfCompositeComp getCompositeComp(int i) {
138
- GlyfCompositeComp c;
139
- for (Object component : components) {
140
- c = (GlyfCompositeComp) component;
141
- GlyphDescription gd = parentTable.getDescription(c.getGlyphIndex());
142
- if (c.getFirstIndex() <= i && i < (c.getFirstIndex() + gd.getPointCount())) {
143
- return c;
144
- }
145
- }
146
- return null;
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
- protected GlyfCompositeComp getCompositeCompEndPt(int i) {
150
- GlyfCompositeComp c;
151
- for (Object component : components) {
152
- c = (GlyfCompositeComp) component;
153
- GlyphDescription gd = parentTable.getDescription(c.getGlyphIndex());
154
- if (c.getFirstContour() <= i && i < (c.getFirstContour() + gd.getContourCount())) {
155
- return c;
156
- }
157
- }
158
- return null;
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
- // 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;
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
- 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;
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
- 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
- }
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
- public int getNumberOfContours() {
53
- return numberOfContours;
54
- }
52
+ public int getNumberOfContours() {
53
+ return numberOfContours;
54
+ }
55
55
 
56
- @Override
57
- public short getXMaximum() {
58
- return xMax;
59
- }
56
+ @Override
57
+ public short getXMaximum() {
58
+ return xMax;
59
+ }
60
60
 
61
- @Override
62
- public short getXMinimum() {
63
- return xMin;
64
- }
61
+ @Override
62
+ public short getXMinimum() {
63
+ return xMin;
64
+ }
65
65
 
66
- @Override
67
- public short getYMaximum() {
68
- return yMax;
69
- }
66
+ @Override
67
+ public short getYMaximum() {
68
+ return yMax;
69
+ }
70
70
 
71
- /**
72
- *
73
- * @return
74
- */
75
- @Override
76
- public short getYMinimum() {
77
- return yMin;
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
- private final int[] endPtsOfContours;
29
- private final byte[] flags;
30
- private final short[] xCoordinates;
31
- private final short[] yCoordinates;
32
- private final int count;
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
- // 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];
34
+ public GlyfSimpleDescript(GlyfTable parentTable, short numberOfContours, ByteArrayInputStream bais) {
49
35
 
50
- int instructionCount = (bais.read()<<8 | bais.read());
51
- readInstructions(bais, instructionCount);
52
- readFlags(count, bais);
53
- readCoords(count, bais);
54
- }
36
+ super(parentTable, numberOfContours, bais);
55
37
 
56
- @Override
57
- public int getEndPtOfContours(int i) {
58
- return endPtsOfContours[i];
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
- @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
- /*
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
- * The table is stored as relative values, but we'll store them as absolutes
101
- */
102
- private void readCoords(int count, ByteArrayInputStream bais) {
103
- short x = 0;
104
- short y = 0;
105
- for (int i = 0; i < count; i++) {
106
- if ((flags[i] & xDual) != 0) {
107
- if ((flags[i] & xShortVector) != 0) {
108
- x += (short) bais.read();
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
- for (int i = 0; i < count; i++) {
121
- if ((flags[i] & yDual) != 0) {
122
- if ((flags[i] & yShortVector) != 0) {
123
- y += (short) bais.read();
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
- * The flags are run-length encoded
138
- */
139
- private void readFlags(int flagCount, ByteArrayInputStream bais) {
140
- try {
141
- for (int index = 0; index < flagCount; index++) {
142
- flags[index] = (byte) bais.read();
143
- if ((flags[index] & repeat) != 0) {
144
- int repeats = bais.read();
145
- for (int i = 1; i <= repeats; i++) {
146
- flags[index + i] = flags[index];
147
- }
148
- index += repeats;
149
- }
150
- }
151
- } catch (ArrayIndexOutOfBoundsException e) {
152
- System.out.println("error: array index out of bounds");
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
  }