view abcfirstline.py @ 956:c52d237f99d5

Encourage A4 to page break before a tune. This enourages page breaks to happen before tune start, and not between the tune image and any following wording. Also move the vfill to the tune start. That way, if the break does not happen, the vfill will, and the following tune will be spaced down to the bottom of the page if it's the only other tune on the page. Otherwise everything tends to clump at the top of the page.
author Jim Hague <jim.hague@acm.org>
date Wed, 07 Aug 2019 00:01:44 +0100
parents 1b79867b4f35
children
line wrap: on
line source

#!/usr/bin/env python3
#
# Write out a modified version of a .abc file with just the data
# to print the first line of the music only.
#

import sys

def process(inf):
    continued = False
    print("X:1")
    for line in inf:
        line = line.strip()
        # If it is empty or starts "%", ignore it.
        if len(line) == 0 or line[0] == "%":
            continue

        # Is it a header line? I.e. does it start LETTER (or +) COLON?
        # If so, output only ones we need.
        start = line[:2]
        if len(start) > 1 and start[1] == ":" and (start[0].isalpha() or start[0] == '+'):
            if start[0] in ["M", "K", "L"]:
                print(line)
        # Output line. If it is a continuation, output at most one
        # continuation.
        else:
            print(line)
            if continued or line[-1] != "\\":
                break
            else:
                continued = True

if len(sys.argv) > 1:
    for arg in sys.argv[1:]:
        try:
            inf = open(arg, "r")
            process(inf)
        finally:
            inf.close()
else:
    process(sys.stdin)