]> git.lyx.org Git - lyx.git/commitdiff
Add support for inkscape 1.0
authorJuergen Spitzmueller <spitz@lyx.org>
Fri, 15 May 2020 12:08:46 +0000 (14:08 +0200)
committerJuergen Spitzmueller <spitz@lyx.org>
Mon, 18 May 2020 11:19:30 +0000 (13:19 +0200)
Command line syntax has changed. We now check for the version and use
the appropriate cl options.

Fixes #11742

(cherry picked from commit 74f831e06d7502578b104a25580618f90503153e)

lib/configure.py
lib/scripts/svg2pdftex.py
lib/scripts/svg2pstex.py

index 602e090af5a8af46cc215dd4a1f495cf45d2b44a..8f70066832a87039d53dfefff1d5417e0a91510d 100644 (file)
@@ -551,6 +551,15 @@ def checkInkscape():
         except EnvironmentError:
             return 'inkscape'
 
+def checkInkscapeStable():
+    ''' Check whether we use Inkscape >= 1.0 '''
+    version_string = cmdOutput("inkscape --version")
+    if version_string.find('0.9') > 0:
+        return False
+    else:
+        return True
+
+
 def checkLatex(dtl_tools):
     ''' Check latex, return lyx_check_config '''
     path, LATEX = checkProg('a Latex2e program', ['latex $$i', 'latex2e $$i'])
