mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-13 22:49:20 +00:00
Correct converter configuration for inkscape on Mac
On Mac the inkscape binary is started by a wrapper script. This script changes the working directory internally and fails to process files with relative path names. The previous attempt to solve it was to pass the file names with absolute names by prepending them with the $$p variable (representing the directory name of the files). This broke the on screen conversion (used for SVGZ to PNG e.g. in the users guide) because here the $$p variable is undefined. Now the wrapper script of LyX which is used to locate the Inkscape.app bundle converts the relative path names into absolute names and the $$p variable is removed from the converter definitions for inkscape again.
This commit is contained in:
parent
bf65c9fb38
commit
caa1dd2aee
@ -1,13 +1,54 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
|
# \author Stephan Witt
|
||||||
|
# Full author contact details are available in file CREDITS.
|
||||||
|
|
||||||
unset DISPLAY
|
unset DISPLAY
|
||||||
|
|
||||||
|
# check for file arguments with relative path names
|
||||||
|
# convert them to absolute path names
|
||||||
|
# inkscape on Mac changes the working directory
|
||||||
|
# this invalidates relative path names
|
||||||
|
startinkscape() {
|
||||||
|
inkscape="$1" ; shift
|
||||||
|
pwd=$(pwd)
|
||||||
|
iparams=( "$@" )
|
||||||
|
oparams=()
|
||||||
|
for i in ${!iparams[@]}; do
|
||||||
|
# echo $i "=>" "${iparams[$i]}"
|
||||||
|
case "${iparams[$i]}" in
|
||||||
|
--file=/*|--export-pdf=/*|--export-eps=/*|--export-png=/*|--export-emf=/*|--export-wmf=/*|--export-ps=/*|--export-ps-level=/*|--export-pdf-version=/*)
|
||||||
|
oparams+=( "${iparams[$i]}" )
|
||||||
|
;;
|
||||||
|
--file=*|--export-pdf=*|--export-eps=*|--export-png=*|--export-emf=*|--export-wmf=*|--export-ps=*|--export-ps-level=*|--export-pdf-version=*)
|
||||||
|
oparams+=( "${iparams[$i]//=/=${pwd}/}" )
|
||||||
|
;;
|
||||||
|
--without-gui|-z)
|
||||||
|
# ignore this argument - its provided below anyway
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
oparams+=( "${iparams[$i]}" )
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
exec "${inkscape}" --without-gui "${oparams[@]}"
|
||||||
|
}
|
||||||
|
|
||||||
|
# try to find the inkscape installation...
|
||||||
# at first try the well known location
|
# at first try the well known location
|
||||||
RESDIR="/Applications/Inkscape.app/Contents/Resources"
|
RESDIR="/Applications/Inkscape.app/Contents/Resources"
|
||||||
test -f "${RESDIR}"/bin/inkscape -a -x "${RESDIR}"/bin/inkscape && exec "${RESDIR}"/bin/inkscape --without-gui "$@"
|
if [ -f "${RESDIR}"/bin/inkscape -a -x "${RESDIR}"/bin/inkscape ]; then
|
||||||
|
startinkscape "${RESDIR}"/bin/inkscape "$@"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
# this failed... so try PATH expansion to start the inkscape shell wrapper
|
# this failed... so try PATH expansion to start the inkscape shell wrapper
|
||||||
IFS=":" read -ra DIRLIST <<< "${PATH}"
|
IFS=":" read -ra DIRLIST <<< "${PATH}"
|
||||||
for BINDIR in "${DIRLIST[@]}" ; do
|
for BINDIR in "${DIRLIST[@]}" ; do
|
||||||
RESDIR=$(dirname "${BINDIR}")
|
RESDIR=$(dirname "${BINDIR}")
|
||||||
test -f "${RESDIR}"/bin/inkscape -a -x "${RESDIR}"/bin/inkscape && exec "${RESDIR}"/bin/inkscape --without-gui "$@"
|
if [ -f "${RESDIR}"/bin/inkscape -a -x "${RESDIR}"/bin/inkscape ]; then
|
||||||
|
startinkscape "${RESDIR}"/bin/inkscape "$@"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
done
|
done
|
||||||
# report error and exit with failure status
|
# report error and exit with failure status
|
||||||
exec 1>&2
|
exec 1>&2
|
||||||
|
@ -1022,18 +1022,16 @@ def checkConverterEntries():
|
|||||||
\converter tgif png "tgif -print -color -png -o $$d $$i" ""
|
\converter tgif png "tgif -print -color -png -o $$d $$i" ""
|
||||||
\converter tgif pdf6 "tgif -print -color -pdf -stdout $$i > $$o" ""'''])
|
\converter tgif pdf6 "tgif -print -color -pdf -stdout $$i > $$o" ""'''])
|
||||||
#
|
#
|
||||||
checkProg('a WMF -> EPS converter', ['metafile2eps $$i $$o', 'wmf2eps -o $$o $$i', inkscape_cl + ' --file=%s$$i --export-area-drawing --without-gui --export-eps=%s$$o'
|
checkProg('a WMF -> EPS converter', ['metafile2eps $$i $$o', 'wmf2eps -o $$o $$i', inkscape_cl + ' --file=$$i --export-area-drawing --without-gui --export-eps=$$o'],
|
||||||
% (inkscape_fileprefix, inkscape_fileprefix)],
|
|
||||||
rc_entry = [ r'\converter wmf eps "%%" ""'])
|
rc_entry = [ r'\converter wmf eps "%%" ""'])
|
||||||
#
|
#
|
||||||
checkProg('an EMF -> EPS converter', ['metafile2eps $$i $$o', inkscape_cl + ' --file=%s$$i --export-area-drawing --without-gui --export-eps=%s$$o'
|
checkProg('an EMF -> EPS converter', ['metafile2eps $$i $$o', inkscape_cl + ' --file=$$i --export-area-drawing --without-gui --export-eps=$$o'],
|
||||||
% (inkscape_fileprefix, inkscape_fileprefix)],
|
|
||||||
rc_entry = [ r'\converter emf eps "%%" ""'])
|
rc_entry = [ r'\converter emf eps "%%" ""'])
|
||||||
#
|
#
|
||||||
checkProg('a WMF -> PDF converter', [inkscape_cl + ' --file=%s$$i --export-area-drawing --without-gui --export-pdf=%s$$o' % (inkscape_fileprefix, inkscape_fileprefix)],
|
checkProg('a WMF -> PDF converter', [inkscape_cl + ' --file=$$i --export-area-drawing --without-gui --export-pdf=$$o'],
|
||||||
rc_entry = [ r'\converter wmf pdf6 "%%" ""'])
|
rc_entry = [ r'\converter wmf pdf6 "%%" ""'])
|
||||||
#
|
#
|
||||||
checkProg('an EMF -> PDF converter', [inkscape_cl + ' --file=%s$$i --export-area-drawing --without-gui --export-pdf=%s$$o' % (inkscape_fileprefix, inkscape_fileprefix)],
|
checkProg('an EMF -> PDF converter', [inkscape_cl + ' --file=$$i --export-area-drawing --without-gui --export-pdf=$$o'],
|
||||||
rc_entry = [ r'\converter emf pdf6 "%%" ""'])
|
rc_entry = [ r'\converter emf pdf6 "%%" ""'])
|
||||||
# Only define a converter to pdf6 for graphics
|
# Only define a converter to pdf6 for graphics
|
||||||
checkProg('an EPS -> PDF converter', ['epstopdf'],
|
checkProg('an EPS -> PDF converter', ['epstopdf'],
|
||||||
@ -1079,20 +1077,17 @@ def checkConverterEntries():
|
|||||||
rc_entry = [ r'\converter svg svgz "%%" ""'])
|
rc_entry = [ r'\converter svg svgz "%%" ""'])
|
||||||
# Only define a converter to pdf6 for graphics
|
# Only define a converter to pdf6 for graphics
|
||||||
# Prefer rsvg-convert over inkscape since it is faster (see http://www.lyx.org/trac/ticket/9891)
|
# Prefer rsvg-convert over inkscape since it is faster (see http://www.lyx.org/trac/ticket/9891)
|
||||||
checkProg('a SVG -> PDF converter', ['rsvg-convert -f pdf -o $$o $$i', inkscape_cl + ' --file=%s$$i --export-area-drawing --without-gui --export-pdf=%s$$o'
|
checkProg('a SVG -> PDF converter', ['rsvg-convert -f pdf -o $$o $$i', inkscape_cl + ' --file=$$i --export-area-drawing --without-gui --export-pdf=$$o'],
|
||||||
% (inkscape_fileprefix, inkscape_fileprefix)],
|
|
||||||
rc_entry = [ r'''\converter svg pdf6 "%%" ""
|
rc_entry = [ r'''\converter svg pdf6 "%%" ""
|
||||||
\converter svgz pdf6 "%%" ""'''],
|
\converter svgz pdf6 "%%" ""'''],
|
||||||
path = ['', inkscape_path])
|
path = ['', inkscape_path])
|
||||||
#
|
#
|
||||||
checkProg('a SVG -> EPS converter', ['rsvg-convert -f ps -o $$o $$i', inkscape_cl + ' --file=%s$$i --export-area-drawing --without-gui --export-eps=%s$$o'
|
checkProg('a SVG -> EPS converter', ['rsvg-convert -f ps -o $$o $$i', inkscape_cl + ' --file=$$i --export-area-drawing --without-gui --export-eps=$$o'],
|
||||||
% (inkscape_fileprefix, inkscape_fileprefix)],
|
|
||||||
rc_entry = [ r'''\converter svg eps "%%" ""
|
rc_entry = [ r'''\converter svg eps "%%" ""
|
||||||
\converter svgz eps "%%" ""'''],
|
\converter svgz eps "%%" ""'''],
|
||||||
path = ['', inkscape_path])
|
path = ['', inkscape_path])
|
||||||
#
|
#
|
||||||
checkProg('a SVG -> PNG converter', ['rsvg-convert -f png -o $$o $$i', inkscape_cl + ' --without-gui --file=%s$$i --export-png=%s$$o'
|
checkProg('a SVG -> PNG converter', ['rsvg-convert -f png -o $$o $$i', inkscape_cl + ' --without-gui --file=$$i --export-png=$$o'],
|
||||||
% (inkscape_fileprefix, inkscape_fileprefix)],
|
|
||||||
rc_entry = [ r'''\converter svg png "%%" "",
|
rc_entry = [ r'''\converter svg png "%%" "",
|
||||||
\converter svgz png "%%" ""'''],
|
\converter svgz png "%%" ""'''],
|
||||||
path = ['', inkscape_path])
|
path = ['', inkscape_path])
|
||||||
@ -1866,9 +1861,6 @@ Format %i
|
|||||||
inkscape_cl = inkscape_gui.replace('.exe', '.com')
|
inkscape_cl = inkscape_gui.replace('.exe', '.com')
|
||||||
# On MacOSX, Inkscape requires full path file arguments. This
|
# On MacOSX, Inkscape requires full path file arguments. This
|
||||||
# is not needed on Linux and Win and even breaks the latter.
|
# is not needed on Linux and Win and even breaks the latter.
|
||||||
inkscape_fileprefix = ""
|
|
||||||
if sys.platform == 'darwin':
|
|
||||||
inkscape_fileprefix = "$$p"
|
|
||||||
checkFormatEntries(dtl_tools)
|
checkFormatEntries(dtl_tools)
|
||||||
checkConverterEntries()
|
checkConverterEntries()
|
||||||
(chk_docbook, bool_docbook, docbook_cmd) = checkDocBook()
|
(chk_docbook, bool_docbook, docbook_cmd) = checkDocBook()
|
||||||
|
Loading…
Reference in New Issue
Block a user