in freemarker-docgen-core/src/main/java/org/freemarker/docgen/core/Transform.java [2416:2476]
private String createElementLinkURL(final Element elem) {
if (elem.hasAttribute(A_DOCGEN_NOT_ADDRESSABLE)) {
return null;
}
String extLink = getExternalLinkTOCNodeURLOrNull(elem);
if (extLink != null) {
return extLink;
}
// Find the closest id:
String id = null;
Node node = elem;
while (node != null) {
if (node instanceof Element) {
id = XMLUtil.getAttribute((Element) node, "id");
if (id != null) {
break;
}
}
node = node.getParentNode();
}
if (id == null) {
throw new DocgenException(
"Can't create link for the \"" + elem.getLocalName()
+ "\" element: Nor this element nor its ascendants have an "
+ "id.");
}
final Element idElem = (Element) node;
String fileName = null;
Element curElem = idElem;
do {
TOCNode fileTOCNode = getFileTOCNodeFor(curElem);
if (fileTOCNode == null) {
curElem = (Element) curElem.getParentNode();
} else {
fileName = fileTOCNode.getOutputFileName();
if (fileName == null) throw new IllegalStateException("fileTOCNode with null outputFileName");
}
} while (fileName == null);
String link;
if (currentFileTOCNode != null
&& fileName.equals(currentFileTOCNode.getOutputFileName())) {
link = "";
} else {
link = fileName;
}
if (getFileTOCNodeFor(idElem) == null) {
link = link + "#" + id;
}
// IE6 doesn't like empty href-s:
if (link.length() == 0) {
link = fileName;
}
return link;
}