home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1995 November / PCWK1195.iso / inne / win95 / sieciowe / hotja32.lzh / hotjava / classsrc / net / www / html / mimetable.java < prev    next >
Text File  |  1995-08-11  |  3KB  |  110 lines

  1. /*
  2.  * @(#)MimeTable.java    1.2 95/01/31 James Gosling
  3.  * 
  4.  * Copyright (c) 1994 Sun Microsystems, Inc. All Rights Reserved.
  5.  * 
  6.  * Permission to use, copy, modify, and distribute this software and its
  7.  * documentation for NON-COMMERCIAL purposes and without fee is hereby
  8.  * granted provided that this copyright notice appears in all copies. Please
  9.  * refer to the file "copyright.html" for further important copyright and
  10.  * licensing information.
  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 PURPOSE,
  15.  * OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY
  16.  * LICENSEE AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR
  17.  * ITS DERIVATIVES.
  18.  */
  19.  
  20. package net.www.html;
  21. import java.io.*;
  22.  
  23. class MimeTable {
  24.     private MimeEntry root, last;
  25.  
  26.     void add(MimeEntry m) {
  27.     if (m != null) {
  28.         if (last == null)
  29.         root = m;
  30.         else
  31.         last.next = m;
  32.         last = m;
  33.     }
  34.     }
  35.  
  36.     MimeEntry find(String type) {
  37.     for (MimeEntry p = root; p != null; p = p.next)
  38.         if (p.matches(type))
  39.         return p;
  40.     return null;
  41.     }
  42.  
  43.     void ParseMailcap(InputStream is) {
  44.     try {
  45.         char b[] = new char[200];
  46.         int i = 0;
  47.         int c;
  48.         int slot = 0;
  49.         int eqpos = -1;
  50.         String MimeType = null;
  51.         String Command = null;
  52.         String TempName = null;
  53.         while ((c = is.read()) >= 0) {
  54.         if (c == ';' || c == '\n') {
  55.             while (i > 0 && b[i - 1] < ' ')
  56.             i--;
  57.             if (slot <= 1) {
  58.             String s;
  59.             if (slot == 0 && i > 0 && b[i - 1] == '*')
  60.                 i--;/* '*' is recognized by the trailing slash */
  61.             if (i == 0)
  62.                 s = "";
  63.             else
  64.                 s = String.copyValueOf(b, 0, i);
  65.             if (slot == 0)
  66.                 MimeType = s;
  67.             else
  68.                 Command = s;
  69.             } else if (i > 0) {
  70.             String key;
  71.             String value;
  72.             if (eqpos >= 0) {
  73.                 key = String.valueOf(b, 0, eqpos);
  74.                 value = String.copyValueOf(b, eqpos + 1, i - eqpos - 1);
  75.             } else {
  76.                 key = String.valueOf(b, 0, i);
  77.                 value = null;
  78.             }
  79.             if (key.equalsIgnoreCase("nametemplate"))
  80.                 TempName = value;
  81.             }
  82.             slot++;
  83.             i = 0;
  84.             if (c == '\n') {
  85.             if (slot >= 2)
  86.                 add(new MimeEntry(MimeType.toLowerCase(), Command, TempName));
  87.             slot = 0;
  88.             }
  89.         } else if (c == '#' && i == 0) {
  90.             while ((c = is.read()) >= 0 && c != '\n');
  91.         } else {
  92.             if (c == '\\') {
  93.             c = is.read();
  94.             if (c == '\n')    /* line  continuation */
  95.                 continue;
  96.             }
  97.             if ((c > ' ' || i > 0) && i < b.length) {
  98.             if (c == '=')
  99.                 eqpos = i;
  100.             b[i++] = (char) c;
  101.             }
  102.         }
  103.         }
  104.     } catch(Exception e) {
  105.     }
  106.     }
  107.  
  108.     abstract String TempTemplate();
  109. }
  110.