From b86a502fbb5423a6bd4c203254e02b04c7364029 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Tue, 24 Sep 2013 18:33:45 +0530 Subject: [PATCH] ... --- src/calibre/ebooks/docx/writer/from_html.py | 29 +++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/src/calibre/ebooks/docx/writer/from_html.py b/src/calibre/ebooks/docx/writer/from_html.py index 3576d71f1f..e588c4fa33 100644 --- a/src/calibre/ebooks/docx/writer/from_html.py +++ b/src/calibre/ebooks/docx/writer/from_html.py @@ -78,18 +78,43 @@ class TextStyle(object): def __eq__(self, other): return hash(self) == hash(other) +class LineBreak(object): + + def __init__(self, clear='none'): + self.clear = clear + class TextRun(object): def __init__(self, style): self.style = style + self.texts = [] + + def add_text(self, text, preserve_whitespace): + self.texts.append((text, preserve_whitespace)) + + def add_break(self, clear='none'): + self.texts.append(LineBreak(clear=clear)) + +style_cache = {} class Block(object): def __init__(self): - self.texts = [] + self.runs = [] def add_text(self, text, style): - pass + ts = TextStyle(style) + ws = style['white-space'] + if self.runs and ts == self.runs[-1].style: + run = self.runs[-1] + else: + run = TextRun(ts) + if ws == 'pre-line': + for text in text.splitlines(): + run.add_text(text, False) + run.add_break() + else: + run.add_text(text, ws in {'pre', 'pre-wrap'}) class Convert(object):