]> git.donarmstrong.com Git - lilypond.git/commitdiff
Merge branch 'master' into translation
authorJean-Charles Malahieude <lilyfan@orange.fr>
Sat, 5 Mar 2016 16:23:44 +0000 (17:23 +0100)
committerJean-Charles Malahieude <lilyfan@orange.fr>
Sat, 5 Mar 2016 16:23:44 +0000 (17:23 +0100)
46 files changed:
Documentation/changes.tely
Documentation/contributor/administration.itexi
Documentation/contributor/introduction.itexi
Documentation/contributor/issues.itexi
Documentation/contributor/quick-start.itexi
Documentation/contributor/source-code.itexi
Documentation/css/lilypond-manuals.css
Documentation/de/notation/spacing.itely
Documentation/es/notation/spacing.itely
Documentation/fr/notation/spacing.itely
Documentation/it/notation/spacing.itely
Documentation/ja/notation/spacing.itely
Documentation/notation/changing-defaults.itely
Documentation/notation/fretted-strings.itely
Documentation/notation/input.itely
Documentation/notation/spacing.itely
Documentation/usage/running.itely
Documentation/web/community.itexi
Documentation/web/news-front.itexi
Documentation/web/news.itexi
VERSION
configure.ac
input/regression/tablature-additional-bass-strings.ly [new file with mode: 0644]
lily/completion-note-heads-engraver.cc
lily/engraver.cc
lily/grob-interface-scheme.cc
lily/grob-property.cc
lily/include/music.hh
lily/include/prob.hh
lily/lookup.cc
lily/music-sequence.cc
lily/music.cc
lily/parser.yy
lily/quote-iterator.cc
lily/stencil.cc
lily/volta-repeat-iterator.cc
ly/Welcome-to-LilyPond-MacOS.ly
ly/Welcome_to_LilyPond.ly
ly/engraver-init.ly
po/lilypond.pot
python/musicxml.py
scm/define-context-properties.scm
scm/define-markup-commands.scm
scm/font.scm
scm/translation-functions.scm
tex/texinfo.tex

index db4384a1b0ca270aacc623d38f187aebd846b7af..f8dd50a2e429b7129af277ac5f814efcdbe59352 100644 (file)
@@ -61,6 +61,28 @@ which scares away people.
 
 @end ignore
 
+@item
+Additional bass strings (for lute tablature) are supported.
+@lilypond[quote,verbatim]
+m = { f'4 d' a f d a, g, fis, e, d, c,  \bar "|." }
+
+\score {
+  \new TabStaff \m
+  \layout {
+    \context {
+      \Score
+      tablatureFormat = #fret-letter-tablature-format
+    }
+    \context {
+      \TabStaff
+      stringTunings = \stringTuning <a, d f a d' f'>
+      additionalBassStrings = \stringTuning <c, d, e, fis, g,>
+      fretLabels = #'("a" "b" "r" "d" "e" "f" "g" "h" "i" "k")
+    }
+  }
+}
+@end lilypond
+
 @item
 The markup-list-command @code{\table} is now available.
 Each column may be aligned differently.
@@ -79,6 +101,24 @@ Each column may be aligned differently.
 }
 @end lilypond
 
+@item
+A new markup-command, @code{\with-dimensions-from}, makes
+@code{\with-dimensions} easier to use by taking the new
+dimensions from a markup object, given as first argument.
+@lilypond[quote,verbatim]
+\markup {
+  \pattern #5 #Y #0 "x"
+  \pattern #5 #Y #0 \with-dimensions-from "x" "f"
+  \pattern #5 #Y #0 \with-dimensions-from "x" "g"
+  \override #'(baseline-skip . 2)
+  \column {
+    \pattern #5 #X #0 "n"
+    \pattern #5 #X #0 \with-dimensions-from "n" "m"
+    \pattern #5 #X #0 \with-dimensions-from "n" "!"
+  }
+}
+@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
index a392f7d660f8e62cf5518c6678acba472ffa3b58..510a799d9170a18b0b09693cf6c354e677ff32f4 100644 (file)
@@ -167,7 +167,7 @@ The Patch Meister's responsibilities are:
 To keep track of all patches submitted for testing and review.  This
 includes scanning the bug and dev email lists looking for any patches
 submitted by @q{random} contributors and advising them on how to submit
-a patch for testing and review.  See @ref{Commits and patches}.
+a patch for testing and review.  See @ref{Patches}.
 
 @item
 To makes sure that any patch submitted has a corresponding Issue Tracker
