diff --git a/src/calibre/ebooks/html/to_zip.py b/src/calibre/ebooks/html/to_zip.py
index 30e3023e77..2233ea57a7 100644
--- a/src/calibre/ebooks/html/to_zip.py
+++ b/src/calibre/ebooks/html/to_zip.py
@@ -24,6 +24,20 @@ every time you add an HTML file to the library.\
supported_platforms = ['windows', 'osx', 'linux']
on_import = True
+ def parse_my_settings(self, sc):
+ if not sc:
+ sc = ''
+ if sc.startswith('{'):
+ import json
+ try:
+ return json.loads(sc)
+ except Exception:
+ return {}
+ else:
+ sc = sc.strip()
+ enc, _, bfs = sc.partition('|')
+ return {'encoding': enc, 'breadth_first': bfs == 'bf'}
+
def run(self, htmlfile):
import codecs
from calibre import prints
@@ -36,8 +50,8 @@ every time you add an HTML file to the library.\
recs =[('debug_pipeline', tdir, OptionRecommendation.HIGH)]
recs.append(['keep_ligatures', True, OptionRecommendation.HIGH])
if self.site_customization and self.site_customization.strip():
- sc = self.site_customization.strip()
- enc, _, bf = sc.partition('|')
+ settings = self.parse_my_settings(self.site_customization)
+ enc = settings.get('encoding')
if enc:
try:
codecs.lookup(enc)
@@ -45,9 +59,8 @@ every time you add an HTML file to the library.\
prints('Ignoring invalid input encoding for HTML:', enc)
else:
recs.append(['input_encoding', enc, OptionRecommendation.HIGH])
- if bf == 'bf':
- recs.append(['breadth_first', True,
- OptionRecommendation.HIGH])
+ if settings.get('breadth_first'):
+ recs.append(['breadth_first', True, OptionRecommendation.HIGH])
gui_convert(htmlfile, tdir, recs, abort_after_input_dump=True)
of = self.temporary_file('_plugin_html2zip.zip')
tdir = os.path.join(tdir, 'input')
@@ -63,7 +76,7 @@ every time you add an HTML file to the library.\
def customization_help(self, gui=False):
return _('Character encoding for the input HTML files. Common choices '
- 'include: cp1252, cp1251, latin1 and utf-8.')
+ 'include: utf-8, cp1252, cp1251 and latin1.')
def do_user_config(self, parent=None):
'''
@@ -71,6 +84,7 @@ every time you add an HTML file to the library.\
True if the user clicks OK, False otherwise. The changes are
automatically applied.
'''
+ import json
from qt.core import (QDialog, QDialogButtonBox, QVBoxLayout,
QLabel, Qt, QLineEdit, QCheckBox)
@@ -97,14 +111,9 @@ every time you add an HTML file to the library.\
' calibre does it depth first, i.e. if file A links to B and '
' C, but B links to D, the files are added in the order A, B, D, C. '
' With this option, they will instead be added as A, B, C, D'))
- sc = plugin_customization(self)
- if not sc:
- sc = ''
- sc = sc.strip()
- enc = sc.partition('|')[0]
- bfs = sc.partition('|')[-1]
- bf.setChecked(bfs == 'bf')
- sc = QLineEdit(enc, config_dialog)
+ settings = self.parse_my_settings(plugin_customization(self))
+ bf.setChecked(bool(settings.get('breadth_first')))
+ sc = QLineEdit(str(settings.get('encoding', '')), config_dialog)
v.addWidget(sc)
v.addWidget(bf)
v.addWidget(button_box)
@@ -112,9 +121,12 @@ every time you add an HTML file to the library.\
config_dialog.exec()
if config_dialog.result() == QDialog.DialogCode.Accepted:
- sc = str(sc.text()).strip()
+ settings = {}
+ enc = str(sc.text()).strip()
+ if enc:
+ settings['encoding'] = enc
if bf.isChecked():
- sc += '|bf'
- customize_plugin(self, sc)
+ settings['breadth_first'] = True
+ customize_plugin(self, json.dumps(settings, ensure_ascii=True))
return config_dialog.result()