From 36bb8ba76ecd6f07f2adfb61c477725938ff50ed Mon Sep 17 00:00:00 2001 From: John Schember Date: Sun, 30 May 2010 13:53:18 -0400 Subject: [PATCH] TXT Input: preserve spaces option. --- src/calibre/ebooks/txt/input.py | 8 +++++++- src/calibre/ebooks/txt/processor.py | 8 ++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/calibre/ebooks/txt/input.py b/src/calibre/ebooks/txt/input.py index 7be1a3449a..a0570c07ae 100644 --- a/src/calibre/ebooks/txt/input.py +++ b/src/calibre/ebooks/txt/input.py @@ -8,7 +8,8 @@ import os from calibre.customize.conversion import InputFormatPlugin, OptionRecommendation from calibre.ebooks.txt.processor import convert_basic, convert_markdown, \ - separate_paragraphs_single_line, separate_paragraphs_print_formatted + separate_paragraphs_single_line, separate_paragraphs_print_formatted, \ + preserve_spaces class TXTInput(InputFormatPlugin): @@ -28,6 +29,9 @@ class TXTInput(InputFormatPlugin): 'an indent (either a tab or 2+ spaces) represents a paragraph. ' 'Paragraphs end when the next line that starts with an indent ' 'is reached.')), + OptionRecommendation(name='preserve_spaces', recommended_value=False, + help=_('Normally extra spaces are condensed into a single space. ' + 'With this option all spaces will be displayed.')), OptionRecommendation(name='markdown', recommended_value=False, help=_('Run the text input through the markdown pre-processor. To ' 'learn more about markdown see')+' http://daringfireball.net/projects/markdown/'), @@ -48,6 +52,8 @@ class TXTInput(InputFormatPlugin): txt = separate_paragraphs_single_line(txt) if options.print_formatted_paras: txt = separate_paragraphs_print_formatted(txt) + if options.preserve_spaces: + txt = preserve_spaces(txt) if options.markdown: log.debug('Running text though markdown conversion...') diff --git a/src/calibre/ebooks/txt/processor.py b/src/calibre/ebooks/txt/processor.py index 06276a4bbc..baebf2f298 100644 --- a/src/calibre/ebooks/txt/processor.py +++ b/src/calibre/ebooks/txt/processor.py @@ -24,6 +24,9 @@ def convert_basic(txt, title=''): for line in txt.splitlines(): lines.append(line.strip()) txt = '\n'.join(lines) + + # Condense redundant spaces + txt = re.sub('[ ]{2,}', ' ', txt) # Remove blank lines from the beginning and end of the document. txt = re.sub('^\s+(?=.)', '', txt) @@ -56,6 +59,11 @@ def separate_paragraphs_print_formatted(txt): txt = re.sub('(?miu)^(\t+|[ ]{2,})(?=.)', '\n\t', txt) return txt +def preserve_spaces(txt): + txt = txt.replace(' ', ' ') + txt = txt.replace('\t', ' ') + return txt + def opf_writer(path, opf_name, manifest, spine, mi): opf = OPFCreator(path, mi) opf.create_manifest(manifest)