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
@@ -1,110 +1,130 @@
1
1
  /**
2
- Copyright 2004-2008 Ricard Marxer <email@ricardmarxer.com>
3
-
4
- This file is part of Geomerative.
5
-
6
- Geomerative is free software: you can redistribute it and/or modify
7
- it under the terms of the GNU General Public License as published by
8
- the Free Software Foundation, either version 3 of the License, or
9
- (at your option) any later version.
10
-
11
- Geomerative is distributed in the hope that it will be useful,
12
- but WITHOUT ANY WARRANTY; without even the implied warranty of
13
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
- GNU General Public License for more details.
15
-
16
- You should have received a copy of the GNU General Public License
17
- along with Geomerative. If not, see <http://www.gnu.org/licenses/>.
18
- */
19
-
2
+ * Copyright 2004-2008 Ricard Marxer <email@ricardmarxer.com>
3
+ *
4
+ * This file is part of Geomerative.
5
+ *
6
+ * Geomerative is free software: you can redistribute it and/or modify it under
7
+ * the terms of the GNU General Public License as published by the Free Software
8
+ * Foundation, either version 3 of the License, or (at your option) any later
9
+ * version.
10
+ *
11
+ * Geomerative is distributed in the hope that it will be useful, but WITHOUT
12
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
13
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
14
+ * details.
15
+ *
16
+ * You should have received a copy of the GNU General Public License along with
17
+ * Geomerative. If not, see <http://www.gnu.org/licenses/>.
18
+ */
20
19
  package geomerative;
21
-
22
-
23
- import org.apache.batik.svggen.font.*;
24
- import org.apache.batik.svggen.font.table.*;
20
+ import java.io.IOException;
21
+ import java.nio.file.Files;
22
+ import java.nio.file.Path;
23
+ import java.nio.file.Paths;
24
+ import org.apache.batik.svggen.font.Font;
25
+ import org.apache.batik.svggen.font.Glyph;
26
+ import org.apache.batik.svggen.font.Point;
27
+ import org.apache.batik.svggen.font.table.CmapFormat;
28
+ import org.apache.batik.svggen.font.table.SingleSubst;
25
29
  import processing.core.PApplet;
26
30
  import processing.core.PConstants;
27
31
  import processing.core.PGraphics;
28
32
 
29
33
  /**
30
- * RShape is a reduced interface for creating, holding and drawing text from TrueType Font files. It's a basic interpreter of TrueType fonts enabling to access any String in the form of a group of shapes. Enabling us in this way to access their geometry.
31
- * @eexample RFont
32
- * @usage Geometry
33
- * @related RGroup
34
+ * RShape is a reduced interface for creating, holding and drawing text from
35
+ * TrueType Font files. It's a basic interpreter of TrueType fonts enabling to
36
+ * access any String in the form of a group of shapes. Enabling us in this way
37
+ * to access their geometry.
38
+ *
39
+ RFont
40
+ * Geometry
41
+ * RGroup
34
42
  *
35
- * @extended
43
+
36
44
  */
