Comment afficher la structure d'un fichier org-mode sous la forme d'un arbre ?

Le format org-mode permet d'exprimer facilement une structure arborescente, et de ce fait, je l'utilise pour représenter des cladogrammes. Cette structure est exprimée par la variation du nombre d'astérisques marquant chaque en-tête. Toutefois, on peut souhaiter que la structure d'un arbre très long ou très profond puisse être mieux mise en valeur visuellement et c'est pourquoi j'ai commencé aussi à représenter des cladogrammes avec des filets ┣, ┗, ┃ (box drawings en anglais) et à grand renfort de tabulations. C'est fastidieux, mais simple.

Le plus gros incovénient de cette méthode est qu'elle m'oblige à faire à chaque fois deux cladogrammes : au format org-mode pour la possibilité d'ajouter librement aux taxons les informations qui me semblent utiles et au moyen de ces filets pour les visualiser facilement.

Puis j'ai découvert l'existence d'orgTree, un script python qui produit une image grâce à Graphviz représentant schématiquement la structure d'un fichier org-mode. Collatéralement, il produit en sortie un arbre représentés avec des filets.

Hélas, il est écrit dans la version 2.7 de python. Or, je ne sais pas plus comment l'adapter pour qu'il fonctionne avec python3 qu'installer le module PyOrgMode dont il dépend pour qu'il fonctionne avec python2.7. (Je suis une tanche en programmation.)

Mon désir était si fort que j'ai essayé d'écrire mon propre script. Cherchant un autre module que PyOrgMode, j'ai trouvé orgparse qui me semblait simple à comprendre et à utiliser, y compris avec anyTree qui permet de produire les arbres.

Voici à quoi je suis arrivé à tâtons et au prix de bien des « NameError: name 'get_parent' is not defined » et de « TypeError: metaclass conflict », sans compter les « IndexError: Out of range 1 » ou encore les « TypeError: 'Node' object does not support item assignment » (et non sans l'aide de la page https://stackoverflow.com/questions/51902250/read-data-from-a-file-and-create-a-tree-using-anytree-in-python) :

    
      
      from anytree  import Node, RenderTree, NodeMixin
      from orgparse import load, loads

      arbre = load('../Archaeplastida.org')
      root = Node(arbre[1].get_heading())
      nodes = {}
      nodes[root.name] = root
      for node in arbre[2:]:
          nom = node.get_heading()
          parent_name = node.get_parent().get_heading()
          nodes[nom] = Node(nom, parent=nodes[parent_name])
      for pre, _, node in RenderTree(root):
          print("%s%s" % (pre, node.name))