diff --git a/lib/configure.py b/lib/configure.py index f841da3798..29c4bbc5e0 100644 --- a/lib/configure.py +++ b/lib/configure.py @@ -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']) # diff --git a/lib/external_templates b/lib/external_templates index b3393ad010..47c41f1be2 100644 --- a/lib/external_templates +++ b/lib/external_templates @@ -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 diff --git a/src/converter.C b/src/converter.C index f6e51c1421..f6d226f83b 100644 --- a/src/converter.C +++ b/src/converter.C @@ -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(); diff --git a/src/graphics/GraphicsConverter.C b/src/graphics/GraphicsConverter.C index 2fbad942f4..2b710109a3 100644 --- a/src/graphics/GraphicsConverter.C +++ b/src/graphics/GraphicsConverter.C @@ -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