diff --git a/src/calibre/gui2/tweak_book/editor/text.py b/src/calibre/gui2/tweak_book/editor/text.py index f3edd3da2a..10eb76883b 100644 --- a/src/calibre/gui2/tweak_book/editor/text.py +++ b/src/calibre/gui2/tweak_book/editor/text.py @@ -6,7 +6,7 @@ from __future__ import (unicode_literals, division, absolute_import, __license__ = 'GPL v3' __copyright__ = '2013, Kovid Goyal ' -import textwrap +import textwrap, unicodedata from future_builtins import map import regex @@ -75,7 +75,7 @@ class TextEdit(QPlainTextEdit): @property def selected_text(self): - return unicode(self.textCursor().selectedText()) + return unicodedata.normalize('NFC', unicode(self.textCursor().selectedText())) def sizeHint(self): return self.size_hint @@ -125,7 +125,7 @@ class TextEdit(QPlainTextEdit): self.highlighter = {'html':HTMLHighlighter, 'css':CSSHighlighter, 'xml':XMLHighlighter}.get(syntax, SyntaxHighlighter)(self) self.highlighter.apply_theme(self.theme) self.highlighter.setDocument(self.document()) - self.setPlainText(text) + self.setPlainText(unicodedata.normalize('NFC', text)) if process_template and QPlainTextEdit.find(self, '%CURSOR%'): c = self.textCursor() c.insertText('') @@ -136,7 +136,7 @@ class TextEdit(QPlainTextEdit): c.beginEditBlock() c.clearSelection() c.select(c.Document) - c.insertText(text) + c.insertText(unicodedata.normalize('NFC', text)) c.endEditBlock() c.setPosition(min(pos, len(text))) self.setTextCursor(c) diff --git a/src/calibre/gui2/tweak_book/editor/widget.py b/src/calibre/gui2/tweak_book/editor/widget.py index 9ed724007c..8f4ad239d2 100644 --- a/src/calibre/gui2/tweak_book/editor/widget.py +++ b/src/calibre/gui2/tweak_book/editor/widget.py @@ -6,6 +6,8 @@ from __future__ import (unicode_literals, division, absolute_import, __license__ = 'GPL v3' __copyright__ = '2013, Kovid Goyal ' +import unicodedata + from PyQt4.Qt import QMainWindow, Qt, QApplication, pyqtSignal from calibre import xml_replace_entities @@ -56,7 +58,7 @@ class Editor(QMainWindow): @dynamic_property def data(self): def fget(self): - ans = unicode(self.editor.toPlainText()) + ans = self.get_raw_data() if self.syntax == 'html': ans = xml_replace_entities(ans) return ans.encode('utf-8') @@ -68,7 +70,7 @@ class Editor(QMainWindow): self.editor.load_text(template, syntax=self.syntax, process_template=True) def get_raw_data(self): - return unicode(self.editor.toPlainText()) + return unicodedata.normalize('NFC', unicode(self.editor.toPlainText())) def replace_data(self, raw, only_if_different=True): if isinstance(raw, bytes):