KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > ecs > wml > WMLOutRenderer


1 /*
2  * ====================================================================
3  *
4  * The Apache Software License, Version 1.1
5  *
6  * Copyright (c) 2000-2003 The Apache Software Foundation. All rights
7  * reserved.
8  *
9  * Redistribution and use in source and binary forms, with or without
10  * modification, are permitted provided that the following conditions
11  * are met:
12  *
13  * 1. Redistributions of source code must retain the above copyright
14  * notice, this list of conditions and the following disclaimer.
15  *
16  * 2. Redistributions in binary form must reproduce the above copyright
17  * notice, this list of conditions and the following disclaimer in
18  * the documentation and/or other materials provided with the
19  * distribution.
20  *
21  * 3. The end-user documentation included with the redistribution, if
22  * any, must include the following acknowlegement:
23  * "This product includes software developed by the
24  * Apache Software Foundation (http://www.apache.org/)."
25  * Alternately, this acknowlegement may appear in the software itself,
26  * if and wherever such third-party acknowlegements normally appear.
27  *
28  * 4. The names "The Jakarta Project", "Jakarta Element Construction Set",
29  * "Jakarta ECS" , and "Apache Software Foundation" must not be used
30  * to endorse or promote products derived
31  * from this software without prior written permission. For written
32  * permission, please contact apache@apache.org.
33  *
34  * 5. Products derived from this software may not be called "Apache",
35  * "Jakarta Element Construction Set" nor "Jakarta ECS" nor may "Apache"
36  * appear in their names without prior written permission of the Apache Group.
37  *
38  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
39  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
40  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
41  * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
42  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
43  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
44  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
45  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
46  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
47  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
48  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
49  * SUCH DAMAGE.
50  * ====================================================================
51  *
52  * This software consists of voluntary contributions made by many
53  * individuals on behalf of the Apache Software Foundation. For more
54  * information on the Apache Software Foundation, please see
55  * <http://www.apache.org/>.
56  *
57  */

58 package org.apache.ecs.wml;
59
60 /**
61     The class WMLOutRenderer contains static methods that takes
62     unstructured strings of WML code and returns structured
63     strings of WML code.
64  
65     @author Written by <a HREF="mailto:Anders.Samuelson@aspiro.com">Anders.Samuelson</a>
66     @author Modifications by <a HREF="mailto:Orjan.Petersson@ehpt.com">Örjan Petersson</a>
67  */

68 public class WMLOutRenderer
69 {
70     
71     /** The name of this class. */
72     private static final String JavaDoc className = "WMLOutRenderer";
73
74     private static final String JavaDoc[] indentArray = {"", " ", " ", " ", " ", " "};
75
76     private static final char EXCLAMATION_MARK = '!';
77     private static final char LESS_THEN = '<';
78     private static final char GREATER_THEN = '>';
79     private static final char SLASH = '/';
80     private static final char QUESTION_MARK = '?';
81     private static final int MAX_INDENT_LEVEL = indentArray.length - 1;
82     
83     /**
84     Adds structure to a 'raw' WML string.
85     @param inString unstructured WML string.
86     @return structured WML string
87       */

88     public static String JavaDoc parse(String JavaDoc inString)
89     {
90     boolean indentChanged = false;
91     boolean proceed = true;
92     char[] charArray = inString.toCharArray();
93     int indentLevel = 0;
94     int lastLTIndex = 0;
95     int lastGTIndex = 0;
96     StringBuffer JavaDoc out = new StringBuffer JavaDoc();
97     
98     while (proceed) {
99         indentChanged = false;
100         lastLTIndex = inString.indexOf(LESS_THEN, lastGTIndex);
101         
102         if (lastLTIndex != -1) {
103         if ((lastLTIndex - lastGTIndex) > 1) {
104             out.append(indentArray[indentLevel]).append(
105             inString.substring(lastGTIndex + 1, lastLTIndex)).append("\n");
106         }
107             
108         lastGTIndex = inString.indexOf(GREATER_THEN, lastLTIndex);
109         
110         if (charArray[lastLTIndex + 1] == SLASH) {
111             indentChanged = true;
112             indentLevel--;
113         }
114             
115         out.append(indentArray[indentLevel]).append(
116             inString.substring(lastLTIndex, lastGTIndex + 1)).append("\n");
117             
118         if (charArray[lastGTIndex - 1] != SLASH &&
119             charArray[lastLTIndex + 1] != EXCLAMATION_MARK &&
120             charArray[lastLTIndex + 1] != QUESTION_MARK && !indentChanged) {
121             indentLevel = (indentLevel < MAX_INDENT_LEVEL) ?
122                             indentLevel + 1 : MAX_INDENT_LEVEL;
123         }
124         } else {
125         proceed = false;
126         }
127     }
128     
129     return out.toString();
130     }
131 }
132
Popular Tags