public static HtmlDocTree getTree(HtmlConverter converter, StartElementTree start, Element el,
			ListIterator<? extends DocTree> it) {
		HtmlTagKind kind = HtmlTagKind.getKind(start);
		List<DocTree> body = new ArrayList<>();
		if (start.isSelfClosing() || HtmlTagKind.isVoidTag(kind)) {
			return new HtmlDocTree(kind, start, null, body);
		}
		while (it.hasNext()) {
			DocTree tag = it.next();
			switch (tag.getKind()) {
				case START_ELEMENT:
					if (kind.isTerminateBy((StartElementTree) tag)) {
						// hack for unclosed elements
						it.previous();
						converter.logUnterminatedHtml(el, start);
						return new HtmlDocTree(kind, start, null, body);
					}
					body.add(HtmlDocTree.getTree(converter, (StartElementTree) tag, el, it));
					break;
				case END_ELEMENT:
					if (kind.isTerminateBy((EndElementTree) tag)) {
						// hack for unclosed elements
						it.previous();
						converter.logUnterminatedHtml(el, start);
						return new HtmlDocTree(kind, start, null, body);
					}
					if (kind == HtmlTagKind.getKind((EndElementTree) tag)) {
						return new HtmlDocTree(kind, start, (EndElementTree) tag, body);
					}
					body.add(tag);
					break;
				case TEXT:
					String text = ((TextTree) tag).getBody();
					if (kind != HtmlTagKind.PRE && text.isBlank()) {
						continue;
					}
					body.add(tag);
					break;
				default:
					body.add(tag);
					break;
			}
		}
		converter.logUnterminatedHtml(el, start);
		return new HtmlDocTree(kind, start, null, body);
	}
Gets an {@link HtmlDocTree} for the provided {@link StartElementTree}

@param converter the html converter
@param start the html start
@param el the element containing the documentation being processed
@param it the iterator over the remaining tags
@return the created {@link HtmlDocTree}
GhidraBuild/BuildFiles/Doclets/src/main/java/ghidra/doclets/typestubs/HtmlDocTree.java