@end ignore
+
+@item
+A new @code{\language} command makes it easier to select
+note names languages: instead of the usual
+@code{\include "italiano.ly"} syntax (which is still
+supported and recommended), it is possible to just type
+@code{\language "italiano"}.
+
@item
auotbeaming is now disabled by @code{\cadenzaOn} and enabled by
@code{\cadenzaOff}. Beaming in cadenzas should be indicated manually.
@cindex language, pitch names in other
There are predefined sets of note and accidental names for various
-other languages. To use them, include the language-specific init
-file listed below. For example, to use English note names, add
-@code{@w{\include "english.ly"}} to the input file.
+other languages. These may be selected using the following
+shortcut syntax:
+
+@example
+\language "italiano"
+@end example
+
+@noindent
+for Italian note names, or any other supported language listed below.
+Alternatively, the relevant language-specific file may be directly
+included in the input file; the previous example could equally be
+written as follows:
+
+@example
+\include "italiano.ly"
+@end example
+
+@noindent
+The latter syntax is actually more reliable, in that it allows for more
+complex files to be included: for instance the @file{arabic.ly} file is
+not supported by the @code{@bs{}language} shortcut, and can only be
+processed through the @code{@bs{}include} command.
@warning{Because some other include files (such as @code{@w{predefined-fretboards.ly}})
-use default (Nederlands) note names, the @code{@bs{}include}
-command for the language file should be placed after all other
-LilyPond distribution files.}
+use default (Nederlands) note names, it is recommended to select the note name language
+@emph{after} having included all other LilyPond distribution files.}
The available language files and the note names they define are:
%% this file is alphabetically sorted.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% need SRFI-1 for filter; optargs for lambda*
+%% need SRFI-1 for filter;
+%% optargs for lambda*;
+%% regex for string-match
#(use-modules (srfi srfi-1)
- (ice-9 optargs))
+ (ice-9 optargs)
+ (ice-9 regex))
%% TODO: using define-music-function in a .scm causes crash.
'page-label label))))
+language =
+#(define-music-function (parser location str) (string?)
+ (_i "Select note-names language.")
+ ;; This function is a hack around the old language
+ ;; selection system, using separate .ly files for each
+ ;; supported languages.
+ ;; TODO: re-implement language selection in a cleaner way.
+ (let* ((file-name (string-append (string-downcase! str) ".ly"))
+
+ ; Ugh. ly:gulp-file's "file not found" error message
+ ; won't be much informative in this specific case.
+ (raw-string (ly:gulp-file file-name))
+
+ ; extract the pitchnames alist.
+ (delim-alist (string-match "`\\(.*\\)\\)\\s[ |\n]?\\)" raw-string ))
+ (extract-alist (if delim-alist
+ (match:substring delim-alist)
+ #f)))
+
+ (if extract-alist
+ (begin
+ (if (ly:get-option 'verbose)
+ (ly:message (_ "Using ~a note names...") str))
+ (ly:parser-set-note-names parser (eval-string extract-alist)))
+ (ly:error (_ "Cannot process ~a as a language file.
+Use \\include \"~a\" instead.") file-name file-name))
+ make-void-music))
+
makeClusters =
#(define-music-function (parser location arg) (ly:music?)