]> git.donarmstrong.com Git - lilypond.git/commitdiff
Merge branch 'topic/master-translation' of /home/lilycvs/git/lily/ into topic/master...
authorJohn Mandereau <john.mandereau@gmail.com>
Mon, 2 Jul 2007 23:15:38 +0000 (01:15 +0200)
committerJohn Mandereau <john.mandereau@gmail.com>
Mon, 2 Jul 2007 23:15:38 +0000 (01:15 +0200)
* 'topic/master-translation' of /home/lilycvs/git/lily/:
  Improve and correct documentation strings.
  Remove another empty file.
  Tag empty files as such.
  Remove empty files.
  Add some full stops at end of sentences.

Documentation/GNUmakefile
Documentation/fr/user/basic-notation.itely
Documentation/fr/user/working.itely
Documentation/user/basic-notation.itely
Documentation/user/lilypond-book.itely
buildscripts/update-snippets.py [new file with mode: 0644]

index 84466887e07a1552f4e3dd56525fe101b94904ff..3041be6fdf04e7754ed31013f0dfef9c216c1689 100644 (file)
@@ -30,6 +30,9 @@ txt-to-html:
 po-update:
        make -C po po-update
 
+all-translation-update: po-update
+       $(foreach lang, $(LANGS), make ISOLANG=$(lang) skeleton-update snippet-update &&) true
+
 ifneq ($(ISOLANG),)
 new-lang:
        @if (( $$(file -b $(ISOLANG)) == directory )) 2>/dev/null; \
@@ -52,4 +55,7 @@ check-translation:
 skeleton-update:
        $(PYTHON) $(buildscript-dir)/texi-langutils.py -d $(outdir) -b "UNTRANSLATED NODE: IGNORE ME" -l $(ISOLANG) --skeleton ../user/lilypond.tely
        $(PYTHON) $(buildscript-dir)/texi-skeleton-update.py $(ISOLANG)/user $(outdir)
+
+snippet-update:
+       $(PYTHON) $(buildscript-dir)/update-snippets.py user $(ISOLANG)/user '*.itely'
 endif
index 71711ffbf5b25977fa9362cc0458f052659b40b7..0927beebff15389cc804179c4fc219692f059cc0 100644 (file)
@@ -1264,10 +1264,10 @@ croche, en définissant @code{merge-differently-headed}
 
 @lilypond[quote,ragged-right,fragment,relative=2,verbatim]
 \new Voice << {
- c8 c4.
- \override Staff.NoteCollision
-   #'merge-differently-headed = ##t
-c8 c4.  } \\ { c2 c2 } >>
 c8 c4.
 \override Staff.NoteCollision
+    #'merge-differently-headed = ##t
+c8 c4. } \\ { c2 c2 } >>
 @end lilypond
 
 LilyPond empile aussi les silences à l'opposé des
@@ -1923,13 +1923,30 @@ s'agit de l'assemblage par défaut.
 
 @seealso
 
-
 Pour les barres de mesure au début de chaque système, voir
 @internalsref{SystemStartBar}, @internalsref{SystemStartBrace}, et
 @internalsref{SystemStartBracket}.  Dans chaque contexte, seul l'un de
 ces styles est utilisé, et c'est la propriété
 @internalsref{systemStartDelimiter} qui détermine lequel.
 
+@commonprop
+
+Les accolades et crochets délimitant les systèmes peuvent être imbriqués
+en profondeur,
+
+@lilypond[quote,ragged-right,verbatim]
+\new StaffGroup
+\relative <<
+  \set StaffGroup.systemStartDelimiterHierarchy
+    = #'(SystemStartSquare (SystemStartBracket a (SystemStartSquare b)) d)
+  \new Staff { c1 }
+  \new Staff { c1 }
+  \new Staff { c1 }
+  \new Staff { c1 }
+  \new Staff { c1 }
+>>
+@end lilypond
+
 
 @node Staff symbol
 @subsection Staff symbol
@@ -2005,6 +2022,47 @@ On peut écrire plusieurs voix de façon entremêlée :
 >>
 @end lilypond
 
