Engine for LaTeX songbooks http://www.patacrep.com
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

83 lines
2.3 KiB

#!/usr/bin/python
# -*- coding: utf-8 -*-
#
"""Command line tool to compile songbooks using the songbook library."""
import argparse
import json
import locale
import logging
import os.path
import textwrap
import sys
from songbook.build import buildsongbook
from songbook import __VERSION__
from songbook import errors
def argument_parser(args):
"""Parse argumnts"""
parser = argparse.ArgumentParser(description="A song book compiler")
parser.add_argument('--version', help='Show version', action='version',
version='%(prog)s ' + __VERSION__)
parser.add_argument('book', nargs=1, help=textwrap.dedent("""\
Book to compile.
"""))
parser.add_argument('--datadir', '-d', nargs=1, type=str, action='store',
help=textwrap.dedent("""\
Data location. Expected (not necessarily required)
subdirectories are 'songs', 'img', 'latex', 'templates'.
"""))
options = parser.parse_args(args)
return options
def main():
"""Main function:"""
# Logging configuration
logging.basicConfig(name = 'songbook')
logger = logging.getLogger('songbook')
# set script locale to match user's
try:
locale.setlocale(locale.LC_ALL, '')
except locale.Error as error:
# Locale is not installed on user's system, or wrongly configured.
sys.stderr.write("Locale error: {}\n".format(error.message))
options = argument_parser(sys.argv[1:])
songbook_path = options.book[0]
basename = os.path.basename(songbook_path)[:-3]
with open(songbook_path) as songbook_file:
songbook = json.load(songbook_file)
if options.datadir is not None:
songbook['datadir'] = options.datadir[0]
elif 'datadir' in songbook.keys():
if not os.path.isabs(songbook['datadir']):
songbook['datadir'] = os.path.join(os.path.dirname(songbook_path),
songbook['datadir']
)
else:
songbook['datadir'] = os.path.dirname(songbook_path)
try:
buildsongbook(songbook, basename, interactive = True, logger = logger)
except errors.SongbookError as error:
logger.error(error)
sys.exit(1)
sys.exit(0)
if __name__ == '__main__':
main()