home *** CD-ROM | disk | FTP | other *** search
- import java.awt.Image;
- import java.io.BufferedInputStream;
- import java.io.DataInputStream;
- import java.net.MalformedURLException;
- import java.net.URL;
- import java.util.Vector;
-
- class SitemapParser {
- private String m_sitemap = new String();
- private boolean m_fSuccess;
- private ElementList m_list;
- private HHCtrl m_applet;
- private boolean m_EOF;
- private DataInputStream m_dis;
- private boolean m_fUseFolders;
- private int m_styleSet;
- private long m_exWinStyle = 8388661L;
- private long m_winStyle = 512L;
- private String m_font = "";
- private int m_pos;
- private int m_level;
- static String[] rgEntities = new String[]{"AElig", "Æ", "Aacute", "Á", "Acirc", "Â", "Agrave", "À", "Aring", "Å", "Atilde", "Ã", "Auml", "Ä", "Ccedil", "Ç", "Dstrok", "Ð", "ETH", "Ð", "Eacute", "É", "Ecirc", "Ê", "Egrave", "È", "Euml", "Ë", "Iacute", "Í", "Icirc", "Î", "Igrave", "Ì", "Iuml", "Ï", "Ntilde", "Ñ", "Oacute", "Ó", "Ocirc", "Ô", "Ograve", "Ò", "Oslash", "Ø", "Otilde", "Õ", "Ouml", "Ö", "THORN", "Þ", "Uacute", "Ú", "Ucirc", "Û", "Ugrave", "Ù", "Uuml", "Ü", "Yacute", "Ý", "aacute", "á", "acirc", "â", "acute", "´", "aelig", "æ", "agrave", "à", "amp", "&", "aring", "å", "atilde", "ã", "auml", "ä", "brkbar", "¦", "brvbar", "¦", "ccedil", "ç", "cedil", "¸", "cent", "¢", "copy", "©", "curren", "¤", "deg", "°", "die", "¨", "divide", "÷", "eacute", "é", "ecirc", "ê", "egrave", "è", "eth", "ð", "euml", "ë", "frac12", "½", "frac14", "¼", "frac34", "¾", "gt", ">", "hibar", "¯", "iacute", "í", "icirc", "î", "iexcl", "¡", "igrave", "ì", "iquest", "¿", "iuml", "ï", "laquo", "«", "lt", "<", "macr", "¯", "micro", "µ", "middot", "·", "nbsp", " ", "not", "¬", "ntilde", "ñ", "oacute", "ó", "ocirc", "ô", "ograve", "ò", "ordf", "ª", "ordm", "º", "oslash", "ø", "otilde", "õ", "ouml", "ö", "para", "¶", "plusmn", "±", "pound", "£", "quot", "\"", "raquo", "»", "reg", "®", "sect", "§", "shy", "\u00ad", "sup1", "¹", "sup2", "²", "sup3", "³", "szlig", "ß", "thorn", "þ", "times", "×", "trade", "\u0099", "uacute", "ú", "ucirc", "û", "ugrave", "ù", "uml", "¨", "uuml", "ü", "yacute", "ý", "yen", "¥", "yuml", "ÿ", "", ""};
- private boolean m_fFoundSiteProps;
- private Vector m_categories = new Vector();
- private Vector m_types = new Vector();
- private String m_frame = "";
- private String m_imageList;
- private int m_imageWidth = 16;
- private int m_numImages;
-
- long getWinStyle() {
- return this.m_winStyle;
- }
-
- public boolean success() {
- return this.m_fSuccess;
- }
-
- private String getNextTag() {
- if (!this.hasMoreTags()) {
- return null;
- } else {
- for(this.m_pos = this.m_sitemap.indexOf("<", this.m_pos); this.m_sitemap.indexOf("!--", this.m_pos) == 1; this.m_pos = this.m_sitemap.indexOf("<", this.m_pos)) {
- this.m_pos = this.findTagEnd(this.m_pos, true);
- if (this.m_pos == -1) {
- return null;
- }
- }
-
- int var2 = this.m_pos;
-
- while(true) {
- int var1 = this.m_sitemap.indexOf(">", var2);
- if (var1 != -1) {
- var2 = this.m_sitemap.indexOf("<", var2 + 1);
- if (var2 == -1 || var2 > var1) {
- if (var1 == -1) {
- return null;
- } else {
- String var3 = this.m_sitemap.substring(this.m_pos + 1, var1).trim();
- this.m_pos = var1;
- return var3;
- }
- }
-
- var2 = var1 + 1;
- } else {
- this.getChunk();
- }
- }
- }
- }
-
- private boolean getChunk() {
- int var1 = 0;
- String var2 = null;
- int var3 = this.m_sitemap.length();
-
- try {
- while(var1++ < 5 && (var2 = this.m_dis.readLine()) != null) {
- this.m_sitemap = this.m_sitemap + var2;
- }
- } catch (Exception var4) {
- this.m_EOF = true;
- return false;
- }
-
- if (var2 == null) {
- this.m_EOF = true;
- return this.m_sitemap.length() > var3;
- } else {
- return true;
- }
- }
-
- private int findTagEnd(int var1, boolean var2) {
- int var4 = var1;
-
- while(true) {
- int var3 = this.m_sitemap.indexOf(var2 ? "-->" : ">", var4);
- if (var3 != -1) {
- var4 = this.m_sitemap.indexOf("<", var4 + 1);
- if (var4 == -1 || var4 > var3) {
- return var3;
- }
-
- var4 = var3 + 1;
- } else {
- this.getChunk();
- }
- }
- }
-
- int getStyleSet() {
- return this.m_styleSet;
- }
-
- boolean useFolders() {
- return this.m_fUseFolders;
- }
-
- Vector getCategories() {
- return this.m_categories;
- }
-
- String getFrame() {
- return this.m_frame;
- }
-
- private void parseSitemap() {
- boolean var16 = false;
- Object var18 = null;
- int var19 = 0;
- boolean var20 = true;
- int var22 = 0;
-
- for(int var23 = 0; this.hasMoreTags(); this.tossParsed()) {
- String var1 = this.getNextTag();
- if (this.getTagName(var1).equalsIgnoreCase("OBJECT") && !var16) {
- String var2 = this.getTagParam(var1, "type");
- if (var2.equalsIgnoreCase("text/site properties")) {
- this.m_fFoundSiteProps = true;
- }
-
- while(this.hasMoreTags()) {
- var1 = this.getNextTag();
- if (this.getTagName(var1).equalsIgnoreCase("/OBJECT")) {
- break;
- }
-
- if (this.getTagName(var1).equalsIgnoreCase("param")) {
- if (this.getTagParam(var1, "name").equalsIgnoreCase("FRAME") || this.getTagParam(var1, "name").equalsIgnoreCase("FRAMENAME")) {
- this.m_frame = new String(this.getTagParam(var1, "value"));
- }
-
- if (this.getTagParam(var1, "name").equalsIgnoreCase("FONT")) {
- this.m_font = new String(this.getTagParam(var1, "value"));
- }
-
- if (this.getTagParam(var1, "name").equalsIgnoreCase("CATEGORY")) {
- this.m_categories.addElement(new String(this.getTagParam(var1, "value")));
- }
-
- if (this.getTagParam(var1, "name").equalsIgnoreCase("TYPE")) {
- this.m_types.addElement(new String(this.getTagParam(var1, "value")));
- }
-
- if (this.getTagParam(var1, "name").equalsIgnoreCase("IMAGELIST")) {
- this.m_imageList = new String(this.getTagParam(var1, "value"));
- }
-
- if (this.getTagParam(var1, "name").equalsIgnoreCase("IMAGE WIDTH")) {
- this.m_imageWidth = Integer.parseInt(this.getTagParam(var1, "value"));
- }
-
- if (this.getTagParam(var1, "name").equalsIgnoreCase("EXWINDOW STYLES")) {
- String var11 = new String(this.getTagParam(var1, "value"));
- if (var11.indexOf("0x") == 0 || var11.indexOf("0X") == 0) {
- var11 = var11.substring(2);
-
- try {
- this.m_exWinStyle = Long.parseLong(var11, 16);
- this.m_styleSet |= 2;
- } catch (Exception var31) {
- this.m_exWinStyle = 0L;
- }
- }
- }
-
- if (this.getTagParam(var1, "name").equalsIgnoreCase("WINDOW STYLES")) {
- String var34 = new String(this.getTagParam(var1, "value"));
- if (var34.indexOf("0x") == 0 || var34.indexOf("0X") == 0) {
- var34 = var34.substring(2);
-
- try {
- this.m_winStyle = Long.parseLong(var34, 16);
- this.m_styleSet |= 1;
- } catch (Exception var30) {
- this.m_winStyle = 0L;
- }
- }
- }
-
- if (this.getTagParam(var1, "name").equalsIgnoreCase("IMAGETYPE") && this.getTagParam(var1, "value").equalsIgnoreCase("FOLDER")) {
- this.m_fUseFolders = true;
- }
-
- if (this.getTagParam(var1, "name").equalsIgnoreCase("NUMBERIMAGES")) {
- try {
- this.m_numImages = Integer.parseInt(this.getTagParam(var1, "value"));
- } catch (Exception var29) {
- this.m_numImages = 0;
- }
- }
- }
- }
- }
-
- if (this.getTagName(var1).equalsIgnoreCase("OBJECT") && var16) {
- String var32 = this.getTagParam(var1, "type");
- if (var32 != null && !var32.equalsIgnoreCase("text/sitemap")) {
- System.out.println(" discarded - not sitemap");
- }
-
- String var3 = null;
- String var4 = "";
- String var5 = "";
- String var6 = "";
- int var13 = 0;
- int var14 = -1;
- int var15 = 0;
- String var9 = "";
- String var10 = "";
- Vector var12 = null;
- boolean var21 = false;
- String var7 = "";
- String var8 = "";
-
- while(this.hasMoreTags()) {
- var1 = this.getNextTag();
- if (this.getTagName(var1).equalsIgnoreCase("param")) {
- if (this.getTagParam(var1, "name").equalsIgnoreCase("NAME")) {
- if (var3 == null) {
- var3 = new String(replaceEscapes(this.getTagParam(var1, "value") == null ? "" : this.getTagParam(var1, "value")));
- } else {
- if (var15 > 0) {
- if (var12 == null) {
- var12 = new Vector();
- }
-
- var12.addElement(var9 + ";" + var10);
- }
-
- ++var15;
- var9 = new String(replaceEscapes(this.getTagParam(var1, "value") == null ? "" : replaceEscapes(this.getTagParam(var1, "value"))));
- var10 = "";
- }
- }
-
- if (this.getTagParam(var1, "name").equalsIgnoreCase("SEE ALSO")) {
- var8 = new String(this.getTagParam(var1, "value") == null ? "" : this.getTagParam(var1, "value"));
- }
-
- if (this.getTagParam(var1, "name").equalsIgnoreCase("URL") || this.getTagParam(var1, "name").equalsIgnoreCase("LOCAL")) {
- if (var15 == 0) {
- var4 = new String(this.getTagParam(var1, "value") == null ? "" : this.getTagParam(var1, "value"));
- } else {
- var10 = new String(this.getTagParam(var1, "value") == null ? "" : this.getTagParam(var1, "value"));
- }
- }
-
- if (this.getTagParam(var1, "name").equalsIgnoreCase("Merge")) {
- var21 = true;
- var7 = new String(this.getTagParam(var1, "value") == null ? "" : this.getTagParam(var1, "value"));
- if (var3 == null) {
- var3 = "";
- }
-
- if (this.m_level == 1) {
- try {
- URL var38 = new URL(var7);
- new SitemapParser(var38, this.m_list, this.m_applet);
- } catch (MalformedURLException var28) {
- try {
- URL var24 = new URL(this.m_applet.getDocumentBase(), var7);
- new SitemapParser(var24, this.m_list, this.m_applet);
- } catch (MalformedURLException var27) {
- this.m_applet.showStatus(this.m_applet.getString("cnt.merge.err") + " " + var7);
- }
- }
- }
- }
-
- if (this.getTagParam(var1, "name").equalsIgnoreCase("SECONDARY")) {
- new String(this.getTagParam(var1, "value") == null ? "" : this.getTagParam(var1, "value"));
- }
-
- if (this.getTagParam(var1, "name").equalsIgnoreCase("FRAME") || this.getTagParam(var1, "name").equalsIgnoreCase("FRAMENAME")) {
- var6 = new String(this.getTagParam(var1, "value") == null ? "" : this.getTagParam(var1, "value"));
- }
-
- if (this.getTagParam(var1, "name").equalsIgnoreCase("IMAGENUMBER")) {
- try {
- var14 = Integer.valueOf(this.getTagParam(var1, "value"));
- } catch (Exception var26) {
- var14 = -1;
- }
- }
-
- if (this.getTagParam(var1, "name").equalsIgnoreCase("NEW")) {
- try {
- var13 = Integer.valueOf(this.getTagParam(var1, "value"));
- } catch (Exception var25) {
- var13 = 0;
- }
- }
- }
-
- if (this.getTagName(var1).equalsIgnoreCase("/OBJECT")) {
- if (var15 > 0) {
- if (var12 == null) {
- var12 = new Vector();
- }
-
- var12.addElement(var9 + ";" + var10);
- }
-
- if (var3 != null) {
- Element var17 = new Element(var3, this.m_level - 1, (Image)null, var4, var6, this.m_applet, 1);
- var17.m_isNew = var13;
- var17.m_imgNum = var14 - 1;
- var17.m_related = var12;
- var20 = true;
- if (var21) {
- var17.m_merge = true;
- var17.m_url = var7;
- }
-
- var17.m_seeAlso = var8;
- var19 = this.m_level;
- if (!var21 || this.m_level > 1) {
- this.m_list.addElement(var17);
- }
-
- Object var36 = null;
- ++var23;
- if (var23 % 10 == 0) {
- this.m_applet.showStatus(this.m_applet.getString("cnt.load.status2") + " (" + var23 + ")");
- }
- break;
- }
- }
- }
- }
-
- if (this.getTagName(var1).equalsIgnoreCase("UL")) {
- if (var20) {
- ++this.m_level;
- var20 = false;
- } else {
- ++var22;
- }
- }
-
- if (this.getTagName(var1).equalsIgnoreCase("/UL")) {
- if (var22 == 0) {
- this.m_level += -1;
- } else {
- --var22;
- }
-
- if (this.m_level < 0) {
- this.m_level = 0;
- }
- }
-
- if (this.getTagName(var1).equalsIgnoreCase("LI")) {
- var16 = true;
- }
-
- if (this.getTagName(var1).equalsIgnoreCase("/LI")) {
- var16 = false;
- }
- }
-
- }
-
- String getFont() {
- return this.m_font;
- }
-
- private void tossParsed() {
- this.m_sitemap = this.m_sitemap.substring(this.m_pos);
- this.m_pos = 0;
- }
-
- boolean isParsed() {
- return this.m_fSuccess;
- }
-
- int getImageWidth() {
- return this.m_imageWidth;
- }
-
- boolean foundSiteProps() {
- return this.m_fFoundSiteProps;
- }
-
- long getExWinStyle() {
- return this.m_exWinStyle;
- }
-
- SitemapParser(URL var1, ElementList var2, HHCtrl var3) {
- this.m_list = var2;
- this.m_applet = var3;
- this.m_applet.showStatus(this.m_applet.getString("cnt.load.status"));
-
- try {
- BufferedInputStream var4 = new BufferedInputStream(var1.openStream(), 8192);
- this.m_dis = (DataInputStream)Runtime.getRuntime().getLocalizedInputStream(new DataInputStream(var4));
- this.getChunk();
- this.parseSitemap();
- this.m_fSuccess = true;
- } catch (Exception var5) {
- }
- }
-
- String getImageList() {
- return this.m_imageList;
- }
-
- static String replaceEscapes(String var0) {
- if (var0 == null) {
- return "";
- } else if (var0.indexOf("%") == -1 && var0.indexOf("\\") == -1 && var0.indexOf("&") == -1) {
- return var0;
- } else {
- int var15 = 0;
- String var1 = "";
-
- try {
- while(var15 < var0.length()) {
- int var4 = 0;
- if (var0.charAt(var15) == '%') {
- ++var15;
- char var13 = var0.charAt(var15);
- if (Character.isDigit(var13)) {
- var4 = var13 - 48;
- ++var15;
- } else if (var13 >= 'a' && var13 <= 'f') {
- var4 += var13 - 97 + 10;
- ++var15;
- } else if (var13 >= 'A' && var13 <= 'F') {
- var4 += var13 - 65 + 10;
- ++var15;
- }
-
- if (var15 < var0.length()) {
- var13 = var0.charAt(var15);
- if (Character.isDigit(var13)) {
- var4 = var4 * 16 + var13 - 48;
- ++var15;
- } else if (var13 >= 'a' && var13 <= 'f') {
- var4 = var4 * 16 + var13 - 97 + 10;
- ++var15;
- } else if (var13 >= 'A' && var13 <= 'F') {
- var4 = var4 * 16 + var13 - 65 + 10;
- ++var15;
- }
- }
-
- if (var4 > 0) {
- var1 = var1 + (char)var4;
- }
- } else if (var0.charAt(var15) == '\\') {
- ++var15;
- char var2 = var0.charAt(var15);
- if (var2 != 'n' && var2 != 'r' && var2 != 't') {
- if (var2 >= '0' && var2 <= '7') {
- var4 = var2 - 48;
- ++var15;
- if (var15 < var0.length() - 1) {
- var2 = var0.charAt(var15);
- if (var2 >= '0' && var2 <= '7') {
- var4 = var4 * 8 + var2 - 48;
- ++var15;
- }
-
- if (var15 < var0.length() - 1) {
- var2 = var0.charAt(var15);
- if (var2 >= '0' && var2 <= '7') {
- var4 = var4 * 8 + var2 - 48;
- ++var15;
- }
- }
- }
-
- if (var4 > 0) {
- var1 = var1 + (char)var4;
- }
- } else if (var2 == 'x' || var2 == 'X') {
- var4 = 0;
- var15 += 2;
- if (var15 != -1 && var15 < var0.length() - 1) {
- var2 = var0.charAt(var15);
- if (Character.isDigit(var2)) {
- var4 = var2 - 48;
- ++var15;
- } else if (var2 >= 'a' && var2 <= 'f') {
- var4 += var2 - 97 + 10;
- ++var15;
- } else if (var2 >= 'A' && var2 <= 'F') {
- var4 += var2 - 65 + 10;
- ++var15;
- }
-
- if (var15 < var0.length()) {
- var2 = var0.charAt(var15);
- if (Character.isDigit(var2)) {
- var4 = var4 * 16 + var2 - 48;
- ++var15;
- } else if (var2 >= 'a' && var2 <= 'f') {
- var4 = var4 * 16 + var2 - 97 + 10;
- ++var15;
- } else if (var2 >= 'A' && var2 <= 'F') {
- var4 = var4 * 16 + var2 - 65 + 10;
- ++var15;
- }
- }
-
- if (var4 > 0) {
- var1 = var1 + (char)var4;
- }
- }
- }
- } else {
- var1 = var1 + ' ';
- ++var15;
- }
- } else if (var0.charAt(var15) != '&') {
- var1 = var1 + var0.charAt(var15);
- ++var15;
- } else if (var0.charAt(var15 + 1) == '#') {
- var15 += 2;
-
- for(var4 = 0; var0.charAt(var15) != ';'; ++var15) {
- if (var0.charAt(var15) >= '0' && var0.charAt(var15) <= '9') {
- var4 = var4 * 10 + (var0.charAt(var15) - 48);
- }
- }
-
- if (var4 > 0) {
- var1 = var1 + (char)var4;
- }
-
- ++var15;
- } else {
- int var6;
- for(var6 = var15 + 1; var0.charAt(var6) != ';' && var6 < var0.length() - 1; ++var6) {
- }
-
- String var7 = var0.substring(var15 + 1, var6);
- var15 = var6 + 1;
-
- int var5;
- for(var5 = 0; rgEntities[var5 * 2].length() > 0; ++var5) {
- if (var7.equalsIgnoreCase(rgEntities[var5 * 2])) {
- var1 = var1 + rgEntities[var5 * 2 + 1];
- break;
- }
- }
-
- if (!var7.equalsIgnoreCase(rgEntities[var5 * 2])) {
- var1 = var1 + "?";
- }
- }
- }
- } catch (Exception var8) {
- var1 = var1 + var0.charAt(var15 - 1);
- }
-
- return var1;
- }
- }
-
- private String getTagParam(String var1, String var2) {
- String var4 = var1;
- String var3 = null;
-
- boolean var5;
- for(var5 = false; var4.toUpperCase().indexOf(var2.toUpperCase()) != -1; var4 = var3) {
- var3 = var4.substring(var4.toUpperCase().indexOf(var2.toUpperCase()) + var2.length(), var4.length()).trim();
- if (var3.startsWith("=")) {
- var3 = var3.substring(1, var3.length()).trim();
- var5 = true;
- break;
- }
- }
-
- if (var5) {
- if (var3.startsWith("\"")) {
- return var3.indexOf("\"", 1) != -1 ? var3.substring(1, var3.indexOf("\"", 1)) : null;
- } else {
- return var3.indexOf(" ") != -1 ? var3.substring(0, var3.indexOf(" ")).trim() : var3.trim();
- }
- } else {
- return null;
- }
- }
-
- private boolean hasMoreTags() {
- if (this.m_sitemap.indexOf("<", this.m_pos) != -1) {
- return true;
- } else {
- return this.getChunk() ? this.hasMoreTags() : false;
- }
- }
-
- private String getTagName(String var1) {
- return var1.indexOf(" ") != -1 ? var1.substring(0, var1.indexOf(" ")) : var1;
- }
- }
-