]> git.donarmstrong.com Git - lilypond.git/blobdiff - scripts/build/lys-to-tely.py
Issue 4552 / 4: Remove TeX's Century Schoolbook L settings
[lilypond.git] / scripts / build / lys-to-tely.py
index c4e387547b18563b5fe6ba81e4f05fbf90e61129..cab59d91483783e43cfd6f24fca7d0baaa039135 100644 (file)
@@ -6,6 +6,7 @@ TODO:
 
  * Add @nodes, split at sections?
 
+ * -o --output   listed in help is not implemented?!
 '''
 
 
@@ -13,6 +14,7 @@ import sys
 import os
 import getopt
 import re
+import glob
 
 program_name = 'lys-to-tely'
 
@@ -26,6 +28,8 @@ Options:
  -f, --fragment-options=OPTIONS use OPTIONS as lilypond-book fragment
    options
  -o, --output=NAME              write tely doc to NAME
+ -i, --input-filenames=NAME     read list of files from a file instead of stdin
+ -g, --glob-input=GLOB          a string which will be passed to glob.glob(GLOB)
  -t, --title=TITLE              set tely doc title TITLE
  -a, --author=AUTHOR            set tely author AUTHOR
      --template=TEMPLATE        use TEMPLATE as Texinfo template file,
@@ -39,16 +43,25 @@ def help (text):
     sys.exit (0)
 
 (options, files) = getopt.getopt (sys.argv[1:], 'f:hn:t:',
-                     ['fragment-options=', 'help', 'name=', 'title=', 'author=', 'template='])
+                     ['fragment-options=', 'help', 'name=',
+                     'title=', 'author=', 'template=',
+                     'input-filenames=', 'glob-input='])
 
 name = "ly-doc"
 title = "Ly Doc"
 author = "Han-Wen Nienhuys and Jan Nieuwenhuizen"
+input_filename = ""
+glob_input = ""
 template = '''\input texinfo
+
+@c This file was autogenerated
+@c     from: %s
+@c     by:   %s
+
 @setfilename %%(name)s.info
 @settitle %%(title)s
 
-@documentencoding utf-8
+@documentencoding UTF-8
 @iftex
 @afourpaper
 @end iftex
@@ -67,7 +80,7 @@ template = '''\input texinfo
 %s
 
 @bye
-''' % include_snippets
+''' % (", ".join(files), sys.argv[0], include_snippets)
 
 for opt in options:
     o = opt[0]
@@ -83,6 +96,10 @@ for opt in options:
         title = a
     elif o == '-a' or o == '--author':
         author = a
+    elif o == '-i' or o == '--input-filenames':
+        input_filename = a
+    elif o == '-p' or o == '--glob-input':
+        glob_input = a
     elif o == '-f' or o == '--fragment-options':
         fragment_options = a
     elif o == '--template':
@@ -90,18 +107,19 @@ for opt in options:
     else:
         raise Exception ('unknown option: ' + o)
 
-texi_file_re = re.compile ('.*\.i?te(ly|xi)$')
-html_file_re = re.compile ('.*\.i?htm(l)?$')
-xml_file_re = re.compile ('.*\.i?xml$')
-tex_file_re = re.compile ('.*\.i?(la)?tex$')
+html_file_re = re.compile ('.*\.i?html?$')
+info_file_re = re.compile ('.*\.info$')
 pdf_file_re = re.compile ('.*\.i?pdf$')
+tex_file_re = re.compile ('.*\.i?(la)?tex$')
+texi_file_re = re.compile ('.*\.i?te(ly|xi|xinfo)$')
+xml_file_re = re.compile ('.*\.i?(xm|mx)l$')
 
 def name2line (n):
     if texi_file_re.match (n):
         # We have a texi include file, simply include it:
         s = r"@include %s" % os.path.basename (n)
-    elif (html_file_re.match (n) or pdf_file_re.match (n) or
-          xml_file_re.match (n) or tex_file_re.match (n)):
+    elif (html_file_re.match (n) or info_file_re.match (n)
+          or pdf_file_re.match (n) or tex_file_re.match (n)):
         s = r"""
 @ifhtml
 @html
@@ -110,7 +128,19 @@ def name2line (n):
 @end html
 @end ifhtml
 """ % (os.path.basename (n), os.path.basename (n))
-        return s
+
+    elif (xml_file_re.match (n)):
+        # Assume it's a MusicXML file -> convert, create image etc.
+        s = r"""
+@ifhtml
+@html
+<a name="%s"></a>
+@end html
+@end ifhtml
+
+@musicxmlfile[%s]{%s}
+""" % (os.path.basename (n), fragment_options, n)
+
     else:
         # Assume it's a lilypond file -> create image etc.
         s = r"""
@@ -124,6 +154,11 @@ def name2line (n):
 """ % (os.path.basename (n), fragment_options, n)
     return s
 
+if glob_input:
+    files = glob.glob(glob_input)
+elif input_filename:
+    files = open(input_filename).read().split()
+
 if files:
     dir = os.path.dirname (name) or "."
 # don't strip .tely extension, Documentation/snippets uses .itely
@@ -133,12 +168,10 @@ if files:
     s = "\n".join (map (name2line, files))
     s = template.replace (include_snippets, s, 1)
     f = "%s/%s" % (dir, name)
-    sys.stderr.write ("%s: writing %s..." % (program_name, f))
     h = open (f, "w")
     h.write (s)
     h.close ()
-    sys.stderr.write ('\n')
 else:
     # not Unix philosophy, but hey, at least we notice when
     # we don't distribute any .ly files.
-    sys.stderr.write ("No files specified. Doing nothing")
+    sys.stderr.write ("No files specified. Doing nothing. Use -h to display usage.")