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
|
@@ -35,154 +35,153 @@ import org.apache.batik.svggen.font.table.TableFactory;
|
|
|
35
35
|
|
|
36
36
|
/**
|
|
37
37
|
* The TrueType font.
|
|
38
|
+
*
|
|
38
39
|
* @version $Id: Font.java,v 1.6 2004/08/18 07:15:18 vhardy Exp $
|
|
39
40
|
* @author <a href="mailto:david@steadystate.co.uk">David Schweinsberg</a>
|
|
40
41
|
*/
|
|
41
42
|
public class Font {
|
|
42
43
|
|
|
43
|
-
|
|
44
|
+
private byte[] bs;
|
|
44
45
|
// private Interpreter interp = null;
|
|
45
46
|
// private Parser parser = null;
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
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
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
(tableDirectory.getEntry(i), raf);
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
// Get references to commonly used tables
|
|
153
|
-
os2 = (Os2Table) getTable(Table.OS_2);
|
|
154
|
-
cmap = (CmapTable) getTable(Table.cmap);
|
|
155
|
-
glyf = (GlyfTable) getTable(Table.glyf);
|
|
156
|
-
head = (HeadTable) getTable(Table.head);
|
|
157
|
-
hhea = (HheaTable) getTable(Table.hhea);
|
|
158
|
-
hmtx = (HmtxTable) getTable(Table.hmtx);
|
|
159
|
-
loca = (LocaTable) getTable(Table.loca);
|
|
160
|
-
maxp = (MaxpTable) getTable(Table.maxp);
|
|
161
|
-
name = (NameTable) getTable(Table.name);
|
|
162
|
-
post = (PostTable) getTable(Table.post);
|
|
163
|
-
|
|
164
|
-
// Initialize the tables that require it
|
|
165
|
-
hmtx.init(hhea.getNumberOfHMetrics(),
|
|
166
|
-
maxp.getNumGlyphs() - hhea.getNumberOfHMetrics());
|
|
167
|
-
loca.init(maxp.getNumGlyphs(), head.getIndexToLocFormat() == 0);
|
|
168
|
-
glyf.init(maxp.getNumGlyphs(), loca);
|
|
169
|
-
|
|
170
|
-
} catch (IOException e) {
|
|
47
|
+
private TableDirectory tableDirectory = null;
|
|
48
|
+
private Table[] tables;
|
|
49
|
+
private Os2Table os2;
|
|
50
|
+
private CmapTable cmap;
|
|
51
|
+
private GlyfTable glyf;
|
|
52
|
+
private HeadTable head;
|
|
53
|
+
private HheaTable hhea;
|
|
54
|
+
private HmtxTable hmtx;
|
|
55
|
+
private LocaTable loca;
|
|
56
|
+
private MaxpTable maxp;
|
|
57
|
+
private NameTable name;
|
|
58
|
+
private PostTable post;
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Constructor
|
|
62
|
+
*/
|
|
63
|
+
public Font() {
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
public Table getTable(int tableType) {
|
|
67
|
+
for (Table table : tables) {
|
|
68
|
+
if ((table != null) && (table.getType() == tableType)) {
|
|
69
|
+
return table;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
return null;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
public Os2Table getOS2Table() {
|
|
76
|
+
return os2;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
public CmapTable getCmapTable() {
|
|
80
|
+
return cmap;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
public HeadTable getHeadTable() {
|
|
84
|
+
return head;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
public HheaTable getHheaTable() {
|
|
88
|
+
return hhea;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
public HmtxTable getHmtxTable() {
|
|
92
|
+
return hmtx;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
public LocaTable getLocaTable() {
|
|
96
|
+
return loca;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
public MaxpTable getMaxpTable() {
|
|
100
|
+
return maxp;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
public NameTable getNameTable() {
|
|
104
|
+
return name;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
public PostTable getPostTable() {
|
|
108
|
+
return post;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
public int getAscent() {
|
|
112
|
+
return hhea.getAscender();
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
public int getDescent() {
|
|
116
|
+
return hhea.getDescender();
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
public int getNumGlyphs() {
|
|
120
|
+
return maxp.getNumGlyphs();
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
public Glyph getGlyph(int i) {
|
|
124
|
+
return (glyf.getDescription(i) != null)
|
|
125
|
+
? new Glyph(
|
|
126
|
+
glyf.getDescription(i),
|
|
127
|
+
hmtx.getLeftSideBearing(i),
|
|
128
|
+
hmtx.getAdvanceWidth(i))
|
|
129
|
+
: null;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
public TableDirectory getTableDirectory() {
|
|
133
|
+
return tableDirectory;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* @param fontInBytes
|
|
138
|
+
*/
|
|
139
|
+
protected void read(byte[] fontInBytes) {
|
|
140
|
+
bs = fontInBytes;
|
|
141
|
+
try {
|
|
142
|
+
try (RandomAccessFileEmulator raf = new RandomAccessFileEmulator(bs, "r")) {
|
|
143
|
+
tableDirectory = new TableDirectory(raf);
|
|
144
|
+
tables = new Table[tableDirectory.getNumTables()];
|
|
145
|
+
|
|
146
|
+
// Load each of the tables
|
|
147
|
+
for (int i = 0; i < tableDirectory.getNumTables(); i++) {
|
|
148
|
+
tables[i] = TableFactory.create(tableDirectory.getEntry(i), raf);
|
|
171
149
|
}
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
// Get references to commonly used tables
|
|
153
|
+
os2 = (Os2Table) getTable(Table.OS_2);
|
|
154
|
+
cmap = (CmapTable) getTable(Table.CMAP);
|
|
155
|
+
glyf = (GlyfTable) getTable(Table.GLYF);
|
|
156
|
+
head = (HeadTable) getTable(Table.HEAD);
|
|
157
|
+
hhea = (HheaTable) getTable(Table.HHEA);
|
|
158
|
+
hmtx = (HmtxTable) getTable(Table.HMTX);
|
|
159
|
+
loca = (LocaTable) getTable(Table.LOCA);
|
|
160
|
+
maxp = (MaxpTable) getTable(Table.MAXP);
|
|
161
|
+
name = (NameTable) getTable(Table.NAME);
|
|
162
|
+
post = (PostTable) getTable(Table.POST);
|
|
163
|
+
|
|
164
|
+
// Initialize the tables that require it
|
|
165
|
+
hmtx.init(hhea.getNumberOfHMetrics(),
|
|
166
|
+
maxp.getNumGlyphs() - hhea.getNumberOfHMetrics());
|
|
167
|
+
loca.init(maxp.getNumGlyphs(), head.getIndexToLocFormat() == 0);
|
|
168
|
+
glyf.init(maxp.getNumGlyphs(), loca);
|
|
169
|
+
|
|
170
|
+
} catch (IOException e) {
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
public static Font create() {
|
|
175
|
+
return new Font();
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
/**
|
|
179
|
+
* @param fontInBytes
|
|
180
|
+
* @return
|
|
181
|
+
*/
|
|
182
|
+
public static Font create(byte[] fontInBytes) {
|
|
183
|
+
Font f = new Font();
|
|
184
|
+
f.read(fontInBytes);
|
|
185
|
+
return f;
|
|
186
|
+
}
|
|
188
187
|
}
|
|
@@ -22,61 +22,92 @@ import org.apache.batik.svggen.font.table.GlyphDescription;
|
|
|
22
22
|
|
|
23
23
|
/**
|
|
24
24
|
* An individual glyph within a font.
|
|
25
|
+
*
|
|
25
26
|
* @version $Id: Glyph.java,v 1.4 2004/08/18 07:15:18 vhardy Exp $
|
|
26
27
|
* @author <a href="mailto:david@steadystate.co.uk">David Schweinsberg</a>
|
|
27
28
|
*/
|
|
28
29
|
public class Glyph {
|
|
29
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
|
+
/**
|
|
32
|
+
*
|
|
33
|
+
*/
|
|
34
|
+
protected short leftSideBearing;
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
*
|
|
38
|
+
*/
|
|
39
|
+
protected int advanceWidth;
|
|
40
|
+
private Point[] points;
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
*
|
|
44
|
+
* @param gd
|
|
45
|
+
* @param lsb
|
|
46
|
+
* @param advance
|
|
47
|
+
*/
|
|
48
|
+
public Glyph(GlyphDescription gd, short lsb, int advance) {
|
|
49
|
+
leftSideBearing = lsb;
|
|
50
|
+
advanceWidth = advance;
|
|
51
|
+
describe(gd);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
*
|
|
56
|
+
* @return
|
|
57
|
+
*/
|
|
58
|
+
public int getAdvanceWidth() {
|
|
59
|
+
return advanceWidth;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
*
|
|
64
|
+
* @return
|
|
65
|
+
*/
|
|
66
|
+
public short getLeftSideBearing() {
|
|
67
|
+
return leftSideBearing;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
*
|
|
72
|
+
* @param i
|
|
73
|
+
* @return
|
|
74
|
+
*/
|
|
75
|
+
public Point getPoint(int i) {
|
|
76
|
+
return points[i];
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
*
|
|
81
|
+
* @return
|
|
82
|
+
*/
|
|
83
|
+
public int getPointCount() {
|
|
84
|
+
return points.length;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Resets the glyph to the TrueType table settings
|
|
89
|
+
*/
|
|
90
|
+
public void reset() {
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* @param factor a float value
|
|
95
|
+
*/
|
|
96
|
+
public void scale(float factor) {
|
|
97
|
+
if (points != null) {
|
|
98
|
+
for (Point point : points) {
|
|
99
|
+
point.x *= factor;
|
|
100
|
+
point.y *= -factor;
|
|
101
|
+
}
|
|
54
102
|
}
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
* @param factor a float value
|
|
64
|
-
*/
|
|
65
|
-
public void scale(float factor) {
|
|
66
|
-
if(points!=null){
|
|
67
|
-
for (Point point : points) {
|
|
68
|
-
point.x *= factor;
|
|
69
|
-
point.y *= -factor;
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
leftSideBearing = (short)((float)leftSideBearing * factor);
|
|
73
|
-
advanceWidth = (int)((float)advanceWidth * factor);
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
/**
|
|
77
|
-
* @param factor a 16.16 fixed value
|
|
78
|
-
*/
|
|
79
|
-
/*
|
|
103
|
+
leftSideBearing = (short) ((float) leftSideBearing * factor);
|
|
104
|
+
advanceWidth = (int) ((float) advanceWidth * factor);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* @param factor a 16.16 fixed value
|
|
109
|
+
*/
|
|
110
|
+
/*
|
|
80
111
|
public void scale(int factor) {
|
|
81
112
|
for (int i = 0; i < points.length; i++) {
|
|
82
113
|
//points[i].x = ( points[i].x * factor ) >> 6;
|
|
@@ -87,27 +118,27 @@ public class Glyph {
|
|
|
87
118
|
leftSideBearing = (short)(( leftSideBearing * factor) >> 6);
|
|
88
119
|
advanceWidth = (advanceWidth * factor) >> 6;
|
|
89
120
|
}
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
// Append the origin and advanceWidth points (n & n+1)
|
|
110
|
-
points[gd.getPointCount()] = new Point(0, 0, true, true);
|
|
111
|
-
points[gd.getPointCount()+1] = new Point(advanceWidth, 0, true, true);
|
|
121
|
+
*/
|
|
122
|
+
/**
|
|
123
|
+
* Set the points of a glyph from the GlyphDescription
|
|
124
|
+
*/
|
|
125
|
+
private void describe(GlyphDescription gd) {
|
|
126
|
+
int endPtIndex = 0;
|
|
127
|
+
points = new Point[gd.getPointCount() + 2];
|
|
128
|
+
for (int i = 0; i < gd.getPointCount(); i++) {
|
|
129
|
+
boolean endPt = gd.getEndPtOfContours(endPtIndex) == i;
|
|
130
|
+
if (endPt) {
|
|
131
|
+
endPtIndex++;
|
|
132
|
+
}
|
|
133
|
+
points[i] = new Point(
|
|
134
|
+
gd.getXCoordinate(i),
|
|
135
|
+
gd.getYCoordinate(i),
|
|
136
|
+
(gd.getFlags(i) & GlyfDescript.onCurve) != 0,
|
|
137
|
+
endPt);
|
|
112
138
|
}
|
|
139
|
+
|
|
140
|
+
// Append the origin and advanceWidth points (n & n+1)
|
|
141
|
+
points[gd.getPointCount()] = new Point(0, 0, true, true);
|
|
142
|
+
points[gd.getPointCount() + 1] = new Point(advanceWidth, 0, true, true);
|
|
143
|
+
}
|
|
113
144
|
}
|
|
@@ -23,16 +23,16 @@ package org.apache.batik.svggen.font;
|
|
|
23
23
|
*/
|
|
24
24
|
public class Point {
|
|
25
25
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
26
|
+
public int x = 0;
|
|
27
|
+
public int y = 0;
|
|
28
|
+
public boolean onCurve = true;
|
|
29
|
+
public boolean endOfContour = false;
|
|
30
|
+
public boolean touched = false;
|
|
31
|
+
|
|
32
|
+
public Point(int x, int y, boolean onCurve, boolean endOfContour) {
|
|
33
|
+
this.x = x;
|
|
34
|
+
this.y = y;
|
|
35
|
+
this.onCurve = onCurve;
|
|
36
|
+
this.endOfContour = endOfContour;
|
|
37
|
+
}
|
|
38
38
|
}
|
|
@@ -1,15 +1,17 @@
|
|
|
1
1
|
package org.apache.batik.svggen.font;
|
|
2
2
|
|
|
3
|
-
import java.io
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
3
|
+
import java.io.ByteArrayInputStream;
|
|
4
|
+
import java.io.DataInputStream;
|
|
5
|
+
import java.io.IOException;
|
|
6
|
+
|
|
7
|
+
public class RandomAccessFileEmulator extends DataInputStream {
|
|
8
|
+
|
|
9
|
+
public RandomAccessFileEmulator(byte[] byteArray, String accesMode) {
|
|
10
|
+
super(new ByteArrayInputStream(byteArray));
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
public void seek(long n) throws IOException {
|
|
14
|
+
reset();
|
|
15
|
+
skip(n);
|
|
16
|
+
}
|
|
15
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
|
*
|
|
@@ -27,16 +27,16 @@ import org.apache.batik.svggen.font.*;
|
|
|
27
27
|
*/
|
|
28
28
|
public abstract class ClassDef {
|
|
29
29
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
}
|
|
40
|
-
return c;
|
|
30
|
+
public abstract int getFormat();
|
|
31
|
+
|
|
32
|
+
protected static ClassDef read(RandomAccessFileEmulator raf) throws IOException {
|
|
33
|
+
ClassDef c = null;
|
|
34
|
+
int format = raf.readUnsignedShort();
|
|
35
|
+
if (format == 1) {
|
|
36
|
+
c = new ClassDefFormat1(raf);
|
|
37
|
+
} else if (format == 2) {
|
|
38
|
+
c = new ClassDefFormat2(raf);
|
|
41
39
|
}
|
|
40
|
+
return c;
|
|
41
|
+
}
|
|
42
42
|
}
|
|
@@ -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,29 +27,32 @@ import org.apache.batik.svggen.font.*;
|
|
|
27
27
|
*/
|
|
28
28
|
public class ClassDefFormat1 extends ClassDef {
|
|
29
29
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
/**
|
|
47
|
-
*
|
|
48
|
-
* @return
|
|
49
|
-
*/
|
|
50
|
-
@Override
|
|
51
|
-
public int getFormat() {
|
|
52
|
-
return 1;
|
|
30
|
+
private final int startGlyph;
|
|
31
|
+
private final int glyphCount;
|
|
32
|
+
private final int[] classValues;
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Creates new ClassDefFormat1
|
|
36
|
+
*
|
|
37
|
+
* @param raf
|
|
38
|
+
* @throws java.io.IOException
|
|
39
|
+
*/
|
|
40
|
+
public ClassDefFormat1(RandomAccessFileEmulator raf) throws IOException {
|
|
41
|
+
startGlyph = raf.readUnsignedShort();
|
|
42
|
+
glyphCount = raf.readUnsignedShort();
|
|
43
|
+
classValues = new int[glyphCount];
|
|
44
|
+
for (int i = 0; i < glyphCount; i++) {
|
|
45
|
+
classValues[i] = raf.readUnsignedShort();
|
|
53
46
|
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
*
|
|
51
|
+
* @return
|
|
52
|
+
*/
|
|
53
|
+
@Override
|
|
54
|
+
public int getFormat() {
|
|
55
|
+
return 1;
|
|
56
|
+
}
|
|
54
57
|
|
|
55
58
|
}
|