index 59eb050c1a2b59e38b3a33f64e6ffbb867fea71b..24abc03bf7fb5b77cc3899a0b6a65a252d41fedf 100644 (file)
@@ -109,6 +109,20 @@ hosted by GNU savannah.
 @uref{http://git.savannah.gnu.org/gitweb/?p=lilypond.git}
 @end example
 
+@item @strong{issue tracker}:
+currently hosted by Sourceforge.
+
+@example
+@uref{https://sourceforge.net/p/testlilyissues/issues/}
+@end example
+
+@item @strong{patch review}:
+Reitveld -- the collaborative code review tool.
+
+@example
+@uref{https://codereview.appspot.com}
+@end example
+
 @item @strong{environment variables}:
 many maintenance scripts, and many instructions in this guide rely on
 predefined @ref{Environment variables}.
@@ -116,17 +130,21 @@ predefined @ref{Environment variables}.
 @item @strong{mailing lists}:
 given on @rweb{Contact}.
 
-@item @strong{branches}:
+@item @strong{Git branches}:
 
 @itemize
 @item @code{master}:
-base your work from this, but do @strong{not push} to it.
+always base your work from this branch, but @strong{never push} directly
+to it.  Patches are always pushed directly to the @code{staging} branch
+instead.
 
 @item @code{staging}:
-after a successful review (see below), push here.
+always push to this branch after a successful patch review cycle (see
+below).
 
 @item @code{translation}:
-translators should base their work from this, and also push to it.
+Translators should base their work on this branch only and push any
+translation patches directly to it as well.
 
 @item @code{dev/foo}:
 feel free to push any new branch name under @code{dev/}.
@@ -134,13 +152,16 @@ feel free to push any new branch name under @code{dev/}.
 @end itemize
 
 @item @strong{regression tests}:
-also known as @qq{regtests}; this is a collection of more than a
-thousand .ly files.  We track the output of those files between
-versions.
+also known as @qq{regtests}. A collection of more than a thousand
+@code{.ly} files that are used to track LilyPond's engraving output
+between released stable and unstable versions as well as checked for all
+patches submitted for testing.
 
-If a patch introduces any unintentional changes to the regtests,
-we will likely reject it -- make sure that you are aware and can
-explain any regtest changes.  More info in @ref{Regression tests}.
+If a patch introduces any unintentional changes to any of the regtests
+it is very likely it will be rejected (to be fixed) -- always make sure
+that, if you expect any regression test changes, that they are explained
+clearly as part of the patch description when submitting for testing.
+For more information see @ref{Regression tests}.
 
 @item @strong{reviews}:
 after finishing work on a patch or branch:
@@ -149,41 +170,51 @@ after finishing work on a patch or branch:
 @item
 upload it with our custom @code{git-cl} @q{helper-script}; see
 @ref{git-cl}.  In addition to uploading patches to the Google's Rietveld
-Code Review Tool the script will also update the issue tracker (or add a
-new issue as appropriate) so that we don't lose reference to your
-patch.  The @qq{status} of your patch is kept on the issue tracker;
-see @ref{Issues}.
+code review tool the script will also update the issue tracker (or add a
+new issue as appropriate) so that any reference to the patch is not
+lost.  The current @qq{status} of any patch submitted is always managed
+on the issue tracker; also see @ref{Issues}.
 
-Your patch will be given @code{Patch-new} status.  More information on
-this can be found in the section @ref{Uploading a patch for review}.
+Once submitted the patch will be given a status of @code{Patch-new} and
+will enter the @qq{Patch Countdown}.  More information on this can be
+found in the section @ref{Uploading a patch for review}.
 
 @item
-If your patch passes some automatic tests, it will be given
-@code{Patch-review} status.  This generally happens within 24
-hours.
+Patches are generally tested within 24 hours of submission.  Once it has
+passed the basic tests -- make, make doc and a make test-baseline/check
+--, the tracker will be updated and the patch's status will change to
+@code{Patch-review} for other developers to examine.
 
 @item
-After that, the patch must wait for the next @qq{patch countdown},
-which occurs roughly every 3 days.  When your patch is put on a
-countdown, it will be given @code{Patch-countdown} status.
+Every third day, the @qq{Patch Meister} will examine the issue tracker
+and the Rietveld code review tool for the submitted patch, looking for
+any comments by other developers.  Depending on what has been posted,
+the patch will be either; @qq{moved on} to the next patch status
+(@code{Patch-countdown}); set back to @code{Patch-needs_work}; or if
+more discussion is needed, left at @code{Patch-review}.  In all cases
+the issue tracker (not the Rietveld code review tool) will be updated by
+the Patch Meister accordingly.
 
 @item
-The countdown is a 72-hour period which gives other developers one
-last chance to review the patch.  If no significant problems are
-found, your patch will be given @code{Patch-push} status.
+Once another three days have passed, any patch that has been given
+@code{Patch-countdown} status will be changed to @code{Patch-push}, the
+issue tracker is updated, and the developer can now push it directly to
+the @code{staging} branch (or email the patch -- created with
+@w{@code{git format-patch}} command -- to one of the other developers
+who can push it for you).
 
 @item
-You may now either push it to the @code{staging} branch, or email
-your patch (created with @w{@code{git format-patch}}) to somebody
-who will push it for you.
+Automatic scripts run every few hours to merge the @code{staging} branch
+with @code{master}.
 
 @end enumerate
 
-@advanced{Yes, this process means that most patches wait between
-60-120 hours before reaching @code{master}.  This is unfortunate, but
-given our limited resources for reviewing patches and a history of
-unintended breakage in @code{master}, this is the best compromise
-we have found.}
+@advanced{This process does means that most patches will take about a
+week before finally being merged into @code{master}.  With the limited
+resources for reviewing patches available and a history of unintended
+breakages in the @code{master} branch (from patches that have
+not had time to be reviewed properly), this is the best compromise we
+have found.}
 
 @end itemize
 
index 883328f85a2345a76760986b8e45fff1def3eda8..09925d4208c80e084f080aad5aa1c42226e7bdb0 100644 (file)
@@ -825,7 +825,7 @@ email should contain a link to the issue you just added.
 separate person handling this task.}
 
 For contributors/developers: follow the steps in
-@ref{Commits and patches}, and @ref{Pushing to staging}.
+@ref{Commits}, @ref{Patches}, and @ref{Pushing to staging}.
 
 @ignore
 For people doing maintenance tasks: git-cl is adding issues, James
index 9a5b12a7ec36d597e6eef5875588c2d65ec6c4d5..b5ccb3b0b8212abee2f492de84d895003b9cd042 100644 (file)
@@ -362,7 +362,7 @@ After entering a commit message, click @qq{OK} to finalize the
 commit.
 
 @advanced{for more information regarding commits and commit
-messages, see @ref{Commits and patches}.}
+messages, see @ref{Commits}.}
 
 
 @subsubheading 2b. Amend previous commit
index 719c85e041ba80021059c338d3c0b1047f76cc13..7c4dc63778584703f17823f636e9f928483aef82 100644 (file)
@@ -848,7 +848,8 @@ The branches are kept for archival reasons.
 * The Git contributor's cycle::
 * Pulling and rebasing::
 * Using local branches::
-* Commits and patches::
+* Commits::
+* Patches::
 @end menu
 
 
@@ -940,7 +941,7 @@ refusing to pull with rebase: your working tree is not up-to-date
 
 @noindent
 it means that you have modified some files in you working tree
-without committing changes (see @ref{Commits and patches}); you
+without committing changes (see @ref{Commits}); you
 can use the @command{git@tie{}stash} command to work around this:
 
 @example
@@ -1088,16 +1089,14 @@ to merge @code{translation} into @code{staging} whenever he has
 checked that @code{translation} builds successfully.
 
 
-@node Commits and patches
-@subsection Commits and patches
+@node Commits
+@subsection Commits
 
 
 @menu
 * Understanding commits::
 * Making commits::
 * Commit messages::
-* Making patches::
-* Uploading a patch for review::
 @end menu
 
 
@@ -1248,6 +1247,16 @@ involved.  Visit the links listed in @ref{Understanding commits}
 for examples.
 
 
+@node Patches
+@subsection Patches
+
+
+@menu
+* Making patches::
+* Uploading a patch for review::
+@end menu
+
+
 @node Making patches
 @unnumberedsubsubsec Making patches
 
index 04a6877d8dbd833ba2568d7d5834ec3b6757ba29..cdbd6b76472ea8eeda00ee477ade4e2c44c69d25 100644 (file)
@@ -48,11 +48,10 @@ body {
 .appendix, .appendixsec, .appendixsubsec,
 .unnumbered, .unnumberedsec, .unnumberedsubsec, .unnumberedsubsubsec,
 .subheading, .subsubheading {
-  color: #black;
-  border-bottom: 1px dashed black;
+  color: rgb(32, 74, 135);
   padding-bottom: 0.15em;
   margin-top: 0.6em;
-  margin-bottom: 1em;
+  margin-bottom: 0.6em;
 }
 
 .settitle {
@@ -73,25 +72,28 @@ body.extending   .settitle { background-color: #7f4040; }
 body.internals   .settitle { background-color: #6a407f; }
 body.contributor .settitle { background-color: #000000; }
 
-.chapter, .appendix, .unnumbered {
-  font-size: 1.8em;
-}
-
-.section, .appendixsec, .unnumberedsec {
-  font-size: 1.6em;
+.chapter, .appendix, .unnumbered,
+.section, .appendixsec, .unnumberedsec,
+.subsection, .appendixsubsec, .unnumberedsubsec,
+.subsubsection {
+  font-size: 1.7em;
+  margin-top: 0.9em;
 }
 
-.subsection, .appendixsubsec, .unnumberedsubsec {
-  font-size: 1.4em;
+.subheading, .unnumberedsubsubsec {
+  font-size: 1.5em;
+  margin-top: 0.9em;
 }
 
-.subheading, .subsubsection, .unnumberedsubsubsec {
-  font-size: 1.25em;
+.subheading {
+  border-top: 1px solid rgb(200, 200, 200);
+  padding-top: 0.8em;
 }
 
 .subsubheading {
-  font-size: 1em;
+  font-size: 1.15em;
   font-weight: bold;
+  margin-top: 1.6em;
 }
 
 .chapheading {
@@ -214,8 +216,8 @@ div#main ul {
 }
 
 h1, h2, h3, h4, p, table, address, dt {
-  padding-left: 1em;
-  padding-right: 1em;
+  padding-left: 18px;
+  padding-right: 18px;
 }
 
 p {
index 75abb5462fe7f01cd8cf8f31f0f543dba2e5a56a..67f8b0ab7d2d4363c4aacc242983205844ad2651 100644 (file)
@@ -2970,7 +2970,7 @@ Es gibt derzeit keine Möglichkeit, den Platz zu verringern.
 
 @node Eine neuer Bereich mit anderen Abständen
 @subsection Eine neuer Bereich mit anderen Abständen
-@translationof New spacing area
+@translationof New spacing section
 
 @cindex horizontale Notenabstände, Abschnitte definierten
 @cindex Notenabstände, Abschnitte definieren
index b670ba8b0f06d686632a6353c312b92910b4a5fa..7d86ece5db0ba0b0c8ea0f287a8821a6fce90621 100644 (file)
@@ -3078,7 +3078,7 @@ No existe ningún rodeo para disminuir la magnitud de la separación.
 
 @node Área de espaciado nueva
 @subsection Área de espaciado nueva
-@translationof New spacing area
+@translationof New spacing section
 
 @funindex \newSpacingSection
 @cindex área de espaciado nueva
index e0d4a11c277070c952a2d39669a7bdba4500d5b1..cb1e5095edd733ba8d01b607e965334bacfbb251 100644 (file)
@@ -3027,7 +3027,7 @@ Il n'y a aucun moyen de diminuer l'espacement.
 
 @node Changement d'espacement en cours de partition
 @subsection Changement d'espacement en cours de partition
-@translationof New spacing area
+@translationof New spacing section
 
 @cindex espacement, modification en cours de partition
 @cindex notes, espacement horizontal
index c7de10a38e38eb0db7c8c54e7d83050bc5d9c492..dfcd72bcdea40c06ed3e61dace4e83d6d3749006 100644 (file)
@@ -2904,7 +2904,7 @@ Non esiste alcun trucco per diminuire la quantità di spazio.
 @c traduzione del titolo non letterale ma più chiara
 @node Nuova spaziatura nel corso di un brano
 @subsection Nuova spaziatura nel corso di un brano
-@translationof New spacing area
+@translationof New spacing section
 
 @funindex \newSpacingSection
 @cindex nuova spaziatura nel corso di un brano
@@ -3340,7 +3340,7 @@ Per impostazione predefinita, esiste un solo @code{SpacingSpanner} per
 disattivato per l'intera partitura.  Possiamo tuttavia modificare tale
 comportamento e attivare diverse funzionalità di spaziatura in punti
 diversi del brano.  Per farlo si usa il comando @code{\newSpacingSection}.
-Maggiori informazioni in @ref{New spacing area}.
+Maggiori informazioni in @ref{New spacing section}.
 
 Ora esaminiamo gli effetti dell'incisore @code{Separating_line_group_engraver} e
 vediamo perché le partiture proporzionali solitamente tolgano questo incisore.
@@ -3438,7 +3438,7 @@ per queste impostazioni.
 
 @seealso
 Guida alla notazione:
-@ref{New spacing area}.
+@ref{New spacing section}.
 
 Frammenti:
 @rlsr{Spacing}.
index e0d122f41831fd41e3068319bdbc528e605b3b72..a7bcbafe56ca14599a09cd99a5124c645207f042 100644 (file)
@@ -2942,7 +2942,7 @@ Essay on automated music engraving:
 
 @node 新しいスペース領域
 @subsection 新しいスペース領域
-@translationof New spacing area
+@translationof New spacing section
 
 @code{newSpacingSection} を用いることで、@c
 異なるスペース パラメータを持つ新しいセクションを開始することができます。@c
index bb5a2c2b60fb443ce0c07f462884647e820cc785..b79b69100dba3330e58f331d332229b52e0a16d0 100644 (file)
@@ -91,18 +91,12 @@ Internals Reference:
 
 >> > > - list of contexts: my *danger unmaintainable*
 >> > > alarm just went off.  I'm
-
 I knew it would... And leaving out some of them is perfectly fine
-with me.
-I do think that a list like this, with the main contexts and a
-brief
-description of  what they do (perhaps also with a note about what
-default
-behavior is associated with each of them, but this may be
-unmanageable),
-should be there, and then we could simply list the remaining ones
-without
-further explanation and with links to the IR.
+with me. I do think that a list like this, with the main contexts and a
+brief description of  what they do (perhaps also with a note about what
+default behavior is associated with each of them, but this may be
+unmanageable), should be there, and then we could simply list the
+remaining ones without further explanation and with links to the IR.
 @end ignore
 
 @c TODO Improve layout, order and consistency of wording -td
@@ -224,7 +218,7 @@ expression out as a guitar tablature, printed on six lines.
 
 @strong{@emph{DrumStaff}}
 
-Handles typesetting for percussion.  Can contain @code{DrumVoice}
+Handles typesetting for percussion.  Can contain @code{DrumVoice}.
 
 @strong{@emph{VaticanaStaff}}
 
@@ -1741,26 +1735,24 @@ Add this much extra space between objects that are next to each other.
 @end table
 @end quotation
 
-By increasing the value of @code{padding}, we can move the
-fingering away from the note head.  The following command inserts
-3 staff spaces of white
-between the note and the fingering:
+By increasing the value of @code{padding}, we can move the fingering
+away from the note head.  The following command will insert @qq{three
+staff spaces} worth of distance between the note and a fingering mark:
+
 @example
 \once \override Voice.Fingering.padding = #3
 @end example
 
-Inserting this command before the Fingering object is created,
-i.e., before @code{c2}, yields the following result:
+Inserting the padding before the fingering object is created results in
+the following:
 
 @lilypond[quote,fragment,verbatim]
 \once \override Voice.Fingering.padding = #3
 c''-2
 @end lilypond
 
-
-In this case, the context for this tweak is @code{Voice}.  This
-fact can also be deduced from the program reference, for the page for
-the @rinternals{Fingering_engraver} plug-in says
+In this case, the context for this tweak is @code{Voice}.  See
+@rinternals{Fingering_engraver} plug-in, which says:
 
 @quotation
 Fingering_engraver is part of contexts: @dots{} @rinternals{Voice}
@@ -1774,25 +1766,33 @@ Another thing that is needed, is an overview of the various naming
 conventions:
 
 @itemize
-@item scheme functions: lowercase-with-hyphens (incl. one-word
+@item scheme functions: lowercase-with-hyphens (also includes one-word
 names)
-@item scheme functions: ly:plus-scheme-style
+
+@item LilyPond-specific scheme functions: ly:plus-scheme-style
+
 @item music events, music classes and music properties:
 as-scheme-functions
+
 @item Grob interfaces: scheme-style
+
 @item backend properties: scheme-style (but X and Y!)
+
 @item contexts (and MusicExpressions and grobs): Capitalized or
 CamelCase
+
 @item context properties: lowercaseFollowedByCamelCase
-@item engravers:
-Capitalized_followed_by_lowercase_and_with_underscores
+
+@item engravers: Capitalized_followed_by_lowercase_and_with_underscores
 @end itemize
 
 Questions to be answered:
 @itemize
+
 @item Which of these are conventions and which are rules?
+
 @item Which are rules of the underlying language, and which are
-LP-specific?
+LilyPond-specific?
 @end itemize
 
 @node Modifying properties
@@ -2434,56 +2434,59 @@ one encountered in the input file.
 
 @funindex \set
 @funindex \override
-Both @code{\set} and @code{\override} manipulate properties
-associated with contexts.  In either case, properties heed the
-hierarchy of contexts: properties not set in a context itself show
-the values of the respective parent context.
-
-Values and lifetime of context properties are dynamic and only
-available when music is being interpreted, @q{iterated}.  At the
-time of context creation, properties are initialized from the
-corresponding context definition and possible context
-modifications.  Afterwards, changes are achieved with
-property-setting commands in the music itself.
-
-Now grob definitions are a special category of context properties.
-Since their structure, bookkeeping and use is different from
-ordinary context properties, they are accessed with a different
-set of commands, and treated separately in the documentation.
-
-As opposed to plain context properties, grob definitions are
-subdivided into grob properties.  A @qq{grob} (graphical object)
-is usually created by an engraver at the time of interpreting a
-music expression and receives its initial properties from the
-current grob definition of the engraver's context.  The engraver
-(or other @q{backend} parts of LilyPond) may subsequently add or
-change properties to the grob, but that does not affect the
-context's grob definition.
-
-What we call @q{grob properties} in the context of user-level
-tweaking are actually the properties of a context's grob
-definition.  In contrast to ordinary context properties, grob
-definitions have the bookkeeping required to keep track of its
-parts, the individual grob properties (and even subproperties of
-them) separately so that it is possible to define those parts in
-different contexts and have the overall grob definition at the
-time of grob creation be assembled from pieces provided in
-different contexts among the current context and its parents.
-
-Grob definitions are manipulated using @code{\override} and
-@code{\revert} and have a name starting with a capital letter
-(like @samp{NoteHead}) whereas ordinary context properties are
-manipulated using @code{\set} and @code{\unset} and are named
-starting with a lowercase letter.
+
+The @code{\set} and @code{\override} commands manipulate properties
+associated with contexts.  In both cases, the properties follow a
+@emph{hierarchy of contexts}; properties that are not set themselves in
+a context will still show the values of their respective parent's
+context.
+
+The lifetime and value of a context property is dynamic and only
+available when music is being interpreted (i.e. @q{iterated}).  At the
+time of the context's creation, properties are initialized from its
+corresponding definitions (along with any other modifications) of that
+context.  Any subsequent changes are achieved with any
+@q{property-setting} commands that are within the music itself.
+
+Graphical Object (or @qq{grob}) definitions are a @emph{special}
+category of context properties as their structure and use is different
+from that of normal context properties.  Unlike normal context
+properties, grob definitions are subdivided into @emph{grob properties}.
+
+Also, in contrast to normal context properties, grob definitions have
+their own internal @q{bookkeeping} used to keep track of their own
+individual grob properties and any sub-properties.  This means that it
+is possible to define those parts within different contexts and yet
+still have the overall grob definition at the time of grob creation from
+all the pieces provided amongst the current context and its parent(s).
+
+A grob is usually created by an engraver at the time of interpreting a
+music expression and receives its initial properties from the current
+grob definition of the engraver's context.  The engraver (or other
+@q{backend} parts of LilyPond) can then change (or add to) the grob's
+initial properties.  However, this does not affect the context's own
+grob definition.
+
+What LilyPond calls @emph{grob properties} in the context of
+@q{user-level} tweaks are really the properties of a @emph{context's}
+own grob definition.
+
+Grob definitions are accessed with a different set of commands and are
+manipulated using @code{\override} and @code{\revert} and have a name
+starting with a capital letter (e.g. @samp{NoteHead}); whereas normal
+context properties are manipulated using @code{\set} and @code{\unset}
+and are named starting with a lowercase letter.
 
 @cindex tweak, relation to @code{\override}
 @funindex \tweak
 @funindex \overrideProperty
-The special commands @code{\tweak} and @code{\overrideProperty}
-change grob properties bypassing context properties completely.
-Instead they catch grobs as they are being created and then
-directly set properties on them when they originate from a tweaked
-music event or are of a particular kind, respectively.
+
+The commands @code{\tweak} and @code{\overrideProperty} change grob
+properties by bypassing all context properties completely and, instead,
+catch grobs as they are being created, setting properties on them for
+a music event (@code{\tweak}) or, in the case of
+@code{\overrideProperty} for a specific override.
+
 
 @node Modifying alists
 @subsection Modifying alists
@@ -2665,7 +2668,7 @@ render them in a @code{TabStaff} context, see
 
 To create fret diagrams above a staff, you have two choices.
 You can either use the @code{FretBoards} context (see
-@ref{Automatic fret diagrams} or you can enter them as a markup
+@ref{Automatic fret diagrams}) or you can enter them as a markup
 above the notes using the @code{\fret-diagram} command (see
 @ref{Fret diagram markups}).
 
@@ -2714,6 +2717,7 @@ be desirable to force a particular direction or placement.
 * The direction property::
 @end menu
 
+
 @node Articulation direction indicators
 @unnumberedsubsubsec Articulation direction indicators
 
@@ -2750,6 +2754,7 @@ Direction indicators affect only the next note:
 }
 @end lilypond
 
+
 @node The direction property
 @unnumberedsubsubsec The direction property
 
@@ -2801,8 +2806,8 @@ These indications affect all notes until they are canceled.
 @end lilypond
 
 In polyphonic music, it is generally better to specify an explicit
-@code{voice} than change an object's direction.  For more information.
-See @ref{Multiple voices}.
+@code{voice} than change an object's direction.  For more information,
+see @ref{Multiple voices}.
 
 @seealso
 Learning Manual:
@@ -3209,7 +3214,7 @@ the top edge of the text with the spanner line.
 
 @item arrow
 Setting this sub-property to @code{#t} produces an arrowhead at the
-end of the line.
+end-points of the line.
 
 @item padding
 This sub-property controls the space between the specified
@@ -3477,17 +3482,23 @@ effective with every layout object, and some combinations may
 even give errors.  The following limitations apply:
 
 @itemize @bullet
-@item Bar lines cannot be printed at start of line.
-@item A bar number cannot be printed at the start of the first
-line unless it is set to be different from 1.
-@item Clef -- see below
-@item Double percent repeats are either all printed or all
-suppressed.  Use begin-of line-invisible to print and
-all-invisible to suppress.
-@item Key signature -- see below
-@item ClefModifier -- see below
+@item Bar lines cannot be printed at the start of line.
+
+@item A bar number cannot be printed at the start of the @emph{first}
+line unless it is set to be different from @code{1}.
+
+@item Clef -- see the next section.
+
+@item Double percent repeats are either @emph{all printed} or
+@emph{all suppressed}.  Use @code{begin-of-line-invisible}
+to print them and @code{all-invisible} to suppress them.
+
+@item Key signature -- see the next section.
+
+@item ClefModifier -- see the next section.
 @end itemize
 
+
 @node Special considerations
 @unnumberedsubsubsec Special considerations
 
@@ -4185,19 +4196,21 @@ XinO = {
 }
 @end lilypond
 
-Any of the glyphs in the feta Font can be supplied to the
+Any of the glyphs in the Feta Font can be supplied to the
 @code{\musicglyph} markup command -- see @ref{The Feta font}.
 
-@c TODO Add inserting eps files or ref to later
+@file{EPS} files and Postscript commands can both be inserted inline
+using the @code{\epsfile} and @code{\postscript} markup commands
+respectively -- see @ref{Graphic}.
 
-@c TODO Add inserting Postscript or ref to later
 
 @seealso
 Notation Reference:
 @ref{Graphic notation inside markup},
 @ref{Formatting text},
 @ref{Text markup commands},
-@ref{The Feta font}.
+@ref{The Feta font},
+@ref{Graphic}.
 
 
 @node Modifying shapes
@@ -4608,6 +4621,10 @@ value needed which is then used by the first function to get the real
 value which is then used for fine-tuning much later during the spacing
 process.
 
+@c TODO: The following example supposedly showing a collision no longer
+@c 'works' since 2.18.x. Another example of a collision is needed.
+@c Issue #3512
+
 @lilypond[verbatim,quote,ragged-right]
 #(define (square-line-circle-space grob)
 (let* ((pitch (ly:event-property (ly:grob-property grob 'cause) 'pitch))
index eb111e3ce81d17ed10d1cef8ebf0b5fddb558b45..c7c18bacb686c6f7a475860919ded4caa0940d68 100644 (file)
@@ -27,6 +27,7 @@ to fretted string instruments.
 * Common notation for fretted strings::
 * Guitar::
 * Banjo::
+* Lute::
 @end menu
 
 @node Common notation for fretted strings
@@ -2010,3 +2011,56 @@ Installed Files:
 
 Snippets:
 @rlsr{Fretted strings}.
+
+
+@node Lute
+@subsection Lute
+
+@menu
+* Lute tablatures::
+@end menu
+
+@node Lute tablatures
+@unnumberedsubsubsec Lute tablatures
+
+@cindex lute tablatures
+@cindex tablature, lute
+
+LilyPond supports tablature for lute.
+
+To get additional bass strings use @code{additionalBassStrings}, where the
+pitches of those strings are set. They will be printed below lowest line as:
+a, /a, //a, ///a, 4, 5 etc.
+
+@code{fret-letter-tablature-format} for @code{tablatureFormat} should be used,
+probably @code{fretLabels} for further customizing.
+
+@lilypond[quote,ragged-right,verbatim]
+m = { f'4 d' a f d a, g, fis, e, d, c,  \bar "|." }
+
+\score {
+  <<
+    \new Staff { \clef bass \cadenzaOn  \m }
+    \new TabStaff \m
+  >>
+  \layout {
+    \context {
+      \Score
+      tablatureFormat = #fret-letter-tablature-format
+    }
+    \context {
+      \TabStaff
+      stringTunings = \stringTuning <a, d f a d' f'>
+      additionalBassStrings = \stringTuning <c, d, e, fis, g,>
+      fretLabels = #'("a" "b" "r" "d" "e" "f" "g" "h" "i" "k")
+    }
+  }
+}
+@end lilypond
+
+@cindex lute tunings
+@cindex tunings, lute
+
+@knownissues
+Using @code{FretBoards} with @code{additionalBassStrings} is not supported and
+will yield unsatisfying results.
index 64b21a462df003e102e0cece55fce787a9d538a5..da9b1347a260688f95f3acbd0001336ba45f12f0 100644 (file)
@@ -2729,11 +2729,10 @@ voices and staves, saving even more time.
 @cindex EPS output
 
 The default output formats for the printed score are Portable
-Document Format (PDF) and PostScript (PS).  Scalable Vector
-Graphics (SVG), Encapsulated PostScript (EPS) and Portable
-Network Graphics (PNG) output formats are also available through
-command line options, see
-@rprogram{Basic command line options for LilyPond}.
+Document Format (PDF) and PostScript (PS).  Portable
+Network Graphics (PNG), Scalable Vector Graphics (SVG) and Encapsulated
+PostScript (EPS) output is available through the command line option,
+see @rprogram{Basic command line options for LilyPond}.
 
 
 @node Replacing the notation font
index d3cfa42ff17af0a4f8256ef8a2b76a58b9fe0f23..f28108f0777f33296f9849358d9eaa871d5247b1 100644 (file)
@@ -2724,7 +2724,7 @@ Snippets:
 
 @menu
 * Horizontal spacing overview::
-* New spacing area::
+* New spacing section::
 * Changing horizontal spacing::
 * Line width::
 * Proportional notation::
@@ -2845,21 +2845,23 @@ adjusting the padding value as necessary.
 No work-around exists for decreasing the amount of space.
 
 
-@node New spacing area
-@subsection New spacing area
+@node New spacing section
+@subsection New spacing section
 
 @funindex \newSpacingSection
-@cindex new spacing area
-@cindex spacing area, new
+@cindex new spacing section
+@cindex spacing section, new
 @cindex notes, spacing horizontally
 
-New sections with different spacing parameters can be started with
-@code{newSpacingSection}.  This is useful when there are
-sections with a different notions of long and short notes.
+New sections with different spacing parameters can be started with the
+@code{newSpacingSection} command.  This is useful for sections with
+different notions of @q{long} and @q{short} notes.  The
+@code{\newSpacingSection} command creates a new @code{SpacingSpanner}
+object at that musical moment.
 
-In the following example, the time signature change introduces a new
-section, and hence the 16ths notes are automatically spaced slightly
-wider.
+In the following example the time signature change introduces a new
+section, and the 16ths notes are automatically spaced slightly wider
+apart.
 
 @lilypond[verbatim,quote]
 \relative c' {
@@ -2872,14 +2874,12 @@ wider.
 }
 @end lilypond
 
-The @code{\newSpacingSection} command creates a new
-@code{SpacingSpanner} object at that musical moment.
 If the automatic spacing adjustments do not give the required spacing,
 manual @code{\override}s may be applied to its properties.  These must
 be applied at the same musical moment as the @code{\newSpacingSection}
-command itself.  They will then affect the spacing of all the following
+command itself and will then affect the spacing of all the following
 music until the properties are changed in a new spacing section, for
-example,
+example:
 
 @lilypond[verbatim,quote]
 \relative c' {
@@ -3280,7 +3280,7 @@ means that, by default, @code{uniform-stretching} is either turned on for the
 entire score or turned off for the entire score.  We can, however,
 override this behavior and turn on different spacing features at
 different places in the score.  We do this with the command
-@code{\newSpacingSection}.  See @ref{New spacing area}, for more info.
+@code{\newSpacingSection}.  See @ref{New spacing section}, for more info.
 
 Next we examine the effects of the @code{Separating_line_group_engraver} and
 see why proportional scores frequently remove this engraver.  The following
@@ -3376,7 +3376,7 @@ for these related settings.
 
 @seealso
 Notation Reference:
-@ref{New spacing area}.
+@ref{New spacing section}.
 
 Snippets:
 @rlsr{Spacing}.
index c044cb119f9e5372a48bb0f958c7173299e8d11b..9801cfc207a9b21697eac6ad8610a68b25f9365e 100644 (file)
@@ -246,6 +246,10 @@ which formats should be written.  Choices for @code{format} are
 
 Example: @code{lilypond -fpng @var{filename}.ly}
 
+@noindent
+For @code{svg} and @code{eps} formats use the @code{-dbackend} option.
+See @ref{Advanced command line options for LilyPond}.
+
 @item -h, --help
 Show a summary of usage.
 
@@ -481,21 +485,22 @@ included.
 @item
 @tab @code{svg}
 @tab Scalable Vector Graphics.
-A single SVG file is created for every page of output.  Apart from
-LilyPond's own music glyphs, no other font information will be included.
-Any SVG viewer will therefore require the fonts be available to it for
-the proper rendering of both text and lyrics.  It is recommended to not
-to use font @q{aliases} or @q{lists} in case the SVG viewer is unable to
-handle them.  When using @emph{Web Open Font Format} (WOFF) files the
-additional @code{--svg-woff} switch is required.
+A single SVG file is created for every page of output.  Music glyphs
+are encoded as vector graphics, but text fonts are @emph{not} embedded
+in the SVG files.  Any SVG viewer will therefore need the relevant text
+fonts to be available to it for proper rendering of both text and
+lyrics.  It is recommended to not use font @q{lists} or @q{aliases}
+in case an SVG viewer is unable to handle them.  When using
+@emph{Web Open Font Format} (WOFF) files the additional
+@code{--svg-woff} switch is required.
 @end multitable
 
 @noindent
 @strong{Note for backend svg output:}
-LilyPond's default fonts (@code{LilyPond Serif},
-@code{LilyPond Sans Serif} and @code{LilyPond Monospace}) are just
-@emph{local} font aliases.  Therefore, when using the backend @code{svg}
-command you must explicitly define the default fonts in your source
+By default in svg output LilyPond will use the generic
+@code{font-family} values of @code{serif}, @code{sans-serif}, or
+@code{monospace}.  Therefore, when using the backend @code{svg} command
+you should explicitly define particular default fonts in your source
 file;
 
 @quotation
index a2209177002dd9ddb7e11e1dd16851827ca7afd7..214ee64d40fa0174e556a661da27970ad4dba6d8 100644 (file)
@@ -904,44 +904,92 @@ developer mailing list (see @ref{Contact}).
 @divClass{column-center-middle-color2}
 @subheading Project Ideas List
 
-Below is a list of projects that was initially drawn up for GSoC 2012.
-It is maintained here as inspiration for future GSoC projects and for
-anyone who is interested in developing LilyPond.
+Below is a list of suggested projects for GSoC or for anyone who is
+interested in helping to improve LilyPond. (Last updated: February 2016)
 
-Note that this is not an exhaustive list.  Other GSoC projects are also
-possible.  There are a number of areas where LilyPond could be improved
-and the LilyPond development team is always willing to help those who
-would like to tackle a project like those listed below.
+Mentor availability varies from project to project and from year to year.
+Send us an email on our developer mailing list (see @ref{Contact}), and
+we will help you find a mentor for a project that fits your interests
+and skills.
+
+If you have ideas for a GSoC project that is not listed below you can
+send us an email as well.  There are a number of areas where LilyPond
+could be improved, and our development team is always willing to help
+those who would like to tackle a project like those listed below.
 
 A full list of all the current open issues can be found
 @uref{http://sourceforge.net/p/testlilyissues/issues/, here}.
 
 @divEnd
 
+@divClass{column-center-middle-color3}
+@subheading Improve internal chord structure
+
+The internal representation of LilyPond chords is not powerful enough
+to capture the nomenclature of jazz chords.  Currently the chord has
+a root, a bass and an inversion.  It would be nice to be able to handle
+stacked or polychords, minor/major, etc.  In order to do this, an
+internal representation with the ability to capture the essence of
+complex chords must be developed.  As a bonus, once the internal
+representation is developed, the output formatting of chord names can
+be improved.
+
+@strong{Difficulty:} Easy/medium
+@strong{Requirements:} Scheme (Guile), but the level necessary can be
+easily learned
+@strong{Recommended:} Chord theory and naming
+@strong{Mentor:} Carl Sorensen
+
+@divEnd
+
 @divClass{column-center-middle-color3}
 @subheading ScholarLY
 
 ScholarLY is a library in
-@uref{https://github.com/openlilylib/snippets, openLilyLib} that
-provides functionality for annotating scores, making it possible
-to manage scholarly workflows completely in the context of the score
-document.  So far it is possible to enter annotations of different
-types, produce clickable messages in the console output and export
-to text and LaTeX files.
+@uref{https://openlilylib.org, openLilyLib} that provides functionality
+for annotating scores, making it possible to manage scholarly workflows
+completely in the context of the score document.  So far it is possible
+to enter annotations of different types, produce clickable messages in
+the console output and export to text and LaTeX files.
 
 There are numerous feature requests to turn this library into an
-even more powerful and comprehensive tool, for example: Inserting
+even more powerful and comprehensive tool.  Some examples: Inserting
 music examples, producing footnotes, automatically applying styles
 to the annotated item (e.g. dash a slur, parenthesize an accidental),
 creating reports with point-and-click entries.  For a full description
 of this project suggestion please visit
-@uref{https://github.com/openlilylib/scholarly/wiki/GSoC}.
+@uref{https://github.com/openlilylib/scholarly/wiki/GSoC, this Wiki page}.
 
 @strong{Difficulty:} medium
 @strong{Requirements:} Scheme, possibly LaTeX, (optionally Python)
 @strong{Recommended:} Experience with or interest in scholarly
 edition and collaborative workflows.
-@strong{Potential Mentor:} Urs Liska
+@strong{Mentor:} Urs Liska
+
+@divEnd
+
+@divClass{column-center-middle-color3}
+@subheading Adding variants of font glyphs
+
+@divClass{keep-bullets}
+@itemize
+
+@item
+Adding @q{on} and @q{between} staff-line variants.
+
+@item
+Shorter and narrower variants of some glyphs for example, accidentals.
+Another, more specific example could be an ancient notation breve
+notehead coming in two variants one with a small or big @q{hole} within
+it.
+
+@end itemize
+@divEnd
+
+@strong{Difficulty:} easy
+@strong{Requirements:} MetaFont, C++, good eye for details
+@strong{Recommended knowledge:} basic LilyPond knowledge
+@strong{Mentor:} Werner Lemberg
 
 @divEnd
 
@@ -949,13 +997,78 @@ edition and collaborative workflows.
 @subheading Grace notes
 
 Fix problems with synchronization of grace notes.  Grace notes can
-intefere with LilyPond's timing and cause odd effects, especially when
+interfere with LilyPond's timing and cause odd effects, especially when
 multiple staffs are used where some have grace notes and others don't.
+This is one of the longest-standing and one of the more embarrassing
+@uref{https://sourceforge.net/p/testlilyissues/issues/34/,bugs} in
+LilyPond.
 
 @strong{Difficulty:} medium
 @strong{Requirements:} C++, MIDI
 @strong{Recommended:} familiarity with LilyPond internals
-@strong{Potential Mentors:} Mike Solomon, Carl Sorensen
+@strong{Potential Mentors:} Mike Solomon (not available for GSoC 2016),
+Carl Sorensen
+
+@divEnd
+
+@divClass{column-center-middle-color3}
+@subheading Improve default beam positioning
+
+For regular, cross-staff, broken and kneed beams.  Beaming should depend
+on context and neighbor notes
+(see @uref{http://icking-music-archive.org/lists/sottisier/sottieng.pdf,
+section 2.2 here}).  If possible also reduce beaming-computation time.
+
+@strong{Difficulty:} medium
+@strong{Requirements:} C++, experience with writing heuristics
+@strong{Recommended knowledge:} aesthetic sense
+@strong{Potential Mentors:} Mike Solomon (not available for GSoC 2016),
+Carl Sorensen
+
+@divEnd
+
+@divClass{column-center-middle-color3}
+@subheading Allow spanners to cross voices
+
+Currently all sorts of spanners (ties, slurs, dynamics, text spanners,
+trills etc.) have to be ended in the context they were started.  However,
+this doesn't reflect the reality of notation in most polyphonic settings.
+Awkward workarounds with hidden voices are currently necessary to achieve
+cross-voice spanners.
+
+New ways of addressing this issue should be explored, for example by
+
+@divClass{keep-bullets}
+@itemize
+
+@item specifying a “target context” where the end of the spanner is
+expected
+
+@item explicitly specifying the ending object with an ID
+
+@end itemize
+@divEnd
+
+This feature would solve many problems that are commonly faced with
+piano music and combined parts. 
+
+@strong{Difficulty:} medium (?)
+@strong{Requirements:} C++, Scheme
+@strong{Potential Mentor:} Urs Liska
+@divEnd
+
+@divClass{column-center-middle-color3}
+@subheading Help improve compilation behavior
+
+Automatic code analysis tools, like valgrind memory leak detection or
+callgrind code profilers, provide valuable information about possible
+flaws in our C++ code.  Cleaning up warnings would allow us to automate
+the rejection of any patch which introduced extra warnings.
+
+@strong{Difficulty:} medium
+@strong{Requirements:} C++
+@strong{Potential Mentors:} Reinhold Kainhofer (not available for GSoC
+2016), Joe Neeman
 
 @divEnd
 
@@ -989,9 +1102,13 @@ each output object to the XML tags.
 @end itemize
 @divEnd
 
+There are several possibilities for this project, including building upon
+the MusicXML export project from GSoC 2015.
+
 @strong{Difficulty:} medium
-@strong{Requirements:} MusicXML, Python, basic LilyPond knowledge
-@strong{Potential Mentors:} Reinhold Kainhofer, Mike Solomon
+@strong{Requirements:} MusicXML, Python, Scheme, basic LilyPond knowledge
+@strong{Potential Mentors:} Reinhold Kainhofer, Mike Solomon (both not
+available for GSoC 2016)
 
 Familiarity with other scorewriters (for cross-testing) would also help.
 
@@ -1000,7 +1117,7 @@ Familiarity with other scorewriters (for cross-testing) would also help.
 @divClass{column-center-middle-color3}
 @subheading Improve slurs and ties
 
-The default curves of slurs and ties are often unsatisfactory. Ties
+The engraving quality of slurs and ties is often unsatisfactory. Ties
 @q{broken} by clef or staff changes are not handled well.  The project
 could include collecting and sorting examples of bad output, deciding on
 the intended output and writing code to improve them.
@@ -1008,61 +1125,8 @@ the intended output and writing code to improve them.
 @strong{Difficulty:} hard
 @strong{Requirements:} C++, experience with writing heuristics
 @strong{Recommended knowledge:} LilyPond knowledge, aesthetic sense
-@strong{Potential Mentor:} Mike Solomon
-
-@divEnd
-
-@divClass{column-center-middle-color3}
-@subheading Adding variants of font glyphs
-
-@divClass{keep-bullets}
-@itemize
-
-@item
-Adding @q{on} and @q{between} staff-line variants.
-
-@item
-Shorter and narrower variants of some glyphs for example, accidentals.
-Another, more specific example could be an ancient notation breve
-notehead coming in two variants one with a small or big @q{hole} within
-it.
-
-@end itemize
-@divEnd
-
-@strong{Difficulty:} easy
-@strong{Requirements:} MetaFont, C++, good eye for details
-@strong{Recommended knowledge:} basic LilyPond knowledge
-@strong{Potential Mentor:} Werner Lemberg
-
-@divEnd
-
-@divClass{column-center-middle-color3}
-@subheading Improve default beam positioning
-
-For regular, cross-staff, broken and kneed beams.  Beaming should depend
-on context and neighbor notes
-(see @uref{http://icking-music-archive.org/lists/sottisier/sottieng.pdf,
-section 2.2 here}).  If possible also reduce beaming-computation time.
-
-@strong{Difficulty:} medium
-@strong{Requirements:} C++, experience with writing heuristics
-@strong{Recommended knowledge:} aesthetic sense
-@strong{Potential Mentors:} Mike Solomon, Carl Sorensen
-
-@divEnd
-
-@divClass{column-center-middle-color3}
-@subheading Help improve compilation behavior
-
-Automatic code analysis tools, like valgrind memory leak detection or
-callgrind code profilers, provide valuable information about possible
-flaws in our C++ code.  Cleaning up warnings would allow us to automate
-the rejection of any patch which introduced extra warnings.
-
-@strong{Difficulty:} medium
-@strong{Requirements:} C++
-@strong{Potential Mentors:} Joe Neeman, Reinhold Kainhofer
+@strong{Potential Mentors:} Mike Solomon, Janek Warchoł (both not available for
+GSoC 2016)
 
 @divEnd
 
index 8596786a1a93a6adf2144e46cb159b09620c3b2e..042bdd89b8b132d15eb34621abc286441f8dbdea 100644 (file)
@@ -9,10 +9,10 @@
 @c used for news about the upcoming release; see CG 10.2
 
 @newsItem
-@subheading LilyPond 2.19.36 released  @emph{January 31, 2016}
+@subheading LilyPond 2.19.37 released  @emph{February 28, 2016}
 
 We are happy to announce the release of LilyPond
-2.19.36.  This release includes a number of enhancements, and contains some
+2.19.37.  This release includes a number of enhancements, and contains some
 work in progress.  You will have access to the very latest features, but
 some may be incomplete, and you may encounter bugs and crashes.  If you
 require a stable version of Lilypond, we recommend using the 2.18
index f6ef627fb55c46979ad16cf2949aa88f198d11df..38f8202d486977e902b4f994480ba783f84db555 100644 (file)
@@ -26,6 +26,18 @@ NOTE:
   * don't duplicate entries from news-front.itexi
 @end ignore
 
+@newsItem
+@subheading LilyPond 2.19.36 released  @emph{January 31, 2016}
+
+We are happy to announce the release of LilyPond
+2.19.36.  This release includes a number of enhancements, and contains some
+work in progress.  You will have access to the very latest features, but
+some may be incomplete, and you may encounter bugs and crashes.  If you
+require a stable version of Lilypond, we recommend using the 2.18
+version.
+
+@newsEnd
+
 @newsItem
 @subheading LilyPond 2.19.35 released  @emph{January 02, 2016}
 
diff --git a/VERSION b/VERSION
index 9cd0ed40f57c605d80848f11057242fbac643b29..2ebe46f4715ad3d0f475a4c4a39da83a1dbe8e20 100644 (file)
--- a/VERSION
+++ b/VERSION
@@ -1,7 +1,7 @@
 PACKAGE_NAME=LilyPond
 MAJOR_VERSION=2
 MINOR_VERSION=19
-PATCH_LEVEL=37
+PATCH_LEVEL=38
 MY_PATCH_LEVEL=
 VERSION_STABLE=2.18.2
-VERSION_DEVEL=2.19.36
+VERSION_DEVEL=2.19.37
index ca151e70f3f4fdfca196a9bb671ba177e1024da8..f5ec4c25abf0319f81c83967fa3df57c4727e441 100644 (file)
@@ -237,8 +237,8 @@ STEPMAKE_PROGS(MAKEINFO, makeinfo, REQUIRED, 4.11)
 STEPMAKE_PROGS(TEXI2HTML, texi2html, $DOCUMENTATION_REQUIRED, 1.82)
 STEPMAKE_PROGS(DBLATEX, dblatex, $DOCUMENTATION_REQUIRED, 0.1.4)
 STEPMAKE_PROGS(BIBTEX, bibtex, $DOCUMENTATION_REQUIRED)
-STEPMAKE_PROGS(PDFLATEX, pdflatex, $DOCUMENTATION_REQUIRED)
-STEPMAKE_PROGS(PDFTEX, pdfetex pdftex etex, $DOCUMENTATION_REQUIRED)
+STEPMAKE_PROGS(PDFLATEX, xelatex pdflatex, $DOCUMENTATION_REQUIRED)
+STEPMAKE_PROGS(PDFTEX, xetex pdfetex pdftex etex, $DOCUMENTATION_REQUIRED)
 STEPMAKE_PROGS(TEXI2PDF, texi2pdf, $DOCUMENTATION_REQUIRED)
 STEPMAKE_PROGS(TEXINDEX, texindex, $DOCUMENTATION_REQUIRED)
 AC_MSG_CHECKING(for epsf.tex)
diff --git a/input/regression/tablature-additional-bass-strings.ly b/input/regression/tablature-additional-bass-strings.ly
new file mode 100644 (file)
index 0000000..a094f9a
--- /dev/null
@@ -0,0 +1,38 @@
+\version "2.19.37"
+
+\header
+{
+  texidoc = "Additional bass strings (for baroque lute, etc.) are supported in
+  TabStaff.  They are printed below lowest line as: a, /a, //a, ///a, 4, 5 etc.
+  @code{additionalBassStrings} needs to be set accordingly."
+}
+
+m = { e' b g d a, e, d, c, b,,\9 a,, g,, }
+mus = { \m \bar "||" \transpose c cis \m \bar "|." }
+
+\score {
+  <<
+    \new Staff { \clef bass \cadenzaOn  \mus }
+    %% FretBoards with `additionalBassStrings' return weird output
+    %% A warning is thrown if uncommented
+    %\new FretBoards \mus
+    \new TabStaff { \mus }
+  >>
+  \layout {
+    \context {
+      \Score
+      tablatureFormat = #fret-letter-tablature-format
+    }
+    \context {
+      \FretBoards
+      stringTunings = \stringTuning <e, a, d g b e'>
+      additionalBassStrings = \stringTuning <g,, a,, b,, c, d,>
+    }
+    \context {
+      \TabStaff
+      stringTunings = \stringTuning <e, a, d g b e'>
+      additionalBassStrings = \stringTuning <g,, a,, b,, c, d,>
+      fretLabels = #'("a" "b" "r" "d" "e" "f" "g" "h" "i" "k")
+    }
+  }
+}
index c88e4cccc1e8f6f391937e9a87cca340a1ab6a06..34a985d32da3cd1b16f2dda5e7bb2ff5a93fd5b2 100644 (file)
@@ -164,7 +164,7 @@ Completion_heads_engraver::make_note_head (Stream_event *ev)
   Item *note = make_item ("NoteHead", ev->self_scm ());
   Pitch *pit = unsmob<Pitch> (ev->get_property ("pitch"));
 
-  int pos = pit->steps ();
+  int pos = pit ? pit->steps () : 0;
   SCM c0 = get_property ("middleCPosition");
   if (scm_is_number (c0))
     pos += scm_to_int (c0);
index 23d7fd9fc2701b0f795d024b70326d44c164dc21..7891a1b9eb8fe17f44409f314ef6be32fe4d229c 100644 (file)
@@ -137,9 +137,9 @@ Engraver::internal_make_grob (SCM symbol,
 
 #ifdef DEBUG
   if (ly_is_procedure (creation_callback))
-    scm_apply_0 (creation_callback,
-                 scm_list_n (grob->self_scm (), scm_from_utf8_string (file),
-                             scm_from_int (line), scm_from_ascii_string (fun), SCM_UNDEFINED));
+    scm_call_4 (creation_callback,
+                grob->self_scm (), scm_from_utf8_string (file),
+                scm_from_int (line), scm_from_ascii_string (fun));
 #endif
 
   return grob;
index 843420c9dff1b10d929774e0aeb09d564c6ff3ca..3d5fa39a074314ddd4413e4ad3a2c75113b0be36 100644 (file)
@@ -32,7 +32,7 @@ internal_add_interface (SCM a, SCM b, SCM c)
       scm_permanent_object (tab);
     }
 
-  SCM entry = scm_list_n (a, b, c, SCM_UNDEFINED);
+  SCM entry = scm_list_3 (a, b, c);
 
   scm_hashq_set_x (all_ifaces, a, entry);
 }
index 5842662757b4650bba19c7fd5f68f5fd8f0dbe97..1129e481571672c1170c3a9e7da4e7ff30b24762 100644 (file)
@@ -94,10 +94,9 @@ Grob::instrumented_set_property (SCM sym, SCM v,
 SCM
 Grob::get_property_alist_chain (SCM def) const
 {
-  return scm_list_n (mutable_property_alist_,
+  return scm_list_3 (mutable_property_alist_,
                      immutable_property_alist_,
-                     def,
-                     SCM_UNDEFINED);
+                     def);
 }
 
 extern void check_interfaces_for_property (Grob const *me, SCM sym);
@@ -248,12 +247,11 @@ Grob::try_callback_on_alist (SCM *alist, SCM sym, SCM proc)
     {
 #ifdef DEBUG
       if (ly_is_procedure (cache_callback))
-        scm_apply_0 (cache_callback,
-                     scm_list_n (self_scm (),
-                                 sym,
-                                 proc,
-                                 value,
-                                 SCM_UNDEFINED));
+        scm_call_4 (cache_callback,
+                    self_scm (),
+                    sym,
+                    proc,
+                    value);
 #endif
       internal_set_value_on_alist (alist, sym, value);
     }
index b25ead9de5b4cc02f684d49a1209ea62a26be3dd..c904dc3347fa457ad469aa04ad736a679a3dd835 100644 (file)
@@ -48,9 +48,6 @@ public:
   Moment start_mom () const;
   void print () const;
 
-  /// Transpose, with the interval central C to #p#
-  void transpose (Pitch p);
-
   /// Scale the music in time by #factor#.
   void compress (Moment factor);
 
@@ -77,7 +74,4 @@ SCM ly_camel_case_2_lisp_identifier (SCM name_sym);
 
 extern SCM ly_music_p_proc;
 
-/* common transposition function for music and event */
-void transpose_mutable (SCM alist, Pitch delta);
-
 #endif /* MUSIC_HH */
index 7a06e4773705cc301e4add6dc0b93dca1fc5104d..cb850555fb414983ff0024c502fd66a0da920336 100644 (file)
@@ -20,6 +20,7 @@
 #ifndef PROPERTY_OBJECT_HH
 #define PROPERTY_OBJECT_HH
 
+#include "pitch.hh"
 #include "stencil.hh"
 #include "virtual-methods.hh"
 
@@ -61,6 +62,12 @@ public:
   SCM internal_get_property (SCM sym) const;
   void instrumented_set_property (SCM, SCM, const char *, int, const char *);
   void internal_set_property (SCM sym, SCM val);
+
+  // Needed in both Music and Stream_event
+  // For technical reasons defined in lily/music.cc
+  //
+  /// Transpose, with the interval central C to #p#
+  void transpose (Pitch p);
 };
 
 
index bad54405eb0b4d73b039493f6c8eeacc902b049e..35aa926720f979f812fde1f0ec04b3a4f6ab1976 100644 (file)
@@ -75,11 +75,10 @@ Lookup::beam (Real slope, Real width, Real thick, Real blot)
                      scm_cons (scm_from_double (p[Y_AXIS]),
                                points));
 
-  SCM expr = scm_list_n (ly_symbol2scm ("polygon"),
+  SCM expr = scm_list_4 (ly_symbol2scm ("polygon"),
                          ly_quote_scm (points),
                          scm_from_double (blot),
-                         SCM_BOOL_T,
-                         SCM_UNDEFINED);
+                         SCM_BOOL_T);
 
   return Stencil (b, expr);
 }
@@ -373,11 +372,10 @@ Lookup::round_filled_polygon (vector<Offset> const &points,
     }
   shrunk_box.widen (0.5*blotdiameter, 0.5*blotdiameter);
   box.unite (shrunk_box);
-  SCM polygon_scm = scm_list_n (ly_symbol2scm ("polygon"),
+  SCM polygon_scm = scm_list_4 (ly_symbol2scm ("polygon"),
                                 ly_quote_scm (shrunk_points_scm),
                                 scm_from_double (blotdiameter),
-                                SCM_BOOL_T,
-                                SCM_UNDEFINED);
+                                SCM_BOOL_T);
 
   Stencil polygon = Stencil (box, polygon_scm);
   return polygon;
index d280953714b820c25513cd4e54ddf89b84b2ba80..644ba9beb727e5982603ba69485a1c4dfdda15b2 100644 (file)
@@ -30,7 +30,8 @@ void
 transpose_music_list (SCM lst, Pitch rq)
 {
   for (SCM s = lst; scm_is_pair (s); s = scm_cdr (s))
-    unsmob<Music> (scm_car (s))->transpose (rq);
+    if (Prob *p = unsmob<Prob> (scm_car (s)))
+      p->transpose (rq);
 }
 
 Moment
index 60d33436b98bf1ea17cc2bad6475a222e8b60c45..bbf7fe4f585da5c8ed909088627346767bb1971d 100644 (file)
@@ -198,10 +198,14 @@ Music::compress (Moment factor)
 /*
   This mutates alist.  Hence, make sure that it is not shared
 */
+
 void
-transpose_mutable (SCM alist, Pitch delta)
+Prob::transpose (Pitch delta)
 {
-  for (SCM s = alist; scm_is_pair (s); s = scm_cdr (s))
+  if (to_boolean (get_property ("untransposable")))
+    return;
+
+  for (SCM s = mutable_property_alist_; scm_is_pair (s); s = scm_cdr (s))
     {
       SCM entry = scm_car (s);
       SCM prop = scm_car (entry);
@@ -220,7 +224,7 @@ transpose_mutable (SCM alist, Pitch delta)
         }
       else if (scm_is_eq (prop, ly_symbol2scm ("element")))
         {
-          if (Music *m = unsmob<Music> (val))
+          if (Prob *m = unsmob<Prob> (val))
             m->transpose (delta);
         }
       else if (scm_is_eq (prop, ly_symbol2scm ("elements"))
@@ -235,15 +239,6 @@ transpose_mutable (SCM alist, Pitch delta)
     }
 }
 
-void
-Music::transpose (Pitch delta)
-{
-  if (to_boolean (get_property ("untransposable")))
-    return;
-
-  transpose_mutable (mutable_property_alist_, delta);
-}
-
 void
 Music::set_spot (Input ip)
 {
index f09b437fa3a5b43709b033f7bbea22357f2e737b..3e7625f45f8cafbbe578bfa803e2d2a4819bedbe 100644 (file)
@@ -232,7 +232,7 @@ SCM loc_on_music (Lily_parser *parser, Input loc, SCM arg);
 SCM make_chord_elements (Input loc, SCM pitch, SCM dur, SCM modification_list);
 SCM make_chord_step (SCM step, Rational alter);
 SCM make_simple_markup (SCM a);
-SCM make_duration (SCM t, int dots = 0);
+SCM make_duration (SCM t, int dots = 0, SCM factor = SCM_UNDEFINED);
 bool is_regular_identifier (SCM id, bool multiple=false);
 SCM try_string_variants (SCM pred, SCM str);
 int yylex (YYSTYPE *s, YYLTYPE *loc, Lily_parser *parser);
@@ -347,7 +347,8 @@ If we give names, Bison complains.
 %token CHORD_REPETITION
 %token CONTEXT_MOD_IDENTIFIER
 %token DRUM_PITCH
-%token PITCH_IDENTIFIER
+ /* Artificial token for durations in argument lists */
+%token DURATION_ARG
 %token DURATION_IDENTIFIER
 %token EVENT_IDENTIFIER
 %token EVENT_FUNCTION
@@ -361,6 +362,7 @@ If we give names, Bison complains.
 %token MUSIC_IDENTIFIER
 %token NOTENAME_PITCH
 %token NUMBER_IDENTIFIER
+%token PITCH_IDENTIFIER
 %token REAL
 %token RESTNAME
 %token SCM_ARG
@@ -1756,7 +1758,11 @@ function_arglist_nonbackup:
                                               (parser, @3, $3),
                                               $1, $2);
        }
-       | function_arglist_nonbackup_reparse REPARSE duration_length
+       | function_arglist_nonbackup_reparse REPARSE multiplied_duration
+       {
+               $$ = check_scheme_arg (parser, @3, $3, $1, $2);
+       }
+       | function_arglist_nonbackup_reparse REPARSE reparsed_rhythm
        {
                $$ = check_scheme_arg (parser, @3, $3, $1, $2);
        }
@@ -1778,6 +1784,20 @@ function_arglist_nonbackup:
        }
        ;
 
+
+reparsed_rhythm:
+       DURATION_ARG dots multipliers post_events
+       {
+               $$ = make_music_from_simple (parser, @$,
+                                            make_duration ($1, scm_to_int ($2), $3));
+               Music *m = unsmob<Music> ($$);
+               assert (m);
+               if (scm_is_pair ($4))
+                       m->set_property ("articulations",
+                                        scm_reverse_x ($4, SCM_EOL));
+       } %prec ':'
+       ;
+
 function_arglist_nonbackup_reparse:
        EXPECT_OPTIONAL EXPECT_SCM function_arglist_nonbackup SCM_IDENTIFIER
        {
@@ -1852,18 +1872,34 @@ function_arglist_nonbackup_reparse:
        {
                $$ = $3;
                if (scm_is_true (scm_call_1 ($2, $4)))
+                       // May be 3 \cm or similar
                        MYREPARSE (@4, $2, REAL, $4);
                else {
                        SCM d = make_duration ($4);
-                       if (SCM_UNBNDP (d) || scm_is_false (scm_call_1 ($2, d)))
-                               MYREPARSE (@4, $2, REAL, $4); // trigger error
-                       else
-                               MYREPARSE (@4, $2, DURATION_IDENTIFIER, d);
+                       if (!SCM_UNBNDP (d)) {
+                               if (scm_is_true (scm_call_1 ($2, d)))
+                                       MYREPARSE (@4, $2, DURATION_IDENTIFIER, d);
+                               else if (scm_is_true
+                                        (scm_call_1
+                                         ($2, make_music_from_simple (parser, @4, d))))
+                                       MYREPARSE (@4, $2, DURATION_ARG, d);
+                               else
+                                       MYREPARSE (@4, $2, SCM_ARG, $4); // trigger error
+                       } else
+                               MYREPARSE (@4, $2, SCM_ARG, $4); // trigger error
                }
        }
-       | EXPECT_OPTIONAL EXPECT_SCM function_arglist_nonbackup DURATION_IDENTIFIER {
+       | EXPECT_OPTIONAL EXPECT_SCM function_arglist_nonbackup DURATION_IDENTIFIER
+       {
                $$ = $3;
-               MYREPARSE (@4, $2, DURATION_IDENTIFIER, $4);
+               if (scm_is_true (scm_call_1 ($2, $4)))
+                       MYREPARSE (@4, $2, DURATION_IDENTIFIER, $4);
+               else if (scm_is_true
+                        (scm_call_1
+                         ($2, make_music_from_simple (parser, @4, $4))))
+                       MYREPARSE (@4, $2, DURATION_ARG, $4);
+               else
+                       MYREPARSE (@4, $2, SCM_ARG, $4); // trigger error
        }
        ;
 
@@ -1940,19 +1976,26 @@ function_arglist_backup:
        }
        | EXPECT_OPTIONAL EXPECT_SCM function_arglist_backup UNSIGNED
        {
+               $$ = $3;
                if (scm_is_true (scm_call_1 ($2, $4)))
-               {
+                       // May be 3 \cm or similar
                        MYREPARSE (@4, $2, REAL, $4);
-                       $$ = $3;
-               } else {
+               else {
                        SCM d = make_duration ($4);
-                       if (SCM_UNBNDP (d) || scm_is_false (scm_call_1 ($2, d)))
-                       {
+                       if (!SCM_UNBNDP (d)) {
+                               if (scm_is_true (scm_call_1 ($2, d)))
+                                       MYREPARSE (@4, $2, DURATION_IDENTIFIER, d);
+                               else if (scm_is_true
+                                        (scm_call_1
+                                         ($2, make_music_from_simple (parser, @4, d))))
+                                       MYREPARSE (@4, $2, DURATION_ARG, d);
+                               else {
+                                       $$ = scm_cons (loc_on_music (parser, @3, $1), $3);
+                                       MYBACKUP (UNSIGNED, $4, @4);
+                               }
+                       } else {
                                $$ = scm_cons (loc_on_music (parser, @3, $1), $3);
                                MYBACKUP (UNSIGNED, $4, @4);
-                       } else {
-                               MYREPARSE (@4, $2, DURATION_IDENTIFIER, d);
-                               $$ = $3;
                        }
                }
        }
@@ -2019,11 +2062,14 @@ function_arglist_backup:
        }
        | EXPECT_OPTIONAL EXPECT_SCM function_arglist_backup DURATION_IDENTIFIER
        {
+               $$ = $3;
                if (scm_is_true (scm_call_1 ($2, $4)))
-               {
                        MYREPARSE (@4, $2, DURATION_IDENTIFIER, $4);
-                       $$ = $3;
-               } else {
+               else if (scm_is_true
+                        (scm_call_1
+                         ($2, make_music_from_simple (parser, @4, $4))))
+                       MYREPARSE (@4, $2, DURATION_ARG, $4);
+               else {
                        $$ = scm_cons (loc_on_music (parser, @3, $1), $3);
                        MYBACKUP (DURATION_IDENTIFIER, $4, @4);
                }
@@ -2073,7 +2119,12 @@ function_arglist_backup:
                $$ = check_scheme_arg (parser, @3,
                                       $3, $1, $2);
        }
-       | function_arglist_backup REPARSE duration_length
+       | function_arglist_backup REPARSE multiplied_duration
+       {
+               $$ = check_scheme_arg (parser, @3,
+                                      $3, $1, $2);
+       }
+       | function_arglist_backup REPARSE reparsed_rhythm
        {
                $$ = check_scheme_arg (parser, @3,
                                       $3, $1, $2);
@@ -2204,7 +2255,12 @@ function_arglist_common:
                $$ = check_scheme_arg (parser, @3,
                                       $3, $1, $2);
        }
-       | function_arglist_common_reparse REPARSE duration_length
+       | function_arglist_common_reparse REPARSE multiplied_duration
+       {
+               $$ = check_scheme_arg (parser, @3,
+                                      $3, $1, $2);
+       }
+       | function_arglist_common_reparse REPARSE reparsed_rhythm
        {
                $$ = check_scheme_arg (parser, @3,
                                       $3, $1, $2);
@@ -2292,19 +2348,34 @@ function_arglist_common_reparse:
        {
                $$ = $2;
                if (scm_is_true (scm_call_1 ($1, $3)))
+                       // May be 3 \cm or similar
                        MYREPARSE (@3, $1, REAL, $3);
                else {
                        SCM d = make_duration ($3);
-                       if (SCM_UNBNDP (d) || scm_is_false (scm_call_1 ($1, d)))
-                               MYREPARSE (@3, $1, REAL, $3);
-                       else
-                               MYREPARSE (@3, $1, DURATION_IDENTIFIER, d);
+                       if (!SCM_UNBNDP (d)) {
+                               if (scm_is_true (scm_call_1 ($1, d)))
+                                       MYREPARSE (@3, $1, DURATION_IDENTIFIER, d);
+                               else if (scm_is_true
+                                        (scm_call_1
+                                         ($1, make_music_from_simple (parser, @3, d))))
+                                       MYREPARSE (@3, $1, DURATION_ARG, d);
+                               else
+                                       MYREPARSE (@3, $1, SCM_ARG, $3); // trigger error
+                       } else
+                               MYREPARSE (@3, $1, SCM_ARG, $3); // trigger error
                }
        }
        | EXPECT_SCM function_arglist_optional DURATION_IDENTIFIER
        {
                $$ = $2;
-               MYREPARSE (@3, $1, DURATION_IDENTIFIER, $3);
+               if (scm_is_true (scm_call_1 ($1, $3)))
+                       MYREPARSE (@3, $1, DURATION_IDENTIFIER, $3);
+               else if (scm_is_true
+                        (scm_call_1
+                         ($1, make_music_from_simple (parser, @3, $3))))
+                       MYREPARSE (@3, $1, DURATION_ARG, $3);
+               else
+                       MYREPARSE (@3, $1, SCM_ARG, $3); // trigger error
        }
        | EXPECT_SCM function_arglist_optional '-' UNSIGNED
        {
@@ -3179,12 +3250,6 @@ script_dir:
        | '-'   { $$ = SCM_UNDEFINED; }
        ;
 
-duration_length:
-       multiplied_duration {
-               $$ = $1;
-       }
-       ;
-
 maybe_notemode_duration:
        {
                $$ = SCM_UNDEFINED;
@@ -3214,26 +3279,13 @@ steno_duration:
                }
        }
        | DURATION_IDENTIFIER dots      {
-               Duration *d = unsmob<Duration> ($1);
-               Duration k (d->duration_log (),
-                            d->dot_count () + scm_to_int ($2));
-               k = k.compressed (d->factor ());
-                scm_remember_upto_here_1 ($1);
-               $$ = k.smobbed_copy ();
+               $$ = make_duration ($1, scm_to_int ($2));
        }
        ;
 
 multiplied_duration:
-       steno_duration {
-               $$ = $1;
-       }
-       | multiplied_duration '*' UNSIGNED {
-               $$ = unsmob<Duration> ($$)->compressed (scm_to_int ($3)).smobbed_copy ();
-       }
-       | multiplied_duration '*' FRACTION {
-               Rational  m (scm_to_int (scm_car ($3)), scm_to_int (scm_cdr ($3)));
-
-               $$ = unsmob<Duration> ($$)->compressed (m).smobbed_copy ();
+       steno_duration multipliers {
+               $$ = make_duration ($1, 0, $2);
        }
        ;
 
@@ -3246,6 +3298,28 @@ dots:
        }
        ;
 
+multipliers:
+       /* empty */
+       {
+               $$ = SCM_UNDEFINED;
+       }
+       | multipliers '*' UNSIGNED
+       {
+               if (!SCM_UNBNDP ($1))
+                       $$ = scm_product ($1, $3);
+               else
+                       $$ = $3;
+       }
+       | multipliers '*' FRACTION
+       {
+               if (!SCM_UNBNDP ($1))
+                       $$ = scm_product ($1, scm_divide (scm_car ($3),
+                                                         scm_cdr ($3)));
+               else
+                       $$ = scm_divide (scm_car ($3), scm_cdr ($3));
+       }
+       ;
+
 tremolo_type:
        ':'     {
                $$ = scm_from_int (parser->default_tremolo_type_);
@@ -4092,6 +4166,14 @@ make_music_from_simple (Lily_parser *parser, Input loc, SCM simple)
                        n->set_property ("pitch", simple);
                        return n->unprotect ();
                }
+               SCM d = simple;
+               if (scm_is_integer (simple))
+                       d = make_duration (simple);
+               if (unsmob<Duration> (d)) {
+                       Music *n = MY_MAKE_MUSIC ("NoteEvent", loc);
+                       n->set_property ("duration", d);
+                       return n->unprotect ();
+               }
                return simple;
        } else if (parser->lexer_->is_lyric_state ()) {
                if (Text_interface::is_markup (simple))
@@ -4124,13 +4206,29 @@ make_simple_markup (SCM a)
 }
 
 SCM
-make_duration (SCM d, int dots)
+make_duration (SCM d, int dots, SCM factor)
 {
-       int t = scm_to_int (d);
-       if (t > 0 && (t & (t-1)) == 0)
-               return Duration (intlog2 (t), dots).smobbed_copy ();
-       else
-               return SCM_UNDEFINED;
+       Duration k;
+
+       if (Duration *dur = unsmob<Duration> (d)) {
+               if (!dots && SCM_UNBNDP (factor))
+                       return d;
+               k = *dur;
+               if (dots)
+                       k = Duration (k.duration_log (), k.dot_count () + dots)
+                               .compressed (k.factor ());
+       } else {
+               int t = scm_to_int (d);
+               if (t > 0 && (t & (t-1)) == 0)
+                       k = Duration (intlog2 (t), dots);
+               else
+                       return SCM_UNDEFINED;
+       }
+
+       if (!SCM_UNBNDP (factor))
+               k = k.compressed (ly_scm2rational (factor));
+
+       return k.smobbed_copy ();
 }
 
 SCM
index c4336250111170df3e40d0d58085cb645403ef37..885e1bd3b658ef593f0418a19b66449a881a0e77 100644 (file)
@@ -277,8 +277,7 @@ Quote_iterator::process (Moment m)
                   Pitch diff = pitch_interval (mp, qp);
                   ev = ev->clone ();
                   ev->make_transposable ();
-
-                  transpose_mutable (ev->get_property_alist (true), diff);
+                  ev->transpose (diff);
                   transposed_musics_ = scm_cons (ev->unprotect (), transposed_musics_);
                 }
               quote_outlet_.get_context ()->event_source ()->broadcast (ev);
index 987a879053dd808f7775c4b52ae94eb1d7438b09..3da186954132a5cfc3940471e116671bac07faf0 100644 (file)
@@ -104,10 +104,10 @@ Stencil::rotate_degrees_absolute (Real a, Offset absolute_off)
    *         *this = rotated()
    */
 
-  expr_ = scm_list_n (ly_symbol2scm ("rotate-stencil"),
+  expr_ = scm_list_3 (ly_symbol2scm ("rotate-stencil"),
                       scm_list_2 (scm_from_double (a),
                                   scm_cons (scm_from_double (x), scm_from_double (y))),
-                      expr_, SCM_UNDEFINED);
+                      expr_);
 
   /*
    * Calculate the new bounding box
@@ -167,9 +167,9 @@ Stencil::translate (Offset o)
     }
 
   if (!scm_is_null (expr_))
-    expr_ = scm_list_n (ly_symbol2scm ("translate-stencil"),
+    expr_ = scm_list_3 (ly_symbol2scm ("translate-stencil"),
                         ly_offset2scm (o),
-                        expr_, SCM_UNDEFINED);
+                        expr_);
   dim_.translate (o);
 }
 
index 85a2c127ab6b570da98256a930b9e1d0bd0bd794..d12660579519601dfb43aff0a1ebd31be75b3478 100644 (file)
@@ -129,7 +129,7 @@ Volta_repeat_iterator::next_element (bool side_effect)
           else
             {
 
-              add_repeat_command (scm_list_n (ly_symbol2scm ("volta"), SCM_BOOL_F, SCM_UNDEFINED));
+              add_repeat_command (scm_list_2 (ly_symbol2scm ("volta"), SCM_BOOL_F));
 
               if (done_count_ - 1 < alt_count_)
                 {
@@ -148,8 +148,8 @@ Volta_repeat_iterator::next_element (bool side_effect)
             repstr = "1.--" + ::to_string (rep_count_ - alt_count_ + done_count_) + ".";
 
           if (done_count_ <= alt_count_)
-            add_repeat_command (scm_list_n (ly_symbol2scm ("volta"),
-                                            ly_string2scm (repstr), SCM_UNDEFINED));
+            add_repeat_command (scm_list_2 (ly_symbol2scm ("volta"),
+                                            ly_string2scm (repstr)));
         }
       else
         add_repeat_command (ly_symbol2scm ("end-repeat"));
index a36bc5e8f0ba7e5092227aea60261fb65e018cc5..df4d9c389b655d41b4bb8883fbb06e6334b39529 100644 (file)
@@ -23,7 +23,7 @@ That's it.  For more information, visit http://lilypond.org .
 
 %}
 
-\version "2.19.36"  % necessary for upgrading to future LilyPond versions.
+\version "2.19.37"  % necessary for upgrading to future LilyPond versions.
 
 \header{
   title = "A scale in LilyPond"
index 4d27606c5239cc3052308908c89782db7d27ad5a..5149a93d3d611bc1436a7ae2ac9ecdef43467431 100644 (file)
@@ -32,7 +32,7 @@ Good luck with LilyPond!  Happy engraving.
 
 %}
 
-\version "2.19.36"  % necessary for upgrading to future LilyPond versions.
+\version "2.19.37"  % necessary for upgrading to future LilyPond versions.
 
 \header{
   title = "A scale in LilyPond"
index 62559ca40fb6df178f3ab3b9d18954e6ad50769f..4d35598887d5c39db36d29f05e14aa718050e415 100644 (file)
   \accepts "ChoirStaff"
   \accepts "ChordNames"
   \accepts "DrumStaff"
+  \accepts "Dynamics"
   \accepts "FiguredBass"
   \accepts "GrandStaff"
   \accepts "Lyrics"
index 91af9420db648b99cca1a9741fd9fe7c588da2bf..82ab63ed9fbda0c12f8ebd1962e604a9a81c938c 100644 (file)
@@ -6,10 +6,10 @@
 #, fuzzy
 msgid ""
 msgstr ""
-"Project-Id-Version: lilypond 2.19.36\n"
+"Project-Id-Version: lilypond 2.19.37\n"
 "Report-Msgid-Bugs-To: http://post.gmane.org/post.php?group=gmane.comp.gnu."
 "lilypond.bugs\n"
-"POT-Creation-Date: 2016-01-31 16:19+0000\n"
+"POT-Creation-Date: 2016-02-28 13:14+0000\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -3417,27 +3417,27 @@ msgstr ""
 msgid "no systems found in \\score markup, does it have a \\layout block?"
 msgstr ""
 
-#: define-markup-commands.scm:3112
+#: define-markup-commands.scm:3122
 #, scheme-format
 msgid "Cannot find glyph ~a"
 msgstr ""
 
-#: define-markup-commands.scm:3588
+#: define-markup-commands.scm:3598
 #, scheme-format
 msgid "no brace found for point size ~S "
 msgstr ""
 
-#: define-markup-commands.scm:3589
+#: define-markup-commands.scm:3599
 #, scheme-format
 msgid "defaulting to ~S pt"
 msgstr ""
 
-#: define-markup-commands.scm:3847
+#: define-markup-commands.scm:3857
 #, scheme-format
 msgid "not a valid duration string: ~a"
 msgstr ""
 
-#: define-markup-commands.scm:4060
+#: define-markup-commands.scm:4070
 #, scheme-format
 msgid "not a valid duration string: ~a - ignoring"
 msgstr ""
@@ -3893,7 +3893,7 @@ msgstr ""
 msgid "No string for pitch ~a (given frets ~a)"
 msgstr ""
 
-#: translation-functions.scm:587
+#: translation-functions.scm:598
 #, scheme-format
 msgid ""
 "No label for fret ~a (on string ~a);\n"
index 6eb3b45aba21ca1aa89a0fc7fdf96373b649d4aa..a061b6ea6eee0ba2deec281554413a061e978242 100644 (file)
@@ -143,6 +143,7 @@ class Music_xml_node (Xml_node):
         Xml_node.__init__ (self)
         self.duration = Rational (0)
         self.start = Rational (0)
+        self.voice_id = None;
 
 class Work (Xml_node):
     def get_work_information (self, tag):
@@ -282,11 +283,11 @@ class Unpitched (Music_xml_node):
 
 class Measure_element (Music_xml_node):
     def get_voice_id (self):
-        voice_id = self.get_maybe_exist_named_child ('voice')
-        if voice_id:
-            return voice_id.get_text ()
+        voice = self.get_maybe_exist_named_child ('voice')
+        if voice:
+            return voice.get_text ()
         else:
-            return None
+            return self.voice_id;
 
     def is_first (self):
         # Look at all measure elements (previously we had self.__class__, which
@@ -657,7 +658,25 @@ class Part (Music_xml_node):
                 measure_start_moment = now
                 measure_position = Rational (0)
 
+            voice_id = None;
+            assign_to_next_voice = []
             for n in m.get_all_children ():
+                # assign a voice to all measure elements
+                if (n.get_name() == 'backup'):
+                    voice_id = None;
+
+                if isinstance(n, Measure_element):
+                    if n.get_voice_id ():
+                        voice_id = n.get_voice_id ()
+                        for i in assign_to_next_voice:
+                            i.voice_id = voice_id
+                        assign_to_next_voice = []
+                    else:
+                        if voice_id:
+                            n.voice_id = voice_id
+                        else:
+                            assign_to_next_voice.append (n)
+
                 # figured bass has a duration, but applies to the next note
                 # and should not change the current measure position!
                 if isinstance (n, FiguredBass):
@@ -862,15 +881,10 @@ class Part (Music_xml_node):
                 continue
 
             if isinstance (n, Direction):
-                staff_id = n.get_maybe_exist_named_child (u'staff')
-                if staff_id:
-                    staff_id = staff_id.get_text ()
-                if staff_id:
-                    dir_voices = staff_to_voice_dict.get (staff_id, voices.keys ())
+                if (n.voice_id):
+                    voices[n.voice_id].add_element (n)
                 else:
-                    dir_voices = voices.keys ()
-                for v in dir_voices:
-                    voices[v].add_element (n)
+                    assign_to_next_note.append (n)
                 continue
 
             if isinstance (n, Harmony) or isinstance (n, FiguredBass):
@@ -1069,7 +1083,7 @@ class Grace (Music_xml_node):
 class Staff (Music_xml_node):
     pass
 
-class Direction (Music_xml_node):
+class Direction (Measure_element):
     pass
 class DirType (Music_xml_node):
     pass
index 3c9e159eb57e9b406b3283a11b17444104c09c42..3ee68e5e6a5ebceba368c151b01e13effddc64aa 100644 (file)
@@ -48,6 +48,9 @@
 on the same note in different octaves may be horizontally staggered
 if in different voices.")
      (aDueText ,markup? "Text to print at a unisono passage.")
+     (additionalBassStrings ,list? "The additional tablature bass-strings, which
+will not get a seprate line in TabStaff.  It is a list of the pitches of each
+string (starting with the lowest numbered one).")
      (additionalPitchPrefix ,string? "Text with which to prefix
 additional pitches within a chord name.")
      (alignAboveContext ,string? "Where to insert newly created context in
index d35689d7fe6f55a6cf788edd8d7592a9abcec559..a6c84b8f6ee3b96c0c1398781ff0e5ecd2aedb5f 100644 (file)
@@ -2251,6 +2251,16 @@ Set the dimensions of @var{arg} to @var{x} and@tie{}@var{y}."
       `(delay-stencil-evaluation ,(delay expr))
       x y))))
 
+(define-markup-command (with-dimensions-from layout props arg1 arg2)
+  (markup? markup?)
+  #:category other
+  "
+Print @var{arg2} with the dimensions of @var{arg1}."
+  (let* ((stil1 (interpret-markup layout props arg1))
+         (x (ly:stencil-extent stil1 0))
+         (y (ly:stencil-extent stil1 1)))
+    (interpret-markup layout props (markup #:with-dimensions x y arg2))))
+
 (define-markup-command (pad-around layout props amount arg)
   (number? markup?)
   #:category align
index f10809d00aa45ffb2f06b27977635caa467b3470..859efcd46ef5c87c935d25dd3199d2aba3a19b2d 100644 (file)
@@ -254,12 +254,15 @@ used.  This is used to select the proper design size for the text fonts.
 ; are aliases that are defined in mf/00-lilypond-fonts.conf.in (source file)
 ; or fonts/00-lilypond-fonts.conf (installed file).
 
-(define*-public (set-global-fonts #:key 
+(define*-public (set-global-fonts #:key
   (music "emmentaler")
   (brace "emmentaler")
-  (roman "LilyPond Serif")
-  (sans "LilyPond Sans Serif")
-  (typewriter "LilyPond Monospace")
+  (roman (if (eq? (ly:get-option 'backend) 'svg)
+             "serif" "LilyPond Serif"))
+  (sans (if (eq? (ly:get-option 'backend) 'svg)
+            "sans-serif" "LilyPond Sans Serif"))
+  (typewriter (if (eq? (ly:get-option 'backend) 'svg)
+                  "monospace" "LilyPond Monospace"))
   (factor 1))
   (let ((n (make-font-tree-node 'font-encoding 'fetaMusic)))
     (add-music-fonts n 'feta music brace feta-design-size-mapping factor)
@@ -267,7 +270,7 @@ used.  This is used to select the proper design size for the text fonts.
     (add-pango-fonts n 'sans sans factor)
     (add-pango-fonts n 'typewriter typewriter factor)
     n))
-    
+
 (define-public (make-pango-font-tree roman-str sans-str typewrite-str factor)
   (let ((n (make-font-tree-node 'font-encoding 'fetaMusic)))
     (add-music-fonts n 'feta "emmentaler" "emmentaler" feta-design-size-mapping factor)
@@ -278,9 +281,9 @@ used.  This is used to select the proper design size for the text fonts.
 
 (define-public (make-default-fonts-tree factor)
   (make-pango-font-tree
-   "LilyPond Serif"
-   "LilyPond Sans Serif"
-   "LilyPond Monospace"
+   (if (eq? (ly:get-option 'backend) 'svg) "serif" "LilyPond Serif")
+   (if (eq? (ly:get-option 'backend) 'svg) "sans-serif" "LilyPond Sans Serif")
+   (if (eq? (ly:get-option 'backend) 'svg) "monospace" "LilyPond Monospace")
    factor))
 
 (define-public all-text-font-encodings
index f9f532b0d0bcbc9265ee359e13a130c2ce1b037c..22f8648c31e8c0dcaacdad9a4894c6ef057bd0fc 100644 (file)
@@ -515,10 +515,18 @@ chords.  Returns a placement-list."
                  (cons tuning (map (lambda (x) (shift-octave x -1))
                                    pitches))))))))
 
+  ;; TODO: Does it make sense to have additional bass strings in a fret-diagram?
+  (if (and (not (null? rest))
+           (not (null? (ly:context-property context 'additionalBassStrings))))
+      (ly:warning "additional bass strings are not supported by FretBoards"))
+
   ;; body of determine-frets
   (let* ((predefined-fret-table
           (ly:context-property context 'predefinedDiagramTable))
-         (tunings (ly:context-property context 'stringTunings))
+         (tunings
+           (append
+             (ly:context-property context 'stringTunings)
+             (ly:context-property context 'additionalBassStrings '())))
          (string-count (length tunings))
          (grob (if (null? rest) '() (car rest)))
          (pitches (map (lambda (x) (ly:event-property x 'pitch)) notes))
@@ -576,18 +584,33 @@ chords.  Returns a placement-list."
 ;; The fret letter is taken from 'fretLabels if present
 (define-public (fret-letter-tablature-format
                 context string-number fret-number)
-  (let ((labels (ly:context-property context 'fretLabels)))
-    (make-translate-scaled-markup '(0 . -0.5)
-     (cond
-      ((= 0 (length labels))
-       (string (integer->char (+ fret-number (char->integer #\a)))))
-      ((and (<= 0 fret-number) (< fret-number (length labels)))
-       (list-ref labels fret-number))
-      (else
-       (ly:warning (_ "No label for fret ~a (on string ~a);
+  (let* ((labels (ly:context-property context 'fretLabels))
+         (string-tunings (ly:context-property context 'stringTunings))
+         (string-count (length string-tunings))
+         (letter
+           (cond
+            ((= 0 (length labels))
+             (string (integer->char (+ fret-number (char->integer #\a)))))
+            ((and (<= 0 fret-number) (< fret-number (length labels)))
+             (list-ref labels fret-number))
+            (else
+             (ly:warning
+               (_ "No label for fret ~a (on string ~a);
 only ~a fret labels provided")
-                   fret-number string-number (length labels))
-       ".")))))
+               fret-number string-number (length labels))
+             ".")))
+         (add-bass-string-nr ;; starting at zero
+           (- string-number string-count 1)))
+    (make-translate-scaled-markup '(0 . -0.5)
+      ;; For additional bass strings, we add zero up to three "/"-signs before
+      ;; the letter, even more bass strings will get numbers, starting with "4".
+      ;; In the rare case such a string isn't played open, we put out, eg."4b"
+      (make-concat-markup
+        (if (> string-number (+ string-count 4))
+            (list (number->string add-bass-string-nr)
+                  (if (zero? fret-number) "" letter))
+            (list (make-string (max 0 add-bass-string-nr) #\/)
+                  letter))))))
 
 ;; Display the fret number as a number
 (define-public (fret-number-tablature-format
@@ -635,8 +658,12 @@ only ~a fret labels provided")
 (define-public (tablature-position-on-lines context string-number)
   (let* ((string-tunings (ly:context-property context 'stringTunings))
          (string-count (length string-tunings))
+         (string-nr
+           (if (> string-number (length string-tunings))
+               (1+ (length string-tunings))
+               string-number))
          (string-one-topmost (ly:context-property context 'stringOneTopmost))
-         (staff-line (- (* 2 string-number) string-count 1)))
+         (staff-line (- (* 2 string-nr) string-count 1)))
     (if string-one-topmost
         (- staff-line)
         staff-line)))
index f140bba94b8ddb633f72e90a31d06525199c85ed..ad32213089149b43d40b13c289ff064a8ce13594 100644 (file)
@@ -3,11 +3,11 @@
 % Load plain if necessary, i.e., if running under initex.
 \expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
 %
-\def\texinfoversion{2015-12-20.12}
+\def\texinfoversion{2016-02-15.14}
 %
 % Copyright 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995,
 % 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
-% 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015
+% 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016
 % Free Software Foundation, Inc.
 %
 % This texinfo.tex file is free software: you can redistribute it and/or
@@ -1449,6 +1449,147 @@ output) for that.)}
   \let\pdfmakeoutlines = \relax
 \fi  % \ifx\pdfoutput
 
+%
+% PDF outline support for XeTeX
+%
+\ifx\XeTeXrevision\thisisundefined
+\else
+  \pdfmakepagedesttrue \relax
+  % Emulate the primitive of pdfTeX
+  \def\pdfdest name#1 xyz{%
+    \special{pdf:dest (name#1) [@thispage /XYZ @xpos @ypos]}%
+  }
+  \def\pdfmkdest#1{{%
+    % We have to set dummies so commands such as @code, and characters
+    % such as \, aren't expanded when present in a section title.
+    \indexnofonts
+    \makevalueexpandable
+    % In the case of XeTeX, xdvipdfmx converts strings to UTF-16.
+    % Therefore \txiescapepdf is not necessary.
+    \safewhatsit{\pdfdest name{#1} xyz}%
+  }}
+  %
+  \def\dopdfoutline#1#2#3#4{%
+    \edef\pdfoutlinedest{#3}%
+    \ifx\pdfoutlinedest\empty
+      \def\pdfoutlinedest{#4}%
+    \fi
+    {
+      \turnoffactive
+      % In the case of XeTeX, xdvipdfmx converts strings to UTF-16.
+      % Therefore \txiescapepdf is not necessary.
+      \special{pdf:out [-] #2 << /Title (#1) /A << /S /GoTo /D (name\pdfoutlinedest) >> >> }%
+    }
+  }
+  %
+  \def\pdfmakeoutlines{%
+    \begingroup
+      %
+      % In the case of XeTeX, counts of subentries is not necesary.
+      % Therefore, read toc only once.
+      %
+      % We use the node names as the destinations.
+      \def\partentry##1##2##3##4{}% ignore parts in the outlines
+      \def\numchapentry##1##2##3##4{%
+        \dopdfoutline{##1}{1}{##3}{##4}}%
+      \def\numsecentry##1##2##3##4{%
+        \dopdfoutline{##1}{2}{##3}{##4}}%
+      \def\numsubsecentry##1##2##3##4{%
+        \dopdfoutline{##1}{3}{##3}{##4}}%
+      \def\numsubsubsecentry##1##2##3##4{%
+        \dopdfoutline{##1}{4}{##3}{##4}}%
+      %
+      \let\appentry\numchapentry%
+      \let\appsecentry\numsecentry%
+      \let\appsubsecentry\numsubsecentry%
+      \let\appsubsubsecentry\numsubsubsecentry%
+      \let\unnchapentry\numchapentry%
+      \let\unnsecentry\numsecentry%
+      \let\unnsubsecentry\numsubsecentry%
+      \let\unnsubsubsecentry\numsubsubsecentry%
+      %
+      % In the case of XeTeX, xdvipdfmx converts strings to UTF-16.
+      % Therefore, the encoding and the language may not be considered.
+      %
+      \indexnofonts
+      \setupdatafile
+      % We can have normal brace characters in the PDF outlines, unlike
+      % Texinfo index files.  So set that up.
+      \def\{{\lbracecharliteral}%
+      \def\}{\rbracecharliteral}%
+      \catcode`\\=\active \otherbackslash
+      \input \tocreadfilename
+    \endgroup
+  }
+  {\catcode`[=1 \catcode`]=2
+   \catcode`{=\other \catcode`}=\other
+   \gdef\lbracecharliteral[{]%
+   \gdef\rbracecharliteral[}]%
+  ]
+
+  \special{pdf:docview << /PageMode /UseOutlines >> }
+  \openin 1 uptex.tex % upTeX has UTF8-UTF16 cmap
+  \ifeof 1
+    % upTeX does not exist. To use UTF8-UCS2 cmap.
+    % In this case, non-BMP characters (over U+FFFF) can not be used.
+    \special{pdf:tounicode UTF8-UCS2}
+  \else
+    % upTeX exists. To use UTF8-UTF16 cmap.
+    % Non-BMP characters (over U+FFFF) can be used.
+    \special{pdf:tounicode UTF8-UTF16}
+  \fi
+\fi
+
+%
+% @image support for XeTeX
+%
+\newif\ifxeteximgpdf
+\ifx\XeTeXrevision\thisisundefined
+\else
+  %
+  % #1 is image name, #2 width (might be empty/whitespace), #3 height (ditto).
+  \def\doxeteximage#1#2#3{%
+    \def\xeteximagewidth{#2}\setbox0 = \hbox{\ignorespaces #2}%
+    \def\xeteximageheight{#3}\setbox2 = \hbox{\ignorespaces #3}%
+    %
+    % XeTeX (and the PDF format) support .pdf, .png, .jpg (among
+    % others).  Let's try in that order, PDF first since if
+    % someone has a scalable image, presumably better to use that than a
+    % bitmap.
+    \let\xeteximgext=\empty
+    \xeteximgpdffalse
+    \begingroup
+      \openin 1 #1.pdf \ifeof 1
+        \openin 1 #1.PDF \ifeof 1
+          \openin 1 #1.png \ifeof 1
+            \openin 1 #1.jpg \ifeof 1
+              \openin 1 #1.jpeg \ifeof 1
+                \openin 1 #1.JPG \ifeof 1
+                  \errmessage{Could not find image file #1 for XeTeX}%
+                \else \gdef\xeteximgext{JPG}%
+                \fi
+              \else \gdef\xeteximgext{jpeg}%
+              \fi
+            \else \gdef\xeteximgext{jpg}%
+            \fi
+          \else \gdef\xeteximgext{png}%
+          \fi
+        \else \gdef\xeteximgext{PDF} \global\xeteximgpdftrue%
+        \fi
+      \else \gdef\xeteximgext{pdf} \global\xeteximgpdftrue%
+      \fi
+      \closein 1
+    \endgroup
+    %
+    \ifxeteximgpdf
+      \XeTeXpdffile "#1".\xeteximgext ""
+    \else
+      \XeTeXpicfile "#1".\xeteximgext ""
+    \fi
+    \ifdim \wd0 >0pt width \xeteximagewidth \fi
+    \ifdim \wd2 >0pt height \xeteximageheight \fi \relax
+  }
+\fi
 
 \message{fonts,}
 
@@ -4737,11 +4878,10 @@ end
   \def\_{\normalunderscore}%
   \def\-{}% @- shouldn't affect sorting
   %
-  \def\lbracechar{{\indexlbrace}}%
-  \def\rbracechar{{\indexrbrace}}%
-  \let\{=\lbracechar
-  \let\}=\rbracechar
-  %
+  \uccode`\1=`\{ \uppercase{\def\{{1}}%
+  \uccode`\1=`\} \uppercase{\def\}{1}}%
+  \let\lbracechar\{%
+  \let\rbracechar\}%
   %
   % Non-English letters.
   \def\AA{AA}%
@@ -4901,9 +5041,15 @@ end
   \indexdummies % Must do this here, since \bf, etc expand at this stage
   \useindexbackslash % \indexbackslash isn't defined now so it will be output 
                      % as is; and it will print as backslash.
+  % The braces around \indexbrace are recognized by texindex.
+  %
   % Get the string to sort by, by processing the index entry with all
   % font commands turned off.
   {\indexnofonts
+   \def\lbracechar{{\indexlbrace}}%
+   \def\rbracechar{{\indexrbrace}}%
+   \let\{=\lbracechar
+   \let\}=\rbracechar
    \indexnonalnumdisappear
    \xdef\indexsortkey{}%
    \let\sortas=\indexwritesortas
@@ -6049,7 +6195,13 @@ end
 \def\Yomitfromtockeyword{Yomitfromtoc}
 %
 \def\chapmacro#1#2#3{%
-  \checkenv{}% chapters, etc., should not start inside an environment.
+  \expandafter\ifx\thisenv\titlepage\else
+    \checkenv{}% chapters, etc., should not start inside an environment.
+  \fi
+  % FIXME: \chapmacro is currently called from inside \titlepage when
+  % \setcontentsaftertitlepage to print the "Table of Contents" heading, but
+  % this should probably be done by \sectionheading with an option to print
+  % in chapter size.
   %
   % Insert the first mark before the heading break (see notes for \domark).
   \let\prevchapterdefs=\lastchapterdefs
@@ -7720,7 +7872,7 @@ end
   \catcode`\_=\other
   \catcode`\|=\other
   \catcode`\~=\other
-  \ifx\declaredencoding\ascii \else \setnonasciicharscatcodenonglobal\other \fi
+  \ifx\declaredencoding\ascii \else \setcharscatcodeothernonglobal \fi
 }
 
 \def\scanargctxt{% used for copying and captions, not macros.
@@ -8526,10 +8678,6 @@ end
     }%
     \setcolor{\linkcolor}%
   \fi
-  %
-  % Float references are printed completely differently: "Figure 1.2"
-  % instead of "[somenode], p.3".  We distinguish them by the
-  % LABEL-title being set to a magic string.
   {%
     % Have to otherify everything special to allow the \csname to
     % include an _ in the xref name, etc.
@@ -8538,6 +8686,10 @@ end
     \expandafter\global\expandafter\let\expandafter\Xthisreftitle
       \csname XR#1-title\endcsname
   }%
+  %
+  % Float references are printed completely differently: "Figure 1.2"
+  % instead of "[somenode], p.3".  \iffloat distinguishes them by
+  % \Xthisreftitle being set to a magic string.
   \iffloat\Xthisreftitle
     % If the user specified the print name (third arg) to the ref,
     % print it instead of our usual "Figure 1.2".
@@ -8596,12 +8748,15 @@ end
       %
       % output the `page 3'.
       \turnoffactive \putwordpage\tie\refx{#1-pg}{}%
-           \ifx,\tokenafterxref
-      \else\ifx.\tokenafterxref
-      \else\ifx;\tokenafterxref
-      \else\ifx)\tokenafterxref
-      \else,% add a , if xref not followed by punctuation
-      \fi\fi\fi\fi
+      % Add a , if xref followed by a space
+      \if\space\noexpand\tokenafterxref ,%
+      \else\ifx\       \tokenafterxref ,% @TAB
+      \else\ifx\*\tokenafterxref ,%   @*
+      \else\ifx\ \tokenafterxref ,%   @SPACE
+      \else\ifx\
+                \tokenafterxref ,%    @NL
+      \else\ifx\tie\tokenafterxref ,% @tie
+      \fi\fi\fi\fi\fi\fi
     \fi\fi
   \fi
   \endlink
@@ -8832,7 +8987,7 @@ end
   \catcode`\\=\other
   %
   % Make the characters 128-255 be printing characters.
-  {\setnonasciicharscatcodenonglobal\other}%
+  {\setcharscatcodeothernonglobal}%
   %
   % @ is our escape character in .aux files, and we need braces.
   \catcode`\{=1
@@ -9076,12 +9231,21 @@ end
   %
   % Output the image.
   \ifpdf
+    % For pdfTeX and LuaTeX <= 0.80
     \dopdfimage{#1}{#2}{#3}%
   \else
-    % \epsfbox itself resets \epsf?size at each figure.
-    \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi
-    \setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi
-    \epsfbox{#1.eps}%
+    \ifx\XeTeXrevision\thisisundefined
+      % For epsf.tex
+      % \epsfbox itself resets \epsf?size at each figure.
+      \setbox0 = \hbox{\ignorespaces #2}%
+        \ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi
+      \setbox0 = \hbox{\ignorespaces #3}%
+        \ifdim\wd0 > 0pt \epsfysize=#3\relax \fi
+      \epsfbox{#1.eps}%
+    \else
+      % For XeTeX
+      \doxeteximage{#1}{#2}{#3}%
+    \fi
   \fi
   %
   \ifimagevmode
@@ -9428,6 +9592,70 @@ directory should work if nowhere else does.}
   \global\righthyphenmin = #3\relax
 }
 
+% XeTeX and LuaTeX can handle native Unicode.
+% Their default I/O is UTF-8 sequence instead of byte-wise.
+% Other TeX engine (pdfTeX etc.) I/O is byte-wise.
+%
+\newif\iftxinativeunicodecapable
+\newif\iftxiusebytewiseio
+
+\ifx\XeTeXrevision\thisisundefined
+  \ifx\luatexversion\thisisundefined
+    \txinativeunicodecapablefalse
+    \txiusebytewiseiotrue
+  \else
+    \txinativeunicodecapabletrue
+    \txiusebytewiseiofalse
+  \fi
+\else
+  \txinativeunicodecapabletrue
+  \txiusebytewiseiofalse
+\fi
+
+% Set I/O by bytes instead of UTF-8 sequence for XeTeX and LuaTex
+% for non-UTF-8 (byte-wise) encodings.
+%
+\def\setbytewiseio{%
+  \ifx\XeTeXrevision\thisisundefined
+  \else
+    \XeTeXdefaultencoding "bytes"  % For subsequent files to be read
+    \XeTeXinputencoding "bytes"  % For document root file
+    % Unfortunately, there seems to be no corresponding XeTeX command for
+    % output encoding.  This is a problem for auxiliary index and TOC files.
+    % The only solution would be perhaps to write out @U{...} sequences in
+    % place of non-ASCII characters.
+  \fi
+
+  \ifx\luatexversion\thisisundefined
+  \else
+    \directlua{
+    local utf8_char, byte, gsub = unicode.utf8.char, string.byte, string.gsub
+    local function convert_char (char)
+      return utf8_char(byte(char))
+    end
+
+    local function convert_line (line)
+      return gsub(line, ".", convert_char)
+    end
+
+    callback.register("process_input_buffer", convert_line)
+
+    local function convert_line_out (line)
+      local line_out = ""
+      for c in string.utfvalues(line) do
+         line_out = line_out .. string.char(c)
+      end
+      return line_out
+    end
+
+    callback.register("process_output_buffer", convert_line_out)
+    }
+  \fi
+
+  \txiusebytewiseiotrue
+}
+
+
 % Helpers for encodings.
 % Set the catcode of characters 128 through 255 to the specified number.
 %
@@ -9452,6 +9680,7 @@ directory should work if nowhere else does.}
 %
 \def\documentencoding{\parseargusing\filenamecatcodes\documentencodingzzz}
 \def\documentencodingzzz#1{%
+  %
   % Encoding being declared for the document.
   \def\declaredencoding{\csname #1.enc\endcsname}%
   %
@@ -9467,22 +9696,37 @@ directory should work if nowhere else does.}
      \asciichardefs
   %
   \else \ifx \declaredencoding \lattwo
+     \iftxinativeunicodecapable
+       \setbytewiseio
+     \fi
      \setnonasciicharscatcode\active
      \lattwochardefs
   %
   \else \ifx \declaredencoding \latone
+     \iftxinativeunicodecapable
+       \setbytewiseio
+     \fi
      \setnonasciicharscatcode\active
      \latonechardefs
   %
   \else \ifx \declaredencoding \latnine
+     \iftxinativeunicodecapable
+       \setbytewiseio
+     \fi
      \setnonasciicharscatcode\active
      \latninechardefs
   %
   \else \ifx \declaredencoding \utfeight
-     \setnonasciicharscatcode\active
-     % since we already invoked \utfeightchardefs at the top level
-     % (below), do not re-invoke it, then our check for duplicated
-     % definitions triggers.  Making non-ascii chars active is enough.
+     \iftxinativeunicodecapable
+       % For native Unicode (XeTeX and LuaTeX)
+       \nativeunicodechardefs
+     \else
+       % For UTF-8 byte sequence (TeX, eTeX and pdfTeX)
+       \setnonasciicharscatcode\active
+       % since we already invoked \utfeightchardefs at the top level
+       % (below), do not re-invoke it, then our check for duplicated
+       % definitions triggers.  Making non-ascii chars active is enough.
+     \fi
   %
   \else
     \message{Ignoring unknown document encoding: #1.}%
@@ -9797,13 +10041,26 @@ directory should work if nowhere else does.}
 % @U{xxxx} to produce U+xxxx, if we support it.
 \def\U#1{%
   \expandafter\ifx\csname uni:#1\endcsname \relax
-    \errhelp = \EMsimple       
-    \errmessage{Unicode character U+#1 not supported, sorry}%
+    \iftxinativeunicodecapable
+      % Any Unicode characters can be used by native Unicode.
+      % However, if the font does not have the glyph, the letter will miss.
+      \begingroup
+        \uccode`\.="#1\relax
+        \uppercase{.}
+      \endgroup
+    \else
+      \errhelp = \EMsimple     
+      \errmessage{Unicode character U+#1 not supported, sorry}%
+    \fi
   \else
     \csname uni:#1\endcsname
   \fi
 }
 
+% For UTF-8 byte sequence (TeX, e-TeX and pdfTeX)
+% Definition macro to replace the Unicode character
+% Definition macro that is used by @U command
+%
 \begingroup
   \catcode`\"=12
   \catcode`\<=12
@@ -9812,7 +10069,7 @@ directory should work if nowhere else does.}
   \catcode`\;=12
   \catcode`\!=12
   \catcode`\~=13
-  \gdef\DeclareUnicodeCharacter#1#2{%
+  \gdef\DeclareUnicodeCharacterUTFviii#1#2{%
     \countUTFz = "#1\relax
     %\wlog{\space\space defining Unicode char U+#1 (decimal \the\countUTFz)}%
     \begingroup
@@ -9870,6 +10127,13 @@ directory should work if nowhere else does.}
     \uppercase{\gdef\UTFviiiTmp{#2#3#4}}}
 \endgroup
 
+% For native Unicode (XeTeX and LuaTeX)
+% Definition macro that is set catcode other non global
+%
+\def\DeclareUnicodeCharacterNativeOther#1#2{%
+  \catcode"#1=\other
+}
+
 % https://en.wikipedia.org/wiki/Plane_(Unicode)#Basic_M
 % U+0000..U+007F = https://en.wikipedia.org/wiki/Basic_Latin_(Unicode_block)
 % U+0080..U+00FF = https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)
@@ -9884,684 +10148,755 @@ directory should work if nowhere else does.}
 % We won't be doing that here in this simple file.  But we can try to at
 % least make most of the characters not bomb out.
 %
-\def\utfeightchardefs{%
-  \DeclareUnicodeCharacter{00A0}{\tie}
-  \DeclareUnicodeCharacter{00A1}{\exclamdown}
+\def\unicodechardefs{%
+  \DeclareUnicodeCharacter{00A0}{\tie}%
+  \DeclareUnicodeCharacter{00A1}{\exclamdown}%
   \DeclareUnicodeCharacter{00A2}{{\tcfont \char162}}% 0242=cent
-  \DeclareUnicodeCharacter{00A3}{\pounds}
+  \DeclareUnicodeCharacter{00A3}{\pounds}%
   \DeclareUnicodeCharacter{00A4}{{\tcfont \char164}}% 0244=currency
   \DeclareUnicodeCharacter{00A5}{{\tcfont \char165}}% 0245=yen
   \DeclareUnicodeCharacter{00A6}{{\tcfont \char166}}% 0246=brokenbar
-  \DeclareUnicodeCharacter{00A7}{\S}
-  \DeclareUnicodeCharacter{00A8}{\"{ }}
-  \DeclareUnicodeCharacter{00A9}{\copyright}
-  \DeclareUnicodeCharacter{00AA}{\ordf}
-  \DeclareUnicodeCharacter{00AB}{\guillemetleft}
-  \DeclareUnicodeCharacter{00AC}{\ensuremath\lnot}
-  \DeclareUnicodeCharacter{00AD}{\-}
-  \DeclareUnicodeCharacter{00AE}{\registeredsymbol}
-  \DeclareUnicodeCharacter{00AF}{\={ }}
-
-  \DeclareUnicodeCharacter{00B0}{\ringaccent{ }}
-  \DeclareUnicodeCharacter{00B1}{\ensuremath\pm}
-  \DeclareUnicodeCharacter{00B2}{$^2$}
-  \DeclareUnicodeCharacter{00B3}{$^3$}
-  \DeclareUnicodeCharacter{00B4}{\'{ }}
-  \DeclareUnicodeCharacter{00B5}{$\mu$}
-  \DeclareUnicodeCharacter{00B6}{\P}
-  \DeclareUnicodeCharacter{00B7}{\ensuremath\cdot}
-  \DeclareUnicodeCharacter{00B8}{\cedilla{ }}
-  \DeclareUnicodeCharacter{00B9}{$^1$}
-  \DeclareUnicodeCharacter{00BA}{\ordm}
-  \DeclareUnicodeCharacter{00BB}{\guillemetright}
-  \DeclareUnicodeCharacter{00BC}{$1\over4$}
-  \DeclareUnicodeCharacter{00BD}{$1\over2$}
-  \DeclareUnicodeCharacter{00BE}{$3\over4$}
-  \DeclareUnicodeCharacter{00BF}{\questiondown}
-
-  \DeclareUnicodeCharacter{00C0}{\`A}
-  \DeclareUnicodeCharacter{00C1}{\'A}
-  \DeclareUnicodeCharacter{00C2}{\^A}
-  \DeclareUnicodeCharacter{00C3}{\~A}
-  \DeclareUnicodeCharacter{00C4}{\"A}
-  \DeclareUnicodeCharacter{00C5}{\AA}
-  \DeclareUnicodeCharacter{00C6}{\AE}
-  \DeclareUnicodeCharacter{00C7}{\cedilla{C}}
-  \DeclareUnicodeCharacter{00C8}{\`E}
-  \DeclareUnicodeCharacter{00C9}{\'E}
-  \DeclareUnicodeCharacter{00CA}{\^E}
-  \DeclareUnicodeCharacter{00CB}{\"E}
-  \DeclareUnicodeCharacter{00CC}{\`I}
-  \DeclareUnicodeCharacter{00CD}{\'I}
-  \DeclareUnicodeCharacter{00CE}{\^I}
-  \DeclareUnicodeCharacter{00CF}{\"I}
-
-  \DeclareUnicodeCharacter{00D0}{\DH}
-  \DeclareUnicodeCharacter{00D1}{\~N}
-  \DeclareUnicodeCharacter{00D2}{\`O}
-  \DeclareUnicodeCharacter{00D3}{\'O}
-  \DeclareUnicodeCharacter{00D4}{\^O}
-  \DeclareUnicodeCharacter{00D5}{\~O}
-  \DeclareUnicodeCharacter{00D6}{\"O}
-  \DeclareUnicodeCharacter{00D7}{\ensuremath\times}
-  \DeclareUnicodeCharacter{00D8}{\O}
-  \DeclareUnicodeCharacter{00D9}{\`U}
-  \DeclareUnicodeCharacter{00DA}{\'U}
-  \DeclareUnicodeCharacter{00DB}{\^U}
-  \DeclareUnicodeCharacter{00DC}{\"U}
-  \DeclareUnicodeCharacter{00DD}{\'Y}
-  \DeclareUnicodeCharacter{00DE}{\TH}
-  \DeclareUnicodeCharacter{00DF}{\ss}
-
-  \DeclareUnicodeCharacter{00E0}{\`a}
-  \DeclareUnicodeCharacter{00E1}{\'a}
-  \DeclareUnicodeCharacter{00E2}{\^a}
-  \DeclareUnicodeCharacter{00E3}{\~a}
-  \DeclareUnicodeCharacter{00E4}{\"a}
-  \DeclareUnicodeCharacter{00E5}{\aa}
-  \DeclareUnicodeCharacter{00E6}{\ae}
-  \DeclareUnicodeCharacter{00E7}{\cedilla{c}}
-  \DeclareUnicodeCharacter{00E8}{\`e}
-  \DeclareUnicodeCharacter{00E9}{\'e}
-  \DeclareUnicodeCharacter{00EA}{\^e}
-  \DeclareUnicodeCharacter{00EB}{\"e}
-  \DeclareUnicodeCharacter{00EC}{\`{\dotless{i}}}
-  \DeclareUnicodeCharacter{00ED}{\'{\dotless{i}}}
-  \DeclareUnicodeCharacter{00EE}{\^{\dotless{i}}}
-  \DeclareUnicodeCharacter{00EF}{\"{\dotless{i}}}
-
-  \DeclareUnicodeCharacter{00F0}{\dh}
-  \DeclareUnicodeCharacter{00F1}{\~n}
-  \DeclareUnicodeCharacter{00F2}{\`o}
-  \DeclareUnicodeCharacter{00F3}{\'o}
-  \DeclareUnicodeCharacter{00F4}{\^o}
-  \DeclareUnicodeCharacter{00F5}{\~o}
-  \DeclareUnicodeCharacter{00F6}{\"o}
-  \DeclareUnicodeCharacter{00F7}{\ensuremath\div}
-  \DeclareUnicodeCharacter{00F8}{\o}
-  \DeclareUnicodeCharacter{00F9}{\`u}
-  \DeclareUnicodeCharacter{00FA}{\'u}
-  \DeclareUnicodeCharacter{00FB}{\^u}
-  \DeclareUnicodeCharacter{00FC}{\"u}
-  \DeclareUnicodeCharacter{00FD}{\'y}
-  \DeclareUnicodeCharacter{00FE}{\th}
-  \DeclareUnicodeCharacter{00FF}{\"y}
-
-  \DeclareUnicodeCharacter{0100}{\=A}
-  \DeclareUnicodeCharacter{0101}{\=a}
-  \DeclareUnicodeCharacter{0102}{\u{A}}
-  \DeclareUnicodeCharacter{0103}{\u{a}}
-  \DeclareUnicodeCharacter{0104}{\ogonek{A}}
-  \DeclareUnicodeCharacter{0105}{\ogonek{a}}
-  \DeclareUnicodeCharacter{0106}{\'C}
-  \DeclareUnicodeCharacter{0107}{\'c}
-  \DeclareUnicodeCharacter{0108}{\^C}
-  \DeclareUnicodeCharacter{0109}{\^c}
-  \DeclareUnicodeCharacter{010A}{\dotaccent{C}}
-  \DeclareUnicodeCharacter{010B}{\dotaccent{c}}
-  \DeclareUnicodeCharacter{010C}{\v{C}}
-  \DeclareUnicodeCharacter{010D}{\v{c}}
-  \DeclareUnicodeCharacter{010E}{\v{D}}
-  \DeclareUnicodeCharacter{010F}{d'}
-
-  \DeclareUnicodeCharacter{0110}{\DH}
-  \DeclareUnicodeCharacter{0111}{\dh}
-  \DeclareUnicodeCharacter{0112}{\=E}
-  \DeclareUnicodeCharacter{0113}{\=e}
-  \DeclareUnicodeCharacter{0114}{\u{E}}
-  \DeclareUnicodeCharacter{0115}{\u{e}}
-  \DeclareUnicodeCharacter{0116}{\dotaccent{E}}
-  \DeclareUnicodeCharacter{0117}{\dotaccent{e}}
-  \DeclareUnicodeCharacter{0118}{\ogonek{E}}
-  \DeclareUnicodeCharacter{0119}{\ogonek{e}}
-  \DeclareUnicodeCharacter{011A}{\v{E}}
-  \DeclareUnicodeCharacter{011B}{\v{e}}
-  \DeclareUnicodeCharacter{011C}{\^G}
-  \DeclareUnicodeCharacter{011D}{\^g}
-  \DeclareUnicodeCharacter{011E}{\u{G}}
-  \DeclareUnicodeCharacter{011F}{\u{g}}
-
-  \DeclareUnicodeCharacter{0120}{\dotaccent{G}}
-  \DeclareUnicodeCharacter{0121}{\dotaccent{g}}
-  \DeclareUnicodeCharacter{0122}{\cedilla{G}}
-  \DeclareUnicodeCharacter{0123}{\cedilla{g}}
-  \DeclareUnicodeCharacter{0124}{\^H}
-  \DeclareUnicodeCharacter{0125}{\^h}
-  \DeclareUnicodeCharacter{0126}{\missingcharmsg{H WITH STROKE}}
-  \DeclareUnicodeCharacter{0127}{\missingcharmsg{h WITH STROKE}}
-  \DeclareUnicodeCharacter{0128}{\~I}
-  \DeclareUnicodeCharacter{0129}{\~{\dotless{i}}}
-  \DeclareUnicodeCharacter{012A}{\=I}
-  \DeclareUnicodeCharacter{012B}{\={\dotless{i}}}
-  \DeclareUnicodeCharacter{012C}{\u{I}}
-  \DeclareUnicodeCharacter{012D}{\u{\dotless{i}}}
-  \DeclareUnicodeCharacter{012E}{\ogonek{I}}
-  \DeclareUnicodeCharacter{012F}{\ogonek{i}}
-
-  \DeclareUnicodeCharacter{0130}{\dotaccent{I}}
-  \DeclareUnicodeCharacter{0131}{\dotless{i}}
-  \DeclareUnicodeCharacter{0132}{IJ}
-  \DeclareUnicodeCharacter{0133}{ij}
-  \DeclareUnicodeCharacter{0134}{\^J}
-  \DeclareUnicodeCharacter{0135}{\^{\dotless{j}}}
-  \DeclareUnicodeCharacter{0136}{\cedilla{K}}
-  \DeclareUnicodeCharacter{0137}{\cedilla{k}}
-  \DeclareUnicodeCharacter{0138}{\ensuremath\kappa}  
-  \DeclareUnicodeCharacter{0139}{\'L}
-  \DeclareUnicodeCharacter{013A}{\'l}
-  \DeclareUnicodeCharacter{013B}{\cedilla{L}}
-  \DeclareUnicodeCharacter{013C}{\cedilla{l}}
+  \DeclareUnicodeCharacter{00A7}{\S}%
+  \DeclareUnicodeCharacter{00A8}{\"{ }}%
+  \DeclareUnicodeCharacter{00A9}{\copyright}%
+  \DeclareUnicodeCharacter{00AA}{\ordf}%
+  \DeclareUnicodeCharacter{00AB}{\guillemetleft}%
+  \DeclareUnicodeCharacter{00AC}{\ensuremath\lnot}%
+  \DeclareUnicodeCharacter{00AD}{\-}%
+  \DeclareUnicodeCharacter{00AE}{\registeredsymbol}%
+  \DeclareUnicodeCharacter{00AF}{\={ }}%
+  %
+  \DeclareUnicodeCharacter{00B0}{\ringaccent{ }}%
+  \DeclareUnicodeCharacter{00B1}{\ensuremath\pm}%
+  \DeclareUnicodeCharacter{00B2}{$^2$}%
+  \DeclareUnicodeCharacter{00B3}{$^3$}%
+  \DeclareUnicodeCharacter{00B4}{\'{ }}%
+  \DeclareUnicodeCharacter{00B5}{$\mu$}%
+  \DeclareUnicodeCharacter{00B6}{\P}%
+  \DeclareUnicodeCharacter{00B7}{\ensuremath\cdot}%
+  \DeclareUnicodeCharacter{00B8}{\cedilla{ }}%
+  \DeclareUnicodeCharacter{00B9}{$^1$}%
+  \DeclareUnicodeCharacter{00BA}{\ordm}%
+  \DeclareUnicodeCharacter{00BB}{\guillemetright}%
+  \DeclareUnicodeCharacter{00BC}{$1\over4$}%
+  \DeclareUnicodeCharacter{00BD}{$1\over2$}%
+  \DeclareUnicodeCharacter{00BE}{$3\over4$}%
+  \DeclareUnicodeCharacter{00BF}{\questiondown}%
+  %
+  \DeclareUnicodeCharacter{00C0}{\`A}%
+  \DeclareUnicodeCharacter{00C1}{\'A}%
+  \DeclareUnicodeCharacter{00C2}{\^A}%
+  \DeclareUnicodeCharacter{00C3}{\~A}%
+  \DeclareUnicodeCharacter{00C4}{\"A}%
+  \DeclareUnicodeCharacter{00C5}{\AA}%
+  \DeclareUnicodeCharacter{00C6}{\AE}%
+  \DeclareUnicodeCharacter{00C7}{\cedilla{C}}%
+  \DeclareUnicodeCharacter{00C8}{\`E}%
+  \DeclareUnicodeCharacter{00C9}{\'E}%
+  \DeclareUnicodeCharacter{00CA}{\^E}%
+  \DeclareUnicodeCharacter{00CB}{\"E}%
+  \DeclareUnicodeCharacter{00CC}{\`I}%
+  \DeclareUnicodeCharacter{00CD}{\'I}%
+  \DeclareUnicodeCharacter{00CE}{\^I}%
+  \DeclareUnicodeCharacter{00CF}{\"I}%
+  %
+  \DeclareUnicodeCharacter{00D0}{\DH}%
+  \DeclareUnicodeCharacter{00D1}{\~N}%
+  \DeclareUnicodeCharacter{00D2}{\`O}%
+  \DeclareUnicodeCharacter{00D3}{\'O}%
+  \DeclareUnicodeCharacter{00D4}{\^O}%
+  \DeclareUnicodeCharacter{00D5}{\~O}%
+  \DeclareUnicodeCharacter{00D6}{\"O}%
+  \DeclareUnicodeCharacter{00D7}{\ensuremath\times}%
+  \DeclareUnicodeCharacter{00D8}{\O}%
+  \DeclareUnicodeCharacter{00D9}{\`U}%
+  \DeclareUnicodeCharacter{00DA}{\'U}%
+  \DeclareUnicodeCharacter{00DB}{\^U}%
+  \DeclareUnicodeCharacter{00DC}{\"U}%
+  \DeclareUnicodeCharacter{00DD}{\'Y}%
+  \DeclareUnicodeCharacter{00DE}{\TH}%
+  \DeclareUnicodeCharacter{00DF}{\ss}%
+  %
+  \DeclareUnicodeCharacter{00E0}{\`a}%
+  \DeclareUnicodeCharacter{00E1}{\'a}%
+  \DeclareUnicodeCharacter{00E2}{\^a}%
+  \DeclareUnicodeCharacter{00E3}{\~a}%
+  \DeclareUnicodeCharacter{00E4}{\"a}%
+  \DeclareUnicodeCharacter{00E5}{\aa}%
+  \DeclareUnicodeCharacter{00E6}{\ae}%
+  \DeclareUnicodeCharacter{00E7}{\cedilla{c}}%
+  \DeclareUnicodeCharacter{00E8}{\`e}%
+  \DeclareUnicodeCharacter{00E9}{\'e}%
+  \DeclareUnicodeCharacter{00EA}{\^e}%
+  \DeclareUnicodeCharacter{00EB}{\"e}%
+  \DeclareUnicodeCharacter{00EC}{\`{\dotless{i}}}%
+  \DeclareUnicodeCharacter{00ED}{\'{\dotless{i}}}%
+  \DeclareUnicodeCharacter{00EE}{\^{\dotless{i}}}%
+  \DeclareUnicodeCharacter{00EF}{\"{\dotless{i}}}%
+  %
+  \DeclareUnicodeCharacter{00F0}{\dh}%
+  \DeclareUnicodeCharacter{00F1}{\~n}%
+  \DeclareUnicodeCharacter{00F2}{\`o}%
+  \DeclareUnicodeCharacter{00F3}{\'o}%
+  \DeclareUnicodeCharacter{00F4}{\^o}%
+  \DeclareUnicodeCharacter{00F5}{\~o}%
+  \DeclareUnicodeCharacter{00F6}{\"o}%
+  \DeclareUnicodeCharacter{00F7}{\ensuremath\div}%
+  \DeclareUnicodeCharacter{00F8}{\o}%
+  \DeclareUnicodeCharacter{00F9}{\`u}%
+  \DeclareUnicodeCharacter{00FA}{\'u}%
+  \DeclareUnicodeCharacter{00FB}{\^u}%
+  \DeclareUnicodeCharacter{00FC}{\"u}%
+  \DeclareUnicodeCharacter{00FD}{\'y}%
+  \DeclareUnicodeCharacter{00FE}{\th}%
+  \DeclareUnicodeCharacter{00FF}{\"y}%
+  %
+  \DeclareUnicodeCharacter{0100}{\=A}%
+  \DeclareUnicodeCharacter{0101}{\=a}%
+  \DeclareUnicodeCharacter{0102}{\u{A}}%
+  \DeclareUnicodeCharacter{0103}{\u{a}}%
+  \DeclareUnicodeCharacter{0104}{\ogonek{A}}%
+  \DeclareUnicodeCharacter{0105}{\ogonek{a}}%
+  \DeclareUnicodeCharacter{0106}{\'C}%
+  \DeclareUnicodeCharacter{0107}{\'c}%
+  \DeclareUnicodeCharacter{0108}{\^C}%
+  \DeclareUnicodeCharacter{0109}{\^c}%
+  \DeclareUnicodeCharacter{010A}{\dotaccent{C}}%
+  \DeclareUnicodeCharacter{010B}{\dotaccent{c}}%
+  \DeclareUnicodeCharacter{010C}{\v{C}}%
+  \DeclareUnicodeCharacter{010D}{\v{c}}%
+  \DeclareUnicodeCharacter{010E}{\v{D}}%
+  \DeclareUnicodeCharacter{010F}{d'}%
+  %
+  \DeclareUnicodeCharacter{0110}{\DH}%
+  \DeclareUnicodeCharacter{0111}{\dh}%
+  \DeclareUnicodeCharacter{0112}{\=E}%
+  \DeclareUnicodeCharacter{0113}{\=e}%
+  \DeclareUnicodeCharacter{0114}{\u{E}}%
+  \DeclareUnicodeCharacter{0115}{\u{e}}%
+  \DeclareUnicodeCharacter{0116}{\dotaccent{E}}%
+  \DeclareUnicodeCharacter{0117}{\dotaccent{e}}%
+  \DeclareUnicodeCharacter{0118}{\ogonek{E}}%
+  \DeclareUnicodeCharacter{0119}{\ogonek{e}}%
+  \DeclareUnicodeCharacter{011A}{\v{E}}%
+  \DeclareUnicodeCharacter{011B}{\v{e}}%
+  \DeclareUnicodeCharacter{011C}{\^G}%
+  \DeclareUnicodeCharacter{011D}{\^g}%
+  \DeclareUnicodeCharacter{011E}{\u{G}}%
+  \DeclareUnicodeCharacter{011F}{\u{g}}%
+  %
+  \DeclareUnicodeCharacter{0120}{\dotaccent{G}}%
+  \DeclareUnicodeCharacter{0121}{\dotaccent{g}}%
+  \DeclareUnicodeCharacter{0122}{\cedilla{G}}%
+  \DeclareUnicodeCharacter{0123}{\cedilla{g}}%
+  \DeclareUnicodeCharacter{0124}{\^H}%
+  \DeclareUnicodeCharacter{0125}{\^h}%
+  \DeclareUnicodeCharacter{0126}{\missingcharmsg{H WITH STROKE}}%
+  \DeclareUnicodeCharacter{0127}{\missingcharmsg{h WITH STROKE}}%
+  \DeclareUnicodeCharacter{0128}{\~I}%
+  \DeclareUnicodeCharacter{0129}{\~{\dotless{i}}}%
+  \DeclareUnicodeCharacter{012A}{\=I}%
+  \DeclareUnicodeCharacter{012B}{\={\dotless{i}}}%
+  \DeclareUnicodeCharacter{012C}{\u{I}}%
+  \DeclareUnicodeCharacter{012D}{\u{\dotless{i}}}%
+  \DeclareUnicodeCharacter{012E}{\ogonek{I}}%
+  \DeclareUnicodeCharacter{012F}{\ogonek{i}}%
+  %
+  \DeclareUnicodeCharacter{0130}{\dotaccent{I}}%
+  \DeclareUnicodeCharacter{0131}{\dotless{i}}%
+  \DeclareUnicodeCharacter{0132}{IJ}%
+  \DeclareUnicodeCharacter{0133}{ij}%
+  \DeclareUnicodeCharacter{0134}{\^J}%
+  \DeclareUnicodeCharacter{0135}{\^{\dotless{j}}}%
+  \DeclareUnicodeCharacter{0136}{\cedilla{K}}%
+  \DeclareUnicodeCharacter{0137}{\cedilla{k}}%
+  \DeclareUnicodeCharacter{0138}{\ensuremath\kappa}%
+  \DeclareUnicodeCharacter{0139}{\'L}%
+  \DeclareUnicodeCharacter{013A}{\'l}%
+  \DeclareUnicodeCharacter{013B}{\cedilla{L}}%
+  \DeclareUnicodeCharacter{013C}{\cedilla{l}}%
   \DeclareUnicodeCharacter{013D}{L'}% should kern
   \DeclareUnicodeCharacter{013E}{l'}% should kern
-  \DeclareUnicodeCharacter{013F}{L\U{00B7}}
-
-  \DeclareUnicodeCharacter{0140}{l\U{00B7}}
-  \DeclareUnicodeCharacter{0141}{\L}
-  \DeclareUnicodeCharacter{0142}{\l}
-  \DeclareUnicodeCharacter{0143}{\'N}
-  \DeclareUnicodeCharacter{0144}{\'n}
-  \DeclareUnicodeCharacter{0145}{\cedilla{N}}
-  \DeclareUnicodeCharacter{0146}{\cedilla{n}}
-  \DeclareUnicodeCharacter{0147}{\v{N}}
-  \DeclareUnicodeCharacter{0148}{\v{n}}
-  \DeclareUnicodeCharacter{0149}{'n}
-  \DeclareUnicodeCharacter{014A}{\missingcharmsg{ENG}}
-  \DeclareUnicodeCharacter{014B}{\missingcharmsg{eng}}
-  \DeclareUnicodeCharacter{014C}{\=O}
-  \DeclareUnicodeCharacter{014D}{\=o}
-  \DeclareUnicodeCharacter{014E}{\u{O}}
-  \DeclareUnicodeCharacter{014F}{\u{o}}
-
-  \DeclareUnicodeCharacter{0150}{\H{O}}
-  \DeclareUnicodeCharacter{0151}{\H{o}}
-  \DeclareUnicodeCharacter{0152}{\OE}
-  \DeclareUnicodeCharacter{0153}{\oe}
-  \DeclareUnicodeCharacter{0154}{\'R}
-  \DeclareUnicodeCharacter{0155}{\'r}
-  \DeclareUnicodeCharacter{0156}{\cedilla{R}}
-  \DeclareUnicodeCharacter{0157}{\cedilla{r}}
-  \DeclareUnicodeCharacter{0158}{\v{R}}
-  \DeclareUnicodeCharacter{0159}{\v{r}}
-  \DeclareUnicodeCharacter{015A}{\'S}
-  \DeclareUnicodeCharacter{015B}{\'s}
-  \DeclareUnicodeCharacter{015C}{\^S}
-  \DeclareUnicodeCharacter{015D}{\^s}
-  \DeclareUnicodeCharacter{015E}{\cedilla{S}}
-  \DeclareUnicodeCharacter{015F}{\cedilla{s}}
-
-  \DeclareUnicodeCharacter{0160}{\v{S}}
-  \DeclareUnicodeCharacter{0161}{\v{s}}
-  \DeclareUnicodeCharacter{0162}{\cedilla{T}}
-  \DeclareUnicodeCharacter{0163}{\cedilla{t}}
-  \DeclareUnicodeCharacter{0164}{\v{T}}
-  \DeclareUnicodeCharacter{0165}{\v{t}}
-  \DeclareUnicodeCharacter{0166}{\missingcharmsg{H WITH STROKE}}
-  \DeclareUnicodeCharacter{0167}{\missingcharmsg{h WITH STROKE}}
-  \DeclareUnicodeCharacter{0168}{\~U}
-  \DeclareUnicodeCharacter{0169}{\~u}
-  \DeclareUnicodeCharacter{016A}{\=U}
-  \DeclareUnicodeCharacter{016B}{\=u}
-  \DeclareUnicodeCharacter{016C}{\u{U}}
-  \DeclareUnicodeCharacter{016D}{\u{u}}
-  \DeclareUnicodeCharacter{016E}{\ringaccent{U}}
-  \DeclareUnicodeCharacter{016F}{\ringaccent{u}}
-
-  \DeclareUnicodeCharacter{0170}{\H{U}}
-  \DeclareUnicodeCharacter{0171}{\H{u}}
-  \DeclareUnicodeCharacter{0172}{\ogonek{U}}
-  \DeclareUnicodeCharacter{0173}{\ogonek{u}}
-  \DeclareUnicodeCharacter{0174}{\^W}
-  \DeclareUnicodeCharacter{0175}{\^w}
-  \DeclareUnicodeCharacter{0176}{\^Y}
-  \DeclareUnicodeCharacter{0177}{\^y}
-  \DeclareUnicodeCharacter{0178}{\"Y}
-  \DeclareUnicodeCharacter{0179}{\'Z}
-  \DeclareUnicodeCharacter{017A}{\'z}
-  \DeclareUnicodeCharacter{017B}{\dotaccent{Z}}
-  \DeclareUnicodeCharacter{017C}{\dotaccent{z}}
-  \DeclareUnicodeCharacter{017D}{\v{Z}}
-  \DeclareUnicodeCharacter{017E}{\v{z}}
-  \DeclareUnicodeCharacter{017F}{\missingcharmsg{LONG S}}
-
-  \DeclareUnicodeCharacter{01C4}{D\v{Z}}
-  \DeclareUnicodeCharacter{01C5}{D\v{z}}
-  \DeclareUnicodeCharacter{01C6}{d\v{z}}
-  \DeclareUnicodeCharacter{01C7}{LJ}
-  \DeclareUnicodeCharacter{01C8}{Lj}
-  \DeclareUnicodeCharacter{01C9}{lj}
-  \DeclareUnicodeCharacter{01CA}{NJ}
-  \DeclareUnicodeCharacter{01CB}{Nj}
-  \DeclareUnicodeCharacter{01CC}{nj}
-  \DeclareUnicodeCharacter{01CD}{\v{A}}
-  \DeclareUnicodeCharacter{01CE}{\v{a}}
-  \DeclareUnicodeCharacter{01CF}{\v{I}}
-
-  \DeclareUnicodeCharacter{01D0}{\v{\dotless{i}}}
-  \DeclareUnicodeCharacter{01D1}{\v{O}}
-  \DeclareUnicodeCharacter{01D2}{\v{o}}
-  \DeclareUnicodeCharacter{01D3}{\v{U}}
-  \DeclareUnicodeCharacter{01D4}{\v{u}}
-
-  \DeclareUnicodeCharacter{01E2}{\={\AE}}
-  \DeclareUnicodeCharacter{01E3}{\={\ae}}
-  \DeclareUnicodeCharacter{01E6}{\v{G}}
-  \DeclareUnicodeCharacter{01E7}{\v{g}}
-  \DeclareUnicodeCharacter{01E8}{\v{K}}
-  \DeclareUnicodeCharacter{01E9}{\v{k}}
-
-  \DeclareUnicodeCharacter{01F0}{\v{\dotless{j}}}
-  \DeclareUnicodeCharacter{01F1}{DZ}
-  \DeclareUnicodeCharacter{01F2}{Dz}
-  \DeclareUnicodeCharacter{01F3}{dz}
-  \DeclareUnicodeCharacter{01F4}{\'G}
-  \DeclareUnicodeCharacter{01F5}{\'g}
-  \DeclareUnicodeCharacter{01F8}{\`N}
-  \DeclareUnicodeCharacter{01F9}{\`n}
-  \DeclareUnicodeCharacter{01FC}{\'{\AE}}
-  \DeclareUnicodeCharacter{01FD}{\'{\ae}}
-  \DeclareUnicodeCharacter{01FE}{\'{\O}}
-  \DeclareUnicodeCharacter{01FF}{\'{\o}}
-
-  \DeclareUnicodeCharacter{021E}{\v{H}}
-  \DeclareUnicodeCharacter{021F}{\v{h}}
-
-  \DeclareUnicodeCharacter{0226}{\dotaccent{A}}
-  \DeclareUnicodeCharacter{0227}{\dotaccent{a}}
-  \DeclareUnicodeCharacter{0228}{\cedilla{E}}
-  \DeclareUnicodeCharacter{0229}{\cedilla{e}}
-  \DeclareUnicodeCharacter{022E}{\dotaccent{O}}
-  \DeclareUnicodeCharacter{022F}{\dotaccent{o}}
-
-  \DeclareUnicodeCharacter{0232}{\=Y}
-  \DeclareUnicodeCharacter{0233}{\=y}
-  \DeclareUnicodeCharacter{0237}{\dotless{j}}
-
-  \DeclareUnicodeCharacter{02DB}{\ogonek{ }}
-
+  \DeclareUnicodeCharacter{013F}{L\U{00B7}}%
+  %
+  \DeclareUnicodeCharacter{0140}{l\U{00B7}}%
+  \DeclareUnicodeCharacter{0141}{\L}%
+  \DeclareUnicodeCharacter{0142}{\l}%
+  \DeclareUnicodeCharacter{0143}{\'N}%
+  \DeclareUnicodeCharacter{0144}{\'n}%
+  \DeclareUnicodeCharacter{0145}{\cedilla{N}}%
+  \DeclareUnicodeCharacter{0146}{\cedilla{n}}%
+  \DeclareUnicodeCharacter{0147}{\v{N}}%
+  \DeclareUnicodeCharacter{0148}{\v{n}}%
+  \DeclareUnicodeCharacter{0149}{'n}%
+  \DeclareUnicodeCharacter{014A}{\missingcharmsg{ENG}}%
+  \DeclareUnicodeCharacter{014B}{\missingcharmsg{eng}}%
+  \DeclareUnicodeCharacter{014C}{\=O}%
+  \DeclareUnicodeCharacter{014D}{\=o}%
+  \DeclareUnicodeCharacter{014E}{\u{O}}%
+  \DeclareUnicodeCharacter{014F}{\u{o}}%
+  %
+  \DeclareUnicodeCharacter{0150}{\H{O}}%
+  \DeclareUnicodeCharacter{0151}{\H{o}}%
+  \DeclareUnicodeCharacter{0152}{\OE}%
+  \DeclareUnicodeCharacter{0153}{\oe}%
+  \DeclareUnicodeCharacter{0154}{\'R}%
+  \DeclareUnicodeCharacter{0155}{\'r}%
+  \DeclareUnicodeCharacter{0156}{\cedilla{R}}%
+  \DeclareUnicodeCharacter{0157}{\cedilla{r}}%
+  \DeclareUnicodeCharacter{0158}{\v{R}}%
+  \DeclareUnicodeCharacter{0159}{\v{r}}%
+  \DeclareUnicodeCharacter{015A}{\'S}%
+  \DeclareUnicodeCharacter{015B}{\'s}%
+  \DeclareUnicodeCharacter{015C}{\^S}%
+  \DeclareUnicodeCharacter{015D}{\^s}%
+  \DeclareUnicodeCharacter{015E}{\cedilla{S}}%
+  \DeclareUnicodeCharacter{015F}{\cedilla{s}}%
+  %
+  \DeclareUnicodeCharacter{0160}{\v{S}}%
+  \DeclareUnicodeCharacter{0161}{\v{s}}%
+  \DeclareUnicodeCharacter{0162}{\cedilla{T}}%
+  \DeclareUnicodeCharacter{0163}{\cedilla{t}}%
+  \DeclareUnicodeCharacter{0164}{\v{T}}%
+  \DeclareUnicodeCharacter{0165}{\v{t}}%
+  \DeclareUnicodeCharacter{0166}{\missingcharmsg{H WITH STROKE}}%
+  \DeclareUnicodeCharacter{0167}{\missingcharmsg{h WITH STROKE}}%
+  \DeclareUnicodeCharacter{0168}{\~U}%
+  \DeclareUnicodeCharacter{0169}{\~u}%
+  \DeclareUnicodeCharacter{016A}{\=U}%
+  \DeclareUnicodeCharacter{016B}{\=u}%
+  \DeclareUnicodeCharacter{016C}{\u{U}}%
+  \DeclareUnicodeCharacter{016D}{\u{u}}%
+  \DeclareUnicodeCharacter{016E}{\ringaccent{U}}%
+  \DeclareUnicodeCharacter{016F}{\ringaccent{u}}%
+  %
+  \DeclareUnicodeCharacter{0170}{\H{U}}%
+  \DeclareUnicodeCharacter{0171}{\H{u}}%
+  \DeclareUnicodeCharacter{0172}{\ogonek{U}}%
+  \DeclareUnicodeCharacter{0173}{\ogonek{u}}%
+  \DeclareUnicodeCharacter{0174}{\^W}%
+  \DeclareUnicodeCharacter{0175}{\^w}%
+  \DeclareUnicodeCharacter{0176}{\^Y}%
+  \DeclareUnicodeCharacter{0177}{\^y}%
+  \DeclareUnicodeCharacter{0178}{\"Y}%
+  \DeclareUnicodeCharacter{0179}{\'Z}%
+  \DeclareUnicodeCharacter{017A}{\'z}%
+  \DeclareUnicodeCharacter{017B}{\dotaccent{Z}}%
+  \DeclareUnicodeCharacter{017C}{\dotaccent{z}}%
+  \DeclareUnicodeCharacter{017D}{\v{Z}}%
+  \DeclareUnicodeCharacter{017E}{\v{z}}%
+  \DeclareUnicodeCharacter{017F}{\missingcharmsg{LONG S}}%
+  %
+  \DeclareUnicodeCharacter{01C4}{D\v{Z}}%
+  \DeclareUnicodeCharacter{01C5}{D\v{z}}%
+  \DeclareUnicodeCharacter{01C6}{d\v{z}}%
+  \DeclareUnicodeCharacter{01C7}{LJ}%
+  \DeclareUnicodeCharacter{01C8}{Lj}%
+  \DeclareUnicodeCharacter{01C9}{lj}%
+  \DeclareUnicodeCharacter{01CA}{NJ}%
+  \DeclareUnicodeCharacter{01CB}{Nj}%
+  \DeclareUnicodeCharacter{01CC}{nj}%
+  \DeclareUnicodeCharacter{01CD}{\v{A}}%
+  \DeclareUnicodeCharacter{01CE}{\v{a}}%
+  \DeclareUnicodeCharacter{01CF}{\v{I}}%
+  %
+  \DeclareUnicodeCharacter{01D0}{\v{\dotless{i}}}%
+  \DeclareUnicodeCharacter{01D1}{\v{O}}%
+  \DeclareUnicodeCharacter{01D2}{\v{o}}%
+  \DeclareUnicodeCharacter{01D3}{\v{U}}%
+  \DeclareUnicodeCharacter{01D4}{\v{u}}%
+  %
+  \DeclareUnicodeCharacter{01E2}{\={\AE}}%
+  \DeclareUnicodeCharacter{01E3}{\={\ae}}%
+  \DeclareUnicodeCharacter{01E6}{\v{G}}%
+  \DeclareUnicodeCharacter{01E7}{\v{g}}%
+  \DeclareUnicodeCharacter{01E8}{\v{K}}%
+  \DeclareUnicodeCharacter{01E9}{\v{k}}%
+  %
+  \DeclareUnicodeCharacter{01F0}{\v{\dotless{j}}}%
+  \DeclareUnicodeCharacter{01F1}{DZ}%
+  \DeclareUnicodeCharacter{01F2}{Dz}%
+  \DeclareUnicodeCharacter{01F3}{dz}%
+  \DeclareUnicodeCharacter{01F4}{\'G}%
+  \DeclareUnicodeCharacter{01F5}{\'g}%
+  \DeclareUnicodeCharacter{01F8}{\`N}%
+  \DeclareUnicodeCharacter{01F9}{\`n}%
+  \DeclareUnicodeCharacter{01FC}{\'{\AE}}%
+  \DeclareUnicodeCharacter{01FD}{\'{\ae}}%
+  \DeclareUnicodeCharacter{01FE}{\'{\O}}%
+  \DeclareUnicodeCharacter{01FF}{\'{\o}}%
+  %
+  \DeclareUnicodeCharacter{021E}{\v{H}}%
+  \DeclareUnicodeCharacter{021F}{\v{h}}%
+  %
+  \DeclareUnicodeCharacter{0226}{\dotaccent{A}}%
+  \DeclareUnicodeCharacter{0227}{\dotaccent{a}}%
+  \DeclareUnicodeCharacter{0228}{\cedilla{E}}%
+  \DeclareUnicodeCharacter{0229}{\cedilla{e}}%
+  \DeclareUnicodeCharacter{022E}{\dotaccent{O}}%
+  \DeclareUnicodeCharacter{022F}{\dotaccent{o}}%
+  %
+  \DeclareUnicodeCharacter{0232}{\=Y}%
+  \DeclareUnicodeCharacter{0233}{\=y}%
+  \DeclareUnicodeCharacter{0237}{\dotless{j}}%
+  %
+  \DeclareUnicodeCharacter{02DB}{\ogonek{ }}%
+  %
   % Greek letters upper case
-  \DeclareUnicodeCharacter{0391}{{\it A}}
-  \DeclareUnicodeCharacter{0392}{{\it B}}
-  \DeclareUnicodeCharacter{0393}{\ensuremath{\mit\Gamma}}
-  \DeclareUnicodeCharacter{0394}{\ensuremath{\mit\Delta}}
-  \DeclareUnicodeCharacter{0395}{{\it E}}
-  \DeclareUnicodeCharacter{0396}{{\it Z}}
-  \DeclareUnicodeCharacter{0397}{{\it H}}
-  \DeclareUnicodeCharacter{0398}{\ensuremath{\mit\Theta}}
-  \DeclareUnicodeCharacter{0399}{{\it I}}
-  \DeclareUnicodeCharacter{039A}{{\it K}}
-  \DeclareUnicodeCharacter{039B}{\ensuremath{\mit\Lambda}}
-  \DeclareUnicodeCharacter{039C}{{\it M}}
-  \DeclareUnicodeCharacter{039D}{{\it N}}
-  \DeclareUnicodeCharacter{039E}{\ensuremath{\mit\Xi}}
-  \DeclareUnicodeCharacter{039F}{{\it O}}
-  \DeclareUnicodeCharacter{03A0}{\ensuremath{\mit\Pi}}
-  \DeclareUnicodeCharacter{03A1}{{\it P}}
+  \DeclareUnicodeCharacter{0391}{{\it A}}%
+  \DeclareUnicodeCharacter{0392}{{\it B}}%
+  \DeclareUnicodeCharacter{0393}{\ensuremath{\mit\Gamma}}%
+  \DeclareUnicodeCharacter{0394}{\ensuremath{\mit\Delta}}%
+  \DeclareUnicodeCharacter{0395}{{\it E}}%
+  \DeclareUnicodeCharacter{0396}{{\it Z}}%
+  \DeclareUnicodeCharacter{0397}{{\it H}}%
+  \DeclareUnicodeCharacter{0398}{\ensuremath{\mit\Theta}}%
+  \DeclareUnicodeCharacter{0399}{{\it I}}%
+  \DeclareUnicodeCharacter{039A}{{\it K}}%
+  \DeclareUnicodeCharacter{039B}{\ensuremath{\mit\Lambda}}%
+  \DeclareUnicodeCharacter{039C}{{\it M}}%
+  \DeclareUnicodeCharacter{039D}{{\it N}}%
+  \DeclareUnicodeCharacter{039E}{\ensuremath{\mit\Xi}}%
+  \DeclareUnicodeCharacter{039F}{{\it O}}%
+  \DeclareUnicodeCharacter{03A0}{\ensuremath{\mit\Pi}}%
+  \DeclareUnicodeCharacter{03A1}{{\it P}}%
   %\DeclareUnicodeCharacter{03A2}{} % none - corresponds to final sigma
-  \DeclareUnicodeCharacter{03A3}{\ensuremath{\mit\Sigma}}
-  \DeclareUnicodeCharacter{03A4}{{\it T}}
-  \DeclareUnicodeCharacter{03A5}{\ensuremath{\mit\Upsilon}}
-  \DeclareUnicodeCharacter{03A6}{\ensuremath{\mit\Phi}}
-  \DeclareUnicodeCharacter{03A7}{{\it X}}
-  \DeclareUnicodeCharacter{03A8}{\ensuremath{\mit\Psi}}
-  \DeclareUnicodeCharacter{03A9}{\ensuremath{\mit\Omega}}
-
+  \DeclareUnicodeCharacter{03A3}{\ensuremath{\mit\Sigma}}%
+  \DeclareUnicodeCharacter{03A4}{{\it T}}%
+  \DeclareUnicodeCharacter{03A5}{\ensuremath{\mit\Upsilon}}%
+  \DeclareUnicodeCharacter{03A6}{\ensuremath{\mit\Phi}}%
+  \DeclareUnicodeCharacter{03A7}{{\it X}}%
+  \DeclareUnicodeCharacter{03A8}{\ensuremath{\mit\Psi}}%
+  \DeclareUnicodeCharacter{03A9}{\ensuremath{\mit\Omega}}%
+  %
   % Vowels with accents
-  \DeclareUnicodeCharacter{0390}{\ensuremath{\ddot{\acute\iota}}}
-  \DeclareUnicodeCharacter{03AC}{\ensuremath{\acute\alpha}}
-  \DeclareUnicodeCharacter{03AD}{\ensuremath{\acute\epsilon}}
-  \DeclareUnicodeCharacter{03AE}{\ensuremath{\acute\eta}}
-  \DeclareUnicodeCharacter{03AF}{\ensuremath{\acute\iota}}
-  \DeclareUnicodeCharacter{03B0}{\ensuremath{\acute{\ddot\upsilon}}}
-
+  \DeclareUnicodeCharacter{0390}{\ensuremath{\ddot{\acute\iota}}}%
+  \DeclareUnicodeCharacter{03AC}{\ensuremath{\acute\alpha}}%
+  \DeclareUnicodeCharacter{03AD}{\ensuremath{\acute\epsilon}}%
+  \DeclareUnicodeCharacter{03AE}{\ensuremath{\acute\eta}}%
+  \DeclareUnicodeCharacter{03AF}{\ensuremath{\acute\iota}}%
+  \DeclareUnicodeCharacter{03B0}{\ensuremath{\acute{\ddot\upsilon}}}%
+  %
   % Standalone accent
-  \DeclareUnicodeCharacter{0384}{\ensuremath{\acute{\ }}}
-
+  \DeclareUnicodeCharacter{0384}{\ensuremath{\acute{\ }}}%
+  %
   % Greek letters lower case
-  \DeclareUnicodeCharacter{03B1}{\ensuremath\alpha}
-  \DeclareUnicodeCharacter{03B2}{\ensuremath\beta}
-  \DeclareUnicodeCharacter{03B3}{\ensuremath\gamma}
-  \DeclareUnicodeCharacter{03B4}{\ensuremath\delta}
-  \DeclareUnicodeCharacter{03B5}{\ensuremath\epsilon}
-  \DeclareUnicodeCharacter{03B6}{\ensuremath\zeta}
-  \DeclareUnicodeCharacter{03B7}{\ensuremath\eta}
-  \DeclareUnicodeCharacter{03B8}{\ensuremath\theta}
-  \DeclareUnicodeCharacter{03B9}{\ensuremath\iota}
-  \DeclareUnicodeCharacter{03BA}{\ensuremath\kappa}
-  \DeclareUnicodeCharacter{03BB}{\ensuremath\lambda}
-  \DeclareUnicodeCharacter{03BC}{\ensuremath\mu}
-  \DeclareUnicodeCharacter{03BD}{\ensuremath\nu}
-  \DeclareUnicodeCharacter{03BE}{\ensuremath\xi}
-  \DeclareUnicodeCharacter{03BF}{{\it o}} % omicron
-  \DeclareUnicodeCharacter{03C0}{\ensuremath\pi}
-  \DeclareUnicodeCharacter{03C1}{\ensuremath\rho}
-  \DeclareUnicodeCharacter{03C2}{\ensuremath\varsigma}
-  \DeclareUnicodeCharacter{03C3}{\ensuremath\sigma}
-  \DeclareUnicodeCharacter{03C4}{\ensuremath\tau}
-  \DeclareUnicodeCharacter{03C5}{\ensuremath\upsilon}
-  \DeclareUnicodeCharacter{03C6}{\ensuremath\phi}
-  \DeclareUnicodeCharacter{03C7}{\ensuremath\chi}
-  \DeclareUnicodeCharacter{03C8}{\ensuremath\psi}
-  \DeclareUnicodeCharacter{03C9}{\ensuremath\omega}
-
+  \DeclareUnicodeCharacter{03B1}{\ensuremath\alpha}%
+  \DeclareUnicodeCharacter{03B2}{\ensuremath\beta}%
+  \DeclareUnicodeCharacter{03B3}{\ensuremath\gamma}%
+  \DeclareUnicodeCharacter{03B4}{\ensuremath\delta}%
+  \DeclareUnicodeCharacter{03B5}{\ensuremath\epsilon}%
+  \DeclareUnicodeCharacter{03B6}{\ensuremath\zeta}%
+  \DeclareUnicodeCharacter{03B7}{\ensuremath\eta}%
+  \DeclareUnicodeCharacter{03B8}{\ensuremath\theta}%
+  \DeclareUnicodeCharacter{03B9}{\ensuremath\iota}%
+  \DeclareUnicodeCharacter{03BA}{\ensuremath\kappa}%
+  \DeclareUnicodeCharacter{03BB}{\ensuremath\lambda}%
+  \DeclareUnicodeCharacter{03BC}{\ensuremath\mu}%
+  \DeclareUnicodeCharacter{03BD}{\ensuremath\nu}%
+  \DeclareUnicodeCharacter{03BE}{\ensuremath\xi}%
+  \DeclareUnicodeCharacter{03BF}{{\it o}}% omicron
+  \DeclareUnicodeCharacter{03C0}{\ensuremath\pi}%
+  \DeclareUnicodeCharacter{03C1}{\ensuremath\rho}%
+  \DeclareUnicodeCharacter{03C2}{\ensuremath\varsigma}%
+  \DeclareUnicodeCharacter{03C3}{\ensuremath\sigma}%
+  \DeclareUnicodeCharacter{03C4}{\ensuremath\tau}%
+  \DeclareUnicodeCharacter{03C5}{\ensuremath\upsilon}%
+  \DeclareUnicodeCharacter{03C6}{\ensuremath\phi}%
+  \DeclareUnicodeCharacter{03C7}{\ensuremath\chi}%
+  \DeclareUnicodeCharacter{03C8}{\ensuremath\psi}%
+  \DeclareUnicodeCharacter{03C9}{\ensuremath\omega}%
+  %
   % More Greek vowels with accents
-  \DeclareUnicodeCharacter{03CA}{\ensuremath{\ddot\iota}}
-  \DeclareUnicodeCharacter{03CB}{\ensuremath{\ddot\upsilon}}
-  \DeclareUnicodeCharacter{03CC}{\ensuremath{\acute o}}
-  \DeclareUnicodeCharacter{03CD}{\ensuremath{\acute\upsilon}}
-  \DeclareUnicodeCharacter{03CE}{\ensuremath{\acute\omega}}
-
+  \DeclareUnicodeCharacter{03CA}{\ensuremath{\ddot\iota}}%
+  \DeclareUnicodeCharacter{03CB}{\ensuremath{\ddot\upsilon}}%
+  \DeclareUnicodeCharacter{03CC}{\ensuremath{\acute o}}%
+  \DeclareUnicodeCharacter{03CD}{\ensuremath{\acute\upsilon}}%
+  \DeclareUnicodeCharacter{03CE}{\ensuremath{\acute\omega}}%
+  %
   % Variant Greek letters
-  \DeclareUnicodeCharacter{03D1}{\ensuremath\vartheta}
-  \DeclareUnicodeCharacter{03D6}{\ensuremath\varpi}
-  \DeclareUnicodeCharacter{03F1}{\ensuremath\varrho}
-
-  \DeclareUnicodeCharacter{1E02}{\dotaccent{B}}
-  \DeclareUnicodeCharacter{1E03}{\dotaccent{b}}
-  \DeclareUnicodeCharacter{1E04}{\udotaccent{B}}
-  \DeclareUnicodeCharacter{1E05}{\udotaccent{b}}
-  \DeclareUnicodeCharacter{1E06}{\ubaraccent{B}}
-  \DeclareUnicodeCharacter{1E07}{\ubaraccent{b}}
-  \DeclareUnicodeCharacter{1E0A}{\dotaccent{D}}
-  \DeclareUnicodeCharacter{1E0B}{\dotaccent{d}}
-  \DeclareUnicodeCharacter{1E0C}{\udotaccent{D}}
-  \DeclareUnicodeCharacter{1E0D}{\udotaccent{d}}
-  \DeclareUnicodeCharacter{1E0E}{\ubaraccent{D}}
-  \DeclareUnicodeCharacter{1E0F}{\ubaraccent{d}}
-
-  \DeclareUnicodeCharacter{1E1E}{\dotaccent{F}}
-  \DeclareUnicodeCharacter{1E1F}{\dotaccent{f}}
-
-  \DeclareUnicodeCharacter{1E20}{\=G}
-  \DeclareUnicodeCharacter{1E21}{\=g}
-  \DeclareUnicodeCharacter{1E22}{\dotaccent{H}}
-  \DeclareUnicodeCharacter{1E23}{\dotaccent{h}}
-  \DeclareUnicodeCharacter{1E24}{\udotaccent{H}}
-  \DeclareUnicodeCharacter{1E25}{\udotaccent{h}}
-  \DeclareUnicodeCharacter{1E26}{\"H}
-  \DeclareUnicodeCharacter{1E27}{\"h}
-
-  \DeclareUnicodeCharacter{1E30}{\'K}
-  \DeclareUnicodeCharacter{1E31}{\'k}
-  \DeclareUnicodeCharacter{1E32}{\udotaccent{K}}
-  \DeclareUnicodeCharacter{1E33}{\udotaccent{k}}
-  \DeclareUnicodeCharacter{1E34}{\ubaraccent{K}}
-  \DeclareUnicodeCharacter{1E35}{\ubaraccent{k}}
-  \DeclareUnicodeCharacter{1E36}{\udotaccent{L}}
-  \DeclareUnicodeCharacter{1E37}{\udotaccent{l}}
-  \DeclareUnicodeCharacter{1E3A}{\ubaraccent{L}}
-  \DeclareUnicodeCharacter{1E3B}{\ubaraccent{l}}
-  \DeclareUnicodeCharacter{1E3E}{\'M}
-  \DeclareUnicodeCharacter{1E3F}{\'m}
-
-  \DeclareUnicodeCharacter{1E40}{\dotaccent{M}}
-  \DeclareUnicodeCharacter{1E41}{\dotaccent{m}}
-  \DeclareUnicodeCharacter{1E42}{\udotaccent{M}}
-  \DeclareUnicodeCharacter{1E43}{\udotaccent{m}}
-  \DeclareUnicodeCharacter{1E44}{\dotaccent{N}}
-  \DeclareUnicodeCharacter{1E45}{\dotaccent{n}}
-  \DeclareUnicodeCharacter{1E46}{\udotaccent{N}}
-  \DeclareUnicodeCharacter{1E47}{\udotaccent{n}}
-  \DeclareUnicodeCharacter{1E48}{\ubaraccent{N}}
-  \DeclareUnicodeCharacter{1E49}{\ubaraccent{n}}
-
-  \DeclareUnicodeCharacter{1E54}{\'P}
-  \DeclareUnicodeCharacter{1E55}{\'p}
-  \DeclareUnicodeCharacter{1E56}{\dotaccent{P}}
-  \DeclareUnicodeCharacter{1E57}{\dotaccent{p}}
-  \DeclareUnicodeCharacter{1E58}{\dotaccent{R}}
-  \DeclareUnicodeCharacter{1E59}{\dotaccent{r}}
-  \DeclareUnicodeCharacter{1E5A}{\udotaccent{R}}
-  \DeclareUnicodeCharacter{1E5B}{\udotaccent{r}}
-  \DeclareUnicodeCharacter{1E5E}{\ubaraccent{R}}
-  \DeclareUnicodeCharacter{1E5F}{\ubaraccent{r}}
-
-  \DeclareUnicodeCharacter{1E60}{\dotaccent{S}}
-  \DeclareUnicodeCharacter{1E61}{\dotaccent{s}}
-  \DeclareUnicodeCharacter{1E62}{\udotaccent{S}}
-  \DeclareUnicodeCharacter{1E63}{\udotaccent{s}}
-  \DeclareUnicodeCharacter{1E6A}{\dotaccent{T}}
-  \DeclareUnicodeCharacter{1E6B}{\dotaccent{t}}
-  \DeclareUnicodeCharacter{1E6C}{\udotaccent{T}}
-  \DeclareUnicodeCharacter{1E6D}{\udotaccent{t}}
-  \DeclareUnicodeCharacter{1E6E}{\ubaraccent{T}}
-  \DeclareUnicodeCharacter{1E6F}{\ubaraccent{t}}
-
-  \DeclareUnicodeCharacter{1E7C}{\~V}
-  \DeclareUnicodeCharacter{1E7D}{\~v}
-  \DeclareUnicodeCharacter{1E7E}{\udotaccent{V}}
-  \DeclareUnicodeCharacter{1E7F}{\udotaccent{v}}
-
-  \DeclareUnicodeCharacter{1E80}{\`W}
-  \DeclareUnicodeCharacter{1E81}{\`w}
-  \DeclareUnicodeCharacter{1E82}{\'W}
-  \DeclareUnicodeCharacter{1E83}{\'w}
-  \DeclareUnicodeCharacter{1E84}{\"W}
-  \DeclareUnicodeCharacter{1E85}{\"w}
-  \DeclareUnicodeCharacter{1E86}{\dotaccent{W}}
-  \DeclareUnicodeCharacter{1E87}{\dotaccent{w}}
-  \DeclareUnicodeCharacter{1E88}{\udotaccent{W}}
-  \DeclareUnicodeCharacter{1E89}{\udotaccent{w}}
-  \DeclareUnicodeCharacter{1E8A}{\dotaccent{X}}
-  \DeclareUnicodeCharacter{1E8B}{\dotaccent{x}}
-  \DeclareUnicodeCharacter{1E8C}{\"X}
-  \DeclareUnicodeCharacter{1E8D}{\"x}
-  \DeclareUnicodeCharacter{1E8E}{\dotaccent{Y}}
-  \DeclareUnicodeCharacter{1E8F}{\dotaccent{y}}
-
-  \DeclareUnicodeCharacter{1E90}{\^Z}
-  \DeclareUnicodeCharacter{1E91}{\^z}
-  \DeclareUnicodeCharacter{1E92}{\udotaccent{Z}}
-  \DeclareUnicodeCharacter{1E93}{\udotaccent{z}}
-  \DeclareUnicodeCharacter{1E94}{\ubaraccent{Z}}
-  \DeclareUnicodeCharacter{1E95}{\ubaraccent{z}}
-  \DeclareUnicodeCharacter{1E96}{\ubaraccent{h}}
-  \DeclareUnicodeCharacter{1E97}{\"t}
-  \DeclareUnicodeCharacter{1E98}{\ringaccent{w}}
-  \DeclareUnicodeCharacter{1E99}{\ringaccent{y}}
-
-  \DeclareUnicodeCharacter{1EA0}{\udotaccent{A}}
-  \DeclareUnicodeCharacter{1EA1}{\udotaccent{a}}
-
-  \DeclareUnicodeCharacter{1EB8}{\udotaccent{E}}
-  \DeclareUnicodeCharacter{1EB9}{\udotaccent{e}}
-  \DeclareUnicodeCharacter{1EBC}{\~E}
-  \DeclareUnicodeCharacter{1EBD}{\~e}
-
-  \DeclareUnicodeCharacter{1ECA}{\udotaccent{I}}
-  \DeclareUnicodeCharacter{1ECB}{\udotaccent{i}}
-  \DeclareUnicodeCharacter{1ECC}{\udotaccent{O}}
-  \DeclareUnicodeCharacter{1ECD}{\udotaccent{o}}
-
-  \DeclareUnicodeCharacter{1EE4}{\udotaccent{U}}
-  \DeclareUnicodeCharacter{1EE5}{\udotaccent{u}}
-
-  \DeclareUnicodeCharacter{1EF2}{\`Y}
-  \DeclareUnicodeCharacter{1EF3}{\`y}
-  \DeclareUnicodeCharacter{1EF4}{\udotaccent{Y}}
-
-  \DeclareUnicodeCharacter{1EF8}{\~Y}
-  \DeclareUnicodeCharacter{1EF9}{\~y}
-
+  \DeclareUnicodeCharacter{03D1}{\ensuremath\vartheta}%
+  \DeclareUnicodeCharacter{03D6}{\ensuremath\varpi}%
+  \DeclareUnicodeCharacter{03F1}{\ensuremath\varrho}%
+  %
+  \DeclareUnicodeCharacter{1E02}{\dotaccent{B}}%
+  \DeclareUnicodeCharacter{1E03}{\dotaccent{b}}%
+  \DeclareUnicodeCharacter{1E04}{\udotaccent{B}}%
+  \DeclareUnicodeCharacter{1E05}{\udotaccent{b}}%
+  \DeclareUnicodeCharacter{1E06}{\ubaraccent{B}}%
+  \DeclareUnicodeCharacter{1E07}{\ubaraccent{b}}%
+  \DeclareUnicodeCharacter{1E0A}{\dotaccent{D}}%
+  \DeclareUnicodeCharacter{1E0B}{\dotaccent{d}}%
+  \DeclareUnicodeCharacter{1E0C}{\udotaccent{D}}%
+  \DeclareUnicodeCharacter{1E0D}{\udotaccent{d}}%
+  \DeclareUnicodeCharacter{1E0E}{\ubaraccent{D}}%
+  \DeclareUnicodeCharacter{1E0F}{\ubaraccent{d}}%
+  %
+  \DeclareUnicodeCharacter{1E1E}{\dotaccent{F}}%
+  \DeclareUnicodeCharacter{1E1F}{\dotaccent{f}}%
+  %
+  \DeclareUnicodeCharacter{1E20}{\=G}%
+  \DeclareUnicodeCharacter{1E21}{\=g}%
+  \DeclareUnicodeCharacter{1E22}{\dotaccent{H}}%
+  \DeclareUnicodeCharacter{1E23}{\dotaccent{h}}%
+  \DeclareUnicodeCharacter{1E24}{\udotaccent{H}}%
+  \DeclareUnicodeCharacter{1E25}{\udotaccent{h}}%
+  \DeclareUnicodeCharacter{1E26}{\"H}%
+  \DeclareUnicodeCharacter{1E27}{\"h}%
+  %
+  \DeclareUnicodeCharacter{1E30}{\'K}%
+  \DeclareUnicodeCharacter{1E31}{\'k}%
+  \DeclareUnicodeCharacter{1E32}{\udotaccent{K}}%
+  \DeclareUnicodeCharacter{1E33}{\udotaccent{k}}%
+  \DeclareUnicodeCharacter{1E34}{\ubaraccent{K}}%
+  \DeclareUnicodeCharacter{1E35}{\ubaraccent{k}}%
+  \DeclareUnicodeCharacter{1E36}{\udotaccent{L}}%
+  \DeclareUnicodeCharacter{1E37}{\udotaccent{l}}%
+  \DeclareUnicodeCharacter{1E3A}{\ubaraccent{L}}%
+  \DeclareUnicodeCharacter{1E3B}{\ubaraccent{l}}%
+  \DeclareUnicodeCharacter{1E3E}{\'M}%
+  \DeclareUnicodeCharacter{1E3F}{\'m}%
+  %
+  \DeclareUnicodeCharacter{1E40}{\dotaccent{M}}%
+  \DeclareUnicodeCharacter{1E41}{\dotaccent{m}}%
+  \DeclareUnicodeCharacter{1E42}{\udotaccent{M}}%
+  \DeclareUnicodeCharacter{1E43}{\udotaccent{m}}%
+  \DeclareUnicodeCharacter{1E44}{\dotaccent{N}}%
+  \DeclareUnicodeCharacter{1E45}{\dotaccent{n}}%
+  \DeclareUnicodeCharacter{1E46}{\udotaccent{N}}%
+  \DeclareUnicodeCharacter{1E47}{\udotaccent{n}}%
+  \DeclareUnicodeCharacter{1E48}{\ubaraccent{N}}%
+  \DeclareUnicodeCharacter{1E49}{\ubaraccent{n}}%
+  %
+  \DeclareUnicodeCharacter{1E54}{\'P}%
+  \DeclareUnicodeCharacter{1E55}{\'p}%
+  \DeclareUnicodeCharacter{1E56}{\dotaccent{P}}%
+  \DeclareUnicodeCharacter{1E57}{\dotaccent{p}}%
+  \DeclareUnicodeCharacter{1E58}{\dotaccent{R}}%
+  \DeclareUnicodeCharacter{1E59}{\dotaccent{r}}%
+  \DeclareUnicodeCharacter{1E5A}{\udotaccent{R}}%
+  \DeclareUnicodeCharacter{1E5B}{\udotaccent{r}}%
+  \DeclareUnicodeCharacter{1E5E}{\ubaraccent{R}}%
+  \DeclareUnicodeCharacter{1E5F}{\ubaraccent{r}}%
+  %
+  \DeclareUnicodeCharacter{1E60}{\dotaccent{S}}%
+  \DeclareUnicodeCharacter{1E61}{\dotaccent{s}}%
+  \DeclareUnicodeCharacter{1E62}{\udotaccent{S}}%
+  \DeclareUnicodeCharacter{1E63}{\udotaccent{s}}%
+  \DeclareUnicodeCharacter{1E6A}{\dotaccent{T}}%
+  \DeclareUnicodeCharacter{1E6B}{\dotaccent{t}}%
+  \DeclareUnicodeCharacter{1E6C}{\udotaccent{T}}%
+  \DeclareUnicodeCharacter{1E6D}{\udotaccent{t}}%
+  \DeclareUnicodeCharacter{1E6E}{\ubaraccent{T}}%
+  \DeclareUnicodeCharacter{1E6F}{\ubaraccent{t}}%
+  %
+  \DeclareUnicodeCharacter{1E7C}{\~V}%
+  \DeclareUnicodeCharacter{1E7D}{\~v}%
+  \DeclareUnicodeCharacter{1E7E}{\udotaccent{V}}%
+  \DeclareUnicodeCharacter{1E7F}{\udotaccent{v}}%
+  %
+  \DeclareUnicodeCharacter{1E80}{\`W}%
+  \DeclareUnicodeCharacter{1E81}{\`w}%
+  \DeclareUnicodeCharacter{1E82}{\'W}%
+  \DeclareUnicodeCharacter{1E83}{\'w}%
+  \DeclareUnicodeCharacter{1E84}{\"W}%
+  \DeclareUnicodeCharacter{1E85}{\"w}%
+  \DeclareUnicodeCharacter{1E86}{\dotaccent{W}}%
+  \DeclareUnicodeCharacter{1E87}{\dotaccent{w}}%
+  \DeclareUnicodeCharacter{1E88}{\udotaccent{W}}%
+  \DeclareUnicodeCharacter{1E89}{\udotaccent{w}}%
+  \DeclareUnicodeCharacter{1E8A}{\dotaccent{X}}%
+  \DeclareUnicodeCharacter{1E8B}{\dotaccent{x}}%
+  \DeclareUnicodeCharacter{1E8C}{\"X}%
+  \DeclareUnicodeCharacter{1E8D}{\"x}%
+  \DeclareUnicodeCharacter{1E8E}{\dotaccent{Y}}%
+  \DeclareUnicodeCharacter{1E8F}{\dotaccent{y}}%
+  %
+  \DeclareUnicodeCharacter{1E90}{\^Z}%
+  \DeclareUnicodeCharacter{1E91}{\^z}%
+  \DeclareUnicodeCharacter{1E92}{\udotaccent{Z}}%
+  \DeclareUnicodeCharacter{1E93}{\udotaccent{z}}%
+  \DeclareUnicodeCharacter{1E94}{\ubaraccent{Z}}%
+  \DeclareUnicodeCharacter{1E95}{\ubaraccent{z}}%
+  \DeclareUnicodeCharacter{1E96}{\ubaraccent{h}}%
+  \DeclareUnicodeCharacter{1E97}{\"t}%
+  \DeclareUnicodeCharacter{1E98}{\ringaccent{w}}%
+  \DeclareUnicodeCharacter{1E99}{\ringaccent{y}}%
+  %
+  \DeclareUnicodeCharacter{1EA0}{\udotaccent{A}}%
+  \DeclareUnicodeCharacter{1EA1}{\udotaccent{a}}%
+  %
+  \DeclareUnicodeCharacter{1EB8}{\udotaccent{E}}%
+  \DeclareUnicodeCharacter{1EB9}{\udotaccent{e}}%
+  \DeclareUnicodeCharacter{1EBC}{\~E}%
+  \DeclareUnicodeCharacter{1EBD}{\~e}%
+  %
+  \DeclareUnicodeCharacter{1ECA}{\udotaccent{I}}%
+  \DeclareUnicodeCharacter{1ECB}{\udotaccent{i}}%
+  \DeclareUnicodeCharacter{1ECC}{\udotaccent{O}}%
+  \DeclareUnicodeCharacter{1ECD}{\udotaccent{o}}%
+  %
+  \DeclareUnicodeCharacter{1EE4}{\udotaccent{U}}%
+  \DeclareUnicodeCharacter{1EE5}{\udotaccent{u}}%
+  %
+  \DeclareUnicodeCharacter{1EF2}{\`Y}%
+  \DeclareUnicodeCharacter{1EF3}{\`y}%
+  \DeclareUnicodeCharacter{1EF4}{\udotaccent{Y}}%
+  %
+  \DeclareUnicodeCharacter{1EF8}{\~Y}%
+  \DeclareUnicodeCharacter{1EF9}{\~y}%
+  %
   % Punctuation
-  \DeclareUnicodeCharacter{2013}{--}
-  \DeclareUnicodeCharacter{2014}{---}
-  \DeclareUnicodeCharacter{2018}{\quoteleft}
-  \DeclareUnicodeCharacter{2019}{\quoteright}
-  \DeclareUnicodeCharacter{201A}{\quotesinglbase}
-  \DeclareUnicodeCharacter{201C}{\quotedblleft}
-  \DeclareUnicodeCharacter{201D}{\quotedblright}
-  \DeclareUnicodeCharacter{201E}{\quotedblbase}
-  \DeclareUnicodeCharacter{2020}{\ensuremath\dagger}
-  \DeclareUnicodeCharacter{2021}{\ensuremath\ddagger}
-  \DeclareUnicodeCharacter{2022}{\bullet}
-  \DeclareUnicodeCharacter{202F}{\thinspace}
-  \DeclareUnicodeCharacter{2026}{\dots}
-  \DeclareUnicodeCharacter{2039}{\guilsinglleft}
-  \DeclareUnicodeCharacter{203A}{\guilsinglright}
-
-  \DeclareUnicodeCharacter{20AC}{\euro}
-
-  \DeclareUnicodeCharacter{2192}{\expansion}
-  \DeclareUnicodeCharacter{21D2}{\result}
-
+  \DeclareUnicodeCharacter{2013}{--}%
+  \DeclareUnicodeCharacter{2014}{---}%
+  \DeclareUnicodeCharacter{2018}{\quoteleft}%
+  \DeclareUnicodeCharacter{2019}{\quoteright}%
+  \DeclareUnicodeCharacter{201A}{\quotesinglbase}%
+  \DeclareUnicodeCharacter{201C}{\quotedblleft}%
+  \DeclareUnicodeCharacter{201D}{\quotedblright}%
+  \DeclareUnicodeCharacter{201E}{\quotedblbase}%
+  \DeclareUnicodeCharacter{2020}{\ensuremath\dagger}%
+  \DeclareUnicodeCharacter{2021}{\ensuremath\ddagger}%
+  \DeclareUnicodeCharacter{2022}{\bullet}%
+  \DeclareUnicodeCharacter{202F}{\thinspace}%
+  \DeclareUnicodeCharacter{2026}{\dots}%
+  \DeclareUnicodeCharacter{2039}{\guilsinglleft}%
+  \DeclareUnicodeCharacter{203A}{\guilsinglright}%
+  %
+  \DeclareUnicodeCharacter{20AC}{\euro}%
+  %
+  \DeclareUnicodeCharacter{2192}{\expansion}%
+  \DeclareUnicodeCharacter{21D2}{\result}%
+  %
   % Mathematical symbols
-  \DeclareUnicodeCharacter{2200}{\ensuremath\forall}
-  \DeclareUnicodeCharacter{2203}{\ensuremath\exists}
-  \DeclareUnicodeCharacter{2208}{\ensuremath\in}
-  \DeclareUnicodeCharacter{2212}{\minus}
-  \DeclareUnicodeCharacter{2217}{\ast}
-  \DeclareUnicodeCharacter{221E}{\ensuremath\infty}
-  \DeclareUnicodeCharacter{2225}{\ensuremath\parallel}
-  \DeclareUnicodeCharacter{2227}{\ensuremath\wedge}
-  \DeclareUnicodeCharacter{2229}{\ensuremath\cap}
-  \DeclareUnicodeCharacter{2261}{\equiv}
-  \DeclareUnicodeCharacter{2264}{\ensuremath\leq}
-  \DeclareUnicodeCharacter{2265}{\ensuremath\geq}
-  \DeclareUnicodeCharacter{2282}{\ensuremath\subset}
-  \DeclareUnicodeCharacter{2287}{\ensuremath\supseteq}
-
-  \DeclareUnicodeCharacter{2016}{\ensuremath\Vert}
-  \DeclareUnicodeCharacter{2032}{\ensuremath\prime}
-  \DeclareUnicodeCharacter{210F}{\ensuremath\hbar}
-  \DeclareUnicodeCharacter{2111}{\ensuremath\Im}
-  \DeclareUnicodeCharacter{2113}{\ensuremath\ell}
-  \DeclareUnicodeCharacter{2118}{\ensuremath\wp}
-  \DeclareUnicodeCharacter{211C}{\ensuremath\Re}
-  \DeclareUnicodeCharacter{2127}{\ensuremath\mho}
-  \DeclareUnicodeCharacter{2135}{\ensuremath\aleph}
-  \DeclareUnicodeCharacter{2190}{\ensuremath\leftarrow}
-  \DeclareUnicodeCharacter{2191}{\ensuremath\uparrow}
-  \DeclareUnicodeCharacter{2193}{\ensuremath\downarrow}
-  \DeclareUnicodeCharacter{2194}{\ensuremath\leftrightarrow}
-  \DeclareUnicodeCharacter{2195}{\ensuremath\updownarrow}
-  \DeclareUnicodeCharacter{2196}{\ensuremath\nwarrow}
-  \DeclareUnicodeCharacter{2197}{\ensuremath\nearrow}
-  \DeclareUnicodeCharacter{2198}{\ensuremath\searrow}
-  \DeclareUnicodeCharacter{2199}{\ensuremath\swarrow}
-  \DeclareUnicodeCharacter{21A6}{\ensuremath\mapsto}
-  \DeclareUnicodeCharacter{21A9}{\ensuremath\hookleftarrow}
-  \DeclareUnicodeCharacter{21AA}{\ensuremath\hookrightarrow}
-  \DeclareUnicodeCharacter{21BC}{\ensuremath\leftharpoonup}
-  \DeclareUnicodeCharacter{21BD}{\ensuremath\leftharpoondown}
-  \DeclareUnicodeCharacter{21BE}{\ensuremath\upharpoonright}
-  \DeclareUnicodeCharacter{21C0}{\ensuremath\rightharpoonup}
-  \DeclareUnicodeCharacter{21C1}{\ensuremath\rightharpoondown}
-  \DeclareUnicodeCharacter{21CC}{\ensuremath\rightleftharpoons}
-  \DeclareUnicodeCharacter{21D0}{\ensuremath\Leftarrow}
-  \DeclareUnicodeCharacter{21D1}{\ensuremath\Uparrow}
-  \DeclareUnicodeCharacter{21D3}{\ensuremath\Downarrow}
-  \DeclareUnicodeCharacter{21D4}{\ensuremath\Leftrightarrow}
-  \DeclareUnicodeCharacter{21D5}{\ensuremath\Updownarrow}
-  \DeclareUnicodeCharacter{21DD}{\ensuremath\leadsto}
-  \DeclareUnicodeCharacter{2201}{\ensuremath\complement}
-  \DeclareUnicodeCharacter{2202}{\ensuremath\partial}
-  \DeclareUnicodeCharacter{2205}{\ensuremath\emptyset}
-  \DeclareUnicodeCharacter{2207}{\ensuremath\nabla}
-  \DeclareUnicodeCharacter{2209}{\ensuremath\notin}
-  \DeclareUnicodeCharacter{220B}{\ensuremath\owns}
-  \DeclareUnicodeCharacter{220F}{\ensuremath\prod}
-  \DeclareUnicodeCharacter{2210}{\ensuremath\coprod}
-  \DeclareUnicodeCharacter{2211}{\ensuremath\sum}
-  \DeclareUnicodeCharacter{2213}{\ensuremath\mp}
-  \DeclareUnicodeCharacter{2218}{\ensuremath\circ}
-  \DeclareUnicodeCharacter{221A}{\ensuremath\surd}
-  \DeclareUnicodeCharacter{221D}{\ensuremath\propto}
-  \DeclareUnicodeCharacter{2220}{\ensuremath\angle}
-  \DeclareUnicodeCharacter{2223}{\ensuremath\mid}
-  \DeclareUnicodeCharacter{2228}{\ensuremath\vee}
-  \DeclareUnicodeCharacter{222A}{\ensuremath\cup}
-  \DeclareUnicodeCharacter{222B}{\ensuremath\smallint}
-  \DeclareUnicodeCharacter{222E}{\ensuremath\oint}
-  \DeclareUnicodeCharacter{223C}{\ensuremath\sim}
-  \DeclareUnicodeCharacter{2240}{\ensuremath\wr}
-  \DeclareUnicodeCharacter{2243}{\ensuremath\simeq}
-  \DeclareUnicodeCharacter{2245}{\ensuremath\cong}
-  \DeclareUnicodeCharacter{2248}{\ensuremath\approx}
-  \DeclareUnicodeCharacter{224D}{\ensuremath\asymp}
-  \DeclareUnicodeCharacter{2250}{\ensuremath\doteq}
-  \DeclareUnicodeCharacter{2260}{\ensuremath\neq}
-  \DeclareUnicodeCharacter{226A}{\ensuremath\ll}
-  \DeclareUnicodeCharacter{226B}{\ensuremath\gg}
-  \DeclareUnicodeCharacter{227A}{\ensuremath\prec}
-  \DeclareUnicodeCharacter{227B}{\ensuremath\succ}
-  \DeclareUnicodeCharacter{2283}{\ensuremath\supset}
-  \DeclareUnicodeCharacter{2286}{\ensuremath\subseteq}
-  \DeclareUnicodeCharacter{228E}{\ensuremath\uplus}
-  \DeclareUnicodeCharacter{228F}{\ensuremath\sqsubset}
-  \DeclareUnicodeCharacter{2290}{\ensuremath\sqsupset}
-  \DeclareUnicodeCharacter{2291}{\ensuremath\sqsubseteq}
-  \DeclareUnicodeCharacter{2292}{\ensuremath\sqsupseteq}
-  \DeclareUnicodeCharacter{2293}{\ensuremath\sqcap}
-  \DeclareUnicodeCharacter{2294}{\ensuremath\sqcup}
-  \DeclareUnicodeCharacter{2295}{\ensuremath\oplus}
-  \DeclareUnicodeCharacter{2296}{\ensuremath\ominus}
-  \DeclareUnicodeCharacter{2297}{\ensuremath\otimes}
-  \DeclareUnicodeCharacter{2298}{\ensuremath\oslash}
-  \DeclareUnicodeCharacter{2299}{\ensuremath\odot}
-  \DeclareUnicodeCharacter{22A2}{\ensuremath\vdash}
-  \DeclareUnicodeCharacter{22A3}{\ensuremath\dashv}
-  \DeclareUnicodeCharacter{22A4}{\ensuremath\ptextop}
-  \DeclareUnicodeCharacter{22A5}{\ensuremath\bot}
-  \DeclareUnicodeCharacter{22A8}{\ensuremath\models}
-  \DeclareUnicodeCharacter{22B4}{\ensuremath\unlhd}
-  \DeclareUnicodeCharacter{22B5}{\ensuremath\unrhd}
-  \DeclareUnicodeCharacter{22C0}{\ensuremath\bigwedge}
-  \DeclareUnicodeCharacter{22C1}{\ensuremath\bigvee}
-  \DeclareUnicodeCharacter{22C2}{\ensuremath\bigcap}
-  \DeclareUnicodeCharacter{22C3}{\ensuremath\bigcup}
-  \DeclareUnicodeCharacter{22C4}{\ensuremath\diamond}
-  \DeclareUnicodeCharacter{22C5}{\ensuremath\cdot}
-  \DeclareUnicodeCharacter{22C6}{\ensuremath\star}
-  \DeclareUnicodeCharacter{22C8}{\ensuremath\bowtie}
-  \DeclareUnicodeCharacter{2308}{\ensuremath\lceil}
-  \DeclareUnicodeCharacter{2309}{\ensuremath\rceil}
-  \DeclareUnicodeCharacter{230A}{\ensuremath\lfloor}
-  \DeclareUnicodeCharacter{230B}{\ensuremath\rfloor}
-  \DeclareUnicodeCharacter{2322}{\ensuremath\frown}
-  \DeclareUnicodeCharacter{2323}{\ensuremath\smile}
-
-  \DeclareUnicodeCharacter{25A1}{\ensuremath\Box}
-  \DeclareUnicodeCharacter{25B3}{\ensuremath\triangle}
-  \DeclareUnicodeCharacter{25B7}{\ensuremath\triangleright}
-  \DeclareUnicodeCharacter{25BD}{\ensuremath\bigtriangledown}
-  \DeclareUnicodeCharacter{25C1}{\ensuremath\triangleleft}
-  \DeclareUnicodeCharacter{25C7}{\ensuremath\Diamond}
-  \DeclareUnicodeCharacter{2660}{\ensuremath\spadesuit}
-  \DeclareUnicodeCharacter{2661}{\ensuremath\heartsuit}
-  \DeclareUnicodeCharacter{2662}{\ensuremath\diamondsuit}
-  \DeclareUnicodeCharacter{2663}{\ensuremath\clubsuit}
-  \DeclareUnicodeCharacter{266D}{\ensuremath\flat}
-  \DeclareUnicodeCharacter{266E}{\ensuremath\natural}
-  \DeclareUnicodeCharacter{266F}{\ensuremath\sharp}
-  \DeclareUnicodeCharacter{26AA}{\ensuremath\bigcirc}
-  \DeclareUnicodeCharacter{27B9}{\ensuremath\rangle}
-  \DeclareUnicodeCharacter{27C2}{\ensuremath\perp}
-  \DeclareUnicodeCharacter{27E8}{\ensuremath\langle}
-  \DeclareUnicodeCharacter{27F5}{\ensuremath\longleftarrow}
-  \DeclareUnicodeCharacter{27F6}{\ensuremath\longrightarrow}
-  \DeclareUnicodeCharacter{27F7}{\ensuremath\longleftrightarrow}
-  \DeclareUnicodeCharacter{27FC}{\ensuremath\longmapsto}
-  \DeclareUnicodeCharacter{29F5}{\ensuremath\setminus}
-  \DeclareUnicodeCharacter{2A00}{\ensuremath\bigodot}
-  \DeclareUnicodeCharacter{2A01}{\ensuremath\bigoplus}
-  \DeclareUnicodeCharacter{2A02}{\ensuremath\bigotimes}
-  \DeclareUnicodeCharacter{2A04}{\ensuremath\biguplus}
-  \DeclareUnicodeCharacter{2A06}{\ensuremath\bigsqcup}
-  \DeclareUnicodeCharacter{2A1D}{\ensuremath\Join}
-  \DeclareUnicodeCharacter{2A3F}{\ensuremath\amalg}
-  \DeclareUnicodeCharacter{2AAF}{\ensuremath\preceq}
-  \DeclareUnicodeCharacter{2AB0}{\ensuremath\succeq}
-
-  \global\mathchardef\checkmark="1370 % actually the square root sign
-  \DeclareUnicodeCharacter{2713}{\ensuremath\checkmark}
-}% end of \utfeightchardefs
+  \DeclareUnicodeCharacter{2200}{\ensuremath\forall}%
+  \DeclareUnicodeCharacter{2203}{\ensuremath\exists}%
+  \DeclareUnicodeCharacter{2208}{\ensuremath\in}%
+  \DeclareUnicodeCharacter{2212}{\minus}%
+  \DeclareUnicodeCharacter{2217}{\ast}%
+  \DeclareUnicodeCharacter{221E}{\ensuremath\infty}%
+  \DeclareUnicodeCharacter{2225}{\ensuremath\parallel}%
+  \DeclareUnicodeCharacter{2227}{\ensuremath\wedge}%
+  \DeclareUnicodeCharacter{2229}{\ensuremath\cap}%
+  \DeclareUnicodeCharacter{2261}{\equiv}%
+  \DeclareUnicodeCharacter{2264}{\ensuremath\leq}%
+  \DeclareUnicodeCharacter{2265}{\ensuremath\geq}%
+  \DeclareUnicodeCharacter{2282}{\ensuremath\subset}%
+  \DeclareUnicodeCharacter{2287}{\ensuremath\supseteq}%
+  %
+  \DeclareUnicodeCharacter{2016}{\ensuremath\Vert}%
+  \DeclareUnicodeCharacter{2032}{\ensuremath\prime}%
+  \DeclareUnicodeCharacter{210F}{\ensuremath\hbar}%
+  \DeclareUnicodeCharacter{2111}{\ensuremath\Im}%
+  \DeclareUnicodeCharacter{2113}{\ensuremath\ell}%
+  \DeclareUnicodeCharacter{2118}{\ensuremath\wp}%
+  \DeclareUnicodeCharacter{211C}{\ensuremath\Re}%
+  \DeclareUnicodeCharacter{2127}{\ensuremath\mho}%
+  \DeclareUnicodeCharacter{2135}{\ensuremath\aleph}%
+  \DeclareUnicodeCharacter{2190}{\ensuremath\leftarrow}%
+  \DeclareUnicodeCharacter{2191}{\ensuremath\uparrow}%
+  \DeclareUnicodeCharacter{2193}{\ensuremath\downarrow}%
+  \DeclareUnicodeCharacter{2194}{\ensuremath\leftrightarrow}%
+  \DeclareUnicodeCharacter{2195}{\ensuremath\updownarrow}%
+  \DeclareUnicodeCharacter{2196}{\ensuremath\nwarrow}%
+  \DeclareUnicodeCharacter{2197}{\ensuremath\nearrow}%
+  \DeclareUnicodeCharacter{2198}{\ensuremath\searrow}%
+  \DeclareUnicodeCharacter{2199}{\ensuremath\swarrow}%
+  \DeclareUnicodeCharacter{21A6}{\ensuremath\mapsto}%
+  \DeclareUnicodeCharacter{21A9}{\ensuremath\hookleftarrow}%
+  \DeclareUnicodeCharacter{21AA}{\ensuremath\hookrightarrow}%
+  \DeclareUnicodeCharacter{21BC}{\ensuremath\leftharpoonup}%
+  \DeclareUnicodeCharacter{21BD}{\ensuremath\leftharpoondown}%
+  \DeclareUnicodeCharacter{21BE}{\ensuremath\upharpoonright}%
+  \DeclareUnicodeCharacter{21C0}{\ensuremath\rightharpoonup}%
+  \DeclareUnicodeCharacter{21C1}{\ensuremath\rightharpoondown}%
+  \DeclareUnicodeCharacter{21CC}{\ensuremath\rightleftharpoons}%
+  \DeclareUnicodeCharacter{21D0}{\ensuremath\Leftarrow}%
+  \DeclareUnicodeCharacter{21D1}{\ensuremath\Uparrow}%
+  \DeclareUnicodeCharacter{21D3}{\ensuremath\Downarrow}%
+  \DeclareUnicodeCharacter{21D4}{\ensuremath\Leftrightarrow}%
+  \DeclareUnicodeCharacter{21D5}{\ensuremath\Updownarrow}%
+  \DeclareUnicodeCharacter{21DD}{\ensuremath\leadsto}%
+  \DeclareUnicodeCharacter{2201}{\ensuremath\complement}%
+  \DeclareUnicodeCharacter{2202}{\ensuremath\partial}%
+  \DeclareUnicodeCharacter{2205}{\ensuremath\emptyset}%
+  \DeclareUnicodeCharacter{2207}{\ensuremath\nabla}%
+  \DeclareUnicodeCharacter{2209}{\ensuremath\notin}%
+  \DeclareUnicodeCharacter{220B}{\ensuremath\owns}%
+  \DeclareUnicodeCharacter{220F}{\ensuremath\prod}%
+  \DeclareUnicodeCharacter{2210}{\ensuremath\coprod}%
+  \DeclareUnicodeCharacter{2211}{\ensuremath\sum}%
+  \DeclareUnicodeCharacter{2213}{\ensuremath\mp}%
+  \DeclareUnicodeCharacter{2218}{\ensuremath\circ}%
+  \DeclareUnicodeCharacter{221A}{\ensuremath\surd}%
+  \DeclareUnicodeCharacter{221D}{\ensuremath\propto}%
+  \DeclareUnicodeCharacter{2220}{\ensuremath\angle}%
+  \DeclareUnicodeCharacter{2223}{\ensuremath\mid}%
+  \DeclareUnicodeCharacter{2228}{\ensuremath\vee}%
+  \DeclareUnicodeCharacter{222A}{\ensuremath\cup}%
+  \DeclareUnicodeCharacter{222B}{\ensuremath\smallint}%
+  \DeclareUnicodeCharacter{222E}{\ensuremath\oint}%
+  \DeclareUnicodeCharacter{223C}{\ensuremath\sim}%
+  \DeclareUnicodeCharacter{2240}{\ensuremath\wr}%
+  \DeclareUnicodeCharacter{2243}{\ensuremath\simeq}%
+  \DeclareUnicodeCharacter{2245}{\ensuremath\cong}%
+  \DeclareUnicodeCharacter{2248}{\ensuremath\approx}%
+  \DeclareUnicodeCharacter{224D}{\ensuremath\asymp}%
+  \DeclareUnicodeCharacter{2250}{\ensuremath\doteq}%
+  \DeclareUnicodeCharacter{2260}{\ensuremath\neq}%
+  \DeclareUnicodeCharacter{226A}{\ensuremath\ll}%
+  \DeclareUnicodeCharacter{226B}{\ensuremath\gg}%
+  \DeclareUnicodeCharacter{227A}{\ensuremath\prec}%
+  \DeclareUnicodeCharacter{227B}{\ensuremath\succ}%
+  \DeclareUnicodeCharacter{2283}{\ensuremath\supset}%
+  \DeclareUnicodeCharacter{2286}{\ensuremath\subseteq}%
+  \DeclareUnicodeCharacter{228E}{\ensuremath\uplus}%
+  \DeclareUnicodeCharacter{228F}{\ensuremath\sqsubset}%
+  \DeclareUnicodeCharacter{2290}{\ensuremath\sqsupset}%
+  \DeclareUnicodeCharacter{2291}{\ensuremath\sqsubseteq}%
+  \DeclareUnicodeCharacter{2292}{\ensuremath\sqsupseteq}%
+  \DeclareUnicodeCharacter{2293}{\ensuremath\sqcap}%
+  \DeclareUnicodeCharacter{2294}{\ensuremath\sqcup}%
+  \DeclareUnicodeCharacter{2295}{\ensuremath\oplus}%
+  \DeclareUnicodeCharacter{2296}{\ensuremath\ominus}%
+  \DeclareUnicodeCharacter{2297}{\ensuremath\otimes}%
+  \DeclareUnicodeCharacter{2298}{\ensuremath\oslash}%
+  \DeclareUnicodeCharacter{2299}{\ensuremath\odot}%
+  \DeclareUnicodeCharacter{22A2}{\ensuremath\vdash}%
+  \DeclareUnicodeCharacter{22A3}{\ensuremath\dashv}%
+  \DeclareUnicodeCharacter{22A4}{\ensuremath\ptextop}%
+  \DeclareUnicodeCharacter{22A5}{\ensuremath\bot}%
+  \DeclareUnicodeCharacter{22A8}{\ensuremath\models}%
+  \DeclareUnicodeCharacter{22B4}{\ensuremath\unlhd}%
+  \DeclareUnicodeCharacter{22B5}{\ensuremath\unrhd}%
+  \DeclareUnicodeCharacter{22C0}{\ensuremath\bigwedge}%
+  \DeclareUnicodeCharacter{22C1}{\ensuremath\bigvee}%
+  \DeclareUnicodeCharacter{22C2}{\ensuremath\bigcap}%
+  \DeclareUnicodeCharacter{22C3}{\ensuremath\bigcup}%
+  \DeclareUnicodeCharacter{22C4}{\ensuremath\diamond}%
+  \DeclareUnicodeCharacter{22C5}{\ensuremath\cdot}%
+  \DeclareUnicodeCharacter{22C6}{\ensuremath\star}%
+  \DeclareUnicodeCharacter{22C8}{\ensuremath\bowtie}%
+  \DeclareUnicodeCharacter{2308}{\ensuremath\lceil}%
+  \DeclareUnicodeCharacter{2309}{\ensuremath\rceil}%
+  \DeclareUnicodeCharacter{230A}{\ensuremath\lfloor}%
+  \DeclareUnicodeCharacter{230B}{\ensuremath\rfloor}%
+  \DeclareUnicodeCharacter{2322}{\ensuremath\frown}%
+  \DeclareUnicodeCharacter{2323}{\ensuremath\smile}%
+  %
+  \DeclareUnicodeCharacter{25A1}{\ensuremath\Box}%
+  \DeclareUnicodeCharacter{25B3}{\ensuremath\triangle}%
+  \DeclareUnicodeCharacter{25B7}{\ensuremath\triangleright}%
+  \DeclareUnicodeCharacter{25BD}{\ensuremath\bigtriangledown}%
+  \DeclareUnicodeCharacter{25C1}{\ensuremath\triangleleft}%
+  \DeclareUnicodeCharacter{25C7}{\ensuremath\Diamond}%
+  \DeclareUnicodeCharacter{2660}{\ensuremath\spadesuit}%
+  \DeclareUnicodeCharacter{2661}{\ensuremath\heartsuit}%
+  \DeclareUnicodeCharacter{2662}{\ensuremath\diamondsuit}%
+  \DeclareUnicodeCharacter{2663}{\ensuremath\clubsuit}%
+  \DeclareUnicodeCharacter{266D}{\ensuremath\flat}%
+  \DeclareUnicodeCharacter{266E}{\ensuremath\natural}%
+  \DeclareUnicodeCharacter{266F}{\ensuremath\sharp}%
+  \DeclareUnicodeCharacter{26AA}{\ensuremath\bigcirc}%
+  \DeclareUnicodeCharacter{27B9}{\ensuremath\rangle}%
+  \DeclareUnicodeCharacter{27C2}{\ensuremath\perp}%
+  \DeclareUnicodeCharacter{27E8}{\ensuremath\langle}%
+  \DeclareUnicodeCharacter{27F5}{\ensuremath\longleftarrow}%
+  \DeclareUnicodeCharacter{27F6}{\ensuremath\longrightarrow}%
+  \DeclareUnicodeCharacter{27F7}{\ensuremath\longleftrightarrow}%
+  \DeclareUnicodeCharacter{27FC}{\ensuremath\longmapsto}%
+  \DeclareUnicodeCharacter{29F5}{\ensuremath\setminus}%
+  \DeclareUnicodeCharacter{2A00}{\ensuremath\bigodot}%
+  \DeclareUnicodeCharacter{2A01}{\ensuremath\bigoplus}%
+  \DeclareUnicodeCharacter{2A02}{\ensuremath\bigotimes}%
+  \DeclareUnicodeCharacter{2A04}{\ensuremath\biguplus}%
+  \DeclareUnicodeCharacter{2A06}{\ensuremath\bigsqcup}%
+  \DeclareUnicodeCharacter{2A1D}{\ensuremath\Join}%
+  \DeclareUnicodeCharacter{2A3F}{\ensuremath\amalg}%
+  \DeclareUnicodeCharacter{2AAF}{\ensuremath\preceq}%
+  \DeclareUnicodeCharacter{2AB0}{\ensuremath\succeq}%
+  %
+  \global\mathchardef\checkmark="1370% actually the square root sign
+  \DeclareUnicodeCharacter{2713}{\ensuremath\checkmark}%
+}% end of \unicodechardefs
+
+% UTF-8 byte sequence (pdfTeX) definitions (replacing and @U command)
+% It makes the setting that replace UTF-8 byte sequence.
+\def\utfeightchardefs{%
+  \let\DeclareUnicodeCharacter\DeclareUnicodeCharacterUTFviii
+  \unicodechardefs
+}
+
+\newif\ifpassthroughchars
+\passthroughcharsfalse
+
+% For native Unicode (XeTeX and LuaTeX)
+% Definition macro to replace / pass-through the Unicode character
+%
+\def\DeclareUnicodeCharacterNative#1#2{%
+  \catcode"#1=\active
+  \def\dodeclareunicodecharacternative##1##2##3{%
+    \begingroup
+      \uccode`\~="##2\relax
+      \uppercase{\gdef~}{%
+        \ifpassthroughchars
+          ##1%
+        \else
+          ##3%
+        \fi
+      }
+    \endgroup
+  }
+  \begingroup
+    \uccode`\.="#1\relax
+    \uppercase{\def\UTFNativeTmp{.}}%
+    \expandafter\dodeclareunicodecharacternative\UTFNativeTmp{#1}{#2}%
+  \endgroup
+}
+
+% Native Unicode (XeTeX and LuaTeX) character replacing definitions
+% It makes the setting that replace the Unicode characters.
+\def\nativeunicodechardefs{%
+  \let\DeclareUnicodeCharacter\DeclareUnicodeCharacterNative
+  \unicodechardefs
+}
+
+% For native Unicode (XeTeX and LuaTeX).  Make the character token expand
+% to the sequences given in \unicodechardefs for printing.
+\def\DeclareUnicodeCharacterNativeAtU#1#2{%
+  \def\UTFAtUTmp{#2}
+  \expandafter\globallet\csname uni:#1\endcsname \UTFAtUTmp
+}
+
+% Native Unicode (XeTeX and LuaTeX) @U command definitions
+\def\nativeunicodechardefsatu{%
+  \let\DeclareUnicodeCharacter\DeclareUnicodeCharacterNativeAtU
+  \unicodechardefs
+}
+
+% Native Unicode (XeTeX and LuaTeX) catcode other non global definitions
+\def\nativeunicodecharscatcodeothernonglobal{%
+  \let\DeclareUnicodeCharacter\DeclareUnicodeCharacterNativeOther
+  \unicodechardefs
+}
+
+% Catcode (non-ASCII or native Unicode) are set to \other (non-global
+% assignments).
+\def\setcharscatcodeothernonglobal{%
+  \iftxiusebytewiseio
+    \setnonasciicharscatcodenonglobal\other
+  \else
+    \nativeunicodecharscatcodeothernonglobal
+  \fi
+}
 
 % US-ASCII character definitions.
 \def\asciichardefs{% nothing need be done
    \relax
 }
 
-% Latin1 (ISO-8859-1) character definitions.
+% Redefine the active definitions of non-ASCII characters to expand to
+% non-active tokens with the same character code.
 \def\nonasciistringdefs{%
   \setnonasciicharscatcode\active
   \def\defstringchar##1{\def##1{\string##1}}%
@@ -10607,9 +10942,23 @@ directory should work if nowhere else does.}
   \defstringchar^^fc\defstringchar^^fd\defstringchar^^fe\defstringchar^^ff%
 }
 
+% Write characters literally, instead of using active definitions for
+% printing the correct glyphs.
+\def\passthroughcharacters{%
+  \iftxiusebytewiseio
+    \nonasciistringdefs
+  \else
+    \passthroughcharstrue
+  \fi
+}
+
 
 % define all the unicode characters we know about, for the sake of @U.
-\utfeightchardefs
+\iftxinativeunicodecapable
+  \nativeunicodechardefsatu
+\else
+  \utfeightchardefs
+\fi
 
 
 % Make non-ASCII characters printable again for compatibility with
@@ -10958,7 +11307,7 @@ directory should work if nowhere else does.}
 %
 {@catcode`- = @active
  @gdef@normalturnoffactive{%
-   @nonasciistringdefs
+   @passthroughcharacters
    @let-=@normaldash
    @let"=@normaldoublequote
    @let$=@normaldollar %$ font-lock fix
@@ -11004,9 +11353,20 @@ directory should work if nowhere else does.}
 {@catcode`@^=7 @catcode`@^^M=13%
 @gdef@eatinput input texinfo#1^^M{@fixbackslash}}
 
+% Emergency active definition of newline, in case an active newline token
+% appears by mistake.
+{@catcode`@^=7 @catcode13=13%
+@gdef@enableemergencynewline{%
+  @gdef^^M{%
+    @par%
+    %<warning: active newline>@par%
+}}}
+
+
 @gdef@fixbackslash{%
   @ifx\@eatinput @let\ = @ttbackslash @fi
   @catcode13=5 % regular end of line
+  @enableemergencynewline
   @let@c=@texinfoc
   % Also turn back on active characters that might appear in the input
   % file name, in case not using a pre-dumped format.