/**
   * Constructs a parser configuration using the specified symbol table, grammar pool, and parent
   * settings.
   *
   * <p><strong>REVISIT:</strong> Grammar pool will be updated when the new validation engine is
   * implemented.
   *
   * @param symbolTable The symbol table to use.
   * @param grammarPool The grammar pool to use.
   * @param parentSettings The parent settings.
   */
  public NonValidatingConfiguration(
      SymbolTable symbolTable, XMLGrammarPool grammarPool, XMLComponentManager parentSettings) {
    super(symbolTable, parentSettings);

    // add default recognized features
    final String[] recognizedFeatures = {
      PARSER_SETTINGS,
      NAMESPACES,
      // WARN_ON_DUPLICATE_ATTDEF,     // from XMLDTDScannerImpl
      // WARN_ON_UNDECLARED_ELEMDEF,   // from XMLDTDScannerImpl
      // ALLOW_JAVA_ENCODINGS,         // from XMLEntityManager
      CONTINUE_AFTER_FATAL_ERROR,
      // LOAD_EXTERNAL_DTD,    // from XMLDTDScannerImpl
      // NOTIFY_BUILTIN_REFS,  // from XMLDocumentFragmentScannerImpl
      // NOTIFY_CHAR_REFS,         // from XMLDocumentFragmentScannerImpl
      // WARN_ON_DUPLICATE_ENTITYDEF   // from XMLEntityManager
    };
    addRecognizedFeatures(recognizedFeatures);

    // set state for default features
    // setFeature(WARN_ON_DUPLICATE_ATTDEF, false);  // from XMLDTDScannerImpl
    // setFeature(WARN_ON_UNDECLARED_ELEMDEF, false);    // from XMLDTDScannerImpl
    // setFeature(ALLOW_JAVA_ENCODINGS, false);      // from XMLEntityManager
    fFeatures.put(CONTINUE_AFTER_FATAL_ERROR, Boolean.FALSE);
    fFeatures.put(PARSER_SETTINGS, Boolean.TRUE);
    fFeatures.put(NAMESPACES, Boolean.TRUE);
    // setFeature(LOAD_EXTERNAL_DTD, true);      // from XMLDTDScannerImpl
    // setFeature(NOTIFY_BUILTIN_REFS, false);   // from XMLDocumentFragmentScannerImpl
    // setFeature(NOTIFY_CHAR_REFS, false);      // from XMLDocumentFragmentScannerImpl
    // setFeature(WARN_ON_DUPLICATE_ENTITYDEF, false);   // from XMLEntityManager

    // add default recognized properties
    final String[] recognizedProperties = {
      ERROR_REPORTER,
      ENTITY_MANAGER,
      DOCUMENT_SCANNER,
      DTD_SCANNER,
      DTD_VALIDATOR,
      NAMESPACE_BINDER,
      XMLGRAMMAR_POOL,
      DATATYPE_VALIDATOR_FACTORY,
      VALIDATION_MANAGER,
      LOCALE,
      SECURITY_MANAGER,
      XML_SECURITY_PROPERTY_MANAGER
    };
    addRecognizedProperties(recognizedProperties);

    fGrammarPool = grammarPool;
    if (fGrammarPool != null) {
      fProperties.put(XMLGRAMMAR_POOL, fGrammarPool);
    }

    fEntityManager = createEntityManager();
    fProperties.put(ENTITY_MANAGER, fEntityManager);
    addComponent(fEntityManager);

    fErrorReporter = createErrorReporter();
    fErrorReporter.setDocumentLocator(fEntityManager.getEntityScanner());
    fProperties.put(ERROR_REPORTER, fErrorReporter);
    addComponent(fErrorReporter);

    // this configuration delays creation of the scanner
    // till it is known if namespace processing should be performed

    fDTDScanner = createDTDScanner();
    if (fDTDScanner != null) {
      fProperties.put(DTD_SCANNER, fDTDScanner);
      if (fDTDScanner instanceof XMLComponent) {
        addComponent((XMLComponent) fDTDScanner);
      }
    }

    fDatatypeValidatorFactory = createDatatypeValidatorFactory();
    if (fDatatypeValidatorFactory != null) {
      fProperties.put(DATATYPE_VALIDATOR_FACTORY, fDatatypeValidatorFactory);
    }
    fValidationManager = createValidationManager();

    if (fValidationManager != null) {
      fProperties.put(VALIDATION_MANAGER, fValidationManager);
    }
    // add message formatters
    if (fErrorReporter.getMessageFormatter(XMLMessageFormatter.XML_DOMAIN) == null) {
      XMLMessageFormatter xmft = new XMLMessageFormatter();
      fErrorReporter.putMessageFormatter(XMLMessageFormatter.XML_DOMAIN, xmft);
      fErrorReporter.putMessageFormatter(XMLMessageFormatter.XMLNS_DOMAIN, xmft);
    }

    fConfigUpdated = false;

    // set locale
    try {
      setLocale(Locale.getDefault());
    } catch (XNIException e) {
      // do nothing
      // REVISIT: What is the right thing to do? -Ac
    }
  } // <init>(SymbolTable,XMLGrammarPool)