From: Jean-Charles Malahieude Date: Sat, 13 Feb 2016 19:15:40 +0000 (+0100) Subject: Merge branch 'master' of /home/jcharles/GIT/Lily/. into translation X-Git-Tag: release/2.19.37-1~21 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=88a5dbc589b0d0434f8e640467b5ab57d14dc461;hp=03903634a20ae38366df912a41a4c0887a81d2cc;p=lilypond.git Merge branch 'master' of /home/jcharles/GIT/Lily/. into translation --- diff --git a/Documentation/changes.tely b/Documentation/changes.tely index 00e53b5e88..ce41e0aefa 100644 --- a/Documentation/changes.tely +++ b/Documentation/changes.tely @@ -61,6 +61,24 @@ which scares away people. @end ignore +@item +The markup-list-command @code{\table} is now available. +Each column may be aligned differently. +@lilypond[quote,verbatim] +\markuplist { + \override #'(padding . 2) + \table + #'(0 1 0 -1) + { + \underline { center-aligned right-aligned center-aligned left-aligned } + one "1" thousandth "0.001" + eleven "11" hundredth "0.01" + twenty "20" tenth "0.1" + thousand "1000" one "1.0" + } +} +@end lilypond + @item A new page breaking function @code{ly:one-line-auto-height-breaking} places a whole score on a single line and changes the page width diff --git a/Documentation/contributor/quick-start.itexi b/Documentation/contributor/quick-start.itexi index a6da27402b..9a5b12a7ec 100644 --- a/Documentation/contributor/quick-start.itexi +++ b/Documentation/contributor/quick-start.itexi @@ -490,9 +490,9 @@ PATH=~/directory_containing_git-cl:"$@{PATH@}" @unnumberedsubsec Updating @code{git-cl} LilyDev users should make sure that they always have the latest -version of git-cl installed. It is possible that changes may have been -made to git-cl that are not (yet) included in the version of LilyDev has -been installed. +version of git-cl installed. It is possible that changes have been +made to git-cl that are not (yet) included in the version of LilyDev +that you are using. @noindent Using a terminal run the following commands: @@ -510,21 +510,26 @@ This will download and update you to the lastest version of git-cl. @subsubheading Set up login accounts -Because the @code{git-cl} updates two separate websites (Google's -Rietveld Code Review Tool and LilyPond's issue tracker) you @emph{must} -have a valid user login and password to both sites. +Because @code{git-cl} updates two separate websites (Google's Rietveld +Code Review Tool and LilyPond's issue tracker) you @emph{must} have a +valid user account (login and password) for both sites. @noindent -Although that it may appear that you have to use a @q{Google} email -address for the Rietveld Code Review Tool when you sign up, you can -instead select the option @qq{I prefer to use my current email address} -during sign up. +For the Rietveld Code Review Tool you will need a Google account. Note +that a Google account does not require that you have or use a @q{Google} +email address. You can use @emph{any} email address for your Google +account. Just select the option @qq{I prefer to use my current email +address} when you sign up. + +@warning{In order for @code{git-cl} to work, your Google Account +Settings must have the @q{Access for less secure apps} set to +@q{Allowed}. This is normally the default setting.} @noindent -For a user login to the LilyPond issue tracker, please send your -request, preferably using the email address you want to use for your -login, to the LilyPond Developer's mailing list -(@code{lilypond-devel@@gnu.org}). +For the LilyPond issue tracker, please request a user account by sending +an email to the LilyPond Developer's mailing list +(@code{lilypond-devel@@gnu.org}), preferably using the same email +address that you want to use for your user login. @subsubheading Authorising git-cl for the LilyPond issue tracker @@ -533,8 +538,8 @@ it can access the LilyPond issue tracker. @enumerate @item -Once a valid login has been given for the LilyPond issye tracker, go to -the @q{Account settings} and select the @q{OAuth} tab. +Once you have been given a valid login for the LilyPond issue tracker, +go to the @q{Account settings} and select the @q{OAuth} tab. @item Locate the @q{Register New Application} section and enter @code{git-cl} @@ -545,7 +550,7 @@ Click on the @q{Register new application} button. You should now see @q{git-cl} listed under the @q{My Applications} section. @item -Click on the @q{Generate Bearer Token} button. You should now see +Click on the @q{Generate Bearer Token} button. You should now see @q{git-cl} listed under the @q{Authorized Applications} section along with a value for the @q{Bearer Token} entry. This value is used, in the next steps, to allow git-cl to access and update the LilyPond issue @@ -557,24 +562,30 @@ tracker. @enumerate @item -Using a terminal, move to top source directory of the -@code{$LILYPOND_GIT} directory and then run @code{git-cl} with the -@code{config} option: +Using a terminal, move to the top level of the @code{$LILYPOND_GIT} +directory and then run @code{git-cl} with the @code{config} option: @example cd $LILYPOND_GIT git-cl config @end example +@noindent +You will see a series of prompts. For most of them you can simply +accept the default value by responding with a newline (i.e. by pressing +return or enter). + @item -When prompted for the @code{Rietveld server}: +The prompt for the @code{Rietveld server} (the patch review tool), which +defaults to @code{codereview.appspot.com} @example Rietveld server (host[:port]) [codereview.appspot.com]: @end example @item -When prompted for the @code{Allura server} (the LilyPond issue tracker): +The prompt for the @code{Allura server} (the issue tracker), which +defaults to @code{https://sourceforge.net/p/testlilyissues/issues/} @example Allura server [https://sourceforge.net/p/testlilyissues/issues/]: @@ -583,18 +594,18 @@ Allura server [https://sourceforge.net/p/testlilyissues/issues/]: @item When prompted for the @code{Allura bearer token} copy/paste the value generated in the previous steps for -@emph{Authorising git-cl for the LilyPond issue tracker}: +@emph{Authorising git-cl for the LilyPond issue tracker} @smallexample -Allura bearer token (see https://sourceforge.net/auth/oauth/) [fdbfca60801533465480]: +Allura bearer token (see https://sourceforge.net/auth/oauth/): fdbfca60801533465480 @end smallexample -@warning{The above is a @q{fake} bearer token just to illustrate the -example. Do not use this value.} +@warning{The above is a @q{fake} bearer token used just for +illustration. Do not use this value.} @item -Finally, when prompted for the @code{CC list} entry, add the LilyPond -Developer's group email. +Finally, the prompt for the @code{CC list}, which defaults to +@code{lilypond-devel@@gnu.org}, the LilyPond Developer's email list. @example CC list ("x" to clear) [lilypond-devel@@gnu.org]: diff --git a/Documentation/contributor/source-code.itexi b/Documentation/contributor/source-code.itexi index 4a7357878c..719c85e041 100644 --- a/Documentation/contributor/source-code.itexi +++ b/Documentation/contributor/source-code.itexi @@ -1299,88 +1299,9 @@ code review website: @uref{http://codereview.appspot.com/} @end example -@subsubheading @command{git-cl} install - -LilyDev users should skip over these @q{install} instructions. - -@enumerate - -@item -Install @command{git-cl} by entering: - -@example -git clone https://github.com/gperciva/git-cl.git -@end example - -If that command fails for some reason, try this instead: - -@example -git clone git://github.com/gperciva/git-cl.git -@end example - -@item -Add the @file{git-cl/} directory to your PATH, -or create a symbolic link to the @command{git-cl} -and @command{upload.py} scripts in one of your PATH -directories (such as @file{$HOME/bin}). - -In GNU/Linux you can add directories to PATH -by adding this line to a hidden file @file{.bashrc}, -located in your home directory: - -@example -PATH=~/type-here-directory-containing-git-cl:"$@{PATH@}" -@end example - -@end enumerate - -@subsubheading @command{git-cl} configuration - -LilyDev users should perform these @q{configuration} instructions. - -@enumerate -@item -You must own a Google account login; please create one if you do not -have one already. - -@noindent -Note that a google account does not need to be a Gmail account; you can -use @emph{any} email address for your google account when you sign up. - -@warning{In order for @code{git-cl} to work as expected, your Google -Account Settings must have the @q{Access for less secure apps} set to -@q{Allowed}. This is normally the default setting.} - -@item -Move into the top source directory and then configure -@command{git-cl} with the following commands: - -@example -cd $LILYPOND_GIT -git-cl config -@end example - -For the @qq{Rietveld server} question, the default value -(@qq{codereview.appspot.com}) should be accepted by -answering with a newline (CR). - -The @qq{CC list} question should be answered with: - -@example -lilypond-devel@@gnu.org -@end example - -The @qq{Tree status URL} value should be left blank. So should -the @qq{ViewVC URL} value, since it is used by @command{git-cl -dcommit} which is only for repositories which use @command{git -svn} (LilyPond doesn't). - -@end enumerate - -@subsubheading Uploading patch set - -This section assumes that you have already configured the -@command{git-cl} @q{helper-script}. See @ref{git-cl}. +You can upload a patch for review by using our custom @code{git-cl} +@q{helper-script}. This section assumes you have already installed, +updated, and configured @code{git-cl}. See @ref{git-cl}. @warning{Unless you are familiar with branches, only work on one set of changes at once.} @@ -1440,15 +1361,12 @@ git-cl upload @noindent where is the SHA1 ID of the commit to be used as a reference source for the patch. Generally, this will be the -SHA1 ID of origin/master, and in that case the command: +SHA1 ID of origin/master, and in that case you can just use the command: @example git-cl upload origin/master @end example -@noindent -can be used. - @end itemize First you will see a terminal editor where you can edit the diff --git a/scm/define-markup-commands.scm b/scm/define-markup-commands.scm index edd70f216d..d35689d7fe 100644 --- a/scm/define-markup-commands.scm +++ b/scm/define-markup-commands.scm @@ -4713,6 +4713,152 @@ where @var{X} is the number of staff spaces." "Like @code{\\override}, for markup lists." (interpret-markup-list layout (cons (list new-prop) props) args)) +(define-markup-list-command (table layout props column-align lst) + (number-list? markup-list?) + #:properties ((padding 0) + (baseline-skip)) + "@cindex creating a table. + +Returns a table. + +@var{column-align} specifies how each column is aligned, possible values are +-1, 0, 1. The number of elements in @var{column-align} determines how many +columns will be printed. +The entries to print are given by @var{lst}, a markup-list. If needed, the last +row is filled up with @code{point-stencil}s. +Overriding @code{padding} may be used to increase columns horizontal distance. +Overriding @code{baseline-skip} to increase rows vertical distance. +@lilypond[verbatim,quote] +\\markuplist { + \\override #'(padding . 2) + \\table + #'(0 1 0 -1) + { + \\underline { center-aligned right-aligned center-aligned left-aligned } + one \number 1 thousandth \number 0.001 + eleven \number 11 hundredth \number 0.01 + twenty \number 20 tenth \number 0.1 + thousand \number 1000 one \number 1.0 + } +} +@end lilypond +" + + (define (split-lst initial-lst lngth result-lst) + ;; split a list into a list of sublists of length lngth + ;; eg. (split-lst '(1 2 3 4 5 6) 2 '()) + ;; -> ((1 2) (3 4) (5 6)) + (cond ((not (integer? (/ (length initial-lst) lngth))) + (ly:warning + "Can't split list of length ~a into ~a parts, returning empty list" + (length initial-lst) lngth) + '()) + ((null? initial-lst) + (reverse result-lst)) + (else + (split-lst + (drop initial-lst lngth) + lngth + (cons (take initial-lst lngth) result-lst))))) + + (define (dists-list init padding lst) + ;; Returns a list, where each element of `lst' is + ;; added to the sum of the previous elements of `lst' plus padding. + ;; `init' will be the first element of the resulting list. The addition + ;; starts with the values of `init', `padding' and `(car lst)'. + ;; eg. (dists-list 0.01 0.1 '(1 2 3 4))) + ;; -> (0.01 1.11 3.21 6.31 10.41) + (if (or (not (number? init)) + (not (number? padding)) + (not (number-list? lst))) + (begin + (ly:warning + "not fitting argument for `dists-list', return empty lst ") + '()) + (reverse + (fold (lambda (elem rl) (cons (+ elem padding (car rl)) rl)) + (list init) + lst)))) + + (let* (;; get the number of columns + (columns (length column-align)) + (init-stils (interpret-markup-list layout props lst)) + ;; If the given markup-list is the result of a markup-list call, their + ;; length may not be easily predictable, thus we add point-stencils + ;; to fill last row of the table. + (rem (remainder (length init-stils) columns)) + (filled-stils + (if (zero? rem) + init-stils + (append init-stils (make-list (- columns rem) point-stencil)))) + ;; get the stencils in sublists of length `columns' + (stils + (split-lst filled-stils columns '())) + ;; procedure to return stencil-length + ;; If it is nan, return 0 + (lengths-proc + (lambda (m) + (let ((lngth (interval-length (ly:stencil-extent m X)))) + (if (nan? lngth) 0 lngth)))) + ;; get the max width of each column in a list + (columns-max-x-lengths + (map + (lambda (x) + (apply max 0 + (map + lengths-proc + (map (lambda (l) (list-ref l x)) stils)))) + (iota columns))) + ;; create a list of (basic) distances, which each column should + ;; moved, using `dists-list'. Some padding may be added. + (dist-sequence + (dists-list 0 padding columns-max-x-lengths)) + ;; Get all stencils of a row, moved accurately to build columns. + ;; If the items of a column are aligned other than left, we need to + ;; move them to avoid collisions: + ;; center aligned: move all items half the width of the widest item + ;; right aligned: move all items the full width of the widest item. + ;; Added to the default-offset calculated in `dist-sequence'. + ;; `stencils-for-row-proc' needs four arguments: + ;; stil - a stencil + ;; dist - a numerical value as basic offset in X direction + ;; column - a numerical value for the column we're in + ;; x-align - a numerical value how current column should be + ;; aligned, where (-1, 0, 1) means (LEFT, CENTER, RIGHT) + (stencils-for-row-proc + (lambda (stil dist column x-align) + (ly:stencil-translate-axis + (ly:stencil-aligned-to stil X x-align) + (cond ((member x-align '(0 1)) + (let* (;; get the stuff for relevant column + (stuff-for-column + (map + (lambda (s) (list-ref s column)) + stils)) + ;; get length of every column-item + (lengths-for-column + (map lengths-proc stuff-for-column)) + (widest + (apply max 0 lengths-for-column))) + (+ dist (/ widest (if (= x-align 0) 2 1))))) + (else dist)) + X))) + ;; get a list of rows using `ly:stencil-add' on a list of stencils + (rows + (map + (lambda (stil-list) + (apply ly:stencil-add + (map + ;; the procedure creating the stencils: + stencils-for-row-proc + ;; the procedure's args: + stil-list + dist-sequence + (iota columns) + column-align))) + stils))) + (space-lines baseline-skip rows))) + (define-markup-list-command (map-markup-commands layout props compose args) (procedure? markup-list?) "This applies the function @var{compose} to every markup in