home *** CD-ROM | disk | FTP | other *** search
/ Online Today 2000 January / Onto0100.iso / pc / JAVA / MSJAVX86.EXE / xmldso.cab / com / ms / xml / parser / Choice.class (.txt) < prev    next >
Encoding:
Java Class File  |  1998-11-05  |  2.0 KB  |  92 lines

  1. package com.ms.xml.parser;
  2.  
  3. import com.ms.xml.om.Element;
  4. import com.ms.xml.om.ElementImpl;
  5. import com.ms.xml.util.Atom;
  6. import com.ms.xml.util.Name;
  7. import com.ms.xml.util.XMLOutputStream;
  8. import java.io.IOException;
  9. import java.util.BitSet;
  10.  
  11. class Choice extends Node {
  12.    Node left;
  13.    Node right;
  14.  
  15.    Choice(Node var1, Node var2) {
  16.       this.left = var1;
  17.       this.right = var2;
  18.    }
  19.  
  20.    BitSet firstpos(int var1) {
  21.       if (super.first == null) {
  22.          super.first = (BitSet)this.left.firstpos(var1).clone();
  23.          super.first.or(this.right.firstpos(var1));
  24.       }
  25.  
  26.       return super.first;
  27.    }
  28.  
  29.    BitSet lastpos(int var1) {
  30.       if (super.last == null) {
  31.          super.last = (BitSet)this.left.lastpos(var1).clone();
  32.          super.last.or(this.right.lastpos(var1));
  33.       }
  34.  
  35.       return super.last;
  36.    }
  37.  
  38.    Element toSchema(int var1, int var2, Element var3) {
  39.       if (var1 == 124) {
  40.          var3 = this.left.toSchema(124, var2, var3);
  41.          this.right.toSchema(124, var2, var3);
  42.       } else {
  43.          Element var4 = new ElementImpl(Name.create("GROUP", "XML"), 0);
  44.          var4.setAttribute(Name.create("GROUPTYPE", "XML"), "OR");
  45.          if (var1 == 63) {
  46.             var4.setAttribute(Name.create("OCCURS", "XML"), "OPTIONAL");
  47.          } else if (var1 == 42) {
  48.             var4.setAttribute(Name.create("OCCURS", "XML"), "STAR");
  49.          } else if (var1 == 43) {
  50.             var4.setAttribute(Name.create("OCCURS", "XML"), "PLUS");
  51.          }
  52.  
  53.          var4 = this.left.toSchema(124, var2, var4);
  54.          this.right.toSchema(124, var2, var4);
  55.          var3.addChild(var4, (Element)null);
  56.       }
  57.  
  58.       --var2;
  59.       return var3;
  60.    }
  61.  
  62.    void save(XMLOutputStream var1, int var2, int var3, Atom var4) throws IOException {
  63.       ++var3;
  64.       if (var2 == 124) {
  65.          this.left.save(var1, 124, var3, var4);
  66.          var1.write(124);
  67.          this.right.save(var1, 124, var3, var4);
  68.       } else {
  69.          var1.write(40);
  70.          this.left.save(var1, 124, var3, var4);
  71.          var1.write(124);
  72.          this.right.save(var1, 124, var3, var4);
  73.          var1.write(41);
  74.       }
  75.  
  76.       --var3;
  77.    }
  78.  
  79.    Node clone(ContentModel var1) {
  80.       return new Choice(this.left.clone(var1), this.right.clone(var1));
  81.    }
  82.  
  83.    void calcfollowpos(BitSet[] var1) {
  84.       this.left.calcfollowpos(var1);
  85.       this.right.calcfollowpos(var1);
  86.    }
  87.  
  88.    boolean nullable() {
  89.       return this.left.nullable() || this.right.nullable();
  90.    }
  91. }
  92.