KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > lowagie > text > html > simpleparser > ChainedProperties


1 /*
2  * Copyright 2004 Paulo Soares
3  *
4  * The contents of this file are subject to the Mozilla Public License Version 1.1
5  * (the "License"); you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at http://www.mozilla.org/MPL/
7  *
8  * Software distributed under the License is distributed on an "AS IS" basis,
9  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
10  * for the specific language governing rights and limitations under the License.
11  *
12  * The Original Code is 'iText, a free JAVA-PDF library'.
13  *
14  * The Initial Developer of the Original Code is Bruno Lowagie. Portions created by
15  * the Initial Developer are Copyright (C) 1999, 2000, 2001, 2002 by Bruno Lowagie.
16  * All Rights Reserved.
17  * Co-Developer of the code is Paulo Soares. Portions created by the Co-Developer
18  * are Copyright (C) 2000, 2001, 2002 by Paulo Soares. All Rights Reserved.
19  *
20  * Contributor(s): all the names of the contributors are added in the source code
21  * where applicable.
22  *
23  * Alternatively, the contents of this file may be used under the terms of the
24  * LGPL license (the "GNU LIBRARY GENERAL PUBLIC LICENSE"), in which case the
25  * provisions of LGPL are applicable instead of those above. If you wish to
26  * allow use of your version of this file only under the terms of the LGPL
27  * License and not to allow others to use your version of this file under
28  * the MPL, indicate your decision by deleting the provisions above and
29  * replace them with the notice and other provisions required by the LGPL.
30  * If you do not delete the provisions above, a recipient may use your version
31  * of this file under either the MPL or the GNU LIBRARY GENERAL PUBLIC LICENSE.
32  *
33  * This library is free software; you can redistribute it and/or modify it
34  * under the terms of the MPL as stated above or under the terms of the GNU
35  * Library General Public License as published by the Free Software Foundation;
36  * either version 2 of the License, or any later version.
37  *
38  * This library is distributed in the hope that it will be useful, but WITHOUT
39  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
40  * FOR A PARTICULAR PURPOSE. See the GNU Library general Public License for more
41  * details.
42  *
43  * If you didn't download this code from the following link, you should check if
44  * you aren't using an obsolete version:
45  * http://www.lowagie.com/iText/
46  */

47
48 package com.lowagie.text.html.simpleparser;
49
50 import java.util.ArrayList JavaDoc;
51 import java.util.HashMap JavaDoc;
52
53 public class ChainedProperties {
54     
55     public final static int fontSizes[] = {8, 10, 12, 14, 18, 24, 36};
56     public ArrayList JavaDoc chain = new ArrayList JavaDoc();
57     
58     /** Creates a new instance of ChainedProperties */
59     public ChainedProperties() {
60     }
61     
62     public String JavaDoc getProperty(String JavaDoc key) {
63         for (int k = chain.size() - 1; k >= 0; --k) {
64             Object JavaDoc obj[] = (Object JavaDoc[])chain.get(k);
65             HashMap JavaDoc prop = (HashMap JavaDoc)obj[1];
66             String JavaDoc ret = (String JavaDoc)prop.get(key);
67             if (ret != null)
68                 return ret;
69         }
70         return null;
71     }
72     
73     public boolean hasProperty(String JavaDoc key) {
74         for (int k = chain.size() - 1; k >= 0; --k) {
75             Object JavaDoc obj[] = (Object JavaDoc[])chain.get(k);
76             HashMap JavaDoc prop = (HashMap JavaDoc)obj[1];
77             if (prop.containsKey(key))
78                 return true;
79         }
80         return false;
81     }
82     
83     public void addToChain(String JavaDoc key, HashMap JavaDoc prop) {
84         // adjust the font size
85
String JavaDoc value = (String JavaDoc)prop.get("size");
86         if (value != null) {
87             if (value.endsWith("px")) {
88                 prop.put("size", value.substring(0, value.length() - 2));
89             }
90             else {
91                 int s = 0;
92                 if (value.startsWith("+") || value.startsWith("-")) {
93                     String JavaDoc old = getProperty("basefontsize");
94                     if (old == null)
95                         old = "12";
96                     float f = Float.parseFloat(old);
97                     int c = (int)f;
98                     for (int k = fontSizes.length - 1; k >= 0; --k) {
99                         if (c >= fontSizes[k]) {
100                             s = k;
101                             break;
102                         }
103                     }
104                     int inc = Integer.parseInt(value.startsWith("+") ? value.substring(1) : value);
105                     s += inc;
106                 }
107                 else {
108                     try {
109                         s = Integer.parseInt(value) - 1;
110                     }
111                     catch(NumberFormatException JavaDoc nfe) {
112                         s = 0;
113                     }
114                 }
115                 if (s < 0)
116                     s = 0;
117                 else if (s >= fontSizes.length)
118                     s = fontSizes.length - 1;
119                 prop.put("size", Integer.toString(fontSizes[s]));
120             }
121         }
122         chain.add(new Object JavaDoc[]{key, prop});
123     }
124     
125     public void removeChain(String JavaDoc key) {
126         for (int k = chain.size() - 1; k >= 0; --k) {
127             if (key.equals(((Object JavaDoc[])chain.get(k))[0])) {
128                 chain.remove(k);
129                 return;
130             }
131         }
132     }
133 }
134
Popular Tags