X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=scripts%2Flilypond-book.py;h=5a6565bc58c6d9a4390e872b72d747e4110e8358;hb=5b4b0d6e9a197e8f9eb085b7c2ad78b8be3e5cfc;hp=1f925c13bde7094a954d579f3e64c35cc4bc0c08;hpb=7ffb44d7dbcd7bcf66ab0b0ef64515af416f3709;p=lilypond.git diff --git a/scripts/lilypond-book.py b/scripts/lilypond-book.py index 1f925c13bd..5a6565bc58 100644 --- a/scripts/lilypond-book.py +++ b/scripts/lilypond-book.py @@ -45,11 +45,23 @@ import fontextract import langdefs global _;_=ly._ +ly.require_python_version () # Lilylib globals. 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' @@ -100,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."))) @@ -205,6 +217,12 @@ def get_option_parser (): lilypond_binary = os.path.join ('@bindir@', 'lilypond') +# If we are called with full path, try to use lilypond binary +# installed in the same path; this is needed in GUB binaries, where +# @bindir is always different from the installed binary path. +if 'bindir' in globals () and bindir: + lilypond_binary = os.path.join (bindir, 'lilypond') + # Only use installed binary when we are installed too. if '@bindir@' == ('@' + 'bindir@') or not os.path.exists (lilypond_binary): lilypond_binary = 'lilypond' @@ -253,6 +271,7 @@ DOCTITLE = 'doctitle' TEXIDOC = 'texidoc' TEXINFO = 'texinfo' VERBATIM = 'verbatim' +VERSION = 'lilypondversion' FONTLOAD = 'fontload' FILENAME = 'filename' ALT = 'alt' @@ -310,7 +329,9 @@ snippet_res = { 'verbatim': no_match, - + + 'lilypondversion': + no_match, }, ## HTML: { @@ -363,6 +384,11 @@ snippet_res = { (?s) (?P (?P
\s.*?
\s))''', + + 'lilypondversion': + r'''(?mx) + (?P + )''', }, ## @@ -436,6 +462,12 @@ snippet_res = { \\begin\s*{verbatim} .*? \\end\s*{verbatim}))''', + + 'lilypondversion': + r'''(?smx) + (?P + \\lilypondversion)[^a-zA-Z]''', + }, ## @@ -502,6 +534,12 @@ snippet_res = { @example \s.*? @end\s+example\s))''', + + 'lilypondversion': + r'''(?mx) + [^@](?P + @lilypondversion)[^a-zA-Z]''', + }, } @@ -601,6 +639,8 @@ output = { ''', VERBATIM: r'''%(verb)s''', + + VERSION: program_version, PRINTFILENAME: '%(filename)s' }, @@ -631,6 +671,8 @@ output = { VERBATIM: r'''
 %(verb)s
''', + + VERSION: program_version, }, ## @@ -660,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}''', @@ -714,6 +758,8 @@ output = { %(verb)s@end verbatim ''', + VERSION: program_version, + ADDVERSION: r'''@example \version @w{"@version{}"} @end example @@ -833,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)) @@ -851,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 (.*?)( |$)') @@ -1433,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): @@ -1595,7 +1657,7 @@ def process_snippets (cmd, snippets, 'snippet-names-%d.ly' % checksum) file (name, 'wb').write (contents) - system_in_directory (' '.join ([cmd, name]), + system_in_directory (' '.join ([cmd, ly.mkarg (name)]), lily_output_dir) @@ -1866,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)