Peter Ward avatar Peter Ward committed aa410f2

add utils module

Comments (0)

Files changed (1)

shinypress/utils.py

+try:
+    from cStringIO import StringIO
+except ImportError:
+    from StringIO import StringIO
+
+import itertools
+
+def group_paragraphs(lines):
+    """
+    Group an iterable by groups of non-empty lines.
+
+    Warning: the iterables this returns must be used in order,
+    otherwise badness will ensue.
+    """
+
+    # number of the current paragraph
+    i = [0]
+    up_to = lambda j: i[0] == j
+    finished = lambda: up_to(-1)
+    def next_paragraph():
+        i[0] += 1
+    def finish():
+        i[0] = -1
+
+    def make_iter(j):
+        while True:
+            if finished():
+                break
+
+            if not up_to(j):
+                raise ValueError, "iterators must be used in order"
+
+            try:
+                line = lines.next()
+            except StopIteration:
+                finish()
+                return
+
+            if not line:
+                break
+
+            yield line
+
+        next_paragraph()
+
+    for j in itertools.count():
+        yield make_iter(j)
+        if finished():
+            break
+
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.