]> git.donarmstrong.com Git - lilypond.git/commitdiff
Clean up translated docs generation
authorJohn Mandereau <john.mandereau@gmail.com>
Sat, 16 Feb 2008 21:33:01 +0000 (22:33 +0100)
committerJohn Mandereau <john.mandereau@gmail.com>
Sat, 16 Feb 2008 21:33:01 +0000 (22:33 +0100)
* sort makefile stuff into approriate make/doclang-{vars,rules,targets}.make
* make lilypond-book look for snippets already compiled in directories
given with -I option
* use -I flags for the whole lilypond-book/makeinfo/texi2pdf chain, which
makes building faster than before
* as a consequence, get rid of symlinks from Documentation/user/out-www to
out-www
* add support for big-page HTML manuals (not yet used)

* also update deprecated Python code in lilypond-book (string functions
and string exceptions)

make/doclang-rules.make
make/doclang-targets.make
make/doclang-vars.make
scripts/lilypond-book.py

index ea30561d839798e1ef284fb70adc009fda12db16..f7b95d447869b7b64dd8485cd790c121cb8e8fbf 100644 (file)
@@ -1 +1,15 @@
-#empty
+# cancel the rule that generates .n[o lilypond images t]exi files
+$(outdir)/%.nexi: $(ITELY_FILES) $(ITEXI_FILES)
+
+$(outdir)/%/index.html: $(outdir)/%.texi
+       mkdir -p $(dir $@)
+       -$(MAKEINFO) -P $(outdir) --output=$(outdir)/$* --css-include=$(top-src-dir)/Documentation/texinfo.css --html $<
+
+$(outdir)/%-big-page.html: $(outdir)/%.texi
+       -$(MAKEINFO) -P $(outdir) --output=$@ --css-include=$(top-src-dir)/Documentation/texinfo.css --html --no-split --no-headers $< 
+
+$(outdir)/%.pdftexi: $(outdir)/%.texi doc-po
+       $(PYTHON) $(buildscript-dir)/texi-gettext.py $(buildscript-dir) $(top-build-dir)/Documentation/po/$(outdir) $(ISOLANG) $<
+
+$(outdir)/%.pdf: $(outdir)/%.pdftexi
+       cd $(outdir); texi2pdf $(TEXI2PDF_FLAGS) $(TEXINFO_PAPERSIZE_OPTION) $(notdir $*).pdftexi
index 496c1d9de411efa855706702a6e3e1e272159d78..cddd58615e0891b243b6c9e6934d287ddbd46d1e 100644 (file)
@@ -1,53 +1,11 @@
-# one assumes depth and ISOLANG are defined
-
-OUT_ITEXI_FILES = $(ITELY_FILES:%.itely=$(outdir)/%.itexi)
-
-TEXINFO_PAPERSIZE_OPTION= $(if $(findstring $(PAPERSIZE),a4),,-t @afourpaper)
-
-LILYPOND_BOOK_INCLUDES += \
-  -I$(top-src-dir)/Documentation/user \
-  -I$(top-build-dir)/Documentation/user/$(outdir)
-
 default:
 
