]> git.donarmstrong.com Git - lilypond.git/blobdiff - buildscripts/lys-to-tely.py
Change Snippets compilation
[lilypond.git] / buildscripts / lys-to-tely.py
index 57b0f907961542adce11785ba4daf093489b7d23..e2df5a6bc3fbb2f282d755bd54f17a7f1fa8d8d3 100644 (file)
 #!@PYTHON@
 
+
+'''
+TODO:
+
+ * Add @nodes, split at sections?
+
+'''
+
+
 import sys
 import os
-import string 
 import getopt
 
 program_name = 'lys-to-tely'
 
+include_snippets = '@lysnippets'
+fragment_options = 'printfilename,texidoc'
+
 def help ():
-       sys.stdout.write (r"""Usage: lys-to-tely [OPTION]... LY-FILE...
+    sys.stdout.write (r"""Usage: %(program_name)s [OPTIONS]... LY-FILE...
 Construct tely doc from LY-FILEs.
 
 Options:
-  -h, --help                print this help
-  -o,output=NAME            write tely doc to NAME
-  -t,title=TITLE            set tely tely doc title TITLE
-""")
-       sys.exit (0)
+ -h, --help                     print this help
+ -f, --fragment-options=OPTIONS use OPTIONS as lilypond-book fragment
+   options
+ -o, --output=NAME              write tely doc to NAME
+ -t, --title=TITLE              set tely doc title TITLE
+     --template=TEMPLATE        use TEMPLATE as Texinfo template file,
+   instead of standard template; TEMPLATE should contain a command
+   '%(include_snippets)s' to tell where to insert LY-FILEs.  When this
+   option is used, NAME and TITLE are ignored.
+""" % vars ())
+    sys.exit (0)
 
-(options, files) = getopt.getopt(sys.argv[1:], 'hn:t:', [
-       'help', 'name=', 'title='])
+(options, files) = getopt.getopt (sys.argv[1:], 'f:hn:t:',
+                     ['fragment-options=', 'help', 'name=', 'title=', 'template='])
 
-name="ly-doc"
-title="Ly Doc"
-for opt in options:
-       o = opt[0]
-       a = opt[1]
-       if o == '-h' or o == '--help':
-               help ()
-       elif o == '-n' or o == '--name':
-               name = a
-       elif o == '-t' or o == '--title':
-               title = a
-       else:
-               raise 'unknown opt ', o
-
-def strip_extension (f, ext):
-       (p, e) = os.path.splitext (f)
-       if e == ext:
-               e = ''
-       return p + e
+name = "ly-doc"
+title = "Ly Doc"
+template = '''\input texinfo
+@setfilename %%(name)s.info
+@settitle %%(name)s
 
-if files:
-       dir = os.path.dirname (name)
-       if not dir:
-               dir = "."
-       name = strip_extension (os.path.basename (name), ".tely")
+@documentencoding utf-8
+@iftex
+@afourpaper
+@end iftex
 
-       s = '''\input texinfo
-@setfilename %s.info
-@settitle %s
+@finalout @c we do not want black boxes.
 
 @c fool ls-latex
 @ignore
 @author Han-Wen Nienhuys and Jan Nieuwenhuizen
-@title %s
+@title %%(title)s
 @end ignore
 
 @node Top, , , (dir)
-''' % (name, title, title)
-
-       def name2line (n):
-               # UGR
-               if string.find (n, '+') >= 0:
-                       s = "@lilypondfile[printfilename]{%s}" % n
-               else:
-                       s = "@lilypondfile[printfilename,verbatim]{%s}" % n
-               return s
-
-       s = s + string.join (map (lambda x: name2line (x), files), "\n")
-       s = s + '\n@bye\n'
-       f = "%s/%s.tely" % (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")
 
+%s
+
+@bye
+''' % include_snippets
+
+for opt in options:
+    o = opt[0]
+    a = opt[1]
+    if o == '-h' or o == '--help':
+        help ()
+    elif o == '-n' or o == '--name':
+        name = a
+    elif o == '-t' or o == '--title':
+        title = a
+    elif o == '-f' or o == '--fragment-options':
+        fragment_options = a
+    elif o == '--template':
+        template = open (a, 'r').read ()
+    else:
+        raise Exception ('unknown option: ' + o)
+
+def name2line (n):
+    s = r"""
+@ifhtml
+@html
+<a name="%s"></a>
+@end html
+@end ifhtml
+
+@lilypondfile[%s]{%s}
+""" % (os.path.basename (n), fragment_options, n)
+    return s
+
+if files:
+    dir = os.path.dirname (name) or "."
+# don't strip .tely extension, input/lsr uses .itely
+    name = os.path.basename (name)
+    template = template % vars ()
+
+    files.sort ()
+    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")