ePub: detect and use xsltproc.

This commit is contained in:
Thibaut Cuvelier 2021-02-07 20:33:06 +01:00
parent 7f4782d51d
commit 9d4ffac7fb
2 changed files with 33 additions and 12 deletions

View File

@ -1007,8 +1007,10 @@ def checkConverterEntries():
rc_entry = [ r'\converter docbook5 pdf9 "%%" ""' ])
#
global java
if java != '':
addToRC('\\converter docbook5 epub "python $$s/scripts/docbook2epub.py \\"' + java + '\\" $$i $$o" ""')
if xsltproc != '':
addToRC('\\converter docbook5 epub "python $$s/scripts/docbook2epub.py none \\"' + xsltproc + '\\" $$i $$o" ""')
elif java != '':
addToRC('\\converter docbook5 epub "python $$s/scripts/docbook2epub.py \\"' + java + '\\" none $$i $$o" ""')
#
checkProg('a MS Word Office Open XML converter -> LaTeX', ['pandoc -s -f docx -o $$o -t latex $$i'],
rc_entry = [ r'\converter word2 latex "%%" ""' ])
@ -2000,6 +2002,7 @@ Format %i
if java == '':
java = check_java()
perl = checkProg('a perl interpreter', ['perl'])[1]
xsltproc = checkProg('xsltproc', ['xsltproc'])[1]
(inkscape_path, inkscape_gui) = os.path.split(checkInkscape())
# On Windows, we need to call the "inkscape.com" wrapper
# for command line purposes. Other OSes do not differentiate.

View File

@ -22,18 +22,21 @@ import zipfile
def parse_arguments():
if len(sys.argv) != 4:
if len(sys.argv) != 5:
print('Five arguments are expected, only %s found.' % len(sys.argv))
print(sys.argv)
sys.exit(1)
own_path, java_path, input, output = sys.argv
own_path, java_path, xsltproc_path, input, output = sys.argv
script_folder = os.path.dirname(own_path) + '/../'
print('Generating ePub with the following parameters:')
print(own_path)
print(java_path)
print(xsltproc_path)
print(input)
print(output)
return java_path, input, output, script_folder
return java_path, xsltproc_path, input, output, script_folder
def create_temporary_folder():
@ -43,11 +46,16 @@ def create_temporary_folder():
return output_dir
def start_xslt_transformation(input, output_dir, script_folder, java_path):
def start_xslt_transformation(input, output_dir, script_folder, java_path, xsltproc_path):
xslt = script_folder + 'docbook/epub3/chunk.xsl'
saxon_jar = script_folder + 'scripts/saxon6.5.5.jar'
saxon_params = 'base.dir=%s' % output_dir
command = '"' + java_path + '" -jar "' + saxon_jar + '" "' + input + '" "' + xslt + '" "' + saxon_params + '"'
if xsltproc_path != '' and xsltproc_path != 'none':
command = start_xslt_transformation_xsltproc(input, output_dir, script_folder, xslt, xsltproc_path)
elif java_path != '' and java_path != 'none':
command = start_xslt_transformation_saxon6(input, output_dir, script_folder, xslt, java_path)
else:
print('docbook2epub fails: no XSLT processor available')
shutil.rmtree(output_dir, ignore_errors=True)
sys.exit(1)
print('XSLT style sheet to use:')
print(xslt)
@ -62,13 +70,23 @@ def start_xslt_transformation(input, output_dir, script_folder, java_path):
# This could be simplified by using subprocess.run, but this requires Python 3.5.
if os.system(quoted_command) != 0:
print('docbook2epub fails')
print('docbook2epub fails: error from the XSLT processor')
shutil.rmtree(output_dir, ignore_errors=True)
sys.exit(1)
print('Generated ePub contents.')
def start_xslt_transformation_xsltproc(input, output_dir, _, xslt, xsltproc_path):
return '"' + xsltproc_path + '" -stringparam base.dir "' + output_dir + '" "' + xslt + '" "' + input + '"'
def start_xslt_transformation_saxon6(input, output_dir, script_folder, xslt, java_path):
saxon_jar = script_folder + 'scripts/saxon6.5.5.jar'
params = 'base.dir=%s' % output_dir
return '"' + java_path + '" -jar "' + saxon_jar + '" "' + input + '" "' + xslt + '" "' + params + '"'
def get_images_from_package_opf(package_opf):
images = []
@ -134,8 +152,8 @@ def create_zip_archive(output, output_dir):
if __name__ == '__main__':
java_path, input, output, script_folder = parse_arguments()
java_path, xsltproc_path, input, output, script_folder = parse_arguments()
output_dir = create_temporary_folder()
start_xslt_transformation(input, output_dir, script_folder, java_path)
start_xslt_transformation(input, output_dir, script_folder, java_path, xsltproc_path)
copy_images(output_dir)
create_zip_archive(output, output_dir)