geomerative 0.4.3-java → 2.1.0-java
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/.gitignore +2 -0
- data/.mvn/extensions.xml +1 -1
- data/.mvn/wrapper/maven-wrapper.properties +1 -1
- data/CHANGELOG.md +19 -1
- data/COPYING.md +1 -1
- data/README.md +2 -2
- data/Rakefile +2 -15
- data/docs/_config.yml +8 -0
- data/docs/_includes/head.html +7 -6
- data/docs/_includes/header.html +6 -6
- data/docs/_includes/icon-github.svg +3 -1
- data/docs/_includes/icon-twitter.svg +3 -1
- data/docs/_includes/navigation.html +24 -0
- data/docs/_sass/_base.scss +79 -79
- data/docs/_sass/_layout.scss +137 -137
- data/docs/_sass/_syntax-highlighting.scss +64 -64
- data/docs/index.html +18 -18
- data/examples/README.md +1 -1
- data/examples/data/bot1.svg +1 -1
- data/examples/data/lion.svg +156 -156
- data/examples/data/ruby.svg +1 -1
- data/examples/jruby_merge.rb +1 -1
- data/examples/{f_agent.rb → library/f_agent/f_agent.rb} +0 -0
- data/examples/{font_agent.rb → library/font_agent/font_agent.rb} +2 -1
- data/examples/text_on_geomerative_path.rb +3 -2
- data/examples/typo_deform.rb +2 -2
- data/examples/typo_extra_bright.rb +1 -1
- data/geomerative.gemspec +3 -6
- data/lib/geomerative/version.rb +1 -1
- data/lib/geomerative.jar +0 -0
- data/lib/geomerative.rb +10 -10
- data/mvnw +234 -0
- data/mvnw.cmd +145 -0
- data/pom.rb +14 -16
- data/pom.xml +13 -19
- data/src/geomerative/FastRClip.java +2050 -2334
- data/src/geomerative/RClip.java +2237 -2539
- data/src/geomerative/RClosest.java +33 -31
- data/src/geomerative/RCommand.java +1750 -1758
- data/src/geomerative/RContour.java +290 -292
- data/src/geomerative/RFont.java +277 -246
- data/src/geomerative/RG.java +722 -727
- data/src/geomerative/RGeomElem.java +967 -962
- data/src/geomerative/RGroup.java +508 -467
- data/src/geomerative/RMatrix.java +304 -289
- data/src/geomerative/RMesh.java +241 -229
- data/src/geomerative/RPath.java +924 -926
- data/src/geomerative/RPoint.java +391 -391
- data/src/geomerative/RPolygon.java +1017 -1013
- data/src/geomerative/RRectangle.java +43 -52
- data/src/geomerative/RSVG.java +480 -516
- data/src/geomerative/RShape.java +1767 -1777
- data/src/geomerative/RStrip.java +173 -176
- data/src/geomerative/RStyle.java +197 -194
- data/src/module-info.java +4 -0
- data/src/org/apache/batik/svggen/font/Font.java +141 -142
- data/src/org/apache/batik/svggen/font/Glyph.java +102 -71
- data/src/org/apache/batik/svggen/font/Point.java +12 -12
- data/src/org/apache/batik/svggen/font/RandomAccessFileEmulator.java +14 -12
- data/src/org/apache/batik/svggen/font/table/ClassDef.java +12 -12
- data/src/org/apache/batik/svggen/font/table/ClassDefFormat1.java +27 -24
- data/src/org/apache/batik/svggen/font/table/ClassDefFormat2.java +20 -17
- data/src/org/apache/batik/svggen/font/table/CmapFormat.java +43 -43
- data/src/org/apache/batik/svggen/font/table/CmapFormat0.java +33 -26
- data/src/org/apache/batik/svggen/font/table/CmapFormat2.java +25 -20
- data/src/org/apache/batik/svggen/font/table/CmapFormat4.java +106 -96
- data/src/org/apache/batik/svggen/font/table/CmapFormat6.java +36 -32
- data/src/org/apache/batik/svggen/font/table/CmapIndexEntry.java +69 -49
- data/src/org/apache/batik/svggen/font/table/CmapTable.java +50 -50
- data/src/org/apache/batik/svggen/font/table/Coverage.java +19 -19
- data/src/org/apache/batik/svggen/font/table/CoverageFormat1.java +30 -27
- data/src/org/apache/batik/svggen/font/table/CoverageFormat2.java +26 -24
- data/src/org/apache/batik/svggen/font/table/CvtTable.java +16 -16
- data/src/org/apache/batik/svggen/font/table/Device.java +32 -32
- data/src/org/apache/batik/svggen/font/table/DirectoryEntry.java +39 -39
- data/src/org/apache/batik/svggen/font/table/Feature.java +26 -23
- data/src/org/apache/batik/svggen/font/table/FeatureList.java +37 -35
- data/src/org/apache/batik/svggen/font/table/FeatureRecord.java +22 -22
- data/src/org/apache/batik/svggen/font/table/FeatureTags.java +4 -3
- data/src/org/apache/batik/svggen/font/table/FpgmTable.java +9 -9
- data/src/org/apache/batik/svggen/font/table/GlyfCompositeComp.java +134 -132
- data/src/org/apache/batik/svggen/font/table/GlyfCompositeDescript.java +123 -122
- data/src/org/apache/batik/svggen/font/table/GlyfDescript.java +44 -44
- data/src/org/apache/batik/svggen/font/table/GlyfSimpleDescript.java +110 -109
- data/src/org/apache/batik/svggen/font/table/GlyfTable.java +46 -46
- data/src/org/apache/batik/svggen/font/table/GlyphDescription.java +25 -13
- data/src/org/apache/batik/svggen/font/table/GposTable.java +26 -23
- data/src/org/apache/batik/svggen/font/table/GsubTable.java +85 -82
- data/src/org/apache/batik/svggen/font/table/HeadTable.java +131 -131
- data/src/org/apache/batik/svggen/font/table/HheaTable.java +80 -80
- data/src/org/apache/batik/svggen/font/table/HmtxTable.java +50 -49
- data/src/org/apache/batik/svggen/font/table/KernSubtable.java +29 -27
- data/src/org/apache/batik/svggen/font/table/KernSubtableFormat0.java +35 -32
- data/src/org/apache/batik/svggen/font/table/KernSubtableFormat2.java +28 -26
- data/src/org/apache/batik/svggen/font/table/KernTable.java +36 -31
- data/src/org/apache/batik/svggen/font/table/KerningPair.java +27 -23
- data/src/org/apache/batik/svggen/font/table/LangSys.java +28 -26
- data/src/org/apache/batik/svggen/font/table/LangSysRecord.java +22 -22
- data/src/org/apache/batik/svggen/font/table/Ligature.java +24 -24
- data/src/org/apache/batik/svggen/font/table/LigatureSet.java +24 -24
- data/src/org/apache/batik/svggen/font/table/LigatureSubst.java +9 -9
- data/src/org/apache/batik/svggen/font/table/LigatureSubstFormat1.java +30 -30
- data/src/org/apache/batik/svggen/font/table/LocaTable.java +37 -37
- data/src/org/apache/batik/svggen/font/table/Lookup.java +41 -40
- data/src/org/apache/batik/svggen/font/table/LookupList.java +34 -34
- data/src/org/apache/batik/svggen/font/table/LookupSubtableFactory.java +7 -5
- data/src/org/apache/batik/svggen/font/table/MaxpTable.java +96 -96
- data/src/org/apache/batik/svggen/font/table/NameRecord.java +64 -65
- data/src/org/apache/batik/svggen/font/table/NameTable.java +33 -33
- data/src/org/apache/batik/svggen/font/table/Os2Table.java +196 -196
- data/src/org/apache/batik/svggen/font/table/Panose.java +14 -12
- data/src/org/apache/batik/svggen/font/table/PostTable.java +338 -338
- data/src/org/apache/batik/svggen/font/table/PrepTable.java +9 -9
- data/src/org/apache/batik/svggen/font/table/Program.java +15 -15
- data/src/org/apache/batik/svggen/font/table/RangeRecord.java +26 -25
- data/src/org/apache/batik/svggen/font/table/Script.java +38 -38
- data/src/org/apache/batik/svggen/font/table/ScriptList.java +42 -42
- data/src/org/apache/batik/svggen/font/table/ScriptRecord.java +22 -22
- data/src/org/apache/batik/svggen/font/table/ScriptTags.java +2 -1
- data/src/org/apache/batik/svggen/font/table/SingleSubst.java +15 -16
- data/src/org/apache/batik/svggen/font/table/SingleSubstFormat1.java +33 -33
- data/src/org/apache/batik/svggen/font/table/SingleSubstFormat2.java +32 -32
- data/src/org/apache/batik/svggen/font/table/Table.java +171 -170
- data/src/org/apache/batik/svggen/font/table/TableDirectory.java +55 -55
- data/src/org/apache/batik/svggen/font/table/TableFactory.java +92 -93
- metadata +18 -19
- data/.travis.yml +0 -10
- data/calculate_torsional_angle.rb +0 -17
|
@@ -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: PrepTable.java,v 1.3 2004/08/18 07:15:22 vhardy Exp $
|
|
@@ -26,13 +26,13 @@ import org.apache.batik.svggen.font.*;
|
|
|
26
26
|
*/
|
|
27
27
|
public class PrepTable extends Program implements Table {
|
|
28
28
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
29
|
+
public PrepTable(DirectoryEntry de, RandomAccessFileEmulator raf) throws IOException {
|
|
30
|
+
raf.seek(de.getOffset());
|
|
31
|
+
readInstructions(raf, de.getLength());
|
|
32
|
+
}
|
|
33
33
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
34
|
+
@Override
|
|
35
|
+
public int getType() {
|
|
36
|
+
return PREP;
|
|
37
|
+
}
|
|
38
38
|
}
|
|
@@ -19,7 +19,7 @@ package org.apache.batik.svggen.font.table;
|
|
|
19
19
|
|
|
20
20
|
import java.io.ByteArrayInputStream;
|
|
21
21
|
import java.io.IOException;
|
|
22
|
-
import org.apache.batik.svggen.font
|
|
22
|
+
import org.apache.batik.svggen.font.RandomAccessFileEmulator;
|
|
23
23
|
|
|
24
24
|
/**
|
|
25
25
|
* @version $Id: Program.java,v 1.4 2004/08/18 07:15:22 vhardy Exp $
|
|
@@ -27,23 +27,23 @@ import org.apache.batik.svggen.font.*;
|
|
|
27
27
|
*/
|
|
28
28
|
public abstract class Program {
|
|
29
29
|
|
|
30
|
-
|
|
30
|
+
private short[] instructions;
|
|
31
31
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
32
|
+
public short[] getInstructions() {
|
|
33
|
+
return instructions;
|
|
34
|
+
}
|
|
35
35
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
}
|
|
36
|
+
protected void readInstructions(RandomAccessFileEmulator raf, int count) throws IOException {
|
|
37
|
+
instructions = new short[count];
|
|
38
|
+
for (int i = 0; i < count; i++) {
|
|
39
|
+
instructions[i] = (short) raf.readUnsignedByte();
|
|
41
40
|
}
|
|
41
|
+
}
|
|
42
42
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
}
|
|
43
|
+
protected void readInstructions(ByteArrayInputStream bais, int count) {
|
|
44
|
+
instructions = new short[count];
|
|
45
|
+
for (int i = 0; i < count; i++) {
|
|
46
|
+
instructions[i] = (short) bais.read();
|
|
48
47
|
}
|
|
48
|
+
}
|
|
49
49
|
}
|
|
@@ -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
|
* Coverage Index (GlyphID) = StartCoverageIndex + GlyphID - Start GlyphID
|
|
@@ -28,30 +28,31 @@ import org.apache.batik.svggen.font.*;
|
|
|
28
28
|
*/
|
|
29
29
|
public class RangeRecord {
|
|
30
30
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
31
|
+
private final int start;
|
|
32
|
+
private final int end;
|
|
33
|
+
private final int startCoverageIndex;
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Creates new RangeRecord
|
|
37
|
+
*
|
|
38
|
+
* @param raf
|
|
39
|
+
* @throws java.io.IOException
|
|
40
|
+
*/
|
|
41
|
+
public RangeRecord(RandomAccessFileEmulator raf) throws IOException {
|
|
42
|
+
start = raf.readUnsignedShort();
|
|
43
|
+
end = raf.readUnsignedShort();
|
|
44
|
+
startCoverageIndex = raf.readUnsignedShort();
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
public boolean isInRange(int glyphId) {
|
|
48
|
+
return (start <= glyphId && glyphId <= end);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
public int getCoverageIndex(int glyphId) {
|
|
52
|
+
if (isInRange(glyphId)) {
|
|
53
|
+
return startCoverageIndex + glyphId - start;
|
|
54
54
|
}
|
|
55
|
+
return -1;
|
|
56
|
+
}
|
|
55
57
|
|
|
56
58
|
}
|
|
57
|
-
|
|
@@ -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
|
*
|
|
@@ -27,46 +27,46 @@ import org.apache.batik.svggen.font.*;
|
|
|
27
27
|
*/
|
|
28
28
|
public class Script {
|
|
29
29
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
30
|
+
private final int defaultLangSysOffset;
|
|
31
|
+
private final int langSysCount;
|
|
32
|
+
private LangSysRecord[] langSysRecords;
|
|
33
|
+
private LangSys defaultLangSys;
|
|
34
|
+
private LangSys[] langSys;
|
|
35
35
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
// Read the LangSys tables
|
|
55
|
-
if (langSysCount > 0) {
|
|
56
|
-
langSys = new LangSys[langSysCount];
|
|
57
|
-
for (int i = 0; i < langSysCount; i++) {
|
|
58
|
-
raf.seek(offset + langSysRecords[i].getOffset());
|
|
59
|
-
langSys[i] = new LangSys(raf);
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
if (defaultLangSysOffset > 0) {
|
|
63
|
-
raf.seek(offset + defaultLangSysOffset);
|
|
64
|
-
defaultLangSys = new LangSys(raf);
|
|
65
|
-
}
|
|
36
|
+
/**
|
|
37
|
+
* Creates new ScriptTable
|
|
38
|
+
*
|
|
39
|
+
* @param raf
|
|
40
|
+
* @param offset
|
|
41
|
+
* @throws java.io.IOException
|
|
42
|
+
*/
|
|
43
|
+
protected Script(RandomAccessFileEmulator raf, int offset) throws IOException {
|
|
44
|
+
raf.seek(offset);
|
|
45
|
+
defaultLangSysOffset = raf.readUnsignedShort();
|
|
46
|
+
langSysCount = raf.readUnsignedShort();
|
|
47
|
+
if (langSysCount > 0) {
|
|
48
|
+
langSysRecords = new LangSysRecord[langSysCount];
|
|
49
|
+
for (int i = 0; i < langSysCount; i++) {
|
|
50
|
+
langSysRecords[i] = new LangSysRecord(raf);
|
|
51
|
+
}
|
|
66
52
|
}
|
|
67
53
|
|
|
68
|
-
|
|
69
|
-
|
|
54
|
+
// Read the LangSys tables
|
|
55
|
+
if (langSysCount > 0) {
|
|
56
|
+
langSys = new LangSys[langSysCount];
|
|
57
|
+
for (int i = 0; i < langSysCount; i++) {
|
|
58
|
+
raf.seek(offset + langSysRecords[i].getOffset());
|
|
59
|
+
langSys[i] = new LangSys(raf);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
if (defaultLangSysOffset > 0) {
|
|
63
|
+
raf.seek(offset + defaultLangSysOffset);
|
|
64
|
+
defaultLangSys = new LangSys(raf);
|
|
70
65
|
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
public LangSys getDefaultLangSys() {
|
|
69
|
+
return defaultLangSys;
|
|
70
|
+
}
|
|
71
71
|
|
|
72
72
|
}
|
|
@@ -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
|
*
|
|
@@ -27,52 +27,52 @@ import org.apache.batik.svggen.font.*;
|
|
|
27
27
|
*/
|
|
28
28
|
public class ScriptList {
|
|
29
29
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
30
|
+
private int scriptCount = 0;
|
|
31
|
+
private final ScriptRecord[] scriptRecords;
|
|
32
|
+
private final Script[] scripts;
|
|
33
33
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
}
|
|
49
|
-
for (int i = 0; i < scriptCount; i++) {
|
|
50
|
-
scripts[i] = new Script(raf, offset + scriptRecords[i].getOffset());
|
|
51
|
-
}
|
|
34
|
+
/**
|
|
35
|
+
* Creates new ScriptList
|
|
36
|
+
*
|
|
37
|
+
* @param raf
|
|
38
|
+
* @param offset
|
|
39
|
+
* @throws java.io.IOException
|
|
40
|
+
*/
|
|
41
|
+
protected ScriptList(RandomAccessFileEmulator raf, int offset) throws IOException {
|
|
42
|
+
raf.seek(offset);
|
|
43
|
+
scriptCount = raf.readUnsignedShort();
|
|
44
|
+
scriptRecords = new ScriptRecord[scriptCount];
|
|
45
|
+
scripts = new Script[scriptCount];
|
|
46
|
+
for (int i = 0; i < scriptCount; i++) {
|
|
47
|
+
scriptRecords[i] = new ScriptRecord(raf);
|
|
52
48
|
}
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
return scriptCount;
|
|
49
|
+
for (int i = 0; i < scriptCount; i++) {
|
|
50
|
+
scripts[i] = new Script(raf, offset + scriptRecords[i].getOffset());
|
|
56
51
|
}
|
|
52
|
+
}
|
|
57
53
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
54
|
+
public int getScriptCount() {
|
|
55
|
+
return scriptCount;
|
|
56
|
+
}
|
|
61
57
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
58
|
+
public ScriptRecord getScriptRecord(int i) {
|
|
59
|
+
return scriptRecords[i];
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
public Script findScript(String tag) {
|
|
63
|
+
if (tag.length() != 4) {
|
|
64
|
+
return null;
|
|
65
|
+
}
|
|
66
|
+
int tagVal = ((tag.charAt(0) << 24)
|
|
67
|
+
| (tag.charAt(1) << 16)
|
|
68
|
+
| (tag.charAt(2) << 8)
|
|
69
|
+
| tag.charAt(3));
|
|
70
|
+
for (int i = 0; i < scriptCount; i++) {
|
|
71
|
+
if (scriptRecords[i].getTag() == tagVal) {
|
|
72
|
+
return scripts[i];
|
|
73
|
+
}
|
|
76
74
|
}
|
|
75
|
+
return null;
|
|
76
|
+
}
|
|
77
77
|
|
|
78
78
|
}
|
|
@@ -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
|
*
|
|
@@ -27,26 +27,26 @@ import org.apache.batik.svggen.font.*;
|
|
|
27
27
|
*/
|
|
28
28
|
public class ScriptRecord {
|
|
29
29
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
30
|
+
private final int tag;
|
|
31
|
+
private final int offset;
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Creates new ScriptRecord
|
|
35
|
+
*
|
|
36
|
+
* @param raf
|
|
37
|
+
* @throws java.io.IOException
|
|
38
|
+
*/
|
|
39
|
+
protected ScriptRecord(RandomAccessFileEmulator raf) throws IOException {
|
|
40
|
+
tag = raf.readInt();
|
|
41
|
+
offset = raf.readUnsignedShort();
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
public int getTag() {
|
|
45
|
+
return tag;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
public int getOffset() {
|
|
49
|
+
return offset;
|
|
50
|
+
}
|
|
51
51
|
|
|
52
52
|
}
|
|
@@ -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
|
*
|
|
@@ -27,21 +27,20 @@ import org.apache.batik.svggen.font.*;
|
|
|
27
27
|
*/
|
|
28
28
|
public abstract class SingleSubst extends LookupSubtable {
|
|
29
29
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
}
|
|
43
|
-
return s;
|
|
30
|
+
public abstract int getFormat();
|
|
31
|
+
|
|
32
|
+
public abstract int substitute(int glyphId);
|
|
33
|
+
|
|
34
|
+
public static SingleSubst read(RandomAccessFileEmulator raf, int offset) throws IOException {
|
|
35
|
+
SingleSubst s = null;
|
|
36
|
+
raf.seek(offset);
|
|
37
|
+
int format = raf.readUnsignedShort();
|
|
38
|
+
if (format == 1) {
|
|
39
|
+
s = new SingleSubstFormat1(raf, offset);
|
|
40
|
+
} else if (format == 2) {
|
|
41
|
+
s = new SingleSubstFormat2(raf, offset);
|
|
44
42
|
}
|
|
43
|
+
return s;
|
|
44
|
+
}
|
|
45
45
|
|
|
46
46
|
}
|
|
47
|
-
|
|
@@ -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
|
*
|
|
@@ -27,41 +27,41 @@ import org.apache.batik.svggen.font.*;
|
|
|
27
27
|
*/
|
|
28
28
|
public class SingleSubstFormat1 extends SingleSubst {
|
|
29
29
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
30
|
+
private final int coverageOffset;
|
|
31
|
+
private final short deltaGlyphID;
|
|
32
|
+
private final Coverage coverage;
|
|
33
33
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
34
|
+
/**
|
|
35
|
+
* Creates new SingleSubstFormat1
|
|
36
|
+
*
|
|
37
|
+
* @param raf
|
|
38
|
+
* @param offset
|
|
39
|
+
* @throws java.io.IOException
|
|
40
|
+
*/
|
|
41
|
+
protected SingleSubstFormat1(RandomAccessFileEmulator raf, int offset) throws IOException {
|
|
42
|
+
coverageOffset = raf.readUnsignedShort();
|
|
43
|
+
deltaGlyphID = raf.readShort();
|
|
44
|
+
raf.seek(offset + coverageOffset);
|
|
45
|
+
coverage = Coverage.read(raf);
|
|
46
|
+
}
|
|
47
47
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
48
|
+
@Override
|
|
49
|
+
public int getFormat() {
|
|
50
|
+
return 1;
|
|
51
|
+
}
|
|
52
52
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
}
|
|
64
|
-
return glyphId;
|
|
53
|
+
/**
|
|
54
|
+
*
|
|
55
|
+
* @param glyphId
|
|
56
|
+
* @return
|
|
57
|
+
*/
|
|
58
|
+
@Override
|
|
59
|
+
public int substitute(int glyphId) {
|
|
60
|
+
int i = coverage.findGlyph(glyphId);
|
|
61
|
+
if (i > -1) {
|
|
62
|
+
return glyphId + deltaGlyphID;
|
|
65
63
|
}
|
|
64
|
+
return glyphId;
|
|
65
|
+
}
|
|
66
66
|
|
|
67
67
|
}
|
|
@@ -18,8 +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
|
|
22
|
-
|
|
21
|
+
import org.apache.batik.svggen.font.RandomAccessFileEmulator;
|
|
23
22
|
|
|
24
23
|
/**
|
|
25
24
|
*
|
|
@@ -28,40 +27,41 @@ import org.apache.batik.svggen.font.*;
|
|
|
28
27
|
*/
|
|
29
28
|
public class SingleSubstFormat2 extends SingleSubst {
|
|
30
29
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
30
|
+
private final int coverageOffset;
|
|
31
|
+
private final int glyphCount;
|
|
32
|
+
private final int[] substitutes;
|
|
33
|
+
private final Coverage coverage;
|
|
35
34
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
coverage = Coverage.read(raf);
|
|
35
|
+
/**
|
|
36
|
+
* Creates new SingleSubstFormat2
|
|
37
|
+
*
|
|
38
|
+
* @param raf
|
|
39
|
+
* @param offset
|
|
40
|
+
* @throws java.io.IOException
|
|
41
|
+
*/
|
|
42
|
+
protected SingleSubstFormat2(RandomAccessFileEmulator raf, int offset) throws IOException {
|
|
43
|
+
coverageOffset = raf.readUnsignedShort();
|
|
44
|
+
glyphCount = raf.readUnsignedShort();
|
|
45
|
+
substitutes = new int[glyphCount];
|
|
46
|
+
for (int i = 0; i < glyphCount; i++) {
|
|
47
|
+
substitutes[i] = raf.readUnsignedShort();
|
|
50
48
|
}
|
|
49
|
+
raf.seek(offset + coverageOffset);
|
|
50
|
+
coverage = Coverage.read(raf);
|
|
51
|
+
}
|
|
51
52
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
53
|
+
@Override
|
|
54
|
+
public int getFormat() {
|
|
55
|
+
return 2;
|
|
56
|
+
}
|
|
56
57
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
}
|
|
63
|
-
return glyphId;
|
|
58
|
+
@Override
|
|
59
|
+
public int substitute(int glyphId) {
|
|
60
|
+
int i = coverage.findGlyph(glyphId);
|
|
61
|
+
if (i > -1) {
|
|
62
|
+
return substitutes[i];
|
|
64
63
|
}
|
|
64
|
+
return glyphId;
|
|
65
|
+
}
|
|
65
66
|
|
|
66
67
|
}
|
|
67
|
-
|