summaryrefslogtreecommitdiffstats
path: root/source-builder/sb/asciidoc/filters/music/music2png.py
diff options
context:
space:
mode:
authorChris Johns <chrisj@rtems.org>2017-08-07 09:59:49 +1000
committerChris Johns <chrisj@rtems.org>2017-08-07 09:59:49 +1000
commit8b96e17c8abf61d97dd224b23370dc148f32fe3c (patch)
treee8eb043159d145ffbbbf9c23ef872226de5ab059 /source-builder/sb/asciidoc/filters/music/music2png.py
parent4.12: Fix SIS patch URL (diff)
downloadrtems-source-builder-8b96e17c8abf61d97dd224b23370dc148f32fe3c.tar.bz2
doc: Remove in source documentation and the asciidoc package
The RSB documentation is now in ReST format and part of the RTEMS Documentation project. See https://docs.rtems.org/. Remove support for the GPL based asciidoc tool and remove the asciidoc package from the RSB. Add the Python Markdown package and update the reporter to use Markdown for HTML generation. The resuling HTML report is a single self contained file. Closes #3047.
Diffstat (limited to 'source-builder/sb/asciidoc/filters/music/music2png.py')
-rwxr-xr-xsource-builder/sb/asciidoc/filters/music/music2png.py213
1 files changed, 0 insertions, 213 deletions
diff --git a/source-builder/sb/asciidoc/filters/music/music2png.py b/source-builder/sb/asciidoc/filters/music/music2png.py
deleted file mode 100755
index a0224df..0000000
--- a/source-builder/sb/asciidoc/filters/music/music2png.py
+++ /dev/null
@@ -1,213 +0,0 @@
-#!/usr/bin/env python
-'''
-NAME
- music2png - Converts textual music notation to classically notated PNG file
-
-SYNOPSIS
- music2png [options] INFILE
-
-DESCRIPTION
- This filter reads LilyPond or ABC music notation text from the input file
- INFILE (or stdin if INFILE is -), converts it to classical music notation
- and writes it to a trimmed PNG image file.
-
- This script is a wrapper for LilyPond and ImageMagick commands.
-
-OPTIONS
- -f FORMAT
- The INFILE music format. 'abc' for ABC notation, 'ly' for LilyPond
- notation. Defaults to 'abc' unless source starts with backslash.
-
- -o OUTFILE
- The file name of the output file. If not specified the output file is
- named like INFILE but with a .png file name extension.
-
- -m
- Skip if the PNG output file is newer that than the INFILE.
- Compares timestamps on INFILE and OUTFILE. If
- INFILE is - (stdin) then compares MD5 checksum stored in file
- named like OUTFILE but with a .md5 file name extension.
- The .md5 file is created if the -m option is used and the
- INFILE is - (stdin).
-
- -v
- Verbosely print processing information to stderr.
-
- --help, -h
- Print this documentation.
-
- --version
- Print program version number.
-
-SEE ALSO
- lilypond(1), abc2ly(1), convert(1)
-
-AUTHOR
- Written by Stuart Rackham, <srackham@gmail.com>
-
-COPYING
- Copyright (C) 2006 Stuart Rackham. Free use of this software is
- granted under the terms of the GNU General Public License (GPL).
-'''
-
-# Suppress warning: "the md5 module is deprecated; use hashlib instead"
-import warnings
-warnings.simplefilter('ignore',DeprecationWarning)
-
-import os, sys, tempfile, md5
-
-VERSION = '0.1.2'
-
-# Globals.
-verbose = False
-
-class EApp(Exception): pass # Application specific exception.
-
-def print_stderr(line):
- sys.stderr.write(line + os.linesep)
-
-def print_verbose(line):
- if verbose:
- print_stderr(line)
-
-def write_file(filename, data, mode='w'):
- f = open(filename, mode)
- try:
- f.write(data)
- finally:
- f.close()
-
-def read_file(filename, mode='r'):
- f = open(filename, mode)
- try:
- return f.read()
- finally:
- f.close()
-
-def run(cmd):
- global verbose
- if not verbose:
- cmd += ' 2>%s' % os.devnull
- print_verbose('executing: %s' % cmd)
- if os.system(cmd):
- raise EApp, 'failed command: %s' % cmd
-
-def music2png(format, infile, outfile, modified):
- '''Convert ABC notation in file infile to cropped PNG file named outfile.'''
- outfile = os.path.abspath(outfile)
- outdir = os.path.dirname(outfile)
- if not os.path.isdir(outdir):
- raise EApp, 'directory does not exist: %s' % outdir
- basefile = tempfile.mktemp(dir=os.path.dirname(outfile))
- temps = [basefile + ext for ext in ('.abc', '.ly', '.ps', '.midi')]
- skip = False
- if infile == '-':
- source = sys.stdin.read()
- checksum = md5.new(source).digest()
- filename = os.path.splitext(outfile)[0] + '.md5'
- if modified:
- if os.path.isfile(filename) and os.path.isfile(outfile) and \
- checksum == read_file(filename,'rb'):
- skip = True
- else:
- write_file(filename, checksum, 'wb')
- else:
- if not os.path.isfile(infile):
- raise EApp, 'input file does not exist: %s' % infile
- if modified and os.path.isfile(outfile) and \
- os.path.getmtime(infile) <= os.path.getmtime(outfile):
- skip = True
- source = read_file(infile)
- if skip:
- print_verbose('skipped: no change: %s' % outfile)
- return
- if format is None:
- if source and source.startswith('\\'): # Guess input format.
- format = 'ly'
- else:
- format = 'abc'
- # Write temporary source file.
- write_file('%s.%s' % (basefile,format), source)
- abc = basefile + '.abc'
- ly = basefile + '.ly'
- png = basefile + '.png'
- saved_pwd = os.getcwd()
- os.chdir(outdir)
- try:
- if format == 'abc':
- run('abc2ly -o "%s" "%s"' % (ly,abc))
- run('lilypond --png -o "%s" "%s"' % (basefile,ly))
- os.rename(png, outfile)
- finally:
- os.chdir(saved_pwd)
- # Chop the bottom 75 pixels off to get rid of the page footer then crop the
- # music image. The -strip option necessary because FOP does not like the
- # custom PNG color profile used by Lilypond.
- run('convert "%s" -strip -gravity South -chop 0x75 -trim "%s"' % (outfile, outfile))
- for f in temps:
- if os.path.isfile(f):
- print_verbose('deleting: %s' % f)
- os.remove(f)
-
-def usage(msg=''):
- if msg:
- print_stderr(msg)
- print_stderr('\n'
- 'usage:\n'
- ' music2png [options] INFILE\n'
- '\n'
- 'options:\n'
- ' -f FORMAT\n'
- ' -o OUTFILE\n'
- ' -m\n'
- ' -v\n'
- ' --help\n'
- ' --version')
-
-def main():
- # Process command line options.
- global verbose
- format = None
- outfile = None
- modified = False
- import getopt
- opts,args = getopt.getopt(sys.argv[1:], 'f:o:mhv', ['help','version'])
- for o,v in opts:
- if o in ('--help','-h'):
- print __doc__
- sys.exit(0)
- if o =='--version':
- print('music2png version %s' % (VERSION,))
- sys.exit(0)
- if o == '-f': format = v
- if o == '-o': outfile = v
- if o == '-m': modified = True
- if o == '-v': verbose = True
- if len(args) != 1:
- usage()
- sys.exit(1)
- infile = args[0]
- if format not in (None, 'abc', 'ly'):
- usage('invalid FORMAT')
- sys.exit(1)
- if outfile is None:
- if infile == '-':
- usage('OUTFILE must be specified')
- sys.exit(1)
- outfile = os.path.splitext(infile)[0] + '.png'
- # Do the work.
- music2png(format, infile, outfile, modified)
- # Print something to suppress asciidoc 'no output from filter' warnings.
- if infile == '-':
- sys.stdout.write(' ')
-
-if __name__ == "__main__":
- try:
- main()
- except SystemExit:
- raise
- except KeyboardInterrupt:
- sys.exit(1)
- except Exception, e:
- print_stderr("%s: %s" % (os.path.basename(sys.argv[0]), str(e)))
- sys.exit(1)