changeset 27:4aba57a33376

add decorator for converting text to lines of text
author Jeff Hammel <k0scist@gmail.com>
date Sun, 23 Feb 2014 13:54:18 -0800
parents c23782a7b7ba
children fd626585c299
files textshaper/decorator.py textshaper/quote.py
diffstat 2 files changed, 28 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/textshaper/decorator.py	Sun Feb 23 13:54:18 2014 -0800
@@ -0,0 +1,27 @@
+# -*- coding: utf-8 -*-
+
+"""
+decorators for textshaper
+"""
+
+string = (str, unicode)
+
+class lines(object):
+    """
+    allow functions that process lists of lines of text to
+    accept strings, lists of lines, or a file-like object
+    """
+
+    def __init__(self, function, line_separator='\n'):
+        self.function = function
+        self.line_separator = line_separator
+
+    def __call__(self, text, *args, **kwargs):
+        is_string = False
+        if isinstance(text, string):
+            is_string = True
+            text = text.splitlines()
+        retval = self.function(*args, **kwargs)
+        if is_string:
+            return self.line_separator.join(retval)
+        return retval
--- a/textshaper/quote.py	Sun Feb 23 11:41:37 2014 -0800
+++ b/textshaper/quote.py	Sun Feb 23 13:54:18 2014 -0800
@@ -17,8 +17,7 @@
     close_quote -- closing quote character, if different from opening quote
     """
 
-    if close_quote is None:
-        close_quote = quote
+    close_quote = quote if close_quote is None else close_quote
     return ["{}{}{}".format(quote, line, close_quote) for line in lines]