Package org.apache.xerces.impl

Source Code of org.apache.xerces.impl.XMLDocumentScannerImpl$XMLDeclDispatcher

package org.apache.xerces.impl;

import java.io.CharConversionException;
import java.io.EOFException;
import java.io.IOException;
import org.apache.xerces.impl.dtd.XMLDTDDescription;
import org.apache.xerces.impl.io.MalformedByteSequenceException;
import org.apache.xerces.impl.validation.ValidationManager;
import org.apache.xerces.util.NamespaceSupport;
import org.apache.xerces.util.SymbolTable;
import org.apache.xerces.util.XMLChar;
import org.apache.xerces.util.XMLResourceIdentifierImpl;
import org.apache.xerces.util.XMLStringBuffer;
import org.apache.xerces.xni.Augmentations;
import org.apache.xerces.xni.NamespaceContext;
import org.apache.xerces.xni.QName;
import org.apache.xerces.xni.XMLDocumentHandler;
import org.apache.xerces.xni.XMLResourceIdentifier;
import org.apache.xerces.xni.XMLString;
import org.apache.xerces.xni.XNIException;
import org.apache.xerces.xni.parser.XMLComponentManager;
import org.apache.xerces.xni.parser.XMLConfigurationException;
import org.apache.xerces.xni.parser.XMLDTDScanner;
import org.apache.xerces.xni.parser.XMLInputSource;

public class XMLDocumentScannerImpl extends XMLDocumentFragmentScannerImpl
{
  protected static final int SCANNER_STATE_XML_DECL = 0;
  protected static final int SCANNER_STATE_PROLOG = 5;
  protected static final int SCANNER_STATE_TRAILING_MISC = 12;
  protected static final int SCANNER_STATE_DTD_INTERNAL_DECLS = 17;
  protected static final int SCANNER_STATE_DTD_EXTERNAL = 18;
  protected static final int SCANNER_STATE_DTD_EXTERNAL_DECLS = 19;
  protected static final String LOAD_EXTERNAL_DTD = "http://apache.org/xml/features/nonvalidating/load-external-dtd";
  protected static final String DISALLOW_DOCTYPE_DECL_FEATURE = "http://apache.org/xml/features/disallow-doctype-decl";
  protected static final String DTD_SCANNER = "http://apache.org/xml/properties/internal/dtd-scanner";
  protected static final String VALIDATION_MANAGER = "http://apache.org/xml/properties/internal/validation-manager";
  protected static final String NAMESPACE_CONTEXT = "http://apache.org/xml/properties/internal/namespace-context";
  private static final String[] RECOGNIZED_FEATURES = { "http://apache.org/xml/features/nonvalidating/load-external-dtd", "http://apache.org/xml/features/disallow-doctype-decl" };
  private static final Boolean[] FEATURE_DEFAULTS = { Boolean.TRUE, Boolean.FALSE };
  private static final String[] RECOGNIZED_PROPERTIES = { "http://apache.org/xml/properties/internal/dtd-scanner", "http://apache.org/xml/properties/internal/validation-manager", "http://apache.org/xml/properties/internal/namespace-context" };
  private static final Object[] PROPERTY_DEFAULTS = { null, null, null };
  protected XMLDTDScanner fDTDScanner;
  protected ValidationManager fValidationManager;
  protected boolean fScanningDTD;
  protected String fDoctypeName;
  protected String fDoctypePublicId;
  protected String fDoctypeSystemId;
  protected NamespaceContext fNamespaceContext = new NamespaceSupport();
  protected boolean fLoadExternalDTD = true;
  protected boolean fDisallowDoctype = false;
  protected boolean fSeenDoctypeDecl;
  protected XMLDocumentFragmentScannerImpl.Dispatcher fXMLDeclDispatcher = new XMLDeclDispatcher();
  protected XMLDocumentFragmentScannerImpl.Dispatcher fPrologDispatcher = new PrologDispatcher();
  protected XMLDocumentFragmentScannerImpl.Dispatcher fDTDDispatcher = new DTDDispatcher();
  protected XMLDocumentFragmentScannerImpl.Dispatcher fTrailingMiscDispatcher = new TrailingMiscDispatcher();
  private final String[] fStrings = new String[3];
  private final XMLString fString = new XMLString();
  private final XMLStringBuffer fStringBuffer = new XMLStringBuffer();
  private XMLInputSource fExternalSubsetSource = null;
  private final XMLDTDDescription fDTDDescription = new XMLDTDDescription(null, null, null, null, null);

  public void setInputSource(XMLInputSource paramXMLInputSource)
    throws IOException
  {
    this.fEntityManager.setEntityHandler(this);
    this.fEntityManager.startDocumentEntity(paramXMLInputSource);
  }

