Methods Summary |
---|
private int | addContentSpecNodes(int begin, int end)Creates a subtree from the leaf nodes at the current depth.
if (begin == end) {
return fGroupIndexStack[fDepth][begin];
}
int middle = (begin + end) / 2;
return addContentSpecNode(fOpStack[fDepth],
addContentSpecNodes(begin, middle),
addContentSpecNodes(middle + 1, end));
|
protected final void | addContentSpecToElement(XMLElementDecl elementDecl)Adds the content spec to the given element declaration.
int contentSpec = fGroupIndexStackSizes[0] > 0 ? fGroupIndexStack[0][0] : -1;
setContentSpecIndex(fCurrentElementIndex, contentSpec);
|
private void | addToCurrentGroup(int contentSpec)Add XMLContentSpec to the current group.
int [] currentGroup = fGroupIndexStack[fDepth];
int length = fGroupIndexStackSizes[fDepth]++;
if (currentGroup == null) {
currentGroup = new int[8];
fGroupIndexStack[fDepth] = currentGroup;
}
else if (length == currentGroup.length) {
int [] newGroup = new int[currentGroup.length * 2];
System.arraycopy(currentGroup, 0, newGroup, 0, currentGroup.length);
currentGroup = newGroup;
fGroupIndexStack[fDepth] = currentGroup;
}
currentGroup[length] = contentSpec;
|
public final void | element(java.lang.String elementName, org.apache.xerces.xni.Augmentations augs)A referenced element in a mixed or children content model.
addToCurrentGroup(addUniqueLeafNode(elementName));
|
public final void | endDTD(org.apache.xerces.xni.Augmentations augs)The end of the DTD.
super.endDTD(augs);
fOpStack = null;
fGroupIndexStack = null;
fGroupIndexStackSizes = null;
|
public final void | endGroup(org.apache.xerces.xni.Augmentations augs)The end of a group for mixed or children content models.
final int length = fGroupIndexStackSizes[fDepth];
final int group = length > 0 ? addContentSpecNodes(0, length - 1) : addUniqueLeafNode(null);
--fDepth;
addToCurrentGroup(group);
|
private void | initializeContentModelStacks()Initialize the stacks which temporarily hold content models.
if (fOpStack == null) {
fOpStack = new short[8];
fGroupIndexStack = new int [8][];
fGroupIndexStackSizes = new int [8];
}
else if (fDepth == fOpStack.length) {
short [] newOpStack = new short[fDepth * 2];
System.arraycopy(fOpStack, 0, newOpStack, 0, fDepth);
fOpStack = newOpStack;
int [][] newGroupIndexStack = new int[fDepth * 2][];
System.arraycopy(fGroupIndexStack, 0, newGroupIndexStack, 0, fDepth);
fGroupIndexStack = newGroupIndexStack;
int [] newGroupIndexStackLengths = new int[fDepth * 2];
System.arraycopy(fGroupIndexStackSizes, 0, newGroupIndexStackLengths, 0, fDepth);
fGroupIndexStackSizes = newGroupIndexStackLengths;
}
fOpStack[fDepth] = -1;
fGroupIndexStackSizes[fDepth] = 0;
|
public final void | occurrence(short occurrence, org.apache.xerces.xni.Augmentations augs)The occurrence count for a child in a children content model or
for the mixed content model group.
if (!fMixed) {
int currentIndex = fGroupIndexStackSizes[fDepth] - 1;
if (occurrence == XMLDTDContentModelHandler.OCCURS_ZERO_OR_ONE) {
fGroupIndexStack[fDepth][currentIndex] = addContentSpecNode(XMLContentSpec.CONTENTSPECNODE_ZERO_OR_ONE, fGroupIndexStack[fDepth][currentIndex], -1);
}
else if ( occurrence == XMLDTDContentModelHandler.OCCURS_ZERO_OR_MORE) {
fGroupIndexStack[fDepth][currentIndex] = addContentSpecNode(XMLContentSpec.CONTENTSPECNODE_ZERO_OR_MORE, fGroupIndexStack[fDepth][currentIndex], -1);
}
else if ( occurrence == XMLDTDContentModelHandler.OCCURS_ONE_OR_MORE) {
fGroupIndexStack[fDepth][currentIndex] = addContentSpecNode(XMLContentSpec.CONTENTSPECNODE_ONE_OR_MORE, fGroupIndexStack[fDepth][currentIndex], -1);
}
}
|
public final void | pcdata(org.apache.xerces.xni.Augmentations augs)The appearance of "#PCDATA" within a group signifying a
mixed content model. This method will be the first called
following the content model's startGroup() .
fMixed = true;
|
public final void | separator(short separator, org.apache.xerces.xni.Augmentations augs)The separator between choices or sequences of a mixed or children
content model.
if (separator == XMLDTDContentModelHandler.SEPARATOR_CHOICE) {
fOpStack[fDepth] = XMLContentSpec.CONTENTSPECNODE_CHOICE;
}
else if (separator == XMLDTDContentModelHandler.SEPARATOR_SEQUENCE) {
fOpStack[fDepth] = XMLContentSpec.CONTENTSPECNODE_SEQ;
}
|
public final void | startContentModel(java.lang.String elementName, org.apache.xerces.xni.Augmentations augs)The start of a content model. Depending on the type of the content
model, specific methods may be called between the call to the
startContentModel method and the call to the endContentModel method.
fDepth = 0;
initializeContentModelStacks();
super.startContentModel(elementName, augs);
|
public final void | startGroup(org.apache.xerces.xni.Augmentations augs)A start of either a mixed or children content model. A mixed
content model will immediately be followed by a call to the
pcdata() method. A children content model will
contain additional groups and/or elements.
++fDepth;
initializeContentModelStacks();
fMixed = false;
|