@menu
* LilyPond internals::
* Overview::
-* mudela::
* Request_engraver::
* Backend::
* Coding standards::
@menu
* Overview:: Overview
-* mudela:: mudela
* Request_engraver:: Request_engraver
@end menu
@chapter LilyPond internals
-This documents some aspects of the internals of GNU LilyPond. Some of
-this stuff comes from e-mail I wrote, some from e-mail others wrote,
-some are large comments taken away from the headers. This page may be a
-little incoherent. Unfortunately, it is also quite outdated. A more
-thorough and understandable document is in the works.
-
-You should use @code{doc++} to take a peek at the sources.
-
-@node Overview, mudela, Top, Top
+@node Overview, , , Top
@section Overview
-GNU LilyPond is a "multi-pass" system. The different passes have been
-created so that they do not depend on each other. In a later stage
-some parts may be moved into libraries, or seperate programs, or they
-might be integrated in larger systems.
+GNU LilyPond is a "multi-pass" system.
@table @samp
@end table
-@node mudela, Request_engraver, Overview, Top
-@section mudela
-
-[FIXME: implementation has been generalised, so this is out of date]
-
-Most information is stored in the form of a request. In music
-typesetting, the user might want to cram a lot more symbols on the
-paper than actually fits. To reflect this idea (the user asks more
-than we can do), the container for this data is called Request.
-
-In a lot of other formats this would be called an 'Event'
-
-@table @samp
-@item @code{Barcheck_req}
- Checks during music processing if start of this voice element
- coincides with the start of a measure. Handy to check if you left out
- some voice elts.
-@item @code{Note_req}
- LilyPond has to decide if the ball should be hanging left or
- right. This influences the horizontal dimensions of a column, and this
- is why request processing should be done before horizontal spacing.
- Other voices' frivolities may cause the need for accidentals, so this
- is also for the to decide. The engraver can decide on positioning based on
- ottava commands and the appropriate clef.
-@item @code{Rest_req}
- Typeset a rest.
-@item @code{Span_req}
- This type of request typically results in the creation of a @code{Spanner}
-@item @code{Beam_req}
- Start/stop a beam.
- Engraver has to combine this request with the stem_request, since the
- number of flags that a stem wants to carry will determine the
- number of beams.
-@item @code{Dynamic}
- Each dynamic is bound to one note (a crescendo spanning multiple
- notes is thought to be made of two "dynamics": a start and a stop).
- Dynamic changes can occur in a smaller time than the length of its
- note, therefore each @code{Dynamic} request carries a time, measured
- from the start of its note.
-@end table
-@node Request_engraver, , mudela, Top
+@node Request_engraver, , , Top
@section Request_engraver
In the previous section the idea of Request has been explained, but
@end menu
-@node Graphic elements, , , Backend
+@node Graphic elements, , , Backend
+@unnumberedsubsec
Music notation is composed of a sets of interrelated glyphs. In
Lilypond every glyph usually is represented by one object, a so-called
union of its children.
@node Position and width Callbacks, , , Backend
+@unnumberedsubsec
The positions are, as explained relative to a parent reference
point. Most positions are not known when an object is created, so these
"empty in this direction".
@node Score_element properties, , , Backend
+@unnumberedsubsec
Score elements can have other properties besides positioning, for
example, text strings (for text objects) style settings, glyphs, padding
-@node Score elements, , , Backend
+@node Score elements, , , Backend
+@unnumberedsubsec
[FIXME: we want to get rid of dependencies in the implementation.]
such a clear distinction between the two. Right now, Score_elements are
always either Item or either Spanner.
-@node Coding standards, , , Top
+@node Coding standards, , , Top
@chapter CodingStyle - standards while programming for GNU LilyPond
Use them.
-@node Making patches, , , Top
+@node Making patches, , , Top
@unnumberedsec Track and distribute your code changes
@end example
-@node Localisation, , , Top
+@node Localisation, , , Top
@chapter Localisation - User messages in LilyPond
@example
char const* messages[] = @{
_i ("enable debugging output"),
- _i ("ignore mudela version"),
+ _i ("ignore lilypond version"),
0
@};
--- /dev/null
+# Mudela_rules.make
+
+.SUFFIXES: .doc .dvi .mudtex .tely .texi
+
+SUBST_TEXI_DEPS=sed 's! \.\./! !g' < $(basename $@).dep > $(outdir)/temp.dep ; mv $(outdir)/temp.dep $(basename $@).dep
+
+$(outdir)/%.latex: %.doc
+ LILYPONDPREFIX=$(LILYPONDPREFIX)/.. $(PYTHON) $(script-dir)/lilypond-book.py --outdir=$(outdir) -I .. -I $(input-dir)/test/ --dependencies --dep-prefix=$(outdir)/ $<
+ $(SUBST_TEXI_DEPS)
+
+# don't do ``cd $(outdir)'', and assume that $(outdir)/.. is the src dir.
+# it is not, for --scrdir builds
+$(outdir)/%.texi: %.tely
+ LILYPONDPREFIX=$(LILYPONDPREFIX)/.. $(PYTHON) $(script-dir)/lilypond-book.py --outdir=$(outdir) -I .. -I $(input-dir)/test/ --dependencies --dep-prefix=$(outdir)/ --format=texi $<
+ $(SUBST_TEXI_DEPS)
+
+# nexi: no-lily texi
+# for plain info doco: don't run lily
+$(outdir)/%.nexi: %.tely
+ LILYPONDPREFIX=$(LILYPONDPREFIX)/.. $(PYTHON) $(script-dir)/lilypond-book.py --outdir=$(outdir) --no-lily -I .. -I $(input-dir)/test/ --dependencies --dep-prefix=$(outdir)/ --format=texi $<
+ mv $(@D)/$(*F).texi $@
+ $(SUBST_TEXI_DEPS)
+
+# nfo: info from non-lily texi
+$(outdir)/%.info: $(outdir)/%.nexi
+ -$(MAKEINFO) --force --output=$(outdir)/$(*F).info $<
+
+# nfo: info from non-lily texi
+#$(outdir)/%.nfo: $(outdir)/%.nexi
+# -$(MAKEINFO) --force --output=$(outdir)/$(*F).info $<