lib/ordered_tree: factorize `write_line` so subclasses can redefine it.
authorJean Privat <jean@pryen.org>
Thu, 9 Feb 2017 18:13:16 +0000 (13:13 -0500)
committerJean Privat <jean@pryen.org>
Thu, 9 Feb 2017 18:13:16 +0000 (13:13 -0500)
Signed-off-by: Jean Privat <jean@pryen.org>

lib/ordered_tree.nit

index d1dde15..86940af 100644 (file)
@@ -147,8 +147,7 @@ class OrderedTree[E: Object]
        redef fun write_to(stream: Writer)
        do
                for r in roots do
-                       stream.write display(r)
-                       stream.write "\n"
+                       write_line(stream, r, "")
                        sub_write_to(stream, r, "")
                end
        end
@@ -161,15 +160,29 @@ class OrderedTree[E: Object]
                var last = subs.last
                for e2 in subs do
                        if e2 != last then
-                               o.write "{prefix}|--{display(e2)}\n"
+                               write_line(o, e2, prefix+"|--")
                                sub_write_to(o, e2, prefix+"|  ")
                        else
-                               o.write "{prefix}`--{display(e2)}\n"
+                               write_line(o, e2, prefix+"`--")
                                sub_write_to(o, e2, prefix+"   ")
                        end
                end
        end
 
+       # Write the full line for the element `e` in `o`.
+       #
+       # Basically it does:
+       #
+       # ~~~nitish
+       # o.write "{prefix}{display(e)}\n"
+       # ~~~
+       #
+       # Usually, you should redefine `display` to change the display of an element.
+       protected fun write_line(o: Writer, e: E, prefix: String)
+       do
+               o.write "{prefix}{display(e)}\n"
+       end
+
        # Sort roots and other elements using a comparator method
        # This method basically sorts roots then each group of children
        fun sort_with(comparator: Comparator)