home *** CD-ROM | disk | FTP | other *** search
/ Online Today 2000 January / Onto0100.iso / pc / JAVA / MSJAVX86.EXE / xmldso.cab / com / ms / xml / parser / Sequence.class (.txt) < prev    next >
Encoding:
Java Class File  |  1998-11-05  |  2.1 KB  |  111 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 Sequence extends Node {
  12.    Node left;
  13.    Node right;
  14.  
  15.    Sequence(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.          if (this.left.nullable()) {
  23.             super.first = (BitSet)this.left.firstpos(var1).clone();
  24.             super.first.or(this.right.firstpos(var1));
  25.          } else {
  26.             super.first = this.left.firstpos(var1);
  27.          }
  28.       }
  29.  
  30.       return super.first;
  31.    }
  32.  
  33.    BitSet lastpos(int var1) {
  34.       if (super.last == null) {
  35.          if (this.right.nullable()) {
  36.             super.last = (BitSet)this.left.lastpos(var1).clone();
  37.             super.last.or(this.right.lastpos(var1));
  38.          } else {
  39.             super.last = this.right.lastpos(var1);
  40.          }
  41.       }
  42.  
  43.       return super.last;
  44.    }
  45.  
  46.    Element toSchema(int var1, int var2, Element var3) {
  47.       ++var2;
  48.       if (var1 == 44) {
  49.          var3 = this.left.toSchema(44, var2, var3);
  50.          this.right.toSchema(44, var2, var3);
  51.       } else {
  52.          Element var4 = new ElementImpl(Name.create("GROUP", "XML"), 0);
  53.          var4.setAttribute(Name.create("GROUPTYPE", "XML"), "SEQ");
  54.          if (var1 == 63) {
  55.             var4.setAttribute(Name.create("OCCURS", "XML"), "OPTIONAL");
  56.          } else if (var1 == 42) {
  57.             var4.setAttribute(Name.create("OCCURS", "XML"), "STAR");
  58.          } else if (var1 == 43) {
  59.             var4.setAttribute(Name.create("OCCURS", "XML"), "PLUS");
  60.          }
  61.  
  62.          var4 = this.left.toSchema(44, var2, var4);
  63.          this.right.toSchema(44, var2, var4);
  64.          var3.addChild(var4, (Element)null);
  65.       }
  66.  
  67.       --var2;
  68.       return var3;
  69.    }
  70.  
  71.    void save(XMLOutputStream var1, int var2, int var3, Atom var4) throws IOException {
  72.       ++var3;
  73.       if (var2 == 44) {
  74.          this.left.save(var1, 44, var3, var4);
  75.          var1.write(44);
  76.          this.right.save(var1, 44, var3, var4);
  77.       } else {
  78.          var1.write(40);
  79.          this.left.save(var1, 44, var3, var4);
  80.          var1.write(44);
  81.          this.right.save(var1, 44, var3, var4);
  82.          var1.write(41);
  83.       }
  84.  
  85.       --var3;
  86.    }
  87.  
  88.    Node clone(ContentModel var1) {
  89.       return new Sequence(this.left.clone(var1), this.right.clone(var1));
  90.    }
  91.  
  92.    void calcfollowpos(BitSet[] var1) {
  93.       this.left.calcfollowpos(var1);
  94.       this.right.calcfollowpos(var1);
  95.       int var2 = var1.length;
  96.       BitSet var3 = this.left.lastpos(var2);
  97.       BitSet var4 = this.right.firstpos(var2);
  98.  
  99.       for(int var5 = var1.length - 1; var5 >= 0; --var5) {
  100.          if (var3.get(var5)) {
  101.             var1[var5].or(var4);
  102.          }
  103.       }
  104.  
  105.    }
  106.  
  107.    boolean nullable() {
  108.       return this.left.nullable() && this.right.nullable();
  109.    }
  110. }
  111.