home *** CD-ROM | disk | FTP | other *** search
/ Cre@te Online 2000 December / Cre@teOnline CD05.iso / MacSoft / XML ConsoleMax.sea / XML ConsoleMax / Required / parser.jar / com / sun / xml / parser / ContentModelState.class (.txt) < prev    next >
Encoding:
Java Class File  |  2000-02-23  |  1.9 KB  |  124 lines

  1. package com.sun.xml.parser;
  2.  
  3. class ContentModelState {
  4.    private ContentModel model;
  5.    private boolean sawOne;
  6.    private ContentModelState next;
  7.  
  8.    ContentModelState(ContentModel var1) {
  9.       this(var1, (ContentModelState)null);
  10.    }
  11.  
  12.    private ContentModelState(Object var1, ContentModelState var2) {
  13.       this.model = (ContentModel)var1;
  14.       this.next = var2;
  15.       this.sawOne = false;
  16.    }
  17.  
  18.    ContentModelState advance(String var1) throws EndOfInputException {
  19.       switch (this.model.type) {
  20.          case '\u0000':
  21.             if (this.model.content == var1) {
  22.                return this.next;
  23.             }
  24.             break;
  25.          case '*':
  26.          case '+':
  27.             if (this.model.first(var1)) {
  28.                this.sawOne = true;
  29.                if (this.model.content instanceof String) {
  30.                   return this;
  31.                }
  32.  
  33.                return (new ContentModelState(this.model.content, this)).advance(var1);
  34.             }
  35.  
  36.             if ((this.model.type == '*' || this.sawOne) && this.next != null) {
  37.                return this.next.advance(var1);
  38.             }
  39.             break;
  40.          case ',':
  41.             if (this.model.first(var1)) {
  42.                if (this.model.type == 0) {
  43.                   return this.next;
  44.                }
  45.  
  46.                ContentModelState var3;
  47.                if (this.model.next == null) {
  48.                   var3 = new ContentModelState(this.model.content, this.next);
  49.                } else {
  50.                   var3 = new ContentModelState(this.model.content, this);
  51.                   this.model = this.model.next;
  52.                }
  53.  
  54.                return var3.advance(var1);
  55.             }
  56.  
  57.             if (this.model.empty() && this.next != null) {
  58.                return this.next.advance(var1);
  59.             }
  60.             break;
  61.          case '?':
  62.             if (this.model.first(var1)) {
  63.                if (this.model.content instanceof String) {
  64.                   return this.next;
  65.                }
  66.  
  67.                return (new ContentModelState(this.model.content, this.next)).advance(var1);
  68.             }
  69.  
  70.             if (this.next != null) {
  71.                return this.next.advance(var1);
  72.             }
  73.             break;
  74.          case '|':
  75.             for(ContentModel var2 = this.model; var2 != null; var2 = var2.next) {
  76.                if (var2.content instanceof String) {
  77.                   if (var1 == var2.content) {
  78.                      return this.next;
  79.                   }
  80.                } else if (((ContentModel)var2.content).first(var1)) {
  81.                   return (new ContentModelState(var2.content, this.next)).advance(var1);
  82.                }
  83.             }
  84.  
  85.             if (this.model.empty() && this.next != null) {
  86.                return this.next.advance(var1);
  87.             }
  88.       }
  89.  
  90.       throw new EndOfInputException();
  91.    }
  92.  
  93.    boolean terminate() {
  94.       switch (this.model.type) {
  95.          case '\u0000':
  96.             return false;
  97.          case '*':
  98.          case '?':
  99.             break;
  100.          case '+':
  101.             if (!this.sawOne && !this.model.empty()) {
  102.                return false;
  103.             }
  104.             break;
  105.          case ',':
  106.             ContentModel var1;
  107.             for(var1 = this.model; var1 != null && var1.empty(); var1 = var1.next) {
  108.             }
  109.  
  110.             if (var1 != null) {
  111.                return false;
  112.             }
  113.  
  114.             return this.next == null || this.next.terminate();
  115.          case '|':
  116.             return this.model.empty() && (this.next == null || this.next.terminate());
  117.          default:
  118.             throw new InternalError();
  119.       }
  120.  
  121.       return this.next == null || this.next.terminate();
  122.    }
  123. }
  124.