geomerative 1.1.0-java → 2.0.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 (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
@@ -18,7 +18,7 @@
18
18
  package org.apache.batik.svggen.font.table;
19
19
 
20
20
  import java.io.IOException;
21
- import org.apache.batik.svggen.font.*;
21
+ import org.apache.batik.svggen.font.RandomAccessFileEmulator;
22
22
 
23
23
  /**
24
24
  * @version $Id: CmapFormat4.java,v 1.6 2004/09/01 09:35:23 deweese Exp $
@@ -26,65 +26,74 @@ import org.apache.batik.svggen.font.*;
26
26
  */
27
27
  public class CmapFormat4 extends CmapFormat {
28
28
 
29
- public int language;
30
- private final int segCountX2;
31
- private final int searchRange;
32
- private final int entrySelector;
33
- private final int rangeShift;
34
- private final int[] endCode;
35
- private final int[] startCode;
36
- private final int[] idDelta;
37
- private final int[] idRangeOffset;
38
- private final int[] glyphIdArray;
39
- private final int segCount;
40
- private int first, last;
29
+ public int language;
30
+ private final int segCountX2;
31
+ private final int searchRange;
32
+ private final int entrySelector;
33
+ private final int rangeShift;
34
+ private final int[] endCode;
35
+ private final int[] startCode;
36
+ private final int[] idDelta;
37
+ private final int[] idRangeOffset;
38
+ private final int[] glyphIdArray;
39
+ private final int segCount;
40
+ private int first, last;
41
41
 
42
- protected CmapFormat4(RandomAccessFileEmulator raf) throws IOException {
43
- super(raf);
44
- format = 4;
45
- segCountX2 = raf.readUnsignedShort();
46
- segCount = segCountX2 / 2;
47
- endCode = new int[segCount];
48
- startCode = new int[segCount];
49
- idDelta = new int[segCount];
50
- idRangeOffset = new int[segCount];
51
- searchRange = raf.readUnsignedShort();
52
- entrySelector = raf.readUnsignedShort();
53
- rangeShift = raf.readUnsignedShort();
54
- last = -1;
55
- for (int i = 0; i < segCount; i++) {
56
- endCode[i] = raf.readUnsignedShort();
57
- if (endCode[i] > last) last = endCode[i];
58
- }
59
- raf.readUnsignedShort(); // reservePad
60
- for (int i = 0; i < segCount; i++) {
61
- startCode[i] = raf.readUnsignedShort();
62
- if ((i==0 ) || (startCode[i] < first)) first = startCode[i];
63
- }
64
- for (int i = 0; i < segCount; i++) {
65
- idDelta[i] = raf.readUnsignedShort();
66
- }
67
- for (int i = 0; i < segCount; i++) {
68
- idRangeOffset[i] = raf.readUnsignedShort();
69
- }
42
+ protected CmapFormat4(RandomAccessFileEmulator raf) throws IOException {
43
+ super(raf);
44
+ format = 4;
45
+ segCountX2 = raf.readUnsignedShort();
46
+ segCount = segCountX2 / 2;
47
+ endCode = new int[segCount];
48
+ startCode = new int[segCount];
49
+ idDelta = new int[segCount];
50
+ idRangeOffset = new int[segCount];
51
+ searchRange = raf.readUnsignedShort();
52
+ entrySelector = raf.readUnsignedShort();
53
+ rangeShift = raf.readUnsignedShort();
54
+ last = -1;
55
+ for (int i = 0; i < segCount; i++) {
56
+ endCode[i] = raf.readUnsignedShort();
57
+ if (endCode[i] > last) {
58
+ last = endCode[i];
59
+ }
60
+ }
61
+ raf.readUnsignedShort(); // reservePad
62
+ for (int i = 0; i < segCount; i++) {
63
+ startCode[i] = raf.readUnsignedShort();
64
+ if ((i == 0) || (startCode[i] < first)) {
65
+ first = startCode[i];
66
+ }
67
+ }
68
+ for (int i = 0; i < segCount; i++) {
69
+ idDelta[i] = raf.readUnsignedShort();
70
+ }
71
+ for (int i = 0; i < segCount; i++) {
72
+ idRangeOffset[i] = raf.readUnsignedShort();
73
+ }
70
74
 
71
- // Whatever remains of this header belongs in glyphIdArray
72
- int count = (length - 16 - (segCount*8)) / 2;
73
- glyphIdArray = new int[count];
74
- for (int i = 0; i < count; i++) {
75
- glyphIdArray[i] = raf.readUnsignedShort();
76
- }
75
+ // Whatever remains of this header belongs in glyphIdArray
76
+ int count = (length - 16 - (segCount * 8)) / 2;
77
+ glyphIdArray = new int[count];
78
+ for (int i = 0; i < count; i++) {
79
+ glyphIdArray[i] = raf.readUnsignedShort();
77
80
  }
81
+ }
82
+
83
+ @Override
84
+ public int getFirst() {
85
+ return first;
86
+ }
78
87
 
79
- @Override
80
- public int getFirst() { return first; }
81
- @Override
82
- public int getLast() { return last; }
88
+ @Override
89
+ public int getLast() {
90
+ return last;
91
+ }
83
92
 
84
- @Override
85
- public int mapCharCode(int charCode) {
86
- try {
87
- /*
93
+ @Override
94
+ public int mapCharCode(int charCode) {
95
+ try {
96
+ /*
88
97
  Quoting :
89
98
  http://developer.apple.com/fonts/TTRefMan/RM06/Chap6cmap.html#Surrogates
90
99
 
@@ -98,50 +107,51 @@ public class CmapFormat4 extends CmapFormat {
98
107
 
99
108
  My comment : Isn't there a typo here ? Shouldn't we
100
109
  rather read 65,534 ?
101
- */
102
- if ((charCode < 0) || (charCode >= 0xFFFE))
103
- return 0;
110
+ */
111
+ if ((charCode < 0) || (charCode >= 0xFFFE)) {
112
+ return 0;
113
+ }
104
114
 
105
- for (int i = 0; i < segCount; i++) {
106
- if (endCode[i] >= charCode) {
107
- if (startCode[i] <= charCode) {
108
- if (idRangeOffset[i] > 0) {
109
- return glyphIdArray[idRangeOffset[i]/2 +
110
- (charCode - startCode[i]) -
111
- (segCount - i)];
112
- } else {
113
- return (idDelta[i] + charCode) % 65536;
114
- }
115
- } else {
116
- break;
117
- }
118
- }
115
+ for (int i = 0; i < segCount; i++) {
116
+ if (endCode[i] >= charCode) {
117
+ if (startCode[i] <= charCode) {
118
+ if (idRangeOffset[i] > 0) {
119
+ return glyphIdArray[idRangeOffset[i] / 2
120
+ + (charCode - startCode[i])
121
+ - (segCount - i)];
122
+ } else {
123
+ return (idDelta[i] + charCode) % 65536;
119
124
  }
120
- } catch (ArrayIndexOutOfBoundsException e) {
121
- System.err.println("error: Array out of bounds - " + e.getMessage());
125
+ } else {
126
+ break;
127
+ }
122
128
  }
123
- return 0;
129
+ }
130
+ } catch (ArrayIndexOutOfBoundsException e) {
131
+ System.err.println("error: Array out of bounds - " + e.getMessage());
124
132
  }
133
+ return 0;
134
+ }
125
135
 
126
- @Override
127
- public String toString() {
128
- return new StringBuilder()
129
- .append(super.toString())
130
- .append(", segCountX2: ")
131
- .append(segCountX2)
132
- .append(", searchRange: ")
133
- .append(searchRange)
134
- .append(", entrySelector: ")
135
- .append(entrySelector)
136
- .append(", rangeShift: ")
137
- .append(rangeShift)
138
- .append(", endCode: ")
139
- .append(endCode)
140
- .append(", startCode: ")
141
- .append(endCode)
142
- .append(", idDelta: ")
143
- .append(idDelta)
144
- .append(", idRangeOffset: ")
145
- .append(idRangeOffset).toString();
146
- }
136
+ @Override
137
+ public String toString() {
138
+ return new StringBuilder()
139
+ .append(super.toString())
140
+ .append(", segCountX2: ")
141
+ .append(segCountX2)
142
+ .append(", searchRange: ")
143
+ .append(searchRange)
144
+ .append(", entrySelector: ")
145
+ .append(entrySelector)
146
+ .append(", rangeShift: ")
147
+ .append(rangeShift)
148
+ .append(", endCode: ")
149
+ .append(endCode)
150
+ .append(", startCode: ")
151
+ .append(endCode)
152
+ .append(", idDelta: ")
153
+ .append(idDelta)
154
+ .append(", idRangeOffset: ")
155
+ .append(idRangeOffset).toString();
156
+ }
147
157
  }
@@ -18,7 +18,7 @@
18
18
  package org.apache.batik.svggen.font.table;
19
19
 
20
20
  import java.io.IOException;
21
- import org.apache.batik.svggen.font.*;
21
+ import org.apache.batik.svggen.font.RandomAccessFileEmulator;
22
22
 
23
23
  /**
24
24
  * @version $Id: CmapFormat6.java,v 1.4 2004/09/01 09:35:23 deweese Exp $
@@ -26,35 +26,39 @@ import org.apache.batik.svggen.font.*;
26
26
  */
27
27
  public class CmapFormat6 extends CmapFormat {
28
28
 
29
- private final short cformat;
30
- private short clength;
31
- private short cversion;
32
- private short firstCode;
33
- private short entryCount;
34
- private short[] glyphIdArray;
35
-
36
- protected CmapFormat6(RandomAccessFileEmulator raf) throws IOException {
37
- super(raf);
38
- cformat = 6;
39
- }
40
-
41
- @Override
42
- public int getFirst() { return 0; }
43
-
44
- /**
45
- *
46
- * @return
47
- */
48
- @Override
49
- public int getLast() { return 0; }
50
-
51
- /**
52
- *
53
- * @param charCode
54
- * @return
55
- */
56
- @Override
57
- public int mapCharCode(int charCode) {
58
- return 0;
59
- }
29
+ private final short cformat;
30
+ private short clength;
31
+ private short cversion;
32
+ private short firstCode;
33
+ private short entryCount;
34
+ private short[] glyphIdArray;
35
+
36
+ protected CmapFormat6(RandomAccessFileEmulator raf) throws IOException {
37
+ super(raf);
38
+ cformat = 6;
39
+ }
40
+
41
+ @Override
42
+ public int getFirst() {
43
+ return 0;
44
+ }
45
+
46
+ /**
47
+ *
48
+ * @return
49
+ */
50
+ @Override
51
+ public int getLast() {
52
+ return 0;
53
+ }
54
+
55
+ /**
56
+ *
57
+ * @param charCode
58
+ * @return
59
+ */
60
+ @Override
61
+ public int mapCharCode(int charCode) {
62
+ return 0;
63
+ }
60
64
  }
@@ -18,7 +18,7 @@
18
18
  package org.apache.batik.svggen.font.table;
19
19
 
20
20
  import java.io.IOException;
21
- import org.apache.batik.svggen.font.*;
21
+ import org.apache.batik.svggen.font.RandomAccessFileEmulator;
22
22
 
23
23
  /**
24
24
  * @version $Id: CmapIndexEntry.java,v 1.3 2004/08/18 07:15:20 vhardy Exp $
@@ -26,59 +26,79 @@ import org.apache.batik.svggen.font.*;
26
26
  */
27
27
  public class CmapIndexEntry {
28
28
 
29
- private final int platformId;
30
- private final int encodingId;
31
- private final int offset;
29
+ private final int platformId;
30
+ private final int encodingId;
31
+ private final int offset;
32
32
 
33
- protected CmapIndexEntry(RandomAccessFileEmulator raf) throws IOException {
34
- platformId = raf.readUnsignedShort();
35
- encodingId = raf.readUnsignedShort();
36
- offset = raf.readInt();
37
- }
33
+ protected CmapIndexEntry(RandomAccessFileEmulator raf) throws IOException {
34
+ platformId = raf.readUnsignedShort();
35
+ encodingId = raf.readUnsignedShort();
36
+ offset = raf.readInt();
37
+ }
38
38
 
39
- public int getEncodingId() {
40
- return encodingId;
41
- }
39
+ public int getEncodingId() {
40
+ return encodingId;
41
+ }
42
42
 
43
- public int getOffset() {
44
- return offset;
45
- }
43
+ public int getOffset() {
44
+ return offset;
45
+ }
46
46
 
47
- public int getPlatformId() {
48
- return platformId;
49
- }
47
+ public int getPlatformId() {
48
+ return platformId;
49
+ }
50
50
 
51
- @Override
52
- public String toString() {
53
- String platform;
54
- String encoding = "";
51
+ @Override
52
+ public String toString() {
53
+ String platform;
54
+ String encoding = "";
55
55
 
56
- switch (platformId) {
57
- case 1: platform = " (Macintosh)"; break;
58
- case 3: platform = " (Windows)"; break;
59
- default: platform = "";
60
- }
61
- if (platformId == 3) {
62
- // Windows specific encodings
63
- switch (encodingId) {
64
- case 0: encoding = " (Symbol)"; break;
65
- case 1: encoding = " (Unicode)"; break;
66
- case 2: encoding = " (ShiftJIS)"; break;
67
- case 3: encoding = " (Big5)"; break;
68
- case 4: encoding = " (PRC)"; break;
69
- case 5: encoding = " (Wansung)"; break;
70
- case 6: encoding = " (Johab)"; break;
71
- default: encoding = "";
72
- }
73
- }
74
- return new StringBuffer()
75
- .append( "platform id: " )
76
- .append( platformId )
77
- .append( platform )
78
- .append( ", encoding id: " )
79
- .append( encodingId )
80
- .append( encoding )
81
- .append( ", offset: " )
82
- .append( offset ).toString();
56
+ switch (platformId) {
57
+ case 1:
58
+ platform = " (Macintosh)";
59
+ break;
60
+ case 3:
61
+ platform = " (Windows)";
62
+ break;
63
+ default:
64
+ platform = "";
65
+ }
66
+ if (platformId == 3) {
67
+ // Windows specific encodings
68
+ switch (encodingId) {
69
+ case 0:
70
+ encoding = " (Symbol)";
71
+ break;
72
+ case 1:
73
+ encoding = " (Unicode)";
74
+ break;
75
+ case 2:
76
+ encoding = " (ShiftJIS)";
77
+ break;
78
+ case 3:
79
+ encoding = " (Big5)";
80
+ break;
81
+ case 4:
82
+ encoding = " (PRC)";
83
+ break;
84
+ case 5:
85
+ encoding = " (Wansung)";
86
+ break;
87
+ case 6:
88
+ encoding = " (Johab)";
89
+ break;
90
+ default:
91
+ encoding = "";
92
+ }
83
93
  }
94
+ return new StringBuffer()
95
+ .append("platform id: ")
96
+ .append(platformId)
97
+ .append(platform)
98
+ .append(", encoding id: ")
99
+ .append(encodingId)
100
+ .append(encoding)
101
+ .append(", offset: ")
102
+ .append(offset).toString();
103
+ }
84
104
  }
@@ -18,7 +18,7 @@
18
18
  package org.apache.batik.svggen.font.table;
19
19
 
20
20
  import java.io.IOException;
21
- import org.apache.batik.svggen.font.*;
21
+ import org.apache.batik.svggen.font.RandomAccessFileEmulator;
22
22
 
23
23
  /**
24
24
  * @version $Id: CmapTable.java,v 1.3 2004/08/18 07:15:20 vhardy Exp $
@@ -26,62 +26,62 @@ import org.apache.batik.svggen.font.*;
26
26
  */
27
27
  public class CmapTable implements Table {
28
28
 
29
- private final int version;
30
- private final int numTables;
31
- private final CmapIndexEntry[] entries;
32
- private final CmapFormat[] formats;
33
-
34
- protected CmapTable(DirectoryEntry de, RandomAccessFileEmulator raf) throws IOException {
35
- long fp = de.getOffset();
36
- raf.seek(fp);
37
- version = raf.readUnsignedShort();
38
- numTables = raf.readUnsignedShort();
39
- entries = new CmapIndexEntry[numTables];
40
- formats = new CmapFormat[numTables];
41
-
42
- // Get each of the index entries
43
- for (int i = 0; i < numTables; i++) {
44
- entries[i] = new CmapIndexEntry(raf);
45
- }
46
-
47
- // Get each of the tables
48
- for (int i = 0; i < numTables; i++) {
49
- raf.seek(fp + entries[i].getOffset());
50
- int format = raf.readUnsignedShort();
51
- formats[i] = CmapFormat.create(format, raf);
52
- }
29
+ private final int version;
30
+ private final int numTables;
31
+ private final CmapIndexEntry[] entries;
32
+ private final CmapFormat[] formats;
33
+
34
+ protected CmapTable(DirectoryEntry de, RandomAccessFileEmulator raf) throws IOException {
35
+ long fp = de.getOffset();
36
+ raf.seek(fp);
37
+ version = raf.readUnsignedShort();
38
+ numTables = raf.readUnsignedShort();
39
+ entries = new CmapIndexEntry[numTables];
40
+ formats = new CmapFormat[numTables];
41
+
42
+ // Get each of the index entries
43
+ for (int i = 0; i < numTables; i++) {
44
+ entries[i] = new CmapIndexEntry(raf);
53
45
  }
54
46
 
55
- public CmapFormat getCmapFormat(short platformId, short encodingId) {
56
-
57
- // Find the requested format
58
- for (int i = 0; i < numTables; i++) {
59
- if (entries[i].getPlatformId() == platformId
60
- && entries[i].getEncodingId() == encodingId) {
61
- return formats[i];
62
- }
63
- }
64
- return null;
47
+ // Get each of the tables
48
+ for (int i = 0; i < numTables; i++) {
49
+ raf.seek(fp + entries[i].getOffset());
50
+ int format = raf.readUnsignedShort();
51
+ formats[i] = CmapFormat.create(format, raf);
65
52
  }
53
+ }
54
+
55
+ public CmapFormat getCmapFormat(short platformId, short encodingId) {
66
56
 
67
- @Override
68
- public int getType() {
69
- return cmap;
57
+ // Find the requested format
58
+ for (int i = 0; i < numTables; i++) {
59
+ if (entries[i].getPlatformId() == platformId
60
+ && entries[i].getEncodingId() == encodingId) {
61
+ return formats[i];
62
+ }
70
63
  }
64
+ return null;
65
+ }
71
66
 
72
- @Override
73
- public String toString() {
74
- StringBuffer sb = new StringBuffer().append("cmap\n");
67
+ @Override
68
+ public int getType() {
69
+ return CMAP;
70
+ }
75
71
 
76
- // Get each of the index entries
77
- for (int i = 0; i < numTables; i++) {
78
- sb.append("\t").append(entries[i].toString()).append("\n");
79
- }
72
+ @Override
73
+ public String toString() {
74
+ StringBuffer sb = new StringBuffer().append("cmap\n");
75
+
76
+ // Get each of the index entries
77
+ for (int i = 0; i < numTables; i++) {
78
+ sb.append("\t").append(entries[i].toString()).append("\n");
79
+ }
80
80
 
81
- // Get each of the tables
82
- for (int i = 0; i < numTables; i++) {
83
- sb.append("\t").append(formats[i].toString()).append("\n");
84
- }
85
- return sb.toString();
81
+ // Get each of the tables
82
+ for (int i = 0; i < numTables; i++) {
83
+ sb.append("\t").append(formats[i].toString()).append("\n");
86
84
  }
85
+ return sb.toString();
86
+ }
87
87
  }