 //
 private extension TextListFormatter
 {
+    ///
+    ///
+    func applyLists(ofStyle style: TextList.Style, toString string: NSMutableAttributedString, atNonContiguousRanges ranges: [NSRange]) -> NSRange? {
+        guard let first = ranges.first else {
+            return nil
+        }
+
+        let grouped = groupContiguousRanges(ranges)
+        var length = 0
+
+        for group in grouped.reverse() {
+            guard let range = applyList(ofStyle: style, toString: string, atRanges: group) else {
+                continue
+            }
+
+            length += range.length
+        }
+
+        return NSRange(location: first.location, length: length)
+    }
+
+
     /// Applies a TextList attribute to the specified paragraph ranges in the
     /// specified string. Each paragraph range is treated as a list item.
     ///

        applyList(ofStyle: nextListAttribute.style, toString: string, atRanges: nextListParagraphs)
    }
}

            return nil
        }

        // 1st Paragraph: No List >> Apply, skipping paragraphs that currently contain TextLists
        guard let listRange = string.rangeOfTextList(atIndex: paragraphRanges[0].location) else {
            let filtered = filterListRanges(paragraphRanges, fromString: string, notMatchingStyle: style)
            return applyLists(ofStyle: style, toString: string, atNonContiguousRanges: filtered)
        }

        // 1st Paragraph: Matching List Style >> Remove
