diff --git a/lib/configure.py b/lib/configure.py index 22d2ffed16..dd94618520 100644 --- a/lib/configure.py +++ b/lib/configure.py @@ -249,6 +249,7 @@ def checkFormatEntries(): \Format dateout tmp "date (output)" "" "" "%%" \Format docbook sgml DocBook B "" "%%" \Format docbook-xml xml "Docbook (XML)" "" "" "%%" +\Format lilypond ly "LilyPond music" "" "" "%%" \Format literate nw NoWeb N "" "%%" \Format latex tex "LaTeX (plain)" L "" "%%" \Format linuxdoc sgml LinuxDoc x "" "%%" @@ -392,6 +393,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 f6ad4cce23..14fa2ef8a0 100644 --- a/lib/external_templates +++ b/lib/external_templates @@ -205,6 +205,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 c02074fbf4..1157ebeaaf 100644 --- a/src/converter.C +++ b/src/converter.C @@ -323,6 +323,12 @@ 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); diff --git a/src/graphics/GraphicsConverter.C b/src/graphics/GraphicsConverter.C index 33e09f6ea7..d21923d874 100644 --- a/src/graphics/GraphicsConverter.C +++ b/src/graphics/GraphicsConverter.C @@ -330,6 +330,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 diff --git a/status.14x b/status.14x index a0417456c3..d5aa99ad9e 100644 --- a/status.14x +++ b/status.14x @@ -29,6 +29,8 @@ What's new - Outline support. +- Add an external template for LilyPond (a music typesetter) + ** Bug fixes: * Document Input/Output