@@ -1022,13 +1031,22 @@ def checkConverterEntries():
 \converter fig        pdftex     "python -tt $$s/scripts/fig2pdftex.py $$i $$o"        ""
 \converter fig        pstex      "python -tt $$s/scripts/fig2pstex.py $$i $$o" ""''')
     #
-    checkProg('a SVG -> PDFTeX converter', [inkscape_cl],
-        rc_entry = [ r'\converter svg        pdftex     "python -tt $$s/scripts/svg2pdftex.py %% $$p$$i $$p$$o" ""'],
-        path = [inkscape_path])
-    #
-    checkProg('a SVG -> PSTeX converter', [inkscape_cl],
-        rc_entry = [ r'\converter svg        pstex     "python -tt $$s/scripts/svg2pstex.py %% $$p$$i $$p$$o" ""'],
-        path = [inkscape_path])
+    if inkscape_stable:
+        checkProg('a SVG -> PDFTeX converter', [inkscape_cl],
+            rc_entry = [ r'\converter svg        pdftex     "python -tt $$s/scripts/svg2pdftex.py %% $$p$$i $$p$$o" ""'],
+            path = [inkscape_path])
+        #
+        checkProg('a SVG -> PSTeX converter', [inkscape_cl],
+            rc_entry = [ r'\converter svg        pstex     "python -tt $$s/scripts/svg2pstex.py %% $$p$$i $$p$$o" ""'],
+            path = [inkscape_path])
+    else:
+        checkProg('a SVG -> PDFTeX converter', [inkscape_cl],
+            rc_entry = [ r'\converter svg        pdftex     "python -tt $$s/scripts/svg2pdftex.py --unstable %% $$p$$i $$p$$o" ""'],
+            path = [inkscape_path])
+        #
+        checkProg('a SVG -> PSTeX converter', [inkscape_cl],
+            rc_entry = [ r'\converter svg        pstex     "python -tt $$s/scripts/svg2pstex.py --unstable %% $$p$$i $$p$$o" ""'],
+            path = [inkscape_path])
     #
     checkProg('a TIFF -> PS converter', ['tiff2ps $$i > $$o'],
         rc_entry = [ r'\converter tiff       eps        "%%"   ""'])
@@ -1039,17 +1057,31 @@ def checkConverterEntries():
 \converter tgif       png        "tgif -print -color -png -o $$d $$i"  ""
 \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=$$i --export-area-drawing --without-gui --export-eps=$$o'],
-        rc_entry = [ r'\converter wmf        eps        "%%"   ""'])
-    #
-    checkProg('an EMF -> EPS converter', ['metafile2eps $$i $$o', inkscape_cl + ' --file=$$i --export-area-drawing --without-gui --export-eps=$$o'],
-        rc_entry = [ r'\converter emf        eps        "%%"   ""'])
-    #
-    checkProg('a WMF -> PDF converter', [inkscape_cl + ' --file=$$i --export-area-drawing --without-gui --export-pdf=$$o'],
-        rc_entry = [ r'\converter wmf        pdf6        "%%"  ""'])
-    #
-    checkProg('an EMF -> PDF converter', [inkscape_cl + ' --file=$$i --export-area-drawing --without-gui --export-pdf=$$o'],
-        rc_entry = [ r'\converter emf        pdf6        "%%"  ""'])
+    # inkscape 1.0 has changed cl options
+    if inkscape_stable:
+        checkProg('a WMF -> EPS converter', ['metafile2eps $$i $$o', 'wmf2eps -o $$o $$i', inkscape_cl + ' $$i --export-area-drawing --export-filename=$$o'],
+            rc_entry = [ r'\converter wmf        eps        "%%"       ""'])
+        #
+        checkProg('an EMF -> EPS converter', ['metafile2eps $$i $$o', inkscape_cl + ' $$i --export-area-drawing --export-filename=$$o'],
+            rc_entry = [ r'\converter emf        eps        "%%"       ""'])
+        #
+        checkProg('a WMF -> PDF converter', [inkscape_cl + ' $$i --export-area-drawing --export-filename=$$o'],
+            rc_entry = [ r'\converter wmf        pdf6        "%%"      ""'])
+        #
+        checkProg('an EMF -> PDF converter', [inkscape_cl + ' $$i --export-area-drawing --export-filename=$$o'],
+            rc_entry = [ r'\converter emf        pdf6        "%%"      ""'])
+    else:
+        checkProg('a WMF -> EPS converter', ['metafile2eps $$i $$o', 'wmf2eps -o $$o $$i', inkscape_cl + ' --file=$$i --export-area-drawing --without-gui --export-eps=$$o'],
+            rc_entry = [ r'\converter wmf        eps        "%%"       ""'])
+        #
+        checkProg('an EMF -> EPS converter', ['metafile2eps $$i $$o', inkscape_cl + ' --file=$$i --export-area-drawing --without-gui --export-eps=$$o'],
+            rc_entry = [ r'\converter emf        eps        "%%"       ""'])
+        #
+        checkProg('a WMF -> PDF converter', [inkscape_cl + ' --file=$$i --export-area-drawing --without-gui --export-pdf=$$o'],
+            rc_entry = [ r'\converter wmf        pdf6        "%%"      ""'])
+        #
+        checkProg('an EMF -> PDF converter', [inkscape_cl + ' --file=$$i --export-area-drawing --without-gui --export-pdf=$$o'],
+            rc_entry = [ r'\converter emf        pdf6        "%%"      ""'])
     # Only define a converter to pdf6 for graphics
     checkProg('an EPS -> PDF converter', ['epstopdf'],
         rc_entry = [ r'\converter eps        pdf6       "epstopdf --outfile=$$o $$i"   ""'])
@@ -1094,20 +1126,37 @@ def checkConverterEntries():
         rc_entry = [ r'\converter svg        svgz       "%%"   ""'])
     # 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)
-    checkProg('a SVG -> PDF converter', ['rsvg-convert -f pdf -o $$o $$i', inkscape_cl + ' --file=$$i --export-area-drawing --without-gui --export-pdf=$$o'],
-        rc_entry = [ r'''\converter svg        pdf6       "%%"    ""
+    # inkscape 1.0 has changed cl options
+    if inkscape_stable:
+        checkProg('a SVG -> PDF converter', ['rsvg-convert -f pdf -o $$o $$i', inkscape_cl + ' $$i --export-area-drawing --export-filename=$$o'],
+            rc_entry = [ r'''\converter svg        pdf6       "%%"    ""
 \converter svgz       pdf6       "%%"    ""'''],
-        path = ['', inkscape_path])
-    #
-    checkProg('a SVG -> EPS converter', ['rsvg-convert -f ps -o $$o $$i', inkscape_cl + ' --file=$$i --export-area-drawing --without-gui --export-eps=$$o'],
-        rc_entry = [ r'''\converter svg        eps        "%%"    ""
+            path = ['', inkscape_path])
+        #
+        checkProg('a SVG -> EPS converter', ['rsvg-convert -f ps -o $$o $$i', inkscape_cl + ' $$i --export-area-drawing --export-filename=$$o'],
+            rc_entry = [ r'''\converter svg        eps        "%%"    ""
 \converter svgz       eps        "%%"    ""'''],
-        path = ['', inkscape_path])
-    #
-    checkProg('a SVG -> PNG converter', ['rsvg-convert -f png -o $$o $$i', inkscape_cl + ' --without-gui --file=$$i --export-png=$$o'],
-        rc_entry = [ r'''\converter svg        png        "%%"    "",
+            path = ['', inkscape_path])
+        #
+        checkProg('a SVG -> PNG converter', ['rsvg-convert -f png -o $$o $$i', inkscape_cl + ' $$i --export-filename=$$o'],
+            rc_entry = [ r'''\converter svg        png        "%%"    "",
+\converter svgz       png        "%%"    ""'''],
+            path = ['', inkscape_path])
+    else:
+        checkProg('a SVG -> PDF converter', ['rsvg-convert -f pdf -o $$o $$i', inkscape_cl + ' --file=$$i --export-area-drawing --without-gui --export-pdf=$$o'],
+            rc_entry = [ r'''\converter svg        pdf6       "%%"    ""
+\converter svgz       pdf6       "%%"    ""'''],
+            path = ['', inkscape_path])
+        #
+        checkProg('a SVG -> EPS converter', ['rsvg-convert -f ps -o $$o $$i', inkscape_cl + ' --file=$$i --export-area-drawing --without-gui --export-eps=$$o'],
+            rc_entry = [ r'''\converter svg        eps        "%%"    ""
+\converter svgz       eps        "%%"    ""'''],
+            path = ['', inkscape_path])
+        #
+        checkProg('a SVG -> PNG converter', ['rsvg-convert -f png -o $$o $$i', inkscape_cl + ' --without-gui --file=$$i --export-png=$$o'],
+            rc_entry = [ r'''\converter svg        png        "%%"    "",
 \converter svgz       png        "%%"    ""'''],
-        path = ['', inkscape_path])
+            path = ['', inkscape_path])
     #
     checkProg('Gnuplot', ['gnuplot'], 
         rc_entry = [ r'''\Format gnuplot     "gp, gnuplot"    "Gnuplot"     "" "" ""  "vector" "text/plain"
@@ -1887,6 +1936,7 @@ Format %i
     # On Windows, we need to call the "inkscape.com" wrapper
     # for command line purposes. Other OSes do not differentiate.
     inkscape_cl = inkscape_gui
+    inkscape_stable = checkInkscapeStable()
     if os.name == 'nt':
         inkscape_cl = inkscape_gui.replace('.exe', '.com')
     # On MacOSX, Inkscape requires full path file arguments. This
index d1e0bf33a81f62182292cb2d26c28a9e75cd98e6..2fe62df9c456b6038105b89feaff68b4faed49af 100644 (file)
 # with pdflatex into high quality PDF. It requires Inkscape.
 
 # Usage:
-#   python svg2pdftex.py [inkscape_command] inputfile.svg outputfile.pdf_tex
+#   python svg2pdftex.py [--unstable] [inkscape_command] inputfile.svg outputfile.pdf_tex
 # This command generates
 #   1. outputfile.pdf     -- the converted PDF file (text from SVG stripped)
 #   2. outputfile.pdf_tex -- a TeX file that can be included in your
 #                             LaTeX document using '\input{outputfile.pdf_text}'
+# use --unstable for inkscape < 1.0
 #
 # Note:
 #   Do not use this command as
@@ -43,16 +44,29 @@ def runCommand(cmd):
 InkscapeCmd = "inkscape"
 InputFile = ""
 OutputFile = ""
+unstable = False
 
-# We expect two or three args: the names of the input and output files
-# and optionally the inkscape command (with path if needed).
+# We expect two to four args: the names of the input and output files
+# and optionally the inkscape command (with path if needed) and --unstable.
 args = len(sys.argv)
 if args == 3:
     # Two args: input and output file only
     InputFile, OutputFile = sys.argv[1:]
 elif args == 4:
-    # Three args: first arg is inkscape command
-    InkscapeCmd, InputFile, OutputFile = sys.argv[1:]
+    # Three args: check whether we have --unstable as first arg
+    if sys.argv[1] == "--unstable":
+        unstable = True
+        InputFile, OutputFile = sys.argv[2:]
+    else:
+        InkscapeCmd, InputFile, OutputFile = sys.argv[1:]
+elif args == 5:
+    # Four args: check whether we have --unstable as first arg
+    if sys.argv[1] != "--unstable":
+        # Invalid number of args. Exit with error.
+        sys.exit(1)
+    else:
+        unstable = True
+        InkscapeCmd, InputFile, OutputFile = sys.argv[2:]
 else:
     # Invalid number of args. Exit with error.
     sys.exit(1)
@@ -68,7 +82,10 @@ OutBase = os.path.splitext(OutputFile)[0]
 # while outsourcing the text to a LaTeX file ${OutBase}.pdf_tex which includes and overlays
 # the PDF image and can be \input to LaTeX files. We rename the latter file to ${OutputFile}
 # (although this is probably the name it already has).
-runCommand([r'%s' % InkscapeCmd, '--file=%s' % InputFile, '--export-pdf=%s.pdf' % OutBase, '--export-latex'])
+if unstable:
+    runCommand([r'%s' % InkscapeCmd, '--file=%s' % InputFile, '--export-pdf=%s.pdf' % OutBase, '--export-latex'])
+else:
+    runCommand([r'%s' % InkscapeCmd, '%s' % InputFile, '--export-filename=%s.pdf' % OutBase, '--export-latex'])
 
 os.rename('%s.pdf_tex' % OutBase, OutputFile)
 
index 97d6ae103981b5c9bd85924a720b8d532e5211a7..acb0322006721f1d9ffc5e47c3f6082eb6f5cfe2 100644 (file)
 # with latex into high quality DVI/PostScript. It requires Inkscape.
 
 # Usage:
-#   python svg2pstex.py [inkscape_command] inputfile.svg outputfile.eps_tex
+#   python svg2pstex.py [--unstable] [inkscape_command] inputfile.svg outputfile.eps_tex
 # This command generates
 #   1. outputfile.eps     -- the converted EPS file (text from SVG stripped)
 #   2. outputfile.eps_tex -- a TeX file that can be included in your
 #                             LaTeX document using '\input{outputfile.eps_text}'
+# use --unstable for inkscape < 1.0
 #
 # Note:
 #   Do not use this command as
@@ -46,16 +47,29 @@ def runCommand(cmd):
 InkscapeCmd = "inkscape"
 InputFile = ""
 OutputFile = ""
+unstable = False
 
-# We expect two or three args: the names of the input and output files
-# and optionally the inkscape command (with path if needed).
+# We expect two to four args: the names of the input and output files
+# and optionally the inkscape command (with path if needed) and --unstable.
 args = len(sys.argv)
 if args == 3:
     # Two args: input and output file only
     InputFile, OutputFile = sys.argv[1:]
 elif args == 4:
-    # Three args: first arg is inkscape command
-    InkscapeCmd, InputFile, OutputFile = sys.argv[1:]
+    # Three args: check whether we have --unstable as first arg
+    if sys.argv[1] == "--unstable":
+        unstable = True
+        InputFile, OutputFile = sys.argv[2:]
+    else:
+        InkscapeCmd, InputFile, OutputFile = sys.argv[1:]
+elif args == 5:
+    # Four args: check whether we have --unstable as first arg
+    if sys.argv[1] != "--unstable":
+        # Invalid number of args. Exit with error.
+        sys.exit(1)
+    else:
+        unstable = True
+        InkscapeCmd, InputFile, OutputFile = sys.argv[2:]
 else:
     # Invalid number of args. Exit with error.
     sys.exit(1)