[Thinlet-development] Thinlet.java -> reading CDATA section
Brought to you by:
bajzat
From: Norbert B. <sj...@cl...> - 2004-04-21 22:57:15
|
Index: Thinlet.java =================================================================== RCS file: /cvsroot/thinlet/thinlet/src/java/thinlet/Thinlet.java,v retrieving revision 1.9 diff -b -d -u -r1.9 Thinlet.java --- Thinlet.java 20 Apr 2004 11:10:29 -0000 1.9 +++ Thinlet.java 21 Apr 2004 22:08:06 -0000 @@ -4203,7 +4203,7 @@ /** * */ - private boolean invoke(Object component, Object part, String event) { + protected boolean invoke(Object component, Object part, String event) { Object method = get(component, event); if (method != null) { invokeImpl(method, part); @@ -4742,7 +4742,7 @@ /** * */ - private static boolean set(Object component, Object key, Object value) { + protected static boolean set(Object component, Object key, Object value) { Object[] previous = (Object[]) component; for (Object[] entry = previous; entry != null; entry = (Object[]) entry[2]) { @@ -4770,7 +4770,7 @@ /** * */ - private static Object get(Object component, Object key) { + protected static Object get(Object component, Object key) { for (Object[] entry = (Object[]) component; entry != null; entry = (Object[]) entry[2]) { if (entry[0] == key) { @@ -4903,7 +4903,7 @@ /** * */ - private static int getItemCountImpl(Object component, String key) { + protected static int getItemCountImpl(Object component, String key) { int i = 0; for (Object comp = get(component, key); comp != null; comp = get(comp, ":next")) { i++; @@ -5000,7 +5000,7 @@ /** * Referenced by DOM */ - private void insertItem(Object parent, + protected void insertItem(Object parent, Object key, Object component, int index) { Object item = parent, next = get(parent, key); for (int i = 0;; i++) { @@ -5417,6 +5417,21 @@ this.resourcebundle = resourcebundle; } + /** extract a CDATA section, and call the addContent */ + private void extractCDATA(Reader reader, StringBuffer text) throws IOException { + int c; + while ((c = reader.read()) != ']') + text.append((char)c); + if((c = reader.read()) != ']'){ + text.append(']'); + text.append((char)c); + extractCDATA(reader, text); + } else if((c = reader.read()) != '>'){ + text.append(']'); + text.append((char)c); + extractCDATA(reader, text); + } + } /** * * @param inputstream @@ -5450,9 +5465,9 @@ characters(text.toString()); } } - // else { - //addContent(current, text.toString()); - //} + else { + addContent(current, text.toString()); + } text.setLength(0); } String tagname = (String) parentlist[2]; //getClass(current); @@ -5473,7 +5488,17 @@ current = parentlist[0]; parentlist = (Object[]) parentlist[1]; } - else if (c == '!') { // DOCTYPE + else if (c == '!') { // DOCTYPE or comment or CDATA + c = reader.read(); + if(c == '['){ + if (reader.read() != 'C' & reader.read() != 'D' & + reader.read() != 'A' & reader.read() != 'T' & + reader.read() != 'A' & reader.read() != '[') + throw new IllegalArgumentException("bad CDATA"); // '>' + text.setLength(0); + extractCDATA(reader, text); + c = reader.read(); + } else if(c != '>') while ((c = reader.read()) != '>'); //+(-1) } else if (c == '?') { // Processing Instructions @@ -5481,6 +5506,18 @@ while (((c = reader.read()) != '>') || !question) { question = (c == '?'); } } else { //start or standalone tag + if(text.length() != 0){ // manage pending CDATA + if (!validate) { + if (dom) { + set(current, ":text", text.toString()); + } else { + characters(text.toString()); + } + } + else { + addContent(current, text.toString()); + } + } text.setLength(0); boolean iscomment = false; while (">/ \t\n\r".indexOf(c) == -1) { @@ -5615,10 +5652,14 @@ } } + /** during the parse, add the following text content to the current component */ + protected void addContent(Object current, String text){ + + } /** * */ - private void finishParse(Vector methods, Object root, Object handler) { + protected void finishParse(Vector methods, Object root, Object handler) { if (methods != null) { for (int i = 0; i < methods.size(); i += 3) { Object component = methods.elementAt(i); @@ -5650,7 +5691,7 @@ * @param index add at the specified index * @throws java.lang.IllegalArgumentException */ - private void addImpl(Object parent, Object component, int index) { + protected void addImpl(Object parent, Object component, int index) { String parentclass = getClass(parent); String classname = getClass(component); if ((("combobox" == parentclass) && ("choice" == classname)) || @@ -5682,7 +5723,7 @@ /** * */ - private boolean instance(Object classname, Object extendclass) { + protected boolean instance(Object classname, Object extendclass) { if (classname == extendclass) { return true; } for (int i = 0; i < dtd.length; i += 3) { if (classname == dtd[i]) { @@ -6191,7 +6232,7 @@ /** * */ - private boolean setString(Object component, + protected boolean setString(Object component, String key, String value, String defaultvalue) { if (allI18n && (langResource != null) && ((key == "text") || (key == "tooltip"))) { @@ -6473,7 +6514,7 @@ return true; } - private static Object[] dtd; + protected static Object[] dtd; static { Integer integer_1 = new Integer(-1); Integer integer0 = new Integer(0); |