  public void reset(XMLComponentManager paramXMLComponentManager)
    throws XMLConfigurationException
  {
    super.reset(paramXMLComponentManager);
    this.fDoctypeName = null;
    this.fDoctypePublicId = null;
    this.fDoctypeSystemId = null;
    this.fSeenDoctypeDecl = false;
    this.fScanningDTD = false;
    this.fExternalSubsetSource = null;
    if (!this.fParserSettings)
    {
      this.fNamespaceContext.reset();
      setScannerState(0);
      setDispatcher(this.fXMLDeclDispatcher);
      return;
    }
    try
    {
      this.fLoadExternalDTD = paramXMLComponentManager.getFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd");
    }
    catch (XMLConfigurationException localXMLConfigurationException1)
    {
      this.fLoadExternalDTD = true;
    }
    try
    {
      this.fDisallowDoctype = paramXMLComponentManager.getFeature("http://apache.org/xml/features/disallow-doctype-decl");
    }
    catch (XMLConfigurationException localXMLConfigurationException2)
    {
      this.fDisallowDoctype = false;
    }
    this.fDTDScanner = ((XMLDTDScanner)paramXMLComponentManager.getProperty("http://apache.org/xml/properties/internal/dtd-scanner"));
    try
    {
      this.fValidationManager = ((ValidationManager)paramXMLComponentManager.getProperty("http://apache.org/xml/properties/internal/validation-manager"));
    }
    catch (XMLConfigurationException localXMLConfigurationException3)
    {
      this.fValidationManager = null;
    }
    try
    {
      this.fNamespaceContext = ((NamespaceContext)paramXMLComponentManager.getProperty("http://apache.org/xml/properties/internal/namespace-context"));
    }
    catch (XMLConfigurationException localXMLConfigurationException4)
    {
    }
    if (this.fNamespaceContext == null)
      this.fNamespaceContext = new NamespaceSupport();
    this.fNamespaceContext.reset();
    setScannerState(0);
    setDispatcher(this.fXMLDeclDispatcher);
  }

  public String[] getRecognizedFeatures()
  {
    String[] arrayOfString1 = super.getRecognizedFeatures();
    int i = arrayOfString1 != null ? arrayOfString1.length : 0;
    String[] arrayOfString2 = new String[i + RECOGNIZED_FEATURES.length];
    if (arrayOfString1 != null)
      System.arraycopy(arrayOfString1, 0, arrayOfString2, 0, arrayOfString1.length);
    System.arraycopy(RECOGNIZED_FEATURES, 0, arrayOfString2, i, RECOGNIZED_FEATURES.length);
    return arrayOfString2;
  }

  public void setFeature(String paramString, boolean paramBoolean)
    throws XMLConfigurationException
  {
    super.setFeature(paramString, paramBoolean);
    if (paramString.startsWith("http://apache.org/xml/features/"))
    {
      int i = paramString.length() - "http://apache.org/xml/features/".length();
      if ((i == "nonvalidating/load-external-dtd".length()) && (paramString.endsWith("nonvalidating/load-external-dtd")))
      {
        this.fLoadExternalDTD = paramBoolean;
        return;
      }
      if ((i == "disallow-doctype-decl".length()) && (paramString.endsWith("disallow-doctype-decl")))
      {
        this.fDisallowDoctype = paramBoolean;
        return;
      }
    }
  }

  public String[] getRecognizedProperties()
  {
    String[] arrayOfString1 = super.getRecognizedProperties();
    int i = arrayOfString1 != null ? arrayOfString1.length : 0;
    String[] arrayOfString2 = new String[i + RECOGNIZED_PROPERTIES.length];
    if (arrayOfString1 != null)
      System.arraycopy(arrayOfString1, 0, arrayOfString2, 0, arrayOfString1.length);
    System.arraycopy(RECOGNIZED_PROPERTIES, 0, arrayOfString2, i, RECOGNIZED_PROPERTIES.length);
    return arrayOfString2;
  }

  public void setProperty(String paramString, Object paramObject)
    throws XMLConfigurationException
  {
    super.setProperty(paramString, paramObject);
    if (paramString.startsWith("http://apache.org/xml/properties/"))
    {
      int i = paramString.length() - "http://apache.org/xml/properties/".length();
      if ((i == "internal/dtd-scanner".length()) && (paramString.endsWith("internal/dtd-scanner")))
        this.fDTDScanner = ((XMLDTDScanner)paramObject);
      if ((i == "internal/namespace-context".length()) && (paramString.endsWith("internal/namespace-context")) && (paramObject != null))
        this.fNamespaceContext = ((NamespaceContext)paramObject);
      return;
    }
  }

  public Boolean getFeatureDefault(String paramString)
  {
    for (int i = 0; i < RECOGNIZED_FEATURES.length; i++)
      if (RECOGNIZED_FEATURES[i].equals(paramString))
        return FEATURE_DEFAULTS[i];
    return super.getFeatureDefault(paramString);
  }

