commit 508badc78a9898210febbec6580768e316e53dc0
Author: Thibaut Cuvelier <[email protected]>
Date: Sun Sep 26 21:13:17 2021 +0200
DocBook: redirect LilyPond output to main LyX output to ease debugging.
---
lib/scripts/docbook_copy.py | 53 +++++++++++++++++++++++-------------------
1 files changed, 29 insertions(+), 24 deletions(-)
diff --git a/lib/scripts/docbook_copy.py b/lib/scripts/docbook_copy.py
index 034d504..1346a90 100644
--- a/lib/scripts/docbook_copy.py
+++ b/lib/scripts/docbook_copy.py
@@ -18,6 +18,7 @@
# /!\ The original file may be modified by this script!
+import subprocess
import os
import os.path
import re
@@ -48,17 +49,17 @@ def copy_docbook(args):
lilypond_folder = os.path.split(lilypond_command)[0] if has_lilypond else
''
# Help debugging.
- print("Given arguments:")
- print("LilyPond: " + ("present" if has_lilypond else "not found") + " " +
lilypond_command)
- print("LilyPond path: " + lilypond_folder)
- print("Input file: " + in_file)
- print("Output file: " + out_file)
+ print(">> Given arguments:")
+ print(">> LilyPond: " + ("present" if has_lilypond else "not found") + " "
+ lilypond_command)
+ print(">> LilyPond path: " + lilypond_folder)
+ print(">> Input file: " + in_file)
+ print(">> Output file: " + out_file)
# Apply LilyPond to the original file if available and needed.
if has_lilypond and need_lilypond(in_file):
in_lily_file = in_file.replace(".xml", ".lyxml")
- print("The input file needs a LilyPond pass and LilyPond is
available.")
- print("Rewriting " + in_file + " as " + in_lily_file)
+ print(">> The input file needs a LilyPond pass and LilyPond is
available.")
+ print(">> Rewriting " + in_file + " as " + in_lily_file)
# LilyPond requires that its input file has the .lyxml extension. Due
to a bug in LilyPond,
# use " instead of ' to encode XML attributes.
@@ -69,36 +70,40 @@ def copy_docbook(args):
with open(in_file, 'r', encoding='utf-8') as f, open(in_lily_file,
'w', encoding='utf-8') as f_lily:
for line in f:
if "language='lilypond'" in line:
- # print(line)
- #
print(re.match('<programlisting\\s+language=\'lilypond\'.*?(role=\'(?P<options>.*?)\')?>',
line))
line = re.sub(
'<programlisting\\s+language=\'lilypond\'.*?(role=\'(?P<options>.*?)\')?>',
'<programlisting language="lilypond"
role="\\g<options>">',
line
)
- # print(line)
f_lily.write(line)
os.unlink(in_file)
- # shutil.move(in_file, in_lily_file)
# Add LilyPond to the PATH.
if os.path.isdir(lilypond_folder):
os.environ['PATH'] += os.pathsep + lilypond_folder
# Start LilyPond on the copied file. First test the binary, then check
if adding Python helps.
- command_raw = lilypond_command + ' --format=docbook ' + in_lily_file
- command_python = 'python -tt "' + lilypond_command + '"
--format=docbook ' + in_lily_file
-
- if os.system(command_raw) == 0:
- print("Success running LilyPond:")
- print(command_raw)
- else:
- if os.system(command_python) == 0:
- print("Success running LilyPond:")
- print(command_python)
- else:
- print('Error from LilyPond')
- sys.exit(1)
+ command_raw = [lilypond_command, '--format=docbook', in_lily_file]
+ command_python = ['python', lilypond_command, '--format=docbook',
in_lily_file]
+
+ failed = False
+ try:
+ subprocess.check_call(command_raw, stdout=sys.stdout.fileno(),
stderr=sys.stdout.fileno())
+ print(">> Success running LilyPond with " + str(command_raw))
+ except (subprocess.CalledProcessError, OSError) as e1:
+ try:
+ subprocess.check_call(command_python,
stdout=sys.stdout.fileno(), stderr=sys.stdout.fileno())
+ print(">> Success running LilyPond with " +
str(command_python))
+ except (subprocess.CalledProcessError, OSError) as e2:
+ print('>> Error from LilyPond')
+ print('>> Error from trying ' + str(command_raw) + ':')
+ print(e1)
+ print('>> Error from trying ' + str(command_python) + ':')
+ print(e2)
+ failed = True
+
+ if failed:
+ sys.exit(1)
# Now, in_file should have the LilyPond-processed contents.
--
lyx-cvs mailing list
[email protected]
http://lists.lyx.org/mailman/listinfo/lyx-cvs