+#!/usr/bin/env python3
+
import constants
import os
-def remove_tricky_unicode(x):
- try:
- x = x.decode('utf-8')
- x = x.replace("\u2018", "'").replace("\u2019", "'")
- x = x.replace("\u201c", '"').replace("\u201d", '"')
- x = x.replace("\u2e3a", "-").replace("\u2014", "-")
- except:
- pass
- return x
class file_writer:
- def __init__(self, filename):
- self.full_filename = os.path.join(constants.pages_dir,
- filename)
- self.f = open(self.full_filename, 'wb')
- self.xforms = [ remove_tricky_unicode ]
+ """Helper context to write a pages file."""
+
+ def __init__(self, filename: str, *, transformations=[]):
+ self.full_filename = os.path.join(constants.pages_dir, filename)
+ self.xforms = [file_writer.remove_tricky_unicode]
+ self.xforms.extend(transformations)
+ self.f = None
- def add_xform(self, xform):
- self.xforms.append(xform)
+ @staticmethod
+ def remove_tricky_unicode(x: str) -> str:
+ try:
+ x = x.replace("\u2018", "'").replace("\u2019", "'")
+ x = x.replace("\u201c", '"').replace("\u201d", '"')
+ x = x.replace("\u2e3a", "-").replace("\u2014", "-")
+ except:
+ pass
+ return x
def write(self, data):
for xform in self.xforms:
data = xform(data)
- self.f.write(data.encode('utf-8'))
+ self.f.write(data.encode("utf-8"))
+
+ def __enter__(self):
+ self.f = open(self.full_filename, "wb")
+ return self
+
+ def __exit__(self, exc_type, exc_value, exc_traceback):
+ self.close()
def done(self):
- self.f.close()
+ self.close()
def close(self):
- self.done()
+ self.f.close()
+
# Test
-#def toupper(x):
-# return x.upper()
+# def toupper(x):
+# return x.upper()
#
-#fw = file_writer("test")
-#fw.add_xform(toupper)
-#fw.write(u"This is a \u201ctest\u201d. \n")
-#fw.done()
+# with file_writer("test", transformations=[toupper]) as fw:
+# fw.write(u"Another test!!")