+Ceci fonctionne bien avec la musique pour piano :
+
+@lilypond[quote,verbatim]
+music = {
+  \key c \major
+  \time 4/4
+  \parallelMusic #'(voiceA voiceB voiceC voiceD) {
+    % Bar 1
+    r8  g'16[ c''] e''[ g' c'' e''] r8  g'16[ c''] e''[ g' c''
+e''] |
+    c'2                                 c'2 |
+    r8  a16[ d'] f'[ a d' f']       r8  a16[ d'] f'[ a d' f'] |
+    c2                                  c2 |
+
+    % Bar 2
+    a'8 b'      c'' d''    e'' f''    g'' a'' |
+    d'4         d'         d'         d' |
+    c16 d e f   d e f g    e f g a    f g a b |
+    a,4         a,4        a,4        a,4 |
+
+    % Bar 3 ...
+  }
+}
+
+\score {
+  \new PianoStaff <<
+    \music
+    \new Staff <<
+      \voiceA \\
+      \voiceB
+    >>
+    \new Staff {
+      \clef bass
+      <<
+        \voiceC \\
+        \voiceD
+      >>
+    }
+  >>
+}
+@end lilypond
 
 
 @node Connecting notes
@@ -2097,7 +2155,7 @@ r <c e g>\repeatTie
 @commonprop
 
 
-Les liaisons de tenues servent parfois à rendre un accord arpégé. Dans
+Les liaisons de tenue servent parfois à rendre un accord arpégé. Dans
 ce cas, les notes liées ne sont pas toutes l'une contre l'autre. Il
 faut alors définir comme vraie (@q{t} pour @q{true}) la propriété
 @code{tieWaitForNote}.  Cette même méthode peut servir, par exemple, à
@@ -2110,10 +2168,22 @@ lier un trémolo à un accord :
 e8~ c~ a~ f~ <e' c a f>2
 @end lilypond
 
+Il est possible de graver manuellement les liaisons de tenue, en
+changeant la propriété @code{tie-configuration}.  Pour chaque paire, le
+premier nombre indique la distance à la portée, en espaces de portée, et
+le deuxième nombre indique la direction --- 1 pour haut, @minus{}1 pour
+bas.
 
-@refcommands
+@lilypond[fragment,verbatim,relative=1,ragged-right,quote]
+<c e g>2~ <c e g> |
+\override TieColumn #'tie-configuration =
+  #'((0.0 . 1) (-2.0 . 1) (-4.0 . 1))
+<c e g>~ <c e g> |
+@end lilypond
 
 
+@refcommands
+
 @funindex \tieUp
 @code{\tieUp},
 @funindex \tieDown
@@ -2135,10 +2205,8 @@ Dans ce même manuel : @ref{Automatic note splitting}.
 Référence du programme : @internalsref{Tie}.
 
 
-
 @refbugs
 
-
 Un changement de portée, lorsqu'une liaison de tenue est active, ne
 peut produire une liaison oblique.
 
@@ -3331,9 +3399,9 @@ Il est possible de créer des répétitions avec une levée.
 
 @lilypond[quote,ragged-right,fragment,verbatim,relative=2]
 \new Staff {
-  \partial 4
-  \repeat volta 4 { e | c2 d2 | e2 f2 | }
-  \alternative { { g4 g g } { a | a a a a | b2. } }
+  \partial 4 e |
+  \repeat volta 4 { c2 d2 | e2 f2 | }
+  \alternative { { g4 g g e } { a a a a | b2. } }
 }
 @end lilypond
 
index 4dbb96d24d344e47a7e6bbdfa7bcad7dab1d1dcc..5b035614c13abc16bbc726c076a492d6e38b202d 100644 (file)
@@ -194,9 +194,9 @@ Jusqu'à maintenant, vous avez vu ce type de code :
 @lilypond[quote,verbatim,ragged-right]
 hornNotes = \relative c'' { c4 b dis c }
 \score {
- {
-   \hornNotes
- }
 {
+    \hornNotes
 }
 }
 @end lilypond
 
index 0a67b9ea1492bb48ecbe00ff3f80779ca1bc22d5..96ade6e37ccd12b23c0ed6d45e537bad3039d9c1 100644 (file)
@@ -1873,7 +1873,7 @@ in every context, and that type is determined by the property
 System start delimiters may be deeply nested,
 
 @lilypond[quote,ragged-right,verbatim]
