]> git.donarmstrong.com Git - lilypond.git/blobdiff - scripts/lilypond-book.py
Run `make grand-replace'.
[lilypond.git] / scripts / lilypond-book.py
index be9fef694a5d81049d92799b4ecb39d18498fbc9..5a6565bc58c6d9a4390e872b72d747e4110e8358 100644 (file)
@@ -51,6 +51,17 @@ ly.require_python_version ()
 program_version = '@TOPLEVEL_VERSION@'
 program_name = os.path.basename (sys.argv[0])
 
+# Check if program_version contains @ characters. This will be the case if
+# the .py file is called directly while building the lilypond documentation.
+# If so, try to check for the env var LILYPOND_VERSION, which is set by our 
+# makefiles and use its value.
+at_re = re.compile (r'@')
+if at_re.match (program_version):
+    if os.environ.has_key('LILYPOND_VERSION'):
+        program_version = os.environ['LILYPOND_VERSION']
+    else:
+        program_version = "unknown"
+
 original_dir = os.getcwd ()
 backend = 'ps'
 
@@ -101,7 +112,7 @@ def warranty ():
 
 %s
 %s
-''' % ( _ ('Copyright (c) %s by') % '2001--2007',
+''' % ( _ ('Copyright (c) %s by') % '2001--2008',
         ' '.join (authors),
         _ ("Distributed under terms of the GNU General Public License."),
         _ ("It comes with NO WARRANTY.")))
@@ -260,6 +271,7 @@ DOCTITLE = 'doctitle'
 TEXIDOC = 'texidoc'
 TEXINFO = 'texinfo'
 VERBATIM = 'verbatim'
+VERSION = 'lilypondversion'
 FONTLOAD = 'fontload'
 FILENAME = 'filename'
 ALT = 'alt'
@@ -317,7 +329,9 @@ snippet_res = {
 
         'verbatim':
        no_match,
-       
+
+        'lilypondversion':
+         no_match,
     }, 
     ##
     HTML: {
@@ -370,6 +384,11 @@ snippet_res = {
           (?s)
           (?P<match>
            (?P<code><pre>\s.*?</pre>\s))''',
+
+        'lilypondversion':
+         r'''(?mx)
+          (?P<match>
+          <lilypondversion\s*/>)''',
     },
 
     ##
@@ -443,6 +462,12 @@ snippet_res = {
            \\begin\s*{verbatim}
             .*?
            \\end\s*{verbatim}))''',
+
+        'lilypondversion':
+         r'''(?smx)
+          (?P<match>
+          \\lilypondversion)[^a-zA-Z]''',
+
     },
 
     ##
@@ -509,6 +534,12 @@ snippet_res = {
            @example
             \s.*?
            @end\s+example\s))''',
+
+        'lilypondversion':
+         r'''(?mx)
+         [^@](?P<match>
+          @lilypondversion)[^a-zA-Z]''',
+
     },
 }
 
@@ -608,6 +639,8 @@ output = {
                <imagedata fileref="%(base)s.png" format="PNG"/></imageobject>''',
     
         VERBATIM: r'''<programlisting>%(verb)s</programlisting>''',
+        
+        VERSION: program_version,
     
         PRINTFILENAME: '<textobject><simpara><ulink url="%(base)s.ly"><filename>%(filename)s</filename></ulink></simpara></textobject>'
     },
@@ -638,6 +671,8 @@ output = {
 
         VERBATIM: r'''<pre>
 %(verb)s</pre>''',
+
+        VERSION: program_version,
     },
 
     ##
@@ -667,6 +702,8 @@ output = {
         VERBATIM: r'''\noindent
 \begin{verbatim}%(verb)s\end{verbatim}''',
 
+        VERSION: program_version,
+
         FILTER: r'''\begin{lilypond}[%(options)s]
 %(code)s
 \end{lilypond}''',
@@ -721,6 +758,8 @@ output = {
 %(verb)s@end verbatim
 ''',
 
+        VERSION: program_version,
+
         ADDVERSION: r'''@example
 \version @w{"@version{}"}
 @end example
@@ -840,6 +879,8 @@ def verbatim_html (s):
 
 ly_var_def_re = re.compile (r'^([a-zA-Z]+)[\t ]*=', re.M)
 ly_comment_re = re.compile (r'(%+[\t ]*)(.*)$', re.M)
+ly_context_id_re = re.compile ('\\\\(?:new|context)\\s+(?:[a-zA-Z]*?(?:Staff\
+(?:Group)?|Voice|FiguredBass|FretBoards|Names|Devnull))\\s+=\\s+"?([a-zA-Z]+)"?\\s+')
 
 def ly_comment_gettext (t, m):
     return m.group (1) + t (m.group (2))
@@ -858,6 +899,10 @@ def verb_ly_gettext (s):
         s = re.sub (r"(?m)(^|[' \\#])%s([^a-zA-Z])" % v,
                     "\\1" + t (v) + "\\2",
                     s)
+    for id in ly_context_id_re.findall (s):
+        s = re.sub (r'(\s+|")%s(\s+|")' % id,
+                    "\\1" + t (id) + "\\2",
+                    s)
     return s
 
 texinfo_lang_re = re.compile ('(?m)^@documentlanguage (.*?)( |$)')
@@ -1440,11 +1485,21 @@ class LilypondFileSnippet (LilypondSnippet):
                 % (name, self.contents))
 
 
+class LilyPondVersionString (Snippet):
+    """A string that does not require extra memory."""
+    def __init__ (self, type, match, format, line_number):
+        Snippet.__init__ (self, type, match, format, line_number)
+
+    def replacement_text (self):
+        return output[self.format][self.type]
+
+
 snippet_type_to_class = {
     'lilypond_file': LilypondFileSnippet,
     'lilypond_block': LilypondSnippet,
     'lilypond': LilypondSnippet,
     'include': IncludeSnippet,
+    'lilypondversion': LilyPondVersionString,
 }
 
 def find_linestarts (s):
@@ -1873,6 +1928,7 @@ def do_file (input_filename, included=False):
             'lilypond_file',
             'include',
             'lilypond',
+            'lilypondversion',
         )
         progress (_ ("Dissecting..."))
         chunks = find_toplevel_snippets (source, global_options.format, snippet_types)