propane 3.4.0-java → 3.7.0.pre-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 +4 -4
- data/.mvn/extensions.xml +1 -2
- data/.mvn/wrapper/MavenWrapperDownloader.java +2 -2
- data/.mvn/wrapper/maven-wrapper.properties +2 -2
- data/.travis.yml +2 -2
- data/CHANGELOG.md +12 -0
- data/Gemfile +2 -0
- data/README.md +17 -8
- data/Rakefile +10 -11
- data/bin/propane +3 -1
- data/lib/propane.rb +6 -4
- data/lib/propane/app.rb +20 -10
- data/lib/propane/creators/sketch_class.rb +7 -1
- data/lib/propane/creators/sketch_factory.rb +4 -2
- data/lib/propane/creators/sketch_writer.rb +1 -0
- data/lib/propane/helper_methods.rb +23 -24
- data/lib/propane/helpers/numeric.rb +2 -0
- data/lib/propane/helpers/version_error.rb +1 -0
- data/lib/propane/library.rb +5 -1
- data/lib/propane/library_loader.rb +2 -0
- data/lib/propane/native_folder.rb +10 -9
- data/lib/propane/native_loader.rb +3 -0
- data/lib/propane/runner.rb +14 -6
- data/lib/propane/version.rb +2 -1
- data/library/boids/boids.rb +21 -11
- data/library/color_group/color_group.rb +28 -0
- data/library/control_panel/control_panel.rb +8 -5
- data/library/dxf/dxf.rb +6 -0
- data/library/file_chooser/chooser.rb +10 -9
- data/library/file_chooser/file_chooser.rb +10 -9
- data/library/library_proxy/library_proxy.rb +2 -0
- data/library/net/net.rb +7 -0
- data/library/simplex_noise/simplex_noise.rb +2 -0
- data/library/slider/slider.rb +23 -22
- data/library/vector_utils/vector_utils.rb +4 -0
- data/library/video_event/video_event.rb +4 -1
- data/pom.rb +37 -36
- data/pom.xml +7 -7
- data/propane.gemspec +16 -12
- data/src/main/java/monkstone/ColorUtil.java +13 -1
- data/src/main/java/monkstone/MathToolModule.java +253 -203
- data/src/main/java/monkstone/PropaneLibrary.java +2 -2
- data/src/main/java/monkstone/fastmath/Deglut.java +1 -1
- data/src/main/java/monkstone/filechooser/Chooser.java +2 -1
- data/src/main/java/monkstone/noise/SimplexNoise.java +2 -2
- data/src/main/java/monkstone/slider/CustomHorizontalSlider.java +1 -1
- data/src/main/java/monkstone/slider/CustomVerticalSlider.java +1 -1
- data/src/main/java/monkstone/slider/SimpleHorizontalSlider.java +1 -1
- data/src/main/java/monkstone/slider/SimpleVerticalSlider.java +1 -1
- data/src/main/java/monkstone/slider/SliderBar.java +1 -1
- data/src/main/java/monkstone/slider/SliderGroup.java +1 -1
- data/src/main/java/monkstone/slider/WheelHandler.java +7 -6
- data/src/main/java/monkstone/vecmath/package-info.java +1 -1
- data/src/main/java/monkstone/vecmath/vec2/Vec2.java +1 -1
- data/src/main/java/monkstone/vecmath/vec3/Vec3.java +3 -3
- data/src/main/java/monkstone/videoevent/CaptureEvent.java +27 -0
- data/src/main/java/monkstone/videoevent/{VideoInterface.java → MovieEvent.java} +11 -27
- data/src/main/java/monkstone/videoevent/package-info.java +1 -1
- data/src/main/java/processing/awt/PGraphicsJava2D.java +781 -285
- data/src/main/java/processing/awt/PImageAWT.java +377 -0
- data/src/main/java/processing/awt/PShapeJava2D.java +56 -52
- data/src/main/java/processing/awt/PSurfaceAWT.java +309 -209
- data/src/main/java/processing/awt/ShimAWT.java +581 -0
- data/src/main/java/processing/core/PApplet.java +4510 -4503
- data/src/main/java/processing/core/PConstants.java +477 -447
- data/src/main/java/processing/core/PFont.java +914 -880
- data/src/main/java/processing/core/PGraphics.java +193 -177
- data/src/main/java/processing/core/PImage.java +611 -309
- data/src/main/java/processing/core/PMatrix.java +172 -159
- data/src/main/java/processing/core/PMatrix2D.java +478 -415
- data/src/main/java/processing/core/PMatrix3D.java +762 -735
- data/src/main/java/processing/core/PShape.java +2888 -2652
- data/src/main/java/processing/core/PShapeOBJ.java +97 -92
- data/src/main/java/processing/core/PShapeSVG.java +1705 -1490
- data/src/main/java/processing/core/PStyle.java +40 -37
- data/src/main/java/processing/core/PSurface.java +139 -97
- data/src/main/java/processing/core/PSurfaceNone.java +296 -218
- data/src/main/java/processing/core/PVector.java +997 -965
- data/src/main/java/processing/core/ThinkDifferent.java +15 -13
- data/src/main/java/processing/data/DoubleDict.java +756 -710
- data/src/main/java/processing/data/DoubleList.java +749 -696
- data/src/main/java/processing/data/FloatDict.java +748 -702
- data/src/main/java/processing/data/FloatList.java +751 -697
- data/src/main/java/processing/data/IntDict.java +720 -673
- data/src/main/java/processing/data/IntList.java +699 -633
- data/src/main/java/processing/data/JSONArray.java +931 -873
- data/src/main/java/processing/data/JSONObject.java +1262 -1165
- data/src/main/java/processing/data/JSONTokener.java +351 -341
- data/src/main/java/processing/data/LongDict.java +710 -663
- data/src/main/java/processing/data/LongList.java +701 -635
- data/src/main/java/processing/data/Sort.java +37 -41
- data/src/main/java/processing/data/StringDict.java +525 -486
- data/src/main/java/processing/data/StringList.java +626 -580
- data/src/main/java/processing/data/Table.java +3690 -3510
- data/src/main/java/processing/data/TableRow.java +182 -183
- data/src/main/java/processing/data/XML.java +957 -883
- data/src/main/java/processing/dxf/RawDXF.java +404 -0
- data/src/main/java/processing/event/Event.java +87 -67
- data/src/main/java/processing/event/KeyEvent.java +48 -41
- data/src/main/java/processing/event/MouseEvent.java +88 -113
- data/src/main/java/processing/event/TouchEvent.java +10 -6
- data/src/main/java/processing/javafx/PGraphicsFX2D.java +20 -345
- data/src/main/java/processing/javafx/PSurfaceFX.java +149 -121
- data/src/main/java/processing/net/Client.java +744 -0
- data/src/main/java/processing/net/Server.java +388 -0
- data/src/main/java/processing/opengl/FontTexture.java +289 -270
- data/src/main/java/processing/opengl/FrameBuffer.java +386 -364
- data/src/main/java/processing/opengl/LinePath.java +547 -500
- data/src/main/java/processing/opengl/LineStroker.java +588 -581
- data/src/main/java/processing/opengl/PGL.java +3047 -2914
- data/src/main/java/processing/opengl/PGraphics2D.java +408 -315
- data/src/main/java/processing/opengl/PGraphics3D.java +107 -72
- data/src/main/java/processing/opengl/PGraphicsOpenGL.java +12378 -12075
- data/src/main/java/processing/opengl/PJOGL.java +1753 -1670
- data/src/main/java/processing/opengl/PShader.java +1266 -1257
- data/src/main/java/processing/opengl/PShapeOpenGL.java +4678 -4580
- data/src/main/java/processing/opengl/PSurfaceJOGL.java +1114 -1027
- data/src/main/java/processing/opengl/Texture.java +1492 -1401
- data/src/main/java/processing/opengl/VertexBuffer.java +57 -55
- data/test/create_test.rb +21 -20
- data/test/deglut_spec_test.rb +4 -2
- data/test/helper_methods_test.rb +49 -20
- data/test/math_tool_test.rb +39 -32
- data/test/native_folder.rb +47 -0
- data/test/respond_to_test.rb +3 -2
- data/test/sketches/key_event.rb +2 -2
- data/test/sketches/library/my_library/my_library.rb +3 -0
- data/test/test_helper.rb +2 -0
- data/test/vecmath_spec_test.rb +35 -22
- data/vendors/Rakefile +33 -62
- metadata +56 -48
- data/src/main/java/processing/core/util/image/ImageLoadFacade.java +0 -161
- data/src/main/java/processing/core/util/image/ImageSaveFacade.java +0 -169
- data/src/main/java/processing/core/util/image/constants/TifConstants.java +0 -45
- data/src/main/java/processing/core/util/image/load/AwtImageLoadStrategy.java +0 -80
- data/src/main/java/processing/core/util/image/load/Base64StringImageLoadStrategy.java +0 -73
- data/src/main/java/processing/core/util/image/load/FallbackImageLoadStrategy.java +0 -70
- data/src/main/java/processing/core/util/image/load/ImageIoImageLoadStrategy.java +0 -132
- data/src/main/java/processing/core/util/image/load/ImageLoadStrategy.java +0 -48
- data/src/main/java/processing/core/util/image/load/ImageLoadUtil.java +0 -45
- data/src/main/java/processing/core/util/image/load/TgaImageLoadStrategy.java +0 -255
- data/src/main/java/processing/core/util/image/load/TiffImageLoadStrategy.java +0 -98
- data/src/main/java/processing/core/util/image/save/ImageSaveStrategy.java +0 -49
- data/src/main/java/processing/core/util/image/save/ImageSaveUtil.java +0 -48
- data/src/main/java/processing/core/util/image/save/ImageWriterImageSaveStrategy.java +0 -179
- data/src/main/java/processing/core/util/image/save/SaveImageException.java +0 -41
- data/src/main/java/processing/core/util/image/save/TgaImageSaveStrategy.java +0 -198
- data/src/main/java/processing/core/util/image/save/TiffImageSaveStrategy.java +0 -91
- data/src/main/java/processing/core/util/image/save/TiffNakedFilenameImageSaveStrategy.java +0 -57
- data/src/main/java/processing/core/util/io/InputFactory.java +0 -285
- data/src/main/java/processing/core/util/io/PathUtil.java +0 -109
- data/src/main/java/processing/opengl/shaders/LightVert-brcm.glsl +0 -154
- data/src/main/java/processing/opengl/shaders/LightVert-vc4.glsl +0 -154
- data/src/main/java/processing/opengl/shaders/TexLightVert-brcm.glsl +0 -160
- data/src/main/java/processing/opengl/shaders/TexLightVert-vc4.glsl +0 -160
@@ -1,91 +0,0 @@
|
|
1
|
-
/* -*- mode: java; c-basic-offset: 2; indent-tabs-mode: nil -*- */
|
2
|
-
|
3
|
-
/*
|
4
|
-
Part of the Processing project - http://processing.org
|
5
|
-
|
6
|
-
Copyright (c) 2012-18 The Processing Foundation
|
7
|
-
Copyright (c) 2004-12 Ben Fry and Casey Reas
|
8
|
-
Copyright (c) 2001-04 Massachusetts Institute of Technology
|
9
|
-
|
10
|
-
This library is free software; you can redistribute it and/or
|
11
|
-
modify it under the terms of the GNU Lesser General Public
|
12
|
-
License as published by the Free Software Foundation, version 2.1.
|
13
|
-
|
14
|
-
This library is distributed in the hope that it will be useful,
|
15
|
-
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
16
|
-
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
17
|
-
Lesser General Public License for more details.
|
18
|
-
|
19
|
-
You should have received a copy of the GNU Lesser General
|
20
|
-
Public License along with this library; if not, write to the
|
21
|
-
Free Software Foundation, Inc., 59 Temple Place, Suite 330,
|
22
|
-
Boston, MA 02111-1307 USA
|
23
|
-
*/
|
24
|
-
|
25
|
-
package processing.core.util.image.save;
|
26
|
-
|
27
|
-
import processing.core.util.image.constants.TifConstants;
|
28
|
-
|
29
|
-
import java.io.FileNotFoundException;
|
30
|
-
import java.io.IOException;
|
31
|
-
import java.io.OutputStream;
|
32
|
-
|
33
|
-
|
34
|
-
/**
|
35
|
-
* Strategy for saving tiff images.
|
36
|
-
*/
|
37
|
-
public class TiffImageSaveStrategy implements ImageSaveStrategy {
|
38
|
-
|
39
|
-
@Override
|
40
|
-
public boolean save(int[] pixels, int pixelWidth, int pixelHeight, int format,
|
41
|
-
String filename) throws FileNotFoundException {
|
42
|
-
|
43
|
-
OutputStream output = ImageSaveUtil.createForFile(filename);
|
44
|
-
|
45
|
-
// shutting off the warning, people can figure this out themselves
|
46
|
-
/*
|
47
|
-
if (format != RGB) {
|
48
|
-
System.err.println("Warning: only RGB information is saved with " +
|
49
|
-
".tif files. Use .tga or .png for ARGB images and others.");
|
50
|
-
}
|
51
|
-
*/
|
52
|
-
try {
|
53
|
-
byte tiff[] = new byte[768];
|
54
|
-
System.arraycopy(
|
55
|
-
TifConstants.TIFF_HEADER,
|
56
|
-
0,
|
57
|
-
tiff,
|
58
|
-
0,
|
59
|
-
TifConstants.TIFF_HEADER.length
|
60
|
-
);
|
61
|
-
|
62
|
-
tiff[30] = (byte) ((pixelWidth >> 8) & 0xff);
|
63
|
-
tiff[31] = (byte) ((pixelWidth) & 0xff);
|
64
|
-
tiff[42] = tiff[102] = (byte) ((pixelHeight >> 8) & 0xff);
|
65
|
-
tiff[43] = tiff[103] = (byte) ((pixelHeight) & 0xff);
|
66
|
-
|
67
|
-
int count = pixelWidth*pixelHeight*3;
|
68
|
-
tiff[114] = (byte) ((count >> 24) & 0xff);
|
69
|
-
tiff[115] = (byte) ((count >> 16) & 0xff);
|
70
|
-
tiff[116] = (byte) ((count >> 8) & 0xff);
|
71
|
-
tiff[117] = (byte) ((count) & 0xff);
|
72
|
-
|
73
|
-
// spew the header to the disk
|
74
|
-
output.write(tiff);
|
75
|
-
|
76
|
-
for (int i = 0; i < pixels.length; i++) {
|
77
|
-
output.write((pixels[i] >> 16) & 0xff);
|
78
|
-
output.write((pixels[i] >> 8) & 0xff);
|
79
|
-
output.write(pixels[i] & 0xff);
|
80
|
-
}
|
81
|
-
output.flush();
|
82
|
-
output.close();
|
83
|
-
return true;
|
84
|
-
|
85
|
-
} catch (IOException e) {
|
86
|
-
e.printStackTrace();
|
87
|
-
}
|
88
|
-
return false;
|
89
|
-
}
|
90
|
-
|
91
|
-
}
|
@@ -1,57 +0,0 @@
|
|
1
|
-
/* -*- mode: java; c-basic-offset: 2; indent-tabs-mode: nil -*- */
|
2
|
-
|
3
|
-
/*
|
4
|
-
Part of the Processing project - http://processing.org
|
5
|
-
|
6
|
-
Copyright (c) 2012-18 The Processing Foundation
|
7
|
-
Copyright (c) 2004-12 Ben Fry and Casey Reas
|
8
|
-
Copyright (c) 2001-04 Massachusetts Institute of Technology
|
9
|
-
|
10
|
-
This library is free software; you can redistribute it and/or
|
11
|
-
modify it under the terms of the GNU Lesser General Public
|
12
|
-
License as published by the Free Software Foundation, version 2.1.
|
13
|
-
|
14
|
-
This library is distributed in the hope that it will be useful,
|
15
|
-
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
16
|
-
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
17
|
-
Lesser General Public License for more details.
|
18
|
-
|
19
|
-
You should have received a copy of the GNU Lesser General
|
20
|
-
Public License along with this library; if not, write to the
|
21
|
-
Free Software Foundation, Inc., 59 Temple Place, Suite 330,
|
22
|
-
Boston, MA 02111-1307 USA
|
23
|
-
*/
|
24
|
-
|
25
|
-
package processing.core.util.image.save;
|
26
|
-
|
27
|
-
import java.io.IOException;
|
28
|
-
|
29
|
-
|
30
|
-
/**
|
31
|
-
* Strategy for saving a Tiff and appending ".tif" to the filename.
|
32
|
-
*/
|
33
|
-
public class TiffNakedFilenameImageSaveStrategy implements ImageSaveStrategy {
|
34
|
-
|
35
|
-
private final ImageSaveStrategy tiffImageSaveStrategy;
|
36
|
-
|
37
|
-
/**
|
38
|
-
* Create a new Tiff save strategy where ".tif" is appended to the filename.
|
39
|
-
*/
|
40
|
-
public TiffNakedFilenameImageSaveStrategy() {
|
41
|
-
tiffImageSaveStrategy = new TiffImageSaveStrategy();
|
42
|
-
}
|
43
|
-
|
44
|
-
@Override
|
45
|
-
public boolean save(int[] pixels, int pixelWidth, int pixelHeight, int format,
|
46
|
-
String filename) throws IOException {
|
47
|
-
|
48
|
-
filename += ".tif";
|
49
|
-
return tiffImageSaveStrategy.save(
|
50
|
-
pixels,
|
51
|
-
pixelWidth,
|
52
|
-
pixelHeight,
|
53
|
-
format,
|
54
|
-
filename
|
55
|
-
);
|
56
|
-
}
|
57
|
-
}
|
@@ -1,285 +0,0 @@
|
|
1
|
-
/* -*- mode: java; c-basic-offset: 2; indent-tabs-mode: nil -*- */
|
2
|
-
|
3
|
-
/*
|
4
|
-
Part of the Processing project - http://processing.org
|
5
|
-
|
6
|
-
Copyright (c) 2012-18 The Processing Foundation
|
7
|
-
Copyright (c) 2004-12 Ben Fry and Casey Reas
|
8
|
-
Copyright (c) 2001-04 Massachusetts Institute of Technology
|
9
|
-
|
10
|
-
This library is free software; you can redistribute it and/or
|
11
|
-
modify it under the terms of the GNU Lesser General Public
|
12
|
-
License as published by the Free Software Foundation, version 2.1.
|
13
|
-
|
14
|
-
This library is distributed in the hope that it will be useful,
|
15
|
-
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
16
|
-
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
17
|
-
Lesser General Public License for more details.
|
18
|
-
|
19
|
-
You should have received a copy of the GNU Lesser General
|
20
|
-
Public License along with this library; if not, write to the
|
21
|
-
Free Software Foundation, Inc., 59 Temple Place, Suite 330,
|
22
|
-
Boston, MA 02111-1307 USA
|
23
|
-
*/
|
24
|
-
|
25
|
-
package processing.core.util.io;
|
26
|
-
|
27
|
-
import processing.core.PApplet;
|
28
|
-
|
29
|
-
import java.io.*;
|
30
|
-
import java.net.*;
|
31
|
-
import java.util.zip.GZIPInputStream;
|
32
|
-
|
33
|
-
|
34
|
-
/**
|
35
|
-
* Factory producing InputStreams under various parameter sets.
|
36
|
-
*/
|
37
|
-
public class InputFactory {
|
38
|
-
|
39
|
-
/**
|
40
|
-
* Create a new input stream from a file.
|
41
|
-
*
|
42
|
-
* @param file The file for which an input stream should be created.
|
43
|
-
* @return InputStream for the input file.
|
44
|
-
*/
|
45
|
-
public static InputStream createInput(File file) {
|
46
|
-
if (file == null) {
|
47
|
-
throw new IllegalArgumentException("File passed to createInput() was null");
|
48
|
-
}
|
49
|
-
if (!file.exists()) {
|
50
|
-
System.err.println(file + " does not exist, createInput() will return null");
|
51
|
-
return null;
|
52
|
-
}
|
53
|
-
try {
|
54
|
-
InputStream input = new FileInputStream(file);
|
55
|
-
final String lower = file.getName().toLowerCase();
|
56
|
-
if (lower.endsWith(".gz") || lower.endsWith(".svgz")) {
|
57
|
-
return new BufferedInputStream(new GZIPInputStream(input));
|
58
|
-
}
|
59
|
-
return new BufferedInputStream(input);
|
60
|
-
|
61
|
-
} catch (IOException e) {
|
62
|
-
System.err.println("Could not createInput() for " + file);
|
63
|
-
e.printStackTrace();
|
64
|
-
return null;
|
65
|
-
}
|
66
|
-
}
|
67
|
-
|
68
|
-
/**
|
69
|
-
* Create an InputStream using path information from a PApplet.
|
70
|
-
*
|
71
|
-
* <p>
|
72
|
-
* Create an InputStream using path information from a PApplet with some pre-processing of file
|
73
|
-
* contents like unzipping a gzip compressed file. This is in contrast to createInputRaw which
|
74
|
-
* will not perform any pre-processing.
|
75
|
-
* </p>
|
76
|
-
*
|
77
|
-
* @param pApplet The PApplet whose sketch path informatino should be used.
|
78
|
-
* @param filename THe filename (url, absolute path, or relative path) to open.
|
79
|
-
* @return InputStream for the given filename or null if no input path could be created.
|
80
|
-
*/
|
81
|
-
public static InputStream createInput(PApplet pApplet, String filename) {
|
82
|
-
InputStream input = createInputRaw(pApplet, filename);
|
83
|
-
if (input != null) {
|
84
|
-
// if it's gzip-encoded, automatically decode
|
85
|
-
if (isGzipCompressed(filename)) {
|
86
|
-
try {
|
87
|
-
// buffered has to go *around* the GZ, otherwise 25x slower
|
88
|
-
return new BufferedInputStream(new GZIPInputStream(input));
|
89
|
-
|
90
|
-
} catch (IOException e) {
|
91
|
-
e.printStackTrace();
|
92
|
-
}
|
93
|
-
} else {
|
94
|
-
return new BufferedInputStream(input);
|
95
|
-
}
|
96
|
-
}
|
97
|
-
return null;
|
98
|
-
}
|
99
|
-
|
100
|
-
/**
|
101
|
-
* Create an InputStream without any pre-processing of file content before it is returned.
|
102
|
-
*
|
103
|
-
* <p>
|
104
|
-
* Create an InputStream using path information from a PApplet without any pre-processing of file
|
105
|
-
* contents like unzipping a gzip compressed file. This is in contrast to createInput which will
|
106
|
-
* perform some pre-processing.
|
107
|
-
* </p>
|
108
|
-
*
|
109
|
-
* @param pApplet The PApplet whose sketch path information should be used.
|
110
|
-
* @param filename THe filename (url, absolute path, or relative path) to open.
|
111
|
-
* @return InputStream for the given filename or null if no input path could be created.
|
112
|
-
*/
|
113
|
-
public static InputStream createInputRaw(PApplet pApplet, String filename) {
|
114
|
-
if (filename == null) return null;
|
115
|
-
|
116
|
-
String sketchPath = pApplet.sketchPath();
|
117
|
-
|
118
|
-
if (sketchPath == null) {
|
119
|
-
System.err.println("The sketch path is not set.");
|
120
|
-
throw new RuntimeException("Files must be loaded inside setup() or after it has been called.");
|
121
|
-
}
|
122
|
-
|
123
|
-
if (filename.length() == 0) {
|
124
|
-
// an error will be called by the parent function
|
125
|
-
//System.err.println("The filename passed to openStream() was empty.");
|
126
|
-
return null;
|
127
|
-
}
|
128
|
-
|
129
|
-
// First check whether this looks like a URL
|
130
|
-
if (filename.contains(":")) { // at least smells like URL
|
131
|
-
try {
|
132
|
-
URL url = new URL(filename);
|
133
|
-
URLConnection conn = url.openConnection();
|
134
|
-
|
135
|
-
if (conn instanceof HttpURLConnection) {
|
136
|
-
HttpURLConnection httpConn = (HttpURLConnection) conn;
|
137
|
-
// Will not handle a protocol change (see below)
|
138
|
-
httpConn.setInstanceFollowRedirects(true);
|
139
|
-
int response = httpConn.getResponseCode();
|
140
|
-
// Default won't follow HTTP -> HTTPS redirects for security reasons
|
141
|
-
// http://stackoverflow.com/a/1884427
|
142
|
-
if (response >= 300 && response < 400) {
|
143
|
-
String newLocation = httpConn.getHeaderField("Location");
|
144
|
-
return createInputRaw(pApplet, newLocation);
|
145
|
-
}
|
146
|
-
return conn.getInputStream();
|
147
|
-
} else if (conn instanceof JarURLConnection) {
|
148
|
-
return url.openStream();
|
149
|
-
}
|
150
|
-
} catch (MalformedURLException mfue) {
|
151
|
-
// not a url, that's fine
|
152
|
-
|
153
|
-
} catch (FileNotFoundException fnfe) {
|
154
|
-
// Added in 0119 b/c Java 1.5 throws FNFE when URL not available.
|
155
|
-
// http://dev.processing.org/bugs/show_bug.cgi?id=403
|
156
|
-
|
157
|
-
} catch (IOException e) {
|
158
|
-
// changed for 0117, shouldn't be throwing exception
|
159
|
-
e.printStackTrace();
|
160
|
-
//System.err.println("Error downloading from URL " + filename);
|
161
|
-
return null;
|
162
|
-
//throw new RuntimeException("Error downloading from URL " + filename);
|
163
|
-
}
|
164
|
-
}
|
165
|
-
|
166
|
-
InputStream stream = null;
|
167
|
-
|
168
|
-
// Moved this earlier than the getResourceAsStream() checks, because
|
169
|
-
// calling getResourceAsStream() on a directory lists its contents.
|
170
|
-
// http://dev.processing.org/bugs/show_bug.cgi?id=716
|
171
|
-
try {
|
172
|
-
// First see if it's in a data folder. This may fail by throwing
|
173
|
-
// a SecurityException. If so, this whole block will be skipped.
|
174
|
-
File file = new File(pApplet.dataPath(filename));
|
175
|
-
|
176
|
-
if (!file.exists()) {
|
177
|
-
// next see if it's just in the sketch folder
|
178
|
-
file = pApplet.sketchFile(filename);
|
179
|
-
}
|
180
|
-
|
181
|
-
if (file.isDirectory()) {
|
182
|
-
return null;
|
183
|
-
}
|
184
|
-
if (file.exists()) {
|
185
|
-
try {
|
186
|
-
// handle case sensitivity check
|
187
|
-
String filePath = file.getCanonicalPath();
|
188
|
-
String filenameActual = new File(filePath).getName();
|
189
|
-
// make sure there isn't a subfolder prepended to the name
|
190
|
-
String filenameShort = new File(filename).getName();
|
191
|
-
// if the actual filename is the same, but capitalized
|
192
|
-
// differently, warn the user.
|
193
|
-
//if (filenameActual.equalsIgnoreCase(filenameShort) &&
|
194
|
-
//!filenameActual.equals(filenameShort)) {
|
195
|
-
if (!filenameActual.equals(filenameShort)) {
|
196
|
-
throw new RuntimeException("This file is named " +
|
197
|
-
filenameActual + " not " +
|
198
|
-
filename + ". Rename the file " +
|
199
|
-
"or change your code.");
|
200
|
-
}
|
201
|
-
} catch (IOException e) { }
|
202
|
-
}
|
203
|
-
|
204
|
-
// if this file is ok, may as well just load it
|
205
|
-
stream = new FileInputStream(file);
|
206
|
-
if (stream != null) {
|
207
|
-
return stream;
|
208
|
-
}
|
209
|
-
|
210
|
-
// have to break these out because a general Exception might
|
211
|
-
// catch the RuntimeException being thrown above
|
212
|
-
} catch (IOException ioe) {
|
213
|
-
} catch (SecurityException se) { }
|
214
|
-
|
215
|
-
// Using getClassLoader() prevents java from converting dots
|
216
|
-
// to slashes or requiring a slash at the beginning.
|
217
|
-
// (a slash as a prefix means that it'll load from the root of
|
218
|
-
// the jar, rather than trying to dig into the package location)
|
219
|
-
ClassLoader cl = pApplet.getClass().getClassLoader();
|
220
|
-
|
221
|
-
// by default, data files are exported to the root path of the jar.
|
222
|
-
// (not the data folder) so check there first.
|
223
|
-
stream = cl.getResourceAsStream("data/" + filename);
|
224
|
-
if (stream != null) {
|
225
|
-
String cn = stream.getClass().getName();
|
226
|
-
// this is an irritation of sun's java plug-in, which will return
|
227
|
-
// a non-null stream for an object that doesn't exist. like all good
|
228
|
-
// things, this is probably introduced in java 1.5. awesome!
|
229
|
-
// http://dev.processing.org/bugs/show_bug.cgi?id=359
|
230
|
-
if (!cn.equals("sun.plugin.cache.EmptyInputStream")) {
|
231
|
-
return stream;
|
232
|
-
}
|
233
|
-
}
|
234
|
-
|
235
|
-
// When used with an online script, also need to check without the
|
236
|
-
// data folder, in case it's not in a subfolder called 'data'.
|
237
|
-
// http://dev.processing.org/bugs/show_bug.cgi?id=389
|
238
|
-
stream = cl.getResourceAsStream(filename);
|
239
|
-
if (stream != null) {
|
240
|
-
String cn = stream.getClass().getName();
|
241
|
-
if (!cn.equals("sun.plugin.cache.EmptyInputStream")) {
|
242
|
-
return stream;
|
243
|
-
}
|
244
|
-
}
|
245
|
-
|
246
|
-
try {
|
247
|
-
// attempt to load from a local file, used when running as
|
248
|
-
// an application, or as a signed applet
|
249
|
-
try { // first try to catch any security exceptions
|
250
|
-
try {
|
251
|
-
stream = new FileInputStream(pApplet.dataPath(filename));
|
252
|
-
if (stream != null) return stream;
|
253
|
-
} catch (IOException e2) { }
|
254
|
-
|
255
|
-
try {
|
256
|
-
stream = new FileInputStream(pApplet.sketchPath(filename));
|
257
|
-
if (stream != null) return stream;
|
258
|
-
} catch (Exception e) { } // ignored
|
259
|
-
|
260
|
-
try {
|
261
|
-
stream = new FileInputStream(filename);
|
262
|
-
if (stream != null) return stream;
|
263
|
-
} catch (IOException e1) { }
|
264
|
-
|
265
|
-
} catch (SecurityException se) { } // online, whups
|
266
|
-
|
267
|
-
} catch (Exception e) {
|
268
|
-
e.printStackTrace();
|
269
|
-
}
|
270
|
-
|
271
|
-
return null;
|
272
|
-
}
|
273
|
-
|
274
|
-
/**
|
275
|
-
* Determine if a file is gzip compressed.
|
276
|
-
*
|
277
|
-
* @param filename The name of the fiel to check.
|
278
|
-
* @return True if the file is a gzip compressed file and false otherwise.
|
279
|
-
*/
|
280
|
-
private static boolean isGzipCompressed(String filename) {
|
281
|
-
String extension = PathUtil.parseExtension(filename);
|
282
|
-
return extension.equalsIgnoreCase("gz") || extension.equalsIgnoreCase("svgz");
|
283
|
-
}
|
284
|
-
|
285
|
-
}
|
@@ -1,109 +0,0 @@
|
|
1
|
-
/* -*- mode: java; c-basic-offset: 2; indent-tabs-mode: nil -*- */
|
2
|
-
|
3
|
-
/*
|
4
|
-
Part of the Processing project - http://processing.org
|
5
|
-
|
6
|
-
Copyright (c) 2012-18 The Processing Foundation
|
7
|
-
Copyright (c) 2004-12 Ben Fry and Casey Reas
|
8
|
-
Copyright (c) 2001-04 Massachusetts Institute of Technology
|
9
|
-
|
10
|
-
This library is free software; you can redistribute it and/or
|
11
|
-
modify it under the terms of the GNU Lesser General Public
|
12
|
-
License as published by the Free Software Foundation, version 2.1.
|
13
|
-
|
14
|
-
This library is distributed in the hope that it will be useful,
|
15
|
-
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
16
|
-
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
17
|
-
Lesser General Public License for more details.
|
18
|
-
|
19
|
-
You should have received a copy of the GNU Lesser General
|
20
|
-
Public License along with this library; if not, write to the
|
21
|
-
Free Software Foundation, Inc., 59 Temple Place, Suite 330,
|
22
|
-
Boston, MA 02111-1307 USA
|
23
|
-
*/
|
24
|
-
|
25
|
-
package processing.core.util.io;
|
26
|
-
|
27
|
-
import java.io.File;
|
28
|
-
|
29
|
-
|
30
|
-
/**
|
31
|
-
* Convenience functions for managing file paths.
|
32
|
-
*/
|
33
|
-
public class PathUtil {
|
34
|
-
private static final String UNKNOWN_FILE_EXTENSION = "unknown";
|
35
|
-
|
36
|
-
/**
|
37
|
-
* Determine the extension of a file given in a path.
|
38
|
-
*
|
39
|
-
* @param path The path like directory/subdirectory/image.png.
|
40
|
-
* @return The extension of the file at path like "png" or "unknown" if could not be determined.
|
41
|
-
*/
|
42
|
-
public static String parseExtension(String path) {
|
43
|
-
String lower = path.toLowerCase();
|
44
|
-
String extension;
|
45
|
-
|
46
|
-
int dot = path.lastIndexOf('.');
|
47
|
-
if (dot == -1) {
|
48
|
-
extension = UNKNOWN_FILE_EXTENSION; // no extension found
|
49
|
-
|
50
|
-
} else {
|
51
|
-
extension = lower.substring(dot + 1);
|
52
|
-
|
53
|
-
// check for, and strip any parameters on the url, i.e.
|
54
|
-
// filename.jpg?blah=blah&something=that
|
55
|
-
int question = extension.indexOf('?');
|
56
|
-
if (question != -1) {
|
57
|
-
extension = extension.substring(0, question);
|
58
|
-
}
|
59
|
-
}
|
60
|
-
|
61
|
-
return extension;
|
62
|
-
}
|
63
|
-
|
64
|
-
/**
|
65
|
-
* Clean up irregularities like leading period or capitalization from an extension string.
|
66
|
-
*
|
67
|
-
* @param extension The extension to clean up like ".PNG".
|
68
|
-
* @return The cleaned up extension like "png".
|
69
|
-
*/
|
70
|
-
public static String cleanExtension(String extension) {
|
71
|
-
extension = extension == null ? UNKNOWN_FILE_EXTENSION : extension.toLowerCase();
|
72
|
-
|
73
|
-
if (extension.startsWith(".")) {
|
74
|
-
extension = extension.substring(1);
|
75
|
-
}
|
76
|
-
|
77
|
-
return extension;
|
78
|
-
}
|
79
|
-
|
80
|
-
/**
|
81
|
-
* Create the directories so that files can be created at a path.
|
82
|
-
*
|
83
|
-
* @param path The path like folder1/folder2/image.png. In this example, folder1 and folder2 would
|
84
|
-
* both be created if not already existing.
|
85
|
-
*/
|
86
|
-
public static void createPath(String path) {
|
87
|
-
createPath(new File(path));
|
88
|
-
}
|
89
|
-
|
90
|
-
/**
|
91
|
-
* Create the directories so that files can be created at a path.
|
92
|
-
*
|
93
|
-
* @param file The file describing the path that should be created. A path of
|
94
|
-
* folder1/folder2/image.png would cause folder1 and folder2 to be created if not already
|
95
|
-
* existing.
|
96
|
-
*/
|
97
|
-
public static void createPath(File file) {
|
98
|
-
try {
|
99
|
-
String parent = file.getParent();
|
100
|
-
if (parent != null) {
|
101
|
-
File unit = new File(parent);
|
102
|
-
if (!unit.exists()) unit.mkdirs();
|
103
|
-
}
|
104
|
-
} catch (SecurityException se) {
|
105
|
-
System.err.println("You don't have permissions to create " +
|
106
|
-
file.getAbsolutePath());
|
107
|
-
}
|
108
|
-
}
|
109
|
-
}
|