177 lines
5.5 KiB
Java
177 lines
5.5 KiB
Java
/*****************************************************************************
|
|
* *
|
|
* HotEqn Equation Viewer Basic Applet *
|
|
* *
|
|
******************************************************************************
|
|
* Java Applet to view mathematical Equations provided in the LaTeX language *
|
|
******************************************************************************
|
|
|
|
Copyright 2006 Stefan Müller and Christian Schmid, modified by Rene Grothmann
|
|
|
|
This file is part of the HotEqn package.
|
|
|
|
HotEqn is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation;
|
|
HotEqn is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
package atp;
|
|
|
|
import java.applet.Applet;
|
|
import java.awt.Graphics2D;
|
|
import java.awt.Image;
|
|
import java.awt.Rectangle;
|
|
import java.awt.Toolkit;
|
|
import java.awt.image.CropImageFilter;
|
|
import java.awt.image.FilteredImageSource;
|
|
import java.awt.image.ImageProducer;
|
|
import java.io.BufferedInputStream;
|
|
import java.io.InputStream;
|
|
import java.io.ObjectInputStream;
|
|
import java.net.URL;
|
|
import java.util.Hashtable;
|
|
import java.util.StringTokenizer;
|
|
|
|
// Referenced classes of package atp:
|
|
// a
|
|
|
|
class d {
|
|
|
|
private final ImageProducer _flddo[] = { null, null, null, null, null };
|
|
private final String _fldif[] = { "8", "10", "12", "14", "18" };
|
|
private final Hashtable _fldfor;
|
|
private static boolean a = true;
|
|
|
|
public d() {
|
|
_fldfor = new Hashtable(189);
|
|
}
|
|
|
|
public Image a(final boolean flag, final boolean flag1, final String s,
|
|
final Graphics2D g, final Applet applet) {
|
|
final StringTokenizer stringtokenizer = new StringTokenizer(s, "/");
|
|
String s1 = stringtokenizer.nextToken();
|
|
s1 = stringtokenizer.nextToken().substring(5);
|
|
final String s2 = stringtokenizer.nextToken();
|
|
int i = -1;
|
|
boolean flag2 = true;
|
|
while (flag2) {
|
|
if (_fldif[++i].equals(s1)) {
|
|
flag2 = false;
|
|
}
|
|
if (i == 4) {
|
|
flag2 = false;
|
|
}
|
|
}
|
|
if (_flddo[i] == null) {
|
|
_flddo[i] = a(flag, flag1, "Fonts" + s1 + ".gif", applet);
|
|
final String s3 = "Des" + s1 + ".gif";
|
|
BufferedInputStream bufferedinputstream = null;
|
|
try {
|
|
if (a) {
|
|
getClass().getResourceAsStream(s3);
|
|
bufferedinputstream = new BufferedInputStream(getClass()
|
|
.getResourceAsStream(s3));
|
|
} else if ((!flag) & (!flag1)) {
|
|
bufferedinputstream = new BufferedInputStream((new URL(s3))
|
|
.openStream());
|
|
} else if (flag) {
|
|
bufferedinputstream = new BufferedInputStream((new URL(
|
|
applet.getCodeBase(), s3)).openStream());
|
|
} else {
|
|
try {
|
|
bufferedinputstream = new BufferedInputStream(
|
|
getClass().getResource(s3).openStream());
|
|
} catch (final Exception exception) {
|
|
}
|
|
}
|
|
final ObjectInputStream objectinputstream = new ObjectInputStream(
|
|
bufferedinputstream);
|
|
final int j = objectinputstream.readInt();
|
|
for (int k = 0; k < j; k++) {
|
|
final String s4 = (String) objectinputstream.readObject();
|
|
_fldfor.put(s1 + s4, new Rectangle(
|
|
(Rectangle) objectinputstream.readObject()));
|
|
}
|
|
|
|
bufferedinputstream.close();
|
|
} catch (final Exception exception1) {
|
|
// System.out.println(exception1.toString());
|
|
_flddo[i] = null;
|
|
}
|
|
}
|
|
Image image = null;
|
|
if (_flddo[i] != null) {
|
|
final Rectangle rectangle = (Rectangle) _fldfor.get(s1 + s2);
|
|
image = Toolkit.getDefaultToolkit().createImage(
|
|
new FilteredImageSource(new FilteredImageSource(_flddo[i],
|
|
new CropImageFilter(rectangle.x, rectangle.y,
|
|
rectangle.width, rectangle.height)), new a(
|
|
g.getColor())));
|
|
}
|
|
return image;
|
|
}
|
|
|
|
public ImageProducer a(final boolean flag, final boolean flag1,
|
|
final String s, final Applet applet) {
|
|
ImageProducer imageproducer = null;
|
|
if (a) {
|
|
imageproducer = a(s);
|
|
}
|
|
if (imageproducer == null) {
|
|
a = false;
|
|
if ((!flag) & (!flag1)) {
|
|
imageproducer = Toolkit.getDefaultToolkit().getImage(s)
|
|
.getSource();
|
|
} else if (flag) {
|
|
imageproducer = applet.getImage(applet.getCodeBase(), s)
|
|
.getSource();
|
|
} else {
|
|
try {
|
|
final URL url = getClass().getResource(s);
|
|
imageproducer = (ImageProducer) url.getContent();
|
|
} catch (final Exception exception) {
|
|
}
|
|
}
|
|
}
|
|
return imageproducer;
|
|
}
|
|
|
|
ImageProducer a(final String s) {
|
|
ImageProducer imageproducer = null;
|
|
try {
|
|
final InputStream inputstream = getClass().getResourceAsStream(s);
|
|
int i = inputstream.available();
|
|
byte abyte0[] = new byte[i];
|
|
int j = 0;
|
|
for (int k = 0; k != -1;) {
|
|
k = inputstream.read(abyte0, j, i);
|
|
if (k != -1) {
|
|
j += k;
|
|
i = inputstream.available();
|
|
final int l = j + i;
|
|
if (l > abyte0.length) {
|
|
final byte abyte1[] = (byte[]) abyte0.clone();
|
|
abyte0 = new byte[l];
|
|
System.arraycopy(abyte1, 0, abyte0, 0, j);
|
|
}
|
|
}
|
|
if (i == 0) {
|
|
break;
|
|
}
|
|
}
|
|
|
|
imageproducer = Toolkit.getDefaultToolkit().createImage(abyte0)
|
|
.getSource();
|
|
} catch (final Exception exception) {
|
|
}
|
|
return imageproducer;
|
|
}
|
|
|
|
}
|