geomerative 0.4.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.
- 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 +25 -0
- data/COPYING.md +1 -1
- data/README.md +4 -2
- data/Rakefile +2 -15
- data/docs/.gitignore +6 -0
- data/docs/_config.yml +30 -0
- data/docs/_includes/footer.html +38 -0
- data/docs/_includes/head.html +16 -0
- data/docs/_includes/header.html +27 -0
- data/docs/_includes/icon-github.html +1 -0
- data/docs/_includes/icon-github.svg +3 -0
- data/docs/_includes/icon-twitter.html +1 -0
- data/docs/_includes/icon-twitter.svg +3 -0
- data/docs/_includes/navigation.html +24 -0
- data/docs/_layouts/default.html +20 -0
- data/docs/_layouts/page.html +14 -0
- data/docs/_layouts/post.html +15 -0
- data/docs/_posts/2015-11-21-getting_started.md +67 -0
- data/docs/_posts/2015-11-25-bubbles.md +111 -0
- data/docs/_posts/2015-11-26-extra_bright.md +103 -0
- data/docs/_posts/2015-11-26-text_merge.md +114 -0
- data/docs/_posts/2016-07-06-dymo.md +99 -0
- data/docs/_sass/_base.scss +206 -0
- data/docs/_sass/_layout.scss +242 -0
- data/docs/_sass/_syntax-highlighting.scss +71 -0
- data/docs/about.md +12 -0
- data/docs/assets/bright.png +0 -0
- data/docs/assets/bubbles.png +0 -0
- data/docs/assets/design.png +0 -0
- data/docs/assets/dymo.png +0 -0
- data/docs/assets/favicon.ico +0 -0
- data/docs/assets/fred.png +0 -0
- data/docs/assets/merge.png +0 -0
- data/docs/css/main.scss +38 -0
- data/docs/favicon.ico +0 -0
- data/docs/feed.xml +30 -0
- data/docs/index.html +38 -0
- 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/hello_svg_to_pdf.rb +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 -7
- data/lib/geomerative.rb +5 -4
- data/lib/geomerative/version.rb +1 -1
- data/mvnw +234 -0
- data/mvnw.cmd +145 -0
- data/pom.rb +19 -18
- data/pom.xml +14 -13
- 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/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 +47 -30
- data/.travis.yml +0 -14
|
@@ -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
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
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
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
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
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
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
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
88
|
+
@Override
|
|
89
|
+
public int getLast() {
|
|
90
|
+
return last;
|
|
91
|
+
}
|
|
83
92
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
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
|
-
|
|
103
|
-
|
|
110
|
+
*/
|
|
111
|
+
if ((charCode < 0) || (charCode >= 0xFFFE)) {
|
|
112
|
+
return 0;
|
|
113
|
+
}
|
|
104
114
|
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
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
|
-
|
|
121
|
-
|
|
125
|
+
} else {
|
|
126
|
+
break;
|
|
127
|
+
}
|
|
122
128
|
}
|
|
123
|
-
|
|
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
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
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
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
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
|
-
|
|
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
|
-
|
|
30
|
-
|
|
31
|
-
|
|
29
|
+
private final int platformId;
|
|
30
|
+
private final int encodingId;
|
|
31
|
+
private final int offset;
|
|
32
32
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
33
|
+
protected CmapIndexEntry(RandomAccessFileEmulator raf) throws IOException {
|
|
34
|
+
platformId = raf.readUnsignedShort();
|
|
35
|
+
encodingId = raf.readUnsignedShort();
|
|
36
|
+
offset = raf.readInt();
|
|
37
|
+
}
|
|
38
38
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
39
|
+
public int getEncodingId() {
|
|
40
|
+
return encodingId;
|
|
41
|
+
}
|
|
42
42
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
43
|
+
public int getOffset() {
|
|
44
|
+
return offset;
|
|
45
|
+
}
|
|
46
46
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
47
|
+
public int getPlatformId() {
|
|
48
|
+
return platformId;
|
|
49
|
+
}
|
|
50
50
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
51
|
+
@Override
|
|
52
|
+
public String toString() {
|
|
53
|
+
String platform;
|
|
54
|
+
String encoding = "";
|
|
55
55
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
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
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
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
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
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
|
-
|
|
68
|
-
|
|
69
|
-
|
|
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
|
-
|
|
73
|
-
|
|
74
|
-
|
|
67
|
+
@Override
|
|
68
|
+
public int getType() {
|
|
69
|
+
return CMAP;
|
|
70
|
+
}
|
|
75
71
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
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
|
-
|
|
82
|
-
|
|
83
|
-
|
|
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
|
}
|