# This file stores localized messages for the Xerces
# DOM implementation.
#
# The messages are arranged in key and value tuples in a ListResourceBundle.
#
# @version $Id: DOMMessages.properties,v 1.10 2004/07/05 22:36:53 mrglavas Exp $

        BadMessageKey = The error message corresponding to the message key can not be found.
        FormatFailed = An internal error occurred while formatting the following message:\n  

# DOM Core

# exception codes
DOMSTRING_SIZE_ERR = The specified range of text does not fit into a DOMString. 
HIERARCHY_REQUEST_ERR  = An attempt was made to insert a node where it is not permitted. 
INDEX_SIZE_ERR = The index or size is negative, or greater than the allowed value.
INUSE_ATTRIBUTE_ERR = An attempt is made to add an attribute that is already in use elsewhere.
INVALID_ACCESS_ERR  = A parameter or an operation is not supported by the underlying object. 
INVALID_CHARACTER_ERR = An invalid or illegal XML character is specified. 
INVALID_MODIFICATION_ERR =  An attempt is made to modify the type of the underlying object. 
INVALID_STATE_ERR = An attempt is made to use an object that is not, or is no longer, usable. 
NAMESPACE_ERR = An attempt is made to create or change an object in a way which is incorrect with regard to namespaces.
NOT_FOUND_ERR = An attempt is made to reference a node in a context where it does not exist.
NOT_SUPPORTED_ERR = The implementation does not support the requested type of object or operation. 
NO_DATA_ALLOWED_ERR = Data is specified for a node which does not support data.
NO_MODIFICATION_ALLOWED_ERR = An attempt is made to modify an object where modifications are not allowed.
SYNTAX_ERR = An invalid or illegal string is specified. 
VALIDATION_ERR = A call to a method such as insertBefore or removeChild would make the Node invalid with respect to document grammar.
WRONG_DOCUMENT_ERR = A node is used in a different document than the one that created it.
TYPE_MISMATCH_ERR = The value type for this parameter name is incompatible with the expected value type. 
 
#error messages or exceptions
FEATURE_NOT_SUPPORTED = The parameter {0} is recognized but the requested value cannot be set.
FEATURE_NOT_FOUND = The parameter {0} is not recognized.
STRING_TOO_LONG   = The resulting string is too long to fit in a DOMString: ''{0}''.

#DOM Level 3 DOMError codes
wf-invalid-character =  The text {0} of the {1} node contains invalid XML characters.
wf-invalid-character-in-node-name = The {0} node named {1} contains invalid XML characters.
cdata-sections-splitted =  CDATA sections containing the CDATA section termination marker '']]>''
doctype-not-allowed = DOCTYPE declaration is not allowed.
unsupported-encoding = The encoding {0} is not supported.

#Error codes used in DOM Normalizer
InvalidXMLCharInDOM = An invalid XML character (Unicode: 0x{0}) was found in the DOM during normalization.
UndeclaredEntRefInAttrValue = The attribute \"{0}\" value \"{1}\" referenced an entity that was not declared.
NullLocalElementName = A null local name was encountered during namespace normalization of element {0}.
NullLocalAttrName = A null local name was encountered during namespace normalization of attribute {0}.

#Error codes used in DOMParser
InvalidDocumentClassName = The class name of the document factory \"{0}\" used to construct the DOM tree is not of type org.w3c.dom.Document.
MissingDocumentClassName = The class name of the document factory \"{0}\" used to construct the DOM tree could not be found.
CannotCreateDocumentClass = The class named \"{0}\" could not be constructed as a org.w3c.dom.Document.

# Error codes used by JAXP DocumentBuilder
jaxp-order-not-supported = Property ''{0}'' must be set before setting property ''{1}''.
jaxp-null-input-source = The source specified cannot be null.

#Ranges
BAD_BOUNDARYPOINTS_ERR = The boundary-points of a Range do not meet specific requirements.
INVALID_NODE_TYPE_ERR = The container of a boundary-point of a Range is being set to either a node of an invalid type or a node with an ancestor of an invalid type.


#Events
UNSPECIFIED_EVENT_TYPE_ERR = The Event's type was not specified by initializing the event before the method was called. 

