-25/Nov/97 LilyPond 0.1.35 1
+25/Nov/97 LilyPond 0.1.36 1
A: See F<lilyponddefs.tex>, it has some comments.
+
+
+=head2 Development
+
+Q: Could you implement feature XXXX? It is really easy, just extend
+the syntax to allow YYYY!
+
+A: If it is reasonable, I'll add XXXX to the TODO list. In general
+finding a cute syntax (such as YYYY) isn't very hard. The complicated
+issue how to adapt the internals to do XXXX. The parser is really a
+simple front end to the complicated internals.
+
+Q: Can I join in on LilyPond development? How do I do this?
+
+A: LilyPond development is open for anyone who wants to join. We try
+to use a Bazaar style development model for LilyPond, see
+http://locke.ccil.org/~esr/writing/cathedral.html. This means:
+frequent releases, everyone can send in a patch or do suggestions and
+all development discussions are public.
+
+To be precise, discussions take place on the gnu-music-discuss mailing
+list, which is open for subscription to everyone.
+
+
+Q: I want to implement XXXX! Should I do this?
+
+A: There might be better ways of doing XXXX, so it's a good thing to
+ask about this before you start hacking. If you want to keep in touch
+with current developments, you should subscribe to the mailing list
+(see the "links" section of the documentation).
+
+
+Q: I want to implement XXXX! How should I do this?
+
+A: Your best bet of getting me to include code, is to present it as a
+"fait accompli", ie., to send me a patch.
+
+
+
Q: How do I learn the C++ code?
A: The entry point is in C<main()>. Good luck. :-)
A: Yes.
-Q: Could you implement feature XXXX? It is really easy, just extend
-the syntax to allow YYYY!
-
-A: If it is reasonable, I'll add XXXX to the TODO list. In general
-finding a cute syntax (such as YYYY) isn't very hard. The complicated
-issue how to adapt the internals to do XXXX. The parser is really a
-simple front end to the complicated internals.
-
-
-Q: I want to implement XXXX! Should I do this?
-
-A: There might be better ways of doing XXXX, so it's a good thing to
-ask about this before you start hacking. If you want to keep in touch
-with current developments, you should subscribe to the mailing list
-(see the "links" section of the documentation).
-
-
-Q: I want to implement XXXX! How should I do this?
-
-A: Your best bet of getting me to include code, is to present it as a
-"fait accompli", ie., to send me a patch.
-
Q: Why do I need g++ >= 2.7?
=back
-=head1 DISCLAIMER & COPYING POLICY
+=head1 DISCLAIMER AND COPYING POLICY
GNU LilyPond is copyright 1996, 1997 by its authors. GNU LilyPond is
distributed under the terms of the GNU General Public License. GNU LilyPond
=head1 BUGS
+Lots of them. See F<TODO> and F<BUGS>
+
=head1 SEE ALSO
=over 4
An enormous collection of music related URLs
-=item http://art.ucsc.edu/faculty/cope/home
-
-See New Scientist, aug 9 1997.
-
=back
=head2 Ftp
Ted Ross. ``Teach yourself the art of music engraving and processing''
(3rd edition). Hansen House, Miami Beach, FLorida.
-[This is about engraving, i.e. the real thing with metal plates, but
-it also contains directions on good typesetting. It includes some good
-spacing tables HWN]
+[This is about engraving, i.e. the real thing with metal plates. It
+contains directions on good typesetting, but the sections reproduction
+technicalities and history are interesting. Especially the section on
+Music Typewriters is amusing HWN]
Gardner Read. ``Modern Rhythmic Notation.'' Indiana University Press,
1978.
OSU-CISRC-3/88-TR10, Department of Computer and Information Science,
The Ohio State University, 1988.
-[Rules on formatting music formulated for use in computers. Mainly distilled
-from [Ross] HWN]
+[Rules on formatting music formulated for use in computers. Mainly
+distilled from [Ross] HWN]
=head2 Notation with computers
-2/Dec/97 LilyPond 0.1.35 1
+2/Dec/97 LilyPond 0.1.36 1
-2/Dec/97 LilyPond 0.1.35 2
+2/Dec/97 LilyPond 0.1.36 2
-2/Dec/97 LilyPond 0.1.35 3
+2/Dec/97 LilyPond 0.1.36 3
-2/Dec/97 LilyPond 0.1.35 4
+2/Dec/97 LilyPond 0.1.36 4
-2/Dec/97 LilyPond 0.1.35 5
+2/Dec/97 LilyPond 0.1.36 5
-2/Dec/97 LilyPond 0.1.35 6
+2/Dec/97 LilyPond 0.1.36 6
+pl 36
+ - bf: notehead collisions
+ - bf: dot y-position
+ - use Item::break_priority_i_ for horizontal alignment of breakables.
+ (it still sucks)
+ - junk some derivation checks, junk Normal_*_bar
+ - FlowerLib fixes.
+ - twinkle fixes.
+ - feta: flag/clefspacing
+
+*******
+dec 5
pl 35
- naming: lily-init iso symbol.ly
- mf braces
TOPLEVEL_MAJOR_VERSION = 0
TOPLEVEL_MINOR_VERSION = 1
-TOPLEVEL_PATCH_LEVEL = 35
+TOPLEVEL_PATCH_LEVEL = 36
TOPLEVEL_MY_PATCH_LEVEL =
# use the above to send patches, always empty for released version:
rm -vf *.aux *.log `grep -li "^% Creator: GNU LilyPond" *.out` *.orig *~
rm -vf `grep -li "Creator: mi2mu" *.midi.ly`
rm -vf `grep -li "Creator: GNU LilyPond" *.midi`
+rm -vf `grep -li "Creator: ly2dvi" *.tex`
rm -vf `find -name 'core'`
rm -vf `find -name *.orig`
rm -vf `find -name *.rej`
# Original LaTeX file made by Mats Bengtsson, 17/8 1997
#
-VERSION="0.3"
+VERSION="0.3.hwn1"
+IDENTIFICATION="lytodvi.sh $VERSION"
+NOW=`date`
+echo "$IDENTIFICATION" 1>&2
-echo "lytodvi.sh $VERSION" 1>&2
-
# NEWS
+# 0.3.hwn1
+# - add "Creator: " line to output
+#
# 0.3
# - multiple input files to make score from several files
# (extra files assumed to be Lilypond output)
fi
fi
#
-# Find textwidth
+# Find textwidth
#
if [ "$IF" != "" ]
then
# Write LaTeX file
#
cat << EOF > $LF
+% Creator: $IDENTIFICATION
+% Automatically generated from $IF, $NOW
+
\documentclass$PAPER{article}
\nonstopmode
$LLNG
self.texfile = Indentable_file(texfile_nm, 'w')
- headerstr = '%% generated automatically by %s\n%% on %s\n%% Do not edit' % \
+ headerstr = '%% Creator: %s\n%% Automatically generated on %s\n%% Do not edit' % \
(program_id(), today_str())
self.lyfile.write(headerstr)
#
-EXTRA_DISTFILES = README.debian TODO changelog control copyright\
+EXTRA_DISTFILES = README.debian TODO changelog control copyright \
info.ex menu.ex postinst postinst.old.sh postrm preinst rules watch
-* Move lytodvi.sh to a proper place. It is currently placed in
+* Move ly2dvi.sh to a proper place. It is currently placed in
/usr/doc/lilypond. (1997-11-25)
+lilypond (0.1.35-1) unstable; urgency=low
+
+ * New upstream release
+
+ -- Anthony Fok <foka@debian.org> Fri, 5 Dec 1997 21:06:31 -0700
+
+lilypond (0.1.34-1) unstable; urgency=low
+
+ * New upstream release
+
+ -- Anthony Fok <foka@debian.org> Thu, 4 Dec 1997 19:42:22 -0700
+
lilypond (0.1.33-1) unstable; urgency=low
* New upstream release
Wed, 6 Aug 1997 04:30:28 -0600
It was downloaded from
- ftp://pcnov095.win.tue.nl/pub/lilypond/development/lilypond-0.1.33.tar.gz
+ ftp://pcnov095.win.tue.nl/pub/lilypond/development/lilypond-0.1.35.tar.gz
It is also available from:
ftp://alpha.gnu.org/gnu/
check_specialmap();
print " $pkg_name configuration completed.\n";
-print " Please read /usr/doc/$package/README.debian to get started.\n";
+print " Please read /usr/doc/$package/README.Debian to get started.\n";
ln -fs ../../../doc/lilypond debian/tmp/usr/lib/texmf/doc/lilypond
dh_installdocs BUGS TODO NEWS DEDICATION ANNOUNCE README \
Documentation/out/*.text Documentation/*.doc \
- Documentation/lelie_logo.xpm bin/lytodvi.sh
+ Documentation/lelie_logo.xpm bin/ly2dvi.sh
dh_installexamples input/*.ly input/*.tex
# dh_installmenu
# dh_installcron
+pl 32
+ - Assoc::clear
+ - bf: Assoc[PreviouslyUsedAndDeletedKey] = foo
+
+
pl 31
- removed String::bool () [Sigh], String::operator char const *
pl 30
MAJOR_VERSION = 1
MINOR_VERSION = 1
-PATCH_LEVEL = 31
+PATCH_LEVEL = 32
# use to send patches, always empty for released version:
MY_PATCH_LEVEL = # include separator: "-1" or ".a"
#
int find_creat (K key) {
int free = -1;
for (int i = 0; i < arr.size(); i++) {
- if (key == arr[i].key) {
+ if (!arr[i].free && key == arr[i].key) {
return i;
} else if (arr[i].free) {
free = i;
assert (elt_b (key));
return arr[find (key)].val;
}
+ void clear ()
+ {
+ for (int i=0 ; i < arr.size (); i++)
+ arr[i].free = true;
+ }
};
#endif
\consists "Line_group_engraver";
\accepts "Staff";
\accepts "Grandstaff";
+ \accepts "Lyrics";
}
Lyric_voice =
\consists "Bar_number_engraver";
\consists "Span_score_bar_engraver";
- \consists "Normal_bar_align_engraver";
- \consists "Clef_align_engraver";
- \consists "Key_align_engraver";
- \consists "Meter_align_engraver";
- \consists "Score_horizontal_align_engraver";
+ \consists "Score_priority_engraver";
+ \consists "Priority_horizontal_align_engraver";
\consists "Vertical_align_engraver";
-% generated automatically by mf-to-table.py version 0.4
-% on Fri Dec 5 11:52:40 1997
+% Creator: mf-to-table.py version 0.4
+% Automatically generated on Mon Dec 8 17:19:17 1997
% Do not edit
% input from out/feta16.log
% name=\symboltables {
"pedaltoe" "\\pedaltoe" -2.00\pt 2.00\pt -0.00\pt 6.00\pt
}
"flags" = \table {
- "u3" "\\eighthflag" -0.20\pt 4.10\pt -12.26\pt 0.20\pt
- "u4" "\\sixteenthflag" -0.20\pt 4.10\pt -14.26\pt 0.20\pt
- "u5" "\\thirtysecondflag" -0.20\pt 4.10\pt -17.26\pt 0.20\pt
- "u6" "\\sixtyfourthflag" -0.20\pt 4.10\pt -21.26\pt 0.20\pt
- "d3" "\\deighthflag" -0.20\pt 4.54\pt -0.20\pt 11.66\pt
- "d4" "\\dsixteenthflag" -0.20\pt 4.54\pt -0.20\pt 12.26\pt
- "d5" "\\dthirtysecondflag" -0.20\pt 4.54\pt -0.20\pt 15.66\pt
- "d6" "\\dsixtyfourthflag" -0.20\pt 4.54\pt -0.20\pt 17.66\pt
+ "u3" "\\eighthflag" -0.20\pt 4.94\pt -12.26\pt 0.20\pt
+ "u4" "\\sixteenthflag" -0.20\pt 4.94\pt -14.26\pt 0.20\pt
+ "u5" "\\thirtysecondflag" -0.20\pt 4.94\pt -17.26\pt 0.20\pt
+ "u6" "\\sixtyfourthflag" -0.20\pt 4.94\pt -21.26\pt 0.20\pt
+ "d3" "\\deighthflag" -0.20\pt 5.46\pt -0.20\pt 11.66\pt
+ "d4" "\\dsixteenthflag" -0.20\pt 5.46\pt -0.20\pt 12.26\pt
+ "d5" "\\dthirtysecondflag" -0.20\pt 5.46\pt -0.20\pt 15.66\pt
+ "d6" "\\dsixtyfourthflag" -0.20\pt 5.46\pt -0.20\pt 17.66\pt
}
"clefs" = \table {
- "alto" "\\altoclef" -0.00\pt 10.89\pt -8.00\pt 8.00\pt
- "alto_change" "\\caltoclef" -0.00\pt 8.71\pt -6.40\pt 6.40\pt
- "bass" "\\bassclef" 1.20\pt 12.80\pt -10.00\pt 4.00\pt
- "bass_change" "\\cbassclef" 0.96\pt 10.24\pt -8.00\pt 3.20\pt
- "violin" "\\violinclef" -0.11\pt 10.95\pt -12.00\pt 20.00\pt
- "violin_change" "\\cviolinclef" -0.33\pt 8.52\pt -9.60\pt 16.00\pt
+ "alto" "\\altoclef" -4.00\pt 14.89\pt -8.00\pt 8.00\pt
+ "alto_change" "\\caltoclef" -3.20\pt 11.91\pt -6.40\pt 6.40\pt
+ "bass" "\\bassclef" -2.00\pt 14.40\pt -10.00\pt 4.00\pt
+ "bass_change" "\\cbassclef" -1.60\pt 11.52\pt -8.00\pt 3.20\pt
+ "violin" "\\violinclef" -4.11\pt 14.95\pt -12.00\pt 20.00\pt
+ "violin_change" "\\cviolinclef" -3.53\pt 11.72\pt -9.60\pt 16.00\pt
}
% } % $name
-% generated automatically by mf-to-table.py version 0.4
-% on Fri Dec 5 11:52:42 1997
+% Creator: mf-to-table.py version 0.4
+% Automatically generated on Mon Dec 8 17:19:20 1997
% Do not edit
% input from out/feta20.log
% name=\symboltables {
"pedaltoe" "\\pedaltoe" -2.50\pt 2.50\pt -0.00\pt 7.50\pt
}
"flags" = \table {
- "u3" "\\eighthflag" -0.25\pt 5.13\pt -15.33\pt 0.25\pt
- "u4" "\\sixteenthflag" -0.25\pt 5.13\pt -17.83\pt 0.25\pt
- "u5" "\\thirtysecondflag" -0.25\pt 5.13\pt -21.58\pt 0.25\pt
- "u6" "\\sixtyfourthflag" -0.25\pt 5.13\pt -26.58\pt 0.25\pt
- "d3" "\\deighthflag" -0.25\pt 5.68\pt -0.25\pt 14.58\pt
- "d4" "\\dsixteenthflag" -0.25\pt 5.68\pt -0.25\pt 15.33\pt
- "d5" "\\dthirtysecondflag" -0.25\pt 5.68\pt -0.25\pt 19.58\pt
- "d6" "\\dsixtyfourthflag" -0.25\pt 5.68\pt -0.25\pt 22.08\pt
+ "u3" "\\eighthflag" -0.25\pt 6.17\pt -15.33\pt 0.25\pt
+ "u4" "\\sixteenthflag" -0.25\pt 6.17\pt -17.83\pt 0.25\pt
+ "u5" "\\thirtysecondflag" -0.25\pt 6.17\pt -21.58\pt 0.25\pt
+ "u6" "\\sixtyfourthflag" -0.25\pt 6.17\pt -26.58\pt 0.25\pt
+ "d3" "\\deighthflag" -0.25\pt 6.83\pt -0.25\pt 14.58\pt
+ "d4" "\\dsixteenthflag" -0.25\pt 6.83\pt -0.25\pt 15.33\pt
+ "d5" "\\dthirtysecondflag" -0.25\pt 6.83\pt -0.25\pt 19.58\pt
+ "d6" "\\dsixtyfourthflag" -0.25\pt 6.83\pt -0.25\pt 22.08\pt
}
"clefs" = \table {
- "alto" "\\altoclef" -0.00\pt 13.61\pt -10.00\pt 10.00\pt
- "alto_change" "\\caltoclef" -0.00\pt 10.89\pt -8.00\pt 8.00\pt
- "bass" "\\bassclef" 1.50\pt 16.00\pt -12.50\pt 5.00\pt
- "bass_change" "\\cbassclef" 1.20\pt 12.80\pt -10.00\pt 4.00\pt
- "violin" "\\violinclef" -0.14\pt 13.69\pt -15.00\pt 25.00\pt
- "violin_change" "\\cviolinclef" -0.41\pt 10.65\pt -12.00\pt 20.00\pt
+ "alto" "\\altoclef" -5.00\pt 18.61\pt -10.00\pt 10.00\pt
+ "alto_change" "\\caltoclef" -4.00\pt 14.89\pt -8.00\pt 8.00\pt
+ "bass" "\\bassclef" -2.50\pt 18.00\pt -12.50\pt 5.00\pt
+ "bass_change" "\\cbassclef" -2.00\pt 14.40\pt -10.00\pt 4.00\pt
+ "violin" "\\violinclef" -5.14\pt 18.69\pt -15.00\pt 25.00\pt
+ "violin_change" "\\cviolinclef" -4.41\pt 14.65\pt -12.00\pt 20.00\pt
}
% } % $name
-% symbol.ly
-%
-% FIXME other name
-
+% Toplevel initialisation file.
+
\version "0.1.7";
breve = \duration { -1 0 }
%{
Tested Features: cadenza mode
-%}
+
+Ugh.. Wish we had grace notes.... It adds another dimension to this
+piece of music. %}
\version "0.1.7";
\meter 7/8; a2.. |
\meter 9/8; a1... |
\meter 12/8; a1. |
+ \meter 12/4;
+ r1. r2. r4. r8. r16. r32. r64. r64. |
}
\paper{
% don't change this.
\meter 3/2;
g1. | c |
% 30
- f | d^"\textsharp" |
+ f | d^"\\textsharp" |
g | c |
- A | d^"\textsharp" |
+ A | d^"\\textsharp" |
G | c |
- d^"\textsharp" | e |
+ d^"\\textsharp" | e |
f | g1 B2 |
d1.^"3 4 3" |
\meter 4/4;
g1^"3 4 3" | c |
G^"3 4 3" | c2 G |
d1^"3 4 3" | G^"3 4 3" |
- c2 G | d1^"\textsharp" ( |
+ c2 G | d1^"\\textsharp" ( |
) d^"3 4 3" |
\cadenza 1;
G\breve
+++ /dev/null
-\header {
-filename
-title
-date
-description
-opus
-source
-composers
-enteredby
-copyright
-remarks
-}
-
-%{
-Tested Features:
-%}
filename = "kortjakje.ly";
title = "Ah, vous dirais-je, maman (variations)";
description = "bare bones version. (written down from memory :-)";
-composers = "Mozart, KV 265";
+composer = "Mozart, KV 265";
enteredby = "HWN";
copyright = "public domain";
}
filename = "standchen.ly";
title = "St\"andchen (Serenade) \"Leise flehen meine Lieder\"";
opus = "D. 957 No. 4";
-composers = "Franz Schubert (1797-1828)"
+composer = "Franz Schubert (1797-1828)"
"Text by Ludwig Rellstab (1799-1860)";
enteredby = "JCN";
copyright = "public domain";
filename = "standchen.ly";
title = "St\"andchen (Serenade) Leise flehen meine Lieder\"";
opus = "D. 957 No. 4";
-composers = "Franz Schubert (1797-1828)"
+composer = "Franz Schubert (1797-1828)"
"Text by Ludwig Rellstab (1799-1860)";
enteredby = "JCN";
copyright = "public domain";
filename = "standchen.ly";
title = "St\"andchen (Serenade) \"Leise flehen meine Lieder\"";
opus = "D. 957 No. 4";
-composers = "Franz Schubert (1797-1828)"
+composer = "Franz Schubert (1797-1828)"
"Text by Ludwig Rellstab (1799-1860)";
enteredby = "JCN";
copyright = "public domain";
% 20pt music uses whole pagewidth
% ja Vette Pech. Koop maar aan A4 printer
linewidth= 185.\mm;
-
+ arithmetic_multiplier = 7.\pt;
+
gourlay_maxmeasures = 9.;
\output "standchen-20.out";
}
\paper{
% 16pt mustn't use whole page width
linewidth= 160.\mm;
+ arithmetic_multiplier = 6.\pt;
gourlay_maxmeasures = 9.;
\output "standchen-16.out";
}
"toccata 3 bar excerpt"
"2nd fuga transposed subject --- 4 bar excerpt";
-composers = "Johann Sebastian Bach (1685-1750)";
+composer = "Johann Sebastian Bach (1685-1750)";
enteredby = "JCN";
copyright = "public domain";
filename = "twinkle.ly";
title = "Ah, vous dirais-je, maman ";
description = "twinkle twinkle in pop-song-settings";
-composers = "traditional";
+composer = "traditional";
enteredby = "HWN, chords by Johan Vromans";
copyright = "public domain";
\header{
filename = "twinkle.ly";
-title = "twinkle twinkle little star";
+title = "Twinkle Twinkle Little Star";
description = "traditional song in various languages."
"Ah, vous dirais-je, maman"
"Altijd is Kortjakje ziek"
"Twinkle twinkle little star";
-composers = "Traditional";
+composer = "Traditional";
enteredby = "HWN & JCN";
copyright = "public domain";
}
tekst = \lyric{
Al-4 tijd is Kort- jak- je ziek,2
- midden4 in_de week maar 's_zon- dags niet.2
+% midden4 in_de week maar 's_zon- dags niet.2
+% ugly hack: insertion of empty syllables creates columns on extra
+% moments. The net result is more spacing.
+%
+ midden8 _8 in_de8 _8 week4 maar 's_zon- dags niet.2
's_Zon-4 dags gaat ze naar de kerk,2
met4 een boek vol zil- ver werk.2
Al-4 tijd is Kort- jak- je ziek,2
- midden4 in_de week maar 's_zon- dags niet.2
+ midden8 _8 in_de8 _8 week4 maar 's_zon- dags niet.2
}
%{
<
\lyric \type Lyrics = top <
\global \tekst >
-
- \type Staff=treb < \global
+ \type Staff_group <
+ \type Staff=treb < \global
\melody >
\lyric \type Lyrics = "Middle" < \global
\texte >
\type Staff=bass < \global
\accompany >
% ugh
+ >
\lyric \type Lyrics = bottomlyrics < \global
\texti \textii \textiii >
>
\paper{
+ % use a lot of space, to avoid clashing syllables
+ arithmetic_multiplier = 8.\pt;
+ gourlay_maxmeasures = 14.0;
}
\midi{
\tempo 4 = 120 ;
MAJOR_VERSION = 0
MINOR_VERSION = 1
-PATCH_LEVEL = 35
+PATCH_LEVEL = 36
MY_PATCH_LEVEL =
*/
#include "interval.hh"
#include "axis-group-administration.hh"
+#include "axis-group-element.hh"
#include "graphical-element.hh"
#include "debug.hh"
Axis_group_administration::add_element (Graphical_element*e,
Axis_group_element*g, Axis a1, Axis a2)
{
+ // don't add self to self.
+ assert (e != g);
Axis_group_element *& g1 = e->axis_group_l_a_[a1];
Axis_group_element *& g2 = e->axis_group_l_a_[a2];
{
script_l_arr_.push ((Script*)info.elem_l_->item());
}
- else
- {
- if (info.origin_grav_l_arr_.size() == 1
- && info.elem_l_->is_type_b (Bar::static_name()))
- bar_l_ = (Bar*)info.elem_l_->item();
- }
+ else if (info.origin_grav_l_arr_.size() == 1
+ && info.elem_l_->is_type_b (Bar::static_name()))
+ bar_l_ = (Bar*)info.elem_l_->item();
if (bar_l_ && !barcol_p_)
{
barcol_p_ = new Bar_column;
barcol_p_->breakable_b_ =true;
+ barcol_p_->break_priority_i_ = bar_l_ -> break_priority_i_;
barcol_p_->set_bar (bar_l_);
+
announce_element (Score_elem_info (barcol_p_, 0));
}
for (int i=0; i < script_l_arr_.size(); i++)
{
script_l_arr_[i]->breakable_b_ = true;
+ script_l_arr_[i]->break_priority_i_ = barcol_p_-> break_priority_i_;
barcol_p_->add (script_l_arr_[i]);
}
script_l_arr_.clear();
*/
#include "bar-grav.hh"
-#include "normal-bar.hh"
+#include "bar.hh"
#include "command-request.hh"
#include "time-description.hh"
#include "engraver-group.hh"
return true;
}
+void
+Bar_engraver::create_bar ()
+{
+ if (!bar_p_)
+ {
+ bar_p_ = new Bar;
+ bar_p_->break_priority_i_ = 0;
+ announce_element (Score_elem_info (bar_p_, bar_req_l_));
+ }
+}
+
void
Bar_engraver::do_process_requests()
{
if (bar_req_l_)
{
- bar_p_ = new Normal_bar;
+ create_bar ();
bar_p_->type_str_=bar_req_l_->type_str_;
}
else
{
Time_description const *time = get_staff_info().time_C_;
if (time && !time->whole_in_measure_)
- bar_p_ = new Normal_bar;
+ create_bar ();
}
- if (bar_p_)
- {
- announce_element (Score_elem_info (bar_p_, bar_req_l_));
- }
- else
+ if (!bar_p_)
{
Disallow_break_req r;
daddy_grav_l()->try_request (&r);
if (!clef_p_)
{
clef_p_ = new Clef_item;
+ clef_p_->break_priority_i_ = -2; // ugh
announce_element (Score_elem_info (clef_p_,clef_req_l_));
}
clef_p_->read (*this);
class Bar_engraver : public Engraver {
Bar_req * bar_req_l_;
Bar * bar_p_;
+
+ void create_bar ();
public:
TRANSLATOR_CLONE(Bar_engraver);
Bar_engraver();
/// should be put in a breakable col.
bool breakable_b_;
int break_status_i_;
+ int break_priority_i_;
+
/// nobreak = 0, pre = -1, post = 1
int break_status_i() const;
Item * find_prebroken_piece (int) const;
+++ /dev/null
-/*
- normal-bar.hh -- declare
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-
- */
-
-#ifndef NORMAL_BAR_HH
-#define NORMAL_BAR_HH
-
-#include "bar.hh"
-
-class Normal_bar : public virtual Bar
-{
-public:
- SCORE_ELEM_CLONE(Normal_bar);
- DECLARE_MY_RUNTIME_TYPEINFO;
-};
-
-#endif /* NORMAL_BAR_HH */
-
+++ /dev/null
-/*
- normal-span-bar.hh -- declare Normal_span_bar
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-
- */
-
-#ifndef NORMAL_SPAN_BAR_HH
-#define NORMAL_SPAN_BAR_HH
-
-#include "normal-bar.hh"
-#include "span-bar.hh"
-
-class Normal_span_bar : public Span_bar, public Normal_bar
-{
-public:
- SCORE_ELEM_CLONE(Normal_span_bar);
- DECLARE_MY_RUNTIME_TYPEINFO;
-};
-
-#endif /* NORMAL_SPAN_BAR_HH */
-
--- /dev/null
+/*
+ score-halign-grav.hh -- declare Score_horizontal_align_engraver
+
+ source file of the GNU LilyPond music typesetter
+
+ (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+
+#ifndef FSCORE_HALIGN_GRAV_HH
+#define FSCORE_HALIGN_GRAV_HH
+
+#include "engraver.hh"
+
+class Priority_horizontal_align_engraver : public Engraver {
+ Break_align_item * halign_p_;
+public:
+ TRANSLATOR_CLONE(Priority_horizontal_align_engraver);
+ DECLARE_MY_RUNTIME_TYPEINFO;
+ Priority_horizontal_align_engraver();
+protected:
+ virtual void acknowledge_element (Score_elem_info);
+ virtual void do_pre_move_processing();
+};
+#endif // Priority_HALIGN_GRAV_HH
+++ /dev/null
-/*
- score-align-grav.hh -- declare Type_align_engraver
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-
-#ifndef SCORE_ALIGN_GRAV_HH
-#define SCORE_ALIGN_GRAV_HH
-
-#include "engraver.hh"
-
-/**
- Group a number of items across staffs
- */
-class Type_align_engraver: public Engraver
-{
- Horizontal_group_item * align_p_;
-public:
- TRANSLATOR_CLONE(Type_align_engraver);
-
- const char* type_ch_C_;
- int priority_i_;
- Type_align_engraver();
- DECLARE_MY_RUNTIME_TYPEINFO;
-protected:
- virtual void acknowledge_element (Score_elem_info);
- virtual void do_pre_move_processing();
-};
-#endif // SCORE_ALIGN_GRAV_HH
+++ /dev/null
-/*
- score-halign-grav.hh -- declare Score_horizontal_align_engraver
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-
-#ifndef SCORE_HALIGN_GRAV_HH
-#define SCORE_HALIGN_GRAV_HH
-#include "engraver.hh"
-class Score_horizontal_align_engraver : public Engraver {
- Break_align_item * halign_p_;
-public:
- TRANSLATOR_CLONE(Score_horizontal_align_engraver);
- DECLARE_MY_RUNTIME_TYPEINFO;
- Score_horizontal_align_engraver();
-protected:
- virtual void acknowledge_element (Score_elem_info);
- virtual void do_pre_move_processing();
-};
-#endif // SCORE_HALIGN_GRAV_HH
--- /dev/null
+/*
+ score-align-grav.hh -- declare Type_align_engraver
+
+ source file of the GNU LilyPond music typesetter
+
+ (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+
+#ifndef SCOREF_ALIGN_GRAV_HH
+#define SCOREF_ALIGN_GRAV_HH
+
+#include "engraver.hh"
+#include "assoc.hh"
+
+/**
+ Group a number of items across staffs
+ */
+class Score_priority_engraver : public Engraver
+{
+ Assoc<int, Horizontal_group_item *> align_p_assoc_;
+public:
+ TRANSLATOR_CLONE(Score_priority_engraver);
+ Score_priority_engraver ();
+ DECLARE_MY_RUNTIME_TYPEINFO;
+protected:
+ virtual void acknowledge_element (Score_elem_info);
+ virtual void do_pre_move_processing();
+};
+
+#endif // SCORE_ALIGN_GRAV_HH
Item::Item()
{
+ break_priority_i_ = 0;
breakable_b_ = false;
break_status_i_ = 0;
broken_to_drul_[LEFT] = broken_to_drul_[RIGHT]=0;
c0_i = *get_staff_info().c0_position_i_l_;
kit_p_ = new Key_item (c0_i);
+ kit_p_->break_priority_i_ = -1; // ugh
announce_element (Score_elem_info (kit_p_,keyreq_l_));
kit_p_->read (*this);
}
args.push (req->one_beat_i_);
meter_p_ = new Meter (args);
+ meter_p_->break_priority_i_ = 1; // ugh
}
if (meter_p_)
+++ /dev/null
-/*
- normal-bar.cc -- implement Normal_bar
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-
- */
-
-#include "normal-bar.hh"
-
-IMPLEMENT_IS_TYPE_B1(Normal_bar, Bar);
+++ /dev/null
-/*
- normal-span-bar.cc -- implement
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-
- */
-
-#include "normal-span-bar.hh"
-
-IMPLEMENT_IS_TYPE_B2(Normal_span_bar, Span_bar, Normal_bar);
--- /dev/null
+/*
+ score-halign-reg.cc -- implement Priority_horizontal_align_engraver
+
+ source file of the GNU LilyPond music typesetter
+
+ (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+#include "bar.hh"
+#include "break-align-item.hh"
+#include "priority-halign-grav.hh"
+#include "score-priority-grav.hh"
+
+Priority_horizontal_align_engraver::Priority_horizontal_align_engraver()
+{
+ halign_p_ =0;
+}
+
+void
+Priority_horizontal_align_engraver::do_pre_move_processing()
+{
+ if (halign_p_)
+ {
+ typeset_element (halign_p_);
+ halign_p_ =0;
+ }
+}
+
+void
+Priority_horizontal_align_engraver::acknowledge_element (Score_elem_info i)
+{
+ Engraver* reg = i.origin_grav_l_arr_[0];
+ if (reg->is_type_b (Score_priority_engraver::static_name()))
+ {
+ if (!halign_p_)
+ {
+ halign_p_ = new Break_align_item;
+ halign_p_->breakable_b_ = true;
+ announce_element (Score_elem_info (halign_p_,0));
+ }
+ Item * it = i.elem_l_->item();
+ if (it->break_priority_i_ == 0)
+ halign_p_->center_l_ = it;
+
+ halign_p_->add (it, it->break_priority_i_);
+ }
+}
+
+IMPLEMENT_IS_TYPE_B1(Priority_horizontal_align_engraver,Engraver);
+ADD_THIS_TRANSLATOR(Priority_horizontal_align_engraver);
position_i_ += 2;
Rhythmic_head::do_add_processing ();
- if (dots_l_)
- dots_l_->position_i_ = position_i_;
+ if (dots_l_ && balltype_i_ > 1)
+ {
+ dots_l_->position_i_ = position_i_ + 4;
+ }
}
Rest::Rest ()
+++ /dev/null
-/*
- score-align-reg.cc -- implement Type_align_engraver
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-
-#include "horizontal-group-item.hh"
-#include "score-align-grav.hh"
-#include "item.hh"
-
-Type_align_engraver::Type_align_engraver()
-{
- type_ch_C_ = 0;
- priority_i_ =0;
- align_p_=0;
-}
-
-void
-Type_align_engraver::do_pre_move_processing()
-{
- if (align_p_)
- {
- typeset_element (align_p_);
- align_p_ =0;
- }
-}
-
-void
-Type_align_engraver::acknowledge_element (Score_elem_info inf)
-{
- if (inf.elem_l_->is_type_b (type_ch_C_))
- {
-
- if (!align_p_)
- {
- align_p_ = new Horizontal_group_item;
- align_p_->breakable_b_ = true;
- announce_element (Score_elem_info (align_p_,0));
- }
- Score_elem * unbound_elem = inf.elem_l_;
- while (unbound_elem->axis_group_l_a_[X_AXIS])
- unbound_elem = unbound_elem->axis_group_l_a_[X_AXIS];
- align_p_->add_element (unbound_elem);
- }
-
-}
-
-IMPLEMENT_IS_TYPE_B1(Type_align_engraver,Engraver);
+++ /dev/null
-/*
- score-align-gravs.cc -- implement different alignment engravers.
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-#include "key-item.hh"
-#include "clef-item.hh"
-#include "meter.hh"
-#include "bar.hh"
-#include "score-align-grav.hh"
-#include "score-bar.hh"
-#include "normal-bar.hh"
-
-#define IMPLEMENT_ALIGN_GRAV(C,T,p)\
-class C ## _align_engraver : public Type_align_engraver \
-{ \
-public: \
- DECLARE_MY_RUNTIME_TYPEINFO; \
- TRANSLATOR_CLONE(C ## _align_engraver);\
- C ## _align_engraver() : Type_align_engraver () \
- { type_ch_C_ = T::static_name();\
- priority_i_ = p;} \
-}; \
-ADD_THIS_TRANSLATOR(C ## _align_engraver); \
-IMPLEMENT_IS_TYPE_B1(C ## _align_engraver, Type_align_engraver) ;
-
-
-IMPLEMENT_ALIGN_GRAV(Key,Key_item,3);
-IMPLEMENT_ALIGN_GRAV(Clef,Clef_item,2);
-IMPLEMENT_ALIGN_GRAV(Normal_bar, Normal_bar,4);
-IMPLEMENT_ALIGN_GRAV(Meter,Meter,5);
-IMPLEMENT_ALIGN_GRAV(Score_bar, Score_bar,0);
+++ /dev/null
-/*
- score-halign-reg.cc -- implement Score_horizontal_align_engraver
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-#include "bar.hh"
-#include "break-align-item.hh"
-#include "score-halign-grav.hh"
-#include "score-align-grav.hh"
-
-Score_horizontal_align_engraver::Score_horizontal_align_engraver()
-{
- halign_p_ =0;
-}
-
-void
-Score_horizontal_align_engraver::do_pre_move_processing()
-{
- if (halign_p_)
- {
- typeset_element (halign_p_);
- halign_p_ =0;
- }
-}
-
-void
-Score_horizontal_align_engraver::acknowledge_element (Score_elem_info i)
-{
- Engraver* reg = i.origin_grav_l_arr_[0];
- if (reg->is_type_b (Type_align_engraver::static_name()))
- {
- Type_align_engraver * align_grav_l = (Type_align_engraver*) reg;
- if (!halign_p_)
- {
- halign_p_ = new Break_align_item;
- halign_p_->breakable_b_ = true;
- announce_element (Score_elem_info (halign_p_,0));
- }
- Item * it = i.elem_l_->item();
- if (align_grav_l->type_ch_C_ == Bar::static_name())
- halign_p_->center_l_ = it;
-
- halign_p_->add (it, align_grav_l->priority_i_);
- }
-}
-
-IMPLEMENT_IS_TYPE_B1(Score_horizontal_align_engraver,Engraver);
-ADD_THIS_TRANSLATOR(Score_horizontal_align_engraver);
--- /dev/null
+/*
+ score-align-reg.cc -- implement Score_priority_engraver
+
+ source file of the GNU LilyPond music typesetter
+
+ (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+
+#include "horizontal-group-item.hh"
+#include "score-priority-grav.hh"
+#include "item.hh"
+#include "assoc-iter.hh"
+#include "break-align-item.hh"
+
+
+Score_priority_engraver::Score_priority_engraver()
+{
+}
+
+void
+Score_priority_engraver::do_pre_move_processing()
+{
+ for (Assoc_iter<int, Horizontal_group_item*> i(align_p_assoc_); i.ok() ; i++)
+ {
+ if (i.val ())
+ {
+ typeset_element (i.val ());
+ i.val () = 0;
+ }
+ }
+ align_p_assoc_.clear ();
+}
+
+void
+Score_priority_engraver::acknowledge_element (Score_elem_info inf)
+{
+ Item * item_l = inf.elem_l_->item ();
+ if (item_l && item_l->breakable_b_)
+ {
+ /*
+ Don't try to eat up our (probable) parent.
+ */
+ if (inf.origin_grav_l_arr_.size () <= 1 &&
+ item_l->is_type_b (Break_align_item::static_name ()))
+ return;
+
+
+ int p =item_l-> break_priority_i_;
+ Horizontal_group_item * hg =0;
+ if (!align_p_assoc_.elt_b(p))
+ {
+ hg = new Horizontal_group_item;
+ announce_element (Score_elem_info (hg,0));
+ align_p_assoc_[p] = hg;
+ hg->break_priority_i_ = p;
+ hg->breakable_b_ = true;
+ }
+ else
+ hg = align_p_assoc_[p];
+
+ Score_elem * unbound_elem = inf.elem_l_;
+
+
+ while (unbound_elem->axis_group_l_a_[X_AXIS])
+ {
+ /* We might have added inf.elem_l_ earlier because we added one
+ of its children. We don't want to add ourselves to ourself
+ */
+ if (unbound_elem->axis_group_l_a_[X_AXIS] == hg)
+ return;
+ unbound_elem = unbound_elem->axis_group_l_a_[X_AXIS];
+ }
+
+
+ hg->add_element (unbound_elem);
+ }
+}
+
+IMPLEMENT_IS_TYPE_B1(Score_priority_engraver, Engraver);
+ADD_THIS_TRANSLATOR(Score_priority_engraver);
(c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
*/
-#include "normal-span-bar.hh"
+#include "span-bar.hh"
#include "span-bar-grav.hh"
#include "vertical-align-spanner.hh"
Span_bar*
Span_bar_engraver::get_span_bar_p() const
{
- return new Normal_span_bar;
+ return new Span_bar;
}
void
Span_bar*
Span_score_bar_engraver::get_span_bar_p() const
{
- return new Span_score_bar;
+ Span_bar*s = new Span_score_bar;
+ s->break_priority_i_ = -4;
+
+ return s;
+
}
Span_bar*
Piano_bar_engraver::get_span_bar_p() const
{
- return new Piano_brace;
+ Span_bar *s= new Piano_brace;
+ s->break_priority_i_ = -4;
+ return s;
}
ADD_THIS_TRANSLATOR(Piano_bar_engraver);
parity = !parity;
}
else
- parity = 0;
+ parity = 1;
lastpos = head_l_arr_[i]->position_i_;
}
}
Begin3
Titel: LilyPond
-Versie: 0.1.35
-Inschrijf datum: 05DEC97
+Versie: 0.1.36
+Inschrijf datum: 06DEC97
Beschrijving: LilyPond is de muziek typesetter van het GNU Project.
Het programma genereert muziek in zichtbare of
hoorbare vorm uit uit een muzikale definitie file:
jan@digicash.com (Jan Nieuwenhuizen)
Onderhouden door: hanwen@stack.nl (Han-Wen Nienhuys)
Voornaamste plek: sunsite.unc.edu /pub/Linux/apps
- 395k lilypond-0.1.35.tar.gz
+ 395k lilypond-0.1.36.tar.gz
Oorspronkelijke plek: pcnov095.win.tue.nl /pub/lilypond/
- 395k lilypond-0.1.35.tar.gz
+ 395k lilypond-0.1.36.tar.gz
Copi"eer politie: GPL
End
Begin3
Title: LilyPond
-Version: 0.1.35
-Entered-date: 05DEC97
+Version: 0.1.36
+Entered-date: 06DEC97
Description: LilyPond is the GNU Project music typesetter. The program
generates visual or auditive output from a music
definition file: it can typeset formatted sheet music
jan@digicash.com (Jan Nieuwenhuizen)
Maintained-by: hanwen@stack.nl (Han-Wen Nienhuys)
Primary-site: sunsite.unc.edu /pub/Linux/apps/sound/convert
- 460k lilypond-0.1.35.tar.gz
+ 460k lilypond-0.1.36.tar.gz
Original-site: pcnov095.win.tue.nl /pub/lilypond/development/
- 460k lilypond-0.1.35.tar.gz
+ 460k lilypond-0.1.36.tar.gz
Copying-policy: GPL
End
Name: lilypond
-Version: 0.1.35
+Version: 0.1.36
Release: 1
Copyright: GPL
Group: Applications/Publishing
-Source0: alpha.gnu.org:/gnu/lilypond/development/lilypond-0.1.35.tar.gz
+Source0: alpha.gnu.org:/gnu/lilypond/development/lilypond-0.1.36.tar.gz
Summary: A program for typesetting music.
URL: http://www.stack.nl/~hanwen/lilypond
Packager: Han-Wen Nienhuys <hanwen@stack.nl>
upflag_width# = .750 black_notehead_width# + stemthickness#/2;
downflag_width# = .833 black_notehead_width# + stemthickness#/2;
+right_upflag_space# = .2 upflag_width#;
+right_downflag_space# = .2 downflag_width#;
+
%
% Flags pointing down cannot overlap with the notehead in y-direction,
% so they have less slant.
foot_depth# = 3 interline#;
set_char_box(stemthickness# /2, hip_width#
- + stemthickness#/2,
+ + stemthickness#/2 + right_upflag_space#,
foot_depth# + foot_thickness#/2, stemthickness#/2)
define_pixels(flare, hip_width, hip_thickness,
foot_width_ratio = .8;
set_char_box(stemthickness# /2, hip_width#
- + stemthickness#/2,
+ + stemthickness#/2 + right_upflag_space#,
total_depth# + foot_thickness#/2, stemthickness#/2)
define_pixels(flare, hip_width, hip_thickness,
foot_width_ratio = .8;
set_char_box(stemthickness# /2, hip_width#
- + stemthickness#/2,
+ + stemthickness#/2 + right_upflag_space#,
total_depth# + foot_thickness#/2, stemthickness#/2)
define_pixels(flare, hip_width, hip_thickness,
foot_width_ratio = .8;
set_char_box(stemthickness# /2, hip_width#
- + stemthickness#/2,
+ + stemthickness#/2 + right_upflag_space#,
total_depth# + foot_thickness#/2, stemthickness#/2)
define_pixels(flare, hip_width, hip_thickness,
foot_width_ratio = .8;
set_char_box(stemthickness# /2, hip_width#
- + stemthickness#/2,
+ + stemthickness#/2 + right_downflag_space#,
total_depth# + foot_thickness#/2, stemthickness#/2)
define_pixels(flare, hip_width, hip_thickness,
foot_width_ratio = .95;
set_char_box(stemthickness# /2, hip_width#
- + stemthickness#/2,
+ + stemthickness#/2 + right_downflag_space#,
total_depth# + foot_thickness#/2, stemthickness#/2)
define_pixels(flare, hip_width, hip_thickness,
foot_width_ratio = .95;
set_char_box(stemthickness# /2, hip_width#
- + stemthickness#/2,
+ + stemthickness#/2 + right_downflag_space#,
total_depth# + foot_thickness#/2, stemthickness#/2)
define_pixels(flare, hip_width, hip_thickness,
foot_width_ratio = .98;
set_char_box(stemthickness# /2, hip_width#
- + stemthickness#/2,
+ + stemthickness#/2 + right_downflag_space#,
total_depth# + foot_thickness#/2, stemthickness#/2)
define_pixels(flare, hip_width, hip_thickness,
input feta-banier;
input feta-klef;
else:
-% input feta-bolletjes;
-% input feta-banier;
+ input feta-bolletjes;
+ input feta-banier;
% input feta-eindelijk;
- input feta-klef;
+% input feta-klef;
% input feta-toevallig;
fi
% (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>,
% Jan Nieuwenhuizen <jan@digicash.com>
+
+
+
fet_begingroup("clefs");
+%
+% [Ross] says that clefs take 1 interline space on the left and right
+%
+def set_horizontal_spacing =
+ save left_space ,right_space;
+ left_space# = reduced_il#;
+ right_space# = reduced_il#;
+enddef;
+
def draw_staff(expr first, last)=
pickup pencircle scaled stafflinethickness;
for i:= first step 1 until last:
% [Wanske] says the bulbs should be positioned about 1/4 right of the
% "arrow"
def draw_c_clef (expr reduction) =
- save hair, norm, reduced_il;
+ save hair, norm, reduced_il, right_edge;
reduced_il#=interline#*reduction;
norm#:=2/3reduced_il#;
hair#:=1/6norm#;
- define_pixels (hair,norm,reduced_il);
- set_char_box (0, 15/4norm#+2hair#,
+
+ set_horizontal_spacing;
+ right_edge# = 15/4norm#+2hair#;
+
+ set_char_box (left_space#, right_edge# + right_space#,
2 reduced_il#, 2 reduced_il#);
+ define_pixels (hair,norm,reduced_il, right_edge);
+
draw_block ((0,-d), (3/4norm+1/2hair,h));
draw_block ((3/4norm+2hair,-d),
(3/4norm+7/2hair,h));
penpos1(hair,-90);
z1l=(xoff+norm+hair,h);
penpos2(norm-3/2hair,180);
- z2l=(w,h/2);
+ z2l=(right_edge,h/2);
penpos3(hair,90);
- z3=(((w-xoff)/2)+xoff,2hair);
+ z3=(((right_edge -xoff)/2)+xoff,2hair);
penpos4(hair,0);
z4=(xoff+1/2norm+1/2hair,reduced_il-hair);
% the dots, but her picture shows that the extreme is ~ 0.2 ss lower
def draw_bass_klef(expr exact_center, reduction) =
- save reduced_il, left_tilt, left_thick;
+ save reduced_il, left_tilt, left_thick, ball_to_right;
reduced_il# = interline# * reduction;
- left_tilt = 5;
- define_pixels(reduced_il);
- left_thick = .25 reduced_il;
- set_char_box(
- - xpart exact_center+ .2 reduced_il#,
- xpart exact_center + 2.7 reduced_il#,
+ set_horizontal_spacing;
+ ball_to_right# = 2.1 reduced_il#;
+ set_char_box(left_space# +
+ - xpart exact_center,
+ right_space# +
+ xpart exact_center + ball_to_right#,
- ypart exact_center + 2.5 reduced_il#,
ypart exact_center +reduced_il#);
+
+ define_pixels(reduced_il, ball_to_right);
+ left_tilt = 5;
+ left_thick = .25 reduced_il;
+
x1r - x1l = left_thick;
z1l = (hround_pixels(xpart exact_center),
vround_pixels(ypart exact_center));
y2 = reduced_il;
- x3l - x1l = 2.1 reduced_il;
+ x3l - x1l = ball_to_right;
x2 = .5 [x1,x3];
x3l - x3r = .48 reduced_il;
y3l = -0.05 interline;
thinnib = thinness - hair;
thinpen = thinness;
- set_char_box(-xpart exact_center + 1.1 * breapth_factor* reduced_il#,
+ set_horizontal_spacing;
+
+ set_char_box(
+ left_space# +
+ -xpart exact_center + 1.1 * breapth_factor* reduced_il#,
+ right_space# +
xpart exact_center + .66 breapth_factor* reduced_il#,
-ypart exact_center + 3 * reduced_il#,
ypart exact_center + 5 * reduced_il#);
-% generated automatically by mf-to-table.py version 0.4
-% on Fri Dec 5 11:52:40 1997
+% Creator: mf-to-table.py version 0.4
+% Automatically generated on Mon Dec 8 17:19:17 1997
% Do not edit
% input from out/feta16.log
% name
-% generated automatically by mf-to-table.py version 0.4
-% on Fri Dec 5 11:52:42 1997
+% Creator: mf-to-table.py version 0.4
+% Automatically generated on Mon Dec 8 17:19:20 1997
% Do not edit
% input from out/feta20.log
% name