blob: 6e4761322bd6aa2d0f097c40fa5b531630d4021d [file] [log] [blame]
package org.unicode.cldr.util;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
import java.util.TreeSet;
import org.unicode.cldr.draft.FileUtilities;
import org.xml.sax.Attributes;
import org.xml.sax.ContentHandler;
import org.xml.sax.ErrorHandler;
import org.xml.sax.InputSource;
import org.xml.sax.Locator;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
import org.xml.sax.XMLReader;
import org.xml.sax.ext.DeclHandler;
import com.ibm.icu.impl.Relation;
import com.ibm.icu.text.UTF16;
/**
* @deprecated
*/
public class FindDTDOrder implements DeclHandler, ContentHandler, ErrorHandler {
static final boolean SHOW_PROGRESS = CldrUtility.getProperty("verbose", false);
static final boolean SHOW_ALL = CldrUtility.getProperty("show_all", false);
private static final boolean DEBUG = false;
private static FindDTDOrder INSTANCE;
private boolean recordingAttributeElements;
public static void main(String[] args) throws IOException {
System.out.println("Outdated, no longer used");
FindDTDOrder me = getInstance();
me.showData();
}
public static FindDTDOrder getInstance() {
synchronized (FindDTDOrder.class) {
if (INSTANCE == null) {
try {
FindDTDOrder me = new FindDTDOrder();
XMLReader xmlReader = CLDRFile.createXMLReader(true);
xmlReader.setContentHandler(me);
xmlReader.setErrorHandler(me);
xmlReader.setProperty(
"http://xml.org/sax/properties/declaration-handler", me);
FileInputStream fis;
InputSource is;
me.recordingAttributeElements = true;
String filename = CLDRPaths.MAIN_DIRECTORY + "/root.xml";
File file = new File(filename);
if (DEBUG) {
System.out.println("Opening " + file.getCanonicalFile());
}
File dtd = new File(file.getCanonicalPath() + "/../" + "../../common/dtd/ldml.dtd");
if (DEBUG) {
System.out.println("Opening " + dtd.getCanonicalFile());
}
fis = new FileInputStream(filename);
if (DEBUG) {
BufferedReader b = new BufferedReader(new InputStreamReader(fis));
for (int i = 0; i < 30; ++i) {
String line = b.readLine();
System.out.println(line);
}
throw new IllegalArgumentException("just testing");
}
is = new InputSource(fis);
is.setSystemId(file.getCanonicalPath() + "/../");
xmlReader.parse(is);
fis.close();
me.recordingAttributeElements = false;
filename = CLDRPaths.DEFAULT_SUPPLEMENTAL_DIRECTORY
+ "/supplementalData.xml";
File file2 = new File(filename);
if (DEBUG) {
System.out.println("Opening " + file2.getCanonicalFile());
}
fis = new FileInputStream(filename);
is = new InputSource(fis);
is.setSystemId(file.getCanonicalPath() + "/../");
xmlReader.parse(is);
fis.close();
// Then Attributes
List<String> rawDtdAttributeOrder = Collections.unmodifiableList(new ArrayList<String>(me.attributeSet));
List<String> cldrFileAttributeOrder = CLDRFile.getAttributeOrder();
LinkedHashSet<String> modifiedDtdOrder = new LinkedHashSet<String>(cldrFileAttributeOrder);
// add items, keeping the ordering stable
modifiedDtdOrder.retainAll(rawDtdAttributeOrder); // remove any superfluous stuff
modifiedDtdOrder.addAll(rawDtdAttributeOrder);
// certain stuff always goes at the end
modifiedDtdOrder.removeAll(me.getCommonAttributes());
modifiedDtdOrder.addAll(me.getCommonAttributes());
// now make a list for comparison
List<String> dtdAttributeOrder = new ArrayList<String>(modifiedDtdOrder);
// fix to and from
dtdAttributeOrder.remove("from");
dtdAttributeOrder.add(dtdAttributeOrder.indexOf("to"), "from");
me.attributeList = Collections.unmodifiableList(dtdAttributeOrder);
me.checkData();
me.orderingList = Collections.unmodifiableList(me.orderingList);
// me.writeAttributeElements();
INSTANCE = me;
} catch (Exception e) {
throw (IllegalArgumentException) new IllegalArgumentException().initCause(e);
}
}
}
return INSTANCE;
}
public void writeAttributeElements() {
System.out.println(CldrUtility.LINE_SEPARATOR + "======== Start Attributes to Elements (unblocked) "
+ CldrUtility.LINE_SEPARATOR);
for (String attribute : attributeToElements.keySet()) {
Set<String> filtered = new TreeSet<String>();
for (String element : attributeToElements.getAll(attribute)) {
if (!isBlocked(element)) {
filtered.add(element);
}
}
System.out.println(attribute + "\t" + CldrUtility.join(filtered, " "));
}
System.out.println(CldrUtility.LINE_SEPARATOR + "======== End Attributes to Elements"
+ CldrUtility.LINE_SEPARATOR);
System.out.println(CldrUtility.LINE_SEPARATOR + "======== Start Elements to Children (skipping alias, special)"
+ CldrUtility.LINE_SEPARATOR);
showElementTree("ldml", "", new HashSet<String>());
System.out.println(CldrUtility.LINE_SEPARATOR + "======== End Elements to Children"
+ CldrUtility.LINE_SEPARATOR);
}
private void showElementTree(String element, String indent, HashSet<String> seenSoFar) {
// skip blocking elements
if (isBlocked(element)) {
return;
}
Set<String> children = elementToChildren.getAll(element);
if (seenSoFar.contains(element)) {
System.out.println(indent + element
+ (children == null || children.size() == 0 ? "" : "\t*dup*\t" + children));
return;
}
System.out.println(indent + element);
seenSoFar.add(element);
if (children != null) {
indent += "\t";
for (String child : children) {
showElementTree(child, indent, seenSoFar);
}
}
}
private boolean isBlocked(String element) {
return isAncestorOf("supplementalData", element)
|| isAncestorOf("collation", element)
|| isAncestorOf("cldrTest", element)
|| isAncestorOf("transform", element);
}
Relation<String, String> ancestorToDescendant = null;
private boolean isAncestorOf(String possibleAncestor, String possibleDescendent) {
if (ancestorToDescendant == null) {
ancestorToDescendant = Relation.of(new TreeMap<String, Set<String>>(), TreeSet.class);
buildPairwiseRelations(new ArrayList<String>(), "ldml");
}
Set<String> possibleDescendents = ancestorToDescendant.getAll(possibleAncestor);
if (possibleDescendents == null) return false;
return possibleDescendents.contains(possibleDescendent);
}
private void buildPairwiseRelations(List<String> parents, String current) {
Set<String> children = elementToChildren.getAll(current);
if (children == null || children.size() == 0) return;
// we make a new list, since otherwise the iteration fails in recursion (because of the modification)
// if this were performance-sensitive we'd do it differently
ArrayList<String> newParents = new ArrayList<String>(parents);
newParents.add(current);
for (String child : children) {
for (String ancestor : newParents) {
ancestorToDescendant.put(ancestor, child);
buildPairwiseRelations(newParents, child);
}
}
}
PrintWriter log = null;
Set elementOrderings = new LinkedHashSet(); // set of orderings
Set<String> allDefinedElements = new LinkedHashSet<String>();
boolean showReason = false;
Object DONE = new Object(); // marker
Relation<String, String> elementToChildren = Relation.of(new TreeMap<String, Set<String>>(),
TreeSet.class);
FindDTDOrder() {
log = new PrintWriter(System.out);
}
private List<String> orderingList = new ArrayList<String>();
public void checkData() {
// verify that the ordering is the consistent for all child elements
// do this by building an ordering from the lists.
// The first item has no greater item in any set. So find an item that is
// only first
MergeLists<String> mergeLists = new MergeLists<String>(new TreeSet<String>(new UTF16.StringComparator(true,
false, 0)))
.add(Arrays.asList("ldml"))
.addAll(elementOrderings); //
List<String> result = mergeLists.merge();
Collection badOrder = MergeLists.hasConsistentOrderWithEachOf(result, elementOrderings);
if (badOrder != null) {
throw new IllegalArgumentException("Failed to find good order: " + badOrder);
}
showReason = false;
orderingList.add("ldml");
if (SHOW_PROGRESS) {
log.println("SHOW_PROGRESS ");
for (Iterator it = elementOrderings.iterator(); it.hasNext();) {
Object value = it.next();
log.println(value);
}
}
while (true) {
Object first = getFirst();
if (first == DONE)
break;
if (first != null) {
// log.println("Adding:\t" + first);
if (orderingList.contains(first)) {
throw new IllegalArgumentException("Already present: " + first);
}
orderingList.add(first.toString());
} else {
showReason = true;
getFirst();
if (SHOW_PROGRESS)
log.println();
if (SHOW_PROGRESS)
log.println("Failed ordering. So far:");
for (Iterator<String> it = orderingList.iterator(); it.hasNext();)
if (SHOW_PROGRESS)
log.print("\t" + it.next());
if (SHOW_PROGRESS)
log.println();
if (SHOW_PROGRESS)
log.println("Items:");
// for (Iterator it = element_childComparator.keySet().iterator();
// it.hasNext();) showRow(it.next(), true);
if (SHOW_PROGRESS)
log.println();
break;
}
}
if (DEBUG) {
System.out.println("New code in CLDRFile:\n" + result);
System.out.println("Old code in CLDRFile:\n" + orderingList);
}
// System.out.println("New code2: " + CldrUtility.breakLines(CldrUtility.join(result, " "), sep,
// FIRST_LETTER_CHANGE.matcher(""), 80));
Set<String> missing = new TreeSet<String>(allDefinedElements);
missing.removeAll(orderingList);
orderingList.addAll(missing);
attributeEquivalents = new XEquivalenceClass(null);
for (Iterator it = attribEquiv.keySet().iterator(); it.hasNext();) {
Object ename = it.next();
Set s = attribEquiv.get(ename);
Iterator it2 = s.iterator();
Object first = it2.next();
while (it2.hasNext()) {
attributeEquivalents.add(first, it2.next(), ename);
}
}
}
String sep = CldrUtility.LINE_SEPARATOR + "\t\t\t";
private void showData() throws IOException {
// finish up
String oldAttributeOrder = breakLines(CLDRFile.getAttributeOrder());
log.println("Successful Ordering...");
log.println();
log.println("Old Attribute Ordering: ");
log.println(oldAttributeOrder);
String newAttributeOrder = breakLines(attributeList);
if (newAttributeOrder.equals(oldAttributeOrder)) {
log.println("*** New Attribute Ordering: <same>");
log.println("*** No changes required...");
} else {
log.println("*** New Attribute Ordering: ");
log.println(newAttributeOrder);
log.println("*** Replace in CLDRFile elementOrdering & supplementalMetadata ***");
}
log.println("Attribute Eq: ");
for (Iterator it = attributeEquivalents.getSamples().iterator(); it.hasNext();) {
log.println("\t"
+ getJavaList(new TreeSet(attributeEquivalents.getEquivalences(it.next()))));
}
if (SHOW_PROGRESS) {
for (Iterator it = attributeEquivalents.getEquivalenceSets().iterator(); it.hasNext();) {
Object last = null;
Set s = (Set) it.next();
for (Iterator it2 = s.iterator(); it2.hasNext();) {
Object temp = it2.next();
if (last != null)
log.println(last + " ~ " + temp + "\t" + attributeEquivalents.getReasons(last, temp));
last = temp;
}
log.println();
}
}
String oldOrder = getJavaList(CLDRFile.getElementOrder());
log.println("Old Element Ordering:\n"
+ oldOrder);
String newOrder = '"' + breakLines(orderingList) + '"';
if (newOrder.equals(oldOrder)) {
log.println("*** New Element Ordering: <same>");
log.println("*** No changes required...");
} else {
log.println("*** New Element Ordering:\n" + newOrder);
log.println("*** Replace in CLDRFile elementOrdering & supplementalMetadata ***");
}
if (SHOW_ALL) {
log.println("Old Size: " + CLDRFile.getElementOrder().size());
Set temp = new HashSet(CLDRFile.getElementOrder());
temp.removeAll(orderingList);
log.println("Old - New: " + temp);
log.println("New Size: " + orderingList.size());
temp = new HashSet(orderingList);
temp.removeAll(CLDRFile.getElementOrder());
log.println("New - Old: " + temp);
Differ differ = new Differ(200, 1);
Iterator oldIt = CLDRFile.getElementOrder().iterator();
Iterator newIt = orderingList.iterator();
while (oldIt.hasNext() || newIt.hasNext()) {
if (oldIt.hasNext())
differ.addA(oldIt.next());
if (newIt.hasNext())
differ.addB(newIt.next());
differ.checkMatch(!oldIt.hasNext() && !newIt.hasNext());
if (differ.getACount() != 0 || differ.getBCount() != 0) {
log.println("Same: " + differ.getA(-1));
for (int i = 0; i < differ.getACount(); ++i) {
log.println("\tOld: " + differ.getA(i));
}
for (int i = 0; i < differ.getBCount(); ++i) {
log.println("\t\tNew: " + differ.getB(i));
}
log.println("Same: " + differ.getA(differ.getACount()));
}
}
log.println("Done with differences");
}
log.flush();
writeNewSupplemental(CLDRPaths.SUPPLEMENTAL_DIRECTORY, "supplementalMetadata.xml",
"<attributeOrder>", "</attributeOrder>",
"<elementOrder>", "</elementOrder>", "\t\t\t", CldrUtility.LINE_SEPARATOR + "\t\t");
writeNewSupplemental(CLDRPaths.BASE_DIRECTORY + "/tools/java/org/unicode/cldr/util/",
"CLDRFile.java",
"// START MECHANICALLY attributeOrdering GENERATED BY FindDTDOrder",
"// END MECHANICALLY attributeOrdering GENERATED BY FindDTDOrder",
"// START MECHANICALLY elementOrdering GENERATED BY FindDTDOrder",
"// END MECHANICALLY elementOrdering GENERATED BY FindDTDOrder",
"\t\t\t\t\t\"",
'"' + CldrUtility.LINE_SEPARATOR + "\t\t\t\t\t");
}
private void writeNewSupplemental(String dir, String filename, String startAttributeTag, String endAttributeTag,
String startElementTag, String endElementTag, String startSep, String endSep) throws IOException {
BufferedReader oldFile = FileUtilities.openUTF8Reader(dir, filename);
Log.setLogNoBOM(CLDRPaths.GEN_DIRECTORY + "/DTDOrder/" + filename);
// CldrUtility.copyUpTo(oldFile, PatternCache.get("\\s*" +
// startAttributeTag +
// "\\s*"), Log.getLog(), true);
// Log.println(startSep + breakLines(attributeSet) + endSep + endAttributeTag);
// CldrUtility.copyUpTo(oldFile, PatternCache.get("\\s*" +
// endAttributeTag +
// "\\s*"), null, true);
CldrUtility.copyUpTo(oldFile, PatternCache.get("\\s*" +
startElementTag +
"\\s*"), Log.getLog(), true);
Log.println(startSep + breakLines(orderingList) + endSep + endElementTag);
CldrUtility.copyUpTo(oldFile, PatternCache.get("\\s*" +
endElementTag +
"\\s*"), null, true);
CldrUtility.copyUpTo(oldFile, null, Log.getLog(), false); // copy to end
Log.close();
oldFile.close();
}
private String breakLines(Collection orderingList) {
final String joined = CldrUtility.join(orderingList, " ");
return joined; // return Utility.breakLines(joined, sep, FIRST_LETTER_CHANGE.matcher(""), 80);
}
private String getJavaList(Collection orderingList) {
boolean first2 = true;
StringBuffer result = new StringBuffer();
result.append('"');
for (Iterator it = orderingList.iterator(); it.hasNext();) {
if (first2)
first2 = false;
else
result.append(" ");
result.append(it.next().toString());
}
result.append('"');
return result.toString();
}
/**
* @param parent
* @param skipEmpty
* TODO
*/
// private void showRow(Object parent, boolean skipEmpty) {
// List items = (List) element_childComparator.get(parent);
// if (skipEmpty && items.size() == 0) return;
// if (SHOW_PROGRESS) log.print(parent);
// for (Iterator it2 = items.iterator(); it2.hasNext();) if (SHOW_PROGRESS)
// log.print("\t" + it2.next());
// if (SHOW_PROGRESS) log.println();
// }
/**
* @param orderingList
*/
private Object getFirst() {
Set firstItems = new TreeSet();
Set nonFirstItems = new TreeSet();
for (Iterator it = elementOrderings.iterator(); it.hasNext();) {
List list = (List) it.next();
if (list.size() != 0) {
firstItems.add(list.get(0));
for (int i = 1; i < list.size(); ++i) {
nonFirstItems.add(list.get(i));
}
}
}
if (firstItems.size() == 0 && nonFirstItems.size() == 0)
return DONE;
firstItems.removeAll(nonFirstItems);
if (firstItems.size() == 0)
return null; // failure
Object result = firstItems.iterator().next();
removeEverywhere(result);
return result;
}
/**
* @param possibleFirst
*/
private void removeEverywhere(Object possibleFirst) {
// and remove from all the lists
for (Iterator it2 = elementOrderings.iterator(); it2.hasNext();) {
List list2 = (List) it2.next();
if (SHOW_PROGRESS && list2.contains(possibleFirst)) {
log.println("Removing " + possibleFirst + " from " + list2);
}
while (list2.remove(possibleFirst))
; // repeat until returns false
}
}
// private boolean isNeverNotFirst(Object possibleFirst) {
// if (showReason) if (SHOW_PROGRESS) log.println("Trying: " + possibleFirst);
// for (Iterator it2 = element_childComparator.keySet().iterator();
// it2.hasNext();) {
// Object key = it2.next();
// List list2 = (List) element_childComparator.get(key);
// int pos = list2.indexOf(possibleFirst);
// if (pos > 0) {
// if (showReason) {
// if (SHOW_PROGRESS) log.print("Failed at:\t");
// showRow(key, false);
// }
// return false;
// }
// }
// return true;
// }
static final Set<String> ELEMENT_SKIP_LIST = new HashSet<String>(Arrays.asList(new String[] {
"collation", "base", "settings", "suppress_contractions", "optimize",
"rules", "reset", "context", "p", "pc", "s", "sc", "t", "tc",
"i", "ic", "extend", "x" }));
static final Set<String> SUBELEMENT_SKIP_LIST = new HashSet<String>(Arrays
.asList(new String[] { "PCDATA", "EMPTY", "ANY" }));
// refine later; right now, doesn't handle multiple elements well.
public void elementDecl(String name, String model) throws SAXException {
// if (ELEMENT_SKIP_LIST.contains(name)) return;
if (name.indexOf("contractions") >= 0
|| model
.indexOf("[alias, base, settings, suppress, contractions, optimize, rules, special]") >= 0) {
}
allDefinedElements.add(name);
if (SHOW_PROGRESS) {
log.println("Element\t" + name + "\t" + model);
}
String[] list = model.split("[^-_A-Z0-9a-z]+");
List<String> mc = new ArrayList<String>();
/*
* if (name.equals("currency")) { mc.add("alias"); mc.add("symbol");
* mc.add("pattern"); }
*/
for (int i = 0; i < list.length; ++i) {
if (list[i].length() == 0)
continue;
if (list[i].equals("ANY") && !name.equals("special")) {
System.err.println("WARNING- SHOULD NOT HAVE 'ANY': " + name + "\t"
+ model);
}
if (SUBELEMENT_SKIP_LIST.contains(list[i]))
continue;
// if (SHOW_PROGRESS) log.print("\t" + list[i]);
if (mc.contains(list[i])) {
if (name.equals("currency") && list[i].equals("displayName") || list[i].equals("symbol")
|| list[i].equals("pattern")) {
// do nothing, exception
} else if (name.equals("rules") && (list[i].equals("reset") || list[i].equals("import"))) {
// do nothing, exception
} else {
throw new IllegalArgumentException("Duplicate element in definition of " + name
+ ":\t" + list[i] + ":\t" + Arrays.asList(list) + ":\t" + mc);
}
} else {
mc.add(list[i]);
}
}
if (recordingAttributeElements) {
Set<String> children = new TreeSet<String>(mc);
children.remove("alias");
children.remove("special");
children.remove("cp");
elementToChildren.putAll(name, children);
}
allDefinedElements.addAll(mc);
if (mc.size() < 1) {
if (SHOW_PROGRESS) {
log.println("\tSKIPPING\t" + name + "\t" + mc);
}
} else {
if (SHOW_PROGRESS) {
log.println("\t" + name + "\t" + mc);
}
elementOrderings.add(mc);
}
// if (SHOW_PROGRESS) log.println();
}
Set<String> skipCommon = new LinkedHashSet<String>(Arrays.asList(new String[] { "validSubLocales",
"standard", "references",
"alt", "draft",
}));
Set<String> attributeSet = new TreeSet<String>();
{
attributeSet.add("_q");
attributeSet.addAll(skipCommon);
}
List<String> attributeList;
Map<String, Set<String>> attribEquiv = new TreeMap<String, Set<String>>();
Relation<String, String> attributeToElements = Relation.of(new TreeMap<String, Set<String>>(),
TreeSet.class);
private XEquivalenceClass attributeEquivalents;
public void attributeDecl(String eName, String aName, String type,
String mode, String value) throws SAXException {
if (SHOW_ALL)
log.println("attributeDecl");
// if (SHOW_ALL) log.println("Attribute\t" + eName + "\t" +
// aName + "\t" + type + "\t" + mode + "\t" + value);
if (SHOW_PROGRESS) System.out.println("Attribute\t" + eName + "\t" + aName + "\t" + type
+ "\t" + mode + "\t" + value);
if (!skipCommon.contains(aName)) {
attributeSet.add(aName);
Set<String> l = attribEquiv.get(eName);
if (l == null)
attribEquiv.put(eName, l = new TreeSet<String>());
l.add(aName);
}
if (recordingAttributeElements) {
attributeToElements.put(aName, eName);
}
}
public void internalEntityDecl(String name, String value) throws SAXException {
if (SHOW_ALL)
log.println("internalEntityDecl");
// if (SHOW_ALL) log.println("Internal Entity\t" + name +
// "\t" + value);
}
public void externalEntityDecl(String name, String publicId, String systemId)
throws SAXException {
if (SHOW_ALL)
log.println("externalEntityDecl");
// if (SHOW_ALL) log.println("Internal Entity\t" + name +
// "\t" + publicId + "\t" + systemId);
}
/*
* (non-Javadoc)
*
* @see org.xml.sax.ContentHandler#endDocument()
*/
public void endDocument() throws SAXException {
if (SHOW_ALL)
log.println("endDocument");
}
/*
* (non-Javadoc)
*
* @see org.xml.sax.ContentHandler#startDocument()
*/
public void startDocument() throws SAXException {
if (SHOW_ALL)
log.println("startDocument");
}
/*
* (non-Javadoc)
*
* @see org.xml.sax.ContentHandler#characters(char[], int, int)
*/
public void characters(char[] ch, int start, int length) throws SAXException {
if (SHOW_ALL)
log.println("characters");
}
/*
* (non-Javadoc)
*
* @see org.xml.sax.ContentHandler#ignorableWhitespace(char[], int, int)
*/
public void ignorableWhitespace(char[] ch, int start, int length)
throws SAXException {
if (SHOW_ALL)
log.println("ignorableWhitespace");
}
/*
* (non-Javadoc)
*
* @see org.xml.sax.ContentHandler#endPrefixMapping(java.lang.String)
*/
public void endPrefixMapping(String prefix) throws SAXException {
if (SHOW_ALL)
log.println("endPrefixMapping");
}
/*
* (non-Javadoc)
*
* @see org.xml.sax.ContentHandler#skippedEntity(java.lang.String)
*/
public void skippedEntity(String name) throws SAXException {
if (SHOW_ALL)
log.println("skippedEntity");
}
/*
* (non-Javadoc)
*
* @see org.xml.sax.ContentHandler#setDocumentLocator(org.xml.sax.Locator)
*/
public void setDocumentLocator(Locator locator) {
if (SHOW_ALL)
log.println("setDocumentLocator");
}
/*
* (non-Javadoc)
*
* @see org.xml.sax.ContentHandler#processingInstruction(java.lang.String,
* java.lang.String)
*/
public void processingInstruction(String target, String data)
throws SAXException {
if (SHOW_ALL)
log.println("processingInstruction");
}
/*
* (non-Javadoc)
*
* @see org.xml.sax.ContentHandler#startPrefixMapping(java.lang.String,
* java.lang.String)
*/
public void startPrefixMapping(String prefix, String uri) throws SAXException {
if (SHOW_ALL)
log.println("startPrefixMapping");
}
/*
* (non-Javadoc)
*
* @see org.xml.sax.ContentHandler#endElement(java.lang.String,
* java.lang.String, java.lang.String)
*/
public void endElement(String namespaceURI, String localName, String qName)
throws SAXException {
if (SHOW_ALL)
log.println("endElement");
}
/*
* (non-Javadoc)
*
* @see org.xml.sax.ContentHandler#startElement(java.lang.String,
* java.lang.String, java.lang.String, org.xml.sax.Attributes)
*/
public void startElement(String namespaceURI, String localName, String qName,
Attributes atts) throws SAXException {
if (SHOW_ALL)
log.println("startElement");
}
/*
* (non-Javadoc)
*
* @see org.xml.sax.ErrorHandler#error(org.xml.sax.SAXParseException)
*/
public void error(SAXParseException exception) throws SAXException {
if (SHOW_ALL)
log.println("error");
throw exception;
}
/*
* (non-Javadoc)
*
* @see org.xml.sax.ErrorHandler#fatalError(org.xml.sax.SAXParseException)
*/
public void fatalError(SAXParseException exception) throws SAXException {
if (SHOW_ALL)
log.println("fatalError");
throw exception;
}
/*
* (non-Javadoc)
*
* @see org.xml.sax.ErrorHandler#warning(org.xml.sax.SAXParseException)
*/
public void warning(SAXParseException exception) throws SAXException {
if (SHOW_ALL)
log.println("warning");
throw exception;
}
public List<String> getAttributeOrder() {
return attributeList;
}
public List<String> getElementOrder() {
return orderingList;
}
public Set<String> getCommonAttributes() {
return skipCommon;
}
}