-\new StaffGroup 
+\new StaffGroup
 \relative <<
   \set StaffGroup.systemStartDelimiterHierarchy
     = #'(SystemStartSquare (SystemStartBracket a (SystemStartSquare b)) d)
index 653a854b05ebf3dfc83c32cb4bd9f36048fe6e77..f424e502a4da9df2c4028322b341178061868e7e 100644 (file)
@@ -27,7 +27,7 @@ TODO: cleanup
 If you want to add pictures of music to a document, you can simply do it
 the way you would do with other types of pictures.  The pictures are
 created separately, yielding PostScript output or PNG images, and those
-are included into a La@TeX{} or HTML document.
+are included into a @LaTeX{} or HTML document.
 
 @command{lilypond-book} provides a way to automate this process: This
 program extracts snippets of music from your document, runs
@@ -35,7 +35,7 @@ program extracts snippets of music from your document, runs
 substituted for the music.  The line width and font size definitions for
 the music are adjusted to match the layout of your document.
 
-This procedure may be applied to La@TeX{}, HTML, Texinfo or DocBook documents.
+This procedure may be applied to @LaTeX{}, HTML, Texinfo or DocBook documents.
 
 @menu
 * An example of a musicological document::  
@@ -56,7 +56,7 @@ This procedure may be applied to La@TeX{}, HTML, Texinfo or DocBook documents.
 @section An example of a musicological document
 
 @cindex musicology
-@cindex La@TeX{}, music in
+@cindex @LaTeX{}, music in
 @cindex HTML, music in
 @cindex Texinfo, music in
 @cindex DocBook, music in
@@ -64,11 +64,11 @@ Some texts contain music examples.  These texts are musicological
 treatises, songbooks, or manuals like this.  Such texts can be made by
 hand, simply by importing a PostScript figure into the word processor.
 However, there is an automated procedure to reduce the amount of work
-involved in HTML, La@TeX{}, Texinfo and DocBook documents.
+involved in HTML, @LaTeX{}, Texinfo and DocBook documents.
 
 A script called @code{lilypond-book} will extract the music fragments,
 format them, and put back the resulting notation.  Here we show a small
-example for use with La@TeX{}.  The example also contains explanatory
+example for use with @LaTeX{}.  The example also contains explanatory
 text, so we will not comment on it further.
 
 @quotation
@@ -135,7 +135,7 @@ the files in a separate subdirectory @file{dir}.
 Running dvips will produce many warnings about fonts.  They are not
 harmful; please ignore them.
 
-Finally the result of the La@TeX{} example shown above.@footnote{This
+Finally the result of the @LaTeX{} example shown above.@footnote{This
 tutorial is processed with Texinfo, so the example gives slightly
 different results in layout.}  This finishes the tutorial section.
 
@@ -173,16 +173,16 @@ Larger examples can be put into a separate file, and introduced with
 
 
 @node Integrating LaTeX and music
-@section Integrating La@TeX{} and music
+@section Integrating @LaTeX{} and music
 
-La@TeX{} is the de-facto standard for publishing layouts in the exact
+@LaTeX{} is the de-facto standard for publishing layouts in the exact
 sciences.  It is built on top of the @TeX{} typesetting engine,
 providing the best typography available anywhere.
 
 See
 @uref{http://@/www@/.ctan@/.org/@/tex@/-archive/@/info/@/lshort/@/english/,
-@emph{The Not So Short Introduction to La@TeX{}}} for an overview on how
-to use La@TeX{}.
+@emph{The Not So Short Introduction to @LaTeX{}}} for an overview on how
+to use @LaTeX{}.
 
 Music is entered using
 
@@ -207,7 +207,7 @@ or
 @end example
 
 Running @command{lilypond-book} yields a file that can be further
-processed with La@TeX{}.
+processed with @LaTeX{}.
 
 We show some examples here.  The lilypond environment
 
@@ -243,13 +243,13 @@ Currently, you cannot include @code{@{} or @code{@}} within
 The default line width of the music will be adjusted by examining the
 commands in the document preamble, the part of the document before
 @code{\begin@{document@}}.  The @command{lilypond-book} command sends