  public Object getPropertyDefault(String paramString)
  {
    for (int i = 0; i < RECOGNIZED_PROPERTIES.length; i++)
      if (RECOGNIZED_PROPERTIES[i].equals(paramString))
        return PROPERTY_DEFAULTS[i];
    return super.getPropertyDefault(paramString);
  }

  public void startEntity(String paramString1, XMLResourceIdentifier paramXMLResourceIdentifier, String paramString2, Augmentations paramAugmentations)
    throws XNIException
  {
    super.startEntity(paramString1, paramXMLResourceIdentifier, paramString2, paramAugmentations);
    if ((!paramString1.equals("[xml]")) && (this.fEntityScanner.isExternal()))
      setScannerState(16);
    if ((this.fDocumentHandler != null) && (paramString1.equals("[xml]")))
      this.fDocumentHandler.startDocument(this.fEntityScanner, paramString2, this.fNamespaceContext, null);
  }

  public void endEntity(String paramString, Augmentations paramAugmentations)
    throws XNIException
  {
    super.endEntity(paramString, paramAugmentations);
    if ((this.fDocumentHandler != null) && (paramString.equals("[xml]")))
      this.fDocumentHandler.endDocument(null);
  }

  protected XMLDocumentFragmentScannerImpl.Dispatcher createContentDispatcher()
  {
    return new ContentDispatcher();
  }

  protected boolean scanDoctypeDecl()
    throws IOException, XNIException
  {
    if (!this.fEntityScanner.skipSpaces())
      reportFatalError("MSG_SPACE_REQUIRED_BEFORE_ROOT_ELEMENT_TYPE_IN_DOCTYPEDECL", null);
    this.fDoctypeName = this.fEntityScanner.scanName();
    if (this.fDoctypeName == null)
      reportFatalError("MSG_ROOT_ELEMENT_TYPE_REQUIRED", null);
    if (this.fEntityScanner.skipSpaces())
    {
      scanExternalID(this.fStrings, false);
      this.fDoctypeSystemId = this.fStrings[0];
      this.fDoctypePublicId = this.fStrings[1];
      this.fEntityScanner.skipSpaces();
    }
    this.fHasExternalDTD = (this.fDoctypeSystemId != null);
    if ((!this.fHasExternalDTD) && (this.fExternalSubsetResolver != null))
    {
      this.fDTDDescription.setValues(null, null, this.fEntityManager.getCurrentResourceIdentifier().getExpandedSystemId(), null);
      this.fDTDDescription.setRootName(this.fDoctypeName);
      this.fExternalSubsetSource = this.fExternalSubsetResolver.getExternalSubset(this.fDTDDescription);
      this.fHasExternalDTD = (this.fExternalSubsetSource != null);
    }
    if (this.fDocumentHandler != null)
      if (this.fExternalSubsetSource == null)
        this.fDocumentHandler.doctypeDecl(this.fDoctypeName, this.fDoctypePublicId, this.fDoctypeSystemId, null);
      else
        this.fDocumentHandler.doctypeDecl(this.fDoctypeName, this.fExternalSubsetSource.getPublicId(), this.fExternalSubsetSource.getSystemId(), null);
    int i = 1;
    if (!this.fEntityScanner.skipChar(91))
    {
      i = 0;
      this.fEntityScanner.skipSpaces();
      if (!this.fEntityScanner.skipChar(62))
        reportFatalError("DoctypedeclUnterminated", new Object[] { this.fDoctypeName });
      this.fMarkupDepth -= 1;
    }
    return i;
  }

  protected String getScannerStateName(int paramInt)
  {
    switch (paramInt)
    {
    case 0:
      return "SCANNER_STATE_XML_DECL";
    case 5:
      return "SCANNER_STATE_PROLOG";
    case 12:
      return "SCANNER_STATE_TRAILING_MISC";
    case 17:
      return "SCANNER_STATE_DTD_INTERNAL_DECLS";
    case 18:
      return "SCANNER_STATE_DTD_EXTERNAL";
    case 19:
      return "SCANNER_STATE_DTD_EXTERNAL_DECLS";
    case 1:
    case 2:
    case 3:
    case 4:
    case 6:
    case 7:
    case 8:
    case 9:
    case 10:
    case 11:
    case 13:
    case 14:
    case 15:
    case 16:
    }
    return super.getScannerStateName(paramInt);
  }

