 
 
 (defprotocol YPlottable
-  (ys [graph node-sep char-sep] "Returns y-coordinates to nodes, given
-                                 minimum separations between nodes and
-                                 characters")
+  (ys [graph node-sep char-sep] [graph node-sep char-sep delta]
+    "Returns y-coordinates to nodes, given minimum separations between nodes
+     and characters")
   (min-y [graph node-sep char-sep] "Minimum y-coordinate in the graph")
   (max-y [graph node-sep char-sep] "Maximum y-coordinate in the graph")
   (mid-y [graph node-sep char-sep] "Midpoint of y-coordinates in the graph")

         (apply max)))

  (width [this node-sep char-sep]
    (- (max-y this node-sep char-sep) (min-y this node-sep char-sep)))

  (shift-ys [this node-sep char-sep delta]
    (->> (ys this node-sep char-sep)
         (map (fn [[node y]]
                [node (+ y delta)]))
         (into {}))))


(defn square [x]

         (map #(let [delta (if (:aligned-down (meta %))
                             (- narrow-max-y (max-y % node-sep char-sep))
                             (- narrow-min-y (min-y % node-sep char-sep)))]
                 (ys % node-sep char-sep delta)))
         (apply merge-with #(if (vector? %1) (conj %1 %2) [%1 %2]))
         (map (fn [[node ys]]
                (let [sort-ys (sort ys)]
