 
     ///
     ///
-    private func paragraphStyleElements(from nodes: [Node]) -> [ElementNode] {
+    private func rightMostParagraphStyleElements(from nodes: [Node]) -> [ElementNode] {
+        return paragraphStyleElements(from: nodes) { children in
+            return children.last
+        }
+    }
+
+
+    ///
+    ///
+    private func leftMostParagraphStyleElements(from nodes: [Node]) -> [ElementNode] {
+        return paragraphStyleElements(from: nodes) { children in
+            return children.first
+        }
+    }
+
+
+    ///
+    ///
+    private func paragraphStyleElements(from nodes: [Node], childPicker: (([Node]) -> Node?)) -> [ElementNode] {
         var elements = [ElementNode]()
-        var nextElement = nodes.first as? ElementNode
+        var nextElement = childPicker(nodes) as? ElementNode
+
 
         while let currentElement = nextElement {
             guard currentElement.isBlockLevelElement() else {

    ///
    ///
    func merge(left: [Node], right: [Node]) -> Bool {
        let left = paragraphStyleElements(from: left)
        let right = paragraphStyleElements(from: right)

        guard let (target, source) = findLowestMergeableNodes(left: left, right: right) else {
            return false

            }

            elements.append(currentElement)
            nextElement = childPicker(currentElement.children) as? ElementNode
        }

        return elements
