picrate 2.1.0-java → 2.4.0-java

Sign up to get free protection for your applications and to get access to all the features.
Files changed (70) hide show
  1. checksums.yaml +4 -4
  2. data/.mvn/extensions.xml +1 -1
  3. data/.mvn/wrapper/MavenWrapperDownloader.java +1 -1
  4. data/.mvn/wrapper/maven-wrapper.properties +2 -2
  5. data/CHANGELOG.md +10 -0
  6. data/README.md +6 -3
  7. data/Rakefile +2 -1
  8. data/docs/_includes/footer.html +1 -1
  9. data/docs/_layouts/post.html +1 -1
  10. data/docs/_methods/alternative_methods.md +2 -1
  11. data/docs/_methods/noise_mode.md +88 -0
  12. data/docs/_posts/2018-05-06-install_jruby.md +3 -3
  13. data/docs/_posts/2018-11-18-building-gem.md +3 -1
  14. data/docs/_posts/2020-03-09-auto_install_picrate.md +2 -3
  15. data/docs/_posts/2020-05-11-getting_started_manjaro.md +19 -7
  16. data/docs/classes.md +2 -2
  17. data/docs/editors.md +2 -2
  18. data/docs/gems.md +3 -3
  19. data/docs/index.html +1 -1
  20. data/docs/libraries.md +2 -2
  21. data/docs/live.md +2 -2
  22. data/docs/magic.md +2 -2
  23. data/docs/methods.md +2 -2
  24. data/docs/modules.md +3 -3
  25. data/docs/objects.md +2 -2
  26. data/lib/picrate.rb +2 -1
  27. data/lib/picrate/app.rb +3 -2
  28. data/lib/picrate/helper_methods.rb +1 -1
  29. data/lib/picrate/native_folder.rb +1 -3
  30. data/lib/picrate/runner.rb +4 -4
  31. data/lib/picrate/version.rb +1 -1
  32. data/library/jcomplex/jcomplex.rb +1 -0
  33. data/library/pdf/pdf.rb +7 -0
  34. data/library/svg/svg.rb +7 -0
  35. data/mvnw +2 -2
  36. data/mvnw.cmd +2 -2
  37. data/picrate.gemspec +5 -3
  38. data/pom.rb +31 -9
  39. data/pom.xml +41 -6
  40. data/src/main/java/monkstone/FastNoiseModuleJava.java +127 -0
  41. data/src/main/java/monkstone/PicrateLibrary.java +3 -1
  42. data/src/main/java/monkstone/SmoothNoiseModuleJava.java +127 -0
  43. data/src/main/java/monkstone/complex/JComplex.java +252 -0
  44. data/src/main/java/monkstone/fastmath/DegLutTables.java +111 -0
  45. data/src/main/java/monkstone/fastmath/Deglut.java +41 -93
  46. data/src/main/java/monkstone/noise/OpenSimplex2F.java +813 -0
  47. data/src/main/java/monkstone/noise/OpenSimplex2S.java +1138 -0
  48. data/src/main/java/monkstone/vecmath/package-info.java +1 -1
  49. data/src/main/java/monkstone/vecmath/vec3/Vec3.java +1 -1
  50. data/src/main/java/monkstone/videoevent/package-info.java +1 -1
  51. data/src/main/java/processing/awt/ShimAWT.java +260 -94
  52. data/src/main/java/processing/core/PApplet.java +14664 -13450
  53. data/src/main/java/processing/core/PConstants.java +5 -5
  54. data/src/main/java/processing/core/PFont.java +1 -1
  55. data/src/main/java/processing/core/PGraphics.java +200 -201
  56. data/src/main/java/processing/core/PImage.java +539 -549
  57. data/src/main/java/processing/core/PShape.java +18 -18
  58. data/src/main/java/processing/core/PVector.java +23 -23
  59. data/src/main/java/processing/data/Table.java +4 -4
  60. data/src/main/java/processing/net/Client.java +13 -13
  61. data/src/main/java/processing/net/Server.java +5 -5
  62. data/src/main/java/processing/opengl/PGraphicsOpenGL.java +4 -4
  63. data/src/main/java/processing/pdf/PGraphicsPDF.java +529 -0
  64. data/src/main/java/processing/svg/PGraphicsSVG.java +378 -0
  65. data/test/deglut_spec_test.rb +2 -2
  66. data/test/respond_to_test.rb +0 -2
  67. data/vendors/Rakefile +31 -22
  68. data/vendors/geany.rb +3 -3
  69. metadata +26 -13
  70. data/src/main/java/monkstone/noise/SimplexNoise.java +0 -465