  protected final class TrailingMiscDispatcher
    implements XMLDocumentFragmentScannerImpl.Dispatcher
  {
    protected TrailingMiscDispatcher()
    {
    }

    public boolean dispatch(boolean paramBoolean)
      throws IOException, XNIException
    {
      try
      {
        int i;
        do
        {
          i = 0;
          switch (XMLDocumentScannerImpl.this.fScannerState)
          {
          case 12:
            XMLDocumentScannerImpl.this.fEntityScanner.skipSpaces();
            if (XMLDocumentScannerImpl.this.fEntityScanner.skipChar(60))
            {
              XMLDocumentScannerImpl.this.setScannerState(1);
              i = 1;
            }
            else
            {
              XMLDocumentScannerImpl.this.setScannerState(7);
              i = 1;
            }
            break;
          case 1:
            XMLDocumentScannerImpl.this.fMarkupDepth += 1;
            if (XMLDocumentScannerImpl.this.fEntityScanner.skipChar(63))
            {
              XMLDocumentScannerImpl.this.setScannerState(3);
              i = 1;
            }
            else if (XMLDocumentScannerImpl.this.fEntityScanner.skipChar(33))
            {
              XMLDocumentScannerImpl.this.setScannerState(2);
              i = 1;
            }
            else if (XMLDocumentScannerImpl.this.fEntityScanner.skipChar(47))
            {
              XMLDocumentScannerImpl.this.reportFatalError("MarkupNotRecognizedInMisc", null);
              i = 1;
            }
            else if (XMLDocumentScannerImpl.this.isValidNameStartChar(XMLDocumentScannerImpl.this.fEntityScanner.peekChar()))
            {
              XMLDocumentScannerImpl.this.reportFatalError("MarkupNotRecognizedInMisc", null);
              XMLDocumentScannerImpl.this.scanStartElement();
              XMLDocumentScannerImpl.this.setScannerState(7);
            }
            else if (XMLDocumentScannerImpl.this.isValidNameStartHighSurrogate(XMLDocumentScannerImpl.this.fEntityScanner.peekChar()))
            {
              XMLDocumentScannerImpl.this.reportFatalError("MarkupNotRecognizedInMisc", null);
              XMLDocumentScannerImpl.this.scanStartElement();
              XMLDocumentScannerImpl.this.setScannerState(7);
            }
            else
            {
              XMLDocumentScannerImpl.this.reportFatalError("MarkupNotRecognizedInMisc", null);
            }
            break;
          case 3:
            XMLDocumentScannerImpl.this.scanPI();
            XMLDocumentScannerImpl.this.setScannerState(12);
            break;
          case 2:
            if (!XMLDocumentScannerImpl.this.fEntityScanner.skipString("--"))
              XMLDocumentScannerImpl.this.reportFatalError("InvalidCommentStart", null);
            XMLDocumentScannerImpl.this.scanComment();
            XMLDocumentScannerImpl.this.setScannerState(12);
            break;
          case 7:
            int j = XMLDocumentScannerImpl.this.fEntityScanner.peekChar();
            if (j == -1)
            {
              XMLDocumentScannerImpl.this.setScannerState(14);
              return false;
            }
            XMLDocumentScannerImpl.this.reportFatalError("ContentIllegalInTrailingMisc", null);
            XMLDocumentScannerImpl.this.fEntityScanner.scanChar();
            XMLDocumentScannerImpl.this.setScannerState(12);
            break;
          case 8:
            XMLDocumentScannerImpl.this.reportFatalError("ReferenceIllegalInTrailingMisc", null);
            XMLDocumentScannerImpl.this.setScannerState(12);
            break;
          case 14:
            return false;
          case 4:
          case 5:
          case 6:
          case 9:
          case 10:
          case 11:
          case 13:
          }
        }
        while ((paramBoolean) || (i != 0));
      }
      catch (MalformedByteSequenceException localMalformedByteSequenceException)
      {
        XMLDocumentScannerImpl.this.fErrorReporter.reportError(localMalformedByteSequenceException.getDomain(), localMalformedByteSequenceException.getKey(), localMalformedByteSequenceException.getArguments(), 2);
        return false;
      }
      catch (CharConversionException localCharConversionException)
      {
        XMLDocumentScannerImpl.this.reportFatalError("CharConversionFailure", null);
        return false;
      }
      catch (EOFException localEOFException)
      {
        if (XMLDocumentScannerImpl.this.fMarkupDepth != 0)
        {
          XMLDocumentScannerImpl.this.reportFatalError("PrematureEOF", null);
          return false;
        }
        XMLDocumentScannerImpl.this.setScannerState(14);
        return false;
      }
      return true;
    }
  }

  protected class ContentDispatcher extends XMLDocumentFragmentScannerImpl.FragmentContentDispatcher
  {
    protected ContentDispatcher()
    {
      super();
    }

    protected boolean scanForDoctypeHook()
      throws IOException, XNIException
    {
      if (XMLDocumentScannerImpl.this.fEntityScanner.skipString("DOCTYPE"))
      {
        XMLDocumentScannerImpl.this.setScannerState(4);
        return true;
      }
      return false;
    }

    protected boolean elementDepthIsZeroHook()
      throws IOException, XNIException
    {
      XMLDocumentScannerImpl.this.setScannerState(12);
      XMLDocumentScannerImpl.this.setDispatcher(XMLDocumentScannerImpl.this.fTrailingMiscDispatcher);
      return true;
    }

