home *** CD-ROM | disk | FTP | other *** search
- package java.util;
-
- import java.io.BufferedReader;
- import java.io.BufferedWriter;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.InputStreamReader;
- import java.io.OutputStream;
- import java.io.OutputStreamWriter;
- import java.io.PrintStream;
- import java.io.PrintWriter;
- import java.io.Writer;
-
- public class Properties extends Hashtable {
- private static final long serialVersionUID = 4112578634029874840L;
- protected Properties defaults;
- private static final String keyValueSeparators = "=: \t\r\n\f";
- private static final String strictKeyValueSeparators = "=:";
- private static final String specialSaveChars = "=: \t\r\n\f#!";
- private static final String whiteSpaceChars = " \t\r\n\f";
- private static final char[] hexDigit = new char[]{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
-
- public Properties() {
- this((Properties)null);
- }
-
- public Properties(Properties var1) {
- this.defaults = var1;
- }
-
- public synchronized Object setProperty(String var1, String var2) {
- return ((Hashtable)this).put(var1, var2);
- }
-
- public synchronized void load(InputStream var1) throws IOException {
- BufferedReader var2 = new BufferedReader(new InputStreamReader(var1, "8859_1"));
-
- while(true) {
- String var3 = var2.readLine();
- if (var3 == null) {
- return;
- }
-
- if (var3.length() > 0) {
- char var4 = var3.charAt(0);
- if (var4 != '#' && var4 != '!') {
- while(this.continueLine(var3)) {
- String var5 = var2.readLine();
- if (var5 == null) {
- var5 = new String("");
- }
-
- String var6 = var3.substring(0, var3.length() - 1);
- int var7 = 0;
-
- for(var7 = 0; var7 < var5.length() && " \t\r\n\f".indexOf(var5.charAt(var7)) != -1; ++var7) {
- }
-
- var5 = var5.substring(var7, var5.length());
- var3 = new String(var6 + var5);
- }
-
- int var12 = var3.length();
-
- int var13;
- for(var13 = 0; var13 < var12 && " \t\r\n\f".indexOf(var3.charAt(var13)) != -1; ++var13) {
- }
-
- if (var13 != var12) {
- int var15;
- for(var15 = var13; var15 < var12; ++var15) {
- char var8 = var3.charAt(var15);
- if (var8 == '\\') {
- ++var15;
- } else if ("=: \t\r\n\f".indexOf(var8) != -1) {
- break;
- }
- }
-
- int var16;
- for(var16 = var15; var16 < var12 && " \t\r\n\f".indexOf(var3.charAt(var16)) != -1; ++var16) {
- }
-
- if (var16 < var12 && "=:".indexOf(var3.charAt(var16)) != -1) {
- ++var16;
- }
-
- while(var16 < var12 && " \t\r\n\f".indexOf(var3.charAt(var16)) != -1) {
- ++var16;
- }
-
- String var9 = var3.substring(var13, var15);
- String var10 = var15 < var12 ? var3.substring(var16, var12) : "";
- var9 = this.loadConvert(var9);
- var10 = this.loadConvert(var10);
- ((Hashtable)this).put(var9, var10);
- }
- }
- }
- }
- }
-
- private boolean continueLine(String var1) {
- int var2 = 0;
-
- for(int var3 = var1.length() - 1; var3 >= 0 && var1.charAt(var3--) == '\\'; ++var2) {
- }
-
- return var2 % 2 == 1;
- }
-
- private String loadConvert(String var1) {
- int var3 = var1.length();
- StringBuffer var4 = new StringBuffer(var3);
- int var5 = 0;
-
- while(var5 < var3) {
- char var2 = var1.charAt(var5++);
- if (var2 == '\\') {
- var2 = var1.charAt(var5++);
- if (var2 == 'u') {
- int var6 = 0;
-
- for(int var7 = 0; var7 < 4; ++var7) {
- var2 = var1.charAt(var5++);
- switch (var2) {
- case '0':
- case '1':
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9':
- var6 = (var6 << 4) + var2 - 48;
- break;
- case ':':
- case ';':
- case '<':
- case '=':
- case '>':
- case '?':
- case '@':
- case 'G':
- case 'H':
- case 'I':
- case 'J':
- case 'K':
- case 'L':
- case 'M':
- case 'N':
- case 'O':
- case 'P':
- case 'Q':
- case 'R':
- case 'S':
- case 'T':
- case 'U':
- case 'V':
- case 'W':
- case 'X':
- case 'Y':
- case 'Z':
- case '[':
- case '\\':
- case ']':
- case '^':
- case '_':
- case '`':
- default:
- throw new IllegalArgumentException("Malformed \\uxxxx encoding.");
- case 'A':
- case 'B':
- case 'C':
- case 'D':
- case 'E':
- case 'F':
- var6 = (var6 << 4) + 10 + var2 - 65;
- break;
- case 'a':
- case 'b':
- case 'c':
- case 'd':
- case 'e':
- case 'f':
- var6 = (var6 << 4) + 10 + var2 - 97;
- }
- }
-
- var4.append((char)var6);
- } else {
- if (var2 == 't') {
- var2 = '\t';
- } else if (var2 == 'r') {
- var2 = '\r';
- } else if (var2 == 'n') {
- var2 = '\n';
- } else if (var2 == 'f') {
- var2 = '\f';
- }
-
- var4.append(var2);
- }
- } else {
- var4.append(var2);
- }
- }
-
- return var4.toString();
- }
-
- private String saveConvert(String var1, boolean var2) {
- int var3 = var1.length();
- StringBuffer var4 = new StringBuffer(var3 * 2);
-
- for(int var5 = 0; var5 < var3; ++var5) {
- char var6 = var1.charAt(var5);
- switch (var6) {
- case '\t':
- var4.append('\\');
- var4.append('t');
- break;
- case '\n':
- var4.append('\\');
- var4.append('n');
- break;
- case '\f':
- var4.append('\\');
- var4.append('f');
- break;
- case '\r':
- var4.append('\\');
- var4.append('r');
- break;
- case ' ':
- if (var5 == 0 || var2) {
- var4.append('\\');
- }
-
- var4.append(' ');
- break;
- case '\\':
- var4.append('\\');
- var4.append('\\');
- break;
- default:
- if (var6 >= ' ' && var6 <= '~') {
- if ("=: \t\r\n\f#!".indexOf(var6) != -1) {
- var4.append('\\');
- }
-
- var4.append(var6);
- } else {
- var4.append('\\');
- var4.append('u');
- var4.append(toHex(var6 >> 12 & 15));
- var4.append(toHex(var6 >> 8 & 15));
- var4.append(toHex(var6 >> 4 & 15));
- var4.append(toHex(var6 & 15));
- }
- }
- }
-
- return var4.toString();
- }
-
- public synchronized void save(OutputStream var1, String var2) {
- try {
- this.store(var1, var2);
- } catch (IOException var4) {
- }
-
- }
-
- public synchronized void store(OutputStream var1, String var2) throws IOException {
- BufferedWriter var3 = new BufferedWriter(new OutputStreamWriter(var1, "8859_1"));
- if (var2 != null) {
- writeln(var3, "#" + var2);
- }
-
- writeln(var3, "#" + (new Date()).toString());
- Enumeration var4 = ((Hashtable)this).keys();
-
- while(var4.hasMoreElements()) {
- String var5 = (String)var4.nextElement();
- String var6 = (String)((Hashtable)this).get(var5);
- var5 = this.saveConvert(var5, true);
- var6 = this.saveConvert(var6, false);
- writeln(var3, var5 + "=" + var6);
- }
-
- var3.flush();
- }
-
- private static void writeln(BufferedWriter var0, String var1) throws IOException {
- ((Writer)var0).write(var1);
- var0.newLine();
- }
-
- public String getProperty(String var1) {
- Object var2 = super.get(var1);
- String var3 = var2 instanceof String ? (String)var2 : null;
- return var3 == null && this.defaults != null ? this.defaults.getProperty(var1) : var3;
- }
-
- public String getProperty(String var1, String var2) {
- String var3 = this.getProperty(var1);
- return var3 == null ? var2 : var3;
- }
-
- public Enumeration propertyNames() {
- Hashtable var1 = new Hashtable();
- this.enumerate(var1);
- return var1.keys();
- }
-
- public void list(PrintStream var1) {
- var1.println("-- listing properties --");
- Hashtable var2 = new Hashtable();
- this.enumerate(var2);
-
- String var4;
- String var5;
- for(Enumeration var3 = var2.keys(); var3.hasMoreElements(); var1.println(var4 + "=" + var5)) {
- var4 = (String)var3.nextElement();
- var5 = (String)var2.get(var4);
- if (var5.length() > 40) {
- var5 = var5.substring(0, 37) + "...";
- }
- }
-
- }
-
- public void list(PrintWriter var1) {
- var1.println("-- listing properties --");
- Hashtable var2 = new Hashtable();
- this.enumerate(var2);
-
- String var4;
- String var5;
- for(Enumeration var3 = var2.keys(); var3.hasMoreElements(); var1.println(var4 + "=" + var5)) {
- var4 = (String)var3.nextElement();
- var5 = (String)var2.get(var4);
- if (var5.length() > 40) {
- var5 = var5.substring(0, 37) + "...";
- }
- }
-
- }
-
- private synchronized void enumerate(Hashtable var1) {
- if (this.defaults != null) {
- this.defaults.enumerate(var1);
- }
-
- Enumeration var2 = ((Hashtable)this).keys();
-
- while(var2.hasMoreElements()) {
- String var3 = (String)var2.nextElement();
- var1.put(var3, ((Hashtable)this).get(var3));
- }
-
- }
-
- private static char toHex(int var0) {
- return hexDigit[var0 & 15];
- }
- }
-