%PDF- %PDF-
| Direktori : /lib/calibre/calibre/ebooks/rtf2xml/ |
| Current File : //lib/calibre/calibre/ebooks/rtf2xml/configure_txt.py |
import os, sys
from . import open_for_read
class Configure:
def __init__(self,
configuration_file,
bug_handler,
debug_dir=None,
show_config_file=None,
):
"""
Requires:
file --file to be read
output --file to output to
Returns:
Nothing. Outputs a file
Logic:
"""
self.__configuration_file = configuration_file
self.__debug_dir = debug_dir
self.__bug_handler = bug_handler
self.__show_config_file = show_config_file
def get_configuration(self, type):
self.__configuration_file = self.__get_file_name()
return_dict = {}
return_dict['config-location'] = self.__configuration_file
if self.__show_config_file and self.__configuration_file:
sys.stderr.write('configuration file is "%s"\n' % self.__configuration_file)
if self.__show_config_file and not self.__configuration_file:
sys.stderr.write('No configuration file found; using default values\n')
if self.__configuration_file:
read_obj = open_for_read(self.__configuration_file)
line_to_read = 1
line_num = 0
while line_to_read:
line_num += 1
line_to_read = read_obj.readline()
line = line_to_read
line = line.strip()
if line[0:1] == '#':
continue
if not line:
continue
fields = line.split('=')
if len(fields) != 2:
msg = line
msg += ('Error in configuration.txt, line %s\n' % line_num)
msg += ('Options take the form of option = value.\n')
msg += ('Please correct the configuration file "%s" before continuing\n'
% self.__configuration_file)
raise self.__bug_handler(msg)
att = fields[0]
value = fields[1]
att = att.strip()
value = value.strip()
return_dict[att] = value
return_dict = self.__parse_dict(return_dict)
if return_dict == 1:
msg = ('Please correct the configuration file "%s" before continuing\n'
% self.__configuration_file)
raise self.__bug_handler(msg)
return return_dict
def __get_file_name(self):
home_var = os.environ.get('HOME')
if home_var:
home_config = os.path.join(home_var, '.rtf2xml')
if os.path.isfile(home_config):
return home_config
home_var = os.environ.get('USERPROFILE')
if home_var:
home_config = os.path.join(home_var, '.rtf2xml')
if os.path.isfile(home_config):
return home_config
script_file = os.path.join(sys.path[0], '.rtf2xml')
if os.path.isfile(script_file):
return script_file
return self.__configuration_file
def __parse_dict(self, return_dict):
allowable = [
'configuration-directory',
'smart-output', # = false
'level', # = 1
'convert-symbol', # = true
'convert-wingdings', # = true
'convert-zapf-dingbats', # = true
'convert-caps', # true
'indent', # = 1
'group-styles',
'group-borders',
'headings-to-sections',
'lists',
'raw-dtd-path',
'write-empty-paragraphs',
'config-location',
'script-name',
]
the_keys = return_dict.keys()
for the_key in the_keys:
if the_key not in allowable:
sys.stderr.write('options "%s" not a legal option.\n'
% the_key)
return 1
configuration_dir = return_dict.get('configuration-directory')
if configuration_dir is None:
return_dict['configure-directory'] = None
else:
if not os.path.isdir(configuration_dir):
sys.stderr.write('The directory "%s" does not appear to be a directory.\n'
% configuration_dir)
return 1
else:
return_dict['configure-directory'] = configuration_dir
smart_output = return_dict.get('smart-output')
if not smart_output:
return_dict['smart-output'] = 0
elif smart_output != 'true' and smart_output != 'false':
sys.stderr.write('"smart-output" must be true or false.\n')
return 1
elif smart_output == 'false':
return_dict['smart-output'] = 0
int_options = ['level', 'indent']
for int_option in int_options:
value = return_dict.get(int_option)
if not value:
if int_option == 'level':
return_dict['level'] = 1
else:
return_dict['indent'] = 0
else:
try:
int_num = int(return_dict[int_option])
return_dict[int_option] = int_num
except:
sys.stderr.write('"%s" must be a number\n' % int_option)
sys.stderr.write('You choose "%s" ' % return_dict[int_option])
return 1
fonts = ['convert-symbol', 'convert-wingdings', 'convert-zapf-dingbats',
'convert-caps'
]
for font in fonts:
value = return_dict.get(font)
if not value:
return_dict[font] = 0
elif value != 'true' and value != 'false':
sys.stderr.write(
'"%s" must be true or false.\n' % font)
elif value == 'false':
return_dict[font] = 0
return_dict['xslt-processor'] = None
return_dict['no-namespace'] = None
return_dict['format'] = 'raw'
return_dict['no-pyxml'] = 'true'
return return_dict