]> git.donarmstrong.com Git - lilypond.git/blobdiff - scripts/ly2dvi.py
patch::: 1.3.140.jcn5
[lilypond.git] / scripts / ly2dvi.py
index 03b04ae75cb6908b3b566955ee749b2c620966d6..e731503e2460ff9c065622021e77ba119cc439bb 100644 (file)
@@ -7,7 +7,16 @@
 '''
 TODO:
 
-  * --dependencies
+  * check --dependencies
+
+  * move versatile taglines, 
+  
+     \header {
+        beginfooter=\mutopiaPD
+        endfooter=\tagline  -> 'lily was here <version>'
+     }
+
+  * head/header tagline/endfooter
 
   * dvi from lilypond .tex output?  This is hairy, because we create dvi
     from lilypond .tex *and* header output.
@@ -42,8 +51,8 @@ extra_init = {
        'language' : [],
        'latexheaders' : [],
        'latexpackages' :  ['geometry'],
-       'papersizename' : [],
-       'pagenumber' : [],
+       'papersize' : [],
+       'pagenumber' : [1],
        'textheight' : [], 
        'linewidth' : [],
        'orientation' : []
@@ -70,12 +79,16 @@ if program_version == '@' + 'TOPLEVEL_VERSION' + '@':
 # generate ps ?
 postscript_p = 0
 
+# be verbose?
+verbose_p = 0
+
 option_definitions = [
        ('', 'h', 'help', _ ("this help")),
        ('KEY=VAL', 's', 'set', _ ("change global setting KEY to VAL")),
        ('', 'P', 'postscript', _ ("generate PostScript output")),
        ('', 'k', 'keep', _ ("keep all output, and name the directory ly2dvi.dir")),
        ('', '', 'no-lily', _ ("don't run LilyPond")),
+       ('', 'V', 'verbose', _ ("verbose")),
        ('', 'v', 'version', _ ("print version number")),
        ('', 'w', 'warranty', _ ("show warranty and copyright")),
        ('DIR', '', 'outdir', _ ("dump all final output into DIR")),
@@ -99,13 +112,21 @@ NO WARRANTY.'''))
 
 
 
+def star_progress (s):
+       '''Progress messages that stand out between lilypond stuff'''
+       progress ('*** ' + s)
+
 def progress (s):
-       '''Make the progress messages stand out between lilypond stuff'''
-       # Why should they have to stand out?  Blend in would be nice too.
-       sys.stderr.write ('*** ' + s+ '\n')
+       sys.stderr.write (s + '\n')
+
+def warning (s):
+       sys.stderr.write (_ ("warning: ") + s)
+       sys.stderr.write ('\n')
        
+               
 def error (s):
-       sys.stderr.write (s)
+       sys.stderr.write (_ ("error: ") + s)
+       sys.stderr.write ('\n')
        raise _ ("Exiting ... ")
 
 
@@ -125,7 +146,7 @@ def find_file (name):
                except IOError:
                        pass
        if f:
-               sys.stderr.write (_ ("Reading `%s'") % nm)
+               sys.stderr.write (_ ("Reading %s...") % nm)
                sys.stderr.write ('\n');
                return (f.read (), nm)
        else:
@@ -200,9 +221,8 @@ def help ():
        sys.stdout.write ('\n')
        sys.stdout.write (options_help_str (option_definitions))
        sys.stdout.write ('\n\n')
-       sys.stdout.write (_ ("warning: "))
-       sys.stdout.write (_ ("all output is written in the CURRENT directory"))
-       sys.stdout.write ('\n\n')
+       warning (_ ("all output is written in the CURRENT directory"))
+       sys.stdout.write ('\n')
        sys.stdout.write (_ ("Report bugs to %s") % 'bug-gnu-music@gnu.org')
        sys.stdout.write ('\n')
        sys.exit (0)
@@ -215,7 +235,7 @@ def setup_temp ():
                temp_dir = tempfile.mktemp ('ly2dvi')
                
        try:
-               os.mkdir (temp_dir)
+               os.mkdir (temp_dir, 0777)
        except OSError:
                pass
                
@@ -231,12 +251,13 @@ def setup_temp ():
        os.environ['TFMFONTS'] =  original_dir + fp
 
        os.chdir (temp_dir)
-       progress (_ ('Temp directory is `%s\'\n') % temp_dir) 
+       if verbose_p:
+               progress (_ ('Temp directory is `%s\'\n') % temp_dir) 
 
        
 def system (cmd, ignore_error = 0):
-       sys.stderr.write (_ ("Invoking `%s\'") % cmd)
-       sys.stderr.write ('\n')
+       if verbose_p:
+               progress (_ ("Invoking `%s\'") % cmd)
        st = os.system (cmd)
        if st:
                msg =  ( _ ("error: ") + _ ("command exited with value %d") % st)
@@ -249,7 +270,8 @@ def system (cmd, ignore_error = 0):
 
 def cleanup_temp ():
        if not keep_temp_dir:
-               progress (_ ('Cleaning up `%s\'') % temp_dir)
+               if verbose_p:
+                       progress (_ ('Cleaning up `%s\'') % temp_dir)
                system ('rm -rf %s' % temp_dir)
        
 
@@ -270,11 +292,13 @@ def set_setting (dict, key, val):
        try:
                val = string.atof (val)
        except ValueError:
+               #warning (_ ("invalid value: %s") % `val`)
                pass
 
        try:
                dict[key].append (val)
        except KeyError:
+               warning (_ ("no such setting: %s") % `key`)
                dict[key] = [val]
        
 
