# lilylib.py -- options and stuff # # source file of the GNU LilyPond music typesetter import os from __main__ import * try: import gettext gettext.bindtextdomain ('lilypond', '@localedir@') gettext.textdomain ('lilypond') _ = gettext.gettext except: def _ (s): return s program_version = '@TOPLEVEL_VERSION@' if program_version == '@' + 'TOPLEVEL_VERSION' + '@': program_version = '1.5.17' original_dir = os.getcwd () temp_dir = os.path.join (original_dir, '%s.dir' % program_name) errorport = sys.stderr keep_temp_dir_p = 0 verbose_p = 0 def identify (): sys.stdout.write ('%s (GNU LilyPond) %s\n' % (program_name, program_version)) def warranty (): identify () sys.stdout.write ('\n') sys.stdout.write (_ ('Copyright (c) %s by' % ' 2001')) sys.stdout.write ('\n') sys.stdout.write (' Han-Wen Nienhuys') sys.stdout.write (' Jan Nieuwenhuizen') sys.stdout.write ('\n') sys.stdout.write (_ (r''' Distributed under terms of the GNU General Public License. It comes with NO WARRANTY.''')) sys.stdout.write ('\n') def progress (s): errorport.write (s + '\n') def warning (s): progress (_ ("warning: ") + s) def error (s): '''Report the error S. Exit by raising an exception. Please do not abuse by trying to catch this error. If you do not want a stack trace, write to the output directly. RETURN VALUE None ''' progress (_ ("error: ") + s) raise _ ("Exiting ... ") def getopt_args (opts): '''Construct arguments (LONG, SHORT) for getopt from list of options.''' short = '' long = [] for o in opts: if o[1]: short = short + o[1] if o[0]: short = short + ':' if o[2]: l = o[2] if o[0]: l = l + '=' long.append (l) return (short, long) def option_help_str (o): '''Transform one option description (4-tuple ) into neatly formatted string''' sh = ' ' if o[1]: sh = '-%s' % o[1] sep = ' ' if o[1] and o[2]: sep = ',' long = '' if o[2]: long= '--%s' % o[2] arg = '' if o[0]: if o[2]: arg = '=' arg = arg + o[0] return ' ' + sh + sep + long + arg def options_help_str (opts): '''Convert a list of options into a neatly formatted string''' w = 0 strs =[] helps = [] for o in opts: s = option_help_str (o) strs.append ((s, o[3])) if len (s) > w: w = len (s) str = '' for s in strs: str = str + '%s%s%s\n' % (s[0], ' ' * (w - len(s[0]) + 3), s[1]) return str def help (): ls = [(_ ("Usage: %s [OPTION]... FILE") % program_name), ('\n\n'), (help_summary), ('\n\n'), (_ ("Options:")), ('\n'), (options_help_str (option_definitions)), ('\n\n'), (_ ("Report bugs to %s") % 'bug-lilypond@gnu.org'), ('\n')] map (sys.stdout.write, ls) def setup_temp (): """ Create a temporary directory, and return its name. """ global temp_dir if not keep_temp_dir_p: temp_dir = tempfile.mktemp (program_name) try: os.mkdir (temp_dir, 0777) except OSError: pass return temp_dir def system (cmd, ignore_error = 0): """Run CMD. If IGNORE_ERROR is set, don't complain when CMD returns non zero. RETURN VALUE Exit status of CMD """ if verbose_p: progress (_ ("Invoking `%s\'") % cmd) st = os.system (cmd) if st: name = re.match ('[ \t]*([^ \t]*)', cmd).group (1) msg = name + ': ' + _ ("command exited with value %d") % st if ignore_error: warning (msg + ' ' + _ ("(ignored)") + ' ') else: error (msg) return st def cleanup_temp (): if not keep_temp_dir_p: if verbose_p: progress (_ ("Cleaning %s...") % temp_dir) shutil.rmtree (temp_dir) def strip_extension (f, ext): (p, e) = os.path.splitext (f) if e == ext: e = '' return p + e # END Library