    protected boolean scanRootElementHook()
      throws IOException, XNIException
    {
      if ((XMLDocumentScannerImpl.this.fExternalSubsetResolver != null) && (!XMLDocumentScannerImpl.this.fSeenDoctypeDecl) && (!XMLDocumentScannerImpl.this.fDisallowDoctype) && ((XMLDocumentScannerImpl.this.fValidation) || (XMLDocumentScannerImpl.this.fLoadExternalDTD)))
      {
        XMLDocumentScannerImpl.this.scanStartElementName();
        resolveExternalSubsetAndRead();
        if (XMLDocumentScannerImpl.this.scanStartElementAfterName())
        {
          XMLDocumentScannerImpl.this.setScannerState(12);
          XMLDocumentScannerImpl.this.setDispatcher(XMLDocumentScannerImpl.this.fTrailingMiscDispatcher);
          return true;
        }
      }
      else if (XMLDocumentScannerImpl.this.scanStartElement())
      {
        XMLDocumentScannerImpl.this.setScannerState(12);
        XMLDocumentScannerImpl.this.setDispatcher(XMLDocumentScannerImpl.this.fTrailingMiscDispatcher);
        return true;
      }
      return false;
    }

    protected void endOfFileHook(EOFException paramEOFException)
      throws IOException, XNIException
    {
      XMLDocumentScannerImpl.this.reportFatalError("PrematureEOF", null);
    }

    protected void resolveExternalSubsetAndRead()
      throws IOException, XNIException
    {
      XMLDocumentScannerImpl.this.fDTDDescription.setValues(null, null, XMLDocumentScannerImpl.this.fEntityManager.getCurrentResourceIdentifier().getExpandedSystemId(), null);
      XMLDocumentScannerImpl.this.fDTDDescription.setRootName(XMLDocumentScannerImpl.this.fElementQName.rawname);
      XMLInputSource localXMLInputSource = XMLDocumentScannerImpl.this.fExternalSubsetResolver.getExternalSubset(XMLDocumentScannerImpl.this.fDTDDescription);
      if (localXMLInputSource != null)
      {
        XMLDocumentScannerImpl.this.fDoctypeName = XMLDocumentScannerImpl.this.fElementQName.rawname;
        XMLDocumentScannerImpl.this.fDoctypePublicId = localXMLInputSource.getPublicId();
        XMLDocumentScannerImpl.this.fDoctypeSystemId = localXMLInputSource.getSystemId();
        if (XMLDocumentScannerImpl.this.fDocumentHandler != null)
          XMLDocumentScannerImpl.this.fDocumentHandler.doctypeDecl(XMLDocumentScannerImpl.this.fDoctypeName, XMLDocumentScannerImpl.this.fDoctypePublicId, XMLDocumentScannerImpl.this.fDoctypeSystemId, null);
        try
        {
          if ((XMLDocumentScannerImpl.this.fValidationManager == null) || (!XMLDocumentScannerImpl.this.fValidationManager.isCachedDTD()))
          {
            XMLDocumentScannerImpl.this.fDTDScanner.setInputSource(localXMLInputSource);
            while (XMLDocumentScannerImpl.this.fDTDScanner.scanDTDExternalSubset(true));
          }
          else
          {
            XMLDocumentScannerImpl.this.fDTDScanner.setInputSource(null);
          }
        }
        finally
        {
          XMLDocumentScannerImpl.this.fEntityManager.setEntityHandler(XMLDocumentScannerImpl.this);
        }
      }
    }
  }