37
- public class RFont implements PConstants{
45
+ public class RFont implements PConstants {
46
+
38
47
  Font f;
39
48
  float scaleFactor = 0.2F;
40
49
  //int scaleFactorFixed = 1;
41
-
50
+
42
51
  /**
43
- * The point size of the font.
44
- * @eexample size
45
- * @related setSize ( )
46
- * @related RFont
52
+ * The point size of the font.
53
+ *
54
+ size
55
+ * setSize ( )
56
+ * RFont
47
57
  */
48
58
  public int size = DEFAULT_SIZE;
49
-
59
+
50
60
  /**
51
- * The alignment of the font. This property can take the following values: RFont.LEFT, RFont.CENTER and RFont.RIGHT
52
- * @eexample align
53
- * @related setAlign ( )
54
- * @related RFont
61
+ * The alignment of the font. This property can take the following values:
62
+ * RFont.LEFT, RFont.CENTER and RFont.RIGHT
63
+ *
64
+ align
65
+ * setAlign ( )
66
+ * RFont
55
67
  */
56
68
  public int align = DEFAULT_ALIGN;
57
-
69
+
58
70
  final static int DEFAULT_SIZE = 48;
59
71
  final static int DEFAULT_RESOLUTION = 72;
60
72
  final static int DEFAULT_ALIGN = RFont.LEFT;
61
-
73
+
62
74
  /**
63
75
  * Should we try to use ASCII, rather than Unicode?
64
76
  */
65
77
  public boolean forceAscii = false;
66
-
67
-
78
+
68
79
  /**
69
- * The constructor of the RFont object. Use this in order to create a font with which we will be able to draw and obtain outlines of text.
70
- * @eexample RFont
71
- * @param fontPath String, the name of the TrueType Font file which should be situated in the data folder of the sketch.
80
+ * The constructor of the RFont object. Use this in order to create a font
81
+ * with which we will be able to draw and obtain outlines of text.
82
+ *
83
+ RFont
84
+ * @param fontPath String, the name of the TrueType Font file which should be
85
+ * situated in the data folder of the sketch.
72
86
  * @param size int, the point size of the font in points.
73
- * @param align int, this can only take the following values: RFont.LEFT, RFont.CENTER and RFont.RIGHT.
74
- * @related toGroup ( )
75
- * @related toShape ( )
76
- * @related toPolygon ( )
77
- * @related toMesh ( )
78
- * @related draw ( )
87
+ * @param align int, this can only take the following values: RFont.LEFT,
88
+ * RFont.CENTER and RFont.RIGHT.
89
+ * toGroup ( )
90
+ * toShape ( )
91
+ * toPolygon ( )
92
+ * toMesh ( )
93
+ * draw ( )
79
94
  */
80
- public RFont(String fontPath, int size, int align) throws RuntimeException{
81
- // Try to find the font as font path
82
- byte[] bs = RG.parent().loadBytes(fontPath);
83
- f = Font.create(bs);
84
-
85
- setSize(size);
86
- setAlign(align);
95
+ public RFont(String fontPath, int size, int align) {
96
+ try {
97
+ // Try to find the font as font path
98
+ Path path = Paths.get(fontPath);
99
+ f = Font.create(Files.readAllBytes(path));
100
+ setSize(size);
101
+ setAlign(align);
102
+ } catch (IOException ex) {
103
+ System.err.println(fontPath + " not found or unreadable");
104
+ System.exit(2);
105
+ }
87
106
  }
88
-
89
- public RFont(String fontPath, int size) throws RuntimeException{
107
+
108
+ public RFont(String fontPath, int size) {
90
109
  this(fontPath, size, DEFAULT_ALIGN);
91
110
  }
92
-
93
- public RFont(String fontPath) throws RuntimeException{
111
+
112
+ public RFont(String fontPath) {
94
113
  this(fontPath, DEFAULT_SIZE, DEFAULT_ALIGN);
95
114
  }
96
-
115
+
97
116
  /**
98
117
  * Use this method to reset the point size of the font.
99
- * @eexample setSize
118
+ *
119
+ setSize
100
120
  * @param size int, the point size of the font in points.
101
- * @related size
102
- * @related RFont
121
+ * size
122
+ * RFont
103
123
  */
104
- public final void setSize(int size){
124
+ public final void setSize(int size) {
105
125
  short unitsPerEm = f.getHeadTable().getUnitsPerEm();
106
126
  int resolution = RG.dpi();
107
- this.scaleFactor = ((float)size * (float)resolution) / (72F * (float)unitsPerEm);
127
+ this.scaleFactor = ((float) size * (float) resolution) / (72F * (float) unitsPerEm);
108
128
  //this.scaleFactorFixed = (int)(this.scaleFactor * 65536F);
109
129
  //System.out.println(scaleFactor);
110
130
  //System.out.println(scaleFactorFixed);
@@ -135,110 +155,120 @@ public class RFont implements PConstants{
135
155
 
136
156
  return hheaLineGap;
137
157
  }
138
-
158
+
139
159
  /**
140
- * Use this method to reset the alignment of the font. This property can take the following values: RFont.LEFT, RFont.CENTER and RFont.RIGHT
141
- * @eexample setAlign
142
- * @param align int, this can only take the following values: RFont.LEFT, RFont.CENTER and RFont.RIGHT.
143
- * @related align
144
- * @related RFont
160
+ * Use this method to reset the alignment of the font. This property can take
161
+ * the following values: RFont.LEFT, RFont.CENTER and RFont.RIGHT
162
+ *
163
+ setAlign
164
+ * @param align int, this can only take the following values: RFont.LEFT,
165
+ * RFont.CENTER and RFont.RIGHT.
166
+ * align
167
+ * RFont
145
168
  */
146
- public final void setAlign(int align) throws RuntimeException{
147
- if(align!=LEFT && align!=CENTER && align!=RIGHT){
169
+ public final void setAlign(int align) throws RuntimeException {
170
+ if (align != LEFT && align != CENTER && align != RIGHT) {
148
171
  throw new RuntimeException("Alignment unknown. The only accepted values are: RFont.LEFT, RFont.CENTER and RFont.RIGHT");
149
172
  }
150
173
  this.align = align;
151
174
  }
152
-
175
+
153
176
  /**
154
- * @return
155
- * @invisible
156
- **/
157
- public String getFamily(){
177
+ * @return
178
+ *
179
+ */
180
+ public String getFamily() {
158
181
  return f.getNameTable().getRecord(org.apache.batik.svggen.font.table.Table.nameFontFamilyName);
159
182
  }
160
-
183
+
161
184
  /**
162
- * Use this method to get the outlines of a character in the form of an RShape.
163
- * @eexample RFont_toShape
185
+ * Use this method to get the outlines of a character in the form of an
186
+ * RShape.
187
+ *
188
+ RFont_toShape
164
189
  * @param character char, the character we want the outline from.
165
190
  * @return RShape, the outline of the character.
166
- * @related toGroup ( )
167
- * @related toPolygon ( )
168
- * @related draw ( )
191
+ * toGroup ( )
192
+ * toPolygon ( )
193
+ * draw ( )
169
194
  */
170
- public RShape toShape(char character){
195
+ public RShape toShape(char character) {
171
196
  RGroup grp = toGroup(Character.toString(character));
172
- if(grp.countElements()>0) return (RShape)(grp.elements[0]);
197
+ if (grp.countElements() > 0) {
198
+ return (RShape) (grp.elements[0]);
199
+ }
173
200
  return new RShape();
174
201
  }
175
-
202
+
176
203
  /**
177
- * Use this method to get the outlines of a character in the form of an RPolygon.
178
- * @eexample RFont_toPolygon
204
+ * Use this method to get the outlines of a character in the form of an
205
+ * RPolygon.
206
+ *
207
+ RFont_toPolygon
179
208
  * @param character char, the character we want the outline from.
180
209
  * @return RPolygon, the outline of the character.
181
- * @related toGroup ( )
182
- * @related toShape ( )
183
- * @related draw ( )
210
+ * toGroup ( )
211
+ * toShape ( )
212
+ * draw ( )
184
213
  */
185
214
  public RPolygon toPolygon(char character) {
186
215
  return toShape(character).toPolygon();
187
216
  }
188
-
189
-
217
+
190
218
  private CmapFormat getCmapFormat() {
191
219
  if (forceAscii) {
192
220
  // We've been asked to use the ASCII/Macintosh cmap format
193
221
  return f.getCmapTable().getCmapFormat(
194
- org.apache.batik.svggen.font.table.Table.platformMacintosh,
195
- org.apache.batik.svggen.font.table.Table.encodingRoman );
222
+ org.apache.batik.svggen.font.table.Table.platformMacintosh,
223
+ org.apache.batik.svggen.font.table.Table.encodingRoman);
196
224
  } else {
197
- short[] platforms = new short[] {
225
+ short[] platforms = new short[]{
198
226
  org.apache.batik.svggen.font.table.Table.platformMicrosoft,
199
227
  org.apache.batik.svggen.font.table.Table.platformAppleUnicode,
200
228
  org.apache.batik.svggen.font.table.Table.platformMacintosh
201
229
  };
202
- short[] encodings = new short[] {
230
+ short[] encodings = new short[]{
203
231
  org.apache.batik.svggen.font.table.Table.encodingUGL,
204
232
  org.apache.batik.svggen.font.table.Table.encodingKorean,
205
233
  org.apache.batik.svggen.font.table.Table.encodingHebrew,
206
234
  org.apache.batik.svggen.font.table.Table.encodingUndefined
207
235
  };
208
-
236
+
209
237
  CmapFormat cmapFmt;
210
- for(int i = 0; i < encodings.length; i++) {
211
- for(int j = 0; j < platforms.length; j++) {
212
-
238
+ for (int i = 0; i < encodings.length; i++) {
239
+ for (int j = 0; j < platforms.length; j++) {
240
+
213
241
  cmapFmt = f.getCmapTable().getCmapFormat(platforms[j], encodings[i]);
214
242
  if (cmapFmt != null) {
215
243
  return cmapFmt;
216
- }
217
- }
244
+ }
245
+ }
218
246
  }
219
247
  return null;
220
248
  }
221
249
  }
222
250
 
223
-
224
251
  /**
225
- * Use this method to get the outlines of a string in the form of an RGroup. All the elements of the group will be RShapes.
226
- * @eexample RFont_toGroup
252
+ * Use this method to get the outlines of a string in the form of an RGroup.
253
+ * All the elements of the group will be RShapes.
254
+ *
255
+ RFont_toGroup
227
256
  * @param text String, the string we want the outlines from.
228
- * @return RGroup, the group of outlines of the character. All the elements are RShapes.
229
- * @related toShape ( )
230
- * @related draw ( )
257
+ * @return RGroup, the group of outlines of the character. All the elements
258
+ * are RShapes.
259
+ * toShape ( )
260
+ * draw ( )
231
261
  */
232
- public RGroup toGroup(String text) throws RuntimeException{
262
+ public RGroup toGroup(String text) throws RuntimeException {
233
263
  RGroup result = new RGroup();
234
-
264
+
235
265
  // Decide upon a cmap table to use for our character to glyph look-up
236
266
  CmapFormat cmapFmt = getCmapFormat();
237
-
267
+
238
268
  if (cmapFmt == null) {
239
269
  throw new RuntimeException("Cannot find a suitable cmap table");
240
270
  }
241
-
271
+
242
272
  // If this font includes arabic script, we want to specify
243
273
  // substitutions for initial, medial, terminal & isolated
244
274
  // cases.
@@ -265,7 +295,6 @@ public class RFont implements PConstants{
265
295
  }
266
296
  }
267
297
  }*/
268
-
269
298
  int x = 0;
270
299
  for (short i = 0; i < text.length(); i++) {
271
300
  int glyphIndex = cmapFmt.mapCharCode(text.charAt(i));
@@ -274,50 +303,50 @@ public class RFont implements PConstants{
274
303
  if (glyph != null) {
275
304
  glyph.scale(scaleFactor);
276
305
  // Add the Glyph to the Shape with an horizontal offset of x
277
- result.addElement(getGlyphAsShape(f,glyph, glyphIndex,x));
306
+ result.addElement(getGlyphAsShape(f, glyph, glyphIndex, x));
278
307
  x += glyph.getAdvanceWidth();
279
- }else{
280
- x += (int)((float)default_advance_x*scaleFactor);
308
+ } else {
309
+ x += (int) ((float) default_advance_x * scaleFactor);
281
310
  }
282
-
311
+
283
312
  }
284
-
285
- if(align!=LEFT && align!=CENTER && align!=RIGHT){
313
+
314
+ if (align != LEFT && align != CENTER && align != RIGHT) {
286
315
  throw new RuntimeException("Alignment unknown. The only accepted values are: RFont.LEFT, RFont.CENTER and RFont.RIGHT");
287
316
  }
288
-
317
+
289
318
  RRectangle r;
290
319
  RMatrix mattrans;
291
320
 
292
- switch(this.align){
293
- case RFont.CENTER:
294
- r = result.getBounds();
295
- mattrans = new RMatrix();
296
- mattrans.translate((r.getMinX()-r.getMaxX())/2,0);
297
- result.transform(mattrans);
298
- break;
299
- case RFont.RIGHT:
300
- r = result.getBounds();
301
- mattrans = new RMatrix();
302
- mattrans.translate((r.getMinX()-r.getMaxX()),0);
303
- result.transform(mattrans);
304
- break;
305
- case RFont.LEFT:
306
- break;
321
+ switch (this.align) {
322
+ case RFont.CENTER:
323
+ r = result.getBounds();
324
+ mattrans = new RMatrix();
325
+ mattrans.translate((r.getMinX() - r.getMaxX()) / 2, 0);
326
+ result.transform(mattrans);
327
+ break;
328
+ case RFont.RIGHT:
329
+ r = result.getBounds();
330
+ mattrans = new RMatrix();
331
+ mattrans.translate((r.getMinX() - r.getMaxX()), 0);
332
+ result.transform(mattrans);
333
+ break;
334
+ case RFont.LEFT:
335
+ break;
307
336
  }
308
337
  return result;
309
338
  }
310
339
 
311
- public RShape toShape(String text) throws RuntimeException{
340
+ public RShape toShape(String text) throws RuntimeException {
312
341
  RShape result = new RShape();
313
-
342
+
314
343
  // Decide upon a cmap table to use for our character to glyph look-up
315
344
  CmapFormat cmapFmt = getCmapFormat();
316
-
345
+
317
346
  if (cmapFmt == null) {
318
347
  throw new RuntimeException("Cannot find a suitable cmap table");
319
348
  }
320
-
349
+
321
350
  // If this font includes arabic script, we want to specify
322
351
  // substitutions for initial, medial, terminal & isolated
323
352
  // cases.
@@ -344,7 +373,6 @@ public class RFont implements PConstants{
344
373
  }
345
374
  }
346
375
  }*/
347
-
348
376
  int x = 0;
349
377
  for (short i = 0; i < text.length(); i++) {
350
378
  int glyphIndex = cmapFmt.mapCharCode(text.charAt(i));
@@ -353,147 +381,150 @@ public class RFont implements PConstants{
353
381
  if (glyph != null) {
354
382
  glyph.scale(scaleFactor);
355
383
  // Add the Glyph to the Shape with an horizontal offset of x
356
- result.addChild(getGlyphAsShape(f,glyph, glyphIndex,x));
384
+ result.addChild(getGlyphAsShape(f, glyph, glyphIndex, x));
357
385
  x += glyph.getAdvanceWidth();
358
- }else{
359
- x += (int)((float)default_advance_x*scaleFactor);
386
+ } else {
387
+ x += (int) ((float) default_advance_x * scaleFactor);
360
388
  }
361
-
389
+
362
390
  }
363
-
364
- if(align!=LEFT && align!=CENTER && align!=RIGHT){
391
+
392
+ if (align != LEFT && align != CENTER && align != RIGHT) {
365
393
  throw new RuntimeException("Alignment unknown. The only accepted values are: RFont.LEFT, RFont.CENTER and RFont.RIGHT");
366
394
  }
367
-
395
+
368
396
  RRectangle r;
369
397
  RMatrix mattrans;
370
398
 
371
- switch(this.align){
372
- case RFont.CENTER:
373
- r = result.getBounds();
374
- mattrans = new RMatrix();
375
- mattrans.translate((r.getMinX()-r.getMaxX())/2,0);
376
- result.transform(mattrans);
377
- break;
378
- case RFont.RIGHT:
379
- r = result.getBounds();
380
- mattrans = new RMatrix();
381
- mattrans.translate((r.getMinX()-r.getMaxX()),0);
382
- result.transform(mattrans);
383
- break;
384
- case RFont.LEFT:
385
- break;
399
+ switch (this.align) {
400
+ case RFont.CENTER:
401
+ r = result.getBounds();
402
+ mattrans = new RMatrix();
403
+ mattrans.translate((r.getMinX() - r.getMaxX()) / 2, 0);
404
+ result.transform(mattrans);
405
+ break;
406
+ case RFont.RIGHT:
407
+ r = result.getBounds();
408
+ mattrans = new RMatrix();
409
+ mattrans.translate((r.getMinX() - r.getMaxX()), 0);
410
+ result.transform(mattrans);
411
+ break;
412
+ case RFont.LEFT:
413
+ break;
386
414
  }
387
415
  return result;
388
416
  }
389
-
417
+
390
418
  /**
391
419
  * Use this method to draw a character on a certain canvas.
392
- * @eexample RFont_draw
393
- * @param character the character to be drawn
394
- * @param g the canvas where to draw
395
- * @related toShape ( )
396
- * @related toGroup ( )
420
+ *
421
+ RFont_draw
422
+ * @param character the character to be drawn
423
+ * @param g the canvas where to draw
424
+ * toShape ( )
425
+ * toGroup ( )
397
426
  */
398
- public void draw(char character, PGraphics g) throws RuntimeException{
427
+ public void draw(char character, PGraphics g) throws RuntimeException {
399
428
  this.toShape(character).draw(g);
400
429
  }
401
-
430
+
402
431
  /**
403
432
  * Use this method to draw a character on a certain canvas.
404
- * @eexample RFont_draw
405
- * @param text the string to be drawn
406
- * @param g the canvas where to draw
407
- * @related toShape ( )
408
- * @related toGroup ( )
409
- */
410
- public void draw(String text, PGraphics g) throws RuntimeException{
433
+ *
434
+ RFont_draw
435
+ * @param text the string to be drawn
436
+ * @param g the canvas where to draw
437
+ * toShape ( )
438
+ * toGroup ( )
439
+ */
440
+ public void draw(String text, PGraphics g) throws RuntimeException {
411
441
  this.toGroup(text).draw(g);
412
442
  }
413
-
443
+
414
444
  /**
415
445
  * Use this method to draw a character on a certain canvas.
416
- * @eexample RFont_draw
446
+ *
447
+ RFont_draw
417
448
  * @param character char, the character to be drawn
418
- * @param g the canvas where to draw
419
- * @related toShape ( )
420
- * @related toGroup ( )
449
+ * @param g the canvas where to draw
450
+ * toShape ( )
451
+ * toGroup ( )
421
452
  */
422
- public void draw(char character, PApplet g) throws RuntimeException{
453
+ public void draw(char character, PApplet g) throws RuntimeException {
423
454
  this.toShape(character).draw(g);
424
455
  }
425
-
456
+
426
457
  /**
427
458
  * Use this method to draw a character on a certain canvas.
428
- * @eexample RFont_draw
429
- * @param text the string to be drawn
430
- * @param g the canvas where to draw
431
- * @related toShape ( )
432
- * @related toGroup ( )
433
- */
434
- public void draw(String text, PApplet g) throws RuntimeException{
459
+ *
460
+ RFont_draw
461
+ * @param text the string to be drawn
462
+ * @param g the canvas where to draw
463
+ * toShape ( )
464
+ * toGroup ( )
465
+ */
466
+ public void draw(String text, PApplet g) throws RuntimeException {
435
467
  this.toGroup(text).draw(g);
436
468
  }
437
-
438
- public void draw(String text) throws RuntimeException{
469
+
470
+ public void draw(String text) throws RuntimeException {
439
471
  this.toGroup(text).draw();
440
472
  }
441
-
442
- public void draw(char character) throws RuntimeException{
473
+
474
+ public void draw(char character) throws RuntimeException {
443
475
  this.toShape(character).draw();
444
- }
445
-
446
-
476
+ }
477
+
447
478
  private static float midValue(float a, float b) {
448
- return a + (b - a)/2;
479
+ return a + (b - a) / 2;
449
480
  }
450
-
481
+
451
482
  protected static RShape getContourAsShape(Glyph glyph, int startIndex, int count) {
452
483
  return getContourAsShape(glyph, startIndex, count, 0);
453
484
  }
454
-
485
+
455
486
  protected static RShape getContourAsShape(Glyph glyph, int startIndex, int count, float xadv) {
456
-
487
+
457
488
  // If this is a single point on it's own, weSystem.out.println("Value of pointx: "+pointx); can't do anything with it
458
489
  if (glyph.getPoint(startIndex).endOfContour) {
459
490
  return new RShape();
460
491
  }
461
-
492
+
462
493
  RShape result = new RShape();
463
494
  int offset = 0;
464
495
  //float originx = 0F,originy = 0F;
465
-
496
+
466
497
  while (offset < count) {
467
- Point point = glyph.getPoint(startIndex + offset%count);
468
- Point point_plus1 = glyph.getPoint(startIndex + (offset+1)%count);
469
- Point point_plus2 = glyph.getPoint(startIndex + (offset+2)%count);
470
-
471
- float pointx = ((float)point.x + xadv);
472
- float pointy = ((float)point.y);
473
- float point_plus1x = ((float)point_plus1.x + xadv);
474
- float point_plus1y = ((float)point_plus1.y);
475
- float point_plus2x = ((float)point_plus2.x + xadv);
476
- float point_plus2y = ((float)point_plus2.y);
477
-
498
+ Point point = glyph.getPoint(startIndex + offset % count);
499
+ Point point_plus1 = glyph.getPoint(startIndex + (offset + 1) % count);
500
+ Point point_plus2 = glyph.getPoint(startIndex + (offset + 2) % count);
501
+
502
+ float pointx = ((float) point.x + xadv);
503
+ float pointy = ((float) point.y);
504
+ float point_plus1x = ((float) point_plus1.x + xadv);
505
+ float point_plus1y = ((float) point_plus1.y);
506
+ float point_plus2x = ((float) point_plus2.x + xadv);
507
+ float point_plus2y = ((float) point_plus2.y);
508
+
478
509
  if (offset == 0) {
479
510
  // move command
480
- result.addMoveTo(pointx,pointy);
511
+ result.addMoveTo(pointx, pointy);
481
512
  }
482
-
513
+
483
514
  if (point.onCurve && point_plus1.onCurve) {
484
515
  // line command
485
- result.addLineTo(point_plus1x,point_plus1y);
516
+ result.addLineTo(point_plus1x, point_plus1y);
486
517
  offset++;
487
518
  } else if (point.onCurve && !point_plus1.onCurve && point_plus2.onCurve) {
488
519
  // This is a curve with no implied points
489
520
  // quadratic bezier command
490
521
  result.addQuadTo(point_plus1x, point_plus1y, point_plus2x, point_plus2y);
491
- offset+=2;
522
+ offset += 2;
492
523
  } else if (point.onCurve && !point_plus1.onCurve && !point_plus2.onCurve) {
493
524
  // This is a curve with one implied point
494
525
  // quadratic bezier command avec le endPoint implicit
495
526
  result.addQuadTo(point_plus1x, point_plus1y, midValue(point_plus1x, point_plus2x), midValue(point_plus1y, point_plus2y));
496
- offset+=2;
527
+ offset += 2;
497
528
  } else if (!point.onCurve && !point_plus1.onCurve) {
498
529
  // This is a curve with two implied points
499
530
  // quadratic bezier with
@@ -511,18 +542,18 @@ public class RFont implements PConstants{
511
542
  result.addClose();
512
543
  return result;
513
544
  }
514
-
545
+
515
546
  protected static RShape getGlyphAsShape(Font font, Glyph glyph, int glyphIndex) {
516
- return getGlyphAsShape(font,glyph,glyphIndex,0);
547
+ return getGlyphAsShape(font, glyph, glyphIndex, 0);
517
548
  }
518
-
519
- protected static RShape getGlyphAsShape(Font font, Glyph glyph, int glyphIndex,float xadv) {
520
-
549
+
550
+ protected static RShape getGlyphAsShape(Font font, Glyph glyph, int glyphIndex, float xadv) {
551
+
521
552
  RShape result = new RShape();
522
553
  int firstIndex = 0;
523
554
  int count = 0;
524
555
  int i;
525
-
556
+
526
557
  if (glyph != null) {
527
558
  for (i = 0; i < glyph.getPointCount(); i++) {
528
559
  count++;
@@ -533,19 +564,19 @@ public class RFont implements PConstants{
533
564
  }
534
565
  }
535
566
  }
536
-
567
+
537
568
  return result;
538
569
  }
539
-
570
+
540
571
  protected static RShape getGlyphAsShape(Font font, Glyph glyph, int glyphIndex, SingleSubst arabInitSubst, SingleSubst arabMediSubst, SingleSubst arabTermSubst) {
541
572
  return getGlyphAsShape(font, glyph, glyphIndex, arabInitSubst, arabMediSubst, arabTermSubst, 0);
542
573
  }
543
-
574
+
544
575
  protected static RShape getGlyphAsShape(Font font, Glyph glyph, int glyphIndex, SingleSubst arabInitSubst, SingleSubst arabMediSubst, SingleSubst arabTermSubst, float xadv) {
545
-
576
+
546
577
  RShape result = new RShape();
547
578
  boolean substituted = false;
548
-
579
+
549
580
  // arabic = "initial | medial | terminal | isolated"
550
581
  int arabInitGlyphIndex = glyphIndex;
551
582
  int arabMediGlyphIndex = glyphIndex;
@@ -559,28 +590,28 @@ public class RFont implements PConstants{
559
590
  if (arabTermSubst != null) {
560
591
  arabTermGlyphIndex = arabTermSubst.substitute(glyphIndex);
561
592
  }
562
-
593
+
563
594
  if (arabInitGlyphIndex != glyphIndex) {
564
- result.addShape(getGlyphAsShape(font,font.getGlyph(arabInitGlyphIndex),arabInitGlyphIndex));
595
+ result.addShape(getGlyphAsShape(font, font.getGlyph(arabInitGlyphIndex), arabInitGlyphIndex));
565
596
  substituted = true;
566
597
  }
567
-
598
+
568
599
  if (arabMediGlyphIndex != glyphIndex) {
569
- result.addShape(getGlyphAsShape(font,font.getGlyph(arabMediGlyphIndex),arabMediGlyphIndex));
600
+ result.addShape(getGlyphAsShape(font, font.getGlyph(arabMediGlyphIndex), arabMediGlyphIndex));
570
601
  substituted = true;
571
602
  }
572
-
603
+
573
604
  if (arabTermGlyphIndex != glyphIndex) {
574
- result.addShape(getGlyphAsShape(font,font.getGlyph(arabTermGlyphIndex),arabTermGlyphIndex));
605
+ result.addShape(getGlyphAsShape(font, font.getGlyph(arabTermGlyphIndex), arabTermGlyphIndex));
575
606
  substituted = true;
576
607
  }
577
-
608
+
578
609
  if (substituted) {
579
- result.addShape(getGlyphAsShape(font,glyph,glyphIndex));
610
+ result.addShape(getGlyphAsShape(font, glyph, glyphIndex));
580
611
  } else {
581
- result.addShape(getGlyphAsShape(font,glyph,glyphIndex));
612
+ result.addShape(getGlyphAsShape(font, glyph, glyphIndex));
582
613
  }
583
-
614
+
584
615
  return result;
585
616
  }
586
617
  }