diff --git a/src/calibre/ebooks/conversion/cli.py b/src/calibre/ebooks/conversion/cli.py
index 33ae61f16a..278d599378 100644
--- a/src/calibre/ebooks/conversion/cli.py
+++ b/src/calibre/ebooks/conversion/cli.py
@@ -143,7 +143,7 @@ def add_pipeline_options(parser, plumber):
' patterns. Disabled by default. Use %s to enable. '
' Individual actions can be disabled with the %s options.')
% ('--enable-heuristics', '--disable-*'),
- ['enable_heuristics'] + HEURISTIC_OPTIONS
+ ['enable_heuristics', 'replace_scene_breaks'] + HEURISTIC_OPTIONS
),
'SEARCH AND REPLACE' : (
diff --git a/src/calibre/ebooks/conversion/plumber.py b/src/calibre/ebooks/conversion/plumber.py
index 5807ba5f8f..59d7a0ed2a 100644
--- a/src/calibre/ebooks/conversion/plumber.py
+++ b/src/calibre/ebooks/conversion/plumber.py
@@ -530,6 +530,10 @@ OptionRecommendation(name='format_scene_breaks',
help=_('Left aligned scene break markers are center aligned. '
'Replace soft scene breaks that use multiple blank lines with'
'horizontal rules.')),
+
+OptionRecommendation(name='replace_scene_breaks',
+ recommended_value=None, level=OptionRecommendation.LOW,
+ help=_('Replace scene breaks with the specified text.')),
OptionRecommendation(name='dehyphenate',
recommended_value=True, level=OptionRecommendation.LOW,
diff --git a/src/calibre/ebooks/conversion/utils.py b/src/calibre/ebooks/conversion/utils.py
index 1263372ce3..cf305f1022 100644
--- a/src/calibre/ebooks/conversion/utils.py
+++ b/src/calibre/ebooks/conversion/utils.py
@@ -33,6 +33,7 @@ class HeuristicProcessor(object):
self.line_open = "<(?P ]*>\s* '
def is_pdftohtml(self, src):
return '' in src[:1000]
@@ -481,6 +482,22 @@ class HeuristicProcessor(object):
html = self.blankreg.sub('\n '
+ else:
+ replacement_break = html2text(replacement_break)
+ replacement_break = re.sub('\s', ' ', replacement_break)
+ scene_break = self.scene_break_open+replacement_break+'
' + '\g
]*>\s*
', ']*>\s*
', replacement_break, html) + else: + html = scene_break.sub(self.scene_break_open+'\g