-these to La@TeX{} to find out how wide the text is.  The line width for
+these to @LaTeX{} to find out how wide the text is.  The line width for
 the music fragments is then adjusted to the text width.  Note that this
 heuristic algorithm can fail easily; in such cases it is necessary to
 use the @code{line-width} music fragment option.
 
 @cindex titling and lilypond-book
-@funindex \header in La@TeX{} documents
+@funindex \header in @LaTeX{} documents
 
 Each snippet will call the following macros if they have been defined by
 the user:
@@ -299,7 +299,7 @@ kpsewhich feta20.tex
 @cindex dvips
 @cindex invoking dvips
 
-For printing the La@TeX{} document you need a DVI to PostScript
+For printing the @LaTeX{} document you need a DVI to PostScript
 translator like @command{dvips}.  To use @command{dvips} to produce
 a PostScript file, add the following options to the @command{dvips}
 command line:
@@ -327,7 +327,7 @@ as if they continued after the end of the fragment.  This can be done by
 breaking the staff and suppressing inclusion of the rest of the lilypond
 output.
 
-In La@TeX{}, define @code{\betweenLilyPondSystem} in such a way that
+In @LaTeX{}, define @code{\betweenLilyPondSystem} in such a way that
 inclusion of other systems is terminated once the required number of
 systems are included.  Since @code{\betweenLilypondSystem} is first
 called @b{after} the first system, including only the first system
@@ -352,7 +352,7 @@ the number of systems you want in the output,
 @end example
 
 Remember that the definition of @code{\betweenLilyPondSystem} is
