I have write a little parser for html.

for an input like:
<div att="abc">
  <span> text </span>
  <br />

i get:
(("div" tag
   (("span" tag
      ("span" end_tag nil nil nil 31 38)
      ("span" start_tag nil nil nil 19 25))
     nil nil 19 38)
    ("br" tag nil nil nil 48 54))
   ("div" end_tag nil nil nil 55 61)
   ("div" start_tag
     (("att" attribute
       (:value "\"abc\"")
       nil nil 6 15)))
    nil nil 1 16))
  nil #<overlay from 1 to 61 in test.html>))

You can notice that only the "div" tag as an overlay, "span"
and "br" (contained in :children of "div") have no overlay at 5th
position (semantic-tag-overlay tag) return nil.

I have override semantic-tag-components and
(define-mode-local-override semantic-tag-components-with-overlays html-mode (tag)
  "Return a list of components for TAG."
  (if (eq nil (semantic-tag-get-attribute tag :children))
    (semantic-tag-get-attribute tag :children)

semantic-tag-components is used in semantic--tag-link-to-buffer
In this function i saw it need the semantic-tag-overlay return a

So my question is how to make the children tag have an overlay?

Good Bye.