+2003-08-28 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+
+ * python/lilylib.py (system): remove errorlog files.
+
2003-08-28 Heikki Junes <hjunes@cc.hut.fi>
* lilypond.words: add \new and new graces. Add dynamics to menus
2003-08-28 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+ * lily/molecule.cc (align_to): idem.
+
+ * lily/molecule-scheme.cc: ly_align_to_x takes continuous dir argument.
+
+
+ * ly/grace-init.ly (stopAcciaccaturaMusic): correct misspelling of
+ accacciatura everywhere.
+
+ * VERSION (PACKAGE_NAME): released 1.9.2
+
* GNUmakefile.in (EXTRA_DIST_FILES): dist lilypond.vim too.
* scm/document-markup.scm (markup-doc-node): sort markup function
@chapter New features in 1.9 since 1.8
@itemize
+@item
+Markup text (ie. general text formatting) may now be used for lyrics too.
@item
Two new commands for grace notes have been added, @code{\accacciatura}
\accacciatura g8 f4
@end example
-Both reflect the traditional meanings of accacciatura and appogiatura,
+Both reflect the traditional meanings of acciaccatura and appogiatura,
and both insert insert a slur from the first grace note to the main
note.
When the file is processed by @code{ly2dvi}, the title and composer
specified are printed above the music. The `tagline' is a short line
-printed at bottom of the last page, which normally says ``Lily was
-here, version @dots{}''. In the example above, it is replaced by the
+printed at bottom of the last page, which normally says ``Engraved
+by LilyPond, version @dots{}''. In the example above, it is replaced by the
line ``small is beautiful''.
Normally, the @code{\header} is put at the top of the file. However,
PACKAGE_NAME=LilyPond
MAJOR_VERSION=1
MINOR_VERSION=9
-PATCH_LEVEL=2
+PATCH_LEVEL=3
MY_PATCH_LEVEL=
# Use the above to send patches: MY_PATCH_LEVEL is always empty for a
Real minimum);
void add_molecule (Molecule const &m);
void translate (Offset);
-
- /**
- align D direction in axis A.
-
- If D == CENTER, then move the dimension (A).center () to (0,0)
-
- Else, move so dimension (A)[D] == 0.0
-
- */
- void align_to (Axis a, Direction d);
+ void align_to (Axis a, Real x);
void translate_axis (Real,Axis);
Interval extent (Axis) const;
return fontify_atom (unsmob_metrics (met), f);
}
LY_DEFINE(ly_align_to_x,"ly:molecule-align-to!", 3, 0, 0, (SCM mol, SCM axis, SCM dir),
- "Align @var{mol} using its own extents.")
+
+ "Align @var{mol} using its own extents. @var{dir} is a number -1, 1 are "
+ " left and right respectively. Other values are interpolated (so 0 means "
+ " the center. ")
{
SCM_ASSERT_TYPE(unsmob_molecule (mol), mol, SCM_ARG1, __FUNCTION__, "molecule");
SCM_ASSERT_TYPE(ly_axis_p (axis), axis, SCM_ARG2, __FUNCTION__, "axis");
- SCM_ASSERT_TYPE(ly_dir_p (dir), dir, SCM_ARG3, __FUNCTION__, "dir");
+ SCM_ASSERT_TYPE(gh_number_p (dir), dir, SCM_ARG3, __FUNCTION__, "number");
- unsmob_molecule (mol)->align_to ((Axis)gh_scm2int (axis), Direction (gh_scm2int (dir)));
+ unsmob_molecule (mol)->align_to ((Axis)gh_scm2int (axis),
+ gh_scm2double (dir));
return SCM_UNDEFINED;
}
void
-Molecule::align_to (Axis a, Direction d)
+Molecule::align_to (Axis a, Real x)
{
if (empty_b())
return ;
Interval i (extent (a));
- Real r = (d == CENTER) ? i.center () : i[d];
- translate_axis (-r, a);
+ translate_axis (-i.linear_combination (x), a);
}
/*
static Keyword_ent the_key_tab[]={
- {"accacciatura", ACCACCIATURA},
+ {"acciaccatura", ACCIACATURA},
{"accepts", ACCEPTS},
{"addlyrics", ADDLYRICS},
{"alias", ALIAS},
%token FIGURES FIGURE_OPEN FIGURE_CLOSE
%token FIGURE_BRACKET_CLOSE FIGURE_BRACKET_OPEN
%token GRACE
-%token ACCACCIATURA
+%token ACCIACATURA
%token APPOGGIATURA
%token GROBDESCRIPTIONS
%token HEADER
grace_head:
GRACE { $$ = scm_makfrom0str ("Grace"); }
- | ACCACCIATURA { $$ = scm_makfrom0str ("Accacciatura"); }
+ | ACCIACATURA { $$ = scm_makfrom0str ("Acciaccatura"); }
| APPOGGIATURA { $$ = scm_makfrom0str ("Appoggiatura"); }
;
s1*0)
}
-startAccacciaturaMusic = \notes {
+startAcciaccaturaMusic = \notes {
\context Voice \applycontext #set-start-grace-properties
s1*0(
\property Voice.Stem \override #'stroke-style = #"grace"
}
-stopAccacciaturaMusic = \notes {
+stopAcciaccaturaMusic = \notes {
\property Voice.Stem \revert #'stroke-style
\context Voice \applycontext #set-stop-grace-properties
s1*0)
signal = 0x0f & status
exit_status = status >> 8
+ print 'errorlog', error_log_file
if status:
error (_ ("`%s\' failed (%d)") % (cmd, exit_status))
progress ('\n')
if error_log_file:
+ print 'unlinking errorlog', error_log_file
os.unlink (error_log_file)
+ print 'reachin end', error_log_file
return output
Exit status of CMD '''
name = command_name (cmd)
-
+ error_log_file = ''
+
if __main__.verbose_p:
progress_p = 1
progress (_ ("Invoking `%s\'") % cmd)
redirect = ''
if not progress_p:
- redirect = ' 1>/dev/null 2>' + error_log (name)
+ error_log_file = error_log (name)
+ redirect = ' 1>/dev/null 2>' + error_log_file
elif __main__.pseudo_filter_p:
redirect = ' 1>/dev/null'
-
+
status = os.system (cmd + redirect)
signal = 0x0f & status
exit_status = status >> 8
warning (msg + ' ' + _ ("(ignored)"))
else:
error (msg)
- if not progress_p:
+ if not progress_p and error_log_file:
error (_ ("The error log is as follows:"))
- sys.stderr.write (open (error_log (name)).read ())
+ sys.stderr.write (error_log_file).read ()
+ if error_log_file:
+ os.unlink (error_log_file)
exit (status)
+ if error_log_file:
+ os.unlink (error_log_file)
progress ('\n')
return status
mols)
))
+(define-public (right-align-markup grob props . rest)
+ (let* ((m (interpret-markup grob props (car rest))))
+ (ly:molecule-align-to! m X RIGHT)
+ m))
+
+(define-public (halign-markup grob props . rest)
+ "Set horizontal alignment. Syntax: haling A MARKUP. A=-1 is LEFT,
+A=1 is right, values in between vary alignment accordingly."
+ (let* ((m (interpret-markup grob props (cadr rest))))
+ (ly:molecule-align-to! m X (car rest))
+ m))
+
+(define-public (left-align-markup grob props . rest)
+ (let* ((m (interpret-markup grob props (car rest))))
+ (ly:molecule-align-to! m X RIGHT)
+ m))
+
(define-public (musicglyph-markup grob props . rest)
(ly:find-glyph-by-name
(ly:get-font grob (cons '((font-family . music)) props))
)
(define-public (hbracket-markup grob props . rest)
+ "Horizontal brackets around its single argument. Syntax \\hbracket MARKUP."
+
(let*
(
(th 0.1) ;; todo: take from GROB.
))
(define-public (bracket-markup grob props . rest)
+ "Vertical brackets around its single argument. Syntax \\bracket MARKUP."
(let*
(
(th 0.1) ;; todo: take from GROB.
(cons center-markup (list markup-list?))
(cons line-markup (list markup-list?))
+ (cons right-align-markup (list markup?))
+ (cons left-align-markup (list markup?))
+ (cons halign-markup (list number? markup?))
+
(cons combine-markup (list markup? markup?))
(cons simple-markup (list string?))
(cons musicglyph-markup (list scheme?))
conversions.append (((1,9,2), conv, """\newcontext -> \new"""))
+if 1:
+ def conv (str):
+ str = re.sub ('accacciatura',
+ 'acciaccatura', str)
+ return str
+
+ conversions.append (((1,9,3), conv, """\acciaccatura misspelling"""))
+
################################
# END OF CONVERSIONS
################################