// Turning the inline scratch tree into the public `Inline` values.

///|
/// The inlines inside `parent`, in order. Empty text nodes are dropped: they
//  only exist while delimiters are being paired up.
fn materialize_inlines(tree : InlineTree, parent : Int32) -> Array[Inline] {
  let out : Array[Inline] = []
  let mut node = tree.nodes[parent].first_child
  while node >= 0 {
    let next = tree.nodes[node].next
    let current = tree.nodes[node]
    match current.kind {
      TextNode => {
        let text = tree.literal(node)
        if text.length() > 0 {
          out.push(Text(text.to_owned()))
        }
      }
      CodeNode => out.push(Code(current.text))
      HtmlNode => out.push(Html(current.text))
      SoftBreakNode => out.push(Break(Soft))
      HardBreakNode => out.push(Break(Hard))
      EmphNode => out.push(Emphasis(materialize_inlines(tree, node)))
      StrongNode => out.push(Strong(materialize_inlines(tree, node)))
      StrikeNode => out.push(Strike(materialize_inlines(tree, node)))
      LinkNode =>
        out.push(
          Link({
            dest: current.text,
            title: current.title,
            content: materialize_inlines(tree, node),
          }),
        )
      ImageNode =>
        out.push(
          Image({
            dest: current.text,
            title: current.title,
            content: materialize_inlines(tree, node),
          }),
        )
      FootnoteRefNode =>
        out.push(FootnoteRef({ label: current.text, number: 0, ref_ix: 0, }))
    }
    node = next
  }
  out
}