/*
* @(#)$Id: DivInGrammarState.java,v 1.1 2001/06/07 15:53:05 Bear Exp $
*
* Copyright 2001 Sun Microsystems, Inc. All Rights Reserved.
*
* This software is the proprietary information of Sun Microsystems, Inc.
* Use is subject to license terms.
*
*/
package com.sun.msv.reader.trex;
import com.sun.msv.util.StartTagInfo;
import com.sun.msv.grammar.Expression;
import com.sun.msv.reader.*;
/**
* Used to parse merged grammars. Also <div> element in the grammar element
* (of RELAX NG).
*
* DivInGrammarState itself should not be a ExpressionState. However, GrammarState,
* which is a derived class of this class, is a ExpressionState.
*
* Therefore this class has to extend ExpressionState.
*
* @author <a href="mailto:kohsuke.kawaguchi@eng.sun.com">Kohsuke KAWAGUCHI</a>
*/
public class DivInGrammarState extends ExpressionState implements ExpressionOwner {
protected final TREXBaseReader getReader() { return (TREXBaseReader)reader; }
protected Expression makeExpression() {
// this method doesn't provide any pattern
return null;
}
protected State createChildState( StartTagInfo tag ) {
if(tag.localName.equals("start")) return getReader().sfactory.start(this,tag);
if(tag.localName.equals("define")) return getReader().sfactory.define(this,tag);
if(tag.localName.equals("include")) return getReader().sfactory.includeGrammar(this,tag);
// div is available only for RELAX NG.
// The default implementation of divInGrammar returns null.
if(tag.localName.equals("div")) return getReader().sfactory.divInGrammar(this,tag);
return null;
}
// DefineState and StartState is implemented by using ExpressionState.
// By contract of that interface, this object has to implement ExpressionOwner.
public void onEndChild( Expression exp ) {} // do nothing.
}