@@ -287,7 +311,7 @@ def analyse_lilypond_output (filename, extra):
 
        # search only the first 10k
        s = s[:10240]
-       for x in ('textheight', 'linewidth', 'papersizename', 'orientation'):
+       for x in ('textheight', 'linewidth', 'papersize', 'orientation'):
                m = re.search (r'\\def\\lilypondpaper%s{([^}]*)}'%x, s)
                if m:
                        set_setting (extra, x, m.group (1))
@@ -314,7 +338,7 @@ def find_tex_files (files, extra):
                x = 0
                while 1:
                        fname = os.path.basename (f)
-                       fname = os.path.splitext (fname)[0]
+                       fname = strip_ly_suffix (fname)
                        if x:
                                fname = fname + '-%d' % x
 
@@ -324,7 +348,9 @@ def find_tex_files (files, extra):
                        else:
                                break
 
-                       x = x +1 
+                       x = x + 1
+       if not x:
+               warning (_ ("no lilypond output found for %s") % `files`)
        return tfiles
 
 def one_latex_definition (defn, first):
@@ -348,7 +374,7 @@ def one_latex_definition (defn, first):
 
 ly_paper_to_latexpaper =  {
        'a4' : 'a4paper',
-       
+       'letter' : 'letterpaper', 
 }
 
 def global_latex_definition (tfiles, extra):
@@ -362,8 +388,13 @@ def global_latex_definition (tfiles, extra):
 
        paper = ''
 
-       if extra['papersizename']:
-               paper = '[%s]' % ly_paper_to_latexpaper[extra['papersizename'][0]]
+       if extra['papersize']:
+               try:
+                       paper = '[%s]' % ly_paper_to_latexpaper[extra['papersize'][0]]
+               except:
+                       warning (_ ("invalid value: %s") % `extra['papersize'][0]`)
+                       pass
+       
        s = s + '\\documentclass%s{article}\n' % paper
 
        if extra['language']:
@@ -389,26 +420,35 @@ def global_latex_definition (tfiles, extra):
                linewidth = 597
        s = s + '\geometry{width=%spt%s,headheight=2mm,headsep=0pt,footskip=2mm,%s}\n' % (linewidth, textheight, orientation)
 
-       s= s + r'''
-\usepackage[latin1]{inputenc} 
+       s = s + r'''
+\usepackage[latin1]{inputenc}
 \input{titledefs}
 \makeatletter
-\renewcommand{\@oddfoot}{\parbox{\textwidth}{\mbox{}\thefooter}}%%
+\renewcommand{\@oddfoot}{\parbox{\textwidth}{\mbox{}\thefooter}}%
 '''
-       if extra['pagenumber'] and  extra['pagenumber'][-1]:
+       
+       if extra['pagenumber'] and extra['pagenumber'][-1] and extra['pagenumber'][-1] != 'no':
                s = s + r'''
-               \renewcommand{\@oddhead}{\parbox{\textwidth}%%
-               {\mbox{}\small\theheader\hfill\textbf{\thepage}}}%%'''
+\renewcommand{\@oddhead}{\parbox{\textwidth}%
+    {\mbox{}\small\theheader\hfill\textbf{\thepage}}}
+'''
        else:
-               s = s + '\\pagestyle{empty}'
-               
-       s = s + '\\begin{document}'
+               s = s + '\\pagestyle{empty}\n'
+
+       s = s + '\\makeatother\n'
+       s = s + '\\begin{document}\n'
+
 
        first = 1
        for t in tfiles:
                s = s + one_latex_definition (t, first)
                first = 0
-               
+
+       s = s + r'''
+\makeatletter
+\renewcommand{\@oddfoot}{\parbox{\textwidth}{\mbox{}\lilypondtagline}}%
+\makeatother
+'''
        s = s + '\\end{document}'
 
        return s
@@ -436,8 +476,8 @@ def generate_postscript (dvi_name, extra):
        '''Run dvips on DVI_NAME, optionally doing -t landscape'''
 
        opts = ''
-       if extra['papersizename']:
-               opts = opts + ' -t %s' % extra['papersizename'][0]
+       if extra['papersize']:
+               opts = opts + ' -t %s' % extra['papersize'][0]
 
        if extra['orientation'] and extra['orientation'][0] == 'landscape':
                opts = opts + ' -t landscape'
@@ -496,6 +536,8 @@ for opt in options:
                set_setting (extra_init, ss[0], ss[1])
        elif o == '--dependencies' or o == '-d':
                track_dependencies_p = 1
+       elif o == '--verbose' or o == '-V':
+               verbose_p = 1
        elif o == '--version' or o == '-v':
                identify ()
                sys.exit (0)
@@ -545,18 +587,20 @@ if files:
        if outdir != '.':
                system ('mkdir -p %s' % outdir)
        system ('cp \"%s\" \"%s\"' % (srcname, dest ))
-       system ('cp *.midi %s' % outdir, ignore_error = 1)
+       if re.match ('[.]midi', string.join (os.listdir ('.'))):
+               system ('cp *.midi %s' % outdir, ignore_error = 1)
 
        depfile = os.path.join (outdir, base + '.dep')
 
        if track_dependencies_p:
                generate_dependency_file (depfile, dest)
 
+       os.chdir (original_dir)
        cleanup_temp ()
 
        # most insteresting info last
        progress (_ ("dependencies output to %s...") % depfile)
-       progress (_ ("%s file left in `%s'") % (type, dest))
+       progress (_ ("%s output to %s...") % (type, dest))