private RdpPattern makeSingle (RelaxngGrammar g) { // Flatten patterns into RdpGroup. See 4.12. if (patterns.Count == 0) throw new RelaxngException (this, "No pattern contents."); RdpPattern p = ((RelaxngPattern) patterns [0]).Compile (g); if (patterns.Count == 1) return p; for (int i=1; i<patterns.Count; i++) { p = new RdpGroup (p, ((RelaxngPattern) patterns [i]).Compile (g)); } return p; }
public RdpPattern MakeGroup (RdpPattern p1, RdpPattern p2) { if (p1.PatternType == RelaxngPatternType.Empty) return p2; Hashtable p1Table = setupTable (typeof (RdpGroup), p1); if (p1Table [p2] == null) { RdpGroup g = new RdpGroup (p1, p2); g.setInternTable (this.patternPool); p1Table [p2] = g; } return (RdpGroup) p1Table [p2]; }
internal RdpPattern makeBinary (RelaxngGrammar g) { // Flatten patterns. See 4.12. if (patterns.Count == 0) throw new RelaxngException (this, "No pattern contents."); RdpPattern p = ((RelaxngPattern) patterns [0]).Compile (g); if (patterns.Count == 1) return p; for (int i=1; i<patterns.Count; i++) { RdpPattern cp = ((RelaxngPattern) patterns [i]).Compile (g); switch (this.PatternType) { case RelaxngPatternType.Choice: p = new RdpChoice (p, cp); break; case RelaxngPatternType.Group: p = new RdpGroup (p, cp); break; case RelaxngPatternType.Interleave: p = new RdpInterleave (p, cp); break; } } return p; }