}
@Override
protected void loadDefinition(Element def) throws ElementTypeDefinitionException {
super.loadDefinition(def);
ElementTypeBundle bundle = getElementBundle();
String templateId = def.getAttributeValue("template");
TokenElementType beginTokenElement;
TokenElementType endTokenElement;
if (StringUtil.isEmpty(templateId)) {
String startTokenId = def.getAttributeValue("begin-token");
String endTokenId = def.getAttributeValue("end-token");
beginTokenElement = new TokenElementTypeImpl(bundle, this, startTokenId, "begin-token");
endTokenElement = new TokenElementTypeImpl(bundle, this, endTokenId, "end-token");
} else {
WrapperElementTypeTemplate template = WrapperElementTypeTemplate.valueOf(templateId);
beginTokenElement = new TokenElementTypeImpl(bundle, this, template.getBeginToken(), "begin-token");
endTokenElement = new TokenElementTypeImpl(bundle, this, template.getEndToken(), "end-token");
if (template.isBlock()) {
beginTokenElement.setDefaultFormatting(FormattingDefinition.LINE_BREAK_AFTER);
endTokenElement.setDefaultFormatting(FormattingDefinition.LINE_BREAK_BEFORE);
setDefaultFormatting(FormattingDefinition.LINE_BREAK_BEFORE);
}
}
wrappingDefinition = new WrappingDefinition(beginTokenElement, endTokenElement);
List children = def.getChildren();
if (children.size() != 1) {
throw new ElementTypeDefinitionException(
"Invalid wrapper definition. " +
"Element should contain exact one child of type 'one-of', 'sequence', 'element', 'token'");
}
Element child = (Element) children.get(0);
String type = child.getName();
wrappedElement = bundle.resolveElementDefinition(child, type, this);
isWrappingOptional = Boolean.parseBoolean(def.getAttributeValue("wrapping-optional"));
//getLookupCache().registerFirstLeaf(beginTokenElement, isOptional);
}