  protected final class DTDDispatcher
    implements XMLDocumentFragmentScannerImpl.Dispatcher
  {
    protected DTDDispatcher()
    {
    }

    public boolean dispatch(boolean paramBoolean)
      throws IOException, XNIException
    {
      XMLDocumentScannerImpl.this.fEntityManager.setEntityHandler(null);
      try
      {
        int i;
        do
        {
          i = 0;
          int j;
          switch (XMLDocumentScannerImpl.this.fScannerState)
          {
          case 17:
            boolean bool1 = true;
            bool3 = ((XMLDocumentScannerImpl.this.fValidation) || (XMLDocumentScannerImpl.this.fLoadExternalDTD)) && ((XMLDocumentScannerImpl.this.fValidationManager == null) || (!XMLDocumentScannerImpl.this.fValidationManager.isCachedDTD()));
            bool4 = XMLDocumentScannerImpl.this.fDTDScanner.scanDTDInternalSubset(bool1, XMLDocumentScannerImpl.this.fStandalone, (XMLDocumentScannerImpl.this.fHasExternalDTD) && (bool3));
            if (bool4)
              continue;
            if (!XMLDocumentScannerImpl.this.fEntityScanner.skipChar(93))
              XMLDocumentScannerImpl.this.reportFatalError("EXPECTED_SQUARE_BRACKET_TO_CLOSE_INTERNAL_SUBSET", null);
            XMLDocumentScannerImpl.this.fEntityScanner.skipSpaces();
            if (!XMLDocumentScannerImpl.this.fEntityScanner.skipChar(62))
              XMLDocumentScannerImpl.this.reportFatalError("DoctypedeclUnterminated", new Object[] { XMLDocumentScannerImpl.this.fDoctypeName });
            XMLDocumentScannerImpl.this.fMarkupDepth -= 1;
            if (XMLDocumentScannerImpl.this.fDoctypeSystemId != null)
            {
              if (bool3)
              {
                XMLDocumentScannerImpl.this.setScannerState(18);
                continue;
              }
            }
            else if ((XMLDocumentScannerImpl.this.fExternalSubsetSource != null) && (bool3))
            {
              XMLDocumentScannerImpl.this.fDTDScanner.setInputSource(XMLDocumentScannerImpl.this.fExternalSubsetSource);
              XMLDocumentScannerImpl.access$202(XMLDocumentScannerImpl.this, null);
              XMLDocumentScannerImpl.this.setScannerState(19);
              continue;
            }
            XMLDocumentScannerImpl.this.setScannerState(5);
            XMLDocumentScannerImpl.this.setDispatcher(XMLDocumentScannerImpl.this.fPrologDispatcher);
            XMLDocumentScannerImpl.this.fEntityManager.setEntityHandler(XMLDocumentScannerImpl.this);
            j = 1;
            jsr 315;
          case 18:
            XMLDocumentScannerImpl.this.fDTDDescription.setValues(XMLDocumentScannerImpl.this.fDoctypePublicId, XMLDocumentScannerImpl.this.fDoctypeSystemId, null, null);
            XMLDocumentScannerImpl.this.fDTDDescription.setRootName(XMLDocumentScannerImpl.this.fDoctypeName);
            XMLInputSource localXMLInputSource = XMLDocumentScannerImpl.this.fEntityManager.resolveEntity(XMLDocumentScannerImpl.this.fDTDDescription);
            XMLDocumentScannerImpl.this.fDTDScanner.setInputSource(localXMLInputSource);
            XMLDocumentScannerImpl.this.setScannerState(19);
            i = 1;
            break;
          case 19:
            bool2 = true;
            bool3 = XMLDocumentScannerImpl.this.fDTDScanner.scanDTDExternalSubset(bool2);
            if (bool3)
              continue;
            XMLDocumentScannerImpl.this.setScannerState(5);
            XMLDocumentScannerImpl.this.setDispatcher(XMLDocumentScannerImpl.this.fPrologDispatcher);
            XMLDocumentScannerImpl.this.fEntityManager.setEntityHandler(XMLDocumentScannerImpl.this);
            bool4 = true;
            jsr 160;
          default:
            throw new XNIException("DTDDispatcher#dispatch: scanner state=" + XMLDocumentScannerImpl.this.fScannerState + " (" + XMLDocumentScannerImpl.this.getScannerStateName(XMLDocumentScannerImpl.this.fScannerState) + ')');
          }
        }
        while ((paramBoolean) || (i != 0));
      }
      catch (MalformedByteSequenceException localMalformedByteSequenceException)
      {
        XMLDocumentScannerImpl.this.fErrorReporter.reportError(localMalformedByteSequenceException.getDomain(), localMalformedByteSequenceException.getKey(), localMalformedByteSequenceException.getArguments(), 2);
        boolean bool2 = false;
        return bool2;
      }
      catch (CharConversionException localCharConversionException)
      {
        XMLDocumentScannerImpl.this.reportFatalError("CharConversionFailure", null);
        boolean bool3 = false;
        return bool3;
      }
      catch (EOFException localEOFException)
      {
        XMLDocumentScannerImpl.this.reportFatalError("PrematureEOF", null);
        boolean bool4 = false;
        return bool4;
      }
      finally
      {
        XMLDocumentScannerImpl.this.fEntityManager.setEntityHandler(XMLDocumentScannerImpl.this);
      }
      return true;
    }
  }

