home *** CD-ROM | disk | FTP | other *** search
- package allaire.util.template;
-
- import allaire.util.TextUtils;
- import netscape.util.Enumeration;
- import netscape.util.Vector;
-
- class LoopElement extends TemplateTagElement {
- private static final int LOOP_LIST = 0;
- private static final int LOOP_INDEX = 1;
- private static final int LOOP_CONDITION = 2;
- private static final String INDEX = "INDEX";
- private static final String FROM = "FROM";
- // $FF: renamed from: TO java.lang.String
- private static final String field_0 = "TO";
- private static final String STEP = "STEP";
- private static final String LIST = "LIST";
- private static final String CONDITION = "CONDITION";
-
- private void doIndexLoop(String var1, int var2, int var3, int var4, TemplateOutput var5) throws TemplateException {
- Vector var6 = new Vector();
-
- for(int var7 = var2; var7 <= var3; var7 += var4) {
- var6.addElement(String.valueOf(var7));
- }
-
- this.doListLoop(var1, var6, var5);
- }
-
- public void process(TemplateOutput var1) throws TemplateException {
- try {
- this.doLoop(var1);
- } catch (LoopBreakException var2) {
- }
- }
-
- private void stripTrailingSpaces() {
- Vector var1 = ((TemplateTagElement)this).getSubElements();
- if (var1.size() > 0) {
- TemplateElement var2 = (TemplateElement)var1.lastElement();
- if (var2 instanceof TextElement) {
- TextElement var3 = (TextElement)var2;
- String var4 = var3.getText();
- int var5 = var4.length();
-
- for(int var6 = var5 - 1; var6 >= 0; --var6) {
- char var7 = var4.charAt(var6);
- if (!Character.isSpace(var7)) {
- break;
- }
-
- if (var7 == '\n') {
- var4 = var4.substring(0, var6 + 1);
- var3.setText(var4);
- return;
- }
- }
- }
- }
-
- }
-
- private void doLoop(TemplateOutput var1) throws TemplateException {
- this.stripLeadingNewline();
- this.stripTrailingSpaces();
- TagAttributes var2 = ((TemplateTagElement)this).getAttributesRaw();
- String var3 = var2.get("CONDITION");
- if (var3 != null) {
- this.doConditionalLoop(var3, var1);
- } else {
- String var4 = var2.get("LIST");
- if (var4 != null) {
- String var10 = var2.getRequired("INDEX");
- Vector var11 = TextUtils.getListElements(((TemplateElement)this).resolveExpressionsInText(var4));
- this.doListLoop(var10, var11, var1);
- } else {
- String var5 = var2.getRequired("INDEX");
- int var6 = Integer.parseInt(((TemplateElement)this).resolveExpressionsInText(var2.getRequired("FROM")));
- int var7 = Integer.parseInt(((TemplateElement)this).resolveExpressionsInText(var2.getRequired("TO")));
- int var8 = 1;
- String var9 = var2.get("STEP");
- if (var9 != null) {
- var8 = Integer.parseInt(((TemplateElement)this).resolveExpressionsInText(var9));
- }
-
- this.doIndexLoop(var5, var6, var7, var8, var1);
- }
- }
- }
-
- private void doListLoop(String var1, Vector var2, TemplateOutput var3) throws TemplateException {
- Enumeration var4 = var2.elements();
-
- while(var4.hasMoreElements()) {
- String var5 = (String)var4.nextElement();
- SymbolTable var6 = ((TemplateElement)this).getParser().getRuntimeContext().getSymbolTable();
- var6.set(var1, var5);
-
- try {
- this.processChildren(var3);
- } catch (LoopContinueException var7) {
- }
- }
-
- }
-
- private void doConditionalLoop(String var1, TemplateOutput var2) throws TemplateException {
- while(((TemplateTagElement)this).evaluateExpression(var1)) {
- try {
- this.processChildren(var2);
- } catch (LoopContinueException var3) {
- }
- }
-
- }
-
- private void processChildren(TemplateOutput var1) throws TemplateException {
- Enumeration var2 = ((TemplateTagElement)this).getSubElements().elements();
-
- while(var2.hasMoreElements()) {
- TemplateElement var3 = (TemplateElement)var2.nextElement();
- var3.process(var1);
- }
-
- }
-
- private void stripLeadingNewline() {
- Vector var1 = ((TemplateTagElement)this).getSubElements();
- if (var1.size() > 0) {
- TemplateElement var2 = (TemplateElement)var1.elementAt(0);
- if (var2 instanceof TextElement) {
- TextElement var3 = (TextElement)var2;
- String var4 = var3.getText();
- int var5 = var4.length();
-
- for(int var6 = 0; var6 < var5; ++var6) {
- char var7 = var4.charAt(var6);
- if (!Character.isSpace(var7)) {
- break;
- }
-
- if (var7 == '\n') {
- var4 = var4.substring(Math.min(var6 + 1, var5 - 1));
- var3.setText(var4);
- return;
- }
- }
- }
- }
-
- }
- }
-