mrglavas 2003/08/21 13:41:49 Modified: java/src/org/apache/xerces/impl/dtd XMLDTDProcessor.java XMLDTDValidator.java Log: Fixing E2: Check uniqueness of enum lists when attdecl is validated instead of once for each instance in the document. Before, a list may have been checked none or many times. Revision Changes Path 1.8 +23 -1 xml-xerces/java/src/org/apache/xerces/impl/dtd/XMLDTDProcessor.java Index: XMLDTDProcessor.java =================================================================== RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/dtd/XMLDTDProcessor.java,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- XMLDTDProcessor.java 8 May 2003 20:11:55 -0000 1.7 +++ XMLDTDProcessor.java 21 Aug 2003 20:41:49 -0000 1.8 @@ -946,6 +946,28 @@ } } } + + // VC: No Duplicate Tokens + // XML 1.0 SE Errata - E2 + if (type == XMLSymbols.fENUMERATIONSymbol || type == XMLSymbols.fNOTATIONSymbol) { + outer: + for (int i = 0; i < enumeration.length; ++i) { + for (int j = i + 1; j < enumeration.length; ++j) { + if (enumeration[i].equals(enumeration[j])) { + // Only report the first uniqueness violation. There could be others, + // but additional overhead would be incurred tracking unique tokens + // that have already been encountered. -- mrglavas + fErrorReporter.reportError(XMLMessageFormatter.XML_DOMAIN, + type == XMLSymbols.fENUMERATIONSymbol + ? "MSG_DISTINCT_TOKENS_IN_ENUMERATION" + : "MSG_DISTINCT_NOTATION_IN_ENUMERATION", + new Object[]{ elementName, enumeration[i], attributeName }, + XMLErrorReporter.SEVERITY_ERROR); + break outer; + } + } + } + } // VC: Attribute Default Legal boolean ok = true; 1.51 +2 -42 xml-xerces/java/src/org/apache/xerces/impl/dtd/XMLDTDValidator.java Index: XMLDTDValidator.java =================================================================== RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/dtd/XMLDTDValidator.java,v retrieving revision 1.50 retrieving revision 1.51 diff -u -r1.50 -r1.51 --- XMLDTDValidator.java 19 Aug 2003 19:06:14 -0000 1.50 +++ XMLDTDValidator.java 21 Aug 2003 20:41:49 -0000 1.51 @@ -1180,51 +1180,11 @@ String attType = getAttributeTypeName(fTempAttDecl); int attDefaultType =fTempAttDecl.simpleType.defaultType; String attValue = null; - - boolean found = false; - if((fTempAttDecl.simpleType.type == XMLSimpleType.TYPE_ENUMERATION || - fTempAttDecl.simpleType.type == XMLSimpleType.TYPE_NOTATION) && - fPerformValidation) { - - for (int i=0; i<fTempAttDecl.simpleType.enumeration.length ; i++) { - for (int j=0; j<fTempAttDecl.simpleType.enumeration.length ; j++) { - if (fTempAttDecl.simpleType.enumeration[i].equals - (fTempAttDecl.simpleType.enumeration[j]) && i!=j) { - found = true; - break; - } - } - if (found) - break; - } - - StringBuffer enumValueString = new StringBuffer(); - if (fTempAttDecl.simpleType.enumeration != null) { - enumValueString.append("("); - for (int i = 0; i < fTempAttDecl.simpleType.enumeration.length; i++) { - enumValueString.append(fTempAttDecl.simpleType.enumeration[i]+" "); - } - enumValueString.append(")"); - } - - if (found && fTempAttDecl.simpleType.type == XMLSimpleType.TYPE_ENUMERATION) { - fErrorReporter.reportError(XMLMessageFormatter.XML_DOMAIN, - "MSG_DISTINCT_TOKENS_IN_ENUMERATION", - new Object[] {attRawName, enumValueString}, - XMLErrorReporter.SEVERITY_ERROR); - - } else if (found && fTempAttDecl.simpleType.type == XMLSimpleType.TYPE_NOTATION) { - fErrorReporter.reportError(XMLMessageFormatter.XML_DOMAIN, - "MSG_DISTINCT_NOTATION_IN_ENUMERATION", - new Object[] {attRawName, enumValueString}, - XMLErrorReporter.SEVERITY_ERROR); - - } - } if (fTempAttDecl.simpleType.defaultValue != null) { attValue = fTempAttDecl.simpleType.defaultValue; } + boolean specified = false; boolean required = attDefaultType == XMLSimpleType.DEFAULT_TYPE_REQUIRED; boolean cdata = attType == XMLSymbols.fCDATASymbol;
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]