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.
Files changed (129) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +2 -0
  3. data/.mvn/extensions.xml +1 -1
  4. data/.mvn/wrapper/maven-wrapper.properties +1 -1
  5. data/CHANGELOG.md +19 -1
  6. data/COPYING.md +1 -1
  7. data/README.md +2 -2
  8. data/Rakefile +2 -15
  9. data/docs/_config.yml +8 -0
  10. data/docs/_includes/head.html +7 -6
  11. data/docs/_includes/header.html +6 -6
  12. data/docs/_includes/icon-github.svg +3 -1
  13. data/docs/_includes/icon-twitter.svg +3 -1
  14. data/docs/_includes/navigation.html +24 -0
  15. data/docs/_sass/_base.scss +79 -79
  16. data/docs/_sass/_layout.scss +137 -137
  17. data/docs/_sass/_syntax-highlighting.scss +64 -64
  18. data/docs/index.html +18 -18
  19. data/examples/README.md +1 -1
  20. data/examples/data/bot1.svg +1 -1
  21. data/examples/data/lion.svg +156 -156
  22. data/examples/data/ruby.svg +1 -1
  23. data/examples/jruby_merge.rb +1 -1
  24. data/examples/{f_agent.rb → library/f_agent/f_agent.rb} +0 -0
  25. data/examples/{font_agent.rb → library/font_agent/font_agent.rb} +2 -1
  26. data/examples/text_on_geomerative_path.rb +3 -2
  27. data/examples/typo_deform.rb +2 -2
  28. data/examples/typo_extra_bright.rb +1 -1
  29. data/geomerative.gemspec +3 -6
  30. data/lib/geomerative/version.rb +1 -1
  31. data/lib/geomerative.jar +0 -0
  32. data/lib/geomerative.rb +10 -10
  33. data/mvnw +234 -0
  34. data/mvnw.cmd +145 -0
  35. data/pom.rb +14 -16
  36. data/pom.xml +13 -19
  37. data/src/geomerative/FastRClip.java +2050 -2334
  38. data/src/geomerative/RClip.java +2237 -2539
  39. data/src/geomerative/RClosest.java +33 -31
  40. data/src/geomerative/RCommand.java +1750 -1758
  41. data/src/geomerative/RContour.java +290 -292
  42. data/src/geomerative/RFont.java +277 -246
  43. data/src/geomerative/RG.java +722 -727
  44. data/src/geomerative/RGeomElem.java +967 -962
  45. data/src/geomerative/RGroup.java +508 -467
  46. data/src/geomerative/RMatrix.java +304 -289
  47. data/src/geomerative/RMesh.java +241 -229
  48. data/src/geomerative/RPath.java +924 -926
  49. data/src/geomerative/RPoint.java +391 -391
  50. data/src/geomerative/RPolygon.java +1017 -1013
  51. data/src/geomerative/RRectangle.java +43 -52
  52. data/src/geomerative/RSVG.java +480 -516
  53. data/src/geomerative/RShape.java +1767 -1777
  54. data/src/geomerative/RStrip.java +173 -176
  55. data/src/geomerative/RStyle.java +197 -194
  56. data/src/module-info.java +4 -0
  57. data/src/org/apache/batik/svggen/font/Font.java +141 -142
  58. data/src/org/apache/batik/svggen/font/Glyph.java +102 -71
  59. data/src/org/apache/batik/svggen/font/Point.java +12 -12
  60. data/src/org/apache/batik/svggen/font/RandomAccessFileEmulator.java +14 -12
  61. data/src/org/apache/batik/svggen/font/table/ClassDef.java +12 -12
  62. data/src/org/apache/batik/svggen/font/table/ClassDefFormat1.java +27 -24
  63. data/src/org/apache/batik/svggen/font/table/ClassDefFormat2.java +20 -17
  64. data/src/org/apache/batik/svggen/font/table/CmapFormat.java +43 -43
  65. data/src/org/apache/batik/svggen/font/table/CmapFormat0.java +33 -26
  66. data/src/org/apache/batik/svggen/font/table/CmapFormat2.java +25 -20
  67. data/src/org/apache/batik/svggen/font/table/CmapFormat4.java +106 -96
  68. data/src/org/apache/batik/svggen/font/table/CmapFormat6.java +36 -32
  69. data/src/org/apache/batik/svggen/font/table/CmapIndexEntry.java +69 -49
  70. data/src/org/apache/batik/svggen/font/table/CmapTable.java +50 -50
  71. data/src/org/apache/batik/svggen/font/table/Coverage.java +19 -19
  72. data/src/org/apache/batik/svggen/font/table/CoverageFormat1.java +30 -27
  73. data/src/org/apache/batik/svggen/font/table/CoverageFormat2.java +26 -24
  74. data/src/org/apache/batik/svggen/font/table/CvtTable.java +16 -16
  75. data/src/org/apache/batik/svggen/font/table/Device.java +32 -32
  76. data/src/org/apache/batik/svggen/font/table/DirectoryEntry.java +39 -39
  77. data/src/org/apache/batik/svggen/font/table/Feature.java +26 -23
  78. data/src/org/apache/batik/svggen/font/table/FeatureList.java +37 -35
  79. data/src/org/apache/batik/svggen/font/table/FeatureRecord.java +22 -22
  80. data/src/org/apache/batik/svggen/font/table/FeatureTags.java +4 -3
  81. data/src/org/apache/batik/svggen/font/table/FpgmTable.java +9 -9
  82. data/src/org/apache/batik/svggen/font/table/GlyfCompositeComp.java +134 -132
  83. data/src/org/apache/batik/svggen/font/table/GlyfCompositeDescript.java +123 -122
  84. data/src/org/apache/batik/svggen/font/table/GlyfDescript.java +44 -44
  85. data/src/org/apache/batik/svggen/font/table/GlyfSimpleDescript.java +110 -109
  86. data/src/org/apache/batik/svggen/font/table/GlyfTable.java +46 -46
  87. data/src/org/apache/batik/svggen/font/table/GlyphDescription.java +25 -13
  88. data/src/org/apache/batik/svggen/font/table/GposTable.java +26 -23
  89. data/src/org/apache/batik/svggen/font/table/GsubTable.java +85 -82
  90. data/src/org/apache/batik/svggen/font/table/HeadTable.java +131 -131
  91. data/src/org/apache/batik/svggen/font/table/HheaTable.java +80 -80
  92. data/src/org/apache/batik/svggen/font/table/HmtxTable.java +50 -49
  93. data/src/org/apache/batik/svggen/font/table/KernSubtable.java +29 -27
  94. data/src/org/apache/batik/svggen/font/table/KernSubtableFormat0.java +35 -32
  95. data/src/org/apache/batik/svggen/font/table/KernSubtableFormat2.java +28 -26
  96. data/src/org/apache/batik/svggen/font/table/KernTable.java +36 -31
  97. data/src/org/apache/batik/svggen/font/table/KerningPair.java +27 -23
  98. data/src/org/apache/batik/svggen/font/table/LangSys.java +28 -26
  99. data/src/org/apache/batik/svggen/font/table/LangSysRecord.java +22 -22
  100. data/src/org/apache/batik/svggen/font/table/Ligature.java +24 -24
  101. data/src/org/apache/batik/svggen/font/table/LigatureSet.java +24 -24
  102. data/src/org/apache/batik/svggen/font/table/LigatureSubst.java +9 -9
  103. data/src/org/apache/batik/svggen/font/table/LigatureSubstFormat1.java +30 -30
  104. data/src/org/apache/batik/svggen/font/table/LocaTable.java +37 -37
  105. data/src/org/apache/batik/svggen/font/table/Lookup.java +41 -40
  106. data/src/org/apache/batik/svggen/font/table/LookupList.java +34 -34
  107. data/src/org/apache/batik/svggen/font/table/LookupSubtableFactory.java +7 -5
  108. data/src/org/apache/batik/svggen/font/table/MaxpTable.java +96 -96
  109. data/src/org/apache/batik/svggen/font/table/NameRecord.java +64 -65
  110. data/src/org/apache/batik/svggen/font/table/NameTable.java +33 -33
  111. data/src/org/apache/batik/svggen/font/table/Os2Table.java +196 -196
  112. data/src/org/apache/batik/svggen/font/table/Panose.java +14 -12
  113. data/src/org/apache/batik/svggen/font/table/PostTable.java +338 -338
  114. data/src/org/apache/batik/svggen/font/table/PrepTable.java +9 -9
  115. data/src/org/apache/batik/svggen/font/table/Program.java +15 -15
  116. data/src/org/apache/batik/svggen/font/table/RangeRecord.java +26 -25
  117. data/src/org/apache/batik/svggen/font/table/Script.java +38 -38
  118. data/src/org/apache/batik/svggen/font/table/ScriptList.java +42 -42
  119. data/src/org/apache/batik/svggen/font/table/ScriptRecord.java +22 -22
  120. data/src/org/apache/batik/svggen/font/table/ScriptTags.java +2 -1
  121. data/src/org/apache/batik/svggen/font/table/SingleSubst.java +15 -16
  122. data/src/org/apache/batik/svggen/font/table/SingleSubstFormat1.java +33 -33
  123. data/src/org/apache/batik/svggen/font/table/SingleSubstFormat2.java +32 -32
  124. data/src/org/apache/batik/svggen/font/table/Table.java +171 -170
  125. data/src/org/apache/batik/svggen/font/table/TableDirectory.java +55 -55
  126. data/src/org/apache/batik/svggen/font/table/TableFactory.java +92 -93
  127. metadata +18 -19
  128. data/.travis.yml +0 -10
  129. 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. 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
  }