-effective until @TeX{} quits the current group (such as the La@TeX{}
+effective until @TeX{} quits the current group (such as the @LaTeX{}
 environment) or is overridden by another definition (which is, in
 most cases, for the rest of the document).  To reset your
 definition, write
@@ -443,7 +443,7 @@ produces
 
 @lilypond[fragment,staffsize=11]{<c' e' g'>}
 
-Contrary to La@TeX{}, @code{@@lilypond@{...@}} does not generate an
+Contrary to @LaTeX{}, @code{@@lilypond@{...@}} does not generate an
 in-line image.  It always gets a paragraph of its own.
 
 When using the Texinfo output format, @command{lilypond-book} also
@@ -549,7 +549,7 @@ For HTML (HTML Help, JavaHelp etc.) generation you can use the official DocBook
 In the following, a @q{LilyPond command} refers to any command described
 in the previous sections which is handled by @command{lilypond-book} to
 produce a music snippet.  For simplicity, LilyPond commands are only
-shown in La@TeX{} syntax.
+shown in @LaTeX{} syntax.
 
 Note that the option string is parsed from left to right; if an option
 occurs multiple times, the last one is taken.
@@ -816,7 +816,7 @@ Print version information.
 @refbugs
 
 The Texinfo command @code{@@pagesizes} is not interpreted.  Similarly,
-La@TeX{} commands that change margins and line widths after the preamble
+@LaTeX{} commands that change margins and line widths after the preamble
 are ignored.
 
 Only the first @code{\score} of a LilyPond block is processed.
@@ -837,11 +837,11 @@ output format based on the input filename's extension.
 @item
 @item @file{.html} @tab HTML
 @item @file{.itely} @tab Texinfo
-@item @file{.latex} @tab La@TeX{}
-@item @file{.lytex} @tab La@TeX{}
+@item @file{.latex} @tab @LaTeX{}
+@item @file{.lytex} @tab @LaTeX{}
 @item @file{.lyxml} @tab DocBook
 @item @file{.tely} @tab Texinfo
-@item @file{.tex} @tab La@TeX{}
+@item @file{.tex} @tab @LaTeX{}
 @item @file{.texi} @tab Texinfo
 @item @file{.texinfo} @tab Texinfo
 @item @file{.xml} @tab HTML
diff --git a/buildscripts/update-snippets.py b/buildscripts/update-snippets.py
new file mode 100644 (file)
index 0000000..d5503c0
--- /dev/null
@@ -0,0 +1,102 @@
+#!@PYTHON@
+# update-snippets.py
+
+# USAGE:  update-snippets.py REFERENCE-DIR TARGET-DIR FILES
+#
+# update ly snippets in TARGET-DIR/FILES with snippets from REFERENCE-DIR/FILES
+#
+# More precisely, each existing FILE in TARGET-DIR is matched to the FILE in
+# REFERENCE-DIR (it the latter does not exist, a warning is given).
+#
+# Shell wildcards expansion is performed on FILES.
+# This script currently supports Texinfo format.
+# Ly snippets preceded with a line containing '@c KEEP LY' in TARGET-DIR/FILES
+# will not be updated.
+# An error occurs if REFERENCE-DIR/FILE and TARGET-DIR/FILE do not have the
+# same snippets count.
+
+import sys
+import os
+import glob
+import re
+
+print "update-snippets.py"
+
+comment_re = re.compile (r'(?<!@)(@c(?:omment)? .*?\n|^@ignore\n.*?\n@end ignore\n)', re.M | re.S)
+snippet_re = re.compile (r'(@lilypond(?:file)?(?:\[.*?\])?(?:\{.+?\}|(?:.|\n)+?@end lilypond))', re.M)
+
+
+def snippet_split (l):
+    r = []
+    for s in [s for s in l if s]:
+        if s.startswith ('@c ') or s.startswith ('@ignore\n') or s.startswith ('@comment '):
+            r.append(s)
+        else:
+            r += [t for t in snippet_re.split (s) if t]
+    return r
+
+def count_snippet (l):
+    k = 0
+    for s in l:
+        if s.startswith ('@lilypond'):
+            k += 1
+    return k
+
+def find_next_snippet (l, k):
+    while not l[k].startswith ('@lilypond'):
+        k += 1
+    return k
+
+exit_code = 0
+
+def update_exit_code (code):
+    global exit_code
+    exit_code = max (code, exit_code)
+
+ref_dir, target_dir = sys.argv [1:3]
+file_patterns = sys.argv[3:]
+
+total_snippet_count = 0
+changed_snippets_count = 0
+
+for pattern in file_patterns:
+    files = glob.glob (os.path.join (target_dir, pattern))
+    for file in files:
+        ref_file = os.path.join (ref_dir, os.path.basename (file))
+        if not os.path.isfile (ref_file):
+            sys.stderr.write ("Warning: %s: no such file.\nReference file for %s not found.\n" % (ref_file, file))
+            continue
+        f = open (file, 'r')
+        target_source = comment_re.split (f.read ())
+        f.close ()
+        if reduce (lambda x, y: x or y, ['-- SKELETON FILE --' in s for s in target_source]):
+            sys.stderr.write ("Skipping skeleton file %s\n" % file)
+            continue
+        g = open (ref_file, 'r')
+        ref_source = comment_re.split (g.read ())
+        target_source = snippet_split (target_source)
+        ref_source = snippet_split (ref_source)
+        if '' in target_source or '' in ref_source:
+            raise "AAAAARGH: unuseful empty string"
+        snippet_count = count_snippet (target_source)
+        if not snippet_count == count_snippet (ref_source):
+            update_exit_code (1)
+            sys.stderr.write ("Error: %s and %s have different snippet counts.\n\
+Update translation by at least adding a @lilypond block where necessary, then rerun this script.\n" % (ref_file, file))
+            continue
+        total_snippet_count += snippet_count
+        c = 0
+        k = -1
+        for j in range (len (target_source)):
+            if target_source[j].startswith ('@lilypond'):
+                k = find_next_snippet (ref_source, k+1)
+                if j > 0 and (not target_source[j-1].startswith ('@c KEEP LY')) and target_source[j] != ref_source[k]:
+                    target_source[j] = ref_source[k]
+                    c += 1
+                    changed_snippets_count += 1
+        f = open (file, 'w')
+        f.write (''.join (target_source))
+        sys.stderr.write ('%s: %d/%d snippets updated\n' % (file, c, snippet_count))
+
+sys.stderr.write ('\nTotal: %d snippets, %d updated snippets.\n' % (total_snippet_count, changed_snippets_count))
+sys.exit (exit_code)