-$(outdir)/%.nexi: $(ITELY_FILES) $(ITEXI_FILES)
-
-MAKEINFO_FLAGS += --force
-
-$(outdir)/%/index.html: $(outdir)/%.nexi $(outdir)/user-ln doc-po
-       mkdir -p $(dir $@)
-       -$(MAKEINFO) $(MAKEINFO_FLAGS) -I$(outdir) --output=$(outdir)/$* --css-include=$(top-src-dir)/Documentation/texinfo.css --html $<
-
-# we don't make the big page until the whole manual is translated
-# if this happens, we'll have to define local-WWW differently for this language
-#$(outdir)/lilypond.html: $(outdir)/lilypond.nexi
-#      -$(MAKEINFO) $(MAKEINFO_FLAGS) -I$(outdir) --output=$@ --css-include=$(top-src-dir)/Documentation/texinfo.css --html --no-split --no-headers $< 
-
-$(outdir)/%.pdf: $(outdir)/%.texi $(outdir)/user-ln doc-po
-       $(PYTHON) $(buildscript-dir)/texi-gettext.py $(buildscript-dir) $(top-build-dir)/Documentation/po/$(outdir) $(ISOLANG) $<
-       cd $(outdir); texi2pdf --batch $(TEXINFO_PAPERSIZE_OPTION) $(notdir $*).pdftexi
-
-TELY_FILES = $(call src-wildcard,*.tely)
-DEEP_HTML_FILES = $(TELY_FILES:%.tely=$(outdir)/%/index.html)
-PDF_FILES = $(TELY_FILES:%.tely=$(outdir)/%.pdf)
-
-local-WWW: $(DEEP_HTML_FILES) $(PDF_FILES)
+# BIG_PAGE_HTML_FILES is defined differently in each language makefile
+local-WWW: $(DEEP_HTML_FILES) $(PDF_FILES) doc-po $(BIG_PAGE_HTML_FILES)
        find $(outdir) -name '*.html' | xargs grep -L 'UNTRANSLATED NODE: IGNORE ME' | xargs $(PYTHON) $(buildscript-dir)/html-gettext.py $(buildscript-dir) $(top-build-dir)/Documentation/po/$(outdir) $(ISOLANG)
        find $(outdir) -name '*.html' | xargs grep -L --label="" 'UNTRANSLATED NODE: IGNORE ME' | sed 's!$(outdir)/!!g' | xargs $(PYTHON) $(buildscript-dir)/mass-link.py --prepend-suffix .$(ISOLANG) hard $(outdir) $(top-build-dir)/Documentation/user/$(outdir) $(TELY_FILES:%.tely=%.pdf)
-       find $(outdir) \( -name 'lily-??????????.png' -o -name 'lily-??????????.ly' \) -a -not -type l | sed 's!$(outdir)/!!g' | xargs $(PYTHON) $(buildscript-dir)/mass-link.py hard $(outdir) $(top-build-dir)/Documentation/user/$(outdir)
-
-LINKED_PNGS = henle-flat-gray.png baer-flat-gray.png lily-flat-bw.png
+       find $(outdir) \( -name 'lily-??????????.png' -o -name 'lily-??????????.ly' \) | sed 's!$(outdir)/!!g' | xargs $(PYTHON) $(buildscript-dir)/mass-link.py hard $(outdir) $(top-build-dir)/Documentation/user/$(outdir)
 
-# makeinfo MUST have PNGs in cwd for info images to work
-# symlinking PNGs...
-# texi2pdf -I flag confuses pdfetex with .aux and other files
-# from English manual
-# symlinking lily-*...
-$(outdir)/user-ln: $(top-build-dir)/Documentation/user/$(outdir)
-       $(PYTHON) $(buildscript-dir)/mass-link.py symbolic $(top-build-dir)/Documentation/user/$(outdir) $(outdir) 'lily-*.pdf' 'lily-*.tex' 'lily-*.texi' 'lily-*.ly' 'lily-*.txt' 'lily-*.png' 'henle-flat-gray.*' 'baer-flat-gray.*' 'lily-flat-bw.*' 'context-example.*'
-       mkdir -p $(outdir)/lilypond
-       cd $(outdir)/lilypond && $(foreach i, $(LINKED_PNGS), ln -sf ../../$(depth)/Documentation/user/$(i) $(i) &&) true
-       touch -mr $(top-build-dir)/Documentation/user/$(outdir) $@
 
 local-WWW-clean: deep-WWW-clean
 
@@ -58,4 +16,4 @@ web-clean: clean
        $(MAKE) out=www local-WWW-clean
 
 doc-po:
