diff options
Diffstat (limited to 'Build/source/texk')
54 files changed, 4956 insertions, 4764 deletions
diff --git a/Build/source/texk/README b/Build/source/texk/README index e426cb64d0c..d9c1ac53675 100644 --- a/Build/source/texk/README +++ b/Build/source/texk/README @@ -62,7 +62,7 @@ dvipsk - maintained here, by us dvisvgm 1.14.2 - checked 20jan16 http://dvisvgm.bplaced.net/Downloads -gregorio 4.1.0-beta1 - checked 23jan16 +gregorio 4.1.0-beta2 - checked 09feb16 https://github.com/gregorio-project/gregorio/releases/ gsftopk - from Paul Vojta's xdvi? diff --git a/Build/source/texk/gregorio/ChangeLog b/Build/source/texk/gregorio/ChangeLog index 9a853ced7f6..f0dcfadc008 100644 --- a/Build/source/texk/gregorio/ChangeLog +++ b/Build/source/texk/gregorio/ChangeLog @@ -1,3 +1,8 @@ +2016-02-09 Akira Kakuto <kakuto@fuk.kindai.ac.jp> + + Import gregorio-4.1.0-beta2. + * version.ac: Adapted. + 2016-02-08 Karl Berry <karl@tug.org> * configure.ac (gl_FUNC_REALPATH_WORKS): from gnulib/canonicalize.m4. diff --git a/Build/source/texk/gregorio/configure b/Build/source/texk/gregorio/configure index 38d3f87ab27..3ac42a85fb5 100755 --- a/Build/source/texk/gregorio/configure +++ b/Build/source/texk/gregorio/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for Gregorio (TeX Live) 4.1.0-beta1. +# Generated by GNU Autoconf 2.69 for Gregorio (TeX Live) 4.1.0-beta2. # # Report bugs to <tex-k@tug.org>. # @@ -590,8 +590,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='Gregorio (TeX Live)' PACKAGE_TARNAME='gregorio--tex-live-' -PACKAGE_VERSION='4.1.0-beta1' -PACKAGE_STRING='Gregorio (TeX Live) 4.1.0-beta1' +PACKAGE_VERSION='4.1.0-beta2' +PACKAGE_STRING='Gregorio (TeX Live) 4.1.0-beta2' PACKAGE_BUGREPORT='tex-k@tug.org' PACKAGE_URL='' @@ -1330,7 +1330,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures Gregorio (TeX Live) 4.1.0-beta1 to adapt to many kinds of systems. +\`configure' configures Gregorio (TeX Live) 4.1.0-beta2 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1401,7 +1401,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of Gregorio (TeX Live) 4.1.0-beta1:";; + short | recursive ) echo "Configuration of Gregorio (TeX Live) 4.1.0-beta2:";; esac cat <<\_ACEOF @@ -1520,7 +1520,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -Gregorio (TeX Live) configure 4.1.0-beta1 +Gregorio (TeX Live) configure 4.1.0-beta2 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2176,7 +2176,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by Gregorio (TeX Live) $as_me 4.1.0-beta1, which was +It was created by Gregorio (TeX Live) $as_me 4.1.0-beta2, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -7862,7 +7862,7 @@ fi # Define the identity of the package. PACKAGE='gregorio--tex-live-' - VERSION='4.1.0-beta1' + VERSION='4.1.0-beta2' cat >>confdefs.h <<_ACEOF @@ -14246,7 +14246,7 @@ Usage: $0 [OPTIONS] Report bugs to <bug-libtool@gnu.org>." lt_cl_version="\ -Gregorio (TeX Live) config.lt 4.1.0-beta1 +Gregorio (TeX Live) config.lt 4.1.0-beta2 configured by $0, generated by GNU Autoconf 2.69. Copyright (C) 2011 Free Software Foundation, Inc. @@ -15833,7 +15833,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by Gregorio (TeX Live) $as_me 4.1.0-beta1, which was +This file was extended by Gregorio (TeX Live) $as_me 4.1.0-beta2, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -15899,7 +15899,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -Gregorio (TeX Live) config.status 4.1.0-beta1 +Gregorio (TeX Live) config.status 4.1.0-beta2 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff --git a/Build/source/texk/gregorio/gregorio-src-PATCHES/ChangeLog b/Build/source/texk/gregorio/gregorio-src-PATCHES/ChangeLog index d0a4b2ea781..fc18710396c 100644 --- a/Build/source/texk/gregorio/gregorio-src-PATCHES/ChangeLog +++ b/Build/source/texk/gregorio/gregorio-src-PATCHES/ChangeLog @@ -1,3 +1,7 @@ +2016-02-09 Akira Kakuto <kakuto@fuk.kindai.ac.jp> + + Import gregorio-4.1.0-beta2. + 2016-01-23 Akira Kakuto <kakuto@fuk.kindai.ac.jp> Import gregorio-4.1.0-beta1. diff --git a/Build/source/texk/gregorio/gregorio-src-PATCHES/TL-Changes b/Build/source/texk/gregorio/gregorio-src-PATCHES/TL-Changes index e725e89f2f3..ec45fa8ca1c 100644 --- a/Build/source/texk/gregorio/gregorio-src-PATCHES/TL-Changes +++ b/Build/source/texk/gregorio/gregorio-src-PATCHES/TL-Changes @@ -1,5 +1,5 @@ -Changes applied to the gregorio-4.1.0-beta1 tree as obtained from: - https://github.com/gregorio-project/gregorio/releases/tag/v4.1.0-beta1/ +Changes applied to the gregorio-4.1.0-beta2 tree as obtained from: + https://github.com/gregorio-project/gregorio/releases/tag/v4.1.0-beta2/ Remove: Makefile.in diff --git a/Build/source/texk/gregorio/gregorio-src/.gregorio-version b/Build/source/texk/gregorio/gregorio-src/.gregorio-version index 29acce08903..e708a2f0559 100644 --- a/Build/source/texk/gregorio/gregorio-src/.gregorio-version +++ b/Build/source/texk/gregorio/gregorio-src/.gregorio-version @@ -1,4 +1,4 @@ -4.1.0-beta1 +4.1.0-beta2 *** Do not modify this file. *** Use VersionManager.py to change the version. diff --git a/Build/source/texk/gregorio/gregorio-src/CHANGELOG.md b/Build/source/texk/gregorio/gregorio-src/CHANGELOG.md index 10f2299b371..f4628803fd8 100644 --- a/Build/source/texk/gregorio/gregorio-src/CHANGELOG.md +++ b/Build/source/texk/gregorio/gregorio-src/CHANGELOG.md @@ -5,6 +5,25 @@ As of v3.0.0 this project adheres to [Semantic Versioning](http://semver.org/). ## [Unreleased][unreleased] +## [4.1.0-beta2] - 2016-02-08 +### Fixed +- When a flat on a ledger line (`bx` or `lx`) was preceding a note also on a ledger line, the ledger line was partially visible inside the flat, see [#882](https://github.com/gregorio-project/gregorio/issues/882). +- Compilation of documents produced with Gregorio should be slightly faster. + +### Changed +- Stem length for virgas, flexus, pes quadratum, etc. are now tunable, and have been reviewed, see [#803](https://github.com/gregorio-project/gregorio/issues/803). +- Height of the porrectus have been altered (first note moved up, second also moved up when second ambitus is more than one) so that they are more coherent with the punctum height. The porrectus stroke drawings have also been slightly altered to be slightly thinner and sharper around the bottom note (see [#858](https://github.com/gregorio-project/gregorio/issues/858)). +- When a syllable is preceeded by a punctum mora, gregorio now ignores the punctum mora in the spacing of the syllables by default, and also adds a custom space (defaulting to 0). You can change this behavior with `\gresetshiftaftermora{}`, see GregorioRef for its arguments. To balance the output, space before a punctum mora has been made slightly thinner, more in line with old Solesmes books. (For the change requests, see [#795](https://github.com/gregorio-project/gregorio/issues/795) and [#871](https://github.com/gregorio-project/gregorio/issues/871)). +- The `--admin` option is removed from the `initexmf` call for MiKTeX installations, allowing the installer to work better on Windows 10. +- MiKTeX installations no longer copy files into TEXMFLOCAL but instead registers the texmf folder which the installer creates with MiKTeX, allowing it to use those files in place. See [#884](https://github.com/gregorio-project/gregorio/issues/884) +- Added an uninstall script which will run as part of the uninstall action and will remove the Gregorio executable and TeX files from their copied locations (at least using the `unins000.exe` file which is created in the program directory when the program is installed, I haven't tested using the Add/Remove Programs feature built into Windows). + +### Added +- A new algorithm for placing bar syllables has been added. The goal of the new algorithm is to place the bar line exactly between the notes which surround it and do the same with the text associated with the bar line. It also implements a limit, `maxbaroffset`, which prevents the bar line and its text from getting too far apart. This algorithm can be activated with `\gresetbarspacing{new}`. Testing is not yet complete and it may still contain bugs. See [#767](https://github.com/gregorio-project/gregorio/issues/767). +- It is now possible to generate a font with a different stem length schema (apart from the default one, Solesmes' is available), see [fonts/README.md](fonts/README.md) for details. +- Some forms (`ed` for example) will have a different stem length if a ledger line is present. Heuristics to determine the presence of a ledger line or not are quite simple and may not always be correct. Gabc now allows you to force a note to act as if a ledger line was present with `[ll:1]`, or as if there was no ledger line, with `[ll:0]`. See Gabc section of GregorioRef for details. +- The ability to typeset an inter-glyph space using `/!` in gabc (see [#868](https://github.com/gregorio-project/gregorio/issues/868)) + ## [4.1.0-beta1] - 2016-01-23 ### Fixed - The alignment of the vertical episema under a punctum inclinatum deminutus is now correct (see [#742](https://github.com/gregorio-project/gregorio/issues/742)). @@ -13,6 +32,7 @@ As of v3.0.0 this project adheres to [Semantic Versioning](http://semver.org/). - Interlinear spacing of annotations when font size was smaller than normal. You should now see just the spacing specified by `annotationseparation`. - Spacing is now correct and ledger lines are now typeset for flats, sharps, and naturals above and below the staff (see [#790](https://github.com/gregorio-project/gregorio/issues/790)). - Forced hyphens at the end of words are no longer suppressed (see [#804](https://github.com/gregorio-project/gregorio/issues/804)). +- Three descending, otherwise unmodified notes are now correctly grouped as a clivis followed by a punctum. If you prefer three notes butted up against each other, separate them with `!`. ### Changed - Initial handling has been simplified. The initial style should now be specified from TeX by using the `\gresetinitiallines` command, rather than from a gabc header. Big initials and normal initials are now governed by a single `initial` style, meant to be changed between scores as appropriate. See [UPGRADE.md](UPGRADE.md) and GregorioRef for details (for the change request, see [#632](https://github.com/gregorio-project/gregorio/issues/632)). Deprecations for this change are listed in the Deprecation section, below. @@ -26,7 +46,6 @@ As of v3.0.0 this project adheres to [Semantic Versioning](http://semver.org/). - Headers not recognized by gregorio, rather than inducing an error, are now simply accepted by gregorio. Most of the old "standard" headers, like `book` and `manuscript-location`, are now handled in this way and thus are no longer limited to one instance. See GregorioRef for details. - `mode` will now be converted to Roman numerals in lower case so that it shows up as small capitals using the default `modeline` style. See [UPGRADE.md](UPGRADE.md) for details (for the change request, see [#756](https://github.com/gregorio-project/gregorio/issues/756)). - `\grecommentary` is now less restrictive about where it occurs and need not occur directly before the score anymore. -- When a bar is preceeded by a punctum mora, gregorio now ignores the punctum mora in the bar horizontal placement by default, and also adds a custom space (defaulting to 0). You can change this behavior with `\gresetbarshiftaftermora{}`, see GregorioRef for its arguments (for the change request, see [#795](https://github.com/gregorio-project/gregorio/issues/795)). ### Added - Support for two-, three-, and five-line staves. Set the `staff-lines` header to `2`, `3`, or `5`. For all values of `staff-lines`, the note below the staff remains 'c'. The two new notes above the staff (for a five-line staff) are `n` and `p`. See [#429](https://github.com/gregorio-project/gregorio/issues/429). @@ -47,7 +66,9 @@ As of v3.0.0 this project adheres to [Semantic Versioning](http://semver.org/). - `\grecommentary` now takes an optional argument which will add extra space between the commentary and the score for just the next score. - The custos can now be selectively enabled/disabled at forced line breaks by appending `+` (to enable) or `-` (to disable) after the `z` or `Z` (see [#800](https://github.com/gregorio-project/gregorio/issues/800)). - With thanks to an anonymous contributor, the shape of the MetaPost-drawn curly brace has been improved (see [#797](https://github.com/gregorio-project/gregorio/issues/797)). - +- Support for elisions, text between `<e>` and `</e>` in gabc, styled according to the `elision` style, which are excluded when determining where to position the text under its notes (see [#838](https://github.com/gregorio-project/gregorio/issues/838)). +- Special characters (between `<sp>` and `</sp>` in gabc) may now be customized using the `\gresetspecial` and `\greunsetspecial` commands. See GregorioRef for details (for the change request, see [#846](https://github.com/gregorio-project/gregorio/issues/846)). +- `\gresetbracerendering` can now take an optional argument to change the rendering of a single type of brace. See GregorioRef for details (for the change request, see [#850](https://github.com/gregorio-project/gregorio/issues/850)). ### Deprecated - `initial-style` gabc header, supplanted by the `\gresetinitiallines` TeX command. diff --git a/Build/source/texk/gregorio/gregorio-src/CONTRIBUTORS.md b/Build/source/texk/gregorio/gregorio-src/CONTRIBUTORS.md index 586d97762b4..398dc577cd8 100644 --- a/Build/source/texk/gregorio/gregorio-src/CONTRIBUTORS.md +++ b/Build/source/texk/gregorio/gregorio-src/CONTRIBUTORS.md @@ -33,6 +33,7 @@ Gregorio has been developed with valuable help and support from: * Richard Chonak * David Gippner * Quentin Lamy + * [The Abbey of Solesmes (FR)](http://www.solesmes.com/) * [Abbazia di Praglia (IT)](http://www.praglia.it) * [Abbazia Mater Ecclesiae (IT)](http://it.wikipedia.org/wiki/Abbazia_Mater_Ecclesiae) * [e-codices](http://www.e-codices.unifr.ch) diff --git a/Build/source/texk/gregorio/gregorio-src/UPGRADE.md b/Build/source/texk/gregorio/gregorio-src/UPGRADE.md index c24b51cd97c..47f65589469 100644 --- a/Build/source/texk/gregorio/gregorio-src/UPGRADE.md +++ b/Build/source/texk/gregorio/gregorio-src/UPGRADE.md @@ -20,6 +20,14 @@ Since the `biginitial` style will disappear with Gregorio 5.0, please consider d When the next syllable starts with an alteration, the minimal space between notes of the current syllable and notes of the current syllable is handled by the new spaces `intersyllablespacenotes@alteration` and `interwordspacenotes@alteration`. Set them in your custom spacings file if needed. +When a syllable ends with a punctum mora, Gregorio 4.1 doesn't consider the punctum mora completely in horizontal spacing. This can result in next syllable being closer. To balance the output, `spacebeforesigns` has been made shorter. If you want to go back to the old behavior, use: + +- `\gresetshiftaftermora{never}` if you want to remove it completely +- `\gresetshiftaftermora{barsonly}` if you want to remove it for non-bar syllables but keep it for bar syllables +- `\grechangedim{spacebeforesigns}{0.05469 cm plus 0.00455 cm minus 0.00455 cm}{scalable}` to go back to the old spacing before punctum mora + +The `\gresetshiftaftermora` macro can take other arguments for controlling how this should work, see GregorioRef for details. + ### Horizontal episemata on high and low notes Prior to version 4.1, Gregorio reserved space between notes at the `c` and `k` heights and their horizontal episemata for a "ledger line" that might appear between them. However, if the ledger line did not appear, the episema would appear to be too far from the note. @@ -60,6 +68,10 @@ The style for the mode number has been bold and small capitals for a long time, If you were using `\scorereference`, `\GreScoreReference`, and/or `\grescorereference`, stop using them. If you need to capture the `manuscript-reference` header, use the new header capture feature (see GregorioRef for details). +### Three descending notes + +Three descending notes that have no other markings (such as liquescentia) will now be rendered as a clivis followed by a punctum. The older, incorrect behavior was to group them as three punctums joined by `!`. If you prefer this behavior, explicitly separate the notes with `!`. + ## 4.0 ### Font changes diff --git a/Build/source/texk/gregorio/gregorio-src/configure.ac b/Build/source/texk/gregorio/gregorio-src/configure.ac index f7aab257a02..5db9cd0d130 100644 --- a/Build/source/texk/gregorio/gregorio-src/configure.ac +++ b/Build/source/texk/gregorio/gregorio-src/configure.ac @@ -16,8 +16,8 @@ dnl dnl You should have received a copy of the GNU General Public License dnl along with Gregorio. If not, see <http://www.gnu.org/licenses/>. -AC_INIT([gregorio],[4.1.0-beta1],[gregorio-devel@gna.org]) -FILENAME_VERSION="4_1_0-beta1" +AC_INIT([gregorio],[4.1.0-beta2],[gregorio-devel@gna.org]) +FILENAME_VERSION="4_1_0-beta2" AC_SUBST(FILENAME_VERSION) MK="" AC_SUBST(MK) @@ -82,6 +82,22 @@ AS_IF([test "x$with_kpathsea" = "xyes"], [ ) ]) +AC_ARG_ENABLE([debug], AS_HELP_STRING([--enable-debug@<:@=sanitize,coverage@:>@], [Enable debugging options [with additional sanitize options].]), [ + AS_IF([test "x$enableval" != "xno"], [ + dnl AX_CHECK_COMPILE_FLAG([-g], [CFLAGS+=" -g"]) + AX_CHECK_COMPILE_FLAG([-Og], [CFLAGS+=" -Og"], [ + AX_CHECK_COMPILE_FLAG([-O0], [CFLAGS+=" -O0"]) + ]) + AS_IF([test "x$enableval" = "xsanitize"], [ + AX_CHECK_COMPILE_FLAG([-fsanitize=address,undefined], [CFLAGS+=" -fsanitize=address,undefined"]) + ]) + AS_IF([test "x$enableval" = "xcoverage"], [ + AX_CHECK_COMPILE_FLAG([--coverage], [CFLAGS+=" --coverage"]) + AX_CHECK_LINK_FLAG([--coverage], [LDFLAGS+=" --coverage"]) + ]) + ]) +]) + AC_CONFIG_HEADERS([src/config_.h]) AC_CONFIG_FILES([ Makefile diff --git a/Build/source/texk/gregorio/gregorio-src/contrib/system-setup.bat b/Build/source/texk/gregorio/gregorio-src/contrib/system-setup.bat index 597cd798ff3..755b8e9c210 100644 --- a/Build/source/texk/gregorio/gregorio-src/contrib/system-setup.bat +++ b/Build/source/texk/gregorio/gregorio-src/contrib/system-setup.bat @@ -45,6 +45,9 @@ echo. >> %output% @for %%e in (%PATHEXT%) do @for %%i in (luatex%%e) do @if NOT "%%~$PATH:i"=="" echo %%~$PATH:i >> %output% 2>&1
echo. >> %output%
echo. >> %output%
+echo #### TEXMFDIST >> %output%
+kpsewhich --var-value=TEXMFDIST >> %output% 2>&1
+echo. >> %output%
echo #### TEXMFLOCAL >> %output%
echo. >> %output%
for /f "delims=" %%i in ('kpsewhich --var-value TEXMFLOCAL') do set texmflocal=%%i
@@ -134,12 +137,12 @@ echo. echo.
echo system-setup.log created and saved in a temporary location.
echo Upon exiting this script, the log will be opened in Notepad for you.
-echo Please save the file to a convenient location and email it to
+echo Please save the file to a convenient location and email it to
echo gregorio-users@gna.org as part of your bug report.
echo.
-echo You can also create an issue at
+echo You can also create an issue at
echo http://github.org/gregorio-project/gregorio/issues
echo and copy-paste the content of this file into the description.
-echo.
+echo.
pause
start notepad %output%
diff --git a/Build/source/texk/gregorio/gregorio-src/doc/Command_Index_User.tex b/Build/source/texk/gregorio/gregorio-src/doc/Command_Index_User.tex index 74809dcd9e3..2a08b030f62 100644 --- a/Build/source/texk/gregorio/gregorio-src/doc/Command_Index_User.tex +++ b/Build/source/texk/gregorio/gregorio-src/doc/Command_Index_User.tex @@ -647,6 +647,37 @@ A macro for invoking one of the ornamentation elements which are contained in th \end{argtable} +\subsubsection{Special Characters} + +% this is defined in gregoriotex-symbols.texx as having one argument, but the +% lua code generates a \gdef\<something> which then requires a second argument +\macroname{\textbackslash gresetspecial}{\{\#1\}\{\#2\}}{gregoriotex-symbols.tex} +Sets a special character. Special characters are used from gabc within +\texttt{<sp>} and \texttt{</sp>}. + +\begin{argtable} + \#1 & string & The text between \texttt{<sp>} and \texttt{</sp>}.\\ + \#2 & \TeX\ code & The \TeX\ code to substitute when \texttt{<sp>\#1</sp>} + is used in gabc.\\ +\end{argtable} + +\textbf{Nota Bene:} If you need to use a character in \#1 that is made special +by \TeX{} (\ie, \textbackslash, \%, \etc), you should instead use +\verb=\string\nnn=, where \texttt{nnn} is a three-digit, zero-padded number +representing the ASCII code of the character (\ie, \textbackslash{} would be +\verb=\string\092=). + +\macroname{\textbackslash greunsetspecial}{\{\#1\}}{gregoriotex-symbols.tex} +Un-sets a special character. Using an unset special character will use its +text directly. + +\begin{argtable} + \#1 & string & The text between \texttt{<sp>} and \texttt{</sp>}.\\ +\end{argtable} + +\textbf{Nota Bene:} The same rules apply for \#1 as in \verb=\gresetspecial=. + + \subsubsection{Styling} Different elements of an include score have different styles applied. These elements and their defaults are listed below: @@ -657,23 +688,25 @@ Different elements of an include score have different styles applied. These ele \begin{tabular}{lp{7cm plus .5cm}r} Element Name & Description & Default\\ \hline - \stylename{initial} & Score initial (the first letter of the score, when offset from the rest of the text) & 40 pt font\\ - \stylename{translation} & Translation text (appears below lyrics) & {\it italics}\\ - \stylename{abovelinestext} & Above line text (\texttt{<alt></alt>} in gabc, appears above the staff) & normal\\ - \stylename{normalstafflines} & Full length staff lines & none\\ + \stylename{abovelinestext} & above line text (\texttt{<alt></alt>} in gabc, appears above the staff) & normal\\ \stylename{additionalstafflines} & short lines behind notes above or below the staff & special\footnotemark[1]\\ - \stylename{lowchoralsign} & low choral signs & none\\ - \stylename{highchoralsign} & high choral signs & none\\ - \stylename{firstsyllableinitial} & the first letter of the first syllable of a score which is not the score initial & none\\ + \stylename{annotation} & the annotation & none\\ + \stylename{commentary} & the commentary & {\footnotesize\it footnote-size italics}\\ + \stylename{elision} & elisions (\texttt{<e></e>} in gabc) & {\textit{\small small-size italics}} (\LaTeX)\\ + && {\textit{italics}} (Plain \TeX)\\ \stylename{firstsyllable} & the first syllable of the score excluding the score initial & none\\ + \stylename{firstsyllableinitial} & the first letter of the first syllable of a score which is not the score initial & none\\ \stylename{firstword} & the first word of the first score excluding the score initial & none\\ - \stylename{annotation} & the annotation & none\\ - \stylename{commentary} & the commentary & {\footnotesize\it Footnote size italics}\\ - \stylename{modeline} & the rendered annotation from the \texttt{mode: ;} header in the gabc file & \parbox[t]{2.2cm}{\raggedleft\textsc{\textbf{Bold Small Capitals}}}\\ - \stylename{modemodifier} & the rendered annotation from the \texttt{mode-modifier: ;} header in the gabc file & \parbox[t]{2.2cm}{\raggedleft\textit{\textbf{Bold Italics}}}\\ - \stylename{modedifferentia} & the rendered annotation from the \texttt{mode-differentia: ;} header in the gabc file & \parbox[t]{2.2cm}{\raggedleft\textbf{Bold}}\\ + \stylename{highchoralsign} & high choral signs & none\\ + \stylename{initial} & Score initial (the first letter of the score, when offset from the rest of the text) & 40 pt font\\ + \stylename{lowchoralsign} & low choral signs & none\\ + \stylename{modedifferentia} & the rendered annotation from the \texttt{mode-differentia: ;} header in the gabc file & \parbox[t]{2.2cm}{\raggedleft\textbf{bold}}\\ + \stylename{modeline} & the rendered annotation from the \texttt{mode: ;} header in the gabc file & \parbox[t]{2.2cm}{\raggedleft\textsc{\textbf{bold small capitals}}}\\ + \stylename{modemodifier} & the rendered annotation from the \texttt{mode-modifier: ;} header in the gabc file & \parbox[t]{2.2cm}{\raggedleft\textit{\textbf{bold italics}}}\\ \stylename{nabc} & ancient notation & {\color{gregoriocolor}gregoriocolor} (\LaTeX)\\ - && none (Plain \TeX)\\ + && none (Plain \TeX)\\ + \stylename{normalstafflines} & Full length staff lines & none\\ + \stylename{translation} & Translation text (appears below lyrics) & {\it italics}\\ \end{tabular} \end{adjustbox} @@ -882,18 +915,27 @@ Macro to determine whether the last line of the score should be justified or not \subsubsection{Bar spacing} -\macroname{\textbackslash gresetbarshiftaftermora}{\{\#1\}}{gregoriotex-signs.tex} -Macro to change the behaviour for bars following a punctum mora. The argument changes the cases in which punctum mora are ignored in bar horizontal placement: +\macroname{\textbackslash gresetshiftaftermora}{\{\#1\}}{gregoriotex-signs.tex} +Macro to change the behaviour for separation between notes of two syllables when the first ends with a punctum mora. The argument changes the cases in which punctum mora are ignored in space computation: \begin{argtable} \#1 & \texttt{always} & punctum mora are always ignored (default)\\ - & \texttt{notextonly} & punctum mora are ignored in bars inside syllables, and in bars having their own syllable without text\\ - & \texttt{insideonly} & punctum mora are ignored only in bars inside syllables\\ + & \texttt{barsonly} & punctum mora are ignored before bars\\ + & \texttt{notextonly} & punctum mora are ignored before bars inside syllables, or bars having their own syllable without text\\ + & \texttt{insideonly} & punctum mora are ignored only before bars inside syllables\\ & \texttt{never} & punctum mora are never ignored\\ \end{argtable} When a punctum mora is ignored, the bar will also be shifted by \texttt{barmoraadjustment} (zero by default), see its description in the \textbf{Distances} section. +\macroname{\textbackslash gresetbarspacing}{\{\#1\}}{gregoriotex-syllable.tex} +Macro to activate the new bar spacing algorithm. The new algorithm attempts to place the bar line exactly midway between its surrounding notes. Any text associated with the bar is placed midway between its surrounding text. Since this might result in the bar line and the text being widely separated, there is also a limit to the distance between their centers: \texttt{maxbaroffset}. + +\begin{argtable} + \#1 & \texttt{new} & Activates the new spacing algorithm\\ + & \texttt{old} & Activates the old behavior (Default)\\ +\end{argtable} + \subsubsection{Hyphenation} \macroname{\textbackslash gresethyphen}{\{\#1\}}{gregoriotex-main.tex} @@ -948,7 +990,7 @@ Macro to determine the method used for aligning the clivis with its lyrics. \subsubsection{Braces} -\macroname{\textbackslash gresetbracerendering}{\{\#1\}}{gregoriotex-signs.tex} +\macroname{\textbackslash gresetbracerendering}{[\optional{\#1}]\{\#2\}}{gregoriotex-signs.tex} Macro to tell Gregorio\TeX{} whether to use \MP{} or fonts to render braces. \MP{} braces, the default, are tailored to better maintain optical line weight when stretched. \MP{} braces are designed to @@ -956,8 +998,13 @@ harmonize (and thus match best) with greciliae, but they still look good with the other score fonts. \begin{argtable} - \#1 & \texttt{metapost} & \MP{} will be used to render braces (default)\\ - & \texttt{font} & The score font will be used to render braces + \#1 & \textit{(omitted)} & change all braces\\ + & \texttt{brace} & change round braces that appear over the staff\\ + & \texttt{underbrace} & change round braces that appear under the staff\\ + & \texttt{curlybrace} & change curly braces\\ + & \texttt{barbrace} & change round braces that appear over divisio bars\\ + \#2 & \texttt{metapost} & \MP{} will be used to render braces\\ + & \texttt{font} & The score font will be used to render braces\\ \end{argtable} \macroname{\textbackslash grebarbracewidth}{}{gregoriotex-signs.tex} @@ -1107,9 +1154,14 @@ Space before custos within a line. Space before punctum mora and augmentum duplex. \end{gdimension} -\begin{gdimension}{barmoraadjustment} -When a bar is shifted left because of a preceding punctum mora, this space is -also added. Use it to make the bar a bit further from the punctum mora if you want. +\begin{gdimension}{moraadjustment} +When a syllable (bar or not) is shifted left because of a preceding punctum +mora, this space is also added. Use it to make the syllable a bit further from +the punctum mora if you want. +\end{gdimension} + +\begin{gdimension}{moraadjustmentbar} +Same as previous one but specific to cases where puntum mora precedes a bar. \end{gdimension} \begin{gdimension}{spaceaftersigns} @@ -1415,6 +1467,10 @@ Distance an over-the-notes slur will be raised above the baseline of a note at t Distance an under-the-notes slur will be raised above the baseline of a note at the same height. \end{gdimension} +\begin{gdimension}{maxbaroffset} +When the new bar spacing algorithm is active, this is the maximum distance by which a bar and its associated text can be separated. +\end{gdimension} + \subsection{Penalties}\label{penalties} Penalties are used by \TeX\ to determine where line and page breaks should occur. Gregorio\TeX\ modifies or defines a few of its own to help with that process in scores. diff --git a/Build/source/texk/gregorio/gregorio-src/doc/Command_Index_gregorio.tex b/Build/source/texk/gregorio/gregorio-src/doc/Command_Index_gregorio.tex index 5468228666e..9798b70d8f5 100644 --- a/Build/source/texk/gregorio/gregorio-src/doc/Command_Index_gregorio.tex +++ b/Build/source/texk/gregorio/gregorio-src/doc/Command_Index_gregorio.tex @@ -90,16 +90,15 @@ Macro for typesetting a bar brace. Macro for typesetting a bar syllable. \begin{argtable} - \#1 & string & First part of syllable text associated with the bar.\\ - \#2 & string & Middle part of the syllable text associated with the bar.\\ - \#3 & string & End part of the syllable text associated with the bar.\\ - \#4 & & Not used.\\ - \#5 & \TeX\ code & Code to execute before calculating \texttt{nextbegindifference}.\\ - \#6 & & Not used.\\ - \#7 & $0 <$ integer $< 19$ & the type of notes alignment. See \nameref{notesalign}.\\ - & $20 <$ integer $< 39$ & Same as below 20 except there is a flat before the notes. Subtract 20 to get the type of notes alignment.\\ - & $40 <$ integer $< 59$ & Same as below 20 except there is a natural before the notes. Subtract 40 to get the type of notes alignment.\\ - \#8 & \TeX\ code & Code to execute before printing anything.\\ + \#1 & \TeX\ code & macro setting syllable letters for the current syllable\\ + \#2 & empty & reserved for future use\\ + \#3 & \TeX\ control sequence & the control sequence to use for styling the hyphen\\ + \#4 & \texttt{0} & this syllable is not the end of a word\\ + & \texttt{1} & this syllable is the end of a word\\ + \#5 & \TeX\ code & macros setting syllable letters for the next syllable\\ + \#6 & string & the line, byte offset, and column address for textedit links when point-and-click is enabled\\ + \#7 & & alignment type of the first next glyph\\ + \#8 &\TeX\ code & other macros (translation, double text, etc.) that don't fit in the limitation of the number of arguments\\ \#9 & \TeX\ code & The bar line (usually a \textit{writebar} call). \end{argtable} @@ -253,6 +252,13 @@ Macro to draw ledger lines. \#6 & distance & The distance to end the line after \#2 from this point if \#3 is \texttt{2}. \\ \end{argtable} +\macroname{\textbackslash GreElision}{\#1}{gregoriotex-syllable.tex} +Typesets \#1 using the \texttt{elision} style. + +\begin{argtable} + \#1 & string & Text to be typeset in the \texttt{elision} style.\\ +\end{argtable} + \macroname{\textbackslash GreEmptyFirstSyllableHyphen}{}{gregoriotex-syllable.tex} Macro that indicates the position of an empty-first-syllable hyphen, should one be desired. @@ -381,8 +387,8 @@ Macro to typeset a flat. \begin{argtable} \#1 & integer & Height number of the flat.\\ - \#2 & \texttt{0} & No flat for a key change.\\ - & \texttt{1} & Indicates the flat for a key change.\\ + \#2 & \texttt{0} & The flat is not part of the clef.\\ + & \texttt{1} & The flat is part of the clef.\\ \#3 & \TeX\ code & signs to typeset before the glyph (typically additional bars, as they must be "behind" the glyph)\\ \#4 & \TeX\ code & signs to typeset after the glyph (almost all signs)\\ \#5 & string & the line, byte offset, and column address for textedit links when point-and-click is enabled\\ @@ -587,8 +593,8 @@ Macro to typeset a natural. \begin{argtable} \#1 & integer & Height number of the natural.\\ - \#2 & \texttt{0} & No flat for a key change.\\ - & \texttt{1} & Indicates the flat for a key change.\\ + \#2 & \texttt{0} & The natural is not part of the clef.\\ + & \texttt{1} & The natural is part of the clef (doesn't happen).\\ \#3 & \TeX\ code & signs to typeset before the glyph (typically additional bars, as they must be "behind" the glyph)\\ \#4 & \TeX\ code & signs to typeset after the glyph (almost all signs)\\ \#5 & string & the line, byte offset, and column address for textedit links when point-and-click is enabled\\ @@ -716,9 +722,10 @@ Macro for typesetting punctum mora. \begin{argtable} \#1 & integer & Height number of punctum mora.\\ - \#2 & \texttt{1} & Go back to end of punctum.\\ + \#2 & \texttt{0} & General case.\\ + & \texttt{1} & Make the punctum mora zero width.\\ & \texttt{2} & Shift left width of 1 punctum.\\ - & \texttt{3} & Shift left width of 1 punctum and ambitus of 1.\\ + & \texttt{3} & Shift left width of 1 punctum if last ambitus is 1.\\ \#3 & \texttt{0} & Punctum mora does not occur before last note of podatus, porrectus, or torculus resupinus.\\ & \texttt{1} & Punctum mora occurs before last note of podatus, porrectus, or torculus resupinus.\\ \#4 & \texttt{0} & No punctum inclinatum.\\ @@ -866,8 +873,8 @@ Macro to typeset a sharp. \begin{argtable} \#1 & integer & Height number of the sharp.\\ - \#2 & \texttt{0} & No flat for a key change.\\ - & \texttt{1} & Indicates the flat for a key change.\\ + \#2 & \texttt{0} & The sharp is not part of the clef.\\ + & \texttt{1} & The sharp is part of the clef (doesn't happen).\\ \#3 & \TeX\ code & signs to typeset before the glyph (typically additional bars, as they must be "behind" the glyph)\\ \#4 & \TeX\ code & signs to typeset after the glyph (almost all signs)\\ \#5 & string & the line, byte offset, and column address for textedit links when point-and-click is enabled\\ @@ -897,6 +904,14 @@ Typesets a slur. \#6 & integer & Height number of the pitch.\\ \end{argtable} +\macroname{\textbackslash GreSpecial}{\#1}{gregoriotex-symbols.tex} +Typesets a special character. If the \#1 special character wasn't defined by +\verb=\gresetspecial=, the text of \#1 will be output directly. + +\begin{argtable} + \#1 & string & The text between \texttt{<sp>} and \texttt{</sp>}.\\ +\end{argtable} + \macroname{\textbackslash GreStar}{}{gregoriotex-symbol.tex} Macro to typeset an asterisk (\GreStar). diff --git a/Build/source/texk/gregorio/gregorio-src/doc/Command_Index_internal.tex b/Build/source/texk/gregorio/gregorio-src/doc/Command_Index_internal.tex index 80370990ddc..cb2f6b1470d 100644 --- a/Build/source/texk/gregorio/gregorio-src/doc/Command_Index_internal.tex +++ b/Build/source/texk/gregorio/gregorio-src/doc/Command_Index_internal.tex @@ -269,6 +269,40 @@ macro is typically called by \verb=\GreMode= in the gtex file. \#3 & \TeX\ code & Arbitrary code to typeset, in the \texttt{modedifferentia} style, after \#2.\\ \end{argtable} +\macroname{\textbackslash gre@setallbracerendering}{\#1}{gregoriotex-signs.tex} +Macro used by \verb=\gresetbracerendering= to change all braces. + +\begin{argtable} + \#1 & \texttt{metapost} & \MP{} will be used to render braces\\ + & \texttt{font} & The score font will be used to render braces\\ +\end{argtable} + +\macroname{\textbackslash gre@setbracerendering}{[\#1]\#2}{gregoriotex-signs.tex} +Macro used by \verb=\gresetbracerendering= to change a single type of brace. + +\begin{argtable} + \#1 & \texttt{brace} & change round braces that appear over the staff\\ + & \texttt{underbrace} & change round braces that appear under the staff\\ + & \texttt{curlybrace} & change curly braces\\ + & \texttt{barbrace} & change round braces that appear over divisio bars\\ + \#2 & \texttt{metapost} & \MP{} will be used to render braces\\ + & \texttt{font} & The score font will be used to render braces\\ +\end{argtable} + +\macroname{\textbackslash gre@@setbracerendering}{\#1\#2}{gregoriotex-signs.tex} +Secondary macro used by \verb=\gre@setallbracerendering= and +\verb=\gre@setbracerendering= to change a single type of brace. As a +secondary macro, it doesn't check its first argument. + +\begin{argtable} + \#1 & \texttt{brace} & change round braces that appear over the staff\\ + & \texttt{underbrace} & change round braces that appear under the staff\\ + & \texttt{curlybrace} & change curly braces\\ + & \texttt{barbrace} & change round braces that appear over divisio bars\\ + \#2 & \texttt{metapost} & \MP{} will be used to render braces\\ + & \texttt{font} & The score font will be used to render braces\\ +\end{argtable} + \macroname{\textbackslash gre@brace@common}{\#1\#2\#3\#4\#5\#6\#7}{gregoriotex-signs.tex} Common macro used internally to render braces. @@ -284,6 +318,9 @@ Common macro used internally to render braces. \#7 & csname & The control sequence name representing the brace. \end{argtable} +\macroname{\textbackslash gre@render@barbrace}{}{gregoriotex-signs.tex} +Draws a divisio brace. + \macroname{\textbackslash grebracemetapostpreamble}{\#1}{gregoriotex-signs.tex} Returns the \MP{} preamble for braces. The control sequence name does not have the \texttt{@} symbol because this macro is used within \MP{}. @@ -306,6 +343,14 @@ Draws a round over-brace using \MP{}. \#1 & string & the width of the brace; if \texttt{*}, use the bar brace width. \end{argtable} +\macroname{\textbackslash gre@render@fontbrace}{\#1\#2}{gregoriotex-signs.tex} +Draws a brace using the score font. + +\begin{argtable} + \#1 & string & the width of the brace.\\ + \#2 & \TeX\ code & \TeX\ code that renders the brace using the score font.\\ +\end{argtable} + \macroname{\textbackslash gre@draw@underbrace}{\#1}{gregoriotex-signs.tex} Draws a round under-brace using \MP{}. @@ -409,8 +454,8 @@ Macro to typeset an alteration. \#1 & integer & height of the alteration\\ \#2 & character alias & the alteration\\ \#3 & character alias & the hole of the alteration\\ - \#4 & \texttt{1} & the alteration is a flat for a key change\\ - & \texttt{0} & all other cases\\ + \#4 & \texttt{1} & the alteration is part of the clef\\ + & \texttt{0} & the alteration is not part of the clef\\ \#5 & \TeX\ code & signs to typeset before the glyph (typically additional bars, as they must be "behind" the glyph)\\ \#6 & \TeX\ code & signs to typeset after the glyph (almost all signs)\\ \#7 & string & the line, byte offset, and column address for textedit links when point-and-click is enabled\\ @@ -672,7 +717,7 @@ Saves clef information for use in \verb=gre@updatelinesclef=. \#4 & character & the type of the secondary clef: c or f\\ \#5 & integer & the line of the secondary clef (1 is the lowest, 0 for no secondary clef)\\ \#6 & integer & if \texttt{3}, it means that we must not put a flat after the secondary clef, otherwise it’s the height of the flat\\ -\end{argtable} +\end{argtable} \macroname{\textbackslash gre@typeclef}{\#1\#2\#3\#4\#5\#6\#7\#8}{gregoriotex-signs.tex} Macro which typesets the clef. @@ -688,7 +733,7 @@ Macro which typesets the clef. \#6 & character & the type of the secondary clef: c or f\\ \#7 & integer & the line of the secondary clef (1 is the lowest, 0 for no secondary clef)\\ \#8 & integer & if \texttt{3}, it means that we must not put a flat after the secondary clef, otherwise it’s the height of the flat\\ -\end{argtable} +\end{argtable} \macroname{\textbackslash gre@typesingleclef}{\#1\#2\#3\#4}{gregoriotex-signs.tex} Macro which typesets a single clef. @@ -699,7 +744,7 @@ Macro which typesets a single clef. \#3 & \texttt{0} & no need to use small clef characters (inside a line)\\ & \texttt{1} & we must use small clef characters (inside a line)\\ \#4 & integer & if \texttt{3}, it means that we must not put a flat after the clef, otherwise it’s the height of the flat\\ -\end{argtable} +\end{argtable} \macroname{\textbackslash gre@updateleftbox}{}{gregoriotex-main.tex} Macro to update the box printed a the left end of every line (the one which holds the staff lines). @@ -1321,8 +1366,20 @@ Boolean used to specify whether the staff lines behind an alteration should be h \macroname{\textbackslash ifgre@hepisemabridge}{}{gregoriotex-signs.tex} Boolean used to specify whether adjacent horizontal episemata should be joined together. -\macroname{\textbackslash ifgre@drawbraces}{}{gregoriotex-signs.tex} -Boolean used to specify whether braces should be drawn by \MP{} as +\macroname{\textbackslash ifgre@metapost@brace}{}{gregoriotex-signs.tex} +Boolean used to specify whether round over-the-staff braces should be drawn by +\MP{} as opposed to rendered via the score font. + +\macroname{\textbackslash ifgre@metapost@underbrace}{}{gregoriotex-signs.tex} +Boolean used to specify whether round under-the-staff braces should be drawn by +\MP{} as opposed to rendered via the score font. + +\macroname{\textbackslash ifgre@metapost@curlybrace}{}{gregoriotex-signs.tex} +Boolean used to specify whether curly braces should be drawn by \MP{} as +opposed to rendered via the score font. + +\macroname{\textbackslash ifgre@metapost@barbrace}{}{gregoriotex-signs.tex} +Boolean used to specify whether divisio braces should be drawn by \MP{} as opposed to rendered via the score font. \macroname{\textbackslash gre@biginitial}{}{gregoriotex-main.tex} @@ -1344,7 +1401,7 @@ Boolean to mark the last syllable of the score. Boolean that tells us if the current glyph is the first glyph or not. \macroname{\textbackslash gre@attr@dash}{}{gregoriotex-main.tex} -A Lua\TeX\ attribute which indicates whether a syllable takes a dash if it ends a line. +A Lua\TeX\ attribute which indicates whether a syllable takes a dash if it ends a line. \macroname{\textbackslash gre@attr@center}{}{gregoriotex-main.tex} A Lua\TeX\ attribute which indicates the type of translation centering. @@ -1367,8 +1424,11 @@ Macro which indicates whether we are currently inside a discretionary (\texttt{1 \macroname{\textbackslash ifgre@isonaline}{}{gregoriotex-syllable.tex} Boolean which indicates whether the current note is on a line or not (used to adjust the height of some symbols so they won’t print on a line). -\macroname{\textbackslash ifgre@lastispunctum}{}{gregoriotex-syllable.tex} -Boolean which indicates if the most recent note was a punctum mora. +\macroname{\textbackslash ifgre@lastendswithmora}{}{gregoriotex-syllable.tex} +Boolean which indicates if the previous syllable ends with a punctum mora (set glyph by glyph, do not rely on it when typesetting glyph). + +\macroname{\textbackslash ifgre@thisendswithmora}{}{gregoriotex-syllable.tex} +Same as previous one but for current syllable. \macroname{\textbackslash ifgre@lastispunctumsave}{}{gregoriotex-signs.tex} Boolean for storing \verb=\ifgre@lastispunctum= so that it can be restored later. @@ -1460,9 +1520,20 @@ Boolean indicating whether the staff has a fifth line. \macroname{\textbackslash gre@count@barshiftaftermora}{}{gregoriotex-signs.tex} Count indicating when the presence of a punctum mora immediately before a bar line should affect the spacing. +\macroname{\textbackslash gre@count@lastglyphiscavum}{}{gregoriotex-spaces.tex} +Count indicating if the last glyph has a cavum (this includes flats, naturals, punctum cavum, etc.), when staff line shouldn't appear underneath this empty part. Can be: +\begin{itemize} +\item 0: previous and current glyph are not cavum +\item 1: current glyph is (set when line is hidden, at the end of the glyph) +\item 2: previous glyph is (set at beginning of glyph) +\end{itemize} + \macroname{\textbackslash ifgre@allowdeprecated}{}{gregoriotex.sty \textup{and} gregoriotex.tex} Boolean which controls whether deprecated functions raise a warning (true) or an error (false). +\macroname{\textbackslash ifgre@newbarspacing}{}{gregoriotex-syllable.tex} +Boolean which controls whether the new bar spacing algorithm is activated. + \subsection{Boxes} @@ -1521,8 +1592,11 @@ second is the name of the distance. These additional distances are calculated by Gregorio based on the values for the user customizable distances and what may be going on in the score at the time of their use. +\macroname{\textbackslash gre@dimen@morawidth}{}{gregoriotex-spaces.tex} +Width of a punctum mora (reinitialized at each score, lazily recomputed). + \macroname{\textbackslash gre@dimen@clefwidth}{}{gregoriotex-spaces.tex} -Width of the clef. +Width of the current clef. \macroname{\textbackslash gre@dimen@constantglyphraise}{}{gregoriotex-spaces.tex} Dimension representing the space between the 0 of the gregorian fonts and the effective 0 of the TeX score. @@ -1561,7 +1635,7 @@ the localleftbox for a big initial (one taking two lines). Dimension representing the width of the initial (and the space after). \macroname{\textbackslash gre@dimen@currentabovelinestextheight}{}{gregoriotex-spaces.tex} -Dimension representing the space allocated above the lines for text. +Dimension representing the space allocated above the lines for text. \macroname{\textbackslash gre@dimen@staffheight}{}{gregoriotex-spaces.tex} The total height of the staff including the width of the lines and the spaces between them. @@ -1620,23 +1694,23 @@ The distance from the baseline of the initial to the baseline of the annotation. \macroname{\textbackslash gre@dimen@commentarytrueraise}{}{gregoriotex-spaces.tex} The distance from the baseline of the initial to the baseline of the commentary. -\macroname{\textbackslash gre@minTextDistance}{}{gregoriotex-spaces.tex} -Minimum distance between text (meaningful alias for \verb=\gre@skip@temp@one= inside \verb=\gre@calculate@syllablefinalskip=). +\macroname{\textbackslash gre@skip@minTextDistance}{}{gregoriotex-spaces.tex} +Minimum distance between text. -\macroname{\textbackslash gre@minNotesDistance}{}{gregoriotex-spaces.tex} -Minimum distance between notes (meaningful alias for \verb=\gre@skip@temp@two= inside \verb=\gre@calculate@syllablefinalskip=). +\macroname{\textbackslash gre@skip@minNotesDistance}{}{gregoriotex-spaces.tex} +Minimum distance between notes. -\macroname{\textbackslash gre@curTextDistance}{}{gregoriotex-spaces.tex} -Current distance between text (meaningful alias for \verb=\gre@dimen@temp@three= inside \verb=\gre@calculate@syllablefinalskip=). +\macroname{\textbackslash gre@dimen@curTextDistance}{}{gregoriotex-spaces.tex} +Current distance between text. -\macroname{\textbackslash gre@curNotesDistance}{}{gregoriotex-spaces.tex} -Current distance between notes (meaningful alias for \verb=\gre@dimen@temp@four= inside \verb=\gre@calculate@syllablefinalskip=). +\macroname{\textbackslash gre@dimen@curNotesDistance}{}{gregoriotex-spaces.tex} +Current distance between notes. -\macroname{\textbackslash gre@minShiftText}{}{gregoriotex-spaces.tex} -Minimum shift required for the text (meaningful alias for \verb=\gre@skip@temp@three= inside \verb=\gre@calculate@syllablefinalskip=). +\macroname{\textbackslash gre@skip@minShiftText}{}{gregoriotex-spaces.tex} +Minimum shift required for the text. -\macroname{\textbackslash gre@minShiftNotes}{}{gregoriotex-spaces.tex} -Minimum shift required for the notes (meaningful alias for \verb=\gre@skip@temp@four= inside \verb=\gre@calculate@syllablefinalskip=). +\macroname{\textbackslash gre@skip@minShiftNotes}{}{gregoriotex-spaces.tex} +Minimum shift required for the notes. \macroname{\textbackslash gre@save@parfillskip}{}{gregoriotex-main.tex} Macro to store \verb=\parfillskip= value so that we can restore it at the end of the score (needed to force the last line of a score to be justified). diff --git a/Build/source/texk/gregorio/gregorio-src/doc/Gabc.tex b/Build/source/texk/gregorio/gregorio-src/doc/Gabc.tex index cb463323859..b770c35b457 100644 --- a/Build/source/texk/gregorio/gregorio-src/doc/Gabc.tex +++ b/Build/source/texk/gregorio/gregorio-src/doc/Gabc.tex @@ -209,6 +209,29 @@ the notes into the above primitives. Using the same examples as before: (;) @<v>[</v>IJkh<v>]</v>(@[IJkh]) } +\subsection{Stem length for the bottom lines} + +Gregorio will determine the length of the stem for most neumes. +Some manual input might be needed for notes on the bottom staff +line (\textit{d}). Most of the time they will take a short form: + +\gabcsnippet{(c3) dv(dv) ed(ed) ed~(ed~) dcd(dcd)} + +But when a ledger line is drawn below these notes, they should take a long +form. The problem is that many cases are ambiguous: for instance if a note +is close to a ledger line, one may want to make it long, others may not. +To solve this problem, you can add \texttt{[ll:0]} to any note of a glyph to +force the stem of the glyph to get its short form, or \texttt{[ll:1]} to force +its long form. + +% This snippet makes LuaTeX segfault! +%\gabcsnippet{ +% (c3) dv<v>[</v>ll:1<v>]</v>(dv[ll:1]) ed<v>[</v>ll:1<v>]</v>(ed[ll:1]) +% ed<sp>~</sp><v>[</v>ll:1<v>]</v>(ed~[ll:1]) dcd<v>[</v>ll:1<v>]</v>(dcd[ll:1] Z) +% b!dv<v>[</v>ll:0<v>]</v>(b!dv[ll:0]) b!ed<v>[</v>ll:0<v>]</v>(b!ed[ll:0]) +% b!ed<sp>~</sp><v>[</v>ll:0<v>]</v>(b!ed~[ll:0]) dcd<v>[</v>ll:0<v>]</v>!b(dcd[ll:0]!b) +% } + \subsection{Custom Ledger Lines} To specify a custom ledger line, use diff --git a/Build/source/texk/gregorio/gregorio-src/doc/GregorioNabcRef-4_1_0-beta1.pdf b/Build/source/texk/gregorio/gregorio-src/doc/GregorioNabcRef-4_1_0-beta1.pdf Binary files differdeleted file mode 100644 index 4e2e7841c4e..00000000000 --- a/Build/source/texk/gregorio/gregorio-src/doc/GregorioNabcRef-4_1_0-beta1.pdf +++ /dev/null diff --git a/Build/source/texk/gregorio/gregorio-src/doc/GregorioNabcRef-4_1_0-beta2.pdf b/Build/source/texk/gregorio/gregorio-src/doc/GregorioNabcRef-4_1_0-beta2.pdf Binary files differnew file mode 100644 index 00000000000..839e08d8824 --- /dev/null +++ b/Build/source/texk/gregorio/gregorio-src/doc/GregorioNabcRef-4_1_0-beta2.pdf diff --git a/Build/source/texk/gregorio/gregorio-src/doc/GregorioRef-4_1_0-beta1.pdf b/Build/source/texk/gregorio/gregorio-src/doc/GregorioRef-4_1_0-beta1.pdf Binary files differdeleted file mode 100644 index 9443d145145..00000000000 --- a/Build/source/texk/gregorio/gregorio-src/doc/GregorioRef-4_1_0-beta1.pdf +++ /dev/null diff --git a/Build/source/texk/gregorio/gregorio-src/doc/GregorioRef-4_1_0-beta2.pdf b/Build/source/texk/gregorio/gregorio-src/doc/GregorioRef-4_1_0-beta2.pdf Binary files differnew file mode 100644 index 00000000000..45e8bb07687 --- /dev/null +++ b/Build/source/texk/gregorio/gregorio-src/doc/GregorioRef-4_1_0-beta2.pdf diff --git a/Build/source/texk/gregorio/gregorio-src/doc/GregorioRef.tex b/Build/source/texk/gregorio/gregorio-src/doc/GregorioRef.tex index dd4a1ff3244..0f666bf5656 100644 --- a/Build/source/texk/gregorio/gregorio-src/doc/GregorioRef.tex +++ b/Build/source/texk/gregorio/gregorio-src/doc/GregorioRef.tex @@ -152,7 +152,7 @@ \vspace{1cm} - \large Version \textbf{4.1.0-beta1}, 23 January 2016 %% PARSE_VERSION_DATE + \large Version \textbf{4.1.0-beta2}, 8 February 2016 %% PARSE_VERSION_DATE \vspace{1.5cm} \end{center} diff --git a/Build/source/texk/gregorio/gregorio-src/src/Makefile.am b/Build/source/texk/gregorio/gregorio-src/src/Makefile.am index 1bc3209ac20..df996ee02e0 100644 --- a/Build/source/texk/gregorio/gregorio-src/src/Makefile.am +++ b/Build/source/texk/gregorio/gregorio-src/src/Makefile.am @@ -132,6 +132,10 @@ utf8strings.h: utf8strings.h.in encode_utf8strings${EXEEXT}: encode_utf8strings.c $(CC) -o $@ $< +clean-local: + find . -name '*.gcno' -print | xargs rm -f -- + find . -name '*.gcda' -print | xargs rm -f -- + BUILT_SOURCES = utf8strings.h \ gabc/gabc-notes-determination-l.c \ gabc/gabc-score-determination-l.c \ diff --git a/Build/source/texk/gregorio/gregorio-src/src/characters.c b/Build/source/texk/gregorio/gregorio-src/src/characters.c index dc18f5d593e..b840587c31c 100644 --- a/Build/source/texk/gregorio/gregorio-src/src/characters.c +++ b/Build/source/texk/gregorio/gregorio-src/src/characters.c @@ -37,9 +37,6 @@ #include <limits.h> #include <sys/stat.h> #include <assert.h> -#ifdef USE_KPSE - #include <kpathsea/kpathsea.h> -#endif #include "bool.h" #include "struct.h" #include "unicode.h" @@ -51,16 +48,6 @@ #define VOWEL_FILE "gregorio-vowels.dat" -#ifndef USE_KPSE -static __inline void rtrim(char *buf) -{ - char *p; - for (p = buf + strlen(buf) - 1; p >= buf && isspace(*p); --p) { - *p = '\0'; - } -} -#endif - static bool read_vowel_rules(char *const lang) { char *language = lang; rulefile_parse_status status = RFPS_NOT_FOUND; @@ -68,48 +55,7 @@ static bool read_vowel_rules(char *const lang) { const char *description; int tries; -#ifdef USE_KPSE - filenames = kpse_find_file_generic(VOWEL_FILE, kpse_tex_format, true, true); - if (!filenames) { - if (strcmp(language, "Latin") != 0) { - gregorio_messagef("read_patterns", VERBOSITY_WARNING, 0, - _("kpse_find_file_generic cannot find %s"), VOWEL_FILE); - } - return false; - } -#else - FILE *file; - size_t bufsize = 0; - char *buf = NULL; - size_t capacity = 16, size = 0; - - filenames = gregorio_malloc(capacity * sizeof(char *)); - - file = popen("kpsewhich " VOWEL_FILE, "r"); - if (!file) { - gregorio_messagef("read_patterns", VERBOSITY_WARNING, 0, - _("unable to run kpsewhich %s: %s"), VOWEL_FILE, - strerror(errno)); - return false; - } - while (gregorio_readline(&buf, &bufsize, file)) { - rtrim(buf); - if (strlen(buf) > 0) { - filenames[size++] = gregorio_strdup(buf); - if (size >= capacity) { - capacity <<= 1; - filenames = gregorio_realloc(filenames, - capacity * sizeof(char *)); - } - } else { - gregorio_messagef("read_patterns", VERBOSITY_WARNING, 0, - _("kpsewhich returned bad value for %s"), VOWEL_FILE); - } - } - free(buf); - filenames[size] = NULL; - pclose(file); -#endif + gregorio_kpse_find_or_else(filenames, VOWEL_FILE, return false); gregorio_vowel_tables_init(); /* only need to try twice; if it's not resolved by then, there is an alias @@ -190,29 +136,62 @@ static __inline gregorio_character *skip_verbatim_or_special( return ch; } +static __inline bool handle_elision(const gregorio_character *const ch, + bool *in_elision) +{ + if (ch->cos.s.style != ST_ELISION) { + return false; + } + + switch (ch->cos.s.type) { + case ST_T_BEGIN: + *in_elision = true; + break; + + case ST_T_END: + *in_elision = false; + break; + + case ST_T_NOTHING: + /* not reachable unless there's a programming error */ + assert(false); /* LCOV_EXCL_LINE */ + break; + } + return true; +} + static void determine_center(gregorio_character *character, int *start, - int *end) { + int *end) +{ int count; grewchar *subject; gregorio_character *ch; + bool in_elision; *start = *end = -1; + in_elision = false; for (count = 0, ch = character; ch; ch = ch->next_character) { if (ch->is_character) { - ++count; - } else { + if (!in_elision) { + ++count; + } + } else if (!handle_elision(ch, &in_elision)) { ch = skip_verbatim_or_special(ch); } } if (count == 0) { return; } + + in_elision = false; subject = (grewchar *)gregorio_malloc((count + 1) * sizeof(grewchar)); for (count = 0, ch = character; ch; ch = ch->next_character) { if (ch->is_character) { - subject[count ++] = ch->cos.character; - } else { + if (!in_elision) { + subject[count ++] = ch->cos.character; + } + } else if (!handle_elision(ch, &in_elision)) { ch = skip_verbatim_or_special(ch); } } @@ -254,12 +233,11 @@ static bool go_to_end_initial(gregorio_character **param_character) * this element. */ -static void style_push(det_style **current_style, unsigned char style) +static void style_push(det_style **current_style, grestyle_style style) { det_style *element; - if (!current_style) { - return; - } + gregorio_assert(current_style, style_push, "current_style may not be NULL", + return); element = (det_style *) gregorio_malloc(sizeof(det_style)); element->style = style; element->previous_style = NULL; @@ -276,9 +254,8 @@ static void style_push(det_style **current_style, unsigned char style) static void style_pop(det_style **first_style, det_style *element) { - if (!element || !first_style || !*first_style) { - return; - } + gregorio_assert(element && first_style && *first_style, style_pop, + "invalid arguments", return); if (element->previous_style) { assert(*first_style != element); element->previous_style->next_style = element->next_style; @@ -297,16 +274,13 @@ static void style_pop(det_style **first_style, det_style *element) } /* - * free_styles just free the stack. You may notice that it will never be used - * in a normal functionment. But we never know... + * free_styles just frees the stack. */ static void free_styles(det_style **first_style) { det_style *current_style; - if (!first_style) { - return; - } + gregorio_not_null(first_style, free_styles, return); current_style = (*first_style); while (current_style) { current_style = current_style->next_style; @@ -325,7 +299,7 @@ static void free_styles(det_style **first_style) */ static __inline void verb_or_sp(const gregorio_character **ptr_character, const grestyle_style style, FILE *const f, - void (*const function) (FILE *, grewchar *)) + void (*const function) (FILE *, const grewchar *)) { int i, j; grewchar *text; @@ -357,11 +331,9 @@ static __inline void verb_or_sp(const gregorio_character **ptr_character, while (j < i) { if (current_character->is_character) { text[j] = current_character->cos.character; - current_character = current_character->next_character; j++; - } else { - current_character = current_character->next_character; } + current_character = current_character->next_character; } text[i] = 0; function(f, text); @@ -387,15 +359,14 @@ static __inline void verb_or_sp(const gregorio_character **ptr_character, */ void gregorio_write_text(const gregorio_write_text_phase phase, const gregorio_character *current_character, FILE *const f, - void (*const printverb) (FILE *, grewchar *), + void (*const printverb) (FILE *, const grewchar *), void (*const printchar) (FILE *, grewchar), void (*const begin) (FILE *, grestyle_style), void (*const end) (FILE *, grestyle_style), - void (*const printspchar) (FILE *, grewchar *)) + void (*const printspchar) (FILE *, const grewchar *)) { - if (current_character == NULL) { - return; - } + gregorio_assert(current_character, gregorio_write_text, + "current_character may not be NULL", return); while (current_character) { if (current_character->is_character) { printchar(f, current_character->cos.character); @@ -443,20 +414,20 @@ void gregorio_write_text(const gregorio_write_text_phase phase, void gregorio_write_first_letter_alignment_text( const gregorio_write_text_phase phase, const gregorio_character *current_character, FILE *const f, - void (*const printverb) (FILE *, grewchar *), + void (*const printverb) (FILE *, const grewchar *), void (*const printchar) (FILE *, grewchar), void (*const begin) (FILE *, grestyle_style), void (*const end) (FILE *, grestyle_style), - void (*const printspchar) (FILE *, grewchar *)) + void (*const printspchar) (FILE *, const grewchar *)) { /* stack of styles to close and reopen */ det_style *first_style = NULL; det_style *last_style = NULL; int first_letter_open = (phase == WTP_FIRST_SYLLABLE)? 2 : 1; - if (!current_character) { - return; - } + gregorio_assert(current_character, + gregorio_write_first_letter_alignment_text, + "current_character may not be NULL", return); /* go to the first character */ gregorio_go_to_first_character(¤t_character); @@ -475,7 +446,8 @@ void gregorio_write_first_letter_alignment_text( close_first_letter = first_letter_open != 0; } else switch (current_character->cos.s.type) { case ST_T_NOTHING: - assert(false); + /* not reachable unless there's a programming error */ + assert(false); /* LCOV_EXCL_LINE */ break; case ST_T_BEGIN: /* handle styles */ @@ -509,13 +481,18 @@ void gregorio_write_first_letter_alignment_text( switch (current_character->cos.s.style) { case ST_CENTER: case ST_FORCED_CENTER: - case ST_INITIAL: case ST_FIRST_SYLLABLE_INITIAL: /* ignore */ break; + case ST_INITIAL: + /* in the case where the initial is closed before the first + * letter */ + close_first_letter = first_letter_open > 1; + break; case ST_VERBATIM: case ST_SPECIAL_CHAR: - assert(false); + /* not reachable unless there's a programming error */ + assert(false); /* LCOV_EXCL_LINE */ break; case ST_FIRST_WORD: case ST_FIRST_SYLLABLE: @@ -524,7 +501,8 @@ void gregorio_write_first_letter_alignment_text( } /* else fall through */ default: /* pop the style from the stack */ - assert(first_style && first_style->style + assert(first_style); + assert(first_style->style == current_character->cos.s.style); style_pop(&first_style, first_style); end(f, current_character->cos.s.style); @@ -569,93 +547,17 @@ void gregorio_write_first_letter_alignment_text( } if (phase == WTP_FIRST_SYLLABLE) { - while ((--first_letter_open) >= 0) { - end(f, ST_SYLLABLE_INITIAL); - } + /* the only way this can happen is if the first syllable is empty, + * but if the first syllable is empty, this function will not be + * called */ + gregorio_assert_only(!first_letter_open, + gregorio_write_first_letter_alignment_text, + "first_syllable was not closed properly"); } free_styles(&first_style); } -/* the default behaviour is to write only the initial, that is to say things - * between the styles ST_INITIAL */ -void gregorio_write_initial(const gregorio_character *current_character, - FILE *const f, void (*const printverb) (FILE *, grewchar *), - void (*const printchar) (FILE *, grewchar), - void (*const begin) (FILE *, grestyle_style), - void (*const end) (FILE *, grestyle_style), - void (*const printspchar) (FILE *, grewchar *)) -{ - /* we loop until we see the beginning of the initial style */ - gregorio_go_to_first_character(¤t_character); - while (current_character) { - if (!current_character->is_character - && current_character->cos.s.type == ST_T_BEGIN - && current_character->cos.s.style == ST_INITIAL) { - current_character = current_character->next_character; - break; - } - - current_character = current_character->next_character; - } - /* then we loop until we see the end of the initial style, but we print */ - while (current_character) { - if (current_character->is_character) { - printchar(f, current_character->cos.character); - } else { - if (current_character->cos.s.type == ST_T_BEGIN) { - switch (current_character->cos.s.style) { - case ST_VERBATIM: - verb_or_sp(¤t_character, ST_VERBATIM, f, printverb); - break; - case ST_SPECIAL_CHAR: - verb_or_sp(¤t_character, ST_SPECIAL_CHAR, f, - printspchar); - break; - default: - begin(f, current_character->cos.s.style); - break; - } - } else { /* ST_T_END */ - if (current_character->cos.s.style == ST_INITIAL) { - return; - } else { - end(f, current_character->cos.s.style); - } - } - } - current_character = current_character->next_character; - } -} - -/* - * - * A very simple function that returns the first text of a score, or the null - * character if there is no such thing. - * - */ - -gregorio_character *gregorio_first_text(gregorio_score *score) -{ - gregorio_syllable *current_syllable; - if (!score || !score->first_syllable) { - gregorio_message(_("unable to find the first letter of the score"), - "gregorio_first_text", VERBOSITY_ERROR, 0); - return NULL; - } - current_syllable = score->first_syllable; - while (current_syllable) { - if (current_syllable->text) { - return current_syllable->text; - } - current_syllable = current_syllable->next_syllable; - } - - gregorio_message(_("unable to find the first letter of the score"), - "gregorio_first_text", VERBOSITY_ERROR, 0); - return NULL; -} - /* * Here starts the code of the handling of text and styles. * @@ -768,54 +670,28 @@ static void insert_char_after(grewchar c, /* * - * This function suppresses the current character, updates the double chained - * list, and updates current_character to the character after, if there is one. - * - */ - -static void suppress_current_character( - gregorio_character **current_character) -{ - gregorio_character *thischaracter; - if (!current_character || !*current_character) { - return; - } - thischaracter = *current_character; - if ((*current_character)->previous_character) { - (*current_character)->previous_character->next_character = - (*current_character)->next_character; - } - if ((*current_character)->next_character) { - (*current_character)->next_character->previous_character = - (*current_character)->previous_character; - } - (*current_character) = (*current_character)->next_character; - free(thischaracter); -} - -/* - * - * This function suppresses the corresponding character, updates the double - * chained list, but does not touch to current_character. + * This function suppresses the character, updates the double chained + * list, and returns the character after, if there is one. * */ -static void suppress_this_character(gregorio_character *to_suppress) +static __inline gregorio_character *suppress_character( + gregorio_character *current_character) { - if (!to_suppress) { - return; - } - if (to_suppress->previous_character) { - assert(to_suppress->previous_character->next_character == to_suppress); - to_suppress->previous_character->next_character = - to_suppress->next_character; - } - if (to_suppress->next_character) { - assert(to_suppress->next_character->previous_character == to_suppress); - to_suppress->next_character->previous_character = - to_suppress->previous_character; + if (current_character) { + gregorio_character *thischaracter = current_character; + if (current_character->previous_character) { + current_character->previous_character->next_character = + current_character->next_character; + } + if (current_character->next_character) { + current_character->next_character->previous_character = + current_character->previous_character; + } + current_character = current_character->next_character; + free(thischaracter); } - free(to_suppress); + return current_character; } /* @@ -830,14 +706,23 @@ static void suppress_this_character(gregorio_character *to_suppress) static __inline void close_style(gregorio_character *current_character, det_style *current_style) { + /* we suppose that there is a previous_character, because there is a + * current_style + */ + gregorio_assert(current_character && current_character->previous_character, + close_syllable, "have a style but no previous character", return); if (!current_character->previous_character->is_character && current_character->previous_character->cos.s.style == current_style->style) { - /* - * we suppose that there is a previous_character, because there is a - * current_style - */ - suppress_this_character(current_character->previous_character); + /* we do it this way rather than calling suppress_character on the + * previous character because the intent is more obvious to both the + * human reading it and to the clang static analyzer */ + gregorio_character *tofree = current_character->previous_character; + if (tofree->previous_character) { + tofree->previous_character->next_character = current_character; + } + current_character->previous_character = tofree->previous_character; + free(tofree); } else { insert_style_before(ST_T_END, current_style->style, current_character); } @@ -912,56 +797,6 @@ static __inline void begin_center(grestyle_style type, } /* - * - * the macro called when we have ended the determination of the current - * character. It makes current_character point to the last character, not to - * null at the end of the determination. - * - */ - -#define end_c() if (_end_c(¤t_character)) continue; else break; -static __inline bool _end_c(gregorio_character **ptr_character) -{ - if ((*ptr_character)->next_character) { - *ptr_character = (*ptr_character)->next_character; - /* continue */ - return true; - } else { - /* break */ - return false; - } -} - -/* - * - * basically the same except that we suppress the current_character - * - */ - -#define suppress_char_and_end_c() if (_suppress_char_and_end_c(¤t_character)) continue; else break; -static __inline bool _suppress_char_and_end_c( - gregorio_character **ptr_character) -{ - if ((*ptr_character)->next_character) { - *ptr_character = (*ptr_character)->next_character; - suppress_this_character((*ptr_character)->previous_character); - /* continue */ - return true; - } else { - if ((*ptr_character)->previous_character) { - gregorio_character *to_suppress = *ptr_character; - (*ptr_character) = (*ptr_character)->previous_character; - suppress_this_character(to_suppress); - } else { - suppress_this_character(*ptr_character); - *ptr_character = NULL; - } - /* break */ - return false; - } -} - -/* * THE big function. Very long, using a lot of long macros, etc. I hope you * really want to understand it, 'cause it won't be easy. * @@ -982,14 +817,15 @@ void gregorio_rebuild_characters(gregorio_character **const param_character, { /* the current_character */ gregorio_character *current_character = *param_character; - /* a char that we will use in a very particular case */ - grestyle_style this_style; + gregorio_character *sentinel; det_style *first_style = NULL; /* determining the type of centering (forced or not) */ grestyle_style center_type = ST_NO_STYLE; int start = -1, end = -1, index = -1; + bool in_elision = false; + det_style *current_style; /* so, here we start: we go to the first_character */ - if (go_to_end_initial(¤t_character)) { + if (skip_initial && go_to_end_initial(¤t_character)) { if (!current_character->next_character) { /* nothing else to rebuild, but the initial needs to be ST_CENTER */ insert_style_after(ST_T_END, ST_CENTER, ¤t_character); @@ -999,10 +835,10 @@ void gregorio_rebuild_characters(gregorio_character **const param_character, (*param_character) = current_character; return; } - if (skip_initial) { - /* move to the character after the initial */ - current_character = current_character->next_character; - } else { + /* move to the character after the initial */ + current_character = current_character->next_character; + } else { + if (current_character) { gregorio_go_to_first_character_c(¤t_character); } } @@ -1013,163 +849,198 @@ void gregorio_rebuild_characters(gregorio_character **const param_character, } else { center_type = ST_FORCED_CENTER; } + if (!current_character) { + return; + } + for (sentinel = current_character; sentinel->next_character; + sentinel = sentinel->next_character) { + /* just loop to get the last character */ + } + /* put a sentinel at the end to aid in looping */ + insert_style_after(ST_T_NOTHING, ST_SENTINEL, &sentinel); /* we loop until there isn't any character */ - while (current_character) { + while (current_character && current_character != sentinel) { + /* IMPORTANT: A continue inside this loop MUST put current_character on + * the next character to process */ + /* the first part of the function deals with real characters (not * styles) */ if (current_character->is_character) { - ++index; - /* the firstcase is if the user hasn't determined the middle, and - * we have only seen vowels so far (else center_is_determined - * would be DETERMINING_MIDDLE). The current_character is the - * first vowel, so we start the center here. */ - if (!center_is_determined && index == start) { - begin_center(center_type, current_character, &first_style); - center_is_determined = CENTER_DETERMINING_MIDDLE; - end_c(); - } - /* the case where the user has not determined the middle and we - * are in the middle section of the syllable, but there we - * encounter something that is not a vowel, so the center ends - * there. */ - if (center_is_determined == CENTER_DETERMINING_MIDDLE - && index == end) { - end_center(center_type, current_character, &first_style); - center_is_determined = CENTER_FULLY_DETERMINED; - } - /* in the case where it is just a normal character... we simply - * pass. */ - end_c(); - } - /* there starts the second part of the function that deals with the - * styles characters */ - if (current_character->cos.s.type == ST_T_BEGIN - && current_character->cos.s.style != ST_CENTER - && current_character->cos.s.style != ST_FORCED_CENTER) { - /* first, if it it the beginning of a style, which is not center. - * We check if the style is not already in the stack. If it is the - * case, we suppress the character and pass (with the good macro) */ - det_style *current_style = NULL; - for (current_style = first_style; current_style - && current_style->style != current_character->cos.s.style; - current_style = current_style->next_style) { - /* just loop */ - } - if (current_style) { - suppress_char_and_end_c(); - } - /* if we are determining the end of the middle and we have a - * VERBATIM or SPECIAL_CHAR style, we end the center - * determination */ - if ((current_character->cos.s.style == ST_VERBATIM - || current_character->cos.s.style == - ST_SPECIAL_CHAR) - && center_is_determined == CENTER_DETERMINING_MIDDLE) { - end_center(center_type, current_character, &first_style); - center_is_determined = CENTER_FULLY_DETERMINED; - } - /* if it is something to add then we just push the style in the - * stack and continue. */ - style_push(&first_style, current_character->cos.s.style); - /* Here we pass all the characters after a verbatim (or special - * char) beginning, until we find a style (begin or end) */ - if (current_character->cos.s.style == ST_VERBATIM - || current_character->cos.s.style == ST_SPECIAL_CHAR) { - if (current_character->next_character) { - current_character = current_character->next_character; - } - while (current_character->next_character - && current_character->is_character) { - current_character = current_character->next_character; - } - } else { - end_c(); - } - } - /* if it is a beginning of a center, we call the good macro and end. */ - if (current_character->cos.s.type == ST_T_BEGIN - && (current_character->cos.s.style == ST_CENTER - || current_character->cos.s.style == - ST_FORCED_CENTER)) { - if (current_character->cos.s.style == ST_CENTER) { - center_type = ST_CENTER; - } else { - center_type = ST_FORCED_CENTER; + if (!in_elision) { + ++index; + if (!center_is_determined && index == start) { + /* the firstcase is if the user hasn't determined the + * middle, and we have only seen vowels so far (else + * center_is_determined would be DETERMINING_MIDDLE). The + * current_character is the first vowel, so we start the + * center here. */ + begin_center(center_type, current_character, &first_style); + center_is_determined = CENTER_DETERMINING_MIDDLE; + } else if (center_is_determined == CENTER_DETERMINING_MIDDLE + && index == end) { + /* the case where the user has not determined the middle + * and we are in the middle section of the syllable, but + * there we encounter something that is not a vowel, so the + * center ends there. */ + end_center(center_type, current_character, &first_style); + center_is_determined = CENTER_FULLY_DETERMINED; + } /* else it is just a normal character... we simply pass. */ } - if (center_is_determined) { - end_c(); - } - /* center_is_determined = DETERMINING_MIDDLE; */ - /* TODO: not really sure, but shouldn't be there */ - begin_center(center_type, current_character, &first_style); - end_c(); - } - if (current_character->cos.s.type == ST_T_END - && current_character->cos.s.style != ST_CENTER - && current_character->cos.s.style != ST_FORCED_CENTER) { - /* the case of the end of a style (the most complex). First, we - * have to see if the style is in the stack. If there is no stack, - * we just suppress and continue. */ - if (!first_style) { - suppress_char_and_end_c(); - } - /* so, we look if it is in the stack. If it is we put - * current_style to the style just before the style corresponding - * to the character that we are treating (still there ?) */ - if (first_style->style != current_character->cos.s.style) { - det_style *current_style = NULL; - for (current_style = first_style; current_style->next_style - && current_style->next_style->style != - current_character->cos.s.style; - current_style = current_style->next_style) { - /* just loop */ + } else { + const grestyle_style style = current_character->cos.s.style; + /* there starts the second part of the function that deals with the + * styles characters */ + switch (current_character->cos.s.type) { + case ST_T_BEGIN: + /* the beginning of a style */ + switch (style) { + case ST_VERBATIM: + case ST_SPECIAL_CHAR: + /* if we are determining the end of the middle and we have + * a VERBATIM or SPECIAL_CHAR style, we end the center + * determination */ + if (center_is_determined == CENTER_DETERMINING_MIDDLE) { + end_center(center_type, current_character, &first_style); + center_is_determined = CENTER_FULLY_DETERMINED; + } + /* Here we pass all the characters after a verbatim (or + * special char) beginning, until we find a style (begin or + * end) */ + if (current_character->next_character) { + current_character = current_character->next_character; + } + while (current_character && current_character != sentinel + && current_character->is_character) { + current_character = current_character->next_character; + } + assert(current_character); + if (current_character != sentinel) { + gregorio_assert2(!current_character->is_character + && current_character->cos.s.type == ST_T_END + && current_character->cos.s.style == style, + gregorio_rebuild_characters, "mismatched %s", + grestyle_style_to_string(style), break); + } + break; + + case ST_CENTER: + /* not reachable unless there's a programming error */ + /* LCOV_EXCL_START */ + gregorio_fail(gregorio_rebuild_characters, + "encountered unexpected begin ST_CENTER"); + break; + /* LCOV_EXCL_STOP */ + + case ST_FORCED_CENTER: + begin_center(center_type, current_character, &first_style); + current_character = suppress_character(current_character); + continue; + + default: + handle_elision(current_character, &in_elision); + /* it the beginning of a style, which is not center. We + * check if the style is not already in the stack. If it is + * the case, we suppress the character and pass */ + for (current_style = first_style; current_style + && current_style->style != current_character->cos.s.style; + current_style = current_style->next_style) { + /* just loop */ + } + if (current_style) { + current_character = suppress_character(current_character); + continue; + } + /* if it is something to add then we just push the style in the + * stack and continue. */ + style_push(&first_style, current_character->cos.s.style); + break; } - if (current_style->next_style) { - for (current_style = first_style; current_style; - current_style = current_style->previous_style) { - /* if there are styles before in the stack, we close - * them */ - insert_style_before(ST_T_END, current_style->style, - current_character); + break; + + case ST_T_END: + /* the beginning of a style */ + switch(current_character->cos.s.style) { + case ST_VERBATIM: + case ST_SPECIAL_CHAR: + case ST_CENTER: + /* not reachable unless there's a programming error */ + /* LCOV_EXCL_START */ + gregorio_fail2(gregorio_rebuild_characters, + "encountered unexpected end %s", + grestyle_style_to_string( + current_character->cos.s.style)); + break; + /* LCOV_EXCL_STOP */ + + case ST_FORCED_CENTER: + end_center(center_type, current_character, &first_style); + current_character = suppress_character(current_character); + continue; + + default: + handle_elision(current_character, &in_elision); + /* the case of the end of a style (the most complex). + * First, we have to see if the style is in the stack. If + * there is no stack, we just suppress and continue. */ + if (!first_style) { + current_character = suppress_character(current_character); + continue; } - this_style = current_character->cos.s.style; - /* and then we reopen them */ - for (current_style = first_style; current_style && - current_style->style != this_style; + /* so, we look if it is in the stack. If it is we put + * current_style to the style just before the style + * corresponding to the character that we are treating + * (still there ?) */ + for (current_style = first_style; current_style + && current_style->style + != current_character->cos.s.style; current_style = current_style->next_style) { - insert_style_after(ST_T_BEGIN, current_style->style, - ¤t_character); + /* just loop */ + } + if (current_style) { + det_style *this_style; + /* if there are styles before in the stack, we close + * them */ + for (this_style = first_style; + this_style != current_style; + this_style = this_style->next_style) { + insert_style_before(ST_T_END, this_style->style, + current_character); + } + /* and then we reopen them */ + for (this_style = this_style->previous_style; + this_style; + this_style = this_style->previous_style) { + insert_style_after(ST_T_BEGIN, this_style->style, + ¤t_character); + } + /* we delete the style in the stack */ + style_pop(&first_style, current_style); + } else { + current_character = suppress_character(current_character); + continue; } - /* we delete the style in the stack */ - style_pop(&first_style, current_style); - } else { - suppress_char_and_end_c(); } - } else { - style_pop(&first_style, first_style); - end_c(); - } - } else { /* ST_T_END && ST_CENTER */ - /* a quite simple case, we just call the good macro. */ - if (!center_is_determined) { - suppress_char_and_end_c(); + break; + + default: + /* not reachable unless there's a programming error */ + /* LCOV_EXCL_START */ + gregorio_fail(gregorio_rebuild_characters, + "unexpected style type"); } + /* LCOV_EXCL_STOP */ } - end_c(); - } - if (!current_character) { - return; + current_character = current_character->next_character; } + /* destroy the sentinel */ + current_character = sentinel->previous_character; + current_character->next_character = NULL; + free(sentinel); /* we terminate all the styles that are still in the stack */ - { - /* introduce a scope so current_style is local, since we can't - * initialize in the loop (as in C99) */ - det_style *current_style = NULL; - for (current_style = first_style; current_style; - current_style = current_style->next_style) { - insert_style_after(ST_T_END, current_style->style, - ¤t_character); - } + for (current_style = first_style; current_style; + current_style = current_style->next_style) { + insert_style_after(ST_T_END, current_style->style, + ¤t_character); } /* current_character is at the end of the list now, so if we havn't closed * the center, we do it at the end. */ @@ -1219,12 +1090,13 @@ void gregorio_rebuild_first_syllable(gregorio_character **param_character, gregorio_character *start_of_special; /* so, here we start: we go to the first_character */ gregorio_go_to_first_character_c(¤t_character); - /* first we look at the styles, to see if there is a FORCED_CENTER - * somewhere and we also remove the CENTER styles if the syllable starts at - * CENTER */ - if (!param_character) { - return; - } + /* first we look at the styles to see if there is a FORCED_CENTER + * somewhere */ + /* Note: we don't have to deal with ST_CENTER here because + * gregorio_rebuild_first_syllable is meant to be run **before** + * gregorio_rebuild_characters, which is what adds ST_CENTER */ + gregorio_assert(param_character, gregorio_rebuild_first_syllable, + "param_character may not be NULL", return); while (current_character) { if (!current_character->is_character) { if (current_character->cos.s.style == ST_FORCED_CENTER) { @@ -1232,16 +1104,6 @@ void gregorio_rebuild_first_syllable(gregorio_character **param_character, * center */ break; } - if (current_character->cos.s.style == ST_CENTER) { - /* we have to do it in case param_character (the first - * character) is a ST_CENTER beginning */ - if (!current_character->previous_character - && current_character == *param_character) { - *param_character = (*param_character)->next_character; - } - suppress_current_character(¤t_character); - continue; - } } current_character = current_character->next_character; } @@ -1287,10 +1149,6 @@ void gregorio_rebuild_first_syllable(gregorio_character **param_character, start_of_special->previous_character = NULL; current_character->next_character = first_character; first_character->previous_character = current_character; - - gregorio_message(_ - ("Any style applied to the initial will be ignored."), - NULL, VERBOSITY_WARNING, 0); } break; } @@ -1304,10 +1162,6 @@ void gregorio_rebuild_first_syllable(gregorio_character **param_character, current_character->previous_character = NULL; current_character->next_character = first_character; first_character->previous_character = current_character; - - gregorio_message(_ - ("Any style applied to the initial will be ignored."), - NULL, VERBOSITY_WARNING, 0); } insert_style_before(ST_T_BEGIN, ST_INITIAL, current_character); insert_style_after(ST_T_END, ST_INITIAL, ¤t_character); diff --git a/Build/source/texk/gregorio/gregorio-src/src/characters.h b/Build/source/texk/gregorio/gregorio-src/src/characters.h index 06486dadc9b..32cea87401e 100644 --- a/Build/source/texk/gregorio/gregorio-src/src/characters.h +++ b/Build/source/texk/gregorio/gregorio-src/src/characters.h @@ -55,8 +55,6 @@ typedef struct det_style { struct det_style *next_style; } det_style; -gregorio_character *gregorio_first_text(gregorio_score *score); - typedef enum gregorio_write_text_phase { WTP_NORMAL, WTP_FIRST_SYLLABLE @@ -64,31 +62,22 @@ typedef enum gregorio_write_text_phase { void gregorio_write_text(gregorio_write_text_phase phase, const gregorio_character *current_character, FILE *f, - void (*printverb) (FILE *, grewchar *), + void (*printverb) (FILE *, const grewchar *), void (*printchar) (FILE *, grewchar), void (*begin) (FILE *, grestyle_style), void (*end) (FILE *, grestyle_style), - void (*printspchar) (FILE *, grewchar *)); + void (*printspchar) (FILE *, const grewchar *)); void gregorio_write_first_letter_alignment_text(gregorio_write_text_phase phase, const gregorio_character *current_character, FILE *f, - void (*printverb) (FILE *, grewchar *), - void (*printchar) (FILE *, grewchar), - void (*begin) (FILE *, grestyle_style), - void (*end) (FILE *, grestyle_style), - void (*printspchar) (FILE *, grewchar *)); - -void gregorio_write_initial(const gregorio_character *current_character, - FILE *f, void (*printverb) (FILE *, grewchar *), + void (*printverb) (FILE *, const grewchar *), void (*printchar) (FILE *, grewchar), void (*begin) (FILE *, grestyle_style), void (*end) (FILE *, grestyle_style), - void (*printspchar) (FILE *, grewchar *)); + void (*printspchar) (FILE *, const grewchar *)); void gregorio_set_centering_language(char *language); -gregorio_character *gregorio_first_text(gregorio_score *score); - void gregorio_rebuild_characters(gregorio_character **param_character, gregorio_center_determination center_is_determined, bool skip_initial); diff --git a/Build/source/texk/gregorio/gregorio-src/src/dump/dump.c b/Build/source/texk/gregorio/gregorio-src/src/dump/dump.c index f2adafa80c5..8fd22fcf508 100644 --- a/Build/source/texk/gregorio/gregorio-src/src/dump/dump.c +++ b/Build/source/texk/gregorio/gregorio-src/src/dump/dump.c @@ -49,12 +49,22 @@ void dump_write_characters(FILE *const f, gregorio_print_unichar(f, current_character->cos.character); fprintf(f, "\n"); } else { - if (current_character->cos.s.type == ST_T_BEGIN) { + switch (current_character->cos.s.type) { + case ST_T_BEGIN: fprintf(f, " beginning of style %s\n", dump_style_to_string(current_character->cos.s.style)); - } else { + break; + case ST_T_END: fprintf(f, " end of style %s\n", dump_style_to_string(current_character->cos.s.style)); + break; + default: + /* not reachable unless there's a programming error */ + /* LCOV_EXCL_START */ + fprintf(f, " !! IMPROPER STYLE !! %s\n", + dump_style_to_string(current_character->cos.s.style)); + break; + /* LCOV_EXCL_STOP */ } } current_character = current_character->next_character; @@ -74,7 +84,8 @@ static const char *dump_pitch(const char height, const char highest_pitch) { } gregorio_snprintf(buf, 20, "%c", pitch); } else { - gregorio_snprintf(buf, 20, "?%d", height); + /* not reachable unless there's a programming error */ + gregorio_snprintf(buf, 20, "?%d", height); /* LCOV_EXCL_LINE */ } return buf; } @@ -87,11 +98,8 @@ void dump_write_score(FILE *f, gregorio_score *score) gregorio_syllable *syllable; gregorio_header *header; - if (!f) { - gregorio_message(_("call with NULL file"), "gregoriotex_write_score", - VERBOSITY_ERROR, 0); - return; - } + gregorio_assert(f, dump_write_score, "call with NULL file", return); + fprintf(f, "=====================================================================\n" " SCORE INFOS\n" @@ -177,23 +185,20 @@ void dump_write_score(FILE *f, gregorio_score *score) for (syllable = score->first_syllable; syllable; syllable = syllable->next_syllable) { gregorio_element *element; - if (syllable->type) { - fprintf(f, " type %d (%s)\n", - syllable->type, gregorio_type_to_string(syllable->type)); - } + fprintf(f, " type 0 (GRE_SYLLABLE)\n"); if (syllable->position) { fprintf(f, " position %d (%s)\n", syllable->position, gregorio_word_position_to_string(syllable->position)); } - if (syllable->special_sign) { - fprintf(f, " special sign %s\n", - gregorio_sign_to_string(syllable->special_sign)); - } if (syllable->no_linebreak_area != NLBA_NORMAL) { fprintf(f, " no line break area %s\n", gregorio_nlba_to_string(syllable->no_linebreak_area)); } + if (syllable->euouae != EUOUAE_NORMAL) { + fprintf(f, " euouae %s\n", + gregorio_euouae_to_string(syllable->euouae)); + } if (syllable->text) { if (syllable->translation) { fprintf(f, "\n Text\n"); @@ -327,19 +332,6 @@ void dump_write_score(FILE *f, gregorio_score *score) unpitched.info.space)); break; - case GRE_BAR: - fprintf(f, " glyph_type %d (%s)\n", - glyph->u.misc.unpitched.info.bar, - gregorio_bar_to_string(glyph->u.misc.unpitched. - info.bar)); - if (glyph->u.misc.unpitched.special_sign) { - fprintf(f, " special sign %d (%s)\n", - glyph->u.misc.unpitched.special_sign, - gregorio_sign_to_string(glyph-> - u.misc.unpitched.special_sign)); - } - break; - case GRE_GLYPH: fprintf(f, " glyph_type %d (%s)\n", glyph->u.notes.glyph_type, @@ -354,8 +346,12 @@ void dump_write_score(FILE *f, gregorio_score *score) break; default: - fprintf(f, " !!! UNKNOWN !!! !!!\n"); + /* not reachable unless there's a programming error */ + /* LCOV_EXCL_START */ + fprintf(f, " !!! NOT ALLOWED !!! %s\n", + gregorio_type_to_string(glyph->type)); break; + /* LCOV_EXCL_STOP */ } if (glyph->type == GRE_GLYPH) { for (note = glyph->u.notes.first_note; note; @@ -388,8 +384,12 @@ void dump_write_score(FILE *f, gregorio_score *score) break; default: - fprintf(f, " !!! NOT ALLOWED !!! !!!\n"); + /* not reachable unless there's a programming error */ + /* LCOV_EXCL_START */ + fprintf(f, " !!! NOT ALLOWED !!! %s\n", + gregorio_type_to_string(note->type)); break; + /* LCOV_EXCL_STOP */ } if (note->texverb) { fprintf(f, " TeX string \"%s\"\n", @@ -466,8 +466,12 @@ void dump_write_score(FILE *f, gregorio_score *score) break; default: - /* do nothing */ + /* not reachable unless there's a programming error */ + /* LCOV_EXCL_START */ + fprintf(f, " !!! NOT ALLOWED !!! %s\n", + gregorio_type_to_string(element->type)); break; + /* LCOV_EXCL_STOP */ } if (element->nabc_lines) { fprintf(f, " nabc_lines %d\n", diff --git a/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc-elements-determination.c b/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc-elements-determination.c index a0291dd50e3..dddde3ae4b8 100644 --- a/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc-elements-determination.c +++ b/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc-elements-determination.c @@ -36,22 +36,32 @@ * */ -static __inline bool is_puncta_ascendens(char glyph) +static __inline bool is_puncta_ascendens(gregorio_glyph_type glyph) { - return glyph == G_2_PUNCTA_INCLINATA_ASCENDENS - || glyph == G_3_PUNCTA_INCLINATA_ASCENDENS - || glyph == G_4_PUNCTA_INCLINATA_ASCENDENS - || glyph == G_5_PUNCTA_INCLINATA_ASCENDENS - || glyph == G_PUNCTUM_INCLINATUM; + switch (glyph) { + case G_2_PUNCTA_INCLINATA_ASCENDENS: + case G_3_PUNCTA_INCLINATA_ASCENDENS: + case G_4_PUNCTA_INCLINATA_ASCENDENS: + case G_5_PUNCTA_INCLINATA_ASCENDENS: + case G_PUNCTUM_INCLINATUM: + return true; + default: + return false; + } } -static __inline bool is_puncta_descendens(char glyph) +static __inline bool is_puncta_descendens(gregorio_glyph_type glyph) { - return glyph == G_2_PUNCTA_INCLINATA_DESCENDENS - || glyph == G_3_PUNCTA_INCLINATA_DESCENDENS - || glyph == G_4_PUNCTA_INCLINATA_DESCENDENS - || glyph == G_5_PUNCTA_INCLINATA_DESCENDENS - || glyph == G_PUNCTUM_INCLINATUM; + switch (glyph) { + case G_2_PUNCTA_INCLINATA_DESCENDENS: + case G_3_PUNCTA_INCLINATA_DESCENDENS: + case G_4_PUNCTA_INCLINATA_DESCENDENS: + case G_5_PUNCTA_INCLINATA_DESCENDENS: + case G_PUNCTUM_INCLINATUM: + return true; + default: + return false; + } } /* @@ -111,17 +121,14 @@ static gregorio_element *gabc_det_elements_from_glyphs( gregorio_element *first_element = NULL; /* the first_glyph of the element that we are currently determining */ gregorio_glyph *first_glyph = current_glyph; - /* the last real (GRE_GLYPH) that we have processed, often the same as - * first_glyph */ - gregorio_glyph *previous_glyph = current_glyph; + /* the last real (GRE_GLYPH) that we have processed */ + gregorio_glyph *previous_glyph = NULL; /* a char that is necessary to determine some cases */ bool do_not_cut = false; /* a char that is necesarry to determine the type of the current_glyph */ - char current_glyph_type; + gregorio_glyph_type current_glyph_type; - if (!current_glyph) { - return NULL; - } + gregorio_not_null(current_glyph, gabc_det_elements_from_glyphs, return NULL); /* first we go to the first glyph in the chained list of glyphs (maybe to * suppress ?) */ gregorio_go_to_first_glyph(¤t_glyph); @@ -133,6 +140,7 @@ static gregorio_element *gabc_det_elements_from_glyphs( switch (current_glyph->u.misc.unpitched.info.space) { case SP_ZERO_WIDTH: case SP_HALF_SPACE: + case SP_INTERGLYPH_SPACE: if (!current_glyph->next) { close_element(¤t_element, &first_glyph, current_glyph); } @@ -144,12 +152,13 @@ static gregorio_element *gabc_det_elements_from_glyphs( break; } } - /* we must not cut after a zero_width_space */ + /* we must not cut after a texverb */ if (current_glyph->type == GRE_TEXVERB_GLYPH) { if (!current_glyph->next) { close_element(¤t_element, &first_glyph, current_glyph); } current_glyph = current_glyph->next; + do_not_cut = true; continue; } /* clef change or space or end of line */ @@ -172,19 +181,23 @@ static gregorio_element *gabc_det_elements_from_glyphs( current_glyph->texverb); } first_glyph = current_glyph->next; - previous_glyph = current_glyph->next; + previous_glyph = NULL; current_glyph->texverb = NULL; gregorio_free_one_glyph(¤t_glyph); continue; } - if (is_puncta_ascendens(current_glyph->type)) { + if (is_fused(current_glyph->u.notes.liquescentia)) { + do_not_cut = true; + } + + if (is_puncta_ascendens(current_glyph->u.notes.glyph_type)) { current_glyph_type = G_PUNCTA_ASCENDENS; } else { - if (is_puncta_descendens(current_glyph->type)) { + if (is_puncta_descendens(current_glyph->u.notes.glyph_type)) { current_glyph_type = G_PUNCTA_DESCENDENS; } else { - current_glyph_type = current_glyph->type; + current_glyph_type = current_glyph->u.notes.glyph_type; } } switch (current_glyph_type) { @@ -204,28 +217,42 @@ static gregorio_element *gabc_det_elements_from_glyphs( do_not_cut = false; } break; - case G_ONE_NOTE: - if (current_glyph->u.notes.first_note - && (current_glyph->u.notes.first_note->u.note.shape == S_STROPHA - || current_glyph->u.notes.first_note->u.note.shape == S_VIRGA - || current_glyph->u.notes.first_note->u.note.shape == S_VIRGA_REVERSA)) { - /* we determine the last pitch */ - char last_pitch; - gregorio_note *tmp_note; - tmp_note = previous_glyph->u.notes.first_note; - while (tmp_note->next) { - tmp_note = tmp_note->next; - } - last_pitch = tmp_note->u.note.pitch; - if (current_glyph->u.notes.first_note->u.note.pitch == last_pitch) { - previous_glyph = current_glyph; - break; + /* one note glyphs */ + case G_PUNCTUM: + case G_VIRGA: + case G_BIVIRGA: + case G_TRIVIRGA: + case G_VIRGA_REVERSA: + case G_STROPHA: + case G_STROPHA_AUCTA: + case G_DISTROPHA: + case G_DISTROPHA_AUCTA: + case G_TRISTROPHA: + case G_TRISTROPHA_AUCTA: + if (previous_glyph && !is_tail_liquescentia( + previous_glyph->u.notes.liquescentia)) { + if (previous_glyph) { + signed char last_pitch; + /* we determine the last pitch */ + gregorio_note *tmp_note; + tmp_note = previous_glyph->u.notes.first_note; + while (tmp_note->next) { + tmp_note = tmp_note->next; + } + last_pitch = tmp_note->u.note.pitch; + if (current_glyph->u.notes.first_note->u.note.pitch + == last_pitch) { + do_not_cut = false; + previous_glyph = current_glyph; + break; + } } } /* else we fall in the default case */ default: if (do_not_cut) { do_not_cut = false; + previous_glyph = current_glyph; } else { cut_before(current_glyph, &first_glyph, &previous_glyph, ¤t_element); diff --git a/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc-glyphs-determination.c b/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc-glyphs-determination.c index b54369e9e7b..8c5a0b86971 100644 --- a/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc-glyphs-determination.c +++ b/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc-glyphs-determination.c @@ -98,8 +98,8 @@ static char gregorio_add_note_to_a_glyph(gregorio_glyph_type current_glyph_type, /* here we separate notes that would be logically in the same glyph * but that are too far to be so */ if (last_pitch) { - if (current_pitch - last_pitch > MAX_INTERVAL - || current_pitch - last_pitch < -MAX_INTERVAL) { + if (current_pitch - last_pitch > MAX_AMBITUS + || current_pitch - last_pitch < -MAX_AMBITUS) { current_glyph_type = G_UNDETERMINED; } } @@ -188,8 +188,13 @@ static char gregorio_add_note_to_a_glyph(gregorio_glyph_type current_glyph_type, if (current_pitch > last_pitch) { next_glyph_type = G_PORRECTUS; } else { - *end_of_glyph = DET_END_OF_CURRENT; - next_glyph_type = G_ANCUS; + if (liquescentia & L_DEMINUTUS) { + *end_of_glyph = DET_END_OF_CURRENT; + next_glyph_type = G_ANCUS; + } else { + *end_of_glyph = DET_END_OF_PREVIOUS; + next_glyph_type = G_PUNCTUM; + } } break; case G_TORCULUS: @@ -257,6 +262,7 @@ static char gregorio_add_note_to_a_glyph(gregorio_glyph_type current_glyph_type, break; case S_BIVIRGA: if (current_glyph_type == G_VIRGA && last_pitch == current_pitch) { + *end_of_glyph = DET_END_OF_CURRENT; next_glyph_type = G_TRIVIRGA; } else { *end_of_glyph = DET_END_OF_PREVIOUS; @@ -315,7 +321,7 @@ static char gregorio_add_note_to_a_glyph(gregorio_glyph_type current_glyph_type, if (last_pitch < current_pitch) { next_glyph_type = G_3_PUNCTA_INCLINATA_ASCENDENS; } else { - next_glyph_type = G_TRIGONUS; + next_glyph_type = G_PUNCTA_INCLINATA; } break; case G_3_PUNCTA_INCLINATA_ASCENDENS: @@ -334,7 +340,7 @@ static char gregorio_add_note_to_a_glyph(gregorio_glyph_type current_glyph_type, break; case G_2_PUNCTA_INCLINATA_DESCENDENS: if (last_pitch < current_pitch) { - next_glyph_type = G_TRIGONUS; + next_glyph_type = G_PUNCTA_INCLINATA; } else { next_glyph_type = G_3_PUNCTA_INCLINATA_DESCENDENS; } @@ -392,7 +398,12 @@ static char gregorio_add_note_to_a_glyph(gregorio_glyph_type current_glyph_type, next_glyph_type = G_TRISTROPHA; break; default: + /* not reachable unless there's a programming error */ + /* LCOV_EXCL_START */ + gregorio_fail2(gregorio_add_note_to_a_glyph, "unexpected shape: %s", + gregorio_shape_to_string(shape)); break; + /* LCOV_EXCL_STOP */ } /* end of the main switch */ @@ -419,12 +430,22 @@ static char gregorio_add_note_to_a_glyph(gregorio_glyph_type current_glyph_type, * it was not the same glyph, there we must say that the previous * glyph has ended. */ if (last_pitch) { - if (current_pitch - last_pitch > MAX_INTERVAL - || current_pitch - last_pitch < -MAX_INTERVAL) { + if (current_pitch - last_pitch > MAX_AMBITUS + || current_pitch - last_pitch < -MAX_AMBITUS) { if (*end_of_glyph == DET_END_OF_CURRENT || *end_of_glyph == DET_END_OF_BOTH) { + /* There is no current way for the code to end up here, but + * we'll leave it in because it's a good safety precaution in + * case something new is added in the future */ + /* LCOV_EXCL_START */ + gregorio_message(_("Encountered the need to switch " + "DET_END_OF_CURRENT to DET_END_OF_BOTH because of " + "overly large ambitus"), + "gregorio_add_note_to_a_glyph", VERBOSITY_WARNING, + __LINE__); *end_of_glyph = DET_END_OF_BOTH; } else { + /* LCOV_EXCL_STOP */ *end_of_glyph = DET_END_OF_PREVIOUS; } } @@ -453,9 +474,6 @@ static gregorio_note *close_normal_glyph(gregorio_glyph **last_glyph, { gregorio_note *new_current_note = current_note; gregorio_scanner_location loc; - /* a variable necessary for the patch for G_BIVIRGA & co. */ - gregorio_note *added_notes = NULL; - gregorio_note *next_note = NULL; /* patch to have good glyph type in the case where a glyph ends by a note * with shape S_QUADRATUM */ @@ -481,12 +499,16 @@ static gregorio_note *close_normal_glyph(gregorio_glyph **last_glyph, || glyph_type == G_TRISTROPHA_AUCTA) { gregorio_go_to_first_note(¤t_note); while (current_note) { + /* a variable necessary for the patch for G_BIVIRGA & co. */ + gregorio_note *added_notes = NULL; + gregorio_note *next_note = NULL; if (current_note->type == GRE_NOTE) { switch (current_note->u.note.shape) { case S_TRIVIRGA: gregorio_add_note(&added_notes, current_note->u.note.pitch, S_VIRGA, _NO_SIGN, L_NO_LIQUESCENTIA, current_note, copy_note_location(current_note, &loc)); + /* fall through */ case S_BIVIRGA: gregorio_add_note(&added_notes, current_note->u.note.pitch, S_VIRGA, _NO_SIGN, L_NO_LIQUESCENTIA, current_note, @@ -501,6 +523,7 @@ static gregorio_note *close_normal_glyph(gregorio_glyph **last_glyph, S_STROPHA, _NO_SIGN, L_NO_LIQUESCENTIA, current_note, copy_note_location(current_note, &loc)); + /* fall through */ case S_DISTROPHA: gregorio_add_note(&added_notes, current_note->u.note.pitch, S_STROPHA, _NO_SIGN, L_NO_LIQUESCENTIA, @@ -511,29 +534,19 @@ static gregorio_note *close_normal_glyph(gregorio_glyph **last_glyph, current_note->u.note.liquescentia, current_note, copy_note_location(current_note, &loc)); break; - case S_TRISTROPHA_AUCTA: - gregorio_add_note(&added_notes, current_note->u.note.pitch, - S_STROPHA, _NO_SIGN, L_NO_LIQUESCENTIA, - current_note, - copy_note_location(current_note, &loc)); - case S_DISTROPHA_AUCTA: - gregorio_add_note(&added_notes, current_note->u.note.pitch, - S_STROPHA, _NO_SIGN, L_NO_LIQUESCENTIA, - current_note, - copy_note_location(current_note, &loc)); - gregorio_add_note(&added_notes, current_note->u.note.pitch, - S_STROPHA_AUCTA, current_note->signs, - current_note->u.note.liquescentia, current_note, - copy_note_location(current_note, &loc)); - break; default: break; } } - /* this is the case of two separate virga that have been spotted - * as a bivirga */ if (!added_notes) { - break; + /* nothing added, but we must go on in case it's + * virga+bivirga = trivirga or stropa+bistropha = tristropha */ + if (current_note->next) { + current_note = current_note->next; + continue; + } else { + break; + } } next_note = current_note->next; /* now we have what we want, we set up the links and free the old @@ -542,12 +555,13 @@ static gregorio_note *close_normal_glyph(gregorio_glyph **last_glyph, current_note->next->previous = added_notes; added_notes->next = next_note; } + if (current_note == new_current_note) { + new_current_note = added_notes; + } gregorio_go_to_first_note(&added_notes); if (current_note->previous) { current_note->previous->next = added_notes; added_notes->previous = current_note->previous; - } else { - new_current_note = added_notes; } /* Detaching current_note is not strictly necessary here because we * are effectively plucking out added_notes into its own glyph; @@ -582,16 +596,15 @@ static gregorio_note *close_fused_glyph(gregorio_glyph **last_glyph, static gregorio_note *next_non_texverb_note(gregorio_note *first_note, gregorio_note *last_note) { - if (first_note == NULL) { - return NULL; - } + gregorio_not_null(first_note, gregorio_note, return NULL); if (first_note == last_note) { - if (first_note->type == GRE_TEXVERB_GLYPH) { - gregorio_message(_("Unexpected texverb at start of iteration"), - "next_non_texverb_note", VERBOSITY_ERROR, 0); - } + /* not reachable unless there's a programming error */ + /* LCOV_EXCL_START */ + gregorio_assert_only(first_note->type != GRE_TEXVERB_GLYPH, + next_non_texverb_note, "Unexpected texverb at start of iteration"); return first_note; + /* LCOV_EXCL_STOP */ } for (first_note = first_note->next; first_note && first_note != last_note; @@ -601,10 +614,8 @@ static gregorio_note *next_non_texverb_note(gregorio_note *first_note, } } - if (first_note && first_note->type == GRE_TEXVERB_GLYPH) { - gregorio_message(_("Unexpected texverb at end of iteration"), - "next_non_texverb_note", VERBOSITY_ERROR, 0); - } + gregorio_assert_only(!first_note || first_note->type != GRE_TEXVERB_GLYPH, + next_non_texverb_note, "Unexpected texverb at end of iteration"); return last_note; } @@ -636,11 +647,9 @@ static gregorio_note *close_fusion_glyph(gregorio_glyph **last_glyph, int prev_shift = 0, shift, shift2; gregorio_note *result; - if ((*first_note)->type == GRE_TEXVERB_GLYPH) { - gregorio_message(_("Unexpected texverb at start of fusion"), - "close_fusion_glyph", VERBOSITY_ERROR, 0); - return real_last_note; - } + gregorio_assert((*first_note)->type != GRE_TEXVERB_GLYPH, + close_fusion_glyph, "Unexpected texverb at start of fusion", + return real_last_note); for (last_note = real_last_note; last_note != *first_note && last_note->type == GRE_TEXVERB_GLYPH; @@ -658,19 +667,16 @@ static gregorio_note *close_fusion_glyph(gregorio_glyph **last_glyph, (*first_note)->type, &((*first_note)->u.other), _NO_SIGN, (*first_note)->texverb); (*first_note)->texverb = NULL; - if (*first_note == last_note) { - gregorio_message(_("Unexpected texverb at end of fusion"), - "close_fusion_glyph", VERBOSITY_ERROR, 0); - return last_note; - } + gregorio_assert(*first_note != last_note, + close_fusion_glyph, "Unexpected texverb at end of fusion", + return last_note); gregorio_free_one_note(first_note); } - if (*first_note == last_note || !(next = (*first_note)->next)) { - gregorio_message(_("Unexpected single note during fusion"), - "close_fusion_glyph", VERBOSITY_ERROR, 0); - return last_note; - } + gregorio_assert( + *first_note != last_note && (next = (*first_note)->next), + close_fusion_glyph, "Unexpected single note during fusion", + return last_note); next = next_non_texverb_note(*first_note, last_note); @@ -690,11 +696,8 @@ static gregorio_note *close_fusion_glyph(gregorio_glyph **last_glyph, if (prev_shift >= 0 && shift < 0) { /* check for a porrectus-like flexus */ gregorio_note *next_next = next_non_texverb_note(next, last_note); - if (!next_next) { - gregorio_message(_("Unexpected end of notes during fusion"), - "close_fusion_glyph", VERBOSITY_ERROR, 0); - return last_note; - } + gregorio_assert(next_next, close_fusion_glyph, + "Unexpected end of notes during fusion", return last_note); shift2 = next_next->u.note.pitch - next->u.note.pitch; if (shift2 > 0) { if (next_next == last_note) { @@ -854,9 +857,8 @@ gregorio_glyph *gabc_det_glyphs_from_notes(gregorio_note *current_note, gregorio_liquescentia head_liquescentia; bool autofuse = false, first_autofused_note = false; - if (current_note == NULL) { - return NULL; - } + gregorio_assert(current_note, gabc_det_glyphs_from_notes, + "current_note may not be NULL", return NULL); gregorio_go_to_first_note(¤t_note); @@ -1114,10 +1116,6 @@ gregorio_glyph *gabc_det_glyphs_from_notes(gregorio_note *current_note, current_note->u.note.shape = S_PUNCTUM_CAVUM_INCLINATUM_AUCTUS; break; - - default: - /* do nothing */ - break; } if (current_note->next @@ -1188,10 +1186,6 @@ gregorio_glyph *gabc_det_glyphs_from_notes(gregorio_note *current_note, current_note->u.note.shape = S_PUNCTUM_CAVUM_INCLINATUM_AUCTUS; break; - - default: - /* do nothing */ - break; } if (current_note->next diff --git a/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc-notes-determination-l.c b/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc-notes-determination-l.c index 28602e9290d..df9700984f1 100644 --- a/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc-notes-determination-l.c +++ b/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc-notes-determination-l.c @@ -404,19 +404,19 @@ static yyconst flex_int32_t yy_nxt[][256] = { 39, 40, 40, 40, 40, 40, 40, 40, 40, 41, - 42, 40, 40, 41, 40, 40, 40, 40, 40, 40, + 41, 40, 40, 41, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 43, 44, 40, 45, 40, 46, 40, 47, - - 40, 40, 40, 40, 48, 49, 50, 51, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 52, 53, - 54, 55, 56, 40, 57, 58, 58, 58, 58, 58, - 58, 58, 58, 58, 58, 58, 58, 58, 58, 59, - 58, 40, 60, 40, 40, 40, 61, 62, 40, 40, - 63, 64, 40, 65, 40, 66, 67, 68, 68, 69, - 68, 68, 69, 68, 68, 68, 68, 68, 68, 68, - 68, 70, 68, 71, 72, 73, 40, 40, 74, 75, - 76, 77, 78, 79, 40, 80, 81, 40, 40, 40, + 40, 40, 42, 43, 40, 44, 40, 45, 40, 46, + + 40, 40, 40, 40, 47, 48, 49, 50, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 51, 52, + 53, 54, 55, 40, 56, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 58, + 57, 40, 59, 40, 40, 40, 60, 61, 40, 40, + 62, 63, 40, 64, 40, 65, 66, 67, 67, 68, + 67, 67, 68, 67, 67, 67, 67, 67, 67, 67, + 67, 69, 67, 70, 71, 72, 40, 40, 73, 74, + 75, 76, 77, 78, 40, 79, 80, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, @@ -436,19 +436,19 @@ static yyconst flex_int32_t yy_nxt[][256] = { 39, 40, 40, 40, 40, 40, 40, 40, 40, 41, - 42, 40, 40, 41, 40, 40, 40, 40, 40, 40, + 41, 40, 40, 41, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 43, 44, 40, 45, 40, 46, 40, 47, - 40, 40, 40, 40, 48, 49, 50, 51, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 52, 53, - 54, 55, 56, 40, 57, 58, 58, 58, 58, 58, - 58, 58, 58, 58, 58, 58, 58, 58, 58, 59, - - 58, 40, 60, 40, 40, 40, 61, 62, 40, 40, - 63, 64, 40, 65, 40, 66, 67, 68, 68, 69, - 68, 68, 69, 68, 68, 68, 68, 68, 68, 68, - 68, 70, 68, 71, 72, 73, 40, 40, 74, 75, - 76, 77, 78, 79, 40, 80, 81, 40, 40, 40, + 40, 40, 42, 43, 40, 44, 40, 45, 40, 46, + 40, 40, 40, 40, 47, 48, 49, 50, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 51, 52, + 53, 54, 55, 40, 56, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 58, + + 57, 40, 59, 40, 40, 40, 60, 61, 40, 40, + 62, 63, 40, 64, 40, 65, 66, 67, 67, 68, + 67, 67, 68, 67, 67, 67, 67, 67, 67, 67, + 67, 69, 67, 70, 71, 72, 40, 40, 73, 74, + 75, 76, 77, 78, 40, 79, 80, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, @@ -466,67 +466,130 @@ static yyconst flex_int32_t yy_nxt[][256] = }, { - 39, 82, 82, 82, 82, 82, 82, 82, 82, 82, - 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, - - 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, - 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, - 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, - 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, - 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, - 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, - 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, - 82, 82, 82, 83, 82, 82, 82, 82, 82, 82, - 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, - 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, - - 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, - 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, - 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, - 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, - 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, - 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, - 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, - 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, - 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, - 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, - - 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, - 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, - 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, - 82, 82, 82, 82, 82, 82 - }, - - { - 39, 82, 82, 82, 82, 82, 82, 82, 82, 82, - 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, - 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, - 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, - 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, - 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, - - 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, - 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, - 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, - 82, 82, 82, 83, 82, 82, 82, 82, 82, 82, - 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, - 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, - 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, - 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, - 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, - 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, - - 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, - 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, - 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, - 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, - 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, - 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, - 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, - 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, - 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, - 82, 82, 82, 82, 82, 82 - + 39, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 82, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81 + }, + + { + 39, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 82, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81 + + }, + + { + 39, 83, 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 82, 83, 83, 83, 83, 83, 83, + + 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, + + 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83 + }, + + { + 39, 83, 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, + + 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 82, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, + + 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, + + 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83 }, { @@ -538,11 +601,9 @@ static yyconst flex_int32_t yy_nxt[][256] = 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 83, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, + 84, 84, 84, 82, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, @@ -557,23 +618,23 @@ static yyconst flex_int32_t yy_nxt[][256] = 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, + 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, + 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84 }, { 39, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 83, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, + 84, 84, 84, 82, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, @@ -589,6 +650,8 @@ static yyconst flex_int32_t yy_nxt[][256] = 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, + 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, + 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84 }, @@ -599,13 +662,11 @@ static yyconst flex_int32_t yy_nxt[][256] = 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, - 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, - 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, - 85, 85, 85, 83, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, + 85, 85, 85, 82, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, @@ -620,23 +681,23 @@ static yyconst flex_int32_t yy_nxt[][256] = 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, + 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, + 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85 + }, { 39, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, - - 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, - 85, 85, 85, 83, 85, 85, 85, 85, 85, 85, - 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, + 85, 85, 85, 82, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, @@ -652,6 +713,8 @@ static yyconst flex_int32_t yy_nxt[][256] = 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, + 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, + 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85 }, @@ -660,15 +723,13 @@ static yyconst flex_int32_t yy_nxt[][256] = 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, - 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, - 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, - 86, 86, 86, 83, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, + 86, 86, 86, 82, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, @@ -683,8 +744,10 @@ static yyconst flex_int32_t yy_nxt[][256] = 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, - 86, 86, 86, 86, 86, 86 + 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, + 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, + 86, 86, 86, 86, 86, 86 }, { @@ -696,11 +759,9 @@ static yyconst flex_int32_t yy_nxt[][256] = 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, - 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, - 86, 86, 86, 83, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, - 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, + 86, 86, 86, 82, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, @@ -715,23 +776,23 @@ static yyconst flex_int32_t yy_nxt[][256] = 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, + 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, + 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86 }, { 39, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 83, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 82, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, @@ -747,6 +808,8 @@ static yyconst flex_int32_t yy_nxt[][256] = 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87 }, @@ -757,13 +820,11 @@ static yyconst flex_int32_t yy_nxt[][256] = 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 83, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 82, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, @@ -778,13 +839,15 @@ static yyconst flex_int32_t yy_nxt[][256] = 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87 + }, { 39, 88, 88, 88, 88, 88, 88, 88, 88, 88, - 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, - + 89, 88, 88, 89, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, @@ -792,8 +855,6 @@ static yyconst flex_int32_t yy_nxt[][256] = 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, - 88, 88, 88, 83, 88, 88, 88, 88, 88, 88, - 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, @@ -810,28 +871,30 @@ static yyconst flex_int32_t yy_nxt[][256] = 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, + 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, + 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88 }, { 39, 88, 88, 88, 88, 88, 88, 88, 88, 88, + 89, 88, 88, 89, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, + 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, - 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, - 88, 88, 88, 83, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, + 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, - 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, @@ -840,72 +903,72 @@ static yyconst flex_int32_t yy_nxt[][256] = 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, + 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88 - }, { - 39, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 90, 89, 89, 90, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - - 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - - 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 89, 89 - }, - - { - 39, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 90, 89, 89, 90, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - - 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - - 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - - 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 89, 89 + 39, 90, 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, + + 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 82, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, + + 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90 + }, + + { + 39, 90, 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, + + 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 82, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, + + 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, + + 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90 }, { @@ -915,13 +978,11 @@ static yyconst flex_int32_t yy_nxt[][256] = 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, - 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, - 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, - 91, 91, 91, 83, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, + 91, 91, 91, 82, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, @@ -936,23 +997,23 @@ static yyconst flex_int32_t yy_nxt[][256] = 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, + 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, + 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91 + }, { 39, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, - - 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, - 91, 91, 91, 83, 91, 91, 91, 91, 91, 91, - 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, + 91, 91, 91, 82, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, @@ -968,6 +1029,8 @@ static yyconst flex_int32_t yy_nxt[][256] = 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, + 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, + 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91 }, @@ -976,15 +1039,13 @@ static yyconst flex_int32_t yy_nxt[][256] = 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, - 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, - 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, - 92, 92, 92, 83, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 82, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, @@ -999,8 +1060,10 @@ static yyconst flex_int32_t yy_nxt[][256] = 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, - 92, 92, 92, 92, 92, 92 + 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 92 }, { @@ -1012,11 +1075,9 @@ static yyconst flex_int32_t yy_nxt[][256] = 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, - 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, - 92, 92, 92, 83, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, - 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 82, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, @@ -1031,23 +1092,23 @@ static yyconst flex_int32_t yy_nxt[][256] = 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92 }, { 39, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, - 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, - 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, - 93, 93, 93, 83, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, + 93, 93, 93, 82, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, @@ -1063,6 +1124,8 @@ static yyconst flex_int32_t yy_nxt[][256] = 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, + 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, + 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93 }, @@ -1073,13 +1136,11 @@ static yyconst flex_int32_t yy_nxt[][256] = 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, - 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, - 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, - 93, 93, 93, 83, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, + 93, 93, 93, 82, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, @@ -1094,12 +1155,23 @@ static yyconst flex_int32_t yy_nxt[][256] = 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, + 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, + 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93 + }, { 39, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 95, 96, 94, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 82, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, @@ -1108,7 +1180,7 @@ static yyconst flex_int32_t yy_nxt[][256] = 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, - 94, 94, 94, 83, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, @@ -1117,8 +1189,22 @@ static yyconst flex_int32_t yy_nxt[][256] = 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94 + }, + + { + 39, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + + 94, 94, 94, 94, 94, 95, 96, 94, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 82, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, @@ -1126,6 +1212,15 @@ static yyconst flex_int32_t yy_nxt[][256] = 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94 }, @@ -1134,17 +1229,44 @@ static yyconst flex_int32_t yy_nxt[][256] = 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 98, 99, 94, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 82, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94 + }, + + { + 39, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, - 94, 94, 94, 83, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 98, 99, 94, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 82, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, @@ -1157,450 +1279,328 @@ static yyconst flex_int32_t yy_nxt[][256] = 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94 + }, + { + 39, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 94, + + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 94, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101 + + }, + + { + 39, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 94, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 94, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101 }, { - 39, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 96, 97, 95, 98, 98, - 98, 98, 98, 98, 98, 98, 98, 98, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 83, 95, 95, 95, 95, 95, 95, - - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95 - }, - - { - 39, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - - 95, 95, 95, 95, 95, 96, 97, 95, 98, 98, - 98, 98, 98, 98, 98, 98, 98, 98, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 83, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95 - }, - - { - 39, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 99, 100, 95, 101, 101, - 101, 101, 101, 101, 101, 101, 101, 101, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 83, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95 - }, - - { - 39, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 99, 100, 95, 101, 101, - 101, 101, 101, 101, 101, 101, 101, 101, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 83, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95 - }, - - { - 39, 102, 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, 102, 95, - - 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 95, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, - - 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102 - - }, - - { - 39, 102, 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, 102, 95, - 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, - - 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 95, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, - - 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102 - }, - - { - 39, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 103, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 104, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95 - }, - - { - 39, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 103, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 104, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95 - }, - - { - 39, 105, 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, - - 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, 105, 95, - 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, - - 105, 105, 105, 95, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, - - 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105 - }, - - { - 39, 105, 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, 105, 95, - - 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 95, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, - - 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105 - - }, - - { - 39, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 106, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 107, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95 - }, - - { - 39, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 106, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 107, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95 - }, - - { - 39, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 83, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95 - }, - - { - 39, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 83, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95 + 39, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 102, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 103, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94 + }, + + { + 39, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 102, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 103, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94 + }, + + { + 39, 104, 104, 104, 104, 104, 104, 104, 104, 104, + 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, + + 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, + 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, + 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, + 104, 104, 104, 104, 104, 104, 104, 104, 104, 94, + 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, + 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, + 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, + 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, + 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, + 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, + + 104, 104, 104, 94, 104, 104, 104, 104, 104, 104, + 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, + 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, + 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, + 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, + 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, + 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, + 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, + 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, + 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, + + 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, + 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, + 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, + 104, 104, 104, 104, 104, 104 + }, + + { + 39, 104, 104, 104, 104, 104, 104, 104, 104, 104, + 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, + 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, + 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, + 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, + 104, 104, 104, 104, 104, 104, 104, 104, 104, 94, + + 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, + 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, + 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, + 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, + 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, + 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, + 104, 104, 104, 94, 104, 104, 104, 104, 104, 104, + 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, + 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, + 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, + + 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, + 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, + 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, + 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, + 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, + 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, + 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, + 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, + 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, + 104, 104, 104, 104, 104, 104 + + }, + + { + 39, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 105, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 106, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94 + }, + + { + 39, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 105, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 106, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94 + }, + + { + 39, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 82, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94 + }, + + { + 39, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 82, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94 }, { @@ -1667,8 +1667,8 @@ static yyconst flex_int32_t yy_nxt[][256] = }, { - 39, -41, -41, -41, -41, -41, -41, -41, -41, 108, - 108, -41, -41, 108, -41, -41, -41, -41, -41, -41, + 39, -41, -41, -41, -41, -41, -41, -41, -41, 107, + 107, -41, -41, 107, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, @@ -1699,8 +1699,8 @@ static yyconst flex_int32_t yy_nxt[][256] = }, { - 39, -42, -42, -42, -42, -42, -42, -42, -42, 108, - 108, -42, -42, 108, -42, -42, -42, -42, -42, -42, + 39, -42, -42, -42, -42, -42, -42, -42, -42, -42, + -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, @@ -1730,66 +1730,66 @@ static yyconst flex_int32_t yy_nxt[][256] = }, { - 39, -43, -43, -43, -43, -43, -43, -43, -43, -43, - -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, - - -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, - -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, - -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, - -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, - -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, - -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, - -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, - -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, - -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, - -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, - - -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, - -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, - -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, - -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, - -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, - -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, - -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, - -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, - -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, - -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, - - -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, - -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, - -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, - -43, -43, -43, -43, -43, -43 - }, - - { - 39, 109, 109, 109, 109, 109, 109, 109, 109, 109, - 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, - 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, - 109, 109, 110, 109, 109, 109, 109, 109, 109, 109, - 109, 109, 109, 109, 109, 109, 109, 111, 109, 109, - 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, - - 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, - 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, - 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, - 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, - 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, - 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, - 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, - 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, - 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, - 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, - - 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, - 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, - 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, - 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, - 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, - 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, - 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, - 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, - 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, - 109, 109, 109, 109, 109, 109 + 39, 108, 108, 108, 108, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, + + 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, + 108, 108, 109, 108, 108, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 110, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, + + 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, + + 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 108, 108 + }, + + { + 39, -44, -44, -44, -44, -44, -44, -44, -44, -44, + -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, + -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, + -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, + -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, + -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, + + -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, + -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, + -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, + -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, + -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, + -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, + -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, + -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, + -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, + -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, + + -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, + -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, + -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, + -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, + -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, + -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, + -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, + -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, + -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, + -44, -44, -44, -44, -44, -44 }, @@ -1830,7 +1830,7 @@ static yyconst flex_int32_t yy_nxt[][256] = -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, - -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, + -46, -46, -46, -46, -46, -46, -46, -46, 111, 111, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, @@ -1861,8 +1861,8 @@ static yyconst flex_int32_t yy_nxt[][256] = -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, - -47, -47, -47, -47, -47, -47, -47, -47, 112, 112, - -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, + -47, -47, -47, -47, -47, -47, -47, -47, -47, 112, + 112, 112, 112, 112, 112, 112, 112, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, @@ -1893,14 +1893,14 @@ static yyconst flex_int32_t yy_nxt[][256] = -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, - -48, -48, -48, -48, -48, -48, -48, -48, -48, 113, - 113, 113, 113, 113, 113, 113, 113, -48, -48, -48, - -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, - -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, - -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, - -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, + -48, -48, -48, -48, -48, 113, 113, 113, 113, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 113, -48, + 113, -48, -48, -48, -48, -48, -48, -48, -48, -48, + -48, -48, -48, -48, -48, -48, -48, 113, 113, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, + 113, -48, 113, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, @@ -1924,15 +1924,15 @@ static yyconst flex_int32_t yy_nxt[][256] = -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, - -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, + -49, -49, -49, -49, -49, -49, -49, -49, 114, 114, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, - -49, -49, -49, -49, -49, 114, 114, 114, 114, 114, - 114, 114, 114, 114, 114, 114, 114, 114, 114, -49, - 114, -49, -49, -49, -49, -49, -49, -49, -49, -49, - -49, -49, -49, -49, -49, -49, -49, 114, 114, 114, - 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, - 114, -49, 114, -49, -49, -49, -49, -49, -49, -49, + -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, + -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, + -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, + -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, + -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, + -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, @@ -1955,13 +1955,13 @@ static yyconst flex_int32_t yy_nxt[][256] = 39, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, - -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, - -50, -50, -50, -50, -50, -50, -50, -50, 115, 115, - -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, + -50, -50, -50, 115, -50, -50, -50, -50, -50, -50, + -50, -50, -50, -50, -50, -50, -50, 116, 117, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, + -50, 118, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, @@ -1988,12 +1988,12 @@ static yyconst flex_int32_t yy_nxt[][256] = -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, - -51, -51, -51, -51, -51, -51, -51, 116, 117, -51, + -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, + -51, -51, -51, -51, -51, -51, -51, -51, 119, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, - -51, 118, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, @@ -2019,8 +2019,8 @@ static yyconst flex_int32_t yy_nxt[][256] = -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, - -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, - -52, -52, -52, -52, -52, -52, -52, -52, 119, -52, + -52, -52, -52, -52, -52, -52, -52, -52, -52, 112, + 112, 112, 112, 112, 112, 112, 112, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, @@ -2051,14 +2051,14 @@ static yyconst flex_int32_t yy_nxt[][256] = -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, - -53, -53, -53, -53, -53, -53, -53, -53, -53, 113, - 113, 113, 113, 113, 113, 113, 113, -53, -53, -53, + -53, -53, -53, -53, -53, -53, -53, 120, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, + 121, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, @@ -2082,7 +2082,7 @@ static yyconst flex_int32_t yy_nxt[][256] = -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, - -54, -54, -54, -54, -54, -54, -54, 120, -54, -54, + -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, @@ -2090,7 +2090,7 @@ static yyconst flex_int32_t yy_nxt[][256] = -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, - 121, -54, -54, -54, -54, -54, -54, -54, -54, -54, + -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, @@ -2148,12 +2148,12 @@ static yyconst flex_int32_t yy_nxt[][256] = -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, - -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, - -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, - -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, - -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, - -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, - -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, + -56, -56, -56, -56, -56, 122, 122, 122, 122, 122, + 122, 122, 122, 122, 122, 122, 122, 122, 122, -56, + 122, -56, -56, -56, -56, -56, -56, -56, -56, -56, + -56, 123, -56, -56, -56, -56, -56, 122, 122, 124, + 122, 122, 124, 122, 122, 122, 122, 122, 122, 122, + 122, -56, 122, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, @@ -2179,13 +2179,13 @@ static yyconst flex_int32_t yy_nxt[][256] = -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, - -57, -57, -57, -57, -57, 122, 122, 122, 122, 122, - 122, 122, 122, 122, 122, 122, 122, 122, 122, -57, + -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, + -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, - 122, -57, -57, -57, -57, -57, -57, -57, -57, -57, - -57, 123, -57, -57, -57, -57, -57, 122, 122, 124, - 122, 122, 124, 122, 122, 122, 122, 122, 122, 122, - 122, -57, 122, -57, -57, -57, -57, -57, -57, -57, + -57, -57, -57, -57, -57, -57, 125, -57, -57, -57, + -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, + -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, + -57, -57, -57, -57, -57, 126, -57, -57, 127, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, @@ -2213,10 +2213,10 @@ static yyconst flex_int32_t yy_nxt[][256] = -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, - -58, -58, -58, -58, -58, -58, 125, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, - -58, -58, -58, -58, -58, 126, -58, -58, 127, -58, + -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, + -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, @@ -2335,7 +2335,7 @@ static yyconst flex_int32_t yy_nxt[][256] = -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, - -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, + -62, -62, -62, 128, -62, 129, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, @@ -2367,14 +2367,14 @@ static yyconst flex_int32_t yy_nxt[][256] = -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, - -63, -63, -63, 128, -63, 129, -63, -63, -63, -63, - -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, - -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, + -63, -63, -63, -63, -63, -63, -63, 130, -63, 131, + -63, 132, -63, 133, 134, -63, -63, -63, 135, -63, + 136, 137, -63, -63, -63, -63, -63, 138, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, @@ -2404,9 +2404,9 @@ static yyconst flex_int32_t yy_nxt[][256] = -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, - -64, -64, -64, -64, -64, -64, -64, 130, -64, 131, - -64, 132, -64, 133, 134, -64, -64, -64, 135, -64, - 136, 137, -64, -64, -64, -64, -64, 138, -64, -64, + -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, + -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, + -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, @@ -2430,8 +2430,8 @@ static yyconst flex_int32_t yy_nxt[][256] = -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, - -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, - -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, + -65, -65, -65, -65, -65, -65, -65, -65, 139, 139, + 139, 139, 139, 139, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, @@ -2462,8 +2462,8 @@ static yyconst flex_int32_t yy_nxt[][256] = -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, - -66, -66, -66, -66, -66, -66, -66, -66, 139, 139, - 139, 139, 139, 139, -66, -66, -66, -66, -66, -66, + -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, + -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, @@ -2493,15 +2493,15 @@ static yyconst flex_int32_t yy_nxt[][256] = -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, - -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, + -67, -67, -67, 140, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, + -67, -67, -67, -67, -67, -67, 125, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, - -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, - -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, + -67, -67, -67, -67, -67, 126, -67, -67, 127, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, @@ -2525,12 +2525,12 @@ static yyconst flex_int32_t yy_nxt[][256] = -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, - -68, -68, -68, 140, -68, -68, -68, -68, -68, -68, - -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, + -68, -68, -68, 140, -68, -68, -68, -68, -68, 141, + 141, 141, 141, 141, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, 125, -68, -68, -68, - -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, + -68, -68, -68, -68, -68, -68, -68, -68, 142, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, 126, -68, -68, 127, -68, @@ -2556,15 +2556,15 @@ static yyconst flex_int32_t yy_nxt[][256] = -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, - -69, -69, -69, 140, -69, -69, -69, -69, -69, 141, - 141, 141, 141, 141, -69, -69, -69, -69, -69, -69, + -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, + -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, - -69, -69, -69, -69, -69, -69, 125, -69, -69, -69, - -69, -69, -69, -69, -69, -69, -69, -69, 142, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, - -69, -69, -69, -69, -69, 126, -69, -69, 127, -69, + -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, + -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, + -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, @@ -2620,8 +2620,8 @@ static yyconst flex_int32_t yy_nxt[][256] = -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, - -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, - -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, + -71, -71, -71, -71, -71, -71, -71, -71, 143, 144, + 145, 146, 147, 148, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, @@ -2651,8 +2651,8 @@ static yyconst flex_int32_t yy_nxt[][256] = -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, - -72, -72, -72, -72, -72, -72, -72, -72, 143, 144, - 145, 146, 147, 148, -72, -72, -72, -72, -72, -72, + -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, + -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, @@ -2809,7 +2809,7 @@ static yyconst flex_int32_t yy_nxt[][256] = -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, - -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, + -77, -77, -77, 149, -77, 150, -77, -77, 151, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, @@ -2841,7 +2841,7 @@ static yyconst flex_int32_t yy_nxt[][256] = -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, - -78, -78, -78, 149, -78, 150, -78, -78, 151, -78, + -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, @@ -2931,130 +2931,98 @@ static yyconst flex_int32_t yy_nxt[][256] = }, { - 39, -81, -81, -81, -81, -81, -81, -81, -81, -81, - -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, - -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, - -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, - - -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, - -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, - -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, - -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, - -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, - -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, - -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, - -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, - -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, - -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, - - -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, - -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, - -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, - -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, - -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, - -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, - -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, - -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, - -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, - -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, - - -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, - -81, -81, -81, -81, -81, -81 - }, - - { 39, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, + 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, - 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, - 152, 152, 152, -82, 152, 152, 152, 152, 152, 152, + 152, 152, 152, -81, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, + 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, - 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, + 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152 }, { - 39, -83, -83, -83, -83, -83, -83, -83, -83, -83, - -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, - - -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, - -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, - -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, - -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, - -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, - -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, - -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, - -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, - -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, - -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, + 39, -82, -82, -82, -82, -82, -82, -82, -82, -82, + -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, + -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, + -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, + -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, + -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, + -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, + -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, - -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, - -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, - -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, - -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, - -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, - -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, - -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, - -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, - -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, - -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, + -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, + -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, + -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, + -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, + -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, + -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, + -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, + -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, + -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, + -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, - -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, - -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, - -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, - -83, -83, -83, -83, -83, -83 + -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, + -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, + -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, + -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, + -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, + -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, + -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, + -82, -82, -82, -82, -82, -82 }, { 39, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, + 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, - 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, - 153, 153, 153, -84, 153, 153, 153, 153, 153, 153, + 153, 153, 153, -83, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, + 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, - 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, + 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153 - }, { @@ -3064,28 +3032,29 @@ static yyconst flex_int32_t yy_nxt[][256] = 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, + 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, - 154, 154, 154, -85, 154, 154, 154, 154, 154, 154, - + 154, 154, 154, -84, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, + 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, - 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154 + }, { @@ -3093,29 +3062,28 @@ static yyconst flex_int32_t yy_nxt[][256] = 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, - 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, - 155, 155, 155, -86, 155, 155, 155, 155, 155, 155, + 155, 155, 155, -85, 155, 155, 155, 155, 155, 155, + 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, - 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, + 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, - 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155 }, @@ -3125,28 +3093,29 @@ static yyconst flex_int32_t yy_nxt[][256] = 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, + 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, - 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, - 156, 156, 156, -87, 156, 156, 156, 156, 156, 156, + 156, 156, 156, -86, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, + 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, - 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, + 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156 }, @@ -3154,29 +3123,28 @@ static yyconst flex_int32_t yy_nxt[][256] = { 39, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, - 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, + 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, - 157, 157, 157, -88, 157, 157, 157, 157, 157, 157, + 157, 157, 157, -87, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, - 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, + 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, - 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, @@ -3185,65 +3153,66 @@ static yyconst flex_int32_t yy_nxt[][256] = { 39, 158, 158, 158, 158, 158, 158, 158, 158, 158, - -89, 158, 158, -89, 158, 158, 158, 158, 158, 158, + -88, 158, 158, -88, 158, 158, 158, 158, 158, 158, + 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, - 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, + 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, - 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, + 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158 - }, { - 39, -90, -90, -90, -90, -90, -90, -90, -90, -90, - 159, -90, -90, 159, -90, -90, -90, -90, -90, -90, - -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, - -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, - -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, - -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, - -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, - -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, - -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, - -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, + 39, -89, -89, -89, -89, -89, -89, -89, -89, -89, + 159, -89, -89, 159, -89, -89, -89, -89, -89, -89, + -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, + -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, + -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, + -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, + + -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, + -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, + -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, + -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, + -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, + -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, + -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, + -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, + -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, + -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, - -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, - -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, - -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, - -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, - -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, - -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, - -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, - -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, - -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, - -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, + -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, + -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, + -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, + -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, + -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, + -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, + -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, + -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, + -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, + -89, -89, -89, -89, -89, -89 - -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, - -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, - -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, - -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, - -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, - -90, -90, -90, -90, -90, -90 }, { @@ -3251,29 +3220,28 @@ static yyconst flex_int32_t yy_nxt[][256] = 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 160, -91, 160, 160, 160, 160, 160, 160, + 160, 160, 160, -90, 160, 160, 160, 160, 160, 160, + 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, + 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160 }, @@ -3283,28 +3251,29 @@ static yyconst flex_int32_t yy_nxt[][256] = 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, + 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, - 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, - 161, 161, 161, -92, 161, 161, 161, 161, 161, 161, + 161, 161, 161, -91, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, + 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, - 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, + 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161 }, @@ -3312,29 +3281,28 @@ static yyconst flex_int32_t yy_nxt[][256] = { 39, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, - 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, + 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, - 162, 162, 162, -93, 162, 162, 162, 162, 162, 162, + 162, 162, 162, -92, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, - 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, + 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, - 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, @@ -3344,32 +3312,64 @@ static yyconst flex_int32_t yy_nxt[][256] = { 39, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, + 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, - 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, - 163, 163, 163, -94, 163, 163, 163, 163, 163, 163, + 163, 163, 163, -93, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, + 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, - 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, + 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163 + }, + + { + 39, -94, -94, -94, -94, -94, -94, -94, -94, -94, + -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, + -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, + -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, + -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, + -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, + + -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, + -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, + -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, + -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, + -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, + -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, + -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, + -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, + -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, + -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, + + -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, + -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, + -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, + -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, + -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, + -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, + -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, + -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, + -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, + -94, -94, -94, -94, -94, -94 }, @@ -3378,8 +3378,8 @@ static yyconst flex_int32_t yy_nxt[][256] = -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, - -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, - -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, + -95, -95, -95, -95, -95, -95, 164, -95, 165, 165, + 165, 165, 165, 165, 165, 165, 165, 165, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, @@ -3410,8 +3410,8 @@ static yyconst flex_int32_t yy_nxt[][256] = -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, - -96, -96, -96, -96, -96, -96, 164, -96, 165, 165, - 165, 165, 165, 165, 165, 165, 165, 165, -96, -96, + -96, -96, -96, -96, -96, -96, -96, -96, 166, 166, + 166, 166, 166, 166, 166, 166, 166, 166, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, @@ -3441,13 +3441,13 @@ static yyconst flex_int32_t yy_nxt[][256] = -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, - -97, -97, -97, -97, -97, -97, -97, -97, 166, 166, - 166, 166, 166, 166, 166, 166, 166, 166, -97, -97, + -97, -97, -97, -97, -97, -97, 167, -97, 165, 165, + 165, 165, 165, 165, 165, 165, 165, 165, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, - -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, + -97, -97, -97, 168, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, @@ -3473,12 +3473,12 @@ static yyconst flex_int32_t yy_nxt[][256] = -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, - -98, -98, -98, -98, -98, -98, 167, -98, 165, 165, - 165, 165, 165, 165, 165, 165, 165, 165, -98, -98, + -98, -98, -98, -98, -98, -98, 169, -98, 170, 170, + 170, 170, 170, 170, 170, 170, 170, 170, -98, -98, + -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, - -98, -98, -98, 168, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, @@ -3504,8 +3504,8 @@ static yyconst flex_int32_t yy_nxt[][256] = -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, - -99, -99, -99, -99, -99, -99, 169, -99, 170, 170, - 170, 170, 170, 170, 170, 170, 170, 170, -99, -99, + -99, -99, -99, -99, -99, -99, -99, -99, 171, 171, + 171, 171, 171, 171, 171, 171, 171, 171, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, @@ -3536,12 +3536,12 @@ static yyconst flex_int32_t yy_nxt[][256] = -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, - -100, -100, -100, -100, -100, -100, -100, -100, 171, 171, - 171, 171, 171, 171, 171, 171, 171, 171, -100, -100, - -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, + -100, -100, -100, -100, -100, -100, 172, -100, 170, 170, + 170, 170, 170, 170, 170, 170, 170, 170, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, + -100, -100, -100, 173, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, @@ -3563,64 +3563,33 @@ static yyconst flex_int32_t yy_nxt[][256] = }, { - 39, -101, -101, -101, -101, -101, -101, -101, -101, -101, - -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, - -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, - -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, - - -101, -101, -101, -101, -101, -101, 172, -101, 170, 170, - 170, 170, 170, 170, 170, 170, 170, 170, -101, -101, - -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, - -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, - -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, - -101, -101, -101, 173, -101, -101, -101, -101, -101, -101, - -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, - -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, - -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, - -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, - - -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, - -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, - -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, - -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, - -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, - -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, - -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, - -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, - -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, - -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, - - -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, - -101, -101, -101, -101, -101, -101 - }, - - { 39, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, + 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, - 174, 174, 174, 174, 174, 174, 174, 174, 174, -102, + 174, 174, 174, 174, 174, 174, 174, 174, 174, -101, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, - 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, - 174, 174, 174, -102, 174, 174, 174, 174, 174, 174, + 174, 174, 174, -101, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, + 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, - 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, + 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174 }, @@ -3628,29 +3597,28 @@ static yyconst flex_int32_t yy_nxt[][256] = { 39, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, -103, 175, 175, 175, 175, 175, 175, + 175, 175, 175, -102, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, @@ -3660,33 +3628,33 @@ static yyconst flex_int32_t yy_nxt[][256] = { 39, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, + 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, - 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, - 176, 176, 176, -104, 176, 176, 176, 176, 176, 176, + 176, 176, 176, -103, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, + 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, - 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, + 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176 - }, { @@ -3695,29 +3663,30 @@ static yyconst flex_int32_t yy_nxt[][256] = 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, - 177, 177, 177, 177, 177, 177, 177, 177, 177, -105, + 177, 177, 177, 177, 177, 177, 177, 177, 177, -104, + 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, - 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, - 177, 177, 177, -105, 177, 177, 177, 177, 177, 177, + 177, 177, 177, -104, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, - 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177 + }, { @@ -3725,29 +3694,28 @@ static yyconst flex_int32_t yy_nxt[][256] = 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, - 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, - 178, 178, 178, -106, 178, 178, 178, 178, 178, 178, + 178, 178, 178, -105, 178, 178, 178, 178, 178, 178, + 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, - 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, + 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, - 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178 }, @@ -3757,35 +3725,67 @@ static yyconst flex_int32_t yy_nxt[][256] = 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, + 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, - 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, - 179, 179, 179, -107, 179, 179, 179, 179, 179, 179, + 179, 179, 179, -106, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, + 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, - 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, + 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179 }, { - 39, -108, -108, -108, -108, -108, -108, -108, -108, 108, - 108, -108, -108, 108, -108, -108, -108, -108, -108, -108, + 39, -107, -107, -107, -107, -107, -107, -107, -107, 107, + 107, -107, -107, 107, -107, -107, -107, -107, -107, -107, + -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, + -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, + -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, + -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, + -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, + -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, + + -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, + -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, + -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, + -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, + -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, + -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, + -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, + -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, + -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, + -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, + + -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, + -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, + -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, + -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, + -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, + -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, + -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, + -107, -107, -107, -107, -107, -107 + }, + + { + 39, -108, -108, -108, -108, -108, -108, -108, -108, -108, + -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, @@ -3851,13 +3851,13 @@ static yyconst flex_int32_t yy_nxt[][256] = 39, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, + -110, -110, -110, 115, -110, -110, -110, -110, -110, -110, + -110, -110, -110, -110, -110, -110, -110, 180, 117, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, - -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, - -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, - -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, + -110, 181, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, @@ -3884,12 +3884,12 @@ static yyconst flex_int32_t yy_nxt[][256] = -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, - -111, -111, -111, -111, -111, -111, -111, 180, 117, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, - -111, 181, -111, -111, -111, -111, -111, -111, -111, -111, + -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, + -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, @@ -10405,8 +10405,8 @@ static void yy_fatal_error (yyconst char msg[] ); *yy_cp = '\0'; \ (yy_c_buf_p) = yy_cp; -#define YY_NUM_RULES 134 -#define YY_END_OF_BUFFER 135 +#define YY_NUM_RULES 135 +#define YY_END_OF_BUFFER 136 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info @@ -10419,32 +10419,32 @@ static yyconst flex_int32_t yy_accept[317] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 135, 133, - 64, 64, 97, 133, 91, 1, 115, 77, 133, 117, - 94, 80, 79, 120, 103, 119, 133, 112, 123, 83, - 127, 125, 69, 133, 29, 116, 76, 112, 112, 122, - 121, 82, 128, 126, 124, 90, 92, 66, 61, 62, - 118, 36, 54, 37, 38, 34, 35, 39, 3, 2, - 30, 31, 32, 33, 134, 134, 134, 134, 134, 134, - - 134, 46, 134, 134, 51, 134, 134, 64, 102, 101, - 98, 115, 78, 113, 117, 96, 93, 40, 81, 0, - 0, 114, 28, 114, 0, 0, 0, 70, 71, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 116, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 136, 134, + 64, 98, 134, 91, 1, 116, 77, 134, 118, 95, + 80, 79, 121, 104, 120, 134, 113, 124, 83, 128, + 126, 69, 134, 29, 117, 76, 113, 113, 123, 122, + 82, 129, 127, 125, 90, 92, 66, 61, 62, 119, + 36, 54, 37, 38, 34, 35, 39, 3, 2, 30, + 31, 32, 33, 135, 135, 135, 135, 135, 135, 135, + + 46, 135, 135, 51, 135, 135, 64, 103, 102, 99, + 116, 78, 114, 118, 94, 97, 93, 40, 81, 0, + 0, 115, 28, 115, 0, 0, 0, 70, 71, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 117, 63, 72, 0, 84, 85, 86, 87, 88, 89, 67, 68, 65, 36, 37, 38, 34, 35, 39, 3, 2, 30, 31, 32, 33, 0, 0, 0, 0, 41, 0, 0, - 0, 0, 43, 46, 47, 48, 51, 52, 53, 100, - 42, 95, 0, 0, 74, 0, 106, 108, 104, 0, + 0, 0, 43, 46, 47, 48, 51, 52, 53, 101, + 42, 96, 0, 0, 74, 0, 107, 109, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 0, 0, - 99, 0, 0, 75, 107, 109, 110, 105, 0, 5, + 100, 0, 0, 75, 108, 110, 111, 106, 0, 5, 4, 0, 24, 0, 23, 0, 0, 0, 22, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 111, 25, + 0, 0, 0, 0, 0, 0, 0, 0, 112, 25, 0, 20, 19, 0, 0, 0, 0, 18, 0, 0, - 0, 45, 0, 0, 50, 0, 0, 26, 0, 130, - 129, 132, 131, 6, 0, 0, 0, 0, 0, 0, + 0, 45, 0, 0, 50, 0, 0, 26, 0, 131, + 130, 133, 132, 6, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 27, 21, 10, 14, 8, 0, 0, 0, 44, 0, 11, 15, 49, 0, 12, 16, 9, 0, 0, 0, 0, 13, 17, 0, 0, @@ -10458,18 +10458,18 @@ static char *yy_last_accepting_cpos; static yyconst yy_state_type yy_NUL_trans[317] = { 0, - 40, 40, 82, 82, 84, 84, 85, 85, 86, 86, - 87, 87, 88, 88, 89, 89, 91, 91, 92, 92, - 93, 93, 94, 94, 95, 95, 95, 95, 102, 102, - 95, 95, 105, 105, 95, 95, 95, 95, 0, 0, - 0, 0, 0, 109, 0, 0, 0, 0, 0, 0, + 40, 40, 81, 81, 83, 83, 84, 84, 85, 85, + 86, 86, 87, 87, 88, 88, 90, 90, 91, 91, + 92, 92, 93, 93, 94, 94, 94, 94, 101, 101, + 94, 94, 104, 104, 94, 94, 94, 94, 0, 0, + 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 152, 0, 153, 154, 155, 156, 157, 158, 0, - 160, 161, 162, 163, 0, 0, 0, 0, 0, 0, + 152, 0, 153, 154, 155, 156, 157, 158, 0, 160, + 161, 162, 163, 0, 0, 0, 0, 0, 0, 0, - 0, 174, 175, 176, 177, 178, 179, 0, 0, 0, + 174, 175, 176, 177, 178, 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -10564,10 +10564,10 @@ static int slur_var[2] = { 0, 0 }; static char slur_shift[2] = { '\0', '\0' }; static gregorio_note *slur_start[] = { NULL, NULL }; -typedef enum ledger_line_type { - LL_OVER = 0, - LL_UNDER = 1 -} ledger_line_type; +typedef enum sign_orientation { + SO_OVER = 0, + SO_UNDER = 1 +} sign_orientation; static __inline char pitch_letter_to_height(const char pitch) { char result = pitch - 'a' + LOWEST_PITCH; @@ -10599,12 +10599,12 @@ static __inline void lex_add_note(int i, gregorio_shape shape, char signs, tolower((unsigned char)gabc_notes_determination_text[i])), shape, signs, liquescentia, NULL, ¬es_lloc); - if (ledger_var[LL_OVER]) { + if (ledger_var[SO_OVER]) { current_note->supposed_high_ledger_line = true; current_note->explicit_high_ledger_line = true; } - if (ledger_var[LL_UNDER]) { + if (ledger_var[SO_UNDER]) { current_note->supposed_low_ledger_line = true; current_note->explicit_low_ledger_line = true; } @@ -10653,10 +10653,12 @@ static void add_h_episema(void) size = H_SMALL_RIGHT; break; default: - gregorio_messagef("gabc_notes_determination", VERBOSITY_ERROR, 0, - _("unrecognized horizontal episema modifier: %c"), - current); + /* not reachable unless there's a programming error */ + /* LCOV_EXCL_START */ + gregorio_fail2(gabc_notes_determination, + "unrecognized horizontal episema modifier: %c", current); break; + /* LCOV_EXCL_STOP */ }; } @@ -10692,7 +10694,7 @@ static void save_before_ledger(const char *const before_ledger) } } -static void add_static_ledger(const ledger_line_type type, const char *length) { +static void add_static_ledger(const sign_orientation type, const char *length) { gregorio_snprintf(tempstr, sizeof tempstr, "\\GreDrawAdditionalLine{%d}{%s}{%d}{%s}{0}{}", type, length + 1, before_ledger_type, before_ledger_length); @@ -10706,23 +10708,25 @@ static void add_static_ledger(const ledger_line_type type, const char *length) { GRE_TEXVERB_GLYPH, ¬es_lloc); } -static __inline const char *ledger_type_name(const ledger_line_type type) { +static __inline const char *sign_orientation_name(const sign_orientation type) { switch (type) { - case LL_OVER: + case SO_OVER: return "over"; - case LL_UNDER: + case SO_UNDER: return "under"; } - gregorio_messagef("ledger_type_name", VERBOSITY_ERROR, 0, - _("invalid ledger type %d"), type); - return NULL; + /* not reachable unless there's a programming error */ + /* LCOV_EXCL_START */ + gregorio_fail2(sign_orientation_name, "invalid ledger type %d", type); + return ""; + /* LCOV_EXCL_STOP */ } -static void add_variable_ledger(const ledger_line_type type, +static void add_variable_ledger(const sign_orientation type, const char *after_ledger) { if (ledger_var[type]) { - const char *const typename = ledger_type_name(type); + const char *const typename = sign_orientation_name(type); gregorio_messagef("add_variable_ledger", VERBOSITY_ERROR, 0, _("variable %s-staff ledger line without termination of " "previous %s-staff ledger line"), typename, typename); @@ -10761,10 +10765,10 @@ static void add_variable_ledger(const ledger_line_type type, } } -static void end_variable_ledger(const ledger_line_type type) +static void end_variable_ledger(const sign_orientation type) { if (!ledger_var[type]) { - const char *const typename = ledger_type_name(type); + const char *const typename = sign_orientation_name(type); gregorio_messagef("end_variable_ledger", VERBOSITY_ERROR, 0, _("variable %s-staff ledger line termination without variable " "%s-staff ledger line start"), typename, typename); @@ -10794,7 +10798,7 @@ static __inline gregorio_bar parse_dominican_bar(char bar) bar -= '0'; if (bar < 1 || bar > (2 * (staff_lines - 1))) { gregorio_messagef("parse_dominican_line", VERBOSITY_ERROR, 0, - _("invalid dominican bar for %u lines: ;%d"), + _("invalid Dominican bar for %u lines: ;%d"), (unsigned int)staff_lines, (int)bar); } @@ -10816,10 +10820,11 @@ static __inline gregorio_bar parse_dominican_bar(char bar) case 8: return B_DIVISIO_MINOR_D8; } - - gregorio_messagef("check_dominican_line", VERBOSITY_ERROR, 0, - _("invalid dominican bar: %d"), (int)bar); + /* not reachable unless there's a programming error */ + /* LCOV_EXCL_START */ + gregorio_fail2(check_dominican_line, "invalid dominican bar: %d", (int)bar); return B_NO_BAR; + /* LCOV_EXCL_STOP */ } static __inline gregorio_clef letter_to_clef(char letter) @@ -10830,15 +10835,21 @@ static __inline gregorio_clef letter_to_clef(char letter) case 'f': return CLEF_F; } - gregorio_messagef("letter_to_clef", VERBOSITY_ERROR, 0, - _("invalid clef: %c"), letter); + /* not reachable unless there's a programming error */ + /* LCOV_EXCL_START */ + gregorio_fail2(letter_to_clef, "invalid clef: %c", letter); return CLEF_C; + /* LCOV_EXCL_STOP */ } +/* this assertion should only fail if the lex rules are incorrect */ static __inline void slur_assert(char *fn, bool test) { if (!test) { + /* not reachable unless there's a programming error */ + /* LCOV_EXCL_START */ gregorio_message(_("invalid slur text"), fn, VERBOSITY_FATAL, 0); exit(1); + /* LCOV_EXCL_STOP */ } } @@ -10881,7 +10892,7 @@ static void parse_slur(int direction) gregorio_add_texverb_to_note(current_note, gregorio_strdup(tempstr)); } -static void start_var_slur(int index) +static void start_var_slur(const sign_orientation index) { if (!current_note || current_note->type != GRE_NOTE) { gregorio_message( @@ -10891,9 +10902,9 @@ static void start_var_slur(int index) } if (slur_var[index]) { - gregorio_message( - _("variable slur without termination of previous slur"), - "start_var_slur", VERBOSITY_ERROR, 0); + gregorio_messagef("start_var_slur", VERBOSITY_ERROR, 0, + _("variable %s-note slur without termination of previous slur"), + sign_orientation_name(index)); return; } @@ -10902,7 +10913,7 @@ static void start_var_slur(int index) slur_start[index] = current_note; } -static void end_var_slur(int direction, int index) +static void end_var_slur(const int direction, const sign_orientation index) { char shift; @@ -10914,8 +10925,9 @@ static void end_var_slur(int direction, int index) } if (!slur_var[index] || !slur_shift[index] || !slur_start[index]) { - gregorio_message(_("variable slur end without variable slur start"), - "end_var_slur", VERBOSITY_ERROR, 0); + gregorio_messagef("end_var_slur", VERBOSITY_ERROR, 0, + _("variable %s-note slur end without start"), + sign_orientation_name(index)); return; } @@ -10940,6 +10952,36 @@ static void end_var_slur(int direction, int index) slur_start[index] = NULL; } +void gabc_det_notes_finish(void) +{ + sign_orientation orientation; + if (overbrace_var) { + gregorio_message(_("unclosed variable over-staff brace"), + "gabc_det_notes_finish", VERBOSITY_ERROR, 0); + overbrace_var = 0; + } + if (underbrace_var) { + gregorio_message(_("unclosed variable under-staff brace"), + "gabc_det_notes_finish", VERBOSITY_ERROR, 0); + underbrace_var = 0; + } + for (orientation = SO_OVER; orientation <= SO_UNDER; ++orientation) { + const char *name = sign_orientation_name(orientation); + if (ledger_var[orientation]) { + gregorio_messagef("gabc_det_notes_finish", VERBOSITY_ERROR, 0, + _("unclosed variable %s-staff ledger line"), name); + ledger_var[orientation] = 0; + } + if (slur_var[orientation]) { + gregorio_messagef("gabc_det_notes_finish", VERBOSITY_ERROR, 0, + _("unclosed variable %s-note slur"), name); + slur_var[orientation] = 0; + slur_shift[orientation] = '\0'; + slur_start[orientation] = NULL; + } + } +} + @@ -10956,7 +10998,7 @@ static void end_var_slur(int direction, int index) -#line 10960 "gabc/gabc-notes-determination-l.c" +#line 11002 "gabc/gabc-notes-determination-l.c" #define INITIAL 0 #define texverbnote 1 @@ -11185,9 +11227,9 @@ YY_DECL } { -#line 468 "gabc/gabc-notes-determination.l" +#line 510 "gabc/gabc-notes-determination.l" -#line 11191 "gabc/gabc-notes-determination-l.c" +#line 11233 "gabc/gabc-notes-determination-l.c" while ( 1 ) /* loops until end-of-file is reached */ { @@ -11234,7 +11276,7 @@ do_action: /* This label is used only to access EOF actions. */ case 1: YY_RULE_SETUP -#line 469 "gabc/gabc-notes-determination.l" +#line 511 "gabc/gabc-notes-determination.l" { BEGIN(comments); } @@ -11242,35 +11284,35 @@ YY_RULE_SETUP case 2: /* rule 2 can match eol */ YY_RULE_SETUP -#line 472 "gabc/gabc-notes-determination.l" +#line 514 "gabc/gabc-notes-determination.l" { BEGIN(INITIAL); } YY_BREAK case 3: YY_RULE_SETUP -#line 475 "gabc/gabc-notes-determination.l" +#line 517 "gabc/gabc-notes-determination.l" { /* ignored */ } YY_BREAK case 4: YY_RULE_SETUP -#line 478 "gabc/gabc-notes-determination.l" +#line 520 "gabc/gabc-notes-determination.l" { BEGIN(choralsign); } YY_BREAK case 5: YY_RULE_SETUP -#line 481 "gabc/gabc-notes-determination.l" +#line 523 "gabc/gabc-notes-determination.l" { BEGIN(choralnabc); } YY_BREAK case 6: YY_RULE_SETUP -#line 484 "gabc/gabc-notes-determination.l" +#line 526 "gabc/gabc-notes-determination.l" { char_for_brace = gabc_notes_determination_text[4]-'0'; BEGIN(overbrace); @@ -11278,7 +11320,7 @@ YY_RULE_SETUP YY_BREAK case 7: YY_RULE_SETUP -#line 488 "gabc/gabc-notes-determination.l" +#line 530 "gabc/gabc-notes-determination.l" { char_for_brace = gabc_notes_determination_text[4]-'0'; BEGIN(underbrace); @@ -11286,7 +11328,7 @@ YY_RULE_SETUP YY_BREAK case 8: YY_RULE_SETUP -#line 492 "gabc/gabc-notes-determination.l" +#line 534 "gabc/gabc-notes-determination.l" { char_for_brace = gabc_notes_determination_text[5]-'0'; BEGIN(overcurlybrace); @@ -11294,7 +11336,7 @@ YY_RULE_SETUP YY_BREAK case 9: YY_RULE_SETUP -#line 496 "gabc/gabc-notes-determination.l" +#line 538 "gabc/gabc-notes-determination.l" { char_for_brace = gabc_notes_determination_text[6]-'0'; BEGIN(overcurlyaccentusbrace); @@ -11302,7 +11344,7 @@ YY_RULE_SETUP YY_BREAK case 10: YY_RULE_SETUP -#line 500 "gabc/gabc-notes-determination.l" +#line 542 "gabc/gabc-notes-determination.l" { if (overbrace_var) { gregorio_messagef("gabc_notes_determination", VERBOSITY_ERROR, 0, @@ -11322,7 +11364,7 @@ YY_RULE_SETUP YY_BREAK case 11: YY_RULE_SETUP -#line 516 "gabc/gabc-notes-determination.l" +#line 558 "gabc/gabc-notes-determination.l" { if (underbrace_var) { gregorio_messagef("gabc_notes_determination", VERBOSITY_ERROR, 0, @@ -11341,7 +11383,7 @@ YY_RULE_SETUP YY_BREAK case 12: YY_RULE_SETUP -#line 531 "gabc/gabc-notes-determination.l" +#line 573 "gabc/gabc-notes-determination.l" { if (overbrace_var) { gregorio_messagef("gabc_notes_determination", VERBOSITY_ERROR, 0, @@ -11361,7 +11403,7 @@ YY_RULE_SETUP YY_BREAK case 13: YY_RULE_SETUP -#line 547 "gabc/gabc-notes-determination.l" +#line 589 "gabc/gabc-notes-determination.l" { if (overbrace_var) { gregorio_messagef("gabc_notes_determination", VERBOSITY_ERROR, 0, @@ -11381,7 +11423,7 @@ YY_RULE_SETUP YY_BREAK case 14: YY_RULE_SETUP -#line 563 "gabc/gabc-notes-determination.l" +#line 605 "gabc/gabc-notes-determination.l" { if (!overbrace_var) { gregorio_messagef("gabc_notes_determination", VERBOSITY_ERROR, 0, @@ -11404,7 +11446,7 @@ YY_RULE_SETUP YY_BREAK case 15: YY_RULE_SETUP -#line 582 "gabc/gabc-notes-determination.l" +#line 624 "gabc/gabc-notes-determination.l" { if (!underbrace_var) { gregorio_messagef("gabc_notes_determination", VERBOSITY_ERROR, 0, @@ -11422,7 +11464,7 @@ YY_RULE_SETUP YY_BREAK case 16: YY_RULE_SETUP -#line 596 "gabc/gabc-notes-determination.l" +#line 638 "gabc/gabc-notes-determination.l" { if (!overbrace_var) { gregorio_messagef("gabc_notes_determination", VERBOSITY_ERROR, 0, @@ -11445,7 +11487,7 @@ YY_RULE_SETUP YY_BREAK case 17: YY_RULE_SETUP -#line 615 "gabc/gabc-notes-determination.l" +#line 657 "gabc/gabc-notes-determination.l" { if (!overbrace_var) { gregorio_messagef("gabc_notes_determination", VERBOSITY_ERROR, 0, @@ -11468,7 +11510,7 @@ YY_RULE_SETUP YY_BREAK case 18: YY_RULE_SETUP -#line 634 "gabc/gabc-notes-determination.l" +#line 676 "gabc/gabc-notes-determination.l" { if (notesmacros[gabc_notes_determination_text[3]-'0']) { gregorio_add_texverb_to_note(current_note, @@ -11478,7 +11520,7 @@ YY_RULE_SETUP YY_BREAK case 19: YY_RULE_SETUP -#line 640 "gabc/gabc-notes-determination.l" +#line 682 "gabc/gabc-notes-determination.l" { if (notesmacros[gabc_notes_determination_text[3]-'0']) { gregorio_add_texverb_as_note(¤t_note, @@ -11489,7 +11531,7 @@ YY_RULE_SETUP YY_BREAK case 20: YY_RULE_SETUP -#line 647 "gabc/gabc-notes-determination.l" +#line 689 "gabc/gabc-notes-determination.l" { if (notesmacros[gabc_notes_determination_text[3]-'0']) { gregorio_add_texverb_as_note(¤t_note, @@ -11500,7 +11542,7 @@ YY_RULE_SETUP YY_BREAK case 21: YY_RULE_SETUP -#line 654 "gabc/gabc-notes-determination.l" +#line 696 "gabc/gabc-notes-determination.l" { if (notesmacros[gabc_notes_determination_text[5]-'0']) { gregorio_add_texverb_as_note(¤t_note, @@ -11511,56 +11553,56 @@ YY_RULE_SETUP YY_BREAK case 22: YY_RULE_SETUP -#line 661 "gabc/gabc-notes-determination.l" +#line 703 "gabc/gabc-notes-determination.l" { BEGIN(texverbnote); } YY_BREAK case 23: YY_RULE_SETUP -#line 664 "gabc/gabc-notes-determination.l" +#line 706 "gabc/gabc-notes-determination.l" { BEGIN(texverbglyph); } YY_BREAK case 24: YY_RULE_SETUP -#line 667 "gabc/gabc-notes-determination.l" +#line 709 "gabc/gabc-notes-determination.l" { BEGIN(texverbelement); } YY_BREAK case 25: YY_RULE_SETUP -#line 670 "gabc/gabc-notes-determination.l" +#line 712 "gabc/gabc-notes-determination.l" { BEGIN(alt); } YY_BREAK case 26: YY_RULE_SETUP -#line 673 "gabc/gabc-notes-determination.l" +#line 715 "gabc/gabc-notes-determination.l" { gregorio_add_nlba_as_note(¤t_note, NLBA_BEGINNING, ¬es_lloc); } YY_BREAK case 27: YY_RULE_SETUP -#line 676 "gabc/gabc-notes-determination.l" +#line 718 "gabc/gabc-notes-determination.l" { gregorio_add_nlba_as_note(¤t_note, NLBA_END, ¬es_lloc); } YY_BREAK case 28: YY_RULE_SETUP -#line 679 "gabc/gabc-notes-determination.l" +#line 721 "gabc/gabc-notes-determination.l" { gregorio_start_autofuse(¤t_note, ¬es_lloc); } YY_BREAK case 29: YY_RULE_SETUP -#line 682 "gabc/gabc-notes-determination.l" +#line 724 "gabc/gabc-notes-determination.l" { gregorio_end_autofuse(¤t_note, ¬es_lloc); } @@ -11568,7 +11610,7 @@ YY_RULE_SETUP case 30: /* rule 30 can match eol */ YY_RULE_SETUP -#line 685 "gabc/gabc-notes-determination.l" +#line 727 "gabc/gabc-notes-determination.l" { gregorio_snprintf(tempstr, sizeof tempstr, "\\GreOverBrace{%s}{0pt}{0pt}{%d}", @@ -11579,7 +11621,7 @@ YY_RULE_SETUP case 31: /* rule 31 can match eol */ YY_RULE_SETUP -#line 691 "gabc/gabc-notes-determination.l" +#line 733 "gabc/gabc-notes-determination.l" { gregorio_snprintf(tempstr, sizeof tempstr, "\\GreUnderBrace{%s}{0pt}{0pt}{%d}", @@ -11590,7 +11632,7 @@ YY_RULE_SETUP case 32: /* rule 32 can match eol */ YY_RULE_SETUP -#line 697 "gabc/gabc-notes-determination.l" +#line 739 "gabc/gabc-notes-determination.l" { gregorio_snprintf(tempstr, sizeof tempstr, "\\GreOverCurlyBrace{%s}{0pt}{0pt}{%d}{0}", @@ -11601,7 +11643,7 @@ YY_RULE_SETUP case 33: /* rule 33 can match eol */ YY_RULE_SETUP -#line 703 "gabc/gabc-notes-determination.l" +#line 745 "gabc/gabc-notes-determination.l" { gregorio_snprintf(tempstr, sizeof tempstr, "\\GreOverCurlyBrace{%s}{0pt}{0pt}{%d}{1}", @@ -11612,7 +11654,7 @@ YY_RULE_SETUP case 34: /* rule 34 can match eol */ YY_RULE_SETUP -#line 709 "gabc/gabc-notes-determination.l" +#line 751 "gabc/gabc-notes-determination.l" { gregorio_add_cs_to_note(¤t_note, gregorio_strdup(gabc_notes_determination_text), false); @@ -11621,7 +11663,7 @@ YY_RULE_SETUP case 35: /* rule 35 can match eol */ YY_RULE_SETUP -#line 713 "gabc/gabc-notes-determination.l" +#line 755 "gabc/gabc-notes-determination.l" { gregorio_add_cs_to_note(¤t_note, gregorio_strdup(gabc_notes_determination_text), true); @@ -11630,7 +11672,7 @@ YY_RULE_SETUP case 36: /* rule 36 can match eol */ YY_RULE_SETUP -#line 717 "gabc/gabc-notes-determination.l" +#line 759 "gabc/gabc-notes-determination.l" { gregorio_add_texverb_to_note(current_note, gregorio_strdup(gabc_notes_determination_text)); @@ -11639,7 +11681,7 @@ YY_RULE_SETUP case 37: /* rule 37 can match eol */ YY_RULE_SETUP -#line 721 "gabc/gabc-notes-determination.l" +#line 763 "gabc/gabc-notes-determination.l" { gregorio_add_texverb_as_note(¤t_note, gregorio_strdup(gabc_notes_determination_text), @@ -11649,7 +11691,7 @@ YY_RULE_SETUP case 38: /* rule 38 can match eol */ YY_RULE_SETUP -#line 726 "gabc/gabc-notes-determination.l" +#line 768 "gabc/gabc-notes-determination.l" { gregorio_add_texverb_as_note(¤t_note, gregorio_strdup(gabc_notes_determination_text), @@ -11659,7 +11701,7 @@ YY_RULE_SETUP case 39: /* rule 39 can match eol */ YY_RULE_SETUP -#line 731 "gabc/gabc-notes-determination.l" +#line 773 "gabc/gabc-notes-determination.l" { gregorio_add_texverb_as_note(¤t_note, gregorio_strdup(gabc_notes_determination_text), GRE_ALT, @@ -11668,7 +11710,7 @@ YY_RULE_SETUP YY_BREAK case 40: YY_RULE_SETUP -#line 736 "gabc/gabc-notes-determination.l" +#line 778 "gabc/gabc-notes-determination.l" { BEGIN(space); } @@ -11678,7 +11720,7 @@ case 41: (yy_c_buf_p) = yy_cp -= 1; YY_DO_BEFORE_ACTION; /* set up gabc_notes_determination_text again */ YY_RULE_SETUP -#line 739 "gabc/gabc-notes-determination.l" +#line 781 "gabc/gabc-notes-determination.l" { gregorio_add_space_as_note(¤t_note, SP_AD_HOC_SPACE, gregorio_strdup(gabc_notes_determination_text), ¬es_lloc); @@ -11686,7 +11728,7 @@ YY_RULE_SETUP YY_BREAK case 42: YY_RULE_SETUP -#line 743 "gabc/gabc-notes-determination.l" +#line 785 "gabc/gabc-notes-determination.l" { BEGIN(nbspace); } @@ -11696,7 +11738,7 @@ case 43: (yy_c_buf_p) = yy_cp -= 1; YY_DO_BEFORE_ACTION; /* set up gabc_notes_determination_text again */ YY_RULE_SETUP -#line 746 "gabc/gabc-notes-determination.l" +#line 788 "gabc/gabc-notes-determination.l" { gregorio_add_space_as_note(¤t_note, SP_AD_HOC_SPACE_NB, gregorio_strdup(gabc_notes_determination_text), ¬es_lloc); @@ -11704,14 +11746,14 @@ YY_RULE_SETUP YY_BREAK case 44: YY_RULE_SETUP -#line 750 "gabc/gabc-notes-determination.l" +#line 792 "gabc/gabc-notes-determination.l" { - end_variable_ledger(LL_OVER); + end_variable_ledger(SO_OVER); } YY_BREAK case 45: YY_RULE_SETUP -#line 753 "gabc/gabc-notes-determination.l" +#line 795 "gabc/gabc-notes-determination.l" { BEGIN(overledger); } @@ -11719,7 +11761,7 @@ YY_RULE_SETUP case 46: /* rule 46 can match eol */ YY_RULE_SETUP -#line 756 "gabc/gabc-notes-determination.l" +#line 798 "gabc/gabc-notes-determination.l" { save_before_ledger(gabc_notes_determination_text); BEGIN(overledger2); @@ -11728,31 +11770,31 @@ YY_RULE_SETUP case 47: /* rule 47 can match eol */ YY_RULE_SETUP -#line 760 "gabc/gabc-notes-determination.l" +#line 802 "gabc/gabc-notes-determination.l" { - add_static_ledger(LL_OVER, gabc_notes_determination_text); + add_static_ledger(SO_OVER, gabc_notes_determination_text); BEGIN(endledger); } YY_BREAK case 48: /* rule 48 can match eol */ YY_RULE_SETUP -#line 764 "gabc/gabc-notes-determination.l" +#line 806 "gabc/gabc-notes-determination.l" { - add_variable_ledger(LL_OVER, gabc_notes_determination_text); + add_variable_ledger(SO_OVER, gabc_notes_determination_text); BEGIN(endledger); } YY_BREAK case 49: YY_RULE_SETUP -#line 768 "gabc/gabc-notes-determination.l" +#line 810 "gabc/gabc-notes-determination.l" { - end_variable_ledger(LL_UNDER); + end_variable_ledger(SO_UNDER); } YY_BREAK case 50: YY_RULE_SETUP -#line 771 "gabc/gabc-notes-determination.l" +#line 813 "gabc/gabc-notes-determination.l" { BEGIN(underledger); } @@ -11760,7 +11802,7 @@ YY_RULE_SETUP case 51: /* rule 51 can match eol */ YY_RULE_SETUP -#line 774 "gabc/gabc-notes-determination.l" +#line 816 "gabc/gabc-notes-determination.l" { save_before_ledger(gabc_notes_determination_text); BEGIN(underledger2); @@ -11769,24 +11811,24 @@ YY_RULE_SETUP case 52: /* rule 52 can match eol */ YY_RULE_SETUP -#line 778 "gabc/gabc-notes-determination.l" +#line 820 "gabc/gabc-notes-determination.l" { - add_static_ledger(LL_UNDER, gabc_notes_determination_text); + add_static_ledger(SO_UNDER, gabc_notes_determination_text); BEGIN(endledger); } YY_BREAK case 53: /* rule 53 can match eol */ YY_RULE_SETUP -#line 782 "gabc/gabc-notes-determination.l" +#line 824 "gabc/gabc-notes-determination.l" { - add_variable_ledger(LL_UNDER, gabc_notes_determination_text); + add_variable_ledger(SO_UNDER, gabc_notes_determination_text); BEGIN(endledger); } YY_BREAK case 54: YY_RULE_SETUP -#line 786 "gabc/gabc-notes-determination.l" +#line 828 "gabc/gabc-notes-determination.l" { BEGIN(INITIAL); } @@ -11794,50 +11836,50 @@ YY_RULE_SETUP case 55: /* rule 55 can match eol */ YY_RULE_SETUP -#line 789 "gabc/gabc-notes-determination.l" +#line 831 "gabc/gabc-notes-determination.l" { parse_slur(1); } YY_BREAK case 56: YY_RULE_SETUP -#line 792 "gabc/gabc-notes-determination.l" +#line 834 "gabc/gabc-notes-determination.l" { - start_var_slur(0); + start_var_slur(SO_OVER); } YY_BREAK case 57: YY_RULE_SETUP -#line 795 "gabc/gabc-notes-determination.l" +#line 837 "gabc/gabc-notes-determination.l" { - end_var_slur(1, 0); + end_var_slur(1, SO_OVER); } YY_BREAK case 58: /* rule 58 can match eol */ YY_RULE_SETUP -#line 798 "gabc/gabc-notes-determination.l" +#line 840 "gabc/gabc-notes-determination.l" { parse_slur(-1); } YY_BREAK case 59: YY_RULE_SETUP -#line 801 "gabc/gabc-notes-determination.l" +#line 843 "gabc/gabc-notes-determination.l" { - start_var_slur(1); + start_var_slur(SO_UNDER); } YY_BREAK case 60: YY_RULE_SETUP -#line 804 "gabc/gabc-notes-determination.l" +#line 846 "gabc/gabc-notes-determination.l" { - end_var_slur(-1, 1); + end_var_slur(-1, SO_UNDER); } YY_BREAK case 61: YY_RULE_SETUP -#line 807 "gabc/gabc-notes-determination.l" +#line 849 "gabc/gabc-notes-determination.l" { gregorio_add_texverb_as_note(¤t_note, gregorio_strdup("\\hbox to 0pt{"), GRE_TEXVERB_ELEMENT, @@ -11846,7 +11888,7 @@ YY_RULE_SETUP YY_BREAK case 62: YY_RULE_SETUP -#line 812 "gabc/gabc-notes-determination.l" +#line 854 "gabc/gabc-notes-determination.l" { gregorio_add_texverb_as_note(¤t_note, gregorio_strdup("\\hss%\n}%\n\\GreNoBreak\\relax "), @@ -11855,7 +11897,7 @@ YY_RULE_SETUP YY_BREAK case 63: YY_RULE_SETUP -#line 817 "gabc/gabc-notes-determination.l" +#line 859 "gabc/gabc-notes-determination.l" { gregorio_add_manual_custos_as_note(¤t_note, pitch_letter_to_height(gabc_notes_determination_text[0]), @@ -11865,19 +11907,19 @@ YY_RULE_SETUP case 64: /* rule 64 can match eol */ YY_RULE_SETUP -#line 822 "gabc/gabc-notes-determination.l" +#line 864 "gabc/gabc-notes-determination.l" /* ignore ends of line and tabs */; YY_BREAK case 65: YY_RULE_SETUP -#line 823 "gabc/gabc-notes-determination.l" +#line 865 "gabc/gabc-notes-determination.l" { gregorio_add_custo_as_note(¤t_note, ¬es_lloc); } YY_BREAK case 66: YY_RULE_SETUP -#line 826 "gabc/gabc-notes-determination.l" +#line 868 "gabc/gabc-notes-determination.l" { gregorio_add_end_of_line_as_note(¤t_note, false, false, false, ¬es_lloc); @@ -11885,7 +11927,7 @@ YY_RULE_SETUP YY_BREAK case 67: YY_RULE_SETUP -#line 830 "gabc/gabc-notes-determination.l" +#line 872 "gabc/gabc-notes-determination.l" { gregorio_add_end_of_line_as_note(¤t_note, false, true, true, ¬es_lloc); @@ -11893,7 +11935,7 @@ YY_RULE_SETUP YY_BREAK case 68: YY_RULE_SETUP -#line 834 "gabc/gabc-notes-determination.l" +#line 876 "gabc/gabc-notes-determination.l" { gregorio_add_end_of_line_as_note(¤t_note, false, true, false, ¬es_lloc); @@ -11901,7 +11943,7 @@ YY_RULE_SETUP YY_BREAK case 69: YY_RULE_SETUP -#line 838 "gabc/gabc-notes-determination.l" +#line 880 "gabc/gabc-notes-determination.l" { gregorio_add_end_of_line_as_note(¤t_note, true, false, false, ¬es_lloc); @@ -11909,7 +11951,7 @@ YY_RULE_SETUP YY_BREAK case 70: YY_RULE_SETUP -#line 842 "gabc/gabc-notes-determination.l" +#line 884 "gabc/gabc-notes-determination.l" { gregorio_add_end_of_line_as_note(¤t_note, true, true, true, ¬es_lloc); @@ -11917,7 +11959,7 @@ YY_RULE_SETUP YY_BREAK case 71: YY_RULE_SETUP -#line 846 "gabc/gabc-notes-determination.l" +#line 888 "gabc/gabc-notes-determination.l" { gregorio_add_end_of_line_as_note(¤t_note, true, true, false, ¬es_lloc); @@ -11925,7 +11967,7 @@ YY_RULE_SETUP YY_BREAK case 72: YY_RULE_SETUP -#line 850 "gabc/gabc-notes-determination.l" +#line 892 "gabc/gabc-notes-determination.l" { gregorio_add_clef_as_note(¤t_note, letter_to_clef(gabc_notes_determination_text[0]), @@ -11935,7 +11977,7 @@ YY_RULE_SETUP YY_BREAK case 73: YY_RULE_SETUP -#line 856 "gabc/gabc-notes-determination.l" +#line 898 "gabc/gabc-notes-determination.l" { gregorio_add_clef_as_note(¤t_note, letter_to_clef(gabc_notes_determination_text[0]), @@ -11945,7 +11987,7 @@ YY_RULE_SETUP YY_BREAK case 74: YY_RULE_SETUP -#line 862 "gabc/gabc-notes-determination.l" +#line 904 "gabc/gabc-notes-determination.l" { gregorio_add_secondary_clef_to_note(current_note, letter_to_clef(gabc_notes_determination_text[1]), @@ -11954,7 +11996,7 @@ YY_RULE_SETUP YY_BREAK case 75: YY_RULE_SETUP -#line 867 "gabc/gabc-notes-determination.l" +#line 909 "gabc/gabc-notes-determination.l" { gregorio_add_secondary_clef_to_note(current_note, letter_to_clef(gabc_notes_determination_text[1]), @@ -11963,49 +12005,49 @@ YY_RULE_SETUP YY_BREAK case 76: YY_RULE_SETUP -#line 872 "gabc/gabc-notes-determination.l" +#line 914 "gabc/gabc-notes-determination.l" { add_bar_as_note(B_VIRGULA); } YY_BREAK case 77: YY_RULE_SETUP -#line 875 "gabc/gabc-notes-determination.l" +#line 917 "gabc/gabc-notes-determination.l" { add_bar_as_note(B_DIVISIO_MINIMA); } YY_BREAK case 78: YY_RULE_SETUP -#line 878 "gabc/gabc-notes-determination.l" +#line 920 "gabc/gabc-notes-determination.l" { add_bar_as_note(parse_dominican_bar(gabc_notes_determination_text[1])); } YY_BREAK case 79: YY_RULE_SETUP -#line 881 "gabc/gabc-notes-determination.l" +#line 923 "gabc/gabc-notes-determination.l" { add_bar_as_note(B_DIVISIO_MINOR); } YY_BREAK case 80: YY_RULE_SETUP -#line 884 "gabc/gabc-notes-determination.l" +#line 926 "gabc/gabc-notes-determination.l" { add_bar_as_note(B_DIVISIO_MAIOR); } YY_BREAK case 81: YY_RULE_SETUP -#line 887 "gabc/gabc-notes-determination.l" +#line 929 "gabc/gabc-notes-determination.l" { add_bar_as_note(B_DIVISIO_FINALIS); } YY_BREAK case 82: YY_RULE_SETUP -#line 890 "gabc/gabc-notes-determination.l" +#line 932 "gabc/gabc-notes-determination.l" { gregorio_change_shape(current_note, S_PUNCTUM_CAVUM, legacy_oriscus_orientation); @@ -12013,7 +12055,7 @@ YY_RULE_SETUP YY_BREAK case 83: YY_RULE_SETUP -#line 894 "gabc/gabc-notes-determination.l" +#line 936 "gabc/gabc-notes-determination.l" { gregorio_change_shape(current_note, S_LINEA_PUNCTUM, legacy_oriscus_orientation); @@ -12021,7 +12063,7 @@ YY_RULE_SETUP YY_BREAK case 84: YY_RULE_SETUP -#line 898 "gabc/gabc-notes-determination.l" +#line 940 "gabc/gabc-notes-determination.l" { gregorio_change_shape(current_note, S_LINEA_PUNCTUM_CAVUM, legacy_oriscus_orientation); @@ -12029,49 +12071,49 @@ YY_RULE_SETUP YY_BREAK case 85: YY_RULE_SETUP -#line 902 "gabc/gabc-notes-determination.l" +#line 944 "gabc/gabc-notes-determination.l" { gregorio_add_special_sign(current_note, _ACCENTUS); } YY_BREAK case 86: YY_RULE_SETUP -#line 905 "gabc/gabc-notes-determination.l" +#line 947 "gabc/gabc-notes-determination.l" { gregorio_add_special_sign(current_note, _ACCENTUS_REVERSUS); } YY_BREAK case 87: YY_RULE_SETUP -#line 908 "gabc/gabc-notes-determination.l" +#line 950 "gabc/gabc-notes-determination.l" { gregorio_add_special_sign(current_note, _CIRCULUS); } YY_BREAK case 88: YY_RULE_SETUP -#line 911 "gabc/gabc-notes-determination.l" +#line 953 "gabc/gabc-notes-determination.l" { gregorio_add_special_sign(current_note, _SEMI_CIRCULUS); } YY_BREAK case 89: YY_RULE_SETUP -#line 914 "gabc/gabc-notes-determination.l" +#line 956 "gabc/gabc-notes-determination.l" { gregorio_add_special_sign(current_note, _SEMI_CIRCULUS_REVERSUS); } YY_BREAK case 90: YY_RULE_SETUP -#line 917 "gabc/gabc-notes-determination.l" +#line 959 "gabc/gabc-notes-determination.l" { gregorio_change_shape(current_note, S_FLAT, legacy_oriscus_orientation); } YY_BREAK case 91: YY_RULE_SETUP -#line 920 "gabc/gabc-notes-determination.l" +#line 962 "gabc/gabc-notes-determination.l" { gregorio_change_shape(current_note, S_SHARP, legacy_oriscus_orientation); @@ -12079,7 +12121,7 @@ YY_RULE_SETUP YY_BREAK case 92: YY_RULE_SETUP -#line 924 "gabc/gabc-notes-determination.l" +#line 966 "gabc/gabc-notes-determination.l" { gregorio_change_shape(current_note, S_NATURAL, legacy_oriscus_orientation); @@ -12087,7 +12129,7 @@ YY_RULE_SETUP YY_BREAK case 93: YY_RULE_SETUP -#line 928 "gabc/gabc-notes-determination.l" +#line 970 "gabc/gabc-notes-determination.l" { gregorio_add_space_as_note(¤t_note, SP_HALF_SPACE, NULL, ¬es_lloc); @@ -12095,332 +12137,340 @@ YY_RULE_SETUP YY_BREAK case 94: YY_RULE_SETUP -#line 932 "gabc/gabc-notes-determination.l" +#line 974 "gabc/gabc-notes-determination.l" { - gregorio_add_space_as_note(¤t_note, SP_NEUMATIC_CUT, NULL, + gregorio_add_space_as_note(¤t_note, SP_INTERGLYPH_SPACE, NULL, ¬es_lloc); } YY_BREAK case 95: +YY_RULE_SETUP +#line 978 "gabc/gabc-notes-determination.l" +{ + gregorio_add_space_as_note(¤t_note, SP_NEUMATIC_CUT, NULL, + ¬es_lloc); + } + YY_BREAK +case 96: *yy_cp = (yy_hold_char); /* undo effects of setting up gabc_notes_determination_text */ (yy_c_buf_p) = yy_cp = yy_bp + 1; YY_DO_BEFORE_ACTION; /* set up gabc_notes_determination_text again */ YY_RULE_SETUP -#line 936 "gabc/gabc-notes-determination.l" +#line 982 "gabc/gabc-notes-determination.l" { gregorio_add_space_as_note(¤t_note, SP_NEUMATIC_CUT, NULL, ¬es_lloc); } YY_BREAK -case 96: +case 97: YY_RULE_SETUP -#line 940 "gabc/gabc-notes-determination.l" +#line 986 "gabc/gabc-notes-determination.l" { gregorio_add_space_as_note(¤t_note, SP_LARGER_SPACE, NULL, ¬es_lloc); } YY_BREAK -case 97: +case 98: YY_RULE_SETUP -#line 944 "gabc/gabc-notes-determination.l" +#line 990 "gabc/gabc-notes-determination.l" { gregorio_add_space_as_note(¤t_note, SP_GLYPH_SPACE, NULL, ¬es_lloc); } YY_BREAK -case 98: +case 99: YY_RULE_SETUP -#line 948 "gabc/gabc-notes-determination.l" +#line 994 "gabc/gabc-notes-determination.l" { gregorio_add_space_as_note(¤t_note, SP_NEUMATIC_CUT_NB, NULL, ¬es_lloc); } YY_BREAK -case 99: +case 100: *yy_cp = (yy_hold_char); /* undo effects of setting up gabc_notes_determination_text */ (yy_c_buf_p) = yy_cp = yy_bp + 2; YY_DO_BEFORE_ACTION; /* set up gabc_notes_determination_text again */ YY_RULE_SETUP -#line 952 "gabc/gabc-notes-determination.l" +#line 998 "gabc/gabc-notes-determination.l" { gregorio_add_space_as_note(¤t_note, SP_NEUMATIC_CUT_NB, NULL, ¬es_lloc); } YY_BREAK -case 100: +case 101: YY_RULE_SETUP -#line 956 "gabc/gabc-notes-determination.l" +#line 1002 "gabc/gabc-notes-determination.l" { gregorio_add_space_as_note(¤t_note, SP_LARGER_SPACE_NB, NULL, ¬es_lloc); } YY_BREAK -case 101: +case 102: YY_RULE_SETUP -#line 960 "gabc/gabc-notes-determination.l" +#line 1006 "gabc/gabc-notes-determination.l" { gregorio_add_space_as_note(¤t_note, SP_GLYPH_SPACE_NB, NULL, ¬es_lloc); } YY_BREAK -case 102: -/* rule 102 can match eol */ +case 103: +/* rule 103 can match eol */ *yy_cp = (yy_hold_char); /* undo effects of setting up gabc_notes_determination_text */ YY_LINENO_REWIND_TO(yy_bp + 1); (yy_c_buf_p) = yy_cp = yy_bp + 1; YY_DO_BEFORE_ACTION; /* set up gabc_notes_determination_text again */ YY_RULE_SETUP -#line 964 "gabc/gabc-notes-determination.l" +#line 1010 "gabc/gabc-notes-determination.l" { gregorio_add_space_as_note(¤t_note, SP_ZERO_WIDTH, NULL, ¬es_lloc); } YY_BREAK -case 103: +case 104: YY_RULE_SETUP -#line 968 "gabc/gabc-notes-determination.l" +#line 1014 "gabc/gabc-notes-determination.l" { gregorio_change_shape(current_note, S_LINEA, legacy_oriscus_orientation); } YY_BREAK -case 104: +case 105: YY_RULE_SETUP -#line 972 "gabc/gabc-notes-determination.l" +#line 1018 "gabc/gabc-notes-determination.l" { lex_add_note(0, S_BIVIRGA, _NO_SIGN, L_NO_LIQUESCENTIA); } YY_BREAK -case 105: +case 106: YY_RULE_SETUP -#line 975 "gabc/gabc-notes-determination.l" +#line 1021 "gabc/gabc-notes-determination.l" { lex_add_note(0, S_TRIVIRGA, _NO_SIGN, L_NO_LIQUESCENTIA); } YY_BREAK -case 106: +case 107: YY_RULE_SETUP -#line 978 "gabc/gabc-notes-determination.l" +#line 1024 "gabc/gabc-notes-determination.l" { lex_add_note(0, S_BIVIRGA, _NO_SIGN, L_NO_LIQUESCENTIA); } YY_BREAK -case 107: +case 108: YY_RULE_SETUP -#line 981 "gabc/gabc-notes-determination.l" +#line 1027 "gabc/gabc-notes-determination.l" { lex_add_note(0, S_TRIVIRGA, _NO_SIGN, L_NO_LIQUESCENTIA); } YY_BREAK -case 108: +case 109: YY_RULE_SETUP -#line 984 "gabc/gabc-notes-determination.l" +#line 1030 "gabc/gabc-notes-determination.l" { lex_add_note(0, S_DISTROPHA, _NO_SIGN, L_NO_LIQUESCENTIA); } YY_BREAK -case 109: +case 110: YY_RULE_SETUP -#line 987 "gabc/gabc-notes-determination.l" +#line 1033 "gabc/gabc-notes-determination.l" { lex_add_note(0, S_DISTROPHA, _NO_SIGN, L_AUCTUS_ASCENDENS); } YY_BREAK -case 110: +case 111: YY_RULE_SETUP -#line 990 "gabc/gabc-notes-determination.l" +#line 1036 "gabc/gabc-notes-determination.l" { lex_add_note(0, S_TRISTROPHA, _NO_SIGN, L_NO_LIQUESCENTIA); } YY_BREAK -case 111: +case 112: YY_RULE_SETUP -#line 993 "gabc/gabc-notes-determination.l" +#line 1039 "gabc/gabc-notes-determination.l" { lex_add_note(0, S_TRISTROPHA, _NO_SIGN, L_AUCTUS_ASCENDENS); } YY_BREAK -case 112: +case 113: YY_RULE_SETUP -#line 996 "gabc/gabc-notes-determination.l" +#line 1042 "gabc/gabc-notes-determination.l" { lex_add_note(0, punctum(gabc_notes_determination_text[0]), _NO_SIGN, L_NO_LIQUESCENTIA); } YY_BREAK -case 113: +case 114: YY_RULE_SETUP -#line 1000 "gabc/gabc-notes-determination.l" +#line 1046 "gabc/gabc-notes-determination.l" { lex_add_note(1, punctum(gabc_notes_determination_text[1]), _NO_SIGN, L_INITIO_DEBILIS); } YY_BREAK -case 114: +case 115: YY_RULE_SETUP -#line 1004 "gabc/gabc-notes-determination.l" +#line 1050 "gabc/gabc-notes-determination.l" { lex_add_note(1, punctum(gabc_notes_determination_text[1]), _NO_SIGN, L_FUSED); } YY_BREAK -case 115: +case 116: YY_RULE_SETUP -#line 1008 "gabc/gabc-notes-determination.l" +#line 1054 "gabc/gabc-notes-determination.l" { add_sign(_V_EPISEMA); } YY_BREAK -case 116: +case 117: YY_RULE_SETUP -#line 1011 "gabc/gabc-notes-determination.l" +#line 1057 "gabc/gabc-notes-determination.l" { add_h_episema(); } YY_BREAK -case 117: +case 118: YY_RULE_SETUP -#line 1014 "gabc/gabc-notes-determination.l" +#line 1060 "gabc/gabc-notes-determination.l" { add_sign(_PUNCTUM_MORA); } YY_BREAK -case 118: +case 119: YY_RULE_SETUP -#line 1017 "gabc/gabc-notes-determination.l" +#line 1063 "gabc/gabc-notes-determination.l" { gregorio_add_tail_liquescentia(current_note, L_DEMINUTUS, legacy_oriscus_orientation); } YY_BREAK -case 119: +case 120: YY_RULE_SETUP -#line 1021 "gabc/gabc-notes-determination.l" +#line 1067 "gabc/gabc-notes-determination.l" { gregorio_add_tail_liquescentia(current_note, L_AUCTUS_DESCENDENS, legacy_oriscus_orientation); } YY_BREAK -case 120: +case 121: YY_RULE_SETUP -#line 1025 "gabc/gabc-notes-determination.l" +#line 1071 "gabc/gabc-notes-determination.l" { gregorio_add_tail_liquescentia(current_note, L_AUCTUS_ASCENDENS, legacy_oriscus_orientation); } YY_BREAK -case 121: +case 122: YY_RULE_SETUP -#line 1029 "gabc/gabc-notes-determination.l" +#line 1075 "gabc/gabc-notes-determination.l" { gregorio_change_shape(current_note, S_QUADRATUM, legacy_oriscus_orientation); } YY_BREAK -case 122: +case 123: YY_RULE_SETUP -#line 1033 "gabc/gabc-notes-determination.l" +#line 1079 "gabc/gabc-notes-determination.l" { - gregorio_change_shape(current_note, legacy_oriscus_orientation - ? S_ORISCUS_ASCENDENS : S_ORISCUS_UNDETERMINED, + gregorio_change_shape(current_note, S_ORISCUS_UNDETERMINED, legacy_oriscus_orientation); } YY_BREAK -case 123: +case 124: YY_RULE_SETUP -#line 1038 "gabc/gabc-notes-determination.l" +#line 1083 "gabc/gabc-notes-determination.l" { gregorio_change_shape(current_note, S_ORISCUS_SCAPUS, legacy_oriscus_orientation); } YY_BREAK -case 124: +case 125: YY_RULE_SETUP -#line 1042 "gabc/gabc-notes-determination.l" +#line 1087 "gabc/gabc-notes-determination.l" { gregorio_change_shape(current_note, S_QUILISMA, legacy_oriscus_orientation); } YY_BREAK -case 125: +case 126: YY_RULE_SETUP -#line 1046 "gabc/gabc-notes-determination.l" +#line 1091 "gabc/gabc-notes-determination.l" { gregorio_change_shape(current_note, S_QUILISMA_QUADRATUM, legacy_oriscus_orientation); } YY_BREAK -case 126: +case 127: YY_RULE_SETUP -#line 1050 "gabc/gabc-notes-determination.l" +#line 1095 "gabc/gabc-notes-determination.l" { gregorio_change_shape(current_note, S_VIRGA, legacy_oriscus_orientation); } YY_BREAK -case 127: +case 128: YY_RULE_SETUP -#line 1054 "gabc/gabc-notes-determination.l" +#line 1099 "gabc/gabc-notes-determination.l" { gregorio_change_shape(current_note, S_VIRGA_REVERSA, legacy_oriscus_orientation); } YY_BREAK -case 128: +case 129: YY_RULE_SETUP -#line 1058 "gabc/gabc-notes-determination.l" +#line 1103 "gabc/gabc-notes-determination.l" { gregorio_change_shape(current_note, S_STROPHA, legacy_oriscus_orientation); } YY_BREAK -case 129: +case 130: YY_RULE_SETUP -#line 1062 "gabc/gabc-notes-determination.l" +#line 1107 "gabc/gabc-notes-determination.l" { current_note->supposed_high_ledger_line = true; current_note->explicit_high_ledger_line = true; } YY_BREAK -case 130: +case 131: YY_RULE_SETUP -#line 1066 "gabc/gabc-notes-determination.l" +#line 1111 "gabc/gabc-notes-determination.l" { current_note->supposed_high_ledger_line = false; current_note->explicit_high_ledger_line = true; } YY_BREAK -case 131: +case 132: YY_RULE_SETUP -#line 1070 "gabc/gabc-notes-determination.l" +#line 1115 "gabc/gabc-notes-determination.l" { current_note->supposed_low_ledger_line = true; current_note->explicit_low_ledger_line = true; } YY_BREAK -case 132: +case 133: YY_RULE_SETUP -#line 1074 "gabc/gabc-notes-determination.l" +#line 1119 "gabc/gabc-notes-determination.l" { current_note->supposed_low_ledger_line = false; current_note->explicit_low_ledger_line = true; } YY_BREAK -case 133: +case 134: +/* rule 134 can match eol */ YY_RULE_SETUP -#line 1078 "gabc/gabc-notes-determination.l" +#line 1123 "gabc/gabc-notes-determination.l" { gregorio_messagef("det_notes_from_string", VERBOSITY_ERROR, 0, _("unrecognized character: \"%c\""), gabc_notes_determination_text[0]); } YY_BREAK -case 134: +case 135: YY_RULE_SETUP -#line 1084 "gabc/gabc-notes-determination.l" +#line 1129 "gabc/gabc-notes-determination.l" ECHO; YY_BREAK -#line 12424 "gabc/gabc-notes-determination-l.c" +#line 12474 "gabc/gabc-notes-determination-l.c" case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(texverbnote): case YY_STATE_EOF(texverbglyph): @@ -13399,7 +13449,7 @@ void gabc_notes_determination_free (void * ptr ) #define YYTABLES_NAME "yytables" -#line 1084 "gabc/gabc-notes-determination.l" +#line 1129 "gabc/gabc-notes-determination.l" diff --git a/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc-notes-determination.l b/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc-notes-determination.l index c3813238d43..d47eb1a7027 100644 --- a/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc-notes-determination.l +++ b/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc-notes-determination.l @@ -55,10 +55,10 @@ static int slur_var[2] = { 0, 0 }; static char slur_shift[2] = { '\0', '\0' }; static gregorio_note *slur_start[] = { NULL, NULL }; -typedef enum ledger_line_type { - LL_OVER = 0, - LL_UNDER = 1 -} ledger_line_type; +typedef enum sign_orientation { + SO_OVER = 0, + SO_UNDER = 1 +} sign_orientation; static __inline char pitch_letter_to_height(const char pitch) { char result = pitch - 'a' + LOWEST_PITCH; @@ -90,12 +90,12 @@ static __inline void lex_add_note(int i, gregorio_shape shape, char signs, tolower((unsigned char)gabc_notes_determination_text[i])), shape, signs, liquescentia, NULL, ¬es_lloc); - if (ledger_var[LL_OVER]) { + if (ledger_var[SO_OVER]) { current_note->supposed_high_ledger_line = true; current_note->explicit_high_ledger_line = true; } - if (ledger_var[LL_UNDER]) { + if (ledger_var[SO_UNDER]) { current_note->supposed_low_ledger_line = true; current_note->explicit_low_ledger_line = true; } @@ -144,10 +144,12 @@ static void add_h_episema(void) size = H_SMALL_RIGHT; break; default: - gregorio_messagef("gabc_notes_determination", VERBOSITY_ERROR, 0, - _("unrecognized horizontal episema modifier: %c"), - current); + /* not reachable unless there's a programming error */ + /* LCOV_EXCL_START */ + gregorio_fail2(gabc_notes_determination, + "unrecognized horizontal episema modifier: %c", current); break; + /* LCOV_EXCL_STOP */ }; } @@ -183,7 +185,7 @@ static void save_before_ledger(const char *const before_ledger) } } -static void add_static_ledger(const ledger_line_type type, const char *length) { +static void add_static_ledger(const sign_orientation type, const char *length) { gregorio_snprintf(tempstr, sizeof tempstr, "\\GreDrawAdditionalLine{%d}{%s}{%d}{%s}{0}{}", type, length + 1, before_ledger_type, before_ledger_length); @@ -197,23 +199,25 @@ static void add_static_ledger(const ledger_line_type type, const char *length) { GRE_TEXVERB_GLYPH, ¬es_lloc); } -static __inline const char *ledger_type_name(const ledger_line_type type) { +static __inline const char *sign_orientation_name(const sign_orientation type) { switch (type) { - case LL_OVER: + case SO_OVER: return "over"; - case LL_UNDER: + case SO_UNDER: return "under"; } - gregorio_messagef("ledger_type_name", VERBOSITY_ERROR, 0, - _("invalid ledger type %d"), type); - return NULL; + /* not reachable unless there's a programming error */ + /* LCOV_EXCL_START */ + gregorio_fail2(sign_orientation_name, "invalid ledger type %d", type); + return ""; + /* LCOV_EXCL_STOP */ } -static void add_variable_ledger(const ledger_line_type type, +static void add_variable_ledger(const sign_orientation type, const char *after_ledger) { if (ledger_var[type]) { - const char *const typename = ledger_type_name(type); + const char *const typename = sign_orientation_name(type); gregorio_messagef("add_variable_ledger", VERBOSITY_ERROR, 0, _("variable %s-staff ledger line without termination of " "previous %s-staff ledger line"), typename, typename); @@ -252,10 +256,10 @@ static void add_variable_ledger(const ledger_line_type type, } } -static void end_variable_ledger(const ledger_line_type type) +static void end_variable_ledger(const sign_orientation type) { if (!ledger_var[type]) { - const char *const typename = ledger_type_name(type); + const char *const typename = sign_orientation_name(type); gregorio_messagef("end_variable_ledger", VERBOSITY_ERROR, 0, _("variable %s-staff ledger line termination without variable " "%s-staff ledger line start"), typename, typename); @@ -285,7 +289,7 @@ static __inline gregorio_bar parse_dominican_bar(char bar) bar -= '0'; if (bar < 1 || bar > (2 * (staff_lines - 1))) { gregorio_messagef("parse_dominican_line", VERBOSITY_ERROR, 0, - _("invalid dominican bar for %u lines: ;%d"), + _("invalid Dominican bar for %u lines: ;%d"), (unsigned int)staff_lines, (int)bar); } @@ -307,10 +311,11 @@ static __inline gregorio_bar parse_dominican_bar(char bar) case 8: return B_DIVISIO_MINOR_D8; } - - gregorio_messagef("check_dominican_line", VERBOSITY_ERROR, 0, - _("invalid dominican bar: %d"), (int)bar); + /* not reachable unless there's a programming error */ + /* LCOV_EXCL_START */ + gregorio_fail2(check_dominican_line, "invalid dominican bar: %d", (int)bar); return B_NO_BAR; + /* LCOV_EXCL_STOP */ } static __inline gregorio_clef letter_to_clef(char letter) @@ -321,15 +326,21 @@ static __inline gregorio_clef letter_to_clef(char letter) case 'f': return CLEF_F; } - gregorio_messagef("letter_to_clef", VERBOSITY_ERROR, 0, - _("invalid clef: %c"), letter); + /* not reachable unless there's a programming error */ + /* LCOV_EXCL_START */ + gregorio_fail2(letter_to_clef, "invalid clef: %c", letter); return CLEF_C; + /* LCOV_EXCL_STOP */ } +/* this assertion should only fail if the lex rules are incorrect */ static __inline void slur_assert(char *fn, bool test) { if (!test) { + /* not reachable unless there's a programming error */ + /* LCOV_EXCL_START */ gregorio_message(_("invalid slur text"), fn, VERBOSITY_FATAL, 0); exit(1); + /* LCOV_EXCL_STOP */ } } @@ -372,7 +383,7 @@ static void parse_slur(int direction) gregorio_add_texverb_to_note(current_note, gregorio_strdup(tempstr)); } -static void start_var_slur(int index) +static void start_var_slur(const sign_orientation index) { if (!current_note || current_note->type != GRE_NOTE) { gregorio_message( @@ -382,9 +393,9 @@ static void start_var_slur(int index) } if (slur_var[index]) { - gregorio_message( - _("variable slur without termination of previous slur"), - "start_var_slur", VERBOSITY_ERROR, 0); + gregorio_messagef("start_var_slur", VERBOSITY_ERROR, 0, + _("variable %s-note slur without termination of previous slur"), + sign_orientation_name(index)); return; } @@ -393,7 +404,7 @@ static void start_var_slur(int index) slur_start[index] = current_note; } -static void end_var_slur(int direction, int index) +static void end_var_slur(const int direction, const sign_orientation index) { char shift; @@ -405,8 +416,9 @@ static void end_var_slur(int direction, int index) } if (!slur_var[index] || !slur_shift[index] || !slur_start[index]) { - gregorio_message(_("variable slur end without variable slur start"), - "end_var_slur", VERBOSITY_ERROR, 0); + gregorio_messagef("end_var_slur", VERBOSITY_ERROR, 0, + _("variable %s-note slur end without start"), + sign_orientation_name(index)); return; } @@ -431,6 +443,36 @@ static void end_var_slur(int direction, int index) slur_start[index] = NULL; } +void gabc_det_notes_finish(void) +{ + sign_orientation orientation; + if (overbrace_var) { + gregorio_message(_("unclosed variable over-staff brace"), + "gabc_det_notes_finish", VERBOSITY_ERROR, 0); + overbrace_var = 0; + } + if (underbrace_var) { + gregorio_message(_("unclosed variable under-staff brace"), + "gabc_det_notes_finish", VERBOSITY_ERROR, 0); + underbrace_var = 0; + } + for (orientation = SO_OVER; orientation <= SO_UNDER; ++orientation) { + const char *name = sign_orientation_name(orientation); + if (ledger_var[orientation]) { + gregorio_messagef("gabc_det_notes_finish", VERBOSITY_ERROR, 0, + _("unclosed variable %s-staff ledger line"), name); + ledger_var[orientation] = 0; + } + if (slur_var[orientation]) { + gregorio_messagef("gabc_det_notes_finish", VERBOSITY_ERROR, 0, + _("unclosed variable %s-note slur"), name); + slur_var[orientation] = 0; + slur_shift[orientation] = '\0'; + slur_start[orientation] = NULL; + } + } +} + %} %option stack @@ -748,7 +790,7 @@ static void end_var_slur(int direction, int index) gregorio_strdup(gabc_notes_determination_text), ¬es_lloc); } <INITIAL>\[oll:\}\] { - end_variable_ledger(LL_OVER); + end_variable_ledger(SO_OVER); } <INITIAL>\[oll: { BEGIN(overledger); @@ -758,15 +800,15 @@ static void end_var_slur(int direction, int index) BEGIN(overledger2); } <overledger2>;[^\]]+ { - add_static_ledger(LL_OVER, gabc_notes_determination_text); + add_static_ledger(SO_OVER, gabc_notes_determination_text); BEGIN(endledger); } <overledger2>\{[^\]]+ { - add_variable_ledger(LL_OVER, gabc_notes_determination_text); + add_variable_ledger(SO_OVER, gabc_notes_determination_text); BEGIN(endledger); } <INITIAL>\[ull:\}\] { - end_variable_ledger(LL_UNDER); + end_variable_ledger(SO_UNDER); } <INITIAL>\[ull: { BEGIN(underledger); @@ -776,11 +818,11 @@ static void end_var_slur(int direction, int index) BEGIN(underledger2); } <underledger2>;[^\]]+ { - add_static_ledger(LL_UNDER, gabc_notes_determination_text); + add_static_ledger(SO_UNDER, gabc_notes_determination_text); BEGIN(endledger); } <underledger2>\{[^\]]+ { - add_variable_ledger(LL_UNDER, gabc_notes_determination_text); + add_variable_ledger(SO_UNDER, gabc_notes_determination_text); BEGIN(endledger); } <texverbnote,texverbglyph,texverbelement,choralsign,choralnabc,alt,overcurlyaccentusbrace,overcurlybrace,overbrace,underbrace,space,nbspace,endledger>\] { @@ -790,19 +832,19 @@ static void end_var_slur(int direction, int index) parse_slur(1); } <INITIAL>\[oslur:[012]\{\] { - start_var_slur(0); + start_var_slur(SO_OVER); } <INITIAL>\[oslur:[012]\}\] { - end_var_slur(1, 0); + end_var_slur(1, SO_OVER); } <INITIAL>\[uslur:[012];[^,]+,[^\]]+\] { parse_slur(-1); } <INITIAL>\[uslur:[012]\{\] { - start_var_slur(1); + start_var_slur(SO_UNDER); } <INITIAL>\[uslur:[012]\}\] { - end_var_slur(-1, 1); + end_var_slur(-1, SO_UNDER); } \{ { gregorio_add_texverb_as_note(¤t_note, @@ -929,6 +971,10 @@ y { gregorio_add_space_as_note(¤t_note, SP_HALF_SPACE, NULL, ¬es_lloc); } +!?\/! { + gregorio_add_space_as_note(¤t_note, SP_INTERGLYPH_SPACE, NULL, + ¬es_lloc); + } \/ { gregorio_add_space_as_note(¤t_note, SP_NEUMATIC_CUT, NULL, ¬es_lloc); @@ -1031,8 +1077,7 @@ q { legacy_oriscus_orientation); } o { - gregorio_change_shape(current_note, legacy_oriscus_orientation - ? S_ORISCUS_ASCENDENS : S_ORISCUS_UNDETERMINED, + gregorio_change_shape(current_note, S_ORISCUS_UNDETERMINED, legacy_oriscus_orientation); } O { @@ -1075,7 +1120,7 @@ s { current_note->supposed_low_ledger_line = false; current_note->explicit_low_ledger_line = true; } -. { +.|\n { gregorio_messagef("det_notes_from_string", VERBOSITY_ERROR, 0, _("unrecognized character: \"%c\""), gabc_notes_determination_text[0]); diff --git a/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc-score-determination-l.c b/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc-score-determination-l.c index 03994f45487..c76c41a7205 100644 --- a/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc-score-determination-l.c +++ b/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc-score-determination-l.c @@ -393,42 +393,41 @@ struct yy_trans_info flex_int32_t yy_verify; flex_int32_t yy_nxt; }; -static yyconst flex_int32_t yy_accept[307] = +static yyconst flex_int32_t yy_accept[292] = { 0, 0, 1, 7, 7, 0, 0, 65, 65, 46, 46, - 52, 52, 49, 49, 5, 5, 57, 57, 71, 27, - 70, 27, 27, 24, 6, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 2, 2, 3, 3, 1, 7, - 7, 70, 28, 47, 64, 29, 53, 62, 63, 54, - 55, 65, 66, 68, 67, 46, 53, 52, 53, 49, - 48, 5, 4, 57, 53, 26, 0, 25, 0, 24, - 6, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 2, 1, 7, 7, 0, 7, 7, - 0, 7, 8, 8, 28, 0, 0, 0, 0, 0, - - 0, 0, 0, 0, 0, 0, 0, 65, 69, 46, - 0, 52, 0, 49, 48, 5, 4, 57, 0, 25, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 7, 0, 0, 0, 40, 38, - 0, 30, 0, 0, 0, 0, 0, 50, 61, 0, - 0, 0, 0, 0, 0, 0, 0, 24, 24, 0, - 24, 24, 24, 15, 24, 11, 24, 24, 24, 24, - 0, 0, 0, 59, 0, 42, 44, 34, 36, 41, - 39, 33, 0, 0, 0, 0, 51, 0, 24, 24, - 24, 0, 24, 24, 0, 0, 24, 24, 24, 24, - - 60, 0, 56, 0, 43, 45, 35, 37, 0, 24, - 19, 9, 24, 24, 24, 24, 24, 24, 24, 24, - 0, 0, 0, 31, 58, 24, 24, 24, 24, 24, - 24, 24, 0, 24, 24, 24, 32, 24, 24, 0, - 20, 24, 24, 24, 24, 0, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 18, 24, - 24, 24, 24, 22, 0, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 21, 24, 24, 24, 24, - 24, 24, 24, 24, 14, 24, 16, 24, 24, 24, - 13, 24, 24, 24, 24, 24, 24, 24, 12, 17, - - 10, 24, 24, 24, 23, 0 + 52, 52, 49, 49, 5, 5, 57, 57, 71, 25, + 69, 25, 23, 6, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 2, 2, 3, 3, 1, 7, 7, + 70, 26, 47, 64, 27, 53, 62, 63, 54, 55, + 65, 67, 66, 46, 53, 52, 53, 49, 48, 5, + 4, 57, 53, 0, 0, 23, 6, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, 2, 1, + 7, 7, 0, 7, 7, 0, 7, 8, 0, 26, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + 0, 0, 65, 68, 46, 0, 0, 52, 0, 49, + 48, 5, 4, 57, 0, 24, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 7, + 0, 0, 0, 38, 36, 42, 0, 30, 0, 0, + 0, 0, 0, 50, 61, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 23, 23, 0, 23, 23, 23, + 14, 23, 10, 23, 23, 23, 0, 0, 0, 59, + 0, 40, 44, 32, 34, 39, 37, 43, 31, 0, + 0, 0, 0, 51, 0, 23, 23, 23, 0, 23, + 23, 0, 0, 23, 23, 23, 60, 0, 56, 0, + + 41, 45, 33, 35, 0, 23, 18, 9, 23, 23, + 23, 23, 23, 23, 23, 0, 0, 0, 28, 58, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 29, 23, 23, 0, 19, 23, 23, 23, 0, 23, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 17, 23, 23, 23, 23, 21, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 20, 23, 23, 23, 23, + 23, 23, 23, 13, 23, 15, 23, 23, 12, 23, + 23, 23, 23, 23, 11, 16, 23, 23, 23, 22, + 0 + } ; static yyconst flex_int32_t yy_ec[256] = @@ -436,294 +435,280 @@ static yyconst flex_int32_t yy_ec[256] = 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 5, 1, 1, 6, 1, 7, 8, 1, 9, - 10, 1, 1, 1, 11, 1, 12, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 14, 15, 16, - 1, 17, 1, 1, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 19, 1, 20, 1, 18, 1, 21, 22, 23, 24, - - 25, 26, 27, 28, 29, 18, 18, 30, 31, 32, - 33, 34, 18, 35, 36, 37, 38, 39, 18, 18, - 40, 18, 41, 42, 43, 1, 1, 1, 1, 1, + 1, 5, 1, 1, 6, 1, 7, 1, 1, 8, + 9, 1, 1, 1, 10, 1, 11, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 13, 14, 15, + 1, 16, 1, 1, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 18, 1, 19, 1, 17, 1, 20, 21, 22, 23, + + 24, 25, 26, 27, 28, 17, 17, 29, 30, 31, + 32, 33, 17, 34, 35, 36, 37, 38, 17, 17, + 39, 17, 40, 41, 42, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 44, 1, 1, 1, - 45, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 43, 1, 1, 1, + 44, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 46, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 45, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } ; -static yyconst flex_int32_t yy_meta[47] = +static yyconst flex_int32_t yy_meta[46] = { 0, - 1, 1, 2, 3, 1, 1, 4, 5, 4, 5, - 6, 1, 7, 1, 8, 9, 1, 7, 4, 4, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 10, 5, 10, 1, 1, 1 + 1, 1, 2, 2, 1, 1, 3, 3, 4, 5, + 1, 6, 1, 7, 8, 1, 6, 3, 3, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 9, + 4, 9, 1, 1, 1 } ; -static yyconst flex_int32_t yy_base[329] = +static yyconst flex_int32_t yy_base[313] = { 0, - 0, 44, 49, 51, 84, 121, 50, 55, 33, 40, - 688, 687, 58, 64, 66, 68, 686, 685, 700, 705, - 705, 75, 688, 687, 692, 48, 62, 64, 66, 73, - 85, 88, 94, 96, 98, 107, 705, 109, 76, 120, - 135, 139, 0, 705, 705, 705, 153, 684, 705, 705, - 705, 0, 705, 142, 705, 0, 136, 0, 683, 0, - 111, 0, 148, 0, 682, 152, 156, 0, 0, 682, - 705, 138, 97, 142, 95, 155, 147, 156, 166, 162, - 158, 161, 160, 192, 154, 198, 200, 202, 677, 204, - 0, 206, 208, 705, 0, 191, 661, 673, 672, 650, - - 670, 656, 191, 648, 654, 666, 662, 0, 224, 0, - 208, 0, 642, 0, 229, 0, 231, 0, 659, 0, - 668, 209, 211, 667, 213, 227, 230, 236, 232, 237, - 238, 239, 241, 240, 662, 638, 645, 637, 705, 705, - 656, 705, 650, 654, 653, 652, 651, 705, 705, 650, - 649, 648, 231, 627, 633, 645, 631, 242, 245, 629, - 648, 248, 247, 647, 646, 645, 256, 257, 258, 260, - 638, 632, 636, 705, 631, 705, 705, 705, 705, 705, - 705, 705, 634, 633, 632, 631, 705, 610, 252, 259, - 261, 623, 271, 276, 260, 613, 277, 278, 616, 613, - - 705, 587, 705, 590, 705, 705, 705, 705, 581, 282, - 586, 583, 284, 279, 287, 289, 288, 291, 561, 290, - 542, 533, 429, 705, 705, 293, 294, 434, 285, 297, - 300, 295, 410, 430, 292, 302, 705, 296, 304, 404, - 428, 319, 321, 322, 323, 405, 324, 325, 327, 326, - 328, 329, 330, 331, 423, 335, 332, 337, 422, 340, - 341, 342, 344, 421, 392, 349, 352, 353, 355, 360, - 363, 368, 364, 369, 357, 419, 372, 373, 374, 380, - 381, 384, 385, 365, 417, 388, 416, 390, 392, 393, - 207, 394, 397, 396, 398, 403, 400, 407, 175, 172, - - 125, 408, 409, 415, 120, 705, 447, 457, 467, 477, - 487, 497, 507, 517, 522, 529, 539, 549, 559, 567, - 577, 585, 595, 605, 615, 625, 50, 635 + 0, 43, 48, 50, 82, 118, 39, 50, 41, 42, + 635, 634, 57, 62, 64, 66, 633, 632, 646, 651, + 651, 638, 634, 638, 48, 53, 83, 45, 84, 63, + 86, 64, 95, 68, 104, 651, 635, 66, 109, 115, + 131, 0, 651, 651, 651, 150, 630, 651, 651, 651, + 0, 136, 651, 0, 131, 0, 629, 0, 111, 0, + 117, 0, 628, 140, 0, 628, 651, 68, 117, 138, + 136, 122, 142, 139, 146, 149, 158, 144, 162, 139, + 188, 190, 192, 623, 194, 0, 196, 176, 208, 0, + 183, 607, 619, 618, 185, 617, 603, 183, 595, 601, + + 613, 609, 0, 215, 0, 202, 611, 0, 588, 0, + 224, 0, 228, 0, 605, 231, 614, 193, 219, 613, + 199, 179, 226, 92, 231, 230, 232, 234, 233, 608, + 584, 591, 583, 651, 651, 651, 602, 651, 596, 600, + 599, 598, 597, 651, 651, 596, 595, 594, 593, 223, + 572, 578, 590, 576, 237, 238, 574, 593, 241, 239, + 592, 591, 590, 240, 247, 249, 583, 577, 581, 651, + 576, 651, 651, 651, 651, 651, 651, 651, 651, 579, + 578, 577, 576, 651, 555, 245, 250, 251, 568, 262, + 265, 256, 560, 254, 578, 577, 651, 566, 651, 569, + + 651, 651, 651, 651, 566, 256, 564, 549, 267, 268, + 270, 273, 271, 277, 278, 528, 518, 511, 651, 651, + 279, 283, 511, 280, 284, 285, 288, 509, 290, 292, + 651, 296, 300, 377, 400, 301, 302, 305, 373, 304, + 307, 311, 313, 308, 317, 315, 314, 321, 322, 324, + 394, 323, 325, 326, 335, 392, 340, 333, 336, 343, + 344, 342, 346, 348, 347, 387, 349, 355, 352, 364, + 368, 367, 370, 385, 371, 382, 372, 374, 203, 375, + 376, 377, 380, 378, 165, 159, 381, 379, 384, 120, + 651, 415, 424, 433, 442, 451, 460, 469, 478, 483, + + 489, 498, 507, 516, 523, 532, 539, 548, 557, 566, + 69, 575 } ; -static yyconst flex_int32_t yy_def[329] = +static yyconst flex_int32_t yy_def[313] = { 0, - 306, 1, 307, 307, 308, 308, 309, 309, 310, 310, - 311, 311, 312, 312, 313, 313, 314, 314, 306, 306, - 306, 306, 306, 315, 306, 315, 315, 315, 315, 315, - 315, 315, 315, 315, 306, 306, 306, 306, 306, 316, - 317, 318, 319, 306, 306, 306, 306, 306, 306, 306, - 306, 320, 306, 306, 306, 321, 47, 322, 306, 323, - 306, 324, 306, 325, 306, 306, 306, 326, 327, 315, - 306, 315, 315, 315, 315, 315, 315, 315, 315, 315, - 315, 315, 315, 306, 306, 316, 317, 318, 317, 317, - 328, 318, 306, 306, 319, 306, 306, 306, 306, 306, - - 306, 306, 306, 306, 306, 306, 306, 320, 306, 321, - 306, 322, 306, 323, 306, 324, 306, 325, 306, 326, - 327, 315, 315, 315, 315, 315, 315, 315, 315, 315, - 315, 315, 315, 315, 328, 306, 306, 306, 306, 306, - 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, - 306, 306, 306, 306, 306, 306, 306, 315, 315, 327, - 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, - 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, - 306, 306, 306, 306, 306, 306, 306, 306, 315, 315, - 327, 327, 315, 315, 327, 327, 315, 315, 315, 315, - - 306, 306, 306, 306, 306, 306, 306, 306, 306, 315, - 315, 327, 327, 315, 315, 327, 327, 327, 315, 315, - 327, 327, 306, 306, 306, 315, 327, 315, 315, 327, - 327, 327, 327, 315, 327, 327, 306, 315, 327, 327, - 315, 327, 327, 327, 327, 327, 327, 327, 315, 327, - 327, 327, 327, 327, 327, 327, 327, 327, 315, 327, - 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, - 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, - 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, - 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, - - 327, 327, 327, 327, 327, 0, 306, 306, 306, 306, - 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, - 306, 306, 306, 306, 306, 306, 306, 306 + 291, 1, 292, 292, 293, 293, 294, 294, 295, 295, + 296, 296, 297, 297, 298, 298, 299, 299, 291, 291, + 291, 291, 300, 291, 300, 300, 300, 300, 300, 300, + 300, 300, 300, 291, 291, 291, 291, 291, 301, 302, + 303, 304, 291, 291, 291, 291, 291, 291, 291, 291, + 305, 291, 291, 306, 46, 307, 291, 308, 291, 309, + 291, 310, 291, 291, 311, 300, 291, 300, 300, 300, + 300, 300, 300, 300, 300, 300, 300, 300, 291, 291, + 301, 302, 303, 302, 302, 312, 303, 291, 291, 304, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + + 291, 291, 305, 291, 306, 291, 291, 307, 291, 308, + 291, 309, 291, 310, 291, 291, 311, 300, 300, 300, + 300, 300, 300, 300, 300, 300, 300, 300, 300, 312, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 300, 300, 311, 300, 300, 300, + 300, 300, 300, 300, 300, 300, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 300, 300, 311, 311, 300, + 300, 311, 311, 300, 300, 300, 291, 291, 291, 291, + + 291, 291, 291, 291, 291, 300, 300, 311, 311, 300, + 300, 311, 311, 311, 300, 311, 311, 291, 291, 291, + 300, 311, 300, 300, 311, 311, 311, 300, 311, 311, + 291, 300, 311, 311, 300, 311, 311, 311, 311, 311, + 311, 300, 311, 311, 311, 311, 311, 311, 311, 311, + 300, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 0, 291, 291, 291, 291, 291, 291, 291, 291, 291, + + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291 } ; -static yyconst flex_int32_t yy_nxt[752] = +static yyconst flex_int32_t yy_nxt[697] = { 0, 20, 20, 21, 20, 20, 20, 22, 20, 20, 20, - 23, 20, 24, 25, 20, 20, 20, 24, 20, 20, - 26, 24, 24, 27, 24, 24, 28, 24, 29, 30, - 31, 32, 33, 24, 24, 34, 24, 24, 24, 24, - 20, 20, 20, 20, 20, 20, 35, 36, 57, 37, - 38, 41, 41, 41, 41, 57, 121, 53, 69, 54, - 61, 61, 53, 42, 54, 42, 61, 61, 63, 63, - 63, 63, 69, 50, 69, 51, 69, 66, 66, 72, - 50, 67, 51, 69, 75, 73, 74, 39, 39, 39, - 44, 55, 45, 77, 46, 69, 55, 76, 69, 47, - - 84, 84, 48, 49, 69, 69, 69, 69, 79, 84, - 84, 66, 66, 115, 115, 67, 125, 78, 82, 85, - 85, 85, 87, 87, 50, 80, 51, 44, 81, 45, - 69, 46, 83, 123, 88, 69, 47, 90, 90, 48, - 49, 93, 93, 109, 109, 109, 109, 111, 69, 91, - 117, 117, 69, 94, 66, 66, 306, 69, 66, 66, - 306, 50, 67, 51, 96, 69, 69, 124, 69, 122, - 69, 69, 69, 97, 98, 99, 69, 100, 127, 128, - 134, 101, 69, 126, 102, 69, 132, 129, 103, 104, - 105, 106, 131, 133, 84, 84, 130, 85, 85, 85, - - 87, 87, 90, 90, 306, 306, 90, 90, 87, 87, - 93, 93, 88, 144, 91, 136, 306, 69, 91, 69, - 88, 69, 137, 69, 145, 109, 109, 109, 109, 150, - 151, 115, 115, 117, 117, 161, 152, 69, 159, 137, - 69, 158, 69, 153, 154, 155, 69, 69, 69, 69, - 69, 69, 69, 183, 165, 69, 163, 69, 69, 167, - 164, 166, 69, 162, 184, 170, 69, 69, 69, 69, - 69, 69, 210, 212, 168, 169, 193, 190, 189, 198, - 197, 69, 199, 216, 194, 200, 69, 69, 69, 69, - 217, 214, 69, 211, 69, 69, 215, 69, 69, 69, - - 69, 69, 69, 69, 69, 69, 69, 69, 228, 241, - 69, 219, 69, 229, 69, 220, 227, 230, 226, 232, - 231, 238, 242, 243, 247, 234, 244, 239, 249, 69, - 248, 69, 69, 69, 69, 69, 69, 69, 69, 69, - 69, 69, 69, 250, 252, 69, 254, 69, 255, 253, - 69, 69, 69, 262, 69, 263, 258, 257, 259, 69, - 260, 268, 69, 69, 261, 69, 264, 69, 269, 266, - 69, 267, 272, 69, 69, 69, 271, 274, 69, 69, - 270, 277, 69, 69, 69, 283, 275, 279, 276, 278, - 69, 69, 280, 282, 69, 69, 281, 285, 69, 284, - - 69, 291, 69, 69, 69, 286, 69, 69, 69, 288, - 69, 290, 293, 69, 287, 289, 298, 69, 69, 69, - 295, 297, 296, 300, 292, 69, 69, 69, 294, 69, - 273, 69, 69, 265, 299, 301, 303, 256, 69, 251, - 246, 304, 245, 302, 240, 237, 305, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 43, 43, 43, - 43, 43, 43, 43, 43, 43, 43, 52, 52, 52, - 52, 52, 52, 52, 52, 52, 52, 56, 56, 56, - 56, 56, 56, 56, 56, 56, 56, 58, 58, 58, - 58, 58, 58, 58, 58, 58, 58, 60, 60, 60, - - 60, 60, 60, 60, 60, 60, 60, 62, 62, 62, - 62, 62, 62, 62, 62, 62, 62, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 70, 70, 86, - 86, 86, 86, 86, 86, 86, 86, 86, 86, 89, - 89, 89, 89, 89, 89, 89, 89, 89, 89, 92, - 92, 92, 92, 92, 92, 92, 92, 92, 92, 95, - 95, 95, 236, 95, 235, 95, 95, 108, 108, 108, - 108, 233, 108, 108, 108, 108, 108, 110, 110, 110, - 110, 110, 110, 110, 110, 112, 112, 112, 112, 112, - 112, 112, 112, 69, 112, 114, 69, 225, 114, 114, - - 114, 114, 114, 114, 114, 116, 224, 223, 116, 116, - 116, 116, 116, 116, 116, 118, 118, 118, 118, 118, - 118, 118, 118, 222, 118, 120, 221, 120, 120, 120, - 120, 120, 120, 120, 120, 135, 135, 135, 135, 135, - 135, 135, 218, 135, 135, 213, 209, 208, 207, 206, - 205, 204, 203, 202, 201, 69, 196, 195, 192, 191, - 188, 187, 186, 185, 182, 181, 180, 179, 178, 177, - 176, 175, 174, 173, 172, 171, 91, 160, 69, 157, - 156, 149, 148, 147, 146, 143, 142, 141, 140, 139, - 138, 91, 69, 119, 113, 107, 71, 69, 68, 306, - - 65, 65, 59, 59, 19, 306, 306, 306, 306, 306, - 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, - 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, - 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, - 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, - 306 + 20, 23, 24, 20, 20, 20, 23, 20, 20, 25, + 23, 23, 26, 23, 23, 27, 23, 28, 29, 30, + 31, 32, 23, 23, 33, 23, 23, 23, 23, 20, + 20, 20, 20, 20, 20, 34, 35, 52, 36, 37, + 40, 40, 40, 40, 65, 55, 55, 65, 52, 59, + 59, 41, 65, 41, 59, 59, 61, 61, 61, 61, + 79, 79, 65, 65, 117, 72, 70, 65, 68, 53, + 49, 49, 50, 50, 69, 38, 38, 38, 43, 44, + 53, 45, 65, 65, 74, 65, 46, 76, 118, 47, + + 48, 65, 71, 73, 65, 75, 79, 79, 80, 80, + 80, 82, 82, 111, 111, 161, 77, 85, 85, 113, + 113, 49, 83, 50, 43, 44, 65, 45, 86, 65, + 78, 65, 46, 88, 88, 47, 48, 104, 104, 104, + 104, 106, 116, 116, 89, 65, 64, 65, 65, 122, + 291, 65, 119, 65, 107, 65, 121, 49, 65, 50, + 91, 124, 120, 129, 79, 79, 125, 65, 65, 92, + 93, 94, 123, 95, 65, 126, 127, 96, 88, 88, + 97, 80, 80, 80, 98, 99, 100, 101, 65, 128, + 82, 82, 85, 85, 291, 291, 85, 85, 82, 82, + + 136, 83, 65, 86, 140, 291, 131, 86, 65, 83, + 88, 88, 65, 132, 159, 141, 104, 104, 104, 104, + 158, 137, 146, 147, 155, 148, 111, 111, 65, 149, + 113, 113, 132, 116, 116, 65, 150, 151, 152, 65, + 65, 65, 65, 65, 180, 156, 65, 65, 65, 65, + 65, 160, 162, 163, 65, 181, 65, 166, 65, 65, + 65, 194, 208, 65, 206, 65, 164, 165, 190, 187, + 195, 65, 186, 196, 65, 191, 65, 65, 212, 65, + 65, 210, 65, 207, 211, 213, 65, 65, 65, 65, + 215, 221, 65, 65, 65, 224, 223, 65, 222, 65, + + 225, 65, 226, 235, 227, 65, 232, 237, 236, 65, + 65, 65, 228, 65, 65, 233, 65, 65, 238, 241, + 65, 240, 65, 65, 65, 245, 65, 242, 247, 246, + 65, 65, 65, 65, 65, 65, 249, 250, 243, 255, + 254, 251, 65, 253, 65, 65, 252, 259, 256, 65, + 260, 65, 65, 65, 257, 65, 65, 65, 65, 262, + 258, 65, 263, 261, 65, 269, 265, 264, 267, 270, + 266, 271, 268, 65, 272, 273, 65, 65, 274, 65, + 65, 65, 275, 65, 65, 65, 65, 65, 65, 65, + 65, 65, 278, 65, 65, 284, 65, 276, 277, 286, + + 282, 65, 283, 65, 248, 279, 280, 281, 288, 65, + 289, 244, 285, 287, 290, 39, 39, 39, 39, 39, + 39, 39, 39, 39, 42, 42, 42, 42, 42, 42, + 42, 42, 42, 51, 51, 51, 51, 51, 51, 51, + 51, 51, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 66, 66, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 84, 84, + + 84, 84, 84, 84, 84, 84, 84, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 90, 90, 239, 90, + 234, 90, 90, 103, 103, 103, 231, 103, 103, 103, + 103, 103, 105, 105, 105, 105, 105, 105, 105, 108, + 108, 108, 108, 108, 108, 108, 230, 108, 110, 229, + 110, 110, 110, 110, 110, 110, 110, 112, 65, 112, + 112, 112, 112, 112, 112, 112, 114, 114, 114, 114, + 114, 114, 114, 65, 114, 130, 130, 130, 130, 130, + 130, 220, 130, 130, 219, 218, 217, 216, 214, 209, + 205, 204, 203, 202, 201, 200, 199, 198, 197, 65, + + 193, 192, 189, 188, 185, 184, 183, 182, 179, 178, + 177, 176, 175, 174, 173, 172, 171, 170, 169, 168, + 167, 86, 157, 65, 154, 153, 136, 145, 144, 143, + 142, 139, 138, 135, 134, 133, 86, 65, 115, 109, + 102, 64, 67, 65, 64, 291, 63, 63, 57, 57, + 19, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291 + } ; -static yyconst flex_int32_t yy_chk[752] = +static yyconst flex_int32_t yy_chk[697] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 2, 2, 9, 2, - 2, 3, 3, 4, 4, 10, 327, 7, 26, 7, - 13, 13, 8, 3, 8, 4, 14, 14, 15, 15, - 16, 16, 27, 9, 28, 9, 29, 22, 22, 26, - 10, 22, 10, 30, 28, 26, 27, 2, 2, 2, - 5, 7, 5, 30, 5, 31, 8, 29, 32, 5, - - 35, 35, 5, 5, 33, 75, 34, 73, 32, 36, - 36, 38, 38, 61, 61, 38, 75, 31, 34, 39, - 39, 39, 40, 40, 5, 32, 5, 6, 33, 6, - 305, 6, 34, 73, 40, 301, 6, 41, 41, 6, - 6, 42, 42, 54, 54, 54, 54, 57, 72, 41, - 63, 63, 74, 42, 66, 66, 57, 77, 67, 67, - 57, 6, 67, 6, 47, 76, 78, 74, 81, 72, - 83, 82, 80, 47, 47, 47, 79, 47, 77, 78, - 83, 47, 300, 76, 47, 299, 81, 79, 47, 47, - 47, 47, 80, 82, 84, 84, 79, 85, 85, 85, - - 86, 86, 87, 87, 88, 88, 90, 90, 92, 92, - 93, 93, 86, 103, 87, 96, 88, 291, 90, 122, - 92, 123, 96, 125, 103, 109, 109, 109, 109, 111, - 111, 115, 115, 117, 117, 125, 111, 126, 123, 111, - 127, 122, 129, 111, 111, 111, 128, 130, 131, 132, - 134, 133, 158, 153, 129, 159, 127, 163, 162, 131, - 128, 130, 189, 126, 153, 134, 167, 168, 169, 190, - 170, 191, 189, 191, 132, 133, 162, 159, 158, 168, - 167, 193, 169, 195, 163, 170, 194, 197, 198, 214, - 195, 193, 210, 190, 213, 229, 194, 215, 217, 216, - - 220, 218, 235, 226, 227, 232, 238, 230, 214, 229, - 231, 197, 236, 215, 239, 198, 213, 216, 210, 218, - 217, 226, 230, 231, 235, 220, 232, 227, 238, 242, - 236, 243, 244, 245, 247, 248, 250, 249, 251, 252, - 253, 254, 257, 239, 242, 256, 244, 258, 245, 243, - 260, 261, 262, 252, 263, 253, 248, 247, 249, 266, - 250, 258, 267, 268, 251, 269, 254, 275, 260, 256, - 270, 257, 263, 271, 273, 284, 262, 266, 272, 274, - 261, 269, 277, 278, 279, 275, 267, 271, 268, 270, - 280, 281, 272, 274, 282, 283, 273, 278, 286, 277, - - 288, 284, 289, 290, 292, 279, 294, 293, 295, 281, - 297, 283, 288, 296, 280, 282, 294, 298, 302, 303, - 290, 293, 292, 296, 286, 304, 287, 285, 289, 276, - 265, 264, 259, 255, 295, 297, 302, 246, 241, 240, - 234, 303, 233, 298, 228, 223, 304, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 312, 312, 312, - - 312, 312, 312, 312, 312, 312, 312, 313, 313, 313, - 313, 313, 313, 313, 313, 313, 313, 314, 314, 314, - 314, 314, 314, 314, 314, 314, 314, 315, 315, 316, - 316, 316, 316, 316, 316, 316, 316, 316, 316, 317, - 317, 317, 317, 317, 317, 317, 317, 317, 317, 318, - 318, 318, 318, 318, 318, 318, 318, 318, 318, 319, - 319, 319, 222, 319, 221, 319, 319, 320, 320, 320, - 320, 219, 320, 320, 320, 320, 320, 321, 321, 321, - 321, 321, 321, 321, 321, 322, 322, 322, 322, 322, - 322, 322, 322, 212, 322, 323, 211, 209, 323, 323, - - 323, 323, 323, 323, 323, 324, 204, 202, 324, 324, - 324, 324, 324, 324, 324, 325, 325, 325, 325, 325, - 325, 325, 325, 200, 325, 326, 199, 326, 326, 326, - 326, 326, 326, 326, 326, 328, 328, 328, 328, 328, - 328, 328, 196, 328, 328, 192, 188, 186, 185, 184, - 183, 175, 173, 172, 171, 166, 165, 164, 161, 160, - 157, 156, 155, 154, 152, 151, 150, 147, 146, 145, - 144, 143, 141, 138, 137, 136, 135, 124, 121, 119, - 113, 107, 106, 105, 104, 102, 101, 100, 99, 98, - 97, 89, 70, 65, 59, 48, 25, 24, 23, 19, - - 18, 17, 12, 11, 306, 306, 306, 306, 306, 306, - 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, - 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, - 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, - 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, - 306 + 1, 1, 1, 1, 1, 2, 2, 7, 2, 2, + 3, 3, 4, 4, 28, 9, 10, 25, 8, 13, + 13, 3, 26, 4, 14, 14, 15, 15, 16, 16, + 34, 34, 30, 32, 311, 28, 26, 68, 25, 7, + 9, 10, 9, 10, 25, 2, 2, 2, 5, 5, + 8, 5, 27, 29, 30, 31, 5, 32, 68, 5, + + 5, 124, 27, 29, 33, 31, 35, 35, 38, 38, + 38, 39, 39, 59, 59, 124, 33, 40, 40, 61, + 61, 5, 39, 5, 6, 6, 69, 6, 40, 290, + 33, 72, 6, 41, 41, 6, 6, 52, 52, 52, + 52, 55, 64, 64, 41, 71, 64, 70, 74, 72, + 55, 73, 69, 78, 55, 75, 71, 6, 76, 6, + 46, 74, 70, 78, 79, 79, 75, 77, 286, 46, + 46, 46, 73, 46, 285, 75, 76, 46, 88, 88, + 46, 80, 80, 80, 46, 46, 46, 46, 122, 77, + 81, 81, 82, 82, 83, 83, 85, 85, 87, 87, + + 95, 81, 118, 82, 98, 83, 91, 85, 121, 87, + 89, 89, 279, 91, 122, 98, 104, 104, 104, 104, + 121, 95, 106, 106, 118, 106, 111, 111, 119, 106, + 113, 113, 106, 116, 116, 123, 106, 106, 106, 126, + 125, 127, 129, 128, 150, 119, 155, 156, 160, 164, + 159, 123, 125, 126, 186, 150, 165, 129, 166, 187, + 188, 164, 188, 194, 186, 206, 127, 128, 159, 156, + 165, 190, 155, 166, 191, 160, 209, 210, 192, 211, + 213, 190, 212, 187, 191, 192, 214, 215, 221, 224, + 194, 206, 222, 225, 226, 211, 210, 227, 209, 229, + + 212, 230, 213, 224, 214, 232, 221, 226, 225, 233, + 236, 237, 215, 240, 238, 222, 241, 244, 227, 230, + 242, 229, 243, 247, 246, 236, 245, 232, 238, 237, + 248, 249, 252, 250, 253, 254, 240, 241, 233, 246, + 245, 242, 258, 244, 255, 259, 243, 250, 247, 257, + 252, 262, 260, 261, 248, 263, 265, 264, 267, 254, + 249, 269, 255, 253, 268, 262, 258, 257, 260, 263, + 259, 264, 261, 270, 265, 267, 272, 271, 268, 273, + 275, 277, 269, 278, 280, 281, 282, 284, 288, 283, + 287, 276, 272, 289, 274, 281, 266, 270, 271, 283, + + 278, 256, 280, 251, 239, 273, 275, 277, 287, 235, + 288, 234, 282, 284, 289, 292, 292, 292, 292, 292, + 292, 292, 292, 292, 293, 293, 293, 293, 293, 293, + 293, 293, 293, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 296, 296, 296, 296, 296, 296, 296, 296, 296, + 297, 297, 297, 297, 297, 297, 297, 297, 297, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 299, 299, + 299, 299, 299, 299, 299, 299, 299, 300, 300, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 302, 302, + + 302, 302, 302, 302, 302, 302, 302, 303, 303, 303, + 303, 303, 303, 303, 303, 303, 304, 304, 228, 304, + 223, 304, 304, 305, 305, 305, 218, 305, 305, 305, + 305, 305, 306, 306, 306, 306, 306, 306, 306, 307, + 307, 307, 307, 307, 307, 307, 217, 307, 308, 216, + 308, 308, 308, 308, 308, 308, 308, 309, 208, 309, + 309, 309, 309, 309, 309, 309, 310, 310, 310, 310, + 310, 310, 310, 207, 310, 312, 312, 312, 312, 312, + 312, 205, 312, 312, 200, 198, 196, 195, 193, 189, + 185, 183, 182, 181, 180, 171, 169, 168, 167, 163, + + 162, 161, 158, 157, 154, 153, 152, 151, 149, 148, + 147, 146, 143, 142, 141, 140, 139, 137, 133, 132, + 131, 130, 120, 117, 115, 109, 107, 102, 101, 100, + 99, 97, 96, 94, 93, 92, 84, 66, 63, 57, + 47, 37, 24, 23, 22, 19, 18, 17, 12, 11, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291 + } ; static yy_state_type yy_last_accepting_state; @@ -828,7 +813,7 @@ static bool eof_found = false; for (a) single-line values, ending with a semicolon at end of line or a double semicolon, (b) multi-line values, which end at a double semicolon. */ -#line 832 "gabc/gabc-score-determination-l.c" +#line 817 "gabc/gabc-score-determination-l.c" #define INITIAL 0 #define attribute 1 @@ -1052,7 +1037,7 @@ YY_DECL { #line 108 "gabc/gabc-score-determination.l" -#line 1056 "gabc/gabc-score-determination-l.c" +#line 1041 "gabc/gabc-score-determination-l.c" while ( 1 ) /* loops until end-of-file is reached */ { @@ -1080,13 +1065,13 @@ yy_match: while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 307 ) + if ( yy_current_state >= 292 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; ++yy_cp; } - while ( yy_base[yy_current_state] != 705 ); + while ( yy_base[yy_current_state] != 651 ); yy_find_action: yy_act = yy_accept[yy_current_state]; @@ -1188,7 +1173,7 @@ YY_RULE_SETUP { gabc_score_determination_lval.text = gregorio_strdup(gabc_score_determination_text); - return NUMBER_OF_VOICES; + return NAME; } YY_BREAK case 11: @@ -1197,7 +1182,7 @@ YY_RULE_SETUP { gabc_score_determination_lval.text = gregorio_strdup(gabc_score_determination_text); - return NAME; + return SCORE_COPYRIGHT; } YY_BREAK case 12: @@ -1206,24 +1191,24 @@ YY_RULE_SETUP { gabc_score_determination_lval.text = gregorio_strdup(gabc_score_determination_text); - return SCORE_COPYRIGHT; + return GABC_COPYRIGHT; } YY_BREAK case 13: YY_RULE_SETUP #line 156 "gabc/gabc-score-determination.l" { - gabc_score_determination_lval.text = - gregorio_strdup(gabc_score_determination_text); - return GABC_COPYRIGHT; + /* DEPRECATED by 4.1 */ + return INITIAL_STYLE; } YY_BREAK case 14: YY_RULE_SETUP -#line 161 "gabc/gabc-score-determination.l" +#line 160 "gabc/gabc-score-determination.l" { - /* DEPRECATED by 4.1 */ - return INITIAL_STYLE; + gabc_score_determination_lval.text = + gregorio_strdup(gabc_score_determination_text); + return MODE; } YY_BREAK case 15: @@ -1232,7 +1217,7 @@ YY_RULE_SETUP { gabc_score_determination_lval.text = gregorio_strdup(gabc_score_determination_text); - return MODE; + return MODE_MODIFIER; } YY_BREAK case 16: @@ -1241,7 +1226,7 @@ YY_RULE_SETUP { gabc_score_determination_lval.text = gregorio_strdup(gabc_score_determination_text); - return MODE_MODIFIER; + return MODE_DIFFERENTIA; } YY_BREAK case 17: @@ -1250,7 +1235,7 @@ YY_RULE_SETUP { gabc_score_determination_lval.text = gregorio_strdup(gabc_score_determination_text); - return MODE_DIFFERENTIA; + return ANNOTATION; } YY_BREAK case 18: @@ -1259,7 +1244,7 @@ YY_RULE_SETUP { gabc_score_determination_lval.text = gregorio_strdup(gabc_score_determination_text); - return ANNOTATION; + return AUTHOR; } YY_BREAK case 19: @@ -1268,7 +1253,7 @@ YY_RULE_SETUP { gabc_score_determination_lval.text = gregorio_strdup(gabc_score_determination_text); - return AUTHOR; + return LANGUAGE; } YY_BREAK case 20: @@ -1277,7 +1262,7 @@ YY_RULE_SETUP { gabc_score_determination_lval.text = gregorio_strdup(gabc_score_determination_text); - return LANGUAGE; + return STAFF_LINES; } YY_BREAK case 21: @@ -1286,7 +1271,7 @@ YY_RULE_SETUP { gabc_score_determination_lval.text = gregorio_strdup(gabc_score_determination_text); - return STAFF_LINES; + return NABC_LINES; } YY_BREAK case 22: @@ -1295,7 +1280,7 @@ YY_RULE_SETUP { gabc_score_determination_lval.text = gregorio_strdup(gabc_score_determination_text); - return NABC_LINES; + return ORISCUS_ORIENTATION; } YY_BREAK case 23: @@ -1304,206 +1289,210 @@ YY_RULE_SETUP { gabc_score_determination_lval.text = gregorio_strdup(gabc_score_determination_text); - return ORISCUS_ORIENTATION; + return OTHER_HEADER; } YY_BREAK case 24: +/* rule 24 can match eol */ YY_RULE_SETUP #line 210 "gabc/gabc-score-determination.l" { - gabc_score_determination_lval.text = - gregorio_strdup(gabc_score_determination_text); - return OTHER_HEADER; + BEGIN(score); + return END_OF_DEFINITIONS; } YY_BREAK case 25: YY_RULE_SETUP -#line 215 "gabc/gabc-score-determination.l" +#line 214 "gabc/gabc-score-determination.l" { - return VOICE_CHANGE; + gregorio_messagef("det_score", VERBOSITY_ERROR, 0, + _("unrecognized character: \"%c\" in definition part"), + gabc_score_determination_text[0]); } YY_BREAK case 26: /* rule 26 can match eol */ YY_RULE_SETUP -#line 218 "gabc/gabc-score-determination.l" +#line 219 "gabc/gabc-score-determination.l" { - BEGIN(score); - return END_OF_DEFINITIONS; + gabc_score_determination_lval.text = + gregorio_strdup(gabc_score_determination_text); + return CHARACTERS; } YY_BREAK case 27: YY_RULE_SETUP -#line 222 "gabc/gabc-score-determination.l" +#line 224 "gabc/gabc-score-determination.l" { - gregorio_messagef("det_score", VERBOSITY_ERROR, 0, - _("unrecognized character: \"%c\" in definition part"), - gabc_score_determination_text[0]); + return HYPHEN; } YY_BREAK case 28: -/* rule 28 can match eol */ YY_RULE_SETUP #line 227 "gabc/gabc-score-determination.l" { - gabc_score_determination_lval.text = - gregorio_strdup(gabc_score_determination_text); - return CHARACTERS; + return NLBA_B; } YY_BREAK case 29: YY_RULE_SETUP -#line 232 "gabc/gabc-score-determination.l" +#line 230 "gabc/gabc-score-determination.l" { - return HYPHEN; + return NLBA_E; } YY_BREAK case 30: YY_RULE_SETUP -#line 235 "gabc/gabc-score-determination.l" +#line 233 "gabc/gabc-score-determination.l" { BEGIN(style); style_stack ++; - return I_BEGINNING; + return I_BEGIN; } YY_BREAK case 31: YY_RULE_SETUP -#line 240 "gabc/gabc-score-determination.l" +#line 238 "gabc/gabc-score-determination.l" { - return BNLBA; + style_stack --; + if (style_stack == 0) { + BEGIN(score); + } + return I_END; } YY_BREAK case 32: YY_RULE_SETUP -#line 243 "gabc/gabc-score-determination.l" +#line 245 "gabc/gabc-score-determination.l" { - return ENLBA; + BEGIN(style); + style_stack ++; + return TT_BEGIN; } YY_BREAK case 33: YY_RULE_SETUP -#line 246 "gabc/gabc-score-determination.l" +#line 250 "gabc/gabc-score-determination.l" { style_stack --; if (style_stack == 0) { BEGIN(score); } - return I_END; + return TT_END; } YY_BREAK case 34: YY_RULE_SETUP -#line 253 "gabc/gabc-score-determination.l" +#line 257 "gabc/gabc-score-determination.l" { BEGIN(style); style_stack ++; - return TT_BEGINNING; + return UL_BEGIN; } YY_BREAK case 35: YY_RULE_SETUP -#line 258 "gabc/gabc-score-determination.l" +#line 262 "gabc/gabc-score-determination.l" { style_stack --; if (style_stack == 0) { BEGIN(score); } - return TT_END; + return UL_END; } YY_BREAK case 36: YY_RULE_SETUP -#line 265 "gabc/gabc-score-determination.l" +#line 269 "gabc/gabc-score-determination.l" { BEGIN(style); style_stack ++; - return UL_BEGINNING; + return C_BEGIN; } YY_BREAK case 37: YY_RULE_SETUP -#line 270 "gabc/gabc-score-determination.l" +#line 274 "gabc/gabc-score-determination.l" { style_stack --; if (style_stack == 0) { BEGIN(score); } - return UL_END; + return C_END; } YY_BREAK case 38: YY_RULE_SETUP -#line 277 "gabc/gabc-score-determination.l" +#line 281 "gabc/gabc-score-determination.l" { BEGIN(style); style_stack ++; - return C_BEGINNING; + return B_BEGIN; } YY_BREAK case 39: YY_RULE_SETUP -#line 282 "gabc/gabc-score-determination.l" +#line 286 "gabc/gabc-score-determination.l" { style_stack --; if (style_stack == 0) { BEGIN(score); } - return C_END; + return B_END; } YY_BREAK case 40: YY_RULE_SETUP -#line 289 "gabc/gabc-score-determination.l" +#line 293 "gabc/gabc-score-determination.l" { BEGIN(style); style_stack ++; - return B_BEGINNING; + return SC_BEGIN; } YY_BREAK case 41: YY_RULE_SETUP -#line 294 "gabc/gabc-score-determination.l" +#line 298 "gabc/gabc-score-determination.l" { style_stack --; if (style_stack == 0) { BEGIN(score); } - return B_END; + return SC_END; } YY_BREAK case 42: YY_RULE_SETUP -#line 301 "gabc/gabc-score-determination.l" +#line 305 "gabc/gabc-score-determination.l" { BEGIN(style); style_stack ++; - return SC_BEGINNING; + return ELISION_BEGIN; } YY_BREAK case 43: YY_RULE_SETUP -#line 306 "gabc/gabc-score-determination.l" +#line 310 "gabc/gabc-score-determination.l" { style_stack --; if (style_stack == 0) { BEGIN(score); } - return SC_END; + return ELISION_END; } YY_BREAK case 44: YY_RULE_SETUP -#line 313 "gabc/gabc-score-determination.l" +#line 317 "gabc/gabc-score-determination.l" { BEGIN(style); style_stack ++; - return SP_BEGINNING; + return SP_BEGIN; } YY_BREAK case 45: YY_RULE_SETUP -#line 318 "gabc/gabc-score-determination.l" +#line 322 "gabc/gabc-score-determination.l" { style_stack --; if (style_stack == 0) { @@ -1515,7 +1504,7 @@ YY_RULE_SETUP case 46: /* rule 46 can match eol */ YY_RULE_SETUP -#line 325 "gabc/gabc-score-determination.l" +#line 329 "gabc/gabc-score-determination.l" { gabc_score_determination_lval.text = gregorio_strdup(gabc_score_determination_text); @@ -1524,7 +1513,7 @@ YY_RULE_SETUP YY_BREAK case 47: YY_RULE_SETUP -#line 330 "gabc/gabc-score-determination.l" +#line 334 "gabc/gabc-score-determination.l" { BEGIN(comments); } @@ -1532,29 +1521,29 @@ YY_RULE_SETUP case 48: /* rule 48 can match eol */ YY_RULE_SETUP -#line 333 "gabc/gabc-score-determination.l" +#line 337 "gabc/gabc-score-determination.l" { BEGIN(score); } YY_BREAK case 49: YY_RULE_SETUP -#line 336 "gabc/gabc-score-determination.l" +#line 340 "gabc/gabc-score-determination.l" { /* ignored */ } YY_BREAK case 50: YY_RULE_SETUP -#line 339 "gabc/gabc-score-determination.l" +#line 343 "gabc/gabc-score-determination.l" { BEGIN(verb); - return VERB_BEGINNING; + return VERB_BEGIN; } YY_BREAK case 51: YY_RULE_SETUP -#line 343 "gabc/gabc-score-determination.l" +#line 347 "gabc/gabc-score-determination.l" { if (style_stack == 0) { BEGIN(score); @@ -1567,7 +1556,7 @@ YY_RULE_SETUP case 52: /* rule 52 can match eol */ YY_RULE_SETUP -#line 351 "gabc/gabc-score-determination.l" +#line 355 "gabc/gabc-score-determination.l" { gabc_score_determination_lval.text = gregorio_strdup(gabc_score_determination_text); @@ -1576,7 +1565,7 @@ YY_RULE_SETUP YY_BREAK case 53: YY_RULE_SETUP -#line 356 "gabc/gabc-score-determination.l" +#line 360 "gabc/gabc-score-determination.l" { gabc_score_determination_lval.text = gregorio_strdup(gabc_score_determination_text); @@ -1585,21 +1574,21 @@ YY_RULE_SETUP YY_BREAK case 54: YY_RULE_SETUP -#line 361 "gabc/gabc-score-determination.l" +#line 365 "gabc/gabc-score-determination.l" { - return CENTER_BEGINNING; + return CENTER_BEGIN; } YY_BREAK case 55: YY_RULE_SETUP -#line 364 "gabc/gabc-score-determination.l" +#line 368 "gabc/gabc-score-determination.l" { return CENTER_END; } YY_BREAK case 56: YY_RULE_SETUP -#line 367 "gabc/gabc-score-determination.l" +#line 371 "gabc/gabc-score-determination.l" { BEGIN(alt); return ALT_BEGIN; @@ -1608,7 +1597,7 @@ YY_RULE_SETUP case 57: /* rule 57 can match eol */ YY_RULE_SETUP -#line 371 "gabc/gabc-score-determination.l" +#line 375 "gabc/gabc-score-determination.l" { gabc_score_determination_lval.text = gregorio_strdup(gabc_score_determination_text); @@ -1617,7 +1606,7 @@ YY_RULE_SETUP YY_BREAK case 58: YY_RULE_SETUP -#line 376 "gabc/gabc-score-determination.l" +#line 380 "gabc/gabc-score-determination.l" { BEGIN(score); return ALT_END; @@ -1625,42 +1614,42 @@ YY_RULE_SETUP YY_BREAK case 59: YY_RULE_SETUP -#line 380 "gabc/gabc-score-determination.l" +#line 384 "gabc/gabc-score-determination.l" { return EUOUAE_B; } YY_BREAK case 60: YY_RULE_SETUP -#line 383 "gabc/gabc-score-determination.l" +#line 387 "gabc/gabc-score-determination.l" { return EUOUAE_E; } YY_BREAK case 61: YY_RULE_SETUP -#line 386 "gabc/gabc-score-determination.l" +#line 390 "gabc/gabc-score-determination.l" { return TRANSLATION_CENTER_END; } YY_BREAK case 62: YY_RULE_SETUP -#line 389 "gabc/gabc-score-determination.l" +#line 393 "gabc/gabc-score-determination.l" { - return TRANSLATION_BEGINNING; + return TRANSLATION_BEGIN; } YY_BREAK case 63: YY_RULE_SETUP -#line 392 "gabc/gabc-score-determination.l" +#line 396 "gabc/gabc-score-determination.l" { return TRANSLATION_END; } YY_BREAK case 64: YY_RULE_SETUP -#line 395 "gabc/gabc-score-determination.l" +#line 399 "gabc/gabc-score-determination.l" { BEGIN(notes); return OPENING_BRACKET; @@ -1669,7 +1658,7 @@ YY_RULE_SETUP case 65: /* rule 65 can match eol */ YY_RULE_SETUP -#line 399 "gabc/gabc-score-determination.l" +#line 403 "gabc/gabc-score-determination.l" { gabc_score_determination_lval.text = gregorio_strdup(gabc_score_determination_text); @@ -1678,30 +1667,23 @@ YY_RULE_SETUP YY_BREAK case 66: YY_RULE_SETUP -#line 404 "gabc/gabc-score-determination.l" -{ - return VOICE_CUT; - } - YY_BREAK -case 67: -YY_RULE_SETUP -#line 407 "gabc/gabc-score-determination.l" +#line 408 "gabc/gabc-score-determination.l" { return NABC_CUT; } YY_BREAK -case 68: +case 67: YY_RULE_SETUP -#line 410 "gabc/gabc-score-determination.l" +#line 411 "gabc/gabc-score-determination.l" { BEGIN(score); return CLOSING_BRACKET; } YY_BREAK -case 69: -/* rule 69 can match eol */ +case 68: +/* rule 68 can match eol */ YY_RULE_SETUP -#line 414 "gabc/gabc-score-determination.l" +#line 415 "gabc/gabc-score-determination.l" { BEGIN(score); return CLOSING_BRACKET_WITH_SPACE; @@ -1716,7 +1698,7 @@ case YY_STATE_EOF(verb): case YY_STATE_EOF(comments): case YY_STATE_EOF(inicomments): case YY_STATE_EOF(alt): -#line 418 "gabc/gabc-score-determination.l" +#line 419 "gabc/gabc-score-determination.l" { if (!eof_found) { eof_found = true; @@ -1726,12 +1708,22 @@ case YY_STATE_EOF(alt): } } YY_BREAK +case 69: +/* rule 69 can match eol */ +YY_RULE_SETUP +#line 427 "gabc/gabc-score-determination.l" +{ + gregorio_messagef("gabc_score_determination_lex", VERBOSITY_ERROR, 0, + _("unrecognized character: \"%c\""), + gabc_score_determination_text[0]); + } + YY_BREAK case 70: YY_RULE_SETUP -#line 426 "gabc/gabc-score-determination.l" +#line 432 "gabc/gabc-score-determination.l" ECHO; YY_BREAK -#line 1735 "gabc/gabc-score-determination-l.c" +#line 1727 "gabc/gabc-score-determination-l.c" case YY_END_OF_BUFFER: { @@ -2023,7 +2015,7 @@ static int yy_get_next_buffer (void) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 307 ) + if ( yy_current_state >= 292 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; @@ -2051,11 +2043,11 @@ static int yy_get_next_buffer (void) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 307 ) + if ( yy_current_state >= 292 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; - yy_is_jam = (yy_current_state == 306); + yy_is_jam = (yy_current_state == 291); return yy_is_jam ? 0 : yy_current_state; } @@ -2698,7 +2690,7 @@ void gabc_score_determination_free (void * ptr ) #define YYTABLES_NAME "yytables" -#line 426 "gabc/gabc-score-determination.l" +#line 432 "gabc/gabc-score-determination.l" diff --git a/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc-score-determination-l.h b/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc-score-determination-l.h index 39fa2afbb0c..1d5ffb28f39 100644 --- a/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc-score-determination-l.h +++ b/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc-score-determination-l.h @@ -322,7 +322,7 @@ extern int gabc_score_determination_lex (void); #undef YY_DECL #endif -#line 426 "gabc/gabc-score-determination.l" +#line 432 "gabc/gabc-score-determination.l" #line 329 "gabc/gabc-score-determination-l.h" diff --git a/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc-score-determination-y.c b/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc-score-determination-y.c index 2f27b7c54d1..8fd16bb08ef 100644 --- a/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc-score-determination-y.c +++ b/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc-score-determination-y.c @@ -249,30 +249,65 @@ static void fix_custos(gregorio_score *score_to_check) } /* - * A function that checks to score integrity. For now it is... quite - * ridiculous... but it might be improved in the future. + * A function that checks the score integrity. */ -static int check_score_integrity(gregorio_score *score_to_check) +static bool check_score_integrity(gregorio_score *score_to_check) { - if (!score_to_check) { - return 0; + bool good = true; + + gregorio_assert(score_to_check, check_score_integrity, "score is NULL", + return false); + + if (score_to_check->first_syllable + && score_to_check->first_syllable->elements + && *(score_to_check->first_syllable->elements)) { + gregorio_character *ch; + if ((score_to_check->first_syllable->elements)[0]->type + == GRE_END_OF_LINE) { + gregorio_message( + "line break is not supported on the first syllable", + "check_score_integrity", VERBOSITY_ERROR, 0); + good = false; + } + if (gregorio_get_clef_change(score_to_check->first_syllable)) { + gregorio_message( + "clef change is not supported on the first syllable", + "check_score_integrity", VERBOSITY_ERROR, 0); + good = false; + } + /* check first syllable for elision at the beginning */ + for (ch = score_to_check->first_syllable->text; ch; + ch = ch->next_character) { + if (ch->is_character) { + break; + } else if (ch->cos.s.style == ST_VERBATIM + || ch->cos.s.style == ST_SPECIAL_CHAR) { + break; + } else if (ch->cos.s.style == ST_ELISION) { + gregorio_message( + _("score initial may not be in an elision"), + "rebuild_characters", VERBOSITY_ERROR, 0); + break; + } + } } - return 1; + + return good; } /* * Another function to be improved: this one checks the validity of the voice_infos. */ -static int check_infos_integrity(gregorio_score *score_to_check) +static bool check_infos_integrity(gregorio_score *score_to_check) { if (!score_to_check->name) { gregorio_message(_("no name specified, put `name:...;' at the " "beginning of the file, can be dangerous with some output " "formats"), "det_score", VERBOSITY_WARNING, 0); } - return 1; + return true; } /* @@ -289,8 +324,8 @@ static void initialize_variables(void) gregorio_add_voice_info(¤t_voice_info); score->first_voice_info = current_voice_info; /* other initializations */ - number_of_voices = 0; - voice = 1; + number_of_voices = 1; + voice = 0; /* first (and only) voice */ current_character = NULL; first_translation_character = NULL; first_text_character = NULL; @@ -321,40 +356,6 @@ static void free_variables(void) } } -/* see whether a voice_info is empty */ -static int voice_info_is_not_empty(const gregorio_voice_info *voice_info) -{ - return (voice_info->initial_clef.line); -} - -/* - * a function called when we see "--\n" that end the infos for a certain voice - */ -static void next_voice_info(void) -{ - /* we must do this test in the case where there would be a "--" before - * first_declarations */ - if (voice_info_is_not_empty(current_voice_info)) { - gregorio_add_voice_info(¤t_voice_info); - voice++; - } -} - -/* - * Function that frees the voice_infos for voices > final_count. Useful if - * there are too many voice_infos - */ - -static void reajust_voice_infos(gregorio_voice_info *voice_info, - int final_count) -{ - int i = 1; - while (voice_info && i <= final_count) { - voice_info = voice_info->next_voice_info; - } - gregorio_free_voice_infos(voice_info); -} - /* * Function called when we have reached the end of the definitions, it tries to * make the voice_infos coherent. @@ -363,39 +364,9 @@ static void end_definitions(void) { int i; - if (!check_infos_integrity(score)) { - gregorio_message(_("can't determine valid infos on the score"), - "det_score", VERBOSITY_ERROR, 0); - } - if (!number_of_voices) { - if (voice > MAX_NUMBER_OF_VOICES) { - voice = MAX_NUMBER_OF_VOICES; - reajust_voice_infos(score->first_voice_info, number_of_voices); - } - number_of_voices = voice; - score->number_of_voices = voice; - } else { - if (number_of_voices > voice) { - gregorio_messagef("det_score", VERBOSITY_WARNING, 0, - ngt_("not enough voice infos found: %d found, %d waited, " - "%d assumed", "not enough voice infos found: %d found, %d " - "waited, %d assumed", voice), voice, - number_of_voices, voice); - score->number_of_voices = voice; - number_of_voices = voice; - } else { - if (number_of_voices < voice) { - gregorio_messagef("det_score", VERBOSITY_WARNING, 0, - ngt_("too many voice infos found: %d found, %d " - "waited, %d assumed", "not enough voice infos found: " - "%d found, %d waited, %d assumed", - number_of_voices), voice, number_of_voices, - number_of_voices); - } - } - } - /* voice is now voice-1, so that it can be the index of elements */ - voice = 0; + gregorio_assert_only(check_infos_integrity(score), end_definitions, + "can't determine valid infos on the score"); + elements = (gregorio_element **) gregorio_malloc(number_of_voices * sizeof(gregorio_element *)); for (i = 0; i < number_of_voices; i++) { @@ -418,19 +389,6 @@ static gregorio_syllable *current_syllable = NULL; static char *abovelinestext = NULL; /* - * Function called when we see a ")", it completes the gregorio_element array - * of the syllable with NULL pointers. Usefull in the cases where for example - * you have two voices, but a voice that is silent on a certain syllable. - */ -static void complete_with_nulls(int last_voice) -{ - int i; - for (i = last_voice + 1; i < number_of_voices; i++) { - elements[i] = NULL; - } -} - -/* * Function called each time we find a space, it updates the current position. */ static void update_position_with_space(void) @@ -473,24 +431,41 @@ static void gregorio_set_translation_center_beginning( current_syllable->translation_type = TR_NORMAL; } -static void rebuild_characters(void) +static void ready_characters(void) { - /* we rebuild the first syllable text if it is the first syllable, or if - * it is the second when the first has no text. - * it is a patch for cases like (c4) Al(ab)le(ab) */ - if ((!score->first_syllable && current_character) - || (current_syllable && !current_syllable->previous_syllable - && !current_syllable->text && current_character)) { - /* leave the first syllable text untouched at this time */ + if (current_character) { gregorio_go_to_first_character_c(¤t_character); + if (!score->first_syllable || (current_syllable + && !current_syllable->previous_syllable + && !current_syllable->text)) { + started_first_word = true; + } + } +} - started_first_word = true; - } else { - gregorio_rebuild_characters(¤t_character, center_is_determined, - false); +static void rebuild_score_characters(void) +{ + if (score->first_syllable) { + gregorio_syllable *syllable; + /* leave the first syllable text untouched at this time */ + for (syllable = score->first_syllable->next_syllable; syllable; + syllable = syllable->next_syllable) { + const gregorio_character *t; + + /* find out if there is a forced center */ + gregorio_center_determination center = CENTER_NOT_DETERMINED; + for (t = syllable->text; t; t = t->next_character) { + if (!t->is_character && t->cos.s.style == ST_FORCED_CENTER) { + center = CENTER_FULLY_DETERMINED; + break; + } + } - if (started_first_word) { - gregorio_set_first_word(¤t_character); + gregorio_rebuild_characters(&(syllable->text), center, false); + + if (syllable->first_word) { + gregorio_set_first_word(&(syllable->text)); + } } } } @@ -501,7 +476,56 @@ static void rebuild_characters(void) static void close_syllable(YYLTYPE *loc) { - int i; + int i = 0; + gregorio_character *ch; + + /* make sure any elisions that are opened are closed within the syllable */ + for (ch = first_text_character; ch; ch = ch->next_character) { + if (!ch->is_character) { + switch (ch->cos.s.style) { + case ST_ELISION: + switch (ch->cos.s.type) { + case ST_T_BEGIN: + ++i; + if (i > 1) { + gregorio_message(_("elisions may not be nested"), + "close_syllable", VERBOSITY_ERROR, 0); + } + break; + + case ST_T_END: + --i; + /* the parser precludes this from failing here */ + gregorio_assert_only(i >= 0, close_syllable, + "encountered elision end with no beginning"); + break; + + case ST_T_NOTHING: + /* not reachable unless there's a programming error */ + /* LCOV_EXCL_START */ + gregorio_fail(close_syllable, "encountered ST_T_NOTHING"); + break; + /* LCOV_EXCL_STOP */ + } + break; + + case ST_FORCED_CENTER: + if (i > 0) { + gregorio_message( + _("forced center may not be within an elision"), + "close_syllable", VERBOSITY_ERROR, 0); + } + break; + + default: + break; + } + } + } + /* the parser precludes this from failing here */ + gregorio_assert_only(i == 0, close_syllable, + "encountered elision beginning with no end"); + gregorio_add_syllable(¤t_syllable, number_of_voices, elements, first_text_character, first_translation_character, position, abovelinestext, translation_type, no_linebreak_area, euouae, loc, @@ -542,7 +566,7 @@ static void close_syllable(YYLTYPE *loc) * the translation pointer instead of the text pointer */ static void start_translation(unsigned char asked_translation_type) { - rebuild_characters(); + ready_characters(); first_text_character = current_character; /* the middle letters of the translation have no sense */ center_is_determined = CENTER_FULLY_DETERMINED; @@ -552,7 +576,7 @@ static void start_translation(unsigned char asked_translation_type) static void end_translation(void) { - rebuild_characters(); + ready_characters(); first_translation_character = current_character; } @@ -631,10 +655,14 @@ static void determine_oriscus_orientation(gregorio_score *score) { S_ORISCUS_CAVUM_DESCENDENS; break; default: - gregorio_message(_("bad shape"), - "determine_oriscus_orientation", - VERBOSITY_ERROR, 0); + /* not reachable unless there's a + * programming error */ + /* LCOV_EXCL_START */ + gregorio_fail( + determine_oriscus_orientation, + "bad_shape"); break; + /* LCOV_EXCL_STOP */ } } else { /* ascending or the same */ switch(oriscus->u.note.shape) { @@ -647,10 +675,14 @@ static void determine_oriscus_orientation(gregorio_score *score) { S_ORISCUS_CAVUM_ASCENDENS; break; default: - gregorio_message(_("bad shape"), - "determine_oriscus_orientation", - VERBOSITY_ERROR, 0); + /* not reachable unless there's a + * programming error */ + /* LCOV_EXCL_START */ + gregorio_fail( + determine_oriscus_orientation, + "bad_shape"); break; + /* LCOV_EXCL_STOP */ } } oriscus = NULL; @@ -683,9 +715,11 @@ static void determine_oriscus_orientation(gregorio_score *score) { oriscus->u.note.shape = S_ORISCUS_CAVUM_DESCENDENS; break; default: - gregorio_message(_("bad shape"), "determine_oriscus_orientation", - VERBOSITY_ERROR, 0); + /* not reachable unless there's a programming error */ + /* LCOV_EXCL_START */ + gregorio_fail(determine_oriscus_orientation, "bad_shape"); break; + /* LCOV_EXCL_STOP */ } } } @@ -705,11 +739,8 @@ gregorio_score *gabc_read_score(FILE *f_in) sha1_process_bytes(GREGORIO_VERSION, strlen(GREGORIO_VERSION), &digester); /* the input file that flex will parse */ gabc_score_determination_in = f_in; - if (!f_in) { - gregorio_message(_("can't read stream from argument, returning NULL " - "pointer"), "det_score", VERBOSITY_ERROR, 0); - return NULL; - } + gregorio_assert(f_in, gabc_read_score, "can't read stream from NULL", + return NULL); initialize_variables(); /* the flex/bison main call, it will build the score (that we have * initialized) */ @@ -718,14 +749,14 @@ gregorio_score *gabc_read_score(FILE *f_in) determine_oriscus_orientation(score); } gregorio_fix_initial_keys(score, gregorio_default_clef); + rebuild_score_characters(); fix_custos(score); + gabc_det_notes_finish(); free_variables(); - /* the we check the validity and integrity of the score we have built. */ + /* then we check the validity and integrity of the score we have built. */ if (!check_score_integrity(score)) { - gregorio_free_score(score); - score = NULL; gregorio_message(_("unable to determine a valid score from file"), - "det_score", VERBOSITY_FATAL, 0); + "gabc_read_score", VERBOSITY_ERROR, 0); } sha1_finish_ctx(&digester, score->digest); return score; @@ -735,18 +766,16 @@ unsigned char nabc_state = 0; size_t nabc_lines = 0; static void gabc_y_add_notes(char *notes, YYLTYPE loc) { - gregorio_element *new_elements; - gregorio_element *last_element; if (nabc_state == 0) { if (!elements[voice]) { elements[voice] = gabc_det_elements_from_string(notes, ¤t_key, macros, &loc, score); current_element = elements[voice]; } else { - new_elements = gabc_det_elements_from_string(notes, - ¤t_key, macros, &loc, score); - last_element = elements[voice]; - while(last_element->next) { + gregorio_element *new_elements = gabc_det_elements_from_string( + notes, ¤t_key, macros, &loc, score); + gregorio_element *last_element = elements[voice]; + while (last_element->next) { last_element = last_element->next; } last_element->next = new_elements; @@ -758,10 +787,9 @@ static void gabc_y_add_notes(char *notes, YYLTYPE loc) { gregorio_add_element(&elements[voice], NULL); current_element = elements[voice]; } - if (!current_element) { - gregorio_message(_("current_element is null, this shouldn't " - "happen!"), "gabc_y_add_notes", VERBOSITY_FATAL, 0); - } + gregorio_assert(current_element, gabc_y_add_notes, + "current_element is null, this shouldn't happen!", + return); if (!current_element->nabc) { current_element->nabc = (char **) gregorio_calloc (nabc_lines, sizeof (char *)); @@ -771,7 +799,7 @@ static void gabc_y_add_notes(char *notes, YYLTYPE loc) { } } -#line 775 "gabc/gabc-score-determination-y.c" /* yacc.c:339 */ +#line 803 "gabc/gabc-score-determination-y.c" /* yacc.c:339 */ # ifndef YY_NULLPTR # if defined __cplusplus && 201103L <= __cplusplus @@ -810,61 +838,60 @@ extern int gabc_score_determination_debug; AUTHOR = 259, GABC_COPYRIGHT = 260, SCORE_COPYRIGHT = 261, - NUMBER_OF_VOICES = 262, - LANGUAGE = 263, - STAFF_LINES = 264, - ORISCUS_ORIENTATION = 265, - DEF_MACRO = 266, - OTHER_HEADER = 267, - ANNOTATION = 268, - MODE = 269, - MODE_MODIFIER = 270, - MODE_DIFFERENTIA = 271, - INITIAL_STYLE = 272, - VOICE_CUT = 273, - VOICE_CHANGE = 274, - END_OF_DEFINITIONS = 275, - END_OF_FILE = 276, - COLON = 277, - SEMICOLON = 278, - SPACE = 279, - CHARACTERS = 280, - NOTES = 281, - HYPHEN = 282, - ATTRIBUTE = 283, - OPENING_BRACKET = 284, - CLOSING_BRACKET = 285, - CLOSING_BRACKET_WITH_SPACE = 286, - I_BEGINNING = 287, - I_END = 288, - TT_BEGINNING = 289, - TT_END = 290, - UL_BEGINNING = 291, - UL_END = 292, - C_BEGINNING = 293, - C_END = 294, - B_BEGINNING = 295, - B_END = 296, - SC_BEGINNING = 297, - SC_END = 298, - SP_BEGINNING = 299, - SP_END = 300, - VERB_BEGINNING = 301, - VERB = 302, - VERB_END = 303, - CENTER_BEGINNING = 304, - CENTER_END = 305, - TRANSLATION_BEGINNING = 306, - TRANSLATION_END = 307, - TRANSLATION_CENTER_END = 308, - ALT_BEGIN = 309, - ALT_END = 310, - BNLBA = 311, - ENLBA = 312, - EUOUAE_B = 313, - EUOUAE_E = 314, - NABC_CUT = 315, - NABC_LINES = 316 + LANGUAGE = 262, + STAFF_LINES = 263, + ORISCUS_ORIENTATION = 264, + DEF_MACRO = 265, + OTHER_HEADER = 266, + ANNOTATION = 267, + MODE = 268, + MODE_MODIFIER = 269, + MODE_DIFFERENTIA = 270, + INITIAL_STYLE = 271, + END_OF_DEFINITIONS = 272, + END_OF_FILE = 273, + COLON = 274, + SEMICOLON = 275, + SPACE = 276, + CHARACTERS = 277, + NOTES = 278, + HYPHEN = 279, + ATTRIBUTE = 280, + OPENING_BRACKET = 281, + CLOSING_BRACKET = 282, + CLOSING_BRACKET_WITH_SPACE = 283, + I_BEGIN = 284, + I_END = 285, + TT_BEGIN = 286, + TT_END = 287, + UL_BEGIN = 288, + UL_END = 289, + C_BEGIN = 290, + C_END = 291, + B_BEGIN = 292, + B_END = 293, + SC_BEGIN = 294, + SC_END = 295, + SP_BEGIN = 296, + SP_END = 297, + VERB_BEGIN = 298, + VERB = 299, + VERB_END = 300, + CENTER_BEGIN = 301, + CENTER_END = 302, + ELISION_BEGIN = 303, + ELISION_END = 304, + TRANSLATION_BEGIN = 305, + TRANSLATION_END = 306, + TRANSLATION_CENTER_END = 307, + ALT_BEGIN = 308, + ALT_END = 309, + NLBA_B = 310, + NLBA_E = 311, + EUOUAE_B = 312, + EUOUAE_E = 313, + NABC_CUT = 314, + NABC_LINES = 315 }; #endif /* Tokens. */ @@ -872,61 +899,60 @@ extern int gabc_score_determination_debug; #define AUTHOR 259 #define GABC_COPYRIGHT 260 #define SCORE_COPYRIGHT 261 -#define NUMBER_OF_VOICES 262 -#define LANGUAGE 263 -#define STAFF_LINES 264 -#define ORISCUS_ORIENTATION 265 -#define DEF_MACRO 266 -#define OTHER_HEADER 267 -#define ANNOTATION 268 -#define MODE 269 -#define MODE_MODIFIER 270 -#define MODE_DIFFERENTIA 271 -#define INITIAL_STYLE 272 -#define VOICE_CUT 273 -#define VOICE_CHANGE 274 -#define END_OF_DEFINITIONS 275 -#define END_OF_FILE 276 -#define COLON 277 -#define SEMICOLON 278 -#define SPACE 279 -#define CHARACTERS 280 -#define NOTES 281 -#define HYPHEN 282 -#define ATTRIBUTE 283 -#define OPENING_BRACKET 284 -#define CLOSING_BRACKET 285 -#define CLOSING_BRACKET_WITH_SPACE 286 -#define I_BEGINNING 287 -#define I_END 288 -#define TT_BEGINNING 289 -#define TT_END 290 -#define UL_BEGINNING 291 -#define UL_END 292 -#define C_BEGINNING 293 -#define C_END 294 -#define B_BEGINNING 295 -#define B_END 296 -#define SC_BEGINNING 297 -#define SC_END 298 -#define SP_BEGINNING 299 -#define SP_END 300 -#define VERB_BEGINNING 301 -#define VERB 302 -#define VERB_END 303 -#define CENTER_BEGINNING 304 -#define CENTER_END 305 -#define TRANSLATION_BEGINNING 306 -#define TRANSLATION_END 307 -#define TRANSLATION_CENTER_END 308 -#define ALT_BEGIN 309 -#define ALT_END 310 -#define BNLBA 311 -#define ENLBA 312 -#define EUOUAE_B 313 -#define EUOUAE_E 314 -#define NABC_CUT 315 -#define NABC_LINES 316 +#define LANGUAGE 262 +#define STAFF_LINES 263 +#define ORISCUS_ORIENTATION 264 +#define DEF_MACRO 265 +#define OTHER_HEADER 266 +#define ANNOTATION 267 +#define MODE 268 +#define MODE_MODIFIER 269 +#define MODE_DIFFERENTIA 270 +#define INITIAL_STYLE 271 +#define END_OF_DEFINITIONS 272 +#define END_OF_FILE 273 +#define COLON 274 +#define SEMICOLON 275 +#define SPACE 276 +#define CHARACTERS 277 +#define NOTES 278 +#define HYPHEN 279 +#define ATTRIBUTE 280 +#define OPENING_BRACKET 281 +#define CLOSING_BRACKET 282 +#define CLOSING_BRACKET_WITH_SPACE 283 +#define I_BEGIN 284 +#define I_END 285 +#define TT_BEGIN 286 +#define TT_END 287 +#define UL_BEGIN 288 +#define UL_END 289 +#define C_BEGIN 290 +#define C_END 291 +#define B_BEGIN 292 +#define B_END 293 +#define SC_BEGIN 294 +#define SC_END 295 +#define SP_BEGIN 296 +#define SP_END 297 +#define VERB_BEGIN 298 +#define VERB 299 +#define VERB_END 300 +#define CENTER_BEGIN 301 +#define CENTER_END 302 +#define ELISION_BEGIN 303 +#define ELISION_END 304 +#define TRANSLATION_BEGIN 305 +#define TRANSLATION_END 306 +#define TRANSLATION_CENTER_END 307 +#define ALT_BEGIN 308 +#define ALT_END 309 +#define NLBA_B 310 +#define NLBA_E 311 +#define EUOUAE_B 312 +#define EUOUAE_E 313 +#define NABC_CUT 314 +#define NABC_LINES 315 /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED @@ -958,7 +984,7 @@ int gabc_score_determination_parse (void); /* Copy the second part of user declarations. */ -#line 962 "gabc/gabc-score-determination-y.c" /* yacc.c:358 */ +#line 988 "gabc/gabc-score-determination-y.c" /* yacc.c:358 */ #ifdef short # undef short @@ -1202,21 +1228,21 @@ union yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 4 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 175 +#define YYLAST 166 /* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 62 +#define YYNTOKENS 61 /* YYNNTS -- Number of nonterminals. */ #define YYNNTS 23 /* YYNRULES -- Number of rules. */ -#define YYNRULES 82 +#define YYNRULES 81 /* YYNSTATES -- Number of states. */ -#define YYNSTATES 117 +#define YYNSTATES 115 /* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned by yylex, with out-of-bounds checking. */ #define YYUNDEFTOK 2 -#define YYMAXUTOK 316 +#define YYMAXUTOK 315 #define YYTRANSLATE(YYX) \ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) @@ -1256,22 +1282,22 @@ static const yytype_uint8 yytranslate[] = 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, - 55, 56, 57, 58, 59, 60, 61 + 55, 56, 57, 58, 59, 60 }; #if YYDEBUG /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ static const yytype_uint16 yyrline[] = { - 0, 736, 736, 740, 745, 746, 750, 754, 760, 770, - 775, 784, 790, 795, 800, 805, 810, 815, 823, 831, - 841, 850, 855, 859, 862, 867, 868, 872, 894, 917, - 930, 943, 948, 957, 958, 959, 963, 966, 969, 972, - 975, 978, 981, 984, 987, 996, 999, 1002, 1005, 1008, - 1011, 1014, 1017, 1020, 1029, 1032, 1038, 1041, 1047, 1048, - 1051, 1052, 1053, 1054, 1058, 1061, 1066, 1067, 1068, 1072, - 1078, 1081, 1087, 1093, 1098, 1106, 1109, 1118, 1121, 1127, - 1128, 1131, 1132 + 0, 765, 765, 769, 774, 775, 779, 783, 789, 794, + 803, 809, 814, 819, 824, 829, 834, 842, 850, 860, + 869, 874, 878, 883, 884, 888, 893, 899, 910, 914, + 922, 923, 924, 928, 931, 934, 937, 940, 943, 946, + 949, 952, 955, 964, 967, 970, 973, 976, 979, 982, + 985, 988, 991, 1000, 1003, 1009, 1012, 1018, 1019, 1022, + 1023, 1024, 1025, 1029, 1032, 1037, 1038, 1039, 1043, 1049, + 1052, 1058, 1064, 1069, 1077, 1080, 1089, 1092, 1098, 1099, + 1102, 1103 }; #endif @@ -1281,24 +1307,23 @@ static const yytype_uint16 yyrline[] = static const char *const yytname[] = { "$end", "error", "$undefined", "NAME", "AUTHOR", "GABC_COPYRIGHT", - "SCORE_COPYRIGHT", "NUMBER_OF_VOICES", "LANGUAGE", "STAFF_LINES", - "ORISCUS_ORIENTATION", "DEF_MACRO", "OTHER_HEADER", "ANNOTATION", "MODE", - "MODE_MODIFIER", "MODE_DIFFERENTIA", "INITIAL_STYLE", "VOICE_CUT", - "VOICE_CHANGE", "END_OF_DEFINITIONS", "END_OF_FILE", "COLON", - "SEMICOLON", "SPACE", "CHARACTERS", "NOTES", "HYPHEN", "ATTRIBUTE", - "OPENING_BRACKET", "CLOSING_BRACKET", "CLOSING_BRACKET_WITH_SPACE", - "I_BEGINNING", "I_END", "TT_BEGINNING", "TT_END", "UL_BEGINNING", - "UL_END", "C_BEGINNING", "C_END", "B_BEGINNING", "B_END", "SC_BEGINNING", - "SC_END", "SP_BEGINNING", "SP_END", "VERB_BEGINNING", "VERB", "VERB_END", - "CENTER_BEGINNING", "CENTER_END", "TRANSLATION_BEGINNING", - "TRANSLATION_END", "TRANSLATION_CENTER_END", "ALT_BEGIN", "ALT_END", - "BNLBA", "ENLBA", "EUOUAE_B", "EUOUAE_E", "NABC_CUT", "NABC_LINES", - "$accept", "score", "all_definitions", "definitions", "attribute", - "definition", "notes", "note", "closing_bracket_with_space", - "style_beginning", "style_end", "euouae", "linebreak_area", "character", - "text_hyphen", "text", "translation_beginning", "translation", - "above_line_text", "syllable_with_notes", "notes_without_word", - "syllable", "syllables", YY_NULLPTR + "SCORE_COPYRIGHT", "LANGUAGE", "STAFF_LINES", "ORISCUS_ORIENTATION", + "DEF_MACRO", "OTHER_HEADER", "ANNOTATION", "MODE", "MODE_MODIFIER", + "MODE_DIFFERENTIA", "INITIAL_STYLE", "END_OF_DEFINITIONS", "END_OF_FILE", + "COLON", "SEMICOLON", "SPACE", "CHARACTERS", "NOTES", "HYPHEN", + "ATTRIBUTE", "OPENING_BRACKET", "CLOSING_BRACKET", + "CLOSING_BRACKET_WITH_SPACE", "I_BEGIN", "I_END", "TT_BEGIN", "TT_END", + "UL_BEGIN", "UL_END", "C_BEGIN", "C_END", "B_BEGIN", "B_END", "SC_BEGIN", + "SC_END", "SP_BEGIN", "SP_END", "VERB_BEGIN", "VERB", "VERB_END", + "CENTER_BEGIN", "CENTER_END", "ELISION_BEGIN", "ELISION_END", + "TRANSLATION_BEGIN", "TRANSLATION_END", "TRANSLATION_CENTER_END", + "ALT_BEGIN", "ALT_END", "NLBA_B", "NLBA_E", "EUOUAE_B", "EUOUAE_E", + "NABC_CUT", "NABC_LINES", "$accept", "score", "all_definitions", + "definitions", "attribute", "definition", "notes", "note", + "closing_bracket_with_space", "style_beginning", "style_end", "euouae", + "linebreak_area", "character", "text_hyphen", "text", + "translation_beginning", "translation", "above_line_text", + "syllable_with_notes", "notes_without_word", "syllable", "syllables", YY_NULLPTR }; #endif @@ -1313,14 +1338,14 @@ static const yytype_uint16 yytoknum[] = 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, - 315, 316 + 315 }; # endif -#define YYPACT_NINF -55 +#define YYPACT_NINF -52 #define yypact_value_is_default(Yystate) \ - (!!((Yystate) == (-55))) + (!!((Yystate) == (-52))) #define YYTABLE_NINF -3 @@ -1331,18 +1356,18 @@ static const yytype_uint16 yytoknum[] = STATE-NUM. */ static const yytype_int8 yypact[] = { - -55, 26, -55, -1, -55, 1, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, -55, -55, 5, -55, -55, -55, -55, 36, -55, - 2, -55, -55, -55, 0, -55, -55, -55, -55, -55, - -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, - -55, -6, -55, -8, -55, -55, -55, -55, -55, -55, - -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, - -55, -55, -55, 7, -55, -55, -55, -55, -55, -55, - -55, -55, -55, 99, 8, -55, 71, -55, -55, 6, - 4, 15, 17, -55, -55, -55, 10, -6, -15, -55, - -55, -55, -55, -55, -6, -55, -55, 15, -55, -55, - -55, -55, -6, -55, -55, -6, -6 + -52, 17, -52, -2, -52, 16, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, + -52, 18, -52, -52, -52, -52, 41, -52, 12, -52, + -52, -52, 28, -52, -52, -52, -52, -52, -52, -52, + -52, -52, -52, -52, -52, -52, -52, -52, 24, -52, + -6, -52, -52, -52, -52, -52, -52, -52, -52, -52, + -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, + -52, -52, 19, -52, -52, -52, -52, -52, -52, -52, + -52, -52, 108, 13, -52, 78, -52, -52, 20, -9, + 36, 37, -52, -52, -52, 30, 24, 3, -52, -52, + -52, -52, -52, 24, -52, 36, -52, -52, -52, -52, + 24, -52, -52, 24, 24 }; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. @@ -1350,34 +1375,34 @@ static const yytype_int8 yypact[] = means the default is an error. */ static const yytype_uint8 yydefact[] = { - 4, 0, 81, 0, 1, 66, 0, 0, 0, 0, + 4, 0, 80, 0, 1, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 24, 3, 0, 5, 25, 69, 71, 0, 66, - 0, 79, 80, 82, 0, 10, 21, 12, 13, 8, - 11, 17, 22, 9, 23, 20, 14, 15, 16, 19, - 18, 77, 59, 64, 25, 36, 45, 37, 46, 38, - 47, 39, 48, 40, 49, 41, 50, 43, 52, 42, - 51, 44, 53, 0, 56, 57, 54, 55, 60, 61, - 63, 62, 67, 0, 0, 58, 0, 25, 7, 0, - 0, 31, 33, 26, 32, 25, 0, 73, 0, 65, - 68, 25, 64, 70, 78, 6, 29, 27, 30, 28, - 35, 34, 74, 25, 72, 75, 76 + 3, 0, 5, 23, 68, 70, 0, 65, 0, 78, + 79, 81, 0, 9, 20, 11, 12, 10, 16, 21, + 8, 22, 19, 13, 14, 15, 18, 17, 76, 58, + 63, 23, 33, 43, 34, 44, 35, 45, 36, 46, + 37, 47, 38, 48, 40, 50, 39, 49, 42, 52, + 41, 51, 0, 55, 56, 53, 54, 59, 60, 62, + 61, 66, 0, 0, 57, 0, 23, 7, 0, 0, + 28, 30, 24, 29, 23, 0, 72, 0, 64, 67, + 23, 63, 69, 77, 6, 25, 27, 26, 32, 31, + 73, 23, 71, 74, 75 }; /* YYPGOTO[NTERM-NUM]. */ -static const yytype_int16 yypgoto[] = +static const yytype_int8 yypgoto[] = { - -55, -55, -55, -55, 152, -55, -54, -55, -46, -55, - -55, -55, -55, -37, -55, 19, -55, -11, -55, -55, - -55, -55, -55 + -52, -52, -52, -52, 15, -52, -51, -52, -30, -52, + -52, -52, -52, -21, -52, 35, -52, -5, -52, -52, + -52, -52, -52 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int8 yydefgoto[] = { - -1, 1, 2, 3, 35, 24, 51, 93, 94, 78, - 79, 80, 81, 82, 83, 28, 29, 30, 85, 31, - 32, 33, 5 + -1, 1, 2, 3, 33, 22, 48, 92, 93, 77, + 78, 79, 80, 81, 82, 26, 27, 28, 84, 29, + 30, 31, 5 }; /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If @@ -1385,78 +1410,76 @@ static const yytype_int8 yydefgoto[] = number is the opposite. If YYTABLE_NINF, syntax error. */ static const yytype_int8 yytable[] = { - 97, -2, 6, 7, 8, 9, 10, 11, 12, 13, - 14, 15, 16, 17, 18, 19, 20, 84, 21, 22, - 90, 95, 106, 88, 91, 92, 4, 34, 89, 105, - 25, 87, 98, 104, 107, 92, 110, 101, 111, 113, - 114, 112, 96, 26, 109, 27, 100, 115, 86, 0, - 0, 0, 26, 0, 27, 0, 0, 0, 0, 116, - 23, 52, 0, 53, 108, 54, 0, 0, 55, 56, - 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, - 67, 68, 69, 0, 70, 71, 72, 26, 0, 27, - 73, 0, 74, 75, 76, 77, 52, 0, 102, 0, - 0, 0, 0, 55, 56, 57, 58, 59, 60, 61, - 62, 63, 64, 65, 66, 67, 68, 69, 0, 70, - 71, 72, 0, 103, 52, 73, 99, 74, 75, 76, - 77, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, 68, 69, 0, 70, 71, 72, - 0, 0, 0, 73, 0, 74, 75, 76, 77, 36, - 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, - 47, 48, 49, 0, 0, 50 + 96, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 20, -2, 4, 105, 91, + 94, 83, 34, 35, 36, 37, 38, 39, 40, 41, + 42, 43, 44, 45, 46, 103, 47, 32, 86, 100, + 104, 97, 23, 110, 24, 95, 25, 89, 87, 113, + 106, 90, 91, 88, 108, 109, 111, 112, 21, 107, + 114, 99, 85, 49, 0, 50, 24, 51, 25, 0, + 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, 0, 67, 68, 69, 70, + 71, 24, 0, 25, 72, 0, 73, 74, 75, 76, + 49, 0, 101, 0, 0, 0, 0, 52, 53, 54, + 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 0, 67, 68, 69, 70, 71, 0, 102, + 49, 72, 98, 73, 74, 75, 76, 52, 53, 54, + 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 0, 67, 68, 69, 70, 71, 0, 0, + 0, 72, 0, 73, 74, 75, 76 }; static const yytype_int8 yycheck[] = { - 54, 0, 3, 4, 5, 6, 7, 8, 9, 10, - 11, 12, 13, 14, 15, 16, 17, 28, 19, 20, - 26, 29, 18, 23, 30, 31, 0, 22, 28, 23, - 29, 29, 25, 87, 30, 31, 21, 29, 21, 29, - 55, 95, 53, 51, 90, 53, 83, 101, 29, -1, - -1, -1, 51, -1, 53, -1, -1, -1, -1, 113, - 61, 25, -1, 27, 60, 29, -1, -1, 32, 33, - 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, - 44, 45, 46, -1, 48, 49, 50, 51, -1, 53, - 54, -1, 56, 57, 58, 59, 25, -1, 27, -1, - -1, -1, -1, 32, 33, 34, 35, 36, 37, 38, - 39, 40, 41, 42, 43, 44, 45, 46, -1, 48, - 49, 50, -1, 52, 25, 54, 27, 56, 57, 58, - 59, 32, 33, 34, 35, 36, 37, 38, 39, 40, - 41, 42, 43, 44, 45, 46, -1, 48, 49, 50, - -1, -1, -1, 54, -1, 56, 57, 58, 59, 7, - 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, - 18, 19, 20, -1, -1, 23 + 51, 3, 4, 5, 6, 7, 8, 9, 10, 11, + 12, 13, 14, 15, 16, 17, 0, 0, 27, 28, + 26, 26, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 86, 21, 19, 26, 26, + 20, 22, 26, 94, 50, 50, 52, 23, 20, 100, + 59, 27, 28, 25, 18, 18, 26, 54, 60, 89, + 111, 82, 27, 22, -1, 24, 50, 26, 52, -1, + 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, + 39, 40, 41, 42, 43, -1, 45, 46, 47, 48, + 49, 50, -1, 52, 53, -1, 55, 56, 57, 58, + 22, -1, 24, -1, -1, -1, -1, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, + 42, 43, -1, 45, 46, 47, 48, 49, -1, 51, + 22, 53, 24, 55, 56, 57, 58, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, + 42, 43, -1, 45, 46, 47, 48, 49, -1, -1, + -1, 53, -1, 55, 56, 57, 58 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const yytype_uint8 yystos[] = { - 0, 63, 64, 65, 0, 84, 3, 4, 5, 6, + 0, 62, 63, 64, 0, 83, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, - 17, 19, 20, 61, 67, 29, 51, 53, 77, 78, - 79, 81, 82, 83, 22, 66, 66, 66, 66, 66, - 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, - 66, 68, 25, 27, 29, 32, 33, 34, 35, 36, - 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, - 48, 49, 50, 54, 56, 57, 58, 59, 71, 72, - 73, 74, 75, 76, 79, 80, 77, 29, 23, 28, - 26, 30, 31, 69, 70, 29, 79, 68, 25, 27, - 75, 29, 27, 52, 68, 23, 18, 30, 60, 70, - 21, 21, 68, 29, 55, 68, 68 + 17, 60, 66, 26, 50, 52, 76, 77, 78, 80, + 81, 82, 19, 65, 65, 65, 65, 65, 65, 65, + 65, 65, 65, 65, 65, 65, 65, 65, 67, 22, + 24, 26, 29, 30, 31, 32, 33, 34, 35, 36, + 37, 38, 39, 40, 41, 42, 43, 45, 46, 47, + 48, 49, 53, 55, 56, 57, 58, 70, 71, 72, + 73, 74, 75, 78, 79, 76, 26, 20, 25, 23, + 27, 28, 68, 69, 26, 78, 67, 22, 24, 74, + 26, 24, 51, 67, 20, 27, 59, 69, 18, 18, + 67, 26, 54, 67, 67 }; /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_uint8 yyr1[] = { - 0, 62, 63, 64, 65, 65, 66, 66, 67, 67, - 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, - 67, 67, 67, 67, 67, 68, 68, 69, 69, 69, - 69, 69, 69, 70, 70, 70, 71, 71, 71, 71, - 71, 71, 71, 71, 71, 72, 72, 72, 72, 72, - 72, 72, 72, 72, 73, 73, 74, 74, 75, 75, - 75, 75, 75, 75, 76, 76, 77, 77, 77, 78, - 79, 79, 80, 81, 81, 81, 81, 82, 82, 83, - 83, 84, 84 + 0, 61, 62, 63, 64, 64, 65, 65, 66, 66, + 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, + 66, 66, 66, 67, 67, 68, 68, 68, 68, 68, + 69, 69, 69, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 71, 71, 71, 71, 71, 71, 71, + 71, 71, 71, 72, 72, 73, 73, 74, 74, 74, + 74, 74, 74, 75, 75, 76, 76, 76, 77, 78, + 78, 79, 80, 80, 80, 80, 81, 81, 82, 82, + 83, 83 }; /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ @@ -1464,13 +1487,13 @@ static const yytype_uint8 yyr2[] = { 0, 2, 2, 2, 0, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 1, 0, 2, 2, 2, 2, - 2, 1, 1, 1, 2, 2, 1, 1, 1, 1, + 2, 2, 2, 0, 2, 2, 2, 2, 1, 1, + 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 2, 0, 2, 3, 1, - 3, 1, 3, 3, 4, 4, 5, 2, 3, 1, - 1, 0, 2 + 1, 1, 1, 1, 2, 0, 2, 3, 1, 3, + 1, 3, 3, 4, 4, 5, 2, 3, 1, 1, + 0, 2 }; @@ -2056,7 +2079,7 @@ yyparse (void) yychar = YYEMPTY; /* Cause a token to be read. */ /* User initialization code. */ -#line 701 "gabc/gabc-score-determination.y" /* yacc.c:1429 */ +#line 729 "gabc/gabc-score-determination.y" /* yacc.c:1429 */ { yylloc.first_line = 1; yylloc.first_column = 0; @@ -2066,7 +2089,7 @@ yyparse (void) yylloc.last_offset = 0; } -#line 2070 "gabc/gabc-score-determination-y.c" /* yacc.c:1429 */ +#line 2093 "gabc/gabc-score-determination-y.c" /* yacc.c:1429 */ yylsp[0] = yylloc; goto yysetstate; @@ -2253,56 +2276,41 @@ yyreduce: switch (yyn) { case 3: -#line 740 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ +#line 769 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ { end_definitions(); } -#line 2261 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ +#line 2284 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ break; case 6: -#line 750 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ +#line 779 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ { (yyval).text = (yyvsp[-1]).text; } -#line 2269 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ +#line 2292 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ break; case 7: -#line 754 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ +#line 783 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ { (yyval).text = NULL; } -#line 2277 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ +#line 2300 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ break; case 8: -#line 760 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ - { - gregorio_add_score_header(score, (yyvsp[-1]).text, (yyvsp[0]).text); - number_of_voices=atoi((yyvsp[0]).text); - if (number_of_voices > MAX_NUMBER_OF_VOICES) { - gregorio_messagef("det_score", VERBOSITY_WARNING, 0, - _("can't define %d voices, maximum is %d"), - number_of_voices, MAX_NUMBER_OF_VOICES); - } - score->number_of_voices = number_of_voices; - } -#line 2292 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ - break; - - case 9: -#line 770 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ +#line 789 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ { /* these definitions are not passed through */ free(macros[(yyvsp[-1]).character - '0']); macros[(yyvsp[-1]).character - '0'] = (yyvsp[0]).text; } -#line 2302 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ +#line 2310 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ break; - case 10: -#line 775 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ + case 9: +#line 794 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ { if ((yyvsp[0]).text == NULL) { gregorio_message("name can't be empty","det_score", @@ -2312,72 +2320,72 @@ yyreduce: gregorio_add_score_header(score, (yyvsp[-1]).text, (yyvsp[0]).text); score->name = (yyvsp[0]).text; } -#line 2316 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ +#line 2324 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ break; - case 11: -#line 784 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ + case 10: +#line 803 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ { check_multiple("language", got_language); gregorio_add_score_header(score, (yyvsp[-1]).text, (yyvsp[0]).text); gregorio_set_centering_language((yyvsp[0]).text); got_language = true; } -#line 2327 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ +#line 2335 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ break; - case 12: -#line 790 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ + case 11: +#line 809 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ { check_multiple("gabc-copyright", score->gabc_copyright != NULL); gregorio_add_score_header(score, (yyvsp[-1]).text, (yyvsp[0]).text); score->gabc_copyright = (yyvsp[0]).text; } -#line 2337 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ +#line 2345 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ break; - case 13: -#line 795 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ + case 12: +#line 814 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ { check_multiple("score_copyright", score->score_copyright != NULL); gregorio_add_score_header(score, (yyvsp[-1]).text, (yyvsp[0]).text); score->score_copyright = (yyvsp[0]).text; } -#line 2347 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ +#line 2355 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ break; - case 14: -#line 800 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ + case 13: +#line 819 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ { check_multiple("mode", score->mode != 0); gregorio_add_score_header(score, (yyvsp[-1]).text, (yyvsp[0]).text); score->mode = (yyvsp[0]).text; } -#line 2357 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ +#line 2365 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ break; - case 15: -#line 805 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ + case 14: +#line 824 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ { check_multiple("mode-modifier", score->mode_modifier != NULL); gregorio_add_score_header(score, (yyvsp[-1]).text, (yyvsp[0]).text); score->mode_modifier = (yyvsp[0]).text; } -#line 2367 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ +#line 2375 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ break; - case 16: -#line 810 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ + case 15: +#line 829 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ { check_multiple("mode-differentia", score->mode_differentia != NULL); gregorio_add_score_header(score, (yyvsp[-1]).text, (yyvsp[0]).text); score->mode_differentia = (yyvsp[0]).text; } -#line 2377 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ +#line 2385 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ break; - case 17: -#line 815 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ + case 16: +#line 834 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ { check_multiple("staff-lines", got_staff_lines); if ((yyvsp[0]).text) { @@ -2386,11 +2394,11 @@ yyreduce: got_staff_lines = true; } } -#line 2390 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ +#line 2398 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ break; - case 18: -#line 823 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ + case 17: +#line 842 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ { check_multiple("nabc lines", score->nabc_lines != 0); if ((yyvsp[0]).text) { @@ -2399,11 +2407,11 @@ yyreduce: score->nabc_lines=nabc_lines; } } -#line 2403 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ +#line 2411 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ break; - case 19: -#line 831 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ + case 18: +#line 850 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ { if ((yyvsp[0]).text) { /* DEPRECATED by 4.1 */ @@ -2414,11 +2422,11 @@ yyreduce: free((yyvsp[0]).text); } } -#line 2418 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ +#line 2426 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ break; - case 20: -#line 841 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ + case 19: +#line 860 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ { if (score->annotation [MAX_ANNOTATIONS - 1]) { gregorio_messagef("det_score", VERBOSITY_WARNING, 0, @@ -2428,119 +2436,59 @@ yyreduce: gregorio_add_score_header(score, (yyvsp[-1]).text, (yyvsp[0]).text); gregorio_set_score_annotation(score, (yyvsp[0]).text); } -#line 2432 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ +#line 2440 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ break; - case 21: -#line 850 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ + case 20: +#line 869 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ { check_multiple("author", score->author != NULL); gregorio_add_score_header(score, (yyvsp[-1]).text, (yyvsp[0]).text); score->author = (yyvsp[0]).text; } -#line 2442 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ +#line 2450 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ break; - case 22: -#line 855 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ + case 21: +#line 874 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ { gregorio_add_score_header(score, (yyvsp[-1]).text, (yyvsp[0]).text); score->legacy_oriscus_orientation = (strcmp((yyvsp[0]).text, "legacy") == 0); } -#line 2451 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ - break; - - case 23: -#line 859 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ - { - gregorio_add_score_header(score, (yyvsp[-1]).text, (yyvsp[0]).text); - } #line 2459 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ break; - case 24: -#line 862 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ + case 22: +#line 878 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ { - next_voice_info(); + gregorio_add_score_header(score, (yyvsp[-1]).text, (yyvsp[0]).text); } #line 2467 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ break; - case 27: -#line 872 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ + case 25: +#line 888 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ { - if (voice<number_of_voices) { - gabc_y_add_notes((yyvsp[-1]).text, (yylsp[-1])); - free((yyvsp[-1]).text); - } - else { - gregorio_messagef("det_score", VERBOSITY_ERROR, 0, - ngt_("too many voices in note : %d found, %d expected", - "too many voices in note : %d found, %d expected", - number_of_voices), voice+1, number_of_voices); - } - if (voice<number_of_voices-1) { - gregorio_messagef("det_score", VERBOSITY_INFO, 0, - ngt_("not enough voices in note : %d found, %d expected, " - "completing with empty neume", "not enough voices in note " - ": %d found, %d expected, completing with empty neume", - voice+1), voice+1, number_of_voices); - complete_with_nulls(voice); - } - voice=0; + gabc_y_add_notes((yyvsp[-1]).text, (yylsp[-1])); + free((yyvsp[-1]).text); nabc_state=0; } -#line 2494 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ +#line 2477 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ break; - case 28: -#line 894 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ + case 26: +#line 893 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ { - if (voice<number_of_voices) { - gabc_y_add_notes((yyvsp[-1]).text, (yylsp[-1])); - free((yyvsp[-1]).text); - } - else { - gregorio_messagef("det_score", VERBOSITY_ERROR, 0, - ngt_("too many voices in note : %d found, %d expected", - "too many voices in note : %d found, %d expected", - number_of_voices), voice+1, number_of_voices); - } - if (voice<number_of_voices-1) { - gregorio_messagef("det_score", VERBOSITY_INFO, 0, - ngt_("not enough voices in note : %d found, %d expected, " - "completing with empty neume", "not enough voices in note " - ": %d found, %d expected, completing with empty neume", - voice+1), voice+1, number_of_voices); - complete_with_nulls(voice); - } - voice=0; + gabc_y_add_notes((yyvsp[-1]).text, (yylsp[-1])); + free((yyvsp[-1]).text); nabc_state=0; update_position_with_space(); } -#line 2522 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ - break; - - case 29: -#line 917 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ - { - if (voice<number_of_voices) { - gabc_y_add_notes((yyvsp[-1]).text, (yylsp[-1])); - free((yyvsp[-1]).text); - voice++; - } - else { - gregorio_messagef("det_score", VERBOSITY_ERROR, 0, - ngt_("too many voices in note : %d found, %d expected", - "too many voices in note : %d found, %d expected", - number_of_voices), voice+1, number_of_voices); - } - } -#line 2540 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ +#line 2488 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ break; - case 30: -#line 930 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ + case 27: +#line 899 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ { if (!nabc_lines) { gregorio_message(_("You used character \"|\" in gabc without " @@ -2548,334 +2496,346 @@ yyreduce: "set it in your gabc header."), "det_score", VERBOSITY_FATAL, 0); } - if (voice<number_of_voices) { - gabc_y_add_notes((yyvsp[-1]).text, (yylsp[-1])); - free((yyvsp[-1]).text); - nabc_state = (nabc_state + 1) % (nabc_lines+1); - } + gabc_y_add_notes((yyvsp[-1]).text, (yylsp[-1])); + free((yyvsp[-1]).text); + nabc_state = (nabc_state + 1) % (nabc_lines+1); } -#line 2558 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ +#line 2504 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ break; - case 31: -#line 943 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ + case 28: +#line 910 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ { elements[voice]=NULL; - voice=0; nabc_state=0; } -#line 2568 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ +#line 2513 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ break; - case 32: -#line 948 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ + case 29: +#line 914 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ { elements[voice]=NULL; - voice=0; nabc_state=0; update_position_with_space(); } -#line 2579 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ +#line 2523 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ break; - case 36: -#line 963 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ + case 33: +#line 928 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ { gregorio_gabc_add_style(ST_ITALIC); } -#line 2587 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ +#line 2531 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ break; - case 37: -#line 966 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ + case 34: +#line 931 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ { gregorio_gabc_add_style(ST_TT); } -#line 2595 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ +#line 2539 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ break; - case 38: -#line 969 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ + case 35: +#line 934 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ { gregorio_gabc_add_style(ST_UNDERLINED); } -#line 2603 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ +#line 2547 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ break; - case 39: -#line 972 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ + case 36: +#line 937 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ { gregorio_gabc_add_style(ST_COLORED); } -#line 2611 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ +#line 2555 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ break; - case 40: -#line 975 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ + case 37: +#line 940 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ { gregorio_gabc_add_style(ST_BOLD); } -#line 2619 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ +#line 2563 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ break; - case 41: -#line 978 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ + case 38: +#line 943 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ { gregorio_gabc_add_style(ST_SMALL_CAPS); } -#line 2627 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ +#line 2571 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ break; - case 42: -#line 981 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ + case 39: +#line 946 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ { gregorio_gabc_add_style(ST_VERBATIM); } -#line 2635 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ +#line 2579 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ break; - case 43: -#line 984 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ + case 40: +#line 949 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ { gregorio_gabc_add_style(ST_SPECIAL_CHAR); } -#line 2643 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ +#line 2587 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ break; - case 44: -#line 987 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ + case 41: +#line 952 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ + { + gregorio_gabc_add_style(ST_ELISION); + } +#line 2595 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ + break; + + case 42: +#line 955 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ { if (!center_is_determined) { gregorio_gabc_add_style(ST_FORCED_CENTER); center_is_determined=CENTER_HALF_DETERMINED; } } -#line 2654 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ +#line 2606 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ break; - case 45: -#line 996 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ + case 43: +#line 964 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ { gregorio_gabc_end_style(ST_ITALIC); } -#line 2662 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ +#line 2614 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ break; - case 46: -#line 999 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ + case 44: +#line 967 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ { gregorio_gabc_end_style(ST_TT); } -#line 2670 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ +#line 2622 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ break; - case 47: -#line 1002 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ + case 45: +#line 970 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ { gregorio_gabc_end_style(ST_UNDERLINED); } -#line 2678 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ +#line 2630 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ break; - case 48: -#line 1005 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ + case 46: +#line 973 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ { gregorio_gabc_end_style(ST_COLORED); } -#line 2686 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ +#line 2638 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ break; - case 49: -#line 1008 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ + case 47: +#line 976 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ { gregorio_gabc_end_style(ST_BOLD); } -#line 2694 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ +#line 2646 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ break; - case 50: -#line 1011 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ + case 48: +#line 979 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ { gregorio_gabc_end_style(ST_SMALL_CAPS); } -#line 2702 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ +#line 2654 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ break; - case 51: -#line 1014 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ + case 49: +#line 982 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ { gregorio_gabc_end_style(ST_VERBATIM); } -#line 2710 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ +#line 2662 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ break; - case 52: -#line 1017 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ + case 50: +#line 985 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ { gregorio_gabc_end_style(ST_SPECIAL_CHAR); } -#line 2718 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ +#line 2670 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ break; - case 53: -#line 1020 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ + case 51: +#line 988 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ + { + gregorio_gabc_end_style(ST_ELISION); + } +#line 2678 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ + break; + + case 52: +#line 991 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ { if (center_is_determined==CENTER_HALF_DETERMINED) { gregorio_gabc_end_style(ST_FORCED_CENTER); center_is_determined=CENTER_FULLY_DETERMINED; } } -#line 2729 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ +#line 2689 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ break; - case 54: -#line 1029 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ + case 53: +#line 1000 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ { euouae = EUOUAE_BEGINNING; } -#line 2737 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ +#line 2697 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ break; - case 55: -#line 1032 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ + case 54: +#line 1003 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ { euouae = EUOUAE_END; } -#line 2745 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ +#line 2705 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ break; - case 56: -#line 1038 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ + case 55: +#line 1009 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ { no_linebreak_area = NLBA_BEGINNING; } -#line 2753 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ +#line 2713 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ break; - case 57: -#line 1041 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ + case 56: +#line 1012 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ { no_linebreak_area = NLBA_END; } -#line 2761 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ +#line 2721 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ break; - case 59: -#line 1048 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ + case 58: +#line 1019 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ { gregorio_gabc_add_text((yyvsp[0]).text); } -#line 2769 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ +#line 2729 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ break; - case 64: -#line 1058 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ + case 63: +#line 1029 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ { gregorio_gabc_add_text(gregorio_strdup("-")); } -#line 2777 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ +#line 2737 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ break; - case 65: -#line 1061 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ + case 64: +#line 1032 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ { gregorio_gabc_add_text(gregorio_strdup("-")); } -#line 2785 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ +#line 2745 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ break; - case 69: -#line 1072 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ + case 68: +#line 1043 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ { start_translation(TR_NORMAL); } -#line 2793 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ +#line 2753 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ break; - case 70: -#line 1078 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ + case 69: +#line 1049 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ { end_translation(); } -#line 2801 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ +#line 2761 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ break; - case 71: -#line 1081 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ + case 70: +#line 1052 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ { start_translation(TR_WITH_CENTER_END); } -#line 2809 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ +#line 2769 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ break; - case 72: -#line 1087 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ + case 71: +#line 1058 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ { abovelinestext = (yyvsp[-1]).text; } -#line 2817 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ +#line 2777 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ break; - case 73: -#line 1093 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ + case 72: +#line 1064 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ { - rebuild_characters(); + ready_characters(); first_text_character = current_character; close_syllable(&(yylsp[-2])); } -#line 2827 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ +#line 2787 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ break; - case 74: -#line 1098 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ + case 73: +#line 1069 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ { gregorio_gabc_add_style(ST_VERBATIM); gregorio_gabc_add_text(gregorio_strdup("\\GreForceHyphen")); gregorio_gabc_end_style(ST_VERBATIM); - rebuild_characters(); + ready_characters(); first_text_character = current_character; close_syllable(&(yylsp[-3])); } -#line 2840 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ +#line 2800 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ break; - case 75: -#line 1106 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ + case 74: +#line 1077 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ { close_syllable(&(yylsp[-3])); } -#line 2848 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ +#line 2808 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ break; - case 76: -#line 1109 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ + case 75: +#line 1080 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ { gregorio_gabc_add_style(ST_VERBATIM); gregorio_gabc_add_text(gregorio_strdup("\\GreForceHyphen")); gregorio_gabc_end_style(ST_VERBATIM); close_syllable(&(yylsp[-4])); } -#line 2859 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ +#line 2819 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ break; - case 77: -#line 1118 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ + case 76: +#line 1089 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ { close_syllable(NULL); } -#line 2867 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ +#line 2827 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ break; - case 78: -#line 1121 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ + case 77: +#line 1092 "gabc/gabc-score-determination.y" /* yacc.c:1646 */ { close_syllable(NULL); } -#line 2875 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ +#line 2835 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ break; -#line 2879 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ +#line 2839 "gabc/gabc-score-determination-y.c" /* yacc.c:1646 */ default: break; } /* User semantic actions sometimes alter yychar, and that requires diff --git a/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc-score-determination-y.h b/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc-score-determination-y.h index 7daec08eaf2..123dbc1c3a7 100644 --- a/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc-score-determination-y.h +++ b/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc-score-determination-y.h @@ -49,61 +49,60 @@ extern int gabc_score_determination_debug; AUTHOR = 259, GABC_COPYRIGHT = 260, SCORE_COPYRIGHT = 261, - NUMBER_OF_VOICES = 262, - LANGUAGE = 263, - STAFF_LINES = 264, - ORISCUS_ORIENTATION = 265, - DEF_MACRO = 266, - OTHER_HEADER = 267, - ANNOTATION = 268, - MODE = 269, - MODE_MODIFIER = 270, - MODE_DIFFERENTIA = 271, - INITIAL_STYLE = 272, - VOICE_CUT = 273, - VOICE_CHANGE = 274, - END_OF_DEFINITIONS = 275, - END_OF_FILE = 276, - COLON = 277, - SEMICOLON = 278, - SPACE = 279, - CHARACTERS = 280, - NOTES = 281, - HYPHEN = 282, - ATTRIBUTE = 283, - OPENING_BRACKET = 284, - CLOSING_BRACKET = 285, - CLOSING_BRACKET_WITH_SPACE = 286, - I_BEGINNING = 287, - I_END = 288, - TT_BEGINNING = 289, - TT_END = 290, - UL_BEGINNING = 291, - UL_END = 292, - C_BEGINNING = 293, - C_END = 294, - B_BEGINNING = 295, - B_END = 296, - SC_BEGINNING = 297, - SC_END = 298, - SP_BEGINNING = 299, - SP_END = 300, - VERB_BEGINNING = 301, - VERB = 302, - VERB_END = 303, - CENTER_BEGINNING = 304, - CENTER_END = 305, - TRANSLATION_BEGINNING = 306, - TRANSLATION_END = 307, - TRANSLATION_CENTER_END = 308, - ALT_BEGIN = 309, - ALT_END = 310, - BNLBA = 311, - ENLBA = 312, - EUOUAE_B = 313, - EUOUAE_E = 314, - NABC_CUT = 315, - NABC_LINES = 316 + LANGUAGE = 262, + STAFF_LINES = 263, + ORISCUS_ORIENTATION = 264, + DEF_MACRO = 265, + OTHER_HEADER = 266, + ANNOTATION = 267, + MODE = 268, + MODE_MODIFIER = 269, + MODE_DIFFERENTIA = 270, + INITIAL_STYLE = 271, + END_OF_DEFINITIONS = 272, + END_OF_FILE = 273, + COLON = 274, + SEMICOLON = 275, + SPACE = 276, + CHARACTERS = 277, + NOTES = 278, + HYPHEN = 279, + ATTRIBUTE = 280, + OPENING_BRACKET = 281, + CLOSING_BRACKET = 282, + CLOSING_BRACKET_WITH_SPACE = 283, + I_BEGIN = 284, + I_END = 285, + TT_BEGIN = 286, + TT_END = 287, + UL_BEGIN = 288, + UL_END = 289, + C_BEGIN = 290, + C_END = 291, + B_BEGIN = 292, + B_END = 293, + SC_BEGIN = 294, + SC_END = 295, + SP_BEGIN = 296, + SP_END = 297, + VERB_BEGIN = 298, + VERB = 299, + VERB_END = 300, + CENTER_BEGIN = 301, + CENTER_END = 302, + ELISION_BEGIN = 303, + ELISION_END = 304, + TRANSLATION_BEGIN = 305, + TRANSLATION_END = 306, + TRANSLATION_CENTER_END = 307, + ALT_BEGIN = 308, + ALT_END = 309, + NLBA_B = 310, + NLBA_E = 311, + EUOUAE_B = 312, + EUOUAE_E = 313, + NABC_CUT = 314, + NABC_LINES = 315 }; #endif /* Tokens. */ @@ -111,61 +110,60 @@ extern int gabc_score_determination_debug; #define AUTHOR 259 #define GABC_COPYRIGHT 260 #define SCORE_COPYRIGHT 261 -#define NUMBER_OF_VOICES 262 -#define LANGUAGE 263 -#define STAFF_LINES 264 -#define ORISCUS_ORIENTATION 265 -#define DEF_MACRO 266 -#define OTHER_HEADER 267 -#define ANNOTATION 268 -#define MODE 269 -#define MODE_MODIFIER 270 -#define MODE_DIFFERENTIA 271 -#define INITIAL_STYLE 272 -#define VOICE_CUT 273 -#define VOICE_CHANGE 274 -#define END_OF_DEFINITIONS 275 -#define END_OF_FILE 276 -#define COLON 277 -#define SEMICOLON 278 -#define SPACE 279 -#define CHARACTERS 280 -#define NOTES 281 -#define HYPHEN 282 -#define ATTRIBUTE 283 -#define OPENING_BRACKET 284 -#define CLOSING_BRACKET 285 -#define CLOSING_BRACKET_WITH_SPACE 286 -#define I_BEGINNING 287 -#define I_END 288 -#define TT_BEGINNING 289 -#define TT_END 290 -#define UL_BEGINNING 291 -#define UL_END 292 -#define C_BEGINNING 293 -#define C_END 294 -#define B_BEGINNING 295 -#define B_END 296 -#define SC_BEGINNING 297 -#define SC_END 298 -#define SP_BEGINNING 299 -#define SP_END 300 -#define VERB_BEGINNING 301 -#define VERB 302 -#define VERB_END 303 -#define CENTER_BEGINNING 304 -#define CENTER_END 305 -#define TRANSLATION_BEGINNING 306 -#define TRANSLATION_END 307 -#define TRANSLATION_CENTER_END 308 -#define ALT_BEGIN 309 -#define ALT_END 310 -#define BNLBA 311 -#define ENLBA 312 -#define EUOUAE_B 313 -#define EUOUAE_E 314 -#define NABC_CUT 315 -#define NABC_LINES 316 +#define LANGUAGE 262 +#define STAFF_LINES 263 +#define ORISCUS_ORIENTATION 264 +#define DEF_MACRO 265 +#define OTHER_HEADER 266 +#define ANNOTATION 267 +#define MODE 268 +#define MODE_MODIFIER 269 +#define MODE_DIFFERENTIA 270 +#define INITIAL_STYLE 271 +#define END_OF_DEFINITIONS 272 +#define END_OF_FILE 273 +#define COLON 274 +#define SEMICOLON 275 +#define SPACE 276 +#define CHARACTERS 277 +#define NOTES 278 +#define HYPHEN 279 +#define ATTRIBUTE 280 +#define OPENING_BRACKET 281 +#define CLOSING_BRACKET 282 +#define CLOSING_BRACKET_WITH_SPACE 283 +#define I_BEGIN 284 +#define I_END 285 +#define TT_BEGIN 286 +#define TT_END 287 +#define UL_BEGIN 288 +#define UL_END 289 +#define C_BEGIN 290 +#define C_END 291 +#define B_BEGIN 292 +#define B_END 293 +#define SC_BEGIN 294 +#define SC_END 295 +#define SP_BEGIN 296 +#define SP_END 297 +#define VERB_BEGIN 298 +#define VERB 299 +#define VERB_END 300 +#define CENTER_BEGIN 301 +#define CENTER_END 302 +#define ELISION_BEGIN 303 +#define ELISION_END 304 +#define TRANSLATION_BEGIN 305 +#define TRANSLATION_END 306 +#define TRANSLATION_CENTER_END 307 +#define ALT_BEGIN 308 +#define ALT_END 309 +#define NLBA_B 310 +#define NLBA_E 311 +#define EUOUAE_B 312 +#define EUOUAE_E 313 +#define NABC_CUT 314 +#define NABC_LINES 315 /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED diff --git a/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc-score-determination.l b/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc-score-determination.l index b0c695f383f..a660443dc8d 100644 --- a/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc-score-determination.l +++ b/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc-score-determination.l @@ -130,7 +130,7 @@ semicolon. */ gregorio_strdup(gabc_score_determination_text); return ATTRIBUTE; } -<attribute>;(;|[\n\r]+) { +<attribute>;;?[\n\r]+ { BEGIN(INITIAL); return SEMICOLON; } @@ -138,11 +138,6 @@ semicolon. */ gabc_score_determination_lval.character = gabc_score_determination_text[5]; return DEF_MACRO; } -<INITIAL>number-of-voices { - gabc_score_determination_lval.text = - gregorio_strdup(gabc_score_determination_text); - return NUMBER_OF_VOICES; - } <INITIAL>name { gabc_score_determination_lval.text = gregorio_strdup(gabc_score_determination_text); @@ -212,10 +207,7 @@ semicolon. */ gregorio_strdup(gabc_score_determination_text); return OTHER_HEADER; } -<INITIAL>--(.*) { - return VOICE_CHANGE; - } -<INITIAL>%(%)*(\n|\r)+ { +<INITIAL>%%+(\n|\r)+ { BEGIN(score); return END_OF_DEFINITIONS; } @@ -232,16 +224,16 @@ semicolon. */ <score>- { return HYPHEN; } -<score,style><i> { - BEGIN(style); - style_stack ++; - return I_BEGINNING; - } <score,style><nlba> { - return BNLBA; + return NLBA_B; } <score,style><\/nlba> { - return ENLBA; + return NLBA_E; + } +<score,style><i> { + BEGIN(style); + style_stack ++; + return I_BEGIN; } <style><\/i> { style_stack --; @@ -253,7 +245,7 @@ semicolon. */ <score,style><tt> { BEGIN(style); style_stack ++; - return TT_BEGINNING; + return TT_BEGIN; } <style><\/tt> { style_stack --; @@ -265,7 +257,7 @@ semicolon. */ <score,style><ul> { BEGIN(style); style_stack ++; - return UL_BEGINNING; + return UL_BEGIN; } <style><\/ul> { style_stack --; @@ -277,7 +269,7 @@ semicolon. */ <score,style><c> { BEGIN(style); style_stack ++; - return C_BEGINNING; + return C_BEGIN; } <style><\/c> { style_stack --; @@ -289,7 +281,7 @@ semicolon. */ <score,style><b> { BEGIN(style); style_stack ++; - return B_BEGINNING; + return B_BEGIN; } <style><\/b> { style_stack --; @@ -301,7 +293,7 @@ semicolon. */ <score,style><sc> { BEGIN(style); style_stack ++; - return SC_BEGINNING; + return SC_BEGIN; } <style><\/sc> { style_stack --; @@ -310,10 +302,22 @@ semicolon. */ } return SC_END; } +<score,style><e> { + BEGIN(style); + style_stack ++; + return ELISION_BEGIN; + } +<style><\/e> { + style_stack --; + if (style_stack == 0) { + BEGIN(score); + } + return ELISION_END; + } <score,style><sp> { BEGIN(style); style_stack ++; - return SP_BEGINNING; + return SP_BEGIN; } <style><\/sp> { style_stack --; @@ -338,7 +342,7 @@ semicolon. */ } <style,score><v> { BEGIN(verb); - return VERB_BEGINNING; + return VERB_BEGIN; } <verb><\/v> { if (style_stack == 0) { @@ -359,7 +363,7 @@ semicolon. */ return CHARACTERS; } <score,style>\{ { - return CENTER_BEGINNING; + return CENTER_BEGIN; } <score,style>\} { return CENTER_END; @@ -387,7 +391,7 @@ semicolon. */ return TRANSLATION_CENTER_END; } <score>\[ { - return TRANSLATION_BEGINNING; + return TRANSLATION_BEGIN; } <score>\] { return TRANSLATION_END; @@ -396,14 +400,11 @@ semicolon. */ BEGIN(notes); return OPENING_BRACKET; } -<notes>[^&|\)]* { +<notes>[^|\)]* { gabc_score_determination_lval.text = gregorio_strdup(gabc_score_determination_text); return NOTES; } -<notes>& { - return VOICE_CUT; - } <notes>\| { return NABC_CUT; } @@ -423,5 +424,10 @@ semicolon. */ yyterminate(); } } +.|\n { + gregorio_messagef("gabc_score_determination_lex", VERBOSITY_ERROR, 0, + _("unrecognized character: \"%c\""), + gabc_score_determination_text[0]); + } %% diff --git a/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc-score-determination.y b/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc-score-determination.y index 128236babd3..5a8460ac550 100644 --- a/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc-score-determination.y +++ b/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc-score-determination.y @@ -175,30 +175,65 @@ static void fix_custos(gregorio_score *score_to_check) } /* - * A function that checks to score integrity. For now it is... quite - * ridiculous... but it might be improved in the future. + * A function that checks the score integrity. */ -static int check_score_integrity(gregorio_score *score_to_check) +static bool check_score_integrity(gregorio_score *score_to_check) { - if (!score_to_check) { - return 0; + bool good = true; + + gregorio_assert(score_to_check, check_score_integrity, "score is NULL", + return false); + + if (score_to_check->first_syllable + && score_to_check->first_syllable->elements + && *(score_to_check->first_syllable->elements)) { + gregorio_character *ch; + if ((score_to_check->first_syllable->elements)[0]->type + == GRE_END_OF_LINE) { + gregorio_message( + "line break is not supported on the first syllable", + "check_score_integrity", VERBOSITY_ERROR, 0); + good = false; + } + if (gregorio_get_clef_change(score_to_check->first_syllable)) { + gregorio_message( + "clef change is not supported on the first syllable", + "check_score_integrity", VERBOSITY_ERROR, 0); + good = false; + } + /* check first syllable for elision at the beginning */ + for (ch = score_to_check->first_syllable->text; ch; + ch = ch->next_character) { + if (ch->is_character) { + break; + } else if (ch->cos.s.style == ST_VERBATIM + || ch->cos.s.style == ST_SPECIAL_CHAR) { + break; + } else if (ch->cos.s.style == ST_ELISION) { + gregorio_message( + _("score initial may not be in an elision"), + "rebuild_characters", VERBOSITY_ERROR, 0); + break; + } + } } - return 1; + + return good; } /* * Another function to be improved: this one checks the validity of the voice_infos. */ -static int check_infos_integrity(gregorio_score *score_to_check) +static bool check_infos_integrity(gregorio_score *score_to_check) { if (!score_to_check->name) { gregorio_message(_("no name specified, put `name:...;' at the " "beginning of the file, can be dangerous with some output " "formats"), "det_score", VERBOSITY_WARNING, 0); } - return 1; + return true; } /* @@ -215,8 +250,8 @@ static void initialize_variables(void) gregorio_add_voice_info(¤t_voice_info); score->first_voice_info = current_voice_info; /* other initializations */ - number_of_voices = 0; - voice = 1; + number_of_voices = 1; + voice = 0; /* first (and only) voice */ current_character = NULL; first_translation_character = NULL; first_text_character = NULL; @@ -247,40 +282,6 @@ static void free_variables(void) } } -/* see whether a voice_info is empty */ -static int voice_info_is_not_empty(const gregorio_voice_info *voice_info) -{ - return (voice_info->initial_clef.line); -} - -/* - * a function called when we see "--\n" that end the infos for a certain voice - */ -static void next_voice_info(void) -{ - /* we must do this test in the case where there would be a "--" before - * first_declarations */ - if (voice_info_is_not_empty(current_voice_info)) { - gregorio_add_voice_info(¤t_voice_info); - voice++; - } -} - -/* - * Function that frees the voice_infos for voices > final_count. Useful if - * there are too many voice_infos - */ - -static void reajust_voice_infos(gregorio_voice_info *voice_info, - int final_count) -{ - int i = 1; - while (voice_info && i <= final_count) { - voice_info = voice_info->next_voice_info; - } - gregorio_free_voice_infos(voice_info); -} - /* * Function called when we have reached the end of the definitions, it tries to * make the voice_infos coherent. @@ -289,39 +290,9 @@ static void end_definitions(void) { int i; - if (!check_infos_integrity(score)) { - gregorio_message(_("can't determine valid infos on the score"), - "det_score", VERBOSITY_ERROR, 0); - } - if (!number_of_voices) { - if (voice > MAX_NUMBER_OF_VOICES) { - voice = MAX_NUMBER_OF_VOICES; - reajust_voice_infos(score->first_voice_info, number_of_voices); - } - number_of_voices = voice; - score->number_of_voices = voice; - } else { - if (number_of_voices > voice) { - gregorio_messagef("det_score", VERBOSITY_WARNING, 0, - ngt_("not enough voice infos found: %d found, %d waited, " - "%d assumed", "not enough voice infos found: %d found, %d " - "waited, %d assumed", voice), voice, - number_of_voices, voice); - score->number_of_voices = voice; - number_of_voices = voice; - } else { - if (number_of_voices < voice) { - gregorio_messagef("det_score", VERBOSITY_WARNING, 0, - ngt_("too many voice infos found: %d found, %d " - "waited, %d assumed", "not enough voice infos found: " - "%d found, %d waited, %d assumed", - number_of_voices), voice, number_of_voices, - number_of_voices); - } - } - } - /* voice is now voice-1, so that it can be the index of elements */ - voice = 0; + gregorio_assert_only(check_infos_integrity(score), end_definitions, + "can't determine valid infos on the score"); + elements = (gregorio_element **) gregorio_malloc(number_of_voices * sizeof(gregorio_element *)); for (i = 0; i < number_of_voices; i++) { @@ -344,19 +315,6 @@ static gregorio_syllable *current_syllable = NULL; static char *abovelinestext = NULL; /* - * Function called when we see a ")", it completes the gregorio_element array - * of the syllable with NULL pointers. Usefull in the cases where for example - * you have two voices, but a voice that is silent on a certain syllable. - */ -static void complete_with_nulls(int last_voice) -{ - int i; - for (i = last_voice + 1; i < number_of_voices; i++) { - elements[i] = NULL; - } -} - -/* * Function called each time we find a space, it updates the current position. */ static void update_position_with_space(void) @@ -399,24 +357,41 @@ static void gregorio_set_translation_center_beginning( current_syllable->translation_type = TR_NORMAL; } -static void rebuild_characters(void) +static void ready_characters(void) { - /* we rebuild the first syllable text if it is the first syllable, or if - * it is the second when the first has no text. - * it is a patch for cases like (c4) Al(ab)le(ab) */ - if ((!score->first_syllable && current_character) - || (current_syllable && !current_syllable->previous_syllable - && !current_syllable->text && current_character)) { - /* leave the first syllable text untouched at this time */ + if (current_character) { gregorio_go_to_first_character_c(¤t_character); + if (!score->first_syllable || (current_syllable + && !current_syllable->previous_syllable + && !current_syllable->text)) { + started_first_word = true; + } + } +} - started_first_word = true; - } else { - gregorio_rebuild_characters(¤t_character, center_is_determined, - false); +static void rebuild_score_characters(void) +{ + if (score->first_syllable) { + gregorio_syllable *syllable; + /* leave the first syllable text untouched at this time */ + for (syllable = score->first_syllable->next_syllable; syllable; + syllable = syllable->next_syllable) { + const gregorio_character *t; + + /* find out if there is a forced center */ + gregorio_center_determination center = CENTER_NOT_DETERMINED; + for (t = syllable->text; t; t = t->next_character) { + if (!t->is_character && t->cos.s.style == ST_FORCED_CENTER) { + center = CENTER_FULLY_DETERMINED; + break; + } + } - if (started_first_word) { - gregorio_set_first_word(¤t_character); + gregorio_rebuild_characters(&(syllable->text), center, false); + + if (syllable->first_word) { + gregorio_set_first_word(&(syllable->text)); + } } } } @@ -427,7 +402,56 @@ static void rebuild_characters(void) static void close_syllable(YYLTYPE *loc) { - int i; + int i = 0; + gregorio_character *ch; + + /* make sure any elisions that are opened are closed within the syllable */ + for (ch = first_text_character; ch; ch = ch->next_character) { + if (!ch->is_character) { + switch (ch->cos.s.style) { + case ST_ELISION: + switch (ch->cos.s.type) { + case ST_T_BEGIN: + ++i; + if (i > 1) { + gregorio_message(_("elisions may not be nested"), + "close_syllable", VERBOSITY_ERROR, 0); + } + break; + + case ST_T_END: + --i; + /* the parser precludes this from failing here */ + gregorio_assert_only(i >= 0, close_syllable, + "encountered elision end with no beginning"); + break; + + case ST_T_NOTHING: + /* not reachable unless there's a programming error */ + /* LCOV_EXCL_START */ + gregorio_fail(close_syllable, "encountered ST_T_NOTHING"); + break; + /* LCOV_EXCL_STOP */ + } + break; + + case ST_FORCED_CENTER: + if (i > 0) { + gregorio_message( + _("forced center may not be within an elision"), + "close_syllable", VERBOSITY_ERROR, 0); + } + break; + + default: + break; + } + } + } + /* the parser precludes this from failing here */ + gregorio_assert_only(i == 0, close_syllable, + "encountered elision beginning with no end"); + gregorio_add_syllable(¤t_syllable, number_of_voices, elements, first_text_character, first_translation_character, position, abovelinestext, translation_type, no_linebreak_area, euouae, loc, @@ -468,7 +492,7 @@ static void close_syllable(YYLTYPE *loc) * the translation pointer instead of the text pointer */ static void start_translation(unsigned char asked_translation_type) { - rebuild_characters(); + ready_characters(); first_text_character = current_character; /* the middle letters of the translation have no sense */ center_is_determined = CENTER_FULLY_DETERMINED; @@ -478,7 +502,7 @@ static void start_translation(unsigned char asked_translation_type) static void end_translation(void) { - rebuild_characters(); + ready_characters(); first_translation_character = current_character; } @@ -557,10 +581,14 @@ static void determine_oriscus_orientation(gregorio_score *score) { S_ORISCUS_CAVUM_DESCENDENS; break; default: - gregorio_message(_("bad shape"), - "determine_oriscus_orientation", - VERBOSITY_ERROR, 0); + /* not reachable unless there's a + * programming error */ + /* LCOV_EXCL_START */ + gregorio_fail( + determine_oriscus_orientation, + "bad_shape"); break; + /* LCOV_EXCL_STOP */ } } else { /* ascending or the same */ switch(oriscus->u.note.shape) { @@ -573,10 +601,14 @@ static void determine_oriscus_orientation(gregorio_score *score) { S_ORISCUS_CAVUM_ASCENDENS; break; default: - gregorio_message(_("bad shape"), - "determine_oriscus_orientation", - VERBOSITY_ERROR, 0); + /* not reachable unless there's a + * programming error */ + /* LCOV_EXCL_START */ + gregorio_fail( + determine_oriscus_orientation, + "bad_shape"); break; + /* LCOV_EXCL_STOP */ } } oriscus = NULL; @@ -609,9 +641,11 @@ static void determine_oriscus_orientation(gregorio_score *score) { oriscus->u.note.shape = S_ORISCUS_CAVUM_DESCENDENS; break; default: - gregorio_message(_("bad shape"), "determine_oriscus_orientation", - VERBOSITY_ERROR, 0); + /* not reachable unless there's a programming error */ + /* LCOV_EXCL_START */ + gregorio_fail(determine_oriscus_orientation, "bad_shape"); break; + /* LCOV_EXCL_STOP */ } } } @@ -631,11 +665,8 @@ gregorio_score *gabc_read_score(FILE *f_in) sha1_process_bytes(GREGORIO_VERSION, strlen(GREGORIO_VERSION), &digester); /* the input file that flex will parse */ gabc_score_determination_in = f_in; - if (!f_in) { - gregorio_message(_("can't read stream from argument, returning NULL " - "pointer"), "det_score", VERBOSITY_ERROR, 0); - return NULL; - } + gregorio_assert(f_in, gabc_read_score, "can't read stream from NULL", + return NULL); initialize_variables(); /* the flex/bison main call, it will build the score (that we have * initialized) */ @@ -644,14 +675,14 @@ gregorio_score *gabc_read_score(FILE *f_in) determine_oriscus_orientation(score); } gregorio_fix_initial_keys(score, gregorio_default_clef); + rebuild_score_characters(); fix_custos(score); + gabc_det_notes_finish(); free_variables(); - /* the we check the validity and integrity of the score we have built. */ + /* then we check the validity and integrity of the score we have built. */ if (!check_score_integrity(score)) { - gregorio_free_score(score); - score = NULL; gregorio_message(_("unable to determine a valid score from file"), - "det_score", VERBOSITY_FATAL, 0); + "gabc_read_score", VERBOSITY_ERROR, 0); } sha1_finish_ctx(&digester, score->digest); return score; @@ -661,18 +692,16 @@ unsigned char nabc_state = 0; size_t nabc_lines = 0; static void gabc_y_add_notes(char *notes, YYLTYPE loc) { - gregorio_element *new_elements; - gregorio_element *last_element; if (nabc_state == 0) { if (!elements[voice]) { elements[voice] = gabc_det_elements_from_string(notes, ¤t_key, macros, &loc, score); current_element = elements[voice]; } else { - new_elements = gabc_det_elements_from_string(notes, - ¤t_key, macros, &loc, score); - last_element = elements[voice]; - while(last_element->next) { + gregorio_element *new_elements = gabc_det_elements_from_string( + notes, ¤t_key, macros, &loc, score); + gregorio_element *last_element = elements[voice]; + while (last_element->next) { last_element = last_element->next; } last_element->next = new_elements; @@ -684,10 +713,9 @@ static void gabc_y_add_notes(char *notes, YYLTYPE loc) { gregorio_add_element(&elements[voice], NULL); current_element = elements[voice]; } - if (!current_element) { - gregorio_message(_("current_element is null, this shouldn't " - "happen!"), "gabc_y_add_notes", VERBOSITY_FATAL, 0); - } + gregorio_assert(current_element, gabc_y_add_notes, + "current_element is null, this shouldn't happen!", + return); if (!current_element->nabc) { current_element->nabc = (char **) gregorio_calloc (nabc_lines, sizeof (char *)); @@ -708,25 +736,26 @@ static void gabc_y_add_notes(char *notes, YYLTYPE loc) { } %token NAME AUTHOR GABC_COPYRIGHT SCORE_COPYRIGHT -%token NUMBER_OF_VOICES LANGUAGE STAFF_LINES ORISCUS_ORIENTATION +%token LANGUAGE STAFF_LINES ORISCUS_ORIENTATION %token DEF_MACRO OTHER_HEADER %token ANNOTATION MODE MODE_MODIFIER MODE_DIFFERENTIA %token INITIAL_STYLE /* DEPRECATED by 4.1 */ -%token VOICE_CUT VOICE_CHANGE END_OF_DEFINITIONS END_OF_FILE +%token END_OF_DEFINITIONS END_OF_FILE %token COLON SEMICOLON SPACE CHARACTERS NOTES HYPHEN ATTRIBUTE %token OPENING_BRACKET CLOSING_BRACKET CLOSING_BRACKET_WITH_SPACE -%token I_BEGINNING I_END -%token TT_BEGINNING TT_END -%token UL_BEGINNING UL_END -%token C_BEGINNING C_END -%token B_BEGINNING B_END -%token SC_BEGINNING SC_END -%token SP_BEGINNING SP_END -%token VERB_BEGINNING VERB VERB_END -%token CENTER_BEGINNING CENTER_END -%token TRANSLATION_BEGINNING TRANSLATION_END TRANSLATION_CENTER_END +%token I_BEGIN I_END +%token TT_BEGIN TT_END +%token UL_BEGIN UL_END +%token C_BEGIN C_END +%token B_BEGIN B_END +%token SC_BEGIN SC_END +%token SP_BEGIN SP_END +%token VERB_BEGIN VERB VERB_END +%token CENTER_BEGIN CENTER_END +%token ELISION_BEGIN ELISION_END +%token TRANSLATION_BEGIN TRANSLATION_END TRANSLATION_CENTER_END %token ALT_BEGIN ALT_END -%token BNLBA ENLBA +%token NLBA_B NLBA_E %token EUOUAE_B EUOUAE_E %token NABC_CUT NABC_LINES @@ -757,17 +786,7 @@ attribute: ; definition: - NUMBER_OF_VOICES attribute { - gregorio_add_score_header(score, $1.text, $2.text); - number_of_voices=atoi($2.text); - if (number_of_voices > MAX_NUMBER_OF_VOICES) { - gregorio_messagef("det_score", VERBOSITY_WARNING, 0, - _("can't define %d voices, maximum is %d"), - number_of_voices, MAX_NUMBER_OF_VOICES); - } - score->number_of_voices = number_of_voices; - } - | DEF_MACRO attribute { + DEF_MACRO attribute { /* these definitions are not passed through */ free(macros[$1.character - '0']); macros[$1.character - '0'] = $2.text; @@ -859,9 +878,6 @@ definition: | OTHER_HEADER attribute { gregorio_add_score_header(score, $1.text, $2.text); } - | VOICE_CHANGE { - next_voice_info(); - } ; notes: @@ -870,63 +886,16 @@ notes: note: NOTES CLOSING_BRACKET { - if (voice<number_of_voices) { - gabc_y_add_notes($1.text, @1); - free($1.text); - } - else { - gregorio_messagef("det_score", VERBOSITY_ERROR, 0, - ngt_("too many voices in note : %d found, %d expected", - "too many voices in note : %d found, %d expected", - number_of_voices), voice+1, number_of_voices); - } - if (voice<number_of_voices-1) { - gregorio_messagef("det_score", VERBOSITY_INFO, 0, - ngt_("not enough voices in note : %d found, %d expected, " - "completing with empty neume", "not enough voices in note " - ": %d found, %d expected, completing with empty neume", - voice+1), voice+1, number_of_voices); - complete_with_nulls(voice); - } - voice=0; + gabc_y_add_notes($1.text, @1); + free($1.text); nabc_state=0; } | NOTES closing_bracket_with_space { - if (voice<number_of_voices) { - gabc_y_add_notes($1.text, @1); - free($1.text); - } - else { - gregorio_messagef("det_score", VERBOSITY_ERROR, 0, - ngt_("too many voices in note : %d found, %d expected", - "too many voices in note : %d found, %d expected", - number_of_voices), voice+1, number_of_voices); - } - if (voice<number_of_voices-1) { - gregorio_messagef("det_score", VERBOSITY_INFO, 0, - ngt_("not enough voices in note : %d found, %d expected, " - "completing with empty neume", "not enough voices in note " - ": %d found, %d expected, completing with empty neume", - voice+1), voice+1, number_of_voices); - complete_with_nulls(voice); - } - voice=0; + gabc_y_add_notes($1.text, @1); + free($1.text); nabc_state=0; update_position_with_space(); } - | NOTES VOICE_CUT { - if (voice<number_of_voices) { - gabc_y_add_notes($1.text, @1); - free($1.text); - voice++; - } - else { - gregorio_messagef("det_score", VERBOSITY_ERROR, 0, - ngt_("too many voices in note : %d found, %d expected", - "too many voices in note : %d found, %d expected", - number_of_voices), voice+1, number_of_voices); - } - } | NOTES NABC_CUT { if (!nabc_lines) { gregorio_message(_("You used character \"|\" in gabc without " @@ -934,20 +903,16 @@ note: "set it in your gabc header."), "det_score", VERBOSITY_FATAL, 0); } - if (voice<number_of_voices) { - gabc_y_add_notes($1.text, @1); - free($1.text); - nabc_state = (nabc_state + 1) % (nabc_lines+1); - } + gabc_y_add_notes($1.text, @1); + free($1.text); + nabc_state = (nabc_state + 1) % (nabc_lines+1); } | CLOSING_BRACKET { elements[voice]=NULL; - voice=0; nabc_state=0; } | closing_bracket_with_space { elements[voice]=NULL; - voice=0; nabc_state=0; update_position_with_space(); } @@ -960,31 +925,34 @@ closing_bracket_with_space: ; style_beginning: - I_BEGINNING { + I_BEGIN { gregorio_gabc_add_style(ST_ITALIC); } - | TT_BEGINNING { + | TT_BEGIN { gregorio_gabc_add_style(ST_TT); } - | UL_BEGINNING { + | UL_BEGIN { gregorio_gabc_add_style(ST_UNDERLINED); } - | C_BEGINNING { + | C_BEGIN { gregorio_gabc_add_style(ST_COLORED); } - | B_BEGINNING { + | B_BEGIN { gregorio_gabc_add_style(ST_BOLD); } - | SC_BEGINNING { + | SC_BEGIN { gregorio_gabc_add_style(ST_SMALL_CAPS); } - | VERB_BEGINNING { + | VERB_BEGIN { gregorio_gabc_add_style(ST_VERBATIM); } - | SP_BEGINNING { + | SP_BEGIN { gregorio_gabc_add_style(ST_SPECIAL_CHAR); } - | CENTER_BEGINNING { + | ELISION_BEGIN { + gregorio_gabc_add_style(ST_ELISION); + } + | CENTER_BEGIN { if (!center_is_determined) { gregorio_gabc_add_style(ST_FORCED_CENTER); center_is_determined=CENTER_HALF_DETERMINED; @@ -1017,6 +985,9 @@ style_end: | SP_END { gregorio_gabc_end_style(ST_SPECIAL_CHAR); } + | ELISION_END { + gregorio_gabc_end_style(ST_ELISION); + } | CENTER_END { if (center_is_determined==CENTER_HALF_DETERMINED) { gregorio_gabc_end_style(ST_FORCED_CENTER); @@ -1035,10 +1006,10 @@ euouae: ; linebreak_area: - BNLBA { + NLBA_B { no_linebreak_area = NLBA_BEGINNING; } - | ENLBA { + | NLBA_E { no_linebreak_area = NLBA_END; } ; @@ -1069,7 +1040,7 @@ text: ; translation_beginning: - TRANSLATION_BEGINNING { + TRANSLATION_BEGIN { start_translation(TR_NORMAL); } ; @@ -1091,7 +1062,7 @@ above_line_text: syllable_with_notes: text OPENING_BRACKET notes { - rebuild_characters(); + ready_characters(); first_text_character = current_character; close_syllable(&@1); } @@ -1099,7 +1070,7 @@ syllable_with_notes: gregorio_gabc_add_style(ST_VERBATIM); gregorio_gabc_add_text(gregorio_strdup("\\GreForceHyphen")); gregorio_gabc_end_style(ST_VERBATIM); - rebuild_characters(); + ready_characters(); first_text_character = current_character; close_syllable(&@1); } diff --git a/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc-write.c b/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc-write.c index 24c21512e10..5f4a68e24dc 100644 --- a/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc-write.c +++ b/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc-write.c @@ -44,12 +44,15 @@ static __inline char pitch_letter(const char height) { return result; } -static __inline void unsupported(const char *fn, const char *type, - const char *value) +/* not reachable unless there's a programming error */ +/* LCOV_EXCL_START */ +static __inline void unsupported(const char *fn, const int line, + const char *type, const char *value) { - gregorio_messagef(fn, VERBOSITY_ERROR, 0, _("unsupported %s %s"), type, - value); + gregorio_messagef(fn, VERBOSITY_ASSERTION, line, _("unsupported %s %s"), + type, value); } +/* LCOV_EXCL_STOP */ /* * Output one attribute, allowing for multi-line values @@ -64,12 +67,6 @@ static void gabc_write_str_attribute(FILE *f, const char *name, /* * - * This function write a gregorio_voice_info. Still very simple. - * - */ - -/* - * * Then we start the functions made to write the text of the syllable. See * comments on struct.h and struct-utils.c to understand more deeply. * @@ -102,6 +99,9 @@ static void gabc_write_begin(FILE *f, grestyle_style style) case ST_UNDERLINED: fprintf(f, "<ul>"); break; + case ST_ELISION: + fprintf(f, "<e>"); + break; case ST_INITIAL: case ST_CENTER: case ST_FIRST_WORD: @@ -110,9 +110,12 @@ static void gabc_write_begin(FILE *f, grestyle_style style) /* nothing should be emitted for these */ break; default: - unsupported("gabc_write_begin", "style", + /* not reachable unless there's a programming error */ + /* LCOV_EXCL_START */ + unsupported("gabc_write_begin", __LINE__, "style", grestyle_style_to_string(style)); break; + /* LCOV_EXCL_STOP */ } } @@ -146,6 +149,9 @@ static void gabc_write_end(FILE *f, grestyle_style style) case ST_UNDERLINED: fprintf(f, "</ul>"); break; + case ST_ELISION: + fprintf(f, "</e>"); + break; case ST_INITIAL: case ST_CENTER: case ST_FIRST_WORD: @@ -154,9 +160,12 @@ static void gabc_write_end(FILE *f, grestyle_style style) /* nothing should be emitted for these */ break; default: - unsupported("gabc_write_end", "style", + /* not reachable unless there's a programming error */ + /* LCOV_EXCL_START */ + unsupported("gabc_write_end", __LINE__, "style", grestyle_style_to_string(style)); break; + /* LCOV_EXCL_STOP */ } } @@ -167,7 +176,7 @@ static void gabc_write_end(FILE *f, grestyle_style style) * modules, this may be.. a little more difficult. * */ -static void gabc_write_special_char(FILE *f, grewchar *first_char) +static void gabc_write_special_char(FILE *f, const grewchar *first_char) { fprintf(f, "<sp>"); gregorio_print_unistring(f, first_char); @@ -180,7 +189,7 @@ static void gabc_write_special_char(FILE *f, grewchar *first_char) * simple. * */ -static void gabc_write_verb(FILE *f, grewchar *first_char) +static void gabc_write_verb(FILE *f, const grewchar *first_char) { fprintf(f, "<v>"); gregorio_print_unistring(f, first_char); @@ -195,7 +204,7 @@ static void gabc_write_verb(FILE *f, grewchar *first_char) * */ -static void gabc_print_char(FILE *f, grewchar to_print) +static void gabc_print_char(FILE *f, const grewchar to_print) { gregorio_print_unichar(f, to_print); } @@ -278,9 +287,12 @@ static void gabc_write_space(FILE *f, gregorio_space type, char *factor, fprintf(f, "!/[%s]", factor); break; default: - unsupported("gabc_write_space", "space type", + /* not reachable unless there's a programming error */ + /* LCOV_EXCL_START */ + unsupported("gabc_write_space", __LINE__, "space type", gregorio_space_to_string(type)); break; + /* LCOV_EXCL_STOP */ } } @@ -333,9 +345,12 @@ static void gabc_write_bar(FILE *f, gregorio_bar type) fprintf(f, ";8"); break; default: - unsupported("gabc_write_bar", "bar type", + /* not reachable unless there's a programming error */ + /* LCOV_EXCL_START */ + unsupported("gabc_write_bar", __LINE__, "bar type", gregorio_bar_to_string(type)); break; + /* LCOV_EXCL_STOP */ } } @@ -357,9 +372,12 @@ static void gabc_write_bar_signs(FILE *f, gregorio_sign type) /* if there's no sign, don't emit anything */ break; default: - unsupported("gabc_write_bar_signs", "bar signs", + /* not reachable unless there's a programming error */ + /* LCOV_EXCL_START */ + unsupported("gabc_write_bar_signs", __LINE__, "bar signs", gregorio_sign_to_string(type)); break; + /* LCOV_EXCL_STOP */ } } @@ -384,9 +402,12 @@ static void gabc_hepisema(FILE *f, const char *prefix, bool connect, /* nothing to print */ break; default: - unsupported("gabc_hepisema", "hepisema size", + /* not reachable unless there's a programming error */ + /* LCOV_EXCL_START */ + unsupported("gabc_hepisema", __LINE__, "hepisema size", grehepisema_size_to_string(size)); break; + /* LCOV_EXCL_STOP */ } } @@ -411,9 +432,12 @@ static const char *mora_vposition(gregorio_note *note) case VPOS_BELOW: return "0"; default: - unsupported("mora_vposition", "vposition", + /* not reachable unless there's a programming error */ + /* LCOV_EXCL_START */ + unsupported("mora_vposition", __LINE__, "vposition", gregorio_vposition_to_string(note->mora_vposition)); return ""; + /* LCOV_EXCL_STOP */ } } @@ -433,29 +457,22 @@ static void write_note_heuristics(FILE *f, gregorio_note *note) { */ static void gabc_write_gregorio_note(FILE *f, gregorio_note *note, - char glyph_type) + const bool is_quadratum) { char shape; - if (!note) { - gregorio_message(_("call with NULL argument"), - "gabc_write_gregorio_note", VERBOSITY_ERROR, 0); - return; - } - if (note->type != GRE_NOTE) { - gregorio_message(_("call with argument which type is not GRE_NOTE, " - "wrote nothing"), "gabc_write_gregorio_note", - VERBOSITY_ERROR, 0); - return; - } - if (glyph_type == G_PES_QUADRATUM) { - shape = S_QUADRATUM; - } else { - shape = note->u.note.shape; - } + gregorio_assert(note, gabc_write_gregorio_note, "call with NULL argument", + return); + gregorio_assert(note->type == GRE_NOTE, gabc_write_gregorio_note, + "call with argument which type is not GRE_NOTE", return); + shape = note->u.note.shape; switch (shape) { /* first we write the letters that determine the shapes */ case S_PUNCTUM: - fprintf(f, "%c", pitch_letter(note->u.note.pitch)); + if (is_quadratum) { + fprintf(f, "%cq", pitch_letter(note->u.note.pitch)); + } else { + fprintf(f, "%c", pitch_letter(note->u.note.pitch)); + } break; case S_PUNCTUM_INCLINATUM: fprintf(f, "%c", toupper((unsigned char)pitch_letter(note->u.note.pitch))); @@ -468,11 +485,7 @@ static void gabc_write_gregorio_note(FILE *f, gregorio_note *note, } break; case S_PUNCTUM_INCLINATUM_AUCTUS: - if (note->next) { - fprintf(f, "%c<", toupper((unsigned char)pitch_letter(note->u.note.pitch))); - } else { - fprintf(f, "%c", toupper((unsigned char)pitch_letter(note->u.note.pitch))); - } + fprintf(f, "%c", toupper((unsigned char)pitch_letter(note->u.note.pitch))); break; case S_PUNCTUM_CAVUM_INCLINATUM: fprintf(f, "%cr", toupper((unsigned char)pitch_letter(note->u.note.pitch))); @@ -495,12 +508,6 @@ static void gabc_write_gregorio_note(FILE *f, gregorio_note *note, case S_VIRGA_REVERSA: fprintf(f, "%cV", pitch_letter(note->u.note.pitch)); break; - case S_BIVIRGA: - fprintf(f, "%cvv", pitch_letter(note->u.note.pitch)); - break; - case S_TRIVIRGA: - fprintf(f, "%cvvv", pitch_letter(note->u.note.pitch)); - break; case S_ORISCUS_ASCENDENS: case S_ORISCUS_DESCENDENS: case S_ORISCUS_DEMINUTUS: @@ -514,7 +521,11 @@ static void gabc_write_gregorio_note(FILE *f, gregorio_note *note, /* Note: the ASCENDENS, DESCENDENS, or DEMINUTUS is also in the liquescentia */ break; case S_QUILISMA: - fprintf(f, "%cw", pitch_letter(note->u.note.pitch)); + if (is_quadratum) { + fprintf(f, "%cW", pitch_letter(note->u.note.pitch)); + } else { + fprintf(f, "%cw", pitch_letter(note->u.note.pitch)); + } break; case S_LINEA: fprintf(f, "%c=", pitch_letter(note->u.note.pitch)); @@ -528,38 +539,22 @@ static void gabc_write_gregorio_note(FILE *f, gregorio_note *note, case S_LINEA_PUNCTUM_CAVUM: fprintf(f, "%cr0", pitch_letter(note->u.note.pitch)); break; - case S_QUILISMA_QUADRATUM: - fprintf(f, "%cW", pitch_letter(note->u.note.pitch)); - break; case S_ORISCUS_SCAPUS: fprintf(f, "%cO", pitch_letter(note->u.note.pitch)); break; case S_STROPHA: - fprintf(f, "%cs", pitch_letter(note->u.note.pitch)); - break; case S_STROPHA_AUCTA: fprintf(f, "%cs", pitch_letter(note->u.note.pitch)); break; - case S_DISTROPHA: - fprintf(f, "%css", pitch_letter(note->u.note.pitch)); - break; - case S_DISTROPHA_AUCTA: - fprintf(f, "%css", pitch_letter(note->u.note.pitch)); - break; - case S_TRISTROPHA: - fprintf(f, "%csss", pitch_letter(note->u.note.pitch)); - break; - case S_TRISTROPHA_AUCTA: - fprintf(f, "%csss", pitch_letter(note->u.note.pitch)); - break; - case S_QUADRATUM: - fprintf(f, "%cq", pitch_letter(note->u.note.pitch)); - break; default: - unsupported("gabc_write_gregorio_note", "shape", + /* includes S_BIVIRGA, S_TRIVIRGA, S_DISTROPHA, and S_TRISTROPHA */ + /* not reachable unless there's a programming error */ + /* LCOV_EXCL_START */ + unsupported("gabc_write_gregorio_note", __LINE__, "shape", gregorio_shape_to_string(shape)); fprintf(f, "%c", pitch_letter(note->u.note.pitch)); break; + /* LCOV_EXCL_STOP */ } switch (note->signs) { case _PUNCTUM_MORA: @@ -581,9 +576,12 @@ static void gabc_write_gregorio_note(FILE *f, gregorio_note *note, /* if there's no sign, don't emit anything */ break; default: - unsupported("gabc_write_gregorio_note", "shape signs", + /* not reachable unless there's a programming error */ + /* LCOV_EXCL_START */ + unsupported("gabc_write_gregorio_note", __LINE__, "shape signs", gregorio_sign_to_string(note->signs)); break; + /* LCOV_EXCL_STOP */ } switch (note->special_sign) { case _ACCENTUS: @@ -605,9 +603,12 @@ static void gabc_write_gregorio_note(FILE *f, gregorio_note *note, /* if there's no sign, don't emit anything */ break; default: - unsupported("gabc_write_gregorio_note", "special sign", + /* not reachable unless there's a programming error */ + /* LCOV_EXCL_START */ + unsupported("gabc_write_gregorio_note", __LINE__, "special sign", gregorio_sign_to_string(note->special_sign)); break; + /* LCOV_EXCL_STOP */ } if (note->h_episema_above == HEPISEMA_AUTO && note->h_episema_below == HEPISEMA_AUTO) { @@ -642,11 +643,8 @@ static void gabc_write_gregorio_glyph(FILE *f, gregorio_glyph *glyph) gregorio_note *current_note; - if (!glyph) { - gregorio_message(_("call with NULL argument"), - "gabc_write_gregorio_glyph", VERBOSITY_ERROR, 0); - return; - } + gregorio_assert(glyph, gabc_write_gregorio_glyph, "call with NULL argument", + return); switch (glyph->type) { case GRE_TEXVERB_GLYPH: if (glyph->texverb) { @@ -662,19 +660,25 @@ static void gabc_write_gregorio_glyph(FILE *f, gregorio_glyph *glyph) case SP_HALF_SPACE: fprintf(f, "/0"); break; + case SP_INTERGLYPH_SPACE: + fprintf(f, "/!"); + break; default: - gregorio_message(_("bad space"), "gabc_write_gregorio_glyph", - VERBOSITY_ERROR, 0); + /* not reachable unless there's a programming error */ + /* LCOV_EXCL_START */ + unsupported("gabc_write_gregorio_glyph", __LINE__, "space type", + gregorio_space_to_string( + glyph->u.misc.unpitched.info.space)); break; + /* LCOV_EXCL_STOP */ } } else { - gregorio_message(_("bad space"), "gabc_write_gregorio_glyph", - VERBOSITY_ERROR, 0); + /* not reachable unless there's a programming error */ + /* LCOV_EXCL_START */ + gregorio_fail(gabc_write_gregorio_glyph, "bad space"); + /* LCOV_EXCL_STOP */ } break; - case GRE_MANUAL_CUSTOS: - fprintf(f, "%c+", pitch_letter(glyph->u.misc.pitched.pitch)); - break; case GRE_GLYPH: if (is_initio_debilis(glyph->u.notes.liquescentia)) { fprintf(f, "-"); @@ -684,16 +688,21 @@ static void gabc_write_gregorio_glyph(FILE *f, gregorio_glyph *glyph) current_note = glyph->u.notes.first_note; while (current_note) { - gabc_write_gregorio_note(f, current_note, glyph->u.notes.glyph_type); + gabc_write_gregorio_note(f, current_note, + glyph->u.notes.glyph_type == G_PES_QUADRATUM + && current_note == glyph->u.notes.first_note); /* third argument necessary for the special shape pes quadratum */ current_note = current_note->next; } gabc_write_end_liquescentia(f, glyph->u.notes.liquescentia); break; default: - unsupported("gabc_write_gregorio_glyph", "glyph type", + /* not reachable unless there's a programming error */ + /* LCOV_EXCL_START */ + unsupported("gabc_write_gregorio_glyph", __LINE__, "glyph type", gregorio_type_to_string(glyph->type)); break; + /* LCOV_EXCL_STOP */ } } @@ -709,11 +718,8 @@ static void gabc_write_gregorio_glyph(FILE *f, gregorio_glyph *glyph) static void gabc_write_gregorio_element(FILE *f, gregorio_element *element) { gregorio_glyph *current_glyph; - if (!element) { - gregorio_message(_("call with NULL argument"), - "gabc_write_gregorio_element", VERBOSITY_ERROR, 0); - return; - } + gregorio_assert(element, gabc_write_gregorio_element, + "call with NULL argument", return); current_glyph = element->u.first_glyph; switch (element->type) { case GRE_ELEMENT: @@ -762,10 +768,30 @@ static void gabc_write_gregorio_element(FILE *f, gregorio_element *element) fprintf(f, "z0"); } break; + case GRE_NLBA: + switch (element->u.misc.unpitched.info.nlba) { + case NLBA_BEGINNING: + fprintf(f, "<nlba>"); + break; + case NLBA_END: + fprintf(f, "</nlba>"); + break; + default: + /* not reachable unless there's a programming error */ + /* LCOV_EXCL_START */ + unsupported("gabc_write_gregorio_element", __LINE__, "nlba type", + gregorio_nlba_to_string(element->u.misc.unpitched.info.nlba)); + break; + /* LCOV_EXCL_STOP */ + } + break; default: - unsupported("gabc_write_gregorio_element", "element type", + /* not reachable unless there's a programming error */ + /* LCOV_EXCL_START */ + unsupported("gabc_write_gregorio_element", __LINE__, "element type", gregorio_type_to_string(element->type)); break; + /* LCOV_EXCL_STOP */ } } @@ -798,14 +824,16 @@ static void gabc_write_gregorio_elements(FILE *f, gregorio_element *element) * */ -static void gabc_write_gregorio_syllable(FILE *f, gregorio_syllable *syllable, - int number_of_voices) +static void gabc_write_gregorio_syllable(FILE *f, gregorio_syllable *syllable) { int voice = 0; - if (!syllable) { - gregorio_message(_("call with NULL argument"), "gabc_write_syllable", - VERBOSITY_ERROR, 0); - return; + gregorio_assert(syllable, gabc_write_gregorio_syllable, + "call with NULL argument", return); + if (syllable->no_linebreak_area == NLBA_BEGINNING) { + fprintf(f, "<nlba>"); + } + if (syllable->euouae == EUOUAE_BEGINNING) { + fprintf(f, "<eu>"); } if (syllable->text) { /* we call the magic function (defined in struct_utils.c), that will @@ -820,21 +848,21 @@ static void gabc_write_gregorio_syllable(FILE *f, gregorio_syllable *syllable, &gabc_write_verb, &gabc_print_char, &gabc_write_begin, &gabc_write_end, &gabc_write_special_char); fprintf(f, "]"); + } else if (syllable->translation_type == TR_WITH_CENTER_END) { + fprintf(f, "[/]"); } - fprintf(f, "("); - while (voice < number_of_voices - 1) { - /* we enter this loop only in polyphony */ - gabc_write_gregorio_elements(f, syllable->elements[voice]); - fprintf(f, "&"); - voice++; + if (syllable->euouae == EUOUAE_END) { + fprintf(f, "</eu>"); } + if (syllable->no_linebreak_area == NLBA_END) { + fprintf(f, "</nlba>"); + } + fprintf(f, "("); /* we write all the elements of the syllable. */ gabc_write_gregorio_elements(f, syllable->elements[voice]); if (syllable->position == WORD_END || syllable->position == WORD_ONE_SYLLABLE || gregorio_is_only_special(syllable->elements[0])) - /* we assume here that if the first voice is only special, all will be - * only specials too */ { fprintf(f, ") "); } else { @@ -854,34 +882,16 @@ void gabc_write_score(FILE *f, gregorio_score *score) gregorio_syllable *syllable; gregorio_header *header; - if (!f) { - gregorio_message(_("call with NULL file"), "gregoriotex_write_score", - VERBOSITY_ERROR, 0); - return; - } + gregorio_assert(f, gabc_write_score, "call with NULL file", return); for (header = score->headers; header; header = header->next) { gabc_write_str_attribute(f, header->name, header->value); } /* And since the gabc is generated by this program, note this. */ fprintf(f, "generated-by: %s %s;\n", "gregorio", GREGORIO_VERSION); - if (score->number_of_voices == 0) { - gregorio_message(_("gregorio_score seems to be empty"), - "gabc_write_score", VERBOSITY_ERROR, 0); - return; - } - if (score->number_of_voices == 1) { - fprintf(f, "%%%%\n"); - } else { - gregorio_voice_info *voice_info = score->first_voice_info; - while (voice_info) { - if (voice_info->next_voice_info) { - fprintf(f, "--\n"); - } else { - fprintf(f, "%%%%\n"); - } - } - } + gregorio_assert(score->number_of_voices == 1, gabc_write_score, + "gregorio_score seems to be empty", return); + fprintf(f, "%%%%\n"); /* at present we only allow for one clef at the start of the gabc */ if (score->first_voice_info) { fprintf(f, "("); @@ -891,7 +901,7 @@ void gabc_write_score(FILE *f, gregorio_score *score) syllable = score->first_syllable; /* the we write every syllable */ while (syllable) { - gabc_write_gregorio_syllable(f, syllable, score->number_of_voices); + gabc_write_gregorio_syllable(f, syllable); syllable = syllable->next_syllable; } fprintf(f, "\n"); diff --git a/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc.h b/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc.h index ecb75be6b22..fcb672e7bb4 100644 --- a/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc.h +++ b/Build/source/texk/gregorio/gregorio-src/src/gabc/gabc.h @@ -30,6 +30,7 @@ /* functions to read gabc */ gregorio_note *gabc_det_notes_from_string(char *str, char *macros[10], gregorio_scanner_location *loc, const gregorio_score *score); +void gabc_det_notes_finish(void); gregorio_element *gabc_det_elements_from_string(char *str, int *current_key, char *macros[10], gregorio_scanner_location *loc, const gregorio_score *const score); @@ -48,9 +49,6 @@ typedef enum gabc_determination { DET_END_OF_BOTH } gabc_determination; -/* defines the maximal interval between two notes of the same glyph */ -#define MAX_INTERVAL 5 - static __inline void gabc_update_location(gregorio_scanner_location *const loc, const char *const bytes, const size_t length) { diff --git a/Build/source/texk/gregorio/gregorio-src/src/gregorio-utils.c b/Build/source/texk/gregorio/gregorio-src/src/gregorio-utils.c index d03e8046ef5..f0781804b12 100644 --- a/Build/source/texk/gregorio/gregorio-src/src/gregorio-utils.c +++ b/Build/source/texk/gregorio/gregorio-src/src/gregorio-utils.c @@ -20,22 +20,23 @@ * along with Gregorio. If not, see <http://www.gnu.org/licenses/>. */ +static const char *copyright = +"Copyright (C) 2006-2016 Gregorio project authors (see CONTRIBUTORS.md)"; + #include "config.h" #include <stdio.h> #include <unistd.h> #include <stdlib.h> #ifdef USE_KPSE #include <kpathsea/kpathsea.h> -#define gregorio_basename xbasename #else #include <getopt.h> -#include <libgen.h> /* for basename */ -#define gregorio_basename basename #endif #include <string.h> /* for strcmp */ #include <locale.h> #include <limits.h> #include <errno.h> +#include <assert.h> #include "struct.h" #include "plugins.h" #include "messages.h" @@ -106,9 +107,12 @@ static char *define_path(char *current_directory, char *string) /* try to resolve it */ file_name = gregorio_realpath(temp_name, NULL); if (!file_name) { + /* it's not reasonable to cover this failure in testing */ + /* LCOV_EXCL_START */ fprintf(stderr, "the directory %s for %s does not exist\n", temp_name, base_name); - exit(1); + gregorio_exit(1); + /* LCOV_EXCL_STOP */ } } else { /* no path was supplied */ @@ -223,7 +227,7 @@ static void check_input_clobber(char *input_file_name, char *output_file_name) if (current_directory == NULL) { fprintf(stderr, _("can't determine current directory")); free(buf); - exit(1); + gregorio_exit(1); } absolute_input_file_name = define_path(current_directory, input_file_name); absolute_output_file_name = define_path(current_directory, output_file_name); @@ -235,7 +239,7 @@ static void check_input_clobber(char *input_file_name, char *output_file_name) free(absolute_input_file_name); free(absolute_output_file_name); if (file_cmp == 0) { - exit(1); + gregorio_exit(1); } } } @@ -248,8 +252,12 @@ static char *encode_point_and_click_filename(char *input_file_name) filename = gregorio_realpath(input_file_name, NULL); if (!filename) { + /* it's not reasonable to generate the system error that would cause + * this to fail */ + /* LCOV_EXCL_START */ fprintf(stderr, "error: unable to resolve %s\n", input_file_name); - exit(1); + gregorio_exit(1); + /* LCOV_EXCL_STOP */ } /* 2 extra characters for a possible leading slash and final NUL */ @@ -293,8 +301,6 @@ static char *encode_point_and_click_filename(char *input_file_name) int main(int argc, char **argv) { - const char *copyright = - "Copyright (C) 2006-2015 Gregorio project authors (see CONTRIBUTORS.md)"; int c; char *input_file_name = NULL; @@ -309,7 +315,7 @@ int main(int argc, char **argv) gregorio_verbosity verb_mode = 0; bool point_and_click = false; char *point_and_click_filename = NULL; - int number_of_options = 0; + bool debug = false; int option_index = 0; static struct option long_options[] = { {"output-file", 1, 0, 'o'}, @@ -324,20 +330,20 @@ int main(int argc, char **argv) {"verbose", 0, 0, 'v'}, {"all-warnings", 0, 0, 'W'}, {"point-and-click", 0, 0, 'p'}, + {"debug", 0, 0, 'd'}, }; gregorio_score *score = NULL; - #ifdef USE_KPSE - kpse_set_program_name(argv[0], "gregorio"); - #endif + gregorio_support_init("gregorio", argv[0]); + if (argc == 1) { print_usage(argv[0]); - exit(0); + gregorio_exit(0); } setlocale(LC_CTYPE, "C"); while (1) { - c = getopt_long(argc, argv, "o:SF:l:f:shOLVvWp", + c = getopt_long(argc, argv, "o:SF:l:f:shOLVvWpd", long_options, &option_index); if (c == -1) break; @@ -388,7 +394,7 @@ int main(int argc, char **argv) break; } else { fprintf(stderr, "error: unknown output format: %s\n", optarg); - exit(0); + gregorio_exit(1); } break; case 'l': @@ -412,16 +418,13 @@ int main(int argc, char **argv) break; } else { fprintf(stderr, "error: unknown input format: %s\n", optarg); - exit(0); + gregorio_exit(1); } break; case 's': - if (input_file_name) { - fprintf(stderr, - "warning: can't read from file and stdin, writing on %s\n", - input_file_name); - break; - } + /* input_file_name will be null here because of the way + * we use getopt_long */ + assert(!input_file_name); if (input_file) { /* means that stdin is defined */ fprintf(stderr, "warning: option used two times: %c\n", c); break; @@ -430,11 +433,11 @@ int main(int argc, char **argv) break; case 'h': print_usage(argv[0]); - exit(0); + gregorio_exit(0); break; case 'V': - printf("Gregorio version %s.\n%s\n", GREGORIO_VERSION, copyright); - exit(0); + gregorio_print_version(copyright); + gregorio_exit(0); break; case 'v': if (verb_mode && verb_mode != VERBOSITY_WARNING) { @@ -455,7 +458,7 @@ int main(int argc, char **argv) break; case 'L': print_licence(); - exit(0); + gregorio_exit(0); break; case 'p': if (point_and_click) { @@ -465,24 +468,33 @@ int main(int argc, char **argv) } point_and_click = true; break; + case 'd': + if (debug) { + fprintf(stderr, + "warning: debug option passed two times\n"); + break; + } + debug = true; + break; case '?': break; default: - fprintf(stderr, "unknown option: %c\n", c); - print_usage(argv[0]); - exit(0); + /* not reachable unless there's a programming error */ + /* LCOV_EXCL_START */ + gregorio_fail2(main, "unknown option: %c", c); + gregorio_exit(1); break; + /* LCOV_EXCL_STOP */ } - number_of_options++; } /* end of while */ if (optind == argc) { if (!input_file) { /* input not undefined (could be stdin) */ fprintf(stderr, "error: no input file specified\n"); print_usage(argv[0]); - exit(1); + gregorio_exit(1); } } else { - input_file_name = argv[optind]; + input_file_name = argv[optind++]; output_basename = get_base_filename(input_file_name); if (input_file) { fprintf(stderr, @@ -491,14 +503,16 @@ int main(int argc, char **argv) input_file = NULL; } } - optind++; if (optind < argc) { - printf("ignored arguments: "); - while (number_of_options < argc) - printf("%s ", argv[number_of_options++]); - printf("\n"); + fprintf(stderr, "ignored arguments:"); + for (; optind < argc; ++optind) { + fprintf(stderr, " %s", argv[optind]); + } + fprintf(stderr, "\n"); } + gregorio_set_debug_messages(debug); + if (!input_format) { input_format = DEFAULT_INPUT_FORMAT; } @@ -507,38 +521,31 @@ int main(int argc, char **argv) output_format = DEFAULT_OUTPUT_FORMAT; } - #ifdef USE_KPSE - if (!kpse_in_name_ok(input_file_name)) { - fprintf(stderr, "Error: kpse doesn't allow to read from file %s\n", - input_file_name); - exit(1); - } - #endif - /* then we act... */ if (!output_file_name && !output_file) { if (!output_basename) { output_file = stdout; } else { - if (input_format != output_format) { - switch (output_format) { - case GABC: - output_file_name = - get_output_filename(output_basename, "gabc"); - break; - case GTEX: - output_file_name = - get_output_filename(output_basename, "gtex"); - break; - case DUMP: - output_file_name = - get_output_filename(output_basename, "dump"); - break; - default: - fprintf(stderr, "error: unsupported format"); - exit(1); - } + switch (output_format) { + case GABC: + output_file_name = + get_output_filename(output_basename, "gabc"); + break; + case GTEX: + output_file_name = + get_output_filename(output_basename, "gtex"); + break; + case DUMP: + output_file_name = + get_output_filename(output_basename, "dump"); + break; + default: + /* not reachable unless there's a programming error */ + /* LCOV_EXCL_START */ + fprintf(stderr, "error: unsupported format"); + gregorio_exit(1); + /* LCOV_EXCL_STOP */ } } } @@ -550,17 +557,12 @@ int main(int argc, char **argv) if (!input_file) { check_input_clobber(input_file_name, output_file_name); } - #ifdef USE_KPSE - if (!kpse_out_name_ok(output_file_name)) { - fprintf(stderr, "Error: kpse doesn't allow to write in file %s\n", - output_file_name); - exit(1); - } - #endif + gregorio_check_file_access(write, output_file_name, ERROR, + gregorio_exit(1)); output_file = fopen(output_file_name, "wb"); if (!output_file) { - fprintf(stderr, "error: can't write in file %s", - output_file_name); + fprintf(stderr, "error: can't write in file %s", output_file_name); + gregorio_exit(1); } } @@ -571,13 +573,14 @@ int main(int argc, char **argv) "warning: disabling point-and-click since reading from stdin\n"); } } else { + gregorio_check_file_access(read, input_file_name, ERROR, + gregorio_exit(1)); input_file = fopen(input_file_name, "r"); if (!input_file) { fprintf(stderr, "error: can't open file %s for reading\n", input_file_name); - exit(1); + gregorio_exit(1); } - gregorio_set_file_name(gregorio_basename(input_file_name)); if (point_and_click) { point_and_click_filename = encode_point_and_click_filename( input_file_name); @@ -588,11 +591,13 @@ int main(int argc, char **argv) error_file = stderr; gregorio_set_error_out(error_file); } else { + gregorio_check_file_access(write, error_file_name, ERROR, + gregorio_exit(1)); error_file = fopen(error_file_name, "wb"); if (!error_file) { fprintf(stderr, "error: can't open file %s for writing\n", error_file_name); - exit(1); + gregorio_exit(1); } gregorio_set_error_out(error_file); } @@ -608,22 +613,26 @@ int main(int argc, char **argv) score = gabc_read_score(input_file); break; default: + /* not reachable unless there's a programming error */ + /* LCOV_EXCL_START */ fprintf(stderr, "error : invalid input format\n"); fclose(input_file); fclose(output_file); - exit(1); + gregorio_exit(1); break; + /* LCOV_EXCL_STOP */ } fclose(input_file); if (score == NULL) { + /* score should never be NULL on return from gabc_read_score */ + /* LCOV_EXCL_START */ fclose(output_file); fprintf(stderr, "error in file parsing\n"); - exit(1); + gregorio_exit(1); + /* LCOV_EXCL_STOP */ } - gregorio_fix_initial_keys(score, gregorio_default_clef); - switch (output_format) { case GABC: gabc_write_score(output_file, score); @@ -635,11 +644,14 @@ int main(int argc, char **argv) dump_write_score(output_file, score); break; default: + /* not reachable unless there's a programming error */ + /* LCOV_EXCL_START */ fprintf(stderr, "error : invalid output format\n"); gregorio_free_score(score); fclose(output_file); - exit(1); + gregorio_exit(1); break; + /* LCOV_EXCL_STOP */ } fclose(output_file); if (point_and_click_filename) { @@ -654,5 +666,5 @@ int main(int argc, char **argv) fclose(error_file); } - exit(gregorio_get_return_value()); -} + gregorio_exit(gregorio_get_return_value()); +} /* due to exit on prior line, this will never be reached; LCOV_EXCL_LINE */ diff --git a/Build/source/texk/gregorio/gregorio-src/src/gregoriotex/gregoriotex-position.c b/Build/source/texk/gregorio/gregorio-src/src/gregoriotex/gregoriotex-position.c index 29500d7e840..58f135d76ea 100644 --- a/Build/source/texk/gregorio/gregorio-src/src/gregoriotex/gregoriotex-position.c +++ b/Build/source/texk/gregorio/gregorio-src/src/gregoriotex/gregoriotex-position.c @@ -206,16 +206,6 @@ static __inline const char *fused_single_note_case( return unfused_case; } -static __inline gregorio_vposition above_if_auctus( - const gregorio_glyph *const glyph) -{ - if (glyph->u.notes.liquescentia & - (L_AUCTUS_ASCENDENS | L_AUCTUS_DESCENDENS)) { - return VPOS_ABOVE; - } - return VPOS_BELOW; -} - static __inline gregorio_vposition below_if_auctus( const gregorio_glyph *const glyph) { @@ -239,11 +229,12 @@ static __inline gregorio_vposition above_if_fused_next_h_episema( const gregorio_glyph *glyph) { const gregorio_glyph *next = gregorio_next_non_texverb_glyph(glyph); - if (next && next->type == GRE_GLYPH - && is_fused(next->u.notes.liquescentia)) { - return above_if_h_episema(next->u.notes.first_note); - } - return VPOS_BELOW; + gregorio_assert(next && next->type == GRE_GLYPH + && is_fused(next->u.notes.liquescentia), + above_if_fused_next_h_episema, + "expected this glyph to be fused to the next one", + return VPOS_BELOW); + return above_if_h_episema(next->u.notes.first_note); } static __inline gregorio_vposition above_if_either_h_episema( @@ -401,7 +392,7 @@ static gregorio_vposition advise_positioning(const gregorio_glyph *const glyph, } else { note->gtex_offset_case = FinalPunctum; } - h_episema = above_if_auctus(glyph); + h_episema = VPOS_BELOW; } v_episema = VPOS_BELOW; } else { /* i=2 */ @@ -418,11 +409,8 @@ static gregorio_vposition advise_positioning(const gregorio_glyph *const glyph, } break; case T_PESQUADRATUM: - case T_PESQUADRATUM_LONGQUEUE: case T_PESQUASSUS: - case T_PESQUASSUS_LONGQUEUE: case T_PESQUILISMAQUADRATUM: - case T_PESQUILISMAQUADRATUM_LONGQUEUE: if (i == 1) { note->gtex_offset_case = first_note_case(note, glyph); h_episema = above_if_h_episema(note->next); @@ -439,7 +427,6 @@ static gregorio_vposition advise_positioning(const gregorio_glyph *const glyph, } break; case T_FLEXUS: - case T_FLEXUS_LONGQUEUE: case T_FLEXUS_ORISCUS: if (i == 1) { high_low_set_upper(glyph, note); @@ -811,7 +798,6 @@ static gregorio_vposition advise_positioning(const gregorio_glyph *const glyph, } /* else fallthrough to the next case! */ case T_SALICUS: - case T_SALICUS_LONGQUEUE: v_episema = VPOS_BELOW; switch (i) { case 1: @@ -861,7 +847,6 @@ static gregorio_vposition advise_positioning(const gregorio_glyph *const glyph, } /* else fallthrough to the next case! */ case T_ANCUS: - case T_ANCUS_LONGQUEUE: switch (i) { case 1: note->gtex_offset_case = first_note_case(note, glyph); @@ -1543,11 +1528,11 @@ static __inline int compute_fused_shift(const gregorio_glyph *glyph) case S_FLAT: case S_SHARP: case S_NATURAL: - /* if this glyph starts with one of these, it's not fusable */ + /* if this glyph starts with one of these, it's not fusible */ return 0; default: - /* anything else is potentially fusable */ + /* anything else is potentially fusible */ break; } @@ -1555,20 +1540,18 @@ static __inline int compute_fused_shift(const gregorio_glyph *glyph) case G_PUNCTUM: case G_FLEXA: case G_VIRGA_REVERSA: - /* these are potentially fusable to this note */ + /* these are potentially fusible to this note */ break; default: - /* everything else is not fusable */ + /* everything else is not fusible */ return 0; } prev_note = gregorio_glyph_last_note(previous); - if (prev_note->type != GRE_NOTE) { - /* previous note wasn't a note */ - return 0; - } + gregorio_assert(prev_note->type == GRE_NOTE, compute_fused_shift, + "previous note wasn't a note", return 0); switch (prev_note->u.note.shape) { case S_PUNCTUM_CAVUM: @@ -1582,15 +1565,13 @@ static __inline int compute_fused_shift(const gregorio_glyph *glyph) return 0; default: - /* anything else is potentially fusable */ + /* anything else is potentially fusible */ break; } shift = first_note->u.note.pitch - prev_note->u.note.pitch; - if (shift < -5 || shift > 5) { - /* ambitus too large to fuse */ - return 0; - } + gregorio_assert(shift >= -MAX_AMBITUS && shift <= MAX_AMBITUS, + compute_fused_shift, "ambitus too large to fuse", return 0); if (shift > 0 && previous->u.notes.glyph_type == G_VIRGA_REVERSA) { /* virga reversa cannot fuse upwards */ @@ -1598,9 +1579,10 @@ static __inline int compute_fused_shift(const gregorio_glyph *glyph) } /* the FLEXA check below checks for a porrectus-like flexus, which is not - * fusable from above */ + * fusible from above */ if (shift < 0 && ((next_is_fused && glyph->u.notes.glyph_type == G_FLEXA) || glyph->u.notes.glyph_type == G_PORRECTUS + || glyph->u.notes.glyph_type == G_PODATUS || (previous->u.notes.glyph_type == G_PUNCTUM && is_initio_debilis(previous->u.notes.liquescentia)))) { /* may not be fused from above */ @@ -1699,8 +1681,7 @@ void gregoriotex_compute_positioning(const gregorio_element *element, glyph->u.notes.fuse_to_next_glyph = compute_fused_shift( gregorio_next_non_texverb_glyph(glyph)); i = 0; - gregoriotex_determine_glyph_name(glyph, element, &ignored, - &type); + gregoriotex_determine_glyph_name(glyph, &ignored, &type); for (note = glyph->u.notes.first_note; note; note = note->next) { if (note->type == GRE_NOTE) { diff --git a/Build/source/texk/gregorio/gregorio-src/src/gregoriotex/gregoriotex-write.c b/Build/source/texk/gregorio/gregorio-src/src/gregoriotex/gregoriotex-write.c index 524c61b286d..853121708b7 100644 --- a/Build/source/texk/gregorio/gregorio-src/src/gregoriotex/gregoriotex-write.c +++ b/Build/source/texk/gregorio/gregorio-src/src/gregoriotex/gregoriotex-write.c @@ -5,18 +5,18 @@ * Copyright (C) 2008-2015 The Gregorio Project (see CONTRIBUTORS.md) * * This file is part of Gregorio. - * + * * This program is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free * Software Foundation, either version 3 of the License, or (at your option) * any later version. - * + * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. - * - * You should have received a copy of the GNU General Public License along with + * + * You should have received a copy of the GNU General Public License along with * this program. If not, see <http://www.gnu.org/licenses/>. */ /** @@ -76,9 +76,11 @@ SHAPE(Flat); SHAPE(Flexus); SHAPE(FlexusLongqueue); SHAPE(FlexusNobar); +SHAPE(FlexusOpenqueue); SHAPE(FlexusOriscus); SHAPE(FlexusOriscusScapus); SHAPE(FlexusOriscusScapusLongqueue); +SHAPE(FlexusOriscusScapusOpenqueue); SHAPE(Linea); SHAPE(LineaPunctum); SHAPE(LineaPunctumCavum); @@ -93,16 +95,22 @@ SHAPE(OriscusReversus); SHAPE(OriscusReversusLineTL); SHAPE(OriscusScapus); SHAPE(OriscusScapusLongqueue); +SHAPE(OriscusScapusOpenqueue); SHAPE(Pes); SHAPE(PesQuadratum); SHAPE(PesQuadratumLongqueue); +SHAPE(PesQuadratumOpenqueue); SHAPE(PesQuassus); SHAPE(PesQuassusLongqueue); +SHAPE(PesQuassusOpenqueue); SHAPE(PesQuilisma); SHAPE(PesQuilismaQuadratum); SHAPE(PesQuilismaQuadratumLongqueue); +SHAPE(PesQuilismaQuadratumOpenqueue); SHAPE(Porrectus); +SHAPE(PorrectusLongqueue); SHAPE(PorrectusFlexus); +SHAPE(PorrectusFlexusLongqueue); SHAPE(PorrectusFlexusNobar); SHAPE(PorrectusNobar); SHAPE(Punctum); @@ -134,12 +142,16 @@ SHAPE(TorculusResupinus); SHAPE(TorculusResupinusQuilisma); SHAPE(Virga); SHAPE(VirgaLongqueue); +SHAPE(VirgaOpenqueue); SHAPE(VirgaReversa); SHAPE(VirgaReversaAscendens); SHAPE(VirgaReversaDescendens); SHAPE(VirgaReversaLongqueue); SHAPE(VirgaReversaLongqueueAscendens); SHAPE(VirgaReversaLongqueueDescendens); +SHAPE(VirgaReversaOpenqueue); +SHAPE(VirgaReversaOpenqueueAscendens); +SHAPE(VirgaReversaOpenqueueDescendens); SHAPE(VirgaStrata); #define LIQ(NAME) static const char *const LIQ_##NAME = #NAME @@ -161,21 +173,6 @@ FUSE(Up); /* the value indicating to GregorioTeX that there is no flat */ #define NO_KEY_FLAT LOWEST_PITCH -/* a helper macro for the following function */ -#define WHILEGLYPH(prevornext) \ - while(glyph) {\ - if (glyph->type == GRE_GLYPH) {\ - note = glyph->u.notes.first_note;\ - while (note) {\ - if (note->u.note.pitch <= LOW_LEDGER_LINE_PITCH) {\ - return true;\ - }\ - note = note->next;\ - }\ - }\ - glyph = glyph->prevornext;\ - } - static __inline signed char pitch_value(const signed char height) { /* right now height == pitch, but this function allows us to change * the offset easily */ @@ -186,73 +183,40 @@ static __inline int bool_to_int(bool value) { return value? 1 : 0; } -/* a function that determines if we must use a long queue or not (less easy - * that it might seem) */ +typedef enum queuetype { + Q_ON_SPACE_BELOW_BOTTOM_LINE, + Q_ON_SPACE_ABOVE_BOTTOM_LINE, + Q_ON_BOTTOM_LINE, + Q_ON_LINE_ABOVE_BOTTOM_LINE +} queuetype; -static bool is_longqueue(const signed char pitch, - const gregorio_glyph *const current_glyph, - const gregorio_element *const current_element) +static queuetype adjusted_queuetype_of(const gregorio_note *const note, + const signed char adjustment) { - gregorio_note *note; - gregorio_glyph *glyph = current_glyph->next; - gregorio_element *element = current_element->next; - switch (pitch - LOWEST_PITCH) { + switch (note->u.note.pitch + adjustment - LOWEST_PITCH) { + case 0: + return Q_ON_SPACE_BELOW_BOTTOM_LINE; case 1: + return Q_ON_BOTTOM_LINE; + case 2: + return note->supposed_low_ledger_line? Q_ON_SPACE_ABOVE_BOTTOM_LINE + : Q_ON_SPACE_BELOW_BOTTOM_LINE; + case 3: + return note->supposed_low_ledger_line? Q_ON_LINE_ABOVE_BOTTOM_LINE + : Q_ON_BOTTOM_LINE; case 5: case 7: case 9: case 11: case 13: - return true; - case 3: - /* we first look forward to see if there is a note underneath c */ - WHILEGLYPH(next); - if (element && element->type == GRE_SPACE - && (element->u.misc.unpitched.info.space == SP_NEUMATIC_CUT - || element->u.misc.unpitched.info.space == SP_LARGER_SPACE - || element->u.misc.unpitched.info.space - == SP_NEUMATIC_CUT_NB - || element->u.misc.unpitched.info.space - == SP_LARGER_SPACE_NB)) { - element = element->next; - } - if (element && element->type == GRE_ELEMENT) { - glyph = element->u.first_glyph; - WHILEGLYPH(next); - } - /* and now something completely different */ - glyph = current_glyph->previous; - element = current_element->previous; - WHILEGLYPH(previous); - if (element && element->type == GRE_SPACE - && (element->u.misc.unpitched.info.space == SP_NEUMATIC_CUT - || element->u.misc.unpitched.info.space == SP_LARGER_SPACE - || element->u.misc.unpitched.info.space - == SP_NEUMATIC_CUT_NB - || element->u.misc.unpitched.info.space - == SP_LARGER_SPACE_NB)) { - element = element->previous; - } - if (element && element->type == GRE_ELEMENT) { - glyph = element->u.first_glyph; - WHILEGLYPH(next); - } - return false; + return Q_ON_LINE_ABOVE_BOTTOM_LINE; default: - return false; + return Q_ON_SPACE_ABOVE_BOTTOM_LINE; } } -/* inline functions that we will use to determine if we need a short bar or - * not */ - -/* we define d to be short instead of long... may induce errors, but fixes - * some too */ -static __inline bool is_shortqueue(const signed char pitch, - const gregorio_glyph *const glyph, - const gregorio_element *const element) -{ - return !is_longqueue(pitch, glyph, element); +static queuetype queuetype_of(const gregorio_note *const note) { + return adjusted_queuetype_of(note, 0); } static grestyle_style gregoriotex_ignore_style = ST_NO_STYLE; @@ -268,7 +232,7 @@ static grestyle_style gregoriotex_next_ignore_style = ST_NO_STYLE; * 'InitioDebilisDeminutus' * 'InitioDebilisAscendens' * 'InitioDebilisDescendens' - * + * * They also are and must be the same as in squarize.py. */ @@ -333,11 +297,8 @@ static __inline int compute_ambitus(const gregorio_note *const current_note) } else { ambitus = first - second; } - if (ambitus < 1 || ambitus > MAX_AMBITUS) { - gregorio_messagef("compute_ambitus", VERBOSITY_ERROR, 0, - _("unsupported ambitus: %d"), ambitus); - return 0; - } + gregorio_assert2(ambitus >= 1 && ambitus <= MAX_AMBITUS, compute_ambitus, + "unsupported ambitus: %d", ambitus, return 0); return ambitus; } @@ -357,30 +318,22 @@ static const char *compute_glyph_name(const gregorio_glyph *const glyph, ? previous->u.notes.fuse_to_next_glyph : 0; /* then we start making our formula */ - if (!glyph) { - gregorio_message(_("called with NULL pointer"), - "compute_glyph_name", VERBOSITY_ERROR, 0); - return ""; - } - if (!glyph->u.notes.first_note) { - gregorio_message(_("called with a glyph that have no note"), - "compute_glyph_name", VERBOSITY_ERROR, 0); - return ""; - } + gregorio_assert(glyph, compute_glyph_name, "called with NULL pointer", + return ""); + gregorio_assert(glyph->u.notes.first_note, compute_glyph_name, + "called with a glyph that have no note", return ""); fuse_to_next_note = glyph->u.notes.fuse_to_next_glyph; switch (glyph->u.notes.glyph_type) { case G_PODATUS: - if (!is_tail_liquescentia(glyph->u.notes.liquescentia) - && fuse_from_previous_note < 0) { - /* a normal pes cannot be fused from above */ - break; - } + gregorio_assert(is_tail_liquescentia(glyph->u.notes.liquescentia) + || fuse_from_previous_note >= 0, compute_glyph_name, + "unexpected fusible podatus", break); /* else fall through */ case G_PUNCTUM: case G_FLEXA: - /* directionally head-fusable */ + /* directionally head-fusible */ if (fuse_from_previous_note < -1 && glyph->u.notes.first_note->u.note.shape != S_QUILISMA && glyph->u.notes.first_note->u.note.shape @@ -404,20 +357,20 @@ static const char *compute_glyph_name(const gregorio_glyph *const glyph, break; default: - /* not directionally head-fusable */ + /* not directionally head-fusible */ break; } switch (glyph->u.notes.glyph_type) { case G_FLEXA: if (fuse_to_next_note <= 0) { - /* a flexa is only fusable up */ + /* a flexa is only fusible up */ break; } /* else fall through */ case G_VIRGA_REVERSA: case G_PUNCTUM: - /* tail-fusable */ + /* tail-fusible */ if (fuse_to_next_note < 0) { fuse_tail = FUSE_Down; fuse_ambitus = -fuse_to_next_note; @@ -432,13 +385,14 @@ static const char *compute_glyph_name(const gregorio_glyph *const glyph, break; default: - /* not tail-fusable */ + /* not tail-fusible */ break; } if ((*fuse_tail && shape == SHAPE_OriscusReversus) || ((shape == SHAPE_OriscusReversus || shape == SHAPE_OriscusScapus - || shape == SHAPE_OriscusScapusLongqueue) + || shape == SHAPE_OriscusScapusLongqueue + || shape == SHAPE_OriscusScapusOpenqueue) && is_fused(glyph->u.notes.liquescentia))) { shape = SHAPE_Oriscus; } @@ -469,16 +423,14 @@ static const char *compute_glyph_name(const gregorio_glyph *const glyph, tex_ambitus[fuse_ambitus], liquescentia, fuse_tail); return buf; } - if (!current_note->next) { - gregorio_message(_("called with a multi-note glyph that has only " - "one note"), "compute_glyph_name", VERBOSITY_ERROR, 0); - return ""; - } - if (!(ambitus1 = compute_ambitus(current_note))) { - return ""; - } + gregorio_assert(current_note->next, compute_glyph_name, + "called with a multi-note glyph that has only one note", return ""); + gregorio_assert((ambitus1 = compute_ambitus(current_note)), + compute_glyph_name, "unexpected unison on multi-note glyph", + return ""); if (is_fused(glyph->u.notes.liquescentia)) { - if (shape == SHAPE_Flexus || shape == SHAPE_FlexusLongqueue) { + if (shape == SHAPE_Flexus || shape == SHAPE_FlexusLongqueue + || shape == SHAPE_FlexusOpenqueue) { if (fuse_to_next_note) { fuse_head = ""; } @@ -487,11 +439,13 @@ static const char *compute_glyph_name(const gregorio_glyph *const glyph, } else { shape = SHAPE_FlexusNobar; } - } else if (shape == SHAPE_Porrectus) { + } else if (shape == SHAPE_Porrectus + || shape == SHAPE_PorrectusLongqueue) { shape = SHAPE_PorrectusNobar; } } else { - if (fuse_to_next_note && shape == SHAPE_FlexusLongqueue) { + if (fuse_to_next_note && (shape == SHAPE_FlexusLongqueue + || shape == SHAPE_FlexusOpenqueue)) { /* a porrectus-like flexus has no longqueue variant */ shape = SHAPE_Flexus; } @@ -508,9 +462,9 @@ static const char *compute_glyph_name(const gregorio_glyph *const glyph, liquescentia, fuse_tail); return buf; } - if (!(ambitus2 = compute_ambitus(current_note))) { - return ""; - } + gregorio_assert((ambitus2 = compute_ambitus(current_note)), + compute_glyph_name, "unexpected unison on multi-note glyph", + return ""); current_note = current_note->next; if (!current_note->next) { gregorio_snprintf(buf, BUFSIZE, "%s%s%s%s%s%s%s", fuse_head, shape, @@ -518,26 +472,63 @@ static const char *compute_glyph_name(const gregorio_glyph *const glyph, tex_ambitus[fuse_ambitus], liquescentia, fuse_tail); return buf; } - if (!(ambitus3 = compute_ambitus(current_note))) { - return ""; - } + gregorio_assert((ambitus3 = compute_ambitus(current_note)), + compute_glyph_name, "unexpected unison on multi-note glyph", + return ""); gregorio_snprintf(buf, BUFSIZE, "%s%s%s%s%s%s%s%s", fuse_head, shape, tex_ambitus[ambitus1], tex_ambitus[ambitus2], tex_ambitus[ambitus3], tex_ambitus[fuse_ambitus], liquescentia, fuse_tail); return buf; } +static const char *fusible_queued_shape(const gregorio_note *const note, + const gregorio_glyph *const glyph, + const char *const base_shape, const char *const longqueue_shape, + const char *const openqueue_shape) +{ + const char *name = ""; + if (glyph->u.notes.fuse_to_next_glyph < 0) { + /* queue size depends on the following note if fused down */ + if (glyph->u.notes.fuse_to_next_glyph == -1) { + switch (adjusted_queuetype_of(note, + glyph->u.notes.fuse_to_next_glyph)) { + case Q_ON_SPACE_BELOW_BOTTOM_LINE: + case Q_ON_BOTTOM_LINE: + name = openqueue_shape; + break; + case Q_ON_SPACE_ABOVE_BOTTOM_LINE: + name = base_shape; + break; + case Q_ON_LINE_ABOVE_BOTTOM_LINE: + name = longqueue_shape; + break; + } + } else { + name = base_shape; + } + } else { + switch (queuetype_of(note)) { + case Q_ON_SPACE_BELOW_BOTTOM_LINE: + case Q_ON_SPACE_ABOVE_BOTTOM_LINE: + name = base_shape; + break; + case Q_ON_BOTTOM_LINE: + case Q_ON_LINE_ABOVE_BOTTOM_LINE: + name = longqueue_shape; + break; + } + } + return compute_glyph_name(glyph, name, LG_NONE, true); +} + static const char *gregoriotex_determine_note_glyph_name(gregorio_note *note, - gregorio_glyph *glyph, gregorio_element *element, gtex_alignment *type) + gregorio_glyph *glyph, gtex_alignment *type) { static char buf[128]; - const char *name; + const char *name = ""; - if (!note) { - gregorio_message(_("called with NULL pointer"), - "gregoriotex_determine_note_glyph_name", VERBOSITY_ERROR, 0); - return ""; - } + gregorio_assert(note, gregoriotex_determine_note_glyph_name, + "called with NULL pointer", return ""); *type = AT_ONE_NOTE; switch (note->u.note.shape) { @@ -565,17 +556,29 @@ static const char *gregoriotex_determine_note_glyph_name(gregorio_note *note, case S_LINEA_PUNCTUM_CAVUM: return SHAPE_LineaPunctumCavum; case S_VIRGA: - if (is_shortqueue(note->u.note.pitch, glyph, element)) { + switch (queuetype_of(note)) { + case Q_ON_SPACE_ABOVE_BOTTOM_LINE: return SHAPE_Virga; - } - return SHAPE_VirgaLongqueue; + case Q_ON_SPACE_BELOW_BOTTOM_LINE: + case Q_ON_BOTTOM_LINE: + return SHAPE_VirgaOpenqueue; + case Q_ON_LINE_ABOVE_BOTTOM_LINE: + return SHAPE_VirgaLongqueue; + } /* all cases return, so this line is not hit; LCOV_EXCL_LINE */ case S_VIRGA_REVERSA: switch (note->u.note.liquescentia) { case L_AUCTUS_ASCENDENS: - if (is_shortqueue(note->u.note.pitch, glyph, element)) { + switch (queuetype_of(note)) { + case Q_ON_SPACE_BELOW_BOTTOM_LINE: + case Q_ON_SPACE_ABOVE_BOTTOM_LINE: name = SHAPE_VirgaReversaAscendens; - } else { + break; + case Q_ON_BOTTOM_LINE: + name = SHAPE_VirgaReversaOpenqueueAscendens; + break; + case Q_ON_LINE_ABOVE_BOTTOM_LINE: name = SHAPE_VirgaReversaLongqueueAscendens; + break; } if (note->u.note.pitch - LOWEST_PITCH == 3) { /* if we're on the 'd' line, the queue could be long or short */ @@ -585,17 +588,18 @@ static const char *gregoriotex_determine_note_glyph_name(gregorio_note *note, } return name; case L_AUCTUS_DESCENDENS: - if (is_shortqueue(note->u.note.pitch, glyph, element)) { + switch (queuetype_of(note)) { + case Q_ON_SPACE_BELOW_BOTTOM_LINE: + case Q_ON_SPACE_ABOVE_BOTTOM_LINE: return SHAPE_VirgaReversaDescendens; - } - return SHAPE_VirgaReversaLongqueueDescendens; + case Q_ON_BOTTOM_LINE: + return SHAPE_VirgaReversaOpenqueueDescendens; + case Q_ON_LINE_ABOVE_BOTTOM_LINE: + return SHAPE_VirgaReversaLongqueueDescendens; + } /* all cases return, so this line is not hit; LCOV_EXCL_LINE */ default: - if (is_shortqueue(note->u.note.pitch, glyph, element)) { - return compute_glyph_name(glyph, SHAPE_VirgaReversa, LG_NONE, - true); - } - return compute_glyph_name(glyph, SHAPE_VirgaReversaLongqueue, - LG_NONE, true); + return fusible_queued_shape(note, glyph, SHAPE_VirgaReversa, + SHAPE_VirgaReversaLongqueue, SHAPE_VirgaReversaOpenqueue); } case S_ORISCUS_ASCENDENS: *type = AT_ORISCUS; @@ -610,12 +614,8 @@ static const char *gregoriotex_determine_note_glyph_name(gregorio_note *note, *type = AT_QUILISMA; return compute_glyph_name(glyph, SHAPE_Quilisma, LG_NONE, true); case S_ORISCUS_SCAPUS: - if (is_shortqueue(note->u.note.pitch, glyph, element)) { - return compute_glyph_name(glyph, SHAPE_OriscusScapus, LG_NONE, - true); - } - return compute_glyph_name(glyph, SHAPE_OriscusScapusLongqueue, LG_NONE, - true); + return fusible_queued_shape(note, glyph, SHAPE_OriscusScapus, + SHAPE_OriscusScapusLongqueue, SHAPE_OriscusScapusOpenqueue); case S_STROPHA: *type = AT_STROPHA; if (!(note->u.note.liquescentia & @@ -625,10 +625,14 @@ static const char *gregoriotex_determine_note_glyph_name(gregorio_note *note, /* else fall through to next case */ case S_STROPHA_AUCTA: *type = AT_STROPHA; - if (is_shortqueue(note->u.note.pitch, glyph, element)) { + switch (queuetype_of(note)) { + case Q_ON_SPACE_BELOW_BOTTOM_LINE: + case Q_ON_SPACE_ABOVE_BOTTOM_LINE: return SHAPE_StrophaAucta; - } - return SHAPE_StrophaAuctaLongtail; + case Q_ON_BOTTOM_LINE: + case Q_ON_LINE_ABOVE_BOTTOM_LINE: + return SHAPE_StrophaAuctaLongtail; + } /* all cases return, so this line is not hit; LCOV_EXCL_LINE */ case S_PUNCTUM_CAVUM_INCLINATUM: *type = AT_PUNCTUM_INCLINATUM; return SHAPE_PunctumCavumInclinatum; @@ -651,38 +655,160 @@ static const char *gregoriotex_determine_note_glyph_name(gregorio_note *note, case S_NATURAL: return SHAPE_Natural; default: - gregorio_messagef("gregoriotex_determine_note_glyph_name", - VERBOSITY_ERROR, 0, _("called with unknown shape: %s"), + /* not reachable unless there's a programming error */ + /* LCOV_EXCL_START */ + gregorio_fail2(gregoriotex_determine_note_glyph_name, + "called with unknown shape: %s", gregorio_shape_to_string(note->u.note.shape)); return ""; + /* LCOV_EXCL_STOP */ } } +static __inline gregorio_note *first_note_of( + const gregorio_glyph *const glyph) { + assert(glyph->type == GRE_GLYPH); + assert(glyph->u.notes.first_note); + assert(glyph->u.notes.first_note->type == GRE_NOTE); + return glyph->u.notes.first_note; +} + +static __inline signed char first_pitch_of(const gregorio_glyph *const glyph) { + return first_note_of(glyph)->u.note.pitch; +} + +static __inline gregorio_note *second_note_of( + const gregorio_glyph *const glyph) { + assert(glyph->type == GRE_GLYPH); + assert(glyph->u.notes.first_note); + assert(glyph->u.notes.first_note->type == GRE_NOTE); + assert(glyph->u.notes.first_note->next); + assert(glyph->u.notes.first_note->next->type == GRE_NOTE); + return glyph->u.notes.first_note->next; +} + +static __inline signed char second_pitch_of(const gregorio_glyph *const glyph) { + return second_note_of(glyph)->u.note.pitch; +} + +static __inline gregorio_note *third_note_of( + const gregorio_glyph *const glyph) { + assert(glyph->type == GRE_GLYPH); + assert(glyph->u.notes.first_note); + assert(glyph->u.notes.first_note->type == GRE_NOTE); + assert(glyph->u.notes.first_note->next); + assert(glyph->u.notes.first_note->next->type == GRE_NOTE); + assert(glyph->u.notes.first_note->next->next); + assert(glyph->u.notes.first_note->next->next->type == GRE_NOTE); + return glyph->u.notes.first_note->next->next; +} + +static __inline signed char third_pitch_of(const gregorio_glyph *const glyph) { + return third_note_of(glyph)->u.note.pitch; +} + +static __inline const char *porrectus_shape(const gregorio_glyph *const glyph, + const char *base_shape, const char *longqueue_shape) { + const gregorio_note *const first_note = first_note_of(glyph); + if ((glyph->u.notes.glyph_type == G_PORRECTUS + && (glyph->u.notes.liquescentia & L_DEMINUTUS)) + || first_note->u.note.pitch - second_pitch_of(glyph) == 1) { + switch (queuetype_of(first_note)) { + case Q_ON_SPACE_BELOW_BOTTOM_LINE: + case Q_ON_SPACE_ABOVE_BOTTOM_LINE: + case Q_ON_BOTTOM_LINE: + return base_shape; + case Q_ON_LINE_ABOVE_BOTTOM_LINE: + return longqueue_shape; + } + } /* must be optimized out; LCOV_EXCL_LINE */ + return base_shape; +} + +static __inline const char *flexus_shape(const gregorio_glyph *const glyph, + const signed char ambitus, const char *base_shape, + const char *longqueue_shape, const char *openqueue_shape) { + const bool ambitus_one = (ambitus == 1); + switch (queuetype_of(second_note_of(glyph))) { + case Q_ON_SPACE_BELOW_BOTTOM_LINE: + if (ambitus_one) { + return openqueue_shape; + } + /* else fall through */ + case Q_ON_SPACE_ABOVE_BOTTOM_LINE: + /* at ambitus one, long and short are swapped becuase the queue where + * the second note is on a space is longer than on a line */ + return ambitus_one? longqueue_shape : base_shape; + case Q_ON_BOTTOM_LINE: + if (ambitus_one) { + return openqueue_shape; + } + /* else fall through */ + case Q_ON_LINE_ABOVE_BOTTOM_LINE: + /* at ambitus one, long and short are swapped becuase the queue where + * the second note is on a line is shorter than on a space */ + return ambitus_one? base_shape : longqueue_shape; + } + /* not reachable unless there's a programming error */ + /* LCOV_EXCL_START */ + gregorio_fail(flexus_shape, "unexpected queue length"); + return base_shape; + /* LCOV_EXCL_STOP */ +} + +static __inline const char *quadratum_shape(const gregorio_glyph *const glyph, + const char *base_shape, const char *longqueue_shape, + const char *openqueue_shape) { + const bool ambitus_one = + (second_pitch_of(glyph) - first_pitch_of(glyph) == 1); + if (!is_tail_liquescentia(glyph->u.notes.liquescentia)) { + switch (queuetype_of(first_note_of(glyph))) { + case Q_ON_SPACE_BELOW_BOTTOM_LINE: + if (ambitus_one) { + return openqueue_shape; + } + /* else fall through */ + case Q_ON_SPACE_ABOVE_BOTTOM_LINE: + /* at ambitus one, long and short are swapped becuase the queue + * where the first note is on a space is longer than on a line */ + return ambitus_one? longqueue_shape : base_shape; + case Q_ON_BOTTOM_LINE: + if (ambitus_one) { + return openqueue_shape; + } + /* else fall through */ + case Q_ON_LINE_ABOVE_BOTTOM_LINE: + /* at ambitus one, long and short are swapped becuase the queue + * where the first note is on a line is shorter than on a space */ + return ambitus_one? base_shape : longqueue_shape; + } + /* not reachable unless there's a programming error */ + /* LCOV_EXCL_START */ + gregorio_fail(quadratum_shape, "unexpected queue length"); + /* fall out of the conditional */ + } + /* LCOV_EXCL_STOP */ + return base_shape; +} + /* the function that calculates the number of the glyph. It also * calculates the type, used for determining the position of signs. Type is * very basic, it is only the global dimensions : torculus, one_note, etc. */ const char *gregoriotex_determine_glyph_name(const gregorio_glyph *const glyph, - const gregorio_element *const element, gtex_alignment *const type, - gtex_type *const gtype) + gtex_alignment *const type, gtex_type *const gtype) { const char *shape = NULL; gtex_glyph_liquescentia ltype; - char pitch = 0; - if (!glyph) { - gregorio_message(_("called with NULL pointer"), - "gregoriotex_determine_glyph_name", VERBOSITY_ERROR, 0); - return ""; - } - if (!glyph->u.notes.first_note) { - gregorio_message(_("called with a glyph that has no note"), - "gregorio_tex_determine_glyph_name", VERBOSITY_ERROR, 0); - return ""; - } + signed char ambitus; + gregorio_note *second_note; + gregorio_assert(glyph, gregoriotex_determine_glyph_name, + "called with NULL pointer", return ""); + gregorio_assert(glyph->u.notes.first_note, gregoriotex_determine_glyph_name, + "called with a glyph that has no note", return ""); *gtype = T_ONE_NOTE; switch (glyph->u.notes.glyph_type) { case G_PODATUS: - pitch = glyph->u.notes.first_note->next->u.note.pitch; switch (glyph->u.notes.first_note->u.note.shape) { case S_QUILISMA: *type = AT_QUILISMA; @@ -702,15 +828,9 @@ const char *gregoriotex_determine_glyph_name(const gregorio_glyph *const glyph, case S_ORISCUS_DESCENDENS: case S_ORISCUS_SCAPUS: *type = AT_ORISCUS; - /* TODO: we could factorize this code */ - if (!is_tail_liquescentia(glyph->u.notes.liquescentia) - && is_longqueue(pitch, glyph, element)) { - *gtype = T_PESQUASSUS_LONGQUEUE; - shape = SHAPE_PesQuassusLongqueue; - } else { - *gtype = T_PESQUASSUS; - shape = SHAPE_PesQuassus; - } + *gtype = T_PESQUASSUS; + shape = quadratum_shape(glyph, SHAPE_PesQuassus, + SHAPE_PesQuassusLongqueue, SHAPE_PesQuassusOpenqueue); ltype = LG_NO_INITIO; break; default: @@ -728,60 +848,36 @@ const char *gregoriotex_determine_glyph_name(const gregorio_glyph *const glyph, } break; case G_PES_QUADRATUM: - pitch = glyph->u.notes.first_note->next->u.note.pitch; switch (glyph->u.notes.first_note->u.note.shape) { case S_QUILISMA: *type = AT_QUILISMA; - if (!is_tail_liquescentia(glyph->u.notes.liquescentia) - && is_longqueue(pitch, glyph, element)) { - *gtype = T_PESQUILISMAQUADRATUM_LONGQUEUE; - shape = SHAPE_PesQuilismaQuadratumLongqueue; - } else { - *gtype = T_PESQUILISMAQUADRATUM; - shape = SHAPE_PesQuilismaQuadratum; - } - ltype = LG_NO_INITIO; - break; - case S_ORISCUS_ASCENDENS: - case S_ORISCUS_DESCENDENS: - *type = AT_ORISCUS; - if (!is_tail_liquescentia(glyph->u.notes.liquescentia) - && is_longqueue(pitch, glyph, element)) { - *gtype = T_PESQUASSUS_LONGQUEUE; - shape = SHAPE_PesQuadratumLongqueue; - } else { - *gtype = T_PESQUASSUS; - shape = SHAPE_PesQuassus; - } + *gtype = T_PESQUILISMAQUADRATUM; + shape = quadratum_shape(glyph, SHAPE_PesQuilismaQuadratum, + SHAPE_PesQuilismaQuadratumLongqueue, + SHAPE_PesQuilismaQuadratumOpenqueue); ltype = LG_NO_INITIO; break; default: *type = AT_ONE_NOTE; - if (!is_tail_liquescentia(glyph->u.notes.liquescentia) - && is_longqueue(pitch, glyph, element)) { - *gtype = T_PESQUADRATUM_LONGQUEUE; - shape = SHAPE_PesQuadratumLongqueue; - } else { - *gtype = T_PESQUADRATUM; - shape = SHAPE_PesQuadratum; - } + *gtype = T_PESQUADRATUM; + shape = quadratum_shape(glyph, SHAPE_PesQuadratum, + SHAPE_PesQuadratumLongqueue, SHAPE_PesQuadratumOpenqueue); ltype = LG_ALL; break; } break; case G_VIRGA_STRATA: - pitch = glyph->u.notes.first_note->next->u.note.pitch; *type = AT_ONE_NOTE; *gtype = T_VIRGA_STRATA; shape = SHAPE_VirgaStrata; ltype = LG_ALL; break; case G_FLEXA: - pitch = glyph->u.notes.first_note->u.note.pitch; + ambitus = first_pitch_of(glyph) - second_pitch_of(glyph); if (glyph->u.notes.liquescentia & L_DEMINUTUS) { *type = AT_FLEXUS_DEMINUTUS; } else { - if (pitch - glyph->u.notes.first_note->next->u.note.pitch == 1) { + if (ambitus == 1) { *type = AT_FLEXUS_1; } else { *type = AT_FLEXUS; @@ -796,26 +892,17 @@ const char *gregoriotex_determine_glyph_name(const gregorio_glyph *const glyph, break; case S_ORISCUS_SCAPUS: - if (is_shortqueue(pitch, glyph, element)) { - *gtype = T_FLEXUS_ORISCUS_SCAPUS; - shape = SHAPE_FlexusOriscusScapus; - } else { - *gtype = T_FLEXUS_ORISCUS_SCAPUS_LONGQUEUE; - shape = SHAPE_FlexusOriscusScapusLongqueue; - } + *gtype = T_FLEXUS_ORISCUS_SCAPUS; + shape = flexus_shape(glyph, ambitus, SHAPE_FlexusOriscusScapus, + SHAPE_FlexusOriscusScapusLongqueue, + SHAPE_FlexusOriscusScapusOpenqueue); ltype = LG_NO_INITIO; break; default: - if (is_shortqueue(pitch, glyph, element)) { - *gtype = glyph->u.notes.fuse_to_next_glyph? T_PORRECTUS - : T_FLEXUS; - shape = SHAPE_Flexus; - } else { - *gtype = glyph->u.notes.fuse_to_next_glyph ? T_PORRECTUS - : T_FLEXUS_LONGQUEUE; - shape = SHAPE_FlexusLongqueue; - } + *gtype = glyph->u.notes.fuse_to_next_glyph? T_PORRECTUS : T_FLEXUS; + shape = flexus_shape(glyph, ambitus, SHAPE_Flexus, + SHAPE_FlexusLongqueue, SHAPE_FlexusOpenqueue); ltype = LG_NO_INITIO; break; } @@ -850,7 +937,8 @@ const char *gregoriotex_determine_glyph_name(const gregorio_glyph *const glyph, case G_PORRECTUS: *type = AT_PORRECTUS; *gtype = T_PORRECTUS; - shape = SHAPE_Porrectus; + shape = porrectus_shape(glyph, SHAPE_Porrectus, + SHAPE_PorrectusLongqueue); ltype = LG_NO_INITIO; break; case G_TORCULUS_RESUPINUS: @@ -867,7 +955,8 @@ const char *gregoriotex_determine_glyph_name(const gregorio_glyph *const glyph, case G_PORRECTUS_FLEXUS: *type = AT_PORRECTUS; *gtype = T_PORRECTUS_FLEXUS; - shape = SHAPE_PorrectusFlexus; + shape = porrectus_shape(glyph, SHAPE_PorrectusFlexus, + SHAPE_PorrectusFlexusLongqueue); ltype = LG_NO_INITIO; break; case G_PORRECTUS_NO_BAR: @@ -883,24 +972,21 @@ const char *gregoriotex_determine_glyph_name(const gregorio_glyph *const glyph, ltype = LG_NO_INITIO; break; case G_ANCUS: - if (glyph->u.notes.liquescentia & L_DEMINUTUS) { - if (pitch - glyph->u.notes.first_note->next->u.note.pitch == 1) { - *type = AT_FLEXUS_1; - } else { - *type = AT_FLEXUS; - } - if (is_shortqueue(pitch, glyph, element)) { - *gtype = T_ANCUS; - shape = SHAPE_Ancus; - } else { - *gtype = T_ANCUS_LONGQUEUE; - shape = SHAPE_AncusLongqueue; - } - ltype = LG_ONLY_DEMINUTUS; + *type = AT_ONE_NOTE; + gregorio_assert(glyph->u.notes.liquescentia & L_DEMINUTUS, + gregoriotex_determine_glyph_name, + "encountered non-deminutus ancus", break); + second_note = second_note_of(glyph); + if (first_pitch_of(glyph) - second_note->u.note.pitch == 1) { + *type = AT_FLEXUS_1; } else { - /* TODO... */ - *type = AT_ONE_NOTE; + *type = AT_FLEXUS; } + *gtype = T_ANCUS; + ambitus = first_pitch_of(glyph) - second_pitch_of(glyph); + shape = flexus_shape(glyph, ambitus, SHAPE_Ancus, + SHAPE_AncusLongqueue, SHAPE_Ancus); + ltype = LG_ONLY_DEMINUTUS; break; case G_SCANDICUS: *type = AT_ONE_NOTE; @@ -910,14 +996,10 @@ const char *gregoriotex_determine_glyph_name(const gregorio_glyph *const glyph, break; case G_SALICUS: *type = AT_ONE_NOTE; - pitch = glyph->u.notes.first_note->next->next->u.note.pitch; - if (is_longqueue(pitch, glyph, element)) { - *gtype = T_SALICUS_LONGQUEUE; - shape = SHAPE_SalicusLongqueue; - } else { - *gtype = T_SALICUS; - shape = SHAPE_Salicus; - } + *gtype = T_SALICUS; + ambitus = third_pitch_of(glyph) - second_pitch_of(glyph); + shape = flexus_shape(glyph, ambitus, SHAPE_Salicus, + SHAPE_SalicusLongqueue, SHAPE_Salicus); ltype = LG_NO_INITIO; break; case G_SALICUS_FLEXUS: @@ -926,9 +1008,7 @@ const char *gregoriotex_determine_glyph_name(const gregorio_glyph *const glyph, shape = SHAPE_SalicusFlexus; ltype = LG_NO_INITIO; break; - case G_ONE_NOTE: case G_PUNCTUM_INCLINATUM: - case G_TRIGONUS: case G_PUNCTA_INCLINATA: case G_2_PUNCTA_INCLINATA_DESCENDENS: case G_3_PUNCTA_INCLINATA_DESCENDENS: @@ -953,10 +1033,13 @@ const char *gregoriotex_determine_glyph_name(const gregorio_glyph *const glyph, *type = AT_ONE_NOTE; break; default: - gregorio_messagef("gregoriotex_determine_glyph_name", VERBOSITY_ERROR, - 0, _("called with unknown glyph: %s"), + /* not reachable unless there's a programming error */ + /* LCOV_EXCL_START */ + gregorio_fail2(gregoriotex_determine_glyph_name, + "called with unknown glyph: %s", gregorio_glyph_type_to_string(glyph->u.notes.glyph_type)); break; + /* LCOV_EXCL_STOP */ } if (shape) { shape = compute_glyph_name(glyph, shape, ltype, false); @@ -977,9 +1060,8 @@ const char *gregoriotex_determine_glyph_name(const gregorio_glyph *const glyph, */ static void gregoriotex_write_voice_info(FILE *f, gregorio_voice_info *voice_info) { - if (!f || !voice_info) { - return; - } + gregorio_assert(f && voice_info, gregoriotex_write_voice_info, + "file or voice_info passed as NULL", return); } /* this function indicates if the syllable is the last of the line. If it's the @@ -1014,50 +1096,7 @@ static bool gregoriotex_is_last_of_line(gregorio_syllable *syllable) } /* - * A small helper for the following function - */ - -static __inline bool is_clef(gregorio_type x) -{ - return x == GRE_CLEF; -} - -/* - * This function is used in write_syllable, it detects if the syllable is like - * (c4), (::c4), (z0c4) or (z0::c4). It returns the gregorio_element of the - * clef change. - */ -static gregorio_element *gregoriotex_syllable_is_clef_change(gregorio_syllable - *syllable) -{ - gregorio_element *element; - if (!syllable || !syllable->elements || !syllable->elements[0]) { - return NULL; - } - element = syllable->elements[0]; - /* we just detect the foud cases */ - if (element->type == GRE_CUSTOS && element->next - && (is_clef(element->next->type)) && !element->next->next) { - return element->next; - } - if (element->type == GRE_BAR && element->next - && (is_clef(element->next->type)) && !element->next->next) { - return element->next; - } - if ((is_clef(element->type)) && !element->next) { - return element; - } - if (element->type == GRE_CUSTOS && element->next - && element->next->type == GRE_BAR && element->next->next - && (is_clef(element->next->next->type)) - && !element->next->next->next) { - return element->next->next; - } - return NULL; -} - -/* - * ! @brief Prints the beginning of each text style + * ! @brief Prints the beginning of each text style */ static void gtex_write_begin(FILE *f, grestyle_style style) { @@ -1087,6 +1126,9 @@ static void gtex_write_begin(FILE *f, grestyle_style style) case ST_COLORED: fprintf(f, "\\GreColored{"); break; + case ST_ELISION: + fprintf(f, "\\GreElision{"); + break; case ST_FIRST_WORD: fprintf(f, "\\GreFirstWord{"); break; @@ -1123,101 +1165,103 @@ static void gtex_write_end(FILE *f, grestyle_style style) } } +static __inline void tex_escape_text(FILE *const f, const char *text) +{ + /* We escape these characters into \string\ddd (where ddd is the decimal + * ASCII value of the character) for most escapes, and into \string\n for + * newlines. We do it this way to get the "raw" string values through TeX + * and into Lua, where the sequences become \ddd and \n respectively and + * are translated into their byte values. Lua can then decide whether the + * full strings should be evaluated by TeX as TeX or as strings */ + for (; *text; ++text) { + switch (*text) { + case '\\': + case '{': + case '}': + case '~': + case '%': /* currently, we'll never get %, but handle it anyway */ + case '#': + case '"': + /* these characters have special meaning to TeX */ + fprintf(f, "\\string\\%03d", *text); + break; + case '\n': + fprintf(f, "\\string\\n"); + break; + case '\r': + /* ignore */ + break; + default: + /* UTF-8 multibyte sequences will fall into here, which is fine */ + fputc(*text, f); + break; + } + } +} + +static __inline void tex_escape_wtext(FILE *const f, const grewchar *text) +{ + /* We escape these characters into \string\ddd (where ddd is the decimal + * ASCII value of the character) for most escapes, and into \string\n for + * newlines. We do it this way to get the "raw" string values through TeX + * and into Lua, where the sequences become \ddd and \n respectively and + * are translated into their byte values. Lua can then decide whether the + * full strings should be evaluated by TeX as TeX or as strings */ + for (; *text; ++text) { + switch (*text) { + case L'\\': + case L'{': + case L'}': + case L'~': + case L'%': /* currently, we'll never get %, but handle it anyway */ + case L'#': + case L'"': + /* these characters have special meaning to TeX */ + fprintf(f, "\\string\\%03d", *text); + break; + case L'\n': + fprintf(f, "\\string\\n"); + break; + case L'\r': + /* ignore */ + break; + default: + gregorio_print_unichar(f, *text); + break; + } + } +} + /* * ! @brief Writes GregorioTeX special characters. This function takes the - * special characters as input (i.e. from gabc representation), and writes them - * * in GregorioTeX form. + * special characters as input (i.e. from gabc representation), and writes them + * * in GregorioTeX form. */ -static void gtex_write_special_char(FILE *f, grewchar *special_char) +static void gtex_write_special_char(FILE *f, const grewchar *special_char) { - if (!gregorio_wcsbufcmp(special_char, "A/")) { - fprintf(f, "\\Abar{}"); - return; - } - if (!gregorio_wcsbufcmp(special_char, "%")) { - fprintf(f, "\\%%{}"); - return; - } - if (!gregorio_wcsbufcmp(special_char, "R/")) { - fprintf(f, "\\Rbar{}"); - return; - } - if (!gregorio_wcsbufcmp(special_char, "V/")) { - fprintf(f, "\\Vbar{}"); - return; - } - if (!gregorio_wcsbufcmp(special_char, ACCENTED_AE)) { - fprintf(f, "\\'\\ae{}"); - return; - } - if (!gregorio_wcsbufcmp(special_char, "'ae")) { - fprintf(f, "\\'\\ae{}"); - return; - } - if (!gregorio_wcsbufcmp(special_char, ACCENTED_OE)) { - fprintf(f, "\\'\\oe{}"); - return; - } - if (!gregorio_wcsbufcmp(special_char, "'oe")) { - fprintf(f, "\\'\\oe{}"); - return; - } - if (!gregorio_wcsbufcmp(special_char, "ae")) { - fprintf(f, "\\ae{}"); - return; - } - if (!gregorio_wcsbufcmp(special_char, "oe")) { - fprintf(f, "\\oe{}"); - return; - } - if (!gregorio_wcsbufcmp(special_char, "*")) { - fprintf(f, "\\GreStar{}"); - return; - } - if (!gregorio_wcsbufcmp(special_char, "+")) { - fprintf(f, "\\GreDagger{}"); - return; - } - if (!gregorio_wcsbufcmp(special_char, "-")) { - fprintf(f, "\\GreZeroHyph{}"); - return; - } - if (!gregorio_wcsbufcmp(special_char, "\\")) { - fprintf(f, "\\textbackslash{}"); - return; - } - if (!gregorio_wcsbufcmp(special_char, "&")) { - fprintf(f, "\\&{}"); - return; - } - if (!gregorio_wcsbufcmp(special_char, "#")) { - fprintf(f, "\\#{}"); - return; - } - if (!gregorio_wcsbufcmp(special_char, "_")) { - fprintf(f, "\\_{}"); - return; - } - if (!gregorio_wcsbufcmp(special_char, "~")) { - fprintf(f, "\\GreTilde{}"); - return; - } + fprintf(f, "\\GreSpecial{"); + tex_escape_wtext(f, special_char); + fprintf(f, "}"); } -static void gtex_write_verb(FILE *f, grewchar *first_char) +static void gtex_write_verb(FILE *f, const grewchar *first_char) { gregorio_print_unistring(f, first_char); } -static void gtex_print_char(FILE *f, grewchar to_print) +static void gtex_print_char(FILE *f, const grewchar to_print) { switch (to_print) { case L'*': fprintf(f, "\\GreStar{}"); break; case L'%': + /* there's currently no way to get a % into gabc, so this wont be hit, + * but we leave it here for safety and possible future use */ + /* LCOV_EXCL_START */ fprintf(f, "\\%%{}"); break; + /* LCOV_EXCL_STOP */ case L'\\': fprintf(f, "\\textbackslash{}"); break; @@ -1245,31 +1289,29 @@ static void gtex_print_char(FILE *f, grewchar to_print) /* a function to map the internal ST_* styles to gregoriotex styles as defined * in gregoriotex-syllables.tex */ -static unsigned char gregoriotex_internal_style_to_gregoriotex(grestyle_style - style) +static unsigned char gregoriotex_internal_style_to_gregoriotex( + const grestyle_style style) { switch (style) { case ST_ITALIC: return 1; - break; case ST_BOLD: return 2; - break; case ST_SMALL_CAPS: return 3; - break; case ST_TT: return 4; - break; case ST_UNDERLINED: return 5; - break; case ST_COLORED: return 6; - break; default: + /* not reachable unless there's a programming error */ + /* LCOV_EXCL_START */ + gregorio_fail2(gregoriotex_internal_style_to_gregoriotex, + "unrecognized style: %s", grestyle_style_to_string(style)); return 0; - break; + /* LCOV_EXCL_STOP */ } } @@ -1278,78 +1320,105 @@ static unsigned char gregoriotex_internal_style_to_gregoriotex(grestyle_style * when this style is on all the parts, then we return this style. * */ -static grestyle_style gregoriotex_fix_style(gregorio_character *first_character) +static grestyle_style gregoriotex_fix_style( + const gregorio_character *current_char) { grestyle_style possible_fixed_style = ST_NO_STYLE; - unsigned char state = 0; - /* - * states are: - 0: we didn't meet any style yet, which means that if we - * encounter: * a character -> we can return, nothing to do * a style -> we - * go in state 1 * center or initial: stay in state 0 - 1: we encountered a - * style, if we encounter * another style : we can return * something that - * makes us change syllable part (like center or initial) -> go in state 2 * - * a character : stay in state 1 - 2: if we encounter: * another style, then - * return * a character, then return * the same style: go in state 1 - */ - gregorio_character *current_char = first_character; + grestyle_style in_fixed_style = ST_NO_STYLE; while (current_char) { - switch (state) { - case 0: - if (current_char->is_character) - return 0; - if (current_char->cos.s.style != ST_CENTER - && current_char->cos.s.style != ST_FORCED_CENTER - && current_char->cos.s.style != ST_FIRST_WORD - && current_char->cos.s.style != ST_FIRST_SYLLABLE - && current_char->cos.s.style != ST_FIRST_SYLLABLE_INITIAL - && current_char->cos.s.style != ST_SPECIAL_CHAR - && current_char->cos.s.style != ST_VERBATIM - && current_char->cos.s.style != ST_INITIAL) { - possible_fixed_style = current_char->cos.s.style; - state = 1; + if (!in_fixed_style) { + /* before the first style */ + if (current_char->is_character) { + /* got some character, so no future style can apply to the + * entire syllable */ + return ST_NO_STYLE; + } + if (current_char->cos.s.type == ST_T_BEGIN) { + switch (current_char->cos.s.style) { + case ST_VERBATIM: + case ST_SPECIAL_CHAR: + /* these are pseudo-characters, and if they appear + * before the first style, then the style does not + * apply to the entire syllable */ + return ST_NO_STYLE; + + case ST_ITALIC: + case ST_BOLD: + case ST_TT: + case ST_SMALL_CAPS: + case ST_UNDERLINED: + case ST_COLORED: + if (possible_fixed_style) { + if (current_char->cos.s.style != possible_fixed_style) { + /* found a differing style */ + return ST_NO_STYLE; + } else { + /* same style which may apply to the entire + * syllable */ + in_fixed_style = possible_fixed_style; + } + } else { + /* we found a candidate fixed style */ + in_fixed_style = possible_fixed_style = + current_char->cos.s.style; + } + break; + + default: + /* anything else is "transparent" before the first real + * or pseudo-character */ + break; + } } - break; - case 1: + /* else it's an end of a style, which we treat as "transparent" + * noise */ + } else { + /* we have a possible style */ if (!current_char->is_character) { - if (!current_char->is_character - && current_char->cos.s.style != ST_CENTER - && current_char->cos.s.style != ST_FORCED_CENTER - && current_char->cos.s.style != ST_FIRST_WORD - && current_char->cos.s.style != ST_FIRST_SYLLABLE - && current_char->cos.s.style != ST_FIRST_SYLLABLE_INITIAL - && current_char->cos.s.style != ST_INITIAL) { - state = 2; - } else if (current_char->cos.s.style != possible_fixed_style - && current_char->cos.s.style != ST_SPECIAL_CHAR - && current_char->cos.s.style != ST_VERBATIM) - return 0; - } - break; - case 2: - if (current_char->is_character) - return 0; - if (current_char->cos.s.style != ST_CENTER - && current_char->cos.s.style != ST_FORCED_CENTER - && current_char->cos.s.style != ST_FIRST_WORD - && current_char->cos.s.style != ST_FIRST_SYLLABLE - && current_char->cos.s.style != ST_FIRST_SYLLABLE_INITIAL - && current_char->cos.s.style != ST_SPECIAL_CHAR - && current_char->cos.s.style != ST_VERBATIM - && current_char->cos.s.style != ST_INITIAL) { - if (current_char->cos.s.style != possible_fixed_style) { - return 0; - } else { - state = 1; + if (current_char->cos.s.type == ST_T_BEGIN) { + switch (current_char->cos.s.style) { + case ST_ITALIC: + case ST_BOLD: + case ST_TT: + case ST_SMALL_CAPS: + case ST_UNDERLINED: + case ST_COLORED: + if (current_char->cos.s.style != possible_fixed_style) { + /* found a differing style */ + return ST_NO_STYLE; + } + /* else it's a (nested) open of the same style, which + * doesn't change the style; however, nested styles + * (should) have been eliminated by now */ + /* LCOV_EXCL_START */ + gregorio_fail(gregoriotex_fix_style, "encountered a " + "nested style which should have been removed " + "by now"); + break; + /* LCOV_EXCL_STOP */ + + default: + /* anything else is a pseudo-character or a + * "transparent" style, which don't affect the fixed + * style */ + break; + } + } else if (current_char->cos.s.type == ST_T_END) { + if (current_char->cos.s.style == possible_fixed_style) { + /* we closed the possible fixed style; we don't return + * yet to give it the chance to re-open */ + in_fixed_style = ST_NO_STYLE; + } + /* else it's a close of something we don't care about or a + * style that wasn't opened, so for the purposes of this + * function, these are "transparent" and don't affect the + * fixed style */ } } - break; - default: - break; + /* else it's a character, and that doesn't affect the fixed style */ } current_char = current_char->next_character; } - /* if we reached here, this means that we there is only one style applied - * to all the characters */ return possible_fixed_style; } @@ -1360,12 +1429,10 @@ static grestyle_style gregoriotex_fix_style(gregorio_character *first_character) * entire string of text under the normal text line, without considering any * special centering or linebreaks. */ -static void gregoriotex_write_translation(FILE *f, +static __inline void write_translation(FILE *f, gregorio_character *translation) { - if (translation == NULL) { - return; - } + gregorio_not_null(translation, write_translation, return); gregorio_write_text(WTP_NORMAL, translation, f, >ex_write_verb, >ex_print_char, >ex_write_begin, >ex_write_end, >ex_write_special_char); @@ -1401,9 +1468,11 @@ static char clef_flat_height(gregorio_clef clef, signed char line, bool flatted) offset = 10; break; default: - gregorio_messagef("clef_flat_height", VERBOSITY_ERROR, - 0, _("unknown line number: %d"), line); + /* not reachable unless there's a programming error */ + /* LCOV_EXCL_START */ + gregorio_fail2(clef_flat_height, "unknown line number: %d", line); break; + /* LCOV_EXCL_STOP */ } break; case CLEF_F: @@ -1424,15 +1493,19 @@ static char clef_flat_height(gregorio_clef clef, signed char line, bool flatted) offset = 7; break; default: - gregorio_messagef("clef_flat_height", VERBOSITY_ERROR, - 0, _("unknown line number: %d"), line); + /* not reachable unless there's a programming error */ + /* LCOV_EXCL_START */ + gregorio_fail2(clef_flat_height, "unknown line number: %d", line); break; + /* LCOV_EXCL_STOP */ } break; default: - gregorio_messagef("clef_flat_height", VERBOSITY_ERROR, 0, - _("unknown clef type: %d"), clef); + /* not reachable unless there's a programming error */ + /* LCOV_EXCL_START */ + gregorio_fail2(clef_flat_height, "unknown clef type: %d", clef); break; + /* LCOV_EXCL_STOP */ } return pitch_value(LOWEST_PITCH + offset); @@ -1495,9 +1568,11 @@ static void write_bar(FILE *f, gregorio_bar type, fprintf(f, "Dominica{8}"); break; default: - gregorio_messagef("write_bar", VERBOSITY_ERROR, 0, - _("unknown bar type: %d"), type); + /* not reachable unless there's a programming error */ + /* LCOV_EXCL_START */ + gregorio_fail2(write_bar, "unknown bar type: %d", type); break; + /* LCOV_EXCL_STOP */ } fprintf(f, "{%c}", has_text? '1' : '0'); switch (signs) { @@ -1534,7 +1609,7 @@ static __inline char *suppose_low_ledger_line(const gregorio_note *const note) * we consider that the two puncta of the augumentum duplex must correspond to * the last note and the previous note. If we are adding to a single note * glyph, which would be weird but sure why not, we just typeset two puncta - * spaced of 2. + * spaced of 2. */ static void gregoriotex_write_auctum_duplex(FILE *f, gregorio_note *current_note) @@ -1669,7 +1744,6 @@ static void gregoriotex_write_punctum_mora(FILE *f, gregorio_glyph *glyph, } /* we enter here in any case */ switch (glyph->u.notes.glyph_type) { - case G_TRIGONUS: case G_PUNCTA_INCLINATA: case G_2_PUNCTA_INCLINATA_DESCENDENS: case G_3_PUNCTA_INCLINATA_DESCENDENS: @@ -1683,11 +1757,13 @@ static void gregoriotex_write_punctum_mora(FILE *f, gregorio_glyph *glyph, default: break; } - if (current_note->u.note.shape == S_PUNCTUM_INCLINATUM) { - punctum_inclinatum = 1; - } - if (current_note->u.note.shape == S_PUNCTUM_INCLINATUM_DEMINUTUS) { + switch (current_note->u.note.shape) { + case S_PUNCTUM_INCLINATUM: + case S_PUNCTUM_INCLINATUM_DEMINUTUS: punctum_inclinatum = 1; + break; + default: + break; } /* when the punctum mora is on a note on a line, and the prior note is on * the space immediately above, the dot is placed on the space below the @@ -1832,7 +1908,7 @@ static __inline int get_punctum_inclinatum_space_case( } } } - } + } /* LCOV_EXCL_LINE */ break; case S_PUNCTUM_INCLINATUM_AUCTUS: case S_PUNCTUM_CAVUM_INCLINATUM_AUCTUS: @@ -1976,9 +2052,8 @@ static void gregoriotex_write_hepisema(FILE *const f, { int porrectus_long_episema_index = -1; - if (!note) { - return; - } + gregorio_assert(note, gregoriotex_write_hepisema, + "called with NULL pointer", return); switch (type) { case T_PORRECTUS: @@ -2008,20 +2083,18 @@ static void write_additional_line(FILE *f, int i, gtex_type type, bool bottom, gregorio_note *current_note, const gregorio_score *const score) { char ambitus = 0; - if (!current_note) { - gregorio_message(_("called with no note"), "write_additional_line", - VERBOSITY_ERROR, 0); - return; - } + gregorio_assert(current_note, write_additional_line, "called with no note", + return); /* patch to get a line under the full glyph in the case of dbc (for * example) */ switch (type) { case T_PORRECTUS: case T_PORRECTUS_FLEXUS: - if (i == 1) { + switch (i) { + case 1: i = HEPISEMA_FIRST_TWO; - } - if (i == 2) { + break; + case 2: if (current_note->previous->u.note.pitch > LOW_LEDGER_LINE_PITCH && current_note->previous->u.note.pitch < score->high_ledger_line_pitch) { @@ -2031,21 +2104,23 @@ static void write_additional_line(FILE *f, int i, gtex_type type, bool bottom, } else { return; } - } - if (i == 3) { + break; + case 3: if (bottom || current_note->previous->u.note.pitch >= score->high_ledger_line_pitch) { /* we don't need to add twice the same line */ return; } + break; } break; case T_TORCULUS_RESUPINUS: case T_TORCULUS_RESUPINUS_FLEXUS: - if (i == 2) { + switch (i) { + case 2: i = HEPISEMA_FIRST_TWO; - } - if (i == 3) { + break; + case 3: if (current_note->previous->u.note.pitch > LOW_LEDGER_LINE_PITCH && current_note->previous->u.note.pitch < score->high_ledger_line_pitch) { @@ -2055,13 +2130,14 @@ static void write_additional_line(FILE *f, int i, gtex_type type, bool bottom, } else { return; } - } - if (i == 4) { + break; + case 4: if (bottom || current_note->previous->u.note.pitch >= score->high_ledger_line_pitch) { /* we don't need to add twice the same line */ return; } + break; } break; default: @@ -2071,25 +2147,21 @@ static void write_additional_line(FILE *f, int i, gtex_type type, bool bottom, if (i == HEPISEMA_FIRST_TWO) { /* here we must compare the first note of the big bar with the second * one, but it may be tricky sometimes, because of the previous patch */ - if (current_note->previous && - current_note->previous->u.note.pitch > - current_note->u.note.pitch) { - ambitus = current_note->previous->u.note.pitch - - current_note->u.note.pitch; - } else { - ambitus = current_note->u.note.pitch - - current_note->next->u.note.pitch; - } + gregorio_assert_only(!current_note->previous || + current_note->u.note.pitch + > current_note->previous->u.note.pitch, + write_additional_line, "HEPISEMA_FIRST_TWO on the wrong note"); + ambitus = current_note->u.note.pitch - current_note->next->u.note.pitch; } fprintf(f, "\\GreAdditionalLine{\\GreOCase%s}{%d}{%d}%%\n", current_note->gtex_offset_case, ambitus, bottom ? 3 : 2); } /* - * - * a function that writes the good value of \vepisema in GregorioTeX. i is the + * + * a function that writes the good value of \vepisema in GregorioTeX. i is the * position of the note in the glyph - * + * */ static void gregoriotex_write_vepisema(FILE *f, gregorio_note *note) @@ -2134,7 +2206,11 @@ static void gregoriotex_write_rare(FILE *f, gregorio_note *current_note, /* the cases of the bar signs are dealt in another function * (write_bar) */ default: + /* not reachable unless there's a programming error */ + /* LCOV_EXCL_START */ + assert(false); break; + /* LCOV_EXCL_STOP */ } } @@ -2143,39 +2219,54 @@ static void gregoriotex_write_rare(FILE *f, gregorio_note *current_note, */ static void gregoriotex_write_note(FILE *f, gregorio_note *note, - gregorio_glyph *glyph, gregorio_element *element, char next_note_pitch) + gregorio_glyph *glyph, char next_note_pitch) { unsigned int initial_shape = note->u.note.shape; const char *shape; int space_case; /* type in the sense of GregorioTeX alignment type */ gtex_alignment type = AT_ONE_NOTE; - if (!note) { - gregorio_message(_ - ("called with NULL pointer"), - "gregoriotex_write_note", VERBOSITY_ERROR, 0); - return; - } + gregorio_assert(note, gregoriotex_write_note, "called with NULL pointer", + return); if (note->u.note.shape == S_PUNCTUM) { switch (note->u.note.liquescentia) { case L_AUCTUS_ASCENDENS: + /* not reachable unless there's a programming error */ + /* LCOV_EXCL_START */ + gregorio_fail(gregoriotex_write_note, + "encounted S_PUNCTUM with L_AUCTUS_ASCENDENS"); + /* should have been changed by this point */ note->u.note.shape = S_PUNCTUM_AUCTUS_ASCENDENS; break; + /* LCOV_EXCL_STOP */ case L_AUCTUS_DESCENDENS: + /* not reachable unless there's a programming error */ + /* LCOV_EXCL_START */ + gregorio_fail(gregoriotex_write_note, + "encounted S_PUNCTUM with L_AUCTUS_DESCENDENS"); + /* should have been changed by this point */ note->u.note.shape = S_PUNCTUM_AUCTUS_DESCENDENS; break; + /* LCOV_EXCL_STOP */ case L_INITIO_DEBILIS: if (glyph->u.notes.fuse_to_next_glyph > 0) { break; } /* else fall through to next case */ case L_DEMINUTUS: + /* not reachable unless there's a programming error */ + /* LCOV_EXCL_START */ + gregorio_fail(gregoriotex_write_note, + "encounted S_PUNCTUM with L_DEMINUTUS"); + /* should have been changed by this point */ note->u.note.shape = S_PUNCTUM_DEMINUTUS; + break; + /* LCOV_EXCL_STOP */ default: break; } } - shape = gregoriotex_determine_note_glyph_name(note, glyph, element, &type); + shape = gregoriotex_determine_note_glyph_name(note, glyph, &type); note->u.note.shape = initial_shape; /* special things for puncta inclinata */ space_case = get_punctum_inclinatum_space_case(note); @@ -2250,13 +2341,10 @@ static int gregoriotex_syllable_first_type(gregorio_syllable *syllable) int alteration = 0; gregorio_glyph *glyph; gregorio_element *element; - if (!syllable || !syllable->elements) { - gregorio_message(_("called with a NULL argument"), - "gregoriotex_syllable_first_type", VERBOSITY_ERROR, 0); - return 0; - } - element = syllable->elements[0]; - while (element) { + gregorio_assert(syllable && syllable->elements, + gregoriotex_syllable_first_type, "called with a NULL argument", + return 0); + for (element = syllable->elements[0]; element; element = element->next) { if (element->type == GRE_BAR) { switch (element->u.misc.unpitched.info.bar) { case B_NO_BAR: @@ -2280,8 +2368,12 @@ static int gregoriotex_syllable_first_type(gregorio_syllable *syllable) result = 12; break; default: + /* not reachable unless there's a programming error */ + /* LCOV_EXCL_START */ + gregorio_fail(gregoriotex_syllable_first_type, "invalid bar"); result = 0; break; + /* LCOV_EXCL_STOP */ } return result; } @@ -2302,12 +2394,15 @@ static int gregoriotex_syllable_first_type(gregorio_syllable *syllable) alteration = 60; break; default: - /* do nothing */ + /* not reachable unless there's a programming error */ + /* LCOV_EXCL_START */ + gregorio_fail(gregoriotex_syllable_first_type, + "invalid alteration"); break; + /* LCOV_EXCL_STOP */ } } continue; - case G_TRIGONUS: case G_PUNCTA_INCLINATA: case G_2_PUNCTA_INCLINATA_DESCENDENS: case G_3_PUNCTA_INCLINATA_DESCENDENS: @@ -2329,20 +2424,16 @@ static int gregoriotex_syllable_first_type(gregorio_syllable *syllable) case G_BIVIRGA: case G_TRIVIRGA: gregoriotex_determine_note_glyph_name - (glyph->u.notes.first_note, glyph, element, - &type); + (glyph->u.notes.first_note, glyph, &type); break; default: - gregoriotex_determine_glyph_name(glyph, element, &type, - >ype); + gregoriotex_determine_glyph_name(glyph, &type, >ype); break; } return type + alteration; } - glyph = glyph->next; } } - element = element->next; } return 0; } @@ -2410,14 +2501,14 @@ static void gregoriotex_write_choral_sign(FILE *f, gregorio_glyph *glyph, } /* - * + * * A function that write the signs of a glyph, which has the type type (T_*, * not G_*, which is in the glyph->glyph_type), and (important), we start only * at the note current_note. It is due to the way we call it : if type is * T_ONE_NOTE, we just do the signs on current_note, not all. This is the case * for example for the first note of the torculus resupinus, or the * G_*_PUNCTA_INCLINATA. - * + * */ /* small helper */ @@ -2489,8 +2580,6 @@ static void gregoriotex_write_signs(FILE *f, gtex_type type, /* i is the number of the note for which we are typesetting the sign. */ int i; gregorio_note *current_note; - /* a dumb char */ - char block_hepisema = 0; signed char high_pitch = UNDETERMINED_HEIGHT; signed char low_pitch = UNDETERMINED_HEIGHT; bool found = false; @@ -2555,15 +2644,6 @@ static void gregoriotex_write_signs(FILE *f, gtex_type type, /* do nothing */ break; } - /* why is this if there?... */ - if (!current_note->special_sign) { - if (block_hepisema == 2) { - block_hepisema = 0; - } - if (block_hepisema == 1) { - block_hepisema = 2; - } - } if (type == T_ONE_NOTE) { break; } @@ -2642,7 +2722,7 @@ static void write_glyph(FILE *f, gregorio_syllable *syllable, gtex_alignment type = 0; /* the type of the glyph, in the sense of the shape (T_PES, etc.) */ gtex_type gtype = 0; - char next_note_pitch = 0; + signed char next_note_pitch = 0; gregorio_note *current_note; const char *leading_shape, *shape; const gregorio_glyph *prev_glyph = @@ -2650,16 +2730,9 @@ static void write_glyph(FILE *f, gregorio_syllable *syllable, int fuse_to_next_note, fuse_from_previous_note = (prev_glyph && prev_glyph->type == GRE_GLYPH) ? prev_glyph->u.notes.fuse_to_next_glyph : 0; - if (!glyph) { - gregorio_message(_("called with NULL pointer"), "write_glyph", - VERBOSITY_ERROR, 0); - return; - } - if (glyph->type != GRE_GLYPH || !glyph->u.notes.first_note) { - gregorio_message(_("called with glyph without note"), "write_glyph", - VERBOSITY_ERROR, 0); - return; - } + gregorio_assert(glyph, write_glyph, "called with NULL pointer", return); + gregorio_assert(glyph->type == GRE_GLYPH && glyph->u.notes.first_note, + write_glyph, "called with glyph without note", return); fuse_to_next_note = glyph->u.notes.fuse_to_next_glyph; if (fuse_from_previous_note) { fprintf(f, "\\GreFuse"); @@ -2671,7 +2744,6 @@ static void write_glyph(FILE *f, gregorio_syllable *syllable, * in general, and torculus resupinus and torculus resupinus flexus, so * we first divide the glyph into real gregoriotex glyphs */ switch (glyph->u.notes.glyph_type) { - case G_TRIGONUS: case G_PUNCTA_INCLINATA: case G_2_PUNCTA_INCLINATA_DESCENDENS: case G_3_PUNCTA_INCLINATA_DESCENDENS: @@ -2682,8 +2754,7 @@ static void write_glyph(FILE *f, gregorio_syllable *syllable, case G_4_PUNCTA_INCLINATA_ASCENDENS: case G_5_PUNCTA_INCLINATA_ASCENDENS: while (current_note) { - gregoriotex_write_note(f, current_note, glyph, element, - next_note_pitch); + gregoriotex_write_note(f, current_note, glyph, next_note_pitch); gregoriotex_write_signs(f, T_ONE_NOTE, glyph, current_note, current_note->next ? 0 : fuse_to_next_note, status, score); current_note = current_note->next; @@ -2691,46 +2762,26 @@ static void write_glyph(FILE *f, gregorio_syllable *syllable, /* TODO: handle fusion to next note */ break; case G_SCANDICUS: - if ((glyph->u.notes.liquescentia & L_DEMINUTUS) + gregorio_assert((glyph->u.notes.liquescentia & L_DEMINUTUS) || glyph->u.notes.liquescentia == L_NO_LIQUESCENTIA - || glyph->u.notes.liquescentia == L_FUSED) { - shape = gregoriotex_determine_glyph_name(glyph, element, &type, - >ype); - fprintf(f, "\\GreGlyph{\\GreCP%s}{%d}{%d}{%d}", shape, - pitch_value(glyph->u.notes.first_note->u.note.pitch), - pitch_value(next_note_pitch), type); - gregoriotex_write_signs(f, gtype, glyph, glyph->u.notes.first_note, - fuse_to_next_note, status, score); - } else { - while (current_note) { - gregoriotex_write_note(f, current_note, glyph, element, - next_note_pitch); - gregoriotex_write_signs(f, T_ONE_NOTE, glyph, current_note, - current_note->next ? 0 : fuse_to_next_note, status, - score); - current_note = current_note->next; - } - } + || glyph->u.notes.liquescentia == L_FUSED, write_glyph, + "encountered an invalid scandicus", break); + shape = gregoriotex_determine_glyph_name(glyph, &type, >ype); + fprintf(f, "\\GreGlyph{\\GreCP%s}{%d}{%d}{%d}", shape, + pitch_value(glyph->u.notes.first_note->u.note.pitch), + pitch_value(next_note_pitch), type); + gregoriotex_write_signs(f, gtype, glyph, glyph->u.notes.first_note, + fuse_to_next_note, status, score); break; case G_ANCUS: - if (glyph->u.notes.liquescentia & L_DEMINUTUS) { - shape = gregoriotex_determine_glyph_name(glyph, element, &type, - >ype); - fprintf(f, "\\GreGlyph{\\GreCP%s}{%d}{%d}{%d}", shape, - pitch_value(glyph->u.notes.first_note->u.note.pitch), - pitch_value(next_note_pitch), type); - gregoriotex_write_signs(f, gtype, glyph, glyph->u.notes.first_note, - fuse_to_next_note, status, score); - } else { - while (current_note) { - gregoriotex_write_note(f, current_note, glyph, element, - next_note_pitch); - gregoriotex_write_signs(f, T_ONE_NOTE, glyph, current_note, - current_note->next ? 0 : fuse_to_next_note, status, - score); - current_note = current_note->next; - } - } + gregorio_assert(glyph->u.notes.liquescentia & L_DEMINUTUS, + write_glyph, "encountered a non-deminutus ancus", break); + shape = gregoriotex_determine_glyph_name(glyph, &type, >ype); + fprintf(f, "\\GreGlyph{\\GreCP%s}{%d}{%d}{%d}", shape, + pitch_value(glyph->u.notes.first_note->u.note.pitch), + pitch_value(next_note_pitch), type); + gregoriotex_write_signs(f, gtype, glyph, glyph->u.notes.first_note, + fuse_to_next_note, status, score); break; case G_TORCULUS_RESUPINUS_FLEXUS: /* we retain this "old-style" fusion as it does look marginally better @@ -2739,7 +2790,7 @@ static void write_glyph(FILE *f, gregorio_syllable *syllable, /* trick to have the good position for these glyphs */ glyph->u.notes.glyph_type = G_PORRECTUS_FLEXUS_NO_BAR; glyph->u.notes.first_note = current_note->next; - shape = gregoriotex_determine_glyph_name(glyph, element, &type, >ype); + shape = gregoriotex_determine_glyph_name(glyph, &type, >ype); fprintf(f, "\\GreGlyph{\\GreFuseTwo{\\GreCP%s}{\\GreCP%s}}{%d}{%d}{%d}", leading_shape, shape, pitch_value(glyph->u.notes.first_note->u.note.pitch), @@ -2752,8 +2803,7 @@ static void write_glyph(FILE *f, gregorio_syllable *syllable, case G_BIVIRGA: case G_TRIVIRGA: while (current_note) { - gregoriotex_write_note(f, current_note, glyph, element, - next_note_pitch); + gregoriotex_write_note(f, current_note, glyph, next_note_pitch); gregoriotex_write_signs(f, T_ONE_NOTE, glyph, current_note, current_note->next ? 0 : fuse_to_next_note, status, score); current_note = current_note->next; @@ -2767,8 +2817,7 @@ static void write_glyph(FILE *f, gregorio_syllable *syllable, case G_DISTROPHA: case G_DISTROPHA_AUCTA: while (current_note) { - gregoriotex_write_note(f, current_note, glyph, element, - next_note_pitch); + gregoriotex_write_note(f, current_note, glyph, next_note_pitch); gregoriotex_write_signs(f, T_ONE_NOTE, glyph, current_note, current_note->next ? 0 : fuse_to_next_note, status, score); current_note = current_note->next; @@ -2820,7 +2869,7 @@ static void write_glyph(FILE *f, gregorio_syllable *syllable, case G_STROPHA: case G_STROPHA_AUCTA: case G_ALTERATION: - gregoriotex_write_note(f, glyph->u.notes.first_note, glyph, element, + gregoriotex_write_note(f, glyph->u.notes.first_note, glyph, next_note_pitch); gregoriotex_write_signs(f, T_ONE_NOTE, glyph, current_note, fuse_to_next_note, status, score); @@ -2837,8 +2886,7 @@ static void write_glyph(FILE *f, gregorio_syllable *syllable, /* trick to have the good position for these glyphs */ glyph->u.notes.glyph_type = G_PORRECTUS_NO_BAR; glyph->u.notes.first_note = current_note->next; - shape = gregoriotex_determine_glyph_name(glyph, element, &type, - >ype); + shape = gregoriotex_determine_glyph_name(glyph, &type, >ype); fprintf(f, "\\GreGlyph{\\GreFuseTwo{\\GreCP%s}{\\GreCP%s}}" "{%d}{%d}{%d}", leading_shape, shape, pitch_value(glyph->u.notes.first_note->u.note.pitch), @@ -2849,8 +2897,7 @@ static void write_glyph(FILE *f, gregorio_syllable *syllable, fuse_to_next_note, status, score); break; } else { - shape = gregoriotex_determine_glyph_name(glyph, element, &type, - >ype); + shape = gregoriotex_determine_glyph_name(glyph, &type, >ype); fprintf(f, "\\GreGlyph{\\GreCP%s}{%d}{%d}{%d}", shape, pitch_value(glyph->u.notes.first_note->u.note.pitch), pitch_value(next_note_pitch), type); @@ -2880,11 +2927,16 @@ static void write_element(FILE *f, gregorio_syllable *syllable, case SP_HALF_SPACE: fprintf(f, "\\GreEndOfGlyph{22}%%\n"); break; + case SP_INTERGLYPH_SPACE: + fprintf(f, "\\GreEndOfGlyph{0}%%\n"); + break; default: - gregorio_message( - _("encountered an unexpected glyph-level space"), - "write_element", VERBOSITY_ERROR, 0); + /* not reachable unless there's a programming error */ + /* LCOV_EXCL_START */ + gregorio_fail(write_element, + "encountered an unexpected glyph-level space"); break; + /* LCOV_EXCL_STOP */ } break; @@ -2996,9 +3048,7 @@ static void gregoriotex_print_change_line_clef(FILE *f, static __inline bool is_manual_custos(const gregorio_element *element) { - return element->type == GRE_ELEMENT - && element->u.first_glyph - && element->u.first_glyph->type == GRE_MANUAL_CUSTOS; + return element->type == GRE_CUSTOS && element->u.misc.pitched.force_pitch; } static __inline bool next_is_bar(const gregorio_syllable *syllable, @@ -3030,19 +3080,15 @@ static __inline bool next_is_bar(const gregorio_syllable *syllable, if (!syllable) { return false; } - if (syllable->type == GRE_BAR) { - return true; - } - if (syllable->type != GRE_SYLLABLE) { - return false; - } - /* the next syllable is a GRE_SYLLABLE; so look at the element */ element = syllable->elements[0]; } - assert(false); /* should never reach here */ - return false; /* avoid gcc 5.1 warning */ + /* not reachable unless there's a programming error */ + /* LCOV_EXCL_START */ + gregorio_fail(next_is_bar, "unexpected end of syllables/elements"); + return false; + /* LCOV_EXCL_STOP */ } static void finish_syllable(FILE *f, gregorio_syllable *syllable) { @@ -3097,7 +3143,7 @@ static __inline void write_syllable_point_and_click(FILE *const f, } } -static void write_syllable_text(FILE *f, const char *const syllable_type, +static void write_syllable_text(FILE *f, const char *const syllable_type, const gregorio_character *text, bool ignored __attribute__((unused))) { if (syllable_type != NULL) { @@ -3107,11 +3153,12 @@ static void write_syllable_text(FILE *f, const char *const syllable_type, } } -static void write_first_syllable_text(FILE *f, const char *const syllable_type, +static void write_first_syllable_text(FILE *f, const char *const syllable_type, const gregorio_character *const text, bool end_of_word) { - if (syllable_type == NULL || text == NULL) { - fprintf(f, "}{}{\\GreSetNoFirstSyllableText}"); + gregorio_not_null(syllable_type, write_first_syllable_text, return); + if (text == NULL) { + fprintf(f, "}{%s}{\\GreSetNoFirstSyllableText}", syllable_type); } else { gregorio_character *text_with_initial = gregorio_clone_characters(text), *text_without_initial = gregorio_clone_characters(text); @@ -3234,9 +3281,9 @@ static __inline void anticipate_event(FILE *f, gregorio_syllable *syllable) { /* * Arguments are relatively obvious. The most obscure is certainly first_of_disc * which is 0 all the time, except in the case of a "clef change syllable". In - * this case we make a \GreDiscretionary with two arguments: + * this case we make a \GreDiscretionary with two arguments: * 1.what should be printed if the syllable is the last of its line (which - * basically means everything but clefs and custos), and + * basically means everything but clefs and custos), and * 2. what should be printed if it's in a middle of a line (which means * everything) * So the first_of_disc argument is: @@ -3253,14 +3300,11 @@ static void write_syllable(FILE *f, gregorio_syllable *syllable, gregorio_element *clef_change_element = NULL, *element; const char *syllable_type = NULL; bool event_anticipated = false; - bool end_of_word = syllable->position == WORD_END + bool end_of_word; + gregorio_not_null(syllable, write_syllable, return); + end_of_word = syllable->position == WORD_END || syllable->position == WORD_ONE_SYLLABLE || !syllable->text - || !syllable->next_syllable - || syllable->next_syllable->type == GRE_END_OF_LINE; - if (!syllable) { - write_this_syllable_text(f, NULL, NULL, end_of_word); - return; - } + || !syllable->next_syllable; /* Very first: before anything, if the syllable is the beginning of a * no-linebreak area: */ if (syllable->no_linebreak_area == NLBA_BEGINNING) { @@ -3273,10 +3317,13 @@ static void write_syllable(FILE *f, gregorio_syllable *syllable, * first we check if the syllable is only a end of line. If it is the case, * we don't print anything but a comment (to be able to read it if we read * GregorioTeX). The end of lines are treated separately in GregorioTeX, it - * is buit inside the TeX structure. + * is buit inside the TeX structure. */ if (syllable->elements && *(syllable->elements)) { if ((syllable->elements)[0]->type == GRE_END_OF_LINE) { + gregorio_assert(syllable != score->first_syllable, write_syllable, + "line break is not supported on the first syllable", + return); if ((syllable->elements)[0]->u.misc.unpitched.info.eol_ragged) { fprintf(f, "%%\n%%\n\\GreNewParLine %%\n%%\n%%\n"); } else { @@ -3289,13 +3336,17 @@ static void write_syllable(FILE *f, gregorio_syllable *syllable, * This case is not simple: if the syllable contains a clef change, * whether it is (c4) or (::c4) or (z0::c4), we put it in a * discretionary. Warning: only these three cases will have the expected - * effect. So first we detect it: + * effect. So first we detect it: */ if (first_of_disc == 0) { /* to avoid infinite loops */ - clef_change_element = gregoriotex_syllable_is_clef_change(syllable); + clef_change_element = gregorio_get_clef_change(syllable); if (clef_change_element) { + gregorio_assert(syllable != score->first_syllable, + write_syllable, + "clef change is not supported on the first syllable", + return); /* - * In this case, the first thing to do is to change the line clef + * In this case, the first thing to do is to change the line clef */ gregoriotex_print_change_line_clef(f, clef_change_element); fprintf(f, "\\GreDiscretionary{0}{%%\n"); @@ -3312,22 +3363,27 @@ static void write_syllable(FILE *f, gregorio_syllable *syllable, write_fixed_text_styles(f, syllable->text, syllable->next_syllable? syllable->next_syllable->text : NULL); if ((syllable->elements)[0]->type == GRE_BAR) { - if (!syllable->next_syllable && !syllable->text - && (syllable->elements)[0]->u.misc.unpitched.info.bar == - B_DIVISIO_FINALIS) { - handle_final_bar(f, "DivisioFinalis", syllable); - write_this_syllable_text(f, NULL, syllable->text, end_of_word); - return; - } - if (!syllable->next_syllable && !syllable->text - && (syllable->elements)[0]->u.misc.unpitched.info.bar == - B_DIVISIO_MAIOR) { - handle_final_bar(f, "DivisioMaior", syllable); - write_this_syllable_text(f, NULL, syllable->text, end_of_word); - return; - } else { - syllable_type = "\\GreBarSyllable"; + if (syllable != score->first_syllable) { + if (!syllable->next_syllable && !syllable->text + && (syllable->elements)[0]->u.misc.unpitched.info.bar + == B_DIVISIO_FINALIS) { + handle_final_bar(f, "DivisioFinalis", syllable); + write_this_syllable_text(f, NULL, syllable->text, + end_of_word); + return; + } + if (!syllable->next_syllable && !syllable->text + && (syllable->elements)[0]->u.misc.unpitched.info.bar + == B_DIVISIO_MAIOR) { + handle_final_bar(f, "DivisioMaior", syllable); + write_this_syllable_text(f, NULL, syllable->text, + end_of_word); + return; + } } + /* the special case of first syllable will be treated as a normal + * bar syllable */ + syllable_type = "\\GreBarSyllable"; } else { syllable_type = "\\GreSyllable"; } @@ -3361,7 +3417,7 @@ static void write_syllable(FILE *f, gregorio_syllable *syllable, } else { fprintf(f, "%%\n\\GreWriteTranslation{"); } - gregoriotex_write_translation(f, syllable->translation); + write_translation(f, syllable->translation); fprintf(f, "}%%\n"); } if (syllable->translation_type) { @@ -3395,9 +3451,6 @@ static void write_syllable(FILE *f, gregorio_syllable *syllable, switch (element->type) { case GRE_SPACE: switch (element->u.misc.unpitched.info.space) { - case SP_ZERO_WIDTH: - fprintf(f, "\\GreEndOfElement{3}{1}%%\n"); - break; case SP_LARGER_SPACE: fprintf(f, "\\GreEndOfElement{1}{0}%%\n"); break; @@ -3425,10 +3478,12 @@ static void write_syllable(FILE *f, gregorio_syllable *syllable, element->u.misc.unpitched.info.ad_hoc_space_factor); break; default: - gregorio_message( - _("encountered an unexpected element-level space"), - "write_syllable", VERBOSITY_ERROR, 0); + /* not reachable unless there's a programming error */ + /* LCOV_EXCL_START */ + gregorio_fail(write_syllable, + "encountered an unexpected element-level space"); break; + /* LCOV_EXCL_STOP */ } break; @@ -3479,7 +3534,7 @@ static void write_syllable(FILE *f, gregorio_syllable *syllable, case GRE_CUSTOS: if (first_of_disc != 1) { /* - * We don't print custos before a bar at the end of a line + * We don't print custos before a bar at the end of a line */ /* we also print an unbreakable larger space before the custo */ fprintf(f, "\\GreEndOfElement{1}{1}%%\n\\GreCustos{%d}" @@ -3617,50 +3672,14 @@ static void initialize_score(gregoriotex_status *const status, status->point_and_click = point_and_click; } -static __inline void write_escapable_header_text(FILE *const f, - const char *text) -{ - /* We escape these characters into \string\ddd (where ddd is the decimal - * ASCII value of the character) for most escapes, and into \string\n for - * newlines. We do it this way to get the "raw" string values through TeX - * and into Lua, where the sequences become \ddd and \n respectively and - * are translated into their byte values. Lua can then decide whether the - * full strings should be evaluated by TeX as TeX or as strings */ - for (; *text; ++text) { - switch (*text) { - case '\\': - case '{': - case '}': - case '~': - case '%': /* currently, we'll never get %, but handle it anyway */ - case '#': - case '"': - /* these characters have special meaning to TeX */ - fprintf(f, "\\string\\%03d", *text); - break; - case '\n': - /* currently, we'll never get \n, but handle it anyway */ - fprintf(f, "\\string\\n"); - break; - case '\r': - /* ignore */ - break; - default: - /* UTF-8 multibyte sequences will fall into here, which is fine */ - fputc(*text, f); - break; - } - } -} - static void write_header(FILE *const f, const char *const name, const char *const value) { if (value) { fprintf(f, "\\GreHeader{"); - write_escapable_header_text(f, name); + tex_escape_text(f, name); fprintf(f, "}{"); - write_escapable_header_text(f, value); + tex_escape_text(f, value); fprintf(f, "}%%\n"); } } @@ -3700,16 +3719,10 @@ void gregoriotex_write_score(FILE *const f, gregorio_score *const score, initialize_score(&status, score, point_and_click_filename != NULL); - if (!f) { - gregorio_message(_("call with NULL file"), "gregoriotex_write_score", - VERBOSITY_ERROR, 0); - return; - } + gregorio_assert(f, gregoriotex_write_score, "call with NULL file", return); - if (score->number_of_voices != 1) { - gregorio_message(_("gregoriotex only works in monophony (for the " - "moment)"), "gregoriotex_write_score", VERBOSITY_ERROR, 0); - } + gregorio_assert_only(score->number_of_voices == 1, gregoriotex_write_score, + "gregoriotex only works in monophony (for the moment)"); fprintf(f, "%% File generated by gregorio %s\n", GREGORIO_VERSION); fprintf(f, "\\GregorioTeXAPIVersion{%s}%%\n", VERSION); @@ -3768,9 +3781,12 @@ void gregoriotex_write_score(FILE *const f, gregorio_score *const score, fprintf(f, "}%%\n"); } + /* DEPRECATED by 4.1 */ + /* LCOV_EXCL_START */ if (score->initial_style != INITIAL_NOT_SPECIFIED) { /* DEPRECATED by 4.1 */ fprintf(f, "\\GreSetInitialStyle{%d}%%\n", score->initial_style); /* DEPRECATED by 4.1 */ } + /* LCOV_EXCL_STOP */ fprintf(f, "\\GreScoreOpening{%%\n"); /* GreScoreOpening#1 */ if (score->first_voice_info) { @@ -3780,7 +3796,7 @@ void gregoriotex_write_score(FILE *const f, gregorio_score *const score, if (score->first_voice_info) { clef = score->first_voice_info->initial_clef; } - fprintf(f, "\\GreSetInitialClef{%c}{%d}{%d}{%c}{%d}{%d}%%\n", + fprintf(f, "\\GreSetInitialClef{%c}{%d}{%d}{%c}{%d}{%d}%%\n", gregorio_clef_to_char(clef.clef), clef.line, clef_flat_height(clef.clef, clef.line, clef.flatted), gregorio_clef_to_char(clef.secondary_clef), clef.secondary_line, @@ -3792,6 +3808,9 @@ void gregoriotex_write_score(FILE *const f, gregorio_score *const score, write_syllable(f, current_syllable, 0, &status, score, write_first_syllable_text); current_syllable = current_syllable->next_syllable; + } else { + /* edge case: a score with no syllables */ + fprintf(f, "}{}{\\GreSetNoFirstSyllableText}%%\n"); } while (current_syllable) { write_syllable(f, current_syllable, 0, &status, score, diff --git a/Build/source/texk/gregorio/gregorio-src/src/gregoriotex/gregoriotex.h b/Build/source/texk/gregorio/gregorio-src/src/gregoriotex/gregoriotex.h index 03907b5f130..129667ed34e 100644 --- a/Build/source/texk/gregorio/gregorio-src/src/gregoriotex/gregoriotex.h +++ b/Build/source/texk/gregorio/gregorio-src/src/gregoriotex/gregoriotex.h @@ -36,17 +36,12 @@ typedef enum gtex_type { /* two note neumes */ T_PES, T_PESQUADRATUM, - T_PESQUADRATUM_LONGQUEUE, T_PESQUILISMA, T_PESQUASSUS, - T_PESQUASSUS_LONGQUEUE, T_PESQUILISMAQUADRATUM, - T_PESQUILISMAQUADRATUM_LONGQUEUE, T_FLEXUS, - T_FLEXUS_LONGQUEUE, T_FLEXUS_ORISCUS, T_FLEXUS_ORISCUS_SCAPUS, - T_FLEXUS_ORISCUS_SCAPUS_LONGQUEUE, T_VIRGA_STRATA, /* three note neumes */ T_PORRECTUS, @@ -54,9 +49,7 @@ typedef enum gtex_type { T_TORCULUS_QUILISMA, T_SCANDICUS, /* only deminutus */ T_ANCUS, /* only deminutus */ - T_ANCUS_LONGQUEUE, /* only deminutus */ T_SALICUS, - T_SALICUS_LONGQUEUE, /* four note neumes */ T_SALICUS_FLEXUS, T_PORRECTUS_FLEXUS, @@ -127,10 +120,7 @@ static __inline bool choral_sign_here_is_low(const gregorio_glyph *const glyph, if (kind_of_pes) { *kind_of_pes = true; } - if (note->u.note.shape != S_QUILISMA) { - return true; - } - break; + return true; default: break; @@ -152,8 +142,7 @@ static __inline bool is_between_lines(const char pitch) bool gtex_is_h_episema_above_shown(const gregorio_note *const note); bool gtex_is_h_episema_below_shown(const gregorio_note *const note); const char *gregoriotex_determine_glyph_name(const gregorio_glyph *const glyph, - const gregorio_element *const element, gtex_alignment *const type, - gtex_type *const gtype); + gtex_alignment *const type, gtex_type *const gtype); void gregoriotex_compute_positioning(const gregorio_element *element, const gregorio_score *score); diff --git a/Build/source/texk/gregorio/gregorio-src/src/messages.c b/Build/source/texk/gregorio/gregorio-src/src/messages.c index b67b5e0578f..0aada3b802f 100644 --- a/Build/source/texk/gregorio/gregorio-src/src/messages.c +++ b/Build/source/texk/gregorio/gregorio-src/src/messages.c @@ -22,13 +22,13 @@ #include "config.h" #include <stdio.h> -#include <stdlib.h> /* for exit() */ -#include <stdarg.h> /* for exit() */ +#include <assert.h> +#include <stdarg.h> #include "bool.h" #include "messages.h" +#include "support.h" static FILE *error_out; -static const char *file_name = NULL; static gregorio_verbosity verbosity_mode = 0; static bool debug_messages = false; static int return_value = 0; @@ -43,22 +43,15 @@ void gregorio_set_error_out(FILE *const f) error_out = f; } -void gregorio_set_file_name(const char *const new_name) -{ - file_name = new_name; -} - void gregorio_set_verbosity_mode(const gregorio_verbosity verbosity) { verbosity_mode = verbosity; } -#if 0 /* unused */ -static void gregorio_set_debug_messages(bool debug) +void gregorio_set_debug_messages(bool debug) { debug_messages = debug; } -#endif static const char *verbosity_to_str(const gregorio_verbosity verbosity) { @@ -73,9 +66,18 @@ static const char *verbosity_to_str(const gregorio_verbosity verbosity) case VERBOSITY_ERROR: str = _("error:"); break; + case VERBOSITY_ASSERTION: + /* not reachable unless there's a programming error */ + /* LCOV_EXCL_START */ + str = _("assertion:"); + break; + /* LCOV_EXCL_STOP */ case VERBOSITY_FATAL: + /* all fatal errors should not be reasonably testable */ + /* LCOV_EXCL_START */ str = _("fatal error:"); break; + /* LCOV_EXCL_STOP */ default: /* INFO, for example */ str = " "; @@ -91,64 +93,37 @@ void gregorio_messagef(const char *function_name, va_list args; const char *verbosity_str; - if (!debug_messages) { + if (!debug_messages && verbosity != VERBOSITY_ASSERTION) { line_number = 0; function_name = NULL; } - if (!error_out) { - fprintf(stderr, _("warning: error_out not set in gregorio_messages, " - "assumed stderr\n")); - error_out = stderr; - } - if (!verbosity_mode) { - fprintf(stderr, _("warning: verbosity mode not set in " - "gregorio_messages, assumed warnings\n")); - verbosity_mode = VERBOSITY_WARNING; - } + /* if these assertions fail, the program is not using this code correctly */ + assert(error_out); + assert(verbosity_mode); + if (verbosity < verbosity_mode) { return; } + if (verbosity == VERBOSITY_ASSERTION && return_value) { + /* if something has already caused the system to fail, demote any + * assertions coming after to warnings */ + verbosity = VERBOSITY_WARNING; + } verbosity_str = verbosity_to_str(verbosity); if (line_number) { + /* if line number is specified, function_name must be specified */ + assert(function_name); if (function_name) { - if (!file_name) { - fprintf(error_out, "line %d: in function `%s': %s", - line_number, function_name, verbosity_str); - } else { - fprintf(error_out, "%d: in function `%s': %s", line_number, - function_name, verbosity_str); - } - } else { - /* no function_name specified */ - if (!file_name) { - fprintf(error_out, "line %d: %s", line_number, verbosity_str); - } else { - fprintf(error_out, "%d: %s", line_number, verbosity_str); - } + fprintf(error_out, "%d: in function `%s': %s", line_number, + function_name, verbosity_str); } } else { if (function_name) { - /* - * if (!file_name) { - * fprintf (error_out, "in function `%s': %s", - * function_name, verbosity_str); - * return; - * } else { - */ fprintf(error_out, "in function `%s': %s", function_name, verbosity_str); - /* } */ } else { - /* no function_name specified */ - /* - * if (!file_name) { - * fprintf (error_out, "%s", verbosity_str); - * return; - * } else { - */ fprintf(error_out, "%s", verbosity_str); - /* } */ } } va_start(args, format); @@ -158,11 +133,15 @@ void gregorio_messagef(const char *function_name, switch (verbosity) { case VERBOSITY_ERROR: + case VERBOSITY_ASSERTION: return_value = 1; break; case VERBOSITY_FATAL: - exit(1); + /* all fatal errors should not be reasonably testable */ + /* LCOV_EXCL_START */ + gregorio_exit(1); break; + /* LCOV_EXCL_STOP */ default: break; } diff --git a/Build/source/texk/gregorio/gregorio-src/src/messages.h b/Build/source/texk/gregorio/gregorio-src/src/messages.h index 19ad015847e..9ebc6e39b80 100644 --- a/Build/source/texk/gregorio/gregorio-src/src/messages.h +++ b/Build/source/texk/gregorio/gregorio-src/src/messages.h @@ -42,6 +42,7 @@ typedef enum gregorio_verbosity { VERBOSITY_WARNING, VERBOSITY_DEPRECATION, VERBOSITY_ERROR, + VERBOSITY_ASSERTION, VERBOSITY_FATAL } gregorio_verbosity; @@ -52,8 +53,37 @@ void gregorio_messagef(const char *function_name, int line_number, const char *format, ...) __attribute__ ((__format__ (__printf__, 4, 5))); void gregorio_set_verbosity_mode(gregorio_verbosity verbosity); -void gregorio_set_file_name(const char *new_name); +void gregorio_set_debug_messages(bool debug); void gregorio_set_error_out(FILE *f); int gregorio_get_return_value(void); +#define gregorio_assert_only(TEST,FUNCTION,MESSAGE) \ + if (!(TEST)) { \ + gregorio_message(_(MESSAGE), #FUNCTION, VERBOSITY_ASSERTION, __LINE__); \ + } + +#define gregorio_assert(TEST,FUNCTION,MESSAGE,ON_FALSE) \ + if (!(TEST)) { \ + gregorio_message(_(MESSAGE), #FUNCTION, VERBOSITY_ASSERTION, __LINE__); \ + ON_FALSE; \ + } + +#define gregorio_assert2(TEST,FUNCTION,FORMAT,ARG,ON_FALSE) \ + if (!(TEST)) { \ + gregorio_messagef(#FUNCTION, VERBOSITY_ASSERTION, __LINE__, FORMAT, ARG); \ + ON_FALSE; \ + } + +#define gregorio_not_null(VARIABLE,FUNCTION,ON_FALSE) \ + gregorio_assert(VARIABLE, FUNCTION, #VARIABLE " may not be null", ON_FALSE) + +#define gregorio_not_null_ptr(VARIABLE,FUNCTION,ON_FALSE) \ + gregorio_assert(VARIABLE && *VARIABLE, FUNCTION, #VARIABLE " may not be null", ON_FALSE) + +#define gregorio_fail(FUNCTION,MESSAGE) \ + gregorio_message(_(MESSAGE), #FUNCTION, VERBOSITY_ASSERTION, __LINE__) + +#define gregorio_fail2(FUNCTION,FORMAT,ARG) \ + gregorio_messagef(#FUNCTION, VERBOSITY_ASSERTION, __LINE__, FORMAT, ARG) + #endif diff --git a/Build/source/texk/gregorio/gregorio-src/src/sha1.c b/Build/source/texk/gregorio/gregorio-src/src/sha1.c index 54800c85b74..15433d9076b 100644 --- a/Build/source/texk/gregorio/gregorio-src/src/sha1.c +++ b/Build/source/texk/gregorio/gregorio-src/src/sha1.c @@ -114,7 +114,7 @@ void *sha1_finish_ctx(struct sha1_ctx *ctx, void *resbuf) */ ctx->total[0] += bytes; if (ctx->total[0] < bytes) - ++ctx->total[1]; + ++ctx->total[1]; /* data-sepcific; LCOV_EXCL_LINE */ /* * Put the 64-bit file length in *bits* at the end of the buffer. @@ -132,30 +132,6 @@ void *sha1_finish_ctx(struct sha1_ctx *ctx, void *resbuf) return sha1_read_ctx(ctx, resbuf); } -/* Compute SHA1 message digest for LEN bytes beginning at BUFFER. The - result is always in little endian byte order, so that a byte-wise - output yields to the wanted ASCII representation of the message - digest. */ -void *sha1_buffer(const char *buffer, size_t len, void *resblock) -{ - struct sha1_ctx ctx; - - /* - * Initialize the computation context. - */ - sha1_init_ctx(&ctx); - - /* - * Process whole buffer but last len % 64 bytes. - */ - sha1_process_bytes(buffer, len, &ctx); - - /* - * Put result in desired memory area. - */ - return sha1_finish_ctx(&ctx, resblock); -} - void sha1_process_bytes(const void *buffer, size_t len, struct sha1_ctx *ctx) { /* @@ -189,6 +165,7 @@ void sha1_process_bytes(const void *buffer, size_t len, struct sha1_ctx *ctx) * Process available complete blocks. */ if (len >= 64) { + /* architecture and data-specific; LCOV_EXCL_START */ #if !_STRING_ARCH_unaligned #define UNALIGNED_P(p) ((uintptr_t) (p) % alignof (uint32_t) != 0) if (UNALIGNED_P(buffer)) { @@ -204,6 +181,7 @@ void sha1_process_bytes(const void *buffer, size_t len, struct sha1_ctx *ctx) buffer = (const char *) buffer + (len & ~63); len &= 63; } + /* LCOV_EXCL_STOP */ } /* @@ -215,10 +193,12 @@ void sha1_process_bytes(const void *buffer, size_t len, struct sha1_ctx *ctx) memcpy(&((char *) ctx->buffer)[left_over], buffer, len); left_over += len; if (left_over >= 64) { + /* data-specific; LCOV_EXCL_START */ sha1_process_block(ctx->buffer, 64, ctx); left_over -= 64; memcpy(ctx->buffer, &ctx->buffer[16], left_over); } + /* LCOV_EXCL_STOP */ ctx->buflen = left_over; } } diff --git a/Build/source/texk/gregorio/gregorio-src/src/struct.c b/Build/source/texk/gregorio/gregorio-src/src/struct.c index d11366949c1..b1826f66df1 100644 --- a/Build/source/texk/gregorio/gregorio-src/src/struct.c +++ b/Build/source/texk/gregorio/gregorio-src/src/struct.c @@ -179,7 +179,9 @@ void gregorio_add_clef_as_note(gregorio_note **current_note, void gregorio_add_secondary_clef_to_note(gregorio_note *current_note, gregorio_clef clef, signed char clef_line, bool flatted) { - if (!current_note || current_note->type != GRE_CLEF) { + gregorio_not_null(current_note, gregorio_add_secondary_clef_to_note, + return); + if (current_note->type != GRE_CLEF) { gregorio_message(_("trying to add a secondary clef to something that " "is not a clef"), "gregorio_add_secondary_clef_to_note", VERBOSITY_ERROR, 0); @@ -219,9 +221,7 @@ void gregorio_add_texverb_as_note(gregorio_note **current_note, char *str, gregorio_type type, const gregorio_scanner_location *const loc) { gregorio_note *element; - if (str == NULL) { - return; - } + gregorio_not_null(str, gregorio_add_texverb_as_note, return); element = create_and_link_note(current_note, loc); assert(type == GRE_TEXVERB_GLYPH || type == GRE_TEXVERB_ELEMENT || type == GRE_ALT); @@ -255,9 +255,7 @@ void gregorio_add_texverb_to_note(gregorio_note *current_note, char *str) { size_t len; char *res; - if (str == NULL) { - return; - } + gregorio_not_null(str, gregorio_add_texverb_as_note, return); if (current_note) { if (current_note->texverb) { len = strlen(current_note->texverb) + strlen(str) + 1; @@ -284,8 +282,10 @@ void gregorio_add_cs_to_note(gregorio_note *const*const current_note, void gregorio_add_special_sign(gregorio_note *note, gregorio_sign sign) { - if (!note) { - /* error */ + if (!note || note->type != GRE_NOTE) { + gregorio_message(_("trying to add a special sign to something that is " + "not a note"), "gregorio_add_special_sign", VERBOSITY_ERROR, + 0); return; } note->special_sign = sign; @@ -381,22 +381,26 @@ static void fix_oriscus_cavum_liquescentia(gregorio_note *const note, } } -void gregorio_change_shape(gregorio_note *note, gregorio_shape shape, - const bool legacy_oriscus_orientation) +void gregorio_change_shape(gregorio_note *const note, + const gregorio_shape shape, const bool legacy_oriscus_orientation) { + gregorio_shape old_shape; if (!note || note->type != GRE_NOTE) { gregorio_message(_("trying to change the shape of something that is " - "not a note"), "change_shape", VERBOSITY_ERROR, 0); + "not a note"), "change_shape", VERBOSITY_ERROR, 0); return; } - if (shape == S_PUNCTUM_CAVUM) { + old_shape = note->u.note.shape; + note->u.note.shape = shape; + switch (shape) { + case S_PUNCTUM_CAVUM: /* S_PUNCTUM_CAVUM morphs other shapes */ - switch (note->u.note.shape) { + switch (old_shape) { case S_PUNCTUM_INCLINATUM: note->u.note.shape = S_PUNCTUM_CAVUM_INCLINATUM; fix_punctum_cavum_inclinatum_liquescentia(note); - return; + break; case S_ORISCUS_UNDETERMINED: case S_ORISCUS_ASCENDENS: @@ -404,15 +408,13 @@ void gregorio_change_shape(gregorio_note *note, gregorio_shape shape, case S_ORISCUS_DEMINUTUS: note->u.note.shape = S_ORISCUS_CAVUM_UNDETERMINED; fix_oriscus_cavum_liquescentia(note, legacy_oriscus_orientation); - return; + break; default: break; } - } + break; - note->u.note.shape = shape; - switch (shape) { case S_STROPHA: case S_DISTROPHA: case S_TRISTROPHA: @@ -420,53 +422,21 @@ void gregorio_change_shape(gregorio_note *note, gregorio_shape shape, break; case S_ORISCUS_UNDETERMINED: - fix_oriscus_liquescentia(note, legacy_oriscus_orientation); - break; - - case S_ORISCUS_ASCENDENS: - note->u.note.liquescentia = - (note->u.note.liquescentia & ~TAIL_LIQUESCENTIA_MASK) - | L_AUCTUS_ASCENDENS; - fix_oriscus_liquescentia(note, legacy_oriscus_orientation); - break; - - case S_ORISCUS_DESCENDENS: - note->u.note.liquescentia = - (note->u.note.liquescentia & ~TAIL_LIQUESCENTIA_MASK) - | L_AUCTUS_DESCENDENS; - fix_oriscus_liquescentia(note, legacy_oriscus_orientation); - break; - - case S_ORISCUS_DEMINUTUS: - note->u.note.liquescentia = - (note->u.note.liquescentia & ~TAIL_LIQUESCENTIA_MASK) - | L_DEMINUTUS; - fix_oriscus_liquescentia(note, legacy_oriscus_orientation); - break; - - case S_ORISCUS_CAVUM_UNDETERMINED: - fix_oriscus_cavum_liquescentia(note, legacy_oriscus_orientation); - break; - - case S_ORISCUS_CAVUM_ASCENDENS: - note->u.note.liquescentia = - (note->u.note.liquescentia & ~TAIL_LIQUESCENTIA_MASK) - | L_AUCTUS_ASCENDENS; - fix_oriscus_cavum_liquescentia(note, legacy_oriscus_orientation); - break; - - case S_ORISCUS_CAVUM_DESCENDENS: - note->u.note.liquescentia = - (note->u.note.liquescentia & ~TAIL_LIQUESCENTIA_MASK) - | L_AUCTUS_DESCENDENS; - fix_oriscus_cavum_liquescentia(note, legacy_oriscus_orientation); - break; + switch (old_shape) { + case S_PUNCTUM_CAVUM: + case S_PUNCTUM_CAVUM_INCLINATUM: + case S_ORISCUS_CAVUM_UNDETERMINED: + case S_ORISCUS_CAVUM_ASCENDENS: + case S_ORISCUS_CAVUM_DESCENDENS: + case S_ORISCUS_CAVUM_DEMINUTUS: + note->u.note.shape = S_ORISCUS_CAVUM_UNDETERMINED; + fix_oriscus_cavum_liquescentia(note, legacy_oriscus_orientation); + break; - case S_ORISCUS_CAVUM_DEMINUTUS: - note->u.note.liquescentia = - (note->u.note.liquescentia & ~TAIL_LIQUESCENTIA_MASK) - | L_DEMINUTUS; - fix_oriscus_cavum_liquescentia(note, legacy_oriscus_orientation); + default: + fix_oriscus_liquescentia(note, legacy_oriscus_orientation); + break; + } break; default: @@ -559,20 +529,13 @@ static void apply_auto_h_episema(gregorio_note *const note, static void gregorio_activate_isolated_h_episema(gregorio_note *note, const grehepisema_size size, const bool disable_bridge, int n) { - if (!note) { - gregorio_message(ngt_("isolated horizontal episema at the beginning " - "of a note sequence, ignored", - "isolated horizontal episema at the beginning of a note " - "sequence, ignored", n), "activate_h_isolated_episema", - VERBOSITY_WARNING, 0); - return; - } + gregorio_not_null(note, gregorio_activate_isolated_h_episema, return); if (note->type != GRE_NOTE) { gregorio_message(ngt_("isolated horizontal episema after something " "that is not a note, ignored", "isolated horizontal episema after something that is not " "a note, ignored", n), "activate_h_isolated_episema", - VERBOSITY_WARNING, 0); + VERBOSITY_ERROR, 0); return; } for (; n > 0; --n) { @@ -580,7 +543,7 @@ static void gregorio_activate_isolated_h_episema(gregorio_note *note, if (!note || note->type != GRE_NOTE) { gregorio_message(_("found more horizontal episema than notes " "able to be under"), "activate_h_isolated_episema", - VERBOSITY_WARNING, 0); + VERBOSITY_ERROR, 0); return; } } @@ -597,11 +560,7 @@ void gregorio_add_h_episema(gregorio_note *note, VERBOSITY_ERROR, 0); return; } - if (!nbof_isolated_episema) { - gregorio_message(_("NULL argument nbof_isolated_episema"), - "add_h_episema", VERBOSITY_FATAL, 0); - return; - } + gregorio_not_null(nbof_isolated_episema, gregorio_add_h_episema, return); if (vposition && *nbof_isolated_episema) { gregorio_message(_("trying to add a forced horizontal episema on a " "note which already has an automatic horizontal " @@ -634,7 +593,8 @@ void gregorio_add_sign(gregorio_note *note, gregorio_sign sign, gregorio_vposition vposition) { if (!note) { - /* error */ + gregorio_message(_("trying to add a sign to something that is " + "not a note"), "gregorio_add_sign", VERBOSITY_ERROR, 0); return; } switch (sign) { @@ -680,16 +640,19 @@ void gregorio_add_sign(gregorio_note *note, gregorio_sign sign, break; default: + /* not reachable unless there's a programming error */ + /* LCOV_EXCL_START */ + gregorio_fail2(gregorio_add_sign, "unexpected sign to add: %s", + gregorio_sign_to_string(sign)); break; + /* LCOV_EXCL_STOP */ } } void gregorio_go_to_first_note(gregorio_note **note) { gregorio_note *tmp; - if (!*note) { - return; - } + gregorio_not_null_ptr(note, gregorio_go_to_first_note, return); tmp = *note; while (tmp->previous) { tmp = tmp->previous; @@ -710,9 +673,7 @@ static __inline void free_one_note(gregorio_note *note) void gregorio_free_one_note(gregorio_note **note) { gregorio_note *next = NULL; - if (!note || !*note) { - return; - } + gregorio_not_null_ptr(note, gregorio_free_one_note, return); if ((*note)->next) { (*note)->next->previous = (*note)->previous; next = (*note)->next; @@ -798,9 +759,7 @@ void gregorio_add_unpitched_element_as_glyph(gregorio_glyph **current_glyph, void gregorio_go_to_first_glyph(gregorio_glyph **glyph) { gregorio_glyph *tmp; - if (!*glyph) { - return; - } + gregorio_not_null_ptr(glyph, gregorio_go_to_first_glyph, return); tmp = *glyph; while (tmp->previous) { tmp = tmp->previous; @@ -828,9 +787,7 @@ static __inline void free_one_glyph(gregorio_glyph *glyph) void gregorio_free_one_glyph(gregorio_glyph **glyph) { gregorio_glyph *next = NULL; - if (!glyph || !*glyph) { - return; - } + gregorio_not_null_ptr(glyph, gregorio_free_one_glyph, return); if ((*glyph)->next) { (*glyph)->next->previous = NULL; next = (*glyph)->next; @@ -845,9 +802,7 @@ void gregorio_free_one_glyph(gregorio_glyph **glyph) static void gregorio_free_glyphs(gregorio_glyph **glyph) { gregorio_glyph *next_glyph; - if (!glyph || !*glyph) { - return; - } + gregorio_not_null(glyph, gregorio_free_glyphs, return); while (*glyph) { next_glyph = (*glyph)->next; free_one_glyph(*glyph); @@ -917,16 +872,18 @@ static __inline void free_one_element(gregorio_element *element) static void gregorio_free_one_element(gregorio_element **element) { gregorio_element *next = NULL; - if (!element || !*element) { - return; - } + gregorio_not_null_ptr(element, gregorio_free_one_element, return); if ((*element)->next) { (*element)->next->previous = NULL; next = (*element)->next; } if ((*element)->previous) { + /* this doesn't currently happen, but it's safer to leave this in */ + /* LCOV_EXCL_START */ (*element)->previous->next = NULL; } + /* The previous line is probably optimized out */ + /* LCOV_EXCL_STOP */ free_one_element(*element); *element = next; } @@ -967,9 +924,7 @@ static void gregorio_free_one_character(gregorio_character *current_character) void gregorio_free_characters(gregorio_character *current_character) { gregorio_character *next_character; - if (!current_character) { - return; - } + gregorio_not_null(current_character, gregorio_free_characters, return); while (current_character) { next_character = current_character->next_character; gregorio_free_one_character(current_character); @@ -980,9 +935,7 @@ void gregorio_free_characters(gregorio_character *current_character) void gregorio_go_to_first_character(const gregorio_character **character) { const gregorio_character *tmp; - if (!character || !*character) { - return; - } + gregorio_not_null_ptr(character, gregorio_free_characters, return); tmp = *character; while (tmp->previous_character) { tmp = tmp->previous_character; @@ -1057,14 +1010,10 @@ void gregorio_add_syllable(gregorio_syllable **current_syllable, gregorio_syllable *next; gregorio_element **tab; int i; - if (number_of_voices > MAX_NUMBER_OF_VOICES) { - gregorio_message(_("too many voices"), "add_syllable", VERBOSITY_FATAL, - 0); - return; - } + gregorio_not_null(elements, gregorio_add_syllable, return); + gregorio_assert(number_of_voices == 1, gregorio_add_syllable, + "gregorio only supports one voice", return); next = gregorio_calloc(1, sizeof(gregorio_syllable)); - next->type = GRE_SYLLABLE; - next->special_sign = _NO_SIGN; next->position = position; next->no_linebreak_area = no_linebreak_area; next->euouae = euouae; @@ -1082,14 +1031,8 @@ void gregorio_add_syllable(gregorio_syllable **current_syllable, next->previous_syllable = *current_syllable; tab = (gregorio_element **) gregorio_malloc(number_of_voices * sizeof(gregorio_element *)); - if (elements) { - for (i = 0; i < number_of_voices; i++) { - tab[i] = elements[i]; - } - } else { - for (i = 0; i < number_of_voices; i++) { - tab[i] = NULL; - } + for (i = 0; i < number_of_voices; i++) { + tab[i] = elements[i]; } next->elements = tab; if (*current_syllable) { @@ -1103,11 +1046,7 @@ static void gregorio_free_one_syllable(gregorio_syllable **syllable, { int i; gregorio_syllable *next; - if (!syllable || !*syllable) { - gregorio_message(_("function called with NULL argument"), - "free_one_syllable", VERBOSITY_WARNING, 0); - return; - } + gregorio_not_null_ptr(syllable, gregorio_free_one_syllable, return); for (i = 0; i < number_of_voices; i++) { gregorio_free_elements((struct gregorio_element **) &((*syllable)->elements[i])); @@ -1128,11 +1067,7 @@ static void gregorio_free_one_syllable(gregorio_syllable **syllable, static void gregorio_free_syllables(gregorio_syllable **syllable, int number_of_voices) { - if (!syllable || !*syllable) { - gregorio_message(_("function called with NULL argument"), - "free_syllables", VERBOSITY_WARNING, 0); - return; - } + gregorio_not_null_ptr(syllable, gregorio_free_one_syllable, return); while (*syllable) { gregorio_free_one_syllable(syllable, number_of_voices); } @@ -1149,11 +1084,7 @@ gregorio_score *gregorio_new_score(void) static void gregorio_free_score_infos(gregorio_score *score) { - if (!score) { - gregorio_message(_("function called with NULL argument"), - "gregorio_free_score_infos", VERBOSITY_WARNING, 0); - return; - } + gregorio_not_null(score, gregorio_free_score_infos, return); /* don't free the strings coming from headers; they will be freed when the * headers themselves are freed */ if (score->first_voice_info) { @@ -1174,12 +1105,11 @@ static void free_headers(gregorio_score *score) { void gregorio_free_score(gregorio_score *score) { - if (!score) { - gregorio_message(_("function called with NULL argument"), - "free_one_syllable", VERBOSITY_WARNING, 0); - return; + gregorio_not_null(score, gregorio_free_score, return); + if (score->first_syllable) { + gregorio_free_syllables(&(score->first_syllable), + score->number_of_voices); } - gregorio_free_syllables(&(score->first_syllable), score->number_of_voices); gregorio_free_score_infos(score); free_headers(score); free(score); @@ -1188,20 +1118,16 @@ void gregorio_free_score(gregorio_score *score) void gregorio_add_voice_info(gregorio_voice_info **current_voice_info) { gregorio_voice_info *next = gregorio_calloc(1, sizeof(gregorio_voice_info)); - if (*current_voice_info) { - (*current_voice_info)->next_voice_info = next; - } + gregorio_assert(!*current_voice_info, gregorio_add_voice_info, + "since gregorio only supports once voice, this should only be " + "called once", (*current_voice_info)->next_voice_info = next); *current_voice_info = next; } void gregorio_free_voice_infos(gregorio_voice_info *voice_info) { gregorio_voice_info *next; - if (!voice_info) { - gregorio_message(_("function called with NULL argument"), - "free_voice_info", VERBOSITY_WARNING, 0); - return; - } + gregorio_not_null(voice_info, gregorio_free_voice_infos, return); while (voice_info) { next = voice_info->next_voice_info; free(voice_info); @@ -1212,11 +1138,7 @@ void gregorio_free_voice_infos(gregorio_voice_info *voice_info) void gregorio_set_score_annotation(gregorio_score *score, char *annotation) { int annotation_num; - if (!score) { - gregorio_message(_("function called with NULL argument"), - "gregorio_set_annotation", VERBOSITY_WARNING, 0); - return; - } + gregorio_not_null(score, gregorio_set_score_annotation, return); /* save the annotation in the first spare place. */ for (annotation_num = 0; annotation_num < MAX_ANNOTATIONS; ++annotation_num) { if (score->annotation[annotation_num] == NULL) { @@ -1233,11 +1155,7 @@ void gregorio_set_score_annotation(gregorio_score *score, char *annotation) void gregorio_set_score_staff_lines(gregorio_score *const score, const char staff_lines) { - if (!score) { - gregorio_message(_("function called with NULL argument"), - "gregorio_set_score_staff_lines", VERBOSITY_WARNING, 0); - return; - } + gregorio_not_null(score, gregorio_set_score_staff_lines, return); if (staff_lines < 2 || staff_lines > 5) { gregorio_message(_("invalid number of staff lines"), "gregorio_set_score_staff_lines", VERBOSITY_ERROR, 0); @@ -1251,11 +1169,7 @@ void gregorio_set_score_staff_lines(gregorio_score *const score, void gregorio_add_score_header(gregorio_score *score, char *name, char *value) { gregorio_header *header; - if (!score) { - gregorio_message(_("function called with NULL argument"), - "gregorio_add_score_header", VERBOSITY_WARNING, 0); - return; - } + gregorio_not_null(score, gregorio_add_score_header, return); header = (gregorio_header *)gregorio_malloc(sizeof(gregorio_header)); header->name = name; header->value = value; @@ -1299,9 +1213,11 @@ int gregorio_calculate_new_key(gregorio_clef_info clef) return (2 * clef.line) - 4; break; default: - gregorio_message(_("can't calculate key"), - "gregorio_calculate_new_key", VERBOSITY_ERROR, 0); + /* not reachable unless there's a programming error */ + /* LCOV_EXCL_START */ + gregorio_fail(gregorio_calculate_new_key, "can't calculate key"); return NO_KEY; + /* LCOV_EXCL_STOP */ } } @@ -1309,10 +1225,7 @@ static signed char gregorio_syllable_first_note(gregorio_syllable *syllable) { gregorio_element *element; gregorio_glyph *glyph; - if (!syllable) { - gregorio_message(_("called with a NULL argument"), - "gregorio_syllable_first_note", VERBOSITY_ERROR, 0); - } + gregorio_not_null(syllable, gregorio_syllable_first_note, return 0); element = syllable->elements[0]; while (element) { if (element->type == GRE_CUSTOS) { @@ -1339,11 +1252,10 @@ signed char gregorio_determine_next_pitch(gregorio_syllable *syllable, gregorio_element *element, gregorio_glyph *glyph) { signed char temp; - if (!element || !syllable) { - gregorio_message(_("called with a NULL argument"), - "gregorio_determine_next_pitch", VERBOSITY_ERROR, 0); - return DUMMY_PITCH; - } + gregorio_not_null(element, gregorio_determine_next_pitch, + return DUMMY_PITCH); + gregorio_not_null(syllable, gregorio_determine_next_pitch, + return DUMMY_PITCH); /* we first explore the next glyphs to find a note, if there is one */ if (glyph) { glyph = glyph->next; @@ -1374,7 +1286,7 @@ signed char gregorio_determine_next_pitch(gregorio_syllable *syllable, } glyph = glyph->next; } - } + } /* I think this is optimized out; LCOV_EXCL_LINE */ element = element->next; } @@ -1401,7 +1313,7 @@ signed char gregorio_determine_next_pitch(gregorio_syllable *syllable, * it and we update the score->voice-info->initial_key. Works in * polyphony. * - *********************************/ + ******************************/ void gregorio_fix_initial_keys(gregorio_score *score, gregorio_clef_info default_clef) @@ -1411,18 +1323,17 @@ void gregorio_fix_initial_keys(gregorio_score *score, int i; char to_delete = 1; - if (!score || !score->first_syllable || !score->first_voice_info) { - gregorio_message(_("score is not available"), - "gregorio_fix_initial_keys", VERBOSITY_WARNING, 0); + gregorio_not_null(score, gregorio_fix_initial_keys, return); + gregorio_not_null(score->first_voice_info, gregorio_fix_initial_keys, + return); + if (!score->first_syllable) { + /* valid but almost nonsense: a score with no syllables */ return; } voice_info = score->first_voice_info; for (i = 0; i < score->number_of_voices; i++) { element = score->first_syllable->elements[i]; - if (!element) { - continue; - } - if (element->type == GRE_CLEF) { + if (element && element->type == GRE_CLEF) { voice_info->initial_clef = element->u.misc.clef; gregorio_free_one_element(&(score->first_syllable->elements[i])); gregorio_messagef("gregorio_fix_initial_keys", VERBOSITY_INFO, 0, @@ -1472,9 +1383,7 @@ void gregorio_fix_initial_keys(gregorio_score *score, bool gregorio_is_only_special(gregorio_element *element) { - if (!element) { - return 0; - } + gregorio_not_null(element, gregorio_is_only_special, return 0); while (element) { if (element->type == GRE_ELEMENT) { return 0; @@ -1490,6 +1399,48 @@ const char *gregorio_unknown(int value) { return buf; } +/* + * A small helper for the following function + */ + +static __inline bool is_clef(gregorio_type x) +{ + return x == GRE_CLEF; +} + +/* + * This function is used in write_syllable, it detects if the syllable is like + * (c4), (::c4), (z0c4) or (z0::c4). It returns the gregorio_element of the + * clef change. + */ +gregorio_element *gregorio_get_clef_change(gregorio_syllable *syllable) +{ + gregorio_element *element; + gregorio_assert(syllable && syllable->elements && syllable->elements[0], + gregoriotex_syllable_is_clef_change, "invalid syllable", + return NULL); + element = syllable->elements[0]; + /* we just detect the foud cases */ + if (element->type == GRE_CUSTOS && element->next + && (is_clef(element->next->type)) && !element->next->next) { + return element->next; + } + if (element->type == GRE_BAR && element->next + && (is_clef(element->next->type)) && !element->next->next) { + return element->next; + } + if ((is_clef(element->type)) && !element->next) { + return element; + } + if (element->type == GRE_CUSTOS && element->next + && element->next->type == GRE_BAR && element->next->next + && (is_clef(element->next->next->type)) + && !element->next->next->next) { + return element->next->next; + } + return NULL; +} + ENUM_TO_STRING(gregorio_type, GREGORIO_TYPE) ENUM_TO_STRING(gregorio_shape, GREGORIO_SHAPE) ENUM_TO_STRING(gregorio_bar, GREGORIO_BAR) @@ -1500,7 +1451,7 @@ ENUM_TO_STRING(grehepisema_size, GREHEPISEMA_SIZE) ENUM_TO_STRING(gregorio_vposition, GREGORIO_VPOSITION) ENUM_TO_STRING(gregorio_glyph_type, GREGORIO_GLYPH_TYPE) ENUM_TO_STRING(grestyle_style, GRESTYLE_STYLE) -ENUM_TO_STRING(grestyle_type, GRESTYLE_TYPE) +/* ENUM_TO_STRING(grestyle_type, GRESTYLE_TYPE) */ ENUM_TO_STRING(gregorio_tr_centering, GREGORIO_TR_CENTERING) ENUM_TO_STRING(gregorio_nlba, GREGORIO_NLBA) ENUM_TO_STRING(gregorio_euouae, GREGORIO_EUOUAE) diff --git a/Build/source/texk/gregorio/gregorio-src/src/struct.h b/Build/source/texk/gregorio/gregorio-src/src/struct.h index 0f588cafd5f..108ecefc243 100644 --- a/Build/source/texk/gregorio/gregorio-src/src/struct.h +++ b/Build/source/texk/gregorio/gregorio-src/src/struct.h @@ -35,6 +35,7 @@ #include "enum_generator.h" #include "bool.h" #include "sha1.h" +#include "messages.h" #ifdef __cplusplus #define ENUM_BITFIELD(TYPE) enum TYPE @@ -68,7 +69,6 @@ typedef struct gregorio_scanner_location { E(GRE_GLYPH) \ E(GRE_ELEMENT) \ E(GRE_CLEF) \ - E(GRE_SYLLABLE) \ E(GRE_END_OF_LINE) \ E(GRE_SPACE) \ E(GRE_BAR) \ @@ -113,9 +113,7 @@ ENUM(gregorio_clef, GREGORIO_CLEF); E(S_STROPHA) \ E(S_STROPHA_AUCTA) \ E(S_DISTROPHA) \ - E(S_DISTROPHA_AUCTA) \ E(S_TRISTROPHA) \ - E(S_TRISTROPHA_AUCTA) \ E(S_PUNCTUM_CAVUM) \ E(S_LINEA_PUNCTUM) \ E(S_LINEA_PUNCTUM_CAVUM) \ @@ -191,6 +189,7 @@ ENUM(gregorio_sign, GREGORIO_SIGN); E(SP_NO_SPACE) \ E(SP_ZERO_WIDTH) \ E(SP_HALF_SPACE) \ + E(SP_INTERGLYPH_SPACE) \ E(SP_NEUMATIC_CUT) \ E(SP_LARGER_SPACE) \ E(SP_GLYPH_SPACE) \ @@ -249,7 +248,6 @@ ENUM(gregorio_vposition, GREGORIO_VPOSITION); E(G_3_PUNCTA_INCLINATA_ASCENDENS) \ E(G_4_PUNCTA_INCLINATA_ASCENDENS) \ E(G_5_PUNCTA_INCLINATA_ASCENDENS) \ - E(G_TRIGONUS) \ E(G_PUNCTA_INCLINATA) \ /* !!! DO NOT CHANGE THE ENUM ORDERING BEFORE THIS LINE !!! */ \ E(G_UNDETERMINED) \ @@ -276,7 +274,6 @@ ENUM(gregorio_vposition, GREGORIO_VPOSITION); E(G_SCANDICUS) \ E(G_PES_QUILISMA_QUADRATUM_FIRST_PART) \ E(G_ANCUS) \ - E(G_ONE_NOTE) \ E(G_PUNCTA_ASCENDENS) \ E(G_PUNCTA_DESCENDENS) \ E(G_VIRGA_REVERSA) \ @@ -313,10 +310,12 @@ ENUM(gregorio_glyph_type, GREGORIO_GLYPH_TYPE); E(ST_INITIAL) /* a style used to determine the initial */ \ E(ST_UNDERLINED) \ E(ST_COLORED) \ + E(ST_ELISION) \ E(ST_FIRST_WORD) \ E(ST_FIRST_SYLLABLE) \ E(ST_FIRST_SYLLABLE_INITIAL) \ - L(ST_SYLLABLE_INITIAL) + E(ST_SYLLABLE_INITIAL) \ + L(ST_SENTINEL) /* a temporary style to signify the end of a syllable */ ENUM(grestyle_style, GRESTYLE_STYLE); /* @@ -570,8 +569,8 @@ typedef struct gregorio_element { */ typedef struct gregorio_style { - ENUM_BITFIELD(grestyle_style) style:8; - ENUM_BITFIELD(grestyle_type) type:8; + ENUM_BITFIELD(grestyle_style) style:6; + ENUM_BITFIELD(grestyle_type) type:2; } gregorio_style; /* @@ -624,11 +623,6 @@ typedef struct gregorio_syllable { struct gregorio_element **elements; unsigned short euouae_id; unsigned short src_line, src_column, src_offset; - /* a syllable can be a GRE_SYLLABLE, a GRE_*_KEY_CHANGE or a - * GRE_BAR. It is useful when there is only that in a syllable. */ - ENUM_BITFIELD(gregorio_type) type:8; - /* again, an additional field to put some signs or other things... */ - ENUM_BITFIELD(gregorio_sign) special_sign:8; /* type of translation (with center beginning or only center end) */ ENUM_BITFIELD(gregorio_tr_centering) translation_type:2; /* beginning or end of area without linebreak? */ @@ -761,6 +755,9 @@ static __inline bool is_fused(char liquescentia) #define DUMMY_PITCH (LOWEST_PITCH + 6) #define LOW_LEDGER_LINE_PITCH (LOWEST_PITCH + 1) +/* defines the maximal interval between two notes of the same glyph */ +#define MAX_AMBITUS 5 + gregorio_score *gregorio_new_score(void); void gregorio_add_note(gregorio_note **current_note, signed char pitch, gregorio_shape shape, gregorio_sign signs, @@ -857,6 +854,7 @@ gregorio_character *gregorio_clone_characters(const gregorio_character *source); signed char gregorio_determine_next_pitch(gregorio_syllable *syllable, gregorio_element *element, gregorio_glyph *glyph); const char *gregorio_unknown(int value); +gregorio_element *gregorio_get_clef_change(gregorio_syllable *syllable); static __inline void gregorio_go_to_first_character_c(gregorio_character **character) { @@ -867,9 +865,9 @@ static __inline gregorio_note *gregorio_glyph_last_note( const gregorio_glyph *const glyph) { gregorio_note *note; - if (!glyph || glyph->type != GRE_GLYPH) { - return NULL; - } + gregorio_assert(glyph && glyph->type == GRE_GLYPH, gregorio_glyph_last_note, + "trying to find the last note of something that is not a glyph", + return NULL); for (note = glyph->u.notes.first_note; note->next; note = note->next) { /* iterate to find the last note */ } diff --git a/Build/source/texk/gregorio/gregorio-src/src/support.c b/Build/source/texk/gregorio/gregorio-src/src/support.c index ed49f866041..e533d0ac310 100644 --- a/Build/source/texk/gregorio/gregorio-src/src/support.c +++ b/Build/source/texk/gregorio/gregorio-src/src/support.c @@ -3,7 +3,7 @@ * This file contains miscellaneous support functions. * * Copyright (C) 2015 The Gregorio Project (see CONTRIBUTORS.md) - * + * * This file is part of Gregorio. * * Gregorio is free software: you can redistribute it and/or modify @@ -25,6 +25,8 @@ #include <stdarg.h> #include <stdlib.h> #include <string.h> +#include <ctype.h> +#include <errno.h> #include "support.h" #include "messages.h" @@ -48,51 +50,101 @@ void gregorio_snprintf(char *s, size_t size, const char *format, ...) va_end(args); } -void *gregorio_malloc(size_t size) -{ - void *result = malloc(size); - if (!result) { +static __inline void *assert_successful_allocation(void *ptr, char *funcname) { + if (!ptr) { + /* it's not realistic to test this for coverage */ + /* LCOV_EXCL_START */ gregorio_message(_("error in memory allocation"), - "gregorio_malloc", VERBOSITY_FATAL, 0); - exit(1); + funcname, VERBOSITY_FATAL, 0); + gregorio_exit(1); } - return result; + /* LCOV_EXCL_STOP */ + return ptr; +} + +void *gregorio_malloc(size_t size) +{ + return assert_successful_allocation(malloc(size), "gregorio_malloc"); } void *gregorio_calloc(size_t nmemb, size_t size) { - void *result = calloc(nmemb, size); - if (!result) { - gregorio_message(_("error in memory allocation"), - "gregorio_calloc", VERBOSITY_FATAL, 0); - exit(1); - } - return result; + return assert_successful_allocation(calloc(nmemb, size), "gregorio_calloc"); } void *gregorio_realloc(void *ptr, size_t size) { - void *result = realloc(ptr, size); - if (!result) { - gregorio_message(_("error in memory allocation"), - "gregorio_realloc", VERBOSITY_FATAL, 0); - exit(1); - } - return result; + return assert_successful_allocation(realloc(ptr, size), "gregorio_realloc"); } char *gregorio_strdup(const char *s) { - char *result = strdup(s); - if (!result) { - gregorio_message(_("error in memory allocation"), - "gregorio_strdup", VERBOSITY_FATAL, 0); - exit(1); + return (char *)assert_successful_allocation(strdup(s), "gregorio_strdup"); +} + +#ifdef USE_KPSE +static kpathsea kpse = NULL; +#define USED_FOR_KPSE +#else +#define USED_FOR_KPSE __attribute__((unused)) +#endif + +void gregorio_support_init(const char *const program USED_FOR_KPSE, + const char *const argv0 USED_FOR_KPSE) +{ + gregorio_set_error_out(stderr); + gregorio_set_verbosity_mode(VERBOSITY_ERROR); +#ifdef USE_KPSE + kpse = kpathsea_new(); + kpathsea_set_program_name(kpse, argv0, program); +#endif +} + +void gregorio_print_version(const char *copyright) +{ +#ifdef USE_KPSE + printf("Gregorio version %s (%s).\n%s\n", GREGORIO_VERSION, + kpathsea_version_string, copyright); +#else + printf("Gregorio version %s.\n%s\n", GREGORIO_VERSION, + copyright); +#endif +} + +#ifdef USE_KPSE +bool gregorio_read_ok(const char *const filename, + const gregorio_verbosity verbosity) +{ + if (kpathsea_in_name_ok_silent(kpse, filename)) { + return true; } - return result; + gregorio_messagef("gregorio_in_name_ok", verbosity, __LINE__, + _("kpse prohibits read from file %s"), filename); + return false; } -bool gregorio_readline(char **buf, size_t *bufsize, FILE *file) +bool gregorio_write_ok(const char *const filename, + const gregorio_verbosity verbosity) +{ + if (kpathsea_out_name_ok_silent(kpse, filename)) { + return true; + } + gregorio_messagef("gregorio_out_name_ok", verbosity, __LINE__, + _("kpse prohibits write to file %s"), filename); + return false; +} +#endif + +#ifndef USE_KPSE +static __inline void rtrim(char *buf) +{ + char *p; + for (p = buf + strlen(buf) - 1; p >= buf && isspace(*p); --p) { + *p = '\0'; + } +} + +static bool gregorio_readline(char **buf, size_t *bufsize, FILE *file) { size_t oldsize; if (*buf == NULL) { @@ -100,9 +152,12 @@ bool gregorio_readline(char **buf, size_t *bufsize, FILE *file) *buf = (char *)gregorio_malloc(*bufsize); } else { if (*bufsize < 128) { + /* not reachable unless there's a programming error */ + /* LCOV_EXCL_START */ gregorio_message(_("invalid buffer size"), "gregorio_getline", VERBOSITY_FATAL, 0); - exit(1); + gregorio_exit(1); + /* LCOV_EXCL_STOP */ } } (*buf)[0] = '\0'; @@ -115,17 +170,24 @@ bool gregorio_readline(char **buf, size_t *bufsize, FILE *file) file) || (*buf)[*bufsize - 2] == '\0') { if (ferror(file)) { + /* it's not realistic to simulate the system error required to + * cover this case */ + /* LCOV_EXCL_START */ gregorio_message(_("Error reading from the file"), "gregorio_getline", VERBOSITY_FATAL, 0); - exit(1); + gregorio_exit(1); + /* LCOV_EXCL_STOP */ } return (*buf)[0] != '\0'; } if (*bufsize >= MAX_BUF_GROWTH) { + /* it's not realistic to test this case */ + /* LCOV_EXCL_START */ gregorio_message(_("Line too long"), "gregorio_getline", VERBOSITY_FATAL, 0); - exit(1); + gregorio_exit(1); + /* LCOV_EXCL_STOP */ } oldsize = *bufsize; @@ -133,3 +195,75 @@ bool gregorio_readline(char **buf, size_t *bufsize, FILE *file) *buf = gregorio_realloc(*buf, *bufsize); } } +#endif + + +char **gregorio_kpse_find(const char *filename) +{ + char **filenames; +#ifdef USE_KPSE + filenames = kpathsea_find_file_generic(kpse, filename, kpse_tex_format, + true, true); + if (!filenames) { + /* It's not reasonable to break kpse in such a way that this would + * fail. */ + /* LCOV_EXCL_START */ + gregorio_messagef("gregorio_kpse_find", VERBOSITY_WARNING, 0, + _("kpathsea_find_file_generic returned NULL: %s"), filename); + return NULL; + /* LCOV_EXCL_STOP */ + } +#else + FILE *file; + size_t bufsize = 0; + char *buf = NULL; + size_t capacity = 16, size = 0; +#define KPSE_COMMAND "kpsewhich -must-exist -all " + size_t command_size = sizeof(KPSE_COMMAND) + strlen(filename); + char *command = gregorio_malloc(command_size); + + strcpy(command, KPSE_COMMAND); + strcpy(command + sizeof(KPSE_COMMAND) - 1, filename); + file = popen(command, "r"); + free(command); + command = NULL; /* just to be sure */ + if (!file) { + /* it's not reasonable to cause popen to fail */ + /* LCOV_EXCL_START */ + gregorio_messagef("gregorio_kpse_find", VERBOSITY_WARNING, 0, + _("unable to run kpsewhich %s: %s"), filename, + strerror(errno)); + return NULL; + /* LCOV_EXCL_STOP */ + } + filenames = gregorio_malloc(capacity * sizeof(char *)); + while (gregorio_readline(&buf, &bufsize, file)) { + rtrim(buf); + if (strlen(buf) > 0) { + filenames[size++] = gregorio_strdup(buf); + if (size >= capacity) { + capacity <<= 1; + filenames = gregorio_realloc(filenames, + capacity * sizeof(char *)); + } + } else { + gregorio_messagef("read_patterns", VERBOSITY_WARNING, 0, + _("kpsewhich returned bad value for %s"), filename); + } + } + free(buf); + filenames[size] = NULL; + pclose(file); +#endif + return filenames; +} + +void gregorio_exit(int status) +{ +#ifdef USE_KPSE + if (kpse) { + kpathsea_finish(kpse); + } +#endif + exit(status); +} /* the prior line exits; LCOV_EXCL_LINE */ diff --git a/Build/source/texk/gregorio/gregorio-src/src/support.h b/Build/source/texk/gregorio/gregorio-src/src/support.h index 7e7425d57a9..9b355504076 100644 --- a/Build/source/texk/gregorio/gregorio-src/src/support.h +++ b/Build/source/texk/gregorio/gregorio-src/src/support.h @@ -25,18 +25,46 @@ #include <stdlib.h> #include <limits.h> +#ifdef USE_KPSE +#include <kpathsea/kpathsea.h> +#endif #include "bool.h" +#include "config.h" +#include "messages.h" #define GREGORIO_SZ_MAX (~((size_t)0)) #define MAX_BUF_GROWTH \ ((size_t)((((INT_MAX < GREGORIO_SZ_MAX)? INT_MAX : GREGORIO_SZ_MAX) >> 1) + 1)) void gregorio_snprintf(char *s, size_t size, const char *format, ...) - __attribute__ ((__format__ (__printf__, 3, 4))); -void *gregorio_malloc(size_t size); -void *gregorio_calloc(size_t nmemb, size_t size); -void *gregorio_realloc(void *ptr, size_t size); -char *gregorio_strdup(const char *s); -bool gregorio_readline(char **bufptr, size_t *bufsize, FILE *file); + __attribute__((__format__ (__printf__, 3, 4))); +void *gregorio_malloc(size_t size) __attribute__((malloc)); +void *gregorio_calloc(size_t nmemb, size_t size) __attribute__((malloc)); +void *gregorio_realloc(void *ptr, size_t size) __attribute__((warn_unused_result)); +char *gregorio_strdup(const char *s) __attribute__((malloc)); +void gregorio_support_init(const char *program, const char *argv0); +void gregorio_print_version(const char *copyright); +char **gregorio_kpse_find(const char *filename); +void gregorio_exit(int status) __attribute__((noreturn)); + +#ifdef USE_KPSE +bool gregorio_read_ok(const char *filename, gregorio_verbosity verbosity); +bool gregorio_write_ok(const char *filename, gregorio_verbosity verbosity); + +#define gregorio_check_file_access(DIR, FILENAME, LEVEL, ON_NOT_ALLOWED) \ + if (!gregorio_ ## DIR ## _ok(FILENAME, VERBOSITY_ ## LEVEL)) { \ + ON_NOT_ALLOWED; \ + } +#define gregorio_kpse_find_or_else(VAR, FILENAME, ON_FAIL) \ + VAR = gregorio_kpse_find(FILENAME); \ + if (!VAR) { \ + ON_FAIL; \ + } +#else +#define gregorio_check_file_access(DIRECTION, FILENAME, LEVEL, ON_NOT_ALLOWED) +#define gregorio_kpse_find_or_else(VAR, FILENAME, ON_FAIL) \ + VAR = gregorio_kpse_find(FILENAME); \ + gregorio_not_null(VAR, gregorio_kpse_find, ON_FAIL) +#endif #endif diff --git a/Build/source/texk/gregorio/gregorio-src/src/unicode.c b/Build/source/texk/gregorio/gregorio-src/src/unicode.c index afb7ab71a63..82b581eea0e 100644 --- a/Build/source/texk/gregorio/gregorio-src/src/unicode.c +++ b/Build/source/texk/gregorio/gregorio-src/src/unicode.c @@ -41,17 +41,17 @@ /* an utf8 version of mbstowcs */ -static size_t gregorio_mbstowcs(grewchar *dest, const char *src, int n) +/* expects a buffer of size n + 1 */ +static bool gregorio_mbstowcs(grewchar *dest, const char *src, size_t n) { + bool success = true; unsigned char bytes_to_come; grewchar result = 0; unsigned char c; size_t res = 0; /* number of bytes we've done so far */ - if (!src) { - gregorio_message(_("call with a NULL argument"), "gregorio_mbstowcs", - VERBOSITY_ERROR, 0); - } - while (*src && ((int) res <= n || !dest)) { + gregorio_not_null(src, gregorio_mbstowcs, return false); + gregorio_not_null(dest, gregorio_mbstowcs, return false); + while (success && *src && res < n) { c = (unsigned char) (*src); if (c < 128) { /* 0100xxxx */ /* one-byte symbol */ @@ -76,7 +76,8 @@ static size_t gregorio_mbstowcs(grewchar *dest, const char *src, int n) /* printf("%s %d %d\n", src, res, c); */ gregorio_message(_("malformed UTF-8 sequence1"), "gregorio_mbstowcs", VERBOSITY_ERROR, 0); - return -1; + success = false; + break; } while (bytes_to_come > 0) { bytes_to_come--; @@ -88,20 +89,18 @@ static size_t gregorio_mbstowcs(grewchar *dest, const char *src, int n) } else { gregorio_message(_("malformed UTF-8 sequence2"), "gregorio_mbstowcs", VERBOSITY_ERROR, 0); - return -1; + success = false; + break; } } - if (dest) { - dest[res] = result; - } + dest[res] = result; + res++; result = 0; src++; } - if (!(*src) && (int) res <= n && dest) { - dest[res] = 0; - } - return res; + dest[res] = 0; + return success; } /* the value returned by this function must be freed! */ @@ -109,12 +108,15 @@ grewchar *gregorio_build_grewchar_string_from_buf(const char *const buf) { size_t len; grewchar *gwstring; + /* this doesn't currently happen, but it's safer to keep this check */ if (buf == NULL) { - return NULL; + return NULL; /* LCOV_EXCL_LINE */ } len = strlen(buf); /* to get the length of the syllable in ASCII */ gwstring = (grewchar *) gregorio_malloc((len + 1) * sizeof(grewchar)); - gregorio_mbstowcs(gwstring, buf, len); /* converting into wchar_t */ + gregorio_mbstowcs(gwstring, buf, len); /* converting into grewchar */ + /* no need to check the return code; if it failed, the error state would + * already be in place */ return gwstring; } @@ -125,8 +127,9 @@ gregorio_character *gregorio_build_char_list_from_buf(const char *const buf) int i = 0; grewchar *gwstring; gregorio_character *current_character = NULL; + /* this doesn't currently happen, but it's safer to keep this check */ if (buf == NULL) { - return NULL; + return NULL; /* LCOV_EXCL_LINE */ } gwstring = gregorio_build_grewchar_string_from_buf(buf); /* we add the corresponding characters in the list of gregorio_characters */ @@ -139,38 +142,7 @@ gregorio_character *gregorio_build_char_list_from_buf(const char *const buf) return current_character; } -/* the function to compare a grewchar * and a buf. Returns 1 if different, 0 - * if not. */ - -unsigned char gregorio_wcsbufcmp(grewchar *wstr, const char *buf) -{ - int i = 0; - size_t len; - grewchar *gwbuf; - if (!buf || !wstr) { - return 1; - } - len = strlen(buf); /* to get the length of the syllable in ASCII */ - gwbuf = (grewchar *) gregorio_malloc((len + 1) * sizeof(grewchar)); - gregorio_mbstowcs(gwbuf, buf, len); /* converting into wchar_t */ - /* we add the corresponding characters in the list of gregorio_characters */ - while (gwbuf[i] && wstr[i]) { - if (gwbuf[i] != wstr[i]) { - free(gwbuf); - return 1; - } - i = i + 1; - } - /* we finished the two strings */ - if (gwbuf[i] == 0 && wstr[i] == 0) { - free(gwbuf); - return 0; - } - free(gwbuf); - return 1; -} - -void gregorio_print_unichar(FILE *f, grewchar to_print) +void gregorio_print_unichar(FILE *f, const grewchar to_print) { if (to_print <= 0x7F) { fprintf(f, "%c", (unsigned char) to_print); @@ -193,7 +165,7 @@ void gregorio_print_unichar(FILE *f, grewchar to_print) } } -void gregorio_print_unistring(FILE *f, grewchar *first_char) +void gregorio_print_unistring(FILE *f, const grewchar *first_char) { while (*first_char != 0) { gregorio_print_unichar(f, *first_char); diff --git a/Build/source/texk/gregorio/gregorio-src/src/unicode.h b/Build/source/texk/gregorio/gregorio-src/src/unicode.h index 62942edcb1e..7af434a28fb 100644 --- a/Build/source/texk/gregorio/gregorio-src/src/unicode.h +++ b/Build/source/texk/gregorio/gregorio-src/src/unicode.h @@ -34,8 +34,7 @@ typedef uint32_t grewchar; void gregorio_print_unichar(FILE *f, grewchar to_print); -void gregorio_print_unistring(FILE *f, grewchar *first_char); -unsigned char gregorio_wcsbufcmp(grewchar *wstr, const char *buf); +void gregorio_print_unistring(FILE *f, const grewchar *first_char); grewchar *gregorio_build_grewchar_string_from_buf(const char *buf); static __inline size_t gregorio_wcstrlen(const grewchar *wstr) diff --git a/Build/source/texk/gregorio/gregorio-src/src/vowel/vowel-rules-y.c b/Build/source/texk/gregorio/gregorio-src/src/vowel/vowel-rules-y.c index 3675fadf4c0..11051101cc7 100644 --- a/Build/source/texk/gregorio/gregorio-src/src/vowel/vowel-rules-y.c +++ b/Build/source/texk/gregorio/gregorio-src/src/vowel/vowel-rules-y.c @@ -106,12 +106,6 @@ #include "vowel-rules.h" #include "vowel-rules-l.h" -#if ! defined lint || defined __GNUC__ -# define IGNORE(e) ((void) (e)) -#else -# define IGNORE(e) /* empty */ -#endif - /* NOTE: This parser might allocate a new value for language; this value MUST * BE FREED after the parser returns (if the value of the language pointer * changes, then free the pointer). This parser DOES free the language @@ -122,11 +116,10 @@ /*int gregorio_vowel_rulefile_debug=1;*/ static void gregorio_vowel_rulefile_error(const char *const filename, - char **const language, rulefile_parse_status *const status, + char **const language __attribute__((__unused__)), + rulefile_parse_status *const status __attribute__((__unused__)), const char *const error_str) { - IGNORE(language); - IGNORE(status); gregorio_messagef("gregorio_vowel_rulefile_parse", VERBOSITY_ERROR, 0, _("%s: %s"), filename, error_str); } @@ -180,7 +173,7 @@ static __inline void add(const rulefile_parse_status *const status, #define _ADD(TABLE, CHARS) add(status, gregorio_##TABLE##_table_add, CHARS) -#line 184 "vowel/vowel-rules-y.c" /* yacc.c:339 */ +#line 177 "vowel/vowel-rules-y.c" /* yacc.c:339 */ # ifndef YY_NULLPTR # if defined __cplusplus && 201103L <= __cplusplus @@ -257,7 +250,7 @@ int gregorio_vowel_rulefile_parse (const char *const filename, char **language, /* Copy the second part of user declarations. */ -#line 261 "vowel/vowel-rules-y.c" /* yacc.c:358 */ +#line 254 "vowel/vowel-rules-y.c" /* yacc.c:358 */ #ifdef short # undef short @@ -555,8 +548,8 @@ static const yytype_uint8 yytranslate[] = /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ static const yytype_uint8 yyrline[] = { - 0, 121, 121, 123, 127, 128, 129, 130, 131, 132, - 135, 137, 140, 142, 145, 147, 150, 152 + 0, 114, 114, 116, 120, 121, 122, 123, 124, 125, + 128, 130, 133, 135, 138, 140, 143, 145 }; #endif @@ -1343,43 +1336,43 @@ yyreduce: switch (yyn) { case 4: -#line 127 "vowel/vowel-rules.y" /* yacc.c:1646 */ +#line 120 "vowel/vowel-rules.y" /* yacc.c:1646 */ { _MATCH((yyvsp[-1])); } -#line 1349 "vowel/vowel-rules-y.c" /* yacc.c:1646 */ +#line 1342 "vowel/vowel-rules-y.c" /* yacc.c:1646 */ break; case 5: -#line 128 "vowel/vowel-rules.y" /* yacc.c:1646 */ +#line 121 "vowel/vowel-rules.y" /* yacc.c:1646 */ { _ALIAS((yyvsp[-3]), (yyvsp[-1])); } -#line 1355 "vowel/vowel-rules-y.c" /* yacc.c:1646 */ +#line 1348 "vowel/vowel-rules-y.c" /* yacc.c:1646 */ break; case 11: -#line 137 "vowel/vowel-rules.y" /* yacc.c:1646 */ +#line 130 "vowel/vowel-rules.y" /* yacc.c:1646 */ { _ADD(vowel, (yyvsp[0])); } -#line 1361 "vowel/vowel-rules-y.c" /* yacc.c:1646 */ +#line 1354 "vowel/vowel-rules-y.c" /* yacc.c:1646 */ break; case 13: -#line 142 "vowel/vowel-rules.y" /* yacc.c:1646 */ +#line 135 "vowel/vowel-rules.y" /* yacc.c:1646 */ { _ADD(prefix, (yyvsp[0])); } -#line 1367 "vowel/vowel-rules-y.c" /* yacc.c:1646 */ +#line 1360 "vowel/vowel-rules-y.c" /* yacc.c:1646 */ break; case 15: -#line 147 "vowel/vowel-rules.y" /* yacc.c:1646 */ +#line 140 "vowel/vowel-rules.y" /* yacc.c:1646 */ { _ADD(suffix, (yyvsp[0])); } -#line 1373 "vowel/vowel-rules-y.c" /* yacc.c:1646 */ +#line 1366 "vowel/vowel-rules-y.c" /* yacc.c:1646 */ break; case 17: -#line 152 "vowel/vowel-rules.y" /* yacc.c:1646 */ +#line 145 "vowel/vowel-rules.y" /* yacc.c:1646 */ { _ADD(secondary, (yyvsp[0])); } -#line 1379 "vowel/vowel-rules-y.c" /* yacc.c:1646 */ +#line 1372 "vowel/vowel-rules-y.c" /* yacc.c:1646 */ break; -#line 1383 "vowel/vowel-rules-y.c" /* yacc.c:1646 */ +#line 1376 "vowel/vowel-rules-y.c" /* yacc.c:1646 */ default: break; } /* User semantic actions sometimes alter yychar, and that requires diff --git a/Build/source/texk/gregorio/gregorio-src/src/vowel/vowel-rules.y b/Build/source/texk/gregorio/gregorio-src/src/vowel/vowel-rules.y index 236fa2293c7..72d807720ca 100644 --- a/Build/source/texk/gregorio/gregorio-src/src/vowel/vowel-rules.y +++ b/Build/source/texk/gregorio/gregorio-src/src/vowel/vowel-rules.y @@ -33,12 +33,6 @@ #include "vowel-rules.h" #include "vowel-rules-l.h" -#if ! defined lint || defined __GNUC__ -# define IGNORE(e) ((void) (e)) -#else -# define IGNORE(e) /* empty */ -#endif - /* NOTE: This parser might allocate a new value for language; this value MUST * BE FREED after the parser returns (if the value of the language pointer * changes, then free the pointer). This parser DOES free the language @@ -49,11 +43,10 @@ /*int gregorio_vowel_rulefile_debug=1;*/ static void gregorio_vowel_rulefile_error(const char *const filename, - char **const language, rulefile_parse_status *const status, + char **const language __attribute__((__unused__)), + rulefile_parse_status *const status __attribute__((__unused__)), const char *const error_str) { - IGNORE(language); - IGNORE(status); gregorio_messagef("gregorio_vowel_rulefile_parse", VERBOSITY_ERROR, 0, _("%s: %s"), filename, error_str); } diff --git a/Build/source/texk/gregorio/gregorio-src/src/vowel/vowel.c b/Build/source/texk/gregorio/gregorio-src/src/vowel/vowel.c index b4843cf2a3c..8b108726610 100644 --- a/Build/source/texk/gregorio/gregorio-src/src/vowel/vowel.c +++ b/Build/source/texk/gregorio/gregorio-src/src/vowel/vowel.c @@ -26,9 +26,6 @@ #include <string.h> #include <assert.h> #include <errno.h> -#ifdef USE_KPSE - #include <kpathsea/kpathsea.h> -#endif #include "bool.h" #include "vowel.h" #include "unicode.h" @@ -131,9 +128,12 @@ static __inline void character_set_grow(character_set *const set) { assert(set); if (set->bins >= 0x4000L) { + /* this should not realistically be reached */ + /* LCOV_EXCL_START */ gregorio_message(_("character set too large"), "character_set_grow", VERBOSITY_FATAL, 0); return; + /* LCOV_EXCL_STOP */ } old_table = set->table; @@ -144,7 +144,7 @@ static __inline void character_set_grow(character_set *const set) { set->mask = (set->mask << 1) | 0x01; set->table = gregorio_calloc(set->bins, sizeof(grewchar)); if (old_next) { - set->table = gregorio_calloc(set->bins, sizeof(character_set *)); + set->next = gregorio_calloc(set->bins, sizeof(character_set *)); } for (i = 0; i < old_bins; ++i) { if (old_table[i]) { @@ -237,21 +237,19 @@ void gregorio_vowel_tables_init(void) void gregorio_vowel_tables_load(const char *const filename, char **const language, rulefile_parse_status *status) { -#ifdef USE_KPSE - if (!kpse_in_name_ok(filename)) { - gregorio_messagef("gregorio_vowel_tables_load", VERBOSITY_WARNING, 0, - _("kpse disallows read from %s"), filename); - return; - } -#endif + gregorio_check_file_access(read, filename, WARNING, return); gregorio_vowel_rulefile_in = fopen(filename, "r"); if (gregorio_vowel_rulefile_in) { gregorio_vowel_rulefile_parse(filename, language, status); fclose(gregorio_vowel_rulefile_in); gregorio_vowel_rulefile_in = NULL; } else { + /* tests cannot be expected to simulate the system error that would + * cause gregorio_vowel_rulefile_in to be NULL */ + /* LCOV_EXCL_START */ gregorio_messagef("gregorio_vowel_tables_load", VERBOSITY_WARNING, 0, _("unable to open %s: %s"), filename, strerror(errno)); + /* LCOV_EXCL_STOP */ } } @@ -414,7 +412,11 @@ bool gregorio_find_vowel_group(const grewchar *const string, int *const start, break; default: + /* not reachable unless there's a programming error */ + /* LCOV_EXCL_START */ assert(false); + break; + /* LCOV_EXCL_STOP */ } if (!*subject) { diff --git a/Build/source/texk/gregorio/gregorio-src/windows/gregorio-resources.rc b/Build/source/texk/gregorio/gregorio-src/windows/gregorio-resources.rc index da25bf98c50..bcdd703c213 100644 --- a/Build/source/texk/gregorio/gregorio-src/windows/gregorio-resources.rc +++ b/Build/source/texk/gregorio/gregorio-src/windows/gregorio-resources.rc @@ -1,7 +1,7 @@ IDI_ICON1 ICON DISCARDABLE "gregorio.ico" 1 VERSIONINFO -FILEVERSION 4,1,0,11 -PRODUCTVERSION 4,1,0,11 +FILEVERSION 4,1,0,12 +PRODUCTVERSION 4,1,0,12 BEGIN BLOCK "StringFileInfo" BEGIN @@ -9,12 +9,12 @@ BEGIN BEGIN VALUE "CompanyName", "Gregorio project" VALUE "FileDescription", "Gregorio" - VALUE "FileVersion", "4.1.0-beta1" + VALUE "FileVersion", "4.1.0-beta2" VALUE "InternalName", "gregorio" VALUE "LegalCopyright", "See COPYING in the installation directory." VALUE "OriginalFilename", "gregorio.exe" VALUE "ProductName", "Gregorio" - VALUE "ProductVersion", "4.1.0-beta1" + VALUE "ProductVersion", "4.1.0-beta2" END END diff --git a/Build/source/texk/gregorio/version.ac b/Build/source/texk/gregorio/version.ac index 87e7ba44039..57a426832d7 100644 --- a/Build/source/texk/gregorio/version.ac +++ b/Build/source/texk/gregorio/version.ac @@ -8,4 +8,4 @@ dnl dnl -------------------------------------------------------- dnl dnl m4-include this file to define the current gregorio version -m4_define([gregorio_version], [4.1.0-beta1]) +m4_define([gregorio_version], [4.1.0-beta2]) |