*/
private Node pushTagNode(ParserAutomatonState automatonState, Node currentNode, String name, String parameter) {
if (!currentNode.allows(name)) {
Map<String, Tag> allTagsDict = parserParameters.getAllTagsDict();
Set<String> blockLevelTags = parserParameters.getBlockLevelTags();
Tag newTag = allTagsDict.get(name);
if (newTag.isDiscardable()) {
return currentNode;
} else if (currentNode == automatonState.getRootNode()
|| blockLevelTags.contains(((TagNode) currentNode).getBbtag().getName()) && newTag.getImplicitTag() != null) {
if (currentNode != automatonState.getRootNode() && TagNode.class.isInstance(currentNode)) {
TagNode currentTagNode = (TagNode) currentNode;
if ("p".equals(currentTagNode.getBbtag().getName())) {
currentNode = currentNode.getParent();
return pushTagNode(automatonState, currentNode, name, parameter);
}
}
currentNode = pushTagNode(automatonState, currentNode, newTag.getImplicitTag(), "");
currentNode = pushTagNode(automatonState, currentNode, name, parameter);
} else {
currentNode = currentNode.getParent();
currentNode = pushTagNode(automatonState, currentNode, name, parameter);
}