%PDF- %PDF-
| Direktori : /lib/calibre/calibre/ebooks/rtf2xml/ |
| Current File : //lib/calibre/calibre/ebooks/rtf2xml/get_options.py |
#########################################################################
# #
# #
# copyright 2002 Paul Henry Tremblay #
# #
# This program is distributed in the hope that it will be useful, #
# but WITHOUT ANY WARRANTY; without even the implied warranty of #
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU #
# General Public License for more details. #
# #
# #
#########################################################################
"""
Gets options for main part of script
"""
import sys, os
from calibre.ebooks.rtf2xml import options_trem, configure_txt
class GetOptions:
def __init__(self,
system_arguments,
rtf_dir,
bug_handler,
configuration_file=None,
):
self.__system_arguments = system_arguments
self.__rtf_dir = rtf_dir
self.__configuration_file = configuration_file
self.__bug_handler = bug_handler
def get_options(self):
"""
return valid, output, help, show_warnings, debug, file
"""
return_options = self.__get_config_options()
options_dict = {
'dir' : [1],
'help' : [0, 'h'],
'show-warnings' : [0],
'caps' : [0,],
'no-caps' : [0],
'symbol' : [0],
'no-symbol' : [0],
'windings' : [0],
'no-wingdings' : [0],
'zapf' : [0],
'no-zapf' : [0],
'font' : [0],
'no-font' : [0],
'dtd' : [1],
'no-dtd' : [0],
'version' : [0],
'output' : [1, 'o'],
'no-namespace' : [0],
'level' : [1],
'indent' : [1],
'no-lists' : [0],
'lists' : [0],
'group-styles' : [0],
'no-group-styles' : [0],
'group-borders' : [0],
'no-group-borders' : [0],
'headings-to-sections' : [0],
'no-headings-to-sections' : [0],
'empty-para' : [0],
'no-empty-para' : [0],
'format' : [1, 'f'],
'config' : [0],
}
options_obj = options_trem.ParseOptions(
system_string=self.__system_arguments,
options_dict=options_dict
)
options, arguments = options_obj.parse_options()
if options == 0:
return_options['valid'] = 0
return return_options
the_keys = options.keys()
return_options['help'] = 0
if 'help' in the_keys:
return_options['help'] = 1
return return_options
return_options['config'] = 0
if 'config' in the_keys:
return_options['config'] = 1
return return_options
return_options['version'] = 0
if 'version' in the_keys:
return_options['version'] = 1
return return_options
# unused
return_options['out-dir'] = 0
if 'dir' in the_keys:
out_dir = options['dir']
if not os.path.isdir(out_dir):
sys.stderr.write('Your output must be an existing directory.\n')
return_options['valid'] = 0
else:
return_options['dir'] = options['dir']
return_options['out-file'] = 0
if 'output' in the_keys:
# out_file = options['output']
return_options['out-file'] = options['output']
else:
pass
"""
sys.stderr.write(
'You must provide an output file with the \'o\' option\n')
return_options['valid'] = 0
"""
if 'level' in the_keys:
return_options['level'] = options['level']
the_level = return_options.get('level')
if the_level:
try:
return_options['level'] = int(the_level)
except ValueError:
sys.stderr.write('The options "--level" must be a number.\n')
return_options['valid'] = 0
return return_options
if 'dtd' in the_keys:
# dtd = options['dtd']
return_options['raw-dtd-path'] = options['dtd']
acceptable = ['sdoc', 'raw', 'tei']
if 'format' in the_keys:
format = options['format']
if format not in acceptable:
sys.stderr.write('--format must take either \'sdoc\' or '
'\'tei\'\n')
return_options['valid'] = 0
return return_options
else:
return_options['format'] = options['format']
# a hack! python chokes on external dtd
# Was able to fix this
# format = return_options.get('format')
# if format != 'raw' and format != None:
# return_options['raw-dtd-path'] = ''
return_options['show-warnings'] = 0
if 'show-warnings' in the_keys:
return_options['show-warnings'] = 1
if 'no-font' in the_keys:
return_options['convert-symbol'] = 0
return_options['convert-zapf'] = 0
return_options['convert-wingdings'] = 0
if 'font' in the_keys:
return_options['convert-symbol'] = 1
return_options['convert-zapf'] = 1
return_options['convert-wingdings'] = 1
if 'symbol' in the_keys:
return_options['convert-symbol'] = 1
if 'no-symbol' in the_keys:
return_options['convert-symbol'] = 0
if 'wingdings' in the_keys:
return_options['convert-wingdings'] = 1
if 'no-wingdings' in the_keys:
return_options['convert-wingdings'] = 0
if 'zapf' in the_keys:
return_options['convert-zapf'] = 1
if 'no-zapf' in the_keys:
return_options['convert-zapf'] = 0
if 'caps' in the_keys:
return_options['convert-caps'] = 1
if 'no-caps' in the_keys:
return_options['convert-caps'] = 0
if 'no-dtd' in the_keys:
return_options['no-dtd'] = 1
else:
return_options['no-dtd'] = 0
return_options['no-ask'] = 0
if 'no-ask' in the_keys:
return_options['no-ask'] = 1
sys.stderr.write('You can also permanetly set the no-ask option in the rtf2xml file.\n')
if 'no-namespace' in the_keys:
return_options['no-namespace'] = 1
if 'headings-to-sections' in the_keys:
return_options['headings-to-sections'] = 1
elif 'no-headings-to-sections' in the_keys:
return_options['headings-to-sections'] = 0
if 'no-lists' in the_keys:
return_options['form-lists'] = 0
elif 'lists' in the_keys:
return_options['form-lists'] = 1
if 'group-styles' in the_keys:
return_options['group-styles'] = 1
elif 'no-group-styles' in the_keys:
return_options['group-styles'] = 0
if 'group-borders' in the_keys:
return_options['group-borders'] = 1
elif 'no-group-borders' in the_keys:
return_options['group-borders'] = 0
if 'empty-para' in the_keys:
return_options['empty-paragraphs'] = 1
elif 'no-empty-para' in the_keys:
return_options['empty-paragraphs'] = 0
if len(arguments) == 0:
sys.stderr.write(
'You must provide a file to convert.\n')
return_options['valid'] = 0
return return_options
elif len(arguments) > 1:
sys.stderr.write(
'You can only convert one file at a time.\n')
return_options['valid'] = 0
else:
return_options['in-file'] = arguments[0]
# check for out file
smart_output = return_options.get('smart-output')
if smart_output == 'false':
smart_output = 0
if smart_output and not return_options['out-file']:
in_file = return_options['in-file']
the_file_name, ext = os.path.splitext(in_file)
if ext != '.rtf':
sys.stderr.write(
'Sorry, but this file does not have an "rtf" extension, so \n'
'the script will not attempt to convert it.\n'
'If it is in fact an rtf file, use the "-o" option.\n'
)
return_options['valid'] = 0
else:
return_options['out-file'] = '%s.xml' % the_file_name
if not smart_output and not return_options['out-file']:
"""
sys.stderr.write(
'Please provide and file to output with the -o option.\n'
'Or set \'<smart-output value = "true"/>\'.\n'
'in the configuration file.\n'
)
return_options['valid'] = 0
"""
pass
if 'indent' in the_keys:
try:
value = int(options['indent'])
return_options['indent'] = value
except ValueError:
sys.stderr.write('--indent must take an integer')
return_options['valid'] = 0
# check for format and pyxml
"""
the_format = return_options.get('format')
if the_format != 'raw':
no_pyxml = return_options.get('no-pyxml')
if no_pyxml:
sys.stderr.write('You want to convert your file to "%s".\n'
'Sorry, but you must have pyxml installed\n'
'in order to convert your document to anything but raw XML.\n'
'Please do not use the --format option.\n\n'
% the_format
)
return_options['valid'] = 0
xslt_proc = return_options.get('xslt-processor')
if xslt_proc == None and not no_pyxml:
sys.stderr.write('You want to convert your file to "%s".\n'
'Sorry, but you must have an xslt processor set up\n'
'in order to conevert your document to anything but raw XML.\n'
'Please use --format raw.\n\n'
% the_format
)
return_options['valid'] = 0
"""
return return_options
def __get_config_options(self):
configure_obj = configure_txt.Configure(
bug_handler=self.__bug_handler,
configuration_file=self.__configuration_file)
options_dict = configure_obj.get_configuration(type='normal')
if options_dict == 1:
sys.exit(1)
options_dict['valid'] = 1
convert_caps = options_dict.get('convert-caps')
if convert_caps == 'false':
options_dict['convert-caps'] = 0
convert_symbol = options_dict.get('convert-symbol')
if convert_symbol == 'false':
options_dict['convert-symbol'] = 0
convert_wingdings = options_dict.get('convert-wingdings')
if convert_wingdings == 'false':
options_dict['convert-wingdings'] = 0
convert_zapf = options_dict.get('convert-zapf-dingbats')
if convert_zapf == 'false':
options_dict['convert-zapf'] = 0
elif convert_zapf == 'true':
options_dict['convert-zapf'] = 1
headings_to_sections = options_dict.get('headings-to-sections')
if headings_to_sections == 'true':
options_dict['headings-to-sections'] = 1
elif headings_to_sections == '1':
options_dict['headings-to-sections'] = 1
elif headings_to_sections == 'false':
options_dict['headings-to-sections'] = 0
elif headings_to_sections == '0':
options_dict['headings-to-sections'] = 0
else:
options_dict['headings-to-sections'] = 0
write_empty_paragraphs = options_dict.get('write-empty-paragraphs')
if write_empty_paragraphs == 'true':
options_dict['empty-paragraphs'] = 1
elif write_empty_paragraphs == '1':
options_dict['empty-paragraphs'] = 1
elif write_empty_paragraphs == 'false':
options_dict['empty-paragraphs'] = 0
elif write_empty_paragraphs == '0':
options_dict['empty-paragraphs'] = 0
else:
options_dict['empty-paragraphs'] = 1
form_lists = options_dict.get('lists')
if form_lists == 'true' or form_lists == '1':
options_dict['form-lists'] = 1
elif form_lists == 'false' or form_lists == '0':
options_dict['form-lists'] = 0
else:
options_dict['form-lists'] = 0
group_styles = options_dict.get('group-styles')
if group_styles == 'true' or group_styles == '1':
options_dict['group-styles'] = 1
elif group_styles == 'false' or group_styles == '0':
options_dict['group-styles'] = 0
else:
options_dict['group-styles'] = 0
group_borders = options_dict.get('group-borders')
if group_borders == 'true' or group_borders == '1':
options_dict['group-borders'] = 1
elif group_borders == 'false' or group_borders == '0':
options_dict['group-borders'] = 0
else:
options_dict['group-borders'] = 0
return options_dict