diff options
Diffstat (limited to 'Master/texmf-dist/tex/luatex/gregoriotex/gregoriotex-signs.lua')
-rw-r--r-- | Master/texmf-dist/tex/luatex/gregoriotex/gregoriotex-signs.lua | 485 |
1 files changed, 485 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/luatex/gregoriotex/gregoriotex-signs.lua b/Master/texmf-dist/tex/luatex/gregoriotex/gregoriotex-signs.lua new file mode 100644 index 00000000000..0acb9789e75 --- /dev/null +++ b/Master/texmf-dist/tex/luatex/gregoriotex/gregoriotex-signs.lua @@ -0,0 +1,485 @@ +--GregorioTeX Signs Lua support file. +-- +--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 +--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. +-- +--Gregorio 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 Gregorio. If not, see <http://www.gnu.org/licenses/>. + +-- this file contains lua functions to support signs used by GregorioTeX. + +-- GREGORIO_VERSION 4.1.1 + +local err = gregoriotex.module.err +local warn = gregoriotex.module.warn +local info = gregoriotex.module.info +local log = gregoriotex.module.log + +-- Note offset cases: +-- here are the common values for both hepisema (and consequently also for +-- additional lines) and vepisema +-- this indicates the note +local offset_cases = { + -- punctum as last note (works with pes) + { + case = 'FinalPunctum', + v = [[\gre@vepisemaorrareaux{0}{\GreCPPunctum}{1}{0}{#2}{#3}{#4}]], + h = [[\gre@hepisorlineaux{\GreCPPunctum}{\gre@char@he@punctum{#4}}{2}{#3}]], + }, + -- deminutus as last note + { + case = 'FinalDeminutus', + v = [[\gre@vepisemaorrareaux{0}{\GreCPPunctumDeminutus}{1}{0}{#2}{#3}{#4}]], + h = [[\gre@hepisorlineaux{\GreCPPunctumDeminutus}{\gre@char@he@initio{#4}}{2}{#3}]], + }, + -- second-to-last note, disconnected from prior note, with a second ambitus + -- of at least two, when last note is a standard punctum (like the second + -- note of hig) + { + case = 'PenultBeforePunctumWide', + v = [[\gre@vepisemaorrareaux{\GreCPFlexusNobarTwoNothing}{\GreCPPunctum}{2}{0}{#2}{#3}{#4}]], + -- a kind of flexus, it has the good width + h = [[\gre@hepisorlineaux{\GreCPFlexusNobarTwoNothing}{\gre@char@he@punctum{#4}}{2}{#3}]], + }, + -- second-to-last note, when last note is a deminutus + { + case = 'PenultBeforeDeminutus', + v = [[\gre@vepisemaorrareaux{0}{\GreCPFlexusTwoDeminutus}{1}{0}{#2}{#3}{#4}]], + -- in order to go to the good place, we first make a kern of - the glyph + -- before deminutus, which has the same width as a standard flexus deminutus + h = [[\gre@hepisorlineaux{\GreCPFlexusTwoDeminutus}{\gre@char@he@punctum{#4}}{2}{#3}]], + }, + -- third-to-last note, when the last note is a punctum (for porrectus flexus) + { + case = 'AntepenultBeforePunctum', + v = [[\gre@vepisemaorrareaux{\GreCPTorculusOneTwoNothing}{\GreCPPunctum}{2}{0}{#2}{#3}{#4}]], + -- is a torculus, it has the good width + h = [[\gre@hepisorlineaux{\GreCPTorculusOneTwoNothing}{\gre@char@he@punctum{#4}}{2}{#3}]], + }, + -- third-to-last note, when the last notes is a deminutus (for porrectus + -- flexus) + { + case = 'AntepenultBeforeDeminutus', + v = [[\gre@vepisemaorrareaux{\GreCPTorculusTwoTwoDeminutus}{\GreCPPunctum}{2}{0}{#2}{#3}{#4}]], + -- torculus deminutus has the good width + h = [[\gre@hepisorlineaux{\GreCPTorculusTwoTwoDeminutus}{\gre@char@he@punctum{#4}}{2}{#3}]], + }, + -- standard punctum as first note, disconnected from next note + { + case = 'InitialPunctum', + v = [[\gre@vepisemaorrareaux{0}{\GreCPPunctum}{0}{0}{#2}{#3}{#4}]], + h = [[\gre@hepisorlineaux{0}{\gre@char@he@punctum{#4}}{0}{#3}]], + }, + -- initio debilis (always the first note) + { + case = 'InitioDebilis', + v = [[\gre@vepisemaorrareaux{0}{\GreCPPunctumDeminutus}{0}{0}{#2}{#3}{#4}]], + -- we assume that the initio-debilis has the same width as a punctum + -- deminutus + h = [[\gre@hepisorlineaux{0}{\gre@char@he@initio{#4}}{0}{#3}]], + }, + -- first note of a non-auctus porrectus with a second ambitus of at least two + { + case = 'PorrNonAuctusInitialWide', + v = [[\gre@vepisemaorrareaux{0}{\GreCPPunctum}{0}{0}{#2}{#3}{#4}]], + -- we do (for now) the same as case 6 + h = [[\gre@hepisorlineaux{0}{\gre@char@he@porrectus{#2}{#4}}{0}{#3}]], + }, + -- first note of a non-auctus porrectus with a second ambitus of one + { + case = 'PorrNonAuctusInitialOne', + v = [[\gre@vepisemaorrareaux{0}{\GreCPPunctum}{0}{0}{#2}{#3}{#4}]], + h = [[\gre@hepisorlineaux{0}{\gre@char@he@porrectus@amone{#2}{#4}}{0}{#3}]], + }, + -- first note of an auctus porrectus, regardless of second ambitus + { + case = 'PorrAuctusInitialAny', + v = [[\gre@vepisemaorrareaux{0}{\GreCPPunctum}{0}{0}{#2}{#3}{#4}]], + h = [[\gre@hepisorlineaux{0}{\gre@char@he@porrectusfl{#2}{#4}}{0}{#3}]], + }, + -- punctum inclinatum as last note + { + case = 'FinalInclinatum', + v = [[\gre@vepisemaorrareaux{0}{\GreCPPunctumInclinatum}{0}{30\the\gre@factor }{#2}{#3}{#4}]], + h = [[\gre@hepisorlineaux{\GreCPPunctumInclinatum}{\gre@char@he@inclinatum{#4}}{2}{#3}]], + }, + -- punctum inclinatum deminutus as last note + { + case = 'FinalInclinatumDeminutus', + v = [[\gre@vepisemaorrareaux{0}{\GreCPPunctumInclinatumDeminutus}{0}{0}{#2}{#3}{#4}]], + h = [[\gre@hepisorlineaux{\GreCPPunctumInclinatumDeminutus}{\gre@char@he@inclinatumdem{#4}}{2}{#3}]], + }, + -- stropha as last note + { + case = 'FinalStropha', + v = [[\gre@vepisemaorrareaux{0}{\GreCPStropha}{0}{0}{#2}{#3}{#4}]], + h = [[\gre@hepisorlineaux{\GreCPStropha}{\gre@char@he@stropha{#4}}{2}{#3}]], + }, + -- quilisma as last note + { + case = 'FinalQuilisma', + v = [[\gre@vepisemaorrareaux{0}{\GreCPQuilisma}{0}{0}{#2}{#3}{#4}]], + h = [[\gre@hepisorlineaux{\GreCPQuilisma}{\gre@char@he@quilisma{#4}}{2}{#3}]], + }, + -- oriscus as last note + { + case = 'FinalOriscus', + v = [[\gre@vepisemaorrareaux{0}{\GreCPOriscus}{0}{0}{#2}{#3}{#4}]], + h = [[\gre@hepisorlineaux{\GreCPOriscus}{\gre@char@he@oriscus{#4}}{2}{#3}]], + }, + -- second-to-last note, with a second ambitus of one, when last note is a + -- standard punctum (like the second note of ghg) + { + case = 'PenultBeforePunctumOne', + v = [[\gre@vepisemaorrareaux{\GreCPFlexusNobarOneNothing}{\GreCPPunctum}{2}{0}{#2}{#3}{#4}]], + h = [[\gre@hepisorlineaux{\GreCPFlexusNobarOneNothing}{\gre@char@he@punctum{#4}}{2}{#3}]], + }, + -- "upper smaller punctum" as last note (concerning simple podatus, podatus, + -- and torculus resupinus) + { + case = 'FinalUpperPunctum', + v = [[\gre@vepisemaorrareaux{0}{\GreCPPunctumSmall}{1}{-30\the\gre@factor}{#2}{#3}{#4}]], + h = [[\gre@hepisorlineaux{\GreCPPunctumSmall}{\gre@char@he@smallpunctum{#4}}{2}{#3}]], + }, + -- oriscus as first note, disconnected from next note + { + case = 'InitialOriscus', + v = [[\gre@vepisemaorrareaux{0}{\GreCPOriscusReversus}{0}{0}{#2}{#3}{#4}]], + h = [[\gre@hepisorlineaux{0}{\gre@char@he@oriscus{#4}}{0}{#3}]], + }, + -- quilisma as first note, disconnected from next note + { + case = 'InitialQuilisma', + v = [[\gre@vepisemaorrareaux{0}{\GreCPQuilisma}{0}{0}{#2}{#3}{#4}]], + h = [[\gre@hepisorlineaux{0}{\gre@char@he@quilisma{#4}}{0}{#3}]], + }, + -- second note of a non-auctus torculus resupinus starting with a punctum, + -- with a first and second ambitus of at least two + { + case = 'TorcResNonAuctusSecondWideWide', + v = [[\gre@vepisemaorrareaux{\gre@char@fuse@punctum@two}{\GreCPPunctum}{3}{0}{#2}{#3}{#4}]], + h = [[\gre@hepisorlineaux{\GreCPLeadingPunctumTwo}{\gre@char@he@porrectus{#2}{#4}}{3}{#3}]], + }, + -- second note of a non-auctus torculus resupinus starting with a punctum, + -- with a first ambitus of one and a second ambitus of at least two + { + case = 'TorcResNonAuctusSecondOneWide', + v = [[\gre@vepisemaorrareaux{\gre@char@fuse@punctum@one}{\GreCPPunctum}{3}{0}{#2}{#3}{#4}]], + h = [[\gre@hepisorlineaux{\GreCPLeadingPunctumOne}{\gre@char@he@porrectus{#2}{#4}}{3}{#3}]], + }, + -- second note of a non-auctus torculus resupinus initio debilis with any + -- first ambitus and a second ambitus of at least two + { + case = 'TorcResDebilisNonAuctusSecondAnyWide', + v = [[\gre@vepisemaorrareaux{\gre@char@fuse@debilis}{\GreCPPunctum}{3}{0}{#2}{#3}{#4}]], + h = [[\gre@hepisorlineaux{\GreCPLeadingPunctumOneInitioDebilis}{\gre@char@he@porrectus{#2}{#4}}{3}{#3}]], + }, + -- linea punctum (cavum) as last note + { + case = 'FinalLineaPunctum', + v = [[\gre@vepisemaorrareaux{0}{\GreCPLineaPunctum}{1}{0}{#2}{#3}{#4}]], + -- the episema is not quite long enough so I assumed a different width + -- for now... + h = [[\gre@hepisorlineaux{\GreCPPesQuadratumOneInitioDefilisDescendens}{\gre@char@he@punctum{#4}}{2}{#3}]], + }, + -- standard bar + { + case = 'BarStandard', + v = [[\gre@vepisemaorrareaux{0}{\GreCPDivisioMinima}{1}{0}{#2}{#3}{#4}]], + }, + -- virgula + { + case = 'BarVirgula', + v = [[\gre@vepisemaorrareaux{0}{\GreCPVirgula}{1}{0}{#2}{#3}{#4}]], + }, + -- divisio finalis + { + case = 'BarDivisioFinalis', + v = [[\gre@vepisemaorrareaux{0}{\gre@fontchar@divisiofinalis}{1}{0}{#2}{#3}{#4}]], + }, + -- second note of a non-auctus torculus resupinus starting with a quilisma, + -- with a first and second ambitus of at least two + { + case = 'TorcResQuilismaNonAuctusSecondWideWide', + v = [[\gre@vepisemaorrareaux{\gre@char@fuse@quilisma@two}{\GreCPPunctum}{3}{0}{#2}{#3}{#4}]], + h = [[\gre@hepisorlineaux{\GreCPLeadingQuilismaTwo}{\gre@char@he@porrectus{#2}{#4}}{3}{#3}]], + }, + -- second note of a non-auctus torculus resupinus starting with an oriscus, + -- with a first and second ambitus of at least two + { + case = 'TorcResOriscusNonAuctusSecondWideWide', + v = [[\gre@vepisemaorrareaux{\gre@char@fuse@oriscus@two}{\GreCPPunctum}{3}{0}{#2}{#3}{#4}]], + h = [[\gre@hepisorlineaux{\GreCPLeadingOriscusTwo}{\gre@char@he@porrectus{#2}{#4}}{3}{#3}]], + }, + -- second note of a non-auctus torculus resupinus starting with a quilisma, + -- with a first ambitus of one and and second ambitus of at least two + { + case = 'TorcResQuilismaNonAuctusSecondOneWide', + v = [[\gre@vepisemaorrareaux{\gre@char@fuse@quilisma@one}{\GreCPPunctum}{3}{0}{#2}{#3}{#4}]], + h = [[\gre@hepisorlineaux{\GreCPLeadingQuilismaOne}{\gre@char@he@porrectus{#2}{#4}}{3}{#3}]], + }, + -- second note of a non-auctus torculus resupinus starting with an oriscus, + -- with a first ambitus of one and and second ambitus of at least two + { + case = 'TorcResOriscusNonAuctusSecondOneWide', + v = [[\gre@vepisemaorrareaux{\gre@char@fuse@oriscus@one}{\GreCPPunctum}{3}{0}{#2}{#3}{#4}]], + h = [[\gre@hepisorlineaux{\GreCPLeadingOriscusOne}{\gre@char@he@porrectus{#2}{#4}}{3}{#3}]], + }, + -- second note of a non-auctus torculus resupinus starting with a punctum, + -- with a first ambitus of at least two and a second ambitus of one + { + case = 'TorcResNonAuctusSecondWideOne', + v = [[\gre@vepisemaorrareaux{\gre@char@fuse@punctum@two}{\GreCPPunctum}{3}{0}{#2}{#3}{#4}]], + h = [[\gre@hepisorlineaux{\GreCPLeadingPunctumTwo}{\gre@char@he@porrectus@amone{#2}{#4}}{3}{#3}]], + }, + -- second note of a non-auctus torculus resupinus initio debilis with any + -- first ambitus and a second ambitus of one + { + case = 'TorcResDebilisNonAuctusSecondAnyOne', + v = [[\gre@vepisemaorrareaux{\gre@char@fuse@debilis}{\GreCPPunctum}{3}{0}{#2}{#3}{#4}]], + h = [[\gre@hepisorlineaux{\GreCPLeadingPunctumOneInitioDebilis}{\gre@char@he@porrectus@amone{#2}{#4}}{3}{#3}]], + }, + -- second note of a non-auctus torculus resupinus starting with a quilisma, + -- with a first ambitus of at least two and a second ambitus of one + { + case = 'TorcResQuilismaNonAuctusSecondWideOne', + v = [[\gre@vepisemaorrareaux{\gre@char@fuse@quilisma@two}{\GreCPPunctum}{3}{0}{#2}{#3}{#4}]], + h = [[\gre@hepisorlineaux{\GreCPLeadingQuilismaTwo}{\gre@char@he@porrectus@amone{#2}{#4}}{3}{#3}]], + }, + -- second note of a non-auctus torculus resupinus starting with an oriscus, + -- with a first ambitus of at least two and a second ambitus of one + { + case = 'TorcResOriscusNonAuctusSecondWideOne', + v = [[\gre@vepisemaorrareaux{\gre@char@fuse@oriscus@two}{\GreCPPunctum}{3}{0}{#2}{#3}{#4}]], + h = [[\gre@hepisorlineaux{\GreCPLeadingOriscusTwo}{\gre@char@he@porrectus@amone{#2}{#4}}{3}{#3}]], + }, + -- second note of a non-auctus torculus resupinus starting with a punctum, + -- with a first and second ambitus of one + { + case = 'TorcResNonAuctusSecondOneOne', + v = [[\gre@vepisemaorrareaux{\gre@char@fuse@punctum@one}{\GreCPPunctum}{3}{0}{#2}{#3}{#4}]], + h = [[\gre@hepisorlineaux{\GreCPLeadingPunctumOne}{\gre@char@he@porrectus@amone{#2}{#4}}{3}{#3}]], + }, + -- second note of a non-auctus torculus resupinus starting with a quilisma, + -- with a first and second ambitus of one + { + case = 'TorcResQuilismaNonAuctusSecondOneOne', + v = [[\gre@vepisemaorrareaux{\gre@char@fuse@quilisma@one}{\GreCPPunctum}{3}{0}{#2}{#3}{#4}]], + h = [[\gre@hepisorlineaux{\GreCPLeadingQuilismaOne}{\gre@char@he@porrectus@amone{#2}{#4}}{3}{#3}]], + }, + -- second note of a non-auctus torculus resupinus starting with an oriscus, + -- with a first and second ambitus of one + { + case = 'TorcResOriscusNonAuctusSecondOneOne', + v = [[\gre@vepisemaorrareaux{\gre@char@fuse@oriscus@one}{\GreCPPunctum}{3}{0}{#2}{#3}{#4}]], + h = [[\gre@hepisorlineaux{\GreCPLeadingOriscusOne}{\gre@char@he@porrectus@amone{#2}{#4}}{3}{#3}]], + }, + -- second note of an auctus torculus resupinus starting with a punctum, with + -- a first ambitus of at least two and any second ambitus + { + case = 'TorcResAuctusSecondWideAny', + v = [[\gre@vepisemaorrareaux{\gre@char@fuse@punctum@two}{\GreCPPunctum}{3}{0}{#2}{#3}{#4}]], + h = [[\gre@hepisorlineaux{\GreCPLeadingPunctumTwo}{\gre@char@he@porrectusfl{#2}{#4}}{3}{#3}]], + }, + -- second note of an auctus torculus resupinus initio debilis with any first + -- and second ambitus + { + case = 'TorcResDebilisAuctusSecondAnyAny', + v = [[\gre@vepisemaorrareaux{\gre@char@fuse@debilis}{\GreCPPunctum}{3}{0}{#2}{#3}{#4}]], + h = [[\gre@hepisorlineaux{\GreCPLeadingPunctumOneInitioDebilis}{\gre@char@he@porrectusfl{#2}{#4}}{3}{#3}]], + }, + -- second note of an auctus torculus resupinus starting with a quilisma, with + -- a first ambitus of at least two and any second ambitus + { + case = 'TorcResQuilismaAuctusSecondWideAny', + v = [[\gre@vepisemaorrareaux{\gre@char@fuse@quilisma@two}{\GreCPPunctum}{3}{0}{#2}{#3}{#4}]], + h = [[\gre@hepisorlineaux{\GreCPLeadingQuilismaTwo}{\gre@char@he@porrectusfl{#2}{#4}}{3}{#3}]], + }, + -- second note of an auctus torculus resupinus starting with an oriscus, with + -- a first ambitus of at least two and any second ambitus + { + case = 'TorcResOriscusAuctusSecondWideAny', + v = [[\gre@vepisemaorrareaux{\gre@char@fuse@oriscus@two}{\GreCPPunctum}{3}{0}{#2}{#3}{#4}]], + h = [[\gre@hepisorlineaux{\GreCPLeadingOriscusTwo}{\gre@char@he@porrectusfl{#2}{#4}}{3}{#3}]], + }, + -- second note of an auctus torculus resupinus starting with a punctum, with + -- a first ambitus of one and any second ambitus + { + case = 'TorcResAuctusSecondOneAny', + v = [[\gre@vepisemaorrareaux{\gre@char@fuse@punctum@one}{\GreCPPunctum}{3}{0}{#2}{#3}{#4}]], + h = [[\gre@hepisorlineaux{\GreCPLeadingPunctumOne}{\gre@char@he@porrectusfl{#2}{#4}}{3}{#3}]], + }, + -- second note of an auctus torculus resupinus starting with a quilisma, with + -- a first ambitus of one and any second ambitus + { + case = 'TorcResQuilismaAuctusSecondOneAny', + v = [[\gre@vepisemaorrareaux{\gre@char@fuse@quilisma@one}{\GreCPPunctum}{3}{0}{#2}{#3}{#4}]], + h = [[\gre@hepisorlineaux{\GreCPLeadingQuilismaOne}{\gre@char@he@porrectusfl{#2}{#4}}{3}{#3}]], + }, + -- second note of an auctus torculus resupinus starting with an oriscus, with + -- a first ambitus of one and any second ambitus + { + case = 'TorcResOriscusAuctusSecondOneAny', + v = [[\gre@vepisemaorrareaux{\gre@char@fuse@oriscus@one}{\GreCPPunctum}{3}{0}{#2}{#3}{#4}]], + h = [[\gre@hepisorlineaux{\GreCPLeadingOriscusOne}{\gre@char@he@porrectusfl{#2}{#4}}{3}{#3}]], + }, + -- second-to-last note connected to prior note, with a second ambitus of at + -- least two, when last note is a standard punctum (like the second note of + -- gig) + { + case = 'ConnectedPenultBeforePunctumWide', + v = [[\gre@vepisemaorrareaux{\GreCPFlexusLineBL}{\GreCPPunctumLineBLBR}{2}{0}{#2}{#3}{#4}]], + h = [[\gre@hepisorlineaux{\GreCPFlexusLineBL}{\gre@char@he@punctum@line@blbr{#4}}{2}{#3}]], + }, + -- second-to-last note connected to prior note, with a second ambitus of one, + -- when last note is a standard punctum (like the second note of gih) + { + case = 'ConnectedPenultBeforePunctumOne', + v = [[\gre@vepisemaorrareaux{\GreCPFlexusAmOneLineBL}{\GreCPPunctumLineBL}{2}{0}{#2}{#3}{#4}]], + h = [[\gre@hepisorlineaux{\GreCPFlexusAmOneLineBL}{\gre@char@he@punctum@line@bl{#4}}{2}{#3}]], + }, + -- standard punctum as first note, connected to next higher note + { + case = 'InitialConnectedPunctum', + v = [[\gre@vepisemaorrareaux{0}{\GreCPPunctumLineTR}{0}{0}{#2}{#3}{#4}]], + h = [[\gre@hepisorlineaux{0}{\gre@char@he@punctum@line@tr{#4}}{0}{#3}]], + }, + -- "virga" as first note, connected to next lower note + { + case = 'InitialConnectedVirga', + v = [[\gre@vepisemaorrareaux{0}{\GreCPVirgaBaseLineBL}{0}{0}{#2}{#3}{#4}]], + h = [[\gre@hepisorlineaux{0}{\gre@char@he@virgabase@line@bl{#4}}{0}{#3}]], + }, + -- quilisma as first note, connected to next higher note + { + case = 'InitialConnectedQuilisma', + v = [[\gre@vepisemaorrareaux{0}{\GreCPQuilismaLineTR}{0}{0}{#2}{#3}{#4}]], + h = [[\gre@hepisorlineaux{0}{\gre@char@he@quilisma@line@tr{#4}}{0}{#3}]], + }, + -- oriscus as first note, connected to next higher note + { + case = 'InitialConnectedOriscus', + v = [[\gre@vepisemaorrareaux{0}{\GreCPOriscusLineTR}{0}{0}{#2}{#3}{#4}]], + h = [[\gre@hepisorlineaux{0}{\gre@char@he@oriscus@line@tr{#4}}{0}{#3}]], + }, + -- punctum as last note, connected to prior higher note + { + case = 'FinalConnectedPunctum', + v = [[\gre@vepisemaorrareaux{0}{\GreCPPunctum}{1}{0}{#2}{#3}{#4}]], + h = [[\gre@hepisorlineaux{\GreCPPunctumLineTL}{\gre@char@he@punctum@line@tl{#4}}{2}{#3}]], + }, + -- auctus as last note, connected to prior lower note + { + case = 'FinalConnectedAuctus', + v = [[\gre@vepisemaorrareaux{0}{\GreCPPunctumAuctusLineBL}{1}{0}{#2}{#3}{#4}]], + h = [[\gre@hepisorlineaux{\GreCPPunctumAuctusLineBL}{\gre@char@he@punctumauctus@line@bl{#4}}{2}{#3}]], + }, + -- virga aucta as last note + { + case = 'FinalVirgaAuctus', + v = [[\gre@vepisemaorrareaux{0}{\GreCPVirgaReversaDescendens}{1}{0}{#2}{#3}{#4}]], + h = [[\gre@hepisorlineaux{\GreCPVirgaReversaDescendens}{\gre@char@he@punctumauctus@line@bl{#4}}{2}{#3}]], + }, + -- "virga" as last note, connected to prior lower note + { + case = 'FinalConnectedVirga', + v = [[\gre@vepisemaorrareaux{0}{\GreCPVirga}{1}{0}{#2}{#3}{#4}]], + h = [[\gre@hepisorlineaux{\GreCPVirga}{\gre@char@he@virga{#4}}{2}{#3}]], + }, + -- "virga" as first note, disconnected from next note + { + case = 'InitialVirga', + v = [[\gre@vepisemaorrareaux{0}{\GreCPVirga}{0}{0}{#2}{#3}{#4}]], + h = [[\gre@hepisorlineaux{0}{\gre@char@he@virga{#4}}{0}{#3}]], + }, + -- "oriscus" as the middle note of a salicus with a second ambitus of at + -- least two + { + case = 'SalicusOriscusWide', + v = [[\gre@vepisemaorrareaux{\GreCPVirgaStrataThreeNothing}{\GreCPSalicusOriscus}{3}{0}{#2}{#3}{#4}]], + h = [[\gre@hepisorlineaux{\GreCPVirgaStrataThreeNothing}{\gre@char@he@salicus@oriscus{#4}}{4}{#3}]], + }, + -- "oriscus" as the middle note of a salicus with a second ambitus of one + { + case = 'SalicusOriscusOne', + v = [[\gre@vepisemaorrareaux{\GreCPVirgaStrataOneNothing}{\GreCPOriscus}{3}{0}{#2}{#3}{#4}]], + h = [[\gre@hepisorlineaux{\GreCPVirgaStrataOneNothing}{\gre@char@he@salicus@oriscus{#4}}{4}{#3}]], + }, + -- punctum fused to the next note + { + case = 'LeadingPunctum', + v = [[\gre@vepisemaorrareaux{0}{\GreCPPunctum}{0}{0}{#2}{#3}{#4}]], + h = [[\gre@hepisorlineaux{\GreCPPunctumTwoUp}{\gre@char@he@punctum{#4}}{2}{#3}]], + }, + -- qulisma fused to the next note + { + case = 'LeadingQuilisma', + v = [[\gre@vepisemaorrareaux{0}{\GreCPQuilisma}{0}{0}{#2}{#3}{#4}]], + h = [[\gre@hepisorlineaux{\GreCPQuilismaTwoUp}{\gre@char@he@quilisma{#4}}{2}{#3}]], + }, + -- oriscus fused to the next note + { + case = 'LeadingOriscus', + v = [[\gre@vepisemaorrareaux{0}{\GreCPOriscus}{0}{0}{#2}{#3}{#4}]], + h = [[\gre@hepisorlineaux{\GreCPOriscusTwoUp}{\gre@char@he@oriscus{#4}}{2}{#3}]], + }, + -- flat + { + case = 'Flat', + v = [[\gre@vepisemaorrareaux{0}{\GreCPFlat}{1}{0}{#2}{#3}{#4}]], + h = [[\gre@hepisorlineaux{\GreCPFlat}{\gre@char@he@flat{#4}}{2}{#3}]], + }, + -- sharp + { + case = 'Sharp', + v = [[\gre@vepisemaorrareaux{0}{\GreCPSharp}{1}{0}{#2}{#3}{#4}]], + h = [[\gre@hepisorlineaux{\GreCPSharp}{\gre@char@he@sharp{#4}}{2}{#3}]], + }, + -- natural + { + case = 'Natural', + v = [[\gre@vepisemaorrareaux{0}{\GreCPNatual}{1}{0}{#2}{#3}{#4}]], + h = [[\gre@hepisorlineaux{\GreCPNatural}{\gre@char@he@natural{#4}}{2}{#3}]], + }, +} + +local function emit_offset_macros() + local i, item + for i, item in ipairs(offset_cases) do + log([[\def\GreOCase%s{%d}]], item.case, i) + tex.sprint(string.format([[\def\GreOCase%s{%d}]], item.case, i)) + end + tex.sprint([[\def\gre@v@case#1#2#3#4{]]) + tex.sprint([[\ifcase#1\gre@bug{Invalid note offset case: \string#1}]]) + for i, item in ipairs(offset_cases) do + tex.sprint([[\or]]) + if item.v then + tex.sprint(item.v) + end + end + tex.sprint([[\else\gre@bug{Invalid note 2 offset case: \string#1}]]) + tex.sprint([[\fi}]]) + tex.sprint([[\def\gre@h@case#1#2#3#4{]]) + tex.sprint([[\ifcase#1\gre@bug{Invalid note offset case: \string#1}]]) + for i, item in ipairs(offset_cases) do + tex.sprint([[\or]]) + if item.h then + tex.sprint(item.h) + end + end + tex.sprint([[\else\gre@bug{Invalid note offset case: \string#1}]]) + tex.sprint([[\fi}]]) +end + +gregoriotex.emit_offset_macros = emit_offset_macros |