  protected final class PrologDispatcher
    implements XMLDocumentFragmentScannerImpl.Dispatcher
  {
    protected PrologDispatcher()
    {
    }

    public boolean dispatch(boolean paramBoolean)
      throws IOException, XNIException
    {
      try
      {
        int i;
        do
        {
          i = 0;
          switch (XMLDocumentScannerImpl.this.fScannerState)
          {
          case 5:
            XMLDocumentScannerImpl.this.fEntityScanner.skipSpaces();
            if (XMLDocumentScannerImpl.this.fEntityScanner.skipChar(60))
            {
              XMLDocumentScannerImpl.this.setScannerState(1);
              i = 1;
            }
            else if (XMLDocumentScannerImpl.this.fEntityScanner.skipChar(38))
            {
              XMLDocumentScannerImpl.this.setScannerState(8);
              i = 1;
            }
            else
            {
              XMLDocumentScannerImpl.this.setScannerState(7);
              i = 1;
            }
            break;
          case 1:
            XMLDocumentScannerImpl.this.fMarkupDepth += 1;
            if (XMLDocumentScannerImpl.this.fEntityScanner.skipChar(33))
            {
              if (XMLDocumentScannerImpl.this.fEntityScanner.skipChar(45))
              {
                if (!XMLDocumentScannerImpl.this.fEntityScanner.skipChar(45))
                  XMLDocumentScannerImpl.this.reportFatalError("InvalidCommentStart", null);
                XMLDocumentScannerImpl.this.setScannerState(2);
                i = 1;
              }
              else if (XMLDocumentScannerImpl.this.fEntityScanner.skipString("DOCTYPE"))
              {
                XMLDocumentScannerImpl.this.setScannerState(4);
                i = 1;
              }
              else
              {
                XMLDocumentScannerImpl.this.reportFatalError("MarkupNotRecognizedInProlog", null);
              }
            }
            else
            {
              if (XMLDocumentScannerImpl.this.isValidNameStartChar(XMLDocumentScannerImpl.this.fEntityScanner.peekChar()))
              {
                XMLDocumentScannerImpl.this.setScannerState(6);
                XMLDocumentScannerImpl.this.setDispatcher(XMLDocumentScannerImpl.this.fContentDispatcher);
                return true;
              }
              if (XMLDocumentScannerImpl.this.fEntityScanner.skipChar(63))
              {
                XMLDocumentScannerImpl.this.setScannerState(3);
                i = 1;
              }
              else
              {
                if (XMLDocumentScannerImpl.this.isValidNameStartHighSurrogate(XMLDocumentScannerImpl.this.fEntityScanner.peekChar()))
                {
                  XMLDocumentScannerImpl.this.setScannerState(6);
                  XMLDocumentScannerImpl.this.setDispatcher(XMLDocumentScannerImpl.this.fContentDispatcher);
                  return true;
                }
                XMLDocumentScannerImpl.this.reportFatalError("MarkupNotRecognizedInProlog", null);
              }
            }
            break;
          case 2:
            XMLDocumentScannerImpl.this.scanComment();
            XMLDocumentScannerImpl.this.setScannerState(5);
            break;
          case 3:
            XMLDocumentScannerImpl.this.scanPI();
            XMLDocumentScannerImpl.this.setScannerState(5);
            break;
          case 4:
            if (XMLDocumentScannerImpl.this.fDisallowDoctype)
              XMLDocumentScannerImpl.this.reportFatalError("DoctypeNotAllowed", null);
            if (XMLDocumentScannerImpl.this.fSeenDoctypeDecl)
              XMLDocumentScannerImpl.this.reportFatalError("AlreadySeenDoctype", null);
            XMLDocumentScannerImpl.this.fSeenDoctypeDecl = true;
            if (XMLDocumentScannerImpl.this.scanDoctypeDecl())
            {
              XMLDocumentScannerImpl.this.setScannerState(17);
              XMLDocumentScannerImpl.this.setDispatcher(XMLDocumentScannerImpl.this.fDTDDispatcher);
              return true;
            }
            if (XMLDocumentScannerImpl.this.fDoctypeSystemId != null)
            {
              if (((XMLDocumentScannerImpl.this.fValidation) || (XMLDocumentScannerImpl.this.fLoadExternalDTD)) && ((XMLDocumentScannerImpl.this.fValidationManager == null) || (!XMLDocumentScannerImpl.this.fValidationManager.isCachedDTD())))
              {
                XMLDocumentScannerImpl.this.setScannerState(18);
                XMLDocumentScannerImpl.this.setDispatcher(XMLDocumentScannerImpl.this.fDTDDispatcher);
                return true;
              }
            }
            else if ((XMLDocumentScannerImpl.this.fExternalSubsetSource != null) && ((XMLDocumentScannerImpl.this.fValidation) || (XMLDocumentScannerImpl.this.fLoadExternalDTD)) && ((XMLDocumentScannerImpl.this.fValidationManager == null) || (!XMLDocumentScannerImpl.this.fValidationManager.isCachedDTD())))
            {
              XMLDocumentScannerImpl.this.fDTDScanner.setInputSource(XMLDocumentScannerImpl.this.fExternalSubsetSource);
              XMLDocumentScannerImpl.access$202(XMLDocumentScannerImpl.this, null);
              XMLDocumentScannerImpl.this.setScannerState(19);
              XMLDocumentScannerImpl.this.setDispatcher(XMLDocumentScannerImpl.this.fDTDDispatcher);
              return true;
            }
            XMLDocumentScannerImpl.this.fDTDScanner.setInputSource(null);
            XMLDocumentScannerImpl.this.setScannerState(5);
            break;
          case 7:
            XMLDocumentScannerImpl.this.reportFatalError("ContentIllegalInProlog", null);
            XMLDocumentScannerImpl.this.fEntityScanner.scanChar();
          case 8:
            XMLDocumentScannerImpl.this.reportFatalError("ReferenceIllegalInProlog", null);
          case 6:
          }
        }
        while ((paramBoolean) || (i != 0));
        if (paramBoolean)
        {
          if (XMLDocumentScannerImpl.this.fEntityScanner.scanChar() != 60)
            XMLDocumentScannerImpl.this.reportFatalError("RootElementRequired", null);
          XMLDocumentScannerImpl.this.setScannerState(6);
          XMLDocumentScannerImpl.this.setDispatcher(XMLDocumentScannerImpl.this.fContentDispatcher);
        }
      }
      catch (MalformedByteSequenceException localMalformedByteSequenceException)
      {
        XMLDocumentScannerImpl.this.fErrorReporter.reportError(localMalformedByteSequenceException.getDomain(), localMalformedByteSequenceException.getKey(), localMalformedByteSequenceException.getArguments(), 2);
        return false;
      }
      catch (CharConversionException localCharConversionException)
      {
        XMLDocumentScannerImpl.this.reportFatalError("CharConversionFailure", null);
        return false;
      }
      catch (EOFException localEOFException)
      {
        XMLDocumentScannerImpl.this.reportFatalError("PrematureEOF", null);
        return false;
      }
      return true;
    }
  }

