   (ys [this node-sep char-sep]
     (memo-ys this node-sep char-sep))
 
+  (ys [this node-sep char-sep delta]
+    (->> (ys this node-sep char-sep)
+         (map (fn [[node y]]
+                [node (+ y delta)]))
+         (into {})))
+
   (min-y [this node-sep char-sep]
     (apply min (map #(get (ys this node-sep char-sep) (ffirst %)) classes)))
 

         (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)))]
                 (shift-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)]

         (apply max)))

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


(defn square [x]
