On Mon, 13 Dec 1999, Martin Sander wrote:

> Werner Arnhold wrote:
> > 
> > 
> > I send you an example, a little birthday song adapted from pmx -- tex --
> > latex + verse. I hope it helps. I just made a little python script to do
> > the conversion automatically, tell me if you are interested.
> > 
> Oh, yes! I _should_ be interested!!
> 
> Regards,
> 
> Martin

Ok, here the little python script. It isn't in any way a general solution
but only fitting for what comes out from rosegarden. It depends on the fact
that rosegarden gives an output in a special way. If this doesn't fit for
you, send me a file from yours, maybe I can adopt the script.

I have added the "a4blatt.sty" missing with the examples (for Christian).
It just defines a paper with more textwidth and -height.

Hope this helps. 

Bye 
Werner

Werner Arnhold                                Fritz-Karsen-Schule
Feldspatweg  7                                Onkel-Br�sig-Str. 76-78
D-12349 Berlin                                D-12359 Berlin
[EMAIL PROTECTED]                       [EMAIL PROTECTED]
%Grundzeilenabstand 1/6in = 4,23mm (DIN 2107,2142)
\newdimen\GZA
\GZA=1in
\divide\GZA by 6
\oddsidemargin 0pt \evensidemargin 0pt \marginparwidth 90pt \marginparsep
11pt \marginparpush 5pt
\topmargin -2\GZA \headheight 1\GZA \headsep 2\GZA %\footheight 12pt
\footskip 25pt \topskip 1\GZA
\textheight 55\GZA \textwidth 6in \columnsep 10pt \columnseprule 0pt


#! /usr/local/bin/python
# pmx2latex - Erzeugt aus einer von Rosegarden generierten PMX-Datei ein
#       LaTeX-MusiXTeX-Dokument
# W. Arnhold 25.09.1999
# letzte Aenderung 25.09.1999

import os
import os.path
import sys
import string

def enthaelt(quelle, such):
        return len(string.splitfields(quelle, such)) > 1
        
def dateinamen_pruefen():
        global dateiname, dateiname_alt, dateibasename
        if len(sys.argv) != 2:
                print 'Gebrauch: %s <Datei>'%sys.argv[0]
                sys.exit(-1)
        d = string.splitfields(sys.argv[1], '.pmx')
        if len(d) == 1:
                dateiname_alt = sys.argv[1] + '.pmx'
        elif len(d) == 2 and not d[1]:
                dateiname_alt = sys.argv[1]
        else:
                print 'Falscher Dateiname: %s!'%sys.argv[1]
                sys.exit (-1)
        if not os.path.exists(dateiname_alt):
                print 'Die Datei %s existiert nicht!'%dateiname_alt
        dateiname = dateiname_alt
        dateiname_alt = dateiname_alt + '.0'
        dateibasename = string.splitfields(dateiname, '.pmx')[0]
        print 'Dateiname (alt): %s, neu:  %s, base %s'%\
                (dateiname_alt, dateiname, dateibasename)

def pmx_machen():
        command = 'mv %s %s'%(dateiname, dateiname_alt)
        print command
        if os.system(command):
                print 'Umbenennen der Eingabedatei misslungen'
                sys.exit (-1)
        
        datalt = open(dateiname_alt, 'r')
        datneu = open(dateiname, 'w')
        datneu.write('---\n')
        datneu.write('\\input musixtex\\\n')
        datneu.write('\\input musixlyr\\\n')
        datneu.write('---\n')
        while 1:
                einzeile = datalt.readline()
                if enthaelt(einzeile, 'number of staffs'):
                        datneu.write(einzeile)
                        einzeile = datalt.readline()
                        anzahl_notensysteme = eval(einzeile[:-1])
                        print '%d Notensysteme'%anzahl_notensysteme
                if enthaelt(einzeile, 'anacrusis'):
                        datneu.write(einzeile)
                        einzeile = datalt.readline()
                        auftaktschlaege = eval(einzeile[:-1])
                        print 'Auftakt: %d' % auftaktschlaege
                if enthaelt(einzeile, 'indentation'):
                        datneu.write(einzeile)
                        dummy = datalt.readline()
                        datneu.write('0.000000\n')
                        break
                datneu.write(einzeile)
                
        for i in range(anzahl_notensysteme):
                dummy = datalt.readline()
                datneu.write('\n')
        while 1:
                einzeile = datalt.readline()
                if not einzeile:
                        break
                if auftaktschlaege > 0 and enthaelt(einzeile, 'Bar 1'):
                        datneu.write(einzeile)
                        l1 = []
                        l2 = []
                        for i in range(anzahl_notensysteme):
                                einzeile = datalt.readline()
                                l1.append(einzeile[:-2])
                        dummy = datalt.readline()
                        for i in range(anzahl_notensysteme):
                                einzeile = datalt.readline()
                                l2.append(einzeile)
                        for i in range(anzahl_notensysteme):
                                datneu.write(l1[i] + l2[i])
                else:
                        datneu.write(einzeile)

        datneu.close()
        datalt.close()

        command = 'pmx %s'%dateibasename
        if os.system(command):
                print 'Aufruf von PMX misslungen'
                sys.exit(-1)
                
# Jetzt TeX in LaTeX umwandeln
def tex_nach_latex():
        dateiname = dateibasename + '.tex'
        dateiname_alt = dateibasename + '.tex.0'
        if not os.path.exists(dateiname):
                print 'Keine TeX-Datei erzeugt!'
                sys.exit(-1)
        command = 'mv %s %s' % (dateiname, dateiname_alt)
        if os.system(command):
                print 'Umbenennen der TeX-Quelle misslungen'
                sys.exit(-1)
        datalt = open(dateiname_alt, 'r')
        datneu = open(dateiname, 'w')
        datneu.write('\\documentclass{article}\n')
        datneu.write('\\usepackage{a4blatt}\n')
        datneu.write('\\usepackage[latin1]{inputenc}\n')
        datneu.write('\\textheight= 50\\baselineskip\n')
        datneu.write('\\textwidth= 210mm \\advance\\textwidth-2in %\n')
        datneu.write('\\usepackage{musixtex}\n')
        datneu.write('\\pagestyle{empty}\n')
        for i in range(5):
                einzeile = datalt.readline()
                datneu.write(einzeile)
        for i in range(10):
                dummy = datalt.readline()
        datneu.write('\\input musixlyr\n')
        datneu.write('\\input pmx\n')
        datneu.write('\\input musixmad\n')
        datneu.write('\\input mymumacs\n')
        datneu.write('\\smallmusicsize%\n')
        datneu.write('\\begin{document}\n')
        datneu.write('\\tracingstats=2\\relax\n')
        datneu.write('\\hsize=424pt\n')
        datneu.write('\\vsize=740pt\n')
        while 1:
                einzeile = datalt.readline()
                if enthaelt(einzeile, '\\bye'):
                        break
                datneu.write(einzeile)
        datneu.write('\\end{document}\n')
        datalt.close()
        datneu.close()


dateinamen_pruefen()
pmx_machen()
tex_nach_latex()

Reply via email to