diff options
Diffstat (limited to 'Master/texmf-dist/scripts/lilyglyphs/lily-glyph-commands.py')
-rwxr-xr-x | Master/texmf-dist/scripts/lilyglyphs/lily-glyph-commands.py | 165 |
1 files changed, 165 insertions, 0 deletions
diff --git a/Master/texmf-dist/scripts/lilyglyphs/lily-glyph-commands.py b/Master/texmf-dist/scripts/lilyglyphs/lily-glyph-commands.py new file mode 100755 index 00000000000..ad6429338db --- /dev/null +++ b/Master/texmf-dist/scripts/lilyglyphs/lily-glyph-commands.py @@ -0,0 +1,165 @@ +#!/usr/bin/env python + +# %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +# % +# This file is part of the 'lilyglyphs' LaTeX package. % +# ========== % +# % +# https://github.com/openlilylib/lilyglyphs % +# http://www.openlilylib.org/lilyglyphs % +# % +# Copyright 2012-2013 Urs Liska and others, ul@openlilylib.org % +# % +# 'lilyglyphs' is free software: you can redistribute it and/or modify % +# it under the terms of the LaTeX Project Public License, either % +# version 1.3 of this license or (at your option) any later version. % +# You may find the latest version of this license at % +# http://www.latex-project.org/lppl.txt % +# more information on % +# http://latex-project.org/lppl/ % +# and version 1.3 or later is part of all distributions of LaTeX % +# version 2005/12/01 or later. % +# % +# This work has the LPPL maintenance status 'maintained'. % +# The Current Maintainer of this work is Urs Liska (see above). % +# % +# This work consists of the files listed in the file 'manifest.txt' % +# which can be found in the 'license' directory. % +# % +# This program is distributed in the hope that it will be useful, % +# but WITHOUT ANY WARRANTY; without even the implied warranty of % +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. % +# % +# %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +# ######################################################################## +# # +# genGlyphCommands.py # +# # +# generate commands based on Emmentaler glyphs # +# # +# ######################################################################## + +import os, sys, argparse + +# import common library, depending on its location +scr_path, scr_name = os.path.split(sys.argv[0]) +if not 'lilyglyphs_common.py' in os.listdir(scr_path): + # the library is not in the same dir as the script + # first check if we're in a CTAN archive directory structure + libpath = os.path.normpath(os.path.join(scr_path, '..', 'lib')) + if 'lilyglyphs_common.py' in os.listdir(libpath): + # we're in a CTAN archive + sys.path.append(libpath) + else: + # we're not in a CTAN archive + # so we assume we're in a TeX installation. + import subprocess + try: + # use TeX's kpsewhich tool to locate the library file + # in the TeX installation + lib = subprocess.check_output(["kpsewhich", + "--progname=lilyglyphs", + "--format=texmfscripts", + "lilyglyphs_common.py"]) + except: + print '\nCommon library \"lilyglyphs_common.py\" not found.' + print 'Please refer to the manual for possible solutions.' + sys.exit(2) + # add the found path to Python's search path + sys.path.append(os.path.split(lib)[0]) + +import lilyglyphs_common as lg + +def main(input_file): + """Do the main work of the script""" + + in_dir, in_file = os.path.split(input_file) + os.chdir(in_dir) + + # load and parse input file + lg.read_input_file(in_file) + read_entries() + + # generate LaTeX commands and save them to output file + # (will be a .tex sibling of the input file) + lg.generate_latex_commands() + out_file, out_ext = os.path.splitext(input_file) + lg.write_latex_file(os.path.join(os.getcwd(), out_file + '.tex')) + +def read_entries(): + """Parse the input file and fill a dictionary""" + entry = {} + def reset_entry(): + """Set all members of the dict empty, + because not all are present in each entry.""" + entry['cmd'] = '' + entry['element'] = '' + entry['type'] = 'glyphname' + entry['comment'] = [] + entry['raise'] = '' + entry['scale'] = '' + + reset_entry() + scale = '' + rais = '' + for line in lg.definitions_file: + line = line.strip() + # empty line = end of entry + if not len(line): + # skip if cmd and glyph haven't been filled both + if not (entry['cmd'] and entry['element']): + print 'Skip malformed entry \'' + entry['cmd'] + '\'. Please check input file' + reset_entry() + else: + print 'Read entry \'' + entry['cmd'] + '\'' + lg.in_cmds[entry['cmd']] = {} + lg.in_cmds[entry['cmd']]['element'] = entry['element'] + lg.in_cmds[entry['cmd']]['type'] = entry['type'] + lg.in_cmds[entry['cmd']]['comment'] = entry['comment'] + if scale: + lg.in_cmds[entry['cmd']]['scale'] = scale + if rais: + lg.in_cmds[entry['cmd']]['raise'] = rais + reset_entry() + # ignore Python or LaTeX style comments + elif line[0] in '#%': + continue + else: + # add element to the entry + keyval = line.split('=') + if keyval[0] == 'scale': + scale = keyval[1] + elif keyval[0] == 'raise': + rais = keyval[1] + if keyval[0] == 'comment': + entry['comment'] = [keyval[1]] + else: + entry[keyval[0].strip()] = keyval[1].strip() + + +def usage(): + print 'genGlyphCommands.py' + print 'is part of the lilyglyphs package' + print '' + print 'Usage:' + print 'Pass the name (without path) of an input definitions file' + print '(this has to be located in the /stash_new_commands directory.' + print 'Please refer to the manual (documentation/lilyglyphs.pdf).' + +# #################################### +# Finally launch the program +if __name__ == "__main__": + # parse command line arguments + parser = argparse.ArgumentParser( + description='Generate LaTeX commands using Emmentaler glyphs', + parents=[lg.common_arguments]) + parser.add_argument('i', + type=lg.is_file, + metavar='INPUT', + help='File with command templates.') + args = parser.parse_args() + + # if we have exactly one existing file + # join its components and run the program + main(os.path.join(os.getcwd(), vars(args)['i'])) |