diff --git a/resources/images/mimetypes/snb.png b/resources/images/mimetypes/snb.png new file mode 100644 index 0000000000..41b55f4343 Binary files /dev/null and b/resources/images/mimetypes/snb.png differ diff --git a/src/calibre/customize/builtins.py b/src/calibre/customize/builtins.py index 5fd51de38c..d3311b5217 100644 --- a/src/calibre/customize/builtins.py +++ b/src/calibre/customize/builtins.py @@ -435,6 +435,7 @@ from calibre.ebooks.rb.output import RBOutput from calibre.ebooks.rtf.output import RTFOutput from calibre.ebooks.tcr.output import TCROutput from calibre.ebooks.txt.output import TXTOutput +from calibre.ebooks.snb.output import SNBOutput from calibre.customize.profiles import input_profiles, output_profiles @@ -510,6 +511,7 @@ plugins += [ RTFOutput, TCROutput, TXTOutput, + SNBOutput, ] # Order here matters. The first matched device is the one used. plugins += [ diff --git a/src/calibre/ebooks/snb/__init__.py b/src/calibre/ebooks/snb/__init__.py new file mode 100644 index 0000000000..d83022b362 --- /dev/null +++ b/src/calibre/ebooks/snb/__init__.py @@ -0,0 +1,9 @@ +#!/usr/bin/env python +__license__ = 'GPL v3' +__copyright__ = '2010, Li Fanxi ' +__docformat__ = 'restructuredtext en' + +''' +Used for snb output +''' + diff --git a/src/calibre/ebooks/snb/output.py b/src/calibre/ebooks/snb/output.py new file mode 100644 index 0000000000..4b94b65405 --- /dev/null +++ b/src/calibre/ebooks/snb/output.py @@ -0,0 +1,70 @@ +# -*- coding: utf-8 -*- + +__license__ = 'GPL 3' +__copyright__ = '2010, Li Fanxi ' +__docformat__ = 'restructuredtext en' + +import os + +from calibre.customize.conversion import OutputFormatPlugin, \ + OptionRecommendation + +class SNBOutput(OutputFormatPlugin): + + name = 'SNB Output' + author = 'Li Fanxi' + file_type = 'snb' + + options = set([ + # OptionRecommendation(name='newline', recommended_value='system', + # level=OptionRecommendation.LOW, + # short_switch='n', choices=TxtNewlines.NEWLINE_TYPES.keys(), + # help=_('Type of newline to use. Options are %s. Default is \'system\'. ' + # 'Use \'old_mac\' for compatibility with Mac OS 9 and earlier. ' + # 'For Mac OS X use \'unix\'. \'system\' will default to the newline ' + # 'type used by this OS.') % sorted(TxtNewlines.NEWLINE_TYPES.keys())), + OptionRecommendation(name='output_encoding', recommended_value='utf-8', + level=OptionRecommendation.LOW, + help=_('Specify the character encoding of the output document. ' \ + 'The default is utf-8. Note: This option is not honored by all ' \ + 'formats.')), + # OptionRecommendation(name='inline_toc', + # recommended_value=False, level=OptionRecommendation.LOW, + # help=_('Add Table of Contents to beginning of the book.')), + OptionRecommendation(name='max_line_length', + recommended_value=0, level=OptionRecommendation.LOW, + help=_('The maximum number of characters per line. This splits on ' + 'the first space before the specified value. If no space is found ' + 'the line will be broken at the space after and will exceed the ' + 'specified value. Also, there is a minimum of 25 characters. ' + 'Use 0 to disable line splitting.')), + # OptionRecommendation(name='force_max_line_length', + # recommended_value=False, level=OptionRecommendation.LOW, + # help=_('Force splitting on the max-line-length value when no space ' + # 'is present. Also allows max-line-length to be below the minimum')), + ]) + + def convert(self, oeb_book, output_path, input_plugin, opts, log): + pass + # writer = TXTMLizer(log) + # txt = writer.extract_content(oeb_book, opts) + + # log.debug('\tReplacing newlines with selected type...') + # txt = specified_newlines(TxtNewlines(opts.newline).newline, txt) + + # close = False + # if not hasattr(output_path, 'write'): + # close = True + # if not os.path.exists(os.path.dirname(output_path)) and os.path.dirname(output_path) != '': + # os.makedirs(os.path.dirname(output_path)) + # out_stream = open(output_path, 'wb') + # else: + # out_stream = output_path + + # out_stream.seek(0) + # out_stream.truncate() + # out_stream.write(txt.encode(opts.output_encoding, 'replace')) + + # if close: + # out_stream.close() + diff --git a/src/calibre/gui2/convert/snb_output.py b/src/calibre/gui2/convert/snb_output.py new file mode 100644 index 0000000000..dac37140ac --- /dev/null +++ b/src/calibre/gui2/convert/snb_output.py @@ -0,0 +1,36 @@ +# -*- coding: utf-8 -*- + +__license__ = 'GPL 3' +__copyright__ = '2009, John Schember ' +__docformat__ = 'restructuredtext en' + +from calibre.gui2.convert.snb_output_ui import Ui_Form +from calibre.gui2.convert import Widget +from calibre.gui2.widgets import BasicComboModel + +newline_model = None + +class PluginWidget(Widget, Ui_Form): + + TITLE = _('SNB Output') + HELP = _('Options specific to')+' SNB '+_('output') + COMMIT_NAME = 'snb_output' + ICON = I('mimetypes/snb.png') + + def __init__(self, parent, get_option, get_help, db=None, book_id=None): + Widget.__init__(self, parent, + []) + self.db, self.book_id = db, book_id + self.initialize_options(get_option, get_help, db, book_id) + + # default = self.opt_newline.currentText() + + # global newline_model + # if newline_model is None: + # newline_model = BasicComboModel(TxtNewlines.NEWLINE_TYPES.keys()) + # self.newline_model = newline_model + # self.opt_newline.setModel(self.newline_model) + + # default_index = self.opt_newline.findText(default) + # system_index = self.opt_newline.findText('system') + # self.opt_newline.setCurrentIndex(default_index if default_index != -1 else system_index if system_index != -1 else 0) diff --git a/src/calibre/gui2/convert/snb_output.ui b/src/calibre/gui2/convert/snb_output.ui new file mode 100644 index 0000000000..a5ff8ce7ef --- /dev/null +++ b/src/calibre/gui2/convert/snb_output.ui @@ -0,0 +1,74 @@ + + + Form + + + + 0 + 0 + 400 + 300 + + + + Form + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +