home *** CD-ROM | disk | FTP | other *** search
/ Chip 1998 November / Chip_1998-11_cd.bin / tema / Cafe / jfc.bin / HTMLUtils.java < prev    next >
Text File  |  1998-02-26  |  8KB  |  289 lines

  1. /*
  2.  * @(#)HTMLUtils.java    1.3 97/10/01
  3.  * 
  4.  * Copyright (c) 1997 Sun Microsystems, Inc. All Rights Reserved.
  5.  * 
  6.  * This software is the confidential and proprietary information of Sun
  7.  * Microsystems, Inc. ("Confidential Information").  You shall not
  8.  * disclose such Confidential Information and shall use it only in
  9.  * accordance with the terms of the license agreement you entered into
  10.  * with Sun.
  11.  * 
  12.  * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE
  13.  * SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
  14.  * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
  15.  * PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR ANY DAMAGES
  16.  * SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR DISTRIBUTING
  17.  * THIS SOFTWARE OR ITS DERIVATIVES.
  18.  * 
  19.  */
  20. package com.sun.java.swing.text.html;
  21.  
  22. import java.awt.*;
  23. import java.util.*;
  24. import java.io.*;
  25. import java.net.*;
  26.  
  27. import com.sun.java.swing.*;
  28.  
  29. /*
  30.  * A class of general purpose HTML utilities
  31.  *
  32.  * @author  Jill Nakata
  33.  * @version 1.3 10/01/97
  34.  */
  35.  
  36. class HTMLUtils implements HTMLDefs {
  37.  
  38.     /**
  39.      * Converts a type Color to a hex string 
  40.      * in the format "#RRGGBB"
  41.      */
  42.     static public String colorToHex(Color color) throws HTMLException {
  43.  
  44.       String colorstr = new String("#");
  45.  
  46.       // Red
  47.       String str = Integer.toHexString(color.getRed());
  48.       if (str.length() > 2)
  49.     throw new HTMLException(HTMLError.COLOR_CONVERSION,
  50.                 "invalid red value");
  51.       else if (str.length() < 2)
  52.     colorstr += "0" + str;
  53.       else
  54.     colorstr += str;
  55.       
  56.       // Green
  57.       str = Integer.toHexString(color.getGreen());
  58.       if (str.length() > 2)
  59.     throw new HTMLException(HTMLError.COLOR_CONVERSION,
  60.                 "invalid green value");
  61.       else if (str.length() < 2)
  62.     colorstr += "0" + str;
  63.       else
  64.     colorstr += str;
  65.       
  66.       // Blue
  67.       str = Integer.toHexString(color.getBlue());
  68.       if (str.length() > 2)
  69.     throw new HTMLException(HTMLError.COLOR_CONVERSION,
  70.                 "invalid green value");
  71.       else if (str.length() < 2)
  72.     colorstr += "0" + str;
  73.       else
  74.     colorstr += str;
  75.  
  76.       return colorstr;
  77.     }
  78.  
  79.     /**
  80.      * Determine if an end </TAG> is needed 
  81.      * for the given tag.
  82.      */
  83.     static public boolean endTagNeeded(String tag) {
  84.  
  85.         // These should not have an end </TAGNAME>.
  86.     if (tag.equals(HTMLDefs.BASE) ||
  87.         tag.equals(HTMLDefs.ISINDEX) ||
  88.         tag.equals(HTMLDefs.LINK) ||
  89.         tag.equals(HTMLDefs.META))
  90.       return false;
  91.  
  92.         // These require </TAGNAME>.
  93.         else if (tag.equals(HTMLDefs.BODY) ||
  94.          tag.equals(HTMLDefs.HEAD) ||
  95.          tag.equals(HTMLDefs.SCRIPT) ||
  96.          tag.equals(HTMLDefs.STYLE) ||
  97.          tag.equals(HTMLDefs.TITLE) ||
  98.                tag.equals(HTMLDefs.P) ||
  99.                tag.equals(HTMLDefs.PRE) ||
  100.                tag.equals(HTMLDefs.CODE) ||
  101.                tag.equals(HTMLDefs.CENTER) ||
  102.                tag.equals(HTMLDefs.DIV) ||
  103.                tag.equals(HTMLDefs.BLOCKQUOTE) ||
  104.                tag.equals(HTMLDefs.KBD) ||
  105.                tag.equals(HTMLDefs.B) ||
  106.                tag.equals(HTMLDefs.I) ||
  107.                tag.equals(HTMLDefs.U) ||
  108.                tag.equals(HTMLDefs.CITE) ||
  109.                tag.equals(HTMLDefs.BIG) ||
  110.                tag.equals(HTMLDefs.SMALL) ||
  111.                tag.equals(HTMLDefs.DFN) ||
  112.                tag.equals(HTMLDefs.EM) ||
  113.                tag.equals(HTMLDefs.SAMP) ||
  114.                tag.equals(HTMLDefs.STRIKE) ||
  115.                tag.equals(HTMLDefs.STRONG) ||
  116.                tag.equals(HTMLDefs.SUB) ||
  117.                tag.equals(HTMLDefs.SUP) ||
  118.                tag.equals(HTMLDefs.TT) ||
  119.                tag.equals(HTMLDefs.VAR))
  120.       return true;
  121.         else
  122.           return true;
  123.     }
  124.  
  125.      /**
  126.       * Convert a "#FFFFFF" hex string to a Color
  127.       */
  128.      public static final Color hexToColor(String value) throws HTMLException
  129.      {
  130.     if (value.length() != 7) {
  131.       throw new HTMLException(HTMLError.COLOR_CONVERSION,
  132.                   "invalid hex color string length");
  133.         }
  134.     else if (value.startsWith("#")) {
  135.       String str = "0x" + value.substring(1, value.length());
  136.  
  137.       Color c = Color.decode(value);
  138.       return c;
  139.     }
  140.     return null;
  141.      }
  142.  
  143.      /**
  144.       * Convert a 2 position hex number "NN" string into an integer
  145.       */
  146.      static final int stringToHex(String str) throws HTMLException
  147.      {
  148.     if (str.length() != 2)
  149.       throw new HTMLException(HTMLError.HEX_CONVERSION,
  150.                   "invalid hex string" + str);
  151.  
  152.     int pos1 = Character.digit(str.charAt(0), 16) * 16;
  153.     int pos0 = Character.digit(str.charAt(1), 16);
  154.     return(pos0 + pos1);
  155.      }
  156.  
  157.      /**
  158.       * Convert a color string "RED" or "#NNNNNN" to a Color.
  159.       * Note: This will only convert the HTML3.2 colors strings
  160.       *       or string of length 7
  161.       *       otherwise, it will throw an HTMLException.
  162.       */
  163.     static public final Color stringToColor(String str) 
  164.                                         throws HTMLException {
  165.       Color color;
  166.  
  167.       if (str.charAt(0) == '#') 
  168.         color = hexToColor(str);
  169.       else if (str.equalsIgnoreCase("Black"))
  170.         color = hexToColor("#000000");
  171.       else if(str.equalsIgnoreCase("Silver"))
  172.         color = hexToColor("#C0C0C0");
  173.       else if(str.equalsIgnoreCase("Gray"))
  174.         color = hexToColor("#808080");
  175.       else if(str.equalsIgnoreCase("White"))
  176.         color = hexToColor("#FFFFFF");
  177.       else if(str.equalsIgnoreCase("Maroon"))
  178.         color = hexToColor("#800000");
  179.       else if(str.equalsIgnoreCase("Red"))
  180.         color = hexToColor("#FF0000");
  181.       else if(str.equalsIgnoreCase("Purple"))
  182.         color = hexToColor("#800080");
  183.       else if(str.equalsIgnoreCase("Fuchsia"))
  184.         color = hexToColor("#FF00FF");
  185.       else if(str.equalsIgnoreCase("Green"))
  186.         color = hexToColor("#008000");
  187.       else if(str.equalsIgnoreCase("Lime"))
  188.         color = hexToColor("#00FF00");
  189.       else if(str.equalsIgnoreCase("Olive"))
  190.         color = hexToColor("#808000");
  191.       else if(str.equalsIgnoreCase("Yellow"))
  192.         color = hexToColor("#FFFF00");
  193.       else if(str.equalsIgnoreCase("Navy"))
  194.         color = hexToColor("#000080");
  195.       else if(str.equalsIgnoreCase("Blue"))
  196.         color = hexToColor("#0000FF");
  197.       else if(str.equalsIgnoreCase("Teal"))
  198.         color = hexToColor("#008080");
  199.       else if(str.equalsIgnoreCase("Aqua"))
  200.         color = hexToColor("#00FFFF");
  201.       else
  202.     throw new HTMLException(HTMLError.COLOR_CONVERSION,
  203.                 "invalid HTML color string: " + str);
  204.  
  205.       return color;
  206.     }
  207.  
  208.  
  209.    /**
  210.     * Remove begin and end quotes and return string:
  211.     * "xxxxx" returns xxxxx.
  212.     */
  213.    static public String removeSurroundingQuotes(String s) {
  214.      String result = new String(s);
  215.      if (s.startsWith("\"") && s.endsWith("\"")) {
  216.        result = new String(s.substring(1, s.length()-1));
  217.      }
  218.      return result;
  219.    }
  220.  
  221.    /**
  222.     * Return the directory where images reside.
  223.     */
  224. /*
  225.    static public String imageDirectory() {
  226.      String dir;
  227.  
  228.      // "./images/htmleditor/"
  229.      if (HTMLResource.jdtBase == null)
  230.         dir = "." + File.separator + HTMLDefs.IMAGES + File.separator + 
  231.           HTMLDefs.HTMLEDITOR_BASE + File.separator;
  232.  
  233.      // Check if ended with "/" or File.separator.
  234.      // "/opt/SUNWjdt/.../images/htmleditor/
  235.      else if (HTMLResource.jdtBase.endsWith(File.separator))
  236.         dir = HTMLResource.jdtBase + HTMLDefs.IMAGES + File.separator + 
  237.           HTMLDefs.HTMLEDITOR_BASE + File.separator;
  238.  
  239.      // "/opt/SUNWjdt/.../images/htmleditor/
  240.      else
  241.         dir = HTMLResource.jdtBase + File.separator + HTMLDefs.IMAGES + 
  242.           File.separator + HTMLDefs.HTMLEDITOR_BASE + File.separator;
  243.  
  244.      return dir;
  245.  
  246.    }
  247. */
  248.  
  249.     public static  ImageIcon  loadImage(Component c, String imageName){
  250.         Toolkit toolkit = c.getToolkit();
  251.     if(toolkit == null)
  252.       return null;
  253.         URL url = null;
  254.     try {
  255.       url = new URL(imageName);
  256.       InputStream is = (url.openConnection()).getInputStream();
  257.       is.close();
  258.     }catch (MalformedURLException e){
  259.       File f = new File(imageName);
  260.       if(!f.canRead())
  261.         return null;
  262.     }catch (IOException io){
  263.       return null;
  264.     }
  265.     
  266.         Image image;
  267.     if(url != null)
  268.       image = toolkit.getImage(url);
  269.     else
  270.       image = toolkit.getImage(imageName);
  271.     
  272.         MediaTracker tracker = new MediaTracker(c);
  273.         tracker.addImage(image, 0);
  274.         try {
  275.       tracker.waitForID(0);
  276.         } catch (InterruptedException e) {
  277.       System.out.println(e);
  278.       return null;
  279.         }
  280.     
  281.         ImageIcon ig = new ImageIcon(image);
  282.     if (ig.getIconWidth() == -1 || ig.getIconHeight() == -1)
  283.       return null;
  284.     else
  285.       return ig;
  286.     }
  287. }
  288.  
  289.