[Thinlet-development] Thinlet.java -> reading CDATA section
Brought to you by:
bajzat
|
From: Norbert B. <sj...@cl...> - 2004-04-22 11:17:36
|
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);
|