]> git.lyx.org Git - features.git/commitdiff
Add lilypond external inset
authorGeorg Baum <Georg.Baum@post.rwth-aachen.de>
Wed, 4 Oct 2006 19:01:00 +0000 (19:01 +0000)
committerGeorg Baum <Georg.Baum@post.rwth-aachen.de>
Wed, 4 Oct 2006 19:01:00 +0000 (19:01 +0000)
* src/graphics/GraphicsConverter.C
(build_script): Change the current directory to the directory of
the output file

* src/converter.C
(Converters::convert): Add comment

* lib/external_templates: Add lilypond template

* lib/configure.py
(checkFormatEntries): Add lilypond format
(checkConverterEntries): Add lilypond converter

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@15245 a592a061-630c-0410-9148-cb99ea01b6c8

lib/configure.py
lib/external_templates
src/converter.C
src/graphics/GraphicsConverter.C

index f841da37983bb85c1da511bec64a96e1033e0e44..29c4bbc5e01713d0fbcb6b4eef29a43c8fef3f16 100644 (file)
@@ -254,6 +254,7 @@ def checkFormatEntries():
 \Format docbook    sgml    DocBook                B  ""        "%%"    "document"
 \Format docbook-xml xml   "Docbook (XML)"         "" ""        "%%"    "document"
 \Format literate   nw      NoWeb                  N  ""        "%%"    "document"
+\Format lilypond   ly     "LilyPond music"        "" ""        "%%"    "vector"
 \Format latex      tex    "LaTeX (plain)"         L  ""        "%%"    "document"
 \Format linuxdoc   sgml    LinuxDoc               x  ""        "%%"    "document"
 \Format pdflatex   tex    "LaTeX (pdflatex)"      "" ""        "%%"    "document"
@@ -408,6 +409,24 @@ def checkConverterEntries():
         'latex2html -no_subdir -split 0 -show_section_numbers $$i', 'hevea -s $$i'],
         rc_entry = [ r'\converter latex      html       "%%"   "originaldir,needaux"' ])
     #
+    path, lilypond = checkProg('a LilyPond -> ESP/PDF/PNG converter', ['lilypond'])
+    if (lilypond != ''):
+        version_string = cmdOutput("lilypond --version")
+        match = re.match('GNU LilyPond (\S+)', version_string)
+        if match:
+            version_number = match.groups()[0]
+            version = version_number.split('.')
+            if int(version[0]) > 2 or (len(version) > 1 and int(version[0]) == 2 and int(version[1]) >= 6):
+                addToRC(r'''\converter lilypond   eps        "lilypond -b eps --ps $$i"        ""
+\converter lilypond   png        "lilypond -b eps --png $$i"   ""''')
+                if int(version[0]) > 2 or (len(version) > 1 and int(version[0]) == 2 and int(version[1]) >= 9):
+                    addToRC(r'\converter lilypond   pdf        "lilypond -b eps --pdf $$i"     ""')
+                print '+  found LilyPond version %s.' % version_number
+            else:
+                print '+  found LilyPond, but version %s is too old.' % version_number
+        else:
+            print '+  found LilyPond, but could not extract version number.'
+    #
     # FIXME: no rc_entry? comment it out
     # checkProg('Image converter', ['convert $$i $$o'])
     #
index b3393ad010ba6ce139e000ddf0953fe845d2644d..47c41f1be27d16b6fb0186440c562fdb89f9d4ee 100644 (file)
@@ -196,6 +196,55 @@ Template ChessDiagram
 TemplateEnd
 
 
+Template LilyPond
+       GuiName "Lilypond typeset music"
+       HelpText
+               Sheet music typeset by GNU LilyPond,
+               converted to .pdf or .eps for inclusion
+               Using .eps requires at least lilypond 2.6
+               Using .pdf requires at least lilypond 2.9
+       HelpTextEnd
+       InputFormat "lilypond"
+       FileFilter "*.ly"
+       AutomaticProduction true
+       Transform Rotate
+       Transform Resize
+       Transform Clip
+       Transform Extra
+       Format LaTeX
+               TransformOption Rotate RotationLatexOption
+               TransformOption Resize ResizeLatexOption
+               TransformOption Clip   ClipLatexOption
+               TransformOption Extra  ExtraOption
+               Option Arg "[$$Extra,$$Rotate,$$Resize,$$Clip]"
+               Product "\\includegraphics$$Arg{$$AbsOrRelPathMaster$$Basename}"
+               UpdateFormat eps
+               UpdateResult "$$AbsPath$$Basename.eps"
+               Requirement "graphicx"
+               ReferencedFile latex "$$AbsPath$$Basename.eps"
+               ReferencedFile dvi   "$$AbsPath$$Basename.eps"
+       FormatEnd
+       Format PDFLaTeX
+               TransformOption Rotate RotationLatexOption
+               TransformOption Resize ResizeLatexOption
+               TransformOption Clip   ClipLatexOption
+               TransformOption Extra  ExtraOption
+               Option Arg "[$$Extra,$$Rotate,$$Resize,$$Clip]"
+               Product "\\includegraphics$$Arg{$$AbsOrRelPathMaster$$Basename}"
+               UpdateFormat pdf
+               UpdateResult "$$AbsPath$$Basename.pdf"
+               Requirement "graphicx"
+               ReferencedFile pdflatex "$$AbsPath$$Basename.pdf"
+       FormatEnd
+       Format Ascii
+               Product "[LilyPond: $$FName]"
+       FormatEnd
+       Format DocBook
+               Product "[LilyPond: $$FName]"
+       FormatEnd
+TemplateEnd
+
+
 Template Date
        GuiName "Date"
        HelpText
index f6e51c1421c0b5ba8a8273b99f878e7c6bb23428..f6d226f83bed535a07c6d21374f301ef70c0eae6 100644 (file)
@@ -326,8 +326,15 @@ bool Converters::convert(Buffer const * buffer,
        }
        OutputParams runparams;
        runparams.flavor = getFlavor(edgepath);
+
+       // Some converters (e.g. lilypond) can only output files to the
+       // current directory, so we need to change the current directory.
+       // This has the added benefit that all other files that may be
+       // generated by the converter are deleted when LyX closes and do not
+       // clutter the real working directory.
        string path = onlyPath(from_file);
        Path p(path);
+
        // empty the error list before any new conversion takes place.
        errorList.clear();
 
index 2fbad942f41a7b77f4a511bd37b141e003e39e05..2b710109a3fb141b1f22d826705d0df900d717f7 100644 (file)
@@ -332,6 +332,13 @@ void build_script(string const & from_file,
                  "outfile = " << quoteName(outfile, quote_python) << "\n"
                  "shutil.copy(infile, outfile)\n";
 
+       // Some converters (e.g. lilypond) can only output files to the
+       // current directory, so we need to change the current directory.
+       // This has the added benefit that all other files that may be
+       // generated by the converter are deleted when LyX closes and do not
+       // clutter the real working directory.
+       script << "os.chdir(" << quoteName(onlyPath(outfile)) << ")\n";
+
        if (edgepath.empty()) {
                // Either from_format is unknown or we don't have a
                // converter path from from_format to to_format, so we use