Generate covers: Fix & in the series causing incorrect formatting of series number. Fixes #1638759 [Cover Generator Format](https://bugs.launchpad.net/calibre/+bug/1638759)

This commit is contained in:
Kovid Goyal 2016-11-03 21:15:56 +05:30
parent d3602de25e
commit 7003a4e90b

View File

@ -105,7 +105,7 @@ def parse_text_formatting(text):
if tag in {'b', 'strong', 'i', 'em'}: if tag in {'b', 'strong', 'i', 'em'}:
open_ranges.append([tag, offset, -1]) open_ranges.append([tag, offset, -1])
else: else:
offset += len(tok) offset += len(tok.replace('&', '&'))
text.append(tok) text.append(tok)
text = ''.join(text) text = ''.join(text)
formats = [] formats = []
@ -718,16 +718,18 @@ def generate_masthead(title, output_path=None, width=600, height=60, as_qimage=F
def test(scale=0.25): def test(scale=0.25):
from PyQt5.Qt import QLabel, QApplication, QPixmap, QMainWindow, QWidget, QScrollArea, QGridLayout from PyQt5.Qt import QLabel, QPixmap, QMainWindow, QWidget, QScrollArea, QGridLayout
app = QApplication([]) from calibre.gui2 import Application
app = Application([])
mi = Metadata('Unknown', ['Kovid Goyal', 'John & Doe', 'Author']) mi = Metadata('Unknown', ['Kovid Goyal', 'John & Doe', 'Author'])
mi.series = 'A series of styles' mi.series = 'A series & styles'
m = QMainWindow() m = QMainWindow()
sa = QScrollArea(m) sa = QScrollArea(m)
w = QWidget(m) w = QWidget(m)
sa.setWidget(w) sa.setWidget(w)
l = QGridLayout(w) l = QGridLayout(w)
w.setLayout(l), l.setSpacing(30) w.setLayout(l), l.setSpacing(30)
scale *= w.devicePixelRatioF()
labels = [] labels = []
for r, color in enumerate(sorted(default_color_themes)): for r, color in enumerate(sorted(default_color_themes)):
for c, style in enumerate(sorted(all_styles())): for c, style in enumerate(sorted(all_styles())):
@ -736,6 +738,7 @@ def test(scale=0.25):
prefs = override_prefs(cprefs, override_color_theme=color, override_style=style) prefs = override_prefs(cprefs, override_color_theme=color, override_style=style)
scale_cover(prefs, scale) scale_cover(prefs, scale)
img = generate_cover(mi, prefs=prefs, as_qimage=True) img = generate_cover(mi, prefs=prefs, as_qimage=True)
img.setDevicePixelRatio(w.devicePixelRatioF())
la = QLabel() la = QLabel()
la.setPixmap(QPixmap.fromImage(img)) la.setPixmap(QPixmap.fromImage(img))
l.addWidget(la, r, c) l.addWidget(la, r, c)