1 /*****************************************************/
\r
2 /* This java file is a part of the */
\r
4 /* - Plouf's Java IRC Client - */
\r
6 /* Copyright (C) 2002 - 2005 Philippe Detournay */
\r
8 /* All contacts : theplouf@yahoo.com */
\r
10 /* PJIRC is free software; you can redistribute */
\r
11 /* it and/or modify it under the terms of the GNU */
\r
12 /* General Public License as published by the */
\r
13 /* Free Software Foundation; version 2 or later of */
\r
16 /* PJIRC is distributed in the hope that it will */
\r
17 /* be useful, but WITHOUT ANY WARRANTY; without */
\r
18 /* even the implied warranty of MERCHANTABILITY or */
\r
19 /* FITNESS FOR A PARTICULAR PURPOSE. See the GNU */
\r
20 /* General Public License for more details. */
\r
22 /* You should have received a copy of the GNU */
\r
23 /* General Public License along with PJIRC; if */
\r
24 /* not, write to the Free Software Foundation, */
\r
25 /* Inc., 59 Temple Place, Suite 330, Boston, */
\r
26 /* MA 02111-1307 USA */
\r
28 /*****************************************************/
\r
32 import java.io.BufferedReader;
\r
33 import java.io.IOException;
\r
34 import java.io.InputStream;
\r
35 import java.io.InputStreamReader;
\r
36 import java.util.Hashtable;
\r
39 * Provides text from langage file.
\r
41 public class FileTextProvider implements TextProvider {
\r
42 private Hashtable _mainlist;
\r
43 private Hashtable _backlist;
\r
46 * Create a new file text provider.
\r
49 * langage file name.
\r
51 * langage file encoding. Empty string for default encoding.
\r
53 * backup langage file name.
\r
54 * @param backencoding
\r
55 * backup langage file encoding. Empty string for default encoding.
\r
57 * a file handler to load file.
\r
59 public FileTextProvider(String fname, String encoding, String backname, String backencoding, FileHandler file) {
\r
60 _mainlist = new Hashtable();
\r
61 _backlist = new Hashtable();
\r
62 load(_mainlist, fname, encoding, file);
\r
63 load(_backlist, backname, backencoding, file);
\r
66 private void parse(Hashtable dest, String line) {
\r
68 int pos = line.indexOf(' ');
\r
71 String id = line.substring(0, pos);
\r
72 String end = line.substring(pos + 1).trim();
\r
73 if (line.indexOf('[') != -1) {
\r
74 pos = line.indexOf(']');
\r
77 end = line.substring(pos + 1).trim();
\r
79 int iid = Integer.parseInt(id, 16);
\r
80 end = replace(end, "\\s", " ");
\r
81 dest.put(new Integer(iid), end);
\r
82 } catch (Exception ex) {
\r
83 throw new RuntimeException(ex.toString());
\r
87 private void load(Hashtable dest, String fname, String encoding, FileHandler handler) {
\r
88 InputStream stream = handler.getInputStream(fname);
\r
92 BufferedReader reader = null;
\r
94 if (encoding.length() > 0)
\r
95 reader = new BufferedReader(new InputStreamReader(stream, encoding));
\r
97 reader = new BufferedReader(new InputStreamReader(stream));
\r
98 } catch (Exception ex) {
\r
103 String line = reader.readLine();
\r
104 while (line != null) {
\r
105 line = line.trim();
\r
106 if (line.length() > 0) {
\r
107 if (line.charAt(0) != '#') {
\r
111 line = reader.readLine();
\r
114 } catch (IOException ex) {
\r
115 ex.printStackTrace();
\r
120 private String replace(String on, String what, String with) {
\r
121 int pos = on.indexOf(what);
\r
123 String before = on.substring(0, pos);
\r
124 String after = on.substring(pos + what.length());
\r
125 on = before + with + after;
\r
126 pos = on.indexOf(what);
\r
132 public String getString(int code, String[] params) {
\r
133 String ans = (String) _mainlist.get(new Integer(code));
\r
135 ans = (String) _backlist.get(new Integer(code));
\r
137 ans = (String) _mainlist.get(new Integer(ERROR_NOT_DEFINED));
\r
139 ans = (String) _backlist.get(new Integer(ERROR_NOT_DEFINED));
\r
141 return getStringP(ERROR_NOT_DEFINED);
\r
142 for (int i = params.length - 1; i >= 0; i--)
\r
143 ans = replace(ans, "%" + (i + 1), params[i]);
\r
148 public String getString(int code) {
\r
149 return getString(code, new String[0]);
\r
153 public String getString(int code, String p1) {
\r
154 String p[] = { p1 };
\r
155 return getString(code, p);
\r
159 public String getString(int code, String p1, String p2) {
\r
160 String p[] = { p1, p2 };
\r
161 return getString(code, p);
\r
165 public String getString(int code, String p1, String p2, String p3) {
\r
166 String p[] = { p1, p2, p3 };
\r
167 return getString(code, p);
\r
170 private String getStringP(int code) {
\r
172 case ERROR_NOT_DEFINED:
\r
173 return "Undefined string";
\r