  protected final class XMLDeclDispatcher
    implements XMLDocumentFragmentScannerImpl.Dispatcher
  {
    protected XMLDeclDispatcher()
    {
    }

    public boolean dispatch(boolean paramBoolean)
      throws IOException, XNIException
    {
      XMLDocumentScannerImpl.this.setScannerState(5);
      XMLDocumentScannerImpl.this.setDispatcher(XMLDocumentScannerImpl.this.fPrologDispatcher);
      try
      {
        if (XMLDocumentScannerImpl.this.fEntityScanner.skipString("<?xml"))
        {
          XMLDocumentScannerImpl.this.fMarkupDepth += 1;
          if (XMLChar.isName(XMLDocumentScannerImpl.this.fEntityScanner.peekChar()))
          {
            XMLDocumentScannerImpl.this.fStringBuffer.clear();
            XMLDocumentScannerImpl.this.fStringBuffer.append("xml");
            if (XMLDocumentScannerImpl.this.fNamespaces)
              while (XMLChar.isNCName(XMLDocumentScannerImpl.this.fEntityScanner.peekChar()))
                XMLDocumentScannerImpl.this.fStringBuffer.append((char)XMLDocumentScannerImpl.this.fEntityScanner.scanChar());
            else
              do
                XMLDocumentScannerImpl.this.fStringBuffer.append((char)XMLDocumentScannerImpl.this.fEntityScanner.scanChar());
              while (XMLChar.isName(XMLDocumentScannerImpl.this.fEntityScanner.peekChar()));
            String str = XMLDocumentScannerImpl.this.fSymbolTable.addSymbol(XMLDocumentScannerImpl.this.fStringBuffer.ch, XMLDocumentScannerImpl.this.fStringBuffer.offset, XMLDocumentScannerImpl.this.fStringBuffer.length);
            XMLDocumentScannerImpl.this.scanPIData(str, XMLDocumentScannerImpl.this.fString);
          }
          else
          {
            XMLDocumentScannerImpl.this.scanXMLDeclOrTextDecl(false);
          }
        }
        XMLDocumentScannerImpl.this.fEntityManager.fCurrentEntity.mayReadChunks = true;
        return true;
      }
      catch (MalformedByteSequenceException localMalformedByteSequenceException)
      {
        XMLDocumentScannerImpl.this.fErrorReporter.reportError(localMalformedByteSequenceException.getDomain(), localMalformedByteSequenceException.getKey(), localMalformedByteSequenceException.getArguments(), 2);
        return false;
      }
      catch (CharConversionException localCharConversionException)
      {
        XMLDocumentScannerImpl.this.reportFatalError("CharConversionFailure", null);
        return false;
      }
      catch (EOFException localEOFException)
      {
        XMLDocumentScannerImpl.this.reportFatalError("PrematureEOF", null);
      }
      return false;
    }
  }
}

/* Location:           /home/mnovotny/projects/EMBEDDED_JBOSS_BETA3_COMMUNITY/embedded/output/lib/embedded-jboss/lib/thirdparty-all.jar
* Qualified Name:     org.apache.xerces.impl.XMLDocumentScannerImpl
* JD-Core Version:    0.6.0
*/
TOP

Related Classes of org.apache.xerces.impl.XMLDocumentScannerImpl$XMLDeclDispatcher

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.