-// Copyright 2003 Adam Megacz, see the COPYING file for licensing [GPL]
+// Copyright (C) 2003 Adam Megacz <adam@xwt.org> all rights reserved.
+//
+// You may modify, copy, and redistribute this code under the terms of
+// the GNU Library Public License version 2.1, with the exception of
+// the portion of clause 6a after the semicolon (aka the "obnoxious
+// relink clause")
+
package org.xwt.util;
import java.util.*;
} else if (trimmed.startsWith("//#switch")) {
int expStart = trimmed.indexOf('(') +1;
if (expStart < 1) { err.add(new Error("expected ( in #switch")); continue PROCESS; }
- int expEnd = trimmed.indexOf(')');
+ int expEnd = trimmed.lastIndexOf(')');
if (expEnd == -1) { err.add(new Error("expected ) in #switch")); continue PROCESS; }
if (expEnd - expStart <= 1) { err.add(new Error("badly formed #switch statement")); continue PROCESS; }
String expr = trimmed.substring(expStart, expEnd);
- out.println("final String ccSwitch"+enumSwitch+" = (String)("+expr+");"+
- "switch(ccSwitch"+enumSwitch+".length()) {");
+ out.println("final String ccSwitch"+enumSwitch+" = (String)("+expr+");");
+ out.println("SUCCESS:do { switch(ccSwitch"+enumSwitch+".length()) {");
Hashtable[] byLength = new Hashtable[255];
String key = null;
buildTrie("", byLength[i]);
out.println("}; break; }");
}
- if (Default != null) out.println("default: { " + Default + " }");
out.println("} //switch");
+ if (Default != null) out.println(Default);
+ out.println("} while(false); //OUTER");
enumSwitch++;
} else {
String code = (String)cases.get(keys.elementAt(i));
code = code.substring(0, code.length() - 1);
String key = (String)keys.elementAt(i);
- out.println("if (\""+key+"\".equals(ccSwitch"+enumSwitch+")) { " + code + " } break; ");
+ out.println("if (\""+key+"\".equals(ccSwitch"+enumSwitch+")) { if (true) do { " + code + " } while(false); break SUCCESS; } break; ");
}
}
}