def init(): global version lilypond = config("commands").get("lilypond", "lilypond") try: match = re.search(r"(\d+)\.(\d+)(?:\.(\d+))?", Popen((lilypond, "-v"), stdout=PIPE).communicate()[0].splitlines()[0]) except OSError, e: match = None error(_("Could not start LilyPond: %s") % e)
def runAction(url): """ Runs an URL with KRun. If url starts with "email=" or "emailpreview=", it is converted to a mailto: link with the url attached, and opened in the default KDE mailer. If url starts with "print=", the file is directly printed with lpr. If url starts with "embed=", a subroutine in pdftk is called to embed LilyPond documents in the output PDF. """ # hack: prevent QTextView recognizing mailto: urls cos it can't handle # query string url = unicode(url) # url could be a QString m = re.match("([a-z]+)=(.*)", url) if not m: return krun(url) command, url = m.groups() if command == 'print': path = unicode(KURL(url).path()) cmd = splitcommandline(config("commands").get("lpr", "lpr")) cmd.append(path) p = Popen(cmd, stderr=PIPE) if p.wait() != 0: error(_("Printing failed: %s") % p.stderr.read()) else: info(_("The document has been sent to the printer.")) elif command in ('email', 'emailpreview'): if command == "email" or warncontinue(_( "This PDF has been created with point-and-click urls (preview " "mode), which increases the file size dramatically. It's better " "to email documents without point-and-click urls (publish mode), " "because they are much smaller. Continue anyway?")): KApplication.kApplication().invokeMailer( KURL(u"mailto:?attach=%s" % url), "", True) elif command == 'embed': ly = unicode(KURL(url).path()) from lilykde import pdftk pdftk.attach_files(ly)
def convertLy(): """ Run convert-ly on the current document """ global version docVersion = getVersion() if not docVersion: sorry(_("Can't determine the LilyPond version of the current document." " Please add a \\version statement with the correct version.")) elif not version: sorry(_("Can't determine the version of LilyPond. " "Please check your LilyPond installation.")) elif docVersion >= version: sorry(_("This LilyPond document is already up-to-date.")) else: # Ok, let's run convert-ly. # We add the from-version. Only in that case convert-ly wants to # read from stdin. convert_ly = config("commands").get("convert-ly", "convert-ly") try: out, err = Popen((convert_ly, "-f", "%d.%d.%d" % docVersion, "-"), stdin=PIPE, stdout=PIPE, stderr=PIPE ).communicate(editor.text().encode('utf8')) if out: editor.setText(u"%s\n\n%%{\n%s\n%%}\n" % (out.decode('utf8'), err.decode('utf8'))) info(_( "The document has been processed with convert-ly. You'll find " "the messages of convert-ly in a comment block at the end. " "You still may have to edit some parts manually."), timeout=10) else: msg = err.decode('utf8').replace('\n', '<br>') info(_( "The document has been processed with convert-ly, but " "remained unchanged. This is the message given by " "convert-ly: %s") % "<br><br>%s" % msg, timeout=10) except OSError, e: error(_("Could not start convert-ly: %s") % e)
def failed(self): error(_( "Could not start TiMidity. Please try the command %s in a " "terminal to find out what went wrong.") % "<br>%s<br>" % self.command, timeout = 10)