]> git.donarmstrong.com Git - lilypond.git/blobdiff - scripts/ly2dvi.py
release: 1.2.7
[lilypond.git] / scripts / ly2dvi.py
index 86ebadd0eab7c139c04eae90c380970929004724..e0682e5b23ac34f5564cfca6ad623d0e622307e7 100644 (file)
@@ -1,5 +1,8 @@
 #!@PYTHON@
 
+
+# TODO: Rewrite this.  The control structure is too hairy.
+
 """
 =======================================================================
 LilyPond to dvi converter
@@ -14,7 +17,7 @@ Output: DVI file
 """
 
 name = 'ly2dvi'
-version = '0.0.12'
+version = '@TOPLEVEL_VERSION@'
 errorlog = ''
 
 import sys
@@ -24,12 +27,13 @@ import re
 import string
 import time
 import glob
+import tempfile
 
 
 class Input:
     """
     This class handles all ly2dvi.py input file methods
-
+    
     Public methods:
     
     __init__()  Constructor
@@ -260,9 +264,12 @@ class TeXOutput:
         linewidth, horizontalMarginArg, textheight, verticalMarginArg,
         Props.get('header') )
         
-        pathcomp = os.path.splitext(file)
-        this.__base = pathcomp[0]
-        this.__outfile = '%s.%d%s' % (pathcomp[0], os.getpid(), pathcomp[1])
+        base, ext = os.path.splitext(file)
+        this.__base = base
+        tempfile.template= base + '_ly'
+        this.__outfile = tempfile.mktemp(ext)
+        base, ext = os.path.splitext(this.__outfile)
+        this.__tmpbase = base
         try:
             this.__fd = open(this.__outfile,"w")
         except:
@@ -333,7 +340,7 @@ class TeXOutput:
         if stat:
             sys.exit('ExitBadLatex')
         if not os.path.isfile(outfile):
-               os.rename(this.__base + '.' + str(os.getpid()) + '.dvi', outfile)
+               os.rename(this.__tmpbase + '.dvi', outfile)
                
         sys.stderr.write('\n' + program_id() + ': dvi file name is %s\n\n'
                         % (outfile))
@@ -349,6 +356,10 @@ class TeXOutput:
 
 \f
 
+
+# ARG! THIS CODE IS BLOATED:
+# FIXME: Junk all set/get methods.
+
 class Properties:
     """
     This class handles all ly2dvi.py property manipulation
@@ -460,7 +471,8 @@ class Properties:
         if os.environ.has_key('TMP'):
             this.__set('tmp',os.environ['TMP'],'environment')
 
-        
+
+    def read_titledefs (this):
        fd=this.get_texfile_path ('titledefs.tex')
         mudefs=[]    
 
@@ -793,7 +805,7 @@ class Properties:
     #
     # Set or Clear Dependencies flag to generate makefile dependencies
     #
-    def setDependencies(this, requester):      
+    def setDependencies(this, value, requester):       
         """
         Set or Clear dependencies flag
         """
@@ -886,15 +898,17 @@ def getLilyopts():
     else:
 
         if Props.get('dependencies'):
-            dep=' -d'
+            dep=' -M'
         else:
             dep=''
        return inc + dep
     return inc
 
-def writeLilylog(contents):
+def writeLilylog(file,contents):
     if Props.get('keeplilypond'):
-        file='lilylog.' + str(os.getpid())
+        base, ext = os.path.splitext(file)
+        tempfile.template=base + "_li"
+        file=tempfile.mktemp('.log')
         output = Props.get('output')
         if output != '':
             file = os.path.join( output, file )
@@ -929,7 +943,7 @@ def unc2dos(path):
     
 
 def program_id ():
-    return name + ' ' + version;
+    return 'ly2dvi (GNU lilypond) ' + version;
 
 
 def mailaddress():
@@ -942,32 +956,36 @@ def mailaddress():
 def identify ():
     sys.stderr.write (program_id () + '\n')
 
+def print_version ():
+    sys.stdout.write (program_id () + '\n')
+
 def help ():