-       $(MAKE) -C $(depth)/Documentation/po messages
+       $(MAKE) -C $(depth)/Documentation/po out=www messages
index ea30561d839798e1ef284fb70adc009fda12db16..96c8bec42da70c33dc97c063fb7eca7c22bf5837 100644 (file)
@@ -1 +1,21 @@
-#empty
+# ISOLANG must be defined
+
+LANGS = $(shell $(PYTHON) $(buildscript-dir)/langdefs.py)
+
+OUT_ITEXI_FILES = $(ITELY_FILES:%.itely=$(outdir)/%.itexi)
+
+DOCUMENTATION_INCLUDES = \
+  -I $(top-src-dir)/Documentation/user \
+  -I $(top-build-dir)/Documentation/user/$(outdir)
+DOCUMENTATION_INCLUDES += $(foreach lang, $(LANGS), -I $(top-build-dir)/Documentation/$(lang)/user/$(outdir))
+
+LILYPOND_BOOK_INCLUDES += $(DOCUMENTATION_INCLUDES)
+MAKEINFO_FLAGS += --force --enable-encoding $(DOCUMENTATION_INCLUDES)
+MAKEINFO = LANG= $(MAKEINFO_PROGRAM) $(MAKEINFO_FLAGS)
+
+TEXI2PDF_FLAGS += --batch --tidy
+TEXI2PDF_FLAGS += $(DOCUMENTATION_INCLUDES)
+
+TELY_FILES = $(call src-wildcard,*.tely)
+DEEP_HTML_FILES = $(TELY_FILES:%.tely=$(outdir)/%/index.html)
+PDF_FILES = $(TELY_FILES:%.tely=$(outdir)/%.pdf)
index 21d6f44c676098967ebf755e3eb62ef1d8ab9817..23db86898596e024d27ebf73901e40ae26725240 100644 (file)
@@ -29,13 +29,13 @@ TODO:
 '''
 
 import stat
-import string
 import tempfile
 import commands
 import os
 import sys
 import re
 import md5
+import operator
 
 """
 @relocate-preamble@
@@ -69,7 +69,7 @@ authors = ('Jan Nieuwenhuizen <janneke@gnu.org>',
 ################################################################
 def exit (i):
     if global_options.verbose:
-        raise _ ('Exiting (%d)...') % i
+        raise Exception (_ ('Exiting (%d)...') % i)
     else:
         sys.exit (i)
 
@@ -88,7 +88,7 @@ def ps_page_count (ps_name):
     header = open (ps_name).read (1024)
     m = re.search ('\n%%Pages: ([0-9]+)', header)
     if m:
-        return string.atoi (m.group (1))
+        return int (m.group (1))
     return 0
 
 def warranty ():
@@ -779,14 +779,15 @@ def classic_lilypond_book_compatibility (key, value):
 
     return (None, None)
 
-def find_file (name):
+def find_file (name, raise_error=True):
     for i in global_options.include_path:
         full = os.path.join (i, name)
         if os.path.exists (full):
             return full
         
-    error (_ ("file not found: %s") % name + '\n')
-    exit (1)
+    if raise_error:
+        error (_ ("file not found: %s") % name + '\n')
+        exit (1)
     return ''
 
 def verbatim_html (s):
@@ -1006,7 +1007,7 @@ class Lilypond_snippet (Snippet):
                 option_list.append (key)
             else:
                 option_list.append (key + '=' + value)
-        option_string = string.join (option_list, ',')
+        option_string = ','.join (option_list)
 
         compose_dict = {}
         compose_types = [NOTES, PREAMBLE, LAYOUT, PAPER]
@@ -1062,14 +1063,10 @@ class Lilypond_snippet (Snippet):
         elif relative > 0:
             relative_quotes += "'" * relative
 
-        paper_string = string.join (compose_dict[PAPER],
-                      '\n  ') % override
-        layout_string = string.join (compose_dict[LAYOUT],
-                      '\n  ') % override
-        notes_string = string.join (compose_dict[NOTES],
-                      '\n  ') % vars ()
-        preamble_string = string.join (compose_dict[PREAMBLE],
-                       '\n  ') % override
+        paper_string = '\n  '.join (compose_dict[PAPER]) % override
+        layout_string = '\n  '.join (compose_dict[LAYOUT]) % override
+        notes_string = '\n  '.join (compose_dict[NOTES]) % vars ()
+        preamble_string = '\n  '.join (compose_dict[PREAMBLE]) % override
         padding_mm = global_options.padding_mm
         font_dump_setting = ''
         if FONTLOAD in self.option_dict:
@@ -1105,10 +1102,9 @@ class Lilypond_snippet (Snippet):
              
     def ly_is_outdated (self):
         base = self.basename ()
-        ly_file = base + '.ly'
-        tex_file = base + '.tex'
-        eps_file = base + '.eps'
-        systems_file = base + '-systems.tex'
+        ly_file = find_file (base + '.ly', raise_error=False)
+        tex_file = find_file (base + '.tex', raise_error=False)
+        systems_file = find_file (base + '-systems.tex', raise_error=False)
 
         if (os.path.exists (ly_file)
             and os.path.exists (systems_file)
@@ -1123,33 +1119,26 @@ class Lilypond_snippet (Snippet):
 
     def png_is_outdated (self):
         base = self.basename ()
-        # FIXME: refactor stupid OK stuff
-        ok = not self.ly_is_outdated ()
-        if global_options.format in (HTML, TEXINFO):
-            ok = ok and os.path.exists (base + '.eps')
-
-            page_count = 0
-            if ok:
-                page_count = ps_page_count (base + '.eps')
-
-            if page_count <= 1:
-                ok = ok and os.path.exists (base + '.png')
-             
-            elif page_count > 1:
-                for a in range (1, page_count + 1):
-                        ok = ok and os.path.exists (base + '-page%d.png' % a)
-                
-        return not ok
+        eps_file = find_file (base + '.eps', raise_error=False)
+        png_file = find_file (base + '.png', raise_error=False)
+        if not self.ly_is_outdated () and global_options.format in (HTML, TEXINFO):
+            if os.path.exists (eps_file):
+                page_count = ps_page_count (eps_file)
+                if page_count <= 1:
+                    return not os.path.exists (png_file)
+                else:
+                    return not reduce (operator.or_,
+                                       [find_file (base + '-page%d.png' % a, raise_error=False)
+                                        for a in range (1, page_count + 1)])
+        return True
     
     def texstr_is_outdated (self):
         if backend == 'ps':
             return 0
 
-        # FIXME: refactor stupid OK stuff
         base = self.basename ()
-        ok = self.ly_is_outdated ()
-        ok = ok and (os.path.exists (base + '.texstr'))
-        return not ok
+        return not (self.ly_is_outdated ()
+                    and find_file (base + '.texstr', raise_error=False))
 
     def filter_text (self):
         code = self.substring ('code')
@@ -1483,16 +1472,16 @@ def process_snippets (cmd, ly_snippets, texstr_snippets, png_snippets):
     # the --process=CMD switch is a bad idea
     # it is too generic for lilypond-book.
     if texstr_names:
-        my_system (string.join ([cmd, '--backend texstr',
-                                 'snippet-map.ly'] + texstr_names))
+        my_system (' '.join ([cmd, '--backend texstr',
+                              'snippet-map.ly'] + texstr_names))
         for l in texstr_names:
             my_system ('latex %s.texstr' % l)
 
     if ly_names:
         open ('snippet-names', 'wb').write ('\n'.join (['snippet-map.ly']
-                                                      + ly_names))
+                                                       + ly_names))
         
-        my_system (string.join ([cmd, 'snippet-names']))
+        my_system (' '.join ([cmd, 'snippet-names']))
 
 
 LATEX_INSPECTION_DOCUMENT = r'''
@@ -1648,7 +1637,7 @@ def write_if_updated (file_name, lines):
     try:
         f = open (file_name)
         oldstr = f.read ()
-        new_str = string.join (lines, '')
+        new_str = ''.join (lines)
         if oldstr == new_str:
             progress (_ ("%s is up to date.") % file_name)
             progress ('\n')
@@ -1837,7 +1826,7 @@ def main ():
                                       + ' --formats=%s --backend eps ' % formats)
 
     if global_options.process_cmd:
-        global_options.process_cmd += string.join ([(' -I %s' % ly.mkarg (p))
+        global_options.process_cmd += ' '.join ([(' -I %s' % ly.mkarg (p))
                               for p in global_options.include_path])
 
     if global_options.format in (TEXINFO, LATEX):