@@ -119,7 +119,7 @@ public class Server implements Runnable {
119
119
  *
120
120
  * Disconnect a particular client.
121
121
  *
122
- * ( end auto-generated )
122
+
123
123
  * @brief Disconnect a particular client.
124
124
  * @webref server:server
125
125
  * @param client the client to disconnect
@@ -191,7 +191,7 @@ public class Server implements Runnable {
191
191
  * Returns true if this server is still active and hasn't run
192
192
  * into any trouble.
193
193
  *
194
- * ( end auto-generated )
194
+
195
195
  * @webref server:server
196
196
  * @brief Return true if this server is still active.
197
197
  */
@@ -220,7 +220,7 @@ public class Server implements Runnable {
220
220
  *
221
221
  * Returns the next client in line with a new message.
222
222
  *
223
- * ( end auto-generated )
223
+
224
224
  * @brief Returns the next client in line with a new message.
225
225
  * @webref server
226
226
  * @usage application
@@ -258,7 +258,7 @@ public class Server implements Runnable {
258
258
  *
259
259
  * Disconnects all clients and stops the server.
260
260
  *
261
- * ( end auto-generated )
261
+
262
262
  * <h3>Advanced</h3>
263
263
  * Use this to shut down the server if you finish using it while your applet
264
264
  * is still running. Otherwise, it will be automatically be shut down by the
@@ -337,7 +337,7 @@ public class Server implements Runnable {
337
337
  * Writes a value to all the connected clients. It sends bytes out from the
338
338
  * Server object.
339
339
  *
340
- * ( end auto-generated )
340
+
341
341
  * @webref server
342
342
  * @brief Writes data to all connected clients
343
343
  * @param data data to write
@@ -3685,7 +3685,7 @@ public class PGraphicsOpenGL extends PGraphics {
3685
3685
  * Ported from the implementation of textCharShapeImpl() in 1.5.1
3686
3686
  *
3687
3687
  * <EM>No attempt has been made to optimize this code</EM>
3688
- *
3688
+ *
3689
3689
  * TODO: Implement a FontShape class where each glyph is tessellated and
3690
3690
  * stored inside a larger PShapeOpenGL object (which needs to be expanded as
3691
3691
  * new glyphs are added and exceed the initial capacity in a similar way as
@@ -3693,18 +3693,18 @@ public class PGraphicsOpenGL extends PGraphics {
3693
3693
  * in shape mode, then the correct sequences of vertex indices are computed
3694
3694
  * (akin to the texcoords in the texture case) and used to draw only those
3695
3695
  * parts of the PShape object that are required for the text.
3696
- *
3696
+ *
3697
3697
  *
3698
3698
  * Some issues of the original implementation probably remain, so they are
3699
3699
  * reproduced below:
3700
- *
3700
+ *
3701
3701
  * Also a problem where some fonts seem to be a bit slight, as if the
3702
3702
  * control points aren't being mapped quite correctly. Probably doing
3703
3703
  * something dumb that the control points don't map to P5's control
3704
3704
  * points. Perhaps it's returning b-spline data from the TrueType font?
3705
3705
  * Though it seems like that would make a lot of garbage rather than
3706
3706
  * just a little flattening.
3707
- *
3707
+ *
3708
3708
  * There also seems to be a bug that is causing a line (but not a filled
3709
3709
  * triangle) back to the origin on some letters (i.e. a capital L when
3710
3710
  * tested with Akzidenz Grotesk Light). But this won't be visible
@@ -0,0 +1,529 @@
1
+ /*
2
+ Part of the Processing project - http://processing.org
3
+
4
+ Copyright (c) 2005-12 Ben Fry and Casey Reas
5
+ Copyright (c) 2012-18 The Processing Foundation
6
+
7
+ This library is free software; you can redistribute it and/or
8
+ modify it under the terms of the GNU Lesser General Public
9
+ License version 2.1 as published by the Free Software Foundation.
10
+
11
+ This library 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 GNU
14
+ Lesser General Public License for more details.
15
+
16
+ You should have received a copy of the GNU Lesser General
17
+ Public License along with this library; if not, write to the
18
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330,
19
+ Boston, MA 02111-1307 USA
20
+ */
21
+ package processing.pdf;
22
+
23
+ import com.itextpdf.awt.DefaultFontMapper;
24
+ import com.itextpdf.awt.PdfGraphics2D;
25
+ import com.itextpdf.text.Document;
26
+ import com.itextpdf.text.DocumentException;
27
+ import com.itextpdf.text.Rectangle;
28
+ import com.itextpdf.text.pdf.ByteBuffer;
29
+ import com.itextpdf.text.pdf.PdfContentByte;
30
+ import com.itextpdf.text.pdf.PdfWriter;
31
+ import java.awt.Font;
32
+ import java.awt.Graphics2D;
33
+ import java.awt.Image;
34
+ import java.io.BufferedOutputStream;
35
+ import java.io.File;
36
+ import java.io.FileNotFoundException;
37
+ import java.io.FileOutputStream;
38
+ import java.io.OutputStream;
39
+ import java.util.Arrays;
40
+ import java.util.HashMap;
41
+ import java.util.logging.Level;
42
+ import java.util.logging.Logger;
43
+ import processing.awt.PGraphicsJava2D;
44
+ import processing.core.PApplet;
45
+ import processing.core.PConstants;
46
+ import processing.core.PFont;
47
+ import processing.core.PImage;
48
+ import processing.core.PStyle;
49
+ import processing.core.PSurface;
50
+ import processing.core.PSurfaceNone;
51
+
52
+ /**
53
+ * Thin wrapper for the iText PDF library that handles writing PDF files. The
54
+ * majority of the work in this library is done by
55
+ * <a href="https://github.com/itext/itextpdf">itextpdf</a>. This is currently using
56
+ * itextpdf-5.5.13.2.
57
+ */
58
+ public class PGraphicsPDF extends PGraphicsJava2D {
59
+
60
+ /**
61
+ * File being written, if it's a file.
62
+ */
63
+ protected File file;
64
+ /**
65
+ * OutputStream being written to, if using an OutputStream.
66
+ */
67
+ protected OutputStream output;
68
+
69
+ protected Document document;
70
+ protected PdfWriter writer;
71
+ protected PdfContentByte content;
72
+ protected PdfGraphics2D graphicContent;
73
+ /**
74
+ * Shared across instances because it's incredibly time-consuming to create.
75
+ */
76
+ static protected DefaultFontMapper mapper;
77
+ static protected String[] fontList;
78
+
79
+ @Override
80
+ public void setPath(String path) {
81
+ this.path = path;
82
+ if (path != null) {
83
+ file = new File(path);
84
+ if (!file.isAbsolute()) {
85
+ file = null;
86
+ }
87
+ }
88
+ if (file == null) {
89
+ throw new RuntimeException("PGraphicsPDF requires an absolute path "
90
+ + "for the location of the output file.");
91
+ }
92
+ }
93
+
94
+ /**
95
+ * Set the library to write to an output stream instead of a file.
96
+ * @param output
97
+ */
98
+ public void setOutput(OutputStream output) {
99
+ this.output = output;
100
+ }
101
+
102
+ @Override
103
+ public PSurface createSurface() {
104
+ return surface = new PSurfaceNone(this);
105
+ }
106
+
107
+ @Override
108
+ protected void defaultSettings() { // ignore
109
+ super.defaultSettings();
110
+ textMode = SHAPE;
111
+ }
112
+
113
+ @Override
114
+ public void beginDraw() {
115
+ if (document == null) {
116
+ ByteBuffer.HIGH_PRECISION = true;
117
+ document = new Document(new Rectangle(width, height));
118
+ boolean missingPath = false;
119
+ try {
120
+ if (file != null) {
121
+ try {
122
+ output = new BufferedOutputStream(new FileOutputStream(file), 16384);
123
+ } catch (FileNotFoundException ex) {
124
+ Logger.getLogger(PGraphicsPDF.class.getName()).log(Level.SEVERE, null, ex);
125
+ }
126
+ } else if (output == null) {
127
+ missingPath = true;
128
+ throw new RuntimeException("PGraphicsPDF requires a path "
129
+ + "for the location of the output file.");
130
+ }
131
+ try {
132
+ writer = PdfWriter.getInstance(document, output);
133
+ } catch (DocumentException ex) {
134
+ Logger.getLogger(PGraphicsPDF.class.getName()).log(Level.SEVERE, null, ex);
135
+ }
136
+ document.open();
137
+ content = writer.getDirectContent();
138
+ // template = content.createTemplate(width, height);
139
+
140
+ } catch (RuntimeException re) {
141
+ if (missingPath) {
142
+ throw re; // don't re-package our own error
143
+ } else {
144
+ throw new RuntimeException("Problem saving the PDF file.", re);
145
+ }
146
+ }
147
+ g2 = new PdfGraphics2D(content, width, height);
148
+ }
149
+
150
+ // super in Java2D now creates an image buffer, don't do that
151
+ //super.beginDraw();
152
+ checkSettings();
153
+ resetMatrix(); // reset model matrix
154
+ vertexCount = 0;
155
+ pushMatrix();
156
+ }
157
+
158
+ static protected DefaultFontMapper getMapper() {
159
+ if (mapper == null) {
160
+ mapper = new DefaultFontMapper();
161
+ checkDir("/usr/share/fonts/", mapper);
162
+ checkDir("/usr/local/share/fonts/", mapper);
163
+ checkDir(System.getProperty("user.home") + "/.fonts", mapper);
164
+ }
165
+ return mapper;
166
+ }
167
+
168
+ static protected void checkDir(String path, DefaultFontMapper mapper) {
169
+ File folder = new File(path);
170
+ if (folder.exists()) {
171
+ mapper.insertDirectory(path);
172
+ traverseDir(folder, mapper);
173
+ }
174
+ }
175
+
176
+ /**
177
+ * Recursive walk to get all subdirectories for font fun.Patch submitted by
178
+ * Matthias
179
+ * Breuer.(<a href="http://dev.processing.org/bugs/show_bug.cgi?id=1566">Bug
180
+ * 1566</a>)
181
+ *
182
+ * @param folder
183
+ * @param mapper
184
+ */
185
+ static protected void traverseDir(File folder, DefaultFontMapper mapper) {
186
+ File[] files = folder.listFiles();
187
+ for (File file1 : files) {
188
+ if (file1.isDirectory()) {
189
+ mapper.insertDirectory(file1.getPath());
190
+ traverseDir(new File(file1.getPath()), mapper);
191
+ }
192
+ }
193
+ }
194
+
195
+ // endDraw() needs to be overridden so that the endDraw() from
196
+ // PGraphicsJava2D is not inherited (it calls loadPixels).
197
+ // http://dev.processing.org/bugs/show_bug.cgi?id=1169
198
+ @Override
199
+ public void endDraw() {
200
+ // Also need to pop the matrix since the matrix doesn't reset on each run
201
+ // http://dev.processing.org/bugs/show_bug.cgi?id=1227
202
+ popMatrix();
203
+ }
204
+
205
+ /**
206
+ * Call to explicitly go to the next page from within a single draw().
207
+ */
208
+ public void nextPage() {
209
+ PStyle savedStyle = getStyle();
210
+ endDraw();
211
+ g2.dispose();
212
+
213
+ try {
214
+ // writer.setPageEmpty(false); // maybe useful later
215
+ document.newPage(); // is this bad if no addl pages are made?
216
+ } catch (Exception e) {
217
+ }
218
+ g2 = createGraphics();
219
+ beginDraw();
220
+ style(savedStyle);
221
+ }
222
+
223
+ protected Graphics2D createGraphics() {
224
+ if (textMode == SHAPE) {
225
+ return new PdfGraphics2D(content, width, height);
226
+ } else if (textMode == MODEL) {
227
+ return new PdfGraphics2D(content, width, height, getMapper());
228
+ }
229
+ // Should not be reachable...
230
+ throw new RuntimeException("Invalid textMode() selected for PDF.");
231
+ }
232
+
233
+ @Override
234
+ public void dispose() {
235
+ if (document != null) {
236
+ g2.dispose();
237
+ document.close(); // can't be done in finalize, not always called
238
+ document = null;
239
+ }
240
+ //new Exception().printStackTrace(System.out);
241
+ }
242
+
243
+ /**
244
+ * Don't open a window for this renderer, it won't be used.
245
+ * @return
246
+ */
247
+ @Override
248
+ public boolean displayable() {
249
+ return false;
250
+ }
251
+
252
+ @Override
253
+ protected void imageImpl(PImage image,
254
+ float x1, float y1, float x2, float y2,
255
+ int u1, int v1, int u2, int v2) {
256
+ pushMatrix();
257
+ translate(x1, y1);
258
+ int imageWidth = image.width;
259
+ int imageHeight = image.height;
260
+ scale((x2 - x1) / imageWidth,
261
+ (y2 - y1) / imageHeight);
262
+ if (u2 - u1 == imageWidth && v2 - v1 == imageHeight) {
263
+ g2.drawImage((Image) image.getNative(), 0, 0, null);
264
+ } else {
265
+ PImage tmp = image.get(u1, v1, u2 - u1, v2 - v1);
266
+ g2.drawImage((Image) tmp.getNative(), 0, 0, null);
267
+ }
268
+ popMatrix();
269
+ }
270
+
271
+ //////////////////////////////////////////////////////////////
272
+ @Override
273
+ public void textFont(PFont which) {
274
+ super.textFont(which);
275
+ checkFont();
276
+ }
277
+
278
+ /**
279
+ * Change the textMode() to either SHAPE or MODEL. This resets all renderer
280
+ * settings, and therefore must be called
281
+ * <EM>before</EM> any other commands that set the fill() or the textFont()
282
+ * or anything. Unlike other renderers, use textMode() directly after the
283
+ * size() command.
284
+ */
285
+ @Override
286
+ public void textMode(int mode) {
287
+ if (textMode != mode) {
288
+ switch (mode) {
289
+ case SHAPE:
290
+ textMode = SHAPE;
291
+ g2.dispose();
292
+ g2 = createGraphics();
293
+ break;
294
+ case MODEL:
295
+ textMode = MODEL;
296
+ g2.dispose();
297
+ g2 = createGraphics();
298
+ break;
299
+ case SCREEN:
300
+ throw new RuntimeException("textMode(SCREEN) not supported with PDF");
301
+ default:
302
+ throw new RuntimeException("That textMode() does not exist");
303
+ }
304
+ }
305
+ }
306
+
307
+ @Override
308
+ protected void textLineImpl(char buffer[], int start, int stop,
309
+ float x, float y) {
310
+ checkFont();
311
+ super.textLineImpl(buffer, start, stop, x, y);
312
+ }
313
+
314
+ //////////////////////////////////////////////////////////////
315
+ @Override
316
+ public void loadPixels() {
317
+ nope("loadPixels");
318
+ }
319
+
320
+ @Override
321
+ public void updatePixels() {
322
+ nope("updatePixels");
323
+ }
324
+
325
+ @Override
326
+ public void updatePixels(int x, int y, int c, int d) {
327
+ nope("updatePixels");
328
+ }
329
+
330
+ //
331
+ @Override
332
+ public int get(int x, int y) {
333
+ nope("get");
334
+ return 0; // not reached
335
+ }
336
+
337
+ @Override
338
+ public PImage get(int x, int y, int c, int d) {
339
+ nope("get");
340
+ return null; // not reached
341
+ }
342
+
343
+ @Override
344
+ public PImage get() {
345
+ nope("get");
346
+ return null; // not reached
347
+ }
348
+
349
+ @Override
350
+ public void set(int x, int y, int argb) {
351
+ nope("set");
352
+ }
353
+
354
+ @Override
355
+ public void set(int x, int y, PImage image) {
356
+ nope("set");
357
+ }
358
+
359
+ //
360
+ /**
361
+ *
362
+ * @param alpha
363
+ */
364
+ @Override
365
+ public void mask(int alpha[]) {
366
+ nope("mask");
367
+ }
368
+
369
+ @Override
370
+ public void mask(PImage alpha) {
371
+ nope("mask");
372
+ }
373
+
374
+ /**
375
+ *
376
+ * @param kind
377
+ */
378
+ @Override
379
+ public void filter(int kind) {
380
+ nope("filter");
381
+ }
382
+
383
+ @Override
384
+ public void filter(int kind, float param) {
385
+ nope("filter");
386
+ }
387
+
388
+ //
389
+ @Override
390
+ protected void blendModeImpl() {
391
+ if (blendMode != REPLACE && blendMode != BLEND) {
392
+ showMissingWarning("blendMode");
393
+ }
394
+ }
395
+
396
+ //
397
+ @Override
398
+ public void copy(int sx1, int sy1, int sx2, int sy2,
399
+ int dx1, int dy1, int dx2, int dy2) {
400
+ nope("copy");
401
+ }
402
+
403
+ /**
404
+ *
405
+ * @param src
406
+ * @param sx1
407
+ * @param sy1
408
+ * @param sx2
409
+ * @param sy2
410
+ * @param dx1
411
+ * @param dy1
412
+ * @param dx2
413
+ * @param dy2
414
+ */
415
+ @Override
416
+ public void copy(PImage src,
417
+ int sx1, int sy1, int sx2, int sy2,
418
+ int dx1, int dy1, int dx2, int dy2) {
419
+ nope("copy");
420
+ }
421
+
422
+ //
423
+ public void blend(int sx, int sy, int dx, int dy, int mode) {
424
+ nope("blend");
425
+ }
426
+
427
+ public void blend(PImage src,
428
+ int sx, int sy, int dx, int dy, int mode) {
429
+ nope("blend");
430
+ }
431
+
432
+ @Override
433
+ public void blend(int sx1, int sy1, int sx2, int sy2,
434
+ int dx1, int dy1, int dx2, int dy2, int mode) {
435
+ nope("blend");
436
+ }
437
+
438
+ @Override
439
+ public void blend(PImage src,
440
+ int sx1, int sy1, int sx2, int sy2,
441
+ int dx1, int dy1, int dx2, int dy2, int mode) {
442
+ nope("blend");
443
+ }
444
+
445
+ //
446
+ @Override
447
+ public boolean save(String filename) {
448
+ nope("save");
449
+ return false;
450
+ }
451
+
452
+ //////////////////////////////////////////////////////////////
453
+ /**
454
+ * On Linux or any other platform, you'll need to add the directories by
455
+ * hand. (If there are actual standards here that we can use as a starting
456
+ * point, please file a bug to make a note of it)
457
+ *
458
+ * @param directory
459
+ */
460
+ public void addFonts(String directory) {
461
+ mapper.insertDirectory(directory);
462
+ }
463
+
464
+ /**
465
+ * Check whether the specified font can be used with the PDF library.
466
+ *
467
+ */
468
+ protected void checkFont() {
469
+ Font awtFont = (Font) textFont.getNative();
470
+ if (awtFont == null) { // always need a native font or reference to it
471
+ throw new RuntimeException("Use createFont() instead of loadFont() "
472
+ + "when drawing text using the PDF library.");
473
+ } else if (textMode != SHAPE) {
474
+ if (textFont.isStream()) {
475
+ throw new RuntimeException("Use textMode(SHAPE) with PDF when loading "
476
+ + ".ttf and .otf files with createFont().");
477
+ } else if (mapper.getAliases().get(textFont.getName()) == null) {
478
+ //System.out.println("alias for " + name + " = " + mapper.getAliases().get(name));
479
+ // System.err.println("Use PGraphicsPDF.listFonts() to get a list of " +
480
+ // "fonts that can be used with PDF.");
481
+ // throw new RuntimeException("The font “" + textFont.getName() + "” " +
482
+ // "cannot be used with PDF Export.");
483
+ if (textFont.getName().equals("Lucida Sans")) {
484
+ throw new RuntimeException("Use textMode(SHAPE) with the default "
485
+ + "font when exporting to PDF.");
486
+ } else {
487
+ throw new RuntimeException("Use textMode(SHAPE) with "
488
+ + "“" + textFont.getName() + "” "
489
+ + "when exporting to PDF.");
490
+ }
491
+ }
492
+ }
493
+ }
494
+
495
+ /**
496
+ * List the fonts known to the PDF renderer.This is like PFont.list(),
497
+ * however not all those fonts are available by default.
498
+ *
499
+ * @return
500
+ */
501
+ static public String[] listFonts() {
502
+ if (fontList == null) {
503
+ HashMap<?, ?> map = getMapper().getAliases();
504
+ // Set entries = map.entrySet();
505
+ // fontList = new String[entries.size()];
506
+ fontList = new String[map.size()];
507
+ int count = 0;
508
+ for (Object key : map.keySet()) {
509
+ // for (Object entry : map.entrySet()) {
510
+ // fontList[count++] = (String) ((Map.Entry) entry).getKey();
511
+ fontList[count++] = (String) key;
512
+ }
513
+ // Iterator it = entries.iterator();
514
+ // int count = 0;
515
+ // while (it.hasNext()) {
516
+ // Map.Entry entry = (Map.Entry) it.next();
517
+ // //System.out.println(entry.getKey() + "-->" + entry.getValue());
518
+ // fontList[count++] = (String) entry.getKey();
519
+ // }
520
+ Arrays.sort(fontList);
521
+ }
522
+ return fontList;
523
+ }
524
+
525
+ //////////////////////////////////////////////////////////////
526
+ protected void nope(String function) {
527
+ throw new RuntimeException("No " + function + "() for " + getClass().getSimpleName());
528
+ }
529
+ }