-    sys.stderr.write (
-        'Generate dvi file from mudela or lilypond output\n'
-        'Usage: ' + name + ' [OPTION]... [FILE]...\n'
-        '\n'
-        'Options:\n'
-        '  -D,--debug           increase verbosity\n'
-        '  -F,--headers=        name of additional LaTeX headers file\n'
-        '  -H,--Height=         set paper height (points) (see manual page)\n'
-        '  -I,--include=DIR     add DIR to LilyPond\'s search path\n'
-        '  -K,--keeplilypond    keep lilypond output files\n'
-        '  -L,--landscape       set landscape orientation\n'
-        '  -N,--nonumber        switch off page numbering\n'
-        '  -O,--orientation=    set orientation (obsolete - use -L instead)\n'
-        '  -P,--postscript      generate postscript file\n'
-        '  -W,--Width=          set paper width (points) (see manual page)\n'
-        '  -d,--dependencies    tell lilypond make a dependencies file\n'
-        '  -h,--help            this help text\n'
-        '  -k,--keeply2dvi      keep ly2dvi output files\n'
-        '  -l,--language=       give LaTeX language (babel)\n'
-        '  -o,--output=         set output directory\n'
-        '  -p,--papersize=      give LaTeX papersize (eg. a4)\n'
-        '  -s,--separate        run all files separately through LaTeX\n'
-        '\n'
-        'files may be (a mix of) input to or output from lilypond(1)\n'
-        )
+    sys.stdout.write (
+"""Usage: %s [OPTION]... [FILE]...
+
+Generate dvi file from mudela or lilypond output
+
+Options:
+  -D,--debug           increase verbosity
+  -F,--headers=        name of additional LaTeX headers file
+  -H,--Height=         set paper height (points) (see manual page)
+  -I,--include=DIR     add DIR to LilyPond\'s search path
+  -K,--keeplilypond    keep lilypond output files
+  -L,--landscape       set landscape orientation
+  -N,--nonumber        switch off page numbering
+  -O,--orientation=    set orientation (obsolete - use -L instead)
+  -P,--postscript      generate postscript file
+  -W,--Width=          set paper width (points) (see manual page)
+  -M,--dependencies    tell lilypond make a dependencies file
+  -h,--help            this help text
+  -k,--keeply2dvi      keep ly2dvi output files
+  -l,--language=       give LaTeX language (babel)
+  -o,--output=         set output directory
+  -p,--papersize=      give LaTeX papersize (eg. a4)
+  -s,--separate        run all files separately through LaTeX
+
+files may be (a mix of) input to or output from lilypond(1)
+""" % name)
 
 \f
 
@@ -981,14 +999,15 @@ def main():
     infile = Input()
     outfile = TeXOutput()
     texInputFiles=[]
+    tempfile.tempdir=""
 
     (options, files) = getopt.getopt (sys.argv[1:],
-                                      'DF:H:I:KLNPW:dhkl:o:p:s',
+                                      'DF:H:I:KLNPW:Mhkl:o:p:s',
                                       ['debug', 'headers=', 'Height=',
                                        'include=', 'keeplilypond', 'landscape',
                                        'nonumber', 'Width=', 'dependencies',
                                        'help', 'keeply2dvi', 'language=',
-                                       'output=', 'papersize=', 'separate',
+                                       'output=', 'version', 'papersize=', 'separate',
                                        'postscript'])
     for opt in options:
         o = opt[0]
@@ -1009,11 +1028,11 @@ def main():
            Props.setNonumber(1,'commandline')
         elif o == '--Width' or o == '-W':
            Props.setLineWidth(a,'commandline')
-        elif o == '--dependencies' or o == '-d':
+        elif o == '--dependencies' or o == '-M':
            Props.setDependencies(1,'commandline')
         elif o == '--help' or o == '-h':
             help()
-            return 0
+           return 0
         elif o == '--keeply2dvi' or o == '-k':
            Props.setKeeply2dvi(1,'commandline')
         elif o == '--language' or o == '-l':
@@ -1026,7 +1045,13 @@ def main():
            Props.setSeparate(1,'commandline')
         elif o == '--postscript' or o == '-P':
            Props.setPostscript(1,'commandline')
-
+       elif o == '--version':
+           print_version ()
+           return 0
+           
+    identify()
+    Props.read_titledefs ()
+    
     if len(files):
         for file in files:
             infile.open(file)
@@ -1060,7 +1085,7 @@ def main():
                 if stat:
                     sys.exit('ExitBadLily', cmd )
                 texFiles=getTeXFile(log)
-                writeLilylog(log)
+                writeLilylog(file,log)
                 Props.addLilyOutputFiles(texFiles,'program')
                 texInputFiles = texInputFiles + texFiles
             else:
@@ -1074,7 +1099,7 @@ def main():
             if Props.get('debug'):
                 Props.printProps()
             if firstfile:
-                outfile.start(file)
+                outfile.start(file)  # allow for specified name
             else:
                 outfile.next()
             outfile.write("""\
@@ -1115,13 +1140,12 @@ def cleanup():
     if not Props.get('keeplilypond'):
         lilyfiles = Props.get('lilyOutputFiles')
     if not Props.get('keeply2dvi'):
-        tmpfiles = glob.glob('*.' + str(os.getpid()) + '.*' )
+        tmpfiles = glob.glob('*_ly[0-9]*.*')
     for file in lilyfiles + tmpfiles:
         if os.path.isfile(file):
             os.remove(file)
 
 
-identify()
 Props = Properties()
 
 try: