From 0cf114ada1a48e7903d38789264fbf08d5a7c62c Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Wed, 15 May 2019 12:05:09 +0530 Subject: [PATCH] Handle newlines when serializing to csr files See #1827198 (Book convertion loading regexPDF to epub) --- src/calibre/ebooks/conversion/cli.py | 5 +++++ src/calibre/gui2/convert/search_and_replace.py | 3 ++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/calibre/ebooks/conversion/cli.py b/src/calibre/ebooks/conversion/cli.py index f1818291aa..e0ea0b4c0a 100644 --- a/src/calibre/ebooks/conversion/cli.py +++ b/src/calibre/ebooks/conversion/cli.py @@ -334,6 +334,10 @@ def abspath(x): return os.path.abspath(os.path.expanduser(x)) +def escape_sr_pattern(exp): + return exp.replace('\n', '\ue123') + + def read_sr_patterns(path, log=None): import json, re pats = [] @@ -344,6 +348,7 @@ def read_sr_patterns(path, log=None): if pat is None: if not line.strip(): continue + line = line.replace('\ue123', '\n') try: re.compile(line) except: diff --git a/src/calibre/gui2/convert/search_and_replace.py b/src/calibre/gui2/convert/search_and_replace.py index bbd1b5b481..c31d6d9115 100644 --- a/src/calibre/gui2/convert/search_and_replace.py +++ b/src/calibre/gui2/convert/search_and_replace.py @@ -122,6 +122,7 @@ class SearchAndReplaceWidget(Widget, Ui_Form): show=True) def sr_save_clicked(self): + from calibre.ebooks.conversion.cli import escape_sr_pattern as escape filename = choose_save_file(self, 'sr_saved_patterns', _('Save calibre search-replace definitions file'), filters=[ @@ -130,7 +131,7 @@ class SearchAndReplaceWidget(Widget, Ui_Form): if filename: with codecs.open(filename, 'w', 'utf-8') as f: for search, replace in self.get_definitions(): - f.write(search + u'\n' + replace + u'\n\n') + f.write(escape(search) + u'\n' + escape(replace) + u'\n\n') def sr_up_clicked(self): self.cell_rearrange(-1)